From 217192b5f5d0a7c1e037a6e4d4890dcf58cc2c4e Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 4 Sep 2015 16:59:47 +0300 Subject: [PATCH 0001/1142] 2.7.0.0 and 2.7.1.0 update 2.7.0.0 1. filecleanup after conversion from added users to residence which ones don't exist in local playerdata directory, except if he is residence owner. 2. file conversion from 30 min to 2-10 sec 3. selection visualizer, shows with particle effect help what you have selected with selection tool (solves huge issue currently this plugin have with new players) Same for commands like /res select residence /res select size and so on. 4. Expand and contract for residence commands. Easy way to expand your residence or contract. Works in same way as worldedit expand and contract, difference that you need to be in residence when performing command. 5. Optimized piston extend event and fixed issue with sticky pistons 7. Ignite event optimization 8. Entity explode event optimization 9. Basic CrackShot support 10. Snowball and fishhook protection when pvp off, prevent from taking knockback in res where is no pvp. Fixes afk player pushing out of residence and killing. 11. Fixed protection for tamed animal in residence with creeper false. Tamed animal wont be killed by creepers explosion 12. Added irontrap door 13. Info for new player on chest place when he don't have any residence "NewPlayerInfo". Solves issue with new player constantly asking how to create residence. 14. Remade language file handler, now its self updating and will add missing lines in all locale files for better translation. 15. Removed version checker (temporally) 16. Simple Color support in locale file. Just to support color codes like &2 17. Added worldguard support based with "residence.worldguard.regionname" permissions. Prevent from creatinf residences inside wg regions if you don't have permission. 18. Added wg region overlap visualizer. Same as with selection, just shows both regions which ones colides to have easy way fixing that issue. 19. Added residence overlaping visualizer, same as wg overlaping 20. Added residence subzone overlaping visualizer, same as wg overlaping 20. Added lithuanian locale 21. Added safe teleportations, requires confirmation if you will drop more than 6 blocks after teleport, ignores if you are in creative/spectator or have fly enabled. 22. Splited config file into config, flags and groups. So now config file self updating when needed. 23. Optimization for move and tp events 24. Prevent teleportation where you don't have move permission. As it don't make seance to teleport where you don't have move perm. 25. Added minimal residence size by total block amount 26. Added minimal residence size by x y z. Prevent from 1x1x1 residence for cheap tp points 27. Fixed projectile punching out items from item frame if it was hit by in example skeletons arrow. 28. New flag leash, prevent from leashing animals and taking them away from residence 29. New flag nofly, puts player on ground, disables fly. Good way to protect against flyers in pvp zones. 30. New flag shear. Prevent sheep shearing in your residence area. 31. New flag mobkilling. Prevent mob killing in your residence. In example if you have mob farm and you don't want to share. 32. Added teleport delay based on move, works same way as essentials warps 33. New flag vehicledestroy. Prevent in example mine cart destruction. 34. Fixed issue with expanding/contracting selection directions some times not getting correct one 35. Added action bar info showing selected land size and cost for easy to see functionality when selecting your new house area 36. Added nex prev pagination buttons for simpler use with multiple pages 37. Changed group flag set spaming into chat to one line with all flags, target name and state. Requires replacing with '&e%1 &2flag set for &e%2 &2to &e%3 &2state' or delete and let it update automaticaly. 38. Added option to get part of money back when deleting residence. Needs to add SellCost: 0.1 in groups file, same as BuyCost. BlockCost will be saved based on current owner group, even after rankup, basesellcost will stay same as on time residence was created to prevent exploiting. 39. Added extra info for /res info to show residence cost when buying that size and when selling, based on residence owner group. 40. Reduced lag spike with alot of residences in database while creating new residence. 41. Added missing locale for /res limit 42. Residence scheduled save moved to async mode to avoid lag spikes on saves. 2.7.1.0 New flag nomobs, despawning monsters from residences in regular intervals Inverted nofly flag Small fix for nofly teleporting to void if there is no ground Expand/contract output changed to sides (East/West/North/South) plus amount --- .gitignore | 34 +- LICENCE.txt | 1348 ++++---- README | 68 +- build.xml | 190 +- src/{languagefiles => Language}/Brazilian.yml | 0 src/{languagefiles => Language}/Chinese.yml | 0 src/{languagefiles => Language}/Czech.yml | 0 src/Language/English.yml | 0 src/{languagefiles => Language}/French.yml | 0 src/{languagefiles => Language}/German.yml | 0 src/{languagefiles => Language}/Hungarian.yml | 0 src/Language/Lithuanian.yml | 649 ++++ src/{languagefiles => Language}/Polish.yml | 0 src/{languagefiles => Language}/Spanish.yml | 0 .../residence/CommentedYamlConfiguration.java | 200 ++ .../bukkit/residence/ConfigManager.java | 643 +++- src/com/bekvon/bukkit/residence/Locale.java | 731 +++++ .../bekvon/bukkit/residence/NewLanguage.java | 86 + .../bekvon/bukkit/residence/Residence.java | 1470 +++++---- .../residence/ResidenceCommandListener.java | 2924 +++++++++-------- src/com/bekvon/bukkit/residence/YmlMaker.java | 90 + .../bukkit/residence/chat/ChatManager.java | 55 +- .../economy/EssentialsEcoAdapter.java | 5 + .../residence/economy/TransactionManager.java | 400 +-- .../residence/economy/rent/RentManager.java | 754 ++--- .../bukkit/residence/itemlist/ItemList.java | 338 +- .../residence/itemlist/WorldItemManager.java | 58 +- .../listeners/ResidenceBlockListener.java | 279 +- .../listeners/ResidenceEntityListener.java | 763 +++-- .../listeners/ResidencePlayerListener.java | 1236 ++++--- .../permissions/BPermissionsAdapter.java | 3 +- .../permissions/PermissionGroup.java | 318 +- .../permissions/PermissionManager.java | 8 +- .../residence/persistance/YMLSaveHelper.java | 1 + .../protection/ClaimedResidence.java | 1684 +++++----- .../residence/protection/CuboidArea.java | 276 +- .../residence/protection/FlagPermissions.java | 1147 +++---- .../residence/protection/LeaseManager.java | 413 ++- .../protection/PermissionListManager.java | 2 + .../protection/ResidenceManager.java | 1117 ++++--- .../protection/ResidencePermissions.java | 795 +++-- .../protection/WorldFlagManager.java | 200 +- .../residence/selection/SelectionManager.java | 997 ++++-- .../selection/WorldEditSelectionManager.java | 99 +- .../residence/selection/WorldGuardUtil.java | 40 + .../spout/ResidenceSpoutListener.java | 2 +- .../bukkit/residence/text/Language.java | 80 +- .../bukkit/residence/text/help/HelpEntry.java | 322 +- .../bukkit/residence/utils/CrackShot.java | 140 + .../bekvon/bukkit/residence/utils/Debug.java | 18 + .../residence/utils/ParticleEffects.java | 1586 +++++++++ .../residence/utils/ReflectionUtils.java | 605 ++++ .../residence/utils/VersionChecker.java | 73 +- .../vaultinterface/ResidenceVaultAdapter.java | 8 +- src/config.yml | 201 -- src/flags.yml | 110 + src/groups.yml | 106 + src/languagefiles/English.yml | 628 ---- src/plugin.yml | 9 +- utils/fix-all-colors.pl | 116 +- utils/res-plots.pl | 230 +- 61 files changed, 14387 insertions(+), 9268 deletions(-) rename src/{languagefiles => Language}/Brazilian.yml (100%) rename src/{languagefiles => Language}/Chinese.yml (100%) rename src/{languagefiles => Language}/Czech.yml (100%) create mode 100644 src/Language/English.yml rename src/{languagefiles => Language}/French.yml (100%) rename src/{languagefiles => Language}/German.yml (100%) rename src/{languagefiles => Language}/Hungarian.yml (100%) create mode 100644 src/Language/Lithuanian.yml rename src/{languagefiles => Language}/Polish.yml (100%) rename src/{languagefiles => Language}/Spanish.yml (100%) create mode 100644 src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java create mode 100644 src/com/bekvon/bukkit/residence/Locale.java create mode 100644 src/com/bekvon/bukkit/residence/NewLanguage.java create mode 100644 src/com/bekvon/bukkit/residence/YmlMaker.java create mode 100644 src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java create mode 100644 src/com/bekvon/bukkit/residence/utils/CrackShot.java create mode 100644 src/com/bekvon/bukkit/residence/utils/Debug.java create mode 100644 src/com/bekvon/bukkit/residence/utils/ParticleEffects.java create mode 100644 src/com/bekvon/bukkit/residence/utils/ReflectionUtils.java create mode 100644 src/flags.yml create mode 100644 src/groups.yml delete mode 100644 src/languagefiles/English.yml diff --git a/.gitignore b/.gitignore index 594088d2d..090006711 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,17 @@ -#Eclipse and netbeans -.classpath -.project -.settings -/nbproject - -#build -/pom.xml -/dist -/build -/bin -/lib -/manifest.mf - -#Repo -README -LICENSE.txt +#Eclipse and netbeans +.classpath +.project +.settings +/nbproject + +#build +/pom.xml +/dist +/build +/bin +/lib +/manifest.mf + +#Repo +README +LICENSE.txt diff --git a/LICENCE.txt b/LICENCE.txt index 94a9ed024..818433ecc 100644 --- a/LICENCE.txt +++ b/LICENCE.txt @@ -1,674 +1,674 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README b/README index 18cab8193..58fb5dec3 100644 --- a/README +++ b/README @@ -1,34 +1,34 @@ -Residence - Self serve area protection system -============================================= - -Official links: -Wiki: http://residencebukkitmod.wikispaces.com/ -IRC: irc://irc.esper.net/Residence -Spigot Resource page: http://www.spigotmc.org/resources/residence-reloaded-1-8.2697/ - -Downloads: -Latest Development Snapshot: https://github.com/bekvon/Residence/raw/dist/dist/Residence.jar -Latest Config.yml: https://github.com/bekvon/Residence/raw/master/src/config.yml - -To build the source yourself, simply download the source: -https://github.com/bekvon/Residence/zipball/master - -Unzip and run ant. - -Need Help?: - -Before asking for help, please check the FAQ(wiki). It has some solutions to frequent problems. - -To help us better assist you, please follow these simple guidelines when asking for help. - -1)Use a service such as http://pastebin.com when sharing errors or configurations. - -2)Include the following version information: Craftbukkit, Residence, Vault. If you are unsure, type in the Minecraft console: "/version [plugin]" left blank will default to Craftbukkit. - -3)Include a paste of your current config.yml from Residence and your permissions.yml from your respective permissions plugin. - -4)Be as detailed as possible when describing your problem. How can we reproduce your problem? - - -If no one is available on the IRC channel, please make a post on the Residence BukkitDev page with the above information. - +Residence - Self serve area protection system +============================================= + +Official links: +Wiki: http://residencebukkitmod.wikispaces.com/ +IRC: irc://irc.esper.net/Residence +Spigot Resource page: http://www.spigotmc.org/resources/residence-reloaded-1-8.2697/ + +Downloads: +Latest Development Snapshot: https://github.com/bekvon/Residence/raw/dist/dist/Residence.jar +Latest Config.yml: https://github.com/bekvon/Residence/raw/master/src/config.yml + +To build the source yourself, simply download the source: +https://github.com/bekvon/Residence/zipball/master + +Unzip and run ant. + +Need Help?: + +Before asking for help, please check the FAQ(wiki). It has some solutions to frequent problems. + +To help us better assist you, please follow these simple guidelines when asking for help. + +1)Use a service such as http://pastebin.com when sharing errors or configurations. + +2)Include the following version information: Craftbukkit, Residence, Vault. If you are unsure, type in the Minecraft console: "/version [plugin]" left blank will default to Craftbukkit. + +3)Include a paste of your current config.yml from Residence and your permissions.yml from your respective permissions plugin. + +4)Be as detailed as possible when describing your problem. How can we reproduce your problem? + + +If no one is available on the IRC channel, please make a post on the Residence BukkitDev page with the above information. + diff --git a/build.xml b/build.xml index c6ccf74fb..0850145a6 100644 --- a/build.xml +++ b/build.xml @@ -1,95 +1,95 @@ - - - - - - - - - - - Building the .jar file. - - - - - Cleaning - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Compiling - - - - - - - - - - - - - Packaging JAR distribution - - - - - - - - - - - - Cleaning up - - - - + + + + + + + + + + + Building the .jar file. + + + + + Cleaning + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Compiling + + + + + + + + + + + + + Packaging JAR distribution + + + + + + + + + + + + Cleaning up + + + + diff --git a/src/languagefiles/Brazilian.yml b/src/Language/Brazilian.yml similarity index 100% rename from src/languagefiles/Brazilian.yml rename to src/Language/Brazilian.yml diff --git a/src/languagefiles/Chinese.yml b/src/Language/Chinese.yml similarity index 100% rename from src/languagefiles/Chinese.yml rename to src/Language/Chinese.yml diff --git a/src/languagefiles/Czech.yml b/src/Language/Czech.yml similarity index 100% rename from src/languagefiles/Czech.yml rename to src/Language/Czech.yml diff --git a/src/Language/English.yml b/src/Language/English.yml new file mode 100644 index 000000000..e69de29bb diff --git a/src/languagefiles/French.yml b/src/Language/French.yml similarity index 100% rename from src/languagefiles/French.yml rename to src/Language/French.yml diff --git a/src/languagefiles/German.yml b/src/Language/German.yml similarity index 100% rename from src/languagefiles/German.yml rename to src/Language/German.yml diff --git a/src/languagefiles/Hungarian.yml b/src/Language/Hungarian.yml similarity index 100% rename from src/languagefiles/Hungarian.yml rename to src/Language/Hungarian.yml diff --git a/src/Language/Lithuanian.yml b/src/Language/Lithuanian.yml new file mode 100644 index 000000000..a93531f16 --- /dev/null +++ b/src/Language/Lithuanian.yml @@ -0,0 +1,649 @@ +# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy +# of this file and modify that instead. This file will be updated automatically by Residence +# when a newer version is detected, and your changes will be overwritten. Once you +# have a copy of this file, change the Language: option under the Residence config.yml +# to whatever you named your copy. +Version: 21 +FieldsVersion: 22 +Language: + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. + #Version 1 Fields + InvalidResidence: Bloga Rezidencija... + InvalidSubzone: Bloga Subzona... + InvalidDirection: Bloga kriptis... + InvalidChannel: Blogas kanalas... + InvalidAmount: Blogas kiekis... + InvalidCost: Bloga kaina... + InvalidDays: Blogas dienu kiekis... + InvalidMaterial: Bloga medziaga... + InvalidBoolean: Bloga reiksme, turi buti true(t) arba false(f) + InvalidArea: Bloga teritorija... + InvalidGroup: Bloga grupe... + InvalidMessageType: Zinutes tipas turi buti enter arba remove. + InvalidList: Blogas sarasas... + InvalidFlag: Blogas Flag... + InvalidFlagState: Bloga flag reiksme, turi buti true(t), false(f), arba remove(r) + AreaExists: Toks ploto vardas jau egzistuoja. + AreaCreate: 'Sukurta rezidencija, ID %1' + AreaDiffWorld: Plotas yra kitame pasaulyje nuo rezidencijos. + AreaCollision: 'Pazymetas plotas kertasi su kita rezidencija %1' + AreaSubzoneCollision: 'Pazymetas plotas kertasi su subzona %1' + AreaNonExist: Toks plotas neegzistuoja. + AreaInvalidName: Blogas ploto pavadinimas... + AreaRename: 'Pervadinti plota is %1 i %2' + AreaRemove: 'Panaikintas plotas %1...' + AreaRemoveLast: Negalima pasalinti paskutinio ploto rezidencijoje. + AreaNotWithinParent: Plotas nera tevinio ploto viduje. + AreaUpdate: Plotas atnaujintas... + AreaMaxPhysical: Jus pasiekete maksimalu galimu plutu skaiciu savo rezidencijai. + AreaSizeLimit: Ploto dydis nera jusu galimybiu ribose. + AreaHighLimit: 'Jus negalite apsaugoti sitaip aukstai, jusu riba yra %1' + AreaLowLimit: 'Jus negalite apsaugoti sitaip giliai, jusu riba yra %1' + NotInResidence: Tu nesi savo rezidencijoje. + InResidence: 'Tu stovi rezidencijoje kurios pavadinimas %1' + ResidenceOwnerChange: 'Rezidencijos %1 savininkas pakeistas i %2' + NonAdmin: Tu nesi rezidencijos administratorius. + AdminOnly: Tik administratorei turi teise i sita komanda. + ChatDisabled: Rezidencijos pokalbiu kanalas isjungtas... + SubzoneRename: 'Pervadinta subzona is %1 i %2' + SubzoneRemove: 'Subzona %1 panaikinta.' + SubzoneCreate: 'Sukurta subzona %1' + SubzoneCreateFail: 'Neimanoma sukurti subzonos %1' + SubzoneExists: 'Subzona %1 jau egzistuoa.' + SubzoneCollide: 'Subzona kertasi su kita sub zona %1' + SubzoneMaxDepth: Pasiekete maksimalu subzonu gyli. + SubzoneSelectInside: Abudu pazimeti taskai turi buti rezidencijos ribose. + SelectPoints: Visu pirma pazimek du taskus pries naudodamas sita komanda! + SelectionSuccess: Zymejimas sekmingas! + SelectionFail: Neteisinga zymejimo komanda... + SelectionBedrock: Zymejimas istemptas iki zemiausio jums leistino tasko. + SelectionSky: Zymejimas istemptas iki auksciausio jums leistino tasko. + SelectionArea: 'Pazimetas plotas %1 rezidencijos %2' + SelectDiabled: Jus neturite prieigos prie pasirinkimu komandu. + NoPermission: Jus neturite tam teises. + OwnerNoPermission: Savininkas neturi tam teises. + ParentNoPermission: Jus neturite teises pakeitimams Parent zonai. + MessageChange: Zinute nustatyta... + FlagSet: Flagas nustatytas... + FlagCheckTrue: 'Flagas %1 priskirtas zaidejui %2 rezidencijai %3, reiksme = %4' + FlagCheckFalse: 'Flagas %1 nepriskirtas zaidejui %2 rezidencijai.' + FlagsCleared: Flagai istrinti. + FlagsDefault: Flagai nustatyti i pradine busena. + Usage: Komandos panaudojimas + InvalidHelp: Blogas pagalbos puslapis... + SubCommands: Sub komandos + InvalidList: Nezinomas saraso tipas, turi buti juodasis sarasas arba ignoravimo sarasas. + MaterialGet: 'Medziagos pavadinimas kadangi ID %1 yra %2' + MarketDisabled: Ekonomika isjungta! + MarketList: parduotuviu sarasas + SelectionTool: Zymejimo irankis + InfoTool: Informacinis irankis + NoBankAccess: Neturi priejimo prie banko. + NotEnoughMoney: Neturi uztektinai pinigu. + BankNoMoney: Nera uztektinai pinigu banke. + BankDeposit: 'Jus pervedete %1 i jusu rezidencijos banka.' + BankWithdraw: 'Jus istraukete %1 is jusu rezidencijos banko.' + MoneyCharged: 'Nuskaiciuota %1 is jusu %2 saskaitos.' + MoneyCredit: 'Kredituotas %1 i jusu %2 saskaita.' + RentDisabled: Nuomuos sistema isjungta. + RentReleaseInvalid: 'Rezidencija %1 nera nuomuojama arba isnuomuota.' + RentSellFail: Negali parduoti rezidencijos jeigu ji yra nuomuojama. + SellRentFail: Negali nuomuoti rezidencijos jeigu ji yra parduodama. + OwnerBuyFail: Negali pirkti savo paties zemes! + OwnerRentFail: Negali nuomuotis savo paties zemes! + AlreadySellFail: Rezidencija jau yra parduodama! + ResidenceBought: 'Jus nusipirkote rezidencija %1' + ResidenceBuy: 'Rezidencija %1 nupirko rezidencija %2 is jusu.' + ResidenceBuyTooBig: Si rezidencija turi didesnius plotus, nei jums leistas maximalus. + ResidenceNotForSale: Rezidencija neparduodama. + ResidenceForSale: 'Rezidencija %1 parduodama uz %2' + ResidenceStopSelling: Rezidencija nebeparduodama. + ResidenceTooMany: Tu jau turi maksimalu rezidenciju skaiciu kuris yra tau leistinas. + ResidenceMaxRent: Tu jau nuomuojiesi maksimalu rezidenciju skaiciu kuris yra tau leistinas. + ResidenceAlreadyRent: Rezidencija jau yra skirta nuomuoti... + ResidenceNotForRent: Rezidencija nenuomuojama... + ResidenceNotRented: Rezidencija neisnuomuota. + ResidenceUnrent: 'Rezidencija %1 daugiau nebeisnuomuota.' + ResidenceRemoveRentable: 'Rezidencija %1 daugiau nebenuomuojama.' + ResidenceForRentSuccess: 'Rezidencija %1 nuos iol nuomuojama uz %2 kas %3 dienas.' + ResidenceRentSuccess: 'Jus issinuomavote rezidencija %1 %2 dienoms.' + ResidenceAlreadyRented: 'Rezidencija %1 siuo metu isnuomuota %2' + ResidenceAlreadyExists: 'Rezidencija tokiu vardu %1 jau egzistuoja.' + ResidenceCreate: 'Jus sukurete rezidencija %1!' + ResidenceRename: 'Pervadinote rezidencija is %1 i %2' + ResidenceRemove: 'Rezidencija %1 panaikinta...' + RentDisabled: Nuoma isjungta... + RentDisableRenew: 'Rezidencija %1 automatiksai nebeissinuomuos pasibaigus nuomos laikui.' + RentEnableRenew: 'Rezidencija %1 automatiksai issinuomuos pasibaigus nuomos laikui.' + RentableDisableRenew: '%1 nebeprates nuomos laiko jam pasibaigus.' + RentableEnableRenew: '%1 automatiskai prates nuomos laika jam pasibaigus.' + LandForSale: Parduodama zeme + SellAmount: Pardavimu kiekis + LeaseExpire: Nuomos sutarties pasibaigimo laikas + RentExpire: Nuomos pasibaigimo laikas + RentableAutoRenew: Isnuomojamas automatinis atnaujinimas + RentAutoRenew: Nuoma automatinio atnaujinimo + RentableLand: Nuomuojama zeme + ListMaterialAdd: '%1 pridetas prie rezidencijos %2' + ListMaterialRemove: '%1 iskeldintas is %2' + ItemBlacklisted: Sitas blokas cia nera leidziamas. + RentedModifyDeny: Negali keisti isnuomuotos rezidencijos. + WorldPVPDisabled: Pasulinis PVP isjungtas. + NoPVPZone: Cia tu negali kautis. + FlagDeny: 'Tu neturi %1 privilegiju.' + FlagSetDeny: 'Savininkas neturi priejimo prie Flago %1' + SelectPoint: 'Pasirinktas %1 pazimejimo taskas' + ResidenceChat: 'Perjungti rezidencijos poklabiai %1' + ResidenceMoveDeny: 'Tu neturi judejimo teisiu sitoje rezidencijoje %1' + TeleportDeny: Tu neturi teleporto teisiu i sita rezidencija. + TeleportSuccess: 'Nuteleportuotas!' + TeleportNear: Nuteleportuotas prie rezidencijos. + TeleportNoFlag: Tu neturi teleporto teisiu i sita rezidencija. + SetTeleportLocation: Nustatyta teleporto vieta... + HelpPageHeader: 'Pagalbos puslapiai - %1 - puslapis <%2 is %3>' + ListExists: Sarasas jau egzistuoja... + ListRemoved: Sarasas pasalintas... + ListCreate: 'Sukurtas sarasas %1' + LeaseRenew: 'Nuomos sutartis galioja iki %1' + LeaseRenewMax: Nuomos sutartis atnaujinta i leistina maksimalu + LeaseNotExpire: Nera tokios nuomos sutarties, arba tokia nuomos sutartis nesibaigia. + LeaseRenewalCost: 'Atnaujinimo kaina plotui %1 yra %2' + LeaseInfinite: Nuomos sutarties laikas nustatytas neribotam laikui... + PermissionsApply: Leidimai pritaikyti rezidencijai. + PhysicalAreas: Fiziniai Plotai + CurrentArea: Einamieji Plotai + LeaseExpire: Nuomos pabaiga + NotOnline: Zaidejas turi buti prisijunges. + ResidenceGiveLimits: Negalima duoti rezidencijos pazymetam zaidejui, nes ji yra uz pazymeto zaidejo ribu. + ResidenceGive: 'Jus atiduodate rezidencija %1 zaidejui %2' + ResidenceRecieve: 'Jus gavote rezidencija %1 is zaidejo %2' + #Version 4 New Fields + #ResidenceListAll: 'Residences - ' - removed, use GenericPage now + ResidenceListAllEmpty: Jokios rezidencijos neegzistuoja serveryje... + InvalidPage: Klaidingas puslapis... + NextPage: Kitas puslapis + #Version 10 New Fields + RemovePlayersResidences: 'Panaikintos visos rezidencijos priklausiancios zaidejui %1' + GenericPage: 'Puslapis %1 is %2' + #Version 11 New Fields + ResidenceRentedBy: 'Issinuomuota %1' + #Version 14 New Fields + InvalidCharacters: Aptikti negaliojantys zenklai... + InvalidNameCharacters: Varda sudaro neleistini zenklai... + #Version 15 New Fields + DeleteConfirm: 'Ar tikrai norite panaikinti rezidencija %1, naudok "/res confirm" kad patvirtinti.' + #Version 18 New Fields + SelectTooHigh: Ispejimas, pasirinkimas nuejo virs zemelapio virsunes, ribojama. + SelectTooLow: Ispejimas, pasirinkimas nuejo zemiau zemelapio pagrindo, ribojama. + WorldEditNotFound: WorldEdit nebuvo aptiktas. + #Version 19 New Fields + NoResHere: Nera cia rezidencijos. + DeleteSubzoneConfirm: 'Ar tikrai norite istrinti subzona %1, naudok "/res confirm" kad patvirtinti.' + #Version 20 New Fields + SubzoneOwnerChange: 'Subzonos %1 savininkas pakeistas i %2' + CoordsTop: 'X:%1 Y:%2 Z:%3' + CoordsBottom: 'X:%1 Y:%2 Z:%3' + #Version 21 New Fields + AdminToggle: 'Automatinis rezidencijos admin jungiklis pasuktas %1' + #Version 22 New Fields + NoSpawn: 'Jus neturite leidimo judeti jusu atsiradimo taske. Perkelimas' + CompassTargetReset: 'Jusu kompasas buvo perstatytas' + CompassTargetSet: 'Jusu kompasas dabar nurodo i %1' + #The below lines are mostly a word bank for various uses. + #Version 1 Fields + Description: Aprasymas + Land: Zeme + Cost: Kaina + Selection: Pazymeta + Total: Isviso + Size: dydis + Expanding: Isplesta + Shifting: Perkelta + Up: Aukstyn + Down: Zemyn + Error: Klaida + Flags: Veleveles + Your: Tavo + Group: Grupe + Others: Kiti + Primary: Pirminis + Secondary: Antrinis + Selection: Pazymeta + Moved: Perkelta + Status: Statusas + Available: Galimas + On: Ijungtas + Off: Isjungtas + Name: Vardas + Lists: Sarasas + Residences: Rezidencijos + Residence: Rezidencija + Count: Kiekis + Owner: Savininkas + #Version 4 Fields + World: Pasaulis + #Version 12 Fields + Subzones: Subzona + #Version 20 Fields + CoordsT: Virsutines koordinates + CoordsB: Apatines koordinates + #Version 22 Fields + TurnOn: 'ijungti' + TurnOff: 'isjungti' + +# This is the help / usage messages for each command. +# It follows this format: +# +# Description: +# Info: +# SubCommands: +# - these follow the same format, and each sub command can have its own subcommands +# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that +# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). +# Add a page number after the ? mark to see that page. + +HelpLinesPerPage: 7 +CommandHelp: #this is just a holder node, that holds the entire help + Description: Ieina pagalba del rezidenciju + SubCommands: #this is the actual beginning of all commands + res: #main residence command + Description: Pagrindines rezidencijos komandos + Info: + - 'Paziurek pamokas: http://ltcraft.lt/?page_id=311' + - 'Naudok /[komanda] ? kad perziureti issamiau.' + - 'Naudok /res flags kad perziureti apie galimus leidymus.' + SubCommands: + select: #selection commands + Description: Zymejimo komandos + Info: + - 'Sia komanda pasirenkamas plotas naudojimui su rezidencija.' + - '/res select [x] [y] [z] - parenka bloku spinduli, jums bunant viduje.' + SubCommands: + coords: + Description: Rodomos pazymetos koordinates + Info: + - 'Naudojimas: /res select coords' + size: + Description: Rodomas pazymetas dydis + Info: + - 'Naudojimas: /res select size' + cost: + Description: Rodoma pasirinkimo kaina + Info: + - 'Naudojimas: /res select cost' + vert: + Description: Isplesti pasirinkima vertikaliai + Info: + - 'Naudojimas: /res select vert' + - 'Isples pasirinkima taip aukstai ir taip zemai kaip leistina.' + sky: + Description: Isplesti pasirinkima i dangu + Info: + - 'Naudojimas: /res select sky' + - 'Isples tiek aukstai kiek jums yra leista.' + bedrock: + Description: Isplesti pasirinkima iki Bedrock + Info: + - 'Naudojimas: /res select bedrock' + - 'Isples tiek zemai kiek jums yra leista.' + expand: + Description: Isplesti pasirinkima kryptimi. + Info: + - 'Naudojimas: /res select expand ' + - 'Isplecia i ta krypti i kuria ziurite.' + shift: + Description: Paslinkti pasirinkima kryptimi + Info: + - 'Naudojimas: /res select shift ' + - 'Pastumia jusu pasirinkima i ta krypti i kuria ziurite.' + chunk: + Description: Pazymi dali kurioje esate siuo metu. + Info: + - 'Naudojimas: /res select chunk' + - 'Pazymi dali kurioje stovite siuo metu.' + residence: + Description: Isrinkite egzistuojanti plota rezidencijoje. + Info: + - 'Naudojimas /res select ' + - 'Isrenka egzistuojanti plota rezidencijoje.' + worldedit: + Description: nustatyti esama WorldEdit pasirinkima. + Info: + - 'Naudojimas /res select worldedit' + - 'nustato pasirinkta arena naudojant esama WorldEdit pasirinkima.' + create: #Sukurymo komandos + Description: Sukurti rezidencija + Info: + - 'Naudojimas: /res create ' + remove: #Panaikinimo komandos + Description: Panaikinti rezidencija. + Info: + - 'Naudojimas: /res remove ' + removeall: + Description: Panaikinti visas rezidencijas priklausiancias zaidejui. + Info: + - 'Naudojimas: /res removeall [savininkas]' + - 'Panaikina visas rezidencijas priklausiancias zaidejui.' + - 'reikalingas /resadmin jei tu tai naudosi ant kazkieno ir saves.' + confirm: + - 'Naudojimas: /res confirm' + - 'Patvirtinti rezidencijos panaikinima.' + subzone: + Description: Sukurti subzonas rezidencijoje. + Info: + - 'Naudojimas: /res subzone [subzonos pavadinimas]' + - 'Jeigu rezidencijos vardas istrinamas, bus bandyta naudoti rezidencija kurioje jus stovite.' + area: + Description: valdyti fizines arenas rezidencijoje. + SubCommands: + list: + Description: sarasas fiziniu arenu rezidencijoje. + Info: + - 'Naudojimas: /res area list [residence] ' + listall: + Description: sarasas koordinaciu ir kita informacija apie arenas. + Info: + - 'Naudojimas: /res area listall [residence] ' + add: + Description: prideti fizines arenas rezidencijoje + Info: + - 'Naudojimas: /res area add [residence] [areaID]' + - 'Jus pirma turite pazymeti du taskus rezidencijoje.' + remove: + Description: Pasalinti fizines arenas is rezidencijos + Info: + - 'Naudojimas: /res area remove [residence] [areaID]' + replace: + Description: pakeisti fizines arenas rezidencijoje + Info: + - 'Naudojimas: /res area replace [residence] [areaID]' + - 'Just privalote pirma pazymeti du taskus rezidencijoje.' + - 'PakeiÄiant arena reikÄ—s sumokÄ—ti dydžio skirtumÄ…, jei naujas plotas yra didesnis.' + info: + Description: Parodyti informacija apie rezidencija. + Info: + - 'Naudojimas: /res info ' + - 'nustojus rodyti informacija rezidencijai kurioje esate.' + limits: + Description: Parodytu jusu limitus. + Info: + - 'Naudojimas: /res limits' + - 'Parodo jusus galimus limitus kuriant ir monipuliuojant rezidencija.' + message: + Description: Valdyti rezidencijos ieinancius / iseinacius pranesimus + Info: + - 'Naudojimas: /res message [enter/leave] [message]' + - 'nustatyti isvykimo ar atvykimo zinute.' + - 'Naudojimas: /res message remove [enter/leave]' + - 'pasalina atvykimo ar isvykimo zinute.' + lease: + Description: Valdyti rezidencijos nuoma + Info: + - 'Naudojimas: /res lease [renew/cost] [residence]' + - '/res lease parodo atsinaujinancia rezidencijos nuomos kaina.' + - '/res lease renew parodo ar turi uztenkamai pinigu issinuomoti rezidencija.' + SubCommands: + set: + Description: Nustatyti nuomos laika (admin only) + Info: + - 'Naudojimas: /resadmin lease set [residence] [#days/infinite]' + - 'nustato specialu nuomos laika dienomis arba neribotai.' + bank: + Description: Valdyti rezidencijos pinigus + Info: + - 'Naudojimas: /res bank [deposit/withdraw] [amount]' + - 'jus turite stoveti rezidencijoje' + - 'jus turite tureti +bank velevele rezidencijoje.' + tp: + Description: Teleportuotis i rezidencija + Info: + - 'Naudojimas: /res tp [residence]' + - 'Telepotuoja jus i rezidencija, just privalote tureti +tp velevele arba buti rezidencijos seimininkas.' + - 'jusu privilegiju grupe taipat turi tureti leidima teleportuotis i rezidencijas.' + tpset: + Description: Nustatyti teleportacijos vieta rezidencijoje + Info: + - 'Naudojimas: /res tpset' + - 'nustatyts teleportacijos vieta i rezidencija ten kur jus stovite.' + - 'just turite stoveti rezidencijoje naudodami sia komanda.' + - 'Jus turite buti rezidencijos savininkas arba tureti +admin velevele.' + set: + Description: Nustatyti bendras veliavas rezidencijoje + Info: + - 'Naudojimas: /res set [flag] [true/false/remove]' + - 'Noredami paziureti veleveliu sarasa rasykite /res flags ?' + - 'Å ios vÄ—liavos taikomos visiems žaidÄ—jams, kurie neturi vÄ—liavu konkreÄiai pritaikytu jiems. ( /res set ?)' + pset: + Description: Nustatyti veliavas specifiniam zaidejui rezidencijoje. + Info: + - 'Naudojimas: /res pset [player] [flag] [true/false/remove]' + - 'Naudojimas: /res pset [player] removeall' + - 'perziureti veleveliu sarasa naudokite /res flags ?' + gset: + Description: Nustatyti veliavas specifinei grupei rezidencijoje. + Info: + - 'Naudojimas: /res gset [group] [flag] [true/false/remove]' + - 'perziureti veleveliu sarasa naudokite /res flags ?' + lset: + Description: pakeisti juodojo saraso ir ignoriamuju saraso nustatymus + Info: + - 'Naudojimas: /res lset [blacklist/ignorelist] [material]' + - 'Naudojimas: /res lset info' + - 'medziagos itraukimas i juodaji sarasa neleidzia buti padetas rezidencijoje.' + - 'ignoriamuju sarasas padaro specifine medziaga neapsaugota rezidencijos.' + flags: + Description: Veliavu sarasas + Info: + - 'flagu reiksmes, pagrinde naudoti "true" kai nori leisti ir "false" kai nori uzdrausti naudoti komanda ar veiksma.' + - 'build - leisti arba uzdrausti statyti' + - 'use - leisti arba uzdrausti duru, svirciu, mygtuku ir panasei naudojima...' + - 'move - leisti arba uzdrausti judejima jusu rezidencijoje.' + - 'container - leisti arba uzdrausti naudojima skriniu, krosniu, dalytuvu ir panasei naudojima...' + - 'trusted - Suteikia statybos, naudojimo, judejimo, skriniu ir teleporto teises' + - 'place - leisti arba uzdrausti tik bloku padejima jusu rezidencijoje.' + - 'destroy - leisti arba uzdrausti tik bloku naikinima jusu rezidencijoje.' + - 'pvp - leisti arba uzdrausti pvp jusu rezidencijoje' + - 'tp - leisti arba uzdrausti teleportuotis i jusu rezidencija.' + - 'admin - suteikia teise keisti flagus rezidencijoje.' + - 'subzone - suteike teise kurti subzonas rezidencijoje.' + - 'monsters - leisti arba uzdrausti monstru atsiradyma jusu rezidencijoje' + - 'animals - leisti arba uzdrausti gyvunu atsiradima jusu rezidencijoje.' + - 'healing - nustatyk i "true" is visi esantis bus pagydyti' + - 'tnt - leisti arba uzdrausti TNT sprogimus' + - 'creeper - leisti arba uzdrausti kreeperiu sprogimus' + - 'ignite - leisti arba uzdrausti ugnies iziebima.' + - 'firespread - leisti arba uzdrausti ugnies plitima.' + - 'bucket - leisti arba uzdrausti kibiro naudojima.' + - 'flow - leisti arba uzdrausti vandens tekejima.' + - 'lavaflow - leisti arba uzdrausti lavos tekejima' + - 'waterflow - leisti arba uzdrausti vandens tekejima' + - 'damage - leisti arba uzdrausti patiriama zala nuo monstru' + - 'piston - leisti arba uzdrausti stumoklius.' + - 'hidden - paslepti rezidencija nuo list komandos' + - 'cake - leisti arba uzdrausti valgyti torta' + - 'lever - leisti arba uzdrausti naudotis svirtimis' + - 'button - leisti arba uzdrausti naudotis mygtukais' + - 'diode - leisti arba uzdrausti diodus' + - 'door - leisti arba uzdrausti naudotis durimis ir liukais' + - 'table - leisti arba uzdrausti naudotis darbastaleis' + - 'enchant - leisti arba uzdrausti naudotis kerejimo stalais' + - 'brew - leisti arba uzdrausti naudotis eleksiru staliukais' + - 'bed - leisti arba uzdrausti naudotis lovomis' + - 'button - leisti arba uzdrausti naudotis mygtukais' + - 'pressure - leisti arba uzdrausti naudotis slegio plokstem' + - 'note - leisti arba uzdrausti naudotis natu blokais' + - 'redstone - suteikia lever, diode, button, pressure, note flagus' + - 'craft - suteikia table, enchant, brew flagus' + - 'burn - leisti arba uzdrausti monstru uzsiliepsnojima nuo saules' + - 'melt - Apsaugo nuo sniego istirpimo' + - 'form - Apsaugo nuo sniego susiformavimo' + - 'animalkilling - Apsaugo nuo gyvunu zudymo' + - 'mobkilling - Apsaugo nuo mobu zudymo' + - 'drops - Apsaugo nuo item metimu rese' + - 'enderpearl - Apsaugo nuo enderperl naudojimo rese' + - 'falldamage - Apsaugo nuo falldamage' + - 'portal - Apsaugo nuo portalu naudojimo' + - 'villagerkilling - Apsaugo nuo kaimieciu zudimo' + - 'vehicleprotect - Apsaugo vagoneliu nugriovima' + - 'lightning - Apsaugo nuo zaibu' + - 'grow - Sustabdo augmenijos augima' + - 'hunger - Netampama alkanu' + - 'fishing - Apsaugo nuo zvejojimo' + - 'eggs - Apsaugo nuo kiausiniu metimo' + - 'pigzap - Apsaugo kiaules nuo pasivertimo i pigzombie' + - 'slimesplit - Apsaugo slime pasidalinima' + - 'shear - Apsaugo nuo aviu nukirpimo' + - 'pigsaddle - Apsaugo nuo balno uzdejimo ant kiaules' + - 'trade - Apsaugo nuo prekybos su kaimieciais' + - 'day - Diena visa laika' + - 'night - Naktis visa laika' + - 'weather - Lija visa laika' + list: + Description: Rezidenciju sarasas + Info: + - 'Naudojimas: /res list ' + - 'Lists all the residences a player owns (except hidden ones).' + - 'Jeigu sarasuose ziurimos savo rezidencijos, matos ir pasleptos.' + - 'Norint pamatyti visu serverio zaideju rezidencijas, naudokite /res listall.' + listhidden: + Description: Pamatyti pasleptas rezidencijas (TIK ADMINISTRATORIAMS) + Info: + - 'Naudojimas: /res listhidden ' + - 'Parodo sarasa pasleptu zaideju rezidenciju.' + listall: + Description: List All Residences + Info: + - 'Naudojimas: /res listall ' + - 'parodo sarasa viso serverio zaideju rezidenciju. (isskyrus pasleptu)' + listallhidden: + Description: Pamatyti pasleptas rezidencijas (TIK ADMINISTRATORIAMS) + Info: + - 'Naudojimas: /res listhidden ' + - 'Parodo viso serverio vpasleptu rezidenciju sarasa.' + sublist: + Description: Sarasas rezidenciju subzonu + Info: + - 'Naudojimas: /res sublist ' + - 'subzonu sarasas kartu su rezidencijomis.' + default: + Description: Restartuoti rezidencija iki pradiniu nustatymu. + Info: + - 'Naudojimas: /res default ' + - '. Restartuoti rezidencija iki pradiniu nustatymu.' + rename: + Description: Pervadina rezidencija. + Info: + - 'Naudojimas: /res rename [OldName] [NewName]' + - 'Tu turi buti savininkas arba adminas kad tai galetum padaryti.' + - 'Vardas turi buti laisvas.' + mirror: + Description: Veidrodines veleveles + Info: + - 'Naudojimas: /res mirror [Source Residence] [Target Residence]' + - 'Suvienodink dvieju rezidenciju flagus. Kad tai daryti turite buti abie ju rezidenciju adminas' + market: + Description: Buy, Sell, or Rent Residences + Info: + - 'Naudojimas: /res market ? for more info' + SubCommands: + info: + Description: Gauk ekonomine informacija apie rezidencija + Info: + - 'Naudojimas: /res market info [residence]' + - 'Parodo ar rezidencija nomuojama,parduodama. parodo jos kaina.' + list: + Description: sarasas isnomuojamu rezidenciju. + Info: + - 'Naudojimas: /res market list' + sell: + Description: Rezidencijos pardavimas + Info: + - 'Naudojimas: /res market sell [pavadinimas] [suma]' + - 'pradeda pardavineti rezidencija [suma] pinigu.' + - 'kitas zaidejas gali pirkti rezidencija su komanda /res market buy' + buy: + Description: rezidencijos pirkimas + Info: + - 'Naudojimas: /res market buy [residence]' + - 'perkama rezidencija jeigu ji parduodama.' + unsell: + Description: Sustabdyt rezidencijos pardavinejima. + Info: + - 'Naudojimas: /res market unsell [residence]' + rent: + Description: Isnuomoti rezidencija. + Info: + - 'Naudojimas: /res market rent [residence] ' + - 'Isnuomoja rezidencija. Automatini atnaujinima galima ijungti ir isjungti true arba false . Jeigu True nuoma automatiskai prasites' + rentable: + Description: Padaryti rezidencija nuomojama. + Info: + - 'Naudojimas: /res market rentable [residence] [cost] [days] ' + - 'padaro rezidencija nomuojama uz [cost] pinigu uz [days] dienu. jai nustatytas true, rezidencija automatiskai prasites.' + release: + Description: pasalinti rezidencija is nuomojamuju. + Info: + - 'Naudojimas: /res market release [residence]' + - 'jeigu esate nuomininkas, sis namas nebepriklausys jums .' + - 'jeigu esate seimininkas, si komanda nurtrauks jusu rezidencijos nuoma.' + current: + Description: Parodo rezidencija kurioje esate. + Info: + - 'Naudojimas: /res current' + lists: + Description: Isanksto nustatytu leidimu sarasas + Info: + - 'Isanksto nustatytu leidimu sarasas kuri galima pritaikyti rezidencijai.' + SubCommands: + add: + Description: Prideti sarasa + Info: + - 'Naudojimas: /res lists add ' + remove: + Description: Pasalinti sarasa + Info: + - 'Naudojimas: /res lists remove ' + apply: + Description: Taikyti sarasa rezidencijai + Info: + - 'Naudojimas: /res lists apply ' + set: + Description: Nustatyti veliava + Info: + - 'Naudojimas: /res lists set ' + pset: + Description: Nustatyti zaidejo veliava + Info: + - 'Naudojimas: /res lists pset ' + gset: + Description: Nustatyti grupes veliava + Info: + - 'Naudojimas: /res lists gset ' + view: + Description: Perziureti sarasa. + Info: + - 'Naudojimas: /res lists view ' + server: + Description: Nustatyti zemes savininka (tik administratoriam). + Info: + - 'Naudojimas: /resadmin server [residence]' + - 'padaryti rezidencija uzimta.' + setowner: + Description: pakeisti rezidencijos seimininka (tik administratoriam). + Info: + - 'Naudojimas: /resadmin setowner [residence] [player]' + resreload: + Description: perkrauti rezidencija (tik administratoriam). + Info: + - 'Naudojimas: /resreload' + resload: + Description: uzkrauti rezidencijos saugojimo faila (nesaugu, tik administratoriam). + Info: + - 'Naudojimas: /resload' + - 'Nesaugi komanda, neapsaugoti rezidencija pirma.' + - 'uzkrauna rezidencijos issaugojimo faila ir restartuoja rezidencija.' + version: + Description: parodyti rezidencijos versija + Info: + - 'Naudojimas: /res version' diff --git a/src/languagefiles/Polish.yml b/src/Language/Polish.yml similarity index 100% rename from src/languagefiles/Polish.yml rename to src/Language/Polish.yml diff --git a/src/languagefiles/Spanish.yml b/src/Language/Spanish.yml similarity index 100% rename from src/languagefiles/Spanish.yml rename to src/Language/Spanish.yml diff --git a/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java b/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java new file mode 100644 index 000000000..1870b65bd --- /dev/null +++ b/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java @@ -0,0 +1,200 @@ +package com.bekvon.bukkit.residence; + +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.HashMap; + +import org.bukkit.configuration.file.YamlConfiguration; + +import com.google.common.io.Files; + +/* + * Based on CommentedYamlConfiguration by dumptruckman + * https://github.com/dumptruckman/PluginBase/blob/master/bukkit/src/main/java/com/dumptruckman/minecraft/pluginbase/config/CommentedYamlConfiguration.java + */ + +public class CommentedYamlConfiguration extends YamlConfiguration { + private HashMap comments; + + public CommentedYamlConfiguration() { + super(); + comments = new HashMap(); + } + + @Override + public void save(String file) throws IOException { + if (file == null) { + throw new IllegalArgumentException("File cannot be null"); + } + + save(new File(file)); + } + + @Override + public void save(File file) throws IOException { + if (file == null) { + throw new IllegalArgumentException("File cannot be null"); + } + + Files.createParentDirs(file); + + String data = insertComments(saveToString()); + + //FileWriter writer = new FileWriter(file); + + PrintWriter writer = new PrintWriter(file, "UTF-8"); + + //Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); + + try { + writer.write(data); + } finally { + writer.close(); + } + } + + private String insertComments(String yaml) { + // if there's comments to add, we need to add comments + if (!comments.isEmpty()) { + // String array of each line in the config file + String[] yamlContents = yaml.split("[" + System.getProperty("line.separator") + "]"); + + // This will hold the entire newly formatted config + StringBuilder newContents = new StringBuilder(); + // This holds the current path the lines are at in the config + StringBuilder currentPath = new StringBuilder(); + // This tells if the specified path has already been commented + boolean commentedPath = false; + // This flags if the line is a node or unknown text. + boolean node = false; + // The depth of the path. (number of words separated by periods - 1) + int depth = 0; + + // This will cause the first line to be ignored. + boolean firstLine = true; + // Loop through the config lines + for (final String line : yamlContents) { + if (firstLine) { + firstLine = false; + if (line.startsWith("#")) { + continue; + } + } + // If the line is a node (and not something like a list value) + if (line.contains(": ") || (line.length() > 1 && line.charAt(line.length() - 1) == ':')) { + // This is a new node so we need to mark it for commenting (if there are comments) + commentedPath = false; + // This is a node so flag it as one + node = true; + + // Grab the index of the end of the node name + int index = 0; + index = line.indexOf(": "); + if (index < 0) { + index = line.length() - 1; + } + // If currentPath is empty, store the node name as the currentPath. (this is only on the first iteration, i think) + if (currentPath.toString().isEmpty()) { + currentPath = new StringBuilder(line.substring(0, index)); + } else { + // Calculate the whitespace preceding the node name + int whiteSpace = 0; + for (int n = 0; n < line.length(); n++) { + if (line.charAt(n) == ' ') { + whiteSpace++; + } else { + break; + } + } + // Find out if the current depth (whitespace * 2) is greater/lesser/equal to the previous depth + if (whiteSpace / 2 > depth) { + // Path is deeper. Add a . and the node name + currentPath.append(".").append(line.substring(whiteSpace, index)); + depth++; + } else if (whiteSpace / 2 < depth) { + // Path is shallower, calculate current depth from whitespace (whitespace / 2) and subtract that many levels from the currentPath + int newDepth = whiteSpace / 2; + for (int i = 0; i < depth - newDepth; i++) { + currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), ""); + } + // Grab the index of the final period + int lastIndex = currentPath.lastIndexOf("."); + if (lastIndex < 0) { + // if there isn't a final period, set the current path to nothing because we're at root + currentPath = new StringBuilder(); + } else { + // If there is a final period, replace everything after it with nothing + currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); + } + // Add the new node name to the path + currentPath.append(line.substring(whiteSpace, index)); + // Reset the depth + depth = newDepth; + } else { + // Path is same depth, replace the last path node name to the current node name + int lastIndex = currentPath.lastIndexOf("."); + if (lastIndex < 0) { + // if there isn't a final period, set the current path to nothing because we're at root + currentPath = new StringBuilder(); + } else { + // If there is a final period, replace everything after it with nothing + currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); + } + //currentPath = currentPath.replace(currentPath.substring(currentPath.lastIndexOf(".")), ""); + currentPath.append(line.substring(whiteSpace, index)); + } + } + } else { + node = false; + } + StringBuilder newLine = new StringBuilder(line); + if (node) { + String comment = null; + if (!commentedPath) { + // If there's a comment for the current path, retrieve it and flag that path as already commented + comment = comments.get(currentPath.toString()); + } + if (comment != null && !comment.isEmpty()) { + // Add the comment to the beginning of the current line + newLine.insert(0, System.getProperty("line.separator")).insert(0, comment); + comment = null; + commentedPath = true; + } + } + newLine.append(System.getProperty("line.separator")); + // Add the (modified) line to the total config String + newContents.append(newLine.toString()); + } + + return newContents.toString(); + } + return yaml; + } + + /** + * Adds a comment just before the specified path. The comment can be multiple lines. An empty string will indicate a blank line. + * + * @param path Configuration path to add comment. + * @param commentLines Comments to add. One String per line. + */ + public void addComment(String path, String... commentLines) { + StringBuilder commentstring = new StringBuilder(); + String leadingSpaces = ""; + for (int n = 0; n < path.length(); n++) { + if (path.charAt(n) == '.') { + leadingSpaces += " "; + } + } + for (String line : commentLines) { + if (!line.isEmpty()) { + line = leadingSpaces + "# " + line; + } + if (commentstring.length() > 0) { + commentstring.append(System.getProperty("line.separator")); + } + commentstring.append(line); + } + comments.put(path, commentstring.toString()); + } +} diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 5c131003e..a50818ed3 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -3,16 +3,25 @@ * and open the template in the editor. */ package com.bekvon.bukkit.residence; + +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.ParticleEffects; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.bukkit.Material; +import org.bukkit.configuration.Configuration; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; /** * @@ -21,8 +30,8 @@ public class ConfigManager { protected String defaultGroup; protected boolean useLeases; + protected boolean ResMoneyBack; protected boolean enableEconomy; - protected String economySystem; protected boolean adminsOnly; protected boolean allowEmptyResidences; protected int infoToolId; @@ -34,260 +43,554 @@ public class ConfigManager { protected int rentCheckInterval; protected int leaseCheckInterval; protected int autoSaveInt; + protected int VisualizerRange; + protected int VisualizerShowFor; + protected int VisualizerUpdateInterval; + protected int MinimalResSize; + protected int MinimalResX; + protected int MinimalResY; + protected int MinimalResZ; + protected int TeleportDelay; + protected int VisualizerRowSpacing; + protected int VisualizerCollumnSpacing; protected boolean flagsInherit; protected ChatColor chatColor; protected boolean chatEnable; protected boolean actionBar; + protected boolean ActionBarOnSelection; + protected boolean visualizer; protected int minMoveUpdate; protected FlagPermissions globalCreatorDefaults; protected FlagPermissions globalResidenceDefaults; - protected Map globalGroupDefaults; + protected Map globalGroupDefaults; protected String language; protected boolean preventBuildInRent; protected boolean stopOnSaveError; protected boolean legacyperms; protected String namefix; protected boolean showIntervalMessages; + protected boolean ShowNoobMessage; protected boolean spoutEnable; + protected boolean AutoMobRemoval; + protected int AutoMobRemovalInterval; protected boolean enableLeaseMoneyAccount; - protected boolean enableDebug; + protected boolean enableDebug = false; protected boolean versionCheck; + protected boolean useVisualizer; protected List customContainers; protected List customBothClick; protected List customRightClick; private boolean enforceAreaInsideArea; - public ConfigManager(FileConfiguration config) - { - globalCreatorDefaults = new FlagPermissions(); - globalResidenceDefaults = new FlagPermissions(); - globalGroupDefaults = new HashMap(); - this.load(config); - } - - private void load(FileConfiguration config) { - defaultGroup = config.getString("Global.DefaultGroup", "default").toLowerCase(); - adminsOnly = config.getBoolean("Global.AdminOnlyCommands", false); - useLeases = config.getBoolean("Global.UseLeaseSystem", false); - leaseAutoRenew = config.getBoolean("Global.LeaseAutoRenew", true); - enableEconomy = config.getBoolean("Global.EnableEconomy", false); - economySystem = config.getString("Global.EconomySystem", "iConomy"); - infoToolId = config.getInt("Global.InfoToolId", Material.STRING.getId()); - selectionToolId = config.getInt("Global.SelectionToolId", Material.WOOD_AXE.getId()); - adminOps = config.getBoolean("Global.AdminOPs", true); - multiworldPlugin = config.getString("Global.MultiWorldPlugin"); - enableRentSystem = config.getBoolean("Global.EnableRentSystem", false); - rentCheckInterval = config.getInt("Global.RentCheckInterval", 10); - leaseCheckInterval = config.getInt("Global.LeaseCheckInterval", 10); - autoSaveInt = config.getInt("Global.SaveInterval", 10); - flagsInherit = config.getBoolean("Global.ResidenceFlagsInherit", false); - minMoveUpdate = config.getInt("Global.MoveCheckInterval", 500); - chatEnable = config.getBoolean("Global.ResidenceChatEnable", true); - actionBar = config.getBoolean("Global.UseActionBar", true); - enforceAreaInsideArea = config.getBoolean("Global.EnforceAreaInsideArea", false); - language = config.getString("Global.Language","English"); - globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", config.getConfigurationSection("Global")); - globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", config.getConfigurationSection("Global")); - preventBuildInRent = config.getBoolean("Global.PreventRentModify", true); - stopOnSaveError = config.getBoolean("Global.StopOnSaveFault",true); - legacyperms = config.getBoolean("Global.LegacyPermissions",false); - namefix = config.getString("Global.ResidenceNameRegex",null);//"[^a-zA-Z0-9\\-\\_]" - showIntervalMessages = config.getBoolean("Global.ShowIntervalMessages", false); - spoutEnable = config.getBoolean("Global.EnableSpout", false); - enableLeaseMoneyAccount = config.getBoolean("Global.EnableLeaseMoneyAccount", true); - enableDebug = config.getBoolean("Global.EnableDebug", false); - versionCheck = config.getBoolean("Global.VersionCheck", true); - customContainers = config.getIntegerList("Global.CustomContainers"); - customBothClick = config.getIntegerList("Global.CustomBothClick"); - customRightClick = config.getIntegerList("Global.CustomRightClick"); - ConfigurationSection node = config.getConfigurationSection("Global.GroupDefault"); - if(node!=null) - { - Set keys = node.getConfigurationSection(defaultGroup).getKeys(false); - if(keys!=null) - { - for(String key: keys) - { - globalGroupDefaults.put(key, FlagPermissions.parseFromConfigNode(key, config.getConfigurationSection("Global.GroupDefault"))); - } - } - } - try { - chatColor = ChatColor.valueOf(config.getString("Global.ResidenceChatColor", "DARK_PURPLE")); - } catch (Exception ex) { - chatColor = ChatColor.DARK_PURPLE; - } - } - - public boolean useLegacyPermissions() - { - return legacyperms; + protected ParticleEffects SelectedFrame; + protected ParticleEffects SelectedSides; + + protected ParticleEffects OverlapFrame; + protected ParticleEffects OverlapSides; + + public ConfigManager(FileConfiguration config, FileConfiguration flags, FileConfiguration groups) { + globalCreatorDefaults = new FlagPermissions(); + globalResidenceDefaults = new FlagPermissions(); + globalGroupDefaults = new HashMap(); + UpdateConfigFile(); + this.load(flags, groups); + } + + private synchronized static void copySetting(Configuration reader, Configuration writer, String path) { + writer.set(path, reader.get(path)); + } + + public static String Colors(String text) { + return ChatColor.translateAlternateColorCodes('&', text); + } + + public static List GetConfigIntArray(String path, List list, CommentedYamlConfiguration writer, YamlConfiguration conf) { + conf.addDefault(path, list); + copySetting(conf, writer, path); + return conf.getIntegerList(path); + } + + public static Boolean GetConfigBoolean(String path, Boolean text, CommentedYamlConfiguration writer, YamlConfiguration conf) { + conf.addDefault(path, text); + text = conf.getBoolean(path); + copySetting(conf, writer, path); + return text; + } + + public static int GetConfigInt(String path, int text, CommentedYamlConfiguration writer, YamlConfiguration conf) { + conf.addDefault(path, text); + text = conf.getInt(path); + copySetting(conf, writer, path); + return text; + } + + public static Double GetConfigDouble(String path, Double text, CommentedYamlConfiguration writer, YamlConfiguration conf) { + conf.addDefault(path, text); + text = conf.getDouble(path); + copySetting(conf, writer, path); + return text; + } + + public static String GetConfigString(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + conf.addDefault(path, text); + text = conf.getString(path); + if (colorize) + text = Colors(text); + copySetting(conf, writer, path); + return text; + } + + public static List GetConfigArray(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + conf.addDefault(path, text); + text = ColorsArray(conf.getStringList(path), colorize); + copySetting(conf, writer, path); + return text; + } + + public static List GetConfigIntArray(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + conf.addDefault(path, text); + text = conf.getIntegerList(path); + copySetting(conf, writer, path); + return text; + } + + public static List ColorsArray(List text, Boolean colorize) { + List temp = new ArrayList(); + for (String part : text) { + if (colorize) + part = Colors(part); + temp.add(Colors(part)); + } + return temp; + } + + @SuppressWarnings("deprecation") + void UpdateConfigFile() { + + File f = new File(Residence.instance.getDataFolder(), "config.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + writer.addComment("Global", "These are Global Settings for Residence."); + writer.addComment("Global.Language", "This loads the .yml file in the Residence Language folder", + "All Residence text comes from this file. (NOT DONE YET)"); + language = GetConfigString("Global.Language", "English", writer, conf, false); + + writer.addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", + "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); + selectionToolId = GetConfigInt("Global.SelectionToolId", Material.WOOD_AXE.getId(), writer, conf); + + writer.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", + "Simply equip this tool and hit a location inside the residence and it will display the info for it."); + infoToolId = GetConfigInt("Global.InfoToolId", Material.STRING.getId(), writer, conf); + + writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", + "Reducing this will increase the load on the server.", + "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); + minMoveUpdate = GetConfigInt("Global.MoveCheckInterval", 500, writer, conf); + + writer.addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", + "Use 0 to disable"); + TeleportDelay = GetConfigInt("Global.Tp.TeleportDelay", 3, writer, conf); + + writer.addComment("Global.Size.MinimalSize", "Minimal size of residence in blocks", "1000 is 10x10x10 residence size"); + MinimalResSize = GetConfigInt("Global.Size.MinimalSize", 100, writer, conf); + MinimalResX = GetConfigInt("Global.Size.MinimalX", 10, writer, conf); + MinimalResY = GetConfigInt("Global.Size.MinimalY", 10, writer, conf); + MinimalResZ = GetConfigInt("Global.Size.MinimalZ", 10, writer, conf); + + writer.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); + autoSaveInt = GetConfigInt("Global.SaveInterval", 10, writer, conf); + + writer.addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); + defaultGroup = GetConfigString("Global.DefaultGroup", "default", writer, conf, false); + + writer.addComment("Global.UseLeaseSystem", "Enable / Disable the Lease System."); + useLeases = GetConfigBoolean("Global.UseLeaseSystem", false, writer, conf); + + writer.addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); + ResMoneyBack = GetConfigBoolean("Global.ResMoneyBack", false, writer, conf); + + writer.addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); + leaseCheckInterval = GetConfigInt("Global.LeaseCheckInterval", 10, writer, conf); + + writer.addComment("Global.LeaseAutoRenew", + "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); + leaseAutoRenew = GetConfigBoolean("Global.LeaseAutoRenew", true, writer, conf); + + writer.addComment("Global.EnablePermissions", + "Whether or not to use the Permissions system in conjunction with this config."); + GetConfigBoolean("Global.EnablePermissions", true, writer, conf); + + writer.addComment("Global.LegacyPermissions", "Set to true if NOT using Permissions or PermissionsBukkit, or using a really old version of Permissions"); + legacyperms = GetConfigBoolean("Global.LegacyPermissions", false, writer, conf); + + writer.addComment("Global.EnableEconomy", + "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); + enableEconomy = GetConfigBoolean("Global.EnableEconomy", true, writer, conf); + + writer.addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); + enableRentSystem = GetConfigBoolean("Global.EnableRentSystem", true, writer, conf); + + writer.addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); + rentCheckInterval = GetConfigInt("Global.RentCheckInterval", 10, writer, conf); + + writer.addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); + chatEnable = GetConfigBoolean("Global.ResidenceChatEnable", true, writer, conf); + + writer.addComment("Global.ActionBar.General", "True for ActionBar - new component in 1.8", "False for old Messaging in chat enter/leave Residence messages"); + actionBar = GetConfigBoolean("Global.ActionBar.General", true, writer, conf); + ActionBarOnSelection = GetConfigBoolean("Global.ActionBar.ShowOnSelection", true, writer, conf); + + writer.addComment("Global.ResidenceChatColor", "Color of residence chat."); + try { + chatColor = ChatColor.valueOf(GetConfigString("Global.ResidenceChatColor", "DARK_PURPLE", writer, conf, true)); + } catch (Exception ex) { + chatColor = ChatColor.DARK_PURPLE; + } + + writer.addComment("Global.AdminOnlyCommands", + "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); + adminsOnly = GetConfigBoolean("Global.AdminOnlyCommands", false, writer, conf); + + writer.addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); + adminOps = GetConfigBoolean("Global.AdminOPs", true, writer, conf); + + writer.addComment("Global.MultiWorldPlugin", + "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", + "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); + multiworldPlugin = GetConfigString("Global.MultiWorldPlugin", "Multiverse-Core", writer, conf, false); + + writer.addComment("Global.ResidenceFlagsInherit", "Setting this to true causes subzones to inherit flags from their parent zones."); + flagsInherit = GetConfigBoolean("Global.ResidenceFlagsInherit", true, writer, conf); + + writer.addComment("Global.PreventRentModify", "Setting this to false will allow rented residences to be modified by the renting player."); + preventBuildInRent = GetConfigBoolean("Global.PreventRentModify", true, writer, conf); + + writer.addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); + stopOnSaveError = GetConfigBoolean("Global.StopOnSaveFault", true, writer, conf); + + writer.addComment( + "This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); + namefix = GetConfigString("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]", writer, conf, false); + + writer.addComment("Global.ShowIntervalMessages", + "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); + showIntervalMessages = GetConfigBoolean("Global.ShowIntervalMessages", false, writer, conf); + + writer.addComment("Global.ShowNoobMessage", + "Setting this to true sends a tutorial message to the new player when he places chest on ground."); + ShowNoobMessage = GetConfigBoolean("Global.ShowNoobMessage", true, writer, conf); + + writer.addComment("Global.CustomContainers", + "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); + customContainers = GetConfigIntArray("Global.CustomContainers", new ArrayList(), writer, conf); + customBothClick = GetConfigIntArray("Global.CustomBothClick", new ArrayList(), writer, conf); + customRightClick = GetConfigIntArray("Global.CustomRightClick", new ArrayList(), writer, conf); + + writer.addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundries"); + useVisualizer = GetConfigBoolean("Global.Visualizer.Use", true, writer, conf); + writer.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", + "Keep it no more as 30, as player cant see more than 16 blocks"); + VisualizerRange = GetConfigInt("Global.Visualizer.Range", 25, writer, conf); + writer.addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); + VisualizerShowFor = GetConfigInt("Global.Visualizer.ShowFor", 5000, writer, conf); + writer.addComment("Global.Visualizer.updateInterval", "How often in miliseconds update particles for player"); + VisualizerUpdateInterval = GetConfigInt("Global.Visualizer.updateInterval", 20, writer, conf); + writer.addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); + VisualizerRowSpacing = GetConfigInt("Global.Visualizer.RowSpacing", 2, writer, conf); + if (VisualizerRowSpacing < 1) + VisualizerRowSpacing = 1; + writer.addComment("Global.Visualizer.CollumnSpacing", "Spacing in blocks between particle effects for collums"); + VisualizerCollumnSpacing = GetConfigInt("Global.Visualizer.CollumnSpacing", 2, writer, conf); + if (VisualizerCollumnSpacing < 1) + VisualizerCollumnSpacing = 1; + writer.addComment("Global.Visualizer.Selected", + "Particle effect names. Posible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", + " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", + " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", + " droplet, take, mobappearance"); + + SelectedFrame = ParticleEffects.fromName(GetConfigString("Global.Visualizer.Selected.Frame", "happyVillager", writer, conf, false)); + if (SelectedFrame == null) { + SelectedFrame = ParticleEffects.VILLAGER_HAPPY; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } + + SelectedSides = ParticleEffects.fromName(GetConfigString("Global.Visualizer.Selected.Sides", "reddust", writer, conf, false)); + if (SelectedSides == null) { + SelectedSides = ParticleEffects.REDSTONE; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); + } + + OverlapFrame = ParticleEffects.fromName(GetConfigString("Global.Visualizer.Overlap.Frame", "FLAME", writer, conf, false)); + if (OverlapFrame == null) { + OverlapFrame = ParticleEffects.FLAME; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Overlap Frame with this name, it was set to default"); + } + + OverlapSides = ParticleEffects.fromName(GetConfigString("Global.Visualizer.Overlap.Sides", "FLAME", writer, conf, false)); + if (OverlapSides == null) { + OverlapSides = ParticleEffects.FLAME; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); + } + + writer.addComment("Global.AutoMobRemoval", + "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.","This is quite heavy on server side, so enable only if you really need this feature"); + AutoMobRemoval = GetConfigBoolean("Global.AutoMobRemoval.Use", false, writer, conf); + writer.addComment("Global.AutoMobRemoval.Interval", + "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); + AutoMobRemovalInterval = GetConfigInt("Global.AutoMobRemoval.Interval", 3, writer, conf); + + enforceAreaInsideArea = GetConfigBoolean("Global.EnforceAreaInsideArea", false, writer, conf); + spoutEnable = GetConfigBoolean("Global.EnableSpout", false, writer, conf); + enableLeaseMoneyAccount = GetConfigBoolean("Global.EnableLeaseMoneyAccount", true, writer, conf); + + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void load(FileConfiguration flags, FileConfiguration groups) { + + globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", flags.getConfigurationSection("Global")); + globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", flags.getConfigurationSection("Global")); + + ConfigurationSection node = groups.getConfigurationSection("Global.GroupDefault"); + if (node != null) { + Set keys = node.getConfigurationSection(defaultGroup).getKeys(false); + if (keys != null) { + for (String key : keys) { + globalGroupDefaults.put(key, FlagPermissions.parseFromConfigNodeAsList(key, defaultGroup, "false")); + } + } + } + } + + public boolean useVisualizer() { + return useVisualizer; + } + + public int getVisualizerRange() { + return VisualizerRange; + } + + public int getVisualizerShowFor() { + return VisualizerShowFor; + } + + public int getVisualizerRowSpacing() { + return VisualizerRowSpacing; + } + + public int getVisualizerCollumnSpacing() { + return VisualizerCollumnSpacing; + } + + public int getVisualizerUpdateInterval() { + return VisualizerUpdateInterval; + } + + public ParticleEffects getSelectedFrame() { + return SelectedFrame; + } + + public ParticleEffects getSelectedSides() { + return SelectedSides; + } + + public ParticleEffects getOverlapFrame() { + return OverlapFrame; + } + + public ParticleEffects getOverlapSides() { + return OverlapSides; + } + + public int getTeleportDelay() { + return TeleportDelay; + } + + public boolean useLegacyPermissions() { + return legacyperms; + } + + public int getMinimalResSize() { + return MinimalResSize; + } + + public int getMinimalResX() { + return MinimalResX; + } + + public int getMinimalResY() { + return MinimalResY; + } + + public int getMinimalResZ() { + return MinimalResZ; } public String getDefaultGroup() { - return defaultGroup; + return defaultGroup; } - public String getResidenceNameRegex() - { - return namefix; + public String getResidenceNameRegex() { + return namefix; } public boolean enableEconomy() { - return enableEconomy && Residence.getEconomyManager()!=null; + return enableEconomy && Residence.getEconomyManager() != null; } - public boolean enabledRentSystem() - { - return enableRentSystem && enableEconomy(); + public boolean enabledRentSystem() { + return enableRentSystem && enableEconomy(); } public boolean useLeases() { - return useLeases; + return useLeases; + } + + public boolean useResMoneyBack() { + return ResMoneyBack; } public boolean allowAdminsOnly() { - return adminsOnly; + return adminsOnly; } - public boolean allowEmptyResidences() - { - return allowEmptyResidences; - } - public int getInfoToolID() - { - return infoToolId; + + public boolean allowEmptyResidences() { + return allowEmptyResidences; } - public int getSelectionTooldID() - { - return selectionToolId; + + public int getInfoToolID() { + return infoToolId; } - public boolean getOpsAreAdmins() - { - return adminOps; + public int getSelectionTooldID() { + return selectionToolId; } - public String getMultiworldPlugin() - { - return multiworldPlugin; + public boolean getOpsAreAdmins() { + return adminOps; } - public boolean autoRenewLeases() - { - return leaseAutoRenew; + public String getMultiworldPlugin() { + return multiworldPlugin; } - public String getEconomySystem() - { - return economySystem; + public boolean autoRenewLeases() { + return leaseAutoRenew; } - public int getRentCheckInterval() - { - return rentCheckInterval; + public int getRentCheckInterval() { + return rentCheckInterval; } - public int getLeaseCheckInterval() - { - return leaseCheckInterval; + public int getLeaseCheckInterval() { + return leaseCheckInterval; } - public int getAutoSaveInterval() - { - return autoSaveInt; + public int getAutoSaveInterval() { + return autoSaveInt; } - public boolean flagsInherit() - { - return flagsInherit; + public boolean flagsInherit() { + return flagsInherit; } - public boolean chatEnabled() - { - return chatEnable; + public boolean chatEnabled() { + return chatEnable; } - public boolean useActionBar() - { - return actionBar; + public boolean useActionBar() { + return actionBar; } - - public ChatColor getChatColor() - { - return chatColor; + + public boolean useActionBarOnSelection() { + return ActionBarOnSelection; } - public int getMinMoveUpdateInterval() - { - return minMoveUpdate; + public ChatColor getChatColor() { + return chatColor; } - public FlagPermissions getGlobalCreatorDefaultFlags() - { - return globalCreatorDefaults; + public int getMinMoveUpdateInterval() { + return minMoveUpdate; } - public FlagPermissions getGlobalResidenceDefaultFlags() - { - return globalResidenceDefaults; + public FlagPermissions getGlobalCreatorDefaultFlags() { + return globalCreatorDefaults; } - public Map getGlobalGroupDefaultFlags() - { - return globalGroupDefaults; + public FlagPermissions getGlobalResidenceDefaultFlags() { + return globalResidenceDefaults; } - public String getLanguage() - { - return language; + public Map getGlobalGroupDefaultFlags() { + return globalGroupDefaults; } - public boolean preventRentModify() - { - return preventBuildInRent; + public String getLanguage() { + return language; } - public boolean stopOnSaveError() - { - return stopOnSaveError; + + public boolean preventRentModify() { + return preventBuildInRent; } - public boolean showIntervalMessages() - { - return showIntervalMessages; + + public boolean stopOnSaveError() { + return stopOnSaveError; } - public boolean enableSpout() - { - return spoutEnable; + + public boolean showIntervalMessages() { + return showIntervalMessages; } - public boolean enableLeaseMoneyAccount() - { - return enableLeaseMoneyAccount; + + public boolean ShowNoobMessage() { + return ShowNoobMessage; } - public boolean debugEnabled() - { - return enableDebug; + + public boolean enableSpout() { + return spoutEnable; } - public boolean versionCheck() - { - return versionCheck; + public boolean AutoMobRemoval() { + return AutoMobRemoval; } - public List getCustomContainers() - { - return customContainers; + public int AutoMobRemovalInterval() { + return AutoMobRemovalInterval; } - - public List getCustomBothClick() - { - return customBothClick; + + public boolean enableLeaseMoneyAccount() { + return enableLeaseMoneyAccount; } - - public List getCustomRightClick() - { - return customRightClick; + + public boolean debugEnabled() { + return enableDebug; + } + + public boolean versionCheck() { + return versionCheck; + } + + public List getCustomContainers() { + return customContainers; + } + + public List getCustomBothClick() { + return customBothClick; + } + + public List getCustomRightClick() { + return customRightClick; } public boolean getEnforceAreaInsideArea() { - return enforceAreaInsideArea; + return enforceAreaInsideArea; } } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java new file mode 100644 index 000000000..37ef11ca3 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -0,0 +1,731 @@ +package com.bekvon.bukkit.residence; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.configuration.Configuration; +import org.bukkit.configuration.file.YamlConfiguration; + +public class Locale { + public static String GetConfigString(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + conf.addDefault(path, text); + text = conf.getString(path); + if (colorize) + text = Colors(text); + copySetting(conf, writer, path); + return text; + } + + public static List GetConfigArray(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + conf.addDefault(path, text); + text = ColorsArray(conf.getStringList(path), colorize); + copySetting(conf, writer, path); + return text; + } + + public static List ColorsArray(List text, Boolean colorize) { + List temp = new ArrayList(); + for (String part : text) { + if (colorize) + part = Colors(part); + temp.add(Colors(part)); + } + return temp; + } + + private synchronized static void copySetting(Configuration reader, Configuration writer, String path) { + writer.set(path, reader.get(path)); + } + + public static String Colors(String text) { + return ChatColor.translateAlternateColorCodes('&', text); + } + + // Language file + public static void LoadLang(String lang) { + + File f = new File(Residence.instance.getDataFolder(), "Language" + File.separator + lang + ".yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + StringBuilder header = new StringBuilder(); + header.append("NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy"); + header.append(System.getProperty("line.separator")); + header.append("of this file and modify that instead. This file will be updated automatically by Residence"); + header.append(System.getProperty("line.separator")); + header.append("when a newer version is detected, and your changes will be overwritten. Once you "); + header.append(System.getProperty("line.separator")); + header.append("have a copy of this file, change the Language: option under the Residence config.yml"); + header.append(System.getProperty("line.separator")); + header.append("to whatever you named your copy."); + header.append(System.getProperty("line.separator")); + conf.options().copyDefaults(true); + + writer.options().header(header.toString()); + + writer.addComment("Language.NewPlayerInfo", "The below lines represent various messages residence sends to the players.", + "Note that some messages have variables such as %1 that are inserted at runtime."); + + GetConfigArray("Language.NewPlayerInfo", Arrays.asList("&e******************************************************", + "Please use wooden axe to select opposite sides of your home and execute command &2/res create yourHouseName", + "&e******************************************************"), writer, conf, true); + + GetConfigString("Language.NewPlayerInfo", "&ePlease use wooden axe to select opposite sides of your home and execute command &2/res create your name", writer, + conf, true); + GetConfigString("Language.InvalidResidence", "Invalid Residence...", writer, conf, true); + GetConfigString("Language.InvalidSubzone", "Invalid Subzone...", writer, conf, true); + GetConfigString("Language.InvalidDirection", "Invalid Direction...", writer, conf, true); + GetConfigString("Language.InvalidChannel", "Invalid Channel...", writer, conf, true); + GetConfigString("Language.InvalidAmount", "Invalid Amount...", writer, conf, true); + GetConfigString("Language.InvalidCost", "Invalid Cost...", writer, conf, true); + GetConfigString("Language.InvalidDays", "Invalid number of days...", writer, conf, true); + GetConfigString("Language.InvalidMaterial", "Invalid Material...", writer, conf, true); + GetConfigString("Language.InvalidBoolean", "Invalid value, must be true(t) or false(f)", writer, conf, true); + GetConfigString("Language.InvalidArea", "Invalid Area...", writer, conf, true); + GetConfigString("Language.InvalidGroup", "Invalid Group...", writer, conf, true); + GetConfigString("Language.InvalidMessageType", "Message type must be enter or remove.", writer, conf, true); + // GetConfigString("Language.InvalidList", "Invalid List...", writer, + // conf, true); + GetConfigString("Language.InvalidFlag", "Invalid Flag...", writer, conf, true); + GetConfigString("Language.InvalidFlagState", "Invalid flag state, must be true(t), false(f), or remove(r)", writer, conf, true); + GetConfigString("Language.AreaExists", "Area name already exists.", writer, conf, true); + GetConfigString("Language.AreaCreate", "Residence Area created, ID %1", writer, conf, true); + GetConfigString("Language.AreaDiffWorld", "Area is in a different world from residence.", writer, conf, true); + GetConfigString("Language.AreaCollision", "Area collides with residence %1", writer, conf, true); + GetConfigString("Language.AreaSubzoneCollision", "Area collides with subzone %1", writer, conf, true); + GetConfigString("Language.AreaNonExist", "No such area exists.", writer, conf, true); + GetConfigString("Language.AreaInvalidName", "Invalid Area Name...", writer, conf, true); + GetConfigString("Language.AreaToSmallTotal", "Selected area smaller than allowed minimal (%1)", writer, conf, true); + GetConfigString("Language.AreaToSmallX", "Your x selection length is too small. %1 allowed %2", writer, conf, true); + GetConfigString("Language.AreaToSmallY", "Your selection height is too small. %1 allowed %2", writer, conf, true); + GetConfigString("Language.AreaToSmallZ", "Your z selection length is too small. %1 allowed %2", writer, conf, true); + GetConfigString("Language.AreaRename", "Renamed area %1 to %2", writer, conf, true); + GetConfigString("Language.AreaRemove", "Removed area %1...", writer, conf, true); + GetConfigString("Language.AreaRemoveLast", "Cannot remove the last area in a residence.", writer, conf, true); + GetConfigString("Language.AreaNotWithinParent", "Area is not within parent area.", writer, conf, true); + GetConfigString("Language.AreaUpdate", "Area Updated...", writer, conf, true); + GetConfigString("Language.AreaMaxPhysical", "You've reached the max physical areas allowed for your residence.", writer, conf, true); + GetConfigString("Language.AreaSizeLimit", "Area size is not within your allowed limits.", writer, conf, true); + GetConfigString("Language.AreaHighLimit", "You cannot protect this high up, your limit is %1", writer, conf, true); + GetConfigString("Language.AreaLowLimit", "You cannot protect this deep, your limit is %1", writer, conf, true); + GetConfigString("Language.NotInResidence", "You are not in a Residence.", writer, conf, true); + GetConfigString("Language.Kicked", "You were kicked from residence", writer, conf, true); + GetConfigString("Language.InResidence", "You are standing in Residence %1", writer, conf, true); + GetConfigString("Language.ResidenceOwnerChange", "Residence %1 owner changed to %2", writer, conf, true); + GetConfigString("Language.NonAdmin", "You are not a Residence admin.", writer, conf, true); + GetConfigString("Language.AdminOnly", "Only admins have access to this command.", writer, conf, true); + GetConfigString("Language.ChatDisabled", "Residence Chat Disabled...", writer, conf, true); + GetConfigString("Language.SubzoneRename", "Renamed subzone %1 to %2", writer, conf, true); + GetConfigString("Language.SubzoneRemove", "Subzone %1 removed.", writer, conf, true); + GetConfigString("Language.SubzoneCreate", "Created Subzone %1", writer, conf, true); + GetConfigString("Language.SubzoneCreateFail", "Unable to create subzone %1", writer, conf, true); + GetConfigString("Language.SubzoneExists", "Subzone %1 already exists.", writer, conf, true); + GetConfigString("Language.SubzoneCollide", "Subzone collides with subzone %1", writer, conf, true); + GetConfigString("Language.SubzoneMaxDepth", "You have reached the maximum allowed subzone depth.", writer, conf, true); + GetConfigString("Language.SubzoneSelectInside", "Both selection points must be inside the residence.", writer, conf, true); + GetConfigString("Language.SelectPoints", "Select two points first before using this command!", writer, conf, true); + GetConfigString("Language.SelectOverlap", "&cSelected points overlap with &e%1 &cregion!", writer, conf, true); + GetConfigString("Language.SelectionSuccess", "Selection Successful!", writer, conf, true); + GetConfigString("Language.SelectionFail", "Invalid select command...", writer, conf, true); + GetConfigString("Language.SelectionBedrock", "Selection expanded to your lowest allowed limit.", writer, conf, true); + GetConfigString("Language.SelectionSky", "Selection expanded to your highest allowed limit.", writer, conf, true); + GetConfigString("Language.SelectionArea", "Selected area %1 of residence %2", writer, conf, true); + GetConfigString("Language.SelectDiabled", "You don't have access to selections commands.", writer, conf, true); + GetConfigString("Language.NoPermission", "You dont have permission for this.", writer, conf, true); + GetConfigString("Language.OwnerNoPermission", "The owner does not have permission for this.", writer, conf, true); + GetConfigString("Language.ParentNoPermission", "You don't have permission to make changes to the parent zone.", writer, conf, true); + GetConfigString("Language.MessageChange", "Message Set...", writer, conf, true); + GetConfigString("Language.FlagSet", "&e%1 &2flag set for &e%2 &2to &e%3 &2state", writer, conf, true); + GetConfigString("Language.FlagCheckTrue", "Flag %1 applys to player %2 for residence %3, value = %4", writer, conf, true); + GetConfigString("Language.FlagCheckFalse", "Flag %1 does not apply to player %2 for residence.", writer, conf, true); + GetConfigString("Language.FlagsCleared", "Flags Cleared.", writer, conf, true); + GetConfigString("Language.FlagsDefault", "Flags set to default.", writer, conf, true); + GetConfigString("Language.Usage", "Command Usage", writer, conf, true); + GetConfigString("Language.InvalidHelp", "Invalid Help Page...", writer, conf, true); + GetConfigString("Language.SubCommands", "Sub Commands", writer, conf, true); + GetConfigString("Language.InvalidList", "Unknown list type, must be blacklist or ignorelist.", writer, conf, true); + GetConfigString("Language.MaterialGet", "The material name for ID %1 is %2", writer, conf, true); + GetConfigString("Language.MarketDisabled", "Economy Disabled!", writer, conf, true); + GetConfigString("Language.MarketList", "Market List", writer, conf, true); + GetConfigString("Language.SelectionTool", "Selection Tool", writer, conf, true); + GetConfigString("Language.InfoTool", "Info Tool", writer, conf, true); + GetConfigString("Language.NoBankAccess", "You dont have bank access.", writer, conf, true); + GetConfigString("Language.NotEnoughMoney", "You dont have enough money.", writer, conf, true); + GetConfigString("Language.BankNoMoney", "Not enough money in the bank.", writer, conf, true); + GetConfigString("Language.BankDeposit", "You deposit %1 into the residence bank.", writer, conf, true); + GetConfigString("Language.BankWithdraw", "You withdraw %1 from the residence bank.", writer, conf, true); + GetConfigString("Language.MoneyCharged", "Charged %1 to your %2 account.", writer, conf, true); + GetConfigString("Language.MoneyAdded", "Got %1 to your %2 account.", writer, conf, true); + GetConfigString("Language.MoneyCredit", "Credited %1 to your %2 account.", writer, conf, true); + // GetConfigString("Language.RentDisabled", "Rent system is disabled.", + // writer, conf, true); + GetConfigString("Language.RentReleaseInvalid", "Residence %1 is not rented or for rent.", writer, conf, true); + GetConfigString("Language.RentSellFail", "Cannot sell a Residence if it is for rent.", writer, conf, true); + GetConfigString("Language.SellRentFail", "Cannot rent a Residence if it is for sale.", writer, conf, true); + GetConfigString("Language.OwnerBuyFail", "Cannot buy your own land!", writer, conf, true); + GetConfigString("Language.OwnerRentFail", "Cannot rent your own land!", writer, conf, true); + GetConfigString("Language.AlreadySellFail", "Residence already for sale!", writer, conf, true); + GetConfigString("Language.ResidenceBought", "You bought residence %1", writer, conf, true); + GetConfigString("Language.ResidenceBuy", "Residence %1 has bought residence %2 from you.", writer, conf, true); + GetConfigString("Language.ResidenceBuyTooBig", "This residence has areas bigger then your allowed max.", writer, conf, true); + GetConfigString("Language.ResidenceNotForSale", "Residence is not for sale.", writer, conf, true); + GetConfigString("Language.ResidenceForSale", "Residence %1 is now for sale for %2", writer, conf, true); + GetConfigString("Language.ResidenceStopSelling", "Residence is no longer for sale.", writer, conf, true); + GetConfigString("Language.ResidenceTooMany", "You already own the max number of residences your allowed to.", writer, conf, true); + GetConfigString("Language.ResidenceMaxRent", "You already are renting the maximum number of residences your allowed to.", writer, conf, true); + GetConfigString("Language.ResidenceAlreadyRent", "Residence is already for rent...", writer, conf, true); + GetConfigString("Language.ResidenceNotForRent", "Residence not for rent...", writer, conf, true); + GetConfigString("Language.ResidenceNotRented", "Residence not rented.", writer, conf, true); + GetConfigString("Language.ResidenceUnrent", "Residence %1 has been unrented.", writer, conf, true); + GetConfigString("Language.ResidenceRemoveRentable", "Residence %1 is no longer rentable.", writer, conf, true); + GetConfigString("Language.ResidenceForRentSuccess", "Residence %1 is now for rent for %2 every %3 days.", writer, conf, true); + GetConfigString("Language.ResidenceRentSuccess", "You have rented Residence %1 for %2 days.", writer, conf, true); + GetConfigString("Language.ResidenceAlreadyRented", "Residence %1 has currently been rented to %2", writer, conf, true); + GetConfigString("Language.ResidenceAlreadyExists", "A residence named %1 already exists.", writer, conf, true); + GetConfigString("Language.ResidenceCreate", "You have created residence %1!", writer, conf, true); + GetConfigString("Language.ResidenceRename", "Renamed Residence %1 to %2", writer, conf, true); + GetConfigString("Language.ResidenceRemove", "Residence %1 has been removed...", writer, conf, true); + GetConfigString("Language.RentDisabled", "Rent is disabled...", writer, conf, true); + GetConfigString("Language.RentDisableRenew", "Residence %1 will now no longer re-rent upon expire.", writer, conf, true); + GetConfigString("Language.RentEnableRenew", "Residence %1 will now automatically re-rent upon expire.", writer, conf, true); + GetConfigString("Language.RentableDisableRenew", "%1 will no longer renew rentable status upon expire.", writer, conf, true); + GetConfigString("Language.RentableEnableRenew", "%1 will now automatically renew rentable status upon expire.", writer, conf, true); + GetConfigString("Language.LandForSale", "Land For Sale", writer, conf, true); + GetConfigString("Language.SellAmount", "Sell Amount", writer, conf, true); + GetConfigString("Language.LeaseExpire", "Lease Expire Time", writer, conf, true); + GetConfigString("Language.RentExpire", "Rent Expire Time", writer, conf, true); + GetConfigString("Language.RentableAutoRenew", "Rentable Auto Renew", writer, conf, true); + GetConfigString("Language.RentAutoRenew", "Rent Auto Renew", writer, conf, true); + GetConfigString("Language.RentableLand", "Rentable Land", writer, conf, true); + GetConfigString("Language.ListMaterialAdd", "%1 added to the residence %2", writer, conf, true); + GetConfigString("Language.ListMaterialRemove", "%1 removed from the residence %2", writer, conf, true); + GetConfigString("Language.ItemBlacklisted", "You are blacklisted from using this item here.", writer, conf, true); + GetConfigString("Language.RentedModifyDeny", "Cannot modify a rented residence.", writer, conf, true); + GetConfigString("Language.WorldPVPDisabled", "World PVP is disabled.", writer, conf, true); + GetConfigString("Language.NoPVPZone", "No PVP zone.", writer, conf, true); + GetConfigString("Language.FlagDeny", "You dont have %1 permission here.", writer, conf, true); + GetConfigString("Language.FlagSetDeny", "Owner does not have access to flag %1", writer, conf, true); + GetConfigString("Language.SelectPoint", "Placed %1 Selection Point", writer, conf, true); + GetConfigString("Language.ResidenceChat", "Residence chat toggled %1", writer, conf, true); + GetConfigString("Language.ResidenceMoveDeny", "You dont have movement permission for Residence %1", writer, conf, true); + GetConfigString("Language.ResidenceFlagDeny", "You dont have %1 permission for Residence %2", writer, conf, true); + GetConfigString("Language.TeleportDeny", "You dont have teleport access.", writer, conf, true); + GetConfigString("Language.TeleportSuccess", "Teleported!", writer, conf, true); + GetConfigString("Language.TeleportConfirm", + "&eThis teleport is not safe, you will fall for &c%1 &eblocks. Use &2/res tpconfirm &eto perform teleportation anyways.", writer, conf, true); + GetConfigString("Language.TeleportStarted", + "&eTeleportation to %1 started, don't move for next %2 sec.", writer, conf, true); + GetConfigString("Language.TeleportCanceled", + "&eTeleportation canceled!", writer, conf, true); + GetConfigString("Language.NoTeleportConfirm", "There is no teleports waiting for confirmation!", writer, conf, true); + GetConfigString("Language.TeleportNear", "Teleported to near residence.", writer, conf, true); + GetConfigString("Language.TeleportNoFlag", "You dont have teleport access for that residence.", writer, conf, true); + GetConfigString("Language.SetTeleportLocation", "Teleport Location Set...", writer, conf, true); + GetConfigString("Language.HelpPageHeader", "Help Pages - %1 - Page <%2 of %3>", writer, conf, true); + GetConfigString("Language.ListExists", "List already exists...", writer, conf, true); + GetConfigString("Language.ListRemoved", "List removed...", writer, conf, true); + GetConfigString("Language.ListCreate", "Created list %1", writer, conf, true); + GetConfigString("Language.LeaseRenew", "Lease valid until %1", writer, conf, true); + GetConfigString("Language.LeaseRenewMax", "Lease renewed to maximum allowed", writer, conf, true); + GetConfigString("Language.LeaseNotExpire", "No such lease, or lease does not expire.", writer, conf, true); + GetConfigString("Language.LeaseRenewalCost", "Renewal cost for area %1 is %2", writer, conf, true); + GetConfigString("Language.LeaseInfinite", "Lease time set to infinite...", writer, conf, true); + GetConfigString("Language.PermissionsApply", "Permissions applied to residence.", writer, conf, true); + GetConfigString("Language.PhysicalAreas", "Physical Areas", writer, conf, true); + GetConfigString("Language.CurrentArea", "Current Area", writer, conf, true); + GetConfigString("Language.TotalWorth", "Total worth of residence:&3 %1 (%2)", writer, conf, true); + GetConfigString("Language.LeaseExpire", "Lease Expiration", writer, conf, true); + GetConfigString("Language.NotOnline", "Target player must be online.", writer, conf, true); + GetConfigString("Language.ResidenceGiveLimits", "Cannot give residence to target player, because it is outside the target players limits.", writer, conf, true); + GetConfigString("Language.ResidenceGive", "You give residence %1 to player %2", writer, conf, true); + GetConfigString("Language.ResidenceRecieve", "You have recieved residence %1 from player %2", writer, conf, true); + // GetConfigString("Language.#ResidenceListAll", "Residences - - removed, use GenericPage now", writer, conf, true); + GetConfigString("Language.ResidenceListAllEmpty", "No Residences exists on the server...", writer, conf, true); + GetConfigString("Language.InvalidPage", "Invalid Page...", writer, conf, true); + GetConfigString("Language.NextPage", "Next Page", writer, conf, true); + GetConfigString("Language.NextInfoPage", "&2| &eNext Page &2>>>", writer, conf, true); + GetConfigString("Language.PrevInfoPage", "&2<<< &ePrev Page &2|", writer, conf, true); + GetConfigString("Language.RemovePlayersResidences", "Removed all residences belonging to player %1", writer, conf, true); + GetConfigString("Language.GenericPage", "Page %1 of %2", writer, conf, true); + GetConfigString("Language.ResidenceRentedBy", "Rented by %1", writer, conf, true); + GetConfigString("Language.InvalidCharacters", "Invalid characters detected...", writer, conf, true); + GetConfigString("Language.InvalidNameCharacters", "Name contained unallowed characters...", writer, conf, true); + GetConfigString("Language.DeleteConfirm", "Are you sure you want to delete residence %1, use /res confirm to confirm.", writer, conf, true); + GetConfigString("Language.SelectTooHigh", "Warning, selection went above top of map, limiting.", writer, conf, true); + GetConfigString("Language.SelectTooLow", "Warning, selection went below bottom of map, limiting.", writer, conf, true); + GetConfigString("Language.WorldEditNotFound", "WorldEdit was not detected.", writer, conf, true); + GetConfigString("Language.NoResHere", "There is no residence in there.", writer, conf, true); + GetConfigString("Language.DeleteSubzoneConfirm", "Are you sure you want to delete subzone %1, use /res confirm to confirm.", writer, conf, true); + GetConfigString("Language.SubzoneOwnerChange", "Subzone %1 owner changed to %2", writer, conf, true); + GetConfigString("Language.CoordsTop", "X:%1 Y:%2 Z:%3", writer, conf, true); + GetConfigString("Language.CoordsBottom", "X:%1 Y:%2 Z:%3", writer, conf, true); + GetConfigString("Language.AdminToggle", "Automatic resadmin toggle turned %1", writer, conf, true); + GetConfigString("Language.NoSpawn", "You do not have move permissions at your spawn point. Relocating", writer, conf, true); + GetConfigString("Language.CompassTargetReset", "Your compass has been reset", writer, conf, true); + GetConfigString("Language.CompassTargetSet", "Your compass now points to %1", writer, conf, true); + writer.addComment("Language.Description", "The below lines are mostly a word bank for various uses."); + GetConfigString("Language.Description", "Description", writer, conf, true); + GetConfigString("Language.Land", "Land", writer, conf, true); + GetConfigString("Language.Cost", "Cost", writer, conf, true); + GetConfigString("Language.Selection", "Selection", writer, conf, true); + GetConfigString("Language.Total", "Total", writer, conf, true); + GetConfigString("Language.Size", "Size", writer, conf, true); + GetConfigString("Language.Expanding", "Expanding", writer, conf, true); + GetConfigString("Language.Contracting", "Contracting", writer, conf, true); + GetConfigString("Language.North", "North", writer, conf, true); + GetConfigString("Language.West", "West", writer, conf, true); + GetConfigString("Language.South", "South", writer, conf, true); + GetConfigString("Language.East", "East", writer, conf, true); + GetConfigString("Language.Shifting", "Shifting", writer, conf, true); + GetConfigString("Language.Up", "Up", writer, conf, true); + GetConfigString("Language.Down", "Down", writer, conf, true); + GetConfigString("Language.Error", "Error", writer, conf, true); + GetConfigString("Language.Flags", "Flags", writer, conf, true); + GetConfigString("Language.Your", "Your", writer, conf, true); + GetConfigString("Language.Group", "Group", writer, conf, true); + GetConfigString("Language.Others", "Others", writer, conf, true); + GetConfigString("Language.Primary", "Primary", writer, conf, true); + GetConfigString("Language.Secondary", "Secondary", writer, conf, true); + GetConfigString("Language.Selection", "Selection", writer, conf, true); + GetConfigString("Language.Moved", "Moved", writer, conf, true); + GetConfigString("Language.Status", "Status", writer, conf, true); + GetConfigString("Language.Available", "Available", writer, conf, true); + GetConfigString("Language.On", "On", writer, conf, true); + GetConfigString("Language.Off", "Off", writer, conf, true); + GetConfigString("Language.Name", "Name", writer, conf, true); + GetConfigString("Language.Lists", "Lists", writer, conf, true); + GetConfigString("Language.Residences", "Residences", writer, conf, true); + GetConfigString("Language.Residence", "Residence", writer, conf, true); + GetConfigString("Language.Count", "Count", writer, conf, true); + GetConfigString("Language.Owner", "Owner", writer, conf, true); + GetConfigString("Language.World", "World", writer, conf, true); + GetConfigString("Language.Subzones", "Subzones", writer, conf, true); + GetConfigString("Language.CoordsT", "Top Coords", writer, conf, true); + GetConfigString("Language.CoordsB", "Bottom Coords", writer, conf, true); + GetConfigString("Language.TurnOn", "on", writer, conf, true); + GetConfigString("Language.TurnOff", "off", writer, conf, true); + GetConfigString("Language.LimitsTop", "----------------------------------------", writer, conf, true); + GetConfigString("Language.LimitsPGroup", "&7- &ePermissions Group:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsRGroup", "&7- &eResidence Group:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsAdmin", "&7- &eResidence Admin:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsCanCreate", "&7- &eCan Create Residences:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMaxRes", "&7- &eMax Residences:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMaxEW", "&7- &eMax East/West Size:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMaxNS", "&7- &eMax North/South Size:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMaxUD", "&7- &eMax Up/Down Size:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMinMax", "&7- &eMin/Max Protection Height:&3 %1 to %2", writer, conf, true); + GetConfigString("Language.LimitsMaxSub", "&7- &eMax Subzone Depth:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsEnterLeave", "&7- &eCan Set Enter/Leave Messages:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsNumberOwn", "&7- &eNumber of Residences you own:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsCost", "&7- &eResidence Cost Per Block:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsSell", "&7- &eResidence Sell Cost Per Block:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsFlag", "&7- &eFlag Permissions:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMaxDays", "&7- &eMax Lease Days:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsLeaseTime", "&7- &eLease Time Given on Renew:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsRenewCost", "&7- &eRenew Cost Per Block:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsBottom", "----------------------------------------", writer, conf, true); + + writer.addComment("CommandHelp", ""); + + GetConfigString("CommandHelp.Description", "Contains Help for Residence", writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.Description", "Main Residence Command", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.Info", Arrays.asList("See the residence wiki for more help.", "Wiki: residencebukkitmod.wikispaces.com", + "Use /res [command] ? to view more help information."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.Description", "Selection Commands", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.Info", + Arrays.asList("This command selects areas for usage with residence.", "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Description", "Display selected coordinates", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Info", Arrays.asList("Usage: /res select coords"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Description", "Display selected size", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Info", Arrays.asList("Usage: /res select size"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Description", "Display selection cost", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Info", Arrays.asList("Usage: /res select cost"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Description", "Expand Selection Vertically", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Info", + Arrays.asList("Usage: /res select vert", "Will expand selection as high and as low as allowed."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Description", "Expand Selection to Sky", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Info", Arrays.asList("Usage: /res select sky", + "Expands as high as your allowed to go."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Description", "Expand Selection to Bedrock", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Info", + Arrays.asList("Usage: /res select bedrock", "Expands as low as your allowed to go."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Description", "Expand selection in a direction.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Info", + Arrays.asList("Usage: /res select expand ", "Expands in the direction your looking."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Description", "Shift selection in a direction", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Info", + Arrays.asList("Usage: /res select shift ", "Pushes your selection by in the direction your looking."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Description", "Select the chunk your currently in.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Info", + Arrays.asList("Usage: /res select chunk", "Selects the chunk your currently standing in."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Description", "Select a existing area in a residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Info", + Arrays.asList("Usage /res select ", "Selects a existing area in a residence."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Description", "Set selection using the current WorldEdit selection.", + writer, conf, + true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Info", + Arrays.asList("Usage /res select worldedit", "Sets selection area using the current WorldEdit selection."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.create.Description", "Create Residences", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.create.Info", Arrays.asList("Usage: /res create "), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.remove.Description", "Remove residences.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("Usage: /res remove "), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("Usage: /res removeall [owner]", + "Removes all residences owned by a specific player.'", + "Requires /resadmin if you use it on anyone besides yourself."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.confirm.info", Arrays.asList("Usage: /res confirm", "Confirms removal of a residence."), writer, conf, + true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.subzone.Description", "Create subzones in residences.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.subzone.Info", + Arrays.asList("Usage: /res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.Description", "Manage physical areas for a residence.", writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Description", "List physical areas in a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Info", + Arrays.asList("Usage: /res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Description", "List coordinates and other info for areas", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("Usage: /res area listall [residence] "), writer, + conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Description", "Add physical areas to a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Info", + Arrays.asList("Usage: /res area add [residence] [areaID]", "You must first select two points first."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Description", "Remove physical areas from a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("Usage: /res area remove [residence] [areaID]"), writer, + conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Description", "Replace physical areas in a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("Usage: /res area replace [residence] [areaID]", + "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.info.info", + Arrays.asList("Usage: /res info ", "Leave off to display info for the residence your currently in."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.limits.info", + Arrays.asList("Usage: /res limits", "Shows the limitations you have on creating and managing residences."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages", writer, conf, true); + GetConfigArray( + "CommandHelp.SubCommands.res.SubCommands.message.info", Arrays.asList("Usage: /res message [enter/leave] [message]", + "Set the enter or leave message of a residence.", "Usage: /res message remove [enter/leave]", "Removes a enter or leave message."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.Description", "Manage residence leases", writer, conf, true); + GetConfigArray( + "CommandHelp.SubCommands.res.SubCommands.lease.info", Arrays.asList("Usage: /res lease [renew/cost] [residence]", + "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money."), + writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time (admin only)", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", + Arrays.asList("Usage: /resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite."), writer, conf, + true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.bank.Info", + Arrays.asList("Usage: /res bank [deposit/withdraw] [amount]", "You must be standing in a Residence", "You must have the +bank flag."), writer, conf, + true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.tp.Description", "Teleport to a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tp.Info", + Arrays.asList("Usage: /res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", + "Your permission group must also be allowed to teleport by the server admin."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning and teleport anyways", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", + Arrays.asList("Usage: /res tpconfirm", "Teleports you to a residence, when teleportation is unsafe."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpset.Description", "Set the teleport location of a Residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpset.Info", + Arrays.asList("Usage: /res tpset", "This will set the teleport location for a residence to where your standing.", + "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.set.Description", "Set general flags on a Residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.set.Info", Arrays.asList("Usage: /res set [flag] [true/false/remove]", + "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.pset.Description", "Set flags on a specific player for a Residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.pset.Info", Arrays.asList("Usage: /res pset [player] [flag] [true/false/remove]", + "Usage: /res pset [player] removeall", "To see a list of flags, use /res flags ?"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.gset.Description", "Set flags on a specific group for a Residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.gset.Info", + Arrays.asList("Usage: /res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lset.Description", "Change blacklist and ignorelist options", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lset.Info", + Arrays.asList("Usage: /res lset [blacklist/ignorelist] [material]", + "Usage: /res lset info", + "Blacklisting a material prevents it from being placed in the residence.", + "Ignorelist causes a specific material to not be protected by Residence."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.flags.Description", "List of flags", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.flags.Info", + Arrays.asList("For flag values, usually true allows the action, and false denys the action.", + "&2build &3- &eallows or denys building", + "&2use &3- &eallows or denys use of doors, lever, buttons, etc...", + "&2move &3- &eallows or denys movement in the residence.", + "&2container &3- &eallows or denys use of furnaces, chests, dispensers, etc...", + "&2trusted &3- &eGives build, use, move, container and tp flags", + "&2place &3- &eallows or denys only placement of blocks, overrides the build flag.", + "&2destroy &3- &eallows or denys only destruction of blocks, overrides the build flag.", + "&2pvp &3- &eallow or deny pvp in the residence", + "&2tp &3- &eallow or disallow teleporting to the residence.", + "&2admin &3- &egives a player permission to change flags on a residence.", + "&2subzone &3- &eallow a player to make subzones in the residence.", + "&2monsters &3- &eallows or denys monster spawns", + "&2animals &3- &eallows or denys animal spawns.", + "&2animalkilling &3- &eallows or denys animal killing.", + "&2mobkilling &3- &eallows or denys mob killing.", + "&2nofly &3- &eallows or denys fly in residence.", + "&2vehicledestroy &3- &eallows or denys vehicle destroy.", + "&2shear &3- &eallows or denys sheep shear.", + "&2leash &3- &eallows or denys aninal leash.", + "&2healing &3- &esetting to true makes the residence heal its occupants", + "&2tnt &3- &eallow or deny tnt explosions", + "&2creeper &3- &eallow or deny creeper explosions", + "&2ignite &3- &eallows or denys fire ignition.", + "&2firespread &3- &eallows or denys fire spread.", + "&2bucket &3- &eallow or deny bucket use.", + "&2flow &3- &eallows or denys liquid flow.", + "&2lavaflow &3- &eallows or denys lava flow, overrides flow", + "&2waterflow &3- &eallows or denys water flow, overrides flow", + "&2damage &3- &eallows or denys all entity damage within the residence.", + "&2piston &3- &eallow or deny pistons from pushing or pulling blocks in the residence.", + "&2hidden &3- &ehides residence from list or listall commands.", + "&2cake &3- &eallows or denys players to eat cake", + "&2lever &3- &eallows or denys players to use levers", + "&2button &3- &eallows or denys players to use buttons", + "&2diode &3- &eallows or denys players to use redstone repeaters", + "&2door &3- &eallows or denys players to use doors and trapdoors", + "&2table &3- &eallows or denys players to use workbenches", + "&2enchant &3- &eallows or denys players to use enchanting tables", + "&2brew &3- &eallows or denys players to use brewing stands", + "&2bed &3- &eallows or denys players to use beds", + "&2button &3- &eallows or denys players to use buttons", + "&2pressure &3- &eallows or denys players to use pressure plates", + "&2note &3- &eallows or denys players to use note blocks", + "&2redstone &3- &eGives lever, diode, button, pressure, note flags", + "&2craft &3- &eGives table, enchant, brew flags", + "&2burn &3- &eallows or denys Mob combustion in residences"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.list.Description", "List Residences", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.list.Info", + Arrays.asList("Usage: /res list ", + "Lists all the residences a player owns (except hidden ones).", + "If listing your own residences, shows hidden ones as well.", + "To list everyones residences, use /res listall."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.listhidden.Description", "List Hidden Residences (ADMIN ONLY)", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listhidden.Info", + Arrays.asList("Usage: /res listhidden ", + "Lists hidden residences for a player."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.listall.Description", "List All Residences", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listall.Info", + Arrays.asList("Usage: /res listall ", + "Lists hidden residences for a player."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.listallhidden.Description", "List All Hidden Residences (ADMIN ONLY)", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listallhidden.Info", + Arrays.asList("Usage: /res listhidden ", + "Lists all hidden residences on the server."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.sublist.Description", "List Residence Subzones", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.sublist.Info", + Arrays.asList("Usage: /res sublist ", + "List subzones within a residence."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.default.Description", "Reset residence to default flags.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.default.Info", + Arrays.asList("Usage: /res default ", + "Resets the flags on a residence to their default. You must be the owner or an admin to do this."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.rename.Description", "Renames a residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.rename.Info", + Arrays.asList("Usage: /res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", + "The name must not already be taken by another residence."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.mirror.Description", "Mirrors Flags", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.mirror.Info", + Arrays.asList("Usage: /res mirror [Source Residence] [Target Residence]", + "Mirrors flags from one residence to another. You must be owner of both or a admin to do this."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.Description", "Buy, Sell, or Rent Residences", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.mirror.Info", + Arrays.asList("Usage: /res market ? for more info"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.info.Description", "Get economy info on residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.info.Info", + Arrays.asList("Usage: /res market info [residence]", "Shows if the Residence is for sale or for rent, and the cost."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Description", "Lists rentable and for sale residences.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Info", + Arrays.asList("Usage: /res market list"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Description", "Sell a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Info", + Arrays.asList("Usage: /res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", + "Another player can buy the residence with /res market buy"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Description", "Buy a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Info", + Arrays.asList("Usage: /res market buy [residence]", "Buys a Residence if its for sale."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Description", "Stops selling a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Info", + Arrays.asList("Usage: /res market unsell [residence]"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Description", "ent a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Info", + Arrays.asList("Usage: /res market rent [residence] ", + "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Description", "Make a residence rentable.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Info", + Arrays.asList("Usage: /res market rentable [residence] [cost] [days] ", + "Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Description", "Remove a residence from rent or rentable.", writer, conf, + true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Info", + Arrays.asList("Usage: /res market release [residence]", "If you are the renter, this command releases the rent on the house for you.", + "If you are the owner, this command makes the residence not for rent anymore."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.current.Description", "Show residence your currently in.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.current.Info", + Arrays.asList("Usage: /res current"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.Description", "Predefined permission lists", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.Info", + Arrays.asList("Predefined permissions that can be applied to a residence."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Description", "Add a list", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Info", + Arrays.asList("Usage: /res lists add "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Description", "Remove a list", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Info", + Arrays.asList("Usage: /res lists remove "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Description", "Apply a list to a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Info", + Arrays.asList("Usage: /res lists apply "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Description", "Set a flag", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Info", + Arrays.asList("Usage: /res lists set "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Description", "Set a player flag", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Info", + Arrays.asList("Usage: /res lists pset "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Description", "Set a group flag", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", + Arrays.asList("Usage: /res lists gset "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.view.Description", "View a list.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", + Arrays.asList("Usage: /res lists view "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.server.Description", "Make land server owned (admin only).", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.server.Info", + Arrays.asList("Usage: /resadmin server [residence]", "Make a residence server owned."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.setowner.Description", "Change owner of a residence (admin only).", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.setowner.Info", + Arrays.asList("Usage: /resadmin setowner [residence] [player]"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence (admin only).", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.resreload.Info", + Arrays.asList("Usage: /resreload"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.resload.Description", "Load residence save file (UNSAFE, admin only).", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.resload.Info", + Arrays.asList("Usage: /resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.version.Description", "how residence version", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.version.Info", + Arrays.asList("Usage: /res version"), + writer, conf, true); + // GetConfigArray("CommandHelp.SubCommands.res.select.Info", + // Arrays.asList("", "", ""), writer, conf, true); + + // Write back config + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + + } +} diff --git a/src/com/bekvon/bukkit/residence/NewLanguage.java b/src/com/bekvon/bukkit/residence/NewLanguage.java new file mode 100644 index 000000000..ca425b0e5 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/NewLanguage.java @@ -0,0 +1,86 @@ +package com.bekvon.bukkit.residence; + +import java.util.Arrays; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +public class NewLanguage { + public static FileConfiguration enlocale; + public static FileConfiguration customlocale; + + static { + customlocale = new YmlMaker((JavaPlugin) Residence.instance, "Language/" + Residence.getConfigManager().language + ".yml").getConfig(); + enlocale = new YmlMaker((JavaPlugin) Residence.instance, "Language/English.yml").getConfig(); + if (customlocale == null) + customlocale = enlocale; + } + + private NewLanguage() { + } + + /** + * Reloads the config + */ + public static void reload() { + customlocale = new YmlMaker((JavaPlugin) Residence.instance, "Language/" + Residence.getConfigManager().language + ".yml").getConfig(); + enlocale = new YmlMaker((JavaPlugin) Residence.instance, "Language/English.yml").getConfig(); + if (customlocale == null) + customlocale = enlocale; + } + + /** + * Get the message with the correct key + * + * @param key + * - the key of the message + * @return the message + */ + public static String getMessage(String key) { + String missing = "Missing locale for " + key; + if (customlocale == null || !customlocale.contains(key)) + return enlocale.contains(key) == true ? ChatColor.translateAlternateColorCodes('&', enlocale.getString(key)) : missing; + return customlocale.contains(key) == true ? ChatColor.translateAlternateColorCodes('&', customlocale.getString(key)) : missing; + } + + /** + * Get the message with the correct key + * + * @param key + * - the key of the message + * @return the message + */ + public static String getDefaultMessage(String key) { + String missing = "Missing locale for " + key; + return enlocale.contains(key) == true ? ChatColor.translateAlternateColorCodes('&', enlocale.getString(key)) : missing; + } + + /** + * Get the message with the correct key + * + * @param key + * - the key of the message + * @return the message + */ + public static List getMessageList(String key) { + String missing = "Missing locale for " + key; + if (customlocale.isList(key)) + return Locale.ColorsArray(customlocale.getStringList(key), true); + return enlocale.getStringList(key).size() > 0 ? Locale.ColorsArray(enlocale.getStringList(key), true) : Arrays.asList(missing); + } + + /** + * Check if key exists + * + * @param key + * - the key of the message + * @return true/false + */ + public static boolean containsKey(String key) { + if (customlocale == null || !customlocale.contains(key)) + return enlocale.contains(key); + return customlocale.contains(key); + } +} diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f2b6d2cf0..6d80888c1 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -5,11 +5,12 @@ package com.bekvon.bukkit.residence; import java.io.File; -import java.io.FileNotFoundException; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.HashMap; @@ -21,13 +22,11 @@ import java.util.logging.Level; import java.util.logging.Logger; - import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.World; import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; @@ -62,15 +61,19 @@ import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.CrackShot; import com.bekvon.bukkit.residence.utils.VersionChecker; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; import com.earth2me.essentials.Essentials; import com.residence.mcstats.Metrics; import com.residence.zip.ZipLibrary; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import cosine.boseconomy.BOSEconomy; import fr.crafter.tickleman.realeconomy.RealEconomy; import fr.crafter.tickleman.realplugin.RealPlugin; + import java.util.UUID; import org.bukkit.OfflinePlayer; @@ -99,6 +102,7 @@ public class Residence extends JavaPlugin { protected static Server server; protected static HelpEntry helppages; protected static Language language; + public static Plugin instance; protected boolean firstenable = true; protected static EconomyInterface economy; public final static int saveVersion = 1; @@ -106,751 +110,949 @@ public class Residence extends JavaPlugin { protected static int leaseBukkitId = -1; protected static int rentBukkitId = -1; protected static int healBukkitId = -1; + + protected static int DespawnMobsBukkitId = -1; + protected static int autosaveBukkitId = -1; protected static VersionChecker versionChecker; protected static boolean initsuccess = false; protected Map deleteConfirm; protected static List resadminToggle; - private final static String[] validLanguages = { "English", "German", "French", "Hungarian", "Spanish", "Chinese", "Czech", "Brazilian", "Polish" }; + private final static String[] validLanguages = { "English", "German", "French", "Hungarian", "Spanish", "Chinese", "Czech", "Brazilian", "Polish", "Lithuanian" }; + public static HashMap UUIDList = new HashMap(); + public static WorldEditPlugin wep = null; + public static WorldGuardPlugin wg = null; + public static int wepid; + private Runnable doHeals = new Runnable() { - public void run() { - plistener.doHeals(); - } + public void run() { + plistener.doHeals(); + } + }; + + private Runnable DespawnMobs = new Runnable() { + public void run() { + plistener.DespawnMobs(); + } }; - private Runnable rentExpire = new Runnable() - { - public void run() { - rentmanager.checkCurrentRents(); - if (cmanager.showIntervalMessages()) { - System.out.println("[Residence] - Rent Expirations checked!"); - } - } + + private Runnable rentExpire = new Runnable() { + public void run() { + rentmanager.checkCurrentRents(); + if (cmanager.showIntervalMessages()) { + System.out.println("[Residence] - Rent Expirations checked!"); + } + } }; private Runnable leaseExpire = new Runnable() { - public void run() { - leasemanager.doExpirations(); - if (cmanager.showIntervalMessages()) { - System.out.println("[Residence] - Lease Expirations checked!"); - } - } + public void run() { + leasemanager.doExpirations(); + if (cmanager.showIntervalMessages()) { + System.out.println("[Residence] - Lease Expirations checked!"); + } + } }; private Runnable autoSave = new Runnable() { - public void run() { - try { - if (initsuccess) { - saveYml(); - } - } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); - } - } + public void run() { + try { + if (initsuccess) { + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + try { + saveYml(); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + }); + } + } catch (Exception ex) { + Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); + } + } }; public Residence() { } public void reloadPlugin() { - this.onDisable(); - this.reloadConfig(); - this.onEnable(); - + this.onDisable(); + this.reloadConfig(); + this.onEnable(); } @Override public void onDisable() { - server.getScheduler().cancelTask(autosaveBukkitId); - server.getScheduler().cancelTask(healBukkitId); - if (cmanager.useLeases()) { - server.getScheduler().cancelTask(leaseBukkitId); - } - if (cmanager.enabledRentSystem()) { - server.getScheduler().cancelTask(rentBukkitId); - } - if (initsuccess) { - try { - saveYml(); - ZipLibrary.backup(); - } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); - } - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Disabled!"); - } + server.getScheduler().cancelTask(autosaveBukkitId); + server.getScheduler().cancelTask(healBukkitId); + + server.getScheduler().cancelTask(DespawnMobsBukkitId); + + if (cmanager.useLeases()) { + server.getScheduler().cancelTask(leaseBukkitId); + } + if (cmanager.enabledRentSystem()) { + server.getScheduler().cancelTask(rentBukkitId); + } + if (initsuccess) { + try { + saveYml(); + ZipLibrary.backup(); + } catch (Exception ex) { + Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); + } + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Disabled!"); + } } @Override public void onEnable() { - try { - initsuccess = false; - deleteConfirm = new HashMap(); - resadminToggle = new ArrayList(); - server = this.getServer(); - dataFolder = this.getDataFolder(); - if (!dataFolder.isDirectory()) { - dataFolder.mkdirs(); - } - - if (!new File(dataFolder, "config.yml").isFile()) { - this.writeDefaultConfigFromJar(); - } - if (this.getConfig().getInt("ResidenceVersion", 0) == 0) { - this.writeDefaultConfigFromJar(); - this.getConfig().load("config.yml"); - System.out.println("[Residence] Config Invalid, wrote default..."); - } - cmanager = new ConfigManager(this.getConfig()); - String multiworld = cmanager.getMultiworldPlugin(); - if (multiworld != null) { - Plugin plugin = server.getPluginManager().getPlugin(multiworld); - if (plugin != null) { - if (!plugin.isEnabled()) { - System.out.println("[Residence] - Enabling multiworld plugin: " + multiworld); - server.getPluginManager().enablePlugin(plugin); - } - } - } - gmanager = new PermissionManager(this.getConfig()); - imanager = new WorldItemManager(this.getConfig()); - wmanager = new WorldFlagManager(this.getConfig()); - chatmanager = new ChatManager(); - rentmanager = new RentManager(); - for (String lang : validLanguages) { - try { - if (this.checkNewLanguageVersion(lang)) { - this.writeDefaultLanguageFile(lang); - } - } catch (Exception ex) { - System.out.println("[Residence] Failed to update language file: " + lang + ".yml"); - helppages = new HelpEntry(""); - language = new Language(); - } - } - try { - File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); - if (langFile.isFile()) { - FileConfiguration langconfig = new YamlConfiguration(); - langconfig.load(langFile); - helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - HelpEntry.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); - InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); - language = Language.parseText(langconfig, "Language"); - } else { - System.out.println("[Residence] Language file does not exist..."); - } - } catch (Exception ex) { - System.out.println("[Residence] Failed to load language file: " + cmanager.getLanguage() + ".yml, Error: " + ex.getMessage()); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - helppages = new HelpEntry(""); - language = new Language(); - } - economy = null; - if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { - System.out.println("[Residence] Scanning for economy systems..."); - if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { - ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); - if (vault.economyOK()) - { - economy = vault; - System.out.println("[Residence] Found Vault using economy system: " + vault.getEconomyName()); - } - } - if (economy == null) { - this.loadVaultEconomy(); - } - if (economy == null) { - this.loadBOSEconomy(); - } - if (economy == null) { - this.loadEssentialsEconomy(); - } - if (economy == null) { - this.loadRealEconomy(); - } - if (economy == null) { - this.loadIConomy(); - } - if (economy == null) { - System.out.println("[Residence] Unable to find an economy system..."); - } - } - try { - this.loadYml(); - } catch (Exception e) { - this.getLogger().log(Level.SEVERE, "Unable to load save file", e); - throw e; - } - if (rmanager == null) { - rmanager = new ResidenceManager(); - } - if (leasemanager == null) { - leasemanager = new LeaseManager(rmanager); - } - if (tmanager == null) { - tmanager = new TransactionManager(rmanager, gmanager); - } - if (pmanager == null) { - pmanager = new PermissionListManager(); - } - if (firstenable) { - if (!this.isEnabled()) { - return; - } - FlagPermissions.initValidFlags(); - Plugin p = server.getPluginManager().getPlugin("WorldEdit"); - if (p != null) { - smanager = new WorldEditSelectionManager(server); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldEdit"); - } else { - smanager = new SelectionManager(server); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldEdit NOT found!"); - } - - blistener = new ResidenceBlockListener(); - plistener = new ResidencePlayerListener(); - elistener = new ResidenceEntityListener(); - PluginManager pm = getServer().getPluginManager(); - pm.registerEvents(blistener, this); - pm.registerEvents(plistener, this); - pm.registerEvents(elistener, this); - - // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, - // Priority.NORMAL, this); - if (cmanager.enableSpout()) { - slistener = new ResidenceSpoutListener(); - pm.registerEvents(slistener, this); - } - firstenable = false; - } else { - plistener.reload(); - } - int autosaveInt = cmanager.getAutoSaveInterval(); - if (autosaveInt < 1) { - autosaveInt = 1; - } - autosaveInt = autosaveInt * 60 * 20; - autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); - healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, 20); - if (cmanager.useLeases()) { - int leaseInterval = cmanager.getLeaseCheckInterval(); - if (leaseInterval < 1) { - leaseInterval = 1; - } - leaseInterval = leaseInterval * 60 * 20; - leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval); - } - if (cmanager.enabledRentSystem()) { - int rentint = cmanager.getRentCheckInterval(); - if (rentint < 1) { - rentint = 1; - } - rentint = rentint * 60 * 20; - rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); - } - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - turnResAdminOn(player); - } - } - try { - Metrics metrics = new Metrics(this); - metrics.start(); - } catch (IOException e) { - // Failed to submit the stats :-( - } - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Enabled! Version " + this.getDescription().getVersion() + " by bekvon"); - initsuccess = true; - } catch (Exception ex) { - initsuccess = false; - getServer().getPluginManager().disablePlugin(this); - System.out.println("[Residence] - FAILED INITIALIZATION! DISABLED! ERROR:"); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - } - versionChecker = new VersionChecker(this); - versionChecker.VersionCheck(null); - } - - public void consoleMessage(String message){ - ConsoleCommandSender console = Bukkit.getConsoleSender(); - console.sendMessage("[Residence] " + message); - } - - public static boolean validName(String name) - { - if (name.contains(":") || name.contains(".")) { - return false; - } - if (cmanager.getResidenceNameRegex() == null) { - return true; - } else { - String namecheck = name.replaceAll(cmanager.getResidenceNameRegex(), ""); - if (!name.equals(namecheck)) { - return false; - } - return true; - } - } - + try { + instance = this; + initsuccess = false; + deleteConfirm = new HashMap(); + resadminToggle = new ArrayList(); + server = this.getServer(); + dataFolder = this.getDataFolder(); + if (!dataFolder.isDirectory()) { + dataFolder.mkdirs(); + } + + if (!new File(dataFolder, "groups.yml").isFile() && new File(dataFolder, "config.yml").isFile()) { + this.ConvertGroupFile(); + } + + if (!new File(dataFolder, "config.yml").isFile()) { + this.writeDefaultConfigFromJar(); + this.writeDefaultGroupsFromJar(); + this.writeDefaultFlagsFromJar(); + } + +// Residence.getConfigManager().UpdateConfigFile(); + +// if (this.getConfig().getInt("ResidenceVersion", 0) == 0) { +// this.writeDefaultConfigFromJar(); +// this.getConfig().load("config.yml"); +// System.out.println("[Residence] Config Invalid, wrote default..."); +// } + + FileConfiguration canfig = YamlConfiguration.loadConfiguration(new File(dataFolder, "config.yml")); + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(dataFolder, "flags.yml")); + FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(dataFolder, "groups.yml")); + cmanager = new ConfigManager(canfig, flags, groups); + String multiworld = cmanager.getMultiworldPlugin(); + if (multiworld != null) { + Plugin plugin = server.getPluginManager().getPlugin(multiworld); + if (plugin != null) { + if (!plugin.isEnabled()) { + System.out.println("[Residence] - Enabling multiworld plugin: " + multiworld); + server.getPluginManager().enablePlugin(plugin); + } + } + } + + gmanager = new PermissionManager(groups, flags); + + imanager = new WorldItemManager(flags); + wmanager = new WorldFlagManager(flags, groups); + + chatmanager = new ChatManager(); + rentmanager = new RentManager(); + + for (String lang : validLanguages) { + + YmlMaker langFile = new YmlMaker((JavaPlugin) Residence.instance, "Language" + File.separator + lang + ".yml"); + if (langFile != null) { + langFile.saveDefaultConfig(); + } + } + + for (String lang : validLanguages) { + Locale.LoadLang(lang); + } + + NewLanguage.reload(); + + try { + File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); + if (langFile.isFile()) { + FileConfiguration langconfig = new YamlConfiguration(); + langconfig.load(langFile); + helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); + HelpEntry.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); + InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); + language = Language.parseText(langconfig, "Language"); + } else { + System.out.println("[Residence] Language file does not exist..."); + } + } catch (Exception ex) { + System.out.println("[Residence] Failed to load language file: " + cmanager.getLanguage() + ".yml, Error: " + ex.getMessage()); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + helppages = new HelpEntry(""); + language = new Language(); + } + economy = null; + if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { + System.out.println("[Residence] Scanning for economy systems..."); + if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { + ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); + if (vault.economyOK()) { + economy = vault; + System.out.println("[Residence] Found Vault using economy system: " + vault.getEconomyName()); + } + } + if (economy == null) { + this.loadVaultEconomy(); + } + if (economy == null) { + this.loadBOSEconomy(); + } + if (economy == null) { + this.loadEssentialsEconomy(); + } + if (economy == null) { + this.loadRealEconomy(); + } + if (economy == null) { + this.loadIConomy(); + } + if (economy == null) { + System.out.println("[Residence] Unable to find an economy system..."); + } + } + try { + this.loadYml(); + } catch (Exception e) { + this.getLogger().log(Level.SEVERE, "Unable to load save file", e); + throw e; + } + if (rmanager == null) { + rmanager = new ResidenceManager(); + } + if (leasemanager == null) { + leasemanager = new LeaseManager(rmanager); + } + if (tmanager == null) { + tmanager = new TransactionManager(rmanager, gmanager); + } + if (pmanager == null) { + pmanager = new PermissionListManager(); + } + if (firstenable) { + if (!this.isEnabled()) { + return; + } + FlagPermissions.initValidFlags(); + Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); + if (plugin != null) { + smanager = new WorldEditSelectionManager(server); + wep = (WorldEditPlugin) plugin; + wepid = ((WorldEditPlugin) Residence.wep).getConfig().getInt("wand-item"); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldEdit"); + } else { + smanager = new SelectionManager(server); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldEdit NOT found!"); + } + + Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); + if (wgplugin == null) { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldGuard NOT found!"); + } else { + wg = (WorldGuardPlugin) wgplugin; + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldGuard"); + } + + blistener = new ResidenceBlockListener(); + plistener = new ResidencePlayerListener(); + elistener = new ResidenceEntityListener(); + PluginManager pm = getServer().getPluginManager(); + pm.registerEvents(blistener, this); + pm.registerEvents(plistener, this); + pm.registerEvents(elistener, this); + + if (getServer().getPluginManager().getPlugin("CrackShot") != null) + pm.registerEvents(new CrackShot(), this); + + // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, + // Priority.NORMAL, this); + if (cmanager.enableSpout()) { + slistener = new ResidenceSpoutListener(); + pm.registerEvents(slistener, this); + } + firstenable = false; + } else { + plistener.reload(); + } + int autosaveInt = cmanager.getAutoSaveInterval(); + if (autosaveInt < 1) { + autosaveInt = 1; + } + autosaveInt = autosaveInt * 60 * 20; + autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); + healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, 20); + if (Residence.getConfigManager().AutoMobRemoval()) + DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * Residence.getConfigManager().AutoMobRemovalInterval(), 20 + * Residence.getConfigManager().AutoMobRemovalInterval()); + + if (cmanager.useLeases()) { + int leaseInterval = cmanager.getLeaseCheckInterval(); + if (leaseInterval < 1) { + leaseInterval = 1; + } + leaseInterval = leaseInterval * 60 * 20; + leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval); + } + if (cmanager.enabledRentSystem()) { + int rentint = cmanager.getRentCheckInterval(); + if (rentint < 1) { + rentint = 1; + } + rentint = rentint * 60 * 20; + rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); + } + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + turnResAdminOn(player); + } + } + try { + Metrics metrics = new Metrics(this); + metrics.start(); + } catch (IOException e) { + // Failed to submit the stats :-( + } + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Enabled! Version " + this.getDescription().getVersion() + " by bekvon"); + initsuccess = true; + } catch (Exception ex) { + initsuccess = false; + getServer().getPluginManager().disablePlugin(this); + System.out.println("[Residence] - FAILED INITIALIZATION! DISABLED! ERROR:"); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + } + //versionChecker = new VersionChecker(this); + // versionChecker.VersionCheck(null); + } + + public void consoleMessage(String message) { + ConsoleCommandSender console = Bukkit.getConsoleSender(); + console.sendMessage("[Residence] " + message); + } + + public static boolean validName(String name) { + if (name.contains(":") || name.contains(".")) { + return false; + } + if (cmanager.getResidenceNameRegex() == null) { + return true; + } else { + String namecheck = name.replaceAll(cmanager.getResidenceNameRegex(), ""); + if (!name.equals(namecheck)) { + return false; + } + return true; + } + } + public static VersionChecker getVersionChecker() { - return versionChecker; + return versionChecker; } - + public static File getDataLocation() { - return dataFolder; + return dataFolder; } public static ResidenceManager getResidenceManager() { - return rmanager; + return rmanager; } public static SelectionManager getSelectionManager() { - return smanager; + return smanager; } public static PermissionManager getPermissionManager() { - return gmanager; + return gmanager; } public static EconomyInterface getEconomyManager() { - return economy; + return economy; } public static Server getServ() { - return server; + return server; } public static LeaseManager getLeaseManager() { - return leasemanager; + return leasemanager; } public static ConfigManager getConfigManager() { - return cmanager; + return cmanager; } public static TransactionManager getTransactionManager() { - return tmanager; + return tmanager; } public static WorldItemManager getItemManager() { - return imanager; + return imanager; } public static WorldFlagManager getWorldFlags() { - return wmanager; + return wmanager; } public static RentManager getRentManager() { - return rentmanager; + return rentmanager; } public static ResidencePlayerListener getPlayerListener() { - return plistener; + return plistener; } public static ResidenceBlockListener getBlockListener() { - return blistener; + return blistener; } public static ResidenceEntityListener getEntityListener() { - return elistener; + return elistener; } public static ChatManager getChatManager() { - return chatmanager; + return chatmanager; } public static Language getLanguage() { - if (language == null) { - language = new Language(); - } - return language; + if (language == null) { + language = new Language(); + } + return language; } public static FlagPermissions getPermsByLoc(Location loc) { - ClaimedResidence res = rmanager.getByLoc(loc); - if (res != null) { - return res.getPermissions(); - } else { - return wmanager.getPerms(loc.getWorld().getName()); - } - } - - public static FlagPermissions getPermsByLocForPlayer(Location loc, Player player) - { - ClaimedResidence res = rmanager.getByLoc(loc); - if (res != null) { - return res.getPermissions(); - } else { - if (player != null) - return wmanager.getPerms(player); - else - return wmanager.getPerms(loc.getWorld().getName()); - } + ClaimedResidence res = rmanager.getByLoc(loc); + if (res != null) { + return res.getPermissions(); + } else { + return wmanager.getPerms(loc.getWorld().getName()); + } + } + + public static FlagPermissions getPermsByLocForPlayer(Location loc, Player player) { + ClaimedResidence res = rmanager.getByLoc(loc); + if (res != null) { + return res.getPermissions(); + } else { + if (player != null) + return wmanager.getPerms(player); + else + return wmanager.getPerms(loc.getWorld().getName()); + } } private void loadIConomy() { - Plugin p = getServer().getPluginManager().getPlugin("iConomy"); - if (p != null) { - if (p.getDescription().getVersion().startsWith("6")) { - economy = new IConomy6Adapter((com.iCo6.iConomy) p); - } else if (p.getDescription().getVersion().startsWith("5")) { - economy = new IConomy5Adapter(); - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] UNKNOWN iConomy version!"); - return; - } - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with iConomy! Version: " + p.getDescription().getVersion()); - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] iConomy NOT found!"); - } + Plugin p = getServer().getPluginManager().getPlugin("iConomy"); + if (p != null) { + if (p.getDescription().getVersion().startsWith("6")) { + economy = new IConomy6Adapter((com.iCo6.iConomy) p); + } else if (p.getDescription().getVersion().startsWith("5")) { + economy = new IConomy5Adapter(); + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] UNKNOWN iConomy version!"); + return; + } + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with iConomy! Version: " + p.getDescription().getVersion()); + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] iConomy NOT found!"); + } } private void loadBOSEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("BOSEconomy"); - if (p != null) { - economy = new BOSEAdapter((BOSEconomy) p); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with BOSEconomy!"); - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] BOSEconomy NOT found!"); - } + Plugin p = getServer().getPluginManager().getPlugin("BOSEconomy"); + if (p != null) { + economy = new BOSEAdapter((BOSEconomy) p); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with BOSEconomy!"); + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] BOSEconomy NOT found!"); + } } private void loadEssentialsEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("Essentials"); - if (p != null) { - economy = new EssentialsEcoAdapter((Essentials) p); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with Essentials Economy!"); - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Essentials Economy NOT found!"); - } + Plugin p = getServer().getPluginManager().getPlugin("Essentials"); + if (p != null) { + economy = new EssentialsEcoAdapter((Essentials) p); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with Essentials Economy!"); + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Essentials Economy NOT found!"); + } } private void loadRealEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); - if (p != null) { - economy = new RealShopEconomy(new RealEconomy((RealPlugin) p)); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with RealShop Economy!"); - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] RealShop Economy NOT found!"); - } + Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); + if (p != null) { + economy = new RealShopEconomy(new RealEconomy((RealPlugin) p)); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with RealShop Economy!"); + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] RealShop Economy NOT found!"); + } } private void loadVaultEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("Vault"); - if (p != null) { - ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); - if (vault.economyOK()) { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault using economy: " + vault.getEconomyName()); - economy = vault; - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault, but Vault reported no usable economy system..."); - } - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Vault NOT found!"); - } + Plugin p = getServer().getPluginManager().getPlugin("Vault"); + if (p != null) { + ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); + if (vault.economyOK()) { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault using economy: " + vault.getEconomyName()); + economy = vault; + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault, but Vault reported no usable economy system..."); + } + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Vault NOT found!"); + } } public static boolean isResAdminOn(Player player) { - if (resadminToggle.contains(player.getName())) { - return true; - } - return false; + if (resadminToggle.contains(player.getName())) { + return true; + } + return false; } public static void turnResAdminOn(Player player) { - resadminToggle.add(player.getName()); + resadminToggle.add(player.getName()); } public static boolean isResAdminOn(String player) { - if (resadminToggle.contains(player.toLowerCase())) { - return true; - } - return false; + if (resadminToggle.contains(player)) + return true; + return false; } private void saveYml() throws IOException { - File saveFolder = new File(dataFolder, "Save"); - File worldFolder = new File(saveFolder, "Worlds"); - worldFolder.mkdirs(); - YMLSaveHelper yml; - Map save = rmanager.save(); - for (Entry entry : save.entrySet()) { - File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); - File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - World world = server.getWorld(entry.getKey()); - if (world != null) - yml.getRoot().put("Seed", world.getSeed()); - yml.getRoot().put("Residences", (Map) entry.getValue()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(worldFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - } - - // For Sale save - File ymlSaveLoc = new File(saveFolder, "forsale.yml"); - File tmpFile = new File(saveFolder, "tmp_forsale.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.save(); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("Economy", tmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "forsale.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // Leases save - ymlSaveLoc = new File(saveFolder, "leases.yml"); - tmpFile = new File(saveFolder, "tmp_leases.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("Leases", leasemanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "leases.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // permlist save - ymlSaveLoc = new File(saveFolder, "permlists.yml"); - tmpFile = new File(saveFolder, "tmp_permlists.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("PermissionLists", pmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "permlists.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // rent save - ymlSaveLoc = new File(saveFolder, "rent.yml"); - tmpFile = new File(saveFolder, "tmp_rent.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("RentSystem", rentmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "rent.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - if (cmanager.showIntervalMessages()) { - System.out.println("[Residence] - Saved Residences..."); - } + File saveFolder = new File(dataFolder, "Save"); + File worldFolder = new File(saveFolder, "Worlds"); + worldFolder.mkdirs(); + YMLSaveHelper yml; + Map save = rmanager.save(); + for (Entry entry : save.entrySet()) { + File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); + File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + World world = server.getWorld(entry.getKey()); + if (world != null) + yml.getRoot().put("Seed", world.getSeed()); + yml.getRoot().put("Residences", (Map) entry.getValue()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(worldFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + } + + // For Sale save + File ymlSaveLoc = new File(saveFolder, "forsale.yml"); + File tmpFile = new File(saveFolder, "tmp_forsale.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.save(); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("Economy", tmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "forsale.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // Leases save + ymlSaveLoc = new File(saveFolder, "leases.yml"); + tmpFile = new File(saveFolder, "tmp_leases.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("Leases", leasemanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "leases.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // permlist save + ymlSaveLoc = new File(saveFolder, "permlists.yml"); + tmpFile = new File(saveFolder, "tmp_permlists.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("PermissionLists", pmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "permlists.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // rent save + ymlSaveLoc = new File(saveFolder, "rent.yml"); + tmpFile = new File(saveFolder, "tmp_rent.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("RentSystem", rentmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "rent.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + if (cmanager.showIntervalMessages()) { + System.out.println("[Residence] - Saved Residences..."); + } } + @SuppressWarnings({ "rawtypes", "unchecked" }) protected boolean loadYml() throws Exception { - File saveFolder = new File(dataFolder, "Save"); - try { - File worldFolder = new File(saveFolder, "Worlds"); - if (!saveFolder.isDirectory()) { - this.getLogger().warning("Save directory does not exist..."); - this.getLogger().warning("Please restart server"); - return true; - } - long time; - YMLSaveHelper yml; - File loadFile; - HashMap worlds = new HashMap<>(); - for (World world : getServ().getWorlds()) { - loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); - if (loadFile.isFile()) { - time = System.currentTimeMillis(); - this.getLogger().info("Loading save data for world " + world.getName() + "..."); - yml = new YMLSaveHelper(loadFile); - yml.load(); - worlds.put(world.getName(), yml.getRoot().get("Residences")); - this.getLogger().info("Save data for world " + world.getName() + " loaded. (" + ((float) (System.currentTimeMillis() - time) / 1000) + " secs)"); - } - } - rmanager = ResidenceManager.load(worlds); - loadFile = new File(saveFolder, "forsale.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - tmanager = TransactionManager.load((Map) yml.getRoot().get("Economy"), gmanager, rmanager); - } - loadFile = new File(saveFolder, "leases.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - leasemanager = LeaseManager.load((Map) yml.getRoot().get("Leases"), rmanager); - } - loadFile = new File(saveFolder, "permlists.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - pmanager = PermissionListManager.load((Map) yml.getRoot().get("PermissionLists")); - } - loadFile = new File(saveFolder, "rent.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - rentmanager = RentManager.load((Map) yml.getRoot().get("RentSystem")); - } - // System.out.print("[Residence] Loaded..."); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - throw ex; - } + File saveFolder = new File(dataFolder, "Save"); + try { + File worldFolder = new File(saveFolder, "Worlds"); + if (!saveFolder.isDirectory()) { + this.getLogger().warning("Save directory does not exist..."); + this.getLogger().warning("Please restart server"); + return true; + } + long time; + YMLSaveHelper yml; + File loadFile; + HashMap worlds = new HashMap<>(); + for (World world : getServ().getWorlds()) { + loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); + if (loadFile.isFile()) { + time = System.currentTimeMillis(); + this.getLogger().info("Loading save data for world " + world.getName() + "..."); + yml = new YMLSaveHelper(loadFile); + yml.load(); + worlds.put(world.getName(), yml.getRoot().get("Residences")); + this.getLogger().info("Save data for world " + world.getName() + " loaded. (" + ((float) (System.currentTimeMillis() - time) / 1000) + " secs)"); + } + } + rmanager = ResidenceManager.load(worlds); + loadFile = new File(saveFolder, "forsale.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + tmanager = TransactionManager.load((Map) yml.getRoot().get("Economy"), gmanager, rmanager); + } + loadFile = new File(saveFolder, "leases.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + leasemanager = LeaseManager.load((Map) yml.getRoot().get("Leases"), rmanager); + } + loadFile = new File(saveFolder, "permlists.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + pmanager = PermissionListManager.load((Map) yml.getRoot().get("PermissionLists")); + } + loadFile = new File(saveFolder, "rent.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + rentmanager = RentManager.load((Map) yml.getRoot().get("RentSystem")); + } + // System.out.print("[Residence] Loaded..."); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + throw ex; + } } private void writeDefaultConfigFromJar() { - if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), "config.yml", true)) { - System.out.println("[Residence] Wrote default config..."); - } - } - - private void writeDefaultLanguageFile(String lang) { - File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); - outFile.getParentFile().mkdirs(); - if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang + ".yml", true)) { - System.out.println("[Residence] Wrote default " + lang + " Language file..."); - } - } - - private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException { - File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); - File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + ".yml"); - if (outFile.isFile()) { - FileConfiguration testconfig = new YamlConfiguration(); - testconfig.load(outFile); - int oldversion = testconfig.getInt("FieldsVersion", 0); - if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false)) { - return false; - } - FileConfiguration testconfig2 = new YamlConfiguration(); - testconfig2.load(checkFile); - int newversion = testconfig2.getInt("FieldsVersion", oldversion); - if (checkFile.isFile()) { - checkFile.delete(); - } - if (newversion > oldversion) { - return true; - } - return false; - } - return true; + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), "config.yml", true)) { + System.out.println("[Residence] Wrote default config..."); + } + } + + private void writeDefaultGroupsFromJar() { + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "groups.yml"), "groups.yml", true)) { + System.out.println("[Residence] Wrote default groups..."); + } + } + + private void writeDefaultFlagsFromJar() { + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "flags.yml"), "flags.yml", true)) { + System.out.println("[Residence] Wrote default flags..."); + } + } + + private void ConvertGroupFile() { + File file = new File(this.getDataFolder(), "config.yml"); + + File file_old = new File(this.getDataFolder(), "config_old.yml"); + + File newfile = new File(this.getDataFolder(), "groups.yml"); + + File newTempFlags = new File(this.getDataFolder(), "flags.yml"); + + try { + copy(file, file_old); + } catch (IOException e1) { + e1.printStackTrace(); + } + + try { + copy(file, newfile); + } catch (IOException e1) { + e1.printStackTrace(); + } + + try { + copy(file, newTempFlags); + } catch (IOException e1) { + e1.printStackTrace(); + } + + File newGroups = new File(this.getDataFolder(), "config.yml"); + + List list = new ArrayList(); + list.add("ResidenceVersion"); + list.add("Global.Flags"); + list.add("Global.FlagPermission"); + list.add("Global.ResidenceDefault"); + list.add("Global.CreatorDefault"); + list.add("Global.GroupDefault"); + list.add("Groups"); + list.add("GroupAssignments"); + list.add("ItemList"); + + try { + remove(newGroups, list); + } catch (IOException e) { + e.printStackTrace(); + } + + File newConfig = new File(this.getDataFolder(), "groups.yml"); + list.clear(); + list = new ArrayList(); + list.add("ResidenceVersion"); + list.add("Global"); + list.add("ItemList"); + + try { + remove(newConfig, list); + } catch (IOException e) { + e.printStackTrace(); + } + + File newFlags = new File(this.getDataFolder(), "flags.yml"); + list.clear(); + list = new ArrayList(); + list.add("ResidenceVersion"); + list.add("GroupAssignments"); + list.add("Groups"); + list.add("Global.Language"); + list.add("Global.SelectionToolId"); + list.add("Global.InfoToolId"); + list.add("Global.MoveCheckInterval"); + list.add("Global.SaveInterval"); + list.add("Global.DefaultGroup"); + list.add("Global.UseLeaseSystem"); + list.add("Global.LeaseCheckInterval"); + list.add("Global.LeaseAutoRenew"); + list.add("Global.EnablePermissions"); + list.add("Global.LegacyPermissions"); + list.add("Global.EnableEconomy"); + list.add("Global.EnableRentSystem"); + list.add("Global.RentCheckInterval"); + list.add("Global.ResidenceChatEnable"); + list.add("Global.UseActionBar"); + list.add("Global.ResidenceChatColor"); + list.add("Global.AdminOnlyCommands"); + list.add("Global.AdminOPs"); + list.add("Global.MultiWorldPlugin"); + list.add("Global.ResidenceFlagsInherit"); + list.add("Global.PreventRentModify"); + list.add("Global.StopOnSaveFault"); + list.add("Global.ResidenceNameRegex"); + list.add("Global.ShowIntervalMessages"); + list.add("Global.VersionCheck"); + list.add("Global.CustomContainers"); + list.add("Global.CustomBothClick"); + list.add("Global.CustomRightClick"); + + try { + remove(newFlags, list); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void remove(File newGroups, List list) throws IOException { + + YamlConfiguration conf = YamlConfiguration.loadConfiguration(newGroups); + conf.options().copyDefaults(true); + + for (String one : list) { + conf.set(one, null); + } + try { + conf.save(newGroups); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void copy(File source, File target) throws IOException { + InputStream in = new FileInputStream(source); + OutputStream out = new FileOutputStream(target); + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + in.close(); + out.close(); } +// private void writeDefaultLanguageFile(String lang) { +// File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); +// outFile.getParentFile().mkdirs(); +// if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang + ".yml", true)) { +// System.out.println("[Residence] Wrote default " + lang + " Language file..."); +// } +// } +// +// private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException { +// File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); +// File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + ".yml"); +// if (outFile.isFile()) { +// FileConfiguration testconfig = new YamlConfiguration(); +// testconfig.load(outFile); +// int oldversion = testconfig.getInt("FieldsVersion", 0); +// if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false)) { +// return false; +// } +// FileConfiguration testconfig2 = new YamlConfiguration(); +// testconfig2.load(checkFile); +// int newversion = testconfig2.getInt("FieldsVersion", oldversion); +// if (checkFile.isFile()) { +// checkFile.delete(); +// } +// if (newversion > oldversion) { +// return true; +// } +// return false; +// } +// return true; +// } + private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) { - try { - File fileBackup = new File(this.getDataFolder(), "backup-" + writeName); - File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile(); - if (jarloc.isFile()) { - JarFile jar = new JarFile(jarloc); - JarEntry entry = jar.getJarEntry(jarPath); - if (entry != null && !entry.isDirectory()) { - InputStream in = jar.getInputStream(entry); - InputStreamReader isr = new InputStreamReader(in, "UTF8"); - if (writeName.isFile()) { - if (backupOld) { - if (fileBackup.isFile()) { - fileBackup.delete(); - } - writeName.renameTo(fileBackup); - } else { - writeName.delete(); - } - } - FileOutputStream out = new FileOutputStream(writeName); - OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); - char[] tempbytes = new char[512]; - int readbytes = isr.read(tempbytes, 0, 512); - while (readbytes > -1) { - osw.write(tempbytes, 0, readbytes); - readbytes = isr.read(tempbytes, 0, 512); - } - osw.close(); - isr.close(); - return true; - } - } - return false; - } catch (Exception ex) { - System.out.println("[Residence] Failed to write file: " + writeName); - return false; - } - } - - public static UUID getPlayerUUID(String playername) - { - Player p = Residence.getServ().getPlayer(playername); - if(p==null) - { - OfflinePlayer[] oplayers = Residence.getServ().getOfflinePlayers(); - for(OfflinePlayer player : oplayers) - { - if(player.getName().equals(playername)) - return player.getUniqueId(); - } - } - else - return p.getUniqueId(); - return null; - } - - public static String getPlayerUUIDString(String playername) - { - UUID playerUUID = Residence.getPlayerUUID(playername); - if(playerUUID!=null) - return playerUUID.toString(); - return null; - } - - public static String getPlayerName(String uuid) - { - try - { - return Residence.getPlayerName(UUID.fromString(uuid)); - } - catch (IllegalArgumentException ex) { } - return null; - } - - public static String getPlayerName(UUID uuid) - { - OfflinePlayer p = Residence.getServ().getPlayer(uuid); - if(p==null) - p = Residence.getServ().getOfflinePlayer(uuid); - if(p!=null) - return p.getName(); - else - return null; + try { + File fileBackup = new File(this.getDataFolder(), "backup-" + writeName); + File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile(); + if (jarloc.isFile()) { + JarFile jar = new JarFile(jarloc); + JarEntry entry = jar.getJarEntry(jarPath); + if (entry != null && !entry.isDirectory()) { + InputStream in = jar.getInputStream(entry); + InputStreamReader isr = new InputStreamReader(in, "UTF8"); + if (writeName.isFile()) { + if (backupOld) { + if (fileBackup.isFile()) { + fileBackup.delete(); + } + writeName.renameTo(fileBackup); + } else { + writeName.delete(); + } + } + FileOutputStream out = new FileOutputStream(writeName); + OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); + char[] tempbytes = new char[512]; + int readbytes = isr.read(tempbytes, 0, 512); + while (readbytes > -1) { + osw.write(tempbytes, 0, readbytes); + readbytes = isr.read(tempbytes, 0, 512); + } + osw.close(); + isr.close(); + return true; + } + jar.close(); + } + return false; + } catch (Exception ex) { + System.out.println("[Residence] Failed to write file: " + writeName); + return false; + } + } + + public static UUID getPlayerUUID(String playername) { + Player p = Residence.getServ().getPlayer(playername); + if (p == null) { + if (UUIDList.size() == 0) { + for (OfflinePlayer player : Residence.getServ().getOfflinePlayers()) { + UUIDList.put(player.getName().toLowerCase(), player.getUniqueId()); + } + } + + if (UUIDList.containsKey(playername.toLowerCase())) + return UUIDList.get(playername.toLowerCase()); + + } else + return p.getUniqueId(); + return null; } -} + public static String getPlayerUUIDString(String playername) { + UUID playerUUID = Residence.getPlayerUUID(playername); + if (playerUUID != null) + return playerUUID.toString(); + return null; + } + + public static String getPlayerName(String uuid) { + try { + return Residence.getPlayerName(UUID.fromString(uuid)); + } catch (IllegalArgumentException ex) { + } + return null; + } + + public static String getPlayerName(UUID uuid) { + OfflinePlayer p = Residence.getServ().getPlayer(uuid); + if (p == null) + p = Residence.getServ().getOfflinePlayer(uuid); + if (p != null) + return p.getName(); + else + return null; + } +} diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 8cf8ef353..a33dc594e 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -6,6 +6,8 @@ import java.util.logging.Level; import java.util.logging.Logger; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import org.bukkit.Bukkit; @@ -24,1464 +26,1634 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.selection.WorldGuardUtil; import com.bekvon.bukkit.residence.spout.ResidenceSpout; import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; public class ResidenceCommandListener extends Residence { + public static HashMap teleportMap = new HashMap(); + public static List teleportDelayMap = new ArrayList(); + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); - server.getPluginManager().callEvent(cevent); - if (cevent.isCancelled()) { - return true; - } - if (command.getName().equals("resreload") && args.length == 0) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - this.reloadPlugin(); - sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); - System.out.println("[Residence] Reloaded by " + player.getName() + "."); - } - } else { - this.reloadPlugin(); - System.out.println("[Residence] Reloaded by console."); - } - return true; - } - if (command.getName().equals("resload")) { - if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender)) { - try { - this.loadYml(); - sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); - } catch (Exception ex) { - sender.sendMessage(ChatColor.RED + "[Residence] Unable to reload the save file, exception occured!"); - sender.sendMessage(ChatColor.RED + ex.getMessage()); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - } - } - return true; - } else if (command.getName().equals("resworld")) { - if (args.length == 2 && args[0].equalsIgnoreCase("remove")) { - if (sender instanceof ConsoleCommandSender) { - rmanager.removeAllFromWorld(sender, args[1]); - return true; - } else { - sender.sendMessage(ChatColor.RED + "MUST be run from console."); - } - } - return false; - } else if (command.getName().equals("rc")) { - if (sender instanceof Player) { - Player player = (Player) sender; - String pname = player.getName(); - if (cmanager.chatEnabled()) { - if (args.length == 0) { - plistener.tooglePlayerResidenceChat(player); - } else { - String area = plistener.getCurrentResidenceName(pname); - if (area != null) { - ChatChannel channel = chatmanager.getChannel(area); - if (channel != null) { - String message = ""; - for (String arg : args) { - message = message + " " + arg; - } - channel.chat(pname, message); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidChannel")); - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); - } - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("ChatDisabled")); - } - } - return true; - } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { - boolean resadmin = false; - if (sender instanceof Player) { - if (command.getName().equals("resadmin") && gmanager.isResidenceAdmin((Player) sender)) { - resadmin = true; - } - if (command.getName().equals("resadmin") && !gmanager.isResidenceAdmin((Player) sender)) { - ((Player) sender).sendMessage(ChatColor.RED + language.getPhrase("NonAdmin")); - return true; - } - } else { - resadmin = true; - } - return commandRes(args, resadmin, command, sender); - } - return super.onCommand(sender, command, label, args); + ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); + server.getPluginManager().callEvent(cevent); + if (cevent.isCancelled()) { + return true; + } + if (command.getName().equals("resreload") && args.length == 0) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + this.reloadPlugin(); + sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); + System.out.println("[Residence] Reloaded by " + player.getName() + "."); + } + } else { + this.reloadPlugin(); + System.out.println("[Residence] Reloaded by console."); + } + return true; + } + if (command.getName().equals("resload")) { + if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender)) { + try { + this.loadYml(); + sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); + } catch (Exception ex) { + sender.sendMessage(ChatColor.RED + "[Residence] Unable to reload the save file, exception occured!"); + sender.sendMessage(ChatColor.RED + ex.getMessage()); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + } + } + return true; + } else if (command.getName().equals("resworld")) { + if (args.length == 2 && args[0].equalsIgnoreCase("remove")) { + if (sender instanceof ConsoleCommandSender) { + rmanager.removeAllFromWorld(sender, args[1]); + return true; + } else { + sender.sendMessage(ChatColor.RED + "MUST be run from console."); + } + } + return false; + } else if (command.getName().equals("rc")) { + if (sender instanceof Player) { + Player player = (Player) sender; + String pname = player.getName(); + if (cmanager.chatEnabled()) { + if (args.length == 0) { + plistener.tooglePlayerResidenceChat(player); + } else { + String area = plistener.getCurrentResidenceName(pname); + if (area != null) { + ChatChannel channel = chatmanager.getChannel(area); + if (channel != null) { + String message = ""; + for (String arg : args) { + message = message + " " + arg; + } + channel.chat(pname, message); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidChannel")); + } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + } + } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("ChatDisabled")); + } + } + return true; + } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { + boolean resadmin = false; + if (sender instanceof Player) { + if (command.getName().equals("resadmin") && gmanager.isResidenceAdmin((Player) sender)) { + resadmin = true; + } + if (command.getName().equals("resadmin") && !gmanager.isResidenceAdmin((Player) sender)) { + ((Player) sender).sendMessage(ChatColor.RED + language.getPhrase("NonAdmin")); + return true; + } + } else { + resadmin = true; + } + return commandRes(args, resadmin, command, sender); + } + return super.onCommand(sender, command, label, args); } + @SuppressWarnings("deprecation") private boolean commandRes(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { - return commandHelp(args, resadmin, sender); - } - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - Player player = null; - PermissionGroup group = null; - String pname = null; - if (sender instanceof Player) { - player = (Player) sender; - group = Residence.getPermissionManager().getGroup(player); - pname = player.getName(); - } else { - resadmin = true; - } - if (cmanager.allowAdminsOnly()) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("AdminOnly")); - return true; - } - } - if (args.length == 0) { - return false; - } - if (args.length == 0) { - args = new String[1]; - args[0] = "?"; - } - String cmd = args[0].toLowerCase(); - if (cmd.equals("remove") || cmd.equals("delete")) { - return commandResRemove(args, resadmin, sender, page); - } - if (cmd.equals("confirm")) { - return commandResConfirm(args, resadmin, sender, page); - } - if (cmd.equals("version")) { - sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + this.getDescription().getVersion()); - sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); - sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); - String names = null; - List authlist = this.getDescription().getAuthors(); - for (String auth : authlist) - { - if (names == null) - names = auth; - else - names = names + ", " + auth; - } - sender.sendMessage(ChatColor.GREEN + "Authors: " + ChatColor.YELLOW + names); - sender.sendMessage(ChatColor.DARK_AQUA + "For a command list, and help, see the wiki:"); - sender.sendMessage(ChatColor.GREEN + "http://residencebukkitmod.wikispaces.com/"); - sender.sendMessage(ChatColor.AQUA + "Visit the Spigot Resource page at:"); - sender.sendMessage(ChatColor.BLUE + "http://www.spigotmc.org/resources/residence-reloaded-1-8.2697/"); - sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - return true; - } - if (cmd.equals("setowner") && args.length == 3) { - if (!resadmin) { - sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().setOwner(args[2], true); - if (area.getParent() == null) { - sender.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); - } else { - sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange", ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split("\\.").length - 1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); - } - } else { - sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - if (player == null) { - return true; - } - if (command.getName().equals("resadmin")) { - if (args.length == 1 && args[0].equals("on")) { - resadminToggle.add(player.getName()); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("AdminToggle", language.getPhrase("TurnOn"))); - return true; - } else if (args.length == 1 && args[0].equals("off")) { - resadminToggle.remove(player.getName()); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("AdminToggle", language.getPhrase("TurnOff"))); - return true; - } - } - if (!resadmin && resadminToggle.contains(player.getName())) { - if (!gmanager.isResidenceAdmin(player)) { - resadminToggle.remove(player.getName()); - } - } - if (cmd.equals("select")) { - return commandResSelect(args, resadmin, player, page); - } - if (cmd.equals("create")) { - return commandResCreate(args, resadmin, player, page); - } - if (cmd.equals("subzone") || cmd.equals("sz")) { - return commandResSubzone(args, resadmin, player, page); - } - if (cmd.equals("gui")) { - return commandResGui(args, resadmin, player, page); - } - if (cmd.equals("sublist")) { - return commandResSublist(args, resadmin, player, page); - } - if (cmd.equals("removeall")) { - if (args.length != 2) { - return false; - } - if (resadmin || args[1].endsWith(pname)) { - rmanager.removeAllByOwner(player, args[1]); - player.sendMessage(ChatColor.GREEN + language.getPhrase("RemovePlayersResidences", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - } - return true; - } - if (cmd.equals("compass")) { - return commandResCompass(args, resadmin, player, page); - } - if (cmd.equals("area")) { - return commandResArea(args, resadmin, player, page); - } - if (cmd.equals("lists")) { - return commandResList(args, resadmin, player, page); - } - if (cmd.equals("default")) { - if (args.length == 2) { - ClaimedResidence res = rmanager.getByName(args[1]); - res.getPermissions().applyDefaultFlags(player, resadmin); - return true; - } - return false; - } - if (cmd.equals("limits")) { - if (args.length == 1) { - gmanager.getGroup(player).printLimits(player); - return true; - } - return false; - } - if (cmd.equals("info")) { - if (args.length == 1) { - String area = rmanager.getNameByLoc(player.getLocation()); - if (area != null) { - rmanager.printAreaInfo(area, player); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 2) { - rmanager.printAreaInfo(args[1], player); - return true; - } - return false; - } - if (cmd.equals("check")) { - if (args.length == 3 || args.length == 4) { - if (args.length == 4) { - pname = args[3]; - } - ClaimedResidence res = rmanager.getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { - player.sendMessage(language.getPhrase("FlagCheckFalse", ChatColor.YELLOW + args[2] + ChatColor.RED + "." + ChatColor.YELLOW + pname + ChatColor.RED + "." + ChatColor.YELLOW + args[1] + ChatColor.RED)); - } else { - player.sendMessage(language.getPhrase("FlagCheckTrue", ChatColor.GREEN + args[2] + ChatColor.YELLOW + "." + ChatColor.GREEN + pname + ChatColor.YELLOW + "." + ChatColor.YELLOW + args[1] + ChatColor.RED + "." + (res.getPermissions().playerHas(pname, res.getPermissions().getWorld(), args[2], false) ? ChatColor.GREEN + "TRUE" : ChatColor.RED + "FALSE"))); - } - return true; - } - return false; - } - if (cmd.equals("current")) { - if (args.length != 1) { - return false; - } - String res = rmanager.getNameByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); - } else { - player.sendMessage(ChatColor.GREEN + language.getPhrase("InResidence", ChatColor.YELLOW + res + ChatColor.GREEN)); - } - return true; - } - if (cmd.equals("set")) { - return commandResSet(args, resadmin, player, page); - } - if (cmd.equals("pset")) { - return commandResPset(args, resadmin, player, page); - } - if (cmd.equals("gset")) { - return commandResGset(args, resadmin, player, page); - } - if (cmd.equals("lset")) { - return commandResLset(args, resadmin, player, page); - } - if (cmd.equals("list")) { - if (args.length == 1) { - rmanager.listResidences(player); - return true; - } else if (args.length == 2) { - try { - Integer.parseInt(args[1]); - rmanager.listResidences(player, page); - } catch (Exception ex) { - rmanager.listResidences(player, args[1]); - } - return true; - } else if (args.length == 3) { - rmanager.listResidences(player, args[1], page); - return true; - } - return false; - } - if (cmd.equals("listhidden")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - if (args.length == 1) { - rmanager.listResidences(player, 1, true); - return true; - } else if (args.length == 2) { - try { - Integer.parseInt(args[1]); - rmanager.listResidences(player, page, true); - } catch (Exception ex) { - rmanager.listResidences(player, args[1], 1, true); - } - return true; - } else if (args.length == 3) { - rmanager.listResidences(player, args[1], page, true); - return true; - } - return false; - } - if (cmd.equals("rename")) { - if (args.length == 3) { - rmanager.renameResidence(player, args[1], args[2], resadmin); - return true; - } - return false; - } - if (cmd.equals("renamearea")) { - if (args.length == 4) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - res.renameArea(player, args[2], args[3], resadmin); - return true; - } - return false; - } - if (cmd.equals("unstuck")) { - if (args.length != 1) { - return false; - } - group = gmanager.getGroup(player); - if (!group.hasUnstuckAccess()) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - ClaimedResidence res = rmanager.getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); - } else { - player.sendMessage(ChatColor.YELLOW + language.getPhrase("Moved") + "..."); - player.teleport(res.getOutsideFreeLoc(player.getLocation())); - } - return true; - } + if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { + return commandHelp(args, resadmin, sender); + } + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + Player player = null; + PermissionGroup group = null; + String pname = null; + if (sender instanceof Player) { + player = (Player) sender; + group = Residence.getPermissionManager().getGroup(player); + pname = player.getName(); + } else { + resadmin = true; + } + if (cmanager.allowAdminsOnly()) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("AdminOnly")); + return true; + } + } + if (args.length == 0) { + return false; + } + if (args.length == 0) { + args = new String[1]; + args[0] = "?"; + } + String cmd = args[0].toLowerCase(); + if (cmd.equals("remove") || cmd.equals("delete")) { + return commandResRemove(args, resadmin, sender, page); + } + if (cmd.equals("confirm")) { + return commandResConfirm(args, resadmin, sender, page); + } + if (cmd.equals("version")) { + sender.sendMessage(ChatColor.GRAY + "------------------------------------"); + sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + this + .getDescription().getVersion()); + sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); + sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); + String names = null; + List authlist = this.getDescription().getAuthors(); + for (String auth : authlist) { + if (names == null) + names = auth; + else + names = names + ", " + auth; + } + sender.sendMessage(ChatColor.GREEN + "Authors: " + ChatColor.YELLOW + names); + sender.sendMessage(ChatColor.DARK_AQUA + "For a command list, and help, see the wiki:"); + sender.sendMessage(ChatColor.GREEN + "http://residencebukkitmod.wikispaces.com/"); + sender.sendMessage(ChatColor.AQUA + "Visit the Spigot Resource page at:"); + sender.sendMessage(ChatColor.BLUE + "http://www.spigotmc.org/resources/residence-reloaded-1-8.2697/"); + sender.sendMessage(ChatColor.GRAY + "------------------------------------"); + return true; + } + if (cmd.equals("setowner") && args.length == 3) { + if (!resadmin) { + sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().setOwner(args[2], true); + if (area.getParent() == null) { + sender.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "." + + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); + } else { + sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange", ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split( + "\\.").length - 1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); + } + } else { + sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + if (player == null) { + return true; + } + if (command.getName().equals("resadmin")) { + if (args.length == 1 && args[0].equals("on")) { + resadminToggle.add(player.getName()); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("AdminToggle", language.getPhrase("TurnOn"))); + return true; + } else if (args.length == 1 && args[0].equals("off")) { + resadminToggle.remove(player.getName()); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("AdminToggle", language.getPhrase("TurnOff"))); + return true; + } + } + if (!resadmin && resadminToggle.contains(player.getName())) { + if (!gmanager.isResidenceAdmin(player)) { + resadminToggle.remove(player.getName()); + } + } + if (cmd.equals("select")) { + return commandResSelect(args, resadmin, player, page); + } + + if (cmd.equals("expand")) { + return commandResExpand(args, resadmin, player, page); + } + + if (cmd.equals("contract")) { + return commandResContract(args, resadmin, player, page); + } + + if (cmd.equals("create")) { + return commandResCreate(args, resadmin, player, page); + } + if (cmd.equals("subzone") || cmd.equals("sz")) { + return commandResSubzone(args, resadmin, player, page); + } + if (cmd.equals("gui")) { + return commandResGui(args, resadmin, player, page); + } + if (cmd.equals("sublist")) { + return commandResSublist(args, resadmin, player, page); + } + if (cmd.equals("removeall")) { + if (args.length != 2) { + return false; + } + if (resadmin || args[1].endsWith(pname)) { + rmanager.removeAllByOwner(player, args[1]); + player.sendMessage(ChatColor.GREEN + language.getPhrase("RemovePlayersResidences", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + } + return true; + } + if (cmd.equals("compass")) { + return commandResCompass(args, resadmin, player, page); + } + if (cmd.equals("area")) { + return commandResArea(args, resadmin, player, page); + } + if (cmd.equals("lists")) { + return commandResList(args, resadmin, player, page); + } + if (cmd.equals("default")) { + if (args.length == 2) { + ClaimedResidence res = rmanager.getByName(args[1]); + res.getPermissions().applyDefaultFlags(player, resadmin); + return true; + } + return false; + } + if (cmd.equals("limits")) { + if (args.length == 1) { + gmanager.getGroup(player).printLimits(player); + return true; + } + return false; + } + if (cmd.equals("info")) { + if (args.length == 1) { + String area = rmanager.getNameByLoc(player.getLocation()); + if (area != null) { + rmanager.printAreaInfo(area, player); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 2) { + rmanager.printAreaInfo(args[1], player); + return true; + } + return false; + } + if (cmd.equals("check")) { + if (args.length == 3 || args.length == 4) { + if (args.length == 4) { + pname = args[3]; + } + ClaimedResidence res = rmanager.getByName(args[1]); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { + player.sendMessage(language.getPhrase("FlagCheckFalse", ChatColor.YELLOW + args[2] + ChatColor.RED + "." + ChatColor.YELLOW + pname + ChatColor.RED + + "." + ChatColor.YELLOW + args[1] + ChatColor.RED)); + } else { + player.sendMessage(language.getPhrase("FlagCheckTrue", ChatColor.GREEN + args[2] + ChatColor.YELLOW + "." + ChatColor.GREEN + pname + ChatColor.YELLOW + + "." + ChatColor.YELLOW + args[1] + ChatColor.RED + "." + (res.getPermissions().playerHas(pname, res.getPermissions().getWorld(), args[2], false) + ? ChatColor.GREEN + "TRUE" : ChatColor.RED + "FALSE"))); + } + return true; + } + return false; + } + if (cmd.equals("current")) { + if (args.length != 1) { + return false; + } + String res = rmanager.getNameByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + } else { + player.sendMessage(ChatColor.GREEN + language.getPhrase("InResidence", ChatColor.YELLOW + res + ChatColor.GREEN)); + } + return true; + } + if (cmd.equals("set")) { + return commandResSet(args, resadmin, player, page); + } + if (cmd.equals("pset")) { + return commandResPset(args, resadmin, player, page); + } + if (cmd.equals("gset")) { + return commandResGset(args, resadmin, player, page); + } + if (cmd.equals("lset")) { + return commandResLset(args, resadmin, player, page); + } + if (cmd.equals("list")) { + if (args.length == 1) { + rmanager.listResidences(player); + return true; + } else if (args.length == 2) { + try { + Integer.parseInt(args[1]); + rmanager.listResidences(player, page); + } catch (Exception ex) { + rmanager.listResidences(player, args[1]); + } + return true; + } else if (args.length == 3) { + rmanager.listResidences(player, args[1], page); + return true; + } + return false; + } + if (cmd.equals("listhidden")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + if (args.length == 1) { + rmanager.listResidences(player, 1, true); + return true; + } else if (args.length == 2) { + try { + Integer.parseInt(args[1]); + rmanager.listResidences(player, page, true); + } catch (Exception ex) { + rmanager.listResidences(player, args[1], 1, true); + } + return true; + } else if (args.length == 3) { + rmanager.listResidences(player, args[1], page, true); + return true; + } + return false; + } + if (cmd.equals("rename")) { + if (args.length == 3) { + rmanager.renameResidence(player, args[1], args[2], resadmin); + return true; + } + return false; + } + if (cmd.equals("renamearea")) { + if (args.length == 4) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + res.renameArea(player, args[2], args[3], resadmin); + return true; + } + return false; + } + if (cmd.equals("unstuck")) { + if (args.length != 1) { + return false; + } + group = gmanager.getGroup(player); + if (!group.hasUnstuckAccess()) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + ClaimedResidence res = rmanager.getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + } else { + player.sendMessage(ChatColor.YELLOW + language.getPhrase("Moved") + "..."); + player.teleport(res.getOutsideFreeLoc(player.getLocation())); + } + return true; + } if (cmd.equals("kick")) { - if (args.length != 2) { - return false; - } - Player targetplayer = Bukkit.getPlayer(args[1]); - if (targetplayer == null) { - - } + if (args.length != 2) { + return false; + } + Player targetplayer = Bukkit.getPlayer(args[1]); + if (targetplayer == null) { + + } group = gmanager.getGroup(player); - if (!group.hasKickAccess()) { + if (!group.hasKickAccess()) { player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); return true; - } - ClaimedResidence res = rmanager.getByLoc(targetplayer.getLocation()); - if (res.getOwner().equals(player.getName())) { + } + ClaimedResidence res = rmanager.getByLoc(targetplayer.getLocation()); + if (res.getOwner().equals(player.getName())) { if (res.getPlayersInResidence().contains(targetplayer)) { - targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation())); - targetplayer.sendMessage(ChatColor.RED + language.getPhrase("Kicked") + "!"); - } - } - - } - if (cmd.equals("mirror")) { - if (args.length != 3) { - return false; - } - rmanager.mirrorPerms(player, args[2], args[1], resadmin); - return true; - } - if (cmd.equals("listall")) { - if (args.length == 1) { - rmanager.listAllResidences(player, 1); - } else if (args.length == 2) { - try { - rmanager.listAllResidences(player, page); - } catch (Exception ex) { - } - } else { - return false; - } - return true; - } - if (cmd.equals("listallhidden")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - if (args.length == 1) { - rmanager.listAllResidences(player, 1, true); - } else if (args.length == 2) { - try { - rmanager.listAllResidences(player, page, true); - } catch (Exception ex) { - } - } else { - return false; - } - return true; - } - if (cmd.equals("material")) { - if (args.length != 2) { - return false; - } - try { - player.sendMessage(ChatColor.GREEN + language.getPhrase("MaterialGet", ChatColor.GOLD + args[1] + ChatColor.GREEN + "." + ChatColor.RED + Material.getMaterial(Integer.parseInt(args[1])).name() + ChatColor.GREEN)); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); - } - return true; - } - if (cmd.equals("tpset")) { - ClaimedResidence res = rmanager.getByLoc(player.getLocation()); - if (res != null) { - res.setTpLoc(player, resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - if (cmd.equals("tp")) { - if (args.length != 2) { - return false; - } - ClaimedResidence res = rmanager.getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - res.tpToResidence(player, player, resadmin); - return true; - } - if (cmd.equals("lease")) { - return commandResLease(args, resadmin, player, page); - } - if (cmd.equals("bank")) { - return commandResBank(args, resadmin, player, page); - } - if (cmd.equals("market")) { - return commandResMarket(args, resadmin, player, page); - } - if (cmd.equals("message")) { - return commandResMessage(args, resadmin, player, page); - } - if (cmd.equals("give") && args.length == 3) { - rmanager.giveResidence(player, args[2], args[1], resadmin); - return true; - } - if (cmd.equals("server")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - if (args.length == 2) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - res.getPermissions().setOwner("Server Land", false); - player.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "." + ChatColor.YELLOW + "Server Land" + ChatColor.GREEN)); - return true; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - } - if (cmd.equals("clearflags")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().clearFlags(); - player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagsCleared")); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - if (cmd.equals("tool")) { - player.sendMessage(ChatColor.YELLOW + language.getPhrase("SelectionTool") + ":" + ChatColor.GREEN + Material.getMaterial(cmanager.getSelectionTooldID())); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("InfoTool") + ": " + ChatColor.GREEN + Material.getMaterial(cmanager.getInfoToolID())); - return true; - } - return false; + targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation())); + targetplayer.sendMessage(ChatColor.RED + language.getPhrase("Kicked") + "!"); + } + } + + } + if (cmd.equals("mirror")) { + if (args.length != 3) { + return false; + } + rmanager.mirrorPerms(player, args[2], args[1], resadmin); + return true; + } + if (cmd.equals("listall")) { + if (args.length == 1) { + rmanager.listAllResidences(player, 1); + } else if (args.length == 2) { + try { + rmanager.listAllResidences(player, page); + } catch (Exception ex) { + } + } else { + return false; + } + return true; + } + if (cmd.equals("listallhidden")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + if (args.length == 1) { + rmanager.listAllResidences(player, 1, true); + } else if (args.length == 2) { + try { + rmanager.listAllResidences(player, page, true); + } catch (Exception ex) { + } + } else { + return false; + } + return true; + } + if (cmd.equals("material")) { + if (args.length != 2) { + return false; + } + try { + player.sendMessage(ChatColor.GREEN + language.getPhrase("MaterialGet", ChatColor.GOLD + args[1] + ChatColor.GREEN + "." + ChatColor.RED + Material + .getMaterial(Integer.parseInt(args[1])).name() + ChatColor.GREEN)); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); + } + return true; + } + if (cmd.equals("tpset")) { + ClaimedResidence res = rmanager.getByLoc(player.getLocation()); + if (res != null) { + res.setTpLoc(player, resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + if (cmd.equals("tp")) { + if (args.length != 2) { + return false; + } + ClaimedResidence res = rmanager.getByName(args[1]); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + res.tpToResidence(player, player, resadmin); + return true; + } + + if (cmd.equals("tpconfirm")) { + if (args.length != 1) { + return false; + } + if (teleportMap.containsKey(player.getName())) { + teleportMap.get(player.getName()).tpToResidence(player, player, resadmin); + teleportMap.remove(player.getName()); + } else + player.sendMessage(ChatColor.RED + language.getPhrase("NoTeleportConfirm")); + return true; + } + + if (cmd.equals("lease")) { + return commandResLease(args, resadmin, player, page); + } + if (cmd.equals("bank")) { + return commandResBank(args, resadmin, player, page); + } + if (cmd.equals("market")) { + return commandResMarket(args, resadmin, player, page); + } + if (cmd.equals("message")) { + return commandResMessage(args, resadmin, player, page); + } + if (cmd.equals("give") && args.length == 3) { + rmanager.giveResidence(player, args[2], args[1], resadmin); + return true; + } + if (cmd.equals("server")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + if (args.length == 2) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + res.getPermissions().setOwner("Server Land", false); + player.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "." + ChatColor.YELLOW + + "Server Land" + ChatColor.GREEN)); + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + } + if (cmd.equals("clearflags")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().clearFlags(); + player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagsCleared")); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + if (cmd.equals("tool")) { + player.sendMessage(ChatColor.YELLOW + language.getPhrase("SelectionTool") + ":" + ChatColor.GREEN + Material.getMaterial(cmanager.getSelectionTooldID())); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("InfoTool") + ": " + ChatColor.GREEN + Material.getMaterial(cmanager.getInfoToolID())); + return true; + } + return false; } private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender) { - if (helppages != null) { - String helppath = "res"; - for (int i = 0; i < args.length; i++) { - if (args[i].equalsIgnoreCase("?")) { - break; - } - helppath = helppath + "." + args[i]; - } - int page = 1; - if (!args[args.length - 1].equalsIgnoreCase("?")) { - try { - page = Integer.parseInt(args[args.length - 1]); - } catch (Exception ex) { - sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidHelp")); - } - } - if (helppages.containesEntry(helppath)) { - helppages.printHelp(sender, page, helppath); - return true; - } - } - return false; + if (helppages != null) { + String helppath = "res"; + for (int i = 0; i < args.length; i++) { + if (args[i].equalsIgnoreCase("?")) { + break; + } + helppath = helppath + "." + args[i]; + } + int page = 1; + if (!args[args.length - 1].equalsIgnoreCase("?")) { + try { + page = Integer.parseInt(args[args.length - 1]); + } catch (Exception ex) { + sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidHelp")); + } + } + if (helppages.containesEntry(helppath)) { + helppages.printHelp(sender, page, helppath); + return true; + } + } + return false; + } + + private boolean commandResExpand(String[] args, boolean resadmin, Player player, int page) { + String resName; + String areaName; + ClaimedResidence res = null; + res = rmanager.getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + resName = res.getName(); + CuboidArea area = null; + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + if (area != null) { + smanager.placeLoc1(player, area.getHighLoc()); + smanager.placeLoc2(player, area.getLowLoc()); + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName + + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); + } + int amount; + try { + amount = Integer.parseInt(args[1]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + + if (amount < 0) + amount = amount * -1; + + smanager.modify(player, false, amount); + + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + if (Residence.wep != null) { + if (Residence.wepid == Residence.getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( + player.getName())), areaName, + resadmin); + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + } + return false; + } + + private boolean commandResContract(String[] args, boolean resadmin, Player player, int page) { + String resName; + String areaName; + ClaimedResidence res = null; + res = rmanager.getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + resName = res.getName(); + CuboidArea area = null; + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + if (area != null) { + smanager.placeLoc1(player, area.getHighLoc()); + smanager.placeLoc2(player, area.getLowLoc()); + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName + + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); + } + int amount; + try { + amount = Integer.parseInt(args[1]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + + if (amount < 0) + amount = amount * -1; + + if (!smanager.contract(player, amount, resadmin)) + return true; + + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + if (Residence.wep != null) { + if (Residence.wepid == Residence.getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( + player.getName())), areaName, resadmin); + Residence.getSelectionManager().MakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() + .getPlayerLoc2(player.getName()), false); + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + } + return false; } private boolean commandResSelect(String[] args, boolean resadmin, Player player, int page) { - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (!group.selectCommandAccess() && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); - return true; - } - if (!group.canCreateResidences() && group.getMaxSubzoneDepth() <= 0 && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); - return true; - } - if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player.isPermissionSet("residence.select")) && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); - return true; - } - if (args.length == 2) { - if (args[1].equals("size") || args[1].equals("cost")) { - if (smanager.hasPlacedBoth(player.getName())) { - try { - smanager.showSelectionInfo(player); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - return true; - } - } else if (smanager.worldEdit(player)) { - try { - smanager.showSelectionInfo(player); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - return true; - } - } - } else if (args[1].equals("vert")) { - smanager.vert(player, resadmin); - return true; - } else if (args[1].equals("sky")) { - smanager.sky(player, resadmin); - return true; - } else if (args[1].equals("bedrock")) { - smanager.bedrock(player, resadmin); - return true; - } else if (args[1].equals("coords")) { - Location playerLoc1 = smanager.getPlayerLoc1(player.getName()); - if (playerLoc1 != null) { - player.sendMessage(ChatColor.GREEN + language.getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + ", " + playerLoc1.getBlockY() + ", " + playerLoc1.getBlockZ() + ")"); - } - Location playerLoc2 = smanager.getPlayerLoc2(player.getName()); - if (playerLoc2 != null) { - player.sendMessage(ChatColor.GREEN + language.getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + ", " + playerLoc2.getBlockY() + ", " + playerLoc2.getBlockZ() + ")"); - } - return true; - } else if (args[1].equals("chunk")) { - smanager.selectChunk(player); - return true; - } else if (args[1].equals("worldedit")) { - if (smanager.worldEdit(player)) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); - } - return true; - } - } else if (args.length == 3) { - if (args[1].equals("expand")) { - int amount; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); - return true; - } - smanager.modify(player, false, amount); - return true; - } else if (args[1].equals("shift")) { - int amount; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); - return true; - } - smanager.modify(player, true, amount); - return true; - } - } - if (args.length > 1 && args[1].equals("residence")) { - String resName; - String areaName; - ClaimedResidence res = null; - if (args.length > 2) { - res = rmanager.getByName(args[2]); - } else { - res = rmanager.getByLoc(player.getLocation()); - } - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - resName = res.getName(); - CuboidArea area = null; - if (args.length > 3) { - area = res.getArea(args[3]); - areaName = args[3]; - } else { - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - } - if (area != null) { - smanager.placeLoc1(player, area.getHighLoc()); - smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName + ChatColor.GREEN)); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); - } - return true; - } else { - try { - smanager.selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); - return true; - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectionFail")); - return true; - } - } + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (!group.selectCommandAccess() && !resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); + return true; + } + if (!group.canCreateResidences() && group.getMaxSubzoneDepth() <= 0 && !resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); + return true; + } + if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player + .isPermissionSet("residence.select")) && !resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); + return true; + } + if (args.length == 2) { + if (args[1].equals("size") || args[1].equals("cost")) { + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + try { + smanager.showSelectionInfo(player); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + return true; + } + } else if (smanager.worldEdit(player)) { + try { + smanager.showSelectionInfo(player); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + return true; + } + } + } else if (args[1].equals("vert")) { + smanager.vert(player, resadmin); + return true; + } else if (args[1].equals("sky")) { + smanager.sky(player, resadmin); + return true; + } else if (args[1].equals("bedrock")) { + smanager.bedrock(player, resadmin); + return true; + } else if (args[1].equals("coords")) { + Location playerLoc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); + if (playerLoc1 != null) { + player.sendMessage(ChatColor.GREEN + language.getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + ", " + + playerLoc1.getBlockY() + ", " + playerLoc1.getBlockZ() + ")"); + } + Location playerLoc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); + if (playerLoc2 != null) { + player.sendMessage(ChatColor.GREEN + language.getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + ", " + + playerLoc2.getBlockY() + ", " + playerLoc2.getBlockZ() + ")"); + } + return true; + } else if (args[1].equals("chunk")) { + smanager.selectChunk(player); + return true; + } else if (args[1].equals("worldedit")) { + if (smanager.worldEdit(player)) { + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); + } + return true; + } + } else if (args.length == 3) { + if (args[1].equals("expand")) { + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + smanager.modify(player, false, amount); + return true; + } else if (args[1].equals("shift")) { + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + smanager.modify(player, true, amount); + return true; + } + } + if (args.length > 1 && args[1].equals("residence")) { + String resName; + String areaName; + ClaimedResidence res = null; + if (args.length > 2) { + res = rmanager.getByName(args[2]); + } else { + res = rmanager.getByLoc(player.getLocation()); + } + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + resName = res.getName(); + CuboidArea area = null; + if (args.length > 3) { + area = res.getArea(args[3]); + areaName = args[3]; + } else { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } + if (area != null) { + smanager.placeLoc1(player, area.getHighLoc()); + smanager.placeLoc2(player, area.getLowLoc()); + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName + + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); + } + return true; + } else { + try { + smanager.selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); + return true; + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectionFail")); + return true; + } + } } private boolean commandResCreate(String[] args, boolean resadmin, Player player, int page) { - if (args.length != 2) { - return false; - } - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - if (smanager.hasPlacedBoth(player.getName())) { - rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName()), resadmin); - return true; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - return true; - } + if (args.length != 2) { + return false; + } + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + if (wep != null) { + if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) == null) { + rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2( + player.getName()), resadmin); + return true; + } else if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) != null) { + ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); + player.sendMessage(ChatColor.RED + language.getPhrase("SelectOverlap").replace("%1", Region.getId())); + + Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), + Region.getMinimumPoint().getBlockX(), Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); + + Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), + Region.getMaximumPoint().getBlockX(), Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); + + Residence.getSelectionManager().NewMakeBorders(player, lowLoc, highLoc, true); + Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() + .getPlayerLoc2(player.getName()), false); + } else if (Residence.wg == null) { + rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName()), resadmin); + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + return true; + } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + return true; + } + return true; } private boolean commandResSubzone(String[] args, boolean resadmin, Player player, int page) { - if (args.length != 2 && args.length != 3) { - return false; - } - String zname; - String parent; - if (args.length == 2) { - parent = rmanager.getNameByLoc(player.getLocation()); - zname = args[1]; - } else { - parent = args[1]; - zname = args[2]; - } - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - if (smanager.hasPlacedBoth(player.getName())) { - ClaimedResidence res = rmanager.getByName(parent); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - res.addSubzone(player, smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName()), zname, resadmin); - return true; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - return true; - } + if (args.length != 2 && args.length != 3) { + return false; + } + String zname; + String parent; + if (args.length == 2) { + parent = rmanager.getNameByLoc(player.getLocation()); + zname = args[1]; + } else { + parent = args[1]; + zname = args[2]; + } + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + if (wep != null) { + if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = rmanager.getByName(parent); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), + zname, resadmin); + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + return true; + } } private boolean commandResArea(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 4) { - if (args[1].equals("remove")) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.removeArea(player, args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args[1].equals("add")) { - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - if (smanager.hasPlacedBoth(player.getName())) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.addArea(player, new CuboidArea(smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName())), args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - } - return true; - } else if (args[1].equals("replace")) { - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - if (smanager.hasPlacedBoth(player.getName())) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.replaceArea(player, new CuboidArea(smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName())), args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - } - return true; - } - } - if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.printAreaList(player, page); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) - { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.printAdvancedAreaList(player, page); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; + if (args.length == 4) { + if (args[1].equals("remove")) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.removeArea(player, args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args[1].equals("add")) { + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + if (wep != null) { + if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.addArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( + player.getName())), args[3], + resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + } + return true; + } else if (args[1].equals("replace")) { + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + if (wep != null) { + if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() + .getPlayerLoc2(player.getName())), + args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + } + return true; + } + } + if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.printAreaList(player, page); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.printAdvancedAreaList(player, page); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; } private boolean commandResRemove(String[] args, boolean resadmin, CommandSender sender, int page) { - Player player = null; - if (sender instanceof Player) { - player = (Player) sender; - if (args.length == 1) { - String area = rmanager.getNameByLoc(player.getLocation()); - if (area != null) { - ClaimedResidence res = rmanager.getByName(area); - if (res.getParent() != null) { - String[] split = area.split("\\."); - String words = split[split.length - 1]; - if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); - deleteConfirm.put(player.getName(), area); - } else { - rmanager.removeResidence(player, area, resadmin); - } - return true; - } else { - if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + area + ChatColor.RED)); - deleteConfirm.put(player.getName(), area); - } else { - rmanager.removeResidence(player, area, resadmin); - } - return true; - } - } - return false; - } - } - if (args.length != 2) { - return false; - } - if (player != null) { - if (!deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(deleteConfirm.get(player.getName()))) { - String words = ""; - if (rmanager.getByName(args[1]) != null) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res.getParent() != null) { - String[] split = args[1].split("\\."); - words = split[split.length - 1]; - } - } - if (words == "") { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); - } - deleteConfirm.put(player.getName(), args[1]); - } else { - rmanager.removeResidence(player, args[1], resadmin); - } - } else { - if (!deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(deleteConfirm.get("Console"))) { - String words = ""; - if (rmanager.getByName(args[1]) != null) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res.getParent() != null) { - String[] split = args[1].split("\\."); - words = split[split.length - 1]; - } - } - if (words == "") { - server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); - } else { - server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); - } - deleteConfirm.put("Console", args[1]); - } else { - rmanager.removeResidence(args[1]); - } - } - return true; + Player player = null; + if (sender instanceof Player) { + player = (Player) sender; + if (args.length == 1) { + String area = rmanager.getNameByLoc(player.getLocation()); + if (area != null) { + ClaimedResidence res = rmanager.getByName(area); + if (res.getParent() != null) { + String[] split = area.split("\\."); + String words = split[split.length - 1]; + if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); + deleteConfirm.put(player.getName(), area); + } else { + rmanager.removeResidence(player, area, resadmin); + } + return true; + } else { + if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + area + ChatColor.RED)); + deleteConfirm.put(player.getName(), area); + } else { + rmanager.removeResidence(player, area, resadmin); + } + return true; + } + } + return false; + } + } + if (args.length != 2) { + return false; + } + if (player != null) { + if (!deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(deleteConfirm.get(player.getName()))) { + String words = ""; + if (rmanager.getByName(args[1]) != null) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res.getParent() != null) { + String[] split = args[1].split("\\."); + words = split[split.length - 1]; + } + } + if (words == "") { + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); + } + deleteConfirm.put(player.getName(), args[1]); + } else { + rmanager.removeResidence(player, args[1], resadmin); + } + } else { + if (!deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(deleteConfirm.get("Console"))) { + String words = ""; + if (rmanager.getByName(args[1]) != null) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res.getParent() != null) { + String[] split = args[1].split("\\."); + words = split[split.length - 1]; + } + } + if (words == "") { + server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); + } else { + server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); + } + deleteConfirm.put("Console", args[1]); + } else { + rmanager.removeResidence(args[1]); + } + } + return true; } private boolean commandResConfirm(String[] args, boolean resadmin, CommandSender sender, int page) { - Player player = null; - String name = "Console"; - if (sender instanceof Player) { - player = (Player) sender; - name = player.getName(); - } - if (args.length == 1) { - String area = deleteConfirm.get(name); - if (area == null) { - sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } else { - rmanager.removeResidence(player, area, resadmin); - deleteConfirm.remove(name); - if (player == null) { - sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); - } - } - } - return true; + Player player = null; + String name = "Console"; + if (sender instanceof Player) { + player = (Player) sender; + name = player.getName(); + } + if (args.length == 1) { + String area = deleteConfirm.get(name); + if (area == null) { + sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } else { + rmanager.removeResidence(player, area, resadmin); + deleteConfirm.remove(name); + if (player == null) { + sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); + } + } + } + return true; } private boolean commandResSet(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 3) { - String area = rmanager.getNameByLoc(player.getLocation()); - if (area != null) { - rmanager.getByName(area).getPermissions().setFlag(player, args[1], args[2], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 4) { - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().setFlag(player, args[2], args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; + if (args.length == 3) { + String area = rmanager.getNameByLoc(player.getLocation()); + if (area != null) { + rmanager.getByName(area).getPermissions().setFlag(player, args[1], args[2], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 4) { + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().setFlag(player, args[2], args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; } private boolean commandResPset(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { - ClaimedResidence area = rmanager.getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().removeAllPlayerFlags(player, args[1], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().removeAllPlayerFlags(player, args[2], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 4) { - ClaimedResidence area = rmanager.getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().setPlayerFlag(player, args[1], args[2], args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 5) { - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().setPlayerFlag(player, args[2], args[3], args[4], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; + if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { + ClaimedResidence area = rmanager.getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().removeAllPlayerFlags(player, args[1], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().removeAllPlayerFlags(player, args[2], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 4) { + ClaimedResidence area = rmanager.getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().setPlayerFlag(player, args[1], args[2], args[3], resadmin, true); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 5) { + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().setPlayerFlag(player, args[2], args[3], args[4], resadmin, true); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; } private boolean commandResGset(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 4) { - ClaimedResidence area = rmanager.getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidArea")); - } - return true; - } else if (args.length == 5) { - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; + if (args.length == 4) { + ClaimedResidence area = rmanager.getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidArea")); + } + return true; + } else if (args.length == 5) { + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; } private boolean commandResLset(String[] args, boolean resadmin, Player player, int page) { - ClaimedResidence res = null; - Material mat = null; - String listtype = null; - boolean showinfo = false; - if (args.length == 2 && args[1].equals("info")) { - res = rmanager.getByLoc(player.getLocation()); - showinfo = true; - } else if (args.length == 3 && args[2].equals("info")) { - res = rmanager.getByName(args[1]); - showinfo = true; - } - if (showinfo) { - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - player.sendMessage(ChatColor.RED + "Blacklist:"); - res.getItemBlacklist().printList(player); - player.sendMessage(ChatColor.GREEN + "Ignorelist:"); - res.getItemIgnoreList().printList(player); - return true; - } else if (args.length == 4) { - res = rmanager.getByName(args[1]); - listtype = args[2]; - try { - mat = Material.valueOf(args[3].toUpperCase()); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); - return true; - } - } else if (args.length == 3) { - res = rmanager.getByLoc(player.getLocation()); - listtype = args[1]; - try { - mat = Material.valueOf(args[2].toUpperCase()); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); - return true; - } - } - if (res != null) { - if (listtype.equalsIgnoreCase("blacklist")) { - res.getItemBlacklist().playerListChange(player, mat, resadmin); - } else if (listtype.equalsIgnoreCase("ignorelist")) { - res.getItemIgnoreList().playerListChange(player, mat, resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidList")); - } - return true; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } + ClaimedResidence res = null; + Material mat = null; + String listtype = null; + boolean showinfo = false; + if (args.length == 2 && args[1].equals("info")) { + res = rmanager.getByLoc(player.getLocation()); + showinfo = true; + } else if (args.length == 3 && args[2].equals("info")) { + res = rmanager.getByName(args[1]); + showinfo = true; + } + if (showinfo) { + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + player.sendMessage(ChatColor.RED + "Blacklist:"); + res.getItemBlacklist().printList(player); + player.sendMessage(ChatColor.GREEN + "Ignorelist:"); + res.getItemIgnoreList().printList(player); + return true; + } else if (args.length == 4) { + res = rmanager.getByName(args[1]); + listtype = args[2]; + try { + mat = Material.valueOf(args[3].toUpperCase()); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); + return true; + } + } else if (args.length == 3) { + res = rmanager.getByLoc(player.getLocation()); + listtype = args[1]; + try { + mat = Material.valueOf(args[2].toUpperCase()); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); + return true; + } + } + if (res != null) { + if (listtype.equalsIgnoreCase("blacklist")) { + res.getItemBlacklist().playerListChange(player, mat, resadmin); + } else if (listtype.equalsIgnoreCase("ignorelist")) { + res.getItemIgnoreList().playerListChange(player, mat, resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidList")); + } + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } } private boolean commandResBank(String[] args, boolean resadmin, Player player, int page) { - if (args.length != 3) { - return false; - } - ClaimedResidence res = rmanager.getByName(plistener.getCurrentResidenceName(player.getName())); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); - return true; - } - int amount = 0; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); - return true; - } - if (args[1].equals("deposit")) { - res.getBank().deposit(player, amount, resadmin); - } else if (args[1].equals("withdraw")) { - res.getBank().withdraw(player, amount, resadmin); - } else { - return false; - } - return true; + if (args.length != 3) { + return false; + } + ClaimedResidence res = rmanager.getByName(plistener.getCurrentResidenceName(player.getName())); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + return true; + } + int amount = 0; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + if (args[1].equals("deposit")) { + res.getBank().deposit(player, amount, resadmin); + } else if (args[1].equals("withdraw")) { + res.getBank().withdraw(player, amount, resadmin); + } else { + return false; + } + return true; } private boolean commandResLease(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 2 || args.length == 3) { - if (args[1].equals("renew")) { - if (args.length == 3) { - leasemanager.renewArea(args[2], player); - } else { - leasemanager.renewArea(rmanager.getNameByLoc(player.getLocation()), player); - } - return true; - } else if (args[1].equals("cost")) { - if (args.length == 3) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res == null || leasemanager.leaseExpires(args[2])) { - int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] + ChatColor.YELLOW + "." + ChatColor.RED + cost + ChatColor.YELLOW)); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); - } - return true; - } else { - String area = rmanager.getNameByLoc(player.getLocation()); - ClaimedResidence res = rmanager.getByName(area); - if (area == null || res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidArea")); - return true; - } - if (leasemanager.leaseExpires(area)) { - int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + area + ChatColor.YELLOW + "." + ChatColor.RED + cost + ChatColor.YELLOW)); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); - } - return true; - } - } - } else if (args.length == 4) { - if (args[1].equals("set")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - if (args[3].equals("infinite")) { - if (leasemanager.leaseExpires(args[2])) { - leasemanager.removeExpireTime(args[2]); - player.sendMessage(ChatColor.GREEN + language.getPhrase("LeaseInfinite")); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); - } - return true; - } else { - int days; - try { - days = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidDays")); - return true; - } - leasemanager.setExpireTime(player, args[2], days); - return true; - } - } - } - return false; + if (args.length == 2 || args.length == 3) { + if (args[1].equals("renew")) { + if (args.length == 3) { + leasemanager.renewArea(args[2], player); + } else { + leasemanager.renewArea(rmanager.getNameByLoc(player.getLocation()), player); + } + return true; + } else if (args[1].equals("cost")) { + if (args.length == 3) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res == null || leasemanager.leaseExpires(args[2])) { + int cost = leasemanager.getRenewCost(res); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] + ChatColor.YELLOW + "." + ChatColor.RED + + cost + ChatColor.YELLOW)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); + } + return true; + } else { + String area = rmanager.getNameByLoc(player.getLocation()); + ClaimedResidence res = rmanager.getByName(area); + if (area == null || res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidArea")); + return true; + } + if (leasemanager.leaseExpires(area)) { + int cost = leasemanager.getRenewCost(res); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + area + ChatColor.YELLOW + "." + ChatColor.RED + cost + + ChatColor.YELLOW)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); + } + return true; + } + } + } else if (args.length == 4) { + if (args[1].equals("set")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + if (args[3].equals("infinite")) { + if (leasemanager.leaseExpires(args[2])) { + leasemanager.removeExpireTime(args[2]); + player.sendMessage(ChatColor.GREEN + language.getPhrase("LeaseInfinite")); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); + } + return true; + } else { + int days; + try { + days = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidDays")); + return true; + } + leasemanager.setExpireTime(player, args[2], days); + return true; + } + } + } + return false; } private boolean commandResMarket(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 1) { - return false; - } - String command = args[1].toLowerCase(); - if (command.equals("list")) { - return commandResMarketList(args, resadmin, player, page); - } - if (command.equals("autorenew")) { - return commandResMarketAutorenew(args, resadmin, player, page); - } - if (command.equals("rentable")) { - return commandResMarketRentable(args, resadmin, player, page); - } - if (command.equals("rent")) { - return commandResMarketRent(args, resadmin, player, page); - } - if (command.equals("release")) { - if (args.length != 3) { - return false; - } - if (rentmanager.isRented(args[2])) { - rentmanager.removeFromForRent(player, args[2], resadmin); - } else { - rentmanager.unrent(player, args[2], resadmin); - } - return true; - } - if (command.equals("info")) { - if (args.length == 2) { - String areaname = rmanager.getNameByLoc(player.getLocation()); - tmanager.viewSaleInfo(areaname, player); - if (cmanager.enabledRentSystem() && rentmanager.isForRent(areaname)) { - rentmanager.printRentInfo(player, areaname); - } - } else if (args.length == 3) { - tmanager.viewSaleInfo(args[2], player); - if (cmanager.enabledRentSystem() && rentmanager.isForRent(args[2])) { - rentmanager.printRentInfo(player, args[2]); - } - } else { - return false; - } - return true; - } - if (command.equals("buy")) { - if (args.length != 3) { - return false; - } - tmanager.buyPlot(args[2], player, resadmin); - return true; - } - if (command.equals("unsell")) { - if (args.length != 3) { - return false; - } - tmanager.removeFromSale(player, args[2], resadmin); - return true; - } - if (command.equals("sell")) { - if (args.length != 4) { - return false; - } - int amount; - try { - amount = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); - return true; - } - tmanager.putForSale(args[2], player, amount, resadmin); - return true; - } - return false; + if (args.length == 1) { + return false; + } + String command = args[1].toLowerCase(); + if (command.equals("list")) { + return commandResMarketList(args, resadmin, player, page); + } + if (command.equals("autorenew")) { + return commandResMarketAutorenew(args, resadmin, player, page); + } + if (command.equals("rentable")) { + return commandResMarketRentable(args, resadmin, player, page); + } + if (command.equals("rent")) { + return commandResMarketRent(args, resadmin, player, page); + } + if (command.equals("release")) { + if (args.length != 3) { + return false; + } + if (rentmanager.isRented(args[2])) { + rentmanager.removeFromForRent(player, args[2], resadmin); + } else { + rentmanager.unrent(player, args[2], resadmin); + } + return true; + } + if (command.equals("info")) { + if (args.length == 2) { + String areaname = rmanager.getNameByLoc(player.getLocation()); + tmanager.viewSaleInfo(areaname, player); + if (cmanager.enabledRentSystem() && rentmanager.isForRent(areaname)) { + rentmanager.printRentInfo(player, areaname); + } + } else if (args.length == 3) { + tmanager.viewSaleInfo(args[2], player); + if (cmanager.enabledRentSystem() && rentmanager.isForRent(args[2])) { + rentmanager.printRentInfo(player, args[2]); + } + } else { + return false; + } + return true; + } + if (command.equals("buy")) { + if (args.length != 3) { + return false; + } + tmanager.buyPlot(args[2], player, resadmin); + return true; + } + if (command.equals("unsell")) { + if (args.length != 3) { + return false; + } + tmanager.removeFromSale(player, args[2], resadmin); + return true; + } + if (command.equals("sell")) { + if (args.length != 4) { + return false; + } + int amount; + try { + amount = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + tmanager.putForSale(args[2], player, amount, resadmin); + return true; + } + return false; } private boolean commandResMarketRent(String[] args, boolean resadmin, Player player, int page) { - if (args.length < 3 || args.length > 4) { - return false; - } - boolean repeat = false; - if (args.length == 4) { - if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { - repeat = true; - } else if (!args[3].equalsIgnoreCase("f") && !args[3].equalsIgnoreCase("false")) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); - return true; - } - } - rentmanager.rent(player, args[2], repeat, resadmin); - return true; + if (args.length < 3 || args.length > 4) { + return false; + } + boolean repeat = false; + if (args.length == 4) { + if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { + repeat = true; + } else if (!args[3].equalsIgnoreCase("f") && !args[3].equalsIgnoreCase("false")) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); + return true; + } + } + rentmanager.rent(player, args[2], repeat, resadmin); + return true; } private boolean commandResMarketRentable(String[] args, boolean resadmin, Player player, int page) { - if (args.length < 5 || args.length > 6) { - return false; - } - if (!cmanager.enabledRentSystem()) { - player.sendMessage(ChatColor.RED + language.getPhrase("RentDisabled")); - return true; - } - int days; - int cost; - try { - cost = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidCost")); - return true; - } - try { - days = Integer.parseInt(args[4]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidDays")); - return true; - } - boolean repeat = false; - if (args.length == 6) { - if (args[5].equalsIgnoreCase("t") || args[5].equalsIgnoreCase("true")) { - repeat = true; - } else if (!args[5].equalsIgnoreCase("f") && !args[5].equalsIgnoreCase("false")) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); - return true; - } - } - rentmanager.setForRent(player, args[2], cost, days, repeat, resadmin); - return true; + if (args.length < 5 || args.length > 6) { + return false; + } + if (!cmanager.enabledRentSystem()) { + player.sendMessage(ChatColor.RED + language.getPhrase("RentDisabled")); + return true; + } + int days; + int cost; + try { + cost = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidCost")); + return true; + } + try { + days = Integer.parseInt(args[4]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidDays")); + return true; + } + boolean repeat = false; + if (args.length == 6) { + if (args[5].equalsIgnoreCase("t") || args[5].equalsIgnoreCase("true")) { + repeat = true; + } else if (!args[5].equalsIgnoreCase("f") && !args[5].equalsIgnoreCase("false")) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); + return true; + } + } + rentmanager.setForRent(player, args[2], cost, days, repeat, resadmin); + return true; } private boolean commandResMarketAutorenew(String[] args, boolean resadmin, Player player, int page) { - if (!cmanager.enableEconomy()) { - player.sendMessage(ChatColor.RED + language.getPhrase("MarketDisabled")); - return true; - } - if (args.length != 4) { - return false; - } - boolean value; - if (args[3].equalsIgnoreCase("true") || args[3].equalsIgnoreCase("t")) { - value = true; - } else if (args[3].equalsIgnoreCase("false") || args[3].equalsIgnoreCase("f")) { - value = false; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); - return true; - } - if (rentmanager.isRented(args[2]) && rentmanager.getRentingPlayer(args[2]).equalsIgnoreCase(player.getName())) { - rentmanager.setRentedRepeatable(player, args[2], value, resadmin); - } else if (rentmanager.isForRent(args[2])) { - rentmanager.setRentRepeatable(player, args[2], value, resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("RentReleaseInvalid", ChatColor.YELLOW + args[2] + ChatColor.RED)); - } - return true; + if (!cmanager.enableEconomy()) { + player.sendMessage(ChatColor.RED + language.getPhrase("MarketDisabled")); + return true; + } + if (args.length != 4) { + return false; + } + boolean value; + if (args[3].equalsIgnoreCase("true") || args[3].equalsIgnoreCase("t")) { + value = true; + } else if (args[3].equalsIgnoreCase("false") || args[3].equalsIgnoreCase("f")) { + value = false; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); + return true; + } + if (rentmanager.isRented(args[2]) && rentmanager.getRentingPlayer(args[2]).equalsIgnoreCase(player.getName())) { + rentmanager.setRentedRepeatable(player, args[2], value, resadmin); + } else if (rentmanager.isForRent(args[2])) { + rentmanager.setRentRepeatable(player, args[2], value, resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("RentReleaseInvalid", ChatColor.YELLOW + args[2] + ChatColor.RED)); + } + return true; } private boolean commandResMarketList(String[] args, boolean resadmin, Player player, int page) { - if (!cmanager.enableEconomy()) { - player.sendMessage(ChatColor.RED + language.getPhrase("MarketDisabled")); - return true; - } - player.sendMessage(ChatColor.BLUE + "---" + language.getPhrase("MarketList") + "---"); - tmanager.printForSaleResidences(player); - if (cmanager.enabledRentSystem()) { - rentmanager.printRentableResidences(player); - } - return true; + if (!cmanager.enableEconomy()) { + player.sendMessage(ChatColor.RED + language.getPhrase("MarketDisabled")); + return true; + } + player.sendMessage(ChatColor.BLUE + "---" + language.getPhrase("MarketList") + "---"); + tmanager.printForSaleResidences(player); + if (cmanager.enabledRentSystem()) { + rentmanager.printRentableResidences(player); + } + return true; } private boolean commandResMessage(String[] args, boolean resadmin, Player player, int page) { - ClaimedResidence res = null; - int start = 0; - boolean enter = false; - if (args.length < 2) { - return false; - } - if (args[1].equals("enter")) { - enter = true; - res = rmanager.getByLoc(player.getLocation()); - start = 2; - } else if (args[1].equals("leave")) { - res = rmanager.getByLoc(player.getLocation()); - start = 2; - } else if (args[1].equals("remove")) { - if (args.length > 2 && args[2].equals("enter")) { - res = rmanager.getByLoc(player.getLocation()); - if (res != null) { - res.setEnterLeaveMessage(player, null, true, resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length > 2 && args[2].equals("leave")) { - res = rmanager.getByLoc(player.getLocation()); - if (res != null) { - res.setEnterLeaveMessage(player, null, false, resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); - return true; - } else if (args.length > 2 && args[2].equals("enter")) { - enter = true; - res = rmanager.getByName(args[1]); - start = 3; - } else if (args.length > 2 && args[2].equals("leave")) { - res = rmanager.getByName(args[1]); - start = 3; - } else if (args.length > 2 && args[2].equals("remove")) { - res = rmanager.getByName(args[1]); - if (args.length != 4) { - return false; - } - if (args[3].equals("enter")) { - if (res != null) { - res.setEnterLeaveMessage(player, null, true, resadmin); - } - return true; - } else if (args[3].equals("leave")) { - if (res != null) { - res.setEnterLeaveMessage(player, null, false, resadmin); - } - return true; - } - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); - return true; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); - return true; - } - if (start == 0) { - return false; - } - String message = ""; - for (int i = start; i < args.length; i++) { - message = message + args[i] + " "; - } - if (res != null) { - res.setEnterLeaveMessage(player, message, enter, resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; + ClaimedResidence res = null; + int start = 0; + boolean enter = false; + if (args.length < 2) { + return false; + } + if (args[1].equals("enter")) { + enter = true; + res = rmanager.getByLoc(player.getLocation()); + start = 2; + } else if (args[1].equals("leave")) { + res = rmanager.getByLoc(player.getLocation()); + start = 2; + } else if (args[1].equals("remove")) { + if (args.length > 2 && args[2].equals("enter")) { + res = rmanager.getByLoc(player.getLocation()); + if (res != null) { + res.setEnterLeaveMessage(player, null, true, resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length > 2 && args[2].equals("leave")) { + res = rmanager.getByLoc(player.getLocation()); + if (res != null) { + res.setEnterLeaveMessage(player, null, false, resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); + return true; + } else if (args.length > 2 && args[2].equals("enter")) { + enter = true; + res = rmanager.getByName(args[1]); + start = 3; + } else if (args.length > 2 && args[2].equals("leave")) { + res = rmanager.getByName(args[1]); + start = 3; + } else if (args.length > 2 && args[2].equals("remove")) { + res = rmanager.getByName(args[1]); + if (args.length != 4) { + return false; + } + if (args[3].equals("enter")) { + if (res != null) { + res.setEnterLeaveMessage(player, null, true, resadmin); + } + return true; + } else if (args[3].equals("leave")) { + if (res != null) { + res.setEnterLeaveMessage(player, null, false, resadmin); + } + return true; + } + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); + return true; + } + if (start == 0) { + return false; + } + String message = ""; + for (int i = start; i < args.length; i++) { + message = message + args[i] + " "; + } + if (res != null) { + res.setEnterLeaveMessage(player, message, enter, resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; } private boolean commandResSublist(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 1 || args.length == 2 || args.length == 3) { - ClaimedResidence res; - if (args.length == 1) { - res = rmanager.getByLoc(player.getLocation()); - } else { - res = rmanager.getByName(args[1]); - } - if (res != null) { - res.printSubzoneList(player, page); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; + if (args.length == 1 || args.length == 2 || args.length == 3) { + ClaimedResidence res; + if (args.length == 1) { + res = rmanager.getByLoc(player.getLocation()); + } else { + res = rmanager.getByName(args[1]); + } + if (res != null) { + res.printSubzoneList(player, page); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; } private boolean commandResCompass(String[] args, boolean resadmin, Player player, int page) { - if (args.length != 2) { - player.setCompassTarget(player.getWorld().getSpawnLocation()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetReset")); - return true; - } - if (rmanager.getByName(args[1]) != null) { - if (rmanager.getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { - Location low = rmanager.getByName(args[1]).getArea("main").getLowLoc(); - Location high = rmanager.getByName(args[1]).getArea("main").getHighLoc(); - Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); - player.setCompassTarget(mid); - player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetSet", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; + if (args.length != 2) { + player.setCompassTarget(player.getWorld().getSpawnLocation()); + player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetReset")); + return true; + } + if (rmanager.getByName(args[1]) != null) { + if (rmanager.getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { + Location low = rmanager.getByName(args[1]).getArea("main").getLowLoc(); + Location high = rmanager.getByName(args[1]).getArea("main").getHighLoc(); + Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high + .getBlockZ()) / 2); + player.setCompassTarget(mid); + player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetSet", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); + } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; } private boolean commandResGui(String[] args, boolean resadmin, Player player, int page) { - if (slistener != null) { - if (args.length == 1) { - ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, rmanager.getNameByLoc(player.getLocation()), resadmin); - } else if (args.length == 2) { - ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, args[1], resadmin); - } - } - return true; + if (slistener != null) { + if (args.length == 1) { + ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, rmanager.getNameByLoc(player.getLocation()), resadmin); + } else if (args.length == 2) { + ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, args[1], resadmin); + } + } + return true; } private boolean commandResList(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 2) { - if (args[1].equals("list")) { - pmanager.printLists(player); - return true; - } - } else if (args.length == 3) { - if (args[1].equals("view")) { - pmanager.printList(player, args[2]); - return true; - } else if (args[1].equals("remove")) { - pmanager.removeList(player, args[2]); - return true; - } else if (args[1].equals("add")) { - pmanager.makeList(player, args[2]); - return true; - } - } else if (args.length == 4) { - if (args[1].equals("apply")) { - pmanager.applyListToResidence(player, args[2], args[3], resadmin); - return true; - } - } else if (args.length == 5) { - if (args[1].equals("set")) { - pmanager.getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); - player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); - return true; - } - } else if (args.length == 6) { - if (args[1].equals("gset")) { - pmanager.getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); - return true; - } else if (args[1].equals("pset")) { - pmanager.getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); - return true; - } - } - return false; + if (args.length == 2) { + if (args[1].equals("list")) { + pmanager.printLists(player); + return true; + } + } else if (args.length == 3) { + if (args[1].equals("view")) { + pmanager.printList(player, args[2]); + return true; + } else if (args[1].equals("remove")) { + pmanager.removeList(player, args[2]); + return true; + } else if (args[1].equals("add")) { + pmanager.makeList(player, args[2]); + return true; + } + } else if (args.length == 4) { + if (args[1].equals("apply")) { + pmanager.applyListToResidence(player, args[2], args[3], resadmin); + return true; + } + } else if (args.length == 5) { + if (args[1].equals("set")) { + pmanager.getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); + player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); + return true; + } + } else if (args.length == 6) { + if (args[1].equals("gset")) { + pmanager.getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); + player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); + return true; + } else if (args[1].equals("pset")) { + pmanager.getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); + player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); + return true; + } + } + return false; } } diff --git a/src/com/bekvon/bukkit/residence/YmlMaker.java b/src/com/bekvon/bukkit/residence/YmlMaker.java new file mode 100644 index 000000000..5e5cf2626 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/YmlMaker.java @@ -0,0 +1,90 @@ +package com.bekvon.bukkit.residence; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.util.logging.Level; + +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +public class YmlMaker +{ + Residence Plugin; + public String fileName; + private JavaPlugin plugin; + public File ConfigFile; + private FileConfiguration Configuration; + + public YmlMaker(Residence Plugin) + { + this.Plugin = Plugin; + } + + public YmlMaker(JavaPlugin plugin, String fileName) + { + if (plugin == null) { + throw new IllegalArgumentException("plugin cannot be null"); + } + this.plugin = plugin; + this.fileName = fileName; + File dataFolder = plugin.getDataFolder(); + if (dataFolder == null) { + throw new IllegalStateException(); + } + this.ConfigFile = new File(dataFolder.toString() + File.separatorChar + this.fileName); + } + + public void reloadConfig() + { + try { + this.Configuration = YamlConfiguration.loadConfiguration(new InputStreamReader(new FileInputStream(this.ConfigFile), "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + InputStream defConfigStream = this.plugin.getResource(this.fileName); + if (defConfigStream != null) + { + @SuppressWarnings("deprecation") + YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream); + this.Configuration.setDefaults(defConfig); + } + } + + public FileConfiguration getConfig() + { + if (this.Configuration == null) { + reloadConfig(); + } + return this.Configuration; + } + + public void saveConfig() + { + if ((this.Configuration == null) || (this.ConfigFile == null)) { + return; + } + try + { + getConfig().save(this.ConfigFile); + } catch (IOException ex) + { + this.plugin.getLogger().log(Level.SEVERE, "Could not save config to " + this.ConfigFile, ex); + } + } + + public void saveDefaultConfig() + { + if (!this.ConfigFile.exists()) { + this.plugin.saveResource(this.fileName, false); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/chat/ChatManager.java b/src/com/bekvon/bukkit/residence/chat/ChatManager.java index 2814247a8..915cba4a8 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatManager.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatManager.java @@ -16,45 +16,40 @@ */ public class ChatManager { - protected Map channelmap; + protected Map channelmap; protected Server server; - public ChatManager() - { - server = Residence.getServ(); - channelmap = new HashMap(); + public ChatManager() { + server = Residence.getServ(); + channelmap = new HashMap(); } - public void setChannel(String player, String channel) - { - this.removeFromChannel(player); - if(!channelmap.containsKey(channel)) - channelmap.put(channel, new ChatChannel(channel)); - channelmap.get(channel).join(player); + public void setChannel(String player, String channel) { + this.removeFromChannel(player); + if (!channelmap.containsKey(channel)) + channelmap.put(channel, new ChatChannel(channel)); + channelmap.get(channel).join(player); } - public void removeFromChannel(String player) - { - for(ChatChannel chan : channelmap.values()) - { - if(chan.hasMember(player)) - chan.leave(player); - } + public void removeFromChannel(String player) { + for (ChatChannel chan : channelmap.values()) { + if (chan.hasMember(player)) { + chan.leave(player); + break; + } + } } - - public ChatChannel getChannel(String channel) - { - return channelmap.get(channel); + + public ChatChannel getChannel(String channel) { + return channelmap.get(channel); } - public ChatChannel getPlayerChannel(String player) - { - for(ChatChannel chan : channelmap.values()) - { - if(chan.hasMember(player)) - return chan; - } - return null; + public ChatChannel getPlayerChannel(String player) { + for (ChatChannel chan : channelmap.values()) { + if (chan.hasMember(player)) + return chan; + } + return null; } } diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index c8798a6fd..97ad069c5 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -26,6 +26,7 @@ public EssentialsEcoAdapter(Essentials p) { } } + @SuppressWarnings("deprecation") @Override public double getBalance(String playerName) { try { @@ -39,6 +40,7 @@ public double getBalance(String playerName) { } } + @SuppressWarnings("deprecation") @Override public boolean canAfford(String playerName, double amount) { try { @@ -51,6 +53,7 @@ public boolean canAfford(String playerName, double amount) { } } + @SuppressWarnings("deprecation") @Override public boolean add(String playerName, double amount) { if (Economy.playerExists(playerName)) { @@ -67,6 +70,7 @@ public boolean add(String playerName, double amount) { } } + @SuppressWarnings("deprecation") @Override public boolean subtract(String playerName, double amount) { if (Economy.playerExists(playerName)) { @@ -83,6 +87,7 @@ public boolean subtract(String playerName, double amount) { } } + @SuppressWarnings("deprecation") @Override public boolean transfer(String playerFrom, String playerTo, double amount) { try { diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index b6c3a4b56..8282f30dd 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -32,235 +32,255 @@ public class TransactionManager { PermissionManager gm; public static boolean chargeEconomyMoney(Player player, int amount) { - EconomyInterface econ = Residence.getEconomyManager(); - if (econ == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); - return false; - } - if (!econ.canAfford(player.getName(), amount)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); - return false; - } - econ.subtract(player.getName(), amount); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); - return true; + EconomyInterface econ = Residence.getEconomyManager(); + if (econ == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + return false; + } + if (!econ.canAfford(player.getName(), amount)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); + return false; + } + econ.subtract(player.getName(), amount); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); + return true; + } + + public static boolean giveEconomyMoney(Player player, int amount) { + if (amount == 0) + return true; + EconomyInterface econ = Residence.getEconomyManager(); + if (econ == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + return false; + } + + econ.add(player.getName(), amount); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyAdded", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); + return true; } public TransactionManager(ResidenceManager m, PermissionManager g) { - gm = g; - manager = m; - sellAmount = Collections.synchronizedMap(new HashMap()); + gm = g; + manager = m; + sellAmount = Collections.synchronizedMap(new HashMap()); } public void putForSale(String areaname, Player player, int amount, boolean resadmin) { - if (Residence.getConfigManager().enabledRentSystem()) { - if (Residence.getRentManager().isForRent(areaname)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentSellFail")); - return; - } - } - if (!resadmin) { - if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); - return; - } - boolean cansell = Residence.getPermissionManager().getGroup(player).canSellLand() || player.hasPermission("residence.sell"); - if (!cansell && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - if (amount <= 0) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); - return; - } - } - String pname = player.getName(); - ClaimedResidence area = manager.getByName(areaname); - if (area == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - if (!area.getPermissions().getOwner().equals(pname) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - if (sellAmount.containsKey(areaname)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AlreadySellFail")); - return; - } - sellAmount.put(areaname, amount); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForSale", ChatColor.YELLOW + areaname + ChatColor.GREEN + "." + ChatColor.YELLOW + amount + ChatColor.GREEN)); + if (Residence.getConfigManager().enabledRentSystem()) { + if (Residence.getRentManager().isForRent(areaname)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentSellFail")); + return; + } + } + if (!resadmin) { + if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + return; + } + boolean cansell = Residence.getPermissionManager().getGroup(player).canSellLand() || player.hasPermission("residence.sell"); + if (!cansell && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + if (amount <= 0) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); + return; + } + } + String pname = player.getName(); + ClaimedResidence area = manager.getByName(areaname); + if (area == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + if (!area.getPermissions().getOwner().equals(pname) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + if (sellAmount.containsKey(areaname)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AlreadySellFail")); + return; + } + sellAmount.put(areaname, amount); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForSale", ChatColor.YELLOW + areaname + ChatColor.GREEN + "." + ChatColor.YELLOW + + amount + ChatColor.GREEN)); } public boolean putForSale(String areaname, int amount) { - if (Residence.getConfigManager().enabledRentSystem()) { - if (Residence.getRentManager().isForRent(areaname)) { - return false; - } - } - ClaimedResidence area = manager.getByName(areaname); - if (area == null) { - return false; - } - if (sellAmount.containsKey(areaname)) { - return false; - } - sellAmount.put(areaname, amount); - return true; + if (Residence.getConfigManager().enabledRentSystem()) { + if (Residence.getRentManager().isForRent(areaname)) { + return false; + } + } + ClaimedResidence area = manager.getByName(areaname); + if (area == null) { + return false; + } + if (sellAmount.containsKey(areaname)) { + return false; + } + sellAmount.put(areaname, amount); + return true; } public void buyPlot(String areaname, Player player, boolean resadmin) { - PermissionGroup group = gm.getGroup(player); - if (!resadmin) { - if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); - return; - } - boolean canbuy = group.canBuyLand() || player.hasPermission("residence.buy"); - if (!canbuy && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - } - if (isForSale(areaname)) { - ClaimedResidence res = manager.getByName(areaname); - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); - sellAmount.remove(areaname); - return; - } - if (res.getPermissions().getOwner().equals(player.getName())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerBuyFail")); - return; - } - if (Residence.getResidenceManager().getOwnedZoneCount(player.getName()) >= group.getMaxZones() && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); - return; - } - Server serv = Residence.getServ(); - int amount = sellAmount.get(areaname); - if (!resadmin) { - if (!group.buyLandIgnoreLimits()) { - CuboidArea[] areas = res.getAreaArray(); - for (CuboidArea thisarea : areas) { - if (!group.inLimits(thisarea)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceBuyTooBig")); - return; - } - } - } - } - EconomyInterface econ = Residence.getEconomyManager(); - if (econ == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); - return; - } - String buyerName = player.getName(); - String sellerName = res.getPermissions().getOwner(); - Player sellerNameFix = Residence.getServ().getPlayer(sellerName); - if (sellerNameFix != null) { - sellerName = sellerNameFix.getName(); - } - if (econ.canAfford(buyerName, amount)) { - if (!econ.transfer(buyerName, sellerName, amount)) { - player.sendMessage(ChatColor.RED + "Error, could not transfer " + amount + " from " + buyerName + " to " + sellerName); - return; - } - res.getPermissions().setOwner(player.getName(), true); - res.getPermissions().applyDefaultFlags(); - this.removeFromSale(areaname); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBought", ChatColor.GREEN + areaname + ChatColor.YELLOW)); - Player seller = serv.getPlayer(sellerName); - if (seller != null && seller.isOnline()) { - seller.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBuy", ChatColor.YELLOW + player.getName() + ChatColor.GREEN + "." + ChatColor.YELLOW + areaname + ChatColor.GREEN)); - seller.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCredit", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); - } - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); - } - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } + PermissionGroup group = gm.getGroup(player); + if (!resadmin) { + if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + return; + } + boolean canbuy = group.canBuyLand() || player.hasPermission("residence.buy"); + if (!canbuy && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + } + if (isForSale(areaname)) { + ClaimedResidence res = manager.getByName(areaname); + if (res == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); + sellAmount.remove(areaname); + return; + } + if (res.getPermissions().getOwner().equals(player.getName())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerBuyFail")); + return; + } + if (Residence.getResidenceManager().getOwnedZoneCount(player.getName()) >= group.getMaxZones() && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); + return; + } + Server serv = Residence.getServ(); + int amount = sellAmount.get(areaname); + if (!resadmin) { + if (!group.buyLandIgnoreLimits()) { + CuboidArea[] areas = res.getAreaArray(); + for (CuboidArea thisarea : areas) { + if (!group.inLimits(thisarea)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceBuyTooBig")); + return; + } + } + } + } + EconomyInterface econ = Residence.getEconomyManager(); + if (econ == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + return; + } + String buyerName = player.getName(); + String sellerName = res.getPermissions().getOwner(); + Player sellerNameFix = Residence.getServ().getPlayer(sellerName); + if (sellerNameFix != null) { + sellerName = sellerNameFix.getName(); + } + if (econ.canAfford(buyerName, amount)) { + if (!econ.transfer(buyerName, sellerName, amount)) { + player.sendMessage(ChatColor.RED + "Error, could not transfer " + amount + " from " + buyerName + " to " + sellerName); + return; + } + res.getPermissions().setOwner(player.getName(), true); + res.getPermissions().applyDefaultFlags(); + this.removeFromSale(areaname); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBought", ChatColor.GREEN + areaname + ChatColor.YELLOW)); + Player seller = serv.getPlayer(sellerName); + if (seller != null && seller.isOnline()) { + seller.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBuy", ChatColor.YELLOW + player.getName() + ChatColor.GREEN + "." + + ChatColor.YELLOW + areaname + ChatColor.GREEN)); + seller.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCredit", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); + } + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); + } + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + } } public void removeFromSale(Player player, String areaname, boolean resadmin) { - ClaimedResidence area = manager.getByName(areaname); - if (area != null) { - if (!isForSale(areaname)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForSale")); - return; - } - if (area.getPermissions().getOwner().equals(player.getName()) || resadmin) { - removeFromSale(areaname); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceStopSelling")); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); - } + ClaimedResidence area = manager.getByName(areaname); + if (area != null) { + if (!isForSale(areaname)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForSale")); + return; + } + if (area.getPermissions().getOwner().equals(player.getName()) || resadmin) { + removeFromSale(areaname); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceStopSelling")); + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); + } } public void removeFromSale(String areaname) { - sellAmount.remove(areaname); + sellAmount.remove(areaname); } public boolean isForSale(String areaname) { - return sellAmount.containsKey(areaname); + return sellAmount.containsKey(areaname); } public void viewSaleInfo(String areaname, Player player) { - if (sellAmount.containsKey(areaname)) { - player.sendMessage("------------------------"); - player.sendMessage(ChatColor.YELLOW + "Name:" + ChatColor.DARK_GREEN + " " + areaname); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("SellAmount") + ":" + ChatColor.RED + " " + sellAmount.get(areaname)); - if (Residence.getConfigManager().useLeases()) { - Date etime = Residence.getLeaseManager().getExpireTime(areaname); - if (etime != null) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + etime.toString()); - } - } - player.sendMessage("------------------------"); - } + if (sellAmount.containsKey(areaname)) { + player.sendMessage("------------------------"); + player.sendMessage(ChatColor.YELLOW + "Name:" + ChatColor.DARK_GREEN + " " + areaname); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("SellAmount") + ":" + ChatColor.RED + " " + sellAmount.get(areaname)); + if (Residence.getConfigManager().useLeases()) { + Date etime = Residence.getLeaseManager().getExpireTime(areaname); + if (etime != null) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + etime.toString()); + } + } + player.sendMessage("------------------------"); + } } public void printForSaleResidences(Player player) { - Set> set = sellAmount.entrySet(); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LandForSale") + ":"); - StringBuilder sbuild = new StringBuilder(); - sbuild.append(ChatColor.GREEN); - boolean firstadd = true; - for (Entry land : set) { - if (!firstadd) { - sbuild.append(", "); - } else { - firstadd = false; - } - sbuild.append(land.getKey()); - } - player.sendMessage(sbuild.toString()); + Set> set = sellAmount.entrySet(); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LandForSale") + ":"); + StringBuilder sbuild = new StringBuilder(); + sbuild.append(ChatColor.GREEN); + boolean firstadd = true; + for (Entry land : set) { + if (!firstadd) { + sbuild.append(", "); + } else { + firstadd = false; + } + sbuild.append(land.getKey()); + } + player.sendMessage(sbuild.toString()); } public void clearSales() { - sellAmount.clear(); - System.out.println("[Residence] - ReInit land selling."); + sellAmount.clear(); + System.out.println("[Residence] - ReInit land selling."); } public int getSaleAmount(String name) { - return sellAmount.get(name); + return sellAmount.get(name); } public Map save() { - return sellAmount; + return sellAmount; } @SuppressWarnings({ "unchecked", "rawtypes" }) public static TransactionManager load(Map root, PermissionManager p, ResidenceManager r) { - TransactionManager tman = new TransactionManager(r, p); - if (root != null) { - tman.sellAmount = root; - } - return tman; + TransactionManager tman = new TransactionManager(r, p); + if (root != null) { + tman.sellAmount = root; + } + return tman; } } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 11a5ba785..2107bad38 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -4,6 +4,7 @@ */ package com.bekvon.bukkit.residence.economy.rent; + import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; @@ -25,471 +26,396 @@ * @author Administrator */ public class RentManager { - protected Map rentedLand; - protected Map rentableLand; + protected Map rentedLand; + protected Map rentableLand; - public RentManager() - { - rentedLand = new HashMap<>(); - rentableLand = new HashMap<>(); + public RentManager() { + rentedLand = new HashMap<>(); + rentableLand = new HashMap<>(); } - public void setForRent(Player player, String landName, int amount, int days, boolean repeatable, boolean resadmin) - { - if(!Residence.getConfigManager().enabledRentSystem()) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("MarketDisabled")); - return; - } - if(Residence.getTransactionManager().isForSale(landName)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("SellRentFail")); - return; - } - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if(res == null) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - if(!resadmin) - { - if(!res.getPermissions().hasResidencePermission(player, true)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission")); - return; - } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if(this.getRentableCount(player.getName()) >= group.getMaxRentables()) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceMaxRent")); - return; - } - } - if(!rentableLand.containsKey(landName)) - { - ResidenceRentEvent revent = new ResidenceRentEvent(res,player,RentEventType.RENTABLE); - Residence.getServ().getPluginManager().callEvent(revent); - if(revent.isCancelled()) - return; - RentableLand newrent = new RentableLand(); - newrent.days = days; - newrent.cost = amount; - newrent.repeatable = repeatable; - rentableLand.put(landName,newrent); - String[] split = landName.split("\\."); - if(split.length!=0) - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("ResidenceForRentSuccess",ChatColor.YELLOW+split[split.length-1] + ChatColor.GREEN+"."+ChatColor.YELLOW+amount+ChatColor.GREEN+"."+ChatColor.YELLOW+days+ChatColor.GREEN)); - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceAlreadyRent")); - } + public void setForRent(Player player, String landName, int amount, int days, boolean repeatable, boolean resadmin) { + if (!Residence.getConfigManager().enabledRentSystem()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + return; + } + if (Residence.getTransactionManager().isForSale(landName)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SellRentFail")); + return; + } + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + if (res == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + if (!resadmin) { + if (!res.getPermissions().hasResidencePermission(player, true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMaxRent")); + return; + } + } + if (!rentableLand.containsKey(landName)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENTABLE); + Residence.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + RentableLand newrent = new RentableLand(); + newrent.days = days; + newrent.cost = amount; + newrent.repeatable = repeatable; + rentableLand.put(landName, newrent); + String[] split = landName.split("\\."); + if (split.length != 0) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForRentSuccess", ChatColor.YELLOW + split[split.length - 1] + + ChatColor.GREEN + "." + ChatColor.YELLOW + amount + ChatColor.GREEN + "." + ChatColor.YELLOW + days + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRent")); + } } - public void rent(Player player, String landName, boolean repeat, boolean resadmin) - { - if(!Residence.getConfigManager().enabledRentSystem()) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("RentDisabled")); - return; - } - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if(res!=null) - { - if(res.getPermissions().getOwner().equalsIgnoreCase(player.getName())) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("OwnerRentFail")); - return; - } - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if(!resadmin && this.getRentCount(player.getName()) >= group.getMaxRents()) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceMaxRent")); - return; - } - if(!this.isForRent(landName)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceNotForRent")); - return; - } - if(this.isRented(landName)) - { - String[] split = landName.split("\\."); - if(split.length!=0) - player.sendMessage(Residence.getLanguage().getPhrase("ResidenceAlreadyRented",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED+"."+ChatColor.YELLOW + this.getRentingPlayer(landName))); - return; - } - RentableLand land = rentableLand.get(landName); - if(Residence.getEconomyManager().canAfford(player.getName(), land.cost)) - { - ResidenceRentEvent revent = new ResidenceRentEvent(res,player,RentEventType.RENT); - Residence.getServ().getPluginManager().callEvent(revent); - if(revent.isCancelled()) - return; - if(Residence.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) - { - RentedLand newrent = new RentedLand(); - newrent.player = player.getName(); - newrent.startTime = System.currentTimeMillis(); - newrent.endTime = System.currentTimeMillis() + daysToMs(land.days); - newrent.autoRefresh = repeat; - rentedLand.put(landName, newrent); - res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); - res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); - res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); - String[] split = landName.split("\\."); - if(split.length!=0) - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("ResidenceRentSuccess",ChatColor.YELLOW + split[split.length-1] + ChatColor.GREEN+"."+ChatColor.YELLOW + land.days + ChatColor.GREEN)); - } - else - { - player.sendMessage(ChatColor.RED+"Error, unable to transfer money..."); - } - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NotEnoughMoney")); - } + @SuppressWarnings("deprecation") + public void rent(Player player, String landName, boolean repeat, boolean resadmin) { + if (!Residence.getConfigManager().enabledRentSystem()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentDisabled")); + return; + } + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + if (res != null) { + if (res.getPermissions().getOwner().equalsIgnoreCase(player.getName())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerRentFail")); + return; + } + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (!resadmin && this.getRentCount(player.getName()) >= group.getMaxRents()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMaxRent")); + return; + } + if (!this.isForRent(landName)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); + return; + } + if (this.isRented(landName)) { + String[] split = landName.split("\\."); + if (split.length != 0) + player.sendMessage(Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED + "." + + ChatColor.YELLOW + this.getRentingPlayer(landName))); + return; + } + RentableLand land = rentableLand.get(landName); + if (Residence.getEconomyManager().canAfford(player.getName(), land.cost)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); + Residence.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + if (Residence.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { + RentedLand newrent = new RentedLand(); + newrent.player = player.getName(); + newrent.startTime = System.currentTimeMillis(); + newrent.endTime = System.currentTimeMillis() + daysToMs(land.days); + newrent.autoRefresh = repeat; + rentedLand.put(landName, newrent); + res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); + res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); + res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); + String[] split = landName.split("\\."); + if (split.length != 0) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRentSuccess", ChatColor.YELLOW + split[split.length - 1] + + ChatColor.GREEN + "." + ChatColor.YELLOW + land.days + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); + } + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); + } } - public void removeFromForRent(Player player, String landName, boolean resadmin) - { - RentedLand rent = rentedLand.get(landName); - if(rent == null) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceNotRented")); - return; - } - if(resadmin || rent.player.equalsIgnoreCase(player.getName())) - { - ResidenceRentEvent revent = new ResidenceRentEvent(Residence.getResidenceManager().getByName(landName),player,RentEventType.UNRENTABLE); - Residence.getServ().getPluginManager().callEvent(revent); - if(revent.isCancelled()) - return; - rentedLand.remove(landName); - if(!rentableLand.get(landName).repeatable) - { - rentableLand.remove(landName); - } - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if(res!=null) - res.getPermissions().applyDefaultFlags(); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("ResidenceUnrent",ChatColor.YELLOW+landName + ChatColor.GREEN)); - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission")); - } + public void removeFromForRent(Player player, String landName, boolean resadmin) { + RentedLand rent = rentedLand.get(landName); + if (rent == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotRented")); + return; + } + if (resadmin || rent.player.equalsIgnoreCase(player.getName())) { + ResidenceRentEvent revent = new ResidenceRentEvent(Residence.getResidenceManager().getByName(landName), player, RentEventType.UNRENTABLE); + Residence.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + rentedLand.remove(landName); + if (!rentableLand.get(landName).repeatable) { + rentableLand.remove(landName); + } + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + if (res != null) + res.getPermissions().applyDefaultFlags(); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceUnrent", ChatColor.YELLOW + landName + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } } - private long daysToMs(int days) - { - return (((long)days) * 24L * 60L * 60L * 1000L); + private long daysToMs(int days) { + return (((long) days) * 24L * 60L * 60L * 1000L); } - private int msToDays(long ms) - { - return (int) Math.ceil(((((double)ms/1000D)/60D)/60D)/24D); + @SuppressWarnings("unused") + private int msToDays(long ms) { + return (int) Math.ceil(((((double) ms / 1000D) / 60D) / 60D) / 24D); } - public void unrent(Player player, String landName, boolean resadmin) - { - String[] split = landName.split("\\."); - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if(res == null) - { - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - if(!res.getPermissions().hasResidencePermission(player, true) && !resadmin) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission")); - return; - } - if(rentedLand.containsKey(landName) && !resadmin) - { - if(split.length!=0) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceAlreadyRented",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED+"."+ChatColor.YELLOW + rentedLand.get(landName).player)+ChatColor.YELLOW); - return; - } - if(rentableLand.containsKey(landName)) - { - ResidenceRentEvent revent = new ResidenceRentEvent(res,player,RentEventType.UNRENT); - Residence.getServ().getPluginManager().callEvent(revent); - if(revent.isCancelled()) - return; - rentableLand.remove(landName); - if(rentedLand.containsKey(landName)) - { - rentedLand.remove(landName); - if(res!=null) - res.getPermissions().applyDefaultFlags(); - } - if(split.length!=0) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceRemoveRentable",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED)); + public void unrent(Player player, String landName, boolean resadmin) { + String[] split = landName.split("\\."); + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + if (res == null) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + if (rentedLand.containsKey(landName) && !resadmin) { + if (split.length != 0) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED + + "." + ChatColor.YELLOW + rentedLand.get(landName).player) + ChatColor.YELLOW); + return; + } + if (rentableLand.containsKey(landName)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENT); + Residence.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + rentableLand.remove(landName); + if (rentedLand.containsKey(landName)) { + rentedLand.remove(landName); + if (res != null) + res.getPermissions().applyDefaultFlags(); + } + if (split.length != 0) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceRemoveRentable", ChatColor.YELLOW + split[split.length - 1] + + ChatColor.RED)); - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceNotForRent")); - } + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); + } } - public void removeFromRent(String landName) - { - rentedLand.remove(landName); + public void removeFromRent(String landName) { + rentedLand.remove(landName); } - public void removeRentable(String landName) - { - removeFromRent(landName); - rentableLand.remove(landName); + public void removeRentable(String landName) { + removeFromRent(landName); + rentableLand.remove(landName); } - public boolean isForRent(String landName) - { - return rentableLand.containsKey(landName); + public boolean isForRent(String landName) { + return rentableLand.containsKey(landName); } - public boolean isRented(String landName) - { - return rentedLand.containsKey(landName); + public boolean isRented(String landName) { + return rentedLand.containsKey(landName); } - public String getRentingPlayer(String landName) - { - return rentedLand.containsKey(landName) ? rentedLand.get(landName).player : null; + public String getRentingPlayer(String landName) { + return rentedLand.containsKey(landName) ? rentedLand.get(landName).player : null; } - public int getCostOfRent(String landName) - { - return rentableLand.containsKey(landName) ? rentableLand.get(landName).cost : 0; + public int getCostOfRent(String landName) { + return rentableLand.containsKey(landName) ? rentableLand.get(landName).cost : 0; } - public boolean getRentableRepeatable(String landName) - { - return rentableLand.containsKey(landName) ? rentableLand.get(landName).repeatable : false; + public boolean getRentableRepeatable(String landName) { + return rentableLand.containsKey(landName) ? rentableLand.get(landName).repeatable : false; } - public boolean getRentedAutoRepeats(String landName) - { - return getRentableRepeatable(landName) ? (rentedLand.containsKey(landName) ? rentedLand.get(landName).autoRefresh : false) : false; + public boolean getRentedAutoRepeats(String landName) { + return getRentableRepeatable(landName) ? (rentedLand.containsKey(landName) ? rentedLand.get(landName).autoRefresh : false) : false; } - public int getRentDays(String landName) - { - return rentableLand.containsKey(landName) ? rentableLand.get(landName).days : 0; + public int getRentDays(String landName) { + return rentableLand.containsKey(landName) ? rentableLand.get(landName).days : 0; } - public void checkCurrentRents() - { - Iterator> it = rentedLand.entrySet().iterator(); - while(it.hasNext()) - { - Entry next = it.next(); - RentedLand land = next.getValue(); - if(land.endTime<=System.currentTimeMillis()) - { - ClaimedResidence res = Residence.getResidenceManager().getByName(next.getKey()); - if(Residence.getConfigManager().debugEnabled()) - System.out.println("Rent Check: "+next.getKey()); - if (res != null) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); - Residence.getServ().getPluginManager().callEvent(revent); - if (!revent.isCancelled()) { - RentableLand rentable = rentableLand.get(next.getKey()); - if (!rentable.repeatable) { - rentableLand.remove(next.getKey()); - it.remove(); - res.getPermissions().applyDefaultFlags(); - } else if (land.autoRefresh) { - if (!Residence.getEconomyManager().canAfford(land.player, rentable.cost)) { - it.remove(); - res.getPermissions().applyDefaultFlags(); - } else { - if (!Residence.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { - it.remove(); - res.getPermissions().applyDefaultFlags(); - } - else - { - land.endTime = System.currentTimeMillis() + this.daysToMs(rentable.days); - } - } - } else { - res.getPermissions().applyDefaultFlags(); - it.remove(); - } - } - } - else - { - rentableLand.remove(next.getKey()); - it.remove(); - } - } - } + public void checkCurrentRents() { + Iterator> it = rentedLand.entrySet().iterator(); + while (it.hasNext()) { + Entry next = it.next(); + RentedLand land = next.getValue(); + if (land.endTime <= System.currentTimeMillis()) { + ClaimedResidence res = Residence.getResidenceManager().getByName(next.getKey()); + if (Residence.getConfigManager().debugEnabled()) + System.out.println("Rent Check: " + next.getKey()); + if (res != null) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); + Residence.getServ().getPluginManager().callEvent(revent); + if (!revent.isCancelled()) { + RentableLand rentable = rentableLand.get(next.getKey()); + if (!rentable.repeatable) { + rentableLand.remove(next.getKey()); + it.remove(); + res.getPermissions().applyDefaultFlags(); + } else if (land.autoRefresh) { + if (!Residence.getEconomyManager().canAfford(land.player, rentable.cost)) { + it.remove(); + res.getPermissions().applyDefaultFlags(); + } else { + if (!Residence.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { + it.remove(); + res.getPermissions().applyDefaultFlags(); + } else { + land.endTime = System.currentTimeMillis() + this.daysToMs(rentable.days); + } + } + } else { + res.getPermissions().applyDefaultFlags(); + it.remove(); + } + } + } else { + rentableLand.remove(next.getKey()); + it.remove(); + } + } + } } - public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin) - { - String[] split = landName.split("\\."); - RentableLand land = rentableLand.get(landName); - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if(land!=null && res!=null && (res.getPermissions().getOwner().equalsIgnoreCase(player.getName()) || resadmin)) - { - land.repeatable = value; - if(!value && this.isRented(landName)) - rentedLand.get(landName).autoRefresh = false; - if(value && split.length!=0) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("RentableEnableRenew",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED)); - else if(split.length!=0) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("RentableDisableRenew",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED)); - } + public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin) { + String[] split = landName.split("\\."); + RentableLand land = rentableLand.get(landName); + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + if (land != null && res != null && (res.getPermissions().getOwner().equalsIgnoreCase(player.getName()) || resadmin)) { + land.repeatable = value; + if (!value && this.isRented(landName)) + rentedLand.get(landName).autoRefresh = false; + if (value && split.length != 0) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentableEnableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); + else if (split.length != 0) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentableDisableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); + } } - public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin) - { - String[] split = landName.split("\\."); - RentedLand land = rentedLand.get(landName); - if(land!=null && (land.player.equals(player.getName()) || resadmin)) - { - land.autoRefresh = value; - if(value && split.length!=0) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("RentEnableRenew",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED)); - else if(split.length!=0) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("RentDisableRenew",ChatColor.YELLOW+split[split.length-1] + ChatColor.RED)); - } + public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin) { + String[] split = landName.split("\\."); + RentedLand land = rentedLand.get(landName); + if (land != null && (land.player.equals(player.getName()) || resadmin)) { + land.autoRefresh = value; + if (value && split.length != 0) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentEnableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); + else if (split.length != 0) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentDisableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); + } } - public void printRentInfo(Player player, String landName) - { - RentableLand rentable = rentableLand.get(landName); - RentedLand rented = rentedLand.get(landName); - if(rentable!=null) - { - player.sendMessage(ChatColor.GOLD+Residence.getLanguage().getPhrase("Land")+":"+ChatColor.DARK_GREEN + landName); - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("Cost")+": "+ChatColor.DARK_AQUA + rentable.cost + " per " + rentable.days + " days"); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("RentableAutoRenew")+":"+ChatColor.DARK_AQUA + rentable.repeatable); - if(rented!=null) - { - player.sendMessage(ChatColor.GOLD+Residence.getLanguage().getPhrase("Status")+":"+ChatColor.YELLOW+" "+Residence.getLanguage().getPhrase("ResidenceRentedBy",ChatColor.RED + rented.player+ChatColor.YELLOW)); - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("RentExpire")+":"+ChatColor.GREEN + new Date(rented.endTime)); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("RentAutoRenew")+":"+ChatColor.DARK_AQUA + rented.autoRefresh); - } - else - { - player.sendMessage(ChatColor.GOLD+Residence.getLanguage().getPhrase("Status")+":"+ChatColor.GREEN+" "+Residence.getLanguage().getPhrase("Available")); - } - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ResidenceNotForRent")); - } + public void printRentInfo(Player player, String landName) { + RentableLand rentable = rentableLand.get(landName); + RentedLand rented = rentedLand.get(landName); + if (rentable != null) { + player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Land") + ":" + ChatColor.DARK_GREEN + landName); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Cost") + ": " + ChatColor.DARK_AQUA + rentable.cost + " per " + rentable.days + + " days"); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RentableAutoRenew") + ":" + ChatColor.DARK_AQUA + rentable.repeatable); + if (rented != null) { + player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Status") + ":" + ChatColor.YELLOW + " " + Residence.getLanguage().getPhrase( + "ResidenceRentedBy", ChatColor.RED + rented.player + ChatColor.YELLOW)); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("RentExpire") + ":" + ChatColor.GREEN + new Date(rented.endTime)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RentAutoRenew") + ":" + ChatColor.DARK_AQUA + rented.autoRefresh); + } else { + player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Status") + ":" + ChatColor.GREEN + " " + Residence.getLanguage().getPhrase( + "Available")); + } + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); + } } - public static RentManager load(Map root) - { - RentManager rentManager = new RentManager(); - if(root!=null) - { - Map rentables = (Map) root.get("Rentables"); - for(Entry rent : rentables.entrySet()) - { - rentManager.rentableLand.put(rent.getKey(), RentableLand.load((Map) rent.getValue())); - } - Map rented = (Map) root.get("Rented"); - for(Entry rent : rented.entrySet()) - { - rentManager.rentedLand.put(rent.getKey(), RentedLand.load((Map) rent.getValue())); - } - } - return rentManager; + @SuppressWarnings("unchecked") + public static RentManager load(Map root) { + RentManager rentManager = new RentManager(); + if (root != null) { + Map rentables = (Map) root.get("Rentables"); + for (Entry rent : rentables.entrySet()) { + rentManager.rentableLand.put(rent.getKey(), RentableLand.load((Map) rent.getValue())); + } + Map rented = (Map) root.get("Rented"); + for (Entry rent : rented.entrySet()) { + rentManager.rentedLand.put(rent.getKey(), RentedLand.load((Map) rent.getValue())); + } + } + return rentManager; } - public Map save() - { - Map root = new HashMap(); - Map rentables = new HashMap(); - for(Entry rent : rentableLand.entrySet()) - { - rentables.put(rent.getKey(), rent.getValue().save()); - } - Map rented = new HashMap(); - for(Entry rent : rentedLand.entrySet()) - { - rented.put(rent.getKey(), rent.getValue().save()); - } - root.put("Rentables", rentables); - root.put("Rented", rented); - return root; + public Map save() { + Map root = new HashMap(); + Map rentables = new HashMap(); + for (Entry rent : rentableLand.entrySet()) { + rentables.put(rent.getKey(), rent.getValue().save()); + } + Map rented = new HashMap(); + for (Entry rent : rentedLand.entrySet()) { + rented.put(rent.getKey(), rent.getValue().save()); + } + root.put("Rentables", rentables); + root.put("Rented", rented); + return root; } - public void updateRentableName(String oldName, String newName) - { - if(rentableLand.containsKey(oldName)) - { - rentableLand.put(newName, rentableLand.get(oldName)); - rentableLand.remove(oldName); - } - if(rentedLand.containsKey(oldName)) - { - rentedLand.put(newName, rentedLand.get(oldName)); - rentedLand.remove(oldName); - } + public void updateRentableName(String oldName, String newName) { + if (rentableLand.containsKey(oldName)) { + rentableLand.put(newName, rentableLand.get(oldName)); + rentableLand.remove(oldName); + } + if (rentedLand.containsKey(oldName)) { + rentedLand.put(newName, rentedLand.get(oldName)); + rentedLand.remove(oldName); + } } - public void printRentableResidences(Player player) - { - Set> set = rentableLand.entrySet(); - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("RentableLand")+":"); - StringBuilder sbuild = new StringBuilder(); - sbuild.append(ChatColor.GREEN); - boolean firstadd = true; - for(Entry land : set) - { - if(!this.isRented(land.getKey())) - { - if(!firstadd) - sbuild.append(", "); - else - firstadd = false; - sbuild.append(land.getKey()); - } - } - player.sendMessage(sbuild.toString()); + public void printRentableResidences(Player player) { + Set> set = rentableLand.entrySet(); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("RentableLand") + ":"); + StringBuilder sbuild = new StringBuilder(); + sbuild.append(ChatColor.GREEN); + boolean firstadd = true; + for (Entry land : set) { + if (!this.isRented(land.getKey())) { + if (!firstadd) + sbuild.append(", "); + else + firstadd = false; + sbuild.append(land.getKey()); + } + } + player.sendMessage(sbuild.toString()); } - public int getRentCount(String player) - { - Set> set = rentedLand.entrySet(); - int count = 0; - for(Entry land : set) - { - if(land.getValue().player.equalsIgnoreCase(player)) - count++; - } - return count; + public int getRentCount(String player) { + Set> set = rentedLand.entrySet(); + int count = 0; + for (Entry land : set) { + if (land.getValue().player.equalsIgnoreCase(player)) + count++; + } + return count; } - public int getRentableCount(String player) - { - Set set = rentableLand.keySet(); - int count = 0; - for(String land : set) - { - ClaimedResidence res = Residence.getResidenceManager().getByName(land); - if(res!=null) - if(res.getPermissions().getOwner().equalsIgnoreCase(player)) - count++; - } - return count; + public int getRentableCount(String player) { + Set set = rentableLand.keySet(); + int count = 0; + for (String land : set) { + ClaimedResidence res = Residence.getResidenceManager().getByName(land); + if (res != null) + if (res.getPermissions().getOwner().equalsIgnoreCase(player)) + count++; + } + return count; } } diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index bd8af18d6..5a837116f 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -4,6 +4,7 @@ */ package com.bekvon.bukkit.residence.itemlist; + import org.bukkit.ChatColor; import java.util.ArrayList; @@ -23,193 +24,160 @@ public class ItemList { protected List list; protected ListType type; - public ItemList(ListType listType) - { - this(); - type = listType; + public ItemList(ListType listType) { + this(); + type = listType; + } + + protected ItemList() { + list = new ArrayList(); + } + + public static enum ListType { + BLACKLIST, WHITELIST, IGNORELIST, OTHER + } + + public ListType getType() { + return type; + } + + public boolean contains(Material mat) { + return list.contains(mat); } - protected ItemList() - { - list = new ArrayList(); + public void add(Material mat) { + if (!list.contains(mat)) + list.add(mat); } - - public static enum ListType - { - BLACKLIST,WHITELIST,IGNORELIST,OTHER - } - - public ListType getType() - { - return type; - } - - public boolean contains(Material mat) - { - return list.contains(mat); - } - - public void add(Material mat) - { - if(!list.contains(mat)) - list.add(mat); - } - - public boolean toggle(Material mat) - { - if(list.contains(mat)) - { - list.remove(mat); - return false; - } - else - { - list.add(mat); - return true; - } - } - - public void remove(Material mat) - { - list.remove(mat); - } - - public boolean isAllowed(Material mat) - { - if(type == ListType.BLACKLIST) - { - if(list.contains(mat)) - { - return false; - } - return true; - } - else if(type == ListType.WHITELIST) - { - if(list.contains(mat)) - { - return true; - } - return false; - } - return true; - } - - public boolean isIgnored(Material mat) - { - if(type == ListType.IGNORELIST) - { - if(list.contains(mat)) - { - return true; - } - } - return false; - } - - public boolean isListed(Material mat) - { - return this.contains(mat); - } - - public int getListSize() - { - return list.size(); - } - - public static ItemList readList(ConfigurationSection node) - { - return ItemList.readList(node, new ItemList()); - } - - protected static ItemList readList(ConfigurationSection node, ItemList list) - { - ListType type = ListType.valueOf(node.getString("Type","").toUpperCase()); - list.type = type; - List items = node.getStringList("Items"); - if (items != null) { - for (String item : items) { - int parse = -1; - try { - parse = Integer.parseInt(item); - } catch (Exception ex) { - } - if (parse == -1) { - try { - list.add(Material.valueOf(item.toUpperCase())); - } catch (Exception ex) { - } - } else { - try { - list.add(Material.getMaterial(parse)); - } catch (Exception ex) { - } - } - } - } - return list; - } - - public void printList(Player player) - { - StringBuilder builder = new StringBuilder(); - boolean first = true; - for(Material mat : list) - { - if(!first) - builder.append(", "); - else - builder.append(ChatColor.YELLOW); - builder.append(mat); - first = false; - } - player.sendMessage(builder.toString()); - } - - public Material[] toArray() - { - Material mats[] = new Material[list.size()]; - int i = 0; - for(Material mat : list) - { - mats[i] = mat; - i++; - } - return mats; - } - - public Map save() - { - Map saveMap = new LinkedHashMap(); - saveMap.put("Type", type.toString()); - List saveList = new ArrayList(); - for(Material mat : list) - { - saveList.add(mat.toString()); - } - saveMap.put("ItemList", saveList); - return saveMap; - } - - public static ItemList load(Map map) - { - ItemList newlist = new ItemList(); - return load(map,newlist); - } - - protected static ItemList load(Map map, ItemList newlist) - { - try - { - newlist.type = ListType.valueOf((String) map.get("Type")); - List list = (List) map.get("ItemList"); - for(String item : list) - { - newlist.add(Material.valueOf(item)); - } - } - catch (Exception ex) - {} - return newlist; + + public boolean toggle(Material mat) { + if (list.contains(mat)) { + list.remove(mat); + return false; + } else { + list.add(mat); + return true; + } + } + + public void remove(Material mat) { + list.remove(mat); + } + + public boolean isAllowed(Material mat) { + if (type == ListType.BLACKLIST) { + if (list.contains(mat)) { + return false; + } + return true; + } else if (type == ListType.WHITELIST) { + if (list.contains(mat)) { + return true; + } + return false; + } + return true; + } + + public boolean isIgnored(Material mat) { + if (type == ListType.IGNORELIST) { + if (list.contains(mat)) { + return true; + } + } + return false; + } + + public boolean isListed(Material mat) { + return this.contains(mat); + } + + public int getListSize() { + return list.size(); + } + + public static ItemList readList(ConfigurationSection node) { + return ItemList.readList(node, new ItemList()); + } + + @SuppressWarnings("deprecation") + protected static ItemList readList(ConfigurationSection node, ItemList list) { + ListType type = ListType.valueOf(node.getString("Type", "").toUpperCase()); + list.type = type; + List items = node.getStringList("Items"); + if (items != null) { + for (String item : items) { + int parse = -1; + try { + parse = Integer.parseInt(item); + } catch (Exception ex) { + } + if (parse == -1) { + try { + list.add(Material.valueOf(item.toUpperCase())); + } catch (Exception ex) { + } + } else { + try { + list.add(Material.getMaterial(parse)); + } catch (Exception ex) { + } + } + } + } + return list; + } + + public void printList(Player player) { + StringBuilder builder = new StringBuilder(); + boolean first = true; + for (Material mat : list) { + if (!first) + builder.append(", "); + else + builder.append(ChatColor.YELLOW); + builder.append(mat); + first = false; + } + player.sendMessage(builder.toString()); + } + + public Material[] toArray() { + Material mats[] = new Material[list.size()]; + int i = 0; + for (Material mat : list) { + mats[i] = mat; + i++; + } + return mats; + } + + public Map save() { + Map saveMap = new LinkedHashMap(); + saveMap.put("Type", type.toString()); + List saveList = new ArrayList(); + for (Material mat : list) { + saveList.add(mat.toString()); + } + saveMap.put("ItemList", saveList); + return saveMap; + } + + public static ItemList load(Map map) { + ItemList newlist = new ItemList(); + return load(map, newlist); + } + + protected static ItemList load(Map map, ItemList newlist) { + try { + newlist.type = ListType.valueOf((String) map.get("Type")); + @SuppressWarnings("unchecked") + List list = (List) map.get("ItemList"); + for (String item : list) { + newlist.add(Material.valueOf(item)); + } + } catch (Exception ex) { + } + return newlist; } } diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java index e3865ca4c..470c58e64 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java @@ -18,43 +18,41 @@ public class WorldItemManager { protected List lists; - public WorldItemManager(FileConfiguration config) - { - lists = new ArrayList(); - this.readLists(config); + public WorldItemManager(FileConfiguration config) { + lists = new ArrayList(); + this.readLists(config); } public boolean isAllowed(Material mat, String group, String world) { - for (WorldItemList list : lists) { - if (!list.isAllowed(mat, world, group)) { - return false; - } - } - return true; + for (WorldItemList list : lists) { + if (!list.isAllowed(mat, world, group)) { + return false; + } + } + return true; } - public boolean isIgnored(Material mat, String group, String world) - { - for (WorldItemList list : lists) { - if (list.isIgnored(mat, world, group)) { - return true; - } - } - return false; + public boolean isIgnored(Material mat, String group, String world) { + for (WorldItemList list : lists) { + if (list.isIgnored(mat, world, group)) { + return true; + } + } + return false; } private void readLists(FileConfiguration config) { - Set keys = config.getConfigurationSection("ItemList").getKeys(false); - if (keys != null) { - for (String key : keys) { - try { - WorldItemList list = WorldItemList.readList(config.getConfigurationSection("ItemList." + key)); - lists.add(list); - //System.out.println("Debug: read list " + key + " world: " + list.getWorld() + " group: " + list.getGroup() + " itemcount:" + list.getListSize()); - } catch (Exception ex) { - System.out.println("Failed to load item list:" + key); - } - } - } + Set keys = config.getConfigurationSection("ItemList").getKeys(false); + if (keys != null) { + for (String key : keys) { + try { + WorldItemList list = WorldItemList.readList(config.getConfigurationSection("ItemList." + key)); + lists.add(list); + //System.out.println("Debug: read list " + key + " world: " + list.getWorld() + " group: " + list.getGroup() + " itemcount:" + list.getListSize()); + } catch (Exception ex) { + System.out.println("Failed to load item list:" + key); + } + } + } } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 921e14318..88edadb83 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -5,6 +5,9 @@ package com.bekvon.bukkit.residence.listeners; +import java.util.ArrayList; +import java.util.List; + import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.FlagPermissions; @@ -18,6 +21,8 @@ import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPlaceEvent; + +import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -34,128 +39,152 @@ */ public class ResidenceBlockListener implements Listener { + private static List informed = new ArrayList(); + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { - return; - } - Material mat = event.getBlock().getType(); - String world = event.getBlock().getWorld().getName(); - String group = Residence.getPermissionManager().getGroupNameByPlayer(player); - if (Residence.getItemManager().isIgnored(mat, group, world)) { - return; - } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); - if (Residence.getConfigManager().enabledRentSystem()) { - if (res != null) { - String resname = res.getName(); - if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); - event.setCancelled(true); - return; - } - } - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player); - String pname = player.getName(); - if (res != null) { - if (res.getItemIgnoreList().isListed(mat)) { - return; - } - } - boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), "destroy", perms.playerHas(pname, player.getWorld().getName(), "build", true)); - boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), "container", true); - if (!hasdestroy || (!hasContainer && mat == Material.CHEST)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) { + return; + } + + Block block = event.getBlock(); + Material mat = block.getType(); + String world = block.getWorld().getName(); + String group = Residence.getPermissionManager().getGroupNameByPlayer(player); + if (Residence.getItemManager().isIgnored(mat, group, world)) { + return; + } + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (Residence.getConfigManager().enabledRentSystem() && res != null) { + String resname = res.getName(); + if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); + event.setCancelled(true); + return; + } + } + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + String pname = player.getName(); + if (res != null && res.getItemIgnoreList().isListed(mat)) + return; + + boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), "destroy", perms.playerHas(pname, player.getWorld().getName(), "build", true)); + boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), "container", true); + if (!hasdestroy || (!hasContainer && mat == Material.CHEST)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onChestPlace(BlockPlaceEvent event) { + + if (!Residence.getConfigManager().ShowNoobMessage()) + return; + + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + Block block = event.getBlock(); + if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) + return; + + ArrayList list = Residence.getResidenceManager().getResidenceList(player.getName(), true, false); + if (list.size() != 0) + return; + + if (informed.contains(player.getName())) + return; + + for (String one : NewLanguage.getMessageList("Language.NewPlayerInfo")) { + player.sendMessage(one); + } + informed.add(player.getName()); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { - return; - } - Material mat = event.getBlock().getType(); - String world = event.getBlock().getWorld().getName(); - String group = Residence.getPermissionManager().getGroupNameByPlayer(player); - if (Residence.getItemManager().isIgnored(mat, group, world)) { - return; - } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); - if (Residence.getConfigManager().enabledRentSystem()) { - if (res != null) { - String resname = res.getName(); - if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); - event.setCancelled(true); - return; - } - } - } - String pname = player.getName(); - if (res != null) { - if (!res.getItemBlacklist().isAllowed(mat)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); - event.setCancelled(true); - return; - } - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player); - boolean hasplace = perms.playerHas(pname, player.getWorld().getName(), "place", perms.playerHas(pname, player.getWorld().getName(), "build", true)); - if (!hasplace) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) { + return; + } + Block block = event.getBlock(); + Material mat = block.getType(); + String world = block.getWorld().getName(); + String group = Residence.getPermissionManager().getGroupNameByPlayer(player); + if (Residence.getItemManager().isIgnored(mat, group, world)) { + return; + } + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (Residence.getConfigManager().enabledRentSystem() && res != null) { + String resname = res.getName(); + if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); + event.setCancelled(true); + return; + } + } + String pname = player.getName(); + if (res != null && !res.getItemBlacklist().isAllowed(mat)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); + event.setCancelled(true); + return; + } + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + boolean hasplace = perms.playerHas(pname, player.getWorld().getName(), "place", perms.playerHas(pname, player.getWorld().getName(), "build", true)); + if (!hasplace) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockSpread(BlockSpreadEvent event) { - Location loc = event.getBlock().getLocation(); - FlagPermissions perms = Residence.getPermsByLoc(loc); - if (!perms.has("spread", true)) { - event.setCancelled(true); - } + Location loc = event.getBlock().getLocation(); + FlagPermissions perms = Residence.getPermsByLoc(loc); + if (!perms.has("spread", true)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPistonRetract(BlockPistonRetractEvent event) { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("piston", true)){ - event.setCancelled(true); - return; - } - if (event.isSticky()){ - Location location = event.getRetractLocation(); - FlagPermissions blockperms = Residence.getPermsByLoc(location); - if (!blockperms.has("piston", true)) { - event.setCancelled(true); - } - } + + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("piston", true)) { + event.setCancelled(true); + return; + } + + List blocks = event.getBlocks(); + + if (event.isSticky()) { + for (Block oneBlock : blocks) { + FlagPermissions blockperms = Residence.getPermsByLoc(oneBlock.getLocation()); + if (!blockperms.has("piston", true)) { + event.setCancelled(true); + return; + } + } + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPistonExtend(BlockPistonExtendEvent event) { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("piston", true)) { - event.setCancelled(true); - } - for (Block block : event.getBlocks()) { - FlagPermissions blockpermsfrom = Residence.getPermsByLoc(block.getLocation()); - Location blockto = block.getLocation(); - blockto.setX(blockto.getX()+event.getDirection().getModX()); - blockto.setY(blockto.getY()+event.getDirection().getModY()); - blockto.setZ(blockto.getZ()+event.getDirection().getModZ()); - FlagPermissions blockpermsto = Residence.getPermsByLoc(blockto); - if (!blockpermsfrom.has("piston", true) || !blockpermsto.has("piston", true)) { - event.setCancelled(true); - return; - } - } + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("piston", true)) { + event.setCancelled(true); + } + for (Block block : event.getBlocks()) { + FlagPermissions blockpermsfrom = Residence.getPermsByLoc(block.getLocation()); + if (!blockpermsfrom.has("piston", true)) { + event.setCancelled(true); + return; + } + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -183,30 +212,30 @@ public void onBlockFromTo(BlockFromToEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBurn(BlockBurnEvent event) { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("firespread", true)) { - event.setCancelled(true); - } + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("firespread", true)) + event.setCancelled(true); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockIgnite(BlockIgniteEvent event) { - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), event.getPlayer()); - IgniteCause cause = event.getCause(); - if (cause == IgniteCause.SPREAD) { - if (!perms.has("firespread", true)) { - event.setCancelled(true); - } - } else if (cause == IgniteCause.FLINT_AND_STEEL) { - Player player = event.getPlayer(); - if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), "ignite", true) && !Residence.isResAdminOn(player)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission")); - } - } else { - if(!perms.has("ignite", true)){ - event.setCancelled(true); - } - } + IgniteCause cause = event.getCause(); + if (cause == IgniteCause.SPREAD) { + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("firespread", true)) + event.setCancelled(true); + } else if (cause == IgniteCause.FLINT_AND_STEEL) { + Player player = event.getPlayer(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player); + if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), "ignite", true) && !Residence.isResAdminOn(player)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } + } else { + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("ignite", true)) { + event.setCancelled(true); + } + } } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 267887b16..7bf45bfa6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -4,6 +4,7 @@ */ package com.bekvon.bukkit.residence.listeners; + import org.bukkit.ChatColor; import org.bukkit.Location; @@ -12,7 +13,6 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; - import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -46,6 +46,8 @@ import org.bukkit.entity.Sheep; import org.bukkit.entity.Snowman; import org.bukkit.entity.Squid; +import org.bukkit.entity.Tameable; +import org.bukkit.entity.Vehicle; import org.bukkit.entity.Villager; import org.bukkit.entity.Wolf; import org.bukkit.entity.Slime; @@ -54,362 +56,507 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.ExplosionPrimeEvent; +import org.bukkit.event.entity.PlayerLeashEntityEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingPlaceEvent; +import org.bukkit.event.vehicle.VehicleDestroyEvent; /** * * @author Administrator */ public class ResidenceEntityListener implements Listener { - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEndermanChangeBlock(EntityChangeBlockEvent event) { - if (event.getEntityType() != EntityType.ENDERMAN && event.getEntityType() != EntityType.WITHER) { - return; - } - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - FlagPermissions world = Residence.getWorldFlags().getPerms(event.getBlock().getWorld().getName()); - if (event.getEntityType() == EntityType.WITHER) { - if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) { - event.setCancelled(true); - } - } else if (!perms.has("build", true)) { - event.setCancelled(true); - } + if (event.getEntityType() != EntityType.ENDERMAN) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("build", true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onWitherChangeBlock(EntityChangeBlockEvent event) { + if (event.getEntityType() != EntityType.WITHER) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions world = Residence.getWorldFlags().getPerms(event.getBlock().getWorld().getName()); + if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) { + event.setCancelled(true); + } } - + @EventHandler(priority = EventPriority.LOWEST) - public void onEntityInteract(EntityInteractEvent event){ - Block block = event.getBlock(); - Material mat = block.getType(); - Entity entity = event.getEntity(); - FlagPermissions perms = Residence.getPermsByLoc(block.getLocation()); - boolean hastrample = perms.has("trample", perms.has("hasbuild", true)); - if(!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat == Material.SOIL || mat == Material.SOUL_SAND)){ - event.setCancelled(true); - } + public void onEntityInteract(EntityInteractEvent event) { + Block block = event.getBlock(); + Material mat = block.getType(); + Entity entity = event.getEntity(); + FlagPermissions perms = Residence.getPermsByLoc(block.getLocation()); + boolean hastrample = perms.has("trample", perms.has("hasbuild", true)); + if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { + event.setCancelled(true); + } } - private boolean isMonster(Entity ent) { - return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast); + public static boolean isMonster(Entity ent) { + return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast); } - - private boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager || ent instanceof Rabbit); + + private boolean isTamed(Entity ent) { + return (ent instanceof Tameable ? ((Tameable) ent).isTamed() : false); } - + + public static boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager + || ent instanceof Rabbit); + } + @EventHandler(priority = EventPriority.LOWEST) - public void AnimalKilling (EntityDamageByEntityEvent event){ - Entity damager = event.getDamager(); - - if ((!(damager instanceof Arrow)) && (!(damager instanceof Player))) { - return; - } - - Player cause; - if ((damager instanceof Arrow) && (!(((Arrow) damager).getShooter() instanceof Player))) { - return; - - } else if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Arrow) damager).getShooter(); - } - - if (Residence.isResAdminOn(cause)) { - return; - } - - Entity entity = event.getEntity(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); - - if (res != null && !res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { - if (isAnimal(entity)) { - cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - event.setCancelled(true); - } - } + public void AnimalKilling(EntityDamageByEntityEvent event) { + + Entity entity = event.getEntity(); + if (!isAnimal(entity)) + return; + + Entity damager = event.getDamager(); + + if (!(damager instanceof Arrow) && !(damager instanceof Player)) + return; + + if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + return; + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); } - + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { + cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "AnimalKilling." + res.getName())); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalKilling(VehicleDestroyEvent event) { + + Vehicle vehicle = event.getVehicle(); + + Entity damager = event.getAttacker(); + + if (damager instanceof Projectile && !(((Projectile) damager).getShooter() instanceof Player) || !(damager instanceof Player)) { + FlagPermissions perms = Residence.getPermsByLoc(vehicle.getLocation()); + if (!perms.has("vehicledestroy", true)) { + event.setCancelled(true); + return; + } + } + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Projectile) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(vehicle.getLocation()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(cause.getName(), "vehicledestroy", true)) { + cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "vehicledestroy." + res.getName())); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void MonsterKilling(EntityDamageByEntityEvent event) { + + Entity entity = event.getEntity(); + if (!isMonster(entity)) + return; + + Entity damager = event.getDamager(); + + if (!(damager instanceof Arrow) && !(damager instanceof Player)) + return; + + if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + return; + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(cause.getName(), "mobkilling", true)) { + cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "MobKilling." + res.getName())); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalLeash(PlayerLeashEntityEvent event) { + Player player = event.getPlayer(); + + Entity entity = event.getEntity(); + + if (!isAnimal(entity) && !(player instanceof Player)) + return; + + if (Residence.isResAdminOn(player)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(player.getName(), "leash", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "Leash." + res.getName())); + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onCreatureSpawn(CreatureSpawnEvent event) { - FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); - Entity ent = event.getEntity(); - if(isAnimal(ent)){ - if(!perms.has("animals", true)){ - event.setCancelled(true); - } - } else { - if (!perms.has("monsters", true) && isMonster(ent)) { - event.setCancelled(true); - } - } + FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); + Entity ent = event.getEntity(); + if (isAnimal(ent) && !perms.has("animals", true)) + event.setCancelled(true); + else if (isMonster(ent) && !perms.has("monsters", true)) + event.setCancelled(true); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingPlace(HangingPlaceEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { - return; - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); - String pname = player.getName(); - String world = player.getWorld().getName(); - if (!perms.playerHas(pname, world, "place", perms.playerHas(pname, world, "build", true))) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); + String pname = player.getName(); + String world = player.getWorld().getName(); + if (!perms.playerHas(pname, world, "place", perms.playerHas(pname, world, "build", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreak(HangingBreakEvent event) { - if (event instanceof HangingBreakByEntityEvent) { - HangingBreakByEntityEvent evt = (HangingBreakByEntityEvent) event; - if (evt.getRemover() instanceof Player) { - Player player = (Player) evt.getRemover(); - if (Residence.isResAdminOn(player)) { - return; - } - String pname = player.getName(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); - String world = event.getEntity().getWorld().getName(); - if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } - } - } + if (!(event instanceof HangingBreakByEntityEvent)) + return; + + HangingBreakByEntityEvent evt = (HangingBreakByEntityEvent) event; + if (!(evt.getRemover() instanceof Player)) + return; + + Player player = (Player) evt.getRemover(); + if (Residence.isResAdminOn(player)) + return; + + String pname = player.getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); + String world = event.getEntity().getWorld().getName(); + if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } + } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityCombust(EntityCombustEvent event) { - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); - if (!perms.has("burn", true)) { - event.setCancelled(true); - } + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + if (!perms.has("burn", true)) { + event.setCancelled(true); + } } + @SuppressWarnings("incomplete-switch") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onExplosionPrime(ExplosionPrimeEvent event) { - EntityType entity = event.getEntityType(); - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); - if (entity == EntityType.CREEPER) { - if (!perms.has("creeper", perms.has("explode", true))) { - event.setCancelled(true); - event.getEntity().remove(); - } - } - if (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT) { - if (!perms.has("tnt", perms.has("explode", true))) { - event.setCancelled(true); - event.getEntity().remove(); - } - } - if (entity == EntityType.FIREBALL) { - if (!perms.has("fireball", perms.has("explode", true))) { - event.setCancelled(true); - event.getEntity().remove(); - } - } - if (entity == EntityType.SMALL_FIREBALL) { - if (!perms.has("fireball", perms.has("explode", true))) { - event.setCancelled(true); - event.getEntity().remove(); - } - } - if (entity == EntityType.WITHER_SKULL) { - if (!perms.has("witherdamage", perms.has("damage", true))) { - event.setCancelled(true); - event.getEntity().remove(); - } - } + EntityType entity = event.getEntityType(); + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + + switch (entity) { + case CREEPER: + if (!perms.has("creeper", perms.has("explode", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + break; + case PRIMED_TNT: + case MINECART_TNT: + if (!perms.has("tnt", perms.has("explode", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + break; + case SMALL_FIREBALL: + case FIREBALL: + if (!perms.has("fireball", perms.has("explode", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + break; + case WITHER_SKULL: + if (!perms.has("witherdamage", perms.has("damage", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + break; + } } + @SuppressWarnings("incomplete-switch") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent event) { - if (event.isCancelled() || event.getEntity() == null) - return; - Boolean cancel = false; - EntityType entity = event.getEntityType(); - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); - FlagPermissions world = Residence.getWorldFlags().getPerms(event.getEntity().getWorld().getName()); - if (entity == EntityType.CREEPER) { - if (!perms.has("creeper", perms.has("explode", true))) { - cancel = true; - } - } - if (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT) { - if (!perms.has("tnt", perms.has("explode", true))) { - cancel = true; - } - } - if (entity == EntityType.FIREBALL) { - if (!perms.has("fireball", perms.has("explode", true))) { - cancel = true; - } - } - if (entity == EntityType.SMALL_FIREBALL) { - if (!perms.has("fireball", perms.has("explode", true))) { - cancel = true; - } - } - if (entity == EntityType.WITHER_SKULL || entity == EntityType.WITHER) { - if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) { - cancel = true; - } - } - if (cancel) { - event.setCancelled(true); - event.getEntity().remove(); - } else { - List preserve = new ArrayList(); - for (Block block : event.blockList()) { - FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); - if ((!blockperms.has("wither", blockperms.has("explode", world.has("wither", world.has("explode", true)))) && (entity == EntityType.WITHER || entity == EntityType.WITHER_SKULL) || (!blockperms.has("fireball", blockperms.has("explode", true)) && (entity == EntityType.FIREBALL || entity == EntityType.SMALL_FIREBALL)) || (!blockperms.has("tnt", blockperms.has("explode", true)) && (entity == EntityType.PRIMED_TNT || entity == EntityType.MINECART_TNT)) || (!blockperms.has("creeper", blockperms.has("explode", true)) && entity == EntityType.CREEPER))) { - if (block != null) { - preserve.add(block); - } - } - } - for (Block block : preserve) { - event.blockList().remove(block); - } - } + if (event.isCancelled() || event.getEntity() == null) + return; + Boolean cancel = false; + EntityType entity = event.getEntityType(); + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + FlagPermissions world = Residence.getWorldFlags().getPerms(event.getEntity().getWorld().getName()); + + switch (entity) { + case CREEPER: + if (!perms.has("creeper", perms.has("explode", true))) { + cancel = true; + } + break; + case PRIMED_TNT: + case MINECART_TNT: + if (!perms.has("tnt", perms.has("explode", true))) { + cancel = true; + } + break; + case SMALL_FIREBALL: + case FIREBALL: + if (!perms.has("fireball", perms.has("explode", true))) { + cancel = true; + } + break; + case WITHER_SKULL: + case WITHER: + if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) { + cancel = true; + } + break; + } + + if (cancel) { + event.setCancelled(true); + event.getEntity().remove(); + return; + } + + List preserve = new ArrayList(); + for (Block block : event.blockList()) { + FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); + + switch (entity) { + case CREEPER: + if (!blockperms.has("creeper", blockperms.has("explode", true))) + preserve.add(block); + continue; + case PRIMED_TNT: + case MINECART_TNT: + if (!blockperms.has("tnt", blockperms.has("explode", true))) + preserve.add(block); + continue; + case SMALL_FIREBALL: + case FIREBALL: + if (!blockperms.has("fireball", blockperms.has("explode", true))) + preserve.add(block); + continue; + case WITHER_SKULL: + case WITHER: + if (!blockperms.has("wither", blockperms.has("explode", world.has("wither", world.has("explode", true))))) + preserve.add(block); + continue; + } + } + for (Block block : preserve) { + event.blockList().remove(block); + } + } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSplashPotion(PotionSplashEvent event) { - if(event.isCancelled()) - return; - Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); - Iterator it = event.getAffectedEntities().iterator(); - while(it.hasNext()){ - LivingEntity target = it.next(); - if(target.getType()==EntityType.PLAYER){ - Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has("pvp", true); - if(!srcpvp || !tgtpvp){ - event.setIntensity(target, 0); - } - } - } + if (event.isCancelled()) + return; + Entity ent = event.getEntity(); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); + Iterator it = event.getAffectedEntities().iterator(); + while (it.hasNext()) { + LivingEntity target = it.next(); + if (target.getType() != EntityType.PLAYER) + continue; + Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has("pvp", true); + if (!srcpvp || !tgtpvp) + event.setIntensity(target, 0); + } } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { - if (event.getEntityType() == EntityType.ITEM_FRAME || event.getEntityType() == EntityType.ARMOR_STAND) { - Entity dmgr = event.getDamager(); - - Player player; - if (dmgr instanceof Player) { - player = (Player) event.getDamager(); - } else { - if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { - player = (Player) ((Projectile) dmgr).getShooter(); - } else - return; - } - - if (Residence.isResAdminOn(player)) - return; - - // Note: Location of entity, not player; otherwise player could stand outside of res and still damage - Location loc = event.getEntity().getLocation(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if(res != null) { - if(!res.getPermissions().has("container", false)){ - if(isMonster(dmgr)){ - event.setCancelled(true); - return; - } - } - - if (!res.getPermissions().playerHas(player.getName(), "container", false)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); - } - } - } + if (event.getEntityType() != EntityType.ITEM_FRAME && event.getEntityType() != EntityType.ARMOR_STAND) + return; + + Entity dmgr = event.getDamager(); + + Player player = null; + if (dmgr instanceof Player) { + player = (Player) event.getDamager(); + } else if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { + player = (Player) ((Projectile) dmgr).getShooter(); + } else if ((dmgr instanceof Projectile) && (!(((Projectile) dmgr).getShooter() instanceof Player))) { + Location loc = event.getEntity().getLocation(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null && !res.getPermissions().has("container", true)) { + event.setCancelled(true); + return; + } else + return; + } + + Location loc = event.getEntity().getLocation(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res == null) + return; + + if (isMonster(dmgr) && !res.getPermissions().has("container", false)) { + event.setCancelled(true); + return; + } + + if (player == null) + return; + + if (Residence.isResAdminOn(player)) + return; + + if (!res.getPermissions().playerHas(player.getName(), "container", false)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + } } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamage(EntityDamageEvent event) { - Entity ent = event.getEntity(); - if(ent.hasMetadata("NPC")) { - return; - } - boolean tamedWolf = ent instanceof Wolf ? ((Wolf)ent).isTamed() : false; - ClaimedResidence area = Residence.getResidenceManager().getByLoc(ent.getLocation()); - /* Living Entities */ - if (event instanceof EntityDamageByEntityEvent) { - EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; - Entity damager = attackevent.getDamager(); - ClaimedResidence srcarea = null; - if (damager != null) { - srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); - } - boolean srcpvp = true; - if (srcarea != null) { - srcpvp = srcarea.getPermissions().has("pvp", true); - } - ent = attackevent.getEntity(); - if ((ent instanceof Player || tamedWolf) && (damager instanceof Player || (damager instanceof Arrow && (((Arrow)damager).getShooter() instanceof Player)))) { - Player attacker = null; - if (damager instanceof Player) { - attacker = (Player) damager; - } else if (damager instanceof Arrow) { - attacker = (Player)((Arrow)damager).getShooter(); - } - if(!srcpvp) { - attacker.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPVPZone")); - event.setCancelled(true); - return; - } - /* Check for Player vs Player */ - if (area == null) { - /* World PvP */ - if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { - attacker.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("WorldPVPDisabled")); - event.setCancelled(true); - } - } else { - /* Normal PvP */ - if (!area.getPermissions().has("pvp", true)) { - attacker.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPVPZone")); - event.setCancelled(true); - } - } - return; - } else if ((ent instanceof Player || tamedWolf) && (damager instanceof Creeper)) { - if (area == null) { - if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("creeper", true)) { - event.setCancelled(true); - } - } else { - if (!area.getPermissions().has("creeper", true)) { - event.setCancelled(true); - } - } - } - } - if (area == null) { - if (!Residence.getWorldFlags().getPerms(ent.getWorld().getName()).has("damage", true) && (ent instanceof Player || tamedWolf)) { - event.setCancelled(true); - } - } else { - if (!area.getPermissions().has("damage", true) && (ent instanceof Player || tamedWolf)) { - event.setCancelled(true); - } - } - if (event.isCancelled()) { - /* Put out a fire on a player */ - if ((ent instanceof Player || tamedWolf) - && (event.getCause() == EntityDamageEvent.DamageCause.FIRE - || event.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) { - ent.setFireTicks(0); - } - } + Entity ent = event.getEntity(); + if (ent.hasMetadata("NPC")) + return; + + boolean tamedAnimal = isTamed(ent); + ClaimedResidence area = Residence.getResidenceManager().getByLoc(ent.getLocation()); + /* Living Entities */ + if (event instanceof EntityDamageByEntityEvent) { + EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; + Entity damager = attackevent.getDamager(); + ClaimedResidence srcarea = null; + if (damager != null) { + srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); + } + boolean srcpvp = true; + if (srcarea != null) { + srcpvp = srcarea.getPermissions().has("pvp", true); + } + ent = attackevent.getEntity(); + if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) + .getShooter() instanceof Player)))) { + Player attacker = null; + if (damager instanceof Player) { + attacker = (Player) damager; + } else if (damager instanceof Projectile) { + attacker = (Player) ((Projectile) damager).getShooter(); + } + if (!srcpvp) { + attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + event.setCancelled(true); + return; + } + /* Check for Player vs Player */ + if (area == null) { + /* World PvP */ + if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { + attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldPVPDisabled")); + event.setCancelled(true); + } + } else { + /* Normal PvP */ + if (!area.getPermissions().has("pvp", true)) { + attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + event.setCancelled(true); + } + } + return; + } else if ((ent instanceof Player || tamedAnimal) && (damager instanceof Creeper)) { + if (area == null && !Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("creeper", true)) { + event.setCancelled(true); + } else if (area != null && !area.getPermissions().has("creeper", true)) { + event.setCancelled(true); + } + } + } + if (area == null) { + if (!Residence.getWorldFlags().getPerms(ent.getWorld().getName()).has("damage", true) && (ent instanceof Player || tamedAnimal)) { + event.setCancelled(true); + } + } else { + if (!area.getPermissions().has("damage", true) && (ent instanceof Player || tamedAnimal)) { + event.setCancelled(true); + } + } + if (event.isCancelled()) { + /* Put out a fire on a player */ + if ((ent instanceof Player || tamedAnimal) && (event.getCause() == EntityDamageEvent.DamageCause.FIRE || event + .getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) { + ent.setFireTicks(0); + } + } } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3526f22f2..4e3f87a17 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -20,6 +20,7 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Hanging; +import org.bukkit.entity.Monster; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -35,11 +36,11 @@ import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerShearEntityEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.plugin.Plugin; - import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.event.*; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -47,8 +48,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ActionBar; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; - /** * * @author Administrator @@ -63,585 +62,790 @@ public class ResidencePlayerListener implements Listener { protected List playerToggleChat; public ResidencePlayerListener() { - currentRes = new HashMap(); - lastUpdate = new HashMap(); - lastOutsideLoc = new HashMap(); - playerToggleChat = new ArrayList(); - minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); - chatenabled = Residence.getConfigManager().chatEnabled(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - lastUpdate.put(player.getName(), System.currentTimeMillis()); - } + currentRes = new HashMap(); + lastUpdate = new HashMap(); + lastOutsideLoc = new HashMap(); + playerToggleChat = new ArrayList(); + minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); + chatenabled = Residence.getConfigManager().chatEnabled(); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + lastUpdate.put(player.getName(), System.currentTimeMillis()); + } } public void reload() { - currentRes = new HashMap(); - lastUpdate = new HashMap(); - lastOutsideLoc = new HashMap(); - playerToggleChat = new ArrayList(); - minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); - chatenabled = Residence.getConfigManager().chatEnabled(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - lastUpdate.put(player.getName(), System.currentTimeMillis()); - } + currentRes = new HashMap(); + lastUpdate = new HashMap(); + lastOutsideLoc = new HashMap(); + playerToggleChat = new ArrayList(); + minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); + chatenabled = Residence.getConfigManager().chatEnabled(); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + lastUpdate.put(player.getName(), System.currentTimeMillis()); + } } @EventHandler(priority = EventPriority.MONITOR) public void onPlayerQuit(PlayerQuitEvent event) { - String pname = event.getPlayer().getName(); - currentRes.remove(pname); - lastUpdate.remove(pname); - lastOutsideLoc.remove(pname); - Residence.getChatManager().removeFromChannel(pname); + String pname = event.getPlayer().getName(); + currentRes.remove(pname); + lastUpdate.remove(pname); + lastOutsideLoc.remove(pname); + Residence.getChatManager().removeFromChannel(pname); + + Residence.UUIDList.put(pname, event.getPlayer().getUniqueId()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerJoin(PlayerJoinEvent event) { - Player player = event.getPlayer(); - lastUpdate.put(player.getName(), 0L); - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.turnResAdminOn(player); - } - handleNewLocation(player, player.getLocation(), false); - - if(player.isOp() || player.hasPermission("residence.versioncheck")){ - Residence.getVersionChecker().VersionCheck(player); - } + Player player = event.getPlayer(); + lastUpdate.put(player.getName(), 0L); + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + Residence.turnResAdminOn(player); + } + handleNewLocation(player, player.getLocation(), false); + + // if (player.isOp() || player.hasPermission("residence.versioncheck")) + // { + // Residence.getVersionChecker().VersionCheck(player); + // } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerSpawn(PlayerRespawnEvent event) { - Location loc = event.getRespawnLocation(); - Boolean bed = event.isBedSpawn(); - Player player = event.getPlayer(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res == null) { - return; - } - if (res.getPermissions().playerHas(player.getName(), "move", true)) { - return; - } - if (bed) { - loc = player.getWorld().getSpawnLocation(); - } - res = Residence.getResidenceManager().getByLoc(loc); - if (res != null) { - if (!res.getPermissions().playerHas(player.getName(), "move", true)) { - loc = res.getOutsideFreeLoc(loc); - } - } - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoSpawn")); - event.setRespawnLocation(loc); + Location loc = event.getRespawnLocation(); + Boolean bed = event.isBedSpawn(); + Player player = event.getPlayer(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res == null) { + return; + } + if (res.getPermissions().playerHas(player.getName(), "move", true)) { + return; + } + if (bed) { + loc = player.getWorld().getSpawnLocation(); + } + res = Residence.getResidenceManager().getByLoc(loc); + if (res != null && !res.getPermissions().playerHas(player.getName(), "move", true)) { + loc = res.getOutsideFreeLoc(loc); + } + + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoSpawn")); + event.setRespawnLocation(loc); } + @SuppressWarnings("deprecation") private boolean isContainer(Material mat, Block block) { - return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") || Residence.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId())); + return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") || Residence + .getConfigManager().getCustomContainers().contains(block.getTypeId()); } + @SuppressWarnings("deprecation") private boolean isCanUseEntity_BothClick(Material mat, Block block) { - return mat == Material.LEVER || mat == Material.STONE_BUTTON || mat == Material.WOOD_BUTTON || - mat == Material.WOODEN_DOOR || mat == Material.SPRUCE_DOOR || mat == Material.BIRCH_DOOR || - mat == Material.JUNGLE_DOOR || mat == Material.ACACIA_DOOR || mat == Material.DARK_OAK_DOOR || - mat == Material.SPRUCE_FENCE_GATE || - mat == Material.BIRCH_FENCE_GATE || mat == Material.JUNGLE_FENCE_GATE || mat == Material.ACACIA_FENCE_GATE || - mat == Material.DARK_OAK_FENCE_GATE || mat == Material.TRAP_DOOR || mat == Material.FENCE_GATE || - mat == Material.PISTON_BASE || mat == Material.PISTON_STICKY_BASE || mat == Material.DRAGON_EGG || - Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case SPRUCE_DOOR: + case BIRCH_DOOR: + case JUNGLE_DOOR: + case ACACIA_DOOR: + case DARK_OAK_DOOR: + case SPRUCE_FENCE_GATE: + case BIRCH_FENCE_GATE: + case JUNGLE_FENCE_GATE: + case ACACIA_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case TRAP_DOOR: + case IRON_TRAPDOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } } + @SuppressWarnings("deprecation") private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { - return mat == Material.ITEM_FRAME || mat == Material.BEACON || mat == Material.FLOWER_POT || mat == Material.COMMAND || mat == Material.ANVIL || mat == Material.CAKE_BLOCK || mat == Material.NOTE_BLOCK - || mat == Material.DIODE || mat == Material.DIODE_BLOCK_OFF || mat == Material.DIODE_BLOCK_ON - || mat == Material.BED_BLOCK || mat == Material.WORKBENCH || mat == Material.BREWING_STAND - || mat == Material.ENCHANTMENT_TABLE || - Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); + switch (mat) { + case ITEM_FRAME: + case BEACON: + case FLOWER_POT: + case COMMAND: + case ANVIL: + case CAKE_BLOCK: + case NOTE_BLOCK: + case DIODE: + case DIODE_BLOCK_OFF: + case DIODE_BLOCK_ON: + case BED_BLOCK: + case WORKBENCH: + case BREWING_STAND: + case ENCHANTMENT_TABLE: + return true; + default: + return Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); + } } private boolean isCanUseEntity(Material mat, Block block) { - return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); + return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); } - + + @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { - Player player = event.getPlayer(); - Material heldItem = player.getItemInHand().getType(); - Block block = event.getClickedBlock(); - if (block == null) { - return; - } - Material mat = block.getType(); - if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block) || event.getAction() == Action.PHYSICAL)) { - int typeId = player.getItemInHand().getTypeId(); - if (typeId != Residence.getConfigManager().getSelectionTooldID() && typeId != Residence.getConfigManager().getInfoToolID() && typeId != 351 && typeId != 416) { - return; - } - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); - String world = player.getWorld().getName(); - String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); - boolean resadmin = Residence.isResAdminOn(player); - if (event.getAction() == Action.PHYSICAL) { - if (!resadmin) { - boolean hasuse = perms.playerHas(player.getName(), world, "use", true); - boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse); - if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) { - event.setCancelled(true); - return; - } - } - if (!perms.playerHas(player.getName(), world, "trample", perms.playerHas(player.getName(), world, "build", true)) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { - event.setCancelled(true); - return; - } - return; - } - if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); - event.setCancelled(true); - return; - } - if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (player.getItemInHand().getTypeId() == Residence.getConfigManager().getSelectionTooldID()) { - Plugin wep = Bukkit.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (((WorldEditPlugin) wep).getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { - return; - } - } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group.canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { - if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc1(player, loc); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); - } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc2(player, loc); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); - } - } - } - if (player.getItemInHand().getTypeId() == Residence.getConfigManager().getInfoToolID()) { - if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - Location loc = block.getLocation(); - String res = Residence.getResidenceManager().getNameByLoc(loc); - if (res != null) { - Residence.getResidenceManager().printAreaInfo(res, player); - event.setCancelled(true); - } - if (res == null) { - event.setCancelled(true); - player.sendMessage(Residence.getLanguage().getPhrase("NoResHere")); - } - } - } - if (!resadmin) { - if (heldItem != null) { - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (player.getItemInHand().getTypeId() == 351) { - if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS || player.getItemInHand().getData().getData() == 3 && block.getTypeId() == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { - perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, "build", true)) { - event.setCancelled(true); - return; - } - } - } - if(heldItem == Material.ARMOR_STAND){ - perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, "build", true)) { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission")); - event.setCancelled(true); - return; - } - } - } - } - if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasuse = perms.playerHas(player.getName(), world, "use", true); - for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { - if (mat == checkMat.getKey()) { - if (!perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) { - if (hasuse || checkMat.getValue().equals("container")) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", checkMat.getValue())); - return; - } else { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); - return; - } - } - } - } - if (Residence.getConfigManager().getCustomContainers().contains(Integer.valueOf(block.getTypeId()))) { - if (!perms.playerHas(player.getName(), world, "container", hasuse)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); - return; - } - } - if (Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()))) { - if (!hasuse) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); - return; - } - } - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId()))) { - if (!hasuse) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); - return; - } - } - } - } - } - } + Player player = event.getPlayer(); + Material heldItem = player.getItemInHand().getType(); + int heldItemId = player.getItemInHand().getTypeId(); + Block block = event.getClickedBlock(); + if (block == null) { + return; + } + int blockId = block.getTypeId(); + + Material mat = block.getType(); + if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block) + || event.getAction() == Action.PHYSICAL)) { + if (heldItemId != Residence.getConfigManager().getSelectionTooldID() && heldItemId != Residence.getConfigManager().getInfoToolID() && heldItemId != 351 + && heldItemId != 416) { + return; + } + } + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + String world = player.getWorld().getName(); + String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); + boolean resadmin = Residence.isResAdminOn(player); + if (event.getAction() == Action.PHYSICAL) { + if (!resadmin) { + boolean hasuse = perms.playerHas(player.getName(), world, "use", true); + boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse); + if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) { + event.setCancelled(true); + return; + } + } + if (!perms.playerHas(player.getName(), world, "trample", perms.playerHas(player.getName(), world, "build", true)) && (mat == Material.SOIL + || mat == Material.SOUL_SAND)) { + event.setCancelled(true); + return; + } + return; + } + if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); + event.setCancelled(true); + return; + } + if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + if (heldItemId == Residence.getConfigManager().getSelectionTooldID()) { + if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) + return; + + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group + .canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { + if (event.getAction() == Action.LEFT_CLICK_BLOCK) { + Location loc = block.getLocation(); + Residence.getSelectionManager().placeLoc1(player, loc); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED + + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + Location loc = block.getLocation(); + Residence.getSelectionManager().placeLoc2(player, loc); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED + + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + } + + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) + Residence.getSelectionManager().showSelectionInfoInActionBar(player); + } + } + if (heldItemId == Residence.getConfigManager().getInfoToolID() && event.getAction() == Action.LEFT_CLICK_BLOCK) { + Location loc = block.getLocation(); + String res = Residence.getResidenceManager().getNameByLoc(loc); + if (res != null) { + Residence.getResidenceManager().printAreaInfo(res, player); + event.setCancelled(true); + } else { + event.setCancelled(true); + player.sendMessage(Residence.getLanguage().getPhrase("NoResHere")); + } + } + + if (resadmin) + return; + + if (heldItem != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (heldItemId == 351) { + if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS || player.getItemInHand().getData().getData() == 3 + && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { + perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!perms.playerHas(player.getName(), world, "build", true)) { + event.setCancelled(true); + return; + } + } + } + if (heldItem == Material.ARMOR_STAND) { + perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!perms.playerHas(player.getName(), world, "build", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + event.setCancelled(true); + return; + } + } + } + if (isContainer(mat, block) || isCanUseEntity(mat, block)) { + boolean hasuse = perms.playerHas(player.getName(), world, "use", true); + for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { + if (mat != checkMat.getKey()) + continue; + + if (perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) + continue; + + if (hasuse || checkMat.getValue().equals("container")) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", checkMat.getValue())); + return; + } else { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); + return; + } + + } + if (Residence.getConfigManager().getCustomContainers().contains(blockId)) { + if (!perms.playerHas(player.getName(), world, "container", hasuse)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + return; + } + } + if (Residence.getConfigManager().getCustomBothClick().contains(blockId)) { + if (!hasuse) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); + return; + } + } + if (Residence.getConfigManager().getCustomRightClick().contains(blockId) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (!hasuse) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); + return; + } + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + /* Trade */ + if (ent.getType() != EntityType.VILLAGER) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getPlayer().getLocation()); + + if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + event.setCancelled(true); + } + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerShearEntity(PlayerShearEntityEvent event) { + + if (event.isCancelled()) + return; + + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getEntity(); + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + + if (!res.getPermissions().playerHas(player.getName(), "shear", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Shear." + res.getName())); + event.setCancelled(true); + } + } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { - return; - } - Entity ent = event.getRightClicked(); - /* Trade */ - if (ent.getType() == EntityType.VILLAGER) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getPlayer().getLocation()); - - if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - event.setCancelled(true); - } - } - - /* Container - ItemFrame protection */ - Material heldItem = player.getItemInHand().getType(); - if (!(ent instanceof Hanging)) { - return; - } - Hanging hanging = (Hanging) ent; - if (hanging.getType() != EntityType.ITEM_FRAME) { - return; - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); - String world = player.getWorld().getName(); - String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); - if (!Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); - event.setCancelled(true); - return; - } - if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); - } + public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + + /* Container - ItemFrame protection */ + if (!(ent instanceof Hanging)) + return; + + Hanging hanging = (Hanging) ent; + + if (hanging.getType() != EntityType.ITEM_FRAME) { + return; + } + + Material heldItem = player.getItemInHand().getType(); + + FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + String world = player.getWorld().getName(); + String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); + if (!Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); + event.setCancelled(true); + return; + } + if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + } } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { - return; - } - - Entity ent = event.getRightClicked(); - if (ent.getType() != EntityType.ARMOR_STAND) { - return; - } - - FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); - String world = player.getWorld().getName(); - - if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); - } + public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + if (ent.getType() != EntityType.ARMOR_STAND) + return; + + FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + String world = player.getWorld().getName(); + + if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { - return; - } - String pname = player.getName(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); - if (res != null) { - if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { - if (Residence.getRentManager().isRented(res.getName())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); - event.setCancelled(true); - return; - } - } - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); - if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true))) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); - event.setCancelled(true); - } + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); + if (res != null) { + if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { + if (Residence.getRentManager().isRented(res.getName())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); + event.setCancelled(true); + return; + } + } + } + String pname = player.getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); + if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true))) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBucketFill(PlayerBucketFillEvent event) { - Player player = event.getPlayer(); - String pname = player.getName(); - if (Residence.isResAdminOn(player)) { - return; - } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); - if (res != null) { - if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { - if (Residence.getRentManager().isRented(res.getName())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); - event.setCancelled(true); - return; - } - } - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); - boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)); - if (!hasbucket) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); - event.setCancelled(true); - } + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); + if (res != null) { + if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { + if (Residence.getRentManager().isRented(res.getName())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); + event.setCancelled(true); + return; + } + } + } + + String pname = player.getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); + boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)); + if (!hasbucket) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerTeleport(PlayerTeleportEvent event) { - Location loc = event.getTo(); - Player player = event.getPlayer(); - - if (Residence.isResAdminOn(player)) { - handleNewLocation(player, loc, false); - return; - } - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (event.getCause() == TeleportCause.ENDER_PEARL || event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL) { - if (res != null) { - String areaname = Residence.getResidenceManager().getNameByLoc(loc); - if (!res.getPermissions().playerHas(player.getName(), "move", true)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", areaname)); - return; - } - } - } - if (event.getCause() == TeleportCause.PLUGIN) { - if (res != null) { - String areaname = Residence.getResidenceManager().getNameByLoc(loc); - if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny", areaname)); - return; - } - } - } - handleNewLocation(player, loc, false); + + Player player = event.getPlayer(); + + if (player.hasMetadata("NPC")) + return; + + Location loc = event.getTo(); + + if (Residence.isResAdminOn(player)) { + handleNewLocation(player, loc, false); + return; + } + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null) { + if (event.getCause() == TeleportCause.ENDER_PEARL || event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event + .getCause() == TeleportCause.PLUGIN) { + String areaname = res.getName(); + if (!res.getPermissions().playerHas(player.getName(), "move", true)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", areaname)); + return; + } + } + + if (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) { + if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { + String areaname = res.getName(); + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny", areaname)); + return; + } + } + } + //handleNewLocation(player, loc, false); } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerMove(PlayerMoveEvent event) { - Player player = event.getPlayer(); - if (player == null) { - return; - } - long last = lastUpdate.get(player.getName()); - long now = System.currentTimeMillis(); - if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) { - return; - } - lastUpdate.put(player.getName(), now); - if (event.getFrom().getWorld() == event.getTo().getWorld()) { - if (event.getFrom().distance(event.getTo()) == 0) { - return; - } - } - handleNewLocation(player, event.getTo(), true); + + Player player = event.getPlayer(); + if (player == null) + return; + + if (player.hasMetadata("NPC")) + return; + + String name = player.getName(); + long last = lastUpdate.get(name); + long now = System.currentTimeMillis(); + if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) { + return; + } + lastUpdate.put(name, now); + Location locfrom = event.getFrom(); + Location locto = event.getTo(); + if (locfrom.getX() == locto.getX() && locfrom.getY() == locto.getY() && locfrom.getZ() == locto.getZ()) + return; + + handleNewLocation(player, locto, true); + + if (Residence.getConfigManager().getTeleportDelay() > 0 && ResidenceCommandListener.teleportDelayMap.contains(player.getName())) { + ResidenceCommandListener.teleportDelayMap.remove(player.getName()); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportCanceled")); + } + } + + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + return false; } public void handleNewLocation(Player player, Location loc, boolean move) { - String pname = player.getName(); - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - String areaname = null; - boolean chatchange = false; - String subzone = null; - if (res != null) { - areaname = Residence.getResidenceManager().getNameByLoc(loc); - while (res.getSubzoneByLoc(player.getLocation()) != null) { - subzone = res.getSubzoneNameByLoc(player.getLocation()); - res = res.getSubzoneByLoc(player.getLocation()); - areaname = areaname + "." + subzone; - } - } - ClaimedResidence ResOld = null; - if (currentRes.containsKey(pname)) { - ResOld = Residence.getResidenceManager().getByName(currentRes.get(pname)); - if (ResOld == null) { - currentRes.remove(pname); - } - } - if (res == null) { - lastOutsideLoc.put(pname, loc); - if (ResOld != null) { - String leave = ResOld.getLeaveMessage(); - /* - * TODO - ResidenceLeaveEvent is deprecated as of 21-MAY-2013. Its functionality is replaced by - * ResidenceChangedEvent. For now, this event is still supported until it is removed at a - * suitable time in the future. - */ - ResidenceLeaveEvent leaveevent = new ResidenceLeaveEvent(ResOld, player); - Residence.getServ().getPluginManager().callEvent(leaveevent); - - // New ResidenceChangeEvent - ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); - Residence.getServ().getPluginManager().callEvent(chgEvent); - - if (leave != null && !leave.equals("")) { - if(Residence.getConfigManager().useActionBar()){ - ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); - } else { - player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); - } - } - currentRes.remove(pname); - Residence.getChatManager().removeFromChannel(pname); - } - return; - } - if (move) { - if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player) && !player.hasPermission("residence.admin.move")) { - Location lastLoc = lastOutsideLoc.get(pname); - if (lastLoc != null) { - player.teleport(lastLoc); - } else { - player.teleport(res.getOutsideFreeLoc(loc)); - } - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", res.getName().split("\\.")[res.getName().split("\\.").length - 1])); - return; - } - } - lastOutsideLoc.put(pname, loc); - if (!currentRes.containsKey(pname) || ResOld != res) { - currentRes.put(pname, areaname); - if (subzone == null) { - chatchange = true; - } - - // "from" residence for ResidenceChangedEvent - ClaimedResidence chgFrom = null; - if (ResOld != res && ResOld != null) { - String leave = ResOld.getLeaveMessage(); - chgFrom = ResOld; - - /* - * TODO - ResidenceLeaveEvent is deprecated as of 21-MAY-2013. Its functionality is replaced by - * ResidenceChangedEvent. For now, this event is still supported until it is removed at a - * suitable time in the future. - */ - ResidenceLeaveEvent leaveevent = new ResidenceLeaveEvent(ResOld, player); - Residence.getServ().getPluginManager().callEvent(leaveevent); - - if (leave != null && !leave.equals("") && ResOld != res.getParent()) { - if(Residence.getConfigManager().useActionBar()){ - ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); - } else { - player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); - } - } - } - String enterMessage = res.getEnterMessage(); - - /* - * TODO - ResidenceEnterEvent is deprecated as of 21-MAY-2013. Its functionality is replaced by - * ResidenceChangedEvent. For now, this event is still supported until it is removed at a - * suitable time in the future. - */ - ResidenceEnterEvent enterevent = new ResidenceEnterEvent(res, player); - Residence.getServ().getPluginManager().callEvent(enterevent); - - // New ResidenceChangedEvent - ResidenceChangedEvent chgEvent = new ResidenceChangedEvent( chgFrom, res, player); - Residence.getServ().getPluginManager().callEvent(chgEvent); - - if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) { - if(Residence.getConfigManager().useActionBar()){ - ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)).toString()); - } else { - player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); - } - } - } - if (chatchange && chatenabled) { - Residence.getChatManager().setChannel(pname, areaname); - } + + String pname = player.getName(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + + ClaimedResidence orres = res; + String areaname = null; + String subzone = null; + if (res != null) { + areaname = res.getName(); + while (res.getSubzoneByLoc(loc) != null) { + res = res.getSubzoneByLoc(player.getLocation()); + subzone = res.getName(); + areaname = areaname + "." + subzone; + } + } + + ClaimedResidence ResOld = null; + if (currentRes.containsKey(pname)) { + ResOld = Residence.getResidenceManager().getByName(currentRes.get(pname)); + if (ResOld == null) { + currentRes.remove(pname); + } + } + + if (res == null) { + lastOutsideLoc.put(pname, loc); + if (ResOld != null) { + String leave = ResOld.getLeaveMessage(); + /* + * TODO - ResidenceLeaveEvent is deprecated as of 21-MAY-2013. + * Its functionality is replaced by ResidenceChangedEvent. For + * now, this event is still supported until it is removed at a + * suitable time in the future. + */ +// ResidenceLeaveEvent leaveevent = new ResidenceLeaveEvent(ResOld, player); +// Residence.getServ().getPluginManager().callEvent(leaveevent); + + // New ResidenceChangeEvent + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); + Residence.getServ().getPluginManager().callEvent(chgEvent); + + if (leave != null && !leave.equals("")) { + if (Residence.getConfigManager().useActionBar()) { + ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); + } else { + player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + } + } + currentRes.remove(pname); + Residence.getChatManager().removeFromChannel(pname); + } + return; + } + + if (move) { + if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player)) { + Location lastLoc = lastOutsideLoc.get(pname); + if (lastLoc != null) { + player.teleport(lastLoc); + } else { + player.teleport(res.getOutsideFreeLoc(loc)); + } + if (Residence.getConfigManager().useActionBar()) { + ActionBar.send(player, ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", orres.getName())); + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", orres.getName())); + } + + return; + // Preventing fly in residence only when player has move permission + } else if (player.isFlying()) { + if (res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission("residence.nofly.bypass")) { + Location lc = player.getLocation(); + Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); + location.setPitch(lc.getPitch()); + location.setYaw(lc.getYaw()); + int from = location.getBlockY(); + int maxH = location.getWorld().getMaxHeight(); + for (int i = 0; i < maxH; i++) { + location.setY(from - i); + Block block = location.getBlock(); + if (!isEmptyBlock(block)) { + location.setY(from - i + 1); + break; + } + if (location.getBlockY() <= 0) { + Location lastLoc = lastOutsideLoc.get(pname); + if (lastLoc != null) + player.teleport(lastLoc); + else + player.teleport(res.getOutsideFreeLoc(loc)); + + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly." + orres.getName())); + return; + } + } + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly." + orres.getName())); + player.teleport(location); + player.setFlying(false); + player.setAllowFlight(false); + } + } + } + + lastOutsideLoc.put(pname, loc); + + boolean chatchange = false; + if (!currentRes.containsKey(pname) || ResOld != res) + + { + currentRes.put(pname, areaname); + if (subzone == null) { + chatchange = true; + } + + // "from" residence for ResidenceChangedEvent + ClaimedResidence chgFrom = null; + if (ResOld != res && ResOld != null) { + String leave = ResOld.getLeaveMessage(); + chgFrom = ResOld; + + /* + * TODO - ResidenceLeaveEvent is deprecated as of 21-MAY-2013. + * Its functionality is replaced by ResidenceChangedEvent. For + * now, this event is still supported until it is removed at a + * suitable time in the future. + */ +// ResidenceLeaveEvent leaveevent = new ResidenceLeaveEvent(ResOld, player); +// Residence.getServ().getPluginManager().callEvent(leaveevent); + + if (leave != null && !leave.equals("") && ResOld != res.getParent()) { + if (Residence.getConfigManager().useActionBar()) { + ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); + } else { + player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + } + } + } + + String enterMessage = res.getEnterMessage(); + + /* + * TODO - ResidenceEnterEvent is deprecated as of 21-MAY-2013. Its + * functionality is replaced by ResidenceChangedEvent. For now, this + * event is still supported until it is removed at a suitable time + * in the future. + */ +// ResidenceEnterEvent enterevent = new ResidenceEnterEvent(res, player); +// Residence.getServ().getPluginManager().callEvent(enterevent); + + // New ResidenceChangedEvent + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); + Residence.getServ().getPluginManager().callEvent(chgEvent); + + if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) { + if (Residence.getConfigManager().useActionBar()) { + ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)).toString()); + } else { + player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); + } + } + } + if (chatchange && chatenabled) + + { + Residence.getChatManager().setChannel(pname, areaname); + } + } - + public String insertMessages(Player player, String areaname, ClaimedResidence res, String message) { - try { - message = message.replaceAll("%player", player.getName()); - message = message.replaceAll("%owner", res.getPermissions().getOwner()); - message = message.replaceAll("%residence", areaname); - } catch (Exception ex) { - return ""; - } - return message; + try { + message = message.replaceAll("%player", player.getName()); + message = message.replaceAll("%owner", res.getPermissions().getOwner()); + message = message.replaceAll("%residence", areaname); + } catch (Exception ex) { + return ""; + } + return message; } public void doHeals() { - try { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); - ClaimedResidence res = null; - if (resname != null) { - res = Residence.getResidenceManager().getByName(resname); - } - if (res != null && res.getPermissions().has("healing", false)) { - Damageable damage = player; - double health = damage.getHealth(); - if (health < 20 && !player.isDead()) { - player.setHealth(health + 1); - } - } - } - } catch (Exception ex) { - } + try { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + ClaimedResidence res = null; + + if (resname == null) + continue; + + res = Residence.getResidenceManager().getByName(resname); + + if (!res.getPermissions().has("healing", false)) + continue; + + Damageable damage = player; + double health = damage.getHealth(); + if (health < player.getMaxHealth() && !player.isDead()) { + player.setHealth(health + 1); + } + } + } catch (Exception ex) { + } + } + + public void DespawnMobs() { + try { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + + if (resname == null) + continue; + + ClaimedResidence res = null; + res = Residence.getResidenceManager().getByName(resname); + + if (!res.getPermissions().has("nomobs", false)) + continue; + + List entities = Bukkit.getServer().getWorld(res.getWorld()).getEntities(); + for (Entity ent : entities) { + if (!ResidenceEntityListener.isMonster(ent)) + continue; + if (res.containsLoc(ent.getLocation())) { + Monster monster = (Monster) ent; + monster.remove(); + } + } + } + } catch (Exception ex) { + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerChat(AsyncPlayerChatEvent event) { - String pname = event.getPlayer().getName(); - if (chatenabled && playerToggleChat.contains(pname)) { - String area = currentRes.get(pname); - if (area != null) { - ChatChannel channel = Residence.getChatManager().getChannel(area); - if (channel != null) { - channel.chat(pname, event.getMessage()); - } - event.setCancelled(true); - } - } + String pname = event.getPlayer().getName(); + if (chatenabled && playerToggleChat.contains(pname)) { + String area = currentRes.get(pname); + if (area != null) { + ChatChannel channel = Residence.getChatManager().getChannel(area); + if (channel != null) { + channel.chat(pname, event.getMessage()); + } + event.setCancelled(true); + } + } } public void tooglePlayerResidenceChat(Player player) { - String pname = player.getName(); - if (playerToggleChat.contains(pname)) { - playerToggleChat.remove(pname); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "OFF" + ChatColor.YELLOW + "!")); - } else { - playerToggleChat.add(pname); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "ON" + ChatColor.YELLOW + "!")); - } + String pname = player.getName(); + if (playerToggleChat.contains(pname)) { + playerToggleChat.remove(pname); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "OFF" + ChatColor.YELLOW + "!")); + } else { + playerToggleChat.add(pname); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "ON" + ChatColor.YELLOW + "!")); + } } public String getCurrentResidenceName(String player) { - return currentRes.get(player); + return currentRes.get(player); } } diff --git a/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java b/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java index d8f0368b0..b9fddae6c 100644 --- a/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java +++ b/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java @@ -15,6 +15,7 @@ * * @author Administrator */ +@SuppressWarnings("deprecation") public class BPermissionsAdapter implements PermissionsInterface { public BPermissionsAdapter() { @@ -25,7 +26,7 @@ public String getPlayerGroup(Player player) { } public String getPlayerGroup(String player, String world) { - String[] groups = ApiLayer.getGroups(world, CalculableType.USER, player); + String[] groups = ApiLayer.getGroups(world, CalculableType.USER, player); PermissionManager pmanager = Residence.getPermissionManager(); for (String group : groups) { if (pmanager.hasGroup(group)) { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 59c550f1d..da4ecb0e6 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -31,6 +31,7 @@ public class PermissionGroup { protected int zmax; protected int resmax; protected double costperarea; + protected double sellperarea = 0; protected boolean tpaccess; protected int subzonedepth; protected FlagPermissions flagPerms; @@ -59,262 +60,275 @@ public class PermissionGroup { protected boolean itemListAccess; public PermissionGroup(String name) { - flagPerms = new FlagPermissions(); - creatorDefaultFlags = new HashMap(); - residenceDefaultFlags = new HashMap(); - groupDefaultFlags = new HashMap>(); - groupname = name; + flagPerms = new FlagPermissions(); + creatorDefaultFlags = new HashMap(); + residenceDefaultFlags = new HashMap(); + groupDefaultFlags = new HashMap>(); + groupname = name; } public PermissionGroup(String name, ConfigurationSection node) { - this(name); - this.parseGroup(node); + this(name); + this.parseGroup(node); } public PermissionGroup(String name, ConfigurationSection node, FlagPermissions parentFlagPerms) { - this(name, node); - flagPerms.setParent(parentFlagPerms); + this(name, node); + flagPerms.setParent(parentFlagPerms); } private void parseGroup(ConfigurationSection limits) { - if (limits == null) { - return; - } - cancreate = limits.getBoolean("Residence.CanCreate", false); - resmax = limits.getInt("Residence.MaxResidences", 0); - maxPhysical = limits.getInt("Residence.MaxAreasPerResidence", 2); - xmax = limits.getInt("Residence.MaxEastWest", 0); - ymax = limits.getInt("Residence.MaxUpDown", 0); - zmax = limits.getInt("Residence.MaxNorthSouth", 0); - minHeight = limits.getInt("Residence.MinHeight", 0); - maxHeight = limits.getInt("Residence.MaxHeight", 255); - tpaccess = limits.getBoolean("Residence.CanTeleport", false); - subzonedepth = limits.getInt("Residence.SubzoneDepth", 0); - messageperms = limits.getBoolean("Messaging.CanChange", false); - defaultEnterMessage = limits.getString("Messaging.DefaultEnter", null); - defaultLeaveMessage = limits.getString("Messaging.DefaultLeave", null); - maxLeaseTime = limits.getInt("Lease.MaxDays", 16); - leaseGiveTime = limits.getInt("Lease.RenewIncrement", 14); - maxRents = limits.getInt("Rent.MaxRents", 0); - maxRentables = limits.getInt("Rent.MaxRentables", 0); - renewcostperarea = limits.getDouble("Economy.RenewCost", 0.02D); - canBuy = limits.getBoolean("Economy.CanBuy", false); - canSell = limits.getBoolean("Economy.CanSell", false); - buyIgnoreLimits = limits.getBoolean("Economy.IgnoreLimits", false); - costperarea = limits.getDouble("Economy.BuyCost", 0); - unstuck = limits.getBoolean("Residence.Unstuck", false); - kick = limits.getBoolean("Residence.Kick", false); - selectCommandAccess = limits.getBoolean("Residence.SelectCommandAccess", true); - itemListAccess = limits.getBoolean("Residence.ItemListAccess", true); - ConfigurationSection node = limits.getConfigurationSection("Flags.Permission"); - Set flags = null; - if (node != null) { - flags = node.getKeys(false); - } - if (flags != null) { - Iterator flagit = flags.iterator(); - while (flagit.hasNext()) { - String flagname = flagit.next(); - boolean access = limits.getBoolean("Flags.Permission." + flagname, false); - flagPerms.setFlag(flagname, access ? FlagState.TRUE : FlagState.FALSE); - } - } - node = limits.getConfigurationSection("Flags.CreatorDefault"); - if (node != null) { - flags = node.getKeys(false); - } - if (flags != null) { - Iterator flagit = flags.iterator(); - while (flagit.hasNext()) { - String flagname = flagit.next(); - boolean access = limits.getBoolean("Flags.CreatorDefault." + flagname, false); - creatorDefaultFlags.put(flagname, access); - } - - } - node = limits.getConfigurationSection("Flags.Default"); - if (node != null) { - flags = node.getKeys(false); - } - if (flags != null) { - Iterator flagit = flags.iterator(); - while (flagit.hasNext()) { - String flagname = flagit.next(); - boolean access = limits.getBoolean("Flags.Default." + flagname, false); - residenceDefaultFlags.put(flagname, access); - } - } - node = limits.getConfigurationSection("Flags.GroupDefault"); - Set groupDef = null; - if (node != null) { - groupDef = node.getKeys(false); - } - if (groupDef != null) { - Iterator groupit = groupDef.iterator(); - while (groupit.hasNext()) { - String name = groupit.next(); - Map gflags = new HashMap(); - flags = limits.getConfigurationSection("Flags.GroupDefault." + name).getKeys(false); - Iterator flagit = flags.iterator(); - while (flagit.hasNext()) { - String flagname = flagit.next(); - boolean access = limits.getBoolean("Flags.GroupDefault." + name + "." + flagname, false); - gflags.put(flagname, access); - } - groupDefaultFlags.put(name, gflags); - } - } + if (limits == null) { + return; + } + cancreate = limits.getBoolean("Residence.CanCreate", false); + resmax = limits.getInt("Residence.MaxResidences", 0); + maxPhysical = limits.getInt("Residence.MaxAreasPerResidence", 2); + xmax = limits.getInt("Residence.MaxEastWest", 0); + ymax = limits.getInt("Residence.MaxUpDown", 0); + zmax = limits.getInt("Residence.MaxNorthSouth", 0); + minHeight = limits.getInt("Residence.MinHeight", 0); + maxHeight = limits.getInt("Residence.MaxHeight", 255); + tpaccess = limits.getBoolean("Residence.CanTeleport", false); + subzonedepth = limits.getInt("Residence.SubzoneDepth", 0); + messageperms = limits.getBoolean("Messaging.CanChange", false); + defaultEnterMessage = limits.getString("Messaging.DefaultEnter", null); + defaultLeaveMessage = limits.getString("Messaging.DefaultLeave", null); + maxLeaseTime = limits.getInt("Lease.MaxDays", 16); + leaseGiveTime = limits.getInt("Lease.RenewIncrement", 14); + maxRents = limits.getInt("Rent.MaxRents", 0); + maxRentables = limits.getInt("Rent.MaxRentables", 0); + renewcostperarea = limits.getDouble("Economy.RenewCost", 0.02D); + canBuy = limits.getBoolean("Economy.CanBuy", false); + canSell = limits.getBoolean("Economy.CanSell", false); + buyIgnoreLimits = limits.getBoolean("Economy.IgnoreLimits", false); + costperarea = limits.getDouble("Economy.BuyCost", 0); + + if (limits.contains("Economy.SellCost")) + sellperarea = limits.getDouble("Economy.SellCost", 0); + + unstuck = limits.getBoolean("Residence.Unstuck", false); + kick = limits.getBoolean("Residence.Kick", false); + selectCommandAccess = limits.getBoolean("Residence.SelectCommandAccess", true); + itemListAccess = limits.getBoolean("Residence.ItemListAccess", true); + ConfigurationSection node = limits.getConfigurationSection("Flags.Permission"); + Set flags = null; + if (node != null) { + flags = node.getKeys(false); + } + if (flags != null) { + Iterator flagit = flags.iterator(); + while (flagit.hasNext()) { + String flagname = flagit.next(); + boolean access = limits.getBoolean("Flags.Permission." + flagname, false); + flagPerms.setFlag(flagname, access ? FlagState.TRUE : FlagState.FALSE); + } + } + node = limits.getConfigurationSection("Flags.CreatorDefault"); + if (node != null) { + flags = node.getKeys(false); + } + if (flags != null) { + Iterator flagit = flags.iterator(); + while (flagit.hasNext()) { + String flagname = flagit.next(); + boolean access = limits.getBoolean("Flags.CreatorDefault." + flagname, false); + creatorDefaultFlags.put(flagname, access); + } + + } + node = limits.getConfigurationSection("Flags.Default"); + if (node != null) { + flags = node.getKeys(false); + } + if (flags != null) { + Iterator flagit = flags.iterator(); + while (flagit.hasNext()) { + String flagname = flagit.next(); + boolean access = limits.getBoolean("Flags.Default." + flagname, false); + residenceDefaultFlags.put(flagname, access); + } + } + node = limits.getConfigurationSection("Flags.GroupDefault"); + Set groupDef = null; + if (node != null) { + groupDef = node.getKeys(false); + } + if (groupDef != null) { + Iterator groupit = groupDef.iterator(); + while (groupit.hasNext()) { + String name = groupit.next(); + Map gflags = new HashMap(); + flags = limits.getConfigurationSection("Flags.GroupDefault." + name).getKeys(false); + Iterator flagit = flags.iterator(); + while (flagit.hasNext()) { + String flagname = flagit.next(); + boolean access = limits.getBoolean("Flags.GroupDefault." + name + "." + flagname, false); + gflags.put(flagname, access); + } + groupDefaultFlags.put(name, gflags); + } + } } public int getMaxX() { - return xmax; + return xmax; } public int getMaxY() { - return ymax; + return ymax; } public int getMaxZ() { - return zmax; + return zmax; } public int getMinHeight() { - return minHeight; + return minHeight; } public int getMaxHeight() { - return maxHeight; + return maxHeight; } public int getMaxZones() { - return resmax; + return resmax; } public double getCostPerBlock() { - return costperarea; + return costperarea; + } + + public double getSellPerBlock() { + return sellperarea; } public boolean hasTpAccess() { - return tpaccess; + return tpaccess; } public int getMaxSubzoneDepth() { - return subzonedepth; + return subzonedepth; } public boolean canSetEnterLeaveMessages() { - return messageperms; + return messageperms; } public String getDefaultEnterMessage() { - return defaultEnterMessage; + return defaultEnterMessage; } public String getDefaultLeaveMessage() { - return defaultLeaveMessage; + return defaultLeaveMessage; } public int getMaxLeaseTime() { - return maxLeaseTime; + return maxLeaseTime; } public int getLeaseGiveTime() { - return leaseGiveTime; + return leaseGiveTime; } public double getLeaseRenewCost() { - return renewcostperarea; + return renewcostperarea; } public boolean canBuyLand() { - return canBuy; + return canBuy; } public boolean canSellLand() { - return canSell; + return canSell; } public int getMaxRents() { - return maxRents; + return maxRents; } public int getMaxRentables() { - return maxRentables; + return maxRentables; } public boolean buyLandIgnoreLimits() { - return buyIgnoreLimits; + return buyIgnoreLimits; } public boolean hasUnstuckAccess() { - return unstuck; + return unstuck; } + public boolean hasKickAccess() { return kick; } + public int getMaxPhysicalPerResidence() { - return maxPhysical; + return maxPhysical; } public Set> getDefaultResidenceFlags() { - return residenceDefaultFlags.entrySet(); + return residenceDefaultFlags.entrySet(); } public Set> getDefaultCreatorFlags() { - return creatorDefaultFlags.entrySet(); + return creatorDefaultFlags.entrySet(); } public Set>> getDefaultGroupFlags() { - return groupDefaultFlags.entrySet(); + return groupDefaultFlags.entrySet(); } public boolean canCreateResidences() { - return cancreate; + return cancreate; } public boolean hasFlagAccess(String flag) { - return flagPerms.has(flag, false); + return flagPerms.has(flag, false); } public boolean inLimits(CuboidArea area) { - if (area.getXSize() > xmax || area.getYSize() > ymax || area.getZSize() > zmax) { - return false; - } - return true; + if (area.getXSize() > xmax || area.getYSize() > ymax || area.getZSize() > zmax) { + return false; + } + return true; } public boolean selectCommandAccess() { - return selectCommandAccess; + return selectCommandAccess; } public boolean itemListAccess() { - return itemListAccess; + return itemListAccess; } public void printLimits(Player player) { - player.sendMessage(ChatColor.GRAY + "---------------------------"); - player.sendMessage(ChatColor.YELLOW + "Permissions Group:" + ChatColor.DARK_AQUA + " " + Residence.getPermissionManager().getPermissionsGroup(player)); - player.sendMessage(ChatColor.YELLOW + "Residence Group:" + ChatColor.DARK_AQUA + " " + groupname); - player.sendMessage(ChatColor.YELLOW + "Residence Admin:" + ChatColor.DARK_AQUA + " " + Residence.getPermissionManager().isResidenceAdmin(player)); - player.sendMessage(ChatColor.YELLOW + "Can Create Residences:" + ChatColor.DARK_AQUA + " " + cancreate); - player.sendMessage(ChatColor.YELLOW + "Max Residences:" + ChatColor.DARK_AQUA + " " + resmax); - player.sendMessage(ChatColor.YELLOW + "Max East/West Size:" + ChatColor.DARK_AQUA + " " + xmax); - player.sendMessage(ChatColor.YELLOW + "Max North/South Size:" + ChatColor.DARK_AQUA + " " + zmax); - player.sendMessage(ChatColor.YELLOW + "Max Up/Down Size:" + ChatColor.DARK_AQUA + " " + ymax); - player.sendMessage(ChatColor.YELLOW + "Min/Max Protection Height:" + ChatColor.DARK_AQUA + " " + minHeight + " to " + maxHeight); - player.sendMessage(ChatColor.YELLOW + "Max Subzone Depth:" + ChatColor.DARK_AQUA + " " + subzonedepth); - player.sendMessage(ChatColor.YELLOW + "Can Set Enter/Leave Messages:" + ChatColor.DARK_AQUA + " " + messageperms); - player.sendMessage(ChatColor.YELLOW + "Number of Residences you own:" + ChatColor.DARK_AQUA + " " + Residence.getResidenceManager().getOwnedZoneCount(player.getName())); - if (Residence.getEconomyManager() != null) { - player.sendMessage(ChatColor.YELLOW + "Residence Cost Per Block:" + ChatColor.DARK_AQUA + " " + costperarea); - } - player.sendMessage(ChatColor.YELLOW + "Flag Permissions:" + ChatColor.DARK_AQUA + " " + flagPerms.listFlags()); - if (Residence.getConfigManager().useLeases()) { - player.sendMessage(ChatColor.YELLOW + "Max Lease Days:" + ChatColor.DARK_AQUA + " " + maxLeaseTime); - player.sendMessage(ChatColor.YELLOW + "Lease Time Given on Renew:" + ChatColor.DARK_AQUA + " " + leaseGiveTime); - player.sendMessage(ChatColor.YELLOW + "Renew Cost Per Block:" + ChatColor.DARK_AQUA + " " + renewcostperarea); - } - player.sendMessage(ChatColor.GRAY + "---------------------------"); + player.sendMessage(ChatColor.GRAY + Residence.getLanguage().getPhrase("LimitsTop")); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsPGroup", Residence.getPermissionManager().getPermissionsGroup(player))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsRGroup", groupname)); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsAdmin", String.valueOf(Residence.getPermissionManager().isResidenceAdmin( + player)))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsCanCreate", String.valueOf(cancreate))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxRes", String.valueOf(resmax))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxEW", String.valueOf(xmax))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxNS", String.valueOf(zmax))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxUD", String.valueOf(ymax))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMinMax", String.valueOf(minHeight) + "." + String.valueOf(maxHeight))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxSub", String.valueOf(subzonedepth))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsEnterLeave", String.valueOf(messageperms))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsNumberOwn", String.valueOf(Residence.getResidenceManager().getOwnedZoneCount(player + .getName())))); + if (Residence.getEconomyManager() != null) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsCost", String.valueOf(costperarea).replace(".", ","))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsSell", String.valueOf(sellperarea).replace(".", ","))); + } + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", flagPerms.listFlags())); + if (Residence.getConfigManager().useLeases()) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", String.valueOf(maxLeaseTime).replace(".", ","))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", String.valueOf(leaseGiveTime).replace(".", ","))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", String.valueOf(renewcostperarea).replace(".", ","))); + } + player.sendMessage(ChatColor.GRAY + Residence.getLanguage().getPhrase("LimitsBottom")); } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index db7c1ee20..614eaa62f 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -29,12 +29,12 @@ public class PermissionManager { protected Map playersGroup; protected FlagPermissions globalFlagPerms; - public PermissionManager(FileConfiguration config) { + public PermissionManager(FileConfiguration config, FileConfiguration flags) { try { groups = Collections.synchronizedMap(new HashMap()); playersGroup = Collections.synchronizedMap(new HashMap()); globalFlagPerms = new FlagPermissions(); - this.readConfig(config); + this.readConfig(config, flags); boolean enable = config.getBoolean("Global.EnablePermissions", true); if (enable) { this.checkPermissions(); @@ -143,9 +143,9 @@ private void checkPermissions() { Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Permissions plugin NOT FOUND!"); } - private void readConfig(FileConfiguration config) { + private void readConfig(FileConfiguration config, FileConfiguration flags) { String defaultGroup = Residence.getConfigManager().getDefaultGroup(); - globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", config.getConfigurationSection("Global")); + globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", flags.getConfigurationSection("Global")); ConfigurationSection nodes = config.getConfigurationSection("Groups"); if (nodes != null) { Set entrys = nodes.getKeys(false); diff --git a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java index 38b144b66..08377f929 100644 --- a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java +++ b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java @@ -50,6 +50,7 @@ public void save() throws IOException osw.close(); } + @SuppressWarnings("unchecked") public void load() throws IOException { FileInputStream fis = new FileInputStream(f); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index f413f42e7..62eba2407 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -5,8 +5,10 @@ package com.bekvon.bukkit.residence.protection; import org.bukkit.ChatColor; +import org.bukkit.GameMode; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.economy.ResidenceBank; import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.event.ResidenceTPEvent; @@ -14,6 +16,8 @@ import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.Debug; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -24,6 +28,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.block.Block; import org.bukkit.entity.Player; /** @@ -38,6 +43,7 @@ public class ClaimedResidence { protected Map subzones; protected ResidencePermissions perms; protected ResidenceBank bank; + protected Double BlockSellPrice = 0.0; protected Location tpLoc; protected String enterMessage; protected String leaveMessage; @@ -45,914 +51,1072 @@ public class ClaimedResidence { protected ResidenceItemList blacklist; private ClaimedResidence() { - subzones = new HashMap<>(); - areas = new HashMap<>(); - bank = new ResidenceBank(this); - blacklist = new ResidenceItemList(this, ListType.BLACKLIST); - ignorelist = new ResidenceItemList(this, ListType.IGNORELIST); + subzones = new HashMap<>(); + areas = new HashMap<>(); + bank = new ResidenceBank(this); + blacklist = new ResidenceItemList(this, ListType.BLACKLIST); + ignorelist = new ResidenceItemList(this, ListType.IGNORELIST); } public ClaimedResidence(String creationWorld) { - this("Server Land", creationWorld); + this("Server Land", creationWorld); } public ClaimedResidence(String creator, String creationWorld) { - this(); - perms = new ResidencePermissions(this, creator, creationWorld); + this(); + perms = new ResidencePermissions(this, creator, creationWorld); } public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence) { - this(creator, creationWorld); - parent = parentResidence; + this(creator, creationWorld); + parent = parentResidence; } public boolean addArea(CuboidArea area, String name) { - return addArea(null, area, name, true); + return addArea(null, area, name, true); + } + + public static boolean CheckAreaSize(Player player, CuboidArea area, boolean resadmin) { + if (!resadmin && area.getSize() < Residence.getConfigManager().getMinimalResSize()) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallTotal", String.valueOf(Residence.getConfigManager() + .getMinimalResSize()))); + } + return false; + } + + if (!resadmin && area.getXSize() < Residence.getConfigManager().getMinimalResX()) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallX", String.valueOf(area.getXSize()) + "." + String.valueOf(Residence + .getConfigManager().getMinimalResX()))); + } + return false; + } + if (!resadmin && area.getYSize() < Residence.getConfigManager().getMinimalResY()) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallY", String.valueOf(area.getYSize()) + "." + String.valueOf(Residence + .getConfigManager().getMinimalResY()))); + } + return false; + } + if (!resadmin && area.getZSize() < Residence.getConfigManager().getMinimalResZ()) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallZ", String.valueOf(area.getZSize()) + "." + String.valueOf(Residence + .getConfigManager().getMinimalResZ()))); + } + return false; + } + return true; } public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin) { - if (!Residence.validName(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); - } - return false; - } - if (areas.containsKey(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaExists")); - } - return false; - } - if (!resadmin && Residence.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { - boolean inside = false; - for (CuboidArea are: areas.values()) { - if (are.isAreaWithinArea(area)) { - inside = true; - } - } - if (!inside) { - return false; - } - } - if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaDiffWorld")); - } - return false; - } - if (parent == null) { - String collideResidence = Residence.getResidenceManager().checkAreaCollision(area, this); - if (collideResidence != null) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence)); - } - return false; - } - } else { - String[] szs = parent.listSubzones(); - for (String sz : szs) { - ClaimedResidence res = parent.getSubzone(sz); - if (res != null && res != this) { - if (res.checkCollision(area)) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz)); - } - return false; - } - } - } - } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return false; - } - if (parent != null) { - if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNotWithinParent")); - return false; - } - if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ParentNoPermission")); - return false; - } - } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (!group.canCreateResidences() && !player.hasPermission("residence.create")) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return false; - } - if (areas.size() >= group.getMaxPhysicalPerResidence()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaMaxPhysical")); - return false; - } - if (!group.inLimits(area)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSizeLimit")); - return false; - } - if (group.getMinHeight() > area.getLowLoc().getBlockY()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); - return false; - } - if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); - return false; - } - if (parent == null && Residence.getConfigManager().enableEconomy()) { - int chargeamount = (int) Math.ceil((double) area.getSize() * group.getCostPerBlock()); - if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) { - return false; - } - } - } - Residence.getResidenceManager().removeChunkList(getName()); - areas.put(name, area); - Residence.getResidenceManager().calculateChunks(getName()); - if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaCreate", ChatColor.YELLOW + name)); - } - return true; + if (!Residence.validName(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + } + return false; + } + if (areas.containsKey(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaExists")); + } + return false; + } + + if (!CheckAreaSize(player, area, resadmin)) + return false; + + if (!resadmin && Residence.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { + boolean inside = false; + for (CuboidArea are : areas.values()) { + if (are.isAreaWithinArea(area)) { + inside = true; + } + } + if (!inside) { + return false; + } + } + if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaDiffWorld")); + } + return false; + } + if (parent == null) { + String collideResidence = Residence.getResidenceManager().checkAreaCollision(area, this); + if (collideResidence != null) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence)); + CuboidArea oldArea = Residence.getResidenceManager().getByName(collideResidence).getAreaArray()[0]; + if (oldArea != null) { + Residence.getSelectionManager().NewMakeBorders(player, oldArea.lowPoints, oldArea.highPoints, true); + + Residence.getSelectionManager().NewMakeBorders(player, area.lowPoints, area.highPoints, false); + } + } + return false; + } + } else { + String[] szs = parent.listSubzones(); + for (String sz : szs) { + ClaimedResidence res = parent.getSubzone(sz); + if (res != null && res != this) { + if (res.checkCollision(area)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz)); + } + return false; + } + } + } + } + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + if (parent != null) { + if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNotWithinParent")); + return false; + } + if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ParentNoPermission")); + return false; + } + } + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (!group.canCreateResidences() && !player.hasPermission("residence.create")) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + if (areas.size() >= group.getMaxPhysicalPerResidence()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaMaxPhysical")); + return false; + } + if (!group.inLimits(area)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSizeLimit")); + return false; + } + if (group.getMinHeight() > area.getLowLoc().getBlockY()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); + return false; + } + if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); + return false; + } + if (parent == null && Residence.getConfigManager().enableEconomy()) { + int chargeamount = (int) Math.ceil((double) area.getSize() * group.getCostPerBlock()); + if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) { + return false; + } + } + } + Residence.getResidenceManager().removeChunkList(getName()); + areas.put(name, area); + Residence.getResidenceManager().calculateChunks(getName()); + if (player != null) { + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaCreate", ChatColor.YELLOW + name)); + } + return true; } public boolean replaceArea(CuboidArea neware, String name) { - return this.replaceArea(null, neware, name, true); + return this.replaceArea(null, neware, name, true); } public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { - if (!areas.containsKey(name)) { - if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); - return false; - } - CuboidArea oldarea = areas.get(name); - if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { - if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaDiffWorld")); - return false; - } - if (parent == null) { - String collideResidence = Residence.getResidenceManager().checkAreaCollision(newarea, this); - if (collideResidence != null) { - if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence)); - return false; - } - } else { - String[] szs = parent.listSubzones(); - for (String sz : szs) { - ClaimedResidence res = parent.getSubzone(sz); - if (res != null && res != this) { - if (res.checkCollision(newarea)) { - if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz)); - return false; - } - } - } - } - //Remove subzones that are not in the area anymore - String[] szs = listSubzones(); - for (String sz : szs) { - ClaimedResidence res = getSubzone(sz); - if (res != null && res != this) { - String[] szareas = res.getAreaList(); - for (String area: szareas) { - if (!newarea.isAreaWithinArea(res.getArea(area))) { - boolean good = false; - for (CuboidArea arae: getAreaArray()) { - if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { - good = true; - } - } - if (!good) { - res.removeArea(area); - } - } - } - if (res.getAreaArray().length == 0) { - removeSubzone(sz); - } - } - } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return false; - } - if (parent != null) { - if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNotWithinParent")); - return false; - } - if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ParentNoPermission")); - return false; - } - } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (!group.canCreateResidences() && !player.hasPermission("residence.create")) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return false; - } - if (!group.inLimits(newarea)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSizeLimit")); - return false; - } - if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); - return false; - } - if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); - return false; - } - if (parent == null && Residence.getConfigManager().enableEconomy()) { - int chargeamount = (int) Math.ceil((double) (newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); - if (chargeamount > 0) { - if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) { - return false; - } - } - } - - } - Residence.getResidenceManager().removeChunkList(getName()); - areas.remove(name); - areas.put(name, newarea); - Residence.getResidenceManager().calculateChunks(getName()); - if(player!=null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaUpdate")); - return true; + if (!areas.containsKey(name)) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); + return false; + } + CuboidArea oldarea = areas.get(name); + if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaDiffWorld")); + return false; + } + if (parent == null) { + String collideResidence = Residence.getResidenceManager().checkAreaCollision(newarea, this); + if (collideResidence != null && player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence)); + CuboidArea area = Residence.getResidenceManager().getByName(collideResidence).getAreaArray()[0]; + Residence.getSelectionManager().NewMakeBorders(player, area.getLowLoc(), area.highPoints, true); + return false; + } + } else { + String[] szs = parent.listSubzones(); + for (String sz : szs) { + ClaimedResidence res = parent.getSubzone(sz); + if (res != null && res != this) { + if (res.checkCollision(newarea)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz)); + Residence.getSelectionManager().NewMakeBorders(player, res.getAreaArray()[0].lowPoints, res.getAreaArray()[0].highPoints, true); + } + return false; + } + } + } + } + // Remove subzones that are not in the area anymore + String[] szs = listSubzones(); + for (String sz : szs) { + ClaimedResidence res = getSubzone(sz); + if (res == null || res == this) + continue; + String[] szareas = res.getAreaList(); + for (String area : szareas) { + if (newarea.isAreaWithinArea(res.getArea(area))) + continue; + + boolean good = false; + for (CuboidArea arae : getAreaArray()) { + if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { + good = true; + } + } + if (!good) { + res.removeArea(area); + } + + } + if (res.getAreaArray().length == 0) { + removeSubzone(sz); + } + + } + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + if (parent != null) { + if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNotWithinParent")); + return false; + } + if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ParentNoPermission")); + return false; + } + } + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (!group.canCreateResidences() && !player.hasPermission("residence.create")) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + if (!group.inLimits(newarea)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSizeLimit")); + return false; + } + if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); + return false; + } + if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); + return false; + } + if (parent == null && Residence.getConfigManager().enableEconomy()) { + int chargeamount = (int) Math.ceil((double) (newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); + if (chargeamount > 0) { + if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) { + return false; + } + } + } + + } + Residence.getResidenceManager().removeChunkList(getName()); + areas.remove(name); + areas.put(name, newarea); + Residence.getResidenceManager().calculateChunks(getName()); + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaUpdate")); + return true; } public boolean addSubzone(String name, Location loc1, Location loc2) { - return this.addSubzone(null, loc1, loc2, name, true); + return this.addSubzone(null, loc1, loc2, name, true); } public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { - if (player == null) { - return this.addSubzone(null, "Server Land", loc1, loc2, name, resadmin); - } else { - return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); - } + if (player == null) { + return this.addSubzone(null, "Server Land", loc1, loc2, name, resadmin); + } else { + return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); + } } public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { - if (!Residence.validName(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); - } - return false; - } - if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneSelectInside")); - } - return false; - } - if (subzones.containsKey(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + name)); - } - return false; - } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - if (!this.perms.playerHas(player.getName(), "subzone", this.perms.playerHas(player.getName(), "admin", false))) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return false; - } - } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (this.getZoneDepth() >= group.getMaxSubzoneDepth()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneMaxDepth")); - return false; - } - } - CuboidArea newArea = new CuboidArea(loc1, loc2); - Set> set = subzones.entrySet(); - for (Entry resEntry : set) { - ClaimedResidence res = resEntry.getValue(); - if (res.checkCollision(newArea)) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneCollide", ChatColor.YELLOW + resEntry.getKey())); - } - return false; - } - } - ClaimedResidence newres; - if (player != null) { - newres = new ClaimedResidence(owner, perms.getWorld(), this); - newres.addArea(player, newArea, name, resadmin); - } else { - newres = new ClaimedResidence(owner, perms.getWorld(), this); - newres.addArea(newArea, name); - } - if (newres.getAreaCount() != 0) { - newres.getPermissions().applyDefaultFlags(); - if (player != null) { - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - newres.setEnterMessage(group.getDefaultEnterMessage()); - newres.setLeaveMessage(group.getDefaultLeaveMessage()); - } - if (Residence.getConfigManager().flagsInherit()) { - newres.getPermissions().setParent(perms); - } - subzones.put(name, newres); - if (player != null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneCreate", ChatColor.YELLOW + name)); - return true; - } else { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneCreateFail", ChatColor.YELLOW + name)); - } - return false; - } + if (!Residence.validName(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + } + return false; + } + if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneSelectInside")); + } + return false; + } + if (subzones.containsKey(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + name)); + } + return false; + } + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + if (!this.perms.playerHas(player.getName(), "subzone", this.perms.playerHas(player.getName(), "admin", false))) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + } + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (this.getZoneDepth() >= group.getMaxSubzoneDepth()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneMaxDepth")); + return false; + } + } + CuboidArea newArea = new CuboidArea(loc1, loc2); + Set> set = subzones.entrySet(); + for (Entry resEntry : set) { + ClaimedResidence res = resEntry.getValue(); + if (res.checkCollision(newArea)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneCollide", ChatColor.YELLOW + resEntry.getKey())); + if (res.getAreaArray().length > 0) { + CuboidArea oldArea = res.getAreaArray()[0]; + Residence.getSelectionManager().NewMakeBorders(player, oldArea.lowPoints, oldArea.highPoints, true); + Residence.getSelectionManager().NewMakeBorders(player, newArea.lowPoints, newArea.highPoints, false); + } + + } + return false; + } + } + ClaimedResidence newres; + if (player != null) { + newres = new ClaimedResidence(owner, perms.getWorld(), this); + newres.addArea(player, newArea, name, resadmin); + } else { + newres = new ClaimedResidence(owner, perms.getWorld(), this); + newres.addArea(newArea, name); + } + if (newres.getAreaCount() != 0) { + newres.getPermissions().applyDefaultFlags(); + if (player != null) { + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + newres.setEnterMessage(group.getDefaultEnterMessage()); + newres.setLeaveMessage(group.getDefaultLeaveMessage()); + } + if (Residence.getConfigManager().flagsInherit()) { + newres.getPermissions().setParent(perms); + } + subzones.put(name, newres); + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneCreate", ChatColor.YELLOW + name)); + return true; + } else { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneCreateFail", ChatColor.YELLOW + name)); + } + return false; + } } public String getSubzoneNameByLoc(Location loc) { - Set> set = subzones.entrySet(); - ClaimedResidence res = null; - String key = null; - for (Entry entry : set) { - if (entry.getValue().containsLoc(loc)) { - key = entry.getKey(); - res = entry.getValue(); - break; - } - } - if (key == null || res == null) - return null; - - String subname = res.getSubzoneNameByLoc(loc); - if (subname != null) { - return key + "." + subname; - } - return key; + Set> set = subzones.entrySet(); + ClaimedResidence res = null; + String key = null; + for (Entry entry : set) { + if (entry.getValue().containsLoc(loc)) { + key = entry.getKey(); + res = entry.getValue(); + break; + } + } + if (key == null || res == null) + return null; + + String subname = res.getSubzoneNameByLoc(loc); + if (subname != null) { + return key + "." + subname; + } + return key; } public ClaimedResidence getSubzoneByLoc(Location loc) { - Set> set = subzones.entrySet(); - ClaimedResidence res = null; - for (Entry entry : set) { - if (entry.getValue().containsLoc(loc)) { - res = entry.getValue(); - break; - } - } - if (res==null) - return null; - - ClaimedResidence subrez = res.getSubzoneByLoc(loc); - if (subrez == null) { - return res; - } - return subrez; + Set> set = subzones.entrySet(); + ClaimedResidence res = null; + for (Entry entry : set) { + if (entry.getValue().containsLoc(loc)) { + res = entry.getValue(); + break; + } + } + if (res == null) + return null; + + ClaimedResidence subrez = res.getSubzoneByLoc(loc); + if (subrez == null) { + return res; + } + return subrez; } public ClaimedResidence getSubzone(String subzonename) { - if (!subzonename.contains(".")) { - return subzones.get(subzonename); - } - String split[] = subzonename.split("\\."); - ClaimedResidence get = subzones.get(split[0]); - for (int i = 1; i < split.length; i++) { - if (get == null) { - return null; - } - get = get.getSubzone(split[i]); - } - return get; + if (!subzonename.contains(".")) { + return subzones.get(subzonename); + } + String split[] = subzonename.split("\\."); + ClaimedResidence get = subzones.get(split[0]); + for (int i = 1; i < split.length; i++) { + if (get == null) { + return null; + } + get = get.getSubzone(split[i]); + } + return get; } public String getSubzoneNameByRes(ClaimedResidence res) { - Set> set = subzones.entrySet(); - for (Entry entry : set) { - if (entry.getValue() == res) { - return entry.getKey(); - } - String n = entry.getValue().getSubzoneNameByRes(res); - if (n != null) { - return entry.getKey() + "." + n; - } - } - return null; + Set> set = subzones.entrySet(); + for (Entry entry : set) { + if (entry.getValue() == res) { + return entry.getKey(); + } + String n = entry.getValue().getSubzoneNameByRes(res); + if (n != null) { + return entry.getKey() + "." + n; + } + } + return null; } public String[] getSubzoneList() { - ArrayList zones = new ArrayList<>(); - Set set = subzones.keySet(); - for (String key : set) { - if (key != null) { - zones.add(key); - } - } - return zones.toArray(new String[zones.size()]); + ArrayList zones = new ArrayList<>(); + Set set = subzones.keySet(); + for (String key : set) { + if (key != null) { + zones.add(key); + } + } + return zones.toArray(new String[zones.size()]); } public boolean checkCollision(CuboidArea area) { - Set set = areas.keySet(); - for (String key : set) { - CuboidArea checkarea = areas.get(key); - if (checkarea != null) { - if (checkarea.checkCollision(area)) { - return true; - } - } - } - return false; + Set set = areas.keySet(); + for (String key : set) { + CuboidArea checkarea = areas.get(key); + if (checkarea != null) { + if (checkarea.checkCollision(area)) { + return true; + } + } + } + return false; } public boolean containsLoc(Location loc) { - Collection keys = areas.values(); - for (CuboidArea key : keys) { - if (key.containsLoc(loc)) { - if (parent != null) - return parent.containsLoc(loc); - return true; - } - } - return false; + Collection keys = areas.values(); + for (CuboidArea key : keys) { + if (key.containsLoc(loc)) { + if (parent != null) + return parent.containsLoc(loc); + return true; + } + } + return false; } public ClaimedResidence getParent() { - return parent; + return parent; } public ClaimedResidence getTopParent() { - if (parent == null) - return this; - return parent.getTopParent(); + if (parent == null) + return this; + return parent.getTopParent(); } public boolean removeSubzone(String name) { - return this.removeSubzone(null, name, true); + return this.removeSubzone(null, name, true); } public boolean removeSubzone(Player player, String name, boolean resadmin) { - ClaimedResidence res = subzones.get(name); - if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return false; - } - subzones.remove(name); - if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); - } - return true; + ClaimedResidence res = subzones.get(name); + if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + subzones.remove(name); + if (player != null) { + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); + } + return true; } public long getTotalSize() { - Collection set = areas.values(); - long size = 0; - for (CuboidArea entry : set) { - size = size + entry.getSize(); - } - return size; + Collection set = areas.values(); + long size = 0; + for (CuboidArea entry : set) { + size = size + entry.getSize(); + } + return size; } public CuboidArea[] getAreaArray() { - CuboidArea[] temp = new CuboidArea[areas.size()]; - int i = 0; - for (CuboidArea area : areas.values()) { - temp[i] = area; - i++; - } - return temp; + CuboidArea[] temp = new CuboidArea[areas.size()]; + int i = 0; + for (CuboidArea area : areas.values()) { + temp[i] = area; + i++; + } + return temp; } public ResidencePermissions getPermissions() { - return perms; + return perms; } public String getEnterMessage() { - return enterMessage; + return enterMessage; } public String getLeaveMessage() { - return leaveMessage; + return leaveMessage; } public void setEnterMessage(String message) { - enterMessage = message; + enterMessage = message; } public void setLeaveMessage(String message) { - leaveMessage = message; + leaveMessage = message; } public void setEnterLeaveMessage(Player player, String message, boolean enter, boolean resadmin) { - // if(message!=null && - // Residence.getConfigManager().getResidenceNameRegex() != null) { - // Removed pending further action - // player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidCharacters")); - // return; - // } - if (message != null) { - if (message.equals("")) { - message = null; - } - } - PermissionGroup group = Residence.getPermissionManager().getGroup(perms.getOwner(), perms.getWorld()); - if (!group.canSetEnterLeaveMessages() && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerNoPermission")); - return; - } - if (!perms.hasResidencePermission(player, false) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - if (enter) { - this.setEnterMessage(message); - } else { - this.setLeaveMessage(message); - } - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MessageChange")); + // if(message!=null && + // Residence.getConfigManager().getResidenceNameRegex() != null) { + // Removed pending further action + // player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidCharacters")); + // return; + // } + if (message != null) { + if (message.equals("")) { + message = null; + } + } + PermissionGroup group = Residence.getPermissionManager().getGroup(perms.getOwner(), perms.getWorld()); + if (!group.canSetEnterLeaveMessages() && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerNoPermission")); + return; + } + if (!perms.hasResidencePermission(player, false) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + if (enter) { + this.setEnterMessage(message); + } else { + this.setLeaveMessage(message); + } + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MessageChange")); } + @SuppressWarnings("deprecation") public Location getOutsideFreeLoc(Location insideLoc) { - int maxIt = 100; - CuboidArea area = this.getAreaByLoc(insideLoc); - if (area == null) { - return insideLoc; - } - Location highLoc = area.getHighLoc(); - Location newLoc = new Location(highLoc.getWorld(), highLoc.getBlockX(), highLoc.getBlockY(), highLoc.getBlockZ()); - boolean found = false; - int it = 0; - while (!found && it < maxIt) { - it++; - Location lowLoc; - newLoc.setX(newLoc.getBlockX() + 1); - newLoc.setZ(newLoc.getBlockZ() + 1); - lowLoc = new Location(newLoc.getWorld(), newLoc.getBlockX(), 254, newLoc.getBlockZ()); - newLoc.setY(255); - while ((newLoc.getBlock().getTypeId() != 0 || lowLoc.getBlock().getTypeId() == 0) && lowLoc.getBlockY() > -126) { - newLoc.setY(newLoc.getY() - 1); - lowLoc.setY(lowLoc.getY() - 1); - } - if (newLoc.getBlock().getTypeId() == 0 && lowLoc.getBlock().getTypeId() != 0) { - found = true; - } - } - if (found) { - return newLoc; - } else { - World world = Residence.getServ().getWorld(perms.getWorld()); - if (world != null) { - return world.getSpawnLocation(); - } - return insideLoc; - } + int maxIt = 100; + CuboidArea area = this.getAreaByLoc(insideLoc); + if (area == null) { + return insideLoc; + } + Location highLoc = area.getHighLoc(); + Location newLoc = new Location(highLoc.getWorld(), highLoc.getBlockX(), highLoc.getBlockY(), highLoc.getBlockZ()); + boolean found = false; + int it = 0; + while (!found && it < maxIt) { + it++; + Location lowLoc; + newLoc.setX(newLoc.getBlockX() + 1); + newLoc.setZ(newLoc.getBlockZ() + 1); + lowLoc = new Location(newLoc.getWorld(), newLoc.getBlockX(), 254, newLoc.getBlockZ()); + newLoc.setY(255); + while ((newLoc.getBlock().getTypeId() != 0 || lowLoc.getBlock().getTypeId() == 0) && lowLoc.getBlockY() > -126) { + newLoc.setY(newLoc.getY() - 1); + lowLoc.setY(lowLoc.getY() - 1); + } + if (newLoc.getBlock().getTypeId() == 0 && lowLoc.getBlock().getTypeId() != 0) { + found = true; + } + } + if (found) { + return newLoc; + } else { + World world = Residence.getServ().getWorld(perms.getWorld()); + if (world != null) { + return world.getSpawnLocation(); + } + return insideLoc; + } } protected CuboidArea getAreaByLoc(Location loc) { - for (CuboidArea thisarea : areas.values()) { - if (thisarea.containsLoc(loc)) { - return thisarea; - } - } - return null; + for (CuboidArea thisarea : areas.values()) { + if (thisarea.containsLoc(loc)) { + return thisarea; + } + } + return null; } public String[] listSubzones() { - String list[] = new String[subzones.size()]; - int i = 0; - for (String res : subzones.keySet()) { - list[i] = res; - i++; - } - return list; + String list[] = new String[subzones.size()]; + int i = 0; + for (String res : subzones.keySet()) { + list[i] = res; + i++; + } + return list; } public void printSubzoneList(Player player, int page) { - ArrayList temp = new ArrayList<>(); - for (Entry sz : subzones.entrySet()) { - temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("Owner") + ": " + sz.getValue().getOwner()); - } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Subzones"), temp, page); + ArrayList temp = new ArrayList<>(); + for (Entry sz : subzones.entrySet()) { + temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("Owner") + ": " + sz.getValue().getOwner()); + } + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Subzones"), temp, page); } public void printAreaList(Player player, int page) { - ArrayList temp = new ArrayList<>(); - for (String area : areas.keySet()) { - temp.add(area); - } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"), temp, page); + ArrayList temp = new ArrayList<>(); + for (String area : areas.keySet()) { + temp.add(area); + } + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"), temp, page); } public void printAdvancedAreaList(Player player, int page) { - ArrayList temp = new ArrayList<>(); - for (Entry entry : areas.entrySet()) { - CuboidArea a = entry.getValue(); - Location h = a.getHighLoc(); - Location l = a.getLowLoc(); - temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED + entry.getKey() + " " + ChatColor.YELLOW + "P1:" + ChatColor.RED + "(" + h.getBlockX() + "," + h.getBlockY() + "," + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); - } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"), temp, page); + ArrayList temp = new ArrayList<>(); + for (Entry entry : areas.entrySet()) { + CuboidArea a = entry.getValue(); + Location h = a.getHighLoc(); + Location l = a.getLowLoc(); + temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED + entry.getKey() + " " + ChatColor.YELLOW + "P1:" + ChatColor.RED + "(" + h + .getBlockX() + "," + h.getBlockY() + "," + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + l.getBlockY() + + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); + } + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"), temp, page); } public String[] getAreaList() { - String arealist[] = new String[areas.size()]; - int i = 0; - for (Entry entry : areas.entrySet()) { - arealist[i] = entry.getKey(); - i++; - } - return arealist; + String arealist[] = new String[areas.size()]; + int i = 0; + for (Entry entry : areas.entrySet()) { + arealist[i] = entry.getKey(); + i++; + } + return arealist; } public int getZoneDepth() { - int count = 0; - ClaimedResidence res = parent; - while (res != null) { - count++; - res = res.getParent(); - } - return count; + int count = 0; + ClaimedResidence res = parent; + while (res != null) { + count++; + res = res.getParent(); + } + return count; } public void setTpLoc(Player player, boolean resadmin) { - if (!this.perms.hasResidencePermission(player, false) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - if (!this.containsLoc(player.getLocation())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); - return; - } - tpLoc = player.getLocation(); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SetTeleportLocation")); - } - - public void tpToResidence(Player reqPlayer, Player targetPlayer, boolean resadmin) { - if (!resadmin) { - PermissionGroup group = Residence.getPermissionManager().getGroup(reqPlayer); - if (!group.hasTpAccess()) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny")); - return; - } - if (!reqPlayer.equals(targetPlayer)) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - if (!this.perms.playerHas(reqPlayer.getName(), "tp", true)) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportNoFlag")); - return; - } - } - if (tpLoc != null) { - ResidenceTPEvent tpevent = new ResidenceTPEvent(this, tpLoc, targetPlayer, reqPlayer); - Residence.getServ().getPluginManager().callEvent(tpevent); - if (!tpevent.isCancelled()) { - targetPlayer.teleport(tpLoc); - targetPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("TeleportSuccess")); - } - } else { - CuboidArea area = areas.values().iterator().next(); - if (area == null) { - reqPlayer.sendMessage(ChatColor.RED + "Could not find area to teleport to..."); - return; - } - Location targloc = this.getOutsideFreeLoc(area.getHighLoc()); - ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - Residence.getServ().getPluginManager().callEvent(tpevent); - if (!tpevent.isCancelled()) { - targetPlayer.teleport(targloc); - targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportNear")); - } - } + if (!this.perms.hasResidencePermission(player, false) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + if (!this.containsLoc(player.getLocation())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); + return; + } + tpLoc = player.getLocation(); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SetTeleportLocation")); + } + + public int isSafeTp(Player player) { + if (player.getAllowFlight()) + return 0; + + if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) + return 0; + + if (tpLoc == null) + return 0; + + Location tempLoc = new Location(tpLoc.getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()); + + int from = (int) tempLoc.getY(); + + int fallDistance = 0; + for (int i = 0; i < 255; i++) { + tempLoc.setY(from - i); + Block block = tempLoc.getBlock(); + if (isEmptyBlock(block)) { + fallDistance++; + } else { + break; + } + } + return fallDistance; + } + + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + return false; + } + + public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { + boolean isAdmin = Residence.isResAdminOn(reqPlayer); + if (!resadmin && !isAdmin) { + PermissionGroup group = Residence.getPermissionManager().getGroup(reqPlayer); + if (!group.hasTpAccess()) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny")); + return; + } + if (!reqPlayer.equals(targetPlayer)) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + if (!this.perms.playerHas(reqPlayer.getName(), "tp", true)) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportNoFlag")); + return; + } + if (!this.perms.playerHas(reqPlayer.getName(), "move", true)) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", this.getName())); + return; + } + } + + if (!ResidenceCommandListener.teleportMap.containsKey(targetPlayer.getName()) && !isAdmin) { + int distance = isSafeTp(reqPlayer); + if (distance > 6) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportConfirm", String.valueOf(distance))); + ResidenceCommandListener.teleportMap.put(reqPlayer.getName(), this); + return; + } + } + + if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin) { + reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("TeleportStarted", this.getName() + "." + Residence.getConfigManager() + .getTeleportDelay())); + ResidenceCommandListener.teleportDelayMap.add(reqPlayer.getName()); + } + + if (tpLoc != null) { + if (!isAdmin) + performDelaydTp(tpLoc, targetPlayer, reqPlayer, true); + else + performInstantTp(tpLoc, targetPlayer, reqPlayer, true); + } else { + CuboidArea area = areas.values().iterator().next(); + if (area == null) { + reqPlayer.sendMessage(ChatColor.RED + "Could not find area to teleport to..."); + ResidenceCommandListener.teleportDelayMap.remove(targetPlayer.getName()); + return; + } + final Location targloc = this.getOutsideFreeLoc(area.getHighLoc()); + if (!isAdmin) + performDelaydTp(targloc, targetPlayer, reqPlayer, true); + else + performInstantTp(targloc, targetPlayer, reqPlayer, true); + + } + } + + private void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { + ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); + Residence.getServ().getPluginManager().callEvent(tpevent); + if (!tpevent.isCancelled()) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + public void run() { + if (!ResidenceCommandListener.teleportDelayMap.contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) + return; + else if (ResidenceCommandListener.teleportDelayMap.contains(targetPlayer.getName())) + ResidenceCommandListener.teleportDelayMap.remove(targetPlayer.getName()); + else + return; + targetPlayer.teleport(targloc); + if (near) + targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportNear")); + else + targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportSuccess")); + return; + } + }, Residence.getConfigManager().getTeleportDelay() * 20L); + } + } + + private void performInstantTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { + ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); + Residence.getServ().getPluginManager().callEvent(tpevent); + if (!tpevent.isCancelled()) { + targetPlayer.teleport(targloc); + if (near) + targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportNear")); + else + targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportSuccess")); + + } } public String getAreaIDbyLoc(Location loc) { - for (Entry area : areas.entrySet()) { - if (area.getValue().containsLoc(loc)) - return area.getKey(); - } - return null; + for (Entry area : areas.entrySet()) { + if (area.getValue().containsLoc(loc)) + return area.getKey(); + } + return null; } public void removeArea(String id) { - Residence.getResidenceManager().removeChunkList(getName()); - areas.remove(id); - Residence.getResidenceManager().calculateChunks(getName()); + Residence.getResidenceManager().removeChunkList(getName()); + areas.remove(id); + Residence.getResidenceManager().calculateChunks(getName()); } public void removeArea(Player player, String id, boolean resadmin) { - if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { - if (!areas.containsKey(id)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); - return; - } - if (areas.size() == 1 && !Residence.getConfigManager().allowEmptyResidences()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaRemoveLast")); - return; - } - removeArea(id); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaRemove")); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } + if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { + if (!areas.containsKey(id)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); + return; + } + if (areas.size() == 1 && !Residence.getConfigManager().allowEmptyResidences()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaRemoveLast")); + return; + } + removeArea(id); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaRemove")); + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } } public Map save() { - Map root = new HashMap<>(); - Map areamap = new HashMap<>(); - root.put("EnterMessage", enterMessage); - root.put("LeaveMessage", leaveMessage); - root.put("StoredMoney", bank.getStoredMoney()); - root.put("BlackList", blacklist.save()); - root.put("IgnoreList", ignorelist.save()); - for (Entry entry : areas.entrySet()) - { - areamap.put(entry.getKey(), entry.getValue().save()); - } - root.put("Areas", areamap); - Map subzonemap = new HashMap<>(); - for (Entry sz : subzones.entrySet()) - { - subzonemap.put(sz.getKey(), sz.getValue().save()); - } - root.put("Subzones", subzonemap); - root.put("Permissions", perms.save()); - if (tpLoc != null) - { - Map tpmap = new HashMap<>(); - tpmap.put("X", tpLoc.getBlockX()); - tpmap.put("Y", tpLoc.getBlockY()); - tpmap.put("Z", tpLoc.getBlockZ()); - root.put("TPLoc", tpmap); - } - return root; + Map root = new HashMap<>(); + Map areamap = new HashMap<>(); + root.put("EnterMessage", enterMessage); + root.put("LeaveMessage", leaveMessage); + root.put("StoredMoney", bank.getStoredMoney()); + root.put("BlockSellPrice", BlockSellPrice); + root.put("BlackList", blacklist.save()); + root.put("IgnoreList", ignorelist.save()); + for (Entry entry : areas.entrySet()) { + areamap.put(entry.getKey(), entry.getValue().save()); + } + root.put("Areas", areamap); + Map subzonemap = new HashMap<>(); + for (Entry sz : subzones.entrySet()) { + subzonemap.put(sz.getKey(), sz.getValue().save()); + } + root.put("Subzones", subzonemap); + root.put("Permissions", perms.save()); + if (tpLoc != null) { + Map tpmap = new HashMap<>(); + tpmap.put("X", tpLoc.getBlockX()); + tpmap.put("Y", tpLoc.getBlockY()); + tpmap.put("Z", tpLoc.getBlockZ()); + root.put("TPLoc", tpmap); + } + return root; } + @SuppressWarnings("unchecked") public static ClaimedResidence load(Map root, ClaimedResidence parent) throws Exception { - ClaimedResidence res = new ClaimedResidence(); - if (root == null) - throw new Exception("Null residence!"); - res.enterMessage = (String) root.get("EnterMessage"); - res.leaveMessage = (String) root.get("LeaveMessage"); - if (root.containsKey("StoredMoney")) - res.bank.setStoredMoney((Integer) root.get("StoredMoney")); - if (root.containsKey("BlackList")) - res.blacklist = ResidenceItemList.load(res, (Map) root.get("BlackList")); - if (root.containsKey("IgnoreList")) - res.ignorelist = ResidenceItemList.load(res, (Map) root.get("IgnoreList")); - Map areamap = (Map) root.get("Areas"); - res.perms = ResidencePermissions.load(res, (Map) root.get("Permissions")); - World world = Residence.getServ().getWorld(res.perms.getWorld()); - if (world == null) - throw new Exception("Cant Find World: " + res.perms.getWorld()); - for (Entry map : areamap.entrySet()) { - res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); - } - Map subzonemap = (Map) root.get("Subzones"); - for (Entry map : subzonemap.entrySet()) { - ClaimedResidence subres = ClaimedResidence.load((Map) map.getValue(), res); - if (Residence.getConfigManager().flagsInherit()) - subres.getPermissions().setParent(res.getPermissions()); - res.subzones.put(map.getKey(), subres); - } - res.parent = parent; - Map tploc = (Map) root.get("TPLoc"); - if (tploc != null) { - res.tpLoc = new Location(world, (Integer) tploc.get("X"), (Integer) tploc.get("Y"), (Integer) tploc.get("Z")); - } - return res; - } - - public int getAreaCount() - { - return areas.size(); - } - - public boolean renameSubzone(String oldName, String newName) - { - return this.renameSubzone(null, oldName, newName, true); - } - - public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) - { - if (!Residence.validName(newName)) - { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); - return false; - } - ClaimedResidence res = subzones.get(oldName); - if (res == null) - { - if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidSubzone")); - return false; - } - if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) - { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return false; - } - if (subzones.containsKey(newName)) - { - if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + newName)); - return false; - } - subzones.put(newName, res); - subzones.remove(oldName); - if (player != null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneRename", oldName + "." + newName)); - return true; - } - - public boolean renameArea(String oldName, String newName) - { - return this.renameArea(null, oldName, newName, true); - } - - public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) - { - if (!Residence.validName(newName)) - { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); - return false; - } - if (player == null || perms.hasResidencePermission(player, true) || resadmin) - { - if (areas.containsKey(newName)) - { - if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaExists")); - return false; - } - CuboidArea area = areas.get(oldName); - if (area == null) - { - if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaInvalidName")); - return false; - } - areas.put(newName, area); - areas.remove(oldName); - if (player != null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaRename", oldName + "." + newName)); - return true; - } - else - { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return false; - } - } - - public CuboidArea getArea(String name) - { - return areas.get(name); + ClaimedResidence res = new ClaimedResidence(); + if (root == null) + throw new Exception("Null residence!"); + + res.enterMessage = (String) root.get("EnterMessage"); + res.leaveMessage = (String) root.get("LeaveMessage"); + if (root.containsKey("StoredMoney")) + res.bank.setStoredMoney((Integer) root.get("StoredMoney")); + + if (root.containsKey("BlackList")) + res.blacklist = ResidenceItemList.load(res, (Map) root.get("BlackList")); + if (root.containsKey("IgnoreList")) + res.ignorelist = ResidenceItemList.load(res, (Map) root.get("IgnoreList")); + + Map areamap = (Map) root.get("Areas"); + res.perms = ResidencePermissions.load(res, (Map) root.get("Permissions")); + + if (root.containsKey("BlockSellPrice")) + res.BlockSellPrice = (Double) root.get("BlockSellPrice"); + else { + PermissionGroup group = Residence.getPermissionManager().getGroup(res.getOwner(), res.getWorld()); + res.BlockSellPrice = group.getSellPerBlock(); + } + + World world = Residence.getServ().getWorld(res.perms.getWorld()); + if (world == null) + throw new Exception("Cant Find World: " + res.perms.getWorld()); + for (Entry map : areamap.entrySet()) { + res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); + } + + Map subzonemap = (Map) root.get("Subzones"); + for (Entry map : subzonemap.entrySet()) { + ClaimedResidence subres = ClaimedResidence.load((Map) map.getValue(), res); + if (Residence.getConfigManager().flagsInherit()) + subres.getPermissions().setParent(res.getPermissions()); + res.subzones.put(map.getKey(), subres); + } + + res.parent = parent; + Map tploc = (Map) root.get("TPLoc"); + if (tploc != null) { + res.tpLoc = new Location(world, (Integer) tploc.get("X"), (Integer) tploc.get("Y"), (Integer) tploc.get("Z")); + } + return res; + } + + public int getAreaCount() { + return areas.size(); + } + + public boolean renameSubzone(String oldName, String newName) { + return this.renameSubzone(null, oldName, newName, true); + } + + public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { + if (!Residence.validName(newName)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + return false; + } + ClaimedResidence res = subzones.get(oldName); + if (res == null) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidSubzone")); + return false; + } + if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + if (subzones.containsKey(newName)) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + newName)); + return false; + } + subzones.put(newName, res); + subzones.remove(oldName); + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneRename", oldName + "." + newName)); + return true; + } + + public boolean renameArea(String oldName, String newName) { + return this.renameArea(null, oldName, newName, true); + } + + public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { + if (!Residence.validName(newName)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + return false; + } + if (player == null || perms.hasResidencePermission(player, true) || resadmin) { + if (areas.containsKey(newName)) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaExists")); + return false; + } + CuboidArea area = areas.get(oldName); + if (area == null) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaInvalidName")); + return false; + } + areas.put(newName, area); + areas.remove(oldName); + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaRename", oldName + "." + newName)); + return true; + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + } + + public CuboidArea getArea(String name) { + return areas.get(name); } public String getName() { - return Residence.getResidenceManager().getNameByRes(this); + return Residence.getResidenceManager().getNameByRes(this); } public void remove() { - String name = getName(); - if (name != null) { - Residence.getResidenceManager().removeResidence(name); - Residence.getResidenceManager().removeChunkList(name); - } + String name = getName(); + if (name != null) { + Residence.getResidenceManager().removeResidence(name); + Residence.getResidenceManager().removeChunkList(name); + } + } + + public ResidenceBank getBank() { + return bank; } - public ResidenceBank getBank() - { - return bank; + public String getWorld() { + return perms.getWorld(); } - public String getWorld() - { - return perms.getWorld(); + public String getOwner() { + return perms.getOwner(); } - public String getOwner() - { - return perms.getOwner(); + public ResidenceItemList getItemBlacklist() { + return blacklist; } - public ResidenceItemList getItemBlacklist() - { - return blacklist; + public ResidenceItemList getItemIgnoreList() { + return ignorelist; } - public ResidenceItemList getItemIgnoreList() - { - return ignorelist; + public Double getBlockSellPrice() { + return BlockSellPrice; } public ArrayList getPlayersInResidence() { - ArrayList within = new ArrayList<>(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (this.containsLoc(player.getLocation())) { - within.add(player); - } - } - return within; + ArrayList within = new ArrayList<>(); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (this.containsLoc(player.getLocation())) { + within.add(player); + } + } + return within; } } diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index d360fe8de..f87496e56 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ResidenceManager.ChunkRef; +import com.bekvon.bukkit.residence.utils.Debug; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -27,188 +28,203 @@ public class CuboidArea { protected Location highPoints; protected Location lowPoints; + protected String worldName; protected CuboidArea() { } public CuboidArea(Location startLoc, Location endLoc) { - int highx, highy, highz, lowx, lowy, lowz; - if (startLoc.getBlockX() > endLoc.getBlockX()) { - highx = startLoc.getBlockX(); - lowx = endLoc.getBlockX(); - } else { - highx = endLoc.getBlockX(); - lowx = startLoc.getBlockX(); - } - if (startLoc.getBlockY() > endLoc.getBlockY()) { - highy = startLoc.getBlockY(); - lowy = endLoc.getBlockY(); - } else { - highy = endLoc.getBlockY(); - lowy = startLoc.getBlockY(); - } - if (startLoc.getBlockZ() > endLoc.getBlockZ()) { - highz = startLoc.getBlockZ(); - lowz = endLoc.getBlockZ(); - } else { - highz = endLoc.getBlockZ(); - lowz = startLoc.getBlockZ(); - } - highPoints = new Location(startLoc.getWorld(), highx, highy, highz); - lowPoints = new Location(startLoc.getWorld(), lowx, lowy, lowz); + int highx, highy, highz, lowx, lowy, lowz; + if (startLoc.getBlockX() > endLoc.getBlockX()) { + highx = startLoc.getBlockX(); + lowx = endLoc.getBlockX(); + } else { + highx = endLoc.getBlockX(); + lowx = startLoc.getBlockX(); + } + if (startLoc.getBlockY() > endLoc.getBlockY()) { + highy = startLoc.getBlockY(); + lowy = endLoc.getBlockY(); + } else { + highy = endLoc.getBlockY(); + lowy = startLoc.getBlockY(); + } + if (startLoc.getBlockZ() > endLoc.getBlockZ()) { + highz = startLoc.getBlockZ(); + lowz = endLoc.getBlockZ(); + } else { + highz = endLoc.getBlockZ(); + lowz = startLoc.getBlockZ(); + } + highPoints = new Location(startLoc.getWorld(), highx, highy, highz); + lowPoints = new Location(startLoc.getWorld(), lowx, lowy, lowz); + worldName = startLoc.getWorld().getName(); } public boolean isAreaWithinArea(CuboidArea area) { - return (this.containsLoc(area.highPoints) && this.containsLoc(area.lowPoints)); + return (this.containsLoc(area.highPoints) && this.containsLoc(area.lowPoints)); } public boolean containsLoc(Location loc) { - if (loc == null) { - return false; - } - if (!loc.getWorld().equals(highPoints.getWorld())) { - return false; - } - if (lowPoints.getBlockX() <= loc.getBlockX() && highPoints.getBlockX() >= loc.getBlockX()) { - if (lowPoints.getBlockZ() <= loc.getBlockZ() && highPoints.getBlockZ() >= loc.getBlockZ()) { - if (lowPoints.getBlockY() <= loc.getBlockY() && highPoints.getBlockY() >= loc.getBlockY()) { - return true; - } - } - } - return false; + if (loc == null) + return false; + + if (!loc.getWorld().getName().equals(worldName)) + return false; + + if (lowPoints.getBlockX() > loc.getBlockX()) + return false; + + if (highPoints.getBlockX() < loc.getBlockX()) + return false; + + if (lowPoints.getBlockZ() > loc.getBlockZ()) + return false; + + if (highPoints.getBlockZ() < loc.getBlockZ()) + return false; + + if (lowPoints.getBlockY() > loc.getBlockY()) + return false; + + if (highPoints.getBlockY() < loc.getBlockY()) + return false; + + return true; } public boolean checkCollision(CuboidArea area) { - if (!area.getWorld().equals(this.getWorld())) { - return false; - } - if (area.containsLoc(lowPoints) || area.containsLoc(highPoints) || this.containsLoc(area.highPoints) || this.containsLoc(area.lowPoints)) { - return true; - } - return advCuboidCheckCollision(highPoints, lowPoints, area.highPoints, area.lowPoints); + if (!area.getWorld().equals(this.getWorld())) { + return false; + } + if (area.containsLoc(lowPoints) || area.containsLoc(highPoints) || this.containsLoc(area.highPoints) || this.containsLoc(area.lowPoints)) { + return true; + } + return advCuboidCheckCollision(highPoints, lowPoints, area.highPoints, area.lowPoints); } private boolean advCuboidCheckCollision(Location A1High, Location A1Low, Location A2High, Location A2Low) { - int A1HX = A1High.getBlockX(); - int A1LX = A1Low.getBlockX(); - int A1HY = A1High.getBlockY(); - int A1LY = A1Low.getBlockY(); - int A1HZ = A1High.getBlockZ(); - int A1LZ = A1Low.getBlockZ(); - int A2HX = A2High.getBlockX(); - int A2LX = A2Low.getBlockX(); - int A2HY = A2High.getBlockY(); - int A2LY = A2Low.getBlockY(); - int A2HZ = A2High.getBlockZ(); - int A2LZ = A2Low.getBlockZ(); - if ((A1HX >= A2LX && A1HX <= A2HX) || (A1LX >= A2LX && A1LX <= A2HX) || (A2HX >= A1LX && A2HX <= A1HX) || (A2LX >= A1LX && A2LX <= A1HX)) { - if ((A1HY >= A2LY && A1HY <= A2HY) || (A1LY >= A2LY && A1LY <= A2HY) || (A2HY >= A1LY && A2HY <= A1HY) || (A2LY >= A1LY && A2LY <= A1HY)) { - if ((A1HZ >= A2LZ && A1HZ <= A2HZ) || (A1LZ >= A2LZ && A1LZ <= A2HZ) || (A2HZ >= A1LZ && A2HZ <= A1HZ) || (A2LZ >= A1LZ && A2LZ <= A1HZ)) { - return true; - } - } - } - return false; + int A1HX = A1High.getBlockX(); + int A1LX = A1Low.getBlockX(); + int A1HY = A1High.getBlockY(); + int A1LY = A1Low.getBlockY(); + int A1HZ = A1High.getBlockZ(); + int A1LZ = A1Low.getBlockZ(); + int A2HX = A2High.getBlockX(); + int A2LX = A2Low.getBlockX(); + int A2HY = A2High.getBlockY(); + int A2LY = A2Low.getBlockY(); + int A2HZ = A2High.getBlockZ(); + int A2LZ = A2Low.getBlockZ(); + if ((A1HX >= A2LX && A1HX <= A2HX) || (A1LX >= A2LX && A1LX <= A2HX) || (A2HX >= A1LX && A2HX <= A1HX) || (A2LX >= A1LX && A2LX <= A1HX)) { + if ((A1HY >= A2LY && A1HY <= A2HY) || (A1LY >= A2LY && A1LY <= A2HY) || (A2HY >= A1LY && A2HY <= A1HY) || (A2LY >= A1LY && A2LY <= A1HY)) { + if ((A1HZ >= A2LZ && A1HZ <= A2HZ) || (A1LZ >= A2LZ && A1LZ <= A2HZ) || (A2HZ >= A1LZ && A2HZ <= A1HZ) || (A2LZ >= A1LZ && A2LZ <= A1HZ)) { + return true; + } + } + } + return false; } public long getSize() { - int xsize = (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; - int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; - int zsize = (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; - return xsize * ysize * zsize; + int xsize = (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; + int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; + int zsize = (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; + return xsize * ysize * zsize; } public int getXSize() { - return (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; + return (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; } public int getYSize() { - return (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; + return (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; } public int getZSize() { - return (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; + return (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; } public Location getHighLoc() { - return highPoints; + return highPoints; } public Location getLowLoc() { - return lowPoints; + return lowPoints; } public World getWorld() { - return highPoints.getWorld(); + return highPoints.getWorld(); } public void save(DataOutputStream out, int version) throws IOException { - out.writeUTF(highPoints.getWorld().getName()); - out.writeInt(highPoints.getBlockX()); - out.writeInt(highPoints.getBlockY()); - out.writeInt(highPoints.getBlockZ()); - out.writeInt(lowPoints.getBlockX()); - out.writeInt(lowPoints.getBlockY()); - out.writeInt(lowPoints.getBlockZ()); + out.writeUTF(highPoints.getWorld().getName()); + out.writeInt(highPoints.getBlockX()); + out.writeInt(highPoints.getBlockY()); + out.writeInt(highPoints.getBlockZ()); + out.writeInt(lowPoints.getBlockX()); + out.writeInt(lowPoints.getBlockY()); + out.writeInt(lowPoints.getBlockZ()); } public static CuboidArea load(DataInputStream in, int version) throws IOException { - CuboidArea newArea = new CuboidArea(); - Server server = Residence.getServ(); - World world = server.getWorld(in.readUTF()); - int highx = in.readInt(); - int highy = in.readInt(); - int highz = in.readInt(); - int lowx = in.readInt(); - int lowy = in.readInt(); - int lowz = in.readInt(); - newArea.highPoints = new Location(world, highx, highy, highz); - newArea.lowPoints = new Location(world, lowx, lowy, lowz); - return newArea; + CuboidArea newArea = new CuboidArea(); + Server server = Residence.getServ(); + World world = server.getWorld(in.readUTF()); + int highx = in.readInt(); + int highy = in.readInt(); + int highz = in.readInt(); + int lowx = in.readInt(); + int lowy = in.readInt(); + int lowz = in.readInt(); + newArea.highPoints = new Location(world, highx, highy, highz); + newArea.lowPoints = new Location(world, lowx, lowy, lowz); + newArea.worldName = world.getName(); + return newArea; } public Map save() { - Map root = new LinkedHashMap<>(); - root.put("X1", this.highPoints.getBlockX()); - root.put("Y1", this.highPoints.getBlockY()); - root.put("Z1", this.highPoints.getBlockZ()); - root.put("X2", this.lowPoints.getBlockX()); - root.put("Y2", this.lowPoints.getBlockY()); - root.put("Z2", this.lowPoints.getBlockZ()); - return root; + Map root = new LinkedHashMap<>(); + root.put("X1", this.highPoints.getBlockX()); + root.put("Y1", this.highPoints.getBlockY()); + root.put("Z1", this.highPoints.getBlockZ()); + root.put("X2", this.lowPoints.getBlockX()); + root.put("Y2", this.lowPoints.getBlockY()); + root.put("Z2", this.lowPoints.getBlockZ()); + return root; } public static CuboidArea load(Map root, World world) throws Exception { - if (root == null) { - throw new Exception("Invalid residence physical location..."); - } - CuboidArea newArea = new CuboidArea(); - int x1 = (Integer) root.get("X1"); - int y1 = (Integer) root.get("Y1"); - int z1 = (Integer) root.get("Z1"); - int x2 = (Integer) root.get("X2"); - int y2 = (Integer) root.get("Y2"); - int z2 = (Integer) root.get("Z2"); - newArea.highPoints = new Location(world, x1, y1, z1); - newArea.lowPoints = new Location(world, x2, y2, z2); - return newArea; + if (root == null) { + throw new Exception("Invalid residence physical location..."); + } + CuboidArea newArea = new CuboidArea(); + int x1 = (Integer) root.get("X1"); + int y1 = (Integer) root.get("Y1"); + int z1 = (Integer) root.get("Z1"); + int x2 = (Integer) root.get("X2"); + int y2 = (Integer) root.get("Y2"); + int z2 = (Integer) root.get("Z2"); + newArea.highPoints = new Location(world, x1, y1, z1); + newArea.lowPoints = new Location(world, x2, y2, z2); + newArea.worldName = world.getName(); + return newArea; } public List getChunks() { - List chunks = new ArrayList<>(); - Location high = this.highPoints; - Location low = this.lowPoints; - int lowX = ChunkRef.getChunkCoord(low.getBlockX()); - int lowZ = ChunkRef.getChunkCoord(low.getBlockZ()); - int highX = ChunkRef.getChunkCoord(high.getBlockX()); - int highZ = ChunkRef.getChunkCoord(high.getBlockZ()); - - for (int x = lowX; x <= highX; x++) { - for (int z = lowZ; z <= highZ; z++) { - chunks.add(new ChunkRef(x, z)); - } - } - return chunks; + List chunks = new ArrayList<>(); + Location high = this.highPoints; + Location low = this.lowPoints; + int lowX = ChunkRef.getChunkCoord(low.getBlockX()); + int lowZ = ChunkRef.getChunkCoord(low.getBlockZ()); + int highX = ChunkRef.getChunkCoord(high.getBlockX()); + int highZ = ChunkRef.getChunkCoord(high.getBlockZ()); + + for (int x = lowX; x <= highX; x++) { + for (int z = lowZ; z <= highZ; z++) { + chunks.add(new ChunkRef(x, z)); + } + } + return chunks; } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 44ca621a8..6427f098b 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -10,6 +10,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -38,697 +39,725 @@ public class FlagPermissions { protected FlagPermissions parent; public static void addMaterialToUseFlag(Material mat, String flag) { - matUseFlagList.put(mat, flag); + matUseFlagList.put(mat, flag); } public static void removeMaterialFromUseFlag(Material mat) { - matUseFlagList.remove(mat); + matUseFlagList.remove(mat); } public static EnumMap getMaterialUseFlagList() { - return (EnumMap) matUseFlagList; + return (EnumMap) matUseFlagList; } public static void addFlag(String flag) { - flag = flag.toLowerCase(); - if (!validFlags.contains(flag)) { - validFlags.add(flag); - } - if (validFlagGroups.containsKey(flag)) { - validFlagGroups.remove(flag); - } + flag = flag.toLowerCase(); + if (!validFlags.contains(flag)) { + validFlags.add(flag); + } + if (validFlagGroups.containsKey(flag)) { + validFlagGroups.remove(flag); + } } public static void addPlayerOrGroupOnlyFlag(String flag) { - flag = flag.toLowerCase(); - if (!validPlayerFlags.contains(flag)) { - validPlayerFlags.add(flag); - } - if (validFlagGroups.containsKey(flag)) { - validFlagGroups.remove(flag); - } + flag = flag.toLowerCase(); + if (!validPlayerFlags.contains(flag)) { + validPlayerFlags.add(flag); + } + if (validFlagGroups.containsKey(flag)) { + validFlagGroups.remove(flag); + } } public static void addResidenceOnlyFlag(String flag) { - flag = flag.toLowerCase(); - if (!validAreaFlags.contains(flag)) { - validAreaFlags.add(flag); - } - if (validFlagGroups.containsKey(flag)) { - validFlagGroups.remove(flag); - } + flag = flag.toLowerCase(); + if (!validAreaFlags.contains(flag)) { + validAreaFlags.add(flag); + } + if (validFlagGroups.containsKey(flag)) { + validFlagGroups.remove(flag); + } } protected static HashMap> validFlagGroups = new HashMap<>(); public static void addFlagToFlagGroup(String group, String flag) { - if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { - if (!validFlagGroups.containsKey(group)) { - validFlagGroups.put(group, new ArrayList()); - } - ArrayList flags = validFlagGroups.get(group); - flags.add(flag); - } + if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { + if (!validFlagGroups.containsKey(group)) { + validFlagGroups.put(group, new ArrayList()); + } + ArrayList flags = validFlagGroups.get(group); + flags.add(flag); + } } public static void removeFlagFromFlagGroup(String group, String flag) { - if (validFlagGroups.containsKey(group)) { - ArrayList flags = validFlagGroups.get(group); - flags.remove(flag); - if (flags.isEmpty()) { - validFlagGroups.remove(group); - } - } + if (validFlagGroups.containsKey(group)) { + ArrayList flags = validFlagGroups.get(group); + flags.remove(flag); + if (flags.isEmpty()) { + validFlagGroups.remove(group); + } + } } public static boolean flagGroupExists(String group) { - return validFlagGroups.containsKey(group); + return validFlagGroups.containsKey(group); } public static void initValidFlags() { - validAreaFlags.clear(); - validPlayerFlags.clear(); - validFlags.clear(); - validFlagGroups.clear(); - addFlag("egg"); - addFlag("note"); - addFlag("pressure"); - addFlag("cake"); - addFlag("lever"); - addFlag("door"); - addFlag("button"); - addFlag("table"); - addFlag("brew"); - addFlag("bed"); - addFlag("commandblock"); - addFlag("anvil"); - addFlag("flowerpot"); - addFlag("enchant"); - addFlag("diode"); - addFlag("use"); - addFlag("move"); - addFlag("build"); - addFlag("tp"); - addFlag("ignite"); - addFlag("container"); - addFlag("subzone"); - addFlag("destroy"); - addFlag("place"); - addFlag("bucket"); - addFlag("bank"); - addFlag("beacon"); - - /* New flags */ - addFlag("animalkilling"); - addFlag("trade"); - - addResidenceOnlyFlag("trample"); - addResidenceOnlyFlag("pvp"); - addResidenceOnlyFlag("fireball"); - addResidenceOnlyFlag("explode"); - addResidenceOnlyFlag("damage"); - addResidenceOnlyFlag("monsters"); - addResidenceOnlyFlag("firespread"); - addResidenceOnlyFlag("burn"); - addResidenceOnlyFlag("tnt"); - addResidenceOnlyFlag("creeper"); - addResidenceOnlyFlag("wither"); - addResidenceOnlyFlag("flow"); - addResidenceOnlyFlag("healing"); - addResidenceOnlyFlag("animals"); - addResidenceOnlyFlag("lavaflow"); - addResidenceOnlyFlag("waterflow"); - addResidenceOnlyFlag("physics"); - addResidenceOnlyFlag("piston"); - addResidenceOnlyFlag("spread"); - addResidenceOnlyFlag("hidden"); - addResidenceOnlyFlag("witherdamage"); - addPlayerOrGroupOnlyFlag("admin"); - addFlagToFlagGroup("redstone", "note"); - addFlagToFlagGroup("redstone", "pressure"); - addFlagToFlagGroup("redstone", "lever"); - addFlagToFlagGroup("redstone", "button"); - addFlagToFlagGroup("redstone", "diode"); - addFlagToFlagGroup("craft", "brew"); - addFlagToFlagGroup("craft", "table"); - addFlagToFlagGroup("craft", "enchant"); - addFlagToFlagGroup("trusted", "use"); - addFlagToFlagGroup("trusted", "tp"); - addFlagToFlagGroup("trusted", "build"); - addFlagToFlagGroup("trusted", "container"); - addFlagToFlagGroup("trusted", "bucket"); - addFlagToFlagGroup("trusted", "move"); - addFlagToFlagGroup("fire", "ignite"); - addFlagToFlagGroup("fire", "firespread"); - addMaterialToUseFlag(Material.DIODE, "diode"); - addMaterialToUseFlag(Material.DIODE_BLOCK_OFF, "diode"); - addMaterialToUseFlag(Material.DIODE_BLOCK_ON, "diode"); - addMaterialToUseFlag(Material.WORKBENCH, "table"); - addMaterialToUseFlag(Material.WOODEN_DOOR, "door"); - /* 1.8 Doors */ - addMaterialToUseFlag(Material.SPRUCE_DOOR, "door"); - addMaterialToUseFlag(Material.BIRCH_DOOR, "door"); - addMaterialToUseFlag(Material.JUNGLE_DOOR, "door"); - addMaterialToUseFlag(Material.ACACIA_DOOR, "door"); - addMaterialToUseFlag(Material.DARK_OAK_DOOR, "door"); - - /* 1.8 Fence Gates */ - addMaterialToUseFlag(Material.SPRUCE_FENCE_GATE, "door"); - addMaterialToUseFlag(Material.BIRCH_FENCE_GATE, "door"); - addMaterialToUseFlag(Material.JUNGLE_FENCE_GATE, "door"); - addMaterialToUseFlag(Material.ACACIA_FENCE_GATE, "door"); - addMaterialToUseFlag(Material.DARK_OAK_FENCE_GATE, "door"); - - addMaterialToUseFlag(Material.FENCE_GATE, "door"); - addMaterialToUseFlag(Material.NETHER_FENCE, "door"); - addMaterialToUseFlag(Material.TRAP_DOOR, "door"); - addMaterialToUseFlag(Material.ENCHANTMENT_TABLE, "enchant"); - addMaterialToUseFlag(Material.STONE_BUTTON, "button"); - addMaterialToUseFlag(Material.LEVER, "lever"); - addMaterialToUseFlag(Material.BED_BLOCK, "bed"); - addMaterialToUseFlag(Material.BREWING_STAND, "brew"); - addMaterialToUseFlag(Material.CAKE, "cake"); - addMaterialToUseFlag(Material.NOTE_BLOCK, "note"); - addMaterialToUseFlag(Material.DRAGON_EGG, "egg"); - addMaterialToUseFlag(Material.COMMAND, "commandblock"); - addMaterialToUseFlag(Material.WOOD_BUTTON, "button"); - addMaterialToUseFlag(Material.ANVIL, "anvil"); - addMaterialToUseFlag(Material.FLOWER_POT, "flowerpot"); - addMaterialToUseFlag(Material.BEACON, "beacon"); - addMaterialToUseFlag(Material.JUKEBOX, "container"); - addMaterialToUseFlag(Material.CHEST, "container"); - addMaterialToUseFlag(Material.TRAPPED_CHEST, "container"); - addMaterialToUseFlag(Material.HOPPER, "container"); - addMaterialToUseFlag(Material.DROPPER, "container"); - addMaterialToUseFlag(Material.FURNACE, "container"); - addMaterialToUseFlag(Material.BURNING_FURNACE, "container"); - addMaterialToUseFlag(Material.DISPENSER, "container"); - addMaterialToUseFlag(Material.CAKE_BLOCK, "cake"); + validAreaFlags.clear(); + validPlayerFlags.clear(); + validFlags.clear(); + validFlagGroups.clear(); + addFlag("egg"); + addFlag("note"); + addFlag("pressure"); + addFlag("cake"); + addFlag("lever"); + addFlag("door"); + addFlag("button"); + addFlag("table"); + addFlag("brew"); + addFlag("bed"); + addFlag("commandblock"); + addFlag("anvil"); + addFlag("flowerpot"); + addFlag("enchant"); + addFlag("diode"); + addFlag("use"); + addFlag("move"); + addFlag("build"); + addFlag("tp"); + addFlag("ignite"); + addFlag("container"); + addFlag("subzone"); + addFlag("destroy"); + addFlag("place"); + addFlag("bucket"); + addFlag("bank"); + addFlag("beacon"); + + /* New flags */ + addFlag("animalkilling"); + addFlag("mobkilling"); + addFlag("vehicledestroy"); + addFlag("trade"); + + addFlag("leash"); + addFlag("shear"); + addFlag("nofly"); + + addResidenceOnlyFlag("trample"); + addResidenceOnlyFlag("pvp"); + addResidenceOnlyFlag("fireball"); + addResidenceOnlyFlag("explode"); + addResidenceOnlyFlag("damage"); + addResidenceOnlyFlag("monsters"); + addResidenceOnlyFlag("firespread"); + addResidenceOnlyFlag("burn"); + addResidenceOnlyFlag("tnt"); + addResidenceOnlyFlag("creeper"); + addResidenceOnlyFlag("wither"); + addResidenceOnlyFlag("flow"); + addResidenceOnlyFlag("healing"); + addResidenceOnlyFlag("animals"); + addResidenceOnlyFlag("lavaflow"); + addResidenceOnlyFlag("waterflow"); + addResidenceOnlyFlag("physics"); + addResidenceOnlyFlag("piston"); + addResidenceOnlyFlag("spread"); + addResidenceOnlyFlag("hidden"); + addResidenceOnlyFlag("witherdamage"); + + // prevents from mobs entering residence + addResidenceOnlyFlag("nomobs"); + + addPlayerOrGroupOnlyFlag("admin"); + addFlagToFlagGroup("redstone", "note"); + addFlagToFlagGroup("redstone", "pressure"); + addFlagToFlagGroup("redstone", "lever"); + addFlagToFlagGroup("redstone", "button"); + addFlagToFlagGroup("redstone", "diode"); + addFlagToFlagGroup("craft", "brew"); + addFlagToFlagGroup("craft", "table"); + addFlagToFlagGroup("craft", "enchant"); + addFlagToFlagGroup("trusted", "use"); + addFlagToFlagGroup("trusted", "tp"); + addFlagToFlagGroup("trusted", "build"); + addFlagToFlagGroup("trusted", "container"); + addFlagToFlagGroup("trusted", "bucket"); + addFlagToFlagGroup("trusted", "move"); + addFlagToFlagGroup("trusted", "leash"); + addFlagToFlagGroup("trusted", "animalkilling"); + addFlagToFlagGroup("trusted", "mobkilling"); + addFlagToFlagGroup("trusted", "shear"); + addFlagToFlagGroup("fire", "ignite"); + addFlagToFlagGroup("fire", "firespread"); + addMaterialToUseFlag(Material.DIODE, "diode"); + addMaterialToUseFlag(Material.DIODE_BLOCK_OFF, "diode"); + addMaterialToUseFlag(Material.DIODE_BLOCK_ON, "diode"); + addMaterialToUseFlag(Material.WORKBENCH, "table"); + addMaterialToUseFlag(Material.WOODEN_DOOR, "door"); + /* 1.8 Doors */ + addMaterialToUseFlag(Material.SPRUCE_DOOR, "door"); + addMaterialToUseFlag(Material.BIRCH_DOOR, "door"); + addMaterialToUseFlag(Material.JUNGLE_DOOR, "door"); + addMaterialToUseFlag(Material.ACACIA_DOOR, "door"); + addMaterialToUseFlag(Material.DARK_OAK_DOOR, "door"); + + /* 1.8 Fence Gates */ + addMaterialToUseFlag(Material.SPRUCE_FENCE_GATE, "door"); + addMaterialToUseFlag(Material.BIRCH_FENCE_GATE, "door"); + addMaterialToUseFlag(Material.JUNGLE_FENCE_GATE, "door"); + addMaterialToUseFlag(Material.ACACIA_FENCE_GATE, "door"); + addMaterialToUseFlag(Material.DARK_OAK_FENCE_GATE, "door"); + + addMaterialToUseFlag(Material.FENCE_GATE, "door"); + addMaterialToUseFlag(Material.NETHER_FENCE, "door"); + addMaterialToUseFlag(Material.TRAP_DOOR, "door"); + addMaterialToUseFlag(Material.IRON_TRAPDOOR, "door"); + addMaterialToUseFlag(Material.ENCHANTMENT_TABLE, "enchant"); + addMaterialToUseFlag(Material.STONE_BUTTON, "button"); + addMaterialToUseFlag(Material.LEVER, "lever"); + addMaterialToUseFlag(Material.BED_BLOCK, "bed"); + addMaterialToUseFlag(Material.BREWING_STAND, "brew"); + addMaterialToUseFlag(Material.CAKE, "cake"); + addMaterialToUseFlag(Material.NOTE_BLOCK, "note"); + addMaterialToUseFlag(Material.DRAGON_EGG, "egg"); + addMaterialToUseFlag(Material.COMMAND, "commandblock"); + addMaterialToUseFlag(Material.WOOD_BUTTON, "button"); + addMaterialToUseFlag(Material.ANVIL, "anvil"); + addMaterialToUseFlag(Material.FLOWER_POT, "flowerpot"); + addMaterialToUseFlag(Material.BEACON, "beacon"); + addMaterialToUseFlag(Material.JUKEBOX, "container"); + addMaterialToUseFlag(Material.CHEST, "container"); + addMaterialToUseFlag(Material.TRAPPED_CHEST, "container"); + addMaterialToUseFlag(Material.HOPPER, "container"); + addMaterialToUseFlag(Material.DROPPER, "container"); + addMaterialToUseFlag(Material.FURNACE, "container"); + addMaterialToUseFlag(Material.BURNING_FURNACE, "container"); + addMaterialToUseFlag(Material.DISPENSER, "container"); + addMaterialToUseFlag(Material.CAKE_BLOCK, "cake"); } public static FlagPermissions parseFromConfigNode(String name, ConfigurationSection node) { - FlagPermissions list = new FlagPermissions(); - Set keys = node.getConfigurationSection(name).getKeys(false); - if (keys != null) { - for (String key : keys) { - boolean state = node.getBoolean(name + "." + key, false); - key = key.toLowerCase(); - if (state) { - list.setFlag(key, FlagState.TRUE); - } else { - list.setFlag(key, FlagState.FALSE); - } - } - } - return list; + FlagPermissions list = new FlagPermissions(); + Set keys = node.getConfigurationSection(name).getKeys(false); + if (keys != null) { + for (String key : keys) { + boolean state = node.getBoolean(name + "." + key, false); + key = key.toLowerCase(); + if (state) { + list.setFlag(key, FlagState.TRUE); + } else { + list.setFlag(key, FlagState.FALSE); + } + } + } + return list; + } + + public static FlagPermissions parseFromConfigNodeAsList(String name, String node, String stage) { + FlagPermissions list = new FlagPermissions(); + if (node.equalsIgnoreCase("true")) { + list.setFlag(node, FlagState.valueOf(stage)); + } else { + list.setFlag(node, FlagState.FALSE); + } + + return list; } public FlagPermissions() { - cuboidFlags = Collections.synchronizedMap(new HashMap()); - playerFlags = Collections.synchronizedMap(new HashMap>()); - groupFlags = Collections.synchronizedMap(new HashMap>()); - cachedPlayerNameUUIDs = Collections.synchronizedMap(new HashMap()); + cuboidFlags = Collections.synchronizedMap(new HashMap()); + playerFlags = Collections.synchronizedMap(new HashMap>()); + groupFlags = Collections.synchronizedMap(new HashMap>()); + cachedPlayerNameUUIDs = Collections.synchronizedMap(new HashMap()); } - - protected Map getPlayerFlags(String player, boolean allowCreate) //this function works with uuid in string format as well, instead of player name + + protected Map getPlayerFlags(String player, boolean allowCreate)//this function works with uuid in string format as well, instead of player name { - player = player.toLowerCase(); - String uuids; - Map flags = null; - - if(player.length() == 36) - { - uuids = player; - String resolvedName = Residence.getPlayerName(uuids); - if(resolvedName != null) - player = resolvedName; - else if(cachedPlayerNameUUIDs.containsKey(player)) - player = cachedPlayerNameUUIDs.get(player); - } - else - uuids = Residence.getPlayerUUIDString(player); - - if(uuids==null) - { - Set> values = cachedPlayerNameUUIDs.entrySet(); - for(Entry value : values) - { - if(value.getValue().equals(player)) - uuids = value.getKey(); - } - } - - if(uuids!=null) - flags = playerFlags.get(uuids); - if(flags==null) - { - flags = playerFlags.get(player); - if(uuids!=null && flags != null) - { - flags = playerFlags.remove(player); - playerFlags.put(uuids, flags); - cachedPlayerNameUUIDs.put(uuids, player); - } - } - else - cachedPlayerNameUUIDs.put(uuids, player); - - if(flags == null && allowCreate) - { - if(uuids!=null) - { - flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(uuids, flags); - cachedPlayerNameUUIDs.put(uuids, player); - } - else - { - flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(player, flags); - } - } - return flags; - } - + player = player.toLowerCase(); + String uuids; + Map flags = null; + + if (player.length() == 36) { + uuids = player; + String resolvedName = Residence.getPlayerName(uuids); + if (resolvedName != null) + player = resolvedName; + else if (cachedPlayerNameUUIDs.containsKey(player)) + player = cachedPlayerNameUUIDs.get(player); + } else + uuids = Residence.getPlayerUUIDString(player); + + if (uuids == null) { + Set> values = cachedPlayerNameUUIDs.entrySet(); + for (Entry value : values) { + if (value.getValue().equals(player)) + uuids = value.getKey(); + } + } + + if (uuids != null) + flags = playerFlags.get(uuids); + if (flags == null) { + flags = playerFlags.get(player); + if (uuids != null && flags != null) { + flags = playerFlags.remove(player); + playerFlags.put(uuids, flags); + cachedPlayerNameUUIDs.put(uuids, player); + } + } else + cachedPlayerNameUUIDs.put(uuids, player); + + if (flags == null && allowCreate) { + if (uuids != null) { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(uuids, flags); + cachedPlayerNameUUIDs.put(uuids, player); + } else { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(player, flags); + } + } + return flags; + } + public boolean setPlayerFlag(String player, String flag, FlagState state) { - Map map = this.getPlayerFlags(player, state != FlagState.NEITHER); - if(map==null) - return true; - if (state == FlagState.FALSE) { - map.put(flag, false); - } else if (state == FlagState.TRUE) { - map.put(flag, true); - } else if (state == FlagState.NEITHER) { - if (map.containsKey(flag)) { - map.remove(flag); - } - } - if(map.isEmpty()) - this.removeAllPlayerFlags(player); - return true; - } - - public void removeAllPlayerFlags(String player) { //this function works with uuid in string format as well, instead of player name - player = player.toLowerCase(); - String uuids = Residence.getPlayerUUIDString(player); - if(uuids == null) - for(Entry entry : cachedPlayerNameUUIDs.entrySet()) - if(entry.getValue().equals(player)) - uuids = entry.getKey(); - - if(uuids!=null) - { - playerFlags.remove(uuids); - cachedPlayerNameUUIDs.remove(uuids); - } - - playerFlags.remove(player); - cachedPlayerNameUUIDs.remove(player); + Map map = this.getPlayerFlags(player, state != FlagState.NEITHER); + if (map == null) + return true; + if (state == FlagState.FALSE) { + map.put(flag, false); + } else if (state == FlagState.TRUE) { + map.put(flag, true); + } else if (state == FlagState.NEITHER) { + if (map.containsKey(flag)) { + map.remove(flag); + } + } + if (map.isEmpty()) + this.removeAllPlayerFlags(player); + return true; + } + + public void removeAllPlayerFlags(String player) {//this function works with uuid in string format as well, instead of player name + player = player.toLowerCase(); + String uuids = Residence.getPlayerUUIDString(player); + if (uuids == null) + for (Entry entry : cachedPlayerNameUUIDs.entrySet()) + if (entry.getValue().equals(player)) + uuids = entry.getKey(); + + if (uuids != null) { + playerFlags.remove(uuids); + cachedPlayerNameUUIDs.remove(uuids); + } + + playerFlags.remove(player); + cachedPlayerNameUUIDs.remove(player); } public void removeAllGroupFlags(String group) { - groupFlags.remove(group); + groupFlags.remove(group); } public boolean setGroupFlag(String group, String flag, FlagState state) { - group = group.toLowerCase(); - if (!groupFlags.containsKey(group)) { - groupFlags.put(group, Collections.synchronizedMap(new HashMap())); - } - Map map = groupFlags.get(group); - if (state == FlagState.FALSE) { - map.put(flag, false); - } else if (state == FlagState.TRUE) { - map.put(flag, true); - } else if (state == FlagState.NEITHER) { - if (map.containsKey(flag)) { - map.remove(flag); - } - } - if (map.isEmpty()) { - groupFlags.remove(group); - } - return true; + group = group.toLowerCase(); + if (!groupFlags.containsKey(group)) { + groupFlags.put(group, Collections.synchronizedMap(new HashMap())); + } + Map map = groupFlags.get(group); + if (state == FlagState.FALSE) { + map.put(flag, false); + } else if (state == FlagState.TRUE) { + map.put(flag, true); + } else if (state == FlagState.NEITHER) { + if (map.containsKey(flag)) { + map.remove(flag); + } + } + if (map.isEmpty()) { + groupFlags.remove(group); + } + return true; } public boolean setFlag(String flag, FlagState state) { - if (state == FlagState.FALSE) { - cuboidFlags.put(flag, false); - } else if (state == FlagState.TRUE) { - cuboidFlags.put(flag, true); - } else if (state == FlagState.NEITHER) { - if (cuboidFlags.containsKey(flag)) { - cuboidFlags.remove(flag); - } - } - return true; + if (state == FlagState.FALSE) { + cuboidFlags.put(flag, false); + } else if (state == FlagState.TRUE) { + cuboidFlags.put(flag, true); + } else if (state == FlagState.NEITHER) { + if (cuboidFlags.containsKey(flag)) { + cuboidFlags.remove(flag); + } + } + return true; } public static enum FlagState { - TRUE, FALSE, NEITHER, INVALID + TRUE, FALSE, NEITHER, INVALID } public static FlagState stringToFlagState(String flagstate) { - if (flagstate.equalsIgnoreCase("true") || flagstate.equalsIgnoreCase("t")) { - return FlagState.TRUE; - } else if (flagstate.equalsIgnoreCase("false") || flagstate.equalsIgnoreCase("f")) { - return FlagState.FALSE; - } else if (flagstate.equalsIgnoreCase("remove") || flagstate.equalsIgnoreCase("r")) { - return FlagState.NEITHER; - } else { - return FlagState.INVALID; - } + if (flagstate.equalsIgnoreCase("true") || flagstate.equalsIgnoreCase("t")) { + return FlagState.TRUE; + } else if (flagstate.equalsIgnoreCase("false") || flagstate.equalsIgnoreCase("f")) { + return FlagState.FALSE; + } else if (flagstate.equalsIgnoreCase("remove") || flagstate.equalsIgnoreCase("r")) { + return FlagState.NEITHER; + } else { + return FlagState.INVALID; + } } public boolean playerHas(String player, String world, String flag, boolean def) { - String group = Residence.getPermissionManager().getGroupNameByPlayer(player, world); - return this.playerCheck(player, flag, this.groupCheck(group, flag, this.has(flag, def))); + String group = Residence.getPermissionManager().getGroupNameByPlayer(player, world); + return this.playerCheck(player, flag, this.groupCheck(group, flag, this.has(flag, def))); } public boolean groupHas(String group, String flag, boolean def) { - return this.groupCheck(group, flag, this.has(flag, def)); + return this.groupCheck(group, flag, this.has(flag, def)); } private boolean playerCheck(String player, String flag, boolean def) { - Map pmap = this.getPlayerFlags(player, false); - if (pmap != null) { - if (pmap.containsKey(flag)) { - return pmap.get(flag); - } - } - if (parent != null) { - return parent.playerCheck(player, flag, def); - } - return def; + Map pmap = this.getPlayerFlags(player, false); + if (pmap != null) { + if (pmap.containsKey(flag)) { + return pmap.get(flag); + } + } + if (parent != null) { + return parent.playerCheck(player, flag, def); + } + return def; } private boolean groupCheck(String group, String flag, boolean def) { - if (groupFlags.containsKey(group)) { - Map gmap = groupFlags.get(group); - if (gmap.containsKey(flag)) { - return gmap.get(flag); - } - } - if (parent != null) { - return parent.groupCheck(group, flag, def); - } - return def; + if (groupFlags.containsKey(group)) { + Map gmap = groupFlags.get(group); + if (gmap.containsKey(flag)) { + return gmap.get(flag); + } + } + if (parent != null) { + return parent.groupCheck(group, flag, def); + } + return def; } public boolean has(String flag, boolean def) { - if (cuboidFlags.containsKey(flag)) { - return cuboidFlags.get(flag); - } - if (parent != null) { - return parent.has(flag, def); - } - return def; + if (cuboidFlags.containsKey(flag)) { + return cuboidFlags.get(flag); + } + if (parent != null) { + return parent.has(flag, def); + } + return def; } public boolean isPlayerSet(String player, String flag) { - Map flags = this.getPlayerFlags(player, false); - if (flags == null) - return false; - return flags.containsKey(flag); + Map flags = this.getPlayerFlags(player, false); + if (flags == null) + return false; + return flags.containsKey(flag); } public boolean inheritanceIsPlayerSet(String player, String flag) { - Map flags = this.getPlayerFlags(player, false); - if (flags == null) { - return parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); - } - return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); + Map flags = this.getPlayerFlags(player, false); + if (flags == null) { + return parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); + } + return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); } public boolean isGroupSet(String group, String flag) { - group = group.toLowerCase(); - Map flags = groupFlags.get(group); - if (flags == null) { - return false; - } - return flags.containsKey(flag); + group = group.toLowerCase(); + Map flags = groupFlags.get(group); + if (flags == null) { + return false; + } + return flags.containsKey(flag); } public boolean inheritanceIsGroupSet(String group, String flag) { - group = group.toLowerCase(); - Map flags = groupFlags.get(group); - if (flags == null) { - return parent == null ? false : parent.inheritanceIsGroupSet(group, flag); - } - return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsGroupSet(group, flag); + group = group.toLowerCase(); + Map flags = groupFlags.get(group); + if (flags == null) { + return parent == null ? false : parent.inheritanceIsGroupSet(group, flag); + } + return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsGroupSet(group, flag); } public boolean isSet(String flag) { - return cuboidFlags.containsKey(flag); + return cuboidFlags.containsKey(flag); } public boolean inheritanceIsSet(String flag) { - return cuboidFlags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsSet(flag); + return cuboidFlags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsSet(flag); } public boolean checkValidFlag(String flag, boolean globalflag) { - if (validFlags.contains(flag)) { - return true; - } - if (globalflag) { - if (validAreaFlags.contains(flag)) { - return true; - } - } else { - if (validPlayerFlags.contains(flag)) { - return true; - } - } - return false; + if (validFlags.contains(flag)) { + return true; + } + if (globalflag) { + if (validAreaFlags.contains(flag)) { + return true; + } + } else { + if (validPlayerFlags.contains(flag)) { + return true; + } + } + return false; } public Map save() { - Map root = new LinkedHashMap<>(); - root.put("LastKnownPlayerNames", cachedPlayerNameUUIDs); - root.put("PlayerFlags", playerFlags); - root.put("GroupFlags", groupFlags); - root.put("AreaFlags", cuboidFlags); - return root; + Map root = new LinkedHashMap<>(); + root.put("LastKnownPlayerNames", cachedPlayerNameUUIDs); + root.put("PlayerFlags", playerFlags); + root.put("GroupFlags", groupFlags); + root.put("AreaFlags", cuboidFlags); + return root; } public static FlagPermissions load(Map root) throws Exception { - FlagPermissions newperms = new FlagPermissions(); - return FlagPermissions.load(root, newperms); + FlagPermissions newperms = new FlagPermissions(); + return FlagPermissions.load(root, newperms); } + @SuppressWarnings({ "unchecked", "rawtypes" }) protected static FlagPermissions load(Map root, FlagPermissions newperms) throws Exception { - if(root.containsKey("LastKnownPlayerNames")) - newperms.cachedPlayerNameUUIDs = (Map) root.get("LastKnownPlayerNames"); - newperms.playerFlags = (Map) root.get("PlayerFlags"); - newperms.groupFlags = (Map) root.get("GroupFlags"); - newperms.cuboidFlags = (Map) root.get("AreaFlags"); - newperms.convertPlayerNamesToUUIDs(); - return newperms; - } - - private void convertPlayerNamesToUUIDs() - { - HashMap converts = new HashMap<>(); - for( String keyset : playerFlags.keySet()) - { - if(keyset.length()!=36) - { - String uuid = Residence.getPlayerUUIDString(keyset); - if(uuid != null) - converts.put(keyset, uuid); - } - else - { - String pname = Residence.getPlayerName(keyset); - if(pname != null) - this.cachedPlayerNameUUIDs.put(keyset, pname); - } - - } - for(Entry convert : converts.entrySet()) - { - playerFlags.put(convert.getValue(), playerFlags.remove(convert.getKey())); - cachedPlayerNameUUIDs.put(convert.getValue(), convert.getKey()); - } + if (root.containsKey("LastKnownPlayerNames")) + newperms.cachedPlayerNameUUIDs = (Map) root.get("LastKnownPlayerNames"); + newperms.playerFlags = (Map) root.get("PlayerFlags"); + newperms.groupFlags = (Map) root.get("GroupFlags"); + newperms.cuboidFlags = (Map) root.get("AreaFlags"); + + String ownerName = null; + String uuid = null; + + if (root.containsKey("OwnerLastKnownName")) { + ownerName = (String) root.get("OwnerLastKnownName"); + uuid = (String) root.get("OwnerUUID"); + } + + newperms.convertPlayerNamesToUUIDs(ownerName, uuid); + return newperms; + } + + private void convertPlayerNamesToUUIDs(String OwnerName, String owneruuid) { + HashMap converts = new HashMap<>(); + + List Toremove = new ArrayList(); + + for (String keyset : playerFlags.keySet()) { + if (keyset.length() != 36) { + String uuid = null; + if (OwnerName != null && OwnerName.equalsIgnoreCase(keyset) && !owneruuid.equalsIgnoreCase("ffffffff-ffff-ffff-ffff-ffffffffffff")) + uuid = owneruuid; + else + uuid = Residence.getPlayerUUIDString(keyset); + // if (OwnerName.equals(keyset)) { + if (uuid != null) + converts.put(keyset, uuid); + else if (OwnerName != null && !OwnerName.equalsIgnoreCase(keyset)) + Toremove.add(keyset); + // } + } else { + String pname = Residence.getPlayerName(keyset); + if (pname != null) + this.cachedPlayerNameUUIDs.put(keyset, pname); + } + + } + for (String one : Toremove) { + playerFlags.remove(one); + } + for (Entry convert : converts.entrySet()) { + playerFlags.put(convert.getValue(), playerFlags.remove(convert.getKey())); + cachedPlayerNameUUIDs.put(convert.getValue(), convert.getKey()); + } } public String listFlags() { - StringBuilder sbuild = new StringBuilder(); - Set> set = cuboidFlags.entrySet(); - synchronized (set) { - Iterator> it = set.iterator(); - while (it.hasNext()) { - Entry next = it.next(); - if (next.getValue()) { - sbuild.append("+").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } else { - sbuild.append("-").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } - } - } - if (sbuild.length() == 0) { - sbuild.append("none"); - } - return sbuild.toString(); + StringBuilder sbuild = new StringBuilder(); + Set> set = cuboidFlags.entrySet(); + synchronized (set) { + Iterator> it = set.iterator(); + while (it.hasNext()) { + Entry next = it.next(); + if (next.getValue()) { + sbuild.append("+").append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } else { + sbuild.append("-").append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } + } + } + if (sbuild.length() == 0) { + sbuild.append("none"); + } + return sbuild.toString(); } public String listPlayerFlags(String player) { - Map flags = this.getPlayerFlags(player, false); - if (flags != null) { - return this.printPlayerFlags(flags); - } else { - return "none"; - } - } - - protected String printPlayerFlags(Map flags) - { - StringBuilder sbuild = new StringBuilder(); - Set> set = flags.entrySet(); - synchronized (flags) { - Iterator> it = set.iterator(); - while (it.hasNext()) { - Entry next = it.next(); - if (next.getValue()) { - sbuild.append("+").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } else { - sbuild.append("-").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } - } - } - if (sbuild.length() == 0) { - sbuild.append("none"); - } - return sbuild.toString(); + Map flags = this.getPlayerFlags(player, false); + if (flags != null) { + return this.printPlayerFlags(flags); + } else { + return "none"; + } + } + + protected String printPlayerFlags(Map flags) { + StringBuilder sbuild = new StringBuilder(); + Set> set = flags.entrySet(); + synchronized (flags) { + Iterator> it = set.iterator(); + while (it.hasNext()) { + Entry next = it.next(); + if (next.getValue()) { + sbuild.append("+").append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } else { + sbuild.append("-").append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } + } + } + if (sbuild.length() == 0) { + sbuild.append("none"); + } + return sbuild.toString(); } public String listOtherPlayersFlags(String player) { - player = player.toLowerCase(); - String uuids = Residence.getPlayerUUIDString(player); - StringBuilder sbuild = new StringBuilder(); - Set>> set = playerFlags.entrySet(); - synchronized (set) { - Iterator>> it = set.iterator(); - while (it.hasNext()) { - Entry> nextEnt = it.next(); - String next = nextEnt.getKey(); - if (!next.equals(player) && !next.equals(uuids)) { - String perms = printPlayerFlags(nextEnt.getValue()); - if(next.length() == 36) - { - String resolvedName = Residence.getPlayerName(next); - if(resolvedName != null) - { - this.cachedPlayerNameUUIDs.put(next, resolvedName); - next = resolvedName; - } - else if(this.cachedPlayerNameUUIDs.containsKey(next)) - next = this.cachedPlayerNameUUIDs.get(next); - } - if (!perms.equals("none")) { - sbuild.append(next).append("[").append(ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED).append("] "); - } - } - } - } - return sbuild.toString(); + player = player.toLowerCase(); + String uuids = Residence.getPlayerUUIDString(player); + StringBuilder sbuild = new StringBuilder(); + Set>> set = playerFlags.entrySet(); + synchronized (set) { + Iterator>> it = set.iterator(); + while (it.hasNext()) { + Entry> nextEnt = it.next(); + String next = nextEnt.getKey(); + if (!next.equals(player) && !next.equals(uuids)) { + String perms = printPlayerFlags(nextEnt.getValue()); + if (next.length() == 36) { + String resolvedName = Residence.getPlayerName(next); + if (resolvedName != null) { + this.cachedPlayerNameUUIDs.put(next, resolvedName); + next = resolvedName; + } else if (this.cachedPlayerNameUUIDs.containsKey(next)) + next = this.cachedPlayerNameUUIDs.get(next); + } + if (!perms.equals("none")) { + sbuild.append(next).append("[").append(ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED).append("] "); + } + } + } + } + return sbuild.toString(); } public String listGroupFlags() { - StringBuilder sbuild = new StringBuilder(); - Set set = groupFlags.keySet(); - synchronized (set) { - Iterator it = set.iterator(); - while (it.hasNext()) { - String next = it.next(); - String perms = listGroupFlags(next); - if (!perms.equals("none")) { - sbuild.append(next).append("[").append(ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED).append("] "); - } - } - } - return sbuild.toString(); + StringBuilder sbuild = new StringBuilder(); + Set set = groupFlags.keySet(); + synchronized (set) { + Iterator it = set.iterator(); + while (it.hasNext()) { + String next = it.next(); + String perms = listGroupFlags(next); + if (!perms.equals("none")) { + sbuild.append(next).append("[").append(ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED).append("] "); + } + } + } + return sbuild.toString(); } public String listGroupFlags(String group) { - group = group.toLowerCase(); - if (groupFlags.containsKey(group)) { - StringBuilder sbuild = new StringBuilder(); - Map get = groupFlags.get(group); - Set> set = get.entrySet(); - synchronized (get) { - Iterator> it = set.iterator(); - while (it.hasNext()) { - Entry next = it.next(); - if (next.getValue()) { - sbuild.append("+").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } else { - sbuild.append("-").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } - } - } - if (sbuild.length() == 0) { - groupFlags.remove(group); - sbuild.append("none"); - } - return sbuild.toString(); - } else { - return "none"; - } + group = group.toLowerCase(); + if (groupFlags.containsKey(group)) { + StringBuilder sbuild = new StringBuilder(); + Map get = groupFlags.get(group); + Set> set = get.entrySet(); + synchronized (get) { + Iterator> it = set.iterator(); + while (it.hasNext()) { + Entry next = it.next(); + if (next.getValue()) { + sbuild.append("+").append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } else { + sbuild.append("-").append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } + } + } + if (sbuild.length() == 0) { + groupFlags.remove(group); + sbuild.append("none"); + } + return sbuild.toString(); + } else { + return "none"; + } } public void clearFlags() { - groupFlags.clear(); - playerFlags.clear(); - cuboidFlags.clear(); + groupFlags.clear(); + playerFlags.clear(); + cuboidFlags.clear(); } public void printFlags(Player player) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + listFlags()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ":" + ChatColor.GREEN + " " + listPlayerFlags(player.getName())); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + listGroupFlags()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + listOtherPlayersFlags(player.getName())); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + listFlags()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ":" + ChatColor.GREEN + " " + listPlayerFlags(player.getName())); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + listGroupFlags()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + listOtherPlayersFlags(player.getName())); } public void copyUserPermissions(String fromUser, String toUser) { - Map get = this.getPlayerFlags(fromUser, false); - if (get != null) { - Map targ = this.getPlayerFlags(toUser, true); - for (Entry entry : get.entrySet()) { - targ.put(entry.getKey(), entry.getValue()); - } - } + Map get = this.getPlayerFlags(fromUser, false); + if (get != null) { + Map targ = this.getPlayerFlags(toUser, true); + for (Entry entry : get.entrySet()) { + targ.put(entry.getKey(), entry.getValue()); + } + } } @Deprecated //Seemed to be a duplicate function of removeAllPlayerFlags()... deprecating public void clearPlayersFlags(String user) { - this.removeAllPlayerFlags(user); + this.removeAllPlayerFlags(user); } public void setParent(FlagPermissions p) { - parent = p; + parent = p; } public FlagPermissions getParent() { - return parent; + return parent; } } diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index d30208a45..084197e55 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -4,6 +4,7 @@ */ package com.bekvon.bukkit.residence.protection; + import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; @@ -26,232 +27,202 @@ */ public class LeaseManager { - private Map leaseExpireTime; + private Map leaseExpireTime; ResidenceManager manager; - public LeaseManager(ResidenceManager m) - { - manager = m; - leaseExpireTime = Collections.synchronizedMap(new HashMap()); - } - - public boolean leaseExpires(String area) - { - return leaseExpireTime.containsKey(area); - } - - public Date getExpireTime(String area) - { - if(leaseExpireTime.containsKey(area)) - { - return new Date(leaseExpireTime.get(area)); - } - return null; - } - - public void removeExpireTime(String area) - { - leaseExpireTime.remove(area); - } - - public void setExpireTime(String area, int days) - { - this.setExpireTime(null, area, days); - } - - public void setExpireTime(Player player, String area, int days) - { - area = area.replace(".", "_"); - if(manager.getByName(area)!=null) - { - leaseExpireTime.put(area, daysToMs(days) + System.currentTimeMillis()); - if(player!=null) - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("LeaseRenew", getExpireTime(area).toString())); - } - else - { - if(player!=null) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidArea")); - } - } - - public void renewArea(String area, Player player) - { - if(!leaseExpires(area)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("LeaseNotExpire")); - return; - } - PermissionGroup limits = Residence.getPermissionManager().getGroup(player); - int max = limits.getMaxLeaseTime(); - int add = limits.getLeaseGiveTime(); - int rem = daysRemaining(area); - EconomyInterface econ = Residence.getEconomyManager(); - if(econ!=null) - { - double cost = limits.getLeaseRenewCost(); - ClaimedResidence res = manager.getByName(area); - int amount = (int) Math.ceil((double)res.getTotalSize() * cost); - if(cost!=0D) - { - //Account account = iConomy.getBank().getAccount(player.getName()); - if(econ.canAfford(player.getName(), amount)/*account.hasEnough(amount)*/) - { - econ.subtract(player.getName(), amount); - econ.add("Lease Money", amount); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("MoneyCharged",ChatColor.YELLOW + String.format("%d",amount)+ChatColor.GREEN+"."+ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NotEnoughMoney")); - return; - } - } - } - if(rem+add>max) - { - setExpireTime(player,area,max); - player.sendMessage(ChatColor.GOLD+Residence.getLanguage().getPhrase("LeaseRenewMax")); - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("LeaseRenew",ChatColor.GREEN + "" + getExpireTime(area)) +ChatColor.YELLOW); - return; - } - Long get = leaseExpireTime.get(area); - if(get!=null) - { - get = get + daysToMs(add); - leaseExpireTime.put(area, get); - } - else - leaseExpireTime.put(area, daysToMs(add)); - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("LeaseRenew",ChatColor.GREEN + "" + getExpireTime(area))); - } - - public int getRenewCost(ClaimedResidence res) - { - PermissionGroup limits = Residence.getPermissionManager().getGroup(res.getPermissions().getOwner(), res.getPermissions().getWorld()); - double cost = limits.getLeaseRenewCost(); - int amount = (int) Math.ceil((double)res.getTotalSize() * cost); - return amount; - } - - private long daysToMs(int days) - { - return (((long)days) * 24L * 60L * 60L * 1000L); - } - - private int msToDays(long ms) - { - return (int) Math.ceil(((((double)ms/1000D)/60D)/60D)/24D); - } - - private int daysRemaining(String area) - { - Long get = leaseExpireTime.get(area); - if(get<=System.currentTimeMillis()) - return 0; - return msToDays((int)(get-System.currentTimeMillis())); + public LeaseManager(ResidenceManager m) { + manager = m; + leaseExpireTime = Collections.synchronizedMap(new HashMap()); + } + + public boolean leaseExpires(String area) { + return leaseExpireTime.containsKey(area); + } + + public Date getExpireTime(String area) { + if (leaseExpireTime.containsKey(area)) { + return new Date(leaseExpireTime.get(area)); + } + return null; + } + + public void removeExpireTime(String area) { + leaseExpireTime.remove(area); + } + + public void setExpireTime(String area, int days) { + this.setExpireTime(null, area, days); + } + + public void setExpireTime(Player player, String area, int days) { + area = area.replace(".", "_"); + if (manager.getByName(area) != null) { + leaseExpireTime.put(area, daysToMs(days) + System.currentTimeMillis()); + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("LeaseRenew", getExpireTime(area).toString())); + } else { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); + } + } + + public void renewArea(String area, Player player) { + if (!leaseExpires(area)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("LeaseNotExpire")); + return; + } + PermissionGroup limits = Residence.getPermissionManager().getGroup(player); + int max = limits.getMaxLeaseTime(); + int add = limits.getLeaseGiveTime(); + int rem = daysRemaining(area); + EconomyInterface econ = Residence.getEconomyManager(); + if (econ != null) { + double cost = limits.getLeaseRenewCost(); + ClaimedResidence res = manager.getByName(area); + int amount = (int) Math.ceil((double) res.getTotalSize() * cost); + if (cost != 0D) { + //Account account = iConomy.getBank().getAccount(player.getName()); + if (econ.canAfford(player.getName(), amount)/*account.hasEnough(amount)*/) { + econ.subtract(player.getName(), amount); + econ.add("Lease Money", amount); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); + return; + } + } + } + if (rem + add > max) { + setExpireTime(player, area, max); + player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("LeaseRenewMax")); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseRenew", ChatColor.GREEN + "" + getExpireTime(area)) + ChatColor.YELLOW); + return; + } + Long get = leaseExpireTime.get(area); + if (get != null) { + get = get + daysToMs(add); + leaseExpireTime.put(area, get); + } else + leaseExpireTime.put(area, daysToMs(add)); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseRenew", ChatColor.GREEN + "" + getExpireTime(area))); + } + + public int getRenewCost(ClaimedResidence res) { + PermissionGroup limits = Residence.getPermissionManager().getGroup(res.getPermissions().getOwner(), res.getPermissions().getWorld()); + double cost = limits.getLeaseRenewCost(); + int amount = (int) Math.ceil((double) res.getTotalSize() * cost); + return amount; + } + + private long daysToMs(int days) { + return (((long) days) * 24L * 60L * 60L * 1000L); + } + + private int msToDays(long ms) { + return (int) Math.ceil(((((double) ms / 1000D) / 60D) / 60D) / 24D); + } + + private int daysRemaining(String area) { + Long get = leaseExpireTime.get(area); + if (get <= System.currentTimeMillis()) + return 0; + return msToDays((int) (get - System.currentTimeMillis())); } public void doExpirations() { - Set> set = leaseExpireTime.entrySet(); - Iterator> it = set.iterator(); - while (it.hasNext()) { - Entry next = it.next(); - if (next.getValue() <= System.currentTimeMillis()) { - String resname = next.getKey(); - ClaimedResidence res = Residence.getResidenceManager().getByName(resname); - if (res == null) { - it.remove(); - } else { - boolean renewed = false; - String owner = res.getPermissions().getOwner(); - PermissionGroup limits = Residence.getPermissionManager().getGroup(owner, res.getPermissions().getWorld()); - int cost = this.getRenewCost(res); - if (Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().autoRenewLeases()) { - if (cost == 0) { - renewed = true; - } else if (res.getBank().hasEnough(cost)) { - res.getBank().subtract(cost); - renewed = true; - if(Residence.getConfigManager().debugEnabled()) - System.out.println("Lease Renewed From Residence Bank: "+resname); - } else if (Residence.getEconomyManager().canAfford(owner, cost)) { - if (Residence.getEconomyManager().subtract(owner, cost)) { - renewed = true; - if(Residence.getConfigManager().debugEnabled()) - System.out.println("Lease Renewed From Economy: "+resname); - } - } - } - if (!renewed) { - if (!Residence.getConfigManager().enabledRentSystem() || !Residence.getRentManager().isRented(resname)) { - ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(null, res, DeleteCause.LEASE_EXPIRE); - Residence.getServ().getPluginManager().callEvent(resevent); - if (!resevent.isCancelled()) { - manager.removeResidence(next.getKey()); - it.remove(); - if(Residence.getConfigManager().debugEnabled()) - System.out.println("Lease NOT removed, Removing: "+resname); - } - } - } else { - if (Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().enableLeaseMoneyAccount()) { - Residence.getEconomyManager().add("Lease Money", cost); - } - if(Residence.getConfigManager().debugEnabled()) - System.out.println("Lease Renew Old: "+next.getValue()); - next.setValue(System.currentTimeMillis() + daysToMs(limits.getLeaseGiveTime())); - if(Residence.getConfigManager().debugEnabled()) - System.out.println("Lease Renew New: " + next.getValue()); - } - } - } - } - } - - public void resetLeases() - { - leaseExpireTime.clear(); - String[] list = manager.getResidenceList(); - for (String item : list) { - if (item != null) { - ClaimedResidence res = Residence.getResidenceManager().getByName(item); - PermissionGroup group = Residence.getPermissionManager().getGroup(res.getPermissions().getOwner(),res.getPermissions().getWorld()); - this.setExpireTime(null, item, group.getLeaseGiveTime()); - } - } - System.out.println("[Residence] - Set default leases."); - } - - public Map save() - { - return leaseExpireTime; - } - - public void updateLeaseName(String oldName, String newName) - { - if(leaseExpireTime.containsKey(oldName)) - { - leaseExpireTime.put(newName, leaseExpireTime.get(oldName)); - leaseExpireTime.remove(oldName); - } - } - - public static LeaseManager load(Map root,ResidenceManager m) - { - LeaseManager l = new LeaseManager(m); - if(root!=null) - { - for(Object val : root.values()) - { - if(!(val instanceof Long)) - { - root.remove(val); - } - } - l.leaseExpireTime = Collections.synchronizedMap(root); - } - return l; + Set> set = leaseExpireTime.entrySet(); + Iterator> it = set.iterator(); + while (it.hasNext()) { + Entry next = it.next(); + if (next.getValue() <= System.currentTimeMillis()) { + String resname = next.getKey(); + ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + if (res == null) { + it.remove(); + } else { + boolean renewed = false; + String owner = res.getPermissions().getOwner(); + PermissionGroup limits = Residence.getPermissionManager().getGroup(owner, res.getPermissions().getWorld()); + int cost = this.getRenewCost(res); + if (Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().autoRenewLeases()) { + if (cost == 0) { + renewed = true; + } else if (res.getBank().hasEnough(cost)) { + res.getBank().subtract(cost); + renewed = true; + if (Residence.getConfigManager().debugEnabled()) + System.out.println("Lease Renewed From Residence Bank: " + resname); + } else if (Residence.getEconomyManager().canAfford(owner, cost)) { + if (Residence.getEconomyManager().subtract(owner, cost)) { + renewed = true; + if (Residence.getConfigManager().debugEnabled()) + System.out.println("Lease Renewed From Economy: " + resname); + } + } + } + if (!renewed) { + if (!Residence.getConfigManager().enabledRentSystem() || !Residence.getRentManager().isRented(resname)) { + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(null, res, DeleteCause.LEASE_EXPIRE); + Residence.getServ().getPluginManager().callEvent(resevent); + if (!resevent.isCancelled()) { + manager.removeResidence(next.getKey()); + it.remove(); + if (Residence.getConfigManager().debugEnabled()) + System.out.println("Lease NOT removed, Removing: " + resname); + } + } + } else { + if (Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().enableLeaseMoneyAccount()) { + Residence.getEconomyManager().add("Lease Money", cost); + } + if (Residence.getConfigManager().debugEnabled()) + System.out.println("Lease Renew Old: " + next.getValue()); + next.setValue(System.currentTimeMillis() + daysToMs(limits.getLeaseGiveTime())); + if (Residence.getConfigManager().debugEnabled()) + System.out.println("Lease Renew New: " + next.getValue()); + } + } + } + } + } + + public void resetLeases() { + leaseExpireTime.clear(); + String[] list = manager.getResidenceList(); + for (String item : list) { + if (item != null) { + ClaimedResidence res = Residence.getResidenceManager().getByName(item); + PermissionGroup group = Residence.getPermissionManager().getGroup(res.getPermissions().getOwner(), res.getPermissions().getWorld()); + this.setExpireTime(null, item, group.getLeaseGiveTime()); + } + } + System.out.println("[Residence] - Set default leases."); + } + + public Map save() { + return leaseExpireTime; + } + + public void updateLeaseName(String oldName, String newName) { + if (leaseExpireTime.containsKey(oldName)) { + leaseExpireTime.put(newName, leaseExpireTime.get(oldName)); + leaseExpireTime.remove(oldName); + } + } + + @SuppressWarnings("unchecked") + public static LeaseManager load(@SuppressWarnings("rawtypes") Map root, ResidenceManager m) { + LeaseManager l = new LeaseManager(m); + if (root != null) { + for (Object val : root.values()) { + if (!(val instanceof Long)) { + root.remove(val); + } + } + l.leaseExpireTime = Collections.synchronizedMap(root); + } + return l; } } diff --git a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java index 8cf2ec23f..c075c3a9e 100644 --- a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java @@ -106,6 +106,7 @@ public void printList(Player player, String listname) list.printFlags(player); } + @SuppressWarnings({ "unchecked", "rawtypes" }) public Map save() { Map root = new LinkedHashMap<>(); @@ -121,6 +122,7 @@ public Map save() } return root; } + @SuppressWarnings("unchecked") public static PermissionListManager load(Map root) { PermissionListManager p = new PermissionListManager(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 4749ac2a8..3d18e015e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -24,12 +24,14 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.Debug; /** * @@ -40,661 +42,718 @@ public class ResidenceManager { protected Map>> chunkResidences; public ResidenceManager() { - residences = new HashMap<>(); - chunkResidences = new HashMap<>(); + residences = new HashMap<>(); + chunkResidences = new HashMap<>(); } public ClaimedResidence getByLoc(Location loc) { - if (loc == null) - return null; - ClaimedResidence res = null; - String world = loc.getWorld().getName(); - ChunkRef chunk = new ChunkRef(loc); - if (chunkResidences.containsKey(world)) { - if (chunkResidences.get(world).containsKey(chunk)) { - for (String key : chunkResidences.get(world).get(chunk)) { - ClaimedResidence entry = residences.get(key); - if (entry.containsLoc(loc)) { - res = entry; - break; - } - } - } - } - if (res==null) - return null; - - ClaimedResidence subres = res.getSubzoneByLoc(loc); - if (subres == null) - return res; - return subres; + if (loc == null) + return null; + ClaimedResidence res = null; + String world = loc.getWorld().getName(); + ChunkRef chunk = new ChunkRef(loc); + //if (chunkResidences.containsKey(world)) { + + Map> ChunkMap = chunkResidences.get(world); + + if (ChunkMap.containsKey(chunk)) { + for (String key : ChunkMap.get(chunk)) { + ClaimedResidence entry = residences.get(key); + if (entry.containsLoc(loc)) { + res = entry; + break; + } + } + } + //} + if (res == null) + return null; + + ClaimedResidence subres = res.getSubzoneByLoc(loc); + if (subres == null) + return res; + return subres; } public ClaimedResidence getByName(String name) { - if (name == null) { - return null; - } - String[] split = name.split("\\."); - if (split.length == 1) { - return residences.get(name); - } - ClaimedResidence res = residences.get(split[0]); - for (int i = 1; i < split.length; i++) { - if (res != null) { - res = res.getSubzone(split[i]); - } else { - return null; - } - } - return res; + if (name == null) { + return null; + } + String[] split = name.split("\\."); + if (split.length == 1) { + return residences.get(name); + } + ClaimedResidence res = residences.get(split[0]); + for (int i = 1; i < split.length; i++) { + if (res != null) { + res = res.getSubzone(split[i]); + } else { + return null; + } + } + return res; } public String getNameByLoc(Location loc) { - ClaimedResidence res = this.getByLoc(loc); - if(res==null) - return null; - String name = res.getName(); - if (name == null) - return null; - String szname = res.getSubzoneNameByLoc(loc); - if (szname != null) - return name + "." + szname; - return name; + ClaimedResidence res = this.getByLoc(loc); + if (res == null) + return null; + String name = res.getName(); + if (name == null) + return null; + String szname = res.getSubzoneNameByLoc(loc); + if (szname != null) + return name + "." + szname; + return name; } public String getNameByRes(ClaimedResidence res) { - Set> set = residences.entrySet(); - for (Entry check : set) { - if (check.getValue() == res) { - return check.getKey(); - } - String n = check.getValue().getSubzoneNameByRes(res); - if (n != null) { - return check.getKey() + "." + n; - } - } - return null; + Set> set = residences.entrySet(); + for (Entry check : set) { + if (check.getValue() == res) { + return check.getKey(); + } + String n = check.getValue().getSubzoneNameByRes(res); + if (n != null) { + return check.getKey() + "." + n; + } + } + return null; } public boolean addResidence(String name, Location loc1, Location loc2) { - return this.addResidence(name, "Server Land", loc1, loc2); + return this.addResidence(name, "Server Land", loc1, loc2); } public boolean addResidence(String name, String owner, Location loc1, Location loc2) { - return this.addResidence(null, owner, name, loc1, loc2, true); + return this.addResidence(null, owner, name, loc1, loc2, true); } public boolean addResidence(Player player, String name, Location loc1, Location loc2, boolean resadmin) { - return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin); + return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin); } public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { - if (!Residence.validName(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); - } - return false; - } - if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); - } - return false; - } - PermissionGroup group = Residence.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); - boolean createpermission = group.canCreateResidences() || (player == null ? true : player.hasPermission("residence.create")); - if (!createpermission && !resadmin) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } - return false; - } - if (player != null) { - if (getOwnedZoneCount(player.getName()) >= group.getMaxZones() && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); - return false; - } - } - CuboidArea newArea = new CuboidArea(loc1, loc2); - ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName()); - newRes.getPermissions().applyDefaultFlags(); - newRes.setEnterMessage(group.getDefaultEnterMessage()); - newRes.setLeaveMessage(group.getDefaultLeaveMessage()); - - ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); - Residence.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) { - return false; - } - newArea = resevent.getPhysicalArea(); - name = resevent.getResidenceName(); - if (residences.containsKey(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + name + ChatColor.RED)); - } - return false; - } - if (player != null) { - newRes.addArea(player, newArea, "main", resadmin); - } else { - newRes.addArea(newArea, "main"); - } - if (newRes.getAreaCount() != 0) { - residences.put(name, newRes); - calculateChunks(name); - Residence.getLeaseManager().removeExpireTime(name); - if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceCreate", ChatColor.YELLOW + name + ChatColor.GREEN)); - } - if (Residence.getConfigManager().useLeases()) { - if (player != null) { - Residence.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); - } else { - Residence.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); - } - } - return true; - } - return false; + + long time = System.currentTimeMillis(); + if (!Residence.validName(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + } + return false; + } + if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + } + return false; + } + Debug.D("1 " + (System.currentTimeMillis() - time)); + PermissionGroup group = Residence.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); + boolean createpermission = group.canCreateResidences() || (player == null ? true : player.hasPermission("residence.create")); + if (!createpermission && !resadmin) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } + return false; + } + Debug.D("2 " + (System.currentTimeMillis() - time)); + if (player != null) { + if (!hasMaxZones(player.getName(), group.getMaxZones()) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); + return false; + } + } + Debug.D("3 " + (System.currentTimeMillis() - time)); + CuboidArea newArea = new CuboidArea(loc1, loc2); + ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName()); + newRes.getPermissions().applyDefaultFlags(); + newRes.setEnterMessage(group.getDefaultEnterMessage()); + newRes.setLeaveMessage(group.getDefaultLeaveMessage()); + + ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) { + return false; + } + newArea = resevent.getPhysicalArea(); + name = resevent.getResidenceName(); + if (residences.containsKey(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + name + ChatColor.RED)); + } + return false; + } + newRes.BlockSellPrice = group.getSellPerBlock(); + if (player != null) { + newRes.addArea(player, newArea, "main", resadmin); + } else { + newRes.addArea(newArea, "main"); + } + if (newRes.getAreaCount() != 0) { + residences.put(name, newRes); + calculateChunks(name); + Residence.getLeaseManager().removeExpireTime(name); + if (player != null) { + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceCreate", ChatColor.YELLOW + name + ChatColor.GREEN)); + } + if (Residence.getConfigManager().useLeases()) { + if (player != null) { + Residence.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); + } else { + Residence.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); + } + } + return true; + } + return false; } public void listResidences(Player player) { - this.listResidences(player, player.getName(), 1); + this.listResidences(player, player.getName(), 1); } public void listResidences(Player player, int page) { - this.listResidences(player, player.getName(), page); + this.listResidences(player, player.getName(), page); } public void listResidences(Player player, String targetplayer) { - this.listResidences(player, targetplayer, 1); + this.listResidences(player, targetplayer, 1); } public void listResidences(Player player, String targetplayer, int page) { - this.listResidences(player, targetplayer, page, false); + this.listResidences(player, targetplayer, page, false); } public void listResidences(Player player, int page, boolean showhidden) { - this.listResidences(player, player.getName(), page, showhidden); + this.listResidences(player, player.getName(), page, showhidden); } public void listResidences(Player player, String targetplayer, int page, boolean showhidden) { - this.listResidences(player, targetplayer, page, showhidden, false); + this.listResidences(player, targetplayer, page, showhidden, false); } public void listResidences(Player player, String targetplayer, int page, boolean showhidden, boolean showsubzones) { - if (showhidden && !Residence.isResAdminOn(player) && !player.getName().equals(targetplayer)) { - showhidden = false; - } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, this.getResidenceList(targetplayer, showhidden, showsubzones, true), page); + if (showhidden && !Residence.isResAdminOn(player) && !player.getName().equals(targetplayer)) { + showhidden = false; + } + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, this.getResidenceList(targetplayer, showhidden, + showsubzones, true), page); } public void listAllResidences(Player player, int page) { - this.listAllResidences(player, page, false); + this.listAllResidences(player, page, false); } public void listAllResidences(Player player, int page, boolean showhidden) { - this.listAllResidences(player, page, showhidden, false); + this.listAllResidences(player, page, showhidden, false); } public void listAllResidences(Player player, int page, boolean showhidden, boolean showsubzones) { - if (showhidden && !Residence.isResAdminOn(player)) { - showhidden = false; - } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences"), this.getResidenceList(null, showhidden, showsubzones, true), page); + if (showhidden && !Residence.isResAdminOn(player)) { + showhidden = false; + } + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences"), this.getResidenceList(null, showhidden, showsubzones, true), page); } public String[] getResidenceList() { - return this.getResidenceList(true, true).toArray(new String[0]); + return this.getResidenceList(true, true).toArray(new String[0]); } public ArrayList getResidenceList(boolean showhidden, boolean showsubzones) { - return this.getResidenceList(null, showhidden, showsubzones, false); + return this.getResidenceList(null, showhidden, showsubzones, false); } public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones) { - return this.getResidenceList(targetplayer, showhidden, showsubzones, false); + return this.getResidenceList(targetplayer, showhidden, showsubzones, false); } public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean formattedOutput) { - ArrayList list = new ArrayList<>(); - for (Entry res : residences.entrySet()) { - this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), res.getValue(), list, formattedOutput); - } - return list; - } - - private void getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, String parentzone, String resname, ClaimedResidence res, ArrayList list, boolean formattedOutput) { - boolean hidden = res.getPermissions().has("hidden", false); - if ((showhidden) || (!showhidden && !hidden)) { - if (targetplayer == null || res.getPermissions().getOwner().equalsIgnoreCase(targetplayer)) { - if (formattedOutput) { - list.add(ChatColor.GREEN + parentzone + resname + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("World") + ": " + res.getWorld()); - } else { - list.add(parentzone + resname); - } - } - if (showsubzones) { - for (Entry sz : res.subzones.entrySet()) { - this.getResidenceList(targetplayer, showhidden, showsubzones, parentzone + resname + ".", sz.getKey(), sz.getValue(), list, formattedOutput); - } - } - } + ArrayList list = new ArrayList<>(); + for (Entry res : residences.entrySet()) { + this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), res.getValue(), list, formattedOutput); + } + return list; + } + + private void getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, String parentzone, String resname, ClaimedResidence res, + ArrayList list, boolean formattedOutput) { + boolean hidden = res.getPermissions().has("hidden", false); + if ((showhidden) || (!showhidden && !hidden)) { + if (targetplayer == null || res.getPermissions().getOwner().equalsIgnoreCase(targetplayer)) { + if (formattedOutput) { + list.add(ChatColor.GREEN + parentzone + resname + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("World") + ": " + res.getWorld()); + } else { + list.add(parentzone + resname); + } + } + if (showsubzones) { + for (Entry sz : res.subzones.entrySet()) { + this.getResidenceList(targetplayer, showhidden, showsubzones, parentzone + resname + ".", sz.getKey(), sz.getValue(), list, formattedOutput); + } + } + } } public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResidence) { - Set> set = residences.entrySet(); - for (Entry entry : set) { - ClaimedResidence check = entry.getValue(); - if (check != parentResidence && check.checkCollision(newarea)) { - return entry.getKey(); - } - } - return null; + Set> set = residences.entrySet(); + for (Entry entry : set) { + ClaimedResidence check = entry.getValue(); + if (check != parentResidence && check.checkCollision(newarea)) { + return entry.getKey(); + } + } + return null; } public void removeResidence(String name) { - this.removeResidence(null, name, true); + this.removeResidence(null, name, true); } public void removeResidence(Player player, String name, boolean resadmin) { - ClaimedResidence res = this.getByName(name); - if (res != null) { - if (player != null && !resadmin) { - if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - } - ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - Residence.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) { - return; - } - ClaimedResidence parent = res.getParent(); - if (parent == null) { - removeChunkList(name); - residences.remove(name); - if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); - } - } else { - String[] split = name.split("\\."); - if (player != null) { - parent.removeSubzone(player, split[split.length - 1], true); - } else { - parent.removeSubzone(split[split.length - 1]); - } - } - // Residence.getLeaseManager().removeExpireTime(name); - causing - // concurrent modification exception in lease manager... worked - // around for now - Residence.getRentManager().removeRentable(name); - - } else { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - } + ClaimedResidence res = this.getByName(name); + if (res != null) { + if (player != null && !resadmin) { + if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + } + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) { + return; + } + ClaimedResidence parent = res.getParent(); + if (parent == null) { + removeChunkList(name); + residences.remove(name); + if (player != null) { + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); + } + } else { + String[] split = name.split("\\."); + if (player != null) { + parent.removeSubzone(player, split[split.length - 1], true); + } else { + parent.removeSubzone(split[split.length - 1]); + } + } + // Residence.getLeaseManager().removeExpireTime(name); - causing + // concurrent modification exception in lease manager... worked + // around for now + Residence.getRentManager().removeRentable(name); + if (parent == null && Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().useResMoneyBack()) { + int chargeamount = (int) Math.ceil((double) res.getAreaArray()[0].getSize() * res.getBlockSellPrice()); + TransactionManager.giveEconomyMoney(player, chargeamount); + } + } else { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + } + } } public void removeAllByOwner(String owner) { - this.removeAllByOwner(null, owner, residences); + this.removeAllByOwner(null, owner, residences); } public void removeAllByOwner(Player player, String owner) { - this.removeAllByOwner(player, owner, residences); + this.removeAllByOwner(player, owner, residences); } private void removeAllByOwner(Player player, String owner, Map resholder) { - Iterator it = resholder.values().iterator(); - while (it.hasNext()) { - ClaimedResidence res = it.next(); - if (res.getOwner().equalsIgnoreCase(owner)) { - ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - Residence.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return; - removeChunkList(res.getName()); - it.remove(); - } else { - this.removeAllByOwner(player, owner, res.subzones); - } - } + Iterator it = resholder.values().iterator(); + while (it.hasNext()) { + ClaimedResidence res = it.next(); + if (res.getOwner().equalsIgnoreCase(owner)) { + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; + removeChunkList(res.getName()); + it.remove(); + } else { + this.removeAllByOwner(player, owner, res.subzones); + } + } } public int getOwnedZoneCount(String player) { - Collection set = residences.values(); - int count = 0; - for (ClaimedResidence res : set) { - if (res.getPermissions().getOwner().equalsIgnoreCase(player)) { - count++; - } - } - return count; + Collection set = residences.values(); + int count = 0; + for (ClaimedResidence res : set) { + if (res.getPermissions().getOwner().equalsIgnoreCase(player)) { + count++; + } + } + return count; + } + + public boolean hasMaxZones(String player, int target) { + Collection set = residences.values(); + int count = 0; + for (ClaimedResidence res : set) { + if (res.getPermissions().getOwner().equalsIgnoreCase(player)) { + count++; + if (count >= target) + return false; + } + } + return true; } public void printAreaInfo(String areaname, Player player) { - ClaimedResidence res = this.getByName(areaname); - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - ResidencePermissions perms = res.getPermissions(); - if (Residence.getConfigManager().enableEconomy()) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname + " " + ChatColor.YELLOW + "Bank: " + ChatColor.GOLD + res.getBank().getStoredMoney()); - } else { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname); - } - if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " Rented by: " + ChatColor.RED + Residence.getRentManager().getRentingPlayer(areaname)); - } else { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("World") + ": " + ChatColor.RED + perms.getWorld()); - } - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + perms.listFlags()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ": " + ChatColor.GREEN + perms.listPlayerFlags(player.getName())); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + perms.listGroupFlags()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + perms.listOtherPlayersFlags(player.getName())); - String aid = res.getAreaIDbyLoc(player.getLocation()); - if (aid != null) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CurrentArea") + ": " + ChatColor.GOLD + aid); - } - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Total.Size") + ":" + ChatColor.LIGHT_PURPLE + " " + res.getTotalSize()); - if (aid != null) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsT") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase("CoordsTop", res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockX() + "." + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockZ())); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsB") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase("CoordsBottom", res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockX() + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockZ())); - } - if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + Residence.getLeaseManager().getExpireTime(areaname)); - } + ClaimedResidence res = this.getByName(areaname); + if (res == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + ResidencePermissions perms = res.getPermissions(); + if (Residence.getConfigManager().enableEconomy()) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname + " " + ChatColor.YELLOW + + "Bank: " + ChatColor.GOLD + res.getBank().getStoredMoney()); + } else { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname); + } + if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + + " Rented by: " + ChatColor.RED + Residence.getRentManager().getRentingPlayer(areaname)); + } else { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " - " + + Residence.getLanguage().getPhrase("World") + ": " + ChatColor.RED + perms.getWorld()); + } + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + perms.listFlags()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ": " + ChatColor.GREEN + perms.listPlayerFlags(player.getName())); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + perms.listGroupFlags()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + perms.listOtherPlayersFlags(player + .getName())); + String aid = res.getAreaIDbyLoc(player.getLocation()); + if (aid != null) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CurrentArea") + ": " + ChatColor.GOLD + aid); + } + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Total.Size") + ":" + ChatColor.LIGHT_PURPLE + " " + res.getTotalSize()); + + if (Residence.getEconomyManager() != null) { + PermissionGroup group = Residence.getPermissionManager().getGroup(res.getOwner(), res.getWorld()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TotalWorth", String.valueOf((res.getTotalSize() * group.getCostPerBlock())).replace( + ".", ",") + "." + + String.valueOf(res.getTotalSize() * res.getBlockSellPrice()).replace(".", ","))); + } + + if (aid != null) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsT") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase( + "CoordsTop", res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockX() + "." + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockY() + "." + + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockZ())); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsB") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase( + "CoordsBottom", res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockX() + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockY() + + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockZ())); + } + if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + Residence.getLeaseManager() + .getExpireTime(areaname)); + } } public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { - ClaimedResidence reciever = this.getByName(targetArea); - ClaimedResidence source = this.getByName(sourceArea); - if (source == null || reciever == null) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - if (!resadmin) { - if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - } - reciever.getPermissions().applyTemplate(reqPlayer, source.getPermissions(), resadmin); + ClaimedResidence reciever = this.getByName(targetArea); + ClaimedResidence source = this.getByName(sourceArea); + if (source == null || reciever == null) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + if (!resadmin) { + if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + } + reciever.getPermissions().applyTemplate(reqPlayer, source.getPermissions(), resadmin); } public Map save() { - Map worldmap = new LinkedHashMap<>(); - for (World world : Residence.getServ().getWorlds()) { - Map resmap = new LinkedHashMap<>(); - for (Entry res : residences.entrySet()) { - if (res.getValue().getWorld().equals(world.getName())) { - try { - resmap.put(res.getKey(), res.getValue().save()); - } catch (Exception ex) { - System.out.println("[Residence] Failed to save residence (" + res.getKey() + ")!"); - Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); - } - } - } - worldmap.put(world.getName(), resmap); - } - return worldmap; + Map worldmap = new LinkedHashMap<>(); + for (World world : Residence.getServ().getWorlds()) { + Map resmap = new LinkedHashMap<>(); + for (Entry res : residences.entrySet()) { + if (res.getValue().getWorld().equals(world.getName())) { + try { + resmap.put(res.getKey(), res.getValue().save()); + } catch (Exception ex) { + System.out.println("[Residence] Failed to save residence (" + res.getKey() + ")!"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + worldmap.put(world.getName(), resmap); + } + return worldmap; } public static ResidenceManager load(Map root) throws Exception { - ResidenceManager resm = new ResidenceManager(); - if (root == null) { - return resm; - } - for (World world : Residence.getServ().getWorlds()) { - Map reslist = (Map) root.get(world.getName()); - if (reslist != null) { - try { - resm.chunkResidences.put(world.getName(), loadMap(reslist, resm)); - } catch (Exception ex) { - System.out.println("Error in loading save file for world: " + world.getName()); - if (Residence.getConfigManager().stopOnSaveError()) - throw (ex); - } - } - } - return resm; - } - - public static Map> loadMap(Map root, ResidenceManager resm) throws Exception { - Map> retRes = new HashMap<>(); - if (root != null) { - for (Entry res : root.entrySet()) { - try { - ClaimedResidence residence = ClaimedResidence.load((Map) res.getValue(), null); - for (ChunkRef chunk : getChunks(residence)) { - List ress = new ArrayList<>(); - if (retRes.containsKey(chunk)) { - ress.addAll(retRes.get(chunk)); - } - ress.add(res.getKey()); - retRes.put(chunk, ress); - } - resm.residences.put(res.getKey(), residence); - } catch (Exception ex) { - System.out.print("[Residence] Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:"); - Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); - if (Residence.getConfigManager().stopOnSaveError()) { - throw (ex); - } - } - } - } - return retRes; + ResidenceManager resm = new ResidenceManager(); + if (root == null) + return resm; + + for (World world : Residence.getServ().getWorlds()) { + @SuppressWarnings("unchecked") + Map reslist = (Map) root.get(world.getName()); + if (reslist != null) { + try { + resm.chunkResidences.put(world.getName(), loadMap(world.getName(), reslist, resm)); + } catch (Exception ex) { + System.out.println("Error in loading save file for world: " + world.getName()); + if (Residence.getConfigManager().stopOnSaveError()) + throw (ex); + } + } + } + return resm; + } + + public static Map> loadMap(String worldName, Map root, ResidenceManager resm) throws Exception { + Map> retRes = new HashMap<>(); + if (root != null) { + for (Entry res : root.entrySet()) { + + try { + @SuppressWarnings("unchecked") + ClaimedResidence residence = ClaimedResidence.load((Map) res.getValue(), null); + if (residence.getPermissions().getOwnerUUID().toString().equals("ffffffff-ffff-ffff-ffff-ffffffffffff")) + continue; + + for (ChunkRef chunk : getChunks(residence)) { + List ress = new ArrayList<>(); + if (retRes.containsKey(chunk)) { + ress.addAll(retRes.get(chunk)); + } + ress.add(res.getKey()); + retRes.put(chunk, ress); + } + + resm.residences.put(res.getKey(), residence); + } catch (Exception ex) { + System.out.print("[Residence] Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); + if (Residence.getConfigManager().stopOnSaveError()) { + throw (ex); + } + } + } + } + return retRes; } private static List getChunks(ClaimedResidence res) { - List chunks = new ArrayList<>(); - for (CuboidArea area : res.getAreaArray()) { - chunks.addAll(area.getChunks()); - } - return chunks; + List chunks = new ArrayList<>(); + for (CuboidArea area : res.getAreaArray()) { + chunks.addAll(area.getChunks()); + } + return chunks; } public boolean renameResidence(String oldName, String newName) { - return this.renameResidence(null, oldName, newName, true); + return this.renameResidence(null, oldName, newName, true); } public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { - if (!Residence.validName(newName)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); - return false; - } - ClaimedResidence res = this.getByName(oldName); - if (res == null) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return false; - } - if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { - if (res.getParent() == null) { - if (residences.containsKey(newName)) { - if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + newName + ChatColor.RED)); - return false; - } - ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); - Residence.getServ().getPluginManager().callEvent(resevent); - removeChunkList(oldName); - residences.put(newName, res); - residences.remove(oldName); - calculateChunks(newName); - if (Residence.getConfigManager().useLeases()) { - Residence.getLeaseManager().updateLeaseName(oldName, newName); - } - if (Residence.getConfigManager().enabledRentSystem()) { - Residence.getRentManager().updateRentableName(oldName, newName); - } - if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRename", ChatColor.YELLOW + oldName + ChatColor.GREEN + "." + ChatColor.YELLOW + newName + ChatColor.GREEN)); - } - return true; - } else { - String[] oldname = oldName.split("\\."); - ClaimedResidence parent = res.getParent(); - return parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); - } - } else { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } - return false; - } + if (!Residence.validName(newName)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + return false; + } + ClaimedResidence res = this.getByName(oldName); + if (res == null) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + } + return false; + } + if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { + if (res.getParent() == null) { + if (residences.containsKey(newName)) { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + newName + ChatColor.RED)); + return false; + } + ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); + Residence.getServ().getPluginManager().callEvent(resevent); + removeChunkList(oldName); + residences.put(newName, res); + residences.remove(oldName); + calculateChunks(newName); + if (Residence.getConfigManager().useLeases()) { + Residence.getLeaseManager().updateLeaseName(oldName, newName); + } + if (Residence.getConfigManager().enabledRentSystem()) { + Residence.getRentManager().updateRentableName(oldName, newName); + } + if (player != null) { + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRename", ChatColor.YELLOW + oldName + ChatColor.GREEN + "." + + ChatColor.YELLOW + newName + ChatColor.GREEN)); + } + return true; + } else { + String[] oldname = oldName.split("\\."); + ClaimedResidence parent = res.getParent(); + return parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); + } + } else { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } + return false; + } } public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { - ClaimedResidence res = getByName(residence); - if (res == null) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - Player giveplayer = Residence.getServ().getPlayer(targPlayer); - if (giveplayer == null || !giveplayer.isOnline()) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotOnline")); - return; - } - CuboidArea[] areas = res.getAreaArray(); - PermissionGroup g = Residence.getPermissionManager().getGroup(giveplayer); - if (areas.length > g.getMaxPhysicalPerResidence() && !resadmin) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); - return; - } - if (getOwnedZoneCount(giveplayer.getName()) >= g.getMaxZones() && !resadmin) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); - return; - } - if (!resadmin) { - for (CuboidArea area : areas) { - if (!g.inLimits(area)) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); - return; - } - } - } - res.getPermissions().setOwner(giveplayer.getName(), true); - // Fix phrases here - reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceGive", ChatColor.YELLOW + residence + ChatColor.GREEN + "." + ChatColor.YELLOW + giveplayer.getName() + ChatColor.GREEN)); - giveplayer.sendMessage(Residence.getLanguage().getPhrase("ResidenceRecieve", ChatColor.GREEN + residence + ChatColor.YELLOW + "." + ChatColor.GREEN + reqPlayer.getName() + ChatColor.YELLOW)); + ClaimedResidence res = getByName(residence); + if (res == null) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + Player giveplayer = Residence.getServ().getPlayer(targPlayer); + if (giveplayer == null || !giveplayer.isOnline()) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotOnline")); + return; + } + CuboidArea[] areas = res.getAreaArray(); + PermissionGroup g = Residence.getPermissionManager().getGroup(giveplayer); + if (areas.length > g.getMaxPhysicalPerResidence() && !resadmin) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); + return; + } + if (!hasMaxZones(giveplayer.getName(), g.getMaxZones()) && !resadmin) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); + return; + } + if (!resadmin) { + for (CuboidArea area : areas) { + if (!g.inLimits(area)) { + reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); + return; + } + } + } + res.getPermissions().setOwner(giveplayer.getName(), true); + // Fix phrases here + reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceGive", ChatColor.YELLOW + residence + ChatColor.GREEN + "." + ChatColor.YELLOW + + giveplayer.getName() + ChatColor.GREEN)); + giveplayer.sendMessage(Residence.getLanguage().getPhrase("ResidenceRecieve", ChatColor.GREEN + residence + ChatColor.YELLOW + "." + ChatColor.GREEN + reqPlayer + .getName() + ChatColor.YELLOW)); } public void removeAllFromWorld(CommandSender sender, String world) { - int count = 0; - Iterator it = residences.values().iterator(); - while (it.hasNext()) { - ClaimedResidence next = it.next(); - if (next.getWorld().equals(world)) { - it.remove(); - count++; - } - } - chunkResidences.remove(world); - chunkResidences.put(world, new HashMap>()); - if (count == 0) { - sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW + world); - } else { - sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); - } + int count = 0; + Iterator it = residences.values().iterator(); + while (it.hasNext()) { + ClaimedResidence next = it.next(); + if (next.getWorld().equals(world)) { + it.remove(); + count++; + } + } + chunkResidences.remove(world); + chunkResidences.put(world, new HashMap>()); + if (count == 0) { + sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW + world); + } else { + sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); + } } public int getResidenceCount() { - return residences.size(); + return residences.size(); } public void removeChunkList(String name) { - ClaimedResidence res = residences.get(name); - if (res != null) { - String world = res.getWorld(); - if (chunkResidences.get(world) != null) { - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList<>(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - ress.remove(name); - chunkResidences.get(world).put(chunk, ress); - } - } - } + ClaimedResidence res = residences.get(name); + if (res != null) { + String world = res.getWorld(); + if (chunkResidences.get(world) != null) { + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList<>(); + if (chunkResidences.get(world).containsKey(chunk)) { + ress.addAll(chunkResidences.get(world).get(chunk)); + } + ress.remove(name); + chunkResidences.get(world).put(chunk, ress); + } + } + } } public void calculateChunks(String name) { - ClaimedResidence res = residences.get(name); - if (res != null) { - String world = res.getWorld(); - if (chunkResidences.get(world) == null) { - chunkResidences.put(world, new HashMap>()); - } - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList<>(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - ress.add(name); - chunkResidences.get(world).put(chunk, ress); - } - } + ClaimedResidence res = residences.get(name); + if (res != null) { + String world = res.getWorld(); + if (chunkResidences.get(world) == null) { + chunkResidences.put(world, new HashMap>()); + } + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList<>(); + if (chunkResidences.get(world).containsKey(chunk)) { + ress.addAll(chunkResidences.get(world).get(chunk)); + } + ress.add(name); + chunkResidences.get(world).put(chunk, ress); + } + } } public static final class ChunkRef { - public static int getChunkCoord(final int val) { - // For more info, see CraftBukkit.CraftWorld.getChunkAt( Location ) - return val >> 4; - } - private final int z; - private final int x; - - public ChunkRef(Location loc) { - this.x = getChunkCoord(loc.getBlockX()); - this.z = getChunkCoord(loc.getBlockZ()); - } - public ChunkRef(int x, int z) { - this.x = x; - this.z = z; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - ChunkRef other = (ChunkRef) obj; - return this.x == other.x && this.z == other.z; - } - - @Override - public int hashCode() { - return x ^ z; - } - - /** - * Useful for debug - * @return - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append( "{ x: " ).append(x).append( ", z: " ).append( z ).append( " }" ); - return sb.toString(); - } + public static int getChunkCoord(final int val) { + // For more info, see CraftBukkit.CraftWorld.getChunkAt( Location ) + return val >> 4; + } + + private final int z; + private final int x; + + public ChunkRef(Location loc) { + this.x = getChunkCoord(loc.getBlockX()); + this.z = getChunkCoord(loc.getBlockZ()); + } + + public ChunkRef(int x, int z) { + this.x = x; + this.z = z; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ChunkRef other = (ChunkRef) obj; + return this.x == other.x && this.z == other.z; + } + + @Override + public int hashCode() { + return x ^ z; + } + + /** + * Useful for debug + * + * @return + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{ x: ").append(x).append(", z: ").append(z).append(" }"); + return sb.toString(); + } } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index b47c2c098..df655e9f1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -4,6 +4,7 @@ */ package com.bekvon.bukkit.residence.protection; + import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; @@ -33,509 +34,457 @@ public class ResidencePermissions extends FlagPermissions { protected String world; protected ClaimedResidence residence; - private ResidencePermissions(ClaimedResidence res) - { - super(); - residence = res; + private ResidencePermissions(ClaimedResidence res) { + super(); + residence = res; } - public ResidencePermissions(ClaimedResidence res, String creator, String inworld) - { - this(res); - ownerUUID = Residence.getPlayerUUID(creator); - if(ownerUUID == null) - ownerUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); - world = inworld; + public ResidencePermissions(ClaimedResidence res, String creator, String inworld) { + this(res); + ownerUUID = Residence.getPlayerUUID(creator); + if (ownerUUID == null) + ownerUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); + world = inworld; } - public boolean playerHas(String player, String flag, boolean def) - { - return this.playerHas(player, world, flag, def); + public boolean playerHas(String player, String flag, boolean def) { + return this.playerHas(player, world, flag, def); } @Override public boolean playerHas(String player, String world, String flag, boolean def) { - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence,flag,FlagType.PLAYER,player,def); - Residence.getServ().getPluginManager().callEvent(fc); - if(fc.isOverriden()) - return fc.getOverrideValue(); - return super.playerHas(player, world, flag, def); + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER, player, def); + + Residence.getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + return super.playerHas(player, world, flag, def); } @Override public boolean groupHas(String group, String flag, boolean def) { - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence,flag,FlagType.GROUP,group,def); - Residence.getServ().getPluginManager().callEvent(fc); - if(fc.isOverriden()) - return fc.getOverrideValue(); - return super.groupHas(group, flag, def); + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.GROUP, group, def); + Residence.getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + return super.groupHas(group, flag, def); } @Override public boolean has(String flag, boolean def) { - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence,flag,FlagType.RESIDENCE,null,def); - Residence.getServ().getPluginManager().callEvent(fc); - if(fc.isOverriden()) - return fc.getOverrideValue(); - return super.has(flag, def); + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def); + Residence.getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + return super.has(flag, def); } - - public boolean hasApplicableFlag(String player, String flag) - { - return super.inheritanceIsPlayerSet(player,flag) || super.inheritanceIsGroupSet(Residence.getPermissionManager().getGroupNameByPlayer(player,world),flag) || super.inheritanceIsSet(flag); + public boolean hasApplicableFlag(String player, String flag) { + return super.inheritanceIsPlayerSet(player, flag) || super.inheritanceIsGroupSet(Residence.getPermissionManager().getGroupNameByPlayer(player, world), flag) + || super.inheritanceIsSet(flag); } - public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) - { - if(player!=null) - { - if(!player.getUniqueId().toString().equals(ownerUUID.toString()) && !resadmin) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission")); - return; - } - } - else - { - resadmin = true; - } - PermissionGroup group = Residence.getPermissionManager().getGroup(this.getOwner(),world); - for(Entry flag : list.cuboidFlags.entrySet()) - { - if(group.hasFlagAccess(flag.getKey()) || resadmin) - { - this.cuboidFlags.put(flag.getKey(), flag.getValue()); - } - else - { - if(player!=null) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW+flag.getKey() + ChatColor.RED)); - } - } - for(Entry> plists : list.playerFlags.entrySet()) - { - Map map = this.getPlayerFlags(plists.getKey(), true); - for(Entry flag : plists.getValue().entrySet()) - { - if(group.hasFlagAccess(flag.getKey()) || resadmin) - { - map.put(flag.getKey(), flag.getValue()); - } - else - { - if(player!=null) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW+flag.getKey() + ChatColor.RED)); - } - } - } - for(Entry> glists : list.groupFlags.entrySet()) - { - for(Entry flag : glists.getValue().entrySet()) - { - if(group.hasFlagAccess(flag.getKey()) || resadmin) - { - if(!this.groupFlags.containsKey(glists.getKey())) - this.groupFlags.put(glists.getKey(), Collections.synchronizedMap(new HashMap())); - this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue()); - } - else - { - if(player!=null) - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW+flag.getKey() + ChatColor.RED)); - } - } - } - if(player!=null) - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("PermissionsApply")); + public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) { + if (player != null) { + if (!player.getUniqueId().toString().equals(ownerUUID.toString()) && !resadmin) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + } else { + resadmin = true; + } + PermissionGroup group = Residence.getPermissionManager().getGroup(this.getOwner(), world); + for (Entry flag : list.cuboidFlags.entrySet()) { + if (group.hasFlagAccess(flag.getKey()) || resadmin) { + this.cuboidFlags.put(flag.getKey(), flag.getValue()); + } else { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); + } + } + for (Entry> plists : list.playerFlags.entrySet()) { + Map map = this.getPlayerFlags(plists.getKey(), true); + for (Entry flag : plists.getValue().entrySet()) { + if (group.hasFlagAccess(flag.getKey()) || resadmin) { + map.put(flag.getKey(), flag.getValue()); + } else { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); + } + } + } + for (Entry> glists : list.groupFlags.entrySet()) { + for (Entry flag : glists.getValue().entrySet()) { + if (group.hasFlagAccess(flag.getKey()) || resadmin) { + if (!this.groupFlags.containsKey(glists.getKey())) + this.groupFlags.put(glists.getKey(), Collections.synchronizedMap(new HashMap())); + this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue()); + } else { + if (player != null) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); + } + } + } + if (player != null) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("PermissionsApply")); } public boolean hasResidencePermission(Player player, boolean requireOwner) { - if (Residence.getConfigManager().enabledRentSystem()) { - String resname = residence.getName(); - if (Residence.getRentManager().isRented(resname)) { - if (requireOwner) { - return false; - } - String renter = Residence.getRentManager().getRentingPlayer(resname); - if (player.getName().equalsIgnoreCase(renter)) { - return true; - } else { - return (playerHas(player.getName(), "admin", false)); - } - } - } - if (requireOwner) { - return (this.getOwner().equalsIgnoreCase(player.getName())); - } - return (playerHas(player.getName(), "admin", false) || this.getOwner().equalsIgnoreCase(player.getName())); + if (Residence.getConfigManager().enabledRentSystem()) { + String resname = residence.getName(); + if (Residence.getRentManager().isRented(resname)) { + if (requireOwner) { + return false; + } + String renter = Residence.getRentManager().getRentingPlayer(resname); + if (player.getName().equalsIgnoreCase(renter)) { + return true; + } else { + return (playerHas(player.getName(), "admin", false)); + } + } + } + if (requireOwner) { + return (this.getOwner().equalsIgnoreCase(player.getName())); + } + return (playerHas(player.getName(), "admin", false) || this.getOwner().equalsIgnoreCase(player.getName())); } - private boolean checkCanSetFlag(Player player, String flag, FlagState state, boolean globalflag, boolean resadmin) - { - if(!checkValidFlag(flag,globalflag)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidFlag")); - return false; - } - if(state == FlagState.INVALID) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidFlagState")); - return false; - } - if(!resadmin) - { - if(!this.hasResidencePermission(player,false)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission")); - return false; - } - if(!hasFlagAccess(this.getOwner(), flag)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("OwnerNoPermission")); - return false; - } - } - return true; + private boolean checkCanSetFlag(Player player, String flag, FlagState state, boolean globalflag, boolean resadmin) { + if (!checkValidFlag(flag, globalflag)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidFlag")); + return false; + } + if (state == FlagState.INVALID) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidFlagState")); + return false; + } + if (!resadmin) { + if (!this.hasResidencePermission(player, false)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + if (!hasFlagAccess(this.getOwner(), flag)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerNoPermission")); + return false; + } + } + return true; } - private boolean hasFlagAccess(String player, String flag) - { - PermissionGroup group = Residence.getPermissionManager().getGroup(player,world); - return group.hasFlagAccess(flag); + private boolean hasFlagAccess(String player, String flag) { + PermissionGroup group = Residence.getPermissionManager().getGroup(player, world); + return group.hasFlagAccess(flag); } - public boolean setPlayerFlag(Player player, String targetPlayer, String flag, String flagstate, boolean resadmin) { - if(validFlagGroups.containsKey(flag)) - return this.setFlagGroupOnPlayer(player, targetPlayer, flag, flagstate, resadmin); - FlagState state = FlagPermissions.stringToFlagState(flagstate); - if (checkCanSetFlag(player, flag, state, false, resadmin)) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer); - Residence.getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - if(super.setPlayerFlag(targetPlayer, flag, state)) - { - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("FlagSet")); - return true; - } - } - return false; + public boolean setPlayerFlag(Player player, String targetPlayer, String flag, String flagstate, boolean resadmin, boolean Show) { + if (validFlagGroups.containsKey(flag)) + return this.setFlagGroupOnPlayer(player, targetPlayer, flag, flagstate, resadmin); + FlagState state = FlagPermissions.stringToFlagState(flagstate); + if (checkCanSetFlag(player, flag, state, false, resadmin)) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer); + Residence.getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + if (super.setPlayerFlag(targetPlayer, flag, state)) { + if (Show) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag)); + return true; + } + } + return false; } public boolean setGroupFlag(Player player, String group, String flag, String flagstate, boolean resadmin) { - group = group.toLowerCase(); - if(validFlagGroups.containsKey(flag)) - return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin); - FlagState state = FlagPermissions.stringToFlagState(flagstate); - if (checkCanSetFlag(player, flag, state, false, resadmin)) { - if (Residence.getPermissionManager().hasGroup(group)) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); - Residence.getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - if(super.setGroupFlag(group, flag, state)) - { - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("FlagSet")); - return true; - } - } else { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidGroup")); - return false; - } - } - return false; + group = group.toLowerCase(); + if (validFlagGroups.containsKey(flag)) + return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin); + FlagState state = FlagPermissions.stringToFlagState(flagstate); + if (checkCanSetFlag(player, flag, state, false, resadmin)) { + if (Residence.getPermissionManager().hasGroup(group)) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); + Residence.getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + if (super.setGroupFlag(group, flag, state)) { + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); + return true; + } + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidGroup")); + return false; + } + } + return false; } public boolean setFlag(Player player, String flag, String flagstate, boolean resadmin) { - if(validFlagGroups.containsKey(flag)) - return this.setFlagGroup(player, flag, flagstate, resadmin); - FlagState state = FlagPermissions.stringToFlagState(flagstate); - if (checkCanSetFlag(player, flag, state, true, resadmin)) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence,player,flag,ResidenceFlagChangeEvent.FlagType.RESIDENCE,state,null); - Residence.getServ().getPluginManager().callEvent(fc); - if(fc.isCancelled()) - return false; - if(super.setFlag(flag, state)) - { - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("FlagSet")); - return true; - } - } - return false; + if (validFlagGroups.containsKey(flag)) + return this.setFlagGroup(player, flag, flagstate, resadmin); + FlagState state = FlagPermissions.stringToFlagState(flagstate); + if (checkCanSetFlag(player, flag, state, true, resadmin)) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); + Residence.getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + if (super.setFlag(flag, state)) { + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); + return true; + } + } + return false; } - + public boolean removeAllPlayerFlags(Player player, String targetPlayer, boolean resadmin) { - if (this.hasResidencePermission(player, false) || resadmin) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null); - Residence.getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) { - return false; - } - super.removeAllPlayerFlags(targetPlayer); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("FlagSet")); - return true; - } - return false; + if (this.hasResidencePermission(player, false) || resadmin) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null); + Residence.getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) { + return false; + } + super.removeAllPlayerFlags(targetPlayer); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); + return true; + } + return false; } public boolean removeAllGroupFlags(Player player, String group, boolean resadmin) { - if (this.hasResidencePermission(player, false) || resadmin) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null); - Residence.getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) { - return false; - } - super.removeAllGroupFlags(group); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("FlagSet")); - return true; - } - return false; + if (this.hasResidencePermission(player, false) || resadmin) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null); + Residence.getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) { + return false; + } + super.removeAllGroupFlags(group); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); + return true; + } + return false; } - @Override public boolean setFlag(String flag, FlagState state) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null,flag,ResidenceFlagChangeEvent.FlagType.RESIDENCE,state,null); - Residence.getServ().getPluginManager().callEvent(fc); - if(fc.isCancelled()) - return false; - return super.setFlag(flag, state); + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); + Residence.getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + return super.setFlag(flag, state); } @Override public boolean setGroupFlag(String group, String flag, FlagState state) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null,flag,ResidenceFlagChangeEvent.FlagType.GROUP,state,group); - Residence.getServ().getPluginManager().callEvent(fc); - if(fc.isCancelled()) - return false; - return super.setGroupFlag(group, flag, state); + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); + Residence.getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + return super.setGroupFlag(group, flag, state); } @Override public boolean setPlayerFlag(String player, String flag, FlagState state) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null,flag,ResidenceFlagChangeEvent.FlagType.PLAYER,state, player); - Residence.getServ().getPluginManager().callEvent(fc); - if(fc.isCancelled()) - return false; - return super.setPlayerFlag(player,flag,state); + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, player); + Residence.getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + return super.setPlayerFlag(player, flag, state); } - public void applyDefaultFlags(Player player, boolean resadmin) - { - if(this.hasResidencePermission(player, true) || resadmin) - { - this.applyDefaultFlags(); - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("FlagsDefault")); - } - else - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("NoPermission")); + public void applyDefaultFlags(Player player, boolean resadmin) { + if (this.hasResidencePermission(player, true) || resadmin) { + this.applyDefaultFlags(); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("FlagsDefault")); + } else + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("NoPermission")); } - public void applyDefaultFlags() - { - PermissionManager gm = Residence.getPermissionManager(); - PermissionGroup group = gm.getGroup(this.getOwner(), world); - Set> dflags = group.getDefaultResidenceFlags(); - Set> dcflags = group.getDefaultCreatorFlags(); - Set>> dgflags = group.getDefaultGroupFlags(); - this.applyGlobalDefaults(); - for (Entry next : dflags) { - if (this.checkValidFlag(next.getKey(), true)) { - if (next.getValue()) { - this.setFlag(next.getKey(), FlagState.TRUE); - } else { - this.setFlag(next.getKey(), FlagState.FALSE); - } - } - } - for (Entry next : dcflags) { - if (this.checkValidFlag(next.getKey(), false)) { - if (next.getValue()) { - this.setPlayerFlag(this.getOwner(), next.getKey(), FlagState.TRUE); - } else { - this.setPlayerFlag(this.getOwner(), next.getKey(), FlagState.FALSE); - } - } - } - for (Entry> entry : dgflags) - { - Map value = entry.getValue(); - for(Entry flag : value.entrySet()) - { - if(flag.getValue()) - { - this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); - } - else - { - this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); - } - } - } + public void applyDefaultFlags() { + PermissionManager gm = Residence.getPermissionManager(); + PermissionGroup group = gm.getGroup(this.getOwner(), world); + Set> dflags = group.getDefaultResidenceFlags(); + Set> dcflags = group.getDefaultCreatorFlags(); + Set>> dgflags = group.getDefaultGroupFlags(); + this.applyGlobalDefaults(); + for (Entry next : dflags) { + if (this.checkValidFlag(next.getKey(), true)) { + if (next.getValue()) { + this.setFlag(next.getKey(), FlagState.TRUE); + } else { + this.setFlag(next.getKey(), FlagState.FALSE); + } + } + } + for (Entry next : dcflags) { + if (this.checkValidFlag(next.getKey(), false)) { + if (next.getValue()) { + this.setPlayerFlag(this.getOwner(), next.getKey(), FlagState.TRUE); + } else { + this.setPlayerFlag(this.getOwner(), next.getKey(), FlagState.FALSE); + } + } + } + for (Entry> entry : dgflags) { + Map value = entry.getValue(); + for (Entry flag : value.entrySet()) { + if (flag.getValue()) { + this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); + } else { + this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); + } + } + } } - public void setOwner(String newOwner, boolean resetFlags) - { - if(newOwner.equals("Server Land")) - ownerUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); // the UUID for server owned land - - UUID playerUUID = Residence.getPlayerUUID(newOwner); - if(playerUUID !=null) //if we find the players uuid - { - ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence,newOwner); - Residence.getServ().getPluginManager().callEvent(ownerchange); - ownerUUID = playerUUID; - if(resetFlags) - this.applyDefaultFlags(); - } - else - ownerUUID = UUID.fromString("ffffffff-ffff-ffff-ffff-ffffffffffff"); //the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it - - ownerLastKnownName = newOwner; + public void setOwner(String newOwner, boolean resetFlags) { + if (newOwner.equals("Server Land")) + ownerUUID = UUID.fromString("00000000-0000-0000-0000-000000000000");// the UUID for server owned land + + UUID playerUUID = Residence.getPlayerUUID(newOwner); + if (playerUUID != null) //if we find the players uuid + { + ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); + Residence.getServ().getPluginManager().callEvent(ownerchange); + ownerUUID = playerUUID; + if (resetFlags) + this.applyDefaultFlags(); + } else + ownerUUID = UUID.fromString("ffffffff-ffff-ffff-ffff-ffffffffffff");//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it + + ownerLastKnownName = newOwner; } - public String getOwner() - { - if(ownerUUID.toString().equals("00000000-0000-0000-0000-000000000000")) //check for server land - return "Server Land"; - String name = Residence.getPlayerName(ownerUUID); //try to find the owner's name - if(name==null) - return ownerLastKnownName; //return last known if we cannot find it - else - ownerLastKnownName = name; //update last known if we did find it - return name; + public String getOwner() { + if (ownerUUID.toString().equals("00000000-0000-0000-0000-000000000000")) //check for server land + return "Server Land"; + String name = Residence.getPlayerName(ownerUUID);//try to find the owner's name + if (name == null) + return ownerLastKnownName;//return last known if we cannot find it + else + ownerLastKnownName = name;//update last known if we did find it + return name; } - - public UUID getOwnerUUID() - { - return ownerUUID; + + public UUID getOwnerUUID() { + return ownerUUID; } - public String getWorld() - { - return world; + public String getWorld() { + return world; } @Override public Map save() { - Map root = super.save(); - root.put("OwnerUUID", ownerUUID.toString()); - root.put("OwnerLastKnownName", ownerLastKnownName); - root.put("World", world); - return root; + Map root = super.save(); + root.put("OwnerUUID", ownerUUID.toString()); + root.put("OwnerLastKnownName", ownerLastKnownName); + root.put("World", world); + return root; } public static ResidencePermissions load(ClaimedResidence res, Map root) throws Exception { - ResidencePermissions newperms = new ResidencePermissions(res); - //newperms.owner = (String) root.get("Owner"); - if(root.containsKey("OwnerUUID")) - { - newperms.ownerUUID = UUID.fromString((String) root.get("OwnerUUID")); //get owner UUID - String name = Residence.getPlayerName(newperms.ownerUUID); //try to find the current name of the owner - if(name != null) - newperms.ownerLastKnownName = name; //if found update last known name to current name - else - newperms.ownerLastKnownName = (String) root.get("OwnerLastKnownName"); //otherwise load last known name from file - if(newperms.ownerUUID.toString().equals("ffffffff-ffff-ffff-ffff-ffffffffffff")) //check for fake UUID - { - UUID realUUID = Residence.getPlayerUUID(newperms.ownerLastKnownName); //try to find the real UUID of the player if possible now - if(realUUID != null) - newperms.ownerUUID = realUUID; - } - } - else if (root.containsKey("Owner")) //convert old owner name save format into uuid format - { - String owner = (String) root.get("Owner"); - newperms.ownerLastKnownName = owner; - newperms.ownerUUID = Residence.getPlayerUUID(owner); - if(newperms.ownerUUID == null) - newperms.ownerUUID = UUID.fromString("ffffffff-ffff-ffff-ffff-ffffffffffff"); //set fake UUID until we can find real one for last known player - } - else - { - newperms.ownerUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); //cant determine owner name or UUID... setting zero UUID which is server land - newperms.ownerLastKnownName = "Server Land"; - } - newperms.world = (String) root.get("World"); - FlagPermissions.load(root, newperms); - if(newperms.getOwner()==null||newperms.world==null||newperms.playerFlags==null||newperms.groupFlags==null||newperms.cuboidFlags==null) - throw new Exception("Invalid Residence Permissions..."); - return newperms; + ResidencePermissions newperms = new ResidencePermissions(res); + //newperms.owner = (String) root.get("Owner"); + if (root.containsKey("OwnerUUID")) { + newperms.ownerUUID = UUID.fromString((String) root.get("OwnerUUID"));//get owner UUID + // String name = Residence.getPlayerName(newperms.ownerUUID); //try to find the current name of the owner + newperms.ownerLastKnownName = (String) root.get("OwnerLastKnownName");//otherwise load last known name from file + if (newperms.ownerUUID.toString().equals("ffffffff-ffff-ffff-ffff-ffffffffffff")) //check for fake UUID + { + UUID realUUID = Residence.getPlayerUUID(newperms.ownerLastKnownName);//try to find the real UUID of the player if possible now + if (realUUID != null) + newperms.ownerUUID = realUUID; + } + } else if (root.containsKey("Owner")) //convert old owner name save format into uuid format + { + String owner = (String) root.get("Owner"); + newperms.ownerLastKnownName = owner; + newperms.ownerUUID = Residence.getPlayerUUID(owner); + if (newperms.ownerUUID == null) + newperms.ownerUUID = UUID.fromString("ffffffff-ffff-ffff-ffff-ffffffffffff");//set fake UUID until we can find real one for last known player + } else { + newperms.ownerUUID = UUID.fromString("00000000-0000-0000-0000-000000000000");//cant determine owner name or UUID... setting zero UUID which is server land + newperms.ownerLastKnownName = "Server Land"; + } + newperms.world = (String) root.get("World"); + FlagPermissions.load(root, newperms); + if (newperms.getOwner() == null || newperms.world == null || newperms.playerFlags == null || newperms.groupFlags == null || newperms.cuboidFlags == null) + throw new Exception("Invalid Residence Permissions..."); + return newperms; } - - public void applyGlobalDefaults() - { - this.clearFlags(); - FlagPermissions gRD = Residence.getConfigManager().getGlobalResidenceDefaultFlags(); - FlagPermissions gCD = Residence.getConfigManager().getGlobalCreatorDefaultFlags(); - Map gGD = Residence.getConfigManager().getGlobalGroupDefaultFlags(); - for(Entry entry : gRD.cuboidFlags.entrySet()) - { - if(entry.getValue()) - this.setFlag(entry.getKey(), FlagState.TRUE); - else - this.setFlag(entry.getKey(), FlagState.FALSE); - } - for(Entry entry : gCD.cuboidFlags.entrySet()) - { - if(entry.getValue()) - this.setPlayerFlag(this.getOwner(), entry.getKey(), FlagState.TRUE); - else - this.setPlayerFlag(this.getOwner(), entry.getKey(), FlagState.FALSE); - } - for(Entry entry : gGD.entrySet()) - { - for(Entry flag : entry.getValue().cuboidFlags.entrySet()) - { - if(flag.getValue()) - this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); - else - this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); - } - } + public void applyGlobalDefaults() { + this.clearFlags(); + FlagPermissions gRD = Residence.getConfigManager().getGlobalResidenceDefaultFlags(); + FlagPermissions gCD = Residence.getConfigManager().getGlobalCreatorDefaultFlags(); + Map gGD = Residence.getConfigManager().getGlobalGroupDefaultFlags(); + for (Entry entry : gRD.cuboidFlags.entrySet()) { + if (entry.getValue()) + this.setFlag(entry.getKey(), FlagState.TRUE); + else + this.setFlag(entry.getKey(), FlagState.FALSE); + } + for (Entry entry : gCD.cuboidFlags.entrySet()) { + if (entry.getValue()) + this.setPlayerFlag(this.getOwner(), entry.getKey(), FlagState.TRUE); + else + this.setPlayerFlag(this.getOwner(), entry.getKey(), FlagState.FALSE); + } + for (Entry entry : gGD.entrySet()) { + for (Entry flag : entry.getValue().cuboidFlags.entrySet()) { + if (flag.getValue()) + this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); + else + this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); + } + } } public boolean setFlagGroup(Player player, String flaggroup, String state, boolean resadmin) { - if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { - ArrayList flags = ResidencePermissions.validFlagGroups.get(flaggroup); - boolean changed = false; - for (String flag : flags) { - if (this.setFlag(player, flag, state, resadmin)) { - changed = true; - } - } - return changed; - } - return false; + if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { + ArrayList flags = ResidencePermissions.validFlagGroups.get(flaggroup); + boolean changed = false; + for (String flag : flags) { + if (this.setFlag(player, flag, state, resadmin)) { + changed = true; + } + } + return changed; + } + return false; } public boolean setFlagGroupOnGroup(Player player, String flaggroup, String group, String state, boolean resadmin) { - if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { - ArrayList flags = ResidencePermissions.validFlagGroups.get(flaggroup); - boolean changed = false; - for (String flag : flags) { - if (this.setGroupFlag(player, group, flag, state, resadmin)) { - changed = true; - } - } - return changed; - } - return false; + if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { + ArrayList flags = ResidencePermissions.validFlagGroups.get(flaggroup); + boolean changed = false; + for (String flag : flags) { + if (this.setGroupFlag(player, group, flag, state, resadmin)) { + changed = true; + } + } + return changed; + } + return false; } public boolean setFlagGroupOnPlayer(Player player, String target, String flaggroup, String state, boolean resadmin) { - if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { - ArrayList flags = ResidencePermissions.validFlagGroups.get(flaggroup); - boolean changed = false; - for (String flag : flags) { - if (this.setPlayerFlag(player, target, flag, state, resadmin)) { - changed = true; - } - } - return changed; - } - return false; + if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { + ArrayList flags = ResidencePermissions.validFlagGroups.get(flaggroup); + boolean changed = false; + String flagString = ""; + int i = 0; + for (String flag : flags) { + if (this.setPlayerFlag(player, target, flag, state, resadmin, false)) { + changed = true; + flagString += flag; + i++; + if (i < flags.size()) + flagString += ", "; + } + } + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flagString + "." + target + "." + state)); + return changed; + } + return false; } } diff --git a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java index 440908585..9e81c6e69 100644 --- a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java +++ b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java @@ -20,122 +20,112 @@ * @author Administrator */ public class WorldFlagManager { - protected Map> groupperms; - protected Map worldperms; + protected Map> groupperms; + protected Map worldperms; protected FlagPermissions globaldefaults; - public WorldFlagManager() - { - globaldefaults = new FlagPermissions(); - worldperms = new HashMap<>(); - groupperms = new HashMap<>(); + public WorldFlagManager() { + globaldefaults = new FlagPermissions(); + worldperms = new HashMap<>(); + groupperms = new HashMap<>(); } - public WorldFlagManager(FileConfiguration config) - { - this(); - this.parsePerms(config); + public WorldFlagManager(FileConfiguration config, FileConfiguration groups) { + this(); + this.parsePerms(config, groups); } - public FlagPermissions getPerms(Player player) - { - return this.getPerms(player.getWorld().getName(), Residence.getPermissionManager().getGroupNameByPlayer(player)); + public FlagPermissions getPerms(Player player) { + return this.getPerms(player.getWorld().getName(), Residence.getPermissionManager().getGroupNameByPlayer(player)); } - public FlagPermissions getPerms(String world, String group) - { - world = world.toLowerCase(); - group = group.toLowerCase(); - Map groupworldperms = groupperms.get(group); - if (groupworldperms == null) { - return this.getPerms(world); - } - FlagPermissions list = groupworldperms.get(world); - if (list == null) { - list = groupworldperms.get("global." + world); - if (list == null) { - list = groupworldperms.get("global"); - } - if (list == null) { - return this.getPerms(world); - } - } - return list; + public FlagPermissions getPerms(String world, String group) { + world = world.toLowerCase(); + group = group.toLowerCase(); + Map groupworldperms = groupperms.get(group); + if (groupworldperms == null) { + return this.getPerms(world); + } + FlagPermissions list = groupworldperms.get(world); + if (list == null) { + list = groupworldperms.get("global." + world); + if (list == null) { + list = groupworldperms.get("global"); + } + if (list == null) { + return this.getPerms(world); + } + } + return list; } - public FlagPermissions getPerms(String world) - { - world = world.toLowerCase(); - FlagPermissions list = worldperms.get(world); - if (list == null) { - if (globaldefaults == null) - return new FlagPermissions(); - else - return globaldefaults; - } - return list; + public FlagPermissions getPerms(String world) { + world = world.toLowerCase(); + FlagPermissions list = worldperms.get(world); + if (list == null) { + if (globaldefaults == null) + return new FlagPermissions(); + else + return globaldefaults; + } + return list; } - public final void parsePerms(FileConfiguration config) { - try { - - Set keys = config.getConfigurationSection("Global.Flags").getKeys(false); - if (keys != null) { - for (String key : keys) { - if (key.equalsIgnoreCase("Global")) { - globaldefaults = FlagPermissions.parseFromConfigNode(key, config.getConfigurationSection("Global.Flags")); - } else { - worldperms.put(key.toLowerCase(), FlagPermissions.parseFromConfigNode(key, config.getConfigurationSection("Global.Flags"))); - } - } - } - for (Entry entry : worldperms.entrySet()) { - entry.getValue().setParent(globaldefaults); - } - keys = config.getConfigurationSection("Groups").getKeys(false); - if (keys != null) { - for (String key : keys) { - Set worldkeys = config.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false); - if (worldkeys != null) { - Map perms = new HashMap<>(); - for (String wkey : worldkeys) { - FlagPermissions list = FlagPermissions.parseFromConfigNode(wkey, config.getConfigurationSection("Groups." + key + ".Flags.World")); - if(wkey.equalsIgnoreCase("global")) - { - list.setParent(globaldefaults); - perms.put(wkey.toLowerCase(), list); - for(Entry worldperm : worldperms.entrySet()) - { - list = FlagPermissions.parseFromConfigNode(wkey, config.getConfigurationSection("Groups." + key + ".Flags.World")); - list.setParent(worldperm.getValue()); - perms.put("global."+worldperm.getKey().toLowerCase(), list); - } - } - else - { - perms.put(wkey.toLowerCase(), list); - } - } - for (Entry entry : perms.entrySet()) { - String wkey = entry.getKey(); - FlagPermissions list = entry.getValue(); - if (!wkey.startsWith("global.")) { - list.setParent(perms.get("global."+wkey)); - if (list.getParent() == null) { - list.setParent(worldperms.get(wkey)); - } - if(list.getParent()==null) - { - list.setParent(globaldefaults); - } - } - } - groupperms.put(key.toLowerCase(), perms); - } - } - } - } catch (Exception ex) { - Logger.getLogger(WorldFlagManager.class.getName()).log(Level.SEVERE, null, ex); - } + public final void parsePerms(FileConfiguration config, FileConfiguration groups) { + try { + + Set keys = config.getConfigurationSection("Global.Flags").getKeys(false); + if (keys != null) { + for (String key : keys) { + if (key.equalsIgnoreCase("Global")) { + globaldefaults = FlagPermissions.parseFromConfigNode(key, config.getConfigurationSection("Global.Flags")); + } else { + worldperms.put(key.toLowerCase(), FlagPermissions.parseFromConfigNode(key, config.getConfigurationSection("Global.Flags"))); + } + } + } + for (Entry entry : worldperms.entrySet()) { + entry.getValue().setParent(globaldefaults); + } + keys = groups.getConfigurationSection("Groups").getKeys(false); + if (keys != null) { + for (String key : keys) { + Set worldkeys = groups.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false); + if (worldkeys != null) { + Map perms = new HashMap<>(); + for (String wkey : worldkeys) { + FlagPermissions list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); + if (wkey.equalsIgnoreCase("global")) { + list.setParent(globaldefaults); + perms.put(wkey.toLowerCase(), list); + for (Entry worldperm : worldperms.entrySet()) { + list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); + list.setParent(worldperm.getValue()); + perms.put("global." + worldperm.getKey().toLowerCase(), list); + } + } else { + perms.put(wkey.toLowerCase(), list); + } + } + for (Entry entry : perms.entrySet()) { + String wkey = entry.getKey(); + FlagPermissions list = entry.getValue(); + if (!wkey.startsWith("global.")) { + list.setParent(perms.get("global." + wkey)); + if (list.getParent() == null) { + list.setParent(worldperms.get(wkey)); + } + if (list.getParent() == null) { + list.setParent(globaldefaults); + } + } + } + groupperms.put(key.toLowerCase(), perms); + } + } + } + } catch (Exception ex) { + Logger.getLogger(WorldFlagManager.class.getName()).log(Level.SEVERE, null, ex); + } } } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index f0f548a2e..157f422ee 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -4,12 +4,16 @@ */ package com.bekvon.bukkit.residence.selection; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.ActionBar; import java.util.Collections; import java.util.HashMap; import java.util.Map; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; import org.bukkit.Location; @@ -21,331 +25,748 @@ * @author Administrator */ public class SelectionManager { - protected Map playerLoc1; - protected Map playerLoc2; + protected Map playerLoc1; + protected Map playerLoc2; protected Server server; - public static final int MAX_HEIGHT = 255,MIN_HEIGHT = 0; - - public enum Direction - { - UP,DOWN,PLUSX,PLUSZ,MINUSX,MINUSZ + public static Integer id; + public static HashMap normalPrintMap = new HashMap(); + public static HashMap errorPrintMap = new HashMap(); + public static HashMap normalIDMap = new HashMap(); + public static HashMap errorIDMap = new HashMap(); + + public static final int MAX_HEIGHT = 255, MIN_HEIGHT = 0; + + public enum Direction { + UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ } - public SelectionManager(Server server) - { - this.server = server; - playerLoc1 = Collections.synchronizedMap(new HashMap()); - playerLoc2 = Collections.synchronizedMap(new HashMap()); + public SelectionManager(Server server) { + this.server = server; + playerLoc1 = Collections.synchronizedMap(new HashMap()); + playerLoc2 = Collections.synchronizedMap(new HashMap()); } - public void placeLoc1(Player player, Location loc) - { - if(loc!=null) - { - playerLoc1.put(player.getName(), loc); - } + public void placeLoc1(Player player, Location loc) { + if (loc != null) { + playerLoc1.put(player.getName(), loc); + } } - public void placeLoc2(Player player, Location loc) - { - if(loc!=null) - { - playerLoc2.put(player.getName(), loc); - } + public void placeLoc2(Player player, Location loc) { + if (loc != null) { + playerLoc2.put(player.getName(), loc); + } } - public Location getPlayerLoc1(String player) - { - return playerLoc1.get(player); + public Location getPlayerLoc1(String player) { + return playerLoc1.get(player); } - public Location getPlayerLoc2(String player) - { - return playerLoc2.get(player); + public Location getPlayerLoc2(String player) { + return playerLoc2.get(player); } - public boolean hasPlacedBoth(String player) - { - return (playerLoc1.containsKey(player) && playerLoc2.containsKey(player)); + public boolean hasPlacedBoth(String player) { + return (playerLoc1.containsKey(player) && playerLoc2.containsKey(player)); + } + + public void showSelectionInfoInActionBar(Player player) { + + if (!Residence.getConfigManager().useActionBarOnSelection()) + return; + + String pname = player.getName(); + CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); + + String Message = ChatColor.YELLOW + Residence.getLanguage().getPhrase("Selection.Total.Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getSize(); + + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (Residence.getConfigManager().enableEconomy()) + Message += " " + ChatColor.YELLOW + Residence.getLanguage().getPhrase("Land.Cost") + ":" + ChatColor.DARK_AQUA + " " + ((int) Math.ceil( + (double) cuboidArea.getSize() * group.getCostPerBlock())); + + ActionBar.send(player, Message); + } public void showSelectionInfo(Player player) { - String pname = player.getName(); - if (this.hasPlacedBoth(pname)) { - CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("Selection.Total.Size")+":"+ChatColor.DARK_AQUA+" " + cuboidArea.getSize()); - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if(Residence.getConfigManager().enableEconomy()) - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("Land.Cost")+":"+ChatColor.DARK_AQUA+" " + ((int)Math.ceil((double)cuboidArea.getSize()*group.getCostPerBlock()))); - player.sendMessage(ChatColor.YELLOW+"X"+Residence.getLanguage().getPhrase("Size")+":"+ChatColor.DARK_AQUA+" " + cuboidArea.getXSize()); - player.sendMessage(ChatColor.YELLOW+"Y"+Residence.getLanguage().getPhrase("Size")+":"+ChatColor.DARK_AQUA+" " + cuboidArea.getYSize()); - player.sendMessage(ChatColor.YELLOW+"Z"+Residence.getLanguage().getPhrase("Size")+":"+ChatColor.DARK_AQUA+" " + cuboidArea.getZSize()); - } - else - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("SelectPoints")); + String pname = player.getName(); + if (hasPlacedBoth(pname)) { + CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Selection.Total.Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getSize()); + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (Residence.getConfigManager().enableEconomy()) + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Land.Cost") + ":" + ChatColor.DARK_AQUA + " " + ((int) Math.ceil( + (double) cuboidArea.getSize() * group.getCostPerBlock()))); + player.sendMessage(ChatColor.YELLOW + "X" + Residence.getLanguage().getPhrase("Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getXSize()); + player.sendMessage(ChatColor.YELLOW + "Y" + Residence.getLanguage().getPhrase("Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getYSize()); + player.sendMessage(ChatColor.YELLOW + "Z" + Residence.getLanguage().getPhrase("Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getZSize()); + NewMakeBorders(player, getPlayerLoc1(pname), getPlayerLoc2(pname), false); + } else + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + } + + public static boolean showParticle(Player player, Location Current, boolean error) { + if (!error) { + Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, Current, player); + } else + Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, Current, player); + return false; + } + + public static boolean showParticleWalls(final Player player, final Location Current, final boolean error) { + if (!error) + Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, Current, player); + else + Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, Current, player); + return false; + } + + public void NewMakeBorders(final Player player, Location OriginalLow, Location OriginalHigh, boolean error) { + + if (!Residence.getConfigManager().useVisualizer()) + return; + + if (!error) + normalPrintMap.put(player.getName(), System.currentTimeMillis()); + else + errorPrintMap.put(player.getName(), System.currentTimeMillis()); + MakeBorders(player, OriginalLow, OriginalHigh, error); + } + + public boolean MakeBorders(final Player player, final Location OriginalLow, final Location OriginalHigh, final boolean error) { + + Boolean NorthSide = true, WestSide = true, EastSide = true, SouthSide = true, TopSide = true, BottomSide = true; + + Double OLX = OriginalLow.getX(); + if (OriginalLow.getX() > OriginalHigh.getX()) + OLX = OriginalHigh.getX(); + + Double OLY = OriginalLow.getY(); + if (OriginalLow.getY() > OriginalHigh.getY()) + OLY = OriginalHigh.getY(); + + Double OLZ = OriginalLow.getZ(); + if (OriginalLow.getZ() > OriginalHigh.getZ()) + OLZ = OriginalHigh.getZ(); + + Location Current = new Location(OriginalHigh.getWorld(), OLX, OLY, OLZ); + + Double OHX = OriginalHigh.getX() + 1; + if (OriginalHigh.getX() < OriginalLow.getX()) + OHX = OriginalLow.getX() + 1; + + Double OHY = OriginalHigh.getY() + 1; + if (OriginalHigh.getY() < OriginalLow.getY()) + OHY = OriginalLow.getY() + 1; + + Double OHZ = OriginalHigh.getZ() + 1; + if (OriginalHigh.getZ() < OriginalLow.getZ()) + OHZ = OriginalLow.getZ() + 1; + + int Range = Residence.getConfigManager().getVisualizerRange(); + + double PLLX = player.getLocation().getX() - Range; + double PLLZ = player.getLocation().getZ() - Range; + double PLLY = player.getLocation().getY() - Range; + double PLHX = player.getLocation().getX() + Range; + double PLHZ = player.getLocation().getZ() + Range; + double PLHY = player.getLocation().getY() + Range; + + if (OLX < PLLX) { + OLX = PLLX; + WestSide = false; + } + + if (OHX > PLHX) { + OHX = PLHX; + EastSide = false; + } + + if (OLZ < PLLZ) { + OLZ = PLLZ; + NorthSide = false; + } + + if (OHZ > PLHZ) { + OHZ = PLHZ; + SouthSide = false; + } + + if (OLY < PLLY) { + OLY = PLLY; + BottomSide = false; + } + + if (OHY > PLHY) { + OHY = PLHY; + TopSide = false; + } + + double TX = OLX - OHX; + double TY = OLY - OHY; + double TZ = OLZ - OHZ; + + if (TX < 0) + TX = TX * -1; + if (TY < 0) + TY = TY * -1; + if (TZ < 0) + TZ = TZ * -1; + + if (!error && normalIDMap.containsKey(player.getName())) { + Bukkit.getScheduler().cancelTask(normalIDMap.get(player.getName())); + } else if (error && errorIDMap.containsKey(player.getName())) { + Bukkit.getScheduler().cancelTask(errorIDMap.get(player.getName())); + } + + DrawBounds(player, TX, TY, TZ, OLX, OLY, OLZ, EastSide, SouthSide, WestSide, NorthSide, TopSide, BottomSide, Current, error); + + String planerName = player.getName(); + if (!error && !normalPrintMap.containsKey(planerName)) + return false; + else if (error && !errorPrintMap.containsKey(planerName)) + return false; + + if (!error && normalPrintMap.get(planerName) + Residence.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) + return false; + else if (error && errorPrintMap.get(planerName) + Residence.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) + return false; + + int scid = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + public void run() { + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + if (player.isOnline()) + MakeBorders(player, OriginalLow, OriginalHigh, error); + return; + } + }); + return; + } + }, Residence.getConfigManager().getVisualizerUpdateInterval() * 1L); + if (!error) + normalIDMap.put(planerName, scid); + else + errorIDMap.put(planerName, scid); + + return true; } - public void vert(Player player, boolean resadmin) - { - if(hasPlacedBoth(player.getName())) - { - this.sky(player, resadmin); - this.bedrock(player, resadmin); - } - else - { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); - } + public void DrawBounds(final Player player, final Double TX, final Double TY, final Double TZ, final Double OLX, final Double OLY, final Double OLZ, + final Boolean EastSide, final Boolean SouthSide, final Boolean WestSide, final Boolean NorthSide, final Boolean TopSide, final Boolean BottomSide, + final Location Current, boolean error) { + + int eachCollumn = Residence.getConfigManager().getVisualizerRowSpacing(); + int eachRow = Residence.getConfigManager().getVisualizerCollumnSpacing(); + // North wall + if (NorthSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ); + for (int y = 1; y < TY; y += eachCollumn) { + Current.setY(OLY + y); + for (int x = 1; x < TX; x += eachRow) { + Current.setX(OLX + x); + showParticleWalls(player, Current, error); + } + } + } + + // South wall + if (SouthSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ + TZ); + for (int y = 1; y < TY; y += eachCollumn) { + Current.setY(OLY + y); + for (int x = 1; x < TX; x += eachRow) { + Current.setX(OLX + x); + showParticleWalls(player, Current, error); + } + } + } + + // West wall + if (WestSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ); + for (int y = 1; y < TY; y += eachCollumn) { + Current.setY(OLY + y); + for (int z = 1; z < TZ; z += eachRow) { + Current.setZ(OLZ + z); + showParticleWalls(player, Current, error); + } + } + } + + // East wall + if (EastSide) { + Current.setX(OLX + TX); + Current.setY(OLY); + Current.setZ(OLZ); + for (int y = 1; y < TY; y += eachCollumn) { + Current.setY(OLY + y); + for (int z = 1; z < TZ; z += eachRow) { + Current.setZ(OLZ + z); + showParticleWalls(player, Current, error); + } + } + } + + // Roof wall + if (TopSide) { + Current.setX(OLX); + Current.setY(OLY + TY); + Current.setZ(OLZ); + for (int z = 1; z < TZ; z += eachCollumn) { + Current.setZ(OLZ + z); + for (int x = 1; x < TX; x += eachRow) { + Current.setX(OLX + x); + showParticleWalls(player, Current, error); + } + } + } + + // Ground wall + if (BottomSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ); + for (int z = 1; z < TZ; z += eachCollumn) { + Current.setZ(OLZ + z); + for (int x = 1; x < TX; x += eachRow) { + Current.setX(OLX + x); + showParticleWalls(player, Current, error); + } + } + } + + // North bottom line + if (BottomSide && NorthSide) { + Current.setZ(OLZ); + Current.setX(OLX); + Current.setY(OLY); + for (int x = 0; x < TX; x++) { + Current.setX(OLX + x); + showParticle(player, Current, error); + } + } + + // North top line + if (TopSide && NorthSide) { + Current.setX(OLX); + Current.setY(OLY + TY); + Current.setZ(OLZ); + for (int x = 0; x < TX; x++) { + Current.setX(OLX + x); + showParticle(player, Current, error); + } + } + + // South bottom line + if (BottomSide && SouthSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ + TZ); + for (int x = 0; x < TX; x++) { + Current.setX(OLX + x); + showParticle(player, Current, error); + } + } + + // South top line + if (TopSide && SouthSide) { + Current.setX(OLX); + Current.setY(OLY + TY); + Current.setZ(OLZ + TZ); + for (int x = 0; x <= TX; x++) { + Current.setX(OLX + x); + showParticle(player, Current, error); + } + } + + // North - West corner + if (WestSide && NorthSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ); + for (int y = 0; y < TY; y++) { + Current.setY(OLY + y); + showParticle(player, Current, error); + } + } + + // North - East corner + if (EastSide && NorthSide) { + Current.setY(OLY); + Current.setX(OLX + TX); + Current.setZ(OLZ); + for (int y = 0; y < TY; y++) { + Current.setY(OLY + y); + showParticle(player, Current, error); + } + } + + // South - West corner + if (SouthSide && WestSide) { + Current.setY(OLY); + Current.setX(OLX); + Current.setZ(OLZ + TZ); + for (int y = 0; y < TY; y++) { + Current.setY(OLY + y); + showParticle(player, Current, error); + } + } + + // South - East corner + if (SouthSide && EastSide) { + Current.setY(OLY); + Current.setX(OLX + TX); + Current.setZ(OLZ + TZ); + for (int y = 0; y < TY; y++) { + Current.setY(OLY + y); + showParticle(player, Current, error); + } + } + + // West bottom corner + if (WestSide && BottomSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ); + for (int z = 0; z < TZ; z++) { + Current.setZ(OLZ + z); + showParticle(player, Current, error); + } + } + + // East bottom corner + if (EastSide && BottomSide) { + Current.setY(OLY); + Current.setX(OLX + TX); + Current.setZ(OLZ); + for (int z = 0; z < TZ; z++) { + Current.setZ(OLZ + z); + showParticle(player, Current, error); + } + } + + // West top corner + if (WestSide && TopSide) { + Current.setY(OLY + TY); + Current.setX(OLX); + Current.setZ(OLZ + TZ); + for (int z = 0; z < TZ; z++) { + Current.setZ(OLZ + z); + showParticle(player, Current, error); + } + } + + // East top corner + if (EastSide && TopSide) { + Current.setY(OLY + TY); + Current.setX(OLX + TX); + Current.setZ(OLZ + TZ); + for (int z = 0; z < TZ; z++) { + Current.setZ(OLZ + z); + showParticle(player, Current, error); + } + } + } + + public void vert(Player player, boolean resadmin) { + if (hasPlacedBoth(player.getName())) { + this.sky(player, resadmin); + this.bedrock(player, resadmin); + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + } } - public void sky(Player player, boolean resadmin) - { - if(hasPlacedBoth(player.getName())) - { - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - int y1 = playerLoc1.get(player.getName()).getBlockY(); - int y2 = playerLoc2.get(player.getName()).getBlockY(); - if(y1>y2) - { - int newy = MAX_HEIGHT; - if(!resadmin) - { - if(group.getMaxHeight() (group.getMaxY()-1)) - newy = y2 + (group.getMaxY()-1); - } - playerLoc1.get(player.getName()).setY(newy); - } - else - { - int newy = MAX_HEIGHT; - if(!resadmin) - { - if(group.getMaxHeight() (group.getMaxY()-1)) - newy = y1 + (group.getMaxY()-1); - } - playerLoc2.get(player.getName()).setY(newy); - } - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("SelectionSky")); - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("SelectPoints")); - } + public void sky(Player player, boolean resadmin) { + if (hasPlacedBoth(player.getName())) { + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + int y1 = playerLoc1.get(player.getName()).getBlockY(); + int y2 = playerLoc2.get(player.getName()).getBlockY(); + if (y1 > y2) { + int newy = MAX_HEIGHT; + if (!resadmin) { + if (group.getMaxHeight() < newy) + newy = group.getMaxHeight(); + if (newy - y2 > (group.getMaxY() - 1)) + newy = y2 + (group.getMaxY() - 1); + } + playerLoc1.get(player.getName()).setY(newy); + } else { + int newy = MAX_HEIGHT; + if (!resadmin) { + if (group.getMaxHeight() < newy) + newy = group.getMaxHeight(); + if (newy - y1 > (group.getMaxY() - 1)) + newy = y1 + (group.getMaxY() - 1); + } + playerLoc2.get(player.getName()).setY(newy); + } + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSky")); + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + } } - public void bedrock(Player player, boolean resadmin) - { - if(hasPlacedBoth(player.getName())) - { - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - int y1 = playerLoc1.get(player.getName()).getBlockY(); - int y2 = playerLoc2.get(player.getName()).getBlockY(); - if(y1 (group.getMaxY()-1)) - newy = y2 - (group.getMaxY()-1); - } - playerLoc1.get(player.getName()).setY(newy); - } - else - { - int newy = MIN_HEIGHT; - if(!resadmin) - { - if(newy (group.getMaxY()-1)) - newy = y1 - (group.getMaxY()-1); - } - playerLoc2.get(player.getName()).setY(newy); - } - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("SelectionBedrock")); - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("SelectPoints")); - } + public void bedrock(Player player, boolean resadmin) { + if (hasPlacedBoth(player.getName())) { + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + int y1 = playerLoc1.get(player.getName()).getBlockY(); + int y2 = playerLoc2.get(player.getName()).getBlockY(); + if (y1 < y2) { + int newy = MIN_HEIGHT; + if (!resadmin) { + if (newy < group.getMinHeight()) + newy = group.getMinHeight(); + if (y2 - newy > (group.getMaxY() - 1)) + newy = y2 - (group.getMaxY() - 1); + } + playerLoc1.get(player.getName()).setY(newy); + } else { + int newy = MIN_HEIGHT; + if (!resadmin) { + if (newy < group.getMinHeight()) + newy = group.getMinHeight(); + if (y1 - newy > (group.getMaxY() - 1)) + newy = y1 - (group.getMaxY() - 1); + } + playerLoc2.get(player.getName()).setY(newy); + } + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionBedrock")); + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + } } - public void clearSelection(Player player) - { - playerLoc1.remove(player.getName()); - playerLoc2.remove(player.getName()); + public void clearSelection(Player player) { + playerLoc1.remove(player.getName()); + playerLoc2.remove(player.getName()); } - public void selectChunk(Player player) - { - Chunk chunk = player.getWorld().getChunkAt(player.getLocation()); - int xcoord = chunk.getX() * 16; - int zcoord = chunk.getZ() * 16; - int ycoord = MIN_HEIGHT; - int xmax = xcoord + 15; - int zmax = zcoord + 15; - int ymax = MAX_HEIGHT; - this.playerLoc1.put(player.getName(), new Location(player.getWorld(), xcoord, ycoord, zcoord)); - this.playerLoc2.put(player.getName(), new Location(player.getWorld(), xmax,ymax,zmax)); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("SelectionSuccess")); + public void selectChunk(Player player) { + Chunk chunk = player.getWorld().getChunkAt(player.getLocation()); + int xcoord = chunk.getX() * 16; + int zcoord = chunk.getZ() * 16; + int ycoord = MIN_HEIGHT; + int xmax = xcoord + 15; + int zmax = zcoord + 15; + int ymax = MAX_HEIGHT; + playerLoc1.put(player.getName(), new Location(player.getWorld(), xcoord, ycoord, zcoord)); + playerLoc2.put(player.getName(), new Location(player.getWorld(), xmax, ymax, zmax)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); } public boolean worldEdit(Player player) { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("WorldEditNotFound")); - return false; + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldEditNotFound")); + return false; } public void selectBySize(Player player, int xsize, int ysize, int zsize) { - Location myloc = player.getLocation(); - Location loc1 = new Location(myloc.getWorld(), myloc.getBlockX() + xsize, myloc.getBlockY() + ysize, myloc.getBlockZ() + zsize); - Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize); - placeLoc1(player, loc1); - placeLoc2(player, loc2); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("SelectionSuccess")); - showSelectionInfo(player); + Location myloc = player.getLocation(); + Location loc1 = new Location(myloc.getWorld(), myloc.getBlockX() + xsize, myloc.getBlockY() + ysize, myloc.getBlockZ() + zsize); + Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize); + placeLoc1(player, loc1); + placeLoc2(player, loc2); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); + showSelectionInfo(player); } - public void modify(Player player, boolean shift, int amount) - { - if(!this.hasPlacedBoth(player.getName())) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("SelectPoints")); - return; - } - Direction d = this.getDirection(player); - if(d==null) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidDirection")); - } - CuboidArea area = new CuboidArea (playerLoc1.get(player.getName()),playerLoc2.get(player.getName())); - if(d == Direction.UP) - { - int oldy = area.getHighLoc().getBlockY(); - oldy = oldy + amount; - if(oldy>MAX_HEIGHT) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("SelectTooHigh")); - oldy = MAX_HEIGHT; - } - area.getHighLoc().setY(oldy); - if(shift) - { - int oldy2 = area.getLowLoc().getBlockY(); - oldy2 = oldy2 + amount; - area.getLowLoc().setY(oldy2); - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("Shifting.Up")+"..."); - } - else - player.sendMessage(ChatColor.YELLOW+Residence.getLanguage().getPhrase("Expanding.Up")+"..."); - } - if(d == Direction.DOWN) - { - int oldy = area.getLowLoc().getBlockY(); - oldy = oldy - amount; - if(oldy MAX_HEIGHT) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooHigh")); + oldy = MAX_HEIGHT; + } + area.getHighLoc().setY(oldy); + if (shift) { + int oldy2 = area.getLowLoc().getBlockY(); + oldy2 = oldy2 + amount; + area.getLowLoc().setY(oldy2); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.Up") + " (" + amount + ")"); + } else + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.Up") + " (" + amount + ")"); + } + if (d == Direction.DOWN) { + int oldy = area.getLowLoc().getBlockY(); + oldy = oldy - amount; + if (oldy < MIN_HEIGHT) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooLow")); + oldy = MIN_HEIGHT; + } + area.getLowLoc().setY(oldy); + if (shift) { + int oldy2 = area.getHighLoc().getBlockY(); + oldy2 = oldy2 - amount; + area.getHighLoc().setY(oldy2); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.Down") + " (" + amount + ")"); + } else + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.Down") + " (" + amount + ")"); + } + if (d == Direction.MINUSX) { + int oldx = area.getLowLoc().getBlockX(); + oldx = oldx - amount; + area.getLowLoc().setX(oldx); + if (shift) { + int oldx2 = area.getHighLoc().getBlockX(); + oldx2 = oldx2 - amount; + area.getHighLoc().setX(oldx2); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.West") + " (" + amount + ")"); + } else + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.West") + " (" + amount + ")"); + } + if (d == Direction.PLUSX) { + int oldx = area.getHighLoc().getBlockX(); + oldx = oldx + amount; + area.getHighLoc().setX(oldx); + if (shift) { + int oldx2 = area.getLowLoc().getBlockX(); + oldx2 = oldx2 + amount; + area.getLowLoc().setX(oldx2); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.East") + " (" + amount + ")"); + } else + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.East") + " (" + amount + ")"); + } + if (d == Direction.MINUSZ) { + int oldz = area.getLowLoc().getBlockZ(); + oldz = oldz - amount; + area.getLowLoc().setZ(oldz); + if (shift) { + int oldz2 = area.getHighLoc().getBlockZ(); + oldz2 = oldz2 - amount; + area.getHighLoc().setZ(oldz2); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.North") + " (" + amount + ")"); + } else + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.North") + " (" + amount + ")"); + } + if (d == Direction.PLUSZ) { + int oldz = area.getHighLoc().getBlockZ(); + oldz = oldz + amount; + area.getHighLoc().setZ(oldz); + if (shift) { + int oldz2 = area.getLowLoc().getBlockZ(); + oldz2 = oldz2 + amount; + area.getLowLoc().setZ(oldz2); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.South") + " (" + amount + ")"); + } else + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.South") + " (" + amount + ")"); + } + playerLoc1.put(player.getName(), area.getHighLoc()); + playerLoc2.put(player.getName(), area.getLowLoc()); } - private Direction getDirection(Player player) - { - float pitch = player.getLocation().getPitch(); - float yaw = player.getLocation().getYaw(); - if(pitch<-50) - return Direction.UP; - if(pitch > 50) - return Direction.DOWN; - if((yaw>45 && yaw<135) || (yaw<-45 && yaw>-135)) - return Direction.MINUSX; - if((yaw>225 && yaw<315) || (yaw<-225 && yaw>-315)) - return Direction.PLUSX; - if((yaw>135 && yaw<225) || (yaw<-135 && yaw>-225)) - return Direction.MINUSZ; - if((yaw<45 || yaw>315) || (yaw>-45 || yaw<-315)) - return Direction.PLUSZ; - return null; + public boolean contract(Player player, int amount, boolean resadmin) { + if (!hasPlacedBoth(player.getName())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + return false; + } + Direction d = this.getDirection(player); + if (d == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidDirection")); + } + CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); + switch (d) { + case DOWN: + int oldy = area.getHighLoc().getBlockY(); + oldy = oldy - amount; + if (oldy > MAX_HEIGHT) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooHigh")); + oldy = MAX_HEIGHT; + } + area.getHighLoc().setY(oldy); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.Down") + " (" + amount + ")"); + break; + case MINUSX: + int oldx = area.getHighLoc().getBlockX(); + oldx = oldx - amount; + area.getHighLoc().setX(oldx); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.West") + " (" + amount + ")"); + break; + case MINUSZ: + int oldz = area.getHighLoc().getBlockZ(); + oldz = oldz - amount; + area.getHighLoc().setZ(oldz); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.North") + " (" + amount + ")"); + break; + case PLUSX: + oldx = area.getLowLoc().getBlockX(); + oldx = oldx + amount; + area.getLowLoc().setX(oldx); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.East") + " (" + amount + ")"); + break; + case PLUSZ: + oldz = area.getLowLoc().getBlockZ(); + oldz = oldz + amount; + area.getLowLoc().setZ(oldz); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.South") + " (" + amount + ")"); + break; + case UP: + oldy = area.getLowLoc().getBlockY(); + oldy = oldy + amount; + if (oldy < MIN_HEIGHT) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooLow")); + oldy = MIN_HEIGHT; + } + area.getLowLoc().setY(oldy); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.Up") + " (" + amount + ")"); + break; + default: + break; + } + + if (!ClaimedResidence.CheckAreaSize(player, area, resadmin)) + return false; + + playerLoc1.put(player.getName(), area.getHighLoc()); + playerLoc2.put(player.getName(), area.getLowLoc()); + return true; + } + + private Direction getDirection(Player player) { + + int yaw = (int) player.getLocation().getYaw(); + + if (yaw < 0) + yaw += 360; + + yaw += 45; + yaw %= 360; + + int facing = yaw / 90; + + float pitch = player.getLocation().getPitch(); + if (pitch < -50) + return Direction.UP; + if (pitch > 50) + return Direction.DOWN; + if (facing == 1) // east + return Direction.MINUSX; + if (facing == 3) // west + return Direction.PLUSX; + if (facing == 2) // north + return Direction.MINUSZ; + if (facing == 0) // south + return Direction.PLUSZ; + return null; } } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 62622a099..6cfadb1c3 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -19,89 +19,86 @@ * @author Administrator */ public class WorldEditSelectionManager extends SelectionManager { - - public WorldEditSelectionManager(Server serv) - { - super(serv); + + public WorldEditSelectionManager(Server serv) { + super(serv); } @Override public boolean worldEdit(Player player) { - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - Selection sel = wep.getSelection(player); - if(sel!=null) - { - Location pos1 = sel.getMinimumPoint(); - Location pos2 = sel.getMaximumPoint(); - try{ - CuboidRegion region = (CuboidRegion) sel.getRegionSelector().getRegion(); - pos1 = new Location(player.getWorld(), region.getPos1().getX(), region.getPos1().getY(), region.getPos1().getZ()); - pos2 = new Location(player.getWorld(), region.getPos2().getX(), region.getPos2().getY(), region.getPos2().getZ()); - }catch(Exception e){ - } - this.playerLoc1.put(player.getName(), pos1); - this.playerLoc2.put(player.getName(), pos2); - return true; - } - return false; + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + Selection sel = wep.getSelection(player); + if (sel != null) { + Location pos1 = sel.getMinimumPoint(); + Location pos2 = sel.getMaximumPoint(); + try { + CuboidRegion region = (CuboidRegion) sel.getRegionSelector().getRegion(); + pos1 = new Location(player.getWorld(), region.getPos1().getX(), region.getPos1().getY(), region.getPos1().getZ()); + pos2 = new Location(player.getWorld(), region.getPos2().getX(), region.getPos2().getY(), region.getPos2().getZ()); + } catch (Exception e) { + } + this.playerLoc1.put(player.getName(), pos1); + this.playerLoc2.put(player.getName(), pos2); + return true; + } + return false; } - - private void afterSelectionUpdate(Player player) - { - if (hasPlacedBoth(player.getName())) - { - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - World world = playerLoc1.get(player.getName()).getWorld(); - Selection selection = new CuboidSelection(world, playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); - wep.setSelection(player, selection); - } + + private void afterSelectionUpdate(Player player) { + if (hasPlacedBoth(player.getName())) { + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + World world = playerLoc1.get(player.getName()).getWorld(); + Selection selection = new CuboidSelection(world, playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); + wep.setSelection(player, selection); + NewMakeBorders(player, getPlayerLoc1(player.getName()), getPlayerLoc2(player.getName()), false); + } } @Override public void placeLoc1(Player player, Location loc) { - this.worldEdit(player); - super.placeLoc1(player, loc); - this.afterSelectionUpdate(player); + this.worldEdit(player); + super.placeLoc1(player, loc); + this.afterSelectionUpdate(player); } @Override public void placeLoc2(Player player, Location loc) { - this.worldEdit(player); - super.placeLoc2(player, loc); - this.afterSelectionUpdate(player); + this.worldEdit(player); + super.placeLoc2(player, loc); + this.afterSelectionUpdate(player); } @Override public void sky(Player player, boolean resadmin) { - this.worldEdit(player); - super.sky(player, resadmin); - afterSelectionUpdate(player); + this.worldEdit(player); + super.sky(player, resadmin); + afterSelectionUpdate(player); } @Override public void bedrock(Player player, boolean resadmin) { - this.worldEdit(player); - super.bedrock(player, resadmin); - afterSelectionUpdate(player); + this.worldEdit(player); + super.bedrock(player, resadmin); + afterSelectionUpdate(player); } @Override public void modify(Player player, boolean shift, int amount) { - this.worldEdit(player); - super.modify(player, shift, amount); - afterSelectionUpdate(player); + this.worldEdit(player); + super.modify(player, shift, amount); + afterSelectionUpdate(player); } @Override public void selectChunk(Player player) { - this.worldEdit(player); - super.selectChunk(player); - afterSelectionUpdate(player); + this.worldEdit(player); + super.selectChunk(player); + afterSelectionUpdate(player); } @Override public void showSelectionInfo(Player player) { - this.worldEdit(player); - super.showSelectionInfo(player); + this.worldEdit(player); + super.showSelectionInfo(player); } } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java new file mode 100644 index 000000000..3b889724c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -0,0 +1,40 @@ +package com.bekvon.bukkit.residence.selection; + +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.managers.RegionManager; +import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; + +public class WorldGuardUtil { + public static ProtectedRegion isSelectionInRegion(Player player) { + + if (Residence.wg == null) + return null; + + if (Residence.wep == null) + return null; + + if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) + return null; + Location loc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); + Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); + + String id = "icp__tempregion"; + BlockVector min = new BlockVector(loc1.getX(), loc1.getY(), loc1.getZ()); + BlockVector max = new BlockVector(loc2.getX(), loc2.getY(), loc2.getZ()); + ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); + RegionManager mgr = Residence.wg.getRegionContainer().get(loc1.getWorld()); + ApplicableRegionSet regions = mgr.getApplicableRegions(region); + + for (ProtectedRegion one : regions) { + if (!player.hasPermission("residence.worldguard." + one.getId())) + return one; + } + return null; + } +} diff --git a/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java b/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java index 99a999d4b..9586ba157 100644 --- a/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java +++ b/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java @@ -74,7 +74,7 @@ else if(player!=null && !player.equalsIgnoreCase("")) if(flagval.equalsIgnoreCase("removeall")) res.getPermissions().removeAllPlayerFlags(p, player, resadmin); else - res.getPermissions().setPlayerFlag(p, player, flag, flagval, resadmin); + res.getPermissions().setPlayerFlag(p, player, flag, flagval, resadmin, true); } } } diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index f603dc2cd..797302459 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -9,6 +9,7 @@ import java.util.Map; import java.util.Set; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.ChatColor; /** * @@ -18,65 +19,72 @@ public class Language { public Map text; public Language() { - text = new HashMap(); + text = new HashMap(); } public void setText(String key, String intext) { - text.put(key, intext); + text.put(key, intext); } private String getText(String key) { - String t = text.get(key); - if (t == null) { - t = ""; - } - return t; + String t = text.get(key); + if (t == null) { + t = ""; + } + return t; } public String getPhrase(String key) { - String[] split = key.split("\\."); - return getPhrase(split); + String[] split = key.split("\\."); + return getPhrase(split); + } + + public String getPhraseList(String key) { + String tx = text.get(key.replace(",", "\n")); + return tx; } public String getPhrase(String[] keys) { - return this.getPhrase(keys, (String[]) null); + return this.getPhrase(keys, (String[]) null); } public String getPhrase(String key, String words) { - return this.getPhrase(key.split("\\."), words); + return this.getPhrase(key.split("\\."), words); } public String getPhrase(String[] keys, String words) { - if (words == null) { - return this.getPhrase(keys, (String[]) null); - } else { - return this.getPhrase(keys, words.split("\\.")); - } + if (words == null) { + return this.getPhrase(keys, (String[]) null); + } else { + return this.getPhrase(keys, words.split("\\.")); + } } public String getPhrase(String[] keys, String[] words) { - String sentence = ""; - for (String key : keys) { - if (sentence.length() == 0) { - sentence = this.getText(key); - } else { - sentence = sentence + " " + this.getText(key).toLowerCase(); - } - } - if (words != null) { - for (int i = 0; i < words.length; i++) { - sentence = sentence.replaceAll("%" + (i + 1), words[i]); - } - } - return sentence; + String sentence = ""; + for (String key : keys) { + if (sentence.length() == 0) { + sentence = this.getText(key); + } else { + sentence = sentence + " " + this.getText(key).toLowerCase(); + } + } + if (words != null) { + for (int i = 0; i < words.length; i++) { + sentence = sentence.replaceAll("%" + (i + 1), words[i]); + } + } + + sentence = ChatColor.translateAlternateColorCodes('&', sentence); + return sentence; } public static Language parseText(FileConfiguration node, String topkey) { - Language newholder = new Language(); - Set keys = node.getConfigurationSection(topkey).getKeys(false); - for (String key : keys) { - newholder.text.put(key, node.getString(topkey + "." + key)); - } - return newholder; + Language newholder = new Language(); + Set keys = node.getConfigurationSection(topkey).getKeys(false); + for (String key : keys) { + newholder.text.put(key, node.getString(topkey + "." + key)); + } + return newholder; } } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 33504c423..cbfc9f6b1 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -4,9 +4,12 @@ */ package com.bekvon.bukkit.residence.text.help; + +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -26,189 +29,172 @@ public class HelpEntry { protected List subentrys; protected static int linesPerPage = 7; - public HelpEntry(String entryname) - { - name = entryname; - subentrys = new ArrayList(); - lines = new String[0]; + public HelpEntry(String entryname) { + name = entryname; + subentrys = new ArrayList(); + lines = new String[0]; } public String getName() { - if(name==null) - return ""; - return name; + if (name == null) + return ""; + return name; } - public void setName(String inname) - { - name = inname; + public void setName(String inname) { + name = inname; } - public void setDescription(String description) - { - desc = description; + public void setDescription(String description) { + desc = description; } - public String getDescription() - { - if(desc==null) - return ""; - return desc; + + public String getDescription() { + if (desc == null) + return ""; + return desc; } - public static int getLinesPerPage() - { - return linesPerPage; + public static int getLinesPerPage() { + return linesPerPage; } - public static void setLinesPerPage(int lines) - { - linesPerPage = lines; + public static void setLinesPerPage(int lines) { + linesPerPage = lines; } public void printHelp(CommandSender sender, int page) { - List helplines = this.getHelpData(); - int pagecount = (int) Math.ceil((double)helplines.size() / (double)linesPerPage); - if (page > pagecount || page < 1) { - sender.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidHelp")); - return; - } - sender.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("HelpPageHeader",ChatColor.YELLOW + name + ChatColor.RED+"."+ChatColor.YELLOW + page + ChatColor.RED+"."+ChatColor.YELLOW + pagecount + ChatColor.RED)); - sender.sendMessage(ChatColor.DARK_AQUA+Residence.getLanguage().getPhrase("Description")+": "+ChatColor.GREEN + desc); - int start = linesPerPage * (page - 1); - int end = start + linesPerPage; - boolean alternatecolor = false; - for (int i = start; i < end; i++) { - if (helplines.size() > i) { - if(alternatecolor) - { - sender.sendMessage(ChatColor.YELLOW+helplines.get(i)); - alternatecolor = false; - } - else - { - sender.sendMessage(ChatColor.GOLD+helplines.get(i)); - alternatecolor = true; - } - } - } - if(page---"); - else - sender.sendMessage(ChatColor.GRAY+"-----------------------"); - } - - public void printHelp(CommandSender sender, int page, String path) - { - HelpEntry subEntry = this.getSubEntry(path); - if(subEntry!=null) - { - subEntry.printHelp(sender, page); - } - else - { - sender.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidHelp")); - } - } - - private List getHelpData() - { - List helplines = new ArrayList(); - helplines.addAll(Arrays.asList(lines)); - if(subentrys.size()>0) - helplines.add(ChatColor.LIGHT_PURPLE+"---"+Residence.getLanguage().getPhrase("SubCommands")+"---"); - for(HelpEntry entry : subentrys) - { - helplines.add(ChatColor.GREEN+entry.getName() + ChatColor.YELLOW+" - " + entry.getDescription()); - } - return helplines; - } - - public boolean containesEntry(String name) - { - return this.getSubEntry(name)!=null; - } - - public HelpEntry getSubEntry(String name) - { - String[] split = name.split("\\."); - HelpEntry entry = this; - for(String entryname : split) - { - entry = entry.findSubEntry(entryname); - if(entry == null) - return null; - } - return entry; - } - - private HelpEntry findSubEntry(String name) - { - for(HelpEntry entry : subentrys) - { - if(entry.getName().equalsIgnoreCase(name)) - return entry; - } - return null; - } - - public void addSubEntry(HelpEntry entry) - { - if(!subentrys.contains(entry)) - { - subentrys.add(entry); - } - } - - public void removeSubEntry(HelpEntry entry) - { - if(subentrys.contains(entry)) - { - subentrys.remove(entry); - } - } - - public int getSubEntryCount() - { - return subentrys.size(); - } - - public static HelpEntry parseHelp(FileConfiguration node, String key) - { - String split[] = key.split("\\."); - String thisname = split[split.length-1]; - HelpEntry entry = new HelpEntry(thisname); - ConfigurationSection keysnode = node.getConfigurationSection(key); - Set keys = null; - if(keysnode!=null) - keys = keysnode.getKeys(false); - if(keys!=null) - { - if(keys.contains("Info")) - { - List stringList = node.getStringList(key + ".Info"); - if(stringList != null) - { - entry.lines = new String[stringList.size()]; - for(int i = 0; i < stringList.size(); i++) - { - entry.lines[i] = "- " + stringList.get(i); - } - } - } - if(keys.contains("Description")) - { - entry.desc = node.getString(key + ".Description"); - } - if(keys.contains("SubCommands")) - { - Set subcommandkeys = node.getConfigurationSection(key + ".SubCommands").getKeys(false); - for(String subkey : subcommandkeys) - { - entry.subentrys.add(HelpEntry.parseHelp(node, key+".SubCommands."+subkey)); - } - } - } - return entry; + List helplines = this.getHelpData(); + int pagecount = (int) Math.ceil((double) helplines.size() / (double) linesPerPage); + if (page > pagecount || page < 1) { + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); + return; + } + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("HelpPageHeader", ChatColor.YELLOW + name + ChatColor.RED + "." + ChatColor.YELLOW + page + + ChatColor.RED + "." + ChatColor.YELLOW + pagecount + ChatColor.RED)); + sender.sendMessage(ChatColor.DARK_AQUA + Residence.getLanguage().getPhrase("Description") + ": " + ChatColor.GREEN + desc); + int start = linesPerPage * (page - 1); + int end = start + linesPerPage; + boolean alternatecolor = false; + for (int i = start; i < end; i++) { + if (helplines.size() > i) { + if (alternatecolor) { + sender.sendMessage(ChatColor.YELLOW + helplines.get(i)); + alternatecolor = false; + } else { + sender.sendMessage(ChatColor.GOLD + helplines.get(i)); + alternatecolor = true; + } + } + } + + int NextPage = page + 1; + NextPage = page < pagecount ? NextPage : page; + int Prevpage = page - 1; + Prevpage = page > 1 ? Prevpage : page; + String prevCmd = !name.equalsIgnoreCase("res") ? "/res " + name + " ? " + Prevpage : "/res ? " + Prevpage; + String prev = "[\"\",{\"text\":\"" + Residence.getLanguage().getPhrase("PrevInfoPage") + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; + String nextCmd = !name.equalsIgnoreCase("res") ? "/res " + name + " ? " + NextPage : "/res ? " + NextPage; + String next = " {\"text\":\"" + Residence.getLanguage().getPhrase("NextInfoPage") + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); + +// if (page < pagecount) +// sender.sendMessage(ChatColor.GRAY + "---<" + Residence.getLanguage().getPhrase("NextPage") + ">---"); +// else +// sender.sendMessage(ChatColor.GRAY + "-----------------------"); + } + + public void printHelp(CommandSender sender, int page, String path) { + HelpEntry subEntry = this.getSubEntry(path); + if (subEntry != null) { + subEntry.printHelp(sender, page); + } else { + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); + } + } + + private List getHelpData() { + List helplines = new ArrayList(); + helplines.addAll(Arrays.asList(lines)); + if (subentrys.size() > 0) + helplines.add(ChatColor.LIGHT_PURPLE + "---" + Residence.getLanguage().getPhrase("SubCommands") + "---"); + for (HelpEntry entry : subentrys) { + helplines.add(ChatColor.GREEN + entry.getName() + ChatColor.YELLOW + " - " + entry.getDescription()); + } + return helplines; + } + + public boolean containesEntry(String name) { + return this.getSubEntry(name) != null; + } + + public HelpEntry getSubEntry(String name) { + String[] split = name.split("\\."); + HelpEntry entry = this; + for (String entryname : split) { + entry = entry.findSubEntry(entryname); + if (entry == null) + return null; + } + return entry; + } + + private HelpEntry findSubEntry(String name) { + for (HelpEntry entry : subentrys) { + if (entry.getName().equalsIgnoreCase(name)) + return entry; + } + return null; + } + + public void addSubEntry(HelpEntry entry) { + if (!subentrys.contains(entry)) { + subentrys.add(entry); + } + } + + public void removeSubEntry(HelpEntry entry) { + if (subentrys.contains(entry)) { + subentrys.remove(entry); + } + } + + public int getSubEntryCount() { + return subentrys.size(); + } + + public static HelpEntry parseHelp(FileConfiguration node, String key) { + String split[] = key.split("\\."); + String thisname = split[split.length - 1]; + HelpEntry entry = new HelpEntry(thisname); + ConfigurationSection keysnode = node.getConfigurationSection(key); + Set keys = null; + if (keysnode != null) + keys = keysnode.getKeys(false); + if (keys != null) { + if (keys.contains("Info")) { + List stringList = node.getStringList(key + ".Info"); + if (stringList != null) { + entry.lines = new String[stringList.size()]; + for (int i = 0; i < stringList.size(); i++) { + entry.lines[i] = "- " + ChatColor.translateAlternateColorCodes('&', stringList.get(i)); + } + } + } + if (keys.contains("Description")) { + entry.desc = node.getString(key + ".Description"); + } + if (keys.contains("SubCommands")) { + Set subcommandkeys = node.getConfigurationSection(key + ".SubCommands").getKeys(false); + for (String subkey : subcommandkeys) { + entry.subentrys.add(HelpEntry.parseHelp(node, key + ".SubCommands." + subkey)); + } + } + } + return entry; } } diff --git a/src/com/bekvon/bukkit/residence/utils/CrackShot.java b/src/com/bekvon/bukkit/residence/utils/CrackShot.java new file mode 100644 index 000000000..8e109c797 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/CrackShot.java @@ -0,0 +1,140 @@ +package com.bekvon.bukkit.residence.utils; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.shampaggon.crackshot.events.WeaponDamageEntityEvent; + +public class CrackShot implements Listener { + public CrackShot() { + } + + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalKilling(WeaponDamageEntityEvent event) { + Entity damager = event.getDamager(); + + if ((!(damager instanceof Arrow)) && (!(damager instanceof Player))) { + return; + } + + Player cause = null; + if ((damager instanceof Arrow) && (!(((Arrow) damager).getShooter() instanceof Player))) { + return; + } + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) { + return; + } + + if (!(event.getVictim() instanceof LivingEntity)) + return; + + Entity entity = event.getVictim(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (ResidenceEntityListener.isAnimal(entity)) { + if (res != null && !res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { + cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + event.setCancelled(true); + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { + if (event.getVictim().getType() != EntityType.ITEM_FRAME && event.getVictim().getType() != EntityType.ARMOR_STAND) + return; + + Entity dmgr = event.getDamager(); + Player player; + if (event.getDamager() instanceof Player) { + player = (Player) event.getDamager(); + } else { + if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { + player = (Player) ((Projectile) dmgr).getShooter(); + } else + return; + } + + if (Residence.isResAdminOn(player)) + return; + + // Note: Location of entity, not player; otherwise player could stand outside of res and still damage + Location loc = event.getVictim().getLocation(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null && !res.getPermissions().playerHas(player.getName(), "container", false)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + } + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamage(WeaponDamageEntityEvent event) { + + if (!(event.getVictim() instanceof Player)) + return; + + Player victim = (Player) event.getVictim(); + if (victim.hasMetadata("NPC")) { + return; + } + + ClaimedResidence area = Residence.getResidenceManager().getByLoc(victim.getLocation()); + /* Living Entities */ + Player damager = (Player) event.getPlayer(); + ClaimedResidence srcarea = null; + + if (damager == null) + return; + + srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); + + boolean srcpvp = true; + if (srcarea != null) { + srcpvp = srcarea.getPermissions().has("pvp", true); + } + + if (!srcpvp) { + damager.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + event.setCancelled(true); + return; + } + /* Check for Player vs Player */ + if (area == null) { + /* World PvP */ + if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { + damager.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldPVPDisabled")); + event.setCancelled(true); + } + } else { + /* Normal PvP */ + if (!area.getPermissions().has("pvp", true)) { + damager.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + event.setCancelled(true); + } + } + return; + + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/Debug.java b/src/com/bekvon/bukkit/residence/utils/Debug.java new file mode 100644 index 000000000..bb323f70a --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/Debug.java @@ -0,0 +1,18 @@ +package com.bekvon.bukkit.residence.utils; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +public class Debug { + public static void D(String message) { + + Player player = Bukkit.getPlayer("Zrips"); + if (player == null) + return; + + player.sendMessage(ChatColor.DARK_GRAY + "[Debug] " + ChatColor.DARK_AQUA + ChatColor.translateAlternateColorCodes('&', message)); + + return; + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java new file mode 100644 index 000000000..cec0fdbfe --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java @@ -0,0 +1,1586 @@ +package com.bekvon.bukkit.residence.utils; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import com.bekvon.bukkit.residence.utils.ReflectionUtils.PackageType; + +/** + * ParticleEffect Library + *

+ * This library was created by @DarkBlade12 and allows you to display all Minecraft particle effects on a Bukkit server + *

+ * You are welcome to use it, modify it and redistribute it under the following conditions: + *

    + *
  • Don't claim this class as your own + *
  • Don't remove this disclaimer + *
+ *

+ * Special thanks: + *

    + *
  • @microgeek (original idea, names and packet parameters) + *
  • @ShadyPotato (1.8 names, ids and packet parameters) + *
  • @RingOfStorms (particle behavior) + *
  • @Cybermaxke (particle behavior) + *
+ *

+ * It would be nice if you provide credit to me if you use this class in a published project + * + * @author DarkBlade12 + * @version 1.7 + */ +public enum ParticleEffects { + /** + * A particle effect which is displayed by exploding tnt and creepers: + *

    + *
  • It looks like a white cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + EXPLOSION_NORMAL("explode", 0, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by exploding ghast fireballs and wither skulls: + *
    + *
  • It looks like a gray ball which is fading away + *
  • The speed value slightly influences the size of this particle effect + *
+ */ + EXPLOSION_LARGE("largeexplode", 1, -1), + /** + * A particle effect which is displayed by exploding tnt and creepers: + *
    + *
  • It looks like a crowd of gray balls which are fading away + *
  • The speed value has no influence on this particle effect + *
+ */ + EXPLOSION_HUGE("hugeexplosion", 2, -1), + /** + * A particle effect which is displayed by launching fireworks: + *
    + *
  • It looks like a white star which is sparkling + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + FIREWORKS_SPARK("fireworksSpark", 3, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by swimming entities and arrows in water: + *
    + *
  • It looks like a bubble + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + WATER_BUBBLE("bubble", 4, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_WATER), + /** + * A particle effect which is displayed by swimming entities and shaking wolves: + *
    + *
  • It looks like a blue drop + *
  • The speed value has no influence on this particle effect + *
+ */ + WATER_SPLASH("splash", 5, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed on water when fishing: + *
    + *
  • It looks like a blue droplet + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + WATER_WAKE("wake", 6, 7, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by water: + *
    + *
  • It looks like a tiny blue square + *
  • The speed value has no influence on this particle effect + *
+ */ + SUSPENDED("suspended", 7, -1, ParticleProperty.REQUIRES_WATER), + /** + * A particle effect which is displayed by air when close to bedrock and the in the void: + *
    + *
  • It looks like a tiny gray square + *
  • The speed value has no influence on this particle effect + *
+ */ + SUSPENDED_DEPTH("depthSuspend", 8, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed when landing a critical hit and by arrows: + *
    + *
  • It looks like a light brown cross + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + CRIT("crit", 9, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed when landing a hit with an enchanted weapon: + *
    + *
  • It looks like a cyan star + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + CRIT_MAGIC("magicCrit", 10, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by primed tnt, torches, droppers, dispensers, end portals, brewing stands and monster spawners: + *
    + *
  • It looks like a little gray cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + SMOKE_NORMAL("smoke", 11, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by fire, minecarts with furnace and blazes: + *
    + *
  • It looks like a large gray cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + SMOKE_LARGE("largesmoke", 12, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed when splash potions or bottles o' enchanting hit something: + *
    + *
  • It looks like a white swirl + *
  • The speed value causes the particle to only move upwards when set to 0 + *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 + *
+ */ + SPELL("spell", 13, -1), + /** + * A particle effect which is displayed when instant splash potions hit something: + *
    + *
  • It looks like a white cross + *
  • The speed value causes the particle to only move upwards when set to 0 + *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 + *
+ */ + SPELL_INSTANT("instantSpell", 14, -1), + /** + * A particle effect which is displayed by entities with active potion effects: + *
    + *
  • It looks like a colored swirl + *
  • The speed value causes the particle to be colored black when set to 0 + *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed + *
+ */ + SPELL_MOB("mobSpell", 15, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed by entities with active potion effects applied through a beacon: + *
    + *
  • It looks like a transparent colored swirl + *
  • The speed value causes the particle to be always colored black when set to 0 + *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed + *
+ */ + SPELL_MOB_AMBIENT("mobSpellAmbient", 16, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed by witches: + *
    + *
  • It looks like a purple cross + *
  • The speed value causes the particle to only move upwards when set to 0 + *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 + *
+ */ + SPELL_WITCH("witchMagic", 17, -1), + /** + * A particle effect which is displayed by blocks beneath a water source: + *
    + *
  • It looks like a blue drip + *
  • The speed value has no influence on this particle effect + *
+ */ + DRIP_WATER("dripWater", 18, -1), + /** + * A particle effect which is displayed by blocks beneath a lava source: + *
    + *
  • It looks like an orange drip + *
  • The speed value has no influence on this particle effect + *
+ */ + DRIP_LAVA("dripLava", 19, -1), + /** + * A particle effect which is displayed when attacking a villager in a village: + *
    + *
  • It looks like a cracked gray heart + *
  • The speed value has no influence on this particle effect + *
+ */ + VILLAGER_ANGRY("angryVillager", 20, -1), + /** + * A particle effect which is displayed when using bone meal and trading with a villager in a village: + *
    + *
  • It looks like a green star + *
  • The speed value has no influence on this particle effect + *
+ */ + VILLAGER_HAPPY("happyVillager", 21, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by mycelium: + *
    + *
  • It looks like a tiny gray square + *
  • The speed value has no influence on this particle effect + *
+ */ + TOWN_AURA("townaura", 22, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by note blocks: + *
    + *
  • It looks like a colored note + *
  • The speed value causes the particle to be colored green when set to 0 + *
+ */ + NOTE("note", 23, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed by nether portals, endermen, ender pearls, eyes of ender, ender chests and dragon eggs: + *
    + *
  • It looks like a purple cloud + *
  • The speed value influences the spread of this particle effect + *
+ */ + PORTAL("portal", 24, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by enchantment tables which are nearby bookshelves: + *
    + *
  • It looks like a cryptic white letter + *
  • The speed value influences the spread of this particle effect + *
+ */ + ENCHANTMENT_TABLE("enchantmenttable", 25, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by torches, active furnaces, magma cubes and monster spawners: + *
    + *
  • It looks like a tiny flame + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + FLAME("flame", 26, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by lava: + *
    + *
  • It looks like a spark + *
  • The speed value has no influence on this particle effect + *
+ */ + LAVA("lava", 27, -1), + /** + * A particle effect which is currently unused: + *
    + *
  • It looks like a transparent gray square + *
  • The speed value has no influence on this particle effect + *
+ */ + FOOTSTEP("footstep", 28, -1), + /** + * A particle effect which is displayed when a mob dies: + *
    + *
  • It looks like a large white cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + CLOUD("cloud", 29, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by redstone ore, powered redstone, redstone torches and redstone repeaters: + *
    + *
  • It looks like a tiny colored cloud + *
  • The speed value causes the particle to be colored red when set to 0 + *
+ */ + REDSTONE("reddust", 30, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed when snowballs hit a block: + *
    + *
  • It looks like a little piece with the snowball texture + *
  • The speed value has no influence on this particle effect + *
+ */ + SNOWBALL("snowballpoof", 31, -1), + /** + * A particle effect which is currently unused: + *
    + *
  • It looks like a tiny white cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + SNOW_SHOVEL("snowshovel", 32, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by slimes: + *
    + *
  • It looks like a tiny part of the slimeball icon + *
  • The speed value has no influence on this particle effect + *
+ */ + SLIME("slime", 33, -1), + /** + * A particle effect which is displayed when breeding and taming animals: + *
    + *
  • It looks like a red heart + *
  • The speed value has no influence on this particle effect + *
+ */ + HEART("heart", 34, -1), + /** + * A particle effect which is displayed by barriers: + *
    + *
  • It looks like a red box with a slash through it + *
  • The speed value has no influence on this particle effect + *
+ */ + BARRIER("barrier", 35, 8), + /** + * A particle effect which is displayed when breaking a tool or eggs hit a block: + *
    + *
  • It looks like a little piece with an item texture + *
+ */ + ITEM_CRACK("iconcrack", 36, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), + /** + * A particle effect which is displayed when breaking blocks or sprinting: + *
    + *
  • It looks like a little piece with a block texture + *
  • The speed value has no influence on this particle effect + *
+ */ + BLOCK_CRACK("blockcrack", 37, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), + /** + * A particle effect which is displayed when falling: + *
    + *
  • It looks like a little piece with a block texture + *
+ */ + BLOCK_DUST("blockdust", 38, 7, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), + /** + * A particle effect which is displayed when rain hits the ground: + *
    + *
  • It looks like a blue droplet + *
  • The speed value has no influence on this particle effect + *
+ */ + WATER_DROP("droplet", 39, 8), + /** + * A particle effect which is currently unused: + *
    + *
  • It has no visual effect + *
+ */ + ITEM_TAKE("take", 40, 8), + /** + * A particle effect which is displayed by elder guardians: + *
    + *
  • It looks like the shape of the elder guardian + *
  • The speed value has no influence on this particle effect + *
  • The offset values have no influence on this particle effect + *
+ */ + MOB_APPEARANCE("mobappearance", 41, 8); + + private static final Map NAME_MAP = new HashMap(); + private static final Map ID_MAP = new HashMap(); + private final String name; + private final int id; + private final int requiredVersion; + private final List properties; + + // Initialize map for quick name and id lookup + static { + for (ParticleEffects effect : values()) { + NAME_MAP.put(effect.name, effect); + ID_MAP.put(effect.id, effect); + } + } + + /** + * Construct a new particle effect + * + * @param name Name of this particle effect + * @param id Id of this particle effect + * @param requiredVersion Version which is required (1.x) + * @param properties Properties of this particle effect + */ + private ParticleEffects(String name, int id, int requiredVersion, ParticleProperty... properties) { + this.name = name; + this.id = id; + this.requiredVersion = requiredVersion; + this.properties = Arrays.asList(properties); + } + + /** + * Returns the name of this particle effect + * + * @return The name + */ + public String getName() { + return name; + } + + /** + * Returns the id of this particle effect + * + * @return The id + */ + public int getId() { + return id; + } + + /** + * Returns the required version for this particle effect (1.x) + * + * @return The required version + */ + public int getRequiredVersion() { + return requiredVersion; + } + + /** + * Determine if this particle effect has a specific property + * + * @return Whether it has the property or not + */ + public boolean hasProperty(ParticleProperty property) { + return properties.contains(property); + } + + /** + * Determine if this particle effect is supported by your current server version + * + * @return Whether the particle effect is supported or not + */ + public boolean isSupported() { + if (requiredVersion == -1) { + return true; + } + return ParticlePacket.getVersion() >= requiredVersion; + } + + /** + * Returns the particle effect with the given name + * + * @param name Name of the particle effect + * @return The particle effect + */ + public static ParticleEffects fromName(String name) { + for (Entry entry : NAME_MAP.entrySet()) { + if (!entry.getKey().equalsIgnoreCase(name)) { + continue; + } + return entry.getValue(); + } + return null; + } + + /** + * Returns the particle effect with the given id + * + * @param id Id of the particle effect + * @return The particle effect + */ + public static ParticleEffects fromId(int id) { + for (Entry entry : ID_MAP.entrySet()) { + if (entry.getKey() != id) { + continue; + } + return entry.getValue(); + } + return null; + } + + /** + * Determine if water is at a certain location + * + * @param location Location to check + * @return Whether water is at this location or not + */ + private static boolean isWater(Location location) { + Material material = location.getBlock().getType(); + return material == Material.WATER || material == Material.STATIONARY_WATER; + } + + /** + * Determine if the distance between @param location and one of the players exceeds 256 + * + * @param location Location to check + * @return Whether the distance exceeds 256 or not + */ + private static boolean isLongDistance(Location location, List players) { + for (Player player : players) { + if (player.getLocation().distanceSquared(location) < 65536) { + continue; + } + return true; + } + return false; + } + + /** + * Determine if the data type for a particle effect is correct + * + * @param effect Particle effect + * @param data Particle data + * @return Whether the data type is correct or not + */ + private static boolean isDataCorrect(ParticleEffects effect, ParticleData data) { + return ((effect == BLOCK_CRACK || effect == BLOCK_DUST) && data instanceof BlockData) || (effect == ITEM_CRACK && data instanceof ItemData); + } + + /** + * Determine if the color type for a particle effect is correct + * + * @param effect Particle effect + * @param color Particle color + * @return Whether the color type is correct or not + */ + private static boolean isColorCorrect(ParticleEffects effect, ParticleColor color) { + return ((effect == SPELL_MOB || effect == SPELL_MOB_AMBIENT || effect == REDSTONE) && color instanceof OrdinaryColor) || (effect == NOTE && color instanceof NoteColor); + } + + /** + * Displays a particle effect which is only visible for all players within a certain range in the world of @param center + * + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect requires water and none is at the center location + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, null).sendTo(center, range); + } + + /** + * Displays a particle effect which is only visible for the specified players + * + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect requires water and none is at the center location + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), null).sendTo(center, players); + } + + /** + * Displays a particle effect which is only visible for the specified players + * + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect requires water and none is at the center location + * @see #display(float, float, float, float, int, Location, List) + */ + public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + display(offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); + } + + /** + * Displays a single particle which flies into a determined direction and is only visible for all players within a certain range in the world of @param center + * + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location + * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (!hasProperty(ParticleProperty.DIRECTIONAL)) { + throw new IllegalArgumentException("This particle effect is not directional"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, direction, speed, range > 256, null).sendTo(center, range); + } + + /** + * Displays a single particle which flies into a determined direction and is only visible for the specified players + * + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location + * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (!hasProperty(ParticleProperty.DIRECTIONAL)) { + throw new IllegalArgumentException("This particle effect is not directional"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, direction, speed, isLongDistance(center, players), null).sendTo(center, players); + } + + /** + * Displays a single particle which flies into a determined direction and is only visible for the specified players + * + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location + * @see #display(Vector, float, Location, List) + */ + public void display(Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + display(direction, speed, center, Arrays.asList(players)); + } + + /** + * Displays a single particle which is colored and only visible for all players within a certain range in the world of @param center + * + * @param color Color of the particle + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect + * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(ParticleColor color, Location center, double range) throws ParticleVersionException, ParticleColorException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.COLORABLE)) { + throw new ParticleColorException("This particle effect is not colorable"); + } + if (!isColorCorrect(this, color)) { + throw new ParticleColorException("The particle color type is incorrect"); + } + new ParticlePacket(this, color, range > 256).sendTo(center, range); + } + + /** + * Displays a single particle which is colored and only visible for the specified players + * + * @param color Color of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect + * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(ParticleColor color, Location center, List players) throws ParticleVersionException, ParticleColorException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.COLORABLE)) { + throw new ParticleColorException("This particle effect is not colorable"); + } + if (!isColorCorrect(this, color)) { + throw new ParticleColorException("The particle color type is incorrect"); + } + new ParticlePacket(this, color, isLongDistance(center, players)).sendTo(center, players); + } + + /** + * Displays a single particle which is colored and only visible for the specified players + * + * @param color Color of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect + * @see #display(ParticleColor, Location, List) + */ + public void display(ParticleColor color, Location center, Player... players) throws ParticleVersionException, ParticleColorException { + display(color, center, Arrays.asList(players)); + } + + /** + * Displays a particle effect which requires additional data and is only visible for all players within a certain range in the world of @param center + * + * @param data Data of the effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, data).sendTo(center, range); + } + + /** + * Displays a particle effect which requires additional data and is only visible for the specified players + * + * @param data Data of the effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), data).sendTo(center, players); + } + + /** + * Displays a particle effect which requires additional data and is only visible for the specified players + * + * @param data Data of the effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see #display(ParticleData, float, float, float, float, int, Location, List) + */ + public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) throws ParticleVersionException, ParticleDataException { + display(data, offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); + } + + /** + * Displays a single particle which requires additional data that flies into a determined direction and is only visible for all players within a certain range in the world of @param center + * + * @param data Data of the effect + * @param direction Direction of the particle + * @param speed Display speed of the particles + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(ParticleData data, Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, direction, speed, range > 256, data).sendTo(center, range); + } + + /** + * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players + * + * @param data Data of the effect + * @param direction Direction of the particle + * @param speed Display speed of the particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(ParticleData data, Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, direction, speed, isLongDistance(center, players), data).sendTo(center, players); + } + + /** + * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players + * + * @param data Data of the effect + * @param direction Direction of the particle + * @param speed Display speed of the particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see #display(ParticleData, Vector, float, Location, List) + */ + public void display(ParticleData data, Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException { + display(data, direction, speed, center, Arrays.asList(players)); + } + + /** + * Represents the property of a particle effect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static enum ParticleProperty { + /** + * The particle effect requires water to be displayed + */ + REQUIRES_WATER, + /** + * The particle effect requires block or item data to be displayed + */ + REQUIRES_DATA, + /** + * The particle effect uses the offsets as direction values + */ + DIRECTIONAL, + /** + * The particle effect uses the offsets as color values + */ + COLORABLE; + } + + /** + * Represents the particle data for effects like {@link ParticleEffects#ITEM_CRACK}, {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + public static abstract class ParticleData { + private final Material material; + private final byte data; + private final int[] packetData; + + /** + * Construct a new particle data + * + * @param material Material of the item/block + * @param data Data value of the item/block + */ + @SuppressWarnings("deprecation") + public ParticleData(Material material, byte data) { + this.material = material; + this.data = data; + this.packetData = new int[] { material.getId(), data }; + } + + /** + * Returns the material of this data + * + * @return The material + */ + public Material getMaterial() { + return material; + } + + /** + * Returns the data value of this data + * + * @return The data value + */ + public byte getData() { + return data; + } + + /** + * Returns the data as an int array for packet construction + * + * @return The data for the packet + */ + public int[] getPacketData() { + return packetData; + } + + /** + * Returns the data as a string for pre 1.8 versions + * + * @return The data string for the packet + */ + public String getPacketDataString() { + return "_" + packetData[0] + "_" + packetData[1]; + } + } + + /** + * Represents the item data for the {@link ParticleEffects#ITEM_CRACK} effect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + public static final class ItemData extends ParticleData { + /** + * Construct a new item data + * + * @param material Material of the item + * @param data Data value of the item + * @see ParticleData#ParticleData(Material, byte) + */ + public ItemData(Material material, byte data) { + super(material, data); + } + } + + /** + * Represents the block data for the {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} effects + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + public static final class BlockData extends ParticleData { + /** + * Construct a new block data + * + * @param material Material of the block + * @param data Data value of the block + * @throws IllegalArgumentException If the material is not a block + * @see ParticleData#ParticleData(Material, byte) + */ + public BlockData(Material material, byte data) throws IllegalArgumentException { + super(material, data); + if (!material.isBlock()) { + throw new IllegalArgumentException("The material is not a block"); + } + } + } + + /** + * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT}, {@link ParticleEffects#REDSTONE} and {@link ParticleEffects#NOTE} + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static abstract class ParticleColor { + /** + * Returns the value for the offsetX field + * + * @return The offsetX value + */ + public abstract float getValueX(); + + /** + * Returns the value for the offsetY field + * + * @return The offsetY value + */ + public abstract float getValueY(); + + /** + * Returns the value for the offsetZ field + * + * @return The offsetZ value + */ + public abstract float getValueZ(); + } + + /** + * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT} and {@link ParticleEffects#NOTE} + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static final class OrdinaryColor extends ParticleColor { + private final int red; + private final int green; + private final int blue; + + /** + * Construct a new ordinary color + * + * @param red Red value of the RGB format + * @param green Green value of the RGB format + * @param blue Blue value of the RGB format + * @throws IllegalArgumentException If one of the values is lower than 0 or higher than 255 + */ + public OrdinaryColor(int red, int green, int blue) throws IllegalArgumentException { + if (red < 0) { + throw new IllegalArgumentException("The red value is lower than 0"); + } + if (red > 255) { + throw new IllegalArgumentException("The red value is higher than 255"); + } + this.red = red; + if (green < 0) { + throw new IllegalArgumentException("The green value is lower than 0"); + } + if (green > 255) { + throw new IllegalArgumentException("The green value is higher than 255"); + } + this.green = green; + if (blue < 0) { + throw new IllegalArgumentException("The blue value is lower than 0"); + } + if (blue > 255) { + throw new IllegalArgumentException("The blue value is higher than 255"); + } + this.blue = blue; + } + + /** + * Returns the red value of the RGB format + * + * @return The red value + */ + public int getRed() { + return red; + } + + /** + * Returns the green value of the RGB format + * + * @return The green value + */ + public int getGreen() { + return green; + } + + /** + * Returns the blue value of the RGB format + * + * @return The blue value + */ + public int getBlue() { + return blue; + } + + /** + * Returns the red value divided by 255 + * + * @return The offsetX value + */ + @Override + public float getValueX() { + return (float) red / 255F; + } + + /** + * Returns the green value divided by 255 + * + * @return The offsetY value + */ + @Override + public float getValueY() { + return (float) green / 255F; + } + + /** + * Returns the blue value divided by 255 + * + * @return The offsetZ value + */ + @Override + public float getValueZ() { + return (float) blue / 255F; + } + } + + /** + * Represents the color for the {@link ParticleEffects#NOTE} effect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static final class NoteColor extends ParticleColor { + private final int note; + + /** + * Construct a new note color + * + * @param note Note id which determines color + * @throws IllegalArgumentException If the note value is lower than 0 or higher than 255 + */ + public NoteColor(int note) throws IllegalArgumentException { + if (note < 0) { + throw new IllegalArgumentException("The note value is lower than 0"); + } + if (note > 24) { + throw new IllegalArgumentException("The note value is higher than 24"); + } + this.note = note; + } + + /** + * Returns the note value divided by 24 + * + * @return The offsetX value + */ + @Override + public float getValueX() { + return (float) note / 24F; + } + + /** + * Returns zero because the offsetY value is unused + * + * @return zero + */ + @Override + public float getValueY() { + return 0; + } + + /** + * Returns zero because the offsetZ value is unused + * + * @return zero + */ + @Override + public float getValueZ() { + return 0; + } + + } + + /** + * Represents a runtime exception that is thrown either if the displayed particle effect requires data and has none or vice-versa or if the data type is incorrect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + private static final class ParticleDataException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new particle data exception + * + * @param message Message that will be logged + */ + public ParticleDataException(String message) { + super(message); + } + } + + /** + * Represents a runtime exception that is thrown either if the displayed particle effect is not colorable or if the particle color type is incorrect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + private static final class ParticleColorException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new particle color exception + * + * @param message Message that will be logged + */ + public ParticleColorException(String message) { + super(message); + } + } + + /** + * Represents a runtime exception that is thrown if the displayed particle effect requires a newer version + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + private static final class ParticleVersionException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new particle version exception + * + * @param message Message that will be logged + */ + public ParticleVersionException(String message) { + super(message); + } + } + + /** + * Represents a particle effect packet with all attributes which is used for sending packets to the players + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.5 + */ + public static final class ParticlePacket { + private static int version; + private static Class enumParticle; + private static Constructor packetConstructor; + private static Method getHandle; + private static Field playerConnection; + private static Method sendPacket; + private static boolean initialized; + private final ParticleEffects effect; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final float speed; + private final int amount; + private final boolean longDistance; + private final ParticleData data; + private Object packet; + + /** + * Construct a new particle packet + * + * @param effect Particle effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 + * @param data Data of the effect + * @throws IllegalArgumentException If the speed or amount is lower than 0 + * @see #initialize() + */ + public ParticlePacket(ParticleEffects effect, float offsetX, float offsetY, float offsetZ, float speed, int amount, boolean longDistance, ParticleData data) throws IllegalArgumentException { + initialize(); + if (speed < 0) { + throw new IllegalArgumentException("The speed is lower than 0"); + } + if (amount < 0) { + throw new IllegalArgumentException("The amount is lower than 0"); + } + this.effect = effect; + this.offsetX = offsetX; + this.offsetY = offsetY; + this.offsetZ = offsetZ; + this.speed = speed; + this.amount = amount; + this.longDistance = longDistance; + this.data = data; + } + + /** + * Construct a new particle packet of a single particle flying into a determined direction + * + * @param effect Particle effect + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 + * @param data Data of the effect + * @throws IllegalArgumentException If the speed is lower than 0 + * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) + */ + public ParticlePacket(ParticleEffects effect, Vector direction, float speed, boolean longDistance, ParticleData data) throws IllegalArgumentException { + this(effect, (float) direction.getX(), (float) direction.getY(), (float) direction.getZ(), speed, 0, longDistance, data); + } + + /** + * Construct a new particle packet of a single colored particle + * + * @param effect Particle effect + * @param color Color of the particle + * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 + * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) + */ + public ParticlePacket(ParticleEffects effect, ParticleColor color, boolean longDistance) { + this(effect, color.getValueX(), color.getValueY(), color.getValueZ(), 1, 0, longDistance, null); + } + + /** + * Initializes {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} and sets {@link #initialized} to true if it succeeds + *

+ * Note: These fields only have to be initialized once, so it will return if {@link #initialized} is already set to true + * + * @throws VersionIncompatibleException if your bukkit version is not supported by this library + */ + public static void initialize() throws VersionIncompatibleException { + if (initialized) { + return; + } + try { + version = Integer.parseInt(Character.toString(PackageType.getServerVersion().charAt(3))); + if (version > 7) { + enumParticle = PackageType.MINECRAFT_SERVER.getClass("EnumParticle"); + } + Class packetClass = PackageType.MINECRAFT_SERVER.getClass(version < 7 ? "Packet63WorldParticles" : "PacketPlayOutWorldParticles"); + packetConstructor = ReflectionUtils.getConstructor(packetClass); + getHandle = ReflectionUtils.getMethod("CraftPlayer", PackageType.CRAFTBUKKIT_ENTITY, "getHandle"); + playerConnection = ReflectionUtils.getField("EntityPlayer", PackageType.MINECRAFT_SERVER, false, "playerConnection"); + sendPacket = ReflectionUtils.getMethod(playerConnection.getType(), "sendPacket", PackageType.MINECRAFT_SERVER.getClass("Packet")); + } catch (Exception exception) { + throw new VersionIncompatibleException("Your current bukkit version seems to be incompatible with this library", exception); + } + initialized = true; + } + + /** + * Returns the version of your server (1.x) + * + * @return The version number + */ + public static int getVersion() { + return version; + } + + /** + * Determine if {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} are initialized + * + * @return Whether these fields are initialized or not + * @see #initialize() + */ + public static boolean isInitialized() { + return initialized; + } + + /** + * Initializes {@link #packet} with all set values + * + * @param center Center location of the effect + * @throws PacketInstantiationException If instantion fails due to an unknown error + */ + private void initializePacket(Location center) throws PacketInstantiationException { + if (packet != null) { + return; + } + try { + packet = packetConstructor.newInstance(); + if (version < 8) { + String name = effect.getName(); + if (data != null) { + name += data.getPacketDataString(); + } + ReflectionUtils.setValue(packet, true, "a", name); + } else { + ReflectionUtils.setValue(packet, true, "a", enumParticle.getEnumConstants()[effect.getId()]); + ReflectionUtils.setValue(packet, true, "j", longDistance); + if (data != null) { + ReflectionUtils.setValue(packet, true, "k", data.getPacketData()); + } + } + ReflectionUtils.setValue(packet, true, "b", (float) center.getX()); + ReflectionUtils.setValue(packet, true, "c", (float) center.getY()); + ReflectionUtils.setValue(packet, true, "d", (float) center.getZ()); + ReflectionUtils.setValue(packet, true, "e", offsetX); + ReflectionUtils.setValue(packet, true, "f", offsetY); + ReflectionUtils.setValue(packet, true, "g", offsetZ); + ReflectionUtils.setValue(packet, true, "h", speed); + ReflectionUtils.setValue(packet, true, "i", amount); + } catch (Exception exception) { + throw new PacketInstantiationException("Packet instantiation failed", exception); + } + } + + /** + * Sends the packet to a single player and caches it + * + * @param center Center location of the effect + * @param player Receiver of the packet + * @throws PacketInstantiationException If instantion fails due to an unknown error + * @throws PacketSendingException If sending fails due to an unknown error + * @see #initializePacket(Location) + */ + public void sendTo(Location center, Player player) throws PacketInstantiationException, PacketSendingException { + initializePacket(center); + try { + sendPacket.invoke(playerConnection.get(getHandle.invoke(player)), packet); + } catch (Exception exception) { + throw new PacketSendingException("Failed to send the packet to player '" + player.getName() + "'", exception); + } + } + + /** + * Sends the packet to all players in the list + * + * @param center Center location of the effect + * @param players Receivers of the packet + * @throws IllegalArgumentException If the player list is empty + * @see #sendTo(Location center, Player player) + */ + public void sendTo(Location center, List players) throws IllegalArgumentException { + if (players.isEmpty()) { + throw new IllegalArgumentException("The player list is empty"); + } + for (Player player : players) { + sendTo(center, player); + } + } + + /** + * Sends the packet to all players in a certain range + * + * @param center Center location of the effect + * @param range Range in which players will receive the packet (Maximum range for particles is usually 16, but it can differ for some types) + * @throws IllegalArgumentException If the range is lower than 1 + * @see #sendTo(Location center, Player player) + */ + public void sendTo(Location center, double range) throws IllegalArgumentException { + if (range < 1) { + throw new IllegalArgumentException("The range is lower than 1"); + } + String worldName = center.getWorld().getName(); + double squared = range * range; + for (Player player : Bukkit.getOnlinePlayers()) { + if (!player.getWorld().getName().equals(worldName) || player.getLocation().distanceSquared(center) > squared) { + continue; + } + sendTo(center, player); + } + } + + /** + * Represents a runtime exception that is thrown if a bukkit version is not compatible with this library + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.5 + */ + private static final class VersionIncompatibleException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new version incompatible exception + * + * @param message Message that will be logged + * @param cause Cause of the exception + */ + public VersionIncompatibleException(String message, Throwable cause) { + super(message, cause); + } + } + + /** + * Represents a runtime exception that is thrown if packet instantiation fails + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.4 + */ + private static final class PacketInstantiationException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new packet instantiation exception + * + * @param message Message that will be logged + * @param cause Cause of the exception + */ + public PacketInstantiationException(String message, Throwable cause) { + super(message, cause); + } + } + + /** + * Represents a runtime exception that is thrown if packet sending fails + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.4 + */ + private static final class PacketSendingException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new packet sending exception + * + * @param message Message that will be logged + * @param cause Cause of the exception + */ + public PacketSendingException(String message, Throwable cause) { + super(message, cause); + } + } + } +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/utils/ReflectionUtils.java b/src/com/bekvon/bukkit/residence/utils/ReflectionUtils.java new file mode 100644 index 000000000..6e47e7b09 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/ReflectionUtils.java @@ -0,0 +1,605 @@ +package com.bekvon.bukkit.residence.utils; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +import org.bukkit.Bukkit; + +/** + * ReflectionUtils + *

+ * This class provides useful methods which makes dealing with reflection much easier, especially when working with Bukkit + *

+ * You are welcome to use it, modify it and redistribute it under the following conditions: + *

    + *
  • Don't claim this class as your own + *
  • Don't remove this disclaimer + *
+ *

+ * It would be nice if you provide credit to me if you use this class in a published project + * + * @author DarkBlade12 + * @version 1.1 + */ +public final class ReflectionUtils { + // Prevent accidental construction + private ReflectionUtils() {} + + /** + * Returns the constructor of a given class with the given parameter types + * + * @param clazz Target class + * @param parameterTypes Parameter types of the desired constructor + * @return The constructor of the target class with the specified parameter types + * @throws NoSuchMethodException If the desired constructor with the specified parameter types cannot be found + * @see DataType + * @see DataType#getPrimitive(Class[]) + * @see DataType#compare(Class[], Class[]) + */ + public static Constructor getConstructor(Class clazz, Class... parameterTypes) throws NoSuchMethodException { + Class[] primitiveTypes = DataType.getPrimitive(parameterTypes); + for (Constructor constructor : clazz.getConstructors()) { + if (!DataType.compare(DataType.getPrimitive(constructor.getParameterTypes()), primitiveTypes)) { + continue; + } + return constructor; + } + throw new NoSuchMethodException("There is no such constructor in this class with the specified parameter types"); + } + + /** + * Returns the constructor of a desired class with the given parameter types + * + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param parameterTypes Parameter types of the desired constructor + * @return The constructor of the desired target class with the specified parameter types + * @throws NoSuchMethodException If the desired constructor with the specified parameter types cannot be found + * @throws ClassNotFoundException ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #getClass(String, PackageType) + * @see #getConstructor(Class, Class...) + */ + public static Constructor getConstructor(String className, PackageType packageType, Class... parameterTypes) throws NoSuchMethodException, ClassNotFoundException { + return getConstructor(packageType.getClass(className), parameterTypes); + } + + /** + * Returns an instance of a class with the given arguments + * + * @param clazz Target class + * @param arguments Arguments which are used to construct an object of the target class + * @return The instance of the target class with the specified arguments + * @throws InstantiationException If you cannot create an instance of the target class due to certain circumstances + * @throws IllegalAccessException If the desired constructor cannot be accessed due to certain circumstances + * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the constructor (this should not occur since it searches for a constructor with the types of the arguments) + * @throws InvocationTargetException If the desired constructor cannot be invoked + * @throws NoSuchMethodException If the desired constructor with the specified arguments cannot be found + */ + public static Object instantiateObject(Class clazz, Object... arguments) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException { + return getConstructor(clazz, DataType.getPrimitive(arguments)).newInstance(arguments); + } + + /** + * Returns an instance of a desired class with the given arguments + * + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param arguments Arguments which are used to construct an object of the desired target class + * @return The instance of the desired target class with the specified arguments + * @throws InstantiationException If you cannot create an instance of the desired target class due to certain circumstances + * @throws IllegalAccessException If the desired constructor cannot be accessed due to certain circumstances + * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the constructor (this should not occur since it searches for a constructor with the types of the arguments) + * @throws InvocationTargetException If the desired constructor cannot be invoked + * @throws NoSuchMethodException If the desired constructor with the specified arguments cannot be found + * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #getClass(String, PackageType) + * @see #instantiateObject(Class, Object...) + */ + public static Object instantiateObject(String className, PackageType packageType, Object... arguments) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException { + return instantiateObject(packageType.getClass(className), arguments); + } + + /** + * Returns a method of a class with the given parameter types + * + * @param clazz Target class + * @param methodName Name of the desired method + * @param parameterTypes Parameter types of the desired method + * @return The method of the target class with the specified name and parameter types + * @throws NoSuchMethodException If the desired method of the target class with the specified name and parameter types cannot be found + * @see DataType#getPrimitive(Class[]) + * @see DataType#compare(Class[], Class[]) + */ + public static Method getMethod(Class clazz, String methodName, Class... parameterTypes) throws NoSuchMethodException { + Class[] primitiveTypes = DataType.getPrimitive(parameterTypes); + for (Method method : clazz.getMethods()) { + if (!method.getName().equals(methodName) || !DataType.compare(DataType.getPrimitive(method.getParameterTypes()), primitiveTypes)) { + continue; + } + return method; + } + throw new NoSuchMethodException("There is no such method in this class with the specified name and parameter types"); + } + + /** + * Returns a method of a desired class with the given parameter types + * + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param methodName Name of the desired method + * @param parameterTypes Parameter types of the desired method + * @return The method of the desired target class with the specified name and parameter types + * @throws NoSuchMethodException If the desired method of the desired target class with the specified name and parameter types cannot be found + * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #getClass(String, PackageType) + * @see #getMethod(Class, String, Class...) + */ + public static Method getMethod(String className, PackageType packageType, String methodName, Class... parameterTypes) throws NoSuchMethodException, ClassNotFoundException { + return getMethod(packageType.getClass(className), methodName, parameterTypes); + } + + /** + * Invokes a method on an object with the given arguments + * + * @param instance Target object + * @param methodName Name of the desired method + * @param arguments Arguments which are used to invoke the desired method + * @return The result of invoking the desired method on the target object + * @throws IllegalAccessException If the desired method cannot be accessed due to certain circumstances + * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the method (this should not occur since it searches for a method with the types of the arguments) + * @throws InvocationTargetException If the desired method cannot be invoked on the target object + * @throws NoSuchMethodException If the desired method of the class of the target object with the specified name and arguments cannot be found + * @see #getMethod(Class, String, Class...) + * @see DataType#getPrimitive(Object[]) + */ + public static Object invokeMethod(Object instance, String methodName, Object... arguments) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException { + return getMethod(instance.getClass(), methodName, DataType.getPrimitive(arguments)).invoke(instance, arguments); + } + + /** + * Invokes a method of the target class on an object with the given arguments + * + * @param instance Target object + * @param clazz Target class + * @param methodName Name of the desired method + * @param arguments Arguments which are used to invoke the desired method + * @return The result of invoking the desired method on the target object + * @throws IllegalAccessException If the desired method cannot be accessed due to certain circumstances + * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the method (this should not occur since it searches for a method with the types of the arguments) + * @throws InvocationTargetException If the desired method cannot be invoked on the target object + * @throws NoSuchMethodException If the desired method of the target class with the specified name and arguments cannot be found + * @see #getMethod(Class, String, Class...) + * @see DataType#getPrimitive(Object[]) + */ + public static Object invokeMethod(Object instance, Class clazz, String methodName, Object... arguments) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException { + return getMethod(clazz, methodName, DataType.getPrimitive(arguments)).invoke(instance, arguments); + } + + /** + * Invokes a method of a desired class on an object with the given arguments + * + * @param instance Target object + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param methodName Name of the desired method + * @param arguments Arguments which are used to invoke the desired method + * @return The result of invoking the desired method on the target object + * @throws IllegalAccessException If the desired method cannot be accessed due to certain circumstances + * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the method (this should not occur since it searches for a method with the types of the arguments) + * @throws InvocationTargetException If the desired method cannot be invoked on the target object + * @throws NoSuchMethodException If the desired method of the desired target class with the specified name and arguments cannot be found + * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #getClass(String, PackageType) + * @see #invokeMethod(Object, Class, String, Object...) + */ + public static Object invokeMethod(Object instance, String className, PackageType packageType, String methodName, Object... arguments) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException { + return invokeMethod(instance, packageType.getClass(className), methodName, arguments); + } + + /** + * Returns a field of the target class with the given name + * + * @param clazz Target class + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @return The field of the target class with the specified name + * @throws NoSuchFieldException If the desired field of the given class cannot be found + * @throws SecurityException If the desired field cannot be made accessible + */ + public static Field getField(Class clazz, boolean declared, String fieldName) throws NoSuchFieldException, SecurityException { + Field field = declared ? clazz.getDeclaredField(fieldName) : clazz.getField(fieldName); + field.setAccessible(true); + return field; + } + + /** + * Returns a field of a desired class with the given name + * + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @return The field of the desired target class with the specified name + * @throws NoSuchFieldException If the desired field of the desired class cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #getField(Class, boolean, String) + */ + public static Field getField(String className, PackageType packageType, boolean declared, String fieldName) throws NoSuchFieldException, SecurityException, ClassNotFoundException { + return getField(packageType.getClass(className), declared, fieldName); + } + + /** + * Returns the value of a field of the given class of an object + * + * @param instance Target object + * @param clazz Target class + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @return The value of field of the target object + * @throws IllegalArgumentException If the target object does not feature the desired field + * @throws IllegalAccessException If the desired field cannot be accessed + * @throws NoSuchFieldException If the desired field of the target class cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @see #getField(Class, boolean, String) + */ + public static Object getValue(Object instance, Class clazz, boolean declared, String fieldName) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { + return getField(clazz, declared, fieldName).get(instance); + } + + /** + * Returns the value of a field of a desired class of an object + * + * @param instance Target object + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @return The value of field of the target object + * @throws IllegalArgumentException If the target object does not feature the desired field + * @throws IllegalAccessException If the desired field cannot be accessed + * @throws NoSuchFieldException If the desired field of the desired class cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #getValue(Object, Class, boolean, String) + */ + public static Object getValue(Object instance, String className, PackageType packageType, boolean declared, String fieldName) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, ClassNotFoundException { + return getValue(instance, packageType.getClass(className), declared, fieldName); + } + + /** + * Returns the value of a field with the given name of an object + * + * @param instance Target object + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @return The value of field of the target object + * @throws IllegalArgumentException If the target object does not feature the desired field (should not occur since it searches for a field with the given name in the class of the object) + * @throws IllegalAccessException If the desired field cannot be accessed + * @throws NoSuchFieldException If the desired field of the target object cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @see #getValue(Object, Class, boolean, String) + */ + public static Object getValue(Object instance, boolean declared, String fieldName) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { + return getValue(instance, instance.getClass(), declared, fieldName); + } + + /** + * Sets the value of a field of the given class of an object + * + * @param instance Target object + * @param clazz Target class + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @param value New value + * @throws IllegalArgumentException If the type of the value does not match the type of the desired field + * @throws IllegalAccessException If the desired field cannot be accessed + * @throws NoSuchFieldException If the desired field of the target class cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @see #getField(Class, boolean, String) + */ + public static void setValue(Object instance, Class clazz, boolean declared, String fieldName, Object value) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { + getField(clazz, declared, fieldName).set(instance, value); + } + + /** + * Sets the value of a field of a desired class of an object + * + * @param instance Target object + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @param value New value + * @throws IllegalArgumentException If the type of the value does not match the type of the desired field + * @throws IllegalAccessException If the desired field cannot be accessed + * @throws NoSuchFieldException If the desired field of the desired class cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #setValue(Object, Class, boolean, String, Object) + */ + public static void setValue(Object instance, String className, PackageType packageType, boolean declared, String fieldName, Object value) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, ClassNotFoundException { + setValue(instance, packageType.getClass(className), declared, fieldName, value); + } + + /** + * Sets the value of a field with the given name of an object + * + * @param instance Target object + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @param value New value + * @throws IllegalArgumentException If the type of the value does not match the type of the desired field + * @throws IllegalAccessException If the desired field cannot be accessed + * @throws NoSuchFieldException If the desired field of the target object cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @see #setValue(Object, Class, boolean, String, Object) + */ + public static void setValue(Object instance, boolean declared, String fieldName, Object value) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { + setValue(instance, instance.getClass(), declared, fieldName, value); + } + + /** + * Represents an enumeration of dynamic packages of NMS and CraftBukkit + *

+ * This class is part of the ReflectionUtils and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.0 + */ + public enum PackageType { + MINECRAFT_SERVER("net.minecraft.server." + getServerVersion()), + CRAFTBUKKIT("org.bukkit.craftbukkit." + getServerVersion()), + CRAFTBUKKIT_BLOCK(CRAFTBUKKIT, "block"), + CRAFTBUKKIT_CHUNKIO(CRAFTBUKKIT, "chunkio"), + CRAFTBUKKIT_COMMAND(CRAFTBUKKIT, "command"), + CRAFTBUKKIT_CONVERSATIONS(CRAFTBUKKIT, "conversations"), + CRAFTBUKKIT_ENCHANTMENS(CRAFTBUKKIT, "enchantments"), + CRAFTBUKKIT_ENTITY(CRAFTBUKKIT, "entity"), + CRAFTBUKKIT_EVENT(CRAFTBUKKIT, "event"), + CRAFTBUKKIT_GENERATOR(CRAFTBUKKIT, "generator"), + CRAFTBUKKIT_HELP(CRAFTBUKKIT, "help"), + CRAFTBUKKIT_INVENTORY(CRAFTBUKKIT, "inventory"), + CRAFTBUKKIT_MAP(CRAFTBUKKIT, "map"), + CRAFTBUKKIT_METADATA(CRAFTBUKKIT, "metadata"), + CRAFTBUKKIT_POTION(CRAFTBUKKIT, "potion"), + CRAFTBUKKIT_PROJECTILES(CRAFTBUKKIT, "projectiles"), + CRAFTBUKKIT_SCHEDULER(CRAFTBUKKIT, "scheduler"), + CRAFTBUKKIT_SCOREBOARD(CRAFTBUKKIT, "scoreboard"), + CRAFTBUKKIT_UPDATER(CRAFTBUKKIT, "updater"), + CRAFTBUKKIT_UTIL(CRAFTBUKKIT, "util"); + + private final String path; + + /** + * Construct a new package type + * + * @param path Path of the package + */ + private PackageType(String path) { + this.path = path; + } + + /** + * Construct a new package type + * + * @param parent Parent package of the package + * @param path Path of the package + */ + private PackageType(PackageType parent, String path) { + this(parent + "." + path); + } + + /** + * Returns the path of this package type + * + * @return The path + */ + public String getPath() { + return path; + } + + /** + * Returns the class with the given name + * + * @param className Name of the desired class + * @return The class with the specified name + * @throws ClassNotFoundException If the desired class with the specified name and package cannot be found + */ + public Class getClass(String className) throws ClassNotFoundException { + return Class.forName(this + "." + className); + } + + // Override for convenience + @Override + public String toString() { + return path; + } + + /** + * Returns the version of your server + * + * @return The server version + */ + public static String getServerVersion() { + return Bukkit.getServer().getClass().getPackage().getName().substring(23); + } + } + + /** + * Represents an enumeration of Java data types with corresponding classes + *

+ * This class is part of the ReflectionUtils and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.0 + */ + public enum DataType { + BYTE(byte.class, Byte.class), + SHORT(short.class, Short.class), + INTEGER(int.class, Integer.class), + LONG(long.class, Long.class), + CHARACTER(char.class, Character.class), + FLOAT(float.class, Float.class), + DOUBLE(double.class, Double.class), + BOOLEAN(boolean.class, Boolean.class); + + private static final Map, DataType> CLASS_MAP = new HashMap, DataType>(); + private final Class primitive; + private final Class reference; + + // Initialize map for quick class lookup + static { + for (DataType type : values()) { + CLASS_MAP.put(type.primitive, type); + CLASS_MAP.put(type.reference, type); + } + } + + /** + * Construct a new data type + * + * @param primitive Primitive class of this data type + * @param reference Reference class of this data type + */ + private DataType(Class primitive, Class reference) { + this.primitive = primitive; + this.reference = reference; + } + + /** + * Returns the primitive class of this data type + * + * @return The primitive class + */ + public Class getPrimitive() { + return primitive; + } + + /** + * Returns the reference class of this data type + * + * @return The reference class + */ + public Class getReference() { + return reference; + } + + /** + * Returns the data type with the given primitive/reference class + * + * @param clazz Primitive/Reference class of the data type + * @return The data type + */ + public static DataType fromClass(Class clazz) { + return CLASS_MAP.get(clazz); + } + + /** + * Returns the primitive class of the data type with the given reference class + * + * @param clazz Reference class of the data type + * @return The primitive class + */ + public static Class getPrimitive(Class clazz) { + DataType type = fromClass(clazz); + return type == null ? clazz : type.getPrimitive(); + } + + /** + * Returns the reference class of the data type with the given primitive class + * + * @param clazz Primitive class of the data type + * @return The reference class + */ + public static Class getReference(Class clazz) { + DataType type = fromClass(clazz); + return type == null ? clazz : type.getReference(); + } + + /** + * Returns the primitive class array of the given class array + * + * @param classes Given class array + * @return The primitive class array + */ + public static Class[] getPrimitive(Class[] classes) { + int length = classes == null ? 0 : classes.length; + Class[] types = new Class[length]; + for (int index = 0; index < length; index++) { + types[index] = getPrimitive(classes[index]); + } + return types; + } + + /** + * Returns the reference class array of the given class array + * + * @param classes Given class array + * @return The reference class array + */ + public static Class[] getReference(Class[] classes) { + int length = classes == null ? 0 : classes.length; + Class[] types = new Class[length]; + for (int index = 0; index < length; index++) { + types[index] = getReference(classes[index]); + } + return types; + } + + /** + * Returns the primitive class array of the given object array + * + * @param object Given object array + * @return The primitive class array + */ + public static Class[] getPrimitive(Object[] objects) { + int length = objects == null ? 0 : objects.length; + Class[] types = new Class[length]; + for (int index = 0; index < length; index++) { + types[index] = getPrimitive(objects[index].getClass()); + } + return types; + } + + /** + * Returns the reference class array of the given object array + * + * @param object Given object array + * @return The reference class array + */ + public static Class[] getReference(Object[] objects) { + int length = objects == null ? 0 : objects.length; + Class[] types = new Class[length]; + for (int index = 0; index < length; index++) { + types[index] = getReference(objects[index].getClass()); + } + return types; + } + + /** + * Compares two class arrays on equivalence + * + * @param primary Primary class array + * @param secondary Class array which is compared to the primary array + * @return Whether these arrays are equal or not + */ + public static boolean compare(Class[] primary, Class[] secondary) { + if (primary == null || secondary == null || primary.length != secondary.length) { + return false; + } + for (int index = 0; index < primary.length; index++) { + Class primaryClass = primary[index]; + Class secondaryClass = secondary[index]; + if (primaryClass.equals(secondaryClass) || primaryClass.isAssignableFrom(secondaryClass)) { + continue; + } + return false; + } + return true; + } + } +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 3c0b16290..0a4af28df 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -14,43 +14,44 @@ import com.bekvon.bukkit.residence.Residence; public class VersionChecker { - Residence plugin; - public VersionChecker(Residence plugin) { - this.plugin = plugin; + Residence plugin; + + public VersionChecker(Residence plugin) { + this.plugin = plugin; + } + + public void VersionCheck(final Player player) { + if (!Residence.getConfigManager().versionCheck()) { + return; } - - public void VersionCheck(final Player player) { - if(!Residence.getConfigManager().versionCheck()){ - return; + + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + public void run() { + String readURL = "https://raw.githubusercontent.com/bekvon/Residence/master/src/plugin.yml"; + FileConfiguration config; + String currentVersion = plugin.getDescription().getVersion(); + try { + URL url = new URL(readURL); + BufferedReader br = new BufferedReader(new InputStreamReader( + url.openStream())); + config = YamlConfiguration.loadConfiguration(br); + String newVersion = config.getString("version"); + br.close(); + if (!newVersion.equals(currentVersion)) { + String msg = ChatColor.GREEN + "Residence v" + newVersion + " is now available!\n" + + "Your version: " + currentVersion + "\n" + + "You can download new version from " + ChatColor.BLUE + plugin.getDescription().getWebsite(); + if (player != null) { + player.sendMessage(msg); + } else { + plugin.consoleMessage(msg); + } + } + } catch (IOException e) { + e.printStackTrace(); } - - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - public void run() { - String readURL = "https://raw.githubusercontent.com/bekvon/Residence/master/src/plugin.yml"; - FileConfiguration config; - String currentVersion = plugin.getDescription().getVersion(); - try { - URL url = new URL(readURL); - BufferedReader br = new BufferedReader(new InputStreamReader( - url.openStream())); - config = YamlConfiguration.loadConfiguration(br); - String newVersion = config.getString("version"); - br.close(); - if(!newVersion.equals(currentVersion)){ - String msg = ChatColor.GREEN + "Residence v" + newVersion + " is now available!\n" + - "Your version: " + currentVersion + "\n" + - "You can download new version from " + ChatColor.BLUE + plugin.getDescription().getWebsite(); - if(player != null){ - player.sendMessage(msg); - } else { - plugin.consoleMessage(msg); - } - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } + } + }); + } } diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 04b9720c4..21e8a9efe 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -79,7 +79,8 @@ public String getPlayerGroup(Player player) { } public String getPlayerGroup(String player, String world) { - String group = permissions.getPrimaryGroup(world, player); + @SuppressWarnings("deprecation") + String group = permissions.getPrimaryGroup(world, player); if (group == null) { return group; } else { @@ -87,26 +88,31 @@ public String getPlayerGroup(String player, String world) { } } + @SuppressWarnings("deprecation") @Override public double getBalance(String playerName) { return economy.getBalance(playerName); } + @SuppressWarnings("deprecation") @Override public boolean canAfford(String playerName, double amount) { return economy.has(playerName, amount); } + @SuppressWarnings("deprecation") @Override public boolean add(String playerName, double amount) { return economy.depositPlayer(playerName, amount).transactionSuccess(); } + @SuppressWarnings("deprecation") @Override public boolean subtract(String playerName, double amount) { return economy.withdrawPlayer(playerName, amount).transactionSuccess(); } + @SuppressWarnings("deprecation") @Override public boolean transfer(String playerFrom, String playerTo, double amount) { if (economy.withdrawPlayer(playerFrom, amount).transactionSuccess()) { diff --git a/src/config.yml b/src/config.yml index 4131350d9..8bb82367c 100644 --- a/src/config.yml +++ b/src/config.yml @@ -63,204 +63,3 @@ Global: CustomContainers: [] CustomBothClick: [] CustomRightClick: [] - # These are world flags that are applied when the player is NOT within a residence. - Flags: - Global: #these are default for all worlds unless specified below, they can be overridden per group - use: true - build: true - ignite: true - firespread: true - damage: true - creeper: true - tnt: true - pvp: true - WorldNameHere: #here you can set flags for individual worlds, these override Global - #build: true - # This gives permission to change certain flags to all groups, unless specifically denied to the group. - FlagPermission: - move: true - build: true - place: true - destroy: true - use: true - container: true - pvp: true - tp: true - ignite: true - firespread: true - bucket: true - flow: true - lavaflow: true - waterflow: true - creeper: true - tnt: true - monsters: true - animals: true - subzone: true - healing: true - piston: true - diode: true - lever: true - button: true - door: true - table: true - enchant: true - brew: true - bed: true - cake: true - note: true - trample: false - burn: true - explode: false - fireball: true - # These are default flags applied to all residences from any user group. - ResidenceDefault: - build: false - use: false - container: false - pvp: false - tnt: false - creeper: false - flow: false - piston: false - ignite: false - firespread: false - # These are default flags applied to the residence creator of any group. - CreatorDefault: - build: true - move: true - use: true - ignite: true - container: true - # These are default group flags applied to a residence made by a user of any group. - GroupDefault: - #default: #group name - #build: true - -# These groups correspond to the Permissions groups defined in your '.yml' -Groups: - Default: #group name - # Information about the Residence zone that the player can define. - #Uncomment the lines below to mirror this config to other groups. - #Mirror: - #- 'group1' - #- 'group2' - Residence: - # Determins if this group can create residences or not. This option can be overriden with the permissions node 'residence.create' - CanCreate: true - # The maximum number of Residences a player can have. - MaxResidences: 3 - # The maximum number of physical areas a residence can have. - MaxAreasPerResidence: 2 - # The maximum number of blocks a Residence can be, East to West (X). - MaxEastWest: 16 - # The maximum number of blocks a Residence can be, North to South (Z). - MaxNorthSouth: 16 - # The maximum number of blocks a Residence can be, High to Low (Y). - MaxUpDown: 256 - # The lowest altitude this group is allowed to protect. - MinHeight: 0 - # The highest altitude this group is allowed to protect. - MaxHeight: 255 - # The maximum recursive depth that subzones can go. - # A subzone within a subzone within the Residence zone would be a depth of 2. - # Set to 0 to disable subzones. - SubzoneDepth: 3 - # Whether or not to allow teleporting to Residences. - CanTeleport: true - # Allow or Disallow the use of /res unstuck, to get yourself out of a residence if stuck in one somehow - Unstuck: true - # Allow or Disallow the use of /res kick, to kick player from residence. - Kick: False - # Allow or Disallow the use of the /res select command, if disabled they can only use the selection tool. - SelectCommandAccess: true - # Allow or Disallow the group to access the Blacklist/Ignorelist for residences they own. - ItemListAccess: true - # Options relating to enter and leave messages on the residence. - Messaging: - # Whether or not the player can change the Residence enter and leave messages. - CanChange: true - # The default enter message to apply to new Residences created by players in this group. - # Leaving the message blank will disable it. - DefaultEnter: Welcome %player to %residence, owned by %owner. - # The default leave message to apply to new Residences created by players in this group. - # Leaving the message blank will disable it. - DefaultLeave: Now leaving %residence. - # Options relating to the Lease system. - Lease: - # The maximum number of days to allow leases. - MaxDays: 16 - # The number of days to add to the lease following a '/res lease renew' command. - RenewIncrement: 14 - #Options related to the rent system - Rent: - #determines how many residences can be rented by players of this group at once - MaxRents: 3 - #determines how many residences can be set for rent by players of this group at once - MaxRentables: 3 - # Options relating to the Residence Economy. - Economy: - # Whether or not players in this group can buy other Residences that are for sale. - CanBuy: true - # Whether or not players in this group can sell their Residences. - CanSell: false - # Whether or not to ignore the Residence size/count limits when buying a residence. - IgnoreLimits: false - # The cost, per block, of making a new Residence or adding a area to it. - BuyCost: 0.05 - # The cost, per block, of renewing a Residence lease (if the lease system is enabled). - RenewCost: 0.02 - # Flags are checked in the order: - # 1: Player - # 2: Group - # 3: Owner - # 4: If all others are undefined, reverts to default value (usually true). - # Flag permissions default to false. - # These flags settings override the globals. - Flags: - # Specifically allow or deny this group from changing certain flags. - Permission: - #build: true - # Specifys the flags that are applied at residence creation for players of this group. - Default: - #build: true - # Specifys the flags that are applied at to the creator at residence creation. - CreatorDefault: - #build: true - # Specifys the flags that are applied to other groups for this residence, at creation. - GroupDefault: - #default: #group name - #build: false - #these flags are applied specifically to this group whenever they are outside a residence - #these flags will override the flags at the top, under the Global section. - World: - Global: #these flags will apply to all worlds - #build: false - WorldNameHere: #or you can apply them by each individual world - #build: false - -# You can manually specify the group a player is in below, this overrides their permissions group. -GroupAssignments: - bekvon: default - player: default - -ItemList: #this is where you can create blacklists / whitelists - DefaultList: #list name is not important, as long as it is unique. Its good to use a descripive name. - #type of the list, can be blacklist, whitelist, or ignorelist - Type: blacklist - #If you want, you can have this list only apply to one world, otherwise it applys to all worlds - #World: world - #You can also have the list apply only to one group, otherwise it applys for all groups - #Group: default - #this is the actual list of material names that this list allows or dissallows - #You can look up the material name by item ID in game by typing /res material - #Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance - Items: - - 'BEDROCK' - - 'LAVA' - - 'WATER' - - 'STATIONARY_LAVA' - - 'STATIONARY_WATER' - - 'MOB_SPAWNER' -# Used to determine which major revision of Residence this config is from, dont change this. -ResidenceVersion: 2 diff --git a/src/flags.yml b/src/flags.yml new file mode 100644 index 000000000..79e502852 --- /dev/null +++ b/src/flags.yml @@ -0,0 +1,110 @@ +#These are Global Settings for Residence. +Global: + # These are world flags that are applied when the player is NOT within a residence. + Flags: + Global: #these are default for all worlds unless specified below, they can be overridden per group + use: true + build: true + ignite: true + firespread: true + damage: true + creeper: true + tnt: true + pvp: true + WorldNameHere: #here you can set flags for individual worlds, these override Global + #build: true + # This gives permission to change certain flags to all groups, unless specifically denied to the group. + FlagPermission: + move: true + build: true + place: true + destroy: true + use: true + container: true + pvp: true + tp: true + ignite: true + firespread: true + bucket: true + flow: true + lavaflow: true + waterflow: true + creeper: true + tnt: true + monsters: true + animals: true + animalkilling: true + mobkilling: true + vehicledestroy: true + trade: true + shear: true + leash: true + nofly: true + subzone: true + healing: true + piston: true + diode: true + lever: true + button: true + door: true + table: true + enchant: true + brew: true + bed: true + cake: true + note: true + trample: false + burn: true + explode: false + fireball: true + # These are default flags applied to all residences from any user group. + ResidenceDefault: + build: false + use: false + container: false + pvp: false + tnt: false + creeper: false + flow: false + piston: false + ignite: false + firespread: false + vehicledestroy: false + animalkilling: false + shear: false + leash: false + # These are default flags applied to the residence creator of any group. + CreatorDefault: + build: true + move: true + use: true + ignite: true + container: true + animalkilling: true + mobkilling: true + vehicledestroy: true + trade: true + shear: true + leash: true + # These are default group flags applied to a residence made by a user of any group. + GroupDefault: + #default: #group name + #build: true +ItemList: #this is where you can create blacklists / whitelists + DefaultList: #list name is not important, as long as it is unique. Its good to use a descripive name. + #type of the list, can be blacklist, whitelist, or ignorelist + Type: blacklist + #If you want, you can have this list only apply to one world, otherwise it applys to all worlds + #World: world + #You can also have the list apply only to one group, otherwise it applys for all groups + #Group: default + #this is the actual list of material names that this list allows or dissallows + #You can look up the material name by item ID in game by typing /res material + #Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance + Items: + - 'BEDROCK' + - 'LAVA' + - 'WATER' + - 'STATIONARY_LAVA' + - 'STATIONARY_WATER' + - 'MOB_SPAWNER' \ No newline at end of file diff --git a/src/groups.yml b/src/groups.yml new file mode 100644 index 000000000..f05247019 --- /dev/null +++ b/src/groups.yml @@ -0,0 +1,106 @@ +# These groups correspond to the Permissions groups defined in your '.yml' +Groups: + Default: #group name + # Information about the Residence zone that the player can define. + #Uncomment the lines below to mirror this config to other groups. + #Mirror: + #- 'group1' + #- 'group2' + Residence: + # Determins if this group can create residences or not. This option can be overriden with the permissions node 'residence.create' + CanCreate: true + # The maximum number of Residences a player can have. + MaxResidences: 3 + # The maximum number of physical areas a residence can have. + MaxAreasPerResidence: 2 + # The maximum number of blocks a Residence can be, East to West (X). + MaxEastWest: 16 + # The maximum number of blocks a Residence can be, North to South (Z). + MaxNorthSouth: 16 + # The maximum number of blocks a Residence can be, High to Low (Y). + MaxUpDown: 256 + # The lowest altitude this group is allowed to protect. + MinHeight: 0 + # The highest altitude this group is allowed to protect. + MaxHeight: 255 + # The maximum recursive depth that subzones can go. + # A subzone within a subzone within the Residence zone would be a depth of 2. + # Set to 0 to disable subzones. + SubzoneDepth: 3 + # Whether or not to allow teleporting to Residences. + CanTeleport: true + # Allow or Disallow the use of /res unstuck, to get yourself out of a residence if stuck in one somehow + Unstuck: true + # Allow or Disallow the use of /res kick, to kick player from residence. + Kick: False + # Allow or Disallow the use of the /res select command, if disabled they can only use the selection tool. + SelectCommandAccess: true + # Allow or Disallow the group to access the Blacklist/Ignorelist for residences they own. + ItemListAccess: true + # Options relating to enter and leave messages on the residence. + Messaging: + # Whether or not the player can change the Residence enter and leave messages. + CanChange: true + # The default enter message to apply to new Residences created by players in this group. + # Leaving the message blank will disable it. + DefaultEnter: Welcome %player to %residence, owned by %owner. + # The default leave message to apply to new Residences created by players in this group. + # Leaving the message blank will disable it. + DefaultLeave: Now leaving %residence. + # Options relating to the Lease system. + Lease: + # The maximum number of days to allow leases. + MaxDays: 16 + # The number of days to add to the lease following a '/res lease renew' command. + RenewIncrement: 14 + #Options related to the rent system + Rent: + #determines how many residences can be rented by players of this group at once + MaxRents: 3 + #determines how many residences can be set for rent by players of this group at once + MaxRentables: 3 + # Options relating to the Residence Economy. + Economy: + # Whether or not players in this group can buy other Residences that are for sale. + CanBuy: true + # Whether or not players in this group can sell their Residences. + CanSell: false + # Whether or not to ignore the Residence size/count limits when buying a residence. + IgnoreLimits: false + # The cost, per block, of making a new Residence or adding a area to it. + BuyCost: 0.05 + # The cost, per block, of renewing a Residence lease (if the lease system is enabled). + RenewCost: 0.02 + # Flags are checked in the order: + # 1: Player + # 2: Group + # 3: Owner + # 4: If all others are undefined, reverts to default value (usually true). + # Flag permissions default to false. + # These flags settings override the globals. + Flags: + # Specifically allow or deny this group from changing certain flags. + Permission: + #build: true + # Specifys the flags that are applied at residence creation for players of this group. + Default: + #build: true + # Specifys the flags that are applied at to the creator at residence creation. + CreatorDefault: + #build: true + # Specifys the flags that are applied to other groups for this residence, at creation. + GroupDefault: + #default: #group name + #build: false + #these flags are applied specifically to this group whenever they are outside a residence + #these flags will override the flags at the top, under the Global section. + World: + Global: #these flags will apply to all worlds + #build: false + WorldNameHere: #or you can apply them by each individual world + #build: false + +# You can manually specify the group a player is in below, this overrides their permissions group. +GroupAssignments: + bekvon: default + player: default \ No newline at end of file diff --git a/src/languagefiles/English.yml b/src/languagefiles/English.yml deleted file mode 100644 index c5a987d0d..000000000 --- a/src/languagefiles/English.yml +++ /dev/null @@ -1,628 +0,0 @@ -# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. -Version: 21 -FieldsVersion: 22 -Language: - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - #Version 1 Fields - InvalidResidence: Invalid Residence... - InvalidSubzone: Invalid Subzone... - InvalidDirection: Invalid Direction... - InvalidChannel: Invalid Channel... - InvalidAmount: Invalid Amount... - InvalidCost: Invalid Cost... - InvalidDays: Invalid number of days... - InvalidMaterial: Invalid Material... - InvalidBoolean: Invalid value, must be true(t) or false(f) - InvalidArea: Invalid Area... - InvalidGroup: Invalid Group... - InvalidMessageType: Message type must be enter or remove. - InvalidList: Invalid List... - InvalidFlag: Invalid Flag... - InvalidFlagState: Invalid flag state, must be true(t), false(f), or remove(r) - AreaExists: Area name already exists. - AreaCreate: 'Residence Area created, ID %1' - AreaDiffWorld: Area is in a different world from residence. - AreaCollision: 'Area collides with residence %1' - AreaSubzoneCollision: 'Area collides with subzone %1' - AreaNonExist: No such area exists. - AreaInvalidName: Invalid Area Name... - AreaRename: 'Renamed area %1 to %2' - AreaRemove: 'Removed area %1...' - AreaRemoveLast: Cannot remove the last area in a residence. - AreaNotWithinParent: Area is not within parent area. - AreaUpdate: Area Updated... - AreaMaxPhysical: You've reached the max physical areas allowed for your residence. - AreaSizeLimit: Area size is not within your allowed limits. - AreaHighLimit: 'You cannot protect this high up, your limit is %1' - AreaLowLimit: 'You cannot protect this deep, your limit is %1' - NotInResidence: You are not in a Residence. - Kicked: 'You were kicked from residence' - InResidence: 'You are standing in Residence %1' - ResidenceOwnerChange: 'Residence %1 owner changed to %2' - NonAdmin: You are not a Residence admin. - AdminOnly: Only admins have access to this command. - ChatDisabled: Residence Chat Disabled... - SubzoneRename: 'Renamed subzone %1 to %2' - SubzoneRemove: 'Subzone %1 removed.' - SubzoneCreate: 'Created Subzone %1' - SubzoneCreateFail: 'Unable to create subzone %1' - SubzoneExists: 'Subzone %1 already exists.' - SubzoneCollide: 'Subzone collides with subzone %1' - SubzoneMaxDepth: You have reached the maximum allowed subzone depth. - SubzoneSelectInside: Both selection points must be inside the residence. - SelectPoints: Select two points first before using this command! - SelectionSuccess: Selection Successful! - SelectionFail: Invalid select command... - SelectionBedrock: Selection expanded to your lowest allowed limit. - SelectionSky: Selection expanded to your highest allowed limit. - SelectionArea: 'Selected area %1 of residence %2' - SelectDiabled: You don't have access to selections commands. - NoPermission: You dont have permission for this. - OwnerNoPermission: The owner does not have permission for this. - ParentNoPermission: You don't have permission to make changes to the parent zone. - MessageChange: Message Set... - FlagSet: Flag Set... - FlagCheckTrue: 'Flag %1 applys to player %2 for residence %3, value = %4' - FlagCheckFalse: 'Flag %1 does not apply to player %2 for residence.' - FlagsCleared: Flags Cleared. - FlagsDefault: Flags set to default. - Usage: Command Usage - InvalidHelp: Invalid Help Page... - SubCommands: Sub Commands - InvalidList: Unknown list type, must be blacklist or ignorelist. - MaterialGet: 'The material name for ID %1 is %2' - MarketDisabled: Economy Disabled! - MarketList: Market List - SelectionTool: Selection Tool - InfoTool: Info Tool - NoBankAccess: You dont have bank access. - NotEnoughMoney: You dont have enough money. - BankNoMoney: Not enough money in the bank. - BankDeposit: 'You deposit %1 into the residence bank.' - BankWithdraw: 'You withdraw %1 from the residence bank.' - MoneyCharged: 'Charged %1 to your %2 account.' - MoneyCredit: 'Credited %1 to your %2 account.' - RentDisabled: Rent system is disabled. - RentReleaseInvalid: 'Residence %1 is not rented or for rent.' - RentSellFail: Cannot sell a Residence if it is for rent. - SellRentFail: Cannot rent a Residence if it is for sale. - OwnerBuyFail: Cannot buy your own land! - OwnerRentFail: Cannot rent your own land! - AlreadySellFail: Residence already for sale! - ResidenceBought: 'You bought residence %1' - ResidenceBuy: 'Residence %1 has bought residence %2 from you.' - ResidenceBuyTooBig: This residence has areas bigger then your allowed max. - ResidenceNotForSale: Residence is not for sale. - ResidenceForSale: 'Residence %1 is now for sale for %2' - ResidenceStopSelling: Residence is no longer for sale. - ResidenceTooMany: You already own the max number of residences your allowed to. - ResidenceMaxRent: You already are renting the maximum number of residences your allowed to. - ResidenceAlreadyRent: Residence is already for rent... - ResidenceNotForRent: Residence not for rent... - ResidenceNotRented: Residence not rented. - ResidenceUnrent: 'Residence %1 has been unrented.' - ResidenceRemoveRentable: 'Residence %1 is no longer rentable.' - ResidenceForRentSuccess: 'Residence %1 is now for rent for %2 every %3 days.' - ResidenceRentSuccess: 'You have rented Residence %1 for %2 days.' - ResidenceAlreadyRented: 'Residence %1 has currently been rented to %2' - ResidenceAlreadyExists: 'A residence named %1 already exists.' - ResidenceCreate: 'You have created residence %1!' - ResidenceRename: 'Renamed Residence %1 to %2' - ResidenceRemove: 'Residence %1 has been removed...' - RentDisabled: Rent is disabled... - RentDisableRenew: 'Residence %1 will now no longer re-rent upon expire.' - RentEnableRenew: 'Residence %1 will now automatically re-rent upon expire.' - RentableDisableRenew: '%1 will no longer renew rentable status upon expire.' - RentableEnableRenew: '%1 will now automatically renew rentable status upon expire.' - LandForSale: Land For Sale - SellAmount: Sell Amount - LeaseExpire: Lease Expire Time - RentExpire: Rent Expire Time - RentableAutoRenew: Rentable Auto Renew - RentAutoRenew: Rent Auto Renew - RentableLand: Rentable Land - ListMaterialAdd: '%1 added to the residence %2' - ListMaterialRemove: '%1 removed from the residence %2' - ItemBlacklisted: You are blacklisted from using this item here. - RentedModifyDeny: Cannot modify a rented residence. - WorldPVPDisabled: World PVP is disabled. - NoPVPZone: No PVP zone. - FlagDeny: 'You dont have %1 permission here.' - FlagSetDeny: 'Owner does not have access to flag %1' - SelectPoint: 'Placed %1 Selection Point' - ResidenceChat: 'Residence chat toggled %1' - ResidenceMoveDeny: 'You dont have movement permission for Residence %1' - TeleportDeny: You dont have teleport access. - TeleportSuccess: 'Teleported!' - TeleportNear: Teleported to near residence. - TeleportNoFlag: You dont have teleport access for that residence. - SetTeleportLocation: Teleport Location Set... - HelpPageHeader: 'Help Pages - %1 - Page <%2 of %3>' - ListExists: List already exists... - ListRemoved: List removed... - ListCreate: 'Created list %1' - LeaseRenew: 'Lease valid until %1' - LeaseRenewMax: Lease renewed to maximum allowed - LeaseNotExpire: No such lease, or lease does not expire. - LeaseRenewalCost: 'Renewal cost for area %1 is %2' - LeaseInfinite: Lease time set to infinite... - PermissionsApply: Permissions applied to residence. - PhysicalAreas: Physical Areas - CurrentArea: Current Area - LeaseExpire: Lease Expiration - NotOnline: Target player must be online. - ResidenceGiveLimits: Cannot give residence to target player, because it is outside the target players limits. - ResidenceGive: 'You give residence %1 to player %2' - ResidenceRecieve: 'You have recieved residence %1 from player %2' - #Version 4 New Fields - #ResidenceListAll: 'Residences - ' - removed, use GenericPage now - ResidenceListAllEmpty: No Residences exists on the server... - InvalidPage: Invalid Page... - NextPage: Next Page - #Version 10 New Fields - RemovePlayersResidences: 'Removed all residences belonging to player %1' - GenericPage: 'Page %1 of %2' - #Version 11 New Fields - ResidenceRentedBy: 'Rented by %1' - #Version 14 New Fields - InvalidCharacters: Invalid characters detected... - InvalidNameCharacters: Name contained unallowed characters... - #Version 15 New Fields - DeleteConfirm: 'Are you sure you want to delete residence %1, use "/res confirm" to confirm.' - #Version 18 New Fields - SelectTooHigh: Warning, selection went above top of map, limiting. - SelectTooLow: Warning, selection went below bottom of map, limiting. - WorldEditNotFound: WorldEdit was not detected. - #Version 19 New Fields - NoResHere: There is no residence in there. - DeleteSubzoneConfirm: 'Are you sure you want to delete subzone %1, use "/res confirm" to confirm.' - #Version 20 New Fields - SubzoneOwnerChange: 'Subzone %1 owner changed to %2' - CoordsTop: 'X:%1 Y:%2 Z:%3' - CoordsBottom: 'X:%1 Y:%2 Z:%3' - #Version 21 New Fields - AdminToggle: 'Automatic resadmin toggle turned %1' - #Version 22 New Fields - NoSpawn: 'You do not have move permissions at your spawn point. Relocating' - CompassTargetReset: 'Your compass has been reset' - CompassTargetSet: 'Your compass now points to %1' - - #The below lines are mostly a word bank for various uses. - #Version 1 Fields - Description: Description - Land: Land - Cost: Cost - Selection: Selection - Total: Total - Size: Size - Expanding: Expanding - Shifting: Shifting - Up: Up - Down: Down - Error: Error - Flags: Flags - Your: Your - Group: Group - Others: Others - Primary: Primary - Secondary: Secondary - Selection: Selection - Moved: Moved - Status: Status - Available: Available - On: On - Off: Off - Name: Name - Lists: Lists - Residences: Residences - Residence: Residence - Count: Count - Owner: Owner - #Version 4 Fields - World: World - #Version 12 Fields - Subzones: Subzones - #Version 20 Fields - CoordsT: Top Coords - CoordsB: Bottom Coords - #Version 22 Fields - TurnOn: 'on' - TurnOff: 'off' - -# This is the help / usage messages for each command. -# It follows this format: -# -# Description: -# Info: -# SubCommands: -# - these follow the same format, and each sub command can have its own subcommands -# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that -# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). -# Add a page number after the ? mark to see that page. - -HelpLinesPerPage: 7 -CommandHelp: #this is just a holder node, that holds the entire help - Description: Contains Help for Residence - SubCommands: #this is the actual beginning of all commands - res: #main residence command - Description: Main Residence Command - Info: - - 'See the residence wiki for more help.' - - 'Wiki: residencebukkitmod.wikispaces.com' - - 'Use /[command] ? to view more help information.' - SubCommands: - select: #selection commands - Description: Selection Commands - Info: - - 'This command selects areas for usage with residence.' - - '/res select [x] [y] [z] - selects a radius of blocks, with you in the middle.' - SubCommands: - coords: - Description: Display selected coordinates - Info: - - 'Usage: /res select coords' - size: - Description: Display selected size - Info: - - 'Usage: /res select size' - cost: - Description: Display selection cost - Info: - - 'Usage: /res select cost' - vert: - Description: Expand Selection Vertically - Info: - - 'Usage: /res select vert' - - 'Will expand selection as high and as low as allowed.' - sky: - Description: Expand Selection to Sky - Info: - - 'Usage: /res select sky' - - 'Expands as high as your allowed to go.' - bedrock: - Description: Expand Selection to Bedrock - Info: - - 'Usage: /res select bedrock' - - 'Expands as low as your allowed to go.' - expand: - Description: Expand selection in a direction. - Info: - - 'Usage: /res select expand ' - - 'Expands in the direction your looking.' - shift: - Description: Shift selection in a direction - Info: - - 'Usage: /res select shift ' - - 'Pushes your selection by in the direction your looking.' - chunk: - Description: Select the chunk your currently in. - Info: - - 'Usage: /res select chunk' - - 'Selects the chunk your currently standing in.' - residence: - Description: Select a existing area in a residence. - Info: - - 'Usage /res select ' - - 'Selects a existing area in a residence.' - worldedit: - Description: Set selection using the current WorldEdit selection. - Info: - - 'Usage /res select worldedit' - - 'Sets selection area using the current WorldEdit selection.' - create: #creation command - Description: Create Residences - Info: - - 'Usage: /res create ' - remove: #remove command - Description: Remove residences. - Info: - - 'Usage: /res remove ' - removeall: - Description: Remove all residences owned by a player. - Info: - - 'Usage: /res removeall [owner]' - - 'Removes all residences owned by a specific player.' - - 'Requires /resadmin if you use it on anyone besides yourself.' - confirm: - - 'Usage: /res confirm' - - 'Confirms removal of a residence.' - subzone: - Description: Create subzones in residences. - Info: - - 'Usage: /res subzone [subzone name]' - - 'If residence name is left off, will attempt to use residence your standing in.' - area: - Description: Manage physical areas for a residence. - SubCommands: - list: - Description: List physical areas in a residence - Info: - - 'Usage: /res area list [residence] ' - listall: - Description: List coordinates and other info for areas - Info: - - 'Usage: /res area listall [residence] ' - add: - Description: Add physical areas to a residence - Info: - - 'Usage: /res area add [residence] [areaID]' - - 'You must first select two points first.' - remove: - Description: Remove physical areas from a residence - Info: - - 'Usage: /res area remove [residence] [areaID]' - replace: - Description: Replace physical areas in a residence - Info: - - 'Usage: /res area replace [residence] [areaID]' - - 'You must first select two points first.' - - 'Replacing a area will charge the difference in size if the new area is bigger.' - info: - Description: Show info on a residence. - Info: - - 'Usage: /res info ' - - 'Leave off to display info for the residence your currently in.' - limits: - Description: Show your limits. - Info: - - 'Usage: /res limits' - - 'Shows the limitations you have on creating and managing residences.' - message: - Description: Manage residence enter / leave messages - Info: - - 'Usage: /res message [enter/leave] [message]' - - 'Set the enter or leave message of a residence.' - - 'Usage: /res message remove [enter/leave]' - - 'Removes a enter or leave message.' - lease: - Description: Manage residence leases - Info: - - 'Usage: /res lease [renew/cost] [residence]' - - '/res lease cost will show the cost of renewing a residence lease.' - - '/res lease renew will renew the residence provided you have enough money.' - SubCommands: - set: - Description: Set the lease time (admin only) - Info: - - 'Usage: /resadmin lease set [residence] [#days/infinite]' - - 'Sets the lease time to a specified number of days, or infinite.' - bank: - Description: Manage money in a Residence - Info: - - 'Usage: /res bank [deposit/withdraw] [amount]' - - 'You must be standing in a Residence' - - 'You must have the +bank flag.' - tp: - Description: Teleport to a residence - Info: - - 'Usage: /res tp [residence]' - - 'Teleports you to a residence, you must have +tp flag access or be the owner.' - - 'Your permission group must also be allowed to teleport by the server admin.' - tpset: - Description: Set the teleport location of a Residence - Info: - - 'Usage: /res tpset' - - 'This will set the teleport location for a residence to where your standing.' - - 'You must be standing in the residence to use this command.' - - 'You must also be the owner or have the +admin flag for the residence.' - set: - Description: Set general flags on a Residence - Info: - - 'Usage: /res set [flag] [true/false/remove]' - - 'To see a list of flags, use /res flags ?' - - 'These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)' - pset: - Description: Set flags on a specific player for a Residence. - Info: - - 'Usage: /res pset [player] [flag] [true/false/remove]' - - 'Usage: /res pset [player] removeall' - - 'To see a list of flags, use /res flags ?' - gset: - Description: Set flags on a specific group for a Residence. - Info: - - 'Usage: /res gset [group] [flag] [true/false/remove]' - - 'To see a list of flags, use /res flags ?' - lset: - Description: Change blacklist and ignorelist options - Info: - - 'Usage: /res lset [blacklist/ignorelist] [material]' - - 'Usage: /res lset info' - - 'Blacklisting a material prevents it from being placed in the residence.' - - 'Ignorelist causes a specific material to not be protected by Residence.' - flags: - Description: List of flags - Info: - - 'For flag values, usually true allows the action, and false denys the action.' - - 'build - allows or denys building' - - 'use - allows or denys use of doors, lever, buttons, etc...' - - 'move - allows or denys movement in the residence.' - - 'container - allows or denys use of furnaces, chests, dispensers, etc...' - - 'trusted - Gives build, use, move, container and tp flags' - - 'place - allows or denys only placement of blocks, overrides the build flag.' - - 'destroy - allows or denys only destruction of blocks, overrides the build flag.' - - 'pvp - allow or deny pvp in the residence' - - 'tp - allow or disallow teleporting to the residence.' - - 'admin - gives a player permission to change flags on a residence.' - - 'subzone - allow a player to make subzones in the residence.' - - 'monsters - allows or denys monster spawns' - - 'animals - allows or denys animal spawns.' - - 'healing - setting to true makes the residence heal its occupants' - - 'tnt - allow or deny tnt explosions' - - 'creeper - allow or deny creeper explosions' - - 'ignite - allows or denys fire ignition.' - - 'firespread - allows or denys fire spread.' - - 'bucket - allow or deny bucket use.' - - 'flow - allows or denys liquid flow.' - - 'lavaflow - allows or denys lava flow, overrides flow' - - 'waterflow - allows or denys water flow, overrides flow' - - 'damage - allows or denys all entity damage within the residence.' - - 'piston - allow or deny pistons from pushing or pulling blocks in the residence.' - - 'hidden - hides residence from list or listall commands.' - - 'cake - allows or denys players to eat cake' - - 'lever - allows or denys players to use levers' - - 'button - allows or denys players to use buttons' - - 'diode - allows or denys players to use redstone repeaters' - - 'door - allows or denys players to use doors and trapdoors' - - 'table - allows or denys players to use workbenches' - - 'enchant - allows or denys players to use enchanting tables' - - 'brew - allows or denys players to use brewing stands' - - 'bed - allows or denys players to use beds' - - 'button - allows or denys players to use buttons' - - 'pressure - allows or denys players to use pressure plates' - - 'note - allows or denys players to use note blocks' - - 'redstone - Gives lever, diode, button, pressure, note flags' - - 'craft - Gives table, enchant, brew flags' - - 'burn - allows or denys Mob combustion in residences' - list: - Description: List Residences - Info: - - 'Usage: /res list ' - - 'Lists all the residences a player owns (except hidden ones).' - - 'If listing your own residences, shows hidden ones as well.' - - 'To list everyones residences, use /res listall.' - listhidden: - Description: List Hidden Residences (ADMIN ONLY) - Info: - - 'Usage: /res listhidden ' - - 'Lists hidden residences for a player.' - listall: - Description: List All Residences - Info: - - 'Usage: /res listall ' - - 'Lists all residences on the server. (except hidden ones that you dont own)' - listallhidden: - Description: List All Hidden Residences (ADMIN ONLY) - Info: - - 'Usage: /res listhidden ' - - 'Lists all hidden residences on the server.' - sublist: - Description: List Residence Subzones - Info: - - 'Usage: /res sublist ' - - 'List subzones within a residence.' - default: - Description: Reset residence to default flags. - Info: - - 'Usage: /res default ' - - 'Resets the flags on a residence to their default. You must be the owner or an admin to do this.' - rename: - Description: Renames a residence. - Info: - - 'Usage: /res rename [OldName] [NewName]' - - 'You must be the owner or an admin to do this.' - - 'The name must not already be taken by another residence.' - mirror: - Description: Mirrors Flags - Info: - - 'Usage: /res mirror [Source Residence] [Target Residence]' - - 'Mirrors flags from one residence to another. You must be owner of both or a admin to do this.' - market: - Description: Buy, Sell, or Rent Residences - Info: - - 'Usage: /res market ? for more info' - SubCommands: - info: - Description: Get economy info on residence - Info: - - 'Usage: /res market info [residence]' - - 'Shows if the Residence is for sale or for rent, and the cost.' - list: - Description: Lists rentable and for sale residences. - Info: - - 'Usage: /res market list' - sell: - Description: Sell a residence - Info: - - 'Usage: /res market sell [residence] [amount]' - - 'Puts a residence for sale for [amount] of money.' - - 'Another player can buy the residence with /res market buy' - buy: - Description: Buy a residence - Info: - - 'Usage: /res market buy [residence]' - - 'Buys a Residence if its for sale.' - unsell: - Description: Stops selling a residence - Info: - - 'Usage: /res market unsell [residence]' - rent: - Description: Rent a residence - Info: - - 'Usage: /res market rent [residence] ' - - 'Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.' - rentable: - Description: Make a residence rentable. - Info: - - 'Usage: /res market rentable [residence] [cost] [days] ' - - 'Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires.' - release: - Description: Remove a residence from rent or rentable. - Info: - - 'Usage: /res market release [residence]' - - 'If you are the renter, this command releases the rent on the house for you.' - - 'If you are the owner, this command makes the residence not for rent anymore.' - current: - Description: Show residence your currently in. - Info: - - 'Usage: /res current' - lists: - Description: Predefined permission lists - Info: - - 'Predefined permissions that can be applied to a residence.' - SubCommands: - add: - Description: Add a list - Info: - - 'Usage: /res lists add ' - remove: - Description: Remove a list - Info: - - 'Usage: /res lists remove ' - apply: - Description: Apply a list to a residence - Info: - - 'Usage: /res lists apply ' - set: - Description: Set a flag - Info: - - 'Usage: /res lists set ' - pset: - Description: Set a player flag - Info: - - 'Usage: /res lists pset ' - gset: - Description: Set a group flag - Info: - - 'Usage: /res lists gset ' - view: - Description: View a list. - Info: - - 'Usage: /res lists view ' - server: - Description: Make land server owned (admin only). - Info: - - 'Usage: /resadmin server [residence]' - - 'Make a residence server owned.' - setowner: - Description: Change owner of a residence (admin only). - Info: - - 'Usage: /resadmin setowner [residence] [player]' - resreload: - Description: Reload residence (admin only). - Info: - - 'Usage: /resreload' - resload: - Description: Load residence save file (UNSAFE, admin only). - Info: - - 'Usage: /resload' - - 'UNSAFE command, does not save residences first.' - - 'Loads the residence save file after you have made changes.' - version: - Description: Show residence version - Info: - - 'Usage: /res version' diff --git a/src/plugin.yml b/src/plugin.yml index ad3e78dd1..9a8bd6ba7 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,11 +1,11 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.6.7.0 -website: http://www.spigotmc.org/resources/residence-reloaded-1-8.2697/ +version: 2.7.1.0 +website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] +softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds] contributors: [lemon42,smbarbour,inorixu,Shayana_fr] -softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,My Worlds] commands: res: description: Manage Residences @@ -47,3 +47,6 @@ permissions: residence.versioncheck: description: Notice to new version after connect default: op + residence.nofly.bypass: + description: Bypasses nofly flag in residence + default: op diff --git a/utils/fix-all-colors.pl b/utils/fix-all-colors.pl index 1da884962..c901cf9ce 100644 --- a/utils/fix-all-colors.pl +++ b/utils/fix-all-colors.pl @@ -1,58 +1,58 @@ -#!/usr/bin/perl - -use strict; - -my %colors = ( - "0" => "BLACK", - "1" => "DARK_BLUE", - "2" => "DARK_GREEN", - "3" => "DARK_AQUA", - "4" => "DARK_RED", - "5" => "DARK_PURPLE", - "6" => "GOLD", - "7" => "GRAY", - "8" => "DARK_GRAY", - "9" => "BLUE", - "a" => "GREEN", - "b" => "AQUA", - "c" => "RED", - "d" => "LIGHT_PURPLE", - "e" => "YELLOW", - "f" => "WHITE", - "k" => "MAGIC", - "l" => "BOLD", - "m" => "STRIKETHROUGH", - "n" => "UNDERLINE", - "o" => "ITALIC", - "r" => "RESET", -); -open (CMD, "find . -name \\*java|"); -while( my $file = ) { - chomp $file; - my @lines = (); - open (FILE, "<$file"); - while (my $line = ) { - - $line =~ s/\xc2//g; - for my $c (keys %colors) { - $line =~ s/\("\xa7$c"/\(ChatColor.$colors{$c}/g; - $line =~ s/"\xa7$c"/ChatColor.$colors{$c}/g; - $line =~ s/"\xa7$c(.)/ChatColor.$colors{$c}+"$1/g; - $line =~ s/(.)\xa7$c"/$1"+ChatColor.$colors{$c}/g; - $line =~ s/(.)\xa7$c(.)/$1"+ChatColor.$colors{$c}+"$2/g; - $line =~ s/"\xa7"\+//g; - } - push @lines, $line; - if ($line =~ /^package/) { - push @lines, "import org.bukkit.ChatColor;\n"; - } - } - close FILE; - open (FILE, ">$file"); - for (@lines) { - print FILE $_; - print $_ if (/\xa7/); - } - close FILE; -} -close CMD; +#!/usr/bin/perl + +use strict; + +my %colors = ( + "0" => "BLACK", + "1" => "DARK_BLUE", + "2" => "DARK_GREEN", + "3" => "DARK_AQUA", + "4" => "DARK_RED", + "5" => "DARK_PURPLE", + "6" => "GOLD", + "7" => "GRAY", + "8" => "DARK_GRAY", + "9" => "BLUE", + "a" => "GREEN", + "b" => "AQUA", + "c" => "RED", + "d" => "LIGHT_PURPLE", + "e" => "YELLOW", + "f" => "WHITE", + "k" => "MAGIC", + "l" => "BOLD", + "m" => "STRIKETHROUGH", + "n" => "UNDERLINE", + "o" => "ITALIC", + "r" => "RESET", +); +open (CMD, "find . -name \\*java|"); +while( my $file = ) { + chomp $file; + my @lines = (); + open (FILE, "<$file"); + while (my $line = ) { + + $line =~ s/\xc2//g; + for my $c (keys %colors) { + $line =~ s/\("\xa7$c"/\(ChatColor.$colors{$c}/g; + $line =~ s/"\xa7$c"/ChatColor.$colors{$c}/g; + $line =~ s/"\xa7$c(.)/ChatColor.$colors{$c}+"$1/g; + $line =~ s/(.)\xa7$c"/$1"+ChatColor.$colors{$c}/g; + $line =~ s/(.)\xa7$c(.)/$1"+ChatColor.$colors{$c}+"$2/g; + $line =~ s/"\xa7"\+//g; + } + push @lines, $line; + if ($line =~ /^package/) { + push @lines, "import org.bukkit.ChatColor;\n"; + } + } + close FILE; + open (FILE, ">$file"); + for (@lines) { + print FILE $_; + print $_ if (/\xa7/); + } + close FILE; +} +close CMD; diff --git a/utils/res-plots.pl b/utils/res-plots.pl index 97c94bab6..b75b33df8 100644 --- a/utils/res-plots.pl +++ b/utils/res-plots.pl @@ -1,115 +1,115 @@ -#!/usr/bin/perl -w -use strict; - -print "Enter output filename: "; -my $file = <>; -chomp($file); -print $file . "\n"; - -open OUT, ">$file"; - -my $startX; -my $startY; -my $startZ; -my $sizeX; -my $sizeY; -my $sizeZ; -my $bufferX; -my $bufferZ; -my $plotsX; -my $plotsZ; -my $world; -my $plotPrefix; -my $plotName; -my $owner; -my $input; - -print "Enter the world name: "; -$world = <>; -chomp($world); -print "Starting X coordinate: "; -$startX = <>; -chomp($startX); -print "Starting Y coordinate: "; -$startY = <>; -chomp($startY); -print "Starting Z coordinate: "; -$startZ = <>; -chomp($startZ); -print "Size of plots on X axis: "; -$sizeX = <>; -chomp($sizeX); -print "Size of plots on Y axis: "; -$sizeY = <>; -chomp($sizeY); -print "Size of plots on Z axis: "; -$sizeZ = <>; -chomp($sizeZ); -print "Blocks between plots on X axis: "; -$bufferX = <>; -chomp($bufferX); -print "Blocks between plots on Z axis: "; -$bufferZ = <>; -chomp($bufferZ); -print "Number of plots on X axis: "; -$plotsX = <>; -chomp($plotsX); -print "Number of plots on Z axis: "; -$plotsZ = <>; -chomp($plotsZ); -print "Default owner name: "; -$owner = <>; -chomp($owner); -print "Residence name prefix: "; -$plotPrefix = <>; -chomp($plotPrefix); - -my $plotID = 1; -print OUT "Residences:\n"; -for (my $currentX = 0; $currentX < $plotsX; $currentX++ ) { - for (my $currentZ = 0; $currentZ < $plotsZ; $currentZ++ ) { - $plotName = "$plotPrefix$plotID"; - print OUT " $plotName:\n"; - print OUT " EnterMessage: Welcome %player to %residence, owned by %owner\n"; - print OUT " BlackList:\n"; - print OUT " Type: BLACKLIST\n"; - print OUT " ItemList: []\n"; - print OUT " LeaveMessage: Now leaving %residence.\n"; - print OUT " IgnoreList:\n"; - print OUT " Type: IGNORELIST\n"; - print OUT " ItemList: []\n"; - print OUT " Areas:\n"; - print OUT " main:\n"; - print OUT " X1: " . ($currentX * ($sizeX + $bufferX) + $startX) . "\n"; - print OUT " Y1: " . $startY . "\n"; - print OUT " Z1: " . ($currentZ * ($sizeZ + $bufferZ) + $startZ) . "\n"; - print OUT " X2: " . ($currentX * ($sizeX + $bufferX) + $startX + $sizeX) . "\n"; - print OUT " Y2: " . ($startY + $sizeY) . "\n"; - print OUT " Z2: " . ($currentZ * ($sizeZ + $bufferZ) + $startZ + $sizeZ) . "\n"; - print OUT " Subzones: {}\n"; - print OUT " Permissions:\n"; - print OUT " PlayerFlags:\n"; - print OUT " $owner:\n"; - print OUT " container: true\n"; - print OUT " ignite: true\n"; - print OUT " use: true\n"; - print OUT " build: true\n"; - print OUT " move: true\n"; - print OUT " GroupFlags: {}\n"; - print OUT " AreaFlags:\n"; - print OUT " pvp: false\n"; - print OUT " firespread: false\n"; - print OUT " container: false\n"; - print OUT " tnt: false\n"; - print OUT " ignite: false\n"; - print OUT " piston: false\n"; - print OUT " use: false\n"; - print OUT " creeper: false\n"; - print OUT " flow: false\n"; - print OUT " build: false\n"; - print OUT " Owner: $owner\n"; - print OUT " World: $world\n"; - print OUT " StoredMoney: 0\n"; - $plotID++; - } -} +#!/usr/bin/perl -w +use strict; + +print "Enter output filename: "; +my $file = <>; +chomp($file); +print $file . "\n"; + +open OUT, ">$file"; + +my $startX; +my $startY; +my $startZ; +my $sizeX; +my $sizeY; +my $sizeZ; +my $bufferX; +my $bufferZ; +my $plotsX; +my $plotsZ; +my $world; +my $plotPrefix; +my $plotName; +my $owner; +my $input; + +print "Enter the world name: "; +$world = <>; +chomp($world); +print "Starting X coordinate: "; +$startX = <>; +chomp($startX); +print "Starting Y coordinate: "; +$startY = <>; +chomp($startY); +print "Starting Z coordinate: "; +$startZ = <>; +chomp($startZ); +print "Size of plots on X axis: "; +$sizeX = <>; +chomp($sizeX); +print "Size of plots on Y axis: "; +$sizeY = <>; +chomp($sizeY); +print "Size of plots on Z axis: "; +$sizeZ = <>; +chomp($sizeZ); +print "Blocks between plots on X axis: "; +$bufferX = <>; +chomp($bufferX); +print "Blocks between plots on Z axis: "; +$bufferZ = <>; +chomp($bufferZ); +print "Number of plots on X axis: "; +$plotsX = <>; +chomp($plotsX); +print "Number of plots on Z axis: "; +$plotsZ = <>; +chomp($plotsZ); +print "Default owner name: "; +$owner = <>; +chomp($owner); +print "Residence name prefix: "; +$plotPrefix = <>; +chomp($plotPrefix); + +my $plotID = 1; +print OUT "Residences:\n"; +for (my $currentX = 0; $currentX < $plotsX; $currentX++ ) { + for (my $currentZ = 0; $currentZ < $plotsZ; $currentZ++ ) { + $plotName = "$plotPrefix$plotID"; + print OUT " $plotName:\n"; + print OUT " EnterMessage: Welcome %player to %residence, owned by %owner\n"; + print OUT " BlackList:\n"; + print OUT " Type: BLACKLIST\n"; + print OUT " ItemList: []\n"; + print OUT " LeaveMessage: Now leaving %residence.\n"; + print OUT " IgnoreList:\n"; + print OUT " Type: IGNORELIST\n"; + print OUT " ItemList: []\n"; + print OUT " Areas:\n"; + print OUT " main:\n"; + print OUT " X1: " . ($currentX * ($sizeX + $bufferX) + $startX) . "\n"; + print OUT " Y1: " . $startY . "\n"; + print OUT " Z1: " . ($currentZ * ($sizeZ + $bufferZ) + $startZ) . "\n"; + print OUT " X2: " . ($currentX * ($sizeX + $bufferX) + $startX + $sizeX) . "\n"; + print OUT " Y2: " . ($startY + $sizeY) . "\n"; + print OUT " Z2: " . ($currentZ * ($sizeZ + $bufferZ) + $startZ + $sizeZ) . "\n"; + print OUT " Subzones: {}\n"; + print OUT " Permissions:\n"; + print OUT " PlayerFlags:\n"; + print OUT " $owner:\n"; + print OUT " container: true\n"; + print OUT " ignite: true\n"; + print OUT " use: true\n"; + print OUT " build: true\n"; + print OUT " move: true\n"; + print OUT " GroupFlags: {}\n"; + print OUT " AreaFlags:\n"; + print OUT " pvp: false\n"; + print OUT " firespread: false\n"; + print OUT " container: false\n"; + print OUT " tnt: false\n"; + print OUT " ignite: false\n"; + print OUT " piston: false\n"; + print OUT " use: false\n"; + print OUT " creeper: false\n"; + print OUT " flow: false\n"; + print OUT " build: false\n"; + print OUT " Owner: $owner\n"; + print OUT " World: $world\n"; + print OUT " StoredMoney: 0\n"; + $plotID++; + } +} From 9d976b58648991ca1b91bdb7ea0acd40b69fb8d6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 7 Sep 2015 10:57:54 +0300 Subject: [PATCH 0002/1142] Slimes will be despawned with nomobs flag --- .../residence/listeners/ResidenceEntityListener.java | 2 ++ .../residence/listeners/ResidencePlayerListener.java | 7 +++++-- src/plugin.yml | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 7bf45bfa6..cb42e561b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -13,6 +13,8 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 4e3f87a17..6b7ed794c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -19,9 +19,11 @@ import org.bukkit.entity.Damageable; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Ghast; import org.bukkit.entity.Hanging; import org.bukkit.entity.Monster; import org.bukkit.entity.Player; +import org.bukkit.entity.Slime; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -47,6 +49,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ActionBar; +import com.bekvon.bukkit.residence.utils.Debug; /** * @@ -809,9 +812,9 @@ public void DespawnMobs() { for (Entity ent : entities) { if (!ResidenceEntityListener.isMonster(ent)) continue; + if (res.containsLoc(ent.getLocation())) { - Monster monster = (Monster) ent; - monster.remove(); + ent.remove(); } } } diff --git a/src/plugin.yml b/src/plugin.yml index 9a8bd6ba7..a1a1c80b7 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.1.0 +version: 2.7.1.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 6e6bcd0a105e36fddb89102d3dfc30c785a5095b Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 7 Sep 2015 10:59:46 +0300 Subject: [PATCH 0003/1142] Fix for multiverse --- .../bekvon/bukkit/residence/protection/ResidenceManager.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 3d18e015e..a1f854838 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -52,7 +52,8 @@ public ClaimedResidence getByLoc(Location loc) { ClaimedResidence res = null; String world = loc.getWorld().getName(); ChunkRef chunk = new ChunkRef(loc); - //if (chunkResidences.containsKey(world)) { + if (!chunkResidences.containsKey(world)) + return null; Map> ChunkMap = chunkResidences.get(world); @@ -65,7 +66,7 @@ public ClaimedResidence getByLoc(Location loc) { } } } - //} + if (res == null) return null; From ff463355780db6030696e25784090487ff84eef3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Sep 2015 13:59:01 +0300 Subject: [PATCH 0004/1142] Antigrief protection for flow/place lava/water outside residence --- .../bukkit/residence/ConfigManager.java | 86 ++++++++++++++++-- .../listeners/ResidenceBlockListener.java | 87 +++++++++++++++---- .../listeners/ResidencePlayerListener.java | 16 ++++ .../protection/ResidenceManager.java | 41 +++++++++ src/plugin.yml | 2 +- 5 files changed, 204 insertions(+), 28 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index a50818ed3..62ae66223 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -13,6 +13,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -34,6 +35,11 @@ public class ConfigManager { protected boolean enableEconomy; protected boolean adminsOnly; protected boolean allowEmptyResidences; + protected boolean NoLava; + protected boolean NoWater; + protected boolean NoLavaPlace; + protected boolean NoWaterPlace; + protected boolean UseClean; protected int infoToolId; protected int selectionToolId; protected boolean adminOps; @@ -43,6 +49,9 @@ public class ConfigManager { protected int rentCheckInterval; protected int leaseCheckInterval; protected int autoSaveInt; + protected int FlowLevel; + protected int PlaceLevel; + protected int CleanLevel; protected int VisualizerRange; protected int VisualizerShowFor; protected int VisualizerUpdateInterval; @@ -80,6 +89,7 @@ public class ConfigManager { protected List customContainers; protected List customBothClick; protected List customRightClick; + protected List CleanBlocks; private boolean enforceAreaInsideArea; protected ParticleEffects SelectedFrame; @@ -203,15 +213,38 @@ void UpdateConfigFile() { writer.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); autoSaveInt = GetConfigInt("Global.SaveInterval", 10, writer, conf); + writer.addComment("Global.AntiGreef.SeaLevel", "Level from witch one to start lava and water flow blocking", "This dont have effect in residence area"); + FlowLevel = GetConfigInt("Global.AntiGreef.Flow.Level", 63, writer, conf); + writer.addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); + NoLava = GetConfigBoolean("Global.AntiGreef.Flow.NoLavaFlow", true, writer, conf); + writer.addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); + NoWater = GetConfigBoolean("Global.AntiGreef.Flow.NoWaterFlow", true, writer, conf); + + writer.addComment("Global.AntiGreef.Place.Level", "Level from witch one to start block lava and water place", "This don't have effect in residence area"); + PlaceLevel = GetConfigInt("Global.AntiGreef.Place.Level", 63, writer, conf); + writer.addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); + NoLavaPlace = GetConfigBoolean("Global.AntiGreef.Place.NoLavaPlace", true, writer, conf); + writer.addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, playrs cant place water outside residence"); + NoWaterPlace = GetConfigBoolean("Global.AntiGreef.Place.NoWaterPlace", true, writer, conf); + + writer.addComment("Global.AntiGreef.ResCleaning.Use", + "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", + "Effective way to prevent residence creating near greefing target and then remove it"); + UseClean = GetConfigBoolean("Global.AntiGreef.ResCleaning.Use", true, writer, conf); + writer.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); + CleanLevel = GetConfigInt("Global.AntiGreef.ResCleaning.Level", 63, writer, conf); + writer.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced","By default only water and lava will be replaced"); + CleanBlocks = GetConfigIntArray("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11), writer, conf); + writer.addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); defaultGroup = GetConfigString("Global.DefaultGroup", "default", writer, conf, false); writer.addComment("Global.UseLeaseSystem", "Enable / Disable the Lease System."); useLeases = GetConfigBoolean("Global.UseLeaseSystem", false, writer, conf); - + writer.addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); ResMoneyBack = GetConfigBoolean("Global.ResMoneyBack", false, writer, conf); - + writer.addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); leaseCheckInterval = GetConfigInt("Global.LeaseCheckInterval", 10, writer, conf); @@ -335,14 +368,15 @@ void UpdateConfigFile() { OverlapSides = ParticleEffects.FLAME; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } - + writer.addComment("Global.AutoMobRemoval", - "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.","This is quite heavy on server side, so enable only if you really need this feature"); + "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", + "This is quite heavy on server side, so enable only if you really need this feature"); AutoMobRemoval = GetConfigBoolean("Global.AutoMobRemoval.Use", false, writer, conf); writer.addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); AutoMobRemovalInterval = GetConfigInt("Global.AutoMobRemoval.Interval", 3, writer, conf); - + enforceAreaInsideArea = GetConfigBoolean("Global.EnforceAreaInsideArea", false, writer, conf); spoutEnable = GetConfigBoolean("Global.EnableSpout", false, writer, conf); enableLeaseMoneyAccount = GetConfigBoolean("Global.EnableLeaseMoneyAccount", true, writer, conf); @@ -453,7 +487,7 @@ public boolean enabledRentSystem() { public boolean useLeases() { return useLeases; } - + public boolean useResMoneyBack() { return ResMoneyBack; } @@ -466,6 +500,26 @@ public boolean allowEmptyResidences() { return allowEmptyResidences; } + public boolean isNoLava() { + return NoLava; + } + + public boolean isNoWater() { + return NoWater; + } + + public boolean isNoLavaPlace() { + return NoLavaPlace; + } + + public boolean isNoWaterPlace() { + return NoWaterPlace; + } + + public boolean isUseClean() { + return UseClean; + } + public int getInfoToolID() { return infoToolId; } @@ -498,6 +552,18 @@ public int getAutoSaveInterval() { return autoSaveInt; } + public int getFlowLevel() { + return FlowLevel; + } + + public int getPlaceLevel() { + return PlaceLevel; + } + + public int getCleanLevel() { + return CleanLevel; + } + public boolean flagsInherit() { return flagsInherit; } @@ -557,11 +623,11 @@ public boolean ShowNoobMessage() { public boolean enableSpout() { return spoutEnable; } - + public boolean AutoMobRemoval() { return AutoMobRemoval; } - + public int AutoMobRemovalInterval() { return AutoMobRemovalInterval; } @@ -590,6 +656,10 @@ public List getCustomRightClick() { return customRightClick; } + public List getCleanBlocks() { + return CleanBlocks; + } + public boolean getEnforceAreaInsideArea() { return enforceAreaInsideArea; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 88edadb83..d7383f573 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -11,10 +11,13 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.entity.Player; import org.bukkit.block.Block; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockDispenseEvent; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; @@ -32,6 +35,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockSpreadEvent; +import org.bukkit.event.world.StructureGrowEvent; /** * @@ -189,25 +193,70 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockFromTo(BlockFromToEvent event) { - FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); - boolean hasflow = perms.has("flow", true); - Material mat = event.getBlock().getType(); - if (!hasflow) { - event.setCancelled(true); - return; - } - if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { - if (!perms.has("lavaflow", hasflow)) { - event.setCancelled(true); - } - return; - } - if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { - if (!perms.has("waterflow", hasflow)) { - event.setCancelled(true); - } - return; - } + FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); + boolean hasflow = perms.has("flow", true); + Material mat = event.getBlock().getType(); + if (!hasflow) { + event.setCancelled(true); + return; + } + if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { + if (!perms.has("lavaflow", hasflow)) { + event.setCancelled(true); + } + return; + } + if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { + if (!perms.has("waterflow", hasflow)) { + event.setCancelled(true); + } + return; + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onDispense(BlockDispenseEvent event) { + + if (event.isCancelled()) + return; + + Location location = new Location(event.getBlock().getWorld(), event.getVelocity().getBlockX(), event.getVelocity().getBlockY(), event.getVelocity().getBlockZ()); + + ClaimedResidence sourceres = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + ClaimedResidence targetres = Residence.getResidenceManager().getByLoc(location); + + if (sourceres == null && targetres != null || sourceres != null && targetres == null || sourceres != null && targetres != null && !sourceres.getName().equals( + targetres.getName())) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onLavaWaterFlow(BlockFromToEvent event) { + + Material mat = event.getBlock().getType(); + + Location location = event.getToBlock().getLocation(); + + if (location.getBlockY() < Residence.getConfigManager().getFlowLevel()) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(location); + + if (res != null) + return; + + if (Residence.getConfigManager().isNoLava()) + if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { + event.setCancelled(true); + return; + } + + if (Residence.getConfigManager().isNoWater()) + if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { + event.setCancelled(true); + return; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 6b7ed794c..3d77dae27 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -468,6 +468,22 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); event.setCancelled(true); } + + Material mat = event.getBucket(); + + if (Residence.getConfigManager().isNoLavaPlace() && event.getBlockClicked().getLocation().getBlockY() >= Residence.getConfigManager().getPlaceLevel() - 1) { + if (mat == Material.LAVA_BUCKET) { + Debug.D("blocking lava place"); + event.setCancelled(true); + return; + } + } + + if (Residence.getConfigManager().isNoWaterPlace() && event.getBlockClicked().getLocation().getBlockY() >= Residence.getConfigManager().getPlaceLevel() - 1) + if (mat == Material.WATER_BUCKET) { + event.setCancelled(true); + return; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index a1f854838..50e16e407 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -20,6 +20,7 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.block.BlockFace; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -32,6 +33,9 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.Debug; +import com.sk89q.worldedit.blocks.BlockType; + +import net.minecraft.server.v1_8_R3.Material; /** * @@ -329,6 +333,42 @@ public void removeResidence(Player player, String name, boolean resadmin) { if (parent == null) { removeChunkList(name); residences.remove(name); + + if (Residence.getConfigManager().isUseClean()) { + CuboidArea area = res.getAreaArray()[0]; + + Location low = area.getLowLoc(); + Location high = area.getHighLoc(); + + if (high.getBlockY() > Residence.getConfigManager().getCleanLevel()) { + + if (low.getBlockY() < Residence.getConfigManager().getCleanLevel()) + low.setY(Residence.getConfigManager().getCleanLevel()); + + World world = low.getWorld(); + + Location temploc = new Location(world, low.getBlockX(), low.getBlockY(), low.getBlockZ()); + + Debug.D("before removing block"); + int i = 0; + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + temploc.setX(x); + for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { + temploc.setY(y); + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + temploc.setZ(z); + if (Residence.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getTypeId())) { + temploc.getBlock().setTypeId(0); + i++; + } + } + } + } + + Debug.D(i + " Block replaced after clean"); + } + } + if (player != null) { player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); } @@ -340,6 +380,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { parent.removeSubzone(split[split.length - 1]); } } + // Residence.getLeaseManager().removeExpireTime(name); - causing // concurrent modification exception in lease manager... worked // around for now diff --git a/src/plugin.yml b/src/plugin.yml index a1a1c80b7..4f82f974c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.1.1 +version: 2.7.1.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 32fd48bfe709c52ae03a1f9103c99949e2670a02 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Sep 2015 14:15:14 +0300 Subject: [PATCH 0005/1142] Prevent disperser lava/water drop outside residence --- .../listeners/ResidenceBlockListener.java | 19 ++++++++++++++++++- src/plugin.yml | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index d7383f573..2a62637e3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -36,6 +36,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockSpreadEvent; import org.bukkit.event.world.StructureGrowEvent; +import org.bukkit.inventory.ItemStack; /** * @@ -222,9 +223,25 @@ public void onDispense(BlockDispenseEvent event) { Location location = new Location(event.getBlock().getWorld(), event.getVelocity().getBlockX(), event.getVelocity().getBlockY(), event.getVelocity().getBlockZ()); - ClaimedResidence sourceres = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); ClaimedResidence targetres = Residence.getResidenceManager().getByLoc(location); + if (targetres == null && location.getBlockY() >= Residence.getConfigManager().getPlaceLevel()) { + ItemStack mat = event.getItem(); + if (Residence.getConfigManager().isNoLavaPlace()) + if (mat.getType() == Material.LAVA_BUCKET) { + event.setCancelled(true); + return; + } + + if (Residence.getConfigManager().isNoWaterPlace()) + if (mat.getType() == Material.WATER_BUCKET) { + event.setCancelled(true); + return; + } + } + + ClaimedResidence sourceres = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + if (sourceres == null && targetres != null || sourceres != null && targetres == null || sourceres != null && targetres != null && !sourceres.getName().equals( targetres.getName())) { event.setCancelled(true); diff --git a/src/plugin.yml b/src/plugin.yml index 4f82f974c..f218365ca 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.1.2 +version: 2.7.2.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 9a5d70a995a6e4ab839cd80a1359fa0addfefa47 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Sep 2015 14:25:27 +0300 Subject: [PATCH 0006/1142] Added world support for antgrief feature --- .../bekvon/bukkit/residence/ConfigManager.java | 15 +++++++++++++++ .../listeners/ResidenceBlockListener.java | 7 +++++-- .../residence/protection/ResidenceManager.java | 5 +---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 62ae66223..7d6109171 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -90,6 +90,9 @@ public class ConfigManager { protected List customBothClick; protected List customRightClick; protected List CleanBlocks; + protected List NoFlowWorlds; + protected List NoPlaceWorlds; + protected List CleanWorlds; private boolean enforceAreaInsideArea; protected ParticleEffects SelectedFrame; @@ -219,6 +222,7 @@ void UpdateConfigFile() { NoLava = GetConfigBoolean("Global.AntiGreef.Flow.NoLavaFlow", true, writer, conf); writer.addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); NoWater = GetConfigBoolean("Global.AntiGreef.Flow.NoWaterFlow", true, writer, conf); + NoFlowWorlds = GetConfigArray("Global.AntiGreef.Flow.Worlds", Arrays.asList("World"), writer, conf, false); writer.addComment("Global.AntiGreef.Place.Level", "Level from witch one to start block lava and water place", "This don't have effect in residence area"); PlaceLevel = GetConfigInt("Global.AntiGreef.Place.Level", 63, writer, conf); @@ -226,6 +230,7 @@ void UpdateConfigFile() { NoLavaPlace = GetConfigBoolean("Global.AntiGreef.Place.NoLavaPlace", true, writer, conf); writer.addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, playrs cant place water outside residence"); NoWaterPlace = GetConfigBoolean("Global.AntiGreef.Place.NoWaterPlace", true, writer, conf); + NoPlaceWorlds = GetConfigArray("Global.AntiGreef.Place.Worlds", Arrays.asList("World"), writer, conf, false); writer.addComment("Global.AntiGreef.ResCleaning.Use", "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", @@ -235,6 +240,7 @@ void UpdateConfigFile() { CleanLevel = GetConfigInt("Global.AntiGreef.ResCleaning.Level", 63, writer, conf); writer.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced","By default only water and lava will be replaced"); CleanBlocks = GetConfigIntArray("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11), writer, conf); + CleanWorlds = GetConfigArray("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList("World"), writer, conf, false); writer.addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); defaultGroup = GetConfigString("Global.DefaultGroup", "default", writer, conf, false); @@ -659,6 +665,15 @@ public List getCustomRightClick() { public List getCleanBlocks() { return CleanBlocks; } + public List getNoFlowWorlds() { + return NoFlowWorlds; + } + public List getNoPlaceWorlds() { + return NoPlaceWorlds; + } + public List getCleanWorlds() { + return CleanWorlds; + } public boolean getEnforceAreaInsideArea() { return enforceAreaInsideArea; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 2a62637e3..ead415158 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -225,7 +225,8 @@ public void onDispense(BlockDispenseEvent event) { ClaimedResidence targetres = Residence.getResidenceManager().getByLoc(location); - if (targetres == null && location.getBlockY() >= Residence.getConfigManager().getPlaceLevel()) { + if (targetres == null && location.getBlockY() >= Residence.getConfigManager().getPlaceLevel() && Residence.getConfigManager().getNoPlaceWorlds().contains(location + .getWorld().getName())) { ItemStack mat = event.getItem(); if (Residence.getConfigManager().isNoLavaPlace()) if (mat.getType() == Material.LAVA_BUCKET) { @@ -254,7 +255,9 @@ public void onLavaWaterFlow(BlockFromToEvent event) { Material mat = event.getBlock().getType(); Location location = event.getToBlock().getLocation(); - + if (!Residence.getConfigManager().getNoFlowWorlds().contains(location.getWorld().getName())) + return; + if (location.getBlockY() < Residence.getConfigManager().getFlowLevel()) return; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 50e16e407..395cc518f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -334,7 +334,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { removeChunkList(name); residences.remove(name); - if (Residence.getConfigManager().isUseClean()) { + if (Residence.getConfigManager().isUseClean() && Residence.getConfigManager().getCleanWorlds().contains(res.getWorld())) { CuboidArea area = res.getAreaArray()[0]; Location low = area.getLowLoc(); @@ -349,7 +349,6 @@ public void removeResidence(Player player, String name, boolean resadmin) { Location temploc = new Location(world, low.getBlockX(), low.getBlockY(), low.getBlockZ()); - Debug.D("before removing block"); int i = 0; for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { temploc.setX(x); @@ -364,8 +363,6 @@ public void removeResidence(Player player, String name, boolean resadmin) { } } } - - Debug.D(i + " Block replaced after clean"); } } From 926a3f8ced5b266f3d1eaa9e258c30256e4672a0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 10 Sep 2015 18:25:03 +0300 Subject: [PATCH 0007/1142] Fixed issue with lava place if world is not defined Added messages on blocked lava/water place. replace message with double ' like '' to disable it Fixed small issue on plugin startup to avoid error messages --- src/com/bekvon/bukkit/residence/Locale.java | 4 +++ .../listeners/ResidenceEntityListener.java | 2 -- .../listeners/ResidencePlayerListener.java | 32 ++++++++++++++----- .../protection/WorldFlagManager.java | 4 +++ src/plugin.yml | 2 +- 5 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 37ef11ca3..2db55dd8d 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -88,6 +88,10 @@ public static void LoadLang(String lang) { GetConfigString("Language.InvalidBoolean", "Invalid value, must be true(t) or false(f)", writer, conf, true); GetConfigString("Language.InvalidArea", "Invalid Area...", writer, conf, true); GetConfigString("Language.InvalidGroup", "Invalid Group...", writer, conf, true); + writer.addComment("Language.CantPlaceLava", "Replace all text with '' to disable this message"); + GetConfigString("Language.CantPlaceLava", "You can't place lava outside residence and higher than %1 block level", writer, conf, true); + writer.addComment("Language.CantPlaceWater", "Replace all text with '' to disable this message"); + GetConfigString("Language.CantPlaceWater", "You can't place Water outside residence and higher than %1 block level", writer, conf, true); GetConfigString("Language.InvalidMessageType", "Message type must be enter or remove.", writer, conf, true); // GetConfigString("Language.InvalidList", "Invalid List...", writer, // conf, true); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index cb42e561b..7bf45bfa6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -13,8 +13,6 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3d77dae27..9cc94c3ad 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -19,11 +19,8 @@ import org.bukkit.entity.Damageable; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; -import org.bukkit.entity.Ghast; import org.bukkit.entity.Hanging; -import org.bukkit.entity.Monster; import org.bukkit.entity.Player; -import org.bukkit.entity.Slime; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -49,7 +46,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ActionBar; -import com.bekvon.bukkit.residence.utils.Debug; /** * @@ -461,26 +457,46 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { return; } } + + Material mat = event.getBucket(); + if (!res.getPermissions().playerHas(player.getName(), "bucket", true) && Residence.getConfigManager().getNoPlaceWorlds().contains(event.getBlockClicked() + .getLocation().getWorld().getName())) { + if (mat == Material.LAVA_BUCKET) { + event.setCancelled(true); + return; + } + if (mat == Material.WATER_BUCKET) { + event.setCancelled(true); + return; + } + } } + String pname = player.getName(); FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true))) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); event.setCancelled(true); + return; } Material mat = event.getBucket(); - - if (Residence.getConfigManager().isNoLavaPlace() && event.getBlockClicked().getLocation().getBlockY() >= Residence.getConfigManager().getPlaceLevel() - 1) { + int level = Residence.getConfigManager().getPlaceLevel(); + if (res == null && Residence.getConfigManager().isNoLavaPlace() && event.getBlockClicked().getLocation().getBlockY() >= level - 1 && Residence.getConfigManager() + .getNoPlaceWorlds().contains(event.getBlockClicked().getLocation().getWorld().getName())) { if (mat == Material.LAVA_BUCKET) { - Debug.D("blocking lava place"); + if (!Residence.getLanguage().getPhrase("CantPlaceLava").equalsIgnoreCase("")) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("CantPlaceLava", String.valueOf(level))); event.setCancelled(true); return; } } - if (Residence.getConfigManager().isNoWaterPlace() && event.getBlockClicked().getLocation().getBlockY() >= Residence.getConfigManager().getPlaceLevel() - 1) + if (res == null && Residence.getConfigManager().isNoWaterPlace() && event.getBlockClicked().getLocation().getBlockY() >= level - 1 && Residence.getConfigManager() + .getNoPlaceWorlds().contains(event.getBlockClicked().getLocation().getWorld().getName())) if (mat == Material.WATER_BUCKET) { + if (!Residence.getLanguage().getPhrase("CantPlaceWater").equalsIgnoreCase("")) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("CantPlaceWater", String.valueOf(level))); event.setCancelled(true); return; } diff --git a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java index 9e81c6e69..5077dcd34 100644 --- a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java +++ b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java @@ -90,6 +90,10 @@ public final void parsePerms(FileConfiguration config, FileConfiguration groups) keys = groups.getConfigurationSection("Groups").getKeys(false); if (keys != null) { for (String key : keys) { + if (!groups.contains("Groups." + key + ".Flags")) + continue; + if (!groups.contains("Groups." + key + ".Flags.World")) + continue; Set worldkeys = groups.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false); if (worldkeys != null) { Map perms = new HashMap<>(); diff --git a/src/plugin.yml b/src/plugin.yml index f218365ca..3f87212d0 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.2.0 +version: 2.7.2.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 5879bdc89ea98e7d596e1beb140eb7a4c177bf46 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 12 Sep 2015 17:50:47 +0300 Subject: [PATCH 0008/1142] Fixed polish locale issue and added sign support for market --- src/Language/Polish.yml | 379 ------------------ src/com/bekvon/bukkit/residence/Locale.java | 22 + .../bekvon/bukkit/residence/Residence.java | 4 + .../bukkit/residence/Signs/SignInfo.java | 28 ++ .../bukkit/residence/Signs/SignUtil.java | 190 +++++++++ .../bekvon/bukkit/residence/Signs/Signs.java | 75 ++++ .../residence/economy/TransactionManager.java | 10 + .../residence/economy/rent/RentManager.java | 4 + .../listeners/ResidencePlayerListener.java | 169 ++++++++ .../protection/ResidenceManager.java | 4 - .../protection/WorldFlagManager.java | 54 +-- 11 files changed, 530 insertions(+), 409 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/Signs/SignInfo.java create mode 100644 src/com/bekvon/bukkit/residence/Signs/SignUtil.java create mode 100644 src/com/bekvon/bukkit/residence/Signs/Signs.java diff --git a/src/Language/Polish.yml b/src/Language/Polish.yml index 98020ec23..8bbef51f7 100644 --- a/src/Language/Polish.yml +++ b/src/Language/Polish.yml @@ -243,382 +243,3 @@ Language: # When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that # Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). # Add a page number after the ? mark to see that page. - -HelpLinesPerPage: 7 -CommandHelp: #this is just a holder node, that holds the entire help - Description: Zawiera Pomoc dla Residence - Info: - - 'See the residence wiki for more help.' - - 'Wiki: residencebukkitmod.wikispaces.com' - - 'Use /[command] ? to view more help information.' - SubCommands: - select: #selection commands - Description: Selection Commands - Info: - - 'This command selects areas for usage with residence.' - - '/res select [x] [y] [z] - selects a radius of blocks, with you in the middle.' - SubCommands: - coords: - Description: Display selected coordinates - Info: - - 'Usage: /res select coords' - size: - Description: Display selected size - Info: - - 'Usage: /res select size' - cost: - Description: Display selection cost - Info: - - 'Usage: /res select cost' - vert: - Description: Expand Selection Vertically - Info: - - 'Usage: /res select vert' - - 'Will expand selection as high and as low as allowed.' - sky: - Description: Expand Selection to Sky - Info: - - 'Usage: /res select sky' - - 'Expands as high as your allowed to go.' - bedrock: - Description: Expand Selection to Bedrock - Info: - - 'Usage: /res select bedrock' - - 'Expands as low as your allowed to go.' - expand: - Description: Expand selection in a direction. - Info: - - 'Usage: /res select expand ' - - 'Expands in the direction your looking.' - shift: - Description: Shift selection in a direction - Info: - - 'Usage: /res select shift ' - - 'Pushes your selection by in the direction your looking.' - chunk: - Description: Select the chunk your currently in. - Info: - - 'Usage: /res select chunk' - - 'Selects the chunk your currently standing in.' - residence: - Description: Select a existing area in a residence. - Info: - - 'Usage /res select ' - - 'Selects a existing area in a residence.' - worldedit: - Description: Set selection using the current WorldEdit selection. - Info: - - 'Usage /res select worldedit' - - 'Sets selection area using the current WorldEdit selection.' - create: #creation command - Description: Create Residences - Info: - - 'Usage: /res create ' - remove: #remove command - Description: Remove residences. - Info: - - 'Usage: /res remove ' - removeall: - Description: Remove all residences owned by a player. - Info: - - 'Usage: /res removeall [owner]' - - 'Removes all residences owned by a specific player.' - - 'Requires /resadmin if you use it on anyone besides yourself.' - confirm: - - 'Usage: /res confirm' - - 'Confirms removal of a residence.' - subzone: - Description: Create subzones in residences. - Info: - - 'Usage: /res subzone [subzone name]' - - 'If residence name is left off, will attempt to use residence your standing in.' - area: - Description: Manage physical areas for a residence. - SubCommands: - list: - Description: List physical areas in a residence - Info: - - 'Usage: /res area list [residence] ' - listall: - Description: List coordinates and other info for areas - Info: - - 'Usage: /res area listall [residence] ' - add: - Description: Add physical areas to a residence - Info: - - 'Usage: /res area add [residence] [areaID]' - - 'You must first select two points first.' - remove: - Description: Remove physical areas from a residence - Info: - - 'Usage: /res area remove [residence] [areaID]' - replace: - Description: Replace physical areas in a residence - Info: - - 'Usage: /res area replace [residence] [areaID]' - - 'You must first select two points first.' - - 'Replacing a area will charge the difference in size if the new area is bigger.' - info: - Description: Show info on a residence. - Info: - - 'Usage: /res info ' - - 'Leave off to display info for the residence your currently in.' - limits: - Description: Show your limits. - Info: - - 'Usage: /res limits' - - 'Shows the limitations you have on creating and managing residences.' - message: - Description: Manage residence enter / leave messages - Info: - - 'Usage: /res message [enter/leave] [message]' - - 'Set the enter or leave message of a residence.' - - 'Usage: /res message remove [enter/leave]' - - 'Removes a enter or leave message.' - lease: - Description: Manage residence leases - Info: - - 'Usage: /res lease [renew/cost] [residence]' - - '/res lease cost will show the cost of renewing a residence lease.' - - '/res lease renew will renew the residence provided you have enough money.' - SubCommands: - set: - Description: Set the lease time (admin only) - Info: - - 'Usage: /resadmin lease set [residence] [#days/infinite]' - - 'Sets the lease time to a specified number of days, or infinite.' - bank: - Description: Manage money in a Residence - Info: - - 'Usage: /res bank [deposit/withdraw] [amount]' - - 'You must be standing in a Residence' - - 'You must have the +bank flag.' - tp: - Description: Teleport to a residence - Info: - - 'Usage: /res tp [residence]' - - 'Teleports you to a residence, you must have +tp flag access or be the owner.' - - 'Your permission group must also be allowed to teleport by the server admin.' - tpset: - Description: Set the teleport location of a Residence - Info: - - 'Usage: /res tpset' - - 'This will set the teleport location for a residence to where your standing.' - - 'You must be standing in the residence to use this command.' - - 'You must also be the owner or have the +admin flag for the residence.' - set: - Description: Set general flags on a Residence - Info: - - 'Usage: /res set [flag] [true/false/remove]' - - 'To see a list of flags, use /res flags ?' - - 'These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)' - pset: - Description: Set flags on a specific player for a Residence. - Info: - - 'Usage: /res pset [player] [flag] [true/false/remove]' - - 'Usage: /res pset [player] removeall' - - 'To see a list of flags, use /res flags ?' - gset: - Description: Set flags on a specific group for a Residence. - Info: - - 'Usage: /res gset [group] [flag] [true/false/remove]' - - 'To see a list of flags, use /res flags ?' - lset: - Description: Change blacklist and ignorelist options - Info: - - 'Usage: /res lset [blacklist/ignorelist] [material]' - - 'Usage: /res lset info' - - 'Blacklisting a material prevents it from being placed in the residence.' - - 'Ignorelist causes a specific material to not be protected by Residence.' - flags: - Description: List of flags - Info: - - 'For flag values, usually true allows the action, and false denys the action.' - - 'build - allows or denys building' - - 'use - allows or denys use of doors, lever, buttons, etc...' - - 'move - allows or denys movement in the residence.' - - 'container - allows or denys use of furnaces, chests, dispensers, etc...' - - 'trusted - Gives build, use, move, container and tp flags' - - 'place - allows or denys only placement of blocks, overrides the build flag.' - - 'destroy - allows or denys only destruction of blocks, overrides the build flag.' - - 'pvp - allow or deny pvp in the residence' - - 'tp - allow or disallow teleporting to the residence.' - - 'admin - gives a player permission to change flags on a residence.' - - 'subzone - allow a player to make subzones in the residence.' - - 'monsters - allows or denys monster spawns' - - 'animals - allows or denys animal spawns.' - - 'healing - setting to true makes the residence heal its occupants' - - 'tnt - allow or deny tnt explosions' - - 'creeper - allow or deny creeper explosions' - - 'ignite - allows or denys fire ignition.' - - 'firespread - allows or denys fire spread.' - - 'bucket - allow or deny bucket use.' - - 'flow - allows or denys liquid flow.' - - 'lavaflow - allows or denys lava flow, overrides flow' - - 'waterflow - allows or denys water flow, overrides flow' - - 'damage - allows or denys all entity damage within the residence.' - - 'piston - allow or deny pistons from pushing or pulling blocks in the residence.' - - 'hidden - hides residence from list or listall commands.' - - 'cake - allows or denys players to eat cake' - - 'lever - allows or denys players to use levers' - - 'button - allows or denys players to use buttons' - - 'diode - allows or denys players to use redstone repeaters' - - 'door - allows or denys players to use doors and trapdoors' - - 'table - allows or denys players to use workbenches' - - 'enchant - allows or denys players to use enchanting tables' - - 'brew - allows or denys players to use brewing stands' - - 'bed - allows or denys players to use beds' - - 'button - allows or denys players to use buttons' - - 'pressure - allows or denys players to use pressure plates' - - 'note - allows or denys players to use note blocks' - - 'redstone - Gives lever, diode, button, pressure, note flags' - - 'craft - Gives table, enchant, brew flags' - - 'burn - allows or denys Mob combustion in residences' - list: - Description: List Residences - Info: - - 'Usage: /res list ' - - 'Lists all the residences a player owns (except hidden ones).' - - 'If listing your own residences, shows hidden ones as well.' - - 'To list everyones residences, use /res listall.' - listhidden: - Description: List Hidden Residences (ADMIN ONLY) - Info: - - 'Usage: /res listhidden ' - - 'Lists hidden residences for a player.' - listall: - Description: List All Residences - Info: - - 'Usage: /res listall ' - - 'Lists all residences on the server. (except hidden ones that you dont own)' - listallhidden: - Description: List All Hidden Residences (ADMIN ONLY) - Info: - - 'Usage: /res listhidden ' - - 'Lists all hidden residences on the server.' - sublist: - Description: List Residence Subzones - Info: - - 'Usage: /res sublist ' - - 'List subzones within a residence.' - default: - Description: Reset residence to default flags. - Info: - - 'Usage: /res default ' - - 'Resets the flags on a residence to their default. You must be the owner or an admin to do this.' - rename: - Description: Renames a residence. - Info: - - 'Usage: /res rename [OldName] [NewName]' - - 'You must be the owner or an admin to do this.' - - 'The name must not already be taken by another residence.' - mirror: - Description: Mirrors Flags - Info: - - 'Usage: /res mirror [Source Residence] [Target Residence]' - - 'Mirrors flags from one residence to another. You must be owner of both or a admin to do this.' - market: - Description: Buy, Sell, or Rent Residences - Info: - - 'Usage: /res market ? for more info' - SubCommands: - info: - Description: Get economy info on residence - Info: - - 'Usage: /res market info [residence]' - - 'Shows if the Residence is for sale or for rent, and the cost.' - list: - Description: Lists rentable and for sale residences. - Info: - - 'Usage: /res market list' - sell: - Description: Sell a residence - Info: - - 'Usage: /res market sell [residence] [amount]' - - 'Puts a residence for sale for [amount] of money.' - - 'Another player can buy the residence with /res market buy' - buy: - Description: Buy a residence - Info: - - 'Usage: /res market buy [residence]' - - 'Buys a Residence if its for sale.' - unsell: - Description: Stops selling a residence - Info: - - 'Usage: /res market unsell [residence]' - rent: - Description: Rent a residence - Info: - - 'Usage: /res market rent [residence] ' - - 'Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.' - rentable: - Description: Make a residence rentable. - Info: - - 'Usage: /res market rentable [residence] [cost] [days] ' - - 'Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires.' - release: - Description: Remove a residence from rent or rentable. - Info: - - 'Usage: /res market release [residence]' - - 'If you are the renter, this command releases the rent on the house for you.' - - 'If you are the owner, this command makes the residence not for rent anymore.' - current: - Description: Show residence your currently in. - Info: - - 'Usage: /res current' - lists: - Description: Predefined permission lists - Info: - - 'Predefined permissions that can be applied to a residence.' - SubCommands: - add: - Description: Add a list - Info: - - 'Usage: /res lists add ' - remove: - Description: Remove a list - Info: - - 'Usage: /res lists remove ' - apply: - Description: Apply a list to a residence - Info: - - 'Usage: /res lists apply ' - set: - Description: Set a flag - Info: - - 'Usage: /res lists set ' - pset: - Description: Set a player flag - Info: - - 'Usage: /res lists pset ' - gset: - Description: Set a group flag - Info: - - 'Usage: /res lists gset ' - view: - Description: View a list. - Info: - - 'Usage: /res lists view ' - server: - Description: Make land server owned (admin only). - Info: - - 'Usage: /resadmin server [residence]' - - 'Make a residence server owned.' - setowner: - Description: Change owner of a residence (admin only). - Info: - - 'Usage: /resadmin setowner [residence] [player]' - resreload: - Description: Reload residence (admin only). - Info: - - 'Usage: /resreload' - resload: - Description: Load residence save file (UNSAFE, admin only). - Info: - - 'Usage: /resload' - - 'UNSAFE command, does not save residences first.' - - 'Loads the residence save file after you have made changes.' - version: - Description: Show residence version - Info: - - 'Usage: /res version' diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 2db55dd8d..33c159aaf 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -156,6 +156,28 @@ public static void LoadLang(String lang) { GetConfigString("Language.MaterialGet", "The material name for ID %1 is %2", writer, conf, true); GetConfigString("Language.MarketDisabled", "Economy Disabled!", writer, conf, true); GetConfigString("Language.MarketList", "Market List", writer, conf, true); + + GetConfigString("Language.SignTopLine", "[market]", writer, conf, true); + GetConfigString("Language.SignDateFormat", "YY/MM/dd HH:mm", writer, conf, true); + + GetConfigString("Language.SignForRentTopLine", "&8For Rent", writer, conf, true); + GetConfigString("Language.SignForRentPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); + GetConfigString("Language.SignForRentResName", "&8%1", writer, conf, true); + GetConfigString("Language.SignForRentBottomLine", "&9Available", writer, conf, true); + + GetConfigString("Language.SignRentedAutorenewTrue", "&2", writer, conf, true); + GetConfigString("Language.SignRentedAutorenewFalse", "&c", writer, conf, true); + + GetConfigString("Language.SignRentedTopLine", "%1", writer, conf, true); + GetConfigString("Language.SignRentedPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); + GetConfigString("Language.SignRentedResName", "&8%1", writer, conf, true); + GetConfigString("Language.SignRentedBottomLine", "&1%1", writer, conf, true); + + GetConfigString("Language.SignForSaleTopLine", "&8For Sale", writer, conf, true); + GetConfigString("Language.SignForSalePriceLine", "&8%1", writer, conf, true); + GetConfigString("Language.SignForSaleResName", "&8%1", writer, conf, true); + GetConfigString("Language.SignForSaleBottomLine", "&5Available", writer, conf, true); + GetConfigString("Language.SelectionTool", "Selection Tool", writer, conf, true); GetConfigString("Language.InfoTool", "Info Tool", writer, conf, true); GetConfigString("Language.NoBankAccess", "You dont have bank access.", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 6d80888c1..e10d40963 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -34,6 +34,7 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; +import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.chat.ChatManager; import com.bekvon.bukkit.residence.economy.BOSEAdapter; import com.bekvon.bukkit.residence.economy.EconomyInterface; @@ -431,6 +432,9 @@ public void onEnable() { System.out.println("[Residence] - FAILED INITIALIZATION! DISABLED! ERROR:"); Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); } + + SignUtil.LoadSigns(); + //versionChecker = new VersionChecker(this); // versionChecker.VersionCheck(null); } diff --git a/src/com/bekvon/bukkit/residence/Signs/SignInfo.java b/src/com/bekvon/bukkit/residence/Signs/SignInfo.java new file mode 100644 index 000000000..12444dbed --- /dev/null +++ b/src/com/bekvon/bukkit/residence/Signs/SignInfo.java @@ -0,0 +1,28 @@ +package com.bekvon.bukkit.residence.Signs; + +import java.util.ArrayList; +import java.util.List; + +public class SignInfo { + + List AllSigns = new ArrayList(); + + public SignInfo() { + } + + public void setAllSigns(List AllSigns) { + this.AllSigns = AllSigns; + } + + public List GetAllSigns() { + return this.AllSigns; + } + + public void removeSign(Signs sign) { + this.AllSigns.remove(sign); + } + + public void addSign(Signs sign) { + this.AllSigns.add(sign); + } +} diff --git a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java b/src/com/bekvon/bukkit/residence/Signs/SignUtil.java new file mode 100644 index 000000000..f87b2a9cc --- /dev/null +++ b/src/com/bekvon/bukkit/residence/Signs/SignUtil.java @@ -0,0 +1,190 @@ +package com.bekvon.bukkit.residence.Signs; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; + +import com.bekvon.bukkit.residence.CommentedYamlConfiguration; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.economy.rent.RentedLand; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; + +public class SignUtil { + + public static SignInfo Signs = new SignInfo(); + + // Sign file + public static void LoadSigns() { + Thread threadd = new Thread() { + public void run() { + + Signs.GetAllSigns().clear(); + File file = new File(Residence.instance.getDataFolder(), "Signs.yml"); + YamlConfiguration f = YamlConfiguration.loadConfiguration(file); + + if (!f.isConfigurationSection("Signs")) + return; + + ConfigurationSection ConfCategory = f.getConfigurationSection("Signs"); + ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); + if (categoriesList.size() == 0) + return; + for (String category : categoriesList) { + ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); + Signs newTemp = new Signs(); + newTemp.setCategory(Integer.valueOf(category)); + newTemp.setResidence(NameSection.getString("Residence")); + newTemp.setWorld(NameSection.getString("World")); + newTemp.setX(NameSection.getDouble("X")); + newTemp.setY(NameSection.getDouble("Y")); + newTemp.setZ(NameSection.getDouble("Z")); + + newTemp.setLocation(new Location(Bukkit.getWorld(NameSection.getString("World")), NameSection.getDouble("X"), NameSection.getDouble("Y"), NameSection + .getDouble("Z"))); + + Signs.addSign(newTemp); + } + return; + } + }; + threadd.start(); + } + + // Signs save file + public static void saveSigns() { + + Thread threadd = new Thread() { + public void run() { + File f = new File(Residence.instance.getDataFolder(), "Signs.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + writer.addComment("Signs", "DO NOT EDIT THIS FILE BY HAND!"); + + if (!conf.isConfigurationSection("Signs")) + conf.createSection("Signs"); + + for (Signs one : Signs.GetAllSigns()) { + String path = "Signs." + String.valueOf(one.GetCategory()); + writer.set(path + ".Residence", one.GetResidence()); + writer.set(path + ".World", one.GetWorld()); + writer.set(path + ".X", one.GetX()); + writer.set(path + ".Y", one.GetY()); + writer.set(path + ".Z", one.GetZ()); + } + + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + }; + threadd.start(); + } + + public static void CheckSign(ClaimedResidence res) { + + List signList = new ArrayList(); + + signList.addAll(SignUtil.Signs.GetAllSigns()); + + for (Signs one : signList) { + if (!res.containsLoc(one.GetLocation())) + continue; + SignUtil.SignUpdate(one); + } + + } + + public static boolean SignUpdate(Signs Sign) { + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(Sign.GetLocation()); + + String landName = res.getName(); + + boolean ForSale = Residence.getTransactionManager().isForSale(landName); + boolean ForRent = Residence.getRentManager().isForRent(landName); + + Location nloc = Sign.GetLocation(); + Block block = nloc.getBlock(); + + if (!(block.getState() instanceof Sign)) + return false; + + Sign sign = (Sign) block.getState(); + + if (!ForRent && !ForSale) { + block.breakNaturally(); + Signs.removeSign(Sign); + saveSigns(); + return true; + } + + if (ForRent) { + + boolean rented = Residence.getRentManager().isRented(landName); + + RentedLand rentedPlace = Residence.getRentManager().getRentedLand(landName); + long time = 0L; + if (rentedPlace != null) + time = rentedPlace.endTime; + + SimpleDateFormat formatter = new SimpleDateFormat(Residence.getLanguage().getPhrase("SignDateFormat")); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time); + String timeString = formatter.format(calendar.getTime()); + + String endDate = timeString; + if (time == 0L) + endDate = "Unknown"; + + if (Residence.getRentManager().getRentedAutoRepeats(landName)) + endDate = ChatColor.translateAlternateColorCodes('&', Residence.getLanguage().getPhrase("SignRentedAutorenewTrue") + endDate); + else + endDate = ChatColor.translateAlternateColorCodes('&', Residence.getLanguage().getPhrase("SignRentedAutorenewFalse") + endDate); + + String TopLine = rented ? endDate : Residence.getLanguage().getPhrase("SignForRentTopLine"); + sign.setLine(0, TopLine); + + String infoLine = Residence.getLanguage().getPhrase("SignForRentPriceLine", Residence.getRentManager().getCostOfRent(landName) + "." + Residence + .getRentManager().getRentDays(landName) + "." + Residence.getRentManager().getRentableRepeatable(landName)); + + sign.setLine(1, infoLine); + + sign.setLine(2, rented ? Residence.getLanguage().getPhrase("SignRentedResName", landName) + : Residence.getLanguage().getPhrase("SignForRentResName", landName)); + sign.setLine(3, rented ? Residence.getLanguage().getPhrase("SignRentedBottomLine", Residence.getRentManager().getRentingPlayer(landName)) + : Residence.getLanguage().getPhrase("SignForRentBottomLine")); + sign.update(); + } + + if (ForSale) { + sign.setLine(0, Residence.getLanguage().getPhrase("SignForSaleTopLine")); + String infoLine = Residence.getLanguage().getPhrase("SignForSalePriceLine", String.valueOf(Residence.getTransactionManager().getSaleAmount(landName))); + sign.setLine(1, infoLine); + sign.setLine(2, Residence.getLanguage().getPhrase("SignForSaleResName", landName)); + sign.setLine(3, Residence.getLanguage().getPhrase("SignForSaleBottomLine")); + sign.update(); + } + + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/Signs/Signs.java b/src/com/bekvon/bukkit/residence/Signs/Signs.java new file mode 100644 index 000000000..ab2589911 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/Signs/Signs.java @@ -0,0 +1,75 @@ +package com.bekvon.bukkit.residence.Signs; + +import org.bukkit.Location; + +public class Signs { + + int Category = 0; + String Residence = null; + String World = null; + double x = 0.01; + double y = 0.01; + double z = 0.01; + + Location loc = null; + + public Signs() { + } + + public void setLocation(Location Location) { + this.loc = Location; + } + + public Location GetLocation() { + return this.loc; + } + + public void setCategory(int Category) { + this.Category = Category; + } + + public int GetCategory() { + return this.Category; + } + + public void setResidence(String Residence) { + this.Residence = Residence; + } + + public String GetResidence() { + return this.Residence; + } + + public void setWorld(String World) { + this.World = World; + } + + public String GetWorld() { + return this.World; + } + + public void setX(double x) { + this.x = x; + } + + public double GetX() { + return this.x; + } + + public void setY(double y) { + this.y = y; + } + + public double GetY() { + return this.y; + } + + public void setZ(double z) { + this.z = z; + } + + public double GetZ() { + return this.z; + } + +} diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 8282f30dd..92da4fb3d 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -9,7 +9,10 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.Signs.SignUtil; +import com.bekvon.bukkit.residence.Signs.Signs; import com.bekvon.bukkit.residence.protection.ResidenceManager; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -105,6 +108,9 @@ public void putForSale(String areaname, Player player, int amount, boolean resad return; } sellAmount.put(areaname, amount); + + SignUtil.CheckSign(area); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForSale", ChatColor.YELLOW + areaname + ChatColor.GREEN + "." + ChatColor.YELLOW + amount + ChatColor.GREEN)); } @@ -186,6 +192,9 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { res.getPermissions().setOwner(player.getName(), true); res.getPermissions().applyDefaultFlags(); this.removeFromSale(areaname); + + SignUtil.CheckSign(res); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBought", ChatColor.GREEN + areaname + ChatColor.YELLOW)); @@ -213,6 +222,7 @@ public void removeFromSale(Player player, String areaname, boolean resadmin) { } if (area.getPermissions().getOwner().equals(player.getName()) || resadmin) { removeFromSale(areaname); + SignUtil.CheckSign(area); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceStopSelling")); } else { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 2107bad38..4b37c127c 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -34,6 +34,10 @@ public RentManager() { rentableLand = new HashMap<>(); } + public RentedLand getRentedLand(String name) { + return rentedLand.containsKey(name) ? rentedLand.get(name) : null; + } + public void setForRent(Player player, String landName, int amount, int days, boolean repeatable, boolean resadmin) { if (!Residence.getConfigManager().enabledRentSystem()) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9cc94c3ad..12a33b78c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -5,7 +5,9 @@ package com.bekvon.bukkit.residence.listeners; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -16,6 +18,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.Sign; import org.bukkit.entity.Damageable; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; @@ -25,6 +28,8 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerBucketFillEvent; @@ -41,11 +46,15 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.*; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ActionBar; +import com.bekvon.bukkit.residence.utils.Debug; +import com.bekvon.bukkit.residence.Signs.SignUtil; +import com.bekvon.bukkit.residence.Signs.Signs; /** * @@ -84,6 +93,166 @@ public void reload() { } } + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onSignInteract(PlayerInteractEvent event) { + + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + Block block = event.getClickedBlock(); + + if (block == null) + return; + + if (!(block.getState() instanceof Sign)) + return; + + Player player = (Player) event.getPlayer(); + + Location loc = block.getLocation(); + + for (Signs one : SignUtil.Signs.GetAllSigns()) { + if (!one.GetWorld().equalsIgnoreCase(loc.getWorld().getName())) + continue; + if (one.GetX() != loc.getBlockX()) + continue; + if (one.GetY() != loc.getBlockY()) + continue; + if (one.GetZ() != loc.getBlockZ()) + continue; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + + if (res == null) + return; + + String landName = res.getName(); + + boolean ForSale = Residence.getTransactionManager().isForSale(landName); + boolean ForRent = Residence.getRentManager().isForRent(landName); + + if (ForSale) { + Bukkit.dispatchCommand(player, "res market buy " + landName); + break; + } + + if (ForRent) { + if (Residence.getRentManager().isRented(landName) && player.isSneaking()) + Bukkit.dispatchCommand(player, "res market release " + landName); + else { + boolean stage = true; + if (player.isSneaking()) + stage = false; + + Bukkit.dispatchCommand(player, "res market rent " + landName + " " + stage); + } + } + + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onSignCreate(SignChangeEvent event) { + + Block block = event.getBlock(); + + if (!(block.getState() instanceof Sign)) + return; + + Sign sign = (Sign) block.getState(); + + if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(Residence.getLanguage().getPhrase("SignTopLine"))) + return; + +// if (!event.getPlayer().hasPermission("residence.market.signs")) { +// event.setCancelled(true); +// player.sendMessage(Language.getMessage("signs.cantcreate")); +// return; +// } + + Signs signInfo = new Signs(); + + Location loc = sign.getLocation(); + + final ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + + if (res == null) + return; + + String landName = res.getName(); + + boolean ForSale = Residence.getTransactionManager().isForSale(landName); + boolean ForRent = Residence.getRentManager().isForRent(landName); + + int category = 1; + if (SignUtil.Signs.GetAllSigns().size() > 0) + category = SignUtil.Signs.GetAllSigns().get(SignUtil.Signs.GetAllSigns().size() - 1).GetCategory() + 1; + + if (ForSale || ForRent) { + signInfo.setCategory(category); + signInfo.setResidence(landName); + signInfo.setWorld(loc.getWorld().getName()); + signInfo.setX(loc.getBlockX()); + signInfo.setY(loc.getBlockY()); + signInfo.setZ(loc.getBlockZ()); + signInfo.setLocation(loc); + SignUtil.Signs.addSign(signInfo); + SignUtil.saveSigns(); + } + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + public void run() { + SignUtil.CheckSign(res); + } + }, 5L); + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onRentEvent(ResidenceRentEvent event) { + ClaimedResidence res = event.getResidence(); + for (final Signs one : SignUtil.Signs.GetAllSigns()) { + if (!res.containsLoc(one.GetLocation())) + continue; + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + public void run() { + SignUtil.SignUpdate(one); + } + }, 5L); + } + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onSignDestroy(BlockBreakEvent event) { + + if (event.isCancelled()) + return; + + Block block = event.getBlock(); + + if (block == null) + return; + + if (!(block.getState() instanceof Sign)) + return; + + Location loc = block.getLocation(); + + for (Signs one : SignUtil.Signs.GetAllSigns()) { + + if (!one.GetWorld().equalsIgnoreCase(loc.getWorld().getName())) + continue; + if (one.GetX() != loc.getBlockX()) + continue; + if (one.GetY() != loc.getBlockY()) + continue; + if (one.GetZ() != loc.getBlockZ()) + continue; + + SignUtil.Signs.removeSign(one); + SignUtil.saveSigns(); + break; + } + } + @EventHandler(priority = EventPriority.MONITOR) public void onPlayerQuit(PlayerQuitEvent event) { String pname = event.getPlayer().getName(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 395cc518f..f44be6aac 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -140,7 +140,6 @@ public boolean addResidence(Player player, String name, Location loc1, Location public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { - long time = System.currentTimeMillis(); if (!Residence.validName(name)) { if (player != null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); @@ -153,7 +152,6 @@ public boolean addResidence(Player player, String owner, String name, Location l } return false; } - Debug.D("1 " + (System.currentTimeMillis() - time)); PermissionGroup group = Residence.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); boolean createpermission = group.canCreateResidences() || (player == null ? true : player.hasPermission("residence.create")); if (!createpermission && !resadmin) { @@ -162,14 +160,12 @@ public boolean addResidence(Player player, String owner, String name, Location l } return false; } - Debug.D("2 " + (System.currentTimeMillis() - time)); if (player != null) { if (!hasMaxZones(player.getName(), group.getMaxZones()) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); return false; } } - Debug.D("3 " + (System.currentTimeMillis() - time)); CuboidArea newArea = new CuboidArea(loc1, loc2); ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName()); newRes.getPermissions().applyDefaultFlags(); diff --git a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java index 5077dcd34..71657d716 100644 --- a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java +++ b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java @@ -95,37 +95,39 @@ public final void parsePerms(FileConfiguration config, FileConfiguration groups) if (!groups.contains("Groups." + key + ".Flags.World")) continue; Set worldkeys = groups.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false); - if (worldkeys != null) { - Map perms = new HashMap<>(); - for (String wkey : worldkeys) { - FlagPermissions list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); - if (wkey.equalsIgnoreCase("global")) { - list.setParent(globaldefaults); - perms.put(wkey.toLowerCase(), list); - for (Entry worldperm : worldperms.entrySet()) { - list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); - list.setParent(worldperm.getValue()); - perms.put("global." + worldperm.getKey().toLowerCase(), list); - } - } else { - perms.put(wkey.toLowerCase(), list); + if (worldkeys == null) + continue; + + Map perms = new HashMap<>(); + for (String wkey : worldkeys) { + FlagPermissions list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); + if (wkey.equalsIgnoreCase("global")) { + list.setParent(globaldefaults); + perms.put(wkey.toLowerCase(), list); + for (Entry worldperm : worldperms.entrySet()) { + list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); + list.setParent(worldperm.getValue()); + perms.put("global." + worldperm.getKey().toLowerCase(), list); } + } else { + perms.put(wkey.toLowerCase(), list); } - for (Entry entry : perms.entrySet()) { - String wkey = entry.getKey(); - FlagPermissions list = entry.getValue(); - if (!wkey.startsWith("global.")) { - list.setParent(perms.get("global." + wkey)); - if (list.getParent() == null) { - list.setParent(worldperms.get(wkey)); - } - if (list.getParent() == null) { - list.setParent(globaldefaults); - } + } + for (Entry entry : perms.entrySet()) { + String wkey = entry.getKey(); + FlagPermissions list = entry.getValue(); + if (!wkey.startsWith("global.")) { + list.setParent(perms.get("global." + wkey)); + if (list.getParent() == null) { + list.setParent(worldperms.get(wkey)); + } + if (list.getParent() == null) { + list.setParent(globaldefaults); } } - groupperms.put(key.toLowerCase(), perms); } + groupperms.put(key.toLowerCase(), perms); + } } } catch (Exception ex) { From 83c770524636779513e05f25645e4d1ebd7aaf5c Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 13 Sep 2015 18:17:05 +0300 Subject: [PATCH 0009/1142] Flag set not translating variables --- .../bukkit/residence/protection/ResidencePermissions.java | 2 +- src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index df655e9f1..9270b528b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -228,7 +228,7 @@ public boolean setFlag(Player player, String flag, String flagstate, boolean res if (fc.isCancelled()) return false; if (super.setFlag(flag, state)) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag + "." + residence.getName() + "." + flagstate)); return true; } } diff --git a/src/plugin.yml b/src/plugin.yml index 3f87212d0..1fcb8a431 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.2.2 +version: 2.7.3.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 2bfe111c0f7a8c9041ddbc92a54ebe1dac959ce5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 13 Sep 2015 18:34:44 +0300 Subject: [PATCH 0010/1142] Fix for sticky pistons to be able to take/push blocks from/to residence with piston true flag --- .../listeners/ResidenceBlockListener.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index ead415158..d266e9359 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -15,6 +15,7 @@ import org.bukkit.entity.Player; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockDispenseEvent; @@ -174,6 +175,16 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { return; } } + + for (Block block : event.getBlocks()) { + ClaimedResidence blockRes = Residence.getResidenceManager().getByLoc(block.getLocation()); + ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + if (blockRes == null && pistonRes != null || blockRes != null && pistonRes == null || blockRes != null && pistonRes != null && !blockRes.getName() + .equalsIgnoreCase(pistonRes.getName())) { + event.setCancelled(true); + return; + } + } } } @@ -190,6 +201,19 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { return; } } + + BlockFace dir = event.getDirection(); + for (Block block : event.getBlocks()) { + Location loc = new Location(block.getWorld(), block.getX() + dir.getModX(), block.getY() + dir.getModY(), block.getZ() + dir.getModZ()); + ClaimedResidence blockRes = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + if (blockRes == null && pistonRes != null || blockRes != null && pistonRes == null || blockRes != null && pistonRes != null && !blockRes.getName() + .equalsIgnoreCase(pistonRes.getName())) { + event.setCancelled(true); + return; + } + } + } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -257,7 +281,7 @@ public void onLavaWaterFlow(BlockFromToEvent event) { Location location = event.getToBlock().getLocation(); if (!Residence.getConfigManager().getNoFlowWorlds().contains(location.getWorld().getName())) return; - + if (location.getBlockY() < Residence.getConfigManager().getFlowLevel()) return; From 0011b33c58932154fd968f7fc52ce93d10ce317f Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 14 Sep 2015 17:16:49 +0300 Subject: [PATCH 0011/1142] Fix for vehicle destroy event throwing bunch of error messages Some fixes for rent signs and added option to place them outside rented place --- .../bukkit/residence/Signs/SignUtil.java | 15 +++--- .../residence/economy/rent/RentManager.java | 14 ++++- .../listeners/ResidenceEntityListener.java | 2 +- .../listeners/ResidencePlayerListener.java | 53 +++++++------------ src/plugin.yml | 2 +- 5 files changed, 39 insertions(+), 47 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java b/src/com/bekvon/bukkit/residence/Signs/SignUtil.java index f87b2a9cc..21156bd3c 100644 --- a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/Signs/SignUtil.java @@ -5,19 +5,18 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; -import java.util.Date; import java.util.List; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; -import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.Sign; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; import com.bekvon.bukkit.residence.CommentedYamlConfiguration; +import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -107,7 +106,7 @@ public static void CheckSign(ClaimedResidence res) { signList.addAll(SignUtil.Signs.GetAllSigns()); for (Signs one : signList) { - if (!res.containsLoc(one.GetLocation())) + if (!res.getName().equals(one.GetResidence())) continue; SignUtil.SignUpdate(one); } @@ -116,9 +115,7 @@ public static void CheckSign(ClaimedResidence res) { public static boolean SignUpdate(Signs Sign) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(Sign.GetLocation()); - - String landName = res.getName(); + String landName = Sign.GetResidence(); boolean ForSale = Residence.getTransactionManager().isForSale(landName); boolean ForRent = Residence.getRentManager().isForRent(landName); @@ -169,8 +166,8 @@ public static boolean SignUpdate(Signs Sign) { sign.setLine(1, infoLine); - sign.setLine(2, rented ? Residence.getLanguage().getPhrase("SignRentedResName", landName) - : Residence.getLanguage().getPhrase("SignForRentResName", landName)); + sign.setLine(2, rented ? NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", landName) + : NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", landName)); sign.setLine(3, rented ? Residence.getLanguage().getPhrase("SignRentedBottomLine", Residence.getRentManager().getRentingPlayer(landName)) : Residence.getLanguage().getPhrase("SignForRentBottomLine")); sign.update(); @@ -180,7 +177,7 @@ public static boolean SignUpdate(Signs Sign) { sign.setLine(0, Residence.getLanguage().getPhrase("SignForSaleTopLine")); String infoLine = Residence.getLanguage().getPhrase("SignForSalePriceLine", String.valueOf(Residence.getTransactionManager().getSaleAmount(landName))); sign.setLine(1, infoLine); - sign.setLine(2, Residence.getLanguage().getPhrase("SignForSaleResName", landName)); + sign.setLine(2, NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", landName)); sign.setLine(3, Residence.getLanguage().getPhrase("SignForSaleBottomLine")); sign.update(); } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 4b37c127c..590680586 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -8,11 +8,14 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.event.ResidenceRentEvent; import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import com.bekvon.bukkit.residence.utils.Debug; + import java.util.Date; import java.util.HashMap; import java.util.Iterator; @@ -127,6 +130,9 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi newrent.endTime = System.currentTimeMillis() + daysToMs(land.days); newrent.autoRefresh = repeat; rentedLand.put(landName, newrent); + + SignUtil.CheckSign(res); + res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); @@ -158,8 +164,10 @@ public void removeFromForRent(Player player, String landName, boolean resadmin) rentableLand.remove(landName); } ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if (res != null) + if (res != null) { res.getPermissions().applyDefaultFlags(); + SignUtil.CheckSign(res); + } player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceUnrent", ChatColor.YELLOW + landName + ChatColor.GREEN)); } else { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); @@ -200,8 +208,10 @@ public void unrent(Player player, String landName, boolean resadmin) { rentableLand.remove(landName); if (rentedLand.containsKey(landName)) { rentedLand.remove(landName); - if (res != null) + if (res != null) { res.getPermissions().applyDefaultFlags(); + SignUtil.CheckSign(res); + } } if (split.length != 0) player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceRemoveRentable", ChatColor.YELLOW + split[split.length - 1] diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 7bf45bfa6..f5dff5e33 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -174,7 +174,7 @@ public void AnimalKilling(VehicleDestroyEvent event) { if (damager instanceof Player) { cause = (Player) damager; - } else { + } else if (damager instanceof Projectile) { cause = (Player) ((Projectile) damager).getShooter(); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 12a33b78c..a3ffc098f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -5,9 +5,7 @@ package com.bekvon.bukkit.residence.listeners; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -46,7 +44,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.chat.ChatChannel; -import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.*; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -121,12 +118,7 @@ public void onSignInteract(PlayerInteractEvent event) { if (one.GetZ() != loc.getBlockZ()) continue; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - - if (res == null) - return; - - String landName = res.getName(); + String landName = one.GetResidence(); boolean ForSale = Residence.getTransactionManager().isForSale(landName); boolean ForRent = Residence.getRentManager().isForRent(landName); @@ -164,22 +156,29 @@ public void onSignCreate(SignChangeEvent event) { if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(Residence.getLanguage().getPhrase("SignTopLine"))) return; -// if (!event.getPlayer().hasPermission("residence.market.signs")) { -// event.setCancelled(true); -// player.sendMessage(Language.getMessage("signs.cantcreate")); -// return; -// } - Signs signInfo = new Signs(); Location loc = sign.getLocation(); - final ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + String landName = null; - if (res == null) - return; + ClaimedResidence res = null; + if (!event.getLine(1).equalsIgnoreCase("")) { + res = Residence.getResidenceManager().getByName(event.getLine(1)); + + if (res == null) { + event.setCancelled(true); + return; + } - String landName = res.getName(); + landName = res.getName(); + + } else { + res = Residence.getResidenceManager().getByLoc(loc); + landName = Residence.getResidenceManager().getNameByLoc(loc); + } + + final ClaimedResidence residence = res; boolean ForSale = Residence.getTransactionManager().isForSale(landName); boolean ForRent = Residence.getRentManager().isForRent(landName); @@ -201,25 +200,11 @@ public void onSignCreate(SignChangeEvent event) { } Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { public void run() { - SignUtil.CheckSign(res); + SignUtil.CheckSign(residence); } }, 5L); } - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onRentEvent(ResidenceRentEvent event) { - ClaimedResidence res = event.getResidence(); - for (final Signs one : SignUtil.Signs.GetAllSigns()) { - if (!res.containsLoc(one.GetLocation())) - continue; - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { - public void run() { - SignUtil.SignUpdate(one); - } - }, 5L); - } - } - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignDestroy(BlockBreakEvent event) { diff --git a/src/plugin.yml b/src/plugin.yml index 1fcb8a431..35937e686 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.3.0 +version: 2.7.3.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From da47d6ad7117c796bd0e635af9ec22095d52fb3c Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 14 Sep 2015 17:22:44 +0300 Subject: [PATCH 0012/1142] Added option to give longer residence names with subzones --- .../residence/listeners/ResidencePlayerListener.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index a3ffc098f..e93899e32 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -164,10 +164,17 @@ public void onSignCreate(SignChangeEvent event) { ClaimedResidence res = null; if (!event.getLine(1).equalsIgnoreCase("")) { - res = Residence.getResidenceManager().getByName(event.getLine(1)); + + String resname = event.getLine(1); + if (!event.getLine(2).equalsIgnoreCase("")) + resname += "." + event.getLine(2); + if (!event.getLine(3).equalsIgnoreCase("")) + resname += "." + event.getLine(3); + + res = Residence.getResidenceManager().getByName(resname); if (res == null) { - event.setCancelled(true); + event.getPlayer().sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); return; } From 1d3fa19495ea8ebe78f80d0859497dc6ac404676 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 16 Sep 2015 16:13:37 +0300 Subject: [PATCH 0013/1142] Tab complete, sign converter, small fixes --- src/com/bekvon/bukkit/residence/Locale.java | 12 ++- .../bekvon/bukkit/residence/Residence.java | 13 ++- .../residence/ResidenceCommandListener.java | 25 ++++- .../bukkit/residence/Signs/SignUtil.java | 94 ++++++++++++++++++- .../bekvon/bukkit/residence/Signs/Signs.java | 21 +++-- .../residence/economy/TransactionManager.java | 2 + .../residence/economy/rent/RentManager.java | 2 - .../listeners/ResidenceBlockListener.java | 3 - .../listeners/ResidencePlayerListener.java | 1 - .../protection/ClaimedResidence.java | 7 +- .../residence/protection/CuboidArea.java | 2 - .../protection/ResidenceManager.java | 7 -- .../bukkit/residence/text/help/HelpEntry.java | 80 +++++++++++++++- .../bukkit/residence/utils/TabComplete.java | 39 ++++++++ .../vaultinterface/ResidenceVaultAdapter.java | 4 +- src/plugin.yml | 5 +- 16 files changed, 273 insertions(+), 44 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/utils/TabComplete.java diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 33c159aaf..b43a67947 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -159,7 +159,7 @@ public static void LoadLang(String lang) { GetConfigString("Language.SignTopLine", "[market]", writer, conf, true); GetConfigString("Language.SignDateFormat", "YY/MM/dd HH:mm", writer, conf, true); - + GetConfigString("Language.SignForRentTopLine", "&8For Rent", writer, conf, true); GetConfigString("Language.SignForRentPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); GetConfigString("Language.SignForRentResName", "&8%1", writer, conf, true); @@ -167,12 +167,12 @@ public static void LoadLang(String lang) { GetConfigString("Language.SignRentedAutorenewTrue", "&2", writer, conf, true); GetConfigString("Language.SignRentedAutorenewFalse", "&c", writer, conf, true); - + GetConfigString("Language.SignRentedTopLine", "%1", writer, conf, true); GetConfigString("Language.SignRentedPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); GetConfigString("Language.SignRentedResName", "&8%1", writer, conf, true); GetConfigString("Language.SignRentedBottomLine", "&1%1", writer, conf, true); - + GetConfigString("Language.SignForSaleTopLine", "&8For Sale", writer, conf, true); GetConfigString("Language.SignForSalePriceLine", "&8%1", writer, conf, true); GetConfigString("Language.SignForSaleResName", "&8%1", writer, conf, true); @@ -361,7 +361,7 @@ public static void LoadLang(String lang) { GetConfigString("CommandHelp.Description", "Contains Help for Residence", writer, conf, true); GetConfigString("CommandHelp.SubCommands.res.Description", "Main Residence Command", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.Info", Arrays.asList("See the residence wiki for more help.", "Wiki: residencebukkitmod.wikispaces.com", + GetConfigArray("CommandHelp.SubCommands.res.Info", Arrays.asList("See the residence wiki for more help.", "Wiki: https://github.com/bekvon/Residence/wiki", "Use /res [command] ? to view more help information."), writer, conf, true); GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.Description", "Selection Commands", writer, conf, true); @@ -739,6 +739,10 @@ public static void LoadLang(String lang) { Arrays.asList("Usage: /resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes."), writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Description", "Converts ResidenceSigns plugins saved signs (admin only).", writer, conf, + true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Info", Arrays.asList("Usage: /ressignconvert"), writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.version.Description", "how residence version", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.version.Info", Arrays.asList("Usage: /res version"), diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index e10d40963..6b6336af4 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -63,6 +63,8 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.CrackShot; +import com.bekvon.bukkit.residence.utils.FileCleanUp; +import com.bekvon.bukkit.residence.utils.TabComplete; import com.bekvon.bukkit.residence.utils.VersionChecker; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; import com.earth2me.essentials.Essentials; @@ -230,7 +232,9 @@ public void onEnable() { this.writeDefaultGroupsFromJar(); this.writeDefaultFlagsFromJar(); } - + + this.getCommand("res").setTabCompleter(new TabComplete()); + // Residence.getConfigManager().UpdateConfigFile(); // if (this.getConfig().getInt("ResidenceVersion", 0) == 0) { @@ -329,6 +333,9 @@ public void onEnable() { this.getLogger().log(Level.SEVERE, "Unable to load save file", e); throw e; } + +// FileCleanUp.cleanFiles(); + if (rmanager == null) { rmanager = new ResidenceManager(); } @@ -432,9 +439,9 @@ public void onEnable() { System.out.println("[Residence] - FAILED INITIALIZATION! DISABLED! ERROR:"); Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); } - + SignUtil.LoadSigns(); - + //versionChecker = new VersionChecker(this); // versionChecker.VersionCheck(null); } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index a33dc594e..204efe728 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -9,7 +9,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; - import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -20,6 +19,7 @@ import org.bukkit.entity.Player; import org.getspout.spoutapi.SpoutManager; +import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -49,13 +49,26 @@ public boolean onCommand(CommandSender sender, Command command, String label, St this.reloadPlugin(); sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); System.out.println("[Residence] Reloaded by " + player.getName() + "."); - } + } else + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); } else { this.reloadPlugin(); System.out.println("[Residence] Reloaded by console."); } return true; } + if (command.getName().equals("ressignconvert") && args.length == 0) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + SignUtil.convertSigns(sender); + } else + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + } else { + SignUtil.convertSigns(sender); + } + return true; + } if (command.getName().equals("resload")) { if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender)) { try { @@ -66,7 +79,8 @@ public boolean onCommand(CommandSender sender, Command command, String label, St sender.sendMessage(ChatColor.RED + ex.getMessage()); Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); } - } + } else + sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); return true; } else if (command.getName().equals("resworld")) { if (args.length == 2 && args[0].equalsIgnoreCase("remove")) { @@ -173,6 +187,7 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com .getDescription().getVersion()); sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); + sender.sendMessage(ChatColor.GREEN + "Maintained by: " + ChatColor.YELLOW + "Zrips"); String names = null; List authlist = this.getDescription().getAuthors(); for (String auth : authlist) { @@ -183,9 +198,9 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com } sender.sendMessage(ChatColor.GREEN + "Authors: " + ChatColor.YELLOW + names); sender.sendMessage(ChatColor.DARK_AQUA + "For a command list, and help, see the wiki:"); - sender.sendMessage(ChatColor.GREEN + "http://residencebukkitmod.wikispaces.com/"); + sender.sendMessage(ChatColor.GREEN + "https://github.com/bekvon/Residence/wiki"); sender.sendMessage(ChatColor.AQUA + "Visit the Spigot Resource page at:"); - sender.sendMessage(ChatColor.BLUE + "http://www.spigotmc.org/resources/residence-reloaded-1-8.2697/"); + sender.sendMessage(ChatColor.BLUE + "https://www.spigotmc.org/resources/residence.11480/"); sender.sendMessage(ChatColor.GRAY + "------------------------------------"); return true; } diff --git a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java b/src/com/bekvon/bukkit/residence/Signs/SignUtil.java index 21156bd3c..3a7bc8f2b 100644 --- a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/Signs/SignUtil.java @@ -6,12 +6,15 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.List; +import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; +import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.Sign; +import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; @@ -20,7 +23,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; public class SignUtil { @@ -184,4 +186,94 @@ public static boolean SignUpdate(Signs Sign) { return true; } + + public static void convertSigns(CommandSender sender) { + File file = new File("plugins/ResidenceSigns/signs.yml"); + if (!file.exists()) { + sender.sendMessage(ChatColor.GOLD + "Can't find ResidenceSign file"); + return; + } + YamlConfiguration conf = YamlConfiguration.loadConfiguration(file); + + if (!conf.contains("signs")) { + sender.sendMessage(ChatColor.GOLD + "Incorrect format of signs file"); + return; + } + + Set sectionname = conf.getConfigurationSection("signs").getKeys(false); + ConfigurationSection section = conf.getConfigurationSection("signs"); + + int category = 1; + if (SignUtil.Signs.GetAllSigns().size() > 0) + category = SignUtil.Signs.GetAllSigns().get(SignUtil.Signs.GetAllSigns().size() - 1).GetCategory() + 1; + + long time = System.currentTimeMillis(); + + int i = 0; + for (String one : sectionname) { + Signs signs = new Signs(); + String resname = section.getString(one + ".resName"); + signs.setCategory(category); + signs.setResidence(resname); + + List loc = section.getStringList(one + ".loc"); + + if (loc.size() != 4) + continue; + + World world = Bukkit.getWorld(loc.get(0)); + if (world == null) + continue; + + signs.setWorld(world.getName()); + int x = 0; + int y = 0; + int z = 0; + + try { + x = Integer.parseInt(loc.get(1)); + y = Integer.parseInt(loc.get(2)); + z = Integer.parseInt(loc.get(3)); + } catch (Exception ex) { + continue; + } + + signs.setX(x); + signs.setY(y); + signs.setZ(z); + boolean found = false; + + for (Signs onesigns : SignUtil.Signs.GetAllSigns()) { + if (!onesigns.GetWorld().equalsIgnoreCase(signs.GetWorld())) + continue; + if (onesigns.GetX() != signs.GetX()) + continue; + if (onesigns.GetY() != signs.GetY()) + continue; + if (onesigns.GetZ() != signs.GetZ()) + continue; + found = true; + } + + if (found) + continue; + + Location nloc = signs.GetLocation(); + Block block = nloc.getBlock(); + + if (!(block.getState() instanceof Sign)) + continue; + + SignUtil.Signs.addSign(signs); + SignUtil.SignUpdate(signs); + category++; + i++; + } + + SignUtil.saveSigns(); + + sender.sendMessage(ChatColor.GOLD + "" + i + ChatColor.YELLOW + " signs have being converted to new format! It took " + ChatColor.GOLD + (System + .currentTimeMillis() - time) + ChatColor.YELLOW + " ms!"); + } + } diff --git a/src/com/bekvon/bukkit/residence/Signs/Signs.java b/src/com/bekvon/bukkit/residence/Signs/Signs.java index ab2589911..6379406a6 100644 --- a/src/com/bekvon/bukkit/residence/Signs/Signs.java +++ b/src/com/bekvon/bukkit/residence/Signs/Signs.java @@ -1,16 +1,18 @@ package com.bekvon.bukkit.residence.Signs; +import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.World; public class Signs { int Category = 0; String Residence = null; - String World = null; + String world = null; double x = 0.01; double y = 0.01; double z = 0.01; - + Location loc = null; public Signs() { @@ -21,9 +23,14 @@ public void setLocation(Location Location) { } public Location GetLocation() { + if (this.loc == null) { + World w = Bukkit.getWorld(this.world); + if (w != null) + this.loc = new Location(Bukkit.getWorld(this.world), this.x, this.y, this.z); + } return this.loc; } - + public void setCategory(int Category) { this.Category = Category; } @@ -31,21 +38,21 @@ public void setCategory(int Category) { public int GetCategory() { return this.Category; } - + public void setResidence(String Residence) { this.Residence = Residence; } - + public String GetResidence() { return this.Residence; } public void setWorld(String World) { - this.World = World; + this.world = World; } public String GetWorld() { - return this.World; + return this.world; } public void setX(double x) { diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 92da4fb3d..0ef05a67f 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -51,6 +51,8 @@ public static boolean chargeEconomyMoney(Player player, int amount) { } public static boolean giveEconomyMoney(Player player, int amount) { + if (player == null) + return false; if (amount == 0) return true; EconomyInterface econ = Residence.getEconomyManager(); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 590680586..157e22dcf 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -14,8 +14,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import com.bekvon.bukkit.residence.utils.Debug; - import java.util.Date; import java.util.HashMap; import java.util.Iterator; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index d266e9359..dd529f819 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -11,8 +11,6 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.entity.Player; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -36,7 +34,6 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockSpreadEvent; -import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.inventory.ItemStack; /** diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index e93899e32..1df49ee8d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -49,7 +49,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ActionBar; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.Signs.Signs; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 62eba2407..cef526329 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -16,14 +16,13 @@ import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.Debug; - import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -1098,6 +1097,10 @@ public String getOwner() { return perms.getOwner(); } + public UUID getOwnerUUID() { + return perms.getOwnerUUID(); + } + public ResidenceItemList getItemBlacklist() { return blacklist; } diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index f87496e56..bd8291131 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -7,8 +7,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ResidenceManager.ChunkRef; -import com.bekvon.bukkit.residence.utils.Debug; - import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index f44be6aac..a9d7ed29f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -20,7 +20,6 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.block.BlockFace; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -32,10 +31,6 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.Debug; -import com.sk89q.worldedit.blocks.BlockType; - -import net.minecraft.server.v1_8_R3.Material; /** * @@ -345,7 +340,6 @@ public void removeResidence(Player player, String name, boolean resadmin) { Location temploc = new Location(world, low.getBlockX(), low.getBlockY(), low.getBlockZ()); - int i = 0; for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { temploc.setX(x); for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { @@ -354,7 +348,6 @@ public void removeResidence(Player player, String name, boolean resadmin) { temploc.setZ(z); if (Residence.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getTypeId())) { temploc.getBlock().setTypeId(0); - i++; } } } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index cbfc9f6b1..5c8a35237 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -9,14 +9,21 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.utils.Debug; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Set; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; /** * @@ -88,12 +95,16 @@ public void printHelp(CommandSender sender, int page) { } } + if (pagecount == 1) + return; + int NextPage = page + 1; NextPage = page < pagecount ? NextPage : page; int Prevpage = page - 1; Prevpage = page > 1 ? Prevpage : page; String prevCmd = !name.equalsIgnoreCase("res") ? "/res " + name + " ? " + Prevpage : "/res ? " + Prevpage; - String prev = "[\"\",{\"text\":\"" + Residence.getLanguage().getPhrase("PrevInfoPage") + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + String prev = "[\"\",{\"text\":\"" + Residence.getLanguage().getPhrase("PrevInfoPage") + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = !name.equalsIgnoreCase("res") ? "/res " + name + " ? " + NextPage : "/res ? " + NextPage; String next = " {\"text\":\"" + Residence.getLanguage().getPhrase("NextInfoPage") + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd @@ -101,10 +112,6 @@ public void printHelp(CommandSender sender, int page) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); -// if (page < pagecount) -// sender.sendMessage(ChatColor.GRAY + "---<" + Residence.getLanguage().getPhrase("NextPage") + ">---"); -// else -// sender.sendMessage(ChatColor.GRAY + "-----------------------"); } public void printHelp(CommandSender sender, int page, String path) { @@ -197,4 +204,67 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { return entry; } + public static Set getSubCommands(String[] args) { + File langFile = new File(new File(Residence.getDataLocation(), "Language"), Residence.getConfigManager().getLanguage() + ".yml"); + + Set subCommands = new HashSet(Arrays.asList("")); + + if (langFile.isFile()) { + FileConfiguration node = new YamlConfiguration(); + try { + node.load(langFile); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + + subCommands = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands").getKeys(false); + ConfigurationSection meinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); + + String key = convertArgs(args); + + if (key == "") { + return subCommands; + } else { + if (meinPath.contains(key)) { + return meinPath.getConfigurationSection(key).getKeys(false); + } else { + String[] arg = new String[args.length - 1]; + for (int i = 0; i < args.length - 1; i++) { + arg[i] = args[i]; + } + key = convertArgs(arg); + if (meinPath.contains(key)) { + return meinPath.getConfigurationSection(key).getKeys(false); + } + } + } + } + return new HashSet(Arrays.asList("?")); + } + + private static String convertArgs(String[] args) { + String key = ""; + if (args.length > 0) { + int i = 1; + for (String one : args) { + if (one.equalsIgnoreCase("")) + continue; + key += one; + if (i < args.length) + key += ".SubCommands."; + if (i < args.length + 1) + key += ".SubCommands"; + i++; + } + } else if (args.length == 1) { + key = args[0]; + key += ".SubCommands"; + } + return key; + } + } diff --git a/src/com/bekvon/bukkit/residence/utils/TabComplete.java b/src/com/bekvon/bukkit/residence/utils/TabComplete.java new file mode 100644 index 000000000..437f68d2a --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/TabComplete.java @@ -0,0 +1,39 @@ +package com.bekvon.bukkit.residence.utils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.util.StringUtil; + +import com.bekvon.bukkit.residence.text.help.HelpEntry; + +public class TabComplete implements TabCompleter { + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + List completionList = new ArrayList<>(); + Set Commands = HelpEntry.getSubCommands(args); + + if (Commands.contains("?")) { + String com = ""; + for (String one : args) { + com += " " + one; + } + Bukkit.dispatchCommand(sender, "res" + com + "?"); + Bukkit.getConsoleSender().sendMessage(sender.getName() + " issued server command: /res" + com + "?"); + Commands.clear(); + Commands.add(""); + } + + String PartOfCommand = args[args.length - 1]; + StringUtil.copyPartialMatches(PartOfCommand, Commands, completionList); + Collections.sort(completionList); + return completionList; + } +} diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 21e8a9efe..4eb3d6ceb 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -10,6 +10,8 @@ import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.permission.Permission; + +import org.bukkit.OfflinePlayer; import org.bukkit.Server; import org.bukkit.entity.Player; import org.bukkit.plugin.RegisteredServiceProvider; @@ -77,7 +79,7 @@ public String getPlayerGroup(Player player) { return group.toLowerCase(); } } - + public String getPlayerGroup(String player, String world) { @SuppressWarnings("deprecation") String group = permissions.getPrimaryGroup(world, player); diff --git a/src/plugin.yml b/src/plugin.yml index 35937e686..8db4547cb 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.3.2 +version: 2.7.5.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -28,6 +28,9 @@ commands: resworld: description: §cRemoves every residence in a world. usage: §c/resworld remove [world] + ressignconvert: + description: §cConverts signs from ResidenceSigns plugin. + usage: §c/ressignconvert permissions: residence.admin: description: Gives you access to /resadmin From 1ef9362517445386338177a892ca62f1c9d2594a Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 16 Sep 2015 18:28:26 +0300 Subject: [PATCH 0014/1142] Experimental cleanup function Fixed server land issue --- .../bukkit/residence/ConfigManager.java | 29 +++- .../bekvon/bukkit/residence/Residence.java | 7 +- .../residence/ResidenceCommandListener.java | 4 +- .../bukkit/residence/economy/BOSEAdapter.java | 2 +- .../residence/economy/EconomyInterface.java | 4 +- .../economy/EssentialsEcoAdapter.java | 2 +- .../permissions/PermissionsInterface.java | 1 + .../protection/ClaimedResidence.java | 4 +- .../protection/ResidenceManager.java | 9 +- .../protection/ResidencePermissions.java | 6 +- .../bukkit/residence/utils/FileCleanUp.java | 64 ++++++++ .../vaultinterface/ResidenceVaultAdapter.java | 137 +++++++++--------- 12 files changed, 186 insertions(+), 83 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/utils/FileCleanUp.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 7d6109171..6fa43e57d 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -39,8 +39,10 @@ public class ConfigManager { protected boolean NoWater; protected boolean NoLavaPlace; protected boolean NoWaterPlace; + protected boolean AutoCleanUp; protected boolean UseClean; protected int infoToolId; + protected int AutoCleanUpDays; protected int selectionToolId; protected boolean adminOps; protected String multiworldPlugin; @@ -91,6 +93,7 @@ public class ConfigManager { protected List customRightClick; protected List CleanBlocks; protected List NoFlowWorlds; + protected List AutoCleanUpWorlds; protected List NoPlaceWorlds; protected List CleanWorlds; private boolean enforceAreaInsideArea; @@ -216,7 +219,14 @@ void UpdateConfigFile() { writer.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); autoSaveInt = GetConfigInt("Global.SaveInterval", 10, writer, conf); - writer.addComment("Global.AntiGreef.SeaLevel", "Level from witch one to start lava and water flow blocking", "This dont have effect in residence area"); + writer.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days."); + AutoCleanUp = GetConfigBoolean("Global.AutoCleanUp.Use", false, writer, conf); + writer.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); + AutoCleanUpDays = GetConfigInt("Global.AutoCleanUp.Days", 60, writer, conf); + writer.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); + AutoCleanUpWorlds = GetConfigArray("Global.AutoCleanUp.Worlds", Arrays.asList("TestWorld"), writer, conf, false); + + writer.addComment("Global.AntiGreef.Flow.Level", "Level from witch one to start lava and water flow blocking", "This dont have effect in residence area"); FlowLevel = GetConfigInt("Global.AntiGreef.Flow.Level", 63, writer, conf); writer.addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); NoLava = GetConfigBoolean("Global.AntiGreef.Flow.NoLavaFlow", true, writer, conf); @@ -238,7 +248,7 @@ void UpdateConfigFile() { UseClean = GetConfigBoolean("Global.AntiGreef.ResCleaning.Use", true, writer, conf); writer.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); CleanLevel = GetConfigInt("Global.AntiGreef.ResCleaning.Level", 63, writer, conf); - writer.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced","By default only water and lava will be replaced"); + writer.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); CleanBlocks = GetConfigIntArray("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11), writer, conf); CleanWorlds = GetConfigArray("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList("World"), writer, conf, false); @@ -522,6 +532,14 @@ public boolean isNoWaterPlace() { return NoWaterPlace; } + public boolean isUseResidenceFileClean() { + return AutoCleanUp; + } + + public int getResidenceFileCleanDays() { + return AutoCleanUpDays; + } + public boolean isUseClean() { return UseClean; } @@ -665,12 +683,19 @@ public List getCustomRightClick() { public List getCleanBlocks() { return CleanBlocks; } + public List getNoFlowWorlds() { return NoFlowWorlds; } + + public List getAutoCleanUpWorlds() { + return AutoCleanUpWorlds; + } + public List getNoPlaceWorlds() { return NoPlaceWorlds; } + public List getCleanWorlds() { return CleanWorlds; } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 6b6336af4..2807f75d9 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -232,9 +232,9 @@ public void onEnable() { this.writeDefaultGroupsFromJar(); this.writeDefaultFlagsFromJar(); } - + this.getCommand("res").setTabCompleter(new TabComplete()); - + // Residence.getConfigManager().UpdateConfigFile(); // if (this.getConfig().getInt("ResidenceVersion", 0) == 0) { @@ -334,7 +334,8 @@ public void onEnable() { throw e; } -// FileCleanUp.cleanFiles(); + if (Residence.getConfigManager().isUseResidenceFileClean()) + FileCleanUp.cleanFiles(); if (rmanager == null) { rmanager = new ResidenceManager(); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 204efe728..f684a1f4c 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -573,9 +573,9 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; } - res.getPermissions().setOwner("Server Land", false); + res.getPermissions().setOwner("Server_Land", false); player.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "." + ChatColor.YELLOW - + "Server Land" + ChatColor.GREEN)); + + "Server_Land" + ChatColor.GREEN)); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); diff --git a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java index 3232efb24..9959c06ed 100644 --- a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java @@ -16,7 +16,7 @@ public class BOSEAdapter implements EconomyInterface { public BOSEAdapter(BOSEconomy p) { plugin = p; - String serverland = "Server Land"; + String serverland = "Server_Land"; if (!plugin.playerRegistered(serverland, false)) { plugin.registerPlayer(serverland); } diff --git a/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java b/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java index bb80700bc..92092e770 100644 --- a/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java +++ b/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java @@ -1,5 +1,7 @@ package com.bekvon.bukkit.residence.economy; - + +import org.bukkit.OfflinePlayer; + public interface EconomyInterface { public double getBalance(String playerName); public boolean canAfford(String playerName, double amount); diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index 97ad069c5..3f8fa3bcd 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -20,7 +20,7 @@ public class EssentialsEcoAdapter implements EconomyInterface { public EssentialsEcoAdapter(Essentials p) { plugin = p; - String serverland = "Server Land"; + String serverland = "Server_Land"; if (!Economy.playerExists(serverland)) { Economy.createNPC(serverland); } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java b/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java index 72e5f7124..7ec8807e8 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java @@ -5,6 +5,7 @@ package com.bekvon.bukkit.residence.permissions; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; /** diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index cef526329..e6b098da8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -58,7 +58,7 @@ private ClaimedResidence() { } public ClaimedResidence(String creationWorld) { - this("Server Land", creationWorld); + this("Server_Land", creationWorld); } public ClaimedResidence(String creator, String creationWorld) { @@ -345,7 +345,7 @@ public boolean addSubzone(String name, Location loc1, Location loc2) { public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { if (player == null) { - return this.addSubzone(null, "Server Land", loc1, loc2, name, resadmin); + return this.addSubzone(null, "Server_Land", loc1, loc2, name, resadmin); } else { return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index a9d7ed29f..b7324a58d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -122,7 +122,7 @@ public String getNameByRes(ClaimedResidence res) { } public boolean addResidence(String name, Location loc1, Location loc2) { - return this.addResidence(name, "Server Land", loc1, loc2); + return this.addResidence(name, "Server_Land", loc1, loc2); } public boolean addResidence(String name, String owner, Location loc1, Location loc2) { @@ -547,9 +547,14 @@ public static Map> loadMap(String worldName, Map) res.getValue(), null); - if (residence.getPermissions().getOwnerUUID().toString().equals("ffffffff-ffff-ffff-ffff-ffffffffffff")) + if (residence.getPermissions().getOwnerUUID().toString().equals("ffffffff-ffff-ffff-ffff-ffffffffffff") && !residence.getOwner().equalsIgnoreCase( + "Server land") && !residence.getOwner().equalsIgnoreCase("Server_land")) continue; + if (residence.getOwner().equalsIgnoreCase("Server land")){ + residence.getPermissions().setOwner("Server_Land", false); + } + for (ChunkRef chunk : getChunks(residence)) { List ress = new ArrayList<>(); if (retRes.containsKey(chunk)) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 9270b528b..12d0708e7 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -336,7 +336,7 @@ public void applyDefaultFlags() { } public void setOwner(String newOwner, boolean resetFlags) { - if (newOwner.equals("Server Land")) + if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase("Server_Land")) ownerUUID = UUID.fromString("00000000-0000-0000-0000-000000000000");// the UUID for server owned land UUID playerUUID = Residence.getPlayerUUID(newOwner); @@ -355,7 +355,7 @@ public void setOwner(String newOwner, boolean resetFlags) { public String getOwner() { if (ownerUUID.toString().equals("00000000-0000-0000-0000-000000000000")) //check for server land - return "Server Land"; + return "Server_Land"; String name = Residence.getPlayerName(ownerUUID);//try to find the owner's name if (name == null) return ownerLastKnownName;//return last known if we cannot find it @@ -403,7 +403,7 @@ public static ResidencePermissions load(ClaimedResidence res, Map resNameList = Residence.getResidenceManager().getResidenceList(false, false); + int i = 0; + + OfflinePlayer[] offplayer = Bukkit.getOfflinePlayers(); + + HashMap playermap = new HashMap(); + + for (OfflinePlayer one : offplayer) { + playermap.put(one.getUniqueId(), one); + } + + int interval = Residence.getConfigManager().getResidenceFileCleanDays(); + long time = System.currentTimeMillis(); + + for (String oneName : resNameList) { + ClaimedResidence res = Residence.getResidenceManager().getByName(oneName); + if (res == null) + continue; + + if (!playermap.containsKey(res.getOwnerUUID())) + continue; + + OfflinePlayer player = playermap.get(res.getOwnerUUID()); + + if (player == null) + continue; + + if (!Residence.getConfigManager().getCleanWorlds().contains(res.getWorld())) + continue; + + if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase("server_land")) + continue; + + long lastPlayed = player.getLastPlayed(); + int dif = (int) ((time - lastPlayed) / 1000 / 60 / 60 / 24); + if (dif < interval) + continue; + + if (ResidenceVaultAdapter.hasPermission(player, "residence.cleanbypass", res.getWorld())) + continue; + + Residence.getResidenceManager().removeResidence(oneName); + i++; + } + Bukkit.getConsoleSender().sendMessage("[Residence] Auto CleanUp deleted " + i + " residences!"); + } +} diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 4eb3d6ceb..b16228797 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -27,131 +27,136 @@ public class ResidenceVaultAdapter implements EconomyInterface, PermissionsInter public static Chat chat = null; public boolean permissionsOK() { - if (permissions != null && !permissions.getName().equalsIgnoreCase("SuperPerms")) { - return true; - } - return false; + if (permissions != null && !permissions.getName().equalsIgnoreCase("SuperPerms")) { + return true; + } + return false; } public boolean economyOK() { - return economy != null; + return economy != null; } public boolean chatOK() { - return chat != null; + return chat != null; } public ResidenceVaultAdapter(Server s) { - this.setupPermissions(s); - this.setupEconomy(s); - this.setupChat(s); + this.setupPermissions(s); + this.setupEconomy(s); + this.setupChat(s); } private boolean setupPermissions(Server s) { - RegisteredServiceProvider permissionProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); - if (permissionProvider != null) { - permissions = permissionProvider.getProvider(); - } - return (permissions != null); + RegisteredServiceProvider permissionProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); + if (permissionProvider != null) { + permissions = permissionProvider.getProvider(); + } + return (permissions != null); } private boolean setupChat(Server s) { - RegisteredServiceProvider chatProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); - if (chatProvider != null) { - chat = chatProvider.getProvider(); - } - return (chat != null); + RegisteredServiceProvider chatProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); + if (chatProvider != null) { + chat = chatProvider.getProvider(); + } + return (chat != null); } private boolean setupEconomy(Server s) { - RegisteredServiceProvider economyProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); - if (economyProvider != null) { - economy = economyProvider.getProvider(); - } - return (economy != null); + RegisteredServiceProvider economyProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); + if (economyProvider != null) { + economy = economyProvider.getProvider(); + } + return (economy != null); } public String getPlayerGroup(Player player) { - String group = permissions.getPrimaryGroup(player).toLowerCase(); - if (group == null) { - return group; - } else { - return group.toLowerCase(); - } - } - + String group = permissions.getPrimaryGroup(player).toLowerCase(); + if (group == null) { + return group; + } else { + return group.toLowerCase(); + } + } + public String getPlayerGroup(String player, String world) { - @SuppressWarnings("deprecation") + @SuppressWarnings("deprecation") String group = permissions.getPrimaryGroup(world, player); - if (group == null) { - return group; - } else { - return group.toLowerCase(); - } + if (group == null) { + return group; + } else { + return group.toLowerCase(); + } + } + + public static boolean hasPermission(OfflinePlayer player, String perm, String world) { + if (permissions == null) + return true; + return permissions.playerHas(world, player, perm); } @SuppressWarnings("deprecation") @Override public double getBalance(String playerName) { - return economy.getBalance(playerName); + return economy.getBalance(playerName); } @SuppressWarnings("deprecation") @Override public boolean canAfford(String playerName, double amount) { - return economy.has(playerName, amount); + return economy.has(playerName, amount); } @SuppressWarnings("deprecation") @Override public boolean add(String playerName, double amount) { - return economy.depositPlayer(playerName, amount).transactionSuccess(); + return economy.depositPlayer(playerName, amount).transactionSuccess(); } @SuppressWarnings("deprecation") @Override public boolean subtract(String playerName, double amount) { - return economy.withdrawPlayer(playerName, amount).transactionSuccess(); + return economy.withdrawPlayer(playerName, amount).transactionSuccess(); } @SuppressWarnings("deprecation") @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - if (economy.withdrawPlayer(playerFrom, amount).transactionSuccess()) { - if (economy.depositPlayer(playerTo, amount).transactionSuccess()) { - return true; - } else { - economy.depositPlayer(playerFrom, amount); - return false; - } - } else { - return false; - } + if (economy.withdrawPlayer(playerFrom, amount).transactionSuccess()) { + if (economy.depositPlayer(playerTo, amount).transactionSuccess()) { + return true; + } else { + economy.depositPlayer(playerFrom, amount); + return false; + } + } else { + return false; + } } public String getEconomyName() { - if (economy != null) { - return economy.getName(); - } - return ""; + if (economy != null) { + return economy.getName(); + } + return ""; } public String getPermissionsName() { - if (permissions != null) { - return permissions.getName(); - } - return ""; + if (permissions != null) { + return permissions.getName(); + } + return ""; } public String getChatName() { - if (chat != null) { - return chat.getName(); - } - return ""; + if (chat != null) { + return chat.getName(); + } + return ""; } public String getName() { - return "Vault"; + return "Vault"; } - } \ No newline at end of file From 7eed383db5cdb2c2a6e3b43e55927ec33db036c3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 16 Sep 2015 18:35:32 +0300 Subject: [PATCH 0015/1142] Selection vizualizer fix --- .../residence/selection/SelectionManager.java | 13 +++++++++++++ .../selection/WorldEditSelectionManager.java | 12 ------------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 157f422ee..8f392765c 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -10,6 +10,10 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.utils.ActionBar; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldedit.bukkit.selections.CuboidSelection; +import com.sk89q.worldedit.bukkit.selections.Selection; + import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -18,6 +22,7 @@ import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Server; +import org.bukkit.World; import org.bukkit.entity.Player; /** @@ -50,12 +55,20 @@ public SelectionManager(Server server) { public void placeLoc1(Player player, Location loc) { if (loc != null) { playerLoc1.put(player.getName(), loc); + this.afterSelectionUpdate(player); } } public void placeLoc2(Player player, Location loc) { if (loc != null) { playerLoc2.put(player.getName(), loc); + this.afterSelectionUpdate(player); + } + } + + public void afterSelectionUpdate(Player player) { + if (hasPlacedBoth(player.getName())) { + NewMakeBorders(player, getPlayerLoc1(player.getName()), getPlayerLoc2(player.getName()), false); } } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 6cfadb1c3..b6a46d1c5 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -44,28 +44,16 @@ public boolean worldEdit(Player player) { return false; } - private void afterSelectionUpdate(Player player) { - if (hasPlacedBoth(player.getName())) { - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - World world = playerLoc1.get(player.getName()).getWorld(); - Selection selection = new CuboidSelection(world, playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); - wep.setSelection(player, selection); - NewMakeBorders(player, getPlayerLoc1(player.getName()), getPlayerLoc2(player.getName()), false); - } - } - @Override public void placeLoc1(Player player, Location loc) { this.worldEdit(player); super.placeLoc1(player, loc); - this.afterSelectionUpdate(player); } @Override public void placeLoc2(Player player, Location loc) { this.worldEdit(player); super.placeLoc2(player, loc); - this.afterSelectionUpdate(player); } @Override From aac8b079f48ff28588e648377043771d5243814f Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 18 Sep 2015 10:53:46 +0300 Subject: [PATCH 0016/1142] Fix for /res info showing huge numbers --- .../bukkit/residence/ConfigManager.java | 2 +- .../protection/ResidenceManager.java | 4 +- .../protection/WorldFlagManager.java | 5 +- src/plugin.yml | 110 +++++++++--------- 4 files changed, 62 insertions(+), 59 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 6fa43e57d..ae8247118 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -219,7 +219,7 @@ void UpdateConfigFile() { writer.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); autoSaveInt = GetConfigInt("Global.SaveInterval", 10, writer, conf); - writer.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days."); + writer.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.","Players can bypass this wih residence.cleanbypass permission node"); AutoCleanUp = GetConfigBoolean("Global.AutoCleanUp.Use", false, writer, conf); writer.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); AutoCleanUpDays = GetConfigInt("Global.AutoCleanUp.Days", 60, writer, conf); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index b7324a58d..217cc7f0e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -464,9 +464,9 @@ public void printAreaInfo(String areaname, Player player) { if (Residence.getEconomyManager() != null) { PermissionGroup group = Residence.getPermissionManager().getGroup(res.getOwner(), res.getWorld()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TotalWorth", String.valueOf((res.getTotalSize() * group.getCostPerBlock())).replace( + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TotalWorth", String.valueOf((int)((res.getTotalSize() * group.getCostPerBlock())*100)/100.0).replace( ".", ",") + "." + - String.valueOf(res.getTotalSize() * res.getBlockSellPrice()).replace(".", ","))); + String.valueOf((int)((res.getTotalSize() * res.getBlockSellPrice())*100)/100.0).replace(".", ","))); } if (aid != null) { diff --git a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java index 71657d716..f97ebba3d 100644 --- a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java +++ b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java @@ -94,10 +94,13 @@ public final void parsePerms(FileConfiguration config, FileConfiguration groups) continue; if (!groups.contains("Groups." + key + ".Flags.World")) continue; + if (key == null) + continue; Set worldkeys = groups.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false); + if (worldkeys == null) continue; - + Map perms = new HashMap<>(); for (String wkey : worldkeys) { FlagPermissions list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); diff --git a/src/plugin.yml b/src/plugin.yml index 8db4547cb..891639420 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,55 +1,55 @@ -name: Residence -main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.5.0 -website: https://www.spigotmc.org/resources/residence.11480/ -description: Cuboid Residence Plugin -authors: [bekvon,nate302,t00thpick1] -softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds] -contributors: [lemon42,smbarbour,inorixu,Shayana_fr] -commands: - res: - description: Manage Residences - usage: §c/res ? for more info - residence: - description: Manage Residences - usage: §c/residence ? for more info - resadmin: - description: Residence admin functions. - usage: §c/res ? or /resadmin ? for more info - resreload: - description: Reload the entire residence plugin. - usage: §c/resreload - resload: - description: Load the save file again after you have made modifications. - usage: §c/resload - rc: - description: §cChat in current residence channel. - usage: §c/rc to toggle, or /rc - resworld: - description: §cRemoves every residence in a world. - usage: §c/resworld remove [world] - ressignconvert: - description: §cConverts signs from ResidenceSigns plugin. - usage: §c/ressignconvert -permissions: - residence.admin: - description: Gives you access to /resadmin - default: op - residence.admin.tp: - description: Allows to override tp flag - default: op - residence.admin.move: - description: Allows to override move flag - default: op - residence.create: - description: Allows you to create residences - default: op - residence.select: - description: Allows you to select an area to make residences - default: op - residence.versioncheck: - description: Notice to new version after connect - default: op - residence.nofly.bypass: - description: Bypasses nofly flag in residence - default: op +name: Residence +main: com.bekvon.bukkit.residence.ResidenceCommandListener +version: 2.7.6.0 +website: https://www.spigotmc.org/resources/residence.11480/ +description: Cuboid Residence Plugin +authors: [bekvon,nate302,t00thpick1] +softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds] +contributors: [lemon42,smbarbour,inorixu,Shayana_fr] +commands: + res: + description: Manage Residences + usage: §c/res ? for more info + residence: + description: Manage Residences + usage: §c/residence ? for more info + resadmin: + description: Residence admin functions. + usage: §c/res ? or /resadmin ? for more info + resreload: + description: Reload the entire residence plugin. + usage: §c/resreload + resload: + description: Load the save file again after you have made modifications. + usage: §c/resload + rc: + description: §cChat in current residence channel. + usage: §c/rc to toggle, or /rc + resworld: + description: §cRemoves every residence in a world. + usage: §c/resworld remove [world] + ressignconvert: + description: §cConverts signs from ResidenceSigns plugin. + usage: §c/ressignconvert +permissions: + residence.admin: + description: Gives you access to /resadmin + default: op + residence.admin.tp: + description: Allows to override tp flag + default: op + residence.admin.move: + description: Allows to override move flag + default: op + residence.create: + description: Allows you to create residences + default: op + residence.select: + description: Allows you to select an area to make residences + default: op + residence.versioncheck: + description: Notice to new version after connect + default: op + residence.nofly.bypass: + description: Bypasses nofly flag in residence + default: op From 3dd265d4fa68cba76e931e97107ad842cad5544a Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 18 Sep 2015 17:44:18 +0300 Subject: [PATCH 0017/1142] Command flag, flag GUI --- src/GUI/SetFlag.java | 204 + src/com/bekvon/bukkit/residence/Locale.java | 1528 ++++---- .../bekvon/bukkit/residence/Residence.java | 2152 +++++------ .../residence/ResidenceCommandListener.java | 3400 +++++++++-------- .../listeners/ResidencePlayerListener.java | 2158 ++++++----- .../permissions/PermissionManager.java | 4 + .../residence/protection/FlagPermissions.java | 22 +- .../protection/ResidencePermissions.java | 4 +- .../bukkit/residence/utils/Sorting.java | 117 + src/plugin.yml | 2 +- 10 files changed, 5034 insertions(+), 4557 deletions(-) create mode 100644 src/GUI/SetFlag.java create mode 100644 src/com/bekvon/bukkit/residence/utils/Sorting.java diff --git a/src/GUI/SetFlag.java b/src/GUI/SetFlag.java new file mode 100644 index 000000000..a0a960b5a --- /dev/null +++ b/src/GUI/SetFlag.java @@ -0,0 +1,204 @@ +package GUI; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.bekvon.bukkit.residence.NewLanguage; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; +import com.bekvon.bukkit.residence.utils.Sorting; + +import net.md_5.bungee.api.ChatColor; + +public class SetFlag { + + private String residence; + private Player player; + private String targetPlayer = null; + private Inventory inventory; + private LinkedHashMap permMap = new LinkedHashMap(); + private LinkedHashMap> description = new LinkedHashMap>(); + + public SetFlag(String residence, Player player) { + this.residence = residence; + this.player = player; + fillFlagDescriptions(); + } + + public void setTargePlayer(String player) { + this.targetPlayer = player; + } + + public String getResidence() { + return this.residence; + } + + public Player getPlayer() { + return this.player; + } + + public Inventory getInventory() { + return this.inventory; + } + + public void toggleFlag(int slot, ClickType click, InventoryAction action) { + ItemStack item = this.inventory.getItem(slot); + if (item == null) + return; + String command = "true"; + if (click.isLeftClick() && action != InventoryAction.MOVE_TO_OTHER_INVENTORY) + command = "true"; + else if (click.isRightClick()) + command = "false"; + else if (click.isLeftClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTORY) + command = "remove"; + + String flag = ""; + int i = 0; + for (Entry one : permMap.entrySet()) { + flag = one.getKey(); + if (i == slot) { + break; + } + i++; + } + if (targetPlayer == null) + Bukkit.dispatchCommand(player, "res set " + residence + " " + flag + " " + command); + else + Bukkit.dispatchCommand(player, "res pset " + residence + " " + targetPlayer + " " + flag + " " + command); + + } + + public void recalculateInv() { + recalculateInv(Residence.getResidenceManager().getByName(residence)); + } + + private void fillFlagDescriptions() { + List list = NewLanguage.getMessageList("CommandHelp.SubCommands.res.SubCommands.flags.Info"); + for (Entry one : Residence.getPermissionManager().getAllFlags().getFlags().entrySet()) { + for (String onelist : list) { + + String onelisttemp = ChatColor.stripColor(onelist); + + String splited = ""; + if (onelisttemp.contains("-")) { + splited = onelisttemp.split("-")[0]; + if (splited.toLowerCase().contains(one.getKey().toLowerCase())) { + List lore = new ArrayList(); + + int i = 0; + String sentence = ""; + for (String oneWord : onelist.split(" ")) { + sentence += oneWord + " "; + if (i > 4) { + lore.add(ChatColor.YELLOW + sentence); + sentence = ""; + i = 0; + } + i++; + } + lore.add(ChatColor.YELLOW + sentence); + description.put(one.getKey(), lore); + break; + } + } + } + } + } + + public void recalculateInv(ClaimedResidence res) { + + Map globalFlags = Residence.getPermissionManager().getAllFlags().getFlags(); + + Map resFlags = new HashMap(); + + for (Entry one : res.getPermissions().getFlags().entrySet()) { + resFlags.put(one.getKey(), one.getValue()); + } + + if (targetPlayer != null) { + ArrayList PosibleResPFlags = res.getPermissions().getposibleFlags(); + Map temp = new HashMap(); + for (String one : PosibleResPFlags) { + if (globalFlags.containsKey(one)) + temp.put(one, globalFlags.get(one)); + } + globalFlags = temp; + + Map pFlags = res.getPermissions().getPlayerFlags(targetPlayer); + + if (pFlags != null) + for (Entry one : pFlags.entrySet()) { + resFlags.put(one.getKey(), one.getValue()); + } + } + + for (Entry one : globalFlags.entrySet()) { + if (resFlags.containsKey(one.getKey())) + permMap.put(one.getKey(), resFlags.get(one.getKey()) ? 1 : 0); + else + permMap.put(one.getKey(), 2); + } + + String name = targetPlayer == null ? "" : targetPlayer + " "; + + name = name + res.getName() + " flags"; + + if (name.length() > 32) { + name = name.substring(0, Math.min(name.length(), 32)); + } + + Inventory GuiInv = Bukkit.createInventory(null, 54, name); + int i = 0; + + permMap = (LinkedHashMap) Sorting.sortByKeyASC(permMap); + + for (Entry one : permMap.entrySet()) { + @SuppressWarnings("deprecation") + Material Mat = Material.getMaterial(35); + if (Mat == null) + Mat = Material.STONE; + + short meta = 6; + if (one.getValue() == 1) + meta = 13; + else if (one.getValue() == 0) + meta = 14; + + ItemStack MiscInfo = new ItemStack(Mat, 1, (short) meta); + ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); + MiscInfoMeta.setDisplayName(ChatColor.GREEN + one.getKey()); + + List lore = new ArrayList(); + + if (description.containsKey(one.getKey())) + lore.addAll(description.get(one.getKey())); + + lore.addAll(NewLanguage.getMessageList("Language.Gui.Actions")); + + MiscInfoMeta.setLore(lore); + + MiscInfo.setItemMeta(MiscInfoMeta); + GuiInv.setItem(i, MiscInfo); + i++; + if (i > 53) + break; + } + + this.inventory = GuiInv; + } +} diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index b43a67947..cd67cb954 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -1,761 +1,767 @@ -package com.bekvon.bukkit.residence; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.bukkit.ChatColor; -import org.bukkit.configuration.Configuration; -import org.bukkit.configuration.file.YamlConfiguration; - -public class Locale { - public static String GetConfigString(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { - conf.addDefault(path, text); - text = conf.getString(path); - if (colorize) - text = Colors(text); - copySetting(conf, writer, path); - return text; - } - - public static List GetConfigArray(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { - conf.addDefault(path, text); - text = ColorsArray(conf.getStringList(path), colorize); - copySetting(conf, writer, path); - return text; - } - - public static List ColorsArray(List text, Boolean colorize) { - List temp = new ArrayList(); - for (String part : text) { - if (colorize) - part = Colors(part); - temp.add(Colors(part)); - } - return temp; - } - - private synchronized static void copySetting(Configuration reader, Configuration writer, String path) { - writer.set(path, reader.get(path)); - } - - public static String Colors(String text) { - return ChatColor.translateAlternateColorCodes('&', text); - } - - // Language file - public static void LoadLang(String lang) { - - File f = new File(Residence.instance.getDataFolder(), "Language" + File.separator + lang + ".yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); - - StringBuilder header = new StringBuilder(); - header.append("NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy"); - header.append(System.getProperty("line.separator")); - header.append("of this file and modify that instead. This file will be updated automatically by Residence"); - header.append(System.getProperty("line.separator")); - header.append("when a newer version is detected, and your changes will be overwritten. Once you "); - header.append(System.getProperty("line.separator")); - header.append("have a copy of this file, change the Language: option under the Residence config.yml"); - header.append(System.getProperty("line.separator")); - header.append("to whatever you named your copy."); - header.append(System.getProperty("line.separator")); - conf.options().copyDefaults(true); - - writer.options().header(header.toString()); - - writer.addComment("Language.NewPlayerInfo", "The below lines represent various messages residence sends to the players.", - "Note that some messages have variables such as %1 that are inserted at runtime."); - - GetConfigArray("Language.NewPlayerInfo", Arrays.asList("&e******************************************************", - "Please use wooden axe to select opposite sides of your home and execute command &2/res create yourHouseName", - "&e******************************************************"), writer, conf, true); - - GetConfigString("Language.NewPlayerInfo", "&ePlease use wooden axe to select opposite sides of your home and execute command &2/res create your name", writer, - conf, true); - GetConfigString("Language.InvalidResidence", "Invalid Residence...", writer, conf, true); - GetConfigString("Language.InvalidSubzone", "Invalid Subzone...", writer, conf, true); - GetConfigString("Language.InvalidDirection", "Invalid Direction...", writer, conf, true); - GetConfigString("Language.InvalidChannel", "Invalid Channel...", writer, conf, true); - GetConfigString("Language.InvalidAmount", "Invalid Amount...", writer, conf, true); - GetConfigString("Language.InvalidCost", "Invalid Cost...", writer, conf, true); - GetConfigString("Language.InvalidDays", "Invalid number of days...", writer, conf, true); - GetConfigString("Language.InvalidMaterial", "Invalid Material...", writer, conf, true); - GetConfigString("Language.InvalidBoolean", "Invalid value, must be true(t) or false(f)", writer, conf, true); - GetConfigString("Language.InvalidArea", "Invalid Area...", writer, conf, true); - GetConfigString("Language.InvalidGroup", "Invalid Group...", writer, conf, true); - writer.addComment("Language.CantPlaceLava", "Replace all text with '' to disable this message"); - GetConfigString("Language.CantPlaceLava", "You can't place lava outside residence and higher than %1 block level", writer, conf, true); - writer.addComment("Language.CantPlaceWater", "Replace all text with '' to disable this message"); - GetConfigString("Language.CantPlaceWater", "You can't place Water outside residence and higher than %1 block level", writer, conf, true); - GetConfigString("Language.InvalidMessageType", "Message type must be enter or remove.", writer, conf, true); - // GetConfigString("Language.InvalidList", "Invalid List...", writer, - // conf, true); - GetConfigString("Language.InvalidFlag", "Invalid Flag...", writer, conf, true); - GetConfigString("Language.InvalidFlagState", "Invalid flag state, must be true(t), false(f), or remove(r)", writer, conf, true); - GetConfigString("Language.AreaExists", "Area name already exists.", writer, conf, true); - GetConfigString("Language.AreaCreate", "Residence Area created, ID %1", writer, conf, true); - GetConfigString("Language.AreaDiffWorld", "Area is in a different world from residence.", writer, conf, true); - GetConfigString("Language.AreaCollision", "Area collides with residence %1", writer, conf, true); - GetConfigString("Language.AreaSubzoneCollision", "Area collides with subzone %1", writer, conf, true); - GetConfigString("Language.AreaNonExist", "No such area exists.", writer, conf, true); - GetConfigString("Language.AreaInvalidName", "Invalid Area Name...", writer, conf, true); - GetConfigString("Language.AreaToSmallTotal", "Selected area smaller than allowed minimal (%1)", writer, conf, true); - GetConfigString("Language.AreaToSmallX", "Your x selection length is too small. %1 allowed %2", writer, conf, true); - GetConfigString("Language.AreaToSmallY", "Your selection height is too small. %1 allowed %2", writer, conf, true); - GetConfigString("Language.AreaToSmallZ", "Your z selection length is too small. %1 allowed %2", writer, conf, true); - GetConfigString("Language.AreaRename", "Renamed area %1 to %2", writer, conf, true); - GetConfigString("Language.AreaRemove", "Removed area %1...", writer, conf, true); - GetConfigString("Language.AreaRemoveLast", "Cannot remove the last area in a residence.", writer, conf, true); - GetConfigString("Language.AreaNotWithinParent", "Area is not within parent area.", writer, conf, true); - GetConfigString("Language.AreaUpdate", "Area Updated...", writer, conf, true); - GetConfigString("Language.AreaMaxPhysical", "You've reached the max physical areas allowed for your residence.", writer, conf, true); - GetConfigString("Language.AreaSizeLimit", "Area size is not within your allowed limits.", writer, conf, true); - GetConfigString("Language.AreaHighLimit", "You cannot protect this high up, your limit is %1", writer, conf, true); - GetConfigString("Language.AreaLowLimit", "You cannot protect this deep, your limit is %1", writer, conf, true); - GetConfigString("Language.NotInResidence", "You are not in a Residence.", writer, conf, true); - GetConfigString("Language.Kicked", "You were kicked from residence", writer, conf, true); - GetConfigString("Language.InResidence", "You are standing in Residence %1", writer, conf, true); - GetConfigString("Language.ResidenceOwnerChange", "Residence %1 owner changed to %2", writer, conf, true); - GetConfigString("Language.NonAdmin", "You are not a Residence admin.", writer, conf, true); - GetConfigString("Language.AdminOnly", "Only admins have access to this command.", writer, conf, true); - GetConfigString("Language.ChatDisabled", "Residence Chat Disabled...", writer, conf, true); - GetConfigString("Language.SubzoneRename", "Renamed subzone %1 to %2", writer, conf, true); - GetConfigString("Language.SubzoneRemove", "Subzone %1 removed.", writer, conf, true); - GetConfigString("Language.SubzoneCreate", "Created Subzone %1", writer, conf, true); - GetConfigString("Language.SubzoneCreateFail", "Unable to create subzone %1", writer, conf, true); - GetConfigString("Language.SubzoneExists", "Subzone %1 already exists.", writer, conf, true); - GetConfigString("Language.SubzoneCollide", "Subzone collides with subzone %1", writer, conf, true); - GetConfigString("Language.SubzoneMaxDepth", "You have reached the maximum allowed subzone depth.", writer, conf, true); - GetConfigString("Language.SubzoneSelectInside", "Both selection points must be inside the residence.", writer, conf, true); - GetConfigString("Language.SelectPoints", "Select two points first before using this command!", writer, conf, true); - GetConfigString("Language.SelectOverlap", "&cSelected points overlap with &e%1 &cregion!", writer, conf, true); - GetConfigString("Language.SelectionSuccess", "Selection Successful!", writer, conf, true); - GetConfigString("Language.SelectionFail", "Invalid select command...", writer, conf, true); - GetConfigString("Language.SelectionBedrock", "Selection expanded to your lowest allowed limit.", writer, conf, true); - GetConfigString("Language.SelectionSky", "Selection expanded to your highest allowed limit.", writer, conf, true); - GetConfigString("Language.SelectionArea", "Selected area %1 of residence %2", writer, conf, true); - GetConfigString("Language.SelectDiabled", "You don't have access to selections commands.", writer, conf, true); - GetConfigString("Language.NoPermission", "You dont have permission for this.", writer, conf, true); - GetConfigString("Language.OwnerNoPermission", "The owner does not have permission for this.", writer, conf, true); - GetConfigString("Language.ParentNoPermission", "You don't have permission to make changes to the parent zone.", writer, conf, true); - GetConfigString("Language.MessageChange", "Message Set...", writer, conf, true); - GetConfigString("Language.FlagSet", "&e%1 &2flag set for &e%2 &2to &e%3 &2state", writer, conf, true); - GetConfigString("Language.FlagCheckTrue", "Flag %1 applys to player %2 for residence %3, value = %4", writer, conf, true); - GetConfigString("Language.FlagCheckFalse", "Flag %1 does not apply to player %2 for residence.", writer, conf, true); - GetConfigString("Language.FlagsCleared", "Flags Cleared.", writer, conf, true); - GetConfigString("Language.FlagsDefault", "Flags set to default.", writer, conf, true); - GetConfigString("Language.Usage", "Command Usage", writer, conf, true); - GetConfigString("Language.InvalidHelp", "Invalid Help Page...", writer, conf, true); - GetConfigString("Language.SubCommands", "Sub Commands", writer, conf, true); - GetConfigString("Language.InvalidList", "Unknown list type, must be blacklist or ignorelist.", writer, conf, true); - GetConfigString("Language.MaterialGet", "The material name for ID %1 is %2", writer, conf, true); - GetConfigString("Language.MarketDisabled", "Economy Disabled!", writer, conf, true); - GetConfigString("Language.MarketList", "Market List", writer, conf, true); - - GetConfigString("Language.SignTopLine", "[market]", writer, conf, true); - GetConfigString("Language.SignDateFormat", "YY/MM/dd HH:mm", writer, conf, true); - - GetConfigString("Language.SignForRentTopLine", "&8For Rent", writer, conf, true); - GetConfigString("Language.SignForRentPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); - GetConfigString("Language.SignForRentResName", "&8%1", writer, conf, true); - GetConfigString("Language.SignForRentBottomLine", "&9Available", writer, conf, true); - - GetConfigString("Language.SignRentedAutorenewTrue", "&2", writer, conf, true); - GetConfigString("Language.SignRentedAutorenewFalse", "&c", writer, conf, true); - - GetConfigString("Language.SignRentedTopLine", "%1", writer, conf, true); - GetConfigString("Language.SignRentedPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); - GetConfigString("Language.SignRentedResName", "&8%1", writer, conf, true); - GetConfigString("Language.SignRentedBottomLine", "&1%1", writer, conf, true); - - GetConfigString("Language.SignForSaleTopLine", "&8For Sale", writer, conf, true); - GetConfigString("Language.SignForSalePriceLine", "&8%1", writer, conf, true); - GetConfigString("Language.SignForSaleResName", "&8%1", writer, conf, true); - GetConfigString("Language.SignForSaleBottomLine", "&5Available", writer, conf, true); - - GetConfigString("Language.SelectionTool", "Selection Tool", writer, conf, true); - GetConfigString("Language.InfoTool", "Info Tool", writer, conf, true); - GetConfigString("Language.NoBankAccess", "You dont have bank access.", writer, conf, true); - GetConfigString("Language.NotEnoughMoney", "You dont have enough money.", writer, conf, true); - GetConfigString("Language.BankNoMoney", "Not enough money in the bank.", writer, conf, true); - GetConfigString("Language.BankDeposit", "You deposit %1 into the residence bank.", writer, conf, true); - GetConfigString("Language.BankWithdraw", "You withdraw %1 from the residence bank.", writer, conf, true); - GetConfigString("Language.MoneyCharged", "Charged %1 to your %2 account.", writer, conf, true); - GetConfigString("Language.MoneyAdded", "Got %1 to your %2 account.", writer, conf, true); - GetConfigString("Language.MoneyCredit", "Credited %1 to your %2 account.", writer, conf, true); - // GetConfigString("Language.RentDisabled", "Rent system is disabled.", - // writer, conf, true); - GetConfigString("Language.RentReleaseInvalid", "Residence %1 is not rented or for rent.", writer, conf, true); - GetConfigString("Language.RentSellFail", "Cannot sell a Residence if it is for rent.", writer, conf, true); - GetConfigString("Language.SellRentFail", "Cannot rent a Residence if it is for sale.", writer, conf, true); - GetConfigString("Language.OwnerBuyFail", "Cannot buy your own land!", writer, conf, true); - GetConfigString("Language.OwnerRentFail", "Cannot rent your own land!", writer, conf, true); - GetConfigString("Language.AlreadySellFail", "Residence already for sale!", writer, conf, true); - GetConfigString("Language.ResidenceBought", "You bought residence %1", writer, conf, true); - GetConfigString("Language.ResidenceBuy", "Residence %1 has bought residence %2 from you.", writer, conf, true); - GetConfigString("Language.ResidenceBuyTooBig", "This residence has areas bigger then your allowed max.", writer, conf, true); - GetConfigString("Language.ResidenceNotForSale", "Residence is not for sale.", writer, conf, true); - GetConfigString("Language.ResidenceForSale", "Residence %1 is now for sale for %2", writer, conf, true); - GetConfigString("Language.ResidenceStopSelling", "Residence is no longer for sale.", writer, conf, true); - GetConfigString("Language.ResidenceTooMany", "You already own the max number of residences your allowed to.", writer, conf, true); - GetConfigString("Language.ResidenceMaxRent", "You already are renting the maximum number of residences your allowed to.", writer, conf, true); - GetConfigString("Language.ResidenceAlreadyRent", "Residence is already for rent...", writer, conf, true); - GetConfigString("Language.ResidenceNotForRent", "Residence not for rent...", writer, conf, true); - GetConfigString("Language.ResidenceNotRented", "Residence not rented.", writer, conf, true); - GetConfigString("Language.ResidenceUnrent", "Residence %1 has been unrented.", writer, conf, true); - GetConfigString("Language.ResidenceRemoveRentable", "Residence %1 is no longer rentable.", writer, conf, true); - GetConfigString("Language.ResidenceForRentSuccess", "Residence %1 is now for rent for %2 every %3 days.", writer, conf, true); - GetConfigString("Language.ResidenceRentSuccess", "You have rented Residence %1 for %2 days.", writer, conf, true); - GetConfigString("Language.ResidenceAlreadyRented", "Residence %1 has currently been rented to %2", writer, conf, true); - GetConfigString("Language.ResidenceAlreadyExists", "A residence named %1 already exists.", writer, conf, true); - GetConfigString("Language.ResidenceCreate", "You have created residence %1!", writer, conf, true); - GetConfigString("Language.ResidenceRename", "Renamed Residence %1 to %2", writer, conf, true); - GetConfigString("Language.ResidenceRemove", "Residence %1 has been removed...", writer, conf, true); - GetConfigString("Language.RentDisabled", "Rent is disabled...", writer, conf, true); - GetConfigString("Language.RentDisableRenew", "Residence %1 will now no longer re-rent upon expire.", writer, conf, true); - GetConfigString("Language.RentEnableRenew", "Residence %1 will now automatically re-rent upon expire.", writer, conf, true); - GetConfigString("Language.RentableDisableRenew", "%1 will no longer renew rentable status upon expire.", writer, conf, true); - GetConfigString("Language.RentableEnableRenew", "%1 will now automatically renew rentable status upon expire.", writer, conf, true); - GetConfigString("Language.LandForSale", "Land For Sale", writer, conf, true); - GetConfigString("Language.SellAmount", "Sell Amount", writer, conf, true); - GetConfigString("Language.LeaseExpire", "Lease Expire Time", writer, conf, true); - GetConfigString("Language.RentExpire", "Rent Expire Time", writer, conf, true); - GetConfigString("Language.RentableAutoRenew", "Rentable Auto Renew", writer, conf, true); - GetConfigString("Language.RentAutoRenew", "Rent Auto Renew", writer, conf, true); - GetConfigString("Language.RentableLand", "Rentable Land", writer, conf, true); - GetConfigString("Language.ListMaterialAdd", "%1 added to the residence %2", writer, conf, true); - GetConfigString("Language.ListMaterialRemove", "%1 removed from the residence %2", writer, conf, true); - GetConfigString("Language.ItemBlacklisted", "You are blacklisted from using this item here.", writer, conf, true); - GetConfigString("Language.RentedModifyDeny", "Cannot modify a rented residence.", writer, conf, true); - GetConfigString("Language.WorldPVPDisabled", "World PVP is disabled.", writer, conf, true); - GetConfigString("Language.NoPVPZone", "No PVP zone.", writer, conf, true); - GetConfigString("Language.FlagDeny", "You dont have %1 permission here.", writer, conf, true); - GetConfigString("Language.FlagSetDeny", "Owner does not have access to flag %1", writer, conf, true); - GetConfigString("Language.SelectPoint", "Placed %1 Selection Point", writer, conf, true); - GetConfigString("Language.ResidenceChat", "Residence chat toggled %1", writer, conf, true); - GetConfigString("Language.ResidenceMoveDeny", "You dont have movement permission for Residence %1", writer, conf, true); - GetConfigString("Language.ResidenceFlagDeny", "You dont have %1 permission for Residence %2", writer, conf, true); - GetConfigString("Language.TeleportDeny", "You dont have teleport access.", writer, conf, true); - GetConfigString("Language.TeleportSuccess", "Teleported!", writer, conf, true); - GetConfigString("Language.TeleportConfirm", - "&eThis teleport is not safe, you will fall for &c%1 &eblocks. Use &2/res tpconfirm &eto perform teleportation anyways.", writer, conf, true); - GetConfigString("Language.TeleportStarted", - "&eTeleportation to %1 started, don't move for next %2 sec.", writer, conf, true); - GetConfigString("Language.TeleportCanceled", - "&eTeleportation canceled!", writer, conf, true); - GetConfigString("Language.NoTeleportConfirm", "There is no teleports waiting for confirmation!", writer, conf, true); - GetConfigString("Language.TeleportNear", "Teleported to near residence.", writer, conf, true); - GetConfigString("Language.TeleportNoFlag", "You dont have teleport access for that residence.", writer, conf, true); - GetConfigString("Language.SetTeleportLocation", "Teleport Location Set...", writer, conf, true); - GetConfigString("Language.HelpPageHeader", "Help Pages - %1 - Page <%2 of %3>", writer, conf, true); - GetConfigString("Language.ListExists", "List already exists...", writer, conf, true); - GetConfigString("Language.ListRemoved", "List removed...", writer, conf, true); - GetConfigString("Language.ListCreate", "Created list %1", writer, conf, true); - GetConfigString("Language.LeaseRenew", "Lease valid until %1", writer, conf, true); - GetConfigString("Language.LeaseRenewMax", "Lease renewed to maximum allowed", writer, conf, true); - GetConfigString("Language.LeaseNotExpire", "No such lease, or lease does not expire.", writer, conf, true); - GetConfigString("Language.LeaseRenewalCost", "Renewal cost for area %1 is %2", writer, conf, true); - GetConfigString("Language.LeaseInfinite", "Lease time set to infinite...", writer, conf, true); - GetConfigString("Language.PermissionsApply", "Permissions applied to residence.", writer, conf, true); - GetConfigString("Language.PhysicalAreas", "Physical Areas", writer, conf, true); - GetConfigString("Language.CurrentArea", "Current Area", writer, conf, true); - GetConfigString("Language.TotalWorth", "Total worth of residence:&3 %1 (%2)", writer, conf, true); - GetConfigString("Language.LeaseExpire", "Lease Expiration", writer, conf, true); - GetConfigString("Language.NotOnline", "Target player must be online.", writer, conf, true); - GetConfigString("Language.ResidenceGiveLimits", "Cannot give residence to target player, because it is outside the target players limits.", writer, conf, true); - GetConfigString("Language.ResidenceGive", "You give residence %1 to player %2", writer, conf, true); - GetConfigString("Language.ResidenceRecieve", "You have recieved residence %1 from player %2", writer, conf, true); - // GetConfigString("Language.#ResidenceListAll", "Residences - - removed, use GenericPage now", writer, conf, true); - GetConfigString("Language.ResidenceListAllEmpty", "No Residences exists on the server...", writer, conf, true); - GetConfigString("Language.InvalidPage", "Invalid Page...", writer, conf, true); - GetConfigString("Language.NextPage", "Next Page", writer, conf, true); - GetConfigString("Language.NextInfoPage", "&2| &eNext Page &2>>>", writer, conf, true); - GetConfigString("Language.PrevInfoPage", "&2<<< &ePrev Page &2|", writer, conf, true); - GetConfigString("Language.RemovePlayersResidences", "Removed all residences belonging to player %1", writer, conf, true); - GetConfigString("Language.GenericPage", "Page %1 of %2", writer, conf, true); - GetConfigString("Language.ResidenceRentedBy", "Rented by %1", writer, conf, true); - GetConfigString("Language.InvalidCharacters", "Invalid characters detected...", writer, conf, true); - GetConfigString("Language.InvalidNameCharacters", "Name contained unallowed characters...", writer, conf, true); - GetConfigString("Language.DeleteConfirm", "Are you sure you want to delete residence %1, use /res confirm to confirm.", writer, conf, true); - GetConfigString("Language.SelectTooHigh", "Warning, selection went above top of map, limiting.", writer, conf, true); - GetConfigString("Language.SelectTooLow", "Warning, selection went below bottom of map, limiting.", writer, conf, true); - GetConfigString("Language.WorldEditNotFound", "WorldEdit was not detected.", writer, conf, true); - GetConfigString("Language.NoResHere", "There is no residence in there.", writer, conf, true); - GetConfigString("Language.DeleteSubzoneConfirm", "Are you sure you want to delete subzone %1, use /res confirm to confirm.", writer, conf, true); - GetConfigString("Language.SubzoneOwnerChange", "Subzone %1 owner changed to %2", writer, conf, true); - GetConfigString("Language.CoordsTop", "X:%1 Y:%2 Z:%3", writer, conf, true); - GetConfigString("Language.CoordsBottom", "X:%1 Y:%2 Z:%3", writer, conf, true); - GetConfigString("Language.AdminToggle", "Automatic resadmin toggle turned %1", writer, conf, true); - GetConfigString("Language.NoSpawn", "You do not have move permissions at your spawn point. Relocating", writer, conf, true); - GetConfigString("Language.CompassTargetReset", "Your compass has been reset", writer, conf, true); - GetConfigString("Language.CompassTargetSet", "Your compass now points to %1", writer, conf, true); - writer.addComment("Language.Description", "The below lines are mostly a word bank for various uses."); - GetConfigString("Language.Description", "Description", writer, conf, true); - GetConfigString("Language.Land", "Land", writer, conf, true); - GetConfigString("Language.Cost", "Cost", writer, conf, true); - GetConfigString("Language.Selection", "Selection", writer, conf, true); - GetConfigString("Language.Total", "Total", writer, conf, true); - GetConfigString("Language.Size", "Size", writer, conf, true); - GetConfigString("Language.Expanding", "Expanding", writer, conf, true); - GetConfigString("Language.Contracting", "Contracting", writer, conf, true); - GetConfigString("Language.North", "North", writer, conf, true); - GetConfigString("Language.West", "West", writer, conf, true); - GetConfigString("Language.South", "South", writer, conf, true); - GetConfigString("Language.East", "East", writer, conf, true); - GetConfigString("Language.Shifting", "Shifting", writer, conf, true); - GetConfigString("Language.Up", "Up", writer, conf, true); - GetConfigString("Language.Down", "Down", writer, conf, true); - GetConfigString("Language.Error", "Error", writer, conf, true); - GetConfigString("Language.Flags", "Flags", writer, conf, true); - GetConfigString("Language.Your", "Your", writer, conf, true); - GetConfigString("Language.Group", "Group", writer, conf, true); - GetConfigString("Language.Others", "Others", writer, conf, true); - GetConfigString("Language.Primary", "Primary", writer, conf, true); - GetConfigString("Language.Secondary", "Secondary", writer, conf, true); - GetConfigString("Language.Selection", "Selection", writer, conf, true); - GetConfigString("Language.Moved", "Moved", writer, conf, true); - GetConfigString("Language.Status", "Status", writer, conf, true); - GetConfigString("Language.Available", "Available", writer, conf, true); - GetConfigString("Language.On", "On", writer, conf, true); - GetConfigString("Language.Off", "Off", writer, conf, true); - GetConfigString("Language.Name", "Name", writer, conf, true); - GetConfigString("Language.Lists", "Lists", writer, conf, true); - GetConfigString("Language.Residences", "Residences", writer, conf, true); - GetConfigString("Language.Residence", "Residence", writer, conf, true); - GetConfigString("Language.Count", "Count", writer, conf, true); - GetConfigString("Language.Owner", "Owner", writer, conf, true); - GetConfigString("Language.World", "World", writer, conf, true); - GetConfigString("Language.Subzones", "Subzones", writer, conf, true); - GetConfigString("Language.CoordsT", "Top Coords", writer, conf, true); - GetConfigString("Language.CoordsB", "Bottom Coords", writer, conf, true); - GetConfigString("Language.TurnOn", "on", writer, conf, true); - GetConfigString("Language.TurnOff", "off", writer, conf, true); - GetConfigString("Language.LimitsTop", "----------------------------------------", writer, conf, true); - GetConfigString("Language.LimitsPGroup", "&7- &ePermissions Group:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsRGroup", "&7- &eResidence Group:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsAdmin", "&7- &eResidence Admin:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsCanCreate", "&7- &eCan Create Residences:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMaxRes", "&7- &eMax Residences:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMaxEW", "&7- &eMax East/West Size:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMaxNS", "&7- &eMax North/South Size:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMaxUD", "&7- &eMax Up/Down Size:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMinMax", "&7- &eMin/Max Protection Height:&3 %1 to %2", writer, conf, true); - GetConfigString("Language.LimitsMaxSub", "&7- &eMax Subzone Depth:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsEnterLeave", "&7- &eCan Set Enter/Leave Messages:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsNumberOwn", "&7- &eNumber of Residences you own:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsCost", "&7- &eResidence Cost Per Block:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsSell", "&7- &eResidence Sell Cost Per Block:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsFlag", "&7- &eFlag Permissions:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMaxDays", "&7- &eMax Lease Days:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsLeaseTime", "&7- &eLease Time Given on Renew:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsRenewCost", "&7- &eRenew Cost Per Block:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsBottom", "----------------------------------------", writer, conf, true); - - writer.addComment("CommandHelp", ""); - - GetConfigString("CommandHelp.Description", "Contains Help for Residence", writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.Description", "Main Residence Command", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.Info", Arrays.asList("See the residence wiki for more help.", "Wiki: https://github.com/bekvon/Residence/wiki", - "Use /res [command] ? to view more help information."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.Description", "Selection Commands", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.Info", - Arrays.asList("This command selects areas for usage with residence.", "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Description", "Display selected coordinates", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Info", Arrays.asList("Usage: /res select coords"), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Description", "Display selected size", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Info", Arrays.asList("Usage: /res select size"), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Description", "Display selection cost", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Info", Arrays.asList("Usage: /res select cost"), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Description", "Expand Selection Vertically", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Info", - Arrays.asList("Usage: /res select vert", "Will expand selection as high and as low as allowed."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Description", "Expand Selection to Sky", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Info", Arrays.asList("Usage: /res select sky", - "Expands as high as your allowed to go."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Description", "Expand Selection to Bedrock", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Info", - Arrays.asList("Usage: /res select bedrock", "Expands as low as your allowed to go."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Description", "Expand selection in a direction.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Info", - Arrays.asList("Usage: /res select expand ", "Expands in the direction your looking."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Description", "Shift selection in a direction", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Info", - Arrays.asList("Usage: /res select shift ", "Pushes your selection by in the direction your looking."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Description", "Select the chunk your currently in.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Info", - Arrays.asList("Usage: /res select chunk", "Selects the chunk your currently standing in."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Description", "Select a existing area in a residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Info", - Arrays.asList("Usage /res select ", "Selects a existing area in a residence."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Description", "Set selection using the current WorldEdit selection.", - writer, conf, - true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Info", - Arrays.asList("Usage /res select worldedit", "Sets selection area using the current WorldEdit selection."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.create.Description", "Create Residences", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.create.Info", Arrays.asList("Usage: /res create "), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.remove.Description", "Remove residences.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("Usage: /res remove "), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("Usage: /res removeall [owner]", - "Removes all residences owned by a specific player.'", - "Requires /resadmin if you use it on anyone besides yourself."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.confirm.info", Arrays.asList("Usage: /res confirm", "Confirms removal of a residence."), writer, conf, - true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.subzone.Description", "Create subzones in residences.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.subzone.Info", - Arrays.asList("Usage: /res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.Description", "Manage physical areas for a residence.", writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Description", "List physical areas in a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Info", - Arrays.asList("Usage: /res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Description", "List coordinates and other info for areas", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("Usage: /res area listall [residence] "), writer, - conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Description", "Add physical areas to a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Info", - Arrays.asList("Usage: /res area add [residence] [areaID]", "You must first select two points first."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Description", "Remove physical areas from a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("Usage: /res area remove [residence] [areaID]"), writer, - conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Description", "Replace physical areas in a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("Usage: /res area replace [residence] [areaID]", - "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.info.info", - Arrays.asList("Usage: /res info ", "Leave off to display info for the residence your currently in."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.limits.info", - Arrays.asList("Usage: /res limits", "Shows the limitations you have on creating and managing residences."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages", writer, conf, true); - GetConfigArray( - "CommandHelp.SubCommands.res.SubCommands.message.info", Arrays.asList("Usage: /res message [enter/leave] [message]", - "Set the enter or leave message of a residence.", "Usage: /res message remove [enter/leave]", "Removes a enter or leave message."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.Description", "Manage residence leases", writer, conf, true); - GetConfigArray( - "CommandHelp.SubCommands.res.SubCommands.lease.info", Arrays.asList("Usage: /res lease [renew/cost] [residence]", - "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money."), - writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time (admin only)", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", - Arrays.asList("Usage: /resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite."), writer, conf, - true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.bank.Info", - Arrays.asList("Usage: /res bank [deposit/withdraw] [amount]", "You must be standing in a Residence", "You must have the +bank flag."), writer, conf, - true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.tp.Description", "Teleport to a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tp.Info", - Arrays.asList("Usage: /res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", - "Your permission group must also be allowed to teleport by the server admin."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning and teleport anyways", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", - Arrays.asList("Usage: /res tpconfirm", "Teleports you to a residence, when teleportation is unsafe."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpset.Description", "Set the teleport location of a Residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpset.Info", - Arrays.asList("Usage: /res tpset", "This will set the teleport location for a residence to where your standing.", - "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.set.Description", "Set general flags on a Residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.set.Info", Arrays.asList("Usage: /res set [flag] [true/false/remove]", - "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)"), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.pset.Description", "Set flags on a specific player for a Residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.pset.Info", Arrays.asList("Usage: /res pset [player] [flag] [true/false/remove]", - "Usage: /res pset [player] removeall", "To see a list of flags, use /res flags ?"), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.gset.Description", "Set flags on a specific group for a Residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.gset.Info", - Arrays.asList("Usage: /res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?"), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lset.Description", "Change blacklist and ignorelist options", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lset.Info", - Arrays.asList("Usage: /res lset [blacklist/ignorelist] [material]", - "Usage: /res lset info", - "Blacklisting a material prevents it from being placed in the residence.", - "Ignorelist causes a specific material to not be protected by Residence."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.flags.Description", "List of flags", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.flags.Info", - Arrays.asList("For flag values, usually true allows the action, and false denys the action.", - "&2build &3- &eallows or denys building", - "&2use &3- &eallows or denys use of doors, lever, buttons, etc...", - "&2move &3- &eallows or denys movement in the residence.", - "&2container &3- &eallows or denys use of furnaces, chests, dispensers, etc...", - "&2trusted &3- &eGives build, use, move, container and tp flags", - "&2place &3- &eallows or denys only placement of blocks, overrides the build flag.", - "&2destroy &3- &eallows or denys only destruction of blocks, overrides the build flag.", - "&2pvp &3- &eallow or deny pvp in the residence", - "&2tp &3- &eallow or disallow teleporting to the residence.", - "&2admin &3- &egives a player permission to change flags on a residence.", - "&2subzone &3- &eallow a player to make subzones in the residence.", - "&2monsters &3- &eallows or denys monster spawns", - "&2animals &3- &eallows or denys animal spawns.", - "&2animalkilling &3- &eallows or denys animal killing.", - "&2mobkilling &3- &eallows or denys mob killing.", - "&2nofly &3- &eallows or denys fly in residence.", - "&2vehicledestroy &3- &eallows or denys vehicle destroy.", - "&2shear &3- &eallows or denys sheep shear.", - "&2leash &3- &eallows or denys aninal leash.", - "&2healing &3- &esetting to true makes the residence heal its occupants", - "&2tnt &3- &eallow or deny tnt explosions", - "&2creeper &3- &eallow or deny creeper explosions", - "&2ignite &3- &eallows or denys fire ignition.", - "&2firespread &3- &eallows or denys fire spread.", - "&2bucket &3- &eallow or deny bucket use.", - "&2flow &3- &eallows or denys liquid flow.", - "&2lavaflow &3- &eallows or denys lava flow, overrides flow", - "&2waterflow &3- &eallows or denys water flow, overrides flow", - "&2damage &3- &eallows or denys all entity damage within the residence.", - "&2piston &3- &eallow or deny pistons from pushing or pulling blocks in the residence.", - "&2hidden &3- &ehides residence from list or listall commands.", - "&2cake &3- &eallows or denys players to eat cake", - "&2lever &3- &eallows or denys players to use levers", - "&2button &3- &eallows or denys players to use buttons", - "&2diode &3- &eallows or denys players to use redstone repeaters", - "&2door &3- &eallows or denys players to use doors and trapdoors", - "&2table &3- &eallows or denys players to use workbenches", - "&2enchant &3- &eallows or denys players to use enchanting tables", - "&2brew &3- &eallows or denys players to use brewing stands", - "&2bed &3- &eallows or denys players to use beds", - "&2button &3- &eallows or denys players to use buttons", - "&2pressure &3- &eallows or denys players to use pressure plates", - "&2note &3- &eallows or denys players to use note blocks", - "&2redstone &3- &eGives lever, diode, button, pressure, note flags", - "&2craft &3- &eGives table, enchant, brew flags", - "&2burn &3- &eallows or denys Mob combustion in residences"), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.list.Description", "List Residences", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.list.Info", - Arrays.asList("Usage: /res list ", - "Lists all the residences a player owns (except hidden ones).", - "If listing your own residences, shows hidden ones as well.", - "To list everyones residences, use /res listall."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.listhidden.Description", "List Hidden Residences (ADMIN ONLY)", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listhidden.Info", - Arrays.asList("Usage: /res listhidden ", - "Lists hidden residences for a player."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.listall.Description", "List All Residences", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listall.Info", - Arrays.asList("Usage: /res listall ", - "Lists hidden residences for a player."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.listallhidden.Description", "List All Hidden Residences (ADMIN ONLY)", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listallhidden.Info", - Arrays.asList("Usage: /res listhidden ", - "Lists all hidden residences on the server."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.sublist.Description", "List Residence Subzones", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.sublist.Info", - Arrays.asList("Usage: /res sublist ", - "List subzones within a residence."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.default.Description", "Reset residence to default flags.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.default.Info", - Arrays.asList("Usage: /res default ", - "Resets the flags on a residence to their default. You must be the owner or an admin to do this."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.rename.Description", "Renames a residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.rename.Info", - Arrays.asList("Usage: /res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", - "The name must not already be taken by another residence."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.mirror.Description", "Mirrors Flags", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.mirror.Info", - Arrays.asList("Usage: /res mirror [Source Residence] [Target Residence]", - "Mirrors flags from one residence to another. You must be owner of both or a admin to do this."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.Description", "Buy, Sell, or Rent Residences", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.mirror.Info", - Arrays.asList("Usage: /res market ? for more info"), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.info.Description", "Get economy info on residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.info.Info", - Arrays.asList("Usage: /res market info [residence]", "Shows if the Residence is for sale or for rent, and the cost."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Description", "Lists rentable and for sale residences.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Info", - Arrays.asList("Usage: /res market list"), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Description", "Sell a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Info", - Arrays.asList("Usage: /res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", - "Another player can buy the residence with /res market buy"), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Description", "Buy a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Info", - Arrays.asList("Usage: /res market buy [residence]", "Buys a Residence if its for sale."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Description", "Stops selling a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Info", - Arrays.asList("Usage: /res market unsell [residence]"), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Description", "ent a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Info", - Arrays.asList("Usage: /res market rent [residence] ", - "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Description", "Make a residence rentable.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Info", - Arrays.asList("Usage: /res market rentable [residence] [cost] [days] ", - "Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Description", "Remove a residence from rent or rentable.", writer, conf, - true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Info", - Arrays.asList("Usage: /res market release [residence]", "If you are the renter, this command releases the rent on the house for you.", - "If you are the owner, this command makes the residence not for rent anymore."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.current.Description", "Show residence your currently in.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.current.Info", - Arrays.asList("Usage: /res current"), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.Description", "Predefined permission lists", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.Info", - Arrays.asList("Predefined permissions that can be applied to a residence."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Description", "Add a list", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Info", - Arrays.asList("Usage: /res lists add "), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Description", "Remove a list", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Info", - Arrays.asList("Usage: /res lists remove "), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Description", "Apply a list to a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Info", - Arrays.asList("Usage: /res lists apply "), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Description", "Set a flag", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Info", - Arrays.asList("Usage: /res lists set "), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Description", "Set a player flag", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Info", - Arrays.asList("Usage: /res lists pset "), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Description", "Set a group flag", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", - Arrays.asList("Usage: /res lists gset "), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.view.Description", "View a list.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", - Arrays.asList("Usage: /res lists view "), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.server.Description", "Make land server owned (admin only).", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.server.Info", - Arrays.asList("Usage: /resadmin server [residence]", "Make a residence server owned."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.setowner.Description", "Change owner of a residence (admin only).", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.setowner.Info", - Arrays.asList("Usage: /resadmin setowner [residence] [player]"), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence (admin only).", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.resreload.Info", - Arrays.asList("Usage: /resreload"), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.resload.Description", "Load residence save file (UNSAFE, admin only).", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.resload.Info", - Arrays.asList("Usage: /resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Description", "Converts ResidenceSigns plugins saved signs (admin only).", writer, conf, - true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Info", Arrays.asList("Usage: /ressignconvert"), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.version.Description", "how residence version", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.version.Info", - Arrays.asList("Usage: /res version"), - writer, conf, true); - // GetConfigArray("CommandHelp.SubCommands.res.select.Info", - // Arrays.asList("", "", ""), writer, conf, true); - - // Write back config - try { - writer.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - - } -} +package com.bekvon.bukkit.residence; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.configuration.Configuration; +import org.bukkit.configuration.file.YamlConfiguration; + +public class Locale { + public static String GetConfigString(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + conf.addDefault(path, text); + text = conf.getString(path); + if (colorize) + text = Colors(text); + copySetting(conf, writer, path); + return text; + } + + public static List GetConfigArray(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + conf.addDefault(path, text); + text = ColorsArray(conf.getStringList(path), colorize); + copySetting(conf, writer, path); + return text; + } + + public static List ColorsArray(List text, Boolean colorize) { + List temp = new ArrayList(); + for (String part : text) { + if (colorize) + part = Colors(part); + temp.add(Colors(part)); + } + return temp; + } + + private synchronized static void copySetting(Configuration reader, Configuration writer, String path) { + writer.set(path, reader.get(path)); + } + + public static String Colors(String text) { + return ChatColor.translateAlternateColorCodes('&', text); + } + + // Language file + public static void LoadLang(String lang) { + + File f = new File(Residence.instance.getDataFolder(), "Language" + File.separator + lang + ".yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + StringBuilder header = new StringBuilder(); + header.append("NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy"); + header.append(System.getProperty("line.separator")); + header.append("of this file and modify that instead. This file will be updated automatically by Residence"); + header.append(System.getProperty("line.separator")); + header.append("when a newer version is detected, and your changes will be overwritten. Once you "); + header.append(System.getProperty("line.separator")); + header.append("have a copy of this file, change the Language: option under the Residence config.yml"); + header.append(System.getProperty("line.separator")); + header.append("to whatever you named your copy."); + header.append(System.getProperty("line.separator")); + conf.options().copyDefaults(true); + + writer.options().header(header.toString()); + + writer.addComment("Language.NewPlayerInfo", "The below lines represent various messages residence sends to the players.", + "Note that some messages have variables such as %1 that are inserted at runtime."); + + GetConfigArray("Language.NewPlayerInfo", Arrays.asList("&e******************************************************", + "Please use wooden axe to select opposite sides of your home and execute command &2/res create yourHouseName", + "&e******************************************************"), writer, conf, true); + + GetConfigString("Language.NewPlayerInfo", "&ePlease use wooden axe to select opposite sides of your home and execute command &2/res create your name", writer, + conf, true); + GetConfigString("Language.InvalidResidence", "Invalid Residence...", writer, conf, true); + GetConfigString("Language.InvalidSubzone", "Invalid Subzone...", writer, conf, true); + GetConfigString("Language.InvalidDirection", "Invalid Direction...", writer, conf, true); + GetConfigString("Language.InvalidChannel", "Invalid Channel...", writer, conf, true); + GetConfigString("Language.InvalidAmount", "Invalid Amount...", writer, conf, true); + GetConfigString("Language.InvalidCost", "Invalid Cost...", writer, conf, true); + GetConfigString("Language.InvalidDays", "Invalid number of days...", writer, conf, true); + GetConfigString("Language.InvalidMaterial", "Invalid Material...", writer, conf, true); + GetConfigString("Language.InvalidBoolean", "Invalid value, must be true(t) or false(f)", writer, conf, true); + GetConfigString("Language.InvalidArea", "Invalid Area...", writer, conf, true); + GetConfigString("Language.InvalidGroup", "Invalid Group...", writer, conf, true); + writer.addComment("Language.CantPlaceLava", "Replace all text with '' to disable this message"); + GetConfigString("Language.CantPlaceLava", "You can't place lava outside residence and higher than %1 block level", writer, conf, true); + writer.addComment("Language.CantPlaceWater", "Replace all text with '' to disable this message"); + GetConfigString("Language.CantPlaceWater", "You can't place Water outside residence and higher than %1 block level", writer, conf, true); + GetConfigString("Language.InvalidMessageType", "Message type must be enter or remove.", writer, conf, true); + // GetConfigString("Language.InvalidList", "Invalid List...", writer, + // conf, true); + GetConfigString("Language.InvalidFlag", "Invalid Flag...", writer, conf, true); + GetConfigString("Language.InvalidFlagState", "Invalid flag state, must be true(t), false(f), or remove(r)", writer, conf, true); + GetConfigString("Language.AreaExists", "Area name already exists.", writer, conf, true); + GetConfigString("Language.AreaCreate", "Residence Area created, ID %1", writer, conf, true); + GetConfigString("Language.AreaDiffWorld", "Area is in a different world from residence.", writer, conf, true); + GetConfigString("Language.AreaCollision", "Area collides with residence %1", writer, conf, true); + GetConfigString("Language.AreaSubzoneCollision", "Area collides with subzone %1", writer, conf, true); + GetConfigString("Language.AreaNonExist", "No such area exists.", writer, conf, true); + GetConfigString("Language.AreaInvalidName", "Invalid Area Name...", writer, conf, true); + GetConfigString("Language.AreaToSmallTotal", "Selected area smaller than allowed minimal (%1)", writer, conf, true); + GetConfigString("Language.AreaToSmallX", "Your x selection length is too small. %1 allowed %2", writer, conf, true); + GetConfigString("Language.AreaToSmallY", "Your selection height is too small. %1 allowed %2", writer, conf, true); + GetConfigString("Language.AreaToSmallZ", "Your z selection length is too small. %1 allowed %2", writer, conf, true); + GetConfigString("Language.AreaRename", "Renamed area %1 to %2", writer, conf, true); + GetConfigString("Language.AreaRemove", "Removed area %1...", writer, conf, true); + GetConfigString("Language.AreaRemoveLast", "Cannot remove the last area in a residence.", writer, conf, true); + GetConfigString("Language.AreaNotWithinParent", "Area is not within parent area.", writer, conf, true); + GetConfigString("Language.AreaUpdate", "Area Updated...", writer, conf, true); + GetConfigString("Language.AreaMaxPhysical", "You've reached the max physical areas allowed for your residence.", writer, conf, true); + GetConfigString("Language.AreaSizeLimit", "Area size is not within your allowed limits.", writer, conf, true); + GetConfigString("Language.AreaHighLimit", "You cannot protect this high up, your limit is %1", writer, conf, true); + GetConfigString("Language.AreaLowLimit", "You cannot protect this deep, your limit is %1", writer, conf, true); + GetConfigString("Language.NotInResidence", "You are not in a Residence.", writer, conf, true); + GetConfigString("Language.Kicked", "You were kicked from residence", writer, conf, true); + GetConfigString("Language.InResidence", "You are standing in Residence %1", writer, conf, true); + GetConfigString("Language.ResidenceOwnerChange", "Residence %1 owner changed to %2", writer, conf, true); + GetConfigString("Language.NonAdmin", "You are not a Residence admin.", writer, conf, true); + GetConfigString("Language.AdminOnly", "Only admins have access to this command.", writer, conf, true); + GetConfigString("Language.ChatDisabled", "Residence Chat Disabled...", writer, conf, true); + GetConfigString("Language.SubzoneRename", "Renamed subzone %1 to %2", writer, conf, true); + GetConfigString("Language.SubzoneRemove", "Subzone %1 removed.", writer, conf, true); + GetConfigString("Language.SubzoneCreate", "Created Subzone %1", writer, conf, true); + GetConfigString("Language.SubzoneCreateFail", "Unable to create subzone %1", writer, conf, true); + GetConfigString("Language.SubzoneExists", "Subzone %1 already exists.", writer, conf, true); + GetConfigString("Language.SubzoneCollide", "Subzone collides with subzone %1", writer, conf, true); + GetConfigString("Language.SubzoneMaxDepth", "You have reached the maximum allowed subzone depth.", writer, conf, true); + GetConfigString("Language.SubzoneSelectInside", "Both selection points must be inside the residence.", writer, conf, true); + GetConfigString("Language.SelectPoints", "Select two points first before using this command!", writer, conf, true); + GetConfigString("Language.SelectOverlap", "&cSelected points overlap with &e%1 &cregion!", writer, conf, true); + GetConfigString("Language.SelectionSuccess", "Selection Successful!", writer, conf, true); + GetConfigString("Language.SelectionFail", "Invalid select command...", writer, conf, true); + GetConfigString("Language.SelectionBedrock", "Selection expanded to your lowest allowed limit.", writer, conf, true); + GetConfigString("Language.SelectionSky", "Selection expanded to your highest allowed limit.", writer, conf, true); + GetConfigString("Language.SelectionArea", "Selected area %1 of residence %2", writer, conf, true); + GetConfigString("Language.SelectDiabled", "You don't have access to selections commands.", writer, conf, true); + GetConfigString("Language.NoPermission", "You dont have permission for this.", writer, conf, true); + GetConfigString("Language.OwnerNoPermission", "The owner does not have permission for this.", writer, conf, true); + GetConfigString("Language.ParentNoPermission", "You don't have permission to make changes to the parent zone.", writer, conf, true); + GetConfigString("Language.MessageChange", "Message Set...", writer, conf, true); + GetConfigString("Language.FlagSet", "&e%1 &2flag set for &e%2 &2to &e%3 &2state", writer, conf, true); + GetConfigString("Language.FlagCheckTrue", "Flag %1 applys to player %2 for residence %3, value = %4", writer, conf, true); + GetConfigString("Language.FlagCheckFalse", "Flag %1 does not apply to player %2 for residence.", writer, conf, true); + GetConfigString("Language.FlagsCleared", "Flags Cleared.", writer, conf, true); + GetConfigString("Language.FlagsDefault", "Flags set to default.", writer, conf, true); + GetConfigString("Language.Usage", "Command Usage", writer, conf, true); + GetConfigString("Language.InvalidHelp", "Invalid Help Page...", writer, conf, true); + GetConfigString("Language.SubCommands", "Sub Commands", writer, conf, true); + GetConfigString("Language.InvalidList", "Unknown list type, must be blacklist or ignorelist.", writer, conf, true); + GetConfigString("Language.MaterialGet", "The material name for ID %1 is %2", writer, conf, true); + GetConfigString("Language.MarketDisabled", "Economy Disabled!", writer, conf, true); + GetConfigString("Language.MarketList", "Market List", writer, conf, true); + + GetConfigString("Language.SignTopLine", "[market]", writer, conf, true); + GetConfigString("Language.SignDateFormat", "YY/MM/dd HH:mm", writer, conf, true); + + GetConfigString("Language.SignForRentTopLine", "&8For Rent", writer, conf, true); + GetConfigString("Language.SignForRentPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); + GetConfigString("Language.SignForRentResName", "&8%1", writer, conf, true); + GetConfigString("Language.SignForRentBottomLine", "&9Available", writer, conf, true); + + GetConfigString("Language.SignRentedAutorenewTrue", "&2", writer, conf, true); + GetConfigString("Language.SignRentedAutorenewFalse", "&c", writer, conf, true); + + GetConfigString("Language.SignRentedTopLine", "%1", writer, conf, true); + GetConfigString("Language.SignRentedPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); + GetConfigString("Language.SignRentedResName", "&8%1", writer, conf, true); + GetConfigString("Language.SignRentedBottomLine", "&1%1", writer, conf, true); + + GetConfigString("Language.SignForSaleTopLine", "&8For Sale", writer, conf, true); + GetConfigString("Language.SignForSalePriceLine", "&8%1", writer, conf, true); + GetConfigString("Language.SignForSaleResName", "&8%1", writer, conf, true); + GetConfigString("Language.SignForSaleBottomLine", "&5Available", writer, conf, true); + + GetConfigString("Language.SelectionTool", "Selection Tool", writer, conf, true); + GetConfigString("Language.InfoTool", "Info Tool", writer, conf, true); + GetConfigString("Language.NoBankAccess", "You dont have bank access.", writer, conf, true); + GetConfigString("Language.NotEnoughMoney", "You dont have enough money.", writer, conf, true); + GetConfigString("Language.BankNoMoney", "Not enough money in the bank.", writer, conf, true); + GetConfigString("Language.BankDeposit", "You deposit %1 into the residence bank.", writer, conf, true); + GetConfigString("Language.BankWithdraw", "You withdraw %1 from the residence bank.", writer, conf, true); + GetConfigString("Language.MoneyCharged", "Charged %1 to your %2 account.", writer, conf, true); + GetConfigString("Language.MoneyAdded", "Got %1 to your %2 account.", writer, conf, true); + GetConfigString("Language.MoneyCredit", "Credited %1 to your %2 account.", writer, conf, true); + // GetConfigString("Language.RentDisabled", "Rent system is disabled.", + // writer, conf, true); + GetConfigString("Language.RentReleaseInvalid", "Residence %1 is not rented or for rent.", writer, conf, true); + GetConfigString("Language.RentSellFail", "Cannot sell a Residence if it is for rent.", writer, conf, true); + GetConfigString("Language.SellRentFail", "Cannot rent a Residence if it is for sale.", writer, conf, true); + GetConfigString("Language.OwnerBuyFail", "Cannot buy your own land!", writer, conf, true); + GetConfigString("Language.OwnerRentFail", "Cannot rent your own land!", writer, conf, true); + GetConfigString("Language.AlreadySellFail", "Residence already for sale!", writer, conf, true); + GetConfigString("Language.ResidenceBought", "You bought residence %1", writer, conf, true); + GetConfigString("Language.ResidenceBuy", "Residence %1 has bought residence %2 from you.", writer, conf, true); + GetConfigString("Language.ResidenceBuyTooBig", "This residence has areas bigger then your allowed max.", writer, conf, true); + GetConfigString("Language.ResidenceNotForSale", "Residence is not for sale.", writer, conf, true); + GetConfigString("Language.ResidenceForSale", "Residence %1 is now for sale for %2", writer, conf, true); + GetConfigString("Language.ResidenceStopSelling", "Residence is no longer for sale.", writer, conf, true); + GetConfigString("Language.ResidenceTooMany", "You already own the max number of residences your allowed to.", writer, conf, true); + GetConfigString("Language.ResidenceMaxRent", "You already are renting the maximum number of residences your allowed to.", writer, conf, true); + GetConfigString("Language.ResidenceAlreadyRent", "Residence is already for rent...", writer, conf, true); + GetConfigString("Language.ResidenceNotForRent", "Residence not for rent...", writer, conf, true); + GetConfigString("Language.ResidenceNotRented", "Residence not rented.", writer, conf, true); + GetConfigString("Language.ResidenceUnrent", "Residence %1 has been unrented.", writer, conf, true); + GetConfigString("Language.ResidenceRemoveRentable", "Residence %1 is no longer rentable.", writer, conf, true); + GetConfigString("Language.ResidenceForRentSuccess", "Residence %1 is now for rent for %2 every %3 days.", writer, conf, true); + GetConfigString("Language.ResidenceRentSuccess", "You have rented Residence %1 for %2 days.", writer, conf, true); + GetConfigString("Language.ResidenceAlreadyRented", "Residence %1 has currently been rented to %2", writer, conf, true); + GetConfigString("Language.ResidenceAlreadyExists", "A residence named %1 already exists.", writer, conf, true); + GetConfigString("Language.ResidenceCreate", "You have created residence %1!", writer, conf, true); + GetConfigString("Language.ResidenceRename", "Renamed Residence %1 to %2", writer, conf, true); + GetConfigString("Language.ResidenceRemove", "Residence %1 has been removed...", writer, conf, true); + GetConfigString("Language.RentDisabled", "Rent is disabled...", writer, conf, true); + GetConfigString("Language.RentDisableRenew", "Residence %1 will now no longer re-rent upon expire.", writer, conf, true); + GetConfigString("Language.RentEnableRenew", "Residence %1 will now automatically re-rent upon expire.", writer, conf, true); + GetConfigString("Language.RentableDisableRenew", "%1 will no longer renew rentable status upon expire.", writer, conf, true); + GetConfigString("Language.RentableEnableRenew", "%1 will now automatically renew rentable status upon expire.", writer, conf, true); + GetConfigString("Language.LandForSale", "Land For Sale", writer, conf, true); + GetConfigString("Language.SellAmount", "Sell Amount", writer, conf, true); + GetConfigString("Language.LeaseExpire", "Lease Expire Time", writer, conf, true); + GetConfigString("Language.RentExpire", "Rent Expire Time", writer, conf, true); + GetConfigString("Language.RentableAutoRenew", "Rentable Auto Renew", writer, conf, true); + GetConfigString("Language.RentAutoRenew", "Rent Auto Renew", writer, conf, true); + GetConfigString("Language.RentableLand", "Rentable Land", writer, conf, true); + GetConfigString("Language.ListMaterialAdd", "%1 added to the residence %2", writer, conf, true); + GetConfigString("Language.ListMaterialRemove", "%1 removed from the residence %2", writer, conf, true); + GetConfigString("Language.ItemBlacklisted", "You are blacklisted from using this item here.", writer, conf, true); + GetConfigString("Language.RentedModifyDeny", "Cannot modify a rented residence.", writer, conf, true); + GetConfigString("Language.WorldPVPDisabled", "World PVP is disabled.", writer, conf, true); + GetConfigString("Language.NoPVPZone", "No PVP zone.", writer, conf, true); + GetConfigString("Language.FlagDeny", "You dont have %1 permission here.", writer, conf, true); + GetConfigString("Language.FlagSetDeny", "Owner does not have access to flag %1", writer, conf, true); + GetConfigString("Language.SelectPoint", "Placed %1 Selection Point", writer, conf, true); + GetConfigString("Language.ResidenceChat", "Residence chat toggled %1", writer, conf, true); + GetConfigString("Language.ResidenceMoveDeny", "You dont have movement permission for Residence %1", writer, conf, true); + GetConfigString("Language.ResidenceFlagDeny", "You dont have %1 permission for Residence %2", writer, conf, true); + GetConfigString("Language.TeleportDeny", "You dont have teleport access.", writer, conf, true); + GetConfigString("Language.TeleportSuccess", "Teleported!", writer, conf, true); + GetConfigString("Language.TeleportConfirm", + "&eThis teleport is not safe, you will fall for &c%1 &eblocks. Use &2/res tpconfirm &eto perform teleportation anyways.", writer, conf, true); + GetConfigString("Language.TeleportStarted", + "&eTeleportation to %1 started, don't move for next %2 sec.", writer, conf, true); + GetConfigString("Language.TeleportCanceled", + "&eTeleportation canceled!", writer, conf, true); + GetConfigString("Language.NoTeleportConfirm", "There is no teleports waiting for confirmation!", writer, conf, true); + GetConfigString("Language.TeleportNear", "Teleported to near residence.", writer, conf, true); + GetConfigString("Language.TeleportNoFlag", "You dont have teleport access for that residence.", writer, conf, true); + GetConfigString("Language.SetTeleportLocation", "Teleport Location Set...", writer, conf, true); + GetConfigString("Language.HelpPageHeader", "Help Pages - %1 - Page <%2 of %3>", writer, conf, true); + GetConfigString("Language.ListExists", "List already exists...", writer, conf, true); + GetConfigString("Language.ListRemoved", "List removed...", writer, conf, true); + GetConfigString("Language.ListCreate", "Created list %1", writer, conf, true); + GetConfigString("Language.LeaseRenew", "Lease valid until %1", writer, conf, true); + GetConfigString("Language.LeaseRenewMax", "Lease renewed to maximum allowed", writer, conf, true); + GetConfigString("Language.LeaseNotExpire", "No such lease, or lease does not expire.", writer, conf, true); + GetConfigString("Language.LeaseRenewalCost", "Renewal cost for area %1 is %2", writer, conf, true); + GetConfigString("Language.LeaseInfinite", "Lease time set to infinite...", writer, conf, true); + GetConfigString("Language.PermissionsApply", "Permissions applied to residence.", writer, conf, true); + GetConfigString("Language.PhysicalAreas", "Physical Areas", writer, conf, true); + GetConfigString("Language.CurrentArea", "Current Area", writer, conf, true); + GetConfigString("Language.TotalWorth", "Total worth of residence:&3 %1 (%2)", writer, conf, true); + GetConfigString("Language.LeaseExpire", "Lease Expiration", writer, conf, true); + GetConfigString("Language.NotOnline", "Target player must be online.", writer, conf, true); + GetConfigString("Language.ResidenceGiveLimits", "Cannot give residence to target player, because it is outside the target players limits.", writer, conf, true); + GetConfigString("Language.ResidenceGive", "You give residence %1 to player %2", writer, conf, true); + GetConfigString("Language.ResidenceRecieve", "You have recieved residence %1 from player %2", writer, conf, true); + // GetConfigString("Language.#ResidenceListAll", "Residences - - removed, use GenericPage now", writer, conf, true); + GetConfigString("Language.ResidenceListAllEmpty", "No Residences exists on the server...", writer, conf, true); + GetConfigString("Language.InvalidPage", "Invalid Page...", writer, conf, true); + GetConfigString("Language.NextPage", "Next Page", writer, conf, true); + GetConfigString("Language.NextInfoPage", "&2| &eNext Page &2>>>", writer, conf, true); + GetConfigString("Language.PrevInfoPage", "&2<<< &ePrev Page &2|", writer, conf, true); + GetConfigString("Language.RemovePlayersResidences", "Removed all residences belonging to player %1", writer, conf, true); + GetConfigString("Language.GenericPage", "Page %1 of %2", writer, conf, true); + GetConfigString("Language.ResidenceRentedBy", "Rented by %1", writer, conf, true); + GetConfigString("Language.InvalidCharacters", "Invalid characters detected...", writer, conf, true); + GetConfigString("Language.InvalidNameCharacters", "Name contained unallowed characters...", writer, conf, true); + GetConfigString("Language.DeleteConfirm", "Are you sure you want to delete residence %1, use /res confirm to confirm.", writer, conf, true); + GetConfigString("Language.SelectTooHigh", "Warning, selection went above top of map, limiting.", writer, conf, true); + GetConfigString("Language.SelectTooLow", "Warning, selection went below bottom of map, limiting.", writer, conf, true); + GetConfigString("Language.WorldEditNotFound", "WorldEdit was not detected.", writer, conf, true); + GetConfigString("Language.NoResHere", "There is no residence in there.", writer, conf, true); + GetConfigString("Language.DeleteSubzoneConfirm", "Are you sure you want to delete subzone %1, use /res confirm to confirm.", writer, conf, true); + GetConfigString("Language.SubzoneOwnerChange", "Subzone %1 owner changed to %2", writer, conf, true); + GetConfigString("Language.CoordsTop", "X:%1 Y:%2 Z:%3", writer, conf, true); + GetConfigString("Language.CoordsBottom", "X:%1 Y:%2 Z:%3", writer, conf, true); + GetConfigString("Language.AdminToggle", "Automatic resadmin toggle turned %1", writer, conf, true); + GetConfigString("Language.NoSpawn", "You do not have move permissions at your spawn point. Relocating", writer, conf, true); + GetConfigString("Language.CompassTargetReset", "Your compass has been reset", writer, conf, true); + GetConfigString("Language.CompassTargetSet", "Your compass now points to %1", writer, conf, true); + writer.addComment("Language.Description", "The below lines are mostly a word bank for various uses."); + GetConfigString("Language.Description", "Description", writer, conf, true); + GetConfigString("Language.Land", "Land", writer, conf, true); + GetConfigString("Language.Cost", "Cost", writer, conf, true); + GetConfigString("Language.Selection", "Selection", writer, conf, true); + GetConfigString("Language.Total", "Total", writer, conf, true); + GetConfigString("Language.Size", "Size", writer, conf, true); + GetConfigString("Language.Expanding", "Expanding", writer, conf, true); + GetConfigString("Language.Contracting", "Contracting", writer, conf, true); + GetConfigString("Language.North", "North", writer, conf, true); + GetConfigString("Language.West", "West", writer, conf, true); + GetConfigString("Language.South", "South", writer, conf, true); + GetConfigString("Language.East", "East", writer, conf, true); + GetConfigString("Language.Shifting", "Shifting", writer, conf, true); + GetConfigString("Language.Up", "Up", writer, conf, true); + GetConfigString("Language.Down", "Down", writer, conf, true); + GetConfigString("Language.Error", "Error", writer, conf, true); + GetConfigString("Language.Flags", "Flags", writer, conf, true); + GetConfigString("Language.Your", "Your", writer, conf, true); + GetConfigString("Language.Group", "Group", writer, conf, true); + GetConfigString("Language.Others", "Others", writer, conf, true); + GetConfigString("Language.Primary", "Primary", writer, conf, true); + GetConfigString("Language.Secondary", "Secondary", writer, conf, true); + GetConfigString("Language.Selection", "Selection", writer, conf, true); + GetConfigString("Language.Moved", "Moved", writer, conf, true); + GetConfigString("Language.Status", "Status", writer, conf, true); + GetConfigString("Language.Available", "Available", writer, conf, true); + GetConfigString("Language.On", "On", writer, conf, true); + GetConfigString("Language.Off", "Off", writer, conf, true); + GetConfigString("Language.Name", "Name", writer, conf, true); + GetConfigString("Language.Lists", "Lists", writer, conf, true); + GetConfigString("Language.Residences", "Residences", writer, conf, true); + GetConfigString("Language.Residence", "Residence", writer, conf, true); + GetConfigString("Language.Count", "Count", writer, conf, true); + GetConfigString("Language.Owner", "Owner", writer, conf, true); + GetConfigString("Language.World", "World", writer, conf, true); + GetConfigString("Language.Subzones", "Subzones", writer, conf, true); + GetConfigString("Language.CoordsT", "Top Coords", writer, conf, true); + GetConfigString("Language.CoordsB", "Bottom Coords", writer, conf, true); + GetConfigString("Language.TurnOn", "on", writer, conf, true); + GetConfigString("Language.TurnOff", "off", writer, conf, true); + GetConfigString("Language.LimitsTop", "----------------------------------------", writer, conf, true); + GetConfigString("Language.LimitsPGroup", "&7- &ePermissions Group:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsRGroup", "&7- &eResidence Group:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsAdmin", "&7- &eResidence Admin:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsCanCreate", "&7- &eCan Create Residences:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMaxRes", "&7- &eMax Residences:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMaxEW", "&7- &eMax East/West Size:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMaxNS", "&7- &eMax North/South Size:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMaxUD", "&7- &eMax Up/Down Size:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMinMax", "&7- &eMin/Max Protection Height:&3 %1 to %2", writer, conf, true); + GetConfigString("Language.LimitsMaxSub", "&7- &eMax Subzone Depth:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsEnterLeave", "&7- &eCan Set Enter/Leave Messages:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsNumberOwn", "&7- &eNumber of Residences you own:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsCost", "&7- &eResidence Cost Per Block:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsSell", "&7- &eResidence Sell Cost Per Block:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsFlag", "&7- &eFlag Permissions:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMaxDays", "&7- &eMax Lease Days:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsLeaseTime", "&7- &eLease Time Given on Renew:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsRenewCost", "&7- &eRenew Cost Per Block:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsBottom", "----------------------------------------", writer, conf, true); + GetConfigArray("Language.Gui.Actions", Arrays.asList("&2Left click to enable", "&cRight click to disable","&eShift + left click to remove"), writer, conf, true); + + writer.addComment("CommandHelp", ""); + + GetConfigString("CommandHelp.Description", "Contains Help for Residence", writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.Description", "Main Residence Command", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.Info", Arrays.asList("See the residence wiki for more help.", "Wiki: https://github.com/bekvon/Residence/wiki", + "Use /res [command] ? to view more help information."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.Description", "Selection Commands", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.Info", + Arrays.asList("This command selects areas for usage with residence.", "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Description", "Display selected coordinates", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Info", Arrays.asList("Usage: /res select coords"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Description", "Display selected size", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Info", Arrays.asList("Usage: /res select size"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Description", "Display selection cost", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Info", Arrays.asList("Usage: /res select cost"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Description", "Expand Selection Vertically", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Info", + Arrays.asList("Usage: /res select vert", "Will expand selection as high and as low as allowed."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Description", "Expand Selection to Sky", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Info", Arrays.asList("Usage: /res select sky", + "Expands as high as your allowed to go."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Description", "Expand Selection to Bedrock", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Info", + Arrays.asList("Usage: /res select bedrock", "Expands as low as your allowed to go."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Description", "Expand selection in a direction.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Info", + Arrays.asList("Usage: /res select expand ", "Expands in the direction your looking."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Description", "Shift selection in a direction", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Info", + Arrays.asList("Usage: /res select shift ", "Pushes your selection by in the direction your looking."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Description", "Select the chunk your currently in.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Info", + Arrays.asList("Usage: /res select chunk", "Selects the chunk your currently standing in."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Description", "Select a existing area in a residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Info", + Arrays.asList("Usage /res select ", "Selects a existing area in a residence."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Description", "Set selection using the current WorldEdit selection.", + writer, conf, + true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Info", + Arrays.asList("Usage /res select worldedit", "Sets selection area using the current WorldEdit selection."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.create.Description", "Create Residences", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.create.Info", Arrays.asList("Usage: /res create "), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.remove.Description", "Remove residences.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("Usage: /res remove "), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("Usage: /res removeall [owner]", + "Removes all residences owned by a specific player.'", + "Requires /resadmin if you use it on anyone besides yourself."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.confirm.info", Arrays.asList("Usage: /res confirm", "Confirms removal of a residence."), writer, conf, + true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.subzone.Description", "Create subzones in residences.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.subzone.Info", + Arrays.asList("Usage: /res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.Description", "Manage physical areas for a residence.", writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Description", "List physical areas in a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Info", + Arrays.asList("Usage: /res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Description", "List coordinates and other info for areas", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("Usage: /res area listall [residence] "), writer, + conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Description", "Add physical areas to a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Info", + Arrays.asList("Usage: /res area add [residence] [areaID]", "You must first select two points first."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Description", "Remove physical areas from a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("Usage: /res area remove [residence] [areaID]"), writer, + conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Description", "Replace physical areas in a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("Usage: /res area replace [residence] [areaID]", + "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.info.info", + Arrays.asList("Usage: /res info ", "Leave off to display info for the residence your currently in."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.limits.info", + Arrays.asList("Usage: /res limits", "Shows the limitations you have on creating and managing residences."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages", writer, conf, true); + GetConfigArray( + "CommandHelp.SubCommands.res.SubCommands.message.info", Arrays.asList("Usage: /res message [enter/leave] [message]", + "Set the enter or leave message of a residence.", "Usage: /res message remove [enter/leave]", "Removes a enter or leave message."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.Description", "Manage residence leases", writer, conf, true); + GetConfigArray( + "CommandHelp.SubCommands.res.SubCommands.lease.info", Arrays.asList("Usage: /res lease [renew/cost] [residence]", + "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money."), + writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time (admin only)", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", + Arrays.asList("Usage: /resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite."), writer, conf, + true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.bank.Info", + Arrays.asList("Usage: /res bank [deposit/withdraw] [amount]", "You must be standing in a Residence", "You must have the +bank flag."), writer, conf, + true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.tp.Description", "Teleport to a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tp.Info", + Arrays.asList("Usage: /res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", + "Your permission group must also be allowed to teleport by the server admin."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning and teleport anyways", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", + Arrays.asList("Usage: /res tpconfirm", "Teleports you to a residence, when teleportation is unsafe."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpset.Description", "Set the teleport location of a Residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpset.Info", + Arrays.asList("Usage: /res tpset", "This will set the teleport location for a residence to where your standing.", + "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.set.Description", "Set general flags on a Residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.set.Info", Arrays.asList("Usage: /res set [flag] [true/false/remove]", + "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.pset.Description", "Set flags on a specific player for a Residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.pset.Info", Arrays.asList("Usage: /res pset [player] [flag] [true/false/remove]", + "Usage: /res pset [player] removeall", "To see a list of flags, use /res flags ?"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.gset.Description", "Set flags on a specific group for a Residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.gset.Info", + Arrays.asList("Usage: /res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lset.Description", "Change blacklist and ignorelist options", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lset.Info", + Arrays.asList("Usage: /res lset [blacklist/ignorelist] [material]", + "Usage: /res lset info", + "Blacklisting a material prevents it from being placed in the residence.", + "Ignorelist causes a specific material to not be protected by Residence."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.flags.Description", "List of flags", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.flags.Info", + Arrays.asList("For flag values, usually true allows the action, and false denys the action.", + "&2build &3- &eallows or denys building", + "&2use &3- &eallows or denys use of doors, lever, buttons, etc...", + "&2move &3- &eallows or denys movement in the residence.", + "&2container &3- &eallows or denys use of furnaces, chests, dispensers, etc...", + "&2trusted &3- &eGives build, use, move, container and tp flags", + "&2place &3- &eallows or denys only placement of blocks, overrides the build flag.", + "&2destroy &3- &eallows or denys only destruction of blocks, overrides the build flag.", + "&2pvp &3- &eallow or deny pvp in the residence", + "&2tp &3- &eallow or disallow teleporting to the residence.", + "&2admin &3- &egives a player permission to change flags on a residence.", + "&2subzone &3- &eallow a player to make subzones in the residence.", + "&2monsters &3- &eallows or denys monster spawns", + "&2animals &3- &eallows or denys animal spawns.", + "&2animalkilling &3- &eallows or denys animal killing.", + "&2mobkilling &3- &eallows or denys mob killing.", + "&2nofly &3- &eallows or denys fly in residence.", + "&2vehicledestroy &3- &eallows or denys vehicle destroy.", + "&2shear &3- &eallows or denys sheep shear.", + "&2leash &3- &eallows or denys aninal leash.", + "&2healing &3- &esetting to true makes the residence heal its occupants", + "&2tnt &3- &eallow or deny tnt explosions", + "&2creeper &3- &eallow or deny creeper explosions", + "&2ignite &3- &eallows or denys fire ignition.", + "&2firespread &3- &eallows or denys fire spread.", + "&2bucket &3- &eallow or deny bucket use.", + "&2flow &3- &eallows or denys liquid flow.", + "&2lavaflow &3- &eallows or denys lava flow, overrides flow", + "&2waterflow &3- &eallows or denys water flow, overrides flow", + "&2damage &3- &eallows or denys all entity damage within the residence.", + "&2piston &3- &eallow or deny pistons from pushing or pulling blocks in the residence.", + "&2hidden &3- &ehides residence from list or listall commands.", + "&2cake &3- &eallows or denys players to eat cake", + "&2lever &3- &eallows or denys players to use levers", + "&2button &3- &eallows or denys players to use buttons", + "&2diode &3- &eallows or denys players to use redstone repeaters", + "&2door &3- &eallows or denys players to use doors and trapdoors", + "&2table &3- &eallows or denys players to use workbenches", + "&2enchant &3- &eallows or denys players to use enchanting tables", + "&2brew &3- &eallows or denys players to use brewing stands", + "&2bed &3- &eallows or denys players to use beds", + "&2button &3- &eallows or denys players to use buttons", + "&2pressure &3- &eallows or denys players to use pressure plates", + "&2note &3- &eallows or denys players to use note blocks", + "&2redstone &3- &eGives lever, diode, button, pressure, note flags", + "&2craft &3- &eGives table, enchant, brew flags", + "&2traample &3- &eAllows or denys crop trampling in residence", + "&2trade &3- &eAllows or denys villager trading in residence", + "&2nomobs &3- &ePrevents monsters from entering residence residence", + "&2explode &3- &eAllows or denys explosions in residences", + "&2fireball &3- &eAllows or denys fire balls in residences", + "&2burn &3- &eallows or denys Mob combustion in residences"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.list.Description", "List Residences", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.list.Info", + Arrays.asList("Usage: /res list ", + "Lists all the residences a player owns (except hidden ones).", + "If listing your own residences, shows hidden ones as well.", + "To list everyones residences, use /res listall."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.listhidden.Description", "List Hidden Residences (ADMIN ONLY)", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listhidden.Info", + Arrays.asList("Usage: /res listhidden ", + "Lists hidden residences for a player."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.listall.Description", "List All Residences", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listall.Info", + Arrays.asList("Usage: /res listall ", + "Lists hidden residences for a player."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.listallhidden.Description", "List All Hidden Residences (ADMIN ONLY)", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listallhidden.Info", + Arrays.asList("Usage: /res listhidden ", + "Lists all hidden residences on the server."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.sublist.Description", "List Residence Subzones", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.sublist.Info", + Arrays.asList("Usage: /res sublist ", + "List subzones within a residence."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.default.Description", "Reset residence to default flags.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.default.Info", + Arrays.asList("Usage: /res default ", + "Resets the flags on a residence to their default. You must be the owner or an admin to do this."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.rename.Description", "Renames a residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.rename.Info", + Arrays.asList("Usage: /res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", + "The name must not already be taken by another residence."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.mirror.Description", "Mirrors Flags", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.mirror.Info", + Arrays.asList("Usage: /res mirror [Source Residence] [Target Residence]", + "Mirrors flags from one residence to another. You must be owner of both or a admin to do this."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.Description", "Buy, Sell, or Rent Residences", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.mirror.Info", + Arrays.asList("Usage: /res market ? for more info"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.info.Description", "Get economy info on residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.info.Info", + Arrays.asList("Usage: /res market info [residence]", "Shows if the Residence is for sale or for rent, and the cost."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Description", "Lists rentable and for sale residences.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Info", + Arrays.asList("Usage: /res market list"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Description", "Sell a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Info", + Arrays.asList("Usage: /res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", + "Another player can buy the residence with /res market buy"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Description", "Buy a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Info", + Arrays.asList("Usage: /res market buy [residence]", "Buys a Residence if its for sale."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Description", "Stops selling a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Info", + Arrays.asList("Usage: /res market unsell [residence]"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Description", "ent a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Info", + Arrays.asList("Usage: /res market rent [residence] ", + "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Description", "Make a residence rentable.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Info", + Arrays.asList("Usage: /res market rentable [residence] [cost] [days] ", + "Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Description", "Remove a residence from rent or rentable.", writer, conf, + true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Info", + Arrays.asList("Usage: /res market release [residence]", "If you are the renter, this command releases the rent on the house for you.", + "If you are the owner, this command makes the residence not for rent anymore."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.current.Description", "Show residence your currently in.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.current.Info", + Arrays.asList("Usage: /res current"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.Description", "Predefined permission lists", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.Info", + Arrays.asList("Predefined permissions that can be applied to a residence."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Description", "Add a list", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Info", + Arrays.asList("Usage: /res lists add "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Description", "Remove a list", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Info", + Arrays.asList("Usage: /res lists remove "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Description", "Apply a list to a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Info", + Arrays.asList("Usage: /res lists apply "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Description", "Set a flag", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Info", + Arrays.asList("Usage: /res lists set "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Description", "Set a player flag", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Info", + Arrays.asList("Usage: /res lists pset "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Description", "Set a group flag", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", + Arrays.asList("Usage: /res lists gset "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.view.Description", "View a list.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", + Arrays.asList("Usage: /res lists view "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.server.Description", "Make land server owned (admin only).", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.server.Info", + Arrays.asList("Usage: /resadmin server [residence]", "Make a residence server owned."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.setowner.Description", "Change owner of a residence (admin only).", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.setowner.Info", + Arrays.asList("Usage: /resadmin setowner [residence] [player]"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence (admin only).", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.resreload.Info", + Arrays.asList("Usage: /resreload"), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.resload.Description", "Load residence save file (UNSAFE, admin only).", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.resload.Info", + Arrays.asList("Usage: /resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Description", "Converts ResidenceSigns plugins saved signs (admin only).", writer, conf, + true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Info", Arrays.asList("Usage: /ressignconvert"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.version.Description", "how residence version", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.version.Info", + Arrays.asList("Usage: /res version"), + writer, conf, true); + // GetConfigArray("CommandHelp.SubCommands.res.select.Info", + // Arrays.asList("", "", ""), writer, conf, true); + + // Write back config + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + + } +} diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 2807f75d9..31b29151d 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1,1070 +1,1082 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package com.bekvon.bukkit.residence; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.World; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginManager; -import org.bukkit.plugin.java.JavaPlugin; - -import com.bekvon.bukkit.residence.Signs.SignUtil; -import com.bekvon.bukkit.residence.chat.ChatManager; -import com.bekvon.bukkit.residence.economy.BOSEAdapter; -import com.bekvon.bukkit.residence.economy.EconomyInterface; -import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter; -import com.bekvon.bukkit.residence.economy.IConomy5Adapter; -import com.bekvon.bukkit.residence.economy.IConomy6Adapter; -import com.bekvon.bukkit.residence.economy.RealShopEconomy; -import com.bekvon.bukkit.residence.economy.TransactionManager; -import com.bekvon.bukkit.residence.economy.rent.RentManager; -import com.bekvon.bukkit.residence.itemlist.WorldItemManager; -import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; -import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; -import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; -import com.bekvon.bukkit.residence.permissions.PermissionManager; -import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.protection.LeaseManager; -import com.bekvon.bukkit.residence.protection.PermissionListManager; -import com.bekvon.bukkit.residence.protection.ResidenceManager; -import com.bekvon.bukkit.residence.protection.WorldFlagManager; -import com.bekvon.bukkit.residence.selection.SelectionManager; -import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; -import com.bekvon.bukkit.residence.spout.ResidenceSpoutListener; -import com.bekvon.bukkit.residence.text.Language; -import com.bekvon.bukkit.residence.text.help.HelpEntry; -import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.CrackShot; -import com.bekvon.bukkit.residence.utils.FileCleanUp; -import com.bekvon.bukkit.residence.utils.TabComplete; -import com.bekvon.bukkit.residence.utils.VersionChecker; -import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; -import com.earth2me.essentials.Essentials; -import com.residence.mcstats.Metrics; -import com.residence.zip.ZipLibrary; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; - -import cosine.boseconomy.BOSEconomy; -import fr.crafter.tickleman.realeconomy.RealEconomy; -import fr.crafter.tickleman.realplugin.RealPlugin; - -import java.util.UUID; -import org.bukkit.OfflinePlayer; - -/** - * - * @author Gary Smoak - bekvon - * - */ -public class Residence extends JavaPlugin { - - protected static ResidenceManager rmanager; - protected static SelectionManager smanager; - protected static PermissionManager gmanager; - protected static ConfigManager cmanager; - protected static ResidenceBlockListener blistener; - protected static ResidencePlayerListener plistener; - protected static ResidenceEntityListener elistener; - protected static ResidenceSpoutListener slistener; - protected static TransactionManager tmanager; - protected static PermissionListManager pmanager; - protected static LeaseManager leasemanager; - protected static WorldItemManager imanager; - protected static WorldFlagManager wmanager; - protected static RentManager rentmanager; - protected static ChatManager chatmanager; - protected static Server server; - protected static HelpEntry helppages; - protected static Language language; - public static Plugin instance; - protected boolean firstenable = true; - protected static EconomyInterface economy; - public final static int saveVersion = 1; - protected static File dataFolder; - protected static int leaseBukkitId = -1; - protected static int rentBukkitId = -1; - protected static int healBukkitId = -1; - - protected static int DespawnMobsBukkitId = -1; - - protected static int autosaveBukkitId = -1; - protected static VersionChecker versionChecker; - protected static boolean initsuccess = false; - protected Map deleteConfirm; - protected static List resadminToggle; - private final static String[] validLanguages = { "English", "German", "French", "Hungarian", "Spanish", "Chinese", "Czech", "Brazilian", "Polish", "Lithuanian" }; - public static HashMap UUIDList = new HashMap(); - public static WorldEditPlugin wep = null; - public static WorldGuardPlugin wg = null; - public static int wepid; - - private Runnable doHeals = new Runnable() { - public void run() { - plistener.doHeals(); - } - }; - - private Runnable DespawnMobs = new Runnable() { - public void run() { - plistener.DespawnMobs(); - } - }; - - private Runnable rentExpire = new Runnable() { - public void run() { - rentmanager.checkCurrentRents(); - if (cmanager.showIntervalMessages()) { - System.out.println("[Residence] - Rent Expirations checked!"); - } - } - }; - private Runnable leaseExpire = new Runnable() { - public void run() { - leasemanager.doExpirations(); - if (cmanager.showIntervalMessages()) { - System.out.println("[Residence] - Lease Expirations checked!"); - } - } - }; - private Runnable autoSave = new Runnable() { - public void run() { - try { - if (initsuccess) { - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { - @Override - public void run() { - try { - saveYml(); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - }); - } - } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); - } - } - }; - - public Residence() { - } - - public void reloadPlugin() { - this.onDisable(); - this.reloadConfig(); - this.onEnable(); - } - - @Override - public void onDisable() { - server.getScheduler().cancelTask(autosaveBukkitId); - server.getScheduler().cancelTask(healBukkitId); - - server.getScheduler().cancelTask(DespawnMobsBukkitId); - - if (cmanager.useLeases()) { - server.getScheduler().cancelTask(leaseBukkitId); - } - if (cmanager.enabledRentSystem()) { - server.getScheduler().cancelTask(rentBukkitId); - } - if (initsuccess) { - try { - saveYml(); - ZipLibrary.backup(); - } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); - } - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Disabled!"); - } - } - - @Override - public void onEnable() { - try { - instance = this; - initsuccess = false; - deleteConfirm = new HashMap(); - resadminToggle = new ArrayList(); - server = this.getServer(); - dataFolder = this.getDataFolder(); - if (!dataFolder.isDirectory()) { - dataFolder.mkdirs(); - } - - if (!new File(dataFolder, "groups.yml").isFile() && new File(dataFolder, "config.yml").isFile()) { - this.ConvertGroupFile(); - } - - if (!new File(dataFolder, "config.yml").isFile()) { - this.writeDefaultConfigFromJar(); - this.writeDefaultGroupsFromJar(); - this.writeDefaultFlagsFromJar(); - } - - this.getCommand("res").setTabCompleter(new TabComplete()); - -// Residence.getConfigManager().UpdateConfigFile(); - -// if (this.getConfig().getInt("ResidenceVersion", 0) == 0) { -// this.writeDefaultConfigFromJar(); -// this.getConfig().load("config.yml"); -// System.out.println("[Residence] Config Invalid, wrote default..."); -// } - - FileConfiguration canfig = YamlConfiguration.loadConfiguration(new File(dataFolder, "config.yml")); - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(dataFolder, "flags.yml")); - FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(dataFolder, "groups.yml")); - cmanager = new ConfigManager(canfig, flags, groups); - String multiworld = cmanager.getMultiworldPlugin(); - if (multiworld != null) { - Plugin plugin = server.getPluginManager().getPlugin(multiworld); - if (plugin != null) { - if (!plugin.isEnabled()) { - System.out.println("[Residence] - Enabling multiworld plugin: " + multiworld); - server.getPluginManager().enablePlugin(plugin); - } - } - } - - gmanager = new PermissionManager(groups, flags); - - imanager = new WorldItemManager(flags); - wmanager = new WorldFlagManager(flags, groups); - - chatmanager = new ChatManager(); - rentmanager = new RentManager(); - - for (String lang : validLanguages) { - - YmlMaker langFile = new YmlMaker((JavaPlugin) Residence.instance, "Language" + File.separator + lang + ".yml"); - if (langFile != null) { - langFile.saveDefaultConfig(); - } - } - - for (String lang : validLanguages) { - Locale.LoadLang(lang); - } - - NewLanguage.reload(); - - try { - File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); - if (langFile.isFile()) { - FileConfiguration langconfig = new YamlConfiguration(); - langconfig.load(langFile); - helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - HelpEntry.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); - InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); - language = Language.parseText(langconfig, "Language"); - } else { - System.out.println("[Residence] Language file does not exist..."); - } - } catch (Exception ex) { - System.out.println("[Residence] Failed to load language file: " + cmanager.getLanguage() + ".yml, Error: " + ex.getMessage()); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - helppages = new HelpEntry(""); - language = new Language(); - } - economy = null; - if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { - System.out.println("[Residence] Scanning for economy systems..."); - if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { - ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); - if (vault.economyOK()) { - economy = vault; - System.out.println("[Residence] Found Vault using economy system: " + vault.getEconomyName()); - } - } - if (economy == null) { - this.loadVaultEconomy(); - } - if (economy == null) { - this.loadBOSEconomy(); - } - if (economy == null) { - this.loadEssentialsEconomy(); - } - if (economy == null) { - this.loadRealEconomy(); - } - if (economy == null) { - this.loadIConomy(); - } - if (economy == null) { - System.out.println("[Residence] Unable to find an economy system..."); - } - } - try { - this.loadYml(); - } catch (Exception e) { - this.getLogger().log(Level.SEVERE, "Unable to load save file", e); - throw e; - } - - if (Residence.getConfigManager().isUseResidenceFileClean()) - FileCleanUp.cleanFiles(); - - if (rmanager == null) { - rmanager = new ResidenceManager(); - } - if (leasemanager == null) { - leasemanager = new LeaseManager(rmanager); - } - if (tmanager == null) { - tmanager = new TransactionManager(rmanager, gmanager); - } - if (pmanager == null) { - pmanager = new PermissionListManager(); - } - if (firstenable) { - if (!this.isEnabled()) { - return; - } - FlagPermissions.initValidFlags(); - Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); - if (plugin != null) { - smanager = new WorldEditSelectionManager(server); - wep = (WorldEditPlugin) plugin; - wepid = ((WorldEditPlugin) Residence.wep).getConfig().getInt("wand-item"); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldEdit"); - } else { - smanager = new SelectionManager(server); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldEdit NOT found!"); - } - - Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); - if (wgplugin == null) { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldGuard NOT found!"); - } else { - wg = (WorldGuardPlugin) wgplugin; - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldGuard"); - } - - blistener = new ResidenceBlockListener(); - plistener = new ResidencePlayerListener(); - elistener = new ResidenceEntityListener(); - PluginManager pm = getServer().getPluginManager(); - pm.registerEvents(blistener, this); - pm.registerEvents(plistener, this); - pm.registerEvents(elistener, this); - - if (getServer().getPluginManager().getPlugin("CrackShot") != null) - pm.registerEvents(new CrackShot(), this); - - // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, - // Priority.NORMAL, this); - if (cmanager.enableSpout()) { - slistener = new ResidenceSpoutListener(); - pm.registerEvents(slistener, this); - } - firstenable = false; - } else { - plistener.reload(); - } - int autosaveInt = cmanager.getAutoSaveInterval(); - if (autosaveInt < 1) { - autosaveInt = 1; - } - autosaveInt = autosaveInt * 60 * 20; - autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); - healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, 20); - if (Residence.getConfigManager().AutoMobRemoval()) - DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * Residence.getConfigManager().AutoMobRemovalInterval(), 20 - * Residence.getConfigManager().AutoMobRemovalInterval()); - - if (cmanager.useLeases()) { - int leaseInterval = cmanager.getLeaseCheckInterval(); - if (leaseInterval < 1) { - leaseInterval = 1; - } - leaseInterval = leaseInterval * 60 * 20; - leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval); - } - if (cmanager.enabledRentSystem()) { - int rentint = cmanager.getRentCheckInterval(); - if (rentint < 1) { - rentint = 1; - } - rentint = rentint * 60 * 20; - rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); - } - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - turnResAdminOn(player); - } - } - try { - Metrics metrics = new Metrics(this); - metrics.start(); - } catch (IOException e) { - // Failed to submit the stats :-( - } - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Enabled! Version " + this.getDescription().getVersion() + " by bekvon"); - initsuccess = true; - } catch (Exception ex) { - initsuccess = false; - getServer().getPluginManager().disablePlugin(this); - System.out.println("[Residence] - FAILED INITIALIZATION! DISABLED! ERROR:"); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - } - - SignUtil.LoadSigns(); - - //versionChecker = new VersionChecker(this); - // versionChecker.VersionCheck(null); - } - - public void consoleMessage(String message) { - ConsoleCommandSender console = Bukkit.getConsoleSender(); - console.sendMessage("[Residence] " + message); - } - - public static boolean validName(String name) { - if (name.contains(":") || name.contains(".")) { - return false; - } - if (cmanager.getResidenceNameRegex() == null) { - return true; - } else { - String namecheck = name.replaceAll(cmanager.getResidenceNameRegex(), ""); - if (!name.equals(namecheck)) { - return false; - } - return true; - } - } - - public static VersionChecker getVersionChecker() { - return versionChecker; - } - - public static File getDataLocation() { - return dataFolder; - } - - public static ResidenceManager getResidenceManager() { - return rmanager; - } - - public static SelectionManager getSelectionManager() { - return smanager; - } - - public static PermissionManager getPermissionManager() { - return gmanager; - } - - public static EconomyInterface getEconomyManager() { - return economy; - } - - public static Server getServ() { - return server; - } - - public static LeaseManager getLeaseManager() { - return leasemanager; - } - - public static ConfigManager getConfigManager() { - return cmanager; - } - - public static TransactionManager getTransactionManager() { - return tmanager; - } - - public static WorldItemManager getItemManager() { - return imanager; - } - - public static WorldFlagManager getWorldFlags() { - return wmanager; - } - - public static RentManager getRentManager() { - return rentmanager; - } - - public static ResidencePlayerListener getPlayerListener() { - return plistener; - } - - public static ResidenceBlockListener getBlockListener() { - return blistener; - } - - public static ResidenceEntityListener getEntityListener() { - return elistener; - } - - public static ChatManager getChatManager() { - return chatmanager; - } - - public static Language getLanguage() { - if (language == null) { - language = new Language(); - } - return language; - } - - public static FlagPermissions getPermsByLoc(Location loc) { - ClaimedResidence res = rmanager.getByLoc(loc); - if (res != null) { - return res.getPermissions(); - } else { - return wmanager.getPerms(loc.getWorld().getName()); - } - } - - public static FlagPermissions getPermsByLocForPlayer(Location loc, Player player) { - ClaimedResidence res = rmanager.getByLoc(loc); - if (res != null) { - return res.getPermissions(); - } else { - if (player != null) - return wmanager.getPerms(player); - else - return wmanager.getPerms(loc.getWorld().getName()); - } - } - - private void loadIConomy() { - Plugin p = getServer().getPluginManager().getPlugin("iConomy"); - if (p != null) { - if (p.getDescription().getVersion().startsWith("6")) { - economy = new IConomy6Adapter((com.iCo6.iConomy) p); - } else if (p.getDescription().getVersion().startsWith("5")) { - economy = new IConomy5Adapter(); - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] UNKNOWN iConomy version!"); - return; - } - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with iConomy! Version: " + p.getDescription().getVersion()); - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] iConomy NOT found!"); - } - } - - private void loadBOSEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("BOSEconomy"); - if (p != null) { - economy = new BOSEAdapter((BOSEconomy) p); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with BOSEconomy!"); - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] BOSEconomy NOT found!"); - } - } - - private void loadEssentialsEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("Essentials"); - if (p != null) { - economy = new EssentialsEcoAdapter((Essentials) p); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with Essentials Economy!"); - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Essentials Economy NOT found!"); - } - } - - private void loadRealEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); - if (p != null) { - economy = new RealShopEconomy(new RealEconomy((RealPlugin) p)); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with RealShop Economy!"); - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] RealShop Economy NOT found!"); - } - } - - private void loadVaultEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("Vault"); - if (p != null) { - ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); - if (vault.economyOK()) { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault using economy: " + vault.getEconomyName()); - economy = vault; - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault, but Vault reported no usable economy system..."); - } - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Vault NOT found!"); - } - } - - public static boolean isResAdminOn(Player player) { - if (resadminToggle.contains(player.getName())) { - return true; - } - return false; - } - - public static void turnResAdminOn(Player player) { - resadminToggle.add(player.getName()); - } - - public static boolean isResAdminOn(String player) { - if (resadminToggle.contains(player)) - return true; - return false; - } - - private void saveYml() throws IOException { - File saveFolder = new File(dataFolder, "Save"); - File worldFolder = new File(saveFolder, "Worlds"); - worldFolder.mkdirs(); - YMLSaveHelper yml; - Map save = rmanager.save(); - for (Entry entry : save.entrySet()) { - File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); - File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - World world = server.getWorld(entry.getKey()); - if (world != null) - yml.getRoot().put("Seed", world.getSeed()); - yml.getRoot().put("Residences", (Map) entry.getValue()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(worldFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - } - - // For Sale save - File ymlSaveLoc = new File(saveFolder, "forsale.yml"); - File tmpFile = new File(saveFolder, "tmp_forsale.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.save(); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("Economy", tmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "forsale.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // Leases save - ymlSaveLoc = new File(saveFolder, "leases.yml"); - tmpFile = new File(saveFolder, "tmp_leases.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("Leases", leasemanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "leases.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // permlist save - ymlSaveLoc = new File(saveFolder, "permlists.yml"); - tmpFile = new File(saveFolder, "tmp_permlists.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("PermissionLists", pmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "permlists.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // rent save - ymlSaveLoc = new File(saveFolder, "rent.yml"); - tmpFile = new File(saveFolder, "tmp_rent.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("RentSystem", rentmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "rent.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - if (cmanager.showIntervalMessages()) { - System.out.println("[Residence] - Saved Residences..."); - } - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - protected boolean loadYml() throws Exception { - File saveFolder = new File(dataFolder, "Save"); - try { - File worldFolder = new File(saveFolder, "Worlds"); - if (!saveFolder.isDirectory()) { - this.getLogger().warning("Save directory does not exist..."); - this.getLogger().warning("Please restart server"); - return true; - } - long time; - YMLSaveHelper yml; - File loadFile; - HashMap worlds = new HashMap<>(); - for (World world : getServ().getWorlds()) { - loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); - if (loadFile.isFile()) { - time = System.currentTimeMillis(); - this.getLogger().info("Loading save data for world " + world.getName() + "..."); - yml = new YMLSaveHelper(loadFile); - yml.load(); - worlds.put(world.getName(), yml.getRoot().get("Residences")); - this.getLogger().info("Save data for world " + world.getName() + " loaded. (" + ((float) (System.currentTimeMillis() - time) / 1000) + " secs)"); - } - } - rmanager = ResidenceManager.load(worlds); - loadFile = new File(saveFolder, "forsale.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - tmanager = TransactionManager.load((Map) yml.getRoot().get("Economy"), gmanager, rmanager); - } - loadFile = new File(saveFolder, "leases.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - leasemanager = LeaseManager.load((Map) yml.getRoot().get("Leases"), rmanager); - } - loadFile = new File(saveFolder, "permlists.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - pmanager = PermissionListManager.load((Map) yml.getRoot().get("PermissionLists")); - } - loadFile = new File(saveFolder, "rent.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - rentmanager = RentManager.load((Map) yml.getRoot().get("RentSystem")); - } - // System.out.print("[Residence] Loaded..."); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - throw ex; - } - } - - private void writeDefaultConfigFromJar() { - if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), "config.yml", true)) { - System.out.println("[Residence] Wrote default config..."); - } - } - - private void writeDefaultGroupsFromJar() { - if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "groups.yml"), "groups.yml", true)) { - System.out.println("[Residence] Wrote default groups..."); - } - } - - private void writeDefaultFlagsFromJar() { - if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "flags.yml"), "flags.yml", true)) { - System.out.println("[Residence] Wrote default flags..."); - } - } - - private void ConvertGroupFile() { - File file = new File(this.getDataFolder(), "config.yml"); - - File file_old = new File(this.getDataFolder(), "config_old.yml"); - - File newfile = new File(this.getDataFolder(), "groups.yml"); - - File newTempFlags = new File(this.getDataFolder(), "flags.yml"); - - try { - copy(file, file_old); - } catch (IOException e1) { - e1.printStackTrace(); - } - - try { - copy(file, newfile); - } catch (IOException e1) { - e1.printStackTrace(); - } - - try { - copy(file, newTempFlags); - } catch (IOException e1) { - e1.printStackTrace(); - } - - File newGroups = new File(this.getDataFolder(), "config.yml"); - - List list = new ArrayList(); - list.add("ResidenceVersion"); - list.add("Global.Flags"); - list.add("Global.FlagPermission"); - list.add("Global.ResidenceDefault"); - list.add("Global.CreatorDefault"); - list.add("Global.GroupDefault"); - list.add("Groups"); - list.add("GroupAssignments"); - list.add("ItemList"); - - try { - remove(newGroups, list); - } catch (IOException e) { - e.printStackTrace(); - } - - File newConfig = new File(this.getDataFolder(), "groups.yml"); - list.clear(); - list = new ArrayList(); - list.add("ResidenceVersion"); - list.add("Global"); - list.add("ItemList"); - - try { - remove(newConfig, list); - } catch (IOException e) { - e.printStackTrace(); - } - - File newFlags = new File(this.getDataFolder(), "flags.yml"); - list.clear(); - list = new ArrayList(); - list.add("ResidenceVersion"); - list.add("GroupAssignments"); - list.add("Groups"); - list.add("Global.Language"); - list.add("Global.SelectionToolId"); - list.add("Global.InfoToolId"); - list.add("Global.MoveCheckInterval"); - list.add("Global.SaveInterval"); - list.add("Global.DefaultGroup"); - list.add("Global.UseLeaseSystem"); - list.add("Global.LeaseCheckInterval"); - list.add("Global.LeaseAutoRenew"); - list.add("Global.EnablePermissions"); - list.add("Global.LegacyPermissions"); - list.add("Global.EnableEconomy"); - list.add("Global.EnableRentSystem"); - list.add("Global.RentCheckInterval"); - list.add("Global.ResidenceChatEnable"); - list.add("Global.UseActionBar"); - list.add("Global.ResidenceChatColor"); - list.add("Global.AdminOnlyCommands"); - list.add("Global.AdminOPs"); - list.add("Global.MultiWorldPlugin"); - list.add("Global.ResidenceFlagsInherit"); - list.add("Global.PreventRentModify"); - list.add("Global.StopOnSaveFault"); - list.add("Global.ResidenceNameRegex"); - list.add("Global.ShowIntervalMessages"); - list.add("Global.VersionCheck"); - list.add("Global.CustomContainers"); - list.add("Global.CustomBothClick"); - list.add("Global.CustomRightClick"); - - try { - remove(newFlags, list); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private void remove(File newGroups, List list) throws IOException { - - YamlConfiguration conf = YamlConfiguration.loadConfiguration(newGroups); - conf.options().copyDefaults(true); - - for (String one : list) { - conf.set(one, null); - } - try { - conf.save(newGroups); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private void copy(File source, File target) throws IOException { - InputStream in = new FileInputStream(source); - OutputStream out = new FileOutputStream(target); - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - in.close(); - out.close(); - } - -// private void writeDefaultLanguageFile(String lang) { -// File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); -// outFile.getParentFile().mkdirs(); -// if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang + ".yml", true)) { -// System.out.println("[Residence] Wrote default " + lang + " Language file..."); -// } -// } -// -// private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException { -// File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); -// File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + ".yml"); -// if (outFile.isFile()) { -// FileConfiguration testconfig = new YamlConfiguration(); -// testconfig.load(outFile); -// int oldversion = testconfig.getInt("FieldsVersion", 0); -// if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false)) { -// return false; -// } -// FileConfiguration testconfig2 = new YamlConfiguration(); -// testconfig2.load(checkFile); -// int newversion = testconfig2.getInt("FieldsVersion", oldversion); -// if (checkFile.isFile()) { -// checkFile.delete(); -// } -// if (newversion > oldversion) { -// return true; -// } -// return false; -// } -// return true; -// } - - private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) { - try { - File fileBackup = new File(this.getDataFolder(), "backup-" + writeName); - File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile(); - if (jarloc.isFile()) { - JarFile jar = new JarFile(jarloc); - JarEntry entry = jar.getJarEntry(jarPath); - if (entry != null && !entry.isDirectory()) { - InputStream in = jar.getInputStream(entry); - InputStreamReader isr = new InputStreamReader(in, "UTF8"); - if (writeName.isFile()) { - if (backupOld) { - if (fileBackup.isFile()) { - fileBackup.delete(); - } - writeName.renameTo(fileBackup); - } else { - writeName.delete(); - } - } - FileOutputStream out = new FileOutputStream(writeName); - OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); - char[] tempbytes = new char[512]; - int readbytes = isr.read(tempbytes, 0, 512); - while (readbytes > -1) { - osw.write(tempbytes, 0, readbytes); - readbytes = isr.read(tempbytes, 0, 512); - } - osw.close(); - isr.close(); - return true; - } - jar.close(); - } - return false; - } catch (Exception ex) { - System.out.println("[Residence] Failed to write file: " + writeName); - return false; - } - } - - public static UUID getPlayerUUID(String playername) { - Player p = Residence.getServ().getPlayer(playername); - if (p == null) { - if (UUIDList.size() == 0) { - for (OfflinePlayer player : Residence.getServ().getOfflinePlayers()) { - UUIDList.put(player.getName().toLowerCase(), player.getUniqueId()); - } - } - - if (UUIDList.containsKey(playername.toLowerCase())) - return UUIDList.get(playername.toLowerCase()); - - } else - return p.getUniqueId(); - return null; - } - - public static String getPlayerUUIDString(String playername) { - UUID playerUUID = Residence.getPlayerUUID(playername); - if (playerUUID != null) - return playerUUID.toString(); - return null; - } - - public static String getPlayerName(String uuid) { - try { - return Residence.getPlayerName(UUID.fromString(uuid)); - } catch (IllegalArgumentException ex) { - } - return null; - } - - public static String getPlayerName(UUID uuid) { - OfflinePlayer p = Residence.getServ().getPlayer(uuid); - if (p == null) - p = Residence.getServ().getOfflinePlayer(uuid); - if (p != null) - return p.getName(); - else - return null; - } -} +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.bekvon.bukkit.residence; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Server; +import org.bukkit.World; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + +import com.bekvon.bukkit.residence.Signs.SignUtil; +import com.bekvon.bukkit.residence.chat.ChatManager; +import com.bekvon.bukkit.residence.economy.BOSEAdapter; +import com.bekvon.bukkit.residence.economy.EconomyInterface; +import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter; +import com.bekvon.bukkit.residence.economy.IConomy5Adapter; +import com.bekvon.bukkit.residence.economy.IConomy6Adapter; +import com.bekvon.bukkit.residence.economy.RealShopEconomy; +import com.bekvon.bukkit.residence.economy.TransactionManager; +import com.bekvon.bukkit.residence.economy.rent.RentManager; +import com.bekvon.bukkit.residence.itemlist.WorldItemManager; +import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; +import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; +import com.bekvon.bukkit.residence.permissions.PermissionManager; +import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.LeaseManager; +import com.bekvon.bukkit.residence.protection.PermissionListManager; +import com.bekvon.bukkit.residence.protection.ResidenceManager; +import com.bekvon.bukkit.residence.protection.WorldFlagManager; +import com.bekvon.bukkit.residence.selection.SelectionManager; +import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; +import com.bekvon.bukkit.residence.spout.ResidenceSpoutListener; +import com.bekvon.bukkit.residence.text.Language; +import com.bekvon.bukkit.residence.text.help.HelpEntry; +import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.CrackShot; +import com.bekvon.bukkit.residence.utils.FileCleanUp; +import com.bekvon.bukkit.residence.utils.TabComplete; +import com.bekvon.bukkit.residence.utils.VersionChecker; +import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; +import com.earth2me.essentials.Essentials; +import com.residence.mcstats.Metrics; +import com.residence.zip.ZipLibrary; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; + +import cosine.boseconomy.BOSEconomy; +import fr.crafter.tickleman.realeconomy.RealEconomy; +import fr.crafter.tickleman.realplugin.RealPlugin; + +import java.util.UUID; +import org.bukkit.OfflinePlayer; + +/** + * + * @author Gary Smoak - bekvon + * + */ +public class Residence extends JavaPlugin { + + protected static ResidenceManager rmanager; + protected static SelectionManager smanager; + protected static PermissionManager gmanager; + protected static ConfigManager cmanager; + protected static ResidenceBlockListener blistener; + protected static ResidencePlayerListener plistener; + protected static ResidenceEntityListener elistener; + protected static ResidenceSpoutListener slistener; + protected static TransactionManager tmanager; + protected static PermissionListManager pmanager; + protected static LeaseManager leasemanager; + protected static WorldItemManager imanager; + protected static WorldFlagManager wmanager; + protected static RentManager rentmanager; + protected static ChatManager chatmanager; + protected static Server server; + protected static HelpEntry helppages; + protected static Language language; + public static Plugin instance; + protected boolean firstenable = true; + protected static EconomyInterface economy; + public final static int saveVersion = 1; + protected static File dataFolder; + protected static int leaseBukkitId = -1; + protected static int rentBukkitId = -1; + protected static int healBukkitId = -1; + + protected static int DespawnMobsBukkitId = -1; + + protected static int autosaveBukkitId = -1; + protected static VersionChecker versionChecker; + protected static boolean initsuccess = false; + protected Map deleteConfirm; + protected static List resadminToggle; + private final static String[] validLanguages = { "English", "German", "French", "Hungarian", "Spanish", "Chinese", "Czech", "Brazilian", "Polish", "Lithuanian" }; + public static HashMap UUIDList = new HashMap(); + public static WorldEditPlugin wep = null; + public static WorldGuardPlugin wg = null; + public static int wepid; + + private Runnable doHeals = new Runnable() { + public void run() { + plistener.doHeals(); + } + }; + + private Runnable DespawnMobs = new Runnable() { + public void run() { + plistener.DespawnMobs(); + } + }; + + private Runnable rentExpire = new Runnable() { + public void run() { + rentmanager.checkCurrentRents(); + if (cmanager.showIntervalMessages()) { + System.out.println("[Residence] - Rent Expirations checked!"); + } + } + }; + private Runnable leaseExpire = new Runnable() { + public void run() { + leasemanager.doExpirations(); + if (cmanager.showIntervalMessages()) { + System.out.println("[Residence] - Lease Expirations checked!"); + } + } + }; + private Runnable autoSave = new Runnable() { + public void run() { + try { + if (initsuccess) { + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + try { + saveYml(); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + }); + } + } catch (Exception ex) { + Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); + } + } + }; + + public Residence() { + } + + public void reloadPlugin() { + this.onDisable(); + this.reloadConfig(); + this.onEnable(); + } + + @Override + public void onDisable() { + server.getScheduler().cancelTask(autosaveBukkitId); + server.getScheduler().cancelTask(healBukkitId); + + server.getScheduler().cancelTask(DespawnMobsBukkitId); + + if (cmanager.useLeases()) { + server.getScheduler().cancelTask(leaseBukkitId); + } + if (cmanager.enabledRentSystem()) { + server.getScheduler().cancelTask(rentBukkitId); + } + if (initsuccess) { + try { + saveYml(); + ZipLibrary.backup(); + } catch (Exception ex) { + Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); + } + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Disabled!"); + } + } + + @Override + public void onEnable() { + try { + + instance = this; + initsuccess = false; + deleteConfirm = new HashMap(); + resadminToggle = new ArrayList(); + server = this.getServer(); + dataFolder = this.getDataFolder(); + if (!dataFolder.isDirectory()) { + dataFolder.mkdirs(); + } + + if (!new File(dataFolder, "groups.yml").isFile() && new File(dataFolder, "config.yml").isFile()) { + this.ConvertGroupFile(); + } + + if (!new File(dataFolder, "config.yml").isFile()) { + this.writeDefaultConfigFromJar(); + this.writeDefaultGroupsFromJar(); + this.writeDefaultFlagsFromJar(); + } + + this.getCommand("res").setTabCompleter(new TabComplete()); + +// Residence.getConfigManager().UpdateConfigFile(); + +// if (this.getConfig().getInt("ResidenceVersion", 0) == 0) { +// this.writeDefaultConfigFromJar(); +// this.getConfig().load("config.yml"); +// System.out.println("[Residence] Config Invalid, wrote default..."); +// } + + FileConfiguration canfig = YamlConfiguration.loadConfiguration(new File(dataFolder, "config.yml")); + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(dataFolder, "flags.yml")); + FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(dataFolder, "groups.yml")); + cmanager = new ConfigManager(canfig, flags, groups); + String multiworld = cmanager.getMultiworldPlugin(); + if (multiworld != null) { + Plugin plugin = server.getPluginManager().getPlugin(multiworld); + if (plugin != null) { + if (!plugin.isEnabled()) { + System.out.println("[Residence] - Enabling multiworld plugin: " + multiworld); + server.getPluginManager().enablePlugin(plugin); + } + } + } + + gmanager = new PermissionManager(groups, flags); + + imanager = new WorldItemManager(flags); + wmanager = new WorldFlagManager(flags, groups); + + chatmanager = new ChatManager(); + rentmanager = new RentManager(); + + for (String lang : validLanguages) { + + YmlMaker langFile = new YmlMaker((JavaPlugin) Residence.instance, "Language" + File.separator + lang + ".yml"); + if (langFile != null) { + langFile.saveDefaultConfig(); + } + } + + for (String lang : validLanguages) { + Locale.LoadLang(lang); + } + + NewLanguage.reload(); + + try { + File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); + if (langFile.isFile()) { + FileConfiguration langconfig = new YamlConfiguration(); + langconfig.load(langFile); + helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); + HelpEntry.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); + InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); + language = Language.parseText(langconfig, "Language"); + } else { + System.out.println("[Residence] Language file does not exist..."); + } + } catch (Exception ex) { + System.out.println("[Residence] Failed to load language file: " + cmanager.getLanguage() + ".yml, Error: " + ex.getMessage()); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + helppages = new HelpEntry(""); + language = new Language(); + } + economy = null; + if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { + System.out.println("[Residence] Scanning for economy systems..."); + if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { + ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); + if (vault.economyOK()) { + economy = vault; + System.out.println("[Residence] Found Vault using economy system: " + vault.getEconomyName()); + } + } + if (economy == null) { + this.loadVaultEconomy(); + } + if (economy == null) { + this.loadBOSEconomy(); + } + if (economy == null) { + this.loadEssentialsEconomy(); + } + if (economy == null) { + this.loadRealEconomy(); + } + if (economy == null) { + this.loadIConomy(); + } + if (economy == null) { + System.out.println("[Residence] Unable to find an economy system..."); + } + } + try { + this.loadYml(); + } catch (Exception e) { + this.getLogger().log(Level.SEVERE, "Unable to load save file", e); + throw e; + } + + if (Residence.getConfigManager().isUseResidenceFileClean()) + FileCleanUp.cleanFiles(); + + if (rmanager == null) { + rmanager = new ResidenceManager(); + } + if (leasemanager == null) { + leasemanager = new LeaseManager(rmanager); + } + if (tmanager == null) { + tmanager = new TransactionManager(rmanager, gmanager); + } + if (pmanager == null) { + pmanager = new PermissionListManager(); + } + if (firstenable) { + if (!this.isEnabled()) { + return; + } + FlagPermissions.initValidFlags(); + Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); + if (plugin != null) { + smanager = new WorldEditSelectionManager(server); + wep = (WorldEditPlugin) plugin; + wepid = ((WorldEditPlugin) Residence.wep).getConfig().getInt("wand-item"); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldEdit"); + } else { + smanager = new SelectionManager(server); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldEdit NOT found!"); + } + + Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); + if (wgplugin == null) { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldGuard NOT found!"); + } else { + wg = (WorldGuardPlugin) wgplugin; + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldGuard"); + } + + blistener = new ResidenceBlockListener(); + plistener = new ResidencePlayerListener(); + elistener = new ResidenceEntityListener(); + PluginManager pm = getServer().getPluginManager(); + pm.registerEvents(blistener, this); + pm.registerEvents(plistener, this); + pm.registerEvents(elistener, this); + + if (getServer().getPluginManager().getPlugin("CrackShot") != null) + pm.registerEvents(new CrackShot(), this); + + // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, + // Priority.NORMAL, this); + if (cmanager.enableSpout()) { + slistener = new ResidenceSpoutListener(); + pm.registerEvents(slistener, this); + } + firstenable = false; + } else { + plistener.reload(); + } + int autosaveInt = cmanager.getAutoSaveInterval(); + if (autosaveInt < 1) { + autosaveInt = 1; + } + autosaveInt = autosaveInt * 60 * 20; + autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); + healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, 20); + if (Residence.getConfigManager().AutoMobRemoval()) + DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * Residence.getConfigManager().AutoMobRemovalInterval(), 20 + * Residence.getConfigManager().AutoMobRemovalInterval()); + + if (cmanager.useLeases()) { + int leaseInterval = cmanager.getLeaseCheckInterval(); + if (leaseInterval < 1) { + leaseInterval = 1; + } + leaseInterval = leaseInterval * 60 * 20; + leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval); + } + if (cmanager.enabledRentSystem()) { + int rentint = cmanager.getRentCheckInterval(); + if (rentint < 1) { + rentint = 1; + } + rentint = rentint * 60 * 20; + rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); + } + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + turnResAdminOn(player); + } + } + try { + Metrics metrics = new Metrics(this); + metrics.start(); + } catch (IOException e) { + // Failed to submit the stats :-( + } + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Enabled! Version " + this.getDescription().getVersion() + " by bekvon"); + initsuccess = true; + + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + for (OfflinePlayer player : Residence.getServ().getOfflinePlayers()) { + UUIDList.put(player.getName().toLowerCase(), player.getUniqueId()); + } + return; + } + }); + + } catch (Exception ex) { + initsuccess = false; + getServer().getPluginManager().disablePlugin(this); + System.out.println("[Residence] - FAILED INITIALIZATION! DISABLED! ERROR:"); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + } + + SignUtil.LoadSigns(); + + //versionChecker = new VersionChecker(this); + // versionChecker.VersionCheck(null); + } + + public void consoleMessage(String message) { + ConsoleCommandSender console = Bukkit.getConsoleSender(); + console.sendMessage("[Residence] " + message); + } + + public static boolean validName(String name) { + if (name.contains(":") || name.contains(".")) { + return false; + } + if (cmanager.getResidenceNameRegex() == null) { + return true; + } else { + String namecheck = name.replaceAll(cmanager.getResidenceNameRegex(), ""); + if (!name.equals(namecheck)) { + return false; + } + return true; + } + } + + public static VersionChecker getVersionChecker() { + return versionChecker; + } + + public static File getDataLocation() { + return dataFolder; + } + + public static ResidenceManager getResidenceManager() { + return rmanager; + } + + public static SelectionManager getSelectionManager() { + return smanager; + } + + public static PermissionManager getPermissionManager() { + return gmanager; + } + + public static EconomyInterface getEconomyManager() { + return economy; + } + + public static Server getServ() { + return server; + } + + public static LeaseManager getLeaseManager() { + return leasemanager; + } + + public static ConfigManager getConfigManager() { + return cmanager; + } + + public static TransactionManager getTransactionManager() { + return tmanager; + } + + public static WorldItemManager getItemManager() { + return imanager; + } + + public static WorldFlagManager getWorldFlags() { + return wmanager; + } + + public static RentManager getRentManager() { + return rentmanager; + } + + public static ResidencePlayerListener getPlayerListener() { + return plistener; + } + + public static ResidenceBlockListener getBlockListener() { + return blistener; + } + + public static ResidenceEntityListener getEntityListener() { + return elistener; + } + + public static ChatManager getChatManager() { + return chatmanager; + } + + public static Language getLanguage() { + if (language == null) { + language = new Language(); + } + return language; + } + + public static FlagPermissions getPermsByLoc(Location loc) { + ClaimedResidence res = rmanager.getByLoc(loc); + if (res != null) { + return res.getPermissions(); + } else { + return wmanager.getPerms(loc.getWorld().getName()); + } + } + + public static FlagPermissions getPermsByLocForPlayer(Location loc, Player player) { + ClaimedResidence res = rmanager.getByLoc(loc); + if (res != null) { + return res.getPermissions(); + } else { + if (player != null) + return wmanager.getPerms(player); + else + return wmanager.getPerms(loc.getWorld().getName()); + } + } + + private void loadIConomy() { + Plugin p = getServer().getPluginManager().getPlugin("iConomy"); + if (p != null) { + if (p.getDescription().getVersion().startsWith("6")) { + economy = new IConomy6Adapter((com.iCo6.iConomy) p); + } else if (p.getDescription().getVersion().startsWith("5")) { + economy = new IConomy5Adapter(); + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] UNKNOWN iConomy version!"); + return; + } + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with iConomy! Version: " + p.getDescription().getVersion()); + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] iConomy NOT found!"); + } + } + + private void loadBOSEconomy() { + Plugin p = getServer().getPluginManager().getPlugin("BOSEconomy"); + if (p != null) { + economy = new BOSEAdapter((BOSEconomy) p); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with BOSEconomy!"); + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] BOSEconomy NOT found!"); + } + } + + private void loadEssentialsEconomy() { + Plugin p = getServer().getPluginManager().getPlugin("Essentials"); + if (p != null) { + economy = new EssentialsEcoAdapter((Essentials) p); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with Essentials Economy!"); + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Essentials Economy NOT found!"); + } + } + + private void loadRealEconomy() { + Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); + if (p != null) { + economy = new RealShopEconomy(new RealEconomy((RealPlugin) p)); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with RealShop Economy!"); + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] RealShop Economy NOT found!"); + } + } + + private void loadVaultEconomy() { + Plugin p = getServer().getPluginManager().getPlugin("Vault"); + if (p != null) { + ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); + if (vault.economyOK()) { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault using economy: " + vault.getEconomyName()); + economy = vault; + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault, but Vault reported no usable economy system..."); + } + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Vault NOT found!"); + } + } + + public static boolean isResAdminOn(Player player) { + if (resadminToggle.contains(player.getName())) { + return true; + } + return false; + } + + public static void turnResAdminOn(Player player) { + resadminToggle.add(player.getName()); + } + + public static boolean isResAdminOn(String player) { + if (resadminToggle.contains(player)) + return true; + return false; + } + + private void saveYml() throws IOException { + File saveFolder = new File(dataFolder, "Save"); + File worldFolder = new File(saveFolder, "Worlds"); + worldFolder.mkdirs(); + YMLSaveHelper yml; + Map save = rmanager.save(); + for (Entry entry : save.entrySet()) { + File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); + File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + World world = server.getWorld(entry.getKey()); + if (world != null) + yml.getRoot().put("Seed", world.getSeed()); + yml.getRoot().put("Residences", (Map) entry.getValue()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(worldFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + } + + // For Sale save + File ymlSaveLoc = new File(saveFolder, "forsale.yml"); + File tmpFile = new File(saveFolder, "tmp_forsale.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.save(); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("Economy", tmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "forsale.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // Leases save + ymlSaveLoc = new File(saveFolder, "leases.yml"); + tmpFile = new File(saveFolder, "tmp_leases.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("Leases", leasemanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "leases.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // permlist save + ymlSaveLoc = new File(saveFolder, "permlists.yml"); + tmpFile = new File(saveFolder, "tmp_permlists.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("PermissionLists", pmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "permlists.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // rent save + ymlSaveLoc = new File(saveFolder, "rent.yml"); + tmpFile = new File(saveFolder, "tmp_rent.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("RentSystem", rentmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "rent.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + if (cmanager.showIntervalMessages()) { + System.out.println("[Residence] - Saved Residences..."); + } + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + protected boolean loadYml() throws Exception { + File saveFolder = new File(dataFolder, "Save"); + try { + File worldFolder = new File(saveFolder, "Worlds"); + if (!saveFolder.isDirectory()) { + this.getLogger().warning("Save directory does not exist..."); + this.getLogger().warning("Please restart server"); + return true; + } + long time; + YMLSaveHelper yml; + File loadFile; + HashMap worlds = new HashMap<>(); + for (World world : getServ().getWorlds()) { + loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); + if (loadFile.isFile()) { + time = System.currentTimeMillis(); + this.getLogger().info("Loading save data for world " + world.getName() + "..."); + yml = new YMLSaveHelper(loadFile); + yml.load(); + worlds.put(world.getName(), yml.getRoot().get("Residences")); + this.getLogger().info("Save data for world " + world.getName() + " loaded. (" + ((float) (System.currentTimeMillis() - time) / 1000) + " secs)"); + } + } + rmanager = ResidenceManager.load(worlds); + loadFile = new File(saveFolder, "forsale.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + tmanager = TransactionManager.load((Map) yml.getRoot().get("Economy"), gmanager, rmanager); + } + loadFile = new File(saveFolder, "leases.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + leasemanager = LeaseManager.load((Map) yml.getRoot().get("Leases"), rmanager); + } + loadFile = new File(saveFolder, "permlists.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + pmanager = PermissionListManager.load((Map) yml.getRoot().get("PermissionLists")); + } + loadFile = new File(saveFolder, "rent.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + rentmanager = RentManager.load((Map) yml.getRoot().get("RentSystem")); + } + // System.out.print("[Residence] Loaded..."); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + throw ex; + } + } + + private void writeDefaultConfigFromJar() { + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), "config.yml", true)) { + System.out.println("[Residence] Wrote default config..."); + } + } + + private void writeDefaultGroupsFromJar() { + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "groups.yml"), "groups.yml", true)) { + System.out.println("[Residence] Wrote default groups..."); + } + } + + private void writeDefaultFlagsFromJar() { + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "flags.yml"), "flags.yml", true)) { + System.out.println("[Residence] Wrote default flags..."); + } + } + + private void ConvertGroupFile() { + File file = new File(this.getDataFolder(), "config.yml"); + + File file_old = new File(this.getDataFolder(), "config_old.yml"); + + File newfile = new File(this.getDataFolder(), "groups.yml"); + + File newTempFlags = new File(this.getDataFolder(), "flags.yml"); + + try { + copy(file, file_old); + } catch (IOException e1) { + e1.printStackTrace(); + } + + try { + copy(file, newfile); + } catch (IOException e1) { + e1.printStackTrace(); + } + + try { + copy(file, newTempFlags); + } catch (IOException e1) { + e1.printStackTrace(); + } + + File newGroups = new File(this.getDataFolder(), "config.yml"); + + List list = new ArrayList(); + list.add("ResidenceVersion"); + list.add("Global.Flags"); + list.add("Global.FlagPermission"); + list.add("Global.ResidenceDefault"); + list.add("Global.CreatorDefault"); + list.add("Global.GroupDefault"); + list.add("Groups"); + list.add("GroupAssignments"); + list.add("ItemList"); + + try { + remove(newGroups, list); + } catch (IOException e) { + e.printStackTrace(); + } + + File newConfig = new File(this.getDataFolder(), "groups.yml"); + list.clear(); + list = new ArrayList(); + list.add("ResidenceVersion"); + list.add("Global"); + list.add("ItemList"); + + try { + remove(newConfig, list); + } catch (IOException e) { + e.printStackTrace(); + } + + File newFlags = new File(this.getDataFolder(), "flags.yml"); + list.clear(); + list = new ArrayList(); + list.add("ResidenceVersion"); + list.add("GroupAssignments"); + list.add("Groups"); + list.add("Global.Language"); + list.add("Global.SelectionToolId"); + list.add("Global.InfoToolId"); + list.add("Global.MoveCheckInterval"); + list.add("Global.SaveInterval"); + list.add("Global.DefaultGroup"); + list.add("Global.UseLeaseSystem"); + list.add("Global.LeaseCheckInterval"); + list.add("Global.LeaseAutoRenew"); + list.add("Global.EnablePermissions"); + list.add("Global.LegacyPermissions"); + list.add("Global.EnableEconomy"); + list.add("Global.EnableRentSystem"); + list.add("Global.RentCheckInterval"); + list.add("Global.ResidenceChatEnable"); + list.add("Global.UseActionBar"); + list.add("Global.ResidenceChatColor"); + list.add("Global.AdminOnlyCommands"); + list.add("Global.AdminOPs"); + list.add("Global.MultiWorldPlugin"); + list.add("Global.ResidenceFlagsInherit"); + list.add("Global.PreventRentModify"); + list.add("Global.StopOnSaveFault"); + list.add("Global.ResidenceNameRegex"); + list.add("Global.ShowIntervalMessages"); + list.add("Global.VersionCheck"); + list.add("Global.CustomContainers"); + list.add("Global.CustomBothClick"); + list.add("Global.CustomRightClick"); + + try { + remove(newFlags, list); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void remove(File newGroups, List list) throws IOException { + + YamlConfiguration conf = YamlConfiguration.loadConfiguration(newGroups); + conf.options().copyDefaults(true); + + for (String one : list) { + conf.set(one, null); + } + try { + conf.save(newGroups); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void copy(File source, File target) throws IOException { + InputStream in = new FileInputStream(source); + OutputStream out = new FileOutputStream(target); + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + in.close(); + out.close(); + } + +// private void writeDefaultLanguageFile(String lang) { +// File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); +// outFile.getParentFile().mkdirs(); +// if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang + ".yml", true)) { +// System.out.println("[Residence] Wrote default " + lang + " Language file..."); +// } +// } +// +// private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException { +// File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); +// File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + ".yml"); +// if (outFile.isFile()) { +// FileConfiguration testconfig = new YamlConfiguration(); +// testconfig.load(outFile); +// int oldversion = testconfig.getInt("FieldsVersion", 0); +// if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false)) { +// return false; +// } +// FileConfiguration testconfig2 = new YamlConfiguration(); +// testconfig2.load(checkFile); +// int newversion = testconfig2.getInt("FieldsVersion", oldversion); +// if (checkFile.isFile()) { +// checkFile.delete(); +// } +// if (newversion > oldversion) { +// return true; +// } +// return false; +// } +// return true; +// } + + private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) { + try { + File fileBackup = new File(this.getDataFolder(), "backup-" + writeName); + File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile(); + if (jarloc.isFile()) { + JarFile jar = new JarFile(jarloc); + JarEntry entry = jar.getJarEntry(jarPath); + if (entry != null && !entry.isDirectory()) { + InputStream in = jar.getInputStream(entry); + InputStreamReader isr = new InputStreamReader(in, "UTF8"); + if (writeName.isFile()) { + if (backupOld) { + if (fileBackup.isFile()) { + fileBackup.delete(); + } + writeName.renameTo(fileBackup); + } else { + writeName.delete(); + } + } + FileOutputStream out = new FileOutputStream(writeName); + OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); + char[] tempbytes = new char[512]; + int readbytes = isr.read(tempbytes, 0, 512); + while (readbytes > -1) { + osw.write(tempbytes, 0, readbytes); + readbytes = isr.read(tempbytes, 0, 512); + } + osw.close(); + isr.close(); + return true; + } + jar.close(); + } + return false; + } catch (Exception ex) { + System.out.println("[Residence] Failed to write file: " + writeName); + return false; + } + } + + public static UUID getPlayerUUID(String playername) { + Player p = Residence.getServ().getPlayer(playername); + if (p == null) { + if (UUIDList.size() == 0) { + for (OfflinePlayer player : Residence.getServ().getOfflinePlayers()) { + UUIDList.put(player.getName().toLowerCase(), player.getUniqueId()); + } + } + + if (UUIDList.containsKey(playername.toLowerCase())) + return UUIDList.get(playername.toLowerCase()); + + } else + return p.getUniqueId(); + return null; + } + + public static String getPlayerUUIDString(String playername) { + UUID playerUUID = Residence.getPlayerUUID(playername); + if (playerUUID != null) + return playerUUID.toString(); + return null; + } + + public static String getPlayerName(String uuid) { + try { + return Residence.getPlayerName(UUID.fromString(uuid)); + } catch (IllegalArgumentException ex) { + } + return null; + } + + public static String getPlayerName(UUID uuid) { + OfflinePlayer p = Residence.getServ().getPlayer(uuid); + if (p == null) + p = Residence.getServ().getOfflinePlayer(uuid); + if (p != null) + return p.getName(); + else + return null; + } +} diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index f684a1f4c..9a5412305 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1,1674 +1,1726 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package com.bekvon.bukkit.residence; - -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; -import org.getspout.spoutapi.SpoutManager; - -import com.bekvon.bukkit.residence.Signs.SignUtil; -import com.bekvon.bukkit.residence.chat.ChatChannel; -import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.selection.WorldGuardUtil; -import com.bekvon.bukkit.residence.spout.ResidenceSpout; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; - -public class ResidenceCommandListener extends Residence { - - public static HashMap teleportMap = new HashMap(); - public static List teleportDelayMap = new ArrayList(); - - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); - server.getPluginManager().callEvent(cevent); - if (cevent.isCancelled()) { - return true; - } - if (command.getName().equals("resreload") && args.length == 0) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - this.reloadPlugin(); - sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); - System.out.println("[Residence] Reloaded by " + player.getName() + "."); - } else - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - } else { - this.reloadPlugin(); - System.out.println("[Residence] Reloaded by console."); - } - return true; - } - if (command.getName().equals("ressignconvert") && args.length == 0) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - SignUtil.convertSigns(sender); - } else - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - } else { - SignUtil.convertSigns(sender); - } - return true; - } - if (command.getName().equals("resload")) { - if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender)) { - try { - this.loadYml(); - sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); - } catch (Exception ex) { - sender.sendMessage(ChatColor.RED + "[Residence] Unable to reload the save file, exception occured!"); - sender.sendMessage(ChatColor.RED + ex.getMessage()); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - } - } else - sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } else if (command.getName().equals("resworld")) { - if (args.length == 2 && args[0].equalsIgnoreCase("remove")) { - if (sender instanceof ConsoleCommandSender) { - rmanager.removeAllFromWorld(sender, args[1]); - return true; - } else { - sender.sendMessage(ChatColor.RED + "MUST be run from console."); - } - } - return false; - } else if (command.getName().equals("rc")) { - if (sender instanceof Player) { - Player player = (Player) sender; - String pname = player.getName(); - if (cmanager.chatEnabled()) { - if (args.length == 0) { - plistener.tooglePlayerResidenceChat(player); - } else { - String area = plistener.getCurrentResidenceName(pname); - if (area != null) { - ChatChannel channel = chatmanager.getChannel(area); - if (channel != null) { - String message = ""; - for (String arg : args) { - message = message + " " + arg; - } - channel.chat(pname, message); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidChannel")); - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); - } - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("ChatDisabled")); - } - } - return true; - } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { - boolean resadmin = false; - if (sender instanceof Player) { - if (command.getName().equals("resadmin") && gmanager.isResidenceAdmin((Player) sender)) { - resadmin = true; - } - if (command.getName().equals("resadmin") && !gmanager.isResidenceAdmin((Player) sender)) { - ((Player) sender).sendMessage(ChatColor.RED + language.getPhrase("NonAdmin")); - return true; - } - } else { - resadmin = true; - } - return commandRes(args, resadmin, command, sender); - } - return super.onCommand(sender, command, label, args); - } - - @SuppressWarnings("deprecation") - private boolean commandRes(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { - return commandHelp(args, resadmin, sender); - } - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - Player player = null; - PermissionGroup group = null; - String pname = null; - if (sender instanceof Player) { - player = (Player) sender; - group = Residence.getPermissionManager().getGroup(player); - pname = player.getName(); - } else { - resadmin = true; - } - if (cmanager.allowAdminsOnly()) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("AdminOnly")); - return true; - } - } - if (args.length == 0) { - return false; - } - if (args.length == 0) { - args = new String[1]; - args[0] = "?"; - } - String cmd = args[0].toLowerCase(); - if (cmd.equals("remove") || cmd.equals("delete")) { - return commandResRemove(args, resadmin, sender, page); - } - if (cmd.equals("confirm")) { - return commandResConfirm(args, resadmin, sender, page); - } - if (cmd.equals("version")) { - sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + this - .getDescription().getVersion()); - sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); - sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); - sender.sendMessage(ChatColor.GREEN + "Maintained by: " + ChatColor.YELLOW + "Zrips"); - String names = null; - List authlist = this.getDescription().getAuthors(); - for (String auth : authlist) { - if (names == null) - names = auth; - else - names = names + ", " + auth; - } - sender.sendMessage(ChatColor.GREEN + "Authors: " + ChatColor.YELLOW + names); - sender.sendMessage(ChatColor.DARK_AQUA + "For a command list, and help, see the wiki:"); - sender.sendMessage(ChatColor.GREEN + "https://github.com/bekvon/Residence/wiki"); - sender.sendMessage(ChatColor.AQUA + "Visit the Spigot Resource page at:"); - sender.sendMessage(ChatColor.BLUE + "https://www.spigotmc.org/resources/residence.11480/"); - sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - return true; - } - if (cmd.equals("setowner") && args.length == 3) { - if (!resadmin) { - sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().setOwner(args[2], true); - if (area.getParent() == null) { - sender.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "." - + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); - } else { - sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange", ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split( - "\\.").length - 1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); - } - } else { - sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - if (player == null) { - return true; - } - if (command.getName().equals("resadmin")) { - if (args.length == 1 && args[0].equals("on")) { - resadminToggle.add(player.getName()); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("AdminToggle", language.getPhrase("TurnOn"))); - return true; - } else if (args.length == 1 && args[0].equals("off")) { - resadminToggle.remove(player.getName()); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("AdminToggle", language.getPhrase("TurnOff"))); - return true; - } - } - if (!resadmin && resadminToggle.contains(player.getName())) { - if (!gmanager.isResidenceAdmin(player)) { - resadminToggle.remove(player.getName()); - } - } - if (cmd.equals("select")) { - return commandResSelect(args, resadmin, player, page); - } - - if (cmd.equals("expand")) { - return commandResExpand(args, resadmin, player, page); - } - - if (cmd.equals("contract")) { - return commandResContract(args, resadmin, player, page); - } - - if (cmd.equals("create")) { - return commandResCreate(args, resadmin, player, page); - } - if (cmd.equals("subzone") || cmd.equals("sz")) { - return commandResSubzone(args, resadmin, player, page); - } - if (cmd.equals("gui")) { - return commandResGui(args, resadmin, player, page); - } - if (cmd.equals("sublist")) { - return commandResSublist(args, resadmin, player, page); - } - if (cmd.equals("removeall")) { - if (args.length != 2) { - return false; - } - if (resadmin || args[1].endsWith(pname)) { - rmanager.removeAllByOwner(player, args[1]); - player.sendMessage(ChatColor.GREEN + language.getPhrase("RemovePlayersResidences", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - } - return true; - } - if (cmd.equals("compass")) { - return commandResCompass(args, resadmin, player, page); - } - if (cmd.equals("area")) { - return commandResArea(args, resadmin, player, page); - } - if (cmd.equals("lists")) { - return commandResList(args, resadmin, player, page); - } - if (cmd.equals("default")) { - if (args.length == 2) { - ClaimedResidence res = rmanager.getByName(args[1]); - res.getPermissions().applyDefaultFlags(player, resadmin); - return true; - } - return false; - } - if (cmd.equals("limits")) { - if (args.length == 1) { - gmanager.getGroup(player).printLimits(player); - return true; - } - return false; - } - if (cmd.equals("info")) { - if (args.length == 1) { - String area = rmanager.getNameByLoc(player.getLocation()); - if (area != null) { - rmanager.printAreaInfo(area, player); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 2) { - rmanager.printAreaInfo(args[1], player); - return true; - } - return false; - } - if (cmd.equals("check")) { - if (args.length == 3 || args.length == 4) { - if (args.length == 4) { - pname = args[3]; - } - ClaimedResidence res = rmanager.getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { - player.sendMessage(language.getPhrase("FlagCheckFalse", ChatColor.YELLOW + args[2] + ChatColor.RED + "." + ChatColor.YELLOW + pname + ChatColor.RED - + "." + ChatColor.YELLOW + args[1] + ChatColor.RED)); - } else { - player.sendMessage(language.getPhrase("FlagCheckTrue", ChatColor.GREEN + args[2] + ChatColor.YELLOW + "." + ChatColor.GREEN + pname + ChatColor.YELLOW - + "." + ChatColor.YELLOW + args[1] + ChatColor.RED + "." + (res.getPermissions().playerHas(pname, res.getPermissions().getWorld(), args[2], false) - ? ChatColor.GREEN + "TRUE" : ChatColor.RED + "FALSE"))); - } - return true; - } - return false; - } - if (cmd.equals("current")) { - if (args.length != 1) { - return false; - } - String res = rmanager.getNameByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); - } else { - player.sendMessage(ChatColor.GREEN + language.getPhrase("InResidence", ChatColor.YELLOW + res + ChatColor.GREEN)); - } - return true; - } - if (cmd.equals("set")) { - return commandResSet(args, resadmin, player, page); - } - if (cmd.equals("pset")) { - return commandResPset(args, resadmin, player, page); - } - if (cmd.equals("gset")) { - return commandResGset(args, resadmin, player, page); - } - if (cmd.equals("lset")) { - return commandResLset(args, resadmin, player, page); - } - if (cmd.equals("list")) { - if (args.length == 1) { - rmanager.listResidences(player); - return true; - } else if (args.length == 2) { - try { - Integer.parseInt(args[1]); - rmanager.listResidences(player, page); - } catch (Exception ex) { - rmanager.listResidences(player, args[1]); - } - return true; - } else if (args.length == 3) { - rmanager.listResidences(player, args[1], page); - return true; - } - return false; - } - if (cmd.equals("listhidden")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - if (args.length == 1) { - rmanager.listResidences(player, 1, true); - return true; - } else if (args.length == 2) { - try { - Integer.parseInt(args[1]); - rmanager.listResidences(player, page, true); - } catch (Exception ex) { - rmanager.listResidences(player, args[1], 1, true); - } - return true; - } else if (args.length == 3) { - rmanager.listResidences(player, args[1], page, true); - return true; - } - return false; - } - if (cmd.equals("rename")) { - if (args.length == 3) { - rmanager.renameResidence(player, args[1], args[2], resadmin); - return true; - } - return false; - } - if (cmd.equals("renamearea")) { - if (args.length == 4) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - res.renameArea(player, args[2], args[3], resadmin); - return true; - } - return false; - } - if (cmd.equals("unstuck")) { - if (args.length != 1) { - return false; - } - group = gmanager.getGroup(player); - if (!group.hasUnstuckAccess()) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - ClaimedResidence res = rmanager.getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); - } else { - player.sendMessage(ChatColor.YELLOW + language.getPhrase("Moved") + "..."); - player.teleport(res.getOutsideFreeLoc(player.getLocation())); - } - return true; - } - if (cmd.equals("kick")) { - if (args.length != 2) { - return false; - } - Player targetplayer = Bukkit.getPlayer(args[1]); - if (targetplayer == null) { - - } - group = gmanager.getGroup(player); - if (!group.hasKickAccess()) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - ClaimedResidence res = rmanager.getByLoc(targetplayer.getLocation()); - if (res.getOwner().equals(player.getName())) { - if (res.getPlayersInResidence().contains(targetplayer)) { - targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation())); - targetplayer.sendMessage(ChatColor.RED + language.getPhrase("Kicked") + "!"); - } - } - - } - if (cmd.equals("mirror")) { - if (args.length != 3) { - return false; - } - rmanager.mirrorPerms(player, args[2], args[1], resadmin); - return true; - } - if (cmd.equals("listall")) { - if (args.length == 1) { - rmanager.listAllResidences(player, 1); - } else if (args.length == 2) { - try { - rmanager.listAllResidences(player, page); - } catch (Exception ex) { - } - } else { - return false; - } - return true; - } - if (cmd.equals("listallhidden")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - if (args.length == 1) { - rmanager.listAllResidences(player, 1, true); - } else if (args.length == 2) { - try { - rmanager.listAllResidences(player, page, true); - } catch (Exception ex) { - } - } else { - return false; - } - return true; - } - if (cmd.equals("material")) { - if (args.length != 2) { - return false; - } - try { - player.sendMessage(ChatColor.GREEN + language.getPhrase("MaterialGet", ChatColor.GOLD + args[1] + ChatColor.GREEN + "." + ChatColor.RED + Material - .getMaterial(Integer.parseInt(args[1])).name() + ChatColor.GREEN)); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); - } - return true; - } - if (cmd.equals("tpset")) { - ClaimedResidence res = rmanager.getByLoc(player.getLocation()); - if (res != null) { - res.setTpLoc(player, resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - if (cmd.equals("tp")) { - if (args.length != 2) { - return false; - } - ClaimedResidence res = rmanager.getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - res.tpToResidence(player, player, resadmin); - return true; - } - - if (cmd.equals("tpconfirm")) { - if (args.length != 1) { - return false; - } - if (teleportMap.containsKey(player.getName())) { - teleportMap.get(player.getName()).tpToResidence(player, player, resadmin); - teleportMap.remove(player.getName()); - } else - player.sendMessage(ChatColor.RED + language.getPhrase("NoTeleportConfirm")); - return true; - } - - if (cmd.equals("lease")) { - return commandResLease(args, resadmin, player, page); - } - if (cmd.equals("bank")) { - return commandResBank(args, resadmin, player, page); - } - if (cmd.equals("market")) { - return commandResMarket(args, resadmin, player, page); - } - if (cmd.equals("message")) { - return commandResMessage(args, resadmin, player, page); - } - if (cmd.equals("give") && args.length == 3) { - rmanager.giveResidence(player, args[2], args[1], resadmin); - return true; - } - if (cmd.equals("server")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - if (args.length == 2) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - res.getPermissions().setOwner("Server_Land", false); - player.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "." + ChatColor.YELLOW - + "Server_Land" + ChatColor.GREEN)); - return true; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - } - if (cmd.equals("clearflags")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().clearFlags(); - player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagsCleared")); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - if (cmd.equals("tool")) { - player.sendMessage(ChatColor.YELLOW + language.getPhrase("SelectionTool") + ":" + ChatColor.GREEN + Material.getMaterial(cmanager.getSelectionTooldID())); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("InfoTool") + ": " + ChatColor.GREEN + Material.getMaterial(cmanager.getInfoToolID())); - return true; - } - return false; - } - - private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender) { - if (helppages != null) { - String helppath = "res"; - for (int i = 0; i < args.length; i++) { - if (args[i].equalsIgnoreCase("?")) { - break; - } - helppath = helppath + "." + args[i]; - } - int page = 1; - if (!args[args.length - 1].equalsIgnoreCase("?")) { - try { - page = Integer.parseInt(args[args.length - 1]); - } catch (Exception ex) { - sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidHelp")); - } - } - if (helppages.containesEntry(helppath)) { - helppages.printHelp(sender, page, helppath); - return true; - } - } - return false; - } - - private boolean commandResExpand(String[] args, boolean resadmin, Player player, int page) { - String resName; - String areaName; - ClaimedResidence res = null; - res = rmanager.getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - resName = res.getName(); - CuboidArea area = null; - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - if (area != null) { - smanager.placeLoc1(player, area.getHighLoc()); - smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName - + ChatColor.GREEN)); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); - } - int amount; - try { - amount = Integer.parseInt(args[1]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); - return true; - } - - if (amount < 0) - amount = amount * -1; - - smanager.modify(player, false, amount); - - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.wep != null) { - if (Residence.wepid == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( - player.getName())), areaName, - resadmin); - return true; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - } - return false; - } - - private boolean commandResContract(String[] args, boolean resadmin, Player player, int page) { - String resName; - String areaName; - ClaimedResidence res = null; - res = rmanager.getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - resName = res.getName(); - CuboidArea area = null; - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - if (area != null) { - smanager.placeLoc1(player, area.getHighLoc()); - smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName - + ChatColor.GREEN)); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); - } - int amount; - try { - amount = Integer.parseInt(args[1]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); - return true; - } - - if (amount < 0) - amount = amount * -1; - - if (!smanager.contract(player, amount, resadmin)) - return true; - - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.wep != null) { - if (Residence.wepid == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( - player.getName())), areaName, resadmin); - Residence.getSelectionManager().MakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() - .getPlayerLoc2(player.getName()), false); - return true; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - } - return false; - } - - private boolean commandResSelect(String[] args, boolean resadmin, Player player, int page) { - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (!group.selectCommandAccess() && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); - return true; - } - if (!group.canCreateResidences() && group.getMaxSubzoneDepth() <= 0 && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); - return true; - } - if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player - .isPermissionSet("residence.select")) && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); - return true; - } - if (args.length == 2) { - if (args[1].equals("size") || args[1].equals("cost")) { - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - try { - smanager.showSelectionInfo(player); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - return true; - } - } else if (smanager.worldEdit(player)) { - try { - smanager.showSelectionInfo(player); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - return true; - } - } - } else if (args[1].equals("vert")) { - smanager.vert(player, resadmin); - return true; - } else if (args[1].equals("sky")) { - smanager.sky(player, resadmin); - return true; - } else if (args[1].equals("bedrock")) { - smanager.bedrock(player, resadmin); - return true; - } else if (args[1].equals("coords")) { - Location playerLoc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); - if (playerLoc1 != null) { - player.sendMessage(ChatColor.GREEN + language.getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + ", " - + playerLoc1.getBlockY() + ", " + playerLoc1.getBlockZ() + ")"); - } - Location playerLoc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); - if (playerLoc2 != null) { - player.sendMessage(ChatColor.GREEN + language.getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + ", " - + playerLoc2.getBlockY() + ", " + playerLoc2.getBlockZ() + ")"); - } - return true; - } else if (args[1].equals("chunk")) { - smanager.selectChunk(player); - return true; - } else if (args[1].equals("worldedit")) { - if (smanager.worldEdit(player)) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); - } - return true; - } - } else if (args.length == 3) { - if (args[1].equals("expand")) { - int amount; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); - return true; - } - smanager.modify(player, false, amount); - return true; - } else if (args[1].equals("shift")) { - int amount; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); - return true; - } - smanager.modify(player, true, amount); - return true; - } - } - if (args.length > 1 && args[1].equals("residence")) { - String resName; - String areaName; - ClaimedResidence res = null; - if (args.length > 2) { - res = rmanager.getByName(args[2]); - } else { - res = rmanager.getByLoc(player.getLocation()); - } - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - resName = res.getName(); - CuboidArea area = null; - if (args.length > 3) { - area = res.getArea(args[3]); - areaName = args[3]; - } else { - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - } - if (area != null) { - smanager.placeLoc1(player, area.getHighLoc()); - smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName - + ChatColor.GREEN)); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); - } - return true; - } else { - try { - smanager.selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); - return true; - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectionFail")); - return true; - } - } - } - - private boolean commandResCreate(String[] args, boolean resadmin, Player player, int page) { - if (args.length != 2) { - return false; - } - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) == null) { - rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2( - player.getName()), resadmin); - return true; - } else if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) != null) { - ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); - player.sendMessage(ChatColor.RED + language.getPhrase("SelectOverlap").replace("%1", Region.getId())); - - Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), - Region.getMinimumPoint().getBlockX(), Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); - - Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), - Region.getMaximumPoint().getBlockX(), Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); - - Residence.getSelectionManager().NewMakeBorders(player, lowLoc, highLoc, true); - Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() - .getPlayerLoc2(player.getName()), false); - } else if (Residence.wg == null) { - rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName()), resadmin); - return true; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - return true; - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - return true; - } - return true; - } - - private boolean commandResSubzone(String[] args, boolean resadmin, Player player, int page) { - if (args.length != 2 && args.length != 3) { - return false; - } - String zname; - String parent; - if (args.length == 2) { - parent = rmanager.getNameByLoc(player.getLocation()); - zname = args[1]; - } else { - parent = args[1]; - zname = args[2]; - } - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = rmanager.getByName(parent); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), - zname, resadmin); - return true; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - return true; - } - } - - private boolean commandResArea(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 4) { - if (args[1].equals("remove")) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.removeArea(player, args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args[1].equals("add")) { - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.addArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( - player.getName())), args[3], - resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - } - return true; - } else if (args[1].equals("replace")) { - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); - } - } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() - .getPlayerLoc2(player.getName())), - args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); - } - return true; - } - } - if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.printAreaList(player, page); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { - ClaimedResidence res = rmanager.getByName(args[2]); - if (res != null) { - res.printAdvancedAreaList(player, page); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResRemove(String[] args, boolean resadmin, CommandSender sender, int page) { - Player player = null; - if (sender instanceof Player) { - player = (Player) sender; - if (args.length == 1) { - String area = rmanager.getNameByLoc(player.getLocation()); - if (area != null) { - ClaimedResidence res = rmanager.getByName(area); - if (res.getParent() != null) { - String[] split = area.split("\\."); - String words = split[split.length - 1]; - if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); - deleteConfirm.put(player.getName(), area); - } else { - rmanager.removeResidence(player, area, resadmin); - } - return true; - } else { - if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + area + ChatColor.RED)); - deleteConfirm.put(player.getName(), area); - } else { - rmanager.removeResidence(player, area, resadmin); - } - return true; - } - } - return false; - } - } - if (args.length != 2) { - return false; - } - if (player != null) { - if (!deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(deleteConfirm.get(player.getName()))) { - String words = ""; - if (rmanager.getByName(args[1]) != null) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res.getParent() != null) { - String[] split = args[1].split("\\."); - words = split[split.length - 1]; - } - } - if (words == "") { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); - } - deleteConfirm.put(player.getName(), args[1]); - } else { - rmanager.removeResidence(player, args[1], resadmin); - } - } else { - if (!deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(deleteConfirm.get("Console"))) { - String words = ""; - if (rmanager.getByName(args[1]) != null) { - ClaimedResidence res = rmanager.getByName(args[1]); - if (res.getParent() != null) { - String[] split = args[1].split("\\."); - words = split[split.length - 1]; - } - } - if (words == "") { - server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); - } else { - server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); - } - deleteConfirm.put("Console", args[1]); - } else { - rmanager.removeResidence(args[1]); - } - } - return true; - } - - private boolean commandResConfirm(String[] args, boolean resadmin, CommandSender sender, int page) { - Player player = null; - String name = "Console"; - if (sender instanceof Player) { - player = (Player) sender; - name = player.getName(); - } - if (args.length == 1) { - String area = deleteConfirm.get(name); - if (area == null) { - sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } else { - rmanager.removeResidence(player, area, resadmin); - deleteConfirm.remove(name); - if (player == null) { - sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); - } - } - } - return true; - } - - private boolean commandResSet(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 3) { - String area = rmanager.getNameByLoc(player.getLocation()); - if (area != null) { - rmanager.getByName(area).getPermissions().setFlag(player, args[1], args[2], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 4) { - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().setFlag(player, args[2], args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResPset(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { - ClaimedResidence area = rmanager.getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().removeAllPlayerFlags(player, args[1], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().removeAllPlayerFlags(player, args[2], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 4) { - ClaimedResidence area = rmanager.getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().setPlayerFlag(player, args[1], args[2], args[3], resadmin, true); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 5) { - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().setPlayerFlag(player, args[2], args[3], args[4], resadmin, true); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResGset(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 4) { - ClaimedResidence area = rmanager.getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidArea")); - } - return true; - } else if (args.length == 5) { - ClaimedResidence area = rmanager.getByName(args[1]); - if (area != null) { - area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResLset(String[] args, boolean resadmin, Player player, int page) { - ClaimedResidence res = null; - Material mat = null; - String listtype = null; - boolean showinfo = false; - if (args.length == 2 && args[1].equals("info")) { - res = rmanager.getByLoc(player.getLocation()); - showinfo = true; - } else if (args.length == 3 && args[2].equals("info")) { - res = rmanager.getByName(args[1]); - showinfo = true; - } - if (showinfo) { - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - player.sendMessage(ChatColor.RED + "Blacklist:"); - res.getItemBlacklist().printList(player); - player.sendMessage(ChatColor.GREEN + "Ignorelist:"); - res.getItemIgnoreList().printList(player); - return true; - } else if (args.length == 4) { - res = rmanager.getByName(args[1]); - listtype = args[2]; - try { - mat = Material.valueOf(args[3].toUpperCase()); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); - return true; - } - } else if (args.length == 3) { - res = rmanager.getByLoc(player.getLocation()); - listtype = args[1]; - try { - mat = Material.valueOf(args[2].toUpperCase()); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); - return true; - } - } - if (res != null) { - if (listtype.equalsIgnoreCase("blacklist")) { - res.getItemBlacklist().playerListChange(player, mat, resadmin); - } else if (listtype.equalsIgnoreCase("ignorelist")) { - res.getItemIgnoreList().playerListChange(player, mat, resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidList")); - } - return true; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - return true; - } - } - - private boolean commandResBank(String[] args, boolean resadmin, Player player, int page) { - if (args.length != 3) { - return false; - } - ClaimedResidence res = rmanager.getByName(plistener.getCurrentResidenceName(player.getName())); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); - return true; - } - int amount = 0; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); - return true; - } - if (args[1].equals("deposit")) { - res.getBank().deposit(player, amount, resadmin); - } else if (args[1].equals("withdraw")) { - res.getBank().withdraw(player, amount, resadmin); - } else { - return false; - } - return true; - } - - private boolean commandResLease(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 2 || args.length == 3) { - if (args[1].equals("renew")) { - if (args.length == 3) { - leasemanager.renewArea(args[2], player); - } else { - leasemanager.renewArea(rmanager.getNameByLoc(player.getLocation()), player); - } - return true; - } else if (args[1].equals("cost")) { - if (args.length == 3) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res == null || leasemanager.leaseExpires(args[2])) { - int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] + ChatColor.YELLOW + "." + ChatColor.RED - + cost + ChatColor.YELLOW)); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); - } - return true; - } else { - String area = rmanager.getNameByLoc(player.getLocation()); - ClaimedResidence res = rmanager.getByName(area); - if (area == null || res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidArea")); - return true; - } - if (leasemanager.leaseExpires(area)) { - int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + area + ChatColor.YELLOW + "." + ChatColor.RED + cost - + ChatColor.YELLOW)); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); - } - return true; - } - } - } else if (args.length == 4) { - if (args[1].equals("set")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); - return true; - } - if (args[3].equals("infinite")) { - if (leasemanager.leaseExpires(args[2])) { - leasemanager.removeExpireTime(args[2]); - player.sendMessage(ChatColor.GREEN + language.getPhrase("LeaseInfinite")); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); - } - return true; - } else { - int days; - try { - days = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidDays")); - return true; - } - leasemanager.setExpireTime(player, args[2], days); - return true; - } - } - } - return false; - } - - private boolean commandResMarket(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 1) { - return false; - } - String command = args[1].toLowerCase(); - if (command.equals("list")) { - return commandResMarketList(args, resadmin, player, page); - } - if (command.equals("autorenew")) { - return commandResMarketAutorenew(args, resadmin, player, page); - } - if (command.equals("rentable")) { - return commandResMarketRentable(args, resadmin, player, page); - } - if (command.equals("rent")) { - return commandResMarketRent(args, resadmin, player, page); - } - if (command.equals("release")) { - if (args.length != 3) { - return false; - } - if (rentmanager.isRented(args[2])) { - rentmanager.removeFromForRent(player, args[2], resadmin); - } else { - rentmanager.unrent(player, args[2], resadmin); - } - return true; - } - if (command.equals("info")) { - if (args.length == 2) { - String areaname = rmanager.getNameByLoc(player.getLocation()); - tmanager.viewSaleInfo(areaname, player); - if (cmanager.enabledRentSystem() && rentmanager.isForRent(areaname)) { - rentmanager.printRentInfo(player, areaname); - } - } else if (args.length == 3) { - tmanager.viewSaleInfo(args[2], player); - if (cmanager.enabledRentSystem() && rentmanager.isForRent(args[2])) { - rentmanager.printRentInfo(player, args[2]); - } - } else { - return false; - } - return true; - } - if (command.equals("buy")) { - if (args.length != 3) { - return false; - } - tmanager.buyPlot(args[2], player, resadmin); - return true; - } - if (command.equals("unsell")) { - if (args.length != 3) { - return false; - } - tmanager.removeFromSale(player, args[2], resadmin); - return true; - } - if (command.equals("sell")) { - if (args.length != 4) { - return false; - } - int amount; - try { - amount = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); - return true; - } - tmanager.putForSale(args[2], player, amount, resadmin); - return true; - } - return false; - } - - private boolean commandResMarketRent(String[] args, boolean resadmin, Player player, int page) { - if (args.length < 3 || args.length > 4) { - return false; - } - boolean repeat = false; - if (args.length == 4) { - if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { - repeat = true; - } else if (!args[3].equalsIgnoreCase("f") && !args[3].equalsIgnoreCase("false")) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); - return true; - } - } - rentmanager.rent(player, args[2], repeat, resadmin); - return true; - } - - private boolean commandResMarketRentable(String[] args, boolean resadmin, Player player, int page) { - if (args.length < 5 || args.length > 6) { - return false; - } - if (!cmanager.enabledRentSystem()) { - player.sendMessage(ChatColor.RED + language.getPhrase("RentDisabled")); - return true; - } - int days; - int cost; - try { - cost = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidCost")); - return true; - } - try { - days = Integer.parseInt(args[4]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidDays")); - return true; - } - boolean repeat = false; - if (args.length == 6) { - if (args[5].equalsIgnoreCase("t") || args[5].equalsIgnoreCase("true")) { - repeat = true; - } else if (!args[5].equalsIgnoreCase("f") && !args[5].equalsIgnoreCase("false")) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); - return true; - } - } - rentmanager.setForRent(player, args[2], cost, days, repeat, resadmin); - return true; - } - - private boolean commandResMarketAutorenew(String[] args, boolean resadmin, Player player, int page) { - if (!cmanager.enableEconomy()) { - player.sendMessage(ChatColor.RED + language.getPhrase("MarketDisabled")); - return true; - } - if (args.length != 4) { - return false; - } - boolean value; - if (args[3].equalsIgnoreCase("true") || args[3].equalsIgnoreCase("t")) { - value = true; - } else if (args[3].equalsIgnoreCase("false") || args[3].equalsIgnoreCase("f")) { - value = false; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); - return true; - } - if (rentmanager.isRented(args[2]) && rentmanager.getRentingPlayer(args[2]).equalsIgnoreCase(player.getName())) { - rentmanager.setRentedRepeatable(player, args[2], value, resadmin); - } else if (rentmanager.isForRent(args[2])) { - rentmanager.setRentRepeatable(player, args[2], value, resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("RentReleaseInvalid", ChatColor.YELLOW + args[2] + ChatColor.RED)); - } - return true; - } - - private boolean commandResMarketList(String[] args, boolean resadmin, Player player, int page) { - if (!cmanager.enableEconomy()) { - player.sendMessage(ChatColor.RED + language.getPhrase("MarketDisabled")); - return true; - } - player.sendMessage(ChatColor.BLUE + "---" + language.getPhrase("MarketList") + "---"); - tmanager.printForSaleResidences(player); - if (cmanager.enabledRentSystem()) { - rentmanager.printRentableResidences(player); - } - return true; - } - - private boolean commandResMessage(String[] args, boolean resadmin, Player player, int page) { - ClaimedResidence res = null; - int start = 0; - boolean enter = false; - if (args.length < 2) { - return false; - } - if (args[1].equals("enter")) { - enter = true; - res = rmanager.getByLoc(player.getLocation()); - start = 2; - } else if (args[1].equals("leave")) { - res = rmanager.getByLoc(player.getLocation()); - start = 2; - } else if (args[1].equals("remove")) { - if (args.length > 2 && args[2].equals("enter")) { - res = rmanager.getByLoc(player.getLocation()); - if (res != null) { - res.setEnterLeaveMessage(player, null, true, resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } else if (args.length > 2 && args[2].equals("leave")) { - res = rmanager.getByLoc(player.getLocation()); - if (res != null) { - res.setEnterLeaveMessage(player, null, false, resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); - return true; - } else if (args.length > 2 && args[2].equals("enter")) { - enter = true; - res = rmanager.getByName(args[1]); - start = 3; - } else if (args.length > 2 && args[2].equals("leave")) { - res = rmanager.getByName(args[1]); - start = 3; - } else if (args.length > 2 && args[2].equals("remove")) { - res = rmanager.getByName(args[1]); - if (args.length != 4) { - return false; - } - if (args[3].equals("enter")) { - if (res != null) { - res.setEnterLeaveMessage(player, null, true, resadmin); - } - return true; - } else if (args[3].equals("leave")) { - if (res != null) { - res.setEnterLeaveMessage(player, null, false, resadmin); - } - return true; - } - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); - return true; - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); - return true; - } - if (start == 0) { - return false; - } - String message = ""; - for (int i = start; i < args.length; i++) { - message = message + args[i] + " "; - } - if (res != null) { - res.setEnterLeaveMessage(player, message, enter, resadmin); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - - private boolean commandResSublist(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 1 || args.length == 2 || args.length == 3) { - ClaimedResidence res; - if (args.length == 1) { - res = rmanager.getByLoc(player.getLocation()); - } else { - res = rmanager.getByName(args[1]); - } - if (res != null) { - res.printSubzoneList(player, page); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResCompass(String[] args, boolean resadmin, Player player, int page) { - if (args.length != 2) { - player.setCompassTarget(player.getWorld().getSpawnLocation()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetReset")); - return true; - } - if (rmanager.getByName(args[1]) != null) { - if (rmanager.getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { - Location low = rmanager.getByName(args[1]).getArea("main").getLowLoc(); - Location high = rmanager.getByName(args[1]).getArea("main").getHighLoc(); - Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high - .getBlockZ()) / 2); - player.setCompassTarget(mid); - player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetSet", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); - } - return true; - } - - private boolean commandResGui(String[] args, boolean resadmin, Player player, int page) { - if (slistener != null) { - if (args.length == 1) { - ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, rmanager.getNameByLoc(player.getLocation()), resadmin); - } else if (args.length == 2) { - ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, args[1], resadmin); - } - } - return true; - } - - private boolean commandResList(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 2) { - if (args[1].equals("list")) { - pmanager.printLists(player); - return true; - } - } else if (args.length == 3) { - if (args[1].equals("view")) { - pmanager.printList(player, args[2]); - return true; - } else if (args[1].equals("remove")) { - pmanager.removeList(player, args[2]); - return true; - } else if (args[1].equals("add")) { - pmanager.makeList(player, args[2]); - return true; - } - } else if (args.length == 4) { - if (args[1].equals("apply")) { - pmanager.applyListToResidence(player, args[2], args[3], resadmin); - return true; - } - } else if (args.length == 5) { - if (args[1].equals("set")) { - pmanager.getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); - player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); - return true; - } - } else if (args.length == 6) { - if (args[1].equals("gset")) { - pmanager.getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); - return true; - } else if (args[1].equals("pset")) { - pmanager.getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); - return true; - } - } - return false; - } -} +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.bekvon.bukkit.residence; + +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.getspout.spoutapi.SpoutManager; + +import com.bekvon.bukkit.residence.Signs.SignUtil; +import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.selection.WorldGuardUtil; +import com.bekvon.bukkit.residence.spout.ResidenceSpout; +import com.bekvon.bukkit.residence.utils.Debug; +import com.bekvon.bukkit.residence.utils.Sorting; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; + +import GUI.SetFlag; + +public class ResidenceCommandListener extends Residence { + + public static HashMap teleportMap = new HashMap(); + public static List teleportDelayMap = new ArrayList(); + + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); + server.getPluginManager().callEvent(cevent); + if (cevent.isCancelled()) { + return true; + } + if (command.getName().equals("resreload") && args.length == 0) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + this.reloadPlugin(); + sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); + System.out.println("[Residence] Reloaded by " + player.getName() + "."); + } else + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + } else { + this.reloadPlugin(); + System.out.println("[Residence] Reloaded by console."); + } + return true; + } + if (command.getName().equals("ressignconvert") && args.length == 0) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + SignUtil.convertSigns(sender); + } else + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + } else { + SignUtil.convertSigns(sender); + } + return true; + } + if (command.getName().equals("resload")) { + if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender)) { + try { + this.loadYml(); + sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); + } catch (Exception ex) { + sender.sendMessage(ChatColor.RED + "[Residence] Unable to reload the save file, exception occured!"); + sender.sendMessage(ChatColor.RED + ex.getMessage()); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + } + } else + sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } else if (command.getName().equals("resworld")) { + if (args.length == 2 && args[0].equalsIgnoreCase("remove")) { + if (sender instanceof ConsoleCommandSender) { + rmanager.removeAllFromWorld(sender, args[1]); + return true; + } else { + sender.sendMessage(ChatColor.RED + "MUST be run from console."); + } + } + return false; + } else if (command.getName().equals("rc")) { + if (sender instanceof Player) { + Player player = (Player) sender; + String pname = player.getName(); + if (cmanager.chatEnabled()) { + if (args.length == 0) { + plistener.tooglePlayerResidenceChat(player); + } else { + String area = plistener.getCurrentResidenceName(pname); + if (area != null) { + ChatChannel channel = chatmanager.getChannel(area); + if (channel != null) { + String message = ""; + for (String arg : args) { + message = message + " " + arg; + } + channel.chat(pname, message); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidChannel")); + } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + } + } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("ChatDisabled")); + } + } + return true; + } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { + boolean resadmin = false; + if (sender instanceof Player) { + if (command.getName().equals("resadmin") && gmanager.isResidenceAdmin((Player) sender)) { + resadmin = true; + } + if (command.getName().equals("resadmin") && !gmanager.isResidenceAdmin((Player) sender)) { + ((Player) sender).sendMessage(ChatColor.RED + language.getPhrase("NonAdmin")); + return true; + } + } else { + resadmin = true; + } + return commandRes(args, resadmin, command, sender); + } + return super.onCommand(sender, command, label, args); + } + + @SuppressWarnings("deprecation") + private boolean commandRes(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { + return commandHelp(args, resadmin, sender); + } + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + Player player = null; + PermissionGroup group = null; + String pname = null; + if (sender instanceof Player) { + player = (Player) sender; + group = Residence.getPermissionManager().getGroup(player); + pname = player.getName(); + } else { + resadmin = true; + } + if (cmanager.allowAdminsOnly()) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("AdminOnly")); + return true; + } + } + if (args.length == 0) { + return false; + } + if (args.length == 0) { + args = new String[1]; + args[0] = "?"; + } + String cmd = args[0].toLowerCase(); + if (cmd.equals("remove") || cmd.equals("delete")) { + return commandResRemove(args, resadmin, sender, page); + } + if (cmd.equals("confirm")) { + return commandResConfirm(args, resadmin, sender, page); + } + if (cmd.equals("version")) { + sender.sendMessage(ChatColor.GRAY + "------------------------------------"); + sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + this + .getDescription().getVersion()); + sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); + sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); + sender.sendMessage(ChatColor.GREEN + "Maintained by: " + ChatColor.YELLOW + "Zrips"); + String names = null; + List authlist = this.getDescription().getAuthors(); + for (String auth : authlist) { + if (names == null) + names = auth; + else + names = names + ", " + auth; + } + sender.sendMessage(ChatColor.GREEN + "Authors: " + ChatColor.YELLOW + names); + sender.sendMessage(ChatColor.DARK_AQUA + "For a command list, and help, see the wiki:"); + sender.sendMessage(ChatColor.GREEN + "https://github.com/bekvon/Residence/wiki"); + sender.sendMessage(ChatColor.AQUA + "Visit the Spigot Resource page at:"); + sender.sendMessage(ChatColor.BLUE + "https://www.spigotmc.org/resources/residence.11480/"); + sender.sendMessage(ChatColor.GRAY + "------------------------------------"); + return true; + } + if (cmd.equals("setowner") && args.length == 3) { + if (!resadmin) { + sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().setOwner(args[2], true); + if (area.getParent() == null) { + sender.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "." + + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); + } else { + sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange", ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split( + "\\.").length - 1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); + } + } else { + sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + if (player == null) { + return true; + } + if (command.getName().equals("resadmin")) { + if (args.length == 1 && args[0].equals("on")) { + resadminToggle.add(player.getName()); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("AdminToggle", language.getPhrase("TurnOn"))); + return true; + } else if (args.length == 1 && args[0].equals("off")) { + resadminToggle.remove(player.getName()); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("AdminToggle", language.getPhrase("TurnOff"))); + return true; + } + } + if (!resadmin && resadminToggle.contains(player.getName())) { + if (!gmanager.isResidenceAdmin(player)) { + resadminToggle.remove(player.getName()); + } + } + if (cmd.equals("select")) { + return commandResSelect(args, resadmin, player, page); + } + + if (cmd.equals("expand")) { + return commandResExpand(args, resadmin, player, page); + } + + if (cmd.equals("contract")) { + return commandResContract(args, resadmin, player, page); + } + + if (cmd.equals("create")) { + return commandResCreate(args, resadmin, player, page); + } + if (cmd.equals("subzone") || cmd.equals("sz")) { + return commandResSubzone(args, resadmin, player, page); + } + if (cmd.equals("gui")) { + return commandResGui(args, resadmin, player, page); + } + if (cmd.equals("sublist")) { + return commandResSublist(args, resadmin, player, page); + } + if (cmd.equals("removeall")) { + if (args.length != 2) { + return false; + } + if (resadmin || args[1].endsWith(pname)) { + rmanager.removeAllByOwner(player, args[1]); + player.sendMessage(ChatColor.GREEN + language.getPhrase("RemovePlayersResidences", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + } + return true; + } + if (cmd.equals("compass")) { + return commandResCompass(args, resadmin, player, page); + } + if (cmd.equals("area")) { + return commandResArea(args, resadmin, player, page); + } + if (cmd.equals("lists")) { + return commandResList(args, resadmin, player, page); + } + if (cmd.equals("default")) { + if (args.length == 2) { + ClaimedResidence res = rmanager.getByName(args[1]); + res.getPermissions().applyDefaultFlags(player, resadmin); + return true; + } + return false; + } + if (cmd.equals("limits")) { + if (args.length == 1) { + gmanager.getGroup(player).printLimits(player); + return true; + } + return false; + } + if (cmd.equals("info")) { + if (args.length == 1) { + String area = rmanager.getNameByLoc(player.getLocation()); + if (area != null) { + rmanager.printAreaInfo(area, player); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 2) { + rmanager.printAreaInfo(args[1], player); + return true; + } + return false; + } + if (cmd.equals("check")) { + if (args.length == 3 || args.length == 4) { + if (args.length == 4) { + pname = args[3]; + } + ClaimedResidence res = rmanager.getByName(args[1]); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { + player.sendMessage(language.getPhrase("FlagCheckFalse", ChatColor.YELLOW + args[2] + ChatColor.RED + "." + ChatColor.YELLOW + pname + ChatColor.RED + + "." + ChatColor.YELLOW + args[1] + ChatColor.RED)); + } else { + player.sendMessage(language.getPhrase("FlagCheckTrue", ChatColor.GREEN + args[2] + ChatColor.YELLOW + "." + ChatColor.GREEN + pname + ChatColor.YELLOW + + "." + ChatColor.YELLOW + args[1] + ChatColor.RED + "." + (res.getPermissions().playerHas(pname, res.getPermissions().getWorld(), args[2], false) + ? ChatColor.GREEN + "TRUE" : ChatColor.RED + "FALSE"))); + } + return true; + } + return false; + } + if (cmd.equals("current")) { + if (args.length != 1) { + return false; + } + String res = rmanager.getNameByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + } else { + player.sendMessage(ChatColor.GREEN + language.getPhrase("InResidence", ChatColor.YELLOW + res + ChatColor.GREEN)); + } + return true; + } + if (cmd.equals("set")) { + return commandResSet(args, resadmin, player, page); + } + if (cmd.equals("pset")) { + return commandResPset(args, resadmin, player, page); + } + if (cmd.equals("gset")) { + return commandResGset(args, resadmin, player, page); + } + if (cmd.equals("lset")) { + return commandResLset(args, resadmin, player, page); + } + if (cmd.equals("list")) { + if (args.length == 1) { + rmanager.listResidences(player); + return true; + } else if (args.length == 2) { + try { + Integer.parseInt(args[1]); + rmanager.listResidences(player, page); + } catch (Exception ex) { + rmanager.listResidences(player, args[1]); + } + return true; + } else if (args.length == 3) { + rmanager.listResidences(player, args[1], page); + return true; + } + return false; + } + if (cmd.equals("listhidden")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + if (args.length == 1) { + rmanager.listResidences(player, 1, true); + return true; + } else if (args.length == 2) { + try { + Integer.parseInt(args[1]); + rmanager.listResidences(player, page, true); + } catch (Exception ex) { + rmanager.listResidences(player, args[1], 1, true); + } + return true; + } else if (args.length == 3) { + rmanager.listResidences(player, args[1], page, true); + return true; + } + return false; + } + if (cmd.equals("rename")) { + if (args.length == 3) { + rmanager.renameResidence(player, args[1], args[2], resadmin); + return true; + } + return false; + } + if (cmd.equals("renamearea")) { + if (args.length == 4) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + res.renameArea(player, args[2], args[3], resadmin); + return true; + } + return false; + } + if (cmd.equals("unstuck")) { + if (args.length != 1) { + return false; + } + group = gmanager.getGroup(player); + if (!group.hasUnstuckAccess()) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + ClaimedResidence res = rmanager.getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + } else { + player.sendMessage(ChatColor.YELLOW + language.getPhrase("Moved") + "..."); + player.teleport(res.getOutsideFreeLoc(player.getLocation())); + } + return true; + } + if (cmd.equals("kick")) { + if (args.length != 2) { + return false; + } + Player targetplayer = Bukkit.getPlayer(args[1]); + if (targetplayer == null) { + + } + group = gmanager.getGroup(player); + if (!group.hasKickAccess()) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + ClaimedResidence res = rmanager.getByLoc(targetplayer.getLocation()); + if (res.getOwner().equals(player.getName())) { + if (res.getPlayersInResidence().contains(targetplayer)) { + targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation())); + targetplayer.sendMessage(ChatColor.RED + language.getPhrase("Kicked") + "!"); + } + } + + } + if (cmd.equals("mirror")) { + if (args.length != 3) { + return false; + } + rmanager.mirrorPerms(player, args[2], args[1], resadmin); + return true; + } + if (cmd.equals("listall")) { + if (args.length == 1) { + rmanager.listAllResidences(player, 1); + } else if (args.length == 2) { + try { + rmanager.listAllResidences(player, page); + } catch (Exception ex) { + } + } else { + return false; + } + return true; + } + if (cmd.equals("listallhidden")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + if (args.length == 1) { + rmanager.listAllResidences(player, 1, true); + } else if (args.length == 2) { + try { + rmanager.listAllResidences(player, page, true); + } catch (Exception ex) { + } + } else { + return false; + } + return true; + } + if (cmd.equals("material")) { + if (args.length != 2) { + return false; + } + try { + player.sendMessage(ChatColor.GREEN + language.getPhrase("MaterialGet", ChatColor.GOLD + args[1] + ChatColor.GREEN + "." + ChatColor.RED + Material + .getMaterial(Integer.parseInt(args[1])).name() + ChatColor.GREEN)); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); + } + return true; + } + if (cmd.equals("tpset")) { + ClaimedResidence res = rmanager.getByLoc(player.getLocation()); + if (res != null) { + res.setTpLoc(player, resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + if (cmd.equals("tp")) { + if (args.length != 2) { + return false; + } + ClaimedResidence res = rmanager.getByName(args[1]); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + res.tpToResidence(player, player, resadmin); + return true; + } + + if (cmd.equals("tpconfirm")) { + if (args.length != 1) { + return false; + } + if (teleportMap.containsKey(player.getName())) { + teleportMap.get(player.getName()).tpToResidence(player, player, resadmin); + teleportMap.remove(player.getName()); + } else + player.sendMessage(ChatColor.RED + language.getPhrase("NoTeleportConfirm")); + return true; + } + + if (cmd.equals("lease")) { + return commandResLease(args, resadmin, player, page); + } + if (cmd.equals("bank")) { + return commandResBank(args, resadmin, player, page); + } + if (cmd.equals("market")) { + return commandResMarket(args, resadmin, player, page); + } + if (cmd.equals("message")) { + return commandResMessage(args, resadmin, player, page); + } + if (cmd.equals("give") && args.length == 3) { + rmanager.giveResidence(player, args[2], args[1], resadmin); + return true; + } + if (cmd.equals("server")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + if (args.length == 2) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + res.getPermissions().setOwner("Server_Land", false); + player.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "." + ChatColor.YELLOW + + "Server_Land" + ChatColor.GREEN)); + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + } + if (cmd.equals("clearflags")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().clearFlags(); + player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagsCleared")); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + if (cmd.equals("tool")) { + player.sendMessage(ChatColor.YELLOW + language.getPhrase("SelectionTool") + ":" + ChatColor.GREEN + Material.getMaterial(cmanager.getSelectionTooldID())); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("InfoTool") + ": " + ChatColor.GREEN + Material.getMaterial(cmanager.getInfoToolID())); + return true; + } + return false; + } + + private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender) { + if (helppages != null) { + String helppath = "res"; + for (int i = 0; i < args.length; i++) { + if (args[i].equalsIgnoreCase("?")) { + break; + } + helppath = helppath + "." + args[i]; + } + int page = 1; + if (!args[args.length - 1].equalsIgnoreCase("?")) { + try { + page = Integer.parseInt(args[args.length - 1]); + } catch (Exception ex) { + sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidHelp")); + } + } + if (helppages.containesEntry(helppath)) { + helppages.printHelp(sender, page, helppath); + return true; + } + } + return false; + } + + private boolean commandResExpand(String[] args, boolean resadmin, Player player, int page) { + String resName; + String areaName; + ClaimedResidence res = null; + res = rmanager.getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + resName = res.getName(); + CuboidArea area = null; + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + if (area != null) { + smanager.placeLoc1(player, area.getHighLoc()); + smanager.placeLoc2(player, area.getLowLoc()); + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName + + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); + } + int amount; + try { + amount = Integer.parseInt(args[1]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + + if (amount < 0) + amount = amount * -1; + + smanager.modify(player, false, amount); + + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + if (Residence.wep != null) { + if (Residence.wepid == Residence.getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( + player.getName())), areaName, + resadmin); + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + } + return false; + } + + private boolean commandResContract(String[] args, boolean resadmin, Player player, int page) { + String resName; + String areaName; + ClaimedResidence res = null; + res = rmanager.getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + resName = res.getName(); + CuboidArea area = null; + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + if (area != null) { + smanager.placeLoc1(player, area.getHighLoc()); + smanager.placeLoc2(player, area.getLowLoc()); + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName + + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); + } + int amount; + try { + amount = Integer.parseInt(args[1]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + + if (amount < 0) + amount = amount * -1; + + if (!smanager.contract(player, amount, resadmin)) + return true; + + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + if (Residence.wep != null) { + if (Residence.wepid == Residence.getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( + player.getName())), areaName, resadmin); + Residence.getSelectionManager().MakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() + .getPlayerLoc2(player.getName()), false); + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + } + return false; + } + + private boolean commandResSelect(String[] args, boolean resadmin, Player player, int page) { + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (!group.selectCommandAccess() && !resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); + return true; + } + if (!group.canCreateResidences() && group.getMaxSubzoneDepth() <= 0 && !resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); + return true; + } + if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player + .isPermissionSet("residence.select")) && !resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); + return true; + } + if (args.length == 2) { + if (args[1].equals("size") || args[1].equals("cost")) { + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + try { + smanager.showSelectionInfo(player); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + return true; + } + } else if (smanager.worldEdit(player)) { + try { + smanager.showSelectionInfo(player); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + return true; + } + } + } else if (args[1].equals("vert")) { + smanager.vert(player, resadmin); + return true; + } else if (args[1].equals("sky")) { + smanager.sky(player, resadmin); + return true; + } else if (args[1].equals("bedrock")) { + smanager.bedrock(player, resadmin); + return true; + } else if (args[1].equals("coords")) { + Location playerLoc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); + if (playerLoc1 != null) { + player.sendMessage(ChatColor.GREEN + language.getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + ", " + + playerLoc1.getBlockY() + ", " + playerLoc1.getBlockZ() + ")"); + } + Location playerLoc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); + if (playerLoc2 != null) { + player.sendMessage(ChatColor.GREEN + language.getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + ", " + + playerLoc2.getBlockY() + ", " + playerLoc2.getBlockZ() + ")"); + } + return true; + } else if (args[1].equals("chunk")) { + smanager.selectChunk(player); + return true; + } else if (args[1].equals("worldedit")) { + if (smanager.worldEdit(player)) { + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); + } + return true; + } + } else if (args.length == 3) { + if (args[1].equals("expand")) { + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + smanager.modify(player, false, amount); + return true; + } else if (args[1].equals("shift")) { + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + smanager.modify(player, true, amount); + return true; + } + } + if (args.length > 1 && args[1].equals("residence")) { + String resName; + String areaName; + ClaimedResidence res = null; + if (args.length > 2) { + res = rmanager.getByName(args[2]); + } else { + res = rmanager.getByLoc(player.getLocation()); + } + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + resName = res.getName(); + CuboidArea area = null; + if (args.length > 3) { + area = res.getArea(args[3]); + areaName = args[3]; + } else { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } + if (area != null) { + smanager.placeLoc1(player, area.getHighLoc()); + smanager.placeLoc2(player, area.getLowLoc()); + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName + + ChatColor.GREEN)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); + } + return true; + } else { + try { + smanager.selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); + return true; + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectionFail")); + return true; + } + } + } + + private boolean commandResCreate(String[] args, boolean resadmin, Player player, int page) { + if (args.length != 2) { + return false; + } + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + if (wep != null) { + if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) == null) { + rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2( + player.getName()), resadmin); + return true; + } else if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) != null) { + ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); + player.sendMessage(ChatColor.RED + language.getPhrase("SelectOverlap").replace("%1", Region.getId())); + + Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), + Region.getMinimumPoint().getBlockX(), Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); + + Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), + Region.getMaximumPoint().getBlockX(), Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); + + Residence.getSelectionManager().NewMakeBorders(player, lowLoc, highLoc, true); + Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() + .getPlayerLoc2(player.getName()), false); + } else if (Residence.wg == null) { + rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName()), resadmin); + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + return true; + } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + return true; + } + return true; + } + + private boolean commandResSubzone(String[] args, boolean resadmin, Player player, int page) { + if (args.length != 2 && args.length != 3) { + return false; + } + String zname; + String parent; + if (args.length == 2) { + parent = rmanager.getNameByLoc(player.getLocation()); + zname = args[1]; + } else { + parent = args[1]; + zname = args[2]; + } + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + if (wep != null) { + if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = rmanager.getByName(parent); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), + zname, resadmin); + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + return true; + } + } + + private boolean commandResArea(String[] args, boolean resadmin, Player player, int page) { + if (args.length == 4) { + if (args[1].equals("remove")) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.removeArea(player, args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args[1].equals("add")) { + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + if (wep != null) { + if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.addArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( + player.getName())), args[3], + resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + } + return true; + } else if (args[1].equals("replace")) { + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + if (wep != null) { + if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { + smanager.worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() + .getPlayerLoc2(player.getName())), + args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + } + return true; + } + } + if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.printAreaList(player, page); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { + ClaimedResidence res = rmanager.getByName(args[2]); + if (res != null) { + res.printAdvancedAreaList(player, page); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; + } + + private boolean commandResRemove(String[] args, boolean resadmin, CommandSender sender, int page) { + Player player = null; + if (sender instanceof Player) { + player = (Player) sender; + if (args.length == 1) { + String area = rmanager.getNameByLoc(player.getLocation()); + if (area != null) { + ClaimedResidence res = rmanager.getByName(area); + if (res.getParent() != null) { + String[] split = area.split("\\."); + String words = split[split.length - 1]; + if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); + deleteConfirm.put(player.getName(), area); + } else { + rmanager.removeResidence(player, area, resadmin); + } + return true; + } else { + if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + area + ChatColor.RED)); + deleteConfirm.put(player.getName(), area); + } else { + rmanager.removeResidence(player, area, resadmin); + } + return true; + } + } + return false; + } + } + if (args.length != 2) { + return false; + } + if (player != null) { + if (!deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(deleteConfirm.get(player.getName()))) { + String words = ""; + if (rmanager.getByName(args[1]) != null) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res.getParent() != null) { + String[] split = args[1].split("\\."); + words = split[split.length - 1]; + } + } + if (words == "") { + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); + } + deleteConfirm.put(player.getName(), args[1]); + } else { + rmanager.removeResidence(player, args[1], resadmin); + } + } else { + if (!deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(deleteConfirm.get("Console"))) { + String words = ""; + if (rmanager.getByName(args[1]) != null) { + ClaimedResidence res = rmanager.getByName(args[1]); + if (res.getParent() != null) { + String[] split = args[1].split("\\."); + words = split[split.length - 1]; + } + } + if (words == "") { + server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); + } else { + server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); + } + deleteConfirm.put("Console", args[1]); + } else { + rmanager.removeResidence(args[1]); + } + } + return true; + } + + private boolean commandResConfirm(String[] args, boolean resadmin, CommandSender sender, int page) { + Player player = null; + String name = "Console"; + if (sender instanceof Player) { + player = (Player) sender; + name = player.getName(); + } + if (args.length == 1) { + String area = deleteConfirm.get(name); + if (area == null) { + sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } else { + rmanager.removeResidence(player, area, resadmin); + deleteConfirm.remove(name); + if (player == null) { + sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); + } + } + } + return true; + } + + private boolean commandResSet(String[] args, boolean resadmin, Player player, int page) { + if (args.length == 3) { + String area = rmanager.getNameByLoc(player.getLocation()); + if (area != null) { + rmanager.getByName(area).getPermissions().setFlag(player, args[1], args[2], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 4) { + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().setFlag(player, args[2], args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 1) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) { + SetFlag flag = new SetFlag(res.getName(), player); + flag.recalculateInv(res); + ResidencePlayerListener.GUI.put(player.getName(), flag); + player.openInventory(flag.getInventory()); + } else + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } else if (args.length == 2) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + if (res != null) { + SetFlag flag = new SetFlag(res.getName(), player); + flag.recalculateInv(res); + ResidencePlayerListener.GUI.put(player.getName(), flag); + player.openInventory(flag.getInventory()); + } else + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return false; + } + + private boolean commandResPset(String[] args, boolean resadmin, Player player, int page) { + if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { + ClaimedResidence area = rmanager.getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().removeAllPlayerFlags(player, args[1], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().removeAllPlayerFlags(player, args[2], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 4) { + ClaimedResidence area = rmanager.getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().setPlayerFlag(player, args[1], args[2], args[3], resadmin, true); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 5) { + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().setPlayerFlag(player, args[2], args[3], args[4], resadmin, true); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length == 2) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) { + SetFlag flag = new SetFlag(res.getName(), player); + flag.setTargePlayer(args[1]); + flag.recalculateInv(res); + ResidencePlayerListener.GUI.put(player.getName(), flag); + player.openInventory(flag.getInventory()); + } else + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + + } else if (args.length == 3) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + if (res != null) { + SetFlag flag = new SetFlag(res.getName(), player); + flag.setTargePlayer(args[2]); + flag.recalculateInv(res); + ResidencePlayerListener.GUI.put(player.getName(), flag); + player.openInventory(flag.getInventory()); + } else + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + return false; + } + + private boolean commandResGset(String[] args, boolean resadmin, Player player, int page) { + if (args.length == 4) { + ClaimedResidence area = rmanager.getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidArea")); + } + return true; + } else if (args.length == 5) { + ClaimedResidence area = rmanager.getByName(args[1]); + if (area != null) { + area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; + } + + private boolean commandResLset(String[] args, boolean resadmin, Player player, int page) { + ClaimedResidence res = null; + Material mat = null; + String listtype = null; + boolean showinfo = false; + if (args.length == 2 && args[1].equals("info")) { + res = rmanager.getByLoc(player.getLocation()); + showinfo = true; + } else if (args.length == 3 && args[2].equals("info")) { + res = rmanager.getByName(args[1]); + showinfo = true; + } + if (showinfo) { + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + player.sendMessage(ChatColor.RED + "Blacklist:"); + res.getItemBlacklist().printList(player); + player.sendMessage(ChatColor.GREEN + "Ignorelist:"); + res.getItemIgnoreList().printList(player); + return true; + } else if (args.length == 4) { + res = rmanager.getByName(args[1]); + listtype = args[2]; + try { + mat = Material.valueOf(args[3].toUpperCase()); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); + return true; + } + } else if (args.length == 3) { + res = rmanager.getByLoc(player.getLocation()); + listtype = args[1]; + try { + mat = Material.valueOf(args[2].toUpperCase()); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); + return true; + } + } + if (res != null) { + if (listtype.equalsIgnoreCase("blacklist")) { + res.getItemBlacklist().playerListChange(player, mat, resadmin); + } else if (listtype.equalsIgnoreCase("ignorelist")) { + res.getItemIgnoreList().playerListChange(player, mat, resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidList")); + } + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + } + + private boolean commandResBank(String[] args, boolean resadmin, Player player, int page) { + if (args.length != 3) { + return false; + } + ClaimedResidence res = rmanager.getByName(plistener.getCurrentResidenceName(player.getName())); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + return true; + } + int amount = 0; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + if (args[1].equals("deposit")) { + res.getBank().deposit(player, amount, resadmin); + } else if (args[1].equals("withdraw")) { + res.getBank().withdraw(player, amount, resadmin); + } else { + return false; + } + return true; + } + + private boolean commandResLease(String[] args, boolean resadmin, Player player, int page) { + if (args.length == 2 || args.length == 3) { + if (args[1].equals("renew")) { + if (args.length == 3) { + leasemanager.renewArea(args[2], player); + } else { + leasemanager.renewArea(rmanager.getNameByLoc(player.getLocation()), player); + } + return true; + } else if (args[1].equals("cost")) { + if (args.length == 3) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res == null || leasemanager.leaseExpires(args[2])) { + int cost = leasemanager.getRenewCost(res); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] + ChatColor.YELLOW + "." + ChatColor.RED + + cost + ChatColor.YELLOW)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); + } + return true; + } else { + String area = rmanager.getNameByLoc(player.getLocation()); + ClaimedResidence res = rmanager.getByName(area); + if (area == null || res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidArea")); + return true; + } + if (leasemanager.leaseExpires(area)) { + int cost = leasemanager.getRenewCost(res); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + area + ChatColor.YELLOW + "." + ChatColor.RED + cost + + ChatColor.YELLOW)); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); + } + return true; + } + } + } else if (args.length == 4) { + if (args[1].equals("set")) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + if (args[3].equals("infinite")) { + if (leasemanager.leaseExpires(args[2])) { + leasemanager.removeExpireTime(args[2]); + player.sendMessage(ChatColor.GREEN + language.getPhrase("LeaseInfinite")); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); + } + return true; + } else { + int days; + try { + days = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidDays")); + return true; + } + leasemanager.setExpireTime(player, args[2], days); + return true; + } + } + } + return false; + } + + private boolean commandResMarket(String[] args, boolean resadmin, Player player, int page) { + if (args.length == 1) { + return false; + } + String command = args[1].toLowerCase(); + if (command.equals("list")) { + return commandResMarketList(args, resadmin, player, page); + } + if (command.equals("autorenew")) { + return commandResMarketAutorenew(args, resadmin, player, page); + } + if (command.equals("rentable")) { + return commandResMarketRentable(args, resadmin, player, page); + } + if (command.equals("rent")) { + return commandResMarketRent(args, resadmin, player, page); + } + if (command.equals("release")) { + if (args.length != 3) { + return false; + } + if (rentmanager.isRented(args[2])) { + rentmanager.removeFromForRent(player, args[2], resadmin); + } else { + rentmanager.unrent(player, args[2], resadmin); + } + return true; + } + if (command.equals("info")) { + if (args.length == 2) { + String areaname = rmanager.getNameByLoc(player.getLocation()); + tmanager.viewSaleInfo(areaname, player); + if (cmanager.enabledRentSystem() && rentmanager.isForRent(areaname)) { + rentmanager.printRentInfo(player, areaname); + } + } else if (args.length == 3) { + tmanager.viewSaleInfo(args[2], player); + if (cmanager.enabledRentSystem() && rentmanager.isForRent(args[2])) { + rentmanager.printRentInfo(player, args[2]); + } + } else { + return false; + } + return true; + } + if (command.equals("buy")) { + if (args.length != 3) { + return false; + } + tmanager.buyPlot(args[2], player, resadmin); + return true; + } + if (command.equals("unsell")) { + if (args.length != 3) { + return false; + } + tmanager.removeFromSale(player, args[2], resadmin); + return true; + } + if (command.equals("sell")) { + if (args.length != 4) { + return false; + } + int amount; + try { + amount = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + tmanager.putForSale(args[2], player, amount, resadmin); + return true; + } + return false; + } + + private boolean commandResMarketRent(String[] args, boolean resadmin, Player player, int page) { + if (args.length < 3 || args.length > 4) { + return false; + } + boolean repeat = false; + if (args.length == 4) { + if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { + repeat = true; + } else if (!args[3].equalsIgnoreCase("f") && !args[3].equalsIgnoreCase("false")) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); + return true; + } + } + rentmanager.rent(player, args[2], repeat, resadmin); + return true; + } + + private boolean commandResMarketRentable(String[] args, boolean resadmin, Player player, int page) { + if (args.length < 5 || args.length > 6) { + return false; + } + if (!cmanager.enabledRentSystem()) { + player.sendMessage(ChatColor.RED + language.getPhrase("RentDisabled")); + return true; + } + int days; + int cost; + try { + cost = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidCost")); + return true; + } + try { + days = Integer.parseInt(args[4]); + } catch (Exception ex) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidDays")); + return true; + } + boolean repeat = false; + if (args.length == 6) { + if (args[5].equalsIgnoreCase("t") || args[5].equalsIgnoreCase("true")) { + repeat = true; + } else if (!args[5].equalsIgnoreCase("f") && !args[5].equalsIgnoreCase("false")) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); + return true; + } + } + rentmanager.setForRent(player, args[2], cost, days, repeat, resadmin); + return true; + } + + private boolean commandResMarketAutorenew(String[] args, boolean resadmin, Player player, int page) { + if (!cmanager.enableEconomy()) { + player.sendMessage(ChatColor.RED + language.getPhrase("MarketDisabled")); + return true; + } + if (args.length != 4) { + return false; + } + boolean value; + if (args[3].equalsIgnoreCase("true") || args[3].equalsIgnoreCase("t")) { + value = true; + } else if (args[3].equalsIgnoreCase("false") || args[3].equalsIgnoreCase("f")) { + value = false; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); + return true; + } + if (rentmanager.isRented(args[2]) && rentmanager.getRentingPlayer(args[2]).equalsIgnoreCase(player.getName())) { + rentmanager.setRentedRepeatable(player, args[2], value, resadmin); + } else if (rentmanager.isForRent(args[2])) { + rentmanager.setRentRepeatable(player, args[2], value, resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("RentReleaseInvalid", ChatColor.YELLOW + args[2] + ChatColor.RED)); + } + return true; + } + + private boolean commandResMarketList(String[] args, boolean resadmin, Player player, int page) { + if (!cmanager.enableEconomy()) { + player.sendMessage(ChatColor.RED + language.getPhrase("MarketDisabled")); + return true; + } + player.sendMessage(ChatColor.BLUE + "---" + language.getPhrase("MarketList") + "---"); + tmanager.printForSaleResidences(player); + if (cmanager.enabledRentSystem()) { + rentmanager.printRentableResidences(player); + } + return true; + } + + private boolean commandResMessage(String[] args, boolean resadmin, Player player, int page) { + ClaimedResidence res = null; + int start = 0; + boolean enter = false; + if (args.length < 2) { + return false; + } + if (args[1].equals("enter")) { + enter = true; + res = rmanager.getByLoc(player.getLocation()); + start = 2; + } else if (args[1].equals("leave")) { + res = rmanager.getByLoc(player.getLocation()); + start = 2; + } else if (args[1].equals("remove")) { + if (args.length > 2 && args[2].equals("enter")) { + res = rmanager.getByLoc(player.getLocation()); + if (res != null) { + res.setEnterLeaveMessage(player, null, true, resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } else if (args.length > 2 && args[2].equals("leave")) { + res = rmanager.getByLoc(player.getLocation()); + if (res != null) { + res.setEnterLeaveMessage(player, null, false, resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); + return true; + } else if (args.length > 2 && args[2].equals("enter")) { + enter = true; + res = rmanager.getByName(args[1]); + start = 3; + } else if (args.length > 2 && args[2].equals("leave")) { + res = rmanager.getByName(args[1]); + start = 3; + } else if (args.length > 2 && args[2].equals("remove")) { + res = rmanager.getByName(args[1]); + if (args.length != 4) { + return false; + } + if (args[3].equals("enter")) { + if (res != null) { + res.setEnterLeaveMessage(player, null, true, resadmin); + } + return true; + } else if (args[3].equals("leave")) { + if (res != null) { + res.setEnterLeaveMessage(player, null, false, resadmin); + } + return true; + } + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); + return true; + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); + return true; + } + if (start == 0) { + return false; + } + String message = ""; + for (int i = start; i < args.length; i++) { + message = message + args[i] + " "; + } + if (res != null) { + res.setEnterLeaveMessage(player, message, enter, resadmin); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + + private boolean commandResSublist(String[] args, boolean resadmin, Player player, int page) { + if (args.length == 1 || args.length == 2 || args.length == 3) { + ClaimedResidence res; + if (args.length == 1) { + res = rmanager.getByLoc(player.getLocation()); + } else { + res = rmanager.getByName(args[1]); + } + if (res != null) { + res.printSubzoneList(player, page); + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + return false; + } + + private boolean commandResCompass(String[] args, boolean resadmin, Player player, int page) { + if (args.length != 2) { + player.setCompassTarget(player.getWorld().getSpawnLocation()); + player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetReset")); + return true; + } + if (rmanager.getByName(args[1]) != null) { + if (rmanager.getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { + Location low = rmanager.getByName(args[1]).getArea("main").getLowLoc(); + Location high = rmanager.getByName(args[1]).getArea("main").getHighLoc(); + Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high + .getBlockZ()) / 2); + player.setCompassTarget(mid); + player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetSet", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); + } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + } + return true; + } + + private boolean commandResGui(String[] args, boolean resadmin, Player player, int page) { + if (slistener != null) { + if (args.length == 1) { + ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, rmanager.getNameByLoc(player.getLocation()), resadmin); + } else if (args.length == 2) { + ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, args[1], resadmin); + } + } + return true; + } + + private boolean commandResList(String[] args, boolean resadmin, Player player, int page) { + if (args.length == 2) { + if (args[1].equals("list")) { + pmanager.printLists(player); + return true; + } + } else if (args.length == 3) { + if (args[1].equals("view")) { + pmanager.printList(player, args[2]); + return true; + } else if (args[1].equals("remove")) { + pmanager.removeList(player, args[2]); + return true; + } else if (args[1].equals("add")) { + pmanager.makeList(player, args[2]); + return true; + } + } else if (args.length == 4) { + if (args[1].equals("apply")) { + pmanager.applyListToResidence(player, args[2], args[3], resadmin); + return true; + } + } else if (args.length == 5) { + if (args[1].equals("set")) { + pmanager.getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); + player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); + return true; + } + } else if (args.length == 6) { + if (args[1].equals("gset")) { + pmanager.getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); + player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); + return true; + } else if (args[1].equals("pset")) { + pmanager.getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); + player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); + return true; + } + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 1df49ee8d..15eb79c10 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1,1046 +1,1112 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - -package com.bekvon.bukkit.residence.listeners; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.Sign; -import org.bukkit.entity.Damageable; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Hanging; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.SignChangeEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerBucketEmptyEvent; -import org.bukkit.event.player.PlayerBucketFillEvent; -import org.bukkit.event.player.PlayerInteractAtEntityEvent; -import org.bukkit.event.player.PlayerInteractEntityEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.event.player.PlayerShearEntityEvent; -import org.bukkit.event.player.PlayerTeleportEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.ResidenceCommandListener; -import com.bekvon.bukkit.residence.chat.ChatChannel; -import com.bekvon.bukkit.residence.event.*; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.ActionBar; -import com.bekvon.bukkit.residence.Signs.SignUtil; -import com.bekvon.bukkit.residence.Signs.Signs; - -/** - * - * @author Administrator - */ -public class ResidencePlayerListener implements Listener { - - protected Map currentRes; - protected Map lastUpdate; - protected Map lastOutsideLoc; - protected int minUpdateTime; - protected boolean chatenabled; - protected List playerToggleChat; - - public ResidencePlayerListener() { - currentRes = new HashMap(); - lastUpdate = new HashMap(); - lastOutsideLoc = new HashMap(); - playerToggleChat = new ArrayList(); - minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); - chatenabled = Residence.getConfigManager().chatEnabled(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - lastUpdate.put(player.getName(), System.currentTimeMillis()); - } - } - - public void reload() { - currentRes = new HashMap(); - lastUpdate = new HashMap(); - lastOutsideLoc = new HashMap(); - playerToggleChat = new ArrayList(); - minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); - chatenabled = Residence.getConfigManager().chatEnabled(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - lastUpdate.put(player.getName(), System.currentTimeMillis()); - } - } - - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onSignInteract(PlayerInteractEvent event) { - - if (event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - - Block block = event.getClickedBlock(); - - if (block == null) - return; - - if (!(block.getState() instanceof Sign)) - return; - - Player player = (Player) event.getPlayer(); - - Location loc = block.getLocation(); - - for (Signs one : SignUtil.Signs.GetAllSigns()) { - if (!one.GetWorld().equalsIgnoreCase(loc.getWorld().getName())) - continue; - if (one.GetX() != loc.getBlockX()) - continue; - if (one.GetY() != loc.getBlockY()) - continue; - if (one.GetZ() != loc.getBlockZ()) - continue; - - String landName = one.GetResidence(); - - boolean ForSale = Residence.getTransactionManager().isForSale(landName); - boolean ForRent = Residence.getRentManager().isForRent(landName); - - if (ForSale) { - Bukkit.dispatchCommand(player, "res market buy " + landName); - break; - } - - if (ForRent) { - if (Residence.getRentManager().isRented(landName) && player.isSneaking()) - Bukkit.dispatchCommand(player, "res market release " + landName); - else { - boolean stage = true; - if (player.isSneaking()) - stage = false; - - Bukkit.dispatchCommand(player, "res market rent " + landName + " " + stage); - } - } - - } - } - - @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) - public void onSignCreate(SignChangeEvent event) { - - Block block = event.getBlock(); - - if (!(block.getState() instanceof Sign)) - return; - - Sign sign = (Sign) block.getState(); - - if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(Residence.getLanguage().getPhrase("SignTopLine"))) - return; - - Signs signInfo = new Signs(); - - Location loc = sign.getLocation(); - - String landName = null; - - ClaimedResidence res = null; - if (!event.getLine(1).equalsIgnoreCase("")) { - - String resname = event.getLine(1); - if (!event.getLine(2).equalsIgnoreCase("")) - resname += "." + event.getLine(2); - if (!event.getLine(3).equalsIgnoreCase("")) - resname += "." + event.getLine(3); - - res = Residence.getResidenceManager().getByName(resname); - - if (res == null) { - event.getPlayer().sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - - landName = res.getName(); - - } else { - res = Residence.getResidenceManager().getByLoc(loc); - landName = Residence.getResidenceManager().getNameByLoc(loc); - } - - final ClaimedResidence residence = res; - - boolean ForSale = Residence.getTransactionManager().isForSale(landName); - boolean ForRent = Residence.getRentManager().isForRent(landName); - - int category = 1; - if (SignUtil.Signs.GetAllSigns().size() > 0) - category = SignUtil.Signs.GetAllSigns().get(SignUtil.Signs.GetAllSigns().size() - 1).GetCategory() + 1; - - if (ForSale || ForRent) { - signInfo.setCategory(category); - signInfo.setResidence(landName); - signInfo.setWorld(loc.getWorld().getName()); - signInfo.setX(loc.getBlockX()); - signInfo.setY(loc.getBlockY()); - signInfo.setZ(loc.getBlockZ()); - signInfo.setLocation(loc); - SignUtil.Signs.addSign(signInfo); - SignUtil.saveSigns(); - } - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { - public void run() { - SignUtil.CheckSign(residence); - } - }, 5L); - } - - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onSignDestroy(BlockBreakEvent event) { - - if (event.isCancelled()) - return; - - Block block = event.getBlock(); - - if (block == null) - return; - - if (!(block.getState() instanceof Sign)) - return; - - Location loc = block.getLocation(); - - for (Signs one : SignUtil.Signs.GetAllSigns()) { - - if (!one.GetWorld().equalsIgnoreCase(loc.getWorld().getName())) - continue; - if (one.GetX() != loc.getBlockX()) - continue; - if (one.GetY() != loc.getBlockY()) - continue; - if (one.GetZ() != loc.getBlockZ()) - continue; - - SignUtil.Signs.removeSign(one); - SignUtil.saveSigns(); - break; - } - } - - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerQuit(PlayerQuitEvent event) { - String pname = event.getPlayer().getName(); - currentRes.remove(pname); - lastUpdate.remove(pname); - lastOutsideLoc.remove(pname); - Residence.getChatManager().removeFromChannel(pname); - - Residence.UUIDList.put(pname, event.getPlayer().getUniqueId()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerJoin(PlayerJoinEvent event) { - Player player = event.getPlayer(); - lastUpdate.put(player.getName(), 0L); - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.turnResAdminOn(player); - } - handleNewLocation(player, player.getLocation(), false); - - // if (player.isOp() || player.hasPermission("residence.versioncheck")) - // { - // Residence.getVersionChecker().VersionCheck(player); - // } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerSpawn(PlayerRespawnEvent event) { - Location loc = event.getRespawnLocation(); - Boolean bed = event.isBedSpawn(); - Player player = event.getPlayer(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res == null) { - return; - } - if (res.getPermissions().playerHas(player.getName(), "move", true)) { - return; - } - if (bed) { - loc = player.getWorld().getSpawnLocation(); - } - res = Residence.getResidenceManager().getByLoc(loc); - if (res != null && !res.getPermissions().playerHas(player.getName(), "move", true)) { - loc = res.getOutsideFreeLoc(loc); - } - - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoSpawn")); - event.setRespawnLocation(loc); - } - - @SuppressWarnings("deprecation") - private boolean isContainer(Material mat, Block block) { - return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") || Residence - .getConfigManager().getCustomContainers().contains(block.getTypeId()); - } - - @SuppressWarnings("deprecation") - private boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { - case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case SPRUCE_DOOR: - case BIRCH_DOOR: - case JUNGLE_DOOR: - case ACACIA_DOOR: - case DARK_OAK_DOOR: - case SPRUCE_FENCE_GATE: - case BIRCH_FENCE_GATE: - case JUNGLE_FENCE_GATE: - case ACACIA_FENCE_GATE: - case DARK_OAK_FENCE_GATE: - case TRAP_DOOR: - case IRON_TRAPDOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: - case DRAGON_EGG: - return true; - default: - return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); - } - } - - @SuppressWarnings("deprecation") - private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { - switch (mat) { - case ITEM_FRAME: - case BEACON: - case FLOWER_POT: - case COMMAND: - case ANVIL: - case CAKE_BLOCK: - case NOTE_BLOCK: - case DIODE: - case DIODE_BLOCK_OFF: - case DIODE_BLOCK_ON: - case BED_BLOCK: - case WORKBENCH: - case BREWING_STAND: - case ENCHANTMENT_TABLE: - return true; - default: - return Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); - } - } - - private boolean isCanUseEntity(Material mat, Block block) { - return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); - } - - @SuppressWarnings("deprecation") - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteract(PlayerInteractEvent event) { - Player player = event.getPlayer(); - Material heldItem = player.getItemInHand().getType(); - int heldItemId = player.getItemInHand().getTypeId(); - Block block = event.getClickedBlock(); - if (block == null) { - return; - } - int blockId = block.getTypeId(); - - Material mat = block.getType(); - if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block) - || event.getAction() == Action.PHYSICAL)) { - if (heldItemId != Residence.getConfigManager().getSelectionTooldID() && heldItemId != Residence.getConfigManager().getInfoToolID() && heldItemId != 351 - && heldItemId != 416) { - return; - } - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); - String world = player.getWorld().getName(); - String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); - boolean resadmin = Residence.isResAdminOn(player); - if (event.getAction() == Action.PHYSICAL) { - if (!resadmin) { - boolean hasuse = perms.playerHas(player.getName(), world, "use", true); - boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse); - if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) { - event.setCancelled(true); - return; - } - } - if (!perms.playerHas(player.getName(), world, "trample", perms.playerHas(player.getName(), world, "build", true)) && (mat == Material.SOIL - || mat == Material.SOUL_SAND)) { - event.setCancelled(true); - return; - } - return; - } - if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); - event.setCancelled(true); - return; - } - if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - - if (heldItemId == Residence.getConfigManager().getSelectionTooldID()) { - if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) - return; - - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group - .canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { - if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc1(player, loc); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED - + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); - } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc2(player, loc); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED - + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); - } - - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) - Residence.getSelectionManager().showSelectionInfoInActionBar(player); - } - } - if (heldItemId == Residence.getConfigManager().getInfoToolID() && event.getAction() == Action.LEFT_CLICK_BLOCK) { - Location loc = block.getLocation(); - String res = Residence.getResidenceManager().getNameByLoc(loc); - if (res != null) { - Residence.getResidenceManager().printAreaInfo(res, player); - event.setCancelled(true); - } else { - event.setCancelled(true); - player.sendMessage(Residence.getLanguage().getPhrase("NoResHere")); - } - } - - if (resadmin) - return; - - if (heldItem != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (heldItemId == 351) { - if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS || player.getItemInHand().getData().getData() == 3 - && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { - perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, "build", true)) { - event.setCancelled(true); - return; - } - } - } - if (heldItem == Material.ARMOR_STAND) { - perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, "build", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - event.setCancelled(true); - return; - } - } - } - if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasuse = perms.playerHas(player.getName(), world, "use", true); - for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { - if (mat != checkMat.getKey()) - continue; - - if (perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) - continue; - - if (hasuse || checkMat.getValue().equals("container")) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", checkMat.getValue())); - return; - } else { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); - return; - } - - } - if (Residence.getConfigManager().getCustomContainers().contains(blockId)) { - if (!perms.playerHas(player.getName(), world, "container", hasuse)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); - return; - } - } - if (Residence.getConfigManager().getCustomBothClick().contains(blockId)) { - if (!hasuse) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); - return; - } - } - if (Residence.getConfigManager().getCustomRightClick().contains(blockId) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (!hasuse) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); - return; - } - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - /* Trade */ - if (ent.getType() != EntityType.VILLAGER) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getPlayer().getLocation()); - - if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - event.setCancelled(true); - } - - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerShearEntity(PlayerShearEntityEvent event) { - - if (event.isCancelled()) - return; - - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getEntity(); - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res == null) - return; - - if (!res.getPermissions().playerHas(player.getName(), "shear", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Shear." + res.getName())); - event.setCancelled(true); - } - - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - - /* Container - ItemFrame protection */ - if (!(ent instanceof Hanging)) - return; - - Hanging hanging = (Hanging) ent; - - if (hanging.getType() != EntityType.ITEM_FRAME) { - return; - } - - Material heldItem = player.getItemInHand().getType(); - - FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); - String world = player.getWorld().getName(); - String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); - if (!Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); - event.setCancelled(true); - return; - } - if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - if (ent.getType() != EntityType.ARMOR_STAND) - return; - - FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); - String world = player.getWorld().getName(); - - if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); - if (res != null) { - if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { - if (Residence.getRentManager().isRented(res.getName())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); - event.setCancelled(true); - return; - } - } - - Material mat = event.getBucket(); - if (!res.getPermissions().playerHas(player.getName(), "bucket", true) && Residence.getConfigManager().getNoPlaceWorlds().contains(event.getBlockClicked() - .getLocation().getWorld().getName())) { - if (mat == Material.LAVA_BUCKET) { - event.setCancelled(true); - return; - } - if (mat == Material.WATER_BUCKET) { - event.setCancelled(true); - return; - } - } - } - - String pname = player.getName(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); - if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true))) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); - event.setCancelled(true); - return; - } - - Material mat = event.getBucket(); - int level = Residence.getConfigManager().getPlaceLevel(); - if (res == null && Residence.getConfigManager().isNoLavaPlace() && event.getBlockClicked().getLocation().getBlockY() >= level - 1 && Residence.getConfigManager() - .getNoPlaceWorlds().contains(event.getBlockClicked().getLocation().getWorld().getName())) { - if (mat == Material.LAVA_BUCKET) { - if (!Residence.getLanguage().getPhrase("CantPlaceLava").equalsIgnoreCase("")) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("CantPlaceLava", String.valueOf(level))); - event.setCancelled(true); - return; - } - } - - if (res == null && Residence.getConfigManager().isNoWaterPlace() && event.getBlockClicked().getLocation().getBlockY() >= level - 1 && Residence.getConfigManager() - .getNoPlaceWorlds().contains(event.getBlockClicked().getLocation().getWorld().getName())) - if (mat == Material.WATER_BUCKET) { - if (!Residence.getLanguage().getPhrase("CantPlaceWater").equalsIgnoreCase("")) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("CantPlaceWater", String.valueOf(level))); - event.setCancelled(true); - return; - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerBucketFill(PlayerBucketFillEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); - if (res != null) { - if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { - if (Residence.getRentManager().isRented(res.getName())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); - event.setCancelled(true); - return; - } - } - } - - String pname = player.getName(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); - boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)); - if (!hasbucket) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerTeleport(PlayerTeleportEvent event) { - - Player player = event.getPlayer(); - - if (player.hasMetadata("NPC")) - return; - - Location loc = event.getTo(); - - if (Residence.isResAdminOn(player)) { - handleNewLocation(player, loc, false); - return; - } - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res != null) { - if (event.getCause() == TeleportCause.ENDER_PEARL || event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event - .getCause() == TeleportCause.PLUGIN) { - String areaname = res.getName(); - if (!res.getPermissions().playerHas(player.getName(), "move", true)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", areaname)); - return; - } - } - - if (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) { - if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { - String areaname = res.getName(); - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny", areaname)); - return; - } - } - } - //handleNewLocation(player, loc, false); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerMove(PlayerMoveEvent event) { - - Player player = event.getPlayer(); - if (player == null) - return; - - if (player.hasMetadata("NPC")) - return; - - String name = player.getName(); - long last = lastUpdate.get(name); - long now = System.currentTimeMillis(); - if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) { - return; - } - lastUpdate.put(name, now); - Location locfrom = event.getFrom(); - Location locto = event.getTo(); - if (locfrom.getX() == locto.getX() && locfrom.getY() == locto.getY() && locfrom.getZ() == locto.getZ()) - return; - - handleNewLocation(player, locto, true); - - if (Residence.getConfigManager().getTeleportDelay() > 0 && ResidenceCommandListener.teleportDelayMap.contains(player.getName())) { - ResidenceCommandListener.teleportDelayMap.remove(player.getName()); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportCanceled")); - } - } - - public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: - case STRING: - case WALL_BANNER: - case WALL_SIGN: - case SAPLING: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - return false; - } - - public void handleNewLocation(Player player, Location loc, boolean move) { - - String pname = player.getName(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - - ClaimedResidence orres = res; - String areaname = null; - String subzone = null; - if (res != null) { - areaname = res.getName(); - while (res.getSubzoneByLoc(loc) != null) { - res = res.getSubzoneByLoc(player.getLocation()); - subzone = res.getName(); - areaname = areaname + "." + subzone; - } - } - - ClaimedResidence ResOld = null; - if (currentRes.containsKey(pname)) { - ResOld = Residence.getResidenceManager().getByName(currentRes.get(pname)); - if (ResOld == null) { - currentRes.remove(pname); - } - } - - if (res == null) { - lastOutsideLoc.put(pname, loc); - if (ResOld != null) { - String leave = ResOld.getLeaveMessage(); - /* - * TODO - ResidenceLeaveEvent is deprecated as of 21-MAY-2013. - * Its functionality is replaced by ResidenceChangedEvent. For - * now, this event is still supported until it is removed at a - * suitable time in the future. - */ -// ResidenceLeaveEvent leaveevent = new ResidenceLeaveEvent(ResOld, player); -// Residence.getServ().getPluginManager().callEvent(leaveevent); - - // New ResidenceChangeEvent - ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); - Residence.getServ().getPluginManager().callEvent(chgEvent); - - if (leave != null && !leave.equals("")) { - if (Residence.getConfigManager().useActionBar()) { - ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); - } else { - player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); - } - } - currentRes.remove(pname); - Residence.getChatManager().removeFromChannel(pname); - } - return; - } - - if (move) { - if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player)) { - Location lastLoc = lastOutsideLoc.get(pname); - if (lastLoc != null) { - player.teleport(lastLoc); - } else { - player.teleport(res.getOutsideFreeLoc(loc)); - } - if (Residence.getConfigManager().useActionBar()) { - ActionBar.send(player, ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", orres.getName())); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", orres.getName())); - } - - return; - // Preventing fly in residence only when player has move permission - } else if (player.isFlying()) { - if (res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission("residence.nofly.bypass")) { - Location lc = player.getLocation(); - Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); - location.setPitch(lc.getPitch()); - location.setYaw(lc.getYaw()); - int from = location.getBlockY(); - int maxH = location.getWorld().getMaxHeight(); - for (int i = 0; i < maxH; i++) { - location.setY(from - i); - Block block = location.getBlock(); - if (!isEmptyBlock(block)) { - location.setY(from - i + 1); - break; - } - if (location.getBlockY() <= 0) { - Location lastLoc = lastOutsideLoc.get(pname); - if (lastLoc != null) - player.teleport(lastLoc); - else - player.teleport(res.getOutsideFreeLoc(loc)); - - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly." + orres.getName())); - return; - } - } - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly." + orres.getName())); - player.teleport(location); - player.setFlying(false); - player.setAllowFlight(false); - } - } - } - - lastOutsideLoc.put(pname, loc); - - boolean chatchange = false; - if (!currentRes.containsKey(pname) || ResOld != res) - - { - currentRes.put(pname, areaname); - if (subzone == null) { - chatchange = true; - } - - // "from" residence for ResidenceChangedEvent - ClaimedResidence chgFrom = null; - if (ResOld != res && ResOld != null) { - String leave = ResOld.getLeaveMessage(); - chgFrom = ResOld; - - /* - * TODO - ResidenceLeaveEvent is deprecated as of 21-MAY-2013. - * Its functionality is replaced by ResidenceChangedEvent. For - * now, this event is still supported until it is removed at a - * suitable time in the future. - */ -// ResidenceLeaveEvent leaveevent = new ResidenceLeaveEvent(ResOld, player); -// Residence.getServ().getPluginManager().callEvent(leaveevent); - - if (leave != null && !leave.equals("") && ResOld != res.getParent()) { - if (Residence.getConfigManager().useActionBar()) { - ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); - } else { - player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); - } - } - } - - String enterMessage = res.getEnterMessage(); - - /* - * TODO - ResidenceEnterEvent is deprecated as of 21-MAY-2013. Its - * functionality is replaced by ResidenceChangedEvent. For now, this - * event is still supported until it is removed at a suitable time - * in the future. - */ -// ResidenceEnterEvent enterevent = new ResidenceEnterEvent(res, player); -// Residence.getServ().getPluginManager().callEvent(enterevent); - - // New ResidenceChangedEvent - ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); - Residence.getServ().getPluginManager().callEvent(chgEvent); - - if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) { - if (Residence.getConfigManager().useActionBar()) { - ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)).toString()); - } else { - player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); - } - } - } - if (chatchange && chatenabled) - - { - Residence.getChatManager().setChannel(pname, areaname); - } - - } - - public String insertMessages(Player player, String areaname, ClaimedResidence res, String message) { - try { - message = message.replaceAll("%player", player.getName()); - message = message.replaceAll("%owner", res.getPermissions().getOwner()); - message = message.replaceAll("%residence", areaname); - } catch (Exception ex) { - return ""; - } - return message; - } - - public void doHeals() { - try { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); - ClaimedResidence res = null; - - if (resname == null) - continue; - - res = Residence.getResidenceManager().getByName(resname); - - if (!res.getPermissions().has("healing", false)) - continue; - - Damageable damage = player; - double health = damage.getHealth(); - if (health < player.getMaxHealth() && !player.isDead()) { - player.setHealth(health + 1); - } - } - } catch (Exception ex) { - } - } - - public void DespawnMobs() { - try { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); - - if (resname == null) - continue; - - ClaimedResidence res = null; - res = Residence.getResidenceManager().getByName(resname); - - if (!res.getPermissions().has("nomobs", false)) - continue; - - List entities = Bukkit.getServer().getWorld(res.getWorld()).getEntities(); - for (Entity ent : entities) { - if (!ResidenceEntityListener.isMonster(ent)) - continue; - - if (res.containsLoc(ent.getLocation())) { - ent.remove(); - } - } - } - } catch (Exception ex) { - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerChat(AsyncPlayerChatEvent event) { - String pname = event.getPlayer().getName(); - if (chatenabled && playerToggleChat.contains(pname)) { - String area = currentRes.get(pname); - if (area != null) { - ChatChannel channel = Residence.getChatManager().getChannel(area); - if (channel != null) { - channel.chat(pname, event.getMessage()); - } - event.setCancelled(true); - } - } - } - - public void tooglePlayerResidenceChat(Player player) { - String pname = player.getName(); - if (playerToggleChat.contains(pname)) { - playerToggleChat.remove(pname); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "OFF" + ChatColor.YELLOW + "!")); - } else { - playerToggleChat.add(pname); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "ON" + ChatColor.YELLOW + "!")); - } - } - - public String getCurrentResidenceName(String player) { - return currentRes.get(player); - } -} +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package com.bekvon.bukkit.residence.listeners; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.entity.Damageable; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Hanging; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.SignChangeEvent; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerShearEntityEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.ResidenceCommandListener; +import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.event.*; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.ActionBar; + +import GUI.SetFlag; + +import com.bekvon.bukkit.residence.Signs.SignUtil; +import com.bekvon.bukkit.residence.Signs.Signs; + +/** + * + * @author Administrator + */ +public class ResidencePlayerListener implements Listener { + + protected Map currentRes; + protected Map lastUpdate; + protected Map lastOutsideLoc; + protected int minUpdateTime; + protected boolean chatenabled; + protected List playerToggleChat; + + public static Map GUI = new HashMap(); + + public ResidencePlayerListener() { + currentRes = new HashMap(); + lastUpdate = new HashMap(); + lastOutsideLoc = new HashMap(); + playerToggleChat = new ArrayList(); + minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); + chatenabled = Residence.getConfigManager().chatEnabled(); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + lastUpdate.put(player.getName(), System.currentTimeMillis()); + } + } + + public void reload() { + currentRes = new HashMap(); + lastUpdate = new HashMap(); + lastOutsideLoc = new HashMap(); + playerToggleChat = new ArrayList(); + minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); + chatenabled = Residence.getConfigManager().chatEnabled(); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + lastUpdate.put(player.getName(), System.currentTimeMillis()); + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onCommand(PlayerCommandPreprocessEvent event) { + Player player = event.getPlayer(); + String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + if (resname == null) + return; + ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + if (res == null) + return; + if (res.getPermissions().playerHas(player.getName(), "command", true)) + return; + + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "command")); + + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onFlagGuiClick(InventoryClickEvent event) { + if (GUI.size() == 0) + return; + + Player player = (Player) event.getWhoClicked(); + + if (!GUI.containsKey(player.getName())) + return; + + event.setCancelled(true); + int slot = event.getRawSlot(); + + if (slot > 53 || slot < 0) + return; + + SetFlag setFlag = GUI.get(player.getName()); + ClickType click = event.getClick(); + InventoryAction action = event.getAction(); + setFlag.toggleFlag(slot, click, action); + setFlag.recalculateInv(); + player.getOpenInventory().getTopInventory().setItem(slot, setFlag.getInventory().getItem(slot)); + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onFlagGuiClose(InventoryCloseEvent event) { + if (GUI.size() == 0) + return; + HumanEntity player = event.getPlayer(); + if (!GUI.containsKey(player.getName())) + return; + GUI.remove(player.getName()); + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onSignInteract(PlayerInteractEvent event) { + + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + Block block = event.getClickedBlock(); + + if (block == null) + return; + + if (!(block.getState() instanceof Sign)) + return; + + Player player = (Player) event.getPlayer(); + + Location loc = block.getLocation(); + + for (Signs one : SignUtil.Signs.GetAllSigns()) { + if (!one.GetWorld().equalsIgnoreCase(loc.getWorld().getName())) + continue; + if (one.GetX() != loc.getBlockX()) + continue; + if (one.GetY() != loc.getBlockY()) + continue; + if (one.GetZ() != loc.getBlockZ()) + continue; + + String landName = one.GetResidence(); + + boolean ForSale = Residence.getTransactionManager().isForSale(landName); + boolean ForRent = Residence.getRentManager().isForRent(landName); + + if (ForSale) { + Bukkit.dispatchCommand(player, "res market buy " + landName); + break; + } + + if (ForRent) { + if (Residence.getRentManager().isRented(landName) && player.isSneaking()) + Bukkit.dispatchCommand(player, "res market release " + landName); + else { + boolean stage = true; + if (player.isSneaking()) + stage = false; + + Bukkit.dispatchCommand(player, "res market rent " + landName + " " + stage); + } + } + + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onSignCreate(SignChangeEvent event) { + + Block block = event.getBlock(); + + if (!(block.getState() instanceof Sign)) + return; + + Sign sign = (Sign) block.getState(); + + if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(Residence.getLanguage().getPhrase("SignTopLine"))) + return; + + Signs signInfo = new Signs(); + + Location loc = sign.getLocation(); + + String landName = null; + + ClaimedResidence res = null; + if (!event.getLine(1).equalsIgnoreCase("")) { + + String resname = event.getLine(1); + if (!event.getLine(2).equalsIgnoreCase("")) + resname += "." + event.getLine(2); + if (!event.getLine(3).equalsIgnoreCase("")) + resname += "." + event.getLine(3); + + res = Residence.getResidenceManager().getByName(resname); + + if (res == null) { + event.getPlayer().sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + + landName = res.getName(); + + } else { + res = Residence.getResidenceManager().getByLoc(loc); + landName = Residence.getResidenceManager().getNameByLoc(loc); + } + + final ClaimedResidence residence = res; + + boolean ForSale = Residence.getTransactionManager().isForSale(landName); + boolean ForRent = Residence.getRentManager().isForRent(landName); + + int category = 1; + if (SignUtil.Signs.GetAllSigns().size() > 0) + category = SignUtil.Signs.GetAllSigns().get(SignUtil.Signs.GetAllSigns().size() - 1).GetCategory() + 1; + + if (ForSale || ForRent) { + signInfo.setCategory(category); + signInfo.setResidence(landName); + signInfo.setWorld(loc.getWorld().getName()); + signInfo.setX(loc.getBlockX()); + signInfo.setY(loc.getBlockY()); + signInfo.setZ(loc.getBlockZ()); + signInfo.setLocation(loc); + SignUtil.Signs.addSign(signInfo); + SignUtil.saveSigns(); + } + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + public void run() { + SignUtil.CheckSign(residence); + } + }, 5L); + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onSignDestroy(BlockBreakEvent event) { + + if (event.isCancelled()) + return; + + Block block = event.getBlock(); + + if (block == null) + return; + + if (!(block.getState() instanceof Sign)) + return; + + Location loc = block.getLocation(); + + for (Signs one : SignUtil.Signs.GetAllSigns()) { + + if (!one.GetWorld().equalsIgnoreCase(loc.getWorld().getName())) + continue; + if (one.GetX() != loc.getBlockX()) + continue; + if (one.GetY() != loc.getBlockY()) + continue; + if (one.GetZ() != loc.getBlockZ()) + continue; + + SignUtil.Signs.removeSign(one); + SignUtil.saveSigns(); + break; + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerQuit(PlayerQuitEvent event) { + String pname = event.getPlayer().getName(); + currentRes.remove(pname); + lastUpdate.remove(pname); + lastOutsideLoc.remove(pname); + Residence.getChatManager().removeFromChannel(pname); + + Residence.UUIDList.put(pname, event.getPlayer().getUniqueId()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + lastUpdate.put(player.getName(), 0L); + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + Residence.turnResAdminOn(player); + } + handleNewLocation(player, player.getLocation(), false); + + // if (player.isOp() || player.hasPermission("residence.versioncheck")) + // { + // Residence.getVersionChecker().VersionCheck(player); + // } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerSpawn(PlayerRespawnEvent event) { + Location loc = event.getRespawnLocation(); + Boolean bed = event.isBedSpawn(); + Player player = event.getPlayer(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res == null) { + return; + } + if (res.getPermissions().playerHas(player.getName(), "move", true)) { + return; + } + if (bed) { + loc = player.getWorld().getSpawnLocation(); + } + res = Residence.getResidenceManager().getByLoc(loc); + if (res != null && !res.getPermissions().playerHas(player.getName(), "move", true)) { + loc = res.getOutsideFreeLoc(loc); + } + + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoSpawn")); + event.setRespawnLocation(loc); + } + + @SuppressWarnings("deprecation") + private boolean isContainer(Material mat, Block block) { + return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") || Residence + .getConfigManager().getCustomContainers().contains(block.getTypeId()); + } + + @SuppressWarnings("deprecation") + private boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case SPRUCE_DOOR: + case BIRCH_DOOR: + case JUNGLE_DOOR: + case ACACIA_DOOR: + case DARK_OAK_DOOR: + case SPRUCE_FENCE_GATE: + case BIRCH_FENCE_GATE: + case JUNGLE_FENCE_GATE: + case ACACIA_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case TRAP_DOOR: + case IRON_TRAPDOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @SuppressWarnings("deprecation") + private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { + switch (mat) { + case ITEM_FRAME: + case BEACON: + case FLOWER_POT: + case COMMAND: + case ANVIL: + case CAKE_BLOCK: + case NOTE_BLOCK: + case DIODE: + case DIODE_BLOCK_OFF: + case DIODE_BLOCK_ON: + case BED_BLOCK: + case WORKBENCH: + case BREWING_STAND: + case ENCHANTMENT_TABLE: + return true; + default: + return Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + private boolean isCanUseEntity(Material mat, Block block) { + return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); + } + + @SuppressWarnings("deprecation") + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteract(PlayerInteractEvent event) { + Player player = event.getPlayer(); + Material heldItem = player.getItemInHand().getType(); + int heldItemId = player.getItemInHand().getTypeId(); + Block block = event.getClickedBlock(); + if (block == null) { + return; + } + int blockId = block.getTypeId(); + + Material mat = block.getType(); + if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block) + || event.getAction() == Action.PHYSICAL)) { + if (heldItemId != Residence.getConfigManager().getSelectionTooldID() && heldItemId != Residence.getConfigManager().getInfoToolID() && heldItemId != 351 + && heldItemId != 416) { + return; + } + } + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + String world = player.getWorld().getName(); + String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); + boolean resadmin = Residence.isResAdminOn(player); + if (event.getAction() == Action.PHYSICAL) { + if (!resadmin) { + boolean hasuse = perms.playerHas(player.getName(), world, "use", true); + boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse); + if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) { + event.setCancelled(true); + return; + } + } + if (!perms.playerHas(player.getName(), world, "trample", perms.playerHas(player.getName(), world, "build", true)) && (mat == Material.SOIL + || mat == Material.SOUL_SAND)) { + event.setCancelled(true); + return; + } + return; + } + if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); + event.setCancelled(true); + return; + } + if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + if (heldItemId == Residence.getConfigManager().getSelectionTooldID()) { + if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) + return; + + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group + .canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { + if (event.getAction() == Action.LEFT_CLICK_BLOCK) { + Location loc = block.getLocation(); + Residence.getSelectionManager().placeLoc1(player, loc); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED + + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + Location loc = block.getLocation(); + Residence.getSelectionManager().placeLoc2(player, loc); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED + + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + } + + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) + Residence.getSelectionManager().showSelectionInfoInActionBar(player); + } + } + if (heldItemId == Residence.getConfigManager().getInfoToolID() && event.getAction() == Action.LEFT_CLICK_BLOCK) { + Location loc = block.getLocation(); + String res = Residence.getResidenceManager().getNameByLoc(loc); + if (res != null) { + Residence.getResidenceManager().printAreaInfo(res, player); + event.setCancelled(true); + } else { + event.setCancelled(true); + player.sendMessage(Residence.getLanguage().getPhrase("NoResHere")); + } + } + + if (resadmin) + return; + + if (heldItem != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (heldItemId == 351) { + if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS || player.getItemInHand().getData().getData() == 3 + && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { + perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!perms.playerHas(player.getName(), world, "build", true)) { + event.setCancelled(true); + return; + } + } + } + if (heldItem == Material.ARMOR_STAND) { + perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!perms.playerHas(player.getName(), world, "build", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + event.setCancelled(true); + return; + } + } + } + if (isContainer(mat, block) || isCanUseEntity(mat, block)) { + boolean hasuse = perms.playerHas(player.getName(), world, "use", true); + for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { + if (mat != checkMat.getKey()) + continue; + + if (perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) + continue; + + if (hasuse || checkMat.getValue().equals("container")) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", checkMat.getValue())); + return; + } else { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); + return; + } + + } + if (Residence.getConfigManager().getCustomContainers().contains(blockId)) { + if (!perms.playerHas(player.getName(), world, "container", hasuse)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + return; + } + } + if (Residence.getConfigManager().getCustomBothClick().contains(blockId)) { + if (!hasuse) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); + return; + } + } + if (Residence.getConfigManager().getCustomRightClick().contains(blockId) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (!hasuse) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); + return; + } + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + /* Trade */ + if (ent.getType() != EntityType.VILLAGER) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getPlayer().getLocation()); + + if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + event.setCancelled(true); + } + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerShearEntity(PlayerShearEntityEvent event) { + + if (event.isCancelled()) + return; + + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getEntity(); + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + + if (!res.getPermissions().playerHas(player.getName(), "shear", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Shear." + res.getName())); + event.setCancelled(true); + } + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + + /* Container - ItemFrame protection */ + if (!(ent instanceof Hanging)) + return; + + Hanging hanging = (Hanging) ent; + + if (hanging.getType() != EntityType.ITEM_FRAME) { + return; + } + + Material heldItem = player.getItemInHand().getType(); + + FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + String world = player.getWorld().getName(); + String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); + if (!Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); + event.setCancelled(true); + return; + } + if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + if (ent.getType() != EntityType.ARMOR_STAND) + return; + + FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + String world = player.getWorld().getName(); + + if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); + if (res != null) { + if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { + if (Residence.getRentManager().isRented(res.getName())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); + event.setCancelled(true); + return; + } + } + + Material mat = event.getBucket(); + if (!res.getPermissions().playerHas(player.getName(), "bucket", true) && Residence.getConfigManager().getNoPlaceWorlds().contains(event.getBlockClicked() + .getLocation().getWorld().getName())) { + if (mat == Material.LAVA_BUCKET) { + event.setCancelled(true); + return; + } + if (mat == Material.WATER_BUCKET) { + event.setCancelled(true); + return; + } + } + } + + String pname = player.getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); + if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true))) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); + event.setCancelled(true); + return; + } + + Material mat = event.getBucket(); + int level = Residence.getConfigManager().getPlaceLevel(); + if (res == null && Residence.getConfigManager().isNoLavaPlace() && event.getBlockClicked().getLocation().getBlockY() >= level - 1 && Residence.getConfigManager() + .getNoPlaceWorlds().contains(event.getBlockClicked().getLocation().getWorld().getName())) { + if (mat == Material.LAVA_BUCKET) { + if (!Residence.getLanguage().getPhrase("CantPlaceLava").equalsIgnoreCase("")) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("CantPlaceLava", String.valueOf(level))); + event.setCancelled(true); + return; + } + } + + if (res == null && Residence.getConfigManager().isNoWaterPlace() && event.getBlockClicked().getLocation().getBlockY() >= level - 1 && Residence.getConfigManager() + .getNoPlaceWorlds().contains(event.getBlockClicked().getLocation().getWorld().getName())) + if (mat == Material.WATER_BUCKET) { + if (!Residence.getLanguage().getPhrase("CantPlaceWater").equalsIgnoreCase("")) + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("CantPlaceWater", String.valueOf(level))); + event.setCancelled(true); + return; + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerBucketFill(PlayerBucketFillEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); + if (res != null) { + if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { + if (Residence.getRentManager().isRented(res.getName())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); + event.setCancelled(true); + return; + } + } + } + + String pname = player.getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); + boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)); + if (!hasbucket) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerTeleport(PlayerTeleportEvent event) { + + Player player = event.getPlayer(); + + if (player.hasMetadata("NPC")) + return; + + Location loc = event.getTo(); + + if (Residence.isResAdminOn(player)) { + handleNewLocation(player, loc, false); + return; + } + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null) { + if (event.getCause() == TeleportCause.ENDER_PEARL || event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event + .getCause() == TeleportCause.PLUGIN) { + String areaname = res.getName(); + if (!res.getPermissions().playerHas(player.getName(), "move", true)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", areaname)); + return; + } + } + + if (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) { + if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { + String areaname = res.getName(); + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny", areaname)); + return; + } + } + } + //handleNewLocation(player, loc, false); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerMove(PlayerMoveEvent event) { + + Player player = event.getPlayer(); + if (player == null) + return; + + if (player.hasMetadata("NPC")) + return; + + String name = player.getName(); + long last = lastUpdate.get(name); + long now = System.currentTimeMillis(); + if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) { + return; + } + lastUpdate.put(name, now); + Location locfrom = event.getFrom(); + Location locto = event.getTo(); + if (locfrom.getX() == locto.getX() && locfrom.getY() == locto.getY() && locfrom.getZ() == locto.getZ()) + return; + + handleNewLocation(player, locto, true); + + if (Residence.getConfigManager().getTeleportDelay() > 0 && ResidenceCommandListener.teleportDelayMap.contains(player.getName())) { + ResidenceCommandListener.teleportDelayMap.remove(player.getName()); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportCanceled")); + } + } + + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + return false; + } + + public void handleNewLocation(Player player, Location loc, boolean move) { + + String pname = player.getName(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + + ClaimedResidence orres = res; + String areaname = null; + String subzone = null; + if (res != null) { + areaname = res.getName(); + while (res.getSubzoneByLoc(loc) != null) { + res = res.getSubzoneByLoc(player.getLocation()); + subzone = res.getName(); + areaname = areaname + "." + subzone; + } + } + + ClaimedResidence ResOld = null; + if (currentRes.containsKey(pname)) { + ResOld = Residence.getResidenceManager().getByName(currentRes.get(pname)); + if (ResOld == null) { + currentRes.remove(pname); + } + } + + if (res == null) { + lastOutsideLoc.put(pname, loc); + if (ResOld != null) { + String leave = ResOld.getLeaveMessage(); + /* + * TODO - ResidenceLeaveEvent is deprecated as of 21-MAY-2013. + * Its functionality is replaced by ResidenceChangedEvent. For + * now, this event is still supported until it is removed at a + * suitable time in the future. + */ +// ResidenceLeaveEvent leaveevent = new ResidenceLeaveEvent(ResOld, player); +// Residence.getServ().getPluginManager().callEvent(leaveevent); + + // New ResidenceChangeEvent + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); + Residence.getServ().getPluginManager().callEvent(chgEvent); + + if (leave != null && !leave.equals("")) { + if (Residence.getConfigManager().useActionBar()) { + ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); + } else { + player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + } + } + currentRes.remove(pname); + Residence.getChatManager().removeFromChannel(pname); + } + return; + } + + if (move) { + if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player)) { + Location lastLoc = lastOutsideLoc.get(pname); + if (lastLoc != null) { + player.teleport(lastLoc); + } else { + player.teleport(res.getOutsideFreeLoc(loc)); + } + if (Residence.getConfigManager().useActionBar()) { + ActionBar.send(player, ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", orres.getName())); + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", orres.getName())); + } + + return; + // Preventing fly in residence only when player has move permission + } else if (player.isFlying()) { + if (res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission("residence.nofly.bypass")) { + Location lc = player.getLocation(); + Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); + location.setPitch(lc.getPitch()); + location.setYaw(lc.getYaw()); + int from = location.getBlockY(); + int maxH = location.getWorld().getMaxHeight(); + for (int i = 0; i < maxH; i++) { + location.setY(from - i); + Block block = location.getBlock(); + if (!isEmptyBlock(block)) { + location.setY(from - i + 1); + break; + } + if (location.getBlockY() <= 0) { + Location lastLoc = lastOutsideLoc.get(pname); + if (lastLoc != null) + player.teleport(lastLoc); + else + player.teleport(res.getOutsideFreeLoc(loc)); + + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly." + orres.getName())); + return; + } + } + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly." + orres.getName())); + player.teleport(location); + player.setFlying(false); + player.setAllowFlight(false); + } + } + } + + lastOutsideLoc.put(pname, loc); + + boolean chatchange = false; + if (!currentRes.containsKey(pname) || ResOld != res) + + { + currentRes.put(pname, areaname); + if (subzone == null) { + chatchange = true; + } + + // "from" residence for ResidenceChangedEvent + ClaimedResidence chgFrom = null; + if (ResOld != res && ResOld != null) { + String leave = ResOld.getLeaveMessage(); + chgFrom = ResOld; + + /* + * TODO - ResidenceLeaveEvent is deprecated as of 21-MAY-2013. + * Its functionality is replaced by ResidenceChangedEvent. For + * now, this event is still supported until it is removed at a + * suitable time in the future. + */ +// ResidenceLeaveEvent leaveevent = new ResidenceLeaveEvent(ResOld, player); +// Residence.getServ().getPluginManager().callEvent(leaveevent); + + if (leave != null && !leave.equals("") && ResOld != res.getParent()) { + if (Residence.getConfigManager().useActionBar()) { + ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); + } else { + player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + } + } + } + + String enterMessage = res.getEnterMessage(); + + /* + * TODO - ResidenceEnterEvent is deprecated as of 21-MAY-2013. Its + * functionality is replaced by ResidenceChangedEvent. For now, this + * event is still supported until it is removed at a suitable time + * in the future. + */ +// ResidenceEnterEvent enterevent = new ResidenceEnterEvent(res, player); +// Residence.getServ().getPluginManager().callEvent(enterevent); + + // New ResidenceChangedEvent + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); + Residence.getServ().getPluginManager().callEvent(chgEvent); + + if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) { + if (Residence.getConfigManager().useActionBar()) { + ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)).toString()); + } else { + player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); + } + } + } + if (chatchange && chatenabled) + + { + Residence.getChatManager().setChannel(pname, areaname); + } + + } + + public String insertMessages(Player player, String areaname, ClaimedResidence res, String message) { + try { + message = message.replaceAll("%player", player.getName()); + message = message.replaceAll("%owner", res.getPermissions().getOwner()); + message = message.replaceAll("%residence", areaname); + } catch (Exception ex) { + return ""; + } + return message; + } + + public void doHeals() { + try { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + ClaimedResidence res = null; + + if (resname == null) + continue; + + res = Residence.getResidenceManager().getByName(resname); + + if (!res.getPermissions().has("healing", false)) + continue; + + Damageable damage = player; + double health = damage.getHealth(); + if (health < player.getMaxHealth() && !player.isDead()) { + player.setHealth(health + 1); + } + } + } catch (Exception ex) { + } + } + + public void DespawnMobs() { + try { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + + if (resname == null) + continue; + + ClaimedResidence res = null; + res = Residence.getResidenceManager().getByName(resname); + + if (!res.getPermissions().has("nomobs", false)) + continue; + + List entities = Bukkit.getServer().getWorld(res.getWorld()).getEntities(); + for (Entity ent : entities) { + if (!ResidenceEntityListener.isMonster(ent)) + continue; + + if (res.containsLoc(ent.getLocation())) { + ent.remove(); + } + } + } + } catch (Exception ex) { + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerChat(AsyncPlayerChatEvent event) { + String pname = event.getPlayer().getName(); + if (chatenabled && playerToggleChat.contains(pname)) { + String area = currentRes.get(pname); + if (area != null) { + ChatChannel channel = Residence.getChatManager().getChannel(area); + if (channel != null) { + channel.chat(pname, event.getMessage()); + } + event.setCancelled(true); + } + } + } + + public void tooglePlayerResidenceChat(Player player) { + String pname = player.getName(); + if (playerToggleChat.contains(pname)) { + playerToggleChat.remove(pname); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "OFF" + ChatColor.YELLOW + "!")); + } else { + playerToggleChat.add(pname); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "ON" + ChatColor.YELLOW + "!")); + } + } + + public String getCurrentResidenceName(String player) { + return currentRes.get(player); + } +} diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 614eaa62f..0cbd54650 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -44,6 +44,10 @@ public PermissionManager(FileConfiguration config, FileConfiguration flags) { } } + public FlagPermissions getAllFlags() { + return this.globalFlagPerms; + } + public PermissionGroup getGroup(Player player) { return groups.get(this.getGroupNameByPlayer(player)); } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 6427f098b..7310d06a4 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -21,6 +21,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.utils.Debug; /** * @@ -35,7 +36,7 @@ public class FlagPermissions { protected Map cachedPlayerNameUUIDs; protected Map> playerFlags; protected Map> groupFlags; - protected Map cuboidFlags; + protected Map cuboidFlags = new HashMap(); protected FlagPermissions parent; public static void addMaterialToUseFlag(Material mat, String flag) { @@ -144,11 +145,13 @@ public static void initValidFlags() { addFlag("mobkilling"); addFlag("vehicledestroy"); addFlag("trade"); - + addFlag("leash"); addFlag("shear"); addFlag("nofly"); + addFlag("command"); + addResidenceOnlyFlag("trample"); addResidenceOnlyFlag("pvp"); addResidenceOnlyFlag("fireball"); @@ -173,7 +176,7 @@ public static void initValidFlags() { // prevents from mobs entering residence addResidenceOnlyFlag("nomobs"); - + addPlayerOrGroupOnlyFlag("admin"); addFlagToFlagGroup("redstone", "note"); addFlagToFlagGroup("redstone", "pressure"); @@ -279,6 +282,7 @@ public FlagPermissions() { protected Map getPlayerFlags(String player, boolean allowCreate)//this function works with uuid in string format as well, instead of player name { + player = player.toLowerCase(); String uuids; Map flags = null; @@ -612,6 +616,18 @@ public String listFlags() { return sbuild.toString(); } + public Map getFlags() { + return cuboidFlags; + } + + public Map getPlayerFlags(String player) { + return this.getPlayerFlags(player, false); + } + + public ArrayList getposibleFlags() { + return FlagPermissions.validFlags; + } + public String listPlayerFlags(String player) { Map flags = this.getPlayerFlags(player, false); if (flags != null) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 12d0708e7..43fe2de6e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -188,7 +188,7 @@ public boolean setPlayerFlag(Player player, String targetPlayer, String flag, St return false; if (super.setPlayerFlag(targetPlayer, flag, state)) { if (Show) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag + "." + residence.getName() + "." + flagstate)); return true; } } @@ -207,7 +207,7 @@ public boolean setGroupFlag(Player player, String group, String flag, String fla if (fc.isCancelled()) return false; if (super.setGroupFlag(group, flag, state)) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag + "." + residence.getName() + "." + flagstate)); return true; } } else { diff --git a/src/com/bekvon/bukkit/residence/utils/Sorting.java b/src/com/bekvon/bukkit/residence/utils/Sorting.java new file mode 100644 index 000000000..90f15bed8 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/Sorting.java @@ -0,0 +1,117 @@ +package com.bekvon.bukkit.residence.utils; + +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +public class Sorting { + public static Map sortByValueDESC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + public int compare(Map.Entry o1, Map.Entry o2) { + return (o2.getValue()).compareTo(o1.getValue()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public static Map sortByKeyDESC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + public int compare(Map.Entry o1, Map.Entry o2) { + return (o2.getKey()).compareTo(o1.getKey()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public static Map sortByKeyASC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + public int compare(Map.Entry o1, Map.Entry o2) { + return (o1.getKey()).compareTo(o2.getKey()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public static Map sortDoubleDESC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + public int compare(Map.Entry o1, Map.Entry o2) { + return (o2.getValue()).compareTo(o1.getValue()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + + public static Map sortASC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + public int compare(Map.Entry o1, Map.Entry o2) { + return (o1.getValue()).compareTo(o2.getValue()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } +} diff --git a/src/plugin.yml b/src/plugin.yml index 891639420..8660f74c8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.6.0 +version: 2.7.7.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 8dc62a9e84df550919c88914e10551e458193494 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 18 Sep 2015 17:53:11 +0300 Subject: [PATCH 0018/1142] New flag command description --- src/com/bekvon/bukkit/residence/Locale.java | 1 + src/flags.yml | 219 ++++++++++---------- 2 files changed, 111 insertions(+), 109 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index cd67cb954..0aa32d8e7 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -577,6 +577,7 @@ public static void LoadLang(String lang) { "&2nomobs &3- &ePrevents monsters from entering residence residence", "&2explode &3- &eAllows or denys explosions in residences", "&2fireball &3- &eAllows or denys fire balls in residences", + "&2command &3- &eAllows or denys comamnd use in residences", "&2burn &3- &eallows or denys Mob combustion in residences"), writer, conf, true); diff --git a/src/flags.yml b/src/flags.yml index 79e502852..7d4a8fcb7 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -1,110 +1,111 @@ -#These are Global Settings for Residence. -Global: - # These are world flags that are applied when the player is NOT within a residence. - Flags: - Global: #these are default for all worlds unless specified below, they can be overridden per group - use: true - build: true - ignite: true - firespread: true - damage: true - creeper: true - tnt: true - pvp: true - WorldNameHere: #here you can set flags for individual worlds, these override Global - #build: true - # This gives permission to change certain flags to all groups, unless specifically denied to the group. - FlagPermission: - move: true - build: true - place: true - destroy: true - use: true - container: true - pvp: true - tp: true - ignite: true - firespread: true - bucket: true - flow: true - lavaflow: true - waterflow: true - creeper: true - tnt: true - monsters: true - animals: true - animalkilling: true - mobkilling: true - vehicledestroy: true - trade: true - shear: true - leash: true - nofly: true - subzone: true - healing: true - piston: true - diode: true - lever: true - button: true - door: true - table: true - enchant: true - brew: true - bed: true - cake: true - note: true - trample: false - burn: true - explode: false - fireball: true - # These are default flags applied to all residences from any user group. - ResidenceDefault: - build: false - use: false - container: false - pvp: false - tnt: false - creeper: false - flow: false - piston: false - ignite: false - firespread: false - vehicledestroy: false - animalkilling: false - shear: false - leash: false - # These are default flags applied to the residence creator of any group. - CreatorDefault: - build: true - move: true - use: true - ignite: true - container: true - animalkilling: true - mobkilling: true - vehicledestroy: true - trade: true - shear: true - leash: true - # These are default group flags applied to a residence made by a user of any group. - GroupDefault: - #default: #group name - #build: true -ItemList: #this is where you can create blacklists / whitelists - DefaultList: #list name is not important, as long as it is unique. Its good to use a descripive name. - #type of the list, can be blacklist, whitelist, or ignorelist - Type: blacklist - #If you want, you can have this list only apply to one world, otherwise it applys to all worlds - #World: world - #You can also have the list apply only to one group, otherwise it applys for all groups - #Group: default - #this is the actual list of material names that this list allows or dissallows - #You can look up the material name by item ID in game by typing /res material - #Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance - Items: - - 'BEDROCK' - - 'LAVA' - - 'WATER' - - 'STATIONARY_LAVA' - - 'STATIONARY_WATER' +#These are Global Settings for Residence. +Global: + # These are world flags that are applied when the player is NOT within a residence. + Flags: + Global: #these are default for all worlds unless specified below, they can be overridden per group + use: true + build: true + ignite: true + firespread: true + damage: true + creeper: true + tnt: true + pvp: true + WorldNameHere: #here you can set flags for individual worlds, these override Global + #build: true + # This gives permission to change certain flags to all groups, unless specifically denied to the group. + FlagPermission: + move: true + build: true + place: true + destroy: true + use: true + container: true + pvp: true + tp: true + ignite: true + firespread: true + bucket: true + flow: true + lavaflow: true + waterflow: true + creeper: true + tnt: true + monsters: true + animals: true + animalkilling: true + mobkilling: true + vehicledestroy: true + trade: true + shear: true + leash: true + nofly: false + subzone: true + healing: true + piston: true + diode: true + lever: true + button: true + door: true + table: true + enchant: true + brew: true + bed: true + cake: true + note: true + trample: true + burn: true + explode: true + fireball: true + command: false + # These are default flags applied to all residences from any user group. + ResidenceDefault: + build: false + use: false + container: false + pvp: false + tnt: false + creeper: false + flow: false + piston: false + ignite: false + firespread: false + vehicledestroy: false + animalkilling: false + shear: false + leash: false + # These are default flags applied to the residence creator of any group. + CreatorDefault: + build: true + move: true + use: true + ignite: true + container: true + animalkilling: true + mobkilling: true + vehicledestroy: true + trade: true + shear: true + leash: true + # These are default group flags applied to a residence made by a user of any group. + GroupDefault: + #default: #group name + #build: true +ItemList: #this is where you can create blacklists / whitelists + DefaultList: #list name is not important, as long as it is unique. Its good to use a descripive name. + #type of the list, can be blacklist, whitelist, or ignorelist + Type: blacklist + #If you want, you can have this list only apply to one world, otherwise it applys to all worlds + #World: world + #You can also have the list apply only to one group, otherwise it applys for all groups + #Group: default + #this is the actual list of material names that this list allows or dissallows + #You can look up the material name by item ID in game by typing /res material + #Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance + Items: + - 'BEDROCK' + - 'LAVA' + - 'WATER' + - 'STATIONARY_LAVA' + - 'STATIONARY_WATER' - 'MOB_SPAWNER' \ No newline at end of file From 8107d0deecd4819c06e8f71b78380f9adde8361c Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 18 Sep 2015 20:26:25 +0300 Subject: [PATCH 0019/1142] Command flag bypass and no more unesesary feedback while opening GUI --- .../bekvon/bukkit/residence/ResidenceCommandListener.java | 2 ++ .../bukkit/residence/listeners/ResidencePlayerListener.java | 6 ++++++ src/plugin.yml | 3 +++ 3 files changed, 11 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 9a5412305..c31a58e47 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1143,6 +1143,7 @@ private boolean commandResSet(String[] args, boolean resadmin, Player player, in player.openInventory(flag.getInventory()); } else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; } else if (args.length == 2) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res != null) { @@ -1152,6 +1153,7 @@ private boolean commandResSet(String[] args, boolean resadmin, Player player, in player.openInventory(flag.getInventory()); } else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; } return false; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 15eb79c10..68a1a1d17 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -116,6 +116,12 @@ public void onCommand(PlayerCommandPreprocessEvent event) { if (res.getPermissions().playerHas(player.getName(), "command", true)) return; + if (Residence.getPermissionManager().isResidenceAdmin(player)) + return; + + if (player.hasPermission("residence.command.bypass")) + return; + event.setCancelled(true); player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "command")); diff --git a/src/plugin.yml b/src/plugin.yml index 8660f74c8..c78ca03ca 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -53,3 +53,6 @@ permissions: residence.nofly.bypass: description: Bypasses nofly flag in residence default: op + residence.command.bypass: + description: Bypasses command flag in residence + default: op From 7b2b9c543e98623dfdc361505d798e48a789749f Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 20 Sep 2015 14:09:42 +0300 Subject: [PATCH 0020/1142] Gui fixes, more locale, more config --- src/GUI/SetFlag.java | 50 ++++++++++++------- .../bukkit/residence/ConfigManager.java | 48 +++++++++++++++++- src/com/bekvon/bukkit/residence/Locale.java | 2 + .../residence/ResidenceCommandListener.java | 9 ++-- .../listeners/ResidencePlayerListener.java | 2 +- src/plugin.yml | 4 +- 6 files changed, 89 insertions(+), 26 deletions(-) diff --git a/src/GUI/SetFlag.java b/src/GUI/SetFlag.java index a0a960b5a..ceaeb519d 100644 --- a/src/GUI/SetFlag.java +++ b/src/GUI/SetFlag.java @@ -32,13 +32,23 @@ public class SetFlag { private Inventory inventory; private LinkedHashMap permMap = new LinkedHashMap(); private LinkedHashMap> description = new LinkedHashMap>(); + private boolean admin = false; - public SetFlag(String residence, Player player) { + public SetFlag(String residence, Player player, boolean admin) { this.residence = residence; this.player = player; + this.admin = admin; fillFlagDescriptions(); } + public void setAdmin(boolean state) { + this.admin = state; + } + + public boolean isAdmin() { + return this.admin; + } + public void setTargePlayer(String player) { this.targetPlayer = player; } @@ -76,11 +86,17 @@ else if (click.isLeftClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTOR } i++; } - if (targetPlayer == null) - Bukkit.dispatchCommand(player, "res set " + residence + " " + flag + " " + command); - else - Bukkit.dispatchCommand(player, "res pset " + residence + " " + targetPlayer + " " + flag + " " + command); - + if (targetPlayer == null) { + if (admin) + Bukkit.dispatchCommand(player, "resadmin set " + residence + " " + flag + " " + command); + else + Bukkit.dispatchCommand(player, "res set " + residence + " " + flag + " " + command); + } else { + if (admin) + Bukkit.dispatchCommand(player, "resadmin pset " + residence + " " + targetPlayer + " " + flag + " " + command); + else + Bukkit.dispatchCommand(player, "res pset " + residence + " " + targetPlayer + " " + flag + " " + command); + } } public void recalculateInv() { @@ -153,16 +169,17 @@ public void recalculateInv(ClaimedResidence res) { else permMap.put(one.getKey(), 2); } + String title = ""; + if (targetPlayer == null) + title = NewLanguage.getMessage("Language.Gui.Set.Title").replace("%1%", res.getName()); + else + title = NewLanguage.getMessage("Language.Gui.Pset.Title").replace("%1%", targetPlayer).replace("%2%", res.getName()); - String name = targetPlayer == null ? "" : targetPlayer + " "; - - name = name + res.getName() + " flags"; - - if (name.length() > 32) { - name = name.substring(0, Math.min(name.length(), 32)); + if (title.length() > 32) { + title = title.substring(0, Math.min(title.length(), 32)); } - Inventory GuiInv = Bukkit.createInventory(null, 54, name); + Inventory GuiInv = Bukkit.createInventory(null, 54, title); int i = 0; permMap = (LinkedHashMap) Sorting.sortByKeyASC(permMap); @@ -173,13 +190,12 @@ public void recalculateInv(ClaimedResidence res) { if (Mat == null) Mat = Material.STONE; - short meta = 6; + ItemStack MiscInfo = Residence.getConfigManager().getGuiRemove(); if (one.getValue() == 1) - meta = 13; + MiscInfo = Residence.getConfigManager().getGuiTrue(); else if (one.getValue() == 0) - meta = 14; + MiscInfo = Residence.getConfigManager().getGuiFalse(); - ItemStack MiscInfo = new ItemStack(Mat, 1, (short) meta); ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); MiscInfoMeta.setDisplayName(ChatColor.GREEN + one.getKey()); diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index ae8247118..baad57034 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -23,6 +23,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.inventory.ItemStack; /** * @@ -96,6 +97,11 @@ public class ConfigManager { protected List AutoCleanUpWorlds; protected List NoPlaceWorlds; protected List CleanWorlds; + + protected ItemStack GuiTrue; + protected ItemStack GuiFalse; + protected ItemStack GuiRemove; + private boolean enforceAreaInsideArea; protected ParticleEffects SelectedFrame; @@ -219,7 +225,8 @@ void UpdateConfigFile() { writer.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); autoSaveInt = GetConfigInt("Global.SaveInterval", 10, writer, conf); - writer.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.","Players can bypass this wih residence.cleanbypass permission node"); + writer.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", + "Players can bypass this wih residence.cleanbypass permission node"); AutoCleanUp = GetConfigBoolean("Global.AutoCleanUp.Use", false, writer, conf); writer.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); AutoCleanUpDays = GetConfigInt("Global.AutoCleanUp.Days", 60, writer, conf); @@ -385,6 +392,33 @@ void UpdateConfigFile() { Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } + writer.addComment("Global.GUI.True.Id", + "Item id to use when flag is set to true"); + + int id = GetConfigInt("Global.GUI.True.Id", 35, writer, conf); + int data = GetConfigInt("Global.GUI.True.Data", 13, writer, conf); + + Material Mat = Material.getMaterial(id); + if (Mat == null) + Mat = Material.STONE; + GuiTrue = new ItemStack(Mat, 1, (short) data); + + id = GetConfigInt("Global.GUI.False.Id", 35, writer, conf); + data = GetConfigInt("Global.GUI.False.Data", 14, writer, conf); + + Mat = Material.getMaterial(id); + if (Mat == null) + Mat = Material.STONE; + GuiFalse = new ItemStack(Mat, 1, (short) data); + + id = GetConfigInt("Global.GUI.Remove.Id", 35, writer, conf); + data = GetConfigInt("Global.GUI.Remove.Data", 8, writer, conf); + + Mat = Material.getMaterial(id); + if (Mat == null) + Mat = Material.STONE; + GuiRemove = new ItemStack(Mat, 1, (short) data); + writer.addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", "This is quite heavy on server side, so enable only if you really need this feature"); @@ -703,4 +737,16 @@ public List getCleanWorlds() { public boolean getEnforceAreaInsideArea() { return enforceAreaInsideArea; } + + public ItemStack getGuiTrue() { + return GuiTrue; + } + + public ItemStack getGuiFalse() { + return GuiFalse; + } + + public ItemStack getGuiRemove() { + return GuiRemove; + } } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 0aa32d8e7..3f27673f5 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -356,6 +356,8 @@ public static void LoadLang(String lang) { GetConfigString("Language.LimitsLeaseTime", "&7- &eLease Time Given on Renew:&3 %1", writer, conf, true); GetConfigString("Language.LimitsRenewCost", "&7- &eRenew Cost Per Block:&3 %1", writer, conf, true); GetConfigString("Language.LimitsBottom", "----------------------------------------", writer, conf, true); + GetConfigString("Language.Gui.Set.Title", "&6%1% flags", writer, conf, true); + GetConfigString("Language.Gui.Pset.Title", "&6%1% %2% flags", writer, conf, true); GetConfigArray("Language.Gui.Actions", Arrays.asList("&2Left click to enable", "&cRight click to disable","&eShift + left click to remove"), writer, conf, true); writer.addComment("CommandHelp", ""); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index c31a58e47..40a29def6 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1137,7 +1137,7 @@ private boolean commandResSet(String[] args, boolean resadmin, Player player, in } else if (args.length == 1) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { - SetFlag flag = new SetFlag(res.getName(), player); + SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.recalculateInv(res); ResidencePlayerListener.GUI.put(player.getName(), flag); player.openInventory(flag.getInventory()); @@ -1147,7 +1147,7 @@ private boolean commandResSet(String[] args, boolean resadmin, Player player, in } else if (args.length == 2) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res != null) { - SetFlag flag = new SetFlag(res.getName(), player); + SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.recalculateInv(res); ResidencePlayerListener.GUI.put(player.getName(), flag); player.openInventory(flag.getInventory()); @@ -1194,7 +1194,7 @@ private boolean commandResPset(String[] args, boolean resadmin, Player player, i } else if (args.length == 2) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { - SetFlag flag = new SetFlag(res.getName(), player); + SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.setTargePlayer(args[1]); flag.recalculateInv(res); ResidencePlayerListener.GUI.put(player.getName(), flag); @@ -1202,11 +1202,10 @@ private boolean commandResPset(String[] args, boolean resadmin, Player player, i } else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; - } else if (args.length == 3) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res != null) { - SetFlag flag = new SetFlag(res.getName(), player); + SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.setTargePlayer(args[2]); flag.recalculateInv(res); ResidencePlayerListener.GUI.put(player.getName(), flag); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 68a1a1d17..c4de4bc0e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -119,7 +119,7 @@ public void onCommand(PlayerCommandPreprocessEvent event) { if (Residence.getPermissionManager().isResidenceAdmin(player)) return; - if (player.hasPermission("residence.command.bypass")) + if (player.hasPermission("residence.flag.command.bypass")) return; event.setCancelled(true); diff --git a/src/plugin.yml b/src/plugin.yml index c78ca03ca..3d000cd61 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.7.0 +version: 2.7.7.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -53,6 +53,6 @@ permissions: residence.nofly.bypass: description: Bypasses nofly flag in residence default: op - residence.command.bypass: + residence.flag.command.bypass: description: Bypasses command flag in residence default: op From e5f7550ef6273979beacb9ef8a5968371eefdba5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 20 Sep 2015 14:20:20 +0300 Subject: [PATCH 0021/1142] Droper not droping items in residence --- .../listeners/ResidenceBlockListener.java | 664 +++++++++--------- 1 file changed, 333 insertions(+), 331 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index dd529f819..31988792f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -1,331 +1,333 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - -package com.bekvon.bukkit.residence.listeners; - -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.ChatColor; - -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import org.bukkit.entity.Player; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockBurnEvent; -import org.bukkit.event.block.BlockDispenseEvent; -import org.bukkit.event.block.BlockFromToEvent; -import org.bukkit.event.block.BlockIgniteEvent; -import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; -import org.bukkit.event.block.BlockPistonExtendEvent; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.block.BlockPlaceEvent; - -import com.bekvon.bukkit.residence.NewLanguage; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockSpreadEvent; -import org.bukkit.inventory.ItemStack; - -/** - * - * @author Administrator - */ -public class ResidenceBlockListener implements Listener { - - private static List informed = new ArrayList(); - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockBreak(BlockBreakEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { - return; - } - - Block block = event.getBlock(); - Material mat = block.getType(); - String world = block.getWorld().getName(); - String group = Residence.getPermissionManager().getGroupNameByPlayer(player); - if (Residence.getItemManager().isIgnored(mat, group, world)) { - return; - } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); - if (Residence.getConfigManager().enabledRentSystem() && res != null) { - String resname = res.getName(); - if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); - event.setCancelled(true); - return; - } - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); - String pname = player.getName(); - if (res != null && res.getItemIgnoreList().isListed(mat)) - return; - - boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), "destroy", perms.playerHas(pname, player.getWorld().getName(), "build", true)); - boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), "container", true); - if (!hasdestroy || (!hasContainer && mat == Material.CHEST)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onChestPlace(BlockPlaceEvent event) { - - if (!Residence.getConfigManager().ShowNoobMessage()) - return; - - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - Block block = event.getBlock(); - if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) - return; - - ArrayList list = Residence.getResidenceManager().getResidenceList(player.getName(), true, false); - if (list.size() != 0) - return; - - if (informed.contains(player.getName())) - return; - - for (String one : NewLanguage.getMessageList("Language.NewPlayerInfo")) { - player.sendMessage(one); - } - informed.add(player.getName()); - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockPlace(BlockPlaceEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { - return; - } - Block block = event.getBlock(); - Material mat = block.getType(); - String world = block.getWorld().getName(); - String group = Residence.getPermissionManager().getGroupNameByPlayer(player); - if (Residence.getItemManager().isIgnored(mat, group, world)) { - return; - } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); - if (Residence.getConfigManager().enabledRentSystem() && res != null) { - String resname = res.getName(); - if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); - event.setCancelled(true); - return; - } - } - String pname = player.getName(); - if (res != null && !res.getItemBlacklist().isAllowed(mat)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); - event.setCancelled(true); - return; - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); - boolean hasplace = perms.playerHas(pname, player.getWorld().getName(), "place", perms.playerHas(pname, player.getWorld().getName(), "build", true)); - if (!hasplace) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockSpread(BlockSpreadEvent event) { - Location loc = event.getBlock().getLocation(); - FlagPermissions perms = Residence.getPermsByLoc(loc); - if (!perms.has("spread", true)) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockPistonRetract(BlockPistonRetractEvent event) { - - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("piston", true)) { - event.setCancelled(true); - return; - } - - List blocks = event.getBlocks(); - - if (event.isSticky()) { - for (Block oneBlock : blocks) { - FlagPermissions blockperms = Residence.getPermsByLoc(oneBlock.getLocation()); - if (!blockperms.has("piston", true)) { - event.setCancelled(true); - return; - } - } - - for (Block block : event.getBlocks()) { - ClaimedResidence blockRes = Residence.getResidenceManager().getByLoc(block.getLocation()); - ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); - if (blockRes == null && pistonRes != null || blockRes != null && pistonRes == null || blockRes != null && pistonRes != null && !blockRes.getName() - .equalsIgnoreCase(pistonRes.getName())) { - event.setCancelled(true); - return; - } - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockPistonExtend(BlockPistonExtendEvent event) { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("piston", true)) { - event.setCancelled(true); - } - for (Block block : event.getBlocks()) { - FlagPermissions blockpermsfrom = Residence.getPermsByLoc(block.getLocation()); - if (!blockpermsfrom.has("piston", true)) { - event.setCancelled(true); - return; - } - } - - BlockFace dir = event.getDirection(); - for (Block block : event.getBlocks()) { - Location loc = new Location(block.getWorld(), block.getX() + dir.getModX(), block.getY() + dir.getModY(), block.getZ() + dir.getModZ()); - ClaimedResidence blockRes = Residence.getResidenceManager().getByLoc(loc); - ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); - if (blockRes == null && pistonRes != null || blockRes != null && pistonRes == null || blockRes != null && pistonRes != null && !blockRes.getName() - .equalsIgnoreCase(pistonRes.getName())) { - event.setCancelled(true); - return; - } - } - - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockFromTo(BlockFromToEvent event) { - FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); - boolean hasflow = perms.has("flow", true); - Material mat = event.getBlock().getType(); - if (!hasflow) { - event.setCancelled(true); - return; - } - if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { - if (!perms.has("lavaflow", hasflow)) { - event.setCancelled(true); - } - return; - } - if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { - if (!perms.has("waterflow", hasflow)) { - event.setCancelled(true); - } - return; - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onDispense(BlockDispenseEvent event) { - - if (event.isCancelled()) - return; - - Location location = new Location(event.getBlock().getWorld(), event.getVelocity().getBlockX(), event.getVelocity().getBlockY(), event.getVelocity().getBlockZ()); - - ClaimedResidence targetres = Residence.getResidenceManager().getByLoc(location); - - if (targetres == null && location.getBlockY() >= Residence.getConfigManager().getPlaceLevel() && Residence.getConfigManager().getNoPlaceWorlds().contains(location - .getWorld().getName())) { - ItemStack mat = event.getItem(); - if (Residence.getConfigManager().isNoLavaPlace()) - if (mat.getType() == Material.LAVA_BUCKET) { - event.setCancelled(true); - return; - } - - if (Residence.getConfigManager().isNoWaterPlace()) - if (mat.getType() == Material.WATER_BUCKET) { - event.setCancelled(true); - return; - } - } - - ClaimedResidence sourceres = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); - - if (sourceres == null && targetres != null || sourceres != null && targetres == null || sourceres != null && targetres != null && !sourceres.getName().equals( - targetres.getName())) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onLavaWaterFlow(BlockFromToEvent event) { - - Material mat = event.getBlock().getType(); - - Location location = event.getToBlock().getLocation(); - if (!Residence.getConfigManager().getNoFlowWorlds().contains(location.getWorld().getName())) - return; - - if (location.getBlockY() < Residence.getConfigManager().getFlowLevel()) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(location); - - if (res != null) - return; - - if (Residence.getConfigManager().isNoLava()) - if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { - event.setCancelled(true); - return; - } - - if (Residence.getConfigManager().isNoWater()) - if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { - event.setCancelled(true); - return; - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockBurn(BlockBurnEvent event) { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("firespread", true)) - event.setCancelled(true); - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockIgnite(BlockIgniteEvent event) { - IgniteCause cause = event.getCause(); - if (cause == IgniteCause.SPREAD) { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("firespread", true)) - event.setCancelled(true); - } else if (cause == IgniteCause.FLINT_AND_STEEL) { - Player player = event.getPlayer(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player); - if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), "ignite", true) && !Residence.isResAdminOn(player)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } - } else { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("ignite", true)) { - event.setCancelled(true); - } - } - } -} +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package com.bekvon.bukkit.residence.listeners; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.ChatColor; + +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + +import org.bukkit.entity.Player; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockDispenseEvent; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; +import org.bukkit.event.block.BlockPistonExtendEvent; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.block.BlockPlaceEvent; + +import com.bekvon.bukkit.residence.NewLanguage; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockSpreadEvent; +import org.bukkit.inventory.ItemStack; + +/** + * + * @author Administrator + */ +public class ResidenceBlockListener implements Listener { + + private static List informed = new ArrayList(); + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockBreak(BlockBreakEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) { + return; + } + + Block block = event.getBlock(); + Material mat = block.getType(); + String world = block.getWorld().getName(); + String group = Residence.getPermissionManager().getGroupNameByPlayer(player); + if (Residence.getItemManager().isIgnored(mat, group, world)) { + return; + } + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (Residence.getConfigManager().enabledRentSystem() && res != null) { + String resname = res.getName(); + if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); + event.setCancelled(true); + return; + } + } + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + String pname = player.getName(); + if (res != null && res.getItemIgnoreList().isListed(mat)) + return; + + boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), "destroy", perms.playerHas(pname, player.getWorld().getName(), "build", true)); + boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), "container", true); + if (!hasdestroy || (!hasContainer && mat == Material.CHEST)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onChestPlace(BlockPlaceEvent event) { + + if (!Residence.getConfigManager().ShowNoobMessage()) + return; + + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + Block block = event.getBlock(); + if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) + return; + + ArrayList list = Residence.getResidenceManager().getResidenceList(player.getName(), true, false); + if (list.size() != 0) + return; + + if (informed.contains(player.getName())) + return; + + for (String one : NewLanguage.getMessageList("Language.NewPlayerInfo")) { + player.sendMessage(one); + } + informed.add(player.getName()); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockPlace(BlockPlaceEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) { + return; + } + Block block = event.getBlock(); + Material mat = block.getType(); + String world = block.getWorld().getName(); + String group = Residence.getPermissionManager().getGroupNameByPlayer(player); + if (Residence.getItemManager().isIgnored(mat, group, world)) { + return; + } + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (Residence.getConfigManager().enabledRentSystem() && res != null) { + String resname = res.getName(); + if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); + event.setCancelled(true); + return; + } + } + String pname = player.getName(); + if (res != null && !res.getItemBlacklist().isAllowed(mat)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); + event.setCancelled(true); + return; + } + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + boolean hasplace = perms.playerHas(pname, player.getWorld().getName(), "place", perms.playerHas(pname, player.getWorld().getName(), "build", true)); + if (!hasplace) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockSpread(BlockSpreadEvent event) { + Location loc = event.getBlock().getLocation(); + FlagPermissions perms = Residence.getPermsByLoc(loc); + if (!perms.has("spread", true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockPistonRetract(BlockPistonRetractEvent event) { + + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("piston", true)) { + event.setCancelled(true); + return; + } + + List blocks = event.getBlocks(); + + if (event.isSticky()) { + for (Block oneBlock : blocks) { + FlagPermissions blockperms = Residence.getPermsByLoc(oneBlock.getLocation()); + if (!blockperms.has("piston", true)) { + event.setCancelled(true); + return; + } + } + + for (Block block : event.getBlocks()) { + ClaimedResidence blockRes = Residence.getResidenceManager().getByLoc(block.getLocation()); + ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + if (blockRes == null && pistonRes != null || blockRes != null && pistonRes == null || blockRes != null && pistonRes != null && !blockRes.getName() + .equalsIgnoreCase(pistonRes.getName())) { + event.setCancelled(true); + return; + } + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockPistonExtend(BlockPistonExtendEvent event) { + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("piston", true)) { + event.setCancelled(true); + } + for (Block block : event.getBlocks()) { + FlagPermissions blockpermsfrom = Residence.getPermsByLoc(block.getLocation()); + if (!blockpermsfrom.has("piston", true)) { + event.setCancelled(true); + return; + } + } + + BlockFace dir = event.getDirection(); + for (Block block : event.getBlocks()) { + Location loc = new Location(block.getWorld(), block.getX() + dir.getModX(), block.getY() + dir.getModY(), block.getZ() + dir.getModZ()); + ClaimedResidence blockRes = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + if (blockRes == null && pistonRes != null || blockRes != null && pistonRes == null || blockRes != null && pistonRes != null && !blockRes.getName() + .equalsIgnoreCase(pistonRes.getName())) { + event.setCancelled(true); + return; + } + } + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockFromTo(BlockFromToEvent event) { + FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); + boolean hasflow = perms.has("flow", true); + Material mat = event.getBlock().getType(); + if (!hasflow) { + event.setCancelled(true); + return; + } + if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { + if (!perms.has("lavaflow", hasflow)) { + event.setCancelled(true); + } + return; + } + if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { + if (!perms.has("waterflow", hasflow)) { + event.setCancelled(true); + } + return; + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onDispense(BlockDispenseEvent event) { + + if (event.isCancelled()) + return; + + Location location = new Location(event.getBlock().getWorld(), event.getVelocity().getBlockX(), event.getVelocity().getBlockY(), event.getVelocity().getBlockZ()); + + ClaimedResidence targetres = Residence.getResidenceManager().getByLoc(location); + + if (targetres == null && location.getBlockY() >= Residence.getConfigManager().getPlaceLevel() && Residence.getConfigManager().getNoPlaceWorlds().contains(location + .getWorld().getName())) { + ItemStack mat = event.getItem(); + if (Residence.getConfigManager().isNoLavaPlace()) + if (mat.getType() == Material.LAVA_BUCKET) { + event.setCancelled(true); + return; + } + + if (Residence.getConfigManager().isNoWaterPlace()) + if (mat.getType() == Material.WATER_BUCKET) { + event.setCancelled(true); + return; + } + } + + ClaimedResidence sourceres = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + + if ((sourceres == null && targetres != null || sourceres != null && targetres == null || sourceres != null && targetres != null && !sourceres.getName().equals( + targetres.getName())) && (event.getItem().getType() == Material.LAVA_BUCKET || event.getItem().getType() == Material.WATER_BUCKET)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onLavaWaterFlow(BlockFromToEvent event) { + + Material mat = event.getBlock().getType(); + + Location location = event.getToBlock().getLocation(); + if (!Residence.getConfigManager().getNoFlowWorlds().contains(location.getWorld().getName())) + return; + + if (location.getBlockY() < Residence.getConfigManager().getFlowLevel()) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(location); + + if (res != null) + return; + + if (Residence.getConfigManager().isNoLava()) + if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { + event.setCancelled(true); + return; + } + + if (Residence.getConfigManager().isNoWater()) + if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { + event.setCancelled(true); + return; + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockBurn(BlockBurnEvent event) { + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("firespread", true)) + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockIgnite(BlockIgniteEvent event) { + IgniteCause cause = event.getCause(); + if (cause == IgniteCause.SPREAD) { + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("firespread", true)) + event.setCancelled(true); + } else if (cause == IgniteCause.FLINT_AND_STEEL) { + Player player = event.getPlayer(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player); + if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), "ignite", true) && !Residence.isResAdminOn(player)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } + } else { + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("ignite", true)) { + event.setCancelled(true); + } + } + } +} From fca0eacce6f4012f314a72cca7df43685eeb0ca5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 20 Sep 2015 14:56:51 +0300 Subject: [PATCH 0022/1142] Added AdminFullaccess config and fixed comments --- .../bukkit/residence/ConfigManager.java | 26 +++++++++++++------ .../residence/ResidenceCommandListener.java | 20 ++++++++++++++ src/plugin.yml | 2 +- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index baad57034..2c27ccd4c 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -46,6 +46,7 @@ public class ConfigManager { protected int AutoCleanUpDays; protected int selectionToolId; protected boolean adminOps; + protected boolean AdminFullAccess; protected String multiworldPlugin; protected boolean enableRentSystem; protected boolean leaseAutoRenew; @@ -313,6 +314,10 @@ void UpdateConfigFile() { writer.addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); adminOps = GetConfigBoolean("Global.AdminOPs", true, writer, conf); + writer.addComment("Global.AdminFullAccess", + "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); + AdminFullAccess = GetConfigBoolean("Global.AdminFullAccess", false, writer, conf); + writer.addComment("Global.MultiWorldPlugin", "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); @@ -392,27 +397,28 @@ void UpdateConfigFile() { Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } - writer.addComment("Global.GUI.True.Id", - "Item id to use when flag is set to true"); + writer.addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); - int id = GetConfigInt("Global.GUI.True.Id", 35, writer, conf); - int data = GetConfigInt("Global.GUI.True.Data", 13, writer, conf); + int id = GetConfigInt("Global.GUI.setTrue.Id", 35, writer, conf); + int data = GetConfigInt("Global.GUI.setTrue.Data", 13, writer, conf); Material Mat = Material.getMaterial(id); if (Mat == null) Mat = Material.STONE; GuiTrue = new ItemStack(Mat, 1, (short) data); - id = GetConfigInt("Global.GUI.False.Id", 35, writer, conf); - data = GetConfigInt("Global.GUI.False.Data", 14, writer, conf); + writer.addComment("Global.GUI.setFalse", "Item id and data to use when flag is set to false"); + id = GetConfigInt("Global.GUI.setFalse.Id", 35, writer, conf); + data = GetConfigInt("Global.GUI.setFalse.Data", 14, writer, conf); Mat = Material.getMaterial(id); if (Mat == null) Mat = Material.STONE; GuiFalse = new ItemStack(Mat, 1, (short) data); - id = GetConfigInt("Global.GUI.Remove.Id", 35, writer, conf); - data = GetConfigInt("Global.GUI.Remove.Data", 8, writer, conf); + writer.addComment("Global.GUI.setRemove", "Item id and data to use when flag is set to remove"); + id = GetConfigInt("Global.GUI.setRemove.Id", 35, writer, conf); + data = GetConfigInt("Global.GUI.setRemove.Data", 8, writer, conf); Mat = Material.getMaterial(id); if (Mat == null) @@ -590,6 +596,10 @@ public boolean getOpsAreAdmins() { return adminOps; } + public boolean getAdminFullAccess() { + return AdminFullAccess; + } + public String getMultiworldPlugin() { return multiworldPlugin; } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 40a29def6..309af0975 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -142,6 +142,9 @@ public boolean onCommand(CommandSender sender, Command command, String label, St ((Player) sender).sendMessage(ChatColor.RED + language.getPhrase("NonAdmin")); return true; } + if (command.getName().equals("res") && gmanager.isResidenceAdmin((Player) sender) && Residence.getConfigManager().getAdminFullAccess()) { + resadmin = true; + } } else { resadmin = true; } @@ -1137,6 +1140,10 @@ private boolean commandResSet(String[] args, boolean resadmin, Player player, in } else if (args.length == 1) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { + if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.recalculateInv(res); ResidencePlayerListener.GUI.put(player.getName(), flag); @@ -1147,6 +1154,10 @@ private boolean commandResSet(String[] args, boolean resadmin, Player player, in } else if (args.length == 2) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res != null) { + if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.recalculateInv(res); ResidencePlayerListener.GUI.put(player.getName(), flag); @@ -1194,6 +1205,10 @@ private boolean commandResPset(String[] args, boolean resadmin, Player player, i } else if (args.length == 2) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { + if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.setTargePlayer(args[1]); flag.recalculateInv(res); @@ -1205,6 +1220,11 @@ private boolean commandResPset(String[] args, boolean resadmin, Player player, i } else if (args.length == 3) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res != null) { + if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.setTargePlayer(args[2]); flag.recalculateInv(res); diff --git a/src/plugin.yml b/src/plugin.yml index 3d000cd61..15a087043 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.7.1 +version: 2.7.7.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 5ae7d6c36506d263df2174a920f578ea5236e220 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 20 Sep 2015 14:57:39 +0300 Subject: [PATCH 0023/1142] Moved GUI package --- src/{ => com/bekvon/bukkit/residence}/GUI/SetFlag.java | 2 +- src/com/bekvon/bukkit/residence/ResidenceCommandListener.java | 3 +-- .../bukkit/residence/listeners/ResidencePlayerListener.java | 4 +--- 3 files changed, 3 insertions(+), 6 deletions(-) rename src/{ => com/bekvon/bukkit/residence}/GUI/SetFlag.java (99%) diff --git a/src/GUI/SetFlag.java b/src/com/bekvon/bukkit/residence/GUI/SetFlag.java similarity index 99% rename from src/GUI/SetFlag.java rename to src/com/bekvon/bukkit/residence/GUI/SetFlag.java index ceaeb519d..b63f18d8d 100644 --- a/src/GUI/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/GUI/SetFlag.java @@ -1,4 +1,4 @@ -package GUI; +package com.bekvon.bukkit.residence.GUI; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 309af0975..e9953305b 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -25,6 +25,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.getspout.spoutapi.SpoutManager; +import com.bekvon.bukkit.residence.GUI.SetFlag; import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; @@ -40,8 +41,6 @@ import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import GUI.SetFlag; - public class ResidenceCommandListener extends Residence { public static HashMap teleportMap = new HashMap(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c4de4bc0e..bd46c88cf 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -53,15 +53,13 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; +import com.bekvon.bukkit.residence.GUI.SetFlag; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.event.*; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ActionBar; - -import GUI.SetFlag; - import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.Signs.Signs; From 0bb9f3743b5ee40c70efbc2da296f7a0a802267c Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 20 Sep 2015 16:28:57 +0300 Subject: [PATCH 0024/1142] tabcomplete fix, selled res remove on res deletion, sign remove, reslist with rented residences --- .../bekvon/bukkit/residence/Residence.java | 2 + .../bukkit/residence/Signs/SignUtil.java | 569 +++++++++--------- .../residence/economy/TransactionManager.java | 1 + .../residence/economy/rent/RentManager.java | 16 + .../protection/ResidenceManager.java | 20 +- .../residence/text/help/InformationPager.java | 63 +- .../bukkit/residence/utils/TabComplete.java | 78 +-- 7 files changed, 392 insertions(+), 357 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 31b29151d..1f0547038 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -235,6 +235,8 @@ public void onEnable() { } this.getCommand("res").setTabCompleter(new TabComplete()); + this.getCommand("resadmin").setTabCompleter(new TabComplete()); + this.getCommand("residence").setTabCompleter(new TabComplete()); // Residence.getConfigManager().UpdateConfigFile(); diff --git a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java b/src/com/bekvon/bukkit/residence/Signs/SignUtil.java index 3a7bc8f2b..6fa816aaa 100644 --- a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/Signs/SignUtil.java @@ -1,279 +1,290 @@ -package com.bekvon.bukkit.residence.Signs; - -import java.io.File; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Set; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.Sign; -import org.bukkit.command.CommandSender; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -import com.bekvon.bukkit.residence.CommentedYamlConfiguration; -import com.bekvon.bukkit.residence.NewLanguage; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.economy.rent.RentedLand; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class SignUtil { - - public static SignInfo Signs = new SignInfo(); - - // Sign file - public static void LoadSigns() { - Thread threadd = new Thread() { - public void run() { - - Signs.GetAllSigns().clear(); - File file = new File(Residence.instance.getDataFolder(), "Signs.yml"); - YamlConfiguration f = YamlConfiguration.loadConfiguration(file); - - if (!f.isConfigurationSection("Signs")) - return; - - ConfigurationSection ConfCategory = f.getConfigurationSection("Signs"); - ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); - if (categoriesList.size() == 0) - return; - for (String category : categoriesList) { - ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); - Signs newTemp = new Signs(); - newTemp.setCategory(Integer.valueOf(category)); - newTemp.setResidence(NameSection.getString("Residence")); - newTemp.setWorld(NameSection.getString("World")); - newTemp.setX(NameSection.getDouble("X")); - newTemp.setY(NameSection.getDouble("Y")); - newTemp.setZ(NameSection.getDouble("Z")); - - newTemp.setLocation(new Location(Bukkit.getWorld(NameSection.getString("World")), NameSection.getDouble("X"), NameSection.getDouble("Y"), NameSection - .getDouble("Z"))); - - Signs.addSign(newTemp); - } - return; - } - }; - threadd.start(); - } - - // Signs save file - public static void saveSigns() { - - Thread threadd = new Thread() { - public void run() { - File f = new File(Residence.instance.getDataFolder(), "Signs.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); - - writer.addComment("Signs", "DO NOT EDIT THIS FILE BY HAND!"); - - if (!conf.isConfigurationSection("Signs")) - conf.createSection("Signs"); - - for (Signs one : Signs.GetAllSigns()) { - String path = "Signs." + String.valueOf(one.GetCategory()); - writer.set(path + ".Residence", one.GetResidence()); - writer.set(path + ".World", one.GetWorld()); - writer.set(path + ".X", one.GetX()); - writer.set(path + ".Y", one.GetY()); - writer.set(path + ".Z", one.GetZ()); - } - - try { - writer.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - }; - threadd.start(); - } - - public static void CheckSign(ClaimedResidence res) { - - List signList = new ArrayList(); - - signList.addAll(SignUtil.Signs.GetAllSigns()); - - for (Signs one : signList) { - if (!res.getName().equals(one.GetResidence())) - continue; - SignUtil.SignUpdate(one); - } - - } - - public static boolean SignUpdate(Signs Sign) { - - String landName = Sign.GetResidence(); - - boolean ForSale = Residence.getTransactionManager().isForSale(landName); - boolean ForRent = Residence.getRentManager().isForRent(landName); - - Location nloc = Sign.GetLocation(); - Block block = nloc.getBlock(); - - if (!(block.getState() instanceof Sign)) - return false; - - Sign sign = (Sign) block.getState(); - - if (!ForRent && !ForSale) { - block.breakNaturally(); - Signs.removeSign(Sign); - saveSigns(); - return true; - } - - if (ForRent) { - - boolean rented = Residence.getRentManager().isRented(landName); - - RentedLand rentedPlace = Residence.getRentManager().getRentedLand(landName); - long time = 0L; - if (rentedPlace != null) - time = rentedPlace.endTime; - - SimpleDateFormat formatter = new SimpleDateFormat(Residence.getLanguage().getPhrase("SignDateFormat")); - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(time); - String timeString = formatter.format(calendar.getTime()); - - String endDate = timeString; - if (time == 0L) - endDate = "Unknown"; - - if (Residence.getRentManager().getRentedAutoRepeats(landName)) - endDate = ChatColor.translateAlternateColorCodes('&', Residence.getLanguage().getPhrase("SignRentedAutorenewTrue") + endDate); - else - endDate = ChatColor.translateAlternateColorCodes('&', Residence.getLanguage().getPhrase("SignRentedAutorenewFalse") + endDate); - - String TopLine = rented ? endDate : Residence.getLanguage().getPhrase("SignForRentTopLine"); - sign.setLine(0, TopLine); - - String infoLine = Residence.getLanguage().getPhrase("SignForRentPriceLine", Residence.getRentManager().getCostOfRent(landName) + "." + Residence - .getRentManager().getRentDays(landName) + "." + Residence.getRentManager().getRentableRepeatable(landName)); - - sign.setLine(1, infoLine); - - sign.setLine(2, rented ? NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", landName) - : NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", landName)); - sign.setLine(3, rented ? Residence.getLanguage().getPhrase("SignRentedBottomLine", Residence.getRentManager().getRentingPlayer(landName)) - : Residence.getLanguage().getPhrase("SignForRentBottomLine")); - sign.update(); - } - - if (ForSale) { - sign.setLine(0, Residence.getLanguage().getPhrase("SignForSaleTopLine")); - String infoLine = Residence.getLanguage().getPhrase("SignForSalePriceLine", String.valueOf(Residence.getTransactionManager().getSaleAmount(landName))); - sign.setLine(1, infoLine); - sign.setLine(2, NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", landName)); - sign.setLine(3, Residence.getLanguage().getPhrase("SignForSaleBottomLine")); - sign.update(); - } - - return true; - } - - public static void convertSigns(CommandSender sender) { - File file = new File("plugins/ResidenceSigns/signs.yml"); - if (!file.exists()) { - sender.sendMessage(ChatColor.GOLD + "Can't find ResidenceSign file"); - return; - } - YamlConfiguration conf = YamlConfiguration.loadConfiguration(file); - - if (!conf.contains("signs")) { - sender.sendMessage(ChatColor.GOLD + "Incorrect format of signs file"); - return; - } - - Set sectionname = conf.getConfigurationSection("signs").getKeys(false); - ConfigurationSection section = conf.getConfigurationSection("signs"); - - int category = 1; - if (SignUtil.Signs.GetAllSigns().size() > 0) - category = SignUtil.Signs.GetAllSigns().get(SignUtil.Signs.GetAllSigns().size() - 1).GetCategory() + 1; - - long time = System.currentTimeMillis(); - - int i = 0; - for (String one : sectionname) { - Signs signs = new Signs(); - String resname = section.getString(one + ".resName"); - signs.setCategory(category); - signs.setResidence(resname); - - List loc = section.getStringList(one + ".loc"); - - if (loc.size() != 4) - continue; - - World world = Bukkit.getWorld(loc.get(0)); - if (world == null) - continue; - - signs.setWorld(world.getName()); - int x = 0; - int y = 0; - int z = 0; - - try { - x = Integer.parseInt(loc.get(1)); - y = Integer.parseInt(loc.get(2)); - z = Integer.parseInt(loc.get(3)); - } catch (Exception ex) { - continue; - } - - signs.setX(x); - signs.setY(y); - signs.setZ(z); - boolean found = false; - - for (Signs onesigns : SignUtil.Signs.GetAllSigns()) { - if (!onesigns.GetWorld().equalsIgnoreCase(signs.GetWorld())) - continue; - if (onesigns.GetX() != signs.GetX()) - continue; - if (onesigns.GetY() != signs.GetY()) - continue; - if (onesigns.GetZ() != signs.GetZ()) - continue; - found = true; - } - - if (found) - continue; - - Location nloc = signs.GetLocation(); - Block block = nloc.getBlock(); - - if (!(block.getState() instanceof Sign)) - continue; - - SignUtil.Signs.addSign(signs); - SignUtil.SignUpdate(signs); - category++; - i++; - } - - SignUtil.saveSigns(); - - sender.sendMessage(ChatColor.GOLD + "" + i + ChatColor.YELLOW + " signs have being converted to new format! It took " + ChatColor.GOLD + (System - .currentTimeMillis() - time) + ChatColor.YELLOW + " ms!"); - } - -} +package com.bekvon.bukkit.residence.Signs; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; + +import com.bekvon.bukkit.residence.CommentedYamlConfiguration; +import com.bekvon.bukkit.residence.NewLanguage; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.economy.rent.RentedLand; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class SignUtil { + + public static SignInfo Signs = new SignInfo(); + + // Sign file + public static void LoadSigns() { + Thread threadd = new Thread() { + public void run() { + + Signs.GetAllSigns().clear(); + File file = new File(Residence.instance.getDataFolder(), "Signs.yml"); + YamlConfiguration f = YamlConfiguration.loadConfiguration(file); + + if (!f.isConfigurationSection("Signs")) + return; + + ConfigurationSection ConfCategory = f.getConfigurationSection("Signs"); + ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); + if (categoriesList.size() == 0) + return; + for (String category : categoriesList) { + ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); + Signs newTemp = new Signs(); + newTemp.setCategory(Integer.valueOf(category)); + newTemp.setResidence(NameSection.getString("Residence")); + newTemp.setWorld(NameSection.getString("World")); + newTemp.setX(NameSection.getDouble("X")); + newTemp.setY(NameSection.getDouble("Y")); + newTemp.setZ(NameSection.getDouble("Z")); + + newTemp.setLocation(new Location(Bukkit.getWorld(NameSection.getString("World")), NameSection.getDouble("X"), NameSection.getDouble("Y"), NameSection + .getDouble("Z"))); + + Signs.addSign(newTemp); + } + return; + } + }; + threadd.start(); + } + + // Signs save file + public static void saveSigns() { + + Thread threadd = new Thread() { + public void run() { + File f = new File(Residence.instance.getDataFolder(), "Signs.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + writer.addComment("Signs", "DO NOT EDIT THIS FILE BY HAND!"); + + if (!conf.isConfigurationSection("Signs")) + conf.createSection("Signs"); + + for (Signs one : Signs.GetAllSigns()) { + String path = "Signs." + String.valueOf(one.GetCategory()); + writer.set(path + ".Residence", one.GetResidence()); + writer.set(path + ".World", one.GetWorld()); + writer.set(path + ".X", one.GetX()); + writer.set(path + ".Y", one.GetY()); + writer.set(path + ".Z", one.GetZ()); + } + + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + }; + threadd.start(); + } + + public static void CheckSign(ClaimedResidence res) { + + List signList = new ArrayList(); + + signList.addAll(SignUtil.Signs.GetAllSigns()); + + for (Signs one : signList) { + if (!res.getName().equals(one.GetResidence())) + continue; + SignUtil.SignUpdate(one); + } + + } + + public static void removeSign(String res) { + List signList = new ArrayList(); + signList.addAll(SignUtil.Signs.GetAllSigns()); + + for (Signs one : signList) { + if (!res.equals(one.GetResidence())) + continue; + SignUtil.SignUpdate(one); + } + } + + public static boolean SignUpdate(Signs Sign) { + + String landName = Sign.GetResidence(); + + boolean ForSale = Residence.getTransactionManager().isForSale(landName); + boolean ForRent = Residence.getRentManager().isForRent(landName); + + Location nloc = Sign.GetLocation(); + Block block = nloc.getBlock(); + + if (!(block.getState() instanceof Sign)) + return false; + + Sign sign = (Sign) block.getState(); + + if (!ForRent && !ForSale) { + block.breakNaturally(); + Signs.removeSign(Sign); + saveSigns(); + return true; + } + + if (ForRent) { + + boolean rented = Residence.getRentManager().isRented(landName); + + RentedLand rentedPlace = Residence.getRentManager().getRentedLand(landName); + long time = 0L; + if (rentedPlace != null) + time = rentedPlace.endTime; + + SimpleDateFormat formatter = new SimpleDateFormat(Residence.getLanguage().getPhrase("SignDateFormat")); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time); + String timeString = formatter.format(calendar.getTime()); + + String endDate = timeString; + if (time == 0L) + endDate = "Unknown"; + + if (Residence.getRentManager().getRentedAutoRepeats(landName)) + endDate = ChatColor.translateAlternateColorCodes('&', Residence.getLanguage().getPhrase("SignRentedAutorenewTrue") + endDate); + else + endDate = ChatColor.translateAlternateColorCodes('&', Residence.getLanguage().getPhrase("SignRentedAutorenewFalse") + endDate); + + String TopLine = rented ? endDate : Residence.getLanguage().getPhrase("SignForRentTopLine"); + sign.setLine(0, TopLine); + + String infoLine = Residence.getLanguage().getPhrase("SignForRentPriceLine", Residence.getRentManager().getCostOfRent(landName) + "." + Residence + .getRentManager().getRentDays(landName) + "." + Residence.getRentManager().getRentableRepeatable(landName)); + + sign.setLine(1, infoLine); + + sign.setLine(2, rented ? NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", landName) + : NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", landName)); + sign.setLine(3, rented ? Residence.getLanguage().getPhrase("SignRentedBottomLine", Residence.getRentManager().getRentingPlayer(landName)) + : Residence.getLanguage().getPhrase("SignForRentBottomLine")); + sign.update(); + } + + if (ForSale) { + sign.setLine(0, Residence.getLanguage().getPhrase("SignForSaleTopLine")); + String infoLine = Residence.getLanguage().getPhrase("SignForSalePriceLine", String.valueOf(Residence.getTransactionManager().getSaleAmount(landName))); + sign.setLine(1, infoLine); + sign.setLine(2, NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", landName)); + sign.setLine(3, Residence.getLanguage().getPhrase("SignForSaleBottomLine")); + sign.update(); + } + + return true; + } + + public static void convertSigns(CommandSender sender) { + File file = new File("plugins/ResidenceSigns/signs.yml"); + if (!file.exists()) { + sender.sendMessage(ChatColor.GOLD + "Can't find ResidenceSign file"); + return; + } + YamlConfiguration conf = YamlConfiguration.loadConfiguration(file); + + if (!conf.contains("signs")) { + sender.sendMessage(ChatColor.GOLD + "Incorrect format of signs file"); + return; + } + + Set sectionname = conf.getConfigurationSection("signs").getKeys(false); + ConfigurationSection section = conf.getConfigurationSection("signs"); + + int category = 1; + if (SignUtil.Signs.GetAllSigns().size() > 0) + category = SignUtil.Signs.GetAllSigns().get(SignUtil.Signs.GetAllSigns().size() - 1).GetCategory() + 1; + + long time = System.currentTimeMillis(); + + int i = 0; + for (String one : sectionname) { + Signs signs = new Signs(); + String resname = section.getString(one + ".resName"); + signs.setCategory(category); + signs.setResidence(resname); + + List loc = section.getStringList(one + ".loc"); + + if (loc.size() != 4) + continue; + + World world = Bukkit.getWorld(loc.get(0)); + if (world == null) + continue; + + signs.setWorld(world.getName()); + int x = 0; + int y = 0; + int z = 0; + + try { + x = Integer.parseInt(loc.get(1)); + y = Integer.parseInt(loc.get(2)); + z = Integer.parseInt(loc.get(3)); + } catch (Exception ex) { + continue; + } + + signs.setX(x); + signs.setY(y); + signs.setZ(z); + boolean found = false; + + for (Signs onesigns : SignUtil.Signs.GetAllSigns()) { + if (!onesigns.GetWorld().equalsIgnoreCase(signs.GetWorld())) + continue; + if (onesigns.GetX() != signs.GetX()) + continue; + if (onesigns.GetY() != signs.GetY()) + continue; + if (onesigns.GetZ() != signs.GetZ()) + continue; + found = true; + } + + if (found) + continue; + + Location nloc = signs.GetLocation(); + Block block = nloc.getBlock(); + + if (!(block.getState() instanceof Sign)) + continue; + + SignUtil.Signs.addSign(signs); + SignUtil.SignUpdate(signs); + category++; + i++; + } + + SignUtil.saveSigns(); + + sender.sendMessage(ChatColor.GOLD + "" + i + ChatColor.YELLOW + " signs have being converted to new format! It took " + ChatColor.GOLD + (System + .currentTimeMillis() - time) + ChatColor.YELLOW + " ms!"); + } + +} diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 0ef05a67f..1bd91e139 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -236,6 +236,7 @@ public void removeFromSale(Player player, String areaname, boolean resadmin) { public void removeFromSale(String areaname) { sellAmount.remove(areaname); + SignUtil.removeSign(areaname); } public boolean isForSale(String areaname) { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 157e22dcf..4968d48b2 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -14,9 +14,12 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; + +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -39,6 +42,17 @@ public RentedLand getRentedLand(String name) { return rentedLand.containsKey(name) ? rentedLand.get(name) : null; } + public List getRentedLands(String playername) { + List rentedLands = new ArrayList(); + for (Entry oneland : rentedLand.entrySet()) { + if (oneland.getValue().player.equalsIgnoreCase(playername)) { + rentedLands.add(ChatColor.GREEN + oneland.getKey() + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("World") + ": " + Residence + .getResidenceManager().getByName(oneland.getKey()).getWorld() + ChatColor.GREEN +" (Rented)"); + } + } + return rentedLands; + } + public void setForRent(Player player, String landName, int amount, int days, boolean repeatable, boolean resadmin) { if (!Residence.getConfigManager().enabledRentSystem()) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); @@ -227,6 +241,8 @@ public void removeFromRent(String landName) { public void removeRentable(String landName) { removeFromRent(landName); rentableLand.remove(landName); + + SignUtil.removeSign(landName); } public boolean isForRent(String landName) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 217cc7f0e..94a14bdda 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -24,6 +24,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; @@ -233,8 +234,12 @@ public void listResidences(Player player, String targetplayer, int page, boolean if (showhidden && !Residence.isResAdminOn(player) && !player.getName().equals(targetplayer)) { showhidden = false; } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, this.getResidenceList(targetplayer, showhidden, - showsubzones, true), page); + + ArrayList ownedResidences = this.getResidenceList(targetplayer, showhidden, showsubzones, true); + + ownedResidences.addAll(Residence.getRentManager().getRentedLands(targetplayer)); + + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, ownedResidences, page); } public void listAllResidences(Player player, int page) { @@ -371,6 +376,8 @@ public void removeResidence(Player player, String name, boolean resadmin) { // concurrent modification exception in lease manager... worked // around for now Residence.getRentManager().removeRentable(name); + Residence.getTransactionManager().removeFromSale(name); + if (parent == null && Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().useResMoneyBack()) { int chargeamount = (int) Math.ceil((double) res.getAreaArray()[0].getSize() * res.getBlockSellPrice()); TransactionManager.giveEconomyMoney(player, chargeamount); @@ -464,9 +471,10 @@ public void printAreaInfo(String areaname, Player player) { if (Residence.getEconomyManager() != null) { PermissionGroup group = Residence.getPermissionManager().getGroup(res.getOwner(), res.getWorld()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TotalWorth", String.valueOf((int)((res.getTotalSize() * group.getCostPerBlock())*100)/100.0).replace( - ".", ",") + "." + - String.valueOf((int)((res.getTotalSize() * res.getBlockSellPrice())*100)/100.0).replace(".", ","))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TotalWorth", String.valueOf((int) ((res.getTotalSize() * group.getCostPerBlock()) + * 100) / 100.0).replace( + ".", ",") + "." + + String.valueOf((int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0).replace(".", ","))); } if (aid != null) { @@ -551,7 +559,7 @@ public static Map> loadMap(String worldName, Map lines, int page) { - int perPage = 6; - int start = (page-1) * perPage; - int end = start + perPage; - int pagecount = (int) Math.ceil((double)lines.size()/(double)perPage); - if(pagecount == 0) - pagecount = 1; - if(page>pagecount) - { - sender.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidPage")); - return; - } - sender.sendMessage(ChatColor.YELLOW+"---<"+ChatColor.GREEN+title+ChatColor.YELLOW+">---"); - sender.sendMessage(ChatColor.YELLOW+"---<"+Residence.getLanguage().getPhrase("GenericPage",ChatColor.GREEN+String.format("%d",page)+ChatColor.YELLOW+"."+ChatColor.GREEN+pagecount+ChatColor.YELLOW)+">---"); - for(int i = start; i < end; i ++) - { - if(lines.size()>i) - sender.sendMessage(ChatColor.GREEN+lines.get(i)); - } - if(pagecount>page) - sender.sendMessage(ChatColor.GRAY+"---<"+Residence.getLanguage().getPhrase("NextPage")+">---"); - else - sender.sendMessage(ChatColor.GRAY+"-----------------------"); + int perPage = 6; + int start = (page - 1) * perPage; + int end = start + perPage; + int pagecount = (int) Math.ceil((double) lines.size() / (double) perPage); + if (pagecount == 0) + pagecount = 1; + if (page > pagecount) { + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidPage")); + return; + } + sender.sendMessage(ChatColor.YELLOW + "---<" + ChatColor.GREEN + title + ChatColor.YELLOW + ">---"); + sender.sendMessage(ChatColor.YELLOW + "---<" + Residence.getLanguage().getPhrase("GenericPage", ChatColor.GREEN + String.format("%d", page) + ChatColor.YELLOW + + "." + ChatColor.GREEN + pagecount + ChatColor.YELLOW) + ">---"); + for (int i = start; i < end; i++) { + if (lines.size() > i) + sender.sendMessage(ChatColor.GREEN + lines.get(i)); + } + if (pagecount > page) + sender.sendMessage(ChatColor.GRAY + "---<" + Residence.getLanguage().getPhrase("NextPage") + ">---"); + else + sender.sendMessage(ChatColor.GRAY + "-----------------------"); } } diff --git a/src/com/bekvon/bukkit/residence/utils/TabComplete.java b/src/com/bekvon/bukkit/residence/utils/TabComplete.java index 437f68d2a..4460c45dc 100644 --- a/src/com/bekvon/bukkit/residence/utils/TabComplete.java +++ b/src/com/bekvon/bukkit/residence/utils/TabComplete.java @@ -1,39 +1,39 @@ -package com.bekvon.bukkit.residence.utils; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabCompleter; -import org.bukkit.util.StringUtil; - -import com.bekvon.bukkit.residence.text.help.HelpEntry; - -public class TabComplete implements TabCompleter { - - @Override - public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { - List completionList = new ArrayList<>(); - Set Commands = HelpEntry.getSubCommands(args); - - if (Commands.contains("?")) { - String com = ""; - for (String one : args) { - com += " " + one; - } - Bukkit.dispatchCommand(sender, "res" + com + "?"); - Bukkit.getConsoleSender().sendMessage(sender.getName() + " issued server command: /res" + com + "?"); - Commands.clear(); - Commands.add(""); - } - - String PartOfCommand = args[args.length - 1]; - StringUtil.copyPartialMatches(PartOfCommand, Commands, completionList); - Collections.sort(completionList); - return completionList; - } -} +package com.bekvon.bukkit.residence.utils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.util.StringUtil; + +import com.bekvon.bukkit.residence.text.help.HelpEntry; + +public class TabComplete implements TabCompleter { + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + List completionList = new ArrayList<>(); + Set Commands = HelpEntry.getSubCommands(args); + + if (Commands.contains("?")) { + String com = ""; + for (String one : args) { + com += " " + one; + } + Bukkit.dispatchCommand(sender, command.getName() + com + "?"); + Bukkit.getConsoleSender().sendMessage(sender.getName() + " issued server command: " + command.getName() + com + "?"); + Commands.clear(); + Commands.add(""); + } + + String PartOfCommand = args[args.length - 1]; + StringUtil.copyPartialMatches(PartOfCommand, Commands, completionList); + Collections.sort(completionList); + return completionList; + } +} From f024bb131e488612b667088c3aa47d440b35d022 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 20 Sep 2015 16:42:13 +0300 Subject: [PATCH 0025/1142] Added locale for /res list --- src/com/bekvon/bukkit/residence/Locale.java | 4 +++- .../bekvon/bukkit/residence/economy/rent/RentManager.java | 7 +++++-- .../bukkit/residence/protection/ResidenceManager.java | 5 +++-- src/plugin.yml | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 3f27673f5..ffdbaaad6 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -156,6 +156,8 @@ public static void LoadLang(String lang) { GetConfigString("Language.MaterialGet", "The material name for ID %1 is %2", writer, conf, true); GetConfigString("Language.MarketDisabled", "Economy Disabled!", writer, conf, true); GetConfigString("Language.MarketList", "Market List", writer, conf, true); + GetConfigString("Language.ResidenceList", "&a%1%2 &e- %3: %4", writer, conf, true); + GetConfigString("Language.Rented", " &a(Rented)", writer, conf, true); GetConfigString("Language.SignTopLine", "[market]", writer, conf, true); GetConfigString("Language.SignDateFormat", "YY/MM/dd HH:mm", writer, conf, true); @@ -358,7 +360,7 @@ public static void LoadLang(String lang) { GetConfigString("Language.LimitsBottom", "----------------------------------------", writer, conf, true); GetConfigString("Language.Gui.Set.Title", "&6%1% flags", writer, conf, true); GetConfigString("Language.Gui.Pset.Title", "&6%1% %2% flags", writer, conf, true); - GetConfigArray("Language.Gui.Actions", Arrays.asList("&2Left click to enable", "&cRight click to disable","&eShift + left click to remove"), writer, conf, true); + GetConfigArray("Language.Gui.Actions", Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove"), writer, conf, true); writer.addComment("CommandHelp", ""); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 4968d48b2..487bff411 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -46,8 +46,11 @@ public List getRentedLands(String playername) { List rentedLands = new ArrayList(); for (Entry oneland : rentedLand.entrySet()) { if (oneland.getValue().player.equalsIgnoreCase(playername)) { - rentedLands.add(ChatColor.GREEN + oneland.getKey() + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("World") + ": " + Residence - .getResidenceManager().getByName(oneland.getKey()).getWorld() + ChatColor.GREEN +" (Rented)"); + + + + rentedLands.add(Residence.getLanguage().getPhrase("ResidenceList", "." + oneland.getKey() + "." + Residence.getLanguage().getPhrase("World") + "." + Residence + .getResidenceManager().getByName(oneland.getKey()).getWorld())+Residence.getLanguage().getPhrase("Rented")); } } return rentedLands; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 94a14bdda..95d37f327 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -283,7 +283,8 @@ private void getResidenceList(String targetplayer, boolean showhidden, boolean s if ((showhidden) || (!showhidden && !hidden)) { if (targetplayer == null || res.getPermissions().getOwner().equalsIgnoreCase(targetplayer)) { if (formattedOutput) { - list.add(ChatColor.GREEN + parentzone + resname + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("World") + ": " + res.getWorld()); + list.add(Residence.getLanguage().getPhrase("ResidenceList", parentzone + "." + resname + "." + Residence.getLanguage().getPhrase("World") + "." + res + .getWorld())); } else { list.add(parentzone + resname); } @@ -377,7 +378,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { // around for now Residence.getRentManager().removeRentable(name); Residence.getTransactionManager().removeFromSale(name); - + if (parent == null && Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().useResMoneyBack()) { int chargeamount = (int) Math.ceil((double) res.getAreaArray()[0].getSize() * res.getBlockSellPrice()); TransactionManager.giveEconomyMoney(player, chargeamount); diff --git a/src/plugin.yml b/src/plugin.yml index 15a087043..7ef41bca8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.7.2 +version: 2.7.7.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From cfe056d704c7ebe340c4b3d030a4e54eeaf89f75 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 21 Sep 2015 10:55:02 +0300 Subject: [PATCH 0026/1142] Fix for new player message --- src/com/bekvon/bukkit/residence/Residence.java | 1 - .../bekvon/bukkit/residence/ResidenceCommandListener.java | 8 -------- .../residence/listeners/ResidenceBlockListener.java | 5 ++--- .../bukkit/residence/selection/SelectionManager.java | 5 ----- 4 files changed, 2 insertions(+), 17 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 1f0547038..fcf322c4c 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1,5 +1,4 @@ /* - * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.bekvon.bukkit.residence; diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index e9953305b..f19af0f5f 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -9,9 +9,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -20,9 +17,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; import org.getspout.spoutapi.SpoutManager; import com.bekvon.bukkit.residence.GUI.SetFlag; @@ -36,8 +30,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.selection.WorldGuardUtil; import com.bekvon.bukkit.residence.spout.ResidenceSpout; -import com.bekvon.bukkit.residence.utils.Debug; -import com.bekvon.bukkit.residence.utils.Sorting; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldguard.protection.regions.ProtectedRegion; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 31988792f..483c412ef 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -103,9 +103,8 @@ public void onChestPlace(BlockPlaceEvent event) { if (informed.contains(player.getName())) return; - for (String one : NewLanguage.getMessageList("Language.NewPlayerInfo")) { - player.sendMessage(one); - } + player.sendMessage(NewLanguage.getMessage("Language.NewPlayerInfo")); + informed.add(player.getName()); } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 8f392765c..b9c886f6c 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -10,10 +10,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.utils.ActionBar; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldedit.bukkit.selections.CuboidSelection; -import com.sk89q.worldedit.bukkit.selections.Selection; - import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -22,7 +18,6 @@ import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Server; -import org.bukkit.World; import org.bukkit.entity.Player; /** From ff1c554278e0860386c2e8c8fb8d234cee7ff389 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 21 Sep 2015 11:23:21 +0300 Subject: [PATCH 0027/1142] Added fire extinguish protection by build flag --- .../listeners/ResidencePlayerListener.java | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index bd46c88cf..11c296ab7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -7,6 +7,7 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -16,6 +17,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.block.Sign; import org.bukkit.entity.Damageable; import org.bukkit.entity.Entity; @@ -60,6 +62,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ActionBar; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.Signs.Signs; @@ -426,16 +429,46 @@ private boolean isCanUseEntity(Material mat, Block block) { return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerFireInteract(PlayerInteractEvent event) { + + if (event.getAction() != Action.LEFT_CLICK_BLOCK) + return; + + Block block = event.getClickedBlock(); + + if (block == null) + return; + + Block relativeBlock = block.getRelative(event.getBlockFace()); + + if (relativeBlock == null) + return; + + Player player = event.getPlayer(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + if (relativeBlock.getType() == Material.FIRE) { + boolean hasplace = perms.playerHas(player.getName(), player.getWorld().getName(), "place", perms.playerHas(player.getName(), player.getWorld().getName(), + "build", true)); + if (!hasplace) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "build")); + return; + } + } + } + @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { + Player player = event.getPlayer(); Material heldItem = player.getItemInHand().getType(); int heldItemId = player.getItemInHand().getTypeId(); Block block = event.getClickedBlock(); - if (block == null) { + if (block == null) return; - } + int blockId = block.getTypeId(); Material mat = block.getType(); @@ -446,6 +479,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { return; } } + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); String world = player.getWorld().getName(); String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); @@ -532,6 +566,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } } + if (isContainer(mat, block) || isCanUseEntity(mat, block)) { boolean hasuse = perms.playerHas(player.getName(), world, "use", true); for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { From 120ee1200a9d78d49e9a886c0ebaba8f6006e303 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 22 Sep 2015 17:36:58 +0300 Subject: [PATCH 0028/1142] 2.8.0.0 update --- src/com/bekvon/bukkit/residence/Locale.java | 6 + .../bukkit/residence/PlayerManager.java | 158 ++++++++++++ .../bekvon/bukkit/residence/Residence.java | 7 +- .../residence/ResidenceCommandListener.java | 4 +- .../residence/containers/ResPlayer.java | 128 ++++++++++ .../residence/economy/EconomyInterface.java | 18 +- .../residence/economy/TransactionManager.java | 4 +- .../residence/economy/rent/RentManager.java | 11 +- .../residence/{GUI => gui}/SetFlag.java | 6 +- .../listeners/ResidenceBlockListener.java | 5 +- .../listeners/ResidencePlayerListener.java | 20 +- .../permissions/PermissionGroup.java | 33 ++- .../permissions/PermissionManager.java | 239 +++++++++--------- .../permissions/PermissionsInterface.java | 1 - .../protection/ClaimedResidence.java | 2 +- .../residence/protection/FlagPermissions.java | 1 - .../protection/PermissionListManager.java | 222 ++++++++-------- .../protection/ResidenceManager.java | 96 +++++-- .../selection/WorldEditSelectionManager.java | 2 - .../bukkit/residence/text/help/HelpEntry.java | 2 - .../residence/text/help/InformationPager.java | 12 +- src/plugin.yml | 2 +- 22 files changed, 654 insertions(+), 325 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/PlayerManager.java create mode 100644 src/com/bekvon/bukkit/residence/containers/ResPlayer.java rename src/com/bekvon/bukkit/residence/{GUI => gui}/SetFlag.java (98%) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index ffdbaaad6..2f50e711e 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -349,6 +349,7 @@ public static void LoadLang(String lang) { GetConfigString("Language.LimitsMaxUD", "&7- &eMax Up/Down Size:&3 %1", writer, conf, true); GetConfigString("Language.LimitsMinMax", "&7- &eMin/Max Protection Height:&3 %1 to %2", writer, conf, true); GetConfigString("Language.LimitsMaxSub", "&7- &eMax Subzone Depth:&3 %1", writer, conf, true); + GetConfigString("Language.LimitsMaxRents", "&7- &eMax Rents:&3 %1", writer, conf, true); GetConfigString("Language.LimitsEnterLeave", "&7- &eCan Set Enter/Leave Messages:&3 %1", writer, conf, true); GetConfigString("Language.LimitsNumberOwn", "&7- &eNumber of Residences you own:&3 %1", writer, conf, true); GetConfigString("Language.LimitsCost", "&7- &eResidence Cost Per Block:&3 %1", writer, conf, true); @@ -362,6 +363,11 @@ public static void LoadLang(String lang) { GetConfigString("Language.Gui.Pset.Title", "&6%1% %2% flags", writer, conf, true); GetConfigArray("Language.Gui.Actions", Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove"), writer, conf, true); + GetConfigString("Language.InformationPage.TopLine", "&e---< &a %1 &e >---", writer, conf, true); + GetConfigString("Language.InformationPage.Page", "&e-----< %1 >-----", writer, conf, true); + GetConfigString("Language.InformationPage.NextPage", "&e-----< %1 >-----", writer, conf, true); + GetConfigString("Language.InformationPage.NoNextPage", "&e-----------------------", writer, conf, true); + writer.addComment("CommandHelp", ""); GetConfigString("CommandHelp.Description", "Contains Help for Residence", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/PlayerManager.java b/src/com/bekvon/bukkit/residence/PlayerManager.java new file mode 100644 index 000000000..6ba9f5c23 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/PlayerManager.java @@ -0,0 +1,158 @@ +package com.bekvon.bukkit.residence; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.containers.ResPlayer; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class PlayerManager { + private static Map players = Collections.synchronizedMap(new HashMap()); + + public static void playerJoin(OfflinePlayer player) { + synchronized (players) { + ResPlayer resPlayer = players.get(player.getName().toLowerCase()); + if (resPlayer == null) { + resPlayer = new ResPlayer(player.getName()); + resPlayer.recountRes(); + players.put(player.getName().toLowerCase(), resPlayer); + } else + resPlayer.RecalculatePermissions(); + return; + } + } + + public static void playerJoin(String player, UUID uuid) { + synchronized (players) { + ResPlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer == null) { + resPlayer = new ResPlayer(player); + resPlayer.recountRes(); + players.put(player.toLowerCase(), resPlayer); + } + return; + } + } + + public static void fillList() { + players.clear(); + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + for (Player player : Bukkit.getOnlinePlayers()) { + PlayerManager.playerJoin(player); + } + return; + } + }); + } + + public static ArrayList getResidenceList(String player) { + synchronized (players) { + ArrayList temp = new ArrayList(); + playerJoin(player, null); + ResPlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer != null) { + for (Entry one : resPlayer.getResList().entrySet()) { + temp.add(one.getKey()); + } + return temp; + } + return temp; + } + } + + public static ArrayList getResidenceListString(String player) { + synchronized (players) { + ArrayList temp = new ArrayList(); + playerJoin(player, null); + ResPlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer != null) { + for (Entry one : resPlayer.getResList().entrySet()) { + temp.add(Residence.getLanguage().getPhrase("ResidenceList", "." + one.getKey() + "." + Residence.getLanguage().getPhrase("World") + "." + one + .getValue())); + } + return temp; + } + return temp; + } + } + + public static PermissionGroup getGroup(String player) { + ResPlayer resPlayer = getResPlayer(player); + if (resPlayer != null) { + return resPlayer.getGroup(); + } + return null; + } + + public static int getMaxResidences(String player) { + ResPlayer resPlayer = getResPlayer(player); + if (resPlayer != null) { + return resPlayer.getMaxRes(); + } + return -1; + } + + public static int getMaxSubzones(String player) { + ResPlayer resPlayer = getResPlayer(player); + if (resPlayer != null) { + return resPlayer.getMaxSubzones(); + } + return -1; + } + + public static int getMaxRents(String player) { + ResPlayer resPlayer = getResPlayer(player); + if (resPlayer != null) { + return resPlayer.getMaxRents(); + } + return -1; + } + + public static ResPlayer getResPlayer(String player) { + ResPlayer resPlayer = players.get(player.toLowerCase()); + return resPlayer; + } + + public static void renameResidence(String player, String oldName, String newName) { + ResPlayer resPlayer = getResPlayer(player); + if (resPlayer != null) { + resPlayer.renameResidence(oldName, newName); + } + return; + } + + public static void addResidence(String player, ClaimedResidence residence) { + ResPlayer resPlayer = getResPlayer(player); + if (resPlayer != null) { + resPlayer.addResidence(residence); + } + return; + } + + public static void removeResFromPlayer(OfflinePlayer player, String residence) { + removeResFromPlayer(player.getName(), residence); + } + + public static void removeResFromPlayer(Player player, String residence) { + removeResFromPlayer(player.getName(), residence); + } + + public static void removeResFromPlayer(String player, String residence) { + ResPlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer != null) { + resPlayer.removeResidence(residence); + } + return; + } +} diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index fcf322c4c..4f772bf12 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -437,15 +437,18 @@ public void onEnable() { Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Enabled! Version " + this.getDescription().getVersion() + " by bekvon"); initsuccess = true; + PlayerManager.fillList(); + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { @Override - public void run() { + public void run() { for (OfflinePlayer player : Residence.getServ().getOfflinePlayers()) { UUIDList.put(player.getName().toLowerCase(), player.getUniqueId()); } return; } - }); + }); + } catch (Exception ex) { initsuccess = false; diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index f19af0f5f..d6f756ef3 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -19,10 +19,10 @@ import org.bukkit.entity.Player; import org.getspout.spoutapi.SpoutManager; -import com.bekvon.bukkit.residence.GUI.SetFlag; import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; +import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -742,7 +742,7 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); return true; } - if (!group.canCreateResidences() && group.getMaxSubzoneDepth() <= 0 && !resadmin) { + if (!group.canCreateResidences() && group.getMaxSubzoneDepth(player.getName()) <= 0 && !resadmin) { player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java new file mode 100644 index 000000000..aecfc4fc5 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java @@ -0,0 +1,128 @@ +package com.bekvon.bukkit.residence.containers; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class ResPlayer { + + private String userName = null; +// private UUID uuid = null; + private Player player = null; + private Map ResidenceList = new HashMap(); + private int currentRes = -1; + + private PermissionGroup group = null; + + private int maxRes = -1; + private int maxRents = -1; + private int maxSubzones = -1; + +// private int maxEastWest = -1; +// private int MaxNorthSouth = -1; + + public ResPlayer(String userName) { + this.userName = userName; +// this.uuid = uuid; + RecalculatePermissions(); + } + + public void RecalculatePermissions() { + this.player = Bukkit.getPlayerExact(userName); + if (this.player != null) { + recountMaxRes(); + recountMaxRents(); + recountMaxSubzones(); + recountGroup(); + } + } + + public void recountMaxRes() { + for (int i = 1; i <= 50; i++) { + if (this.player.isPermissionSet("residence.max.res." + i)) + this.maxRes = i; + } + } + + public void recountMaxRents() { + for (int i = 1; i <= 50; i++) { + if (this.player.isPermissionSet("residence.max.rents." + i)) + this.maxRents = i; + } + } + + public void recountMaxSubzones() { + for (int i = 1; i <= 50; i++) { + if (this.player.isPermissionSet("residence.max.subzones." + i)) + this.maxSubzones = i; + } + } + + public void recountGroup() { + for (Entry one : Residence.getPermissionManager().getGroups().entrySet()) { + if (this.player.isPermissionSet("residence.group." + one.getKey())) + this.group = one.getValue(); + } + } + + public int getMaxRes() { + return this.maxRes; + } + + public int getMaxRents() { + return this.maxRents; + } + + public int getMaxSubzones() { + return this.maxSubzones; + } + + public PermissionGroup getGroup() { + return this.group; + } + + public void recountRes() { + this.ResidenceList = Residence.getResidenceManager().getResidenceMapList(this.userName, false); + recountResAmount(); + } + + public void recountResAmount() { + this.currentRes = this.ResidenceList.size(); + } + + public void addResidence(ClaimedResidence residence) { + this.ResidenceList.put(residence.getName(), residence); + } + + public void removeResidence(String residence) { + this.ResidenceList.remove(residence); + } + + public void renameResidence(String oldResidence, String newResidence) { + ClaimedResidence res = ResidenceList.get(oldResidence); + if (res != null) { + removeResidence(oldResidence); + ResidenceList.put(newResidence, res); + } + } + + public int getResAmount() { + if (currentRes == -1) + recountResAmount(); + return currentRes; + } + + public Map getResList() { + Map temp = new HashMap(); + for (Entry one : this.ResidenceList.entrySet()) { + temp.put(one.getValue().getName(), one.getValue().getWorld()); + } + return temp; + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java b/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java index 92092e770..9f4a61bf1 100644 --- a/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java +++ b/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java @@ -1,12 +1,10 @@ package com.bekvon.bukkit.residence.economy; -import org.bukkit.OfflinePlayer; - -public interface EconomyInterface { - public double getBalance(String playerName); - public boolean canAfford(String playerName, double amount); - public boolean add(String playerName, double amount); - public boolean subtract(String playerName, double amount); - public boolean transfer(String playerFrom, String playerTo, double amount); - public String getName(); -} +public interface EconomyInterface { + public double getBalance(String playerName); + public boolean canAfford(String playerName, double amount); + public boolean add(String playerName, double amount); + public boolean subtract(String playerName, double amount); + public boolean transfer(String playerFrom, String playerTo, double amount); + public String getName(); +} diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 1bd91e139..fa27f7a88 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -10,9 +10,7 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.Signs.SignUtil; -import com.bekvon.bukkit.residence.Signs.Signs; import com.bekvon.bukkit.residence.protection.ResidenceManager; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -158,7 +156,7 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerBuyFail")); return; } - if (Residence.getResidenceManager().getOwnedZoneCount(player.getName()) >= group.getMaxZones() && !resadmin) { + if (Residence.getResidenceManager().getOwnedZoneCount(player.getName()) >= group.getMaxZones(player.getName()) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); return; } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 487bff411..acf52d054 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -46,11 +46,8 @@ public List getRentedLands(String playername) { List rentedLands = new ArrayList(); for (Entry oneland : rentedLand.entrySet()) { if (oneland.getValue().player.equalsIgnoreCase(playername)) { - - - - rentedLands.add(Residence.getLanguage().getPhrase("ResidenceList", "." + oneland.getKey() + "." + Residence.getLanguage().getPhrase("World") + "." + Residence - .getResidenceManager().getByName(oneland.getKey()).getWorld())+Residence.getLanguage().getPhrase("Rented")); + rentedLands.add(Residence.getLanguage().getPhrase("ResidenceList", "." + oneland.getKey() + "." + Residence.getLanguage().getPhrase("World") + "." + + Residence.getResidenceManager().getByName(oneland.getKey()).getWorld()) + Residence.getLanguage().getPhrase("Rented")); } } return rentedLands; @@ -117,7 +114,7 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi return; } PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (!resadmin && this.getRentCount(player.getName()) >= group.getMaxRents()) { + if (!resadmin && this.getRentCount(player.getName()) >= group.getMaxRents(player.getName())) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMaxRent")); return; } @@ -244,7 +241,7 @@ public void removeFromRent(String landName) { public void removeRentable(String landName) { removeFromRent(landName); rentableLand.remove(landName); - + SignUtil.removeSign(landName); } diff --git a/src/com/bekvon/bukkit/residence/GUI/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java similarity index 98% rename from src/com/bekvon/bukkit/residence/GUI/SetFlag.java rename to src/com/bekvon/bukkit/residence/gui/SetFlag.java index b63f18d8d..ce808edec 100644 --- a/src/com/bekvon/bukkit/residence/GUI/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -1,4 +1,4 @@ -package com.bekvon.bukkit.residence.GUI; +package com.bekvon.bukkit.residence.gui; import java.util.ArrayList; import java.util.HashMap; @@ -8,6 +8,7 @@ import java.util.Map.Entry; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; @@ -19,11 +20,8 @@ import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.Sorting; -import net.md_5.bungee.api.ChatColor; - public class SetFlag { private String residence; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 483c412ef..e562a5e33 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -11,8 +11,6 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.entity.Player; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -27,6 +25,7 @@ import org.bukkit.event.block.BlockPlaceEvent; import com.bekvon.bukkit.residence.NewLanguage; +import com.bekvon.bukkit.residence.PlayerManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -96,7 +95,7 @@ public void onChestPlace(BlockPlaceEvent event) { if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) return; - ArrayList list = Residence.getResidenceManager().getResidenceList(player.getName(), true, false); + ArrayList list = PlayerManager.getResidenceList(player.getName()); if (list.size() != 0) return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 11c296ab7..4af981e25 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -7,7 +7,6 @@ import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -17,7 +16,6 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.block.Sign; import org.bukkit.entity.Damageable; import org.bukkit.entity.Entity; @@ -49,20 +47,16 @@ import org.bukkit.event.player.PlayerShearEntityEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - +import com.bekvon.bukkit.residence.PlayerManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; -import com.bekvon.bukkit.residence.GUI.SetFlag; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.event.*; +import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ActionBar; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.Signs.Signs; @@ -330,13 +324,21 @@ public void onPlayerQuit(PlayerQuitEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerJoin(PlayerJoinEvent event) { - Player player = event.getPlayer(); + final Player player = event.getPlayer(); lastUpdate.put(player.getName(), 0L); if (Residence.getPermissionManager().isResidenceAdmin(player)) { Residence.turnResAdminOn(player); } handleNewLocation(player, player.getLocation(), false); + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + PlayerManager.playerJoin(player); + return; + } + }); + // if (player.isOp() || player.hasPermission("residence.versioncheck")) // { // Residence.getVersionChecker().VersionCheck(player); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index da4ecb0e6..ac6337a44 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -7,6 +7,7 @@ import org.bukkit.ChatColor; +import com.bekvon.bukkit.residence.PlayerManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; @@ -170,7 +171,11 @@ private void parseGroup(ConfigurationSection limits) { } } } - + + public String getGroupName() { + return groupname; + } + public int getMaxX() { return xmax; } @@ -191,7 +196,16 @@ public int getMaxHeight() { return maxHeight; } - public int getMaxZones() { + public int getMaxZones2() { + return resmax; + } + + public int getMaxZones(String player) { + + int max = PlayerManager.getMaxResidences(player); + if (max != -1) + return max; + return resmax; } @@ -207,7 +221,10 @@ public boolean hasTpAccess() { return tpaccess; } - public int getMaxSubzoneDepth() { + public int getMaxSubzoneDepth(String player) { + int max = PlayerManager.getMaxSubzones(player); + if (max != -1) + return max; return subzonedepth; } @@ -243,7 +260,10 @@ public boolean canSellLand() { return canSell; } - public int getMaxRents() { + public int getMaxRents(String player) { + int max = PlayerManager.getMaxRents(player); + if (max != -1) + return max; return maxRents; } @@ -309,12 +329,13 @@ public void printLimits(Player player) { player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsAdmin", String.valueOf(Residence.getPermissionManager().isResidenceAdmin( player)))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsCanCreate", String.valueOf(cancreate))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxRes", String.valueOf(resmax))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxRes", String.valueOf(getMaxZones(player.getName())))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxEW", String.valueOf(xmax))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxNS", String.valueOf(zmax))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxUD", String.valueOf(ymax))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMinMax", String.valueOf(minHeight) + "." + String.valueOf(maxHeight))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxSub", String.valueOf(subzonedepth))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxSub", String.valueOf(getMaxSubzoneDepth(player.getName())))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxRents", String.valueOf(getMaxRents(player.getName())))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsEnterLeave", String.valueOf(messageperms))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsNumberOwn", String.valueOf(Residence.getResidenceManager().getOwnedZoneCount(player .getName())))); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 0cbd54650..6d9b7a32c 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -5,6 +5,7 @@ package com.bekvon.bukkit.residence.permissions; +import com.bekvon.bukkit.residence.PlayerManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; @@ -25,163 +26,169 @@ */ public class PermissionManager { protected static PermissionsInterface perms; - protected Map groups; + protected LinkedHashMap groups; protected Map playersGroup; protected FlagPermissions globalFlagPerms; public PermissionManager(FileConfiguration config, FileConfiguration flags) { - try { - groups = Collections.synchronizedMap(new HashMap()); - playersGroup = Collections.synchronizedMap(new HashMap()); - globalFlagPerms = new FlagPermissions(); - this.readConfig(config, flags); - boolean enable = config.getBoolean("Global.EnablePermissions", true); - if (enable) { - this.checkPermissions(); - } - } catch (Exception ex) { - Logger.getLogger(PermissionManager.class.getName()).log(Level.SEVERE, null, ex); - } + try { + groups = new LinkedHashMap(); + playersGroup = Collections.synchronizedMap(new HashMap()); + globalFlagPerms = new FlagPermissions(); + this.readConfig(config, flags); + boolean enable = config.getBoolean("Global.EnablePermissions", true); + if (enable) { + this.checkPermissions(); + } + } catch (Exception ex) { + Logger.getLogger(PermissionManager.class.getName()).log(Level.SEVERE, null, ex); + } } public FlagPermissions getAllFlags() { - return this.globalFlagPerms; + return this.globalFlagPerms; } - + + public Map getGroups() { + return groups; + } + public PermissionGroup getGroup(Player player) { - return groups.get(this.getGroupNameByPlayer(player)); + PermissionGroup group = PlayerManager.getGroup(player.getName()); + if (group != null) + return group; + return groups.get(this.getGroupNameByPlayer(player)); } public PermissionGroup getGroup(String player, String world) { - return groups.get(this.getGroupNameByPlayer(player, world)); + return groups.get(this.getGroupNameByPlayer(player, world)); } public PermissionGroup getGroupByName(String group) { - group = group.toLowerCase(); - if (!groups.containsKey(group)) { - return groups.get(Residence.getConfigManager().getDefaultGroup()); - } - return groups.get(group); + group = group.toLowerCase(); + if (!groups.containsKey(group)) { + return groups.get(Residence.getConfigManager().getDefaultGroup()); + } + return groups.get(group); } public String getGroupNameByPlayer(Player player) { - return this.getGroupNameByPlayer(player.getName(), player.getWorld().getName()); + return this.getGroupNameByPlayer(player.getName(), player.getWorld().getName()); } public String getGroupNameByPlayer(String player, String world) { - player = player.toLowerCase(); - if (playersGroup.containsKey(player)) { - String group = playersGroup.get(player); - if(group==null) - { - String uuids = Residence.getPlayerUUIDString(player); - if(uuids != null) - group = playersGroup.get(uuids); - } - if (group != null) { - group = group.toLowerCase(); - if (group != null && groups.containsKey(group)) { - return group; - } - } - } - String group = this.getPermissionsGroup(player, world); - if (group == null || !groups.containsKey(group)) { - return Residence.getConfigManager().getDefaultGroup().toLowerCase(); - } else { - return group; - } + player = player.toLowerCase(); + if (playersGroup.containsKey(player)) { + String group = playersGroup.get(player); + if (group == null) { + String uuids = Residence.getPlayerUUIDString(player); + if (uuids != null) + group = playersGroup.get(uuids); + } + if (group != null) { + group = group.toLowerCase(); + if (group != null && groups.containsKey(group)) { + return group; + } + } + } + String group = this.getPermissionsGroup(player, world); + if (group == null || !groups.containsKey(group)) { + return Residence.getConfigManager().getDefaultGroup().toLowerCase(); + } else { + return group; + } } public String getPermissionsGroup(Player player) { - return this.getPermissionsGroup(player.getName(), player.getWorld().getName()); + return this.getPermissionsGroup(player.getName(), player.getWorld().getName()); } public String getPermissionsGroup(String player, String world) { - if (perms == null) - return Residence.getConfigManager().getDefaultGroup(); - return perms.getPlayerGroup(player, world); + if (perms == null) + return Residence.getConfigManager().getDefaultGroup(); + return perms.getPlayerGroup(player, world); } public boolean isResidenceAdmin(Player player) { - return (player.hasPermission("residence.admin") || (player.isOp() && Residence.getConfigManager().getOpsAreAdmins())); + return (player.hasPermission("residence.admin") || (player.isOp() && Residence.getConfigManager().getOpsAreAdmins())); } private void checkPermissions() { - Server server = Residence.getServ(); - Plugin p = server.getPluginManager().getPlugin("Vault"); - if (p != null) { - ResidenceVaultAdapter vault = new ResidenceVaultAdapter(server); - if (vault.permissionsOK()) { - perms = vault; - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault using permissions plugin:" + vault.getPermissionsName()); - return; - } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault, but Vault reported no usable permissions system..."); - } - } - p = server.getPluginManager().getPlugin("PermissionsBukkit"); - if (p != null) { - perms = new PermissionsBukkitAdapter((PermissionsPlugin) p); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found PermissionsBukkit Plugin!"); - return; - } - p = server.getPluginManager().getPlugin("bPermissions"); - if (p != null) { - perms = new BPermissionsAdapter(); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found bPermissions Plugin!"); - return; - } - p = server.getPluginManager().getPlugin("Permissions"); - if (p != null) { - if (Residence.getConfigManager().useLegacyPermissions()) { - perms = new LegacyPermissions(((Permissions) p).getHandler()); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Permissions Plugin!"); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Permissions running in Legacy mode!"); - } else { - perms = new OriginalPermissions(((Permissions) p).getHandler()); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Permissions Plugin!"); - } - return; - } - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Permissions plugin NOT FOUND!"); + Server server = Residence.getServ(); + Plugin p = server.getPluginManager().getPlugin("Vault"); + if (p != null) { + ResidenceVaultAdapter vault = new ResidenceVaultAdapter(server); + if (vault.permissionsOK()) { + perms = vault; + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault using permissions plugin:" + vault.getPermissionsName()); + return; + } else { + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault, but Vault reported no usable permissions system..."); + } + } + p = server.getPluginManager().getPlugin("PermissionsBukkit"); + if (p != null) { + perms = new PermissionsBukkitAdapter((PermissionsPlugin) p); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found PermissionsBukkit Plugin!"); + return; + } + p = server.getPluginManager().getPlugin("bPermissions"); + if (p != null) { + perms = new BPermissionsAdapter(); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found bPermissions Plugin!"); + return; + } + p = server.getPluginManager().getPlugin("Permissions"); + if (p != null) { + if (Residence.getConfigManager().useLegacyPermissions()) { + perms = new LegacyPermissions(((Permissions) p).getHandler()); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Permissions Plugin!"); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Permissions running in Legacy mode!"); + } else { + perms = new OriginalPermissions(((Permissions) p).getHandler()); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Permissions Plugin!"); + } + return; + } + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Permissions plugin NOT FOUND!"); } private void readConfig(FileConfiguration config, FileConfiguration flags) { - String defaultGroup = Residence.getConfigManager().getDefaultGroup(); - globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", flags.getConfigurationSection("Global")); - ConfigurationSection nodes = config.getConfigurationSection("Groups"); - if (nodes != null) { - Set entrys = nodes.getKeys(false); - for (String key : entrys) { - try { - groups.put(key.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms)); - List mirrors = nodes.getConfigurationSection(key).getStringList("Mirror"); - for (String group : mirrors) { - groups.put(group.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms)); - } - } catch (Exception ex) { - System.out.println("[Residence] Error parsing group from config:" + key + " Exception:" + ex); - } - } - } - if (!groups.containsKey(defaultGroup)) { - groups.put(defaultGroup, new PermissionGroup(defaultGroup)); - } - Set keys = config.getConfigurationSection("GroupAssignments").getKeys(false); - if (keys != null) { - for (String key : keys) { - playersGroup.put(key.toLowerCase(), config.getString("GroupAssignments." + key, defaultGroup).toLowerCase()); - } - } + String defaultGroup = Residence.getConfigManager().getDefaultGroup(); + globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", flags.getConfigurationSection("Global")); + ConfigurationSection nodes = config.getConfigurationSection("Groups"); + if (nodes != null) { + Set entrys = nodes.getKeys(false); + for (String key : entrys) { + try { + groups.put(key.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms)); + List mirrors = nodes.getConfigurationSection(key).getStringList("Mirror"); + for (String group : mirrors) { + groups.put(group.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms)); + } + } catch (Exception ex) { + System.out.println("[Residence] Error parsing group from config:" + key + " Exception:" + ex); + } + } + } + if (!groups.containsKey(defaultGroup)) { + groups.put(defaultGroup, new PermissionGroup(defaultGroup)); + } + Set keys = config.getConfigurationSection("GroupAssignments").getKeys(false); + if (keys != null) { + for (String key : keys) { + playersGroup.put(key.toLowerCase(), config.getString("GroupAssignments." + key, defaultGroup).toLowerCase()); + } + } } public boolean hasGroup(String group) { - group = group.toLowerCase(); - return groups.containsKey(group); + group = group.toLowerCase(); + return groups.containsKey(group); } public PermissionsInterface getPermissionsPlugin() { - return perms; + return perms; } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java b/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java index 7ec8807e8..72e5f7124 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java @@ -5,7 +5,6 @@ package com.bekvon.bukkit.residence.permissions; -import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; /** diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e6b098da8..f3d4bceeb 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -378,7 +378,7 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l } } PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (this.getZoneDepth() >= group.getMaxSubzoneDepth()) { + if (this.getZoneDepth() >= group.getMaxSubzoneDepth(owner)) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneMaxDepth")); return false; } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 7310d06a4..becb6a33b 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -21,7 +21,6 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.utils.Debug; /** * diff --git a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java index c075c3a9e..7d9490326 100644 --- a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java @@ -4,6 +4,7 @@ */ package com.bekvon.bukkit.residence.protection; + import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; @@ -20,143 +21,120 @@ */ public class PermissionListManager { - private final Map> lists; + private final Map> lists; - public PermissionListManager() - { - lists = Collections.synchronizedMap(new HashMap>()); + public PermissionListManager() { + lists = Collections.synchronizedMap(new HashMap>()); } - - public FlagPermissions getList(String player, String listname) - { - Map get = lists.get(player); - if(get==null) - { - return null; - } - return get.get(listname); + + public FlagPermissions getList(String player, String listname) { + Map get = lists.get(player); + if (get == null) { + return null; + } + return get.get(listname); } - - public void makeList(Player player, String listname) - { - Map get = lists.get(player.getName()); - if(get==null) - { - get=new HashMap<>(); - lists.put(player.getName(), get); - } - FlagPermissions perms = get.get(listname); - if(perms == null) - { - perms = new FlagPermissions(); - get.put(listname, perms); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("ListCreate", listname)); - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ListExists")); - } + + public void makeList(Player player, String listname) { + Map get = lists.get(player.getName()); + if (get == null) { + get = new HashMap<>(); + lists.put(player.getName(), get); + } + FlagPermissions perms = get.get(listname); + if (perms == null) { + perms = new FlagPermissions(); + get.put(listname, perms); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ListCreate", listname)); + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ListExists")); + } } - public void removeList(Player player, String listname) - { - Map get = lists.get(player.getName()); - if(get==null) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidList")); - return; - } - FlagPermissions list = get.get(listname); - if(list==null) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidList")); - return; - } - get.remove(listname); - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("ListRemoved")); + public void removeList(Player player, String listname) { + Map get = lists.get(player.getName()); + if (get == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidList")); + return; + } + FlagPermissions list = get.get(listname); + if (list == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidList")); + return; + } + get.remove(listname); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ListRemoved")); } - - public void applyListToResidence(Player player, String listname, String areaname, boolean resadmin) - { - FlagPermissions list = this.getList(player.getName(), listname); - if(list == null) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidList")); - return; - } - ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); - if(res == null) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidResidence")); - return; - } - res.getPermissions().applyTemplate(player, list, resadmin); + + public void applyListToResidence(Player player, String listname, String areaname, boolean resadmin) { + FlagPermissions list = this.getList(player.getName(), listname); + if (list == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidList")); + return; + } + ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + if (res == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + return; + } + res.getPermissions().applyTemplate(player, list, resadmin); } - public void printList(Player player, String listname) - { - FlagPermissions list = this.getList(player.getName(), listname); - if(list==null) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidList")); - return; - } - player.sendMessage(ChatColor.LIGHT_PURPLE+"------Permission Template------"); - player.sendMessage(Residence.getLanguage().getPhrase("Name")+": "+ChatColor.GREEN + listname); - list.printFlags(player); + public void printList(Player player, String listname) { + FlagPermissions list = this.getList(player.getName(), listname); + if (list == null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidList")); + return; + } + player.sendMessage(ChatColor.LIGHT_PURPLE + "------Permission Template------"); + player.sendMessage(Residence.getLanguage().getPhrase("Name") + ": " + ChatColor.GREEN + listname); + list.printFlags(player); } @SuppressWarnings({ "unchecked", "rawtypes" }) - public Map save() - { - Map root = new LinkedHashMap<>(); - for(Entry> players : lists.entrySet()) - { - Map saveMap = new LinkedHashMap<>(); - Map map = players.getValue(); - for(Entry list : map.entrySet()) - { - saveMap.put(list.getKey(), list.getValue().save()); - } - root.put(players.getKey(), saveMap); - } - return root; + public Map save() { + Map root = new LinkedHashMap<>(); + for (Entry> players : lists.entrySet()) { + Map saveMap = new LinkedHashMap<>(); + Map map = players.getValue(); + for (Entry list : map.entrySet()) { + saveMap.put(list.getKey(), list.getValue().save()); + } + root.put(players.getKey(), saveMap); + } + return root; } + @SuppressWarnings("unchecked") public static PermissionListManager load(Map root) { - - PermissionListManager p = new PermissionListManager(); - if(root != null) - { - for (Entry players : root.entrySet()) { - try { - Map value = (Map) players.getValue(); - Map loadedMap = Collections.synchronizedMap(new HashMap()); - for (Entry list : value.entrySet()) { - loadedMap.put(list.getKey(), FlagPermissions.load((Map) list.getValue())); - } - p.lists.put(players.getKey(), loadedMap); - } catch (Exception ex) { - System.out.println("[Residence] - Failed to load permission lists for player: " + players.getKey()); - } - } - } - return p; + + PermissionListManager p = new PermissionListManager(); + if (root != null) { + for (Entry players : root.entrySet()) { + try { + Map value = (Map) players.getValue(); + Map loadedMap = Collections.synchronizedMap(new HashMap()); + for (Entry list : value.entrySet()) { + loadedMap.put(list.getKey(), FlagPermissions.load((Map) list.getValue())); + } + p.lists.put(players.getKey(), loadedMap); + } catch (Exception ex) { + System.out.println("[Residence] - Failed to load permission lists for player: " + players.getKey()); + } + } + } + return p; } - public void printLists(Player player) - { - StringBuilder sbuild = new StringBuilder(); - Map get = lists.get(player.getName()); - sbuild.append(ChatColor.YELLOW).append(Residence.getLanguage().getPhrase("Lists")).append(":").append(ChatColor.DARK_AQUA).append(" "); - if(get!=null) - { - for( Entry thislist : get.entrySet()) - { - sbuild.append(thislist.getKey()).append(" "); - } - } - player.sendMessage(sbuild.toString()); + public void printLists(Player player) { + StringBuilder sbuild = new StringBuilder(); + Map get = lists.get(player.getName()); + sbuild.append(ChatColor.YELLOW).append(Residence.getLanguage().getPhrase("Lists")).append(":").append(ChatColor.DARK_AQUA).append(" "); + if (get != null) { + for (Entry thislist : get.entrySet()) { + sbuild.append(thislist.getKey()).append(" "); + } + } + player.sendMessage(sbuild.toString()); } } - diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 95d37f327..8b51478fc 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -6,7 +6,6 @@ package com.bekvon.bukkit.residence.protection; import java.util.ArrayList; -import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -17,14 +16,15 @@ import java.util.logging.Level; import java.util.logging.Logger; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.residence.PlayerManager; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; @@ -32,6 +32,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.Debug; /** * @@ -157,7 +158,7 @@ public boolean addResidence(Player player, String owner, String name, Location l return false; } if (player != null) { - if (!hasMaxZones(player.getName(), group.getMaxZones()) && !resadmin) { + if (!hasMaxZones(player.getName(), group.getMaxZones(player.getName())) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); return false; } @@ -188,6 +189,9 @@ public boolean addResidence(Player player, String owner, String name, Location l newRes.addArea(newArea, "main"); } if (newRes.getAreaCount() != 0) { + + PlayerManager.addResidence(owner, newRes); + residences.put(name, newRes); calculateChunks(name); Residence.getLeaseManager().removeExpireTime(name); @@ -230,16 +234,21 @@ public void listResidences(Player player, String targetplayer, int page, boolean this.listResidences(player, targetplayer, page, showhidden, false); } - public void listResidences(Player player, String targetplayer, int page, boolean showhidden, boolean showsubzones) { + public void listResidences(final Player player, final String targetplayer, final int page, boolean showhidden, boolean showsubzones) { if (showhidden && !Residence.isResAdminOn(player) && !player.getName().equals(targetplayer)) { showhidden = false; } - - ArrayList ownedResidences = this.getResidenceList(targetplayer, showhidden, showsubzones, true); - - ownedResidences.addAll(Residence.getRentManager().getRentedLands(targetplayer)); - - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, ownedResidences, page); + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + long time = System.currentTimeMillis(); + ArrayList ownedResidences = PlayerManager.getResidenceListString(targetplayer); + ownedResidences.addAll(Residence.getRentManager().getRentedLands(targetplayer)); + InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, ownedResidences, page); + Debug.D(targetplayer + "1 " + (System.currentTimeMillis() - time)); + return; + } + }); } public void listAllResidences(Player player, int page) { @@ -261,6 +270,19 @@ public String[] getResidenceList() { return this.getResidenceList(true, true).toArray(new String[0]); } + public Map getResidenceMapList(String targetplayer, boolean showhidden) { + Map temp = new HashMap(); + for (Entry res : residences.entrySet()) { + if (res.getValue().getPermissions().getOwner().equalsIgnoreCase(targetplayer)) { + boolean hidden = res.getValue().getPermissions().has("hidden", false); + if ((showhidden) || (!showhidden && !hidden)) { + temp.put(res.getKey(), res.getValue()); + } + } + } + return temp; + } + public ArrayList getResidenceList(boolean showhidden, boolean showsubzones) { return this.getResidenceList(null, showhidden, showsubzones, false); } @@ -312,6 +334,7 @@ public void removeResidence(String name) { this.removeResidence(null, name, true); } + @SuppressWarnings("deprecation") public void removeResidence(Player player, String name, boolean resadmin) { ClaimedResidence res = this.getByName(name); if (res != null) { @@ -376,6 +399,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { // Residence.getLeaseManager().removeExpireTime(name); - causing // concurrent modification exception in lease manager... worked // around for now + PlayerManager.removeResFromPlayer(player, name); Residence.getRentManager().removeRentable(name); Residence.getTransactionManager().removeFromSale(name); @@ -407,6 +431,7 @@ private void removeAllByOwner(Player player, String owner, Map set = residences.values(); - int count = 0; - for (ClaimedResidence res : set) { - if (res.getPermissions().getOwner().equalsIgnoreCase(player)) { - count++; - } - } - return count; + +// Collection set = residences.values(); +// int count = 0; +// for (ClaimedResidence res : set) { +// if (res.getPermissions().getOwner().equalsIgnoreCase(player)) { +// count++; +// } +// } + return PlayerManager.getResidenceList(player).size(); } public boolean hasMaxZones(String player, int target) { - Collection set = residences.values(); - int count = 0; - for (ClaimedResidence res : set) { - if (res.getPermissions().getOwner().equalsIgnoreCase(player)) { - count++; - if (count >= target) - return false; - } - } +// Collection set = residences.values(); +// int count = 0; +// for (ClaimedResidence res : set) { +// if (res.getPermissions().getOwner().equalsIgnoreCase(player)) { +// count++; +// if (count >= target) +// return false; +// } +// } + int count = getOwnedZoneCount(player); + if (count >= target) + return false; + return true; } @@ -617,11 +647,15 @@ public boolean renameResidence(Player player, String oldName, String newName, bo player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + newName + ChatColor.RED)); return false; } + ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); Residence.getServ().getPluginManager().callEvent(resevent); removeChunkList(oldName); residences.put(newName, res); residences.remove(oldName); + + PlayerManager.renameResidence(player.getName(), oldName, newName); + calculateChunks(newName); if (Residence.getConfigManager().useLeases()) { Residence.getLeaseManager().updateLeaseName(oldName, newName); @@ -668,7 +702,7 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); return; } - if (!hasMaxZones(giveplayer.getName(), g.getMaxZones()) && !resadmin) { + if (!hasMaxZones(giveplayer.getName(), g.getMaxZones(giveplayer.getName())) && !resadmin) { reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); return; } @@ -680,6 +714,10 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, } } } + + PlayerManager.removeResFromPlayer(reqPlayer, residence); + PlayerManager.addResidence(targPlayer, res); + res.getPermissions().setOwner(giveplayer.getName(), true); // Fix phrases here reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceGive", ChatColor.YELLOW + residence + ChatColor.GREEN + "." + ChatColor.YELLOW @@ -705,6 +743,8 @@ public void removeAllFromWorld(CommandSender sender, String world) { } else { sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); } + + PlayerManager.fillList(); } public int getResidenceCount() { diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index b6a46d1c5..e30ef79c5 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -5,13 +5,11 @@ package com.bekvon.bukkit.residence.selection; import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldedit.bukkit.selections.CuboidSelection; import com.sk89q.worldedit.bukkit.selections.Selection; import com.sk89q.worldedit.regions.CuboidRegion; import org.bukkit.Location; import org.bukkit.Server; -import org.bukkit.World; import org.bukkit.entity.Player; /** diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 5c8a35237..bfb1db341 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -9,8 +9,6 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.utils.Debug; - import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 8aa993158..b5dcbf566 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -7,6 +7,7 @@ import org.bukkit.ChatColor; +import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import java.util.Arrays; import java.util.List; @@ -43,16 +44,17 @@ public static void printInfo(CommandSender sender, String title, List li sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidPage")); return; } - sender.sendMessage(ChatColor.YELLOW + "---<" + ChatColor.GREEN + title + ChatColor.YELLOW + ">---"); - sender.sendMessage(ChatColor.YELLOW + "---<" + Residence.getLanguage().getPhrase("GenericPage", ChatColor.GREEN + String.format("%d", page) + ChatColor.YELLOW - + "." + ChatColor.GREEN + pagecount + ChatColor.YELLOW) + ">---"); + sender.sendMessage(NewLanguage.getMessage("Language.InformationPage.TopLine").replace("%1", title)); + sender.sendMessage(NewLanguage.getMessage("Language.InformationPage.Page").replace("%1", Residence.getLanguage().getPhrase("GenericPage", ChatColor.GREEN + String + .format("%d", page) + ChatColor.YELLOW + + "." + ChatColor.GREEN + pagecount + ChatColor.YELLOW))); for (int i = start; i < end; i++) { if (lines.size() > i) sender.sendMessage(ChatColor.GREEN + lines.get(i)); } if (pagecount > page) - sender.sendMessage(ChatColor.GRAY + "---<" + Residence.getLanguage().getPhrase("NextPage") + ">---"); + sender.sendMessage(NewLanguage.getMessage("Language.InformationPage.NextPage").replace("%1", Residence.getLanguage().getPhrase("NextPage"))); else - sender.sendMessage(ChatColor.GRAY + "-----------------------"); + sender.sendMessage(NewLanguage.getMessage("Language.InformationPage.NoNextPage")); } } diff --git a/src/plugin.yml b/src/plugin.yml index 7ef41bca8..8a3e9063e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.7.7.3 +version: 2.8.0.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 96ab2bd2b6063052415f27293f45cdc432eadce1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 23 Sep 2015 10:59:42 +0300 Subject: [PATCH 0029/1142] Falling block protection --- .../bukkit/residence/ConfigManager.java | 34 ++++++++++++-- .../listeners/ResidenceBlockListener.java | 47 +++++++++++++++++++ 2 files changed, 77 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 2c27ccd4c..7f158ae9c 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -39,6 +39,7 @@ public class ConfigManager { protected boolean NoLava; protected boolean NoWater; protected boolean NoLavaPlace; + protected boolean useBlockFall; protected boolean NoWaterPlace; protected boolean AutoCleanUp; protected boolean UseClean; @@ -55,6 +56,7 @@ public class ConfigManager { protected int autoSaveInt; protected int FlowLevel; protected int PlaceLevel; + protected int BlockFallLevel; protected int CleanLevel; protected int VisualizerRange; protected int VisualizerShowFor; @@ -97,6 +99,7 @@ public class ConfigManager { protected List NoFlowWorlds; protected List AutoCleanUpWorlds; protected List NoPlaceWorlds; + protected List BlockFallWorlds; protected List CleanWorlds; protected ItemStack GuiTrue; @@ -195,6 +198,8 @@ void UpdateConfigFile() { CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); conf.options().copyDefaults(true); + String defaultWorldName = Bukkit.getServer().getWorlds().size() > 0 ? Bukkit.getServer().getWorlds().get(0).getName() : "World"; + writer.addComment("Global", "These are Global Settings for Residence."); writer.addComment("Global.Language", "This loads the .yml file in the Residence Language folder", "All Residence text comes from this file. (NOT DONE YET)"); @@ -232,23 +237,32 @@ void UpdateConfigFile() { writer.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); AutoCleanUpDays = GetConfigInt("Global.AutoCleanUp.Days", 60, writer, conf); writer.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); - AutoCleanUpWorlds = GetConfigArray("Global.AutoCleanUp.Worlds", Arrays.asList("TestWorld"), writer, conf, false); + AutoCleanUpWorlds = GetConfigArray("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + // Flow writer.addComment("Global.AntiGreef.Flow.Level", "Level from witch one to start lava and water flow blocking", "This dont have effect in residence area"); FlowLevel = GetConfigInt("Global.AntiGreef.Flow.Level", 63, writer, conf); writer.addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); NoLava = GetConfigBoolean("Global.AntiGreef.Flow.NoLavaFlow", true, writer, conf); writer.addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); NoWater = GetConfigBoolean("Global.AntiGreef.Flow.NoWaterFlow", true, writer, conf); - NoFlowWorlds = GetConfigArray("Global.AntiGreef.Flow.Worlds", Arrays.asList("World"), writer, conf, false); + NoFlowWorlds = GetConfigArray("Global.AntiGreef.Flow.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + // Place writer.addComment("Global.AntiGreef.Place.Level", "Level from witch one to start block lava and water place", "This don't have effect in residence area"); PlaceLevel = GetConfigInt("Global.AntiGreef.Place.Level", 63, writer, conf); writer.addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); NoLavaPlace = GetConfigBoolean("Global.AntiGreef.Place.NoLavaPlace", true, writer, conf); writer.addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, playrs cant place water outside residence"); NoWaterPlace = GetConfigBoolean("Global.AntiGreef.Place.NoWaterPlace", true, writer, conf); - NoPlaceWorlds = GetConfigArray("Global.AntiGreef.Place.Worlds", Arrays.asList("World"), writer, conf, false); + NoPlaceWorlds = GetConfigArray("Global.AntiGreef.Place.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + + // Sand fall + writer.addComment("Global.AntiGreef.BlockFall.Use", "With this set to true, falling blocks will be deleted if they will land in different area"); + useBlockFall = GetConfigBoolean("Global.AntiGreef.BlockFall.Use", true, writer, conf); + writer.addComment("Global.AntiGreef.BlockFall.Level", "Level from witch one to start block block's fall", "This don't have effect in residence area or outside"); + BlockFallLevel = GetConfigInt("Global.AntiGreef.BlockFall.Level", 62, writer, conf); + BlockFallWorlds = GetConfigArray("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); writer.addComment("Global.AntiGreef.ResCleaning.Use", "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", @@ -258,7 +272,7 @@ void UpdateConfigFile() { CleanLevel = GetConfigInt("Global.AntiGreef.ResCleaning.Level", 63, writer, conf); writer.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); CleanBlocks = GetConfigIntArray("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11), writer, conf); - CleanWorlds = GetConfigArray("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList("World"), writer, conf, false); + CleanWorlds = GetConfigArray("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); writer.addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); defaultGroup = GetConfigString("Global.DefaultGroup", "default", writer, conf, false); @@ -568,6 +582,10 @@ public boolean isNoLavaPlace() { return NoLavaPlace; } + public boolean isBlockFall() { + return useBlockFall; + } + public boolean isNoWaterPlace() { return NoWaterPlace; } @@ -628,6 +646,10 @@ public int getPlaceLevel() { return PlaceLevel; } + public int getBlockFallLevel() { + return BlockFallLevel; + } + public int getCleanLevel() { return CleanLevel; } @@ -740,6 +762,10 @@ public List getNoPlaceWorlds() { return NoPlaceWorlds; } + public List getBlockFallWorlds() { + return BlockFallWorlds; + } + public List getCleanWorlds() { return CleanWorlds; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index e562a5e33..4977a2168 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -11,6 +11,9 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + +import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -35,7 +38,10 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockSpreadEvent; +import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.metadata.MetadataValue; /** * @@ -45,6 +51,8 @@ public class ResidenceBlockListener implements Listener { private static List informed = new ArrayList(); + public static final String BlockMetadata = "ResFallingBlock"; + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { Player player = event.getPlayer(); @@ -82,6 +90,45 @@ public void onBlockBreak(BlockBreakEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockFall(EntityChangeBlockEvent event) { + + if (!Residence.getConfigManager().isBlockFall()) + return; + + if ((event.getEntityType() != EntityType.FALLING_BLOCK)) + return; + + if (event.getTo().hasGravity()) + return; + + Block block = event.getBlock(); + + if (block == null) + return; + + if (!Residence.getConfigManager().getBlockFallWorlds().contains(block.getLocation().getWorld().getName())) + return; + + if (block.getY() <= Residence.getConfigManager().getBlockFallLevel()) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + Location loc = new Location(block.getLocation().getWorld(), block.getX(), block.getY(), block.getZ()); + for (int i = loc.getBlockY() - 1; i >= Residence.getConfigManager().getBlockFallLevel() - 1; i--) { + loc.setY(i); + if (loc.getBlock().getType() != Material.AIR) { + ClaimedResidence targetRes = Residence.getResidenceManager().getByLoc(loc); + if (res == null && targetRes != null || res != null && targetRes == null || res != null && targetRes != null && !res.getName() + .equalsIgnoreCase(targetRes.getName())) { + event.setCancelled(true); + block.setType(Material.AIR); + } + return; + } + } + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestPlace(BlockPlaceEvent event) { From 656a2eb25c005ae08eec13cd7f2126eb7945f8de Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 23 Sep 2015 12:43:46 +0300 Subject: [PATCH 0030/1142] Recalculating permission on request, to have up to date --- .../bukkit/residence/containers/ResPlayer.java | 14 +++++++++----- .../listeners/ResidenceBlockListener.java | 6 +----- .../residence/protection/ResidenceManager.java | 3 --- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java index aecfc4fc5..0dfb48669 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java @@ -44,21 +44,21 @@ public void RecalculatePermissions() { } public void recountMaxRes() { - for (int i = 1; i <= 50; i++) { + for (int i = 1; i <= 250; i++) { if (this.player.isPermissionSet("residence.max.res." + i)) this.maxRes = i; } } public void recountMaxRents() { - for (int i = 1; i <= 50; i++) { + for (int i = 1; i <= 250; i++) { if (this.player.isPermissionSet("residence.max.rents." + i)) this.maxRents = i; } } public void recountMaxSubzones() { - for (int i = 1; i <= 50; i++) { + for (int i = 1; i <= 250; i++) { if (this.player.isPermissionSet("residence.max.subzones." + i)) this.maxSubzones = i; } @@ -72,18 +72,22 @@ public void recountGroup() { } public int getMaxRes() { + recountMaxRes(); return this.maxRes; } public int getMaxRents() { + recountMaxRents(); return this.maxRents; } public int getMaxSubzones() { + recountMaxSubzones(); return this.maxSubzones; - } - + } + public PermissionGroup getGroup() { + recountGroup(); return this.group; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 4977a2168..3ee00dc1b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -11,8 +11,6 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.block.Block; @@ -40,8 +38,6 @@ import org.bukkit.event.block.BlockSpreadEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; /** * @@ -120,7 +116,7 @@ public void onBlockFall(EntityChangeBlockEvent event) { if (loc.getBlock().getType() != Material.AIR) { ClaimedResidence targetRes = Residence.getResidenceManager().getByLoc(loc); if (res == null && targetRes != null || res != null && targetRes == null || res != null && targetRes != null && !res.getName() - .equalsIgnoreCase(targetRes.getName())) { + .equals(targetRes.getName())) { event.setCancelled(true); block.setType(Material.AIR); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 8b51478fc..d9b8bf5a5 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -32,7 +32,6 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.Debug; /** * @@ -241,11 +240,9 @@ public void listResidences(final Player player, final String targetplayer, final Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { @Override public void run() { - long time = System.currentTimeMillis(); ArrayList ownedResidences = PlayerManager.getResidenceListString(targetplayer); ownedResidences.addAll(Residence.getRentManager().getRentedLands(targetplayer)); InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, ownedResidences, page); - Debug.D(targetplayer + "1 " + (System.currentTimeMillis() - time)); return; } }); From f185bb8051383ef714a2705a1897267f59807c1b Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 24 Sep 2015 12:23:16 +0300 Subject: [PATCH 0031/1142] Fix after res removal showing null --- .../bukkit/residence/protection/ResidenceManager.java | 8 ++++---- src/plugin.yml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index d9b8bf5a5..20f8e6542 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -189,11 +189,11 @@ public boolean addResidence(Player player, String owner, String name, Location l } if (newRes.getAreaCount() != 0) { - PlayerManager.addResidence(owner, newRes); - residences.put(name, newRes); calculateChunks(name); Residence.getLeaseManager().removeExpireTime(name); + + PlayerManager.addResidence(newRes.getOwner(), newRes); if (player != null) { player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceCreate", ChatColor.YELLOW + name + ChatColor.GREEN)); } @@ -273,7 +273,7 @@ public Map getResidenceMapList(String targetplayer, bo if (res.getValue().getPermissions().getOwner().equalsIgnoreCase(targetplayer)) { boolean hidden = res.getValue().getPermissions().has("hidden", false); if ((showhidden) || (!showhidden && !hidden)) { - temp.put(res.getKey(), res.getValue()); + temp.put(res.getValue().getName(), res.getValue()); } } } @@ -396,7 +396,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { // Residence.getLeaseManager().removeExpireTime(name); - causing // concurrent modification exception in lease manager... worked // around for now - PlayerManager.removeResFromPlayer(player, name); + PlayerManager.removeResFromPlayer(res.getOwner(), name); Residence.getRentManager().removeRentable(name); Residence.getTransactionManager().removeFromSale(name); diff --git a/src/plugin.yml b/src/plugin.yml index 8a3e9063e..fc8fdc473 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -43,10 +43,10 @@ permissions: default: op residence.create: description: Allows you to create residences - default: op + default: true residence.select: description: Allows you to select an area to make residences - default: op + default: true residence.versioncheck: description: Notice to new version after connect default: op From 61a32a98b4fa76178303581cb97100db50ca8661 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 25 Sep 2015 16:06:22 +0300 Subject: [PATCH 0032/1142] Auto selection/ locale change --- .../bukkit/residence/ConfigManager.java | 102 +- src/com/bekvon/bukkit/residence/Locale.java | 9 +- .../bukkit/residence/PlayerManager.java | 33 +- .../residence/ResidenceCommandListener.java | 123 +- .../bukkit/residence/Signs/SignUtil.java | 4 +- .../residence/containers/ResPlayer.java | 66 +- .../residence/economy/TransactionManager.java | 12 +- .../residence/economy/rent/RentManager.java | 23 +- .../bekvon/bukkit/residence/gui/SetFlag.java | 4 +- .../residence/itemlist/ResidenceItemList.java | 43 +- .../listeners/ResidenceEntityListener.java | 1124 ++++++++--------- .../listeners/ResidencePlayerListener.java | 18 +- .../permissions/PermissionGroup.java | 36 +- .../residence/persistance/YMLSaveHelper.java | 61 +- .../protection/ClaimedResidence.java | 12 +- .../residence/protection/LeaseManager.java | 3 +- .../protection/ResidenceManager.java | 16 +- .../protection/ResidencePermissions.java | 8 +- .../residence/selection/AutoSelection.java | 114 ++ .../bukkit/residence/text/Language.java | 2 +- .../bukkit/residence/text/help/HelpEntry.java | 4 +- .../residence/text/help/InformationPager.java | 3 +- .../vaultinterface/ResidenceVaultAdapter.java | 2 +- src/plugin.yml | 2 +- 24 files changed, 988 insertions(+), 836 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/selection/AutoSelection.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 7f158ae9c..25f2c0f2e 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -75,10 +75,14 @@ public class ConfigManager { protected boolean ActionBarOnSelection; protected boolean visualizer; protected int minMoveUpdate; + protected int MaxResCount; + protected int MaxRentCount; + protected int MaxSubzonesCount; protected FlagPermissions globalCreatorDefaults; protected FlagPermissions globalResidenceDefaults; protected Map globalGroupDefaults; protected String language; + protected String DefaultWorld; protected boolean preventBuildInRent; protected boolean stopOnSaveError; protected boolean legacyperms; @@ -199,27 +203,31 @@ void UpdateConfigFile() { conf.options().copyDefaults(true); String defaultWorldName = Bukkit.getServer().getWorlds().size() > 0 ? Bukkit.getServer().getWorlds().get(0).getName() : "World"; - + writer.addComment("Global", "These are Global Settings for Residence."); - writer.addComment("Global.Language", "This loads the .yml file in the Residence Language folder", - "All Residence text comes from this file. (NOT DONE YET)"); + writer.addComment("Global.Language", "This loads the .yml file in the Residence Language folder", "All Residence text comes from this file. (NOT DONE YET)"); language = GetConfigString("Global.Language", "English", writer, conf, false); - writer.addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", - "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); + writer.addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); selectionToolId = GetConfigInt("Global.SelectionToolId", Material.WOOD_AXE.getId(), writer, conf); - writer.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", - "Simply equip this tool and hit a location inside the residence and it will display the info for it."); + writer.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", "Simply equip this tool and hit a location inside the residence and it will display the info for it."); infoToolId = GetConfigInt("Global.InfoToolId", Material.STRING.getId(), writer, conf); - writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", - "Reducing this will increase the load on the server.", - "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); + writer.addComment("Global.Optimizations.DefaultWorld", "Name of your mein residence world. Usualy normal starting world 'World'. Capitalization essential"); + DefaultWorld = GetConfigString("Global.Optimizations.DefaultWorld", defaultWorldName, writer, conf, false); + + writer.addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using","In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); + MaxResCount = GetConfigInt("Global.Optimizations.MaxResCount", 30, writer, conf); + writer.addComment("Global.Optimizations.MaxRentCount", "Set this as low as posible depending of residence.max.rents.[number] permission you are using","In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); + MaxRentCount = GetConfigInt("Global.Optimizations.MaxRentCount", 10, writer, conf); + writer.addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using","In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); + MaxSubzonesCount = GetConfigInt("Global.Optimizations.MaxSubzoneCount", 5, writer, conf); + + writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); minMoveUpdate = GetConfigInt("Global.MoveCheckInterval", 500, writer, conf); - writer.addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", - "Use 0 to disable"); + writer.addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); TeleportDelay = GetConfigInt("Global.Tp.TeleportDelay", 3, writer, conf); writer.addComment("Global.Size.MinimalSize", "Minimal size of residence in blocks", "1000 is 10x10x10 residence size"); @@ -231,8 +239,7 @@ void UpdateConfigFile() { writer.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); autoSaveInt = GetConfigInt("Global.SaveInterval", 10, writer, conf); - writer.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", - "Players can bypass this wih residence.cleanbypass permission node"); + writer.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", "Players can bypass this wih residence.cleanbypass permission node"); AutoCleanUp = GetConfigBoolean("Global.AutoCleanUp.Use", false, writer, conf); writer.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); AutoCleanUpDays = GetConfigInt("Global.AutoCleanUp.Days", 60, writer, conf); @@ -264,9 +271,7 @@ void UpdateConfigFile() { BlockFallLevel = GetConfigInt("Global.AntiGreef.BlockFall.Level", 62, writer, conf); BlockFallWorlds = GetConfigArray("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); - writer.addComment("Global.AntiGreef.ResCleaning.Use", - "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", - "Effective way to prevent residence creating near greefing target and then remove it"); + writer.addComment("Global.AntiGreef.ResCleaning.Use", "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", "Effective way to prevent residence creating near greefing target and then remove it"); UseClean = GetConfigBoolean("Global.AntiGreef.ResCleaning.Use", true, writer, conf); writer.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); CleanLevel = GetConfigInt("Global.AntiGreef.ResCleaning.Level", 63, writer, conf); @@ -286,19 +291,16 @@ void UpdateConfigFile() { writer.addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); leaseCheckInterval = GetConfigInt("Global.LeaseCheckInterval", 10, writer, conf); - writer.addComment("Global.LeaseAutoRenew", - "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); + writer.addComment("Global.LeaseAutoRenew", "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); leaseAutoRenew = GetConfigBoolean("Global.LeaseAutoRenew", true, writer, conf); - writer.addComment("Global.EnablePermissions", - "Whether or not to use the Permissions system in conjunction with this config."); + writer.addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); GetConfigBoolean("Global.EnablePermissions", true, writer, conf); writer.addComment("Global.LegacyPermissions", "Set to true if NOT using Permissions or PermissionsBukkit, or using a really old version of Permissions"); legacyperms = GetConfigBoolean("Global.LegacyPermissions", false, writer, conf); - writer.addComment("Global.EnableEconomy", - "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); + writer.addComment("Global.EnableEconomy", "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); enableEconomy = GetConfigBoolean("Global.EnableEconomy", true, writer, conf); writer.addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); @@ -321,20 +323,16 @@ void UpdateConfigFile() { chatColor = ChatColor.DARK_PURPLE; } - writer.addComment("Global.AdminOnlyCommands", - "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); + writer.addComment("Global.AdminOnlyCommands", "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); adminsOnly = GetConfigBoolean("Global.AdminOnlyCommands", false, writer, conf); writer.addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); adminOps = GetConfigBoolean("Global.AdminOPs", true, writer, conf); - writer.addComment("Global.AdminFullAccess", - "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); + writer.addComment("Global.AdminFullAccess", "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); AdminFullAccess = GetConfigBoolean("Global.AdminFullAccess", false, writer, conf); - writer.addComment("Global.MultiWorldPlugin", - "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", - "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); + writer.addComment("Global.MultiWorldPlugin", "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); multiworldPlugin = GetConfigString("Global.MultiWorldPlugin", "Multiverse-Core", writer, conf, false); writer.addComment("Global.ResidenceFlagsInherit", "Setting this to true causes subzones to inherit flags from their parent zones."); @@ -346,28 +344,23 @@ void UpdateConfigFile() { writer.addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); stopOnSaveError = GetConfigBoolean("Global.StopOnSaveFault", true, writer, conf); - writer.addComment( - "This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); + writer.addComment("This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); namefix = GetConfigString("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]", writer, conf, false); - writer.addComment("Global.ShowIntervalMessages", - "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); + writer.addComment("Global.ShowIntervalMessages", "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); showIntervalMessages = GetConfigBoolean("Global.ShowIntervalMessages", false, writer, conf); - writer.addComment("Global.ShowNoobMessage", - "Setting this to true sends a tutorial message to the new player when he places chest on ground."); + writer.addComment("Global.ShowNoobMessage", "Setting this to true sends a tutorial message to the new player when he places chest on ground."); ShowNoobMessage = GetConfigBoolean("Global.ShowNoobMessage", true, writer, conf); - writer.addComment("Global.CustomContainers", - "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); + writer.addComment("Global.CustomContainers", "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); customContainers = GetConfigIntArray("Global.CustomContainers", new ArrayList(), writer, conf); customBothClick = GetConfigIntArray("Global.CustomBothClick", new ArrayList(), writer, conf); customRightClick = GetConfigIntArray("Global.CustomRightClick", new ArrayList(), writer, conf); writer.addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundries"); useVisualizer = GetConfigBoolean("Global.Visualizer.Use", true, writer, conf); - writer.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", - "Keep it no more as 30, as player cant see more than 16 blocks"); + writer.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", "Keep it no more as 30, as player cant see more than 16 blocks"); VisualizerRange = GetConfigInt("Global.Visualizer.Range", 25, writer, conf); writer.addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); VisualizerShowFor = GetConfigInt("Global.Visualizer.ShowFor", 5000, writer, conf); @@ -381,11 +374,7 @@ void UpdateConfigFile() { VisualizerCollumnSpacing = GetConfigInt("Global.Visualizer.CollumnSpacing", 2, writer, conf); if (VisualizerCollumnSpacing < 1) VisualizerCollumnSpacing = 1; - writer.addComment("Global.Visualizer.Selected", - "Particle effect names. Posible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", - " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", - " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", - " droplet, take, mobappearance"); + writer.addComment("Global.Visualizer.Selected", "Particle effect names. Posible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance"); SelectedFrame = ParticleEffects.fromName(GetConfigString("Global.Visualizer.Selected.Frame", "happyVillager", writer, conf, false)); if (SelectedFrame == null) { @@ -439,12 +428,9 @@ void UpdateConfigFile() { Mat = Material.STONE; GuiRemove = new ItemStack(Mat, 1, (short) data); - writer.addComment("Global.AutoMobRemoval", - "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", - "This is quite heavy on server side, so enable only if you really need this feature"); + writer.addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", "This is quite heavy on server side, so enable only if you really need this feature"); AutoMobRemoval = GetConfigBoolean("Global.AutoMobRemoval.Use", false, writer, conf); - writer.addComment("Global.AutoMobRemoval.Interval", - "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); + writer.addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); AutoMobRemovalInterval = GetConfigInt("Global.AutoMobRemoval.Interval", 3, writer, conf); enforceAreaInsideArea = GetConfigBoolean("Global.EnforceAreaInsideArea", false, writer, conf); @@ -678,6 +664,18 @@ public int getMinMoveUpdateInterval() { return minMoveUpdate; } + public int getMaxResCount() { + return MaxResCount; + } + + public int getMaxRentCount() { + return MaxRentCount; + } + + public int getMaxSubzonesCount() { + return MaxSubzonesCount; + } + public FlagPermissions getGlobalCreatorDefaultFlags() { return globalCreatorDefaults; } @@ -694,6 +692,10 @@ public String getLanguage() { return language; } + public String getDefaultWorld() { + return DefaultWorld; + } + public boolean preventRentModify() { return preventBuildInRent; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 2f50e711e..24f5d7776 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -71,10 +71,6 @@ public static void LoadLang(String lang) { writer.addComment("Language.NewPlayerInfo", "The below lines represent various messages residence sends to the players.", "Note that some messages have variables such as %1 that are inserted at runtime."); - GetConfigArray("Language.NewPlayerInfo", Arrays.asList("&e******************************************************", - "Please use wooden axe to select opposite sides of your home and execute command &2/res create yourHouseName", - "&e******************************************************"), writer, conf, true); - GetConfigString("Language.NewPlayerInfo", "&ePlease use wooden axe to select opposite sides of your home and execute command &2/res create your name", writer, conf, true); GetConfigString("Language.InvalidResidence", "Invalid Residence...", writer, conf, true); @@ -367,6 +363,8 @@ public static void LoadLang(String lang) { GetConfigString("Language.InformationPage.Page", "&e-----< %1 >-----", writer, conf, true); GetConfigString("Language.InformationPage.NextPage", "&e-----< %1 >-----", writer, conf, true); GetConfigString("Language.InformationPage.NoNextPage", "&e-----------------------", writer, conf, true); + GetConfigString("Language.AutoSelection.Enabled", "&eAuto selection mode turned ON. To disable it write /res select auto", writer, conf, true); + GetConfigString("Language.AutoSelection.Disabled", "&eAuto selection mode turned OFF. To enable it again write /res select auto", writer, conf, true); writer.addComment("CommandHelp", ""); @@ -385,6 +383,9 @@ public static void LoadLang(String lang) { GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Description", "Display selected size", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Info", Arrays.asList("Usage: /res select size"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Description", "Turns on auto selection tool", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Info", Arrays.asList("Usage: /res select auto [playername]"), writer, conf, true); GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Description", "Display selection cost", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Info", Arrays.asList("Usage: /res select cost"), writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/PlayerManager.java b/src/com/bekvon/bukkit/residence/PlayerManager.java index 6ba9f5c23..f45a961c5 100644 --- a/src/com/bekvon/bukkit/residence/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/PlayerManager.java @@ -31,16 +31,16 @@ public static void playerJoin(OfflinePlayer player) { } } - public static void playerJoin(String player, UUID uuid) { - synchronized (players) { - ResPlayer resPlayer = players.get(player.toLowerCase()); - if (resPlayer == null) { - resPlayer = new ResPlayer(player); - resPlayer.recountRes(); - players.put(player.toLowerCase(), resPlayer); - } - return; + public static void playerJoin(String player) { + + ResPlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer == null) { + resPlayer = new ResPlayer(player); + resPlayer.recountRes(); + players.put(player.toLowerCase(), resPlayer); } + return; + } public static void fillList() { @@ -59,7 +59,7 @@ public void run() { public static ArrayList getResidenceList(String player) { synchronized (players) { ArrayList temp = new ArrayList(); - playerJoin(player, null); + playerJoin(player); ResPlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer != null) { for (Entry one : resPlayer.getResList().entrySet()) { @@ -74,19 +74,18 @@ public static ArrayList getResidenceList(String player) { public static ArrayList getResidenceListString(String player) { synchronized (players) { ArrayList temp = new ArrayList(); - playerJoin(player, null); + playerJoin(player); ResPlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer != null) { for (Entry one : resPlayer.getResList().entrySet()) { - temp.add(Residence.getLanguage().getPhrase("ResidenceList", "." + one.getKey() + "." + Residence.getLanguage().getPhrase("World") + "." + one - .getValue())); + temp.add(Residence.getLanguage().getPhrase("ResidenceList", "|" + one.getKey() + "|" + Residence.getLanguage().getPhrase("World") + "|" + one.getValue())); } return temp; } return temp; } } - + public static PermissionGroup getGroup(String player) { ResPlayer resPlayer = getResPlayer(player); if (resPlayer != null) { @@ -94,7 +93,7 @@ public static PermissionGroup getGroup(String player) { } return null; } - + public static int getMaxResidences(String player) { ResPlayer resPlayer = getResPlayer(player); if (resPlayer != null) { @@ -121,6 +120,10 @@ public static int getMaxRents(String player) { public static ResPlayer getResPlayer(String player) { ResPlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer == null) { + playerJoin(player); + resPlayer = players.get(player.toLowerCase()); + } return resPlayer; } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index d6f756ef3..b29c2b72a 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -13,6 +13,7 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; @@ -28,6 +29,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.selection.WorldGuardUtil; import com.bekvon.bukkit.residence.spout.ResidenceSpout; import com.sk89q.worldedit.bukkit.WorldEditPlugin; @@ -188,8 +190,7 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com } if (cmd.equals("version")) { sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + this - .getDescription().getVersion()); + sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + this.getDescription().getVersion()); sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); sender.sendMessage(ChatColor.GREEN + "Maintained by: " + ChatColor.YELLOW + "Zrips"); @@ -218,11 +219,9 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com if (area != null) { area.getPermissions().setOwner(args[2], true); if (area.getParent() == null) { - sender.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "." - + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); + sender.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "|" + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); } else { - sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange", ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split( - "\\.").length - 1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); + sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange", ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split("\\.").length - 1] + " " + ChatColor.GREEN + "|" + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); } } else { sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); @@ -302,8 +301,25 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com return false; } if (cmd.equals("limits")) { - if (args.length == 1) { - gmanager.getGroup(player).printLimits(player); + if (args.length == 1 || args.length == 2) { + final String[] tempArgs = args; + final Player p = player; + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + OfflinePlayer target; + boolean rsadm = false; + if (tempArgs.length == 1) { + target = p; + rsadm = true; + } else + target = Bukkit.getOfflinePlayer(tempArgs[1]); + if (target == null) + return; + gmanager.getGroup(target.getName(), Residence.getConfigManager().getDefaultWorld()).printLimits(p, target, rsadm); + return; + } + }); return true; } return false; @@ -334,12 +350,9 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com return true; } if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { - player.sendMessage(language.getPhrase("FlagCheckFalse", ChatColor.YELLOW + args[2] + ChatColor.RED + "." + ChatColor.YELLOW + pname + ChatColor.RED - + "." + ChatColor.YELLOW + args[1] + ChatColor.RED)); + player.sendMessage(language.getPhrase("FlagCheckFalse", ChatColor.YELLOW + args[2] + ChatColor.RED + "|" + ChatColor.YELLOW + pname + ChatColor.RED + "|" + ChatColor.YELLOW + args[1] + ChatColor.RED)); } else { - player.sendMessage(language.getPhrase("FlagCheckTrue", ChatColor.GREEN + args[2] + ChatColor.YELLOW + "." + ChatColor.GREEN + pname + ChatColor.YELLOW - + "." + ChatColor.YELLOW + args[1] + ChatColor.RED + "." + (res.getPermissions().playerHas(pname, res.getPermissions().getWorld(), args[2], false) - ? ChatColor.GREEN + "TRUE" : ChatColor.RED + "FALSE"))); + player.sendMessage(language.getPhrase("FlagCheckTrue", ChatColor.GREEN + args[2] + ChatColor.YELLOW + "|" + ChatColor.GREEN + pname + ChatColor.YELLOW + "|" + ChatColor.YELLOW + args[1] + ChatColor.RED + "|" + (res.getPermissions().playerHas(pname, res.getPermissions().getWorld(), args[2], false) ? ChatColor.GREEN + "TRUE" : ChatColor.RED + "FALSE"))); } return true; } @@ -510,8 +523,7 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com return false; } try { - player.sendMessage(ChatColor.GREEN + language.getPhrase("MaterialGet", ChatColor.GOLD + args[1] + ChatColor.GREEN + "." + ChatColor.RED + Material - .getMaterial(Integer.parseInt(args[1])).name() + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + language.getPhrase("MaterialGet", ChatColor.GOLD + args[1] + ChatColor.GREEN + "|" + ChatColor.RED + Material.getMaterial(Integer.parseInt(args[1])).name() + ChatColor.GREEN)); } catch (Exception ex) { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); } @@ -579,8 +591,7 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com return true; } res.getPermissions().setOwner("Server_Land", false); - player.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "." + ChatColor.YELLOW - + "Server_Land" + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "|" + ChatColor.YELLOW + "Server_Land" + ChatColor.GREEN)); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); @@ -650,8 +661,7 @@ private boolean commandResExpand(String[] args, boolean resadmin, Player player, if (area != null) { smanager.placeLoc1(player, area.getHighLoc()); smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName - + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + resName + ChatColor.GREEN)); } else { player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); } @@ -674,9 +684,7 @@ private boolean commandResExpand(String[] args, boolean resadmin, Player player, smanager.worldEdit(player); } } - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( - player.getName())), areaName, - resadmin); + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName())), areaName, resadmin); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); @@ -700,8 +708,7 @@ private boolean commandResContract(String[] args, boolean resadmin, Player playe if (area != null) { smanager.placeLoc1(player, area.getHighLoc()); smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName - + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + resName + ChatColor.GREEN)); } else { player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); } @@ -725,10 +732,8 @@ private boolean commandResContract(String[] args, boolean resadmin, Player playe smanager.worldEdit(player); } } - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( - player.getName())), areaName, resadmin); - Residence.getSelectionManager().MakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() - .getPlayerLoc2(player.getName()), false); + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName())), areaName, resadmin); + Residence.getSelectionManager().MakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), false); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); @@ -746,8 +751,7 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); return true; } - if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player - .isPermissionSet("residence.select")) && !resadmin) { + if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player.isPermissionSet("residence.select")) && !resadmin) { player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); return true; } @@ -782,13 +786,11 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, } else if (args[1].equals("coords")) { Location playerLoc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); if (playerLoc1 != null) { - player.sendMessage(ChatColor.GREEN + language.getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + ", " - + playerLoc1.getBlockY() + ", " + playerLoc1.getBlockZ() + ")"); + player.sendMessage(ChatColor.GREEN + language.getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + ", " + playerLoc1.getBlockY() + ", " + playerLoc1.getBlockZ() + ")"); } Location playerLoc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); if (playerLoc2 != null) { - player.sendMessage(ChatColor.GREEN + language.getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + ", " - + playerLoc2.getBlockY() + ", " + playerLoc2.getBlockZ() + ")"); + player.sendMessage(ChatColor.GREEN + language.getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + ", " + playerLoc2.getBlockY() + ", " + playerLoc2.getBlockZ() + ")"); } return true; } else if (args[1].equals("chunk")) { @@ -823,6 +825,22 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, return true; } } + if ((args.length == 2 || args.length == 3) && args[1].equals("auto")) { + Player target = player; + if (args.length == 3) { + if (!player.hasPermission("residence.select.auto.others")) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + target = Bukkit.getPlayer(args[2]); + if (target == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("NotOnline")); + return true; + } + } + AutoSelection.switchAutoSelection(target); + return true; + } if (args.length > 1 && args[1].equals("residence")) { String resName; String areaName; @@ -848,8 +866,7 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, if (area != null) { smanager.placeLoc1(player, area.getHighLoc()); smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "." + ChatColor.GOLD + resName - + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + resName + ChatColor.GREEN)); } else { player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); } @@ -877,22 +894,18 @@ private boolean commandResCreate(String[] args, boolean resadmin, Player player, } if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) == null) { - rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2( - player.getName()), resadmin); + rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName()), resadmin); return true; } else if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) != null) { ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); - player.sendMessage(ChatColor.RED + language.getPhrase("SelectOverlap").replace("%1", Region.getId())); + player.sendMessage(ChatColor.RED + language.getPhrase("SelectOverlap", String.valueOf(Region.getId()))); - Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), - Region.getMinimumPoint().getBlockX(), Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); + Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); - Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), - Region.getMaximumPoint().getBlockX(), Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); + Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); Residence.getSelectionManager().NewMakeBorders(player, lowLoc, highLoc, true); - Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() - .getPlayerLoc2(player.getName()), false); + Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), false); } else if (Residence.wg == null) { rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName()), resadmin); return true; @@ -932,8 +945,7 @@ private boolean commandResSubzone(String[] args, boolean resadmin, Player player player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; } - res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), - zname, resadmin); + res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), zname, resadmin); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); @@ -961,9 +973,7 @@ private boolean commandResArea(String[] args, boolean resadmin, Player player, i if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { ClaimedResidence res = rmanager.getByName(args[2]); if (res != null) { - res.addArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( - player.getName())), args[3], - resadmin); + res.addArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName())), args[3], resadmin); } else { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); } @@ -981,9 +991,7 @@ private boolean commandResArea(String[] args, boolean resadmin, Player player, i if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { ClaimedResidence res = rmanager.getByName(args[2]); if (res != null) { - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() - .getPlayerLoc2(player.getName())), - args[3], resadmin); + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName())), args[3], resadmin); } else { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); } @@ -1345,8 +1353,7 @@ private boolean commandResLease(String[] args, boolean resadmin, Player player, ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res == null || leasemanager.leaseExpires(args[2])) { int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] + ChatColor.YELLOW + "." + ChatColor.RED - + cost + ChatColor.YELLOW)); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] + ChatColor.YELLOW + "|" + ChatColor.RED + cost + ChatColor.YELLOW)); } else { player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); } @@ -1360,8 +1367,7 @@ private boolean commandResLease(String[] args, boolean resadmin, Player player, } if (leasemanager.leaseExpires(area)) { int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + area + ChatColor.YELLOW + "." + ChatColor.RED + cost - + ChatColor.YELLOW)); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + area + ChatColor.YELLOW + "|" + ChatColor.RED + cost + ChatColor.YELLOW)); } else { player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); } @@ -1672,8 +1678,7 @@ private boolean commandResCompass(String[] args, boolean resadmin, Player player if (rmanager.getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { Location low = rmanager.getByName(args[1]).getArea("main").getLowLoc(); Location high = rmanager.getByName(args[1]).getArea("main").getHighLoc(); - Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high - .getBlockZ()) / 2); + Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); player.setCompassTarget(mid); player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetSet", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); } diff --git a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java b/src/com/bekvon/bukkit/residence/Signs/SignUtil.java index 6fa816aaa..7dc4a900a 100644 --- a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/Signs/SignUtil.java @@ -174,8 +174,8 @@ public static boolean SignUpdate(Signs Sign) { String TopLine = rented ? endDate : Residence.getLanguage().getPhrase("SignForRentTopLine"); sign.setLine(0, TopLine); - String infoLine = Residence.getLanguage().getPhrase("SignForRentPriceLine", Residence.getRentManager().getCostOfRent(landName) + "." + Residence - .getRentManager().getRentDays(landName) + "." + Residence.getRentManager().getRentableRepeatable(landName)); + String infoLine = Residence.getLanguage().getPhrase("SignForRentPriceLine", Residence.getRentManager().getCostOfRent(landName) + "|" + Residence + .getRentManager().getRentDays(landName) + "|" + Residence.getRentManager().getRentableRepeatable(landName)); sign.setLine(1, infoLine); diff --git a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java index 0dfb48669..8ea9a0343 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java @@ -4,17 +4,21 @@ import java.util.Map; import java.util.Map.Entry; import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; +import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResPlayer { private String userName = null; -// private UUID uuid = null; private Player player = null; + private OfflinePlayer ofPlayer = null; + private Map ResidenceList = new HashMap(); private int currentRes = -1; @@ -24,50 +28,68 @@ public class ResPlayer { private int maxRents = -1; private int maxSubzones = -1; -// private int maxEastWest = -1; -// private int MaxNorthSouth = -1; - public ResPlayer(String userName) { this.userName = userName; -// this.uuid = uuid; RecalculatePermissions(); } public void RecalculatePermissions() { this.player = Bukkit.getPlayerExact(userName); - if (this.player != null) { - recountMaxRes(); - recountMaxRents(); - recountMaxSubzones(); - recountGroup(); - } + + if (this.player == null) + ofPlayer = Bukkit.getOfflinePlayer(userName); + + recountMaxRes(); + recountMaxRents(); + recountMaxSubzones(); + recountGroup(); } public void recountMaxRes() { - for (int i = 1; i <= 250; i++) { - if (this.player.isPermissionSet("residence.max.res." + i)) - this.maxRes = i; + for (int i = 1; i <= Residence.getConfigManager().getMaxResCount(); i++) { + if (player != null) { + if (this.player.isPermissionSet("residence.max.res." + i)) + this.maxRes = i; + } else { + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res." + i, Residence.getConfigManager().getDefaultWorld())) + this.maxRes = i; + } } } public void recountMaxRents() { - for (int i = 1; i <= 250; i++) { - if (this.player.isPermissionSet("residence.max.rents." + i)) - this.maxRents = i; + for (int i = 1; i <= Residence.getConfigManager().getMaxRentCount(); i++) { + if (player != null) { + if (this.player.isPermissionSet("residence.max.rents." + i)) + this.maxRents = i; + } else { + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.rents." + i, Residence.getConfigManager().getDefaultWorld())) + this.maxRents = i; + } } } public void recountMaxSubzones() { - for (int i = 1; i <= 250; i++) { - if (this.player.isPermissionSet("residence.max.subzones." + i)) - this.maxSubzones = i; + for (int i = 1; i <= Residence.getConfigManager().getMaxSubzonesCount(); i++) { + if (player != null) { + if (this.player.isPermissionSet("residence.max.subzones." + i)) + this.maxSubzones = i; + } else { + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzones." + i, Residence.getConfigManager().getDefaultWorld())) + this.maxSubzones = i; + } } } public void recountGroup() { for (Entry one : Residence.getPermissionManager().getGroups().entrySet()) { - if (this.player.isPermissionSet("residence.group." + one.getKey())) - this.group = one.getValue(); + if (player != null) { + if (this.player.isPermissionSet("residence.group." + one.getKey())) + this.group = one.getValue(); + } else { + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.group." + one.getKey(), Residence.getConfigManager().getDefaultWorld())) + this.group = one.getValue(); + } } } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index fa27f7a88..67b64494a 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -43,7 +43,7 @@ public static boolean chargeEconomyMoney(Player player, int amount) { return false; } econ.subtract(player.getName(), amount); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "|" + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); return true; } @@ -60,7 +60,7 @@ public static boolean giveEconomyMoney(Player player, int amount) { } econ.add(player.getName(), amount); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyAdded", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "." + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyAdded", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "|" + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); return true; } @@ -111,7 +111,7 @@ public void putForSale(String areaname, Player player, int amount, boolean resad SignUtil.CheckSign(area); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForSale", ChatColor.YELLOW + areaname + ChatColor.GREEN + "." + ChatColor.YELLOW + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForSale", ChatColor.YELLOW + areaname + ChatColor.GREEN + "|" + ChatColor.YELLOW + amount + ChatColor.GREEN)); } @@ -196,14 +196,14 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { SignUtil.CheckSign(res); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN - + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); + + "|" + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBought", ChatColor.GREEN + areaname + ChatColor.YELLOW)); Player seller = serv.getPlayer(sellerName); if (seller != null && seller.isOnline()) { - seller.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBuy", ChatColor.YELLOW + player.getName() + ChatColor.GREEN + "." + seller.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBuy", ChatColor.YELLOW + player.getName() + ChatColor.GREEN + "|" + ChatColor.YELLOW + areaname + ChatColor.GREEN)); seller.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCredit", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN - + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); + + "|" + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); } } else { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index acf52d054..5fef4b7b4 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -46,7 +46,7 @@ public List getRentedLands(String playername) { List rentedLands = new ArrayList(); for (Entry oneland : rentedLand.entrySet()) { if (oneland.getValue().player.equalsIgnoreCase(playername)) { - rentedLands.add(Residence.getLanguage().getPhrase("ResidenceList", "." + oneland.getKey() + "." + Residence.getLanguage().getPhrase("World") + "." + rentedLands.add(Residence.getLanguage().getPhrase("ResidenceList", "|" + oneland.getKey() + "|" + Residence.getLanguage().getPhrase("World") + "|" + Residence.getResidenceManager().getByName(oneland.getKey()).getWorld()) + Residence.getLanguage().getPhrase("Rented")); } } @@ -91,7 +91,7 @@ public void setForRent(Player player, String landName, int amount, int days, boo String[] split = landName.split("\\."); if (split.length != 0) player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForRentSuccess", ChatColor.YELLOW + split[split.length - 1] - + ChatColor.GREEN + "." + ChatColor.YELLOW + amount + ChatColor.GREEN + "." + ChatColor.YELLOW + days + ChatColor.GREEN)); + + ChatColor.GREEN + "|" + ChatColor.YELLOW + amount + ChatColor.GREEN + "|" + ChatColor.YELLOW + days + ChatColor.GREEN)); } else { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRent")); } @@ -125,7 +125,7 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi if (this.isRented(landName)) { String[] split = landName.split("\\."); if (split.length != 0) - player.sendMessage(Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED + "." + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED + "|" + ChatColor.YELLOW + this.getRentingPlayer(landName))); return; } @@ -148,10 +148,8 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); - String[] split = landName.split("\\."); - if (split.length != 0) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRentSuccess", ChatColor.YELLOW + split[split.length - 1] - + ChatColor.GREEN + "." + ChatColor.YELLOW + land.days + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRentSuccess", ChatColor.YELLOW + landName + + ChatColor.GREEN + "|" + ChatColor.YELLOW + land.days + ChatColor.GREEN)); } else { player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); } @@ -196,7 +194,6 @@ private int msToDays(long ms) { } public void unrent(Player player, String landName, boolean resadmin) { - String[] split = landName.split("\\."); ClaimedResidence res = Residence.getResidenceManager().getByName(landName); if (res == null) { player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("InvalidResidence")); @@ -207,9 +204,8 @@ public void unrent(Player player, String landName, boolean resadmin) { return; } if (rentedLand.containsKey(landName) && !resadmin) { - if (split.length != 0) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED - + "." + ChatColor.YELLOW + rentedLand.get(landName).player) + ChatColor.YELLOW); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + landName + ChatColor.RED + + "|" + ChatColor.YELLOW + rentedLand.get(landName).player) + ChatColor.YELLOW); return; } if (rentableLand.containsKey(landName)) { @@ -225,9 +221,8 @@ public void unrent(Player player, String landName, boolean resadmin) { SignUtil.CheckSign(res); } } - if (split.length != 0) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceRemoveRentable", ChatColor.YELLOW + split[split.length - 1] - + ChatColor.RED)); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceRemoveRentable", ChatColor.YELLOW + landName + + ChatColor.RED)); } else { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index ce808edec..97903f479 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -70,10 +70,12 @@ public void toggleFlag(int slot, ClickType click, InventoryAction action) { String command = "true"; if (click.isLeftClick() && action != InventoryAction.MOVE_TO_OTHER_INVENTORY) command = "true"; - else if (click.isRightClick()) + else if (click.isRightClick() && action != InventoryAction.MOVE_TO_OTHER_INVENTORY) command = "false"; else if (click.isLeftClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTORY) command = "remove"; + else if (click.isRightClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTORY) + return; String flag = ""; int i = 0; diff --git a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java index eae10e81a..e3c76f53a 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java @@ -4,6 +4,7 @@ */ package com.bekvon.bukkit.residence.itemlist; + import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; @@ -20,36 +21,30 @@ public class ResidenceItemList extends ItemList { ClaimedResidence res; - public ResidenceItemList(ClaimedResidence parent, ListType type) - { - super(type); - res = parent; + public ResidenceItemList(ClaimedResidence parent, ListType type) { + super(type); + res = parent; } - private ResidenceItemList() - { - + private ResidenceItemList() { + } public void playerListChange(Player player, Material mat, boolean resadmin) { - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if(resadmin || (res.getPermissions().hasResidencePermission(player, true) && group.itemListAccess())) - { - if(super.toggle(mat)) - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ListMaterialAdd",ChatColor.GREEN + mat.toString() + ChatColor.YELLOW+"."+ChatColor.GREEN + type.toString().toLowerCase() + ChatColor.YELLOW)); - else - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ListMaterialRemove",ChatColor.GREEN + mat.toString() + ChatColor.YELLOW+"."+ChatColor.GREEN + type.toString().toLowerCase() + ChatColor.YELLOW)); - } - else - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoPermission")); - } + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (resadmin || (res.getPermissions().hasResidencePermission(player, true) && group.itemListAccess())) { + if (super.toggle(mat)) + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ListMaterialAdd", ChatColor.GREEN + mat.toString() + ChatColor.YELLOW + "|" + ChatColor.GREEN + type.toString().toLowerCase() + ChatColor.YELLOW)); + else + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ListMaterialRemove", ChatColor.GREEN + mat.toString() + ChatColor.YELLOW + "|" + ChatColor.GREEN + type.toString().toLowerCase() + ChatColor.YELLOW)); + } else { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } } - public static ResidenceItemList load(ClaimedResidence parent, Map map) - { - ResidenceItemList newlist = new ResidenceItemList(); - newlist.res = parent; - return (ResidenceItemList) ItemList.load(map, newlist); + public static ResidenceItemList load(ClaimedResidence parent, Map map) { + ResidenceItemList newlist = new ResidenceItemList(); + newlist.res = parent; + return (ResidenceItemList) ItemList.load(map, newlist); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index f5dff5e33..de714e50c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1,562 +1,562 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - -package com.bekvon.bukkit.residence.listeners; - -import org.bukkit.ChatColor; -import org.bukkit.Location; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.event.entity.EntityChangeBlockEvent; -import org.bukkit.event.entity.EntityCombustEvent; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.event.entity.EntityInteractEvent; -import org.bukkit.event.entity.PotionSplashEvent; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -import org.bukkit.Material; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Creeper; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Monster; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; -import org.bukkit.entity.Projectile; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Tameable; -import org.bukkit.entity.Vehicle; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.entity.Slime; -import org.bukkit.entity.Ghast; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.ExplosionPrimeEvent; -import org.bukkit.event.entity.PlayerLeashEntityEvent; -import org.bukkit.event.hanging.HangingBreakByEntityEvent; -import org.bukkit.event.hanging.HangingBreakEvent; -import org.bukkit.event.hanging.HangingPlaceEvent; -import org.bukkit.event.vehicle.VehicleDestroyEvent; - -/** - * - * @author Administrator - */ -public class ResidenceEntityListener implements Listener { - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEndermanChangeBlock(EntityChangeBlockEvent event) { - if (event.getEntityType() != EntityType.ENDERMAN) - return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("build", true)) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onWitherChangeBlock(EntityChangeBlockEvent event) { - if (event.getEntityType() != EntityType.WITHER) - return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - FlagPermissions world = Residence.getWorldFlags().getPerms(event.getBlock().getWorld().getName()); - if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onEntityInteract(EntityInteractEvent event) { - Block block = event.getBlock(); - Material mat = block.getType(); - Entity entity = event.getEntity(); - FlagPermissions perms = Residence.getPermsByLoc(block.getLocation()); - boolean hastrample = perms.has("trample", perms.has("hasbuild", true)); - if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { - event.setCancelled(true); - } - } - - public static boolean isMonster(Entity ent) { - return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast); - } - - private boolean isTamed(Entity ent) { - return (ent instanceof Tameable ? ((Tameable) ent).isTamed() : false); - } - - public static boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager - || ent instanceof Rabbit); - } - - @EventHandler(priority = EventPriority.LOWEST) - public void AnimalKilling(EntityDamageByEntityEvent event) { - - Entity entity = event.getEntity(); - if (!isAnimal(entity)) - return; - - Entity damager = event.getDamager(); - - if (!(damager instanceof Arrow) && !(damager instanceof Player)) - return; - - if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) - return; - - Player cause = null; - - if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Arrow) damager).getShooter(); - } - - if (cause == null) - return; - - if (Residence.isResAdminOn(cause)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); - - if (res == null) - return; - - if (!res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { - cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "AnimalKilling." + res.getName())); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void AnimalKilling(VehicleDestroyEvent event) { - - Vehicle vehicle = event.getVehicle(); - - Entity damager = event.getAttacker(); - - if (damager instanceof Projectile && !(((Projectile) damager).getShooter() instanceof Player) || !(damager instanceof Player)) { - FlagPermissions perms = Residence.getPermsByLoc(vehicle.getLocation()); - if (!perms.has("vehicledestroy", true)) { - event.setCancelled(true); - return; - } - } - - Player cause = null; - - if (damager instanceof Player) { - cause = (Player) damager; - } else if (damager instanceof Projectile) { - cause = (Player) ((Projectile) damager).getShooter(); - } - - if (cause == null) - return; - - if (Residence.isResAdminOn(cause)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(vehicle.getLocation()); - - if (res == null) - return; - - if (!res.getPermissions().playerHas(cause.getName(), "vehicledestroy", true)) { - cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "vehicledestroy." + res.getName())); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void MonsterKilling(EntityDamageByEntityEvent event) { - - Entity entity = event.getEntity(); - if (!isMonster(entity)) - return; - - Entity damager = event.getDamager(); - - if (!(damager instanceof Arrow) && !(damager instanceof Player)) - return; - - if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) - return; - - Player cause = null; - - if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Arrow) damager).getShooter(); - } - - if (cause == null) - return; - - if (Residence.isResAdminOn(cause)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); - - if (res == null) - return; - - if (!res.getPermissions().playerHas(cause.getName(), "mobkilling", true)) { - cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "MobKilling." + res.getName())); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void AnimalLeash(PlayerLeashEntityEvent event) { - Player player = event.getPlayer(); - - Entity entity = event.getEntity(); - - if (!isAnimal(entity) && !(player instanceof Player)) - return; - - if (Residence.isResAdminOn(player)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); - - if (res == null) - return; - - if (!res.getPermissions().playerHas(player.getName(), "leash", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "Leash." + res.getName())); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onCreatureSpawn(CreatureSpawnEvent event) { - FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); - Entity ent = event.getEntity(); - if (isAnimal(ent) && !perms.has("animals", true)) - event.setCancelled(true); - else if (isMonster(ent) && !perms.has("monsters", true)) - event.setCancelled(true); - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onHangingPlace(HangingPlaceEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); - String pname = player.getName(); - String world = player.getWorld().getName(); - if (!perms.playerHas(pname, world, "place", perms.playerHas(pname, world, "build", true))) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onHangingBreak(HangingBreakEvent event) { - if (!(event instanceof HangingBreakByEntityEvent)) - return; - - HangingBreakByEntityEvent evt = (HangingBreakByEntityEvent) event; - if (!(evt.getRemover() instanceof Player)) - return; - - Player player = (Player) evt.getRemover(); - if (Residence.isResAdminOn(player)) - return; - - String pname = player.getName(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); - String world = event.getEntity().getWorld().getName(); - if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } - - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityCombust(EntityCombustEvent event) { - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); - if (!perms.has("burn", true)) { - event.setCancelled(true); - } - } - - @SuppressWarnings("incomplete-switch") - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onExplosionPrime(ExplosionPrimeEvent event) { - EntityType entity = event.getEntityType(); - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); - - switch (entity) { - case CREEPER: - if (!perms.has("creeper", perms.has("explode", true))) { - event.setCancelled(true); - event.getEntity().remove(); - } - break; - case PRIMED_TNT: - case MINECART_TNT: - if (!perms.has("tnt", perms.has("explode", true))) { - event.setCancelled(true); - event.getEntity().remove(); - } - break; - case SMALL_FIREBALL: - case FIREBALL: - if (!perms.has("fireball", perms.has("explode", true))) { - event.setCancelled(true); - event.getEntity().remove(); - } - break; - case WITHER_SKULL: - if (!perms.has("witherdamage", perms.has("damage", true))) { - event.setCancelled(true); - event.getEntity().remove(); - } - break; - } - } - - @SuppressWarnings("incomplete-switch") - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityExplode(EntityExplodeEvent event) { - if (event.isCancelled() || event.getEntity() == null) - return; - Boolean cancel = false; - EntityType entity = event.getEntityType(); - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); - FlagPermissions world = Residence.getWorldFlags().getPerms(event.getEntity().getWorld().getName()); - - switch (entity) { - case CREEPER: - if (!perms.has("creeper", perms.has("explode", true))) { - cancel = true; - } - break; - case PRIMED_TNT: - case MINECART_TNT: - if (!perms.has("tnt", perms.has("explode", true))) { - cancel = true; - } - break; - case SMALL_FIREBALL: - case FIREBALL: - if (!perms.has("fireball", perms.has("explode", true))) { - cancel = true; - } - break; - case WITHER_SKULL: - case WITHER: - if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) { - cancel = true; - } - break; - } - - if (cancel) { - event.setCancelled(true); - event.getEntity().remove(); - return; - } - - List preserve = new ArrayList(); - for (Block block : event.blockList()) { - FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); - - switch (entity) { - case CREEPER: - if (!blockperms.has("creeper", blockperms.has("explode", true))) - preserve.add(block); - continue; - case PRIMED_TNT: - case MINECART_TNT: - if (!blockperms.has("tnt", blockperms.has("explode", true))) - preserve.add(block); - continue; - case SMALL_FIREBALL: - case FIREBALL: - if (!blockperms.has("fireball", blockperms.has("explode", true))) - preserve.add(block); - continue; - case WITHER_SKULL: - case WITHER: - if (!blockperms.has("wither", blockperms.has("explode", world.has("wither", world.has("explode", true))))) - preserve.add(block); - continue; - } - } - for (Block block : preserve) { - event.blockList().remove(block); - } - - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onSplashPotion(PotionSplashEvent event) { - if (event.isCancelled()) - return; - Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); - Iterator it = event.getAffectedEntities().iterator(); - while (it.hasNext()) { - LivingEntity target = it.next(); - if (target.getType() != EntityType.PLAYER) - continue; - Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has("pvp", true); - if (!srcpvp || !tgtpvp) - event.setIntensity(target, 0); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { - if (event.getEntityType() != EntityType.ITEM_FRAME && event.getEntityType() != EntityType.ARMOR_STAND) - return; - - Entity dmgr = event.getDamager(); - - Player player = null; - if (dmgr instanceof Player) { - player = (Player) event.getDamager(); - } else if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { - player = (Player) ((Projectile) dmgr).getShooter(); - } else if ((dmgr instanceof Projectile) && (!(((Projectile) dmgr).getShooter() instanceof Player))) { - Location loc = event.getEntity().getLocation(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res != null && !res.getPermissions().has("container", true)) { - event.setCancelled(true); - return; - } else - return; - } - - Location loc = event.getEntity().getLocation(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res == null) - return; - - if (isMonster(dmgr) && !res.getPermissions().has("container", false)) { - event.setCancelled(true); - return; - } - - if (player == null) - return; - - if (Residence.isResAdminOn(player)) - return; - - if (!res.getPermissions().playerHas(player.getName(), "container", false)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityDamage(EntityDamageEvent event) { - Entity ent = event.getEntity(); - if (ent.hasMetadata("NPC")) - return; - - boolean tamedAnimal = isTamed(ent); - ClaimedResidence area = Residence.getResidenceManager().getByLoc(ent.getLocation()); - /* Living Entities */ - if (event instanceof EntityDamageByEntityEvent) { - EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; - Entity damager = attackevent.getDamager(); - ClaimedResidence srcarea = null; - if (damager != null) { - srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); - } - boolean srcpvp = true; - if (srcarea != null) { - srcpvp = srcarea.getPermissions().has("pvp", true); - } - ent = attackevent.getEntity(); - if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) - .getShooter() instanceof Player)))) { - Player attacker = null; - if (damager instanceof Player) { - attacker = (Player) damager; - } else if (damager instanceof Projectile) { - attacker = (Player) ((Projectile) damager).getShooter(); - } - if (!srcpvp) { - attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); - event.setCancelled(true); - return; - } - /* Check for Player vs Player */ - if (area == null) { - /* World PvP */ - if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { - attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldPVPDisabled")); - event.setCancelled(true); - } - } else { - /* Normal PvP */ - if (!area.getPermissions().has("pvp", true)) { - attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); - event.setCancelled(true); - } - } - return; - } else if ((ent instanceof Player || tamedAnimal) && (damager instanceof Creeper)) { - if (area == null && !Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("creeper", true)) { - event.setCancelled(true); - } else if (area != null && !area.getPermissions().has("creeper", true)) { - event.setCancelled(true); - } - } - } - if (area == null) { - if (!Residence.getWorldFlags().getPerms(ent.getWorld().getName()).has("damage", true) && (ent instanceof Player || tamedAnimal)) { - event.setCancelled(true); - } - } else { - if (!area.getPermissions().has("damage", true) && (ent instanceof Player || tamedAnimal)) { - event.setCancelled(true); - } - } - if (event.isCancelled()) { - /* Put out a fire on a player */ - if ((ent instanceof Player || tamedAnimal) && (event.getCause() == EntityDamageEvent.DamageCause.FIRE || event - .getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) { - ent.setFireTicks(0); - } - } - } -} +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.ChatColor; +import org.bukkit.Location; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.entity.EntityCombustEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.EntityInteractEvent; +import org.bukkit.event.entity.PotionSplashEvent; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +import org.bukkit.Material; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Creeper; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Monster; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Tameable; +import org.bukkit.entity.Vehicle; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.entity.Slime; +import org.bukkit.entity.Ghast; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.ExplosionPrimeEvent; +import org.bukkit.event.entity.PlayerLeashEntityEvent; +import org.bukkit.event.hanging.HangingBreakByEntityEvent; +import org.bukkit.event.hanging.HangingBreakEvent; +import org.bukkit.event.hanging.HangingPlaceEvent; +import org.bukkit.event.vehicle.VehicleDestroyEvent; + +/** + * + * @author Administrator + */ +public class ResidenceEntityListener implements Listener { + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEndermanChangeBlock(EntityChangeBlockEvent event) { + if (event.getEntityType() != EntityType.ENDERMAN) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("build", true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onWitherChangeBlock(EntityChangeBlockEvent event) { + if (event.getEntityType() != EntityType.WITHER) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions world = Residence.getWorldFlags().getPerms(event.getBlock().getWorld().getName()); + if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onEntityInteract(EntityInteractEvent event) { + Block block = event.getBlock(); + Material mat = block.getType(); + Entity entity = event.getEntity(); + FlagPermissions perms = Residence.getPermsByLoc(block.getLocation()); + boolean hastrample = perms.has("trample", perms.has("hasbuild", true)); + if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { + event.setCancelled(true); + } + } + + public static boolean isMonster(Entity ent) { + return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast); + } + + private boolean isTamed(Entity ent) { + return (ent instanceof Tameable ? ((Tameable) ent).isTamed() : false); + } + + public static boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager + || ent instanceof Rabbit); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalKilling(EntityDamageByEntityEvent event) { + + Entity entity = event.getEntity(); + if (!isAnimal(entity)) + return; + + Entity damager = event.getDamager(); + + if (!(damager instanceof Arrow) && !(damager instanceof Player)) + return; + + if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + return; + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { + cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "AnimalKilling|" + res.getName())); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalKilling(VehicleDestroyEvent event) { + + Vehicle vehicle = event.getVehicle(); + + Entity damager = event.getAttacker(); + + if (damager instanceof Projectile && !(((Projectile) damager).getShooter() instanceof Player) || !(damager instanceof Player)) { + FlagPermissions perms = Residence.getPermsByLoc(vehicle.getLocation()); + if (!perms.has("vehicledestroy", true)) { + event.setCancelled(true); + return; + } + } + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else if (damager instanceof Projectile) { + cause = (Player) ((Projectile) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(vehicle.getLocation()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(cause.getName(), "vehicledestroy", true)) { + cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "vehicledestroy|" + res.getName())); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void MonsterKilling(EntityDamageByEntityEvent event) { + + Entity entity = event.getEntity(); + if (!isMonster(entity)) + return; + + Entity damager = event.getDamager(); + + if (!(damager instanceof Arrow) && !(damager instanceof Player)) + return; + + if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + return; + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(cause.getName(), "mobkilling", true)) { + cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "MobKilling|" + res.getName())); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalLeash(PlayerLeashEntityEvent event) { + Player player = event.getPlayer(); + + Entity entity = event.getEntity(); + + if (!isAnimal(entity) && !(player instanceof Player)) + return; + + if (Residence.isResAdminOn(player)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(player.getName(), "leash", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "Leash|" + res.getName())); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onCreatureSpawn(CreatureSpawnEvent event) { + FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); + Entity ent = event.getEntity(); + if (isAnimal(ent) && !perms.has("animals", true)) + event.setCancelled(true); + else if (isMonster(ent) && !perms.has("monsters", true)) + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onHangingPlace(HangingPlaceEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); + String pname = player.getName(); + String world = player.getWorld().getName(); + if (!perms.playerHas(pname, world, "place", perms.playerHas(pname, world, "build", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onHangingBreak(HangingBreakEvent event) { + if (!(event instanceof HangingBreakByEntityEvent)) + return; + + HangingBreakByEntityEvent evt = (HangingBreakByEntityEvent) event; + if (!(evt.getRemover() instanceof Player)) + return; + + Player player = (Player) evt.getRemover(); + if (Residence.isResAdminOn(player)) + return; + + String pname = player.getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); + String world = event.getEntity().getWorld().getName(); + if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + } + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityCombust(EntityCombustEvent event) { + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + if (!perms.has("burn", true)) { + event.setCancelled(true); + } + } + + @SuppressWarnings("incomplete-switch") + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onExplosionPrime(ExplosionPrimeEvent event) { + EntityType entity = event.getEntityType(); + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + + switch (entity) { + case CREEPER: + if (!perms.has("creeper", perms.has("explode", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + break; + case PRIMED_TNT: + case MINECART_TNT: + if (!perms.has("tnt", perms.has("explode", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + break; + case SMALL_FIREBALL: + case FIREBALL: + if (!perms.has("fireball", perms.has("explode", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + break; + case WITHER_SKULL: + if (!perms.has("witherdamage", perms.has("damage", true))) { + event.setCancelled(true); + event.getEntity().remove(); + } + break; + } + } + + @SuppressWarnings("incomplete-switch") + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityExplode(EntityExplodeEvent event) { + if (event.isCancelled() || event.getEntity() == null) + return; + Boolean cancel = false; + EntityType entity = event.getEntityType(); + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + FlagPermissions world = Residence.getWorldFlags().getPerms(event.getEntity().getWorld().getName()); + + switch (entity) { + case CREEPER: + if (!perms.has("creeper", perms.has("explode", true))) { + cancel = true; + } + break; + case PRIMED_TNT: + case MINECART_TNT: + if (!perms.has("tnt", perms.has("explode", true))) { + cancel = true; + } + break; + case SMALL_FIREBALL: + case FIREBALL: + if (!perms.has("fireball", perms.has("explode", true))) { + cancel = true; + } + break; + case WITHER_SKULL: + case WITHER: + if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) { + cancel = true; + } + break; + } + + if (cancel) { + event.setCancelled(true); + event.getEntity().remove(); + return; + } + + List preserve = new ArrayList(); + for (Block block : event.blockList()) { + FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); + + switch (entity) { + case CREEPER: + if (!blockperms.has("creeper", blockperms.has("explode", true))) + preserve.add(block); + continue; + case PRIMED_TNT: + case MINECART_TNT: + if (!blockperms.has("tnt", blockperms.has("explode", true))) + preserve.add(block); + continue; + case SMALL_FIREBALL: + case FIREBALL: + if (!blockperms.has("fireball", blockperms.has("explode", true))) + preserve.add(block); + continue; + case WITHER_SKULL: + case WITHER: + if (!blockperms.has("wither", blockperms.has("explode", world.has("wither", world.has("explode", true))))) + preserve.add(block); + continue; + } + } + for (Block block : preserve) { + event.blockList().remove(block); + } + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onSplashPotion(PotionSplashEvent event) { + if (event.isCancelled()) + return; + Entity ent = event.getEntity(); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); + Iterator it = event.getAffectedEntities().iterator(); + while (it.hasNext()) { + LivingEntity target = it.next(); + if (target.getType() != EntityType.PLAYER) + continue; + Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has("pvp", true); + if (!srcpvp || !tgtpvp) + event.setIntensity(target, 0); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { + if (event.getEntityType() != EntityType.ITEM_FRAME && event.getEntityType() != EntityType.ARMOR_STAND) + return; + + Entity dmgr = event.getDamager(); + + Player player = null; + if (dmgr instanceof Player) { + player = (Player) event.getDamager(); + } else if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { + player = (Player) ((Projectile) dmgr).getShooter(); + } else if ((dmgr instanceof Projectile) && (!(((Projectile) dmgr).getShooter() instanceof Player))) { + Location loc = event.getEntity().getLocation(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null && !res.getPermissions().has("container", true)) { + event.setCancelled(true); + return; + } else + return; + } + + Location loc = event.getEntity().getLocation(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res == null) + return; + + if (isMonster(dmgr) && !res.getPermissions().has("container", false)) { + event.setCancelled(true); + return; + } + + if (player == null) + return; + + if (Residence.isResAdminOn(player)) + return; + + if (!res.getPermissions().playerHas(player.getName(), "container", false)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamage(EntityDamageEvent event) { + Entity ent = event.getEntity(); + if (ent.hasMetadata("NPC")) + return; + + boolean tamedAnimal = isTamed(ent); + ClaimedResidence area = Residence.getResidenceManager().getByLoc(ent.getLocation()); + /* Living Entities */ + if (event instanceof EntityDamageByEntityEvent) { + EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; + Entity damager = attackevent.getDamager(); + ClaimedResidence srcarea = null; + if (damager != null) { + srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); + } + boolean srcpvp = true; + if (srcarea != null) { + srcpvp = srcarea.getPermissions().has("pvp", true); + } + ent = attackevent.getEntity(); + if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) + .getShooter() instanceof Player)))) { + Player attacker = null; + if (damager instanceof Player) { + attacker = (Player) damager; + } else if (damager instanceof Projectile) { + attacker = (Player) ((Projectile) damager).getShooter(); + } + if (!srcpvp) { + attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + event.setCancelled(true); + return; + } + /* Check for Player vs Player */ + if (area == null) { + /* World PvP */ + if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { + attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldPVPDisabled")); + event.setCancelled(true); + } + } else { + /* Normal PvP */ + if (!area.getPermissions().has("pvp", true)) { + attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + event.setCancelled(true); + } + } + return; + } else if ((ent instanceof Player || tamedAnimal) && (damager instanceof Creeper)) { + if (area == null && !Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("creeper", true)) { + event.setCancelled(true); + } else if (area != null && !area.getPermissions().has("creeper", true)) { + event.setCancelled(true); + } + } + } + if (area == null) { + if (!Residence.getWorldFlags().getPerms(ent.getWorld().getName()).has("damage", true) && (ent instanceof Player || tamedAnimal)) { + event.setCancelled(true); + } + } else { + if (!area.getPermissions().has("damage", true) && (ent instanceof Player || tamedAnimal)) { + event.setCancelled(true); + } + } + if (event.isCancelled()) { + /* Put out a fire on a player */ + if ((ent instanceof Player || tamedAnimal) && (event.getCause() == EntityDamageEvent.DamageCause.FIRE || event + .getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) { + ent.setFireTicks(0); + } + } + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 4af981e25..28fb5467a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -56,7 +56,9 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.utils.ActionBar; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.Signs.Signs; @@ -650,7 +652,7 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { return; if (!res.getPermissions().playerHas(player.getName(), "shear", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Shear." + res.getName())); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Shear|" + res.getName())); event.setCancelled(true); } @@ -887,7 +889,7 @@ public boolean isEmptyBlock(Block block) { return false; } - public void handleNewLocation(Player player, Location loc, boolean move) { + public void handleNewLocation(final Player player, Location loc, boolean move) { String pname = player.getName(); ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); @@ -912,6 +914,14 @@ public void handleNewLocation(Player player, Location loc, boolean move) { } } + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + AutoSelection.UpdateSelection(player); + return; + } + }); + if (res == null) { lastOutsideLoc.put(pname, loc); if (ResOld != null) { @@ -980,11 +990,11 @@ public void handleNewLocation(Player player, Location loc, boolean move) { else player.teleport(res.getOutsideFreeLoc(loc)); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly." + orres.getName())); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly|" + orres.getName())); return; } } - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly." + orres.getName())); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly|" + orres.getName())); player.teleport(location); player.setFlying(false); player.setAllowFlight(false); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index ac6337a44..d90311254 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -5,7 +5,9 @@ package com.bekvon.bukkit.residence.permissions; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; import com.bekvon.bukkit.residence.PlayerManager; import com.bekvon.bukkit.residence.Residence; @@ -171,11 +173,11 @@ private void parseGroup(ConfigurationSection limits) { } } } - + public String getGroupName() { return groupname; } - + public int getMaxX() { return xmax; } @@ -322,32 +324,34 @@ public boolean itemListAccess() { return itemListAccess; } - public void printLimits(Player player) { + public void printLimits(Player player, OfflinePlayer target, boolean resadmin) { player.sendMessage(ChatColor.GRAY + Residence.getLanguage().getPhrase("LimitsTop")); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsPGroup", Residence.getPermissionManager().getPermissionsGroup(player))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsPGroup", Residence.getPermissionManager().getPermissionsGroup(target.getName(), + Residence.getConfigManager().getDefaultWorld()))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsRGroup", groupname)); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsAdmin", String.valueOf(Residence.getPermissionManager().isResidenceAdmin( - player)))); + if (target.isOnline() && resadmin) + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsAdmin", String.valueOf(Residence.getPermissionManager().isResidenceAdmin( + player)))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsCanCreate", String.valueOf(cancreate))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxRes", String.valueOf(getMaxZones(player.getName())))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxRes", String.valueOf(getMaxZones(target.getName())))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxEW", String.valueOf(xmax))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxNS", String.valueOf(zmax))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxUD", String.valueOf(ymax))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMinMax", String.valueOf(minHeight) + "." + String.valueOf(maxHeight))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxSub", String.valueOf(getMaxSubzoneDepth(player.getName())))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxRents", String.valueOf(getMaxRents(player.getName())))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMinMax", String.valueOf(minHeight) + "|" + String.valueOf(maxHeight))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxSub", String.valueOf(getMaxSubzoneDepth(target.getName())))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxRents", String.valueOf(getMaxRents(target.getName())))); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsEnterLeave", String.valueOf(messageperms))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsNumberOwn", String.valueOf(Residence.getResidenceManager().getOwnedZoneCount(player + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsNumberOwn", String.valueOf(Residence.getResidenceManager().getOwnedZoneCount(target .getName())))); if (Residence.getEconomyManager() != null) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsCost", String.valueOf(costperarea).replace(".", ","))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsSell", String.valueOf(sellperarea).replace(".", ","))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsCost", String.valueOf(costperarea))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsSell", String.valueOf(sellperarea))); } player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", flagPerms.listFlags())); if (Residence.getConfigManager().useLeases()) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", String.valueOf(maxLeaseTime).replace(".", ","))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", String.valueOf(leaseGiveTime).replace(".", ","))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", String.valueOf(renewcostperarea).replace(".", ","))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", String.valueOf(maxLeaseTime))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", String.valueOf(leaseGiveTime))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", String.valueOf(renewcostperarea))); } player.sendMessage(ChatColor.GRAY + Residence.getLanguage().getPhrase("LimitsBottom")); } diff --git a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java index 08377f929..78ae3a7a8 100644 --- a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java +++ b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java @@ -13,9 +13,12 @@ import java.io.OutputStreamWriter; import java.util.LinkedHashMap; import java.util.Map; + +import org.bukkit.Bukkit; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.DumperOptions.FlowStyle; import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.reader.ReaderException; /** * @@ -25,43 +28,43 @@ public class YMLSaveHelper { File f; Yaml yml; - Map root; + Map root; + + public YMLSaveHelper(File ymlfile) throws IOException { + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(FlowStyle.BLOCK); + options.setAllowUnicode(true); + yml = new Yaml(options); - public YMLSaveHelper(File ymlfile) throws IOException - { - DumperOptions options = new DumperOptions(); - options.setDefaultFlowStyle(FlowStyle.BLOCK); - options.setAllowUnicode(true); - yml = new Yaml(options); - - root = new LinkedHashMap(); - if(ymlfile == null) - throw new IOException("YMLSaveHelper: null file..."); - f = ymlfile; + root = new LinkedHashMap(); + if (ymlfile == null) + throw new IOException("YMLSaveHelper: null file..."); + f = ymlfile; } - public void save() throws IOException - { - if(f.isFile()) - f.delete(); - FileOutputStream fout = new FileOutputStream(f); - OutputStreamWriter osw = new OutputStreamWriter(fout, "UTF8"); - yml.dump(root, osw); - osw.close(); + public void save() throws IOException { + if (f.isFile()) + f.delete(); + FileOutputStream fout = new FileOutputStream(f); + OutputStreamWriter osw = new OutputStreamWriter(fout, "UTF8"); + yml.dump(root, osw); + osw.close(); } @SuppressWarnings("unchecked") - public void load() throws IOException - { - FileInputStream fis = new FileInputStream(f); - InputStreamReader isr = new InputStreamReader(fis, "UTF8"); - root = (Map) yml.load(isr); - isr.close(); + public void load() throws IOException { + FileInputStream fis = new FileInputStream(f); + InputStreamReader isr = new InputStreamReader(fis, "UTF8"); + try { + root = (Map) yml.load(isr); + } catch (ReaderException e) { + System.out.println("[Residence] - Failed to load " + yml.getName() + " file!"); + } + isr.close(); } - public Map getRoot() - { - return root; + public Map getRoot() { + return root; } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index f3d4bceeb..5256b04b5 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -86,21 +86,21 @@ public static boolean CheckAreaSize(Player player, CuboidArea area, boolean resa if (!resadmin && area.getXSize() < Residence.getConfigManager().getMinimalResX()) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallX", String.valueOf(area.getXSize()) + "." + String.valueOf(Residence + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallX", String.valueOf(area.getXSize()) + "|" + String.valueOf(Residence .getConfigManager().getMinimalResX()))); } return false; } if (!resadmin && area.getYSize() < Residence.getConfigManager().getMinimalResY()) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallY", String.valueOf(area.getYSize()) + "." + String.valueOf(Residence + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallY", String.valueOf(area.getYSize()) + "|" + String.valueOf(Residence .getConfigManager().getMinimalResY()))); } return false; } if (!resadmin && area.getZSize() < Residence.getConfigManager().getMinimalResZ()) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallZ", String.valueOf(area.getZSize()) + "." + String.valueOf(Residence + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallZ", String.valueOf(area.getZSize()) + "|" + String.valueOf(Residence .getConfigManager().getMinimalResZ()))); } return false; @@ -830,7 +830,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin) { - reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("TeleportStarted", this.getName() + "." + Residence.getConfigManager() + reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("TeleportStarted", this.getName() + "|" + Residence.getConfigManager() .getTeleportDelay())); ResidenceCommandListener.teleportDelayMap.add(reqPlayer.getName()); } @@ -1033,7 +1033,7 @@ public boolean renameSubzone(Player player, String oldName, String newName, bool subzones.put(newName, res); subzones.remove(oldName); if (player != null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneRename", oldName + "." + newName)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneRename", oldName + "|" + newName)); return true; } @@ -1061,7 +1061,7 @@ public boolean renameArea(Player player, String oldName, String newName, boolean areas.put(newName, area); areas.remove(oldName); if (player != null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaRename", oldName + "." + newName)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaRename", oldName + "|" + newName)); return true; } else { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index 084197e55..0b1868868 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -56,7 +56,6 @@ public void setExpireTime(String area, int days) { } public void setExpireTime(Player player, String area, int days) { - area = area.replace(".", "_"); if (manager.getByName(area) != null) { leaseExpireTime.put(area, daysToMs(days) + System.currentTimeMillis()); if (player != null) @@ -87,7 +86,7 @@ public void renewArea(String area, Player player) { econ.subtract(player.getName(), amount); econ.add("Lease Money", amount); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) - + ChatColor.GREEN + "." + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); + + ChatColor.GREEN + "|" + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); } else { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); return; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 20f8e6542..d55983580 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -302,7 +302,7 @@ private void getResidenceList(String targetplayer, boolean showhidden, boolean s if ((showhidden) || (!showhidden && !hidden)) { if (targetplayer == null || res.getPermissions().getOwner().equalsIgnoreCase(targetplayer)) { if (formattedOutput) { - list.add(Residence.getLanguage().getPhrase("ResidenceList", parentzone + "." + resname + "." + Residence.getLanguage().getPhrase("World") + "." + res + list.add(Residence.getLanguage().getPhrase("ResidenceList", parentzone + "|" + resname + "|" + Residence.getLanguage().getPhrase("World") + "|" + res .getWorld())); } else { list.add(parentzone + resname); @@ -500,17 +500,15 @@ public void printAreaInfo(String areaname, Player player) { if (Residence.getEconomyManager() != null) { PermissionGroup group = Residence.getPermissionManager().getGroup(res.getOwner(), res.getWorld()); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TotalWorth", String.valueOf((int) ((res.getTotalSize() * group.getCostPerBlock()) - * 100) / 100.0).replace( - ".", ",") + "." + - String.valueOf((int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0).replace(".", ","))); + * 100) / 100.0) + "|" + String.valueOf((int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0))); } if (aid != null) { player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsT") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase( - "CoordsTop", res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockX() + "." + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockY() + "." + "CoordsTop", res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockX() + "|" + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockY() + "|" + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockZ())); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsB") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase( - "CoordsBottom", res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockX() + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockY() + "CoordsBottom", res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockX() + "|" + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockY() + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockZ())); } if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { @@ -661,7 +659,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo Residence.getRentManager().updateRentableName(oldName, newName); } if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRename", ChatColor.YELLOW + oldName + ChatColor.GREEN + "." + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRename", ChatColor.YELLOW + oldName + ChatColor.GREEN + "|" + ChatColor.YELLOW + newName + ChatColor.GREEN)); } return true; @@ -717,9 +715,9 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, res.getPermissions().setOwner(giveplayer.getName(), true); // Fix phrases here - reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceGive", ChatColor.YELLOW + residence + ChatColor.GREEN + "." + ChatColor.YELLOW + reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceGive", ChatColor.YELLOW + residence + ChatColor.GREEN + "|" + ChatColor.YELLOW + giveplayer.getName() + ChatColor.GREEN)); - giveplayer.sendMessage(Residence.getLanguage().getPhrase("ResidenceRecieve", ChatColor.GREEN + residence + ChatColor.YELLOW + "." + ChatColor.GREEN + reqPlayer + giveplayer.sendMessage(Residence.getLanguage().getPhrase("ResidenceRecieve", ChatColor.GREEN + residence + ChatColor.YELLOW + "|" + ChatColor.GREEN + reqPlayer .getName() + ChatColor.YELLOW)); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 43fe2de6e..9ec218b60 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -188,7 +188,7 @@ public boolean setPlayerFlag(Player player, String targetPlayer, String flag, St return false; if (super.setPlayerFlag(targetPlayer, flag, state)) { if (Show) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag + "." + residence.getName() + "." + flagstate)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag + "|" + residence.getName() + "|" + flagstate)); return true; } } @@ -207,7 +207,7 @@ public boolean setGroupFlag(Player player, String group, String flag, String fla if (fc.isCancelled()) return false; if (super.setGroupFlag(group, flag, state)) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag + "." + residence.getName() + "." + flagstate)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag + "|" + residence.getName() + "|" + flagstate)); return true; } } else { @@ -228,7 +228,7 @@ public boolean setFlag(Player player, String flag, String flagstate, boolean res if (fc.isCancelled()) return false; if (super.setFlag(flag, state)) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag + "." + residence.getName() + "." + flagstate)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag + "|" + residence.getName() + "|" + flagstate)); return true; } } @@ -482,7 +482,7 @@ public boolean setFlagGroupOnPlayer(Player player, String target, String flaggro flagString += ", "; } } - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flagString + "." + target + "." + state)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flagString + "|" + target + "|" + state)); return changed; } return false; diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java new file mode 100644 index 000000000..5f2d0b3bd --- /dev/null +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -0,0 +1,114 @@ +package com.bekvon.bukkit.residence.selection; + +import java.util.HashMap; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.NewLanguage; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.CuboidArea; + +public class AutoSelection { + + private static HashMap list = new HashMap(); + + public static void switchAutoSelection(Player player) { + if (!list.containsKey(player.getName().toLowerCase())) { + PermissionGroup group = Residence.getPermissionManager().getGroup(player.getName(), player.getLocation().getWorld().getName()); + list.put(player.getName().toLowerCase(), group); + player.sendMessage(NewLanguage.getMessage("Language.AutoSelection.Enabled")); + } else { + list.remove(player.getName().toLowerCase()); + player.sendMessage(NewLanguage.getMessage("Language.AutoSelection.Disabled")); + } + } + + public static void UpdateSelection(Player player) { + + if (getList().size() == 0) + return; + + if (!getList().containsKey(player.getName().toLowerCase())) + return; + + String name = player.getName(); + + Location cloc = player.getLocation(); + + Location loc1 = Residence.getSelectionManager().getPlayerLoc1(name); + Location loc2 = Residence.getSelectionManager().getPlayerLoc2(name); + + if (loc1 == null) { + Residence.getSelectionManager().placeLoc1(player, cloc); + loc1 = player.getLocation(); + return; + } + + if (loc2 == null) { + Residence.getSelectionManager().placeLoc2(player, cloc); + loc2 = player.getLocation(); + return; + } + + boolean changed = false; + + CuboidArea area = new CuboidArea(loc1, loc2); + Location hloc = area.getHighLoc(); + Location lloc = area.getLowLoc(); + + if (cloc.getBlockX() < lloc.getBlockX()) { + lloc.setX(cloc.getBlockX()); + changed = true; + } + + if (cloc.getBlockY() <= lloc.getBlockY()) { + lloc.setY(cloc.getBlockY() - 1); + changed = true; + } + + if (cloc.getBlockZ() < lloc.getBlockZ()) { + lloc.setZ(cloc.getBlockZ()); + changed = true; + } + + if (cloc.getBlockX() > hloc.getBlockX()) { + hloc.setX(cloc.getBlockX()); + changed = true; + } + + if (cloc.getBlockY() >= hloc.getBlockY()) { + hloc.setY(cloc.getBlockY() + 1); + changed = true; + } + + if (cloc.getBlockZ() > hloc.getBlockZ()) { + hloc.setZ(cloc.getBlockZ()); + changed = true; + } + + PermissionGroup group = getList().get(player.getName().toLowerCase()); + + if (area.getXSize() > group.getMaxX()) { + return; + } + + if (area.getYSize() > group.getMaxY()) { + return; + } + + if (area.getZSize() > group.getMaxZ()) { + return; + } + + if (changed) { + Residence.getSelectionManager().placeLoc1(player, hloc); + Residence.getSelectionManager().placeLoc2(player, lloc); + Residence.getSelectionManager().showSelectionInfoInActionBar(player); + } + } + + public static HashMap getList() { + return list; + } +} diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index 797302459..90638f634 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -56,7 +56,7 @@ public String getPhrase(String[] keys, String words) { if (words == null) { return this.getPhrase(keys, (String[]) null); } else { - return this.getPhrase(keys, words.split("\\.")); + return this.getPhrase(keys, words.split("\\|")); } } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index bfb1db341..dc0906916 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -75,8 +75,8 @@ public void printHelp(CommandSender sender, int page) { sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); return; } - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("HelpPageHeader", ChatColor.YELLOW + name + ChatColor.RED + "." + ChatColor.YELLOW + page - + ChatColor.RED + "." + ChatColor.YELLOW + pagecount + ChatColor.RED)); + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("HelpPageHeader", ChatColor.YELLOW + name + ChatColor.RED + "|" + ChatColor.YELLOW + page + + ChatColor.RED + "|" + ChatColor.YELLOW + pagecount + ChatColor.RED)); sender.sendMessage(ChatColor.DARK_AQUA + Residence.getLanguage().getPhrase("Description") + ": " + ChatColor.GREEN + desc); int start = linesPerPage * (page - 1); int end = start + linesPerPage; diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index b5dcbf566..5c8ed7b69 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -46,8 +46,7 @@ public static void printInfo(CommandSender sender, String title, List li } sender.sendMessage(NewLanguage.getMessage("Language.InformationPage.TopLine").replace("%1", title)); sender.sendMessage(NewLanguage.getMessage("Language.InformationPage.Page").replace("%1", Residence.getLanguage().getPhrase("GenericPage", ChatColor.GREEN + String - .format("%d", page) + ChatColor.YELLOW - + "." + ChatColor.GREEN + pagecount + ChatColor.YELLOW))); + .format("%d", page) + ChatColor.YELLOW + "|" + ChatColor.GREEN + pagecount + ChatColor.YELLOW))); for (int i = start; i < end; i++) { if (lines.size() > i) sender.sendMessage(ChatColor.GREEN + lines.get(i)); diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index b16228797..3581cef33 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -92,7 +92,7 @@ public String getPlayerGroup(String player, String world) { public static boolean hasPermission(OfflinePlayer player, String perm, String world) { if (permissions == null) - return true; + return false; return permissions.playerHas(world, player, perm); } diff --git a/src/plugin.yml b/src/plugin.yml index fc8fdc473..2b53e5cab 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.8.0.0 +version: 2.8.0.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 08e7623836b9df142a5375f03864ec668a130aed Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 25 Sep 2015 17:57:23 +0300 Subject: [PATCH 0033/1142] Spanish locale and signupdate command --- src/Language/Spanish.yml | 1288 +++++++++-------- src/com/bekvon/bukkit/residence/Locale.java | 9 +- .../residence/ResidenceCommandListener.java | 88 +- .../bukkit/residence/Signs/SignUtil.java | 9 + .../listeners/ResidencePlayerListener.java | 3 + .../residence/utils/VersionChecker.java | 114 +- src/plugin.yml | 5 +- 7 files changed, 815 insertions(+), 701 deletions(-) diff --git a/src/Language/Spanish.yml b/src/Language/Spanish.yml index f570e23d3..8180bad90 100644 --- a/src/Language/Spanish.yml +++ b/src/Language/Spanish.yml @@ -1,622 +1,676 @@ -#Spanish Translation by cloud_strife_91spain and lemon42 -# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy # of this file and modify that instead. This file will be updated automatically by Residence # when a newer version is detected, and your changes will be overwritten. Once you # have a copy of this file, change the Language: option under the Residence config.yml # to whatever you named your copy. -Version: 20 -FieldsVersion: 22 -Language: - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - #Version 1 Fields - InvalidResidence: Residencia inválida... - InvalidSubzone: Subzona inválida... - InvalidDirection: Dirección inválida... - InvalidChannel: Canal inválido... - InvalidAmount: Cantidad inválida... - InvalidCost: Coste inválido... - InvalidDays: Numero de días inválido... - InvalidMaterial: Material inválido... - InvalidBoolean: Valor inválido, debe ser true(t) o false(f) - InvalidArea: Area inválida... - InvalidGroup: Grupo inválido... - InvalidMessageType: El tipo de mensaje debe ser enter o remove - InvalidList: Lista inválida... - InvalidFlag: Flag inválido... - InvalidFlagState: Estado de flag inválido, debe ser true(t), false(f), o remove(r) - AreaExists: El nombre de área ya existe. - AreaCreate: 'Area de residencia creada, ID %1' - AreaDiffWorld: El área está en un mundo diferente que la residencia. - AreaCollision: 'Area colisiona con la residencia %1' - AreaSubzoneCollision: 'Area colisiona con la subzona %1' - AreaNonExist: No existe tal zona. - AreaInvalidName: Nombre de área inválido... - AreaRename: 'Area renombrada de %1 a %2' - AreaRemove: 'Area eliminada %1 ...' - AreaRemoveLast: No se puede eliminar el último área de una residencia. - AreaNotWithinParent: El area no está dentro del área principal. - AreaUpdate: Area actualizada... - AreaMaxPhysical: Has alcanzado el máximo de áreas físicas para tu residencia. - AreaSizeLimit: El espacio del área no se encuentra dentro de los límites permitidos. - AreaHighLimit: 'No puedes hacer una protección tan alta, tu límite es %1' - AreaLowLimit: 'No puedes hacer una protección tan profunda, tu límite es %1' - NotInResidence: No estás en una residencia. - InResidence: 'Actualmente te encuentras en la residencia %1' - ResidenceOwnerChange: 'La residencia propiedad de %1 ahora es del jugador %2' - NonAdmin: No eres un administrador de residencias. - AdminOnly: Sólo los administradores tienen acceso a este comando. - ChatDisabled: Chat de residencia desactivado... - SubzoneRename: 'Subzona renombrada de %1 a %2' - SubzoneRemove: 'Subzona %1 eliminada.' - SubzoneCreate: 'Subzona %1 creada' - SubzoneCreateFail: 'No se puede crear la subzona %1' - SubzoneExists: 'La subzona %1 ya existe.' - SubzoneCollide: 'La subzona colisiona con otra subzona llamada %1' - SubzoneMaxDepth: Has llegado a la profundidad máxima permitida en una subzona. - SubzoneSelectInside: Los dos puntos de selección han de estar dentro de la residencia. - SelectPoints: Selecciona los dos puntos antes de usar este comando! - SelectionSuccess: Selección realizada! - SelectionFail: Comando de selección inválido... - SelectionBedrock: Selección expandida al máximo límite inferior permitido. - SelectionSky: Selección expandida al máximo límite superior permitido. - SelectionArea: 'Seleccionado el area %1 de la residencia %2' - SelectDiabled: No tienes acceso a los comandos de selección. - NoPermission: No tienes permisos para hacer esto. - OwnerNoPermission: El propietario no tiene permiso para esto. - ParentNoPermission: No tienes permisos para realizar cambios en la zona principal. - MessageChange: Mensaje cambiado... - FlagSet: Flag establecido... - FlagCheckTrue: 'Flag %1 aplicado al jugador %2 para la residencia %3, valor = %4' - FlagCheckFalse: 'Flag %1 no aplicado al jugador %2 para la residencia.' - FlagsCleared: Flags borrados. - FlagsDefault: Flags establecidos por defecto. - Usage: Uso del comando - InvalidHelp: Página de ayuda inválida... - SubCommands: Subcomandos - InvalidList: Tipo de lista desconocida, debe ser blacklist o ignorelist. - MaterialGet: 'El nombre del material para el ID %1 es %2' - MarketDisabled: Economía desactivada! - MarketList: Lista del mercado - SelectionTool: Herramienta de selección - InfoTool: Información de la herramienta - NoBankAccess: No tienes acceso al banco. - NotEnoughMoney: No tienes suficiente dinero. - BankNoMoney: No tienes suficiente dinero en el banco. - BankDeposit: 'Has depositado %1 en el banco de la residencia.' - BankWithdraw: 'Has retirado %1 del banco de la residencia.' - MoneyCharged: 'Cargo de %1 en tu cuenta %2.' - MoneyCredit: 'Crédito de %1 en tu cuenta %2.' - RentDisabled: Sistema de alquiler desactivado. - RentReleaseInvalid: 'La residencia %1 no está en alquiler.' - RentSellFail: No se puede vender una residencia si está en alquiler. - SellRentFail: No se puede alquilar una residencia si está a la venta. - OwnerBuyFail: No puedes comprar tu propia tierra! - OwnerRentFail: No puedes alquilar tu propia tierra! - AlreadySellFail: Residencia ya a la venta! - ResidenceBought: 'Has comprado la residencia %1' - ResidenceBuy: '%1 ha comprado la residencia %2' - ResidenceBuyTooBig: Esta residencia tiene areas más grandes de lo que tu tienes permitido. - ResidenceNotForSale: La residencia no está a la venta. - ResidenceForSale: 'Residencia %1 está a la venta por %2' - ResidenceStopSelling: La residencia ya no está a la venta - ResidenceTooMany: Ya has alcanzado el número máximo de residencias permitidas. - ResidenceMaxRent: Ya estás alquilando el número máximo de residencias permitidas. - ResidenceAlreadyRent: La residencia ya está en alquiler... - ResidenceNotForRent: La residencia no está en alquiler... - ResidenceNotRented: Residencia no alquilada. - ResidenceUnrent: 'La residencia %1 ha dejado de estar en alquiler.' - ResidenceRemoveRentable: 'La residencia %1 ya ha dejado de alquilarse.' - ResidenceForRentSuccess: 'La residencia %1 está ahora en alquiler %2 cada %3 días.' - ResidenceRentSuccess: 'Has alquilado la residencia %1 por %2 días.' - ResidenceAlreadyRented: 'La residencia %1 ha sido alquilada a %2' - ResidenceAlreadyExists: 'La residencia llamada %1 ya existe.' - ResidenceCreate: 'Has creado la residencia %1!' - ResidenceRename: 'Residencia renombrada de %1 a %2' - ResidenceRemove: 'La residencia %1 ha sido eliminada...' - RentDisabled: Alquiler desactivado... - RentDisableRenew: 'La residencia %1 no volverá a realquilarse cuando expire.' - RentEnableRenew: 'La residencia %1 automáticamente volverá a alquilarse cuando expire.' - RentableDisableRenew: '%1 ya no renovará su estado cuando expire.' - RentableEnableRenew: '%1 automáticamente renovará su estado cuando expire.' - LandForSale: Tierra a la venta - SellAmount: Cantidad de venta - LeaseExpire: Tiempo de caducidad de arrendamiento - RentExpire: Tiempo de caducidad de venta - RentableAutoRenew: Autorenovamiento de arrendamiento - RentAutoRenew: Autorenovación de alquiler - RentableLand: Tierra en alquiler - ListMaterialAdd: '%1 incorporado a la residencia %2' - ListMaterialRemove: '%1 eliminado de la residencia %2' - ItemBlacklisted: El uso de este item aquí no está permitido. - RentedModifyDeny: No puedes modificar una residencia alquilada. - WorldPVPDisabled: PVP del mundo desactivado. - NoPVPZone: Zona no PVP. - FlagDeny: 'No tienes el permiso de %1 aquí.' - FlagSetDeny: 'El propietario no tiene acceso al flag %1' - SelectPoint: 'Punto de selección %1 situado' - ResidenceChat: 'Chat residencia activado %1' - ResidenceMoveDeny: 'No tienes permiso de movimiento para la residencia %1' - TeleportDeny: No tienes acceso al teletransporte. - TeleportSuccess: 'Teletransportado!' - TeleportNear: Teletransportado a la residencia más cercana. - TeleportNoFlag: No tienes acceso al teletransporte de esta residencia. - SetTeleportLocation: Localización de teletransporte establecida... - HelpPageHeader: 'Páginas de ayuda - %1 - Página <%2 de %3>' - ListExists: La lista ya existe... - ListRemoved: Lista eliminada... - ListCreate: 'Lista creada %1' - LeaseRenew: 'Contrato de arrendamiento válido hasta el %1' - LeaseRenewMax: Contrato de renovación al máximo permitdo - LeaseNotExpire: No hay tal arrendamiento, o no tiene fecha de expiración. - LeaseRenewalCost: 'El coste de renovación para el área %1 es de %2' - LeaseInfinite: Tiempo de arrendamiento establecido en infinito... - PermissionsApply: Permisos aplicados a la residencia. - PhysicalAreas: Areas físicas - CurrentArea: Area actual - LeaseExpire: Caducidad de arrendamiento - NotOnline: El jugador objetivo ha de estar online - ResidenceGiveLimits: No puedes darle la residencia al jugador objetivo porque esta fuera de los limites del jugador. - ResidenceGive: 'Residencia %1 dada al jugador %2' - ResidenceRecieve: 'Has recibido la residencia %1 del jugador %2' - #Version 4 New Fields - #ResidenceListAll: 'Residences - ' - removed, use GenericPage now - ResidenceListAllEmpty: No hay residencias existentes en el servidor... - InvalidPage: Página inválida... - NextPage: Página siguiente - #Version 10 New Fields - RemovePlayersResidences: 'Se eliminaron todas las residencias que pertenecen al jugador %1' - GenericPage: 'Página %1 de %2' - #Version 11 New Fields - ResidenceRentedBy: 'En alquiler por %1' - #Version 14 New Fields - InvalidCharacters: Caracteres no válidos detectados... - InvalidNameCharacters: El nombre contiene caracteres no permitidos... - #Version 15 New Fields - DeleteConfirm: 'Si estás seguro que deseas eliminar la residencia %1, usa "/res confirm" para confirmarlo.' - #Version 18 New Fields - SelectTooHigh: La selección está por encima de la parte superior de los límites del mapa. - SelectTooLow: La selección está por debajo de la parte inferior de los límites del mapa. - WorldEditNotFound: WorldEdit no fue detectado. - #Version 19 New Fields - NoResHere: No hay ninguna residencia aquí. - DeleteSubzoneConfirm: 'Si estás seguro que deseas eliminar la subzona %1, usa "/res confirm" para confirmarlo.' - #Version 20 New Fields - SubzoneOwnerChange: 'La subzona propiedad de %1 ahora es del jugador %2' - CoordsTop: 'X:%1 Y:%2 Z:%3' - CoordsBottom: 'X:%1 Y:%2 Z:%3' - #Version 21 New Fields - AdminToggle: 'Automatic resadmin toggle turned %1' - #Version 22 New Fields - NoSpawn: 'You do not have move permissions at your spawn point. Relocating' - CompassTargetReset: 'Your compass has been reset' - CompassTargetSet: 'Your compass now points to %1' - - #The below lines are mostly a word bank for various uses. - #Version 1 Fields - Description: Descripción - Land: Tierra - Cost: Coste - Selection: Selección - Total: Total - Size: Tamaño - Expanding: Expandiendo - Shifting: Moviendo - Up: Arriba - Down: Abajo - Error: Error - Flags: Flags - Your: Tu/tus - Group: Grupo - Others: Otros - Primary: Primaria - Secondary: Secondaria - Moved: Movido - Status: Estado - Available: Disponible - On: On - Off: Off - Name: Nombre - Lists: Listas - Residences: Residencias - Residence: Residencia - Count: Número - Owner: Propietario - #Version 4 Fields - World: Mundo - #Version 12 Fields - Subzones: Subzonas - #Version 20 Fields - CoordsT: coordenadas superiores - CoordsB: menores coordenadas - #Version 22 Fields - TurnOn: 'on' - TurnOff: 'off' - -# This is the help / usage messages for each command. -# It follows this format: -# -# Description: -# Info: -# SubCommands: -# - these follow the same format, and each sub command can have its own subcommands -# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that -# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). -# Add a page number after the ? mark to see that page. -HelpLinesPerPage: 7 -CommandHelp: #this is just a holder node, that holds the entire help - Description: Contains Help for Residence - SubCommands: #this is the actual beginning of all commands - res: #main residence command - Description: Comando principal - Info: - - 'Ver el wiki para más información.' - - 'Wiki: residencebukkitmod.wikispaces.com' - - 'Utiliza /[comando] ? para ver más información.' - SubCommands: - select: #selection commands - Description: Comandos de selección - Info: - - 'Este comando selecciona áreas para hacer residencias.' - - '/res select [x] [y] [z] - selecciona un número de bloques alrededor de tí.' - SubCommands: - coords: - Description: Mostrar coordinadas de la selección - Info: - - 'Uso: /res select coords' - size: - Description: Mostrar tamaño de la selección - Info: - - 'Uso: /res select size' - cost: - Description: Mostrar el coste de la selección - Info: - - 'Uso: /res select cost' - vert: - Description: Expandir selección verticalmente - Info: - - 'Uso: /res select vert' - - 'Expande tanto como estas autorizado (por arriba y por abajo).' - sky: - Description: Expandir selección al cielo. - Info: - - 'Uso: /res select sky' - - 'Expande tan alto como estas autorizado.' - bedrock: - Description: Expandir selección al bedrock. - Info: - - 'Uso: /res select bedrock' - - 'Expande tan bajo como estas autorizado.' - expand: - Description: Expandir selección en una dirección. - Info: - - 'Uso: /res select expand ' - - 'Expande en la dirección en la que estás mirando.' - shift: - Description: Mover selección en una dirección. - Info: - - 'Uso: /res select shift ' - - 'Mueve la selección de en la dirección en la que estás mirando.' - chunk: - Description: Seleccionar el chunk en el cual estás ahora. - Info: - - 'Uso: /res select chunk' - - 'Selecciona el chunk en el cual estás ahora.' - residence: - Description: Seleccionar un área existente en una residencia. - Info: - - 'Uso: /res select ' - - 'Selecciona un área existente en una residencia.' - create: #creation command - Description: Crear residencias - Info: - - 'Uso: /res create ' - remove: #remove command - Description: Eliminar residencias - Info: - - 'Uso: /res remove ' - removeall: - Description: Eliminar todas las residencias de un jugador. - Info: - - 'Uso: /res removeall [jugador]' - - 'Elimina todas las residencias de un jugador.' - - 'Necesita /resadmin si lo utilizas en alguien otro que tí.' - confirm: - - 'Uso: /res confirm' - - 'Confirma la eliminación de una residencia.' - subzone: - Description: Crear subzonas en residencias. - Info: - - 'Uso: /res subzone [nombre subzona]' - - 'Si el nombre de residencia no se especifica, intentará utilizar la residencia en la cual estás.' - area: - Description: Gestiona áreas físicas de una residencia. - SubCommands: - list: - Description: Listear las áreas físicas de una residencia. - Info: - - 'Uso: /res area list [residencia] ' - listall: - Description: Listear coordinadas y otras informaciones. - Info: - - 'Uso: /res area listall [residencia] ' - add: - Description: Añadir áreas físicas a una residencia. - Info: - - 'Uso: /res area add [residencia] [IDdelArea]' - - 'Tienes que seleccionar dos puntos primero.' - remove: - Description: Eliminar áreas físicas de una residencia - Info: - - 'Uso: /res area remove [residencia] [IDdelArea]' - replace: - Description: Reemplazar áreas físicas en una residencia - Info: - - 'Uso: /res area replace [residencia] [IDdelArea]' - - 'Tienes que seleccionar dos puntos primero.' - - 'El reemplazamiento de un área cobrará la diferencia de tamaño si la nueva és más grande.' - info: - Description: Mostrar información de una residencia. - Info: - - 'Uso: /res info ' - - 'Si no especifica se mostrará la información de la residencia en la que estás.' - limits: - Description: Mostrar límites. - Info: - - 'Uso: /res limits' - - 'Muestra tus límites de creación y gestionamiento de residencias.' - message: - Description: Gestionar mensajes de residencia - Info: - - 'Uso: /res message [enter/leave] [mensaje]' - - 'Poner el mensaje de entrada (enter) o de salida (leave) de una residencia.' - - 'Usage: /res message remove [enter/leave]' - - 'Eliminar el mensaje de entrada (enter) o de salida (leave).' - lease: - Description: Gestionar arrendamientos de residencias - Info: - - 'Uso: /res lease [renew/cost] [residencia]' - - '/res lease cost mostrará el coste de renovación de un arrendamiento.' - - '/res lease renew renovará el arrendamiento de una residencia si tienes suficiente dinero.' - SubCommands: - set: - Description: Poner el tiempo de arrendamiento (sólo admins) - Info: - - 'Uso: /resadmin lease set [residencia] [#días/infinite]' - - 'Pone el tiempo de arrendamiento de [residencia] a un número de días, o infinito (infinite)' - bank: - Description: Gestionar el dinero en una residencia - Info: - - 'Uso: /res bank [deposit/withdraw] [cantidad]' - - 'Depositar (deposit) o cobrar (withdraw) dinero.' - - 'Tienes que estar en la residencia.' - - 'Tienes que tener el flag +bank.' - tp: - Description: Teletransportar a una residencia - Info: - - 'Uso: /res tp [residencia]' - - 'Teletransportate a una residencia. Tienes que tener el flag +tp o ser admin.' - - 'Tu grupo tambien tiene que ser autorizado a teletransportarse.' - tpset: - Description: Establecer el punto de teletransporte de una residencia - Info: - - 'Uso: /res tpset' - - 'Establecerá el punto de teletransporte de una residencia al punto en el que estás.' - - 'Tienes que estar en la residencia para usar este comando.' - - 'Tambien tienes que ser el propietario o tener el flag +admin.' - set: - Description: Establecer flags generales para una residencia - Info: - - 'Uso: /res set [flag] [true/false/remove]' - - 'Para ver una lista de flags, utiliza /res flags ?' - - 'Los flags se aplican a cualquier jugador que no tiene flags especificos (ver /res pset ?).' - pset: - Description: Establecer flags especificos para una residencia - Info: - - 'Uso: /res pset [jugador] [flag] [true/false/remove]' - - 'Uso: /res pset [jugador] removeall' - - 'Para ver una lista de flags, utiliza /res flags ?' - gset: - Description: Establecer flags especificos para un grupo en una residencia - Info: - - 'Uso: /res gset [grupo] [flag] [true/false/remove]' - - 'Para ver una lista de flags, utiliza /res flags ?' - lset: - Description: Cambiar opciones de blacklist y ignorelist - Info: - - 'Uso: /res lset [blacklist/ignorelist] [material]' - - 'Uso: /res lset info' - - 'Blacklistear un material evita que sea puesto en una residencia.' - - 'Ignorelist hace que un material no sea protegido por la residencia.' - flags: - Description: List of flags - Info: - - 'Para estos flags, normalmente, true autoriza la acción y false la denega.' - - 'build - autoriza o denega construcción' - - 'use - autoriza o denega el uso de puertas, botones, palancas, etc.' - - 'move - autoriza o denega movimiento' - - 'container - autoriza o denega el uso de cofres, hornos, dispensadores, etc.' - - 'trusted - Gives build, use, move, container and tp flags' - - 'place - autoriza o denega plazamiento de bloques, anula el flag build' - - 'destroy - autoriza o denega destrucción de bloques, anula el flag build' - - 'pvp - autoriza o denega PvP (combate jugador contra jugador)' - - 'tp - autoriza o denega teletransportación' - - 'admin - autoriza o denega el cambio de flags para un jugador' - - 'subzone - autoriza o denega a un jugador a crear subzonas' - - 'monsters - autoriza o denega apariciones de monstruos' - - 'animals - autoriza o denega apariciones de animales' - - 'healing - establecer esto a true dara vida a los jugadores en la residencia' - - 'tnt - autoriza o denega explosiones de TNT' - - 'creeper - autoriza o denega explosiones de creepers' - - 'ignite - autoriza o denega encender fuegos' - - 'firespread - autoriza o denega la propagación del fuego' - - 'bucket - autoriza o denega el uso de cubos' - - 'flow - autoriza o denega corriente de líquidos' - - 'lavaflow - autoriza o denega corriente de lava, anula el flag flow' - - 'waterflow - autoriza o denega corriente de aguam, anula el flag flow' - - 'damage - autoriza o denega el daño de entidades' - - 'piston - autoriza o denega empujamiento y retracción de bloques por pistones' - - 'hidden - oculta la residencia de listas' - - 'cake - allows or denys players to eat cake' - - 'lever - allows or denys players to use levers' - - 'button - allows or denys players to use buttons' - - 'diode - allows or denys players to use redstone repeaters' - - 'door - allows or denys players to use doors and trapdoors' - - 'table - allows or denys players to use workbenches' - - 'enchant - allows or denys players to use enchanting tables' - - 'brew - allows or denys players to use brewing stands' - - 'bed - allows or denys players to use beds' - - 'button - allows or denys players to use buttons' - - 'pressure - allows or denys players to use pressure plates' - - 'note - allows or denys players to use note blocks' - - 'redstone - Gives lever, diode, button, pressure, note flags' - - 'craft - Gives table, enchant, brew flags' - list: - Description: Listear residencias - Info: - - 'Uso: /res list ' - - 'Listea todas la residencias de un jugador (salvo las que están ocultas).' - - 'Si listeas tus propias residencias, verás las residencias ocultas.' - - 'Para listear las residencias de todos, utiliza /res listall.' - listhidden: - Description: Listear residencias ocultas (sólo admins) - Info: - - 'Uso: /res listhidden ' - - 'Listea las residencias ocultas de un jugador.' - listall: - Description: Listear TODAS las residencias - Info: - - 'Uso: /res listall ' - - 'Listea todas las residencias en el servidor (salvo ocultas que tu no tienes)' - listallhidden: - Description: Listear TODAS las residencias ocultas (sólo admins) - Info: - - 'Uso: /res listhidden ' - - 'Listea todas las residencias ocultas en el servidor.' - sublist: - Description: Listear subzonas de la residencia - Info: - - 'Uso: /res sublist ' - - 'Listea las subzonas de una residencia.' - default: - Description: Establecer los flags por defecto - Info: - - 'Uso: /res default ' - - 'Establecer los flags por defecto a una residencia. Tienes que ser el propietario o admin para esto.' - rename: - Description: Renombrar una residencia. - Info: - - 'Uso: /res rename [nombre] [nuevoNombre]' - - 'Tienes que ser el propietario o admin para esto.' - - 'El nombre no debe estar usado por otra residencia.' - mirror: - Description: Copiar los flags de una residencia. - Info: - - 'Uso: /res mirror [residencia fuente] [residencia objetiva]' - - 'Copia los flags de una residencia a otra. Tienes que ser el propietario de las dos residencias o admin para esto.' - market: - Description: Comprar, vender o alquilar residencias - Info: - - 'Uso: /res market ? para más información' - SubCommands: - info: - Description: Información sobre la economía de una residencia - Info: - - 'Uso: /res market info [residencia]' - - 'Muestra si una residencia está a la venta o en alquiler, y a qué precio.' - list: - Description: Listea residencias alquilables y a la venta. - Info: - - 'Uso: /res market list' - sell: - Description: Poner en venta a una residencia - Info: - - 'Uso: /res market sell [residencia] [cantidad]' - - 'Pone a la venta la residencia para [cantidad] de dinero.' - - 'Otro jugador puede comprarla con /res market buy' - buy: - Description: Comprar una residencia - Info: - - 'Uso: /res market buy [residencia]' - - 'Compra la residencia si está a la venta.' - unsell: - Description: Quita la residencia del mercado. - Info: - - 'Uso: /res market unsell [residencia]' - rent: - Description: Alquilar a una residencia - Info: - - 'Uso: /res market rent [residencia] ' - - 'A;quilar a una residencia. Renovacion auto puede ser true (si) o false (no).' - rentable: - Description: Poner en alquiler a una residencia. - Info: - - 'Uso: /res market rentable [residencia] [coste] [días] ' - - 'Pone una residencia en alquiler por [coste] dinero y para cada [días] días. Si es true, el comprador puede renovar automaticámente.' - release: - Description: Quita una residencia del mercado del alquiler. - Info: - - 'Uso: /res market release [residencia]' - - 'Si eres el comprador, paras de alquilar a esa residencia.' - - 'Si eres el propietario, los demás no podrán alquilar la residencia.' - current: - Description: Mostrar la residencia en la cual estás ahora. - Info: - - 'Uso: /res current' - lists: - Description: Listas de permisiones predeterminadas - Info: - - 'Permisiones predeterminadas que puedes ser puestas sobre residencias' - SubCommands: - add: - Description: Añadir una lista - Info: - - 'Uso: /res lists add ' - remove: - Description: Quitar una lista - Info: - - 'Uso: /res lists remove ' - apply: - Description: Aplicar una lista sobre una residencia - Info: - - 'Uso: /res lists apply ' - set: - Description: Establecer un flag - Info: - - 'Uso: /res lists set ' - pset: - Description: Establecer un flag para un jugador - Info: - - 'Uso: /res lists pset ' - gset: - Description: Establecer un flagp para un grupo - Info: - - 'Uso: /res lists gset ' - view: - Description: Ver una lista - Info: - - 'Uso: /res lists view ' - server: - Description: Poner la residencia como apropiada por el servidor (sólo admins) - Info: - - 'Uso: /resadmin server [residencia]' - - 'Poner una residencia apropiada por el servidor.' - setowner: - Description: Cambiar el propietario de una residencia (sólo admins). - Info: - - 'Uso: /resadmin setowner [residencia] [jugador]' - resreload: - Description: Recargar residencias (sólo admins). - Info: - - 'Uso: /resreload' - resload: - Description: Cargar el fichero de residencias (INSEGURO, sólo admins). - Info: - - 'Uso: /resload' - - 'INSEGURO: no guarda las residencias antes.' - - 'Carga las residencias del fichero despues de haber hecho cambios en el fichero.' - version: - Description: Ver la versíon de Residence - Info: - - 'Uso: /res version' \ No newline at end of file +Language: + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. + NewPlayerInfo: '&ePor favor, Usa el hacha de madera para señalar las esquinas opuestas + de tu res y ejecuta el comando &2/res create [nombre]' + InvalidResidence: Residencia inválida... + InvalidSubzone: Subzona inválida... + InvalidDirection: Dirección inválida... + InvalidChannel: Canal inválido... + InvalidAmount: Cantidad inválida... + InvalidCost: Coste inválido... + InvalidDays: Número de días inválido... + InvalidMaterial: Material inválido... + InvalidBoolean: Valor inválido, debe ser true(t) o false(f) + InvalidArea: Ãrea inválida... + InvalidGroup: Grupo inválido... + # Replace all text with '' to disable this message + CantPlaceLava: No puedes colocar lava fuera de las residences y a una altura mayor del nivel %1 + # Replace all text with '' to disable this message + CantPlaceWater: No puedes colocar agua fuera de las residences y a una altura mayor del nivel %1 + InvalidMessageType: El tipo de mensaje debe ser enter o remove + InvalidFlag: Flag inválido... + InvalidFlagState: Estado de flag inválido, debe ser true(t), false(f), o remove(r) + AreaExists: El nombre de área ya existe. + AreaCreate: Ãrea de residencia creada, ID %1 + AreaDiffWorld: El área está en un mundo diferente que la residencia. + AreaCollision: Ãrea colisiona con la residencia %1 + AreaSubzoneCollision: Area colisiona con la subzona %1 + AreaNonExist: No existe tal zona. + AreaInvalidName: Nombre de área inválido... + AreaToSmallTotal: El área seleccionada es más pequeña de la permitida (%1) + AreaToSmallX: La longitud "x" es demasiado pequeña. %1 permitida %2 + AreaToSmallY: La longitud "altura" es demasiado pequeña. %1 permitida %2 + AreaToSmallZ: La longitud "z" es demasiado pequeña. %1 permitida %2 + AreaRename: Ãrea renombrada de %1 a %2 + AreaRemove: Ãrea eliminada %1 ... + AreaRemoveLast: No se puede eliminar el último área de una residencia. + AreaNotWithinParent: El área no está dentro del área principal. + AreaUpdate: Ãrea actualizada... + AreaMaxPhysical: Has alcanzado el máximo de áreas físicas para tu residencia. + AreaSizeLimit: El espacio del área no se encuentra dentro de los límites permitidos. + AreaHighLimit: No puedes hacer una protección tan alta, tu límite es %1 + AreaLowLimit: No puedes hacer una protección tan profunda, tu límite es %1 + NotInResidence: No estás en una residencia. + Kicked: Haz sido kickeado de la residencia + InResidence: Actualmente te encuentras en la residencia %1 + ResidenceOwnerChange: La residencia propiedad de %1 ahora es del jugador %2 + NonAdmin: No eres un administrador de residencias. + AdminOnly: Sólo los administradores tienen acceso a este comando. + ChatDisabled: Chat de residencia desactivado... + SubzoneRename: Subzona renombrada de %1 a %2 + SubzoneRemove: Subzona %1 eliminada. + SubzoneCreate: Subzona %1 creada + SubzoneCreateFail: No se puede crear la subzona %1 + SubzoneExists: La subzona %1 ya existe. + SubzoneCollide: La subzona colisiona con otra subzona llamada %1 + SubzoneMaxDepth: Has llegado a la profundidad máxima permitida en una subzona. + SubzoneSelectInside: Los dos puntos de selección han de estar dentro de la residencia. + SelectPoints: Selecciona los dos puntos antes de usar este comando! + SelectOverlap: '&cLos puntos seleccionado coinciden con la region &e%1' + SelectionSuccess: Selección realizada! + SelectionFail: Comando de selección inválido... + SelectionBedrock: Selección expandida al máximo límite inferior permitido. + SelectionSky: Selección expandida al máximo límite superior permitido. + SelectionArea: Seleccionado el area %1 de la residencia %2 + SelectDiabled: No tienes acceso a los comandos de selección. + NoPermission: No tienes permisos para hacer esto. + OwnerNoPermission: El propietario no tiene permiso para esto. + ParentNoPermission: No tienes permisos para realizar cambios en la zona principal. + MessageChange: Mensaje cambiado... + FlagSet: Flag establecido... + FlagCheckTrue: Flag %1 aplicado al jugador %2 para la residencia %3, valor = %4 + FlagCheckFalse: Flag %1 no aplicado al jugador %2 para la residencia. + FlagsCleared: Flags borrados. + FlagsDefault: Flags establecidos por defecto. + Usage: Command Usage + InvalidHelp: Página de ayuda inválida... + SubCommands: Subcomandos + InvalidList: Tipo de lista desconocida, debe ser blacklist o ignorelist. + MaterialGet: El nombre del material para el ID %1 es %2 + MarketDisabled: Economía desactivada! + MarketList: Lista del mercado + ResidenceList: '&a%1%2 &e- %3: %4' + Rented: ' &a(Rentado)' + SignTopLine: '[market]' + SignDateFormat: YY/MM/dd HH:mm + SignForRentTopLine: '&8En Renta' + SignForRentPriceLine: '&8%1&f/&8%2&f/&8%3' + SignForRentResName: '&8%1' + SignForRentBottomLine: '&9Disponible' + SignRentedAutorenewTrue: '&2' + SignRentedAutorenewFalse: '&c' + SignRentedTopLine: '%1' + SignRentedPriceLine: '&8%1&f/&8%2&f/&8%3' + SignRentedResName: '&8%1' + SignRentedBottomLine: '&1%1' + SignForSaleTopLine: '&8A la venta' + SignForSalePriceLine: '&8%1' + SignForSaleResName: '&8%1' + SignForSaleBottomLine: '&5Disponible' + SelectionTool: Herramienta de selección + InfoTool: Información de la herramienta + NoBankAccess: No tienes acceso al banco. + NotEnoughMoney: No tienes suficiente dinero. + BankNoMoney: No tienes suficiente dinero en el banco. + BankDeposit: Has depositado %1 en el banco de la residencia. + BankWithdraw: Has retirado %1 del banco de la residencia. + MoneyCharged: Cargo de %1 en tu cuenta %2. + MoneyAdded: Conseguiste %1 en la cuenta de %2. + MoneyCredit: Crédito de %1 en tu cuenta %2. + RentReleaseInvalid: La residencia %1 no está en alquiler. + RentSellFail: No se puede vender una residencia si está en alquiler. + SellRentFail: No se puede alquilar una residencia si está a la venta. + OwnerBuyFail: No puedes comprar tu propia tierra! + OwnerRentFail: No puedes alquilar tu propia tierra! + AlreadySellFail: Residencia ya a la venta! + ResidenceBought: Has comprado la residencia %1 + ResidenceBuy: '%1 ha comprado la residencia %2' + ResidenceBuyTooBig: Esta residencia tiene áreas más grandes de lo que tu tienes permitido. + ResidenceNotForSale: La residencia no está a la venta. + ResidenceForSale: Residencia %1 está a la venta por %2 + ResidenceStopSelling: La residencia ya no está a la venta + ResidenceTooMany: Ya has alcanzado el número máximo de residencias permitidas. + ResidenceMaxRent: Ya estás alquilando el número máximo de residencias permitidas. + ResidenceAlreadyRent: La residencia ya está en alquiler... + ResidenceNotForRent: La residencia no está en alquiler... + ResidenceNotRented: Residencia no alquilada. + ResidenceUnrent: La residencia %1 ha dejado de estar en alquiler. + ResidenceRemoveRentable: La residencia %1 ya ha dejado de alquilarse. + ResidenceForRentSuccess: La residencia %1 está ahora en alquiler %2 cada %3 días. + ResidenceRentSuccess: Has alquilado la residencia %1 por %2 días. + ResidenceAlreadyRented: La residencia %1 ha sido alquilada a %2 + ResidenceAlreadyExists: La residencia llamada %1 ya existe. + ResidenceCreate: Has creado la residencia %1! + ResidenceRename: Residencia renombrada de %1 a %2 + ResidenceRemove: La residencia %1 ha sido eliminada... + RentDisabled: Alquiler desactivado... + RentDisableRenew: La residencia %1 no volverá a realquilarse cuando expire. + RentEnableRenew: La residencia %1 automáticamente volverá a alquilarse cuando expire. + RentableDisableRenew: '%1 ya no renovará su estado cuando expire.' + RentableEnableRenew: '%1 automáticamente renovará su estado cuando expire.' + LandForSale: Tierra a la venta + SellAmount: Cantidad de venta + LeaseExpire: Caducidad de arrendamiento + RentExpire: Tiempo de caducidad de venta + RentableAutoRenew: Autorenovamiento de arrendamiento + RentAutoRenew: Autorenovación de alquiler + RentableLand: Tierra en alquiler + ListMaterialAdd: '%1 incorporado a la residencia %2' + ListMaterialRemove: '%1 eliminado de la residencia %2' + ItemBlacklisted: El uso de este item aquí no está permitido. + RentedModifyDeny: No puedes modificar una residencia alquilada. + WorldPVPDisabled: PVP del mundo desactivado. + NoPVPZone: Zona no PVP. + FlagDeny: No tienes el permiso de %1 aquí. + FlagSetDeny: El propietario no tiene acceso al flag %1 + SelectPoint: Punto de selección %1 situado + ResidenceChat: Chat residencia activado %1 + ResidenceMoveDeny: No tienes permiso de movimiento para la residencia %1 + ResidenceFlagDeny: No tienes el permiso %1 para la residencia %2 + TeleportDeny: No tienes acceso al teletransporte. + TeleportSuccess: Teletransportado! + TeleportConfirm: '&eEste teletransporte no es seguro, caerás desde &c%1 &ebloques. + Uso &2/res tpconfirm &epara teletransportarte.' + TeleportStarted: '&eTeletransporte a %1 comenzado, no te muevas durante %2 sec.' + TeleportCanceled: '&eTeletransporte cancelado!' + NoTeleportConfirm: No hay teletransportes pendiente de confirmación! + TeleportNear: Teletransportado a la residencia más cercana. + TeleportNoFlag: No tienes acceso al teletransporte de esta residencia. + SetTeleportLocation: Localización de teletransporte establecida... + HelpPageHeader: Páginas de ayuda - %1 - Página <%2 de %3> + ListExists: La lista ya existe... + ListRemoved: Lista eliminada... + ListCreate: Lista creada %1 + LeaseRenew: Contrato de arrendamiento válido hasta el %1 + LeaseRenewMax: Contrato de renovación al máximo permitido + LeaseNotExpire: No hay tal arrendamiento, o no tiene fecha de expiración. + LeaseRenewalCost: El coste de renovación para el área %1 es de %2 + LeaseInfinite: Tiempo de arrendamiento establecido en infinito... + PermissionsApply: Permisos aplicados a la residencia. + PhysicalAreas: Ãreas físicas + CurrentArea: Ãrea actual + TotalWorth: Valor total de la residencia:&3 %1 (%2) + NotOnline: El jugador objetivo ha de estar online + ResidenceGiveLimits: No puedes darle la residencia al jugador objetivo porque está fuera de los límites del jugador. + ResidenceGive: Residencia %1 dada al jugador %2 + ResidenceRecieve: Has recibido la residencia %1 del jugador %2 + ResidenceListAllEmpty: No hay residencias existentes en el servidor... + InvalidPage: Página inválida... + NextPage: Página siguiente + NextInfoPage: '&2| &eSiguiente página &2>>>' + PrevInfoPage: '&2<<< &ePágina anterior &2|' + RemovePlayersResidences: Se eliminaron todas las residencias que pertenecen al jugador %1 + GenericPage: Página %1 de %2 + ResidenceRentedBy: En alquiler por %1 + InvalidCharacters: Caracteres no válidos detectados... + InvalidNameCharacters: El nombre contiene caracteres no permitidos... + DeleteConfirm: Si estás seguro que deseas eliminar la residencia %1, Usa "/res confirm" para confirmarlo. + SelectTooHigh: La selección está por encima de la parte superior de los límites del mapa. + SelectTooLow: La selección está por debajo de la parte inferior de los límites del mapa. + WorldEditNotFound: WorldEdit no fue detectado. + NoResHere: No hay ninguna residencia aquí. + DeleteSubzoneConfirm: Si estás seguro que deseas eliminar la subzona %1, Usa "/res confirm" para confirmarlo. + SubzoneOwnerChange: La subzona propiedad de %1 ahora es del jugador %2 + CoordsTop: X:%1 Y:%2 Z:%3 + CoordsBottom: X:%1 Y:%2 Z:%3 + AdminToggle: Resadmin automatico activado %1 + NoSpawn: No tienes permisos para moverte en el punto de spawn. Recolocando + CompassTargetReset: Tu brújula ha sido reseteada + CompassTargetSet: Tu brújula ahora apunta a %1 + # The below lines are mostly a word bank for various uses. + Description: Descripción + Land: Tierra + Cost: Coste + Selection: Selección + Total: Total + Size: Tamaño + Expanding: Expandiendo + Contracting: Contrayendo + North: Norte + West: Oeste + South: Sur + East: Este + Shifting: Moviendo + Up: Arriba + Down: Abajo + Error: Error + Flags: Flags + Your: Tu/tus + Group: Grupo + Others: Otros + Primary: Primario + Secondary: Segundario + Moved: Movido + Status: Estado + Available: Disponible + 'On': 'On' + 'Off': 'Off' + Name: Nombre + Lists: Listas + Residences: Residencias + Residence: Residencia + Count: Número + Owner: Propietario + World: Mundo + Subzones: Subzonas + CoordsT: coordenadas superiores + CoordsB: menores coordenadas + TurnOn: 'on' + TurnOff: 'off' + LimitsTop: '----------------------------------------' + LimitsPGroup: '&7- &ePermisos de grupos:&3 %1' + LimitsRGroup: '&7- &eGrupos de residencia:&3 %1' + LimitsAdmin: '&7- &eResidence Admin:&3 %1' + LimitsCanCreate: '&7- &ePuedes crear residences:&3 %1' + LimitsMaxRes: '&7- &eMáximas residencess:&3 %1' + LimitsMaxEW: '&7- &eMáximo tamaño este/oeste:&3 %1' + LimitsMaxNS: '&7- &eMáximo tamaño norte/sur:&3 %1' + LimitsMaxUD: '&7- &eMáximo tamaño arriba/abajo:&3 %1' + LimitsMinMax: '&7- &eMáxima/mínima protección en altura:&3 %1 to %2' + LimitsMaxSub: '&7- &eMáxima profundidad de subzona:&3 %1' + LimitsMaxRents: '&7- &eMax Rents:&3 %1' + LimitsEnterLeave: '&7- &ePuede establecer Enter/Leave mensajes:&3 %1' + LimitsNumberOwn: '&7- &eNúmero de residences que posees:&3 %1' + LimitsCost: '&7- &eCoste de residencia por bloque:&3 %1' + LimitsSell: '&7- &eCoste de venta de residencia por bloque:&3 %1' + LimitsFlag: '&7- &ePermisos flag:&3 %1' + LimitsMaxDays: '&7- &eNúmero máximo de arrendamientos al día:&3 %1' + LimitsLeaseTime: '&7- &eTiempo de arrendamiento dado en renovación:&3 %1' + LimitsRenewCost: '&7- &eRCoste de renovación por bloque:&3 %1' + LimitsBottom: '----------------------------------------' + Gui: + Set: + Title: '&6%1% flags' + Pset: + Title: '&6%1% %2% flags' + Actions: + - '&2Click-izquierdo para activar' + - '&cClick-derecho para desactivar' + - '&eShift + click-izquierdo para quitar' + InformationPage: + TopLine: '&e---< &a %1 &e >---' + Page: '&e-----< %1 >-----' + NextPage: '&e-----< %1 >-----' + NoNextPage: '&e-----------------------' +CommandHelp: + Description: Contiene ayuda para residencia + SubCommands: + res: + Description: Comando principal + Info: + - Ver el wiki para más información. + - 'Wiki: residencebukkitmod.wikispaces.com' + - Utiliza /[comando] ? para ver más información. + SubCommands: + select: + Description: Comandos de selección + Info: + - Este comando selecciona áreas para hacer residencias. + - /res select [x] [y] [z] - selecciona un número de bloques alrededor de tí. + SubCommands: + coords: + Description: Mostrar coordinadas de la selección + Info: + - 'Uso: /res select coords' + size: + Description: Mostrar tamaño de la selección + Info: + - 'Uso: /res select size' + cost: + Description: Mostrar el coste de la selección + Info: + - 'Uso: /res select cost' + vert: + Description: Expandir selección verticalmente + Info: + - 'Uso: /res select vert' + - Expande tanto como estes autorizado (por arriba y por abajo). + sky: + Description: Expandir selección al cielo. + Info: + - 'Uso: /res select sky' + - Expande tan alto como estes autorizado. + bedrock: + Description: Expandir selección al bedrock. + Info: + - 'Uso: /res select bedrock' + - Expande tan bajo como estes autorizado. + expand: + Description: Expandir selección en una dirección. + Info: + - 'Uso: /res select expand ' + - Expande en la dirección en la que estás mirando. + shift: + Description: Mover selección en una dirección. + Info: + - 'Uso: /res select shift ' + - Mueve la selección de en la dirección en la que estás mirando. + chunk: + Description: Seleccionar el chunk en el cual estás ahora. + Info: + - 'Uso: /res select chunk' + - Selecciona el chunk en el cual estás ahora. + residence: + Description: Seleccionar un área existente en una residencia. + Info: + - 'Uso: /res select ' + - Selecciona un área existente en una residencia. + worldedit: + Description: Convertir selección de WorldEdit a selección de residencia. + Info: + - Uso /res select worldedit + - Convertir selección de WorldEdit a selección de residencia. + create: + Description: Crear residencias + Info: + - 'Uso: /res create ' + remove: + Description: Eliminar residencias + Info: + - 'Uso: /res remove ' + removeall: + Description: Eliminar todas las residencias de un jugador. + Info: + - 'Uso: /res removeall [jugador]' + - Elimina todas las residencias de un jugador. + - Necesita /resadmin si lo utilizas en alguien otro que tí. + confirm: + Description: Confirma la eliminación del residencia. + info: + - 'Uso: /res confirm' + - Confirma la eliminación del residencia. + subzone: + Description: Crear subzonas en residencias. + Info: + - 'Uso: /res subzone [nombre subzona]' + - Si el nombre de residencia no se especifica, intentará utilizar la residencia en la cual estás. + area: + Description: Gestiona áreas físicas de una residencia. + SubCommands: + list: + Description: Listear las áreas físicas de una residencia. + Info: + - 'Uso: /res area list [residencia] ' + listall: + Description: Listear coordinadas y otras informaciones. + Info: + - 'Uso: /res area listall [residencia] ' + add: + Description: Añadir áreas físicas a una residencia. + Info: + - 'Uso: /res area add [residencia] [IDdelArea]' + - Tienes que seleccionar dos puntos primero. + remove: + Description: Eliminar áreas físicas de una residencia + Info: + - 'Uso: /res area remove [residencia] [IDdelArea]' + replace: + Description: Reemplazar áreas físicas en una residencia + Info: + - 'Uso: /res area replace [residencia] [IDdelArea]' + - Tienes que seleccionar dos puntos primero. + - El reemplazamiento de un área cobrará la diferencia de tamaño si la nueva es más grande. + info: + Description: Mostrar información de una residencia. + info: + - 'Uso: /res info ' + - No pongas si quieres ver la información de la residencia en la que te encuentras. + limits: + Description: Mostrar límites. + info: + - 'Uso: /res limits' + - Muestra los límites de tu residencia en la creación y mantenimiento. + message: + Description: Gestionar mensajes de residencia + info: + - 'Uso: /res message [enter/leave] [mensaje]' + - Establece el mensaje de entrada o salida de la residencia. + - 'Uso: /res message remove [enter/leave]' + - Elimina el mensaje de entrada o salida. + lease: + Description: Gestionar arrendamientos de residencias + info: + - 'Usoge: /res lease [renew/cost] [residencia]' + - /res lease cost mostrará el coste de renovar un arrendamiento. + - /res lease renew renovará el arrendamiento. + SubCommands: + set: + Description: Poner el tiempo de arrendamiento (sólo admins) + Info: + - 'Uso: /resadmin lease set [residencia] [#días/infinite]' + - Pone el tiempo de arrendamiento de [residencia] a un número de días, o infinito (infinite) + bank: + Description: Gestionar el dinero en una residencia + Info: + - 'Uso: /res bank [deposit/withdraw] [cantidad]' + - Depositar (deposit) o cobrar (withdraw) dinero. + - Tienes que estar en la residencia. + - Tienes que tener el flag +bank. + tp: + Description: Teletransportar a una residencia + Info: + - 'Uso: /res tp [residencia]' + - Teletransportate a una residencia. Tienes que tener el flag +tp o ser admin. + - Tu grupo también tiene que ser autorizado a teletransportarse. + tpconfirm: + Description: Ignore unsafe teleportation warning and teleport anyways + Info: + - 'Usoge: /res tpconfirm' + - Teleports you to a residencia, when teleportation is unsafe. + tpset: + Description: Establecer el punto de teletransporte de una residencia + Info: + - 'Uso: /res tpset' + - Establecerá el punto de teletransporte de una residencia al punto en el que estás. + - Tienes que estar en la residencia para usar este comando. + - Tambien tienes que ser el propietario o tener el flag +admin. + set: + Description: Establecer flags generales para una residencia + Info: + - 'Uso: /res set [flag] [true/false/remove]' + - Para ver una lista de flags, utiliza /res flags ? + - Los flags se aplican a cualquier jugador que no tiene flags específicos (ver /res pset ?). + pset: + Description: Establecer flags especificos para una residencia + Info: + - 'Uso: /res pset [jugador] [flag] [true/false/remove]' + - 'Uso: /res pset [jugador] removeall' + - Para ver una lista de flags, utiliza /res flags ? + gset: + Description: Establecer flags especificos para un grupo en una residencia + Info: + - 'Uso: /res gset [grupo] [flag] [true/false/remove]' + - Para ver una lista de flags, utiliza /res flags ? + lset: + Description: Cambiar opciones de blacklist y ignorelist + Info: + - 'Uso: /res lset [blacklist/ignorelist] [material]' + - 'Uso: /res lset info' + - Blacklistear un material evita que sea puesto en una residencia. + - Ignorelist hace que un material no sea protegido por la residencia. + flags: + Description: List of flags + Info: + - Para estos flags, normalmente, true autoriza la acción y false la denega. + - build - autoriza o denega construcción + - use - autoriza o denega el uso de puertas, botones, palancas, etc. + - move - autoriza o denega movimiento + - container - autoriza o denega el uso de cofres, hornos, dispensadores, etc. + - trusted - Gives build, use, move, container and tp flags + - place - autoriza o denega plazamiento de bloques, anula el flag build + - destroy - autoriza o denega destrucción de bloques, anula el flag build + - pvp - autoriza o denega PvP (combate jugador contra jugador) + - tp - autoriza o denega teletransportación + - admin - autoriza o denega el cambio de flags para un jugador + - subzone - autoriza o denega a un jugador a crear subzonas + - monsters - autoriza o denega apariciones de monstruos + - animals - autoriza o denega apariciones de animales + - healing - establecer esto a true dará vida a los jugadores en la residencia + - tnt - autoriza o denega explosiones de TNT + - creeper - autoriza o denega explosiones de creepers + - ignite - autoriza o denega encender fuegos + - firespread - autoriza o denega la propagación del fuego + - bucket - autoriza o denega el uso de cubos + - flow - autoriza o denega corriente de líquidos + - lavaflow - autoriza o denega corriente de lava, anula el flag flow + - waterflow - autoriza o denega corriente de agua, anula el flag flow + - damage - autoriza o denega el daño de entidades + - piston - autoriza o denega empujamiento y retracción de bloques por pistones + - hidden - oculta la residencia de listas + - cake - autoriza o denega el poder comer tartas + - lever - autoriza o denega el uso de palancas + - button - autoriza o denegael uso de botones + - diode - autoriza o denega el uso de repeaters + - door - autoriza o denega el uso de puertas + - table - autoriza o denega el uso de mesas de crafteo + - enchant - autoriza o denega el uso de mesas de encantamiento + - brew - autoriza o denega el poder hacer pociones + - bed - autoriza o denega el uso de camas + - pressure - autoriza o denega el uso de placas de presión + - note - autoriza o denega el uso de bloques de notas + - redstone - Pone las banderas de redstone + - craft - Pone las bandera de crafteo + list: + Description: Listear residencias + Info: + - 'Uso: /res list ' + - Listea todas la residencias de un jugador (salvo las que están ocultas). + - Si listeas tus propias residencias, verás las residencias ocultas. + - Para listear las residencias de todos, utiliza /res listall. + listhidden: + Description: Listear residencias ocultas (sólo admins) + Info: + - 'Uso: /res listhidden ' + - Listea las residencias ocultas de un jugador. + listall: + Description: Listear TODAS las residencias + Info: + - 'Uso: /res listall ' + - Listea todas las residencias en el servidor (salvo ocultas que tu no tienes) + listallhidden: + Description: Listear TODAS las residencias ocultas (sólo admins) + Info: + - 'Uso: /res listhidden ' + - Listea todas las residencias ocultas en el servidor. + sublist: + Description: Listear subzonas de la residencia + Info: + - 'Uso: /res sublist ' + - Listea las subzonas de una residencia. + default: + Description: Establecer los flags por defecto + Info: + - 'Uso: /res default ' + - Establecer los flags por defecto a una residencia. Tienes que ser el propietario o admin para esto. + rename: + Description: Renombrar una residencia. + Info: + - 'Uso: /res rename [nombre] [nuevoNombre]' + - Tienes que ser el propietario o admin para esto. + - El nombre no debe estar Usodo por otra residencia. + mirror: + Description: Copiar los flags de una residencia. + Info: + - 'Uso: /res mirror [residencia fuente] [residencia objetiva]' + - Copia los flags de una residencia a otra. Tienes que ser el propietario de las dos residencias o admin para esto. + market: + Description: Comprar, vender o alquilar residencias + SubCommands: + info: + Description: Información sobre la economía de una residencia + Info: + - 'Uso: /res market info [residencia]' + - Muestra si una residencia está a la venta o en alquiler, y a qué precio. + list: + Description: Listea residencias alquilables y a la venta. + Info: + - 'Uso: /res market list' + sell: + Description: Poner en venta a una residencia + Info: + - 'Uso: /res market sell [residencia] [cantidad]' + - Pone a la venta la residencia para [cantidad] de dinero. + - Otro jugador puede comprarla con /res market buy + buy: + Description: Comprar una residencia + Info: + - 'Uso: /res market buy [residencia]' + - Compra la residencia si está a la venta. + unsell: + Description: Quita la residencia del mercado. + Info: + - 'Uso: /res market unsell [residencia]' + rent: + Description: Alquilar a una residencia + Info: + - 'Uso: /res market rent [residencia] ' + - Alquilar una residencia. Renovacion auto puede ser true (si) o false (no). + rentable: + Description: Poner en alquiler a una residencia. + Info: + - 'Uso: /res market rentable [residencia] [coste] [días] ' + - Pone una residencia en alquiler por [coste] dinero y para cada [días] días. Si es true, el comprador puede renovar automáticamente. + release: + Description: Quita una residencia del mercado del alquiler. + Info: + - 'Uso: /res market release [residencia]' + - Si eres el comprador, paras de alquilar a esa residencia. + - Si eres el propietario, los demás no podrán alquilar la residencia. + current: + Description: Mostrar la residencia en la cual estás ahora. + Info: + - 'Uso: /res current' + lists: + Description: Listas de permisiones predeterminadas + Info: + - Permisiones predeterminadas que puedes ser puestas sobre residencias + SubCommands: + add: + Description: Añadir una lista + Info: + - 'Uso: /res lists add ' + remove: + Description: Quitar una lista + Info: + - 'Uso: /res lists remove ' + apply: + Description: Aplicar una lista sobre una residencia + Info: + - 'Uso: /res lists apply ' + set: + Description: Establecer un flag + Info: + - 'Uso: /res lists set ' + pset: + Description: Establecer un flag para un jugador + Info: + - 'Uso: /res lists pset ' + gset: + Description: Establecer un flag para un grupo + Info: + - 'Uso: /res lists gset ' + view: + Description: Ver una lista + server: + Description: Poner la residencia como apropiada por el servidor (sólo admins) + Info: + - 'Uso: /resadmin server [residencia]' + - Poner una residencia apropiada por el servidor. + setowner: + Description: Cambiar el propietario de una residencia (sólo admins). + Info: + - 'Uso: /resadmin setowner [residencia] [jugador]' + resreload: + Description: Recargar residencias (sólo admins). + Info: + - 'Uso: /resreload' + resload: + Description: Cargar el fichero de residencias (INSEGURO, sólo admins). + Info: + - 'Uso: /resload' + - 'INSEGURO: no guarda las residencias antes.' + - Carga las residencias del fichero después de haber hecho cambios en el fichero. + ressignconvert: + Description: Convierte los carteles del plugin ResidenceSigns (solo admins). + Info: + - 'Uso: /ressignconvert' + version: + Description: Ver la versión de residencia + Info: + - 'Uso: /res version' \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 24f5d7776..9274c3f46 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -155,6 +155,8 @@ public static void LoadLang(String lang) { GetConfigString("Language.ResidenceList", "&a%1%2 &e- %3: %4", writer, conf, true); GetConfigString("Language.Rented", " &a(Rented)", writer, conf, true); + GetConfigString("Language.SignsUpdated", "&e%1 signs updated!", writer, conf, true); + GetConfigString("Language.SignTopLine", "[market]", writer, conf, true); GetConfigString("Language.SignDateFormat", "YY/MM/dd HH:mm", writer, conf, true); @@ -383,7 +385,7 @@ public static void LoadLang(String lang) { GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Description", "Display selected size", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Info", Arrays.asList("Usage: /res select size"), writer, conf, true); - + GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Description", "Turns on auto selection tool", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Info", Arrays.asList("Usage: /res select auto [playername]"), writer, conf, true); @@ -697,6 +699,11 @@ public static void LoadLang(String lang) { Arrays.asList("Usage: /res current"), writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.signupdate.Description", "Updated residence signs (Admin only)", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.signupdate.Info", + Arrays.asList("Usage: /res signupdate"), + writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.Description", "Predefined permission lists", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.Info", Arrays.asList("Predefined permissions that can be applied to a residence."), diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index b29c2b72a..3b56cb12a 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -190,7 +190,8 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com } if (cmd.equals("version")) { sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + this.getDescription().getVersion()); + sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + this + .getDescription().getVersion()); sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); sender.sendMessage(ChatColor.GREEN + "Maintained by: " + ChatColor.YELLOW + "Zrips"); @@ -219,9 +220,11 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com if (area != null) { area.getPermissions().setOwner(args[2], true); if (area.getParent() == null) { - sender.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "|" + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); + sender.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "|" + + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); } else { - sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange", ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split("\\.").length - 1] + " " + ChatColor.GREEN + "|" + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); + sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange", ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split( + "\\.").length - 1] + " " + ChatColor.GREEN + "|" + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); } } else { sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); @@ -324,6 +327,18 @@ public void run() { } return false; } + if (cmd.equals("signupdate")) { + if (args.length == 1) { + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + int number = SignUtil.updateAllSigns(); + player.sendMessage(language.getPhrase("SignsUpdated", String.valueOf(number))); + return true; + } + return false; + } if (cmd.equals("info")) { if (args.length == 1) { String area = rmanager.getNameByLoc(player.getLocation()); @@ -350,9 +365,12 @@ public void run() { return true; } if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { - player.sendMessage(language.getPhrase("FlagCheckFalse", ChatColor.YELLOW + args[2] + ChatColor.RED + "|" + ChatColor.YELLOW + pname + ChatColor.RED + "|" + ChatColor.YELLOW + args[1] + ChatColor.RED)); + player.sendMessage(language.getPhrase("FlagCheckFalse", ChatColor.YELLOW + args[2] + ChatColor.RED + "|" + ChatColor.YELLOW + pname + ChatColor.RED + + "|" + ChatColor.YELLOW + args[1] + ChatColor.RED)); } else { - player.sendMessage(language.getPhrase("FlagCheckTrue", ChatColor.GREEN + args[2] + ChatColor.YELLOW + "|" + ChatColor.GREEN + pname + ChatColor.YELLOW + "|" + ChatColor.YELLOW + args[1] + ChatColor.RED + "|" + (res.getPermissions().playerHas(pname, res.getPermissions().getWorld(), args[2], false) ? ChatColor.GREEN + "TRUE" : ChatColor.RED + "FALSE"))); + player.sendMessage(language.getPhrase("FlagCheckTrue", ChatColor.GREEN + args[2] + ChatColor.YELLOW + "|" + ChatColor.GREEN + pname + ChatColor.YELLOW + + "|" + ChatColor.YELLOW + args[1] + ChatColor.RED + "|" + (res.getPermissions().playerHas(pname, res.getPermissions().getWorld(), args[2], false) + ? ChatColor.GREEN + "TRUE" : ChatColor.RED + "FALSE"))); } return true; } @@ -523,7 +541,8 @@ public void run() { return false; } try { - player.sendMessage(ChatColor.GREEN + language.getPhrase("MaterialGet", ChatColor.GOLD + args[1] + ChatColor.GREEN + "|" + ChatColor.RED + Material.getMaterial(Integer.parseInt(args[1])).name() + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + language.getPhrase("MaterialGet", ChatColor.GOLD + args[1] + ChatColor.GREEN + "|" + ChatColor.RED + Material + .getMaterial(Integer.parseInt(args[1])).name() + ChatColor.GREEN)); } catch (Exception ex) { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); } @@ -591,7 +610,8 @@ public void run() { return true; } res.getPermissions().setOwner("Server_Land", false); - player.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "|" + ChatColor.YELLOW + "Server_Land" + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "|" + ChatColor.YELLOW + + "Server_Land" + ChatColor.GREEN)); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); @@ -661,7 +681,8 @@ private boolean commandResExpand(String[] args, boolean resadmin, Player player, if (area != null) { smanager.placeLoc1(player, area.getHighLoc()); smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + resName + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + resName + + ChatColor.GREEN)); } else { player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); } @@ -684,7 +705,8 @@ private boolean commandResExpand(String[] args, boolean resadmin, Player player, smanager.worldEdit(player); } } - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName())), areaName, resadmin); + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player + .getName())), areaName, resadmin); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); @@ -708,7 +730,8 @@ private boolean commandResContract(String[] args, boolean resadmin, Player playe if (area != null) { smanager.placeLoc1(player, area.getHighLoc()); smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + resName + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + resName + + ChatColor.GREEN)); } else { player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); } @@ -732,8 +755,10 @@ private boolean commandResContract(String[] args, boolean resadmin, Player playe smanager.worldEdit(player); } } - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName())), areaName, resadmin); - Residence.getSelectionManager().MakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), false); + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player + .getName())), areaName, resadmin); + Residence.getSelectionManager().MakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() + .getPlayerLoc2(player.getName()), false); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); @@ -751,7 +776,8 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); return true; } - if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player.isPermissionSet("residence.select")) && !resadmin) { + if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player + .isPermissionSet("residence.select")) && !resadmin) { player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); return true; } @@ -786,11 +812,13 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, } else if (args[1].equals("coords")) { Location playerLoc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); if (playerLoc1 != null) { - player.sendMessage(ChatColor.GREEN + language.getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + ", " + playerLoc1.getBlockY() + ", " + playerLoc1.getBlockZ() + ")"); + player.sendMessage(ChatColor.GREEN + language.getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + ", " + + playerLoc1.getBlockY() + ", " + playerLoc1.getBlockZ() + ")"); } Location playerLoc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); if (playerLoc2 != null) { - player.sendMessage(ChatColor.GREEN + language.getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + ", " + playerLoc2.getBlockY() + ", " + playerLoc2.getBlockZ() + ")"); + player.sendMessage(ChatColor.GREEN + language.getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + ", " + + playerLoc2.getBlockY() + ", " + playerLoc2.getBlockZ() + ")"); } return true; } else if (args[1].equals("chunk")) { @@ -866,7 +894,8 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, if (area != null) { smanager.placeLoc1(player, area.getHighLoc()); smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + resName + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + resName + + ChatColor.GREEN)); } else { player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); } @@ -900,12 +929,15 @@ private boolean commandResCreate(String[] args, boolean resadmin, Player player, ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); player.sendMessage(ChatColor.RED + language.getPhrase("SelectOverlap", String.valueOf(Region.getId()))); - Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); + Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), Region + .getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); - Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); + Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), Region + .getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); Residence.getSelectionManager().NewMakeBorders(player, lowLoc, highLoc, true); - Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), false); + Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() + .getPlayerLoc2(player.getName()), false); } else if (Residence.wg == null) { rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName()), resadmin); return true; @@ -945,7 +977,8 @@ private boolean commandResSubzone(String[] args, boolean resadmin, Player player player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; } - res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), zname, resadmin); + res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), + zname, resadmin); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); @@ -973,7 +1006,8 @@ private boolean commandResArea(String[] args, boolean resadmin, Player player, i if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { ClaimedResidence res = rmanager.getByName(args[2]); if (res != null) { - res.addArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName())), args[3], resadmin); + res.addArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( + player.getName())), args[3], resadmin); } else { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); } @@ -991,7 +1025,8 @@ private boolean commandResArea(String[] args, boolean resadmin, Player player, i if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { ClaimedResidence res = rmanager.getByName(args[2]); if (res != null) { - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName())), args[3], resadmin); + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() + .getPlayerLoc2(player.getName())), args[3], resadmin); } else { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); } @@ -1353,7 +1388,8 @@ private boolean commandResLease(String[] args, boolean resadmin, Player player, ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res == null || leasemanager.leaseExpires(args[2])) { int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] + ChatColor.YELLOW + "|" + ChatColor.RED + cost + ChatColor.YELLOW)); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] + ChatColor.YELLOW + "|" + ChatColor.RED + + cost + ChatColor.YELLOW)); } else { player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); } @@ -1367,7 +1403,8 @@ private boolean commandResLease(String[] args, boolean resadmin, Player player, } if (leasemanager.leaseExpires(area)) { int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + area + ChatColor.YELLOW + "|" + ChatColor.RED + cost + ChatColor.YELLOW)); + player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + area + ChatColor.YELLOW + "|" + ChatColor.RED + cost + + ChatColor.YELLOW)); } else { player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); } @@ -1678,7 +1715,8 @@ private boolean commandResCompass(String[] args, boolean resadmin, Player player if (rmanager.getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { Location low = rmanager.getByName(args[1]).getArea("main").getLowLoc(); Location high = rmanager.getByName(args[1]).getArea("main").getHighLoc(); - Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); + Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high + .getBlockZ()) / 2); player.setCompassTarget(mid); player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetSet", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); } diff --git a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java b/src/com/bekvon/bukkit/residence/Signs/SignUtil.java index 7dc4a900a..dca8436cf 100644 --- a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/Signs/SignUtil.java @@ -28,6 +28,15 @@ public class SignUtil { public static SignInfo Signs = new SignInfo(); + public static int updateAllSigns() { + List temp = new ArrayList(); + temp.addAll(Signs.GetAllSigns()); + for (com.bekvon.bukkit.residence.Signs.Signs one : temp) { + SignUpdate(one); + } + return temp.size(); + } + // Sign file public static void LoadSigns() { Thread threadd = new Thread() { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 28fb5467a..a6ce0bf1f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -322,6 +322,9 @@ public void onPlayerQuit(PlayerQuitEvent event) { Residence.getChatManager().removeFromChannel(pname); Residence.UUIDList.put(pname, event.getPlayer().getUniqueId()); + + if (AutoSelection.getList().containsKey(pname.toLowerCase())) + AutoSelection.getList().remove(pname); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 0a4af28df..54c898ab2 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -1,57 +1,57 @@ -package com.bekvon.bukkit.residence.utils; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; - -public class VersionChecker { - Residence plugin; - - public VersionChecker(Residence plugin) { - this.plugin = plugin; - } - - public void VersionCheck(final Player player) { - if (!Residence.getConfigManager().versionCheck()) { - return; - } - - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - public void run() { - String readURL = "https://raw.githubusercontent.com/bekvon/Residence/master/src/plugin.yml"; - FileConfiguration config; - String currentVersion = plugin.getDescription().getVersion(); - try { - URL url = new URL(readURL); - BufferedReader br = new BufferedReader(new InputStreamReader( - url.openStream())); - config = YamlConfiguration.loadConfiguration(br); - String newVersion = config.getString("version"); - br.close(); - if (!newVersion.equals(currentVersion)) { - String msg = ChatColor.GREEN + "Residence v" + newVersion + " is now available!\n" + - "Your version: " + currentVersion + "\n" + - "You can download new version from " + ChatColor.BLUE + plugin.getDescription().getWebsite(); - if (player != null) { - player.sendMessage(msg); - } else { - plugin.consoleMessage(msg); - } - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } - -} +package com.bekvon.bukkit.residence.utils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; + +public class VersionChecker { + Residence plugin; + + public VersionChecker(Residence plugin) { + this.plugin = plugin; + } + + public void VersionCheck(final Player player) { + if (!Residence.getConfigManager().versionCheck()) { + return; + } + + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + public void run() { + String readURL = "https://raw.githubusercontent.com/Zrips/Residence/master/src/plugin.yml"; + FileConfiguration config; + String currentVersion = plugin.getDescription().getVersion(); + try { + URL url = new URL(readURL); + BufferedReader br = new BufferedReader(new InputStreamReader( + url.openStream())); + config = YamlConfiguration.loadConfiguration(br); + String newVersion = config.getString("version"); + br.close(); + if (!newVersion.equals(currentVersion)) { + String msg = ChatColor.GREEN + "Residence v" + newVersion + " is now available!\n" + + "Your version: " + currentVersion + "\n" + + "You can download new version from " + ChatColor.BLUE + plugin.getDescription().getWebsite(); + if (player != null) { + player.sendMessage(msg); + } else { + plugin.consoleMessage(msg); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + +} diff --git a/src/plugin.yml b/src/plugin.yml index 2b53e5cab..10e03ba2b 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.8.0.1 +version: 2.8.1.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -56,3 +56,6 @@ permissions: residence.flag.command.bypass: description: Bypasses command flag in residence default: op + residence.select.auto.others: + description: Allows to turn on auto selection for other players + default: op From dfa7d44a5823a9d0130f93c12626b832c236a1a8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 25 Sep 2015 18:38:00 +0300 Subject: [PATCH 0034/1142] Version checker --- .../bekvon/bukkit/residence/ConfigManager.java | 8 ++++++-- src/com/bekvon/bukkit/residence/Residence.java | 4 ++-- .../listeners/ResidencePlayerListener.java | 16 ++++++++-------- .../bukkit/residence/utils/VersionChecker.java | 8 +++++--- src/plugin.yml | 2 +- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 25f2c0f2e..73a92c50e 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -94,7 +94,7 @@ public class ConfigManager { protected int AutoMobRemovalInterval; protected boolean enableLeaseMoneyAccount; protected boolean enableDebug = false; - protected boolean versionCheck; + protected boolean versionCheck = true; protected boolean useVisualizer; protected List customContainers; protected List customBothClick; @@ -203,8 +203,12 @@ void UpdateConfigFile() { conf.options().copyDefaults(true); String defaultWorldName = Bukkit.getServer().getWorlds().size() > 0 ? Bukkit.getServer().getWorlds().get(0).getName() : "World"; - + writer.addComment("Global", "These are Global Settings for Residence."); + + writer.addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); + versionCheck = GetConfigBoolean("Global.versionCheck", true, writer, conf); + writer.addComment("Global.Language", "This loads the .yml file in the Residence Language folder", "All Residence text comes from this file. (NOT DONE YET)"); language = GetConfigString("Global.Language", "English", writer, conf, false); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 4f772bf12..6e94eafe4 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -459,8 +459,8 @@ public void run() { SignUtil.LoadSigns(); - //versionChecker = new VersionChecker(this); - // versionChecker.VersionCheck(null); + versionChecker = new VersionChecker(this); + versionChecker.VersionCheck(null); } public void consoleMessage(String message) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index a6ce0bf1f..daaf79e6b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -322,32 +322,32 @@ public void onPlayerQuit(PlayerQuitEvent event) { Residence.getChatManager().removeFromChannel(pname); Residence.UUIDList.put(pname, event.getPlayer().getUniqueId()); - + if (AutoSelection.getList().containsKey(pname.toLowerCase())) AutoSelection.getList().remove(pname); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerJoin(PlayerJoinEvent event) { - final Player player = event.getPlayer(); + Player player = event.getPlayer(); lastUpdate.put(player.getName(), 0L); if (Residence.getPermissionManager().isResidenceAdmin(player)) { Residence.turnResAdminOn(player); } handleNewLocation(player, player.getLocation(), false); + final Player p = player; Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { @Override public void run() { - PlayerManager.playerJoin(player); + PlayerManager.playerJoin(p); return; } }); - // if (player.isOp() || player.hasPermission("residence.versioncheck")) - // { - // Residence.getVersionChecker().VersionCheck(player); - // } + if (player.hasPermission("residence.versioncheck")) { + Residence.getVersionChecker().VersionCheck(player); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -924,7 +924,7 @@ public void run() { return; } }); - + if (res == null) { lastOutsideLoc.put(pname, loc); if (ResOld != null) { diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 54c898ab2..f8432e4c2 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -38,9 +38,11 @@ public void run() { String newVersion = config.getString("version"); br.close(); if (!newVersion.equals(currentVersion)) { - String msg = ChatColor.GREEN + "Residence v" + newVersion + " is now available!\n" + - "Your version: " + currentVersion + "\n" + - "You can download new version from " + ChatColor.BLUE + plugin.getDescription().getWebsite(); + String msg = ChatColor.GREEN + "***********************************************************\n" + + ChatColor.GREEN + "* Residence " + newVersion + " is now available!\n" + + "* Your version: " + currentVersion + "\n" + + "* You can download new version from \n* " + ChatColor.BLUE + plugin.getDescription().getWebsite() + + ChatColor.GREEN + "\n***********************************************************"; if (player != null) { player.sendMessage(msg); } else { diff --git a/src/plugin.yml b/src/plugin.yml index 10e03ba2b..533918911 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.8.1.1 +version: 2.8.1.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 95792c51766a1beb31316202a19cf14a85ccf6b6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 26 Sep 2015 13:12:51 +0300 Subject: [PATCH 0035/1142] Visualizer on create/rent/buy. Dont break block with selection tool --- .../bukkit/residence/economy/TransactionManager.java | 5 ++++- .../bekvon/bukkit/residence/economy/rent/RentManager.java | 7 ++++++- .../residence/listeners/ResidencePlayerListener.java | 3 +++ .../bukkit/residence/protection/ResidenceManager.java | 3 +++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 67b64494a..40437e907 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -194,7 +194,10 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { this.removeFromSale(areaname); SignUtil.CheckSign(res); - + + CuboidArea area = res.getAreaArray()[0]; + Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "|" + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBought", ChatColor.GREEN + areaname + ChatColor.YELLOW)); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 5fef4b7b4..e74ef9a72 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -13,6 +13,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import java.util.ArrayList; @@ -125,7 +126,8 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi if (this.isRented(landName)) { String[] split = landName.split("\\."); if (split.length != 0) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED + "|" + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED + + "|" + ChatColor.YELLOW + this.getRentingPlayer(landName))); return; } @@ -145,6 +147,9 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi SignUtil.CheckSign(res); + CuboidArea area = res.getAreaArray()[0]; + Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); + res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index daaf79e6b..2ffb563a6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -519,6 +519,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) return; + event.setCancelled(true); + PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group .canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { @@ -537,6 +539,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) Residence.getSelectionManager().showSelectionInfoInActionBar(player); } + return; } if (heldItemId == Residence.getConfigManager().getInfoToolID() && event.getAction() == Action.LEFT_CLICK_BLOCK) { Location loc = block.getLocation(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index d55983580..ad54bb1d2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -194,6 +194,9 @@ public boolean addResidence(Player player, String owner, String name, Location l Residence.getLeaseManager().removeExpireTime(name); PlayerManager.addResidence(newRes.getOwner(), newRes); + + Residence.getSelectionManager().NewMakeBorders(player, newArea.getHighLoc(), newArea.getLowLoc(), false); + if (player != null) { player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceCreate", ChatColor.YELLOW + name + ChatColor.GREEN)); } From d9a6b4a081c03f355a46f90510c37016c950baa1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 26 Sep 2015 13:17:13 +0300 Subject: [PATCH 0036/1142] Only cancel if player is in creative mode --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 5 +++-- src/plugin.yml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 2ffb563a6..c5f1506a5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -13,6 +13,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -518,8 +519,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (heldItemId == Residence.getConfigManager().getSelectionTooldID()) { if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) return; - - event.setCancelled(true); + if (player.getGameMode() == GameMode.CREATIVE) + event.setCancelled(true); PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group diff --git a/src/plugin.yml b/src/plugin.yml index 533918911..fc25a18d5 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.8.1.2 +version: 2.8.2.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From b2c1fcc8d399682d05a7e560702bcd4034e584be Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 27 Sep 2015 13:31:19 +0300 Subject: [PATCH 0037/1142] Changed version checker to check on spigot page instead off github --- .../residence/utils/VersionChecker.java | 62 ++++++++++--------- src/plugin.yml | 2 +- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index f8432e4c2..2668bd241 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -1,59 +1,63 @@ package com.bekvon.bukkit.residence.utils; import java.io.BufferedReader; -import java.io.IOException; import java.io.InputStreamReader; +import java.net.HttpURLConnection; import java.net.URL; +import java.util.Arrays; +import java.util.List; import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; public class VersionChecker { Residence plugin; + private int resource = 11480; public VersionChecker(Residence plugin) { this.plugin = plugin; } public void VersionCheck(final Player player) { - if (!Residence.getConfigManager().versionCheck()) { + if (!Residence.getConfigManager().versionCheck()) return; - } Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { public void run() { - String readURL = "https://raw.githubusercontent.com/Zrips/Residence/master/src/plugin.yml"; - FileConfiguration config; String currentVersion = plugin.getDescription().getVersion(); - try { - URL url = new URL(readURL); - BufferedReader br = new BufferedReader(new InputStreamReader( - url.openStream())); - config = YamlConfiguration.loadConfiguration(br); - String newVersion = config.getString("version"); - br.close(); - if (!newVersion.equals(currentVersion)) { - String msg = ChatColor.GREEN + "***********************************************************\n" + - ChatColor.GREEN + "* Residence " + newVersion + " is now available!\n" + - "* Your version: " + currentVersion + "\n" + - "* You can download new version from \n* " + ChatColor.BLUE + plugin.getDescription().getWebsite() + - ChatColor.GREEN + "\n***********************************************************"; - if (player != null) { - player.sendMessage(msg); - } else { - plugin.consoleMessage(msg); - } - } - } catch (IOException e) { - e.printStackTrace(); - } + String newVersion = getNewVersion(); + if (newVersion == null || !newVersion.equals(currentVersion)) + return; + List msg = Arrays.asList( + ChatColor.GREEN + "*********************** " + plugin.getDescription().getName() + " **************************", + ChatColor.GREEN + "* " + newVersion + " is now available! Your version: " + currentVersion, + ChatColor.GREEN + "* " + ChatColor.DARK_GREEN + plugin.getDescription().getWebsite(), + ChatColor.GREEN + "************************************************************"); + for (String one : msg) + if (player != null) + player.sendMessage(one); + else + plugin.consoleMessage(one); } }); } + public String getNewVersion() { + try { + HttpURLConnection con = (HttpURLConnection) new URL("http://www.spigotmc.org/api/general.php").openConnection(); + con.setDoOutput(true); + con.setRequestMethod("POST"); + con.getOutputStream().write(("key=98BE0FE67F88AB82B4C197FAF1DC3B69206EFDCC4D3B80FC83A00037510B99B4&resource=" + resource).getBytes("UTF-8")); + String version = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine(); + if (version.length() <= 7) + return version; + } catch (Exception ex) { + plugin.consoleMessage(ChatColor.RED + "Failed to check for " + plugin.getDescription().getName() + " update on spigot web page."); + } + return null; + } + } diff --git a/src/plugin.yml b/src/plugin.yml index fc25a18d5..c3cf53163 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.8.2.0 +version: 2.8.2.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From de485d00c74aaf0870110ed221405828add3b831 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 27 Sep 2015 13:46:00 +0300 Subject: [PATCH 0038/1142] This is wrong --- src/com/bekvon/bukkit/residence/utils/VersionChecker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 2668bd241..722faa332 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -29,7 +29,7 @@ public void VersionCheck(final Player player) { public void run() { String currentVersion = plugin.getDescription().getVersion(); String newVersion = getNewVersion(); - if (newVersion == null || !newVersion.equals(currentVersion)) + if (newVersion == null || newVersion.equalsIgnoreCase(currentVersion)) return; List msg = Arrays.asList( ChatColor.GREEN + "*********************** " + plugin.getDescription().getName() + " **************************", From f83e9fe77c63d1fe831ccb93382c872f70bdfd5b Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 28 Sep 2015 12:22:19 +0300 Subject: [PATCH 0039/1142] new flags for entity spawn blocking --- src/com/bekvon/bukkit/residence/Locale.java | 6 ++ .../bukkit/residence/PlayerManager.java | 2 - .../residence/containers/ResPlayer.java | 2 +- .../listeners/ResidenceEntityListener.java | 91 ++++++++++++++++++- .../listeners/ResidencePlayerListener.java | 1 - .../permissions/PermissionGroup.java | 1 - .../permissions/PermissionManager.java | 11 ++- .../residence/persistance/YMLSaveHelper.java | 1 - .../residence/protection/FlagPermissions.java | 14 ++- 9 files changed, 112 insertions(+), 17 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 9274c3f46..da95aa7ab 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -552,7 +552,13 @@ public static void LoadLang(String lang) { "&2admin &3- &egives a player permission to change flags on a residence.", "&2subzone &3- &eallow a player to make subzones in the residence.", "&2monsters &3- &eallows or denys monster spawns", + "&2cmonsters &3- &eallows or denys custom monster spawns", + "&2smonsters &3- &eallows or denys spawner or spawn egg monster spawns", + "&2nmonsters &3- &eallows or denys natural monster spawns", "&2animals &3- &eallows or denys animal spawns.", + "&2canimals &3- &eallows or denys custom animal spawns.", + "&2sanimals &3- &eallows or denys spawner or spawn egg animal spawns.", + "&2nanimals &3- &eallows or denys natural animal spawns.", "&2animalkilling &3- &eallows or denys animal killing.", "&2mobkilling &3- &eallows or denys mob killing.", "&2nofly &3- &eallows or denys fly in residence.", diff --git a/src/com/bekvon/bukkit/residence/PlayerManager.java b/src/com/bekvon/bukkit/residence/PlayerManager.java index f45a961c5..caeec20ef 100644 --- a/src/com/bekvon/bukkit/residence/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/PlayerManager.java @@ -5,8 +5,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; -import java.util.UUID; - import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; diff --git a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java index 8ea9a0343..24f1c499c 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java @@ -10,7 +10,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResPlayer { @@ -33,6 +32,7 @@ public ResPlayer(String userName) { RecalculatePermissions(); } + @SuppressWarnings("deprecation") public void RecalculatePermissions() { this.player = Bukkit.getPlayerExact(userName); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index de714e50c..46a1c98d5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -18,6 +18,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -262,10 +263,92 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { public void onCreatureSpawn(CreatureSpawnEvent event) { FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); Entity ent = event.getEntity(); - if (isAnimal(ent) && !perms.has("animals", true)) - event.setCancelled(true); - else if (isMonster(ent) && !perms.has("monsters", true)) - event.setCancelled(true); + if (isAnimal(ent)) { + if (!perms.has("animals", true)) { + event.setCancelled(true); + return; + } else + switch (event.getSpawnReason()) { + case BUILD_WITHER: + break; + case BUILD_IRONGOLEM: + case BUILD_SNOWMAN: + case CUSTOM: + if (!perms.has("canimals", true)) { + event.setCancelled(true); + return; + } + break; + case DEFAULT: + break; + case BREEDING: + case CHUNK_GEN: + case CURED: + case DISPENSE_EGG: + case EGG: + case JOCKEY: + case MOUNT: + case VILLAGE_INVASION: + case VILLAGE_DEFENSE: + case NETHER_PORTAL: + case OCELOT_BABY: + case NATURAL: + if (!perms.has("nanimals", true)) { + event.setCancelled(true); + return; + } + break; + case SPAWNER_EGG: + case SPAWNER: + if (!perms.has("sanimals", true)) { + event.setCancelled(true); + return; + } + break; + default: + break; + } + } else if (isMonster(ent)) + if (!perms.has("monsters", true)) { + event.setCancelled(true); + return; + } else + switch (event.getSpawnReason()) { + case BUILD_WITHER: + case CUSTOM: + if (!perms.has("cmonsters", true)) { + event.setCancelled(true); + return; + } + break; + case DEFAULT: + break; + case CHUNK_GEN: + case CURED: + case DISPENSE_EGG: + case INFECTION: + case JOCKEY: + case MOUNT: + case NETHER_PORTAL: + case SILVERFISH_BLOCK: + case SLIME_SPLIT: + case LIGHTNING: + case NATURAL: + if (!perms.has("nmonsters", true)) { + event.setCancelled(true); + return; + } + break; + case SPAWNER_EGG: + case SPAWNER: + if (!perms.has("smonsters", true)) { + event.setCancelled(true); + return; + } + break; + default: + break; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c5f1506a5..209b1706f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -59,7 +59,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.utils.ActionBar; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.Signs.Signs; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index d90311254..0cefa900e 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -5,7 +5,6 @@ package com.bekvon.bukkit.residence.permissions; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 6d9b7a32c..e17169f8a 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -80,11 +80,12 @@ public String getGroupNameByPlayer(String player, String world) { player = player.toLowerCase(); if (playersGroup.containsKey(player)) { String group = playersGroup.get(player); - if (group == null) { - String uuids = Residence.getPlayerUUIDString(player); - if (uuids != null) - group = playersGroup.get(uuids); - } + // dead code? +// if (group == null) { +// String uuids = Residence.getPlayerUUIDString(player); +// if (uuids != null) +// group = playersGroup.get(uuids); +// } if (group != null) { group = group.toLowerCase(); if (group != null && groups.containsKey(group)) { diff --git a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java index 78ae3a7a8..63f036f6a 100644 --- a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java +++ b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java @@ -14,7 +14,6 @@ import java.util.LinkedHashMap; import java.util.Map; -import org.bukkit.Bukkit; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.DumperOptions.FlowStyle; import org.yaml.snakeyaml.Yaml; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index becb6a33b..db74f5e2f 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -157,6 +157,9 @@ public static void initValidFlags() { addResidenceOnlyFlag("explode"); addResidenceOnlyFlag("damage"); addResidenceOnlyFlag("monsters"); + addResidenceOnlyFlag("cmonsters"); + addResidenceOnlyFlag("smonsters"); + addResidenceOnlyFlag("nmonsters"); addResidenceOnlyFlag("firespread"); addResidenceOnlyFlag("burn"); addResidenceOnlyFlag("tnt"); @@ -165,6 +168,9 @@ public static void initValidFlags() { addResidenceOnlyFlag("flow"); addResidenceOnlyFlag("healing"); addResidenceOnlyFlag("animals"); + addResidenceOnlyFlag("canimals"); + addResidenceOnlyFlag("sanimals"); + addResidenceOnlyFlag("nanimals"); addResidenceOnlyFlag("lavaflow"); addResidenceOnlyFlag("waterflow"); addResidenceOnlyFlag("physics"); @@ -299,8 +305,10 @@ else if (cachedPlayerNameUUIDs.containsKey(player)) if (uuids == null) { Set> values = cachedPlayerNameUUIDs.entrySet(); for (Entry value : values) { - if (value.getValue().equals(player)) + if (value.getValue().equals(player)){ uuids = value.getKey(); + break; + } } } @@ -352,8 +360,10 @@ public void removeAllPlayerFlags(String player) {//this function works with uuid String uuids = Residence.getPlayerUUIDString(player); if (uuids == null) for (Entry entry : cachedPlayerNameUUIDs.entrySet()) - if (entry.getValue().equals(player)) + if (entry.getValue().equals(player)){ uuids = entry.getKey(); + break; + } if (uuids != null) { playerFlags.remove(uuids); From d5f0b914ac57167ed23f2e7a061d4a8601f25d98 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 29 Sep 2015 13:22:16 +0300 Subject: [PATCH 0040/1142] Added autoselector disabling after 3min or after residence creation --- .../residence/containers/AutoSelector.java | 21 +++++++++++++++++++ .../protection/ResidenceManager.java | 6 ++++-- .../residence/selection/AutoSelection.java | 19 +++++++++++++---- src/plugin.yml | 2 +- 4 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/containers/AutoSelector.java diff --git a/src/com/bekvon/bukkit/residence/containers/AutoSelector.java b/src/com/bekvon/bukkit/residence/containers/AutoSelector.java new file mode 100644 index 000000000..38fa0665d --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/AutoSelector.java @@ -0,0 +1,21 @@ +package com.bekvon.bukkit.residence.containers; + +import com.bekvon.bukkit.residence.permissions.PermissionGroup; + +public class AutoSelector { + private PermissionGroup group; + private long time; + + public AutoSelector(PermissionGroup group, long time) { + this.group = group; + this.time = time; + } + + public long getTime() { + return this.time; + } + + public PermissionGroup getGroup() { + return this.group; + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index ad54bb1d2..668270e20 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -31,6 +31,7 @@ import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.text.help.InformationPager; /** @@ -195,9 +196,10 @@ public boolean addResidence(Player player, String owner, String name, Location l PlayerManager.addResidence(newRes.getOwner(), newRes); - Residence.getSelectionManager().NewMakeBorders(player, newArea.getHighLoc(), newArea.getLowLoc(), false); - if (player != null) { + Residence.getSelectionManager().NewMakeBorders(player, newArea.getHighLoc(), newArea.getLowLoc(), false); + AutoSelection.getList().remove(player.getName().toLowerCase()); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceCreate", ChatColor.YELLOW + name + ChatColor.GREEN)); } if (Residence.getConfigManager().useLeases()) { diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index 5f2d0b3bd..3f728c6d5 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -6,17 +6,18 @@ import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.AutoSelector; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; public class AutoSelection { - private static HashMap list = new HashMap(); + private static HashMap list = new HashMap(); public static void switchAutoSelection(Player player) { if (!list.containsKey(player.getName().toLowerCase())) { PermissionGroup group = Residence.getPermissionManager().getGroup(player.getName(), player.getLocation().getWorld().getName()); - list.put(player.getName().toLowerCase(), group); + list.put(player.getName().toLowerCase(), new AutoSelector(group, System.currentTimeMillis())); player.sendMessage(NewLanguage.getMessage("Language.AutoSelection.Enabled")); } else { list.remove(player.getName().toLowerCase()); @@ -32,6 +33,16 @@ public static void UpdateSelection(Player player) { if (!getList().containsKey(player.getName().toLowerCase())) return; + AutoSelector AutoSelector = getList().get(player.getName().toLowerCase()); + + int Curenttime = (int) (System.currentTimeMillis() - AutoSelector.getTime()) / 1000; + + if (Curenttime > 270) { + list.remove(player.getName().toLowerCase()); + player.sendMessage(NewLanguage.getMessage("Language.AutoSelection.Disabled")); + return; + } + String name = player.getName(); Location cloc = player.getLocation(); @@ -87,7 +98,7 @@ public static void UpdateSelection(Player player) { changed = true; } - PermissionGroup group = getList().get(player.getName().toLowerCase()); + PermissionGroup group = AutoSelector.getGroup(); if (area.getXSize() > group.getMaxX()) { return; @@ -108,7 +119,7 @@ public static void UpdateSelection(Player player) { } } - public static HashMap getList() { + public static HashMap getList() { return list; } } diff --git a/src/plugin.yml b/src/plugin.yml index c3cf53163..d6d188479 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.8.2.1 +version: 2.8.3.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 487aef0356fa694643d8482fa0f36418824985d6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 1 Oct 2015 18:00:12 +0300 Subject: [PATCH 0041/1142] Auto residence creation, small fix for res remove, /res list --- .../bukkit/residence/ConfigManager.java | 108 ++++++++++++++---- src/com/bekvon/bukkit/residence/Locale.java | 2 +- .../residence/economy/rent/RentManager.java | 13 ++- .../listeners/ResidenceBlockListener.java | 33 +++++- .../listeners/ResidenceEntityListener.java | 1 - .../protection/ClaimedResidence.java | 2 +- .../protection/ResidenceManager.java | 10 +- src/plugin.yml | 2 +- 8 files changed, 138 insertions(+), 33 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 73a92c50e..21bfa1ba0 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -58,6 +58,9 @@ public class ConfigManager { protected int PlaceLevel; protected int BlockFallLevel; protected int CleanLevel; + protected int NewPlayerRangeX; + protected int NewPlayerRangeY; + protected int NewPlayerRangeZ; protected int VisualizerRange; protected int VisualizerShowFor; protected int VisualizerUpdateInterval; @@ -89,6 +92,8 @@ public class ConfigManager { protected String namefix; protected boolean showIntervalMessages; protected boolean ShowNoobMessage; + protected boolean NewPlayerUse; + protected boolean NewPlayerFree; protected boolean spoutEnable; protected boolean AutoMobRemoval; protected int AutoMobRemovalInterval; @@ -195,7 +200,7 @@ public static List ColorsArray(List text, Boolean colorize) { } @SuppressWarnings("deprecation") - void UpdateConfigFile() { + void UpdateConfigFile() { File f = new File(Residence.instance.getDataFolder(), "config.yml"); YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); @@ -203,32 +208,39 @@ void UpdateConfigFile() { conf.options().copyDefaults(true); String defaultWorldName = Bukkit.getServer().getWorlds().size() > 0 ? Bukkit.getServer().getWorlds().get(0).getName() : "World"; - + writer.addComment("Global", "These are Global Settings for Residence."); - + writer.addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); versionCheck = GetConfigBoolean("Global.versionCheck", true, writer, conf); - - writer.addComment("Global.Language", "This loads the .yml file in the Residence Language folder", "All Residence text comes from this file. (NOT DONE YET)"); + + writer.addComment("Global.Language", "This loads the .yml file in the Residence Language folder", + "All Residence text comes from this file. (NOT DONE YET)"); language = GetConfigString("Global.Language", "English", writer, conf, false); - writer.addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); + writer.addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", + "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); selectionToolId = GetConfigInt("Global.SelectionToolId", Material.WOOD_AXE.getId(), writer, conf); - writer.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", "Simply equip this tool and hit a location inside the residence and it will display the info for it."); + writer.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", + "Simply equip this tool and hit a location inside the residence and it will display the info for it."); infoToolId = GetConfigInt("Global.InfoToolId", Material.STRING.getId(), writer, conf); writer.addComment("Global.Optimizations.DefaultWorld", "Name of your mein residence world. Usualy normal starting world 'World'. Capitalization essential"); DefaultWorld = GetConfigString("Global.Optimizations.DefaultWorld", defaultWorldName, writer, conf, false); - writer.addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using","In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); + writer.addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using", + "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxResCount = GetConfigInt("Global.Optimizations.MaxResCount", 30, writer, conf); - writer.addComment("Global.Optimizations.MaxRentCount", "Set this as low as posible depending of residence.max.rents.[number] permission you are using","In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); + writer.addComment("Global.Optimizations.MaxRentCount", "Set this as low as posible depending of residence.max.rents.[number] permission you are using", + "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxRentCount = GetConfigInt("Global.Optimizations.MaxRentCount", 10, writer, conf); - writer.addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using","In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); + writer.addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using", + "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxSubzonesCount = GetConfigInt("Global.Optimizations.MaxSubzoneCount", 5, writer, conf); - writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); + writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", + "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); minMoveUpdate = GetConfigInt("Global.MoveCheckInterval", 500, writer, conf); writer.addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); @@ -243,7 +255,8 @@ void UpdateConfigFile() { writer.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); autoSaveInt = GetConfigInt("Global.SaveInterval", 10, writer, conf); - writer.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", "Players can bypass this wih residence.cleanbypass permission node"); + writer.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", + "Players can bypass this wih residence.cleanbypass permission node"); AutoCleanUp = GetConfigBoolean("Global.AutoCleanUp.Use", false, writer, conf); writer.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); AutoCleanUpDays = GetConfigInt("Global.AutoCleanUp.Days", 60, writer, conf); @@ -275,7 +288,9 @@ void UpdateConfigFile() { BlockFallLevel = GetConfigInt("Global.AntiGreef.BlockFall.Level", 62, writer, conf); BlockFallWorlds = GetConfigArray("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); - writer.addComment("Global.AntiGreef.ResCleaning.Use", "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", "Effective way to prevent residence creating near greefing target and then remove it"); + writer.addComment("Global.AntiGreef.ResCleaning.Use", + "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", + "Effective way to prevent residence creating near greefing target and then remove it"); UseClean = GetConfigBoolean("Global.AntiGreef.ResCleaning.Use", true, writer, conf); writer.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); CleanLevel = GetConfigInt("Global.AntiGreef.ResCleaning.Level", 63, writer, conf); @@ -295,7 +310,8 @@ void UpdateConfigFile() { writer.addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); leaseCheckInterval = GetConfigInt("Global.LeaseCheckInterval", 10, writer, conf); - writer.addComment("Global.LeaseAutoRenew", "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); + writer.addComment("Global.LeaseAutoRenew", + "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); leaseAutoRenew = GetConfigBoolean("Global.LeaseAutoRenew", true, writer, conf); writer.addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); @@ -304,7 +320,8 @@ void UpdateConfigFile() { writer.addComment("Global.LegacyPermissions", "Set to true if NOT using Permissions or PermissionsBukkit, or using a really old version of Permissions"); legacyperms = GetConfigBoolean("Global.LegacyPermissions", false, writer, conf); - writer.addComment("Global.EnableEconomy", "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); + writer.addComment("Global.EnableEconomy", + "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); enableEconomy = GetConfigBoolean("Global.EnableEconomy", true, writer, conf); writer.addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); @@ -327,16 +344,20 @@ void UpdateConfigFile() { chatColor = ChatColor.DARK_PURPLE; } - writer.addComment("Global.AdminOnlyCommands", "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); + writer.addComment("Global.AdminOnlyCommands", + "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); adminsOnly = GetConfigBoolean("Global.AdminOnlyCommands", false, writer, conf); writer.addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); adminOps = GetConfigBoolean("Global.AdminOPs", true, writer, conf); - writer.addComment("Global.AdminFullAccess", "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); + writer.addComment("Global.AdminFullAccess", + "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); AdminFullAccess = GetConfigBoolean("Global.AdminFullAccess", false, writer, conf); - writer.addComment("Global.MultiWorldPlugin", "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); + writer.addComment("Global.MultiWorldPlugin", + "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", + "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); multiworldPlugin = GetConfigString("Global.MultiWorldPlugin", "Multiverse-Core", writer, conf, false); writer.addComment("Global.ResidenceFlagsInherit", "Setting this to true causes subzones to inherit flags from their parent zones."); @@ -348,23 +369,38 @@ void UpdateConfigFile() { writer.addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); stopOnSaveError = GetConfigBoolean("Global.StopOnSaveFault", true, writer, conf); - writer.addComment("This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); + writer.addComment( + "This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); namefix = GetConfigString("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]", writer, conf, false); - writer.addComment("Global.ShowIntervalMessages", "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); + writer.addComment("Global.ShowIntervalMessages", + "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); showIntervalMessages = GetConfigBoolean("Global.ShowIntervalMessages", false, writer, conf); writer.addComment("Global.ShowNoobMessage", "Setting this to true sends a tutorial message to the new player when he places chest on ground."); ShowNoobMessage = GetConfigBoolean("Global.ShowNoobMessage", true, writer, conf); - writer.addComment("Global.CustomContainers", "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); + writer.addComment("Global.NewPlayer", "Setting this to true creates residence around players placed chest if he don't have any.", + "Only once every server restart if he still don't have any residence"); + NewPlayerUse = GetConfigBoolean("Global.NewPlayer.Use", false, writer, conf); + writer.addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", + "By setting to false, money will be taken from player, if he has them"); + NewPlayerFree = GetConfigBoolean("Global.NewPlayer.Free", true, writer, conf); + writer.addComment("Global.NewPlayer.Range", "Range from placed chest o both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide"); + NewPlayerRangeX = GetConfigInt("Global.NewPlayer.Range.X", 5, writer, conf); + NewPlayerRangeY = GetConfigInt("Global.NewPlayer.Range.Y", 5, writer, conf); + NewPlayerRangeZ = GetConfigInt("Global.NewPlayer.Range.Z", 5, writer, conf); + + writer.addComment("Global.CustomContainers", + "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); customContainers = GetConfigIntArray("Global.CustomContainers", new ArrayList(), writer, conf); customBothClick = GetConfigIntArray("Global.CustomBothClick", new ArrayList(), writer, conf); customRightClick = GetConfigIntArray("Global.CustomRightClick", new ArrayList(), writer, conf); writer.addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundries"); useVisualizer = GetConfigBoolean("Global.Visualizer.Use", true, writer, conf); - writer.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", "Keep it no more as 30, as player cant see more than 16 blocks"); + writer.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", + "Keep it no more as 30, as player cant see more than 16 blocks"); VisualizerRange = GetConfigInt("Global.Visualizer.Range", 25, writer, conf); writer.addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); VisualizerShowFor = GetConfigInt("Global.Visualizer.ShowFor", 5000, writer, conf); @@ -378,7 +414,10 @@ void UpdateConfigFile() { VisualizerCollumnSpacing = GetConfigInt("Global.Visualizer.CollumnSpacing", 2, writer, conf); if (VisualizerCollumnSpacing < 1) VisualizerCollumnSpacing = 1; - writer.addComment("Global.Visualizer.Selected", "Particle effect names. Posible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance"); + writer.addComment("Global.Visualizer.Selected", + "Particle effect names. Posible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", + " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", + " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance"); SelectedFrame = ParticleEffects.fromName(GetConfigString("Global.Visualizer.Selected.Frame", "happyVillager", writer, conf, false)); if (SelectedFrame == null) { @@ -432,7 +471,8 @@ void UpdateConfigFile() { Mat = Material.STONE; GuiRemove = new ItemStack(Mat, 1, (short) data); - writer.addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", "This is quite heavy on server side, so enable only if you really need this feature"); + writer.addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", + "This is quite heavy on server side, so enable only if you really need this feature"); AutoMobRemoval = GetConfigBoolean("Global.AutoMobRemoval.Use", false, writer, conf); writer.addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); AutoMobRemovalInterval = GetConfigInt("Global.AutoMobRemoval.Interval", 3, writer, conf); @@ -476,6 +516,18 @@ public int getVisualizerShowFor() { return VisualizerShowFor; } + public int getNewPlayerRangeX() { + return NewPlayerRangeX; + } + + public int getNewPlayerRangeY() { + return NewPlayerRangeY; + } + + public int getNewPlayerRangeZ() { + return NewPlayerRangeZ; + } + public int getVisualizerRowSpacing() { return VisualizerRowSpacing; } @@ -716,6 +768,14 @@ public boolean ShowNoobMessage() { return ShowNoobMessage; } + public boolean isNewPlayerUse() { + return NewPlayerUse; + } + + public boolean isNewPlayerFree() { + return NewPlayerFree; + } + public boolean enableSpout() { return spoutEnable; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index da95aa7ab..685687eb3 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -71,7 +71,7 @@ public static void LoadLang(String lang) { writer.addComment("Language.NewPlayerInfo", "The below lines represent various messages residence sends to the players.", "Note that some messages have variables such as %1 that are inserted at runtime."); - GetConfigString("Language.NewPlayerInfo", "&ePlease use wooden axe to select opposite sides of your home and execute command &2/res create your name", writer, + GetConfigString("Language.NewPlayerInfo", "&ePlease use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", writer, conf, true); GetConfigString("Language.InvalidResidence", "Invalid Residence...", writer, conf, true); GetConfigString("Language.InvalidSubzone", "Invalid Subzone...", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index e74ef9a72..83848869f 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -15,7 +15,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; - import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -47,8 +46,16 @@ public List getRentedLands(String playername) { List rentedLands = new ArrayList(); for (Entry oneland : rentedLand.entrySet()) { if (oneland.getValue().player.equalsIgnoreCase(playername)) { - rentedLands.add(Residence.getLanguage().getPhrase("ResidenceList", "|" + oneland.getKey() + "|" + Residence.getLanguage().getPhrase("World") + "|" - + Residence.getResidenceManager().getByName(oneland.getKey()).getWorld()) + Residence.getLanguage().getPhrase("Rented")); + ClaimedResidence res = Residence.getResidenceManager().getByName(oneland.getKey()); + String world = " "; + if (res != null) { + res = res.getTopParent(); + world = res.getWorld(); + } + rentedLands.add(Residence.getLanguage().getPhrase("ResidenceList", "|" + + oneland.getKey() + "|" + Residence.getLanguage().getPhrase("World") + "|" + + world) + + Residence.getLanguage().getPhrase("Rented")); } } return rentedLands; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 3ee00dc1b..971c83046 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -144,8 +144,39 @@ public void onChestPlace(BlockPlaceEvent event) { if (informed.contains(player.getName())) return; - player.sendMessage(NewLanguage.getMessage("Language.NewPlayerInfo")); + informed.add(player.getName()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onChestPlaceCreateRes(BlockPlaceEvent event) { + + if (!Residence.getConfigManager().isNewPlayerUse()) + return; + + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + Block block = event.getBlock(); + if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) + return; + + ArrayList list = PlayerManager.getResidenceList(player.getName()); + if (list.size() != 0) + return; + + if (informed.contains(player.getName())) + return; + + Location loc = block.getLocation(); + + Residence.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), loc.getBlockX() - Residence.getConfigManager().getNewPlayerRangeX(), loc + .getBlockY() - Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() - Residence.getConfigManager().getNewPlayerRangeZ())); + Residence.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), loc.getBlockX() + Residence.getConfigManager().getNewPlayerRangeX(), loc + .getBlockY() + Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() + Residence.getConfigManager().getNewPlayerRangeZ())); + + Residence.getResidenceManager().addResidence(player, player.getName(), Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence + .getSelectionManager().getPlayerLoc2(player.getName()), true); informed.add(player.getName()); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 46a1c98d5..ea50f120a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -18,7 +18,6 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 5256b04b5..3d60f5b0b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -509,7 +509,7 @@ public String[] getSubzoneList() { } return zones.toArray(new String[zones.size()]); } - + public boolean checkCollision(CuboidArea area) { Set set = areas.keySet(); for (String key : set) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 668270e20..acafc7e9b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -199,7 +199,7 @@ public boolean addResidence(Player player, String owner, String name, Location l if (player != null) { Residence.getSelectionManager().NewMakeBorders(player, newArea.getHighLoc(), newArea.getLowLoc(), false); AutoSelection.getList().remove(player.getName().toLowerCase()); - + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceCreate", ChatColor.YELLOW + name + ChatColor.GREEN)); } if (Residence.getConfigManager().useLeases()) { @@ -401,7 +401,15 @@ public void removeResidence(Player player, String name, boolean resadmin) { // Residence.getLeaseManager().removeExpireTime(name); - causing // concurrent modification exception in lease manager... worked // around for now + + for (String oneSub : res.getSubzoneList()) { + PlayerManager.removeResFromPlayer(res.getOwner(), name + "." + oneSub); + Residence.getRentManager().removeRentable(name + "." + oneSub); + Residence.getTransactionManager().removeFromSale(name + "." + oneSub); + } + PlayerManager.removeResFromPlayer(res.getOwner(), name); + Residence.getRentManager().removeRentable(name); Residence.getTransactionManager().removeFromSale(name); diff --git a/src/plugin.yml b/src/plugin.yml index d6d188479..4ca9a2e48 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.8.3.0 +version: 2.8.5.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 259aa479d25848e5cf7c1fcc3da519d68105488a Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Oct 2015 16:34:42 +0300 Subject: [PATCH 0042/1142] cmonsters, canimals flag small change. Fix for server land uuid --- .../bekvon/bukkit/residence/Residence.java | 12 +- .../listeners/ResidenceEntityListener.java | 6 +- .../protection/ClaimedResidence.java | 11 +- .../residence/protection/FlagPermissions.java | 9 +- .../protection/ResidenceManager.java | 4 +- .../protection/ResidencePermissions.java | 30 ++- .../bukkit/residence/utils/ActionBar.java | 200 +++++++++--------- src/plugin.yml | 2 +- 8 files changed, 143 insertions(+), 131 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 6e94eafe4..25892e5ff 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -438,17 +438,16 @@ public void onEnable() { initsuccess = true; PlayerManager.fillList(); - + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { @Override - public void run() { + public void run() { for (OfflinePlayer player : Residence.getServ().getOfflinePlayers()) { UUIDList.put(player.getName().toLowerCase(), player.getUniqueId()); } return; } - }); - + }); } catch (Exception ex) { initsuccess = false; @@ -782,13 +781,14 @@ protected boolean loadYml() throws Exception { loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); if (loadFile.isFile()) { time = System.currentTimeMillis(); - this.getLogger().info("Loading save data for world " + world.getName() + "..."); +// this.getLogger().info("Loading save data for world " + world.getName() + "..."); yml = new YMLSaveHelper(loadFile); yml.load(); worlds.put(world.getName(), yml.getRoot().get("Residences")); - this.getLogger().info("Save data for world " + world.getName() + " loaded. (" + ((float) (System.currentTimeMillis() - time) / 1000) + " secs)"); + this.getLogger().info("Reading " + world.getName() + " data. (" + (System.currentTimeMillis() - time) + " ms)"); } } + rmanager = ResidenceManager.load(worlds); loadFile = new File(saveFolder, "forsale.yml"); if (loadFile.isFile()) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index ea50f120a..692561b76 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -273,13 +273,12 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case BUILD_IRONGOLEM: case BUILD_SNOWMAN: case CUSTOM: + case DEFAULT: if (!perms.has("canimals", true)) { event.setCancelled(true); return; } break; - case DEFAULT: - break; case BREEDING: case CHUNK_GEN: case CURED: @@ -315,13 +314,12 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { switch (event.getSpawnReason()) { case BUILD_WITHER: case CUSTOM: + case DEFAULT: if (!perms.has("cmonsters", true)) { event.setCancelled(true); return; } break; - case DEFAULT: - break; case CHUNK_GEN: case CURED: case DISPENSE_EGG: diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 3d60f5b0b..92876e7c5 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -509,7 +509,7 @@ public String[] getSubzoneList() { } return zones.toArray(new String[zones.size()]); } - + public boolean checkCollision(CuboidArea area) { Set set = areas.keySet(); for (String key : set) { @@ -752,7 +752,10 @@ public int isSafeTp(Player player) { if (player.getAllowFlight()) return 0; - if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) + if (player.getGameMode() == GameMode.CREATIVE) + return 0; + + if (player.getGameMode() == GameMode.SPECTATOR) return 0; if (tpLoc == null) @@ -780,7 +783,6 @@ public boolean isEmptyBlock(Block block) { case AIR: case WEB: case STRING: - case WALL_BANNER: case WALL_SIGN: case SAPLING: case VINE: @@ -790,6 +792,7 @@ public boolean isEmptyBlock(Block block) { case WOOD_BUTTON: case PAINTING: case ITEM_FRAME: + case WALL_BANNER: return true; default: break; @@ -1100,7 +1103,7 @@ public String getOwner() { public UUID getOwnerUUID() { return perms.getOwnerUUID(); } - + public ResidenceItemList getItemBlacklist() { return blacklist; } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index db74f5e2f..fd3750fb0 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -148,7 +148,7 @@ public static void initValidFlags() { addFlag("leash"); addFlag("shear"); addFlag("nofly"); - + addFlag("command"); addResidenceOnlyFlag("trample"); @@ -208,6 +208,7 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.DIODE_BLOCK_ON, "diode"); addMaterialToUseFlag(Material.WORKBENCH, "table"); addMaterialToUseFlag(Material.WOODEN_DOOR, "door"); + /* 1.8 Doors */ addMaterialToUseFlag(Material.SPRUCE_DOOR, "door"); addMaterialToUseFlag(Material.BIRCH_DOOR, "door"); @@ -222,10 +223,10 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.ACACIA_FENCE_GATE, "door"); addMaterialToUseFlag(Material.DARK_OAK_FENCE_GATE, "door"); + addMaterialToUseFlag(Material.IRON_TRAPDOOR, "door"); addMaterialToUseFlag(Material.FENCE_GATE, "door"); addMaterialToUseFlag(Material.NETHER_FENCE, "door"); addMaterialToUseFlag(Material.TRAP_DOOR, "door"); - addMaterialToUseFlag(Material.IRON_TRAPDOOR, "door"); addMaterialToUseFlag(Material.ENCHANTMENT_TABLE, "enchant"); addMaterialToUseFlag(Material.STONE_BUTTON, "button"); addMaterialToUseFlag(Material.LEVER, "lever"); @@ -305,7 +306,7 @@ else if (cachedPlayerNameUUIDs.containsKey(player)) if (uuids == null) { Set> values = cachedPlayerNameUUIDs.entrySet(); for (Entry value : values) { - if (value.getValue().equals(player)){ + if (value.getValue().equals(player)) { uuids = value.getKey(); break; } @@ -360,7 +361,7 @@ public void removeAllPlayerFlags(String player) {//this function works with uuid String uuids = Residence.getPlayerUUIDString(player); if (uuids == null) for (Entry entry : cachedPlayerNameUUIDs.entrySet()) - if (entry.getValue().equals(player)){ + if (entry.getValue().equals(player)) { uuids = entry.getKey(); break; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index acafc7e9b..b4debadad 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -571,6 +571,7 @@ public static ResidenceManager load(Map root) throws Exception { return resm; for (World world : Residence.getServ().getWorlds()) { + long time = System.currentTimeMillis(); @SuppressWarnings("unchecked") Map reslist = (Map) root.get(world.getName()); if (reslist != null) { @@ -582,6 +583,7 @@ public static ResidenceManager load(Map root) throws Exception { throw (ex); } } + Residence.instance.getLogger().info("Loading " + world.getName() + " data into memory. (" + (System.currentTimeMillis() - time) + " ms)"); } return resm; } @@ -594,7 +596,7 @@ public static Map> loadMap(String worldName, Map) res.getValue(), null); - if (residence.getPermissions().getOwnerUUID().toString().equals("ffffffff-ffff-ffff-ffff-ffffffffffff") && !residence.getOwner().equalsIgnoreCase( + if (residence.getPermissions().getOwnerUUID().toString().equals("00000000-0000-0000-0000-000000000000") && !residence.getOwner().equalsIgnoreCase( "Server land") && !residence.getOwner().equalsIgnoreCase("Server_land")) continue; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 9ec218b60..0bc5684bb 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -336,20 +336,24 @@ public void applyDefaultFlags() { } public void setOwner(String newOwner, boolean resetFlags) { - if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase("Server_Land")) - ownerUUID = UUID.fromString("00000000-0000-0000-0000-000000000000");// the UUID for server owned land - - UUID playerUUID = Residence.getPlayerUUID(newOwner); - if (playerUUID != null) //if we find the players uuid - { + if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase("Server_Land")) { ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); Residence.getServ().getPluginManager().callEvent(ownerchange); - ownerUUID = playerUUID; + ownerUUID = UUID.fromString("00000000-0000-0000-0000-000000000000");// the UUID for server owned land if (resetFlags) this.applyDefaultFlags(); - } else - ownerUUID = UUID.fromString("ffffffff-ffff-ffff-ffff-ffffffffffff");//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it - + } else { + UUID playerUUID = Residence.getPlayerUUID(newOwner); + if (playerUUID != null) //if we find the players uuid + { + ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); + Residence.getServ().getPluginManager().callEvent(ownerchange); + ownerUUID = playerUUID; + if (resetFlags) + this.applyDefaultFlags(); + } else + ownerUUID = UUID.fromString("ffffffff-ffff-ffff-ffff-ffffffffffff");//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it + } ownerLastKnownName = newOwner; } @@ -388,7 +392,11 @@ public static ResidencePermissions load(ClaimedResidence res, Map nmsChatSerializer; - private static Class nmsIChatBaseComponent; - private static Class packetType; - - static { - try { - version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; - packetType = Class.forName(getPacketPlayOutChat()); - Class typeCraftPlayer = Class.forName(getCraftPlayerClasspath()); - Class typeNMSPlayer = Class.forName(getNMSPlayerClasspath()); - Class typePlayerConnection = Class.forName(getPlayerConnectionClasspath()); - nmsChatSerializer = Class.forName(getChatSerializerClasspath()); - nmsIChatBaseComponent = Class.forName(getIChatBaseComponentClasspath()); - getHandle = typeCraftPlayer.getMethod("getHandle"); - playerConnection = typeNMSPlayer.getField("playerConnection"); - sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName(getPacketClasspath())); - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); - } - } - - public static void send(Player receivingPacket, String msg) { - try { - Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, "{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', JSONObject.escape(msg)) + "\"}"); - if (!version.contains("1_7")) { - packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 2); - } else { - packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 2); - } - Object player = getHandle.invoke(receivingPacket); - Object connection = playerConnection.get(player); - sendPacket.invoke(connection, packet); - } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Error {0} " + version, ex); - } - - try { - Object player = getHandle.invoke(receivingPacket); - Object connection = playerConnection.get(player); - sendPacket.invoke(connection, packet); - } catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); - } - } - - private static String getCraftPlayerClasspath() { - return "org.bukkit.craftbukkit." + version + ".entity.CraftPlayer"; - } - - private static String getPlayerConnectionClasspath() { - return "net.minecraft.server." + version + ".PlayerConnection"; - } - - private static String getNMSPlayerClasspath() { - return "net.minecraft.server." + version + ".EntityPlayer"; - } - - private static String getPacketClasspath() { - return "net.minecraft.server." + version + ".Packet"; - } - - private static String getIChatBaseComponentClasspath() { - return "net.minecraft.server." + version + ".IChatBaseComponent"; - } - - private static String getChatSerializerClasspath() { - if(version.equals("v1_8_R1") || version.contains("1_7")){ - return "net.minecraft.server." + version + ".ChatSerializer"; - } else { - return "net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer"; // 1_8_R2 moved to IChatBaseComponent - } - } - - private static String getPacketPlayOutChat() { - return "net.minecraft.server." + version + ".PacketPlayOutChat"; - } -} +package com.bekvon.bukkit.residence.utils; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.logging.Level; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.json.simple.JSONObject; + +/** +* +* @author hamzaxx +*/ +public class ActionBar { + private static String version = ""; + private static Object packet; + private static Method getHandle; + private static Method sendPacket; + private static Field playerConnection; + private static Class nmsChatSerializer; + private static Class nmsIChatBaseComponent; + private static Class packetType; + + static { + try { + version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; + packetType = Class.forName(getPacketPlayOutChat()); + Class typeCraftPlayer = Class.forName(getCraftPlayerClasspath()); + Class typeNMSPlayer = Class.forName(getNMSPlayerClasspath()); + Class typePlayerConnection = Class.forName(getPlayerConnectionClasspath()); + nmsChatSerializer = Class.forName(getChatSerializerClasspath()); + nmsIChatBaseComponent = Class.forName(getIChatBaseComponentClasspath()); + getHandle = typeCraftPlayer.getMethod("getHandle"); + playerConnection = typeNMSPlayer.getField("playerConnection"); + sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName(getPacketClasspath())); + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { + Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); + } + } + + public static void send(Player receivingPacket, String msg) { + try { + Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, "{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', JSONObject + .escape(msg)) + "\"}"); + if (!version.contains("1_7")) { + packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 2); + } else { + packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 2); + } + Object player = getHandle.invoke(receivingPacket); + Object connection = playerConnection.get(player); + sendPacket.invoke(connection, packet); + } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException ex) { + Bukkit.getLogger().log(Level.SEVERE, "Error {0} " + version, ex); + } + + try { + Object player = getHandle.invoke(receivingPacket); + Object connection = playerConnection.get(player); + sendPacket.invoke(connection, packet); + } catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { + Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); + } + } + + private static String getCraftPlayerClasspath() { + return "org.bukkit.craftbukkit." + version + ".entity.CraftPlayer"; + } + + private static String getPlayerConnectionClasspath() { + return "net.minecraft.server." + version + ".PlayerConnection"; + } + + private static String getNMSPlayerClasspath() { + return "net.minecraft.server." + version + ".EntityPlayer"; + } + + private static String getPacketClasspath() { + return "net.minecraft.server." + version + ".Packet"; + } + + private static String getIChatBaseComponentClasspath() { + return "net.minecraft.server." + version + ".IChatBaseComponent"; + } + + private static String getChatSerializerClasspath() { + if (version.equals("v1_8_R1") || version.contains("1_7")) { + return "net.minecraft.server." + version + ".ChatSerializer"; + } else { + return "net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent + } + } + + private static String getPacketPlayOutChat() { + return "net.minecraft.server." + version + ".PacketPlayOutChat"; + } +} diff --git a/src/plugin.yml b/src/plugin.yml index 4ca9a2e48..84c139384 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.8.5.0 +version: 2.8.5.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 5ca67fdf8bf707906ccb67c76cb2c53a4393d53c Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 3 Oct 2015 15:47:38 +0300 Subject: [PATCH 0043/1142] New flags day/night --- .../listeners/ResidencePlayerListener.java | 72 +++++++++++-------- .../residence/protection/FlagPermissions.java | 3 + src/flags.yml | 2 + 3 files changed, 47 insertions(+), 30 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 209b1706f..82bc8417f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -59,6 +59,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.utils.ActionBar; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.Signs.Signs; @@ -945,6 +946,9 @@ public void run() { ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); Residence.getServ().getPluginManager().callEvent(chgEvent); + if (ResOld.getPermissions().has("night", false) || ResOld.getPermissions().has("day", false)) + player.resetPlayerTime(); + if (leave != null && !leave.equals("")) { if (Residence.getConfigManager().useActionBar()) { ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); @@ -971,41 +975,46 @@ public void run() { } else { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", orres.getName())); } - return; // Preventing fly in residence only when player has move permission - } else if (player.isFlying()) { - if (res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission("residence.nofly.bypass")) { - Location lc = player.getLocation(); - Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); - location.setPitch(lc.getPitch()); - location.setYaw(lc.getYaw()); - int from = location.getBlockY(); - int maxH = location.getWorld().getMaxHeight(); - for (int i = 0; i < maxH; i++) { - location.setY(from - i); - Block block = location.getBlock(); - if (!isEmptyBlock(block)) { - location.setY(from - i + 1); - break; - } - if (location.getBlockY() <= 0) { - Location lastLoc = lastOutsideLoc.get(pname); - if (lastLoc != null) - player.teleport(lastLoc); - else - player.teleport(res.getOutsideFreeLoc(loc)); - - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly|" + orres.getName())); - return; - } + } + + if (player.isFlying() && res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( + "residence.nofly.bypass")) { + Location lc = player.getLocation(); + Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); + location.setPitch(lc.getPitch()); + location.setYaw(lc.getYaw()); + int from = location.getBlockY(); + int maxH = location.getWorld().getMaxHeight(); + for (int i = 0; i < maxH; i++) { + location.setY(from - i); + Block block = location.getBlock(); + if (!isEmptyBlock(block)) { + location.setY(from - i + 1); + break; + } + if (location.getBlockY() <= 0) { + Location lastLoc = lastOutsideLoc.get(pname); + if (lastLoc != null) + player.teleport(lastLoc); + else + player.teleport(res.getOutsideFreeLoc(loc)); + + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly|" + orres.getName())); + return; } - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly|" + orres.getName())); - player.teleport(location); - player.setFlying(false); - player.setAllowFlight(false); } + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly|" + orres.getName())); + player.teleport(location); + player.setFlying(false); + player.setAllowFlight(false); } + + if (res.getPermissions().has("day", false)) + player.setPlayerTime(6000L, false); + else if (res.getPermissions().has("night", false)) + player.setPlayerTime(14000L, false); } lastOutsideLoc.put(pname, loc); @@ -1034,6 +1043,9 @@ public void run() { // ResidenceLeaveEvent leaveevent = new ResidenceLeaveEvent(ResOld, player); // Residence.getServ().getPluginManager().callEvent(leaveevent); + if (ResOld.getPermissions().has("night", false) || ResOld.getPermissions().has("day", false)) + player.resetPlayerTime(); + if (leave != null && !leave.equals("") && ResOld != res.getParent()) { if (Residence.getConfigManager().useActionBar()) { ActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)).toString()); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index fd3750fb0..2002d3b4a 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -178,6 +178,9 @@ public static void initValidFlags() { addResidenceOnlyFlag("spread"); addResidenceOnlyFlag("hidden"); addResidenceOnlyFlag("witherdamage"); + + addResidenceOnlyFlag("day"); + addResidenceOnlyFlag("night"); // prevents from mobs entering residence addResidenceOnlyFlag("nomobs"); diff --git a/src/flags.yml b/src/flags.yml index 7d4a8fcb7..e745c50e5 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -58,6 +58,8 @@ Global: explode: true fireball: true command: false + day: true + night: true # These are default flags applied to all residences from any user group. ResidenceDefault: build: false From 654d196c75412f3c64ada41996d7b14edf9ecf39 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 4 Oct 2015 12:17:37 +0300 Subject: [PATCH 0044/1142] 1.7 support/ small fix for new player residence create --- src/com/bekvon/bukkit/residence/NMS.java | 32 ++ .../bekvon/bukkit/residence/Residence.java | 50 +++- .../bekvon/bukkit/residence/allNms/v1_7.java | 109 +++++++ .../bekvon/bukkit/residence/allNms/v1_8.java | 134 +++++++++ .../bukkit/residence/allNms/v1_8Events.java | 33 +++ .../listeners/ResidenceBlockListener.java | 19 +- .../listeners/ResidenceEntityListener.java | 29 +- .../listeners/ResidencePlayerListener.java | 85 +----- .../protection/ClaimedResidence.java | 29 +- .../residence/protection/FlagPermissions.java | 17 +- .../bukkit/residence/utils/CrackShot.java | 279 +++++++++--------- .../residence/utils/VersionChecker.java | 30 ++ src/com/residence/mcstats/Metrics.java | 4 +- src/plugin.yml | 2 +- 14 files changed, 560 insertions(+), 292 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/NMS.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_7.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_8.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_8Events.java diff --git a/src/com/bekvon/bukkit/residence/NMS.java b/src/com/bekvon/bukkit/residence/NMS.java new file mode 100644 index 000000000..a6cb710da --- /dev/null +++ b/src/com/bekvon/bukkit/residence/NMS.java @@ -0,0 +1,32 @@ +package com.bekvon.bukkit.residence; + +import java.util.List; +import java.util.Map; + +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.event.block.BlockPistonRetractEvent; + +public interface NMS { + + public List getPistonRetractBlocks(BlockPistonRetractEvent event); + + public boolean isAnimal(Entity ent); + + public boolean isArmorStandEntity(EntityType entityType); + + public boolean isArmorStandMaterial(Material material); + + public boolean isCanUseEntity_BothClick(Material mat, Block block); + + public boolean isEmptyBlock(Block block); + + public boolean isSpectator(GameMode mode); + + public void addDefaultFlags(Map matUseFlagList); + + public int getOnlinePlayerAmount(); +} diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 25892e5ff..8d370a11e 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -11,6 +11,7 @@ import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -46,6 +47,7 @@ import com.bekvon.bukkit.residence.itemlist.WorldItemManager; import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; +import com.bekvon.bukkit.residence.allNms.v1_8Events; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; @@ -62,6 +64,7 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.CrackShot; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.TabComplete; import com.bekvon.bukkit.residence.utils.VersionChecker; @@ -126,6 +129,12 @@ public class Residence extends JavaPlugin { public static WorldGuardPlugin wg = null; public static int wepid; + private static NMS nms; + + public static NMS getNms() { + return nms; + } + private Runnable doHeals = new Runnable() { public void run() { plistener.doHeals(); @@ -213,6 +222,40 @@ public void onDisable() { public void onEnable() { try { + String packageName = getServer().getClass().getPackage().getName(); + String[] packageSplit = packageName.split("\\."); + String version = packageSplit[packageSplit.length - 1].split("(?<=\\G.{4})")[0]; + try { + Class nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms." + version); + if (NMS.class.isAssignableFrom(nmsClass)) { + nms = (NMS) nmsClass.getConstructor().newInstance(); + } else { + System.out.println("Something went wrong, please note down version and contact author v:" + version); + this.setEnabled(false); + } + } catch (ClassNotFoundException e) { + System.out.println("Your server version is not compatible with this plugins version! Plugin will be disabled: " + version); + this.setEnabled(false); + } catch (InstantiationException e) { + e.printStackTrace(); + this.setEnabled(false); + } catch (IllegalAccessException e) { + e.printStackTrace(); + this.setEnabled(false); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + this.setEnabled(false); + } catch (InvocationTargetException e) { + e.printStackTrace(); + this.setEnabled(false); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + this.setEnabled(false); + } catch (SecurityException e) { + e.printStackTrace(); + this.setEnabled(false); + } + instance = this; initsuccess = false; deleteConfirm = new HashMap(); @@ -378,11 +421,16 @@ public void onEnable() { blistener = new ResidenceBlockListener(); plistener = new ResidencePlayerListener(); elistener = new ResidenceEntityListener(); + PluginManager pm = getServer().getPluginManager(); pm.registerEvents(blistener, this); pm.registerEvents(plistener, this); pm.registerEvents(elistener, this); + // 1.8 event + if (VersionChecker.GetVersion() >= 1800) + pm.registerEvents(new v1_8Events(), this); + if (getServer().getPluginManager().getPlugin("CrackShot") != null) pm.registerEvents(new CrackShot(), this); @@ -788,7 +836,7 @@ protected boolean loadYml() throws Exception { this.getLogger().info("Reading " + world.getName() + " data. (" + (System.currentTimeMillis() - time) + " ms)"); } } - + rmanager = ResidenceManager.load(worlds); loadFile = new File(saveFolder, "forsale.yml"); if (loadFile.isFile()) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java new file mode 100644 index 000000000..a04f92b39 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -0,0 +1,109 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import com.bekvon.bukkit.residence.NMS; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; + +public class v1_7 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.add(event.getBlock()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return false; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return false; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case TRAP_DOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return false; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + } + + @Override + public int getOnlinePlayerAmount() { + return Bukkit.getServer().getOnlinePlayers().length; + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java new file mode 100644 index 000000000..8d0ef871e --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8.java @@ -0,0 +1,134 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import com.bekvon.bukkit.residence.NMS; +import com.bekvon.bukkit.residence.Residence; + +public class v1_8 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager + || ent instanceof Rabbit); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case SPRUCE_DOOR: + case BIRCH_DOOR: + case JUNGLE_DOOR: + case ACACIA_DOOR: + case DARK_OAK_DOOR: + case SPRUCE_FENCE_GATE: + case BIRCH_FENCE_GATE: + case JUNGLE_FENCE_GATE: + case ACACIA_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case TRAP_DOOR: + case IRON_TRAPDOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, "door"); + matUseFlagList.put(Material.BIRCH_DOOR, "door"); + matUseFlagList.put(Material.JUNGLE_DOOR, "door"); + matUseFlagList.put(Material.ACACIA_DOOR, "door"); + matUseFlagList.put(Material.DARK_OAK_DOOR, "door"); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, "door"); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, "door"); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, "door"); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, "door"); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, "door"); + matUseFlagList.put(Material.IRON_TRAPDOOR, "door"); + } + + @Override + public int getOnlinePlayerAmount() { + return Bukkit.getServer().getOnlinePlayers().size(); + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java new file mode 100644 index 000000000..8dcef433f --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java @@ -0,0 +1,33 @@ +package com.bekvon.bukkit.residence.allNms; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; + +public class v1_8Events implements Listener { + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + if (!Residence.getNms().isArmorStandEntity(ent.getType())) + return; + + FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + String world = player.getWorld().getName(); + + if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 971c83046..f5ddfa397 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -11,6 +11,8 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.block.Block; @@ -45,7 +47,8 @@ */ public class ResidenceBlockListener implements Listener { - private static List informed = new ArrayList(); + private static List MessageInformed = new ArrayList(); + private static List ResCreated = new ArrayList(); public static final String BlockMetadata = "ResFallingBlock"; @@ -142,10 +145,11 @@ public void onChestPlace(BlockPlaceEvent event) { if (list.size() != 0) return; - if (informed.contains(player.getName())) + if (MessageInformed.contains(player.getName())) return; player.sendMessage(NewLanguage.getMessage("Language.NewPlayerInfo")); - informed.add(player.getName()); + + MessageInformed.add(player.getName()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -165,7 +169,7 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { if (list.size() != 0) return; - if (informed.contains(player.getName())) + if (ResCreated.contains(player.getName())) return; Location loc = block.getLocation(); @@ -178,7 +182,7 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { Residence.getResidenceManager().addResidence(player, player.getName(), Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence .getSelectionManager().getPlayerLoc2(player.getName()), true); - informed.add(player.getName()); + ResCreated.add(player.getName()); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -236,7 +240,7 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { return; } - List blocks = event.getBlocks(); + List blocks = Residence.getNms().getPistonRetractBlocks(event); if (event.isSticky()) { for (Block oneBlock : blocks) { @@ -247,7 +251,7 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { } } - for (Block block : event.getBlocks()) { + for (Block block : blocks) { ClaimedResidence blockRes = Residence.getResidenceManager().getByLoc(block.getLocation()); ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); if (blockRes == null && pistonRes != null || blockRes != null && pistonRes == null || blockRes != null && pistonRes != null && !blockRes.getName() @@ -257,6 +261,7 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { } } } + } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 692561b76..e42677174 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -31,25 +31,12 @@ import org.bukkit.Material; import org.bukkit.entity.Arrow; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; import org.bukkit.entity.Creeper; import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; import org.bukkit.entity.Monster; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Projectile; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; import org.bukkit.entity.Tameable; import org.bukkit.entity.Vehicle; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; import org.bukkit.entity.Slime; import org.bukkit.entity.Ghast; import org.bukkit.event.EventHandler; @@ -109,17 +96,12 @@ private boolean isTamed(Entity ent) { return (ent instanceof Tameable ? ((Tameable) ent).isTamed() : false); } - public static boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager - || ent instanceof Rabbit); - } @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(EntityDamageByEntityEvent event) { Entity entity = event.getEntity(); - if (!isAnimal(entity)) + if (!Residence.getNms().isAnimal(entity)) return; Entity damager = event.getDamager(); @@ -241,7 +223,7 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { Entity entity = event.getEntity(); - if (!isAnimal(entity) && !(player instanceof Player)) + if (!Residence.getNms().isAnimal(entity) && !(player instanceof Player)) return; if (Residence.isResAdminOn(player)) @@ -262,7 +244,7 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { public void onCreatureSpawn(CreatureSpawnEvent event) { FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); Entity ent = event.getEntity(); - if (isAnimal(ent)) { + if (Residence.getNms().isAnimal(ent)) { if (!perms.has("animals", true)) { event.setCancelled(true); return; @@ -523,9 +505,10 @@ public void onSplashPotion(PotionSplashEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { - if (event.getEntityType() != EntityType.ITEM_FRAME && event.getEntityType() != EntityType.ARMOR_STAND) + + if (event.getEntityType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event.getEntityType())) return; - + Entity dmgr = event.getDamager(); Player player = null; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 82bc8417f..0e71adb45 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -38,7 +38,6 @@ import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerBucketFillEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -381,35 +380,6 @@ private boolean isContainer(Material mat, Block block) { .getConfigManager().getCustomContainers().contains(block.getTypeId()); } - @SuppressWarnings("deprecation") - private boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { - case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case SPRUCE_DOOR: - case BIRCH_DOOR: - case JUNGLE_DOOR: - case ACACIA_DOOR: - case DARK_OAK_DOOR: - case SPRUCE_FENCE_GATE: - case BIRCH_FENCE_GATE: - case JUNGLE_FENCE_GATE: - case ACACIA_FENCE_GATE: - case DARK_OAK_FENCE_GATE: - case TRAP_DOOR: - case IRON_TRAPDOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: - case DRAGON_EGG: - return true; - default: - return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); - } - } - @SuppressWarnings("deprecation") private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { switch (mat) { @@ -434,7 +404,7 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { } private boolean isCanUseEntity(Material mat, Block block) { - return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); + return Residence.getNms().isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -469,7 +439,6 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { - Player player = event.getPlayer(); Material heldItem = player.getItemInHand().getType(); int heldItemId = player.getItemInHand().getTypeId(); @@ -480,7 +449,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { int blockId = block.getTypeId(); Material mat = block.getType(); - if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block) + if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || Residence.getNms() + .isCanUseEntity_BothClick(mat, block) || event.getAction() == Action.PHYSICAL)) { if (heldItemId != Residence.getConfigManager().getSelectionTooldID() && heldItemId != Residence.getConfigManager().getInfoToolID() && heldItemId != 351 && heldItemId != 416) { @@ -542,6 +512,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } return; } + if (heldItemId == Residence.getConfigManager().getInfoToolID() && event.getAction() == Action.LEFT_CLICK_BLOCK) { Location loc = block.getLocation(); String res = Residence.getResidenceManager().getNameByLoc(loc); @@ -568,7 +539,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } } - if (heldItem == Material.ARMOR_STAND) { + if (Residence.getNms().isArmorStandMaterial(heldItem)) { perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player.getName(), world, "build", true)) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); @@ -699,25 +670,6 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { } } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - if (ent.getType() != EntityType.ARMOR_STAND) - return; - - FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); - String world = player.getWorld().getName(); - - if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); - } - } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { Player player = event.getPlayer(); @@ -873,29 +825,6 @@ public void onPlayerMove(PlayerMoveEvent event) { } } - public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: - case STRING: - case WALL_BANNER: - case WALL_SIGN: - case SAPLING: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - return false; - } - public void handleNewLocation(final Player player, Location loc, boolean move) { String pname = player.getName(); @@ -990,7 +919,7 @@ public void run() { for (int i = 0; i < maxH; i++) { location.setY(from - i); Block block = location.getBlock(); - if (!isEmptyBlock(block)) { + if (!Residence.getNms().isEmptyBlock(block)) { location.setY(from - i + 1); break; } @@ -1113,7 +1042,7 @@ public void doHeals() { Damageable damage = player; double health = damage.getHealth(); - if (health < player.getMaxHealth() && !player.isDead()) { + if (health < damage.getMaxHealth() && !player.isDead()) { player.setHealth(health + 1); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 92876e7c5..e1e0d339f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -754,8 +754,8 @@ public int isSafeTp(Player player) { if (player.getGameMode() == GameMode.CREATIVE) return 0; - - if (player.getGameMode() == GameMode.SPECTATOR) + + if (Residence.getNms().isSpectator(player.getGameMode())) return 0; if (tpLoc == null) @@ -769,7 +769,7 @@ public int isSafeTp(Player player) { for (int i = 0; i < 255; i++) { tempLoc.setY(from - i); Block block = tempLoc.getBlock(); - if (isEmptyBlock(block)) { + if (Residence.getNms().isEmptyBlock(block)) { fallDistance++; } else { break; @@ -778,29 +778,6 @@ public int isSafeTp(Player player) { return fallDistance; } - public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: - case STRING: - case WALL_SIGN: - case SAPLING: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: - case PAINTING: - case ITEM_FRAME: - case WALL_BANNER: - return true; - default: - break; - } - - return false; - } - public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { boolean isAdmin = Residence.isResAdminOn(reqPlayer); if (!resadmin && !isAdmin) { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 2002d3b4a..c065f34dc 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -212,21 +212,8 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.WORKBENCH, "table"); addMaterialToUseFlag(Material.WOODEN_DOOR, "door"); - /* 1.8 Doors */ - addMaterialToUseFlag(Material.SPRUCE_DOOR, "door"); - addMaterialToUseFlag(Material.BIRCH_DOOR, "door"); - addMaterialToUseFlag(Material.JUNGLE_DOOR, "door"); - addMaterialToUseFlag(Material.ACACIA_DOOR, "door"); - addMaterialToUseFlag(Material.DARK_OAK_DOOR, "door"); - - /* 1.8 Fence Gates */ - addMaterialToUseFlag(Material.SPRUCE_FENCE_GATE, "door"); - addMaterialToUseFlag(Material.BIRCH_FENCE_GATE, "door"); - addMaterialToUseFlag(Material.JUNGLE_FENCE_GATE, "door"); - addMaterialToUseFlag(Material.ACACIA_FENCE_GATE, "door"); - addMaterialToUseFlag(Material.DARK_OAK_FENCE_GATE, "door"); - - addMaterialToUseFlag(Material.IRON_TRAPDOOR, "door"); + Residence.getNms().addDefaultFlags(matUseFlagList); + addMaterialToUseFlag(Material.FENCE_GATE, "door"); addMaterialToUseFlag(Material.NETHER_FENCE, "door"); addMaterialToUseFlag(Material.TRAP_DOOR, "door"); diff --git a/src/com/bekvon/bukkit/residence/utils/CrackShot.java b/src/com/bekvon/bukkit/residence/utils/CrackShot.java index 8e109c797..ecb60e698 100644 --- a/src/com/bekvon/bukkit/residence/utils/CrackShot.java +++ b/src/com/bekvon/bukkit/residence/utils/CrackShot.java @@ -1,140 +1,139 @@ -package com.bekvon.bukkit.residence.utils; - -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.shampaggon.crackshot.events.WeaponDamageEntityEvent; - -public class CrackShot implements Listener { - public CrackShot() { - } - - @EventHandler(priority = EventPriority.LOWEST) - public void AnimalKilling(WeaponDamageEntityEvent event) { - Entity damager = event.getDamager(); - - if ((!(damager instanceof Arrow)) && (!(damager instanceof Player))) { - return; - } - - Player cause = null; - if ((damager instanceof Arrow) && (!(((Arrow) damager).getShooter() instanceof Player))) { - return; - } - - if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Arrow) damager).getShooter(); - } - - if (cause == null) - return; - - if (Residence.isResAdminOn(cause)) { - return; - } - - if (!(event.getVictim() instanceof LivingEntity)) - return; - - Entity entity = event.getVictim(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); - - if (ResidenceEntityListener.isAnimal(entity)) { - if (res != null && !res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { - cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - event.setCancelled(true); - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { - if (event.getVictim().getType() != EntityType.ITEM_FRAME && event.getVictim().getType() != EntityType.ARMOR_STAND) - return; - - Entity dmgr = event.getDamager(); - Player player; - if (event.getDamager() instanceof Player) { - player = (Player) event.getDamager(); - } else { - if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { - player = (Player) ((Projectile) dmgr).getShooter(); - } else - return; - } - - if (Residence.isResAdminOn(player)) - return; - - // Note: Location of entity, not player; otherwise player could stand outside of res and still damage - Location loc = event.getVictim().getLocation(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res != null && !res.getPermissions().playerHas(player.getName(), "container", false)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); - } - - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityDamage(WeaponDamageEntityEvent event) { - - if (!(event.getVictim() instanceof Player)) - return; - - Player victim = (Player) event.getVictim(); - if (victim.hasMetadata("NPC")) { - return; - } - - ClaimedResidence area = Residence.getResidenceManager().getByLoc(victim.getLocation()); - /* Living Entities */ - Player damager = (Player) event.getPlayer(); - ClaimedResidence srcarea = null; - - if (damager == null) - return; - - srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); - - boolean srcpvp = true; - if (srcarea != null) { - srcpvp = srcarea.getPermissions().has("pvp", true); - } - - if (!srcpvp) { - damager.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); - event.setCancelled(true); - return; - } - /* Check for Player vs Player */ - if (area == null) { - /* World PvP */ - if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { - damager.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldPVPDisabled")); - event.setCancelled(true); - } - } else { - /* Normal PvP */ - if (!area.getPermissions().has("pvp", true)) { - damager.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); - event.setCancelled(true); - } - } - return; - - } -} +package com.bekvon.bukkit.residence.utils; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.shampaggon.crackshot.events.WeaponDamageEntityEvent; + +public class CrackShot implements Listener { + public CrackShot() { + } + + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalKilling(WeaponDamageEntityEvent event) { + Entity damager = event.getDamager(); + + if ((!(damager instanceof Arrow)) && (!(damager instanceof Player))) { + return; + } + + Player cause = null; + if ((damager instanceof Arrow) && (!(((Arrow) damager).getShooter() instanceof Player))) { + return; + } + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) { + return; + } + + if (!(event.getVictim() instanceof LivingEntity)) + return; + + Entity entity = event.getVictim(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (Residence.getNms().isAnimal(entity)) { + if (res != null && !res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { + cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + event.setCancelled(true); + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { + if (event.getVictim().getType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event.getVictim().getType())) + return; + + Entity dmgr = event.getDamager(); + Player player; + if (event.getDamager() instanceof Player) { + player = (Player) event.getDamager(); + } else { + if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { + player = (Player) ((Projectile) dmgr).getShooter(); + } else + return; + } + + if (Residence.isResAdminOn(player)) + return; + + // Note: Location of entity, not player; otherwise player could stand outside of res and still damage + Location loc = event.getVictim().getLocation(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null && !res.getPermissions().playerHas(player.getName(), "container", false)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + } + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamage(WeaponDamageEntityEvent event) { + + if (!(event.getVictim() instanceof Player)) + return; + + Player victim = (Player) event.getVictim(); + if (victim.hasMetadata("NPC")) { + return; + } + + ClaimedResidence area = Residence.getResidenceManager().getByLoc(victim.getLocation()); + /* Living Entities */ + Player damager = (Player) event.getPlayer(); + ClaimedResidence srcarea = null; + + if (damager == null) + return; + + srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); + + boolean srcpvp = true; + if (srcarea != null) { + srcpvp = srcarea.getPermissions().has("pvp", true); + } + + if (!srcpvp) { + damager.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + event.setCancelled(true); + return; + } + /* Check for Player vs Player */ + if (area == null) { + /* World PvP */ + if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { + damager.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldPVPDisabled")); + event.setCancelled(true); + } + } else { + /* Normal PvP */ + if (!area.getPermissions().has("pvp", true)) { + damager.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + event.setCancelled(true); + } + } + return; + + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 722faa332..36e32b815 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -16,11 +16,41 @@ public class VersionChecker { Residence plugin; private int resource = 11480; + private static int cleanVersion = 0; public VersionChecker(Residence plugin) { this.plugin = plugin; } + public static int GetVersion() { + if (cleanVersion == 0) { + String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; + // Translating version to integer for simpler use + try { + cleanVersion = Integer.parseInt(version.replace("v", "").replace("V", "").replace("_", "").replace("r", "").replace("R", "")); + } catch (NumberFormatException e) { + // Fail save if it for some reason can't translate version to integer + if (version.contains("v1_7")) + cleanVersion = 1700; + if (version.contains("v1_6")) + cleanVersion = 1600; + if (version.contains("v1_5")) + cleanVersion = 1500; + if (version.contains("v1_4")) + cleanVersion = 1400; + if (version.contains("v1_8_R1")) + cleanVersion = 1810; + if (version.contains("v1_8_R2")) + cleanVersion = 1820; + if (version.contains("v1_8_R3")) + cleanVersion = 1830; + } + if (cleanVersion < 1000) + cleanVersion = cleanVersion * 10; + } + return cleanVersion; + } + public void VersionCheck(final Player player) { if (!Residence.getConfigManager().versionCheck()) return; diff --git a/src/com/residence/mcstats/Metrics.java b/src/com/residence/mcstats/Metrics.java index e5a3a5273..3584bc5a5 100644 --- a/src/com/residence/mcstats/Metrics.java +++ b/src/com/residence/mcstats/Metrics.java @@ -34,6 +34,8 @@ import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.scheduler.BukkitTask; +import com.bekvon.bukkit.residence.Residence; + import java.io.BufferedReader; import java.io.File; import java.io.IOException; @@ -354,7 +356,7 @@ private void postPlugin(final boolean isPing) throws IOException { boolean onlineMode = Bukkit.getServer().getOnlineMode(); // TRUE if online mode is enabled String pluginVersion = description.getVersion(); String serverVersion = Bukkit.getVersion(); - int playersOnline = Bukkit.getServer().getOnlinePlayers().size(); + int playersOnline = Residence.getNms().getOnlinePlayerAmount(); // END server software specific section -- all code below does not use any code outside of this class / Java diff --git a/src/plugin.yml b/src/plugin.yml index 84c139384..3b651a815 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.8.5.1 +version: 2.8.6.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From e6a3a843961981eb492d6f1cb468d733f807b832 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Oct 2015 12:44:16 +0300 Subject: [PATCH 0045/1142] kCouldron partial support. Fix for new player residence always being free --- src/com/bekvon/bukkit/residence/ConfigManager.java | 14 ++++++++++++++ src/com/bekvon/bukkit/residence/Locale.java | 6 +++--- src/com/bekvon/bukkit/residence/allNms/v1_7.java | 5 ++++- .../listeners/ResidenceBlockListener.java | 5 +++-- .../bekvon/bukkit/residence/utils/ActionBar.java | 2 ++ src/plugin.yml | 2 +- 6 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 21bfa1ba0..3ac2df2ff 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -98,6 +98,7 @@ public class ConfigManager { protected boolean AutoMobRemoval; protected int AutoMobRemovalInterval; protected boolean enableLeaseMoneyAccount; + protected boolean CouldronCompatability; protected boolean enableDebug = false; protected boolean versionCheck = true; protected boolean useVisualizer; @@ -481,6 +482,15 @@ void UpdateConfigFile() { spoutEnable = GetConfigBoolean("Global.EnableSpout", false, writer, conf); enableLeaseMoneyAccount = GetConfigBoolean("Global.EnableLeaseMoneyAccount", true, writer, conf); + writer.addComment("Global.CouldronCompatability", + "By setting this to true, partial compatability for kCouldron servers will be anabled. Action bar messages and selection visualizer will be disabled automaticaly as off incorrect compatability"); + CouldronCompatability = GetConfigBoolean("Global.CouldronCompatability", false, writer, conf); + if (CouldronCompatability) { + useVisualizer = false; + actionBar = false; + ActionBarOnSelection = false; + } + try { writer.save(f); } catch (IOException e) { @@ -792,6 +802,10 @@ public boolean enableLeaseMoneyAccount() { return enableLeaseMoneyAccount; } + public boolean CouldronCompatability() { + return CouldronCompatability; + } + public boolean debugEnabled() { return enableDebug; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 685687eb3..c17f388b8 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -70,9 +70,9 @@ public static void LoadLang(String lang) { writer.addComment("Language.NewPlayerInfo", "The below lines represent various messages residence sends to the players.", "Note that some messages have variables such as %1 that are inserted at runtime."); - - GetConfigString("Language.NewPlayerInfo", "&ePlease use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", writer, - conf, true); + GetConfigString("Language.NewPlayerInfo", + "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", + writer, conf, true); GetConfigString("Language.InvalidResidence", "Invalid Residence...", writer, conf, true); GetConfigString("Language.InvalidSubzone", "Invalid Subzone...", writer, conf, true); GetConfigString("Language.InvalidDirection", "Invalid Direction...", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index a04f92b39..1cba33772 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -104,6 +104,9 @@ public void addDefaultFlags(Map matUseFlagList) { @Override public int getOnlinePlayerAmount() { - return Bukkit.getServer().getOnlinePlayers().length; + if (Residence.getConfigManager().CouldronCompatability()) + return 0; + else + return Bukkit.getServer().getOnlinePlayers().length; } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index f5ddfa397..15ac18a3e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -146,7 +146,8 @@ public void onChestPlace(BlockPlaceEvent event) { return; if (MessageInformed.contains(player.getName())) - return; + return; + player.sendMessage(NewLanguage.getMessage("Language.NewPlayerInfo")); MessageInformed.add(player.getName()); @@ -180,7 +181,7 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { .getBlockY() + Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() + Residence.getConfigManager().getNewPlayerRangeZ())); Residence.getResidenceManager().addResidence(player, player.getName(), Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence - .getSelectionManager().getPlayerLoc2(player.getName()), true); + .getSelectionManager().getPlayerLoc2(player.getName()), Residence.getConfigManager().isNewPlayerFree()); ResCreated.add(player.getName()); } diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index 1f2005c4e..d0f22cd18 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -10,6 +10,8 @@ import org.bukkit.entity.Player; import org.json.simple.JSONObject; +import com.bekvon.bukkit.residence.Residence; + /** * * @author hamzaxx diff --git a/src/plugin.yml b/src/plugin.yml index 3b651a815..6a431367c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.8.6.0 +version: 2.9.0.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From eb34c6e67c40bfee4a09e9c55127d8e81a5c58b1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 7 Oct 2015 13:14:21 +0300 Subject: [PATCH 0046/1142] Fix for distance calculation between worlds/ --- .../bukkit/residence/ConfigManager.java | 2 +- .../bekvon/bukkit/residence/Residence.java | 73 ++++++------ .../bekvon/bukkit/residence/allNms/v1_7.java | 5 +- .../residence/allNms/v1_7_Couldron.java | 107 ++++++++++++++++++ .../listeners/ResidenceBlockListener.java | 2 - .../listeners/ResidencePlayerListener.java | 1 - .../residence/selection/SelectionManager.java | 4 + .../bukkit/residence/utils/ActionBar.java | 2 - 8 files changed, 151 insertions(+), 45 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 3ac2df2ff..f8fc9d2fa 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -402,7 +402,7 @@ void UpdateConfigFile() { useVisualizer = GetConfigBoolean("Global.Visualizer.Use", true, writer, conf); writer.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", "Keep it no more as 30, as player cant see more than 16 blocks"); - VisualizerRange = GetConfigInt("Global.Visualizer.Range", 25, writer, conf); + VisualizerRange = GetConfigInt("Global.Visualizer.Range", 16, writer, conf); writer.addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); VisualizerShowFor = GetConfigInt("Global.Visualizer.ShowFor", 5000, writer, conf); writer.addComment("Global.Visualizer.updateInterval", "How often in miliseconds update particles for player"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 8d370a11e..945955940 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -64,7 +64,6 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.CrackShot; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.TabComplete; import com.bekvon.bukkit.residence.utils.VersionChecker; @@ -222,40 +221,6 @@ public void onDisable() { public void onEnable() { try { - String packageName = getServer().getClass().getPackage().getName(); - String[] packageSplit = packageName.split("\\."); - String version = packageSplit[packageSplit.length - 1].split("(?<=\\G.{4})")[0]; - try { - Class nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms." + version); - if (NMS.class.isAssignableFrom(nmsClass)) { - nms = (NMS) nmsClass.getConstructor().newInstance(); - } else { - System.out.println("Something went wrong, please note down version and contact author v:" + version); - this.setEnabled(false); - } - } catch (ClassNotFoundException e) { - System.out.println("Your server version is not compatible with this plugins version! Plugin will be disabled: " + version); - this.setEnabled(false); - } catch (InstantiationException e) { - e.printStackTrace(); - this.setEnabled(false); - } catch (IllegalAccessException e) { - e.printStackTrace(); - this.setEnabled(false); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - this.setEnabled(false); - } catch (InvocationTargetException e) { - e.printStackTrace(); - this.setEnabled(false); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - this.setEnabled(false); - } catch (SecurityException e) { - e.printStackTrace(); - this.setEnabled(false); - } - instance = this; initsuccess = false; deleteConfirm = new HashMap(); @@ -303,6 +268,44 @@ public void onEnable() { } } + String packageName = getServer().getClass().getPackage().getName(); + String[] packageSplit = packageName.split("\\."); + String version = packageSplit[packageSplit.length - 1].split("(?<=\\G.{4})")[0]; + try { + Class nmsClass; + if (Residence.getConfigManager().CouldronCompatability()) + nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms.v1_7_Couldron"); + else + nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms." + version); + if (NMS.class.isAssignableFrom(nmsClass)) { + nms = (NMS) nmsClass.getConstructor().newInstance(); + } else { + System.out.println("Something went wrong, please note down version and contact author v:" + version); + this.setEnabled(false); + } + } catch (ClassNotFoundException e) { + System.out.println("Your server version is not compatible with this plugins version! Plugin will be disabled: " + version); + this.setEnabled(false); + } catch (InstantiationException e) { + e.printStackTrace(); + this.setEnabled(false); + } catch (IllegalAccessException e) { + e.printStackTrace(); + this.setEnabled(false); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + this.setEnabled(false); + } catch (InvocationTargetException e) { + e.printStackTrace(); + this.setEnabled(false); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + this.setEnabled(false); + } catch (SecurityException e) { + e.printStackTrace(); + this.setEnabled(false); + } + gmanager = new PermissionManager(groups, flags); imanager = new WorldItemManager(flags); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index 1cba33772..a04f92b39 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -104,9 +104,6 @@ public void addDefaultFlags(Map matUseFlagList) { @Override public int getOnlinePlayerAmount() { - if (Residence.getConfigManager().CouldronCompatability()) - return 0; - else - return Bukkit.getServer().getOnlinePlayers().length; + return Bukkit.getServer().getOnlinePlayers().length; } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java new file mode 100644 index 000000000..8dea53330 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -0,0 +1,107 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import com.bekvon.bukkit.residence.NMS; +import com.bekvon.bukkit.residence.Residence; + +public class v1_7_Couldron implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.add(event.getBlock()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return false; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return false; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case TRAP_DOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return false; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + } + + @Override + public int getOnlinePlayerAmount() { + return Bukkit.getServer().getOnlinePlayers().size(); + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 15ac18a3e..6ba259a54 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -11,8 +11,6 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.block.Block; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 0e71adb45..fdcafa6cd 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -58,7 +58,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.utils.ActionBar; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.Signs.Signs; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index b9c886f6c..3d7cb437e 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -116,6 +116,8 @@ public void showSelectionInfo(Player player) { } public static boolean showParticle(Player player, Location Current, boolean error) { + if (!player.getLocation().getWorld().getName().equalsIgnoreCase(Current.getWorld().getName())) + return false; if (!error) { Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, Current, player); } else @@ -124,6 +126,8 @@ public static boolean showParticle(Player player, Location Current, boolean erro } public static boolean showParticleWalls(final Player player, final Location Current, final boolean error) { + if (!player.getLocation().getWorld().getName().equalsIgnoreCase(Current.getWorld().getName())) + return false; if (!error) Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, Current, player); else diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index d0f22cd18..1f2005c4e 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -10,8 +10,6 @@ import org.bukkit.entity.Player; import org.json.simple.JSONObject; -import com.bekvon.bukkit.residence.Residence; - /** * * @author hamzaxx From 6ef8f6d7d109322fe790e89574f373819a60119e Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 8 Oct 2015 14:44:49 +0300 Subject: [PATCH 0047/1142] Ender pearl causing to show message when pvp is disabled --- .../residence/listeners/ResidenceEntityListener.java | 9 ++++++--- src/plugin.yml | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index e42677174..76cc6daac 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -13,6 +13,8 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -22,6 +24,7 @@ import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityInteractEvent; import org.bukkit.event.entity.PotionSplashEvent; @@ -179,7 +182,7 @@ public void AnimalKilling(VehicleDestroyEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void MonsterKilling(EntityDamageByEntityEvent event) { - + Entity entity = event.getEntity(); if (!isMonster(entity)) return; @@ -553,7 +556,7 @@ public void onEntityDamage(EntityDamageEvent event) { Entity ent = event.getEntity(); if (ent.hasMetadata("NPC")) return; - + boolean tamedAnimal = isTamed(ent); ClaimedResidence area = Residence.getResidenceManager().getByLoc(ent.getLocation()); /* Living Entities */ @@ -570,7 +573,7 @@ public void onEntityDamage(EntityDamageEvent event) { } ent = attackevent.getEntity(); if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) - .getShooter() instanceof Player)))) { + .getShooter() instanceof Player))) && event.getCause() != DamageCause.FALL) { Player attacker = null; if (damager instanceof Player) { attacker = (Player) damager; diff --git a/src/plugin.yml b/src/plugin.yml index 6a431367c..6229954cb 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.0.1 +version: 2.9.0.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 93cb25c8f622a78a971a57a992f0b186269ecafd Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 8 Oct 2015 19:59:13 +0300 Subject: [PATCH 0048/1142] Updated Chinese locale, added utf-8 support, added option to ignore Y selection --- src/Language/Brazilian.yml | 1254 +++++++------- src/Language/Chinese.yml | 1465 ++++++++++------- src/Language/Czech.yml | 4 +- src/Language/French.yml | 40 +- src/Language/German.yml | 4 +- src/Language/Hungarian.yml | 4 +- src/Language/Lithuanian.yml | 1298 +++++++-------- src/Language/Polish.yml | 4 +- src/Language/Spanish.yml | 10 +- .../residence/CommentedYamlConfiguration.java | 337 ++-- .../bukkit/residence/ConfigManager.java | 8 + src/com/bekvon/bukkit/residence/Locale.java | 24 +- .../bekvon/bukkit/residence/Residence.java | 17 +- .../listeners/ResidenceEntityListener.java | 2 - .../protection/ResidenceManager.java | 2 +- .../residence/selection/AutoSelection.java | 2 +- .../residence/selection/SelectionManager.java | 56 +- .../bukkit/residence/text/Language.java | 4 +- 18 files changed, 2430 insertions(+), 2105 deletions(-) diff --git a/src/Language/Brazilian.yml b/src/Language/Brazilian.yml index ed9088b6e..4616f995b 100644 --- a/src/Language/Brazilian.yml +++ b/src/Language/Brazilian.yml @@ -1,627 +1,627 @@ -# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. -Version: 21 -FieldsVersion: 22 -Language: - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - #Version 1 Fields - InvalidResidence: Residencia invalida... - InvalidSubzone: Subzona invalida... - InvalidDirection: Direcao invalida... - InvalidChannel: Canal invalido... - InvalidAmount: Valor invalido... - InvalidCost: Custo invalido... - InvalidDays: Numero de dias invalido... - InvalidMaterial: Material invalido... - InvalidBoolean: Valor invalido, deve ser true(t) ou false(f) - InvalidArea: Area invalida... - InvalidGroup: Grupo invalido... - InvalidMessageType: Tipo de mensagem deve ser inserir ou remover. - InvalidList: Lista invalida... - InvalidFlag: Flag invalida... - InvalidFlagState: Estado da flag invalido, deve ser true(t), false(f), ou remove(r) - AreaExists: Nome da area ja existe. - AreaCreate: 'Area de residencia criado, ID %1' - AreaDiffWorld: Area esta em um mundo diferente da residencia. - AreaCollision: 'A area colide com a residencia %1' - AreaSubzoneCollision: 'A area colide com a Subzona %1' - AreaNonExist: Nao existe tal area. - AreaInvalidName: Nome da area invalido... - AreaRename: 'Area renomeada de %1 para %2' - AreaRemove: 'A area %1 foi removida...' - AreaRemoveLast: Nao pode remover a ultima area dessa residencia. - AreaNotWithinParent: Area nao esta dentro da residencia. - AreaUpdate: Area atualizada... - AreaMaxPhysical: Voce antingiu a quantidade maxima de areas permitidas para a sua residencia. - AreaSizeLimit: Tamanho da area nao esta dentro dos limites permitidos. - AreaHighLimit: 'Voce nao pode proteger esta altura toda, seu limite: %1' - AreaLowLimit: 'Voce nao pode proteger esta profundidade, seu limite: %1' - NotInResidence: Voce nao esta em uma residencia. - InResidence: 'Voce esta na residencia %1' - ResidenceOwnerChange: 'A residencia %1 agora pertence a %2' - NonAdmin: Voce nao tem permissao. - AdminOnly: Apenas admins tem acesso a esse comando. - ChatDisabled: Chat da residencia desabilitado... - SubzoneRename: 'Subzona renomeada de %1 para %2' - SubzoneRemove: 'Subzona %1 removida.' - SubzoneCreate: 'Subzona %1 criada' - SubzoneCreateFail: 'Impossivel criar a subzona %1' - SubzoneExists: 'A subzona %1 ja existe.' - SubzoneCollide: 'A subzona colide com a subzona %1' - SubzoneMaxDepth: Voce antigiu o maximo de subzonas permitido. - SubzoneSelectInside: Ambos os pontos de selecao devem estar dentro da residencia. - SelectPoints: Selecione dois pontos primeiro antes de usar esse comando! - SelectionSuccess: Selecao feita com sucesso! - SelectionFail: Comando select invalido... - SelectionBedrock: Selecao expandiu-se para o seu menor limite permitido. - SelectionSky: Selecao expandiu-se para o seu maior limite permitido. - SelectionArea: 'Area selecionada %1, da residencia %2' - SelectDiabled: Voce nao tem acesso ao comando select. - NoPermission: Voce nao tem permissao para isto. - OwnerNoPermission: O proprietario nao tem permissao para isto. - ParentNoPermission: Voce nao tem permissao para fazer alteracoes na zona pai. - MessageChange: Mensagem configurada... - FlagSet: Flag configurada... - FlagCheckTrue: 'A flag %1 aplicada no jogador %2 para a residencia %3, valor = %4' - FlagCheckFalse: 'A flag %1 nao pode ser aplicada no jogador %2 pela residencia.' - FlagsCleared: Flags removidas. - FlagsDefault: Flags configuradas para o padrao. - Usage: Uso do comando - InvalidHelp: Pagina help invalida... - SubCommands: Subcomandos - InvalidList: Lista invalida, deve ser blacklist ou ignorelist. - MaterialGet: 'O material com a ID %1 e %2' - MarketDisabled: Mercado desabilitado! - MarketList: Lista do mercado - SelectionTool: Ferramenta de selecao - InfoTool: Ferramenta de informacoes - NoBankAccess: Voce nao tem acesso a bank. - NotEnoughMoney: Voce nao tem dinheiro sulficiente. - BankNoMoney: Nao tem dinheiro sulficiente no banco. - BankDeposit: 'Voce depositou %1 no banco da residencia.' - BankWithdraw: 'Voce retirou %1 da banco da residencia.' - MoneyCharged: 'Retirado %1 na sua conta %2.' - MoneyCredit: 'Adicionado %1 na sua conta %2.' - RentDisabled: Sistema de aluguel esta desabilitado. - RentReleaseInvalid: 'A residencia %1 nao esta para alugar.' - RentSellFail: Nao pode vender uma residencia se ela esta para alugar. - SellRentFail: Nao pode alugar uma residencia se ela esta a venda. - OwnerBuyFail: Voce nao pode comprar sua propria residencia! - OwnerRentFail: Voce nao pode alugar sua propria residencia! - AlreadySellFail: A residencia ja esta a venda! - ResidenceBought: 'Voce comprou a residencia %1' - ResidenceBuy: 'A residencia %1 foi comprada por %2 de voce.' - ResidenceBuyTooBig: Esta residencia tem areas maiores do que o maximo permitido. - ResidenceNotForSale: A residencia nao esta a venda. - ResidenceForSale: 'Residencia %1 agora esta a venda por %2' - ResidenceStopSelling: A residencia nao esta mais a venda. - ResidenceTooMany: Voce ja possui o numero maximo de residencias permitido. - ResidenceMaxRent: Voce ja esta alugando o numero maximo de residencias permitido. - ResidenceAlreadyRent: Residencia pronta para ser alugada... - ResidenceNotForRent: A residencia nao esta disponivel para alugar... - ResidenceNotRented: Residencia nao alugada. - ResidenceUnrent: 'A residencia %1 nao esta mais alugada.' - ResidenceRemoveRentable: 'A residencia %1 nao esta mais para alugar.' - ResidenceForRentSuccess: 'A residencia %1 agora esta para alugar por %2 durante %3 dias.' - ResidenceRentSuccess: 'Voce alugou a residencia %1 por %2 dias.' - ResidenceAlreadyRented: 'A residencia %1 ja esta sendo alugada por %2' - ResidenceAlreadyExists: 'Ja existe uma residencia com o nome %1.' - ResidenceCreate: 'Voce criou a residencia %1!' - ResidenceRename: 'Residencia renomeada de %1 para %2' - ResidenceRemove: 'A residencia %1 foi removida...' - RentDisabled: Aluguel esta desabilitado... - RentDisableRenew: 'A residencia %1 agora nao vai mais ser re-alugada quando o tempo expirar.' - RentEnableRenew: 'A residencia %1 agora vai ser automaticamente re-alugada quando o tempo expirar.' - RentableDisableRenew: '%1 nao vai mais renovar o status alugavel quando expirar.' - RentableEnableRenew: '%1 agora vai automaticamente renovar o status alugavel quando expirar.' - LandForSale: Residencia a venda - SellAmount: Valor da venda - LeaseExpire: Tempo para expirar a locacao - RentExpire: Os dias do aluguel expiraram - RentableAutoRenew: Auto renovar a locacao - RentAutoRenew: Auto renovar o aluguel - RentableLand: Residencia alugavel - ListMaterialAdd: '%1 foi adicionado a residencia %2' - ListMaterialRemove: '%1 foi removido da residencia %2' - ItemBlacklisted: Voce esta na blacklist para usar este item aqui. - RentedModifyDeny: Nao pode modificar as residencias que estao para alugar. - WorldPVPDisabled: PVP do mundo esta desabilitado. - NoPVPZone: Nenhuma zona de PVP. - FlagDeny: 'Voce nao tem a flag %1 aqui.' - FlagSetDeny: 'O proprietario nao tem acesso a flag %1' - SelectPoint: 'Selecionado o %1 ponto' - ResidenceChat: 'Chat da residencia alternado para %1' - ResidenceMoveDeny: 'Voce nao tem permissao para se movimentar na residencia %1' - TeleportDeny: Voce nao tem acesso a teletransporte. - TeleportSuccess: 'Teletransportado!' - TeleportNear: Teletransportado para perto da residencia. - TeleportNoFlag: Voce nao tem acesso para se teletransportar nessa residencia. - SetTeleportLocation: Local de teletransporte configurado... - HelpPageHeader: 'Paginas de ajuda - %1 - Pagina <%2 de %3>' - ListExists: A lista ja existe... - ListRemoved: Lista removida... - ListCreate: 'Criado a lista %1' - LeaseRenew: 'Locacao valida ate %1' - LeaseRenewMax: Locacao renovada para o maximo permitido - LeaseNotExpire: Nao esta para alugar, ou a locacao ainda nao expirou. - LeaseRenewalCost: 'Custo de renovacao da area %1 sera de %2' - LeaseInfinite: Tempo de locacao definida para infinito(bastante tempo!)... - PermissionsApply: Permissoes aplicadas para a residencia. - PhysicalAreas: Areas fisicas - CurrentArea: Area atual - LeaseExpire: Validade da locacao - NotOnline: O jogador alvo nao esta online. - ResidenceGiveLimits: Nao pode dar a residencia para o jogador alvo, porque esta alem dos limites do jogador alvo. - ResidenceGive: 'Voce deu a residencia %1 para o(a) %2' - ResidenceRecieve: 'Voce recebeu a residencia %1 do(a) %2' - #Version 4 New Fields - #ResidenceListAll: 'Residences - ' - removed, use GenericPage now - ResidenceListAllEmpty: Nao existe residencias no servidor... - InvalidPage: Pagina invalida... - NextPage: Proxima pagina - #Version 10 New Fields - RemovePlayersResidences: 'Removidas todas residencias do(a) %1' - GenericPage: 'Pagina %1 de %2' - #Version 11 New Fields - ResidenceRentedBy: 'Alugado por %1' - #Version 14 New Fields - InvalidCharacters: Detectado caracteres invalidos... - InvalidNameCharacters: O nome contem caracteres invalidos... - #Version 15 New Fields - DeleteConfirm: 'Se voce tem certeza que quer deletar a residencia %1, use "/res confirm" para confirmar.' - #Version 18 New Fields - SelectTooHigh: Aviso, a selecao foi acima do topo do mapa, limitando... - SelectTooLow: Aviso, a selecao foi abaixo do fundo do mapa, limitando... - WorldEditNotFound: WorldEdit nao foi detectado. - #Version 19 New Fields - NoResHere: Nao ha nenhuma residencia aqui. - DeleteSubzoneConfirm: 'Se voce tem certeza que quer deletar a subzona %1, use "/res confirm" para confirmar.' - #Version 20 New Fields - SubzoneOwnerChange: 'A subzona %1 mudou de proprietario, agora sera do(a) %2' - CoordsTop: 'X:%1 Y:%2 Z:%3' - CoordsBottom: 'X:%1 Y:%2 Z:%3' - #Version 21 New Fields - AdminToggle: 'Resadmin automaticamente alternado para %1' - #Version 22 New Fields - NoSpawn: 'You do not have move permissions at your spawn point. Relocating' - CompassTargetReset: 'Your compass has been reset' - CompassTargetSet: 'Your compass now points to %1' - - #The below lines are mostly a word bank for various uses. - #Version 1 Fields - Description: Descricao - Land: Residencia - Cost: Custo - Selection: Selecao - Total: Total - Size: Tamanho - Expanding: Expandindo - Shifting: Movendo - Up: Acima - Down: Abaixo - Error: Erro - Flags: Flags - Your: Suas - Group: Grupo - Others: Outros - Primary: Primario - Secondary: Secondario - Selection: Selecao - Moved: Movido - Status: Status - Available: Disponivel - On: On - Off: Off - Name: Nome - Lists: Listas - Residences: Residencias - Residence: Residencia - Count: Conta - Owner: Proprietario - #Version 4 Fields - World: Mundo - #Version 12 Fields - Subzones: Subzonas - #Version 20 Fields - CoordsT: Cordenadas maximas para o topo - CoordsB: Cordenadas minimas para o fundo - #Version 22 Fields - TurnOn: 'on' - TurnOff: 'off' - -# This is the help / usage messages for each command. -# It follows this format: -# -# Description: -# Info: -# SubCommands: -# - these follow the same format, and each sub command can have its own subcommands -# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that -# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). -# Add a page number after the ? mark to see that page. - -HelpLinesPerPage: 7 -CommandHelp: #this is just a holder node, that holds the entire help - Description: Contem ajuda para residencia - SubCommands: #this is the actual beginning of all commands - res: #main residence command - Description: Comando residencia pai - Info: - - 'Veja o wiki da residencia para mais informacoes.' - - 'Wiki: residencebukkitmod.wikispaces.com' - - 'Use /[comando] ? para ver mais informacoes de ajuda.' - SubCommands: - select: #selection commands - Description: Comandos de selecao - Info: - - 'Este comando seleciona areas para usar na residencia.' - - '/res select [x] [y] [z] - seleciona um raio de blocos, com o meio em voce.' - SubCommands: - coords: - Description: Mostra as cordenadas selecionadas - Info: - - 'Uso: /res select coords' - size: - Description: Mostra o tamanho selecionado - Info: - - 'Uso: /res select size' - cost: - Description: Mostra o custo da area selecionada - Info: - - 'Uso: /res select cost' - vert: - Description: Expande a selecao verticalmente - Info: - - 'Uso: /res select vert' - - 'Vai expandir a seleção tao alto e tao baixo como permitido.' - sky: - Description: Expande a selecao ate o ceu - Info: - - 'Uso: /res select sky' - - 'Expande tao alto quanto o permitido.' - bedrock: - Description: Expande a selecao ate o Bedrock - Info: - - 'Uso: /res select bedrock' - - 'Expande o mais baixo permitido.' - expand: - Description: Expande a selecao em uma direcao. - Info: - - 'Uso: /res select expand ' - - 'Expande para a direcao que voce esta olhando.' - shift: - Description: Desloca a selecao em uma direcao - Info: - - 'Uso: /res select shift ' - - 'Empurra sua selecao pela para a direcao que voce esta olhando.' - chunk: - Description: Seleciona o pedaco que voce esta. - Info: - - 'Uso: /res select chunk' - - 'Seleciona o pedaco correspondente ao que voce esta.' - residence: - Description: Seleciona uma area existente na residencia. - Info: - - 'Uso /res select ' - - 'Seleciona uma area existente na residencia.' - worldedit: - Description: Define a selecao usando a selecao corrente do WorldEdit. - Info: - - 'Uso /res select worldedit' - - 'Define a selecao usando a selecao corrente do WorldEdit.' - create: #creation command - Description: Cria residencias - Info: - - 'Uso: /res create ' - remove: #remove command - Description: Remove residencias. - Info: - - 'Uso: /res remove ' - removeall: - Description: Remove todas as residencias do jogador selecionado. - Info: - - 'Uso: /res removeall [jogador]' - - 'Remove todas as residencias do jogador selecionado.' - - 'Requer /resadmin se voce usa-lo em alguem alem de si mesmo.' - confirm: - - 'Uso: /res confirm' - - 'Confirma a remocao de residencia(s).' - subzone: - Description: Cria subzonas nas residencias. - Info: - - 'Uso: /res subzone [nome da subzona]' - - 'Se o nome da residencia estiver em branco, vai ser considerado a residencia que voce esta presente.' - area: - Description: Administra areas fisicas da residencia. - SubCommands: - list: - Description: Lista as areas fisicas da residencia - Info: - - 'Uso: /res area list [residencia] ' - listall: - Description: Lista cordenadas e outras informacoes das areas - Info: - - 'Uso: /res area listall [residencia] ' - add: - Description: Adiciona area fisica para a residencia - Info: - - 'Uso: /res area add [residencia] [areaID]' - - 'Voce precisa primeiro selecionar dois pontos.' - remove: - Description: Remove areas fisicas da residencia - Info: - - 'Uso: /res area remove [residencia] [areaID]' - replace: - Description: Substitue areas fisicas da residencia - Info: - - 'Uso: /res area replace [residencia] [areaID]' - - 'Voce precisa primeiro selecionar dois pontos.' - - 'Substituindo uma area ira cobrar a diferenca em tamanho se a nova area for maior.' - info: - Description: Mostra informacoes da residencia. - Info: - - 'Uso: /res info ' - - 'Deixando em branco vai considerar a residencia que voce esta presente.' - limits: - Description: Mostra seus limites. - Info: - - 'Uso: /res limits' - - 'Mostra as limitacoes que voce tem para criacao e administracao de residencias.' - message: - Description: Altera as mensagens de entrada/saida da residencia - Info: - - 'Uso: /res message [enter/leave] [mensagem]' - - 'Define a mensagem de entrada ou saida da residencia.' - - 'Uso: /res message remove [enter/leave]' - - 'Remove a mensagem de entrada ou saida.' - lease: - Description: Administra locacoes da residencia - Info: - - 'Uso: /res lease [renew/cost] [residencia]' - - '/res lease cost ira mostrar o custo para renovar a locacao da residencia.' - - '/res lease renew ira renovar a locacao da residencia, desde que voce tenha dinheiro sulficiente.' - SubCommands: - set: - Description: Define o tempo para renovacao (admin apenas) - Info: - - 'Uso: /resadmin lease set [residencia] [#days/infinite]' - - 'Define o tempo para renovacao especificando o numero de dias, ou infinito.' - bank: - Description: Administra o dinheiro na residencia - Info: - - 'Uso: /res bank [deposit/withdraw] [quantia]' - - 'Voce precisa estar na residencia' - - 'Voce precisa ter a flag +bank na residencia.' - tp: - Description: Teleporta para a residencia - Info: - - 'Uso: /res tp [residencia]' - - 'Teleporta voce para a residencia, voce precisa ter a flag +tp ou ser o dono.' - - 'Precisa ter permicao de teleporte pelo servidor.' - tpset: - Description: Define o local de teleporte na residencia - Info: - - 'Uso: /res tpset' - - 'Isto ira definir o local de teleporte onde voce esta, da residencia que voce esta presente.' - - 'Voce precisa estar em uma residencia para usar este comando.' - - 'Voce precisa ser o dono ou ter a flag +admin na residencia.' - set: - Description: Define as flags gerais na residencia - Info: - - 'Uso: /res set [flag] [true/false/remove]' - - 'Para ver a lista de flags, use /res flags ?' - - 'Essas flags se aplica a todos os jogadores que nao tem a flag aplicada especificamente para ele. (veja /res pset ?)' - pset: - Description: Define as flags para um jogador especifico na residencia. - Info: - - 'Uso: /res pset [jogador] [flag] [true/false/remove]' - - 'Uso: /res pset [jogador] removeall' - - 'Para ver a lista de flags, use /res flags ?' - gset: - Description: Define as flags para um grupo especifico na residencia. - Info: - - 'Uso: /res gset [grupo] [flag] [true/false/remove]' - - 'Para ver a lista de flags, use /res flags ?' - lset: - Description: Altera as opcoes da blacklist e da ignorelist - Info: - - 'Uso: /res lset [blacklist/ignorelist] [material]' - - 'Uso: /res lset info' - - 'Blaclist impede que algum bloco especifico seja colocado na residencia.' - - 'Ignorelist faz com que algum bloco especifico nao seja protegido pela residencia.' - flags: - Description: Lista de flags - Info: - - 'Para valores de flag, geralmente true permite a acao, e false impede a acao.' - - 'build - permite ou impede construcao' - - 'use - permite ou impede o uso de portas, alavancas, botoes, etc...' - - 'move - permite ou impede movimentacao na residencia.' - - 'container - permite ou impede o uso de fornalhas, baus, ejetor, etc...' - - 'trusted - da permissao build, use, move, container e tp' - - 'place - permite ou impede apenas colocar blocos, sobrescreve a flag build.' - - 'destroy - permite ou impede apenas a destruicao de blocos, sobrescreve a flag build.' - - 'pvp - permite ou impede pvp na residencia' - - 'tp - permite ou impede teleporte para a residencia.' - - 'admin - da permissao ao jogador para alterar as flags da residencia.' - - 'subzone - permite o jogador a criar subzonas na residencia.' - - 'monsters - permite ou impede que monstros nascam na residencia' - - 'animals - permite ou impede que animais nascam na residencia.' - - 'healing - definido como true faz com que a residencia cure os seus ocupantes' - - 'tnt - permite ou impede explosao de tnt' - - 'creeper - permite ou impede explosao de creeper' - - 'ignite - permite ou impede colocar fogo.' - - 'firespread - permite ou impede que o fogo se espalhe.' - - 'bucket - permite ou impede uso de balde.' - - 'flow - permite ou impede fluxo de liquidos.' - - 'lavaflow - permite ou impede fluxo de lava, sobrescreve flow' - - 'waterflow - permite ou impede fluxo de agua, sobrescreve flow' - - 'damage - permite ou impede todos os danos dentro da residencia.' - - 'piston - permite ou impede pistoes funcionarem na residencia.' - - 'hidden - esconde a residencia das listas acessadas pelos comandos /res list e /res listall.' - - 'cake - permite ou impede jogadores de comer bolo' - - 'lever - permite ou impede jogadores de usar alavancas' - - 'button - permite ou impede jogadores de usar botoes' - - 'diode - permite ou impede jogadores de usar repetidores de redstone' - - 'door - permite ou impede jogadores de usar portas e alcapoes' - - 'table - permite ou impede jogadores de usar a mesa de trabalho' - - 'enchant - permite ou impede jogadores de usar a mesa de encantamentos' - - 'brew - permite ou impede jogadores de usar enxada no chao' - - 'bed - permite ou impede jogadores de usar as camas' - - 'button - permite ou impede jogadores de usar botoes' - - 'pressure - permite ou impede jogadores de usar placas de pressao' - - 'note - permite ou impede jogadores de usar o bloco de notas musicais' - - 'redstone - da permissao para lever, diode, button, pressure e note' - - 'craft - da permissao para table, enchant e brew' - - 'burn - permite ou impede Mobs se queimarem na residencia' - list: - Description: Lista residencias de um jogador - Info: - - 'Uso: /res list ' - - 'Lista todas as residencias que o jogador tem (com excesao das ocultas).' - - 'Se estiver listando suas proprias residencias, as ocultas irao aparecer.' - - 'Para listar todas as residencias do servidor, use /res listall.' - listhidden: - Description: Lista residencias ocultas (ADMIN APENAS) - Info: - - 'Uso: /res listhidden ' - - 'Lista as residencias ocultas de um jogador.' - listall: - Description: Lista todas as residencias - Info: - - 'Uso: /res listall ' - - 'Lista todas as residencias do servidor. (exceto as ocultas que voce nao tem posse)' - listallhidden: - Description: Lista todas as residencias ocultas (ADMIN APENAS) - Info: - - 'Uso: /res listhidden ' - - 'Lista todas as residencias ocultas do servidor.' - sublist: - Description: Lista subzonas de uma residencia - Info: - - 'Uso: /res sublist ' - - 'Lista as subzonas dentro da residencia.' - default: - Description: Reseta as flags da residencia para o padrao. - Info: - - 'Uso: /res default ' - - 'Reseta as flags da residencia para o padrao. Voce deve ser o dono ou ter a flag +admin na residencia para fazer isso.' - rename: - Description: Renomeia residencias. - Info: - - 'Uso: /res rename [nome antigo] [novo nome]' - - 'Voce deve ser o dono ou ter a flag +admin na residencia para fazer isso.' - - 'O nome nao pode ser igual o de outra residencia.' - mirror: - Description: Copia flags - Info: - - 'Uso: /res mirror [residencia a ser copiada] [residencia a ser colada]' - - 'Copia as flags de uma residencia para outra. Voce deve ser o dono ou ter a flag +admin na residencia para fazer isso.' - market: - Description: Compra, vende, ou aluga residencias - Info: - - 'Uso: /res market ? para mais informacoes' - SubCommands: - info: - Description: Mostra informacoes de mercado de uma residencia - Info: - - 'Uso: /res market info [residencia]' - - 'Mostra se a residencia esta a venda ou para alugar, e seu custo.' - list: - Description: Lista as residencias para alugar e a venda. - Info: - - 'Uso: /res market list' - sell: - Description: Vende uma residencia - Info: - - 'Uso: /res market sell [residencia] [quantia]' - - 'Poe a residencia para vender por [quantia] de dinheiro.' - - 'Outro jogador pode comprar usando /res market buy' - buy: - Description: Compra uma residencia - Info: - - 'Uso: /res market buy [residencia]' - - 'Compra a residencia se ela estiver a venda.' - unsell: - Description: Tira uma residencia da venda - Info: - - 'Uso: /res market unsell [residencia]' - rent: - Description: Aluga uma residencia - Info: - - 'Uso: /res market rent [residencia] ' - - 'Aluga uma residencia. Autorenova pode ser true ou false. Se for true, a residencia vai ser automaticamente re-alugada quando expirar o tempo definido pelo dono.' - rentable: - Description: Faz de uma residencia alugavel. - Info: - - 'Uso: /res market rentable [residencia] [custo] [dias] ' - - 'Faz uma residencia alugavel por [custo] de dinheiro por [dias]. Se for true, a residencia pode ser automaticamente re-alugada quando os dias expirarem.' - release: - Description: Retira a residencia do aluga-se, ou para de alugar uma residencia. - Info: - - 'Uso: /res market release [residencia]' - - 'Se voce for o cliente, este comando tira o aluguel da casa.' - - 'Se voce for o dono, este comando tira a residencia do aluga-se.' - current: - Description: Mostra a residencia que voce esta presente. - Info: - - 'Uso: /res current' - lists: - Description: Lista as definicoes pre-definidas - Info: - - 'Definicoes pre-definidas podem ser aplicadas nas residencias.' - SubCommands: - add: - Description: Add uma lista - Info: - - 'Uso: /res lists add ' - remove: - Description: Remove uma lista - Info: - - 'Uso: /res lists remove ' - apply: - Description: Aplica uma lista a residencia - Info: - - 'Uso: /res lists apply ' - set: - Description: Define uma flag - Info: - - 'Uso: /res lists set ' - pset: - Description: Define a flag de um jogador - Info: - - 'Uso: /res lists pset ' - gset: - Description: Define a flag de um grupo - Info: - - 'Uso: /res lists gset ' - view: - Description: Visualiza a lista. - Info: - - 'Uso: /res lists view ' - server: - Description: Faz o servidor dono da residencia (admin apenas). - Info: - - 'Uso: /resadmin server [residencia]' - - 'Faz o servidor dono da residencia.' - setowner: - Description: Altera o dono da residencia (admin apenas). - Info: - - 'Uso: /resadmin setowner [residencia] [jogador]' - resreload: - Description: Recarrega o plugin residence (admin apenas). - Info: - - 'Uso: /resreload' - resload: - Description: Carrega os salvos do plugin residence (INSEGURO, admin apenas). - Info: - - 'Uso: /resload' - - 'comando INSEGURO, nao salva as residencias primeiro.' - - 'Carrega os salvos do plugin residence depois de voce ter feito alteracoes.' - version: - Description: Mostra a versao do plugin residence - Info: - - 'Uso: /res version' +# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy +# of this file and modify that instead. This file will be updated automatically by Residence +# when a newer version is detected, and your changes will be overwritten. Once you +# have a copy of this file, change the Language: option under the Residence config.yml +# to whatever you named your copy. +Version: 21 +FieldsVersion: 22 +Language: + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. + #Version 1 Fields + InvalidResidence: Residencia invalida... + InvalidSubzone: Subzona invalida... + InvalidDirection: Direcao invalida... + InvalidChannel: Canal invalido... + InvalidAmount: Valor invalido... + InvalidCost: Custo invalido... + InvalidDays: Numero de dias invalido... + InvalidMaterial: Material invalido... + InvalidBoolean: Valor invalido, deve ser true(t) ou false(f) + InvalidArea: Area invalida... + InvalidGroup: Grupo invalido... + InvalidMessageType: Tipo de mensagem deve ser inserir ou remover. + InvalidList: Lista invalida... + InvalidFlag: Flag invalida... + InvalidFlagState: Estado da flag invalido, deve ser true(t), false(f), ou remove(r) + AreaExists: Nome da area ja existe. + AreaCreate: 'Area de residencia criado, ID %1' + AreaDiffWorld: Area esta em um mundo diferente da residencia. + AreaCollision: 'A area colide com a residencia %1' + AreaSubzoneCollision: 'A area colide com a Subzona %1' + AreaNonExist: Nao existe tal area. + AreaInvalidName: Nome da area invalido... + AreaRename: 'Area renomeada de %1 para %2' + AreaRemove: 'A area %1 foi removida...' + AreaRemoveLast: Nao pode remover a ultima area dessa residencia. + AreaNotWithinParent: Area nao esta dentro da residencia. + AreaUpdate: Area atualizada... + AreaMaxPhysical: Voce antingiu a quantidade maxima de areas permitidas para a sua residencia. + AreaSizeLimit: Tamanho da area nao esta dentro dos limites permitidos. + AreaHighLimit: 'Voce nao pode proteger esta altura toda, seu limite: %1' + AreaLowLimit: 'Voce nao pode proteger esta profundidade, seu limite: %1' + NotInResidence: Voce nao esta em uma residencia. + InResidence: 'Voce esta na residencia %1' + ResidenceOwnerChange: 'A residencia %1 agora pertence a %2' + NonAdmin: Voce nao tem permissao. + AdminOnly: Apenas admins tem acesso a esse comando. + ChatDisabled: Chat da residencia desabilitado... + SubzoneRename: 'Subzona renomeada de %1 para %2' + SubzoneRemove: 'Subzona %1 removida.' + SubzoneCreate: 'Subzona %1 criada' + SubzoneCreateFail: 'Impossivel criar a subzona %1' + SubzoneExists: 'A subzona %1 ja existe.' + SubzoneCollide: 'A subzona colide com a subzona %1' + SubzoneMaxDepth: Voce antigiu o maximo de subzonas permitido. + SubzoneSelectInside: Ambos os pontos de selecao devem estar dentro da residencia. + SelectPoints: Selecione dois pontos primeiro antes de usar esse comando! + SelectionSuccess: Selecao feita com sucesso! + SelectionFail: Comando select invalido... + SelectionBedrock: Selecao expandiu-se para o seu menor limite permitido. + SelectionSky: Selecao expandiu-se para o seu maior limite permitido. + SelectionArea: 'Area selecionada %1, da residencia %2' + SelectDiabled: Voce nao tem acesso ao comando select. + NoPermission: Voce nao tem permissao para isto. + OwnerNoPermission: O proprietario nao tem permissao para isto. + ParentNoPermission: Voce nao tem permissao para fazer alteracoes na zona pai. + MessageChange: Mensagem configurada... + FlagSet: Flag configurada... + FlagCheckTrue: 'A flag %1 aplicada no jogador %2 para a residencia %3, valor = %4' + FlagCheckFalse: 'A flag %1 nao pode ser aplicada no jogador %2 pela residencia.' + FlagsCleared: Flags removidas. + FlagsDefault: Flags configuradas para o padrao. + Usage: Uso do comando + InvalidHelp: Pagina help invalida... + SubCommands: Subcomandos + InvalidList: Lista invalida, deve ser blacklist ou ignorelist. + MaterialGet: 'O material com a ID %1 e %2' + MarketDisabled: Mercado desabilitado! + MarketList: Lista do mercado + SelectionTool: Ferramenta de selecao + InfoTool: Ferramenta de informacoes + NoBankAccess: Voce nao tem acesso a bank. + NotEnoughMoney: Voce nao tem dinheiro sulficiente. + BankNoMoney: Nao tem dinheiro sulficiente no banco. + BankDeposit: 'Voce depositou %1 no banco da residencia.' + BankWithdraw: 'Voce retirou %1 da banco da residencia.' + MoneyCharged: 'Retirado %1 na sua conta %2.' + MoneyCredit: 'Adicionado %1 na sua conta %2.' + RentDisabled: Sistema de aluguel esta desabilitado. + RentReleaseInvalid: 'A residencia %1 nao esta para alugar.' + RentSellFail: Nao pode vender uma residencia se ela esta para alugar. + SellRentFail: Nao pode alugar uma residencia se ela esta a venda. + OwnerBuyFail: Voce nao pode comprar sua propria residencia! + OwnerRentFail: Voce nao pode alugar sua propria residencia! + AlreadySellFail: A residencia ja esta a venda! + ResidenceBought: 'Voce comprou a residencia %1' + ResidenceBuy: 'A residencia %1 foi comprada por %2 de voce.' + ResidenceBuyTooBig: Esta residencia tem areas maiores do que o maximo permitido. + ResidenceNotForSale: A residencia nao esta a venda. + ResidenceForSale: 'Residencia %1 agora esta a venda por %2' + ResidenceStopSelling: A residencia nao esta mais a venda. + ResidenceTooMany: Voce ja possui o numero maximo de residencias permitido. + ResidenceMaxRent: Voce ja esta alugando o numero maximo de residencias permitido. + ResidenceAlreadyRent: Residencia pronta para ser alugada... + ResidenceNotForRent: A residencia nao esta disponivel para alugar... + ResidenceNotRented: Residencia nao alugada. + ResidenceUnrent: 'A residencia %1 nao esta mais alugada.' + ResidenceRemoveRentable: 'A residencia %1 nao esta mais para alugar.' + ResidenceForRentSuccess: 'A residencia %1 agora esta para alugar por %2 durante %3 dias.' + ResidenceRentSuccess: 'Voce alugou a residencia %1 por %2 dias.' + ResidenceAlreadyRented: 'A residencia %1 ja esta sendo alugada por %2' + ResidenceAlreadyExists: 'Ja existe uma residencia com o nome %1.' + ResidenceCreate: 'Voce criou a residencia %1!' + ResidenceRename: 'Residencia renomeada de %1 para %2' + ResidenceRemove: 'A residencia %1 foi removida...' + RentDisabled: Aluguel esta desabilitado... + RentDisableRenew: 'A residencia %1 agora nao vai mais ser re-alugada quando o tempo expirar.' + RentEnableRenew: 'A residencia %1 agora vai ser automaticamente re-alugada quando o tempo expirar.' + RentableDisableRenew: '%1 nao vai mais renovar o status alugavel quando expirar.' + RentableEnableRenew: '%1 agora vai automaticamente renovar o status alugavel quando expirar.' + LandForSale: Residencia a venda + SellAmount: Valor da venda + LeaseExpire: Tempo para expirar a locacao + RentExpire: Os dias do aluguel expiraram + RentableAutoRenew: Auto renovar a locacao + RentAutoRenew: Auto renovar o aluguel + RentableLand: Residencia alugavel + ListMaterialAdd: '%1 foi adicionado a residencia %2' + ListMaterialRemove: '%1 foi removido da residencia %2' + ItemBlacklisted: Voce esta na blacklist para usar este item aqui. + RentedModifyDeny: Nao pode modificar as residencias que estao para alugar. + WorldPVPDisabled: PVP do mundo esta desabilitado. + NoPVPZone: Nenhuma zona de PVP. + FlagDeny: 'Voce nao tem a flag %1 aqui.' + FlagSetDeny: 'O proprietario nao tem acesso a flag %1' + SelectPoint: 'Selecionado o %1 ponto' + ResidenceChat: 'Chat da residencia alternado para %1' + ResidenceMoveDeny: 'Voce nao tem permissao para se movimentar na residencia %1' + TeleportDeny: Voce nao tem acesso a teletransporte. + TeleportSuccess: 'Teletransportado!' + TeleportNear: Teletransportado para perto da residencia. + TeleportNoFlag: Voce nao tem acesso para se teletransportar nessa residencia. + SetTeleportLocation: Local de teletransporte configurado... + HelpPageHeader: 'Paginas de ajuda - %1 - Pagina <%2 de %3>' + ListExists: A lista ja existe... + ListRemoved: Lista removida... + ListCreate: 'Criado a lista %1' + LeaseRenew: 'Locacao valida ate %1' + LeaseRenewMax: Locacao renovada para o maximo permitido + LeaseNotExpire: Nao esta para alugar, ou a locacao ainda nao expirou. + LeaseRenewalCost: 'Custo de renovacao da area %1 sera de %2' + LeaseInfinite: Tempo de locacao definida para infinito(bastante tempo!)... + PermissionsApply: Permissoes aplicadas para a residencia. + PhysicalAreas: Areas fisicas + CurrentArea: Area atual + LeaseExpire: Validade da locacao + NotOnline: O jogador alvo nao esta online. + ResidenceGiveLimits: Nao pode dar a residencia para o jogador alvo, porque esta alem dos limites do jogador alvo. + ResidenceGive: 'Voce deu a residencia %1 para o(a) %2' + ResidenceRecieve: 'Voce recebeu a residencia %1 do(a) %2' + #Version 4 New Fields + #ResidenceListAll: 'Residences - ' - removed, use GenericPage now + ResidenceListAllEmpty: Nao existe residencias no servidor... + InvalidPage: Pagina invalida... + NextPage: Proxima pagina + #Version 10 New Fields + RemovePlayersResidences: 'Removidas todas residencias do(a) %1' + GenericPage: 'Pagina %1 de %2' + #Version 11 New Fields + ResidenceRentedBy: 'Alugado por %1' + #Version 14 New Fields + InvalidCharacters: Detectado caracteres invalidos... + InvalidNameCharacters: O nome contem caracteres invalidos... + #Version 15 New Fields + DeleteConfirm: 'Se voce tem certeza que quer deletar a residencia %1, use /res confirm para confirmar.' + #Version 18 New Fields + SelectTooHigh: Aviso, a selecao foi acima do topo do mapa, limitando... + SelectTooLow: Aviso, a selecao foi abaixo do fundo do mapa, limitando... + WorldEditNotFound: WorldEdit nao foi detectado. + #Version 19 New Fields + NoResHere: Nao ha nenhuma residencia aqui. + DeleteSubzoneConfirm: 'Se voce tem certeza que quer deletar a subzona %1, use /res confirm para confirmar.' + #Version 20 New Fields + SubzoneOwnerChange: 'A subzona %1 mudou de proprietario, agora sera do(a) %2' + CoordsTop: 'X:%1 Y:%2 Z:%3' + CoordsBottom: 'X:%1 Y:%2 Z:%3' + #Version 21 New Fields + AdminToggle: 'Resadmin automaticamente alternado para %1' + #Version 22 New Fields + NoSpawn: 'You do not have move permissions at your spawn point. Relocating' + CompassTargetReset: 'Your compass has been reset' + CompassTargetSet: 'Your compass now points to %1' + + #The below lines are mostly a word bank for various uses. + #Version 1 Fields + Description: Descricao + Land: Residencia + Cost: Custo + Selection: Selecao + Total: Total + Size: Tamanho + Expanding: Expandindo + Shifting: Movendo + Up: Acima + Down: Abaixo + Error: Erro + Flags: Flags + Your: Suas + Group: Grupo + Others: Outros + Primary: Primario + Secondary: Secondario + Selection: Selecao + Moved: Movido + Status: Status + Available: Disponivel + On: On + Off: Off + Name: Nome + Lists: Listas + Residences: Residencias + Residence: Residencia + Count: Conta + Owner: Proprietario + #Version 4 Fields + World: Mundo + #Version 12 Fields + Subzones: Subzonas + #Version 20 Fields + CoordsT: Cordenadas maximas para o topo + CoordsB: Cordenadas minimas para o fundo + #Version 22 Fields + TurnOn: 'on' + TurnOff: 'off' + +# This is the help / usage messages for each command. +# It follows this format: +# +# Description: +# Info: +# SubCommands: +# - these follow the same format, and each sub command can have its own subcommands +# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that +# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). +# Add a page number after the ? mark to see that page. + +HelpLinesPerPage: 7 +CommandHelp: #this is just a holder node, that holds the entire help + Description: Contem ajuda para residencia + SubCommands: #this is the actual beginning of all commands + res: #main residence command + Description: Comando residencia pai + Info: + - 'Veja o wiki da residencia para mais informacoes.' + - 'Wiki: residencebukkitmod.wikispaces.com' + - 'Use /[comando] ? para ver mais informacoes de ajuda.' + SubCommands: + select: #selection commands + Description: Comandos de selecao + Info: + - 'Este comando seleciona areas para usar na residencia.' + - '/res select [x] [y] [z] - seleciona um raio de blocos, com o meio em voce.' + SubCommands: + coords: + Description: Mostra as cordenadas selecionadas + Info: + - 'Uso: /res select coords' + size: + Description: Mostra o tamanho selecionado + Info: + - 'Uso: /res select size' + cost: + Description: Mostra o custo da area selecionada + Info: + - 'Uso: /res select cost' + vert: + Description: Expande a selecao verticalmente + Info: + - 'Uso: /res select vert' + - 'Vai expandir a seleção tao alto e tao baixo como permitido.' + sky: + Description: Expande a selecao ate o ceu + Info: + - 'Uso: /res select sky' + - 'Expande tao alto quanto o permitido.' + bedrock: + Description: Expande a selecao ate o Bedrock + Info: + - 'Uso: /res select bedrock' + - 'Expande o mais baixo permitido.' + expand: + Description: Expande a selecao em uma direcao. + Info: + - 'Uso: /res select expand ' + - 'Expande para a direcao que voce esta olhando.' + shift: + Description: Desloca a selecao em uma direcao + Info: + - 'Uso: /res select shift ' + - 'Empurra sua selecao pela para a direcao que voce esta olhando.' + chunk: + Description: Seleciona o pedaco que voce esta. + Info: + - 'Uso: /res select chunk' + - 'Seleciona o pedaco correspondente ao que voce esta.' + residence: + Description: Seleciona uma area existente na residencia. + Info: + - 'Uso /res select ' + - 'Seleciona uma area existente na residencia.' + worldedit: + Description: Define a selecao usando a selecao corrente do WorldEdit. + Info: + - 'Uso /res select worldedit' + - 'Define a selecao usando a selecao corrente do WorldEdit.' + create: #creation command + Description: Cria residencias + Info: + - 'Uso: /res create ' + remove: #remove command + Description: Remove residencias. + Info: + - 'Uso: /res remove ' + removeall: + Description: Remove todas as residencias do jogador selecionado. + Info: + - 'Uso: /res removeall [jogador]' + - 'Remove todas as residencias do jogador selecionado.' + - 'Requer /resadmin se voce usa-lo em alguem alem de si mesmo.' + confirm: + - 'Uso: /res confirm' + - 'Confirma a remocao de residencia(s).' + subzone: + Description: Cria subzonas nas residencias. + Info: + - 'Uso: /res subzone [nome da subzona]' + - 'Se o nome da residencia estiver em branco, vai ser considerado a residencia que voce esta presente.' + area: + Description: Administra areas fisicas da residencia. + SubCommands: + list: + Description: Lista as areas fisicas da residencia + Info: + - 'Uso: /res area list [residencia] ' + listall: + Description: Lista cordenadas e outras informacoes das areas + Info: + - 'Uso: /res area listall [residencia] ' + add: + Description: Adiciona area fisica para a residencia + Info: + - 'Uso: /res area add [residencia] [areaID]' + - 'Voce precisa primeiro selecionar dois pontos.' + remove: + Description: Remove areas fisicas da residencia + Info: + - 'Uso: /res area remove [residencia] [areaID]' + replace: + Description: Substitue areas fisicas da residencia + Info: + - 'Uso: /res area replace [residencia] [areaID]' + - 'Voce precisa primeiro selecionar dois pontos.' + - 'Substituindo uma area ira cobrar a diferenca em tamanho se a nova area for maior.' + info: + Description: Mostra informacoes da residencia. + Info: + - 'Uso: /res info ' + - 'Deixando em branco vai considerar a residencia que voce esta presente.' + limits: + Description: Mostra seus limites. + Info: + - 'Uso: /res limits' + - 'Mostra as limitacoes que voce tem para criacao e administracao de residencias.' + message: + Description: Altera as mensagens de entrada/saida da residencia + Info: + - 'Uso: /res message [enter/leave] [mensagem]' + - 'Define a mensagem de entrada ou saida da residencia.' + - 'Uso: /res message remove [enter/leave]' + - 'Remove a mensagem de entrada ou saida.' + lease: + Description: Administra locacoes da residencia + Info: + - 'Uso: /res lease [renew/cost] [residencia]' + - '/res lease cost ira mostrar o custo para renovar a locacao da residencia.' + - '/res lease renew ira renovar a locacao da residencia, desde que voce tenha dinheiro sulficiente.' + SubCommands: + set: + Description: Define o tempo para renovacao (admin apenas) + Info: + - 'Uso: /resadmin lease set [residencia] [#days/infinite]' + - 'Define o tempo para renovacao especificando o numero de dias, ou infinito.' + bank: + Description: Administra o dinheiro na residencia + Info: + - 'Uso: /res bank [deposit/withdraw] [quantia]' + - 'Voce precisa estar na residencia' + - 'Voce precisa ter a flag +bank na residencia.' + tp: + Description: Teleporta para a residencia + Info: + - 'Uso: /res tp [residencia]' + - 'Teleporta voce para a residencia, voce precisa ter a flag +tp ou ser o dono.' + - 'Precisa ter permicao de teleporte pelo servidor.' + tpset: + Description: Define o local de teleporte na residencia + Info: + - 'Uso: /res tpset' + - 'Isto ira definir o local de teleporte onde voce esta, da residencia que voce esta presente.' + - 'Voce precisa estar em uma residencia para usar este comando.' + - 'Voce precisa ser o dono ou ter a flag +admin na residencia.' + set: + Description: Define as flags gerais na residencia + Info: + - 'Uso: /res set [flag] [true/false/remove]' + - 'Para ver a lista de flags, use /res flags ?' + - 'Essas flags se aplica a todos os jogadores que nao tem a flag aplicada especificamente para ele. (veja /res pset ?)' + pset: + Description: Define as flags para um jogador especifico na residencia. + Info: + - 'Uso: /res pset [jogador] [flag] [true/false/remove]' + - 'Uso: /res pset [jogador] removeall' + - 'Para ver a lista de flags, use /res flags ?' + gset: + Description: Define as flags para um grupo especifico na residencia. + Info: + - 'Uso: /res gset [grupo] [flag] [true/false/remove]' + - 'Para ver a lista de flags, use /res flags ?' + lset: + Description: Altera as opcoes da blacklist e da ignorelist + Info: + - 'Uso: /res lset [blacklist/ignorelist] [material]' + - 'Uso: /res lset info' + - 'Blaclist impede que algum bloco especifico seja colocado na residencia.' + - 'Ignorelist faz com que algum bloco especifico nao seja protegido pela residencia.' + flags: + Description: Lista de flags + Info: + - 'Para valores de flag, geralmente true permite a acao, e false impede a acao.' + - 'build - permite ou impede construcao' + - 'use - permite ou impede o uso de portas, alavancas, botoes, etc...' + - 'move - permite ou impede movimentacao na residencia.' + - 'container - permite ou impede o uso de fornalhas, baus, ejetor, etc...' + - 'trusted - da permissao build, use, move, container e tp' + - 'place - permite ou impede apenas colocar blocos, sobrescreve a flag build.' + - 'destroy - permite ou impede apenas a destruicao de blocos, sobrescreve a flag build.' + - 'pvp - permite ou impede pvp na residencia' + - 'tp - permite ou impede teleporte para a residencia.' + - 'admin - da permissao ao jogador para alterar as flags da residencia.' + - 'subzone - permite o jogador a criar subzonas na residencia.' + - 'monsters - permite ou impede que monstros nascam na residencia' + - 'animals - permite ou impede que animais nascam na residencia.' + - 'healing - definido como true faz com que a residencia cure os seus ocupantes' + - 'tnt - permite ou impede explosao de tnt' + - 'creeper - permite ou impede explosao de creeper' + - 'ignite - permite ou impede colocar fogo.' + - 'firespread - permite ou impede que o fogo se espalhe.' + - 'bucket - permite ou impede uso de balde.' + - 'flow - permite ou impede fluxo de liquidos.' + - 'lavaflow - permite ou impede fluxo de lava, sobrescreve flow' + - 'waterflow - permite ou impede fluxo de agua, sobrescreve flow' + - 'damage - permite ou impede todos os danos dentro da residencia.' + - 'piston - permite ou impede pistoes funcionarem na residencia.' + - 'hidden - esconde a residencia das listas acessadas pelos comandos /res list e /res listall.' + - 'cake - permite ou impede jogadores de comer bolo' + - 'lever - permite ou impede jogadores de usar alavancas' + - 'button - permite ou impede jogadores de usar botoes' + - 'diode - permite ou impede jogadores de usar repetidores de redstone' + - 'door - permite ou impede jogadores de usar portas e alcapoes' + - 'table - permite ou impede jogadores de usar a mesa de trabalho' + - 'enchant - permite ou impede jogadores de usar a mesa de encantamentos' + - 'brew - permite ou impede jogadores de usar enxada no chao' + - 'bed - permite ou impede jogadores de usar as camas' + - 'button - permite ou impede jogadores de usar botoes' + - 'pressure - permite ou impede jogadores de usar placas de pressao' + - 'note - permite ou impede jogadores de usar o bloco de notas musicais' + - 'redstone - da permissao para lever, diode, button, pressure e note' + - 'craft - da permissao para table, enchant e brew' + - 'burn - permite ou impede Mobs se queimarem na residencia' + list: + Description: Lista residencias de um jogador + Info: + - 'Uso: /res list ' + - 'Lista todas as residencias que o jogador tem (com excesao das ocultas).' + - 'Se estiver listando suas proprias residencias, as ocultas irao aparecer.' + - 'Para listar todas as residencias do servidor, use /res listall.' + listhidden: + Description: Lista residencias ocultas (ADMIN APENAS) + Info: + - 'Uso: /res listhidden ' + - 'Lista as residencias ocultas de um jogador.' + listall: + Description: Lista todas as residencias + Info: + - 'Uso: /res listall ' + - 'Lista todas as residencias do servidor. (exceto as ocultas que voce nao tem posse)' + listallhidden: + Description: Lista todas as residencias ocultas (ADMIN APENAS) + Info: + - 'Uso: /res listhidden ' + - 'Lista todas as residencias ocultas do servidor.' + sublist: + Description: Lista subzonas de uma residencia + Info: + - 'Uso: /res sublist ' + - 'Lista as subzonas dentro da residencia.' + default: + Description: Reseta as flags da residencia para o padrao. + Info: + - 'Uso: /res default ' + - 'Reseta as flags da residencia para o padrao. Voce deve ser o dono ou ter a flag +admin na residencia para fazer isso.' + rename: + Description: Renomeia residencias. + Info: + - 'Uso: /res rename [nome antigo] [novo nome]' + - 'Voce deve ser o dono ou ter a flag +admin na residencia para fazer isso.' + - 'O nome nao pode ser igual o de outra residencia.' + mirror: + Description: Copia flags + Info: + - 'Uso: /res mirror [residencia a ser copiada] [residencia a ser colada]' + - 'Copia as flags de uma residencia para outra. Voce deve ser o dono ou ter a flag +admin na residencia para fazer isso.' + market: + Description: Compra, vende, ou aluga residencias + Info: + - 'Uso: /res market ? para mais informacoes' + SubCommands: + info: + Description: Mostra informacoes de mercado de uma residencia + Info: + - 'Uso: /res market info [residencia]' + - 'Mostra se a residencia esta a venda ou para alugar, e seu custo.' + list: + Description: Lista as residencias para alugar e a venda. + Info: + - 'Uso: /res market list' + sell: + Description: Vende uma residencia + Info: + - 'Uso: /res market sell [residencia] [quantia]' + - 'Poe a residencia para vender por [quantia] de dinheiro.' + - 'Outro jogador pode comprar usando /res market buy' + buy: + Description: Compra uma residencia + Info: + - 'Uso: /res market buy [residencia]' + - 'Compra a residencia se ela estiver a venda.' + unsell: + Description: Tira uma residencia da venda + Info: + - 'Uso: /res market unsell [residencia]' + rent: + Description: Aluga uma residencia + Info: + - 'Uso: /res market rent [residencia] ' + - 'Aluga uma residencia. Autorenova pode ser true ou false. Se for true, a residencia vai ser automaticamente re-alugada quando expirar o tempo definido pelo dono.' + rentable: + Description: Faz de uma residencia alugavel. + Info: + - 'Uso: /res market rentable [residencia] [custo] [dias] ' + - 'Faz uma residencia alugavel por [custo] de dinheiro por [dias]. Se for true, a residencia pode ser automaticamente re-alugada quando os dias expirarem.' + release: + Description: Retira a residencia do aluga-se, ou para de alugar uma residencia. + Info: + - 'Uso: /res market release [residencia]' + - 'Se voce for o cliente, este comando tira o aluguel da casa.' + - 'Se voce for o dono, este comando tira a residencia do aluga-se.' + current: + Description: Mostra a residencia que voce esta presente. + Info: + - 'Uso: /res current' + lists: + Description: Lista as definicoes pre-definidas + Info: + - 'Definicoes pre-definidas podem ser aplicadas nas residencias.' + SubCommands: + add: + Description: Add uma lista + Info: + - 'Uso: /res lists add ' + remove: + Description: Remove uma lista + Info: + - 'Uso: /res lists remove ' + apply: + Description: Aplica uma lista a residencia + Info: + - 'Uso: /res lists apply ' + set: + Description: Define uma flag + Info: + - 'Uso: /res lists set ' + pset: + Description: Define a flag de um jogador + Info: + - 'Uso: /res lists pset ' + gset: + Description: Define a flag de um grupo + Info: + - 'Uso: /res lists gset ' + view: + Description: Visualiza a lista. + Info: + - 'Uso: /res lists view ' + server: + Description: Faz o servidor dono da residencia (admin apenas). + Info: + - 'Uso: /resadmin server [residencia]' + - 'Faz o servidor dono da residencia.' + setowner: + Description: Altera o dono da residencia (admin apenas). + Info: + - 'Uso: /resadmin setowner [residencia] [jogador]' + resreload: + Description: Recarrega o plugin residence (admin apenas). + Info: + - 'Uso: /resreload' + resload: + Description: Carrega os salvos do plugin residence (INSEGURO, admin apenas). + Info: + - 'Uso: /resload' + - 'comando INSEGURO, nao salva as residencias primeiro.' + - 'Carrega os salvos do plugin residence depois de voce ter feito alteracoes.' + version: + Description: Mostra a versao do plugin residence + Info: + - 'Uso: /res version' diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml index 1bdc3e766..b8514d840 100644 --- a/src/Language/Chinese.yml +++ b/src/Language/Chinese.yml @@ -1,611 +1,856 @@ -# NOTE: 'If you want to modify this file, it is HIGHLY recommended that you make a copy -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: 'option under the Residence config.yml -# to whatever you named your copy. -Version: 21 -FieldsVersion: 22 -Language: - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - #Version 1 Fields - InvalidResidence: '无效的领地...' - InvalidSubzone: '无效的附属领地...' - InvalidDirection: '无效的方å‘...' - InvalidChannel: '无效频é“...' - InvalidAmount: '无效数é‡...' - InvalidCost: '无效的花费金é¢...' - InvalidDays: '无效的天数...' - InvalidMaterial: '无效的ææ–™...' - InvalidBoolean: '无效值,必须是布尔值,true(t)或者false(f)。' - InvalidArea: '无效的区域...' - InvalidGroup: '无效的æƒé™ç»„...' - InvalidMessageType: '消æ¯ç±»åž‹å¿…é¡»enter(进入)或remove(离开)。' - InvalidList: '无效的清å•...' - InvalidFlag: 'æƒé™ä¸å­˜åœ¨...' - InvalidFlagState: '无效的æƒé™çŠ¶æ€ï¼Œå¿…须是true(t)å¼€å¯ï¼Œfalse(f)关闭,或者 remove(r)移除。' - AreaExists: '区域åå­—å·²ç»å­˜åœ¨ã€‚' - AreaCreate: '领地ID %1 创建æˆåŠŸ' - AreaDiffWorld: '区域与领地是在一个ä¸åŒçš„世界。' - AreaCollision: '区域与领地 %1 冲çªã€‚' - AreaSubzoneCollision: '区域和附属领地 %1 冲çªã€‚' - AreaNonExist: '区域ä¸å­˜åœ¨ã€‚' - AreaInvalidName: '区域å无效...' - AreaRename: '区域å从 %1 更改到 %2' - AreaRemove: '移除区域 %1 ...' - AreaRemoveLast: 'ä¸èƒ½æŠŠæœ€åŽä¸€ä¸ªåŒºåŸŸä»Žé¢†åœ°ä¸­ç§»é™¤ã€‚' - AreaNotWithinParent: '这个区域ä¸åœ¨çˆ¶åŒºåŸŸä¹‹å†…。' - AreaUpdate: '区域已更新...' - AreaMaxPhysical: 'ä½ å·²ç»è¾¾åˆ°ä½ çš„领地所å…许的最大区域。' - AreaSizeLimit: '区域的大å°è¶…出你å…许的范围上é™ã€‚' - AreaHighLimit: 'ä½ ä¸èƒ½ä¿æŠ¤è¿™æ ·é«˜çš„领地,你的上é™æ˜¯ %1 。' - AreaLowLimit: 'ä½ ä¸èƒ½ä¿æŠ¤è¿™æ ·æ·±çš„领地,你的上é™æ˜¯ %1 。' - NotInResidence: 'ä½ ä¸åœ¨ä¸€ä¸ªé¢†åœ°é‡Œã€‚' - InResidence: '你正站在领地 %1 里。' - ResidenceOwnerChange: '领地的拥有者从玩家 %1 改为玩家 %2 。' - NonAdmin: 'ä½ ä¸æ˜¯é¢†åœ°çš„管ç†å‘˜ã€‚' - AdminOnly: 'åªæœ‰ç®¡ç†å‘˜æ‰èƒ½ä½¿ç”¨è¿™ä¸ªå‘½ä»¤ã€‚' - ChatDisabled: '领地èŠå¤©å·²å…³é—­...' - SubzoneRename: '附属领地 %1 å·²é‡å‘½å为 %2 。' - SubzoneRemove: '附属领地 %1 已移除.' - SubzoneCreate: '创建附属领地 %1 。' - SubzoneCreateFail: 'ä¸èƒ½åˆ›å»ºé™„属领地 %1 。' - SubzoneExists: '附属领地 %1 å·²ç»å­˜åœ¨ã€‚' - SubzoneCollide: '附属领地与å¦ä¸€ä¸ªé™„属领地 %1 冲çªã€‚' - SubzoneMaxDepth: '您已达到了系统å…许的最大分区深度。' - SubzoneSelectInside: '两个选择点必须在领地内。' - SelectPoints: '在用这个命令之å‰ï¼Œè¯·å…ˆç”¨é€‰æ‹©å·¥å…·é€‰å–两个点ï¼' - SelectionSuccess: '选择æˆåŠŸï¼' - SelectionFail: '无效的选择命令...' - SelectionBedrock: '扩大到å…许的最低高度。' - SelectionSky: '扩大到å…许的最高高度。' - SelectionArea: '在领地 %2 中选择区域 %1 。' - SelectDiabled: '你没有圈地æƒé™ã€‚' - NoPermission: '你没有使用此命令的æƒé™ã€‚' - OwnerNoPermission: '所有者无此命令的æƒé™ã€‚' - ParentNoPermission: '你没有改å˜çˆ¶åŒºåŸŸçš„æƒé™ã€‚' - MessageChange: '消æ¯å·²è®¾ç½®...' - FlagSet: 'æƒé™å·²è®¾ç½®...' - FlagCheckTrue: 'æƒé™ %1 为玩家 %2 在领地 %3 设置,值为=%4 。' - FlagCheckFalse: 'æƒé™ %1 未为玩家 %2 在领地中设置。' - FlagsCleared: 'æƒé™å·²æ¸…除。' - FlagsDefault: 'æƒé™å·²è®¾ç½®ä¸ºé»˜è®¤ã€‚' - Usage: '命令用法' - InvalidHelp: '无效的帮助页...' - SubCommands: 'å­å‘½ä»¤' - InvalidList: '未知列表的类型,必须是黑åå•ä¸­çš„类型.' - MaterialGet: 'ææ–™å称为ID %1 是 %2 。' - MarketDisabled: '市场功能已ç¦ç”¨ï¼' - MarketList: '市场列表' - SelectionTool: '选择工具' - InfoTool: 'ä¿¡æ¯å·¥å…·' - NoBankAccess: '你没有银行æƒé™...' - NotEnoughMoney: '你没有足够的钱。' - BankNoMoney: '在银行里没有足够的钱。' - BankDeposit: 'ä½ å­˜ %1 元到领地银行。' - BankWithdraw: 'ä½ å–出 %1 元从领地银行。' - MoneyCharged: '支出 %1 元从 %2 å¸æˆ·ã€‚' - MoneyCredit: '收入 %1 元从 %2 å¸æˆ·ã€‚' - RentDisabled: '租凭系统已关闭。' - RentReleaseInvalid: '领地 %1 没有被租用或者被出租。' - RentSellFail: 'ä¸èƒ½å‡ºå”®ä¸€ä¸ªè¢«ç§Ÿå‡ºåŽ»çš„领地。' - SellRentFail: '当å‰é¢†åœ°åœ¨å‡ºå”®ä¸èƒ½å‡ºç§Ÿé¢†åœ°ã€‚' - OwnerBuyFail: '无法购买自己的土地ï¼' - OwnerRentFail: 'ä¸èƒ½ç§Ÿä½ è‡ªå·±çš„土地ï¼' - AlreadySellFail: '领地已ç»å‡ºå”®ï¼' - ResidenceBought: 'ä½ å·²ç»ä¹°ä¸‹äº†é¢†åœ° %1 ï¼' - ResidenceBuy: '玩家 %1 从你那买下了领地 %2 。' - ResidenceBuyTooBig: '此领地已超过系统å…许的最大领域。' - ResidenceNotForSale: '领地没有用于出售。' - ResidenceForSale: '现在以 %2 销售领地 %1 。' - ResidenceStopSelling: '领地ä¸å†é”€å”®ã€‚' - ResidenceTooMany: '已达到系统å…许领地的最大上é™ã€‚' - ResidenceMaxRent: '已达到系统å…许你租用领地的最大上é™ã€‚' - ResidenceAlreadyRent: '领地已ç»è¢«ç§Ÿç”¨...' - ResidenceNotForRent: '领地ä¸ç”¨äºŽå‡ºç§Ÿ...' - ResidenceNotRented: '领地没有被租用。' - ResidenceUnrent: '领地 %1 å·²ä¸å†å‡ºç§Ÿã€‚' - ResidenceRemoveRentable: '领地 %1 ä¸å†å‡ºç§Ÿã€‚' - ResidenceForRentSuccess: '领地 %1 现在租金为 %2 ,æ¯æ¬¡ %3 天。' - ResidenceRentSuccess: 'ä½ å·²ç»ç§Ÿç”¨é¢†åœ° %1 %2 天...' - ResidenceAlreadyRented: '领地 %1 ,目å‰å·²å‡ºç§Ÿç»™ %2 。' - ResidenceAlreadyExists: '领地 %1 已存在。' - ResidenceCreate: '你创建了领地 %1 ï¼' - ResidenceRename: '领地 %1 已改å为 %2 。' - ResidenceRemove: '领地 %1 å·²ç»è¢«ç§»é™¤...' - RentDisabled: '出租被ç¦ç”¨...' - RentDisableRenew: '%1 自动到期续约已关闭' - RentEnableRenew: '%1 自动到期续约已开å¯.' - RentableDisableRenew: '%1 æ›´æ–°å¯ç§Ÿç”¨çŠ¶æ€å…³é—­.' - RentableEnableRenew: '%1 æ›´æ–°å¯ç§Ÿç”¨çŠ¶æ€å¼€å¯.' - LandForSale: '出售土地' - SellAmount: '销售金é¢' - LeaseExpire: '租èµåˆ°æœŸæ—¶é—´' - RentExpire: '租金到期时间' - RentableAutoRenew: '自动更新å¯å‡ºç§Ÿçš„土地' - RentAutoRenew: '租借自动更新' - RentableLand: 'å¯ä¾›å‡ºç§ŸåœŸåœ°' - ListMaterialAdd: '%1 添加到领地 %2' - ListMaterialRemove: '%1 已从领地 %2 移除' - ItemBlacklisted: 'ä½ ä¸èƒ½åœ¨è¿™ä½¿ç”¨è¢«ç¦æ­¢çš„物å“.' - RentedModifyDeny: 'ä¸èƒ½ä¿®æ”¹ä¸€ä¸ªç§Ÿæ¥çš„领地.' - WorldPVPDisabled: '当å‰ä¸–界的PvP被ç¦æ­¢.' - NoPVPZone: '没有PVP的区域.' - FlagDeny: '你没有拥有领地 %1 çš„æƒé™.' - FlagSetDeny: '所有者ä¸èƒ½ä½¿ç”¨è¿™ä¸ªæƒé™ %1' - SelectPoint: '选择了 %1 的选择点' - ResidenceChat: '领地èŠå¤©åˆ‡æ¢åˆ° %1 ' - ResidenceMoveDeny: '你没有领地 %1 的移动æƒé™' - TeleportDeny: '你没有传é€æƒé™ã€‚' - TeleportSuccess: '已传é€ï¼' - TeleportNear: '已传é€åˆ°é¢†åœ°çš„附近。' - TeleportNoFlag: '对ä¸èµ·ï¼Œä½ æ²¡æœ‰ä¼ é€æƒé™åŽ»ç›®æ ‡é¢†åœ°ã€‚' - SetTeleportLocation: 'ä¼ é€ç‚¹å·²è®¾ç½®...' - HelpPageHeader: '帮助页 - %1 - 第 %2页 å…± %3页' - ListExists: '列表已ç»å­˜åœ¨...' - ListRemoved: '列表被移除...' - ListCreate: '已创建列表 %1' - LeaseRenew: '租èµæœ‰æ•ˆæœŸè‡³ %1到期' - LeaseRenewMax: '租èµæœ€å¤§çš„å…许值' - LeaseNotExpire: '没有这样的租èµæˆ–者租èµæœªåˆ°æœŸ.' - LeaseRenewalCost: '更新区域 %1 的花费是 %2' - LeaseInfinite: '租èµæ—¶é—´å·²è®¾ç½®ä¸ºæ— é™...' - PermissionsApply: 'æƒé™å·²åº”用到领地.' - PhysicalAreas: '物ç†åŒºåŸŸ' - CurrentArea: '当å‰åŒºåŸŸ' - LeaseExpire: '租约期满' - NotOnline: '目标玩家必须在线.' - ResidenceGiveLimits: '无法给予目标玩家,因为这超过了目标玩家的上线' - ResidenceGive: '你把领地 %1 给了玩家 %2' - ResidenceRecieve: '你从玩家 %2 那里接收到了 %1 领地' - #Version 4 New Fields - #ResidenceListAll: 'Residences - - removed, use GenericPage now - ResidenceListAllEmpty: '在这个æœåŠ¡å™¨ä¸Šæ²¡æœ‰ä»»ä½•çš„领地...' - InvalidPage: '无效页数...' - NextPage: '下一页' - #Version 10 New Fields - RemovePlayersResidences: '删除了所有这个玩家的领地 %1' - GenericPage: '页数 %1 / %2' - #Version 11 New Fields - ResidenceRentedBy: '被 %1 租用' - #Version 14 New Fields - InvalidCharacters: '侦测到无效åå­—...' - InvalidNameCharacters: 'å字里包å«éžæ³•å­—符...' - #Version 15 New Fields - DeleteConfirm: '你确定è¦åˆ é™¤é¢†åœ° %1 å—?输入"/res confirm"æ¥ç¡®å®šã€‚' - #Version 18 New Fields - SelectTooHigh: '警告ï¼ä½ æ‰€åˆ’分的领地大å°å·²è¶…过æœåŠ¡å™¨é™åˆ¶ï¼' - SelectTooLow: '警告ï¼ä½ æ‰€åˆ’分的领地大å°å·²è¶…过æœåŠ¡å™¨é™åˆ¶ï¼' - WorldEditNotFound: '未å‘现WorldEditæ’件。' - #Version 19 New Fields - NoResHere: '没有人在这里设置了领地。' - DeleteSubzoneConfirm: '你确定è¦åˆ é™¤åˆ†åŒº %1 å—?输入“/res confirmâ€æ¥ç¡®å®šã€‚' - #Version 20 New Fields - SubzoneOwnerChange: '分区 %1 所有者改为 %2' - CoordsTop: 'X:%1 Y:%2 Z:%3' - CoordsBottom: 'X:%1 Y:%2 Z:%3' - #Version 21 New Fields - AdminToggle: 'Automatic resadmin toggle turned %1' - #Version 22 New Fields - NoSpawn: 'You do not have move permissions at your spawn point. Relocating' - CompassTargetReset: '你的指å—针指å‘å·²é‡ç½®' - CompassTargetSet: '你的指å—针现在指å‘领地 %1' - - - #The below lines are mostly a word bank for various uses. - #Version 1 Fields - Description: 'æè¿°' - Land: '土地' - Cost: '花费' - Selection: '选择' - Total: '总计' - Size: '尺寸' - Expanding: '扩张' - Shifting: '移' - Up: '上' - Down: '下' - Error: '错误' - Flags: 'æƒé™' - Your: 'ä½ çš„' - Group: '组' - Others: '其他人' - Primary: '第一个' - Secondary: '第二个' - Selection: '选择' - Moved: '移动' - Status: '状æ€' - Available: 'å¯ç”¨' - On: 'å¼€å¯' - Off: '关闭' - Name: 'åå­—' - Lists: '列表' - Residences: '领地' - Residence: '领地' - Count: '统计' - Owner: '所有者' - #Version 4 Fields - World: '世界' - #Version 12 Fields - Subzones: '附属领地' - #Version 20 Fields - CoordsT: '顶åæ ‡' - CoordsB: '底部的åæ ‡' - #Version 22 Fields - TurnOn: 'å¼€' - TurnOff: 'å…³' - -# This is the help / usage messages for each command. -# It follows this format: -# -# Description: ' -# Info: ' -# SubCommands: -# - these follow the same format, and each sub command can have its own subcommands -# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that -# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). -# Add a page number after the ? mark to see that page. +# 注æ„:如果你想修改这个文件,强烈建议您制作一个副本 此文本由龙梦云ddmcloud.comæä¾› +# 龙梦云 您最好的选择 Q493537777 +# 接å—å„ç§æ’件,php定制 +# 而ä¸æ˜¯ç›´æŽ¥ä¿®æ”¹.这个文件将被 Residence æ’件自动更新 +# 当检测到一个新的版本,您的更改将被覆盖. +# 一旦你有此文件的副本,更改config.yml的语言选项Language: +# 为你命å的副本. -HelpLinesPerPage: 7 -CommandHelp: #this is just a holder node, that holds the entire help - Description: 领地æ’件相关帮助 - SubCommands: #this is the actual beginning of all commands - res: #main residence command - Description: 领地æ’件相关帮助 - Info: - - '如果有疑问在这里找ä¸åˆ°ï¼Œæ¬¢è¿Žè®¿é—®Wiki' - - '地å€ï¼šresidencebukkitmod.wikispaces.com (英文)' - - '输入/[命令] ? <页é¢>获得更多信æ¯' - SubCommands: - select: #selection commands - Description: Selection Commands - Info: - - '选择此命令的使用范围领地.' - - '/res select [x] [y] [z] - 选择一个区å—在中间, ä½ çš„åŠå¾„.' - SubCommands: - coords: - Description: 显示选定的åæ ‡ - Info: - - 'Usage: /res select coords' - size: - Description: æ˜¾ç¤ºé€‰å®šçš„é¢†åœ°å¤§å° - Info: - - 'Usage: /res select size' - cost: - Description: 显示选定的领地需缴纳金 - Info: - - 'Usage: /res select cost' - vert: - Description: Expand Selection Vertically - Info: - - 'Usage: /res select vert' - - 'Will expand selection as high and as low as allowed.' - sky: - Description: Expand Selection to Sky - Info: - - 'Usage: /res select sky' - - 'Expands as high as your allowed to go.' - bedrock: - Description: Expand Selection to Bedrock - Info: - - 'Usage: /res select bedrock' - - 'Expands as low as your allowed to go.' - expand: - Description: Expand selection in a direction. - Info: - - 'Usage: /res select expand ' - - 'Expands in the direction your looking.' - shift: - Description: Shift selection in a direction - Info: - - 'Usage: /res select shift ' - - 'Pushes your selection by in the direction your looking.' - chunk: - Description: Select the chunk your currently in. - Info: - - 'Usage: /res select chunk' - - 'Selects the chunk your currently standing in.' - 领地: - Description: Select a existing area in a 领地. - Info: - - 'Usage /res select <领地> ' - - 'Selects a existing area in a 领地.' - create: #creation command - Description: 创建领地 - Info: - - Usage: '/res create <领地åå­—>' - remove: #remove command - Description: 删除领地 - Info: - - 'Usage: /res remove <领地åå­—>' - removeall: - Description: 删除æŸä½çŽ©å®¶æ‰€å±žçš„全部领地 - Info: - - 'Usage: /res removeall [owner]' - - 'Removes all residences owned by a specific player.' - - 'Requires /resadmin if you use it on anyone besides yourself.' - confirm: - - 'Usage: /res confirm' - - '确认你è¦åˆ é™¤æŸä¸ªé¢†åœ°' - subzone: - Description: 在æŸä¸ªé¢†åœ°é‡Œåˆ›å»ºé™„属领地 - Info: - - 'Usage: /res subzone <领地å> [附属领地å]' - - '如果领地å为空,那么将以你所在的领地为主' - area: - Description: 'Manage physical areas for a residence.' - SubCommands: - list: - Description: List physical areas in a residence - Info: - - Usage: /res area list [residence] - listall: - Description: List coordinates and other info for areas - Info: - - Usage: /res area listall [residence] - add: - Description: Add physical areas to a residence - Info: - - Usage: /res area add [residence] [areaID] - - You must first select two points first. - remove: - Description: Remove physical areas from a residence - Info: - - Usage: /res area remove [residence] [areaID] - replace: - Description: Replace physical areas in a residence - Info: - - Usage: /res area replace [residence] [areaID] - - You must first select two points first. - - Replacing a area will charge the difference in size if the new area is bigger. - info: - Description: 显示æŸä¸ªé¢†åœ°çš„ä¿¡æ¯ - Info: - - Usage: /res info <领地å> - - 如果领地å为空,将以你所处的领地为主 - limits: - Description: 显示领地功能é™åˆ¶ - Info: - - Usage: /res limits - - 显示你在创建或管ç†é¢†åœ°æ—¶å¯¹éƒ¨åˆ†åŠŸèƒ½çš„é™åˆ¶ - message: - Description: 设置领地进入/ç¦»å¼€ä¿¡æ¯ - Info: - - Usage: /res message <领地å> [enter/leave] [ä¿¡æ¯] - - 设置æŸä¸ªé¢†åœ°çš„进入/ç¦»å¼€ä¿¡æ¯ - - Usage: /res message <领地å> remove [enter/leave] - - 删除æŸä¸ªé¢†åœ°çš„进入/ç¦»å¼€ä¿¡æ¯ - lease: - Description: Manage residence leases - Info: - - Usage: /res lease [renew/cost] [residence] - - /res lease cost will show the cost of renewing a residence lease. - - /res lease renew will renew the residence provided you have enough money. - SubCommands: - set: - Description: Set the lease time (admin only) - Info: - - Usage: /resadmin lease set [residence] [#days/infinite] - - Sets the lease time to a specified number of days, or infinite. - bank: - Description: Manage money in a Residence - Info: - - Usage: /res bank [deposit/withdraw] [amount] - - You must be standing in a Residence - - You must have the +bank flag. - tp: - Description: ä¼ é€åˆ°æŸä¸ªé¢†åœ° - Info: - - Usage: /res tp [领地å] - - 将你传é€åˆ°æŸä¸ªé¢†åœ°ï¼Œå‰æ对应领地å…许传é€æˆ–你是对应领地的主人 - - Your permission group must also be allowed to teleport by the server admin. - tpset: - Description: 设置æŸä¸ªé¢†åœ°çš„ä¼ é€ç›®æ ‡ - Info: - - Usage: /res tpset - - This will set the teleport location for a residence to where your standing. - - You must be standing in the residence to use this command. - - You must also be the owner or have the +admin flag for the residence. - set: - Description: Set general flags on a Residence - Info: - - Usage: /res set [flag] [true/false/remove] - - To see a list of flags, use /res flags ? - - These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?) - pset: - Description: Set flags on a specific player for a Residence. - Info: - - Usage: /res pset [player] [flag] [true/false/remove] - - Usage: /res pset [player] removeall - - To see a list of flags, use /res flags ? - gset: - Description: Set flags on a specific group for a Residence. - Info: - - Usage: /res gset [group] [flag] [true/false/remove] - - To see a list of flags, use /res flags ? - lset: - Description: Change blacklist and ignorelist options - Info: - - Usage: /res lset [blacklist/ignorelist] [material] - - Usage: /res lset info - - Blacklisting a material prevents it from being placed in the residence. - - Ignorelist causes a specific material to not be protected by Residence. - flags: - Description: List of flags - Info: - - 'For flag values, usually true allows the action, and false denys the action.' - - 'build - å…许或ç¦æ­¢çŽ©å®¶æ”¾ç½®ç ´åæ–¹å—' - - 'use - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é—¨ã€æŒ‰é’®ã€æ‹‰æ†ç­‰' - - 'move - å…许或ç¦æ­¢çŽ©å®¶è¿›å…¥æ­¤é¢†åœ°æˆ–在此领地活动' - - 'container - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨ç†”炉ã€ç®±å­ã€å‘射器等' - - 'trusted - Gives build, use, move, container and tp flags' - - 'place - allows or denys only placement of blocks, overrides the build flag.' - - 'destroy - allows or denys only destruction of blocks, overrides the build flag.' - - 'pvp - allow or deny pvp in the residence' - - 'tp - allow or disallow teleporting to the residence.' - - 'admin - gives a player permission to change flags on a residence.' - - 'subzone - allow a player to make subzones in the residence.' - - 'monsters - allows or denys monster spawns' - - 'animals - allows or denys animal spawns.' - - 'healing - setting to true makes the residence heal its occupants' - - 'tnt - allow or deny tnt explosions' - - 'creeper - allow or deny creeper explosions' - - 'ignite - allows or denys fire ignition.' - - 'firespread - allows or denys fire spread.' - - 'bucket - allow or deny bucket use.' - - 'flow - allows or denys liquid flow.' - - 'lavaflow - allows or denys lava flow, overrides flow' - - 'waterflow - allows or denys water flow, overrides flow' - - 'damage - allows or denys all entity damage within the residence.' - - 'piston - allow or deny pistons from pushing or pulling blocks in the residence.' - - 'hidden - hides residence from list or listall commands.' - - 'cake - allows or denys players to eat cake' - - 'lever - allows or denys players to use levers' - - 'button - allows or denys players to use buttons' - - 'diode - allows or denys players to use redstone repeaters' - - 'door - allows or denys players to use doors and trapdoors' - - 'table - allows or denys players to use workbenches' - - 'enchant - allows or denys players to use enchanting tables' - - 'brew - allows or denys players to use brewing stands' - - 'bed - allows or denys players to use beds' - - 'button - allows or denys players to use buttons' - - 'pressure - allows or denys players to use pressure plates' - - 'note - allows or denys players to use note blocks' - - 'redstone - Gives lever, diode, button, pressure, note flags' - - 'craft - Gives table, enchant, brew flags' - list: - Description: List Residences - Info: - - Usage: /res list - - Lists all the residences you own. - - To list everyones residences, use /res listall. - listall: - Description: List All Residence - Info: - - Usage: /res listall - - Lists all residences on the server. - sublist: - Description: List Residence Subzones - Info: - - Usage: /res sublist - - List subzones within a residence. - default: - Description: Reset residence to default flags. - Info: - - Usage: /res default - - Resets the flags on a residence to their default. You must be the owner or an admin to do this. - rename: - Description: Renames a residence. - Info: - - Usage: /res rename [OldName] [NewName] - - You must be the owner or an admin to do this. - - The name must not already be taken by another residence. - mirror: - Description: Mirrors Flags - Info: - - Usage: /res mirror [Source Residence] [Target Residence] - - Mirrors flags from one residence to another. You must be owner of both or a admin to do this. - market: - Description: Buy, Sell, or Rent Residences - Info: - - Usage: /res market ? for more info - SubCommands: - info: - Description: Get economy info on residence - Info: - - Usage: /res market info [residence] - - Shows if the Residence is for sale or for rent, and the cost. - list: - Description: Lists rentable and for sale residences. - Info: - - Usage: /res market list - sell: - Description: Sell a residence - Info: - - Usage: /res market sell [residence] [amount] - - Puts a residence for sale for [amount] of money. - - Another player can buy the residence with /res market buy - buy: - Description: Buy a residence - Info: - - Usage: /res market buy [residence] - - Buys a Residence if its for sale. - unsell: - Description: Stops selling a residence - Info: - - Usage: /res market unsell [residence] - rent: - Description: Rent a residence - Info: - - Usage: /res market rent [residence] - - Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it. - rentable: - Description: Make a residence rentable. - Info: - - Usage: /res market rentable [residence] [cost] [days] - - Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires. - release: - Description: Remove a residence from rent or rentable. - Info: - - Usage: /res market release [residence] - - If you are the renter, this command releases the rent on the house for you. - - If you are the owner, this command makes the residence not for rent anymore. - current: - Description: Show residence your currently in. - Info: - - Usage: /res current - lists: - Description: Predefined permission lists - Info: - - Predefined permissions that can be applied to a residence. - SubCommands: - add: - Description: Add a list - Info: - - Usage: /res lists add - remove: - Description: Remove a list - Info: - - Usage: /res lists remove - apply: - Description: Apply a list to a residence - Info: - - Usage: /res lists apply - set: - Description: Set a flag - Info: - - Usage: /res lists set - pset: - Description: Set a player flag - Info: - - Usage: /res lists pset - gset: - Description: Set a group flag - Info: - - Usage: /res lists gset - view: - Description: View a list. - Info: - - Usage: /res lists view - server: - Description: 设置æŸä¸ªé¢†åœ°ä¸ºæœåŠ¡å™¨æ‰€å±ž(ä»…é™ç®¡ç†å‘˜ä½¿ç”¨) - Info: - - Usage: /resadmin server [residence] - - å¯ä»¥è®©æŸä¸ªé¢†åœ°å˜ä¸ºæœåŠ¡å™¨æ‰€å±ž - setowner: - Description: 设置æŸä¸ªé¢†åœ°çš„所有者(ä»…é™ç®¡ç†å‘˜ä½¿ç”¨) - Info: - - Usage: /resadmin setowner [领地å] [玩家] - resreload: - Description: é‡æ–°åŠ è½½æ’件é…ç½®(ä»…é™ç®¡ç†å‘˜ä½¿ç”¨) - Info: - - Usage: /resreload - resload: - Description: Load residence save file (UNSAFE, admin only). - Info: - - Usage: /resload - - UNSAFE command, does not save residences first. - - Loads the residence save file after you have made changes. - version: - Description: 显示领地æ’ä»¶çš„ç‰ˆæœ¬ä¿¡æ¯ - Info: - - Usage: /res version +Language: + # 下é¢æ˜¯ Residence æ’件å‘é€ç»™çŽ©å®¶çš„ä¿¡æ¯ + # 需è¦æ³¨æ„的是一些å˜é‡,åƒ %1 è¿™ç§,ä¸è¦æ”¹å˜. + NewPlayerInfo: '&eIf you want to create protected area for your house, please use + wooden axe to select opposite sides of your home and execute command &2/res create + YourResidenceName' + InvalidResidence: "无效的领地..." + InvalidSubzone: "无效的领地å­åŒºåŸŸ..." + InvalidDirection: "无效方å‘..." + InvalidChannel: "无效频é“..." + InvalidAmount: "无效数é‡..." + InvalidCost: "无效花费..." + InvalidDays: "无效的天数..." + InvalidMaterial: "无效的ææ–™..." + InvalidBoolean: "无效值,必须是 true(t) 或者\ + \ false(f)" + InvalidArea: "无效的区域..." + InvalidGroup: "无效的æƒé™ç»„..." + # Replace all text with '' to disable this message + CantPlaceLava: You can't place lava outside residence and higher than %1 block level + # Replace all text with '' to disable this message + CantPlaceWater: You can't place Water outside residence and higher than %1 block level + InvalidMessageType: "消æ¯ç±»åž‹å¿…须为enter(进入\ + 领地信æ¯)leave(离开领地信æ¯)或remove(移\ + 除信æ¯)." + InvalidFlag: "æƒé™æ— æ•ˆ..." + InvalidFlagState: "无效的æƒé™çŠ¶æ€, 必须是\ + \ true(t)å¼€å¯, false(f)关闭, 或者 remove(r)移除" + AreaExists: "区域åå­—å·²ç»å­˜åœ¨." + AreaCreate: "领地ID %1 创建æˆåŠŸ" + AreaDiffWorld: "区域与领地是在一个ä¸åŒ\ + 的世界." + AreaCollision: "区域与领地 %1 冲çª" + AreaSubzoneCollision: "区域和领地å­åŒºåŸŸ %1 冲\ + çª" + AreaNonExist: "区域ä¸å­˜åœ¨." + AreaInvalidName: "区域å无效..." + AreaToSmallTotal: Selected area smaller than allowed minimal (%1) + AreaToSmallX: Your x selection length is too small. %1 allowed %2 + AreaToSmallY: Your selection height is too small. %1 allowed %2 + AreaToSmallZ: Your z selection length is too small. %1 allowed %2 + AreaRename: "区域å从 %1 更改到 %2" + AreaRemove: "移除区域 %1..." + AreaRemoveLast: "ä¸èƒ½æŠŠæœ€åŽä¸€ä¸ªåŒºåŸŸä»Žé¢†\ + 地中移除." + AreaNotWithinParent: "这个区域ä¸åœ¨çˆ¶åŒºåŸŸä¹‹\ + 内." + AreaUpdate: "区域已更新..." + AreaMaxPhysical: "ä½ å·²ç»è¾¾åˆ°ä½ çš„领地所å…\ + 许的最大区域." + AreaSizeLimit: "区域的大å°è¶…出你å…许的\ + 范围上é™." + AreaHighLimit: "ä½ ä¸èƒ½ä¿æŠ¤è¿™æ ·é«˜çš„领地\ + ,你的上é™æ˜¯ %1" + AreaLowLimit: "ä½ ä¸èƒ½ä¿æŠ¤è¿™æ ·æ·±çš„领地\ + ,你的上é™æ˜¯ %1" + NotInResidence: "ä½ ä¸åœ¨ä¸€ä¸ªé¢†åœ°é‡Œ." + Kicked: You were kicked from residence + InResidence: "你正站在领地 %1里" + ResidenceOwnerChange: "领地的拥有者从玩家 %1\ + \ 改为玩家 %2" + NonAdmin: "ä½ ä¸æ˜¯é¢†åœ°çš„管ç†å‘˜." + AdminOnly: "åªæœ‰ç®¡ç†å‘˜æ‰èƒ½ä½¿ç”¨è¿™ä¸ªæƒ\ + é™." + ChatDisabled: "领地èŠå¤©å·²å…³é—­..." + SubzoneRename: "领地å­åŒºåŸŸ%1 å·²é‡å‘½å为\ + \ %2" + SubzoneRemove: "领地å­åŒºåŸŸ %1 已移除." + SubzoneCreate: "创建领地å­åŒºåŸŸ %1" + SubzoneCreateFail: "ä¸èƒ½åˆ›å»ºé¢†åœ°å­åŒºåŸŸ %1" + SubzoneExists: "领地å­åŒºåŸŸ %1 å·²ç»å­˜åœ¨." + SubzoneCollide: "领地å­åŒºåŸŸä¸Žå¦ä¸€ä¸ªé¢†åœ°\ + å­åŒºåŸŸ %1 冲çª" + SubzoneMaxDepth: "您已达到了系统å…许的最\ + 大分区深度." + SubzoneSelectInside: "两个选择点必须在领地\ + 内" + SelectPoints: "在用这个命令之å‰ï¼Œè¯·å…ˆ\ + 用选择工具选å–两个点!" + SelectOverlap: '&cSelected points overlap with &e%1 &cregion!' + SelectionSuccess: "选择æˆåŠŸ!" + SelectionFail: "无效的选择命令..." + SelectionBedrock: "扩大到å…许的最低高度." + SelectionSky: "扩大到å…许的最高高度." + SelectionArea: "在领地 %2 中选择区域 %1" + SelectDiabled: "你没有使用选择命令的æƒ\ + é™." + NoPermission: "你没有此命令的æƒé™." + OwnerNoPermission: "所有者无此命令的æƒé™\ + ." + ParentNoPermission: "你没有改å˜çˆ¶åŒºåŸŸçš„æƒ\ + é™." + MessageChange: "消æ¯å·²è®¾ç½®..." + FlagSet: "æƒé™å·²è®¾ç½®..." + FlagCheckTrue: "æƒé™ %1 为玩家 %2 在领地 %3 设\ + ç½®,值为=%4" + FlagCheckFalse: "æƒé™ %1 未为玩家 %2 在领地中\ + 设置." + FlagsCleared: "æƒé™å·²æ¸…除." + FlagsDefault: "æƒé™å·²è®¾ç½®ä¸ºé»˜è®¤." + Usage: "命令用法" + InvalidHelp: "无效的帮助页..." + SubCommands: "å­å‘½ä»¤" + InvalidList: "未知列表的类型,必须是黑\ + åå•ä¸­çš„类型." + MaterialGet: "ææ–™å称为ID %1 是 %2" + MarketDisabled: "市场被ç¦ç”¨!" + MarketList: "市场列表" + ResidenceList: '&a%1%2 &e- %3: %4' + Rented: ' &a(Rented)' + SignsUpdated: '&e%1 signs updated!' + SignTopLine: '[market]' + SignDateFormat: YY/MM/dd HH:mm + SignForRentTopLine: '&8For Rent' + SignForRentPriceLine: '&8%1&f/&8%2&f/&8%3' + SignForRentResName: '&8%1' + SignForRentBottomLine: '&9Available' + SignRentedAutorenewTrue: '&2' + SignRentedAutorenewFalse: '&c' + SignRentedTopLine: '%1' + SignRentedPriceLine: '&8%1&f/&8%2&f/&8%3' + SignRentedResName: '&8%1' + SignRentedBottomLine: '&1%1' + SignForSaleTopLine: '&8For Sale' + SignForSalePriceLine: '&8%1' + SignForSaleResName: '&8%1' + SignForSaleBottomLine: '&5Available' + SelectionTool: "选择工具" + InfoTool: "ä¿¡æ¯å·¥å…·" + NoBankAccess: "你没有银行æƒé™.." + NotEnoughMoney: "你没有足够的æƒé™." + BankNoMoney: "在银行里没有足够的钱." + BankDeposit: "ä½ å­˜ %1 元到领地银行." + BankWithdraw: "ä½ å–出 %1 元从领地银行." + MoneyCharged: "支出 %1 元从 %2 å¸æˆ·." + MoneyAdded: Got %1 to your %2 account. + MoneyCredit: "收入 %1 元从 %2 å¸æˆ·." + RentReleaseInvalid: "领地 %1 没有被租用或者被\ + 出租." + RentSellFail: "ä¸èƒ½å‡ºå”®ä¸€ä¸ªè¢«ç§Ÿå‡ºåŽ»çš„\ + 领地." + SellRentFail: "无法出售当å‰æ­£åœ¨å‡ºç§Ÿé¢†\ + 地." + OwnerBuyFail: "无法购买自己的土地!" + OwnerRentFail: "ä¸èƒ½ç§Ÿä½ è‡ªå·±çš„土地!" + AlreadySellFail: "领地已ç»å‡ºå”®!" + ResidenceBought: "ä½ å·²ç»ä¹°ä¸‹äº†é¢†åœ° %1" + ResidenceBuy: "玩家 %1 从你那买下了领地\ + \ %2." + ResidenceBuyTooBig: "此领地已超过系统å…许\ + 的最大领域." + ResidenceNotForSale: "领地没有用于出售." + ResidenceForSale: "现在以 %2 销售领地 %1 " + ResidenceStopSelling: "领地ä¸å†é”€å”®." + ResidenceTooMany: "已达到系统å…许领地的最\ + 大上é™." + ResidenceMaxRent: "已达到系统å…许你租用领\ + 地的最大上é™." + ResidenceAlreadyRent: "领地已ç»è¢«ç§Ÿç”¨..." + ResidenceNotForRent: "领地ä¸ç”¨äºŽå‡ºç§Ÿ..." + ResidenceNotRented: "领地没有被租用." + ResidenceUnrent: "领地%1å·²ä¸å†å‡ºç§Ÿ." + ResidenceRemoveRentable: "领地 %1 ä¸å†å‡ºç§Ÿ." + ResidenceForRentSuccess: "领地%1 现在租金为%2,æ¯\ + 次 %3天." + ResidenceRentSuccess: "ä½ å·²ç»ç§Ÿç”¨é¢†åœ° %1 %2天.." + ResidenceAlreadyRented: "领地 %1,ç›®å‰å·²å‡ºç§Ÿç»™ %2" + ResidenceAlreadyExists: "领地 %1已存在." + ResidenceCreate: "你创建了领地 %1!" + ResidenceRename: "领地 %1 已改å为 %2" + ResidenceRemove: "领地 %1 å·²ç»è¢«ç§»é™¤..." + RentDisabled: "租用领地被ç¦ç”¨..." + RentDisableRenew: "%1 自动到期续约已关闭" + RentEnableRenew: "%1 自动到期续约已开å¯." + RentableDisableRenew: "%1 æ›´æ–°å¯ç§Ÿç”¨çŠ¶æ€å…³é—­\ + ." + RentableEnableRenew: "%1 æ›´æ–°å¯ç§Ÿç”¨çŠ¶æ€å¼€å¯." + LandForSale: "出售土地" + SellAmount: "销售金é¢" + LeaseExpire: "租约期满" + RentExpire: "租用到期时间" + RentableAutoRenew: "自动更新å¯ç§Ÿç”¨çš„土地" + RentAutoRenew: "租用自动更新" + RentableLand: "å¯ä¾›ç§Ÿç”¨çš„土地" + ListMaterialAdd: "%1 添加到领地 %2" + ListMaterialRemove: "%1 已从领地 %2移除" + ItemBlacklisted: "ä½ ä¸èƒ½åœ¨è¿™ä½¿ç”¨è¢«ç¦æ­¢çš„\ + 物å“." + RentedModifyDeny: "ä¸èƒ½ä¿®æ”¹ä¸€ä¸ªç§Ÿæ¥çš„领地\ + ." + WorldPVPDisabled: "当å‰ä¸–界的PvP被ç¦æ­¢." + NoPVPZone: "ç¦æ­¢PVP的区域." + FlagDeny: "你没有拥有领地 %1 çš„æƒé™." + FlagSetDeny: "所有者ä¸èƒ½ä½¿ç”¨è¿™ä¸ªæƒé™\ + \ %1" + SelectPoint: "选择了 %1的选择点" + ResidenceChat: "领地èŠå¤©åˆ‡æ¢åˆ° %1" + ResidenceMoveDeny: "你没有领地 %1 的移动æƒé™" + ResidenceFlagDeny: You dont have %1 permission for Residence %2 + TeleportDeny: "你没有传é€æƒé™." + TeleportSuccess: "已传é€!" + TeleportConfirm: '&eThis teleport is not safe, you will fall for &c%1 &eblocks. + Use &2/res tpconfirm &eto perform teleportation anyways.' + TeleportStarted: '&eTeleportation to %1 started, don''t move for next %2 sec.' + TeleportCanceled: '&eTeleportation canceled!' + NoTeleportConfirm: There is no teleports waiting for confirmation! + TeleportNear: "ä¼ é€åˆ°é¢†åœ°çš„附近." + TeleportNoFlag: "对ä¸èµ·ï¼Œä½ æ²¡æœ‰ä¼ é€æƒé™\ + 去目标领地." + SetTeleportLocation: "ä¼ é€ç‚¹å·²è®¾ç½®..." + HelpPageHeader: "帮助页 - %1 - 第 %2 页 å…± %3 页" + ListExists: "列表已ç»å­˜åœ¨..." + ListRemoved: "列表被移除..." + ListCreate: "已创建列表 %1" + LeaseRenew: "出租有效期至 %1到期" + LeaseRenewMax: "出租最大的å…许值" + LeaseNotExpire: "没有这样的出租或者出租\ + 未到期." + LeaseRenewalCost: "更新区域 %1 的花费是 %2" + LeaseInfinite: "出租时间已设置为无é™..." + PermissionsApply: "æƒé™å·²åº”用到领地." + PhysicalAreas: "物ç†åŒºåŸŸ" + CurrentArea: "当å‰åŒºåŸŸ" + TotalWorth: Total worth of residence:&3 %1 (%2) + NotOnline: "目标玩家必须在线." + ResidenceGiveLimits: "无法给予目标玩家,因\ + 为这超过了目标玩家的上é™" + ResidenceGive: "你把领地 %1 给了玩家 %2" + ResidenceRecieve: "你从玩家 %2 那里接收到了\ + \ %1 领地" + ResidenceListAllEmpty: "在这个æœåŠ¡å™¨ä¸Šæ²¡æœ‰ä»»\ + 何的领地..." + InvalidPage: "无效页数..." + NextPage: "下一页" + NextInfoPage: '&2| &eNext Page &2>>>' + PrevInfoPage: '&2<<< &ePrev Page &2|' + RemovePlayersResidences: "删除了所有这个玩家\ + 的领地 %1" + GenericPage: "第 %1 页,å…± %2 页" + ResidenceRentedBy: "被 %1 租用" + InvalidCharacters: "侦测到无效åå­—..." + InvalidNameCharacters: "å字里包å«éžæ³•å­—符..." + DeleteConfirm: "你确定è¦åˆ é™¤è¿™ä¸ªé¢†åœ° %1\ + \ å—?, 请用命令/res confirm æ¥ç¡®å®š." + SelectTooHigh: "警告,选择区域超过地图顶\ + 部,已é™åˆ¶." + SelectTooLow: "警告,选择区域超过地图底\ + 部,已é™åˆ¶." + WorldEditNotFound: "未检出 WorldEdit æ’件." + NoResHere: "这个ä½ç½®æ²¡æœ‰é¢†åœ°." + DeleteSubzoneConfirm: "你确定你è¦åˆ é™¤çš„分区\ + %1å—?,请用命令/res confirm æ¥ç¡®å®š." + SubzoneOwnerChange: "分区 %1 所有者改为 %2" + CoordsTop: X:%1 Y:%2 Z:%3 + CoordsBottom: X:%1 Y:%2 Z:%3 + AdminToggle: "自动resadmin切æ¢å·²%1." + NoSpawn: "你在é‡ç”Ÿç‚¹å¤„没有移动æƒé™\ + .å·²é‡ç½®" + CompassTargetReset: "您的标记指å—针已é‡ç½®" + CompassTargetSet: "您的标记指å—针设置为\ + \ %1" + # The below lines are mostly a word bank for various uses. + Description: "æè¿°" + Land: "土地" + Cost: "花费" + Selection: "选择" + Total: "总计" + Size: "尺寸" + Expanding: "扩张" + Contracting: Contracting + North: North + West: West + South: South + East: East + Shifting: "移" + Up: "上" + Down: "下" + Error: "错误" + Flags: "æƒé™" + Your: "ä½ çš„" + Group: "组" + Others: "其他人" + Primary: "第一个" + Secondary: "第二个" + Moved: "移动" + Status: "状æ€" + Available: "å¯ç”¨" + 'On': 'On' + 'Off': 'Off' + Name: "åå­—" + Lists: "列表" + Residences: "领地" + Residence: "领地" + Count: "统计" + Owner: "所有者" + World: "世界" + Subzones: "领地å­åŒºåŸŸ" + CoordsT: "顶部åæ ‡" + CoordsB: "底部åæ ‡" + TurnOn: 'on' + TurnOff: 'off' + LimitsTop: '----------------------------------------' + LimitsPGroup: '&7- &ePermissions Group:&3 %1' + LimitsRGroup: '&7- &eResidence Group:&3 %1' + LimitsAdmin: '&7- &eResidence Admin:&3 %1' + LimitsCanCreate: '&7- &eCan Create Residences:&3 %1' + LimitsMaxRes: '&7- &eMax Residences:&3 %1' + LimitsMaxEW: '&7- &eMax East/West Size:&3 %1' + LimitsMaxNS: '&7- &eMax North/South Size:&3 %1' + LimitsMaxUD: '&7- &eMax Up/Down Size:&3 %1' + LimitsMinMax: '&7- &eMin/Max Protection Height:&3 %1 to %2' + LimitsMaxSub: '&7- &eMax Subzone Depth:&3 %1' + LimitsMaxRents: '&7- &eMax Rents:&3 %1' + LimitsEnterLeave: '&7- &eCan Set Enter/Leave Messages:&3 %1' + LimitsNumberOwn: '&7- &eNumber of Residences you own:&3 %1' + LimitsCost: '&7- &eResidence Cost Per Block:&3 %1' + LimitsSell: '&7- &eResidence Sell Cost Per Block:&3 %1' + LimitsFlag: '&7- &eFlag Permissions:&3 %1' + LimitsMaxDays: '&7- &eMax Lease Days:&3 %1' + LimitsLeaseTime: '&7- &eLease Time Given on Renew:&3 %1' + LimitsRenewCost: '&7- &eRenew Cost Per Block:&3 %1' + LimitsBottom: '----------------------------------------' + Gui: + Set: + Title: '&6%1% flags' + Pset: + Title: '&6%1% %2% flags' + Actions: + - '&2Left click to enable' + - '&cRight click to disable' + - '&eShift + left click to remove' + InformationPage: + TopLine: '&e---< &a %1 &e >---' + Page: '&e-----< %1 >-----' + NextPage: '&e-----< %1 >-----' + NoNextPage: '&e-----------------------' + AutoSelection: + Enabled: '&eAuto selection mode turned ON. To disable it write /res select auto' + Disabled: '&eAuto selection mode turned OFF. To enable it again write /res select + auto' +CommandHelp: + Description: "领地包å«çš„帮助" + SubCommands: + res: + Description: "主è¦é¢†åœ°å‘½ä»¤" + Info: + - "查阅residence wiki æ¥èŽ·å¾—更多帮助." + - 'Wiki: residencebukkitmod.wikispaces.com' + - "使用 /[命令] ? <页ç > æ¥æŸ¥çœ‹æ›´å¤š\ + 帮助信æ¯." + SubCommands: + select: + Description: "选择命令" + Info: + - "该命令选择领地è¦ä½¿ç”¨çš„范\ + å›´." + - "/res select [x] [y] [z] - 选择方å—范围, 以\ + 你所处ä½ç½®ä¸ºä¸­å¿ƒ." + SubCommands: + coords: + Description: "显示选择的åæ ‡" + Info: + - "使用: /res select coords" + size: + Description: "显示选择体积" + Info: + - "使用: /res select size" + auto: + Description: Turns on auto selection tool + Info: + - 'Usage: /res select auto [playername]' + cost: + Description: "显示选择对象的价格" + Info: + - "使用: /res select cost" + vert: + Description: "纵å‘扩张选择区域" + Info: + - "使用: /res select vert" + - "将把选择区域扩张到å…许\ + 的最高点和最低点." + sky: + Description: "扩张选择区域到天空" + Info: + - "使用: /res select sky" + - "将把选择区域扩张到å…许\ + 的最高点." + bedrock: + Description: "扩张选择区域到基岩" + Info: + - "使用: /res select bedrock" + - "将把选择区域扩张到å…许\ + 的最低点." + expand: + Description: "å‘一个方å‘扩张选择\ + 区域." + Info: + - "使用: /res select expand <æ•°é‡>" + - "扩张 <æ•°é‡> 个方å—,å‘ä½ é¢\ + 对的方å‘." + shift: + Description: "å‘一个方å‘平移选择\ + 区域" + Info: + - "使用: /res select shift <æ•°é‡>" + - "将选择区域å‘ä½ é¢å¯¹çš„æ–¹\ + å‘推进 <æ•°é‡> 个方å—." + chunk: + Description: "选择你目å‰æ‰€åœ¨çš„区\ + 域å—." + Info: + - "使用: /res select chunk" + - "选择你目å‰æ‰€åœ¨çš„区域å—\ + ." + residence: + Description: "选择领地中一个已存\ + 在区域." + Info: + - "使用 /res select <领地å> <区域ID>" + - "选择领地中一个已存在区\ + 域." + worldedit: + Description: "设置选å–使用当å‰WorldEdit选\ + æ‹©." + Info: + - "使用 /res select worldedit" + - "设置选å–区域使用当å‰WorldEditçš„\ + 选择." + create: + Description: "创建领地" + Info: + - "使用: /res create <领地å>" + remove: + Description: "删除领地." + Info: + - "使用: /res remove <领地å>" + removeall: + Description: "删除æŸä¸ªçŽ©å®¶çš„所有领\ + 地." + Info: + - "使用: /res removeall [领地拥有者]" + - "删除所选玩家的所有领地." + - "éœ€è¦ /resadmin 如果你使用在其他\ + 玩家身上." + confirm: + Description: Confirms removal of a residence. + info: + - 'Usage: /res confirm' + - Confirms removal of a residence. + subzone: + Description: "在领地中创建领地å­åŒº\ + 域." + Info: + - "使用: /res subzone <领地å> [领地å­åŒº\ + 域å]" + - "如果领地å空ç€ï¼Œå°†å°è¯•ä½¿\ + 用你身处的领地." + area: + Description: "管ç†é¢†åœ°çš„物ç†èŒƒå›´." + SubCommands: + list: + Description: "列出领地的所有物ç†\ + 范围" + Info: + - "使用: /res area list [领地] <页ç >" + listall: + Description: "列出区域的å标和其\ + ä»–ä¿¡æ¯" + Info: + - "使用: /res area listall [领地] <页ç >" + add: + Description: "为领地添加物ç†èŒƒå›´" + Info: + - "使用: /res area add [领地å] [范围ID]" + - "你必须首先选择两个点." + remove: + Description: "从领地中删除物ç†èŒƒ\ + å›´" + Info: + - "使用: /res area remove [领地å] [范围\ + ID]" + replace: + Description: "替æ¢é¢†åœ°ä¸­ç‰©ç†èŒƒå›´" + Info: + - "使用: /res area replace [领地å] [范围\ + ID]" + - "你必须首先选择两个点." + - "替æ¢èŒƒå›´å°†æ‰£é™¤ä½“积å˜åŠ¨\ + 带æ¥çš„差价." + info: + Description: "显示领地的信æ¯." + info: + - 'Usage: /res info ' + - Leave off to display info for the residence your currently in. + limits: + Description: "显示你的é™åˆ¶ä¿¡æ¯." + info: + - 'Usage: /res limits' + - Shows the limitations you have on creating and managing residences. + message: + Description: "管ç†é¢†åœ°è¿›å…¥/离开欢迎\ + ä¿¡æ¯" + info: + - 'Usage: /res message [enter/leave] [message]' + - Set the enter or leave message of a residence. + - 'Usage: /res message remove [enter/leave]' + - Removes a enter or leave message. + lease: + Description: "管ç†é¢†åœ°å¥‘约" + info: + - 'Usage: /res lease [renew/cost] [residence]' + - /res lease cost will show the cost of renewing a residence lease. + - /res lease renew will renew the residence provided you have enough money. + SubCommands: + set: + Description: "设置契约时间 (管ç†å‘˜\ + æƒé™)" + Info: + - "使用: /resadmin lease set [领地] [#days/infinite]" + - "设置契约时间为指定的天\ + æ•°, 或无é™æœŸ." + bank: + Description: "管ç†é¢†åœ°é‡‘é’±" + Info: + - "使用: /res bank [deposit/withdraw] [æ•°é‡]" + - "你必须站在一个领地中" + - "你必须拥有 +bank æƒé™." + tp: + Description: "ä¼ é€åˆ°æŸä¸ªé¢†åœ°" + Info: + - "使用: /res tp [领地å]" + - "将你传é€åˆ°æŸä¸ªé¢†åœ°, ä½ å¿…é¡»\ + 有 +tp æƒé™æˆ–为目标领地主人\ + ." + - "ä½ çš„æƒé™ç»„åŒæ—¶å¿…须拥有传\ + é€çš„æƒé™." + tpconfirm: + Description: Ignore unsafe teleportation warning and teleport anyways + Info: + - 'Usage: /res tpconfirm' + - Teleports you to a residence, when teleportation is unsafe. + tpset: + Description: "设置领地的传é€ç‚¹" + Info: + - "使用: /res tpset" + - "将把你站立的地点设置为领\ + 地的传é€ç‚¹." + - "你必须站在领地中æ¥ä½¿ç”¨è¯¥\ + 命令." + - "ä½ å¿…é¡»åŒæ—¶ä¸ºé¢†åœ°ä¸»äººæˆ–æ‹¥\ + 有该领地的 +admin æƒé™." + set: + Description: "设置领地的主è¦æƒé™" + Info: + - "使用: /res set <领地> [æƒé™] [true/false/remove]" + - "查看æƒé™åˆ—表, 使用 /res flags ?" + - "这些æƒé™åº”用给任何没有特\ + 定æƒé™çš„玩家. (查看 /res pset ?)" + pset: + Description: "为æŸä¸ªçŽ©å®¶è®¾ç½®æŸä¸ªé¢†\ + 地的特定æƒé™." + Info: + - "使用: /res pset <领地> [玩家] [æƒé™]\ + \ [true/false/remove]" + - "使用: /res pset <领地> [玩家] removeall" + - "查看æƒé™åˆ—表使用 /res flags ?" + gset: + Description: "为特定群组设置æŸä¸ªé¢†\ + 地的æƒé™." + Info: + - "使用: /res gset <领地> [群组] [æƒé™]\ + \ [true/false/remove]" + - "查看æƒé™åˆ—表使用 /res flags ?" + lset: + Description: "改å˜ç‰©å“的黑åå•ä¸Žå¿½\ + 视åå•é€‰é¡¹" + Info: + - "使用: /res lset <领地> [blacklist/ignorelist] [物\ + å“]" + - "使用: /res lset <领地> info" + - "å°†æŸç‰©å“加入领地的黑åå•\ + ,以防止该物å“被放置在该\ + 领地中." + - "忽视åå•ä½¿æŸç‰©å“ä¸å—领地\ + ä¿æŠ¤." + flags: + Description: "æƒé™åˆ—表" + Info: + - "æƒé™çš„值: true=å…许该行为, false\ + \ =ç¦æ­¢." + - "build - å…许或ç¦æ­¢å»ºè®¾" + - "use - å…许或ç¦æ­¢é—¨ï¼Œæ“纵æ†ï¼Œ\ + 按钮等的使用..." + - "move - å…许或ç¦æ­¢åœ¨é¢†åœ°ä¸­è¡ŒåŠ¨\ + ." + - "container - å…许或ç¦æ­¢ä½¿ç”¨ç†”炉,\ + ç®±å­ï¼Œç‚¼è¯å°, etc..." + - "trusted - 给予玩家建造,使用,移动\ + ,ç®±å­,和传é€æƒé™" + - "place - å…许或ç¦æ­¢æ–¹å—的放置,\ + 将覆盖 build æƒé™." + - "destroy - å…许或ç¦æ­¢æ–¹å—çš„ç ´å\ + ,将覆盖 build æƒé™." + - "pvp - å…许或ç¦æ­¢é¢†åœ°å†… PVP" + - "tp - å…许或ç¦æ­¢é¢†åœ°å†…çš„ä¼ é€\ + ." + - "admin - 给予æŸçŽ©å®¶æ”¹å˜æŸé¢†åœ°æƒ\ + é™çš„æƒé™." + - "subzone - å…许玩家创建领地领地\ + å­åŒºåŸŸ." + - "monsters - å…许或ç¦æ­¢æ€ªç‰©å‡ºç”Ÿ" + - "animals - å…许或ç¦æ­¢åŠ¨ç‰©å‡ºç”Ÿ." + - "healing - 设置为true使领地å¯ä»¥æ²»ç–—\ + å±…ä½è€…" + - "tnt - å…许或ç¦æ­¢TNT爆炸" + - "creeper - å…许或ç¦æ­¢è‹¦åŠ›æ€•çˆ†ç‚¸" + - "ignite - å…许或ç¦æ­¢ç«ç„°ç‚¹ç‡ƒ." + - "firespread - å…许或ç¦æ­¢ç«ç„°è”“延." + - "bucket - å…许或ç¦æ­¢æ¡¶çš„使用." + - "flow - å…许或ç¦æ­¢æ¶²ä½“æµåŠ¨." + - "lavaflow - å…许或ç¦æ­¢å²©æµ†æµåŠ¨, 覆\ + ç›–æƒé™ flow" + - "waterflow - å…许或ç¦æ­¢æ°´æµåŠ¨,覆盖\ + æƒé™ flow" + - "damage - å…许或ç¦æ­¢é¢†åœ°ä¸­çš„所\ + 有实体伤害." + - "piston - å…许或ç¦æ­¢é¢†åœ°ä¸­ä½¿ç”¨\ + 活塞." + - "hidden - 将领地从 list 或 listall 命令列\ + 表中éšè—." + - "cake - å…许或ç¦æ­¢çŽ©å®¶åƒè›‹ç³•" + - "lever - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æ‹‰æ†" + - "button - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰\ + é’®" + - "diode - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨çº¢çŸ³\ + 中继器" + - "door - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é—¨æˆ–\ + 陷阱门" + - "table - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œ\ + å°" + - "enchant - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„\ + é­”å°" + - "brew - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é…¿é€ \ + å°" + - "bed - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ" + - "button - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰\ + é’®" + - "pressure - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åŽ‹\ + 力æ¿" + - "note - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³ç¬¦\ + ç›’" + - "redstone - 给予玩家 拉æ†, 红石中继\ + 器, 按钮, 压力æ¿, 音符盒 çš„æƒ\ + é™" + - "craft - 给予玩家 工作å°, 附魔å°\ + , é…¿é€ å° çš„æƒé™" + - "burn - å…许或ç¦æ­¢æ€ªç‰©åœ¨é¢†åœ°å†…\ + 燃烧" + list: + Description: "领地列表" + Info: + - "使用: /res list <玩家> <页ç >" + - "列出玩家拥有的所有领地 (除\ + 了éšè—çš„)." + - "如果是你自己的领地, 将显示\ + éšè—çš„." + - "列出所有人的所有领地, 使用\ + \ /res listall." + listhidden: + Description: "列出éšè—领地(管ç†å‘˜æƒ\ + é™)" + Info: + - "使用: /res listhidden <玩家> <页ç >" + - "列出æŸçŽ©å®¶çš„所有éšè—领地\ + ." + listall: + Description: "列出所有领地" + Info: + - "使用: /res listall <页ç >" + - "列出æœåŠ¡å™¨çš„所有领地. (出\ + 去éžä½ æ‹¥æœ‰çš„éšè—领地)" + listallhidden: + Description: "列出所有éšè—领地(管ç†\ + 员æƒé™)" + Info: + - "使用: /res listhidden <页ç >" + - "列出æœåŠ¡å™¨çš„所有éšè—领地\ + ." + sublist: + Description: "列出领地领地å­åŒºåŸŸ" + Info: + - "使用: /res sublist <领地> <页ç >" + - "列出æŸé¢†åœ°æ‰€æœ‰é¢†åœ°å­åŒºåŸŸ\ + ." + default: + Description: "é‡ç½®é¢†åœ°çš„æƒé™ä¸ºé»˜è®¤\ + 值." + Info: + - "使用: /res default <领地>" + - "é‡ç½®é¢†åœ°çš„æƒé™ä¸ºé»˜è®¤å€¼. ä½ \ + 必须是领地主人或管ç†å‘˜." + rename: + Description: "é‡å‘½å领地." + Info: + - "使用: /res rename [æ—§å称] [æ–°å称]" + - "你必须是领地主人或管ç†å‘˜\ + ." + - "æ–°å称必须没有被其他领地\ + 使用." + mirror: + Description: "é•œåƒæƒé™" + Info: + - "使用: /res mirror [æºé¢†åœ°] [目标领地\ + ]" + - "å°†æºé¢†åœ°é¢†åœ°æƒé™é•œåƒç»™ç›®\ + 标领地. 你你必须是领地主人\ + 或管ç†å‘˜." + market: + Description: "领地的买å–和租èµ" + SubCommands: + info: + Description: "获得领地的ç»æµŽä¿¡æ¯" + Info: + - "使用: /res market info [领地]" + - "显示领地是å¦å‡ºå”®æˆ–出租\ + , å·²ç»å‡ºä»·." + list: + Description: "列出å¯ç§Ÿå€Ÿé¢†åœ°å’Œå¯\ + 购买领地." + Info: + - "使用: /res market list" + sell: + Description: "出售领地" + Info: + - "使用: /res sell [领地] [ä»·æ ¼]" + - "以[ä»·æ ¼]出售领地." + - "å¦ä¸€ä¸ªçŽ©å®¶å¯ä»¥è´­ä¹°é¢†åœ°\ + 通过 /res market buy" + buy: + Description: "购买领地" + Info: + - "使用: /res buy [领地]" + - "购买正在出售的领地." + unsell: + Description: "åœæ­¢å‡ºå”®é¢†åœ°" + Info: + - "使用: /res unsell [领地]" + rent: + Description: "租用领地" + Info: + - "使用: /res market rent [领地] " + - "租用领地, Autorenew å¯ä»¥æ˜¯ true\ + \ 或 false. 如果为true,领地租用\ + 到期将自动续费." + rentable: + Description: "将领地设为å¯å‡ºç§Ÿ." + Info: + - "使用: /res market rentable [领地] [ä»·æ ¼]\ + \ [天数] " + - "将领地设为å¯å‡ºç§Ÿ. 如果 \ + \ 为 true, 该领地出租到期将自\ + 动å˜ä¸ºå¯å‡ºç§Ÿ." + release: + Description: "从出租或å¯å‡ºç§Ÿä¸­åˆ \ + 除一个领地." + Info: + - "使用: /res market release [领地]" + - "如果你是租户,该命令解\ + 除这个领地的租用." + - "如果你是领地主,该命令\ + åœæ­¢è¯¥é¢†åœ°å‡ºç§Ÿ." + current: + Description: "显示你目å‰æ‰€åœ¨é¢†åœ°." + Info: + - "使用: /res current" + signupdate: + Description: Updated residence signs (Admin only) + Info: + - 'Usage: /res signupdate' + lists: + Description: "预定义æƒé™åˆ—表" + Info: + - "预定义å¯åº”用到æŸé¢†åœ°çš„æƒ\ + é™åˆ—表." + SubCommands: + add: + Description: "添加列表" + Info: + - "使用: /res lists add <列表å>" + remove: + Description: "删除列表" + Info: + - "使用: /res lists remove <列表å>" + apply: + Description: "应用æŸåˆ—表到æŸé¢†åœ°" + Info: + - "使用: /res lists apply <列表å> <领地\ + >" + set: + Description: "设置领地æƒé™" + Info: + - "使用: /res lists set <列表å> <æƒé™>\ + \ <æƒé™å€¼>" + pset: + Description: "设置玩家æƒé™" + Info: + - "使用: /res lists pset <列表å> <玩家\ + > <æƒé™> <æƒé™å€¼>" + gset: + Description: "设置群组æƒé™" + Info: + - "使用: /res lists gset <æƒé™å> <群组å\ + > <æƒé™> <æƒé™å€¼>" + view: + Description: "查看列表." + server: + Description: "将领地设为æœåŠ¡å™¨æ‰€æœ‰\ + (仅管ç†å‘˜)." + Info: + - "使用: /resadmin server [领地]" + - "将领地设为æœåŠ¡å™¨æ‰€æœ‰." + setowner: + Description: "改å˜é¢†åœ°æ‰€æœ‰æƒ (管ç†å‘˜\ + æƒé™)." + Info: + - "使用: /resadmin setowner [领地] [玩家]" + resreload: + Description: "é‡æ–°è¯»å–领地 (管ç†å‘˜æƒ\ + é™)." + Info: + - "使用: /resreload" + resload: + Description: "读å–领地 save file (ä¸å®‰å…¨, ä»…\ + 管ç†å‘˜)." + Info: + - "使用: /resload" + - "ä¸å®‰å…¨å‘½ä»¤, å°†ä¸ä¼šé¦–å…ˆä¿å­˜\ + 领地." + - "读å–领地 save file 在你进行å˜æ›´\ + 之åŽ." + ressignconvert: + Description: Converts ResidenceSigns plugins saved signs (admin only). + Info: + - 'Usage: /ressignconvert' + version: + Description: "显示Residence版本" + Info: + - "使用: /res version" diff --git a/src/Language/Czech.yml b/src/Language/Czech.yml index 54b5e99fe..d1904df96 100644 --- a/src/Language/Czech.yml +++ b/src/Language/Czech.yml @@ -174,14 +174,14 @@ Language: InvalidCharacters: Detekovany nepovolene znaky... InvalidNameCharacters: Jmeno obsahuje nepovolene znaky... #Version 15 New Fields - DeleteConfirm: 'Opravdu chces odstranit residenci %1 ?, pouzij "/res confirm" k potvrzeni.' + DeleteConfirm: 'Opravdu chces odstranit residenci %1 ?, pouzij /res confirm k potvrzeni.' #Version 18 New Fields SelectTooHigh: Upozorneni, vyber presahuje vyskovy limit mapy. SelectTooLow: Upozorneni, vyber presahuje hloubkoy limit mapy. WorldEditNotFound: WorldEdit nebyl nalezen. #Version 19 New Fields NoResHere: Zde neni zadna residence. - DeleteSubzoneConfirm: 'Opravdu chces odstranit subzonu %1 ?, pouzij "/res confirm" k potvrzeni.' + DeleteSubzoneConfirm: 'Opravdu chces odstranit subzonu %1 ?, pouzij /res confirm k potvrzeni.' #Version 20 New Fields SubzoneOwnerChange: 'Majitel subzony %1 byl zmenen na %2' CoordsTop: 'X:%1 Y:%2 Z:%3' diff --git a/src/Language/French.yml b/src/Language/French.yml index 33b3f240b..7395c0a27 100644 --- a/src/Language/French.yml +++ b/src/Language/French.yml @@ -18,13 +18,13 @@ Language: InvalidCost: Prix invalide... InvalidDays: Nombre de jours invalide... InvalidMaterial: Matériau invalide... - InvalidBoolean: Valeur invalide, doit être "true" ou "false" + InvalidBoolean: Valeur invalide, doit être true ou false InvalidArea: Zone invalide... InvalidGroup: Groupe invalide... InvalidMessageType: Le type de message doit être enter ou remove InvalidList: Liste invalide... InvalidFlag: Flag invalide... - InvalidFlagState: Etat du flag invalide, doit être "true", "false", ou "remove" + InvalidFlagState: Etat du flag invalide, doit être true, false, ou remove AreaExists: Cette zone existe déjà AreaCreate: 'Zone créée, ID %1' AreaDiffWorld: La zone est dans un monde différent du lieu de résidence @@ -74,7 +74,7 @@ Language: Utilisation: Utilisation de la commande InvalidHelp: Page d'aide invalide SubCommands: Sous-commandes - InvalidList: Type de liste inconnu, doit être "blacklist" ou "ignorelist" + InvalidList: Type de liste inconnu, doit être blacklist ou ignorelist MaterialGet: 'Le nom du matériau de l''ID %1 est %2' MarketDisabled: Economie désactivée MarketList: Liste du marché @@ -173,14 +173,14 @@ Language: InvalidCharacters: Caractères invalides détectés... InvalidNameCharacters: Ce nom contient des caractères interdits... #Version 15 New Fields - DeleteConfirm: 'Voulez-vous vraiment supprimer la résidence %1, utilisez "/res confirm" pour confirmer' + DeleteConfirm: 'Voulez-vous vraiment supprimer la résidence %1, utilisez /res confirm pour confirmer' #Version 18 New Fields SelectTooHigh: Attention, la sélection est trop haute SelectTooLow: Attention, la sélection est trop basse WorldEditNotFound: WorldEdit n'est pas détecté #Version 19 New Fields NoResHere: Il n'y a pas de résidence là-dedans. - DeleteSubzoneConfirm: 'Voulez-vous vraiment supprimer la sous-zone %1, utilisez "/res confirm" pour confirmer' + DeleteSubzoneConfirm: 'Voulez-vous vraiment supprimer la sous-zone %1, utilisez /res confirm pour confirmer' #Version 20 New Fields SubzoneOwnerChange: 'Le propriétaire de la sous-zone %1 est remplacé par %2' CoordsTop: 'X:%1 Y:%2 Z:%3' @@ -378,8 +378,8 @@ CommandHelp: #this is just a holder node, that holds the entire help Description: Gère un contrat de location Info: - 'Utilisation: /res lease [renew/cost] [résidence]' - - '"/res lease cost" affiche le prix du renouvellement du contrat de la résidence [résidence]' - - '"/res lease renew" renouvelle le contrat si vous avez assez d''argent' + - '/res lease cost affiche le prix du renouvellement du contrat de la résidence [résidence]' + - '/res lease renew renouvelle le contrat si vous avez assez d''argent' SubCommands: set: Description: Modifie la durée du contrat de location d'une résidence (administrateurs seulement) @@ -391,20 +391,20 @@ CommandHelp: #this is just a holder node, that holds the entire help Info: - 'Utilisation: /res bank [deposit/withdraw] [montant]' - 'Vous devez être dans une résidence' - - 'Vous devez avec avoir le flag "+bank"' + - 'Vous devez avec avoir le flag +bank' tp: Description: Téléporte à une résidence Info: - 'Utilisation: /res tp [résidence]' - 'Vous téléporte à la résidence [résidence]' - - 'Vous devez avoir le flag "+tp" ou être le propriétaire' + - 'Vous devez avoir le flag +tp ou être le propriétaire' - 'Votre groupe doit aussi avoir la permission' tpset: Description: Modifie le point de téléportation d'une résidence Info: - 'Utilisation: /res tpset' - 'Vous devez être dans une résidence pour utiliser cette commande' - - 'Vous devez aussi être le propriétaire de la résidence ou avoir le flag "+admin"' + - 'Vous devez aussi être le propriétaire de la résidence ou avoir le flag +admin' set: Description: Modifie les flags d'une résidence Info: @@ -432,14 +432,14 @@ CommandHelp: #this is just a holder node, that holds the entire help flags: Description: Liste les flags Info: - - '"true" autorise, et "false" interdit l''action' + - 'true autorise, et false interdit l''action' - 'build - autorise ou interdit la construction' - 'use - autorise ou interdit l''utilisation des portes, des leviers, des boutons, etc...' - 'move - autorise ou interdit le déplacement dans la résidence' - 'container - autorise ou interdit l''utilisation des fours, coffres, distributeurs, etc...' - 'trusted - Gives build, use, move, container and tp flags' - - 'place - autorise ou interdit seulement le placement des blocs, l''emporte sur le flag "build"' - - 'destroy - autorise ou interdit seulement la destruction des block, l''emporte le flag "build"' + - 'place - autorise ou interdit seulement le placement des blocs, l''emporte sur le flag build' + - 'destroy - autorise ou interdit seulement la destruction des block, l''emporte le flag build' - 'pvp - autorise ou interdit le PVP dans la résidence' - 'tp - autorise ou interdit la téléportation à la résidence' - 'admin - donne au joueur la permission de changer les flags de la résidence' @@ -453,8 +453,8 @@ CommandHelp: #this is just a holder node, that holds the entire help - 'firespread - autorise ou interdit la propagation du feu' - 'bucket - autorise ou interdit l''utilisation des sceaux' - 'flow - autorise ou interdit l''écoulement des liquides' - - 'lavaflow - autorise ou interdit l''écoulement du feu, l''emporte sur le flag "flow"' - - 'waterflow - autorise ou interdit l''écoulement de l''eau, l''emporte sur le flag "flow"' + - 'lavaflow - autorise ou interdit l''écoulement du feu, l''emporte sur le flag flow' + - 'waterflow - autorise ou interdit l''écoulement de l''eau, l''emporte sur le flag flow' - 'damage - autorise ou interdit tous les dommages subis dans la résidence' - 'piston - autorise ou interdit les pistons de pousser ou de tirer un bloc dans la résidence' - 'hidden - cache la résidence de la liste' @@ -478,7 +478,7 @@ CommandHelp: #this is just a holder node, that holds the entire help - 'Utilisation: /res list ' - 'Liste toutes les résidences d''un joueur (sauf celles cachées)' - 'Si vous listez vos propres résidences, les cachées seront affichées' - - 'Pout lister toutes les résidences, utilisez "/res listall"' + - 'Pout lister toutes les résidences, utilisez /res listall' listhidden: Description: Liste les résidences cachées (administrateurs seulement) Info: @@ -532,7 +532,7 @@ CommandHelp: #this is just a holder node, that holds the entire help Info: - 'Utilisation: /res market sell [résidence] [prix]' - 'Met une résidence à vendre' - - 'Un autre joueur peut acheter la résidence avec "/res market buy"' + - 'Un autre joueur peut acheter la résidence avec /res market buy' buy: Description: Achète une résidence Info: @@ -546,14 +546,14 @@ CommandHelp: #this is just a holder node, that holds the entire help Description: Loue une résidence Info: - 'Utilisation: /res market rent [résidence] ' - - 'Loue la résidence [résidence]. peut être "true" ou "false"' - - 'Si "true", la résidence sera automatiquement relouée' + - 'Loue la résidence [résidence]. peut être true ou false' + - 'Si true, la résidence sera automatiquement relouée' rentable: Description: Met à louer une résidence Info: - 'Utilisation: /res market rentable [résidence] [prix] [jours] ' - 'Met à louer la résidence [résidence] et fixe le prix [prix] à payer tous les [jours] jours' - - 'Si est "true", la résidence sera automatiquement remise à louer' + - 'Si est true, la résidence sera automatiquement remise à louer' release: Description: Libère ou interrompt la mise en location d'une résidence Info: diff --git a/src/Language/German.yml b/src/Language/German.yml index 6ff2c80e7..b3e5d4ad6 100644 --- a/src/Language/German.yml +++ b/src/Language/German.yml @@ -173,14 +173,14 @@ Language: InvalidCharacters: ungültige Zeichen entdeckt... InvalidNameCharacters: Name enthält unerlaubte Zeichen... #Version 15 New Fields - DeleteConfirm: 'Bist du sicher, dass du das Grundstück %1 löschen willst? Nutze "/res confirm" zum bestätigen.' + DeleteConfirm: 'Bist du sicher, dass du das Grundstück %1 löschen willst? Nutze /res confirm zum bestätigen.' #Version 18 New Fields SelectTooHigh: Warnung, Auswahl befindet sich über der Höhe des Karten-Limits. SelectTooLow: Warnung, Auswahl befindet sich unter dem Boden des Karten-Limits. WorldEditNotFound: WorldEdit wurde nicht gefunden! #Version 19 New Fields NoResHere: Es gibt dort kein Grundstück! - DeleteSubzoneConfirm: 'Bist du sicher, dass du die Subzone %1 löschen willst? Nutze "/res confirm" zum bestätigen.' + DeleteSubzoneConfirm: 'Bist du sicher, dass du die Subzone %1 löschen willst? Nutze /res confirm zum bestätigen.' #Version 20 New Fields SubzoneOwnerChange: 'Die Subzone %1 gehört nun %2.' CoordsTop: 'X:%1 Y:%2 Z:%3' diff --git a/src/Language/Hungarian.yml b/src/Language/Hungarian.yml index c6f318101..796f66ea7 100644 --- a/src/Language/Hungarian.yml +++ b/src/Language/Hungarian.yml @@ -172,14 +172,14 @@ Language: InvalidCharacters: ervenytelen karakterek eszlelve... InvalidNameCharacters: A nev tiltott karaktereket tartalmaz... #Version 15 New Fields - DeleteConfirm: 'Ha biztos vagy benne hogy torolni szeretned a lakhelyet %1, hasznald "/res confirm" a megerositeshez.' + DeleteConfirm: 'Ha biztos vagy benne hogy torolni szeretned a lakhelyet %1, hasznald /res confirm a megerositeshez.' #Version 18 New Fields SelectTooHigh: Figyelem, a kijeloles tul nyulik a terkep tetejen, korlatozas. SelectTooLow: Figyelem, a kijeloles tul nyulik a terkep aljan, korlatozas. WorldEditNotFound: WorldEdit nem talalhato. #Version 19 New Fields NoResHere: Itt nincs lakhely. - DeleteSubzoneConfirm: 'Ha biztos vagy benne hogy torolni szeretned az alosztalyt %1, hasznald "/res confirm" a megerositeshez.' + DeleteSubzoneConfirm: 'Ha biztos vagy benne hogy torolni szeretned az alosztalyt %1, hasznald /res confirm a megerositeshez.' #Version 20 New Fields SubzoneOwnerChange: 'alosztalyt %1 tulajdonosa megváltozott %2' CoordsTop: 'X:%1 Y:%2 Z:%3' diff --git a/src/Language/Lithuanian.yml b/src/Language/Lithuanian.yml index a93531f16..8f5edd0b1 100644 --- a/src/Language/Lithuanian.yml +++ b/src/Language/Lithuanian.yml @@ -1,649 +1,649 @@ -# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. -Version: 21 -FieldsVersion: 22 -Language: - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - #Version 1 Fields - InvalidResidence: Bloga Rezidencija... - InvalidSubzone: Bloga Subzona... - InvalidDirection: Bloga kriptis... - InvalidChannel: Blogas kanalas... - InvalidAmount: Blogas kiekis... - InvalidCost: Bloga kaina... - InvalidDays: Blogas dienu kiekis... - InvalidMaterial: Bloga medziaga... - InvalidBoolean: Bloga reiksme, turi buti true(t) arba false(f) - InvalidArea: Bloga teritorija... - InvalidGroup: Bloga grupe... - InvalidMessageType: Zinutes tipas turi buti enter arba remove. - InvalidList: Blogas sarasas... - InvalidFlag: Blogas Flag... - InvalidFlagState: Bloga flag reiksme, turi buti true(t), false(f), arba remove(r) - AreaExists: Toks ploto vardas jau egzistuoja. - AreaCreate: 'Sukurta rezidencija, ID %1' - AreaDiffWorld: Plotas yra kitame pasaulyje nuo rezidencijos. - AreaCollision: 'Pazymetas plotas kertasi su kita rezidencija %1' - AreaSubzoneCollision: 'Pazymetas plotas kertasi su subzona %1' - AreaNonExist: Toks plotas neegzistuoja. - AreaInvalidName: Blogas ploto pavadinimas... - AreaRename: 'Pervadinti plota is %1 i %2' - AreaRemove: 'Panaikintas plotas %1...' - AreaRemoveLast: Negalima pasalinti paskutinio ploto rezidencijoje. - AreaNotWithinParent: Plotas nera tevinio ploto viduje. - AreaUpdate: Plotas atnaujintas... - AreaMaxPhysical: Jus pasiekete maksimalu galimu plutu skaiciu savo rezidencijai. - AreaSizeLimit: Ploto dydis nera jusu galimybiu ribose. - AreaHighLimit: 'Jus negalite apsaugoti sitaip aukstai, jusu riba yra %1' - AreaLowLimit: 'Jus negalite apsaugoti sitaip giliai, jusu riba yra %1' - NotInResidence: Tu nesi savo rezidencijoje. - InResidence: 'Tu stovi rezidencijoje kurios pavadinimas %1' - ResidenceOwnerChange: 'Rezidencijos %1 savininkas pakeistas i %2' - NonAdmin: Tu nesi rezidencijos administratorius. - AdminOnly: Tik administratorei turi teise i sita komanda. - ChatDisabled: Rezidencijos pokalbiu kanalas isjungtas... - SubzoneRename: 'Pervadinta subzona is %1 i %2' - SubzoneRemove: 'Subzona %1 panaikinta.' - SubzoneCreate: 'Sukurta subzona %1' - SubzoneCreateFail: 'Neimanoma sukurti subzonos %1' - SubzoneExists: 'Subzona %1 jau egzistuoa.' - SubzoneCollide: 'Subzona kertasi su kita sub zona %1' - SubzoneMaxDepth: Pasiekete maksimalu subzonu gyli. - SubzoneSelectInside: Abudu pazimeti taskai turi buti rezidencijos ribose. - SelectPoints: Visu pirma pazimek du taskus pries naudodamas sita komanda! - SelectionSuccess: Zymejimas sekmingas! - SelectionFail: Neteisinga zymejimo komanda... - SelectionBedrock: Zymejimas istemptas iki zemiausio jums leistino tasko. - SelectionSky: Zymejimas istemptas iki auksciausio jums leistino tasko. - SelectionArea: 'Pazimetas plotas %1 rezidencijos %2' - SelectDiabled: Jus neturite prieigos prie pasirinkimu komandu. - NoPermission: Jus neturite tam teises. - OwnerNoPermission: Savininkas neturi tam teises. - ParentNoPermission: Jus neturite teises pakeitimams Parent zonai. - MessageChange: Zinute nustatyta... - FlagSet: Flagas nustatytas... - FlagCheckTrue: 'Flagas %1 priskirtas zaidejui %2 rezidencijai %3, reiksme = %4' - FlagCheckFalse: 'Flagas %1 nepriskirtas zaidejui %2 rezidencijai.' - FlagsCleared: Flagai istrinti. - FlagsDefault: Flagai nustatyti i pradine busena. - Usage: Komandos panaudojimas - InvalidHelp: Blogas pagalbos puslapis... - SubCommands: Sub komandos - InvalidList: Nezinomas saraso tipas, turi buti juodasis sarasas arba ignoravimo sarasas. - MaterialGet: 'Medziagos pavadinimas kadangi ID %1 yra %2' - MarketDisabled: Ekonomika isjungta! - MarketList: parduotuviu sarasas - SelectionTool: Zymejimo irankis - InfoTool: Informacinis irankis - NoBankAccess: Neturi priejimo prie banko. - NotEnoughMoney: Neturi uztektinai pinigu. - BankNoMoney: Nera uztektinai pinigu banke. - BankDeposit: 'Jus pervedete %1 i jusu rezidencijos banka.' - BankWithdraw: 'Jus istraukete %1 is jusu rezidencijos banko.' - MoneyCharged: 'Nuskaiciuota %1 is jusu %2 saskaitos.' - MoneyCredit: 'Kredituotas %1 i jusu %2 saskaita.' - RentDisabled: Nuomuos sistema isjungta. - RentReleaseInvalid: 'Rezidencija %1 nera nuomuojama arba isnuomuota.' - RentSellFail: Negali parduoti rezidencijos jeigu ji yra nuomuojama. - SellRentFail: Negali nuomuoti rezidencijos jeigu ji yra parduodama. - OwnerBuyFail: Negali pirkti savo paties zemes! - OwnerRentFail: Negali nuomuotis savo paties zemes! - AlreadySellFail: Rezidencija jau yra parduodama! - ResidenceBought: 'Jus nusipirkote rezidencija %1' - ResidenceBuy: 'Rezidencija %1 nupirko rezidencija %2 is jusu.' - ResidenceBuyTooBig: Si rezidencija turi didesnius plotus, nei jums leistas maximalus. - ResidenceNotForSale: Rezidencija neparduodama. - ResidenceForSale: 'Rezidencija %1 parduodama uz %2' - ResidenceStopSelling: Rezidencija nebeparduodama. - ResidenceTooMany: Tu jau turi maksimalu rezidenciju skaiciu kuris yra tau leistinas. - ResidenceMaxRent: Tu jau nuomuojiesi maksimalu rezidenciju skaiciu kuris yra tau leistinas. - ResidenceAlreadyRent: Rezidencija jau yra skirta nuomuoti... - ResidenceNotForRent: Rezidencija nenuomuojama... - ResidenceNotRented: Rezidencija neisnuomuota. - ResidenceUnrent: 'Rezidencija %1 daugiau nebeisnuomuota.' - ResidenceRemoveRentable: 'Rezidencija %1 daugiau nebenuomuojama.' - ResidenceForRentSuccess: 'Rezidencija %1 nuos iol nuomuojama uz %2 kas %3 dienas.' - ResidenceRentSuccess: 'Jus issinuomavote rezidencija %1 %2 dienoms.' - ResidenceAlreadyRented: 'Rezidencija %1 siuo metu isnuomuota %2' - ResidenceAlreadyExists: 'Rezidencija tokiu vardu %1 jau egzistuoja.' - ResidenceCreate: 'Jus sukurete rezidencija %1!' - ResidenceRename: 'Pervadinote rezidencija is %1 i %2' - ResidenceRemove: 'Rezidencija %1 panaikinta...' - RentDisabled: Nuoma isjungta... - RentDisableRenew: 'Rezidencija %1 automatiksai nebeissinuomuos pasibaigus nuomos laikui.' - RentEnableRenew: 'Rezidencija %1 automatiksai issinuomuos pasibaigus nuomos laikui.' - RentableDisableRenew: '%1 nebeprates nuomos laiko jam pasibaigus.' - RentableEnableRenew: '%1 automatiskai prates nuomos laika jam pasibaigus.' - LandForSale: Parduodama zeme - SellAmount: Pardavimu kiekis - LeaseExpire: Nuomos sutarties pasibaigimo laikas - RentExpire: Nuomos pasibaigimo laikas - RentableAutoRenew: Isnuomojamas automatinis atnaujinimas - RentAutoRenew: Nuoma automatinio atnaujinimo - RentableLand: Nuomuojama zeme - ListMaterialAdd: '%1 pridetas prie rezidencijos %2' - ListMaterialRemove: '%1 iskeldintas is %2' - ItemBlacklisted: Sitas blokas cia nera leidziamas. - RentedModifyDeny: Negali keisti isnuomuotos rezidencijos. - WorldPVPDisabled: Pasulinis PVP isjungtas. - NoPVPZone: Cia tu negali kautis. - FlagDeny: 'Tu neturi %1 privilegiju.' - FlagSetDeny: 'Savininkas neturi priejimo prie Flago %1' - SelectPoint: 'Pasirinktas %1 pazimejimo taskas' - ResidenceChat: 'Perjungti rezidencijos poklabiai %1' - ResidenceMoveDeny: 'Tu neturi judejimo teisiu sitoje rezidencijoje %1' - TeleportDeny: Tu neturi teleporto teisiu i sita rezidencija. - TeleportSuccess: 'Nuteleportuotas!' - TeleportNear: Nuteleportuotas prie rezidencijos. - TeleportNoFlag: Tu neturi teleporto teisiu i sita rezidencija. - SetTeleportLocation: Nustatyta teleporto vieta... - HelpPageHeader: 'Pagalbos puslapiai - %1 - puslapis <%2 is %3>' - ListExists: Sarasas jau egzistuoja... - ListRemoved: Sarasas pasalintas... - ListCreate: 'Sukurtas sarasas %1' - LeaseRenew: 'Nuomos sutartis galioja iki %1' - LeaseRenewMax: Nuomos sutartis atnaujinta i leistina maksimalu - LeaseNotExpire: Nera tokios nuomos sutarties, arba tokia nuomos sutartis nesibaigia. - LeaseRenewalCost: 'Atnaujinimo kaina plotui %1 yra %2' - LeaseInfinite: Nuomos sutarties laikas nustatytas neribotam laikui... - PermissionsApply: Leidimai pritaikyti rezidencijai. - PhysicalAreas: Fiziniai Plotai - CurrentArea: Einamieji Plotai - LeaseExpire: Nuomos pabaiga - NotOnline: Zaidejas turi buti prisijunges. - ResidenceGiveLimits: Negalima duoti rezidencijos pazymetam zaidejui, nes ji yra uz pazymeto zaidejo ribu. - ResidenceGive: 'Jus atiduodate rezidencija %1 zaidejui %2' - ResidenceRecieve: 'Jus gavote rezidencija %1 is zaidejo %2' - #Version 4 New Fields - #ResidenceListAll: 'Residences - ' - removed, use GenericPage now - ResidenceListAllEmpty: Jokios rezidencijos neegzistuoja serveryje... - InvalidPage: Klaidingas puslapis... - NextPage: Kitas puslapis - #Version 10 New Fields - RemovePlayersResidences: 'Panaikintos visos rezidencijos priklausiancios zaidejui %1' - GenericPage: 'Puslapis %1 is %2' - #Version 11 New Fields - ResidenceRentedBy: 'Issinuomuota %1' - #Version 14 New Fields - InvalidCharacters: Aptikti negaliojantys zenklai... - InvalidNameCharacters: Varda sudaro neleistini zenklai... - #Version 15 New Fields - DeleteConfirm: 'Ar tikrai norite panaikinti rezidencija %1, naudok "/res confirm" kad patvirtinti.' - #Version 18 New Fields - SelectTooHigh: Ispejimas, pasirinkimas nuejo virs zemelapio virsunes, ribojama. - SelectTooLow: Ispejimas, pasirinkimas nuejo zemiau zemelapio pagrindo, ribojama. - WorldEditNotFound: WorldEdit nebuvo aptiktas. - #Version 19 New Fields - NoResHere: Nera cia rezidencijos. - DeleteSubzoneConfirm: 'Ar tikrai norite istrinti subzona %1, naudok "/res confirm" kad patvirtinti.' - #Version 20 New Fields - SubzoneOwnerChange: 'Subzonos %1 savininkas pakeistas i %2' - CoordsTop: 'X:%1 Y:%2 Z:%3' - CoordsBottom: 'X:%1 Y:%2 Z:%3' - #Version 21 New Fields - AdminToggle: 'Automatinis rezidencijos admin jungiklis pasuktas %1' - #Version 22 New Fields - NoSpawn: 'Jus neturite leidimo judeti jusu atsiradimo taske. Perkelimas' - CompassTargetReset: 'Jusu kompasas buvo perstatytas' - CompassTargetSet: 'Jusu kompasas dabar nurodo i %1' - #The below lines are mostly a word bank for various uses. - #Version 1 Fields - Description: Aprasymas - Land: Zeme - Cost: Kaina - Selection: Pazymeta - Total: Isviso - Size: dydis - Expanding: Isplesta - Shifting: Perkelta - Up: Aukstyn - Down: Zemyn - Error: Klaida - Flags: Veleveles - Your: Tavo - Group: Grupe - Others: Kiti - Primary: Pirminis - Secondary: Antrinis - Selection: Pazymeta - Moved: Perkelta - Status: Statusas - Available: Galimas - On: Ijungtas - Off: Isjungtas - Name: Vardas - Lists: Sarasas - Residences: Rezidencijos - Residence: Rezidencija - Count: Kiekis - Owner: Savininkas - #Version 4 Fields - World: Pasaulis - #Version 12 Fields - Subzones: Subzona - #Version 20 Fields - CoordsT: Virsutines koordinates - CoordsB: Apatines koordinates - #Version 22 Fields - TurnOn: 'ijungti' - TurnOff: 'isjungti' - -# This is the help / usage messages for each command. -# It follows this format: -# -# Description: -# Info: -# SubCommands: -# - these follow the same format, and each sub command can have its own subcommands -# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that -# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). -# Add a page number after the ? mark to see that page. - -HelpLinesPerPage: 7 -CommandHelp: #this is just a holder node, that holds the entire help - Description: Ieina pagalba del rezidenciju - SubCommands: #this is the actual beginning of all commands - res: #main residence command - Description: Pagrindines rezidencijos komandos - Info: - - 'Paziurek pamokas: http://ltcraft.lt/?page_id=311' - - 'Naudok /[komanda] ? kad perziureti issamiau.' - - 'Naudok /res flags kad perziureti apie galimus leidymus.' - SubCommands: - select: #selection commands - Description: Zymejimo komandos - Info: - - 'Sia komanda pasirenkamas plotas naudojimui su rezidencija.' - - '/res select [x] [y] [z] - parenka bloku spinduli, jums bunant viduje.' - SubCommands: - coords: - Description: Rodomos pazymetos koordinates - Info: - - 'Naudojimas: /res select coords' - size: - Description: Rodomas pazymetas dydis - Info: - - 'Naudojimas: /res select size' - cost: - Description: Rodoma pasirinkimo kaina - Info: - - 'Naudojimas: /res select cost' - vert: - Description: Isplesti pasirinkima vertikaliai - Info: - - 'Naudojimas: /res select vert' - - 'Isples pasirinkima taip aukstai ir taip zemai kaip leistina.' - sky: - Description: Isplesti pasirinkima i dangu - Info: - - 'Naudojimas: /res select sky' - - 'Isples tiek aukstai kiek jums yra leista.' - bedrock: - Description: Isplesti pasirinkima iki Bedrock - Info: - - 'Naudojimas: /res select bedrock' - - 'Isples tiek zemai kiek jums yra leista.' - expand: - Description: Isplesti pasirinkima kryptimi. - Info: - - 'Naudojimas: /res select expand ' - - 'Isplecia i ta krypti i kuria ziurite.' - shift: - Description: Paslinkti pasirinkima kryptimi - Info: - - 'Naudojimas: /res select shift ' - - 'Pastumia jusu pasirinkima i ta krypti i kuria ziurite.' - chunk: - Description: Pazymi dali kurioje esate siuo metu. - Info: - - 'Naudojimas: /res select chunk' - - 'Pazymi dali kurioje stovite siuo metu.' - residence: - Description: Isrinkite egzistuojanti plota rezidencijoje. - Info: - - 'Naudojimas /res select ' - - 'Isrenka egzistuojanti plota rezidencijoje.' - worldedit: - Description: nustatyti esama WorldEdit pasirinkima. - Info: - - 'Naudojimas /res select worldedit' - - 'nustato pasirinkta arena naudojant esama WorldEdit pasirinkima.' - create: #Sukurymo komandos - Description: Sukurti rezidencija - Info: - - 'Naudojimas: /res create ' - remove: #Panaikinimo komandos - Description: Panaikinti rezidencija. - Info: - - 'Naudojimas: /res remove ' - removeall: - Description: Panaikinti visas rezidencijas priklausiancias zaidejui. - Info: - - 'Naudojimas: /res removeall [savininkas]' - - 'Panaikina visas rezidencijas priklausiancias zaidejui.' - - 'reikalingas /resadmin jei tu tai naudosi ant kazkieno ir saves.' - confirm: - - 'Naudojimas: /res confirm' - - 'Patvirtinti rezidencijos panaikinima.' - subzone: - Description: Sukurti subzonas rezidencijoje. - Info: - - 'Naudojimas: /res subzone [subzonos pavadinimas]' - - 'Jeigu rezidencijos vardas istrinamas, bus bandyta naudoti rezidencija kurioje jus stovite.' - area: - Description: valdyti fizines arenas rezidencijoje. - SubCommands: - list: - Description: sarasas fiziniu arenu rezidencijoje. - Info: - - 'Naudojimas: /res area list [residence] ' - listall: - Description: sarasas koordinaciu ir kita informacija apie arenas. - Info: - - 'Naudojimas: /res area listall [residence] ' - add: - Description: prideti fizines arenas rezidencijoje - Info: - - 'Naudojimas: /res area add [residence] [areaID]' - - 'Jus pirma turite pazymeti du taskus rezidencijoje.' - remove: - Description: Pasalinti fizines arenas is rezidencijos - Info: - - 'Naudojimas: /res area remove [residence] [areaID]' - replace: - Description: pakeisti fizines arenas rezidencijoje - Info: - - 'Naudojimas: /res area replace [residence] [areaID]' - - 'Just privalote pirma pazymeti du taskus rezidencijoje.' - - 'PakeiÄiant arena reikÄ—s sumokÄ—ti dydžio skirtumÄ…, jei naujas plotas yra didesnis.' - info: - Description: Parodyti informacija apie rezidencija. - Info: - - 'Naudojimas: /res info ' - - 'nustojus rodyti informacija rezidencijai kurioje esate.' - limits: - Description: Parodytu jusu limitus. - Info: - - 'Naudojimas: /res limits' - - 'Parodo jusus galimus limitus kuriant ir monipuliuojant rezidencija.' - message: - Description: Valdyti rezidencijos ieinancius / iseinacius pranesimus - Info: - - 'Naudojimas: /res message [enter/leave] [message]' - - 'nustatyti isvykimo ar atvykimo zinute.' - - 'Naudojimas: /res message remove [enter/leave]' - - 'pasalina atvykimo ar isvykimo zinute.' - lease: - Description: Valdyti rezidencijos nuoma - Info: - - 'Naudojimas: /res lease [renew/cost] [residence]' - - '/res lease parodo atsinaujinancia rezidencijos nuomos kaina.' - - '/res lease renew parodo ar turi uztenkamai pinigu issinuomoti rezidencija.' - SubCommands: - set: - Description: Nustatyti nuomos laika (admin only) - Info: - - 'Naudojimas: /resadmin lease set [residence] [#days/infinite]' - - 'nustato specialu nuomos laika dienomis arba neribotai.' - bank: - Description: Valdyti rezidencijos pinigus - Info: - - 'Naudojimas: /res bank [deposit/withdraw] [amount]' - - 'jus turite stoveti rezidencijoje' - - 'jus turite tureti +bank velevele rezidencijoje.' - tp: - Description: Teleportuotis i rezidencija - Info: - - 'Naudojimas: /res tp [residence]' - - 'Telepotuoja jus i rezidencija, just privalote tureti +tp velevele arba buti rezidencijos seimininkas.' - - 'jusu privilegiju grupe taipat turi tureti leidima teleportuotis i rezidencijas.' - tpset: - Description: Nustatyti teleportacijos vieta rezidencijoje - Info: - - 'Naudojimas: /res tpset' - - 'nustatyts teleportacijos vieta i rezidencija ten kur jus stovite.' - - 'just turite stoveti rezidencijoje naudodami sia komanda.' - - 'Jus turite buti rezidencijos savininkas arba tureti +admin velevele.' - set: - Description: Nustatyti bendras veliavas rezidencijoje - Info: - - 'Naudojimas: /res set [flag] [true/false/remove]' - - 'Noredami paziureti veleveliu sarasa rasykite /res flags ?' - - 'Å ios vÄ—liavos taikomos visiems žaidÄ—jams, kurie neturi vÄ—liavu konkreÄiai pritaikytu jiems. ( /res set ?)' - pset: - Description: Nustatyti veliavas specifiniam zaidejui rezidencijoje. - Info: - - 'Naudojimas: /res pset [player] [flag] [true/false/remove]' - - 'Naudojimas: /res pset [player] removeall' - - 'perziureti veleveliu sarasa naudokite /res flags ?' - gset: - Description: Nustatyti veliavas specifinei grupei rezidencijoje. - Info: - - 'Naudojimas: /res gset [group] [flag] [true/false/remove]' - - 'perziureti veleveliu sarasa naudokite /res flags ?' - lset: - Description: pakeisti juodojo saraso ir ignoriamuju saraso nustatymus - Info: - - 'Naudojimas: /res lset [blacklist/ignorelist] [material]' - - 'Naudojimas: /res lset info' - - 'medziagos itraukimas i juodaji sarasa neleidzia buti padetas rezidencijoje.' - - 'ignoriamuju sarasas padaro specifine medziaga neapsaugota rezidencijos.' - flags: - Description: Veliavu sarasas - Info: - - 'flagu reiksmes, pagrinde naudoti "true" kai nori leisti ir "false" kai nori uzdrausti naudoti komanda ar veiksma.' - - 'build - leisti arba uzdrausti statyti' - - 'use - leisti arba uzdrausti duru, svirciu, mygtuku ir panasei naudojima...' - - 'move - leisti arba uzdrausti judejima jusu rezidencijoje.' - - 'container - leisti arba uzdrausti naudojima skriniu, krosniu, dalytuvu ir panasei naudojima...' - - 'trusted - Suteikia statybos, naudojimo, judejimo, skriniu ir teleporto teises' - - 'place - leisti arba uzdrausti tik bloku padejima jusu rezidencijoje.' - - 'destroy - leisti arba uzdrausti tik bloku naikinima jusu rezidencijoje.' - - 'pvp - leisti arba uzdrausti pvp jusu rezidencijoje' - - 'tp - leisti arba uzdrausti teleportuotis i jusu rezidencija.' - - 'admin - suteikia teise keisti flagus rezidencijoje.' - - 'subzone - suteike teise kurti subzonas rezidencijoje.' - - 'monsters - leisti arba uzdrausti monstru atsiradyma jusu rezidencijoje' - - 'animals - leisti arba uzdrausti gyvunu atsiradima jusu rezidencijoje.' - - 'healing - nustatyk i "true" is visi esantis bus pagydyti' - - 'tnt - leisti arba uzdrausti TNT sprogimus' - - 'creeper - leisti arba uzdrausti kreeperiu sprogimus' - - 'ignite - leisti arba uzdrausti ugnies iziebima.' - - 'firespread - leisti arba uzdrausti ugnies plitima.' - - 'bucket - leisti arba uzdrausti kibiro naudojima.' - - 'flow - leisti arba uzdrausti vandens tekejima.' - - 'lavaflow - leisti arba uzdrausti lavos tekejima' - - 'waterflow - leisti arba uzdrausti vandens tekejima' - - 'damage - leisti arba uzdrausti patiriama zala nuo monstru' - - 'piston - leisti arba uzdrausti stumoklius.' - - 'hidden - paslepti rezidencija nuo list komandos' - - 'cake - leisti arba uzdrausti valgyti torta' - - 'lever - leisti arba uzdrausti naudotis svirtimis' - - 'button - leisti arba uzdrausti naudotis mygtukais' - - 'diode - leisti arba uzdrausti diodus' - - 'door - leisti arba uzdrausti naudotis durimis ir liukais' - - 'table - leisti arba uzdrausti naudotis darbastaleis' - - 'enchant - leisti arba uzdrausti naudotis kerejimo stalais' - - 'brew - leisti arba uzdrausti naudotis eleksiru staliukais' - - 'bed - leisti arba uzdrausti naudotis lovomis' - - 'button - leisti arba uzdrausti naudotis mygtukais' - - 'pressure - leisti arba uzdrausti naudotis slegio plokstem' - - 'note - leisti arba uzdrausti naudotis natu blokais' - - 'redstone - suteikia lever, diode, button, pressure, note flagus' - - 'craft - suteikia table, enchant, brew flagus' - - 'burn - leisti arba uzdrausti monstru uzsiliepsnojima nuo saules' - - 'melt - Apsaugo nuo sniego istirpimo' - - 'form - Apsaugo nuo sniego susiformavimo' - - 'animalkilling - Apsaugo nuo gyvunu zudymo' - - 'mobkilling - Apsaugo nuo mobu zudymo' - - 'drops - Apsaugo nuo item metimu rese' - - 'enderpearl - Apsaugo nuo enderperl naudojimo rese' - - 'falldamage - Apsaugo nuo falldamage' - - 'portal - Apsaugo nuo portalu naudojimo' - - 'villagerkilling - Apsaugo nuo kaimieciu zudimo' - - 'vehicleprotect - Apsaugo vagoneliu nugriovima' - - 'lightning - Apsaugo nuo zaibu' - - 'grow - Sustabdo augmenijos augima' - - 'hunger - Netampama alkanu' - - 'fishing - Apsaugo nuo zvejojimo' - - 'eggs - Apsaugo nuo kiausiniu metimo' - - 'pigzap - Apsaugo kiaules nuo pasivertimo i pigzombie' - - 'slimesplit - Apsaugo slime pasidalinima' - - 'shear - Apsaugo nuo aviu nukirpimo' - - 'pigsaddle - Apsaugo nuo balno uzdejimo ant kiaules' - - 'trade - Apsaugo nuo prekybos su kaimieciais' - - 'day - Diena visa laika' - - 'night - Naktis visa laika' - - 'weather - Lija visa laika' - list: - Description: Rezidenciju sarasas - Info: - - 'Naudojimas: /res list ' - - 'Lists all the residences a player owns (except hidden ones).' - - 'Jeigu sarasuose ziurimos savo rezidencijos, matos ir pasleptos.' - - 'Norint pamatyti visu serverio zaideju rezidencijas, naudokite /res listall.' - listhidden: - Description: Pamatyti pasleptas rezidencijas (TIK ADMINISTRATORIAMS) - Info: - - 'Naudojimas: /res listhidden ' - - 'Parodo sarasa pasleptu zaideju rezidenciju.' - listall: - Description: List All Residences - Info: - - 'Naudojimas: /res listall ' - - 'parodo sarasa viso serverio zaideju rezidenciju. (isskyrus pasleptu)' - listallhidden: - Description: Pamatyti pasleptas rezidencijas (TIK ADMINISTRATORIAMS) - Info: - - 'Naudojimas: /res listhidden ' - - 'Parodo viso serverio vpasleptu rezidenciju sarasa.' - sublist: - Description: Sarasas rezidenciju subzonu - Info: - - 'Naudojimas: /res sublist ' - - 'subzonu sarasas kartu su rezidencijomis.' - default: - Description: Restartuoti rezidencija iki pradiniu nustatymu. - Info: - - 'Naudojimas: /res default ' - - '. Restartuoti rezidencija iki pradiniu nustatymu.' - rename: - Description: Pervadina rezidencija. - Info: - - 'Naudojimas: /res rename [OldName] [NewName]' - - 'Tu turi buti savininkas arba adminas kad tai galetum padaryti.' - - 'Vardas turi buti laisvas.' - mirror: - Description: Veidrodines veleveles - Info: - - 'Naudojimas: /res mirror [Source Residence] [Target Residence]' - - 'Suvienodink dvieju rezidenciju flagus. Kad tai daryti turite buti abie ju rezidenciju adminas' - market: - Description: Buy, Sell, or Rent Residences - Info: - - 'Naudojimas: /res market ? for more info' - SubCommands: - info: - Description: Gauk ekonomine informacija apie rezidencija - Info: - - 'Naudojimas: /res market info [residence]' - - 'Parodo ar rezidencija nomuojama,parduodama. parodo jos kaina.' - list: - Description: sarasas isnomuojamu rezidenciju. - Info: - - 'Naudojimas: /res market list' - sell: - Description: Rezidencijos pardavimas - Info: - - 'Naudojimas: /res market sell [pavadinimas] [suma]' - - 'pradeda pardavineti rezidencija [suma] pinigu.' - - 'kitas zaidejas gali pirkti rezidencija su komanda /res market buy' - buy: - Description: rezidencijos pirkimas - Info: - - 'Naudojimas: /res market buy [residence]' - - 'perkama rezidencija jeigu ji parduodama.' - unsell: - Description: Sustabdyt rezidencijos pardavinejima. - Info: - - 'Naudojimas: /res market unsell [residence]' - rent: - Description: Isnuomoti rezidencija. - Info: - - 'Naudojimas: /res market rent [residence] ' - - 'Isnuomoja rezidencija. Automatini atnaujinima galima ijungti ir isjungti true arba false . Jeigu True nuoma automatiskai prasites' - rentable: - Description: Padaryti rezidencija nuomojama. - Info: - - 'Naudojimas: /res market rentable [residence] [cost] [days] ' - - 'padaro rezidencija nomuojama uz [cost] pinigu uz [days] dienu. jai nustatytas true, rezidencija automatiskai prasites.' - release: - Description: pasalinti rezidencija is nuomojamuju. - Info: - - 'Naudojimas: /res market release [residence]' - - 'jeigu esate nuomininkas, sis namas nebepriklausys jums .' - - 'jeigu esate seimininkas, si komanda nurtrauks jusu rezidencijos nuoma.' - current: - Description: Parodo rezidencija kurioje esate. - Info: - - 'Naudojimas: /res current' - lists: - Description: Isanksto nustatytu leidimu sarasas - Info: - - 'Isanksto nustatytu leidimu sarasas kuri galima pritaikyti rezidencijai.' - SubCommands: - add: - Description: Prideti sarasa - Info: - - 'Naudojimas: /res lists add ' - remove: - Description: Pasalinti sarasa - Info: - - 'Naudojimas: /res lists remove ' - apply: - Description: Taikyti sarasa rezidencijai - Info: - - 'Naudojimas: /res lists apply ' - set: - Description: Nustatyti veliava - Info: - - 'Naudojimas: /res lists set ' - pset: - Description: Nustatyti zaidejo veliava - Info: - - 'Naudojimas: /res lists pset ' - gset: - Description: Nustatyti grupes veliava - Info: - - 'Naudojimas: /res lists gset ' - view: - Description: Perziureti sarasa. - Info: - - 'Naudojimas: /res lists view ' - server: - Description: Nustatyti zemes savininka (tik administratoriam). - Info: - - 'Naudojimas: /resadmin server [residence]' - - 'padaryti rezidencija uzimta.' - setowner: - Description: pakeisti rezidencijos seimininka (tik administratoriam). - Info: - - 'Naudojimas: /resadmin setowner [residence] [player]' - resreload: - Description: perkrauti rezidencija (tik administratoriam). - Info: - - 'Naudojimas: /resreload' - resload: - Description: uzkrauti rezidencijos saugojimo faila (nesaugu, tik administratoriam). - Info: - - 'Naudojimas: /resload' - - 'Nesaugi komanda, neapsaugoti rezidencija pirma.' - - 'uzkrauna rezidencijos issaugojimo faila ir restartuoja rezidencija.' - version: - Description: parodyti rezidencijos versija - Info: - - 'Naudojimas: /res version' +# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy +# of this file and modify that instead. This file will be updated automatically by Residence +# when a newer version is detected, and your changes will be overwritten. Once you +# have a copy of this file, change the Language: option under the Residence config.yml +# to whatever you named your copy. +Version: 21 +FieldsVersion: 22 +Language: + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. + #Version 1 Fields + InvalidResidence: Bloga Rezidencija... + InvalidSubzone: Bloga Subzona... + InvalidDirection: Bloga kriptis... + InvalidChannel: Blogas kanalas... + InvalidAmount: Blogas kiekis... + InvalidCost: Bloga kaina... + InvalidDays: Blogas dienu kiekis... + InvalidMaterial: Bloga medziaga... + InvalidBoolean: Bloga reiksme, turi buti true(t) arba false(f) + InvalidArea: Bloga teritorija... + InvalidGroup: Bloga grupe... + InvalidMessageType: Zinutes tipas turi buti enter arba remove. + InvalidList: Blogas sarasas... + InvalidFlag: Blogas Flag... + InvalidFlagState: Bloga flag reiksme, turi buti true(t), false(f), arba remove(r) + AreaExists: Toks ploto vardas jau egzistuoja. + AreaCreate: 'Sukurta rezidencija, ID %1' + AreaDiffWorld: Plotas yra kitame pasaulyje nuo rezidencijos. + AreaCollision: 'Pazymetas plotas kertasi su kita rezidencija %1' + AreaSubzoneCollision: 'Pazymetas plotas kertasi su subzona %1' + AreaNonExist: Toks plotas neegzistuoja. + AreaInvalidName: Blogas ploto pavadinimas... + AreaRename: 'Pervadinti plota is %1 i %2' + AreaRemove: 'Panaikintas plotas %1...' + AreaRemoveLast: Negalima pasalinti paskutinio ploto rezidencijoje. + AreaNotWithinParent: Plotas nera tevinio ploto viduje. + AreaUpdate: Plotas atnaujintas... + AreaMaxPhysical: Jus pasiekete maksimalu galimu plutu skaiciu savo rezidencijai. + AreaSizeLimit: Ploto dydis nera jusu galimybiu ribose. + AreaHighLimit: 'Jus negalite apsaugoti sitaip aukstai, jusu riba yra %1' + AreaLowLimit: 'Jus negalite apsaugoti sitaip giliai, jusu riba yra %1' + NotInResidence: Tu nesi savo rezidencijoje. + InResidence: 'Tu stovi rezidencijoje kurios pavadinimas %1' + ResidenceOwnerChange: 'Rezidencijos %1 savininkas pakeistas i %2' + NonAdmin: Tu nesi rezidencijos administratorius. + AdminOnly: Tik administratorei turi teise i sita komanda. + ChatDisabled: Rezidencijos pokalbiu kanalas isjungtas... + SubzoneRename: 'Pervadinta subzona is %1 i %2' + SubzoneRemove: 'Subzona %1 panaikinta.' + SubzoneCreate: 'Sukurta subzona %1' + SubzoneCreateFail: 'Neimanoma sukurti subzonos %1' + SubzoneExists: 'Subzona %1 jau egzistuoa.' + SubzoneCollide: 'Subzona kertasi su kita sub zona %1' + SubzoneMaxDepth: Pasiekete maksimalu subzonu gyli. + SubzoneSelectInside: Abudu pazimeti taskai turi buti rezidencijos ribose. + SelectPoints: Visu pirma pazimek du taskus pries naudodamas sita komanda! + SelectionSuccess: Zymejimas sekmingas! + SelectionFail: Neteisinga zymejimo komanda... + SelectionBedrock: Zymejimas istemptas iki zemiausio jums leistino tasko. + SelectionSky: Zymejimas istemptas iki auksciausio jums leistino tasko. + SelectionArea: 'Pazimetas plotas %1 rezidencijos %2' + SelectDiabled: Jus neturite prieigos prie pasirinkimu komandu. + NoPermission: Jus neturite tam teises. + OwnerNoPermission: Savininkas neturi tam teises. + ParentNoPermission: Jus neturite teises pakeitimams Parent zonai. + MessageChange: Zinute nustatyta... + FlagSet: Flagas nustatytas... + FlagCheckTrue: 'Flagas %1 priskirtas zaidejui %2 rezidencijai %3, reiksme = %4' + FlagCheckFalse: 'Flagas %1 nepriskirtas zaidejui %2 rezidencijai.' + FlagsCleared: Flagai istrinti. + FlagsDefault: Flagai nustatyti i pradine busena. + Usage: Komandos panaudojimas + InvalidHelp: Blogas pagalbos puslapis... + SubCommands: Sub komandos + InvalidList: Nezinomas saraso tipas, turi buti juodasis sarasas arba ignoravimo sarasas. + MaterialGet: 'Medziagos pavadinimas kadangi ID %1 yra %2' + MarketDisabled: Ekonomika isjungta! + MarketList: parduotuviu sarasas + SelectionTool: Zymejimo irankis + InfoTool: Informacinis irankis + NoBankAccess: Neturi priejimo prie banko. + NotEnoughMoney: Neturi uztektinai pinigu. + BankNoMoney: Nera uztektinai pinigu banke. + BankDeposit: 'Jus pervedete %1 i jusu rezidencijos banka.' + BankWithdraw: 'Jus istraukete %1 is jusu rezidencijos banko.' + MoneyCharged: 'Nuskaiciuota %1 is jusu %2 saskaitos.' + MoneyCredit: 'Kredituotas %1 i jusu %2 saskaita.' + RentDisabled: Nuomuos sistema isjungta. + RentReleaseInvalid: 'Rezidencija %1 nera nuomuojama arba isnuomuota.' + RentSellFail: Negali parduoti rezidencijos jeigu ji yra nuomuojama. + SellRentFail: Negali nuomuoti rezidencijos jeigu ji yra parduodama. + OwnerBuyFail: Negali pirkti savo paties zemes! + OwnerRentFail: Negali nuomuotis savo paties zemes! + AlreadySellFail: Rezidencija jau yra parduodama! + ResidenceBought: 'Jus nusipirkote rezidencija %1' + ResidenceBuy: 'Rezidencija %1 nupirko rezidencija %2 is jusu.' + ResidenceBuyTooBig: Si rezidencija turi didesnius plotus, nei jums leistas maximalus. + ResidenceNotForSale: Rezidencija neparduodama. + ResidenceForSale: 'Rezidencija %1 parduodama uz %2' + ResidenceStopSelling: Rezidencija nebeparduodama. + ResidenceTooMany: Tu jau turi maksimalu rezidenciju skaiciu kuris yra tau leistinas. + ResidenceMaxRent: Tu jau nuomuojiesi maksimalu rezidenciju skaiciu kuris yra tau leistinas. + ResidenceAlreadyRent: Rezidencija jau yra skirta nuomuoti... + ResidenceNotForRent: Rezidencija nenuomuojama... + ResidenceNotRented: Rezidencija neisnuomuota. + ResidenceUnrent: 'Rezidencija %1 daugiau nebeisnuomuota.' + ResidenceRemoveRentable: 'Rezidencija %1 daugiau nebenuomuojama.' + ResidenceForRentSuccess: 'Rezidencija %1 nuos iol nuomuojama uz %2 kas %3 dienas.' + ResidenceRentSuccess: 'Jus issinuomavote rezidencija %1 %2 dienoms.' + ResidenceAlreadyRented: 'Rezidencija %1 siuo metu isnuomuota %2' + ResidenceAlreadyExists: 'Rezidencija tokiu vardu %1 jau egzistuoja.' + ResidenceCreate: 'Jus sukurete rezidencija %1!' + ResidenceRename: 'Pervadinote rezidencija is %1 i %2' + ResidenceRemove: 'Rezidencija %1 panaikinta...' + RentDisabled: Nuoma isjungta... + RentDisableRenew: 'Rezidencija %1 automatiksai nebeissinuomuos pasibaigus nuomos laikui.' + RentEnableRenew: 'Rezidencija %1 automatiksai issinuomuos pasibaigus nuomos laikui.' + RentableDisableRenew: '%1 nebeprates nuomos laiko jam pasibaigus.' + RentableEnableRenew: '%1 automatiskai prates nuomos laika jam pasibaigus.' + LandForSale: Parduodama zeme + SellAmount: Pardavimu kiekis + LeaseExpire: Nuomos sutarties pasibaigimo laikas + RentExpire: Nuomos pasibaigimo laikas + RentableAutoRenew: Isnuomojamas automatinis atnaujinimas + RentAutoRenew: Nuoma automatinio atnaujinimo + RentableLand: Nuomuojama zeme + ListMaterialAdd: '%1 pridetas prie rezidencijos %2' + ListMaterialRemove: '%1 iskeldintas is %2' + ItemBlacklisted: Sitas blokas cia nera leidziamas. + RentedModifyDeny: Negali keisti isnuomuotos rezidencijos. + WorldPVPDisabled: Pasulinis PVP isjungtas. + NoPVPZone: Cia tu negali kautis. + FlagDeny: 'Tu neturi %1 privilegiju.' + FlagSetDeny: 'Savininkas neturi priejimo prie Flago %1' + SelectPoint: 'Pasirinktas %1 pazimejimo taskas' + ResidenceChat: 'Perjungti rezidencijos poklabiai %1' + ResidenceMoveDeny: 'Tu neturi judejimo teisiu sitoje rezidencijoje %1' + TeleportDeny: Tu neturi teleporto teisiu i sita rezidencija. + TeleportSuccess: 'Nuteleportuotas!' + TeleportNear: Nuteleportuotas prie rezidencijos. + TeleportNoFlag: Tu neturi teleporto teisiu i sita rezidencija. + SetTeleportLocation: Nustatyta teleporto vieta... + HelpPageHeader: 'Pagalbos puslapiai - %1 - puslapis <%2 is %3>' + ListExists: Sarasas jau egzistuoja... + ListRemoved: Sarasas pasalintas... + ListCreate: 'Sukurtas sarasas %1' + LeaseRenew: 'Nuomos sutartis galioja iki %1' + LeaseRenewMax: Nuomos sutartis atnaujinta i leistina maksimalu + LeaseNotExpire: Nera tokios nuomos sutarties, arba tokia nuomos sutartis nesibaigia. + LeaseRenewalCost: 'Atnaujinimo kaina plotui %1 yra %2' + LeaseInfinite: Nuomos sutarties laikas nustatytas neribotam laikui... + PermissionsApply: Leidimai pritaikyti rezidencijai. + PhysicalAreas: Fiziniai Plotai + CurrentArea: Einamieji Plotai + LeaseExpire: Nuomos pabaiga + NotOnline: Zaidejas turi buti prisijunges. + ResidenceGiveLimits: Negalima duoti rezidencijos pazymetam zaidejui, nes ji yra uz pazymeto zaidejo ribu. + ResidenceGive: 'Jus atiduodate rezidencija %1 zaidejui %2' + ResidenceRecieve: 'Jus gavote rezidencija %1 is zaidejo %2' + #Version 4 New Fields + #ResidenceListAll: 'Residences - ' - removed, use GenericPage now + ResidenceListAllEmpty: Jokios rezidencijos neegzistuoja serveryje... + InvalidPage: Klaidingas puslapis... + NextPage: Kitas puslapis + #Version 10 New Fields + RemovePlayersResidences: 'Panaikintos visos rezidencijos priklausiancios zaidejui %1' + GenericPage: 'Puslapis %1 is %2' + #Version 11 New Fields + ResidenceRentedBy: 'Issinuomuota %1' + #Version 14 New Fields + InvalidCharacters: Aptikti negaliojantys zenklai... + InvalidNameCharacters: Varda sudaro neleistini zenklai... + #Version 15 New Fields + DeleteConfirm: 'Ar tikrai norite panaikinti rezidencija %1, naudok /res confirm kad patvirtinti.' + #Version 18 New Fields + SelectTooHigh: Ispejimas, pasirinkimas nuejo virs zemelapio virsunes, ribojama. + SelectTooLow: Ispejimas, pasirinkimas nuejo zemiau zemelapio pagrindo, ribojama. + WorldEditNotFound: WorldEdit nebuvo aptiktas. + #Version 19 New Fields + NoResHere: Nera cia rezidencijos. + DeleteSubzoneConfirm: 'Ar tikrai norite istrinti subzona %1, naudok /res confirm kad patvirtinti.' + #Version 20 New Fields + SubzoneOwnerChange: 'Subzonos %1 savininkas pakeistas i %2' + CoordsTop: 'X:%1 Y:%2 Z:%3' + CoordsBottom: 'X:%1 Y:%2 Z:%3' + #Version 21 New Fields + AdminToggle: 'Automatinis rezidencijos admin jungiklis pasuktas %1' + #Version 22 New Fields + NoSpawn: 'Jus neturite leidimo judeti jusu atsiradimo taske. Perkelimas' + CompassTargetReset: 'Jusu kompasas buvo perstatytas' + CompassTargetSet: 'Jusu kompasas dabar nurodo i %1' + #The below lines are mostly a word bank for various uses. + #Version 1 Fields + Description: Aprasymas + Land: Zeme + Cost: Kaina + Selection: Pazymeta + Total: Isviso + Size: dydis + Expanding: Isplesta + Shifting: Perkelta + Up: Aukstyn + Down: Zemyn + Error: Klaida + Flags: Veleveles + Your: Tavo + Group: Grupe + Others: Kiti + Primary: Pirminis + Secondary: Antrinis + Selection: Pazymeta + Moved: Perkelta + Status: Statusas + Available: Galimas + On: Ijungtas + Off: Isjungtas + Name: Vardas + Lists: Sarasas + Residences: Rezidencijos + Residence: Rezidencija + Count: Kiekis + Owner: Savininkas + #Version 4 Fields + World: Pasaulis + #Version 12 Fields + Subzones: Subzona + #Version 20 Fields + CoordsT: Virsutines koordinates + CoordsB: Apatines koordinates + #Version 22 Fields + TurnOn: 'ijungti' + TurnOff: 'isjungti' + +# This is the help / usage messages for each command. +# It follows this format: +# +# Description: +# Info: +# SubCommands: +# - these follow the same format, and each sub command can have its own subcommands +# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that +# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). +# Add a page number after the ? mark to see that page. + +HelpLinesPerPage: 7 +CommandHelp: #this is just a holder node, that holds the entire help + Description: Ieina pagalba del rezidenciju + SubCommands: #this is the actual beginning of all commands + res: #main residence command + Description: Pagrindines rezidencijos komandos + Info: + - 'Paziurek pamokas: http://ltcraft.lt/?page_id=311' + - 'Naudok /[komanda] ? kad perziureti issamiau.' + - 'Naudok /res flags kad perziureti apie galimus leidymus.' + SubCommands: + select: #selection commands + Description: Zymejimo komandos + Info: + - 'Sia komanda pasirenkamas plotas naudojimui su rezidencija.' + - '/res select [x] [y] [z] - parenka bloku spinduli, jums bunant viduje.' + SubCommands: + coords: + Description: Rodomos pazymetos koordinates + Info: + - 'Naudojimas: /res select coords' + size: + Description: Rodomas pazymetas dydis + Info: + - 'Naudojimas: /res select size' + cost: + Description: Rodoma pasirinkimo kaina + Info: + - 'Naudojimas: /res select cost' + vert: + Description: Isplesti pasirinkima vertikaliai + Info: + - 'Naudojimas: /res select vert' + - 'Isples pasirinkima taip aukstai ir taip zemai kaip leistina.' + sky: + Description: Isplesti pasirinkima i dangu + Info: + - 'Naudojimas: /res select sky' + - 'Isples tiek aukstai kiek jums yra leista.' + bedrock: + Description: Isplesti pasirinkima iki Bedrock + Info: + - 'Naudojimas: /res select bedrock' + - 'Isples tiek zemai kiek jums yra leista.' + expand: + Description: Isplesti pasirinkima kryptimi. + Info: + - 'Naudojimas: /res select expand ' + - 'Isplecia i ta krypti i kuria ziurite.' + shift: + Description: Paslinkti pasirinkima kryptimi + Info: + - 'Naudojimas: /res select shift ' + - 'Pastumia jusu pasirinkima i ta krypti i kuria ziurite.' + chunk: + Description: Pazymi dali kurioje esate siuo metu. + Info: + - 'Naudojimas: /res select chunk' + - 'Pazymi dali kurioje stovite siuo metu.' + residence: + Description: Isrinkite egzistuojanti plota rezidencijoje. + Info: + - 'Naudojimas /res select ' + - 'Isrenka egzistuojanti plota rezidencijoje.' + worldedit: + Description: nustatyti esama WorldEdit pasirinkima. + Info: + - 'Naudojimas /res select worldedit' + - 'nustato pasirinkta arena naudojant esama WorldEdit pasirinkima.' + create: #Sukurymo komandos + Description: Sukurti rezidencija + Info: + - 'Naudojimas: /res create ' + remove: #Panaikinimo komandos + Description: Panaikinti rezidencija. + Info: + - 'Naudojimas: /res remove ' + removeall: + Description: Panaikinti visas rezidencijas priklausiancias zaidejui. + Info: + - 'Naudojimas: /res removeall [savininkas]' + - 'Panaikina visas rezidencijas priklausiancias zaidejui.' + - 'reikalingas /resadmin jei tu tai naudosi ant kazkieno ir saves.' + confirm: + - 'Naudojimas: /res confirm' + - 'Patvirtinti rezidencijos panaikinima.' + subzone: + Description: Sukurti subzonas rezidencijoje. + Info: + - 'Naudojimas: /res subzone [subzonos pavadinimas]' + - 'Jeigu rezidencijos vardas istrinamas, bus bandyta naudoti rezidencija kurioje jus stovite.' + area: + Description: valdyti fizines arenas rezidencijoje. + SubCommands: + list: + Description: sarasas fiziniu arenu rezidencijoje. + Info: + - 'Naudojimas: /res area list [residence] ' + listall: + Description: sarasas koordinaciu ir kita informacija apie arenas. + Info: + - 'Naudojimas: /res area listall [residence] ' + add: + Description: prideti fizines arenas rezidencijoje + Info: + - 'Naudojimas: /res area add [residence] [areaID]' + - 'Jus pirma turite pazymeti du taskus rezidencijoje.' + remove: + Description: Pasalinti fizines arenas is rezidencijos + Info: + - 'Naudojimas: /res area remove [residence] [areaID]' + replace: + Description: pakeisti fizines arenas rezidencijoje + Info: + - 'Naudojimas: /res area replace [residence] [areaID]' + - 'Just privalote pirma pazymeti du taskus rezidencijoje.' + - 'PakeiÄiant arena reikÄ—s sumokÄ—ti dydžio skirtumÄ…, jei naujas plotas yra didesnis.' + info: + Description: Parodyti informacija apie rezidencija. + Info: + - 'Naudojimas: /res info ' + - 'nustojus rodyti informacija rezidencijai kurioje esate.' + limits: + Description: Parodytu jusu limitus. + Info: + - 'Naudojimas: /res limits' + - 'Parodo jusus galimus limitus kuriant ir monipuliuojant rezidencija.' + message: + Description: Valdyti rezidencijos ieinancius / iseinacius pranesimus + Info: + - 'Naudojimas: /res message [enter/leave] [message]' + - 'nustatyti isvykimo ar atvykimo zinute.' + - 'Naudojimas: /res message remove [enter/leave]' + - 'pasalina atvykimo ar isvykimo zinute.' + lease: + Description: Valdyti rezidencijos nuoma + Info: + - 'Naudojimas: /res lease [renew/cost] [residence]' + - '/res lease parodo atsinaujinancia rezidencijos nuomos kaina.' + - '/res lease renew parodo ar turi uztenkamai pinigu issinuomoti rezidencija.' + SubCommands: + set: + Description: Nustatyti nuomos laika (admin only) + Info: + - 'Naudojimas: /resadmin lease set [residence] [#days/infinite]' + - 'nustato specialu nuomos laika dienomis arba neribotai.' + bank: + Description: Valdyti rezidencijos pinigus + Info: + - 'Naudojimas: /res bank [deposit/withdraw] [amount]' + - 'jus turite stoveti rezidencijoje' + - 'jus turite tureti +bank velevele rezidencijoje.' + tp: + Description: Teleportuotis i rezidencija + Info: + - 'Naudojimas: /res tp [residence]' + - 'Telepotuoja jus i rezidencija, just privalote tureti +tp velevele arba buti rezidencijos seimininkas.' + - 'jusu privilegiju grupe taipat turi tureti leidima teleportuotis i rezidencijas.' + tpset: + Description: Nustatyti teleportacijos vieta rezidencijoje + Info: + - 'Naudojimas: /res tpset' + - 'nustatyts teleportacijos vieta i rezidencija ten kur jus stovite.' + - 'just turite stoveti rezidencijoje naudodami sia komanda.' + - 'Jus turite buti rezidencijos savininkas arba tureti +admin velevele.' + set: + Description: Nustatyti bendras veliavas rezidencijoje + Info: + - 'Naudojimas: /res set [flag] [true/false/remove]' + - 'Noredami paziureti veleveliu sarasa rasykite /res flags ?' + - 'Å ios vÄ—liavos taikomos visiems žaidÄ—jams, kurie neturi vÄ—liavu konkreÄiai pritaikytu jiems. ( /res set ?)' + pset: + Description: Nustatyti veliavas specifiniam zaidejui rezidencijoje. + Info: + - 'Naudojimas: /res pset [player] [flag] [true/false/remove]' + - 'Naudojimas: /res pset [player] removeall' + - 'perziureti veleveliu sarasa naudokite /res flags ?' + gset: + Description: Nustatyti veliavas specifinei grupei rezidencijoje. + Info: + - 'Naudojimas: /res gset [group] [flag] [true/false/remove]' + - 'perziureti veleveliu sarasa naudokite /res flags ?' + lset: + Description: pakeisti juodojo saraso ir ignoriamuju saraso nustatymus + Info: + - 'Naudojimas: /res lset [blacklist/ignorelist] [material]' + - 'Naudojimas: /res lset info' + - 'medziagos itraukimas i juodaji sarasa neleidzia buti padetas rezidencijoje.' + - 'ignoriamuju sarasas padaro specifine medziaga neapsaugota rezidencijos.' + flags: + Description: Veliavu sarasas + Info: + - 'flagu reiksmes, pagrinde naudoti true kai nori leisti ir false kai nori uzdrausti naudoti komanda ar veiksma.' + - 'build - leisti arba uzdrausti statyti' + - 'use - leisti arba uzdrausti duru, svirciu, mygtuku ir panasei naudojima...' + - 'move - leisti arba uzdrausti judejima jusu rezidencijoje.' + - 'container - leisti arba uzdrausti naudojima skriniu, krosniu, dalytuvu ir panasei naudojima...' + - 'trusted - Suteikia statybos, naudojimo, judejimo, skriniu ir teleporto teises' + - 'place - leisti arba uzdrausti tik bloku padejima jusu rezidencijoje.' + - 'destroy - leisti arba uzdrausti tik bloku naikinima jusu rezidencijoje.' + - 'pvp - leisti arba uzdrausti pvp jusu rezidencijoje' + - 'tp - leisti arba uzdrausti teleportuotis i jusu rezidencija.' + - 'admin - suteikia teise keisti flagus rezidencijoje.' + - 'subzone - suteike teise kurti subzonas rezidencijoje.' + - 'monsters - leisti arba uzdrausti monstru atsiradyma jusu rezidencijoje' + - 'animals - leisti arba uzdrausti gyvunu atsiradima jusu rezidencijoje.' + - 'healing - nustatyk i true is visi esantis bus pagydyti' + - 'tnt - leisti arba uzdrausti TNT sprogimus' + - 'creeper - leisti arba uzdrausti kreeperiu sprogimus' + - 'ignite - leisti arba uzdrausti ugnies iziebima.' + - 'firespread - leisti arba uzdrausti ugnies plitima.' + - 'bucket - leisti arba uzdrausti kibiro naudojima.' + - 'flow - leisti arba uzdrausti vandens tekejima.' + - 'lavaflow - leisti arba uzdrausti lavos tekejima' + - 'waterflow - leisti arba uzdrausti vandens tekejima' + - 'damage - leisti arba uzdrausti patiriama zala nuo monstru' + - 'piston - leisti arba uzdrausti stumoklius.' + - 'hidden - paslepti rezidencija nuo list komandos' + - 'cake - leisti arba uzdrausti valgyti torta' + - 'lever - leisti arba uzdrausti naudotis svirtimis' + - 'button - leisti arba uzdrausti naudotis mygtukais' + - 'diode - leisti arba uzdrausti diodus' + - 'door - leisti arba uzdrausti naudotis durimis ir liukais' + - 'table - leisti arba uzdrausti naudotis darbastaleis' + - 'enchant - leisti arba uzdrausti naudotis kerejimo stalais' + - 'brew - leisti arba uzdrausti naudotis eleksiru staliukais' + - 'bed - leisti arba uzdrausti naudotis lovomis' + - 'button - leisti arba uzdrausti naudotis mygtukais' + - 'pressure - leisti arba uzdrausti naudotis slegio plokstem' + - 'note - leisti arba uzdrausti naudotis natu blokais' + - 'redstone - suteikia lever, diode, button, pressure, note flagus' + - 'craft - suteikia table, enchant, brew flagus' + - 'burn - leisti arba uzdrausti monstru uzsiliepsnojima nuo saules' + - 'melt - Apsaugo nuo sniego istirpimo' + - 'form - Apsaugo nuo sniego susiformavimo' + - 'animalkilling - Apsaugo nuo gyvunu zudymo' + - 'mobkilling - Apsaugo nuo mobu zudymo' + - 'drops - Apsaugo nuo item metimu rese' + - 'enderpearl - Apsaugo nuo enderperl naudojimo rese' + - 'falldamage - Apsaugo nuo falldamage' + - 'portal - Apsaugo nuo portalu naudojimo' + - 'villagerkilling - Apsaugo nuo kaimieciu zudimo' + - 'vehicleprotect - Apsaugo vagoneliu nugriovima' + - 'lightning - Apsaugo nuo zaibu' + - 'grow - Sustabdo augmenijos augima' + - 'hunger - Netampama alkanu' + - 'fishing - Apsaugo nuo zvejojimo' + - 'eggs - Apsaugo nuo kiausiniu metimo' + - 'pigzap - Apsaugo kiaules nuo pasivertimo i pigzombie' + - 'slimesplit - Apsaugo slime pasidalinima' + - 'shear - Apsaugo nuo aviu nukirpimo' + - 'pigsaddle - Apsaugo nuo balno uzdejimo ant kiaules' + - 'trade - Apsaugo nuo prekybos su kaimieciais' + - 'day - Diena visa laika' + - 'night - Naktis visa laika' + - 'weather - Lija visa laika' + list: + Description: Rezidenciju sarasas + Info: + - 'Naudojimas: /res list ' + - 'Lists all the residences a player owns (except hidden ones).' + - 'Jeigu sarasuose ziurimos savo rezidencijos, matos ir pasleptos.' + - 'Norint pamatyti visu serverio zaideju rezidencijas, naudokite /res listall.' + listhidden: + Description: Pamatyti pasleptas rezidencijas (TIK ADMINISTRATORIAMS) + Info: + - 'Naudojimas: /res listhidden ' + - 'Parodo sarasa pasleptu zaideju rezidenciju.' + listall: + Description: List All Residences + Info: + - 'Naudojimas: /res listall ' + - 'parodo sarasa viso serverio zaideju rezidenciju. (isskyrus pasleptu)' + listallhidden: + Description: Pamatyti pasleptas rezidencijas (TIK ADMINISTRATORIAMS) + Info: + - 'Naudojimas: /res listhidden ' + - 'Parodo viso serverio vpasleptu rezidenciju sarasa.' + sublist: + Description: Sarasas rezidenciju subzonu + Info: + - 'Naudojimas: /res sublist ' + - 'subzonu sarasas kartu su rezidencijomis.' + default: + Description: Restartuoti rezidencija iki pradiniu nustatymu. + Info: + - 'Naudojimas: /res default ' + - '. Restartuoti rezidencija iki pradiniu nustatymu.' + rename: + Description: Pervadina rezidencija. + Info: + - 'Naudojimas: /res rename [OldName] [NewName]' + - 'Tu turi buti savininkas arba adminas kad tai galetum padaryti.' + - 'Vardas turi buti laisvas.' + mirror: + Description: Veidrodines veleveles + Info: + - 'Naudojimas: /res mirror [Source Residence] [Target Residence]' + - 'Suvienodink dvieju rezidenciju flagus. Kad tai daryti turite buti abie ju rezidenciju adminas' + market: + Description: Buy, Sell, or Rent Residences + Info: + - 'Naudojimas: /res market ? for more info' + SubCommands: + info: + Description: Gauk ekonomine informacija apie rezidencija + Info: + - 'Naudojimas: /res market info [residence]' + - 'Parodo ar rezidencija nomuojama,parduodama. parodo jos kaina.' + list: + Description: sarasas isnomuojamu rezidenciju. + Info: + - 'Naudojimas: /res market list' + sell: + Description: Rezidencijos pardavimas + Info: + - 'Naudojimas: /res market sell [pavadinimas] [suma]' + - 'pradeda pardavineti rezidencija [suma] pinigu.' + - 'kitas zaidejas gali pirkti rezidencija su komanda /res market buy' + buy: + Description: rezidencijos pirkimas + Info: + - 'Naudojimas: /res market buy [residence]' + - 'perkama rezidencija jeigu ji parduodama.' + unsell: + Description: Sustabdyt rezidencijos pardavinejima. + Info: + - 'Naudojimas: /res market unsell [residence]' + rent: + Description: Isnuomoti rezidencija. + Info: + - 'Naudojimas: /res market rent [residence] ' + - 'Isnuomoja rezidencija. Automatini atnaujinima galima ijungti ir isjungti true arba false . Jeigu True nuoma automatiskai prasites' + rentable: + Description: Padaryti rezidencija nuomojama. + Info: + - 'Naudojimas: /res market rentable [residence] [cost] [days] ' + - 'padaro rezidencija nomuojama uz [cost] pinigu uz [days] dienu. jai nustatytas true, rezidencija automatiskai prasites.' + release: + Description: pasalinti rezidencija is nuomojamuju. + Info: + - 'Naudojimas: /res market release [residence]' + - 'jeigu esate nuomininkas, sis namas nebepriklausys jums .' + - 'jeigu esate seimininkas, si komanda nurtrauks jusu rezidencijos nuoma.' + current: + Description: Parodo rezidencija kurioje esate. + Info: + - 'Naudojimas: /res current' + lists: + Description: Isanksto nustatytu leidimu sarasas + Info: + - 'Isanksto nustatytu leidimu sarasas kuri galima pritaikyti rezidencijai.' + SubCommands: + add: + Description: Prideti sarasa + Info: + - 'Naudojimas: /res lists add ' + remove: + Description: Pasalinti sarasa + Info: + - 'Naudojimas: /res lists remove ' + apply: + Description: Taikyti sarasa rezidencijai + Info: + - 'Naudojimas: /res lists apply ' + set: + Description: Nustatyti veliava + Info: + - 'Naudojimas: /res lists set ' + pset: + Description: Nustatyti zaidejo veliava + Info: + - 'Naudojimas: /res lists pset ' + gset: + Description: Nustatyti grupes veliava + Info: + - 'Naudojimas: /res lists gset ' + view: + Description: Perziureti sarasa. + Info: + - 'Naudojimas: /res lists view ' + server: + Description: Nustatyti zemes savininka (tik administratoriam). + Info: + - 'Naudojimas: /resadmin server [residence]' + - 'padaryti rezidencija uzimta.' + setowner: + Description: pakeisti rezidencijos seimininka (tik administratoriam). + Info: + - 'Naudojimas: /resadmin setowner [residence] [player]' + resreload: + Description: perkrauti rezidencija (tik administratoriam). + Info: + - 'Naudojimas: /resreload' + resload: + Description: uzkrauti rezidencijos saugojimo faila (nesaugu, tik administratoriam). + Info: + - 'Naudojimas: /resload' + - 'Nesaugi komanda, neapsaugoti rezidencija pirma.' + - 'uzkrauna rezidencijos issaugojimo faila ir restartuoja rezidencija.' + version: + Description: parodyti rezidencijos versija + Info: + - 'Naudojimas: /res version' diff --git a/src/Language/Polish.yml b/src/Language/Polish.yml index 8bbef51f7..6b02f8f93 100644 --- a/src/Language/Polish.yml +++ b/src/Language/Polish.yml @@ -172,14 +172,14 @@ Language: InvalidCharacters: Wykryto nieprawidÅ‚owe znaki... InvalidNameCharacters: Nazwa wymieniona zawiera zablokowane znaki... #Version 15 New Fields - DeleteConfirm: 'JesteÅ› pewien że chcesz usunąć Rezydencje %1, uzyj "/res confirm" do potwierdzenia.' + DeleteConfirm: 'JesteÅ› pewien że chcesz usunąć Rezydencje %1, uzyj /res confirm do potwierdzenia.' #Version 18 New Fields SelectTooHigh: Uwaga, wybór padÅ‚ w górnej części mapy, pozycja jest zbyt wysoka. SelectTooLow: Uwaga, wybór padÅ‚ w dolnej części mapy, pozycja jest zbyt niska. WorldEditNotFound: WorldEdit nie zostal wykryty. #Version 19 New Fields NoResHere: Nie ma w nim miejsca zamieszkania. - DeleteSubzoneConfirm: 'JesteÅ› pewien że chcesz usunąć podstrefe %1, uzyj "/res confirm" aby kontynuować.' + DeleteSubzoneConfirm: 'JesteÅ› pewien że chcesz usunąć podstrefe %1, uzyj /res confirm aby kontynuować.' #Version 20 New Fields SubzoneOwnerChange: 'Podstrefa %1 zmieniÅ‚a wÅ‚Ä…Å›ciciela na %2' CoordsTop: 'X:%1 Y:%2 Z:%3' diff --git a/src/Language/Spanish.yml b/src/Language/Spanish.yml index 8180bad90..05b9cd88a 100644 --- a/src/Language/Spanish.yml +++ b/src/Language/Spanish.yml @@ -34,9 +34,9 @@ Language: AreaNonExist: No existe tal zona. AreaInvalidName: Nombre de área inválido... AreaToSmallTotal: El área seleccionada es más pequeña de la permitida (%1) - AreaToSmallX: La longitud "x" es demasiado pequeña. %1 permitida %2 - AreaToSmallY: La longitud "altura" es demasiado pequeña. %1 permitida %2 - AreaToSmallZ: La longitud "z" es demasiado pequeña. %1 permitida %2 + AreaToSmallX: La longitud x es demasiado pequeña. %1 permitida %2 + AreaToSmallY: La longitud altura es demasiado pequeña. %1 permitida %2 + AreaToSmallZ: La longitud z es demasiado pequeña. %1 permitida %2 AreaRename: Ãrea renombrada de %1 a %2 AreaRemove: Ãrea eliminada %1 ... AreaRemoveLast: No se puede eliminar el último área de una residencia. @@ -200,12 +200,12 @@ Language: ResidenceRentedBy: En alquiler por %1 InvalidCharacters: Caracteres no válidos detectados... InvalidNameCharacters: El nombre contiene caracteres no permitidos... - DeleteConfirm: Si estás seguro que deseas eliminar la residencia %1, Usa "/res confirm" para confirmarlo. + DeleteConfirm: Si estás seguro que deseas eliminar la residencia %1, Usa /res confirm para confirmarlo. SelectTooHigh: La selección está por encima de la parte superior de los límites del mapa. SelectTooLow: La selección está por debajo de la parte inferior de los límites del mapa. WorldEditNotFound: WorldEdit no fue detectado. NoResHere: No hay ninguna residencia aquí. - DeleteSubzoneConfirm: Si estás seguro que deseas eliminar la subzona %1, Usa "/res confirm" para confirmarlo. + DeleteSubzoneConfirm: Si estás seguro que deseas eliminar la subzona %1, Usa /res confirm para confirmarlo. SubzoneOwnerChange: La subzona propiedad de %1 ahora es del jugador %2 CoordsTop: X:%1 Y:%2 Z:%3 CoordsBottom: X:%1 Y:%2 Z:%3 diff --git a/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java b/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java index 1870b65bd..be51563f5 100644 --- a/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java +++ b/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java @@ -1,10 +1,14 @@ package com.bekvon.bukkit.residence; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; -import java.io.PrintWriter; +import java.io.OutputStreamWriter; +import java.io.Writer; import java.util.HashMap; +import org.apache.commons.lang.StringEscapeUtils; import org.bukkit.configuration.file.YamlConfiguration; import com.google.common.io.Files; @@ -15,186 +19,183 @@ */ public class CommentedYamlConfiguration extends YamlConfiguration { - private HashMap comments; + private HashMap comments; - public CommentedYamlConfiguration() { - super(); - comments = new HashMap(); - } - - @Override - public void save(String file) throws IOException { - if (file == null) { - throw new IllegalArgumentException("File cannot be null"); - } + public CommentedYamlConfiguration() { + super(); + comments = new HashMap(); + } - save(new File(file)); + @Override + public void save(String file) throws IOException { + if (file == null) { + throw new IllegalArgumentException("File cannot be null"); } - @Override - public void save(File file) throws IOException { - if (file == null) { - throw new IllegalArgumentException("File cannot be null"); - } - - Files.createParentDirs(file); + save(new File(file)); + } - String data = insertComments(saveToString()); + @Override + public void save(File file) throws IOException { + if (file == null) { + throw new IllegalArgumentException("File cannot be null"); + } - //FileWriter writer = new FileWriter(file); - - PrintWriter writer = new PrintWriter(file, "UTF-8"); - - //Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); + Files.createParentDirs(file); - try { - writer.write(data); - } finally { - writer.close(); - } - } + String data = insertComments(saveToString()); + data = StringEscapeUtils.unescapeJava(data); - private String insertComments(String yaml) { - // if there's comments to add, we need to add comments - if (!comments.isEmpty()) { - // String array of each line in the config file - String[] yamlContents = yaml.split("[" + System.getProperty("line.separator") + "]"); - - // This will hold the entire newly formatted config - StringBuilder newContents = new StringBuilder(); - // This holds the current path the lines are at in the config - StringBuilder currentPath = new StringBuilder(); - // This tells if the specified path has already been commented - boolean commentedPath = false; - // This flags if the line is a node or unknown text. - boolean node = false; - // The depth of the path. (number of words separated by periods - 1) - int depth = 0; - - // This will cause the first line to be ignored. - boolean firstLine = true; - // Loop through the config lines - for (final String line : yamlContents) { - if (firstLine) { - firstLine = false; - if (line.startsWith("#")) { - continue; - } - } - // If the line is a node (and not something like a list value) - if (line.contains(": ") || (line.length() > 1 && line.charAt(line.length() - 1) == ':')) { - // This is a new node so we need to mark it for commenting (if there are comments) - commentedPath = false; - // This is a node so flag it as one - node = true; - - // Grab the index of the end of the node name - int index = 0; - index = line.indexOf(": "); - if (index < 0) { - index = line.length() - 1; - } - // If currentPath is empty, store the node name as the currentPath. (this is only on the first iteration, i think) - if (currentPath.toString().isEmpty()) { - currentPath = new StringBuilder(line.substring(0, index)); - } else { - // Calculate the whitespace preceding the node name - int whiteSpace = 0; - for (int n = 0; n < line.length(); n++) { - if (line.charAt(n) == ' ') { - whiteSpace++; - } else { - break; - } - } - // Find out if the current depth (whitespace * 2) is greater/lesser/equal to the previous depth - if (whiteSpace / 2 > depth) { - // Path is deeper. Add a . and the node name - currentPath.append(".").append(line.substring(whiteSpace, index)); - depth++; - } else if (whiteSpace / 2 < depth) { - // Path is shallower, calculate current depth from whitespace (whitespace / 2) and subtract that many levels from the currentPath - int newDepth = whiteSpace / 2; - for (int i = 0; i < depth - newDepth; i++) { - currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), ""); - } - // Grab the index of the final period - int lastIndex = currentPath.lastIndexOf("."); - if (lastIndex < 0) { - // if there isn't a final period, set the current path to nothing because we're at root - currentPath = new StringBuilder(); - } else { - // If there is a final period, replace everything after it with nothing - currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); - } - // Add the new node name to the path - currentPath.append(line.substring(whiteSpace, index)); - // Reset the depth - depth = newDepth; - } else { - // Path is same depth, replace the last path node name to the current node name - int lastIndex = currentPath.lastIndexOf("."); - if (lastIndex < 0) { - // if there isn't a final period, set the current path to nothing because we're at root - currentPath = new StringBuilder(); - } else { - // If there is a final period, replace everything after it with nothing - currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); - } - //currentPath = currentPath.replace(currentPath.substring(currentPath.lastIndexOf(".")), ""); - currentPath.append(line.substring(whiteSpace, index)); - } - } - } else { - node = false; - } - StringBuilder newLine = new StringBuilder(line); - if (node) { - String comment = null; - if (!commentedPath) { - // If there's a comment for the current path, retrieve it and flag that path as already commented - comment = comments.get(currentPath.toString()); - } - if (comment != null && !comment.isEmpty()) { - // Add the comment to the beginning of the current line - newLine.insert(0, System.getProperty("line.separator")).insert(0, comment); - comment = null; - commentedPath = true; - } - } - newLine.append(System.getProperty("line.separator")); - // Add the (modified) line to the total config String - newContents.append(newLine.toString()); - } + Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); - return newContents.toString(); - } - return yaml; + try { + writer.write(data); + } finally { + writer.close(); } - - /** - * Adds a comment just before the specified path. The comment can be multiple lines. An empty string will indicate a blank line. - * - * @param path Configuration path to add comment. - * @param commentLines Comments to add. One String per line. - */ - public void addComment(String path, String... commentLines) { - StringBuilder commentstring = new StringBuilder(); - String leadingSpaces = ""; - for (int n = 0; n < path.length(); n++) { - if (path.charAt(n) == '.') { - leadingSpaces += " "; - } + } + + private String insertComments(String yaml) { + // if there's comments to add, we need to add comments + if (!comments.isEmpty()) { + // String array of each line in the config file + String[] yamlContents = yaml.split("[" + System.getProperty("line.separator") + "]"); + + // This will hold the entire newly formatted config + StringBuilder newContents = new StringBuilder(); + // This holds the current path the lines are at in the config + StringBuilder currentPath = new StringBuilder(); + // This tells if the specified path has already been commented + boolean commentedPath = false; + // This flags if the line is a node or unknown text. + boolean node = false; + // The depth of the path. (number of words separated by periods - 1) + int depth = 0; + + // This will cause the first line to be ignored. + boolean firstLine = true; + // Loop through the config lines + for (final String line : yamlContents) { + if (firstLine) { + firstLine = false; + if (line.startsWith("#")) { + continue; + } } - for (String line : commentLines) { - if (!line.isEmpty()) { - line = leadingSpaces + "# " + line; + // If the line is a node (and not something like a list value) + if (line.contains(": ") || (line.length() > 1 && line.charAt(line.length() - 1) == ':')) { + // This is a new node so we need to mark it for commenting (if there are comments) + commentedPath = false; + // This is a node so flag it as one + node = true; + + // Grab the index of the end of the node name + int index = 0; + index = line.indexOf(": "); + if (index < 0) { + index = line.length() - 1; + } + // If currentPath is empty, store the node name as the currentPath. (this is only on the first iteration, i think) + if (currentPath.toString().isEmpty()) { + currentPath = new StringBuilder(line.substring(0, index)); + } else { + // Calculate the whitespace preceding the node name + int whiteSpace = 0; + for (int n = 0; n < line.length(); n++) { + if (line.charAt(n) == ' ') { + whiteSpace++; + } else { + break; + } } - if (commentstring.length() > 0) { - commentstring.append(System.getProperty("line.separator")); + // Find out if the current depth (whitespace * 2) is greater/lesser/equal to the previous depth + if (whiteSpace / 2 > depth) { + // Path is deeper. Add a . and the node name + currentPath.append(".").append(line.substring(whiteSpace, index)); + depth++; + } else if (whiteSpace / 2 < depth) { + // Path is shallower, calculate current depth from whitespace (whitespace / 2) and subtract that many levels from the currentPath + int newDepth = whiteSpace / 2; + for (int i = 0; i < depth - newDepth; i++) { + currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), ""); + } + // Grab the index of the final period + int lastIndex = currentPath.lastIndexOf("."); + if (lastIndex < 0) { + // if there isn't a final period, set the current path to nothing because we're at root + currentPath = new StringBuilder(); + } else { + // If there is a final period, replace everything after it with nothing + currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); + } + // Add the new node name to the path + currentPath.append(line.substring(whiteSpace, index)); + // Reset the depth + depth = newDepth; + } else { + // Path is same depth, replace the last path node name to the current node name + int lastIndex = currentPath.lastIndexOf("."); + if (lastIndex < 0) { + // if there isn't a final period, set the current path to nothing because we're at root + currentPath = new StringBuilder(); + } else { + // If there is a final period, replace everything after it with nothing + currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); + } + //currentPath = currentPath.replace(currentPath.substring(currentPath.lastIndexOf(".")), ""); + currentPath.append(line.substring(whiteSpace, index)); } - commentstring.append(line); + } + } else { + node = false; } - comments.put(path, commentstring.toString()); + StringBuilder newLine = new StringBuilder(line); + if (node) { + String comment = null; + if (!commentedPath) { + // If there's a comment for the current path, retrieve it and flag that path as already commented + comment = comments.get(currentPath.toString()); + } + if (comment != null && !comment.isEmpty()) { + // Add the comment to the beginning of the current line + newLine.insert(0, System.getProperty("line.separator")).insert(0, comment); + comment = null; + commentedPath = true; + } + } + newLine.append(System.getProperty("line.separator")); + // Add the (modified) line to the total config String + newContents.append(newLine.toString()); + } + + return newContents.toString(); + } + return yaml; + } + + /** + * Adds a comment just before the specified path. The comment can be multiple lines. An empty string will indicate a blank line. + * + * @param path Configuration path to add comment. + * @param commentLines Comments to add. One String per line. + */ + public void addComment(String path, String... commentLines) { + StringBuilder commentstring = new StringBuilder(); + String leadingSpaces = ""; + for (int n = 0; n < path.length(); n++) { + if (path.charAt(n) == '.') { + leadingSpaces += " "; + } + } + for (String line : commentLines) { + if (!line.isEmpty()) { + line = leadingSpaces + "# " + line; + } + if (commentstring.length() > 0) { + commentstring.append(System.getProperty("line.separator")); + } + commentstring.append(line); } + comments.put(path, commentstring.toString()); + } } diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index f8fc9d2fa..aca20b5d7 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -101,6 +101,7 @@ public class ConfigManager { protected boolean CouldronCompatability; protected boolean enableDebug = false; protected boolean versionCheck = true; + protected boolean SelectionIgnoreY = false; protected boolean useVisualizer; protected List customContainers; protected List customBothClick; @@ -223,6 +224,9 @@ void UpdateConfigFile() { "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); selectionToolId = GetConfigInt("Global.SelectionToolId", Material.WOOD_AXE.getId(), writer, conf); + writer.addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); + SelectionIgnoreY = GetConfigBoolean("Global.Selection.IgnoreY", false, writer, conf); + writer.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", "Simply equip this tool and hit a location inside the residence and it will display the info for it."); infoToolId = GetConfigInt("Global.InfoToolId", Material.STRING.getId(), writer, conf); @@ -810,6 +814,10 @@ public boolean debugEnabled() { return enableDebug; } + public boolean isSelectionIgnoreY() { + return SelectionIgnoreY; + } + public boolean versionCheck() { return versionCheck; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index c17f388b8..ecfc0d391 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -1,7 +1,12 @@ package com.bekvon.bukkit.residence; +import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -12,6 +17,7 @@ public class Locale { public static String GetConfigString(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + text = text.replace("\"", "\'"); conf.addDefault(path, text); text = conf.getString(path); if (colorize) @@ -49,12 +55,26 @@ public static String Colors(String text) { public static void LoadLang(String lang) { File f = new File(Residence.instance.getDataFolder(), "Language" + File.separator + lang + ".yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + if (in == null) + return; + + YamlConfiguration conf = YamlConfiguration.loadConfiguration(in); CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); conf.options().copyDefaults(true); StringBuilder header = new StringBuilder(); - header.append("NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy"); + header.append(System.getProperty("line.separator")); + header.append("NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy"); header.append(System.getProperty("line.separator")); header.append("of this file and modify that instead. This file will be updated automatically by Residence"); header.append(System.getProperty("line.separator")); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 945955940..acdd53eb0 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -3,14 +3,17 @@ */ package com.bekvon.bukkit.residence; +import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; @@ -330,9 +333,19 @@ public void onEnable() { try { File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + if (langFile.isFile()) { FileConfiguration langconfig = new YamlConfiguration(); - langconfig.load(langFile); + langconfig.load(in); helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); HelpEntry.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); @@ -519,7 +532,7 @@ public void consoleMessage(String message) { } public static boolean validName(String name) { - if (name.contains(":") || name.contains(".")) { + if (name.contains(":") || name.contains(".") || name.contains("|")) { return false; } if (cmanager.getResidenceNameRegex() == null) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 76cc6daac..25fa5734f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -13,8 +13,6 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index b4debadad..187117630 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -522,7 +522,7 @@ public void printAreaInfo(String areaname, Player player) { + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockZ())); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsB") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase( "CoordsBottom", res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockX() + "|" + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockY() - + "." + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockZ())); + + "|" + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockZ())); } if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + Residence.getLeaseManager() diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index 3f728c6d5..819396850 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -104,7 +104,7 @@ public static void UpdateSelection(Player player) { return; } - if (area.getYSize() > group.getMaxY()) { + if (area.getYSize() > group.getMaxY() && !Residence.getConfigManager().isSelectionIgnoreY()) { return; } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 3d7cb437e..7551a1d9c 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -35,8 +35,8 @@ public class SelectionManager { public static HashMap normalIDMap = new HashMap(); public static HashMap errorIDMap = new HashMap(); - public static final int MAX_HEIGHT = 255, MIN_HEIGHT = 0; - + public static final int MIN_HEIGHT = 0; + public enum Direction { UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ } @@ -49,14 +49,28 @@ public SelectionManager(Server server) { public void placeLoc1(Player player, Location loc) { if (loc != null) { + playerLoc1.put(player.getName(), loc); + + if (Residence.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName())) { + this.qsky(player); + this.qbedrock(player); + } + this.afterSelectionUpdate(player); } } public void placeLoc2(Player player, Location loc) { if (loc != null) { + playerLoc2.put(player.getName(), loc); + + if (Residence.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName())) { + this.qsky(player); + this.qbedrock(player); + } + this.afterSelectionUpdate(player); } } @@ -499,13 +513,37 @@ public void vert(Player player, boolean resadmin) { } } + public void qsky(Player player) { + int y1 = playerLoc1.get(player.getName()).getBlockY(); + int y2 = playerLoc2.get(player.getName()).getBlockY(); + if (y1 > y2) { + int newy = player.getLocation().getWorld().getMaxHeight(); + playerLoc1.get(player.getName()).setY(newy); + } else { + int newy = player.getLocation().getWorld().getMaxHeight(); + playerLoc2.get(player.getName()).setY(newy); + } + } + + public void qbedrock(Player player) { + int y1 = playerLoc1.get(player.getName()).getBlockY(); + int y2 = playerLoc2.get(player.getName()).getBlockY(); + if (y1 < y2) { + int newy = MIN_HEIGHT; + playerLoc1.get(player.getName()).setY(newy); + } else { + int newy = MIN_HEIGHT; + playerLoc2.get(player.getName()).setY(newy); + } + } + public void sky(Player player, boolean resadmin) { if (hasPlacedBoth(player.getName())) { PermissionGroup group = Residence.getPermissionManager().getGroup(player); int y1 = playerLoc1.get(player.getName()).getBlockY(); int y2 = playerLoc2.get(player.getName()).getBlockY(); if (y1 > y2) { - int newy = MAX_HEIGHT; + int newy = player.getLocation().getWorld().getMaxHeight(); if (!resadmin) { if (group.getMaxHeight() < newy) newy = group.getMaxHeight(); @@ -514,7 +552,7 @@ public void sky(Player player, boolean resadmin) { } playerLoc1.get(player.getName()).setY(newy); } else { - int newy = MAX_HEIGHT; + int newy = player.getLocation().getWorld().getMaxHeight(); if (!resadmin) { if (group.getMaxHeight() < newy) newy = group.getMaxHeight(); @@ -571,7 +609,7 @@ public void selectChunk(Player player) { int ycoord = MIN_HEIGHT; int xmax = xcoord + 15; int zmax = zcoord + 15; - int ymax = MAX_HEIGHT; + int ymax = player.getLocation().getWorld().getMaxHeight(); playerLoc1.put(player.getName(), new Location(player.getWorld(), xcoord, ycoord, zcoord)); playerLoc2.put(player.getName(), new Location(player.getWorld(), xmax, ymax, zmax)); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); @@ -605,9 +643,9 @@ public void modify(Player player, boolean shift, int amount) { if (d == Direction.UP) { int oldy = area.getHighLoc().getBlockY(); oldy = oldy + amount; - if (oldy > MAX_HEIGHT) { + if (oldy > player.getLocation().getWorld().getMaxHeight()) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooHigh")); - oldy = MAX_HEIGHT; + oldy = player.getLocation().getWorld().getMaxHeight(); } area.getHighLoc().setY(oldy); if (shift) { @@ -700,9 +738,9 @@ public boolean contract(Player player, int amount, boolean resadmin) { case DOWN: int oldy = area.getHighLoc().getBlockY(); oldy = oldy - amount; - if (oldy > MAX_HEIGHT) { + if (oldy > player.getLocation().getWorld().getMaxHeight()) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooHigh")); - oldy = MAX_HEIGHT; + oldy = player.getLocation().getWorld().getMaxHeight(); } area.getHighLoc().setY(oldy); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.Down") + " (" + amount + ")"); diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index 90638f634..21086312a 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -9,6 +9,7 @@ import java.util.Map; import java.util.Set; import org.bukkit.configuration.file.FileConfiguration; + import org.bukkit.ChatColor; /** @@ -76,13 +77,14 @@ public String getPhrase(String[] keys, String[] words) { } sentence = ChatColor.translateAlternateColorCodes('&', sentence); + return sentence; } public static Language parseText(FileConfiguration node, String topkey) { Language newholder = new Language(); Set keys = node.getConfigurationSection(topkey).getKeys(false); - for (String key : keys) { + for (String key : keys) { newholder.text.put(key, node.getString(topkey + "." + key)); } return newholder; From 02d7c373a189de7c306bff8a604425f7b33ffe73 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 8 Oct 2015 20:14:46 +0300 Subject: [PATCH 0049/1142] Option to count residence price only by x*z --- src/com/bekvon/bukkit/residence/ConfigManager.java | 12 ++++++++++-- .../residence/protection/ClaimedResidence.java | 13 +++++++++---- .../bukkit/residence/protection/CuboidArea.java | 7 +++++-- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index aca20b5d7..47accae25 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -102,6 +102,7 @@ public class ConfigManager { protected boolean enableDebug = false; protected boolean versionCheck = true; protected boolean SelectionIgnoreY = false; + protected boolean NoCostForYBlocks = false; protected boolean useVisualizer; protected List customContainers; protected List customBothClick; @@ -226,7 +227,10 @@ void UpdateConfigFile() { writer.addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); SelectionIgnoreY = GetConfigBoolean("Global.Selection.IgnoreY", false, writer, conf); - + writer.addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", + "This will lower residence price by up to 256 times, so ajust block price BEFORE enabling this"); + NoCostForYBlocks = GetConfigBoolean("Global.Selection.NoCostForYBlocks", false, writer, conf); + writer.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", "Simply equip this tool and hit a location inside the residence and it will display the info for it."); infoToolId = GetConfigInt("Global.InfoToolId", Material.STRING.getId(), writer, conf); @@ -817,7 +821,11 @@ public boolean debugEnabled() { public boolean isSelectionIgnoreY() { return SelectionIgnoreY; } - + + public boolean isNoCostForYBlocks() { + return NoCostForYBlocks; + } + public boolean versionCheck() { return versionCheck; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e1e0d339f..3c09b2373 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -565,9 +565,14 @@ public boolean removeSubzone(Player player, String name, boolean resadmin) { public long getTotalSize() { Collection set = areas.values(); long size = 0; - for (CuboidArea entry : set) { - size = size + entry.getSize(); - } + if (!Residence.getConfigManager().isNoCostForYBlocks()) + for (CuboidArea entry : set) { + size = size + entry.getSize(); + } + else + for (CuboidArea entry : set) { + size = size + (entry.getXSize() * entry.getZSize()); + } return size; } @@ -754,7 +759,7 @@ public int isSafeTp(Player player) { if (player.getGameMode() == GameMode.CREATIVE) return 0; - + if (Residence.getNms().isSpectator(player.getGameMode())) return 0; diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index bd8291131..035996063 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -126,9 +126,12 @@ private boolean advCuboidCheckCollision(Location A1High, Location A1Low, Locatio public long getSize() { int xsize = (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; - int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; int zsize = (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; - return xsize * ysize * zsize; + if (!Residence.getConfigManager().isNoCostForYBlocks()) { + int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; + return xsize * ysize * zsize; + } else + return xsize * zsize; } public int getXSize() { From 679f8cb36726ea134148391c8472c44a40fedf52 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 8 Oct 2015 20:15:28 +0300 Subject: [PATCH 0050/1142] Version change --- src/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugin.yml b/src/plugin.yml index 6229954cb..a038a23f9 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.0.3 +version: 2.9.1.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 7901316bbd6c0de1a286a47bedc622fa0ba36867 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 9 Oct 2015 18:14:42 +0300 Subject: [PATCH 0051/1142] Moving to ConcurrentHashMap from synchronizedMap --- .../bukkit/residence/PlayerManager.java | 59 ++++++++----------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/PlayerManager.java b/src/com/bekvon/bukkit/residence/PlayerManager.java index caeec20ef..d6abc1bd8 100644 --- a/src/com/bekvon/bukkit/residence/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/PlayerManager.java @@ -1,10 +1,9 @@ package com.bekvon.bukkit.residence; import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; + import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; @@ -14,23 +13,20 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class PlayerManager { - private static Map players = Collections.synchronizedMap(new HashMap()); + private static ConcurrentHashMap players = new ConcurrentHashMap(); public static void playerJoin(OfflinePlayer player) { - synchronized (players) { - ResPlayer resPlayer = players.get(player.getName().toLowerCase()); - if (resPlayer == null) { - resPlayer = new ResPlayer(player.getName()); - resPlayer.recountRes(); - players.put(player.getName().toLowerCase(), resPlayer); - } else - resPlayer.RecalculatePermissions(); - return; - } + ResPlayer resPlayer = players.get(player.getName().toLowerCase()); + if (resPlayer == null) { + resPlayer = new ResPlayer(player.getName()); + resPlayer.recountRes(); + players.put(player.getName().toLowerCase(), resPlayer); + } else + resPlayer.RecalculatePermissions(); + return; } public static void playerJoin(String player) { - ResPlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer == null) { resPlayer = new ResPlayer(player); @@ -55,33 +51,30 @@ public void run() { } public static ArrayList getResidenceList(String player) { - synchronized (players) { - ArrayList temp = new ArrayList(); - playerJoin(player); - ResPlayer resPlayer = players.get(player.toLowerCase()); - if (resPlayer != null) { - for (Entry one : resPlayer.getResList().entrySet()) { - temp.add(one.getKey()); - } - return temp; + ArrayList temp = new ArrayList(); + playerJoin(player); + ResPlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer != null) { + for (Entry one : resPlayer.getResList().entrySet()) { + temp.add(one.getKey()); } return temp; } + return temp; } public static ArrayList getResidenceListString(String player) { - synchronized (players) { - ArrayList temp = new ArrayList(); - playerJoin(player); - ResPlayer resPlayer = players.get(player.toLowerCase()); - if (resPlayer != null) { - for (Entry one : resPlayer.getResList().entrySet()) { - temp.add(Residence.getLanguage().getPhrase("ResidenceList", "|" + one.getKey() + "|" + Residence.getLanguage().getPhrase("World") + "|" + one.getValue())); - } - return temp; + ArrayList temp = new ArrayList(); + playerJoin(player); + ResPlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer != null) { + for (Entry one : resPlayer.getResList().entrySet()) { + temp.add(Residence.getLanguage().getPhrase("ResidenceList", "|" + one.getKey() + "|" + Residence.getLanguage().getPhrase("World") + "|" + one + .getValue())); } return temp; } + return temp; } public static PermissionGroup getGroup(String player) { From cfdd9da1530ee653f7ecda8da332584d6007dd62 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 12 Oct 2015 15:22:53 +0300 Subject: [PATCH 0052/1142] Residence chat upgrade/ fix for gathering player's uuid on startup --- .../bukkit/residence/ConfigManager.java | 8 + src/com/bekvon/bukkit/residence/Locale.java | 14 +- .../bekvon/bukkit/residence/Residence.java | 14 +- .../residence/ResidenceCommandListener.java | 178 +++++++++++++++--- .../bukkit/residence/chat/ChatChannel.java | 81 ++++---- .../bukkit/residence/chat/ChatManager.java | 11 +- .../residence/event/ResidenceChatEvent.java | 63 ++++--- .../listeners/ResidencePlayerListener.java | 62 +++--- .../protection/ClaimedResidence.java | 30 +++ .../residence/protection/FlagPermissions.java | 2 + src/flags.yml | 1 + src/plugin.yml | 4 +- 12 files changed, 335 insertions(+), 133 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 47accae25..c3e2d3a21 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -52,6 +52,7 @@ public class ConfigManager { protected boolean enableRentSystem; protected boolean leaseAutoRenew; protected int rentCheckInterval; + protected int chatPrefixLength; protected int leaseCheckInterval; protected int autoSaveInt; protected int FlowLevel; @@ -353,6 +354,9 @@ void UpdateConfigFile() { chatColor = ChatColor.DARK_PURPLE; } + writer.addComment("Global.ResidenceChatPrefixLenght", "Max lenght of residence chat prefix including color codes"); + chatPrefixLength = GetConfigInt("Global.ResidenceChatPrefixLength", 16, writer, conf); + writer.addComment("Global.AdminOnlyCommands", "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); adminsOnly = GetConfigBoolean("Global.AdminOnlyCommands", false, writer, conf); @@ -690,6 +694,10 @@ public int getRentCheckInterval() { return rentCheckInterval; } + public int getChatPrefixLength() { + return chatPrefixLength; + } + public int getLeaseCheckInterval() { return leaseCheckInterval; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index ecfc0d391..cdbe9ef54 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -95,8 +95,7 @@ public static void LoadLang(String lang) { writer, conf, true); GetConfigString("Language.InvalidResidence", "Invalid Residence...", writer, conf, true); GetConfigString("Language.InvalidSubzone", "Invalid Subzone...", writer, conf, true); - GetConfigString("Language.InvalidDirection", "Invalid Direction...", writer, conf, true); - GetConfigString("Language.InvalidChannel", "Invalid Channel...", writer, conf, true); + GetConfigString("Language.InvalidDirection", "Invalid Direction...", writer, conf, true); GetConfigString("Language.InvalidAmount", "Invalid Amount...", writer, conf, true); GetConfigString("Language.InvalidCost", "Invalid Cost...", writer, conf, true); GetConfigString("Language.InvalidDays", "Invalid number of days...", writer, conf, true); @@ -258,6 +257,8 @@ public static void LoadLang(String lang) { GetConfigString("Language.FlagSetDeny", "Owner does not have access to flag %1", writer, conf, true); GetConfigString("Language.SelectPoint", "Placed %1 Selection Point", writer, conf, true); GetConfigString("Language.ResidenceChat", "Residence chat toggled %1", writer, conf, true); + GetConfigString("Language.ChatChannelChange", "Changed residence chat chanel to %1", writer, conf, true); + GetConfigString("Language.ChatChannelLeave", "Left residence chat", writer, conf, true); GetConfigString("Language.ResidenceMoveDeny", "You dont have movement permission for Residence %1", writer, conf, true); GetConfigString("Language.ResidenceFlagDeny", "You dont have %1 permission for Residence %2", writer, conf, true); GetConfigString("Language.TeleportDeny", "You dont have teleport access.", writer, conf, true); @@ -388,6 +389,15 @@ public static void LoadLang(String lang) { GetConfigString("Language.AutoSelection.Enabled", "&eAuto selection mode turned ON. To disable it write /res select auto", writer, conf, true); GetConfigString("Language.AutoSelection.Disabled", "&eAuto selection mode turned OFF. To enable it again write /res select auto", writer, conf, true); + GetConfigString("Language.Chat.JoinFirst", "&4Join residence chat channel first...", writer, conf, true); + GetConfigString("Language.Chat.InvalidChannel", "&4Invalid Channel...", writer, conf, true); + GetConfigString("Language.Chat.InvalidColor", "&4Incorrect color code", writer, conf, true); + GetConfigString("Language.Chat.NotInChannel", "&4Player is not in channel", writer, conf, true); + GetConfigString("Language.Chat.Kicked", "&6%1 &ewas kicked from &6%2 &echannel", writer, conf, true); + GetConfigString("Language.Chat.InvalidPrefixLength", "&4Prefix is to long. Allowed length: %1", writer, conf, true); + GetConfigString("Language.Chat.ChangedColor", "&eResidence chat channel color changed to %1", writer, conf, true); + GetConfigString("Language.Chat.ChangedPrefix", "&eResidence chat channel prefix changed to %1", writer, conf, true); + writer.addComment("CommandHelp", ""); GetConfigString("CommandHelp.Description", "Contains Help for Residence", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index acdd53eb0..061c2de64 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -333,7 +333,7 @@ public void onEnable() { try { File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); - + BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); @@ -342,7 +342,7 @@ public void onEnable() { } catch (FileNotFoundException e1) { e1.printStackTrace(); } - + if (langFile.isFile()) { FileConfiguration langconfig = new YamlConfiguration(); langconfig.load(in); @@ -1111,7 +1111,15 @@ public static UUID getPlayerUUID(String playername) { if (p == null) { if (UUIDList.size() == 0) { for (OfflinePlayer player : Residence.getServ().getOfflinePlayers()) { - UUIDList.put(player.getName().toLowerCase(), player.getUniqueId()); + if (player == null) + continue; + String name = player.getName(); + if (name == null) + continue; + UUID uuid = player.getUniqueId(); + if (uuid == null) + continue; + UUIDList.put(name.toLowerCase(), player.getUniqueId()); } } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 3b56cb12a..7efd73300 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -97,34 +97,164 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } return false; } else if (command.getName().equals("rc")) { - if (sender instanceof Player) { - Player player = (Player) sender; - String pname = player.getName(); - if (cmanager.chatEnabled()) { - if (args.length == 0) { - plistener.tooglePlayerResidenceChat(player); - } else { - String area = plistener.getCurrentResidenceName(pname); - if (area != null) { - ChatChannel channel = chatmanager.getChannel(area); - if (channel != null) { - String message = ""; - for (String arg : args) { - message = message + " " + arg; - } - channel.chat(pname, message); - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidChannel")); - } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + if (!(sender instanceof Player)) + return true; + + Player player = (Player) sender; + String pname = player.getName(); + + if (cmanager.chatEnabled()) { + + if (args.length == 0) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + return true; + } + if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !gmanager.isResidenceAdmin(player)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "chat|" + res.getName())); + return false; + } + + plistener.tooglePlayerResidenceChat(player, res.getName()); + Residence.getChatManager().setChannel(pname, res); + return true; + } else if (args.length == 1) { + + if (args[0].equalsIgnoreCase("l")) { + Residence.getChatManager().removeFromChannel(pname); + plistener.removePlayerResidenceChat(player); + return true; + } + + ClaimedResidence res = Residence.getResidenceManager().getByName(args[0]); + if (res == null) { + player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.InvalidChannel")); + return true; + } + + if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !gmanager.isResidenceAdmin(player)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "chat|" + res.getName())); + return false; + } + plistener.tooglePlayerResidenceChat(player, res.getName()); + Residence.getChatManager().setChannel(pname, res); + + return true; + } else if (args.length == 2) { + if (args[0].equalsIgnoreCase("setcolor")) { + + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + + if (chat == null) { + player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.JoinFirst")); + return true; } + + ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); + + if (res == null) + return false; + + if (!res.getOwner().equals(player.getName()) && !gmanager.isResidenceAdmin(player)) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + + if (!player.hasPermission("residence.chatcolor")) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + + String posibleColor = args[1]; + + if (!posibleColor.contains("&")) + posibleColor = "&" + posibleColor; + + if (posibleColor.length() != 2 || ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', posibleColor)).length() != 0) { + player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.InvalidColor")); + return true; + } + + ChatColor color = ChatColor.getByChar(posibleColor.replace("&", "")); + res.setChannelColor(color); + chat.setChannelColor(color); + player.sendMessage(ChatColor.GOLD + NewLanguage.getMessage("Language.Chat.ChangedColor").replace("%1", color.name())); + return true; + } else if (args[0].equalsIgnoreCase("setprefix")) { + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + + if (chat == null) { + player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.JoinFirst")); + return true; + } + + ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); + + if (res == null) + return false; + + if (!res.getOwner().equals(player.getName()) && !gmanager.isResidenceAdmin(player)) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + + if (!player.hasPermission("residence.chatprefix")) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + + String prefix = args[1]; + + if (prefix.length() > Residence.getConfigManager().getChatPrefixLength()) { + player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.InvalidPrefixLength").replace("%1", String.valueOf(Residence + .getConfigManager().getChatPrefixLength()))); + return true; + } + + res.setChatPrefix(prefix); + chat.setChatPrefix(prefix); + player.sendMessage(ChatColor.GOLD + NewLanguage.getMessage("Language.Chat.ChangedPrefix").replace("%1", ChatColor.translateAlternateColorCodes( + '&', prefix))); + return true; + } else if (args[0].equalsIgnoreCase("kick")) { + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + + if (chat == null) { + player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.JoinFirst")); + return true; + } + + ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); + + if (res == null) + return false; + + if (!res.getOwner().equals(player.getName()) && !gmanager.isResidenceAdmin(player)) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + + if (!player.hasPermission("residence.chatkick")) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + + String targetName = args[1]; + if (!chat.hasMember(targetName)) { + player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.NotInChannel")); + return false; + } + + chat.leave(targetName); + plistener.removePlayerResidenceChat(targetName); + player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.Kicked").replace("%1", targetName).replace("%2", chat.getChannelName())); + return true; } - } else { - player.sendMessage(ChatColor.RED + language.getPhrase("ChatDisabled")); } + } else { + player.sendMessage(ChatColor.RED + language.getPhrase("ChatDisabled")); } - return true; } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { boolean resadmin = false; if (sender instanceof Player) { diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index 55e035371..0fce062f7 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -9,6 +9,8 @@ import com.bekvon.bukkit.residence.event.ResidenceChatEvent; import java.util.ArrayList; import java.util.List; + +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Server; import org.bukkit.entity.Player; @@ -19,50 +21,59 @@ */ public class ChatChannel { - protected String name; + protected String channelName; protected List members; + protected String ChatPrefix = ""; + protected ChatColor ChannelColor = ChatColor.WHITE; - public ChatChannel(String channelName) - { - name = channelName; - members = new ArrayList(); + public ChatChannel(String channelName, String ChatPrefix, ChatColor chatColor) { + this.channelName = channelName; + this.ChatPrefix = ChatPrefix; + this.ChannelColor = chatColor; + members = new ArrayList(); } - public void chat(String sourcePlayer, String message) - { - Server serv = Residence.getServ(); - ChatColor color = Residence.getConfigManager().getChatColor(); - ResidenceChatEvent cevent = new ResidenceChatEvent(Residence.getResidenceManager().getByName(name),serv.getPlayer(sourcePlayer),message,color); - Residence.getServ().getPluginManager().callEvent(cevent); - if(cevent.isCancelled()) - return; - for(String member : members) - { - Player player = serv.getPlayer(member); - if(player!=null) - player.sendMessage(cevent.getColor() + sourcePlayer + ": " + cevent.getChatMessage()); - } - System.out.println("ResidentialChat[" + name + "] - " + sourcePlayer + ": " + cevent.getChatMessage()); + public String getChannelName() { + return channelName; } - - public void join(String player) - { - if(!members.contains(player)) - members.add(player); + + public void setChatPrefix(String ChatPrefix) { + this.ChatPrefix = ChatPrefix; } - - public void leave(String player) - { - members.remove(player); + + public void setChannelColor(ChatColor ChannelColor) { + this.ChannelColor = ChannelColor; + } + + public void chat(String sourcePlayer, String message) { + Server serv = Residence.getServ(); + ResidenceChatEvent cevent = new ResidenceChatEvent(Residence.getResidenceManager().getByName(channelName), serv.getPlayer(sourcePlayer), this.ChatPrefix, message, + this.ChannelColor); + Residence.getServ().getPluginManager().callEvent(cevent); + if (cevent.isCancelled()) + return; + for (String member : members) { + Player player = serv.getPlayer(member); + if (player != null) + player.sendMessage(cevent.getChatprefix() + " " + Residence.getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent.getChatMessage()); + } + Bukkit.getConsoleSender().sendMessage("ResidentialChat[" + channelName + "] - " + sourcePlayer + ": " + ChatColor.stripColor(cevent.getChatMessage())); + } + + public void join(String player) { + if (!members.contains(player)) + members.add(player); + } + + public void leave(String player) { + members.remove(player); } - public boolean hasMember(String player) - { - return members.contains(player); + public boolean hasMember(String player) { + return members.contains(player); } - public int memberCount() - { - return members.size(); + public int memberCount() { + return members.size(); } } diff --git a/src/com/bekvon/bukkit/residence/chat/ChatManager.java b/src/com/bekvon/bukkit/residence/chat/ChatManager.java index 915cba4a8..52079a9ae 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatManager.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatManager.java @@ -6,6 +6,8 @@ package com.bekvon.bukkit.residence.chat; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + import java.util.HashMap; import java.util.Map; import org.bukkit.Server; @@ -24,16 +26,17 @@ public ChatManager() { channelmap = new HashMap(); } - public void setChannel(String player, String channel) { + public void setChannel(String player, ClaimedResidence res) { this.removeFromChannel(player); - if (!channelmap.containsKey(channel)) - channelmap.put(channel, new ChatChannel(channel)); - channelmap.get(channel).join(player); + if (!channelmap.containsKey(res.getName())) + channelmap.put(res.getName(), new ChatChannel(res.getName(), res.getChatPrefix(), res.getChannelColor())); + channelmap.get(res.getName()).join(player); } public void removeFromChannel(String player) { for (ChatChannel chan : channelmap.values()) { if (chan.hasMember(player)) { + Residence.getPlayerListener().removePlayerResidenceChat(player); chan.leave(player); break; } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java index c741125f1..5f59829f8 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java @@ -16,41 +16,48 @@ public class ResidenceChatEvent extends CancellableResidencePlayerEvent { private static final HandlerList handlers = new HandlerList(); + @Override public HandlerList getHandlers() { - return handlers; + return handlers; } public static HandlerList getHandlerList() { - return handlers; + return handlers; } protected String message; - ChatColor color; - - public ResidenceChatEvent(ClaimedResidence resref, Player player, String message, ChatColor color) { - super("RESIDENCE_CHAT_EVENT", resref, player); - this.message = message; - this.color = color; - } - - public String getChatMessage() - { - return message; - } - - public void setChatMessage(String newmessage) - { - message = newmessage; - } - - public ChatColor getColor() - { - return color; - } - - public void setColor(ChatColor c) - { - color = c; + ChatColor color = ChatColor.WHITE; + private String prefix = ""; + + public ResidenceChatEvent(ClaimedResidence resref, Player player, String prefix, String message, ChatColor color) { + super("RESIDENCE_CHAT_EVENT", resref, player); + this.message = message; + this.prefix = prefix; + this.color = color; + } + + public String getChatMessage() { + return message; + } + + public String getChatprefix() { + return ChatColor.translateAlternateColorCodes('&', prefix); + } + + public void setChatprefix(String prefix) { + this.prefix = prefix; + } + + public void setChatMessage(String newmessage) { + message = newmessage; + } + + public ChatColor getColor() { + return color; + } + + public void setColor(ChatColor c) { + color = c; } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index fdcafa6cd..453b405d3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -72,7 +72,7 @@ public class ResidencePlayerListener implements Listener { protected Map lastOutsideLoc; protected int minUpdateTime; protected boolean chatenabled; - protected List playerToggleChat; + protected List playerToggleChat = new ArrayList(); public static Map GUI = new HashMap(); @@ -80,7 +80,7 @@ public ResidencePlayerListener() { currentRes = new HashMap(); lastUpdate = new HashMap(); lastOutsideLoc = new HashMap(); - playerToggleChat = new ArrayList(); + playerToggleChat.clear(); minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); chatenabled = Residence.getConfigManager().chatEnabled(); for (Player player : Bukkit.getServer().getOnlinePlayers()) { @@ -92,7 +92,7 @@ public void reload() { currentRes = new HashMap(); lastUpdate = new HashMap(); lastOutsideLoc = new HashMap(); - playerToggleChat = new ArrayList(); + playerToggleChat.clear(); minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); chatenabled = Residence.getConfigManager().chatEnabled(); for (Player player : Bukkit.getServer().getOnlinePlayers()) { @@ -791,7 +791,6 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { } } } - //handleNewLocation(player, loc, false); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -885,7 +884,6 @@ public void run() { } } currentRes.remove(pname); - Residence.getChatManager().removeFromChannel(pname); } return; } @@ -947,14 +945,8 @@ else if (res.getPermissions().has("night", false)) lastOutsideLoc.put(pname, loc); - boolean chatchange = false; - if (!currentRes.containsKey(pname) || ResOld != res) - - { + if (!currentRes.containsKey(pname) || ResOld != res) { currentRes.put(pname, areaname); - if (subzone == null) { - chatchange = true; - } // "from" residence for ResidenceChangedEvent ClaimedResidence chgFrom = null; @@ -1006,12 +998,6 @@ else if (res.getPermissions().has("night", false)) } } } - if (chatchange && chatenabled) - - { - Residence.getChatManager().setChannel(pname, areaname); - } - } public String insertMessages(Player player, String areaname, ClaimedResidence res, String message) { @@ -1080,27 +1066,33 @@ public void DespawnMobs() { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerChat(AsyncPlayerChatEvent event) { String pname = event.getPlayer().getName(); - if (chatenabled && playerToggleChat.contains(pname)) { - String area = currentRes.get(pname); - if (area != null) { - ChatChannel channel = Residence.getChatManager().getChannel(area); - if (channel != null) { - channel.chat(pname, event.getMessage()); - } - event.setCancelled(true); - } + if (!chatenabled || !playerToggleChat.contains(pname)) + return; + + ChatChannel channel = Residence.getChatManager().getPlayerChannel(pname); + if (channel != null) { + channel.chat(pname, event.getMessage()); } + event.setCancelled(true); } - public void tooglePlayerResidenceChat(Player player) { + public void tooglePlayerResidenceChat(Player player, String residence) { String pname = player.getName(); - if (playerToggleChat.contains(pname)) { - playerToggleChat.remove(pname); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "OFF" + ChatColor.YELLOW + "!")); - } else { - playerToggleChat.add(pname); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ResidenceChat", ChatColor.RED + "ON" + ChatColor.YELLOW + "!")); - } + playerToggleChat.add(pname); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ChatChannelChange", ChatColor.RED + residence + ChatColor.YELLOW + "!")); + } + + public void removePlayerResidenceChat(String pname) { + playerToggleChat.remove(pname); + Player player = Bukkit.getPlayer(pname); + if (player != null) + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ChatChannelLeave")); + } + + public void removePlayerResidenceChat(Player player) { + String pname = player.getName(); + playerToggleChat.remove(pname); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ChatChannelLeave")); } public String getCurrentResidenceName(String player) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 3c09b2373..54e70d5d1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -46,6 +46,8 @@ public class ClaimedResidence { protected Location tpLoc; protected String enterMessage; protected String leaveMessage; + protected String ChatPrefix = ""; + protected ChatColor ChannelColor = ChatColor.WHITE; protected ResidenceItemList ignorelist; protected ResidenceItemList blacklist; @@ -916,6 +918,8 @@ public Map save() { root.put("LeaveMessage", leaveMessage); root.put("StoredMoney", bank.getStoredMoney()); root.put("BlockSellPrice", BlockSellPrice); + root.put("ChatPrefix", ChatPrefix); + root.put("ChannelColor", ChannelColor.name()); root.put("BlackList", blacklist.save()); root.put("IgnoreList", ignorelist.save()); for (Entry entry : areas.entrySet()) { @@ -984,6 +988,16 @@ public static ClaimedResidence load(Map root, ClaimedResidence p if (tploc != null) { res.tpLoc = new Location(world, (Integer) tploc.get("X"), (Integer) tploc.get("Y"), (Integer) tploc.get("Z")); } + + if (root.containsKey("ChatPrefix")) + res.ChatPrefix = (String) root.get("ChatPrefix"); + + if (root.containsKey("ChannelColor")) + res.ChannelColor = ChatColor.valueOf((String) root.get("ChannelColor")); + else { + res.ChannelColor = Residence.getConfigManager().getChatColor(); + } + return res; } @@ -1082,6 +1096,22 @@ public String getOwner() { return perms.getOwner(); } + public void setChatPrefix(String ChatPrefix) { + this.ChatPrefix = ChatPrefix; + } + + public String getChatPrefix() { + return this.ChatPrefix == null ? "" : this.ChatPrefix; + } + + public void setChannelColor(ChatColor ChannelColor) { + this.ChannelColor = ChannelColor; + } + + public ChatColor getChannelColor() { + return ChannelColor; + } + public UUID getOwnerUUID() { return perms.getOwnerUUID(); } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index c065f34dc..6ac2a327b 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -150,6 +150,8 @@ public static void initValidFlags() { addFlag("nofly"); addFlag("command"); + + addFlag("chat"); addResidenceOnlyFlag("trample"); addResidenceOnlyFlag("pvp"); diff --git a/src/flags.yml b/src/flags.yml index e745c50e5..07b7cb4b7 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -60,6 +60,7 @@ Global: command: false day: true night: true + chat: true # These are default flags applied to all residences from any user group. ResidenceDefault: build: false diff --git a/src/plugin.yml b/src/plugin.yml index a038a23f9..d81308ce1 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.1.0 +version: 2.9.2.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -24,7 +24,7 @@ commands: usage: §c/resload rc: description: §cChat in current residence channel. - usage: §c/rc to toggle, or /rc + usage: §c/rc §eto toggle, §c/rc l §eto leave, §c/rc setprefix §eto set prefix, §c/rc setcolor §eto set color or §c/rc kick §eto kick player resworld: description: §cRemoves every residence in a world. usage: §c/resworld remove [world] From 9c651883979a8d0500781911aa78e72484126552 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 12 Oct 2015 15:46:51 +0300 Subject: [PATCH 0053/1142] Fix for residence chat showing unesesary message --- src/com/bekvon/bukkit/residence/Locale.java | 7 ++++--- src/com/bekvon/bukkit/residence/chat/ChatManager.java | 1 - .../residence/listeners/ResidencePlayerListener.java | 10 +++++++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index cdbe9ef54..7d05290b7 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -256,9 +256,6 @@ public static void LoadLang(String lang) { GetConfigString("Language.FlagDeny", "You dont have %1 permission here.", writer, conf, true); GetConfigString("Language.FlagSetDeny", "Owner does not have access to flag %1", writer, conf, true); GetConfigString("Language.SelectPoint", "Placed %1 Selection Point", writer, conf, true); - GetConfigString("Language.ResidenceChat", "Residence chat toggled %1", writer, conf, true); - GetConfigString("Language.ChatChannelChange", "Changed residence chat chanel to %1", writer, conf, true); - GetConfigString("Language.ChatChannelLeave", "Left residence chat", writer, conf, true); GetConfigString("Language.ResidenceMoveDeny", "You dont have movement permission for Residence %1", writer, conf, true); GetConfigString("Language.ResidenceFlagDeny", "You dont have %1 permission for Residence %2", writer, conf, true); GetConfigString("Language.TeleportDeny", "You dont have teleport access.", writer, conf, true); @@ -389,6 +386,9 @@ public static void LoadLang(String lang) { GetConfigString("Language.AutoSelection.Enabled", "&eAuto selection mode turned ON. To disable it write /res select auto", writer, conf, true); GetConfigString("Language.AutoSelection.Disabled", "&eAuto selection mode turned OFF. To enable it again write /res select auto", writer, conf, true); + GetConfigString("Language.Chat.ChatChannelChange", "Changed residence chat channel to %1", writer, conf, true); + GetConfigString("Language.Chat.ChatChannelLeave", "Left residence chat", writer, conf, true); + GetConfigString("Language.Chat.JoinFirst", "&4Join residence chat channel first...", writer, conf, true); GetConfigString("Language.Chat.InvalidChannel", "&4Invalid Channel...", writer, conf, true); GetConfigString("Language.Chat.InvalidColor", "&4Incorrect color code", writer, conf, true); @@ -397,6 +397,7 @@ public static void LoadLang(String lang) { GetConfigString("Language.Chat.InvalidPrefixLength", "&4Prefix is to long. Allowed length: %1", writer, conf, true); GetConfigString("Language.Chat.ChangedColor", "&eResidence chat channel color changed to %1", writer, conf, true); GetConfigString("Language.Chat.ChangedPrefix", "&eResidence chat channel prefix changed to %1", writer, conf, true); + writer.addComment("CommandHelp", ""); diff --git a/src/com/bekvon/bukkit/residence/chat/ChatManager.java b/src/com/bekvon/bukkit/residence/chat/ChatManager.java index 52079a9ae..ee3498d44 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatManager.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatManager.java @@ -36,7 +36,6 @@ public void setChannel(String player, ClaimedResidence res) { public void removeFromChannel(String player) { for (ChatChannel chan : channelmap.values()) { if (chan.hasMember(player)) { - Residence.getPlayerListener().removePlayerResidenceChat(player); chan.leave(player); break; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 453b405d3..3671c425e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -47,6 +47,8 @@ import org.bukkit.event.player.PlayerShearEntityEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; + +import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.PlayerManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; @@ -319,6 +321,7 @@ public void onPlayerQuit(PlayerQuitEvent event) { lastUpdate.remove(pname); lastOutsideLoc.remove(pname); Residence.getChatManager().removeFromChannel(pname); + Residence.getPlayerListener().removePlayerResidenceChat(pname); Residence.UUIDList.put(pname, event.getPlayer().getUniqueId()); @@ -1079,20 +1082,21 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { public void tooglePlayerResidenceChat(Player player, String residence) { String pname = player.getName(); playerToggleChat.add(pname); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ChatChannelChange", ChatColor.RED + residence + ChatColor.YELLOW + "!")); + player.sendMessage(ChatColor.YELLOW + NewLanguage.getMessage("Language.Chat.ChatChannelChange").replace("%1", ChatColor.RED + residence + ChatColor.YELLOW + + "!")); } public void removePlayerResidenceChat(String pname) { playerToggleChat.remove(pname); Player player = Bukkit.getPlayer(pname); if (player != null) - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ChatChannelLeave")); + player.sendMessage(ChatColor.YELLOW + NewLanguage.getMessage("Language.Chat.ChatChannelLeave")); } public void removePlayerResidenceChat(Player player) { String pname = player.getName(); playerToggleChat.remove(pname); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ChatChannelLeave")); + player.sendMessage(ChatColor.YELLOW + NewLanguage.getMessage("Language.Chat.ChatChannelLeave")); } public String getCurrentResidenceName(String player) { From fc5ee301f95ba398ba7630056c5e9730fe2a28d3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 12 Oct 2015 15:53:56 +0300 Subject: [PATCH 0054/1142] Added basic permissions for residence chat --- src/plugin.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/plugin.yml b/src/plugin.yml index d81308ce1..61a5f47f3 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -59,3 +59,12 @@ permissions: residence.select.auto.others: description: Allows to turn on auto selection for other players default: op + residence.chatcolor: + description: Allows to change residence chat color + default: true + residence.chatprefix: + description: Allows to change residence chat prefix + default: op + residence.chatkick: + description: Allows to kick players from residence chat + default: true From 4b875dac3eb7462112ee43e9d8ca103c405e032c Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 12 Oct 2015 16:01:47 +0300 Subject: [PATCH 0055/1142] Added separate permission to protect crucial commands --- src/com/bekvon/bukkit/residence/ResidenceCommandListener.java | 4 ++-- src/plugin.yml | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 7efd73300..17d4efd36 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -49,7 +49,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (command.getName().equals("resreload") && args.length == 0) { if (sender instanceof Player) { Player player = (Player) sender; - if (Residence.getPermissionManager().isResidenceAdmin(player)) { + if (Residence.getPermissionManager().isResidenceAdmin(player) && player.hasPermission("residence.topadmin")) { this.reloadPlugin(); sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); System.out.println("[Residence] Reloaded by " + player.getName() + "."); @@ -74,7 +74,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } if (command.getName().equals("resload")) { - if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender)) { + if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender) && ((Player) sender).hasPermission("residence.topadmin")) { try { this.loadYml(); sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); diff --git a/src/plugin.yml b/src/plugin.yml index 61a5f47f3..014623bca 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -35,6 +35,9 @@ permissions: residence.admin: description: Gives you access to /resadmin default: op + residence.Topadmin: + description: Gives you access to /resreload and resload commands + default: op residence.admin.tp: description: Allows to override tp flag default: op From 0afdedb41320219cc9c68054d10f5e2cdf9c4ef7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 14 Oct 2015 12:27:19 +0300 Subject: [PATCH 0056/1142] Option to leave residence chat with /rc --- .../residence/ResidenceCommandListener.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 17d4efd36..5133ad38f 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -74,7 +74,8 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } if (command.getName().equals("resload")) { - if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender) && ((Player) sender).hasPermission("residence.topadmin")) { + if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender) && ((Player) sender).hasPermission( + "residence.topadmin")) { try { this.loadYml(); sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); @@ -99,17 +100,27 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } else if (command.getName().equals("rc")) { if (!(sender instanceof Player)) return true; - Player player = (Player) sender; String pname = player.getName(); - if (cmanager.chatEnabled()) { - if (args.length == 0) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + if (chat != null) { + Residence.getChatManager().removeFromChannel(pname); + plistener.removePlayerResidenceChat(player); + return true; + } player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); return true; + } else { + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + if (chat != null && chat.getChannelName().equals(res.getName())) { + Residence.getChatManager().removeFromChannel(pname); + plistener.removePlayerResidenceChat(player); + return true; + } } if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !gmanager.isResidenceAdmin(player)) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "chat|" + res.getName())); @@ -120,13 +131,11 @@ public boolean onCommand(CommandSender sender, Command command, String label, St Residence.getChatManager().setChannel(pname, res); return true; } else if (args.length == 1) { - if (args[0].equalsIgnoreCase("l")) { Residence.getChatManager().removeFromChannel(pname); plistener.removePlayerResidenceChat(player); return true; } - ClaimedResidence res = Residence.getResidenceManager().getByName(args[0]); if (res == null) { player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.InvalidChannel")); From 08156ec80a44c71e9ce25ba0139e6448210a8c8f Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 14 Oct 2015 12:31:49 +0300 Subject: [PATCH 0057/1142] Fix for max world height being to high by 1 block --- .../listeners/ResidencePlayerListener.java | 2 +- .../residence/selection/SelectionManager.java | 23 ++++++++----------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3671c425e..027375191 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -915,7 +915,7 @@ public void run() { location.setPitch(lc.getPitch()); location.setYaw(lc.getYaw()); int from = location.getBlockY(); - int maxH = location.getWorld().getMaxHeight(); + int maxH = location.getWorld().getMaxHeight() - 1; for (int i = 0; i < maxH; i++) { location.setY(from - i); Block block = location.getBlock(); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 7551a1d9c..65ea441fe 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -36,7 +36,7 @@ public class SelectionManager { public static HashMap errorIDMap = new HashMap(); public static final int MIN_HEIGHT = 0; - + public enum Direction { UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ } @@ -516,13 +516,11 @@ public void vert(Player player, boolean resadmin) { public void qsky(Player player) { int y1 = playerLoc1.get(player.getName()).getBlockY(); int y2 = playerLoc2.get(player.getName()).getBlockY(); - if (y1 > y2) { - int newy = player.getLocation().getWorld().getMaxHeight(); + int newy = player.getLocation().getWorld().getMaxHeight() - 1; + if (y1 > y2) playerLoc1.get(player.getName()).setY(newy); - } else { - int newy = player.getLocation().getWorld().getMaxHeight(); + else playerLoc2.get(player.getName()).setY(newy); - } } public void qbedrock(Player player) { @@ -542,8 +540,8 @@ public void sky(Player player, boolean resadmin) { PermissionGroup group = Residence.getPermissionManager().getGroup(player); int y1 = playerLoc1.get(player.getName()).getBlockY(); int y2 = playerLoc2.get(player.getName()).getBlockY(); + int newy = player.getLocation().getWorld().getMaxHeight() - 1; if (y1 > y2) { - int newy = player.getLocation().getWorld().getMaxHeight(); if (!resadmin) { if (group.getMaxHeight() < newy) newy = group.getMaxHeight(); @@ -552,7 +550,6 @@ public void sky(Player player, boolean resadmin) { } playerLoc1.get(player.getName()).setY(newy); } else { - int newy = player.getLocation().getWorld().getMaxHeight(); if (!resadmin) { if (group.getMaxHeight() < newy) newy = group.getMaxHeight(); @@ -609,7 +606,7 @@ public void selectChunk(Player player) { int ycoord = MIN_HEIGHT; int xmax = xcoord + 15; int zmax = zcoord + 15; - int ymax = player.getLocation().getWorld().getMaxHeight(); + int ymax = player.getLocation().getWorld().getMaxHeight() - 1; playerLoc1.put(player.getName(), new Location(player.getWorld(), xcoord, ycoord, zcoord)); playerLoc2.put(player.getName(), new Location(player.getWorld(), xmax, ymax, zmax)); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); @@ -643,9 +640,9 @@ public void modify(Player player, boolean shift, int amount) { if (d == Direction.UP) { int oldy = area.getHighLoc().getBlockY(); oldy = oldy + amount; - if (oldy > player.getLocation().getWorld().getMaxHeight()) { + if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooHigh")); - oldy = player.getLocation().getWorld().getMaxHeight(); + oldy = player.getLocation().getWorld().getMaxHeight() - 1; } area.getHighLoc().setY(oldy); if (shift) { @@ -738,9 +735,9 @@ public boolean contract(Player player, int amount, boolean resadmin) { case DOWN: int oldy = area.getHighLoc().getBlockY(); oldy = oldy - amount; - if (oldy > player.getLocation().getWorld().getMaxHeight()) { + if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooHigh")); - oldy = player.getLocation().getWorld().getMaxHeight(); + oldy = player.getLocation().getWorld().getMaxHeight() - 1; } area.getHighLoc().setY(oldy); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.Down") + " (" + amount + ")"); From dbc5b55c343c75992c88f0ba035f8555f1dfdf11 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 14 Oct 2015 17:57:48 +0300 Subject: [PATCH 0058/1142] Added custom flag icons/ fixed WE selection interference --- .../bekvon/bukkit/residence/Residence.java | 3 + .../bekvon/bukkit/residence/gui/FlagData.java | 29 ++++ .../bekvon/bukkit/residence/gui/FlagUtil.java | 50 ++++++ .../bekvon/bukkit/residence/gui/SetFlag.java | 74 +++++---- .../residence/selection/SelectionManager.java | 8 +- .../selection/WorldEditSelectionManager.java | 17 +- src/flags.yml | 155 ++++++++++++++++++ 7 files changed, 293 insertions(+), 43 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/gui/FlagData.java create mode 100644 src/com/bekvon/bukkit/residence/gui/FlagUtil.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 061c2de64..9f64982fe 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -47,6 +47,7 @@ import com.bekvon.bukkit.residence.economy.RealShopEconomy; import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.economy.rent.RentManager; +import com.bekvon.bukkit.residence.gui.FlagUtil; import com.bekvon.bukkit.residence.itemlist.WorldItemManager; import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; @@ -271,6 +272,8 @@ public void onEnable() { } } + FlagUtil.load(); + String packageName = getServer().getClass().getPackage().getName(); String[] packageSplit = packageName.split("\\."); String version = packageSplit[packageSplit.length - 1].split("(?<=\\G.{4})")[0]; diff --git a/src/com/bekvon/bukkit/residence/gui/FlagData.java b/src/com/bekvon/bukkit/residence/gui/FlagData.java new file mode 100644 index 000000000..1a5389e70 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/gui/FlagData.java @@ -0,0 +1,29 @@ +package com.bekvon.bukkit.residence.gui; + +import java.util.HashMap; +import org.bukkit.inventory.ItemStack; + +public class FlagData { + + private HashMap items = new HashMap(); + + public FlagData() { + } + + public void addFlagButton(String flag, ItemStack item) { + this.items.put(flag, item); + } + + public void removeFlagButton(String flag, ItemStack item) { + this.items.remove(flag); + } + + public boolean contains(String flag) { + return items.containsKey(flag); + } + + public ItemStack getItem(String flag) { + return items.get(flag); + } + +} diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java new file mode 100644 index 000000000..59ad4f305 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -0,0 +1,50 @@ +package com.bekvon.bukkit.residence.gui; + +import java.io.File; +import java.util.Set; + +import org.bukkit.Material; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.CommentedYamlConfiguration; +import com.bekvon.bukkit.residence.ConfigManager; +import com.bekvon.bukkit.residence.Residence; + +public class FlagUtil { + + private static FlagData flagData = new FlagData(); + + public static void load() { + File f = new File(Residence.instance.getDataFolder(), "flags.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + Set allFlags = conf.getConfigurationSection("Global.FlagPermission").getKeys(false); + + for (String oneFlag : allFlags) { + if (!conf.contains("Global.FlagGui." + oneFlag)) + continue; + + if (!conf.contains("Global.FlagGui." + oneFlag + ".Id")) + continue; + + if (!conf.contains("Global.FlagGui." + oneFlag + ".Data")) + continue; + + int id = ConfigManager.GetConfigInt("Global.FlagGui." + oneFlag + ".Id", 35, writer, conf); + int data = ConfigManager.GetConfigInt("Global.FlagGui." + oneFlag + ".Data", 0, writer, conf); + + @SuppressWarnings("deprecation") + Material Mat = Material.getMaterial(id); + if (Mat == null) + Mat = Material.STONE; + ItemStack item = new ItemStack(Mat, 1, (short) data); + FlagUtil.flagData.addFlagButton(oneFlag.toLowerCase(), item); + } + } + + public static FlagData getFlagData() { + return flagData; + } +} diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 97903f479..83ce64c9e 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -9,7 +9,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryAction; @@ -111,27 +111,30 @@ private void fillFlagDescriptions() { String onelisttemp = ChatColor.stripColor(onelist); String splited = ""; - if (onelisttemp.contains("-")) { - splited = onelisttemp.split("-")[0]; - if (splited.toLowerCase().contains(one.getKey().toLowerCase())) { - List lore = new ArrayList(); - - int i = 0; - String sentence = ""; - for (String oneWord : onelist.split(" ")) { - sentence += oneWord + " "; - if (i > 4) { - lore.add(ChatColor.YELLOW + sentence); - sentence = ""; - i = 0; - } - i++; - } + if (!onelisttemp.contains("-")) + continue; + + splited = onelisttemp.split("-")[0]; + if (!splited.toLowerCase().contains(one.getKey().toLowerCase())) + continue; + + List lore = new ArrayList(); + + int i = 0; + String sentence = ""; + for (String oneWord : onelist.split(" ")) { + sentence += oneWord + " "; + if (i > 4) { lore.add(ChatColor.YELLOW + sentence); - description.put(one.getKey(), lore); - break; + sentence = ""; + i = 0; } + i++; } + lore.add(ChatColor.YELLOW + sentence); + description.put(one.getKey(), lore); + break; + } } } @@ -184,23 +187,38 @@ public void recalculateInv(ClaimedResidence res) { permMap = (LinkedHashMap) Sorting.sortByKeyASC(permMap); - for (Entry one : permMap.entrySet()) { - @SuppressWarnings("deprecation") - Material Mat = Material.getMaterial(35); - if (Mat == null) - Mat = Material.STONE; + FlagData flagData = FlagUtil.getFlagData(); + for (Entry one : permMap.entrySet()) { ItemStack MiscInfo = Residence.getConfigManager().getGuiRemove(); - if (one.getValue() == 1) - MiscInfo = Residence.getConfigManager().getGuiTrue(); - else if (one.getValue() == 0) - MiscInfo = Residence.getConfigManager().getGuiFalse(); + + if (flagData.contains(one.getKey())) + MiscInfo = flagData.getItem(one.getKey()); + + if (one.getValue() == 1) { + ItemMeta im = MiscInfo.getItemMeta(); + im.addEnchant(Enchantment.LUCK, 1, true); + MiscInfo.setItemMeta(im); + } else + MiscInfo.removeEnchantment(Enchantment.LUCK); ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); MiscInfoMeta.setDisplayName(ChatColor.GREEN + one.getKey()); List lore = new ArrayList(); + switch (one.getValue()) { + case 0: + lore.add(ChatColor.GOLD + "Flag state: " + ChatColor.DARK_RED + "False"); + break; + case 1: + lore.add(ChatColor.GOLD + "Flag state: " + ChatColor.GREEN + "True"); + break; + case 2: + lore.add(ChatColor.GOLD + "Flag state: " + ChatColor.RED + "Removed"); + break; + } + if (description.containsKey(one.getKey())) lore.addAll(description.get(one.getKey())); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 65ea441fe..65d55c45c 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -49,28 +49,22 @@ public SelectionManager(Server server) { public void placeLoc1(Player player, Location loc) { if (loc != null) { - playerLoc1.put(player.getName(), loc); - if (Residence.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName())) { this.qsky(player); this.qbedrock(player); } - this.afterSelectionUpdate(player); } } public void placeLoc2(Player player, Location loc) { if (loc != null) { - playerLoc2.put(player.getName(), loc); - if (Residence.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName())) { this.qsky(player); this.qbedrock(player); } - this.afterSelectionUpdate(player); } } @@ -90,7 +84,7 @@ public Location getPlayerLoc2(String player) { } public boolean hasPlacedBoth(String player) { - return (playerLoc1.containsKey(player) && playerLoc2.containsKey(player)); + return playerLoc1.containsKey(player) && playerLoc2.containsKey(player); } public void showSelectionInfoInActionBar(Player player) { diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index e30ef79c5..0a339e358 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -24,7 +24,7 @@ public WorldEditSelectionManager(Server serv) { @Override public boolean worldEdit(Player player) { - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + WorldEditPlugin wep = (WorldEditPlugin) this.server.getPluginManager().getPlugin("WorldEdit"); Selection sel = wep.getSelection(player); if (sel != null) { Location pos1 = sel.getMinimumPoint(); @@ -37,6 +37,7 @@ public boolean worldEdit(Player player) { } this.playerLoc1.put(player.getName(), pos1); this.playerLoc2.put(player.getName(), pos2); + afterSelectionUpdate(player); return true; } return false; @@ -44,47 +45,47 @@ public boolean worldEdit(Player player) { @Override public void placeLoc1(Player player, Location loc) { - this.worldEdit(player); +// this.worldEdit(player); super.placeLoc1(player, loc); } @Override public void placeLoc2(Player player, Location loc) { - this.worldEdit(player); +// this.worldEdit(player); super.placeLoc2(player, loc); } @Override public void sky(Player player, boolean resadmin) { - this.worldEdit(player); +// this.worldEdit(player); super.sky(player, resadmin); afterSelectionUpdate(player); } @Override public void bedrock(Player player, boolean resadmin) { - this.worldEdit(player); +// this.worldEdit(player); super.bedrock(player, resadmin); afterSelectionUpdate(player); } @Override public void modify(Player player, boolean shift, int amount) { - this.worldEdit(player); +// this.worldEdit(player); super.modify(player, shift, amount); afterSelectionUpdate(player); } @Override public void selectChunk(Player player) { - this.worldEdit(player); +// this.worldEdit(player); super.selectChunk(player); afterSelectionUpdate(player); } @Override public void showSelectionInfo(Player player) { - this.worldEdit(player); +// this.worldEdit(player); super.showSelectionInfo(player); } } diff --git a/src/flags.yml b/src/flags.yml index 07b7cb4b7..e47e315e7 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -61,6 +61,161 @@ Global: day: true night: true chat: true + # This sets GUI items to represent each flag, if not given, then gray wool will be used + FlagGui: + animalkilling: + Id: 365 + Data: 0 + animals: + Id: 383 + Data: 90 + bed: + Id: 355 + Data: 0 + brew: + Id: 379 + Data: 0 + bucket: + Id: 325 + Data: 0 + build: + Id: 45 + Data: 0 + burn: + Id: 50 + Data: 0 + button: + Id: 143 + Data: 0 + cake: + Id: 354 + Data: 0 + canimals: + Id: 383 + Data: 91 + chat: + Id: 386 + Data: 0 + cmonsters: + Id: 383 + Data: 50 + command: + Id: 137 + Data: 0 + container: + Id: 342 + Data: 0 + creeper: + Id: 383 + Data: 50 + destroy: + Id: 121 + Data: 0 + diode: + Id: 356 + Data: 0 + door: + Id: 324 + Data: 0 + enchant: + Id: 116 + Data: 0 + explode: + Id: 407 + Data: 0 + fireball: + Id: 385 + Data: 0 + firespread: + Id: 377 + Data: 0 + flow: + Id: 111 + Data: 0 + healing: + Id: 373 + Data: 0 + ignite: + Id: 259 + Data: 0 + lavaflow: + Id: 327 + Data: 0 + leash: + Id: 420 + Data: 0 + lever: + Id: 69 + Data: 0 + mobkilling: + Id: 367 + Data: 0 + monsters: + Id: 52 + Data: 0 + move: + Id: 301 + Data: 0 + nanimals: + Id: 383 + Data: 92 + nmonsters: + Id: 383 + Data: 51 + nofly: + Id: 171 + Data: 1 + nomobs: + Id: 166 + Data: 0 + note: + Id: 25 + Data: 0 + piston: + Id: 33 + Data: 0 + place: + Id: 169 + Data: 0 + pvp: + Id: 268 + Data: 0 + sanimals: + Id: 383 + Data: 101 + shear: + Id: 359 + Data: 0 + smonsters: + Id: 383 + Data: 54 + subzone: + Id: 160 + Data: 7 + table: + Id: 58 + Data: 0 + tnt: + Id: 46 + Data: 0 + tp: + Id: 120 + Data: 0 + trade: + Id: 388 + Data: 0 + trample: + Id: 3 + Data: 0 + use: + Id: 70 + Data: 0 + vehicledestroy: + Id: 328 + Data: 0 + waterflow: + Id: 326 + Data: 0 # These are default flags applied to all residences from any user group. ResidenceDefault: build: false From 817a5a7cb3c8f1eb1693dadf42ec4708214d44c9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Oct 2015 20:11:36 +0300 Subject: [PATCH 0059/1142] Fix for kick command/ Fix for hidden residences --- src/com/bekvon/bukkit/residence/Locale.java | 6 ++++++ src/com/bekvon/bukkit/residence/PlayerManager.java | 10 +++++++++- .../bukkit/residence/ResidenceCommandListener.java | 10 ++++++++-- .../bekvon/bukkit/residence/containers/ResPlayer.java | 2 +- .../bukkit/residence/protection/ResidenceManager.java | 3 ++- src/plugin.yml | 6 +++--- 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 7d05290b7..2fb1ee197 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -675,6 +675,12 @@ public static void LoadLang(String lang) { "The name must not already be taken by another residence."), writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.kick.Description", "Kicks player from residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.kick.Info", + Arrays.asList("Usage: /res kick ", "You must be the owner or an admin to do this.", + "Player should be online."), + writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.mirror.Description", "Mirrors Flags", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.mirror.Info", Arrays.asList("Usage: /res mirror [Source Residence] [Target Residence]", diff --git a/src/com/bekvon/bukkit/residence/PlayerManager.java b/src/com/bekvon/bukkit/residence/PlayerManager.java index d6abc1bd8..895a4c936 100644 --- a/src/com/bekvon/bukkit/residence/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/PlayerManager.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.containers.ResPlayer; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; public class PlayerManager { private static ConcurrentHashMap players = new ConcurrentHashMap(); @@ -63,12 +64,19 @@ public static ArrayList getResidenceList(String player) { return temp; } - public static ArrayList getResidenceListString(String player) { + public static ArrayList getResidenceListString(String player, boolean showhidden) { ArrayList temp = new ArrayList(); playerJoin(player); ResPlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer != null) { for (Entry one : resPlayer.getResList().entrySet()) { + if (!showhidden) { + ClaimedResidence res = Residence.getResidenceManager().getByName(one.getKey()); + boolean hidden = res.getPermissions().has("hidden", false); + if (hidden) + continue; + } + temp.add(Residence.getLanguage().getPhrase("ResidenceList", "|" + one.getKey() + "|" + Residence.getLanguage().getPhrase("World") + "|" + one .getValue())); } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 5133ad38f..02c99c0d7 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -622,14 +622,20 @@ public void run() { } Player targetplayer = Bukkit.getPlayer(args[1]); if (targetplayer == null) { - + player.sendMessage(ChatColor.RED + language.getPhrase("NotOnline")); + return true; } group = gmanager.getGroup(player); - if (!group.hasKickAccess()) { + if (!group.hasKickAccess() && !resadmin) { player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); return true; } ClaimedResidence res = rmanager.getByLoc(targetplayer.getLocation()); + + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + return true; + } if (res.getOwner().equals(player.getName())) { if (res.getPlayersInResidence().contains(targetplayer)) { targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation())); diff --git a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java index 24f1c499c..f992ab331 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java @@ -114,7 +114,7 @@ public PermissionGroup getGroup() { } public void recountRes() { - this.ResidenceList = Residence.getResidenceManager().getResidenceMapList(this.userName, false); + this.ResidenceList = Residence.getResidenceManager().getResidenceMapList(this.userName, true); recountResAmount(); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 187117630..64efeae19 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -242,10 +242,11 @@ public void listResidences(final Player player, final String targetplayer, final if (showhidden && !Residence.isResAdminOn(player) && !player.getName().equals(targetplayer)) { showhidden = false; } + final boolean hidden = showhidden; Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { @Override public void run() { - ArrayList ownedResidences = PlayerManager.getResidenceListString(targetplayer); + ArrayList ownedResidences = PlayerManager.getResidenceListString(targetplayer, hidden); ownedResidences.addAll(Residence.getRentManager().getRentedLands(targetplayer)); InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, ownedResidences, page); return; diff --git a/src/plugin.yml b/src/plugin.yml index 014623bca..6370fad4e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.2.0 +version: 2.9.4.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -35,8 +35,8 @@ permissions: residence.admin: description: Gives you access to /resadmin default: op - residence.Topadmin: - description: Gives you access to /resreload and resload commands + residence.topadmin: + description: Gives you access to /resreload and /resload commands default: op residence.admin.tp: description: Allows to override tp flag From 17d44260637345fd4be4d2c6e1c49711707f718d Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Oct 2015 20:16:25 +0300 Subject: [PATCH 0060/1142] Compass command requires residence.compass permission --- .../bekvon/bukkit/residence/ResidenceCommandListener.java | 6 ++++++ src/flags.yml | 1 + src/plugin.yml | 5 ++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 02c99c0d7..0e30a5166 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1856,6 +1856,12 @@ private boolean commandResCompass(String[] args, boolean resadmin, Player player player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetReset")); return true; } + + if (!player.hasPermission("residence.compass")) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + if (rmanager.getByName(args[1]) != null) { if (rmanager.getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { Location low = rmanager.getByName(args[1]).getArea("main").getLowLoc(); diff --git a/src/flags.yml b/src/flags.yml index e47e315e7..54da9f55c 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -61,6 +61,7 @@ Global: day: true night: true chat: true + hidden: false # This sets GUI items to represent each flag, if not given, then gray wool will be used FlagGui: animalkilling: diff --git a/src/plugin.yml b/src/plugin.yml index 6370fad4e..862941bc8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.4.0 +version: 2.9.4.0/er website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -71,3 +71,6 @@ permissions: residence.chatkick: description: Allows to kick players from residence chat default: true + residence.compass: + description: Allows to set compass pointer to residence + default: true From 890f1cd854bb39b35e1c2e278cb16e273611055f Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Oct 2015 20:22:19 +0300 Subject: [PATCH 0061/1142] Added hidden flag into list/ fixed messed up plugin.yml --- src/flags.yml | 1 + src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/flags.yml b/src/flags.yml index 54da9f55c..e3182289d 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -233,6 +233,7 @@ Global: animalkilling: false shear: false leash: false + tp: false # These are default flags applied to the residence creator of any group. CreatorDefault: build: true diff --git a/src/plugin.yml b/src/plugin.yml index 862941bc8..800c00bab 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.4.0/er +version: 2.9.4.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 4d774377b20cee90fa4b83dfa999fb7ae847002b Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 17 Oct 2015 19:43:21 +0300 Subject: [PATCH 0062/1142] Added protection from flag change while there is some one inside residence --- .../bukkit/residence/ConfigManager.java | 17 ++++++++++ src/com/bekvon/bukkit/residence/Locale.java | 3 ++ .../bukkit/residence/PlayerManager.java | 1 - .../protection/ResidencePermissions.java | 20 +++++++++++ .../bekvon/bukkit/residence/utils/Debug.java | 33 +++++++++---------- src/plugin.yml | 2 +- 6 files changed, 56 insertions(+), 20 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index c3e2d3a21..7126eb7d5 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -43,6 +43,7 @@ public class ConfigManager { protected boolean NoWaterPlace; protected boolean AutoCleanUp; protected boolean UseClean; + protected boolean PvPFlagPrevent; protected int infoToolId; protected int AutoCleanUpDays; protected int selectionToolId; @@ -114,6 +115,7 @@ public class ConfigManager { protected List NoPlaceWorlds; protected List BlockFallWorlds; protected List CleanWorlds; + protected List FlagsList; protected ItemStack GuiTrue; protected ItemStack GuiFalse; @@ -298,6 +300,7 @@ void UpdateConfigFile() { BlockFallLevel = GetConfigInt("Global.AntiGreef.BlockFall.Level", 62, writer, conf); BlockFallWorlds = GetConfigArray("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + // Res cleaning writer.addComment("Global.AntiGreef.ResCleaning.Use", "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", "Effective way to prevent residence creating near greefing target and then remove it"); @@ -308,6 +311,12 @@ void UpdateConfigFile() { CleanBlocks = GetConfigIntArray("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11), writer, conf); CleanWorlds = GetConfigArray("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + writer.addComment("Global.AntiGreef.Flags.Prevent", + "By setting this to true flags from list will be protected from change while there is some one inside residence besides owner", + "Protects in example from people inviting some one and changing pvp flag to true to kill them"); + PvPFlagPrevent = GetConfigBoolean("Global.AntiGreef.Flags.Prevent", true, writer, conf); + FlagsList = GetConfigArray("Global.AntiGreef.Flags.list", Arrays.asList("pvp"), writer, conf, false); + writer.addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); defaultGroup = GetConfigString("Global.DefaultGroup", "default", writer, conf, false); @@ -666,6 +675,10 @@ public boolean isUseClean() { return UseClean; } + public boolean isPvPFlagPrevent() { + return PvPFlagPrevent; + } + public int getInfoToolID() { return infoToolId; } @@ -874,6 +887,10 @@ public List getCleanWorlds() { return CleanWorlds; } + public List getProtectedFlagsList() { + return FlagsList; + } + public boolean getEnforceAreaInsideArea() { return enforceAreaInsideArea; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 2fb1ee197..bc943470d 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -255,6 +255,9 @@ public static void LoadLang(String lang) { GetConfigString("Language.NoPVPZone", "No PVP zone.", writer, conf, true); GetConfigString("Language.FlagDeny", "You dont have %1 permission here.", writer, conf, true); GetConfigString("Language.FlagSetDeny", "Owner does not have access to flag %1", writer, conf, true); + + GetConfigString("Language.FlagChangeDeny", "&cYou cant change &e%1 &cflag state while there is &e%2 &cplayer(s) inside.", writer, conf, true); + GetConfigString("Language.SelectPoint", "Placed %1 Selection Point", writer, conf, true); GetConfigString("Language.ResidenceMoveDeny", "You dont have movement permission for Residence %1", writer, conf, true); GetConfigString("Language.ResidenceFlagDeny", "You dont have %1 permission for Residence %2", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/PlayerManager.java b/src/com/bekvon/bukkit/residence/PlayerManager.java index 895a4c936..35fd561ff 100644 --- a/src/com/bekvon/bukkit/residence/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/PlayerManager.java @@ -11,7 +11,6 @@ import com.bekvon.bukkit.residence.containers.ResPlayer; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; public class PlayerManager { private static ConcurrentHashMap players = new ConcurrentHashMap(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 0bc5684bb..e5cb97892 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -221,7 +221,27 @@ public boolean setGroupFlag(Player player, String group, String flag, String fla public boolean setFlag(Player player, String flag, String flagstate, boolean resadmin) { if (validFlagGroups.containsKey(flag)) return this.setFlagGroup(player, flag, flagstate, resadmin); + FlagState state = FlagPermissions.stringToFlagState(flagstate); + + if (Residence.getConfigManager().isPvPFlagPrevent()) { + for (String oneFlag : Residence.getConfigManager().getProtectedFlagsList()) { + if (!flag.equalsIgnoreCase(oneFlag)) + continue; + + ArrayList players = this.residence.getPlayersInResidence(); + if (!resadmin && (players.size() > 1 || players.size() == 1 && !players.get(0).getName().equals(this.getOwner()))) { + int size = 0; + for (Player one : players) { + if (!one.getName().equals(this.getOwner())) + size++; + } + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagChangeDeny", flag + "|" + size)); + return false; + } + } + } + if (checkCanSetFlag(player, flag, state, true, resadmin)) { ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); Residence.getServ().getPluginManager().callEvent(fc); diff --git a/src/com/bekvon/bukkit/residence/utils/Debug.java b/src/com/bekvon/bukkit/residence/utils/Debug.java index bb323f70a..93b46204d 100644 --- a/src/com/bekvon/bukkit/residence/utils/Debug.java +++ b/src/com/bekvon/bukkit/residence/utils/Debug.java @@ -1,18 +1,15 @@ -package com.bekvon.bukkit.residence.utils; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; - -public class Debug { - public static void D(String message) { - - Player player = Bukkit.getPlayer("Zrips"); - if (player == null) - return; - - player.sendMessage(ChatColor.DARK_GRAY + "[Debug] " + ChatColor.DARK_AQUA + ChatColor.translateAlternateColorCodes('&', message)); - - return; - } -} +package com.bekvon.bukkit.residence.utils; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +public class Debug { + public static void D(String message) { + Player player = Bukkit.getPlayer("Zrips"); + if (player == null) + return; + player.sendMessage(ChatColor.DARK_GRAY + "[Debug] " + ChatColor.DARK_AQUA + ChatColor.translateAlternateColorCodes('&', message)); + return; + } +} diff --git a/src/plugin.yml b/src/plugin.yml index 800c00bab..6e81ed5d9 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.4.0 +version: 2.9.5.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 884aea0f7335cd3bef40b0a989413d4b77973c84 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Oct 2015 20:15:48 +0300 Subject: [PATCH 0063/1142] Added random teleportation command --- .../bukkit/residence/ConfigManager.java | 53 +++++++++ src/com/bekvon/bukkit/residence/Locale.java | 24 ++-- .../residence/ResidenceCommandListener.java | 42 +++++++ .../listeners/ResidenceEntityListener.java | 23 +++- .../protection/ClaimedResidence.java | 2 +- .../residence/protection/FlagPermissions.java | 3 + .../bukkit/residence/utils/RandomTp.java | 107 ++++++++++++++++++ src/flags.yml | 1 + src/plugin.yml | 5 +- 9 files changed, 245 insertions(+), 15 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/utils/RandomTp.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 7126eb7d5..b0819eb5e 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -6,6 +6,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Location; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ParticleEffects; @@ -19,6 +20,7 @@ import java.util.Map; import java.util.Set; import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.configuration.Configuration; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; @@ -117,6 +119,12 @@ public class ConfigManager { protected List CleanWorlds; protected List FlagsList; + protected Location rtCenter; + protected int rtMaxCoord; + protected int rtMinCoord; + protected int rtCooldown; + protected int rtMaxTries; + protected ItemStack GuiTrue; protected ItemStack GuiFalse; protected ItemStack GuiRemove; @@ -258,6 +266,31 @@ void UpdateConfigFile() { writer.addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); TeleportDelay = GetConfigInt("Global.Tp.TeleportDelay", 3, writer, conf); + writer.addComment("Global.RandomTeleportation.MaxCoord", + "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); + rtMaxCoord = GetConfigInt("Global.RandomTeleportation.MaxCoord", 1000, writer, conf); + writer.addComment("Global.RandomTeleportation.MinCoord", + "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); + rtMinCoord = GetConfigInt("Global.RandomTeleportation.MinCoord", 500, writer, conf); + + writer.addComment("Global.RandomTeleportation.WorldName", "World to use this function, set main residence world"); + String rtWorld = GetConfigString("Global.RandomTeleportation.WorldName", defaultWorldName, writer, conf, false); + + int rtCenterX = GetConfigInt("Global.RandomTeleportation.CenterX", 0, writer, conf); + int rtCenterZ = GetConfigInt("Global.RandomTeleportation.CenterZ", 0, writer, conf); + + World world = Bukkit.getWorld(rtWorld); + rtCenter = new Location(Bukkit.getWorlds().get(0), 0, 63, 0); + if (world != null) + rtCenter = new Location(world, rtCenterX, 63, rtCenterZ); + + writer.addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); + rtCooldown = GetConfigInt("Global.RandomTeleportation.Cooldown", 5, writer, conf); + + writer.addComment("Global.RandomTeleportation.Cooldown", "How many times to try find correct location for teleportation.", + "Keep it at low number, as player always can try again after delay"); + rtMaxTries = GetConfigInt("Global.RandomTeleportation.MaxTries", 20, writer, conf); + writer.addComment("Global.Size.MinimalSize", "Minimal size of residence in blocks", "1000 is 10x10x10 residence size"); MinimalResSize = GetConfigInt("Global.Size.MinimalSize", 100, writer, conf); MinimalResX = GetConfigInt("Global.Size.MinimalX", 10, writer, conf); @@ -906,4 +939,24 @@ public ItemStack getGuiFalse() { public ItemStack getGuiRemove() { return GuiRemove; } + + public Location getrtCenter() { + return rtCenter; + } + + public int getrtMaxCoord() { + return rtMaxCoord; + } + + public int getrtMinCoord() { + return rtMinCoord; + } + + public int getrtCooldown() { + return rtCooldown; + } + + public int getrtMaxTries() { + return rtMaxTries; + } } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index bc943470d..a9973de01 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -95,7 +95,7 @@ public static void LoadLang(String lang) { writer, conf, true); GetConfigString("Language.InvalidResidence", "Invalid Residence...", writer, conf, true); GetConfigString("Language.InvalidSubzone", "Invalid Subzone...", writer, conf, true); - GetConfigString("Language.InvalidDirection", "Invalid Direction...", writer, conf, true); + GetConfigString("Language.InvalidDirection", "Invalid Direction...", writer, conf, true); GetConfigString("Language.InvalidAmount", "Invalid Amount...", writer, conf, true); GetConfigString("Language.InvalidCost", "Invalid Cost...", writer, conf, true); GetConfigString("Language.InvalidDays", "Invalid number of days...", writer, conf, true); @@ -255,9 +255,9 @@ public static void LoadLang(String lang) { GetConfigString("Language.NoPVPZone", "No PVP zone.", writer, conf, true); GetConfigString("Language.FlagDeny", "You dont have %1 permission here.", writer, conf, true); GetConfigString("Language.FlagSetDeny", "Owner does not have access to flag %1", writer, conf, true); - + GetConfigString("Language.FlagChangeDeny", "&cYou cant change &e%1 &cflag state while there is &e%2 &cplayer(s) inside.", writer, conf, true); - + GetConfigString("Language.SelectPoint", "Placed %1 Selection Point", writer, conf, true); GetConfigString("Language.ResidenceMoveDeny", "You dont have movement permission for Residence %1", writer, conf, true); GetConfigString("Language.ResidenceFlagDeny", "You dont have %1 permission for Residence %2", writer, conf, true); @@ -391,7 +391,7 @@ public static void LoadLang(String lang) { GetConfigString("Language.Chat.ChatChannelChange", "Changed residence chat channel to %1", writer, conf, true); GetConfigString("Language.Chat.ChatChannelLeave", "Left residence chat", writer, conf, true); - + GetConfigString("Language.Chat.JoinFirst", "&4Join residence chat channel first...", writer, conf, true); GetConfigString("Language.Chat.InvalidChannel", "&4Invalid Channel...", writer, conf, true); GetConfigString("Language.Chat.InvalidColor", "&4Incorrect color code", writer, conf, true); @@ -400,7 +400,12 @@ public static void LoadLang(String lang) { GetConfigString("Language.Chat.InvalidPrefixLength", "&4Prefix is to long. Allowed length: %1", writer, conf, true); GetConfigString("Language.Chat.ChangedColor", "&eResidence chat channel color changed to %1", writer, conf, true); GetConfigString("Language.Chat.ChangedPrefix", "&eResidence chat channel prefix changed to %1", writer, conf, true); - + + GetConfigString("Language.RandomTeleport.TpLimit", "&eYou can't teleport so fast, please wait &6%1 &esec and try again", writer, conf, true); + GetConfigString("Language.RandomTeleport.TeleportSuccess", "&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation", writer, conf, true); + GetConfigString("Language.RandomTeleport.IncorrectLocation", "&6Could not find correct teleport location, please wait &e%1 &6sec and try again.", writer, conf, + true); + GetConfigString("Language.RandomTeleport.TeleportStarted", "&eTeleportation started, don't move for next &6%4 &esec.", writer, conf, true); writer.addComment("CommandHelp", ""); @@ -536,8 +541,11 @@ public static void LoadLang(String lang) { GetConfigString("CommandHelp.SubCommands.res.SubCommands.tp.Description", "Teleport to a residence", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tp.Info", Arrays.asList("Usage: /res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", - "Your permission group must also be allowed to teleport by the server admin."), - writer, conf, true); + "Your permission group must also be allowed to teleport by the server admin."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.rt.Description", "Teleports to random location in world", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.rt.Info", + Arrays.asList("Usage: /res rt", "Teleports you to random location in defined world."), writer, conf, true); GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning and teleport anyways", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", @@ -683,7 +691,7 @@ public static void LoadLang(String lang) { Arrays.asList("Usage: /res kick ", "You must be the owner or an admin to do this.", "Player should be online."), writer, conf, true); - + GetConfigString("CommandHelp.SubCommands.res.SubCommands.mirror.Description", "Mirrors Flags", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.mirror.Info", Arrays.asList("Usage: /res mirror [Source Residence] [Target Residence]", diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 0e30a5166..1cc36604a 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -32,12 +32,14 @@ import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.selection.WorldGuardUtil; import com.bekvon.bukkit.residence.spout.ResidenceSpout; +import com.bekvon.bukkit.residence.utils.RandomTp; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldguard.protection.regions.ProtectedRegion; public class ResidenceCommandListener extends Residence { public static HashMap teleportMap = new HashMap(); + public static HashMap rtMap = new HashMap(); public static List teleportDelayMap = new ArrayList(); public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { @@ -715,6 +717,46 @@ public void run() { return true; } + if (cmd.equals("rt")) { + if (args.length != 1) { + return false; + } + + int sec = 5; + if (rtMap.containsKey(player.getName()) && !resadmin) { + if (rtMap.get(player.getName()) + (sec * 1000) > System.currentTimeMillis()) { + int left = (int) (sec - ((System.currentTimeMillis() - rtMap.get(player.getName())) / 1000)); + player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.RandomTeleport.TpLimit").replace("%1", String.valueOf(left))); + return true; + } + } + + if (!player.hasPermission("residence.randomtp") && !resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + + Location loc = RandomTp.getRandomlocation(); + rtMap.put(pname, System.currentTimeMillis()); + + if (loc == null) { + player.sendMessage(NewLanguage.getMessage("Language.RandomTeleport.IncorrectLocation").replace("%1", String.valueOf(sec))); + return true; + } + + if (Residence.getConfigManager().getTeleportDelay() > 0 && !resadmin) { + player.sendMessage(ChatColor.GREEN + NewLanguage.getMessage("Language.RandomTeleport.TeleportStarted").replace("%1", String.valueOf(loc.getX())) + .replace("%2", String.valueOf(loc.getY())).replace("%3", String.valueOf(loc.getZ())).replace("%4", String.valueOf(Residence.getConfigManager().getTeleportDelay()))); + ResidenceCommandListener.teleportDelayMap.add(player.getName()); + } + + if (!resadmin) + RandomTp.performDelaydTp(loc, player); + else + RandomTp.performInstantTp(loc, player); + return true; + } + if (cmd.equals("tpconfirm")) { if (args.length != 1) { return false; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 25fa5734f..e5a8f3d25 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -33,6 +33,7 @@ import org.bukkit.Material; import org.bukkit.entity.Arrow; import org.bukkit.entity.Creeper; +import org.bukkit.entity.Damageable; import org.bukkit.entity.EntityType; import org.bukkit.entity.Monster; import org.bukkit.entity.Projectile; @@ -97,7 +98,6 @@ private boolean isTamed(Entity ent) { return (ent instanceof Tameable ? ((Tameable) ent).isTamed() : false); } - @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(EntityDamageByEntityEvent event) { @@ -180,7 +180,7 @@ public void AnimalKilling(VehicleDestroyEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void MonsterKilling(EntityDamageByEntityEvent event) { - + Entity entity = event.getEntity(); if (!isMonster(entity)) return; @@ -506,10 +506,10 @@ public void onSplashPotion(PotionSplashEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { - + if (event.getEntityType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event.getEntityType())) return; - + Entity dmgr = event.getDamager(); Player player = null; @@ -554,13 +554,26 @@ public void onEntityDamage(EntityDamageEvent event) { Entity ent = event.getEntity(); if (ent.hasMetadata("NPC")) return; - + boolean tamedAnimal = isTamed(ent); ClaimedResidence area = Residence.getResidenceManager().getByLoc(ent.getLocation()); + /* Living Entities */ if (event instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; Entity damager = attackevent.getDamager(); + + if (area != null && ent instanceof Player && damager instanceof Player) { + if (area.getPermissions().has("overridepvp", false)) { + Player player = (Player) event.getEntity(); + Damageable damage = player; + damage.damage(event.getDamage()); + damage.setVelocity(damager.getLocation().getDirection()); + event.setCancelled(true); + return; + } + } + ClaimedResidence srcarea = null; if (damager != null) { srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 54e70d5d1..1068afec7 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -843,7 +843,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } } - private void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { + public void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); Residence.getServ().getPluginManager().callEvent(tpevent); if (!tpevent.isCancelled()) { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 6ac2a327b..0773d36eb 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -186,6 +186,9 @@ public static void initValidFlags() { // prevents from mobs entering residence addResidenceOnlyFlag("nomobs"); + + // Players will suffer damage even if another plugin tries to block it + addResidenceOnlyFlag("overridepvp"); addPlayerOrGroupOnlyFlag("admin"); addFlagToFlagGroup("redstone", "note"); diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java new file mode 100644 index 000000000..f1f463e13 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -0,0 +1,107 @@ +package com.bekvon.bukkit.residence.utils; + +import java.util.Random; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.NewLanguage; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.ResidenceCommandListener; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class RandomTp { + + static int miny = 63; + + public static Location getRandomlocation() { + + Random random = new Random(System.currentTimeMillis()); + + boolean ok = false; + double x = 0; + double z = 0; + + int tries = 0; + + World world = Residence.getConfigManager().getrtCenter().getWorld(); + + int inerrange = Residence.getConfigManager().getrtMinCoord(); + int outerrange = Residence.getConfigManager().getrtMaxCoord(); + int maxtries = Residence.getConfigManager().getrtMaxTries(); + + int centerX = Residence.getConfigManager().getrtCenter().getBlockX(); + int centerY = Residence.getConfigManager().getrtCenter().getBlockZ(); + + Location loc = null; + + while (!ok) { + tries++; + if (tries > maxtries) + return null; + + x = random.nextInt(outerrange * 2) - outerrange + 0.5 + centerX; + + if (x > inerrange * -1 && x < inerrange) + continue; + + z = random.nextInt(outerrange * 2) - outerrange + 0.5 + centerY; + if (z > inerrange * -1 && z < inerrange) + continue; + + loc = new Location(world, x, world.getMaxHeight(), z); + + int from = (int) loc.getY(); + for (int i = 0; i < loc.getWorld().getMaxHeight(); i++) { + loc.setY(from - i); + Block block = loc.getBlock(); + if (!Residence.getNms().isEmptyBlock(block)) { + break; + } + } + + if (loc.getBlock().getState().getType() == Material.LAVA || loc.getBlock().getState().getType() == Material.STATIONARY_LAVA) + continue; + + if (loc.getBlock().getState().getType() == Material.WATER || loc.getBlock().getState().getType() == Material.STATIONARY_WATER) + continue; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + + if (res != null) + continue; + + loc.setY(loc.getY() + 2); + break; + } + return loc; + } + + public static void performDelaydTp(final Location loc, final Player targetPlayer) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + public void run() { + if (!ResidenceCommandListener.teleportDelayMap.contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) + return; + else if (ResidenceCommandListener.teleportDelayMap.contains(targetPlayer.getName())) + ResidenceCommandListener.teleportDelayMap.remove(targetPlayer.getName()); + else + return; + targetPlayer.teleport(loc); + targetPlayer.sendMessage(ChatColor.YELLOW + NewLanguage.getMessage("Language.RandomTeleport.TeleportSuccess").replace("%1", String.valueOf(loc.getX())) + .replace("%2", String.valueOf(loc.getY())).replace("%3", String.valueOf(loc.getZ()))); + return; + } + }, Residence.getConfigManager().getTeleportDelay() * 20L); + } + + public static void performInstantTp(Location loc, Player targetPlayer) { + targetPlayer.teleport(loc); + targetPlayer.sendMessage(ChatColor.YELLOW + NewLanguage.getMessage("Language.RandomTeleport.TeleportSuccess").replace("%1", String.valueOf(loc.getX())) + .replace("%2", String.valueOf(loc.getY())).replace("%3", String.valueOf(loc.getZ()))); + } +} diff --git a/src/flags.yml b/src/flags.yml index e3182289d..18ec26077 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -62,6 +62,7 @@ Global: night: true chat: true hidden: false + overridepvp: false # This sets GUI items to represent each flag, if not given, then gray wool will be used FlagGui: animalkilling: diff --git a/src/plugin.yml b/src/plugin.yml index 6e81ed5d9..55e2f592a 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.5.0 +version: 2.9.6.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -74,3 +74,6 @@ permissions: residence.compass: description: Allows to set compass pointer to residence default: true + residence.randomtp: + description: Allows to use /res rt command + default: true From 765b118ea67b977455f49dd1eb836128fd4d07fe Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Oct 2015 12:15:50 +0300 Subject: [PATCH 0064/1142] Small fix for rt cooldown --- src/com/bekvon/bukkit/residence/ConfigManager.java | 2 +- src/com/bekvon/bukkit/residence/ResidenceCommandListener.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index b0819eb5e..e64895020 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -287,7 +287,7 @@ void UpdateConfigFile() { writer.addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); rtCooldown = GetConfigInt("Global.RandomTeleportation.Cooldown", 5, writer, conf); - writer.addComment("Global.RandomTeleportation.Cooldown", "How many times to try find correct location for teleportation.", + writer.addComment("Global.RandomTeleportation.MaxTries", "How many times to try find correct location for teleportation.", "Keep it at low number, as player always can try again after delay"); rtMaxTries = GetConfigInt("Global.RandomTeleportation.MaxTries", 20, writer, conf); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 1cc36604a..63d04c9d2 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -722,7 +722,7 @@ public void run() { return false; } - int sec = 5; + int sec = Residence.getConfigManager().getrtCooldown(); if (rtMap.containsKey(player.getName()) && !resadmin) { if (rtMap.get(player.getName()) + (sec * 1000) > System.currentTimeMillis()) { int left = (int) (sec - ((System.currentTimeMillis() - rtMap.get(player.getName())) / 1000)); From 41174b3eaace1eb38c73967014ea897774ad8da4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Oct 2015 15:13:00 +0300 Subject: [PATCH 0065/1142] Small fix for getting group/ option to count overridepvp as pvp --- .../bekvon/bukkit/residence/ConfigManager.java | 8 ++++++++ .../residence/ResidenceCommandListener.java | 3 ++- .../bukkit/residence/containers/ResPlayer.java | 4 ++-- .../listeners/ResidenceEntityListener.java | 2 +- .../residence/permissions/PermissionManager.java | 15 ++++++++++----- .../residence/protection/ClaimedResidence.java | 7 ++++--- .../residence/protection/ResidenceManager.java | 2 +- src/plugin.yml | 2 +- 8 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index e64895020..3010eb939 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -46,6 +46,7 @@ public class ConfigManager { protected boolean AutoCleanUp; protected boolean UseClean; protected boolean PvPFlagPrevent; + protected boolean OverridePvp; protected int infoToolId; protected int AutoCleanUpDays; protected int selectionToolId; @@ -258,6 +259,9 @@ void UpdateConfigFile() { writer.addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxSubzonesCount = GetConfigInt("Global.Optimizations.MaxSubzoneCount", 5, writer, conf); + writer.addComment("Global.Optimizations.OverridePvp", "By setting this to true, regular pvp flag will be acting as overridepvp flag", + "Overridepvp flag tries to ignore any pvp protection in that residence by any other plugin"); + OverridePvp = GetConfigBoolean("Global.Optimizations.OverridePvp", false, writer, conf); writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); @@ -712,6 +716,10 @@ public boolean isPvPFlagPrevent() { return PvPFlagPrevent; } + public boolean isOverridePvp() { + return OverridePvp; + } + public int getInfoToolID() { return infoToolId; } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 63d04c9d2..15595f3c5 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -746,7 +746,8 @@ public void run() { if (Residence.getConfigManager().getTeleportDelay() > 0 && !resadmin) { player.sendMessage(ChatColor.GREEN + NewLanguage.getMessage("Language.RandomTeleport.TeleportStarted").replace("%1", String.valueOf(loc.getX())) - .replace("%2", String.valueOf(loc.getY())).replace("%3", String.valueOf(loc.getZ())).replace("%4", String.valueOf(Residence.getConfigManager().getTeleportDelay()))); + .replace("%2", String.valueOf(loc.getY())).replace("%3", String.valueOf(loc.getZ())).replace("%4", String.valueOf(Residence.getConfigManager() + .getTeleportDelay()))); ResidenceCommandListener.teleportDelayMap.add(player.getName()); } diff --git a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java index f992ab331..e36739042 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java @@ -84,8 +84,8 @@ public void recountMaxSubzones() { public void recountGroup() { for (Entry one : Residence.getPermissionManager().getGroups().entrySet()) { if (player != null) { - if (this.player.isPermissionSet("residence.group." + one.getKey())) - this.group = one.getValue(); + if (this.player.hasPermission("residence.group." + one.getKey())) + this.group = one.getValue(); } else { if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.group." + one.getKey(), Residence.getConfigManager().getDefaultWorld())) this.group = one.getValue(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index e5a8f3d25..b6832af53 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -564,7 +564,7 @@ public void onEntityDamage(EntityDamageEvent event) { Entity damager = attackevent.getDamager(); if (area != null && ent instanceof Player && damager instanceof Player) { - if (area.getPermissions().has("overridepvp", false)) { + if (area.getPermissions().has("overridepvp", false) || Residence.getConfigManager().isOverridePvp() && area.getPermissions().has("pvp", false)) { Player player = (Player) event.getEntity(); Damageable damage = player; damage.damage(event.getDamage()); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index e17169f8a..7c989072d 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -55,12 +55,17 @@ public Map getGroups() { public PermissionGroup getGroup(Player player) { PermissionGroup group = PlayerManager.getGroup(player.getName()); - if (group != null) + if (group != null) { return group; + } return groups.get(this.getGroupNameByPlayer(player)); } public PermissionGroup getGroup(String player, String world) { + PermissionGroup group = PlayerManager.getGroup(player); + if (group != null) { + return group; + } return groups.get(this.getGroupNameByPlayer(player, world)); } @@ -102,13 +107,13 @@ public String getGroupNameByPlayer(String player, String world) { } public String getPermissionsGroup(Player player) { - return this.getPermissionsGroup(player.getName(), player.getWorld().getName()); + return this.getPermissionsGroup(player.getName(), player.getWorld().getName()).toLowerCase(); } public String getPermissionsGroup(String player, String world) { if (perms == null) - return Residence.getConfigManager().getDefaultGroup(); - return perms.getPlayerGroup(player, world); + return Residence.getConfigManager().getDefaultGroup().toLowerCase(); + return perms.getPlayerGroup(player, world).toLowerCase(); } public boolean isResidenceAdmin(Player player) { @@ -156,7 +161,7 @@ private void checkPermissions() { } private void readConfig(FileConfiguration config, FileConfiguration flags) { - String defaultGroup = Residence.getConfigManager().getDefaultGroup(); + String defaultGroup = Residence.getConfigManager().getDefaultGroup().toLowerCase(); globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", flags.getConfigurationSection("Global")); ConfigurationSection nodes = config.getConfigurationSection("Groups"); if (nodes != null) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 1068afec7..3a0dbfd53 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -192,6 +192,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return false; } + if (areas.size() >= group.getMaxPhysicalPerResidence()) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaMaxPhysical")); return false; @@ -990,8 +991,8 @@ public static ClaimedResidence load(Map root, ClaimedResidence p } if (root.containsKey("ChatPrefix")) - res.ChatPrefix = (String) root.get("ChatPrefix"); - + res.ChatPrefix = (String) root.get("ChatPrefix"); + if (root.containsKey("ChannelColor")) res.ChannelColor = ChatColor.valueOf((String) root.get("ChannelColor")); else { @@ -1100,7 +1101,7 @@ public void setChatPrefix(String ChatPrefix) { this.ChatPrefix = ChatPrefix; } - public String getChatPrefix() { + public String getChatPrefix() { return this.ChatPrefix == null ? "" : this.ChatPrefix; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 64efeae19..7c16ffd2c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -33,6 +33,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.Debug; /** * @@ -136,7 +137,6 @@ public boolean addResidence(Player player, String name, Location loc1, Location } public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { - if (!Residence.validName(name)) { if (player != null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); diff --git a/src/plugin.yml b/src/plugin.yml index 55e2f592a..5acddc846 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.6.0 +version: 2.9.6.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 3a28e757b85bb4154f5830d6181dce0c6e91b133 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Oct 2015 19:50:04 +0300 Subject: [PATCH 0066/1142] Remade /res info visualization to more friendly --- .../bukkit/residence/ConfigManager.java | 36 +++++++ src/com/bekvon/bukkit/residence/Locale.java | 1 + .../residence/ResidenceCommandListener.java | 16 ++-- .../permissions/PermissionGroup.java | 5 - .../residence/protection/FlagPermissions.java | 96 ++++++++++++++++--- .../protection/ResidenceManager.java | 74 ++++++++------ 6 files changed, 175 insertions(+), 53 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 3010eb939..3cca2e1e7 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -55,6 +55,7 @@ public class ConfigManager { protected String multiworldPlugin; protected boolean enableRentSystem; protected boolean leaseAutoRenew; + protected boolean ShortInfoUse; protected int rentCheckInterval; protected int chatPrefixLength; protected int leaseCheckInterval; @@ -120,6 +121,8 @@ public class ConfigManager { protected List CleanWorlds; protected List FlagsList; + protected Location KickLocation; + protected Location rtCenter; protected int rtMaxCoord; protected int rtMinCoord; @@ -263,6 +266,31 @@ void UpdateConfigFile() { "Overridepvp flag tries to ignore any pvp protection in that residence by any other plugin"); OverridePvp = GetConfigBoolean("Global.Optimizations.OverridePvp", false, writer, conf); + // residence kick location + writer.addComment("Global.Optimizations.KickLocation.Use", + "By setting this to true, when player kicks another player from residence, he will be teleported to this location instead of getting outside residence"); + Boolean UseKick = GetConfigBoolean("Global.Optimizations.KickLocation.Use", false, writer, conf); + String KickLocationWorld = GetConfigString("Global.Optimizations.KickLocation.World", defaultWorldName, writer, conf, false); + Double KickLocationX = GetConfigDouble("Global.Optimizations.KickLocation.X", 0.5, writer, conf); + Double KickLocationY = GetConfigDouble("Global.Optimizations.KickLocation.Y", 63.0, writer, conf); + Double KickLocationZ = GetConfigDouble("Global.Optimizations.KickLocation.Z", 0.5, writer, conf); + writer.addComment("Global.Optimizations.KickLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); + Double KickPitch = GetConfigDouble("Global.Optimizations.KickLocation.Pitch", 0.0, writer, conf); + writer.addComment("Global.Optimizations.KickLocation.Yaw", "Head position to left and right. Range from -180 to 180"); + Double KickYaw = GetConfigDouble("Global.Optimizations.KickLocation.Yaw", 0.0, writer, conf); + if (UseKick) { + World world = Bukkit.getWorld(KickLocationWorld); + if (world != null) { + KickLocation = new Location(world, KickLocationX, KickLocationY, KickLocationZ); + KickLocation.setPitch(KickPitch.floatValue()); + KickLocation.setYaw(KickYaw.floatValue()); + } + } + + writer.addComment("Global.Optimizations.ShortInfo.Use", + "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); + ShortInfoUse = GetConfigBoolean("Global.Optimizations.ShortInfo.Use", false, writer, conf); + writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); minMoveUpdate = GetConfigInt("Global.MoveCheckInterval", 500, writer, conf); @@ -743,6 +771,10 @@ public String getMultiworldPlugin() { public boolean autoRenewLeases() { return leaseAutoRenew; } + + public boolean isShortInfoUse() { + return ShortInfoUse; + } public int getRentCheckInterval() { return rentCheckInterval; @@ -964,6 +996,10 @@ public int getrtCooldown() { return rtCooldown; } + public Location getKickLocation() { + return KickLocation; + } + public int getrtMaxTries() { return rtMaxTries; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index a9973de01..f3567c1f7 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -133,6 +133,7 @@ public static void LoadLang(String lang) { GetConfigString("Language.AreaHighLimit", "You cannot protect this high up, your limit is %1", writer, conf, true); GetConfigString("Language.AreaLowLimit", "You cannot protect this deep, your limit is %1", writer, conf, true); GetConfigString("Language.NotInResidence", "You are not in a Residence.", writer, conf, true); + GetConfigString("Language.PlayerNotInResidence", "Player standing not in your Residence area.", writer, conf, true); GetConfigString("Language.Kicked", "You were kicked from residence", writer, conf, true); GetConfigString("Language.InResidence", "You are standing in Residence %1", writer, conf, true); GetConfigString("Language.ResidenceOwnerChange", "Residence %1 owner changed to %2", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 15595f3c5..fcf3e9664 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1,7 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.bekvon.bukkit.residence; import java.util.logging.Level; @@ -634,13 +630,19 @@ public void run() { } ClaimedResidence res = rmanager.getByLoc(targetplayer.getLocation()); - if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + if (res == null || res != null && !res.getOwner().equals(player.getName()) && !resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("PlayerNotInResidence")); return true; } + if (res.getOwner().equals(player.getName())) { if (res.getPlayersInResidence().contains(targetplayer)) { - targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation())); + + Location loc = Residence.getConfigManager().getKickLocation(); + if (loc != null) + targetplayer.teleport(loc); + else + targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation())); targetplayer.sendMessage(ChatColor.RED + language.getPhrase("Kicked") + "!"); } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 0cefa900e..0e1138371 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.permissions; import org.bukkit.ChatColor; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 0773d36eb..aa2ae91d0 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -150,7 +150,7 @@ public static void initValidFlags() { addFlag("nofly"); addFlag("command"); - + addFlag("chat"); addResidenceOnlyFlag("trample"); @@ -180,13 +180,13 @@ public static void initValidFlags() { addResidenceOnlyFlag("spread"); addResidenceOnlyFlag("hidden"); addResidenceOnlyFlag("witherdamage"); - + addResidenceOnlyFlag("day"); addResidenceOnlyFlag("night"); // prevents from mobs entering residence addResidenceOnlyFlag("nomobs"); - + // Players will suffer damage even if another plugin tries to block it addResidenceOnlyFlag("overridepvp"); @@ -218,7 +218,7 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.WOODEN_DOOR, "door"); Residence.getNms().addDefaultFlags(matUseFlagList); - + addMaterialToUseFlag(Material.FENCE_GATE, "door"); addMaterialToUseFlag(Material.NETHER_FENCE, "door"); addMaterialToUseFlag(Material.TRAP_DOOR, "door"); @@ -603,12 +603,12 @@ public String listFlags() { while (it.hasNext()) { Entry next = it.next(); if (next.getValue()) { - sbuild.append("+").append(next.getKey()); + sbuild.append("&2").append("+").append(next.getKey()); if (it.hasNext()) { sbuild.append(" "); } } else { - sbuild.append("-").append(next.getKey()); + sbuild.append("&3").append("-").append(next.getKey()); if (it.hasNext()) { sbuild.append(" "); } @@ -618,7 +618,7 @@ public String listFlags() { if (sbuild.length() == 0) { sbuild.append("none"); } - return sbuild.toString(); + return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); } public Map getFlags() { @@ -650,12 +650,12 @@ protected String printPlayerFlags(Map flags) { while (it.hasNext()) { Entry next = it.next(); if (next.getValue()) { - sbuild.append("+").append(next.getKey()); + sbuild.append("&2").append("+").append(next.getKey()); if (it.hasNext()) { sbuild.append(" "); } } else { - sbuild.append("-").append(next.getKey()); + sbuild.append("&3").append("-").append(next.getKey()); if (it.hasNext()) { sbuild.append(" "); } @@ -665,7 +665,7 @@ protected String printPlayerFlags(Map flags) { if (sbuild.length() == 0) { sbuild.append("none"); } - return sbuild.toString(); + return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); } public String listOtherPlayersFlags(String player) { @@ -697,6 +697,68 @@ public String listOtherPlayersFlags(String player) { return sbuild.toString(); } + public String listOtherPlayersFlagsRaw(String text, String player) { + player = player.toLowerCase(); + String uuids = Residence.getPlayerUUIDString(player); + StringBuilder sbuild = new StringBuilder(); + + sbuild.append("[\"\","); + sbuild.append("{\"text\":\"" + text + "\"}"); + + Set>> set = playerFlags.entrySet(); + synchronized (set) { + Iterator>> it = set.iterator(); + boolean random = true; + while (it.hasNext()) { + Entry> nextEnt = it.next(); + String next = nextEnt.getKey(); + if (!next.equals(player) && !next.equals(uuids)) { + String perms = printPlayerFlags(nextEnt.getValue()); + if (next.length() == 36) { + String resolvedName = Residence.getPlayerName(next); + if (resolvedName != null) { + this.cachedPlayerNameUUIDs.put(next, resolvedName); + next = resolvedName; + } else if (this.cachedPlayerNameUUIDs.containsKey(next)) + next = this.cachedPlayerNameUUIDs.get(next); + } + if (!perms.equals("none")) { + sbuild.append(","); + + if (random) { + random = false; + next = "&2" + next + "&r"; + } else { + random = true; + next = "&3" + next + "&r"; + } + sbuild.append(ConvertToRaw(next, perms)); + } + } + } + } + + sbuild.append("]"); + return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); + } + + protected String ConvertToRaw(String playerName, String perms) { + if (perms.contains(" ")) { + String[] splited = perms.split(" "); + int i = 0; + perms = ""; + for (String one : splited) { + i++; + perms += one + " "; + if (i >= 5) { + i = 0; + perms += "\n"; + } + } + } + return "{\"text\":\"[" + playerName + "]\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + perms + "\"}]}}}"; + } + public String listGroupFlags() { StringBuilder sbuild = new StringBuilder(); Set set = groupFlags.keySet(); @@ -706,7 +768,13 @@ public String listGroupFlags() { String next = it.next(); String perms = listGroupFlags(next); if (!perms.equals("none")) { - sbuild.append(next).append("[").append(ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED).append("] "); + sbuild + .append(next) + .append("[") + .append(ChatColor.DARK_AQUA) + .append(perms) + .append(ChatColor.RED) + .append("] "); } } } @@ -724,12 +792,12 @@ public String listGroupFlags(String group) { while (it.hasNext()) { Entry next = it.next(); if (next.getValue()) { - sbuild.append("+").append(next.getKey()); + sbuild.append("&2").append("+").append(next.getKey()); if (it.hasNext()) { sbuild.append(" "); } } else { - sbuild.append("-").append(next.getKey()); + sbuild.append("&3").append("-").append(next.getKey()); if (it.hasNext()) { sbuild.append(" "); } @@ -740,7 +808,7 @@ public String listGroupFlags(String group) { groupFlags.remove(group); sbuild.append("none"); } - return sbuild.toString(); + return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); } else { return "none"; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 7c16ffd2c..b0b515b39 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.protection; import java.util.ArrayList; @@ -33,7 +28,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.Debug; /** * @@ -486,26 +480,60 @@ public void printAreaInfo(String areaname, Player player) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return; } + player.sendMessage(ChatColor.GOLD + "**********************************************************"); + ResidencePermissions perms = res.getPermissions(); + + String aid = res.getAreaIDbyLoc(player.getLocation()); if (Residence.getConfigManager().enableEconomy()) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname + " " + ChatColor.YELLOW - + "Bank: " + ChatColor.GOLD + res.getBank().getStoredMoney()); + + String msg = ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname + " "; + + if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { + msg += ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + + " Rented by: " + ChatColor.RED + Residence.getRentManager().getRentingPlayer(areaname); + } else { + msg += " " + ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW; + } + + msg += ChatColor.YELLOW + " Bank: " + ChatColor.GOLD + res.getBank().getStoredMoney(); + + player.sendMessage(msg); } else { player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Residence") + ":" + ChatColor.DARK_GREEN + " " + areaname); } - if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW - + " Rented by: " + ChatColor.RED + Residence.getRentManager().getRentingPlayer(areaname)); - } else { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW + " - " - + Residence.getLanguage().getPhrase("World") + ": " + ChatColor.RED + perms.getWorld()); + + String msg = ChatColor.YELLOW + Residence.getLanguage().getPhrase("World") + ": " + ChatColor.RED + perms.getWorld(); + + if (aid != null) { + + msg += ChatColor.YELLOW + " (" + ChatColor.DARK_AQUA; + CuboidArea area = res.getAreaByLoc(player.getLocation()); + + msg += Residence.getLanguage().getPhrase("CoordsTop", area.getHighLoc().getBlockX() + "|" + area.getHighLoc().getBlockY() + "|" + area.getHighLoc() + .getBlockZ()); + + msg += ChatColor.YELLOW + "; " + ChatColor.DARK_AQUA; + msg += Residence.getLanguage().getPhrase("CoordsBottom", area.getLowLoc().getBlockX() + "|" + area.getLowLoc().getBlockY() + "|" + area.getLowLoc() + .getBlockZ()); + + msg += ChatColor.YELLOW + ")"; } + player.sendMessage(msg); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + perms.listFlags()); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ": " + ChatColor.GREEN + perms.listPlayerFlags(player.getName())); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + perms.listGroupFlags()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + perms.listOtherPlayersFlags(player - .getName())); - String aid = res.getAreaIDbyLoc(player.getLocation()); + + String groupFlags = perms.listGroupFlags(); + if (groupFlags.length() > 0) + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + groupFlags); + if (!Residence.getConfigManager().isShortInfoUse()) + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + perms.listOtherPlayersFlags(player + .getName())); + else { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + perms.listOtherPlayersFlagsRaw(ChatColor.YELLOW + Residence + .getLanguage().getPhrase("Others.Flags") + ": ", player.getName())); + } if (aid != null) { player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CurrentArea") + ": " + ChatColor.GOLD + aid); } @@ -516,19 +544,11 @@ public void printAreaInfo(String areaname, Player player) { player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TotalWorth", String.valueOf((int) ((res.getTotalSize() * group.getCostPerBlock()) * 100) / 100.0) + "|" + String.valueOf((int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0))); } - - if (aid != null) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsT") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase( - "CoordsTop", res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockX() + "|" + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockY() + "|" - + res.getAreaByLoc(player.getLocation()).getHighLoc().getBlockZ())); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CoordsB") + ": " + ChatColor.LIGHT_PURPLE + Residence.getLanguage().getPhrase( - "CoordsBottom", res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockX() + "|" + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockY() - + "|" + res.getAreaByLoc(player.getLocation()).getLowLoc().getBlockZ())); - } if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + Residence.getLeaseManager() .getExpireTime(areaname)); } + player.sendMessage(ChatColor.GOLD + "**********************************************************"); } public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { From 915978a4744ce270de1acd771839fa26ddf6ce64 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Oct 2015 20:15:18 +0300 Subject: [PATCH 0067/1142] 2 new flags keepinv and keepexp --- src/com/bekvon/bukkit/residence/Locale.java | 3 +++ .../listeners/ResidencePlayerListener.java | 20 +++++++++++++++++++ .../residence/protection/FlagPermissions.java | 6 ++++++ .../protection/ResidenceManager.java | 8 ++++++-- src/flags.yml | 2 ++ 5 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index f3567c1f7..6332cc86b 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -640,6 +640,9 @@ public static void LoadLang(String lang) { "&2explode &3- &eAllows or denys explosions in residences", "&2fireball &3- &eAllows or denys fire balls in residences", "&2command &3- &eAllows or denys comamnd use in residences", + "&2overridepvp &3- &eOverrides any plugin pvp protection", + "&2keepinv &3- &ePlayers keeps inventory after death", + "&2keepexp &3- &ePlayers keeps exp after death", "&2burn &3- &eallows or denys Mob combustion in residences"), writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 027375191..161026ba8 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -30,6 +30,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.SignChangeEvent; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; @@ -796,6 +797,25 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerDeath(PlayerDeathEvent event) { + Player player = event.getEntity(); + if (player == null) + return; + if (player.hasMetadata("NPC")) + return; + Location loc = player.getLocation(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res == null) + return; + + if (res.getPermissions().has("keepinv", false)) + event.setKeepInventory(true); + + if (res.getPermissions().has("keepexp", false)) + event.setKeepLevel(true); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerMove(PlayerMoveEvent event) { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index aa2ae91d0..3d3e8b50a 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -190,6 +190,12 @@ public static void initValidFlags() { // Players will suffer damage even if another plugin tries to block it addResidenceOnlyFlag("overridepvp"); + // Players will keep hes inventory on death + addResidenceOnlyFlag("keepinv"); + + // Players will keep hes exp on death + addResidenceOnlyFlag("keepexp"); + addPlayerOrGroupOnlyFlag("admin"); addFlagToFlagGroup("redstone", "note"); addFlagToFlagGroup("redstone", "pressure"); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index b0b515b39..a04268aa4 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -534,10 +534,14 @@ public void printAreaInfo(String areaname, Player player) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + perms.listOtherPlayersFlagsRaw(ChatColor.YELLOW + Residence .getLanguage().getPhrase("Others.Flags") + ": ", player.getName())); } + + msg = ""; if (aid != null) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("CurrentArea") + ": " + ChatColor.GOLD + aid); + msg += ChatColor.YELLOW + Residence.getLanguage().getPhrase("CurrentArea") + ": " + ChatColor.GOLD + aid + " "; } - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Total.Size") + ":" + ChatColor.LIGHT_PURPLE + " " + res.getTotalSize()); + msg += ChatColor.YELLOW + Residence.getLanguage().getPhrase("Total.Size") + ":" + ChatColor.LIGHT_PURPLE + " " + res.getTotalSize(); + + player.sendMessage(msg); if (Residence.getEconomyManager() != null) { PermissionGroup group = Residence.getPermissionManager().getGroup(res.getOwner(), res.getWorld()); diff --git a/src/flags.yml b/src/flags.yml index 18ec26077..2949a2efe 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -63,6 +63,8 @@ Global: chat: true hidden: false overridepvp: false + keepinv: false + keepexp: false # This sets GUI items to represent each flag, if not given, then gray wool will be used FlagGui: animalkilling: From 42c5a15057177d693277e319ef2e83c1313219ec Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Oct 2015 20:34:10 +0300 Subject: [PATCH 0068/1142] 2 extra commands padd and pdel to add/remove trusted player --- src/com/bekvon/bukkit/residence/Locale.java | 32 ++++++++++++------- .../residence/ResidenceCommandListener.java | 22 +++++++++++++ .../residence/protection/FlagPermissions.java | 1 + 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 6332cc86b..bde8a93b6 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -472,11 +472,22 @@ public static void LoadLang(String lang) { GetConfigString("CommandHelp.SubCommands.res.SubCommands.remove.Description", "Remove residences.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("Usage: /res remove "), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.padd.Description", "Add player to residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.padd.Info", Arrays.asList("Usage: /res padd [player]", + "Adds essential flags for player"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("Usage: /res removeall [owner]", - "Removes all residences owned by a specific player.'", - "Requires /resadmin if you use it on anyone besides yourself."), writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.pdel.Description", "Remove player from residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.pdel.Info", Arrays.asList("Usage: /res pdel [player]", + "Removes essential flags from player"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.info.info", + Arrays.asList("Usage: /res info ", "Leave off to display info for the residence your currently in."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.limits.info", + Arrays.asList("Usage: /res limits", "Shows the limitations you have on creating and managing residences."), writer, conf, true); GetConfigString("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.confirm.info", Arrays.asList("Usage: /res confirm", "Confirms removal of a residence."), writer, conf, @@ -510,14 +521,6 @@ public static void LoadLang(String lang) { GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("Usage: /res area replace [residence] [areaID]", "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.info.info", - Arrays.asList("Usage: /res info ", "Leave off to display info for the residence your currently in."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.limits.info", - Arrays.asList("Usage: /res limits", "Shows the limitations you have on creating and managing residences."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages", writer, conf, true); GetConfigArray( "CommandHelp.SubCommands.res.SubCommands.message.info", Arrays.asList("Usage: /res message [enter/leave] [message]", @@ -579,6 +582,11 @@ public static void LoadLang(String lang) { "Blacklisting a material prevents it from being placed in the residence.", "Ignorelist causes a specific material to not be protected by Residence."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("Usage: /res removeall [owner]", + "Removes all residences owned by a specific player.'", + "Requires /resadmin if you use it on anyone besides yourself."), writer, conf, true); GetConfigString("CommandHelp.SubCommands.res.SubCommands.flags.Description", "List of flags", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.flags.Info", diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index fcf3e9664..6d08af047 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -491,6 +491,28 @@ public void run() { } return false; } + if (cmd.equals("padd")) { + if (args.length == 2) { + Bukkit.dispatchCommand(player, "res pset " + args[1] + " trusted true"); + return true; + } + if (args.length == 3) { + Bukkit.dispatchCommand(player, "res pset " + args[1] + " " + args[2] + " trusted true"); + return true; + } + return false; + } + if (cmd.equals("pdel")) { + if (args.length == 2) { + Bukkit.dispatchCommand(player, "res pset " + args[1] + " trusted remove"); + return true; + } + if (args.length == 3) { + Bukkit.dispatchCommand(player, "res pset " + args[1] + " " + args[2] + " trusted remove"); + return true; + } + return false; + } if (cmd.equals("check")) { if (args.length == 3 || args.length == 4) { if (args.length == 4) { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 3d3e8b50a..ee06539e6 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -215,6 +215,7 @@ public static void initValidFlags() { addFlagToFlagGroup("trusted", "animalkilling"); addFlagToFlagGroup("trusted", "mobkilling"); addFlagToFlagGroup("trusted", "shear"); + addFlagToFlagGroup("trusted", "chat"); addFlagToFlagGroup("fire", "ignite"); addFlagToFlagGroup("fire", "firespread"); addMaterialToUseFlag(Material.DIODE, "diode"); From a62b29440bfc742890e4d89605d261eb86ab75cb Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Oct 2015 16:42:57 +0300 Subject: [PATCH 0069/1142] Bug fix for selection tools ignoring protection --- src/com/bekvon/bukkit/residence/Locale.java | 3 ++- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 ++ src/plugin.yml | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index bde8a93b6..d4e1b1695 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -12,6 +12,7 @@ import java.util.List; import org.bukkit.ChatColor; +import org.bukkit.Material; import org.bukkit.configuration.Configuration; import org.bukkit.configuration.file.YamlConfiguration; @@ -480,7 +481,7 @@ public static void LoadLang(String lang) { GetConfigString("CommandHelp.SubCommands.res.SubCommands.pdel.Description", "Remove player from residence.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.pdel.Info", Arrays.asList("Usage: /res pdel [player]", "Removes essential flags from player"), writer, conf, true); - + GetConfigString("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.info.info", Arrays.asList("Usage: /res info ", "Leave off to display info for the residence your currently in."), writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 161026ba8..644d97f6f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -503,11 +503,13 @@ public void onPlayerInteract(PlayerInteractEvent event) { Residence.getSelectionManager().placeLoc1(player, loc); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + event.setCancelled(true); } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { Location loc = block.getLocation(); Residence.getSelectionManager().placeLoc2(player, loc); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + event.setCancelled(true); } if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) diff --git a/src/plugin.yml b/src/plugin.yml index 5acddc846..e0abb853b 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.6.1 +version: 2.9.7.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 3c3388be7848942d273c2bb886444344e56a1be9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 22 Oct 2015 11:44:26 +0300 Subject: [PATCH 0070/1142] Don't record player is residence creation failed --- .../residence/listeners/ResidenceBlockListener.java | 12 ++++++------ .../residence/listeners/ResidencePlayerListener.java | 8 +++----- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 6ba259a54..4e0050c40 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -144,8 +144,8 @@ public void onChestPlace(BlockPlaceEvent event) { return; if (MessageInformed.contains(player.getName())) - return; - + return; + player.sendMessage(NewLanguage.getMessage("Language.NewPlayerInfo")); MessageInformed.add(player.getName()); @@ -178,10 +178,10 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { Residence.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), loc.getBlockX() + Residence.getConfigManager().getNewPlayerRangeX(), loc .getBlockY() + Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() + Residence.getConfigManager().getNewPlayerRangeZ())); - Residence.getResidenceManager().addResidence(player, player.getName(), Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence - .getSelectionManager().getPlayerLoc2(player.getName()), Residence.getConfigManager().isNewPlayerFree()); - - ResCreated.add(player.getName()); + boolean created = Residence.getResidenceManager().addResidence(player, player.getName(), Residence.getSelectionManager().getPlayerLoc1(player.getName()), + Residence.getSelectionManager().getPlayerLoc2(player.getName()), Residence.getConfigManager().isNewPlayerFree()); + if (created) + ResCreated.add(player.getName()); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 644d97f6f..3b8c5ed2e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -521,13 +521,11 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (heldItemId == Residence.getConfigManager().getInfoToolID() && event.getAction() == Action.LEFT_CLICK_BLOCK) { Location loc = block.getLocation(); String res = Residence.getResidenceManager().getNameByLoc(loc); - if (res != null) { + if (res != null) Residence.getResidenceManager().printAreaInfo(res, player); - event.setCancelled(true); - } else { - event.setCancelled(true); + else player.sendMessage(Residence.getLanguage().getPhrase("NoResHere")); - } + event.setCancelled(true); } if (resadmin) From a2741462f0c488fd6a6c142bd59875d6bd99ed3b Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Oct 2015 12:50:21 +0200 Subject: [PATCH 0071/1142] Ignoring null names --- src/com/bekvon/bukkit/residence/containers/ResPlayer.java | 5 +++-- src/plugin.yml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java index e36739042..c1c344b69 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java @@ -85,7 +85,7 @@ public void recountGroup() { for (Entry one : Residence.getPermissionManager().getGroups().entrySet()) { if (player != null) { if (this.player.hasPermission("residence.group." + one.getKey())) - this.group = one.getValue(); + this.group = one.getValue(); } else { if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.group." + one.getKey(), Residence.getConfigManager().getDefaultWorld())) this.group = one.getValue(); @@ -114,7 +114,8 @@ public PermissionGroup getGroup() { } public void recountRes() { - this.ResidenceList = Residence.getResidenceManager().getResidenceMapList(this.userName, true); + if (this.userName != null) + this.ResidenceList = Residence.getResidenceManager().getResidenceMapList(this.userName, true); recountResAmount(); } diff --git a/src/plugin.yml b/src/plugin.yml index e0abb853b..a9d5bdf81 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.7.1 +version: 2.9.7.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 173563225a1dc1dfbb9407bb55e9337eb6d6a7ff Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Oct 2015 13:34:19 +0200 Subject: [PATCH 0072/1142] Fix for 0 sec tp delay/ UTF8 config file formating for special symbols --- .../bukkit/residence/ConfigManager.java | 21 ++++++++++++++++++- src/com/bekvon/bukkit/residence/Locale.java | 1 - .../residence/ResidenceCommandListener.java | 6 ++---- .../protection/ClaimedResidence.java | 6 ++---- .../bukkit/residence/utils/RandomTp.java | 2 -- 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 3cca2e1e7..771e0ac7b 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -11,8 +11,13 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ParticleEffects; +import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -221,7 +226,21 @@ public static List ColorsArray(List text, Boolean colorize) { void UpdateConfigFile() { File f = new File(Residence.instance.getDataFolder(), "config.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + if (in == null) + return; + + YamlConfiguration conf = YamlConfiguration.loadConfiguration(in); CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); conf.options().copyDefaults(true); diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index d4e1b1695..8f51836d1 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -12,7 +12,6 @@ import java.util.List; import org.bukkit.ChatColor; -import org.bukkit.Material; import org.bukkit.configuration.Configuration; import org.bukkit.configuration.file.YamlConfiguration; diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 6d08af047..fee7789b5 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -773,12 +773,10 @@ public void run() { .replace("%2", String.valueOf(loc.getY())).replace("%3", String.valueOf(loc.getZ())).replace("%4", String.valueOf(Residence.getConfigManager() .getTeleportDelay()))); ResidenceCommandListener.teleportDelayMap.add(player.getName()); - } - - if (!resadmin) RandomTp.performDelaydTp(loc, player); - else + } else RandomTp.performInstantTp(loc, player); + return true; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 3a0dbfd53..27f1581b8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -824,7 +824,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } if (tpLoc != null) { - if (!isAdmin) + if (Residence.getConfigManager().getTeleportDelay() > 0 &&!isAdmin) performDelaydTp(tpLoc, targetPlayer, reqPlayer, true); else performInstantTp(tpLoc, targetPlayer, reqPlayer, true); @@ -836,7 +836,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r return; } final Location targloc = this.getOutsideFreeLoc(area.getHighLoc()); - if (!isAdmin) + if (Residence.getConfigManager().getTeleportDelay() > 0 &&!isAdmin) performDelaydTp(targloc, targetPlayer, reqPlayer, true); else performInstantTp(targloc, targetPlayer, reqPlayer, true); @@ -854,8 +854,6 @@ public void run() { return; else if (ResidenceCommandListener.teleportDelayMap.contains(targetPlayer.getName())) ResidenceCommandListener.teleportDelayMap.remove(targetPlayer.getName()); - else - return; targetPlayer.teleport(targloc); if (near) targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportNear")); diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index f1f463e13..562fcf555 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -89,8 +89,6 @@ public void run() { return; else if (ResidenceCommandListener.teleportDelayMap.contains(targetPlayer.getName())) ResidenceCommandListener.teleportDelayMap.remove(targetPlayer.getName()); - else - return; targetPlayer.teleport(loc); targetPlayer.sendMessage(ChatColor.YELLOW + NewLanguage.getMessage("Language.RandomTeleport.TeleportSuccess").replace("%1", String.valueOf(loc.getX())) .replace("%2", String.valueOf(loc.getY())).replace("%3", String.valueOf(loc.getZ()))); From b8a509c604d7c2b1d60152494a09593cc01adbfe Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 29 Oct 2015 16:27:16 +0200 Subject: [PATCH 0073/1142] Separated info page into /res and /resadmin for cleaner look --- .../residence/ResidenceCommandListener.java | 6 ++++- .../permissions/PermissionGroup.java | 4 +-- .../bukkit/residence/text/help/HelpEntry.java | 26 ++++++++++++++----- src/plugin.yml | 2 +- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index fee7789b5..d331e055c 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -3,6 +3,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import org.bukkit.Bukkit; @@ -38,6 +39,9 @@ public class ResidenceCommandListener extends Residence { public static HashMap rtMap = new HashMap(); public static List teleportDelayMap = new ArrayList(); + public static List AdminCommands = Arrays.asList("setowner", "removeall", "signupdate", "listhidden", "listallhidden", "server", "clearflags", "resreload", + "resload", "ressignconvert"); + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); server.getPluginManager().callEvent(cevent); @@ -868,7 +872,7 @@ private boolean commandHelp(String[] args, boolean resadmin, CommandSender sende } } if (helppages.containesEntry(helppath)) { - helppages.printHelp(sender, page, helppath); + helppages.printHelp(sender, page, helppath, resadmin); return true; } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 0e1138371..db8680a5d 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -192,16 +192,14 @@ public int getMaxHeight() { return maxHeight; } - public int getMaxZones2() { + public int getMaxZones() { return resmax; } public int getMaxZones(String player) { - int max = PlayerManager.getMaxResidences(player); if (max != -1) return max; - return resmax; } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index dc0906916..7fe29ebd5 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -9,6 +9,9 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.ResidenceCommandListener; +import com.bekvon.bukkit.residence.utils.Debug; + import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -22,6 +25,7 @@ import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; /** * @@ -68,8 +72,8 @@ public static void setLinesPerPage(int lines) { linesPerPage = lines; } - public void printHelp(CommandSender sender, int page) { - List helplines = this.getHelpData(); + public void printHelp(CommandSender sender, int page, boolean resadmin) { + List helplines = this.getHelpData(sender, resadmin); int pagecount = (int) Math.ceil((double) helplines.size() / (double) linesPerPage); if (page > pagecount || page < 1) { sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); @@ -100,11 +104,13 @@ public void printHelp(CommandSender sender, int page) { NextPage = page < pagecount ? NextPage : page; int Prevpage = page - 1; Prevpage = page > 1 ? Prevpage : page; - String prevCmd = !name.equalsIgnoreCase("res") ? "/res " + name + " ? " + Prevpage : "/res ? " + Prevpage; + + String baseCmd = resadmin ? "resadmin" : "res"; + String prevCmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " + Prevpage : "/" + baseCmd + " ? " + Prevpage; String prev = "[\"\",{\"text\":\"" + Residence.getLanguage().getPhrase("PrevInfoPage") + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; - String nextCmd = !name.equalsIgnoreCase("res") ? "/res " + name + " ? " + NextPage : "/res ? " + NextPage; + String nextCmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " + NextPage : "/" + baseCmd + " ? " + NextPage; String next = " {\"text\":\"" + Residence.getLanguage().getPhrase("NextInfoPage") + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; @@ -112,21 +118,27 @@ public void printHelp(CommandSender sender, int page) { } - public void printHelp(CommandSender sender, int page, String path) { + public void printHelp(CommandSender sender, int page, String path, boolean resadmin) { HelpEntry subEntry = this.getSubEntry(path); if (subEntry != null) { - subEntry.printHelp(sender, page); + subEntry.printHelp(sender, page, resadmin); } else { sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); } } - private List getHelpData() { + private List getHelpData(CommandSender sender, boolean resadmin) { List helplines = new ArrayList(); helplines.addAll(Arrays.asList(lines)); if (subentrys.size() > 0) helplines.add(ChatColor.LIGHT_PURPLE + "---" + Residence.getLanguage().getPhrase("SubCommands") + "---"); for (HelpEntry entry : subentrys) { + if (ResidenceCommandListener.AdminCommands.contains(entry.getName().toLowerCase()) && !resadmin) + continue; + + if (!ResidenceCommandListener.AdminCommands.contains(entry.getName().toLowerCase()) && resadmin) + continue; + helplines.add(ChatColor.GREEN + entry.getName() + ChatColor.YELLOW + " - " + entry.getDescription()); } return helplines; diff --git a/src/plugin.yml b/src/plugin.yml index a9d5bdf81..f207cb55a 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.7.2 +version: 2.9.7.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From a76317d6be70eb48c34a0cdace1c481e82696c23 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 1 Nov 2015 18:22:28 +0200 Subject: [PATCH 0074/1142] No player, no permission, so ignoring --- .../residence/containers/ResPlayer.java | 20 +++++++++++-------- .../bukkit/residence/text/help/HelpEntry.java | 3 --- src/plugin.yml | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java index c1c344b69..d4c3edf07 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java @@ -51,8 +51,9 @@ public void recountMaxRes() { if (this.player.isPermissionSet("residence.max.res." + i)) this.maxRes = i; } else { - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res." + i, Residence.getConfigManager().getDefaultWorld())) - this.maxRes = i; + if (ofPlayer != null) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res." + i, Residence.getConfigManager().getDefaultWorld())) + this.maxRes = i; } } } @@ -63,8 +64,9 @@ public void recountMaxRents() { if (this.player.isPermissionSet("residence.max.rents." + i)) this.maxRents = i; } else { - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.rents." + i, Residence.getConfigManager().getDefaultWorld())) - this.maxRents = i; + if (ofPlayer != null) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.rents." + i, Residence.getConfigManager().getDefaultWorld())) + this.maxRents = i; } } } @@ -75,8 +77,9 @@ public void recountMaxSubzones() { if (this.player.isPermissionSet("residence.max.subzones." + i)) this.maxSubzones = i; } else { - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzones." + i, Residence.getConfigManager().getDefaultWorld())) - this.maxSubzones = i; + if (ofPlayer != null) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzones." + i, Residence.getConfigManager().getDefaultWorld())) + this.maxSubzones = i; } } } @@ -87,8 +90,9 @@ public void recountGroup() { if (this.player.hasPermission("residence.group." + one.getKey())) this.group = one.getValue(); } else { - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.group." + one.getKey(), Residence.getConfigManager().getDefaultWorld())) - this.group = one.getValue(); + if (ofPlayer != null) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.group." + one.getKey(), Residence.getConfigManager().getDefaultWorld())) + this.group = one.getValue(); } } } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 7fe29ebd5..82f3cc906 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -10,8 +10,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; -import com.bekvon.bukkit.residence.utils.Debug; - import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -25,7 +23,6 @@ import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; /** * diff --git a/src/plugin.yml b/src/plugin.yml index f207cb55a..44123994d 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.7.4 +version: 2.9.7.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From c9f504a44815b6811a510d504f64f5615c2bccae Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Nov 2015 16:00:14 +0200 Subject: [PATCH 0075/1142] Better WE support --- .../residence/selection/SelectionManager.java | 7 +++++- .../selection/WorldEditSelectionManager.java | 24 +++++++++++++------ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 65d55c45c..79ed37d10 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -610,7 +610,12 @@ public boolean worldEdit(Player player) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldEditNotFound")); return false; } - + + public boolean worldEditUpdate(Player player) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldEditNotFound")); + return false; + } + public void selectBySize(Player player, int xsize, int ysize, int zsize) { Location myloc = player.getLocation(); Location loc1 = new Location(myloc.getWorld(), myloc.getBlockX() + xsize, myloc.getBlockY() + ysize, myloc.getBlockZ() + zsize); diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 0a339e358..de737ffce 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -4,7 +4,9 @@ */ package com.bekvon.bukkit.residence.selection; +import com.bekvon.bukkit.residence.Residence; import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldedit.bukkit.selections.CuboidSelection; import com.sk89q.worldedit.bukkit.selections.Selection; import com.sk89q.worldedit.regions.CuboidRegion; @@ -43,49 +45,57 @@ public boolean worldEdit(Player player) { return false; } + public boolean worldEditUpdate(Player player) { + if (!hasPlacedBoth(player.getName())) + return false; + CuboidSelection selection = new CuboidSelection(player.getWorld(), getPlayerLoc1(player.getName()), getPlayerLoc2(player.getName())); + Residence.wep.setSelection(player, selection); + return true; + } + @Override public void placeLoc1(Player player, Location loc) { -// this.worldEdit(player); super.placeLoc1(player, loc); + this.worldEditUpdate(player); } @Override public void placeLoc2(Player player, Location loc) { -// this.worldEdit(player); super.placeLoc2(player, loc); + this.worldEditUpdate(player); } @Override public void sky(Player player, boolean resadmin) { -// this.worldEdit(player); super.sky(player, resadmin); + this.worldEditUpdate(player); afterSelectionUpdate(player); } @Override public void bedrock(Player player, boolean resadmin) { -// this.worldEdit(player); super.bedrock(player, resadmin); + this.worldEditUpdate(player); afterSelectionUpdate(player); } @Override public void modify(Player player, boolean shift, int amount) { -// this.worldEdit(player); super.modify(player, shift, amount); + this.worldEditUpdate(player); afterSelectionUpdate(player); } @Override public void selectChunk(Player player) { -// this.worldEdit(player); super.selectChunk(player); + this.worldEditUpdate(player); afterSelectionUpdate(player); } @Override public void showSelectionInfo(Player player) { -// this.worldEdit(player); super.showSelectionInfo(player); + this.worldEditUpdate(player); } } From e66f8b19a33694af63bfa3156208506096d9dfc6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Nov 2015 16:34:42 +0200 Subject: [PATCH 0076/1142] This should be here... --- .../bekvon/bukkit/residence/Residence.java | 19 +++++++++++-------- .../residence/containers/ResPlayer.java | 7 +++++-- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 9f64982fe..0a465b08b 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -391,15 +391,7 @@ public void onEnable() { System.out.println("[Residence] Unable to find an economy system..."); } } - try { - this.loadYml(); - } catch (Exception e) { - this.getLogger().log(Level.SEVERE, "Unable to load save file", e); - throw e; - } - if (Residence.getConfigManager().isUseResidenceFileClean()) - FileCleanUp.cleanFiles(); if (rmanager == null) { rmanager = new ResidenceManager(); @@ -413,6 +405,17 @@ public void onEnable() { if (pmanager == null) { pmanager = new PermissionListManager(); } + + try { + this.loadYml(); + } catch (Exception e) { + this.getLogger().log(Level.SEVERE, "Unable to load save file", e); + throw e; + } + + if (Residence.getConfigManager().isUseResidenceFileClean()) + FileCleanUp.cleanFiles(); + if (firstenable) { if (!this.isEnabled()) { return; diff --git a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java index d4c3edf07..e90a6652a 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java @@ -10,6 +10,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.ResidenceManager; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResPlayer { @@ -118,8 +119,10 @@ public PermissionGroup getGroup() { } public void recountRes() { - if (this.userName != null) - this.ResidenceList = Residence.getResidenceManager().getResidenceMapList(this.userName, true); + if (this.userName != null){ + ResidenceManager m = Residence.getResidenceManager(); + this.ResidenceList = m.getResidenceMapList(this.userName, true); + } recountResAmount(); } From a30fcca69c66ddaac72d03b79739e98ebb48b184 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Nov 2015 20:26:00 +0200 Subject: [PATCH 0077/1142] Ramake of help pages. Fix for locale incorrect spelling --- src/com/bekvon/bukkit/residence/Locale.java | 239 ++++++++++-------- .../bekvon/bukkit/residence/Residence.java | 26 +- .../residence/ResidenceCommandListener.java | 38 +-- .../residence/containers/HelpLines.java | 20 ++ .../bukkit/residence/text/help/HelpEntry.java | 96 ++++--- src/plugin.yml | 2 +- 6 files changed, 246 insertions(+), 175 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/containers/HelpLines.java diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 8f51836d1..5daa82cf6 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -412,9 +412,9 @@ public static void LoadLang(String lang) { GetConfigString("CommandHelp.Description", "Contains Help for Residence", writer, conf, true); GetConfigString("CommandHelp.SubCommands.res.Description", "Main Residence Command", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.Info", Arrays.asList("See the residence wiki for more help.", "Wiki: https://github.com/bekvon/Residence/wiki", - "Use /res [command] ? to view more help information."), writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.Info", Arrays.asList("Use /res [command] ? to view more help Information."), writer, conf, true); + // res select GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.Description", "Selection Commands", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.Info", Arrays.asList("This command selects areas for usage with residence.", "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle."), @@ -467,127 +467,41 @@ public static void LoadLang(String lang) { GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Info", Arrays.asList("Usage /res select worldedit", "Sets selection area using the current WorldEdit selection."), writer, conf, true); + // res create GetConfigString("CommandHelp.SubCommands.res.SubCommands.create.Description", "Create Residences", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.create.Info", Arrays.asList("Usage: /res create "), writer, conf, true); + // res remove GetConfigString("CommandHelp.SubCommands.res.SubCommands.remove.Description", "Remove residences.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("Usage: /res remove "), writer, conf, true); - + + // res padd GetConfigString("CommandHelp.SubCommands.res.SubCommands.padd.Description", "Add player to residence.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.padd.Info", Arrays.asList("Usage: /res padd [player]", "Adds essential flags for player"), writer, conf, true); + // res pdel GetConfigString("CommandHelp.SubCommands.res.SubCommands.pdel.Description", "Remove player from residence.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.pdel.Info", Arrays.asList("Usage: /res pdel [player]", "Removes essential flags from player"), writer, conf, true); - + + // res info GetConfigString("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.info.info", + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.info.Info", Arrays.asList("Usage: /res info ", "Leave off to display info for the residence your currently in."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.limits.info", - Arrays.asList("Usage: /res limits", "Shows the limitations you have on creating and managing residences."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.confirm.info", Arrays.asList("Usage: /res confirm", "Confirms removal of a residence."), writer, conf, - true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.subzone.Description", "Create subzones in residences.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.subzone.Info", - Arrays.asList("Usage: /res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.Description", "Manage physical areas for a residence.", writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Description", "List physical areas in a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Info", - Arrays.asList("Usage: /res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Description", "List coordinates and other info for areas", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("Usage: /res area listall [residence] "), writer, - conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Description", "Add physical areas to a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Info", - Arrays.asList("Usage: /res area add [residence] [areaID]", "You must first select two points first."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Description", "Remove physical areas from a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("Usage: /res area remove [residence] [areaID]"), writer, - conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Description", "Replace physical areas in a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("Usage: /res area replace [residence] [areaID]", - "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages", writer, conf, true); - GetConfigArray( - "CommandHelp.SubCommands.res.SubCommands.message.info", Arrays.asList("Usage: /res message [enter/leave] [message]", - "Set the enter or leave message of a residence.", "Usage: /res message remove [enter/leave]", "Removes a enter or leave message."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.Description", "Manage residence leases", writer, conf, true); - GetConfigArray( - "CommandHelp.SubCommands.res.SubCommands.lease.info", Arrays.asList("Usage: /res lease [renew/cost] [residence]", - "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money."), - writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time (admin only)", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", - Arrays.asList("Usage: /resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite."), writer, conf, - true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.bank.Info", - Arrays.asList("Usage: /res bank [deposit/withdraw] [amount]", "You must be standing in a Residence", "You must have the +bank flag."), writer, conf, - true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.tp.Description", "Teleport to a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tp.Info", - Arrays.asList("Usage: /res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", - "Your permission group must also be allowed to teleport by the server admin."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.rt.Description", "Teleports to random location in world", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.rt.Info", - Arrays.asList("Usage: /res rt", "Teleports you to random location in defined world."), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning and teleport anyways", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", - Arrays.asList("Usage: /res tpconfirm", "Teleports you to a residence, when teleportation is unsafe."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpset.Description", "Set the teleport location of a Residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpset.Info", - Arrays.asList("Usage: /res tpset", "This will set the teleport location for a residence to where your standing.", - "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence."), - writer, conf, true); - + // res set GetConfigString("CommandHelp.SubCommands.res.SubCommands.set.Description", "Set general flags on a Residence", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.set.Info", Arrays.asList("Usage: /res set [flag] [true/false/remove]", "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)"), writer, conf, true); + // res pset GetConfigString("CommandHelp.SubCommands.res.SubCommands.pset.Description", "Set flags on a specific player for a Residence.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.pset.Info", Arrays.asList("Usage: /res pset [player] [flag] [true/false/remove]", "Usage: /res pset [player] removeall", "To see a list of flags, use /res flags ?"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.gset.Description", "Set flags on a specific group for a Residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.gset.Info", - Arrays.asList("Usage: /res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?"), writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lset.Description", "Change blacklist and ignorelist options", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lset.Info", - Arrays.asList("Usage: /res lset [blacklist/ignorelist] [material]", - "Usage: /res lset info", - "Blacklisting a material prevents it from being placed in the residence.", - "Ignorelist causes a specific material to not be protected by Residence."), - writer, conf, true); - - GetConfigString("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("Usage: /res removeall [owner]", - "Removes all residences owned by a specific player.'", - "Requires /resadmin if you use it on anyone besides yourself."), writer, conf, true); - + // res flags GetConfigString("CommandHelp.SubCommands.res.SubCommands.flags.Description", "List of flags", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.flags.Info", Arrays.asList("For flag values, usually true allows the action, and false denys the action.", @@ -642,7 +556,7 @@ public static void LoadLang(String lang) { "&2note &3- &eallows or denys players to use note blocks", "&2redstone &3- &eGives lever, diode, button, pressure, note flags", "&2craft &3- &eGives table, enchant, brew flags", - "&2traample &3- &eAllows or denys crop trampling in residence", + "&2trample &3- &eAllows or denys crop trampling in residence", "&2trade &3- &eAllows or denys villager trading in residence", "&2nomobs &3- &ePrevents monsters from entering residence residence", "&2explode &3- &eAllows or denys explosions in residences", @@ -654,6 +568,109 @@ public static void LoadLang(String lang) { "&2burn &3- &eallows or denys Mob combustion in residences"), writer, conf, true); + //res limits + GetConfigString("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.limits.Info", + Arrays.asList("Usage: /res limits", "Shows the limitations you have on creating and managing residences."), writer, conf, true); + + // res tpset + GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpset.Description", "Set the teleport location of a Residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpset.Info", + Arrays.asList("Usage: /res tpset", "This will set the teleport location for a residence to where your standing.", + "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence."), + writer, conf, true); + + // res tp + GetConfigString("CommandHelp.SubCommands.res.SubCommands.tp.Description", "Teleport to a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tp.Info", + Arrays.asList("Usage: /res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", + "Your permission group must also be allowed to teleport by the server admin."), writer, conf, true); + + // res rt + GetConfigString("CommandHelp.SubCommands.res.SubCommands.rt.Description", "Teleports to random location in world", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.rt.Info", + Arrays.asList("Usage: /res rt", "Teleports you to random location in defined world."), writer, conf, true); + + // res tpconfirm + GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", + Arrays.asList("Usage: /res tpconfirm", "Teleports you to a residence, when teleportation is unsafe."), + writer, conf, true); + + // res subzone + GetConfigString("CommandHelp.SubCommands.res.SubCommands.subzone.Description", "Create subzones in residences.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.subzone.Info", + Arrays.asList("Usage: /res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.Description", "Manage physical areas for a residence.", writer, conf, true); + //res area + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Description", "List physical areas in a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Info", + Arrays.asList("Usage: /res area list [residence] "), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Description", "List coordinates and other Info for areas", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("Usage: /res area listall [residence] "), writer, + conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Description", "Add physical areas to a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Info", + Arrays.asList("Usage: /res area add [residence] [areaID]", "You must first select two points first."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Description", "Remove physical areas from a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("Usage: /res area remove [residence] [areaID]"), writer, + conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Description", "Replace physical areas in a residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("Usage: /res area replace [residence] [areaID]", + "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger."), writer, conf, true); + + // res message + GetConfigString("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.message.Info", Arrays.asList("Usage: /res message [enter/leave] [message]", + "Set the enter or leave message of a residence.", "Usage: /res message remove [enter/leave]", "Removes a enter or leave message."), + writer, conf, true); + + // res lease + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.Description", "Manage residence leases", writer, conf, true); + GetConfigArray( + "CommandHelp.SubCommands.res.SubCommands.lease.Info", Arrays.asList("Usage: /res lease [renew/cost] [residence]", + "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money."), + writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", + Arrays.asList("Usage: /resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite."), writer, conf, + true); + + // res bank + GetConfigString("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.bank.Info", + Arrays.asList("Usage: /res bank [deposit/withdraw] [amount]", "You must be standing in a Residence", "You must have the +bank flag."), writer, conf, + true); + + // res confirm + GetConfigString("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.confirm.Info", Arrays.asList("Usage: /res confirm", "Confirms removal of a residence."), writer, conf, + true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.gset.Description", "Set flags on a specific group for a Residence.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.gset.Info", + Arrays.asList("Usage: /res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lset.Description", "Change blacklist and ignorelist options", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lset.Info", + Arrays.asList("Usage: /res lset [blacklist/ignorelist] [material]", + "Usage: /res lset Info", + "Blacklisting a material prevents it from being placed in the residence.", + "Ignorelist causes a specific material to not be protected by Residence."), + writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player.", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("Usage: /res removeall [owner]", + "Removes all residences owned by a specific player.'", + "Requires /resadmin if you use it on anyone besides yourself."), writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.list.Description", "List Residences", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.list.Info", Arrays.asList("Usage: /res list ", @@ -662,7 +679,7 @@ public static void LoadLang(String lang) { "To list everyones residences, use /res listall."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.listhidden.Description", "List Hidden Residences (ADMIN ONLY)", writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.listhidden.Description", "List Hidden Residences", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listhidden.Info", Arrays.asList("Usage: /res listhidden ", "Lists hidden residences for a player."), @@ -674,7 +691,7 @@ public static void LoadLang(String lang) { "Lists hidden residences for a player."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.listallhidden.Description", "List All Hidden Residences (ADMIN ONLY)", writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.listallhidden.Description", "List All Hidden Residences", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listallhidden.Info", Arrays.asList("Usage: /res listhidden ", "Lists all hidden residences on the server."), @@ -712,12 +729,12 @@ public static void LoadLang(String lang) { GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.Description", "Buy, Sell, or Rent Residences", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.mirror.Info", - Arrays.asList("Usage: /res market ? for more info"), + Arrays.asList("Usage: /res market ? for more Info"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.info.Description", "Get economy info on residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.info.Info", - Arrays.asList("Usage: /res market info [residence]", "Shows if the Residence is for sale or for rent, and the cost."), + GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Description", "Get economy Info on residence", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Info", + Arrays.asList("Usage: /res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost."), writer, conf, true); GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Description", "Lists rentable and for sale residences.", writer, conf, true); @@ -810,27 +827,27 @@ public static void LoadLang(String lang) { Arrays.asList("Usage: /res lists view "), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.server.Description", "Make land server owned (admin only).", writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.server.Description", "Make land server owned.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.server.Info", Arrays.asList("Usage: /resadmin server [residence]", "Make a residence server owned."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.setowner.Description", "Change owner of a residence (admin only).", writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.setowner.Description", "Change owner of a residence.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.setowner.Info", Arrays.asList("Usage: /resadmin setowner [residence] [player]"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence (admin only).", writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.resreload.Info", Arrays.asList("Usage: /resreload"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.resload.Description", "Load residence save file (UNSAFE, admin only).", writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.resload.Description", "Load residence save file.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.resload.Info", Arrays.asList("Usage: /resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Description", "Converts ResidenceSigns plugins saved signs (admin only).", writer, conf, + GetConfigString("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Description", "Converts ResidenceSigns plugins saved signs.", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Info", Arrays.asList("Usage: /ressignconvert"), writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 0a465b08b..e80b2652f 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -83,6 +83,8 @@ import fr.crafter.tickleman.realplugin.RealPlugin; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + import org.bukkit.OfflinePlayer; /** @@ -127,7 +129,7 @@ public class Residence extends JavaPlugin { protected Map deleteConfirm; protected static List resadminToggle; private final static String[] validLanguages = { "English", "German", "French", "Hungarian", "Spanish", "Chinese", "Czech", "Brazilian", "Polish", "Lithuanian" }; - public static HashMap UUIDList = new HashMap(); + public static ConcurrentHashMap UUIDList = new ConcurrentHashMap(); public static WorldEditPlugin wep = null; public static WorldGuardPlugin wg = null; public static int wepid; @@ -273,7 +275,7 @@ public void onEnable() { } FlagUtil.load(); - + String packageName = getServer().getClass().getPackage().getName(); String[] packageSplit = packageName.split("\\."); String version = packageSplit[packageSplit.length - 1].split("(?<=\\G.{4})")[0]; @@ -350,7 +352,6 @@ public void onEnable() { FileConfiguration langconfig = new YamlConfiguration(); langconfig.load(in); helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - HelpEntry.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); language = Language.parseText(langconfig, "Language"); } else { @@ -392,7 +393,6 @@ public void onEnable() { } } - if (rmanager == null) { rmanager = new ResidenceManager(); } @@ -405,7 +405,7 @@ public void onEnable() { if (pmanager == null) { pmanager = new PermissionListManager(); } - + try { this.loadYml(); } catch (Exception e) { @@ -415,7 +415,7 @@ public void onEnable() { if (Residence.getConfigManager().isUseResidenceFileClean()) FileCleanUp.cleanFiles(); - + if (firstenable) { if (!this.isEnabled()) { return; @@ -513,7 +513,19 @@ public void onEnable() { @Override public void run() { for (OfflinePlayer player : Residence.getServ().getOfflinePlayers()) { - UUIDList.put(player.getName().toLowerCase(), player.getUniqueId()); + if (player == null) + continue; + + String name = player.getName(); + if (name == null) + continue; + + UUID id = player.getUniqueId(); + + if (id == null) + continue; + + UUIDList.put(name.toLowerCase(), id); } return; } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index d331e055c..e1e69e592 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -855,28 +855,28 @@ public void run() { } private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender) { - if (helppages != null) { - String helppath = "res"; - for (int i = 0; i < args.length; i++) { - if (args[i].equalsIgnoreCase("?")) { - break; - } - helppath = helppath + "." + args[i]; - } - int page = 1; - if (!args[args.length - 1].equalsIgnoreCase("?")) { - try { - page = Integer.parseInt(args[args.length - 1]); - } catch (Exception ex) { - sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidHelp")); - } + if (helppages == null) + return false; + + String helppath = "res"; + for (int i = 0; i < args.length; i++) { + if (args[i].equalsIgnoreCase("?")) { + break; } - if (helppages.containesEntry(helppath)) { - helppages.printHelp(sender, page, helppath, resadmin); - return true; + helppath = helppath + "." + args[i]; + } + int page = 1; + if (!args[args.length - 1].equalsIgnoreCase("?")) { + try { + page = Integer.parseInt(args[args.length - 1]); + } catch (Exception ex) { + sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidHelp")); } } - return false; + if (helppages.containesEntry(helppath)) + helppages.printHelp(sender, page, helppath, resadmin); + + return true; } private boolean commandResExpand(String[] args, boolean resadmin, Player player, int page) { diff --git a/src/com/bekvon/bukkit/residence/containers/HelpLines.java b/src/com/bekvon/bukkit/residence/containers/HelpLines.java new file mode 100644 index 000000000..b7956d1b7 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/HelpLines.java @@ -0,0 +1,20 @@ +package com.bekvon.bukkit.residence.containers; + +public class HelpLines { + + private String command; + private String desc; + + public HelpLines(String command, String desc) { + this.command = command; + this.desc = desc; + } + + public String getCommand() { + return this.command; + } + + public String getDesc() { + return this.desc; + } +} diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 82f3cc906..36ff5ea1f 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -10,6 +10,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; +import com.bekvon.bukkit.residence.containers.HelpLines; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -33,7 +34,7 @@ public class HelpEntry { protected String desc; protected String[] lines; protected List subentrys; - protected static int linesPerPage = 7; + protected static int linesPerPage = 8; public HelpEntry(String entryname) { name = entryname; @@ -61,36 +62,53 @@ public String getDescription() { return desc; } - public static int getLinesPerPage() { - return linesPerPage; - } - - public static void setLinesPerPage(int lines) { - linesPerPage = lines; - } - - public void printHelp(CommandSender sender, int page, boolean resadmin) { - List helplines = this.getHelpData(sender, resadmin); + public void printHelp(CommandSender sender, int page, boolean resadmin, String path) { + List helplines = this.getHelpData(sender, resadmin); + path = "/" + path.replace(".", " ") + " "; int pagecount = (int) Math.ceil((double) helplines.size() / (double) linesPerPage); if (page > pagecount || page < 1) { sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); return; } - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("HelpPageHeader", ChatColor.YELLOW + name + ChatColor.RED + "|" + ChatColor.YELLOW + page - + ChatColor.RED + "|" + ChatColor.YELLOW + pagecount + ChatColor.RED)); - sender.sendMessage(ChatColor.DARK_AQUA + Residence.getLanguage().getPhrase("Description") + ": " + ChatColor.GREEN + desc); + + String separator = ChatColor.GOLD + ""; + String simbol = "\u25AC"; + for (int i = 0; i < 5; i++) { + separator += simbol; + } + + sender.sendMessage(ChatColor.GOLD + separator + " " + Residence.getLanguage().getPhrase("HelpPageHeader", ChatColor.YELLOW + path + ChatColor.GOLD + "|" + + ChatColor.YELLOW + page + ChatColor.GOLD + "|" + ChatColor.YELLOW + pagecount + ChatColor.GOLD) + " " + separator); +// sender.sendMessage(ChatColor.DARK_AQUA + Residence.getLanguage().getPhrase("Description") + ": " + ChatColor.GREEN + desc); int start = linesPerPage * (page - 1); int end = start + linesPerPage; - boolean alternatecolor = false; for (int i = start; i < end; i++) { if (helplines.size() > i) { - if (alternatecolor) { - sender.sendMessage(ChatColor.YELLOW + helplines.get(i)); - alternatecolor = false; - } else { - sender.sendMessage(ChatColor.GOLD + helplines.get(i)); - alternatecolor = true; - } + + if (helplines.get(i).getCommand() != null) { + HelpEntry sub = this.getSubEntry(helplines.get(i).getCommand()); + + String desc = ""; + int y = 0; + for (String one : sub.lines) { + desc += ChatColor.GOLD + one; + y++; + if (y < sub.lines.length) { + desc += "\n"; + } + } + + if (resadmin) + path = path.replace("/res ", "/resadmin "); + + String prev = "[\"\",{\"text\":\"" + ChatColor.GOLD + " " + helplines.get(i).getDesc() + + "\",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + path + helplines.get(i).getCommand() + + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev); + + } else + sender.sendMessage(ChatColor.GOLD + " " + helplines.get(i).getDesc()); } } @@ -101,42 +119,46 @@ public void printHelp(CommandSender sender, int page, boolean resadmin) { NextPage = page < pagecount ? NextPage : page; int Prevpage = page - 1; Prevpage = page > 1 ? Prevpage : page; - + String baseCmd = resadmin ? "resadmin" : "res"; String prevCmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " + Prevpage : "/" + baseCmd + " ? " + Prevpage; - String prev = "[\"\",{\"text\":\"" + Residence.getLanguage().getPhrase("PrevInfoPage") + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" - + prevCmd + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLanguage().getPhrase("PrevInfoPage") + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " + NextPage : "/" + baseCmd + " ? " + NextPage; - String next = " {\"text\":\"" + Residence.getLanguage().getPhrase("NextInfoPage") + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + String next = " {\"text\":\"" + Residence.getLanguage().getPhrase("NextInfoPage") + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); - } public void printHelp(CommandSender sender, int page, String path, boolean resadmin) { HelpEntry subEntry = this.getSubEntry(path); if (subEntry != null) { - subEntry.printHelp(sender, page, resadmin); + subEntry.printHelp(sender, page, resadmin, path); } else { sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); } } - private List getHelpData(CommandSender sender, boolean resadmin) { - List helplines = new ArrayList(); - helplines.addAll(Arrays.asList(lines)); - if (subentrys.size() > 0) - helplines.add(ChatColor.LIGHT_PURPLE + "---" + Residence.getLanguage().getPhrase("SubCommands") + "---"); + private List getHelpData(CommandSender sender, boolean resadmin) { + List helplines = new ArrayList(); + + for (String one : lines) { + helplines.add(new HelpLines(null, one)); + } + +// helplines.addAll(Arrays.asList(lines)); +// if (subentrys.size() > 0) +// helplines.add(ChatColor.LIGHT_PURPLE + "---" + Residence.getLanguage().getPhrase("SubCommands") + "---"); for (HelpEntry entry : subentrys) { if (ResidenceCommandListener.AdminCommands.contains(entry.getName().toLowerCase()) && !resadmin) continue; - + if (!ResidenceCommandListener.AdminCommands.contains(entry.getName().toLowerCase()) && resadmin) continue; - helplines.add(ChatColor.GREEN + entry.getName() + ChatColor.YELLOW + " - " + entry.getDescription()); + helplines.add(new HelpLines(entry.getName(), ChatColor.GREEN + entry.getName() + ChatColor.GOLD + " - " + entry.getDescription())); } return helplines; } @@ -194,7 +216,7 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { if (stringList != null) { entry.lines = new String[stringList.size()]; for (int i = 0; i < stringList.size(); i++) { - entry.lines[i] = "- " + ChatColor.translateAlternateColorCodes('&', stringList.get(i)); + entry.lines[i] = ChatColor.translateAlternateColorCodes('&', stringList.get(i)); } } } diff --git a/src/plugin.yml b/src/plugin.yml index 44123994d..5d6a51e49 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.7.5 +version: 2.9.8.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 93d19e545c07fb2b54401a6b888886ed614b75c9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 4 Nov 2015 17:56:39 +0200 Subject: [PATCH 0078/1142] Fix for locale reader messing up some locale files --- .../bukkit/residence/CommentedYamlConfiguration.java | 8 ++++---- src/com/bekvon/bukkit/residence/Locale.java | 6 ++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java b/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java index be51563f5..8048fe6be 100644 --- a/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java +++ b/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import org.apache.commons.lang.StringEscapeUtils; @@ -26,7 +27,6 @@ public CommentedYamlConfiguration() { comments = new HashMap(); } - @Override public void save(String file) throws IOException { if (file == null) { throw new IllegalArgumentException("File cannot be null"); @@ -35,7 +35,6 @@ public void save(String file) throws IOException { save(new File(file)); } - @Override public void save(File file) throws IOException { if (file == null) { throw new IllegalArgumentException("File cannot be null"); @@ -44,9 +43,10 @@ public void save(File file) throws IOException { Files.createParentDirs(file); String data = insertComments(saveToString()); + data = data.replace("\\x", "\\u00"); data = StringEscapeUtils.unescapeJava(data); - - Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); + + Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8)); try { writer.write(data); diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 5daa82cf6..84cd0ea5f 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -6,7 +6,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -58,9 +58,7 @@ public static void LoadLang(String lang) { BufferedReader in = null; try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); + in = new BufferedReader(new InputStreamReader(new FileInputStream(f), StandardCharsets.UTF_8)); } catch (FileNotFoundException e1) { e1.printStackTrace(); } From ea03106d1e7d9fff5a95be3a245f8db14abc57bf Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 5 Nov 2015 17:54:56 +0200 Subject: [PATCH 0079/1142] Fix for online player amount/ fix for actionbar double messaging Started work on residence shop list feature --- src/com/bekvon/bukkit/residence/NMS.java | 2 - .../bekvon/bukkit/residence/Residence.java | 23 +++++ .../residence/ResidenceCommandListener.java | 16 +++- .../bekvon/bukkit/residence/allNms/v1_7.java | 8 -- .../residence/allNms/v1_7_Couldron.java | 6 -- .../bekvon/bukkit/residence/allNms/v1_8.java | 6 -- .../residence/protection/FlagPermissions.java | 3 + .../protection/ResidenceManager.java | 23 +++++ .../residence/shopUtil/ShopListener.java | 89 +++++++++++++++++++ .../residence/shopUtil/ShopSignInfo.java | 28 ++++++ .../bukkit/residence/shopUtil/ShopSigns.java | 73 +++++++++++++++ .../bukkit/residence/shopUtil/Shops.java | 19 ++++ .../bukkit/residence/utils/ActionBar.java | 8 -- src/com/residence/mcstats/Metrics.java | 4 +- src/plugin.yml | 2 +- 15 files changed, 275 insertions(+), 35 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/shopUtil/ShopListener.java create mode 100644 src/com/bekvon/bukkit/residence/shopUtil/ShopSignInfo.java create mode 100644 src/com/bekvon/bukkit/residence/shopUtil/ShopSigns.java create mode 100644 src/com/bekvon/bukkit/residence/shopUtil/Shops.java diff --git a/src/com/bekvon/bukkit/residence/NMS.java b/src/com/bekvon/bukkit/residence/NMS.java index a6cb710da..9f2a6b374 100644 --- a/src/com/bekvon/bukkit/residence/NMS.java +++ b/src/com/bekvon/bukkit/residence/NMS.java @@ -27,6 +27,4 @@ public interface NMS { public boolean isSpectator(GameMode mode); public void addDefaultFlags(Map matUseFlagList); - - public int getOnlinePlayerAmount(); } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index e80b2652f..724cd44b8 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -60,14 +60,17 @@ import com.bekvon.bukkit.residence.protection.LeaseManager; import com.bekvon.bukkit.residence.protection.PermissionListManager; import com.bekvon.bukkit.residence.protection.ResidenceManager; +import com.bekvon.bukkit.residence.protection.ResidencePermissions; import com.bekvon.bukkit.residence.protection.WorldFlagManager; import com.bekvon.bukkit.residence.selection.SelectionManager; import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; +import com.bekvon.bukkit.residence.shopUtil.ShopListener; import com.bekvon.bukkit.residence.spout.ResidenceSpoutListener; import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.CrackShot; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.TabComplete; import com.bekvon.bukkit.residence.utils.VersionChecker; @@ -102,6 +105,7 @@ public class Residence extends JavaPlugin { protected static ResidencePlayerListener plistener; protected static ResidenceEntityListener elistener; protected static ResidenceSpoutListener slistener; + protected static ShopListener shlistener; protected static TransactionManager tmanager; protected static PermissionListManager pmanager; protected static LeaseManager leasemanager; @@ -277,6 +281,7 @@ public void onEnable() { FlagUtil.load(); String packageName = getServer().getClass().getPackage().getName(); + String[] packageSplit = packageName.split("\\."); String version = packageSplit[packageSplit.length - 1].split("(?<=\\G.{4})")[0]; try { @@ -444,11 +449,15 @@ public void onEnable() { plistener = new ResidencePlayerListener(); elistener = new ResidenceEntityListener(); + shlistener = new ShopListener(); + PluginManager pm = getServer().getPluginManager(); pm.registerEvents(blistener, this); pm.registerEvents(plistener, this); pm.registerEvents(elistener, this); + pm.registerEvents(shlistener, this); + // 1.8 event if (VersionChecker.GetVersion() >= 1800) pm.registerEvents(new v1_8Events(), this); @@ -872,6 +881,20 @@ protected boolean loadYml() throws Exception { } rmanager = ResidenceManager.load(worlds); + + // Getting shop residences + Map resList = rmanager.getResidences(); + for (Entry one : resList.entrySet()) { + + ResidencePermissions perms = one.getValue().getPermissions(); + if (!perms.has("shop", false)) + continue; + + rmanager.addShop(one.getValue()); + } + + Debug.D("" + rmanager.getShops().size()); + loadFile = new File(saveFolder, "forsale.yml"); if (loadFile.isFile()) { yml = new YMLSaveHelper(loadFile); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index e1e69e592..7a0420e37 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -6,6 +6,8 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.Map.Entry; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -28,6 +30,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.selection.WorldGuardUtil; +import com.bekvon.bukkit.residence.shopUtil.Shops; import com.bekvon.bukkit.residence.spout.ResidenceSpout; import com.bekvon.bukkit.residence.utils.RandomTp; import com.sk89q.worldedit.bukkit.WorldEditPlugin; @@ -581,6 +584,17 @@ public void run() { } return false; } + if (cmd.equals("shoplist")) { + if (args.length == 1) { + int i = 1; + for (Entry one : rmanager.getShops().entrySet()) { + player.sendMessage(ChatColor.GOLD + "" + i + ". " + ChatColor.YELLOW + "" + one.getKey() + " (" + one.getValue().getRes().getOwner() + ")"); + i++; + } + return true; + } + return false; + } if (cmd.equals("listhidden")) { if (!resadmin) { player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); @@ -874,7 +888,7 @@ private boolean commandHelp(String[] args, boolean resadmin, CommandSender sende } } if (helppages.containesEntry(helppath)) - helppages.printHelp(sender, page, helppath, resadmin); + helppages.printHelp(sender, page, helppath, resadmin); return true; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index a04f92b39..51d70ec5a 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -4,7 +4,6 @@ import java.util.List; import java.util.Map; -import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; @@ -25,8 +24,6 @@ import org.bukkit.event.block.BlockPistonRetractEvent; import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions; public class v1_7 implements NMS { @Override @@ -101,9 +98,4 @@ public boolean isSpectator(GameMode mode) { @Override public void addDefaultFlags(Map matUseFlagList) { } - - @Override - public int getOnlinePlayerAmount() { - return Bukkit.getServer().getOnlinePlayers().length; - } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 8dea53330..c4179a6cf 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -4,7 +4,6 @@ import java.util.List; import java.util.Map; -import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; @@ -99,9 +98,4 @@ public boolean isSpectator(GameMode mode) { @Override public void addDefaultFlags(Map matUseFlagList) { } - - @Override - public int getOnlinePlayerAmount() { - return Bukkit.getServer().getOnlinePlayers().size(); - } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java index 8d0ef871e..f81005d54 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8.java @@ -4,7 +4,6 @@ import java.util.List; import java.util.Map; -import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; @@ -126,9 +125,4 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, "door"); matUseFlagList.put(Material.IRON_TRAPDOOR, "door"); } - - @Override - public int getOnlinePlayerAmount() { - return Bukkit.getServer().getOnlinePlayers().size(); - } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index ee06539e6..50aee53af 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -196,6 +196,9 @@ public static void initValidFlags() { // Players will keep hes exp on death addResidenceOnlyFlag("keepexp"); + // Special flag for making residence as shop + addResidenceOnlyFlag("shop"); + addPlayerOrGroupOnlyFlag("admin"); addFlagToFlagGroup("redstone", "note"); addFlagToFlagGroup("redstone", "pressure"); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index a04268aa4..eaab2ee6c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -27,6 +27,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.selection.AutoSelection; +import com.bekvon.bukkit.residence.shopUtil.Shops; import com.bekvon.bukkit.residence.text.help.InformationPager; /** @@ -36,6 +37,7 @@ public class ResidenceManager { protected Map residences; protected Map>> chunkResidences; + protected Map shops = new HashMap(); public ResidenceManager() { residences = new HashMap<>(); @@ -118,6 +120,23 @@ public String getNameByRes(ClaimedResidence res) { return null; } + public void addShop(ClaimedResidence res) { + Shops shop = new Shops(res); + shops.put(res.getName(), shop); + } + + public void removeShop(ClaimedResidence res) { + removeShop(res.getName()); + } + + public void removeShop(String resName) { + shops.remove(resName); + } + + public Map getShops() { + return shops; + } + public boolean addResidence(String name, Location loc1, Location loc2) { return this.addResidence(name, "Server_Land", loc1, loc2); } @@ -786,6 +805,10 @@ public int getResidenceCount() { return residences.size(); } + public Map getResidences() { + return residences; + } + public void removeChunkList(String name) { ClaimedResidence res = residences.get(name); if (res != null) { diff --git a/src/com/bekvon/bukkit/residence/shopUtil/ShopListener.java b/src/com/bekvon/bukkit/residence/shopUtil/ShopListener.java new file mode 100644 index 000000000..58edafcec --- /dev/null +++ b/src/com/bekvon/bukkit/residence/shopUtil/ShopListener.java @@ -0,0 +1,89 @@ +package com.bekvon.bukkit.residence.shopUtil; + +import org.bukkit.ChatColor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; + +public class ShopListener implements Listener { + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeShop(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase("shop")) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + Residence.getResidenceManager().removeShop(event.getResidence()); + break; + case INVALID: + break; + case TRUE: + Residence.getResidenceManager().addShop(event.getResidence()); + event.getResidence().getPermissions().setFlag("tp", FlagState.TRUE); + event.getResidence().getPermissions().setFlag("move", FlagState.TRUE); + event.getResidence().getPermissions().setFlag("pvp", FlagState.FALSE); + break; + default: + break; + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onFlagChange(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + + if (event.getFlag().equalsIgnoreCase("tp") && event.getNewState() == FlagState.TRUE) + return; + + if (event.getFlag().equalsIgnoreCase("move") && event.getNewState() == FlagState.TRUE) + return; + + if (event.getFlag().equalsIgnoreCase("pvp") && event.getNewState() == FlagState.FALSE) + return; + + if (!event.getFlag().equalsIgnoreCase("move") && !event.getFlag().equalsIgnoreCase("tp") && !event.getFlag().equalsIgnoreCase("pvp")) + return; + + if (!event.getResidence().getPermissions().has("shop", false)) + return; + + event.setCancelled(true); + + if (event.getPlayer() != null) + event.getPlayer().sendMessage(ChatColor.YELLOW + "Can't change while shop flag is set to true"); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceCreate(ResidenceCreationEvent event) { + if (event.isCancelled()) + return; + + if (!event.getResidence().getPermissions().has("shop", false)) + return; + + Residence.getResidenceManager().addShop(event.getResidence()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceRemove(ResidenceDeleteEvent event) { + if (event.isCancelled()) + return; + + if (!event.getResidence().getPermissions().has("shop", true)) + return; + + Residence.getResidenceManager().removeShop(event.getResidence()); + } +} diff --git a/src/com/bekvon/bukkit/residence/shopUtil/ShopSignInfo.java b/src/com/bekvon/bukkit/residence/shopUtil/ShopSignInfo.java new file mode 100644 index 000000000..a9c824a6c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/shopUtil/ShopSignInfo.java @@ -0,0 +1,28 @@ +package com.bekvon.bukkit.residence.shopUtil; + +import java.util.ArrayList; +import java.util.List; + +public class ShopSignInfo { + + List AllSigns = new ArrayList(); + + public ShopSignInfo() { + } + + public void setAllSigns(List AllSigns) { + this.AllSigns = AllSigns; + } + + public List GetAllSigns() { + return this.AllSigns; + } + + public void removeSign(ShopSigns sign) { + this.AllSigns.remove(sign); + } + + public void addSign(ShopSigns sign) { + this.AllSigns.add(sign); + } +} diff --git a/src/com/bekvon/bukkit/residence/shopUtil/ShopSigns.java b/src/com/bekvon/bukkit/residence/shopUtil/ShopSigns.java new file mode 100644 index 000000000..5353d5678 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/shopUtil/ShopSigns.java @@ -0,0 +1,73 @@ +package com.bekvon.bukkit.residence.shopUtil; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; + +public class ShopSigns { + + String Residence = null; + String world = null; + double x = 0.01; + double y = 0.01; + double z = 0.01; + + Location loc = null; + + public ShopSigns() { + } + + public void setLocation(Location Location) { + this.loc = Location; + } + + public Location GetLocation() { + if (this.loc == null) { + World w = Bukkit.getWorld(this.world); + if (w != null) + this.loc = new Location(Bukkit.getWorld(this.world), this.x, this.y, this.z); + } + return this.loc; + } + + public void setResidence(String Residence) { + this.Residence = Residence; + } + + public String GetResidence() { + return this.Residence; + } + + public void setWorld(String World) { + this.world = World; + } + + public String GetWorld() { + return this.world; + } + + public void setX(double x) { + this.x = x; + } + + public double GetX() { + return this.x; + } + + public void setY(double y) { + this.y = y; + } + + public double GetY() { + return this.y; + } + + public void setZ(double z) { + this.z = z; + } + + public double GetZ() { + return this.z; + } + +} diff --git a/src/com/bekvon/bukkit/residence/shopUtil/Shops.java b/src/com/bekvon/bukkit/residence/shopUtil/Shops.java new file mode 100644 index 000000000..fcedb15fd --- /dev/null +++ b/src/com/bekvon/bukkit/residence/shopUtil/Shops.java @@ -0,0 +1,19 @@ +package com.bekvon.bukkit.residence.shopUtil; + +import org.bukkit.Location; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class Shops { + + ClaimedResidence res = null; + Location loc = null; + + public Shops(ClaimedResidence res) { + this.res = res; + } + + public ClaimedResidence getRes() { + return this.res; + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index 1f2005c4e..033ccf980 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -56,14 +56,6 @@ public static void send(Player receivingPacket, String msg) { } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException ex) { Bukkit.getLogger().log(Level.SEVERE, "Error {0} " + version, ex); } - - try { - Object player = getHandle.invoke(receivingPacket); - Object connection = playerConnection.get(player); - sendPacket.invoke(connection, packet); - } catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); - } } private static String getCraftPlayerClasspath() { diff --git a/src/com/residence/mcstats/Metrics.java b/src/com/residence/mcstats/Metrics.java index 3584bc5a5..9bce86b23 100644 --- a/src/com/residence/mcstats/Metrics.java +++ b/src/com/residence/mcstats/Metrics.java @@ -34,8 +34,6 @@ import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.scheduler.BukkitTask; -import com.bekvon.bukkit.residence.Residence; - import java.io.BufferedReader; import java.io.File; import java.io.IOException; @@ -356,7 +354,7 @@ private void postPlugin(final boolean isPing) throws IOException { boolean onlineMode = Bukkit.getServer().getOnlineMode(); // TRUE if online mode is enabled String pluginVersion = description.getVersion(); String serverVersion = Bukkit.getVersion(); - int playersOnline = Residence.getNms().getOnlinePlayerAmount(); + int playersOnline = Bukkit.getServer().getOnlinePlayers().toArray().length; // END server software specific section -- all code below does not use any code outside of this class / Java diff --git a/src/plugin.yml b/src/plugin.yml index 5d6a51e49..d10b4ace6 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.8.0 +version: 2.9.8.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 0b5854500409bfe687e5de3a73560a089eaf8390 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 9 Nov 2015 12:13:10 +0200 Subject: [PATCH 0080/1142] New shop feature / added compatibility for res bank -> console Some changes in offline player handling --- .../bukkit/residence/ConfigManager.java | 60 +- src/com/bekvon/bukkit/residence/Locale.java | 23 +- .../bekvon/bukkit/residence/NewLanguage.java | 30 + .../bekvon/bukkit/residence/Residence.java | 82 +- .../residence/ResidenceCommandListener.java | 306 +++++- .../bukkit/residence/Signs/SignInfo.java | 28 - .../residence/containers/ResPlayer.java | 5 +- .../residence/economy/ResidenceBank.java | 116 +-- .../residence/economy/TransactionManager.java | 2 +- .../residence/economy/rent/RentManager.java | 3 +- .../listeners/ResidencePlayerListener.java | 10 +- .../protection/ClaimedResidence.java | 18 +- .../residence/protection/FlagPermissions.java | 14 +- .../protection/ResidenceManager.java | 17 +- .../bukkit/residence/shopStuff/Board.java | 163 +++ .../{shopUtil => shopStuff}/ShopListener.java | 68 +- .../residence/shopStuff/ShopSignUtil.java | 309 ++++++ .../bukkit/residence/shopStuff/ShopVote.java | 24 + .../{shopUtil => shopStuff}/Shops.java | 5 +- .../bukkit/residence/shopStuff/Vote.java | 21 + .../residence/shopUtil/ShopSignInfo.java | 28 - .../bukkit/residence/shopUtil/ShopSigns.java | 73 -- .../bukkit/residence/signsStuff/SignInfo.java | 28 + .../{Signs => signsStuff}/SignUtil.java | 6 +- .../{Signs => signsStuff}/Signs.java | 164 +-- src/com/residence/mcstats/Metrics.java | 984 +++++++++--------- 26 files changed, 1722 insertions(+), 865 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/Signs/SignInfo.java create mode 100644 src/com/bekvon/bukkit/residence/shopStuff/Board.java rename src/com/bekvon/bukkit/residence/{shopUtil => shopStuff}/ShopListener.java (61%) create mode 100644 src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java create mode 100644 src/com/bekvon/bukkit/residence/shopStuff/ShopVote.java rename src/com/bekvon/bukkit/residence/{shopUtil => shopStuff}/Shops.java (71%) create mode 100644 src/com/bekvon/bukkit/residence/shopStuff/Vote.java delete mode 100644 src/com/bekvon/bukkit/residence/shopUtil/ShopSignInfo.java delete mode 100644 src/com/bekvon/bukkit/residence/shopUtil/ShopSigns.java create mode 100644 src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java rename src/com/bekvon/bukkit/residence/{Signs => signsStuff}/SignUtil.java (97%) rename src/com/bekvon/bukkit/residence/{Signs => signsStuff}/Signs.java (91%) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 771e0ac7b..638a0f1e8 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -92,6 +92,8 @@ public class ConfigManager { protected int MaxResCount; protected int MaxRentCount; protected int MaxSubzonesCount; + protected int VoteRangeFrom; + protected int VoteRangeTo; protected FlagPermissions globalCreatorDefaults; protected FlagPermissions globalResidenceDefaults; protected Map globalGroupDefaults; @@ -112,6 +114,7 @@ public class ConfigManager { protected boolean CouldronCompatability; protected boolean enableDebug = false; protected boolean versionCheck = true; + protected boolean UUIDConvertion = true; protected boolean SelectionIgnoreY = false; protected boolean NoCostForYBlocks = false; protected boolean useVisualizer; @@ -162,6 +165,36 @@ public static String Colors(String text) { return ChatColor.translateAlternateColorCodes('&', text); } + public void ChangeConfig(String path, Boolean stage) { + File f = new File(Residence.instance.getDataFolder(), "config.yml"); + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + if (in == null) + return; + + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + if (!conf.isBoolean(path)) + return; + + conf.set(path, stage); + + try { + conf.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + Residence.getConfigManager().UpdateConfigFile(); + } + public static List GetConfigIntArray(String path, List list, CommentedYamlConfiguration writer, YamlConfiguration conf) { conf.addDefault(path, list); copySetting(conf, writer, path); @@ -226,8 +259,7 @@ public static List ColorsArray(List text, Boolean colorize) { void UpdateConfigFile() { File f = new File(Residence.instance.getDataFolder(), "config.yml"); - - + BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF8")); @@ -248,6 +280,9 @@ void UpdateConfigFile() { writer.addComment("Global", "These are Global Settings for Residence."); + writer.addComment("Global.UUIDConvertion", "Starts UUID conversion on plugin startup", "DONT change this if you are not sure what you doing"); + UUIDConvertion = GetConfigBoolean("Global.UUIDConvertion", true, writer, conf); + writer.addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); versionCheck = GetConfigBoolean("Global.versionCheck", true, writer, conf); @@ -309,7 +344,12 @@ void UpdateConfigFile() { writer.addComment("Global.Optimizations.ShortInfo.Use", "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); ShortInfoUse = GetConfigBoolean("Global.Optimizations.ShortInfo.Use", false, writer, conf); - + + // Vote range + writer.addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); + VoteRangeFrom = GetConfigInt("Global.Optimizations.Vote.RangeFrom", 0, writer, conf); + VoteRangeTo = GetConfigInt("Global.Optimizations.Vote.RangeTo", 10, writer, conf); + writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); minMoveUpdate = GetConfigInt("Global.MoveCheckInterval", 500, writer, conf); @@ -790,7 +830,7 @@ public String getMultiworldPlugin() { public boolean autoRenewLeases() { return leaseAutoRenew; } - + public boolean isShortInfoUse() { return ShortInfoUse; } @@ -863,6 +903,14 @@ public int getMaxSubzonesCount() { return MaxSubzonesCount; } + public int getVoteRangeFrom() { + return VoteRangeFrom; + } + + public int getVoteRangeTo() { + return VoteRangeTo; + } + public FlagPermissions getGlobalCreatorDefaultFlags() { return globalCreatorDefaults; } @@ -943,6 +991,10 @@ public boolean versionCheck() { return versionCheck; } + public boolean isUUIDConvertion() { + return UUIDConvertion; + } + public List getCustomContainers() { return customContainers; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 84cd0ea5f..babf8d6fa 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -101,6 +101,7 @@ public static void LoadLang(String lang) { GetConfigString("Language.InvalidBoolean", "Invalid value, must be true(t) or false(f)", writer, conf, true); GetConfigString("Language.InvalidArea", "Invalid Area...", writer, conf, true); GetConfigString("Language.InvalidGroup", "Invalid Group...", writer, conf, true); + GetConfigString("Language.UseNumbers", "&cPlease use numbers...", writer, conf, true); writer.addComment("Language.CantPlaceLava", "Replace all text with '' to disable this message"); GetConfigString("Language.CantPlaceLava", "You can't place lava outside residence and higher than %1 block level", writer, conf, true); writer.addComment("Language.CantPlaceWater", "Replace all text with '' to disable this message"); @@ -400,6 +401,23 @@ public static void LoadLang(String lang) { GetConfigString("Language.Chat.ChangedColor", "&eResidence chat channel color changed to %1", writer, conf, true); GetConfigString("Language.Chat.ChangedPrefix", "&eResidence chat channel prefix changed to %1", writer, conf, true); + GetConfigString("Language.Shop.ListTopLine", "&6%1 &eShop list - Page &6%2 &eof &6%3 %4", writer, conf, true); + GetConfigString("Language.Shop.List", " &e%1. &6%2 &e(&6%3&e) %4", writer, conf, true); + GetConfigString("Language.Shop.ListVoted", "&e%1 (&6%2&e)", writer, conf, true); + GetConfigString("Language.Shop.NoDesc", "&6No description", writer, conf, true); + GetConfigString("Language.Shop.Desc", "&6Description:\n%1", writer, conf, true); + GetConfigString("Language.Shop.DescChange", "&6Description changed to: %1", writer, conf, true); + GetConfigString("Language.Shop.NewBoard", "&6Successfully added new shop sign board", writer, conf, true); + GetConfigString("Language.Shop.DeleteBoard", "&6Right click sign of board you want to delete", writer, conf, true); + GetConfigString("Language.Shop.InvalidSelection", "&cLeft click with selection tool top left sign and then right click bottom right", writer, conf, true); + GetConfigString("Language.Shop.VoteChanged", "&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence", writer, conf, true); + GetConfigString("Language.Shop.Voted", "&6You voted, and gave &e%1 &6votes to &e%2 &6residence", writer, conf, true); + GetConfigString("Language.Shop.VotedRange", "&6Vote range is from &e%1 &6to &e%2", writer, conf, true); + GetConfigString("Language.Shop.SignLines.1", "&e--== &8%1 &e==--", writer, conf, true); + GetConfigString("Language.Shop.SignLines.2", "&9%1", writer, conf, true); + GetConfigString("Language.Shop.SignLines.3", "&4%1", writer, conf, true); + GetConfigString("Language.Shop.SignLines.4", "&8%1&e (&8%2&e)", writer, conf, true); + GetConfigString("Language.RandomTeleport.TpLimit", "&eYou can't teleport so fast, please wait &6%1 &esec and try again", writer, conf, true); GetConfigString("Language.RandomTeleport.TeleportSuccess", "&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation", writer, conf, true); GetConfigString("Language.RandomTeleport.IncorrectLocation", "&6Could not find correct teleport location, please wait &e%1 &6sec and try again.", writer, conf, @@ -563,7 +581,8 @@ public static void LoadLang(String lang) { "&2overridepvp &3- &eOverrides any plugin pvp protection", "&2keepinv &3- &ePlayers keeps inventory after death", "&2keepexp &3- &ePlayers keeps exp after death", - "&2burn &3- &eallows or denys Mob combustion in residences"), + "&2burn &3- &eallows or denys Mob combustion in residences", + "&2bank &3- &eallows or denys deposit/withdraw money from res bank"), writer, conf, true); //res limits @@ -644,7 +663,7 @@ public static void LoadLang(String lang) { // res bank GetConfigString("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.bank.Info", - Arrays.asList("Usage: /res bank [deposit/withdraw] [amount]", "You must be standing in a Residence", "You must have the +bank flag."), writer, conf, + Arrays.asList("Usage: /res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", "You must have the +bank flag."), writer, conf, true); // res confirm diff --git a/src/com/bekvon/bukkit/residence/NewLanguage.java b/src/com/bekvon/bukkit/residence/NewLanguage.java index ca425b0e5..114b507a7 100644 --- a/src/com/bekvon/bukkit/residence/NewLanguage.java +++ b/src/com/bekvon/bukkit/residence/NewLanguage.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -45,6 +46,35 @@ public static String getMessage(String key) { return customlocale.contains(key) == true ? ChatColor.translateAlternateColorCodes('&', customlocale.getString(key)) : missing; } + /** + * Get the message with the correct key + * + * @param key + * - the path of the message + * @param variables + * - the variables separated with % + * @return the message + */ + public static String getMessage(String key, String variables) { + String missing = "Missing locale for " + key; + String message = ""; + if (customlocale == null || !customlocale.contains(key)) + message = enlocale.contains(key) == true ? enlocale.getString(key) : missing; + message = customlocale.contains(key) == true ? customlocale.getString(key) : missing; + + List var = new ArrayList(); + + if (!variables.contains("%")) { + var.add(variables); + } else { + var = new ArrayList(Arrays.asList(variables.split("%"))); + } + for (int i = 1; i <= var.size(); i++) { + message = message.replace("%" + i, var.get(i - 1)); + } + return ChatColor.translateAlternateColorCodes('&', message); + } + /** * Get the message with the correct key * diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 724cd44b8..9ceed373e 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -37,7 +37,6 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; -import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.chat.ChatManager; import com.bekvon.bukkit.residence.economy.BOSEAdapter; import com.bekvon.bukkit.residence.economy.EconomyInterface; @@ -64,13 +63,14 @@ import com.bekvon.bukkit.residence.protection.WorldFlagManager; import com.bekvon.bukkit.residence.selection.SelectionManager; import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; -import com.bekvon.bukkit.residence.shopUtil.ShopListener; +import com.bekvon.bukkit.residence.shopStuff.ShopListener; +import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; +import com.bekvon.bukkit.residence.signsStuff.SignUtil; import com.bekvon.bukkit.residence.spout.ResidenceSpoutListener; import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.CrackShot; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.TabComplete; import com.bekvon.bukkit.residence.utils.VersionChecker; @@ -133,7 +133,7 @@ public class Residence extends JavaPlugin { protected Map deleteConfirm; protected static List resadminToggle; private final static String[] validLanguages = { "English", "German", "French", "Hungarian", "Spanish", "Chinese", "Czech", "Brazilian", "Polish", "Lithuanian" }; - public static ConcurrentHashMap UUIDList = new ConcurrentHashMap(); + public static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); public static WorldEditPlugin wep = null; public static WorldGuardPlugin wg = null; public static int wepid; @@ -398,6 +398,20 @@ public void onEnable() { } } + Bukkit.getConsoleSender().sendMessage("[Residence] Loading (" + Bukkit.getOfflinePlayers().length + ") player data"); + for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { + if (player == null) + continue; + + String name = player.getName(); + if (name == null) + continue; + + getOfflinePlayerMap().put(name.toLowerCase(), player); + } + + Bukkit.getConsoleSender().sendMessage("[Residence] Player data loaded: " + getOfflinePlayerMap().size()); + if (rmanager == null) { rmanager = new ResidenceManager(); } @@ -518,28 +532,6 @@ public void onEnable() { PlayerManager.fillList(); - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { - @Override - public void run() { - for (OfflinePlayer player : Residence.getServ().getOfflinePlayers()) { - if (player == null) - continue; - - String name = player.getName(); - if (name == null) - continue; - - UUID id = player.getUniqueId(); - - if (id == null) - continue; - - UUIDList.put(name.toLowerCase(), id); - } - return; - } - }); - } catch (Exception ex) { initsuccess = false; getServer().getPluginManager().disablePlugin(this); @@ -548,6 +540,10 @@ public void run() { } SignUtil.LoadSigns(); + ShopSignUtil.LoadSigns(); + ShopSignUtil.LoadShopVotes(); + + ShopSignUtil.BoardUpdate(); versionChecker = new VersionChecker(this); versionChecker.VersionCheck(null); @@ -893,7 +889,9 @@ protected boolean loadYml() throws Exception { rmanager.addShop(one.getValue()); } - Debug.D("" + rmanager.getShops().size()); + if (Residence.getConfigManager().isUUIDConvertion()) { + Residence.getConfigManager().ChangeConfig("Global.UUIDConvertion", false); + } loadFile = new File(saveFolder, "forsale.yml"); if (loadFile.isFile()) { @@ -1150,28 +1148,26 @@ private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean public static UUID getPlayerUUID(String playername) { Player p = Residence.getServ().getPlayer(playername); if (p == null) { - if (UUIDList.size() == 0) { - for (OfflinePlayer player : Residence.getServ().getOfflinePlayers()) { - if (player == null) - continue; - String name = player.getName(); - if (name == null) - continue; - UUID uuid = player.getUniqueId(); - if (uuid == null) - continue; - UUIDList.put(name.toLowerCase(), player.getUniqueId()); - } - } - - if (UUIDList.containsKey(playername.toLowerCase())) - return UUIDList.get(playername.toLowerCase()); + if (getOfflinePlayerMap().containsKey(playername.toLowerCase())) + return getOfflinePlayerMap().get(playername.toLowerCase()).getUniqueId(); } else return p.getUniqueId(); return null; } + public static ConcurrentHashMap getOfflinePlayerMap() { + return OfflinePlayerList; + } + + @SuppressWarnings("deprecation") + public static OfflinePlayer getOfflinePlayer(String Name) { + if (OfflinePlayerList.containsKey(Name.toLowerCase())) { + return getOfflinePlayerMap().get(Name.toLowerCase()); + } + return Bukkit.getOfflinePlayer(Name); + } + public static String getPlayerUUIDString(String playername) { UUID playerUUID = Residence.getPlayerUUID(playername); if (playerUUID != null) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 7a0420e37..9f74dc7d2 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -6,7 +6,9 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -19,7 +21,6 @@ import org.bukkit.entity.Player; import org.getspout.spoutapi.SpoutManager; -import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; import com.bekvon.bukkit.residence.gui.SetFlag; @@ -30,7 +31,13 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.selection.WorldGuardUtil; -import com.bekvon.bukkit.residence.shopUtil.Shops; +import com.bekvon.bukkit.residence.shopStuff.ShopListener; +import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; +import com.bekvon.bukkit.residence.shopStuff.Board; +import com.bekvon.bukkit.residence.shopStuff.ShopVote; +import com.bekvon.bukkit.residence.shopStuff.Shops; +import com.bekvon.bukkit.residence.shopStuff.Vote; +import com.bekvon.bukkit.residence.signsStuff.SignUtil; import com.bekvon.bukkit.residence.spout.ResidenceSpout; import com.bekvon.bukkit.residence.utils.RandomTp; import com.sk89q.worldedit.bukkit.WorldEditPlugin; @@ -332,6 +339,7 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com if (cmd.equals("confirm")) { return commandResConfirm(args, resadmin, sender, page); } + if (cmd.equals("version")) { sender.sendMessage(ChatColor.GRAY + "------------------------------------"); sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + this @@ -375,6 +383,11 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com } return true; } + + if (cmd.equals("bank")) { + return commandResBank(args, resadmin, sender, page); + } + if (player == null) { return true; } @@ -460,7 +473,7 @@ public void run() { target = p; rsadm = true; } else - target = Bukkit.getOfflinePlayer(tempArgs[1]); + target = Residence.getOfflinePlayer(tempArgs[1]); if (target == null) return; gmanager.getGroup(target.getName(), Residence.getConfigManager().getDefaultWorld()).printLimits(p, target, rsadm); @@ -584,13 +597,256 @@ public void run() { } return false; } - if (cmd.equals("shoplist")) { - if (args.length == 1) { - int i = 1; - for (Entry one : rmanager.getShops().entrySet()) { - player.sendMessage(ChatColor.GOLD + "" + i + ". " + ChatColor.YELLOW + "" + one.getKey() + " (" + one.getValue().getRes().getOwner() + ")"); + if (cmd.equals("shop")) { + + if ((args.length == 2 || args.length == 3) && args[1].equalsIgnoreCase("list")) { + + int Shoppage = 1; + + if (args.length == 3) { + try { + Shoppage = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); + return true; + } + } + + Map ShopList = ShopSignUtil.getSortedShopList(); + + String separator = ChatColor.GOLD + ""; + String simbol = "\u25AC"; + for (int i = 0; i < 5; i++) { + separator += simbol; + } + int pagecount = (int) Math.ceil((double) ShopList.size() / (double) 10); + if (page > pagecount || page < 1) { + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); + return true; + } + + player.sendMessage(NewLanguage.getMessage("Language.Shop.ListTopLine").replace("%1", separator).replace("%2", String.valueOf(Shoppage)).replace("%3", + String.valueOf(pagecount)).replace("%4", separator)); + + int start = Shoppage * 10 - 9; + int end = Shoppage * 10 + 1; + int position = 0; + int i = start; + for (Entry one : ShopList.entrySet()) { + position++; + + if (position < start) + continue; + + if (position >= end) + break; + + Vote vote = ShopSignUtil.getAverageVote(one.getKey().getRes().getName()); + + String votestat = vote.getAmount() == 0 ? "" : NewLanguage.getMessage("Language.Shop.ListVoted").replace("%1", String.valueOf(vote.getVote())) + .replace("%2", String.valueOf(vote.getAmount())); + + String message = NewLanguage.getMessage("Language.Shop.List").replace("%1", String.valueOf(i)).replace("%2", one.getKey().getRes().getName()) + .replace("%3", one.getKey().getRes().getOwner()).replace("%4", votestat); + + String desc = one.getKey().getRes().getShopDesc() == null ? NewLanguage.getMessage("Language.Shop.NoDesc") : NewLanguage.getMessage( + "Language.Shop.Desc").replace("%1", ChatColor.translateAlternateColorCodes('&', one.getKey().getRes().getShopDesc())); + + String prev = "[\"\",{\"text\":\"" + ChatColor.GOLD + " " + message + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/res tp " + one.getKey().getRes().getName() + + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev); + i++; } + + if (pagecount == 1) + return true; + + int NextPage = page + 1; + NextPage = page < pagecount ? NextPage : page; + int Prevpage = page - 1; + Prevpage = page > 1 ? Prevpage : page; + + String prevCmd = "/res shop list " + Prevpage; + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLanguage().getPhrase("PrevInfoPage") + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; + String nextCmd = "/res shop list " + NextPage; + String next = " {\"text\":\"" + Residence.getLanguage().getPhrase("NextInfoPage") + " " + separator + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); + + return true; + } + + if (args.length == 2 && args[1].equalsIgnoreCase("delete")) { + + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + + ShopListener.Delete.add(player.getName()); + player.sendMessage(NewLanguage.getMessage("Language.Shop.DeleteBoard")); + return true; + } + if (args.length > 2 && args[1].equalsIgnoreCase("setdesc")) { + + ClaimedResidence res = null; + + String desc = ""; + if (args.length >= 2) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(language.getPhrase("NotInResidence")); + return true; + } else { + for (int i = 2; i < args.length; i++) { + desc += args[i]; + if (i < args.length - 1) + desc += " "; + } + } + } + + if (res == null) + return true; + + if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { + player.sendMessage(language.getPhrase("NonAdmin")); + return true; + } + + res.setShopDesc(desc); + player.sendMessage(NewLanguage.getMessage("Language.Shop.DescChange").replace("%1", ChatColor.translateAlternateColorCodes('&', desc))); + return true; + } + if (args.length == 3 && args[1].equalsIgnoreCase("create")) { + + if (!resadmin) { + player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + return true; + } + + if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + player.sendMessage(language.getPhrase("SelectPoints")); + return true; + } + + int place = 1; + try { + place = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(language.getPhrase("UseNumbers")); + return true; + } + + if (place < 1) + place = 1; + + Location loc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); + Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); + + if (loc1.getBlockY() < loc2.getBlockY()) { + player.sendMessage(NewLanguage.getMessage("Language.Shop.InvalidSelection")); + return true; + } + + Board newTemp = new Board(); + newTemp.setStartPlace(place); + newTemp.setWorld(loc1.getWorld().getName()); + newTemp.setTX(loc1.getBlockX()); + newTemp.setTY(loc1.getBlockY()); + newTemp.setTZ(loc1.getBlockZ()); + newTemp.setBX(loc2.getBlockX()); + newTemp.setBY(loc2.getBlockY()); + newTemp.setBZ(loc2.getBlockZ()); + + newTemp.GetTopLocation(); + newTemp.GetBottomLocation(); + + newTemp.GetLocations(); + + ShopSignUtil.addBoard(newTemp); + player.sendMessage(NewLanguage.getMessage("Language.Shop.NewBoard")); + + ShopSignUtil.BoardUpdate(); + ShopSignUtil.saveSigns(); + + return true; + + } + if ((args.length == 3 || args.length == 4) && args[1].equalsIgnoreCase("vote")) { + String resName = ""; + int vote = 5; + if (args.length == 3) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(language.getPhrase("NotInResidence")); + return true; + } + + try { + vote = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(language.getPhrase("UseNumbers")); + return true; + } + resName = res.getName(); + } else { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + player.sendMessage(language.getPhrase("InvalidResidence")); + return true; + } + + try { + vote = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(language.getPhrase("UseNumbers")); + return true; + } + resName = res.getName(); + } + + if (vote < Residence.getConfigManager().getVoteRangeFrom() || vote > Residence.getConfigManager().getVoteRangeTo()) { + player.sendMessage(NewLanguage.getMessage("Language.Shop.VotedRange", Residence.getConfigManager().getVoteRangeFrom() + "%" + Residence + .getConfigManager().getVoteRangeTo())); + + return true; + } + + ConcurrentHashMap> VoteList = ShopSignUtil.GetAllVoteList(); + + if (VoteList.containsKey(resName)) { + List list = VoteList.get(resName); + boolean found = false; + for (ShopVote OneVote : list) { + if (OneVote.getName().equalsIgnoreCase(player.getName())) { + player.sendMessage(NewLanguage.getMessage("Language.Shop.VoteChanged", OneVote.getVote() + "%" + vote + "%" + resName)); + OneVote.setVote(vote); + found = true; + break; + } + } + if (!found) { + ShopVote newVote = new ShopVote(player.getName(), vote); + list.add(newVote); + player.sendMessage(NewLanguage.getMessage("Language.Shop.Voted", vote + "%" + resName)); + } + } else { + List list = new ArrayList(); + ShopVote newVote = new ShopVote(player.getName(), vote); + list.add(newVote); + VoteList.put(resName, list); + player.sendMessage(NewLanguage.getMessage("Language.Shop.Voted", vote + "%" + resName)); + } + ShopSignUtil.saveShopVotes(); + ShopSignUtil.BoardUpdate(); return true; } return false; @@ -813,9 +1069,7 @@ public void run() { if (cmd.equals("lease")) { return commandResLease(args, resadmin, player, page); } - if (cmd.equals("bank")) { - return commandResBank(args, resadmin, player, page); - } + if (cmd.equals("market")) { return commandResMarket(args, resadmin, player, page); } @@ -1576,26 +1830,40 @@ private boolean commandResLset(String[] args, boolean resadmin, Player player, i } } - private boolean commandResBank(String[] args, boolean resadmin, Player player, int page) { - if (args.length != 3) { + private boolean commandResBank(String[] args, boolean resadmin, CommandSender sender, int page) { + if (args.length != 3 && args.length != 4) { return false; } - ClaimedResidence res = rmanager.getByName(plistener.getCurrentResidenceName(player.getName())); + ClaimedResidence res = null; + + if (args.length == 4) { + res = rmanager.getByName(args[2]); + if (res == null) { + sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + } else { + if (sender instanceof Player) + res = rmanager.getByLoc(((Player) sender).getLocation()); + } if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + sender.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); return true; } int amount = 0; try { - amount = Integer.parseInt(args[2]); + if (args.length == 3) + amount = Integer.parseInt(args[2]); + else + amount = Integer.parseInt(args[3]); } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); return true; } if (args[1].equals("deposit")) { - res.getBank().deposit(player, amount, resadmin); + res.getBank().deposit(sender, amount, resadmin); } else if (args[1].equals("withdraw")) { - res.getBank().withdraw(player, amount, resadmin); + res.getBank().withdraw(sender, amount, resadmin); } else { return false; } diff --git a/src/com/bekvon/bukkit/residence/Signs/SignInfo.java b/src/com/bekvon/bukkit/residence/Signs/SignInfo.java deleted file mode 100644 index 12444dbed..000000000 --- a/src/com/bekvon/bukkit/residence/Signs/SignInfo.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.bekvon.bukkit.residence.Signs; - -import java.util.ArrayList; -import java.util.List; - -public class SignInfo { - - List AllSigns = new ArrayList(); - - public SignInfo() { - } - - public void setAllSigns(List AllSigns) { - this.AllSigns = AllSigns; - } - - public List GetAllSigns() { - return this.AllSigns; - } - - public void removeSign(Signs sign) { - this.AllSigns.remove(sign); - } - - public void addSign(Signs sign) { - this.AllSigns.add(sign); - } -} diff --git a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java index e90a6652a..714f8a7ba 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResPlayer.java @@ -33,12 +33,11 @@ public ResPlayer(String userName) { RecalculatePermissions(); } - @SuppressWarnings("deprecation") public void RecalculatePermissions() { this.player = Bukkit.getPlayerExact(userName); if (this.player == null) - ofPlayer = Bukkit.getOfflinePlayer(userName); + ofPlayer = Residence.getOfflinePlayer(userName); recountMaxRes(); recountMaxRents(); @@ -119,7 +118,7 @@ public PermissionGroup getGroup() { } public void recountRes() { - if (this.userName != null){ + if (this.userName != null) { ResidenceManager m = Residence.getResidenceManager(); this.ResidenceList = m.getResidenceMapList(this.userName, true); } diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index 864083388..f9a12499a 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -4,7 +4,9 @@ */ package com.bekvon.bukkit.residence.economy; + import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -18,84 +20,68 @@ public class ResidenceBank { int storedMoney; ClaimedResidence res; - public ResidenceBank(ClaimedResidence parent) - { - storedMoney = 0; - res = parent; + public ResidenceBank(ClaimedResidence parent) { + storedMoney = 0; + res = parent; } - public int getStoredMoney() - { - return storedMoney; + public int getStoredMoney() { + return storedMoney; } - public void setStoredMoney(int amount) - { - storedMoney = amount; + public void setStoredMoney(int amount) { + storedMoney = amount; } - public void add(int amount) - { - storedMoney = storedMoney + amount; + public void add(int amount) { + storedMoney = storedMoney + amount; } - public boolean hasEnough(int amount) - { - if(storedMoney >= amount) - return true; - return false; + public boolean hasEnough(int amount) { + if (storedMoney >= amount) + return true; + return false; } - public void subtract(int amount) - { - storedMoney = storedMoney - amount; - if(storedMoney<0) - storedMoney = 0; + public void subtract(int amount) { + storedMoney = storedMoney - amount; + if (storedMoney < 0) + storedMoney = 0; } - public void withdraw(Player player, int amount, boolean resadmin) - { - if(!Residence.getConfigManager().enableEconomy()) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("MarketDisabled")); - } - if(!resadmin && !res.getPermissions().playerHas(player.getName(), "bank", false)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoBankAccess")); - return; - } - if(!hasEnough(amount)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("BankNoMoney")); - return; - } - if(Residence.getEconomyManager().add(player.getName(), amount)) - { - this.subtract(amount); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("BankWithdraw",ChatColor.YELLOW + String.format("%d",amount) + ChatColor.GREEN)); - } + public void withdraw(CommandSender sender, int amount, boolean resadmin) { + if (!Residence.getConfigManager().enableEconomy()) { + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + } + if (!resadmin && !res.getPermissions().playerHas(sender.getName(), "bank", false)) { + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoBankAccess")); + return; + } + if (!hasEnough(amount)) { + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("BankNoMoney")); + return; + } + if (sender instanceof Player && Residence.getEconomyManager().add(sender.getName(), amount) || !(sender instanceof Player)) { + this.subtract(amount); + sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("BankWithdraw", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN)); + } } - public void deposit(Player player, int amount, boolean resadmin) - { - if(!Residence.getConfigManager().enableEconomy()) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("MarketDisabled")); - } - if(!resadmin && !res.getPermissions().playerHas(player.getName(), "bank", false)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NoBankAccess")); - return; - } - if(!Residence.getEconomyManager().canAfford(player.getName(), amount)) - { - player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("NotEnoughMoney")); - return; - } - if(Residence.getEconomyManager().subtract(player.getName(), amount)) - { - this.add(amount); - player.sendMessage(ChatColor.GREEN+Residence.getLanguage().getPhrase("BankDeposit",ChatColor.YELLOW + String.format("%d",amount) + ChatColor.GREEN)); - } + public void deposit(CommandSender sender, int amount, boolean resadmin) { + if (!Residence.getConfigManager().enableEconomy()) { + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + } + if (!resadmin && !res.getPermissions().playerHas(sender.getName(), "bank", false)) { + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoBankAccess")); + return; + } + if (sender instanceof Player && !Residence.getEconomyManager().canAfford(sender.getName(), amount)) { + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); + return; + } + if (sender instanceof Player && Residence.getEconomyManager().subtract(sender.getName(), amount) || !(sender instanceof Player)) { + this.add(amount); + sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("BankDeposit", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN)); + } } } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 40437e907..fa5610b73 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -9,8 +9,8 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.protection.ResidenceManager; +import com.bekvon.bukkit.residence.signsStuff.SignUtil; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 83848869f..93a0e5065 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -8,13 +8,14 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.Signs.SignUtil; import com.bekvon.bukkit.residence.event.ResidenceRentEvent; import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import com.bekvon.bukkit.residence.signsStuff.SignUtil; + import java.util.ArrayList; import java.util.Date; import java.util.HashMap; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3b8c5ed2e..143556529 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -60,9 +60,9 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.selection.AutoSelection; +import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.signsStuff.SignUtil; import com.bekvon.bukkit.residence.utils.ActionBar; -import com.bekvon.bukkit.residence.Signs.SignUtil; -import com.bekvon.bukkit.residence.Signs.Signs; /** * @@ -86,7 +86,7 @@ public ResidencePlayerListener() { playerToggleChat.clear(); minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); chatenabled = Residence.getConfigManager().chatEnabled(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { + for (Player player : Bukkit.getOnlinePlayers()) { lastUpdate.put(player.getName(), System.currentTimeMillis()); } } @@ -98,7 +98,7 @@ public void reload() { playerToggleChat.clear(); minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); chatenabled = Residence.getConfigManager().chatEnabled(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { + for (Player player : Bukkit.getOnlinePlayers()) { lastUpdate.put(player.getName(), System.currentTimeMillis()); } } @@ -324,7 +324,7 @@ public void onPlayerQuit(PlayerQuitEvent event) { Residence.getChatManager().removeFromChannel(pname); Residence.getPlayerListener().removePlayerResidenceChat(pname); - Residence.UUIDList.put(pname, event.getPlayer().getUniqueId()); + Residence.getOfflinePlayerMap().put(pname, event.getPlayer()); if (AutoSelection.getList().containsKey(pname.toLowerCase())) AutoSelection.getList().remove(pname); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 27f1581b8..9c629f6f8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -46,6 +46,7 @@ public class ClaimedResidence { protected Location tpLoc; protected String enterMessage; protected String leaveMessage; + protected String ShopDesc = null; protected String ChatPrefix = ""; protected ChatColor ChannelColor = ChatColor.WHITE; protected ResidenceItemList ignorelist; @@ -601,6 +602,10 @@ public String getLeaveMessage() { return leaveMessage; } + public String getShopDesc() { + return ShopDesc; + } + public void setEnterMessage(String message) { enterMessage = message; } @@ -609,6 +614,10 @@ public void setLeaveMessage(String message) { leaveMessage = message; } + public void setShopDesc(String message) { + ShopDesc = message; + } + public void setEnterLeaveMessage(Player player, String message, boolean enter, boolean resadmin) { // if(message!=null && // Residence.getConfigManager().getResidenceNameRegex() != null) { @@ -824,7 +833,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } if (tpLoc != null) { - if (Residence.getConfigManager().getTeleportDelay() > 0 &&!isAdmin) + if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin) performDelaydTp(tpLoc, targetPlayer, reqPlayer, true); else performInstantTp(tpLoc, targetPlayer, reqPlayer, true); @@ -836,7 +845,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r return; } final Location targloc = this.getOutsideFreeLoc(area.getHighLoc()); - if (Residence.getConfigManager().getTeleportDelay() > 0 &&!isAdmin) + if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin) performDelaydTp(targloc, targetPlayer, reqPlayer, true); else performInstantTp(targloc, targetPlayer, reqPlayer, true); @@ -915,6 +924,7 @@ public Map save() { Map areamap = new HashMap<>(); root.put("EnterMessage", enterMessage); root.put("LeaveMessage", leaveMessage); + root.put("ShopDescription", ShopDesc); root.put("StoredMoney", bank.getStoredMoney()); root.put("BlockSellPrice", BlockSellPrice); root.put("ChatPrefix", ChatPrefix); @@ -949,6 +959,10 @@ public static ClaimedResidence load(Map root, ClaimedResidence p res.enterMessage = (String) root.get("EnterMessage"); res.leaveMessage = (String) root.get("LeaveMessage"); + + if (root.containsKey("ShopDescription")) + res.setShopDesc((String) root.get("ShopDescription")); + if (root.containsKey("StoredMoney")) res.bank.setStoredMoney((Integer) root.get("StoredMoney")); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 50aee53af..ae9e7691a 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -192,13 +192,13 @@ public static void initValidFlags() { // Players will keep hes inventory on death addResidenceOnlyFlag("keepinv"); - + // Players will keep hes exp on death addResidenceOnlyFlag("keepexp"); - + // Special flag for making residence as shop addResidenceOnlyFlag("shop"); - + addPlayerOrGroupOnlyFlag("admin"); addFlagToFlagGroup("redstone", "note"); addFlagToFlagGroup("redstone", "pressure"); @@ -567,7 +567,9 @@ protected static FlagPermissions load(Map root, FlagPermissions uuid = (String) root.get("OwnerUUID"); } - newperms.convertPlayerNamesToUUIDs(ownerName, uuid); + if (Residence.getConfigManager().isUUIDConvertion()) { + newperms.convertPlayerNamesToUUIDs(ownerName, uuid); + } return newperms; } @@ -714,7 +716,7 @@ public String listOtherPlayersFlagsRaw(String text, String player) { sbuild.append("[\"\","); sbuild.append("{\"text\":\"" + text + "\"}"); - + Set>> set = playerFlags.entrySet(); synchronized (set) { Iterator>> it = set.iterator(); @@ -733,7 +735,7 @@ public String listOtherPlayersFlagsRaw(String text, String player) { next = this.cachedPlayerNameUUIDs.get(next); } if (!perms.equals("none")) { - sbuild.append(","); + sbuild.append(","); if (random) { random = false; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index eaab2ee6c..1c2730df2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -27,7 +27,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.selection.AutoSelection; -import com.bekvon.bukkit.residence.shopUtil.Shops; +import com.bekvon.bukkit.residence.shopStuff.Shops; import com.bekvon.bukkit.residence.text.help.InformationPager; /** @@ -124,15 +124,15 @@ public void addShop(ClaimedResidence res) { Shops shop = new Shops(res); shops.put(res.getName(), shop); } - + public void removeShop(ClaimedResidence res) { removeShop(res.getName()); } - + public void removeShop(String resName) { shops.remove(resName); } - + public Map getShops() { return shops; } @@ -635,8 +635,15 @@ public static ResidenceManager load(Map root) throws Exception { public static Map> loadMap(String worldName, Map root, ResidenceManager resm) throws Exception { Map> retRes = new HashMap<>(); if (root != null) { + int i = 0; + int y = 0; for (Entry res : root.entrySet()) { - + if (i == 100 & Residence.getConfigManager().isUUIDConvertion()) + Bukkit.getConsoleSender().sendMessage("[Residence] " + worldName + " UUID conversion done: " + y + " of " + root.size()); + if (i >= 100) + i = 0; + i++; + y++; try { @SuppressWarnings("unchecked") ClaimedResidence residence = ClaimedResidence.load((Map) res.getValue(), null); diff --git a/src/com/bekvon/bukkit/residence/shopStuff/Board.java b/src/com/bekvon/bukkit/residence/shopStuff/Board.java new file mode 100644 index 000000000..7c0e0f7e5 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/shopStuff/Board.java @@ -0,0 +1,163 @@ +package com.bekvon.bukkit.residence.shopStuff; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; + +public class Board { + + String world = null; + Integer tx = 0; + Integer ty = 0; + Integer tz = 0; + Integer bx = 0; + Integer by = 0; + Integer bz = 0; + + Location TopLoc = null; + Location BottomLoc = null; + + int StartPlace = 0; + + List Locations = new ArrayList(); + HashMap SignLocations = new HashMap(); + + public Board() { + } + + public void addSignLoc(String resName, Location loc) { + SignLocations.put(resName, loc); + } + + public HashMap getSignLocations() { + return SignLocations; + } + + public Location getSignLocByName(String resName) { + return SignLocations.get(resName); + } + + public String getResNameByLoc(Location location) { + for (Entry One : SignLocations.entrySet()) { + Location loc = One.getValue(); + if (!loc.getWorld().getName().equalsIgnoreCase(location.getWorld().getName())) + continue; + if (loc.getBlockX() != location.getBlockX()) + continue; + if (loc.getBlockY() != location.getBlockY()) + continue; + if (loc.getBlockZ() != location.getBlockZ()) + continue; + return One.getKey(); + } + return null; + } + + public List GetLocations() { + Locations.clear(); + GetTopLocation(); + GetBottomLocation(); + + if (TopLoc == null || BottomLoc == null) + return null; + + if (Bukkit.getWorld(world) == null) + return null; + + int xLength = tx - bx; + int yLength = ty - by; + int zLength = tz - bz; + + if (xLength < 0) + xLength = xLength * -1; + if (zLength < 0) + zLength = zLength * -1; + + for (int y = 0; y <= yLength; y++) { + for (int x = 0; x <= xLength; x++) { + for (int z = 0; z <= zLength; z++) { + + int tempx = 0; + int tempz = 0; + + if (tx > bx) + tempx = tx - x; + else + tempx = tx + x; + + if (tz > bz) + tempz = tz - z; + else + tempz = tz + z; + + Locations.add(new Location(Bukkit.getWorld(world), tempx, ty - y, tempz)); + } + } + } + + return this.Locations; + } + + public Location GetTopLocation() { + if (this.TopLoc == null) { + World w = Bukkit.getWorld(this.world); + if (w != null) + this.TopLoc = new Location(Bukkit.getWorld(this.world), this.tx, this.ty, this.tz); + } + return this.TopLoc; + } + + public Location GetBottomLocation() { + if (this.BottomLoc == null) { + World w = Bukkit.getWorld(this.world); + if (w != null) + this.BottomLoc = new Location(Bukkit.getWorld(this.world), this.bx, this.by, this.bz); + } + return this.BottomLoc; + } + + public void setStartPlace(int StartPlace) { + this.StartPlace = StartPlace; + } + + public int GetStartPlace() { + return this.StartPlace; + } + + public void setWorld(String World) { + this.world = World; + } + + public String GetWorld() { + return this.world; + } + + public void setTX(Integer x) { + this.tx = x; + } + + public void setTY(Integer y) { + this.ty = y; + } + + public void setTZ(Integer z) { + this.tz = z; + } + + public void setBX(Integer x) { + this.bx = x; + } + + public void setBY(Integer y) { + this.by = y; + } + + public void setBZ(Integer z) { + this.bz = z; + } +} diff --git a/src/com/bekvon/bukkit/residence/shopUtil/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java similarity index 61% rename from src/com/bekvon/bukkit/residence/shopUtil/ShopListener.java rename to src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index 58edafcec..48f98590b 100644 --- a/src/com/bekvon/bukkit/residence/shopUtil/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -1,9 +1,19 @@ -package com.bekvon.bukkit.residence.shopUtil; +package com.bekvon.bukkit.residence.shopStuff; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; @@ -13,6 +23,53 @@ public class ShopListener implements Listener { + public static List Delete = new ArrayList(); + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onSignInteract(PlayerInteractEvent event) { + + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + Block block = event.getClickedBlock(); + + if (block == null) + return; + + if (!(block.getState() instanceof Sign)) + return; + + Player player = (Player) event.getPlayer(); + + Location loc = block.getLocation(); + + Board Found = null; + + String resName = null; + for (Board one : ShopSignUtil.GetAllBoards()) { + resName = one.getResNameByLoc(loc); + if (resName != null) { + Found = one; + break; + } + } + + if (Delete.contains(player.getName())) { + if (resName != null) { + ShopSignUtil.GetAllBoards().remove(Found); + ShopSignUtil.saveSigns(); + event.getPlayer().sendMessage("Sign board removed"); + } else { + event.getPlayer().sendMessage("This is not sign board, try performing command again and clicking correct block"); + } + Delete.remove(player.getName()); + return; + } + + if (resName != null) + Bukkit.dispatchCommand(event.getPlayer(), "res tp " + resName); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeShop(ResidenceFlagChangeEvent event) { if (event.isCancelled()) @@ -25,6 +82,8 @@ public void onFlagChangeShop(ResidenceFlagChangeEvent event) { case NEITHER: case FALSE: Residence.getResidenceManager().removeShop(event.getResidence()); + ShopSignUtil.BoardUpdate(); + ShopSignUtil.saveSigns(); break; case INVALID: break; @@ -33,6 +92,8 @@ public void onFlagChangeShop(ResidenceFlagChangeEvent event) { event.getResidence().getPermissions().setFlag("tp", FlagState.TRUE); event.getResidence().getPermissions().setFlag("move", FlagState.TRUE); event.getResidence().getPermissions().setFlag("pvp", FlagState.FALSE); + ShopSignUtil.BoardUpdate(); + ShopSignUtil.saveSigns(); break; default: break; @@ -74,6 +135,9 @@ public void onResidenceCreate(ResidenceCreationEvent event) { return; Residence.getResidenceManager().addShop(event.getResidence()); + + ShopSignUtil.BoardUpdate(); + ShopSignUtil.saveSigns(); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -85,5 +149,7 @@ public void onResidenceRemove(ResidenceDeleteEvent event) { return; Residence.getResidenceManager().removeShop(event.getResidence()); + ShopSignUtil.BoardUpdate(); + ShopSignUtil.saveSigns(); } } diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java new file mode 100644 index 000000000..db06d2266 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -0,0 +1,309 @@ +package com.bekvon.bukkit.residence.shopStuff; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; + +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import com.bekvon.bukkit.residence.CommentedYamlConfiguration; +import com.bekvon.bukkit.residence.NewLanguage; +import com.bekvon.bukkit.residence.Residence; + +public class ShopSignUtil { + + static ConcurrentHashMap> VoteList = new ConcurrentHashMap>(); + static List AllBoards = new ArrayList(); + + public void setVoteList(ConcurrentHashMap> VoteList) { + ShopSignUtil.VoteList = VoteList; + } + + public static ConcurrentHashMap> GetAllVoteList() { + return VoteList; + } + + public void removeVoteList(String resName) { + VoteList.remove(resName); + } + + public static void addVote(String ResName, List ShopVote) { + VoteList.put(ResName, ShopVote); + } + + public void setAllSigns(List AllBoards) { + ShopSignUtil.AllBoards = AllBoards; + } + + public static List GetAllBoards() { + return AllBoards; + } + + public void removeBoard(Board Board) { + AllBoards.remove(Board); + } + + public static void addBoard(Board Board) { + AllBoards.add(Board); + } + + // Res Shop vote file + public static void LoadShopVotes() { + GetAllVoteList().clear(); + File file = new File(Residence.instance.getDataFolder(), "ShopVotes.yml"); + YamlConfiguration f = YamlConfiguration.loadConfiguration(file); + + if (!f.isConfigurationSection("ShopVotes")) + return; + + ConfigurationSection ConfCategory = f.getConfigurationSection("ShopVotes"); + ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); + if (categoriesList.size() == 0) + return; + + for (String category : categoriesList) { + List List = ConfCategory.getStringList(category); + List VoteList = new ArrayList(); + for (String oneEntry : List) { + if (!oneEntry.contains("%")) + continue; + + String name = oneEntry.split("%")[0]; + int vote = -1; + + try { + vote = Integer.parseInt(oneEntry.split("%")[1]); + } catch (Exception ex) { + continue; + } + if (vote < 0) + vote = 0; + else if (vote > 10) + vote = 10; + VoteList.add(new ShopVote(name, vote)); + + } + addVote(category, VoteList); + } + return; + } + + // Signs save file + public static void saveShopVotes() { + File f = new File(Residence.instance.getDataFolder(), "ShopVotes.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + writer.addComment("ShopVotes", "DO NOT EDIT THIS FILE BY HAND!"); + + if (!conf.isConfigurationSection("ShopVotes")) + conf.createSection("ShopVotes"); + + for (Entry> one : GetAllVoteList().entrySet()) { + + String path = "ShopVotes." + one.getKey(); + + List list = new ArrayList(); + + for (ShopVote oneVote : one.getValue()) { + list.add(oneVote.getName() + "%" + oneVote.getVote()); + } + writer.set(path, list); + } + + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + + // Res Shop vote file + public static Vote getAverageVote(String resName) { + + ConcurrentHashMap> allvotes = GetAllVoteList(); + + if (!allvotes.containsKey(resName)) + return new Vote(5.0, 0); + + List votes = allvotes.get(resName); + + double total = 0; + for (ShopVote oneVote : votes) { + total += oneVote.getVote(); + } + + double vote = ((int) ((total / votes.size()) * 100)) / 100.0; + + return new Vote(vote, votes.size()); + } + + public static Map getSortedShopList() { + + Map allvotes = new HashMap(); + + Map shops = Residence.getResidenceManager().getShops(); + + for (Entry one : shops.entrySet()) { + Vote vote = ShopSignUtil.getAverageVote(one.getKey()); + allvotes.put(one.getValue(), vote.getVote()); + } + + allvotes = sortByComparator(allvotes); + + return allvotes; + } + + private static Map sortByComparator(Map unsortMap) { + + List> list = new LinkedList>(unsortMap.entrySet()); + + Collections.sort(list, new Comparator>() { + public int compare(Map.Entry o1, Map.Entry o2) { + return (o2.getValue()).compareTo(o1.getValue()); + } + }); + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + // Shop Sign file + public static void LoadSigns() { + GetAllBoards().clear(); + File file = new File(Residence.instance.getDataFolder(), "ShopSigns.yml"); + YamlConfiguration f = YamlConfiguration.loadConfiguration(file); + + if (!f.isConfigurationSection("ShopSigns")) + return; + + ConfigurationSection ConfCategory = f.getConfigurationSection("ShopSigns"); + ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); + if (categoriesList.size() == 0) + return; + for (String category : categoriesList) { + ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); + Board newTemp = new Board(); + newTemp.setStartPlace(NameSection.getInt("StartPlace")); + newTemp.setWorld(NameSection.getString("World")); + newTemp.setTX(NameSection.getInt("TX")); + newTemp.setTY(NameSection.getInt("TY")); + newTemp.setTZ(NameSection.getInt("TZ")); + newTemp.setBX(NameSection.getInt("BX")); + newTemp.setBY(NameSection.getInt("BY")); + newTemp.setBZ(NameSection.getInt("BZ")); + + newTemp.GetTopLocation(); + newTemp.GetBottomLocation(); + + newTemp.GetLocations(); + + addBoard(newTemp); + } + return; + } + + // Signs save file + public static void saveSigns() { + File f = new File(Residence.instance.getDataFolder(), "ShopSigns.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + writer.addComment("ShopSigns", "DO NOT EDIT THIS FILE BY HAND!"); + + if (!conf.isConfigurationSection("ShopSigns")) + conf.createSection("ShopSigns"); + + int cat = 0; + for (Board one : GetAllBoards()) { + cat++; + String path = "ShopSigns." + cat; + writer.set(path + ".StartPlace", one.GetStartPlace()); + writer.set(path + ".World", one.GetWorld()); + writer.set(path + ".TX", one.GetTopLocation().getBlockX()); + writer.set(path + ".TY", one.GetTopLocation().getBlockY()); + writer.set(path + ".TZ", one.GetTopLocation().getBlockZ()); + writer.set(path + ".BX", one.GetBottomLocation().getBlockX()); + writer.set(path + ".BY", one.GetBottomLocation().getBlockY()); + writer.set(path + ".BZ", one.GetBottomLocation().getBlockZ()); + } + + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + + public static boolean BoardUpdate() { + + for (Board board : GetAllBoards()) { + List SignsLocation = board.GetLocations(); + + ArrayList ShopNames = new ArrayList(ShopSignUtil.getSortedShopList().keySet()); + + int Start = board.GetStartPlace(); + for (Location OneSignLoc : SignsLocation) { + + Block block = OneSignLoc.getBlock(); + + if (!(block.getState() instanceof Sign)) + continue; + + Shops Shop = null; + if (Residence.getResidenceManager().getShops().size() >= Start) + Shop = Residence.getResidenceManager().getShops().get(ShopNames.get(Start - 1).getRes().getName()); + + Sign sign = (Sign) block.getState(); + + Vote vote = null; + String votestat = ""; + if (Residence.getResidenceManager().getShops().size() >= Start) { + vote = ShopSignUtil.getAverageVote(ShopNames.get(Start - 1).getRes().getName()); + votestat = vote.getAmount() == 0 ? "" : NewLanguage.getMessage("Language.Shop.SignLines.4").replace("%1", String.valueOf(vote.getVote())).replace( + "%2", String.valueOf(vote.getAmount())); + } + + if (Shop != null) { + sign.setLine(0, NewLanguage.getMessage("Language.Shop.SignLines.1").replace("%1", String.valueOf(Start))); + sign.setLine(1, NewLanguage.getMessage("Language.Shop.SignLines.2").replace("%1", Shop.getRes().getName())); + sign.setLine(2, NewLanguage.getMessage("Language.Shop.SignLines.3").replace("%1", Shop.getRes().getOwner())); + sign.setLine(3, votestat); + board.addSignLoc(Shop.getRes().getName(), sign.getLocation()); + } else { + sign.setLine(0, ""); + sign.setLine(1, ""); + sign.setLine(2, ""); + sign.setLine(3, ""); + } + sign.update(); + + Start++; + } + } + + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopVote.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopVote.java new file mode 100644 index 000000000..6ba619643 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopVote.java @@ -0,0 +1,24 @@ +package com.bekvon.bukkit.residence.shopStuff; + +public class ShopVote { + + String name = null; + int vote = -1; + + public ShopVote(String name, int vote) { + this.name = name; + this.vote = vote; + } + + public String getName() { + return this.name; + } + + public int getVote() { + return this.vote; + } + + public void setVote(int vote) { + this.vote = vote; + } +} diff --git a/src/com/bekvon/bukkit/residence/shopUtil/Shops.java b/src/com/bekvon/bukkit/residence/shopStuff/Shops.java similarity index 71% rename from src/com/bekvon/bukkit/residence/shopUtil/Shops.java rename to src/com/bekvon/bukkit/residence/shopStuff/Shops.java index fcedb15fd..0a49d7ca6 100644 --- a/src/com/bekvon/bukkit/residence/shopUtil/Shops.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/Shops.java @@ -1,13 +1,10 @@ -package com.bekvon.bukkit.residence.shopUtil; - -import org.bukkit.Location; +package com.bekvon.bukkit.residence.shopStuff; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class Shops { ClaimedResidence res = null; - Location loc = null; public Shops(ClaimedResidence res) { this.res = res; diff --git a/src/com/bekvon/bukkit/residence/shopStuff/Vote.java b/src/com/bekvon/bukkit/residence/shopStuff/Vote.java new file mode 100644 index 000000000..d216aaefb --- /dev/null +++ b/src/com/bekvon/bukkit/residence/shopStuff/Vote.java @@ -0,0 +1,21 @@ +package com.bekvon.bukkit.residence.shopStuff; + +public class Vote { + double vote; + int amount; + + public Vote(double vote, int amount) { + this.vote = vote; + this.amount = amount; + + } + + public int getAmount() { + return this.amount; + } + + public double getVote() { + return this.vote; + } + +} diff --git a/src/com/bekvon/bukkit/residence/shopUtil/ShopSignInfo.java b/src/com/bekvon/bukkit/residence/shopUtil/ShopSignInfo.java deleted file mode 100644 index a9c824a6c..000000000 --- a/src/com/bekvon/bukkit/residence/shopUtil/ShopSignInfo.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.bekvon.bukkit.residence.shopUtil; - -import java.util.ArrayList; -import java.util.List; - -public class ShopSignInfo { - - List AllSigns = new ArrayList(); - - public ShopSignInfo() { - } - - public void setAllSigns(List AllSigns) { - this.AllSigns = AllSigns; - } - - public List GetAllSigns() { - return this.AllSigns; - } - - public void removeSign(ShopSigns sign) { - this.AllSigns.remove(sign); - } - - public void addSign(ShopSigns sign) { - this.AllSigns.add(sign); - } -} diff --git a/src/com/bekvon/bukkit/residence/shopUtil/ShopSigns.java b/src/com/bekvon/bukkit/residence/shopUtil/ShopSigns.java deleted file mode 100644 index 5353d5678..000000000 --- a/src/com/bekvon/bukkit/residence/shopUtil/ShopSigns.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.bekvon.bukkit.residence.shopUtil; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; - -public class ShopSigns { - - String Residence = null; - String world = null; - double x = 0.01; - double y = 0.01; - double z = 0.01; - - Location loc = null; - - public ShopSigns() { - } - - public void setLocation(Location Location) { - this.loc = Location; - } - - public Location GetLocation() { - if (this.loc == null) { - World w = Bukkit.getWorld(this.world); - if (w != null) - this.loc = new Location(Bukkit.getWorld(this.world), this.x, this.y, this.z); - } - return this.loc; - } - - public void setResidence(String Residence) { - this.Residence = Residence; - } - - public String GetResidence() { - return this.Residence; - } - - public void setWorld(String World) { - this.world = World; - } - - public String GetWorld() { - return this.world; - } - - public void setX(double x) { - this.x = x; - } - - public double GetX() { - return this.x; - } - - public void setY(double y) { - this.y = y; - } - - public double GetY() { - return this.y; - } - - public void setZ(double z) { - this.z = z; - } - - public double GetZ() { - return this.z; - } - -} diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java b/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java new file mode 100644 index 000000000..318ce2dbd --- /dev/null +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java @@ -0,0 +1,28 @@ +package com.bekvon.bukkit.residence.signsStuff; + +import java.util.ArrayList; +import java.util.List; + +public class SignInfo { + + List AllSigns = new ArrayList(); + + public SignInfo() { + } + + public void setAllSigns(List AllSigns) { + this.AllSigns = AllSigns; + } + + public List GetAllSigns() { + return this.AllSigns; + } + + public void removeSign(Signs sign) { + this.AllSigns.remove(sign); + } + + public void addSign(Signs sign) { + this.AllSigns.add(sign); + } +} diff --git a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java similarity index 97% rename from src/com/bekvon/bukkit/residence/Signs/SignUtil.java rename to src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index dca8436cf..044750632 100644 --- a/src/com/bekvon/bukkit/residence/Signs/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -1,4 +1,4 @@ -package com.bekvon.bukkit.residence.Signs; +package com.bekvon.bukkit.residence.signsStuff; import java.io.File; import java.io.IOException; @@ -29,9 +29,9 @@ public class SignUtil { public static SignInfo Signs = new SignInfo(); public static int updateAllSigns() { - List temp = new ArrayList(); + List temp = new ArrayList(); temp.addAll(Signs.GetAllSigns()); - for (com.bekvon.bukkit.residence.Signs.Signs one : temp) { + for (com.bekvon.bukkit.residence.signsStuff.Signs one : temp) { SignUpdate(one); } return temp.size(); diff --git a/src/com/bekvon/bukkit/residence/Signs/Signs.java b/src/com/bekvon/bukkit/residence/signsStuff/Signs.java similarity index 91% rename from src/com/bekvon/bukkit/residence/Signs/Signs.java rename to src/com/bekvon/bukkit/residence/signsStuff/Signs.java index 6379406a6..6637d2228 100644 --- a/src/com/bekvon/bukkit/residence/Signs/Signs.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/Signs.java @@ -1,82 +1,82 @@ -package com.bekvon.bukkit.residence.Signs; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; - -public class Signs { - - int Category = 0; - String Residence = null; - String world = null; - double x = 0.01; - double y = 0.01; - double z = 0.01; - - Location loc = null; - - public Signs() { - } - - public void setLocation(Location Location) { - this.loc = Location; - } - - public Location GetLocation() { - if (this.loc == null) { - World w = Bukkit.getWorld(this.world); - if (w != null) - this.loc = new Location(Bukkit.getWorld(this.world), this.x, this.y, this.z); - } - return this.loc; - } - - public void setCategory(int Category) { - this.Category = Category; - } - - public int GetCategory() { - return this.Category; - } - - public void setResidence(String Residence) { - this.Residence = Residence; - } - - public String GetResidence() { - return this.Residence; - } - - public void setWorld(String World) { - this.world = World; - } - - public String GetWorld() { - return this.world; - } - - public void setX(double x) { - this.x = x; - } - - public double GetX() { - return this.x; - } - - public void setY(double y) { - this.y = y; - } - - public double GetY() { - return this.y; - } - - public void setZ(double z) { - this.z = z; - } - - public double GetZ() { - return this.z; - } - -} +package com.bekvon.bukkit.residence.signsStuff; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; + +public class Signs { + + int Category = 0; + String Residence = null; + String world = null; + double x = 0.01; + double y = 0.01; + double z = 0.01; + + Location loc = null; + + public Signs() { + } + + public void setLocation(Location Location) { + this.loc = Location; + } + + public Location GetLocation() { + if (this.loc == null) { + World w = Bukkit.getWorld(this.world); + if (w != null) + this.loc = new Location(Bukkit.getWorld(this.world), this.x, this.y, this.z); + } + return this.loc; + } + + public void setCategory(int Category) { + this.Category = Category; + } + + public int GetCategory() { + return this.Category; + } + + public void setResidence(String Residence) { + this.Residence = Residence; + } + + public String GetResidence() { + return this.Residence; + } + + public void setWorld(String World) { + this.world = World; + } + + public String GetWorld() { + return this.world; + } + + public void setX(double x) { + this.x = x; + } + + public double GetX() { + return this.x; + } + + public void setY(double y) { + this.y = y; + } + + public double GetY() { + return this.y; + } + + public void setZ(double z) { + this.z = z; + } + + public double GetZ() { + return this.z; + } + +} diff --git a/src/com/residence/mcstats/Metrics.java b/src/com/residence/mcstats/Metrics.java index 9bce86b23..fe8bcf347 100644 --- a/src/com/residence/mcstats/Metrics.java +++ b/src/com/residence/mcstats/Metrics.java @@ -29,6 +29,7 @@ import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; @@ -64,588 +65,591 @@ public class Metrics { /** -* The current revision number -*/ + * The current revision number + */ private final static int REVISION = 6; /** -* The base url of the metrics domain -*/ + * The base url of the metrics domain + */ private static final String BASE_URL = "http://mcstats.org"; /** -* The url used to report a server's status -*/ + * The url used to report a server's status + */ private static final String REPORT_URL = "/report/%s"; /** -* The separator to use for custom data. This MUST NOT change unless you are hosting your own version of metrics and -* want to change it. -*/ + * The separator to use for custom data. This MUST NOT change unless you are hosting your own version of metrics and + * want to change it. + */ private static final String CUSTOM_DATA_SEPARATOR = "~~"; /** -* Interval of time to ping (in minutes) -*/ + * Interval of time to ping (in minutes) + */ private static final int PING_INTERVAL = 10; /** -* The plugin this metrics submits for -*/ + * The plugin this metrics submits for + */ private final Plugin plugin; /** -* All of the custom graphs to submit to metrics -*/ + * All of the custom graphs to submit to metrics + */ private final Set graphs = Collections.synchronizedSet(new HashSet()); /** -* The default graph, used for addCustomData when you don't want a specific graph -*/ + * The default graph, used for addCustomData when you don't want a specific graph + */ private final Graph defaultGraph = new Graph("Default"); /** -* The plugin configuration file -*/ + * The plugin configuration file + */ private final YamlConfiguration configuration; /** -* The plugin configuration file -*/ + * The plugin configuration file + */ private final File configurationFile; /** -* Unique server id -*/ + * Unique server id + */ private final String guid; /** -* Debug mode -*/ + * Debug mode + */ private final boolean debug; /** -* Lock for synchronization -*/ + * Lock for synchronization + */ private final Object optOutLock = new Object(); /** -* The scheduled task -*/ + * The scheduled task + */ private volatile BukkitTask task = null; public Metrics(final Plugin plugin) throws IOException { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - - this.plugin = plugin; - - // load the config - configurationFile = getConfigFile(); - configuration = YamlConfiguration.loadConfiguration(configurationFile); - - // add some defaults - configuration.addDefault("opt-out", false); - configuration.addDefault("guid", UUID.randomUUID().toString()); - configuration.addDefault("debug", false); - - // Do we need to create the file? - if (configuration.get("guid", null) == null) { - configuration.options().header("http://mcstats.org").copyDefaults(true); - configuration.save(configurationFile); - } - - // Load the guid then - guid = configuration.getString("guid"); - debug = configuration.getBoolean("debug", false); + if (plugin == null) { + throw new IllegalArgumentException("Plugin cannot be null"); + } + + this.plugin = plugin; + + // load the config + configurationFile = getConfigFile(); + configuration = YamlConfiguration.loadConfiguration(configurationFile); + + // add some defaults + configuration.addDefault("opt-out", false); + configuration.addDefault("guid", UUID.randomUUID().toString()); + configuration.addDefault("debug", false); + + // Do we need to create the file? + if (configuration.get("guid", null) == null) { + configuration.options().header("http://mcstats.org").copyDefaults(true); + configuration.save(configurationFile); + } + + // Load the guid then + guid = configuration.getString("guid"); + debug = configuration.getBoolean("debug", false); } /** -* Construct and create a Graph that can be used to separate specific plotters to their own graphs on the metrics -* website. Plotters can be added to the graph object returned. -* -* @param name The name of the graph -* @return Graph object created. Will never return NULL under normal circumstances unless bad parameters are given -*/ + * Construct and create a Graph that can be used to separate specific plotters to their own graphs on the metrics + * website. Plotters can be added to the graph object returned. + * + * @param name The name of the graph + * @return Graph object created. Will never return NULL under normal circumstances unless bad parameters are given + */ public Graph createGraph(final String name) { - if (name == null) { - throw new IllegalArgumentException("Graph name cannot be null"); - } + if (name == null) { + throw new IllegalArgumentException("Graph name cannot be null"); + } - // Construct the graph object - final Graph graph = new Graph(name); + // Construct the graph object + final Graph graph = new Graph(name); - // Now we can add our graph - graphs.add(graph); + // Now we can add our graph + graphs.add(graph); - // and return back - return graph; + // and return back + return graph; } /** -* Add a Graph object to BukkitMetrics that represents data for the plugin that should be sent to the backend -* -* @param graph The name of the graph -*/ + * Add a Graph object to BukkitMetrics that represents data for the plugin that should be sent to the backend + * + * @param graph The name of the graph + */ public void addGraph(final Graph graph) { - if (graph == null) { - throw new IllegalArgumentException("Graph cannot be null"); - } + if (graph == null) { + throw new IllegalArgumentException("Graph cannot be null"); + } - graphs.add(graph); + graphs.add(graph); } /** -* Adds a custom data plotter to the default graph -* -* @param plotter The plotter to use to plot custom data -*/ + * Adds a custom data plotter to the default graph + * + * @param plotter The plotter to use to plot custom data + */ public void addCustomData(final Plotter plotter) { - if (plotter == null) { - throw new IllegalArgumentException("Plotter cannot be null"); - } + if (plotter == null) { + throw new IllegalArgumentException("Plotter cannot be null"); + } - // Add the plotter to the graph o/ - defaultGraph.addPlotter(plotter); + // Add the plotter to the graph o/ + defaultGraph.addPlotter(plotter); - // Ensure the default graph is included in the submitted graphs - graphs.add(defaultGraph); + // Ensure the default graph is included in the submitted graphs + graphs.add(defaultGraph); } /** -* Start measuring statistics. This will immediately create an async repeating task as the plugin and send the -* initial data to the metrics backend, and then after that it will post in increments of PING_INTERVAL * 1200 -* ticks. -* -* @return True if statistics measuring is running, otherwise false. -*/ + * Start measuring statistics. This will immediately create an async repeating task as the plugin and send the + * initial data to the metrics backend, and then after that it will post in increments of PING_INTERVAL * 1200 + * ticks. + * + * @return True if statistics measuring is running, otherwise false. + */ public boolean start() { - synchronized (optOutLock) { - // Did we opt out? - if (isOptOut()) { - return false; - } - - // Is metrics already running? - if (task != null) { - return true; - } - - // Begin hitting the server with glorious data - task = plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() { - - private boolean firstPost = true; - - public void run() { - try { - // This has to be synchronized or it can collide with the disable method. - synchronized (optOutLock) { - // Disable Task, if it is running and the server owner decided to opt-out - if (isOptOut() && task != null) { - task.cancel(); - task = null; - // Tell all plotters to stop gathering information. - for (Graph graph : graphs) { - graph.onOptOut(); - } - } - } - - // We use the inverse of firstPost because if it is the first time we are posting, - // it is not a interval ping, so it evaluates to FALSE - // Each time thereafter it will evaluate to TRUE, i.e PING! - postPlugin(!firstPost); - - // After the first post we set firstPost to false - // Each post thereafter will be a ping - firstPost = false; - } catch (IOException e) { - if (debug) { - Bukkit.getLogger().log(Level.INFO, "[Metrics] " + e.getMessage()); - } - } - } - }, 0, PING_INTERVAL * 1200); - - return true; - } + synchronized (optOutLock) { + // Did we opt out? + if (isOptOut()) { + return false; + } + + // Is metrics already running? + if (task != null) { + return true; + } + + // Begin hitting the server with glorious data + task = plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() { + + private boolean firstPost = true; + + public void run() { + try { + // This has to be synchronized or it can collide with the disable method. + synchronized (optOutLock) { + // Disable Task, if it is running and the server owner decided to opt-out + if (isOptOut() && task != null) { + task.cancel(); + task = null; + // Tell all plotters to stop gathering information. + for (Graph graph : graphs) { + graph.onOptOut(); + } + } + } + + // We use the inverse of firstPost because if it is the first time we are posting, + // it is not a interval ping, so it evaluates to FALSE + // Each time thereafter it will evaluate to TRUE, i.e PING! + postPlugin(!firstPost); + + // After the first post we set firstPost to false + // Each post thereafter will be a ping + firstPost = false; + } catch (IOException e) { + if (debug) { + Bukkit.getLogger().log(Level.INFO, "[Metrics] " + e.getMessage()); + } + } + } + }, 0, PING_INTERVAL * 1200); + + return true; + } } /** -* Has the server owner denied plugin metrics? -* -* @return true if metrics should be opted out of it -*/ + * Has the server owner denied plugin metrics? + * + * @return true if metrics should be opted out of it + */ public boolean isOptOut() { - synchronized (optOutLock) { - try { - // Reload the metrics file - configuration.load(getConfigFile()); - } catch (IOException ex) { - if (debug) { - Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); - } - return true; - } catch (InvalidConfigurationException ex) { - if (debug) { - Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); - } - return true; - } - return configuration.getBoolean("opt-out", false); - } + synchronized (optOutLock) { + try { + // Reload the metrics file + configuration.load(getConfigFile()); + } catch (IOException ex) { + if (debug) { + Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); + } + return true; + } catch (InvalidConfigurationException ex) { + if (debug) { + Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); + } + return true; + } + return configuration.getBoolean("opt-out", false); + } } /** -* Enables metrics for the server by setting "opt-out" to false in the config file and starting the metrics task. -* -* @throws java.io.IOException -*/ + * Enables metrics for the server by setting "opt-out" to false in the config file and starting the metrics task. + * + * @throws java.io.IOException + */ public void enable() throws IOException { - // This has to be synchronized or it can collide with the check in the task. - synchronized (optOutLock) { - // Check if the server owner has already set opt-out, if not, set it. - if (isOptOut()) { - configuration.set("opt-out", false); - configuration.save(configurationFile); - } - - // Enable Task, if it is not running - if (task == null) { - start(); - } - } + // This has to be synchronized or it can collide with the check in the task. + synchronized (optOutLock) { + // Check if the server owner has already set opt-out, if not, set it. + if (isOptOut()) { + configuration.set("opt-out", false); + configuration.save(configurationFile); + } + + // Enable Task, if it is not running + if (task == null) { + start(); + } + } } /** -* Disables metrics for the server by setting "opt-out" to true in the config file and canceling the metrics task. -* -* @throws java.io.IOException -*/ + * Disables metrics for the server by setting "opt-out" to true in the config file and canceling the metrics task. + * + * @throws java.io.IOException + */ public void disable() throws IOException { - // This has to be synchronized or it can collide with the check in the task. - synchronized (optOutLock) { - // Check if the server owner has already set opt-out, if not, set it. - if (!isOptOut()) { - configuration.set("opt-out", true); - configuration.save(configurationFile); - } - - // Disable Task, if it is running - if (task != null) { - task.cancel(); - task = null; - } - } + // This has to be synchronized or it can collide with the check in the task. + synchronized (optOutLock) { + // Check if the server owner has already set opt-out, if not, set it. + if (!isOptOut()) { + configuration.set("opt-out", true); + configuration.save(configurationFile); + } + + // Disable Task, if it is running + if (task != null) { + task.cancel(); + task = null; + } + } } /** -* Gets the File object of the config file that should be used to store data such as the GUID and opt-out status -* -* @return the File object for the config file -*/ + * Gets the File object of the config file that should be used to store data such as the GUID and opt-out status + * + * @return the File object for the config file + */ public File getConfigFile() { - // I believe the easiest way to get the base folder (e.g craftbukkit set via -P) for plugins to use - // is to abuse the plugin object we already have - // plugin.getDataFolder() => base/plugins/PluginA/ - // pluginsFolder => base/plugins/ - // The base is not necessarily relative to the startup directory. - File pluginsFolder = plugin.getDataFolder().getParentFile(); - - // return => base/plugins/PluginMetrics/config.yml - return new File(new File(pluginsFolder, "PluginMetrics"), "config.yml"); + // I believe the easiest way to get the base folder (e.g craftbukkit set via -P) for plugins to use + // is to abuse the plugin object we already have + // plugin.getDataFolder() => base/plugins/PluginA/ + // pluginsFolder => base/plugins/ + // The base is not necessarily relative to the startup directory. + File pluginsFolder = plugin.getDataFolder().getParentFile(); + + // return => base/plugins/PluginMetrics/config.yml + return new File(new File(pluginsFolder, "PluginMetrics"), "config.yml"); } /** -* Generic method that posts a plugin to the metrics website -*/ + * Generic method that posts a plugin to the metrics website + */ private void postPlugin(final boolean isPing) throws IOException { - // Server software specific section - PluginDescriptionFile description = plugin.getDescription(); - String pluginName = description.getName(); - boolean onlineMode = Bukkit.getServer().getOnlineMode(); // TRUE if online mode is enabled - String pluginVersion = description.getVersion(); - String serverVersion = Bukkit.getVersion(); - int playersOnline = Bukkit.getServer().getOnlinePlayers().toArray().length; - - // END server software specific section -- all code below does not use any code outside of this class / Java - - // Construct the post data - final StringBuilder data = new StringBuilder(); - - // The plugin's description file containg all of the plugin data such as name, version, author, etc - data.append(encode("guid")).append('=').append(encode(guid)); - encodeDataPair(data, "version", pluginVersion); - encodeDataPair(data, "server", serverVersion); - encodeDataPair(data, "players", Integer.toString(playersOnline)); - encodeDataPair(data, "revision", String.valueOf(REVISION)); - - // New data as of R6 - String osname = System.getProperty("os.name"); - String osarch = System.getProperty("os.arch"); - String osversion = System.getProperty("os.version"); - String java_version = System.getProperty("java.version"); - int coreCount = Runtime.getRuntime().availableProcessors(); - - // normalize os arch .. amd64 -> x86_64 - if (osarch.equals("amd64")) { - osarch = "x86_64"; - } - - encodeDataPair(data, "osname", osname); - encodeDataPair(data, "osarch", osarch); - encodeDataPair(data, "osversion", osversion); - encodeDataPair(data, "cores", Integer.toString(coreCount)); - encodeDataPair(data, "online-mode", Boolean.toString(onlineMode)); - encodeDataPair(data, "java_version", java_version); - - // If we're pinging, append it - if (isPing) { - encodeDataPair(data, "ping", "true"); - } - - // Acquire a lock on the graphs, which lets us make the assumption we also lock everything - // inside of the graph (e.g plotters) - synchronized (graphs) { - final Iterator iter = graphs.iterator(); - - while (iter.hasNext()) { - final Graph graph = iter.next(); - - for (Plotter plotter : graph.getPlotters()) { - // The key name to send to the metrics server - // The format is C-GRAPHNAME-PLOTTERNAME where separator - is defined at the top - // Legacy (R4) submitters use the format Custom%s, or CustomPLOTTERNAME - final String key = String.format("C%s%s%s%s", CUSTOM_DATA_SEPARATOR, graph.getName(), CUSTOM_DATA_SEPARATOR, plotter.getColumnName()); - - // The value to send, which for the foreseeable future is just the string - // value of plotter.getValue() - final String value = Integer.toString(plotter.getValue()); - - // Add it to the http post data :) - encodeDataPair(data, key, value); - } - } - } - - // Create the url - URL url = new URL(BASE_URL + String.format(REPORT_URL, encode(pluginName))); - - // Connect to the website - URLConnection connection; - - // Mineshafter creates a socks proxy, so we can safely bypass it - // It does not reroute POST requests so we need to go around it - if (isMineshafterPresent()) { - connection = url.openConnection(Proxy.NO_PROXY); - } else { - connection = url.openConnection(); - } - - connection.setDoOutput(true); - - // Write the data - final OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); - writer.write(data.toString()); - writer.flush(); - - // Now read the response - final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - final String response = reader.readLine(); - - // close resources - writer.close(); - reader.close(); - - if (response == null || response.startsWith("ERR")) { - throw new IOException(response); //Throw the exception - } else { - // Is this the first update this hour? - if (response.contains("OK This is your first update this hour")) { - synchronized (graphs) { - final Iterator iter = graphs.iterator(); - - while (iter.hasNext()) { - final Graph graph = iter.next(); - - for (Plotter plotter : graph.getPlotters()) { - plotter.reset(); - } - } - } - } - } + // Server software specific section + PluginDescriptionFile description = plugin.getDescription(); + String pluginName = description.getName(); + boolean onlineMode = Bukkit.getServer().getOnlineMode();// TRUE if online mode is enabled + String pluginVersion = description.getVersion(); + String serverVersion = Bukkit.getVersion(); + int playersOnline = 0; + for (@SuppressWarnings("unused") Player one : Bukkit.getOnlinePlayers()) { + playersOnline++; + } + + // END server software specific section -- all code below does not use any code outside of this class / Java + + // Construct the post data + final StringBuilder data = new StringBuilder(); + + // The plugin's description file containg all of the plugin data such as name, version, author, etc + data.append(encode("guid")).append('=').append(encode(guid)); + encodeDataPair(data, "version", pluginVersion); + encodeDataPair(data, "server", serverVersion); + encodeDataPair(data, "players", Integer.toString(playersOnline)); + encodeDataPair(data, "revision", String.valueOf(REVISION)); + + // New data as of R6 + String osname = System.getProperty("os.name"); + String osarch = System.getProperty("os.arch"); + String osversion = System.getProperty("os.version"); + String java_version = System.getProperty("java.version"); + int coreCount = Runtime.getRuntime().availableProcessors(); + + // normalize os arch .. amd64 -> x86_64 + if (osarch.equals("amd64")) { + osarch = "x86_64"; + } + + encodeDataPair(data, "osname", osname); + encodeDataPair(data, "osarch", osarch); + encodeDataPair(data, "osversion", osversion); + encodeDataPair(data, "cores", Integer.toString(coreCount)); + encodeDataPair(data, "online-mode", Boolean.toString(onlineMode)); + encodeDataPair(data, "java_version", java_version); + + // If we're pinging, append it + if (isPing) { + encodeDataPair(data, "ping", "true"); + } + + // Acquire a lock on the graphs, which lets us make the assumption we also lock everything + // inside of the graph (e.g plotters) + synchronized (graphs) { + final Iterator iter = graphs.iterator(); + + while (iter.hasNext()) { + final Graph graph = iter.next(); + + for (Plotter plotter : graph.getPlotters()) { + // The key name to send to the metrics server + // The format is C-GRAPHNAME-PLOTTERNAME where separator - is defined at the top + // Legacy (R4) submitters use the format Custom%s, or CustomPLOTTERNAME + final String key = String.format("C%s%s%s%s", CUSTOM_DATA_SEPARATOR, graph.getName(), CUSTOM_DATA_SEPARATOR, plotter.getColumnName()); + + // The value to send, which for the foreseeable future is just the string + // value of plotter.getValue() + final String value = Integer.toString(plotter.getValue()); + + // Add it to the http post data :) + encodeDataPair(data, key, value); + } + } + } + + // Create the url + URL url = new URL(BASE_URL + String.format(REPORT_URL, encode(pluginName))); + + // Connect to the website + URLConnection connection; + + // Mineshafter creates a socks proxy, so we can safely bypass it + // It does not reroute POST requests so we need to go around it + if (isMineshafterPresent()) { + connection = url.openConnection(Proxy.NO_PROXY); + } else { + connection = url.openConnection(); + } + + connection.setDoOutput(true); + + // Write the data + final OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); + writer.write(data.toString()); + writer.flush(); + + // Now read the response + final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + final String response = reader.readLine(); + + // close resources + writer.close(); + reader.close(); + + if (response == null || response.startsWith("ERR")) { + throw new IOException(response);//Throw the exception + } else { + // Is this the first update this hour? + if (response.contains("OK This is your first update this hour")) { + synchronized (graphs) { + final Iterator iter = graphs.iterator(); + + while (iter.hasNext()) { + final Graph graph = iter.next(); + + for (Plotter plotter : graph.getPlotters()) { + plotter.reset(); + } + } + } + } + } } /** -* Check if mineshafter is present. If it is, we need to bypass it to send POST requests -* -* @return true if mineshafter is installed on the server -*/ + * Check if mineshafter is present. If it is, we need to bypass it to send POST requests + * + * @return true if mineshafter is installed on the server + */ private boolean isMineshafterPresent() { - try { - Class.forName("mineshafter.MineServer"); - return true; - } catch (Exception e) { - return false; - } + try { + Class.forName("mineshafter.MineServer"); + return true; + } catch (Exception e) { + return false; + } } /** -*

Encode a key/value data pair to be used in a HTTP post request. This INCLUDES a & so the first key/value pair -* MUST be included manually, e.g:

-* -* StringBuffer data = new StringBuffer(); -* data.append(encode("guid")).append('=').append(encode(guid)); -* encodeDataPair(data, "version", description.getVersion()); -* -* -* @param buffer the stringbuilder to append the data pair onto -* @param key the key value -* @param value the value -*/ + *

Encode a key/value data pair to be used in a HTTP post request. This INCLUDES a & so the first key/value pair + * MUST be included manually, e.g:

+ * + * StringBuffer data = new StringBuffer(); + * data.append(encode("guid")).append('=').append(encode(guid)); + * encodeDataPair(data, "version", description.getVersion()); + * + * + * @param buffer the stringbuilder to append the data pair onto + * @param key the key value + * @param value the value + */ private static void encodeDataPair(final StringBuilder buffer, final String key, final String value) throws UnsupportedEncodingException { - buffer.append('&').append(encode(key)).append('=').append(encode(value)); + buffer.append('&').append(encode(key)).append('=').append(encode(value)); } /** -* Encode text as UTF-8 -* -* @param text the text to encode -* @return the encoded text, as UTF-8 -*/ + * Encode text as UTF-8 + * + * @param text the text to encode + * @return the encoded text, as UTF-8 + */ private static String encode(final String text) throws UnsupportedEncodingException { - return URLEncoder.encode(text, "UTF-8"); + return URLEncoder.encode(text, "UTF-8"); } /** -* Represents a custom graph on the website -*/ + * Represents a custom graph on the website + */ public static class Graph { - /** -* The graph's name, alphanumeric and spaces only :) If it does not comply to the above when submitted, it is -* rejected -*/ - private final String name; - /** -* The set of plotters that are contained within this graph -*/ - private final Set plotters = new LinkedHashSet(); - - private Graph(final String name) { - this.name = name; - } - - /** -* Gets the graph's name -* -* @return the Graph's name -*/ - public String getName() { - return name; - } - - /** -* Add a plotter to the graph, which will be used to plot entries -* -* @param plotter the plotter to add to the graph -*/ - public void addPlotter(final Plotter plotter) { - plotters.add(plotter); - } - - /** -* Remove a plotter from the graph -* -* @param plotter the plotter to remove from the graph -*/ - public void removePlotter(final Plotter plotter) { - plotters.remove(plotter); - } - - /** -* Gets an unmodifiable set of the plotter objects in the graph -* -* @return an unmodifiable {@link java.util.Set} of the plotter objects -*/ - public Set getPlotters() { - return Collections.unmodifiableSet(plotters); - } - - @Override - public int hashCode() { - return name.hashCode(); - } - - @Override - public boolean equals(final Object object) { - if (!(object instanceof Graph)) { - return false; - } - - final Graph graph = (Graph) object; - return graph.name.equals(name); - } - - /** -* Called when the server owner decides to opt-out of BukkitMetrics while the server is running. -*/ - protected void onOptOut() { - } + /** + * The graph's name, alphanumeric and spaces only :) If it does not comply to the above when submitted, it is + * rejected + */ + private final String name; + /** + * The set of plotters that are contained within this graph + */ + private final Set plotters = new LinkedHashSet(); + + private Graph(final String name) { + this.name = name; + } + + /** + * Gets the graph's name + * + * @return the Graph's name + */ + public String getName() { + return name; + } + + /** + * Add a plotter to the graph, which will be used to plot entries + * + * @param plotter the plotter to add to the graph + */ + public void addPlotter(final Plotter plotter) { + plotters.add(plotter); + } + + /** + * Remove a plotter from the graph + * + * @param plotter the plotter to remove from the graph + */ + public void removePlotter(final Plotter plotter) { + plotters.remove(plotter); + } + + /** + * Gets an unmodifiable set of the plotter objects in the graph + * + * @return an unmodifiable {@link java.util.Set} of the plotter objects + */ + public Set getPlotters() { + return Collections.unmodifiableSet(plotters); + } + + @Override + public int hashCode() { + return name.hashCode(); + } + + @Override + public boolean equals(final Object object) { + if (!(object instanceof Graph)) { + return false; + } + + final Graph graph = (Graph) object; + return graph.name.equals(name); + } + + /** + * Called when the server owner decides to opt-out of BukkitMetrics while the server is running. + */ + protected void onOptOut() { + } } /** -* Interface used to collect custom data for a plugin -*/ + * Interface used to collect custom data for a plugin + */ public static abstract class Plotter { - /** -* The plot's name -*/ - private final String name; - - /** -* Construct a plotter with the default plot name -*/ - public Plotter() { - this("Default"); - } - - /** -* Construct a plotter with a specific plot name -* -* @param name the name of the plotter to use, which will show up on the website -*/ - public Plotter(final String name) { - this.name = name; - } - - /** -* Get the current value for the plotted point. Since this function defers to an external function it may or may -* not return immediately thus cannot be guaranteed to be thread friendly or safe. This function can be called -* from any thread so care should be taken when accessing resources that need to be synchronized. -* -* @return the current value for the point to be plotted. -*/ - public abstract int getValue(); - - /** -* Get the column name for the plotted point -* -* @return the plotted point's column name -*/ - public String getColumnName() { - return name; - } - - /** -* Called after the website graphs have been updated -*/ - public void reset() { - } - - @Override - public int hashCode() { - return getColumnName().hashCode(); - } - - @Override - public boolean equals(final Object object) { - if (!(object instanceof Plotter)) { - return false; - } - - final Plotter plotter = (Plotter) object; - return plotter.name.equals(name) && plotter.getValue() == getValue(); - } + /** + * The plot's name + */ + private final String name; + + /** + * Construct a plotter with the default plot name + */ + public Plotter() { + this("Default"); + } + + /** + * Construct a plotter with a specific plot name + * + * @param name the name of the plotter to use, which will show up on the website + */ + public Plotter(final String name) { + this.name = name; + } + + /** + * Get the current value for the plotted point. Since this function defers to an external function it may or may + * not return immediately thus cannot be guaranteed to be thread friendly or safe. This function can be called + * from any thread so care should be taken when accessing resources that need to be synchronized. + * + * @return the current value for the point to be plotted. + */ + public abstract int getValue(); + + /** + * Get the column name for the plotted point + * + * @return the plotted point's column name + */ + public String getColumnName() { + return name; + } + + /** + * Called after the website graphs have been updated + */ + public void reset() { + } + + @Override + public int hashCode() { + return getColumnName().hashCode(); + } + + @Override + public boolean equals(final Object object) { + if (!(object instanceof Plotter)) { + return false; + } + + final Plotter plotter = (Plotter) object; + return plotter.name.equals(name) && plotter.getValue() == getValue(); + } } } \ No newline at end of file From e32dbf497a8c78d27564e1a65f1b73189a938fe1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 9 Nov 2015 12:17:55 +0200 Subject: [PATCH 0081/1142] Day/night remove flag fix --- .../listeners/ResidencePlayerListener.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 143556529..3debb4333 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -102,7 +102,30 @@ public void reload() { lastUpdate.put(player.getName(), System.currentTimeMillis()); } } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeShopDayNight(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + if (!event.getFlag().equalsIgnoreCase("day") && !event.getFlag().equalsIgnoreCase("night")) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + for (Player one : event.getResidence().getPlayersInResidence()) + one.resetPlayerTime(); + break; + case INVALID: + break; + case TRUE: + break; + default: + break; + } + } + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onCommand(PlayerCommandPreprocessEvent event) { Player player = event.getPlayer(); From 0dd2361d21fb930707f93d4708e469f68a1333c4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 9 Nov 2015 13:55:43 +0200 Subject: [PATCH 0082/1142] Added missing lease renew and cost commands descriptions --- src/com/bekvon/bukkit/residence/Locale.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index babf8d6fa..f7e302eec 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -655,11 +655,24 @@ public static void LoadLang(String lang) { "CommandHelp.SubCommands.res.SubCommands.lease.Info", Arrays.asList("Usage: /res lease [renew/cost] [residence]", "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money."), writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", Arrays.asList("Usage: /resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite."), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Description", "Renew the lease time", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Info", + Arrays.asList("Usage: /resadmin lease renew ", "Renews the lease time for current or specified residence."), writer, conf, + true); + + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Description", "Shows renew cost", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Info", + Arrays.asList("Usage: /resadmin lease cost ", "Shows how much money you need to renew residence lease."), writer, conf, + true); + // res bank GetConfigString("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.bank.Info", From 2496ade2c3128fe52ac420d68370ac89cef6c573 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 9 Nov 2015 14:38:15 +0200 Subject: [PATCH 0083/1142] Added customizable date format / added res lease expires command --- .../bukkit/residence/ConfigManager.java | 9 ++++++++ src/com/bekvon/bukkit/residence/Locale.java | 12 +++++++---- .../residence/ResidenceCommandListener.java | 21 +++++++++++++++++++ .../residence/economy/TransactionManager.java | 3 +-- .../residence/economy/rent/RentManager.java | 5 ++++- .../residence/protection/LeaseManager.java | 8 +++++-- 6 files changed, 49 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 638a0f1e8..07def4d05 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -99,6 +99,7 @@ public class ConfigManager { protected Map globalGroupDefaults; protected String language; protected String DefaultWorld; + protected String DateFormat; protected boolean preventBuildInRent; protected boolean stopOnSaveError; protected boolean legacyperms; @@ -447,6 +448,10 @@ void UpdateConfigFile() { writer.addComment("Global.UseLeaseSystem", "Enable / Disable the Lease System."); useLeases = GetConfigBoolean("Global.UseLeaseSystem", false, writer, conf); + writer.addComment("Global.DateFormat", "Sets date format when shown in example lease or rent expire date", + "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); + DateFormat = GetConfigString("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz", writer, conf, false); + writer.addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); ResMoneyBack = GetConfigBoolean("Global.ResMoneyBack", false, writer, conf); @@ -931,6 +936,10 @@ public String getDefaultWorld() { return DefaultWorld; } + public String getDateFormat() { + return DateFormat; + } + public boolean preventRentModify() { return preventBuildInRent; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index f7e302eec..09977d8b9 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -655,19 +655,22 @@ public static void LoadLang(String lang) { "CommandHelp.SubCommands.res.SubCommands.lease.Info", Arrays.asList("Usage: /res lease [renew/cost] [residence]", "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money."), writer, conf, true); - + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", Arrays.asList("Usage: /resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Description", "Renew the lease time", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Info", Arrays.asList("Usage: /resadmin lease renew ", "Renews the lease time for current or specified residence."), writer, conf, true); - + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Description", "Lease end date", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Info", + Arrays.asList("Usage: /resadmin lease expires ", "Shows when expires residence lease time."), writer, conf, + true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Description", "Shows renew cost", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Info", Arrays.asList("Usage: /resadmin lease cost ", "Shows how much money you need to renew residence lease."), writer, conf, @@ -676,7 +679,8 @@ public static void LoadLang(String lang) { // res bank GetConfigString("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.bank.Info", - Arrays.asList("Usage: /res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", "You must have the +bank flag."), writer, conf, + Arrays.asList("Usage: /res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", + "You must have the +bank flag."), writer, conf, true); // res confirm diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 9f74dc7d2..748883500 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1872,6 +1872,27 @@ private boolean commandResBank(String[] args, boolean resadmin, CommandSender se private boolean commandResLease(String[] args, boolean resadmin, Player player, int page) { if (args.length == 2 || args.length == 3) { + if (args[1].equals("expires")) { + ClaimedResidence res = null; + if (args.length == 2) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + return true; + } + } else { + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + return true; + } + } + + String until = ResidenceCommandListener.getLeaseManager().getExpireTime(res.getName()); + if (until != null) + player.sendMessage(ChatColor.GREEN + language.getPhrase("LeaseRenew", until)); + return true; + } if (args[1].equals("renew")) { if (args.length == 3) { leasemanager.renewArea(args[2], player); diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index fa5610b73..90fbe55cb 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -15,7 +15,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import java.util.Collections; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; @@ -250,7 +249,7 @@ public void viewSaleInfo(String areaname, Player player) { player.sendMessage(ChatColor.YELLOW + "Name:" + ChatColor.DARK_GREEN + " " + areaname); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("SellAmount") + ":" + ChatColor.RED + " " + sellAmount.get(areaname)); if (Residence.getConfigManager().useLeases()) { - Date etime = Residence.getLeaseManager().getExpireTime(areaname); + String etime = Residence.getLeaseManager().getExpireTime(areaname); if (etime != null) { player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + etime.toString()); } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 93a0e5065..28417f584 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -16,6 +16,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.SignUtil; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -362,7 +363,9 @@ public void printRentInfo(Player player, String landName) { if (rented != null) { player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Status") + ":" + ChatColor.YELLOW + " " + Residence.getLanguage().getPhrase( "ResidenceRentedBy", ChatColor.RED + rented.player + ChatColor.YELLOW)); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("RentExpire") + ":" + ChatColor.GREEN + new Date(rented.endTime)); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("RentExpire") + ":" + ChatColor.GREEN + new SimpleDateFormat(Residence + .getConfigManager().getDateFormat()).format(new Date(rented.endTime))); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RentAutoRenew") + ":" + ChatColor.DARK_AQUA + rented.autoRefresh); } else { player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Status") + ":" + ChatColor.GREEN + " " + Residence.getLanguage().getPhrase( diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index 0b1868868..d7bf855c5 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -12,6 +12,8 @@ import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.permissions.PermissionGroup; + +import java.text.SimpleDateFormat; import java.util.Collections; import java.util.Date; import java.util.HashMap; @@ -40,9 +42,11 @@ public boolean leaseExpires(String area) { return leaseExpireTime.containsKey(area); } - public Date getExpireTime(String area) { + public String getExpireTime(String area) { if (leaseExpireTime.containsKey(area)) { - return new Date(leaseExpireTime.get(area)); + Date dNow = new Date(leaseExpireTime.get(area)); + SimpleDateFormat ft = new SimpleDateFormat(Residence.getConfigManager().getDateFormat()); + return ft.format(dNow); } return null; } From b6b95345303ebd8abbdc1b6155e12d04b9b86e40 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 9 Nov 2015 15:05:57 +0200 Subject: [PATCH 0084/1142] version change --- src/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugin.yml b/src/plugin.yml index d10b4ace6..ae40f8968 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.8.1 +version: 2.9.9.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From c850cadce295ce9c3a55450130f824bb49fbe5d3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 9 Nov 2015 15:21:03 +0200 Subject: [PATCH 0085/1142] Added missing locale for new res shop commands --- src/com/bekvon/bukkit/residence/Locale.java | 24 +++++++++++++++++++ .../residence/ResidenceCommandListener.java | 4 ++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 09977d8b9..fd95a2a8e 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -608,6 +608,30 @@ public static void LoadLang(String lang) { GetConfigArray("CommandHelp.SubCommands.res.SubCommands.rt.Info", Arrays.asList("Usage: /res rt", "Teleports you to random location in defined world."), writer, conf, true); + // res shop + GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.Description", "Manage residence shop", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.Info", Arrays.asList("Manages residence shop feature"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Description", "Shows list of res shops", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Info", Arrays.asList("Usage: /res shop list", + "Shows full list of all residences with shop flag"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Description", "Vote for residence shop", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Info", Arrays.asList("Usage: /res shop vote [amount]", + "Votes for current or defined residence"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Description", "Sets residence shop description", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Info", Arrays.asList("Usage: /res shop setdesc [text]", + "Sets residence shop description. Color code supported. For new line use /n"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Description", "Create res shop board", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Info", Arrays.asList("Usage: /res shop createboard [place]", + "Creates res shop board from selected area. Place - position from which to start filling board"), writer, conf, true); + + GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Description", "Deletes res shop board", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Info", Arrays.asList("Usage: /res shop deleteboard", + "Deletes res shop board bi right clicking on one of signs"), writer, conf, true); + // res tpconfirm GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 748883500..66e0b4565 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -650,7 +650,7 @@ public void run() { .replace("%3", one.getKey().getRes().getOwner()).replace("%4", votestat); String desc = one.getKey().getRes().getShopDesc() == null ? NewLanguage.getMessage("Language.Shop.NoDesc") : NewLanguage.getMessage( - "Language.Shop.Desc").replace("%1", ChatColor.translateAlternateColorCodes('&', one.getKey().getRes().getShopDesc())); + "Language.Shop.Desc").replace("%1", ChatColor.translateAlternateColorCodes('&', one.getKey().getRes().getShopDesc().replace("/n", "\n"))); String prev = "[\"\",{\"text\":\"" + ChatColor.GOLD + " " + message + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/res tp " + one.getKey().getRes().getName() @@ -725,7 +725,7 @@ public void run() { player.sendMessage(NewLanguage.getMessage("Language.Shop.DescChange").replace("%1", ChatColor.translateAlternateColorCodes('&', desc))); return true; } - if (args.length == 3 && args[1].equalsIgnoreCase("create")) { + if (args.length == 3 && args[1].equalsIgnoreCase("createboard")) { if (!resadmin) { player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); From 3ee9b631daa329f864e1c215e40d396726504ca5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 9 Nov 2015 15:36:51 +0200 Subject: [PATCH 0086/1142] No voting if residence dont have shop flag --- src/com/bekvon/bukkit/residence/Locale.java | 1 + .../bukkit/residence/ResidenceCommandListener.java | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index fd95a2a8e..79e859576 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -412,6 +412,7 @@ public static void LoadLang(String lang) { GetConfigString("Language.Shop.InvalidSelection", "&cLeft click with selection tool top left sign and then right click bottom right", writer, conf, true); GetConfigString("Language.Shop.VoteChanged", "&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence", writer, conf, true); GetConfigString("Language.Shop.Voted", "&6You voted, and gave &e%1 &6votes to &e%2 &6residence", writer, conf, true); + GetConfigString("Language.Shop.CantVote", "&cResidence don't have shop flag set to true", writer, conf, true); GetConfigString("Language.Shop.VotedRange", "&6Vote range is from &e%1 &6to &e%2", writer, conf, true); GetConfigString("Language.Shop.SignLines.1", "&e--== &8%1 &e==--", writer, conf, true); GetConfigString("Language.Shop.SignLines.2", "&9%1", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 66e0b4565..550299056 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -783,8 +783,9 @@ public void run() { if ((args.length == 3 || args.length == 4) && args[1].equalsIgnoreCase("vote")) { String resName = ""; int vote = 5; + ClaimedResidence res = null; if (args.length == 3) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { player.sendMessage(language.getPhrase("NotInResidence")); return true; @@ -798,7 +799,7 @@ public void run() { } resName = res.getName(); } else { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { player.sendMessage(language.getPhrase("InvalidResidence")); return true; @@ -812,6 +813,10 @@ public void run() { } resName = res.getName(); } + if (!res.getPermissions().has("shop", false)){ + player.sendMessage(NewLanguage.getMessage("Language.Shop.CantVote")); + return true; + } if (vote < Residence.getConfigManager().getVoteRangeFrom() || vote > Residence.getConfigManager().getVoteRangeTo()) { player.sendMessage(NewLanguage.getMessage("Language.Shop.VotedRange", Residence.getConfigManager().getVoteRangeFrom() + "%" + Residence From eb8d66e3c3ef66f16c42faf254bc4fd60588effa Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 9 Nov 2015 15:39:39 +0200 Subject: [PATCH 0087/1142] default vote will be half of max vote, not fixed --- src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index db06d2266..af7abdd46 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -140,7 +140,7 @@ public static Vote getAverageVote(String resName) { ConcurrentHashMap> allvotes = GetAllVoteList(); if (!allvotes.containsKey(resName)) - return new Vote(5.0, 0); + return new Vote(Residence.getConfigManager().getVoteRangeTo() / 2, 0); List votes = allvotes.get(resName); From 9df05c981e7fd3ee781a42370a13fcc6260d5ed8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 9 Nov 2015 17:46:16 +0200 Subject: [PATCH 0088/1142] Added missing locale / fixed res sign time zone --- .../bekvon/bukkit/residence/ConfigManager.java | 10 ++++++++++ src/com/bekvon/bukkit/residence/Locale.java | 3 +++ .../residence/ResidenceCommandListener.java | 2 +- .../residence/economy/TransactionManager.java | 6 +++--- .../residence/economy/rent/RentManager.java | 6 ++---- .../residence/protection/LeaseManager.java | 7 ++----- .../residence/protection/ResidenceManager.java | 4 ++-- .../bukkit/residence/signsStuff/SignUtil.java | 2 ++ .../bekvon/bukkit/residence/utils/GetTime.java | 16 ++++++++++++++++ src/plugin.yml | 2 +- 10 files changed, 42 insertions(+), 16 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/utils/GetTime.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 07def4d05..5d1a0a141 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -20,6 +20,7 @@ import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -100,6 +101,7 @@ public class ConfigManager { protected String language; protected String DefaultWorld; protected String DateFormat; + protected String TimeZone; protected boolean preventBuildInRent; protected boolean stopOnSaveError; protected boolean legacyperms; @@ -452,6 +454,10 @@ void UpdateConfigFile() { "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); DateFormat = GetConfigString("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz", writer, conf, false); + writer.addComment("Global.TimeZone", "Sets time zone for showing date, usefull when server is in different country then main server player base", + "Full list of posible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); + TimeZone = GetConfigString("Global.TimeZone", Calendar.getInstance().getTimeZone().getID(), writer, conf, false); + writer.addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); ResMoneyBack = GetConfigBoolean("Global.ResMoneyBack", false, writer, conf); @@ -940,6 +946,10 @@ public String getDateFormat() { return DateFormat; } + public String getTimeZone() { + return TimeZone; + } + public boolean preventRentModify() { return preventBuildInRent; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 79e859576..39d3151d4 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -122,6 +122,7 @@ public static void LoadLang(String lang) { GetConfigString("Language.AreaToSmallX", "Your x selection length is too small. %1 allowed %2", writer, conf, true); GetConfigString("Language.AreaToSmallY", "Your selection height is too small. %1 allowed %2", writer, conf, true); GetConfigString("Language.AreaToSmallZ", "Your z selection length is too small. %1 allowed %2", writer, conf, true); + GetConfigString("Language.AreaName", "Name", writer, conf, true); GetConfigString("Language.AreaRename", "Renamed area %1 to %2", writer, conf, true); GetConfigString("Language.AreaRemove", "Removed area %1...", writer, conf, true); GetConfigString("Language.AreaRemoveLast", "Cannot remove the last area in a residence.", writer, conf, true); @@ -201,6 +202,7 @@ public static void LoadLang(String lang) { GetConfigString("Language.InfoTool", "Info Tool", writer, conf, true); GetConfigString("Language.NoBankAccess", "You dont have bank access.", writer, conf, true); GetConfigString("Language.NotEnoughMoney", "You dont have enough money.", writer, conf, true); + GetConfigString("Language.Bank", "Bank", writer, conf, true); GetConfigString("Language.BankNoMoney", "Not enough money in the bank.", writer, conf, true); GetConfigString("Language.BankDeposit", "You deposit %1 into the residence bank.", writer, conf, true); GetConfigString("Language.BankWithdraw", "You withdraw %1 from the residence bank.", writer, conf, true); @@ -211,6 +213,7 @@ public static void LoadLang(String lang) { // writer, conf, true); GetConfigString("Language.RentReleaseInvalid", "Residence %1 is not rented or for rent.", writer, conf, true); GetConfigString("Language.RentSellFail", "Cannot sell a Residence if it is for rent.", writer, conf, true); + GetConfigString("Language.RentedBy", "Rented by", writer, conf, true); GetConfigString("Language.SellRentFail", "Cannot rent a Residence if it is for sale.", writer, conf, true); GetConfigString("Language.OwnerBuyFail", "Cannot buy your own land!", writer, conf, true); GetConfigString("Language.OwnerRentFail", "Cannot rent your own land!", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 550299056..378e132a4 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -813,7 +813,7 @@ public void run() { } resName = res.getName(); } - if (!res.getPermissions().has("shop", false)){ + if (!res.getPermissions().has("shop", false)) { player.sendMessage(NewLanguage.getMessage("Language.Shop.CantVote")); return true; } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 90fbe55cb..fa85910d2 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -193,10 +193,10 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { this.removeFromSale(areaname); SignUtil.CheckSign(res); - + CuboidArea area = res.getAreaArray()[0]; Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); - + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "|" + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBought", ChatColor.GREEN + areaname + ChatColor.YELLOW)); @@ -246,7 +246,7 @@ public boolean isForSale(String areaname) { public void viewSaleInfo(String areaname, Player player) { if (sellAmount.containsKey(areaname)) { player.sendMessage("------------------------"); - player.sendMessage(ChatColor.YELLOW + "Name:" + ChatColor.DARK_GREEN + " " + areaname); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("AreaName") + ":" + ChatColor.DARK_GREEN + " " + areaname); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("SellAmount") + ":" + ChatColor.RED + " " + sellAmount.get(areaname)); if (Residence.getConfigManager().useLeases()) { String etime = Residence.getLeaseManager().getExpireTime(areaname); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 28417f584..723a453a6 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -15,10 +15,9 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.SignUtil; +import com.bekvon.bukkit.residence.utils.GetTime; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -363,8 +362,7 @@ public void printRentInfo(Player player, String landName) { if (rented != null) { player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Status") + ":" + ChatColor.YELLOW + " " + Residence.getLanguage().getPhrase( "ResidenceRentedBy", ChatColor.RED + rented.player + ChatColor.YELLOW)); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("RentExpire") + ":" + ChatColor.GREEN + new SimpleDateFormat(Residence - .getConfigManager().getDateFormat()).format(new Date(rented.endTime))); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("RentExpire") + ":" + ChatColor.GREEN + GetTime.getTime(rented.endTime)); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RentAutoRenew") + ":" + ChatColor.DARK_AQUA + rented.autoRefresh); } else { diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index d7bf855c5..1f077e405 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -12,10 +12,9 @@ import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.utils.GetTime; -import java.text.SimpleDateFormat; import java.util.Collections; -import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -44,9 +43,7 @@ public boolean leaseExpires(String area) { public String getExpireTime(String area) { if (leaseExpireTime.containsKey(area)) { - Date dNow = new Date(leaseExpireTime.get(area)); - SimpleDateFormat ft = new SimpleDateFormat(Residence.getConfigManager().getDateFormat()); - return ft.format(dNow); + return GetTime.getTime(leaseExpireTime.get(area)); } return null; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1c2730df2..afb39d19c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -510,12 +510,12 @@ public void printAreaInfo(String areaname, Player player) { if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { msg += ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW - + " Rented by: " + ChatColor.RED + Residence.getRentManager().getRentingPlayer(areaname); + + " " + Residence.getLanguage().getPhrase("RentedBy") + ": " + ChatColor.RED + Residence.getRentManager().getRentingPlayer(areaname); } else { msg += " " + ChatColor.YELLOW + Residence.getLanguage().getPhrase("Owner") + ":" + ChatColor.RED + " " + perms.getOwner() + ChatColor.YELLOW; } - msg += ChatColor.YELLOW + " Bank: " + ChatColor.GOLD + res.getBank().getStoredMoney(); + msg += ChatColor.YELLOW + " " + Residence.getLanguage().getPhrase("Bank") + ": " + ChatColor.GOLD + res.getBank().getStoredMoney(); player.sendMessage(msg); } else { diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 044750632..ecc729a98 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -7,6 +7,7 @@ import java.util.Calendar; import java.util.List; import java.util.Set; +import java.util.TimeZone; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -167,6 +168,7 @@ public static boolean SignUpdate(Signs Sign) { time = rentedPlace.endTime; SimpleDateFormat formatter = new SimpleDateFormat(Residence.getLanguage().getPhrase("SignDateFormat")); + formatter.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(time); String timeString = formatter.format(calendar.getTime()); diff --git a/src/com/bekvon/bukkit/residence/utils/GetTime.java b/src/com/bekvon/bukkit/residence/utils/GetTime.java new file mode 100644 index 000000000..07a89a9a3 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/GetTime.java @@ -0,0 +1,16 @@ +package com.bekvon.bukkit.residence.utils; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.TimeZone; + +import com.bekvon.bukkit.residence.Residence; + +public class GetTime { + public static String getTime(Long time) { + Date dNow = new Date(time); + SimpleDateFormat ft = new SimpleDateFormat(Residence.getConfigManager().getDateFormat()); + ft.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); + return ft.format(dNow); + } +} diff --git a/src/plugin.yml b/src/plugin.yml index ae40f8968..0bbfdc8c3 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.9.0 +version: 2.9.9.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 7df2c65254bfa537c82971de45b1664919f8a013 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 10 Nov 2015 15:41:09 +0200 Subject: [PATCH 0089/1142] Small fixes / added missing locale lines --- src/com/bekvon/bukkit/residence/Locale.java | 2 + .../residence/ResidenceCommandListener.java | 2 +- .../bukkit/residence/shopStuff/Board.java | 4 ++ .../residence/shopStuff/ShopListener.java | 45 +++++++++++++------ .../residence/shopStuff/ShopSignUtil.java | 1 + src/plugin.yml | 2 +- 6 files changed, 40 insertions(+), 16 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 39d3151d4..e63f6f70e 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -412,6 +412,8 @@ public static void LoadLang(String lang) { GetConfigString("Language.Shop.DescChange", "&6Description changed to: %1", writer, conf, true); GetConfigString("Language.Shop.NewBoard", "&6Successfully added new shop sign board", writer, conf, true); GetConfigString("Language.Shop.DeleteBoard", "&6Right click sign of board you want to delete", writer, conf, true); + GetConfigString("Language.Shop.DeletedBoard", "&6Sign board removed", writer, conf, true); + GetConfigString("Language.Shop.IncorrectBoard", "&cThis is not sign board, try performing command again and clicking correct sign", writer, conf, true); GetConfigString("Language.Shop.InvalidSelection", "&cLeft click with selection tool top left sign and then right click bottom right", writer, conf, true); GetConfigString("Language.Shop.VoteChanged", "&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence", writer, conf, true); GetConfigString("Language.Shop.Voted", "&6You voted, and gave &e%1 &6votes to &e%2 &6residence", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 378e132a4..e008412b9 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -683,7 +683,7 @@ public void run() { return true; } - if (args.length == 2 && args[1].equalsIgnoreCase("delete")) { + if (args.length == 2 && args[1].equalsIgnoreCase("DeleteBoard")) { if (!resadmin) { player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); diff --git a/src/com/bekvon/bukkit/residence/shopStuff/Board.java b/src/com/bekvon/bukkit/residence/shopStuff/Board.java index 7c0e0f7e5..2756ab673 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/Board.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/Board.java @@ -30,6 +30,10 @@ public class Board { public Board() { } + public void clearSignLoc() { + SignLocations.clear(); + } + public void addSignLoc(String resName, Location loc) { SignLocations.put(resName, loc); } diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index 48f98590b..47b6d02d6 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -15,6 +15,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; +import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; @@ -43,29 +44,45 @@ public void onSignInteract(PlayerInteractEvent event) { Location loc = block.getLocation(); - Board Found = null; - - String resName = null; - for (Board one : ShopSignUtil.GetAllBoards()) { - resName = one.getResNameByLoc(loc); - if (resName != null) { - Found = one; - break; - } - } - if (Delete.contains(player.getName())) { - if (resName != null) { + Board Found = null; + for (Board one : ShopSignUtil.GetAllBoards()) { + for (Location location : one.GetLocations()) { + + if (!loc.getWorld().getName().equalsIgnoreCase(location.getWorld().getName())) + continue; + if (loc.getBlockX() != location.getBlockX()) + continue; + if (loc.getBlockY() != location.getBlockY()) + continue; + if (loc.getBlockZ() != location.getBlockZ()) + continue; + + Found = one; + break; + } + + if (Found != null) + break; + } + if (Found != null) { ShopSignUtil.GetAllBoards().remove(Found); ShopSignUtil.saveSigns(); - event.getPlayer().sendMessage("Sign board removed"); + event.getPlayer().sendMessage(NewLanguage.getMessage("Language.Shop.DeletedBoard")); } else { - event.getPlayer().sendMessage("This is not sign board, try performing command again and clicking correct block"); + event.getPlayer().sendMessage(NewLanguage.getMessage("Language.Shop.IncorrectBoard")); } Delete.remove(player.getName()); return; } + String resName = null; + for (Board one : ShopSignUtil.GetAllBoards()) { + resName = one.getResNameByLoc(loc); + if (resName != null) + break; + } + if (resName != null) Bukkit.dispatchCommand(event.getPlayer(), "res tp " + resName); } diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index af7abdd46..3236b1a17 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -260,6 +260,7 @@ public static void saveSigns() { public static boolean BoardUpdate() { for (Board board : GetAllBoards()) { + board.clearSignLoc(); List SignsLocation = board.GetLocations(); ArrayList ShopNames = new ArrayList(ShopSignUtil.getSortedShopList().keySet()); diff --git a/src/plugin.yml b/src/plugin.yml index 0bbfdc8c3..41e954907 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.9.1 +version: 2.9.9.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 9ea8cc7699a6ff2c2f13acec86b14a5c24526fb4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 11 Nov 2015 17:57:40 +0200 Subject: [PATCH 0090/1142] New command /res shop votes --- src/com/bekvon/bukkit/residence/Locale.java | 8 ++ .../residence/ResidenceCommandListener.java | 116 +++++++++++++++++- .../bekvon/bukkit/residence/gui/SetFlag.java | 11 ++ .../residence/shopStuff/ShopSignUtil.java | 20 ++- .../bukkit/residence/shopStuff/ShopVote.java | 14 ++- src/flags.yml | 2 + src/plugin.yml | 2 +- 7 files changed, 165 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index e63f6f70e..3c1c1c1d4 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -407,6 +407,10 @@ public static void LoadLang(String lang) { GetConfigString("Language.Shop.ListTopLine", "&6%1 &eShop list - Page &6%2 &eof &6%3 %4", writer, conf, true); GetConfigString("Language.Shop.List", " &e%1. &6%2 &e(&6%3&e) %4", writer, conf, true); GetConfigString("Language.Shop.ListVoted", "&e%1 (&6%2&e)", writer, conf, true); + + GetConfigString("Language.Shop.VotesTopLine", "&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5", writer, conf, true); + GetConfigString("Language.Shop.VotesList", " &e%1. &6%2 &e%3 &7%4", writer, conf, true); + GetConfigString("Language.Shop.NoDesc", "&6No description", writer, conf, true); GetConfigString("Language.Shop.Desc", "&6Description:\n%1", writer, conf, true); GetConfigString("Language.Shop.DescChange", "&6Description changed to: %1", writer, conf, true); @@ -626,6 +630,10 @@ public static void LoadLang(String lang) { GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Info", Arrays.asList("Usage: /res shop vote [amount]", "Votes for current or defined residence"), writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Description", "Shows res shop votes", writer, conf, true); + GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Info", Arrays.asList("Usage: /res shop votes ", + "Shows full vote list of current or defined residence shop"), writer, conf, true); + GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Description", "Sets residence shop description", writer, conf, true); GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Info", Arrays.asList("Usage: /res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n"), writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index e008412b9..cddcf9e02 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -2,11 +2,14 @@ import java.util.logging.Level; import java.util.logging.Logger; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TimeZone; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -39,6 +42,7 @@ import com.bekvon.bukkit.residence.shopStuff.Vote; import com.bekvon.bukkit.residence.signsStuff.SignUtil; import com.bekvon.bukkit.residence.spout.ResidenceSpout; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.RandomTp; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldguard.protection.regions.ProtectedRegion; @@ -598,7 +602,113 @@ public void run() { return false; } if (cmd.equals("shop")) { + if ((args.length == 2 || args.length == 3 || args.length == 4) && args[1].equalsIgnoreCase("votes")) { + int VotePage = 1; + + ClaimedResidence res = null; + if (args.length == 2) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(language.getPhrase("NotInResidence")); + return true; + } + } else if (args.length == 3) { + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + try { + VotePage = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); + return true; + } + } + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(language.getPhrase("NotInResidence")); + return true; + } + + } else if (args.length == 4) { + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + player.sendMessage(language.getPhrase("NotInResidence")); + return true; + } + try { + VotePage = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); + return true; + } + } + + Map> ShopList = ShopSignUtil.GetAllVoteList(); + + List VoteList = new ArrayList(); + if (ShopList.containsKey(res.getName())) { + VoteList = ShopList.get(res.getName()); + Debug.D(res.getName() + " contains " + VoteList.size()); + } + + String separator = ChatColor.GOLD + ""; + String simbol = "\u25AC"; + for (int i = 0; i < 5; i++) { + separator += simbol; + } + int pagecount = (int) Math.ceil((double) VoteList.size() / (double) 10); + if (page > pagecount || page < 1) { + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); + return true; + } + + player.sendMessage(NewLanguage.getMessage("Language.Shop.VotesTopLine", separator + "%" + res.getName() + "%" + VotePage + "%" + pagecount + "%" + + separator)); + + int start = VotePage * 10 - 9; + int end = VotePage * 10 + 1; + int position = 0; + int i = start; + for (ShopVote one : VoteList) { + position++; + + if (position < start) + continue; + + if (position >= end) + break; + + Date dNow = new Date(one.getTime()); + SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss"); + ft.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); + String timeString = ft.format(dNow); + + String message = NewLanguage.getMessage("Language.Shop.VotesList", i + "%" + one.getName() + "%" + one.getVote() + "%" + timeString); + player.sendMessage(message); + i++; + } + + if (pagecount == 1) + return true; + + int NextPage = page + 1; + NextPage = page < pagecount ? NextPage : page; + int Prevpage = page - 1; + Prevpage = page > 1 ? Prevpage : page; + + String prevCmd = "/res shop votes " + res.getName() + " " + Prevpage; + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLanguage().getPhrase("PrevInfoPage") + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; + String nextCmd = "/res shop votes " + res.getName() + " " + NextPage; + String next = " {\"text\":\"" + Residence.getLanguage().getPhrase("NextInfoPage") + " " + separator + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); + + return true; + } if ((args.length == 2 || args.length == 3) && args[1].equalsIgnoreCase("list")) { int Shoppage = 1; @@ -821,7 +931,6 @@ public void run() { if (vote < Residence.getConfigManager().getVoteRangeFrom() || vote > Residence.getConfigManager().getVoteRangeTo()) { player.sendMessage(NewLanguage.getMessage("Language.Shop.VotedRange", Residence.getConfigManager().getVoteRangeFrom() + "%" + Residence .getConfigManager().getVoteRangeTo())); - return true; } @@ -834,18 +943,19 @@ public void run() { if (OneVote.getName().equalsIgnoreCase(player.getName())) { player.sendMessage(NewLanguage.getMessage("Language.Shop.VoteChanged", OneVote.getVote() + "%" + vote + "%" + resName)); OneVote.setVote(vote); + OneVote.setTime(System.currentTimeMillis()); found = true; break; } } if (!found) { - ShopVote newVote = new ShopVote(player.getName(), vote); + ShopVote newVote = new ShopVote(player.getName(), vote, System.currentTimeMillis()); list.add(newVote); player.sendMessage(NewLanguage.getMessage("Language.Shop.Voted", vote + "%" + resName)); } } else { List list = new ArrayList(); - ShopVote newVote = new ShopVote(player.getName(), vote); + ShopVote newVote = new ShopVote(player.getName(), vote, System.currentTimeMillis()); list.add(newVote); VoteList.put(resName, list); player.sendMessage(NewLanguage.getMessage("Language.Shop.Voted", vote + "%" + resName)); diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 83ce64c9e..106802f15 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -192,6 +192,17 @@ public void recalculateInv(ClaimedResidence res) { for (Entry one : permMap.entrySet()) { ItemStack MiscInfo = Residence.getConfigManager().getGuiRemove(); + switch (one.getValue()) { + case 0: + MiscInfo = Residence.getConfigManager().getGuiFalse(); + break; + case 1: + MiscInfo = Residence.getConfigManager().getGuiTrue(); + break; + case 2: + break; + } + if (flagData.contains(one.getKey())) MiscInfo = flagData.getItem(one.getKey()); diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index 3236b1a17..354efb9c4 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -85,7 +85,11 @@ public static void LoadShopVotes() { int vote = -1; try { - vote = Integer.parseInt(oneEntry.split("%")[1]); + String voteString = oneEntry.split("%")[1]; + if (voteString.contains("!")){ + voteString = oneEntry.split("%")[1].split("!")[0]; + } + vote = Integer.parseInt(voteString); } catch (Exception ex) { continue; } @@ -93,7 +97,17 @@ public static void LoadShopVotes() { vote = 0; else if (vote > 10) vote = 10; - VoteList.add(new ShopVote(name, vote)); + + long time = 0L; + + if (oneEntry.contains("!")) + try { + time = Long.parseLong(oneEntry.split("!")[1]); + } catch (Exception ex) { + time = System.currentTimeMillis(); + } + + VoteList.add(new ShopVote(name, vote, time)); } addVote(category, VoteList); @@ -121,7 +135,7 @@ public static void saveShopVotes() { List list = new ArrayList(); for (ShopVote oneVote : one.getValue()) { - list.add(oneVote.getName() + "%" + oneVote.getVote()); + list.add(oneVote.getName() + "%" + oneVote.getVote() + "!" + oneVote.getTime()); } writer.set(path, list); } diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopVote.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopVote.java index 6ba619643..b5832d3a3 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopVote.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopVote.java @@ -4,10 +4,12 @@ public class ShopVote { String name = null; int vote = -1; + long time = 0L; - public ShopVote(String name, int vote) { + public ShopVote(String name, int vote, long time) { this.name = name; this.vote = vote; + this.time = time; } public String getName() { @@ -21,4 +23,14 @@ public int getVote() { public void setVote(int vote) { this.vote = vote; } + + public long getTime() { + if (this.time == 0) + this.time = System.currentTimeMillis(); + return this.time; + } + + public void setTime(long time) { + this.time = time; + } } diff --git a/src/flags.yml b/src/flags.yml index 2949a2efe..e2b9e1c6f 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -65,6 +65,8 @@ Global: overridepvp: false keepinv: false keepexp: false + shop: true + bank: false # This sets GUI items to represent each flag, if not given, then gray wool will be used FlagGui: animalkilling: diff --git a/src/plugin.yml b/src/plugin.yml index 41e954907..79633abf6 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.9.3 +version: 2.9.9.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From ae3d71314767af769fe93708752325e885afc881 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 12 Nov 2015 18:13:35 +0200 Subject: [PATCH 0091/1142] Feed flag / remade flags locale into separate sactions --- .../bukkit/residence/ConfigManager.java | 16 + src/com/bekvon/bukkit/residence/Locale.java | 1402 ++++++++++------- .../bekvon/bukkit/residence/Residence.java | 11 +- .../listeners/ResidencePlayerListener.java | 30 +- .../residence/protection/FlagPermissions.java | 1 + .../bukkit/residence/text/help/HelpEntry.java | 10 +- 6 files changed, 888 insertions(+), 582 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 5d1a0a141..3bc39fea5 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -94,6 +94,8 @@ public class ConfigManager { protected int MaxRentCount; protected int MaxSubzonesCount; protected int VoteRangeFrom; + protected int HealInterval; + protected int FeedInterval; protected int VoteRangeTo; protected FlagPermissions globalCreatorDefaults; protected FlagPermissions globalResidenceDefaults; @@ -353,6 +355,12 @@ void UpdateConfigFile() { VoteRangeFrom = GetConfigInt("Global.Optimizations.Vote.RangeFrom", 0, writer, conf); VoteRangeTo = GetConfigInt("Global.Optimizations.Vote.RangeTo", 10, writer, conf); + // Healing/Feed interval + writer.addComment("Global.Optimizations.Intervals.Heal", "How often in seconds to heal/feed players in residence with appropriate flag", + "Bigger numbers can save some resources"); + HealInterval = GetConfigInt("Global.Optimizations.Intervals.Heal", 1, writer, conf); + FeedInterval = GetConfigInt("Global.Optimizations.Intervals.Feed", 5, writer, conf); + writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); minMoveUpdate = GetConfigInt("Global.MoveCheckInterval", 500, writer, conf); @@ -918,6 +926,14 @@ public int getVoteRangeFrom() { return VoteRangeFrom; } + public int getHealInterval() { + return HealInterval; + } + + public int getFeedInterval() { + return FeedInterval; + } + public int getVoteRangeTo() { return VoteRangeTo; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 3c1c1c1d4..89f998262 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -16,7 +16,7 @@ import org.bukkit.configuration.file.YamlConfiguration; public class Locale { - public static String GetConfigString(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + public static String GetConfig(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { text = text.replace("\"", "\'"); conf.addDefault(path, text); text = conf.getString(path); @@ -26,7 +26,7 @@ public static String GetConfigString(String path, String text, CommentedYamlConf return text; } - public static List GetConfigArray(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + public static List GetConfig(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { conf.addDefault(path, text); text = ColorsArray(conf.getStringList(path), colorize); copySetting(conf, writer, path); @@ -88,846 +88,1104 @@ public static void LoadLang(String lang) { writer.addComment("Language.NewPlayerInfo", "The below lines represent various messages residence sends to the players.", "Note that some messages have variables such as %1 that are inserted at runtime."); - GetConfigString("Language.NewPlayerInfo", + GetConfig("Language.NewPlayerInfo", "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", writer, conf, true); - GetConfigString("Language.InvalidResidence", "Invalid Residence...", writer, conf, true); - GetConfigString("Language.InvalidSubzone", "Invalid Subzone...", writer, conf, true); - GetConfigString("Language.InvalidDirection", "Invalid Direction...", writer, conf, true); - GetConfigString("Language.InvalidAmount", "Invalid Amount...", writer, conf, true); - GetConfigString("Language.InvalidCost", "Invalid Cost...", writer, conf, true); - GetConfigString("Language.InvalidDays", "Invalid number of days...", writer, conf, true); - GetConfigString("Language.InvalidMaterial", "Invalid Material...", writer, conf, true); - GetConfigString("Language.InvalidBoolean", "Invalid value, must be true(t) or false(f)", writer, conf, true); - GetConfigString("Language.InvalidArea", "Invalid Area...", writer, conf, true); - GetConfigString("Language.InvalidGroup", "Invalid Group...", writer, conf, true); - GetConfigString("Language.UseNumbers", "&cPlease use numbers...", writer, conf, true); + GetConfig("Language.InvalidResidence", "Invalid Residence...", writer, conf, true); + GetConfig("Language.InvalidSubzone", "Invalid Subzone...", writer, conf, true); + GetConfig("Language.InvalidDirection", "Invalid Direction...", writer, conf, true); + GetConfig("Language.InvalidAmount", "Invalid Amount...", writer, conf, true); + GetConfig("Language.InvalidCost", "Invalid Cost...", writer, conf, true); + GetConfig("Language.InvalidDays", "Invalid number of days...", writer, conf, true); + GetConfig("Language.InvalidMaterial", "Invalid Material...", writer, conf, true); + GetConfig("Language.InvalidBoolean", "Invalid value, must be true(t) or false(f)", writer, conf, true); + GetConfig("Language.InvalidArea", "Invalid Area...", writer, conf, true); + GetConfig("Language.InvalidGroup", "Invalid Group...", writer, conf, true); + GetConfig("Language.UseNumbers", "&cPlease use numbers...", writer, conf, true); writer.addComment("Language.CantPlaceLava", "Replace all text with '' to disable this message"); - GetConfigString("Language.CantPlaceLava", "You can't place lava outside residence and higher than %1 block level", writer, conf, true); + GetConfig("Language.CantPlaceLava", "You can't place lava outside residence and higher than %1 block level", writer, conf, true); writer.addComment("Language.CantPlaceWater", "Replace all text with '' to disable this message"); - GetConfigString("Language.CantPlaceWater", "You can't place Water outside residence and higher than %1 block level", writer, conf, true); - GetConfigString("Language.InvalidMessageType", "Message type must be enter or remove.", writer, conf, true); - // GetConfigString("Language.InvalidList", "Invalid List...", writer, + GetConfig("Language.CantPlaceWater", "You can't place Water outside residence and higher than %1 block level", writer, conf, true); + GetConfig("Language.InvalidMessageType", "Message type must be enter or remove.", writer, conf, true); + // GetConfig("Language.InvalidList", "Invalid List...", writer, // conf, true); - GetConfigString("Language.InvalidFlag", "Invalid Flag...", writer, conf, true); - GetConfigString("Language.InvalidFlagState", "Invalid flag state, must be true(t), false(f), or remove(r)", writer, conf, true); - GetConfigString("Language.AreaExists", "Area name already exists.", writer, conf, true); - GetConfigString("Language.AreaCreate", "Residence Area created, ID %1", writer, conf, true); - GetConfigString("Language.AreaDiffWorld", "Area is in a different world from residence.", writer, conf, true); - GetConfigString("Language.AreaCollision", "Area collides with residence %1", writer, conf, true); - GetConfigString("Language.AreaSubzoneCollision", "Area collides with subzone %1", writer, conf, true); - GetConfigString("Language.AreaNonExist", "No such area exists.", writer, conf, true); - GetConfigString("Language.AreaInvalidName", "Invalid Area Name...", writer, conf, true); - GetConfigString("Language.AreaToSmallTotal", "Selected area smaller than allowed minimal (%1)", writer, conf, true); - GetConfigString("Language.AreaToSmallX", "Your x selection length is too small. %1 allowed %2", writer, conf, true); - GetConfigString("Language.AreaToSmallY", "Your selection height is too small. %1 allowed %2", writer, conf, true); - GetConfigString("Language.AreaToSmallZ", "Your z selection length is too small. %1 allowed %2", writer, conf, true); - GetConfigString("Language.AreaName", "Name", writer, conf, true); - GetConfigString("Language.AreaRename", "Renamed area %1 to %2", writer, conf, true); - GetConfigString("Language.AreaRemove", "Removed area %1...", writer, conf, true); - GetConfigString("Language.AreaRemoveLast", "Cannot remove the last area in a residence.", writer, conf, true); - GetConfigString("Language.AreaNotWithinParent", "Area is not within parent area.", writer, conf, true); - GetConfigString("Language.AreaUpdate", "Area Updated...", writer, conf, true); - GetConfigString("Language.AreaMaxPhysical", "You've reached the max physical areas allowed for your residence.", writer, conf, true); - GetConfigString("Language.AreaSizeLimit", "Area size is not within your allowed limits.", writer, conf, true); - GetConfigString("Language.AreaHighLimit", "You cannot protect this high up, your limit is %1", writer, conf, true); - GetConfigString("Language.AreaLowLimit", "You cannot protect this deep, your limit is %1", writer, conf, true); - GetConfigString("Language.NotInResidence", "You are not in a Residence.", writer, conf, true); - GetConfigString("Language.PlayerNotInResidence", "Player standing not in your Residence area.", writer, conf, true); - GetConfigString("Language.Kicked", "You were kicked from residence", writer, conf, true); - GetConfigString("Language.InResidence", "You are standing in Residence %1", writer, conf, true); - GetConfigString("Language.ResidenceOwnerChange", "Residence %1 owner changed to %2", writer, conf, true); - GetConfigString("Language.NonAdmin", "You are not a Residence admin.", writer, conf, true); - GetConfigString("Language.AdminOnly", "Only admins have access to this command.", writer, conf, true); - GetConfigString("Language.ChatDisabled", "Residence Chat Disabled...", writer, conf, true); - GetConfigString("Language.SubzoneRename", "Renamed subzone %1 to %2", writer, conf, true); - GetConfigString("Language.SubzoneRemove", "Subzone %1 removed.", writer, conf, true); - GetConfigString("Language.SubzoneCreate", "Created Subzone %1", writer, conf, true); - GetConfigString("Language.SubzoneCreateFail", "Unable to create subzone %1", writer, conf, true); - GetConfigString("Language.SubzoneExists", "Subzone %1 already exists.", writer, conf, true); - GetConfigString("Language.SubzoneCollide", "Subzone collides with subzone %1", writer, conf, true); - GetConfigString("Language.SubzoneMaxDepth", "You have reached the maximum allowed subzone depth.", writer, conf, true); - GetConfigString("Language.SubzoneSelectInside", "Both selection points must be inside the residence.", writer, conf, true); - GetConfigString("Language.SelectPoints", "Select two points first before using this command!", writer, conf, true); - GetConfigString("Language.SelectOverlap", "&cSelected points overlap with &e%1 &cregion!", writer, conf, true); - GetConfigString("Language.SelectionSuccess", "Selection Successful!", writer, conf, true); - GetConfigString("Language.SelectionFail", "Invalid select command...", writer, conf, true); - GetConfigString("Language.SelectionBedrock", "Selection expanded to your lowest allowed limit.", writer, conf, true); - GetConfigString("Language.SelectionSky", "Selection expanded to your highest allowed limit.", writer, conf, true); - GetConfigString("Language.SelectionArea", "Selected area %1 of residence %2", writer, conf, true); - GetConfigString("Language.SelectDiabled", "You don't have access to selections commands.", writer, conf, true); - GetConfigString("Language.NoPermission", "You dont have permission for this.", writer, conf, true); - GetConfigString("Language.OwnerNoPermission", "The owner does not have permission for this.", writer, conf, true); - GetConfigString("Language.ParentNoPermission", "You don't have permission to make changes to the parent zone.", writer, conf, true); - GetConfigString("Language.MessageChange", "Message Set...", writer, conf, true); - GetConfigString("Language.FlagSet", "&e%1 &2flag set for &e%2 &2to &e%3 &2state", writer, conf, true); - GetConfigString("Language.FlagCheckTrue", "Flag %1 applys to player %2 for residence %3, value = %4", writer, conf, true); - GetConfigString("Language.FlagCheckFalse", "Flag %1 does not apply to player %2 for residence.", writer, conf, true); - GetConfigString("Language.FlagsCleared", "Flags Cleared.", writer, conf, true); - GetConfigString("Language.FlagsDefault", "Flags set to default.", writer, conf, true); - GetConfigString("Language.Usage", "Command Usage", writer, conf, true); - GetConfigString("Language.InvalidHelp", "Invalid Help Page...", writer, conf, true); - GetConfigString("Language.SubCommands", "Sub Commands", writer, conf, true); - GetConfigString("Language.InvalidList", "Unknown list type, must be blacklist or ignorelist.", writer, conf, true); - GetConfigString("Language.MaterialGet", "The material name for ID %1 is %2", writer, conf, true); - GetConfigString("Language.MarketDisabled", "Economy Disabled!", writer, conf, true); - GetConfigString("Language.MarketList", "Market List", writer, conf, true); - GetConfigString("Language.ResidenceList", "&a%1%2 &e- %3: %4", writer, conf, true); - GetConfigString("Language.Rented", " &a(Rented)", writer, conf, true); - - GetConfigString("Language.SignsUpdated", "&e%1 signs updated!", writer, conf, true); - - GetConfigString("Language.SignTopLine", "[market]", writer, conf, true); - GetConfigString("Language.SignDateFormat", "YY/MM/dd HH:mm", writer, conf, true); - - GetConfigString("Language.SignForRentTopLine", "&8For Rent", writer, conf, true); - GetConfigString("Language.SignForRentPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); - GetConfigString("Language.SignForRentResName", "&8%1", writer, conf, true); - GetConfigString("Language.SignForRentBottomLine", "&9Available", writer, conf, true); - - GetConfigString("Language.SignRentedAutorenewTrue", "&2", writer, conf, true); - GetConfigString("Language.SignRentedAutorenewFalse", "&c", writer, conf, true); - - GetConfigString("Language.SignRentedTopLine", "%1", writer, conf, true); - GetConfigString("Language.SignRentedPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); - GetConfigString("Language.SignRentedResName", "&8%1", writer, conf, true); - GetConfigString("Language.SignRentedBottomLine", "&1%1", writer, conf, true); - - GetConfigString("Language.SignForSaleTopLine", "&8For Sale", writer, conf, true); - GetConfigString("Language.SignForSalePriceLine", "&8%1", writer, conf, true); - GetConfigString("Language.SignForSaleResName", "&8%1", writer, conf, true); - GetConfigString("Language.SignForSaleBottomLine", "&5Available", writer, conf, true); - - GetConfigString("Language.SelectionTool", "Selection Tool", writer, conf, true); - GetConfigString("Language.InfoTool", "Info Tool", writer, conf, true); - GetConfigString("Language.NoBankAccess", "You dont have bank access.", writer, conf, true); - GetConfigString("Language.NotEnoughMoney", "You dont have enough money.", writer, conf, true); - GetConfigString("Language.Bank", "Bank", writer, conf, true); - GetConfigString("Language.BankNoMoney", "Not enough money in the bank.", writer, conf, true); - GetConfigString("Language.BankDeposit", "You deposit %1 into the residence bank.", writer, conf, true); - GetConfigString("Language.BankWithdraw", "You withdraw %1 from the residence bank.", writer, conf, true); - GetConfigString("Language.MoneyCharged", "Charged %1 to your %2 account.", writer, conf, true); - GetConfigString("Language.MoneyAdded", "Got %1 to your %2 account.", writer, conf, true); - GetConfigString("Language.MoneyCredit", "Credited %1 to your %2 account.", writer, conf, true); - // GetConfigString("Language.RentDisabled", "Rent system is disabled.", + GetConfig("Language.InvalidFlag", "Invalid Flag...", writer, conf, true); + GetConfig("Language.InvalidFlagState", "Invalid flag state, must be true(t), false(f), or remove(r)", writer, conf, true); + GetConfig("Language.AreaExists", "Area name already exists.", writer, conf, true); + GetConfig("Language.AreaCreate", "Residence Area created, ID %1", writer, conf, true); + GetConfig("Language.AreaDiffWorld", "Area is in a different world from residence.", writer, conf, true); + GetConfig("Language.AreaCollision", "Area collides with residence %1", writer, conf, true); + GetConfig("Language.AreaSubzoneCollision", "Area collides with subzone %1", writer, conf, true); + GetConfig("Language.AreaNonExist", "No such area exists.", writer, conf, true); + GetConfig("Language.AreaInvalidName", "Invalid Area Name...", writer, conf, true); + GetConfig("Language.AreaToSmallTotal", "Selected area smaller than allowed minimal (%1)", writer, conf, true); + GetConfig("Language.AreaToSmallX", "Your x selection length is too small. %1 allowed %2", writer, conf, true); + GetConfig("Language.AreaToSmallY", "Your selection height is too small. %1 allowed %2", writer, conf, true); + GetConfig("Language.AreaToSmallZ", "Your z selection length is too small. %1 allowed %2", writer, conf, true); + GetConfig("Language.AreaName", "Name", writer, conf, true); + GetConfig("Language.AreaRename", "Renamed area %1 to %2", writer, conf, true); + GetConfig("Language.AreaRemove", "Removed area %1...", writer, conf, true); + GetConfig("Language.AreaRemoveLast", "Cannot remove the last area in a residence.", writer, conf, true); + GetConfig("Language.AreaNotWithinParent", "Area is not within parent area.", writer, conf, true); + GetConfig("Language.AreaUpdate", "Area Updated...", writer, conf, true); + GetConfig("Language.AreaMaxPhysical", "You've reached the max physical areas allowed for your residence.", writer, conf, true); + GetConfig("Language.AreaSizeLimit", "Area size is not within your allowed limits.", writer, conf, true); + GetConfig("Language.AreaHighLimit", "You cannot protect this high up, your limit is %1", writer, conf, true); + GetConfig("Language.AreaLowLimit", "You cannot protect this deep, your limit is %1", writer, conf, true); + GetConfig("Language.NotInResidence", "You are not in a Residence.", writer, conf, true); + GetConfig("Language.PlayerNotInResidence", "Player standing not in your Residence area.", writer, conf, true); + GetConfig("Language.Kicked", "You were kicked from residence", writer, conf, true); + GetConfig("Language.InResidence", "You are standing in Residence %1", writer, conf, true); + GetConfig("Language.ResidenceOwnerChange", "Residence %1 owner changed to %2", writer, conf, true); + GetConfig("Language.NonAdmin", "You are not a Residence admin.", writer, conf, true); + GetConfig("Language.AdminOnly", "Only admins have access to this command.", writer, conf, true); + GetConfig("Language.ChatDisabled", "Residence Chat Disabled...", writer, conf, true); + GetConfig("Language.SubzoneRename", "Renamed subzone %1 to %2", writer, conf, true); + GetConfig("Language.SubzoneRemove", "Subzone %1 removed.", writer, conf, true); + GetConfig("Language.SubzoneCreate", "Created Subzone %1", writer, conf, true); + GetConfig("Language.SubzoneCreateFail", "Unable to create subzone %1", writer, conf, true); + GetConfig("Language.SubzoneExists", "Subzone %1 already exists.", writer, conf, true); + GetConfig("Language.SubzoneCollide", "Subzone collides with subzone %1", writer, conf, true); + GetConfig("Language.SubzoneMaxDepth", "You have reached the maximum allowed subzone depth.", writer, conf, true); + GetConfig("Language.SubzoneSelectInside", "Both selection points must be inside the residence.", writer, conf, true); + GetConfig("Language.SelectPoints", "Select two points first before using this command!", writer, conf, true); + GetConfig("Language.SelectOverlap", "&cSelected points overlap with &e%1 &cregion!", writer, conf, true); + GetConfig("Language.SelectionSuccess", "Selection Successful!", writer, conf, true); + GetConfig("Language.SelectionFail", "Invalid select command...", writer, conf, true); + GetConfig("Language.SelectionBedrock", "Selection expanded to your lowest allowed limit.", writer, conf, true); + GetConfig("Language.SelectionSky", "Selection expanded to your highest allowed limit.", writer, conf, true); + GetConfig("Language.SelectionArea", "Selected area %1 of residence %2", writer, conf, true); + GetConfig("Language.SelectDiabled", "You don't have access to selections commands.", writer, conf, true); + GetConfig("Language.NoPermission", "You dont have permission for this.", writer, conf, true); + GetConfig("Language.OwnerNoPermission", "The owner does not have permission for this.", writer, conf, true); + GetConfig("Language.ParentNoPermission", "You don't have permission to make changes to the parent zone.", writer, conf, true); + GetConfig("Language.MessageChange", "Message Set...", writer, conf, true); + GetConfig("Language.FlagSet", "&e%1 &2flag set for &e%2 &2to &e%3 &2state", writer, conf, true); + GetConfig("Language.FlagCheckTrue", "Flag %1 applys to player %2 for residence %3, value = %4", writer, conf, true); + GetConfig("Language.FlagCheckFalse", "Flag %1 does not apply to player %2 for residence.", writer, conf, true); + GetConfig("Language.FlagsCleared", "Flags Cleared.", writer, conf, true); + GetConfig("Language.FlagsDefault", "Flags set to default.", writer, conf, true); + GetConfig("Language.Usage", "Command Usage", writer, conf, true); + GetConfig("Language.InvalidHelp", "Invalid Help Page...", writer, conf, true); + GetConfig("Language.SubCommands", "Sub Commands", writer, conf, true); + GetConfig("Language.InvalidList", "Unknown list type, must be blacklist or ignorelist.", writer, conf, true); + GetConfig("Language.MaterialGet", "The material name for ID %1 is %2", writer, conf, true); + GetConfig("Language.MarketDisabled", "Economy Disabled!", writer, conf, true); + GetConfig("Language.MarketList", "Market List", writer, conf, true); + GetConfig("Language.ResidenceList", "&a%1%2 &e- %3: %4", writer, conf, true); + GetConfig("Language.Rented", " &a(Rented)", writer, conf, true); + + GetConfig("Language.SignsUpdated", "&e%1 signs updated!", writer, conf, true); + + GetConfig("Language.SignTopLine", "[market]", writer, conf, true); + GetConfig("Language.SignDateFormat", "YY/MM/dd HH:mm", writer, conf, true); + + GetConfig("Language.SignForRentTopLine", "&8For Rent", writer, conf, true); + GetConfig("Language.SignForRentPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); + GetConfig("Language.SignForRentResName", "&8%1", writer, conf, true); + GetConfig("Language.SignForRentBottomLine", "&9Available", writer, conf, true); + + GetConfig("Language.SignRentedAutorenewTrue", "&2", writer, conf, true); + GetConfig("Language.SignRentedAutorenewFalse", "&c", writer, conf, true); + + GetConfig("Language.SignRentedTopLine", "%1", writer, conf, true); + GetConfig("Language.SignRentedPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); + GetConfig("Language.SignRentedResName", "&8%1", writer, conf, true); + GetConfig("Language.SignRentedBottomLine", "&1%1", writer, conf, true); + + GetConfig("Language.SignForSaleTopLine", "&8For Sale", writer, conf, true); + GetConfig("Language.SignForSalePriceLine", "&8%1", writer, conf, true); + GetConfig("Language.SignForSaleResName", "&8%1", writer, conf, true); + GetConfig("Language.SignForSaleBottomLine", "&5Available", writer, conf, true); + + GetConfig("Language.SelectionTool", "Selection Tool", writer, conf, true); + GetConfig("Language.InfoTool", "Info Tool", writer, conf, true); + GetConfig("Language.NoBankAccess", "You dont have bank access.", writer, conf, true); + GetConfig("Language.NotEnoughMoney", "You dont have enough money.", writer, conf, true); + GetConfig("Language.Bank", "Bank", writer, conf, true); + GetConfig("Language.BankNoMoney", "Not enough money in the bank.", writer, conf, true); + GetConfig("Language.BankDeposit", "You deposit %1 into the residence bank.", writer, conf, true); + GetConfig("Language.BankWithdraw", "You withdraw %1 from the residence bank.", writer, conf, true); + GetConfig("Language.MoneyCharged", "Charged %1 to your %2 account.", writer, conf, true); + GetConfig("Language.MoneyAdded", "Got %1 to your %2 account.", writer, conf, true); + GetConfig("Language.MoneyCredit", "Credited %1 to your %2 account.", writer, conf, true); + // GetConfig("Language.RentDisabled", "Rent system is disabled.", // writer, conf, true); - GetConfigString("Language.RentReleaseInvalid", "Residence %1 is not rented or for rent.", writer, conf, true); - GetConfigString("Language.RentSellFail", "Cannot sell a Residence if it is for rent.", writer, conf, true); - GetConfigString("Language.RentedBy", "Rented by", writer, conf, true); - GetConfigString("Language.SellRentFail", "Cannot rent a Residence if it is for sale.", writer, conf, true); - GetConfigString("Language.OwnerBuyFail", "Cannot buy your own land!", writer, conf, true); - GetConfigString("Language.OwnerRentFail", "Cannot rent your own land!", writer, conf, true); - GetConfigString("Language.AlreadySellFail", "Residence already for sale!", writer, conf, true); - GetConfigString("Language.ResidenceBought", "You bought residence %1", writer, conf, true); - GetConfigString("Language.ResidenceBuy", "Residence %1 has bought residence %2 from you.", writer, conf, true); - GetConfigString("Language.ResidenceBuyTooBig", "This residence has areas bigger then your allowed max.", writer, conf, true); - GetConfigString("Language.ResidenceNotForSale", "Residence is not for sale.", writer, conf, true); - GetConfigString("Language.ResidenceForSale", "Residence %1 is now for sale for %2", writer, conf, true); - GetConfigString("Language.ResidenceStopSelling", "Residence is no longer for sale.", writer, conf, true); - GetConfigString("Language.ResidenceTooMany", "You already own the max number of residences your allowed to.", writer, conf, true); - GetConfigString("Language.ResidenceMaxRent", "You already are renting the maximum number of residences your allowed to.", writer, conf, true); - GetConfigString("Language.ResidenceAlreadyRent", "Residence is already for rent...", writer, conf, true); - GetConfigString("Language.ResidenceNotForRent", "Residence not for rent...", writer, conf, true); - GetConfigString("Language.ResidenceNotRented", "Residence not rented.", writer, conf, true); - GetConfigString("Language.ResidenceUnrent", "Residence %1 has been unrented.", writer, conf, true); - GetConfigString("Language.ResidenceRemoveRentable", "Residence %1 is no longer rentable.", writer, conf, true); - GetConfigString("Language.ResidenceForRentSuccess", "Residence %1 is now for rent for %2 every %3 days.", writer, conf, true); - GetConfigString("Language.ResidenceRentSuccess", "You have rented Residence %1 for %2 days.", writer, conf, true); - GetConfigString("Language.ResidenceAlreadyRented", "Residence %1 has currently been rented to %2", writer, conf, true); - GetConfigString("Language.ResidenceAlreadyExists", "A residence named %1 already exists.", writer, conf, true); - GetConfigString("Language.ResidenceCreate", "You have created residence %1!", writer, conf, true); - GetConfigString("Language.ResidenceRename", "Renamed Residence %1 to %2", writer, conf, true); - GetConfigString("Language.ResidenceRemove", "Residence %1 has been removed...", writer, conf, true); - GetConfigString("Language.RentDisabled", "Rent is disabled...", writer, conf, true); - GetConfigString("Language.RentDisableRenew", "Residence %1 will now no longer re-rent upon expire.", writer, conf, true); - GetConfigString("Language.RentEnableRenew", "Residence %1 will now automatically re-rent upon expire.", writer, conf, true); - GetConfigString("Language.RentableDisableRenew", "%1 will no longer renew rentable status upon expire.", writer, conf, true); - GetConfigString("Language.RentableEnableRenew", "%1 will now automatically renew rentable status upon expire.", writer, conf, true); - GetConfigString("Language.LandForSale", "Land For Sale", writer, conf, true); - GetConfigString("Language.SellAmount", "Sell Amount", writer, conf, true); - GetConfigString("Language.LeaseExpire", "Lease Expire Time", writer, conf, true); - GetConfigString("Language.RentExpire", "Rent Expire Time", writer, conf, true); - GetConfigString("Language.RentableAutoRenew", "Rentable Auto Renew", writer, conf, true); - GetConfigString("Language.RentAutoRenew", "Rent Auto Renew", writer, conf, true); - GetConfigString("Language.RentableLand", "Rentable Land", writer, conf, true); - GetConfigString("Language.ListMaterialAdd", "%1 added to the residence %2", writer, conf, true); - GetConfigString("Language.ListMaterialRemove", "%1 removed from the residence %2", writer, conf, true); - GetConfigString("Language.ItemBlacklisted", "You are blacklisted from using this item here.", writer, conf, true); - GetConfigString("Language.RentedModifyDeny", "Cannot modify a rented residence.", writer, conf, true); - GetConfigString("Language.WorldPVPDisabled", "World PVP is disabled.", writer, conf, true); - GetConfigString("Language.NoPVPZone", "No PVP zone.", writer, conf, true); - GetConfigString("Language.FlagDeny", "You dont have %1 permission here.", writer, conf, true); - GetConfigString("Language.FlagSetDeny", "Owner does not have access to flag %1", writer, conf, true); - - GetConfigString("Language.FlagChangeDeny", "&cYou cant change &e%1 &cflag state while there is &e%2 &cplayer(s) inside.", writer, conf, true); - - GetConfigString("Language.SelectPoint", "Placed %1 Selection Point", writer, conf, true); - GetConfigString("Language.ResidenceMoveDeny", "You dont have movement permission for Residence %1", writer, conf, true); - GetConfigString("Language.ResidenceFlagDeny", "You dont have %1 permission for Residence %2", writer, conf, true); - GetConfigString("Language.TeleportDeny", "You dont have teleport access.", writer, conf, true); - GetConfigString("Language.TeleportSuccess", "Teleported!", writer, conf, true); - GetConfigString("Language.TeleportConfirm", + GetConfig("Language.RentReleaseInvalid", "Residence %1 is not rented or for rent.", writer, conf, true); + GetConfig("Language.RentSellFail", "Cannot sell a Residence if it is for rent.", writer, conf, true); + GetConfig("Language.RentedBy", "Rented by", writer, conf, true); + GetConfig("Language.SellRentFail", "Cannot rent a Residence if it is for sale.", writer, conf, true); + GetConfig("Language.OwnerBuyFail", "Cannot buy your own land!", writer, conf, true); + GetConfig("Language.OwnerRentFail", "Cannot rent your own land!", writer, conf, true); + GetConfig("Language.AlreadySellFail", "Residence already for sale!", writer, conf, true); + GetConfig("Language.ResidenceBought", "You bought residence %1", writer, conf, true); + GetConfig("Language.ResidenceBuy", "Residence %1 has bought residence %2 from you.", writer, conf, true); + GetConfig("Language.ResidenceBuyTooBig", "This residence has areas bigger then your allowed max.", writer, conf, true); + GetConfig("Language.ResidenceNotForSale", "Residence is not for sale.", writer, conf, true); + GetConfig("Language.ResidenceForSale", "Residence %1 is now for sale for %2", writer, conf, true); + GetConfig("Language.ResidenceStopSelling", "Residence is no longer for sale.", writer, conf, true); + GetConfig("Language.ResidenceTooMany", "You already own the max number of residences your allowed to.", writer, conf, true); + GetConfig("Language.ResidenceMaxRent", "You already are renting the maximum number of residences your allowed to.", writer, conf, true); + GetConfig("Language.ResidenceAlreadyRent", "Residence is already for rent...", writer, conf, true); + GetConfig("Language.ResidenceNotForRent", "Residence not for rent...", writer, conf, true); + GetConfig("Language.ResidenceNotRented", "Residence not rented.", writer, conf, true); + GetConfig("Language.ResidenceUnrent", "Residence %1 has been unrented.", writer, conf, true); + GetConfig("Language.ResidenceRemoveRentable", "Residence %1 is no longer rentable.", writer, conf, true); + GetConfig("Language.ResidenceForRentSuccess", "Residence %1 is now for rent for %2 every %3 days.", writer, conf, true); + GetConfig("Language.ResidenceRentSuccess", "You have rented Residence %1 for %2 days.", writer, conf, true); + GetConfig("Language.ResidenceAlreadyRented", "Residence %1 has currently been rented to %2", writer, conf, true); + GetConfig("Language.ResidenceAlreadyExists", "A residence named %1 already exists.", writer, conf, true); + GetConfig("Language.ResidenceCreate", "You have created residence %1!", writer, conf, true); + GetConfig("Language.ResidenceRename", "Renamed Residence %1 to %2", writer, conf, true); + GetConfig("Language.ResidenceRemove", "Residence %1 has been removed...", writer, conf, true); + GetConfig("Language.RentDisabled", "Rent is disabled...", writer, conf, true); + GetConfig("Language.RentDisableRenew", "Residence %1 will now no longer re-rent upon expire.", writer, conf, true); + GetConfig("Language.RentEnableRenew", "Residence %1 will now automatically re-rent upon expire.", writer, conf, true); + GetConfig("Language.RentableDisableRenew", "%1 will no longer renew rentable status upon expire.", writer, conf, true); + GetConfig("Language.RentableEnableRenew", "%1 will now automatically renew rentable status upon expire.", writer, conf, true); + GetConfig("Language.LandForSale", "Land For Sale", writer, conf, true); + GetConfig("Language.SellAmount", "Sell Amount", writer, conf, true); + GetConfig("Language.LeaseExpire", "Lease Expire Time", writer, conf, true); + GetConfig("Language.RentExpire", "Rent Expire Time", writer, conf, true); + GetConfig("Language.RentableAutoRenew", "Rentable Auto Renew", writer, conf, true); + GetConfig("Language.RentAutoRenew", "Rent Auto Renew", writer, conf, true); + GetConfig("Language.RentableLand", "Rentable Land", writer, conf, true); + GetConfig("Language.ListMaterialAdd", "%1 added to the residence %2", writer, conf, true); + GetConfig("Language.ListMaterialRemove", "%1 removed from the residence %2", writer, conf, true); + GetConfig("Language.ItemBlacklisted", "You are blacklisted from using this item here.", writer, conf, true); + GetConfig("Language.RentedModifyDeny", "Cannot modify a rented residence.", writer, conf, true); + GetConfig("Language.WorldPVPDisabled", "World PVP is disabled.", writer, conf, true); + GetConfig("Language.NoPVPZone", "No PVP zone.", writer, conf, true); + GetConfig("Language.FlagDeny", "You dont have %1 permission here.", writer, conf, true); + GetConfig("Language.FlagSetDeny", "Owner does not have access to flag %1", writer, conf, true); + + GetConfig("Language.FlagChangeDeny", "&cYou cant change &e%1 &cflag state while there is &e%2 &cplayer(s) inside.", writer, conf, true); + + GetConfig("Language.SelectPoint", "Placed %1 Selection Point", writer, conf, true); + GetConfig("Language.ResidenceMoveDeny", "You dont have movement permission for Residence %1", writer, conf, true); + GetConfig("Language.ResidenceFlagDeny", "You dont have %1 permission for Residence %2", writer, conf, true); + GetConfig("Language.TeleportDeny", "You dont have teleport access.", writer, conf, true); + GetConfig("Language.TeleportSuccess", "Teleported!", writer, conf, true); + GetConfig("Language.TeleportConfirm", "&eThis teleport is not safe, you will fall for &c%1 &eblocks. Use &2/res tpconfirm &eto perform teleportation anyways.", writer, conf, true); - GetConfigString("Language.TeleportStarted", + GetConfig("Language.TeleportStarted", "&eTeleportation to %1 started, don't move for next %2 sec.", writer, conf, true); - GetConfigString("Language.TeleportCanceled", + GetConfig("Language.TeleportCanceled", "&eTeleportation canceled!", writer, conf, true); - GetConfigString("Language.NoTeleportConfirm", "There is no teleports waiting for confirmation!", writer, conf, true); - GetConfigString("Language.TeleportNear", "Teleported to near residence.", writer, conf, true); - GetConfigString("Language.TeleportNoFlag", "You dont have teleport access for that residence.", writer, conf, true); - GetConfigString("Language.SetTeleportLocation", "Teleport Location Set...", writer, conf, true); - GetConfigString("Language.HelpPageHeader", "Help Pages - %1 - Page <%2 of %3>", writer, conf, true); - GetConfigString("Language.ListExists", "List already exists...", writer, conf, true); - GetConfigString("Language.ListRemoved", "List removed...", writer, conf, true); - GetConfigString("Language.ListCreate", "Created list %1", writer, conf, true); - GetConfigString("Language.LeaseRenew", "Lease valid until %1", writer, conf, true); - GetConfigString("Language.LeaseRenewMax", "Lease renewed to maximum allowed", writer, conf, true); - GetConfigString("Language.LeaseNotExpire", "No such lease, or lease does not expire.", writer, conf, true); - GetConfigString("Language.LeaseRenewalCost", "Renewal cost for area %1 is %2", writer, conf, true); - GetConfigString("Language.LeaseInfinite", "Lease time set to infinite...", writer, conf, true); - GetConfigString("Language.PermissionsApply", "Permissions applied to residence.", writer, conf, true); - GetConfigString("Language.PhysicalAreas", "Physical Areas", writer, conf, true); - GetConfigString("Language.CurrentArea", "Current Area", writer, conf, true); - GetConfigString("Language.TotalWorth", "Total worth of residence:&3 %1 (%2)", writer, conf, true); - GetConfigString("Language.LeaseExpire", "Lease Expiration", writer, conf, true); - GetConfigString("Language.NotOnline", "Target player must be online.", writer, conf, true); - GetConfigString("Language.ResidenceGiveLimits", "Cannot give residence to target player, because it is outside the target players limits.", writer, conf, true); - GetConfigString("Language.ResidenceGive", "You give residence %1 to player %2", writer, conf, true); - GetConfigString("Language.ResidenceRecieve", "You have recieved residence %1 from player %2", writer, conf, true); - // GetConfigString("Language.#ResidenceListAll", "Residences - ", writer, conf, true); + GetConfig("Language.ListExists", "List already exists...", writer, conf, true); + GetConfig("Language.ListRemoved", "List removed...", writer, conf, true); + GetConfig("Language.ListCreate", "Created list %1", writer, conf, true); + GetConfig("Language.LeaseRenew", "Lease valid until %1", writer, conf, true); + GetConfig("Language.LeaseRenewMax", "Lease renewed to maximum allowed", writer, conf, true); + GetConfig("Language.LeaseNotExpire", "No such lease, or lease does not expire.", writer, conf, true); + GetConfig("Language.LeaseRenewalCost", "Renewal cost for area %1 is %2", writer, conf, true); + GetConfig("Language.LeaseInfinite", "Lease time set to infinite...", writer, conf, true); + GetConfig("Language.PermissionsApply", "Permissions applied to residence.", writer, conf, true); + GetConfig("Language.PhysicalAreas", "Physical Areas", writer, conf, true); + GetConfig("Language.CurrentArea", "Current Area", writer, conf, true); + GetConfig("Language.TotalWorth", "Total worth of residence:&3 %1 (%2)", writer, conf, true); + GetConfig("Language.LeaseExpire", "Lease Expiration", writer, conf, true); + GetConfig("Language.NotOnline", "Target player must be online.", writer, conf, true); + GetConfig("Language.ResidenceGiveLimits", "Cannot give residence to target player, because it is outside the target players limits.", writer, conf, true); + GetConfig("Language.ResidenceGive", "You give residence %1 to player %2", writer, conf, true); + GetConfig("Language.ResidenceRecieve", "You have recieved residence %1 from player %2", writer, conf, true); + // GetConfig("Language.#ResidenceListAll", "Residences - - removed, use GenericPage now", writer, conf, true); - GetConfigString("Language.ResidenceListAllEmpty", "No Residences exists on the server...", writer, conf, true); - GetConfigString("Language.InvalidPage", "Invalid Page...", writer, conf, true); - GetConfigString("Language.NextPage", "Next Page", writer, conf, true); - GetConfigString("Language.NextInfoPage", "&2| &eNext Page &2>>>", writer, conf, true); - GetConfigString("Language.PrevInfoPage", "&2<<< &ePrev Page &2|", writer, conf, true); - GetConfigString("Language.RemovePlayersResidences", "Removed all residences belonging to player %1", writer, conf, true); - GetConfigString("Language.GenericPage", "Page %1 of %2", writer, conf, true); - GetConfigString("Language.ResidenceRentedBy", "Rented by %1", writer, conf, true); - GetConfigString("Language.InvalidCharacters", "Invalid characters detected...", writer, conf, true); - GetConfigString("Language.InvalidNameCharacters", "Name contained unallowed characters...", writer, conf, true); - GetConfigString("Language.DeleteConfirm", "Are you sure you want to delete residence %1, use /res confirm to confirm.", writer, conf, true); - GetConfigString("Language.SelectTooHigh", "Warning, selection went above top of map, limiting.", writer, conf, true); - GetConfigString("Language.SelectTooLow", "Warning, selection went below bottom of map, limiting.", writer, conf, true); - GetConfigString("Language.WorldEditNotFound", "WorldEdit was not detected.", writer, conf, true); - GetConfigString("Language.NoResHere", "There is no residence in there.", writer, conf, true); - GetConfigString("Language.DeleteSubzoneConfirm", "Are you sure you want to delete subzone %1, use /res confirm to confirm.", writer, conf, true); - GetConfigString("Language.SubzoneOwnerChange", "Subzone %1 owner changed to %2", writer, conf, true); - GetConfigString("Language.CoordsTop", "X:%1 Y:%2 Z:%3", writer, conf, true); - GetConfigString("Language.CoordsBottom", "X:%1 Y:%2 Z:%3", writer, conf, true); - GetConfigString("Language.AdminToggle", "Automatic resadmin toggle turned %1", writer, conf, true); - GetConfigString("Language.NoSpawn", "You do not have move permissions at your spawn point. Relocating", writer, conf, true); - GetConfigString("Language.CompassTargetReset", "Your compass has been reset", writer, conf, true); - GetConfigString("Language.CompassTargetSet", "Your compass now points to %1", writer, conf, true); + GetConfig("Language.ResidenceListAllEmpty", "No Residences exists on the server...", writer, conf, true); + GetConfig("Language.InvalidPage", "Invalid Page...", writer, conf, true); + GetConfig("Language.NextPage", "Next Page", writer, conf, true); + GetConfig("Language.NextInfoPage", "&2| &eNext Page &2>>>", writer, conf, true); + GetConfig("Language.PrevInfoPage", "&2<<< &ePrev Page &2|", writer, conf, true); + GetConfig("Language.RemovePlayersResidences", "Removed all residences belonging to player %1", writer, conf, true); + GetConfig("Language.GenericPage", "Page %1 of %2", writer, conf, true); + GetConfig("Language.ResidenceRentedBy", "Rented by %1", writer, conf, true); + GetConfig("Language.InvalidCharacters", "Invalid characters detected...", writer, conf, true); + GetConfig("Language.InvalidNameCharacters", "Name contained unallowed characters...", writer, conf, true); + GetConfig("Language.DeleteConfirm", "Are you sure you want to delete residence %1, use /res confirm to confirm.", writer, conf, true); + GetConfig("Language.SelectTooHigh", "Warning, selection went above top of map, limiting.", writer, conf, true); + GetConfig("Language.SelectTooLow", "Warning, selection went below bottom of map, limiting.", writer, conf, true); + GetConfig("Language.WorldEditNotFound", "WorldEdit was not detected.", writer, conf, true); + GetConfig("Language.NoResHere", "There is no residence in there.", writer, conf, true); + GetConfig("Language.DeleteSubzoneConfirm", "Are you sure you want to delete subzone %1, use /res confirm to confirm.", writer, conf, true); + GetConfig("Language.SubzoneOwnerChange", "Subzone %1 owner changed to %2", writer, conf, true); + GetConfig("Language.CoordsTop", "X:%1 Y:%2 Z:%3", writer, conf, true); + GetConfig("Language.CoordsBottom", "X:%1 Y:%2 Z:%3", writer, conf, true); + GetConfig("Language.AdminToggle", "Automatic resadmin toggle turned %1", writer, conf, true); + GetConfig("Language.NoSpawn", "You do not have move permissions at your spawn point. Relocating", writer, conf, true); + GetConfig("Language.CompassTargetReset", "Your compass has been reset", writer, conf, true); + GetConfig("Language.CompassTargetSet", "Your compass now points to %1", writer, conf, true); writer.addComment("Language.Description", "The below lines are mostly a word bank for various uses."); - GetConfigString("Language.Description", "Description", writer, conf, true); - GetConfigString("Language.Land", "Land", writer, conf, true); - GetConfigString("Language.Cost", "Cost", writer, conf, true); - GetConfigString("Language.Selection", "Selection", writer, conf, true); - GetConfigString("Language.Total", "Total", writer, conf, true); - GetConfigString("Language.Size", "Size", writer, conf, true); - GetConfigString("Language.Expanding", "Expanding", writer, conf, true); - GetConfigString("Language.Contracting", "Contracting", writer, conf, true); - GetConfigString("Language.North", "North", writer, conf, true); - GetConfigString("Language.West", "West", writer, conf, true); - GetConfigString("Language.South", "South", writer, conf, true); - GetConfigString("Language.East", "East", writer, conf, true); - GetConfigString("Language.Shifting", "Shifting", writer, conf, true); - GetConfigString("Language.Up", "Up", writer, conf, true); - GetConfigString("Language.Down", "Down", writer, conf, true); - GetConfigString("Language.Error", "Error", writer, conf, true); - GetConfigString("Language.Flags", "Flags", writer, conf, true); - GetConfigString("Language.Your", "Your", writer, conf, true); - GetConfigString("Language.Group", "Group", writer, conf, true); - GetConfigString("Language.Others", "Others", writer, conf, true); - GetConfigString("Language.Primary", "Primary", writer, conf, true); - GetConfigString("Language.Secondary", "Secondary", writer, conf, true); - GetConfigString("Language.Selection", "Selection", writer, conf, true); - GetConfigString("Language.Moved", "Moved", writer, conf, true); - GetConfigString("Language.Status", "Status", writer, conf, true); - GetConfigString("Language.Available", "Available", writer, conf, true); - GetConfigString("Language.On", "On", writer, conf, true); - GetConfigString("Language.Off", "Off", writer, conf, true); - GetConfigString("Language.Name", "Name", writer, conf, true); - GetConfigString("Language.Lists", "Lists", writer, conf, true); - GetConfigString("Language.Residences", "Residences", writer, conf, true); - GetConfigString("Language.Residence", "Residence", writer, conf, true); - GetConfigString("Language.Count", "Count", writer, conf, true); - GetConfigString("Language.Owner", "Owner", writer, conf, true); - GetConfigString("Language.World", "World", writer, conf, true); - GetConfigString("Language.Subzones", "Subzones", writer, conf, true); - GetConfigString("Language.CoordsT", "Top Coords", writer, conf, true); - GetConfigString("Language.CoordsB", "Bottom Coords", writer, conf, true); - GetConfigString("Language.TurnOn", "on", writer, conf, true); - GetConfigString("Language.TurnOff", "off", writer, conf, true); - GetConfigString("Language.LimitsTop", "----------------------------------------", writer, conf, true); - GetConfigString("Language.LimitsPGroup", "&7- &ePermissions Group:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsRGroup", "&7- &eResidence Group:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsAdmin", "&7- &eResidence Admin:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsCanCreate", "&7- &eCan Create Residences:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMaxRes", "&7- &eMax Residences:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMaxEW", "&7- &eMax East/West Size:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMaxNS", "&7- &eMax North/South Size:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMaxUD", "&7- &eMax Up/Down Size:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMinMax", "&7- &eMin/Max Protection Height:&3 %1 to %2", writer, conf, true); - GetConfigString("Language.LimitsMaxSub", "&7- &eMax Subzone Depth:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMaxRents", "&7- &eMax Rents:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsEnterLeave", "&7- &eCan Set Enter/Leave Messages:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsNumberOwn", "&7- &eNumber of Residences you own:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsCost", "&7- &eResidence Cost Per Block:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsSell", "&7- &eResidence Sell Cost Per Block:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsFlag", "&7- &eFlag Permissions:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsMaxDays", "&7- &eMax Lease Days:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsLeaseTime", "&7- &eLease Time Given on Renew:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsRenewCost", "&7- &eRenew Cost Per Block:&3 %1", writer, conf, true); - GetConfigString("Language.LimitsBottom", "----------------------------------------", writer, conf, true); - GetConfigString("Language.Gui.Set.Title", "&6%1% flags", writer, conf, true); - GetConfigString("Language.Gui.Pset.Title", "&6%1% %2% flags", writer, conf, true); - GetConfigArray("Language.Gui.Actions", Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove"), writer, conf, true); - - GetConfigString("Language.InformationPage.TopLine", "&e---< &a %1 &e >---", writer, conf, true); - GetConfigString("Language.InformationPage.Page", "&e-----< %1 >-----", writer, conf, true); - GetConfigString("Language.InformationPage.NextPage", "&e-----< %1 >-----", writer, conf, true); - GetConfigString("Language.InformationPage.NoNextPage", "&e-----------------------", writer, conf, true); - GetConfigString("Language.AutoSelection.Enabled", "&eAuto selection mode turned ON. To disable it write /res select auto", writer, conf, true); - GetConfigString("Language.AutoSelection.Disabled", "&eAuto selection mode turned OFF. To enable it again write /res select auto", writer, conf, true); - - GetConfigString("Language.Chat.ChatChannelChange", "Changed residence chat channel to %1", writer, conf, true); - GetConfigString("Language.Chat.ChatChannelLeave", "Left residence chat", writer, conf, true); - - GetConfigString("Language.Chat.JoinFirst", "&4Join residence chat channel first...", writer, conf, true); - GetConfigString("Language.Chat.InvalidChannel", "&4Invalid Channel...", writer, conf, true); - GetConfigString("Language.Chat.InvalidColor", "&4Incorrect color code", writer, conf, true); - GetConfigString("Language.Chat.NotInChannel", "&4Player is not in channel", writer, conf, true); - GetConfigString("Language.Chat.Kicked", "&6%1 &ewas kicked from &6%2 &echannel", writer, conf, true); - GetConfigString("Language.Chat.InvalidPrefixLength", "&4Prefix is to long. Allowed length: %1", writer, conf, true); - GetConfigString("Language.Chat.ChangedColor", "&eResidence chat channel color changed to %1", writer, conf, true); - GetConfigString("Language.Chat.ChangedPrefix", "&eResidence chat channel prefix changed to %1", writer, conf, true); - - GetConfigString("Language.Shop.ListTopLine", "&6%1 &eShop list - Page &6%2 &eof &6%3 %4", writer, conf, true); - GetConfigString("Language.Shop.List", " &e%1. &6%2 &e(&6%3&e) %4", writer, conf, true); - GetConfigString("Language.Shop.ListVoted", "&e%1 (&6%2&e)", writer, conf, true); - - GetConfigString("Language.Shop.VotesTopLine", "&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5", writer, conf, true); - GetConfigString("Language.Shop.VotesList", " &e%1. &6%2 &e%3 &7%4", writer, conf, true); - - GetConfigString("Language.Shop.NoDesc", "&6No description", writer, conf, true); - GetConfigString("Language.Shop.Desc", "&6Description:\n%1", writer, conf, true); - GetConfigString("Language.Shop.DescChange", "&6Description changed to: %1", writer, conf, true); - GetConfigString("Language.Shop.NewBoard", "&6Successfully added new shop sign board", writer, conf, true); - GetConfigString("Language.Shop.DeleteBoard", "&6Right click sign of board you want to delete", writer, conf, true); - GetConfigString("Language.Shop.DeletedBoard", "&6Sign board removed", writer, conf, true); - GetConfigString("Language.Shop.IncorrectBoard", "&cThis is not sign board, try performing command again and clicking correct sign", writer, conf, true); - GetConfigString("Language.Shop.InvalidSelection", "&cLeft click with selection tool top left sign and then right click bottom right", writer, conf, true); - GetConfigString("Language.Shop.VoteChanged", "&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence", writer, conf, true); - GetConfigString("Language.Shop.Voted", "&6You voted, and gave &e%1 &6votes to &e%2 &6residence", writer, conf, true); - GetConfigString("Language.Shop.CantVote", "&cResidence don't have shop flag set to true", writer, conf, true); - GetConfigString("Language.Shop.VotedRange", "&6Vote range is from &e%1 &6to &e%2", writer, conf, true); - GetConfigString("Language.Shop.SignLines.1", "&e--== &8%1 &e==--", writer, conf, true); - GetConfigString("Language.Shop.SignLines.2", "&9%1", writer, conf, true); - GetConfigString("Language.Shop.SignLines.3", "&4%1", writer, conf, true); - GetConfigString("Language.Shop.SignLines.4", "&8%1&e (&8%2&e)", writer, conf, true); - - GetConfigString("Language.RandomTeleport.TpLimit", "&eYou can't teleport so fast, please wait &6%1 &esec and try again", writer, conf, true); - GetConfigString("Language.RandomTeleport.TeleportSuccess", "&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation", writer, conf, true); - GetConfigString("Language.RandomTeleport.IncorrectLocation", "&6Could not find correct teleport location, please wait &e%1 &6sec and try again.", writer, conf, + GetConfig("Language.Description", "Description", writer, conf, true); + GetConfig("Language.Land", "Land", writer, conf, true); + GetConfig("Language.Cost", "Cost", writer, conf, true); + GetConfig("Language.Selection", "Selection", writer, conf, true); + GetConfig("Language.Total", "Total", writer, conf, true); + GetConfig("Language.Size", "Size", writer, conf, true); + GetConfig("Language.Expanding", "Expanding", writer, conf, true); + GetConfig("Language.Contracting", "Contracting", writer, conf, true); + GetConfig("Language.North", "North", writer, conf, true); + GetConfig("Language.West", "West", writer, conf, true); + GetConfig("Language.South", "South", writer, conf, true); + GetConfig("Language.East", "East", writer, conf, true); + GetConfig("Language.Shifting", "Shifting", writer, conf, true); + GetConfig("Language.Up", "Up", writer, conf, true); + GetConfig("Language.Down", "Down", writer, conf, true); + GetConfig("Language.Error", "Error", writer, conf, true); + GetConfig("Language.Flags", "Flags", writer, conf, true); + GetConfig("Language.Your", "Your", writer, conf, true); + GetConfig("Language.Group", "Group", writer, conf, true); + GetConfig("Language.Others", "Others", writer, conf, true); + GetConfig("Language.Primary", "Primary", writer, conf, true); + GetConfig("Language.Secondary", "Secondary", writer, conf, true); + GetConfig("Language.Selection", "Selection", writer, conf, true); + GetConfig("Language.Moved", "Moved", writer, conf, true); + GetConfig("Language.Status", "Status", writer, conf, true); + GetConfig("Language.Available", "Available", writer, conf, true); + GetConfig("Language.On", "On", writer, conf, true); + GetConfig("Language.Off", "Off", writer, conf, true); + GetConfig("Language.Name", "Name", writer, conf, true); + GetConfig("Language.Lists", "Lists", writer, conf, true); + GetConfig("Language.Residences", "Residences", writer, conf, true); + GetConfig("Language.Residence", "Residence", writer, conf, true); + GetConfig("Language.Count", "Count", writer, conf, true); + GetConfig("Language.Owner", "Owner", writer, conf, true); + GetConfig("Language.World", "World", writer, conf, true); + GetConfig("Language.Subzones", "Subzones", writer, conf, true); + GetConfig("Language.CoordsT", "Top Coords", writer, conf, true); + GetConfig("Language.CoordsB", "Bottom Coords", writer, conf, true); + GetConfig("Language.TurnOn", "on", writer, conf, true); + GetConfig("Language.TurnOff", "off", writer, conf, true); + GetConfig("Language.LimitsTop", "----------------------------------------", writer, conf, true); + GetConfig("Language.LimitsPGroup", "&7- &ePermissions Group:&3 %1", writer, conf, true); + GetConfig("Language.LimitsRGroup", "&7- &eResidence Group:&3 %1", writer, conf, true); + GetConfig("Language.LimitsAdmin", "&7- &eResidence Admin:&3 %1", writer, conf, true); + GetConfig("Language.LimitsCanCreate", "&7- &eCan Create Residences:&3 %1", writer, conf, true); + GetConfig("Language.LimitsMaxRes", "&7- &eMax Residences:&3 %1", writer, conf, true); + GetConfig("Language.LimitsMaxEW", "&7- &eMax East/West Size:&3 %1", writer, conf, true); + GetConfig("Language.LimitsMaxNS", "&7- &eMax North/South Size:&3 %1", writer, conf, true); + GetConfig("Language.LimitsMaxUD", "&7- &eMax Up/Down Size:&3 %1", writer, conf, true); + GetConfig("Language.LimitsMinMax", "&7- &eMin/Max Protection Height:&3 %1 to %2", writer, conf, true); + GetConfig("Language.LimitsMaxSub", "&7- &eMax Subzone Depth:&3 %1", writer, conf, true); + GetConfig("Language.LimitsMaxRents", "&7- &eMax Rents:&3 %1", writer, conf, true); + GetConfig("Language.LimitsEnterLeave", "&7- &eCan Set Enter/Leave Messages:&3 %1", writer, conf, true); + GetConfig("Language.LimitsNumberOwn", "&7- &eNumber of Residences you own:&3 %1", writer, conf, true); + GetConfig("Language.LimitsCost", "&7- &eResidence Cost Per Block:&3 %1", writer, conf, true); + GetConfig("Language.LimitsSell", "&7- &eResidence Sell Cost Per Block:&3 %1", writer, conf, true); + GetConfig("Language.LimitsFlag", "&7- &eFlag Permissions:&3 %1", writer, conf, true); + GetConfig("Language.LimitsMaxDays", "&7- &eMax Lease Days:&3 %1", writer, conf, true); + GetConfig("Language.LimitsLeaseTime", "&7- &eLease Time Given on Renew:&3 %1", writer, conf, true); + GetConfig("Language.LimitsRenewCost", "&7- &eRenew Cost Per Block:&3 %1", writer, conf, true); + GetConfig("Language.LimitsBottom", "----------------------------------------", writer, conf, true); + GetConfig("Language.Gui.Set.Title", "&6%1% flags", writer, conf, true); + GetConfig("Language.Gui.Pset.Title", "&6%1% %2% flags", writer, conf, true); + GetConfig("Language.Gui.Actions", Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove"), writer, conf, true); + + GetConfig("Language.InformationPage.TopLine", "&e---< &a %1 &e >---", writer, conf, true); + GetConfig("Language.InformationPage.Page", "&e-----< %1 >-----", writer, conf, true); + GetConfig("Language.InformationPage.NextPage", "&e-----< %1 >-----", writer, conf, true); + GetConfig("Language.InformationPage.NoNextPage", "&e-----------------------", writer, conf, true); + GetConfig("Language.AutoSelection.Enabled", "&eAuto selection mode turned ON. To disable it write /res select auto", writer, conf, true); + GetConfig("Language.AutoSelection.Disabled", "&eAuto selection mode turned OFF. To enable it again write /res select auto", writer, conf, true); + + GetConfig("Language.Chat.ChatChannelChange", "Changed residence chat channel to %1", writer, conf, true); + GetConfig("Language.Chat.ChatChannelLeave", "Left residence chat", writer, conf, true); + + GetConfig("Language.Chat.JoinFirst", "&4Join residence chat channel first...", writer, conf, true); + GetConfig("Language.Chat.InvalidChannel", "&4Invalid Channel...", writer, conf, true); + GetConfig("Language.Chat.InvalidColor", "&4Incorrect color code", writer, conf, true); + GetConfig("Language.Chat.NotInChannel", "&4Player is not in channel", writer, conf, true); + GetConfig("Language.Chat.Kicked", "&6%1 &ewas kicked from &6%2 &echannel", writer, conf, true); + GetConfig("Language.Chat.InvalidPrefixLength", "&4Prefix is to long. Allowed length: %1", writer, conf, true); + GetConfig("Language.Chat.ChangedColor", "&eResidence chat channel color changed to %1", writer, conf, true); + GetConfig("Language.Chat.ChangedPrefix", "&eResidence chat channel prefix changed to %1", writer, conf, true); + + GetConfig("Language.Shop.ListTopLine", "&6%1 &eShop list - Page &6%2 &eof &6%3 %4", writer, conf, true); + GetConfig("Language.Shop.List", " &e%1. &6%2 &e(&6%3&e) %4", writer, conf, true); + GetConfig("Language.Shop.ListVoted", "&e%1 (&6%2&e)", writer, conf, true); + + GetConfig("Language.Shop.VotesTopLine", "&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5", writer, conf, true); + GetConfig("Language.Shop.VotesList", " &e%1. &6%2 &e%3 &7%4", writer, conf, true); + + GetConfig("Language.Shop.NoDesc", "&6No description", writer, conf, true); + GetConfig("Language.Shop.Desc", "&6Description:\n%1", writer, conf, true); + GetConfig("Language.Shop.DescChange", "&6Description changed to: %1", writer, conf, true); + GetConfig("Language.Shop.NewBoard", "&6Successfully added new shop sign board", writer, conf, true); + GetConfig("Language.Shop.DeleteBoard", "&6Right click sign of board you want to delete", writer, conf, true); + GetConfig("Language.Shop.DeletedBoard", "&6Sign board removed", writer, conf, true); + GetConfig("Language.Shop.IncorrectBoard", "&cThis is not sign board, try performing command again and clicking correct sign", writer, conf, true); + GetConfig("Language.Shop.InvalidSelection", "&cLeft click with selection tool top left sign and then right click bottom right", writer, conf, true); + GetConfig("Language.Shop.VoteChanged", "&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence", writer, conf, true); + GetConfig("Language.Shop.Voted", "&6You voted, and gave &e%1 &6votes to &e%2 &6residence", writer, conf, true); + GetConfig("Language.Shop.CantVote", "&cResidence don't have shop flag set to true", writer, conf, true); + GetConfig("Language.Shop.VotedRange", "&6Vote range is from &e%1 &6to &e%2", writer, conf, true); + GetConfig("Language.Shop.SignLines.1", "&e--== &8%1 &e==--", writer, conf, true); + GetConfig("Language.Shop.SignLines.2", "&9%1", writer, conf, true); + GetConfig("Language.Shop.SignLines.3", "&4%1", writer, conf, true); + GetConfig("Language.Shop.SignLines.4", "&8%1&e (&8%2&e)", writer, conf, true); + + GetConfig("Language.RandomTeleport.TpLimit", "&eYou can't teleport so fast, please wait &6%1 &esec and try again", writer, conf, true); + GetConfig("Language.RandomTeleport.TeleportSuccess", "&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation", writer, conf, true); + GetConfig("Language.RandomTeleport.IncorrectLocation", "&6Could not find correct teleport location, please wait &e%1 &6sec and try again.", writer, conf, true); - GetConfigString("Language.RandomTeleport.TeleportStarted", "&eTeleportation started, don't move for next &6%4 &esec.", writer, conf, true); + GetConfig("Language.RandomTeleport.TeleportStarted", "&eTeleportation started, don't move for next &6%4 &esec.", writer, conf, true); writer.addComment("CommandHelp", ""); - GetConfigString("CommandHelp.Description", "Contains Help for Residence", writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.Description", "Main Residence Command", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.Info", Arrays.asList("Use /res [command] ? to view more help Information."), writer, conf, true); + GetConfig("CommandHelp.Description", "Contains Help for Residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.Description", "Main Residence Command", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.Info", Arrays.asList("Use /res [command] ? to view more help Information."), writer, conf, true); // res select - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.Description", "Selection Commands", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.Description", "Selection Commands", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.Info", Arrays.asList("This command selects areas for usage with residence.", "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Description", "Display selected coordinates", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Info", Arrays.asList("Usage: /res select coords"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Description", "Display selected coordinates", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Info", Arrays.asList("Usage: /res select coords"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Description", "Display selected size", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Info", Arrays.asList("Usage: /res select size"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Description", "Display selected size", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Info", Arrays.asList("Usage: /res select size"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Description", "Turns on auto selection tool", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Info", Arrays.asList("Usage: /res select auto [playername]"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Description", "Turns on auto selection tool", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Info", Arrays.asList("Usage: /res select auto [playername]"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Description", "Display selection cost", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Info", Arrays.asList("Usage: /res select cost"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Description", "Display selection cost", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Info", Arrays.asList("Usage: /res select cost"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Description", "Expand Selection Vertically", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Description", "Expand Selection Vertically", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Info", Arrays.asList("Usage: /res select vert", "Will expand selection as high and as low as allowed."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Description", "Expand Selection to Sky", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Info", Arrays.asList("Usage: /res select sky", + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Description", "Expand Selection to Sky", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Info", Arrays.asList("Usage: /res select sky", "Expands as high as your allowed to go."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Description", "Expand Selection to Bedrock", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Description", "Expand Selection to Bedrock", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Info", Arrays.asList("Usage: /res select bedrock", "Expands as low as your allowed to go."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Description", "Expand selection in a direction.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Description", "Expand selection in a direction.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Info", Arrays.asList("Usage: /res select expand ", "Expands in the direction your looking."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Description", "Shift selection in a direction", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Description", "Shift selection in a direction", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Info", Arrays.asList("Usage: /res select shift ", "Pushes your selection by in the direction your looking."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Description", "Select the chunk your currently in.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Description", "Select the chunk your currently in.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Info", Arrays.asList("Usage: /res select chunk", "Selects the chunk your currently standing in."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Description", "Select a existing area in a residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Description", "Select a existing area in a residence.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Info", Arrays.asList("Usage /res select ", "Selects a existing area in a residence."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Description", "Set selection using the current WorldEdit selection.", + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Description", "Set selection using the current WorldEdit selection.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Info", Arrays.asList("Usage /res select worldedit", "Sets selection area using the current WorldEdit selection."), writer, conf, true); // res create - GetConfigString("CommandHelp.SubCommands.res.SubCommands.create.Description", "Create Residences", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.create.Info", Arrays.asList("Usage: /res create "), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.create.Description", "Create Residences", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.create.Info", Arrays.asList("Usage: /res create "), writer, conf, true); // res remove - GetConfigString("CommandHelp.SubCommands.res.SubCommands.remove.Description", "Remove residences.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("Usage: /res remove "), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.remove.Description", "Remove residences.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("Usage: /res remove "), writer, conf, true); // res padd - GetConfigString("CommandHelp.SubCommands.res.SubCommands.padd.Description", "Add player to residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.padd.Info", Arrays.asList("Usage: /res padd [player]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.padd.Description", "Add player to residence.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.padd.Info", Arrays.asList("Usage: /res padd [player]", "Adds essential flags for player"), writer, conf, true); // res pdel - GetConfigString("CommandHelp.SubCommands.res.SubCommands.pdel.Description", "Remove player from residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.pdel.Info", Arrays.asList("Usage: /res pdel [player]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Description", "Remove player from residence.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Info", Arrays.asList("Usage: /res pdel [player]", "Removes essential flags from player"), writer, conf, true); // res info - GetConfigString("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.info.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Info", Arrays.asList("Usage: /res info ", "Leave off to display info for the residence your currently in."), writer, conf, true); // res set - GetConfigString("CommandHelp.SubCommands.res.SubCommands.set.Description", "Set general flags on a Residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.set.Info", Arrays.asList("Usage: /res set [flag] [true/false/remove]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.set.Description", "Set general flags on a Residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.set.Info", Arrays.asList("Usage: /res set [flag] [true/false/remove]", "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)"), writer, conf, true); // res pset - GetConfigString("CommandHelp.SubCommands.res.SubCommands.pset.Description", "Set flags on a specific player for a Residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.pset.Info", Arrays.asList("Usage: /res pset [player] [flag] [true/false/remove]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.pset.Description", "Set flags on a specific player for a Residence.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.pset.Info", Arrays.asList("Usage: /res pset [player] [flag] [true/false/remove]", "Usage: /res pset [player] removeall", "To see a list of flags, use /res flags ?"), writer, conf, true); // res flags - GetConfigString("CommandHelp.SubCommands.res.SubCommands.flags.Description", "List of flags", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.flags.Info", - Arrays.asList("For flag values, usually true allows the action, and false denys the action.", - "&2build &3- &eallows or denys building", - "&2use &3- &eallows or denys use of doors, lever, buttons, etc...", - "&2move &3- &eallows or denys movement in the residence.", - "&2container &3- &eallows or denys use of furnaces, chests, dispensers, etc...", - "&2trusted &3- &eGives build, use, move, container and tp flags", - "&2place &3- &eallows or denys only placement of blocks, overrides the build flag.", - "&2destroy &3- &eallows or denys only destruction of blocks, overrides the build flag.", - "&2pvp &3- &eallow or deny pvp in the residence", - "&2tp &3- &eallow or disallow teleporting to the residence.", - "&2admin &3- &egives a player permission to change flags on a residence.", - "&2subzone &3- &eallow a player to make subzones in the residence.", - "&2monsters &3- &eallows or denys monster spawns", - "&2cmonsters &3- &eallows or denys custom monster spawns", - "&2smonsters &3- &eallows or denys spawner or spawn egg monster spawns", - "&2nmonsters &3- &eallows or denys natural monster spawns", - "&2animals &3- &eallows or denys animal spawns.", - "&2canimals &3- &eallows or denys custom animal spawns.", - "&2sanimals &3- &eallows or denys spawner or spawn egg animal spawns.", - "&2nanimals &3- &eallows or denys natural animal spawns.", - "&2animalkilling &3- &eallows or denys animal killing.", - "&2mobkilling &3- &eallows or denys mob killing.", - "&2nofly &3- &eallows or denys fly in residence.", - "&2vehicledestroy &3- &eallows or denys vehicle destroy.", - "&2shear &3- &eallows or denys sheep shear.", - "&2leash &3- &eallows or denys aninal leash.", - "&2healing &3- &esetting to true makes the residence heal its occupants", - "&2tnt &3- &eallow or deny tnt explosions", - "&2creeper &3- &eallow or deny creeper explosions", - "&2ignite &3- &eallows or denys fire ignition.", - "&2firespread &3- &eallows or denys fire spread.", - "&2bucket &3- &eallow or deny bucket use.", - "&2flow &3- &eallows or denys liquid flow.", - "&2lavaflow &3- &eallows or denys lava flow, overrides flow", - "&2waterflow &3- &eallows or denys water flow, overrides flow", - "&2damage &3- &eallows or denys all entity damage within the residence.", - "&2piston &3- &eallow or deny pistons from pushing or pulling blocks in the residence.", - "&2hidden &3- &ehides residence from list or listall commands.", - "&2cake &3- &eallows or denys players to eat cake", - "&2lever &3- &eallows or denys players to use levers", - "&2button &3- &eallows or denys players to use buttons", - "&2diode &3- &eallows or denys players to use redstone repeaters", - "&2door &3- &eallows or denys players to use doors and trapdoors", - "&2table &3- &eallows or denys players to use workbenches", - "&2enchant &3- &eallows or denys players to use enchanting tables", - "&2brew &3- &eallows or denys players to use brewing stands", - "&2bed &3- &eallows or denys players to use beds", - "&2button &3- &eallows or denys players to use buttons", - "&2pressure &3- &eallows or denys players to use pressure plates", - "&2note &3- &eallows or denys players to use note blocks", - "&2redstone &3- &eGives lever, diode, button, pressure, note flags", - "&2craft &3- &eGives table, enchant, brew flags", - "&2trample &3- &eAllows or denys crop trampling in residence", - "&2trade &3- &eAllows or denys villager trading in residence", - "&2nomobs &3- &ePrevents monsters from entering residence residence", - "&2explode &3- &eAllows or denys explosions in residences", - "&2fireball &3- &eAllows or denys fire balls in residences", - "&2command &3- &eAllows or denys comamnd use in residences", - "&2overridepvp &3- &eOverrides any plugin pvp protection", - "&2keepinv &3- &ePlayers keeps inventory after death", - "&2keepexp &3- &ePlayers keeps exp after death", - "&2burn &3- &eallows or denys Mob combustion in residences", - "&2bank &3- &eallows or denys deposit/withdraw money from res bank"), - writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.Description", "List of flags", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.Info", + Arrays.asList("For flag values, usually true allows the action, and false denys the action."), writer, conf, true); + + // build + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.build.Description", + "allows or denys building", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.build.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // use + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.use.Description", + "allows or denys use of doors, lever, buttons, etc...", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.use.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // move + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.move.Description", + "allows or denys movement in the residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.move.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // container + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.container.Description", + "allows or denys use of furnaces, chests, dispensers, etc...", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.container.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // trusted + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trusted.Description", + "gives build, use, move, container and tp flags", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trusted.Info", + Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove"), writer, conf, true); + // place + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.place.Description", + "allows or denys only placement of blocks, overrides the build flag", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.place.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // destroy + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.destroy.Description", + "allows or denys only destruction of blocks, overrides the build flag", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.destroy.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // pvp + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pvp.Description", + "allow or deny pvp in the residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pvp.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // tp + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tp.Description", + "allow or disallow teleporting to the residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tp.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // admin + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.admin.Description", + "gives a player permission to change flags on a residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.admin.Info", + Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove"), writer, conf, true); + // subzone + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.subzone.Description", + "allow a player to make subzones in the residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.subzone.Info", + Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove"), writer, conf, true); + // monsters + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.monsters.Description", + "allows or denys monster spawns", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.monsters.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // cmonsters + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cmonsters.Description", + "allows or denys custom monster spawns", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cmonsters.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // smonsters + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.smonsters.Description", + "allows or denys spawner or spawn egg monster spawns", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.smonsters.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // nmonsters + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nmonsters.Description", + "allows or denys natural monster spawns", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nmonsters.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // animals + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animals.Description", + "allows or denys animal spawns", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animals.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // canimals + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.canimals.Description", + "allows or denys custom animal spawns", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.canimals.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // sanimals + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.sanimals.Description", + "allows or denys spawner or spawn egg animal spawns", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.sanimals.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // nanimals + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nanimals.Description", + "allows or denys natural animal spawns", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nanimals.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // animalkilling + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animalkilling.Description", + "allows or denys animal killing", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animalkilling.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // mobkilling + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobkilling.Description", + "allows or denys mob killing", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobkilling.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // nofly + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nofly.Description", + "allows or denys fly in residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nofly.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // vehicledestroy + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.vehicledestroy.Description", + "allows or denys vehicle destroy", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.vehicledestroy.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // shear + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shear.Description", + "allows or denys sheep shear", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shear.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // leash + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.leash.Description", + "allows or denys aninal leash", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.leash.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // healing + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.healing.Description", + "setting to true makes the residence heal its occupants", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.healing.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // feed + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.feed.Description", + "setting to true makes the residence feed its occupants", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.feed.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // tnt + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tnt.Description", + "allow or deny tnt explosions", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tnt.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // creeper + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.creeper.Description", + "allow or deny creeper explosions", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.creeper.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // ignite + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.ignite.Description", + "allows or denys fire ignition", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.ignite.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // firespread + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.firespread.Description", + "allows or denys fire spread", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.firespread.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // bucket + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucket.Description", + "allow or deny bucket use", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucket.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // flow + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.flow.Description", + "allows or denys liquid flow", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.flow.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // lavaflow + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lavaflow.Description", + "allows or denys lava flow, overrides flow", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lavaflow.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // waterflow + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.waterflow.Description", + "allows or denys water flow, overrides flow", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.waterflow.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // damage + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.damage.Description", + "allows or denys all entity damage within the residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.damage.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // piston + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.piston.Description", + "allow or deny pistons from pushing or pulling blocks in the residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.piston.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // hidden + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hidden.Description", + "hides residence from list or listall commands", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hidden.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // cake + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cake.Description", + "allows or denys players to eat cake", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cake.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // lever + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lever.Description", + "allows or denys players to use levers", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lever.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // button + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.button.Description", + "allows or denys players to use buttons", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.button.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // diode + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.diode.Description", + "allows or denys players to use redstone repeaters", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.diode.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // door + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.door.Description", + "allows or denys players to use doors and trapdoors", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.door.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // table + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.table.Description", + "allows or denys players to use workbenches", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.table.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // enchant + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enchant.Description", + "allows or denys players to use enchanting tables", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enchant.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // brew + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.brew.Description", + "allows or denys players to use brewing stands", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.brew.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // bed + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bed.Description", + "allows or denys players to use beds", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bed.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // pressure + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pressure.Description", + "allows or denys players to use pressure plates", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pressure.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // note + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.note.Description", + "allows or denys players to use note blocks", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.note.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // redstone + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.redstone.Description", + "Gives lever, diode, button, pressure, note flags", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.redstone.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // craft + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.craft.Description", + "Gives table, enchant, brew flags", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.craft.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // trample + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trample.Description", + "Allows or denys crop trampling in residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trample.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // trade + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trade.Description", + "Allows or denys villager trading in residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trade.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // nomobs + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nomobs.Description", + "Prevents monsters from entering residence residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nomobs.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // explode + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.explode.Description", + "Allows or denys explosions in residences", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.explode.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // witherdamage + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.witherdamage.Description", + "Disables wither damage in residences", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.witherdamage.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // fireball + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.fireball.Description", + "Allows or denys fire balls in residences", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.fireball.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // command + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.command.Description", + "Allows or denys comamnd use in residences", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.command.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // overridepvp + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.overridepvp.Description", + "Overrides any plugin pvp protection", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.overridepvp.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // keepinv + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepinv.Description", + "Players keeps inventory after death", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepinv.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // keepexp + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepexp.Description", + "Players keeps exp after death", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepexp.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // burn + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.burn.Description", + "allows or denys Mob combustion in residences", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.burn.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // bank + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bank.Description", + "allows or denys deposit/withdraw money from res bank", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bank.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // shop + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shop.Description", + "allows or denys deposit/withdraw money from res bank", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shop.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); //res limits - GetConfigString("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.limits.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.limits.Info", Arrays.asList("Usage: /res limits", "Shows the limitations you have on creating and managing residences."), writer, conf, true); // res tpset - GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpset.Description", "Set the teleport location of a Residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpset.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.tpset.Description", "Set the teleport location of a Residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.tpset.Info", Arrays.asList("Usage: /res tpset", "This will set the teleport location for a residence to where your standing.", "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence."), writer, conf, true); // res tp - GetConfigString("CommandHelp.SubCommands.res.SubCommands.tp.Description", "Teleport to a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tp.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.tp.Description", "Teleport to a residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.tp.Info", Arrays.asList("Usage: /res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", "Your permission group must also be allowed to teleport by the server admin."), writer, conf, true); // res rt - GetConfigString("CommandHelp.SubCommands.res.SubCommands.rt.Description", "Teleports to random location in world", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.rt.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.rt.Description", "Teleports to random location in world", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.rt.Info", Arrays.asList("Usage: /res rt", "Teleports you to random location in defined world."), writer, conf, true); // res shop - GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.Description", "Manage residence shop", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.Info", Arrays.asList("Manages residence shop feature"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.Description", "Manage residence shop", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.Info", Arrays.asList("Manages residence shop feature"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Description", "Shows list of res shops", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Info", Arrays.asList("Usage: /res shop list", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Description", "Shows list of res shops", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Info", Arrays.asList("Usage: /res shop list", "Shows full list of all residences with shop flag"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Description", "Vote for residence shop", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Info", Arrays.asList("Usage: /res shop vote [amount]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Description", "Vote for residence shop", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Info", Arrays.asList("Usage: /res shop vote [amount]", "Votes for current or defined residence"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Description", "Shows res shop votes", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Info", Arrays.asList("Usage: /res shop votes ", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Description", "Shows res shop votes", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Info", Arrays.asList("Usage: /res shop votes ", "Shows full vote list of current or defined residence shop"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Description", "Sets residence shop description", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Info", Arrays.asList("Usage: /res shop setdesc [text]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Description", "Sets residence shop description", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Info", Arrays.asList("Usage: /res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Description", "Create res shop board", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Info", Arrays.asList("Usage: /res shop createboard [place]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Description", "Create res shop board", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Info", Arrays.asList("Usage: /res shop createboard [place]", "Creates res shop board from selected area. Place - position from which to start filling board"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Description", "Deletes res shop board", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Info", Arrays.asList("Usage: /res shop deleteboard", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Description", "Deletes res shop board", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Info", Arrays.asList("Usage: /res shop deleteboard", "Deletes res shop board bi right clicking on one of signs"), writer, conf, true); // res tpconfirm - GetConfigString("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", Arrays.asList("Usage: /res tpconfirm", "Teleports you to a residence, when teleportation is unsafe."), writer, conf, true); // res subzone - GetConfigString("CommandHelp.SubCommands.res.SubCommands.subzone.Description", "Create subzones in residences.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.subzone.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.subzone.Description", "Create subzones in residences.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.subzone.Info", Arrays.asList("Usage: /res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.Description", "Manage physical areas for a residence.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.Description", "Manage physical areas for a residence.", writer, conf, true); //res area - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Description", "List physical areas in a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Description", "List physical areas in a residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Info", Arrays.asList("Usage: /res area list [residence] "), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Description", "List coordinates and other Info for areas", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("Usage: /res area listall [residence] "), writer, + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Description", "List coordinates and other Info for areas", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("Usage: /res area listall [residence] "), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Description", "Add physical areas to a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Description", "Add physical areas to a residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Info", Arrays.asList("Usage: /res area add [residence] [areaID]", "You must first select two points first."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Description", "Remove physical areas from a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("Usage: /res area remove [residence] [areaID]"), writer, + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Description", "Remove physical areas from a residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("Usage: /res area remove [residence] [areaID]"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Description", "Replace physical areas in a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("Usage: /res area replace [residence] [areaID]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Description", "Replace physical areas in a residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("Usage: /res area replace [residence] [areaID]", "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger."), writer, conf, true); // res message - GetConfigString("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.message.Info", Arrays.asList("Usage: /res message [enter/leave] [message]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.message.Info", Arrays.asList("Usage: /res message [enter/leave] [message]", "Set the enter or leave message of a residence.", "Usage: /res message remove [enter/leave]", "Removes a enter or leave message."), writer, conf, true); // res lease - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.Description", "Manage residence leases", writer, conf, true); - GetConfigArray( + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.Description", "Manage residence leases", writer, conf, true); + GetConfig( "CommandHelp.SubCommands.res.SubCommands.lease.Info", Arrays.asList("Usage: /res lease [renew/cost] [residence]", "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", Arrays.asList("Usage: /resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Description", "Renew the lease time", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Description", "Renew the lease time", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Info", Arrays.asList("Usage: /resadmin lease renew ", "Renews the lease time for current or specified residence."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Description", "Lease end date", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Description", "Lease end date", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Info", Arrays.asList("Usage: /resadmin lease expires ", "Shows when expires residence lease time."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Description", "Shows renew cost", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Description", "Shows renew cost", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Info", Arrays.asList("Usage: /resadmin lease cost ", "Shows how much money you need to renew residence lease."), writer, conf, true); // res bank - GetConfigString("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.bank.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.bank.Info", Arrays.asList("Usage: /res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", "You must have the +bank flag."), writer, conf, true); // res confirm - GetConfigString("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.confirm.Info", Arrays.asList("Usage: /res confirm", "Confirms removal of a residence."), writer, conf, + GetConfig("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.confirm.Info", Arrays.asList("Usage: /res confirm", "Confirms removal of a residence."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.gset.Description", "Set flags on a specific group for a Residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.gset.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.gset.Description", "Set flags on a specific group for a Residence.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.gset.Info", Arrays.asList("Usage: /res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lset.Description", "Change blacklist and ignorelist options", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lset.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lset.Description", "Change blacklist and ignorelist options", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lset.Info", Arrays.asList("Usage: /res lset [blacklist/ignorelist] [material]", "Usage: /res lset Info", "Blacklisting a material prevents it from being placed in the residence.", "Ignorelist causes a specific material to not be protected by Residence."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("Usage: /res removeall [owner]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("Usage: /res removeall [owner]", "Removes all residences owned by a specific player.'", "Requires /resadmin if you use it on anyone besides yourself."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.list.Description", "List Residences", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.list.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.list.Description", "List Residences", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.list.Info", Arrays.asList("Usage: /res list ", "Lists all the residences a player owns (except hidden ones).", "If listing your own residences, shows hidden ones as well.", "To list everyones residences, use /res listall."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.listhidden.Description", "List Hidden Residences", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listhidden.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.listhidden.Description", "List Hidden Residences", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.listhidden.Info", Arrays.asList("Usage: /res listhidden ", "Lists hidden residences for a player."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.listall.Description", "List All Residences", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listall.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.listall.Description", "List All Residences", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.listall.Info", Arrays.asList("Usage: /res listall ", "Lists hidden residences for a player."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.listallhidden.Description", "List All Hidden Residences", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.listallhidden.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.listallhidden.Description", "List All Hidden Residences", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.listallhidden.Info", Arrays.asList("Usage: /res listhidden ", "Lists all hidden residences on the server."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.sublist.Description", "List Residence Subzones", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.sublist.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.sublist.Description", "List Residence Subzones", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.sublist.Info", Arrays.asList("Usage: /res sublist ", "List subzones within a residence."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.default.Description", "Reset residence to default flags.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.default.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.default.Description", "Reset residence to default flags.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.default.Info", Arrays.asList("Usage: /res default ", "Resets the flags on a residence to their default. You must be the owner or an admin to do this."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.rename.Description", "Renames a residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.rename.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Description", "Renames a residence.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Info", Arrays.asList("Usage: /res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", "The name must not already be taken by another residence."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.kick.Description", "Kicks player from residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.kick.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.kick.Description", "Kicks player from residence.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.kick.Info", Arrays.asList("Usage: /res kick ", "You must be the owner or an admin to do this.", "Player should be online."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.mirror.Description", "Mirrors Flags", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.mirror.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Description", "Mirrors Flags", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Info", Arrays.asList("Usage: /res mirror [Source Residence] [Target Residence]", "Mirrors flags from one residence to another. You must be owner of both or a admin to do this."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.Description", "Buy, Sell, or Rent Residences", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.mirror.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.Description", "Buy, Sell, or Rent Residences", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Info", Arrays.asList("Usage: /res market ? for more Info"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Description", "Get economy Info on residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Description", "Get economy Info on residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Info", Arrays.asList("Usage: /res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Description", "Lists rentable and for sale residences.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Description", "Lists rentable and for sale residences.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Info", Arrays.asList("Usage: /res market list"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Description", "Sell a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Description", "Sell a residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Info", Arrays.asList("Usage: /res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", "Another player can buy the residence with /res market buy"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Description", "Buy a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Description", "Buy a residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Info", Arrays.asList("Usage: /res market buy [residence]", "Buys a Residence if its for sale."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Description", "Stops selling a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Description", "Stops selling a residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Info", Arrays.asList("Usage: /res market unsell [residence]"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Description", "ent a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Description", "ent a residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Info", Arrays.asList("Usage: /res market rent [residence] ", "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Description", "Make a residence rentable.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Description", "Make a residence rentable.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Info", Arrays.asList("Usage: /res market rentable [residence] [cost] [days] ", "Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Description", "Remove a residence from rent or rentable.", writer, conf, + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Description", "Remove a residence from rent or rentable.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Info", Arrays.asList("Usage: /res market release [residence]", "If you are the renter, this command releases the rent on the house for you.", "If you are the owner, this command makes the residence not for rent anymore."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.current.Description", "Show residence your currently in.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.current.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.current.Description", "Show residence your currently in.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.current.Info", Arrays.asList("Usage: /res current"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.signupdate.Description", "Updated residence signs (Admin only)", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.signupdate.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.signupdate.Description", "Updated residence signs (Admin only)", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.signupdate.Info", Arrays.asList("Usage: /res signupdate"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.Description", "Predefined permission lists", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.Description", "Predefined permission lists", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.Info", Arrays.asList("Predefined permissions that can be applied to a residence."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Description", "Add a list", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Description", "Add a list", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Info", Arrays.asList("Usage: /res lists add "), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Description", "Remove a list", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Description", "Remove a list", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Info", Arrays.asList("Usage: /res lists remove "), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Description", "Apply a list to a residence", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Description", "Apply a list to a residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Info", Arrays.asList("Usage: /res lists apply "), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Description", "Set a flag", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Description", "Set a flag", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Info", Arrays.asList("Usage: /res lists set "), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Description", "Set a player flag", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Description", "Set a player flag", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Info", Arrays.asList("Usage: /res lists pset "), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Description", "Set a group flag", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Description", "Set a group flag", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", Arrays.asList("Usage: /res lists gset "), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.view.Description", "View a list.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.view.Description", "View a list.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", Arrays.asList("Usage: /res lists view "), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.server.Description", "Make land server owned.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.server.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.server.Description", "Make land server owned.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.server.Info", Arrays.asList("Usage: /resadmin server [residence]", "Make a residence server owned."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.setowner.Description", "Change owner of a residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.setowner.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.setowner.Description", "Change owner of a residence.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.setowner.Info", Arrays.asList("Usage: /resadmin setowner [residence] [player]"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.resreload.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.resreload.Info", Arrays.asList("Usage: /resreload"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.resload.Description", "Load residence save file.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.resload.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.resload.Description", "Load residence save file.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.resload.Info", Arrays.asList("Usage: /resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes."), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Description", "Converts ResidenceSigns plugins saved signs.", writer, conf, + GetConfig("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Description", "Converts ResidenceSigns plugins saved signs.", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Info", Arrays.asList("Usage: /ressignconvert"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Info", Arrays.asList("Usage: /ressignconvert"), writer, conf, true); - GetConfigString("CommandHelp.SubCommands.res.SubCommands.version.Description", "how residence version", writer, conf, true); - GetConfigArray("CommandHelp.SubCommands.res.SubCommands.version.Info", + GetConfig("CommandHelp.SubCommands.res.SubCommands.version.Description", "how residence version", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.version.Info", Arrays.asList("Usage: /res version"), writer, conf, true); - // GetConfigArray("CommandHelp.SubCommands.res.select.Info", + // GetConfig("CommandHelp.SubCommands.res.select.Info", // Arrays.asList("", "", ""), writer, conf, true); // Write back config diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 9ceed373e..f8dc42717 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -124,6 +124,7 @@ public class Residence extends JavaPlugin { protected static int leaseBukkitId = -1; protected static int rentBukkitId = -1; protected static int healBukkitId = -1; + protected static int feedBukkitId = -1; protected static int DespawnMobsBukkitId = -1; @@ -150,6 +151,12 @@ public void run() { } }; + private Runnable doFeed = new Runnable() { + public void run() { + plistener.feed(); + } + }; + private Runnable DespawnMobs = new Runnable() { public void run() { plistener.DespawnMobs(); @@ -207,6 +214,7 @@ public void reloadPlugin() { public void onDisable() { server.getScheduler().cancelTask(autosaveBukkitId); server.getScheduler().cancelTask(healBukkitId); + server.getScheduler().cancelTask(feedBukkitId); server.getScheduler().cancelTask(DespawnMobsBukkitId); @@ -495,7 +503,8 @@ public void onEnable() { } autosaveInt = autosaveInt * 60 * 20; autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); - healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, 20); + healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, Residence.getConfigManager().getHealInterval() * 20); + feedBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doFeed, 20, Residence.getConfigManager().getFeedInterval() * 20); if (Residence.getConfigManager().AutoMobRemoval()) DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * Residence.getConfigManager().AutoMobRemovalInterval(), 20 * Residence.getConfigManager().AutoMobRemovalInterval()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3debb4333..c227077fd 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -102,7 +102,7 @@ public void reload() { lastUpdate.put(player.getName(), System.currentTimeMillis()); } } - + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeShopDayNight(ResidenceFlagChangeEvent event) { if (event.isCancelled()) @@ -114,8 +114,8 @@ public void onFlagChangeShopDayNight(ResidenceFlagChangeEvent event) { switch (event.getNewState()) { case NEITHER: case FALSE: - for (Player one : event.getResidence().getPlayersInResidence()) - one.resetPlayerTime(); + for (Player one : event.getResidence().getPlayersInResidence()) + one.resetPlayerTime(); break; case INVALID: break; @@ -125,7 +125,7 @@ public void onFlagChangeShopDayNight(ResidenceFlagChangeEvent event) { break; } } - + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onCommand(PlayerCommandPreprocessEvent event) { Player player = event.getPlayer(); @@ -1081,6 +1081,28 @@ public void doHeals() { } } + public void feed() { + try { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + + if (resname == null) + continue; + + ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + + if (!res.getPermissions().has("feed", false)) + continue; + + int food = player.getFoodLevel(); + if (food < 20 && !player.isDead()) { + player.setFoodLevel(food + 1); + } + } + } catch (Exception ex) { + } + } + public void DespawnMobs() { try { for (Player player : Bukkit.getServer().getOnlinePlayers()) { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index ae9e7691a..787103525 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -169,6 +169,7 @@ public static void initValidFlags() { addResidenceOnlyFlag("wither"); addResidenceOnlyFlag("flow"); addResidenceOnlyFlag("healing"); + addResidenceOnlyFlag("feed"); addResidenceOnlyFlag("animals"); addResidenceOnlyFlag("canimals"); addResidenceOnlyFlag("sanimals"); diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 36ff5ea1f..4aad28cfc 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.containers.HelpLines; + import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -79,7 +80,6 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p sender.sendMessage(ChatColor.GOLD + separator + " " + Residence.getLanguage().getPhrase("HelpPageHeader", ChatColor.YELLOW + path + ChatColor.GOLD + "|" + ChatColor.YELLOW + page + ChatColor.GOLD + "|" + ChatColor.YELLOW + pagecount + ChatColor.GOLD) + " " + separator); -// sender.sendMessage(ChatColor.DARK_AQUA + Residence.getLanguage().getPhrase("Description") + ": " + ChatColor.GREEN + desc); int start = linesPerPage * (page - 1); int end = start + linesPerPage; for (int i = start; i < end; i++) { @@ -87,7 +87,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p if (helplines.get(i).getCommand() != null) { HelpEntry sub = this.getSubEntry(helplines.get(i).getCommand()); - + String desc = ""; int y = 0; for (String one : sub.lines) { @@ -97,12 +97,12 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p desc += "\n"; } } - + if (resadmin) path = path.replace("/res ", "/resadmin "); - + String prev = "[\"\",{\"text\":\"" + ChatColor.GOLD + " " + helplines.get(i).getDesc() - + "\",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + path + helplines.get(i).getCommand() + + "\",\"color\":\"gold\",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + path + helplines.get(i).getCommand() + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev); From 614e91e8ddf61d4d4fba6c0956e3baabdd113bb3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 13 Nov 2015 17:02:31 +0200 Subject: [PATCH 0092/1142] /res flags ? will show appropriate flags depending on permission --- .../bukkit/residence/ConfigManager.java | 24 ++++ src/com/bekvon/bukkit/residence/Locale.java | 103 +++++++++++++++++- .../bekvon/bukkit/residence/NewLanguage.java | 2 +- .../bekvon/bukkit/residence/Residence.java | 4 +- .../residence/ResidenceCommandListener.java | 2 - .../bukkit/residence/text/help/HelpEntry.java | 24 +++- 6 files changed, 149 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 3bc39fea5..3a50d795e 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -9,6 +9,7 @@ import org.bukkit.Location; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.ParticleEffects; import java.io.BufferedReader; @@ -260,6 +261,29 @@ public static List ColorsArray(List text, Boolean colorize) { return temp; } + void UpdateFlagFile() { + + File f = new File(Residence.instance.getDataFolder(), "flags.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + Set sections = conf.getConfigurationSection("Global.FlagPermission").getKeys(false); + int i = 0; + for (String one : Locale.FlagList) { + i++; + Debug.D(i + ". " + one); + if (sections.contains(one.toLowerCase())) + continue; + conf.createSection("Global.FlagPermission." + one.toLowerCase()); + conf.set("Global.FlagPermission." + one.toLowerCase(), false); + } + + try { + conf.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + } + @SuppressWarnings("deprecation") void UpdateConfigFile() { diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 89f998262..28e300dd6 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -10,12 +10,16 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Set; import org.bukkit.ChatColor; import org.bukkit.configuration.Configuration; import org.bukkit.configuration.file.YamlConfiguration; public class Locale { + + public static ArrayList FlagList = new ArrayList(); + public static String GetConfig(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { text = text.replace("\"", "\'"); conf.addDefault(path, text); @@ -532,326 +536,423 @@ public static void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.Info", Arrays.asList("For flag values, usually true allows the action, and false denys the action."), writer, conf, true); + FlagList.clear(); // build + FlagList.add("build"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.build.Description", "allows or denys building", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.build.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // use + FlagList.add("use"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.use.Description", "allows or denys use of doors, lever, buttons, etc...", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.use.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // move + FlagList.add("move"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.move.Description", "allows or denys movement in the residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.move.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // container + FlagList.add("container"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.container.Description", "allows or denys use of furnaces, chests, dispensers, etc...", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.container.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // trusted + FlagList.add("trusted"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trusted.Description", "gives build, use, move, container and tp flags", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trusted.Info", Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove"), writer, conf, true); // place + FlagList.add("place"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.place.Description", "allows or denys only placement of blocks, overrides the build flag", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.place.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // destroy + FlagList.add("destroy"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.destroy.Description", "allows or denys only destruction of blocks, overrides the build flag", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.destroy.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // pvp + FlagList.add("pvp"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pvp.Description", "allow or deny pvp in the residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pvp.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // tp + FlagList.add("tp"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tp.Description", "allow or disallow teleporting to the residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tp.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // admin + FlagList.add("admin"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.admin.Description", "gives a player permission to change flags on a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.admin.Info", Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove"), writer, conf, true); // subzone + FlagList.add("subzone"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.subzone.Description", "allow a player to make subzones in the residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.subzone.Info", Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove"), writer, conf, true); // monsters + FlagList.add("monsters"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.monsters.Description", "allows or denys monster spawns", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.monsters.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // cmonsters + FlagList.add("cmonsters"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cmonsters.Description", "allows or denys custom monster spawns", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cmonsters.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // smonsters + FlagList.add("smonsters"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.smonsters.Description", "allows or denys spawner or spawn egg monster spawns", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.smonsters.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // nmonsters + FlagList.add("nmonsters"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nmonsters.Description", "allows or denys natural monster spawns", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nmonsters.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // animals + FlagList.add("animals"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animals.Description", "allows or denys animal spawns", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animals.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // canimals + FlagList.add("canimals"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.canimals.Description", "allows or denys custom animal spawns", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.canimals.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // sanimals + FlagList.add("sanimals"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.sanimals.Description", "allows or denys spawner or spawn egg animal spawns", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.sanimals.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // nanimals + FlagList.add("nanimals"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nanimals.Description", "allows or denys natural animal spawns", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nanimals.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // animalkilling + FlagList.add("animalkilling"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animalkilling.Description", "allows or denys animal killing", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animalkilling.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // mobkilling + FlagList.add("mobkilling"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobkilling.Description", "allows or denys mob killing", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobkilling.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // nofly + FlagList.add("nofly"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nofly.Description", "allows or denys fly in residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nofly.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // vehicledestroy + FlagList.add("vehicledestroy"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.vehicledestroy.Description", "allows or denys vehicle destroy", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.vehicledestroy.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // shear + FlagList.add("shear"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shear.Description", "allows or denys sheep shear", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shear.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // leash + FlagList.add("leash"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.leash.Description", "allows or denys aninal leash", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.leash.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // healing + FlagList.add("healing"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.healing.Description", "setting to true makes the residence heal its occupants", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.healing.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // feed + FlagList.add("feed"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.feed.Description", "setting to true makes the residence feed its occupants", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.feed.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // tnt + FlagList.add("tnt"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tnt.Description", "allow or deny tnt explosions", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tnt.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // creeper + FlagList.add("creeper"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.creeper.Description", "allow or deny creeper explosions", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.creeper.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // ignite + FlagList.add("ignite"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.ignite.Description", "allows or denys fire ignition", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.ignite.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // firespread + FlagList.add("firespread"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.firespread.Description", "allows or denys fire spread", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.firespread.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // bucket + FlagList.add("bucket"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucket.Description", "allow or deny bucket use", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucket.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // flow + FlagList.add("flow"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.flow.Description", "allows or denys liquid flow", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.flow.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // lavaflow + FlagList.add("lavaflow"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lavaflow.Description", "allows or denys lava flow, overrides flow", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lavaflow.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // waterflow + FlagList.add("waterflow"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.waterflow.Description", "allows or denys water flow, overrides flow", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.waterflow.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // damage + FlagList.add("damage"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.damage.Description", "allows or denys all entity damage within the residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.damage.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // piston + FlagList.add("piston"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.piston.Description", "allow or deny pistons from pushing or pulling blocks in the residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.piston.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // hidden + FlagList.add("hidden"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hidden.Description", "hides residence from list or listall commands", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hidden.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // cake + FlagList.add("cake"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cake.Description", "allows or denys players to eat cake", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cake.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // lever + FlagList.add("lever"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lever.Description", "allows or denys players to use levers", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lever.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // button + FlagList.add("button"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.button.Description", "allows or denys players to use buttons", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.button.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // diode + FlagList.add("diode"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.diode.Description", "allows or denys players to use redstone repeaters", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.diode.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // door + FlagList.add("door"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.door.Description", "allows or denys players to use doors and trapdoors", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.door.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // table + FlagList.add("table"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.table.Description", "allows or denys players to use workbenches", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.table.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // enchant + FlagList.add("enchant"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enchant.Description", "allows or denys players to use enchanting tables", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enchant.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // brew + FlagList.add("brew"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.brew.Description", "allows or denys players to use brewing stands", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.brew.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // bed + FlagList.add("bed"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bed.Description", "allows or denys players to use beds", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bed.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // pressure + FlagList.add("pressure"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pressure.Description", "allows or denys players to use pressure plates", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pressure.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // note + FlagList.add("note"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.note.Description", "allows or denys players to use note blocks", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.note.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // redstone + FlagList.add("redstone"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.redstone.Description", "Gives lever, diode, button, pressure, note flags", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.redstone.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // craft + FlagList.add("craft"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.craft.Description", "Gives table, enchant, brew flags", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.craft.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // trample + FlagList.add("trample"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trample.Description", "Allows or denys crop trampling in residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trample.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // trade + FlagList.add("trade"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trade.Description", "Allows or denys villager trading in residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trade.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // nomobs + FlagList.add("nomobs"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nomobs.Description", "Prevents monsters from entering residence residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nomobs.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // explode + FlagList.add("explode"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.explode.Description", "Allows or denys explosions in residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.explode.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // witherdamage + FlagList.add("witherdamage"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.witherdamage.Description", "Disables wither damage in residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.witherdamage.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // fireball + FlagList.add("fireball"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.fireball.Description", "Allows or denys fire balls in residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.fireball.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // command + FlagList.add("command"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.command.Description", "Allows or denys comamnd use in residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.command.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // overridepvp + FlagList.add("overridepvp"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.overridepvp.Description", "Overrides any plugin pvp protection", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.overridepvp.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // keepinv + FlagList.add("keepinv"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepinv.Description", "Players keeps inventory after death", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepinv.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // keepexp + FlagList.add("keepexp"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepexp.Description", "Players keeps exp after death", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepexp.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // burn + FlagList.add("burn"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.burn.Description", "allows or denys Mob combustion in residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.burn.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // bank + FlagList.add("bank"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bank.Description", "allows or denys deposit/withdraw money from res bank", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bank.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // shop + FlagList.add("shop"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shop.Description", - "allows or denys deposit/withdraw money from res bank", writer, conf, true); + "adds residence to special residence shop list", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shop.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // day + FlagList.add("day"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.day.Description", + "sets day time in residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.day.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // night + FlagList.add("night"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.night.Description", + "sets night time in residence", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.night.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // chat + FlagList.add("chat"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chat.Description", + "Allows to join residence chat room", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chat.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + + // Filling with custom flags info + Set sec = conf.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands").getKeys(false); + for (String one : sec) { + if (FlagList.contains(one.toLowerCase())) + continue; + String desc = conf.getString("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one + ".Description"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one.toLowerCase() + ".Description", + desc, writer, conf, true); + List info = conf.getStringList("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one + ".Info"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one.toLowerCase() + ".Info", + info, writer, conf, true); + FlagList.add(one.toLowerCase()); + } //res limits GetConfig("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits.", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/NewLanguage.java b/src/com/bekvon/bukkit/residence/NewLanguage.java index 114b507a7..9756a64b4 100644 --- a/src/com/bekvon/bukkit/residence/NewLanguage.java +++ b/src/com/bekvon/bukkit/residence/NewLanguage.java @@ -25,7 +25,7 @@ private NewLanguage() { /** * Reloads the config */ - public static void reload() { + public static void LanguageReload() { customlocale = new YmlMaker((JavaPlugin) Residence.instance, "Language/" + Residence.getConfigManager().language + ".yml").getConfig(); enlocale = new YmlMaker((JavaPlugin) Residence.instance, "Language/English.yml").getConfig(); if (customlocale == null) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f8dc42717..4810c70b5 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -346,8 +346,10 @@ public void onEnable() { for (String lang : validLanguages) { Locale.LoadLang(lang); } + + Residence.getConfigManager().UpdateFlagFile(); - NewLanguage.reload(); + NewLanguage.LanguageReload(); try { File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index cddcf9e02..1e0aac1ca 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -42,7 +42,6 @@ import com.bekvon.bukkit.residence.shopStuff.Vote; import com.bekvon.bukkit.residence.signsStuff.SignUtil; import com.bekvon.bukkit.residence.spout.ResidenceSpout; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.RandomTp; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldguard.protection.regions.ProtectedRegion; @@ -648,7 +647,6 @@ public void run() { List VoteList = new ArrayList(); if (ShopList.containsKey(res.getName())) { VoteList = ShopList.get(res.getName()); - Debug.D(res.getName() + " contains " + VoteList.size()); } String separator = ChatColor.GOLD + ""; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 4aad28cfc..1044e82c5 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.containers.HelpLines; +import com.bekvon.bukkit.residence.protection.FlagPermissions; import java.io.File; import java.io.FileNotFoundException; @@ -151,12 +152,25 @@ private List getHelpData(CommandSender sender, boolean resadmin) { // helplines.addAll(Arrays.asList(lines)); // if (subentrys.size() > 0) // helplines.add(ChatColor.LIGHT_PURPLE + "---" + Residence.getLanguage().getPhrase("SubCommands") + "---"); - for (HelpEntry entry : subentrys) { - if (ResidenceCommandListener.AdminCommands.contains(entry.getName().toLowerCase()) && !resadmin) - continue; - if (!ResidenceCommandListener.AdminCommands.contains(entry.getName().toLowerCase()) && resadmin) - continue; + FlagPermissions GlobalFlags = Residence.getPermissionManager().getAllFlags(); + + for (HelpEntry entry : subentrys) { + + if (!name.equalsIgnoreCase("flags")) { + if (ResidenceCommandListener.AdminCommands.contains(entry.getName().toLowerCase()) && !resadmin) + continue; + + if (!ResidenceCommandListener.AdminCommands.contains(entry.getName().toLowerCase()) && resadmin) + continue; + } else { + if (GlobalFlags.getFlags().containsKey(entry.getName().toLowerCase())) { + Boolean state = GlobalFlags.getFlags().get(entry.getName().toLowerCase()); + if (!state && !resadmin) { + continue; + } + } + } helplines.add(new HelpLines(entry.getName(), ChatColor.GREEN + entry.getName() + ChatColor.GOLD + " - " + entry.getDescription())); } From cb943514c81c40356743359cace6e126f171eaf1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 14 Nov 2015 13:02:36 +0200 Subject: [PATCH 0093/1142] Locale update / Added message when locale file loading fails Fix for occasions when flags or groups files are missing and new ones are not created. --- src/Language/Brazilian.yml | 40 ----------- src/Language/Chinese.yml | 71 +------------------ src/Language/Czech.yml | 40 ----------- src/Language/French.yml | 40 ----------- src/Language/German.yml | 41 ----------- src/Language/Hungarian.yml | 39 ---------- src/Language/Lithuanian.yml | 63 ---------------- src/Language/Spanish.yml | 38 ---------- .../bukkit/residence/ConfigManager.java | 4 -- src/com/bekvon/bukkit/residence/Locale.java | 26 ++++++- .../bekvon/bukkit/residence/Residence.java | 15 ++-- src/plugin.yml | 2 +- 12 files changed, 35 insertions(+), 384 deletions(-) diff --git a/src/Language/Brazilian.yml b/src/Language/Brazilian.yml index 4616f995b..01b421325 100644 --- a/src/Language/Brazilian.yml +++ b/src/Language/Brazilian.yml @@ -437,46 +437,6 @@ CommandHelp: #this is just a holder node, that holds the entire help Description: Lista de flags Info: - 'Para valores de flag, geralmente true permite a acao, e false impede a acao.' - - 'build - permite ou impede construcao' - - 'use - permite ou impede o uso de portas, alavancas, botoes, etc...' - - 'move - permite ou impede movimentacao na residencia.' - - 'container - permite ou impede o uso de fornalhas, baus, ejetor, etc...' - - 'trusted - da permissao build, use, move, container e tp' - - 'place - permite ou impede apenas colocar blocos, sobrescreve a flag build.' - - 'destroy - permite ou impede apenas a destruicao de blocos, sobrescreve a flag build.' - - 'pvp - permite ou impede pvp na residencia' - - 'tp - permite ou impede teleporte para a residencia.' - - 'admin - da permissao ao jogador para alterar as flags da residencia.' - - 'subzone - permite o jogador a criar subzonas na residencia.' - - 'monsters - permite ou impede que monstros nascam na residencia' - - 'animals - permite ou impede que animais nascam na residencia.' - - 'healing - definido como true faz com que a residencia cure os seus ocupantes' - - 'tnt - permite ou impede explosao de tnt' - - 'creeper - permite ou impede explosao de creeper' - - 'ignite - permite ou impede colocar fogo.' - - 'firespread - permite ou impede que o fogo se espalhe.' - - 'bucket - permite ou impede uso de balde.' - - 'flow - permite ou impede fluxo de liquidos.' - - 'lavaflow - permite ou impede fluxo de lava, sobrescreve flow' - - 'waterflow - permite ou impede fluxo de agua, sobrescreve flow' - - 'damage - permite ou impede todos os danos dentro da residencia.' - - 'piston - permite ou impede pistoes funcionarem na residencia.' - - 'hidden - esconde a residencia das listas acessadas pelos comandos /res list e /res listall.' - - 'cake - permite ou impede jogadores de comer bolo' - - 'lever - permite ou impede jogadores de usar alavancas' - - 'button - permite ou impede jogadores de usar botoes' - - 'diode - permite ou impede jogadores de usar repetidores de redstone' - - 'door - permite ou impede jogadores de usar portas e alcapoes' - - 'table - permite ou impede jogadores de usar a mesa de trabalho' - - 'enchant - permite ou impede jogadores de usar a mesa de encantamentos' - - 'brew - permite ou impede jogadores de usar enxada no chao' - - 'bed - permite ou impede jogadores de usar as camas' - - 'button - permite ou impede jogadores de usar botoes' - - 'pressure - permite ou impede jogadores de usar placas de pressao' - - 'note - permite ou impede jogadores de usar o bloco de notas musicais' - - 'redstone - da permissao para lever, diode, button, pressure e note' - - 'craft - da permissao para table, enchant e brew' - - 'burn - permite ou impede Mobs se queimarem na residencia' list: Description: Lista residencias de um jogador Info: diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml index b8514d840..0b46cdeec 100644 --- a/src/Language/Chinese.yml +++ b/src/Language/Chinese.yml @@ -594,76 +594,7 @@ CommandHelp: flags: Description: "æƒé™åˆ—表" Info: - - "æƒé™çš„值: true=å…许该行为, false\ - \ =ç¦æ­¢." - - "build - å…许或ç¦æ­¢å»ºè®¾" - - "use - å…许或ç¦æ­¢é—¨ï¼Œæ“纵æ†ï¼Œ\ - 按钮等的使用..." - - "move - å…许或ç¦æ­¢åœ¨é¢†åœ°ä¸­è¡ŒåŠ¨\ - ." - - "container - å…许或ç¦æ­¢ä½¿ç”¨ç†”炉,\ - ç®±å­ï¼Œç‚¼è¯å°, etc..." - - "trusted - 给予玩家建造,使用,移动\ - ,ç®±å­,和传é€æƒé™" - - "place - å…许或ç¦æ­¢æ–¹å—的放置,\ - 将覆盖 build æƒé™." - - "destroy - å…许或ç¦æ­¢æ–¹å—çš„ç ´å\ - ,将覆盖 build æƒé™." - - "pvp - å…许或ç¦æ­¢é¢†åœ°å†… PVP" - - "tp - å…许或ç¦æ­¢é¢†åœ°å†…çš„ä¼ é€\ - ." - - "admin - 给予æŸçŽ©å®¶æ”¹å˜æŸé¢†åœ°æƒ\ - é™çš„æƒé™." - - "subzone - å…许玩家创建领地领地\ - å­åŒºåŸŸ." - - "monsters - å…许或ç¦æ­¢æ€ªç‰©å‡ºç”Ÿ" - - "animals - å…许或ç¦æ­¢åŠ¨ç‰©å‡ºç”Ÿ." - - "healing - 设置为true使领地å¯ä»¥æ²»ç–—\ - å±…ä½è€…" - - "tnt - å…许或ç¦æ­¢TNT爆炸" - - "creeper - å…许或ç¦æ­¢è‹¦åŠ›æ€•çˆ†ç‚¸" - - "ignite - å…许或ç¦æ­¢ç«ç„°ç‚¹ç‡ƒ." - - "firespread - å…许或ç¦æ­¢ç«ç„°è”“延." - - "bucket - å…许或ç¦æ­¢æ¡¶çš„使用." - - "flow - å…许或ç¦æ­¢æ¶²ä½“æµåŠ¨." - - "lavaflow - å…许或ç¦æ­¢å²©æµ†æµåŠ¨, 覆\ - ç›–æƒé™ flow" - - "waterflow - å…许或ç¦æ­¢æ°´æµåŠ¨,覆盖\ - æƒé™ flow" - - "damage - å…许或ç¦æ­¢é¢†åœ°ä¸­çš„所\ - 有实体伤害." - - "piston - å…许或ç¦æ­¢é¢†åœ°ä¸­ä½¿ç”¨\ - 活塞." - - "hidden - 将领地从 list 或 listall 命令列\ - 表中éšè—." - - "cake - å…许或ç¦æ­¢çŽ©å®¶åƒè›‹ç³•" - - "lever - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æ‹‰æ†" - - "button - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰\ - é’®" - - "diode - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨çº¢çŸ³\ - 中继器" - - "door - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é—¨æˆ–\ - 陷阱门" - - "table - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œ\ - å°" - - "enchant - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„\ - é­”å°" - - "brew - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é…¿é€ \ - å°" - - "bed - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ" - - "button - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰\ - é’®" - - "pressure - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åŽ‹\ - 力æ¿" - - "note - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³ç¬¦\ - ç›’" - - "redstone - 给予玩家 拉æ†, 红石中继\ - 器, 按钮, 压力æ¿, 音符盒 çš„æƒ\ - é™" - - "craft - 给予玩家 工作å°, 附魔å°\ - , é…¿é€ å° çš„æƒé™" - - "burn - å…许或ç¦æ­¢æ€ªç‰©åœ¨é¢†åœ°å†…\ - 燃烧" + - "æƒé™çš„值: true=å…许该行为, false=ç¦æ­¢." list: Description: "领地列表" Info: diff --git a/src/Language/Czech.yml b/src/Language/Czech.yml index d1904df96..67c280b39 100644 --- a/src/Language/Czech.yml +++ b/src/Language/Czech.yml @@ -439,46 +439,6 @@ CommandHelp: #this is just a holder node, that holds the entire help Description: Seznam vlajek Info: - 'Pro hodnoty vlajek obecne plati ze zakazuji resp. povoluji nejakou akci.' - - 'build - povoli nebo zakaze staveni' - - 'use - povoli nebo zakaze pouzivani dveri, pacek, tlacitek atd...' - - 'move - povoli nebo zakaze pohyb po residenci.' - - 'container - povoli nebo zakaze pouzivani beden, peci, dispenzeru atd...' - - 'trusted - jsou to vlajky build, use, move, container a tp dohromady' - - 'place - povoli nebo zakaze pouze umisteni bloku, prepise vlajku build.' - - 'destroy - povoli nebo zakaze niceni bloku v residenci prepise vlajku build.' - - 'pvp - povoli nebo zakaze pvp v residenci' - - 'tp - povoli nebo zakaze teleport do residence.' - - 'admin - povoli nebo zakaze hraci opravneni menit vlajky v residenci.' - - 'subzone - povoli nebo zakaze hraci vytvaret subzony v raesidenci.' - - 'monsters - povoli nebo zakaze spawnovani monster v residenci' - - 'animals - povoli nebo zakaze spawnovani zvirat v residenci.' - - 'healing - povoli nebo zakaze uzdravovani v residenci' - - 'tnt - povoli nebo zakaze exploze tnt v residenci' - - 'creeper - povoli nebo zakaze exploze creeperu v residenci' - - 'ignite - povoli nebo zakaze zapalovani ohne v residenci.' - - 'firespread - povoli nebo zakaze sireni ohne v residenci.' - - 'bucket - povoli nebo zakaze pouziti kybliku v residenci.' - - 'flow - povoli nebo zakaze teceni tekutin v residenci.' - - 'lavaflow - povoli nebo zakaze teceni lavy v residenci' - - 'waterflow - povoli nebo zakaze teceni vody v residenci' - - 'damage - povoli nebo zakaze poskozeni entit v residenci.' - - 'piston - povoli nebo zakaze funkci pistu v residenci.' - - 'hidden - povoli nebo zakaze skryti residence v seznamu residenci prikazu listall.' - - 'cake - povoli nebo zakaze jist hracum dort v residenci' - - 'lever - povoli nebo zakaze pouzivani pacek v residenci' - - 'button - povoli nebo zakaze pouzivani tlacitek v residenci' - - 'diode - povoli nebo zakaze funkci redstone repeateru v residenci' - - 'door - povoli nebo zakaze pouziti dveri v residenci' - - 'table - povoli nebo zakaze pouziti ponku v residenci' - - 'enchant - povoli nebo zakaze pouziti enchant stolu v residenci' - - 'brew - povoli nebo zakaze brewing v residenci' - - 'bed - povoli nebo zakaze pouziti postele v residenci' - - 'button - povoli nebo zakaze pouziti tlacitek v residenci' - - 'pressure - povoli nebo zakaze funkci naslapnych desek v residenci' - - 'note - povoli nebo zakaze pouziti note blocku v residenci' - - 'redstone - povoli nebo zakaze funci pacek, repeateru, tlacitek, nasl.desek v residenci' - - 'craft - povoli nebo zakaze pouziti ponku, enchant tablu a brewingu v residenci' - - 'burn - povoli nebo zakaze horen mobu v residenci' list: Description: Seznem residenci Info: diff --git a/src/Language/French.yml b/src/Language/French.yml index 7395c0a27..dbc2349cc 100644 --- a/src/Language/French.yml +++ b/src/Language/French.yml @@ -433,46 +433,6 @@ CommandHelp: #this is just a holder node, that holds the entire help Description: Liste les flags Info: - 'true autorise, et false interdit l''action' - - 'build - autorise ou interdit la construction' - - 'use - autorise ou interdit l''utilisation des portes, des leviers, des boutons, etc...' - - 'move - autorise ou interdit le déplacement dans la résidence' - - 'container - autorise ou interdit l''utilisation des fours, coffres, distributeurs, etc...' - - 'trusted - Gives build, use, move, container and tp flags' - - 'place - autorise ou interdit seulement le placement des blocs, l''emporte sur le flag build' - - 'destroy - autorise ou interdit seulement la destruction des block, l''emporte le flag build' - - 'pvp - autorise ou interdit le PVP dans la résidence' - - 'tp - autorise ou interdit la téléportation à la résidence' - - 'admin - donne au joueur la permission de changer les flags de la résidence' - - 'subzone - autorise un joueur à faire des sous-zones dans la résidence' - - 'monsters - autorise ou interdit les spawns de monstres' - - 'animals - autorise ou interdit les spawns d''animaux' - - 'healing - autorise ou interdit le soin des joueurs dans la résidence' - - 'tnt - autorise ou interdit les explosions de TNT' - - 'creeper - autorise ou interdit les explosions de Creepers' - - 'ignite - autorise ou interdit l''allumage d''un feu' - - 'firespread - autorise ou interdit la propagation du feu' - - 'bucket - autorise ou interdit l''utilisation des sceaux' - - 'flow - autorise ou interdit l''écoulement des liquides' - - 'lavaflow - autorise ou interdit l''écoulement du feu, l''emporte sur le flag flow' - - 'waterflow - autorise ou interdit l''écoulement de l''eau, l''emporte sur le flag flow' - - 'damage - autorise ou interdit tous les dommages subis dans la résidence' - - 'piston - autorise ou interdit les pistons de pousser ou de tirer un bloc dans la résidence' - - 'hidden - cache la résidence de la liste' - - 'cake - allows or denys players to eat cake' - - 'lever - allows or denys players to use levers' - - 'button - allows or denys players to use buttons' - - 'diode - allows or denys players to use redstone repeaters' - - 'door - allows or denys players to use doors and trapdoors' - - 'table - allows or denys players to use workbenches' - - 'enchant - allows or denys players to use enchanting tables' - - 'brew - allows or denys players to use brewing stands' - - 'bed - allows or denys players to use beds' - - 'button - allows or denys players to use buttons' - - 'pressure - allows or denys players to use pressure plates' - - 'note - allows or denys players to use note blocks' - - 'redstone - Gives lever, diode, button, pressure, note flags' - - 'craft - Gives table, enchant, brew flags' - list: Description: Liste les résidences Info: - 'Utilisation: /res list ' diff --git a/src/Language/German.yml b/src/Language/German.yml index b3e5d4ad6..38f89e11c 100644 --- a/src/Language/German.yml +++ b/src/Language/German.yml @@ -442,47 +442,6 @@ CommandHelp: #this is just a holder node, that holds the entire help Description: Liste der Flags Info: - 'Flag-Werte: [true] erlaubt die Handlung, [false] verbietet die Handlung' - - 'build - erlaubt / verbietet das Bauen' - - 'use - erlaubt / verbietet das nutzen von Türen, Schaltern, Knöpfen, etc.' - - 'move - erlaubt / verbietet das bewegen auf einem Grundstück' - - 'container - erlaubt / verbietet das nutzen von Öfen, Truhen, Spendern, etc.' - - 'trusted - gibt einem Spieler Build-, Use-, Move-, Container- und Tp-Flags' - - 'place - erlaubt / verbietet das platzieren von Blöcken, überschreibt die Build-Flag' - - 'destroy - erlaubt / verbietet das zerstören von Blöcken, überschreibt die Build-Flag' - - 'pvp - erlaubt / verbietet PVP auf dem Grundstück, PVP=Spieler gegen Spieler' - - 'tp - erlaubt / verbietet das teleportieren zum Grundstück' - - 'admin - gibt einem Spieler die Berechtigung, die Flags eines Grundstücks zu ändern' - - 'subzone - erlaubt einem Spieler Subzonen auf einem Grundstück zu erstellen' - - 'monsters - erlaubt / verbietet das spawnen von Monstern' - - 'animals - erlaubt / verbietet das spawnen von Tieren' - - 'healing - auf [true] gesetzt werden alle auf dem Grundstück befindlichen Spieler geheilt' - - 'tnt - erlaubt / verbietet TNT-Explosionen' - - 'creeper - erlaubt / verbietet Creeper-Explosionen' - - 'ignite - erlaubt / verbietet das entfachen von Feuer' - - 'firespread - erlaubt / verbietet das ausbreiten von Feuer' - - 'bucket - erlaubt / verbietet die Verwendung von Eimern' - - 'flow - erlaubt / verbietet den Flüssigkeitsstrom' - - 'lavaflow - erlaubt / verbietet den Lavastrom, überschreibt die Flow-Flag' - - 'waterflow - erlaubt / verbietet den Wasserstrom, überschreibt die Flow-Flag' - - 'damage - erlaubt / verbietet das erhalten von Schaden auf einem Grundstück' - - 'piston - erlaubt / verbietet das Kolben Blöcke schieben und ziehen können' - - 'hidden - versteckt das Grundstück vor list- oder listall-Kommandos' - - 'cake - erlaubt / verbietet das essen von Kuchen' - - 'lever - erlaubt / verbietet das nutzen von Schaltern' - - 'button - erlaubt / verbietet das nutzen von Knöpfen' - - 'diode - erlaubt / verbietet das nutzen von Redstone Repeatern' - - 'door - erlaubt / verbietet das nutzen von Türen und Falltüren' - - 'table - erlaubt / verbietet das nutzen von Werkbänken' - - 'enchant - erlaubt / verbietet das nutzen von Zaubertischen' - - 'brew - erlaubt / verbietet das nutzen von Brauständen' - - 'bed - erlaubt / verbietet das nutzen von Betten' - - 'pressure - erlaubt / verbietet das nutzen von Druckplatten' - - 'note - erlaubt / verbietet das nutzen von Noten-Blöcken' - - 'redstone - gibt einem Spieler Lever-, Diode-, Button-, Pressure- und Note-Flags' - - 'craft - gibt einem Spieler Table-, Enchant- und Brew-Flags' - - 'burn - erlaubt / verbietet das Mobs auf Grundstücken brennen' - - 'trample - erlaubt / verbietet das zertampeln von Feldern auf Grundstücken' - - 'fire - fügt die Ignite- und Firespread-Flag zum Grundstück hinzu' list: Description: listet Grundstücke Info: diff --git a/src/Language/Hungarian.yml b/src/Language/Hungarian.yml index 796f66ea7..6693ac14e 100644 --- a/src/Language/Hungarian.yml +++ b/src/Language/Hungarian.yml @@ -437,45 +437,6 @@ CommandHelp: #this is just a holder node, that holds the entire help Description: Engedelyek listaja Info: - 'Az engedely ertekek rendszerint, ha igazak(true) akkor engedelyezik, ha hamisak(false), akkor megakadalyozzak a tortenest.' - - 'build - engedi vagy tiltja az epitest' - - 'use - engedi vagy tiltja az ajtok, kapcsolok, gombok, stb... hasznalatat' - - 'move - engedi vagy tiltja a mozgast a lakhelyen.' - - 'container - engedi vagy tiltja a kemencek, ladak, adagolok, stb... hasznalatat' - - 'trusted - Gives build, use, move, container and tp flags' - - 'place - engedi / tiltja csak a blokkok lerakasat, felulirja az epites engedelyt' - - 'destroy -engedi / tiltja csak a blokkok kiuteset felulirja az epites engedelyt.' - - 'pvp - engedi vagy tiltja pvp-t a lakhelyen.' - - 'tp - engedi vagy tiltja a teleportalast a lakhelyre.' - - 'admin - ad a jatekosnak jogot az engedelyek valtoztatasara a lakhelyen.' - - 'subzone - engedi a jatekosoknak alosztalyokat kesziteni a lakhelyen.' - - 'monsters - engedi vagy tiltja a szorny spawnolast' - - 'animals - engedi vagy tiltja az allat spawnolast.' - - 'healing - igazra(true) allitasara a lakhely gyogyitja a rajta levoket' - - 'tnt - engedi vagy tiltja a tnt robbanasokat' - - 'creeper - engedi vagy tiltja a creeper robbanast' - - 'ignite - engedi vagy tiltja a tuz keletkezeset.' - - 'firespread - engedi vagy tiltja a tuzterjedest.' - - 'bucket - engedi vagy tiltja a vodor hasznalatot.' - - 'flow - engedi vagy tiltja a folyadekaramlast.' - - 'lavaflow - engedi vagy tiltja a lavafolyast, felulirja a folyadekaramlast' - - 'waterflow - engedi vagy tiltja a vizfolyast, felulirja a folyadekaramlast' - - 'damage - engedi vagy tiltja minden szemely serulest a lakhelyen belul.' - - 'piston - engedi vagy tiltja a dugattyuknak(piston)a nyomast/tolast a lakhelyen.' - - 'hidden - elrejti a lakhelyet a list es a listall parancsrol.' - - 'cake - allows or denys players to eat cake' - - 'lever - allows or denys players to use levers' - - 'button - allows or denys players to use buttons' - - 'diode - allows or denys players to use redstone repeaters' - - 'door - allows or denys players to use doors and trapdoors' - - 'table - allows or denys players to use workbenches' - - 'enchant - allows or denys players to use enchanting tables' - - 'brew - allows or denys players to use brewing stands' - - 'bed - allows or denys players to use beds' - - 'button - allows or denys players to use buttons' - - 'pressure - allows or denys players to use pressure plates' - - 'note - allows or denys players to use note blocks' - - 'redstone - Gives lever, diode, button, pressure, note flags' - - 'craft - Gives table, enchant, brew flags' list: Description: Lakhelyek listaja Info: diff --git a/src/Language/Lithuanian.yml b/src/Language/Lithuanian.yml index 8f5edd0b1..fa1bbcfc6 100644 --- a/src/Language/Lithuanian.yml +++ b/src/Language/Lithuanian.yml @@ -436,69 +436,6 @@ CommandHelp: #this is just a holder node, that holds the entire help Description: Veliavu sarasas Info: - 'flagu reiksmes, pagrinde naudoti true kai nori leisti ir false kai nori uzdrausti naudoti komanda ar veiksma.' - - 'build - leisti arba uzdrausti statyti' - - 'use - leisti arba uzdrausti duru, svirciu, mygtuku ir panasei naudojima...' - - 'move - leisti arba uzdrausti judejima jusu rezidencijoje.' - - 'container - leisti arba uzdrausti naudojima skriniu, krosniu, dalytuvu ir panasei naudojima...' - - 'trusted - Suteikia statybos, naudojimo, judejimo, skriniu ir teleporto teises' - - 'place - leisti arba uzdrausti tik bloku padejima jusu rezidencijoje.' - - 'destroy - leisti arba uzdrausti tik bloku naikinima jusu rezidencijoje.' - - 'pvp - leisti arba uzdrausti pvp jusu rezidencijoje' - - 'tp - leisti arba uzdrausti teleportuotis i jusu rezidencija.' - - 'admin - suteikia teise keisti flagus rezidencijoje.' - - 'subzone - suteike teise kurti subzonas rezidencijoje.' - - 'monsters - leisti arba uzdrausti monstru atsiradyma jusu rezidencijoje' - - 'animals - leisti arba uzdrausti gyvunu atsiradima jusu rezidencijoje.' - - 'healing - nustatyk i true is visi esantis bus pagydyti' - - 'tnt - leisti arba uzdrausti TNT sprogimus' - - 'creeper - leisti arba uzdrausti kreeperiu sprogimus' - - 'ignite - leisti arba uzdrausti ugnies iziebima.' - - 'firespread - leisti arba uzdrausti ugnies plitima.' - - 'bucket - leisti arba uzdrausti kibiro naudojima.' - - 'flow - leisti arba uzdrausti vandens tekejima.' - - 'lavaflow - leisti arba uzdrausti lavos tekejima' - - 'waterflow - leisti arba uzdrausti vandens tekejima' - - 'damage - leisti arba uzdrausti patiriama zala nuo monstru' - - 'piston - leisti arba uzdrausti stumoklius.' - - 'hidden - paslepti rezidencija nuo list komandos' - - 'cake - leisti arba uzdrausti valgyti torta' - - 'lever - leisti arba uzdrausti naudotis svirtimis' - - 'button - leisti arba uzdrausti naudotis mygtukais' - - 'diode - leisti arba uzdrausti diodus' - - 'door - leisti arba uzdrausti naudotis durimis ir liukais' - - 'table - leisti arba uzdrausti naudotis darbastaleis' - - 'enchant - leisti arba uzdrausti naudotis kerejimo stalais' - - 'brew - leisti arba uzdrausti naudotis eleksiru staliukais' - - 'bed - leisti arba uzdrausti naudotis lovomis' - - 'button - leisti arba uzdrausti naudotis mygtukais' - - 'pressure - leisti arba uzdrausti naudotis slegio plokstem' - - 'note - leisti arba uzdrausti naudotis natu blokais' - - 'redstone - suteikia lever, diode, button, pressure, note flagus' - - 'craft - suteikia table, enchant, brew flagus' - - 'burn - leisti arba uzdrausti monstru uzsiliepsnojima nuo saules' - - 'melt - Apsaugo nuo sniego istirpimo' - - 'form - Apsaugo nuo sniego susiformavimo' - - 'animalkilling - Apsaugo nuo gyvunu zudymo' - - 'mobkilling - Apsaugo nuo mobu zudymo' - - 'drops - Apsaugo nuo item metimu rese' - - 'enderpearl - Apsaugo nuo enderperl naudojimo rese' - - 'falldamage - Apsaugo nuo falldamage' - - 'portal - Apsaugo nuo portalu naudojimo' - - 'villagerkilling - Apsaugo nuo kaimieciu zudimo' - - 'vehicleprotect - Apsaugo vagoneliu nugriovima' - - 'lightning - Apsaugo nuo zaibu' - - 'grow - Sustabdo augmenijos augima' - - 'hunger - Netampama alkanu' - - 'fishing - Apsaugo nuo zvejojimo' - - 'eggs - Apsaugo nuo kiausiniu metimo' - - 'pigzap - Apsaugo kiaules nuo pasivertimo i pigzombie' - - 'slimesplit - Apsaugo slime pasidalinima' - - 'shear - Apsaugo nuo aviu nukirpimo' - - 'pigsaddle - Apsaugo nuo balno uzdejimo ant kiaules' - - 'trade - Apsaugo nuo prekybos su kaimieciais' - - 'day - Diena visa laika' - - 'night - Naktis visa laika' - - 'weather - Lija visa laika' list: Description: Rezidenciju sarasas Info: diff --git a/src/Language/Spanish.yml b/src/Language/Spanish.yml index 05b9cd88a..938f7865b 100644 --- a/src/Language/Spanish.yml +++ b/src/Language/Spanish.yml @@ -488,44 +488,6 @@ CommandHelp: Description: List of flags Info: - Para estos flags, normalmente, true autoriza la acción y false la denega. - - build - autoriza o denega construcción - - use - autoriza o denega el uso de puertas, botones, palancas, etc. - - move - autoriza o denega movimiento - - container - autoriza o denega el uso de cofres, hornos, dispensadores, etc. - - trusted - Gives build, use, move, container and tp flags - - place - autoriza o denega plazamiento de bloques, anula el flag build - - destroy - autoriza o denega destrucción de bloques, anula el flag build - - pvp - autoriza o denega PvP (combate jugador contra jugador) - - tp - autoriza o denega teletransportación - - admin - autoriza o denega el cambio de flags para un jugador - - subzone - autoriza o denega a un jugador a crear subzonas - - monsters - autoriza o denega apariciones de monstruos - - animals - autoriza o denega apariciones de animales - - healing - establecer esto a true dará vida a los jugadores en la residencia - - tnt - autoriza o denega explosiones de TNT - - creeper - autoriza o denega explosiones de creepers - - ignite - autoriza o denega encender fuegos - - firespread - autoriza o denega la propagación del fuego - - bucket - autoriza o denega el uso de cubos - - flow - autoriza o denega corriente de líquidos - - lavaflow - autoriza o denega corriente de lava, anula el flag flow - - waterflow - autoriza o denega corriente de agua, anula el flag flow - - damage - autoriza o denega el daño de entidades - - piston - autoriza o denega empujamiento y retracción de bloques por pistones - - hidden - oculta la residencia de listas - - cake - autoriza o denega el poder comer tartas - - lever - autoriza o denega el uso de palancas - - button - autoriza o denegael uso de botones - - diode - autoriza o denega el uso de repeaters - - door - autoriza o denega el uso de puertas - - table - autoriza o denega el uso de mesas de crafteo - - enchant - autoriza o denega el uso de mesas de encantamiento - - brew - autoriza o denega el poder hacer pociones - - bed - autoriza o denega el uso de camas - - pressure - autoriza o denega el uso de placas de presión - - note - autoriza o denega el uso de bloques de notas - - redstone - Pone las banderas de redstone - - craft - Pone las bandera de crafteo list: Description: Listear residencias Info: diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 3a50d795e..2098effe9 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -9,7 +9,6 @@ import org.bukkit.Location; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.ParticleEffects; import java.io.BufferedReader; @@ -267,10 +266,7 @@ void UpdateFlagFile() { YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); Set sections = conf.getConfigurationSection("Global.FlagPermission").getKeys(false); - int i = 0; for (String one : Locale.FlagList) { - i++; - Debug.D(i + ". " + one); if (sections.contains(one.toLowerCase())) continue; conf.createSection("Global.FlagPermission." + one.toLowerCase()); diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 28e300dd6..399324ba0 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -11,9 +11,11 @@ import java.util.Arrays; import java.util.List; import java.util.Set; - +import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.Configuration; +import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; public class Locale { @@ -55,6 +57,21 @@ public static String Colors(String text) { return ChatColor.translateAlternateColorCodes('&', text); } + private static YamlConfiguration loadConfiguration(BufferedReader in, String language) { + Validate.notNull(in, "File cannot be null"); + YamlConfiguration config = new YamlConfiguration(); + try { + config.load(in); + } catch (FileNotFoundException ex) { + } catch (IOException ex) { + } catch (InvalidConfigurationException ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[Residence] Your locale file for " + language + " is incorect! Use http://yaml-online-parser.appspot.com/ to find issue."); + return null; + } + + return config; + } + // Language file public static void LoadLang(String lang) { @@ -70,7 +87,12 @@ public static void LoadLang(String lang) { if (in == null) return; - YamlConfiguration conf = YamlConfiguration.loadConfiguration(in); + YamlConfiguration conf = loadConfiguration(in, lang); + + if (conf == null) { + return; + } + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); conf.options().copyDefaults(true); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 4810c70b5..5335e31ab 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -249,16 +249,19 @@ public void onEnable() { dataFolder.mkdirs(); } - if (!new File(dataFolder, "groups.yml").isFile() && new File(dataFolder, "config.yml").isFile()) { - this.ConvertGroupFile(); + if (!new File(dataFolder, "groups.yml").isFile() && !new File(dataFolder, "flags.yml").isFile() && new File(dataFolder, "config.yml").isFile()) { + this.ConvertFile(); } if (!new File(dataFolder, "config.yml").isFile()) { this.writeDefaultConfigFromJar(); - this.writeDefaultGroupsFromJar(); + } + if (!new File(dataFolder, "flags.yml").isFile()) { this.writeDefaultFlagsFromJar(); } - + if (!new File(dataFolder, "groups.yml").isFile()) { + this.writeDefaultGroupsFromJar(); + } this.getCommand("res").setTabCompleter(new TabComplete()); this.getCommand("resadmin").setTabCompleter(new TabComplete()); this.getCommand("residence").setTabCompleter(new TabComplete()); @@ -346,7 +349,7 @@ public void onEnable() { for (String lang : validLanguages) { Locale.LoadLang(lang); } - + Residence.getConfigManager().UpdateFlagFile(); NewLanguage.LanguageReload(); @@ -954,7 +957,7 @@ private void writeDefaultFlagsFromJar() { } } - private void ConvertGroupFile() { + private void ConvertFile() { File file = new File(this.getDataFolder(), "config.yml"); File file_old = new File(this.getDataFolder(), "config_old.yml"); diff --git a/src/plugin.yml b/src/plugin.yml index 79633abf6..1bb5a239a 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.9.4 +version: 2.9.10.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 42e655c4aa99c166b254d804edfd90ab6c1b881d Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 14 Nov 2015 13:23:54 +0200 Subject: [PATCH 0094/1142] One more fix when locale file is incorrect so we need to use English --- .../bekvon/bukkit/residence/Residence.java | 27 ++- src/com/bekvon/bukkit/residence/YmlMaker.java | 204 ++++++++++-------- 2 files changed, 137 insertions(+), 94 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 5335e31ab..a4d10f010 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -30,6 +30,7 @@ import org.bukkit.Server; import org.bukkit.World; import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; @@ -376,10 +377,28 @@ public void onEnable() { System.out.println("[Residence] Language file does not exist..."); } } catch (Exception ex) { - System.out.println("[Residence] Failed to load language file: " + cmanager.getLanguage() + ".yml, Error: " + ex.getMessage()); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - helppages = new HelpEntry(""); - language = new Language(); + System.out.println("[Residence] Failed to load language file: " + cmanager.getLanguage() + ".yml setting to default - English"); + + File langFile = new File(new File(dataFolder, "Language"), "English.yml"); + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + if (langFile.isFile()) { + FileConfiguration langconfig = new YamlConfiguration(); + langconfig.load(in); + helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); + InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); + language = Language.parseText(langconfig, "Language"); + } else { + System.out.println("[Residence] Language file does not exist..."); + } } economy = null; if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { diff --git a/src/com/bekvon/bukkit/residence/YmlMaker.java b/src/com/bekvon/bukkit/residence/YmlMaker.java index 5e5cf2626..0a56be57d 100644 --- a/src/com/bekvon/bukkit/residence/YmlMaker.java +++ b/src/com/bekvon/bukkit/residence/YmlMaker.java @@ -1,90 +1,114 @@ -package com.bekvon.bukkit.residence; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.util.logging.Level; - -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.plugin.java.JavaPlugin; - -public class YmlMaker -{ - Residence Plugin; - public String fileName; - private JavaPlugin plugin; - public File ConfigFile; - private FileConfiguration Configuration; - - public YmlMaker(Residence Plugin) - { - this.Plugin = Plugin; - } - - public YmlMaker(JavaPlugin plugin, String fileName) - { - if (plugin == null) { - throw new IllegalArgumentException("plugin cannot be null"); - } - this.plugin = plugin; - this.fileName = fileName; - File dataFolder = plugin.getDataFolder(); - if (dataFolder == null) { - throw new IllegalStateException(); - } - this.ConfigFile = new File(dataFolder.toString() + File.separatorChar + this.fileName); - } - - public void reloadConfig() - { - try { - this.Configuration = YamlConfiguration.loadConfiguration(new InputStreamReader(new FileInputStream(this.ConfigFile), "UTF-8")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - - InputStream defConfigStream = this.plugin.getResource(this.fileName); - if (defConfigStream != null) - { - @SuppressWarnings("deprecation") - YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream); - this.Configuration.setDefaults(defConfig); - } - } - - public FileConfiguration getConfig() - { - if (this.Configuration == null) { - reloadConfig(); - } - return this.Configuration; - } - - public void saveConfig() - { - if ((this.Configuration == null) || (this.ConfigFile == null)) { - return; - } - try - { - getConfig().save(this.ConfigFile); - } catch (IOException ex) - { - this.plugin.getLogger().log(Level.SEVERE, "Could not save config to " + this.ConfigFile, ex); - } - } - - public void saveDefaultConfig() - { - if (!this.ConfigFile.exists()) { - this.plugin.saveResource(this.fileName, false); - } - } -} +package com.bekvon.bukkit.residence; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.util.logging.Level; + +import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +public class YmlMaker { + Residence Plugin; + public String fileName; + private JavaPlugin plugin; + public File ConfigFile; + private FileConfiguration Configuration; + + public YmlMaker(Residence Plugin) { + this.Plugin = Plugin; + } + + public YmlMaker(JavaPlugin plugin, String fileName) { + if (plugin == null) { + throw new IllegalArgumentException("plugin cannot be null"); + } + this.plugin = plugin; + this.fileName = fileName; + File dataFolder = plugin.getDataFolder(); + if (dataFolder == null) { + throw new IllegalStateException(); + } + this.ConfigFile = new File(dataFolder.toString() + File.separatorChar + this.fileName); + } + + private static YamlConfiguration loadConfiguration(InputStreamReader inputStreamReader) { + Validate.notNull(inputStreamReader, "File cannot be null"); + YamlConfiguration config = new YamlConfiguration(); + try { + config.load(inputStreamReader); + } catch (FileNotFoundException ex) { + } catch (IOException ex) { + } catch (InvalidConfigurationException ex) { + return null; + } + return config; + } + + private static YamlConfiguration loadConfiguration(InputStream defConfigStream) { + Validate.notNull(defConfigStream, "File cannot be null"); + YamlConfiguration config = new YamlConfiguration(); + try { + config.load(defConfigStream); + } catch (FileNotFoundException ex) { + } catch (IOException ex) { + } catch (InvalidConfigurationException ex) { + return null; + } + return config; + } + + public void reloadConfig() { + try { + this.Configuration = loadConfiguration(new InputStreamReader(new FileInputStream(this.ConfigFile), "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + if (Configuration == null) + return; + + InputStream defConfigStream = this.plugin.getResource(this.fileName); + if (defConfigStream != null) { + YamlConfiguration defConfig = loadConfiguration(defConfigStream); + if (defConfig != null) + this.Configuration.setDefaults(defConfig); + } + } + + public FileConfiguration getConfig() { + if (this.Configuration == null) { + reloadConfig(); + } + return this.Configuration; + } + + public void saveConfig() { + if ((this.Configuration == null) || (this.ConfigFile == null)) { + return; + } + try { + getConfig().save(this.ConfigFile); + } catch (IOException ex) { + this.plugin.getLogger().log(Level.SEVERE, "Could not save config to " + this.ConfigFile, ex); + } + } + + public void saveDefaultConfig() { + if (!this.ConfigFile.exists()) { + this.plugin.saveResource(this.fileName, false); + } + } +} From bb5f4dcb45a0047945ec2e97c708647aed13d029 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 14 Nov 2015 17:41:28 +0200 Subject: [PATCH 0095/1142] Added additional locale for "no votes" / small fix for residence votes --- src/com/bekvon/bukkit/residence/Locale.java | 1 + .../bekvon/bukkit/residence/Residence.java | 1 - .../residence/ResidenceCommandListener.java | 19 ++++++++++++------- src/com/bekvon/bukkit/residence/YmlMaker.java | 4 +--- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 399324ba0..56bb02d18 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -447,6 +447,7 @@ public static void LoadLang(String lang) { GetConfig("Language.Shop.InvalidSelection", "&cLeft click with selection tool top left sign and then right click bottom right", writer, conf, true); GetConfig("Language.Shop.VoteChanged", "&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence", writer, conf, true); GetConfig("Language.Shop.Voted", "&6You voted, and gave &e%1 &6votes to &e%2 &6residence", writer, conf, true); + GetConfig("Language.Shop.NoVotes", "&cThere is no registered votes for this residence", writer, conf, true); GetConfig("Language.Shop.CantVote", "&cResidence don't have shop flag set to true", writer, conf, true); GetConfig("Language.Shop.VotedRange", "&6Vote range is from &e%1 &6to &e%2", writer, conf, true); GetConfig("Language.Shop.SignLines.1", "&e--== &8%1 &e==--", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index a4d10f010..66167447e 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -30,7 +30,6 @@ import org.bukkit.Server; import org.bukkit.World; import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 1e0aac1ca..237260c16 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -617,16 +617,16 @@ public void run() { if (res == null) { try { VotePage = Integer.parseInt(args[2]); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(language.getPhrase("NotInResidence")); + return true; + } } catch (Exception ex) { player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); return true; } } - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(language.getPhrase("NotInResidence")); - return true; - } } else if (args.length == 4) { res = Residence.getResidenceManager().getByName(args[2]); @@ -642,6 +642,11 @@ public void run() { } } + if (res == null) { + player.sendMessage(language.getPhrase("NotInResidence")); + return true; + } + Map> ShopList = ShopSignUtil.GetAllVoteList(); List VoteList = new ArrayList(); @@ -656,7 +661,7 @@ public void run() { } int pagecount = (int) Math.ceil((double) VoteList.size() / (double) 10); if (page > pagecount || page < 1) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); + sender.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Shop.NoVotes")); return true; } @@ -729,7 +734,7 @@ public void run() { } int pagecount = (int) Math.ceil((double) ShopList.size() / (double) 10); if (page > pagecount || page < 1) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); + sender.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Shop.NoVotes")); return true; } diff --git a/src/com/bekvon/bukkit/residence/YmlMaker.java b/src/com/bekvon/bukkit/residence/YmlMaker.java index 0a56be57d..608668c60 100644 --- a/src/com/bekvon/bukkit/residence/YmlMaker.java +++ b/src/com/bekvon/bukkit/residence/YmlMaker.java @@ -1,6 +1,5 @@ package com.bekvon.bukkit.residence; -import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -11,8 +10,6 @@ import java.util.logging.Level; import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -55,6 +52,7 @@ private static YamlConfiguration loadConfiguration(InputStreamReader inputStream return config; } + @SuppressWarnings("deprecation") private static YamlConfiguration loadConfiguration(InputStream defConfigStream) { Validate.notNull(defConfigStream, "File cannot be null"); YamlConfiguration config = new YamlConfiguration(); From 18c6fa86879b8189fc89d1ba97be0b5666af7f78 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 17 Nov 2015 15:55:52 +0200 Subject: [PATCH 0096/1142] Added configurable flag groups / Name and UUID support --- .../bukkit/residence/ConfigManager.java | 292 ++++++++++-------- src/com/bekvon/bukkit/residence/Locale.java | 4 + .../bekvon/bukkit/residence/NewLanguage.java | 4 + .../bekvon/bukkit/residence/Residence.java | 4 +- .../residence/ResidenceCommandListener.java | 89 ++++-- .../bekvon/bukkit/residence/gui/FlagUtil.java | 4 +- .../residence/protection/FlagPermissions.java | 197 +++++++----- .../protection/ResidenceManager.java | 14 +- .../protection/ResidencePermissions.java | 13 +- .../residence/shopStuff/ShopListener.java | 22 +- .../residence/shopStuff/ShopSignUtil.java | 90 ++++-- .../bukkit/residence/shopStuff/Shops.java | 16 - src/flags.yml | 28 ++ 13 files changed, 495 insertions(+), 282 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/shopStuff/Shops.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 2098effe9..a65adf720 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -1,7 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.bekvon.bukkit.residence; import org.bukkit.Bukkit; @@ -62,6 +58,7 @@ public class ConfigManager { protected boolean enableRentSystem; protected boolean leaseAutoRenew; protected boolean ShortInfoUse; + protected boolean OnlyLike; protected int rentCheckInterval; protected int chatPrefixLength; protected int leaseCheckInterval; @@ -120,6 +117,7 @@ public class ConfigManager { protected boolean enableDebug = false; protected boolean versionCheck = true; protected boolean UUIDConvertion = true; + protected boolean OfflineMode = false; protected boolean SelectionIgnoreY = false; protected boolean NoCostForYBlocks = false; protected boolean useVisualizer; @@ -200,34 +198,34 @@ public void ChangeConfig(String path, Boolean stage) { Residence.getConfigManager().UpdateConfigFile(); } - public static List GetConfigIntArray(String path, List list, CommentedYamlConfiguration writer, YamlConfiguration conf) { + public static List GetConfig(String path, List list, CommentedYamlConfiguration writer, YamlConfiguration conf) { conf.addDefault(path, list); copySetting(conf, writer, path); return conf.getIntegerList(path); } - public static Boolean GetConfigBoolean(String path, Boolean text, CommentedYamlConfiguration writer, YamlConfiguration conf) { + public static Boolean GetConfig(String path, Boolean text, CommentedYamlConfiguration writer, YamlConfiguration conf) { conf.addDefault(path, text); text = conf.getBoolean(path); copySetting(conf, writer, path); return text; } - public static int GetConfigInt(String path, int text, CommentedYamlConfiguration writer, YamlConfiguration conf) { + public static int GetConfig(String path, int text, CommentedYamlConfiguration writer, YamlConfiguration conf) { conf.addDefault(path, text); text = conf.getInt(path); copySetting(conf, writer, path); return text; } - public static Double GetConfigDouble(String path, Double text, CommentedYamlConfiguration writer, YamlConfiguration conf) { + public static Double GetConfig(String path, Double text, CommentedYamlConfiguration writer, YamlConfiguration conf) { conf.addDefault(path, text); text = conf.getDouble(path); copySetting(conf, writer, path); return text; } - public static String GetConfigString(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + public static String GetConfig(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { conf.addDefault(path, text); text = conf.getString(path); if (colorize) @@ -236,14 +234,14 @@ public static String GetConfigString(String path, String text, CommentedYamlConf return text; } - public static List GetConfigArray(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + public static List GetConfig(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { conf.addDefault(path, text); text = ColorsArray(conf.getStringList(path), colorize); copySetting(conf, writer, path); return text; } - public static List GetConfigIntArray(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { + public static List GetConfigInt(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf) { conf.addDefault(path, text); text = conf.getIntegerList(path); copySetting(conf, writer, path); @@ -280,6 +278,33 @@ void UpdateFlagFile() { } } + public void UpdateGroupedFlagsFile() { + + File f = new File(Residence.instance.getDataFolder(), "flags.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + if (!conf.isConfigurationSection("Global.GroupedFlags")) { + conf.createSection("Global.GroupedFlags"); + conf.set("Global.GroupedFlags.redstone", Arrays.asList("note", "pressure", "lever", "button", "diode")); + conf.set("Global.GroupedFlags.craft", Arrays.asList("brew", "table", "enchant")); + conf.set("Global.GroupedFlags.trusted", Arrays.asList("use", "tp", "build", "container", "bucket", "move", "leash", "animalkilling", "mobkilling", "shear", + "chat")); + conf.set("Global.GroupedFlags.fire", Arrays.asList("ignite", "firespread")); + + try { + conf.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + } + + for (String oneGroup : conf.getConfigurationSection("Global.GroupedFlags").getKeys(false)) { + for (String OneFlag : conf.getStringList("Global.GroupedFlags." + oneGroup)) { + FlagPermissions.addFlagToFlagGroup(oneGroup, OneFlag); + } + } + } + @SuppressWarnings("deprecation") void UpdateConfigFile() { @@ -306,57 +331,61 @@ void UpdateConfigFile() { writer.addComment("Global", "These are Global Settings for Residence."); writer.addComment("Global.UUIDConvertion", "Starts UUID conversion on plugin startup", "DONT change this if you are not sure what you doing"); - UUIDConvertion = GetConfigBoolean("Global.UUIDConvertion", true, writer, conf); + UUIDConvertion = GetConfig("Global.UUIDConvertion", true, writer, conf); + + writer.addComment("Global.OfflineMode", + "If you running offline server, better to check this as true. This will help to solve issues with changing players UUID."); + OfflineMode = GetConfig("Global.OfflineMode", false, writer, conf); writer.addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); - versionCheck = GetConfigBoolean("Global.versionCheck", true, writer, conf); + versionCheck = GetConfig("Global.versionCheck", true, writer, conf); writer.addComment("Global.Language", "This loads the .yml file in the Residence Language folder", "All Residence text comes from this file. (NOT DONE YET)"); - language = GetConfigString("Global.Language", "English", writer, conf, false); + language = GetConfig("Global.Language", "English", writer, conf, false); writer.addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); - selectionToolId = GetConfigInt("Global.SelectionToolId", Material.WOOD_AXE.getId(), writer, conf); + selectionToolId = GetConfig("Global.SelectionToolId", Material.WOOD_AXE.getId(), writer, conf); writer.addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); - SelectionIgnoreY = GetConfigBoolean("Global.Selection.IgnoreY", false, writer, conf); + SelectionIgnoreY = GetConfig("Global.Selection.IgnoreY", false, writer, conf); writer.addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", "This will lower residence price by up to 256 times, so ajust block price BEFORE enabling this"); - NoCostForYBlocks = GetConfigBoolean("Global.Selection.NoCostForYBlocks", false, writer, conf); + NoCostForYBlocks = GetConfig("Global.Selection.NoCostForYBlocks", false, writer, conf); writer.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", "Simply equip this tool and hit a location inside the residence and it will display the info for it."); - infoToolId = GetConfigInt("Global.InfoToolId", Material.STRING.getId(), writer, conf); + infoToolId = GetConfig("Global.InfoToolId", Material.STRING.getId(), writer, conf); writer.addComment("Global.Optimizations.DefaultWorld", "Name of your mein residence world. Usualy normal starting world 'World'. Capitalization essential"); - DefaultWorld = GetConfigString("Global.Optimizations.DefaultWorld", defaultWorldName, writer, conf, false); + DefaultWorld = GetConfig("Global.Optimizations.DefaultWorld", defaultWorldName, writer, conf, false); writer.addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxResCount = GetConfigInt("Global.Optimizations.MaxResCount", 30, writer, conf); + MaxResCount = GetConfig("Global.Optimizations.MaxResCount", 30, writer, conf); writer.addComment("Global.Optimizations.MaxRentCount", "Set this as low as posible depending of residence.max.rents.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxRentCount = GetConfigInt("Global.Optimizations.MaxRentCount", 10, writer, conf); + MaxRentCount = GetConfig("Global.Optimizations.MaxRentCount", 10, writer, conf); writer.addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxSubzonesCount = GetConfigInt("Global.Optimizations.MaxSubzoneCount", 5, writer, conf); + MaxSubzonesCount = GetConfig("Global.Optimizations.MaxSubzoneCount", 5, writer, conf); writer.addComment("Global.Optimizations.OverridePvp", "By setting this to true, regular pvp flag will be acting as overridepvp flag", "Overridepvp flag tries to ignore any pvp protection in that residence by any other plugin"); - OverridePvp = GetConfigBoolean("Global.Optimizations.OverridePvp", false, writer, conf); + OverridePvp = GetConfig("Global.Optimizations.OverridePvp", false, writer, conf); // residence kick location writer.addComment("Global.Optimizations.KickLocation.Use", "By setting this to true, when player kicks another player from residence, he will be teleported to this location instead of getting outside residence"); - Boolean UseKick = GetConfigBoolean("Global.Optimizations.KickLocation.Use", false, writer, conf); - String KickLocationWorld = GetConfigString("Global.Optimizations.KickLocation.World", defaultWorldName, writer, conf, false); - Double KickLocationX = GetConfigDouble("Global.Optimizations.KickLocation.X", 0.5, writer, conf); - Double KickLocationY = GetConfigDouble("Global.Optimizations.KickLocation.Y", 63.0, writer, conf); - Double KickLocationZ = GetConfigDouble("Global.Optimizations.KickLocation.Z", 0.5, writer, conf); + Boolean UseKick = GetConfig("Global.Optimizations.KickLocation.Use", false, writer, conf); + String KickLocationWorld = GetConfig("Global.Optimizations.KickLocation.World", defaultWorldName, writer, conf, false); + Double KickLocationX = GetConfig("Global.Optimizations.KickLocation.X", 0.5, writer, conf); + Double KickLocationY = GetConfig("Global.Optimizations.KickLocation.Y", 63.0, writer, conf); + Double KickLocationZ = GetConfig("Global.Optimizations.KickLocation.Z", 0.5, writer, conf); writer.addComment("Global.Optimizations.KickLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); - Double KickPitch = GetConfigDouble("Global.Optimizations.KickLocation.Pitch", 0.0, writer, conf); + Double KickPitch = GetConfig("Global.Optimizations.KickLocation.Pitch", 0.0, writer, conf); writer.addComment("Global.Optimizations.KickLocation.Yaw", "Head position to left and right. Range from -180 to 180"); - Double KickYaw = GetConfigDouble("Global.Optimizations.KickLocation.Yaw", 0.0, writer, conf); + Double KickYaw = GetConfig("Global.Optimizations.KickLocation.Yaw", 0.0, writer, conf); if (UseKick) { World world = Bukkit.getWorld(KickLocationWorld); if (world != null) { @@ -368,38 +397,41 @@ void UpdateConfigFile() { writer.addComment("Global.Optimizations.ShortInfo.Use", "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); - ShortInfoUse = GetConfigBoolean("Global.Optimizations.ShortInfo.Use", false, writer, conf); + ShortInfoUse = GetConfig("Global.Optimizations.ShortInfo.Use", false, writer, conf); // Vote range writer.addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); - VoteRangeFrom = GetConfigInt("Global.Optimizations.Vote.RangeFrom", 0, writer, conf); - VoteRangeTo = GetConfigInt("Global.Optimizations.Vote.RangeTo", 10, writer, conf); + VoteRangeFrom = GetConfig("Global.Optimizations.Vote.RangeFrom", 0, writer, conf); + VoteRangeTo = GetConfig("Global.Optimizations.Vote.RangeTo", 10, writer, conf); + + writer.addComment("Global.Optimizations.Vote.OnlyLike", "If this true, players can onli give like for shop instead of point voting"); + OnlyLike = GetConfig("Global.Optimizations.Vote.OnlyLike", false, writer, conf); // Healing/Feed interval writer.addComment("Global.Optimizations.Intervals.Heal", "How often in seconds to heal/feed players in residence with appropriate flag", "Bigger numbers can save some resources"); - HealInterval = GetConfigInt("Global.Optimizations.Intervals.Heal", 1, writer, conf); - FeedInterval = GetConfigInt("Global.Optimizations.Intervals.Feed", 5, writer, conf); + HealInterval = GetConfig("Global.Optimizations.Intervals.Heal", 1, writer, conf); + FeedInterval = GetConfig("Global.Optimizations.Intervals.Feed", 5, writer, conf); writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); - minMoveUpdate = GetConfigInt("Global.MoveCheckInterval", 500, writer, conf); + minMoveUpdate = GetConfig("Global.MoveCheckInterval", 500, writer, conf); writer.addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); - TeleportDelay = GetConfigInt("Global.Tp.TeleportDelay", 3, writer, conf); + TeleportDelay = GetConfig("Global.Tp.TeleportDelay", 3, writer, conf); writer.addComment("Global.RandomTeleportation.MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); - rtMaxCoord = GetConfigInt("Global.RandomTeleportation.MaxCoord", 1000, writer, conf); + rtMaxCoord = GetConfig("Global.RandomTeleportation.MaxCoord", 1000, writer, conf); writer.addComment("Global.RandomTeleportation.MinCoord", "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); - rtMinCoord = GetConfigInt("Global.RandomTeleportation.MinCoord", 500, writer, conf); + rtMinCoord = GetConfig("Global.RandomTeleportation.MinCoord", 500, writer, conf); writer.addComment("Global.RandomTeleportation.WorldName", "World to use this function, set main residence world"); - String rtWorld = GetConfigString("Global.RandomTeleportation.WorldName", defaultWorldName, writer, conf, false); + String rtWorld = GetConfig("Global.RandomTeleportation.WorldName", defaultWorldName, writer, conf, false); - int rtCenterX = GetConfigInt("Global.RandomTeleportation.CenterX", 0, writer, conf); - int rtCenterZ = GetConfigInt("Global.RandomTeleportation.CenterZ", 0, writer, conf); + int rtCenterX = GetConfig("Global.RandomTeleportation.CenterX", 0, writer, conf); + int rtCenterZ = GetConfig("Global.RandomTeleportation.CenterZ", 0, writer, conf); World world = Bukkit.getWorld(rtWorld); rtCenter = new Location(Bukkit.getWorlds().get(0), 0, 63, 0); @@ -407,196 +439,196 @@ void UpdateConfigFile() { rtCenter = new Location(world, rtCenterX, 63, rtCenterZ); writer.addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); - rtCooldown = GetConfigInt("Global.RandomTeleportation.Cooldown", 5, writer, conf); + rtCooldown = GetConfig("Global.RandomTeleportation.Cooldown", 5, writer, conf); writer.addComment("Global.RandomTeleportation.MaxTries", "How many times to try find correct location for teleportation.", "Keep it at low number, as player always can try again after delay"); - rtMaxTries = GetConfigInt("Global.RandomTeleportation.MaxTries", 20, writer, conf); + rtMaxTries = GetConfig("Global.RandomTeleportation.MaxTries", 20, writer, conf); writer.addComment("Global.Size.MinimalSize", "Minimal size of residence in blocks", "1000 is 10x10x10 residence size"); - MinimalResSize = GetConfigInt("Global.Size.MinimalSize", 100, writer, conf); - MinimalResX = GetConfigInt("Global.Size.MinimalX", 10, writer, conf); - MinimalResY = GetConfigInt("Global.Size.MinimalY", 10, writer, conf); - MinimalResZ = GetConfigInt("Global.Size.MinimalZ", 10, writer, conf); + MinimalResSize = GetConfig("Global.Size.MinimalSize", 100, writer, conf); + MinimalResX = GetConfig("Global.Size.MinimalX", 10, writer, conf); + MinimalResY = GetConfig("Global.Size.MinimalY", 10, writer, conf); + MinimalResZ = GetConfig("Global.Size.MinimalZ", 10, writer, conf); writer.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); - autoSaveInt = GetConfigInt("Global.SaveInterval", 10, writer, conf); + autoSaveInt = GetConfig("Global.SaveInterval", 10, writer, conf); writer.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", "Players can bypass this wih residence.cleanbypass permission node"); - AutoCleanUp = GetConfigBoolean("Global.AutoCleanUp.Use", false, writer, conf); + AutoCleanUp = GetConfig("Global.AutoCleanUp.Use", false, writer, conf); writer.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); - AutoCleanUpDays = GetConfigInt("Global.AutoCleanUp.Days", 60, writer, conf); + AutoCleanUpDays = GetConfig("Global.AutoCleanUp.Days", 60, writer, conf); writer.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); - AutoCleanUpWorlds = GetConfigArray("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + AutoCleanUpWorlds = GetConfig("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); // Flow writer.addComment("Global.AntiGreef.Flow.Level", "Level from witch one to start lava and water flow blocking", "This dont have effect in residence area"); - FlowLevel = GetConfigInt("Global.AntiGreef.Flow.Level", 63, writer, conf); + FlowLevel = GetConfig("Global.AntiGreef.Flow.Level", 63, writer, conf); writer.addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); - NoLava = GetConfigBoolean("Global.AntiGreef.Flow.NoLavaFlow", true, writer, conf); + NoLava = GetConfig("Global.AntiGreef.Flow.NoLavaFlow", true, writer, conf); writer.addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); - NoWater = GetConfigBoolean("Global.AntiGreef.Flow.NoWaterFlow", true, writer, conf); - NoFlowWorlds = GetConfigArray("Global.AntiGreef.Flow.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + NoWater = GetConfig("Global.AntiGreef.Flow.NoWaterFlow", true, writer, conf); + NoFlowWorlds = GetConfig("Global.AntiGreef.Flow.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); // Place writer.addComment("Global.AntiGreef.Place.Level", "Level from witch one to start block lava and water place", "This don't have effect in residence area"); - PlaceLevel = GetConfigInt("Global.AntiGreef.Place.Level", 63, writer, conf); + PlaceLevel = GetConfig("Global.AntiGreef.Place.Level", 63, writer, conf); writer.addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); - NoLavaPlace = GetConfigBoolean("Global.AntiGreef.Place.NoLavaPlace", true, writer, conf); + NoLavaPlace = GetConfig("Global.AntiGreef.Place.NoLavaPlace", true, writer, conf); writer.addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, playrs cant place water outside residence"); - NoWaterPlace = GetConfigBoolean("Global.AntiGreef.Place.NoWaterPlace", true, writer, conf); - NoPlaceWorlds = GetConfigArray("Global.AntiGreef.Place.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + NoWaterPlace = GetConfig("Global.AntiGreef.Place.NoWaterPlace", true, writer, conf); + NoPlaceWorlds = GetConfig("Global.AntiGreef.Place.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); // Sand fall writer.addComment("Global.AntiGreef.BlockFall.Use", "With this set to true, falling blocks will be deleted if they will land in different area"); - useBlockFall = GetConfigBoolean("Global.AntiGreef.BlockFall.Use", true, writer, conf); + useBlockFall = GetConfig("Global.AntiGreef.BlockFall.Use", true, writer, conf); writer.addComment("Global.AntiGreef.BlockFall.Level", "Level from witch one to start block block's fall", "This don't have effect in residence area or outside"); - BlockFallLevel = GetConfigInt("Global.AntiGreef.BlockFall.Level", 62, writer, conf); - BlockFallWorlds = GetConfigArray("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + BlockFallLevel = GetConfig("Global.AntiGreef.BlockFall.Level", 62, writer, conf); + BlockFallWorlds = GetConfig("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); // Res cleaning writer.addComment("Global.AntiGreef.ResCleaning.Use", "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", "Effective way to prevent residence creating near greefing target and then remove it"); - UseClean = GetConfigBoolean("Global.AntiGreef.ResCleaning.Use", true, writer, conf); + UseClean = GetConfig("Global.AntiGreef.ResCleaning.Use", true, writer, conf); writer.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); - CleanLevel = GetConfigInt("Global.AntiGreef.ResCleaning.Level", 63, writer, conf); + CleanLevel = GetConfig("Global.AntiGreef.ResCleaning.Level", 63, writer, conf); writer.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); - CleanBlocks = GetConfigIntArray("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11), writer, conf); - CleanWorlds = GetConfigArray("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + CleanBlocks = GetConfigInt("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11), writer, conf); + CleanWorlds = GetConfig("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); writer.addComment("Global.AntiGreef.Flags.Prevent", "By setting this to true flags from list will be protected from change while there is some one inside residence besides owner", "Protects in example from people inviting some one and changing pvp flag to true to kill them"); - PvPFlagPrevent = GetConfigBoolean("Global.AntiGreef.Flags.Prevent", true, writer, conf); - FlagsList = GetConfigArray("Global.AntiGreef.Flags.list", Arrays.asList("pvp"), writer, conf, false); + PvPFlagPrevent = GetConfig("Global.AntiGreef.Flags.Prevent", true, writer, conf); + FlagsList = GetConfig("Global.AntiGreef.Flags.list", Arrays.asList("pvp"), writer, conf, false); writer.addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); - defaultGroup = GetConfigString("Global.DefaultGroup", "default", writer, conf, false); + defaultGroup = GetConfig("Global.DefaultGroup", "default", writer, conf, false); writer.addComment("Global.UseLeaseSystem", "Enable / Disable the Lease System."); - useLeases = GetConfigBoolean("Global.UseLeaseSystem", false, writer, conf); + useLeases = GetConfig("Global.UseLeaseSystem", false, writer, conf); writer.addComment("Global.DateFormat", "Sets date format when shown in example lease or rent expire date", "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); - DateFormat = GetConfigString("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz", writer, conf, false); + DateFormat = GetConfig("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz", writer, conf, false); writer.addComment("Global.TimeZone", "Sets time zone for showing date, usefull when server is in different country then main server player base", "Full list of posible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); - TimeZone = GetConfigString("Global.TimeZone", Calendar.getInstance().getTimeZone().getID(), writer, conf, false); + TimeZone = GetConfig("Global.TimeZone", Calendar.getInstance().getTimeZone().getID(), writer, conf, false); writer.addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); - ResMoneyBack = GetConfigBoolean("Global.ResMoneyBack", false, writer, conf); + ResMoneyBack = GetConfig("Global.ResMoneyBack", false, writer, conf); writer.addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); - leaseCheckInterval = GetConfigInt("Global.LeaseCheckInterval", 10, writer, conf); + leaseCheckInterval = GetConfig("Global.LeaseCheckInterval", 10, writer, conf); writer.addComment("Global.LeaseAutoRenew", "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); - leaseAutoRenew = GetConfigBoolean("Global.LeaseAutoRenew", true, writer, conf); + leaseAutoRenew = GetConfig("Global.LeaseAutoRenew", true, writer, conf); writer.addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); - GetConfigBoolean("Global.EnablePermissions", true, writer, conf); + GetConfig("Global.EnablePermissions", true, writer, conf); writer.addComment("Global.LegacyPermissions", "Set to true if NOT using Permissions or PermissionsBukkit, or using a really old version of Permissions"); - legacyperms = GetConfigBoolean("Global.LegacyPermissions", false, writer, conf); + legacyperms = GetConfig("Global.LegacyPermissions", false, writer, conf); writer.addComment("Global.EnableEconomy", "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); - enableEconomy = GetConfigBoolean("Global.EnableEconomy", true, writer, conf); + enableEconomy = GetConfig("Global.EnableEconomy", true, writer, conf); writer.addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); - enableRentSystem = GetConfigBoolean("Global.EnableRentSystem", true, writer, conf); + enableRentSystem = GetConfig("Global.EnableRentSystem", true, writer, conf); writer.addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); - rentCheckInterval = GetConfigInt("Global.RentCheckInterval", 10, writer, conf); + rentCheckInterval = GetConfig("Global.RentCheckInterval", 10, writer, conf); writer.addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); - chatEnable = GetConfigBoolean("Global.ResidenceChatEnable", true, writer, conf); + chatEnable = GetConfig("Global.ResidenceChatEnable", true, writer, conf); writer.addComment("Global.ActionBar.General", "True for ActionBar - new component in 1.8", "False for old Messaging in chat enter/leave Residence messages"); - actionBar = GetConfigBoolean("Global.ActionBar.General", true, writer, conf); - ActionBarOnSelection = GetConfigBoolean("Global.ActionBar.ShowOnSelection", true, writer, conf); + actionBar = GetConfig("Global.ActionBar.General", true, writer, conf); + ActionBarOnSelection = GetConfig("Global.ActionBar.ShowOnSelection", true, writer, conf); writer.addComment("Global.ResidenceChatColor", "Color of residence chat."); try { - chatColor = ChatColor.valueOf(GetConfigString("Global.ResidenceChatColor", "DARK_PURPLE", writer, conf, true)); + chatColor = ChatColor.valueOf(GetConfig("Global.ResidenceChatColor", "DARK_PURPLE", writer, conf, true)); } catch (Exception ex) { chatColor = ChatColor.DARK_PURPLE; } writer.addComment("Global.ResidenceChatPrefixLenght", "Max lenght of residence chat prefix including color codes"); - chatPrefixLength = GetConfigInt("Global.ResidenceChatPrefixLength", 16, writer, conf); + chatPrefixLength = GetConfig("Global.ResidenceChatPrefixLength", 16, writer, conf); writer.addComment("Global.AdminOnlyCommands", "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); - adminsOnly = GetConfigBoolean("Global.AdminOnlyCommands", false, writer, conf); + adminsOnly = GetConfig("Global.AdminOnlyCommands", false, writer, conf); writer.addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); - adminOps = GetConfigBoolean("Global.AdminOPs", true, writer, conf); + adminOps = GetConfig("Global.AdminOPs", true, writer, conf); writer.addComment("Global.AdminFullAccess", "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); - AdminFullAccess = GetConfigBoolean("Global.AdminFullAccess", false, writer, conf); + AdminFullAccess = GetConfig("Global.AdminFullAccess", false, writer, conf); writer.addComment("Global.MultiWorldPlugin", "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); - multiworldPlugin = GetConfigString("Global.MultiWorldPlugin", "Multiverse-Core", writer, conf, false); + multiworldPlugin = GetConfig("Global.MultiWorldPlugin", "Multiverse-Core", writer, conf, false); writer.addComment("Global.ResidenceFlagsInherit", "Setting this to true causes subzones to inherit flags from their parent zones."); - flagsInherit = GetConfigBoolean("Global.ResidenceFlagsInherit", true, writer, conf); + flagsInherit = GetConfig("Global.ResidenceFlagsInherit", true, writer, conf); writer.addComment("Global.PreventRentModify", "Setting this to false will allow rented residences to be modified by the renting player."); - preventBuildInRent = GetConfigBoolean("Global.PreventRentModify", true, writer, conf); + preventBuildInRent = GetConfig("Global.PreventRentModify", true, writer, conf); writer.addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); - stopOnSaveError = GetConfigBoolean("Global.StopOnSaveFault", true, writer, conf); + stopOnSaveError = GetConfig("Global.StopOnSaveFault", true, writer, conf); writer.addComment( "This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); - namefix = GetConfigString("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]", writer, conf, false); + namefix = GetConfig("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]", writer, conf, false); writer.addComment("Global.ShowIntervalMessages", "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); - showIntervalMessages = GetConfigBoolean("Global.ShowIntervalMessages", false, writer, conf); + showIntervalMessages = GetConfig("Global.ShowIntervalMessages", false, writer, conf); writer.addComment("Global.ShowNoobMessage", "Setting this to true sends a tutorial message to the new player when he places chest on ground."); - ShowNoobMessage = GetConfigBoolean("Global.ShowNoobMessage", true, writer, conf); + ShowNoobMessage = GetConfig("Global.ShowNoobMessage", true, writer, conf); writer.addComment("Global.NewPlayer", "Setting this to true creates residence around players placed chest if he don't have any.", "Only once every server restart if he still don't have any residence"); - NewPlayerUse = GetConfigBoolean("Global.NewPlayer.Use", false, writer, conf); + NewPlayerUse = GetConfig("Global.NewPlayer.Use", false, writer, conf); writer.addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", "By setting to false, money will be taken from player, if he has them"); - NewPlayerFree = GetConfigBoolean("Global.NewPlayer.Free", true, writer, conf); + NewPlayerFree = GetConfig("Global.NewPlayer.Free", true, writer, conf); writer.addComment("Global.NewPlayer.Range", "Range from placed chest o both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide"); - NewPlayerRangeX = GetConfigInt("Global.NewPlayer.Range.X", 5, writer, conf); - NewPlayerRangeY = GetConfigInt("Global.NewPlayer.Range.Y", 5, writer, conf); - NewPlayerRangeZ = GetConfigInt("Global.NewPlayer.Range.Z", 5, writer, conf); + NewPlayerRangeX = GetConfig("Global.NewPlayer.Range.X", 5, writer, conf); + NewPlayerRangeY = GetConfig("Global.NewPlayer.Range.Y", 5, writer, conf); + NewPlayerRangeZ = GetConfig("Global.NewPlayer.Range.Z", 5, writer, conf); writer.addComment("Global.CustomContainers", "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); - customContainers = GetConfigIntArray("Global.CustomContainers", new ArrayList(), writer, conf); - customBothClick = GetConfigIntArray("Global.CustomBothClick", new ArrayList(), writer, conf); - customRightClick = GetConfigIntArray("Global.CustomRightClick", new ArrayList(), writer, conf); + customContainers = GetConfig("Global.CustomContainers", new ArrayList(), writer, conf); + customBothClick = GetConfig("Global.CustomBothClick", new ArrayList(), writer, conf); + customRightClick = GetConfig("Global.CustomRightClick", new ArrayList(), writer, conf); writer.addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundries"); - useVisualizer = GetConfigBoolean("Global.Visualizer.Use", true, writer, conf); + useVisualizer = GetConfig("Global.Visualizer.Use", true, writer, conf); writer.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", "Keep it no more as 30, as player cant see more than 16 blocks"); - VisualizerRange = GetConfigInt("Global.Visualizer.Range", 16, writer, conf); + VisualizerRange = GetConfig("Global.Visualizer.Range", 16, writer, conf); writer.addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); - VisualizerShowFor = GetConfigInt("Global.Visualizer.ShowFor", 5000, writer, conf); + VisualizerShowFor = GetConfig("Global.Visualizer.ShowFor", 5000, writer, conf); writer.addComment("Global.Visualizer.updateInterval", "How often in miliseconds update particles for player"); - VisualizerUpdateInterval = GetConfigInt("Global.Visualizer.updateInterval", 20, writer, conf); + VisualizerUpdateInterval = GetConfig("Global.Visualizer.updateInterval", 20, writer, conf); writer.addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); - VisualizerRowSpacing = GetConfigInt("Global.Visualizer.RowSpacing", 2, writer, conf); + VisualizerRowSpacing = GetConfig("Global.Visualizer.RowSpacing", 2, writer, conf); if (VisualizerRowSpacing < 1) VisualizerRowSpacing = 1; writer.addComment("Global.Visualizer.CollumnSpacing", "Spacing in blocks between particle effects for collums"); - VisualizerCollumnSpacing = GetConfigInt("Global.Visualizer.CollumnSpacing", 2, writer, conf); + VisualizerCollumnSpacing = GetConfig("Global.Visualizer.CollumnSpacing", 2, writer, conf); if (VisualizerCollumnSpacing < 1) VisualizerCollumnSpacing = 1; writer.addComment("Global.Visualizer.Selected", @@ -604,25 +636,25 @@ void UpdateConfigFile() { " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance"); - SelectedFrame = ParticleEffects.fromName(GetConfigString("Global.Visualizer.Selected.Frame", "happyVillager", writer, conf, false)); + SelectedFrame = ParticleEffects.fromName(GetConfig("Global.Visualizer.Selected.Frame", "happyVillager", writer, conf, false)); if (SelectedFrame == null) { SelectedFrame = ParticleEffects.VILLAGER_HAPPY; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } - SelectedSides = ParticleEffects.fromName(GetConfigString("Global.Visualizer.Selected.Sides", "reddust", writer, conf, false)); + SelectedSides = ParticleEffects.fromName(GetConfig("Global.Visualizer.Selected.Sides", "reddust", writer, conf, false)); if (SelectedSides == null) { SelectedSides = ParticleEffects.REDSTONE; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } - OverlapFrame = ParticleEffects.fromName(GetConfigString("Global.Visualizer.Overlap.Frame", "FLAME", writer, conf, false)); + OverlapFrame = ParticleEffects.fromName(GetConfig("Global.Visualizer.Overlap.Frame", "FLAME", writer, conf, false)); if (OverlapFrame == null) { OverlapFrame = ParticleEffects.FLAME; Bukkit.getConsoleSender().sendMessage("Can't find effect for Overlap Frame with this name, it was set to default"); } - OverlapSides = ParticleEffects.fromName(GetConfigString("Global.Visualizer.Overlap.Sides", "FLAME", writer, conf, false)); + OverlapSides = ParticleEffects.fromName(GetConfig("Global.Visualizer.Overlap.Sides", "FLAME", writer, conf, false)); if (OverlapSides == null) { OverlapSides = ParticleEffects.FLAME; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); @@ -630,8 +662,8 @@ void UpdateConfigFile() { writer.addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); - int id = GetConfigInt("Global.GUI.setTrue.Id", 35, writer, conf); - int data = GetConfigInt("Global.GUI.setTrue.Data", 13, writer, conf); + int id = GetConfig("Global.GUI.setTrue.Id", 35, writer, conf); + int data = GetConfig("Global.GUI.setTrue.Data", 13, writer, conf); Material Mat = Material.getMaterial(id); if (Mat == null) @@ -639,8 +671,8 @@ void UpdateConfigFile() { GuiTrue = new ItemStack(Mat, 1, (short) data); writer.addComment("Global.GUI.setFalse", "Item id and data to use when flag is set to false"); - id = GetConfigInt("Global.GUI.setFalse.Id", 35, writer, conf); - data = GetConfigInt("Global.GUI.setFalse.Data", 14, writer, conf); + id = GetConfig("Global.GUI.setFalse.Id", 35, writer, conf); + data = GetConfig("Global.GUI.setFalse.Data", 14, writer, conf); Mat = Material.getMaterial(id); if (Mat == null) @@ -648,8 +680,8 @@ void UpdateConfigFile() { GuiFalse = new ItemStack(Mat, 1, (short) data); writer.addComment("Global.GUI.setRemove", "Item id and data to use when flag is set to remove"); - id = GetConfigInt("Global.GUI.setRemove.Id", 35, writer, conf); - data = GetConfigInt("Global.GUI.setRemove.Data", 8, writer, conf); + id = GetConfig("Global.GUI.setRemove.Id", 35, writer, conf); + data = GetConfig("Global.GUI.setRemove.Data", 8, writer, conf); Mat = Material.getMaterial(id); if (Mat == null) @@ -658,17 +690,17 @@ void UpdateConfigFile() { writer.addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", "This is quite heavy on server side, so enable only if you really need this feature"); - AutoMobRemoval = GetConfigBoolean("Global.AutoMobRemoval.Use", false, writer, conf); + AutoMobRemoval = GetConfig("Global.AutoMobRemoval.Use", false, writer, conf); writer.addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); - AutoMobRemovalInterval = GetConfigInt("Global.AutoMobRemoval.Interval", 3, writer, conf); + AutoMobRemovalInterval = GetConfig("Global.AutoMobRemoval.Interval", 3, writer, conf); - enforceAreaInsideArea = GetConfigBoolean("Global.EnforceAreaInsideArea", false, writer, conf); - spoutEnable = GetConfigBoolean("Global.EnableSpout", false, writer, conf); - enableLeaseMoneyAccount = GetConfigBoolean("Global.EnableLeaseMoneyAccount", true, writer, conf); + enforceAreaInsideArea = GetConfig("Global.EnforceAreaInsideArea", false, writer, conf); + spoutEnable = GetConfig("Global.EnableSpout", false, writer, conf); + enableLeaseMoneyAccount = GetConfig("Global.EnableLeaseMoneyAccount", true, writer, conf); writer.addComment("Global.CouldronCompatability", "By setting this to true, partial compatability for kCouldron servers will be anabled. Action bar messages and selection visualizer will be disabled automaticaly as off incorrect compatability"); - CouldronCompatability = GetConfigBoolean("Global.CouldronCompatability", false, writer, conf); + CouldronCompatability = GetConfig("Global.CouldronCompatability", false, writer, conf); if (CouldronCompatability) { useVisualizer = false; actionBar = false; @@ -874,6 +906,10 @@ public boolean isShortInfoUse() { return ShortInfoUse; } + public boolean isOnlyLike() { + return OnlyLike; + } + public int getRentCheckInterval() { return rentCheckInterval; } @@ -1050,6 +1086,10 @@ public boolean isUUIDConvertion() { return UUIDConvertion; } + public boolean isOfflineMode() { + return OfflineMode; + } + public List getCustomContainers() { return customContainers; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 56bb02d18..00a86223c 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -433,6 +433,7 @@ public static void LoadLang(String lang) { GetConfig("Language.Shop.ListTopLine", "&6%1 &eShop list - Page &6%2 &eof &6%3 %4", writer, conf, true); GetConfig("Language.Shop.List", " &e%1. &6%2 &e(&6%3&e) %4", writer, conf, true); GetConfig("Language.Shop.ListVoted", "&e%1 (&6%2&e)", writer, conf, true); + GetConfig("Language.Shop.ListLiked", "&eLikes: &0%1", writer, conf, true); GetConfig("Language.Shop.VotesTopLine", "&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5", writer, conf, true); GetConfig("Language.Shop.VotesList", " &e%1. &6%2 &e%3 &7%4", writer, conf, true); @@ -447,6 +448,8 @@ public static void LoadLang(String lang) { GetConfig("Language.Shop.InvalidSelection", "&cLeft click with selection tool top left sign and then right click bottom right", writer, conf, true); GetConfig("Language.Shop.VoteChanged", "&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence", writer, conf, true); GetConfig("Language.Shop.Voted", "&6You voted, and gave &e%1 &6votes to &e%2 &6residence", writer, conf, true); + GetConfig("Language.Shop.Liked", "&6You liked &e%1 &6residence", writer, conf, true); + GetConfig("Language.Shop.AlreadyLiked", "&6You already liked &e%1 &6residence", writer, conf, true); GetConfig("Language.Shop.NoVotes", "&cThere is no registered votes for this residence", writer, conf, true); GetConfig("Language.Shop.CantVote", "&cResidence don't have shop flag set to true", writer, conf, true); GetConfig("Language.Shop.VotedRange", "&6Vote range is from &e%1 &6to &e%2", writer, conf, true); @@ -454,6 +457,7 @@ public static void LoadLang(String lang) { GetConfig("Language.Shop.SignLines.2", "&9%1", writer, conf, true); GetConfig("Language.Shop.SignLines.3", "&4%1", writer, conf, true); GetConfig("Language.Shop.SignLines.4", "&8%1&e (&8%2&e)", writer, conf, true); + GetConfig("Language.Shop.SignLines.Likes4", "&9Likes: &8%2", writer, conf, true); GetConfig("Language.RandomTeleport.TpLimit", "&eYou can't teleport so fast, please wait &6%1 &esec and try again", writer, conf, true); GetConfig("Language.RandomTeleport.TeleportSuccess", "&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/NewLanguage.java b/src/com/bekvon/bukkit/residence/NewLanguage.java index 9756a64b4..ef955f77a 100644 --- a/src/com/bekvon/bukkit/residence/NewLanguage.java +++ b/src/com/bekvon/bukkit/residence/NewLanguage.java @@ -55,6 +55,10 @@ public static String getMessage(String key) { * - the variables separated with % * @return the message */ + public static String getMessage(String key, int variables) { + return getMessage(key, String.valueOf(variables)); + } + public static String getMessage(String key, String variables) { String missing = "Missing locale for " + key; String message = ""; diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 66167447e..f57258ef7 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -918,7 +918,7 @@ protected boolean loadYml() throws Exception { if (!perms.has("shop", false)) continue; - rmanager.addShop(one.getValue()); + rmanager.addShop(one.getValue().getName()); } if (Residence.getConfigManager().isUUIDConvertion()) { @@ -1178,6 +1178,8 @@ private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean } public static UUID getPlayerUUID(String playername) { + if (Residence.getConfigManager().isOfflineMode()) + return null; Player p = Residence.getServ().getPlayer(playername); if (p == null) { if (getOfflinePlayerMap().containsKey(playername.toLowerCase())) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 237260c16..369080c0e 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -38,7 +38,6 @@ import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; import com.bekvon.bukkit.residence.shopStuff.Board; import com.bekvon.bukkit.residence.shopStuff.ShopVote; -import com.bekvon.bukkit.residence.shopStuff.Shops; import com.bekvon.bukkit.residence.shopStuff.Vote; import com.bekvon.bukkit.residence.signsStuff.SignUtil; import com.bekvon.bukkit.residence.spout.ResidenceSpout; @@ -601,7 +600,7 @@ public void run() { return false; } if (cmd.equals("shop")) { - if ((args.length == 2 || args.length == 3 || args.length == 4) && args[1].equalsIgnoreCase("votes")) { + if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("votes") || args[1].equalsIgnoreCase("likes"))) { int VotePage = 1; @@ -686,7 +685,8 @@ public void run() { ft.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); String timeString = ft.format(dNow); - String message = NewLanguage.getMessage("Language.Shop.VotesList", i + "%" + one.getName() + "%" + one.getVote() + "%" + timeString); + String message = NewLanguage.getMessage("Language.Shop.VotesList", i + "%" + one.getName() + "%" + (Residence.getConfigManager().isOnlyLike() ? "" + : one.getVote()) + "%" + timeString); player.sendMessage(message); i++; } @@ -725,7 +725,7 @@ public void run() { } } - Map ShopList = ShopSignUtil.getSortedShopList(); + Map ShopList = ShopSignUtil.getSortedShopList(); String separator = ChatColor.GOLD + ""; String simbol = "\u25AC"; @@ -745,7 +745,7 @@ public void run() { int end = Shoppage * 10 + 1; int position = 0; int i = start; - for (Entry one : ShopList.entrySet()) { + for (Entry one : ShopList.entrySet()) { position++; if (position < start) @@ -754,19 +754,23 @@ public void run() { if (position >= end) break; - Vote vote = ShopSignUtil.getAverageVote(one.getKey().getRes().getName()); + Vote vote = ShopSignUtil.getAverageVote(one.getKey()); + String votestat = ""; - String votestat = vote.getAmount() == 0 ? "" : NewLanguage.getMessage("Language.Shop.ListVoted").replace("%1", String.valueOf(vote.getVote())) - .replace("%2", String.valueOf(vote.getAmount())); + if (Residence.getConfigManager().isOnlyLike()) { + votestat = vote.getAmount() == 0 ? "" : NewLanguage.getMessage("Language.Shop.ListLiked", ShopSignUtil.getLikes(one.getKey())); + } else + votestat = vote.getAmount() == 0 ? "" : NewLanguage.getMessage("Language.Shop.ListVoted").replace("%1", String.valueOf(vote.getVote())) + .replace("%2", String.valueOf(vote.getAmount())); + ClaimedResidence res = Residence.getResidenceManager().getByName(one.getKey()); + String message = NewLanguage.getMessage("Language.Shop.List").replace("%1", String.valueOf(i)).replace("%2", one.getKey()) + .replace("%3", Residence.getResidenceManager().getByName(one.getKey()).getOwner()).replace("%4", votestat); - String message = NewLanguage.getMessage("Language.Shop.List").replace("%1", String.valueOf(i)).replace("%2", one.getKey().getRes().getName()) - .replace("%3", one.getKey().getRes().getOwner()).replace("%4", votestat); - - String desc = one.getKey().getRes().getShopDesc() == null ? NewLanguage.getMessage("Language.Shop.NoDesc") : NewLanguage.getMessage( - "Language.Shop.Desc").replace("%1", ChatColor.translateAlternateColorCodes('&', one.getKey().getRes().getShopDesc().replace("/n", "\n"))); + String desc = res.getShopDesc() == null ? NewLanguage.getMessage("Language.Shop.NoDesc") : NewLanguage.getMessage( + "Language.Shop.Desc").replace("%1", ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); String prev = "[\"\",{\"text\":\"" + ChatColor.GOLD + " " + message - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/res tp " + one.getKey().getRes().getName() + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/res tp " + one.getKey() + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev); @@ -893,25 +897,44 @@ public void run() { return true; } - if ((args.length == 3 || args.length == 4) && args[1].equalsIgnoreCase("vote")) { + if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("vote") || args[1].equalsIgnoreCase("like"))) { String resName = ""; int vote = 5; ClaimedResidence res = null; if (args.length == 3) { + + if (Residence.getConfigManager().isOnlyLike()) { + + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + player.sendMessage(language.getPhrase("InvalidResidence")); + return true; + } + vote = Residence.getConfigManager().getVoteRangeTo(); + + } else { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(language.getPhrase("NotInResidence")); + return true; + } + + try { + vote = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(language.getPhrase("UseNumbers")); + return true; + } + } + } else if (args.length == 2 && Residence.getConfigManager().isOnlyLike()) { res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { player.sendMessage(language.getPhrase("NotInResidence")); return true; } + vote = Residence.getConfigManager().getVoteRangeTo(); + } else if (!Residence.getConfigManager().isOnlyLike()) { - try { - vote = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(language.getPhrase("UseNumbers")); - return true; - } - resName = res.getName(); - } else { res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { player.sendMessage(language.getPhrase("InvalidResidence")); @@ -924,8 +947,9 @@ public void run() { player.sendMessage(language.getPhrase("UseNumbers")); return true; } - resName = res.getName(); } + resName = res.getName(); + if (!res.getPermissions().has("shop", false)) { player.sendMessage(NewLanguage.getMessage("Language.Shop.CantVote")); return true; @@ -944,6 +968,12 @@ public void run() { boolean found = false; for (ShopVote OneVote : list) { if (OneVote.getName().equalsIgnoreCase(player.getName())) { + + if (Residence.getConfigManager().isOnlyLike()) { + player.sendMessage(NewLanguage.getMessage("Language.Shop.AlreadyLiked", resName)); + return true; + } + player.sendMessage(NewLanguage.getMessage("Language.Shop.VoteChanged", OneVote.getVote() + "%" + vote + "%" + resName)); OneVote.setVote(vote); OneVote.setTime(System.currentTimeMillis()); @@ -954,14 +984,21 @@ public void run() { if (!found) { ShopVote newVote = new ShopVote(player.getName(), vote, System.currentTimeMillis()); list.add(newVote); - player.sendMessage(NewLanguage.getMessage("Language.Shop.Voted", vote + "%" + resName)); + + if (Residence.getConfigManager().isOnlyLike()) + player.sendMessage(NewLanguage.getMessage("Language.Shop.Liked", resName)); + else + player.sendMessage(NewLanguage.getMessage("Language.Shop.Voted", vote + "%" + resName)); } } else { List list = new ArrayList(); ShopVote newVote = new ShopVote(player.getName(), vote, System.currentTimeMillis()); list.add(newVote); VoteList.put(resName, list); - player.sendMessage(NewLanguage.getMessage("Language.Shop.Voted", vote + "%" + resName)); + if (Residence.getConfigManager().isOnlyLike()) + player.sendMessage(NewLanguage.getMessage("Language.Shop.Liked", resName)); + else + player.sendMessage(NewLanguage.getMessage("Language.Shop.Voted", vote + "%" + resName)); } ShopSignUtil.saveShopVotes(); ShopSignUtil.BoardUpdate(); diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 59ad4f305..ba1097340 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -32,8 +32,8 @@ public static void load() { if (!conf.contains("Global.FlagGui." + oneFlag + ".Data")) continue; - int id = ConfigManager.GetConfigInt("Global.FlagGui." + oneFlag + ".Id", 35, writer, conf); - int data = ConfigManager.GetConfigInt("Global.FlagGui." + oneFlag + ".Data", 0, writer, conf); + int id = ConfigManager.GetConfig("Global.FlagGui." + oneFlag + ".Id", 35, writer, conf); + int data = ConfigManager.GetConfig("Global.FlagGui." + oneFlag + ".Data", 0, writer, conf); @SuppressWarnings("deprecation") Material Mat = Material.getMaterial(id); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 787103525..0e250e538 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -201,27 +201,32 @@ public static void initValidFlags() { addResidenceOnlyFlag("shop"); addPlayerOrGroupOnlyFlag("admin"); - addFlagToFlagGroup("redstone", "note"); - addFlagToFlagGroup("redstone", "pressure"); - addFlagToFlagGroup("redstone", "lever"); - addFlagToFlagGroup("redstone", "button"); - addFlagToFlagGroup("redstone", "diode"); - addFlagToFlagGroup("craft", "brew"); - addFlagToFlagGroup("craft", "table"); - addFlagToFlagGroup("craft", "enchant"); - addFlagToFlagGroup("trusted", "use"); - addFlagToFlagGroup("trusted", "tp"); - addFlagToFlagGroup("trusted", "build"); - addFlagToFlagGroup("trusted", "container"); - addFlagToFlagGroup("trusted", "bucket"); - addFlagToFlagGroup("trusted", "move"); - addFlagToFlagGroup("trusted", "leash"); - addFlagToFlagGroup("trusted", "animalkilling"); - addFlagToFlagGroup("trusted", "mobkilling"); - addFlagToFlagGroup("trusted", "shear"); - addFlagToFlagGroup("trusted", "chat"); - addFlagToFlagGroup("fire", "ignite"); - addFlagToFlagGroup("fire", "firespread"); + + Residence.getConfigManager().UpdateGroupedFlagsFile(); + + // All these flags are moved to flags.yml as of 2.9.11.0 version for option to customize them +// addFlagToFlagGroup("redstone", "note"); +// addFlagToFlagGroup("redstone", "pressure"); +// addFlagToFlagGroup("redstone", "lever"); +// addFlagToFlagGroup("redstone", "button"); +// addFlagToFlagGroup("redstone", "diode"); +// addFlagToFlagGroup("craft", "brew"); +// addFlagToFlagGroup("craft", "table"); +// addFlagToFlagGroup("craft", "enchant"); +// addFlagToFlagGroup("trusted", "use"); +// addFlagToFlagGroup("trusted", "tp"); +// addFlagToFlagGroup("trusted", "build"); +// addFlagToFlagGroup("trusted", "container"); +// addFlagToFlagGroup("trusted", "bucket"); +// addFlagToFlagGroup("trusted", "move"); +// addFlagToFlagGroup("trusted", "leash"); +// addFlagToFlagGroup("trusted", "animalkilling"); +// addFlagToFlagGroup("trusted", "mobkilling"); +// addFlagToFlagGroup("trusted", "shear"); +// addFlagToFlagGroup("trusted", "chat"); +// addFlagToFlagGroup("fire", "ignite"); +// addFlagToFlagGroup("fire", "firespread"); + addMaterialToUseFlag(Material.DIODE, "diode"); addMaterialToUseFlag(Material.DIODE_BLOCK_OFF, "diode"); addMaterialToUseFlag(Material.DIODE_BLOCK_ON, "diode"); @@ -295,48 +300,61 @@ public FlagPermissions() { protected Map getPlayerFlags(String player, boolean allowCreate)//this function works with uuid in string format as well, instead of player name { - player = player.toLowerCase(); + //player = player.toLowerCase(); <- Why its toLowerCase when its can be UUID when capitalization is required String uuids; Map flags = null; - if (player.length() == 36) { - uuids = player; - String resolvedName = Residence.getPlayerName(uuids); - if (resolvedName != null) - player = resolvedName; - else if (cachedPlayerNameUUIDs.containsKey(player)) - player = cachedPlayerNameUUIDs.get(player); - } else - uuids = Residence.getPlayerUUIDString(player); - - if (uuids == null) { - Set> values = cachedPlayerNameUUIDs.entrySet(); - for (Entry value : values) { - if (value.getValue().equals(player)) { - uuids = value.getKey(); - break; + if (!Residence.getConfigManager().isOfflineMode()) { + if (player.length() == 36) { + uuids = player; + String resolvedName = Residence.getPlayerName(uuids); + if (resolvedName != null) + player = resolvedName; + else if (cachedPlayerNameUUIDs.containsKey(player)) + player = cachedPlayerNameUUIDs.get(player); + } else + uuids = Residence.getPlayerUUIDString(player); + + if (uuids == null) { + Set> values = cachedPlayerNameUUIDs.entrySet(); + for (Entry value : values) { + if (value.getValue().equalsIgnoreCase(player)) { + uuids = value.getKey(); + break; + } } } - } - if (uuids != null) - flags = playerFlags.get(uuids); - if (flags == null) { - flags = playerFlags.get(player); - if (uuids != null && flags != null) { - flags = playerFlags.remove(player); - playerFlags.put(uuids, flags); + if (uuids != null) + flags = playerFlags.get(uuids); + if (flags == null) { + flags = playerFlags.get(player); + if (uuids != null && flags != null) { + flags = playerFlags.remove(player); + playerFlags.put(uuids, flags); + cachedPlayerNameUUIDs.put(uuids, player); + } + } else cachedPlayerNameUUIDs.put(uuids, player); - } - } else - cachedPlayerNameUUIDs.put(uuids, player); - if (flags == null && allowCreate) { - if (uuids != null) { - flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(uuids, flags); - cachedPlayerNameUUIDs.put(uuids, player); - } else { + if (flags == null && allowCreate) { + if (uuids != null) { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(uuids, flags); + cachedPlayerNameUUIDs.put(uuids, player); + } else { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(player, flags); + } + } + } else { + for (Entry> one : playerFlags.entrySet()) { + if (!one.getKey().equalsIgnoreCase(player)) + continue; + flags = one.getValue(); + break; + } + if (flags == null && allowCreate) { flags = Collections.synchronizedMap(new HashMap()); playerFlags.put(player, flags); } @@ -363,22 +381,25 @@ public boolean setPlayerFlag(String player, String flag, FlagState state) { } public void removeAllPlayerFlags(String player) {//this function works with uuid in string format as well, instead of player name - player = player.toLowerCase(); - String uuids = Residence.getPlayerUUIDString(player); - if (uuids == null) - for (Entry entry : cachedPlayerNameUUIDs.entrySet()) - if (entry.getValue().equals(player)) { - uuids = entry.getKey(); - break; - } + // player = player.toLowerCase(); + + if (!Residence.getConfigManager().isOfflineMode()) { + String uuids = Residence.getPlayerUUIDString(player); + if (uuids == null) + for (Entry entry : cachedPlayerNameUUIDs.entrySet()) + if (entry.getValue().equals(player)) { + uuids = entry.getKey(); + break; + } - if (uuids != null) { - playerFlags.remove(uuids); - cachedPlayerNameUUIDs.remove(uuids); + if (uuids != null) { + playerFlags.remove(uuids); + cachedPlayerNameUUIDs.remove(uuids); + } } - playerFlags.remove(player); cachedPlayerNameUUIDs.remove(player); + } public void removeAllGroupFlags(String group) { @@ -568,12 +589,39 @@ protected static FlagPermissions load(Map root, FlagPermissions uuid = (String) root.get("OwnerUUID"); } - if (Residence.getConfigManager().isUUIDConvertion()) { + if (Residence.getConfigManager().isOfflineMode()) + newperms.convertFlagsUUIDsToPlayerNames(); + else newperms.convertPlayerNamesToUUIDs(ownerName, uuid); - } + return newperms; } + private void convertFlagsUUIDsToPlayerNames() { + HashMap converts = new HashMap<>(); + for (String keyset : playerFlags.keySet()) { + if (keyset.length() == 36) { + String uuid = keyset; + if (uuid.equalsIgnoreCase("00000000-0000-0000-0000-000000000000")) + converts.put(uuid, "Server_Land"); + else { + String name = Residence.getPlayerName(uuid); + if (name != null) + converts.put(uuid, name); + } + } + } + + for (Entry one : converts.entrySet()) { + if (playerFlags.containsKey(one.getKey())) { + Map replace = playerFlags.get(one.getKey()); + playerFlags.remove(one.getKey()); + playerFlags.put(one.getValue(), replace); + } + } + + } + private void convertPlayerNamesToUUIDs(String OwnerName, String owneruuid) { HashMap converts = new HashMap<>(); @@ -597,7 +645,6 @@ else if (OwnerName != null && !OwnerName.equalsIgnoreCase(keyset)) if (pname != null) this.cachedPlayerNameUUIDs.put(keyset, pname); } - } for (String one : Toremove) { playerFlags.remove(one); @@ -682,7 +729,7 @@ protected String printPlayerFlags(Map flags) { } public String listOtherPlayersFlags(String player) { - player = player.toLowerCase(); +// player = player.toLowerCase(); String uuids = Residence.getPlayerUUIDString(player); StringBuilder sbuild = new StringBuilder(); Set>> set = playerFlags.entrySet(); @@ -691,7 +738,8 @@ public String listOtherPlayersFlags(String player) { while (it.hasNext()) { Entry> nextEnt = it.next(); String next = nextEnt.getKey(); - if (!next.equals(player) && !next.equals(uuids)) { + if (!Residence.getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getConfigManager().isOfflineMode() && !next + .equals(player)) { String perms = printPlayerFlags(nextEnt.getValue()); if (next.length() == 36) { String resolvedName = Residence.getPlayerName(next); @@ -711,7 +759,7 @@ public String listOtherPlayersFlags(String player) { } public String listOtherPlayersFlagsRaw(String text, String player) { - player = player.toLowerCase(); +// player = player.toLowerCase(); String uuids = Residence.getPlayerUUIDString(player); StringBuilder sbuild = new StringBuilder(); @@ -725,7 +773,8 @@ public String listOtherPlayersFlagsRaw(String text, String player) { while (it.hasNext()) { Entry> nextEnt = it.next(); String next = nextEnt.getKey(); - if (!next.equals(player) && !next.equals(uuids)) { + if (!Residence.getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getConfigManager().isOfflineMode() && !next + .equals(player)) { String perms = printPlayerFlags(nextEnt.getValue()); if (next.length() == 36) { String resolvedName = Residence.getPlayerName(next); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index afb39d19c..1f1331a94 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -27,8 +27,8 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.selection.AutoSelection; -import com.bekvon.bukkit.residence.shopStuff.Shops; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.Debug; /** * @@ -37,7 +37,7 @@ public class ResidenceManager { protected Map residences; protected Map>> chunkResidences; - protected Map shops = new HashMap(); + protected List shops = new ArrayList(); public ResidenceManager() { residences = new HashMap<>(); @@ -120,20 +120,20 @@ public String getNameByRes(ClaimedResidence res) { return null; } - public void addShop(ClaimedResidence res) { - Shops shop = new Shops(res); - shops.put(res.getName(), shop); + public void addShop(String res) { + shops.add(res); } - + public void removeShop(ClaimedResidence res) { removeShop(res.getName()); } public void removeShop(String resName) { + Debug.D("Containe? "+shops.remove(resName)); shops.remove(resName); } - public Map getShops() { + public List getShops() { return shops; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index e5cb97892..9a2eeb754 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -86,9 +86,14 @@ public boolean hasApplicableFlag(String player, String flag) { public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) { if (player != null) { - if (!player.getUniqueId().toString().equals(ownerUUID.toString()) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; + if (!resadmin) { + if (!Residence.getConfigManager().isOfflineMode() && !player.getUniqueId().toString().equals(ownerUUID.toString())) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } else if (!player.getName().equals(ownerLastKnownName)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return; + } } } else { resadmin = true; @@ -378,6 +383,8 @@ public void setOwner(String newOwner, boolean resetFlags) { } public String getOwner() { + if (Residence.getConfigManager().isOfflineMode()) + return ownerLastKnownName; if (ownerUUID.toString().equals("00000000-0000-0000-0000-000000000000")) //check for server land return "Server_Land"; String name = Residence.getPlayerName(ownerUUID);//try to find the owner's name diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index 47b6d02d6..a3bc2caee 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -20,6 +21,7 @@ import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; public class ShopListener implements Listener { @@ -105,7 +107,7 @@ public void onFlagChangeShop(ResidenceFlagChangeEvent event) { case INVALID: break; case TRUE: - Residence.getResidenceManager().addShop(event.getResidence()); + Residence.getResidenceManager().addShop(event.getResidence().getName()); event.getResidence().getPermissions().setFlag("tp", FlagState.TRUE); event.getResidence().getPermissions().setFlag("move", FlagState.TRUE); event.getResidence().getPermissions().setFlag("pvp", FlagState.FALSE); @@ -116,7 +118,21 @@ public void onFlagChangeShop(ResidenceFlagChangeEvent event) { break; } } - + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceRename(ResidenceRenameEvent event) { + ConcurrentHashMap> Votes = ShopSignUtil.GetAllVoteList(); + if (Votes.containsKey(event.getOldResidenceName())){ + Residence.getResidenceManager().addShop(event.getNewResidenceName()); + Residence.getResidenceManager().removeShop(event.getOldResidenceName()); + List obj = Votes.remove(event.getOldResidenceName()); + Votes.put(event.getNewResidenceName(), obj); + ShopSignUtil.saveShopVotes(); + ShopSignUtil.BoardUpdateDelayed(); + ShopSignUtil.saveSigns(); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onFlagChange(ResidenceFlagChangeEvent event) { if (event.isCancelled()) @@ -151,7 +167,7 @@ public void onResidenceCreate(ResidenceCreationEvent event) { if (!event.getResidence().getPermissions().has("shop", false)) return; - Residence.getResidenceManager().addShop(event.getResidence()); + Residence.getResidenceManager().addShop(event.getResidence().getName()); ShopSignUtil.BoardUpdate(); ShopSignUtil.saveSigns(); diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index 354efb9c4..f9c09e05f 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -14,6 +14,7 @@ import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.block.Sign; @@ -22,6 +23,7 @@ import com.bekvon.bukkit.residence.CommentedYamlConfiguration; import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class ShopSignUtil { @@ -86,7 +88,7 @@ public static void LoadShopVotes() { try { String voteString = oneEntry.split("%")[1]; - if (voteString.contains("!")){ + if (voteString.contains("!")) { voteString = oneEntry.split("%")[1].split("!")[0]; } vote = Integer.parseInt(voteString); @@ -130,6 +132,9 @@ public static void saveShopVotes() { for (Entry> one : GetAllVoteList().entrySet()) { + if (one.getKey() == null || one.getKey().equalsIgnoreCase("")) + continue; + String path = "ShopVotes." + one.getKey(); List list = new ArrayList(); @@ -168,15 +173,34 @@ public static Vote getAverageVote(String resName) { return new Vote(vote, votes.size()); } - public static Map getSortedShopList() { + // Res Shop vote file + public static int getLikes(String resName) { + ConcurrentHashMap> allvotes = GetAllVoteList(); + if (!allvotes.containsKey(resName)) + return 0; + + List votes = allvotes.get(resName); + + int likes = 0; + for (ShopVote oneVote : votes) { + if (oneVote.getVote() >= (int) (Residence.getConfigManager().getVoteRangeTo() / 2)) + likes++; + } + + return likes; + } + + public static Map getSortedShopList() { - Map allvotes = new HashMap(); + Map allvotes = new HashMap(); - Map shops = Residence.getResidenceManager().getShops(); + List shops = Residence.getResidenceManager().getShops(); - for (Entry one : shops.entrySet()) { - Vote vote = ShopSignUtil.getAverageVote(one.getKey()); - allvotes.put(one.getValue(), vote.getVote()); + for (String one : shops) { + if (Residence.getConfigManager().isOnlyLike()) + allvotes.put(one, (double) ShopSignUtil.getLikes(one)); + else + allvotes.put(one, ShopSignUtil.getAverageVote(one).getVote()); } allvotes = sortByComparator(allvotes); @@ -184,18 +208,18 @@ public static Map getSortedShopList() { return allvotes; } - private static Map sortByComparator(Map unsortMap) { + private static Map sortByComparator(Map allvotes) { - List> list = new LinkedList>(unsortMap.entrySet()); + List> list = new LinkedList>(allvotes.entrySet()); - Collections.sort(list, new Comparator>() { - public int compare(Map.Entry o1, Map.Entry o2) { + Collections.sort(list, new Comparator>() { + public int compare(Map.Entry o1, Map.Entry o2) { return (o2.getValue()).compareTo(o1.getValue()); } }); - Map sortedMap = new LinkedHashMap(); - for (Iterator> it = list.iterator(); it.hasNext();) { - Map.Entry entry = it.next(); + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); sortedMap.put(entry.getKey(), entry.getValue()); } return sortedMap; @@ -271,13 +295,22 @@ public static void saveSigns() { return; } + public static boolean BoardUpdateDelayed() { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + public void run() { + BoardUpdate(); + return; + } + }, 20L); + return true; + } + public static boolean BoardUpdate() { - for (Board board : GetAllBoards()) { board.clearSignLoc(); List SignsLocation = board.GetLocations(); - ArrayList ShopNames = new ArrayList(ShopSignUtil.getSortedShopList().keySet()); + ArrayList ShopNames = new ArrayList(ShopSignUtil.getSortedShopList().keySet()); int Start = board.GetStartPlace(); for (Location OneSignLoc : SignsLocation) { @@ -287,26 +320,35 @@ public static boolean BoardUpdate() { if (!(block.getState() instanceof Sign)) continue; - Shops Shop = null; + String Shop = null; if (Residence.getResidenceManager().getShops().size() >= Start) - Shop = Residence.getResidenceManager().getShops().get(ShopNames.get(Start - 1).getRes().getName()); + Shop = ShopNames.get(Start - 1); + + ClaimedResidence res = Residence.getResidenceManager().getByName(Shop); + + if (res == null) + continue; Sign sign = (Sign) block.getState(); Vote vote = null; String votestat = ""; if (Residence.getResidenceManager().getShops().size() >= Start) { - vote = ShopSignUtil.getAverageVote(ShopNames.get(Start - 1).getRes().getName()); - votestat = vote.getAmount() == 0 ? "" : NewLanguage.getMessage("Language.Shop.SignLines.4").replace("%1", String.valueOf(vote.getVote())).replace( - "%2", String.valueOf(vote.getAmount())); + vote = ShopSignUtil.getAverageVote(ShopNames.get(Start - 1)); + + if (Residence.getConfigManager().isOnlyLike()) { + votestat = vote.getAmount() == 0 ? "" : NewLanguage.getMessage("Language.Shop.ListLiked", ShopSignUtil.getLikes(ShopNames.get(Start - 1))); + } else + votestat = vote.getAmount() == 0 ? "" : NewLanguage.getMessage("Language.Shop.SignLines.4").replace("%1", String.valueOf(vote.getVote())).replace( + "%2", String.valueOf(vote.getAmount())); } if (Shop != null) { sign.setLine(0, NewLanguage.getMessage("Language.Shop.SignLines.1").replace("%1", String.valueOf(Start))); - sign.setLine(1, NewLanguage.getMessage("Language.Shop.SignLines.2").replace("%1", Shop.getRes().getName())); - sign.setLine(2, NewLanguage.getMessage("Language.Shop.SignLines.3").replace("%1", Shop.getRes().getOwner())); + sign.setLine(1, NewLanguage.getMessage("Language.Shop.SignLines.2").replace("%1", res.getName())); + sign.setLine(2, NewLanguage.getMessage("Language.Shop.SignLines.3").replace("%1", res.getOwner())); sign.setLine(3, votestat); - board.addSignLoc(Shop.getRes().getName(), sign.getLocation()); + board.addSignLoc(res.getName(), sign.getLocation()); } else { sign.setLine(0, ""); sign.setLine(1, ""); diff --git a/src/com/bekvon/bukkit/residence/shopStuff/Shops.java b/src/com/bekvon/bukkit/residence/shopStuff/Shops.java deleted file mode 100644 index 0a49d7ca6..000000000 --- a/src/com/bekvon/bukkit/residence/shopStuff/Shops.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.bekvon.bukkit.residence.shopStuff; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class Shops { - - ClaimedResidence res = null; - - public Shops(ClaimedResidence res) { - this.res = res; - } - - public ClaimedResidence getRes() { - return this.res; - } -} diff --git a/src/flags.yml b/src/flags.yml index e2b9e1c6f..2a83b5cdb 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -256,6 +256,34 @@ Global: GroupDefault: #default: #group name #build: true + # These are grouped flags, so when using /res pset nickname redstone true, player will get all flags in list, same when setting to false or removing them. + GroupedFlags: + redstone: + - note + - pressure + - lever + - button + - diode + craft: + - brew + - table + - enchant + trusted: + - use + - tp + - build + - container + - bucket + - move + - leash + - animalkilling + - mobkilling + - shear + - chat + - beacon + fire: + - ignite + - firespread ItemList: #this is where you can create blacklists / whitelists DefaultList: #list name is not important, as long as it is unique. Its good to use a descripive name. #type of the list, can be blacklist, whitelist, or ignorelist From 9c2127075feb075704ff92837cb21f7ce19262bd Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 17 Nov 2015 16:14:01 +0200 Subject: [PATCH 0097/1142] Added missing locale for Like system --- src/com/bekvon/bukkit/residence/Locale.java | 8 ++++++++ src/plugin.yml | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 00a86223c..1316e7699 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -1016,10 +1016,18 @@ public static void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Info", Arrays.asList("Usage: /res shop vote [amount]", "Votes for current or defined residence"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Description", "Give like for residence shop", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Info", Arrays.asList("Usage: /res shop like ", + "Gives like for residence shop"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Description", "Shows res shop votes", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Info", Arrays.asList("Usage: /res shop votes ", "Shows full vote list of current or defined residence shop"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Description", "Shows res shop likes", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Info", Arrays.asList("Usage: /res shop likes ", + "Shows full like list of current or defined residence shop"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Description", "Sets residence shop description", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Info", Arrays.asList("Usage: /res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n"), writer, conf, true); diff --git a/src/plugin.yml b/src/plugin.yml index 1bb5a239a..90ed908b3 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.10.1 +version: 2.9.11.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From a0247bf7ddd16c7b10461eda675821e277e36130 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 18 Nov 2015 19:16:24 +0200 Subject: [PATCH 0098/1142] Fix for creating residence and not having owner name --- .../bekvon/bukkit/residence/PlayerManager.java | 18 +++++++++--------- .../residence/protection/ResidenceManager.java | 4 +--- .../protection/ResidencePermissions.java | 1 + src/plugin.yml | 2 +- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/PlayerManager.java b/src/com/bekvon/bukkit/residence/PlayerManager.java index 35fd561ff..05e4809e8 100644 --- a/src/com/bekvon/bukkit/residence/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/PlayerManager.java @@ -26,15 +26,14 @@ public static void playerJoin(OfflinePlayer player) { return; } - public static void playerJoin(String player) { - ResPlayer resPlayer = players.get(player.toLowerCase()); - if (resPlayer == null) { - resPlayer = new ResPlayer(player); + public static ResPlayer playerJoin(String player) { + if (!players.containsKey(player.toLowerCase())) { + ResPlayer resPlayer = new ResPlayer(player); resPlayer.recountRes(); players.put(player.toLowerCase(), resPlayer); + return resPlayer; } - return; - + return null; } public static void fillList() { @@ -117,10 +116,11 @@ public static int getMaxRents(String player) { } public static ResPlayer getResPlayer(String player) { - ResPlayer resPlayer = players.get(player.toLowerCase()); - if (resPlayer == null) { - playerJoin(player); + ResPlayer resPlayer = null; + if (players.containsKey(player.toLowerCase())) resPlayer = players.get(player.toLowerCase()); + else { + resPlayer = playerJoin(player); } return resPlayer; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1f1331a94..2dfc2ac6a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -28,7 +28,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.Debug; /** * @@ -123,13 +122,12 @@ public String getNameByRes(ClaimedResidence res) { public void addShop(String res) { shops.add(res); } - + public void removeShop(ClaimedResidence res) { removeShop(res.getName()); } public void removeShop(String resName) { - Debug.D("Containe? "+shops.remove(resName)); shops.remove(resName); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 9a2eeb754..f1eceb7bc 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -44,6 +44,7 @@ public ResidencePermissions(ClaimedResidence res, String creator, String inworld ownerUUID = Residence.getPlayerUUID(creator); if (ownerUUID == null) ownerUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); + this.ownerLastKnownName = creator; world = inworld; } diff --git a/src/plugin.yml b/src/plugin.yml index 90ed908b3..db526a5dc 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.11.0 +version: 2.9.11.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 97ee03fb86b9c574c90919b18fff88a0b7c9dc70 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 21 Nov 2015 18:38:04 +0200 Subject: [PATCH 0099/1142] This should go before... Some cleaning --- .../bekvon/bukkit/residence/Residence.java | 20 ++- .../residence/ResidenceCommandListener.java | 4 +- .../bukkit/residence/economy/BOSEAdapter.java | 58 ++++---- .../economy/EssentialsEcoAdapter.java | 3 +- .../protection/ClaimedResidence.java | 4 +- .../residence/protection/FlagPermissions.java | 6 +- .../protection/ResidenceManager.java | 8 +- .../protection/ResidencePermissions.java | 47 +++---- .../bukkit/residence/utils/FileCleanUp.java | 128 +++++++++--------- 9 files changed, 147 insertions(+), 131 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f57258ef7..69115c59d 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -139,6 +139,10 @@ public class Residence extends JavaPlugin { public static WorldGuardPlugin wg = null; public static int wepid; + private static String ServerLandname = "Server_Land"; + private static String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; + private static String TempUserUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"; + private static NMS nms; public static NMS getNms() { @@ -1178,8 +1182,8 @@ private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean } public static UUID getPlayerUUID(String playername) { - if (Residence.getConfigManager().isOfflineMode()) - return null; +// if (Residence.getConfigManager().isOfflineMode()) +// return null; Player p = Residence.getServ().getPlayer(playername); if (p == null) { if (getOfflinePlayerMap().containsKey(playername.toLowerCase())) @@ -1217,6 +1221,18 @@ public static String getPlayerName(String uuid) { return null; } + public static String getServerLandname() { + return ServerLandname; + } + + public static String getServerLandUUID() { + return ServerLandUUID; + } + + public static String getTempUserUUID() { + return TempUserUUID; + } + public static String getPlayerName(UUID uuid) { OfflinePlayer p = Residence.getServ().getPlayer(uuid); if (p == null) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 369080c0e..7e9c90092 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1246,9 +1246,9 @@ public void run() { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; } - res.getPermissions().setOwner("Server_Land", false); + res.getPermissions().setOwner(Residence.getServerLandname(), false); player.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "|" + ChatColor.YELLOW - + "Server_Land" + ChatColor.GREEN)); + + Residence.getServerLandname() + ChatColor.GREEN)); return true; } else { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); diff --git a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java index 9959c06ed..075fea5b3 100644 --- a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java @@ -4,6 +4,8 @@ */ package com.bekvon.bukkit.residence.economy; +import com.bekvon.bukkit.residence.Residence; + import cosine.boseconomy.BOSEconomy; /** @@ -15,57 +17,57 @@ public class BOSEAdapter implements EconomyInterface { BOSEconomy plugin; public BOSEAdapter(BOSEconomy p) { - plugin = p; - String serverland = "Server_Land"; - if (!plugin.playerRegistered(serverland, false)) { - plugin.registerPlayer(serverland); - } + plugin = p; + String serverland = Residence.getServerLandname(); + if (!plugin.playerRegistered(serverland, false)) { + plugin.registerPlayer(serverland); + } } @Override public double getBalance(String playerName) { - return plugin.getPlayerMoneyDouble(playerName); + return plugin.getPlayerMoneyDouble(playerName); } @Override public boolean canAfford(String playerName, double amount) { - double balance = plugin.getPlayerMoneyDouble(playerName); - if (balance >= amount) { - return true; - } - return false; + double balance = plugin.getPlayerMoneyDouble(playerName); + if (balance >= amount) { + return true; + } + return false; } @Override public boolean add(String playerName, double amount) { - return plugin.setPlayerMoney(playerName, plugin.getPlayerMoneyDouble(playerName) + amount, false); + return plugin.setPlayerMoney(playerName, plugin.getPlayerMoneyDouble(playerName) + amount, false); } @Override public boolean subtract(String playerName, double amount) { - if (canAfford(playerName, amount)) { - return plugin.setPlayerMoney(playerName, plugin.getPlayerMoneyDouble(playerName) - amount, false); - } - return false; + if (canAfford(playerName, amount)) { + return plugin.setPlayerMoney(playerName, plugin.getPlayerMoneyDouble(playerName) - amount, false); + } + return false; } @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - if (canAfford(playerFrom, amount)) { - if (!subtract(playerFrom, amount)) { - return false; - } - if (!add(playerTo, amount)) { - add(playerFrom, amount); - return false; - } - return true; - } - return false; + if (canAfford(playerFrom, amount)) { + if (!subtract(playerFrom, amount)) { + return false; + } + if (!add(playerTo, amount)) { + add(playerFrom, amount); + return false; + } + return true; + } + return false; } @Override public String getName() { - return "BOSEconomy"; + return "BOSEconomy"; } } \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index 3f8fa3bcd..462b823e4 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -5,6 +5,7 @@ package com.bekvon.bukkit.residence.economy; +import com.bekvon.bukkit.residence.Residence; import com.earth2me.essentials.Essentials; import com.earth2me.essentials.api.Economy; import com.earth2me.essentials.api.NoLoanPermittedException; @@ -20,7 +21,7 @@ public class EssentialsEcoAdapter implements EconomyInterface { public EssentialsEcoAdapter(Essentials p) { plugin = p; - String serverland = "Server_Land"; + String serverland = Residence.getServerLandname(); if (!Economy.playerExists(serverland)) { Economy.createNPC(serverland); } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 9c629f6f8..499b6ec6f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -61,7 +61,7 @@ private ClaimedResidence() { } public ClaimedResidence(String creationWorld) { - this("Server_Land", creationWorld); + this(Residence.getServerLandname(), creationWorld); } public ClaimedResidence(String creator, String creationWorld) { @@ -349,7 +349,7 @@ public boolean addSubzone(String name, Location loc1, Location loc2) { public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { if (player == null) { - return this.addSubzone(null, "Server_Land", loc1, loc2, name, resadmin); + return this.addSubzone(null, Residence.getServerLandname(), loc1, loc2, name, resadmin); } else { return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 0e250e538..1f4b3ce9d 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -602,8 +602,8 @@ private void convertFlagsUUIDsToPlayerNames() { for (String keyset : playerFlags.keySet()) { if (keyset.length() == 36) { String uuid = keyset; - if (uuid.equalsIgnoreCase("00000000-0000-0000-0000-000000000000")) - converts.put(uuid, "Server_Land"); + if (uuid.equalsIgnoreCase(Residence.getServerLandUUID())) + converts.put(uuid, Residence.getServerLandname()); else { String name = Residence.getPlayerName(uuid); if (name != null) @@ -630,7 +630,7 @@ private void convertPlayerNamesToUUIDs(String OwnerName, String owneruuid) { for (String keyset : playerFlags.keySet()) { if (keyset.length() != 36) { String uuid = null; - if (OwnerName != null && OwnerName.equalsIgnoreCase(keyset) && !owneruuid.equalsIgnoreCase("ffffffff-ffff-ffff-ffff-ffffffffffff")) + if (OwnerName != null && OwnerName.equalsIgnoreCase(keyset) && !owneruuid.equalsIgnoreCase(Residence.getTempUserUUID())) uuid = owneruuid; else uuid = Residence.getPlayerUUIDString(keyset); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 2dfc2ac6a..932013536 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -136,7 +136,7 @@ public List getShops() { } public boolean addResidence(String name, Location loc1, Location loc2) { - return this.addResidence(name, "Server_Land", loc1, loc2); + return this.addResidence(name, Residence.getServerLandname(), loc1, loc2); } public boolean addResidence(String name, String owner, Location loc1, Location loc2) { @@ -645,12 +645,12 @@ public static Map> loadMap(String worldName, Map) res.getValue(), null); - if (residence.getPermissions().getOwnerUUID().toString().equals("00000000-0000-0000-0000-000000000000") && !residence.getOwner().equalsIgnoreCase( - "Server land") && !residence.getOwner().equalsIgnoreCase("Server_land")) + if (residence.getPermissions().getOwnerUUID().toString().equals(Residence.getServerLandUUID()) && !residence.getOwner().equalsIgnoreCase( + "Server land") && !residence.getOwner().equalsIgnoreCase(Residence.getServerLandname())) continue; if (residence.getOwner().equalsIgnoreCase("Server land")) { - residence.getPermissions().setOwner("Server_Land", false); + residence.getPermissions().setOwner(Residence.getServerLandname(), false); } for (ChunkRef chunk : getChunks(residence)) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index f1eceb7bc..dc717add8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -43,7 +43,7 @@ public ResidencePermissions(ClaimedResidence res, String creator, String inworld this(res); ownerUUID = Residence.getPlayerUUID(creator); if (ownerUUID == null) - ownerUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); + ownerUUID = UUID.fromString(Residence.getTempUserUUID()); this.ownerLastKnownName = creator; world = inworld; } @@ -362,32 +362,29 @@ public void applyDefaultFlags() { } public void setOwner(String newOwner, boolean resetFlags) { - if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase("Server_Land")) { - ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); - Residence.getServ().getPluginManager().callEvent(ownerchange); - ownerUUID = UUID.fromString("00000000-0000-0000-0000-000000000000");// the UUID for server owned land - if (resetFlags) - this.applyDefaultFlags(); + ownerLastKnownName = newOwner; + + ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); + Residence.getServ().getPluginManager().callEvent(ownerchange); + + if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase(Residence.getServerLandname())) { + ownerUUID = UUID.fromString(Residence.getServerLandUUID());// the UUID for server owned land } else { UUID playerUUID = Residence.getPlayerUUID(newOwner); - if (playerUUID != null) //if we find the players uuid - { - ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); - Residence.getServ().getPluginManager().callEvent(ownerchange); + if (playerUUID != null) ownerUUID = playerUUID; - if (resetFlags) - this.applyDefaultFlags(); - } else - ownerUUID = UUID.fromString("ffffffff-ffff-ffff-ffff-ffffffffffff");//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it + else + ownerUUID = UUID.fromString(Residence.getTempUserUUID());//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it } - ownerLastKnownName = newOwner; + if (resetFlags) + this.applyDefaultFlags(); } public String getOwner() { if (Residence.getConfigManager().isOfflineMode()) return ownerLastKnownName; - if (ownerUUID.toString().equals("00000000-0000-0000-0000-000000000000")) //check for server land - return "Server_Land"; + if (ownerUUID.toString().equals(Residence.getServerLandUUID())) //check for server land + return Residence.getServerLandname(); String name = Residence.getPlayerName(ownerUUID);//try to find the owner's name if (name == null) return ownerLastKnownName;//return last known if we cannot find it @@ -421,10 +418,10 @@ public static ResidencePermissions load(ClaimedResidence res, Map resNameList = Residence.getResidenceManager().getResidenceList(false, false); - int i = 0; - - OfflinePlayer[] offplayer = Bukkit.getOfflinePlayers(); - - HashMap playermap = new HashMap(); - - for (OfflinePlayer one : offplayer) { - playermap.put(one.getUniqueId(), one); - } - - int interval = Residence.getConfigManager().getResidenceFileCleanDays(); - long time = System.currentTimeMillis(); - - for (String oneName : resNameList) { - ClaimedResidence res = Residence.getResidenceManager().getByName(oneName); - if (res == null) - continue; - - if (!playermap.containsKey(res.getOwnerUUID())) - continue; - - OfflinePlayer player = playermap.get(res.getOwnerUUID()); - - if (player == null) - continue; - - if (!Residence.getConfigManager().getCleanWorlds().contains(res.getWorld())) - continue; - - if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase("server_land")) - continue; - - long lastPlayed = player.getLastPlayed(); - int dif = (int) ((time - lastPlayed) / 1000 / 60 / 60 / 24); - if (dif < interval) - continue; - - if (ResidenceVaultAdapter.hasPermission(player, "residence.cleanbypass", res.getWorld())) - continue; - - Residence.getResidenceManager().removeResidence(oneName); - i++; - } - Bukkit.getConsoleSender().sendMessage("[Residence] Auto CleanUp deleted " + i + " residences!"); - } -} +package com.bekvon.bukkit.residence.utils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; + +public class FileCleanUp { + + public static void cleanFiles() { + + ArrayList resNameList = Residence.getResidenceManager().getResidenceList(false, false); + int i = 0; + + OfflinePlayer[] offplayer = Bukkit.getOfflinePlayers(); + + HashMap playermap = new HashMap(); + + for (OfflinePlayer one : offplayer) { + playermap.put(one.getUniqueId(), one); + } + + int interval = Residence.getConfigManager().getResidenceFileCleanDays(); + long time = System.currentTimeMillis(); + + for (String oneName : resNameList) { + ClaimedResidence res = Residence.getResidenceManager().getByName(oneName); + if (res == null) + continue; + + if (!playermap.containsKey(res.getOwnerUUID())) + continue; + + OfflinePlayer player = playermap.get(res.getOwnerUUID()); + + if (player == null) + continue; + + if (!Residence.getConfigManager().getCleanWorlds().contains(res.getWorld())) + continue; + + if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(Residence.getServerLandname())) + continue; + + long lastPlayed = player.getLastPlayed(); + int dif = (int) ((time - lastPlayed) / 1000 / 60 / 60 / 24); + if (dif < interval) + continue; + + if (ResidenceVaultAdapter.hasPermission(player, "residence.cleanbypass", res.getWorld())) + continue; + + Residence.getResidenceManager().removeResidence(oneName); + i++; + } + Bukkit.getConsoleSender().sendMessage("[Residence] Auto CleanUp deleted " + i + " residences!"); + } +} From 94c81ea2dc6a5300fc380860486ed330791021f3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 27 Nov 2015 20:51:10 +0200 Subject: [PATCH 0100/1142] GUI desc fix, new flags --- src/com/bekvon/bukkit/residence/Locale.java | 18 ++++ .../bekvon/bukkit/residence/NewLanguage.java | 14 +++ .../residence/ResidenceCommandListener.java | 1 + .../bekvon/bukkit/residence/gui/SetFlag.java | 99 ++++++++++++------- .../listeners/ResidenceEntityListener.java | 34 +++++-- .../listeners/ResidencePlayerListener.java | 20 +++- .../residence/protection/FlagPermissions.java | 9 ++ src/plugin.yml | 2 +- 8 files changed, 153 insertions(+), 44 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 1316e7699..476d76880 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -966,6 +966,24 @@ public static void LoadLang(String lang) { "Allows to join residence chat room", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chat.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // nodurability + FlagList.add("nodurability"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nodurability.Description", + "Prevents item durability loss", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nodurability.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // mobitemdrop + FlagList.add("mobitemdrop"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobitemdrop.Description", + "Prevents mob droping items on death", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobitemdrop.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // mobexpdrop + FlagList.add("mobexpdrop"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobexpdrop.Description", + "Prevents mob droping exp on death", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobexpdrop.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // Filling with custom flags info Set sec = conf.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands").getKeys(false); diff --git a/src/com/bekvon/bukkit/residence/NewLanguage.java b/src/com/bekvon/bukkit/residence/NewLanguage.java index ef955f77a..6e8f23415 100644 --- a/src/com/bekvon/bukkit/residence/NewLanguage.java +++ b/src/com/bekvon/bukkit/residence/NewLanguage.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Set; import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; @@ -105,6 +106,19 @@ public static List getMessageList(String key) { return enlocale.getStringList(key).size() > 0 ? Locale.ColorsArray(enlocale.getStringList(key), true) : Arrays.asList(missing); } + /** + * Get the message with the correct key + * + * @param key + * - the key of the message + * @return the message + */ + public static Set getKeyList(String key) { + if (customlocale.isConfigurationSection(key)) + return customlocale.getConfigurationSection(key).getKeys(false); + return enlocale.getConfigurationSection(key).getKeys(false); + } + /** * Check if key exists * diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 7e9c90092..bbccfa69f 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1552,6 +1552,7 @@ private boolean commandResCreate(String[] args, boolean resadmin, Player player, if (args.length != 2) { return false; } + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); if (wep != null) { if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 106802f15..987297d4b 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -6,9 +6,11 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; @@ -31,6 +33,8 @@ public class SetFlag { private LinkedHashMap permMap = new LinkedHashMap(); private LinkedHashMap> description = new LinkedHashMap>(); private boolean admin = false; + private int page = 1; + private int pageCount = 1; public SetFlag(String residence, Player player, boolean admin) { this.residence = residence; @@ -77,6 +81,18 @@ else if (click.isLeftClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTOR else if (click.isRightClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTORY) return; + if (slot == 53) { + if (page < pageCount) + page++; + recalculateInv(); + return; + } else if (slot == 45) { + if (page > 1) + page--; + recalculateInv(); + return; + } + String flag = ""; int i = 0; for (Entry one : permMap.entrySet()) { @@ -104,38 +120,23 @@ public void recalculateInv() { } private void fillFlagDescriptions() { - List list = NewLanguage.getMessageList("CommandHelp.SubCommands.res.SubCommands.flags.Info"); - for (Entry one : Residence.getPermissionManager().getAllFlags().getFlags().entrySet()) { - for (String onelist : list) { - - String onelisttemp = ChatColor.stripColor(onelist); - - String splited = ""; - if (!onelisttemp.contains("-")) - continue; - - splited = onelisttemp.split("-")[0]; - if (!splited.toLowerCase().contains(one.getKey().toLowerCase())) - continue; - - List lore = new ArrayList(); - - int i = 0; - String sentence = ""; - for (String oneWord : onelist.split(" ")) { - sentence += oneWord + " "; - if (i > 4) { - lore.add(ChatColor.YELLOW + sentence); - sentence = ""; - i = 0; - } - i++; + Set list = NewLanguage.getKeyList("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands"); + for (String onelist : list) { + String onelisttemp = NewLanguage.getMessage("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + onelist + ".Description"); + List lore = new ArrayList(); + int i = 0; + String sentence = ""; + for (String oneWord : onelisttemp.split(" ")) { + sentence += oneWord + " "; + if (i > 4) { + lore.add(ChatColor.YELLOW + sentence); + sentence = ""; + i = 0; } - lore.add(ChatColor.YELLOW + sentence); - description.put(one.getKey(), lore); - break; - + i++; } + lore.add(ChatColor.YELLOW + sentence); + description.put(onelist, lore); } } @@ -165,13 +166,15 @@ public void recalculateInv(ClaimedResidence res) { resFlags.put(one.getKey(), one.getValue()); } } + LinkedHashMap TempPermMap = new LinkedHashMap(); for (Entry one : globalFlags.entrySet()) { if (resFlags.containsKey(one.getKey())) - permMap.put(one.getKey(), resFlags.get(one.getKey()) ? 1 : 0); + TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? 1 : 0); else - permMap.put(one.getKey(), 2); + TempPermMap.put(one.getKey(), 2); } + String title = ""; if (targetPlayer == null) title = NewLanguage.getMessage("Language.Gui.Set.Title").replace("%1%", res.getName()); @@ -185,11 +188,28 @@ public void recalculateInv(ClaimedResidence res) { Inventory GuiInv = Bukkit.createInventory(null, 54, title); int i = 0; - permMap = (LinkedHashMap) Sorting.sortByKeyASC(permMap); + TempPermMap = (LinkedHashMap) Sorting.sortByKeyASC(TempPermMap); FlagData flagData = FlagUtil.getFlagData(); + pageCount = (int) Math.ceil((double) TempPermMap.size() / (double) 45); + + int start = page * 45 - 45; + int end = page * 45; + + int count = -1; + permMap.clear(); + for (Entry one : TempPermMap.entrySet()) { + count++; + if (count >= end) + break; + if (count < start) + continue; + permMap.put(one.getKey(), one.getValue()); + } + for (Entry one : permMap.entrySet()) { + ItemStack MiscInfo = Residence.getConfigManager().getGuiRemove(); switch (one.getValue()) { @@ -243,6 +263,19 @@ public void recalculateInv(ClaimedResidence res) { if (i > 53) break; } + ItemStack Item = new ItemStack(Material.ARROW); + + ItemMeta meta = Item.getItemMeta(); + if (page > 1) { + meta.setDisplayName(NewLanguage.getMessage("Language.PrevInfoPage")); + Item.setItemMeta(meta); + GuiInv.setItem(45, Item); + } + if (page < pageCount) { + meta.setDisplayName(NewLanguage.getMessage("Language.NextInfoPage")); + Item.setItemMeta(meta); + GuiInv.setItem(53, Item); + } this.inventory = GuiInv; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index b6832af53..6547880cc 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -23,6 +23,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityInteractEvent; import org.bukkit.event.entity.PotionSplashEvent; @@ -138,6 +139,20 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST) + public void OnEntityDeath(EntityDeathEvent event) { + if (event.getEntity() instanceof Player) + return; + Location loc = event.getEntity().getLocation(); + FlagPermissions perms = Residence.getPermsByLoc(loc); + if (!perms.has("mobitemdrop", true)) { + event.getDrops().clear(); + } + if (!perms.has("mobexpdrop", true)) { + event.setDroppedExp(0); + } + } + @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(VehicleDestroyEvent event) { @@ -377,7 +392,6 @@ public void onEntityCombust(EntityCombustEvent event) { } } - @SuppressWarnings("incomplete-switch") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onExplosionPrime(ExplosionPrimeEvent event) { EntityType entity = event.getEntityType(); @@ -410,6 +424,8 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { event.getEntity().remove(); } break; + default: + break; } } @@ -425,27 +441,23 @@ public void onEntityExplode(EntityExplodeEvent event) { switch (entity) { case CREEPER: - if (!perms.has("creeper", perms.has("explode", true))) { + if (!perms.has("creeper", perms.has("explode", true))) cancel = true; - } break; case PRIMED_TNT: case MINECART_TNT: - if (!perms.has("tnt", perms.has("explode", true))) { + if (!perms.has("tnt", perms.has("explode", true))) cancel = true; - } break; case SMALL_FIREBALL: case FIREBALL: - if (!perms.has("fireball", perms.has("explode", true))) { + if (!perms.has("fireball", perms.has("explode", true))) cancel = true; - } break; case WITHER_SKULL: case WITHER: - if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) { + if (!perms.has("wither", perms.has("explode", world.has("wither", world.has("explode", true))))) cancel = true; - } break; } @@ -469,6 +481,10 @@ public void onEntityExplode(EntityExplodeEvent event) { if (!blockperms.has("tnt", blockperms.has("explode", true))) preserve.add(block); continue; + case ENDER_CRYSTAL: + if (!blockperms.has("explode", true)) + preserve.add(block); + continue; case SMALL_FIREBALL: case FIREBALL: if (!blockperms.has("fireball", blockperms.has("explode", true))) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c227077fd..6da89cb7f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -41,6 +41,7 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerItemDamageEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; @@ -48,6 +49,7 @@ import org.bukkit.event.player.PlayerShearEntityEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.PlayerManager; @@ -170,7 +172,7 @@ public void onFlagGuiClick(InventoryClickEvent event) { InventoryAction action = event.getAction(); setFlag.toggleFlag(slot, click, action); setFlag.recalculateInv(); - player.getOpenInventory().getTopInventory().setItem(slot, setFlag.getInventory().getItem(slot)); + player.getOpenInventory().getTopInventory().setContents(setFlag.getInventory().getContents()); } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @@ -376,6 +378,22 @@ public void run() { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onItemDamage(PlayerItemDamageEvent event) { + Player player = event.getPlayer(); + Location loc = player.getLocation(); + FlagPermissions perms = Residence.getPermsByLoc(loc); + if (perms.has("nodurability", false)) { + ItemStack held = player.getItemInHand(); + if (held.getType() != Material.AIR) { + held.setDurability(held.getDurability()); + player.setItemInHand(held); + event.setDamage(0); + event.setCancelled(true); + } + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerSpawn(PlayerRespawnEvent event) { Location loc = event.getRespawnLocation(); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 1f4b3ce9d..9af00a3e7 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -152,6 +152,8 @@ public static void initValidFlags() { addFlag("command"); addFlag("chat"); + + addFlag("nodurability"); addResidenceOnlyFlag("trample"); addResidenceOnlyFlag("pvp"); @@ -196,6 +198,13 @@ public static void initValidFlags() { // Players will keep hes exp on death addResidenceOnlyFlag("keepexp"); + + // Players will keep hes exp on death + addResidenceOnlyFlag("mobitemdrop"); + + // Players will keep hes exp on death + addResidenceOnlyFlag("mobexpdrop"); + // Special flag for making residence as shop addResidenceOnlyFlag("shop"); diff --git a/src/plugin.yml b/src/plugin.yml index db526a5dc..fe5d579df 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.11.1 +version: 2.9.12.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 39c787009db61b87dadccec12c9c9e2ae1837006 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 27 Nov 2015 20:54:28 +0200 Subject: [PATCH 0101/1142] Ok, this one is only for residence --- .../bekvon/bukkit/residence/protection/FlagPermissions.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 9af00a3e7..16cc3e605 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -153,8 +153,6 @@ public static void initValidFlags() { addFlag("chat"); - addFlag("nodurability"); - addResidenceOnlyFlag("trample"); addResidenceOnlyFlag("pvp"); addResidenceOnlyFlag("fireball"); @@ -205,6 +203,8 @@ public static void initValidFlags() { // Players will keep hes exp on death addResidenceOnlyFlag("mobexpdrop"); + // Players will not lose item durability + addResidenceOnlyFlag("nodurability"); // Special flag for making residence as shop addResidenceOnlyFlag("shop"); From 2a97102e8acdc283b5eff1c423131b39b0b1361c Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 29 Nov 2015 14:23:19 +0200 Subject: [PATCH 0102/1142] Fixing particle effects --- src/com/bekvon/bukkit/residence/Locale.java | 12 + .../residence/ResidenceCommandListener.java | 7 +- .../listeners/ResidenceBlockListener.java | 18 ++ .../listeners/ResidenceEntityListener.java | 4 + .../residence/protection/FlagPermissions.java | 6 + .../residence/selection/SelectionManager.java | 232 +++++++++--------- .../selection/WorldEditSelectionManager.java | 2 +- src/plugin.yml | 2 +- 8 files changed, 160 insertions(+), 123 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 476d76880..2b133dadb 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -984,6 +984,18 @@ public static void LoadLang(String lang) { "Prevents mob droping exp on death", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobexpdrop.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // dragongrief + FlagList.add("dragongrief"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dragongrief.Description", + "Prevents ender dragon block griefing", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dragongrief.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // snowtrail + FlagList.add("snowtrail"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowtrail.Description", + "Prevents snowman snow trails", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowtrail.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // Filling with custom flags info Set sec = conf.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands").getKeys(false); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index bbccfa69f..8f6a85e07 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1380,6 +1380,11 @@ private boolean commandResContract(String[] args, boolean resadmin, Player playe return true; } + if (amount > 1000) { + player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + return true; + } + if (amount < 0) amount = amount * -1; @@ -1552,7 +1557,7 @@ private boolean commandResCreate(String[] args, boolean resadmin, Player player, if (args.length != 2) { return false; } - + WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); if (wep != null) { if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 4e0050c40..0762ca191 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -13,11 +13,13 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.entity.Snowman; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockDispenseEvent; +import org.bukkit.event.block.BlockFormEvent; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; @@ -36,6 +38,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockSpreadEvent; +import org.bukkit.event.block.EntityBlockFormEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.inventory.ItemStack; @@ -52,6 +55,7 @@ public class ResidenceBlockListener implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { + Player player = event.getPlayer(); if (Residence.isResAdminOn(player)) { return; @@ -87,6 +91,20 @@ public void onBlockBreak(BlockBreakEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockForm(BlockFormEvent event) { + + if (!(event instanceof EntityBlockFormEvent)) + return; + + if (((EntityBlockFormEvent) event).getEntity() instanceof Snowman) { + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("snowtrail", true)) { + event.setCancelled(true); + } + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockFall(EntityChangeBlockEvent event) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 6547880cc..77602a380 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -481,6 +481,10 @@ public void onEntityExplode(EntityExplodeEvent event) { if (!blockperms.has("tnt", blockperms.has("explode", true))) preserve.add(block); continue; + case ENDER_DRAGON: + if (!blockperms.has("dragongrief", false)) + preserve.add(block); + break; case ENDER_CRYSTAL: if (!blockperms.has("explode", true)) preserve.add(block); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 16cc3e605..ae6dc8016 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -208,6 +208,12 @@ public static void initValidFlags() { // Special flag for making residence as shop addResidenceOnlyFlag("shop"); + + // Prevent ender dragon block grief + addResidenceOnlyFlag("dragongrief"); + + // Prevent snowman snow trail + addResidenceOnlyFlag("snowtrail"); addPlayerOrGroupOnlyFlag("admin"); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 79ed37d10..998be1265 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -47,6 +47,18 @@ public SelectionManager(Server server) { playerLoc2 = Collections.synchronizedMap(new HashMap()); } + public void updateLocations(Player player, Location loc1, Location loc2) { + if (loc1 != null && loc2 != null) { + playerLoc1.put(player.getName(), loc1); + playerLoc2.put(player.getName(), loc2); + if (Residence.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName())) { + this.qsky(player); + this.qbedrock(player); + } +// this.afterSelectionUpdate(player); + } + } + public void placeLoc1(Player player, Location loc) { if (loc != null) { playerLoc1.put(player.getName(), loc); @@ -143,7 +155,7 @@ public static boolean showParticleWalls(final Player player, final Location Curr return false; } - public void NewMakeBorders(final Player player, Location OriginalLow, Location OriginalHigh, boolean error) { + public void NewMakeBorders(final Player player, final Location OriginalLow, final Location OriginalHigh, final boolean error) { if (!Residence.getConfigManager().useVisualizer()) return; @@ -152,88 +164,65 @@ public void NewMakeBorders(final Player player, Location OriginalLow, Location O normalPrintMap.put(player.getName(), System.currentTimeMillis()); else errorPrintMap.put(player.getName(), System.currentTimeMillis()); - MakeBorders(player, OriginalLow, OriginalHigh, error); + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + MakeBorders(player, OriginalLow, OriginalHigh, error); + return; + } + }); } public boolean MakeBorders(final Player player, final Location OriginalLow, final Location OriginalHigh, final boolean error) { - Boolean NorthSide = true, WestSide = true, EastSide = true, SouthSide = true, TopSide = true, BottomSide = true; - - Double OLX = OriginalLow.getX(); - if (OriginalLow.getX() > OriginalHigh.getX()) - OLX = OriginalHigh.getX(); - - Double OLY = OriginalLow.getY(); - if (OriginalLow.getY() > OriginalHigh.getY()) - OLY = OriginalHigh.getY(); - - Double OLZ = OriginalLow.getZ(); - if (OriginalLow.getZ() > OriginalHigh.getZ()) - OLZ = OriginalHigh.getZ(); - - Location Current = new Location(OriginalHigh.getWorld(), OLX, OLY, OLZ); - - Double OHX = OriginalHigh.getX() + 1; - if (OriginalHigh.getX() < OriginalLow.getX()) - OHX = OriginalLow.getX() + 1; - - Double OHY = OriginalHigh.getY() + 1; - if (OriginalHigh.getY() < OriginalLow.getY()) - OHY = OriginalLow.getY() + 1; + CuboidArea cuboidArea = new CuboidArea(OriginalLow, OriginalHigh); + cuboidArea.getHighLoc().add(1, 1, 1); - Double OHZ = OriginalHigh.getZ() + 1; - if (OriginalHigh.getZ() < OriginalLow.getZ()) - OHZ = OriginalLow.getZ() + 1; + Boolean NorthSide = true, WestSide = true, EastSide = true, SouthSide = true, TopSide = true, BottomSide = true; int Range = Residence.getConfigManager().getVisualizerRange(); - double PLLX = player.getLocation().getX() - Range; - double PLLZ = player.getLocation().getZ() - Range; - double PLLY = player.getLocation().getY() - Range; - double PLHX = player.getLocation().getX() + Range; - double PLHZ = player.getLocation().getZ() + Range; - double PLHY = player.getLocation().getY() + Range; + Location loc = player.getLocation(); + double PLLX = loc.getX() - Range; + double PLLZ = loc.getZ() - Range; + double PLLY = loc.getY() - Range; + double PLHX = loc.getX() + Range; + double PLHZ = loc.getZ() + Range; + double PLHY = loc.getY() + Range; - if (OLX < PLLX) { - OLX = PLLX; + if (cuboidArea.getLowLoc().getBlockX() < PLLX) { + cuboidArea.getLowLoc().setX(PLLX); WestSide = false; } - if (OHX > PLHX) { - OHX = PLHX; + if (cuboidArea.getHighLoc().getBlockX() > PLHX) { + cuboidArea.getHighLoc().setX(PLHX); EastSide = false; } - if (OLZ < PLLZ) { - OLZ = PLLZ; + if (cuboidArea.getLowLoc().getBlockZ() < PLLZ) { + cuboidArea.getLowLoc().setZ(PLLZ); NorthSide = false; } - if (OHZ > PLHZ) { - OHZ = PLHZ; + if (cuboidArea.getHighLoc().getBlockZ() > PLHZ) { + cuboidArea.getHighLoc().setZ(PLHZ); SouthSide = false; } - if (OLY < PLLY) { - OLY = PLLY; + if (cuboidArea.getLowLoc().getBlockY() < PLLY) { + cuboidArea.getLowLoc().setY(PLLY); BottomSide = false; } - if (OHY > PLHY) { - OHY = PLHY; + if (cuboidArea.getHighLoc().getBlockY() > PLHY) { + cuboidArea.getHighLoc().setY(PLHY); TopSide = false; } - double TX = OLX - OHX; - double TY = OLY - OHY; - double TZ = OLZ - OHZ; - - if (TX < 0) - TX = TX * -1; - if (TY < 0) - TY = TY * -1; - if (TZ < 0) - TZ = TZ * -1; + double TX = cuboidArea.getHighLoc().getBlockX() - cuboidArea.getLowLoc().getBlockX(); + double TY = cuboidArea.getHighLoc().getBlockY() - cuboidArea.getLowLoc().getBlockY(); + double TZ = cuboidArea.getHighLoc().getBlockZ() - cuboidArea.getLowLoc().getBlockZ(); if (!error && normalIDMap.containsKey(player.getName())) { Bukkit.getScheduler().cancelTask(normalIDMap.get(player.getName())); @@ -241,7 +230,7 @@ public boolean MakeBorders(final Player player, final Location OriginalLow, fina Bukkit.getScheduler().cancelTask(errorIDMap.get(player.getName())); } - DrawBounds(player, TX, TY, TZ, OLX, OLY, OLZ, EastSide, SouthSide, WestSide, NorthSide, TopSide, BottomSide, Current, error); + DrawBounds(player, TX, TY, TZ, cuboidArea.getLowLoc(), EastSide, SouthSide, WestSide, NorthSide, TopSide, BottomSide, error); String planerName = player.getName(); if (!error && !normalPrintMap.containsKey(planerName)) @@ -256,14 +245,9 @@ else if (error && errorPrintMap.get(planerName) + Residence.getConfigManager().g int scid = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { public void run() { - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { - @Override - public void run() { - if (player.isOnline()) - MakeBorders(player, OriginalLow, OriginalHigh, error); - return; - } - }); + + if (player.isOnline()) + MakeBorders(player, OriginalLow, OriginalHigh, error); return; } }, Residence.getConfigManager().getVisualizerUpdateInterval() * 1L); @@ -275,9 +259,14 @@ public void run() { return true; } - public void DrawBounds(final Player player, final Double TX, final Double TY, final Double TZ, final Double OLX, final Double OLY, final Double OLZ, - final Boolean EastSide, final Boolean SouthSide, final Boolean WestSide, final Boolean NorthSide, final Boolean TopSide, final Boolean BottomSide, - final Location Current, boolean error) { + public void DrawBounds(Player player, Double TX, Double TY, Double TZ, Location lowLoc, Boolean EastSide, Boolean SouthSide, Boolean WestSide, Boolean NorthSide, + Boolean TopSide, Boolean BottomSide, boolean error) { + + Location Current = lowLoc; + + double OLX = lowLoc.getBlockX(); + double OLY = lowLoc.getBlockY(); + double OLZ = lowLoc.getBlockZ(); int eachCollumn = Residence.getConfigManager().getVisualizerRowSpacing(); int eachRow = Residence.getConfigManager().getVisualizerCollumnSpacing(); @@ -610,12 +599,12 @@ public boolean worldEdit(Player player) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldEditNotFound")); return false; } - + public boolean worldEditUpdate(Player player) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldEditNotFound")); return false; } - + public void selectBySize(Player player, int xsize, int ysize, int zsize) { Location myloc = player.getLocation(); Location loc1 = new Location(myloc.getWorld(), myloc.getBlockX() + xsize, myloc.getBlockY() + ysize, myloc.getBlockZ() + zsize); @@ -626,7 +615,7 @@ public void selectBySize(Player player, int xsize, int ysize, int zsize) { showSelectionInfo(player); } - public void modify(Player player, boolean shift, int amount) { + public void modify(Player player, boolean shift, double amount) { if (!hasPlacedBoth(player.getName())) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); return; @@ -636,24 +625,9 @@ public void modify(Player player, boolean shift, int amount) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidDirection")); } CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); - if (d == Direction.UP) { - int oldy = area.getHighLoc().getBlockY(); - oldy = oldy + amount; - if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooHigh")); - oldy = player.getLocation().getWorld().getMaxHeight() - 1; - } - area.getHighLoc().setY(oldy); - if (shift) { - int oldy2 = area.getLowLoc().getBlockY(); - oldy2 = oldy2 + amount; - area.getLowLoc().setY(oldy2); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.Up") + " (" + amount + ")"); - } else - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.Up") + " (" + amount + ")"); - } - if (d == Direction.DOWN) { - int oldy = area.getLowLoc().getBlockY(); + switch (d) { + case DOWN: + double oldy = area.getLowLoc().getBlockY(); oldy = oldy - amount; if (oldy < MIN_HEIGHT) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooLow")); @@ -661,66 +635,84 @@ public void modify(Player player, boolean shift, int amount) { } area.getLowLoc().setY(oldy); if (shift) { - int oldy2 = area.getHighLoc().getBlockY(); + double oldy2 = area.getHighLoc().getBlockY(); oldy2 = oldy2 - amount; area.getHighLoc().setY(oldy2); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.Down") + " (" + amount + ")"); } else player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.Down") + " (" + amount + ")"); - } - if (d == Direction.MINUSX) { - int oldx = area.getLowLoc().getBlockX(); + break; + case MINUSX: + double oldx = area.getLowLoc().getBlockX(); oldx = oldx - amount; area.getLowLoc().setX(oldx); if (shift) { - int oldx2 = area.getHighLoc().getBlockX(); + double oldx2 = area.getHighLoc().getBlockX(); oldx2 = oldx2 - amount; area.getHighLoc().setX(oldx2); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.West") + " (" + amount + ")"); } else player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.West") + " (" + amount + ")"); - } - if (d == Direction.PLUSX) { - int oldx = area.getHighLoc().getBlockX(); - oldx = oldx + amount; - area.getHighLoc().setX(oldx); - if (shift) { - int oldx2 = area.getLowLoc().getBlockX(); - oldx2 = oldx2 + amount; - area.getLowLoc().setX(oldx2); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.East") + " (" + amount + ")"); - } else - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.East") + " (" + amount + ")"); - } - if (d == Direction.MINUSZ) { - int oldz = area.getLowLoc().getBlockZ(); + break; + case MINUSZ: + double oldz = area.getLowLoc().getBlockZ(); oldz = oldz - amount; area.getLowLoc().setZ(oldz); if (shift) { - int oldz2 = area.getHighLoc().getBlockZ(); + double oldz2 = area.getHighLoc().getBlockZ(); oldz2 = oldz2 - amount; area.getHighLoc().setZ(oldz2); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.North") + " (" + amount + ")"); } else player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.North") + " (" + amount + ")"); - } - if (d == Direction.PLUSZ) { - int oldz = area.getHighLoc().getBlockZ(); + break; + case PLUSX: + oldx = area.getHighLoc().getBlockX(); + oldx = oldx + amount; + area.getHighLoc().setX(oldx); + if (shift) { + double oldx2 = area.getLowLoc().getBlockX(); + oldx2 = oldx2 + amount; + area.getLowLoc().setX(oldx2); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.East") + " (" + amount + ")"); + } else + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.East") + " (" + amount + ")"); + break; + case PLUSZ: + oldz = area.getHighLoc().getBlockZ(); oldz = oldz + amount; area.getHighLoc().setZ(oldz); if (shift) { - int oldz2 = area.getLowLoc().getBlockZ(); + double oldz2 = area.getLowLoc().getBlockZ(); oldz2 = oldz2 + amount; area.getLowLoc().setZ(oldz2); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.South") + " (" + amount + ")"); } else player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.South") + " (" + amount + ")"); + break; + case UP: + oldy = area.getHighLoc().getBlockY(); + oldy = oldy + amount; + if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooHigh")); + oldy = player.getLocation().getWorld().getMaxHeight() - 1; + } + area.getHighLoc().setY(oldy); + if (shift) { + double oldy2 = area.getLowLoc().getBlockY(); + oldy2 = oldy2 + amount; + area.getLowLoc().setY(oldy2); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.Up") + " (" + amount + ")"); + } else + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.Up") + " (" + amount + ")"); + break; + default: + break; } - playerLoc1.put(player.getName(), area.getHighLoc()); - playerLoc2.put(player.getName(), area.getLowLoc()); + updateLocations(player, area.getHighLoc(), area.getLowLoc()); } - public boolean contract(Player player, int amount, boolean resadmin) { + public boolean contract(Player player, double amount, boolean resadmin) { if (!hasPlacedBoth(player.getName())) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); return false; @@ -732,7 +724,7 @@ public boolean contract(Player player, int amount, boolean resadmin) { CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); switch (d) { case DOWN: - int oldy = area.getHighLoc().getBlockY(); + double oldy = area.getHighLoc().getBlockY(); oldy = oldy - amount; if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooHigh")); @@ -742,13 +734,13 @@ public boolean contract(Player player, int amount, boolean resadmin) { player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.Down") + " (" + amount + ")"); break; case MINUSX: - int oldx = area.getHighLoc().getBlockX(); + double oldx = area.getHighLoc().getBlockX(); oldx = oldx - amount; area.getHighLoc().setX(oldx); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.West") + " (" + amount + ")"); break; case MINUSZ: - int oldz = area.getHighLoc().getBlockZ(); + double oldz = area.getHighLoc().getBlockZ(); oldz = oldz - amount; area.getHighLoc().setZ(oldz); player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.North") + " (" + amount + ")"); diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index de737ffce..59fb50153 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -80,7 +80,7 @@ public void bedrock(Player player, boolean resadmin) { } @Override - public void modify(Player player, boolean shift, int amount) { + public void modify(Player player, boolean shift, double amount) { super.modify(player, shift, amount); this.worldEditUpdate(player); afterSelectionUpdate(player); diff --git a/src/plugin.yml b/src/plugin.yml index fe5d579df..20d81c936 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.12.0 +version: 2.9.13.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 17d2b41c929609a2ff98f4c69323b5ced1d6112c Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 5 Dec 2015 19:11:01 +0200 Subject: [PATCH 0103/1142] New flag respawn/ multiple random teleportation / small fix with move --- .../bukkit/residence/ConfigManager.java | 78 ++++++++++++------- src/com/bekvon/bukkit/residence/Locale.java | 6 ++ .../residence/ResidenceCommandListener.java | 2 +- .../residence/containers/RandomTeleport.java | 50 ++++++++++++ .../listeners/ResidencePlayerListener.java | 59 +++++++++----- .../permissions/PermissionManager.java | 10 ++- .../residence/protection/FlagPermissions.java | 3 + .../residence/selection/AutoSelection.java | 3 - .../bukkit/residence/utils/RandomTp.java | 30 +++++-- src/plugin.yml | 2 +- 10 files changed, 182 insertions(+), 61 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/containers/RandomTeleport.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index a65adf720..a46e20c7d 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -4,6 +4,7 @@ import org.bukkit.ChatColor; import org.bukkit.Location; +import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ParticleEffects; @@ -134,9 +135,8 @@ public class ConfigManager { protected Location KickLocation; - protected Location rtCenter; - protected int rtMaxCoord; - protected int rtMinCoord; + protected List RTeleport = new ArrayList(); + protected int rtCooldown; protected int rtMaxTries; @@ -420,23 +420,55 @@ void UpdateConfigFile() { writer.addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); TeleportDelay = GetConfig("Global.Tp.TeleportDelay", 3, writer, conf); - writer.addComment("Global.RandomTeleportation.MaxCoord", - "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); - rtMaxCoord = GetConfig("Global.RandomTeleportation.MaxCoord", 1000, writer, conf); - writer.addComment("Global.RandomTeleportation.MinCoord", - "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); - rtMinCoord = GetConfig("Global.RandomTeleportation.MinCoord", 500, writer, conf); + if (conf.contains("Global.RandomTeleportation.WorldName")) { + + String path = "Global.RandomTeleportation."; + String WorldName = conf.getString(path + "WorldName", defaultWorldName); + + int MaxCoord = conf.getInt(path + "MaxCoord", 1000); + int MinCord = conf.getInt(path + "MinCord", 500); + int CenterX = conf.getInt(path + "CenterX", 0); + int CenterZ = conf.getInt(path + "CenterZ", 0); - writer.addComment("Global.RandomTeleportation.WorldName", "World to use this function, set main residence world"); - String rtWorld = GetConfig("Global.RandomTeleportation.WorldName", defaultWorldName, writer, conf, false); + RTeleport.add(new RandomTeleport(WorldName, MaxCoord, MinCord, CenterX, CenterZ)); - int rtCenterX = GetConfig("Global.RandomTeleportation.CenterX", 0, writer, conf); - int rtCenterZ = GetConfig("Global.RandomTeleportation.CenterZ", 0, writer, conf); + GetConfig("Global.RandomTeleportation." + WorldName + ".MaxCord", MaxCoord, writer, conf); + GetConfig("Global.RandomTeleportation." + WorldName + ".MinCord", MinCord, writer, conf); + GetConfig("Global.RandomTeleportation." + WorldName + ".CenterX", CenterX, writer, conf); + GetConfig("Global.RandomTeleportation." + WorldName + ".CenterZ", CenterZ, writer, conf); + } else { + if (conf.isConfigurationSection("Global.RandomTeleportation")) + for (String one : conf.getConfigurationSection("Global.RandomTeleportation").getKeys(false)) { + String path = "Global.RandomTeleportation." + one + "."; - World world = Bukkit.getWorld(rtWorld); - rtCenter = new Location(Bukkit.getWorlds().get(0), 0, 63, 0); - if (world != null) - rtCenter = new Location(world, rtCenterX, 63, rtCenterZ); + writer.addComment("Global.RandomTeleportation." + one, "World to use this function, set main residence world"); + + writer.addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); + int MaxCoord = GetConfig(path + "MaxCoord", 1000, writer, conf); + writer.addComment(path + "MinCord", + "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); + int MinCord = GetConfig(path + "MinCord", 500, writer, conf); + int CenterX = GetConfig(path + "CenterX", 0, writer, conf); + int CenterZ = GetConfig(path + "CenterZ", 0, writer, conf); + + RTeleport.add(new RandomTeleport(one, MaxCoord, MinCord, CenterX, CenterZ)); + } + else { + String path = "Global.RandomTeleportation." + defaultWorldName + "."; + + writer.addComment(path + "WorldName", "World to use this function, set main residence world"); + String WorldName = GetConfig(path + "WorldName", defaultWorldName, writer, conf, false); + + writer.addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); + int MaxCoord = GetConfig(path + "MaxCoord", 1000, writer, conf); + writer.addComment(path + "MinCord", + "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); + int MinCord = GetConfig(path + "MinCord", 500, writer, conf); + int CenterX = GetConfig(path + "CenterX", 0, writer, conf); + int CenterZ = GetConfig(path + "CenterZ", 0, writer, conf); + RTeleport.add(new RandomTeleport(WorldName, MaxCoord, MinCord, CenterX, CenterZ)); + } + } writer.addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); rtCooldown = GetConfig("Global.RandomTeleportation.Cooldown", 5, writer, conf); @@ -1146,16 +1178,8 @@ public ItemStack getGuiRemove() { return GuiRemove; } - public Location getrtCenter() { - return rtCenter; - } - - public int getrtMaxCoord() { - return rtMaxCoord; - } - - public int getrtMinCoord() { - return rtMinCoord; + public List getRandomTeleport() { + return RTeleport; } public int getrtCooldown() { diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 2b133dadb..676d9ee72 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -996,6 +996,12 @@ public static void LoadLang(String lang) { "Prevents snowman snow trails", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowtrail.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // respawn + FlagList.add("respawn"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.respawn.Description", + "Automaticaly respawns player", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.respawn.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // Filling with custom flags info Set sec = conf.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands").getKeys(false); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 8f6a85e07..0c3d4b197 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1189,7 +1189,7 @@ public void run() { return true; } - Location loc = RandomTp.getRandomlocation(); + Location loc = RandomTp.getRandomlocation(player.getLocation().getWorld().getName()); rtMap.put(pname, System.currentTimeMillis()); if (loc == null) { diff --git a/src/com/bekvon/bukkit/residence/containers/RandomTeleport.java b/src/com/bekvon/bukkit/residence/containers/RandomTeleport.java new file mode 100644 index 000000000..49757cd0f --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/RandomTeleport.java @@ -0,0 +1,50 @@ +package com.bekvon.bukkit.residence.containers; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; + +public class RandomTeleport { + String WorldName; + int MaxCord; + int MinCord; + int centerX; + int centerZ; + Location loc; + + public RandomTeleport(String WorldName, int MaxCord, int MinCord, int centerX, int centerZ) { + this.WorldName = WorldName; + this.MaxCord = MaxCord; + this.MinCord = MinCord; + this.centerX = centerX; + this.centerZ = centerZ; + } + + public Location getCenter() { + if (loc == null) { + World w = Bukkit.getWorld(WorldName); + this.loc = new Location(w, centerX, 63, centerZ); + } + return this.loc; + } + + public String getWorld() { + return this.WorldName; + } + + public int getMaxCord() { + return this.MaxCord; + } + + public int getMinCord() { + return this.MinCord; + } + + public int getCenterX() { + return this.centerX; + } + + public int getCenterZ() { + return this.centerZ; + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 6da89cb7f..a9595fa58 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -393,7 +393,7 @@ public void onItemDamage(PlayerItemDamageEvent event) { } } } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerSpawn(PlayerRespawnEvent event) { Location loc = event.getRespawnLocation(); @@ -839,7 +839,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerDeath(PlayerDeathEvent event) { + public void onPlayerDeath(final PlayerDeathEvent event) { Player player = event.getEntity(); if (player == null) return; @@ -855,11 +855,21 @@ public void onPlayerDeath(PlayerDeathEvent event) { if (res.getPermissions().has("keepexp", false)) event.setKeepLevel(true); + + if (res.getPermissions().has("respawn", false)) + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + public void run() { + try { + event.getEntity().spigot().respawn(); + } catch (Exception e) { + } + return; + } + }, 1L); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerMove(PlayerMoveEvent event) { - Player player = event.getPlayer(); if (player == null) return; @@ -867,21 +877,26 @@ public void onPlayerMove(PlayerMoveEvent event) { if (player.hasMetadata("NPC")) return; - String name = player.getName(); - long last = lastUpdate.get(name); - long now = System.currentTimeMillis(); - if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) { - return; - } - lastUpdate.put(name, now); Location locfrom = event.getFrom(); Location locto = event.getTo(); if (locfrom.getX() == locto.getX() && locfrom.getY() == locto.getY() && locfrom.getZ() == locto.getZ()) return; - handleNewLocation(player, locto, true); + String name = player.getName(); + + if (name == null) + return; + + long last = lastUpdate.get(name); + long now = System.currentTimeMillis(); + if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) + return; + + this.lastUpdate.put(name, now); - if (Residence.getConfigManager().getTeleportDelay() > 0 && ResidenceCommandListener.teleportDelayMap.contains(player.getName())) { + handleNewLocation(player, locto, true); + if (!ResidenceCommandListener.teleportDelayMap.isEmpty() && Residence.getConfigManager().getTeleportDelay() > 0 && ResidenceCommandListener.teleportDelayMap + .contains(player.getName())) { ResidenceCommandListener.teleportDelayMap.remove(player.getName()); player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportCanceled")); } @@ -909,16 +924,22 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { ResOld = Residence.getResidenceManager().getByName(currentRes.get(pname)); if (ResOld == null) { currentRes.remove(pname); + } else { + if (res != null && ResOld.getName().equals(res.getName())) { + return; + } } } - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { - @Override - public void run() { - AutoSelection.UpdateSelection(player); - return; - } - }); + if (!AutoSelection.getList().isEmpty()) { + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + AutoSelection.UpdateSelection(player); + return; + } + }); + } if (res == null) { lastOutsideLoc.put(pname, loc); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 7c989072d..50d6d6f72 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -181,10 +181,12 @@ private void readConfig(FileConfiguration config, FileConfiguration flags) { if (!groups.containsKey(defaultGroup)) { groups.put(defaultGroup, new PermissionGroup(defaultGroup)); } - Set keys = config.getConfigurationSection("GroupAssignments").getKeys(false); - if (keys != null) { - for (String key : keys) { - playersGroup.put(key.toLowerCase(), config.getString("GroupAssignments." + key, defaultGroup).toLowerCase()); + if (config.isConfigurationSection("GroupAssignments")) { + Set keys = config.getConfigurationSection("GroupAssignments").getKeys(false); + if (keys != null) { + for (String key : keys) { + playersGroup.put(key.toLowerCase(), config.getString("GroupAssignments." + key, defaultGroup).toLowerCase()); + } } } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index ae6dc8016..03409be60 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -214,6 +214,9 @@ public static void initValidFlags() { // Prevent snowman snow trail addResidenceOnlyFlag("snowtrail"); + + // Auto respawn player + addResidenceOnlyFlag("respawn"); addPlayerOrGroupOnlyFlag("admin"); diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index 819396850..ec1943336 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -27,9 +27,6 @@ public static void switchAutoSelection(Player player) { public static void UpdateSelection(Player player) { - if (getList().size() == 0) - return; - if (!getList().containsKey(player.getName().toLowerCase())) return; diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 562fcf555..08f73872a 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -13,13 +13,14 @@ import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; +import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class RandomTp { static int miny = 63; - public static Location getRandomlocation() { + public static Location getRandomlocation(String WorldName) { Random random = new Random(System.currentTimeMillis()); @@ -29,14 +30,31 @@ public static Location getRandomlocation() { int tries = 0; - World world = Residence.getConfigManager().getrtCenter().getWorld(); + RandomTeleport rtloc = null; - int inerrange = Residence.getConfigManager().getrtMinCoord(); - int outerrange = Residence.getConfigManager().getrtMaxCoord(); + for (RandomTeleport one : Residence.getConfigManager().getRandomTeleport()) { + + if (!one.getWorld().equalsIgnoreCase(WorldName)) + continue; + + rtloc = one; + break; + } + + if (rtloc == null) + return null; + + World world = rtloc.getCenter().getWorld(); + + if (world == null) + return null; + + int inerrange = rtloc.getMinCord(); + int outerrange = rtloc.getMaxCord(); int maxtries = Residence.getConfigManager().getrtMaxTries(); - int centerX = Residence.getConfigManager().getrtCenter().getBlockX(); - int centerY = Residence.getConfigManager().getrtCenter().getBlockZ(); + int centerX = rtloc.getCenter().getBlockX(); + int centerY = rtloc.getCenter().getBlockZ(); Location loc = null; diff --git a/src/plugin.yml b/src/plugin.yml index 20d81c936..635b295a1 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.13.1 +version: 2.9.13.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From cc9210521bbc7e8efe5e4a3f1f0156d37b6459c3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 24 Dec 2015 16:07:52 +0200 Subject: [PATCH 0104/1142] Permission feedback/teleportation to middle --- .../bukkit/residence/ConfigManager.java | 8 + src/com/bekvon/bukkit/residence/Locale.java | 1 + .../listeners/ResidenceBlockListener.java | 12 +- .../listeners/ResidenceEntityListener.java | 4 +- .../listeners/ResidencePlayerListener.java | 10 +- .../protection/ClaimedResidence.java | 52 ++- .../protection/ResidencePermissions.java | 9 +- .../residence/selection/SelectionManager.java | 393 ++++++++++++++++++ .../bukkit/residence/utils/CrackShot.java | 2 +- src/plugin.yml | 2 +- 10 files changed, 474 insertions(+), 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index a46e20c7d..1384c2cf9 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -112,6 +112,7 @@ public class ConfigManager { protected boolean NewPlayerFree; protected boolean spoutEnable; protected boolean AutoMobRemoval; + protected boolean BounceAnimation; protected int AutoMobRemovalInterval; protected boolean enableLeaseMoneyAccount; protected boolean CouldronCompatability; @@ -692,6 +693,9 @@ void UpdateConfigFile() { Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } + writer.addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); + BounceAnimation = GetConfig("Global.BounceAnimation", true, writer, conf); + writer.addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); int id = GetConfig("Global.GUI.setTrue.Id", 35, writer, conf); @@ -1193,4 +1197,8 @@ public Location getKickLocation() { public int getrtMaxTries() { return rtMaxTries; } + + public boolean BounceAnimation() { + return BounceAnimation; + } } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 676d9ee72..e9c5d0700 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -187,6 +187,7 @@ public static void LoadLang(String lang) { GetConfig("Language.ParentNoPermission", "You don't have permission to make changes to the parent zone.", writer, conf, true); GetConfig("Language.MessageChange", "Message Set...", writer, conf, true); GetConfig("Language.FlagSet", "&e%1 &2flag set for &e%2 &2to &e%3 &2state", writer, conf, true); + GetConfig("Language.FlagSetFailed", "&cYou dont have access to &6%1 &cflag", writer, conf, true); GetConfig("Language.FlagCheckTrue", "Flag %1 applys to player %2 for residence %3, value = %4", writer, conf, true); GetConfig("Language.FlagCheckFalse", "Flag %1 does not apply to player %2 for residence.", writer, conf, true); GetConfig("Language.FlagsCleared", "Flags Cleared.", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 0762ca191..a352a79a7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -84,10 +84,12 @@ public void onBlockBreak(BlockBreakEvent event) { boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), "destroy", perms.playerHas(pname, player.getWorld().getName(), "build", true)); boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), "container", true); - if (!hasdestroy || (!hasContainer && mat == Material.CHEST)) { + if (!hasdestroy) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "destroy")); + event.setCancelled(true); + } else if (!hasContainer && mat == Material.CHEST) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return; } } @@ -234,7 +236,7 @@ public void onBlockPlace(BlockPlaceEvent event) { boolean hasplace = perms.playerHas(pname, player.getWorld().getName(), "place", perms.playerHas(pname, player.getWorld().getName(), "build", true)); if (!hasplace) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "place")); return; } } @@ -415,7 +417,7 @@ public void onBlockIgnite(BlockIgniteEvent event) { FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player); if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), "ignite", true) && !Residence.isResAdminOn(player)) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "ignite")); } } else { FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 77602a380..625fe9a30 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -357,7 +357,7 @@ public void onHangingPlace(HangingPlaceEvent event) { String world = player.getWorld().getName(); if (!perms.playerHas(pname, world, "place", perms.playerHas(pname, world, "build", true))) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "build")); } } @@ -379,7 +379,7 @@ public void onHangingBreak(HangingBreakEvent event) { String world = event.getEntity().getWorld().getName(); if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "build")); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index a9595fa58..427e9ed42 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -586,7 +586,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (Residence.getNms().isArmorStandMaterial(heldItem)) { perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player.getName(), world, "build", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "build")); event.setCancelled(true); return; } @@ -651,7 +651,7 @@ public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getPlayer().getLocation()); if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "trade")); event.setCancelled(true); } @@ -976,11 +976,17 @@ public void run() { if (move) { if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player)) { Location lastLoc = lastOutsideLoc.get(pname); + + if (Residence.getConfigManager().BounceAnimation()) { + Residence.getSelectionManager().showBounce(player, res.getAreaArray()[0].getLowLoc(), res.getAreaArray()[0].getHighLoc()); + } + if (lastLoc != null) { player.teleport(lastLoc); } else { player.teleport(res.getOutsideFreeLoc(loc)); } + if (Residence.getConfigManager().useActionBar()) { ActionBar.send(player, ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", orres.getName())); } else { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 499b6ec6f..aefe72d62 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -16,6 +16,8 @@ import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.Debug; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -647,6 +649,48 @@ public void setEnterLeaveMessage(Player player, String message, boolean enter, b player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MessageChange")); } + public Location getMiddleFreeLoc(Location insideLoc) { + CuboidArea area = this.getAreaByLoc(insideLoc); + if (area == null) { + return insideLoc; + } + + int y = area.getHighLoc().getBlockY(); + + int x = area.getLowLoc().getBlockX() + (int) (area.getXSize() / 2); + int z = area.getLowLoc().getBlockZ() + (int) (area.getZSize() / 2); + + Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); + boolean found = false; + int it = 0; + int maxIt = area.getWorld().getMaxHeight() - 63; + while (it < maxIt) { + it++; + newLoc.setY(newLoc.getY() - 1); + + if (newLoc.getBlockY() < 63) + break; + + Block block = newLoc.getBlock(); + Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); + Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); + + Debug.D(newLoc.getBlockX() + " " + newLoc.getBlockZ() + " " + newLoc.getBlockY() + " " + Residence.getNms().isEmptyBlock(block) + " " + Residence.getNms() + .isEmptyBlock(block2) + " " + + Residence.getNms().isEmptyBlock(block3)); + + if (Residence.getNms().isEmptyBlock(block) && Residence.getNms().isEmptyBlock(block2) && !Residence.getNms().isEmptyBlock(block3)) { + found = true; + break; + } + } + if (found) { + return newLoc; + } else { + return getOutsideFreeLoc(insideLoc); + } + } + @SuppressWarnings("deprecation") public Location getOutsideFreeLoc(Location insideLoc) { int maxIt = 100; @@ -826,7 +870,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } } - if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin) { + if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin) { reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("TeleportStarted", this.getName() + "|" + Residence.getConfigManager() .getTeleportDelay())); ResidenceCommandListener.teleportDelayMap.add(reqPlayer.getName()); @@ -844,7 +888,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r ResidenceCommandListener.teleportDelayMap.remove(targetPlayer.getName()); return; } - final Location targloc = this.getOutsideFreeLoc(area.getHighLoc()); + final Location targloc = this.getMiddleFreeLoc(area.getHighLoc()); if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin) performDelaydTp(targloc, targetPlayer, reqPlayer, true); else @@ -959,10 +1003,10 @@ public static ClaimedResidence load(Map root, ClaimedResidence p res.enterMessage = (String) root.get("EnterMessage"); res.leaveMessage = (String) root.get("LeaveMessage"); - + if (root.containsKey("ShopDescription")) res.setShopDesc((String) root.get("ShopDescription")); - + if (root.containsKey("StoredMoney")) res.bank.setStoredMoney((Integer) root.get("StoredMoney")); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index dc717add8..72ba4054e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -171,7 +171,7 @@ private boolean checkCanSetFlag(Player player, String flag, FlagState state, boo return false; } if (!hasFlagAccess(this.getOwner(), flag)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerNoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetFailed", flag)); return false; } } @@ -507,15 +507,16 @@ public boolean setFlagGroupOnPlayer(Player player, String target, String flaggro String flagString = ""; int i = 0; for (String flag : flags) { + i++; if (this.setPlayerFlag(player, target, flag, state, resadmin, false)) { changed = true; flagString += flag; - i++; - if (i < flags.size()) + if (i < flags.size() - 1) flagString += ", "; } } - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flagString + "|" + target + "|" + state)); + if (flagString.length() > 0) + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flagString + "|" + target + "|" + state)); return changed; } return false; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 998be1265..1c7adf519 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -10,9 +10,17 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.utils.ActionBar; +import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; import java.util.Map; +import java.util.Map.Entry; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; @@ -173,6 +181,391 @@ public void run() { }); } + public boolean showBounces(final Player player, final ArrayList map) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + public void run() { + if (!player.isOnline() || map.size() == 0) + return; + for (int i = 0; i < 20; i++) { + if (i < map.size()) { + Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, map.get(i), player); + } + } + for (int i = 0; i < 20; i++) { + if (map.size() > 0) + map.remove(0); + } + showBounces(player, map); + return; + } + }, 1L); + + return false; + } + + public boolean showBounce(final Player player, Location OriginalLow, Location OriginalHigh) { + + CuboidArea cuboidArea = new CuboidArea(OriginalLow, OriginalHigh); + cuboidArea.getHighLoc().add(1, 1, 1); + + Boolean NorthSide = true, WestSide = true, EastSide = true, SouthSide = true, TopSide = true, BottomSide = true; + + double Range = 16.0; + + Location loc = player.getLocation(); + loc.add(0, 1.5, 0); + double PLLX = loc.getX() - Range; + double PLLZ = loc.getZ() - Range; + double PLLY = loc.getY() - Range; + double PLHX = loc.getX() + Range; + double PLHZ = loc.getZ() + Range; + double PLHY = loc.getY() + Range; + + if (cuboidArea.getLowLoc().getBlockX() < PLLX) { + cuboidArea.getLowLoc().setX(PLLX); + WestSide = false; + } + + if (cuboidArea.getHighLoc().getBlockX() > PLHX) { + cuboidArea.getHighLoc().setX(PLHX); + EastSide = false; + } + + if (cuboidArea.getLowLoc().getBlockZ() < PLLZ) { + cuboidArea.getLowLoc().setZ(PLLZ); + NorthSide = false; + } + + if (cuboidArea.getHighLoc().getBlockZ() > PLHZ) { + cuboidArea.getHighLoc().setZ(PLHZ); + SouthSide = false; + } + + if (cuboidArea.getLowLoc().getBlockY() < PLLY) { + cuboidArea.getLowLoc().setY(PLLY); + BottomSide = false; + } + + if (cuboidArea.getHighLoc().getBlockY() > PLHY) { + cuboidArea.getHighLoc().setY(PLHY); + TopSide = false; + } + + double TX = cuboidArea.getHighLoc().getBlockX() - cuboidArea.getLowLoc().getBlockX(); + double TY = cuboidArea.getHighLoc().getBlockY() - cuboidArea.getLowLoc().getBlockY(); + double TZ = cuboidArea.getHighLoc().getBlockZ() - cuboidArea.getLowLoc().getBlockZ(); + + Map map = GetLocationsByData(player, loc, TX, TY, TZ, cuboidArea.getLowLoc(), EastSide, SouthSide, WestSide, NorthSide, TopSide, + BottomSide); + + map = sortByComparatorASC(map); + + final ArrayList locations = new ArrayList(); + for (Entry one : map.entrySet()) { + locations.add(one.getValue()); + } + + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + showBounces(player, locations); + return; + } + }); + + return true; + } + + public HashMap GetLocationsByData(Player player, Location loc, Double TX, Double TY, Double TZ, Location lowLoc, Boolean EastSide, + Boolean SouthSide, Boolean WestSide, Boolean NorthSide, Boolean TopSide, Boolean BottomSide) { + double Range = 40D; + HashMap map = new HashMap(); + + Location Current = lowLoc; + + double OLX = lowLoc.getBlockX(); + double OLY = lowLoc.getBlockY(); + double OLZ = lowLoc.getBlockZ(); + + double eachCollumn = Residence.getConfigManager().getVisualizerRowSpacing() / 4.0; + double eachRow = Residence.getConfigManager().getVisualizerCollumnSpacing() / 4.0; + + // North wall + if (NorthSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ); + for (double y = eachCollumn; y < TY; y += eachCollumn) { + Current.setY(OLY + y); + for (double x = eachRow; x < TX; x += eachRow) { + Current.setX(OLX + x); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + } + + // South wall + if (SouthSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ + TZ); + for (double y = eachCollumn; y < TY; y += eachCollumn) { + Current.setY(OLY + y); + for (double x = eachRow; x < TX; x += eachRow) { + Current.setX(OLX + x); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + } + + // West wall + if (WestSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ); + for (double y = eachCollumn; y < TY; y += eachCollumn) { + Current.setY(OLY + y); + for (double z = eachRow; z < TZ; z += eachRow) { + Current.setZ(OLZ + z); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + } + + // East wall + if (EastSide) { + Current.setX(OLX + TX); + Current.setY(OLY); + Current.setZ(OLZ); + for (double y = eachCollumn; y < TY; y += eachCollumn) { + Current.setY(OLY + y); + for (double z = eachRow; z < TZ; z += eachRow) { + Current.setZ(OLZ + z); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + } + + // Roof wall + if (TopSide) { + Current.setX(OLX); + Current.setY(OLY + TY); + Current.setZ(OLZ); + for (double z = eachCollumn; z < TZ; z += eachCollumn) { + Current.setZ(OLZ + z); + for (double x = eachRow; x < TX; x += eachRow) { + Current.setX(OLX + x); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + } + + // Ground wall + if (BottomSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ); + for (double z = eachCollumn; z < TZ; z += eachCollumn) { + Current.setZ(OLZ + z); + for (double x = eachRow; x < TX; x += eachRow) { + Current.setX(OLX + x); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + } + + // North bottom line + if (BottomSide && NorthSide) { + Current.setZ(OLZ); + Current.setX(OLX); + Current.setY(OLY); + for (double x = 0; x < TX; x += eachCollumn) { + Current.setX(OLX + x); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + + // North top line + if (TopSide && NorthSide) { + Current.setX(OLX); + Current.setY(OLY + TY); + Current.setZ(OLZ); + for (double x = 0; x < TX; x += eachCollumn) { + Current.setX(OLX + x); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + + // South bottom line + if (BottomSide && SouthSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ + TZ); + for (double x = 0; x < TX; x += eachCollumn) { + Current.setX(OLX + x); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + + // South top line + if (TopSide && SouthSide) { + Current.setX(OLX); + Current.setY(OLY + TY); + Current.setZ(OLZ + TZ); + for (double x = 0; x <= TX; x += eachCollumn) { + Current.setX(OLX + x); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + + // North - West corner + if (WestSide && NorthSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ); + for (double y = 0; y < TY; y += eachCollumn) { + Current.setY(OLY + y); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + + // North - East corner + if (EastSide && NorthSide) { + Current.setY(OLY); + Current.setX(OLX + TX); + Current.setZ(OLZ); + for (double y = 0; y < TY; y += eachCollumn) { + Current.setY(OLY + y); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + + // South - West corner + if (SouthSide && WestSide) { + Current.setY(OLY); + Current.setX(OLX); + Current.setZ(OLZ + TZ); + for (double y = 0; y < TY; y += eachCollumn) { + Current.setY(OLY + y); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + + // South - East corner + if (SouthSide && EastSide) { + Current.setY(OLY); + Current.setX(OLX + TX); + Current.setZ(OLZ + TZ); + for (double y = 0; y < TY; y += eachCollumn) { + Current.setY(OLY + y); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + + // West bottom corner + if (WestSide && BottomSide) { + Current.setX(OLX); + Current.setY(OLY); + Current.setZ(OLZ); + for (double z = 0; z < TZ; z += eachCollumn) { + Current.setZ(OLZ + z); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + + // East bottom corner + if (EastSide && BottomSide) { + Current.setY(OLY); + Current.setX(OLX + TX); + Current.setZ(OLZ); + for (double z = 0; z < TZ; z += eachCollumn) { + Current.setZ(OLZ + z); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + + // West top corner + if (WestSide && TopSide) { + Current.setY(OLY + TY); + Current.setX(OLX); + Current.setZ(OLZ + TZ); + for (double z = 0; z < TZ; z += eachCollumn) { + Current.setZ(OLZ + z); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + + // East top corner + if (EastSide && TopSide) { + Current.setY(OLY + TY); + Current.setX(OLX + TX); + Current.setZ(OLZ + TZ); + for (double z = 0; z < TZ; z += eachCollumn) { + Current.setZ(OLZ + z); + double dist = loc.distanceSquared(Current); + if (dist < Range) + map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); + } + } + + return map; + } + + private static Map sortByComparatorASC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + public int compare(Map.Entry o1, Map.Entry o2) { + return (o1.getKey()).compareTo(o2.getKey()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + public boolean MakeBorders(final Player player, final Location OriginalLow, final Location OriginalHigh, final boolean error) { CuboidArea cuboidArea = new CuboidArea(OriginalLow, OriginalHigh); diff --git a/src/com/bekvon/bukkit/residence/utils/CrackShot.java b/src/com/bekvon/bukkit/residence/utils/CrackShot.java index ecb60e698..1bca7d854 100644 --- a/src/com/bekvon/bukkit/residence/utils/CrackShot.java +++ b/src/com/bekvon/bukkit/residence/utils/CrackShot.java @@ -53,7 +53,7 @@ public void AnimalKilling(WeaponDamageEntityEvent event) { if (Residence.getNms().isAnimal(entity)) { if (res != null && !res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { - cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "animalkilling")); event.setCancelled(true); } } diff --git a/src/plugin.yml b/src/plugin.yml index 635b295a1..224765a68 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.13.2 +version: 2.9.16.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From d2f0e44d7c37e88c73610e348016048d6d42cdc8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 1 Jan 2016 16:12:12 +0200 Subject: [PATCH 0105/1142] Major code cleanup for selection manager --- .../residence/containers/SelectionSides.java | 70 ++ .../listeners/ResidencePlayerListener.java | 4 +- .../residence/selection/SelectionManager.java | 696 +++--------------- src/plugin.yml | 2 +- 4 files changed, 188 insertions(+), 584 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/containers/SelectionSides.java diff --git a/src/com/bekvon/bukkit/residence/containers/SelectionSides.java b/src/com/bekvon/bukkit/residence/containers/SelectionSides.java new file mode 100644 index 000000000..499eac865 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/SelectionSides.java @@ -0,0 +1,70 @@ +package com.bekvon.bukkit.residence.containers; + +public class SelectionSides { + Boolean NorthSide = true; + Boolean WestSide = true; + Boolean EastSide = true; + Boolean SouthSide = true; + Boolean TopSide = true; + Boolean BottomSide = true; + + public SelectionSides() { + } + + public SelectionSides(Boolean NorthSide, Boolean WestSide, Boolean EastSide, Boolean SouthSide, Boolean TopSide, Boolean BottomSide) { + this.NorthSide = NorthSide; + this.WestSide = WestSide; + this.EastSide = EastSide; + this.SouthSide = SouthSide; + this.TopSide = TopSide; + this.BottomSide = BottomSide; + } + + public void setNorthSide(boolean state) { + this.NorthSide = state; + } + + public boolean ShowNorthSide() { + return this.NorthSide; + } + + public void setWestSide(boolean state) { + this.WestSide = state; + } + + public boolean ShowWestSide() { + return this.WestSide; + } + + public void setEastSide(boolean state) { + this.EastSide = state; + } + + public boolean ShowEastSide() { + return this.EastSide; + } + + public void setSouthSide(boolean state) { + this.SouthSide = state; + } + + public boolean ShowSouthSide() { + return this.SouthSide; + } + + public void setTopSide(boolean state) { + this.TopSide = state; + } + + public boolean ShowTopSide() { + return this.TopSide; + } + + public void setBottomSide(boolean state) { + this.BottomSide = state; + } + + public boolean ShowBottomSide() { + return this.BottomSide; + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 427e9ed42..79c054d07 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -978,9 +978,9 @@ public void run() { Location lastLoc = lastOutsideLoc.get(pname); if (Residence.getConfigManager().BounceAnimation()) { - Residence.getSelectionManager().showBounce(player, res.getAreaArray()[0].getLowLoc(), res.getAreaArray()[0].getHighLoc()); + Residence.getSelectionManager().MakeBorders(player, res.getAreaArray()[0].getLowLoc(), res.getAreaArray()[0].getHighLoc(), true); } - + if (lastLoc != null) { player.teleport(lastLoc); } else { diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 1c7adf519..c04fcd592 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -6,21 +6,16 @@ package com.bekvon.bukkit.residence.selection; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.SelectionSides; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.utils.ActionBar; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Map.Entry; - import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; @@ -181,389 +176,134 @@ public void run() { }); } - public boolean showBounces(final Player player, final ArrayList map) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { - public void run() { - if (!player.isOnline() || map.size() == 0) - return; - for (int i = 0; i < 20; i++) { - if (i < map.size()) { - Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, map.get(i), player); - } - } - for (int i = 0; i < 20; i++) { - if (map.size() > 0) - map.remove(0); - } - showBounces(player, map); - return; - } - }, 1L); - - return false; - } - - public boolean showBounce(final Player player, Location OriginalLow, Location OriginalHigh) { - - CuboidArea cuboidArea = new CuboidArea(OriginalLow, OriginalHigh); - cuboidArea.getHighLoc().add(1, 1, 1); - - Boolean NorthSide = true, WestSide = true, EastSide = true, SouthSide = true, TopSide = true, BottomSide = true; - - double Range = 16.0; - - Location loc = player.getLocation(); - loc.add(0, 1.5, 0); - double PLLX = loc.getX() - Range; - double PLLZ = loc.getZ() - Range; - double PLLY = loc.getY() - Range; - double PLHX = loc.getX() + Range; - double PLHZ = loc.getZ() + Range; - double PLHY = loc.getY() + Range; - - if (cuboidArea.getLowLoc().getBlockX() < PLLX) { - cuboidArea.getLowLoc().setX(PLLX); - WestSide = false; - } - - if (cuboidArea.getHighLoc().getBlockX() > PLHX) { - cuboidArea.getHighLoc().setX(PLHX); - EastSide = false; - } + public List getLocations(Location lowLoc, Location loc, Double TX, Double TY, Double TZ, Double Range, boolean StartFromZero) { - if (cuboidArea.getLowLoc().getBlockZ() < PLLZ) { - cuboidArea.getLowLoc().setZ(PLLZ); - NorthSide = false; - } + double eachCollumn = Residence.getConfigManager().getVisualizerRowSpacing(); + double eachRow = Residence.getConfigManager().getVisualizerCollumnSpacing(); - if (cuboidArea.getHighLoc().getBlockZ() > PLHZ) { - cuboidArea.getHighLoc().setZ(PLHZ); - SouthSide = false; - } + if (TX == 0D) + TX = eachCollumn + eachCollumn * 0.1; + if (TY == 0D) + TY = eachRow + eachRow * 0.1; + if (TZ == 0D) + TZ = eachCollumn + eachCollumn * 0.1; - if (cuboidArea.getLowLoc().getBlockY() < PLLY) { - cuboidArea.getLowLoc().setY(PLLY); - BottomSide = false; - } + double CollumnStart = eachCollumn; + double RowStart = eachRow; - if (cuboidArea.getHighLoc().getBlockY() > PLHY) { - cuboidArea.getHighLoc().setY(PLHY); - TopSide = false; + if (StartFromZero) { + CollumnStart = 0; + RowStart = 0; } - double TX = cuboidArea.getHighLoc().getBlockX() - cuboidArea.getLowLoc().getBlockX(); - double TY = cuboidArea.getHighLoc().getBlockY() - cuboidArea.getLowLoc().getBlockY(); - double TZ = cuboidArea.getHighLoc().getBlockZ() - cuboidArea.getLowLoc().getBlockZ(); - - Map map = GetLocationsByData(player, loc, TX, TY, TZ, cuboidArea.getLowLoc(), EastSide, SouthSide, WestSide, NorthSide, TopSide, - BottomSide); - - map = sortByComparatorASC(map); - - final ArrayList locations = new ArrayList(); - for (Entry one : map.entrySet()) { - locations.add(one.getValue()); - } + List locList = new ArrayList(); - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { - @Override - public void run() { - showBounces(player, locations); - return; + for (double x = CollumnStart; x < TX; x += eachCollumn) { + Location CurrentX = lowLoc.clone(); + if (TX > eachCollumn + eachCollumn * 0.1) + CurrentX.add(x, 0, 0); + for (double y = RowStart; y < TY; y += eachRow) { + Location CurrentY = CurrentX.clone(); + if (TY > eachRow + eachRow * 0.1) + CurrentY.add(0, y, 0); + for (double z = CollumnStart; z < TZ; z += eachCollumn) { + Location CurrentZ = CurrentY.clone(); + if (TZ > eachCollumn + eachCollumn * 0.1) + CurrentZ.add(0, 0, z); + double dist = loc.distance(CurrentZ); + if (dist < Range) + locList.add(CurrentZ.clone()); + } } - }); + } - return true; + return locList; } - public HashMap GetLocationsByData(Player player, Location loc, Double TX, Double TY, Double TZ, Location lowLoc, Boolean EastSide, - Boolean SouthSide, Boolean WestSide, Boolean NorthSide, Boolean TopSide, Boolean BottomSide) { - double Range = 40D; - HashMap map = new HashMap(); - - Location Current = lowLoc; - - double OLX = lowLoc.getBlockX(); - double OLY = lowLoc.getBlockY(); - double OLZ = lowLoc.getBlockZ(); - - double eachCollumn = Residence.getConfigManager().getVisualizerRowSpacing() / 4.0; - double eachRow = Residence.getConfigManager().getVisualizerCollumnSpacing() / 4.0; + public List GetLocationsWallsByData(Player player, Location loc, Double TX, Double TY, Double TZ, Location lowLoc, SelectionSides Sides, + double Range) { + List locList = new ArrayList(); // North wall - if (NorthSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ); - for (double y = eachCollumn; y < TY; y += eachCollumn) { - Current.setY(OLY + y); - for (double x = eachRow; x < TX; x += eachRow) { - Current.setX(OLX + x); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } - } + if (Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, TY, 0D, Range, false)); // South wall - if (SouthSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ + TZ); - for (double y = eachCollumn; y < TY; y += eachCollumn) { - Current.setY(OLY + y); - for (double x = eachRow; x < TX; x += eachRow) { - Current.setX(OLX + x); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } - } + if (Sides.ShowSouthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), TX, TY, 0D, Range, false)); // West wall - if (WestSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ); - for (double y = eachCollumn; y < TY; y += eachCollumn) { - Current.setY(OLY + y); - for (double z = eachRow; z < TZ; z += eachRow) { - Current.setZ(OLZ + z); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } - } + if (Sides.ShowWestSide()) + locList.addAll(getLocations(lowLoc.clone(), loc.clone(), 0D, TY, TZ, Range, false)); // East wall - if (EastSide) { - Current.setX(OLX + TX); - Current.setY(OLY); - Current.setZ(OLZ); - for (double y = eachCollumn; y < TY; y += eachCollumn) { - Current.setY(OLY + y); - for (double z = eachRow; z < TZ; z += eachRow) { - Current.setZ(OLZ + z); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } - } + if (Sides.ShowEastSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, TY, TZ, Range, false)); // Roof wall - if (TopSide) { - Current.setX(OLX); - Current.setY(OLY + TY); - Current.setZ(OLZ); - for (double z = eachCollumn; z < TZ; z += eachCollumn) { - Current.setZ(OLZ + z); - for (double x = eachRow; x < TX; x += eachRow) { - Current.setX(OLX + x); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } - } + if (Sides.ShowTopSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), TX, 0D, TZ, Range, false)); // Ground wall - if (BottomSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ); - for (double z = eachCollumn; z < TZ; z += eachCollumn) { - Current.setZ(OLZ + z); - for (double x = eachRow; x < TX; x += eachRow) { - Current.setX(OLX + x); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } - } + if (Sides.ShowBottomSide()) + locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, 0D, TZ, Range, false)); + + return locList; + } + + public List GetLocationsCornersByData(Player player, Location loc, Double TX, Double TY, Double TZ, Location lowLoc, SelectionSides Sides, + double Range) { + List locList = new ArrayList(); // North bottom line - if (BottomSide && NorthSide) { - Current.setZ(OLZ); - Current.setX(OLX); - Current.setY(OLY); - for (double x = 0; x < TX; x += eachCollumn) { - Current.setX(OLX + x); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } + if (Sides.ShowBottomSide() && Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, 0D, 0D, Range, true)); // North top line - if (TopSide && NorthSide) { - Current.setX(OLX); - Current.setY(OLY + TY); - Current.setZ(OLZ); - for (double x = 0; x < TX; x += eachCollumn) { - Current.setX(OLX + x); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } + if (Sides.ShowTopSide() && Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), TX, 0D, 0D, Range, true)); // South bottom line - if (BottomSide && SouthSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ + TZ); - for (double x = 0; x < TX; x += eachCollumn) { - Current.setX(OLX + x); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } + if (Sides.ShowBottomSide() && Sides.ShowSouthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), TX, 0D, 0D, Range, true)); // South top line - if (TopSide && SouthSide) { - Current.setX(OLX); - Current.setY(OLY + TY); - Current.setZ(OLZ + TZ); - for (double x = 0; x <= TX; x += eachCollumn) { - Current.setX(OLX + x); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } + if (Sides.ShowTopSide() && Sides.ShowSouthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, TY, TZ), loc.clone(), TX, 0D, 0D, Range, true)); // North - West corner - if (WestSide && NorthSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ); - for (double y = 0; y < TY; y += eachCollumn) { - Current.setY(OLY + y); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } + if (Sides.ShowWestSide() && Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, 0), loc.clone(), 0D, TY, 0D, Range, true)); // North - East corner - if (EastSide && NorthSide) { - Current.setY(OLY); - Current.setX(OLX + TX); - Current.setZ(OLZ); - for (double y = 0; y < TY; y += eachCollumn) { - Current.setY(OLY + y); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } + if (Sides.ShowEastSide() && Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, TY, 0D, Range, true)); // South - West corner - if (SouthSide && WestSide) { - Current.setY(OLY); - Current.setX(OLX); - Current.setZ(OLZ + TZ); - for (double y = 0; y < TY; y += eachCollumn) { - Current.setY(OLY + y); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } + if (Sides.ShowSouthSide() && Sides.ShowWestSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), 0D, TY, 0D, Range, true)); // South - East corner - if (SouthSide && EastSide) { - Current.setY(OLY); - Current.setX(OLX + TX); - Current.setZ(OLZ + TZ); - for (double y = 0; y < TY; y += eachCollumn) { - Current.setY(OLY + y); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } + if (Sides.ShowSouthSide() && Sides.ShowEastSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, TZ), loc.clone(), 0D, TY, 0D, Range, true)); // West bottom corner - if (WestSide && BottomSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ); - for (double z = 0; z < TZ; z += eachCollumn) { - Current.setZ(OLZ + z); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } + if (Sides.ShowWestSide() && Sides.ShowBottomSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, 0), loc.clone(), 0D, 0D, TZ, Range, true)); // East bottom corner - if (EastSide && BottomSide) { - Current.setY(OLY); - Current.setX(OLX + TX); - Current.setZ(OLZ); - for (double z = 0; z < TZ; z += eachCollumn) { - Current.setZ(OLZ + z); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } + if (Sides.ShowEastSide() && Sides.ShowBottomSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, 0D, TZ, Range, true)); // West top corner - if (WestSide && TopSide) { - Current.setY(OLY + TY); - Current.setX(OLX); - Current.setZ(OLZ + TZ); - for (double z = 0; z < TZ; z += eachCollumn) { - Current.setZ(OLZ + z); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } + if (Sides.ShowWestSide() && Sides.ShowTopSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), 0D, 0D, TZ, Range, true)); // East top corner - if (EastSide && TopSide) { - Current.setY(OLY + TY); - Current.setX(OLX + TX); - Current.setZ(OLZ + TZ); - for (double z = 0; z < TZ; z += eachCollumn) { - Current.setZ(OLZ + z); - double dist = loc.distanceSquared(Current); - if (dist < Range) - map.put(dist, new Location(Current.getWorld(), Current.getX(), Current.getY(), Current.getZ())); - } - } - - return map; - } + if (Sides.ShowEastSide() && Sides.ShowTopSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, TY, 0), loc.clone(), 0D, 0D, TZ, Range, true)); - private static Map sortByComparatorASC(Map unsortMap) { - - // Convert Map to List - List> list = new LinkedList>(unsortMap.entrySet()); - - // Sort list with comparator, to compare the Map values - Collections.sort(list, new Comparator>() { - public int compare(Map.Entry o1, Map.Entry o2) { - return (o1.getKey()).compareTo(o2.getKey()); - } - }); - - // Convert sorted map back to a Map - Map sortedMap = new LinkedHashMap(); - for (Iterator> it = list.iterator(); it.hasNext();) { - Map.Entry entry = it.next(); - sortedMap.put(entry.getKey(), entry.getValue()); - } - return sortedMap; + return locList; } public boolean MakeBorders(final Player player, final Location OriginalLow, final Location OriginalHigh, final boolean error) { @@ -571,11 +311,12 @@ public boolean MakeBorders(final Player player, final Location OriginalLow, fina CuboidArea cuboidArea = new CuboidArea(OriginalLow, OriginalHigh); cuboidArea.getHighLoc().add(1, 1, 1); - Boolean NorthSide = true, WestSide = true, EastSide = true, SouthSide = true, TopSide = true, BottomSide = true; + SelectionSides Sides = new SelectionSides(); int Range = Residence.getConfigManager().getVisualizerRange(); Location loc = player.getLocation(); + loc = loc.add(0, 0.5, 0); double PLLX = loc.getX() - Range; double PLLZ = loc.getZ() - Range; double PLLY = loc.getY() - Range; @@ -585,37 +326,37 @@ public boolean MakeBorders(final Player player, final Location OriginalLow, fina if (cuboidArea.getLowLoc().getBlockX() < PLLX) { cuboidArea.getLowLoc().setX(PLLX); - WestSide = false; + Sides.setWestSide(false); } if (cuboidArea.getHighLoc().getBlockX() > PLHX) { cuboidArea.getHighLoc().setX(PLHX); - EastSide = false; + Sides.setEastSide(false); } if (cuboidArea.getLowLoc().getBlockZ() < PLLZ) { cuboidArea.getLowLoc().setZ(PLLZ); - NorthSide = false; + Sides.setNorthSide(false); } if (cuboidArea.getHighLoc().getBlockZ() > PLHZ) { cuboidArea.getHighLoc().setZ(PLHZ); - SouthSide = false; + Sides.setSouthSide(false); } if (cuboidArea.getLowLoc().getBlockY() < PLLY) { cuboidArea.getLowLoc().setY(PLLY); - BottomSide = false; + Sides.setBottomSide(false); } if (cuboidArea.getHighLoc().getBlockY() > PLHY) { cuboidArea.getHighLoc().setY(PLHY); - TopSide = false; + Sides.setTopSide(false); } - double TX = cuboidArea.getHighLoc().getBlockX() - cuboidArea.getLowLoc().getBlockX(); - double TY = cuboidArea.getHighLoc().getBlockY() - cuboidArea.getLowLoc().getBlockY(); - double TZ = cuboidArea.getHighLoc().getBlockZ() - cuboidArea.getLowLoc().getBlockZ(); + double TX = cuboidArea.getXSize() - 1; + double TY = cuboidArea.getYSize() - 1; + double TZ = cuboidArea.getZSize() - 1; if (!error && normalIDMap.containsKey(player.getName())) { Bukkit.getScheduler().cancelTask(normalIDMap.get(player.getName())); @@ -623,7 +364,29 @@ public boolean MakeBorders(final Player player, final Location OriginalLow, fina Bukkit.getScheduler().cancelTask(errorIDMap.get(player.getName())); } - DrawBounds(player, TX, TY, TZ, cuboidArea.getLowLoc(), EastSide, SouthSide, WestSide, NorthSide, TopSide, BottomSide, error); + final List locList = GetLocationsWallsByData(player, loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range); + + final List locList2 = GetLocationsCornersByData(player, loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range); + + Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + @Override + public void run() { + if (!error) + for (Location one : locList) + Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, one, player); + else + for (Location one : locList) + Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, one, player); + + if (!error) + for (Location one : locList2) + Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, one, player); + else + for (Location one : locList2) + Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, one, player); + return; + } + }); String planerName = player.getName(); if (!error && !normalPrintMap.containsKey(planerName)) @@ -638,7 +401,6 @@ else if (error && errorPrintMap.get(planerName) + Residence.getConfigManager().g int scid = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { public void run() { - if (player.isOnline()) MakeBorders(player, OriginalLow, OriginalHigh, error); return; @@ -652,234 +414,6 @@ public void run() { return true; } - public void DrawBounds(Player player, Double TX, Double TY, Double TZ, Location lowLoc, Boolean EastSide, Boolean SouthSide, Boolean WestSide, Boolean NorthSide, - Boolean TopSide, Boolean BottomSide, boolean error) { - - Location Current = lowLoc; - - double OLX = lowLoc.getBlockX(); - double OLY = lowLoc.getBlockY(); - double OLZ = lowLoc.getBlockZ(); - - int eachCollumn = Residence.getConfigManager().getVisualizerRowSpacing(); - int eachRow = Residence.getConfigManager().getVisualizerCollumnSpacing(); - // North wall - if (NorthSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ); - for (int y = 1; y < TY; y += eachCollumn) { - Current.setY(OLY + y); - for (int x = 1; x < TX; x += eachRow) { - Current.setX(OLX + x); - showParticleWalls(player, Current, error); - } - } - } - - // South wall - if (SouthSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ + TZ); - for (int y = 1; y < TY; y += eachCollumn) { - Current.setY(OLY + y); - for (int x = 1; x < TX; x += eachRow) { - Current.setX(OLX + x); - showParticleWalls(player, Current, error); - } - } - } - - // West wall - if (WestSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ); - for (int y = 1; y < TY; y += eachCollumn) { - Current.setY(OLY + y); - for (int z = 1; z < TZ; z += eachRow) { - Current.setZ(OLZ + z); - showParticleWalls(player, Current, error); - } - } - } - - // East wall - if (EastSide) { - Current.setX(OLX + TX); - Current.setY(OLY); - Current.setZ(OLZ); - for (int y = 1; y < TY; y += eachCollumn) { - Current.setY(OLY + y); - for (int z = 1; z < TZ; z += eachRow) { - Current.setZ(OLZ + z); - showParticleWalls(player, Current, error); - } - } - } - - // Roof wall - if (TopSide) { - Current.setX(OLX); - Current.setY(OLY + TY); - Current.setZ(OLZ); - for (int z = 1; z < TZ; z += eachCollumn) { - Current.setZ(OLZ + z); - for (int x = 1; x < TX; x += eachRow) { - Current.setX(OLX + x); - showParticleWalls(player, Current, error); - } - } - } - - // Ground wall - if (BottomSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ); - for (int z = 1; z < TZ; z += eachCollumn) { - Current.setZ(OLZ + z); - for (int x = 1; x < TX; x += eachRow) { - Current.setX(OLX + x); - showParticleWalls(player, Current, error); - } - } - } - - // North bottom line - if (BottomSide && NorthSide) { - Current.setZ(OLZ); - Current.setX(OLX); - Current.setY(OLY); - for (int x = 0; x < TX; x++) { - Current.setX(OLX + x); - showParticle(player, Current, error); - } - } - - // North top line - if (TopSide && NorthSide) { - Current.setX(OLX); - Current.setY(OLY + TY); - Current.setZ(OLZ); - for (int x = 0; x < TX; x++) { - Current.setX(OLX + x); - showParticle(player, Current, error); - } - } - - // South bottom line - if (BottomSide && SouthSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ + TZ); - for (int x = 0; x < TX; x++) { - Current.setX(OLX + x); - showParticle(player, Current, error); - } - } - - // South top line - if (TopSide && SouthSide) { - Current.setX(OLX); - Current.setY(OLY + TY); - Current.setZ(OLZ + TZ); - for (int x = 0; x <= TX; x++) { - Current.setX(OLX + x); - showParticle(player, Current, error); - } - } - - // North - West corner - if (WestSide && NorthSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ); - for (int y = 0; y < TY; y++) { - Current.setY(OLY + y); - showParticle(player, Current, error); - } - } - - // North - East corner - if (EastSide && NorthSide) { - Current.setY(OLY); - Current.setX(OLX + TX); - Current.setZ(OLZ); - for (int y = 0; y < TY; y++) { - Current.setY(OLY + y); - showParticle(player, Current, error); - } - } - - // South - West corner - if (SouthSide && WestSide) { - Current.setY(OLY); - Current.setX(OLX); - Current.setZ(OLZ + TZ); - for (int y = 0; y < TY; y++) { - Current.setY(OLY + y); - showParticle(player, Current, error); - } - } - - // South - East corner - if (SouthSide && EastSide) { - Current.setY(OLY); - Current.setX(OLX + TX); - Current.setZ(OLZ + TZ); - for (int y = 0; y < TY; y++) { - Current.setY(OLY + y); - showParticle(player, Current, error); - } - } - - // West bottom corner - if (WestSide && BottomSide) { - Current.setX(OLX); - Current.setY(OLY); - Current.setZ(OLZ); - for (int z = 0; z < TZ; z++) { - Current.setZ(OLZ + z); - showParticle(player, Current, error); - } - } - - // East bottom corner - if (EastSide && BottomSide) { - Current.setY(OLY); - Current.setX(OLX + TX); - Current.setZ(OLZ); - for (int z = 0; z < TZ; z++) { - Current.setZ(OLZ + z); - showParticle(player, Current, error); - } - } - - // West top corner - if (WestSide && TopSide) { - Current.setY(OLY + TY); - Current.setX(OLX); - Current.setZ(OLZ + TZ); - for (int z = 0; z < TZ; z++) { - Current.setZ(OLZ + z); - showParticle(player, Current, error); - } - } - - // East top corner - if (EastSide && TopSide) { - Current.setY(OLY + TY); - Current.setX(OLX + TX); - Current.setZ(OLZ + TZ); - for (int z = 0; z < TZ; z++) { - Current.setZ(OLZ + z); - showParticle(player, Current, error); - } - } - } - public void vert(Player player, boolean resadmin) { if (hasPlacedBoth(player.getName())) { this.sky(player, resadmin); diff --git a/src/plugin.yml b/src/plugin.yml index 224765a68..79bddbf2c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.16.0 +version: 2.9.17.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 696eb86ca7f38f2ac53171129db325590e6665d9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 3 Jan 2016 18:09:22 +0200 Subject: [PATCH 0106/1142] Fix for /res ? not showing regular commands with AdminFullAccess --- .../bekvon/bukkit/residence/ResidenceCommandListener.java | 8 ++++++-- .../bukkit/residence/selection/SelectionManager.java | 1 + src/plugin.yml | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 0c3d4b197..961c549dc 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -302,7 +302,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St @SuppressWarnings("deprecation") private boolean commandRes(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { - return commandHelp(args, resadmin, sender); + return commandHelp(args, resadmin, sender, command); } int page = 1; try { @@ -1277,7 +1277,7 @@ public void run() { return false; } - private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender) { + private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender, Command command) { if (helppages == null) return false; @@ -1296,6 +1296,10 @@ private boolean commandHelp(String[] args, boolean resadmin, CommandSender sende sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidHelp")); } } + + if (command.getName().equalsIgnoreCase("res")) + resadmin = false; + if (helppages.containesEntry(helppath)) helppages.printHelp(sender, page, helppath, resadmin); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index c04fcd592..ec1aaeb8f 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -387,6 +387,7 @@ public void run() { return; } }); + String planerName = player.getName(); if (!error && !normalPrintMap.containsKey(planerName)) diff --git a/src/plugin.yml b/src/plugin.yml index 79bddbf2c..965ccb003 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.17.0 +version: 2.9.17.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 0156969061b88e08190d238d6132d61a1aee0ba8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 4 Jan 2016 10:39:39 +0200 Subject: [PATCH 0107/1142] fix for /res ? command performed from console --- .../bukkit/residence/text/help/HelpEntry.java | 15 ++++++++++----- src/plugin.yml | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 1044e82c5..3a3f650b3 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -26,6 +26,7 @@ import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; /** * @@ -102,11 +103,14 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p if (resadmin) path = path.replace("/res ", "/resadmin "); - String prev = "[\"\",{\"text\":\"" + ChatColor.GOLD + " " + helplines.get(i).getDesc() + String msg = "[\"\",{\"text\":\"" + ChatColor.GOLD + " " + helplines.get(i).getDesc() + "\",\"color\":\"gold\",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + path + helplines.get(i).getCommand() + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev); + if (sender instanceof Player) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + msg); + else + sender.sendMessage(helplines.get(i).getDesc()); } else sender.sendMessage(ChatColor.GOLD + " " + helplines.get(i).getDesc()); @@ -130,7 +134,8 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p String next = " {\"text\":\"" + Residence.getLanguage().getPhrase("NextInfoPage") + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); + if (sender instanceof Player) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); } public void printHelp(CommandSender sender, int page, String path, boolean resadmin) { @@ -155,8 +160,8 @@ private List getHelpData(CommandSender sender, boolean resadmin) { FlagPermissions GlobalFlags = Residence.getPermissionManager().getAllFlags(); - for (HelpEntry entry : subentrys) { - + for (HelpEntry entry : subentrys) { + if (!name.equalsIgnoreCase("flags")) { if (ResidenceCommandListener.AdminCommands.contains(entry.getName().toLowerCase()) && !resadmin) continue; diff --git a/src/plugin.yml b/src/plugin.yml index 965ccb003..08e9bd6e0 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.17.1 +version: 2.9.17.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 20b257dc871fcb9ee4339b7b59805ade4ae68dc1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 6 Jan 2016 15:32:03 +0200 Subject: [PATCH 0108/1142] res market sign command addition and sign resname crop --- src/com/bekvon/bukkit/residence/Locale.java | 8 ++ .../residence/ResidenceCommandListener.java | 77 +++++++++++++++++++ .../listeners/ResidencePlayerListener.java | 1 - .../bukkit/residence/signsStuff/SignUtil.java | 34 ++++++-- src/plugin.yml | 2 +- 5 files changed, 113 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index e9c5d0700..7dd215be0 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -128,6 +128,8 @@ public static void LoadLang(String lang) { GetConfig("Language.InvalidArea", "Invalid Area...", writer, conf, true); GetConfig("Language.InvalidGroup", "Invalid Group...", writer, conf, true); GetConfig("Language.UseNumbers", "&cPlease use numbers...", writer, conf, true); + GetConfig("Language.NotOwner", "&cYou are not owner of this residence", writer, conf, true); + GetConfig("Language.LookAtSign", "&cYou are not looking at sign", writer, conf, true); writer.addComment("Language.CantPlaceLava", "Replace all text with '' to disable this message"); GetConfig("Language.CantPlaceLava", "You can't place lava outside residence and higher than %1 block level", writer, conf, true); writer.addComment("Language.CantPlaceWater", "Replace all text with '' to disable this message"); @@ -255,6 +257,7 @@ public static void LoadLang(String lang) { GetConfig("Language.ResidenceMaxRent", "You already are renting the maximum number of residences your allowed to.", writer, conf, true); GetConfig("Language.ResidenceAlreadyRent", "Residence is already for rent...", writer, conf, true); GetConfig("Language.ResidenceNotForRent", "Residence not for rent...", writer, conf, true); + GetConfig("Language.ResidenceNotForRentOrSell", "&cResidence not for rent or sell...", writer, conf, true); GetConfig("Language.ResidenceNotRented", "Residence not rented.", writer, conf, true); GetConfig("Language.ResidenceUnrent", "Residence %1 has been unrented.", writer, conf, true); GetConfig("Language.ResidenceRemoveRentable", "Residence %1 is no longer rentable.", writer, conf, true); @@ -1250,6 +1253,11 @@ public static void LoadLang(String lang) { Arrays.asList("Usage: /res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", "Another player can buy the residence with /res market buy"), writer, conf, true); + + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Description", "Set market sign", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Info", + Arrays.asList("Usage: /res market sign [residence]", "Sets market sign you are looking at."), + writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Description", "Buy a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Info", diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 961c549dc..835142172 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -11,6 +11,7 @@ import java.util.Map; import java.util.TimeZone; import java.util.Map.Entry; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; @@ -18,6 +19,8 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.OfflinePlayer; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; @@ -40,6 +43,7 @@ import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.shopStuff.Vote; import com.bekvon.bukkit.residence.signsStuff.SignUtil; +import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.spout.ResidenceSpout; import com.bekvon.bukkit.residence.utils.RandomTp; import com.sk89q.worldedit.bukkit.WorldEditPlugin; @@ -1228,6 +1232,7 @@ public void run() { if (cmd.equals("market")) { return commandResMarket(args, resadmin, player, page); } + if (cmd.equals("message")) { return commandResMessage(args, resadmin, player, page); } @@ -2151,6 +2156,78 @@ private boolean commandResMarket(String[] args, boolean resadmin, Player player, } return true; } + if (command.equals("sign")) { + + Block block = player.getTargetBlock((Set) null, 10); + + if (!(block.getState() instanceof Sign)) { + player.sendMessage(Residence.getLanguage().getPhrase("LookAtSign")); + return true; + } + + Sign sign = (Sign) block.getState(); + + Signs signInfo = new Signs(); + + Signs oldSign = SignUtil.getSignFromLoc(sign.getLocation()); + + if (oldSign != null) + signInfo = oldSign; + + Location loc = sign.getLocation(); + + String landName = null; + + ClaimedResidence CurrentRes = Residence.getResidenceManager().getByLoc(sign.getLocation()); + + if (CurrentRes == null) { + player.sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); + return true; + } + + if (!CurrentRes.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { + player.sendMessage(Residence.getLanguage().getPhrase("NotOwner")); + return true; + } + + final ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + + if (res == null) { + player.sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); + return true; + } + + landName = res.getName(); + + boolean ForSale = Residence.getTransactionManager().isForSale(landName); + boolean ForRent = Residence.getRentManager().isForRent(landName); + + int category = 1; + if (SignUtil.Signs.GetAllSigns().size() > 0) + category = SignUtil.Signs.GetAllSigns().get(SignUtil.Signs.GetAllSigns().size() - 1).GetCategory() + 1; + + if (ForSale || ForRent) { + signInfo.setCategory(category); + signInfo.setResidence(landName); + signInfo.setWorld(loc.getWorld().getName()); + signInfo.setX(loc.getBlockX()); + signInfo.setY(loc.getBlockY()); + signInfo.setZ(loc.getBlockZ()); + signInfo.setLocation(loc); + SignUtil.Signs.addSign(signInfo); + SignUtil.saveSigns(); + } else { + player.sendMessage(Residence.getLanguage().getPhrase("ResidenceNotForRentOrSell")); + return true; + } + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + public void run() { + SignUtil.CheckSign(res); + } + }, 5L); + + return true; + } if (command.equals("info")) { if (args.length == 2) { String areaname = rmanager.getNameByLoc(player.getLocation()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 79c054d07..c9754f9c6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -234,7 +234,6 @@ public void onSignInteract(PlayerInteractEvent event) { Bukkit.dispatchCommand(player, "res market rent " + landName + " " + stage); } } - } } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index ecc729a98..d77c20985 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -111,18 +111,31 @@ public void run() { threadd.start(); } - public static void CheckSign(ClaimedResidence res) { - + public static Signs getSignFromLoc(Location loc) { List signList = new ArrayList(); - signList.addAll(SignUtil.Signs.GetAllSigns()); + for (Signs one : signList) { + if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) + continue; + if (one.GetX() != loc.getX()) + continue; + if (one.GetY() != loc.getY()) + continue; + if (one.GetZ() != loc.getZ()) + continue; + return one; + } + return null; + } + public static void CheckSign(ClaimedResidence res) { + List signList = new ArrayList(); + signList.addAll(SignUtil.Signs.GetAllSigns()); for (Signs one : signList) { if (!res.getName().equals(one.GetResidence())) continue; SignUtil.SignUpdate(one); } - } public static void removeSign(String res) { @@ -190,18 +203,25 @@ public static boolean SignUpdate(Signs Sign) { sign.setLine(1, infoLine); - sign.setLine(2, rented ? NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", landName) - : NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", landName)); + String shortName = landName; + if (landName.length() > 15) + shortName = "~" + landName.substring(landName.length() - 14); + + sign.setLine(2, rented ? NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", shortName) + : NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", shortName)); sign.setLine(3, rented ? Residence.getLanguage().getPhrase("SignRentedBottomLine", Residence.getRentManager().getRentingPlayer(landName)) : Residence.getLanguage().getPhrase("SignForRentBottomLine")); sign.update(); } if (ForSale) { + String shortName = landName; + if (landName.length() > 15) + shortName = "~" + landName.substring(landName.length() - 14); sign.setLine(0, Residence.getLanguage().getPhrase("SignForSaleTopLine")); String infoLine = Residence.getLanguage().getPhrase("SignForSalePriceLine", String.valueOf(Residence.getTransactionManager().getSaleAmount(landName))); sign.setLine(1, infoLine); - sign.setLine(2, NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", landName)); + sign.setLine(2, NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", shortName)); sign.setLine(3, Residence.getLanguage().getPhrase("SignForSaleBottomLine")); sign.update(); } diff --git a/src/plugin.yml b/src/plugin.yml index 08e9bd6e0..900853aa6 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.17.2 +version: 2.9.18.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From f10e97a7b673cd81cd3e6b1749a861b57f21d5de Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 10 Jan 2016 15:12:57 +0200 Subject: [PATCH 0109/1142] Need to save tp yaw and pitch --- .../bekvon/bukkit/residence/Residence.java | 17 +++- .../residence/ResidenceCommandListener.java | 25 +++--- .../residence/economy/TransactionManager.java | 9 +-- .../residence/economy/rent/RentManager.java | 9 +-- .../listeners/ResidencePlayerListener.java | 19 +++-- .../protection/ClaimedResidence.java | 13 ++++ .../bukkit/residence/signsStuff/SignUtil.java | 77 +++++++++++-------- src/plugin.yml | 2 +- 8 files changed, 103 insertions(+), 68 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 69115c59d..ae09195ad 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -101,6 +101,9 @@ public class Residence extends JavaPlugin { protected static SelectionManager smanager; protected static PermissionManager gmanager; protected static ConfigManager cmanager; + + protected static SignUtil signmanager; + protected static ResidenceBlockListener blistener; protected static ResidencePlayerListener plistener; protected static ResidenceEntityListener elistener; @@ -575,16 +578,24 @@ public void onEnable() { Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); } - SignUtil.LoadSigns(); - ShopSignUtil.LoadSigns(); + Residence.setSignUtil(this); + Residence.getSignUtil().LoadSigns(); + ShopSignUtil.LoadShopVotes(); - ShopSignUtil.BoardUpdate(); versionChecker = new VersionChecker(this); versionChecker.VersionCheck(null); } + public static SignUtil getSignUtil() { + return signmanager; + } + + public static void setSignUtil(Residence plugin) { + signmanager = new SignUtil(plugin); + } + public void consoleMessage(String message) { ConsoleCommandSender console = Bukkit.getConsoleSender(); console.sendMessage("[Residence] " + message); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 835142172..eff78f6e7 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -42,7 +42,6 @@ import com.bekvon.bukkit.residence.shopStuff.Board; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.shopStuff.Vote; -import com.bekvon.bukkit.residence.signsStuff.SignUtil; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.spout.ResidenceSpout; import com.bekvon.bukkit.residence.utils.RandomTp; @@ -83,11 +82,11 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (sender instanceof Player) { Player player = (Player) sender; if (Residence.getPermissionManager().isResidenceAdmin(player)) { - SignUtil.convertSigns(sender); + Residence.getSignUtil().convertSigns(sender); } else player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); } else { - SignUtil.convertSigns(sender); + Residence.getSignUtil().convertSigns(sender); } return true; } @@ -496,7 +495,7 @@ public void run() { player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); return true; } - int number = SignUtil.updateAllSigns(); + int number = Residence.getSignUtil().updateAllSigns(); player.sendMessage(language.getPhrase("SignsUpdated", String.valueOf(number))); return true; } @@ -2157,7 +2156,9 @@ private boolean commandResMarket(String[] args, boolean resadmin, Player player, return true; } if (command.equals("sign")) { - + if (args.length != 3) { + return false; + } Block block = player.getTargetBlock((Set) null, 10); if (!(block.getState() instanceof Sign)) { @@ -2169,7 +2170,7 @@ private boolean commandResMarket(String[] args, boolean resadmin, Player player, Signs signInfo = new Signs(); - Signs oldSign = SignUtil.getSignFromLoc(sign.getLocation()); + Signs oldSign = Residence.getSignUtil().getSignFromLoc(sign.getLocation()); if (oldSign != null) signInfo = oldSign; @@ -2184,7 +2185,7 @@ private boolean commandResMarket(String[] args, boolean resadmin, Player player, player.sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); return true; } - + if (!CurrentRes.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { player.sendMessage(Residence.getLanguage().getPhrase("NotOwner")); return true; @@ -2203,8 +2204,8 @@ private boolean commandResMarket(String[] args, boolean resadmin, Player player, boolean ForRent = Residence.getRentManager().isForRent(landName); int category = 1; - if (SignUtil.Signs.GetAllSigns().size() > 0) - category = SignUtil.Signs.GetAllSigns().get(SignUtil.Signs.GetAllSigns().size() - 1).GetCategory() + 1; + if (Residence.getSignUtil().getSigns().GetAllSigns().size() > 0) + category = Residence.getSignUtil().getSigns().GetAllSigns().get(Residence.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; if (ForSale || ForRent) { signInfo.setCategory(category); @@ -2214,15 +2215,15 @@ private boolean commandResMarket(String[] args, boolean resadmin, Player player, signInfo.setY(loc.getBlockY()); signInfo.setZ(loc.getBlockZ()); signInfo.setLocation(loc); - SignUtil.Signs.addSign(signInfo); - SignUtil.saveSigns(); + Residence.getSignUtil().getSigns().addSign(signInfo); + Residence.getSignUtil().saveSigns(); } else { player.sendMessage(Residence.getLanguage().getPhrase("ResidenceNotForRentOrSell")); return true; } Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { public void run() { - SignUtil.CheckSign(res); + Residence.getSignUtil().CheckSign(res); } }, 5L); diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index fa85910d2..1d0ff8ddc 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -10,7 +10,6 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ResidenceManager; -import com.bekvon.bukkit.residence.signsStuff.SignUtil; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -108,7 +107,7 @@ public void putForSale(String areaname, Player player, int amount, boolean resad } sellAmount.put(areaname, amount); - SignUtil.CheckSign(area); + Residence.getSignUtil().CheckSign(area); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForSale", ChatColor.YELLOW + areaname + ChatColor.GREEN + "|" + ChatColor.YELLOW + amount + ChatColor.GREEN)); @@ -192,7 +191,7 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { res.getPermissions().applyDefaultFlags(); this.removeFromSale(areaname); - SignUtil.CheckSign(res); + Residence.getSignUtil().CheckSign(res); CuboidArea area = res.getAreaArray()[0]; Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); @@ -224,7 +223,7 @@ public void removeFromSale(Player player, String areaname, boolean resadmin) { } if (area.getPermissions().getOwner().equals(player.getName()) || resadmin) { removeFromSale(areaname); - SignUtil.CheckSign(area); + Residence.getSignUtil().CheckSign(area); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceStopSelling")); } else { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); @@ -236,7 +235,7 @@ public void removeFromSale(Player player, String areaname, boolean resadmin) { public void removeFromSale(String areaname) { sellAmount.remove(areaname); - SignUtil.removeSign(areaname); + Residence.getSignUtil().removeSign(areaname); } public boolean isForSale(String areaname) { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 723a453a6..decb10198 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -14,7 +14,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import com.bekvon.bukkit.residence.signsStuff.SignUtil; import com.bekvon.bukkit.residence.utils.GetTime; import java.util.ArrayList; @@ -153,7 +152,7 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi newrent.autoRefresh = repeat; rentedLand.put(landName, newrent); - SignUtil.CheckSign(res); + Residence.getSignUtil().CheckSign(res); CuboidArea area = res.getAreaArray()[0]; Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); @@ -189,7 +188,7 @@ public void removeFromForRent(Player player, String landName, boolean resadmin) ClaimedResidence res = Residence.getResidenceManager().getByName(landName); if (res != null) { res.getPermissions().applyDefaultFlags(); - SignUtil.CheckSign(res); + Residence.getSignUtil().CheckSign(res); } player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceUnrent", ChatColor.YELLOW + landName + ChatColor.GREEN)); } else { @@ -231,7 +230,7 @@ public void unrent(Player player, String landName, boolean resadmin) { rentedLand.remove(landName); if (res != null) { res.getPermissions().applyDefaultFlags(); - SignUtil.CheckSign(res); + Residence.getSignUtil().CheckSign(res); } } player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceRemoveRentable", ChatColor.YELLOW + landName @@ -250,7 +249,7 @@ public void removeRentable(String landName) { removeFromRent(landName); rentableLand.remove(landName); - SignUtil.removeSign(landName); + Residence.getSignUtil().removeSign(landName); } public boolean isForRent(String landName) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c9754f9c6..63e6e4d50 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -63,7 +63,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.signsStuff.SignUtil; import com.bekvon.bukkit.residence.utils.ActionBar; /** @@ -203,7 +202,7 @@ public void onSignInteract(PlayerInteractEvent event) { Location loc = block.getLocation(); - for (Signs one : SignUtil.Signs.GetAllSigns()) { + for (Signs one : Residence.getSignUtil().getSigns().GetAllSigns()) { if (!one.GetWorld().equalsIgnoreCase(loc.getWorld().getName())) continue; if (one.GetX() != loc.getBlockX()) @@ -285,8 +284,8 @@ public void onSignCreate(SignChangeEvent event) { boolean ForRent = Residence.getRentManager().isForRent(landName); int category = 1; - if (SignUtil.Signs.GetAllSigns().size() > 0) - category = SignUtil.Signs.GetAllSigns().get(SignUtil.Signs.GetAllSigns().size() - 1).GetCategory() + 1; + if (Residence.getSignUtil().getSigns().GetAllSigns().size() > 0) + category = Residence.getSignUtil().getSigns().GetAllSigns().get(Residence.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; if (ForSale || ForRent) { signInfo.setCategory(category); @@ -296,12 +295,12 @@ public void onSignCreate(SignChangeEvent event) { signInfo.setY(loc.getBlockY()); signInfo.setZ(loc.getBlockZ()); signInfo.setLocation(loc); - SignUtil.Signs.addSign(signInfo); - SignUtil.saveSigns(); + Residence.getSignUtil().getSigns().addSign(signInfo); + Residence.getSignUtil().saveSigns(); } Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { public void run() { - SignUtil.CheckSign(residence); + Residence.getSignUtil().CheckSign(residence); } }, 5L); } @@ -322,7 +321,7 @@ public void onSignDestroy(BlockBreakEvent event) { Location loc = block.getLocation(); - for (Signs one : SignUtil.Signs.GetAllSigns()) { + for (Signs one : Residence.getSignUtil().getSigns().GetAllSigns()) { if (!one.GetWorld().equalsIgnoreCase(loc.getWorld().getName())) continue; @@ -333,8 +332,8 @@ public void onSignDestroy(BlockBreakEvent event) { if (one.GetZ() != loc.getBlockZ()) continue; - SignUtil.Signs.removeSign(one); - SignUtil.saveSigns(); + Residence.getSignUtil().getSigns().removeSign(one); + Residence.getSignUtil().saveSigns(); break; } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index aefe72d62..0b971faa2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -990,6 +990,8 @@ public Map save() { tpmap.put("X", tpLoc.getBlockX()); tpmap.put("Y", tpLoc.getBlockY()); tpmap.put("Z", tpLoc.getBlockZ()); + tpmap.put("Pitch", tpLoc.getPitch()); + tpmap.put("Yaw", tpLoc.getYaw()); root.put("TPLoc", tpmap); } return root; @@ -1043,7 +1045,18 @@ public static ClaimedResidence load(Map root, ClaimedResidence p res.parent = parent; Map tploc = (Map) root.get("TPLoc"); if (tploc != null) { + double pitch = 0.0; + double yaw = 0.0; + + if (tploc.containsKey("Yaw")) + yaw = (double) tploc.get("Yaw"); + + if (tploc.containsKey("Pitch")) + pitch = (double) tploc.get("Pitch"); + res.tpLoc = new Location(world, (Integer) tploc.get("X"), (Integer) tploc.get("Y"), (Integer) tploc.get("Z")); + res.tpLoc.setPitch((float) pitch); + res.tpLoc.setYaw((float) yaw); } if (root.containsKey("ChatPrefix")) diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index d77c20985..2ea200dfa 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -27,24 +27,33 @@ public class SignUtil { - public static SignInfo Signs = new SignInfo(); + private Residence plugin; + public SignInfo Signs = new SignInfo(); - public static int updateAllSigns() { - List temp = new ArrayList(); + public SignUtil(Residence plugin) { + this.plugin = plugin; + } + + public SignInfo getSigns() { + return Signs; + } + + public int updateAllSigns() { + List temp = new ArrayList(); temp.addAll(Signs.GetAllSigns()); - for (com.bekvon.bukkit.residence.signsStuff.Signs one : temp) { + for (Signs one : temp) { SignUpdate(one); } return temp.size(); } // Sign file - public static void LoadSigns() { + public void LoadSigns() { Thread threadd = new Thread() { public void run() { Signs.GetAllSigns().clear(); - File file = new File(Residence.instance.getDataFolder(), "Signs.yml"); + File file = new File(plugin.getDataFolder(), "Signs.yml"); YamlConfiguration f = YamlConfiguration.loadConfiguration(file); if (!f.isConfigurationSection("Signs")) @@ -76,11 +85,11 @@ public void run() { } // Signs save file - public static void saveSigns() { + public void saveSigns() { Thread threadd = new Thread() { public void run() { - File f = new File(Residence.instance.getDataFolder(), "Signs.yml"); + File f = new File(plugin.getDataFolder(), "Signs.yml"); YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); @@ -111,9 +120,9 @@ public void run() { threadd.start(); } - public static Signs getSignFromLoc(Location loc) { + public Signs getSignFromLoc(Location loc) { List signList = new ArrayList(); - signList.addAll(SignUtil.Signs.GetAllSigns()); + signList.addAll(this.getSigns().GetAllSigns()); for (Signs one : signList) { if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) continue; @@ -128,28 +137,28 @@ public static Signs getSignFromLoc(Location loc) { return null; } - public static void CheckSign(ClaimedResidence res) { + public void CheckSign(ClaimedResidence res) { List signList = new ArrayList(); - signList.addAll(SignUtil.Signs.GetAllSigns()); + signList.addAll(this.getSigns().GetAllSigns()); for (Signs one : signList) { if (!res.getName().equals(one.GetResidence())) continue; - SignUtil.SignUpdate(one); + this.SignUpdate(one); } } - public static void removeSign(String res) { + public void removeSign(String res) { List signList = new ArrayList(); - signList.addAll(SignUtil.Signs.GetAllSigns()); + signList.addAll(this.getSigns().GetAllSigns()); for (Signs one : signList) { if (!res.equals(one.GetResidence())) continue; - SignUtil.SignUpdate(one); + this.SignUpdate(one); } } - public static boolean SignUpdate(Signs Sign) { + public boolean SignUpdate(Signs Sign) { String landName = Sign.GetResidence(); @@ -202,11 +211,7 @@ public static boolean SignUpdate(Signs Sign) { .getRentManager().getRentDays(landName) + "|" + Residence.getRentManager().getRentableRepeatable(landName)); sign.setLine(1, infoLine); - - String shortName = landName; - if (landName.length() > 15) - shortName = "~" + landName.substring(landName.length() - 14); - + String shortName = fixResName(landName); sign.setLine(2, rented ? NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", shortName) : NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", shortName)); sign.setLine(3, rented ? Residence.getLanguage().getPhrase("SignRentedBottomLine", Residence.getRentManager().getRentingPlayer(landName)) @@ -215,9 +220,8 @@ public static boolean SignUpdate(Signs Sign) { } if (ForSale) { - String shortName = landName; - if (landName.length() > 15) - shortName = "~" + landName.substring(landName.length() - 14); + String shortName = fixResName(landName); + sign.setLine(0, Residence.getLanguage().getPhrase("SignForSaleTopLine")); String infoLine = Residence.getLanguage().getPhrase("SignForSalePriceLine", String.valueOf(Residence.getTransactionManager().getSaleAmount(landName))); sign.setLine(1, infoLine); @@ -229,7 +233,7 @@ public static boolean SignUpdate(Signs Sign) { return true; } - public static void convertSigns(CommandSender sender) { + public void convertSigns(CommandSender sender) { File file = new File("plugins/ResidenceSigns/signs.yml"); if (!file.exists()) { sender.sendMessage(ChatColor.GOLD + "Can't find ResidenceSign file"); @@ -246,8 +250,8 @@ public static void convertSigns(CommandSender sender) { ConfigurationSection section = conf.getConfigurationSection("signs"); int category = 1; - if (SignUtil.Signs.GetAllSigns().size() > 0) - category = SignUtil.Signs.GetAllSigns().get(SignUtil.Signs.GetAllSigns().size() - 1).GetCategory() + 1; + if (this.getSigns().GetAllSigns().size() > 0) + category = this.getSigns().GetAllSigns().get(this.getSigns().GetAllSigns().size() - 1).GetCategory() + 1; long time = System.currentTimeMillis(); @@ -285,7 +289,7 @@ public static void convertSigns(CommandSender sender) { signs.setZ(z); boolean found = false; - for (Signs onesigns : SignUtil.Signs.GetAllSigns()) { + for (Signs onesigns : this.getSigns().GetAllSigns()) { if (!onesigns.GetWorld().equalsIgnoreCase(signs.GetWorld())) continue; if (onesigns.GetX() != signs.GetX()) @@ -306,16 +310,25 @@ public static void convertSigns(CommandSender sender) { if (!(block.getState() instanceof Sign)) continue; - SignUtil.Signs.addSign(signs); - SignUtil.SignUpdate(signs); + this.getSigns().addSign(signs); + this.SignUpdate(signs); category++; i++; } - SignUtil.saveSigns(); + this.saveSigns(); sender.sendMessage(ChatColor.GOLD + "" + i + ChatColor.YELLOW + " signs have being converted to new format! It took " + ChatColor.GOLD + (System .currentTimeMillis() - time) + ChatColor.YELLOW + " ms!"); } + public String fixResName(String name) { + if (name.length() > 15) + name = "~" + name.substring(name.length() - 14); + if (name.length() == 15 && name.substring(name.length() - 13).contains(".")) { + String[] temp = name.split("\\."); + name = "~." + temp[temp.length - 1]; + } + return name; + } } diff --git a/src/plugin.yml b/src/plugin.yml index 900853aa6..9b4455159 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.18.0 +version: 2.9.18.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From cbb36412ec3ea1ca0f7bcd5edadddc0904068f97 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 11 Jan 2016 16:55:31 +0200 Subject: [PATCH 0110/1142] residece.tpbypass permission node for teleportation --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 2 +- src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 0b971faa2..3f85233c7 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -841,7 +841,7 @@ public int isSafeTp(Player player) { public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { boolean isAdmin = Residence.isResAdminOn(reqPlayer); - if (!resadmin && !isAdmin) { + if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass")) { PermissionGroup group = Residence.getPermissionManager().getGroup(reqPlayer); if (!group.hasTpAccess()) { reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny")); diff --git a/src/plugin.yml b/src/plugin.yml index 9b4455159..ff701b5f4 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.18.2 +version: 2.9.18.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 336ad4d2f391179469b4da5096bfc5332ff5cfad Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 16 Jan 2016 12:06:20 +0200 Subject: [PATCH 0111/1142] Option to disable flag gui --- src/com/bekvon/bukkit/residence/ConfigManager.java | 5 +++++ .../bekvon/bukkit/residence/ResidenceCommandListener.java | 4 ++-- .../bekvon/bukkit/residence/selection/SelectionManager.java | 3 +++ src/plugin.yml | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 1384c2cf9..86f99f4eb 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -113,6 +113,7 @@ public class ConfigManager { protected boolean spoutEnable; protected boolean AutoMobRemoval; protected boolean BounceAnimation; + protected boolean useFlagGUI; protected int AutoMobRemovalInterval; protected boolean enableLeaseMoneyAccount; protected boolean CouldronCompatability; @@ -696,6 +697,10 @@ void UpdateConfigFile() { writer.addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); BounceAnimation = GetConfig("Global.BounceAnimation", true, writer, conf); + + writer.addComment("Global.GUI.Enabled", "Enable or disable flag GUI"); + useFlagGUI = GetConfig("Global.GUI.Enabled", true, writer, conf); + writer.addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); int id = GetConfig("Global.GUI.setTrue.Id", 35, writer, conf); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index eff78f6e7..1fb5c19a6 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1822,7 +1822,7 @@ private boolean commandResSet(String[] args, boolean resadmin, Player player, in player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); } return true; - } else if (args.length == 1) { + } else if (args.length == 1 && Residence.getConfigManager().useFlagGUI) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { @@ -1836,7 +1836,7 @@ private boolean commandResSet(String[] args, boolean resadmin, Player player, in } else player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; - } else if (args.length == 2) { + } else if (args.length == 2 && Residence.getConfigManager().useFlagGUI) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res != null) { if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index ec1aaeb8f..f48fb79dd 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -197,6 +197,9 @@ public List getLocations(Location lowLoc, Location loc, Double TX, Dou } List locList = new ArrayList(); + + if (lowLoc.getWorld() != loc.getWorld()) + return locList; for (double x = CollumnStart; x < TX; x += eachCollumn) { Location CurrentX = lowLoc.clone(); diff --git a/src/plugin.yml b/src/plugin.yml index ff701b5f4..90139073c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.18.3 +version: 2.9.19.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From a4af4cd9fa705a0dd60a6f6ff0d12e43fce03c1c Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jan 2016 12:20:14 +0200 Subject: [PATCH 0112/1142] Remake of tab complete --- build.xml | 190 ++++++++-------- src/com/bekvon/bukkit/residence/Locale.java | 63 +++++- .../bekvon/bukkit/residence/Residence.java | 6 +- .../bukkit/residence/text/help/HelpEntry.java | 212 ++++++++++++++---- .../bukkit/residence/utils/TabComplete.java | 25 +-- src/plugin.yml | 2 +- 6 files changed, 338 insertions(+), 160 deletions(-) diff --git a/build.xml b/build.xml index 0850145a6..02547deac 100644 --- a/build.xml +++ b/build.xml @@ -1,95 +1,95 @@ - - - - - - - - - - - Building the .jar file. - - - - - Cleaning - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Compiling - - - - - - - - - - - - - Packaging JAR distribution - - - - - - - - - - - - Cleaning up - - - - + + + + + + + + + + + Building the .jar file. + + + + + Cleaning + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Compiling + + + + + + + + + + + + + Packaging JAR distribution + + + + + + + + + + + + Cleaning up + + + + diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 7dd215be0..d3bab0805 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -65,7 +65,8 @@ private static YamlConfiguration loadConfiguration(BufferedReader in, String lan } catch (FileNotFoundException ex) { } catch (IOException ex) { } catch (InvalidConfigurationException ex) { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[Residence] Your locale file for " + language + " is incorect! Use http://yaml-online-parser.appspot.com/ to find issue."); + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[Residence] Your locale file for " + language + + " is incorect! Use http://yaml-online-parser.appspot.com/ to find issue."); return null; } @@ -489,6 +490,7 @@ public static void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Description", "Turns on auto selection tool", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Info", Arrays.asList("Usage: /res select auto [playername]"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Args", "[playername]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Description", "Display selection cost", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Info", Arrays.asList("Usage: /res select cost"), writer, conf, true); @@ -520,7 +522,8 @@ public static void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Description", "Select a existing area in a residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Info", - Arrays.asList("Usage /res select ", "Selects a existing area in a residence."), writer, conf, true); + Arrays.asList("Usage /res select residence ", "Selects a existing area in a residence."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Description", "Set selection using the current WorldEdit selection.", writer, conf, @@ -535,32 +538,38 @@ public static void LoadLang(String lang) { // res remove GetConfig("CommandHelp.SubCommands.res.SubCommands.remove.Description", "Remove residences.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("Usage: /res remove "), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.remove.Args", "[residence]", writer, conf, true); // res padd GetConfig("CommandHelp.SubCommands.res.SubCommands.padd.Description", "Add player to residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.padd.Info", Arrays.asList("Usage: /res padd [player]", "Adds essential flags for player"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.padd.Args", "[residence] [playername]", writer, conf, true); // res pdel GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Description", "Remove player from residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Info", Arrays.asList("Usage: /res pdel [player]", "Removes essential flags from player"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Args", "[residence] [playername]", writer, conf, true); // res info GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Info", Arrays.asList("Usage: /res info ", "Leave off to display info for the residence your currently in."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Args", "[residence]", writer, conf, true); // res set GetConfig("CommandHelp.SubCommands.res.SubCommands.set.Description", "Set general flags on a Residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.set.Info", Arrays.asList("Usage: /res set [flag] [true/false/remove]", "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.set.Args", "[residence] [flag] [true/false/remove]", writer, conf, true); // res pset GetConfig("CommandHelp.SubCommands.res.SubCommands.pset.Description", "Set flags on a specific player for a Residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.pset.Info", Arrays.asList("Usage: /res pset [player] [flag] [true/false/remove]", "Usage: /res pset [player] removeall", "To see a list of flags, use /res flags ?"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.pset.Args", "[residence] [playername] [flag] [true/false/remove]", writer, conf, true); // res flags GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.Description", "List of flags", writer, conf, true); @@ -1038,6 +1047,7 @@ public static void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.tp.Info", Arrays.asList("Usage: /res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", "Your permission group must also be allowed to teleport by the server admin."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.tp.Args", "[residence]", writer, conf, true); // res rt GetConfig("CommandHelp.SubCommands.res.SubCommands.rt.Description", "Teleports to random location in world", writer, conf, true); @@ -1055,18 +1065,22 @@ public static void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Description", "Vote for residence shop", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Info", Arrays.asList("Usage: /res shop vote [amount]", "Votes for current or defined residence"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Description", "Give like for residence shop", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Info", Arrays.asList("Usage: /res shop like ", "Gives like for residence shop"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Args", "[residenceshop]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Description", "Shows res shop votes", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Info", Arrays.asList("Usage: /res shop votes ", "Shows full vote list of current or defined residence shop"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Args", "[residenceshop]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Description", "Shows res shop likes", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Info", Arrays.asList("Usage: /res shop likes ", "Shows full like list of current or defined residence shop"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Args", "[residenceshop]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Description", "Sets residence shop description", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Info", Arrays.asList("Usage: /res shop setdesc [text]", @@ -1091,6 +1105,7 @@ public static void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.subzone.Info", Arrays.asList("Usage: /res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.subzone.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.Description", "Manage physical areas for a residence.", writer, conf, true); //res area @@ -1098,28 +1113,34 @@ public static void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Info", Arrays.asList("Usage: /res area list [residence] "), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Description", "List coordinates and other Info for areas", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("Usage: /res area listall [residence] "), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Description", "Add physical areas to a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Info", Arrays.asList("Usage: /res area add [residence] [areaID]", "You must first select two points first."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Description", "Remove physical areas from a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("Usage: /res area remove [residence] [areaID]"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Description", "Replace physical areas in a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("Usage: /res area replace [residence] [areaID]", "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Args", "[residence]", writer, conf, true); // res message GetConfig("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.message.Info", Arrays.asList("Usage: /res message [enter/leave] [message]", "Set the enter or leave message of a residence.", "Usage: /res message remove [enter/leave]", "Removes a enter or leave message."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.message.Args", "[residence] [enter/leave]", writer, conf, true); // res lease GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.Description", "Manage residence leases", writer, conf, true); @@ -1127,33 +1148,36 @@ public static void LoadLang(String lang) { "CommandHelp.SubCommands.res.SubCommands.lease.Info", Arrays.asList("Usage: /res lease [renew/cost] [residence]", "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.Args", "[renew/cost] [residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", Arrays.asList("Usage: /resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Description", "Renew the lease time", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Info", - Arrays.asList("Usage: /resadmin lease renew ", "Renews the lease time for current or specified residence."), writer, conf, - true); + Arrays.asList("Usage: /resadmin lease renew ", "Renews the lease time for current or specified residence."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Description", "Lease end date", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Info", - Arrays.asList("Usage: /resadmin lease expires ", "Shows when expires residence lease time."), writer, conf, - true); + Arrays.asList("Usage: /resadmin lease expires ", "Shows when expires residence lease time."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Description", "Shows renew cost", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Info", Arrays.asList("Usage: /resadmin lease cost ", "Shows how much money you need to renew residence lease."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Args", "[residence]", writer, conf, true); // res bank GetConfig("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.bank.Info", Arrays.asList("Usage: /res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", - "You must have the +bank flag."), writer, conf, - true); + "You must have the +bank flag."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.bank.Args", "[deposit/withdraw] [residence]", writer, conf, true); // res confirm GetConfig("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence.", writer, conf, true); @@ -1171,11 +1195,13 @@ public static void LoadLang(String lang) { "Blacklisting a material prevents it from being placed in the residence.", "Ignorelist causes a specific material to not be protected by Residence."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lset.Args", "[residence] [blacklist/ignorelist] [material]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("Usage: /res removeall [owner]", "Removes all residences owned by a specific player.'", "Requires /resadmin if you use it on anyone besides yourself."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.removeall.Args", "[playername]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.list.Description", "List Residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.list.Info", @@ -1184,12 +1210,14 @@ public static void LoadLang(String lang) { "If listing your own residences, shows hidden ones as well.", "To list everyones residences, use /res listall."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.list.Args", "[playername]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.listhidden.Description", "List Hidden Residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.listhidden.Info", Arrays.asList("Usage: /res listhidden ", "Lists hidden residences for a player."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.listhidden.Args", "[playername]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.listall.Description", "List All Residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.listall.Info", @@ -1208,30 +1236,35 @@ public static void LoadLang(String lang) { Arrays.asList("Usage: /res sublist ", "List subzones within a residence."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.sublist.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.default.Description", "Reset residence to default flags.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.default.Info", Arrays.asList("Usage: /res default ", "Resets the flags on a residence to their default. You must be the owner or an admin to do this."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.default.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Description", "Renames a residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Info", Arrays.asList("Usage: /res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", "The name must not already be taken by another residence."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.kick.Description", "Kicks player from residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.kick.Info", Arrays.asList("Usage: /res kick ", "You must be the owner or an admin to do this.", "Player should be online."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.kick.Args", "[playername]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Description", "Mirrors Flags", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Info", Arrays.asList("Usage: /res mirror [Source Residence] [Target Residence]", "Mirrors flags from one residence to another. You must be owner of both or a admin to do this."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Args", "[residence] [residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.Description", "Buy, Sell, or Rent Residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Info", @@ -1242,6 +1275,7 @@ public static void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Info", Arrays.asList("Usage: /res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Description", "Lists rentable and for sale residences.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Info", @@ -1253,33 +1287,39 @@ public static void LoadLang(String lang) { Arrays.asList("Usage: /res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", "Another player can buy the residence with /res market buy"), writer, conf, true); - + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Args", "[residence]", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Description", "Set market sign", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Info", Arrays.asList("Usage: /res market sign [residence]", "Sets market sign you are looking at."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Description", "Buy a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Info", Arrays.asList("Usage: /res market buy [residence]", "Buys a Residence if its for sale."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Description", "Stops selling a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Info", Arrays.asList("Usage: /res market unsell [residence]"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Description", "ent a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Info", Arrays.asList("Usage: /res market rent [residence] ", "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Args", "[cresidence] [true/false]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Description", "Make a residence rentable.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Info", Arrays.asList("Usage: /res market rentable [residence] [cost] [days] ", "Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Description", "Remove a residence from rent or rentable.", writer, conf, true); @@ -1287,6 +1327,7 @@ public static void LoadLang(String lang) { Arrays.asList("Usage: /res market release [residence]", "If you are the renter, this command releases the rent on the house for you.", "If you are the owner, this command makes the residence not for rent anymore."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.current.Description", "Show residence your currently in.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.current.Info", @@ -1342,11 +1383,13 @@ public static void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.server.Info", Arrays.asList("Usage: /resadmin server [residence]", "Make a residence server owned."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.server.Args", "[cresidence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.setowner.Description", "Change owner of a residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.setowner.Info", Arrays.asList("Usage: /resadmin setowner [residence] [player]"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.setowner.Args", "[cresidence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.resreload.Info", @@ -1366,8 +1409,6 @@ public static void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.version.Info", Arrays.asList("Usage: /res version"), writer, conf, true); - // GetConfig("CommandHelp.SubCommands.res.select.Info", - // Arrays.asList("", "", ""), writer, conf, true); // Write back config try { diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index ae09195ad..289f44963 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -580,7 +580,7 @@ public void onEnable() { Residence.setSignUtil(this); Residence.getSignUtil().LoadSigns(); - + ShopSignUtil.LoadShopVotes(); ShopSignUtil.BoardUpdate(); @@ -648,6 +648,10 @@ public static LeaseManager getLeaseManager() { return leasemanager; } + public static HelpEntry getHelpPages() { + return helppages; + } + public static ConfigManager getConfigManager() { return cmanager; } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 3a3f650b3..4a78721d7 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -7,10 +7,12 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Material; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.containers.HelpLines; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import java.io.File; @@ -20,6 +22,7 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Map.Entry; import java.util.Set; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; @@ -252,10 +255,57 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { return entry; } - public static Set getSubCommands(String[] args) { - File langFile = new File(new File(Residence.getDataLocation(), "Language"), Residence.getConfigManager().getLanguage() + ".yml"); - - Set subCommands = new HashSet(Arrays.asList("")); +// public static Set getSubCommands(String[] args) { +// File langFile = new File(new File(Residence.getDataLocation(), "Language"), "English.yml"); +// +// Set subCommands = new HashSet(Arrays.asList("")); +// +// if (langFile.isFile()) { +// FileConfiguration node = new YamlConfiguration(); +// try { +// node.load(langFile); +// } catch (FileNotFoundException e) { +// e.printStackTrace(); +// } catch (IOException e) { +// e.printStackTrace(); +// } catch (InvalidConfigurationException e) { +// e.printStackTrace(); +// } +// +// subCommands = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands").getKeys(false); +// ConfigurationSection meinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); +// +// String pathKey = convertArgs(args); +// String key = pathKey + ".SubCommands"; +// +// Debug.D("" + key); +// +// if (key == "") { +// return subCommands; +// } else { +// if (meinPath.contains(key)) { +// return meinPath.getConfigurationSection(key).getKeys(false); +// } else { +// String[] arg = new String[args.length - 1]; +// for (int i = 0; i < args.length - 1; i++) { +// arg[i] = args[i]; +// } +// pathKey = convertArgs(arg); +// key = pathKey + ".SubCommands"; +// if (meinPath.contains(key)) { +// return meinPath.getConfigurationSection(key).getKeys(false); +// } +// } +// } +// +// } +// return new HashSet(Arrays.asList("?")); +// } + + public Set getSubCommands(CommandSender sender, String[] args) { + File langFile = new File(new File(Residence.getDataLocation(), "Language"), "English.yml"); +// + Set subCommands = new HashSet(); if (langFile.isFile()) { FileConfiguration node = new YamlConfiguration(); @@ -269,50 +319,134 @@ public static Set getSubCommands(String[] args) { e.printStackTrace(); } - subCommands = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands").getKeys(false); ConfigurationSection meinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); + ConfigurationSection tempmeinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); - String key = convertArgs(args); + if (args.length == 1) + return meinPath.getKeys(false); - if (key == "") { - return subCommands; - } else { - if (meinPath.contains(key)) { - return meinPath.getConfigurationSection(key).getKeys(false); - } else { - String[] arg = new String[args.length - 1]; - for (int i = 0; i < args.length - 1; i++) { - arg[i] = args[i]; + boolean ok = true; + int i = 0; + while (ok) { + + if (args[i].equalsIgnoreCase("")) + return tempmeinPath.getKeys(false); + + if (!tempmeinPath.isConfigurationSection(args[i] + ".SubCommands")) + break; + + tempmeinPath = tempmeinPath.getConfigurationSection(args[i] + ".SubCommands"); + + i++; + } + + int neededArgPlace = args.length - 2 - i; + + boolean subCommand = true; + if (tempmeinPath.isConfigurationSection(args[i])) { + subCommand = false; + tempmeinPath = tempmeinPath.getConfigurationSection(args[i]); + } + + String Args = (tempmeinPath.isString("Args") ? tempmeinPath.getString("Args") : null); + + List ArgsList = new ArrayList(); + + if (Args != null) + if (Args.contains(" ")) + ArgsList.addAll(Arrays.asList(Args.split(" "))); + else + ArgsList.add(Args); + + String NeededArg = null; + if (neededArgPlace < ArgsList.size() && neededArgPlace >= 0) + NeededArg = ArgsList.get(neededArgPlace); + + if (NeededArg != null) + switch (NeededArg) { + case "[playername]": + for (Player one : Bukkit.getOnlinePlayers()) + subCommands.add(one.getName()); + break; + case "[residence]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getName(); + if (resName != null) + subCommands.add(resName); + } + ArrayList resList = Residence.getResidenceManager().getResidenceList(((Player) sender).getName(), true, false); + if (resList.size() > 0) + subCommands.addAll(resList); + } else { + ArrayList resList = Residence.getResidenceManager().getResidenceList("Server_land", true, false); + if (resList.size() > 0) + subCommands.addAll(resList); + } + break; + case "[cresidence]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getName(); + if (resName != null) + subCommands.add(resName); + } + } + break; + case "[residenceshop]": + subCommands.addAll(Residence.getResidenceManager().getShops()); + break; + case "[flag]": + FlagPermissions GlobalFlags = Residence.getPermissionManager().getAllFlags(); + for (Entry one : GlobalFlags.getFlags().entrySet()) { + subCommands.add(one.getKey()); } - key = convertArgs(arg); - if (meinPath.contains(key)) { - return meinPath.getConfigurationSection(key).getKeys(false); + break; + case "[deposit/withdraw]": + subCommands.add("deposit"); + subCommands.add("withdraw"); + break; + case "[enter/leave]": + subCommands.add("enter"); + subCommands.add("leave"); + break; + case "[renew/cost]": + subCommands.add("renew"); + subCommands.add("cost"); + break; + case "[true/false]": + subCommands.add("true"); + subCommands.add("false"); + break; + case "[true/false/remove]": + subCommands.add("true"); + subCommands.add("false"); + subCommands.add("remove"); + break; + case "[blacklist/ignorelist]": + subCommands.add("blacklist"); + subCommands.add("ignorelist"); + break; + case "[material]": + for (Material one : Material.values()) { + subCommands.add(one.name().toLowerCase()); } + break; } + + String command = tempmeinPath.getCurrentPath().replace("CommandHelp.SubCommands.", "").replace(".SubCommands.", " "); + if (subCommands.size() > 0) { + return subCommands; } - } - return new HashSet(Arrays.asList("?")); - } - private static String convertArgs(String[] args) { - String key = ""; - if (args.length > 0) { - int i = 1; - for (String one : args) { - if (one.equalsIgnoreCase("")) - continue; - key += one; - if (i < args.length) - key += ".SubCommands."; - if (i < args.length + 1) - key += ".SubCommands"; - i++; + if (subCommand) + return tempmeinPath.getKeys(false); + else { + Bukkit.dispatchCommand(sender, command + " ?"); } - } else if (args.length == 1) { - key = args[0]; - key += ".SubCommands"; } - return key; + return new HashSet(Arrays.asList("?")); } - } diff --git a/src/com/bekvon/bukkit/residence/utils/TabComplete.java b/src/com/bekvon/bukkit/residence/utils/TabComplete.java index 4460c45dc..56e0590df 100644 --- a/src/com/bekvon/bukkit/residence/utils/TabComplete.java +++ b/src/com/bekvon/bukkit/residence/utils/TabComplete.java @@ -5,31 +5,30 @@ import java.util.List; import java.util.Set; -import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.bukkit.util.StringUtil; -import com.bekvon.bukkit.residence.text.help.HelpEntry; +import com.bekvon.bukkit.residence.Residence; public class TabComplete implements TabCompleter { @Override public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { List completionList = new ArrayList<>(); - Set Commands = HelpEntry.getSubCommands(args); + Set Commands = Residence.getHelpPages().getSubCommands(sender, args); - if (Commands.contains("?")) { - String com = ""; - for (String one : args) { - com += " " + one; - } - Bukkit.dispatchCommand(sender, command.getName() + com + "?"); - Bukkit.getConsoleSender().sendMessage(sender.getName() + " issued server command: " + command.getName() + com + "?"); - Commands.clear(); - Commands.add(""); - } +// if (Commands.contains("?")) { +// String com = ""; +// for (String one : args) { +// com += " " + one; +// } +// Bukkit.dispatchCommand(sender, command.getName() + com + "?"); +// Bukkit.getConsoleSender().sendMessage(sender.getName() + " issued server command: " + command.getName() + com + "?"); +// Commands.clear(); +// Commands.add(""); +// } String PartOfCommand = args[args.length - 1]; StringUtil.copyPartialMatches(PartOfCommand, Commands, completionList); diff --git a/src/plugin.yml b/src/plugin.yml index 90139073c..e536ca04b 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.19.0 +version: 2.9.20.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 2c5d3fe2b9319063c350edea0288c6ea580dc993 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 24 Jan 2016 16:21:38 +0200 Subject: [PATCH 0113/1142] Prevent case sensitive residence names --- .../bukkit/residence/ConfigManager.java | 28 +++++++++-- .../residence/ResidenceCommandListener.java | 5 ++ .../protection/ClaimedResidence.java | 26 +++++++++- .../protection/ResidenceManager.java | 48 +++++++++++++++++-- src/plugin.yml | 2 +- 5 files changed, 99 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 86f99f4eb..88369ff76 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -50,6 +50,8 @@ public class ConfigManager { protected boolean UseClean; protected boolean PvPFlagPrevent; protected boolean OverridePvp; + protected boolean ResCreateCaseSensitive; + protected boolean ResTpCaseSensitive; protected int infoToolId; protected int AutoCleanUpDays; protected int selectionToolId; @@ -363,6 +365,17 @@ void UpdateConfigFile() { writer.addComment("Global.Optimizations.DefaultWorld", "Name of your mein residence world. Usualy normal starting world 'World'. Capitalization essential"); DefaultWorld = GetConfig("Global.Optimizations.DefaultWorld", defaultWorldName, writer, conf, false); + writer.addComment("Global.Optimizations.ResCreateCaseSensitive", + "When its true you can create residences with similar names but different capitalization. An example: Village and village are counted as different residences", + "When it's set to false you can't create residences with same names but different capitalizations"); + ResCreateCaseSensitive = GetConfig("Global.Optimizations.ResCreateCaseSensitive", false, writer, conf); + + writer.addComment("Global.Optimizations.ResTpCaseSensitive", + "When this set to true, when you are performing /res tp command and providing residence name, it should be exactly same as residence name. So in example Village is not same as village", + "When it's set to false you can teleport to residence with name Village even if you executing command /res tp village", + "Don't disable this if you already have some duplicating residences in your database as this will prevent players from teleporting to one of them"); + ResTpCaseSensitive = GetConfig("Global.Optimizations.ResTpCaseSensitive", true, writer, conf); + writer.addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxResCount = GetConfig("Global.Optimizations.MaxResCount", 30, writer, conf); @@ -696,11 +709,10 @@ void UpdateConfigFile() { writer.addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); BounceAnimation = GetConfig("Global.BounceAnimation", true, writer, conf); - - + writer.addComment("Global.GUI.Enabled", "Enable or disable flag GUI"); useFlagGUI = GetConfig("Global.GUI.Enabled", true, writer, conf); - + writer.addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); int id = GetConfig("Global.GUI.setTrue.Id", 35, writer, conf); @@ -919,6 +931,14 @@ public boolean isOverridePvp() { return OverridePvp; } + public boolean isResTpCaseSensitive() { + return ResTpCaseSensitive; + } + + public boolean isResCreateCaseSensitive() { + return ResCreateCaseSensitive; + } + public int getInfoToolID() { return infoToolId; } @@ -1202,7 +1222,7 @@ public Location getKickLocation() { public int getrtMaxTries() { return rtMaxTries; } - + public boolean BounceAnimation() { return BounceAnimation; } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 1fb5c19a6..2d154a550 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1165,6 +1165,11 @@ public void run() { return false; } ClaimedResidence res = rmanager.getByName(args[1]); + if (Residence.getConfigManager().isResTpCaseSensitive()) + res = rmanager.getByName(args[1]); + else + res = rmanager.getByNameNoCase(args[1]); + if (res == null) { player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 3f85233c7..52fd62936 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -491,6 +491,30 @@ public ClaimedResidence getSubzone(String subzonename) { return get; } + public ClaimedResidence getSubzoneNoCase(String subzonename) { + if (!subzonename.contains(".")) { + for (Entry one : subzones.entrySet()) { + if (one.getKey().equalsIgnoreCase(subzonename)) + return one.getValue(); + } + } + String split[] = subzonename.split("\\."); + + ClaimedResidence get = null; + for (Entry one : subzones.entrySet()) { + if (one.getKey().equalsIgnoreCase(split[0])) + get = one.getValue(); + } + + for (int i = 1; i < split.length; i++) { + if (get == null) { + return null; + } + get = get.getSubzoneNoCase(split[i]); + } + return get; + } + public String getSubzoneNameByRes(ClaimedResidence res) { Set> set = subzones.entrySet(); for (Entry entry : set) { @@ -1050,7 +1074,7 @@ public static ClaimedResidence load(Map root, ClaimedResidence p if (tploc.containsKey("Yaw")) yaw = (double) tploc.get("Yaw"); - + if (tploc.containsKey("Pitch")) pitch = (double) tploc.get("Pitch"); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 932013536..8b52d09e6 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -92,6 +92,33 @@ public ClaimedResidence getByName(String name) { return res; } + public ClaimedResidence getByNameNoCase(String name) { + if (name == null) { + return null; + } + String[] split = name.split("\\."); + if (split.length == 1) { + for (Entry one : residences.entrySet()) { + if (one.getKey().equalsIgnoreCase(name)) + return one.getValue(); + } + } + ClaimedResidence res = null; + for (Entry one : residences.entrySet()) { + if (one.getKey().equalsIgnoreCase(split[0])) + res = one.getValue(); + } + + for (int i = 1; i < split.length; i++) { + if (res != null) { + res = res.getSubzoneNoCase(split[i]); + } else { + return null; + } + } + return res; + } + public String getNameByLoc(Location loc) { ClaimedResidence res = this.getByLoc(loc); if (res == null) @@ -187,12 +214,25 @@ public boolean addResidence(Player player, String owner, String name, Location l } newArea = resevent.getPhysicalArea(); name = resevent.getResidenceName(); - if (residences.containsKey(name)) { - if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + name + ChatColor.RED)); + + if (Residence.getConfigManager().isResCreateCaseSensitive()) { + if (residences.containsKey(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + name + ChatColor.RED)); + } + return false; + } + } else { + for (Entry one : residences.entrySet()) { + if (one.getKey().equalsIgnoreCase(name)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + one.getKey() + ChatColor.RED)); + } + return false; + } } - return false; } + newRes.BlockSellPrice = group.getSellPerBlock(); if (player != null) { newRes.addArea(player, newArea, "main", resadmin); diff --git a/src/plugin.yml b/src/plugin.yml index e536ca04b..a8bb503bc 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.20.0 +version: 2.9.21.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 265b03726d8b0d3472134221f9db2b4af6fc277a Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 26 Jan 2016 11:52:16 +0200 Subject: [PATCH 0114/1142] permissions based on parent or subzone --- src/com/bekvon/bukkit/residence/Locale.java | 7 ++ .../residence/ResidenceCommandListener.java | 90 ++++++++++++++----- .../protection/ClaimedResidence.java | 13 +++ src/plugin.yml | 23 ++++- 4 files changed, 111 insertions(+), 22 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index d3bab0805..2d068240f 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -338,6 +338,13 @@ public static void LoadLang(String lang) { GetConfig("Language.InvalidCharacters", "Invalid characters detected...", writer, conf, true); GetConfig("Language.InvalidNameCharacters", "Name contained unallowed characters...", writer, conf, true); GetConfig("Language.DeleteConfirm", "Are you sure you want to delete residence %1, use /res confirm to confirm.", writer, conf, true); + GetConfig("Language.CantCreateSubzone", "&cYou dont have permission to create residence subzone.", writer, conf, true); + GetConfig("Language.CantDeleteResidence", "&cYou dont have permission to delete residence.", writer, conf, true); + GetConfig("Language.CantDeleteSubzone", "&cYou dont have permission to delete residence subzone.", writer, conf, true); + GetConfig("Language.CantExpandResidence", "&cYou dont have permission to expand residence.", writer, conf, true); + GetConfig("Language.CantExpandSubzone", "&cYou dont have permission to expand residence subzone.", writer, conf, true); + GetConfig("Language.CantContractResidence", "&cYou dont have permission to contract residence.", writer, conf, true); + GetConfig("Language.CantContractSubzone", "&cYou dont have permission to contract residence subzone.", writer, conf, true); GetConfig("Language.SelectTooHigh", "Warning, selection went above top of map, limiting.", writer, conf, true); GetConfig("Language.SelectTooLow", "Warning, selection went below bottom of map, limiting.", writer, conf, true); GetConfig("Language.WorldEditNotFound", "WorldEdit was not detected.", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 2d154a550..a37d7d3b9 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1324,6 +1324,17 @@ private boolean commandResExpand(String[] args, boolean resadmin, Player player, player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; } + + if (res.isSubzone() && !player.hasPermission("residence.expand.subzone") && !resadmin) { + player.sendMessage(NewLanguage.getMessage("Language.CantExpandSubzone")); + return false; + } + + if (!res.isSubzone() && !player.hasPermission("residence.expand") && !resadmin) { + player.sendMessage(NewLanguage.getMessage("Language.CantExpandResidence")); + return false; + } + resName = res.getName(); CuboidArea area = null; areaName = res.getAreaIDbyLoc(player.getLocation()); @@ -1373,6 +1384,17 @@ private boolean commandResContract(String[] args, boolean resadmin, Player playe player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; } + + if (res.isSubzone() && !player.hasPermission("residence.contract.subzone") && !resadmin) { + player.sendMessage(NewLanguage.getMessage("Language.CantContractSubzone")); + return false; + } + + if (!res.isSubzone() && !player.hasPermission("residence.contract") && !resadmin) { + player.sendMessage(NewLanguage.getMessage("Language.CantContractResidence")); + return false; + } + resName = res.getName(); CuboidArea area = null; areaName = res.getAreaIDbyLoc(player.getLocation()); @@ -1633,6 +1655,12 @@ private boolean commandResSubzone(String[] args, boolean resadmin, Player player player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); return true; } + + if (!player.hasPermission("residence.create.subzone") && !resadmin) { + player.sendMessage(NewLanguage.getMessage("Language.CantCreateSubzone")); + return false; + } + res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), zname, resadmin); return true; @@ -1713,34 +1741,54 @@ private boolean commandResArea(String[] args, boolean resadmin, Player player, i } private boolean commandResRemove(String[] args, boolean resadmin, CommandSender sender, int page) { + Player player = null; if (sender instanceof Player) { player = (Player) sender; + + if (deleteConfirm.containsKey(player.getName())) + deleteConfirm.remove(player.getName()); + if (args.length == 1) { - String area = rmanager.getNameByLoc(player.getLocation()); - if (area != null) { - ClaimedResidence res = rmanager.getByName(area); - if (res.getParent() != null) { - String[] split = area.split("\\."); - String words = split[split.length - 1]; - if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); - deleteConfirm.put(player.getName(), area); - } else { - rmanager.removeResidence(player, area, resadmin); - } - return true; + + ClaimedResidence res = rmanager.getByLoc(player.getLocation()); + + if (res == null) { + player.sendMessage(NewLanguage.getMessage("Language.InvalidResidence")); + return false; + } + + if (res.isSubzone() && !player.hasPermission("residence.delete.subzone") && !resadmin) { + player.sendMessage(NewLanguage.getMessage("Language.CantDeleteSubzone")); + return false; + } + + if (!res.isSubzone() && !player.hasPermission("residence.delete") && !resadmin) { + player.sendMessage(NewLanguage.getMessage("Language.CantDeleteResidence")); + return false; + } + + if (res.isSubzone()) { + String area = rmanager.getNameByLoc(player.getLocation()); + String[] split = area.split("\\."); + String words = split[split.length - 1]; + if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); + deleteConfirm.put(player.getName(), area); } else { - if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + area + ChatColor.RED)); - deleteConfirm.put(player.getName(), area); - } else { - rmanager.removeResidence(player, area, resadmin); - } - return true; + rmanager.removeResidence(player, area, resadmin); } + return true; + } else { + if (!deleteConfirm.containsKey(player.getName()) || !res.getName().equalsIgnoreCase(deleteConfirm.get(player.getName()))) { + player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + res.getName() + ChatColor.RED)); + deleteConfirm.put(player.getName(), res.getName()); + } else { + rmanager.removeResidence(player, res.getName(), resadmin); + } + return true; } - return false; + } } if (args.length != 2) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 52fd62936..ec6bccac3 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -62,6 +62,18 @@ private ClaimedResidence() { ignorelist = new ResidenceItemList(this, ListType.IGNORELIST); } + public boolean isOwner(String name) { + return perms.getOwner().equalsIgnoreCase(name); + } + + public boolean isOwner(Player p) { + return perms.getOwner().equals(p.getName()); + } + + public boolean isSubzone() { + return parent == null ? false : true; + } + public ClaimedResidence(String creationWorld) { this(Residence.getServerLandname(), creationWorld); } @@ -971,6 +983,7 @@ public void removeArea(String id) { public void removeArea(Player player, String id, boolean resadmin) { + Debug.D("parent " + parent.getName()); if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { if (!areas.containsKey(id)) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); diff --git a/src/plugin.yml b/src/plugin.yml index a8bb503bc..eae57c508 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.21.0 +version: 2.9.22.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -47,6 +47,27 @@ permissions: residence.create: description: Allows you to create residences default: true + residence.delete: + description: Allows you to delete residences + default: true + residence.create.subzone: + description: Allows you to create residences subzone + default: true + residence.delete.subzone: + description: Allows you to delete residences subzone + default: true + residence.expand: + description: Allows you to expand residence + default: true + residence.expand.subzone: + description: Allows you to expand residences subzone + default: true + residence.contract: + description: Allows you to contract residence + default: true + residence.contract.subzone: + description: Allows you to contract residences subzone + default: true residence.select: description: Allows you to select an area to make residences default: true From e29fb99d7ab46f1bf2ee7751de5164e7e6734cf3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 26 Jan 2016 19:23:04 +0200 Subject: [PATCH 0115/1142] Small fix --- .../bekvon/bukkit/residence/ConfigManager.java | 8 ++++++++ src/com/bekvon/bukkit/residence/Locale.java | 1 + .../residence/ResidenceCommandListener.java | 6 ++++++ .../residence/protection/ClaimedResidence.java | 16 ++++++++++++---- src/plugin.yml | 2 +- 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 88369ff76..936dbe02a 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -105,6 +105,7 @@ public class ConfigManager { protected String DateFormat; protected String TimeZone; protected boolean preventBuildInRent; + protected boolean PreventSubZoneRemoval; protected boolean stopOnSaveError; protected boolean legacyperms; protected String namefix; @@ -630,6 +631,9 @@ void UpdateConfigFile() { writer.addComment("Global.PreventRentModify", "Setting this to false will allow rented residences to be modified by the renting player."); preventBuildInRent = GetConfig("Global.PreventRentModify", true, writer, conf); + writer.addComment("Global.PreventSubZoneRemoval", "Setting this to true will prevent subzone deletion when subzone owner is not same as parent zone owner."); + PreventSubZoneRemoval = GetConfig("Global.PreventSubZoneRemoval", true, writer, conf); + writer.addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); stopOnSaveError = GetConfig("Global.StopOnSaveFault", true, writer, conf); @@ -1087,6 +1091,10 @@ public boolean preventRentModify() { return preventBuildInRent; } + public boolean isPreventSubZoneRemoval() { + return PreventSubZoneRemoval; + } + public boolean stopOnSaveError() { return stopOnSaveError; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 2d068240f..a7d530c28 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -341,6 +341,7 @@ public static void LoadLang(String lang) { GetConfig("Language.CantCreateSubzone", "&cYou dont have permission to create residence subzone.", writer, conf, true); GetConfig("Language.CantDeleteResidence", "&cYou dont have permission to delete residence.", writer, conf, true); GetConfig("Language.CantDeleteSubzone", "&cYou dont have permission to delete residence subzone.", writer, conf, true); + GetConfig("Language.CantDeleteSubzoneNotOwnerOfParent", "&cYou are not owner of parent residence to delete this subzone.", writer, conf, true); GetConfig("Language.CantExpandResidence", "&cYou dont have permission to expand residence.", writer, conf, true); GetConfig("Language.CantExpandSubzone", "&cYou dont have permission to expand residence subzone.", writer, conf, true); GetConfig("Language.CantContractResidence", "&cYou dont have permission to contract residence.", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index a37d7d3b9..17d1cf115 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1763,6 +1763,12 @@ private boolean commandResRemove(String[] args, boolean resadmin, CommandSender return false; } + if (res.isSubzone() && player.hasPermission("residence.delete.subzone") && !resadmin && Residence.getConfigManager().isPreventSubZoneRemoval() && !res + .getParent().isOwner(player)) { + player.sendMessage(NewLanguage.getMessage("Language.CantDeleteSubzoneNotOwnerOfParent")); + return false; + } + if (!res.isSubzone() && !player.hasPermission("residence.delete") && !resadmin) { player.sendMessage(NewLanguage.getMessage("Language.CantDeleteResidence")); return false; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index ec6bccac3..80c813949 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -65,11 +65,11 @@ private ClaimedResidence() { public boolean isOwner(String name) { return perms.getOwner().equalsIgnoreCase(name); } - + public boolean isOwner(Player p) { - return perms.getOwner().equals(p.getName()); + return perms.getOwnerUUID().equals(p.getUniqueId()); } - + public boolean isSubzone() { return parent == null ? false : true; } @@ -203,7 +203,8 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } } PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (!group.canCreateResidences() && !player.hasPermission("residence.create")) { + if (!this.isSubzone() && !group.canCreateResidences() && !player.hasPermission("residence.create") || + this.isSubzone() && !group.canCreateResidences() && !player.hasPermission("residence.create.subzone")) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return false; } @@ -370,27 +371,33 @@ public boolean addSubzone(Player player, Location loc1, Location loc2, String na } public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { + Debug.D("subzone creation"); if (!Residence.validName(name)) { if (player != null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); } return false; } + Debug.D("5"); if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { if (player != null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneSelectInside")); } return false; } + Debug.D("4"); if (subzones.containsKey(name)) { if (player != null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + name)); } return false; } + + Debug.D("1"); if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { if (!this.perms.playerHas(player.getName(), "subzone", this.perms.playerHas(player.getName(), "admin", false))) { + Debug.D("no perm"); player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return false; } @@ -401,6 +408,7 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l return false; } } + Debug.D("2"); CuboidArea newArea = new CuboidArea(loc1, loc2); Set> set = subzones.entrySet(); for (Entry resEntry : set) { diff --git a/src/plugin.yml b/src/plugin.yml index eae57c508..7e40966a2 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.22.0 +version: 2.9.22.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From be99f278dc4f2305d8db038955a4fee09b52d474 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 29 Jan 2016 17:55:37 +0200 Subject: [PATCH 0116/1142] locale fix/GUI fill fix/new flag bucketfill and bucketempty --- .../bukkit/residence/ConfigManager.java | 38 +- src/com/bekvon/bukkit/residence/Locale.java | 64 +- .../bekvon/bukkit/residence/NewLanguage.java | 42 +- .../bukkit/residence/PlayerManager.java | 41 +- .../bekvon/bukkit/residence/Residence.java | 101 +- .../residence/ResidenceCommandListener.java | 1030 +++++++++-------- .../bukkit/residence/chat/ChatChannel.java | 5 - .../bukkit/residence/chat/ChatManager.java | 5 - .../bukkit/residence/containers/GuiItems.java | 95 ++ .../bukkit/residence/economy/BOSEAdapter.java | 4 - .../economy/EssentialsEcoAdapter.java | 5 - .../residence/economy/IConomy6Adapter.java | 5 - .../residence/economy/RealShopEconomy.java | 5 - .../residence/economy/ResidenceBank.java | 5 - .../residence/economy/TransactionManager.java | 5 - .../residence/economy/rent/RentManager.java | 5 - .../residence/economy/rent/RentableLand.java | 5 - .../residence/economy/rent/RentedLand.java | 5 - .../bekvon/bukkit/residence/gui/FlagUtil.java | 15 +- .../bekvon/bukkit/residence/gui/SetFlag.java | 159 ++- .../listeners/ResidenceBlockListener.java | 18 +- .../listeners/ResidenceEntityListener.java | 2 +- .../listeners/ResidencePlayerListener.java | 55 +- .../permissions/PermissionGroup.java | 7 +- .../permissions/PermissionManager.java | 5 +- .../protection/ClaimedResidence.java | 71 +- .../residence/protection/FlagPermissions.java | 35 +- .../protection/ResidenceManager.java | 118 +- .../protection/ResidencePermissions.java | 11 +- .../residence/selection/AutoSelection.java | 15 +- .../residence/selection/SelectionManager.java | 32 +- .../selection/WorldEditSelectionManager.java | 12 +- .../residence/shopStuff/ShopListener.java | 37 +- .../residence/shopStuff/ShopSignUtil.java | 74 +- .../bukkit/residence/signsStuff/SignUtil.java | 7 +- .../bukkit/residence/text/Language.java | 2 +- .../bukkit/residence/text/help/HelpEntry.java | 4 +- .../residence/text/help/InformationPager.java | 18 +- .../bukkit/residence/utils/RandomTp.java | 25 +- src/plugin.yml | 2 +- 40 files changed, 1296 insertions(+), 893 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/containers/GuiItems.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 936dbe02a..728eac92f 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -4,6 +4,7 @@ import org.bukkit.ChatColor; import org.bukkit.Location; +import com.bekvon.bukkit.residence.containers.GuiItems; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ParticleEffects; @@ -157,7 +158,10 @@ public class ConfigManager { protected ParticleEffects OverlapFrame; protected ParticleEffects OverlapSides; - public ConfigManager(FileConfiguration config, FileConfiguration flags, FileConfiguration groups) { + private Residence plugin; + + public ConfigManager(FileConfiguration config, FileConfiguration flags, FileConfiguration groups, Residence plugin) { + this.plugin = plugin; globalCreatorDefaults = new FlagPermissions(); globalResidenceDefaults = new FlagPermissions(); globalGroupDefaults = new HashMap(); @@ -174,7 +178,7 @@ public static String Colors(String text) { } public void ChangeConfig(String path, Boolean stage) { - File f = new File(Residence.instance.getDataFolder(), "config.yml"); + File f = new File(plugin.getDataFolder(), "config.yml"); BufferedReader in = null; try { @@ -265,7 +269,7 @@ public static List ColorsArray(List text, Boolean colorize) { void UpdateFlagFile() { - File f = new File(Residence.instance.getDataFolder(), "flags.yml"); + File f = new File(plugin.getDataFolder(), "flags.yml"); YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); Set sections = conf.getConfigurationSection("Global.FlagPermission").getKeys(false); @@ -276,6 +280,30 @@ void UpdateFlagFile() { conf.set("Global.FlagPermission." + one.toLowerCase(), false); } + if (!conf.isConfigurationSection("Global.FlagGui")) + conf.createSection("Global.FlagGui"); + + ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); + Set flagGui = guiSection.getKeys(false); + for (String one : Locale.FlagList) { + if (flagGui.contains(one.toLowerCase())) + continue; + + String lowOne = one.toLowerCase(); + GuiItems uno = null; + try { + uno = GuiItems.valueOf(lowOne); + } catch (IllegalArgumentException e) { + continue; + } + if (uno == null) + continue; + + guiSection.createSection(lowOne); + guiSection.set(lowOne + ".Id", uno.getId()); + guiSection.set(lowOne + ".Data", uno.getData()); + } + try { conf.save(f); } catch (IOException e) { @@ -285,7 +313,7 @@ void UpdateFlagFile() { public void UpdateGroupedFlagsFile() { - File f = new File(Residence.instance.getDataFolder(), "flags.yml"); + File f = new File(plugin.getDataFolder(), "flags.yml"); YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); if (!conf.isConfigurationSection("Global.GroupedFlags")) { @@ -313,7 +341,7 @@ public void UpdateGroupedFlagsFile() { @SuppressWarnings("deprecation") void UpdateConfigFile() { - File f = new File(Residence.instance.getDataFolder(), "config.yml"); + File f = new File(plugin.getDataFolder(), "config.yml"); BufferedReader in = null; try { diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index a7d530c28..991e788ee 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -21,6 +21,11 @@ public class Locale { public static ArrayList FlagList = new ArrayList(); + private Residence plugin; + + public Locale(Residence plugin) { + this.plugin = plugin; + } public static String GetConfig(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { text = text.replace("\"", "\'"); @@ -74,9 +79,9 @@ private static YamlConfiguration loadConfiguration(BufferedReader in, String lan } // Language file - public static void LoadLang(String lang) { + public void LoadLang(String lang) { - File f = new File(Residence.instance.getDataFolder(), "Language" + File.separator + lang + ".yml"); + File f = new File(plugin.getDataFolder(), "Language" + File.separator + lang + ".yml"); BufferedReader in = null; try { @@ -118,24 +123,25 @@ public static void LoadLang(String lang) { GetConfig("Language.NewPlayerInfo", "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", writer, conf, true); - GetConfig("Language.InvalidResidence", "Invalid Residence...", writer, conf, true); - GetConfig("Language.InvalidSubzone", "Invalid Subzone...", writer, conf, true); - GetConfig("Language.InvalidDirection", "Invalid Direction...", writer, conf, true); - GetConfig("Language.InvalidAmount", "Invalid Amount...", writer, conf, true); - GetConfig("Language.InvalidCost", "Invalid Cost...", writer, conf, true); - GetConfig("Language.InvalidDays", "Invalid number of days...", writer, conf, true); - GetConfig("Language.InvalidMaterial", "Invalid Material...", writer, conf, true); - GetConfig("Language.InvalidBoolean", "Invalid value, must be true(t) or false(f)", writer, conf, true); - GetConfig("Language.InvalidArea", "Invalid Area...", writer, conf, true); - GetConfig("Language.InvalidGroup", "Invalid Group...", writer, conf, true); + GetConfig("Language.InvalidPlayer", "&cInvalid player name...", writer, conf, true); + GetConfig("Language.InvalidResidence", "&cInvalid Residence...", writer, conf, true); + GetConfig("Language.InvalidSubzone", "&cInvalid Subzone...", writer, conf, true); + GetConfig("Language.InvalidDirection", "&cInvalid Direction...", writer, conf, true); + GetConfig("Language.InvalidAmount", "&cInvalid Amount...", writer, conf, true); + GetConfig("Language.InvalidCost", "&cInvalid Cost...", writer, conf, true); + GetConfig("Language.InvalidDays", "&cInvalid number of days...", writer, conf, true); + GetConfig("Language.InvalidMaterial", "&cInvalid Material...", writer, conf, true); + GetConfig("Language.InvalidBoolean", "&cInvalid value, must be true(t) or false(f)", writer, conf, true); + GetConfig("Language.InvalidArea", "&cInvalid Area...", writer, conf, true); + GetConfig("Language.InvalidGroup", "&cInvalid Group...", writer, conf, true); GetConfig("Language.UseNumbers", "&cPlease use numbers...", writer, conf, true); GetConfig("Language.NotOwner", "&cYou are not owner of this residence", writer, conf, true); GetConfig("Language.LookAtSign", "&cYou are not looking at sign", writer, conf, true); writer.addComment("Language.CantPlaceLava", "Replace all text with '' to disable this message"); - GetConfig("Language.CantPlaceLava", "You can't place lava outside residence and higher than %1 block level", writer, conf, true); + GetConfig("Language.CantPlaceLava", "&cYou can't place lava outside residence and higher than %1 block level", writer, conf, true); writer.addComment("Language.CantPlaceWater", "Replace all text with '' to disable this message"); - GetConfig("Language.CantPlaceWater", "You can't place Water outside residence and higher than %1 block level", writer, conf, true); - GetConfig("Language.InvalidMessageType", "Message type must be enter or remove.", writer, conf, true); + GetConfig("Language.CantPlaceWater", "&cYou can't place Water outside residence and higher than %1 block level", writer, conf, true); + GetConfig("Language.InvalidMessageType", "&cMessage type must be enter or remove.", writer, conf, true); // GetConfig("Language.InvalidList", "Invalid List...", writer, // conf, true); GetConfig("Language.InvalidFlag", "Invalid Flag...", writer, conf, true); @@ -195,6 +201,7 @@ public static void LoadLang(String lang) { GetConfig("Language.FlagCheckFalse", "Flag %1 does not apply to player %2 for residence.", writer, conf, true); GetConfig("Language.FlagsCleared", "Flags Cleared.", writer, conf, true); GetConfig("Language.FlagsDefault", "Flags set to default.", writer, conf, true); + GetConfig("Language.DefaultUsage", "&eType &6/%1 ? &efor more info", writer, conf, true); GetConfig("Language.Usage", "Command Usage", writer, conf, true); GetConfig("Language.InvalidHelp", "Invalid Help Page...", writer, conf, true); GetConfig("Language.SubCommands", "Sub Commands", writer, conf, true); @@ -420,8 +427,8 @@ public static void LoadLang(String lang) { GetConfig("Language.LimitsLeaseTime", "&7- &eLease Time Given on Renew:&3 %1", writer, conf, true); GetConfig("Language.LimitsRenewCost", "&7- &eRenew Cost Per Block:&3 %1", writer, conf, true); GetConfig("Language.LimitsBottom", "----------------------------------------", writer, conf, true); - GetConfig("Language.Gui.Set.Title", "&6%1% flags", writer, conf, true); - GetConfig("Language.Gui.Pset.Title", "&6%1% %2% flags", writer, conf, true); + GetConfig("Language.Gui.Set.Title", "&6%1 flags", writer, conf, true); + GetConfig("Language.Gui.Pset.Title", "&6%1 %2 flags", writer, conf, true); GetConfig("Language.Gui.Actions", Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove"), writer, conf, true); GetConfig("Language.InformationPage.TopLine", "&e---< &a %1 &e >---", writer, conf, true); @@ -777,6 +784,18 @@ public static void LoadLang(String lang) { "allow or deny bucket use", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucket.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // bucketfill + FlagList.add("bucketfill"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketfill.Description", + "allow or deny bucket fill", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketfill.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // bucketempty + FlagList.add("bucketempty"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketempty.Description", + "allow or deny bucket empty", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketempty.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // flow FlagList.add("flow"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.flow.Description", @@ -1062,6 +1081,17 @@ public static void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.rt.Info", Arrays.asList("Usage: /res rt", "Teleports you to random location in defined world."), writer, conf, true); + // res expand + GetConfig("CommandHelp.SubCommands.res.SubCommands.expand.Description", "Expands residence in direction you looking", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.expand.Info", + Arrays.asList("Usage: /res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional"), writer, conf, true); + + // res contract + GetConfig("CommandHelp.SubCommands.res.SubCommands.contract.Description", "Contracts residence in direction you looking", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.contract.Info", + Arrays.asList("Usage: /res contract (residence [amount])", "Contracts residence in direction you looking.", "Residence name is optional"), writer, conf, + true); + // res shop GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.Description", "Manage residence shop", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.Info", Arrays.asList("Manages residence shop feature"), writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/NewLanguage.java b/src/com/bekvon/bukkit/residence/NewLanguage.java index 6e8f23415..de3966547 100644 --- a/src/com/bekvon/bukkit/residence/NewLanguage.java +++ b/src/com/bekvon/bukkit/residence/NewLanguage.java @@ -10,25 +10,20 @@ import org.bukkit.plugin.java.JavaPlugin; public class NewLanguage { - public static FileConfiguration enlocale; - public static FileConfiguration customlocale; + public FileConfiguration enlocale; + public FileConfiguration customlocale; + private Residence plugin; - static { - customlocale = new YmlMaker((JavaPlugin) Residence.instance, "Language/" + Residence.getConfigManager().language + ".yml").getConfig(); - enlocale = new YmlMaker((JavaPlugin) Residence.instance, "Language/English.yml").getConfig(); - if (customlocale == null) - customlocale = enlocale; - } - - private NewLanguage() { + public NewLanguage(Residence plugin) { + this.plugin = plugin; } /** * Reloads the config */ - public static void LanguageReload() { - customlocale = new YmlMaker((JavaPlugin) Residence.instance, "Language/" + Residence.getConfigManager().language + ".yml").getConfig(); - enlocale = new YmlMaker((JavaPlugin) Residence.instance, "Language/English.yml").getConfig(); + public void LanguageReload() { + customlocale = new YmlMaker((JavaPlugin) plugin, "Language/" + Residence.getConfigManager().language + ".yml").getConfig(); + enlocale = new YmlMaker((JavaPlugin) plugin, "Language/English.yml").getConfig(); if (customlocale == null) customlocale = enlocale; } @@ -40,11 +35,8 @@ public static void LanguageReload() { * - the key of the message * @return the message */ - public static String getMessage(String key) { - String missing = "Missing locale for " + key; - if (customlocale == null || !customlocale.contains(key)) - return enlocale.contains(key) == true ? ChatColor.translateAlternateColorCodes('&', enlocale.getString(key)) : missing; - return customlocale.contains(key) == true ? ChatColor.translateAlternateColorCodes('&', customlocale.getString(key)) : missing; + public String getMessage(String key) { + return getMessage(key, ""); } /** @@ -56,11 +48,13 @@ public static String getMessage(String key) { * - the variables separated with % * @return the message */ - public static String getMessage(String key, int variables) { + public String getMessage(String key, int variables) { return getMessage(key, String.valueOf(variables)); } - public static String getMessage(String key, String variables) { + public String getMessage(String key, String variables) { + if (!key.contains(".")) + key = "Language." + key; String missing = "Missing locale for " + key; String message = ""; if (customlocale == null || !customlocale.contains(key)) @@ -87,7 +81,7 @@ public static String getMessage(String key, String variables) { * - the key of the message * @return the message */ - public static String getDefaultMessage(String key) { + public String getDefaultMessage(String key) { String missing = "Missing locale for " + key; return enlocale.contains(key) == true ? ChatColor.translateAlternateColorCodes('&', enlocale.getString(key)) : missing; } @@ -99,7 +93,7 @@ public static String getDefaultMessage(String key) { * - the key of the message * @return the message */ - public static List getMessageList(String key) { + public List getMessageList(String key) { String missing = "Missing locale for " + key; if (customlocale.isList(key)) return Locale.ColorsArray(customlocale.getStringList(key), true); @@ -113,7 +107,7 @@ public static List getMessageList(String key) { * - the key of the message * @return the message */ - public static Set getKeyList(String key) { + public Set getKeyList(String key) { if (customlocale.isConfigurationSection(key)) return customlocale.getConfigurationSection(key).getKeys(false); return enlocale.getConfigurationSection(key).getKeys(false); @@ -126,7 +120,7 @@ public static Set getKeyList(String key) { * - the key of the message * @return true/false */ - public static boolean containsKey(String key) { + public boolean containsKey(String key) { if (customlocale == null || !customlocale.contains(key)) return enlocale.contains(key); return customlocale.contains(key); diff --git a/src/com/bekvon/bukkit/residence/PlayerManager.java b/src/com/bekvon/bukkit/residence/PlayerManager.java index 05e4809e8..0fb0c0157 100644 --- a/src/com/bekvon/bukkit/residence/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/PlayerManager.java @@ -13,9 +13,14 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class PlayerManager { - private static ConcurrentHashMap players = new ConcurrentHashMap(); + private ConcurrentHashMap players = new ConcurrentHashMap(); + private Residence plugin; - public static void playerJoin(OfflinePlayer player) { + public PlayerManager(Residence plugin) { + this.plugin = plugin; + } + + public void playerJoin(OfflinePlayer player) { ResPlayer resPlayer = players.get(player.getName().toLowerCase()); if (resPlayer == null) { resPlayer = new ResPlayer(player.getName()); @@ -26,7 +31,7 @@ public static void playerJoin(OfflinePlayer player) { return; } - public static ResPlayer playerJoin(String player) { + public ResPlayer playerJoin(String player) { if (!players.containsKey(player.toLowerCase())) { ResPlayer resPlayer = new ResPlayer(player); resPlayer.recountRes(); @@ -36,20 +41,20 @@ public static ResPlayer playerJoin(String player) { return null; } - public static void fillList() { + public void fillList() { players.clear(); - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { for (Player player : Bukkit.getOnlinePlayers()) { - PlayerManager.playerJoin(player); + playerJoin(player); } return; } }); } - public static ArrayList getResidenceList(String player) { + public ArrayList getResidenceList(String player) { ArrayList temp = new ArrayList(); playerJoin(player); ResPlayer resPlayer = players.get(player.toLowerCase()); @@ -62,7 +67,7 @@ public static ArrayList getResidenceList(String player) { return temp; } - public static ArrayList getResidenceListString(String player, boolean showhidden) { + public ArrayList getResidenceListString(String player, boolean showhidden) { ArrayList temp = new ArrayList(); playerJoin(player); ResPlayer resPlayer = players.get(player.toLowerCase()); @@ -83,7 +88,7 @@ public static ArrayList getResidenceListString(String player, boolean sh return temp; } - public static PermissionGroup getGroup(String player) { + public PermissionGroup getGroup(String player) { ResPlayer resPlayer = getResPlayer(player); if (resPlayer != null) { return resPlayer.getGroup(); @@ -91,7 +96,7 @@ public static PermissionGroup getGroup(String player) { return null; } - public static int getMaxResidences(String player) { + public int getMaxResidences(String player) { ResPlayer resPlayer = getResPlayer(player); if (resPlayer != null) { return resPlayer.getMaxRes(); @@ -99,7 +104,7 @@ public static int getMaxResidences(String player) { return -1; } - public static int getMaxSubzones(String player) { + public int getMaxSubzones(String player) { ResPlayer resPlayer = getResPlayer(player); if (resPlayer != null) { return resPlayer.getMaxSubzones(); @@ -107,7 +112,7 @@ public static int getMaxSubzones(String player) { return -1; } - public static int getMaxRents(String player) { + public int getMaxRents(String player) { ResPlayer resPlayer = getResPlayer(player); if (resPlayer != null) { return resPlayer.getMaxRents(); @@ -115,7 +120,7 @@ public static int getMaxRents(String player) { return -1; } - public static ResPlayer getResPlayer(String player) { + public ResPlayer getResPlayer(String player) { ResPlayer resPlayer = null; if (players.containsKey(player.toLowerCase())) resPlayer = players.get(player.toLowerCase()); @@ -125,7 +130,7 @@ public static ResPlayer getResPlayer(String player) { return resPlayer; } - public static void renameResidence(String player, String oldName, String newName) { + public void renameResidence(String player, String oldName, String newName) { ResPlayer resPlayer = getResPlayer(player); if (resPlayer != null) { resPlayer.renameResidence(oldName, newName); @@ -133,7 +138,7 @@ public static void renameResidence(String player, String oldName, String newName return; } - public static void addResidence(String player, ClaimedResidence residence) { + public void addResidence(String player, ClaimedResidence residence) { ResPlayer resPlayer = getResPlayer(player); if (resPlayer != null) { resPlayer.addResidence(residence); @@ -141,15 +146,15 @@ public static void addResidence(String player, ClaimedResidence residence) { return; } - public static void removeResFromPlayer(OfflinePlayer player, String residence) { + public void removeResFromPlayer(OfflinePlayer player, String residence) { removeResFromPlayer(player.getName(), residence); } - public static void removeResFromPlayer(Player player, String residence) { + public void removeResFromPlayer(Player player, String residence) { removeResFromPlayer(player.getName(), residence); } - public static void removeResFromPlayer(String player, String residence) { + public void removeResFromPlayer(String player, String residence) { ResPlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer != null) { resPlayer.removeResidence(residence); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 289f44963..dc33c1771 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1,6 +1,3 @@ -/* - * and open the template in the editor. - */ package com.bekvon.bukkit.residence; import java.io.BufferedReader; @@ -72,6 +69,7 @@ import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.CrackShot; import com.bekvon.bukkit.residence.utils.FileCleanUp; +import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.TabComplete; import com.bekvon.bukkit.residence.utils.VersionChecker; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; @@ -84,6 +82,7 @@ import cosine.boseconomy.BOSEconomy; import fr.crafter.tickleman.realeconomy.RealEconomy; import fr.crafter.tickleman.realplugin.RealPlugin; +import net.md_5.bungee.api.ChatColor; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -119,7 +118,14 @@ public class Residence extends JavaPlugin { protected static Server server; protected static HelpEntry helppages; protected static Language language; - public static Plugin instance; + protected static Locale LocaleManager; + protected static NewLanguage NewLanguageManager; + protected static PlayerManager PlayerManager; + protected static FlagUtil FlagUtilManager; + protected static ShopSignUtil ShopSignUtilManager; + protected static RandomTp RandomTpManager; + + public static Plugin instance2; protected boolean firstenable = true; protected static EconomyInterface economy; public final static int saveVersion = 1; @@ -134,7 +140,7 @@ public class Residence extends JavaPlugin { protected static int autosaveBukkitId = -1; protected static VersionChecker versionChecker; protected static boolean initsuccess = false; - protected Map deleteConfirm; + public static Map deleteConfirm; protected static List resadminToggle; private final static String[] validLanguages = { "English", "German", "French", "Hungarian", "Spanish", "Chinese", "Czech", "Brazilian", "Polish", "Lithuanian" }; public static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); @@ -190,7 +196,7 @@ public void run() { public void run() { try { if (initsuccess) { - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + Bukkit.getScheduler().runTaskAsynchronously(Residence.this, new Runnable() { @Override public void run() { try { @@ -208,9 +214,6 @@ public void run() { } }; - public Residence() { - } - public void reloadPlugin() { this.onDisable(); this.reloadConfig(); @@ -246,7 +249,7 @@ public void onDisable() { public void onEnable() { try { - instance = this; +// instance = this; initsuccess = false; deleteConfirm = new HashMap(); resadminToggle = new ArrayList(); @@ -284,7 +287,7 @@ public void onEnable() { FileConfiguration canfig = YamlConfiguration.loadConfiguration(new File(dataFolder, "config.yml")); FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(dataFolder, "flags.yml")); FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(dataFolder, "groups.yml")); - cmanager = new ConfigManager(canfig, flags, groups); + cmanager = new ConfigManager(canfig, flags, groups, this); String multiworld = cmanager.getMultiworldPlugin(); if (multiworld != null) { Plugin plugin = server.getPluginManager().getPlugin(multiworld); @@ -295,8 +298,8 @@ public void onEnable() { } } } - - FlagUtil.load(); + FlagUtilManager = new FlagUtil(this); + getFlagUtilManager().load(); String packageName = getServer().getClass().getPackage().getName(); @@ -345,22 +348,25 @@ public void onEnable() { chatmanager = new ChatManager(); rentmanager = new RentManager(); - for (String lang : validLanguages) { + LocaleManager = new Locale(this); + + PlayerManager = new PlayerManager(this); + ShopSignUtilManager = new ShopSignUtil(this); + RandomTpManager = new RandomTp(this); - YmlMaker langFile = new YmlMaker((JavaPlugin) Residence.instance, "Language" + File.separator + lang + ".yml"); + for (String lang : validLanguages) { + YmlMaker langFile = new YmlMaker((JavaPlugin) this, "Language" + File.separator + lang + ".yml"); if (langFile != null) { langFile.saveDefaultConfig(); } } for (String lang : validLanguages) { - Locale.LoadLang(lang); + getLocaleManager().LoadLang(lang); } Residence.getConfigManager().UpdateFlagFile(); - NewLanguage.LanguageReload(); - try { File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); @@ -451,7 +457,7 @@ public void onEnable() { Bukkit.getConsoleSender().sendMessage("[Residence] Player data loaded: " + getOfflinePlayerMap().size()); if (rmanager == null) { - rmanager = new ResidenceManager(); + rmanager = new ResidenceManager(this); } if (leasemanager == null) { leasemanager = new LeaseManager(rmanager); @@ -480,12 +486,12 @@ public void onEnable() { FlagPermissions.initValidFlags(); Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); if (plugin != null) { - smanager = new WorldEditSelectionManager(server); + smanager = new WorldEditSelectionManager(server, this); wep = (WorldEditPlugin) plugin; wepid = ((WorldEditPlugin) Residence.wep).getConfig().getInt("wand-item"); Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldEdit"); } else { - smanager = new SelectionManager(server); + smanager = new SelectionManager(server, this); Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldEdit NOT found!"); } @@ -498,7 +504,7 @@ public void onEnable() { } blistener = new ResidenceBlockListener(); - plistener = new ResidencePlayerListener(); + plistener = new ResidencePlayerListener(this); elistener = new ResidenceEntityListener(); shlistener = new ShopListener(); @@ -510,6 +516,9 @@ public void onEnable() { pm.registerEvents(shlistener, this); + NewLanguageManager = new NewLanguage(this); + getLM().LanguageReload(); + // 1.8 event if (VersionChecker.GetVersion() >= 1800) pm.registerEvents(new v1_8Events(), this); @@ -581,8 +590,8 @@ public void onEnable() { Residence.setSignUtil(this); Residence.getSignUtil().LoadSigns(); - ShopSignUtil.LoadShopVotes(); - ShopSignUtil.BoardUpdate(); + getShopSignUtilManager().LoadShopVotes(); + getShopSignUtilManager().BoardUpdate(); versionChecker = new VersionChecker(this); versionChecker.VersionCheck(null); @@ -601,6 +610,10 @@ public void consoleMessage(String message) { console.sendMessage("[Residence] " + message); } + public static void sendMessage(Player player, String message) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', message)); + } + public static boolean validName(String name) { if (name.contains(":") || name.contains(".") || name.contains("|")) { return false; @@ -616,6 +629,10 @@ public static boolean validName(String name) { } } + public Residence getPlugin() { + return this; + } + public static VersionChecker getVersionChecker() { return versionChecker; } @@ -624,6 +641,10 @@ public static File getDataLocation() { return dataFolder; } + public static ShopSignUtil getShopSignUtilManager() { + return ShopSignUtilManager; + } + public static ResidenceManager getResidenceManager() { return rmanager; } @@ -632,10 +653,18 @@ public static SelectionManager getSelectionManager() { return smanager; } + public static FlagUtil getFlagUtilManager() { + return FlagUtilManager; + } + public static PermissionManager getPermissionManager() { return gmanager; } + public static RandomTp getRandomTpManager() { + return RandomTpManager; + } + public static EconomyInterface getEconomyManager() { return economy; } @@ -648,6 +677,10 @@ public static LeaseManager getLeaseManager() { return leasemanager; } + public static PlayerManager getPlayerManager() { + return PlayerManager; + } + public static HelpEntry getHelpPages() { return helppages; } @@ -672,6 +705,14 @@ public static RentManager getRentManager() { return rentmanager; } + public static Locale getLocaleManager() { + return LocaleManager; + } + + public static NewLanguage getLM() { + return NewLanguageManager; + } + public static ResidencePlayerListener getPlayerListener() { return plistener; } @@ -927,7 +968,7 @@ protected boolean loadYml() throws Exception { } } - rmanager = ResidenceManager.load(worlds); + rmanager = getResidenceManager().load(worlds); // Getting shop residences Map resList = rmanager.getResidences(); @@ -1196,6 +1237,15 @@ private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean } } + public static boolean isPlayerExist(Player player, String name, boolean inform) { + if (Residence.getPlayerUUID(name) != null) + return true; + if (inform) + player.sendMessage(getLM().getMessage("Language.InvalidPlayer")); + return false; + + } + public static UUID getPlayerUUID(String playername) { // if (Residence.getConfigManager().isOfflineMode()) // return null; @@ -1203,7 +1253,6 @@ public static UUID getPlayerUUID(String playername) { if (p == null) { if (getOfflinePlayerMap().containsKey(playername.toLowerCase())) return getOfflinePlayerMap().get(playername.toLowerCase()).getUniqueId(); - } else return p.getUniqueId(); return null; diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 17d1cf115..fb4c418a7 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -38,7 +38,6 @@ import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.selection.WorldGuardUtil; import com.bekvon.bukkit.residence.shopStuff.ShopListener; -import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; import com.bekvon.bukkit.residence.shopStuff.Board; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.shopStuff.Vote; @@ -57,9 +56,21 @@ public class ResidenceCommandListener extends Residence { public static List AdminCommands = Arrays.asList("setowner", "removeall", "signupdate", "listhidden", "listallhidden", "server", "clearflags", "resreload", "resload", "ressignconvert"); + public static HashMap getTeleportMap() { + return teleportMap; + } + + public static List getTeleportDelayMap() { + return teleportDelayMap; + } + + public static List getAdminCommands() { + return AdminCommands; + } + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); - server.getPluginManager().callEvent(cevent); + Residence.getServ().getPluginManager().callEvent(cevent); if (cevent.isCancelled()) { return true; } @@ -71,7 +82,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); System.out.println("[Residence] Reloaded by " + player.getName() + "."); } else - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); } else { this.reloadPlugin(); System.out.println("[Residence] Reloaded by console."); @@ -84,14 +95,14 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (Residence.getPermissionManager().isResidenceAdmin(player)) { Residence.getSignUtil().convertSigns(sender); } else - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); } else { Residence.getSignUtil().convertSigns(sender); } return true; } if (command.getName().equals("resload")) { - if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender) && ((Player) sender).hasPermission( + if (!(sender instanceof Player) || sender instanceof Player && Residence.gmanager.isResidenceAdmin((Player) sender) && ((Player) sender).hasPermission( "residence.topadmin")) { try { this.loadYml(); @@ -102,12 +113,12 @@ public boolean onCommand(CommandSender sender, Command command, String label, St Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); } } else - sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } else if (command.getName().equals("resworld")) { if (args.length == 2 && args[0].equalsIgnoreCase("remove")) { if (sender instanceof ConsoleCommandSender) { - rmanager.removeAllFromWorld(sender, args[1]); + Residence.rmanager.removeAllFromWorld(sender, args[1]); return true; } else { sender.sendMessage(ChatColor.RED + "MUST be run from console."); @@ -119,51 +130,51 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; Player player = (Player) sender; String pname = player.getName(); - if (cmanager.chatEnabled()) { + if (Residence.cmanager.chatEnabled()) { if (args.length == 0) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); if (chat != null) { Residence.getChatManager().removeFromChannel(pname); - plistener.removePlayerResidenceChat(player); + Residence.plistener.removePlayerResidenceChat(player); return true; } - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); return true; } else { ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); if (chat != null && chat.getChannelName().equals(res.getName())) { Residence.getChatManager().removeFromChannel(pname); - plistener.removePlayerResidenceChat(player); + Residence.plistener.removePlayerResidenceChat(player); return true; } } - if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !gmanager.isResidenceAdmin(player)) { + if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !Residence.gmanager.isResidenceAdmin(player)) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "chat|" + res.getName())); return false; } - plistener.tooglePlayerResidenceChat(player, res.getName()); + Residence.plistener.tooglePlayerResidenceChat(player, res.getName()); Residence.getChatManager().setChannel(pname, res); return true; } else if (args.length == 1) { if (args[0].equalsIgnoreCase("l")) { Residence.getChatManager().removeFromChannel(pname); - plistener.removePlayerResidenceChat(player); + Residence.plistener.removePlayerResidenceChat(player); return true; } ClaimedResidence res = Residence.getResidenceManager().getByName(args[0]); if (res == null) { - player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.InvalidChannel")); + player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.InvalidChannel")); return true; } - if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !gmanager.isResidenceAdmin(player)) { + if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !Residence.gmanager.isResidenceAdmin(player)) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "chat|" + res.getName())); return false; } - plistener.tooglePlayerResidenceChat(player, res.getName()); + Residence.plistener.tooglePlayerResidenceChat(player, res.getName()); Residence.getChatManager().setChannel(pname, res); return true; @@ -173,7 +184,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); if (chat == null) { - player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.JoinFirst")); + player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.JoinFirst")); return true; } @@ -182,13 +193,13 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (res == null) return false; - if (!res.getOwner().equals(player.getName()) && !gmanager.isResidenceAdmin(player)) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + if (!res.getOwner().equals(player.getName()) && !Residence.gmanager.isResidenceAdmin(player)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } if (!player.hasPermission("residence.chatcolor")) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } @@ -198,20 +209,20 @@ public boolean onCommand(CommandSender sender, Command command, String label, St posibleColor = "&" + posibleColor; if (posibleColor.length() != 2 || ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', posibleColor)).length() != 0) { - player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.InvalidColor")); + player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.InvalidColor")); return true; } ChatColor color = ChatColor.getByChar(posibleColor.replace("&", "")); res.setChannelColor(color); chat.setChannelColor(color); - player.sendMessage(ChatColor.GOLD + NewLanguage.getMessage("Language.Chat.ChangedColor").replace("%1", color.name())); + player.sendMessage(ChatColor.GOLD + Residence.getLM().getMessage("Language.Chat.ChangedColor", color.name())); return true; } else if (args[0].equalsIgnoreCase("setprefix")) { ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); if (chat == null) { - player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.JoinFirst")); + player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.JoinFirst")); return true; } @@ -220,34 +231,34 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (res == null) return false; - if (!res.getOwner().equals(player.getName()) && !gmanager.isResidenceAdmin(player)) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + if (!res.getOwner().equals(player.getName()) && !Residence.gmanager.isResidenceAdmin(player)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } if (!player.hasPermission("residence.chatprefix")) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } String prefix = args[1]; if (prefix.length() > Residence.getConfigManager().getChatPrefixLength()) { - player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.InvalidPrefixLength").replace("%1", String.valueOf(Residence - .getConfigManager().getChatPrefixLength()))); + player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.InvalidPrefixLength", Residence.getConfigManager() + .getChatPrefixLength())); return true; } res.setChatPrefix(prefix); chat.setChatPrefix(prefix); - player.sendMessage(ChatColor.GOLD + NewLanguage.getMessage("Language.Chat.ChangedPrefix").replace("%1", ChatColor.translateAlternateColorCodes( - '&', prefix))); + player.sendMessage(ChatColor.GOLD + Residence.getLM().getMessage("Language.Chat.ChangedPrefix", ChatColor.translateAlternateColorCodes('&', + prefix))); return true; } else if (args[0].equalsIgnoreCase("kick")) { ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); if (chat == null) { - player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.JoinFirst")); + player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.JoinFirst")); return true; } @@ -256,50 +267,62 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (res == null) return false; - if (!res.getOwner().equals(player.getName()) && !gmanager.isResidenceAdmin(player)) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + if (!res.getOwner().equals(player.getName()) && !Residence.gmanager.isResidenceAdmin(player)) { + player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("NoPermission")); return true; } if (!player.hasPermission("residence.chatkick")) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("NoPermission")); return true; } String targetName = args[1]; if (!chat.hasMember(targetName)) { - player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.NotInChannel")); + player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.NotInChannel")); return false; } chat.leave(targetName); - plistener.removePlayerResidenceChat(targetName); - player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Chat.Kicked").replace("%1", targetName).replace("%2", chat.getChannelName())); + Residence.plistener.removePlayerResidenceChat(targetName); + player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.Kicked", targetName + "%" + chat.getChannelName())); return true; } } } else { - player.sendMessage(ChatColor.RED + language.getPhrase("ChatDisabled")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ChatDisabled")); } } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { boolean resadmin = false; if (sender instanceof Player) { - if (command.getName().equals("resadmin") && gmanager.isResidenceAdmin((Player) sender)) { + if (command.getName().equals("resadmin") && Residence.gmanager.isResidenceAdmin((Player) sender)) { resadmin = true; } - if (command.getName().equals("resadmin") && !gmanager.isResidenceAdmin((Player) sender)) { - ((Player) sender).sendMessage(ChatColor.RED + language.getPhrase("NonAdmin")); + if (command.getName().equals("resadmin") && !Residence.gmanager.isResidenceAdmin((Player) sender)) { + ((Player) sender).sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NonAdmin")); return true; } - if (command.getName().equals("res") && gmanager.isResidenceAdmin((Player) sender) && Residence.getConfigManager().getAdminFullAccess()) { + if (command.getName().equals("res") && Residence.gmanager.isResidenceAdmin((Player) sender) && Residence.getConfigManager().getAdminFullAccess()) { resadmin = true; } } else { resadmin = true; } - return commandRes(args, resadmin, command, sender); + + boolean respond = commandRes(args, resadmin, command, sender); + + if (!respond) + sendUsage(sender, command.getName()); + + return true; } - return super.onCommand(sender, command, label, args); + return this.onCommand(sender, command, label, args); + } + + private void sendUsage(CommandSender sender, String command) { + + sender.sendMessage(Residence.getLM().getMessage("DefaultUsage", command)); + } @SuppressWarnings("deprecation") @@ -324,9 +347,9 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com } else { resadmin = true; } - if (cmanager.allowAdminsOnly()) { + if (Residence.cmanager.allowAdminsOnly()) { if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("AdminOnly")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AdminOnly")); return true; } } @@ -351,7 +374,7 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com .getDescription().getVersion()); sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); - sender.sendMessage(ChatColor.GREEN + "Maintained by: " + ChatColor.YELLOW + "Zrips"); + sender.sendMessage(ChatColor.GREEN + "Currently maintained by: " + ChatColor.YELLOW + "Zrips"); String names = null; List authlist = this.getDescription().getAuthors(); for (String auth : authlist) { @@ -370,21 +393,27 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com } if (cmd.equals("setowner") && args.length == 3) { if (!resadmin) { - sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } - ClaimedResidence area = rmanager.getByName(args[1]); + ClaimedResidence area = Residence.rmanager.getByName(args[1]); if (area != null) { area.getPermissions().setOwner(args[2], true); + if (Residence.getRentManager().isForRent(area.getName())) + Residence.getRentManager().removeRentable(area.getName()); + if (Residence.tmanager.isForSale(area.getName())) + Residence.tmanager.removeFromSale(area.getName()); + area.getPermissions().applyDefaultFlags(); + if (area.getParent() == null) { - sender.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "|" - + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); + sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + + ChatColor.GREEN + "|" + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); } else { - sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange", ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split( - "\\.").length - 1] + " " + ChatColor.GREEN + "|" + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); + sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneOwnerChange", ChatColor.YELLOW + " " + args[1].split("\\.")[args[1] + .split("\\.").length - 1] + " " + ChatColor.GREEN + "|" + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); } } else { - sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } @@ -398,18 +427,18 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com } if (command.getName().equals("resadmin")) { if (args.length == 1 && args[0].equals("on")) { - resadminToggle.add(player.getName()); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("AdminToggle", language.getPhrase("TurnOn"))); + Residence.resadminToggle.add(player.getName()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("AdminToggle", Residence.getLanguage().getPhrase("TurnOn"))); return true; } else if (args.length == 1 && args[0].equals("off")) { - resadminToggle.remove(player.getName()); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("AdminToggle", language.getPhrase("TurnOff"))); + Residence.resadminToggle.remove(player.getName()); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("AdminToggle", Residence.getLanguage().getPhrase("TurnOff"))); return true; } } - if (!resadmin && resadminToggle.contains(player.getName())) { - if (!gmanager.isResidenceAdmin(player)) { - resadminToggle.remove(player.getName()); + if (!resadmin && Residence.resadminToggle.contains(player.getName())) { + if (!Residence.gmanager.isResidenceAdmin(player)) { + Residence.resadminToggle.remove(player.getName()); } } if (cmd.equals("select")) { @@ -441,10 +470,10 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com return false; } if (resadmin || args[1].endsWith(pname)) { - rmanager.removeAllByOwner(player, args[1]); - player.sendMessage(ChatColor.GREEN + language.getPhrase("RemovePlayersResidences", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); + Residence.rmanager.removeAllByOwner(player, args[1]); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RemovePlayersResidences", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); } return true; } @@ -459,7 +488,7 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com } if (cmd.equals("default")) { if (args.length == 2) { - ClaimedResidence res = rmanager.getByName(args[1]); + ClaimedResidence res = Residence.rmanager.getByName(args[1]); res.getPermissions().applyDefaultFlags(player, resadmin); return true; } @@ -469,7 +498,7 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com if (args.length == 1 || args.length == 2) { final String[] tempArgs = args; final Player p = player; - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { @Override public void run() { OfflinePlayer target; @@ -481,7 +510,7 @@ public void run() { target = Residence.getOfflinePlayer(tempArgs[1]); if (target == null) return; - gmanager.getGroup(target.getName(), Residence.getConfigManager().getDefaultWorld()).printLimits(p, target, rsadm); + Residence.gmanager.getGroup(target.getName(), Residence.getConfigManager().getDefaultWorld()).printLimits(p, target, rsadm); return; } }); @@ -492,36 +521,40 @@ public void run() { if (cmd.equals("signupdate")) { if (args.length == 1) { if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } int number = Residence.getSignUtil().updateAllSigns(); - player.sendMessage(language.getPhrase("SignsUpdated", String.valueOf(number))); + player.sendMessage(Residence.getLanguage().getPhrase("SignsUpdated", String.valueOf(number))); return true; } return false; } if (cmd.equals("info")) { if (args.length == 1) { - String area = rmanager.getNameByLoc(player.getLocation()); + String area = Residence.rmanager.getNameByLoc(player.getLocation()); if (area != null) { - rmanager.printAreaInfo(area, player); + Residence.rmanager.printAreaInfo(area, player); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } else if (args.length == 2) { - rmanager.printAreaInfo(args[1], player); + Residence.rmanager.printAreaInfo(args[1], player); return true; } return false; } if (cmd.equals("padd")) { if (args.length == 2) { + if (!Residence.isPlayerExist(player, args[1], true)) + return false; Bukkit.dispatchCommand(player, "res pset " + args[1] + " trusted true"); return true; } if (args.length == 3) { + if (!Residence.isPlayerExist(player, args[2], true)) + return false; Bukkit.dispatchCommand(player, "res pset " + args[1] + " " + args[2] + " trusted true"); return true; } @@ -543,16 +576,18 @@ public void run() { if (args.length == 4) { pname = args[3]; } - ClaimedResidence res = rmanager.getByName(args[1]); + ClaimedResidence res = Residence.rmanager.getByName(args[1]); if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { - player.sendMessage(language.getPhrase("FlagCheckFalse", ChatColor.YELLOW + args[2] + ChatColor.RED + "|" + ChatColor.YELLOW + pname + ChatColor.RED + player.sendMessage(Residence.getLanguage().getPhrase("FlagCheckFalse", ChatColor.YELLOW + args[2] + ChatColor.RED + "|" + ChatColor.YELLOW + pname + + ChatColor.RED + "|" + ChatColor.YELLOW + args[1] + ChatColor.RED)); } else { - player.sendMessage(language.getPhrase("FlagCheckTrue", ChatColor.GREEN + args[2] + ChatColor.YELLOW + "|" + ChatColor.GREEN + pname + ChatColor.YELLOW + player.sendMessage(Residence.getLanguage().getPhrase("FlagCheckTrue", ChatColor.GREEN + args[2] + ChatColor.YELLOW + "|" + ChatColor.GREEN + pname + + ChatColor.YELLOW + "|" + ChatColor.YELLOW + args[1] + ChatColor.RED + "|" + (res.getPermissions().playerHas(pname, res.getPermissions().getWorld(), args[2], false) ? ChatColor.GREEN + "TRUE" : ChatColor.RED + "FALSE"))); } @@ -564,11 +599,11 @@ public void run() { if (args.length != 1) { return false; } - String res = rmanager.getNameByLoc(player.getLocation()); + String res = Residence.rmanager.getNameByLoc(player.getLocation()); if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); } else { - player.sendMessage(ChatColor.GREEN + language.getPhrase("InResidence", ChatColor.YELLOW + res + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("InResidence", ChatColor.YELLOW + res + ChatColor.GREEN)); } return true; } @@ -586,18 +621,18 @@ public void run() { } if (cmd.equals("list")) { if (args.length == 1) { - rmanager.listResidences(player); + Residence.rmanager.listResidences(player); return true; } else if (args.length == 2) { try { Integer.parseInt(args[1]); - rmanager.listResidences(player, page); + Residence.rmanager.listResidences(player, page); } catch (Exception ex) { - rmanager.listResidences(player, args[1]); + Residence.rmanager.listResidences(player, args[1]); } return true; } else if (args.length == 3) { - rmanager.listResidences(player, args[1], page); + Residence.rmanager.listResidences(player, args[1], page); return true; } return false; @@ -611,7 +646,7 @@ public void run() { if (args.length == 2) { res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(language.getPhrase("NotInResidence")); + player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); return true; } } else if (args.length == 3) { @@ -621,7 +656,7 @@ public void run() { VotePage = Integer.parseInt(args[2]); res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(language.getPhrase("NotInResidence")); + player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); return true; } } catch (Exception ex) { @@ -633,7 +668,7 @@ public void run() { } else if (args.length == 4) { res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - player.sendMessage(language.getPhrase("NotInResidence")); + player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); return true; } try { @@ -645,11 +680,11 @@ public void run() { } if (res == null) { - player.sendMessage(language.getPhrase("NotInResidence")); + player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); return true; } - Map> ShopList = ShopSignUtil.GetAllVoteList(); + Map> ShopList = Residence.getShopSignUtilManager().GetAllVoteList(); List VoteList = new ArrayList(); if (ShopList.containsKey(res.getName())) { @@ -663,11 +698,11 @@ public void run() { } int pagecount = (int) Math.ceil((double) VoteList.size() / (double) 10); if (page > pagecount || page < 1) { - sender.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Shop.NoVotes")); + sender.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Shop.NoVotes")); return true; } - player.sendMessage(NewLanguage.getMessage("Language.Shop.VotesTopLine", separator + "%" + res.getName() + "%" + VotePage + "%" + pagecount + "%" + player.sendMessage(Residence.getLM().getMessage("Language.Shop.VotesTopLine", separator + "%" + res.getName() + "%" + VotePage + "%" + pagecount + "%" + separator)); int start = VotePage * 10 - 9; @@ -688,8 +723,8 @@ public void run() { ft.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); String timeString = ft.format(dNow); - String message = NewLanguage.getMessage("Language.Shop.VotesList", i + "%" + one.getName() + "%" + (Residence.getConfigManager().isOnlyLike() ? "" - : one.getVote()) + "%" + timeString); + String message = Residence.getLM().getMessage("Language.Shop.VotesList", i + "%" + one.getName() + "%" + (Residence.getConfigManager().isOnlyLike() + ? "" : one.getVote()) + "%" + timeString); player.sendMessage(message); i++; } @@ -728,7 +763,7 @@ public void run() { } } - Map ShopList = ShopSignUtil.getSortedShopList(); + Map ShopList = Residence.getShopSignUtilManager().getSortedShopList(); String separator = ChatColor.GOLD + ""; String simbol = "\u25AC"; @@ -737,12 +772,11 @@ public void run() { } int pagecount = (int) Math.ceil((double) ShopList.size() / (double) 10); if (page > pagecount || page < 1) { - sender.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.Shop.NoVotes")); + sender.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Shop.NoVotes")); return true; } - player.sendMessage(NewLanguage.getMessage("Language.Shop.ListTopLine").replace("%1", separator).replace("%2", String.valueOf(Shoppage)).replace("%3", - String.valueOf(pagecount)).replace("%4", separator)); + player.sendMessage(Residence.getLM().getMessage("Language.Shop.ListTopLine", separator + "%" + Shoppage + "%" + pagecount + "%" + separator)); int start = Shoppage * 10 - 9; int end = Shoppage * 10 + 1; @@ -757,20 +791,20 @@ public void run() { if (position >= end) break; - Vote vote = ShopSignUtil.getAverageVote(one.getKey()); + Vote vote = Residence.getShopSignUtilManager().getAverageVote(one.getKey()); String votestat = ""; if (Residence.getConfigManager().isOnlyLike()) { - votestat = vote.getAmount() == 0 ? "" : NewLanguage.getMessage("Language.Shop.ListLiked", ShopSignUtil.getLikes(one.getKey())); + votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Language.Shop.ListLiked", Residence.getShopSignUtilManager().getLikes(one + .getKey())); } else - votestat = vote.getAmount() == 0 ? "" : NewLanguage.getMessage("Language.Shop.ListVoted").replace("%1", String.valueOf(vote.getVote())) - .replace("%2", String.valueOf(vote.getAmount())); + votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Language.Shop.ListVoted", vote.getVote() + "%" + vote.getAmount()); ClaimedResidence res = Residence.getResidenceManager().getByName(one.getKey()); - String message = NewLanguage.getMessage("Language.Shop.List").replace("%1", String.valueOf(i)).replace("%2", one.getKey()) - .replace("%3", Residence.getResidenceManager().getByName(one.getKey()).getOwner()).replace("%4", votestat); + String message = Residence.getLM().getMessage("Language.Shop.List", i + "%" + one.getKey() + "%" + Residence.getResidenceManager().getByName(one + .getKey()).getOwner() + "%" + votestat); - String desc = res.getShopDesc() == null ? NewLanguage.getMessage("Language.Shop.NoDesc") : NewLanguage.getMessage( - "Language.Shop.Desc").replace("%1", ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); + String desc = res.getShopDesc() == null ? Residence.getLM().getMessage("Language.Shop.NoDesc") : Residence.getLM().getMessage( + "Language.Shop.Desc", ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); String prev = "[\"\",{\"text\":\"" + ChatColor.GOLD + " " + message + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/res tp " + one.getKey() @@ -806,12 +840,12 @@ public void run() { if (args.length == 2 && args[1].equalsIgnoreCase("DeleteBoard")) { if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } ShopListener.Delete.add(player.getName()); - player.sendMessage(NewLanguage.getMessage("Language.Shop.DeleteBoard")); + player.sendMessage(Residence.getLM().getMessage("Language.Shop.DeleteBoard")); return true; } if (args.length > 2 && args[1].equalsIgnoreCase("setdesc")) { @@ -822,7 +856,7 @@ public void run() { if (args.length >= 2) { res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(language.getPhrase("NotInResidence")); + player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); return true; } else { for (int i = 2; i < args.length; i++) { @@ -837,23 +871,23 @@ public void run() { return true; if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { - player.sendMessage(language.getPhrase("NonAdmin")); + player.sendMessage(Residence.getLanguage().getPhrase("NonAdmin")); return true; } res.setShopDesc(desc); - player.sendMessage(NewLanguage.getMessage("Language.Shop.DescChange").replace("%1", ChatColor.translateAlternateColorCodes('&', desc))); + player.sendMessage(Residence.getLM().getMessage("Language.Shop.DescChange", ChatColor.translateAlternateColorCodes('&', desc))); return true; } if (args.length == 3 && args[1].equalsIgnoreCase("createboard")) { if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - player.sendMessage(language.getPhrase("SelectPoints")); + player.sendMessage(Residence.getLanguage().getPhrase("SelectPoints")); return true; } @@ -861,7 +895,7 @@ public void run() { try { place = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(language.getPhrase("UseNumbers")); + player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); return true; } @@ -872,7 +906,7 @@ public void run() { Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); if (loc1.getBlockY() < loc2.getBlockY()) { - player.sendMessage(NewLanguage.getMessage("Language.Shop.InvalidSelection")); + player.sendMessage(Residence.getLM().getMessage("Language.Shop.InvalidSelection")); return true; } @@ -891,11 +925,11 @@ public void run() { newTemp.GetLocations(); - ShopSignUtil.addBoard(newTemp); - player.sendMessage(NewLanguage.getMessage("Language.Shop.NewBoard")); + Residence.getShopSignUtilManager().addBoard(newTemp); + player.sendMessage(Residence.getLM().getMessage("Language.Shop.NewBoard")); - ShopSignUtil.BoardUpdate(); - ShopSignUtil.saveSigns(); + Residence.getShopSignUtilManager().BoardUpdate(); + Residence.getShopSignUtilManager().saveSigns(); return true; @@ -910,7 +944,7 @@ public void run() { res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - player.sendMessage(language.getPhrase("InvalidResidence")); + player.sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); return true; } vote = Residence.getConfigManager().getVoteRangeTo(); @@ -918,21 +952,21 @@ public void run() { } else { res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(language.getPhrase("NotInResidence")); + player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); return true; } try { vote = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(language.getPhrase("UseNumbers")); + player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); return true; } } } else if (args.length == 2 && Residence.getConfigManager().isOnlyLike()) { res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(language.getPhrase("NotInResidence")); + player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); return true; } vote = Residence.getConfigManager().getVoteRangeTo(); @@ -940,31 +974,31 @@ public void run() { res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - player.sendMessage(language.getPhrase("InvalidResidence")); + player.sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); return true; } try { vote = Integer.parseInt(args[3]); } catch (Exception ex) { - player.sendMessage(language.getPhrase("UseNumbers")); + player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); return true; } } resName = res.getName(); if (!res.getPermissions().has("shop", false)) { - player.sendMessage(NewLanguage.getMessage("Language.Shop.CantVote")); + player.sendMessage(Residence.getLM().getMessage("Language.Shop.CantVote")); return true; } if (vote < Residence.getConfigManager().getVoteRangeFrom() || vote > Residence.getConfigManager().getVoteRangeTo()) { - player.sendMessage(NewLanguage.getMessage("Language.Shop.VotedRange", Residence.getConfigManager().getVoteRangeFrom() + "%" + Residence + player.sendMessage(Residence.getLM().getMessage("Language.Shop.VotedRange", Residence.getConfigManager().getVoteRangeFrom() + "%" + Residence .getConfigManager().getVoteRangeTo())); return true; } - ConcurrentHashMap> VoteList = ShopSignUtil.GetAllVoteList(); + ConcurrentHashMap> VoteList = Residence.getShopSignUtilManager().GetAllVoteList(); if (VoteList.containsKey(resName)) { List list = VoteList.get(resName); @@ -973,11 +1007,11 @@ public void run() { if (OneVote.getName().equalsIgnoreCase(player.getName())) { if (Residence.getConfigManager().isOnlyLike()) { - player.sendMessage(NewLanguage.getMessage("Language.Shop.AlreadyLiked", resName)); + player.sendMessage(Residence.getLM().getMessage("Language.Shop.AlreadyLiked", resName)); return true; } - player.sendMessage(NewLanguage.getMessage("Language.Shop.VoteChanged", OneVote.getVote() + "%" + vote + "%" + resName)); + player.sendMessage(Residence.getLM().getMessage("Language.Shop.VoteChanged", OneVote.getVote() + "%" + vote + "%" + resName)); OneVote.setVote(vote); OneVote.setTime(System.currentTimeMillis()); found = true; @@ -989,9 +1023,9 @@ public void run() { list.add(newVote); if (Residence.getConfigManager().isOnlyLike()) - player.sendMessage(NewLanguage.getMessage("Language.Shop.Liked", resName)); + player.sendMessage(Residence.getLM().getMessage("Language.Shop.Liked", resName)); else - player.sendMessage(NewLanguage.getMessage("Language.Shop.Voted", vote + "%" + resName)); + player.sendMessage(Residence.getLM().getMessage("Language.Shop.Voted", vote + "%" + resName)); } } else { List list = new ArrayList(); @@ -999,50 +1033,50 @@ public void run() { list.add(newVote); VoteList.put(resName, list); if (Residence.getConfigManager().isOnlyLike()) - player.sendMessage(NewLanguage.getMessage("Language.Shop.Liked", resName)); + player.sendMessage(Residence.getLM().getMessage("Language.Shop.Liked", resName)); else - player.sendMessage(NewLanguage.getMessage("Language.Shop.Voted", vote + "%" + resName)); + player.sendMessage(Residence.getLM().getMessage("Language.Shop.Voted", vote + "%" + resName)); } - ShopSignUtil.saveShopVotes(); - ShopSignUtil.BoardUpdate(); + Residence.getShopSignUtilManager().saveShopVotes(); + Residence.getShopSignUtilManager().BoardUpdate(); return true; } return false; } if (cmd.equals("listhidden")) { if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } if (args.length == 1) { - rmanager.listResidences(player, 1, true); + Residence.rmanager.listResidences(player, 1, true); return true; } else if (args.length == 2) { try { Integer.parseInt(args[1]); - rmanager.listResidences(player, page, true); + Residence.rmanager.listResidences(player, page, true); } catch (Exception ex) { - rmanager.listResidences(player, args[1], 1, true); + Residence.rmanager.listResidences(player, args[1], 1, true); } return true; } else if (args.length == 3) { - rmanager.listResidences(player, args[1], page, true); + Residence.rmanager.listResidences(player, args[1], page, true); return true; } return false; } if (cmd.equals("rename")) { if (args.length == 3) { - rmanager.renameResidence(player, args[1], args[2], resadmin); + Residence.rmanager.renameResidence(player, args[1], args[2], resadmin); return true; } return false; } if (cmd.equals("renamearea")) { if (args.length == 4) { - ClaimedResidence res = rmanager.getByName(args[1]); + ClaimedResidence res = Residence.rmanager.getByName(args[1]); if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } res.renameArea(player, args[2], args[3], resadmin); @@ -1054,16 +1088,16 @@ public void run() { if (args.length != 1) { return false; } - group = gmanager.getGroup(player); + group = Residence.gmanager.getGroup(player); if (!group.hasUnstuckAccess()) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } - ClaimedResidence res = rmanager.getByLoc(player.getLocation()); + ClaimedResidence res = Residence.rmanager.getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); } else { - player.sendMessage(ChatColor.YELLOW + language.getPhrase("Moved") + "..."); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Moved") + "..."); player.teleport(res.getOutsideFreeLoc(player.getLocation())); } return true; @@ -1074,18 +1108,18 @@ public void run() { } Player targetplayer = Bukkit.getPlayer(args[1]); if (targetplayer == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotOnline")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotOnline")); return true; } - group = gmanager.getGroup(player); + group = Residence.gmanager.getGroup(player); if (!group.hasKickAccess() && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } - ClaimedResidence res = rmanager.getByLoc(targetplayer.getLocation()); + ClaimedResidence res = Residence.rmanager.getByLoc(targetplayer.getLocation()); if (res == null || res != null && !res.getOwner().equals(player.getName()) && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("PlayerNotInResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("PlayerNotInResidence")); return true; } @@ -1097,7 +1131,7 @@ public void run() { targetplayer.teleport(loc); else targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation())); - targetplayer.sendMessage(ChatColor.RED + language.getPhrase("Kicked") + "!"); + targetplayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("Kicked") + "!"); } } @@ -1106,15 +1140,15 @@ public void run() { if (args.length != 3) { return false; } - rmanager.mirrorPerms(player, args[2], args[1], resadmin); + Residence.rmanager.mirrorPerms(player, args[2], args[1], resadmin); return true; } if (cmd.equals("listall")) { if (args.length == 1) { - rmanager.listAllResidences(player, 1); + Residence.rmanager.listAllResidences(player, 1); } else if (args.length == 2) { try { - rmanager.listAllResidences(player, page); + Residence.rmanager.listAllResidences(player, page); } catch (Exception ex) { } } else { @@ -1124,14 +1158,14 @@ public void run() { } if (cmd.equals("listallhidden")) { if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } if (args.length == 1) { - rmanager.listAllResidences(player, 1, true); + Residence.rmanager.listAllResidences(player, 1, true); } else if (args.length == 2) { try { - rmanager.listAllResidences(player, page, true); + Residence.rmanager.listAllResidences(player, page, true); } catch (Exception ex) { } } else { @@ -1144,19 +1178,20 @@ public void run() { return false; } try { - player.sendMessage(ChatColor.GREEN + language.getPhrase("MaterialGet", ChatColor.GOLD + args[1] + ChatColor.GREEN + "|" + ChatColor.RED + Material - .getMaterial(Integer.parseInt(args[1])).name() + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MaterialGet", ChatColor.GOLD + args[1] + ChatColor.GREEN + "|" + ChatColor.RED + + Material + .getMaterial(Integer.parseInt(args[1])).name() + ChatColor.GREEN)); } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidMaterial")); } return true; } if (cmd.equals("tpset")) { - ClaimedResidence res = rmanager.getByLoc(player.getLocation()); + ClaimedResidence res = Residence.rmanager.getByLoc(player.getLocation()); if (res != null) { res.setTpLoc(player, resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } @@ -1164,14 +1199,14 @@ public void run() { if (args.length != 2) { return false; } - ClaimedResidence res = rmanager.getByName(args[1]); + ClaimedResidence res = Residence.rmanager.getByName(args[1]); if (Residence.getConfigManager().isResTpCaseSensitive()) - res = rmanager.getByName(args[1]); + res = Residence.rmanager.getByName(args[1]); else - res = rmanager.getByNameNoCase(args[1]); + res = Residence.rmanager.getByNameNoCase(args[1]); if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } res.tpToResidence(player, player, resadmin); @@ -1187,13 +1222,13 @@ public void run() { if (rtMap.containsKey(player.getName()) && !resadmin) { if (rtMap.get(player.getName()) + (sec * 1000) > System.currentTimeMillis()) { int left = (int) (sec - ((System.currentTimeMillis() - rtMap.get(player.getName())) / 1000)); - player.sendMessage(ChatColor.RED + NewLanguage.getMessage("Language.RandomTeleport.TpLimit").replace("%1", String.valueOf(left))); + player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.RandomTeleport.TpLimit", String.valueOf(left))); return true; } } if (!player.hasPermission("residence.randomtp") && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } @@ -1201,16 +1236,15 @@ public void run() { rtMap.put(pname, System.currentTimeMillis()); if (loc == null) { - player.sendMessage(NewLanguage.getMessage("Language.RandomTeleport.IncorrectLocation").replace("%1", String.valueOf(sec))); + player.sendMessage(Residence.getLM().getMessage("Language.RandomTeleport.IncorrectLocation", String.valueOf(sec))); return true; } if (Residence.getConfigManager().getTeleportDelay() > 0 && !resadmin) { - player.sendMessage(ChatColor.GREEN + NewLanguage.getMessage("Language.RandomTeleport.TeleportStarted").replace("%1", String.valueOf(loc.getX())) - .replace("%2", String.valueOf(loc.getY())).replace("%3", String.valueOf(loc.getZ())).replace("%4", String.valueOf(Residence.getConfigManager() - .getTeleportDelay()))); - ResidenceCommandListener.teleportDelayMap.add(player.getName()); - RandomTp.performDelaydTp(loc, player); + player.sendMessage(ChatColor.GREEN + Residence.getLM().getMessage("Language.RandomTeleport.TeleportStarted", loc.getX() + "%" + loc.getY() + "%" + loc + .getZ() + "%" + Residence.getConfigManager().getTeleportDelay())); + teleportDelayMap.add(player.getName()); + Residence.getRandomTpManager().performDelaydTp(loc, player); } else RandomTp.performInstantTp(loc, player); @@ -1225,7 +1259,7 @@ public void run() { teleportMap.get(player.getName()).tpToResidence(player, player, resadmin); teleportMap.remove(player.getName()); } else - player.sendMessage(ChatColor.RED + language.getPhrase("NoTeleportConfirm")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoTeleportConfirm")); return true; } @@ -1241,53 +1275,56 @@ public void run() { return commandResMessage(args, resadmin, player, page); } if (cmd.equals("give") && args.length == 3) { - rmanager.giveResidence(player, args[2], args[1], resadmin); + Residence.rmanager.giveResidence(player, args[2], args[1], resadmin); return true; } if (cmd.equals("server")) { if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } if (args.length == 2) { - ClaimedResidence res = rmanager.getByName(args[1]); + ClaimedResidence res = Residence.rmanager.getByName(args[1]); if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } res.getPermissions().setOwner(Residence.getServerLandname(), false); - player.sendMessage(ChatColor.GREEN + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "|" + ChatColor.YELLOW + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "|" + + ChatColor.YELLOW + Residence.getServerLandname() + ChatColor.GREEN)); return true; } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } } if (cmd.equals("clearflags")) { if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } - ClaimedResidence area = rmanager.getByName(args[1]); + ClaimedResidence area = Residence.rmanager.getByName(args[1]); if (area != null) { area.getPermissions().clearFlags(); - player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagsCleared")); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagsCleared")); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } if (cmd.equals("tool")) { - player.sendMessage(ChatColor.YELLOW + language.getPhrase("SelectionTool") + ":" + ChatColor.GREEN + Material.getMaterial(cmanager.getSelectionTooldID())); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("InfoTool") + ": " + ChatColor.GREEN + Material.getMaterial(cmanager.getInfoToolID())); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("SelectionTool") + ":" + ChatColor.GREEN + Material.getMaterial(Residence.cmanager + .getSelectionTooldID())); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("InfoTool") + ": " + ChatColor.GREEN + Material.getMaterial(Residence.cmanager + .getInfoToolID())); return true; } return false; } private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender, Command command) { - if (helppages == null) + if (Residence.helppages == null) return false; String helppath = "res"; @@ -1302,143 +1339,179 @@ private boolean commandHelp(String[] args, boolean resadmin, CommandSender sende try { page = Integer.parseInt(args[args.length - 1]); } catch (Exception ex) { - sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidHelp")); + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); } } if (command.getName().equalsIgnoreCase("res")) resadmin = false; - if (helppages.containesEntry(helppath)) - helppages.printHelp(sender, page, helppath, resadmin); + if (Residence.helppages.containesEntry(helppath)) + Residence.helppages.printHelp(sender, page, helppath, resadmin); return true; } private boolean commandResExpand(String[] args, boolean resadmin, Player player, int page) { String resName; - String areaName; + String areaName = null; ClaimedResidence res = null; - res = rmanager.getByLoc(player.getLocation()); + if (args.length == 2) + res = Residence.rmanager.getByLoc(player.getLocation()); + else if (args.length == 3) + res = Residence.rmanager.getByName(args[1]); + else + return false; + if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } if (res.isSubzone() && !player.hasPermission("residence.expand.subzone") && !resadmin) { - player.sendMessage(NewLanguage.getMessage("Language.CantExpandSubzone")); + player.sendMessage(Residence.getLM().getMessage("Language.CantExpandSubzone")); return false; } if (!res.isSubzone() && !player.hasPermission("residence.expand") && !resadmin) { - player.sendMessage(NewLanguage.getMessage("Language.CantExpandResidence")); + player.sendMessage(Residence.getLM().getMessage("Language.CantExpandResidence")); return false; } resName = res.getName(); CuboidArea area = null; - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); + + if (args.length == 2) { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } else if (args.length == 3) { + areaName = res.isSubzone() ? Residence.getResidenceManager().getSubzoneNameByRes(res) : "main"; + area = res.getCuboidAreabyName(areaName); + } + if (area != null) { - smanager.placeLoc1(player, area.getHighLoc()); - smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + resName - + ChatColor.GREEN)); + Residence.smanager.placeLoc1(player, area.getHighLoc(), false); + Residence.smanager.placeLoc2(player, area.getLowLoc(), false); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + + resName + ChatColor.GREEN)); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); + return true; } - int amount; + int amount = -1; try { - amount = Integer.parseInt(args[1]); + if (args.length == 2) + amount = Integer.parseInt(args[1]); + else if (args.length == 3) + amount = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); + return true; + } + + if (amount > 1000) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); return true; } if (amount < 0) - amount = amount * -1; + amount = 1; - smanager.modify(player, false, amount); + Residence.smanager.modify(player, false, amount); if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { if (Residence.wep != null) { if (Residence.wepid == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); + Residence.smanager.worldEdit(player); } } res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player .getName())), areaName, resadmin); return true; } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); } return false; } private boolean commandResContract(String[] args, boolean resadmin, Player player, int page) { String resName; - String areaName; + String areaName = null; ClaimedResidence res = null; - res = rmanager.getByLoc(player.getLocation()); + if (args.length == 2) + res = Residence.rmanager.getByLoc(player.getLocation()); + else if (args.length == 3) + res = Residence.rmanager.getByName(args[1]); + else + return false; if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } if (res.isSubzone() && !player.hasPermission("residence.contract.subzone") && !resadmin) { - player.sendMessage(NewLanguage.getMessage("Language.CantContractSubzone")); + player.sendMessage(Residence.getLM().getMessage("Language.CantContractSubzone")); return false; } if (!res.isSubzone() && !player.hasPermission("residence.contract") && !resadmin) { - player.sendMessage(NewLanguage.getMessage("Language.CantContractResidence")); + player.sendMessage(Residence.getLM().getMessage("Language.CantContractResidence")); return false; } resName = res.getName(); CuboidArea area = null; - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); + + if (args.length == 2) { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } else if (args.length == 3) { + areaName = res.isSubzone() ? Residence.getResidenceManager().getSubzoneNameByRes(res) : "main"; + area = res.getCuboidAreabyName(areaName); + } + if (area != null) { - smanager.placeLoc1(player, area.getHighLoc()); - smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + resName - + ChatColor.GREEN)); + Residence.smanager.placeLoc1(player, area.getHighLoc(), false); + Residence.smanager.placeLoc2(player, area.getLowLoc(), false); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + + resName + ChatColor.GREEN)); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); + return true; } - int amount; + int amount = -1; try { - amount = Integer.parseInt(args[1]); + if (args.length == 2) + amount = Integer.parseInt(args[1]); + else if (args.length == 3) + amount = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); return true; } if (amount > 1000) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); return true; } if (amount < 0) - amount = amount * -1; + amount = 1; - if (!smanager.contract(player, amount, resadmin)) + if (!Residence.smanager.contract(player, amount, resadmin)) return true; if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { if (Residence.wep != null) { if (Residence.wepid == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); + Residence.smanager.worldEdit(player); } } res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player .getName())), areaName, resadmin); - Residence.getSelectionManager().MakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() - .getPlayerLoc2(player.getName()), false); return true; } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); } return false; } @@ -1446,31 +1519,31 @@ private boolean commandResContract(String[] args, boolean resadmin, Player playe private boolean commandResSelect(String[] args, boolean resadmin, Player player, int page) { PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (!group.selectCommandAccess() && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectDiabled")); return true; } if (!group.canCreateResidences() && group.getMaxSubzoneDepth(player.getName()) <= 0 && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectDiabled")); return true; } if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player .isPermissionSet("residence.select")) && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectDiabled")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectDiabled")); return true; } if (args.length == 2) { if (args[1].equals("size") || args[1].equals("cost")) { if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { try { - smanager.showSelectionInfo(player); + Residence.smanager.showSelectionInfo(player); return true; } catch (Exception ex) { Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); return true; } - } else if (smanager.worldEdit(player)) { + } else if (Residence.smanager.worldEdit(player)) { try { - smanager.showSelectionInfo(player); + Residence.smanager.showSelectionInfo(player); return true; } catch (Exception ex) { Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); @@ -1478,31 +1551,33 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, } } } else if (args[1].equals("vert")) { - smanager.vert(player, resadmin); + Residence.smanager.vert(player, resadmin); return true; } else if (args[1].equals("sky")) { - smanager.sky(player, resadmin); + Residence.smanager.sky(player, resadmin); return true; } else if (args[1].equals("bedrock")) { - smanager.bedrock(player, resadmin); + Residence.smanager.bedrock(player, resadmin); return true; } else if (args[1].equals("coords")) { Location playerLoc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); if (playerLoc1 != null) { - player.sendMessage(ChatColor.GREEN + language.getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + ", " + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() + + ", " + playerLoc1.getBlockY() + ", " + playerLoc1.getBlockZ() + ")"); } Location playerLoc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); if (playerLoc2 != null) { - player.sendMessage(ChatColor.GREEN + language.getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + ", " + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() + + ", " + playerLoc2.getBlockY() + ", " + playerLoc2.getBlockZ() + ")"); } return true; } else if (args[1].equals("chunk")) { - smanager.selectChunk(player); + Residence.smanager.selectChunk(player); return true; } else if (args[1].equals("worldedit")) { - if (smanager.worldEdit(player)) { + if (Residence.smanager.worldEdit(player)) { player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); } return true; @@ -1513,20 +1588,20 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, try { amount = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); return true; } - smanager.modify(player, false, amount); + Residence.smanager.modify(player, false, amount); return true; } else if (args[1].equals("shift")) { int amount; try { amount = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); return true; } - smanager.modify(player, true, amount); + Residence.smanager.modify(player, true, amount); return true; } } @@ -1534,12 +1609,12 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, Player target = player; if (args.length == 3) { if (!player.hasPermission("residence.select.auto.others")) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } target = Bukkit.getPlayer(args[2]); if (target == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotOnline")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotOnline")); return true; } } @@ -1551,12 +1626,12 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, String areaName; ClaimedResidence res = null; if (args.length > 2) { - res = rmanager.getByName(args[2]); + res = Residence.rmanager.getByName(args[2]); } else { - res = rmanager.getByLoc(player.getLocation()); + res = Residence.rmanager.getByLoc(player.getLocation()); } if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } resName = res.getName(); @@ -1569,20 +1644,21 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, area = res.getArea(areaName); } if (area != null) { - smanager.placeLoc1(player, area.getHighLoc()); - smanager.placeLoc2(player, area.getLowLoc()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + resName + Residence.smanager.placeLoc1(player, area.getHighLoc(), true); + Residence.smanager.placeLoc2(player, area.getLowLoc(), true); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD + + resName + ChatColor.GREEN)); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("AreaNonExist")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); } return true; } else { try { - smanager.selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); + Residence.smanager.selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); return true; } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectionFail")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectionFail")); return true; } } @@ -1593,19 +1669,20 @@ private boolean commandResCreate(String[] args, boolean resadmin, Player player, return false; } - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + WorldEditPlugin wep = (WorldEditPlugin) this.getServer().getPluginManager().getPlugin("WorldEdit"); if (wep != null) { if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); + Residence.smanager.worldEdit(player); } } if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) == null) { - rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName()), resadmin); + Residence.rmanager.addResidence(player, args[1], Residence.smanager.getPlayerLoc1(player.getName()), Residence.smanager.getPlayerLoc2(player.getName()), + resadmin); return true; } else if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) != null) { ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); - player.sendMessage(ChatColor.RED + language.getPhrase("SelectOverlap", String.valueOf(Region.getId()))); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectOverlap", String.valueOf(Region.getId()))); Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), Region .getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); @@ -1617,14 +1694,15 @@ private boolean commandResCreate(String[] args, boolean resadmin, Player player, Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() .getPlayerLoc2(player.getName()), false); } else if (Residence.wg == null) { - rmanager.addResidence(player, args[1], smanager.getPlayerLoc1(player.getName()), smanager.getPlayerLoc2(player.getName()), resadmin); + Residence.rmanager.addResidence(player, args[1], Residence.smanager.getPlayerLoc1(player.getName()), Residence.smanager.getPlayerLoc2(player.getName()), + resadmin); return true; } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); return true; } } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); return true; } return true; @@ -1637,27 +1715,27 @@ private boolean commandResSubzone(String[] args, boolean resadmin, Player player String zname; String parent; if (args.length == 2) { - parent = rmanager.getNameByLoc(player.getLocation()); + parent = Residence.rmanager.getNameByLoc(player.getLocation()); zname = args[1]; } else { parent = args[1]; zname = args[2]; } - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + WorldEditPlugin wep = (WorldEditPlugin) Residence.server.getPluginManager().getPlugin("WorldEdit"); if (wep != null) { if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); + Residence.smanager.worldEdit(player); } } if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = rmanager.getByName(parent); + ClaimedResidence res = Residence.rmanager.getByName(parent); if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } if (!player.hasPermission("residence.create.subzone") && !resadmin) { - player.sendMessage(NewLanguage.getMessage("Language.CantCreateSubzone")); + player.sendMessage(Residence.getLM().getMessage("Language.CantCreateSubzone")); return false; } @@ -1665,7 +1743,7 @@ private boolean commandResSubzone(String[] args, boolean resadmin, Player player zname, resadmin); return true; } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); return true; } } @@ -1673,67 +1751,67 @@ private boolean commandResSubzone(String[] args, boolean resadmin, Player player private boolean commandResArea(String[] args, boolean resadmin, Player player, int page) { if (args.length == 4) { if (args[1].equals("remove")) { - ClaimedResidence res = rmanager.getByName(args[2]); + ClaimedResidence res = Residence.rmanager.getByName(args[2]); if (res != null) { res.removeArea(player, args[3], resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } else if (args[1].equals("add")) { - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + WorldEditPlugin wep = (WorldEditPlugin) this.getServer().getPluginManager().getPlugin("WorldEdit"); if (wep != null) { if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); + Residence.smanager.worldEdit(player); } } if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = rmanager.getByName(args[2]); + ClaimedResidence res = Residence.rmanager.getByName(args[2]); if (res != null) { res.addArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( player.getName())), args[3], resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); } return true; } else if (args[1].equals("replace")) { - WorldEditPlugin wep = (WorldEditPlugin) server.getPluginManager().getPlugin("WorldEdit"); + WorldEditPlugin wep = (WorldEditPlugin) this.getServer().getPluginManager().getPlugin("WorldEdit"); if (wep != null) { if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - smanager.worldEdit(player); + Residence.smanager.worldEdit(player); } } if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = rmanager.getByName(args[2]); + ClaimedResidence res = Residence.rmanager.getByName(args[2]); if (res != null) { res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() .getPlayerLoc2(player.getName())), args[3], resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } } else { - player.sendMessage(ChatColor.RED + language.getPhrase("SelectPoints")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); } return true; } } if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { - ClaimedResidence res = rmanager.getByName(args[2]); + ClaimedResidence res = Residence.rmanager.getByName(args[2]); if (res != null) { res.printAreaList(player, page); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { - ClaimedResidence res = rmanager.getByName(args[2]); + ClaimedResidence res = Residence.rmanager.getByName(args[2]); if (res != null) { res.printAdvancedAreaList(player, page); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } @@ -1746,51 +1824,51 @@ private boolean commandResRemove(String[] args, boolean resadmin, CommandSender if (sender instanceof Player) { player = (Player) sender; - if (deleteConfirm.containsKey(player.getName())) - deleteConfirm.remove(player.getName()); + if (Residence.deleteConfirm.containsKey(player.getName())) + Residence.deleteConfirm.remove(player.getName()); if (args.length == 1) { - ClaimedResidence res = rmanager.getByLoc(player.getLocation()); + ClaimedResidence res = Residence.rmanager.getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(NewLanguage.getMessage("Language.InvalidResidence")); + player.sendMessage(Residence.getLM().getMessage("Language.InvalidResidence")); return false; } if (res.isSubzone() && !player.hasPermission("residence.delete.subzone") && !resadmin) { - player.sendMessage(NewLanguage.getMessage("Language.CantDeleteSubzone")); + player.sendMessage(Residence.getLM().getMessage("Language.CantDeleteSubzone")); return false; } if (res.isSubzone() && player.hasPermission("residence.delete.subzone") && !resadmin && Residence.getConfigManager().isPreventSubZoneRemoval() && !res .getParent().isOwner(player)) { - player.sendMessage(NewLanguage.getMessage("Language.CantDeleteSubzoneNotOwnerOfParent")); + player.sendMessage(Residence.getLM().getMessage("Language.CantDeleteSubzoneNotOwnerOfParent")); return false; } if (!res.isSubzone() && !player.hasPermission("residence.delete") && !resadmin) { - player.sendMessage(NewLanguage.getMessage("Language.CantDeleteResidence")); + player.sendMessage(Residence.getLM().getMessage("Language.CantDeleteResidence")); return false; } if (res.isSubzone()) { - String area = rmanager.getNameByLoc(player.getLocation()); + String area = Residence.rmanager.getNameByLoc(player.getLocation()); String[] split = area.split("\\."); String words = split[split.length - 1]; - if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); - deleteConfirm.put(player.getName(), area); + if (!Residence.deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); + Residence.deleteConfirm.put(player.getName(), area); } else { - rmanager.removeResidence(player, area, resadmin); + Residence.rmanager.removeResidence(player, area, resadmin); } return true; } else { - if (!deleteConfirm.containsKey(player.getName()) || !res.getName().equalsIgnoreCase(deleteConfirm.get(player.getName()))) { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + res.getName() + ChatColor.RED)); - deleteConfirm.put(player.getName(), res.getName()); + if (!Residence.deleteConfirm.containsKey(player.getName()) || !res.getName().equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteConfirm", ChatColor.YELLOW + res.getName() + ChatColor.RED)); + Residence.deleteConfirm.put(player.getName(), res.getName()); } else { - rmanager.removeResidence(player, res.getName(), resadmin); + Residence.rmanager.removeResidence(player, res.getName(), resadmin); } return true; } @@ -1801,42 +1879,44 @@ private boolean commandResRemove(String[] args, boolean resadmin, CommandSender return false; } if (player != null) { - if (!deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(deleteConfirm.get(player.getName()))) { + if (!Residence.deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { String words = ""; - if (rmanager.getByName(args[1]) != null) { - ClaimedResidence res = rmanager.getByName(args[1]); + if (Residence.rmanager.getByName(args[1]) != null) { + ClaimedResidence res = Residence.rmanager.getByName(args[1]); if (res.getParent() != null) { String[] split = args[1].split("\\."); words = split[split.length - 1]; } } if (words == "") { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); } - deleteConfirm.put(player.getName(), args[1]); + Residence.deleteConfirm.put(player.getName(), args[1]); } else { - rmanager.removeResidence(player, args[1], resadmin); + Residence.rmanager.removeResidence(player, args[1], resadmin); } } else { - if (!deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(deleteConfirm.get("Console"))) { + if (!Residence.deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(Residence.deleteConfirm.get("Console"))) { String words = ""; - if (rmanager.getByName(args[1]) != null) { - ClaimedResidence res = rmanager.getByName(args[1]); + if (Residence.rmanager.getByName(args[1]) != null) { + ClaimedResidence res = Residence.rmanager.getByName(args[1]); if (res.getParent() != null) { String[] split = args[1].split("\\."); words = split[split.length - 1]; } } if (words == "") { - server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); + this.getServer().getConsoleSender().sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + + ChatColor.RED)); } else { - server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); + this.getServer().getConsoleSender().sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + + ChatColor.RED)); } - deleteConfirm.put("Console", args[1]); + Residence.deleteConfirm.put("Console", args[1]); } else { - rmanager.removeResidence(args[1]); + Residence.rmanager.removeResidence(args[1]); } } return true; @@ -1850,12 +1930,12 @@ private boolean commandResConfirm(String[] args, boolean resadmin, CommandSender name = player.getName(); } if (args.length == 1) { - String area = deleteConfirm.get(name); + String area = Residence.deleteConfirm.get(name); if (area == null) { - sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } else { - rmanager.removeResidence(player, area, resadmin); - deleteConfirm.remove(name); + Residence.rmanager.removeResidence(player, area, resadmin); + Residence.deleteConfirm.remove(name); if (player == null) { sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); } @@ -1866,48 +1946,48 @@ private boolean commandResConfirm(String[] args, boolean resadmin, CommandSender private boolean commandResSet(String[] args, boolean resadmin, Player player, int page) { if (args.length == 3) { - String area = rmanager.getNameByLoc(player.getLocation()); + String area = Residence.rmanager.getNameByLoc(player.getLocation()); if (area != null) { - rmanager.getByName(area).getPermissions().setFlag(player, args[1], args[2], resadmin); + Residence.rmanager.getByName(area).getPermissions().setFlag(player, args[1], args[2], resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } else if (args.length == 4) { - ClaimedResidence area = rmanager.getByName(args[1]); + ClaimedResidence area = Residence.rmanager.getByName(args[1]); if (area != null) { area.getPermissions().setFlag(player, args[2], args[3], resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } else if (args.length == 1 && Residence.getConfigManager().useFlagGUI) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } SetFlag flag = new SetFlag(res.getName(), player, resadmin); - flag.recalculateInv(res); + flag.recalculateResidence(res); ResidencePlayerListener.GUI.put(player.getName(), flag); player.openInventory(flag.getInventory()); } else - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } else if (args.length == 2 && Residence.getConfigManager().useFlagGUI) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res != null) { if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } SetFlag flag = new SetFlag(res.getName(), player, resadmin); - flag.recalculateInv(res); + flag.recalculateResidence(res); ResidencePlayerListener.GUI.put(player.getName(), flag); player.openInventory(flag.getInventory()); } else - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } return false; @@ -1915,67 +1995,77 @@ private boolean commandResSet(String[] args, boolean resadmin, Player player, in private boolean commandResPset(String[] args, boolean resadmin, Player player, int page) { if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { - ClaimedResidence area = rmanager.getByLoc(player.getLocation()); + ClaimedResidence area = Residence.rmanager.getByLoc(player.getLocation()); if (area != null) { area.getPermissions().removeAllPlayerFlags(player, args[1], resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { - ClaimedResidence area = rmanager.getByName(args[1]); + ClaimedResidence area = Residence.rmanager.getByName(args[1]); if (area != null) { area.getPermissions().removeAllPlayerFlags(player, args[2], resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } else if (args.length == 4) { - ClaimedResidence area = rmanager.getByLoc(player.getLocation()); + ClaimedResidence area = Residence.rmanager.getByLoc(player.getLocation()); + + if (!Residence.isPlayerExist(player, args[1], true)) + return false; + if (area != null) { area.getPermissions().setPlayerFlag(player, args[1], args[2], args[3], resadmin, true); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } else if (args.length == 5) { - ClaimedResidence area = rmanager.getByName(args[1]); + ClaimedResidence area = Residence.rmanager.getByName(args[1]); + if (!Residence.isPlayerExist(player, args[2], true)) + return false; if (area != null) { area.getPermissions().setPlayerFlag(player, args[2], args[3], args[4], resadmin, true); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } else if (args.length == 2) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { + if (!Residence.isPlayerExist(player, args[1], true)) + return false; if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.setTargePlayer(args[1]); - flag.recalculateInv(res); + flag.recalculatePlayer(res); ResidencePlayerListener.GUI.put(player.getName(), flag); player.openInventory(flag.getInventory()); } else - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } else if (args.length == 3) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res != null) { + if (!Residence.isPlayerExist(player, args[2], true)) + return false; if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.setTargePlayer(args[2]); - flag.recalculateInv(res); + flag.recalculatePlayer(res); ResidencePlayerListener.GUI.put(player.getName(), flag); player.openInventory(flag.getInventory()); } else - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } return false; @@ -1983,19 +2073,19 @@ private boolean commandResPset(String[] args, boolean resadmin, Player player, i private boolean commandResGset(String[] args, boolean resadmin, Player player, int page) { if (args.length == 4) { - ClaimedResidence area = rmanager.getByLoc(player.getLocation()); + ClaimedResidence area = Residence.rmanager.getByLoc(player.getLocation()); if (area != null) { area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidArea")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); } return true; } else if (args.length == 5) { - ClaimedResidence area = rmanager.getByName(args[1]); + ClaimedResidence area = Residence.rmanager.getByName(args[1]); if (area != null) { area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } @@ -2008,15 +2098,15 @@ private boolean commandResLset(String[] args, boolean resadmin, Player player, i String listtype = null; boolean showinfo = false; if (args.length == 2 && args[1].equals("info")) { - res = rmanager.getByLoc(player.getLocation()); + res = Residence.rmanager.getByLoc(player.getLocation()); showinfo = true; } else if (args.length == 3 && args[2].equals("info")) { - res = rmanager.getByName(args[1]); + res = Residence.rmanager.getByName(args[1]); showinfo = true; } if (showinfo) { if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } player.sendMessage(ChatColor.RED + "Blacklist:"); @@ -2025,21 +2115,21 @@ private boolean commandResLset(String[] args, boolean resadmin, Player player, i res.getItemIgnoreList().printList(player); return true; } else if (args.length == 4) { - res = rmanager.getByName(args[1]); + res = Residence.rmanager.getByName(args[1]); listtype = args[2]; try { mat = Material.valueOf(args[3].toUpperCase()); } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidMaterial")); return true; } } else if (args.length == 3) { - res = rmanager.getByLoc(player.getLocation()); + res = Residence.rmanager.getByLoc(player.getLocation()); listtype = args[1]; try { mat = Material.valueOf(args[2].toUpperCase()); } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMaterial")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidMaterial")); return true; } } @@ -2049,11 +2139,11 @@ private boolean commandResLset(String[] args, boolean resadmin, Player player, i } else if (listtype.equalsIgnoreCase("ignorelist")) { res.getItemIgnoreList().playerListChange(player, mat, resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidList")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidList")); } return true; } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } } @@ -2065,17 +2155,17 @@ private boolean commandResBank(String[] args, boolean resadmin, CommandSender se ClaimedResidence res = null; if (args.length == 4) { - res = rmanager.getByName(args[2]); + res = Residence.rmanager.getByName(args[2]); if (res == null) { - sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } } else { if (sender instanceof Player) - res = rmanager.getByLoc(((Player) sender).getLocation()); + res = Residence.rmanager.getByLoc(((Player) sender).getLocation()); } if (res == null) { - sender.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); return true; } int amount = 0; @@ -2085,7 +2175,7 @@ private boolean commandResBank(String[] args, boolean resadmin, CommandSender se else amount = Integer.parseInt(args[3]); } catch (Exception ex) { - sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); return true; } if (args[1].equals("deposit")) { @@ -2105,53 +2195,55 @@ private boolean commandResLease(String[] args, boolean resadmin, Player player, if (args.length == 2) { res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); return true; } } else { res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } } - String until = ResidenceCommandListener.getLeaseManager().getExpireTime(res.getName()); + String until = Residence.getLeaseManager().getExpireTime(res.getName()); if (until != null) - player.sendMessage(ChatColor.GREEN + language.getPhrase("LeaseRenew", until)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("LeaseRenew", until)); return true; } if (args[1].equals("renew")) { if (args.length == 3) { - leasemanager.renewArea(args[2], player); + Residence.leasemanager.renewArea(args[2], player); } else { - leasemanager.renewArea(rmanager.getNameByLoc(player.getLocation()), player); + Residence.leasemanager.renewArea(Residence.rmanager.getNameByLoc(player.getLocation()), player); } return true; } else if (args[1].equals("cost")) { if (args.length == 3) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res == null || leasemanager.leaseExpires(args[2])) { - int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] + ChatColor.YELLOW + "|" + ChatColor.RED + if (res == null || Residence.leasemanager.leaseExpires(args[2])) { + int cost = Residence.leasemanager.getRenewCost(res); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] + ChatColor.YELLOW + "|" + + ChatColor.RED + cost + ChatColor.YELLOW)); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("LeaseNotExpire")); } return true; } else { - String area = rmanager.getNameByLoc(player.getLocation()); - ClaimedResidence res = rmanager.getByName(area); + String area = Residence.rmanager.getNameByLoc(player.getLocation()); + ClaimedResidence res = Residence.rmanager.getByName(area); if (area == null || res == null) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidArea")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); return true; } - if (leasemanager.leaseExpires(area)) { - int cost = leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW + language.getPhrase("LeaseRenewalCost", ChatColor.RED + area + ChatColor.YELLOW + "|" + ChatColor.RED + cost + if (Residence.leasemanager.leaseExpires(area)) { + int cost = Residence.leasemanager.getRenewCost(res); + player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseRenewalCost", ChatColor.RED + area + ChatColor.YELLOW + "|" + + ChatColor.RED + cost + ChatColor.YELLOW)); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("LeaseNotExpire")); } return true; } @@ -2159,15 +2251,15 @@ private boolean commandResLease(String[] args, boolean resadmin, Player player, } else if (args.length == 4) { if (args[1].equals("set")) { if (!resadmin) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } if (args[3].equals("infinite")) { - if (leasemanager.leaseExpires(args[2])) { - leasemanager.removeExpireTime(args[2]); - player.sendMessage(ChatColor.GREEN + language.getPhrase("LeaseInfinite")); + if (Residence.leasemanager.leaseExpires(args[2])) { + Residence.leasemanager.removeExpireTime(args[2]); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("LeaseInfinite")); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("LeaseNotExpire")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("LeaseNotExpire")); } return true; } else { @@ -2175,10 +2267,10 @@ private boolean commandResLease(String[] args, boolean resadmin, Player player, try { days = Integer.parseInt(args[3]); } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidDays")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidDays")); return true; } - leasemanager.setExpireTime(player, args[2], days); + Residence.leasemanager.setExpireTime(player, args[2], days); return true; } } @@ -2207,10 +2299,10 @@ private boolean commandResMarket(String[] args, boolean resadmin, Player player, if (args.length != 3) { return false; } - if (rentmanager.isRented(args[2])) { - rentmanager.removeFromForRent(player, args[2], resadmin); + if (Residence.rentmanager.isRented(args[2])) { + Residence.rentmanager.removeFromForRent(player, args[2], resadmin); } else { - rentmanager.unrent(player, args[2], resadmin); + Residence.rentmanager.unrent(player, args[2], resadmin); } return true; } @@ -2280,7 +2372,7 @@ private boolean commandResMarket(String[] args, boolean resadmin, Player player, player.sendMessage(Residence.getLanguage().getPhrase("ResidenceNotForRentOrSell")); return true; } - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() { public void run() { Residence.getSignUtil().CheckSign(res); } @@ -2290,15 +2382,15 @@ public void run() { } if (command.equals("info")) { if (args.length == 2) { - String areaname = rmanager.getNameByLoc(player.getLocation()); - tmanager.viewSaleInfo(areaname, player); - if (cmanager.enabledRentSystem() && rentmanager.isForRent(areaname)) { - rentmanager.printRentInfo(player, areaname); + String areaname = Residence.rmanager.getNameByLoc(player.getLocation()); + Residence.tmanager.viewSaleInfo(areaname, player); + if (Residence.cmanager.enabledRentSystem() && Residence.rentmanager.isForRent(areaname)) { + Residence.rentmanager.printRentInfo(player, areaname); } } else if (args.length == 3) { - tmanager.viewSaleInfo(args[2], player); - if (cmanager.enabledRentSystem() && rentmanager.isForRent(args[2])) { - rentmanager.printRentInfo(player, args[2]); + Residence.tmanager.viewSaleInfo(args[2], player); + if (Residence.cmanager.enabledRentSystem() && Residence.rentmanager.isForRent(args[2])) { + Residence.rentmanager.printRentInfo(player, args[2]); } } else { return false; @@ -2309,14 +2401,14 @@ public void run() { if (args.length != 3) { return false; } - tmanager.buyPlot(args[2], player, resadmin); + Residence.tmanager.buyPlot(args[2], player, resadmin); return true; } if (command.equals("unsell")) { if (args.length != 3) { return false; } - tmanager.removeFromSale(player, args[2], resadmin); + Residence.tmanager.removeFromSale(player, args[2], resadmin); return true; } if (command.equals("sell")) { @@ -2327,10 +2419,10 @@ public void run() { try { amount = Integer.parseInt(args[3]); } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidAmount")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); return true; } - tmanager.putForSale(args[2], player, amount, resadmin); + Residence.tmanager.putForSale(args[2], player, amount, resadmin); return true; } return false; @@ -2345,11 +2437,11 @@ private boolean commandResMarketRent(String[] args, boolean resadmin, Player pla if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { repeat = true; } else if (!args[3].equalsIgnoreCase("f") && !args[3].equalsIgnoreCase("false")) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidBoolean")); return true; } } - rentmanager.rent(player, args[2], repeat, resadmin); + Residence.rentmanager.rent(player, args[2], repeat, resadmin); return true; } @@ -2357,8 +2449,8 @@ private boolean commandResMarketRentable(String[] args, boolean resadmin, Player if (args.length < 5 || args.length > 6) { return false; } - if (!cmanager.enabledRentSystem()) { - player.sendMessage(ChatColor.RED + language.getPhrase("RentDisabled")); + if (!Residence.cmanager.enabledRentSystem()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentDisabled")); return true; } int days; @@ -2366,13 +2458,13 @@ private boolean commandResMarketRentable(String[] args, boolean resadmin, Player try { cost = Integer.parseInt(args[3]); } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidCost")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidCost")); return true; } try { days = Integer.parseInt(args[4]); } catch (Exception ex) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidDays")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidDays")); return true; } boolean repeat = false; @@ -2380,17 +2472,17 @@ private boolean commandResMarketRentable(String[] args, boolean resadmin, Player if (args[5].equalsIgnoreCase("t") || args[5].equalsIgnoreCase("true")) { repeat = true; } else if (!args[5].equalsIgnoreCase("f") && !args[5].equalsIgnoreCase("false")) { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidBoolean")); return true; } } - rentmanager.setForRent(player, args[2], cost, days, repeat, resadmin); + Residence.rentmanager.setForRent(player, args[2], cost, days, repeat, resadmin); return true; } private boolean commandResMarketAutorenew(String[] args, boolean resadmin, Player player, int page) { - if (!cmanager.enableEconomy()) { - player.sendMessage(ChatColor.RED + language.getPhrase("MarketDisabled")); + if (!Residence.cmanager.enableEconomy()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); return true; } if (args.length != 4) { @@ -2402,28 +2494,28 @@ private boolean commandResMarketAutorenew(String[] args, boolean resadmin, Playe } else if (args[3].equalsIgnoreCase("false") || args[3].equalsIgnoreCase("f")) { value = false; } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidBoolean")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidBoolean")); return true; } - if (rentmanager.isRented(args[2]) && rentmanager.getRentingPlayer(args[2]).equalsIgnoreCase(player.getName())) { - rentmanager.setRentedRepeatable(player, args[2], value, resadmin); - } else if (rentmanager.isForRent(args[2])) { - rentmanager.setRentRepeatable(player, args[2], value, resadmin); + if (Residence.rentmanager.isRented(args[2]) && Residence.rentmanager.getRentingPlayer(args[2]).equalsIgnoreCase(player.getName())) { + Residence.rentmanager.setRentedRepeatable(player, args[2], value, resadmin); + } else if (Residence.rentmanager.isForRent(args[2])) { + Residence.rentmanager.setRentRepeatable(player, args[2], value, resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("RentReleaseInvalid", ChatColor.YELLOW + args[2] + ChatColor.RED)); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentReleaseInvalid", ChatColor.YELLOW + args[2] + ChatColor.RED)); } return true; } private boolean commandResMarketList(String[] args, boolean resadmin, Player player, int page) { - if (!cmanager.enableEconomy()) { - player.sendMessage(ChatColor.RED + language.getPhrase("MarketDisabled")); + if (!Residence.cmanager.enableEconomy()) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); return true; } - player.sendMessage(ChatColor.BLUE + "---" + language.getPhrase("MarketList") + "---"); - tmanager.printForSaleResidences(player); - if (cmanager.enabledRentSystem()) { - rentmanager.printRentableResidences(player); + player.sendMessage(ChatColor.BLUE + "---" + Residence.getLanguage().getPhrase("MarketList") + "---"); + Residence.tmanager.printForSaleResidences(player); + if (Residence.cmanager.enabledRentSystem()) { + Residence.rentmanager.printRentableResidences(player); } return true; } @@ -2437,40 +2529,40 @@ private boolean commandResMessage(String[] args, boolean resadmin, Player player } if (args[1].equals("enter")) { enter = true; - res = rmanager.getByLoc(player.getLocation()); + res = Residence.rmanager.getByLoc(player.getLocation()); start = 2; } else if (args[1].equals("leave")) { - res = rmanager.getByLoc(player.getLocation()); + res = Residence.rmanager.getByLoc(player.getLocation()); start = 2; } else if (args[1].equals("remove")) { if (args.length > 2 && args[2].equals("enter")) { - res = rmanager.getByLoc(player.getLocation()); + res = Residence.rmanager.getByLoc(player.getLocation()); if (res != null) { res.setEnterLeaveMessage(player, null, true, resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } else if (args.length > 2 && args[2].equals("leave")) { - res = rmanager.getByLoc(player.getLocation()); + res = Residence.rmanager.getByLoc(player.getLocation()); if (res != null) { res.setEnterLeaveMessage(player, null, false, resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidMessageType")); return true; } else if (args.length > 2 && args[2].equals("enter")) { enter = true; - res = rmanager.getByName(args[1]); + res = Residence.rmanager.getByName(args[1]); start = 3; } else if (args.length > 2 && args[2].equals("leave")) { - res = rmanager.getByName(args[1]); + res = Residence.rmanager.getByName(args[1]); start = 3; } else if (args.length > 2 && args[2].equals("remove")) { - res = rmanager.getByName(args[1]); + res = Residence.rmanager.getByName(args[1]); if (args.length != 4) { return false; } @@ -2485,10 +2577,10 @@ private boolean commandResMessage(String[] args, boolean resadmin, Player player } return true; } - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidMessageType")); return true; } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidMessageType")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidMessageType")); return true; } if (start == 0) { @@ -2501,7 +2593,7 @@ private boolean commandResMessage(String[] args, boolean resadmin, Player player if (res != null) { res.setEnterLeaveMessage(player, message, enter, resadmin); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } @@ -2510,14 +2602,14 @@ private boolean commandResSublist(String[] args, boolean resadmin, Player player if (args.length == 1 || args.length == 2 || args.length == 3) { ClaimedResidence res; if (args.length == 1) { - res = rmanager.getByLoc(player.getLocation()); + res = Residence.rmanager.getByLoc(player.getLocation()); } else { - res = rmanager.getByName(args[1]); + res = Residence.rmanager.getByName(args[1]); } if (res != null) { res.printSubzoneList(player, page); } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } @@ -2527,34 +2619,34 @@ private boolean commandResSublist(String[] args, boolean resadmin, Player player private boolean commandResCompass(String[] args, boolean resadmin, Player player, int page) { if (args.length != 2) { player.setCompassTarget(player.getWorld().getSpawnLocation()); - player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetReset")); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("CompassTargetReset")); return true; } if (!player.hasPermission("residence.compass")) { - player.sendMessage(ChatColor.RED + language.getPhrase("NoPermission")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } - if (rmanager.getByName(args[1]) != null) { - if (rmanager.getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { - Location low = rmanager.getByName(args[1]).getArea("main").getLowLoc(); - Location high = rmanager.getByName(args[1]).getArea("main").getHighLoc(); + if (Residence.rmanager.getByName(args[1]) != null) { + if (Residence.rmanager.getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { + Location low = Residence.rmanager.getByName(args[1]).getArea("main").getLowLoc(); + Location high = Residence.rmanager.getByName(args[1]).getArea("main").getHighLoc(); Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high .getBlockZ()) / 2); player.setCompassTarget(mid); - player.sendMessage(ChatColor.GREEN + language.getPhrase("CompassTargetSet", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("CompassTargetSet", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); } } else { - player.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence")); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } private boolean commandResGui(String[] args, boolean resadmin, Player player, int page) { - if (slistener != null) { + if (Residence.slistener != null) { if (args.length == 1) { - ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, rmanager.getNameByLoc(player.getLocation()), resadmin); + ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, Residence.rmanager.getNameByLoc(player.getLocation()), resadmin); } else if (args.length == 2) { ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, args[1], resadmin); } @@ -2565,39 +2657,39 @@ private boolean commandResGui(String[] args, boolean resadmin, Player player, in private boolean commandResList(String[] args, boolean resadmin, Player player, int page) { if (args.length == 2) { if (args[1].equals("list")) { - pmanager.printLists(player); + Residence.pmanager.printLists(player); return true; } } else if (args.length == 3) { if (args[1].equals("view")) { - pmanager.printList(player, args[2]); + Residence.pmanager.printList(player, args[2]); return true; } else if (args[1].equals("remove")) { - pmanager.removeList(player, args[2]); + Residence.pmanager.removeList(player, args[2]); return true; } else if (args[1].equals("add")) { - pmanager.makeList(player, args[2]); + Residence.pmanager.makeList(player, args[2]); return true; } } else if (args.length == 4) { if (args[1].equals("apply")) { - pmanager.applyListToResidence(player, args[2], args[3], resadmin); + Residence.pmanager.applyListToResidence(player, args[2], args[3], resadmin); return true; } } else if (args.length == 5) { if (args[1].equals("set")) { - pmanager.getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); - player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); + Residence.pmanager.getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); return true; } } else if (args.length == 6) { if (args[1].equals("gset")) { - pmanager.getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); + Residence.pmanager.getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); return true; } else if (args[1].equals("pset")) { - pmanager.getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - player.sendMessage(ChatColor.GREEN + language.getPhrase("FlagSet")); + Residence.pmanager.getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); return true; } } diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index 0fce062f7..c384f25f3 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.chat; import com.bekvon.bukkit.residence.Residence; diff --git a/src/com/bekvon/bukkit/residence/chat/ChatManager.java b/src/com/bekvon/bukkit/residence/chat/ChatManager.java index ee3498d44..14a13e353 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatManager.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatManager.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.chat; import com.bekvon.bukkit.residence.Residence; diff --git a/src/com/bekvon/bukkit/residence/containers/GuiItems.java b/src/com/bekvon/bukkit/residence/containers/GuiItems.java new file mode 100644 index 000000000..a4eaa1850 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/GuiItems.java @@ -0,0 +1,95 @@ +package com.bekvon.bukkit.residence.containers; + +public enum GuiItems { + admin(7, 0), + animalkilling(365, 0), + animals(383, 90), + bank(130, 0), + bed(355, 0), + brew(379, 0), + bucket(325, 0), + bucketempty(325, 0), + bucketfill(325, 0), + build(45, 0), + burn(50, 0), + button(143, 0), + cake(354, 0), + canimals(383, 91), + chat(386, 0), + cmonsters(383, 50), + command(137, 0), + container(342, 0), + craft(58, 50), + creeper(383, 50), + dragongrief(3, 0), + day(37, 0), + damage(283, 0), + destroy(121, 0), + diode(356, 0), + door(324, 0), + enchant(116, 0), + explode(407, 0), + feed(364, 0), + fireball(385, 0), + firespread(377, 0), + flow(111, 0), + hidden(102, 0), + healing(373, 0), + ignite(259, 0), + keepinv(298, 0), + keepexp(322, 0), + lavaflow(327, 0), + leash(420, 0), + lever(69, 0), + mobexpdrop(362, 0), + mobitemdrop(351, 3), + mobkilling(367, 0), + monsters(52, 0), + move(301, 0), + nanimals(383, 92), + nmonsters(383, 51), + night(35, 15), + nofly(171, 1), + nomobs(166, 0), + note(25, 0), + nodurability(145, 0), + overridepvp(267, 0), + pressure(147, 0), + piston(33, 0), + place(169, 0), + pvp(268, 0), + redstone(331, 0), + respawn(175, 0), + shop(389, 0), + snowtrail(78, 0), + sanimals(383, 101), + shear(359, 0), + smonsters(383, 54), + subzone(160, 7), + table(58, 0), + tnt(46, 0), + tp(120, 0), + trusted(170, 0), + trade(388, 0), + trample(3, 0), + use(70, 0), + vehicledestroy(328, 0), + witherdamage(49, 0), + waterflow(326, 0); + + private int id; + private int data; + + private GuiItems(int id, int data) { + this.id = id; + this.data = data; + } + + public int getId() { + return id; + } + + public int getData() { + return data; + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java index 075fea5b3..fe7cb59c7 100644 --- a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java @@ -1,7 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.bekvon.bukkit.residence.economy; import com.bekvon.bukkit.residence.Residence; diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index 462b823e4..75ab45d1b 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.economy; import com.bekvon.bukkit.residence.Residence; diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java index f1df2910e..1c0cdf90f 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.economy; import com.iCo6.iConomy; diff --git a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java index 111af88a1..2ba23d250 100644 --- a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.economy; import fr.crafter.tickleman.realeconomy.RealEconomy; diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index f9a12499a..a9c867851 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.economy; import org.bukkit.ChatColor; diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 1d0ff8ddc..9abf2ac81 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.economy; import org.bukkit.ChatColor; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index decb10198..bd37a11da 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.economy.rent; import org.bukkit.ChatColor; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java b/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java index 1951590d6..7a7ce83be 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.economy.rent; import java.util.HashMap; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentedLand.java b/src/com/bekvon/bukkit/residence/economy/rent/RentedLand.java index 5bc0c189c..11ece27ee 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentedLand.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentedLand.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.economy.rent; import java.util.HashMap; diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index ba1097340..a817b5fcf 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -13,10 +13,15 @@ public class FlagUtil { - private static FlagData flagData = new FlagData(); + private FlagData flagData = new FlagData(); + private Residence plugin; - public static void load() { - File f = new File(Residence.instance.getDataFolder(), "flags.yml"); + public FlagUtil(Residence plugin) { + this.plugin = plugin; + } + + public void load() { + File f = new File(plugin.getDataFolder(), "flags.yml"); YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); conf.options().copyDefaults(true); @@ -40,11 +45,11 @@ public static void load() { if (Mat == null) Mat = Material.STONE; ItemStack item = new ItemStack(Mat, 1, (short) data); - FlagUtil.flagData.addFlagButton(oneFlag.toLowerCase(), item); + flagData.addFlagButton(oneFlag.toLowerCase(), item); } } - public static FlagData getFlagData() { + public FlagData getFlagData() { return flagData; } } diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 987297d4b..561f0111a 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -19,7 +19,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.utils.Sorting; @@ -116,13 +115,16 @@ else if (click.isRightClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTO } public void recalculateInv() { - recalculateInv(Residence.getResidenceManager().getByName(residence)); + if (targetPlayer == null) + recalculateResidence(Residence.getResidenceManager().getByName(residence)); + else + recalculatePlayer(Residence.getResidenceManager().getByName(residence)); } private void fillFlagDescriptions() { - Set list = NewLanguage.getKeyList("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands"); + Set list = Residence.getLM().getKeyList("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands"); for (String onelist : list) { - String onelisttemp = NewLanguage.getMessage("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + onelist + ".Description"); + String onelisttemp = Residence.getLM().getMessage("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + onelist + ".Description"); List lore = new ArrayList(); int i = 0; String sentence = ""; @@ -140,14 +142,143 @@ private void fillFlagDescriptions() { } } - public void recalculateInv(ClaimedResidence res) { + public void recalculateResidence(ClaimedResidence res) { + List flags = res.getPermissions().getPosibleFlags(true, this.admin); + Map resFlags = new HashMap(); + LinkedHashMap TempPermMap = new LinkedHashMap(); Map globalFlags = Residence.getPermissionManager().getAllFlags().getFlags(); + for (Entry one : res.getPermissions().getFlags().entrySet()) { + if (flags.contains(one.getKey())) + resFlags.put(one.getKey(), one.getValue()); + } + + for (Entry one : globalFlags.entrySet()) { + if (!flags.contains(one.getKey())) + continue; + + if (resFlags.containsKey(one.getKey())) + TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? 1 : 0); + else + TempPermMap.put(one.getKey(), 2); + } + + String title = ""; + if (targetPlayer == null) + title = Residence.getLM().getMessage("Language.Gui.Set.Title", res.getName()); + else + title = Residence.getLM().getMessage("Language.Gui.Pset.Title", targetPlayer + "%" + res.getName()); + + if (title.length() > 32) { + title = title.substring(0, Math.min(title.length(), 32)); + } + + Inventory GuiInv = Bukkit.createInventory(null, 54, title); + int i = 0; + + TempPermMap = (LinkedHashMap) Sorting.sortByKeyASC(TempPermMap); + + FlagData flagData = Residence.getFlagUtilManager().getFlagData(); + + pageCount = (int) Math.ceil((double) TempPermMap.size() / (double) 45); + + int start = page * 45 - 45; + int end = page * 45; + + int count = -1; + permMap.clear(); + for (Entry one : TempPermMap.entrySet()) { + count++; + if (count >= end) + break; + if (count < start) + continue; + permMap.put(one.getKey(), one.getValue()); + } + + for (Entry one : permMap.entrySet()) { + + ItemStack MiscInfo = Residence.getConfigManager().getGuiRemove(); + + switch (one.getValue()) { + case 0: + MiscInfo = Residence.getConfigManager().getGuiFalse(); + break; + case 1: + MiscInfo = Residence.getConfigManager().getGuiTrue(); + break; + case 2: + break; + } + + if (flagData.contains(one.getKey())) + MiscInfo = flagData.getItem(one.getKey()); + + if (one.getValue() == 1) { + ItemMeta im = MiscInfo.getItemMeta(); + im.addEnchant(Enchantment.LUCK, 1, true); + MiscInfo.setItemMeta(im); + } else + MiscInfo.removeEnchantment(Enchantment.LUCK); + + ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); + MiscInfoMeta.setDisplayName(ChatColor.GREEN + one.getKey()); + + List lore = new ArrayList(); + + switch (one.getValue()) { + case 0: + lore.add(ChatColor.GOLD + "Flag state: " + ChatColor.DARK_RED + "False"); + break; + case 1: + lore.add(ChatColor.GOLD + "Flag state: " + ChatColor.GREEN + "True"); + break; + case 2: + lore.add(ChatColor.GOLD + "Flag state: " + ChatColor.RED + "Removed"); + break; + } + + if (description.containsKey(one.getKey())) + lore.addAll(description.get(one.getKey())); + + lore.addAll(Residence.getLM().getMessageList("Language.Gui.Actions")); + + MiscInfoMeta.setLore(lore); + + MiscInfo.setItemMeta(MiscInfoMeta); + GuiInv.setItem(i, MiscInfo); + i++; + if (i > 53) + break; + } + ItemStack Item = new ItemStack(Material.ARROW); + + ItemMeta meta = Item.getItemMeta(); + if (page > 1) { + meta.setDisplayName(Residence.getLM().getMessage("Language.PrevInfoPage")); + Item.setItemMeta(meta); + GuiInv.setItem(45, Item); + } + if (page < pageCount) { + meta.setDisplayName(Residence.getLM().getMessage("Language.NextInfoPage")); + Item.setItemMeta(meta); + GuiInv.setItem(53, Item); + } + + this.inventory = GuiInv; + } + + public void recalculatePlayer(ClaimedResidence res) { + + Map globalFlags = Residence.getPermissionManager().getAllFlags().getFlags(); + + List flags = res.getPermissions().getPosibleFlags(false, this.admin); Map resFlags = new HashMap(); for (Entry one : res.getPermissions().getFlags().entrySet()) { - resFlags.put(one.getKey(), one.getValue()); + if (flags.contains(one.getKey())) + resFlags.put(one.getKey(), one.getValue()); } if (targetPlayer != null) { @@ -166,9 +297,13 @@ public void recalculateInv(ClaimedResidence res) { resFlags.put(one.getKey(), one.getValue()); } } + LinkedHashMap TempPermMap = new LinkedHashMap(); for (Entry one : globalFlags.entrySet()) { + if (!flags.contains(one.getKey())) + continue; + if (resFlags.containsKey(one.getKey())) TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? 1 : 0); else @@ -177,9 +312,9 @@ public void recalculateInv(ClaimedResidence res) { String title = ""; if (targetPlayer == null) - title = NewLanguage.getMessage("Language.Gui.Set.Title").replace("%1%", res.getName()); + title = Residence.getLM().getMessage("Language.Gui.Set.Title", res.getName()); else - title = NewLanguage.getMessage("Language.Gui.Pset.Title").replace("%1%", targetPlayer).replace("%2%", res.getName()); + title = Residence.getLM().getMessage("Language.Gui.Pset.Title", targetPlayer + "%" + res.getName()); if (title.length() > 32) { title = title.substring(0, Math.min(title.length(), 32)); @@ -190,7 +325,7 @@ public void recalculateInv(ClaimedResidence res) { TempPermMap = (LinkedHashMap) Sorting.sortByKeyASC(TempPermMap); - FlagData flagData = FlagUtil.getFlagData(); + FlagData flagData = Residence.getFlagUtilManager().getFlagData(); pageCount = (int) Math.ceil((double) TempPermMap.size() / (double) 45); @@ -253,7 +388,7 @@ public void recalculateInv(ClaimedResidence res) { if (description.containsKey(one.getKey())) lore.addAll(description.get(one.getKey())); - lore.addAll(NewLanguage.getMessageList("Language.Gui.Actions")); + lore.addAll(Residence.getLM().getMessageList("Language.Gui.Actions")); MiscInfoMeta.setLore(lore); @@ -267,12 +402,12 @@ public void recalculateInv(ClaimedResidence res) { ItemMeta meta = Item.getItemMeta(); if (page > 1) { - meta.setDisplayName(NewLanguage.getMessage("Language.PrevInfoPage")); + meta.setDisplayName(Residence.getLM().getMessage("Language.PrevInfoPage")); Item.setItemMeta(meta); GuiInv.setItem(45, Item); } if (page < pageCount) { - meta.setDisplayName(NewLanguage.getMessage("Language.NextInfoPage")); + meta.setDisplayName(Residence.getLM().getMessage("Language.NextInfoPage")); Item.setItemMeta(meta); GuiInv.setItem(53, Item); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index a352a79a7..95e5fedbf 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -27,8 +27,6 @@ import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPlaceEvent; -import com.bekvon.bukkit.residence.NewLanguage; -import com.bekvon.bukkit.residence.PlayerManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -48,10 +46,8 @@ */ public class ResidenceBlockListener implements Listener { - private static List MessageInformed = new ArrayList(); - private static List ResCreated = new ArrayList(); - - public static final String BlockMetadata = "ResFallingBlock"; + private List MessageInformed = new ArrayList(); + private List ResCreated = new ArrayList(); @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { @@ -159,14 +155,14 @@ public void onChestPlace(BlockPlaceEvent event) { if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) return; - ArrayList list = PlayerManager.getResidenceList(player.getName()); + ArrayList list = Residence.getPlayerManager().getResidenceList(player.getName()); if (list.size() != 0) return; if (MessageInformed.contains(player.getName())) return; - player.sendMessage(NewLanguage.getMessage("Language.NewPlayerInfo")); + player.sendMessage(Residence.getLM().getMessage("Language.NewPlayerInfo")); MessageInformed.add(player.getName()); } @@ -184,7 +180,7 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) return; - ArrayList list = PlayerManager.getResidenceList(player.getName()); + ArrayList list = Residence.getPlayerManager().getResidenceList(player.getName()); if (list.size() != 0) return; @@ -194,9 +190,9 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { Location loc = block.getLocation(); Residence.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), loc.getBlockX() - Residence.getConfigManager().getNewPlayerRangeX(), loc - .getBlockY() - Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() - Residence.getConfigManager().getNewPlayerRangeZ())); + .getBlockY() - Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() - Residence.getConfigManager().getNewPlayerRangeZ()), true); Residence.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), loc.getBlockX() + Residence.getConfigManager().getNewPlayerRangeX(), loc - .getBlockY() + Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() + Residence.getConfigManager().getNewPlayerRangeZ())); + .getBlockY() + Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() + Residence.getConfigManager().getNewPlayerRangeZ()), true); boolean created = Residence.getResidenceManager().addResidence(player, player.getName(), Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), Residence.getConfigManager().isNewPlayerFree()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 625fe9a30..a2c2194d6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -363,6 +363,7 @@ public void onHangingPlace(HangingPlaceEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreak(HangingBreakEvent event) { + if (!(event instanceof HangingBreakByEntityEvent)) return; @@ -381,7 +382,6 @@ public void onHangingBreak(HangingBreakEvent event) { event.setCancelled(true); player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "build")); } - } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 63e6e4d50..04491d47a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -51,8 +51,6 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.NewLanguage; -import com.bekvon.bukkit.residence.PlayerManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.chat.ChatChannel; @@ -80,7 +78,9 @@ public class ResidencePlayerListener implements Listener { public static Map GUI = new HashMap(); - public ResidencePlayerListener() { + private Residence plugin; + + public ResidencePlayerListener(Residence plugin) { currentRes = new HashMap(); lastUpdate = new HashMap(); lastOutsideLoc = new HashMap(); @@ -90,6 +90,7 @@ public ResidencePlayerListener() { for (Player player : Bukkit.getOnlinePlayers()) { lastUpdate.put(player.getName(), System.currentTimeMillis()); } + this.plugin = plugin; } public void reload() { @@ -298,7 +299,7 @@ public void onSignCreate(SignChangeEvent event) { Residence.getSignUtil().getSigns().addSign(signInfo); Residence.getSignUtil().saveSigns(); } - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { public void run() { Residence.getSignUtil().CheckSign(residence); } @@ -363,10 +364,10 @@ public void onPlayerJoin(PlayerJoinEvent event) { handleNewLocation(player, player.getLocation(), false); final Player p = player; - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { - PlayerManager.playerJoin(p); + Residence.getPlayerManager().playerJoin(p); return; } }); @@ -539,13 +540,13 @@ public void onPlayerInteract(PlayerInteractEvent event) { .canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { if (event.getAction() == Action.LEFT_CLICK_BLOCK) { Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc1(player, loc); + Residence.getSelectionManager().placeLoc1(player, loc, true); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); event.setCancelled(true); } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc2(player, loc); + Residence.getSelectionManager().placeLoc2(player, loc, true); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); event.setCancelled(true); @@ -718,7 +719,9 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { if (Residence.isResAdminOn(player)) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); + Location loc = event.getBlockClicked().getLocation(); + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); if (res != null) { if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { if (Residence.getRentManager().isRented(res.getName())) { @@ -729,8 +732,8 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { } Material mat = event.getBucket(); - if (!res.getPermissions().playerHas(player.getName(), "bucket", true) && Residence.getConfigManager().getNoPlaceWorlds().contains(event.getBlockClicked() - .getLocation().getWorld().getName())) { + if ((!res.getPermissions().playerHas(player.getName(), "bucket", true) && !res.getPermissions().playerHas(player.getName(), "bucketempty", true)) + && Residence.getConfigManager().getNoPlaceWorlds().contains(loc.getWorld().getName())) { if (mat == Material.LAVA_BUCKET) { event.setCancelled(true); return; @@ -743,8 +746,9 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { } String pname = player.getName(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); - if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true))) { + FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); + if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)) && + !perms.playerHas(pname, player.getWorld().getName(), "bucketempty", perms.playerHas(pname, player.getWorld().getName(), "build", true))) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); event.setCancelled(true); return; @@ -752,8 +756,8 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { Material mat = event.getBucket(); int level = Residence.getConfigManager().getPlaceLevel(); - if (res == null && Residence.getConfigManager().isNoLavaPlace() && event.getBlockClicked().getLocation().getBlockY() >= level - 1 && Residence.getConfigManager() - .getNoPlaceWorlds().contains(event.getBlockClicked().getLocation().getWorld().getName())) { + if (res == null && Residence.getConfigManager().isNoLavaPlace() && loc.getBlockY() >= level - 1 && Residence.getConfigManager() + .getNoPlaceWorlds().contains(loc.getWorld().getName())) { if (mat == Material.LAVA_BUCKET) { if (!Residence.getLanguage().getPhrase("CantPlaceLava").equalsIgnoreCase("")) player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("CantPlaceLava", String.valueOf(level))); @@ -762,8 +766,8 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { } } - if (res == null && Residence.getConfigManager().isNoWaterPlace() && event.getBlockClicked().getLocation().getBlockY() >= level - 1 && Residence.getConfigManager() - .getNoPlaceWorlds().contains(event.getBlockClicked().getLocation().getWorld().getName())) + if (res == null && Residence.getConfigManager().isNoWaterPlace() && loc.getBlockY() >= level - 1 && Residence.getConfigManager() + .getNoPlaceWorlds().contains(loc.getWorld().getName())) if (mat == Material.WATER_BUCKET) { if (!Residence.getLanguage().getPhrase("CantPlaceWater").equalsIgnoreCase("")) player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("CantPlaceWater", String.valueOf(level))); @@ -792,7 +796,8 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) { String pname = player.getName(); FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)); - if (!hasbucket) { + boolean hasbucketfill = perms.playerHas(pname, player.getWorld().getName(), "bucketfill", perms.playerHas(pname, player.getWorld().getName(), "build", true)); + if (!hasbucket && !hasbucketfill) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); event.setCancelled(true); } @@ -855,7 +860,7 @@ public void onPlayerDeath(final PlayerDeathEvent event) { event.setKeepLevel(true); if (res.getPermissions().has("respawn", false)) - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { public void run() { try { event.getEntity().spigot().respawn(); @@ -893,9 +898,9 @@ public void onPlayerMove(PlayerMoveEvent event) { this.lastUpdate.put(name, now); handleNewLocation(player, locto, true); - if (!ResidenceCommandListener.teleportDelayMap.isEmpty() && Residence.getConfigManager().getTeleportDelay() > 0 && ResidenceCommandListener.teleportDelayMap + if (!ResidenceCommandListener.getTeleportMap().isEmpty() && Residence.getConfigManager().getTeleportDelay() > 0 && ResidenceCommandListener.getTeleportDelayMap() .contains(player.getName())) { - ResidenceCommandListener.teleportDelayMap.remove(player.getName()); + ResidenceCommandListener.getTeleportMap().remove(player.getName()); player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportCanceled")); } } @@ -930,7 +935,7 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { } if (!AutoSelection.getList().isEmpty()) { - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { AutoSelection.UpdateSelection(player); @@ -1190,7 +1195,7 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { public void tooglePlayerResidenceChat(Player player, String residence) { String pname = player.getName(); playerToggleChat.add(pname); - player.sendMessage(ChatColor.YELLOW + NewLanguage.getMessage("Language.Chat.ChatChannelChange").replace("%1", ChatColor.RED + residence + ChatColor.YELLOW + player.sendMessage(ChatColor.YELLOW + Residence.getLM().getMessage("Language.Chat.ChatChannelChange", ChatColor.RED + residence + ChatColor.YELLOW + "!")); } @@ -1198,13 +1203,13 @@ public void removePlayerResidenceChat(String pname) { playerToggleChat.remove(pname); Player player = Bukkit.getPlayer(pname); if (player != null) - player.sendMessage(ChatColor.YELLOW + NewLanguage.getMessage("Language.Chat.ChatChannelLeave")); + player.sendMessage(ChatColor.YELLOW + Residence.getLM().getMessage("Language.Chat.ChatChannelLeave")); } public void removePlayerResidenceChat(Player player) { String pname = player.getName(); playerToggleChat.remove(pname); - player.sendMessage(ChatColor.YELLOW + NewLanguage.getMessage("Language.Chat.ChatChannelLeave")); + player.sendMessage(ChatColor.YELLOW + Residence.getLM().getMessage("Language.Chat.ChatChannelLeave")); } public String getCurrentResidenceName(String player) { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index db8680a5d..653f96c9a 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -3,7 +3,6 @@ import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; -import com.bekvon.bukkit.residence.PlayerManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; @@ -197,7 +196,7 @@ public int getMaxZones() { } public int getMaxZones(String player) { - int max = PlayerManager.getMaxResidences(player); + int max = Residence.getPlayerManager().getMaxResidences(player); if (max != -1) return max; return resmax; @@ -216,7 +215,7 @@ public boolean hasTpAccess() { } public int getMaxSubzoneDepth(String player) { - int max = PlayerManager.getMaxSubzones(player); + int max = Residence.getPlayerManager().getMaxSubzones(player); if (max != -1) return max; return subzonedepth; @@ -255,7 +254,7 @@ public boolean canSellLand() { } public int getMaxRents(String player) { - int max = PlayerManager.getMaxRents(player); + int max = Residence.getPlayerManager().getMaxRents(player); if (max != -1) return max; return maxRents; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 50d6d6f72..f8b69e781 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -5,7 +5,6 @@ package com.bekvon.bukkit.residence.permissions; -import com.bekvon.bukkit.residence.PlayerManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; @@ -54,7 +53,7 @@ public Map getGroups() { } public PermissionGroup getGroup(Player player) { - PermissionGroup group = PlayerManager.getGroup(player.getName()); + PermissionGroup group = Residence.getPlayerManager().getGroup(player.getName()); if (group != null) { return group; } @@ -62,7 +61,7 @@ public PermissionGroup getGroup(Player player) { } public PermissionGroup getGroup(String player, String world) { - PermissionGroup group = PlayerManager.getGroup(player); + PermissionGroup group = Residence.getPlayerManager().getGroup(player); if (group != null) { return group; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 80c813949..b36ab5355 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -16,8 +16,6 @@ import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.Debug; - import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -32,11 +30,6 @@ import org.bukkit.block.Block; import org.bukkit.entity.Player; -/** - * - * @author Administrator - * - */ public class ClaimedResidence { protected ClaimedResidence parent; @@ -53,13 +46,15 @@ public class ClaimedResidence { protected ChatColor ChannelColor = ChatColor.WHITE; protected ResidenceItemList ignorelist; protected ResidenceItemList blacklist; + private Residence plugin; - private ClaimedResidence() { + private ClaimedResidence(Residence plugin) { subzones = new HashMap<>(); areas = new HashMap<>(); bank = new ResidenceBank(this); blacklist = new ResidenceItemList(this, ListType.BLACKLIST); ignorelist = new ResidenceItemList(this, ListType.IGNORELIST); + this.plugin = plugin; } public boolean isOwner(String name) { @@ -74,17 +69,17 @@ public boolean isSubzone() { return parent == null ? false : true; } - public ClaimedResidence(String creationWorld) { - this(Residence.getServerLandname(), creationWorld); + public ClaimedResidence(String creationWorld, Residence plugin) { + this(Residence.getServerLandname(), creationWorld, plugin); } - public ClaimedResidence(String creator, String creationWorld) { - this(); + public ClaimedResidence(String creator, String creationWorld, Residence plugin) { + this(plugin); perms = new ResidencePermissions(this, creator, creationWorld); } - public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence) { - this(creator, creationWorld); + public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence, Residence plugin) { + this(creator, creationWorld, plugin); parent = parentResidence; } @@ -371,33 +366,27 @@ public boolean addSubzone(Player player, Location loc1, Location loc2, String na } public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { - Debug.D("subzone creation"); if (!Residence.validName(name)) { if (player != null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); } return false; } - Debug.D("5"); if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { if (player != null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneSelectInside")); } return false; } - Debug.D("4"); if (subzones.containsKey(name)) { if (player != null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + name)); } return false; } - - Debug.D("1"); if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { if (!this.perms.playerHas(player.getName(), "subzone", this.perms.playerHas(player.getName(), "admin", false))) { - Debug.D("no perm"); player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return false; } @@ -408,7 +397,6 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l return false; } } - Debug.D("2"); CuboidArea newArea = new CuboidArea(loc1, loc2); Set> set = subzones.entrySet(); for (Entry resEntry : set) { @@ -428,10 +416,10 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l } ClaimedResidence newres; if (player != null) { - newres = new ClaimedResidence(owner, perms.getWorld(), this); + newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); newres.addArea(player, newArea, name, resadmin); } else { - newres = new ClaimedResidence(owner, perms.getWorld(), this); + newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); newres.addArea(newArea, name); } if (newres.getAreaCount() != 0) { @@ -718,11 +706,6 @@ public Location getMiddleFreeLoc(Location insideLoc) { Block block = newLoc.getBlock(); Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); - - Debug.D(newLoc.getBlockX() + " " + newLoc.getBlockZ() + " " + newLoc.getBlockY() + " " + Residence.getNms().isEmptyBlock(block) + " " + Residence.getNms() - .isEmptyBlock(block2) + " " - + Residence.getNms().isEmptyBlock(block3)); - if (Residence.getNms().isEmptyBlock(block) && Residence.getNms().isEmptyBlock(block2) && !Residence.getNms().isEmptyBlock(block3)) { found = true; break; @@ -905,11 +888,11 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } } - if (!ResidenceCommandListener.teleportMap.containsKey(targetPlayer.getName()) && !isAdmin) { + if (!ResidenceCommandListener.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { int distance = isSafeTp(reqPlayer); if (distance > 6) { reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportConfirm", String.valueOf(distance))); - ResidenceCommandListener.teleportMap.put(reqPlayer.getName(), this); + ResidenceCommandListener.getTeleportMap().put(reqPlayer.getName(), this); return; } } @@ -917,7 +900,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin) { reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("TeleportStarted", this.getName() + "|" + Residence.getConfigManager() .getTeleportDelay())); - ResidenceCommandListener.teleportDelayMap.add(reqPlayer.getName()); + ResidenceCommandListener.getTeleportDelayMap().add(reqPlayer.getName()); } if (tpLoc != null) { @@ -929,7 +912,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r CuboidArea area = areas.values().iterator().next(); if (area == null) { reqPlayer.sendMessage(ChatColor.RED + "Could not find area to teleport to..."); - ResidenceCommandListener.teleportDelayMap.remove(targetPlayer.getName()); + ResidenceCommandListener.getTeleportDelayMap().remove(targetPlayer.getName()); return; } final Location targloc = this.getMiddleFreeLoc(area.getHighLoc()); @@ -945,12 +928,12 @@ public void performDelaydTp(final Location targloc, final Player targetPlayer, P ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); Residence.getServ().getPluginManager().callEvent(tpevent); if (!tpevent.isCancelled()) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { public void run() { - if (!ResidenceCommandListener.teleportDelayMap.contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) + if (!ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) return; - else if (ResidenceCommandListener.teleportDelayMap.contains(targetPlayer.getName())) - ResidenceCommandListener.teleportDelayMap.remove(targetPlayer.getName()); + else if (ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName())) + ResidenceCommandListener.getTeleportDelayMap().remove(targetPlayer.getName()); targetPlayer.teleport(targloc); if (near) targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportNear")); @@ -983,6 +966,14 @@ public String getAreaIDbyLoc(Location loc) { return null; } + public CuboidArea getCuboidAreabyName(String name) { + for (Entry area : areas.entrySet()) { + if (area.getKey().equals(name)) + return area.getValue(); + } + return null; + } + public void removeArea(String id) { Residence.getResidenceManager().removeChunkList(getName()); areas.remove(id); @@ -990,8 +981,6 @@ public void removeArea(String id) { } public void removeArea(Player player, String id, boolean resadmin) { - - Debug.D("parent " + parent.getName()); if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { if (!areas.containsKey(id)) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); @@ -1043,8 +1032,8 @@ public Map save() { } @SuppressWarnings("unchecked") - public static ClaimedResidence load(Map root, ClaimedResidence parent) throws Exception { - ClaimedResidence res = new ClaimedResidence(); + public static ClaimedResidence load(Map root, ClaimedResidence parent, Residence plugin) throws Exception { + ClaimedResidence res = new ClaimedResidence(plugin); if (root == null) throw new Exception("Null residence!"); @@ -1081,7 +1070,7 @@ public static ClaimedResidence load(Map root, ClaimedResidence p Map subzonemap = (Map) root.get("Subzones"); for (Entry map : subzonemap.entrySet()) { - ClaimedResidence subres = ClaimedResidence.load((Map) map.getValue(), res); + ClaimedResidence subres = ClaimedResidence.load((Map) map.getValue(), res, plugin); if (Residence.getConfigManager().flagsInherit()) subres.getPermissions().setParent(res.getPermissions()); res.subzones.put(map.getKey(), subres); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 03409be60..e102cc7aa 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -1,7 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.bekvon.bukkit.residence.protection; import java.util.ArrayList; @@ -136,6 +132,8 @@ public static void initValidFlags() { addFlag("destroy"); addFlag("place"); addFlag("bucket"); + addFlag("bucketfill"); + addFlag("bucketempty"); addFlag("bank"); addFlag("beacon"); @@ -152,7 +150,7 @@ public static void initValidFlags() { addFlag("command"); addFlag("chat"); - + addResidenceOnlyFlag("trample"); addResidenceOnlyFlag("pvp"); addResidenceOnlyFlag("fireball"); @@ -196,7 +194,7 @@ public static void initValidFlags() { // Players will keep hes exp on death addResidenceOnlyFlag("keepexp"); - + // Players will keep hes exp on death addResidenceOnlyFlag("mobitemdrop"); @@ -208,13 +206,13 @@ public static void initValidFlags() { // Special flag for making residence as shop addResidenceOnlyFlag("shop"); - + // Prevent ender dragon block grief addResidenceOnlyFlag("dragongrief"); - + // Prevent snowman snow trail addResidenceOnlyFlag("snowtrail"); - + // Auto respawn player addResidenceOnlyFlag("respawn"); @@ -711,6 +709,25 @@ public ArrayList getposibleFlags() { return FlagPermissions.validFlags; } + public ArrayList getposibleAreaFlags() { + return FlagPermissions.validAreaFlags; + } + + public List getPosibleFlags(boolean residence, boolean resadmin) { + List flags = new ArrayList(); + for (Entry one : Residence.getPermissionManager().getAllFlags().getFlags().entrySet()) { + if (!one.getValue() && !resadmin) + continue; + + if (!residence && !getposibleFlags().contains(one.getKey())) + continue; + + flags.add(one.getKey()); + } + + return flags; + } + public String listPlayerFlags(String player) { Map flags = this.getPlayerFlags(player, false); if (flags != null) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 8b52d09e6..d2e8529ba 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -18,7 +18,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.PlayerManager; +import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; @@ -37,10 +37,12 @@ public class ResidenceManager { protected Map residences; protected Map>> chunkResidences; protected List shops = new ArrayList(); + private Residence plugin; - public ResidenceManager() { + public ResidenceManager(Residence plugin) { residences = new HashMap<>(); chunkResidences = new HashMap<>(); + this.plugin = plugin; } public ClaimedResidence getByLoc(Location loc) { @@ -146,6 +148,20 @@ public String getNameByRes(ClaimedResidence res) { return null; } + public String getSubzoneNameByRes(ClaimedResidence res) { + Set> set = residences.entrySet(); + for (Entry check : set) { + if (check.getValue() == res) { + return check.getKey(); + } + String n = check.getValue().getSubzoneNameByRes(res); + if (n != null) { + return n; + } + } + return null; + } + public void addShop(String res) { shops.add(res); } @@ -202,7 +218,7 @@ public boolean addResidence(Player player, String owner, String name, Location l } } CuboidArea newArea = new CuboidArea(loc1, loc2); - ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName()); + ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName(), plugin); newRes.getPermissions().applyDefaultFlags(); newRes.setEnterMessage(group.getDefaultEnterMessage()); newRes.setLeaveMessage(group.getDefaultLeaveMessage()); @@ -245,7 +261,7 @@ public boolean addResidence(Player player, String owner, String name, Location l calculateChunks(name); Residence.getLeaseManager().removeExpireTime(name); - PlayerManager.addResidence(newRes.getOwner(), newRes); + Residence.getPlayerManager().addResidence(newRes.getOwner(), newRes); if (player != null) { Residence.getSelectionManager().NewMakeBorders(player, newArea.getHighLoc(), newArea.getLowLoc(), false); @@ -294,10 +310,10 @@ public void listResidences(final Player player, final String targetplayer, final showhidden = false; } final boolean hidden = showhidden; - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { - ArrayList ownedResidences = PlayerManager.getResidenceListString(targetplayer, hidden); + ArrayList ownedResidences = Residence.getPlayerManager().getResidenceListString(targetplayer, hidden); ownedResidences.addAll(Residence.getRentManager().getRentedLands(targetplayer)); InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, ownedResidences, page); return; @@ -455,12 +471,12 @@ public void removeResidence(Player player, String name, boolean resadmin) { // around for now for (String oneSub : res.getSubzoneList()) { - PlayerManager.removeResFromPlayer(res.getOwner(), name + "." + oneSub); + Residence.getPlayerManager().removeResFromPlayer(res.getOwner(), name + "." + oneSub); Residence.getRentManager().removeRentable(name + "." + oneSub); Residence.getTransactionManager().removeFromSale(name + "." + oneSub); } - PlayerManager.removeResFromPlayer(res.getOwner(), name); + Residence.getPlayerManager().removeResFromPlayer(res.getOwner(), name); Residence.getRentManager().removeRentable(name); Residence.getTransactionManager().removeFromSale(name); @@ -493,7 +509,7 @@ private void removeAllByOwner(Player player, String owner, Map 0) - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + groupFlags); + Residence.sendMessage(player, "&6" + lm.getMessage("Group") + lm.getMessage("Flags") + ": &c" + groupFlags); if (!Residence.getConfigManager().isShortInfoUse()) - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + perms.listOtherPlayersFlags(player - .getName())); + Residence.sendMessage(player, "&6" + lm.getMessage("Others") + lm.getMessage("Flags") + ": &c" + perms.listOtherPlayersFlags(player.getName())); else { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + perms.listOtherPlayersFlagsRaw(ChatColor.YELLOW + Residence - .getLanguage().getPhrase("Others.Flags") + ": ", player.getName())); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + perms.listOtherPlayersFlagsRaw("&e" + + lm.getMessage("Others") + lm.getMessage("Flags") + ": ", player.getName())); } msg = ""; if (aid != null) { - msg += ChatColor.YELLOW + Residence.getLanguage().getPhrase("CurrentArea") + ": " + ChatColor.GOLD + aid + " "; + msg += "&e" + lm.getMessage("CurrentArea") + ": &6" + aid + " "; } - msg += ChatColor.YELLOW + Residence.getLanguage().getPhrase("Total.Size") + ":" + ChatColor.LIGHT_PURPLE + " " + res.getTotalSize(); + msg += "&e" + lm.getMessage("Total") + lm.getMessage("Size") + ": &6" + res.getTotalSize(); - player.sendMessage(msg); + Residence.sendMessage(player, msg); if (Residence.getEconomyManager() != null) { PermissionGroup group = Residence.getPermissionManager().getGroup(res.getOwner(), res.getWorld()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TotalWorth", String.valueOf((int) ((res.getTotalSize() * group.getCostPerBlock()) - * 100) / 100.0) + "|" + String.valueOf((int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0))); + Residence.sendMessage(player, "&e" + lm.getMessage("TotalWorth", String.valueOf((int) ((res.getTotalSize() * group.getCostPerBlock()) + * 100) / 100.0) + "%" + String.valueOf((int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0))); } if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + Residence.getLeaseManager() + Residence.sendMessage(player, "&e" + lm.getMessage("LeaseExpire") + ": &2" + Residence.getLeaseManager() .getExpireTime(areaname)); } - player.sendMessage(ChatColor.GOLD + "**********************************************************"); + Residence.sendMessage(player, "&6**********************************************************"); } public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { ClaimedResidence reciever = this.getByName(targetArea); ClaimedResidence source = this.getByName(sourceArea); if (source == null || reciever == null) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + Residence.sendMessage(reqPlayer, "&c" + Residence.getLM().getMessage("InvalidResidence")); return; } if (!resadmin) { if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + Residence.sendMessage(reqPlayer, "&c" + Residence.getLM().getMessage("NoPermission")); return; } } @@ -647,8 +663,8 @@ public Map save() { return worldmap; } - public static ResidenceManager load(Map root) throws Exception { - ResidenceManager resm = new ResidenceManager(); + public ResidenceManager load(Map root) throws Exception { + ResidenceManager resm = new ResidenceManager(plugin); if (root == null) return resm; @@ -665,12 +681,12 @@ public static ResidenceManager load(Map root) throws Exception { throw (ex); } } - Residence.instance.getLogger().info("Loading " + world.getName() + " data into memory. (" + (System.currentTimeMillis() - time) + " ms)"); + plugin.getLogger().info("Loading " + world.getName() + " data into memory. (" + (System.currentTimeMillis() - time) + " ms)"); } return resm; } - public static Map> loadMap(String worldName, Map root, ResidenceManager resm) throws Exception { + public Map> loadMap(String worldName, Map root, ResidenceManager resm) throws Exception { Map> retRes = new HashMap<>(); if (root != null) { int i = 0; @@ -684,7 +700,7 @@ public static Map> loadMap(String worldName, Map) res.getValue(), null); + ClaimedResidence residence = ClaimedResidence.load((Map) res.getValue(), null, plugin); if (residence.getPermissions().getOwnerUUID().toString().equals(Residence.getServerLandUUID()) && !residence.getOwner().equalsIgnoreCase( "Server land") && !residence.getOwner().equalsIgnoreCase(Residence.getServerLandname())) continue; @@ -753,7 +769,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo residences.put(newName, res); residences.remove(oldName); - PlayerManager.renameResidence(player.getName(), oldName, newName); + Residence.getPlayerManager().renameResidence(player.getName(), oldName, newName); calculateChunks(newName); if (Residence.getConfigManager().useLeases()) { @@ -814,8 +830,8 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, } } - PlayerManager.removeResFromPlayer(reqPlayer, residence); - PlayerManager.addResidence(targPlayer, res); + Residence.getPlayerManager().removeResFromPlayer(reqPlayer, residence); + Residence.getPlayerManager().addResidence(targPlayer, res); res.getPermissions().setOwner(giveplayer.getName(), true); // Fix phrases here @@ -843,7 +859,7 @@ public void removeAllFromWorld(CommandSender sender, String world) { sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); } - PlayerManager.fillList(); + Residence.getPlayerManager().fillList(); } public int getResidenceCount() { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 72ba4054e..92456115b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.protection; import org.bukkit.ChatColor; @@ -184,6 +179,12 @@ private boolean hasFlagAccess(String player, String flag) { } public boolean setPlayerFlag(Player player, String targetPlayer, String flag, String flagstate, boolean resadmin, boolean Show) { + + if (Residence.getPlayerUUID(targetPlayer) == null) { + player.sendMessage("no player by this name"); + return false; + } + if (validFlagGroups.containsKey(flag)) return this.setFlagGroupOnPlayer(player, targetPlayer, flag, flagstate, resadmin); FlagState state = FlagPermissions.stringToFlagState(flagstate); diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index ec1943336..1df4a5ef3 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -4,7 +4,6 @@ import org.bukkit.Location; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.AutoSelector; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -18,10 +17,10 @@ public static void switchAutoSelection(Player player) { if (!list.containsKey(player.getName().toLowerCase())) { PermissionGroup group = Residence.getPermissionManager().getGroup(player.getName(), player.getLocation().getWorld().getName()); list.put(player.getName().toLowerCase(), new AutoSelector(group, System.currentTimeMillis())); - player.sendMessage(NewLanguage.getMessage("Language.AutoSelection.Enabled")); + player.sendMessage(Residence.getLM().getMessage("Language.AutoSelection.Enabled")); } else { list.remove(player.getName().toLowerCase()); - player.sendMessage(NewLanguage.getMessage("Language.AutoSelection.Disabled")); + player.sendMessage(Residence.getLM().getMessage("Language.AutoSelection.Disabled")); } } @@ -36,7 +35,7 @@ public static void UpdateSelection(Player player) { if (Curenttime > 270) { list.remove(player.getName().toLowerCase()); - player.sendMessage(NewLanguage.getMessage("Language.AutoSelection.Disabled")); + player.sendMessage(Residence.getLM().getMessage("Language.AutoSelection.Disabled")); return; } @@ -48,13 +47,13 @@ public static void UpdateSelection(Player player) { Location loc2 = Residence.getSelectionManager().getPlayerLoc2(name); if (loc1 == null) { - Residence.getSelectionManager().placeLoc1(player, cloc); + Residence.getSelectionManager().placeLoc1(player, cloc, false); loc1 = player.getLocation(); return; } if (loc2 == null) { - Residence.getSelectionManager().placeLoc2(player, cloc); + Residence.getSelectionManager().placeLoc2(player, cloc, true); loc2 = player.getLocation(); return; } @@ -110,8 +109,8 @@ public static void UpdateSelection(Player player) { } if (changed) { - Residence.getSelectionManager().placeLoc1(player, hloc); - Residence.getSelectionManager().placeLoc2(player, lloc); + Residence.getSelectionManager().placeLoc1(player, hloc, false); + Residence.getSelectionManager().placeLoc2(player, lloc, true); Residence.getSelectionManager().showSelectionInfoInActionBar(player); } } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index f48fb79dd..846aa3bd6 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -31,6 +31,7 @@ public class SelectionManager { protected Map playerLoc1; protected Map playerLoc2; protected Server server; + private Residence plugin; public static Integer id; public static HashMap normalPrintMap = new HashMap(); @@ -44,7 +45,8 @@ public enum Direction { UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ } - public SelectionManager(Server server) { + public SelectionManager(Server server, Residence plugin) { + this.plugin = plugin; this.server = server; playerLoc1 = Collections.synchronizedMap(new HashMap()); playerLoc2 = Collections.synchronizedMap(new HashMap()); @@ -58,29 +60,31 @@ public void updateLocations(Player player, Location loc1, Location loc2) { this.qsky(player); this.qbedrock(player); } -// this.afterSelectionUpdate(player); + this.afterSelectionUpdate(player); } } - public void placeLoc1(Player player, Location loc) { + public void placeLoc1(Player player, Location loc, boolean show) { if (loc != null) { playerLoc1.put(player.getName(), loc); if (Residence.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName())) { this.qsky(player); this.qbedrock(player); } - this.afterSelectionUpdate(player); + if (show) + this.afterSelectionUpdate(player); } } - public void placeLoc2(Player player, Location loc) { + public void placeLoc2(Player player, Location loc, boolean show) { if (loc != null) { playerLoc2.put(player.getName(), loc); if (Residence.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName())) { this.qsky(player); this.qbedrock(player); } - this.afterSelectionUpdate(player); + if (show) + this.afterSelectionUpdate(player); } } @@ -167,7 +171,7 @@ public void NewMakeBorders(final Player player, final Location OriginalLow, fina normalPrintMap.put(player.getName(), System.currentTimeMillis()); else errorPrintMap.put(player.getName(), System.currentTimeMillis()); - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { MakeBorders(player, OriginalLow, OriginalHigh, error); @@ -197,7 +201,7 @@ public List getLocations(Location lowLoc, Location loc, Double TX, Dou } List locList = new ArrayList(); - + if (lowLoc.getWorld() != loc.getWorld()) return locList; @@ -371,7 +375,7 @@ public boolean MakeBorders(final Player player, final Location OriginalLow, fina final List locList2 = GetLocationsCornersByData(player, loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range); - Bukkit.getScheduler().runTaskAsynchronously(Residence.instance, new Runnable() { + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { if (!error) @@ -390,7 +394,6 @@ public void run() { return; } }); - String planerName = player.getName(); if (!error && !normalPrintMap.containsKey(planerName)) @@ -403,7 +406,7 @@ else if (error && !errorPrintMap.containsKey(planerName)) else if (error && errorPrintMap.get(planerName) + Residence.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) return false; - int scid = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + int scid = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { public void run() { if (player.isOnline()) MakeBorders(player, OriginalLow, OriginalHigh, error); @@ -540,8 +543,8 @@ public void selectBySize(Player player, int xsize, int ysize, int zsize) { Location myloc = player.getLocation(); Location loc1 = new Location(myloc.getWorld(), myloc.getBlockX() + xsize, myloc.getBlockY() + ysize, myloc.getBlockZ() + zsize); Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize); - placeLoc1(player, loc1); - placeLoc2(player, loc2); + placeLoc1(player, loc1, false); + placeLoc2(player, loc2, true); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); showSelectionInfo(player); } @@ -705,8 +708,7 @@ public boolean contract(Player player, double amount, boolean resadmin) { if (!ClaimedResidence.CheckAreaSize(player, area, resadmin)) return false; - playerLoc1.put(player.getName(), area.getHighLoc()); - playerLoc2.put(player.getName(), area.getLowLoc()); + updateLocations(player, area.getHighLoc(), area.getLowLoc()); return true; } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 59fb50153..1acec1c6d 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -20,8 +20,8 @@ */ public class WorldEditSelectionManager extends SelectionManager { - public WorldEditSelectionManager(Server serv) { - super(serv); + public WorldEditSelectionManager(Server serv, Residence plugin) { + super(serv, plugin); } @Override @@ -54,14 +54,14 @@ public boolean worldEditUpdate(Player player) { } @Override - public void placeLoc1(Player player, Location loc) { - super.placeLoc1(player, loc); + public void placeLoc1(Player player, Location loc, boolean show) { + super.placeLoc1(player, loc, show); this.worldEditUpdate(player); } @Override - public void placeLoc2(Player player, Location loc) { - super.placeLoc2(player, loc); + public void placeLoc2(Player player, Location loc, boolean show) { + super.placeLoc2(player, loc, show); this.worldEditUpdate(player); } diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index a3bc2caee..43fe08f25 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -16,7 +16,6 @@ import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; -import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; @@ -48,7 +47,7 @@ public void onSignInteract(PlayerInteractEvent event) { if (Delete.contains(player.getName())) { Board Found = null; - for (Board one : ShopSignUtil.GetAllBoards()) { + for (Board one : Residence.getShopSignUtilManager().GetAllBoards()) { for (Location location : one.GetLocations()) { if (!loc.getWorld().getName().equalsIgnoreCase(location.getWorld().getName())) @@ -68,18 +67,18 @@ public void onSignInteract(PlayerInteractEvent event) { break; } if (Found != null) { - ShopSignUtil.GetAllBoards().remove(Found); - ShopSignUtil.saveSigns(); - event.getPlayer().sendMessage(NewLanguage.getMessage("Language.Shop.DeletedBoard")); + Residence.getShopSignUtilManager().GetAllBoards().remove(Found); + Residence.getShopSignUtilManager().saveSigns(); + event.getPlayer().sendMessage(Residence.getLM().getMessage("Language.Shop.DeletedBoard")); } else { - event.getPlayer().sendMessage(NewLanguage.getMessage("Language.Shop.IncorrectBoard")); + event.getPlayer().sendMessage(Residence.getLM().getMessage("Language.Shop.IncorrectBoard")); } Delete.remove(player.getName()); return; } String resName = null; - for (Board one : ShopSignUtil.GetAllBoards()) { + for (Board one : Residence.getShopSignUtilManager().GetAllBoards()) { resName = one.getResNameByLoc(loc); if (resName != null) break; @@ -101,8 +100,8 @@ public void onFlagChangeShop(ResidenceFlagChangeEvent event) { case NEITHER: case FALSE: Residence.getResidenceManager().removeShop(event.getResidence()); - ShopSignUtil.BoardUpdate(); - ShopSignUtil.saveSigns(); + Residence.getShopSignUtilManager().BoardUpdate(); + Residence.getShopSignUtilManager().saveSigns(); break; case INVALID: break; @@ -111,8 +110,8 @@ public void onFlagChangeShop(ResidenceFlagChangeEvent event) { event.getResidence().getPermissions().setFlag("tp", FlagState.TRUE); event.getResidence().getPermissions().setFlag("move", FlagState.TRUE); event.getResidence().getPermissions().setFlag("pvp", FlagState.FALSE); - ShopSignUtil.BoardUpdate(); - ShopSignUtil.saveSigns(); + Residence.getShopSignUtilManager().BoardUpdate(); + Residence.getShopSignUtilManager().saveSigns(); break; default: break; @@ -121,15 +120,15 @@ public void onFlagChangeShop(ResidenceFlagChangeEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceRename(ResidenceRenameEvent event) { - ConcurrentHashMap> Votes = ShopSignUtil.GetAllVoteList(); + ConcurrentHashMap> Votes = Residence.getShopSignUtilManager().GetAllVoteList(); if (Votes.containsKey(event.getOldResidenceName())){ Residence.getResidenceManager().addShop(event.getNewResidenceName()); Residence.getResidenceManager().removeShop(event.getOldResidenceName()); List obj = Votes.remove(event.getOldResidenceName()); Votes.put(event.getNewResidenceName(), obj); - ShopSignUtil.saveShopVotes(); - ShopSignUtil.BoardUpdateDelayed(); - ShopSignUtil.saveSigns(); + Residence.getShopSignUtilManager().saveShopVotes(); + Residence.getShopSignUtilManager().BoardUpdateDelayed(); + Residence.getShopSignUtilManager().saveSigns(); } } @@ -169,8 +168,8 @@ public void onResidenceCreate(ResidenceCreationEvent event) { Residence.getResidenceManager().addShop(event.getResidence().getName()); - ShopSignUtil.BoardUpdate(); - ShopSignUtil.saveSigns(); + Residence.getShopSignUtilManager().BoardUpdate(); + Residence.getShopSignUtilManager().saveSigns(); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -182,7 +181,7 @@ public void onResidenceRemove(ResidenceDeleteEvent event) { return; Residence.getResidenceManager().removeShop(event.getResidence()); - ShopSignUtil.BoardUpdate(); - ShopSignUtil.saveSigns(); + Residence.getShopSignUtilManager().BoardUpdate(); + Residence.getShopSignUtilManager().saveSigns(); } } diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index f9c09e05f..c66e73565 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -21,20 +21,25 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; import com.bekvon.bukkit.residence.CommentedYamlConfiguration; -import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class ShopSignUtil { - static ConcurrentHashMap> VoteList = new ConcurrentHashMap>(); - static List AllBoards = new ArrayList(); + ConcurrentHashMap> VoteList = new ConcurrentHashMap>(); + List AllBoards = new ArrayList(); + + private Residence plugin; + + public ShopSignUtil(Residence plugin) { + this.plugin = plugin; + } public void setVoteList(ConcurrentHashMap> VoteList) { - ShopSignUtil.VoteList = VoteList; + this.VoteList = VoteList; } - public static ConcurrentHashMap> GetAllVoteList() { + public ConcurrentHashMap> GetAllVoteList() { return VoteList; } @@ -42,15 +47,15 @@ public void removeVoteList(String resName) { VoteList.remove(resName); } - public static void addVote(String ResName, List ShopVote) { + public void addVote(String ResName, List ShopVote) { VoteList.put(ResName, ShopVote); } public void setAllSigns(List AllBoards) { - ShopSignUtil.AllBoards = AllBoards; + this.AllBoards = AllBoards; } - public static List GetAllBoards() { + public List GetAllBoards() { return AllBoards; } @@ -58,14 +63,14 @@ public void removeBoard(Board Board) { AllBoards.remove(Board); } - public static void addBoard(Board Board) { + public void addBoard(Board Board) { AllBoards.add(Board); } // Res Shop vote file - public static void LoadShopVotes() { + public void LoadShopVotes() { GetAllVoteList().clear(); - File file = new File(Residence.instance.getDataFolder(), "ShopVotes.yml"); + File file = new File(plugin.getDataFolder(), "ShopVotes.yml"); YamlConfiguration f = YamlConfiguration.loadConfiguration(file); if (!f.isConfigurationSection("ShopVotes")) @@ -118,8 +123,8 @@ else if (vote > 10) } // Signs save file - public static void saveShopVotes() { - File f = new File(Residence.instance.getDataFolder(), "ShopVotes.yml"); + public void saveShopVotes() { + File f = new File(plugin.getDataFolder(), "ShopVotes.yml"); YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); @@ -154,7 +159,7 @@ public static void saveShopVotes() { } // Res Shop vote file - public static Vote getAverageVote(String resName) { + public Vote getAverageVote(String resName) { ConcurrentHashMap> allvotes = GetAllVoteList(); @@ -174,7 +179,7 @@ public static Vote getAverageVote(String resName) { } // Res Shop vote file - public static int getLikes(String resName) { + public int getLikes(String resName) { ConcurrentHashMap> allvotes = GetAllVoteList(); if (!allvotes.containsKey(resName)) return 0; @@ -190,7 +195,7 @@ public static int getLikes(String resName) { return likes; } - public static Map getSortedShopList() { + public Map getSortedShopList() { Map allvotes = new HashMap(); @@ -198,9 +203,9 @@ public static Map getSortedShopList() { for (String one : shops) { if (Residence.getConfigManager().isOnlyLike()) - allvotes.put(one, (double) ShopSignUtil.getLikes(one)); + allvotes.put(one, (double) getLikes(one)); else - allvotes.put(one, ShopSignUtil.getAverageVote(one).getVote()); + allvotes.put(one, getAverageVote(one).getVote()); } allvotes = sortByComparator(allvotes); @@ -208,7 +213,7 @@ public static Map getSortedShopList() { return allvotes; } - private static Map sortByComparator(Map allvotes) { + private Map sortByComparator(Map allvotes) { List> list = new LinkedList>(allvotes.entrySet()); @@ -226,9 +231,9 @@ public int compare(Map.Entry o1, Map.Entry o2) { } // Shop Sign file - public static void LoadSigns() { + public void LoadSigns() { GetAllBoards().clear(); - File file = new File(Residence.instance.getDataFolder(), "ShopSigns.yml"); + File file = new File(plugin.getDataFolder(), "ShopSigns.yml"); YamlConfiguration f = YamlConfiguration.loadConfiguration(file); if (!f.isConfigurationSection("ShopSigns")) @@ -261,8 +266,8 @@ public static void LoadSigns() { } // Signs save file - public static void saveSigns() { - File f = new File(Residence.instance.getDataFolder(), "ShopSigns.yml"); + public void saveSigns() { + File f = new File(plugin.getDataFolder(), "ShopSigns.yml"); YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); @@ -295,8 +300,8 @@ public static void saveSigns() { return; } - public static boolean BoardUpdateDelayed() { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + public boolean BoardUpdateDelayed() { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { public void run() { BoardUpdate(); return; @@ -304,13 +309,13 @@ public void run() { }, 20L); return true; } - - public static boolean BoardUpdate() { + + public boolean BoardUpdate() { for (Board board : GetAllBoards()) { board.clearSignLoc(); List SignsLocation = board.GetLocations(); - ArrayList ShopNames = new ArrayList(ShopSignUtil.getSortedShopList().keySet()); + ArrayList ShopNames = new ArrayList(getSortedShopList().keySet()); int Start = board.GetStartPlace(); for (Location OneSignLoc : SignsLocation) { @@ -334,19 +339,18 @@ public static boolean BoardUpdate() { Vote vote = null; String votestat = ""; if (Residence.getResidenceManager().getShops().size() >= Start) { - vote = ShopSignUtil.getAverageVote(ShopNames.get(Start - 1)); + vote = getAverageVote(ShopNames.get(Start - 1)); if (Residence.getConfigManager().isOnlyLike()) { - votestat = vote.getAmount() == 0 ? "" : NewLanguage.getMessage("Language.Shop.ListLiked", ShopSignUtil.getLikes(ShopNames.get(Start - 1))); + votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Language.Shop.ListLiked", getLikes(ShopNames.get(Start - 1))); } else - votestat = vote.getAmount() == 0 ? "" : NewLanguage.getMessage("Language.Shop.SignLines.4").replace("%1", String.valueOf(vote.getVote())).replace( - "%2", String.valueOf(vote.getAmount())); + votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Language.Shop.SignLines.4", vote.getVote() + "%" + vote.getAmount()); } if (Shop != null) { - sign.setLine(0, NewLanguage.getMessage("Language.Shop.SignLines.1").replace("%1", String.valueOf(Start))); - sign.setLine(1, NewLanguage.getMessage("Language.Shop.SignLines.2").replace("%1", res.getName())); - sign.setLine(2, NewLanguage.getMessage("Language.Shop.SignLines.3").replace("%1", res.getOwner())); + sign.setLine(0, Residence.getLM().getMessage("Language.Shop.SignLines.1", String.valueOf(Start))); + sign.setLine(1, Residence.getLM().getMessage("Language.Shop.SignLines.2", res.getName())); + sign.setLine(2, Residence.getLM().getMessage("Language.Shop.SignLines.3", res.getOwner())); sign.setLine(3, votestat); board.addSignLoc(res.getName(), sign.getLocation()); } else { diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 2ea200dfa..019b4938e 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -20,7 +20,6 @@ import org.bukkit.configuration.file.YamlConfiguration; import com.bekvon.bukkit.residence.CommentedYamlConfiguration; -import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -212,8 +211,8 @@ public boolean SignUpdate(Signs Sign) { sign.setLine(1, infoLine); String shortName = fixResName(landName); - sign.setLine(2, rented ? NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", shortName) - : NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", shortName)); + sign.setLine(2, rented ? Residence.getLM().getDefaultMessage("Language.SignRentedResName").replace("%1", shortName) + : Residence.getLM().getDefaultMessage("Language.SignRentedResName").replace("%1", shortName)); sign.setLine(3, rented ? Residence.getLanguage().getPhrase("SignRentedBottomLine", Residence.getRentManager().getRentingPlayer(landName)) : Residence.getLanguage().getPhrase("SignForRentBottomLine")); sign.update(); @@ -225,7 +224,7 @@ public boolean SignUpdate(Signs Sign) { sign.setLine(0, Residence.getLanguage().getPhrase("SignForSaleTopLine")); String infoLine = Residence.getLanguage().getPhrase("SignForSalePriceLine", String.valueOf(Residence.getTransactionManager().getSaleAmount(landName))); sign.setLine(1, infoLine); - sign.setLine(2, NewLanguage.getDefaultMessage("Language.SignRentedResName").replace("%1", shortName)); + sign.setLine(2, Residence.getLM().getDefaultMessage("Language.SignRentedResName").replace("%1", shortName)); sign.setLine(3, Residence.getLanguage().getPhrase("SignForSaleBottomLine")); sign.update(); } diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index 21086312a..01ac6c0dc 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -67,7 +67,7 @@ public String getPhrase(String[] keys, String[] words) { if (sentence.length() == 0) { sentence = this.getText(key); } else { - sentence = sentence + " " + this.getText(key).toLowerCase(); + sentence = sentence + " " + this.getText(key); } } if (words != null) { diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 4a78721d7..da052023f 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -166,10 +166,10 @@ private List getHelpData(CommandSender sender, boolean resadmin) { for (HelpEntry entry : subentrys) { if (!name.equalsIgnoreCase("flags")) { - if (ResidenceCommandListener.AdminCommands.contains(entry.getName().toLowerCase()) && !resadmin) + if (ResidenceCommandListener.getAdminCommands().contains(entry.getName().toLowerCase()) && !resadmin) continue; - if (!ResidenceCommandListener.AdminCommands.contains(entry.getName().toLowerCase()) && resadmin) + if (!ResidenceCommandListener.getAdminCommands().contains(entry.getName().toLowerCase()) && resadmin) continue; } else { if (GlobalFlags.getFlags().containsKey(entry.getName().toLowerCase())) { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 5c8ed7b69..a98d6ad8c 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -1,13 +1,7 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.text.help; import org.bukkit.ChatColor; -import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import java.util.Arrays; import java.util.List; @@ -41,19 +35,19 @@ public static void printInfo(CommandSender sender, String title, List li if (pagecount == 0) pagecount = 1; if (page > pagecount) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidPage")); + sender.sendMessage(ChatColor.RED + Residence.getLM().getMessage("InvalidPage")); return; } - sender.sendMessage(NewLanguage.getMessage("Language.InformationPage.TopLine").replace("%1", title)); - sender.sendMessage(NewLanguage.getMessage("Language.InformationPage.Page").replace("%1", Residence.getLanguage().getPhrase("GenericPage", ChatColor.GREEN + String - .format("%d", page) + ChatColor.YELLOW + "|" + ChatColor.GREEN + pagecount + ChatColor.YELLOW))); + sender.sendMessage(Residence.getLM().getMessage("Language.InformationPage.TopLine", title)); + sender.sendMessage(Residence.getLM().getMessage("Language.InformationPage.Page", Residence.getLM().getMessage("GenericPage", ChatColor.GREEN + String + .format("%d", page) + ChatColor.YELLOW + "%" + ChatColor.GREEN + pagecount + ChatColor.YELLOW))); for (int i = start; i < end; i++) { if (lines.size() > i) sender.sendMessage(ChatColor.GREEN + lines.get(i)); } if (pagecount > page) - sender.sendMessage(NewLanguage.getMessage("Language.InformationPage.NextPage").replace("%1", Residence.getLanguage().getPhrase("NextPage"))); + sender.sendMessage(Residence.getLM().getMessage("Language.InformationPage.NextPage", Residence.getLM().getMessage("NextPage"))); else - sender.sendMessage(NewLanguage.getMessage("Language.InformationPage.NoNextPage")); + sender.sendMessage(Residence.getLM().getMessage("Language.InformationPage.NoNextPage")); } } diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 08f73872a..d2dc12873 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -10,7 +10,6 @@ import org.bukkit.block.Block; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.containers.RandomTeleport; @@ -20,6 +19,12 @@ public class RandomTp { static int miny = 63; + private Residence plugin; + + public RandomTp(Residence plugin) { + this.plugin = plugin; + } + public static Location getRandomlocation(String WorldName) { Random random = new Random(System.currentTimeMillis()); @@ -100,16 +105,16 @@ public static Location getRandomlocation(String WorldName) { return loc; } - public static void performDelaydTp(final Location loc, final Player targetPlayer) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.instance, new Runnable() { + public void performDelaydTp(final Location loc, final Player targetPlayer) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { public void run() { - if (!ResidenceCommandListener.teleportDelayMap.contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) + if (!ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) return; - else if (ResidenceCommandListener.teleportDelayMap.contains(targetPlayer.getName())) - ResidenceCommandListener.teleportDelayMap.remove(targetPlayer.getName()); + else if (ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName())) + ResidenceCommandListener.getTeleportDelayMap().remove(targetPlayer.getName()); targetPlayer.teleport(loc); - targetPlayer.sendMessage(ChatColor.YELLOW + NewLanguage.getMessage("Language.RandomTeleport.TeleportSuccess").replace("%1", String.valueOf(loc.getX())) - .replace("%2", String.valueOf(loc.getY())).replace("%3", String.valueOf(loc.getZ()))); + targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLM().getMessage("Language.RandomTeleport.TeleportSuccess", loc.getX() + "%" + loc.getY() + "%" + + loc.getZ())); return; } }, Residence.getConfigManager().getTeleportDelay() * 20L); @@ -117,7 +122,7 @@ else if (ResidenceCommandListener.teleportDelayMap.contains(targetPlayer.getName public static void performInstantTp(Location loc, Player targetPlayer) { targetPlayer.teleport(loc); - targetPlayer.sendMessage(ChatColor.YELLOW + NewLanguage.getMessage("Language.RandomTeleport.TeleportSuccess").replace("%1", String.valueOf(loc.getX())) - .replace("%2", String.valueOf(loc.getY())).replace("%3", String.valueOf(loc.getZ()))); + targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLM().getMessage("Language.RandomTeleport.TeleportSuccess", loc.getX() + "%" + loc.getY() + "%" + loc + .getZ())); } } diff --git a/src/plugin.yml b/src/plugin.yml index 7e40966a2..0f15ae12e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.9.22.2 +version: 2.10.0.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From f01b605ceb0ab2f1ad67a80b3ddc9e07ac047d00 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 30 Jan 2016 14:46:08 +0200 Subject: [PATCH 0117/1142] fix for resname case insensitive/ residence.rename permission --- .../protection/ResidenceManager.java | 27 +++++++++++++++---- src/plugin.yml | 5 +++- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index d2e8529ba..25fe3aad2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -744,6 +744,11 @@ public boolean renameResidence(String oldName, String newName) { } public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { + if (!player.hasPermission("residence.rename")) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + return false; + } + if (!Residence.validName(newName)) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); return false; @@ -757,12 +762,24 @@ public boolean renameResidence(Player player, String oldName, String newName, bo } if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { if (res.getParent() == null) { - if (residences.containsKey(newName)) { - if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + newName + ChatColor.RED)); - return false; + if (Residence.getConfigManager().isResCreateCaseSensitive()) { + if (residences.containsKey(newName)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + newName + ChatColor.RED)); + } + return false; + } + } else { + for (Entry one : residences.entrySet()) { + if (one.getKey().equalsIgnoreCase(newName)) { + if (player != null) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + one.getKey() + + ChatColor.RED)); + } + return false; + } + } } - ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); Residence.getServ().getPluginManager().callEvent(resevent); removeChunkList(oldName); diff --git a/src/plugin.yml b/src/plugin.yml index 0f15ae12e..a1acc5942 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.10.0.1 +version: 2.10.1.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -44,6 +44,9 @@ permissions: residence.admin.move: description: Allows to override move flag default: op + residence.rename: + description: Allows you to rename residences + default: true residence.create: description: Allows you to create residences default: true From b24afa8778f3da4f1a7c7e413e17bd3537706f64 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 6 Feb 2016 11:37:27 +0200 Subject: [PATCH 0118/1142] CraftBukkit support/ Vanilla bugfix --- .../bukkit/residence/ConfigManager.java | 25 ++- .../bekvon/bukkit/residence/Residence.java | 12 ++ .../residence/ResidenceCommandListener.java | 198 +++++++++--------- .../listeners/ResidenceBlockListener.java | 21 ++ .../listeners/ResidenceEntityListener.java | 16 +- .../listeners/ResidencePlayerListener.java | 32 +-- .../protection/ClaimedResidence.java | 6 +- .../residence/utils/VersionChecker.java | 3 +- src/plugin.yml | 5 +- 9 files changed, 186 insertions(+), 132 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 728eac92f..5b620e6b5 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -31,10 +31,6 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; -/** - * - * @author Administrator - */ public class ConfigManager { protected String defaultGroup; protected boolean useLeases; @@ -53,6 +49,7 @@ public class ConfigManager { protected boolean OverridePvp; protected boolean ResCreateCaseSensitive; protected boolean ResTpCaseSensitive; + protected boolean BlockAnyTeleportation; protected int infoToolId; protected int AutoCleanUpDays; protected int selectionToolId; @@ -138,6 +135,7 @@ public class ConfigManager { protected List BlockFallWorlds; protected List CleanWorlds; protected List FlagsList; + protected List NegativePotionEffects; protected Location KickLocation; @@ -405,6 +403,11 @@ void UpdateConfigFile() { "Don't disable this if you already have some duplicating residences in your database as this will prevent players from teleporting to one of them"); ResTpCaseSensitive = GetConfig("Global.Optimizations.ResTpCaseSensitive", true, writer, conf); + writer.addComment("Global.Optimizations.BlockAnyTeleportation", + "When this set to true, any teleportation to residence where player dont have tp flag, action will be denyied", + "This can prevent from teleporting players to residence with 3rd party plugins like esentials /tpa"); + BlockAnyTeleportation = GetConfig("Global.Optimizations.BlockAnyTeleportation", true, writer, conf); + writer.addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxResCount = GetConfig("Global.Optimizations.MaxResCount", 30, writer, conf); @@ -457,6 +460,12 @@ void UpdateConfigFile() { HealInterval = GetConfig("Global.Optimizations.Intervals.Heal", 1, writer, conf); FeedInterval = GetConfig("Global.Optimizations.Intervals.Feed", 5, writer, conf); + // negative potion effect list + writer.addComment("Global.Optimizations.NegativePotionEffects", + "Potions containing one of thos effects will be ignored if residence dont have pvp true flag set"); + NegativePotionEffects = GetConfig("Global.Optimizations.NegativePotionEffects", Arrays.asList("blindness", "confusion", "harm", "hunger", "poison", "slow", + "slow_digging", "weakness", "wither"), writer, conf, false); + writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); minMoveUpdate = GetConfig("Global.MoveCheckInterval", 500, writer, conf); @@ -967,6 +976,10 @@ public boolean isResTpCaseSensitive() { return ResTpCaseSensitive; } + public boolean isBlockAnyTeleportation() { + return BlockAnyTeleportation; + } + public boolean isResCreateCaseSensitive() { return ResCreateCaseSensitive; } @@ -1219,6 +1232,10 @@ public List getBlockFallWorlds() { return BlockFallWorlds; } + public List getNegativePotionEffects() { + return NegativePotionEffects; + } + public List getCleanWorlds() { return CleanWorlds; } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index dc33c1771..f21f43bfd 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -47,8 +47,10 @@ import com.bekvon.bukkit.residence.itemlist.WorldItemManager; import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; +import com.bekvon.bukkit.residence.listeners.ResidenceFixesListener; import com.bekvon.bukkit.residence.allNms.v1_8Events; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; +import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -107,6 +109,10 @@ public class Residence extends JavaPlugin { protected static ResidencePlayerListener plistener; protected static ResidenceEntityListener elistener; protected static ResidenceSpoutListener slistener; + + protected static ResidenceFixesListener flistener; + + protected static SpigotListener spigotlistener; protected static ShopListener shlistener; protected static TransactionManager tmanager; protected static PermissionListManager pmanager; @@ -506,16 +512,22 @@ public void onEnable() { blistener = new ResidenceBlockListener(); plistener = new ResidencePlayerListener(this); elistener = new ResidenceEntityListener(); + flistener = new ResidenceFixesListener(); shlistener = new ShopListener(); + spigotlistener = new SpigotListener(); PluginManager pm = getServer().getPluginManager(); pm.registerEvents(blistener, this); pm.registerEvents(plistener, this); pm.registerEvents(elistener, this); + pm.registerEvents(flistener, this); pm.registerEvents(shlistener, this); + if (Bukkit.getVersion().toString().contains("Spigot") || Bukkit.getVersion().toString().contains("spigot")) + pm.registerEvents(spigotlistener, this); + NewLanguageManager = new NewLanguage(this); getLM().LanguageReload(); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index fb4c418a7..a359f3f1c 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -118,14 +118,14 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } else if (command.getName().equals("resworld")) { if (args.length == 2 && args[0].equalsIgnoreCase("remove")) { if (sender instanceof ConsoleCommandSender) { - Residence.rmanager.removeAllFromWorld(sender, args[1]); + Residence.getResidenceManager().removeAllFromWorld(sender, args[1]); return true; } else { sender.sendMessage(ChatColor.RED + "MUST be run from console."); } } return false; - } else if (command.getName().equals("rc")) { + } else if (command.getName().equals("rc")) { if (!(sender instanceof Player)) return true; Player player = (Player) sender; @@ -396,7 +396,7 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } - ClaimedResidence area = Residence.rmanager.getByName(args[1]); + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); if (area != null) { area.getPermissions().setOwner(args[2], true); if (Residence.getRentManager().isForRent(area.getName())) @@ -470,7 +470,7 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com return false; } if (resadmin || args[1].endsWith(pname)) { - Residence.rmanager.removeAllByOwner(player, args[1]); + Residence.getResidenceManager().removeAllByOwner(player, args[1]); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RemovePlayersResidences", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); } else { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); @@ -488,7 +488,7 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com } if (cmd.equals("default")) { if (args.length == 2) { - ClaimedResidence res = Residence.rmanager.getByName(args[1]); + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); res.getPermissions().applyDefaultFlags(player, resadmin); return true; } @@ -532,15 +532,15 @@ public void run() { } if (cmd.equals("info")) { if (args.length == 1) { - String area = Residence.rmanager.getNameByLoc(player.getLocation()); + String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); if (area != null) { - Residence.rmanager.printAreaInfo(area, player); + Residence.getResidenceManager().printAreaInfo(area, player); } else { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } else if (args.length == 2) { - Residence.rmanager.printAreaInfo(args[1], player); + Residence.getResidenceManager().printAreaInfo(args[1], player); return true; } return false; @@ -576,7 +576,7 @@ public void run() { if (args.length == 4) { pname = args[3]; } - ClaimedResidence res = Residence.rmanager.getByName(args[1]); + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res == null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; @@ -599,7 +599,7 @@ public void run() { if (args.length != 1) { return false; } - String res = Residence.rmanager.getNameByLoc(player.getLocation()); + String res = Residence.getResidenceManager().getNameByLoc(player.getLocation()); if (res == null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); } else { @@ -621,18 +621,18 @@ public void run() { } if (cmd.equals("list")) { if (args.length == 1) { - Residence.rmanager.listResidences(player); + Residence.getResidenceManager().listResidences(player); return true; } else if (args.length == 2) { try { Integer.parseInt(args[1]); - Residence.rmanager.listResidences(player, page); + Residence.getResidenceManager().listResidences(player, page); } catch (Exception ex) { - Residence.rmanager.listResidences(player, args[1]); + Residence.getResidenceManager().listResidences(player, args[1]); } return true; } else if (args.length == 3) { - Residence.rmanager.listResidences(player, args[1], page); + Residence.getResidenceManager().listResidences(player, args[1], page); return true; } return false; @@ -1049,32 +1049,32 @@ public void run() { return true; } if (args.length == 1) { - Residence.rmanager.listResidences(player, 1, true); + Residence.getResidenceManager().listResidences(player, 1, true); return true; } else if (args.length == 2) { try { Integer.parseInt(args[1]); - Residence.rmanager.listResidences(player, page, true); + Residence.getResidenceManager().listResidences(player, page, true); } catch (Exception ex) { - Residence.rmanager.listResidences(player, args[1], 1, true); + Residence.getResidenceManager().listResidences(player, args[1], 1, true); } return true; } else if (args.length == 3) { - Residence.rmanager.listResidences(player, args[1], page, true); + Residence.getResidenceManager().listResidences(player, args[1], page, true); return true; } return false; } if (cmd.equals("rename")) { if (args.length == 3) { - Residence.rmanager.renameResidence(player, args[1], args[2], resadmin); + Residence.getResidenceManager().renameResidence(player, args[1], args[2], resadmin); return true; } return false; } if (cmd.equals("renamearea")) { if (args.length == 4) { - ClaimedResidence res = Residence.rmanager.getByName(args[1]); + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res == null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; @@ -1093,7 +1093,7 @@ public void run() { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } - ClaimedResidence res = Residence.rmanager.getByLoc(player.getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); } else { @@ -1116,7 +1116,7 @@ public void run() { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } - ClaimedResidence res = Residence.rmanager.getByLoc(targetplayer.getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(targetplayer.getLocation()); if (res == null || res != null && !res.getOwner().equals(player.getName()) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("PlayerNotInResidence")); @@ -1140,15 +1140,15 @@ public void run() { if (args.length != 3) { return false; } - Residence.rmanager.mirrorPerms(player, args[2], args[1], resadmin); + Residence.getResidenceManager().mirrorPerms(player, args[2], args[1], resadmin); return true; } if (cmd.equals("listall")) { if (args.length == 1) { - Residence.rmanager.listAllResidences(player, 1); + Residence.getResidenceManager().listAllResidences(player, 1); } else if (args.length == 2) { try { - Residence.rmanager.listAllResidences(player, page); + Residence.getResidenceManager().listAllResidences(player, page); } catch (Exception ex) { } } else { @@ -1162,10 +1162,10 @@ public void run() { return true; } if (args.length == 1) { - Residence.rmanager.listAllResidences(player, 1, true); + Residence.getResidenceManager().listAllResidences(player, 1, true); } else if (args.length == 2) { try { - Residence.rmanager.listAllResidences(player, page, true); + Residence.getResidenceManager().listAllResidences(player, page, true); } catch (Exception ex) { } } else { @@ -1187,7 +1187,7 @@ public void run() { return true; } if (cmd.equals("tpset")) { - ClaimedResidence res = Residence.rmanager.getByLoc(player.getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { res.setTpLoc(player, resadmin); } else { @@ -1199,11 +1199,11 @@ public void run() { if (args.length != 2) { return false; } - ClaimedResidence res = Residence.rmanager.getByName(args[1]); + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (Residence.getConfigManager().isResTpCaseSensitive()) - res = Residence.rmanager.getByName(args[1]); + res = Residence.getResidenceManager().getByName(args[1]); else - res = Residence.rmanager.getByNameNoCase(args[1]); + res = Residence.getResidenceManager().getByNameNoCase(args[1]); if (res == null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); @@ -1275,7 +1275,7 @@ public void run() { return commandResMessage(args, resadmin, player, page); } if (cmd.equals("give") && args.length == 3) { - Residence.rmanager.giveResidence(player, args[2], args[1], resadmin); + Residence.getResidenceManager().giveResidence(player, args[2], args[1], resadmin); return true; } if (cmd.equals("server")) { @@ -1284,7 +1284,7 @@ public void run() { return true; } if (args.length == 2) { - ClaimedResidence res = Residence.rmanager.getByName(args[1]); + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res == null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; @@ -1304,7 +1304,7 @@ public void run() { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } - ClaimedResidence area = Residence.rmanager.getByName(args[1]); + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); if (area != null) { area.getPermissions().clearFlags(); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagsCleared")); @@ -1357,10 +1357,13 @@ private boolean commandResExpand(String[] args, boolean resadmin, Player player, String areaName = null; ClaimedResidence res = null; if (args.length == 2) - res = Residence.rmanager.getByLoc(player.getLocation()); - else if (args.length == 3) - res = Residence.rmanager.getByName(args[1]); - else + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 3) { + if (!Residence.getConfigManager().isResTpCaseSensitive()) + res = Residence.getResidenceManager().getByNameNoCase(args[1]); + else + res = Residence.getResidenceManager().getByName(args[1]); + } else return false; if (res == null) { @@ -1439,9 +1442,12 @@ private boolean commandResContract(String[] args, boolean resadmin, Player playe String areaName = null; ClaimedResidence res = null; if (args.length == 2) - res = Residence.rmanager.getByLoc(player.getLocation()); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); else if (args.length == 3) - res = Residence.rmanager.getByName(args[1]); + if (!Residence.getConfigManager().isResTpCaseSensitive()) + res = Residence.getResidenceManager().getByNameNoCase(args[1]); + else + res = Residence.getResidenceManager().getByName(args[1]); else return false; if (res == null) { @@ -1626,9 +1632,9 @@ private boolean commandResSelect(String[] args, boolean resadmin, Player player, String areaName; ClaimedResidence res = null; if (args.length > 2) { - res = Residence.rmanager.getByName(args[2]); + res = Residence.getResidenceManager().getByName(args[2]); } else { - res = Residence.rmanager.getByLoc(player.getLocation()); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); } if (res == null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); @@ -1677,7 +1683,8 @@ private boolean commandResCreate(String[] args, boolean resadmin, Player player, } if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) == null) { - Residence.rmanager.addResidence(player, args[1], Residence.smanager.getPlayerLoc1(player.getName()), Residence.smanager.getPlayerLoc2(player.getName()), + Residence.getResidenceManager().addResidence(player, args[1], Residence.smanager.getPlayerLoc1(player.getName()), Residence.smanager.getPlayerLoc2(player + .getName()), resadmin); return true; } else if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) != null) { @@ -1694,7 +1701,8 @@ private boolean commandResCreate(String[] args, boolean resadmin, Player player, Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() .getPlayerLoc2(player.getName()), false); } else if (Residence.wg == null) { - Residence.rmanager.addResidence(player, args[1], Residence.smanager.getPlayerLoc1(player.getName()), Residence.smanager.getPlayerLoc2(player.getName()), + Residence.getResidenceManager().addResidence(player, args[1], Residence.smanager.getPlayerLoc1(player.getName()), Residence.smanager.getPlayerLoc2(player + .getName()), resadmin); return true; } else { @@ -1715,7 +1723,7 @@ private boolean commandResSubzone(String[] args, boolean resadmin, Player player String zname; String parent; if (args.length == 2) { - parent = Residence.rmanager.getNameByLoc(player.getLocation()); + parent = Residence.getResidenceManager().getNameByLoc(player.getLocation()); zname = args[1]; } else { parent = args[1]; @@ -1728,7 +1736,7 @@ private boolean commandResSubzone(String[] args, boolean resadmin, Player player } } if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = Residence.rmanager.getByName(parent); + ClaimedResidence res = Residence.getResidenceManager().getByName(parent); if (res == null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; @@ -1751,7 +1759,7 @@ private boolean commandResSubzone(String[] args, boolean resadmin, Player player private boolean commandResArea(String[] args, boolean resadmin, Player player, int page) { if (args.length == 4) { if (args[1].equals("remove")) { - ClaimedResidence res = Residence.rmanager.getByName(args[2]); + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res != null) { res.removeArea(player, args[3], resadmin); } else { @@ -1766,7 +1774,7 @@ private boolean commandResArea(String[] args, boolean resadmin, Player player, i } } if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = Residence.rmanager.getByName(args[2]); + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res != null) { res.addArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( player.getName())), args[3], resadmin); @@ -1785,7 +1793,7 @@ private boolean commandResArea(String[] args, boolean resadmin, Player player, i } } if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = Residence.rmanager.getByName(args[2]); + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res != null) { res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() .getPlayerLoc2(player.getName())), args[3], resadmin); @@ -1799,7 +1807,7 @@ private boolean commandResArea(String[] args, boolean resadmin, Player player, i } } if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { - ClaimedResidence res = Residence.rmanager.getByName(args[2]); + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res != null) { res.printAreaList(player, page); } else { @@ -1807,7 +1815,7 @@ private boolean commandResArea(String[] args, boolean resadmin, Player player, i } return true; } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { - ClaimedResidence res = Residence.rmanager.getByName(args[2]); + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res != null) { res.printAdvancedAreaList(player, page); } else { @@ -1829,7 +1837,7 @@ private boolean commandResRemove(String[] args, boolean resadmin, CommandSender if (args.length == 1) { - ClaimedResidence res = Residence.rmanager.getByLoc(player.getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { player.sendMessage(Residence.getLM().getMessage("Language.InvalidResidence")); @@ -1853,14 +1861,14 @@ private boolean commandResRemove(String[] args, boolean resadmin, CommandSender } if (res.isSubzone()) { - String area = Residence.rmanager.getNameByLoc(player.getLocation()); + String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); String[] split = area.split("\\."); String words = split[split.length - 1]; if (!Residence.deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); Residence.deleteConfirm.put(player.getName(), area); } else { - Residence.rmanager.removeResidence(player, area, resadmin); + Residence.getResidenceManager().removeResidence(player, area, resadmin); } return true; } else { @@ -1868,7 +1876,7 @@ private boolean commandResRemove(String[] args, boolean resadmin, CommandSender player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteConfirm", ChatColor.YELLOW + res.getName() + ChatColor.RED)); Residence.deleteConfirm.put(player.getName(), res.getName()); } else { - Residence.rmanager.removeResidence(player, res.getName(), resadmin); + Residence.getResidenceManager().removeResidence(player, res.getName(), resadmin); } return true; } @@ -1881,8 +1889,8 @@ private boolean commandResRemove(String[] args, boolean resadmin, CommandSender if (player != null) { if (!Residence.deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { String words = ""; - if (Residence.rmanager.getByName(args[1]) != null) { - ClaimedResidence res = Residence.rmanager.getByName(args[1]); + if (Residence.getResidenceManager().getByName(args[1]) != null) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res.getParent() != null) { String[] split = args[1].split("\\."); words = split[split.length - 1]; @@ -1895,13 +1903,13 @@ private boolean commandResRemove(String[] args, boolean resadmin, CommandSender } Residence.deleteConfirm.put(player.getName(), args[1]); } else { - Residence.rmanager.removeResidence(player, args[1], resadmin); + Residence.getResidenceManager().removeResidence(player, args[1], resadmin); } } else { if (!Residence.deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(Residence.deleteConfirm.get("Console"))) { String words = ""; - if (Residence.rmanager.getByName(args[1]) != null) { - ClaimedResidence res = Residence.rmanager.getByName(args[1]); + if (Residence.getResidenceManager().getByName(args[1]) != null) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res.getParent() != null) { String[] split = args[1].split("\\."); words = split[split.length - 1]; @@ -1916,7 +1924,7 @@ private boolean commandResRemove(String[] args, boolean resadmin, CommandSender } Residence.deleteConfirm.put("Console", args[1]); } else { - Residence.rmanager.removeResidence(args[1]); + Residence.getResidenceManager().removeResidence(args[1]); } } return true; @@ -1934,7 +1942,7 @@ private boolean commandResConfirm(String[] args, boolean resadmin, CommandSender if (area == null) { sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } else { - Residence.rmanager.removeResidence(player, area, resadmin); + Residence.getResidenceManager().removeResidence(player, area, resadmin); Residence.deleteConfirm.remove(name); if (player == null) { sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); @@ -1946,15 +1954,15 @@ private boolean commandResConfirm(String[] args, boolean resadmin, CommandSender private boolean commandResSet(String[] args, boolean resadmin, Player player, int page) { if (args.length == 3) { - String area = Residence.rmanager.getNameByLoc(player.getLocation()); + String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); if (area != null) { - Residence.rmanager.getByName(area).getPermissions().setFlag(player, args[1], args[2], resadmin); + Residence.getResidenceManager().getByName(area).getPermissions().setFlag(player, args[1], args[2], resadmin); } else { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); } return true; } else if (args.length == 4) { - ClaimedResidence area = Residence.rmanager.getByName(args[1]); + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); if (area != null) { area.getPermissions().setFlag(player, args[2], args[3], resadmin); } else { @@ -1995,7 +2003,7 @@ private boolean commandResSet(String[] args, boolean resadmin, Player player, in private boolean commandResPset(String[] args, boolean resadmin, Player player, int page) { if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { - ClaimedResidence area = Residence.rmanager.getByLoc(player.getLocation()); + ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); if (area != null) { area.getPermissions().removeAllPlayerFlags(player, args[1], resadmin); } else { @@ -2003,7 +2011,7 @@ private boolean commandResPset(String[] args, boolean resadmin, Player player, i } return true; } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { - ClaimedResidence area = Residence.rmanager.getByName(args[1]); + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); if (area != null) { area.getPermissions().removeAllPlayerFlags(player, args[2], resadmin); } else { @@ -2011,7 +2019,7 @@ private boolean commandResPset(String[] args, boolean resadmin, Player player, i } return true; } else if (args.length == 4) { - ClaimedResidence area = Residence.rmanager.getByLoc(player.getLocation()); + ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); if (!Residence.isPlayerExist(player, args[1], true)) return false; @@ -2023,7 +2031,7 @@ private boolean commandResPset(String[] args, boolean resadmin, Player player, i } return true; } else if (args.length == 5) { - ClaimedResidence area = Residence.rmanager.getByName(args[1]); + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); if (!Residence.isPlayerExist(player, args[2], true)) return false; if (area != null) { @@ -2073,7 +2081,7 @@ private boolean commandResPset(String[] args, boolean resadmin, Player player, i private boolean commandResGset(String[] args, boolean resadmin, Player player, int page) { if (args.length == 4) { - ClaimedResidence area = Residence.rmanager.getByLoc(player.getLocation()); + ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); if (area != null) { area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); } else { @@ -2081,7 +2089,7 @@ private boolean commandResGset(String[] args, boolean resadmin, Player player, i } return true; } else if (args.length == 5) { - ClaimedResidence area = Residence.rmanager.getByName(args[1]); + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); if (area != null) { area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); } else { @@ -2098,10 +2106,10 @@ private boolean commandResLset(String[] args, boolean resadmin, Player player, i String listtype = null; boolean showinfo = false; if (args.length == 2 && args[1].equals("info")) { - res = Residence.rmanager.getByLoc(player.getLocation()); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); showinfo = true; } else if (args.length == 3 && args[2].equals("info")) { - res = Residence.rmanager.getByName(args[1]); + res = Residence.getResidenceManager().getByName(args[1]); showinfo = true; } if (showinfo) { @@ -2115,7 +2123,7 @@ private boolean commandResLset(String[] args, boolean resadmin, Player player, i res.getItemIgnoreList().printList(player); return true; } else if (args.length == 4) { - res = Residence.rmanager.getByName(args[1]); + res = Residence.getResidenceManager().getByName(args[1]); listtype = args[2]; try { mat = Material.valueOf(args[3].toUpperCase()); @@ -2124,7 +2132,7 @@ private boolean commandResLset(String[] args, boolean resadmin, Player player, i return true; } } else if (args.length == 3) { - res = Residence.rmanager.getByLoc(player.getLocation()); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); listtype = args[1]; try { mat = Material.valueOf(args[2].toUpperCase()); @@ -2155,14 +2163,14 @@ private boolean commandResBank(String[] args, boolean resadmin, CommandSender se ClaimedResidence res = null; if (args.length == 4) { - res = Residence.rmanager.getByName(args[2]); + res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return true; } } else { if (sender instanceof Player) - res = Residence.rmanager.getByLoc(((Player) sender).getLocation()); + res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); } if (res == null) { sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); @@ -2215,7 +2223,7 @@ private boolean commandResLease(String[] args, boolean resadmin, Player player, if (args.length == 3) { Residence.leasemanager.renewArea(args[2], player); } else { - Residence.leasemanager.renewArea(Residence.rmanager.getNameByLoc(player.getLocation()), player); + Residence.leasemanager.renewArea(Residence.getResidenceManager().getNameByLoc(player.getLocation()), player); } return true; } else if (args[1].equals("cost")) { @@ -2231,8 +2239,8 @@ private boolean commandResLease(String[] args, boolean resadmin, Player player, } return true; } else { - String area = Residence.rmanager.getNameByLoc(player.getLocation()); - ClaimedResidence res = Residence.rmanager.getByName(area); + String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByName(area); if (area == null || res == null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); return true; @@ -2382,7 +2390,7 @@ public void run() { } if (command.equals("info")) { if (args.length == 2) { - String areaname = Residence.rmanager.getNameByLoc(player.getLocation()); + String areaname = Residence.getResidenceManager().getNameByLoc(player.getLocation()); Residence.tmanager.viewSaleInfo(areaname, player); if (Residence.cmanager.enabledRentSystem() && Residence.rentmanager.isForRent(areaname)) { Residence.rentmanager.printRentInfo(player, areaname); @@ -2529,14 +2537,14 @@ private boolean commandResMessage(String[] args, boolean resadmin, Player player } if (args[1].equals("enter")) { enter = true; - res = Residence.rmanager.getByLoc(player.getLocation()); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); start = 2; } else if (args[1].equals("leave")) { - res = Residence.rmanager.getByLoc(player.getLocation()); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); start = 2; } else if (args[1].equals("remove")) { if (args.length > 2 && args[2].equals("enter")) { - res = Residence.rmanager.getByLoc(player.getLocation()); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { res.setEnterLeaveMessage(player, null, true, resadmin); } else { @@ -2544,7 +2552,7 @@ private boolean commandResMessage(String[] args, boolean resadmin, Player player } return true; } else if (args.length > 2 && args[2].equals("leave")) { - res = Residence.rmanager.getByLoc(player.getLocation()); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { res.setEnterLeaveMessage(player, null, false, resadmin); } else { @@ -2556,13 +2564,13 @@ private boolean commandResMessage(String[] args, boolean resadmin, Player player return true; } else if (args.length > 2 && args[2].equals("enter")) { enter = true; - res = Residence.rmanager.getByName(args[1]); + res = Residence.getResidenceManager().getByName(args[1]); start = 3; } else if (args.length > 2 && args[2].equals("leave")) { - res = Residence.rmanager.getByName(args[1]); + res = Residence.getResidenceManager().getByName(args[1]); start = 3; } else if (args.length > 2 && args[2].equals("remove")) { - res = Residence.rmanager.getByName(args[1]); + res = Residence.getResidenceManager().getByName(args[1]); if (args.length != 4) { return false; } @@ -2602,9 +2610,9 @@ private boolean commandResSublist(String[] args, boolean resadmin, Player player if (args.length == 1 || args.length == 2 || args.length == 3) { ClaimedResidence res; if (args.length == 1) { - res = Residence.rmanager.getByLoc(player.getLocation()); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); } else { - res = Residence.rmanager.getByName(args[1]); + res = Residence.getResidenceManager().getByName(args[1]); } if (res != null) { res.printSubzoneList(player, page); @@ -2628,10 +2636,10 @@ private boolean commandResCompass(String[] args, boolean resadmin, Player player return true; } - if (Residence.rmanager.getByName(args[1]) != null) { - if (Residence.rmanager.getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { - Location low = Residence.rmanager.getByName(args[1]).getArea("main").getLowLoc(); - Location high = Residence.rmanager.getByName(args[1]).getArea("main").getHighLoc(); + if (Residence.getResidenceManager().getByName(args[1]) != null) { + if (Residence.getResidenceManager().getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { + Location low = Residence.getResidenceManager().getByName(args[1]).getArea("main").getLowLoc(); + Location high = Residence.getResidenceManager().getByName(args[1]).getArea("main").getHighLoc(); Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high .getBlockZ()) / 2); player.setCompassTarget(mid); @@ -2646,7 +2654,7 @@ private boolean commandResCompass(String[] args, boolean resadmin, Player player private boolean commandResGui(String[] args, boolean resadmin, Player player, int page) { if (Residence.slistener != null) { if (args.length == 1) { - ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, Residence.rmanager.getNameByLoc(player.getLocation()), resadmin); + ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, Residence.getResidenceManager().getNameByLoc(player.getLocation()), resadmin); } else if (args.length == 2) { ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, args[1], resadmin); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 95e5fedbf..02145f749 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -16,6 +16,7 @@ import org.bukkit.entity.Snowman; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockDispenseEvent; @@ -38,6 +39,7 @@ import org.bukkit.event.block.BlockSpreadEvent; import org.bukkit.event.block.EntityBlockFormEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.inventory.ItemStack; /** @@ -49,6 +51,23 @@ public class ResidenceBlockListener implements Listener { private List MessageInformed = new ArrayList(); private List ResCreated = new ArrayList(); + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onTreeGrow(StructureGrowEvent event) { + ClaimedResidence startRes = Residence.getResidenceManager().getByLoc(event.getLocation()); + List blocks = event.getBlocks(); + int i = 0; + for (BlockState one : blocks) { + ClaimedResidence targetRes = Residence.getResidenceManager().getByLoc(one.getLocation()); + if (startRes == null && targetRes != null || + targetRes != null && startRes != null && !startRes.getName().equals(targetRes.getName()) && !startRes.getOwner().equals(targetRes.getOwner())) { + BlockState matas = blocks.get(i); + matas.setType(Material.AIR); + blocks.set(i, matas); + } + i++; + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { @@ -202,6 +221,7 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { + Player player = event.getPlayer(); if (Residence.isResAdminOn(player)) { return; @@ -309,6 +329,7 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockFromTo(BlockFromToEvent event) { + FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); boolean hasflow = perms.has("flow", true); Material mat = event.getBlock().getType(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index a2c2194d6..ff1d1e343 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -51,6 +51,7 @@ import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; +import org.bukkit.potion.PotionEffect; /** * @@ -363,7 +364,7 @@ public void onHangingPlace(HangingPlaceEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreak(HangingBreakEvent event) { - + if (!(event instanceof HangingBreakByEntityEvent)) return; @@ -511,6 +512,19 @@ public void onEntityExplode(EntityExplodeEvent event) { public void onSplashPotion(PotionSplashEvent event) { if (event.isCancelled()) return; + + boolean harmfull = false; + mein: for (PotionEffect one : event.getPotion().getEffects()) { + for (String oneHarm : Residence.getConfigManager().getNegativePotionEffects()) { + if (oneHarm.equalsIgnoreCase(one.getType().getName())) { + harmfull = true; + break mein; + } + } + } + if (!harmfull) + return; + Entity ent = event.getEntity(); boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); Iterator it = event.getAffectedEntities().iterator(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 04491d47a..2cce48e46 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.listeners; import java.util.ArrayList; @@ -41,7 +36,6 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerItemDamageEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; @@ -49,8 +43,6 @@ import org.bukkit.event.player.PlayerShearEntityEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; - import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.chat.ChatChannel; @@ -63,10 +55,6 @@ import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.utils.ActionBar; -/** - * - * @author Administrator - */ public class ResidencePlayerListener implements Listener { protected Map currentRes; @@ -377,21 +365,7 @@ public void run() { } } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onItemDamage(PlayerItemDamageEvent event) { - Player player = event.getPlayer(); - Location loc = player.getLocation(); - FlagPermissions perms = Residence.getPermsByLoc(loc); - if (perms.has("nodurability", false)) { - ItemStack held = player.getItemInHand(); - if (held.getType() != Material.AIR) { - held.setDurability(held.getDurability()); - player.setItemInHand(held); - event.setDamage(0); - event.setCancelled(true); - } - } - } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerSpawn(PlayerRespawnEvent event) { @@ -830,7 +804,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { } } - if (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) { + if (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND && Residence.getConfigManager().isBlockAnyTeleportation()) { if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { String areaname = res.getName(); event.setCancelled(true); @@ -859,7 +833,7 @@ public void onPlayerDeath(final PlayerDeathEvent event) { if (res.getPermissions().has("keepexp", false)) event.setKeepLevel(true); - if (res.getPermissions().has("respawn", false)) + if (res.getPermissions().has("respawn", false) && Bukkit.getVersion().toString().contains("Spigot")) Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { public void run() { try { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index b36ab5355..2a445ee39 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -16,6 +16,8 @@ import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.Debug; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -304,7 +306,9 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { + Debug.D("1"); player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + Debug.D("2"); return false; } if (parent != null) { @@ -318,7 +322,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } } PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (!group.canCreateResidences() && !player.hasPermission("residence.create")) { + if (!group.canCreateResidences() && !player.hasPermission("residence.resize")) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return false; } diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 36e32b815..2dd64f771 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -59,6 +59,7 @@ public void VersionCheck(final Player player) { public void run() { String currentVersion = plugin.getDescription().getVersion(); String newVersion = getNewVersion(); + Debug.D("new version: " + newVersion); if (newVersion == null || newVersion.equalsIgnoreCase(currentVersion)) return; List msg = Arrays.asList( @@ -82,7 +83,7 @@ public String getNewVersion() { con.setRequestMethod("POST"); con.getOutputStream().write(("key=98BE0FE67F88AB82B4C197FAF1DC3B69206EFDCC4D3B80FC83A00037510B99B4&resource=" + resource).getBytes("UTF-8")); String version = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine(); - if (version.length() <= 7) + if (version.length() <= 9) return version; } catch (Exception ex) { plugin.consoleMessage(ChatColor.RED + "Failed to check for " + plugin.getDescription().getName() + " update on spigot web page."); diff --git a/src/plugin.yml b/src/plugin.yml index a1acc5942..d545827e4 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.10.1.1 +version: 2.10.3.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -74,6 +74,9 @@ permissions: residence.select: description: Allows you to select an area to make residences default: true + residence.resize: + description: Allows you to resize an area + default: true residence.versioncheck: description: Notice to new version after connect default: op From b885ecd63cf131032284ff74df280fd699d05924 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 6 Feb 2016 11:37:45 +0200 Subject: [PATCH 0119/1142] and thos --- .../listeners/ResidenceFixesListener.java | 34 +++++++++++++++++++ .../residence/listeners/SpigotListener.java | 31 +++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java create mode 100644 src/com/bekvon/bukkit/residence/listeners/SpigotListener.java diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java new file mode 100644 index 000000000..4fe9cfa55 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java @@ -0,0 +1,34 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +public class ResidenceFixesListener implements Listener { + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onAnvilPlace(PlayerInteractEvent event) { + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + ItemStack iih = event.getPlayer().getItemInHand(); + if (iih == null || iih.getType() == Material.AIR || iih.getType() != Material.ANVIL) + return; + BlockFace face = event.getBlockFace(); + Block bclicked = event.getClickedBlock(); + if (bclicked == null) + return; + Location loc = new Location(bclicked.getWorld(), bclicked.getX() + face.getModX(), bclicked.getY() + face.getModY(), + bclicked.getZ() + face.getModZ()); + Block block = loc.getBlock(); + if (block == null || block.getType() == Material.AIR || block.getType() != Material.SKULL) + return; + event.setCancelled(true); + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java new file mode 100644 index 000000000..a89af6f3a --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java @@ -0,0 +1,31 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemDamageEvent; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; + +public class SpigotListener implements Listener { + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onItemDamage(PlayerItemDamageEvent event) { + Player player = event.getPlayer(); + Location loc = player.getLocation(); + FlagPermissions perms = Residence.getPermsByLoc(loc); + if (perms.has("nodurability", false)) { + ItemStack held = player.getItemInHand(); + if (held.getType() != Material.AIR) { + held.setDurability(held.getDurability()); + player.setItemInHand(held); + event.setDamage(0); + event.setCancelled(true); + } + } + } +} From 26cf6030bba4ce63f7dbbba3fa452c9847b8d3d7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 12 Feb 2016 17:09:55 +0200 Subject: [PATCH 0120/1142] Random teleportation in nether fix --- .../bukkit/residence/ConfigManager.java | 11 +++- .../bekvon/bukkit/residence/Residence.java | 11 ++++ .../residence/ResidenceCommandListener.java | 60 ++++++++++++++++++- .../selection/WorldEditSelectionManager.java | 1 + .../bukkit/residence/utils/RandomTp.java | 22 +++++-- 5 files changed, 96 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 5b620e6b5..f8fe2d336 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -494,7 +494,7 @@ void UpdateConfigFile() { for (String one : conf.getConfigurationSection("Global.RandomTeleportation").getKeys(false)) { String path = "Global.RandomTeleportation." + one + "."; - writer.addComment("Global.RandomTeleportation." + one, "World to use this function, set main residence world"); + writer.addComment("Global.RandomTeleportation." + one, "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); writer.addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); int MaxCoord = GetConfig(path + "MaxCoord", 1000, writer, conf); @@ -539,6 +539,7 @@ void UpdateConfigFile() { writer.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); autoSaveInt = GetConfig("Global.SaveInterval", 10, writer, conf); + // Auto remove old residences writer.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", "Players can bypass this wih residence.cleanbypass permission node"); AutoCleanUp = GetConfig("Global.AutoCleanUp.Use", false, writer, conf); @@ -546,6 +547,14 @@ void UpdateConfigFile() { AutoCleanUpDays = GetConfig("Global.AutoCleanUp.Days", 60, writer, conf); writer.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); AutoCleanUpWorlds = GetConfig("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + + writer.addComment("Global.LWC.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", + "Players can bypass this wih residence.cleanbypass permission node"); + AutoCleanUp = GetConfig("Global.AutoCleanUp.Use", false, writer, conf); + writer.addComment("Global.LWC.Days", "For how long player should be offline to delete hes LWC protection on residence removal"); + AutoCleanUpDays = GetConfig("Global.AutoCleanUp.Days", 60, writer, conf); + writer.addComment("Global.LWC.Worlds", "Worlds to be included in check list"); + AutoCleanUpWorlds = GetConfig("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); // Flow writer.addComment("Global.AntiGreef.Flow.Level", "Level from witch one to start lava and water flow blocking", "This dont have effect in residence area"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f21f43bfd..acd21eed0 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -76,6 +76,8 @@ import com.bekvon.bukkit.residence.utils.VersionChecker; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; import com.earth2me.essentials.Essentials; +import com.griefcraft.lwc.LWC; +import com.griefcraft.lwc.LWCPlugin; import com.residence.mcstats.Metrics; import com.residence.zip.ZipLibrary; import com.sk89q.worldedit.bukkit.WorldEditPlugin; @@ -159,6 +161,7 @@ public class Residence extends JavaPlugin { private static String TempUserUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"; private static NMS nms; + static LWC lwc; public static NMS getNms() { return nms; @@ -360,6 +363,10 @@ public void onEnable() { ShopSignUtilManager = new ShopSignUtil(this); RandomTpManager = new RandomTp(this); + Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); + if (lwcp != null) + lwc = ((LWCPlugin) lwcp).getLWC(); + for (String lang : validLanguages) { YmlMaker langFile = new YmlMaker((JavaPlugin) this, "Language" + File.separator + lang + ".yml"); if (langFile != null) { @@ -649,6 +656,10 @@ public static VersionChecker getVersionChecker() { return versionChecker; } + public static LWC getLwc() { + return lwc; + } + public static File getDataLocation() { return dataFolder; } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index a359f3f1c..95657b4f8 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -125,7 +125,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } } return false; - } else if (command.getName().equals("rc")) { + } else if (command.getName().equals("rc")) { if (!(sender instanceof Player)) return true; Player player = (Player) sender; @@ -367,7 +367,63 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com if (cmd.equals("confirm")) { return commandResConfirm(args, resadmin, sender, page); } - + + // Test code for area regeneration with WE plugin +// if (cmd.equals("test")) { +// final long time = System.currentTimeMillis(); +// +// ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); +// +// final CuboidArea area = res.getAreaArray()[0]; +// +// final int startX = area.getLowLoc().getBlockX(); +// final int startY = area.getLowLoc().getBlockY(); +// final int startZ = area.getLowLoc().getBlockZ(); +// +// final int lX = area.getXSize(); +// final int lY = area.getYSize(); +// final int lZ = area.getZSize(); +// Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), new Runnable() { +// @Override +// public void run() { +// int i = 0; +// +// List blocks = new ArrayList(); +// +// for (int x = startX; x < startX + lX; x++) { +// for (int y = startY; y < startY + lY; y++) { +// for (int z = startZ; z < startZ + lZ; z++) { +// +// Protection prot = Residence.getLwc().getProtectionCache().getProtection(area.getWorld().getName() + ":" + x + ":" + y + ":" + z); +// +// if (prot == null) +// continue; +// i++; +// +// Debug.D("" + prot.getOwner() + " " + prot.getFormattedOwnerPlayerName()); +// Debug.D("" + prot.getX() + ":" + prot.getY() + ":" + prot.getZ()); +// } +// } +// } +// +// Debug.D("baigtas test " + (System.currentTimeMillis() - time) + " " + i + " " + blocks.size()); +// +// return; +// } +// }); +// +// Selection selection = new CuboidSelection(this.getC1().getWorld(),this.getC1(), this.getC2()); +// +// CuboidSelection selection = new CuboidSelection(player.getWorld(), area.getLowLoc(), area.getHighLoc()); +// +// try { +// Region region = selection.getRegionSelector().getRegion(); +// region.getWorld().regenerate(region, WorldEdit.getInstance().getEditSessionFactory().getEditSession(region.getWorld(), -1)); +// } catch (IncompleteRegionException e) { +// } +// +// return true; +// } if (cmd.equals("version")) { sender.sendMessage(ChatColor.GRAY + "------------------------------------"); sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + this diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 1acec1c6d..29eb62017 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -28,6 +28,7 @@ public WorldEditSelectionManager(Server serv, Residence plugin) { public boolean worldEdit(Player player) { WorldEditPlugin wep = (WorldEditPlugin) this.server.getPluginManager().getPlugin("WorldEdit"); Selection sel = wep.getSelection(player); + if (sel != null) { Location pos1 = sel.getMinimumPoint(); Location pos2 = sel.getMaximumPoint(); diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index d2dc12873..a8a3a4987 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -7,6 +7,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.World.Environment; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -79,19 +80,28 @@ public static Location getRandomlocation(String WorldName) { loc = new Location(world, x, world.getMaxHeight(), z); - int from = (int) loc.getY(); - for (int i = 0; i < loc.getWorld().getMaxHeight(); i++) { - loc.setY(from - i); + int max = loc.getWorld().getMaxHeight(); + max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; + + for (int i = max; i > 0; i--) { + loc.setY(i); Block block = loc.getBlock(); - if (!Residence.getNms().isEmptyBlock(block)) { + Block block2 = loc.clone().add(0, 1, 0).getBlock(); + Block block3 = loc.clone().add(0, -1, 0).getBlock(); + if (!Residence.getNms().isEmptyBlock(block3) && Residence.getNms().isEmptyBlock(block) && Residence.getNms().isEmptyBlock(block2)) { break; } } - if (loc.getBlock().getState().getType() == Material.LAVA || loc.getBlock().getState().getType() == Material.STATIONARY_LAVA) + if (!Residence.getNms().isEmptyBlock(loc.getBlock())) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA || loc.clone().add(0, -1, 0).getBlock().getState() + .getType() == Material.STATIONARY_LAVA) continue; - if (loc.getBlock().getState().getType() == Material.WATER || loc.getBlock().getState().getType() == Material.STATIONARY_WATER) + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER || loc.clone().add(0, -1, 0).getBlock().getState() + .getType() == Material.STATIONARY_WATER) continue; ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); From 7f4353d18a05b3c5a2a29c499dc1cbc611c2f81e Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 16 Feb 2016 18:22:05 +0200 Subject: [PATCH 0121/1142] Fixes --- .../bekvon/bukkit/residence/Residence.java | 52 +++++++++---- .../residence/ResidenceCommandListener.java | 17 ++-- .../listeners/ResidencePlayerListener.java | 7 +- .../protection/ResidenceManager.java | 78 ++++++++++--------- .../bukkit/residence/text/Language.java | 7 +- src/plugin.yml | 2 +- 6 files changed, 98 insertions(+), 65 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index acd21eed0..c0aeee750 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -455,20 +455,35 @@ public void onEnable() { } } - Bukkit.getConsoleSender().sendMessage("[Residence] Loading (" + Bukkit.getOfflinePlayers().length + ") player data"); - for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { - if (player == null) - continue; - - String name = player.getName(); - if (name == null) - continue; - - getOfflinePlayerMap().put(name.toLowerCase(), player); + // Only fill if we need to convert player data + if (getConfigManager().isUUIDConvertion()) { + Bukkit.getConsoleSender().sendMessage("[Residence] Loading (" + Bukkit.getOfflinePlayers().length + ") player data"); + for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { + if (player == null) + continue; + String name = player.getName(); + if (name == null) + continue; + getOfflinePlayerMap().put(name.toLowerCase(), player); + } + Bukkit.getConsoleSender().sendMessage("[Residence] Player data loaded: " + getOfflinePlayerMap().size()); + } else { + Bukkit.getScheduler().runTaskAsynchronously(Residence.this, new Runnable() { + @Override + public void run() { + for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { + if (player == null) + continue; + String name = player.getName(); + if (name == null) + continue; + getOfflinePlayerMap().put(name.toLowerCase(), player); + } + return; + } + }); } - Bukkit.getConsoleSender().sendMessage("[Residence] Player data loaded: " + getOfflinePlayerMap().size()); - if (rmanager == null) { rmanager = new ResidenceManager(this); } @@ -983,11 +998,15 @@ protected boolean loadYml() throws Exception { loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); if (loadFile.isFile()) { time = System.currentTimeMillis(); -// this.getLogger().info("Loading save data for world " + world.getName() + "..."); + this.getLogger().info("Loading save data for world " + world.getName() + "..."); yml = new YMLSaveHelper(loadFile); yml.load(); worlds.put(world.getName(), yml.getRoot().get("Residences")); - this.getLogger().info("Reading " + world.getName() + " data. (" + (System.currentTimeMillis() - time) + " ms)"); + + int pass = (int) (System.currentTimeMillis() - time); + String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; + + this.getLogger().info("Loaded " + world.getName() + " data. (" + PastTime + ")"); } } @@ -1290,7 +1309,10 @@ public static OfflinePlayer getOfflinePlayer(String Name) { if (OfflinePlayerList.containsKey(Name.toLowerCase())) { return getOfflinePlayerMap().get(Name.toLowerCase()); } - return Bukkit.getOfflinePlayer(Name); + OfflinePlayer offPlayer = Bukkit.getOfflinePlayer(Name); + if (offPlayer != null) + getOfflinePlayerMap().put(Name.toLowerCase(), offPlayer); + return offPlayer; } public static String getPlayerUUIDString(String playername) { diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 95657b4f8..090230d58 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -367,7 +367,7 @@ private boolean commandRes(String[] args, boolean resadmin, Command command, Com if (cmd.equals("confirm")) { return commandResConfirm(args, resadmin, sender, page); } - + // Test code for area regeneration with WE plugin // if (cmd.equals("test")) { // final long time = System.currentTimeMillis(); @@ -602,27 +602,34 @@ public void run() { return false; } if (cmd.equals("padd")) { + String baseCmd = "res"; + if (resadmin) + baseCmd = "resadmin"; if (args.length == 2) { if (!Residence.isPlayerExist(player, args[1], true)) return false; - Bukkit.dispatchCommand(player, "res pset " + args[1] + " trusted true"); + + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " trusted true"); return true; } if (args.length == 3) { if (!Residence.isPlayerExist(player, args[2], true)) return false; - Bukkit.dispatchCommand(player, "res pset " + args[1] + " " + args[2] + " trusted true"); + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " " + args[2] + " trusted true"); return true; } return false; } if (cmd.equals("pdel")) { + String baseCmd = "res"; + if (resadmin) + baseCmd = "resadmin"; if (args.length == 2) { - Bukkit.dispatchCommand(player, "res pset " + args[1] + " trusted remove"); + Bukkit.dispatchCommand(player, baseCmd + " pset" + args[1] + " trusted remove"); return true; } if (args.length == 3) { - Bukkit.dispatchCommand(player, "res pset " + args[1] + " " + args[2] + " trusted remove"); + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " " + args[2] + " trusted remove"); return true; } return false; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 2cce48e46..ea9910f48 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -11,6 +11,7 @@ import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.OfflinePlayer; import org.bukkit.block.Block; import org.bukkit.block.Sign; import org.bukkit.entity.Damageable; @@ -335,9 +336,7 @@ public void onPlayerQuit(PlayerQuitEvent event) { lastOutsideLoc.remove(pname); Residence.getChatManager().removeFromChannel(pname); Residence.getPlayerListener().removePlayerResidenceChat(pname); - - Residence.getOfflinePlayerMap().put(pname, event.getPlayer()); - + Residence.getOfflinePlayerMap().put(pname, (OfflinePlayer) event.getPlayer()); if (AutoSelection.getList().containsKey(pname.toLowerCase())) AutoSelection.getList().remove(pname); } @@ -365,8 +364,6 @@ public void run() { } } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerSpawn(PlayerRespawnEvent event) { Location loc = event.getRespawnLocation(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 25fe3aad2..3a36b2f2e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -672,6 +672,7 @@ public ResidenceManager load(Map root) throws Exception { long time = System.currentTimeMillis(); @SuppressWarnings("unchecked") Map reslist = (Map) root.get(world.getName()); + plugin.getLogger().info("Loading " + world.getName() + " data into memory..."); if (reslist != null) { try { resm.chunkResidences.put(world.getName(), loadMap(world.getName(), reslist, resm)); @@ -681,53 +682,60 @@ public ResidenceManager load(Map root) throws Exception { throw (ex); } } - plugin.getLogger().info("Loading " + world.getName() + " data into memory. (" + (System.currentTimeMillis() - time) + " ms)"); + + long pass = System.currentTimeMillis() - time; + String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; + + plugin.getLogger().info("Loaded " + world.getName() + " data into memory. (" + PastTime + ")"); } return resm; } public Map> loadMap(String worldName, Map root, ResidenceManager resm) throws Exception { Map> retRes = new HashMap<>(); - if (root != null) { - int i = 0; - int y = 0; - for (Entry res : root.entrySet()) { - if (i == 100 & Residence.getConfigManager().isUUIDConvertion()) - Bukkit.getConsoleSender().sendMessage("[Residence] " + worldName + " UUID conversion done: " + y + " of " + root.size()); - if (i >= 100) - i = 0; - i++; - y++; - try { - @SuppressWarnings("unchecked") - ClaimedResidence residence = ClaimedResidence.load((Map) res.getValue(), null, plugin); - if (residence.getPermissions().getOwnerUUID().toString().equals(Residence.getServerLandUUID()) && !residence.getOwner().equalsIgnoreCase( - "Server land") && !residence.getOwner().equalsIgnoreCase(Residence.getServerLandname())) - continue; - - if (residence.getOwner().equalsIgnoreCase("Server land")) { - residence.getPermissions().setOwner(Residence.getServerLandname(), false); - } + if (root == null) + return retRes; + + int i = 0; + int y = 0; + for (Entry res : root.entrySet()) { + if (i == 100 & Residence.getConfigManager().isUUIDConvertion()) + Bukkit.getConsoleSender().sendMessage("[Residence] " + worldName + " UUID conversion done: " + y + " of " + root.size()); + if (i >= 100) + i = 0; + i++; + y++; + try { + @SuppressWarnings("unchecked") + ClaimedResidence residence = ClaimedResidence.load((Map) res.getValue(), null, plugin); + if (residence.getPermissions().getOwnerUUID().toString().equals(Residence.getServerLandUUID()) && + !residence.getOwner().equalsIgnoreCase("Server land") && + !residence.getOwner().equalsIgnoreCase(Residence.getServerLandname())) + continue; + + if (residence.getOwner().equalsIgnoreCase("Server land")) { + residence.getPermissions().setOwner(Residence.getServerLandname(), false); + } - for (ChunkRef chunk : getChunks(residence)) { - List ress = new ArrayList<>(); - if (retRes.containsKey(chunk)) { - ress.addAll(retRes.get(chunk)); - } - ress.add(res.getKey()); - retRes.put(chunk, ress); + for (ChunkRef chunk : getChunks(residence)) { + List ress = new ArrayList<>(); + if (retRes.containsKey(chunk)) { + ress.addAll(retRes.get(chunk)); } + ress.add(res.getKey()); + retRes.put(chunk, ress); + } - resm.residences.put(res.getKey(), residence); - } catch (Exception ex) { - System.out.print("[Residence] Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:"); - Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); - if (Residence.getConfigManager().stopOnSaveError()) { - throw (ex); - } + resm.residences.put(res.getKey(), residence); + } catch (Exception ex) { + System.out.print("[Residence] Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); + if (Residence.getConfigManager().stopOnSaveError()) { + throw (ex); } } } + return retRes; } diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index 01ac6c0dc..b732ffb8e 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -9,7 +9,6 @@ import java.util.Map; import java.util.Set; import org.bukkit.configuration.file.FileConfiguration; - import org.bukkit.ChatColor; /** @@ -72,19 +71,19 @@ public String getPhrase(String[] keys, String[] words) { } if (words != null) { for (int i = 0; i < words.length; i++) { - sentence = sentence.replaceAll("%" + (i + 1), words[i]); + sentence = sentence.replace("%" + (i + 1), words[i]); } } sentence = ChatColor.translateAlternateColorCodes('&', sentence); - + return sentence; } public static Language parseText(FileConfiguration node, String topkey) { Language newholder = new Language(); Set keys = node.getConfigurationSection(topkey).getKeys(false); - for (String key : keys) { + for (String key : keys) { newholder.text.put(key, node.getString(topkey + "." + key)); } return newholder; diff --git a/src/plugin.yml b/src/plugin.yml index d545827e4..6ddf41f1b 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.10.3.1 +version: 2.10.3.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From d176922d1bdc43a228cb56a631c32b31533e3c8c Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 17 Feb 2016 10:54:24 +0200 Subject: [PATCH 0122/1142] Small fix for /res shop votes --- .../residence/ResidenceCommandListener.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 090230d58..512a990d0 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1033,21 +1033,34 @@ public void run() { return true; } vote = Residence.getConfigManager().getVoteRangeTo(); - } else if (!Residence.getConfigManager().isOnlyLike()) { - + } else if (args.length == 4 && !Residence.getConfigManager().isOnlyLike()) { res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { player.sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); return true; } - try { vote = Integer.parseInt(args[3]); } catch (Exception ex) { player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); return true; } + } else if (args.length == 3 && !Residence.getConfigManager().isOnlyLike()) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); + return true; + } + try { + vote = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); + return true; + } + } else { + return false; } + resName = res.getName(); if (!res.getPermissions().has("shop", false)) { From 728e5c49f005b7ce08031f0743e9bd4f4f19ef4c Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 19 Feb 2016 12:48:04 +0200 Subject: [PATCH 0123/1142] new flag dye/pdel fix/changes in player interact listener --- src/com/bekvon/bukkit/residence/Locale.java | 6 + src/com/bekvon/bukkit/residence/NMS.java | 8 +- .../residence/ResidenceCommandListener.java | 2 +- .../bekvon/bukkit/residence/allNms/v1_7.java | 4 + .../residence/allNms/v1_7_Couldron.java | 4 + .../bekvon/bukkit/residence/allNms/v1_8.java | 6 +- .../bukkit/residence/containers/GuiItems.java | 1 + .../listeners/ResidencePlayerListener.java | 187 ++++++++++++------ .../residence/protection/FlagPermissions.java | 1 + src/plugin.yml | 2 +- 10 files changed, 152 insertions(+), 69 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index 991e788ee..eac6ed658 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -736,6 +736,12 @@ public void LoadLang(String lang) { "allows or denys sheep shear", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shear.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // dye + FlagList.add("dye"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dye.Description", + "allows or denys sheep dyeing", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dye.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // leash FlagList.add("leash"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.leash.Description", diff --git a/src/com/bekvon/bukkit/residence/NMS.java b/src/com/bekvon/bukkit/residence/NMS.java index 9f2a6b374..638b538c7 100644 --- a/src/com/bekvon/bukkit/residence/NMS.java +++ b/src/com/bekvon/bukkit/residence/NMS.java @@ -17,14 +17,16 @@ public interface NMS { public boolean isAnimal(Entity ent); public boolean isArmorStandEntity(EntityType entityType); - + public boolean isArmorStandMaterial(Material material); public boolean isCanUseEntity_BothClick(Material mat, Block block); - + public boolean isEmptyBlock(Block block); public boolean isSpectator(GameMode mode); - + public void addDefaultFlags(Map matUseFlagList); + + public boolean isPlate(Material mat); } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 512a990d0..011ae2d85 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -625,7 +625,7 @@ public void run() { if (resadmin) baseCmd = "resadmin"; if (args.length == 2) { - Bukkit.dispatchCommand(player, baseCmd + " pset" + args[1] + " trusted remove"); + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " trusted remove"); return true; } if (args.length == 3) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index 51d70ec5a..32c557176 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -98,4 +98,8 @@ public boolean isSpectator(GameMode mode) { @Override public void addDefaultFlags(Map matUseFlagList) { } + + public boolean isPlate(Material mat) { + return false; + } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index c4179a6cf..087a49707 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -98,4 +98,8 @@ public boolean isSpectator(GameMode mode) { @Override public void addDefaultFlags(Map matUseFlagList) { } + + public boolean isPlate(Material mat) { + return false; + } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java index f81005d54..fe3e39421 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8.java @@ -29,7 +29,7 @@ public class v1_8 implements NMS { @Override public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); + List blocks = new ArrayList(); blocks.addAll(event.getBlocks()); return blocks; } @@ -125,4 +125,8 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, "door"); matUseFlagList.put(Material.IRON_TRAPDOOR, "door"); } + + public boolean isPlate(Material mat) { + return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; + } } diff --git a/src/com/bekvon/bukkit/residence/containers/GuiItems.java b/src/com/bekvon/bukkit/residence/containers/GuiItems.java index a4eaa1850..590b06819 100644 --- a/src/com/bekvon/bukkit/residence/containers/GuiItems.java +++ b/src/com/bekvon/bukkit/residence/containers/GuiItems.java @@ -64,6 +64,7 @@ public enum GuiItems { snowtrail(78, 0), sanimals(383, 101), shear(359, 0), + dye(351, 14), smonsters(383, 54), subzone(160, 7), table(58, 0), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ea9910f48..a12cea71b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -450,104 +450,148 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { } } - @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteract(PlayerInteractEvent event) { - Player player = event.getPlayer(); - Material heldItem = player.getItemInHand().getType(); - int heldItemId = player.getItemInHand().getTypeId(); + public void onPlatePress(PlayerInteractEvent event) { + if (event.getAction() != Action.PHYSICAL) + return; Block block = event.getClickedBlock(); if (block == null) return; - - int blockId = block.getTypeId(); - Material mat = block.getType(); - if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || Residence.getNms() - .isCanUseEntity_BothClick(mat, block) - || event.getAction() == Action.PHYSICAL)) { - if (heldItemId != Residence.getConfigManager().getSelectionTooldID() && heldItemId != Residence.getConfigManager().getInfoToolID() && heldItemId != 351 - && heldItemId != 416) { - return; - } - } - + Player player = event.getPlayer(); FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); String world = player.getWorld().getName(); - String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); boolean resadmin = Residence.isResAdminOn(player); - if (event.getAction() == Action.PHYSICAL) { - if (!resadmin) { - boolean hasuse = perms.playerHas(player.getName(), world, "use", true); - boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse); - if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE)) { - event.setCancelled(true); - return; - } - } - if (!perms.playerHas(player.getName(), world, "trample", perms.playerHas(player.getName(), world, "build", true)) && (mat == Material.SOIL - || mat == Material.SOUL_SAND)) { + if (!resadmin) { + boolean hasuse = perms.playerHas(player.getName(), world, "use", true); + boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse); + if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE || Residence.getNms().isPlate(mat))) { event.setCancelled(true); return; } - return; } - if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); + if (!perms.playerHas(player.getName(), world, "trample", perms.playerHas(player.getName(), world, "build", true)) && (mat == Material.SOIL + || mat == Material.SOUL_SAND)) { event.setCancelled(true); return; } + return; + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onSelection(PlayerInteractEvent event) { if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; - if (heldItemId == Residence.getConfigManager().getSelectionTooldID()) { - if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) - return; - if (player.getGameMode() == GameMode.CREATIVE) - event.setCancelled(true); + Player player = event.getPlayer(); + @SuppressWarnings("deprecation") + int heldItemId = player.getItemInHand().getTypeId(); - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group - .canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { - if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc1(player, loc, true); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED - + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); - event.setCancelled(true); - } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc2(player, loc, true); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED - + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); - event.setCancelled(true); - } + if (heldItemId != Residence.getConfigManager().getSelectionTooldID()) + return; + + if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) + return; + + if (player.getGameMode() == GameMode.CREATIVE) + event.setCancelled(true); + + boolean resadmin = Residence.isResAdminOn(player); + + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group + .canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) - Residence.getSelectionManager().showSelectionInfoInActionBar(player); + Block block = event.getClickedBlock(); + + if (event.getAction() == Action.LEFT_CLICK_BLOCK) { + Location loc = block.getLocation(); + Residence.getSelectionManager().placeLoc1(player, loc, true); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED + + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + event.setCancelled(true); + } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + Location loc = block.getLocation(); + Residence.getSelectionManager().placeLoc2(player, loc, true); + player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED + + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + event.setCancelled(true); } + + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) + Residence.getSelectionManager().showSelectionInfoInActionBar(player); + } + return; + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onInfoCheck(PlayerInteractEvent event) { + if (event.getAction() != Action.LEFT_CLICK_BLOCK) return; + Block block = event.getClickedBlock(); + if (block == null) + return; + Player player = event.getPlayer(); + @SuppressWarnings("deprecation") + int heldItemId = player.getItemInHand().getTypeId(); + + if (heldItemId != Residence.getConfigManager().getInfoToolID()) + return; + + Location loc = block.getLocation(); + String res = Residence.getResidenceManager().getNameByLoc(loc); + if (res != null) + Residence.getResidenceManager().printAreaInfo(res, player); + else + player.sendMessage(Residence.getLanguage().getPhrase("NoResHere")); + event.setCancelled(true); + return; + + } + + @SuppressWarnings("deprecation") + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteract(PlayerInteractEvent event) { + Player player = event.getPlayer(); + int heldItemId = player.getItemInHand().getTypeId(); + Block block = event.getClickedBlock(); + if (block == null) + return; + + Material mat = block.getType(); + if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK + || Residence.getNms().isCanUseEntity_BothClick(mat, block))) { + if (heldItemId != Residence.getConfigManager().getSelectionTooldID() && heldItemId != Residence.getConfigManager().getInfoToolID() && heldItemId != 351 + && heldItemId != 416) { + return; + } } - if (heldItemId == Residence.getConfigManager().getInfoToolID() && event.getAction() == Action.LEFT_CLICK_BLOCK) { - Location loc = block.getLocation(); - String res = Residence.getResidenceManager().getNameByLoc(loc); - if (res != null) - Residence.getResidenceManager().printAreaInfo(res, player); - else - player.sendMessage(Residence.getLanguage().getPhrase("NoResHere")); + if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + String world = player.getWorld().getName(); + String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); + boolean resadmin = Residence.isResAdminOn(player); + Material heldItem = player.getItemInHand().getType(); + if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); event.setCancelled(true); + return; } if (resadmin) return; + int blockId = block.getTypeId(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); if (heldItem != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (heldItemId == 351) { if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS || player.getItemInHand().getData().getData() == 3 && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player.getName(), world, "build", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "build")); event.setCancelled(true); return; } @@ -618,13 +662,30 @@ public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { if (ent.getType() != EntityType.VILLAGER) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getPlayer().getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "trade")); event.setCancelled(true); } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + Entity ent = event.getRightClicked(); + /* Dye */ + if (ent.getType() != EntityType.SHEEP) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + if (res != null && !res.getPermissions().playerHas(player.getName(), "dye", true)) { + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "dye")); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index e102cc7aa..5538000da 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -150,6 +150,7 @@ public static void initValidFlags() { addFlag("command"); addFlag("chat"); + addFlag("dye"); addResidenceOnlyFlag("trample"); addResidenceOnlyFlag("pvp"); diff --git a/src/plugin.yml b/src/plugin.yml index 6ddf41f1b..654ec42c7 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.10.3.5 +version: 2.10.4.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 381f262f42961bad4b4212a70da4458086886d36 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 25 Feb 2016 15:46:52 +0200 Subject: [PATCH 0124/1142] enderpearl flag / correct teleport location by x/y/z --- src/com/bekvon/bukkit/residence/Locale.java | 6 ++++++ .../bukkit/residence/containers/GuiItems.java | 1 + .../listeners/ResidencePlayerListener.java | 10 ++++++++-- .../protection/ClaimedResidence.java | 19 +++++++++++-------- .../residence/protection/FlagPermissions.java | 2 ++ 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/Locale.java index eac6ed658..4b255b50f 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/Locale.java @@ -646,6 +646,12 @@ public void LoadLang(String lang) { "allow or disallow teleporting to the residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tp.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + // enderpearl + FlagList.add("enderpearl"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enderpearl.Description", + "allow or disallow teleporting to the residence with enderpearl", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enderpearl.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); // admin FlagList.add("admin"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.admin.Description", diff --git a/src/com/bekvon/bukkit/residence/containers/GuiItems.java b/src/com/bekvon/bukkit/residence/containers/GuiItems.java index 590b06819..38bebb251 100644 --- a/src/com/bekvon/bukkit/residence/containers/GuiItems.java +++ b/src/com/bekvon/bukkit/residence/containers/GuiItems.java @@ -29,6 +29,7 @@ public enum GuiItems { door(324, 0), enchant(116, 0), explode(407, 0), + enderpearl(368, 0), feed(364, 0), fireball(385, 0), firespread(377, 0), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index a12cea71b..8e3f177a7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -852,7 +852,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); if (res != null) { - if (event.getCause() == TeleportCause.ENDER_PEARL || event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event + if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { String areaname = res.getName(); if (!res.getPermissions().playerHas(player.getName(), "move", true)) { @@ -860,8 +860,14 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", areaname)); return; } + } else if (event.getCause() == TeleportCause.ENDER_PEARL) { + String areaname = res.getName(); + if (!res.getPermissions().playerHas(player.getName(), "enderpearl", true)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "enderpearl|" + areaname)); + return; + } } - if (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND && Residence.getConfigManager().isBlockAnyTeleportation()) { if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { String areaname = res.getName(); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 2a445ee39..3280a1ab1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -18,6 +18,8 @@ import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.Debug; +import java.text.DecimalFormat; +import java.text.NumberFormat; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -1023,13 +1025,14 @@ public Map save() { } root.put("Subzones", subzonemap); root.put("Permissions", perms.save()); + DecimalFormat formatter = new DecimalFormat("#0.00"); if (tpLoc != null) { Map tpmap = new HashMap<>(); - tpmap.put("X", tpLoc.getBlockX()); - tpmap.put("Y", tpLoc.getBlockY()); - tpmap.put("Z", tpLoc.getBlockZ()); - tpmap.put("Pitch", tpLoc.getPitch()); - tpmap.put("Yaw", tpLoc.getYaw()); + tpmap.put("X", Double.valueOf(formatter.format(tpLoc.getX()))); + tpmap.put("Y", Double.valueOf(formatter.format(tpLoc.getY()))); + tpmap.put("Z", Double.valueOf(formatter.format(tpLoc.getZ()))); + tpmap.put("Pitch", Double.valueOf(formatter.format(tpLoc.getPitch()))); + tpmap.put("Yaw", Double.valueOf(formatter.format(tpLoc.getYaw()))); root.put("TPLoc", tpmap); } return root; @@ -1087,12 +1090,12 @@ public static ClaimedResidence load(Map root, ClaimedResidence p double yaw = 0.0; if (tploc.containsKey("Yaw")) - yaw = (double) tploc.get("Yaw"); + yaw = Double.valueOf(tploc.get("Yaw").toString()); if (tploc.containsKey("Pitch")) - pitch = (double) tploc.get("Pitch"); + pitch = Double.valueOf(tploc.get("Pitch").toString()); - res.tpLoc = new Location(world, (Integer) tploc.get("X"), (Integer) tploc.get("Y"), (Integer) tploc.get("Z")); + res.tpLoc = new Location(world, Double.valueOf(tploc.get("X").toString()), Double.valueOf(tploc.get("Y").toString()), Double.valueOf(tploc.get("Z").toString())); res.tpLoc.setPitch((float) pitch); res.tpLoc.setYaw((float) yaw); } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 5538000da..911d65788 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -151,6 +151,8 @@ public static void initValidFlags() { addFlag("chat"); addFlag("dye"); + + addFlag("enderpearl"); addResidenceOnlyFlag("trample"); addResidenceOnlyFlag("pvp"); From f233db94fb064226f7ed1eed28b1d0dc0879103b Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 25 Feb 2016 15:51:05 +0200 Subject: [PATCH 0125/1142] Spacing --- .../residence/protection/ResidenceManager.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 3a36b2f2e..f975760c1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -596,23 +596,23 @@ public void printAreaInfo(String areaname, Player player) { Residence.sendMessage(player, msg); Residence.sendMessage(player, "&6" + lm.getMessage("Flags") + ": &9" + perms.listFlags()); - Residence.sendMessage(player, "&6" + lm.getMessage("Your") + lm.getMessage("Flags") + ": &2" + perms.listPlayerFlags(player.getName())); + Residence.sendMessage(player, "&6" + lm.getMessage("Your") + " " + lm.getMessage("Flags") + ": &2" + perms.listPlayerFlags(player.getName())); String groupFlags = perms.listGroupFlags(); if (groupFlags.length() > 0) - Residence.sendMessage(player, "&6" + lm.getMessage("Group") + lm.getMessage("Flags") + ": &c" + groupFlags); + Residence.sendMessage(player, "&6" + lm.getMessage("Group") + " " + lm.getMessage("Flags") + ": &c" + groupFlags); if (!Residence.getConfigManager().isShortInfoUse()) - Residence.sendMessage(player, "&6" + lm.getMessage("Others") + lm.getMessage("Flags") + ": &c" + perms.listOtherPlayersFlags(player.getName())); + Residence.sendMessage(player, "&6" + lm.getMessage("Others") + " " + lm.getMessage("Flags") + ": &c" + perms.listOtherPlayersFlags(player.getName())); else { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + perms.listOtherPlayersFlagsRaw("&e" + - lm.getMessage("Others") + lm.getMessage("Flags") + ": ", player.getName())); + lm.getMessage("Others") + " " + lm.getMessage("Flags") + ": ", player.getName())); } msg = ""; if (aid != null) { msg += "&e" + lm.getMessage("CurrentArea") + ": &6" + aid + " "; } - msg += "&e" + lm.getMessage("Total") + lm.getMessage("Size") + ": &6" + res.getTotalSize(); + msg += "&e" + lm.getMessage("Total") + " " + lm.getMessage("Size") + ": &6" + res.getTotalSize(); Residence.sendMessage(player, msg); @@ -682,7 +682,7 @@ public ResidenceManager load(Map root) throws Exception { throw (ex); } } - + long pass = System.currentTimeMillis() - time; String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; From f71cb3193ab6341c49f60c9a2784b1fba7e17429 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 25 Feb 2016 18:33:17 +0200 Subject: [PATCH 0126/1142] Case sensitive res names --- .../residence/ResidenceCommandListener.java | 17 +---- .../residence/economy/rent/RentManager.java | 31 +++++++++- .../protection/ClaimedResidence.java | 5 -- .../protection/ResidenceManager.java | 62 +++++++++---------- 4 files changed, 61 insertions(+), 54 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 011ae2d85..8e17ca550 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1276,10 +1276,6 @@ public void run() { return false; } ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (Residence.getConfigManager().isResTpCaseSensitive()) - res = Residence.getResidenceManager().getByName(args[1]); - else - res = Residence.getResidenceManager().getByNameNoCase(args[1]); if (res == null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); @@ -1435,10 +1431,7 @@ private boolean commandResExpand(String[] args, boolean resadmin, Player player, if (args.length == 2) res = Residence.getResidenceManager().getByLoc(player.getLocation()); else if (args.length == 3) { - if (!Residence.getConfigManager().isResTpCaseSensitive()) - res = Residence.getResidenceManager().getByNameNoCase(args[1]); - else - res = Residence.getResidenceManager().getByName(args[1]); + res = Residence.getResidenceManager().getByName(args[1]); } else return false; @@ -1520,10 +1513,7 @@ private boolean commandResContract(String[] args, boolean resadmin, Player playe if (args.length == 2) res = Residence.getResidenceManager().getByLoc(player.getLocation()); else if (args.length == 3) - if (!Residence.getConfigManager().isResTpCaseSensitive()) - res = Residence.getResidenceManager().getByNameNoCase(args[1]); - else - res = Residence.getResidenceManager().getByName(args[1]); + res = Residence.getResidenceManager().getByName(args[1]); else return false; if (res == null) { @@ -1760,8 +1750,7 @@ private boolean commandResCreate(String[] args, boolean resadmin, Player player, if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) == null) { Residence.getResidenceManager().addResidence(player, args[1], Residence.smanager.getPlayerLoc1(player.getName()), Residence.smanager.getPlayerLoc2(player - .getName()), - resadmin); + .getName()), resadmin); return true; } else if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) != null) { ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index bd37a11da..53d9c5368 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -34,6 +34,8 @@ public RentManager() { } public RentedLand getRentedLand(String name) { + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + name = name.toLowerCase(); return rentedLand.containsKey(name) ? rentedLand.get(name) : null; } @@ -81,6 +83,9 @@ public void setForRent(Player player, String landName, int amount, int days, boo return; } } + + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + landName = landName.toLowerCase(); if (!rentableLand.containsKey(landName)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENTABLE); Residence.getServ().getPluginManager().callEvent(revent); @@ -129,10 +134,12 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi String[] split = landName.split("\\."); if (split.length != 0) player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED - + "|" - + ChatColor.YELLOW + this.getRentingPlayer(landName))); + + "|" + ChatColor.YELLOW + this.getRentingPlayer(landName))); return; } + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + landName = landName.toLowerCase(); + RentableLand land = rentableLand.get(landName); if (Residence.getEconomyManager().canAfford(player.getName(), land.cost)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); @@ -210,6 +217,8 @@ public void unrent(Player player, String landName, boolean resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return; } + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + landName = landName.toLowerCase(); if (rentedLand.containsKey(landName) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + landName + ChatColor.RED + "|" + ChatColor.YELLOW + rentedLand.get(landName).player) + ChatColor.YELLOW); @@ -248,30 +257,44 @@ public void removeRentable(String landName) { } public boolean isForRent(String landName) { + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + landName = landName.toLowerCase(); return rentableLand.containsKey(landName); } public boolean isRented(String landName) { + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + landName = landName.toLowerCase(); return rentedLand.containsKey(landName); } public String getRentingPlayer(String landName) { + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + landName = landName.toLowerCase(); return rentedLand.containsKey(landName) ? rentedLand.get(landName).player : null; } public int getCostOfRent(String landName) { + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + landName = landName.toLowerCase(); return rentableLand.containsKey(landName) ? rentableLand.get(landName).cost : 0; } public boolean getRentableRepeatable(String landName) { + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + landName = landName.toLowerCase(); return rentableLand.containsKey(landName) ? rentableLand.get(landName).repeatable : false; } public boolean getRentedAutoRepeats(String landName) { + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + landName = landName.toLowerCase(); return getRentableRepeatable(landName) ? (rentedLand.containsKey(landName) ? rentedLand.get(landName).autoRefresh : false) : false; } public int getRentDays(String landName) { + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + landName = landName.toLowerCase(); return rentableLand.containsKey(landName) ? rentableLand.get(landName).days : 0; } @@ -400,6 +423,10 @@ public Map save() { } public void updateRentableName(String oldName, String newName) { + if (!Residence.getConfigManager().isResCreateCaseSensitive()) { + oldName = oldName.toLowerCase(); + newName = newName.toLowerCase(); + } if (rentableLand.containsKey(oldName)) { rentableLand.put(newName, rentableLand.get(oldName)); rentableLand.remove(oldName); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 3280a1ab1..a74de5c11 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1,7 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.bekvon.bukkit.residence.protection; import org.bukkit.ChatColor; @@ -19,7 +15,6 @@ import com.bekvon.bukkit.residence.utils.Debug; import java.text.DecimalFormat; -import java.text.NumberFormat; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index f975760c1..1ac100dcb 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -80,45 +80,41 @@ public ClaimedResidence getByName(String name) { return null; } String[] split = name.split("\\."); - if (split.length == 1) { - return residences.get(name); - } - ClaimedResidence res = residences.get(split[0]); - for (int i = 1; i < split.length; i++) { - if (res != null) { - res = res.getSubzone(split[i]); - } else { - return null; + if (Residence.getConfigManager().isResCreateCaseSensitive()) { + if (split.length == 1) { + return residences.get(name); } - } - return res; - } - - public ClaimedResidence getByNameNoCase(String name) { - if (name == null) { - return null; - } - String[] split = name.split("\\."); - if (split.length == 1) { + ClaimedResidence res = residences.get(split[0]); + for (int i = 1; i < split.length; i++) { + if (res != null) { + res = res.getSubzone(split[i]); + } else { + return null; + } + } + return res; + } else { + if (split.length == 1) { + for (Entry one : residences.entrySet()) { + if (one.getKey().equalsIgnoreCase(name)) + return one.getValue(); + } + } + ClaimedResidence res = null; for (Entry one : residences.entrySet()) { - if (one.getKey().equalsIgnoreCase(name)) - return one.getValue(); + if (one.getKey().equalsIgnoreCase(split[0])) + res = one.getValue(); } - } - ClaimedResidence res = null; - for (Entry one : residences.entrySet()) { - if (one.getKey().equalsIgnoreCase(split[0])) - res = one.getValue(); - } - for (int i = 1; i < split.length; i++) { - if (res != null) { - res = res.getSubzoneNoCase(split[i]); - } else { - return null; + for (int i = 1; i < split.length; i++) { + if (res != null) { + res = res.getSubzoneNoCase(split[i]); + } else { + return null; + } } + return res; } - return res; } public String getNameByLoc(Location loc) { From f9e410acf21908dcb049fd6eafb49f5c2c9ee871 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 1 Mar 2016 15:26:02 +0200 Subject: [PATCH 0127/1142] Initial update for 1.9 mc --- .../bukkit/residence/PlayerManager.java | 18 +-- .../bekvon/bukkit/residence/Residence.java | 8 +- .../residence/ResidenceCommandListener.java | 20 +-- .../bekvon/bukkit/residence/allNms/v1_9.java | 132 ++++++++++++++++++ .../residence/economy/TransactionManager.java | 5 +- .../residence/economy/rent/RentManager.java | 34 ++--- .../residence/itemlist/WorldItemList.java | 2 +- .../listeners/ResidenceBlockListener.java | 6 +- .../listeners/ResidenceFixesListener.java | 2 +- .../listeners/ResidencePlayerListener.java | 2 - .../protection/ClaimedResidence.java | 21 +-- .../residence/protection/FlagPermissions.java | 8 +- .../protection/ResidenceManager.java | 6 +- .../protection/ResidencePermissions.java | 6 +- src/plugin.yml | 2 +- 15 files changed, 204 insertions(+), 68 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_9.java diff --git a/src/com/bekvon/bukkit/residence/PlayerManager.java b/src/com/bekvon/bukkit/residence/PlayerManager.java index 0fb0c0157..7799718b7 100644 --- a/src/com/bekvon/bukkit/residence/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/PlayerManager.java @@ -21,21 +21,21 @@ public PlayerManager(Residence plugin) { } public void playerJoin(OfflinePlayer player) { - ResPlayer resPlayer = players.get(player.getName().toLowerCase()); + ResPlayer resPlayer = players.get(player.getName()); if (resPlayer == null) { resPlayer = new ResPlayer(player.getName()); resPlayer.recountRes(); - players.put(player.getName().toLowerCase(), resPlayer); + players.put(player.getName(), resPlayer); } else resPlayer.RecalculatePermissions(); return; } public ResPlayer playerJoin(String player) { - if (!players.containsKey(player.toLowerCase())) { + if (!players.containsKey(player)) { ResPlayer resPlayer = new ResPlayer(player); resPlayer.recountRes(); - players.put(player.toLowerCase(), resPlayer); + players.put(player, resPlayer); return resPlayer; } return null; @@ -57,7 +57,7 @@ public void run() { public ArrayList getResidenceList(String player) { ArrayList temp = new ArrayList(); playerJoin(player); - ResPlayer resPlayer = players.get(player.toLowerCase()); + ResPlayer resPlayer = players.get(player); if (resPlayer != null) { for (Entry one : resPlayer.getResList().entrySet()) { temp.add(one.getKey()); @@ -70,7 +70,7 @@ public ArrayList getResidenceList(String player) { public ArrayList getResidenceListString(String player, boolean showhidden) { ArrayList temp = new ArrayList(); playerJoin(player); - ResPlayer resPlayer = players.get(player.toLowerCase()); + ResPlayer resPlayer = players.get(player); if (resPlayer != null) { for (Entry one : resPlayer.getResList().entrySet()) { if (!showhidden) { @@ -122,8 +122,8 @@ public int getMaxRents(String player) { public ResPlayer getResPlayer(String player) { ResPlayer resPlayer = null; - if (players.containsKey(player.toLowerCase())) - resPlayer = players.get(player.toLowerCase()); + if (players.containsKey(player)) + resPlayer = players.get(player); else { resPlayer = playerJoin(player); } @@ -155,7 +155,7 @@ public void removeResFromPlayer(Player player, String residence) { } public void removeResFromPlayer(String player, String residence) { - ResPlayer resPlayer = players.get(player.toLowerCase()); + ResPlayer resPlayer = players.get(player); if (resPlayer != null) { resPlayer.removeResidence(residence); } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index c0aeee750..8f1ba4ac3 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -86,7 +86,6 @@ import cosine.boseconomy.BOSEconomy; import fr.crafter.tickleman.realeconomy.RealEconomy; import fr.crafter.tickleman.realplugin.RealPlugin; -import net.md_5.bungee.api.ChatColor; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -329,6 +328,7 @@ public void onEnable() { } catch (ClassNotFoundException e) { System.out.println("Your server version is not compatible with this plugins version! Plugin will be disabled: " + version); this.setEnabled(false); + return; } catch (InstantiationException e) { e.printStackTrace(); this.setEnabled(false); @@ -467,8 +467,8 @@ public void onEnable() { getOfflinePlayerMap().put(name.toLowerCase(), player); } Bukkit.getConsoleSender().sendMessage("[Residence] Player data loaded: " + getOfflinePlayerMap().size()); - } else { - Bukkit.getScheduler().runTaskAsynchronously(Residence.this, new Runnable() { + } else { + Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { @Override public void run() { for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { @@ -645,7 +645,7 @@ public void consoleMessage(String message) { } public static void sendMessage(Player player, String message) { - player.sendMessage(ChatColor.translateAlternateColorCodes('&', message)); + player.sendMessage(org.bukkit.ChatColor.translateAlternateColorCodes('&', message)); } public static boolean validName(String name) { diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 8e17ca550..c118900f4 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -193,7 +193,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (res == null) return false; - if (!res.getOwner().equals(player.getName()) && !Residence.gmanager.isResidenceAdmin(player)) { + if (!res.isOwner(player) && !Residence.gmanager.isResidenceAdmin(player)) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } @@ -231,7 +231,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (res == null) return false; - if (!res.getOwner().equals(player.getName()) && !Residence.gmanager.isResidenceAdmin(player)) { + if (!res.isOwner(player) && !Residence.gmanager.isResidenceAdmin(player)) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } @@ -933,7 +933,7 @@ public void run() { if (res == null) return true; - if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { + if (!res.isOwner(player) && !resadmin) { player.sendMessage(Residence.getLanguage().getPhrase("NonAdmin")); return true; } @@ -1194,12 +1194,12 @@ public void run() { } ClaimedResidence res = Residence.getResidenceManager().getByLoc(targetplayer.getLocation()); - if (res == null || res != null && !res.getOwner().equals(player.getName()) && !resadmin) { + if (res == null || res != null && !res.isOwner(player) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("PlayerNotInResidence")); return true; } - if (res.getOwner().equals(player.getName())) { + if (res.isOwner(player)) { if (res.getPlayersInResidence().contains(targetplayer)) { Location loc = Residence.getConfigManager().getKickLocation(); @@ -2037,7 +2037,7 @@ private boolean commandResSet(String[] args, boolean resadmin, Player player, in } else if (args.length == 1 && Residence.getConfigManager().useFlagGUI) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { - if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { + if (!res.isOwner(player) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } @@ -2051,7 +2051,7 @@ private boolean commandResSet(String[] args, boolean resadmin, Player player, in } else if (args.length == 2 && Residence.getConfigManager().useFlagGUI) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res != null) { - if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { + if (!res.isOwner(player) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } @@ -2110,7 +2110,7 @@ private boolean commandResPset(String[] args, boolean resadmin, Player player, i if (res != null) { if (!Residence.isPlayerExist(player, args[1], true)) return false; - if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { + if (!res.isOwner(player) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } @@ -2127,7 +2127,7 @@ private boolean commandResPset(String[] args, boolean resadmin, Player player, i if (res != null) { if (!Residence.isPlayerExist(player, args[2], true)) return false; - if (!res.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { + if (!res.isOwner(player) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return true; } @@ -2410,7 +2410,7 @@ private boolean commandResMarket(String[] args, boolean resadmin, Player player, return true; } - if (!CurrentRes.getOwner().equalsIgnoreCase(player.getName()) && !resadmin) { + if (!CurrentRes.isOwner(player) && !resadmin) { player.sendMessage(Residence.getLanguage().getPhrase("NotOwner")); return true; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9.java b/src/com/bekvon/bukkit/residence/allNms/v1_9.java new file mode 100644 index 000000000..75be93428 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9.java @@ -0,0 +1,132 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import com.bekvon.bukkit.residence.NMS; +import com.bekvon.bukkit.residence.Residence; + +public class v1_9 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager + || ent instanceof Rabbit); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case SPRUCE_DOOR: + case BIRCH_DOOR: + case JUNGLE_DOOR: + case ACACIA_DOOR: + case DARK_OAK_DOOR: + case SPRUCE_FENCE_GATE: + case BIRCH_FENCE_GATE: + case JUNGLE_FENCE_GATE: + case ACACIA_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case TRAP_DOOR: + case IRON_TRAPDOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, "door"); + matUseFlagList.put(Material.BIRCH_DOOR, "door"); + matUseFlagList.put(Material.JUNGLE_DOOR, "door"); + matUseFlagList.put(Material.ACACIA_DOOR, "door"); + matUseFlagList.put(Material.DARK_OAK_DOOR, "door"); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, "door"); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, "door"); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, "door"); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, "door"); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, "door"); + matUseFlagList.put(Material.IRON_TRAPDOOR, "door"); + } + + public boolean isPlate(Material mat) { + return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 9abf2ac81..aa9a5c4ce 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -86,13 +86,12 @@ public void putForSale(String areaname, Player player, int amount, boolean resad return; } } - String pname = player.getName(); ClaimedResidence area = manager.getByName(areaname); if (area == null) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); return; } - if (!area.getPermissions().getOwner().equals(pname) && !resadmin) { + if (!area.isOwner(player) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return; } @@ -216,7 +215,7 @@ public void removeFromSale(Player player, String areaname, boolean resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForSale")); return; } - if (area.getPermissions().getOwner().equals(player.getName()) || resadmin) { + if (area.isOwner(player)|| resadmin) { removeFromSale(areaname); Residence.getSignUtil().CheckSign(area); player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceStopSelling")); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 53d9c5368..323fd5865 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -34,7 +34,7 @@ public RentManager() { } public RentedLand getRentedLand(String name) { - if (!Residence.getConfigManager().isResCreateCaseSensitive()) + if (!Residence.getConfigManager().isResCreateCaseSensitive() && name != null) name = name.toLowerCase(); return rentedLand.containsKey(name) ? rentedLand.get(name) : null; } @@ -42,7 +42,7 @@ public RentedLand getRentedLand(String name) { public List getRentedLands(String playername) { List rentedLands = new ArrayList(); for (Entry oneland : rentedLand.entrySet()) { - if (oneland.getValue().player.equalsIgnoreCase(playername)) { + if (oneland.getValue().player.equals(playername)) { ClaimedResidence res = Residence.getResidenceManager().getByName(oneland.getKey()); String world = " "; if (res != null) { @@ -84,7 +84,7 @@ public void setForRent(Player player, String landName, int amount, int days, boo } } - if (!Residence.getConfigManager().isResCreateCaseSensitive()) + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); if (!rentableLand.containsKey(landName)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENTABLE); @@ -113,7 +113,7 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi } ClaimedResidence res = Residence.getResidenceManager().getByName(landName); if (res != null) { - if (res.getPermissions().getOwner().equalsIgnoreCase(player.getName())) { + if (res.isOwner(player)) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerRentFail")); return; } @@ -137,7 +137,7 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi + "|" + ChatColor.YELLOW + this.getRentingPlayer(landName))); return; } - if (!Residence.getConfigManager().isResCreateCaseSensitive()) + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); RentableLand land = rentableLand.get(landName); @@ -178,7 +178,7 @@ public void removeFromForRent(Player player, String landName, boolean resadmin) player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotRented")); return; } - if (resadmin || rent.player.equalsIgnoreCase(player.getName())) { + if (resadmin || rent.player.equals(player.getName())) { ResidenceRentEvent revent = new ResidenceRentEvent(Residence.getResidenceManager().getByName(landName), player, RentEventType.UNRENTABLE); Residence.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) @@ -217,7 +217,7 @@ public void unrent(Player player, String landName, boolean resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); return; } - if (!Residence.getConfigManager().isResCreateCaseSensitive()) + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); if (rentedLand.containsKey(landName) && !resadmin) { player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + landName + ChatColor.RED @@ -257,43 +257,43 @@ public void removeRentable(String landName) { } public boolean isForRent(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive()) + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); return rentableLand.containsKey(landName); } public boolean isRented(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive()) + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); return rentedLand.containsKey(landName); } public String getRentingPlayer(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive()) + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); return rentedLand.containsKey(landName) ? rentedLand.get(landName).player : null; } public int getCostOfRent(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive()) + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); return rentableLand.containsKey(landName) ? rentableLand.get(landName).cost : 0; } public boolean getRentableRepeatable(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive()) + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); return rentableLand.containsKey(landName) ? rentableLand.get(landName).repeatable : false; } public boolean getRentedAutoRepeats(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive()) + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); return getRentableRepeatable(landName) ? (rentedLand.containsKey(landName) ? rentedLand.get(landName).autoRefresh : false) : false; } public int getRentDays(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive()) + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); return rentableLand.containsKey(landName) ? rentableLand.get(landName).days : 0; } @@ -345,7 +345,7 @@ public void setRentRepeatable(Player player, String landName, boolean value, boo String[] split = landName.split("\\."); RentableLand land = rentableLand.get(landName); ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if (land != null && res != null && (res.getPermissions().getOwner().equalsIgnoreCase(player.getName()) || resadmin)) { + if (land != null && res != null && (res.isOwner(player) || resadmin)) { land.repeatable = value; if (!value && this.isRented(landName)) rentedLand.get(landName).autoRefresh = false; @@ -423,7 +423,7 @@ public Map save() { } public void updateRentableName(String oldName, String newName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive()) { + if (!Residence.getConfigManager().isResCreateCaseSensitive() && oldName != null && newName != null) { oldName = oldName.toLowerCase(); newName = newName.toLowerCase(); } @@ -471,7 +471,7 @@ public int getRentableCount(String player) { for (String land : set) { ClaimedResidence res = Residence.getResidenceManager().getByName(land); if (res != null) - if (res.getPermissions().getOwner().equalsIgnoreCase(player)) + if (res.isOwner(player)) count++; } return count; diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java index ce6d1a21c..8ef31e5c0 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java @@ -60,7 +60,7 @@ public boolean isListed(Material mat, String inworld, String ingroup) public boolean listApplicable(String inworld, String ingroup) { if (world != null) { - if (!world.equalsIgnoreCase(inworld)) { + if (!world.equals(inworld)) { return false; } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 02145f749..7b7b54c0d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -11,6 +11,8 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Snowman; @@ -59,7 +61,7 @@ public void onTreeGrow(StructureGrowEvent event) { for (BlockState one : blocks) { ClaimedResidence targetRes = Residence.getResidenceManager().getByLoc(one.getLocation()); if (startRes == null && targetRes != null || - targetRes != null && startRes != null && !startRes.getName().equals(targetRes.getName()) && !startRes.getOwner().equals(targetRes.getOwner())) { + targetRes != null && startRes != null && !startRes.getName().equals(targetRes.getName()) && !startRes.isOwner(targetRes.getOwner())) { BlockState matas = blocks.get(i); matas.setType(Material.AIR); blocks.set(i, matas); @@ -71,6 +73,8 @@ public void onTreeGrow(StructureGrowEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { + Debug.D("destroy event"); + Player player = event.getPlayer(); if (Residence.isResAdminOn(player)) { return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java index 4fe9cfa55..2f5c584be 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java @@ -17,7 +17,7 @@ public class ResidenceFixesListener implements Listener { public void onAnvilPlace(PlayerInteractEvent event) { if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; - ItemStack iih = event.getPlayer().getItemInHand(); + ItemStack iih = event.getItem(); if (iih == null || iih.getType() == Material.AIR || iih.getType() != Material.ANVIL) return; BlockFace face = event.getBlockFace(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 8e3f177a7..334aae4b4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -532,7 +532,6 @@ public void onInfoCheck(PlayerInteractEvent event) { if (block == null) return; Player player = event.getPlayer(); - @SuppressWarnings("deprecation") int heldItemId = player.getItemInHand().getTypeId(); if (heldItemId != Residence.getConfigManager().getInfoToolID()) @@ -549,7 +548,6 @@ public void onInfoCheck(PlayerInteractEvent event) { } - @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index a74de5c11..a9ba432c8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -56,14 +56,6 @@ private ClaimedResidence(Residence plugin) { this.plugin = plugin; } - public boolean isOwner(String name) { - return perms.getOwner().equalsIgnoreCase(name); - } - - public boolean isOwner(Player p) { - return perms.getOwnerUUID().equals(p.getUniqueId()); - } - public boolean isSubzone() { return parent == null ? false : true; } @@ -1090,7 +1082,8 @@ public static ClaimedResidence load(Map root, ClaimedResidence p if (tploc.containsKey("Pitch")) pitch = Double.valueOf(tploc.get("Pitch").toString()); - res.tpLoc = new Location(world, Double.valueOf(tploc.get("X").toString()), Double.valueOf(tploc.get("Y").toString()), Double.valueOf(tploc.get("Z").toString())); + res.tpLoc = new Location(world, Double.valueOf(tploc.get("X").toString()), Double.valueOf(tploc.get("Y").toString()), Double.valueOf(tploc.get("Z") + .toString())); res.tpLoc.setPitch((float) pitch); res.tpLoc.setYaw((float) yaw); } @@ -1202,6 +1195,16 @@ public String getOwner() { return perms.getOwner(); } + public boolean isOwner(String name) { + return perms.getOwner().equals(name); + } + + public boolean isOwner(Player p) { + if (Residence.getConfigManager().isOfflineMode()) + return isOwner(p.getName()); + return perms.getOwnerUUID().equals(p.getUniqueId()); + } + public void setChatPrefix(String ChatPrefix) { this.ChatPrefix = ChatPrefix; } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 911d65788..481624b95 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -337,7 +337,7 @@ else if (cachedPlayerNameUUIDs.containsKey(player)) if (uuids == null) { Set> values = cachedPlayerNameUUIDs.entrySet(); for (Entry value : values) { - if (value.getValue().equalsIgnoreCase(player)) { + if (value.getValue().equals(player)) { uuids = value.getKey(); break; } @@ -368,7 +368,7 @@ else if (cachedPlayerNameUUIDs.containsKey(player)) } } else { for (Entry> one : playerFlags.entrySet()) { - if (!one.getKey().equalsIgnoreCase(player)) + if (!one.getKey().equals(player)) continue; flags = one.getValue(); break; @@ -649,14 +649,14 @@ private void convertPlayerNamesToUUIDs(String OwnerName, String owneruuid) { for (String keyset : playerFlags.keySet()) { if (keyset.length() != 36) { String uuid = null; - if (OwnerName != null && OwnerName.equalsIgnoreCase(keyset) && !owneruuid.equalsIgnoreCase(Residence.getTempUserUUID())) + if (OwnerName != null && OwnerName.equals(keyset) && !owneruuid.equals(Residence.getTempUserUUID())) uuid = owneruuid; else uuid = Residence.getPlayerUUIDString(keyset); // if (OwnerName.equals(keyset)) { if (uuid != null) converts.put(keyset, uuid); - else if (OwnerName != null && !OwnerName.equalsIgnoreCase(keyset)) + else if (OwnerName != null && !OwnerName.equals(keyset)) Toremove.add(keyset); // } } else { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1ac100dcb..1eee3cb4e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -339,7 +339,7 @@ public String[] getResidenceList() { public Map getResidenceMapList(String targetplayer, boolean showhidden) { Map temp = new HashMap(); for (Entry res : residences.entrySet()) { - if (res.getValue().getPermissions().getOwner().equalsIgnoreCase(targetplayer)) { + if (res.getValue().isOwner(targetplayer)) { boolean hidden = res.getValue().getPermissions().has("hidden", false); if ((showhidden) || (!showhidden && !hidden)) { temp.put(res.getValue().getName(), res.getValue()); @@ -369,7 +369,7 @@ private void getResidenceList(String targetplayer, boolean showhidden, boolean s ArrayList list, boolean formattedOutput) { boolean hidden = res.getPermissions().has("hidden", false); if ((showhidden) || (!showhidden && !hidden)) { - if (targetplayer == null || res.getPermissions().getOwner().equalsIgnoreCase(targetplayer)) { + if (targetplayer == null || res.getPermissions().getOwner().equals(targetplayer)) { if (formattedOutput) { list.add(Residence.getLanguage().getPhrase("ResidenceList", parentzone + "|" + resname + "|" + Residence.getLanguage().getPhrase("World") + "|" + res .getWorld())); @@ -500,7 +500,7 @@ private void removeAllByOwner(Player player, String owner, Map it = resholder.values().iterator(); while (it.hasNext()) { ClaimedResidence res = it.next(); - if (res.getOwner().equalsIgnoreCase(owner)) { + if (res.isOwner(owner)) { ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); Residence.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 92456115b..ceb4fd053 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -138,7 +138,7 @@ public boolean hasResidencePermission(Player player, boolean requireOwner) { return false; } String renter = Residence.getRentManager().getRentingPlayer(resname); - if (player.getName().equalsIgnoreCase(renter)) { + if (player.getName().equals(renter)) { return true; } else { return (playerHas(player.getName(), "admin", false)); @@ -146,9 +146,9 @@ public boolean hasResidencePermission(Player player, boolean requireOwner) { } } if (requireOwner) { - return (this.getOwner().equalsIgnoreCase(player.getName())); + return (this.getOwner().equals(player.getName())); } - return (playerHas(player.getName(), "admin", false) || this.getOwner().equalsIgnoreCase(player.getName())); + return (playerHas(player.getName(), "admin", false) || this.getOwner().equals(player.getName())); } private boolean checkCanSetFlag(Player player, String flag, FlagState state, boolean globalflag, boolean resadmin) { diff --git a/src/plugin.yml b/src/plugin.yml index 654ec42c7..0994f6770 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.10.4.0 +version: 2.11.0.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 29f2c7943846b8ae94810b6ade5b8d1464d4c9fd Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Mar 2016 13:41:58 +0200 Subject: [PATCH 0128/1142] 4.0.0.0 update --- src/Language/Brazilian.yml | 587 ---- src/Language/Chinese.yml | 787 ----- src/Language/Czech.yml | 589 ---- src/Language/French.yml | 582 ---- src/Language/German.yml | 594 ---- src/Language/Hungarian.yml | 587 ---- src/Language/Lithuanian.yml | 586 ---- src/Language/Polish.yml | 245 -- src/Language/Spanish.yml | 638 ---- .../bukkit/residence/ConfigManager.java | 68 +- .../{Locale.java => LocaleManager.java} | 678 ++-- .../bekvon/bukkit/residence/NewLanguage.java | 128 - .../bekvon/bukkit/residence/Residence.java | 169 +- .../residence/ResidenceCommandListener.java | 2774 +---------------- .../bukkit/residence/allNms/v1_8Events.java | 3 +- .../bukkit/residence/api/ChatInterface.java | 17 + .../residence/api/MarketBuyInterface.java | 20 + .../residence/api/MarketRentInterface.java | 55 + .../bukkit/residence/api/ResidenceApi.java | 26 + .../residence/api/ResidenceInterface.java | 34 + .../api/ResidencePlayerInterface.java | 22 + .../bukkit/residence/chat/ChatChannel.java | 7 +- .../bukkit/residence/chat/ChatManager.java | 24 +- src/com/bekvon/bukkit/residence/cmd.java | 8 + .../bukkit/residence/commands/area.java | 94 + .../bukkit/residence/commands/check.java | 40 + .../bukkit/residence/commands/clearflags.java | 33 + .../bukkit/residence/commands/compass.java | 46 + .../bukkit/residence/commands/confirm.java | 35 + .../bukkit/residence/commands/contract.java | 99 + .../bukkit/residence/commands/create.java | 64 + .../bukkit/residence/commands/current.java | 31 + .../bukkit/residence/commands/expand.java | 101 + .../bukkit/residence/commands/flags.java | 22 + .../bukkit/residence/commands/give.java | 25 + .../bukkit/residence/commands/gset.java | 38 + .../bekvon/bukkit/residence/commands/gui.java | 30 + .../bukkit/residence/commands/info.java | 34 + .../bukkit/residence/commands/kick.java | 56 + .../bukkit/residence/commands/lease.java | 104 + .../bukkit/residence/commands/limits.java | 36 + .../bukkit/residence/commands/list.java | 43 + .../bukkit/residence/commands/listall.java | 39 + .../residence/commands/listallhidden.java | 41 + .../bukkit/residence/commands/listhidden.java | 46 + .../bukkit/residence/commands/lists.java | 61 + .../bukkit/residence/commands/lset.java | 75 + .../bukkit/residence/commands/market.java | 277 ++ .../bukkit/residence/commands/material.java | 30 + .../bukkit/residence/commands/message.java | 96 + .../bukkit/residence/commands/mirror.java | 24 + .../bukkit/residence/commands/padd.java | 39 + .../bukkit/residence/commands/pdel.java | 33 + .../bukkit/residence/commands/pset.java | 98 + .../bekvon/bukkit/residence/commands/rc.java | 188 ++ .../bukkit/residence/commands/remove.java | 117 + .../bukkit/residence/commands/removeall.java | 30 + .../residence/commands/removeworld.java | 27 + .../bukkit/residence/commands/rename.java | 24 + .../bukkit/residence/commands/renamearea.java | 29 + .../bukkit/residence/commands/resadmin.java | 30 + .../bukkit/residence/commands/resbank.java | 55 + .../bukkit/residence/commands/reset.java | 28 + .../bekvon/bukkit/residence/commands/rt.java | 56 + .../bukkit/residence/commands/select.java | 172 + .../bukkit/residence/commands/server.java | 38 + .../bekvon/bukkit/residence/commands/set.java | 69 + .../bukkit/residence/commands/setowner.java | 39 + .../bukkit/residence/commands/shop.java | 460 +++ .../residence/commands/signconvert.java | 29 + .../bukkit/residence/commands/signupdate.java | 22 + .../bukkit/residence/commands/sublist.java | 43 + .../bukkit/residence/commands/subzone.java | 57 + .../bukkit/residence/commands/tool.java | 27 + .../bekvon/bukkit/residence/commands/tp.java | 31 + .../bukkit/residence/commands/tpconfirm.java | 28 + .../bukkit/residence/commands/tpset.java | 27 + .../bukkit/residence/commands/unstuck.java | 38 + .../bukkit/residence/commands/version.java | 35 + .../residence/containers/ConfigEditor.java | 5 + .../residence/containers/RandomLoc.java | 26 + .../{ResPlayer.java => ResidencePlayer.java} | 4 +- .../bukkit/residence/dynmap/AreaStyle.java | 27 + .../residence/dynmap/DynMapListeners.java | 57 + .../residence/dynmap/DynMapManager.java | 264 ++ .../bukkit/residence/economy/BOSEAdapter.java | 4 - .../economy/EssentialsEcoAdapter.java | 126 +- .../residence/economy/IConomy6Adapter.java | 71 +- .../residence/economy/RealShopEconomy.java | 4 - .../residence/economy/ResidenceBank.java | 21 +- .../residence/economy/TransactionManager.java | 105 +- .../residence/economy/rent/RentManager.java | 105 +- .../residence/economy/rent/RentableLand.java | 4 - .../residence/economy/rent/RentedLand.java | 38 +- .../event/CancellableResidenceEvent.java | 20 +- .../CancellableResidencePlayerEvent.java | 20 +- .../CancellableResidencePlayerFlagEvent.java | 18 +- .../residence/event/ResidenceChatEvent.java | 9 - .../event/ResidenceCommandEvent.java | 9 - .../event/ResidenceCreationEvent.java | 47 +- .../residence/event/ResidenceDeleteEvent.java | 29 +- .../residence/event/ResidenceEnterEvent.java | 38 - .../residence/event/ResidenceEvent.java | 9 - .../event/ResidenceFlagChangeEvent.java | 26 +- .../event/ResidenceFlagCheckEvent.java | 9 - .../residence/event/ResidenceFlagEvent.java | 47 +- .../residence/event/ResidenceLeaveEvent.java | 38 - .../event/ResidenceOwnerChangeEvent.java | 9 - .../residence/event/ResidencePlayerEvent.java | 9 - .../event/ResidencePlayerEventInterface.java | 11 +- .../event/ResidencePlayerFlagEvent.java | 35 +- .../residence/event/ResidenceRentEvent.java | 9 - .../event/ResidenceSizeChangeEvent.java | 49 + .../event/ResidenceSubzoneCreationEvent.java | 45 + .../residence/event/ResidenceTPEvent.java | 34 +- .../bekvon/bukkit/residence/gui/SetFlag.java | 20 +- .../bukkit/residence/itemlist/ItemList.java | 9 - .../residence/itemlist/ResidenceItemList.java | 17 +- .../residence/itemlist/WorldItemList.java | 9 - .../residence/itemlist/WorldItemManager.java | 9 - .../listeners/ResidenceBlockListener.java | 87 +- .../listeners/ResidenceEntityListener.java | 88 +- .../listeners/ResidenceFixesListener.java | 5 + .../listeners/ResidencePlayerListener.java | 203 +- .../residence/listeners/SpigotListener.java | 3 + .../permissions/BPermissionsAdapter.java | 31 +- .../permissions/LegacyPermissions.java | 21 +- .../permissions/OriginalPermissions.java | 23 +- .../permissions/PermissionGroup.java | 52 +- .../permissions/PermissionManager.java | 9 - .../permissions/PermissionsBukkitAdapter.java | 37 +- .../permissions/PermissionsInterface.java | 10 +- .../residence/persistance/YMLSaveHelper.java | 9 - .../protection/ClaimedResidence.java | 301 +- .../residence/protection/CuboidArea.java | 9 - .../residence/protection/FlagPermissions.java | 25 +- .../residence/protection/LeaseManager.java | 28 +- .../protection/PermissionListManager.java | 29 +- .../{ => protection}/PlayerManager.java | 46 +- .../protection/ResidenceManager.java | 166 +- .../protection/ResidencePermissions.java | 46 +- .../protection/WorldFlagManager.java | 9 - .../residence/selection/AutoSelection.java | 6 +- .../residence/selection/SelectionManager.java | 99 +- .../selection/WorldEditSelectionManager.java | 10 +- .../residence/shopStuff/ShopListener.java | 9 +- .../residence/shopStuff/ShopSignUtil.java | 10 +- .../bukkit/residence/signsStuff/.gitignore | 7 + .../bukkit/residence/signsStuff/SignUtil.java | 38 +- .../residence/spout/ResidencePopup.java | 120 +- .../residence/spout/ResidenceSpout.java | 156 +- .../spout/ResidenceSpoutListener.java | 112 +- .../bukkit/residence/text/Language.java | 164 +- .../bukkit/residence/text/help/HelpEntry.java | 80 +- .../residence/text/help/InformationPager.java | 16 +- .../bukkit/residence/utils/CrackShot.java | 21 +- .../bekvon/bukkit/residence/utils/Debug.java | 2 +- .../bukkit/residence/utils/RandomTp.java | 7 +- .../bukkit/residence/utils/TabComplete.java | 11 - .../residence/utils/VersionChecker.java | 23 +- .../residence/{ => utils}/YmlMaker.java | 4 +- .../vaultinterface/ResidenceVaultAdapter.java | 9 - src/plugin.yml | 4 +- 163 files changed, 6206 insertions(+), 10101 deletions(-) delete mode 100644 src/Language/Brazilian.yml delete mode 100644 src/Language/Chinese.yml delete mode 100644 src/Language/Czech.yml delete mode 100644 src/Language/French.yml delete mode 100644 src/Language/German.yml delete mode 100644 src/Language/Hungarian.yml delete mode 100644 src/Language/Lithuanian.yml delete mode 100644 src/Language/Polish.yml delete mode 100644 src/Language/Spanish.yml rename src/com/bekvon/bukkit/residence/{Locale.java => LocaleManager.java} (71%) delete mode 100644 src/com/bekvon/bukkit/residence/NewLanguage.java create mode 100644 src/com/bekvon/bukkit/residence/api/ChatInterface.java create mode 100644 src/com/bekvon/bukkit/residence/api/MarketBuyInterface.java create mode 100644 src/com/bekvon/bukkit/residence/api/MarketRentInterface.java create mode 100644 src/com/bekvon/bukkit/residence/api/ResidenceApi.java create mode 100644 src/com/bekvon/bukkit/residence/api/ResidenceInterface.java create mode 100644 src/com/bekvon/bukkit/residence/api/ResidencePlayerInterface.java create mode 100644 src/com/bekvon/bukkit/residence/cmd.java create mode 100644 src/com/bekvon/bukkit/residence/commands/area.java create mode 100644 src/com/bekvon/bukkit/residence/commands/check.java create mode 100644 src/com/bekvon/bukkit/residence/commands/clearflags.java create mode 100644 src/com/bekvon/bukkit/residence/commands/compass.java create mode 100644 src/com/bekvon/bukkit/residence/commands/confirm.java create mode 100644 src/com/bekvon/bukkit/residence/commands/contract.java create mode 100644 src/com/bekvon/bukkit/residence/commands/create.java create mode 100644 src/com/bekvon/bukkit/residence/commands/current.java create mode 100644 src/com/bekvon/bukkit/residence/commands/expand.java create mode 100644 src/com/bekvon/bukkit/residence/commands/flags.java create mode 100644 src/com/bekvon/bukkit/residence/commands/give.java create mode 100644 src/com/bekvon/bukkit/residence/commands/gset.java create mode 100644 src/com/bekvon/bukkit/residence/commands/gui.java create mode 100644 src/com/bekvon/bukkit/residence/commands/info.java create mode 100644 src/com/bekvon/bukkit/residence/commands/kick.java create mode 100644 src/com/bekvon/bukkit/residence/commands/lease.java create mode 100644 src/com/bekvon/bukkit/residence/commands/limits.java create mode 100644 src/com/bekvon/bukkit/residence/commands/list.java create mode 100644 src/com/bekvon/bukkit/residence/commands/listall.java create mode 100644 src/com/bekvon/bukkit/residence/commands/listallhidden.java create mode 100644 src/com/bekvon/bukkit/residence/commands/listhidden.java create mode 100644 src/com/bekvon/bukkit/residence/commands/lists.java create mode 100644 src/com/bekvon/bukkit/residence/commands/lset.java create mode 100644 src/com/bekvon/bukkit/residence/commands/market.java create mode 100644 src/com/bekvon/bukkit/residence/commands/material.java create mode 100644 src/com/bekvon/bukkit/residence/commands/message.java create mode 100644 src/com/bekvon/bukkit/residence/commands/mirror.java create mode 100644 src/com/bekvon/bukkit/residence/commands/padd.java create mode 100644 src/com/bekvon/bukkit/residence/commands/pdel.java create mode 100644 src/com/bekvon/bukkit/residence/commands/pset.java create mode 100644 src/com/bekvon/bukkit/residence/commands/rc.java create mode 100644 src/com/bekvon/bukkit/residence/commands/remove.java create mode 100644 src/com/bekvon/bukkit/residence/commands/removeall.java create mode 100644 src/com/bekvon/bukkit/residence/commands/removeworld.java create mode 100644 src/com/bekvon/bukkit/residence/commands/rename.java create mode 100644 src/com/bekvon/bukkit/residence/commands/renamearea.java create mode 100644 src/com/bekvon/bukkit/residence/commands/resadmin.java create mode 100644 src/com/bekvon/bukkit/residence/commands/resbank.java create mode 100644 src/com/bekvon/bukkit/residence/commands/reset.java create mode 100644 src/com/bekvon/bukkit/residence/commands/rt.java create mode 100644 src/com/bekvon/bukkit/residence/commands/select.java create mode 100644 src/com/bekvon/bukkit/residence/commands/server.java create mode 100644 src/com/bekvon/bukkit/residence/commands/set.java create mode 100644 src/com/bekvon/bukkit/residence/commands/setowner.java create mode 100644 src/com/bekvon/bukkit/residence/commands/shop.java create mode 100644 src/com/bekvon/bukkit/residence/commands/signconvert.java create mode 100644 src/com/bekvon/bukkit/residence/commands/signupdate.java create mode 100644 src/com/bekvon/bukkit/residence/commands/sublist.java create mode 100644 src/com/bekvon/bukkit/residence/commands/subzone.java create mode 100644 src/com/bekvon/bukkit/residence/commands/tool.java create mode 100644 src/com/bekvon/bukkit/residence/commands/tp.java create mode 100644 src/com/bekvon/bukkit/residence/commands/tpconfirm.java create mode 100644 src/com/bekvon/bukkit/residence/commands/tpset.java create mode 100644 src/com/bekvon/bukkit/residence/commands/unstuck.java create mode 100644 src/com/bekvon/bukkit/residence/commands/version.java create mode 100644 src/com/bekvon/bukkit/residence/containers/ConfigEditor.java create mode 100644 src/com/bekvon/bukkit/residence/containers/RandomLoc.java rename src/com/bekvon/bukkit/residence/containers/{ResPlayer.java => ResidencePlayer.java} (98%) create mode 100644 src/com/bekvon/bukkit/residence/dynmap/AreaStyle.java create mode 100644 src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java create mode 100644 src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java delete mode 100644 src/com/bekvon/bukkit/residence/event/ResidenceEnterEvent.java delete mode 100644 src/com/bekvon/bukkit/residence/event/ResidenceLeaveEvent.java create mode 100644 src/com/bekvon/bukkit/residence/event/ResidenceSizeChangeEvent.java create mode 100644 src/com/bekvon/bukkit/residence/event/ResidenceSubzoneCreationEvent.java rename src/com/bekvon/bukkit/residence/{ => protection}/PlayerManager.java (69%) create mode 100644 src/com/bekvon/bukkit/residence/signsStuff/.gitignore rename src/com/bekvon/bukkit/residence/{ => utils}/YmlMaker.java (97%) diff --git a/src/Language/Brazilian.yml b/src/Language/Brazilian.yml deleted file mode 100644 index 01b421325..000000000 --- a/src/Language/Brazilian.yml +++ /dev/null @@ -1,587 +0,0 @@ -# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. -Version: 21 -FieldsVersion: 22 -Language: - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - #Version 1 Fields - InvalidResidence: Residencia invalida... - InvalidSubzone: Subzona invalida... - InvalidDirection: Direcao invalida... - InvalidChannel: Canal invalido... - InvalidAmount: Valor invalido... - InvalidCost: Custo invalido... - InvalidDays: Numero de dias invalido... - InvalidMaterial: Material invalido... - InvalidBoolean: Valor invalido, deve ser true(t) ou false(f) - InvalidArea: Area invalida... - InvalidGroup: Grupo invalido... - InvalidMessageType: Tipo de mensagem deve ser inserir ou remover. - InvalidList: Lista invalida... - InvalidFlag: Flag invalida... - InvalidFlagState: Estado da flag invalido, deve ser true(t), false(f), ou remove(r) - AreaExists: Nome da area ja existe. - AreaCreate: 'Area de residencia criado, ID %1' - AreaDiffWorld: Area esta em um mundo diferente da residencia. - AreaCollision: 'A area colide com a residencia %1' - AreaSubzoneCollision: 'A area colide com a Subzona %1' - AreaNonExist: Nao existe tal area. - AreaInvalidName: Nome da area invalido... - AreaRename: 'Area renomeada de %1 para %2' - AreaRemove: 'A area %1 foi removida...' - AreaRemoveLast: Nao pode remover a ultima area dessa residencia. - AreaNotWithinParent: Area nao esta dentro da residencia. - AreaUpdate: Area atualizada... - AreaMaxPhysical: Voce antingiu a quantidade maxima de areas permitidas para a sua residencia. - AreaSizeLimit: Tamanho da area nao esta dentro dos limites permitidos. - AreaHighLimit: 'Voce nao pode proteger esta altura toda, seu limite: %1' - AreaLowLimit: 'Voce nao pode proteger esta profundidade, seu limite: %1' - NotInResidence: Voce nao esta em uma residencia. - InResidence: 'Voce esta na residencia %1' - ResidenceOwnerChange: 'A residencia %1 agora pertence a %2' - NonAdmin: Voce nao tem permissao. - AdminOnly: Apenas admins tem acesso a esse comando. - ChatDisabled: Chat da residencia desabilitado... - SubzoneRename: 'Subzona renomeada de %1 para %2' - SubzoneRemove: 'Subzona %1 removida.' - SubzoneCreate: 'Subzona %1 criada' - SubzoneCreateFail: 'Impossivel criar a subzona %1' - SubzoneExists: 'A subzona %1 ja existe.' - SubzoneCollide: 'A subzona colide com a subzona %1' - SubzoneMaxDepth: Voce antigiu o maximo de subzonas permitido. - SubzoneSelectInside: Ambos os pontos de selecao devem estar dentro da residencia. - SelectPoints: Selecione dois pontos primeiro antes de usar esse comando! - SelectionSuccess: Selecao feita com sucesso! - SelectionFail: Comando select invalido... - SelectionBedrock: Selecao expandiu-se para o seu menor limite permitido. - SelectionSky: Selecao expandiu-se para o seu maior limite permitido. - SelectionArea: 'Area selecionada %1, da residencia %2' - SelectDiabled: Voce nao tem acesso ao comando select. - NoPermission: Voce nao tem permissao para isto. - OwnerNoPermission: O proprietario nao tem permissao para isto. - ParentNoPermission: Voce nao tem permissao para fazer alteracoes na zona pai. - MessageChange: Mensagem configurada... - FlagSet: Flag configurada... - FlagCheckTrue: 'A flag %1 aplicada no jogador %2 para a residencia %3, valor = %4' - FlagCheckFalse: 'A flag %1 nao pode ser aplicada no jogador %2 pela residencia.' - FlagsCleared: Flags removidas. - FlagsDefault: Flags configuradas para o padrao. - Usage: Uso do comando - InvalidHelp: Pagina help invalida... - SubCommands: Subcomandos - InvalidList: Lista invalida, deve ser blacklist ou ignorelist. - MaterialGet: 'O material com a ID %1 e %2' - MarketDisabled: Mercado desabilitado! - MarketList: Lista do mercado - SelectionTool: Ferramenta de selecao - InfoTool: Ferramenta de informacoes - NoBankAccess: Voce nao tem acesso a bank. - NotEnoughMoney: Voce nao tem dinheiro sulficiente. - BankNoMoney: Nao tem dinheiro sulficiente no banco. - BankDeposit: 'Voce depositou %1 no banco da residencia.' - BankWithdraw: 'Voce retirou %1 da banco da residencia.' - MoneyCharged: 'Retirado %1 na sua conta %2.' - MoneyCredit: 'Adicionado %1 na sua conta %2.' - RentDisabled: Sistema de aluguel esta desabilitado. - RentReleaseInvalid: 'A residencia %1 nao esta para alugar.' - RentSellFail: Nao pode vender uma residencia se ela esta para alugar. - SellRentFail: Nao pode alugar uma residencia se ela esta a venda. - OwnerBuyFail: Voce nao pode comprar sua propria residencia! - OwnerRentFail: Voce nao pode alugar sua propria residencia! - AlreadySellFail: A residencia ja esta a venda! - ResidenceBought: 'Voce comprou a residencia %1' - ResidenceBuy: 'A residencia %1 foi comprada por %2 de voce.' - ResidenceBuyTooBig: Esta residencia tem areas maiores do que o maximo permitido. - ResidenceNotForSale: A residencia nao esta a venda. - ResidenceForSale: 'Residencia %1 agora esta a venda por %2' - ResidenceStopSelling: A residencia nao esta mais a venda. - ResidenceTooMany: Voce ja possui o numero maximo de residencias permitido. - ResidenceMaxRent: Voce ja esta alugando o numero maximo de residencias permitido. - ResidenceAlreadyRent: Residencia pronta para ser alugada... - ResidenceNotForRent: A residencia nao esta disponivel para alugar... - ResidenceNotRented: Residencia nao alugada. - ResidenceUnrent: 'A residencia %1 nao esta mais alugada.' - ResidenceRemoveRentable: 'A residencia %1 nao esta mais para alugar.' - ResidenceForRentSuccess: 'A residencia %1 agora esta para alugar por %2 durante %3 dias.' - ResidenceRentSuccess: 'Voce alugou a residencia %1 por %2 dias.' - ResidenceAlreadyRented: 'A residencia %1 ja esta sendo alugada por %2' - ResidenceAlreadyExists: 'Ja existe uma residencia com o nome %1.' - ResidenceCreate: 'Voce criou a residencia %1!' - ResidenceRename: 'Residencia renomeada de %1 para %2' - ResidenceRemove: 'A residencia %1 foi removida...' - RentDisabled: Aluguel esta desabilitado... - RentDisableRenew: 'A residencia %1 agora nao vai mais ser re-alugada quando o tempo expirar.' - RentEnableRenew: 'A residencia %1 agora vai ser automaticamente re-alugada quando o tempo expirar.' - RentableDisableRenew: '%1 nao vai mais renovar o status alugavel quando expirar.' - RentableEnableRenew: '%1 agora vai automaticamente renovar o status alugavel quando expirar.' - LandForSale: Residencia a venda - SellAmount: Valor da venda - LeaseExpire: Tempo para expirar a locacao - RentExpire: Os dias do aluguel expiraram - RentableAutoRenew: Auto renovar a locacao - RentAutoRenew: Auto renovar o aluguel - RentableLand: Residencia alugavel - ListMaterialAdd: '%1 foi adicionado a residencia %2' - ListMaterialRemove: '%1 foi removido da residencia %2' - ItemBlacklisted: Voce esta na blacklist para usar este item aqui. - RentedModifyDeny: Nao pode modificar as residencias que estao para alugar. - WorldPVPDisabled: PVP do mundo esta desabilitado. - NoPVPZone: Nenhuma zona de PVP. - FlagDeny: 'Voce nao tem a flag %1 aqui.' - FlagSetDeny: 'O proprietario nao tem acesso a flag %1' - SelectPoint: 'Selecionado o %1 ponto' - ResidenceChat: 'Chat da residencia alternado para %1' - ResidenceMoveDeny: 'Voce nao tem permissao para se movimentar na residencia %1' - TeleportDeny: Voce nao tem acesso a teletransporte. - TeleportSuccess: 'Teletransportado!' - TeleportNear: Teletransportado para perto da residencia. - TeleportNoFlag: Voce nao tem acesso para se teletransportar nessa residencia. - SetTeleportLocation: Local de teletransporte configurado... - HelpPageHeader: 'Paginas de ajuda - %1 - Pagina <%2 de %3>' - ListExists: A lista ja existe... - ListRemoved: Lista removida... - ListCreate: 'Criado a lista %1' - LeaseRenew: 'Locacao valida ate %1' - LeaseRenewMax: Locacao renovada para o maximo permitido - LeaseNotExpire: Nao esta para alugar, ou a locacao ainda nao expirou. - LeaseRenewalCost: 'Custo de renovacao da area %1 sera de %2' - LeaseInfinite: Tempo de locacao definida para infinito(bastante tempo!)... - PermissionsApply: Permissoes aplicadas para a residencia. - PhysicalAreas: Areas fisicas - CurrentArea: Area atual - LeaseExpire: Validade da locacao - NotOnline: O jogador alvo nao esta online. - ResidenceGiveLimits: Nao pode dar a residencia para o jogador alvo, porque esta alem dos limites do jogador alvo. - ResidenceGive: 'Voce deu a residencia %1 para o(a) %2' - ResidenceRecieve: 'Voce recebeu a residencia %1 do(a) %2' - #Version 4 New Fields - #ResidenceListAll: 'Residences - ' - removed, use GenericPage now - ResidenceListAllEmpty: Nao existe residencias no servidor... - InvalidPage: Pagina invalida... - NextPage: Proxima pagina - #Version 10 New Fields - RemovePlayersResidences: 'Removidas todas residencias do(a) %1' - GenericPage: 'Pagina %1 de %2' - #Version 11 New Fields - ResidenceRentedBy: 'Alugado por %1' - #Version 14 New Fields - InvalidCharacters: Detectado caracteres invalidos... - InvalidNameCharacters: O nome contem caracteres invalidos... - #Version 15 New Fields - DeleteConfirm: 'Se voce tem certeza que quer deletar a residencia %1, use /res confirm para confirmar.' - #Version 18 New Fields - SelectTooHigh: Aviso, a selecao foi acima do topo do mapa, limitando... - SelectTooLow: Aviso, a selecao foi abaixo do fundo do mapa, limitando... - WorldEditNotFound: WorldEdit nao foi detectado. - #Version 19 New Fields - NoResHere: Nao ha nenhuma residencia aqui. - DeleteSubzoneConfirm: 'Se voce tem certeza que quer deletar a subzona %1, use /res confirm para confirmar.' - #Version 20 New Fields - SubzoneOwnerChange: 'A subzona %1 mudou de proprietario, agora sera do(a) %2' - CoordsTop: 'X:%1 Y:%2 Z:%3' - CoordsBottom: 'X:%1 Y:%2 Z:%3' - #Version 21 New Fields - AdminToggle: 'Resadmin automaticamente alternado para %1' - #Version 22 New Fields - NoSpawn: 'You do not have move permissions at your spawn point. Relocating' - CompassTargetReset: 'Your compass has been reset' - CompassTargetSet: 'Your compass now points to %1' - - #The below lines are mostly a word bank for various uses. - #Version 1 Fields - Description: Descricao - Land: Residencia - Cost: Custo - Selection: Selecao - Total: Total - Size: Tamanho - Expanding: Expandindo - Shifting: Movendo - Up: Acima - Down: Abaixo - Error: Erro - Flags: Flags - Your: Suas - Group: Grupo - Others: Outros - Primary: Primario - Secondary: Secondario - Selection: Selecao - Moved: Movido - Status: Status - Available: Disponivel - On: On - Off: Off - Name: Nome - Lists: Listas - Residences: Residencias - Residence: Residencia - Count: Conta - Owner: Proprietario - #Version 4 Fields - World: Mundo - #Version 12 Fields - Subzones: Subzonas - #Version 20 Fields - CoordsT: Cordenadas maximas para o topo - CoordsB: Cordenadas minimas para o fundo - #Version 22 Fields - TurnOn: 'on' - TurnOff: 'off' - -# This is the help / usage messages for each command. -# It follows this format: -# -# Description: -# Info: -# SubCommands: -# - these follow the same format, and each sub command can have its own subcommands -# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that -# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). -# Add a page number after the ? mark to see that page. - -HelpLinesPerPage: 7 -CommandHelp: #this is just a holder node, that holds the entire help - Description: Contem ajuda para residencia - SubCommands: #this is the actual beginning of all commands - res: #main residence command - Description: Comando residencia pai - Info: - - 'Veja o wiki da residencia para mais informacoes.' - - 'Wiki: residencebukkitmod.wikispaces.com' - - 'Use /[comando] ? para ver mais informacoes de ajuda.' - SubCommands: - select: #selection commands - Description: Comandos de selecao - Info: - - 'Este comando seleciona areas para usar na residencia.' - - '/res select [x] [y] [z] - seleciona um raio de blocos, com o meio em voce.' - SubCommands: - coords: - Description: Mostra as cordenadas selecionadas - Info: - - 'Uso: /res select coords' - size: - Description: Mostra o tamanho selecionado - Info: - - 'Uso: /res select size' - cost: - Description: Mostra o custo da area selecionada - Info: - - 'Uso: /res select cost' - vert: - Description: Expande a selecao verticalmente - Info: - - 'Uso: /res select vert' - - 'Vai expandir a seleção tao alto e tao baixo como permitido.' - sky: - Description: Expande a selecao ate o ceu - Info: - - 'Uso: /res select sky' - - 'Expande tao alto quanto o permitido.' - bedrock: - Description: Expande a selecao ate o Bedrock - Info: - - 'Uso: /res select bedrock' - - 'Expande o mais baixo permitido.' - expand: - Description: Expande a selecao em uma direcao. - Info: - - 'Uso: /res select expand ' - - 'Expande para a direcao que voce esta olhando.' - shift: - Description: Desloca a selecao em uma direcao - Info: - - 'Uso: /res select shift ' - - 'Empurra sua selecao pela para a direcao que voce esta olhando.' - chunk: - Description: Seleciona o pedaco que voce esta. - Info: - - 'Uso: /res select chunk' - - 'Seleciona o pedaco correspondente ao que voce esta.' - residence: - Description: Seleciona uma area existente na residencia. - Info: - - 'Uso /res select ' - - 'Seleciona uma area existente na residencia.' - worldedit: - Description: Define a selecao usando a selecao corrente do WorldEdit. - Info: - - 'Uso /res select worldedit' - - 'Define a selecao usando a selecao corrente do WorldEdit.' - create: #creation command - Description: Cria residencias - Info: - - 'Uso: /res create ' - remove: #remove command - Description: Remove residencias. - Info: - - 'Uso: /res remove ' - removeall: - Description: Remove todas as residencias do jogador selecionado. - Info: - - 'Uso: /res removeall [jogador]' - - 'Remove todas as residencias do jogador selecionado.' - - 'Requer /resadmin se voce usa-lo em alguem alem de si mesmo.' - confirm: - - 'Uso: /res confirm' - - 'Confirma a remocao de residencia(s).' - subzone: - Description: Cria subzonas nas residencias. - Info: - - 'Uso: /res subzone [nome da subzona]' - - 'Se o nome da residencia estiver em branco, vai ser considerado a residencia que voce esta presente.' - area: - Description: Administra areas fisicas da residencia. - SubCommands: - list: - Description: Lista as areas fisicas da residencia - Info: - - 'Uso: /res area list [residencia] ' - listall: - Description: Lista cordenadas e outras informacoes das areas - Info: - - 'Uso: /res area listall [residencia] ' - add: - Description: Adiciona area fisica para a residencia - Info: - - 'Uso: /res area add [residencia] [areaID]' - - 'Voce precisa primeiro selecionar dois pontos.' - remove: - Description: Remove areas fisicas da residencia - Info: - - 'Uso: /res area remove [residencia] [areaID]' - replace: - Description: Substitue areas fisicas da residencia - Info: - - 'Uso: /res area replace [residencia] [areaID]' - - 'Voce precisa primeiro selecionar dois pontos.' - - 'Substituindo uma area ira cobrar a diferenca em tamanho se a nova area for maior.' - info: - Description: Mostra informacoes da residencia. - Info: - - 'Uso: /res info ' - - 'Deixando em branco vai considerar a residencia que voce esta presente.' - limits: - Description: Mostra seus limites. - Info: - - 'Uso: /res limits' - - 'Mostra as limitacoes que voce tem para criacao e administracao de residencias.' - message: - Description: Altera as mensagens de entrada/saida da residencia - Info: - - 'Uso: /res message [enter/leave] [mensagem]' - - 'Define a mensagem de entrada ou saida da residencia.' - - 'Uso: /res message remove [enter/leave]' - - 'Remove a mensagem de entrada ou saida.' - lease: - Description: Administra locacoes da residencia - Info: - - 'Uso: /res lease [renew/cost] [residencia]' - - '/res lease cost ira mostrar o custo para renovar a locacao da residencia.' - - '/res lease renew ira renovar a locacao da residencia, desde que voce tenha dinheiro sulficiente.' - SubCommands: - set: - Description: Define o tempo para renovacao (admin apenas) - Info: - - 'Uso: /resadmin lease set [residencia] [#days/infinite]' - - 'Define o tempo para renovacao especificando o numero de dias, ou infinito.' - bank: - Description: Administra o dinheiro na residencia - Info: - - 'Uso: /res bank [deposit/withdraw] [quantia]' - - 'Voce precisa estar na residencia' - - 'Voce precisa ter a flag +bank na residencia.' - tp: - Description: Teleporta para a residencia - Info: - - 'Uso: /res tp [residencia]' - - 'Teleporta voce para a residencia, voce precisa ter a flag +tp ou ser o dono.' - - 'Precisa ter permicao de teleporte pelo servidor.' - tpset: - Description: Define o local de teleporte na residencia - Info: - - 'Uso: /res tpset' - - 'Isto ira definir o local de teleporte onde voce esta, da residencia que voce esta presente.' - - 'Voce precisa estar em uma residencia para usar este comando.' - - 'Voce precisa ser o dono ou ter a flag +admin na residencia.' - set: - Description: Define as flags gerais na residencia - Info: - - 'Uso: /res set [flag] [true/false/remove]' - - 'Para ver a lista de flags, use /res flags ?' - - 'Essas flags se aplica a todos os jogadores que nao tem a flag aplicada especificamente para ele. (veja /res pset ?)' - pset: - Description: Define as flags para um jogador especifico na residencia. - Info: - - 'Uso: /res pset [jogador] [flag] [true/false/remove]' - - 'Uso: /res pset [jogador] removeall' - - 'Para ver a lista de flags, use /res flags ?' - gset: - Description: Define as flags para um grupo especifico na residencia. - Info: - - 'Uso: /res gset [grupo] [flag] [true/false/remove]' - - 'Para ver a lista de flags, use /res flags ?' - lset: - Description: Altera as opcoes da blacklist e da ignorelist - Info: - - 'Uso: /res lset [blacklist/ignorelist] [material]' - - 'Uso: /res lset info' - - 'Blaclist impede que algum bloco especifico seja colocado na residencia.' - - 'Ignorelist faz com que algum bloco especifico nao seja protegido pela residencia.' - flags: - Description: Lista de flags - Info: - - 'Para valores de flag, geralmente true permite a acao, e false impede a acao.' - list: - Description: Lista residencias de um jogador - Info: - - 'Uso: /res list ' - - 'Lista todas as residencias que o jogador tem (com excesao das ocultas).' - - 'Se estiver listando suas proprias residencias, as ocultas irao aparecer.' - - 'Para listar todas as residencias do servidor, use /res listall.' - listhidden: - Description: Lista residencias ocultas (ADMIN APENAS) - Info: - - 'Uso: /res listhidden ' - - 'Lista as residencias ocultas de um jogador.' - listall: - Description: Lista todas as residencias - Info: - - 'Uso: /res listall ' - - 'Lista todas as residencias do servidor. (exceto as ocultas que voce nao tem posse)' - listallhidden: - Description: Lista todas as residencias ocultas (ADMIN APENAS) - Info: - - 'Uso: /res listhidden ' - - 'Lista todas as residencias ocultas do servidor.' - sublist: - Description: Lista subzonas de uma residencia - Info: - - 'Uso: /res sublist ' - - 'Lista as subzonas dentro da residencia.' - default: - Description: Reseta as flags da residencia para o padrao. - Info: - - 'Uso: /res default ' - - 'Reseta as flags da residencia para o padrao. Voce deve ser o dono ou ter a flag +admin na residencia para fazer isso.' - rename: - Description: Renomeia residencias. - Info: - - 'Uso: /res rename [nome antigo] [novo nome]' - - 'Voce deve ser o dono ou ter a flag +admin na residencia para fazer isso.' - - 'O nome nao pode ser igual o de outra residencia.' - mirror: - Description: Copia flags - Info: - - 'Uso: /res mirror [residencia a ser copiada] [residencia a ser colada]' - - 'Copia as flags de uma residencia para outra. Voce deve ser o dono ou ter a flag +admin na residencia para fazer isso.' - market: - Description: Compra, vende, ou aluga residencias - Info: - - 'Uso: /res market ? para mais informacoes' - SubCommands: - info: - Description: Mostra informacoes de mercado de uma residencia - Info: - - 'Uso: /res market info [residencia]' - - 'Mostra se a residencia esta a venda ou para alugar, e seu custo.' - list: - Description: Lista as residencias para alugar e a venda. - Info: - - 'Uso: /res market list' - sell: - Description: Vende uma residencia - Info: - - 'Uso: /res market sell [residencia] [quantia]' - - 'Poe a residencia para vender por [quantia] de dinheiro.' - - 'Outro jogador pode comprar usando /res market buy' - buy: - Description: Compra uma residencia - Info: - - 'Uso: /res market buy [residencia]' - - 'Compra a residencia se ela estiver a venda.' - unsell: - Description: Tira uma residencia da venda - Info: - - 'Uso: /res market unsell [residencia]' - rent: - Description: Aluga uma residencia - Info: - - 'Uso: /res market rent [residencia] ' - - 'Aluga uma residencia. Autorenova pode ser true ou false. Se for true, a residencia vai ser automaticamente re-alugada quando expirar o tempo definido pelo dono.' - rentable: - Description: Faz de uma residencia alugavel. - Info: - - 'Uso: /res market rentable [residencia] [custo] [dias] ' - - 'Faz uma residencia alugavel por [custo] de dinheiro por [dias]. Se for true, a residencia pode ser automaticamente re-alugada quando os dias expirarem.' - release: - Description: Retira a residencia do aluga-se, ou para de alugar uma residencia. - Info: - - 'Uso: /res market release [residencia]' - - 'Se voce for o cliente, este comando tira o aluguel da casa.' - - 'Se voce for o dono, este comando tira a residencia do aluga-se.' - current: - Description: Mostra a residencia que voce esta presente. - Info: - - 'Uso: /res current' - lists: - Description: Lista as definicoes pre-definidas - Info: - - 'Definicoes pre-definidas podem ser aplicadas nas residencias.' - SubCommands: - add: - Description: Add uma lista - Info: - - 'Uso: /res lists add ' - remove: - Description: Remove uma lista - Info: - - 'Uso: /res lists remove ' - apply: - Description: Aplica uma lista a residencia - Info: - - 'Uso: /res lists apply ' - set: - Description: Define uma flag - Info: - - 'Uso: /res lists set ' - pset: - Description: Define a flag de um jogador - Info: - - 'Uso: /res lists pset ' - gset: - Description: Define a flag de um grupo - Info: - - 'Uso: /res lists gset ' - view: - Description: Visualiza a lista. - Info: - - 'Uso: /res lists view ' - server: - Description: Faz o servidor dono da residencia (admin apenas). - Info: - - 'Uso: /resadmin server [residencia]' - - 'Faz o servidor dono da residencia.' - setowner: - Description: Altera o dono da residencia (admin apenas). - Info: - - 'Uso: /resadmin setowner [residencia] [jogador]' - resreload: - Description: Recarrega o plugin residence (admin apenas). - Info: - - 'Uso: /resreload' - resload: - Description: Carrega os salvos do plugin residence (INSEGURO, admin apenas). - Info: - - 'Uso: /resload' - - 'comando INSEGURO, nao salva as residencias primeiro.' - - 'Carrega os salvos do plugin residence depois de voce ter feito alteracoes.' - version: - Description: Mostra a versao do plugin residence - Info: - - 'Uso: /res version' diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml deleted file mode 100644 index 0b46cdeec..000000000 --- a/src/Language/Chinese.yml +++ /dev/null @@ -1,787 +0,0 @@ -# 注æ„:如果你想修改这个文件,强烈建议您制作一个副本 此文本由龙梦云ddmcloud.comæä¾› -# 龙梦云 您最好的选择 Q493537777 -# 接å—å„ç§æ’件,php定制 -# 而ä¸æ˜¯ç›´æŽ¥ä¿®æ”¹.这个文件将被 Residence æ’件自动更新 -# 当检测到一个新的版本,您的更改将被覆盖. -# 一旦你有此文件的副本,更改config.yml的语言选项Language: -# 为你命å的副本. - -Language: - # 下é¢æ˜¯ Residence æ’件å‘é€ç»™çŽ©å®¶çš„ä¿¡æ¯ - # 需è¦æ³¨æ„的是一些å˜é‡,åƒ %1 è¿™ç§,ä¸è¦æ”¹å˜. - NewPlayerInfo: '&eIf you want to create protected area for your house, please use - wooden axe to select opposite sides of your home and execute command &2/res create - YourResidenceName' - InvalidResidence: "无效的领地..." - InvalidSubzone: "无效的领地å­åŒºåŸŸ..." - InvalidDirection: "无效方å‘..." - InvalidChannel: "无效频é“..." - InvalidAmount: "无效数é‡..." - InvalidCost: "无效花费..." - InvalidDays: "无效的天数..." - InvalidMaterial: "无效的ææ–™..." - InvalidBoolean: "无效值,必须是 true(t) 或者\ - \ false(f)" - InvalidArea: "无效的区域..." - InvalidGroup: "无效的æƒé™ç»„..." - # Replace all text with '' to disable this message - CantPlaceLava: You can't place lava outside residence and higher than %1 block level - # Replace all text with '' to disable this message - CantPlaceWater: You can't place Water outside residence and higher than %1 block level - InvalidMessageType: "消æ¯ç±»åž‹å¿…须为enter(进入\ - 领地信æ¯)leave(离开领地信æ¯)或remove(移\ - 除信æ¯)." - InvalidFlag: "æƒé™æ— æ•ˆ..." - InvalidFlagState: "无效的æƒé™çŠ¶æ€, 必须是\ - \ true(t)å¼€å¯, false(f)关闭, 或者 remove(r)移除" - AreaExists: "区域åå­—å·²ç»å­˜åœ¨." - AreaCreate: "领地ID %1 创建æˆåŠŸ" - AreaDiffWorld: "区域与领地是在一个ä¸åŒ\ - 的世界." - AreaCollision: "区域与领地 %1 冲çª" - AreaSubzoneCollision: "区域和领地å­åŒºåŸŸ %1 冲\ - çª" - AreaNonExist: "区域ä¸å­˜åœ¨." - AreaInvalidName: "区域å无效..." - AreaToSmallTotal: Selected area smaller than allowed minimal (%1) - AreaToSmallX: Your x selection length is too small. %1 allowed %2 - AreaToSmallY: Your selection height is too small. %1 allowed %2 - AreaToSmallZ: Your z selection length is too small. %1 allowed %2 - AreaRename: "区域å从 %1 更改到 %2" - AreaRemove: "移除区域 %1..." - AreaRemoveLast: "ä¸èƒ½æŠŠæœ€åŽä¸€ä¸ªåŒºåŸŸä»Žé¢†\ - 地中移除." - AreaNotWithinParent: "这个区域ä¸åœ¨çˆ¶åŒºåŸŸä¹‹\ - 内." - AreaUpdate: "区域已更新..." - AreaMaxPhysical: "ä½ å·²ç»è¾¾åˆ°ä½ çš„领地所å…\ - 许的最大区域." - AreaSizeLimit: "区域的大å°è¶…出你å…许的\ - 范围上é™." - AreaHighLimit: "ä½ ä¸èƒ½ä¿æŠ¤è¿™æ ·é«˜çš„领地\ - ,你的上é™æ˜¯ %1" - AreaLowLimit: "ä½ ä¸èƒ½ä¿æŠ¤è¿™æ ·æ·±çš„领地\ - ,你的上é™æ˜¯ %1" - NotInResidence: "ä½ ä¸åœ¨ä¸€ä¸ªé¢†åœ°é‡Œ." - Kicked: You were kicked from residence - InResidence: "你正站在领地 %1里" - ResidenceOwnerChange: "领地的拥有者从玩家 %1\ - \ 改为玩家 %2" - NonAdmin: "ä½ ä¸æ˜¯é¢†åœ°çš„管ç†å‘˜." - AdminOnly: "åªæœ‰ç®¡ç†å‘˜æ‰èƒ½ä½¿ç”¨è¿™ä¸ªæƒ\ - é™." - ChatDisabled: "领地èŠå¤©å·²å…³é—­..." - SubzoneRename: "领地å­åŒºåŸŸ%1 å·²é‡å‘½å为\ - \ %2" - SubzoneRemove: "领地å­åŒºåŸŸ %1 已移除." - SubzoneCreate: "创建领地å­åŒºåŸŸ %1" - SubzoneCreateFail: "ä¸èƒ½åˆ›å»ºé¢†åœ°å­åŒºåŸŸ %1" - SubzoneExists: "领地å­åŒºåŸŸ %1 å·²ç»å­˜åœ¨." - SubzoneCollide: "领地å­åŒºåŸŸä¸Žå¦ä¸€ä¸ªé¢†åœ°\ - å­åŒºåŸŸ %1 冲çª" - SubzoneMaxDepth: "您已达到了系统å…许的最\ - 大分区深度." - SubzoneSelectInside: "两个选择点必须在领地\ - 内" - SelectPoints: "在用这个命令之å‰ï¼Œè¯·å…ˆ\ - 用选择工具选å–两个点!" - SelectOverlap: '&cSelected points overlap with &e%1 &cregion!' - SelectionSuccess: "选择æˆåŠŸ!" - SelectionFail: "无效的选择命令..." - SelectionBedrock: "扩大到å…许的最低高度." - SelectionSky: "扩大到å…许的最高高度." - SelectionArea: "在领地 %2 中选择区域 %1" - SelectDiabled: "你没有使用选择命令的æƒ\ - é™." - NoPermission: "你没有此命令的æƒé™." - OwnerNoPermission: "所有者无此命令的æƒé™\ - ." - ParentNoPermission: "你没有改å˜çˆ¶åŒºåŸŸçš„æƒ\ - é™." - MessageChange: "消æ¯å·²è®¾ç½®..." - FlagSet: "æƒé™å·²è®¾ç½®..." - FlagCheckTrue: "æƒé™ %1 为玩家 %2 在领地 %3 设\ - ç½®,值为=%4" - FlagCheckFalse: "æƒé™ %1 未为玩家 %2 在领地中\ - 设置." - FlagsCleared: "æƒé™å·²æ¸…除." - FlagsDefault: "æƒé™å·²è®¾ç½®ä¸ºé»˜è®¤." - Usage: "命令用法" - InvalidHelp: "无效的帮助页..." - SubCommands: "å­å‘½ä»¤" - InvalidList: "未知列表的类型,必须是黑\ - åå•ä¸­çš„类型." - MaterialGet: "ææ–™å称为ID %1 是 %2" - MarketDisabled: "市场被ç¦ç”¨!" - MarketList: "市场列表" - ResidenceList: '&a%1%2 &e- %3: %4' - Rented: ' &a(Rented)' - SignsUpdated: '&e%1 signs updated!' - SignTopLine: '[market]' - SignDateFormat: YY/MM/dd HH:mm - SignForRentTopLine: '&8For Rent' - SignForRentPriceLine: '&8%1&f/&8%2&f/&8%3' - SignForRentResName: '&8%1' - SignForRentBottomLine: '&9Available' - SignRentedAutorenewTrue: '&2' - SignRentedAutorenewFalse: '&c' - SignRentedTopLine: '%1' - SignRentedPriceLine: '&8%1&f/&8%2&f/&8%3' - SignRentedResName: '&8%1' - SignRentedBottomLine: '&1%1' - SignForSaleTopLine: '&8For Sale' - SignForSalePriceLine: '&8%1' - SignForSaleResName: '&8%1' - SignForSaleBottomLine: '&5Available' - SelectionTool: "选择工具" - InfoTool: "ä¿¡æ¯å·¥å…·" - NoBankAccess: "你没有银行æƒé™.." - NotEnoughMoney: "你没有足够的æƒé™." - BankNoMoney: "在银行里没有足够的钱." - BankDeposit: "ä½ å­˜ %1 元到领地银行." - BankWithdraw: "ä½ å–出 %1 元从领地银行." - MoneyCharged: "支出 %1 元从 %2 å¸æˆ·." - MoneyAdded: Got %1 to your %2 account. - MoneyCredit: "收入 %1 元从 %2 å¸æˆ·." - RentReleaseInvalid: "领地 %1 没有被租用或者被\ - 出租." - RentSellFail: "ä¸èƒ½å‡ºå”®ä¸€ä¸ªè¢«ç§Ÿå‡ºåŽ»çš„\ - 领地." - SellRentFail: "无法出售当å‰æ­£åœ¨å‡ºç§Ÿé¢†\ - 地." - OwnerBuyFail: "无法购买自己的土地!" - OwnerRentFail: "ä¸èƒ½ç§Ÿä½ è‡ªå·±çš„土地!" - AlreadySellFail: "领地已ç»å‡ºå”®!" - ResidenceBought: "ä½ å·²ç»ä¹°ä¸‹äº†é¢†åœ° %1" - ResidenceBuy: "玩家 %1 从你那买下了领地\ - \ %2." - ResidenceBuyTooBig: "此领地已超过系统å…许\ - 的最大领域." - ResidenceNotForSale: "领地没有用于出售." - ResidenceForSale: "现在以 %2 销售领地 %1 " - ResidenceStopSelling: "领地ä¸å†é”€å”®." - ResidenceTooMany: "已达到系统å…许领地的最\ - 大上é™." - ResidenceMaxRent: "已达到系统å…许你租用领\ - 地的最大上é™." - ResidenceAlreadyRent: "领地已ç»è¢«ç§Ÿç”¨..." - ResidenceNotForRent: "领地ä¸ç”¨äºŽå‡ºç§Ÿ..." - ResidenceNotRented: "领地没有被租用." - ResidenceUnrent: "领地%1å·²ä¸å†å‡ºç§Ÿ." - ResidenceRemoveRentable: "领地 %1 ä¸å†å‡ºç§Ÿ." - ResidenceForRentSuccess: "领地%1 现在租金为%2,æ¯\ - 次 %3天." - ResidenceRentSuccess: "ä½ å·²ç»ç§Ÿç”¨é¢†åœ° %1 %2天.." - ResidenceAlreadyRented: "领地 %1,ç›®å‰å·²å‡ºç§Ÿç»™ %2" - ResidenceAlreadyExists: "领地 %1已存在." - ResidenceCreate: "你创建了领地 %1!" - ResidenceRename: "领地 %1 已改å为 %2" - ResidenceRemove: "领地 %1 å·²ç»è¢«ç§»é™¤..." - RentDisabled: "租用领地被ç¦ç”¨..." - RentDisableRenew: "%1 自动到期续约已关闭" - RentEnableRenew: "%1 自动到期续约已开å¯." - RentableDisableRenew: "%1 æ›´æ–°å¯ç§Ÿç”¨çŠ¶æ€å…³é—­\ - ." - RentableEnableRenew: "%1 æ›´æ–°å¯ç§Ÿç”¨çŠ¶æ€å¼€å¯." - LandForSale: "出售土地" - SellAmount: "销售金é¢" - LeaseExpire: "租约期满" - RentExpire: "租用到期时间" - RentableAutoRenew: "自动更新å¯ç§Ÿç”¨çš„土地" - RentAutoRenew: "租用自动更新" - RentableLand: "å¯ä¾›ç§Ÿç”¨çš„土地" - ListMaterialAdd: "%1 添加到领地 %2" - ListMaterialRemove: "%1 已从领地 %2移除" - ItemBlacklisted: "ä½ ä¸èƒ½åœ¨è¿™ä½¿ç”¨è¢«ç¦æ­¢çš„\ - 物å“." - RentedModifyDeny: "ä¸èƒ½ä¿®æ”¹ä¸€ä¸ªç§Ÿæ¥çš„领地\ - ." - WorldPVPDisabled: "当å‰ä¸–界的PvP被ç¦æ­¢." - NoPVPZone: "ç¦æ­¢PVP的区域." - FlagDeny: "你没有拥有领地 %1 çš„æƒé™." - FlagSetDeny: "所有者ä¸èƒ½ä½¿ç”¨è¿™ä¸ªæƒé™\ - \ %1" - SelectPoint: "选择了 %1的选择点" - ResidenceChat: "领地èŠå¤©åˆ‡æ¢åˆ° %1" - ResidenceMoveDeny: "你没有领地 %1 的移动æƒé™" - ResidenceFlagDeny: You dont have %1 permission for Residence %2 - TeleportDeny: "你没有传é€æƒé™." - TeleportSuccess: "已传é€!" - TeleportConfirm: '&eThis teleport is not safe, you will fall for &c%1 &eblocks. - Use &2/res tpconfirm &eto perform teleportation anyways.' - TeleportStarted: '&eTeleportation to %1 started, don''t move for next %2 sec.' - TeleportCanceled: '&eTeleportation canceled!' - NoTeleportConfirm: There is no teleports waiting for confirmation! - TeleportNear: "ä¼ é€åˆ°é¢†åœ°çš„附近." - TeleportNoFlag: "对ä¸èµ·ï¼Œä½ æ²¡æœ‰ä¼ é€æƒé™\ - 去目标领地." - SetTeleportLocation: "ä¼ é€ç‚¹å·²è®¾ç½®..." - HelpPageHeader: "帮助页 - %1 - 第 %2 页 å…± %3 页" - ListExists: "列表已ç»å­˜åœ¨..." - ListRemoved: "列表被移除..." - ListCreate: "已创建列表 %1" - LeaseRenew: "出租有效期至 %1到期" - LeaseRenewMax: "出租最大的å…许值" - LeaseNotExpire: "没有这样的出租或者出租\ - 未到期." - LeaseRenewalCost: "更新区域 %1 的花费是 %2" - LeaseInfinite: "出租时间已设置为无é™..." - PermissionsApply: "æƒé™å·²åº”用到领地." - PhysicalAreas: "物ç†åŒºåŸŸ" - CurrentArea: "当å‰åŒºåŸŸ" - TotalWorth: Total worth of residence:&3 %1 (%2) - NotOnline: "目标玩家必须在线." - ResidenceGiveLimits: "无法给予目标玩家,因\ - 为这超过了目标玩家的上é™" - ResidenceGive: "你把领地 %1 给了玩家 %2" - ResidenceRecieve: "你从玩家 %2 那里接收到了\ - \ %1 领地" - ResidenceListAllEmpty: "在这个æœåŠ¡å™¨ä¸Šæ²¡æœ‰ä»»\ - 何的领地..." - InvalidPage: "无效页数..." - NextPage: "下一页" - NextInfoPage: '&2| &eNext Page &2>>>' - PrevInfoPage: '&2<<< &ePrev Page &2|' - RemovePlayersResidences: "删除了所有这个玩家\ - 的领地 %1" - GenericPage: "第 %1 页,å…± %2 页" - ResidenceRentedBy: "被 %1 租用" - InvalidCharacters: "侦测到无效åå­—..." - InvalidNameCharacters: "å字里包å«éžæ³•å­—符..." - DeleteConfirm: "你确定è¦åˆ é™¤è¿™ä¸ªé¢†åœ° %1\ - \ å—?, 请用命令/res confirm æ¥ç¡®å®š." - SelectTooHigh: "警告,选择区域超过地图顶\ - 部,已é™åˆ¶." - SelectTooLow: "警告,选择区域超过地图底\ - 部,已é™åˆ¶." - WorldEditNotFound: "未检出 WorldEdit æ’件." - NoResHere: "这个ä½ç½®æ²¡æœ‰é¢†åœ°." - DeleteSubzoneConfirm: "你确定你è¦åˆ é™¤çš„分区\ - %1å—?,请用命令/res confirm æ¥ç¡®å®š." - SubzoneOwnerChange: "分区 %1 所有者改为 %2" - CoordsTop: X:%1 Y:%2 Z:%3 - CoordsBottom: X:%1 Y:%2 Z:%3 - AdminToggle: "自动resadmin切æ¢å·²%1." - NoSpawn: "你在é‡ç”Ÿç‚¹å¤„没有移动æƒé™\ - .å·²é‡ç½®" - CompassTargetReset: "您的标记指å—针已é‡ç½®" - CompassTargetSet: "您的标记指å—针设置为\ - \ %1" - # The below lines are mostly a word bank for various uses. - Description: "æè¿°" - Land: "土地" - Cost: "花费" - Selection: "选择" - Total: "总计" - Size: "尺寸" - Expanding: "扩张" - Contracting: Contracting - North: North - West: West - South: South - East: East - Shifting: "移" - Up: "上" - Down: "下" - Error: "错误" - Flags: "æƒé™" - Your: "ä½ çš„" - Group: "组" - Others: "其他人" - Primary: "第一个" - Secondary: "第二个" - Moved: "移动" - Status: "状æ€" - Available: "å¯ç”¨" - 'On': 'On' - 'Off': 'Off' - Name: "åå­—" - Lists: "列表" - Residences: "领地" - Residence: "领地" - Count: "统计" - Owner: "所有者" - World: "世界" - Subzones: "领地å­åŒºåŸŸ" - CoordsT: "顶部åæ ‡" - CoordsB: "底部åæ ‡" - TurnOn: 'on' - TurnOff: 'off' - LimitsTop: '----------------------------------------' - LimitsPGroup: '&7- &ePermissions Group:&3 %1' - LimitsRGroup: '&7- &eResidence Group:&3 %1' - LimitsAdmin: '&7- &eResidence Admin:&3 %1' - LimitsCanCreate: '&7- &eCan Create Residences:&3 %1' - LimitsMaxRes: '&7- &eMax Residences:&3 %1' - LimitsMaxEW: '&7- &eMax East/West Size:&3 %1' - LimitsMaxNS: '&7- &eMax North/South Size:&3 %1' - LimitsMaxUD: '&7- &eMax Up/Down Size:&3 %1' - LimitsMinMax: '&7- &eMin/Max Protection Height:&3 %1 to %2' - LimitsMaxSub: '&7- &eMax Subzone Depth:&3 %1' - LimitsMaxRents: '&7- &eMax Rents:&3 %1' - LimitsEnterLeave: '&7- &eCan Set Enter/Leave Messages:&3 %1' - LimitsNumberOwn: '&7- &eNumber of Residences you own:&3 %1' - LimitsCost: '&7- &eResidence Cost Per Block:&3 %1' - LimitsSell: '&7- &eResidence Sell Cost Per Block:&3 %1' - LimitsFlag: '&7- &eFlag Permissions:&3 %1' - LimitsMaxDays: '&7- &eMax Lease Days:&3 %1' - LimitsLeaseTime: '&7- &eLease Time Given on Renew:&3 %1' - LimitsRenewCost: '&7- &eRenew Cost Per Block:&3 %1' - LimitsBottom: '----------------------------------------' - Gui: - Set: - Title: '&6%1% flags' - Pset: - Title: '&6%1% %2% flags' - Actions: - - '&2Left click to enable' - - '&cRight click to disable' - - '&eShift + left click to remove' - InformationPage: - TopLine: '&e---< &a %1 &e >---' - Page: '&e-----< %1 >-----' - NextPage: '&e-----< %1 >-----' - NoNextPage: '&e-----------------------' - AutoSelection: - Enabled: '&eAuto selection mode turned ON. To disable it write /res select auto' - Disabled: '&eAuto selection mode turned OFF. To enable it again write /res select - auto' -CommandHelp: - Description: "领地包å«çš„帮助" - SubCommands: - res: - Description: "主è¦é¢†åœ°å‘½ä»¤" - Info: - - "查阅residence wiki æ¥èŽ·å¾—更多帮助." - - 'Wiki: residencebukkitmod.wikispaces.com' - - "使用 /[命令] ? <页ç > æ¥æŸ¥çœ‹æ›´å¤š\ - 帮助信æ¯." - SubCommands: - select: - Description: "选择命令" - Info: - - "该命令选择领地è¦ä½¿ç”¨çš„范\ - å›´." - - "/res select [x] [y] [z] - 选择方å—范围, 以\ - 你所处ä½ç½®ä¸ºä¸­å¿ƒ." - SubCommands: - coords: - Description: "显示选择的åæ ‡" - Info: - - "使用: /res select coords" - size: - Description: "显示选择体积" - Info: - - "使用: /res select size" - auto: - Description: Turns on auto selection tool - Info: - - 'Usage: /res select auto [playername]' - cost: - Description: "显示选择对象的价格" - Info: - - "使用: /res select cost" - vert: - Description: "纵å‘扩张选择区域" - Info: - - "使用: /res select vert" - - "将把选择区域扩张到å…许\ - 的最高点和最低点." - sky: - Description: "扩张选择区域到天空" - Info: - - "使用: /res select sky" - - "将把选择区域扩张到å…许\ - 的最高点." - bedrock: - Description: "扩张选择区域到基岩" - Info: - - "使用: /res select bedrock" - - "将把选择区域扩张到å…许\ - 的最低点." - expand: - Description: "å‘一个方å‘扩张选择\ - 区域." - Info: - - "使用: /res select expand <æ•°é‡>" - - "扩张 <æ•°é‡> 个方å—,å‘ä½ é¢\ - 对的方å‘." - shift: - Description: "å‘一个方å‘平移选择\ - 区域" - Info: - - "使用: /res select shift <æ•°é‡>" - - "将选择区域å‘ä½ é¢å¯¹çš„æ–¹\ - å‘推进 <æ•°é‡> 个方å—." - chunk: - Description: "选择你目å‰æ‰€åœ¨çš„区\ - 域å—." - Info: - - "使用: /res select chunk" - - "选择你目å‰æ‰€åœ¨çš„区域å—\ - ." - residence: - Description: "选择领地中一个已存\ - 在区域." - Info: - - "使用 /res select <领地å> <区域ID>" - - "选择领地中一个已存在区\ - 域." - worldedit: - Description: "设置选å–使用当å‰WorldEdit选\ - æ‹©." - Info: - - "使用 /res select worldedit" - - "设置选å–区域使用当å‰WorldEditçš„\ - 选择." - create: - Description: "创建领地" - Info: - - "使用: /res create <领地å>" - remove: - Description: "删除领地." - Info: - - "使用: /res remove <领地å>" - removeall: - Description: "删除æŸä¸ªçŽ©å®¶çš„所有领\ - 地." - Info: - - "使用: /res removeall [领地拥有者]" - - "删除所选玩家的所有领地." - - "éœ€è¦ /resadmin 如果你使用在其他\ - 玩家身上." - confirm: - Description: Confirms removal of a residence. - info: - - 'Usage: /res confirm' - - Confirms removal of a residence. - subzone: - Description: "在领地中创建领地å­åŒº\ - 域." - Info: - - "使用: /res subzone <领地å> [领地å­åŒº\ - 域å]" - - "如果领地å空ç€ï¼Œå°†å°è¯•ä½¿\ - 用你身处的领地." - area: - Description: "管ç†é¢†åœ°çš„物ç†èŒƒå›´." - SubCommands: - list: - Description: "列出领地的所有物ç†\ - 范围" - Info: - - "使用: /res area list [领地] <页ç >" - listall: - Description: "列出区域的å标和其\ - ä»–ä¿¡æ¯" - Info: - - "使用: /res area listall [领地] <页ç >" - add: - Description: "为领地添加物ç†èŒƒå›´" - Info: - - "使用: /res area add [领地å] [范围ID]" - - "你必须首先选择两个点." - remove: - Description: "从领地中删除物ç†èŒƒ\ - å›´" - Info: - - "使用: /res area remove [领地å] [范围\ - ID]" - replace: - Description: "替æ¢é¢†åœ°ä¸­ç‰©ç†èŒƒå›´" - Info: - - "使用: /res area replace [领地å] [范围\ - ID]" - - "你必须首先选择两个点." - - "替æ¢èŒƒå›´å°†æ‰£é™¤ä½“积å˜åŠ¨\ - 带æ¥çš„差价." - info: - Description: "显示领地的信æ¯." - info: - - 'Usage: /res info ' - - Leave off to display info for the residence your currently in. - limits: - Description: "显示你的é™åˆ¶ä¿¡æ¯." - info: - - 'Usage: /res limits' - - Shows the limitations you have on creating and managing residences. - message: - Description: "管ç†é¢†åœ°è¿›å…¥/离开欢迎\ - ä¿¡æ¯" - info: - - 'Usage: /res message [enter/leave] [message]' - - Set the enter or leave message of a residence. - - 'Usage: /res message remove [enter/leave]' - - Removes a enter or leave message. - lease: - Description: "管ç†é¢†åœ°å¥‘约" - info: - - 'Usage: /res lease [renew/cost] [residence]' - - /res lease cost will show the cost of renewing a residence lease. - - /res lease renew will renew the residence provided you have enough money. - SubCommands: - set: - Description: "设置契约时间 (管ç†å‘˜\ - æƒé™)" - Info: - - "使用: /resadmin lease set [领地] [#days/infinite]" - - "设置契约时间为指定的天\ - æ•°, 或无é™æœŸ." - bank: - Description: "管ç†é¢†åœ°é‡‘é’±" - Info: - - "使用: /res bank [deposit/withdraw] [æ•°é‡]" - - "你必须站在一个领地中" - - "你必须拥有 +bank æƒé™." - tp: - Description: "ä¼ é€åˆ°æŸä¸ªé¢†åœ°" - Info: - - "使用: /res tp [领地å]" - - "将你传é€åˆ°æŸä¸ªé¢†åœ°, ä½ å¿…é¡»\ - 有 +tp æƒé™æˆ–为目标领地主人\ - ." - - "ä½ çš„æƒé™ç»„åŒæ—¶å¿…须拥有传\ - é€çš„æƒé™." - tpconfirm: - Description: Ignore unsafe teleportation warning and teleport anyways - Info: - - 'Usage: /res tpconfirm' - - Teleports you to a residence, when teleportation is unsafe. - tpset: - Description: "设置领地的传é€ç‚¹" - Info: - - "使用: /res tpset" - - "将把你站立的地点设置为领\ - 地的传é€ç‚¹." - - "你必须站在领地中æ¥ä½¿ç”¨è¯¥\ - 命令." - - "ä½ å¿…é¡»åŒæ—¶ä¸ºé¢†åœ°ä¸»äººæˆ–æ‹¥\ - 有该领地的 +admin æƒé™." - set: - Description: "设置领地的主è¦æƒé™" - Info: - - "使用: /res set <领地> [æƒé™] [true/false/remove]" - - "查看æƒé™åˆ—表, 使用 /res flags ?" - - "这些æƒé™åº”用给任何没有特\ - 定æƒé™çš„玩家. (查看 /res pset ?)" - pset: - Description: "为æŸä¸ªçŽ©å®¶è®¾ç½®æŸä¸ªé¢†\ - 地的特定æƒé™." - Info: - - "使用: /res pset <领地> [玩家] [æƒé™]\ - \ [true/false/remove]" - - "使用: /res pset <领地> [玩家] removeall" - - "查看æƒé™åˆ—表使用 /res flags ?" - gset: - Description: "为特定群组设置æŸä¸ªé¢†\ - 地的æƒé™." - Info: - - "使用: /res gset <领地> [群组] [æƒé™]\ - \ [true/false/remove]" - - "查看æƒé™åˆ—表使用 /res flags ?" - lset: - Description: "改å˜ç‰©å“的黑åå•ä¸Žå¿½\ - 视åå•é€‰é¡¹" - Info: - - "使用: /res lset <领地> [blacklist/ignorelist] [物\ - å“]" - - "使用: /res lset <领地> info" - - "å°†æŸç‰©å“加入领地的黑åå•\ - ,以防止该物å“被放置在该\ - 领地中." - - "忽视åå•ä½¿æŸç‰©å“ä¸å—领地\ - ä¿æŠ¤." - flags: - Description: "æƒé™åˆ—表" - Info: - - "æƒé™çš„值: true=å…许该行为, false=ç¦æ­¢." - list: - Description: "领地列表" - Info: - - "使用: /res list <玩家> <页ç >" - - "列出玩家拥有的所有领地 (除\ - 了éšè—çš„)." - - "如果是你自己的领地, 将显示\ - éšè—çš„." - - "列出所有人的所有领地, 使用\ - \ /res listall." - listhidden: - Description: "列出éšè—领地(管ç†å‘˜æƒ\ - é™)" - Info: - - "使用: /res listhidden <玩家> <页ç >" - - "列出æŸçŽ©å®¶çš„所有éšè—领地\ - ." - listall: - Description: "列出所有领地" - Info: - - "使用: /res listall <页ç >" - - "列出æœåŠ¡å™¨çš„所有领地. (出\ - 去éžä½ æ‹¥æœ‰çš„éšè—领地)" - listallhidden: - Description: "列出所有éšè—领地(管ç†\ - 员æƒé™)" - Info: - - "使用: /res listhidden <页ç >" - - "列出æœåŠ¡å™¨çš„所有éšè—领地\ - ." - sublist: - Description: "列出领地领地å­åŒºåŸŸ" - Info: - - "使用: /res sublist <领地> <页ç >" - - "列出æŸé¢†åœ°æ‰€æœ‰é¢†åœ°å­åŒºåŸŸ\ - ." - default: - Description: "é‡ç½®é¢†åœ°çš„æƒé™ä¸ºé»˜è®¤\ - 值." - Info: - - "使用: /res default <领地>" - - "é‡ç½®é¢†åœ°çš„æƒé™ä¸ºé»˜è®¤å€¼. ä½ \ - 必须是领地主人或管ç†å‘˜." - rename: - Description: "é‡å‘½å领地." - Info: - - "使用: /res rename [æ—§å称] [æ–°å称]" - - "你必须是领地主人或管ç†å‘˜\ - ." - - "æ–°å称必须没有被其他领地\ - 使用." - mirror: - Description: "é•œåƒæƒé™" - Info: - - "使用: /res mirror [æºé¢†åœ°] [目标领地\ - ]" - - "å°†æºé¢†åœ°é¢†åœ°æƒé™é•œåƒç»™ç›®\ - 标领地. 你你必须是领地主人\ - 或管ç†å‘˜." - market: - Description: "领地的买å–和租èµ" - SubCommands: - info: - Description: "获得领地的ç»æµŽä¿¡æ¯" - Info: - - "使用: /res market info [领地]" - - "显示领地是å¦å‡ºå”®æˆ–出租\ - , å·²ç»å‡ºä»·." - list: - Description: "列出å¯ç§Ÿå€Ÿé¢†åœ°å’Œå¯\ - 购买领地." - Info: - - "使用: /res market list" - sell: - Description: "出售领地" - Info: - - "使用: /res sell [领地] [ä»·æ ¼]" - - "以[ä»·æ ¼]出售领地." - - "å¦ä¸€ä¸ªçŽ©å®¶å¯ä»¥è´­ä¹°é¢†åœ°\ - 通过 /res market buy" - buy: - Description: "购买领地" - Info: - - "使用: /res buy [领地]" - - "购买正在出售的领地." - unsell: - Description: "åœæ­¢å‡ºå”®é¢†åœ°" - Info: - - "使用: /res unsell [领地]" - rent: - Description: "租用领地" - Info: - - "使用: /res market rent [领地] " - - "租用领地, Autorenew å¯ä»¥æ˜¯ true\ - \ 或 false. 如果为true,领地租用\ - 到期将自动续费." - rentable: - Description: "将领地设为å¯å‡ºç§Ÿ." - Info: - - "使用: /res market rentable [领地] [ä»·æ ¼]\ - \ [天数] " - - "将领地设为å¯å‡ºç§Ÿ. 如果 \ - \ 为 true, 该领地出租到期将自\ - 动å˜ä¸ºå¯å‡ºç§Ÿ." - release: - Description: "从出租或å¯å‡ºç§Ÿä¸­åˆ \ - 除一个领地." - Info: - - "使用: /res market release [领地]" - - "如果你是租户,该命令解\ - 除这个领地的租用." - - "如果你是领地主,该命令\ - åœæ­¢è¯¥é¢†åœ°å‡ºç§Ÿ." - current: - Description: "显示你目å‰æ‰€åœ¨é¢†åœ°." - Info: - - "使用: /res current" - signupdate: - Description: Updated residence signs (Admin only) - Info: - - 'Usage: /res signupdate' - lists: - Description: "预定义æƒé™åˆ—表" - Info: - - "预定义å¯åº”用到æŸé¢†åœ°çš„æƒ\ - é™åˆ—表." - SubCommands: - add: - Description: "添加列表" - Info: - - "使用: /res lists add <列表å>" - remove: - Description: "删除列表" - Info: - - "使用: /res lists remove <列表å>" - apply: - Description: "应用æŸåˆ—表到æŸé¢†åœ°" - Info: - - "使用: /res lists apply <列表å> <领地\ - >" - set: - Description: "设置领地æƒé™" - Info: - - "使用: /res lists set <列表å> <æƒé™>\ - \ <æƒé™å€¼>" - pset: - Description: "设置玩家æƒé™" - Info: - - "使用: /res lists pset <列表å> <玩家\ - > <æƒé™> <æƒé™å€¼>" - gset: - Description: "设置群组æƒé™" - Info: - - "使用: /res lists gset <æƒé™å> <群组å\ - > <æƒé™> <æƒé™å€¼>" - view: - Description: "查看列表." - server: - Description: "将领地设为æœåŠ¡å™¨æ‰€æœ‰\ - (仅管ç†å‘˜)." - Info: - - "使用: /resadmin server [领地]" - - "将领地设为æœåŠ¡å™¨æ‰€æœ‰." - setowner: - Description: "改å˜é¢†åœ°æ‰€æœ‰æƒ (管ç†å‘˜\ - æƒé™)." - Info: - - "使用: /resadmin setowner [领地] [玩家]" - resreload: - Description: "é‡æ–°è¯»å–领地 (管ç†å‘˜æƒ\ - é™)." - Info: - - "使用: /resreload" - resload: - Description: "读å–领地 save file (ä¸å®‰å…¨, ä»…\ - 管ç†å‘˜)." - Info: - - "使用: /resload" - - "ä¸å®‰å…¨å‘½ä»¤, å°†ä¸ä¼šé¦–å…ˆä¿å­˜\ - 领地." - - "读å–领地 save file 在你进行å˜æ›´\ - 之åŽ." - ressignconvert: - Description: Converts ResidenceSigns plugins saved signs (admin only). - Info: - - 'Usage: /ressignconvert' - version: - Description: "显示Residence版本" - Info: - - "使用: /res version" diff --git a/src/Language/Czech.yml b/src/Language/Czech.yml deleted file mode 100644 index 67c280b39..000000000 --- a/src/Language/Czech.yml +++ /dev/null @@ -1,589 +0,0 @@ -# Czech traslation by AyACZE for server Coolcraft.wbs.cz IP:93.91.240.149:27428 -# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. -Version: 21 -FieldsVersion: 22 -Language: - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - #Version 1 Fields - InvalidResidence: Neplatna Residence... - InvalidSubzone: Neplatna Subzona... - InvalidDirection: Neplatny smer... - InvalidChannel: Neplatny kanal... - InvalidAmount: Neplatna castka... - InvalidCost: Neplatna cena... - InvalidDays: Neplatny pocet dni... - InvalidMaterial: Neplatny material... - InvalidBoolean: Neplatna hodnota, musi byt true(t) nebo false(f) - InvalidArea: Neplatna oblast... - InvalidGroup: Neplatna skupina... - InvalidMessageType: Typ zpravy musi byt enter, leave nebo remove. - InvalidList: Neplatny seznam... - InvalidFlag: Neplatna vlajka... - InvalidFlagState: Neplatny status vlajky, musi byt true(t), false(f), nebo remove(r) - AreaExists: Jmeno oblasti jiz existuje. - AreaCreate: 'Residence ID %1 vytvorena' - AreaDiffWorld: Oblast je v jinem svete nez residence. - AreaCollision: 'Oblast koliduje s residenci %1' - AreaSubzoneCollision: 'Oblast koliduje se subzonou %1' - AreaNonExist: Takova oblast neexistuje. - AreaInvalidName: Neplatne jmeno oblasti... - AreaRename: 'Oblast prejmenovana z %1 na %2' - AreaRemove: 'Oblast %1 odstranena...' - AreaRemoveLast: Nelze odstranit posledni oblast v residenci. - AreaNotWithinParent: Oblast neni v prostoru materske residence. - AreaUpdate: Oblast aktualizovana... - AreaMaxPhysical: Dosahl jsi maximalniho poctu oblasti v dane residenci. - AreaSizeLimit: Velikost oblasti prekracuje povolene limity. - AreaHighLimit: 'Nelze ochranit takovou vysku, limit je %1' - AreaLowLimit: 'Nelze ochranit takovou hloubku, limit je is %1' - NotInResidence: Nejsi v residenci. - Kicked: 'Byl jsi vykopnut z residence' - InResidence: 'Nachazis se v residenci %1' - ResidenceOwnerChange: 'Majitel residence %1 zmenen na %2' - NonAdmin: Nejsi admin teto residence. - AdminOnly: Pouze admini maji opravneni na tento prikaz. - ChatDisabled: Chat v residenci vypnut... - SubzoneRename: 'Subzona %1 byla prejmenovana na %2' - SubzoneRemove: 'Subzona %1 byla odstranena.' - SubzoneCreate: 'Subzone %1 byla vytvorena.' - SubzoneCreateFail: 'Nelze vytvorit subzonu %1' - SubzoneExists: 'Subzona %1 uz existuje.' - SubzoneCollide: 'Subzona koliduje se subzonou %1' - SubzoneMaxDepth: Dosahl jsi maximalniho poctu subzon. - SubzoneSelectInside: Oba vyberove body musi byt uvnitr residence. - SelectPoints: Vyber dva body pred pouzitim tohoto prikazu! - SelectionSuccess: Vyber se zdaril! - SelectionFail: Neplatny vyberovy prikaz... - SelectionBedrock: Vyber byl rozsiren na nejhlubsi povolene limity. - SelectionSky: Vyber byl rozsiren na nejvyssi povolene limity. - SelectionArea: 'Vybrana oblast %1 z residence %2' - SelectDiabled: Nemas opravneni pouzit tento prikaz. - NoPermission: Na tuto akci nemas opravneni. - OwnerNoPermission: Vlastnik nema k teto cinnosti opravneni. - ParentNoPermission: Nemas opravneni ke zmenam v materske zone. - MessageChange: Zprava uspesne nastavena... - FlagSet: Vlajka uspesne nastavena... - FlagCheckTrue: 'Vlajka %1 pouzita na hrace %2 v residenci %3, hodnota = %4' - FlagCheckFalse: 'Vlajka %1 nebyla pouzita na hrace %2 v residenci.' - FlagsCleared: Vlajky odstraneny. - FlagsDefault: Vlajky nastaveny do vychoziho nastaveni. - Usage: Pouziti prikazu - InvalidHelp: Neplatna stranka napovedy... - SubCommands: Sub prikazy - InvalidList: Neznamy seznam, musi byt blacklist nebo ignorelist. - MaterialGet: 'Material tohoto ID %1 je %2' - MarketDisabled: Ekonomika residenci vypnuta! - MarketList: Obchodni seznam - SelectionTool: Vyberovy nastroj - InfoTool: Informacni nastroj - NoBankAccess: Nemas pristup do banky. - NotEnoughMoney: Nemas dostatek financi. - BankNoMoney: Nemas dostatek financi v bance. - BankDeposit: 'Prave si vlozil %1 do banky residence.' - BankWithdraw: 'Prave si vybral %1 z banky residence.' - MoneyCharged: 'Nabil jsi svuj ucet %2 castkou %1.' - MoneyCredit: '%1 bylo pricteno na tvuj ucet %2.' - RentDisabled: System najemneho je vypnuty. - RentReleaseInvalid: 'Residenci %1 neni k pronajmu.' - RentSellFail: Nelze prodat residenci s najemnikem. - SellRentFail: Nelze pronajimat residenci pokud je v prodeji. - OwnerBuyFail: Nemuzes koupit vlastni pozemek! - OwnerRentFail: Nemuzes si pronajmout vlastni pozemek! - AlreadySellFail: Residence je jiz k prodeji! - ResidenceBought: 'Koupil sis residenci %1' - ResidenceBuy: 'Prodal jsi residenci %1 ze %2.' - ResidenceBuyTooBig: Tato rezidence presahuje tobe povolene limity. - ResidenceNotForSale: Residence neni na prodej. - ResidenceForSale: 'Residence %1 je na prodej za %2' - ResidenceStopSelling: Residence jiz neni na prodej. - ResidenceTooMany: Jiz vlastnis maximalni pocet residenci. - ResidenceMaxRent: Jiz pronajimas maximalni pocet residenci. - ResidenceAlreadyRent: Residence je jiz pronajimana... - ResidenceNotForRent: Residence neni k pronajmu... - ResidenceNotRented: Residence neni pronajimana. - ResidenceUnrent: 'V residence %1 skoncil pronajem.' - ResidenceRemoveRentable: 'Residence %1 jiz neni dalo k pronajmu.' - ResidenceForRentSuccess: 'Residence %1 je nyni k pronajmuti za %2 za kazdy %3 den,dnu.' - ResidenceRentSuccess: 'Pronajal sis residenci %1 na %2 dny,dnu.' - ResidenceAlreadyRented: 'Residence %1 je pronajata hraci %2' - ResidenceAlreadyExists: 'Residence jmena %1 jiz existuje.' - ResidenceCreate: 'Vytvoril jsi residenci %1!' - ResidenceRename: 'Residence %1 byla prejmenovana na %2' - ResidenceRemove: 'Residence %1 byla smazana...' - RentDisabled: Najimani je vypnuto... - RentDisableRenew: 'Nelze prodlouzit najem residence %1 dokud nevyprsi stavajici najem.' - RentEnableRenew: 'Residence %1 automaticky prodlouzi najem.' - RentableDisableRenew: 'V residenci %1 se po vyprseni najmu jiz najem neprodlouzi.' - RentableEnableRenew: 'V residenci %1 se po vyprseni najmu najem automaticky prodlouzi.' - LandForSale: Pozemek je na prodej - SellAmount: Cena - LeaseExpire: Doba pronajmu - RentExpire: Najem vyprsi - RentableAutoRenew: Najemnika automaticky prodlouzit - RentAutoRenew: Pronajem automaticky prodlouzit - RentableLand: Pozemek k pronajmu - ListMaterialAdd: 'Material %1 pridan do residence %2' - ListMaterialRemove: 'Material %1 odstranen z residence %2' - ItemBlacklisted: Pouzivani tohoto itemu je zde zakazano - je na blacklistu. - RentedModifyDeny: Neni mozno upravovat pronajimanou residenci. - WorldPVPDisabled: World PVP is disabled. - NoPVPZone: Zde neni PVP zona. - FlagDeny: 'Zde nemas opravneni na %1.' - FlagSetDeny: 'Vlastnik nema pristup k vlajce %1' - SelectPoint: 'Zadan %1 vyberovy bod' - ResidenceChat: 'Chat v residenci je %1' - ResidenceMoveDeny: 'Nemas opravneni k pohybu po residenci %1' - TeleportDeny: Nemas opravneni k teleportu. - TeleportSuccess: 'Byl jsi prave teleportovan!' - TeleportNear: Byl jsi teleportovan k residenci. - TeleportNoFlag: Nemas opravneni k teleportu do residence. - SetTeleportLocation: Misto teleportu nastaveno... - HelpPageHeader: 'Napoveda - %1 - str <%2 z %3>' - ListExists: Seznam jiz existuje... - ListRemoved: Seznam byl odstranen... - ListCreate: 'Byl vytvoren seznam %1' - LeaseRenew: 'Pronajem je uzavren do %1' - LeaseRenewMax: Pronajem prodlouzen na maximalne povolenou dobu - LeaseNotExpire: Najem neskoncil. - LeaseRenewalCost: 'Cena za prodlozeni najmu %1 je %2' - LeaseInfinite: Doba pronajmu nastavena na nekonecno... - PermissionsApply: Opravneni pouzite v residenci. - PhysicalAreas: Fyzicke oblasti - CurrentArea: Soucasna oblast - LeaseExpire: Najem vyprsel - NotOnline: Hrac musi byt online. - ResidenceGiveLimits: Neni mozno dat residenci hraci, protoze ten jiz ma maximalni pocet residenci. - ResidenceGive: 'Daroval jsi residenci %1 hraci %2' - ResidenceRecieve: 'Hrac %2 ti daroval residenci %1' - #Version 4 New Fields - #ResidenceListAll: 'Residences - ' - removed, use GenericPage now - ResidenceListAllEmpty: Na tomto serveru neexistuje zadna residence... - InvalidPage: Spatna stranka... - NextPage: Dalsi stranka - #Version 10 New Fields - RemovePlayersResidences: 'Vsechny residence hrace %1 byly odstraneny' - GenericPage: 'Strana %1 ze %2' - #Version 11 New Fields - ResidenceRentedBy: 'Pronajata hracem %1' - #Version 14 New Fields - InvalidCharacters: Detekovany nepovolene znaky... - InvalidNameCharacters: Jmeno obsahuje nepovolene znaky... - #Version 15 New Fields - DeleteConfirm: 'Opravdu chces odstranit residenci %1 ?, pouzij /res confirm k potvrzeni.' - #Version 18 New Fields - SelectTooHigh: Upozorneni, vyber presahuje vyskovy limit mapy. - SelectTooLow: Upozorneni, vyber presahuje hloubkoy limit mapy. - WorldEditNotFound: WorldEdit nebyl nalezen. - #Version 19 New Fields - NoResHere: Zde neni zadna residence. - DeleteSubzoneConfirm: 'Opravdu chces odstranit subzonu %1 ?, pouzij /res confirm k potvrzeni.' - #Version 20 New Fields - SubzoneOwnerChange: 'Majitel subzony %1 byl zmenen na %2' - CoordsTop: 'X:%1 Y:%2 Z:%3' - CoordsBottom: 'X:%1 Y:%2 Z:%3' - #Version 21 New Fields - AdminToggle: 'Automaticky zapinat %1' - #Version 22 New Fields - NoSpawn: 'Nemas opravneni premistovat spawn bod. Vraceno zpet.' - CompassTargetReset: 'Tvuj kompas byl zresetovan' - CompassTargetSet: 'Tvuj kompas nyni ukazuje na %1' - - #The below lines are mostly a word bank for various uses. - #Version 1 Fields - Description: Popis - Land: Uzemi - Cost: Cena - Selection: Vyber - Total: Celkova - Size: Velikost - Expanding: Rozsireni - Shifting: Zuzeni - Up: Nahoru - Down: Dolu - Error: Chyba - Flags: Vlajky - Your: Tve - Group: Skupinove - Others: Ostatni - Primary: Primarni - Secondary: Sekundarni - Selection: Vyber - Moved: Presunut - Status: Status - Available: Dostupnost - On: Zap - Off: Vyp - Name: Jmeno - Lists: Seznam - Residences: Residence - Residence: Residence - Count: Ucet - Owner: Vlastnik - #Version 4 Fields - World: Svet - #Version 12 Fields - Subzones: Subzony - #Version 20 Fields - CoordsT: Nejvyssi souradnice - CoordsB: Nejnizzsi souradnice - #Version 22 Fields - TurnOn: 'zap' - TurnOff: 'vyp' - -# This is the help / usage messages for each command. -# It follows this format: -# -# Description: -# Info: -# SubCommands: -# - these follow the same format, and each sub command can have its own subcommands -# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that -# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). -# Add a page number after the ? mark to see that page. - -HelpLinesPerPage: 7 -CommandHelp: #this is just a holder node, that holds the entire help - Description: Obsahuje napovedu pro Residence - SubCommands: #this is the actual beginning of all commands - res: #main residence command - Description: Hlavni prikaz pluginu Residence - Info: - - 'Pro obsahlejsi napovedu se podivej na wiki.' - - 'Wiki: residencebukkitmod.wikispaces.com' - - 'Pouzij /[prikaz] ? pro zobrazeni vice informaci.' - SubCommands: - select: #selection commands - Description: Vyberove prikazy - Info: - - 'tento prikaz vybere uzemi pouzite na residenci.' - - '/res select [x] [y] [z] - vybere bloky v zadanem radiusu kolem tebe.' - SubCommands: - coords: - Description: Zobrazeni vybranych souradnic - Info: - - 'Pouzij: /res select coords' - size: - Description: Zobrazeni velikosti vyberu - Info: - - 'Pouzij: /res select size' - cost: - Description: Zobrazeni ceny vyberu - Info: - - 'Pouzij: /res select cost' - vert: - Description: Vertikalni rozsireni vyberu - Info: - - 'Pozij: /res select vert' - - 'Vyber se rozsiri na max. povolene limity nahoru i dolu.' - sky: - Description: Rozsireni vyberu po nebe - Info: - - 'Pouzij: /res select sky' - - 'Vyber se rozsiri na max. povolene limity nahoru.' - bedrock: - Description: Rozsireni vyberu po Bedrock - Info: - - 'Pouzij: /res select bedrock' - - 'Vyber se rozsiri na max. povolene limity dolu.' - expand: - Description: Smerove rozsireni vyberu - Info: - - 'Pouzij: /res select expand ' - - 'Vyber se rozsiri o ve smeru kterym se divas.' - shift: - Description: Smerome zuzeni vyberu - Info: - - 'Pouzij: /res select shift ' - - 'Vyber se zmensi o smerek kterym se divas.' - chunk: - Description: Vyber aktualniho chunku. - Info: - - 'Pouzij: /res select chunk' - - 'Vybere aktualni chunk v kterem stojis.' - residence: - Description: Vyber existujiciho uzemi v residenci. - Info: - - 'Pouzij /res select ' - - 'Vybere existujici uzemi v residenci.' - worldedit: - Description: Nastaveni vyberu pomoci WorldEditu. - Info: - - 'Pouzij /res select worldedit' - - 'Pro vyber uzemi bude pouzit vyber WorldEditu.' - create: #creation command - Description: Vytvoreni Residence - Info: - - 'Pouzij: /res create ' - remove: #remove command - Description: Odstraneni residence. - Info: - - 'Pouzij: /res remove ' - removeall: - Description: Odstraneni vsech residenci vlastnenych hracem. - Info: - - 'Pouzij: /res removeall [vlastnik]' - - 'Odstrani vsechny residence vlatnene uvedenym hracem.' - - 'Vyzaduje /resadmin pokud mazete res nekoho jineho nez svoje.' - confirm: - - 'Pouzij: /res confirm' - - 'Potvrdi odstraneni residence.' - subzone: - Description: Vytvoreni subzony v residenci. - Info: - - 'Pouzij: /res subzone [nazev subzony]' - - 'Pokud vynechas nazev residence bude pouzito na uktualni res ve ktere stojis.' - area: - Description: Sprava fyzickych uzemi. - SubCommands: - list: - Description: Seznam fyzickych uzemi v residenci - Info: - - 'Pouzij: /res area list [nazev residence] ' - listall: - Description: Seznam souradnic a dalsich info o uzemich - Info: - - 'Pouzij: /res area listall [nazev residence] ' - add: - Description: Pridat fyzickeho uzemi residence - Info: - - 'Pouzij: /res area add [nazev residence] [areaID]' - - 'Prvne musis vybrat dva body.' - remove: - Description: Odstranit fyzicke uzemi residence - Info: - - 'Pouzij: /res area remove [nazev residence] [areaID]' - replace: - Description: Premisteni fyzickeho uzemi residence - Info: - - 'Pouzij: /res area replace [nazev residence] [areaID]' - - 'Prvne musis vybrat dva body.' - - 'Premisti uzemi.' - info: - Description: Zobrazeni info o residenci. - Info: - - 'Pouzij: /res info ' - - 'Vynechas li zobrazi info o aktualni residenci ve ktere ses.' - limits: - Description: Zobrazeni limitu. - Info: - - 'Pouzij: /res limits' - - 'Zobrazi tve limity vytvareni a spravy residenci.' - message: - Description: Sprava uvitaci / odchozi zpravy - Info: - - 'Pouzij: /res message [enter/leave] [zprava]' - - 'Nastavi uvitaci nebo odchozi zpravu residence.' - - 'Pouzij: /res message remove [enter/leave]' - - 'Odstrani uvitaci nebo odchoz zpravu.' - lease: - Description: Sprava pronajmu residence - Info: - - 'Pouzij: /res lease [renew/cost] [nazev residence]' - - '/res lease cost zobrazi cenu za prodlouzeni najmu residence.' - - '/res lease renew prodlozi dobu najmu pokud mate dost penez.' - SubCommands: - set: - Description: Nastaveni doby pronajmu (jen admini) - Info: - - 'Pouzij: /resadmin lease set [nazev residence] [#days/infinite]' - - 'Nastavi dobu pronajmu na x dni nebo na nekonecno.' - bank: - Description: Sprava penez v residenci - Info: - - 'Pouzij: /res bank [vklad/vyber] [castka]' - - 'Musis stat v residenci' - - 'Musis mit nastavenu vlajku +bank.' - tp: - Description: Teleport do residence - Info: - - 'Poutzij: /res tp [nazev residence]' - - 'Teleportuje te do residence pokud je nastavena vlajka +tp nebo pokud ses vlastnik.' - - 'Musis mit opravneni teleportu na serveru od adminu.' - tpset: - Description: Nastaveni mista teleportu v residenci - Info: - - 'Pouzij: /res tpset' - - 'Nastavi bid na kterem stojis jako misto teleportu do residence.' - - 'Musis stat v residenci pri provadeni tohoto prikazu.' - - 'Take musis byt vlastnikem residence nebo musis mit adminske opravneni na residence.' - set: - Description: Nastaveni obecnych vlajek - Info: - - 'Pouzij: /res set [vlajka] [true/false/remove]' - - 'Pro seznam vlajek pouzij /res flags ?' - - 'Tyto vlajky budou nastaveny vsem hracum' - pset: - Description: Nastaveni vlajek pro specifickeho hrace. - Info: - - 'Pouzij: /res pset [jmeno hrace] [vlajka] [true/false/remove]' - - 'Pouzij: /res pset [jmeno hrace] removeall' - - 'pro seznam vlajek pouzij /res flags ?' - gset: - Description: Nastaveni vlajek pro specifickou skupinu. - Info: - - 'Pouzij: /res gset [skupina] [vlajka] [true/false/remove]' - - 'pro seznam vlajek pouzij /res flags ?' - lset: - Description: Zmena blacklistu a ignorelistu - Info: - - 'Pouzij: /res lset [blacklist/ignorelist] [material]' - - 'Pouzij: /res lset info' - - 'Material na blacklistu je prevenci pred jejich pokladanim v residenci.' - - 'Material na ignorelistu je vyjmut z ochrany residence.' - flags: - Description: Seznam vlajek - Info: - - 'Pro hodnoty vlajek obecne plati ze zakazuji resp. povoluji nejakou akci.' - list: - Description: Seznem residenci - Info: - - 'Pouzij: /res list ' - - 'Vypise vsechny residence vlastnene hracem (mimo skrytych).' - - 'Pri vypisu vlastnich residenci jsou viditelne i skryte residence.' - - 'Pro vypis vsech residencu na serveru pouzij /res listall.' - listhidden: - Description: Seznam skrytych residenci(POUZE ADMINI) - Info: - - 'Pouzij: /res listhidden ' - - 'Vypise skryte residence hrace.' - listall: - Description: Seznam vsech residenci - Info: - - 'Pouzij: /res listall ' - - 'Vypise seznam vsech residenci na serveru (mimo skrytych kterych nejses vlastnikem).' - listallhidden: - Description: Seznam vsech skrytych residenci(POUZE ADMINI) - Info: - - 'Pouzij: /res listhidden ' - - 'Vypise vsechny skryte residence na serveru.' - sublist: - Description: Seznam subzon residence - Info: - - 'Pouzij: /res sublist ' - - 'Vypise subzony zadane residence.' - default: - Description: Obnova vychoziho nastaveni vlajek. - Info: - - 'pouzij: /res default ' - - 'Budou zresetovany vsechny vlajky v residenci do vychoziho nastaveni. Musis byt vlastnik nebo admin.' - rename: - Description: Prejmenovani residence. - Info: - - 'Pouzij: /res rename [Stary nazev] [Novy nazev]' - - 'Musis byt vlastnikem resky nebo admin. Nepouzivej mezery v nazvu' - - 'Jmeno residence musi byt volne.' - mirror: - Description: Mirrors vlajky - Info: - - 'Pouzij: /res mirror [Zdrojova Residence] [Cilova Residence]' - - 'Zkopiruje vsechny vlajky z jedne residence na druho. Musis byt vlastnik obou nebo admin.' - market: - Description: Koupe, prodej nebo pronajem residenci - Info: - - 'Pouzij: /res market ? pro vice informaci' - SubCommands: - info: - Description: Ekonomicke informace o residenci - Info: - - 'Pouzij: /res market info [nazev residence]' - - 'Zobrazi jestli je residence na prodej nebo k pronajmu a koli stoji.' - list: - Description: Seznam residenci k pronajmu nebo prodeji. - Info: - - 'Pouzij: /res market list' - sell: - Description: Residence k prodeji - Info: - - 'Pouzij: /res market sell [nazev residence] [castka]' - - 'Nabidnes residenci k prodeji a uvedes [castku] za kolik.' - - 'Jiny hrac ji muze koupit prikazem /res market buy' - buy: - Description: Koupe residence - Info: - - 'Pouzij: /res market buy [nazev residence]' - - 'Koupis rezidenci ktera byla nabidnuta k prodeji.' - unsell: - Description: Ukonceni prodeje residence - Info: - - 'Pouzij: /res market unsell [nazev residence]' - rent: - Description: Pronajem residence - Info: - - 'Pouzij: /res market rent [nazev residence] ' - - 'Pronajmes si residenci. Autorenew muze byt povoleno nebo zakazano. Pokud je povoleno pronajem se automaticky prodluzuje.' - rentable: - Description: Residence k pronajmu. - Info: - - 'Pouzij: /res market rentable [nazev residence] [cena] [dnu] ' - - 'Nabidnes residenci k pronajmu za [cenu] za urcity pocet [dnu].Pokud je nastaveno na true,bude se moznost pronajmu automaticky prodluzovat.' - release: - Description: Ukonceni pronajmu. - Info: - - 'Pouzij: /res market release [nazev residence]' - - 'Pokud jsi najemnik ukoncis tim pronajem residence.' - - 'Pokud jsi vlastnik a provedes tento prikaz nebudes moct residenci uz nikdy pronajimat.' - current: - Description: Zobrazeni residence v soucasne pozici. - Info: - - 'Pouzij: /res current' - lists: - Description: Vychozi opravneni residenci - Info: - - 'Prednastavena opravneni nastavena v residencich.' - SubCommands: - add: - Description: Pridat na seznam - Info: - - 'Pouzij: /res lists add ' - remove: - Description: Odstraneni seznamu - Info: - - 'Pouzij: /res lists remove ' - apply: - Description: Pouziti seznamu na residenci - Info: - - 'Pouzij: /res lists apply ' - set: - Description: Nastaveni obecnych vlajek - Info: - - 'Pouzij: /res lists set ' - pset: - Description: Nastaveni vlajek hracum - Info: - - 'pouzij: /res lists pset ' - gset: - Description: Nastaveni vlajek skupinam - Info: - - 'Pouzij: /res lists gset ' - view: - Description: Zobrazit seznam. - Info: - - 'Pouzij: /res lists view ' - server: - Description: Vytvoreni uzemi patrici serveru (POUZE ADMINI). - Info: - - 'Pouzij: /resadmin server [nazev residence]' - - 'Vytvori residenci vlastnenou serverem.' - setowner: - Description: Zmena vlastnika residence (POUZE ADMINI). - Info: - - 'Pouzij: /resadmin setowner [nazev residence] [jmeno hrace]' - resreload: - Description: Reload residence (POUZE ADMINI). - Info: - - 'Pouzij: /resreload' - resload: - Description: Load residence save file (NEBEZPECNE POUZE ADMINI). - Info: - - 'Usage: /resload' - - 'NEBEZPECNY PRIKAZ.' - - 'Nacte plugin ze souboru po provedenych zmenach.' - version: - Description: Vypise vezi pluginu - Info: - - 'Usage: /res version' diff --git a/src/Language/French.yml b/src/Language/French.yml deleted file mode 100644 index dbc2349cc..000000000 --- a/src/Language/French.yml +++ /dev/null @@ -1,582 +0,0 @@ -# French traslation by TETDOSS -# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. -Version: 20 -FieldsVersion: 22 -Language: - # The below lines represent various messages residence sends to the joueurs. - # Note that some messages have variables such as %1 that are inserted at runtime. - #Version 1 Fields - InvalidResidence: Résidence invalide... - InvalidSubzone: Sous-zone invalide... - InvalidDirection: Direction invalide... - InvalidChannel: Canal invalide... - InvalidAmount: Montant invalide... - InvalidCost: Prix invalide... - InvalidDays: Nombre de jours invalide... - InvalidMaterial: Matériau invalide... - InvalidBoolean: Valeur invalide, doit être true ou false - InvalidArea: Zone invalide... - InvalidGroup: Groupe invalide... - InvalidMessageType: Le type de message doit être enter ou remove - InvalidList: Liste invalide... - InvalidFlag: Flag invalide... - InvalidFlagState: Etat du flag invalide, doit être true, false, ou remove - AreaExists: Cette zone existe déjà - AreaCreate: 'Zone créée, ID %1' - AreaDiffWorld: La zone est dans un monde différent du lieu de résidence - AreaCollision: 'La zone entre en collision avec la résidence %1' - AreaSubzoneCollision: 'La zone entre en collision avec la sous-zone %1' - AreaNonExist: Cette zone n'existe pas - AreaInvalidName: Nom de zone invalide... - AreaRename: 'Zone %1 renommée en %2' - AreaRemove: 'Zone %1 supprimée...' - AreaRemoveLast: Impossible de supprimer la dernière zone de la résidence - AreaNotWithinParent: La zone n'est pas dans la zone parent - AreaUpdate: Zone mise à jour... - AreaMaxPhysical: Vous avez atteint le maximum de zones physiques autorisé de cette résidence - AreaSizeLimit: La taille de la zone dépasse vos limites autorisées - AreaHighLimit: 'Vous ne pouvez pas protéger à cette hauteur, votre limite est %1' - AreaLowLimit: 'Vous ne pouvez pas protéger à cette profondeur, votre limite est %1' - NotInResidence: Vous n'êtes pas dans une résidence - InResidence: 'Vous êtes dans la résidence %1' - ResidenceOwnerChange: 'Le propriétaire de la résidence %1 est remplacé par %2' - NonAdmin: Vous n'êtes pas un administrateur de résidences - AdminOnly: Seuls les administrateurs ont accès à cette commande - ChatDisabled: Chat désactivé - SubzoneRename: 'Sous-zone %1 renommée en %2' - SubzoneRemove: 'Sous-zone %1 supprimée' - SubzoneCreate: 'Sous-zone %1 créée' - SubzoneCreateFail: 'Impossible de créer la sous-zone %1' - SubzoneExists: 'La sous-zone %1 existe déjà' - SubzoneCollide: 'La sous-zone entre en collision avec la sous-zone %1' - SubzoneMaxDepth: Vous avez atteint la profondeur maximale autorisée de cette sous-zone - SubzoneSelectInside: Les deux points de sélection doivent être à l'intérieur de la résidence - SelectPoints: Sélectionnez deux points avant d'utiliser cette commande - SelectionSuccess: Sélection réussie - SelectionFail: La sélection a échoué - SelectionBedrock: Sélection élargie jusqu'à votre limite inférieure autorisée - SelectionSky: Sélection élargie jusqu'à votre limite supérieure autorisée - SelectionArea: 'Zone %1 sélectionnée de la résidence %2' - SelectDiabled: Vous n'avez pas accès aux commandes de sélection - NoPermission: Vous n'avez pas la permission - OwnerNoPermission: Le propriétaire n'a pas la permission - ParentNoPermission: Vous n'avez pas la permission de modifier la zone parent - MessageChange: Message modifié... - FlagSet: Flag modifié... - FlagCheckTrue: 'Flag %1 appliqué au joueur %2 pour la résidence %3, valeur = %4' - FlagCheckFalse: 'Flag %1 ne peut pas s''appliquer au joueur %2' - FlagsCleared: Flags effacés - FlagsDefault: Flags réinitialisés - Utilisation: Utilisation de la commande - InvalidHelp: Page d'aide invalide - SubCommands: Sous-commandes - InvalidList: Type de liste inconnu, doit être blacklist ou ignorelist - MaterialGet: 'Le nom du matériau de l''ID %1 est %2' - MarketDisabled: Economie désactivée - MarketList: Liste du marché - SelectionTool: Outil de sélection - InfoTool: Outil d'info - NoBankAccess: Vous n'avez pas accès à la banque - NotEnoughMoney: Vous n'avez pas assez d'argent - BankNoMoney: Pas assez d'argent dans la banque - BankDeposit: 'Vous déposez $%1 dans la banque de la résidence' - BankWithdraw: 'Vous retirez $%1 de la banque de la résidence' - MoneyCharged: '$%1 facturé(s) sur votre compte %2' - MoneyCredit: '$%1 crédité(s) sur votre compte %2' - RentDisabled: La location est désactivée - RentReleaseInvalid: 'La résidence %1 n''est pas louée ou n''est pas à louer' - RentSellFail: Impossible de vendre une résidence si elle est à louer - SellRentFail: Impossible de louer une résidence si elle est à vendre - OwnerBuyFail: Impossible d'acheter votre propre terrain - OwnerRentFail: Impossible de louer votre propre terrain - AlreadySellFail: Cette résidence est déjà à vendre - ResidenceBought: 'Vous avez acheté la résidence %1' - ResidenceBuy: '%1 a acheté la résidence %2' - ResidenceBuyTooBig: Cette résidence possède des zones plus grandes que votre maximum autorisé - ResidenceNotForSale: Cette résidence n'est pas à vendre - ResidenceForSale: 'La résidence %1 est maintenant à vendre pour $%2' - ResidenceStopSelling: Cette résidence n'est plus à vendre - ResidenceTooMany: Vous possédez déjà votre maximum de résidences autorisé - ResidenceMaxRent: Vous louez déjà votre maximum de résidences autorisé - ResidenceAlreadyRent: Cette résidence est déjà à louer... - ResidenceNotForRent: Cette résidence n'est pas à louer... - ResidenceNotRented: Cette résidence n'est pas louée - ResidenceUnrent: 'La résidence %1 n''est maintenant plus louée' - ResidenceRemoveRentable: 'La résidence %1 n''est maintenant plus à louer' - ResidenceForRentSuccess: 'La résidence %1 est maintenant à louer pour $%2 tous les %3 jours' - ResidenceRentSuccess: 'Vous avez loué la résidence %1 pour %2 jour(s)' - ResidenceAlreadyRented: 'La résidence %1 est actuellement louée par %2' - ResidenceAlreadyExists: 'Une résidence nommée %1 existe déjà' - ResidenceCreate: 'Vous avez créé la résidence %1' - ResidenceRename: 'Résidence %1 renommée en %2' - ResidenceRemove: 'Résidence %1 supprimée...' - RentDisabled: La location est désactivée - RentDisableRenew: 'La résidence %1 ne sera plus relouée automatiquement' - RentEnableRenew: 'La résidence %1 sera relouée automatiquement' - RentableDisableRenew: 'La résidence %1 ne sera plus remise à louer automatiquement' - RentableEnableRenew: 'La résidence %1 sera remise à louer automatiquement' - LandForSale: Terrains à vendre - SellAmount: Prix de vente - LeaseExpire: Temps d'expiration de location - RentExpire: Temps d'expiration du loyer - RentableAutoRenew: Mise en location automatique - RentAutoRenew: Relocation automatique - RentableLand: Terrains à louer - ListMaterialAdd: '%1 ajouté(e) à la résidence %2' - ListMaterialRemove: '%1 supprimé(e) de la résidence %2' - ItemBlacklisted: Cet item est blacklisté ici - RentedModifyDeny: Impossible de modifier une résidence louée - WorldPVPDisabled: Le PVP est désactivé - NoPVPZone: Pas une zone PVP - FlagDeny: 'Vous n''avez pas la permission pour %1 ici' - FlagSetDeny: 'Le propriétaire n''a pas accès au flag %1' - SelectPoint: 'Point de sélection %1 ' - ResidenceChat: 'Chat activé %1' - ResidenceMoveDeny: 'Vous n''avez pas la permission de vous déplacer dans la résidence %1' - TeleportDeny: Vous n'avez pas accès à la téléportation - TeleportSuccess: 'Téléporté' - TeleportNear: Téléporté près de cette résidence - TeleportNoFlag: Vous ne pouvez pas vous téléporter à cette résidence - SetTeleportLocation: Point de téléportation modifié - HelpPageHeader: 'Pages d''aide - %1 - Page <%2 sur %3>' - ListExists: Cette liste existe déjà... - ListRemoved: Liste supprimée... - ListCreate: 'Liste %1 créée' - LeaseRenew: 'Contrat valable jusqu''à la date: %1' - LeaseRenewMax: Contrat renouvellé jusqu'au maximum autorisé - LeaseNotExpire: Pas de contrat, ou le contrat n'expire pas - LeaseRenewalCost: 'Prix de renouvellement pour la zone %1 est $%2' - LeaseInfinite: La durée du contrat est maintenant infinie... - PermissionsApply: Permissions appliquées à la résidence - PhysicalAreas: Zones physiques - CurrentArea: Zone actuelle - LeaseExpire: Expiration du contrat - NotOnline: Ce joueur doit être en ligne - ResidenceGiveLimits: Impossible de donner cette résidence à ce joueur, vérifiez les limites - ResidenceGive: 'Vous donnez la résidence %1 au joueur %2' - ResidenceRecieve: 'Vous avez reçu la résidence %1 du joueur %2' - #Version 4 New Fields - #ResidenceListAll: 'Residences - ' - removed, use GenericPage now - ResidenceListAllEmpty: Pas de résidences sur le serveur... - InvalidPage: Page invalide... - NextPage: Page suivante - #Version 10 New Fields - RemovePlayersResidences: 'Toutes les résidences du joueur %1 supprimées' - GenericPage: 'Page %1 sur %2' - #Version 11 New Fields - ResidenceRentedBy: 'Louée par %1' - #Version 14 New Fields - InvalidCharacters: Caractères invalides détectés... - InvalidNameCharacters: Ce nom contient des caractères interdits... - #Version 15 New Fields - DeleteConfirm: 'Voulez-vous vraiment supprimer la résidence %1, utilisez /res confirm pour confirmer' - #Version 18 New Fields - SelectTooHigh: Attention, la sélection est trop haute - SelectTooLow: Attention, la sélection est trop basse - WorldEditNotFound: WorldEdit n'est pas détecté - #Version 19 New Fields - NoResHere: Il n'y a pas de résidence là-dedans. - DeleteSubzoneConfirm: 'Voulez-vous vraiment supprimer la sous-zone %1, utilisez /res confirm pour confirmer' - #Version 20 New Fields - SubzoneOwnerChange: 'Le propriétaire de la sous-zone %1 est remplacé par %2' - CoordsTop: 'X:%1 Y:%2 Z:%3' - CoordsBottom: 'X:%1 Y:%2 Z:%3' - #Version 21 New Fields - AdminToggle: 'Automatic resadmin toggle turned %1' - #Version 22 New Fields - NoSpawn: 'You do not have move permissions at your spawn point. Relocating' - CompassTargetReset: 'Your compass has been reset' - CompassTargetSet: 'Your compass now points to %1' - - #The below lines are mostly a word bank for various uses. - #Version 1 Fields - Description: Description - Land: Terrain - Cost: Prix - Selection: Sélection - Total: Total/Totale - Size: Taille - Expanding: Expansion - Shifting: Déplacement - Up: Haut - Down: Bas - Error: Erreur - Flags: Flags - Your: Votre/Vos - Group: Groupe - Others: Autres - Primary: Primaire - Secondary: Secondaire - Selection: Sélection - Moved: Déplacé - Status: Statut - Available: Disponible - On: On - Off: Off - Name: Nom - Lists: Listes - Residences: Résidences - Residence: Résidence - Count: Décompte - Owner: Propriétaire - #Version 4 Fields - World: Monde - #Version 12 Fields - Subzones: Sous-zones - #Version 20 Fields - CoordsT: haut coordonnées - CoordsB: bas coordonnées - #Version 22 Fields - TurnOn: 'on' - TurnOff: 'off' - -# This is the help / Utilisation messages for each command. -# It follows this format: -# -# Description: -# Info: -# SubCommands: -# - these follow the same format, and each sub command can have its own subcommands -# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that -# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). -# Add a page number after the ? mark to see that page. - -HelpLinesPerPage: 7 -CommandHelp: #this is just a holder node, that holds the entire help - Description: Affiche l'aide pour Residence - SubCommands: #this is the actual beginning of all commands - res: #main residence command - Description: Principale commande de Residence - Info: - - 'Lisez le wiki pour plus d''aide' - - 'Wiki: residencebukkitmod.wikispaces.com' - - 'Utilisez /[commande] ? pour afficher plus d''informations' - SubCommands: - select: #selection commands - Description: Sélectionne une zone - Info: - - 'Cette commande sélectionne une zone pour en faire une résidence' - - '/res select [x] [y] [z] - sélectionne un rayon de blocs avec vous au milieu' - SubCommands: - coords: - Description: Affiche les coordonnées sélectionnées - Info: - - 'Utilisation: /res select coords' - size: - Description: Affiche la taille sélectionnée - Info: - - 'Utilisation: /res select size' - cost: - Description: Affiche le prix de la sélection - Info: - - 'Utilisation: /res select cost' - vert: - Description: Elargie la sélection verticalement - Info: - - 'Utilisation: /res select vert' - - 'Elargie la sélection verticalement selon vos limites' - sky: - Description: Elargie la sélection jusqu'au ciel - Info: - - 'Utilisation: /res select sky' - - 'Elargie la sélection vers le ciel selon vos limites' - bedrock: - Description: Elargie la sélection jusqu'à la bedrock - Info: - - 'Utilisation: /res select bedrock' - - 'Elargie la sélection vers la bedrock selon vos limites' - expand: - Description: Elargie la sélection dans une direction - Info: - - 'Utilisation: /res select expand ' - - 'Elargie de blocs dans la direction que vous regardez' ## - shift: - Description: Déplace une sélection dans une direction - Info: - - 'Utilisation: /res select shift ' - - 'Pousse votre sélection de blocs dans la direction que vous regardez' ## - chunk: - Description: Sélectionne la zone dans laquelle vous êtes - Info: - - 'Utilisation: /res select chunk' - residence: - Description: Sélectionne une zone existante d'une résidence - Info: - - 'Utilisation /res select ' - worldedit: - Description: Modifie la sélection en utilisant la sélection de WorldEdit - Info: - - 'Utilisation /res select worldedit' - create: #creation command - Description: Crée une résidence - Info: - - 'Utilisation: /res create ' - remove: #remove command - Description: Supprime une résidence - Info: - - 'Utilisation: /res remove ' - removeall: - Description: Supprime toutes les résidences d'un joueur - Info: - - 'Utilisation: /res removeall [propriétaire]' - confirm: - - 'Utilisation: /res confirm' - - 'Confirme la suppression d''une résidence' - subzone: - Description: Crée une sous-zone d'une résidence - Info: - - 'Utilisation: /res subzone [nomDeLaSousZone]' - - 'Le paramètre est facultatif' - area: - Description: Gère les zones physiques d'une résidence - SubCommands: - list: - Description: Liste les zones physiques d'une résidence - Info: - - 'Utilisation: /res area list [résidence] ' - listall: - Description: Liste les coordonnées des zones d'une résidence - Info: - - 'Utilisation: /res area listall [résidence] ' - add: - Description: Ajoute des zones physiques à une résidence - Info: - - 'Utilisation: /res area add [résidence] [IDDeLaZone]' - - 'Vous devez d''abord sélectionner deux points' - remove: - Description: Supprime des zones physiques d'une résidence - Info: - - 'Utilisation: /res area remove [résidence] [IDDeLaZone]' - replace: - Description: Remplace des zones physiques d'une résidence - Info: - - 'Utilisation: /res area replace [résidence] [IDDeLaZone]' - - 'Vous devez d''abord sélectionner deux points' - - 'Si la taille est plus grande, la différence sera facturée' - info: - Description: Affiche des informations sur une résidence - Info: - - 'Utilisation: /res info ' - - 'Ne spécifiez pas le paramètre pour afficher les informations de la résidence dans laquelle vous êtes' - limits: - Description: Affiche vos limites - Info: - - 'Utilisation: /res limits' - - 'Affiche vos limitations que vous avez sur la création et la gestion des résidences' - message: - Description: Gère le message d'entrée et de sortie d'une résidence - Info: - - 'Utilisation: /res message [enter/leave] [message]' - - 'Modifie le message d''entrée ou le message de sortie de la résidence ' - - 'Utilisation: /res message remove [enter/leave]' - - 'Supprime le message d''entrée ou de sortie' - lease: - Description: Gère un contrat de location - Info: - - 'Utilisation: /res lease [renew/cost] [résidence]' - - '/res lease cost affiche le prix du renouvellement du contrat de la résidence [résidence]' - - '/res lease renew renouvelle le contrat si vous avez assez d''argent' - SubCommands: - set: - Description: Modifie la durée du contrat de location d'une résidence (administrateurs seulement) - Info: - - 'Utilisation: /resadmin lease set [résidence] [#jours/infinite]' - - 'Modifie la durée du contrat en spécifiant un nombre de jours, ou l''infini' - bank: - Description: Gère l'argent d'une résidence - Info: - - 'Utilisation: /res bank [deposit/withdraw] [montant]' - - 'Vous devez être dans une résidence' - - 'Vous devez avec avoir le flag +bank' - tp: - Description: Téléporte à une résidence - Info: - - 'Utilisation: /res tp [résidence]' - - 'Vous téléporte à la résidence [résidence]' - - 'Vous devez avoir le flag +tp ou être le propriétaire' - - 'Votre groupe doit aussi avoir la permission' - tpset: - Description: Modifie le point de téléportation d'une résidence - Info: - - 'Utilisation: /res tpset' - - 'Vous devez être dans une résidence pour utiliser cette commande' - - 'Vous devez aussi être le propriétaire de la résidence ou avoir le flag +admin' - set: - Description: Modifie les flags d'une résidence - Info: - - 'Utilisation: /res set [flag] [true/false/remove]' - - 'Pour voir la liste des flags, utilisez /res flags ?' - - 'Le flag [flag] s''applique aux joueurs qui n''ont pas déjà ce flag d''appliqué (voir /res pset ?)' - pset: - Description: Modifie les flags d'un joueur pour une résidence - Info: - - 'Utilisation: /res pset [joueur] [flag] [true/false/remove]' - - 'Utilisation: /res pset [joueur] removeall' - - 'Pour voir la liste des flags, utilisez /res flags ?' - gset: - Description: Modifie les flags d'un groupe pour une résidence - Info: - - 'Utilisation: /res gset [groupe] [flag] [true/false/remove]' - - 'Pour voir la liste des flags, utilisez /res flags ?' - lset: - Description: Change les options de la blacklist et de l'ignorelist - Info: - - 'Utilisation: /res lset [blacklist/ignorelist] [matériau]' - - 'Utilisation: /res lset info' - - 'Blacklist un matériau [matériau]' - - 'Ignorelist un matériau [matériau]' - flags: - Description: Liste les flags - Info: - - 'true autorise, et false interdit l''action' - Description: Liste les résidences - Info: - - 'Utilisation: /res list ' - - 'Liste toutes les résidences d''un joueur (sauf celles cachées)' - - 'Si vous listez vos propres résidences, les cachées seront affichées' - - 'Pout lister toutes les résidences, utilisez /res listall' - listhidden: - Description: Liste les résidences cachées (administrateurs seulement) - Info: - - 'Utilisation: /res listhidden ' - - 'Liste les résidences cachées d''un joueur' - listall: - Description: Liste toutes les résidences - Info: - - 'Utilisation: /res listall ' - - 'Liste toutes les résidences cachées du serveur (sauf celles cachées qui ne vous appartiennent pas)' - listallhidden: - Description: Liste toutes les résidences cachées (administrateurs seulement) - Info: - - 'Utilisation: /res listhidden ' - - 'Liste toutes les résidences cachées du serveur' - sublist: - Description: Liste les sous-zones d'une résidence - Info: - - 'Utilisation: /res sublist ' - default: - Description: Réinitialise les flags d'une résidence - Info: - - 'Utilisation: /res default ' - - 'Vous devez être le propriétaire ou un administrateur pour utiliser cette commande' - rename: - Description: Renomme une résidence - Info: - - 'Utilisation: /res rename [ancienNom] [nouveauNom]' - - 'Vous devez être le propriétaire ou un administrateur pour utiliser cette commande' - - 'Le nom ne doit pas être déjà utilisé' - mirror: - Description: Copie des flags d'une résidence - Info: - - 'Utilisation: /res mirror [résidenceSource] [résidenceCible]' - market: - Description: Achète, vend, ou loue une résidence - Info: - - 'Utilisation: /res market ? pour plus dinfo' - SubCommands: - info: - Description: Affiche des informations sur une résidence - Info: - - 'Utilisation: /res market info [résidence]' - - 'Montre si la résidence est à vendre ou à louer ainsi que le prix' - list: - Description: Liste les résidences à vendre et à louer - Info: - - 'Utilisation: /res market list' - sell: - Description: Vend une résidence - Info: - - 'Utilisation: /res market sell [résidence] [prix]' - - 'Met une résidence à vendre' - - 'Un autre joueur peut acheter la résidence avec /res market buy' - buy: - Description: Achète une résidence - Info: - - 'Utilisation: /res market buy [résidence]' - - 'Achète la résidence [résidence] si elle est à vendre' - unsell: - Description: Stoppe la vente d'une résidence - Info: - - 'Utilisation: /res market unsell [résidence]' - rent: - Description: Loue une résidence - Info: - - 'Utilisation: /res market rent [résidence] ' - - 'Loue la résidence [résidence]. peut être true ou false' - - 'Si true, la résidence sera automatiquement relouée' - rentable: - Description: Met à louer une résidence - Info: - - 'Utilisation: /res market rentable [résidence] [prix] [jours] ' - - 'Met à louer la résidence [résidence] et fixe le prix [prix] à payer tous les [jours] jours' - - 'Si est true, la résidence sera automatiquement remise à louer' - release: - Description: Libère ou interrompt la mise en location d'une résidence - Info: - - 'Utilisation: /res market release [résidence]' - - 'Libère la résidence [résidence] si vous êtes le loueur' - - 'Interrompt la mise en location de la résidence [résidence] si vous êtes le propriétaire' - current: - Description: Affiche la résidence dans laquelle vous êtes - Info: - - 'Utilisation: /res current' - lists: - Description: Listes des permissions prédéfinies - Info: - - 'Les permissions prédéfinies peuvent être appliquées à une résidence' - SubCommands: - add: - Description: Ajoute une liste - Info: - - 'Utilisation: /res lists add ' - remove: - Description: Supprime une liste - Info: - - 'Utilisation: /res lists remove ' - apply: - Description: Applique une liste à une résidence - Info: - - 'Utilisation: /res lists apply ' - set: - Description: Modifie un flag - Info: - - 'Utilisation: /res lists set ' - pset: - Description: Modifie le flag d'un joueur - Info: - - 'Utilisation: /res lists pset ' - gset: - Description: Modifie le flag d'un groupe - Info: - - 'Utilisation: /res lists gset ' - view: - Description: Affiche une liste - Info: - - 'Utilisation: /res lists view ' - server: - Description: Fait une résidence serveur (administrateurs seulement) - Info: - - 'Utilisation: /resadmin server [résidence]' - - 'Fait de la résidence [résidence] une propriété du serveur' - setowner: - Description: Change le propriétaire d'une résidence (administrateurs seulement) - Info: - - 'Utilisation: /resadmin setowner [résidence] [joueur]' - resreload: - Description: Recharge Residence (administrateurs seulement) - Info: - - 'Utilisation: /resreload' - resload: - Description: Charge le fichier de sauvegarde des résidences (dangereux, administrateurs seulement) - Info: - - 'Utilisation: /resload' - - 'Commande dangereuse' - - 'Charge le fichier de sauvegarde des résidences' - version: - Description: Affiche la version de Residence - Info: - - 'Utilisation: /res version' \ No newline at end of file diff --git a/src/Language/German.yml b/src/Language/German.yml deleted file mode 100644 index 38f89e11c..000000000 --- a/src/Language/German.yml +++ /dev/null @@ -1,594 +0,0 @@ -# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. -# German translation by webnews2 -Version: 03 -Fieldsversion: 22 -Language: - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - #Version 1 Fields - InvalidResidence: ungültiges Grundstück... - InvalidSubzone: ungültige Subzone... - InvalidDirection: ungültige Richtung... - InvalidChannel: ungültiger Kanal... - InvalidAmount: ungültiger Betrag... - InvalidCost: ungültiger Preis... - InvalidDays: ungültige Anzahl der Tage... - InvalidMaterial: ungültiges Material... - InvalidBoolean: ungültiger Wert, muss true(t) oder false(f) sein... - InvalidArea: ungültiges Gebiet... - InvalidGroup: ungültige Gruppe... - InvalidMessageType: Nachrichten-Typ muss enter oder leave sein. - InvalidList: ungültige Liste... - InvalidFlag: ungültige Flag... - InvalidFlagState: ungültiger Flag-Status, muss true(t), false(f), oder remove(r) sein... - AreaExists: Dieser Gebietsname existiert bereits. - AreaCreate: 'Grundstücksgebiet erstellt, ID %1' - AreaDiffWorld: Das Gebiet befindet sich in einer anderen Welt von Residence. - AreaCollision: 'Das Gebiet kollidiert mit dem Gründstück %1.' - AreaSubzoneCollision: 'Das Gebiet kollidiert mit der Subzone %1.' - AreaNonExist: Dieses Gebiet existiert nicht. - AreaInvalidName: ungültiger Gebietsname... - AreaRename: 'Gebiet %1 zu %2 umbenannt!' - AreaRemove: 'Gebiet %1 entfernt!' - AreaRemoveLast: Das letzte Gebiet eines Grundstücks kann nicht entfernt werden. - AreaNotWithinParent: Das Gebiet befindet sich nicht im Hauptgebiet. - AreaUpdate: Gebiet aktuallisiert... - AreaMaxPhysical: Du hast das Maximum an erlaubten physikalischen Gebieten für dein Grundstück erreicht. - AreaSizeLimit: Die Gebietsgröße befindet sich außerhalb deines Limits. - AreaHighLimit: 'Du kannst nicht bis zu dieser Höhe schützen, da dein Limit %1 ist' - AreaLowLimit: 'Du kannst nicht bis zu dieser Tiefe schützen, da dein Limit %1 ist' - NotInResidence: Du bist auf keinem Grundstück. - InResidence: 'Du stehst auf dem Grundstück %1!' - ResidenceOwnerChange: 'Besitzer von Grundstück %1 zu %2 geändert!' - NonAdmin: Du bist kein Residence-Admin! - AdminOnly: Nur Residence-Admins können dieses Kommando benutzen! - ChatDisabled: Residence-Chat deaktiviert... - SubzoneRename: 'Subzone %1 zu %2 umbenannt!' - SubzoneRemove: 'Subzone %1 entfernt!' - SubzoneCreate: 'Subzone %1 erstellt!' - SubzoneCreateFail: 'Die Subzone %1 kann nicht erstellt werden.' - SubzoneExists: 'Die Subzone %1 existiert bereits.' - SubzoneCollide: 'Die Subzone kollidiert mit der Subzone %1!' - SubzoneMaxDepth: Du hast das Maximum der erlaubten Subzonen-Tiefe erreicht! - SubzoneSelectInside: Beide Auswahlpunkte müssen sich auf dem Grundstück befinden! - SelectPoints: Wähle erst 2 Punkte aus, bevor du dieses Kommando benutzt! - SelectionSuccess: Auswahl erfolgreich! - SelectionFail: ungültiges Auswahlkommando... - SelectionBedrock: Die Auswahl wurde zu deiner maximal erlaubten Höhe expandiert! - SelectionSky: Die Auswahl wurde zu deiner maximal erlaubten Tiefe expandiert! - SelectionArea: 'Gebiet %1 des Grundstücks %2 ausgewählt!' - SelectDiabled: Du kannst keine Auswahl-Kommandos benutzen! - NoPermission: Du hast dafür keine Berechtigung! - OwnerNoPermission: Der Besitzer hat keine Berechtigung dafür! - ParentNoPermission: Du hast keine Berechtigung dafür, Änderungen an der Hauptzone vorzunehmen! - MessageChange: Nachricht geändert... - FlagSet: Flag gesetzt... - FlagCheckTrue: 'Die Flag %1 gehört zum Spieler %2 vom Grundstück %3, Wert = %4!' - FlagCheckFalse: 'Die Flag %1 gehört nicht zum Spieler %2 vom Grundstück %3!' - FlagsCleared: Flags gelöscht! - FlagsDefault: Flags zu Standard zurückgesetzt! - Usage: Kommando-Nutzung - InvalidHelp: ungültige Hilfe-Seite... - SubCommands: Sub-Kommandos - InvalidList: Unbekannter Listentyp, muss Blacklist oder Ignorelist sein. - MaterialGet: 'Der Materialname für ID %1 ist %2.' - MarketDisabled: Wirtschaft deaktiviert! - MarketList: Marktliste - SelectionTool: Auswahl-Werkzeug - InfoTool: Info-Werkzeug - NoBankAccess: Du hast keinen Zugang zur Bank! - NotEnoughMoney: Du hast nicht genug Geld! - BankNoMoney: Es ist nicht genug Geld auf der Bank! - BankDeposit: 'Du zahlst %1 in die Residence-Bank ein.' - BankWithdraw: 'Du hebst %1 von der Residence-Bank ab.' - MoneyCharged: 'Deinem %2 Konto wurden %1 abgezogen.' - MoneyCredit: 'Deinem %2 Konto wurden %1 gutgeschrieben.' - RentDisabled: Miet-System deaktiviert! - RentReleaseInvalid: 'Das Grundstück %1 wird nicht gemietet oder wird nicht vermietet!' - RentSellFail: Ein Grundstück kann nicht verkauft werden, wenn es zur Miete steht! - SellRentFail: Ein Grundstück kann nicht gemietet werden, wenn es zum Verkauf steht! - OwnerBuyFail: Du kannst dein eigenes Grundstück nicht kaufen! - OwnerRentFail: Du kannst dein eigenes Grundstück nicht mieten! - AlreadySellFail: Das Grundstück steht bereits zum Verkauf! - ResidenceBought: 'Du hast das Grundstück %1 gekauft!' - ResidenceBuy: 'Das Grundstück %1 hat das Grundstück %2 von dir gekauft.' - ResidenceBuyTooBig: Dieses Grundstück hat Gebiete, die größer sind als dein erlaubtes Maximum. - ResidenceNotForSale: Das Grundstück steht nicht zum Verkauf! - ResidenceForSale: 'Das Grundstück %1 steht nun zum Verkauf für %2.' - ResidenceStopSelling: Das Grundstück steht nicht mehr zum Verkauf. - ResidenceTooMany: Du besitzt bereits die maximale Anzahl an Grundstücken! - ResidenceMaxRent: Du mietest bereits die maximale Anzahl an Grundstücken! - ResidenceAlreadyRent: Das Grundstück steht bereits zur Miete... - ResidenceNotForRent: Das Grundstück steht nicht zur Miete... - ResidenceNotRented: Das Grundstück wird nicht gemietet. - ResidenceUnrent: 'Das Grundstück %1 wurde unvermietet.' - ResidenceRemoveRentable: 'Das Grundstück %1 ist nicht mehr mietbar.' - ResidenceForRentSuccess: 'Das Grundstück %1 ist nun mietbar für %2 alle %3 Tage.' - ResidenceRentSuccess: 'Du hast das Grundstück %1 für %2 Tage gemietet.' - ResidenceAlreadyRented: 'Das Grundstück %1 wird bereits an %2 vermietet.' - ResidenceAlreadyExists: 'Ein Grundstück namens %1 existiert bereits.' - ResidenceCreate: 'Du hast das Grundstück %1 erstellt!' - ResidenceRename: 'Grundstück %1 zu %2 umbenannt' - ResidenceRemove: 'Das Grundstück %1 wurde entfernt...' - RentDisabled: Miete deaktiviert! - RentDisableRenew: 'Das Grundstück %1 wird nun nach Ablauf nicht länger neu gemietet.' - RentEnableRenew: 'Das Grundstück %1 wird nun nach Ablauf automatisch neu gemietet.' - RentableDisableRenew: '%1 wird nun den Vermietbar-Status nach Ablauf nicht mehr erneuern.' - RentableEnableRenew: '%1 wird nun den Vermietbar-Status nach Ablauf automatisch erneuern.' - LandForSale: Grundstück zu verkaufen! - SellAmount: Verkaufssumme - LeaseExpire: Leasing-Auslaufzeit - RentExpire: Miet-Auslaufzeit - RentableAutoRenew: Vermietbar-Status automatisch erneuern - RentAutoRenew: Miete automatisch erneuern - RentableLand: mietbares Grundstück - ListMaterialAdd: '%1 zum Grundstück %2 hinzugefügt!' - ListMaterialRemove: '%1 vom Grundstück %2 entfernt!' - ItemBlacklisted: Dir ist es nicht gestattet, dieses Item hier zu benutzen. - RentedModifyDeny: Ein gemietetes Grundstück kann nicht verändert werden. - WorldPVPDisabled: Welt-PVP deaktiviert! - NoPVPZone: Keine PVP-Zone! - FlagDeny: 'Du hast hier keine %1-Berechtigung!' - FlagSetDeny: 'Der Besitzer hat keinen Zugang zur Flag %1.' - SelectPoint: 'Auswahl-Punkt %1 markiert!' - ResidenceChat: 'Residence-Chat getoggelt, %1' - ResidenceMoveDeny: 'Du kannst dich auf dem Grundstück %1 nicht bewegen!' - TeleportDeny: Du hast keinen Teleport-Zugang! - TeleportSuccess: 'Teleportiert!' - TeleportNear: Du wurdest zu einem naheliegenden Grundstück teleportiert. - TeleportNoFlag: Du hast keinen Teleport-Zugang für dieses Grundstück. - SetTeleportLocation: Teleport-Standort gesetzt... - HelpPageHeader: 'Hilfe-Seiten - %1 - Seite <%2 von %3>' - ListExists: Liste existiert bereits... - ListRemoved: Liste entfernt... - ListCreate: 'Liste %1 erstellt!' - LeaseRenew: 'Leasing gültig bis %1' - LeaseRenewMax: Leasing bis zum erlaubten Maximum erneuert! - LeaseNotExpire: Kein solch Leasing oder Leasing läuft nicht aus. - LeaseRenewalCost: 'Erneuerungskosten für das Gebiet %1 betragen %2!' - LeaseInfinite: Leasing-Zeit auf unendlich gesetzt... - PermissionsApply: Residence wendet Permissions an. - PhysicalAreas: physikalische Gebiete - CurrentArea: aktuelles Gebiet - LeaseExpire: Leaseablaufdatum - NotOnline: Ziel-Spieler muss Online sein! - ResidenceGiveLimits: Grundstück kann dem Ziel-Spieler nicht gegeben werden, da es außerhalb der Limits dieses Spielers liegt. - ResidenceGive: 'Du gibst %2 das Grundstück %1!' - ResidenceRecieve: 'Du hast von %2 das Grundstück %1 erhalten!' - #Version 4 New Fields - #ResidenceListAll: 'Residences - ' - removed, use GenericPage now - ResidenceListAllEmpty: Es existieren keine Grundstücke auf diesem Server... - InvalidPage: ungültige Seite... - NextPage: Nächste Seite - #Version 10 New Fields - RemovePlayersResidences: 'Alle Grundstück die %1 gehören, wurden entfernt!' - GenericPage: 'Seite %1 von %2' - #Version 11 New Fields - ResidenceRentedBy: 'Gemietet von %1' - #Version 14 New Fields - InvalidCharacters: ungültige Zeichen entdeckt... - InvalidNameCharacters: Name enthält unerlaubte Zeichen... - #Version 15 New Fields - DeleteConfirm: 'Bist du sicher, dass du das Grundstück %1 löschen willst? Nutze /res confirm zum bestätigen.' - #Version 18 New Fields - SelectTooHigh: Warnung, Auswahl befindet sich über der Höhe des Karten-Limits. - SelectTooLow: Warnung, Auswahl befindet sich unter dem Boden des Karten-Limits. - WorldEditNotFound: WorldEdit wurde nicht gefunden! - #Version 19 New Fields - NoResHere: Es gibt dort kein Grundstück! - DeleteSubzoneConfirm: 'Bist du sicher, dass du die Subzone %1 löschen willst? Nutze /res confirm zum bestätigen.' - #Version 20 New Fields - SubzoneOwnerChange: 'Die Subzone %1 gehört nun %2.' - CoordsTop: 'X:%1 Y:%2 Z:%3' - CoordsBottom: 'X:%1 Y:%2 Z:%3' - #Version 21 New Fields - AdminToggle: 'Automatisches /resadmin getoggelt: %1' - #Version 22 New Fields - NoSpawn: 'Du hast keine Berechtigung um dich an deinem Spawn-Punkt zu bewegen. Neu lokalisieren...' - CompassTargetReset: 'Dein Kompass wurde zurückgesetzt' - CompassTargetSet: 'Dein Kompass hat nun Punkte zu %1' - - #The below lines are mostly a word bank for various uses. - #Version 1 Fields - Description: Beschreibung - Land: Grundstück - Cost: Betrag - Selection: Auswahl - Total: Total - Size: Größe - Expanding: Expandieren - Shifting: Verschiebung - Up: Hoch - Down: Runter - Error: Error - Flags: Flags - Your: Deine - Group: Gruppe - Others: Andere - Primary: Primär - Secondary: Sekundär - Selection: Auswahl - Moved: Bewegt - Status: Status - Available: Verfügbar - On: An - Off: Aus - Name: Name - Lists: Listen - Residences: Grundstücke - Residence: Grundstück - Count: Zählung - Owner: Besitzer - #Version 4 Fields - World: Welt - #Version 12 Fields - Subzones: Subzonen - #Version 20 Fields - CoordsT: obere Koordinaten - CoordsB: untere Koordinaten - #Version 22 Fields - TurnOn: 'an' - TurnOff: 'aus' - -# This is the help / usage messages for each command. -# It follows this format: -# -# Description: -# Info: -# SubCommands: -# - these follow the same format, and each sub command can have its own subcommands -# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that -# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). -# Add a page number after the ? mark to see that page. - -HelpLinesPerPage: 7 -CommandHelp: #this is just a holder node, that holds the entire help - Description: Contains Help for Residence - SubCommands: #this is the actual beginning of all commands - res: #main residence command - Description: Haupt-Kommando für Residence - Info: - - 'Sieh dir das Residence-Wiki für mehr Info´s an.' - - 'Wiki: residencebukkitmod.wikispaces.com' - - 'Nutze /[Kommando] ? um mehr Informationen zu erhalten.' - SubCommands: - select: #selection commands - Description: Auswahl-Kommandos - Info: - - 'Dieses Kommando wählt Gebiete aus, die über Residence genutzt werden können.' - - '/res select [x] [y] [z] - selektiert einen Radius von Blöcken mit dir als Mittelpunkt.' - SubCommands: - coords: - Description: Zeigt die ausgewählten Koordinaten an - Info: - - 'Verwendung: /res select coords' - size: - Description: Zeigt die ausgewählte Größe an - Info: - - 'Verwendung: /res select size' - cost: - Description: Zeigt den Kostenbetrag der ausgewählten Fläche an - Info: - - 'Verwendung: /res select cost' - vert: - Description: expandiert die Auswahl vertikal - Info: - - 'Verwendung: /res select vert' - - 'Expandiert die Auswahl zum höchsten und tiefsten Limit des Spielers.' - sky: - Description: expandiert die Auswahl bis zum Himmel - Info: - - 'Verwendung: /res select sky' - - 'Expandiert die Auswahl bis zum Höhen-Limit des Spielers.' - bedrock: - Description: expandiert die Auswahl bis zum Grundgestein - Info: - - 'Verwendung: /res select bedrock' - - 'Expandiert die Auswahl bis zum Tiefen-Limit des Spielers.' - expand: - Description: expandiert die Auswahl in eine beliebige Richtung - Info: - - 'Verwendung: /res select expand ' - - 'Expandiert die Auswahl um den in die Blickrichtung.' - shift: - Description: verschiebt die Auswahl in eine beliebige Richtung - Info: - - 'Verwendung: /res select shift ' - - 'Verschiebt die Auswahl um den in die Blickrichtung.' - chunk: - Description: Selektiert den aktuellen Chunk - Info: - - 'Verwendung: /res select chunk' - - 'Selektiert den Chunk in dem du dich momentan befindest.' - residence: - Description: wählt ein vorhandenes Gebiet eines Grundstücks aus - Info: - - 'Verwendung /res select ' - - 'Wählt ein vorhandenes Gebiet eines Grundstücks aus.' - worldedit: - Description: verwendet die aktuelle WorldEdit-Auswahl um ein Grundstück zu erstellen - Info: - - 'Verwendung /res select worldedit' - - 'Die aktuelle WorldEdit-Auswahl wird zum erstellen eines Grundstücks verwendet.' - create: #creation command - Description: erstellt Grundstücke - Info: - - 'Verwendung: /res create ' - remove: #remove command - Description: entfernt Grundstücke - Info: - - 'Verwendung: /res remove ' - removeall: - Description: Entfernt alle Grundstück eines Spielers! - Info: - - 'Verwendung: /res removeall [Besitzer]' - - 'Entfernt alle Grundstücke eines beliebigen Spielers.' - - 'Erfordert /resadmin wenn du es für andere Spieler nutzen willst.' - confirm: - - 'Verwendung: /res confirm' - - 'Bestätigt die Löschung eines Grundstücks.' - subzone: - Description: erstellt Subzonen auf einem Grundstück - Info: - - 'Verwendung: /res subzone [Subzonenname]' - - 'Wenn der Grundstücksname ausgelassen wurde, wird der Name des Grundstücks verwendet, in dem du dich befindest.' - area: - Description: verwaltet die physikalischen Gebiete eines Grundstücks - SubCommands: - list: - Description: listet die physikalischen Gebiete eines Grundstücks auf - Info: - - 'Verwendung: /res area list [Grundstücksname] ' - listall: - Description: listet Koordinaten und andere Info´s von Gebieten auf - Info: - - 'Verwendung: /res area listall [Grundstücksname] ' - add: - Description: fügt physikalische Gebiete zu einem Grundstück hinzu - Info: - - 'Verwendung: /res area add [Grundstücksname] [Gebiets-ID]' - - 'Du musst erst 2 Auswahlpunkte festlegen.' - remove: - Description: entfernt physikalische Gebiete eines Grundstücks - Info: - - 'Verwendung: /res area remove [Grundstücksname] [Gebiets-ID]' - replace: - Description: ersetzt physikalische Gebiete eines Grundstücks - Info: - - 'Verwendung: /res area replace [Grundstücksname] [Gebiets-ID]' - - 'Du musst erst 2 Auswahlpunkte festlegen.' - - 'Das ersetzen eines Gebietes wird die Differenz der Größe abziehen, wenn das neue Gebiet größer ist.' - info: - Description: zeigt Info´s zu einem Grundstück an - Info: - - 'Verwendung: /res info ' - - 'Lass weg um Info´s zum aktuellen Grundstück zu erhalten.' - limits: - Description: zeigt deine Limits an - Info: - - 'Verwendung: /res limits' - - 'Zeigt die Limitierungen an, die du für das erstellen und verwalten von Grundstücken hast.' - message: - Description: verwaltet die enter / leave Nachrichten eines Grundstücks - Info: - - 'Verwendung: /res message [enter/leave] [Nachricht]' - - 'Ändert die Betreten-(enter) oder Verlassennachricht(leave) eines Grundstücks.' - - 'Verwendung: /res message remove [enter/leave]' - - 'Entfernt die Betreten-(enter) oder Verlssennachricht(leave) eines Grundstücks.' - lease: - Description: verwaltet Grundstück-Leasings - Info: - - 'Verwendung: /res lease [renew/cost] [Grundstücksname]' - - '/res lease cost zeigt an, was das erneuern eines Grundstück-Leasings kostet.' - - '/res lease renew erneuert das Leasing des Grundstücks, vorausgesetzt du hast genug Geld.' - SubCommands: - set: - Description: setzt die Lease-Zeit (Nur Admins) - Info: - - 'Verwendung: /resadmin lease set [Grundstücksname] [#days/infinite]' - - 'Setzt die Lease-Zeit auf eine beliebige Anzahl an Tagen oder unendlich.' - bank: - Description: verwaltet das Geld eines Grundstücks - Info: - - 'Verwendung: /res bank [deposit/withdraw] [Betrag]' - - 'Du musst auf einem Grundstück stehen.' - - 'Du musst die +Bank-Flag haben!' - - 'deposit=einzahlen, withdraw=abheben' - tp: - Description: teleportiert dich zu einem Grundstück - Info: - - 'Verwendung: /res tp [Grundstücksname]' - - 'Teleportiert dich zu einem Grundstück, du musst die +Tp-Flag haben oder der Besitzer sein.' - - 'Deiner Gruppe muss es außerdem gestattet sein, vom Server-Admin teleportiert zu werden.' - tpset: - Description: setzt den Teleport-Standort eines Grundstücks - Info: - - 'Verwendung: /res tpset' - - 'Dies wird den Teleport-Standort zu dem Punkt setzen wo du grade stehst.' - - 'Du musst auf einem Grundstück stehen, um dieses Kommando nutzen zu können.' - - 'Du musst außerdem der Besitzer sein oder die +Admin-Flag haben.' - set: - Description: setzt generelle Flags auf Grundstücken - Info: - - 'Verwendung: /res set [Flag] [true/false/remove]' - - 'true=erlauben, false=verbieten, remove=entfernen' - - 'Um eine Liste der Flags zu sehen, nutze /res flags ?' - - 'Diese Flags gehören zu allen Spielern, die keine speziellen Rechte auf dem Grundstück haben. (siehe /res pset ?)' - pset: - Description: setzt Flags für einen beliebigen Spieler auf einem Grundstück - Info: - - 'Verwendung: /res pset [Spielername] [Flag] [true/false/remove]' - - 'Verwendung: /res pset [Spielername] removeall' - - 'true=erlauben, false=verbieten, remove=entfernen, removeall=alle entfernen' - - 'Um eine Liste der Flags zu sehen, nutze /res flags ?' - gset: - Description: setzt Flags für eine beliebige Gruppe auf einem Grundstück - Info: - - 'Verwendung: /res gset [Gruppe] [Flag] [true/false/remove]' - - 'true=erlauben, false=verbieten, remove=entfernen' - - 'Um eine Liste der Flags zu sehen, nutze /res flags ?' - lset: - Description: ändert Blacklist- und Ignorelistoptionen - Info: - - 'Verwendung: /res lset [blacklist/ignorelist] [Material]' - - 'Verwendung: /res lset info' - - 'Blacklisten eines Materials verhindert, dass dieses auf einem Grundstück platziert wird.' - - 'Ignorelisten verursacht, dass ein beliebiges Material nicht mehr von Residence geschützt wird.' - flags: - Description: Liste der Flags - Info: - - 'Flag-Werte: [true] erlaubt die Handlung, [false] verbietet die Handlung' - list: - Description: listet Grundstücke - Info: - - 'Verwendung: /res list ' - - 'Listet alle Grundstücke des Spielers auf, außer die Versteckten.' - - 'Wenn deine Grundstücke gelistet werden, zeigt er deine versteckten Grundstücke auch an.' - - 'Um sämtliche Grundstücke zu listen, nutze /res listall.' - listhidden: - Description: listet versteckte Grundstücke (nur Admins) - Info: - - 'Verwendung: /res listhidden ' - - 'Listet die versteckten Grundstücke des Spielers auf.' - listall: - Description: listet alle Grundstücke - Info: - - 'Verwendung: /res listall ' - - 'Listet alle Grundstücke des Servers auf, außer die Versteckten die dir nicht gehören.' - listallhidden: - Description: listet alle versteckten Grundstücke (nur Admins) - Info: - - 'Verwendung: /res listhidden ' - - 'Listet alle versteckten Grundstücke des Servers auf.' - sublist: - Description: listet Grundstückssubzonen - Info: - - 'Verwendung: /res sublist ' - - 'Listet alle Subzonen innerhalb eines Grundstücks auf.' - default: - Description: setzt die Flags des Grundstücks auf Standart zurück - Info: - - 'Verwendung: /res default ' - - 'Setzt die Flags eines Grundstücks auf Standart zurück. Um dies zu tun musst du der Besitzer oder ein Admin sein.' - rename: - Description: benennt ein Grundstück um - Info: - - 'Verwendung: /res rename [alter Grundstücksname] [neuer Grundstücksname]' - - 'Um dies zu tun musst du der Besitzer oder ein Admin sein.' - - 'Der Name darf noch nicht vergeben sein!' - mirror: - Description: spiegelt Flags wieder - Info: - - 'Usage: /res mirror [Quell-Grundstück] [Ziel-Grundstück]' - - 'Spiegelt die Flags eines Grundstück auf ein anderes wieder. Um dies zu tun musst du der Besitzer oder ein Admin sein.' - market: - Description: kauft, verkauft oder mietet Grundstücke - Info: - - 'Verwendung: /res market ? für mehr Info´s' - SubCommands: - info: - Description: zeigt Wirtschafts-Info´s zum Grundstück an - Info: - - 'Verwendung: /res market info [Grundstücksname]' - - 'Zeigt an ob das Grundstück zum Verkauf oder zur Miete steht, und was es kostet.' - list: - Description: listet mietbare und verkäufliche Grundstücke - Info: - - 'Verwendung: /res market list' - sell: - Description: verkauft ein Grundstück - Info: - - 'Verwendung: /res sell [Grundstücksname] [Betrag]' - - 'Stellt ein Grundstück zum Verkauf für einen beliebigen [Betrag] an Geld.' - - 'Ein Spieler kann dieses Grundstück mit /res market buy kaufen!' - buy: - Description: kauft ein Grundstück - Info: - - 'Verwendung: /res buy [Grundstücksname]' - - 'Kauft ein Grundstück, wenn es zum Verkauf steht!' - unsell: - Description: stoppt den Verkauf eines Grundstücks - Info: - - 'Verwendung: /res unsell [Grundstücksname]' - rent: - Description: mietet ein Grundstück - Info: - - 'Verwendung: /res market rent [Grundstücksname] ' - - 'Mietet ein Grundstück. Autorenew(automatisch erneuern) kann dabei true(ja) oder false(nein) sein.' - - 'Wenn autorenew auf true ist, wird das Grundstück kurz vor Ablauf des Mietvertrags erneut gemietet.' - rentable: - Description: macht ein Grundstück mietbar - Info: - - 'Verwendung: /res market rentable [Grundstücksname] [Betrag] [Tage] ' - - 'Macht ein Grundstück mietbar für einen [Betrag] an Geld für beliebig viele [Tage].' - - 'Wenn repeat(wiederholen) auf true(ja) ist, wird das Grundstück nach Ablauf des Mietvertrags automatisch wieder mietbar.' - release: - Description: entfernt den Miet- oder Mietbar-Status eines Grundstücks - Info: - - 'Verwendung: /res market release [Grundstücksname]' - - 'Wenn du der Mieter bist, wirst du von dem Mietverhältnis entlassen.' - - 'Wenn du der Besitzer bist, wird das Grundstück nicht mehr mietbar sein.' - current: - Description: zeigt das Grundstück in dem du dich grade befindest an - Info: - - 'Verwendung: /res current' - lists: - Description: vordefinierte Berechtigungs-Liste - Info: - - 'Vordefinierte Berechtigungen, die zu einem Grundstück gehören können.' - SubCommands: - add: - Description: fügt eine Liste hinzu - Info: - - 'Verwendung: /res lists add ' - remove: - Description: entfernt eine Liste - Info: - - 'Verwendung: /res lists remove ' - apply: - Description: macht ein Grundstück zu einer Liste gehörig - Info: - - 'Verwendung: /res lists apply ' - set: - Description: setzt eine Flag - Info: - - 'Verwendung: /res lists set ' - pset: - Description: setzt eine Spieler-Flag - Info: - - 'Verwendung: /res lists pset ' - gset: - Description: setzt eine Gruppen-Flag - Info: - - 'Verwendung: /res lists gset ' - view: - Description: schau eine Liste an - Info: - - 'Verwendung: /res lists view ' - server: - Description: Grundstücke gehören dem Server (nur Admins). - Info: - - 'Verwendung: /resadmin server [Grundstücksname]' - - 'Das Grundstück gehört dem Server.' - setowner: - Description: ändert den Besitzer eines Grundstücks (nur Admins). - Info: - - 'Verwendung: /resadmin setowner [Grundstücksname] [Spielername]' - resreload: - Description: lädt Residence neu (nur Admins). - Info: - - 'Verwendung: /resreload' - resload: - Description: lädt die Speicher-Dateien der Grundstücke (UNSICHER, nur Admins). - Info: - - 'Verwendung: /resload' - - 'UNSICHERES Kommando, weil es die Grundstücke vorher nicht abspeichert.' - - 'Lädt die Grundstück-Speicher-Dateien nach Änderungen neu.' - version: - Description: zeigt die Residence-Version an - Info: - - 'Verwendung: /res version' \ No newline at end of file diff --git a/src/Language/Hungarian.yml b/src/Language/Hungarian.yml deleted file mode 100644 index 6693ac14e..000000000 --- a/src/Language/Hungarian.yml +++ /dev/null @@ -1,587 +0,0 @@ -# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. -Version: 01 -FieldsVersion: 22 -Language: - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - #Version 1 Fields - InvalidResidence: ervenytelen lakhely... - InvalidSubzone: ervenytelen alosztaly... - InvalidDirection: ervenytelen irany... - InvalidChannel: ervenytelen csatorna... - InvalidAmount: ervenytelen osszeg... - InvalidCost: ervenytelen osszeg... - InvalidDays: ervenytelen napszam... - InvalidMaterial: ervenytelen anyag... - InvalidBoolean: ervenytelen ertek, igaznak kell lennie(t) vagy hamisnak(f) - InvalidArea: ervenytelen terulet... - InvalidGroup: ervenytelen csoport... - InvalidMessageType: Az uzenet tipusa belepes vagy torles lehet. - InvalidList: ervenytelen lista... - InvalidFlag: ervenytelen engedely... - InvalidFlagState: ervenytelen engedely beallitas, igaznak(t), hamisnak(f), vagy torles(r) kell lennie - AreaExists: A terulet nev mar letezik. - AreaCreate: 'lakhely terulet letrejott, ID %1' - AreaDiffWorld: A terulet egy masik vilag lakhelye. - AreaCollision: 'A terulet utkozik egy lakohellyel %1' - AreaSubzoneCollision: 'A terulet utkozik egy alosztallyal %1' - AreaNonExist: Ilyen terulet nem letezik. - AreaInvalidName: ervenytelen terulet nev... - AreaRename: 'Terulet atnevezve %1 erre %2' - AreaRemove: 'Terulet torolve %1...' - AreaRemoveLast: Nem lehet torolni az utolso lakoteruletet. - AreaNotWithinParent: A terulet nem tartozik a kozponti terulethez. - AreaUpdate: Terulet frissitve... - AreaMaxPhysical: Elerted a megengedett maximalis fizikai teruletek szamat a lakhelyeden. - AreaSizeLimit: A terulet merete meghaladja a megengedett erteket. - AreaHighLimit: 'Nem vedheted le a teruletet ilyen magasan, a te hatarod %1' - AreaLowLimit: 'Nem vedheted le a teruletet ilyen melyen, a te hatarod %1' - NotInResidence: Nem vagy a lakhely rendszerben. - InResidence: 'Te egy lakhelyen allsz %1' - ResidenceOwnerChange: 'lakhely %1 tulajdonos jog atruhazva ra %2' - NonAdmin: Te nem vagy lakhely admin. - AdminOnly: Csak adminoknak hozzaferheto ez a parancs. - ChatDisabled: lakhely chat kikapcsolva... - SubzoneRename: 'Alosztaly atnevezve %1 erre %2' - SubzoneRemove: 'Alosztaly %1 torolve.' - SubzoneCreate: 'Alosztaly letrehozva %1' - SubzoneCreateFail: 'Nem lehet letrehozni az alosztalyt %1' - SubzoneExists: 'Alosztaly %1 mar letezik.' - SubzoneCollide: 'Az alosztaly utkozik egy masik alosztallyal %1' - SubzoneMaxDepth: Elerted a megengedett maximalis melyseget az alosztalynak. - SubzoneSelectInside: Mindket kivalasztasi pontnak a lakhelyen belul kell lennie. - SelectPoints: Eloszor jelolj ki ket pontot, aztan hasznald a parancsot! - SelectionSuccess: Kijeloles sikeres! - SelectionFail: ervenytelen kijelolesi parancs... - SelectionBedrock: A kijeloles bovult a megengedett legmelyebb hatarertekre. - SelectionSky: A kijeloles bovult a megengedett legmagasabb hatarertekre. - SelectionArea: 'A kijelolt terulet %1 lakhelye %2' - SelectDiabled: Nincs hozzaferesed a kijelolesi parancsokhoz. - NoPermission: Nincs hozzaferesed ehhez. - OwnerNoPermission: A tulajdonosnak nincs hozzaferese ehhez. - ParentNoPermission: Nincs hozzaferesed a kozponti terulet modositasahoz. - MessageChange: uzenet beallitva... - FlagSet: Engedely beallitva... - FlagCheckTrue: 'Engedely %1 vonatkozik a jatekosra %2 a lakhelyen %3, erteken = %4' - FlagCheckFalse: 'Engedely %1 nem vonatkozik a jatekosra %2 a lakhelyen.' - FlagsCleared: Engedely megtisztitva. - FlagsDefault: Engedelyek alapertekre allitva. - Usage: Parancs hasznalat - InvalidHelp: ervenytelen Parancs sugo... - SubCommands: Alparancsok - InvalidList: Ismeretlen lista tipus, feketelistanak vagy kivetellistanak kell lennie. - MaterialGet: 'Az anyag neve ID-vel kifejezve %1 ez %2' - MarketDisabled: Gazdasag(Economy) kikapcsolva! - MarketList: Lakasborze - SelectionTool: Kijelolo eszkoz - InfoTool: Informacios eszkoz - NoBankAccess: Nincs banki hozzaferesed. - NotEnoughMoney: Nincs eleg penzed. - BankNoMoney: Nincs eleg penzed a bankban. - BankDeposit: 'Elhelyeztel %1 osszeget a lakhelyi bankban.' - BankWithdraw: 'Kivettel %1 osszeget a lakhelyi bankbol.' - MoneyCharged: 'Felszamitva %1 a te %2 fiokodhoz.' - MoneyCredit: 'Jovairva %1 a te %2 fiokodhoz.' - RentDisabled: Ber rendszer kikapcsolva. - RentReleaseInvalid: 'lakhely %1 nincs kiberelve vagy berelheto.' - RentSellFail: A lakhelyet nem lehet eladni, ha az berelheto. - SellRentFail: A lakhelyet nem lehet kibetelni, ha az elado. - OwnerBuyFail: Nem veheted meg a sajat folded! - OwnerRentFail: Nem berelheted ki a sajat folded! - AlreadySellFail: A lakhely mar elado! - ResidenceBought: 'Vettel egy lakhelyet %1' - ResidenceBuy: 'Megvette %1 a lakhelyet %2 toled.' - ResidenceBuyTooBig: Ez a lakhely nagyobb teruletu, mint a megengedett maximalis ertek. - ResidenceNotForSale: A lakhely nem elado. - ResidenceForSale: 'lakhely %1 mar elado ennyiert %2' - ResidenceStopSelling: A lakhely mar nem elado. - ResidenceTooMany: Mar elerted a megengedett maximalis szamu lakhelyet ami hozzad tartozik. - ResidenceMaxRent: Mar elerted a megengedett maximalis szamu lakhelyet amit berelhetsz. - ResidenceAlreadyRent: A lakhely mar berelheto... - ResidenceNotForRent: A lakhely nem berelheto... - ResidenceNotRented: A lakhely nem berelt. - ResidenceUnrent: 'lakhely %1 nincs berelve.' - ResidenceRemoveRentable: 'lakhely %1 mar nem berelheto.' - ResidenceForRentSuccess: 'lakhely %1 most berelheto %2 minden %3 nap.' - ResidenceRentSuccess: 'Kiberelted a lakhelyet %1 tole %2 napra.' - ResidenceAlreadyRented: 'lakhely %1 jelenleg is berelt altala %2' - ResidenceAlreadyExists: 'A lakhely nev %1 mar letezik.' - ResidenceCreate: 'Letrehoztad ezt a lakhelyet %1!' - ResidenceRename: 'lakhely atnevezve %1 erre %2' - ResidenceRemove: 'lakhely %1 eltavolitva...' - RentDisabled: Bereles kikapcsolva... - RentDisableRenew: 'lakhely %1 mar nem lesz ujra berelheto annak lejarta utan.' - RentEnableRenew: 'lakhely %1 mar automatikusan ujra berelheto lesz a lejarta utan.' - RentableDisableRenew: '%1 mar nem lesz megujithato a berleti statusz a lejarat utan.' - RentableEnableRenew: '%1 mar automatikusan megujithato lesz a berleti statusz lejarta utan.' - LandForSale: Elado telek - SellAmount: Eladasi osszeg - LeaseExpire: Berbeadas lejarati ideje - RentExpire: Kiadas lejarati ideje - RentableAutoRenew: Berelhetoseg automatikus megujitasa - RentAutoRenew: Bereles automatikus megujitasa - RentableLand: Berelheto telek - ListMaterialAdd: '%1 hozzaadva a telekhez %2' - ListMaterialRemove: '%1 eltavolitva a telekbol %2' - ItemBlacklisted: Itt feketelistara kerultel ennek az anyagnak a hasznalataert. - RentedModifyDeny: A berelt lakhely nem modosithato. - WorldPVPDisabled: Vilagi PVP kikapcsolva. - NoPVPZone: PVP mentes terulet. - FlagDeny: 'Neked nincs ilyen %1 hozzaferesed itt.' - FlagSetDeny: 'A tulajdonos nem rendelkezik ilyen hozzaferessel %1' - SelectPoint: 'Elhelyezve a(z) %1 kijelolesi pont' - ResidenceChat: 'lakhely chat atvaltva erre %1' - ResidenceMoveDeny: 'Nincs hozzaferesed a lakhely mozgatasara %1' - TeleportDeny: Nincs teleport hozzaferesed. - TeleportSuccess: 'Teleportaltal!' - TeleportNear: Teleportaltal a lakhely kozeleben. - TeleportNoFlag: Nincs teleportalasi engedelyed erre a lakhelyre. - SetTeleportLocation: Teleport helyzetenek beallitasa... - HelpPageHeader: 'Sugu oldalak - %1 - Oldal <%2 ennyibol %3>' - ListExists: Lista mar letezik... - ListRemoved: Lista eltavolitva... - ListCreate: 'Lista letrehozva %1' - LeaseRenew: 'Bereles eddig ervenyes %1' - LeaseRenewMax: Berbeadas megujitva az elerheto maximumig. - LeaseNotExpire: Nincs ilyen berlet, vagy pedig nem fog lejarni. - LeaseRenewalCost: 'Megujitas koltsege a teruleten %1 ennyi %2' - LeaseInfinite: Berleti ido beallitva vegtelenre... - PermissionsApply: Hozzaferes engedelyezve a lakhelyhez. - PhysicalAreas: Fizikai teruletek - CurrentArea: Jelenlegi terulet - LeaseExpire: Berbeadas lejarta - NotOnline: A kijelolt jatekosnak online kell lennie. - ResidenceGiveLimits: Nem adhatsz meg lakhelyet a kijelolt jatekosnak, mert az kivul esik a kijelolt jatekos limiten. - ResidenceGive: 'lakhelyet adsz %1 neki %2' - ResidenceRecieve: 'lakhelyet kaptal %1 ettol a jatekostol %2' - #Version 4 New Fields - #ResidenceListAll: 'Residences - ' - removed, use GenericPage now - ResidenceListAllEmpty: Nincsenek lakhelyek a szerveren... - InvalidPage: ervenytelen oldal... - NextPage: Kovetkezo oldal - #Version 10 New Fields - RemovePlayersResidences: 'Eltavolitva az osszes hozzatartozo lakhely tole %1' - GenericPage: 'Oldal %1 ennyibol %2' - #Version 11 New Fields - ResidenceRentedBy: 'Bereli %1' - #Version 14 New Fields - InvalidCharacters: ervenytelen karakterek eszlelve... - InvalidNameCharacters: A nev tiltott karaktereket tartalmaz... - #Version 15 New Fields - DeleteConfirm: 'Ha biztos vagy benne hogy torolni szeretned a lakhelyet %1, hasznald /res confirm a megerositeshez.' - #Version 18 New Fields - SelectTooHigh: Figyelem, a kijeloles tul nyulik a terkep tetejen, korlatozas. - SelectTooLow: Figyelem, a kijeloles tul nyulik a terkep aljan, korlatozas. - WorldEditNotFound: WorldEdit nem talalhato. - #Version 19 New Fields - NoResHere: Itt nincs lakhely. - DeleteSubzoneConfirm: 'Ha biztos vagy benne hogy torolni szeretned az alosztalyt %1, hasznald /res confirm a megerositeshez.' - #Version 20 New Fields - SubzoneOwnerChange: 'alosztalyt %1 tulajdonosa megváltozott %2' - CoordsTop: 'X:%1 Y:%2 Z:%3' - CoordsBottom: 'X:%1 Y:%2 Z:%3' - #Version 21 New Fields - AdminToggle: 'Automatic resadmin toggle turned %1' - #Version 22 New Fields - NoSpawn: 'You do not have move permissions at your spawn point. Relocating' - CompassTargetReset: 'Your compass has been reset' - CompassTargetSet: 'Your compass now points to %1' - - #The below lines are mostly a word bank for various uses. - #Version 1 Fields - Description: Leiras - Land: Telek - Cost: Koltseg - Selection: Kijeloles - Total: Teljes - Size: Meret - Expanding: Bovites - Shifting: Eltolas - Up: Fel - Down: Le - Error: Hiba - Flags: Engedelyek - Your: Tied - Group: Csoport - Others: Egyebek - Primary: Elsodleges - Secondary: Masodlagos - Selection: Kijeloles - Moved: Mozgatas - Status: Helyzet - Available: Elerheto - On: Be - Off: Ki - Name: Nev - Lists: Listak - Residences: lakhelyek - Residence: lakhely - Count: osszeg - Owner: Tuljadonos - #Version 4 Fields - World: Vilag - #Version 12 Fields - Subzones: Alosztalyok - #Version 20 Fields - CoordsT: Top Coords - CoordsB: Bottom Coords - #Version 22 Fields - TurnOn: 'on' - TurnOff: 'off' - -# This is the help / usage messages for each command. -# It follows this format: -# -# Description: -# Info: -# SubCommands: -# - these follow the same format, and each sub command can have its own subcommands -# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that -# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). -# Add a page number after the ? mark to see that page. - -HelpLinesPerPage: 7 -CommandHelp: #this is just a holder node, that holds the entire help - Description: Segitseg a lakhelyekhez - SubCommands: #this is the actual beginning of all commands - res: #main residence command - Description: Elsodleges lakhely parancs - Info: - - 'Nezd meg a lakhely wiki-t tovabbi segitsegert.' - - 'Wiki: residencebukkitmod.wikispaces.com' - - 'Hasznald /[parancs] ? parancsot a tovabbi informaciokhoz.' - SubCommands: - select: #selection commands - Description: Kijeloles parancsok - Info: - - 'Ez a parancs a kijelolt teruleteket hasznalja a lakhelyekkel.' - - '/res select [x] [y] [z] - kivalasztja a blokkok sugarat, kozepen veled.' - SubCommands: - coords: - Description: Jelzi a kivalasztott koordinatakat - Info: - - 'Hasznalat: /res select coords' - size: - Description: Jelzi a kivalasztott meretet - Info: - - 'Hasznalat: /res select size' - cost: - Description: Jelzi a kivalasztott osszeget - Info: - - 'Hasznalat: /res select cost' - vert: - Description: Boviti a kijelolest fuggolegesen - Info: - - 'Hasznalat: /res select vert' - - 'Boviti a kijelolest olyan magasan es alacsonyan ahogy lehetseges.' - sky: - Description: Boviti a kijelolest az egig - Info: - - 'Hasznalat: /res select sky' - - 'Kiboviti olyan magassagig ahogy lehetseges.' - bedrock: - Description: Boviti a kijelolest az alapkoig - Info: - - 'Hasznalat: /res select bedrock' - - 'Kiboviti olyan melysegig ahogy lehetseges.' - expand: - Description: Boviti a kijelolest egy iranyban. - Info: - - 'Hasznalat: /res select expand ' - - 'Boviti egy iranyban amerre nezel.' - shift: - Description: Shift selection in a direction - Info: - - 'Hasznalat: /res select shift ' - - 'Eltolja a kijelolest ennyivel az iranyba amerre nezel.' - chunk: - Description: Kijeloli a chunkot amin vagy. - Info: - - 'Hasznalat: /res select chunk' - - 'Kijeloli a chunkot amin jelenleg allsz.' - residence: - Description: Kijelol egy letezo teruletet a lakhelyen. - Info: - - 'Hasznalat /res select ' - - 'Kijelol egy letezo teruletet a lakhelyen.' - worldedit: - Description: Beallitja a kijelolest az aktualis World Edit kijeloles szerint. - Info: - - 'Hasznalat /res select worldedit' - - 'Beallitja a kijelolest az aktualis World Edit kijeloles szerint.' - create: #creation command - Description: lakhely letrehozasa - Info: - - 'Hasznalat: /res create ' - remove: #remove command - Description: Eltavolitja a lakhelyeket. - Info: - - 'Hasznalat: /res remove ' - removeall: - Description: Eltavolitja az osszes jatekosok birtokolta lakhelyet. - Info: - - 'Hasznalat: /res removeall [tulaj]' - - 'Eltavolitja az osszes lakhelyet egy adott jatekosnak.' - - 'Szukseges /resadmin ha valaki meg hasznalja melletted.' - confirm: - - 'Hasznalat: /res confirm' - - 'Megerositi a lakhely eltavolitast.' - subzone: - Description: Letrehoz alosztalyokat a lakhelyen. - Info: - - 'Hasznalat: /res subzone [alosztaly neve (subzone)]' - - 'Ha a lakhely nev kimarad, akkor megprobalja ahasznalni a lakhelyet amin allsz.' - area: - Description: A fizikai teruletek kezelese a lakhelyekhez. - SubCommands: - list: - Description: Listazza a fizikai teruleteket a lakhelyen - Info: - - 'Hasznalat: /res area list [lakhely] ' - listall: - Description: Listazza a koordinatait es egyeb infoit a lakhelynek - Info: - - 'Hasznalat: /res area listall [lakhely] ' - add: - Description: Fizikai teruletet ad a lakhelyhez - Info: - - 'Hasznalat: /res area add [lakhely] [teruletID]' - - 'Eloszor ket pontot kell kivalasztanod.' - remove: - Description: A fizikai teruletet torli a lakhelyrol - Info: - - 'Hasznalat: /res area remove [lakhely] [teruletID]' - replace: - Description: Lecsereli a fizikai teruleteket a lakhelyen - Info: - - 'Hasznalat: /res area replace [lakhely] [teruletID]' - - 'Eloszor ket pontot kell kivalasztanod.' - - 'Ha a terulet cserelesnel a teruletek kulonboznek, akkor tobbet kell fizetni a nagyobb teruletert.' - info: - Description: Megjeleniti a lakhely infoit. - Info: - - 'Hasznalat: /res info ' - - 'Hagyd el hogy megjelenitse az infoit az adott lakhelynek.' - limits: - Description: Megjeleniti a hatarertekeket. - Info: - - 'Hasznalat: /res limits' - - 'Megjeleniti a hatarertekeit a lakhelyek letrehozasanak es kezelesenek.' - message: - Description: Kezeli a lakhely belepo / kilepo uzeneteit - Info: - - 'Hasznalat: /res message [enter/leave] [uzenet]' - - 'Beallitja a belepo es kilepo uzeneteit a lakhelynek.' - - 'Hasznalat: /res message remove [enter/leave]' - - 'Eltavolitja a belepo es kilepo uzenetet.' - lease: - Description: Kezeli a lakhely berbeadast - Info: - - 'Hasznalat: /res lease [renew/cost] [lakhely]' - - '/res lease cost ahhoz hogy megmutassa a lakhely berlse megujitasanak koltesgeit.' - - '/res lease renew megujitja a berlest, felteve ha van eleg penzed.' - SubCommands: - set: - Description: Beallitja a berles idejet (csak admin) - Info: - - 'Hasznalat: /resadmin lease set [lakhely] [#days/infinite]' - - 'Beallitja a berles idejet napra pontosan (days), vagy orokre (infinite).' - bank: - Description: Kezeli a lakhely penzt - Info: - - 'Hasznalat: /res bank [deposit/withdraw] [osszeg]' - - 'A lakhelyen kell allnod, deposit:elhelyez, withdraw:kivesz' - - 'es kell lennie +bank flagnek (engedely).' - tp: - Description: Teleport egy lakhelyhez - Info: - - 'Hasznalat: /res tp [lakhely]' - - 'Elteleportal teged egy lakhelyhez, kell egy +tp flag engedely vagy tulajnak kell lenned.' - - 'A csoportban amibe tartozol pedig engedely kell a teleportalashoz a szerver adminjatol.' - tpset: - Description: Beallitja a teleport helyet egy lakhelyen - Info: - - 'Hasznalat: /res tpset' - - 'Ez beallitja a teleport helyet a lakhelyen oda ahol epp allsz.' - - 'Egy lakhelyen kell allnod a parancs hasznalatahoz.' - - 'Tulajnak kell lenned vagy +admin flag engedely kell a lakhelyhez.' - set: - Description: Set general flags on a Residence - Info: - - 'Hasznalat: /res set [engedely] [true/false/remove]' - - 'Hogy lasd az engedelyeket, hasznald /res flags ?' - - 'Ezek az engedelyek ervenyesek minden jatekosra, akik nem rendelkeznek kiveteles engedelyekkel. (lasd /res pset ?)' - pset: - Description: Beallitani kiveteles engedelyeket egy jatekosnak a lakhelyen. - Info: - - 'Hasznalat: /res pset [jatekos] [engedely] [true/false/remove]' - - 'Hasznalat: /res pset [jatekos] removeall' - - 'Hogy lasd az engedelyek listajat, hasznald /res flags ?' - gset: - Description: Beallitani kiveteles engedelyeket egy csoportnakk a lakhelyen - Info: - - 'Hasznalat: /res gset [csoport] [engedely] [true/false/remove]' - - 'Hogy lasd az engedelyek listajat, hasznald /res flags ?' - lset: - Description: Valtoztatni a feketelista es a kivetellista beallitasait - Info: - - 'Hasznalat: /res lset [blacklist/ignorelist] [anyag]' - - 'Hasznalat: /res lset info' - - 'A feketelistazott anyagnak akadalyozva van, hogy elhelyezzek a lakhelyen.' - - 'A kivetellista hatasara az adott anyag nincs levedve a lakhely altal.' - flags: - Description: Engedelyek listaja - Info: - - 'Az engedely ertekek rendszerint, ha igazak(true) akkor engedelyezik, ha hamisak(false), akkor megakadalyozzak a tortenest.' - list: - Description: Lakhelyek listaja - Info: - - 'Hasznalat: /res list ' - - 'Listazza az osszes telket a jatekosnak (kiveve a rejtettek).' - - 'Ha a sajajaidat listazod, akkor mutatja a rejtetteket is.' - - 'Hogy listazza mindenki lakhelyet, hasznald /res listall.' - listhidden: - Description: Listazza a rejtett lakhelyeket (CSAK ADMIN) - Info: - - 'Hasznalat: /res listhidden ' - - 'Listazza a jatekos rejtett lakhelyeit.' - listall: - Description: Listaz minden lakhelyet - Info: - - 'Hasznalat: /res listall ' - - 'Listazza az osszes lakhelyet a szerveren. (kiveve a rejtetteket, ami nem a tied)' - listallhidden: - Description: Listaz minden rejtett lakhelyet (CSAK ADMIN) - Info: - - 'Hasznalat: /res listhidden ' - - 'Listazza az osszes rejtett lakhelyet a szerveren.' - sublist: - Description: Listazza a Lakhely alosztalyokat - Info: - - 'Hasznalat: /res sublist ' - - 'Listaz minden alosztalyt a lakhelyen.' - default: - Description: Visszaallitja a lakhely engedelyeit alapertekre. - Info: - - 'Hasznalat: /res default ' - - 'Visszaalllitja az engedelyeket a lakhelyen alapertekeikre. Tulajdonosnak vagy adminnak kell lenned a hasznalatahoz.' - rename: - Description: Lakhely atnevezese. - Info: - - 'Hasznalat: /res rename [RegiNev] [ujNev]' - - 'Tulajdonsonak vagy adminnak kell lenned a hasznalatahoz.' - - 'A nevnak szabadnak kell lennie, nem lehet mas lakhely neve.' - mirror: - Description: Engedelyek tukrozese - Info: - - 'Hasznalat: /res mirror [Eredeti lakhely] [Celpont lakhely]' - - 'Az engedely tukrozese egy lakhelyrol a masikra. Tulajdonosnak vagy adminnak kell lenned a hasznalatahoz.' - market: - Description: Venni, eladni, vagy berelni lakhelyet - Info: - - 'Hasznalat: /res market ? tovabbi informaciokert' - SubCommands: - info: - Description: Economy(gazdasag) informaciok a lakhelyrol - Info: - - 'Hasznalat: /res market info [lakhely]' - - 'Megjeleniti a lakhely informaciot, ha az elado vagy berelheto, es a koltsegeket.' - list: - Description: Listazza a berelheto es elado lakhelyeket. - Info: - - 'Hasznalat: /res market list' - sell: - Description: Eladni egy lakhelyet - Info: - - 'Hasznalat: /res sell [lakhely] [osszeg]' - - 'Eladova teszi a lakhelyet ennyi [osszeg] penzert.' - - 'Egy masik jatekos megtudja venni a lakhelyet: /res market buy' - buy: - Description: Venni egy lakhelyet - Info: - - 'Hasznalat: /res buy [lakhely]' - - 'Venni egy elado lakhelyet.' - unsell: - Description: A lakhely eladasanak megszuntetese - Info: - - 'Hasznalat: /res unsell [lakhely]' - rent: - Description: Berelni egy lakhelyet - Info: - - 'Hasznalat: /res market rent [lakhely] ' - - 'Lakhely berlese. Az autorenew igaz(true) vagy hamis(false) lehet. Ha igaz, akkor automatikusan ujra lesz berelve a lejarat utan a lakhely, ha a tulaj engedelyezi.' - rentable: - Description: Berelhetove tenni a lakhelyet. - Info: - - 'Hasznalat: /res market rentable [lakhely] [osszeg] [nap] ' - - 'Berelhetove tesz egy lakhelyet [osszeg] penzert minden [nap] napszamban. Ha igaz(true), a lakhely automatikusan ujraberelheto lesz a jelenlegi berles lejarta utan.' - release: - Description: Eltavolitja a lakhelyrol a berlest, vagy a berelhetoseget. - Info: - - 'Hasznalat: /res market release [lakhely]' - - 'Ha te vagy a berlo, akkor ez a parancs berelhetove teszi a hazat szamodra.' - - 'Ha te vagy a tulaj, akkor ez a parancs eltavolitja a berelhetoseget.' - current: - Description: Megjeleniti a lakhelyet amin jelenleg allsz. - Info: - - 'Hasznalat: /res current' - lists: - Description: Elore megadott jogosultsag listak - Info: - - 'Elore megadott jogosultsag listak, amiket alkalmazni lehet egy lakhelyre.' - SubCommands: - add: - Description: Letrehoz egy listat - Info: - - 'Hasznalat: /res lists add ' - remove: - Description: Eltavolit egy listat - Info: - - 'Hasznalat: /res lists remove ' - apply: - Description: Alkalmaz egy listat a lakhelyre - Info: - - 'Hasznalat: /res lists apply ' - set: - Description: Beallit egy engedelyt - Info: - - 'Hasznalat: /res lists set ' - pset: - Description: Beallit egy jatekos engedelyt - Info: - - 'Hasznalat: /res lists pset ' - gset: - Description: Beallit egy csoport engedelyt - Info: - - 'Hasznalat: /res lists gset ' - view: - Description: Megmutatja a listat. - Info: - - 'Hasznalat: /res lists view ' - server: - Description: Szervertelekke teszi a teruletet (csak admin). - Info: - - 'Hasznalat: /resadmin server [lakhely]' - - 'Szervertelekke teszi a teruletet.' - setowner: - Description: Change owner of a residence (csak admin). - Info: - - 'Hasznalat: /resadmin setowner [lakhely] [jatekos]' - resreload: - Description: ujratolti a lakhely plugint (csak admin). - Info: - - 'Hasznalat: /resreload' - resload: - Description: Load residence save file (KOCKaZATOS, csak admin). - Info: - - 'Hasznalat: /resload' - - 'KOCKaZATOS parancs, eloszor nem menti a lakhelyeket.' - - 'Loads the residence save file after you have made changes.' - version: - Description: Megjeleniti a lakhely plugin verziojat - Info: - - 'Hasznalat: /res version' diff --git a/src/Language/Lithuanian.yml b/src/Language/Lithuanian.yml deleted file mode 100644 index fa1bbcfc6..000000000 --- a/src/Language/Lithuanian.yml +++ /dev/null @@ -1,586 +0,0 @@ -# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. -Version: 21 -FieldsVersion: 22 -Language: - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - #Version 1 Fields - InvalidResidence: Bloga Rezidencija... - InvalidSubzone: Bloga Subzona... - InvalidDirection: Bloga kriptis... - InvalidChannel: Blogas kanalas... - InvalidAmount: Blogas kiekis... - InvalidCost: Bloga kaina... - InvalidDays: Blogas dienu kiekis... - InvalidMaterial: Bloga medziaga... - InvalidBoolean: Bloga reiksme, turi buti true(t) arba false(f) - InvalidArea: Bloga teritorija... - InvalidGroup: Bloga grupe... - InvalidMessageType: Zinutes tipas turi buti enter arba remove. - InvalidList: Blogas sarasas... - InvalidFlag: Blogas Flag... - InvalidFlagState: Bloga flag reiksme, turi buti true(t), false(f), arba remove(r) - AreaExists: Toks ploto vardas jau egzistuoja. - AreaCreate: 'Sukurta rezidencija, ID %1' - AreaDiffWorld: Plotas yra kitame pasaulyje nuo rezidencijos. - AreaCollision: 'Pazymetas plotas kertasi su kita rezidencija %1' - AreaSubzoneCollision: 'Pazymetas plotas kertasi su subzona %1' - AreaNonExist: Toks plotas neegzistuoja. - AreaInvalidName: Blogas ploto pavadinimas... - AreaRename: 'Pervadinti plota is %1 i %2' - AreaRemove: 'Panaikintas plotas %1...' - AreaRemoveLast: Negalima pasalinti paskutinio ploto rezidencijoje. - AreaNotWithinParent: Plotas nera tevinio ploto viduje. - AreaUpdate: Plotas atnaujintas... - AreaMaxPhysical: Jus pasiekete maksimalu galimu plutu skaiciu savo rezidencijai. - AreaSizeLimit: Ploto dydis nera jusu galimybiu ribose. - AreaHighLimit: 'Jus negalite apsaugoti sitaip aukstai, jusu riba yra %1' - AreaLowLimit: 'Jus negalite apsaugoti sitaip giliai, jusu riba yra %1' - NotInResidence: Tu nesi savo rezidencijoje. - InResidence: 'Tu stovi rezidencijoje kurios pavadinimas %1' - ResidenceOwnerChange: 'Rezidencijos %1 savininkas pakeistas i %2' - NonAdmin: Tu nesi rezidencijos administratorius. - AdminOnly: Tik administratorei turi teise i sita komanda. - ChatDisabled: Rezidencijos pokalbiu kanalas isjungtas... - SubzoneRename: 'Pervadinta subzona is %1 i %2' - SubzoneRemove: 'Subzona %1 panaikinta.' - SubzoneCreate: 'Sukurta subzona %1' - SubzoneCreateFail: 'Neimanoma sukurti subzonos %1' - SubzoneExists: 'Subzona %1 jau egzistuoa.' - SubzoneCollide: 'Subzona kertasi su kita sub zona %1' - SubzoneMaxDepth: Pasiekete maksimalu subzonu gyli. - SubzoneSelectInside: Abudu pazimeti taskai turi buti rezidencijos ribose. - SelectPoints: Visu pirma pazimek du taskus pries naudodamas sita komanda! - SelectionSuccess: Zymejimas sekmingas! - SelectionFail: Neteisinga zymejimo komanda... - SelectionBedrock: Zymejimas istemptas iki zemiausio jums leistino tasko. - SelectionSky: Zymejimas istemptas iki auksciausio jums leistino tasko. - SelectionArea: 'Pazimetas plotas %1 rezidencijos %2' - SelectDiabled: Jus neturite prieigos prie pasirinkimu komandu. - NoPermission: Jus neturite tam teises. - OwnerNoPermission: Savininkas neturi tam teises. - ParentNoPermission: Jus neturite teises pakeitimams Parent zonai. - MessageChange: Zinute nustatyta... - FlagSet: Flagas nustatytas... - FlagCheckTrue: 'Flagas %1 priskirtas zaidejui %2 rezidencijai %3, reiksme = %4' - FlagCheckFalse: 'Flagas %1 nepriskirtas zaidejui %2 rezidencijai.' - FlagsCleared: Flagai istrinti. - FlagsDefault: Flagai nustatyti i pradine busena. - Usage: Komandos panaudojimas - InvalidHelp: Blogas pagalbos puslapis... - SubCommands: Sub komandos - InvalidList: Nezinomas saraso tipas, turi buti juodasis sarasas arba ignoravimo sarasas. - MaterialGet: 'Medziagos pavadinimas kadangi ID %1 yra %2' - MarketDisabled: Ekonomika isjungta! - MarketList: parduotuviu sarasas - SelectionTool: Zymejimo irankis - InfoTool: Informacinis irankis - NoBankAccess: Neturi priejimo prie banko. - NotEnoughMoney: Neturi uztektinai pinigu. - BankNoMoney: Nera uztektinai pinigu banke. - BankDeposit: 'Jus pervedete %1 i jusu rezidencijos banka.' - BankWithdraw: 'Jus istraukete %1 is jusu rezidencijos banko.' - MoneyCharged: 'Nuskaiciuota %1 is jusu %2 saskaitos.' - MoneyCredit: 'Kredituotas %1 i jusu %2 saskaita.' - RentDisabled: Nuomuos sistema isjungta. - RentReleaseInvalid: 'Rezidencija %1 nera nuomuojama arba isnuomuota.' - RentSellFail: Negali parduoti rezidencijos jeigu ji yra nuomuojama. - SellRentFail: Negali nuomuoti rezidencijos jeigu ji yra parduodama. - OwnerBuyFail: Negali pirkti savo paties zemes! - OwnerRentFail: Negali nuomuotis savo paties zemes! - AlreadySellFail: Rezidencija jau yra parduodama! - ResidenceBought: 'Jus nusipirkote rezidencija %1' - ResidenceBuy: 'Rezidencija %1 nupirko rezidencija %2 is jusu.' - ResidenceBuyTooBig: Si rezidencija turi didesnius plotus, nei jums leistas maximalus. - ResidenceNotForSale: Rezidencija neparduodama. - ResidenceForSale: 'Rezidencija %1 parduodama uz %2' - ResidenceStopSelling: Rezidencija nebeparduodama. - ResidenceTooMany: Tu jau turi maksimalu rezidenciju skaiciu kuris yra tau leistinas. - ResidenceMaxRent: Tu jau nuomuojiesi maksimalu rezidenciju skaiciu kuris yra tau leistinas. - ResidenceAlreadyRent: Rezidencija jau yra skirta nuomuoti... - ResidenceNotForRent: Rezidencija nenuomuojama... - ResidenceNotRented: Rezidencija neisnuomuota. - ResidenceUnrent: 'Rezidencija %1 daugiau nebeisnuomuota.' - ResidenceRemoveRentable: 'Rezidencija %1 daugiau nebenuomuojama.' - ResidenceForRentSuccess: 'Rezidencija %1 nuos iol nuomuojama uz %2 kas %3 dienas.' - ResidenceRentSuccess: 'Jus issinuomavote rezidencija %1 %2 dienoms.' - ResidenceAlreadyRented: 'Rezidencija %1 siuo metu isnuomuota %2' - ResidenceAlreadyExists: 'Rezidencija tokiu vardu %1 jau egzistuoja.' - ResidenceCreate: 'Jus sukurete rezidencija %1!' - ResidenceRename: 'Pervadinote rezidencija is %1 i %2' - ResidenceRemove: 'Rezidencija %1 panaikinta...' - RentDisabled: Nuoma isjungta... - RentDisableRenew: 'Rezidencija %1 automatiksai nebeissinuomuos pasibaigus nuomos laikui.' - RentEnableRenew: 'Rezidencija %1 automatiksai issinuomuos pasibaigus nuomos laikui.' - RentableDisableRenew: '%1 nebeprates nuomos laiko jam pasibaigus.' - RentableEnableRenew: '%1 automatiskai prates nuomos laika jam pasibaigus.' - LandForSale: Parduodama zeme - SellAmount: Pardavimu kiekis - LeaseExpire: Nuomos sutarties pasibaigimo laikas - RentExpire: Nuomos pasibaigimo laikas - RentableAutoRenew: Isnuomojamas automatinis atnaujinimas - RentAutoRenew: Nuoma automatinio atnaujinimo - RentableLand: Nuomuojama zeme - ListMaterialAdd: '%1 pridetas prie rezidencijos %2' - ListMaterialRemove: '%1 iskeldintas is %2' - ItemBlacklisted: Sitas blokas cia nera leidziamas. - RentedModifyDeny: Negali keisti isnuomuotos rezidencijos. - WorldPVPDisabled: Pasulinis PVP isjungtas. - NoPVPZone: Cia tu negali kautis. - FlagDeny: 'Tu neturi %1 privilegiju.' - FlagSetDeny: 'Savininkas neturi priejimo prie Flago %1' - SelectPoint: 'Pasirinktas %1 pazimejimo taskas' - ResidenceChat: 'Perjungti rezidencijos poklabiai %1' - ResidenceMoveDeny: 'Tu neturi judejimo teisiu sitoje rezidencijoje %1' - TeleportDeny: Tu neturi teleporto teisiu i sita rezidencija. - TeleportSuccess: 'Nuteleportuotas!' - TeleportNear: Nuteleportuotas prie rezidencijos. - TeleportNoFlag: Tu neturi teleporto teisiu i sita rezidencija. - SetTeleportLocation: Nustatyta teleporto vieta... - HelpPageHeader: 'Pagalbos puslapiai - %1 - puslapis <%2 is %3>' - ListExists: Sarasas jau egzistuoja... - ListRemoved: Sarasas pasalintas... - ListCreate: 'Sukurtas sarasas %1' - LeaseRenew: 'Nuomos sutartis galioja iki %1' - LeaseRenewMax: Nuomos sutartis atnaujinta i leistina maksimalu - LeaseNotExpire: Nera tokios nuomos sutarties, arba tokia nuomos sutartis nesibaigia. - LeaseRenewalCost: 'Atnaujinimo kaina plotui %1 yra %2' - LeaseInfinite: Nuomos sutarties laikas nustatytas neribotam laikui... - PermissionsApply: Leidimai pritaikyti rezidencijai. - PhysicalAreas: Fiziniai Plotai - CurrentArea: Einamieji Plotai - LeaseExpire: Nuomos pabaiga - NotOnline: Zaidejas turi buti prisijunges. - ResidenceGiveLimits: Negalima duoti rezidencijos pazymetam zaidejui, nes ji yra uz pazymeto zaidejo ribu. - ResidenceGive: 'Jus atiduodate rezidencija %1 zaidejui %2' - ResidenceRecieve: 'Jus gavote rezidencija %1 is zaidejo %2' - #Version 4 New Fields - #ResidenceListAll: 'Residences - ' - removed, use GenericPage now - ResidenceListAllEmpty: Jokios rezidencijos neegzistuoja serveryje... - InvalidPage: Klaidingas puslapis... - NextPage: Kitas puslapis - #Version 10 New Fields - RemovePlayersResidences: 'Panaikintos visos rezidencijos priklausiancios zaidejui %1' - GenericPage: 'Puslapis %1 is %2' - #Version 11 New Fields - ResidenceRentedBy: 'Issinuomuota %1' - #Version 14 New Fields - InvalidCharacters: Aptikti negaliojantys zenklai... - InvalidNameCharacters: Varda sudaro neleistini zenklai... - #Version 15 New Fields - DeleteConfirm: 'Ar tikrai norite panaikinti rezidencija %1, naudok /res confirm kad patvirtinti.' - #Version 18 New Fields - SelectTooHigh: Ispejimas, pasirinkimas nuejo virs zemelapio virsunes, ribojama. - SelectTooLow: Ispejimas, pasirinkimas nuejo zemiau zemelapio pagrindo, ribojama. - WorldEditNotFound: WorldEdit nebuvo aptiktas. - #Version 19 New Fields - NoResHere: Nera cia rezidencijos. - DeleteSubzoneConfirm: 'Ar tikrai norite istrinti subzona %1, naudok /res confirm kad patvirtinti.' - #Version 20 New Fields - SubzoneOwnerChange: 'Subzonos %1 savininkas pakeistas i %2' - CoordsTop: 'X:%1 Y:%2 Z:%3' - CoordsBottom: 'X:%1 Y:%2 Z:%3' - #Version 21 New Fields - AdminToggle: 'Automatinis rezidencijos admin jungiklis pasuktas %1' - #Version 22 New Fields - NoSpawn: 'Jus neturite leidimo judeti jusu atsiradimo taske. Perkelimas' - CompassTargetReset: 'Jusu kompasas buvo perstatytas' - CompassTargetSet: 'Jusu kompasas dabar nurodo i %1' - #The below lines are mostly a word bank for various uses. - #Version 1 Fields - Description: Aprasymas - Land: Zeme - Cost: Kaina - Selection: Pazymeta - Total: Isviso - Size: dydis - Expanding: Isplesta - Shifting: Perkelta - Up: Aukstyn - Down: Zemyn - Error: Klaida - Flags: Veleveles - Your: Tavo - Group: Grupe - Others: Kiti - Primary: Pirminis - Secondary: Antrinis - Selection: Pazymeta - Moved: Perkelta - Status: Statusas - Available: Galimas - On: Ijungtas - Off: Isjungtas - Name: Vardas - Lists: Sarasas - Residences: Rezidencijos - Residence: Rezidencija - Count: Kiekis - Owner: Savininkas - #Version 4 Fields - World: Pasaulis - #Version 12 Fields - Subzones: Subzona - #Version 20 Fields - CoordsT: Virsutines koordinates - CoordsB: Apatines koordinates - #Version 22 Fields - TurnOn: 'ijungti' - TurnOff: 'isjungti' - -# This is the help / usage messages for each command. -# It follows this format: -# -# Description: -# Info: -# SubCommands: -# - these follow the same format, and each sub command can have its own subcommands -# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that -# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). -# Add a page number after the ? mark to see that page. - -HelpLinesPerPage: 7 -CommandHelp: #this is just a holder node, that holds the entire help - Description: Ieina pagalba del rezidenciju - SubCommands: #this is the actual beginning of all commands - res: #main residence command - Description: Pagrindines rezidencijos komandos - Info: - - 'Paziurek pamokas: http://ltcraft.lt/?page_id=311' - - 'Naudok /[komanda] ? kad perziureti issamiau.' - - 'Naudok /res flags kad perziureti apie galimus leidymus.' - SubCommands: - select: #selection commands - Description: Zymejimo komandos - Info: - - 'Sia komanda pasirenkamas plotas naudojimui su rezidencija.' - - '/res select [x] [y] [z] - parenka bloku spinduli, jums bunant viduje.' - SubCommands: - coords: - Description: Rodomos pazymetos koordinates - Info: - - 'Naudojimas: /res select coords' - size: - Description: Rodomas pazymetas dydis - Info: - - 'Naudojimas: /res select size' - cost: - Description: Rodoma pasirinkimo kaina - Info: - - 'Naudojimas: /res select cost' - vert: - Description: Isplesti pasirinkima vertikaliai - Info: - - 'Naudojimas: /res select vert' - - 'Isples pasirinkima taip aukstai ir taip zemai kaip leistina.' - sky: - Description: Isplesti pasirinkima i dangu - Info: - - 'Naudojimas: /res select sky' - - 'Isples tiek aukstai kiek jums yra leista.' - bedrock: - Description: Isplesti pasirinkima iki Bedrock - Info: - - 'Naudojimas: /res select bedrock' - - 'Isples tiek zemai kiek jums yra leista.' - expand: - Description: Isplesti pasirinkima kryptimi. - Info: - - 'Naudojimas: /res select expand ' - - 'Isplecia i ta krypti i kuria ziurite.' - shift: - Description: Paslinkti pasirinkima kryptimi - Info: - - 'Naudojimas: /res select shift ' - - 'Pastumia jusu pasirinkima i ta krypti i kuria ziurite.' - chunk: - Description: Pazymi dali kurioje esate siuo metu. - Info: - - 'Naudojimas: /res select chunk' - - 'Pazymi dali kurioje stovite siuo metu.' - residence: - Description: Isrinkite egzistuojanti plota rezidencijoje. - Info: - - 'Naudojimas /res select ' - - 'Isrenka egzistuojanti plota rezidencijoje.' - worldedit: - Description: nustatyti esama WorldEdit pasirinkima. - Info: - - 'Naudojimas /res select worldedit' - - 'nustato pasirinkta arena naudojant esama WorldEdit pasirinkima.' - create: #Sukurymo komandos - Description: Sukurti rezidencija - Info: - - 'Naudojimas: /res create ' - remove: #Panaikinimo komandos - Description: Panaikinti rezidencija. - Info: - - 'Naudojimas: /res remove ' - removeall: - Description: Panaikinti visas rezidencijas priklausiancias zaidejui. - Info: - - 'Naudojimas: /res removeall [savininkas]' - - 'Panaikina visas rezidencijas priklausiancias zaidejui.' - - 'reikalingas /resadmin jei tu tai naudosi ant kazkieno ir saves.' - confirm: - - 'Naudojimas: /res confirm' - - 'Patvirtinti rezidencijos panaikinima.' - subzone: - Description: Sukurti subzonas rezidencijoje. - Info: - - 'Naudojimas: /res subzone [subzonos pavadinimas]' - - 'Jeigu rezidencijos vardas istrinamas, bus bandyta naudoti rezidencija kurioje jus stovite.' - area: - Description: valdyti fizines arenas rezidencijoje. - SubCommands: - list: - Description: sarasas fiziniu arenu rezidencijoje. - Info: - - 'Naudojimas: /res area list [residence] ' - listall: - Description: sarasas koordinaciu ir kita informacija apie arenas. - Info: - - 'Naudojimas: /res area listall [residence] ' - add: - Description: prideti fizines arenas rezidencijoje - Info: - - 'Naudojimas: /res area add [residence] [areaID]' - - 'Jus pirma turite pazymeti du taskus rezidencijoje.' - remove: - Description: Pasalinti fizines arenas is rezidencijos - Info: - - 'Naudojimas: /res area remove [residence] [areaID]' - replace: - Description: pakeisti fizines arenas rezidencijoje - Info: - - 'Naudojimas: /res area replace [residence] [areaID]' - - 'Just privalote pirma pazymeti du taskus rezidencijoje.' - - 'PakeiÄiant arena reikÄ—s sumokÄ—ti dydžio skirtumÄ…, jei naujas plotas yra didesnis.' - info: - Description: Parodyti informacija apie rezidencija. - Info: - - 'Naudojimas: /res info ' - - 'nustojus rodyti informacija rezidencijai kurioje esate.' - limits: - Description: Parodytu jusu limitus. - Info: - - 'Naudojimas: /res limits' - - 'Parodo jusus galimus limitus kuriant ir monipuliuojant rezidencija.' - message: - Description: Valdyti rezidencijos ieinancius / iseinacius pranesimus - Info: - - 'Naudojimas: /res message [enter/leave] [message]' - - 'nustatyti isvykimo ar atvykimo zinute.' - - 'Naudojimas: /res message remove [enter/leave]' - - 'pasalina atvykimo ar isvykimo zinute.' - lease: - Description: Valdyti rezidencijos nuoma - Info: - - 'Naudojimas: /res lease [renew/cost] [residence]' - - '/res lease parodo atsinaujinancia rezidencijos nuomos kaina.' - - '/res lease renew parodo ar turi uztenkamai pinigu issinuomoti rezidencija.' - SubCommands: - set: - Description: Nustatyti nuomos laika (admin only) - Info: - - 'Naudojimas: /resadmin lease set [residence] [#days/infinite]' - - 'nustato specialu nuomos laika dienomis arba neribotai.' - bank: - Description: Valdyti rezidencijos pinigus - Info: - - 'Naudojimas: /res bank [deposit/withdraw] [amount]' - - 'jus turite stoveti rezidencijoje' - - 'jus turite tureti +bank velevele rezidencijoje.' - tp: - Description: Teleportuotis i rezidencija - Info: - - 'Naudojimas: /res tp [residence]' - - 'Telepotuoja jus i rezidencija, just privalote tureti +tp velevele arba buti rezidencijos seimininkas.' - - 'jusu privilegiju grupe taipat turi tureti leidima teleportuotis i rezidencijas.' - tpset: - Description: Nustatyti teleportacijos vieta rezidencijoje - Info: - - 'Naudojimas: /res tpset' - - 'nustatyts teleportacijos vieta i rezidencija ten kur jus stovite.' - - 'just turite stoveti rezidencijoje naudodami sia komanda.' - - 'Jus turite buti rezidencijos savininkas arba tureti +admin velevele.' - set: - Description: Nustatyti bendras veliavas rezidencijoje - Info: - - 'Naudojimas: /res set [flag] [true/false/remove]' - - 'Noredami paziureti veleveliu sarasa rasykite /res flags ?' - - 'Å ios vÄ—liavos taikomos visiems žaidÄ—jams, kurie neturi vÄ—liavu konkreÄiai pritaikytu jiems. ( /res set ?)' - pset: - Description: Nustatyti veliavas specifiniam zaidejui rezidencijoje. - Info: - - 'Naudojimas: /res pset [player] [flag] [true/false/remove]' - - 'Naudojimas: /res pset [player] removeall' - - 'perziureti veleveliu sarasa naudokite /res flags ?' - gset: - Description: Nustatyti veliavas specifinei grupei rezidencijoje. - Info: - - 'Naudojimas: /res gset [group] [flag] [true/false/remove]' - - 'perziureti veleveliu sarasa naudokite /res flags ?' - lset: - Description: pakeisti juodojo saraso ir ignoriamuju saraso nustatymus - Info: - - 'Naudojimas: /res lset [blacklist/ignorelist] [material]' - - 'Naudojimas: /res lset info' - - 'medziagos itraukimas i juodaji sarasa neleidzia buti padetas rezidencijoje.' - - 'ignoriamuju sarasas padaro specifine medziaga neapsaugota rezidencijos.' - flags: - Description: Veliavu sarasas - Info: - - 'flagu reiksmes, pagrinde naudoti true kai nori leisti ir false kai nori uzdrausti naudoti komanda ar veiksma.' - list: - Description: Rezidenciju sarasas - Info: - - 'Naudojimas: /res list ' - - 'Lists all the residences a player owns (except hidden ones).' - - 'Jeigu sarasuose ziurimos savo rezidencijos, matos ir pasleptos.' - - 'Norint pamatyti visu serverio zaideju rezidencijas, naudokite /res listall.' - listhidden: - Description: Pamatyti pasleptas rezidencijas (TIK ADMINISTRATORIAMS) - Info: - - 'Naudojimas: /res listhidden ' - - 'Parodo sarasa pasleptu zaideju rezidenciju.' - listall: - Description: List All Residences - Info: - - 'Naudojimas: /res listall ' - - 'parodo sarasa viso serverio zaideju rezidenciju. (isskyrus pasleptu)' - listallhidden: - Description: Pamatyti pasleptas rezidencijas (TIK ADMINISTRATORIAMS) - Info: - - 'Naudojimas: /res listhidden ' - - 'Parodo viso serverio vpasleptu rezidenciju sarasa.' - sublist: - Description: Sarasas rezidenciju subzonu - Info: - - 'Naudojimas: /res sublist ' - - 'subzonu sarasas kartu su rezidencijomis.' - default: - Description: Restartuoti rezidencija iki pradiniu nustatymu. - Info: - - 'Naudojimas: /res default ' - - '. Restartuoti rezidencija iki pradiniu nustatymu.' - rename: - Description: Pervadina rezidencija. - Info: - - 'Naudojimas: /res rename [OldName] [NewName]' - - 'Tu turi buti savininkas arba adminas kad tai galetum padaryti.' - - 'Vardas turi buti laisvas.' - mirror: - Description: Veidrodines veleveles - Info: - - 'Naudojimas: /res mirror [Source Residence] [Target Residence]' - - 'Suvienodink dvieju rezidenciju flagus. Kad tai daryti turite buti abie ju rezidenciju adminas' - market: - Description: Buy, Sell, or Rent Residences - Info: - - 'Naudojimas: /res market ? for more info' - SubCommands: - info: - Description: Gauk ekonomine informacija apie rezidencija - Info: - - 'Naudojimas: /res market info [residence]' - - 'Parodo ar rezidencija nomuojama,parduodama. parodo jos kaina.' - list: - Description: sarasas isnomuojamu rezidenciju. - Info: - - 'Naudojimas: /res market list' - sell: - Description: Rezidencijos pardavimas - Info: - - 'Naudojimas: /res market sell [pavadinimas] [suma]' - - 'pradeda pardavineti rezidencija [suma] pinigu.' - - 'kitas zaidejas gali pirkti rezidencija su komanda /res market buy' - buy: - Description: rezidencijos pirkimas - Info: - - 'Naudojimas: /res market buy [residence]' - - 'perkama rezidencija jeigu ji parduodama.' - unsell: - Description: Sustabdyt rezidencijos pardavinejima. - Info: - - 'Naudojimas: /res market unsell [residence]' - rent: - Description: Isnuomoti rezidencija. - Info: - - 'Naudojimas: /res market rent [residence] ' - - 'Isnuomoja rezidencija. Automatini atnaujinima galima ijungti ir isjungti true arba false . Jeigu True nuoma automatiskai prasites' - rentable: - Description: Padaryti rezidencija nuomojama. - Info: - - 'Naudojimas: /res market rentable [residence] [cost] [days] ' - - 'padaro rezidencija nomuojama uz [cost] pinigu uz [days] dienu. jai nustatytas true, rezidencija automatiskai prasites.' - release: - Description: pasalinti rezidencija is nuomojamuju. - Info: - - 'Naudojimas: /res market release [residence]' - - 'jeigu esate nuomininkas, sis namas nebepriklausys jums .' - - 'jeigu esate seimininkas, si komanda nurtrauks jusu rezidencijos nuoma.' - current: - Description: Parodo rezidencija kurioje esate. - Info: - - 'Naudojimas: /res current' - lists: - Description: Isanksto nustatytu leidimu sarasas - Info: - - 'Isanksto nustatytu leidimu sarasas kuri galima pritaikyti rezidencijai.' - SubCommands: - add: - Description: Prideti sarasa - Info: - - 'Naudojimas: /res lists add ' - remove: - Description: Pasalinti sarasa - Info: - - 'Naudojimas: /res lists remove ' - apply: - Description: Taikyti sarasa rezidencijai - Info: - - 'Naudojimas: /res lists apply ' - set: - Description: Nustatyti veliava - Info: - - 'Naudojimas: /res lists set ' - pset: - Description: Nustatyti zaidejo veliava - Info: - - 'Naudojimas: /res lists pset ' - gset: - Description: Nustatyti grupes veliava - Info: - - 'Naudojimas: /res lists gset ' - view: - Description: Perziureti sarasa. - Info: - - 'Naudojimas: /res lists view ' - server: - Description: Nustatyti zemes savininka (tik administratoriam). - Info: - - 'Naudojimas: /resadmin server [residence]' - - 'padaryti rezidencija uzimta.' - setowner: - Description: pakeisti rezidencijos seimininka (tik administratoriam). - Info: - - 'Naudojimas: /resadmin setowner [residence] [player]' - resreload: - Description: perkrauti rezidencija (tik administratoriam). - Info: - - 'Naudojimas: /resreload' - resload: - Description: uzkrauti rezidencijos saugojimo faila (nesaugu, tik administratoriam). - Info: - - 'Naudojimas: /resload' - - 'Nesaugi komanda, neapsaugoti rezidencija pirma.' - - 'uzkrauna rezidencijos issaugojimo faila ir restartuoja rezidencija.' - version: - Description: parodyti rezidencijos versija - Info: - - 'Naudojimas: /res version' diff --git a/src/Language/Polish.yml b/src/Language/Polish.yml deleted file mode 100644 index 6b02f8f93..000000000 --- a/src/Language/Polish.yml +++ /dev/null @@ -1,245 +0,0 @@ -# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. -Version: 21 -FieldsVersion: 22 -Language: - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - #Version 1 Fields - InvalidResidence: NieprawidÅ‚owa Residence... - InvalidSubzone: NieprawidÅ‚owa Subzone... - InvalidDirection: NieprawidÅ‚owa Direction... - InvalidChannel: NieprawidÅ‚owa Channel... - InvalidAmount: NieprawidÅ‚owa Amount... - InvalidCost: NieprawidÅ‚owy koszt... - InvalidDays: NieprawidÅ‚owa iloÅ›c dni... - InvalidMaterial: NieprawidÅ‚owa MateriaÅ‚... - InvalidBoolean: NieprawidÅ‚owa wartość, musi być true(t) albo false(f) - InvalidArea: NieprawidÅ‚owy Obszar... - InvalidGroup: NieprawidÅ‚owa Groupa... - InvalidMessageType: Dany Typ wiadomoÅ›ci należy wpisać lub usunąć. - InvalidList: NieprawidÅ‚owa Lista... - InvalidFlag: NieprawidÅ‚owa Flaga... - InvalidFlagState: NieprawidÅ‚owa flaga paÅ„stwa, musi być true(t), false(f), or remove(r) - AreaExists: Nazwa obszaru już istnieje. - AreaCreate: 'Residence obszar zostaÅ‚ stworzony, ID %1' - AreaDiffWorld: Obszar znajduje siÄ™ w innym Å›wiecie niż residence. - AreaCollision: 'Obszar koliduje z innom residence %1' - AreaSubzoneCollision: 'Obszar koliduje z innÄ… podstrefÄ… %1' - AreaNonExist: Taki obszar nie istnieje!. - AreaInvalidName: NieprawidÅ‚owa nazwa obszaru.. - AreaRename: 'Zmieniono nazwÄ™ obszaru z %1 na %2' - AreaRemove: 'usunieto obszar %1...' - AreaRemoveLast: Nie można usunąć obszaru obszaru w residence. - AreaNotWithinParent: Obszar nie znajduje siÄ™ w obrembie głównego obszaru. - AreaUpdate: Obszar zostaÅ‚ zaktualizowany... - AreaMaxPhysical: OsiÄ…gnieto maksymalnÄ… liczbe obszarów w twoim residenci. - AreaSizeLimit: Wielkosc obszaru jest nie zgodna z limitem. - AreaHighLimit: 'Nie można chronić obszaru który jest tak wysoko, twój limit to %1' - AreaLowLimit: 'Nie można chronić obszaru który jest tak nisko, twój limit to %1' - NotInResidence: Nie jesteÅ› w Rezydencji. - InResidence: 'Stoisz w Rezydencji %1' - ResidenceOwnerChange: 'Rezydencja %1 zmieniÅ‚a wÅ‚aÅ›ciciela na %2' - NonAdmin: Nie jesteÅ› administratorem Residence. - AdminOnly: Musisz być administratorem aby używać tÄ… komende. - ChatDisabled: Residence Chat zostaÅ‚ wyÅ‚Ä…czony... - SubzoneRename: 'Zmieniono nazwe podstrefy z %1 na %2' - SubzoneRemove: 'Podstrefa %1 zostaÅ‚a usunieta.' - SubzoneCreate: 'Utworzono Podstrefe %1' - SubzoneCreateFail: 'Nie można utworzyć podstrefy %1' - SubzoneExists: 'Podstrefa %1 już istnieje.' - SubzoneCollide: 'podstrefa koliduje z podstrefÄ… %1' - SubzoneMaxDepth: OsiÄ…gniÄ™to maksymalnÄ… dopuszczalnÄ… gÅ‚Ä™bokość podstrefy. - SubzoneSelectInside: Oba punkty wyboru muszÄ… być wewnÄ…trz rezydencji. - SelectPoints: Wybierz dwa punkty a nastepnie użyj komendy! - SelectionSuccess: PrawidÅ‚ow zaznaczono! - SelectionFail: NieprawidÅ‚owy wybór komendy... - SelectionBedrock: Wybierz rozszerzenie do najgÅ‚Ä™bszych dopuszczalnych granic. - SelectionSky: Wybór rozszerzony do swojej najwyższej dozwolonej granicy. - SelectionArea: 'Wybrano obszar %1 w rezydencji %2' - SelectDiabled: Nie masz dostÄ™pu do wybrania tej komendy. - NoPermission: You dont have permission for this. - OwnerNoPermission: The owner does not have permission for this. - ParentNoPermission: Nie masz uprawnieÅ„ do wprowadzania zmian w strefie nadrzÄ™dnej. - MessageChange: Ustwaiono wiadomość... - FlagSet: Ustawiono flage... - FlagCheckTrue: 'Flaga %1 aplikuj do gracza %2 w rezydencji %3, wielkosc = %4' - FlagCheckFalse: 'Flaga %1 nie zostaÅ‚a aplikowana do gracza %2 w rezydencji.' - FlagsCleared: Flagi zostaÅ‚y wyczyszczone. - FlagsDefault: Flagi zostaÅ‚y ustawione na domyÅ›lne. - Usage: Uzycie komendy - InvalidHelp: ieprawidÅ‚owa strona pomocy... - SubCommands: Pod komenda - InvalidList: Nieznany typ listy, musi być z blacklist albo ignorelist. - MaterialGet: 'Nazwa materiaÅ‚u o ID %1 jest %2' - MarketDisabled: Gospodarka zostaÅ‚a wyÅ‚Ä…czona! - MarketList: Lista marketów - SelectionTool: Wybierz narzÄ™dzie - InfoTool: Informacje o narzÄ™dziach - NoBankAccess: You dont have bank access. - NotEnoughMoney: You dont have enough money. - BankNoMoney: Za maÅ‚o pieniÄ™dzy w banku. - BankDeposit: 'WpÅ‚acasz %1 do banu na rezydencje.' - BankWithdraw: 'WypÅ‚acasz z banku %1 na pobyt w rezydencji.' - MoneyCharged: 'WypÅ‚acono %1 do twojego %2 konta.' - MoneyCredit: 'Zapozyczono %1 do twoje %2 konta.' - RentDisabled: System wynajmu zostaÅ‚ wyÅ‚Ä…czony. - RentReleaseInvalid: 'Rezydencja % 1 jest wynajmowana lub do wynajÄ™cia.' - RentSellFail: Nie można sprzedać Rezydencji, jeÅ›li jest do wynajÄ™cia. - SellRentFail: Nie można wynająć miejsca zamieszkania, jeżeli jest na sprzedaż. - OwnerBuyFail: Nie można kupić wÅ‚asnego terenu! - OwnerRentFail: Nie można wynająć wÅ‚asnego terenu! - AlreadySellFail: Rezydencja jest gotowa na sprzedaż! - ResidenceBought: 'KupiÅ‚eÅ› rezydencjie %1' - ResidenceBuy: 'SprzedaÅ‚eÅ› rezydencjÄ™ %1 z %2.' - ResidenceBuyTooBig: Rezydencja ta przekracza dopuszczalne granice. - ResidenceNotForSale: Rezydencja nie jest na sprzedaż. - ResidenceForSale: 'Rezydencja %1 jest teraz na sprzedaż za %2' - ResidenceStopSelling: Rezydencja nie jest już na sprzedaż. - ResidenceTooMany: Masz już maksymalnÄ… liczbÄ™ dozwolonych rezydencji. - ResidenceMaxRent: WynajoÅ‚eÅ› już maksymalnÄ… liczbe mieszkaÅ„. - ResidenceAlreadyRent: Rezydencja jest już do wynajÄ™cia... - ResidenceNotForRent: Rezydencja nie jest do wynajÄ™cia... - ResidenceNotRented: Rezydencja nie jest wynajmowana. - ResidenceUnrent: 'Rezydencja %1 zostaÅ‚a nie wynajÄ™ta.' - ResidenceRemoveRentable: 'Rezydencja % 1 nie jest już na wynajem.' - ResidenceForRentSuccess: 'Residence %1 jest juz wynajÄ™ta przez %2 na %3 dni.' - ResidenceRentSuccess: 'Masz wynajmowanÄ… rezydencje %1 na %2 dni.' - ResidenceAlreadyRented: 'Rezydencja %1 jest obecnie wynajÄ™ta do %2' - ResidenceAlreadyExists: 'Rezydencja o nazwie %1 już istnieje.' - ResidenceCreate: 'StworzyÅ‚eÅ› Rezydencje %1!' - ResidenceRename: 'ZmieniÅ‚eÅ› nazwe rezydencji z %1 na %2' - ResidenceRemove: 'Rezydencja %1 jest usuwana...' - RentDisabled: Wynajmowanie jest wyÅ‚Ä…czane... - RentDisableRenew: 'Najem zamieszkania nie może być przedÅ‚użony przed upÅ‚ywem %1' - RentEnableRenew: 'Rezydencja 1 % automatycznie przedÅ‚użone najem.' - RentableDisableRenew: 'Status %1 nie bÄ™dzie już aktualizowany w chwili wygaÅ›niÄ™cia.' - RentableEnableRenew: 'Status %1 automatycznie odnowi siÄ™ w chwili wygaÅ›niÄ™cia.' - LandForSale: Teren na sprzedaż - SellAmount: Sprzedaj ilosc - LeaseExpire: Czas wygaÅ›niÄ™cia dzierżawy - RentExpire: Czas wygaÅ›niÄ™cia wynajmu - RentableAutoRenew: Wynajem automatycznie odnowiony - RentAutoRenew: Wynajem ponownie automatycznie odnowiony - RentableLand: Teren najmu - ListMaterialAdd: '%1 dodano do rezydencji %2' - ListMaterialRemove: '%1 usunieto z rezydencji %2' - ItemBlacklisted: JesteÅ› na czarnej liÅ›cie z wykorzystaniem tego elementu tutaj. - RentedModifyDeny: Nie można modyfikować wynajÄ™cia zamieszkania. - WorldPVPDisabled: PvP na Å›wiecie jest wyÅ‚Ä…czone. - NoPVPZone: strefa bez PvP. - FlagDeny: 'Nie posiadasz %1 uprawnieÅ„.' - FlagSetDeny: 'WÅ‚aÅ›ciciel nie ma dostÄ™pu do flagi %1' - SelectPoint: 'Postawiono %1 punkt wyboru' - ResidenceChat: 'Chat rezydencji zostaÅ‚ przeÅ‚Ä…czony %1' - ResidenceMoveDeny: 'Nie masz uprawnieÅ„ do ruchu w Rezydencji %1' - TeleportDeny: Nie masz dostÄ™pu do teleportacji. - TeleportSuccess: 'Przeteleportowano!' - TeleportNear: TeleportowaÅ‚ siÄ™ w pobliżu miejsca zamieszkania. - TeleportNoFlag: Nie masz dostÄ™pu do do teleportacji na tÄ… rezydencjie. - SetTeleportLocation: Ustawiono punkt teleportacji... - HelpPageHeader: 'Strona pomocy - %1 - Strona <%2 of %3>' - ListExists: Lista już istnieje... - ListRemoved: Lista zostala usunieta... - ListCreate: 'Lista %1 zostaÅ‚a utworzona!' - LeaseRenew: 'Dzierżawa ważna do %1' - LeaseRenewMax: Dzierżawa zostaÅ‚a odnowiona maksymalnie - LeaseNotExpire: Nie ma takiego najmu lub dzierżawa nie wygasa. - LeaseRenewalCost: 'Koszt odnowienia na powierzchni %1 is %2' - LeaseInfinite: Czas dzierżawy zostaÅ‚ ustawiony na nieskoÅ„czoność... - PermissionsApply: Uprawnienia stosuje siÄ™ do zamieszkania. - PhysicalAreas: Fizyka obszaru - CurrentArea: Obszar prÄ…du - LeaseExpire: WygaÅ›niÄ™cie dzierżawy - NotOnline: Gracz docelowy musi być online. - ResidenceGiveLimits: Nie może dać zamieszkania do docelowych graczy dlatego, że sÄ… poza granicami graczy docelowych. - ResidenceGive: 'Dajesz pobyt w rezydencji %1 graczowi %2' - ResidenceRecieve: 'OtrzymaÅ‚eÅ› zamieszkanie w %1 z graczem %2' - #Version 4 New Fields - #ResidenceListAll: 'Residences - ' - removed, use GenericPage now - ResidenceListAllEmpty: Brak Rezydencji istniejÄ…cych na serwerze... - InvalidPage: NieprawidÅ‚owa Strona... - NextPage: NastÄ™pna Strona - #Version 10 New Fields - RemovePlayersResidences: 'usunąć wszystkie rezydencje należące do gracza %1' - GenericPage: 'Strona %1 z %2' - #Version 11 New Fields - ResidenceRentedBy: 'WynajÄ™te przez %1' - #Version 14 New Fields - InvalidCharacters: Wykryto nieprawidÅ‚owe znaki... - InvalidNameCharacters: Nazwa wymieniona zawiera zablokowane znaki... - #Version 15 New Fields - DeleteConfirm: 'JesteÅ› pewien że chcesz usunąć Rezydencje %1, uzyj /res confirm do potwierdzenia.' - #Version 18 New Fields - SelectTooHigh: Uwaga, wybór padÅ‚ w górnej części mapy, pozycja jest zbyt wysoka. - SelectTooLow: Uwaga, wybór padÅ‚ w dolnej części mapy, pozycja jest zbyt niska. - WorldEditNotFound: WorldEdit nie zostal wykryty. - #Version 19 New Fields - NoResHere: Nie ma w nim miejsca zamieszkania. - DeleteSubzoneConfirm: 'JesteÅ› pewien że chcesz usunąć podstrefe %1, uzyj /res confirm aby kontynuować.' - #Version 20 New Fields - SubzoneOwnerChange: 'Podstrefa %1 zmieniÅ‚a wÅ‚Ä…Å›ciciela na %2' - CoordsTop: 'X:%1 Y:%2 Z:%3' - CoordsBottom: 'X:%1 Y:%2 Z:%3' - #Version 21 New Fields - AdminToggle: 'Automatyczne resadmin przeÅ‚Ä…cz odwróciÅ‚ %1' - #Version 22 New Fields - NoSpawn: 'Nie masz uprawnieÅ„ do odrodzenia siÄ™ w punktcie odradzania . Przeprowadzka' - CompassTargetReset: 'Twój kompas zostaÅ‚ zedytowany' - CompassTargetSet: 'Kompas wskazuje teraz %1' - - #The below lines are mostly a word bank for various uses. - #Version 1 Fields - Description: Opis - Land: Teren - Cost: Koszt - Selection: Wybór - Total: Total - Size: Wielkość - Expanding: Rozszerzenie - Shifting: PrzesuniÄ™cie - Up: W góre - Down: W dół - Error: Error - Flags: Flagi - Your: Twój - Group: Groupa - Others: Inne - Primary: Podstawowy - Secondary: Wtórny - Selection: Wybór - Moved: Poruszać siÄ™ - Status: Status - Available: DostÄ™pny - On: wÅ‚Ä…czony - Off: wyÅ‚Ä…czony - Name: Nazwa - Lists: Listy - Residences: Rezydencje - Residence: Rezydencja - Count: Ilość - Owner: WÅ‚aÅ›ciciel - #Version 4 Fields - World: Åšwiat - #Version 12 Fields - Subzones: Podstrefa - #Version 20 Fields - CoordsT: Top współrzÄ™dne - CoordsB: współrzÄ™dne guzika - #Version 22 Fields - TurnOn: 'wÅ‚Ä…czony' - TurnOff: 'wyÅ‚Ä…czony' - -# This is the help / usage messages for each command. -# It follows this format: -# -# Description: -# Info: -# SubCommands: -# - these follow the same format, and each sub command can have its own subcommands -# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that -# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). -# Add a page number after the ? mark to see that page. diff --git a/src/Language/Spanish.yml b/src/Language/Spanish.yml deleted file mode 100644 index 938f7865b..000000000 --- a/src/Language/Spanish.yml +++ /dev/null @@ -1,638 +0,0 @@ -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. - -Language: - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - NewPlayerInfo: '&ePor favor, Usa el hacha de madera para señalar las esquinas opuestas - de tu res y ejecuta el comando &2/res create [nombre]' - InvalidResidence: Residencia inválida... - InvalidSubzone: Subzona inválida... - InvalidDirection: Dirección inválida... - InvalidChannel: Canal inválido... - InvalidAmount: Cantidad inválida... - InvalidCost: Coste inválido... - InvalidDays: Número de días inválido... - InvalidMaterial: Material inválido... - InvalidBoolean: Valor inválido, debe ser true(t) o false(f) - InvalidArea: Ãrea inválida... - InvalidGroup: Grupo inválido... - # Replace all text with '' to disable this message - CantPlaceLava: No puedes colocar lava fuera de las residences y a una altura mayor del nivel %1 - # Replace all text with '' to disable this message - CantPlaceWater: No puedes colocar agua fuera de las residences y a una altura mayor del nivel %1 - InvalidMessageType: El tipo de mensaje debe ser enter o remove - InvalidFlag: Flag inválido... - InvalidFlagState: Estado de flag inválido, debe ser true(t), false(f), o remove(r) - AreaExists: El nombre de área ya existe. - AreaCreate: Ãrea de residencia creada, ID %1 - AreaDiffWorld: El área está en un mundo diferente que la residencia. - AreaCollision: Ãrea colisiona con la residencia %1 - AreaSubzoneCollision: Area colisiona con la subzona %1 - AreaNonExist: No existe tal zona. - AreaInvalidName: Nombre de área inválido... - AreaToSmallTotal: El área seleccionada es más pequeña de la permitida (%1) - AreaToSmallX: La longitud x es demasiado pequeña. %1 permitida %2 - AreaToSmallY: La longitud altura es demasiado pequeña. %1 permitida %2 - AreaToSmallZ: La longitud z es demasiado pequeña. %1 permitida %2 - AreaRename: Ãrea renombrada de %1 a %2 - AreaRemove: Ãrea eliminada %1 ... - AreaRemoveLast: No se puede eliminar el último área de una residencia. - AreaNotWithinParent: El área no está dentro del área principal. - AreaUpdate: Ãrea actualizada... - AreaMaxPhysical: Has alcanzado el máximo de áreas físicas para tu residencia. - AreaSizeLimit: El espacio del área no se encuentra dentro de los límites permitidos. - AreaHighLimit: No puedes hacer una protección tan alta, tu límite es %1 - AreaLowLimit: No puedes hacer una protección tan profunda, tu límite es %1 - NotInResidence: No estás en una residencia. - Kicked: Haz sido kickeado de la residencia - InResidence: Actualmente te encuentras en la residencia %1 - ResidenceOwnerChange: La residencia propiedad de %1 ahora es del jugador %2 - NonAdmin: No eres un administrador de residencias. - AdminOnly: Sólo los administradores tienen acceso a este comando. - ChatDisabled: Chat de residencia desactivado... - SubzoneRename: Subzona renombrada de %1 a %2 - SubzoneRemove: Subzona %1 eliminada. - SubzoneCreate: Subzona %1 creada - SubzoneCreateFail: No se puede crear la subzona %1 - SubzoneExists: La subzona %1 ya existe. - SubzoneCollide: La subzona colisiona con otra subzona llamada %1 - SubzoneMaxDepth: Has llegado a la profundidad máxima permitida en una subzona. - SubzoneSelectInside: Los dos puntos de selección han de estar dentro de la residencia. - SelectPoints: Selecciona los dos puntos antes de usar este comando! - SelectOverlap: '&cLos puntos seleccionado coinciden con la region &e%1' - SelectionSuccess: Selección realizada! - SelectionFail: Comando de selección inválido... - SelectionBedrock: Selección expandida al máximo límite inferior permitido. - SelectionSky: Selección expandida al máximo límite superior permitido. - SelectionArea: Seleccionado el area %1 de la residencia %2 - SelectDiabled: No tienes acceso a los comandos de selección. - NoPermission: No tienes permisos para hacer esto. - OwnerNoPermission: El propietario no tiene permiso para esto. - ParentNoPermission: No tienes permisos para realizar cambios en la zona principal. - MessageChange: Mensaje cambiado... - FlagSet: Flag establecido... - FlagCheckTrue: Flag %1 aplicado al jugador %2 para la residencia %3, valor = %4 - FlagCheckFalse: Flag %1 no aplicado al jugador %2 para la residencia. - FlagsCleared: Flags borrados. - FlagsDefault: Flags establecidos por defecto. - Usage: Command Usage - InvalidHelp: Página de ayuda inválida... - SubCommands: Subcomandos - InvalidList: Tipo de lista desconocida, debe ser blacklist o ignorelist. - MaterialGet: El nombre del material para el ID %1 es %2 - MarketDisabled: Economía desactivada! - MarketList: Lista del mercado - ResidenceList: '&a%1%2 &e- %3: %4' - Rented: ' &a(Rentado)' - SignTopLine: '[market]' - SignDateFormat: YY/MM/dd HH:mm - SignForRentTopLine: '&8En Renta' - SignForRentPriceLine: '&8%1&f/&8%2&f/&8%3' - SignForRentResName: '&8%1' - SignForRentBottomLine: '&9Disponible' - SignRentedAutorenewTrue: '&2' - SignRentedAutorenewFalse: '&c' - SignRentedTopLine: '%1' - SignRentedPriceLine: '&8%1&f/&8%2&f/&8%3' - SignRentedResName: '&8%1' - SignRentedBottomLine: '&1%1' - SignForSaleTopLine: '&8A la venta' - SignForSalePriceLine: '&8%1' - SignForSaleResName: '&8%1' - SignForSaleBottomLine: '&5Disponible' - SelectionTool: Herramienta de selección - InfoTool: Información de la herramienta - NoBankAccess: No tienes acceso al banco. - NotEnoughMoney: No tienes suficiente dinero. - BankNoMoney: No tienes suficiente dinero en el banco. - BankDeposit: Has depositado %1 en el banco de la residencia. - BankWithdraw: Has retirado %1 del banco de la residencia. - MoneyCharged: Cargo de %1 en tu cuenta %2. - MoneyAdded: Conseguiste %1 en la cuenta de %2. - MoneyCredit: Crédito de %1 en tu cuenta %2. - RentReleaseInvalid: La residencia %1 no está en alquiler. - RentSellFail: No se puede vender una residencia si está en alquiler. - SellRentFail: No se puede alquilar una residencia si está a la venta. - OwnerBuyFail: No puedes comprar tu propia tierra! - OwnerRentFail: No puedes alquilar tu propia tierra! - AlreadySellFail: Residencia ya a la venta! - ResidenceBought: Has comprado la residencia %1 - ResidenceBuy: '%1 ha comprado la residencia %2' - ResidenceBuyTooBig: Esta residencia tiene áreas más grandes de lo que tu tienes permitido. - ResidenceNotForSale: La residencia no está a la venta. - ResidenceForSale: Residencia %1 está a la venta por %2 - ResidenceStopSelling: La residencia ya no está a la venta - ResidenceTooMany: Ya has alcanzado el número máximo de residencias permitidas. - ResidenceMaxRent: Ya estás alquilando el número máximo de residencias permitidas. - ResidenceAlreadyRent: La residencia ya está en alquiler... - ResidenceNotForRent: La residencia no está en alquiler... - ResidenceNotRented: Residencia no alquilada. - ResidenceUnrent: La residencia %1 ha dejado de estar en alquiler. - ResidenceRemoveRentable: La residencia %1 ya ha dejado de alquilarse. - ResidenceForRentSuccess: La residencia %1 está ahora en alquiler %2 cada %3 días. - ResidenceRentSuccess: Has alquilado la residencia %1 por %2 días. - ResidenceAlreadyRented: La residencia %1 ha sido alquilada a %2 - ResidenceAlreadyExists: La residencia llamada %1 ya existe. - ResidenceCreate: Has creado la residencia %1! - ResidenceRename: Residencia renombrada de %1 a %2 - ResidenceRemove: La residencia %1 ha sido eliminada... - RentDisabled: Alquiler desactivado... - RentDisableRenew: La residencia %1 no volverá a realquilarse cuando expire. - RentEnableRenew: La residencia %1 automáticamente volverá a alquilarse cuando expire. - RentableDisableRenew: '%1 ya no renovará su estado cuando expire.' - RentableEnableRenew: '%1 automáticamente renovará su estado cuando expire.' - LandForSale: Tierra a la venta - SellAmount: Cantidad de venta - LeaseExpire: Caducidad de arrendamiento - RentExpire: Tiempo de caducidad de venta - RentableAutoRenew: Autorenovamiento de arrendamiento - RentAutoRenew: Autorenovación de alquiler - RentableLand: Tierra en alquiler - ListMaterialAdd: '%1 incorporado a la residencia %2' - ListMaterialRemove: '%1 eliminado de la residencia %2' - ItemBlacklisted: El uso de este item aquí no está permitido. - RentedModifyDeny: No puedes modificar una residencia alquilada. - WorldPVPDisabled: PVP del mundo desactivado. - NoPVPZone: Zona no PVP. - FlagDeny: No tienes el permiso de %1 aquí. - FlagSetDeny: El propietario no tiene acceso al flag %1 - SelectPoint: Punto de selección %1 situado - ResidenceChat: Chat residencia activado %1 - ResidenceMoveDeny: No tienes permiso de movimiento para la residencia %1 - ResidenceFlagDeny: No tienes el permiso %1 para la residencia %2 - TeleportDeny: No tienes acceso al teletransporte. - TeleportSuccess: Teletransportado! - TeleportConfirm: '&eEste teletransporte no es seguro, caerás desde &c%1 &ebloques. - Uso &2/res tpconfirm &epara teletransportarte.' - TeleportStarted: '&eTeletransporte a %1 comenzado, no te muevas durante %2 sec.' - TeleportCanceled: '&eTeletransporte cancelado!' - NoTeleportConfirm: No hay teletransportes pendiente de confirmación! - TeleportNear: Teletransportado a la residencia más cercana. - TeleportNoFlag: No tienes acceso al teletransporte de esta residencia. - SetTeleportLocation: Localización de teletransporte establecida... - HelpPageHeader: Páginas de ayuda - %1 - Página <%2 de %3> - ListExists: La lista ya existe... - ListRemoved: Lista eliminada... - ListCreate: Lista creada %1 - LeaseRenew: Contrato de arrendamiento válido hasta el %1 - LeaseRenewMax: Contrato de renovación al máximo permitido - LeaseNotExpire: No hay tal arrendamiento, o no tiene fecha de expiración. - LeaseRenewalCost: El coste de renovación para el área %1 es de %2 - LeaseInfinite: Tiempo de arrendamiento establecido en infinito... - PermissionsApply: Permisos aplicados a la residencia. - PhysicalAreas: Ãreas físicas - CurrentArea: Ãrea actual - TotalWorth: Valor total de la residencia:&3 %1 (%2) - NotOnline: El jugador objetivo ha de estar online - ResidenceGiveLimits: No puedes darle la residencia al jugador objetivo porque está fuera de los límites del jugador. - ResidenceGive: Residencia %1 dada al jugador %2 - ResidenceRecieve: Has recibido la residencia %1 del jugador %2 - ResidenceListAllEmpty: No hay residencias existentes en el servidor... - InvalidPage: Página inválida... - NextPage: Página siguiente - NextInfoPage: '&2| &eSiguiente página &2>>>' - PrevInfoPage: '&2<<< &ePágina anterior &2|' - RemovePlayersResidences: Se eliminaron todas las residencias que pertenecen al jugador %1 - GenericPage: Página %1 de %2 - ResidenceRentedBy: En alquiler por %1 - InvalidCharacters: Caracteres no válidos detectados... - InvalidNameCharacters: El nombre contiene caracteres no permitidos... - DeleteConfirm: Si estás seguro que deseas eliminar la residencia %1, Usa /res confirm para confirmarlo. - SelectTooHigh: La selección está por encima de la parte superior de los límites del mapa. - SelectTooLow: La selección está por debajo de la parte inferior de los límites del mapa. - WorldEditNotFound: WorldEdit no fue detectado. - NoResHere: No hay ninguna residencia aquí. - DeleteSubzoneConfirm: Si estás seguro que deseas eliminar la subzona %1, Usa /res confirm para confirmarlo. - SubzoneOwnerChange: La subzona propiedad de %1 ahora es del jugador %2 - CoordsTop: X:%1 Y:%2 Z:%3 - CoordsBottom: X:%1 Y:%2 Z:%3 - AdminToggle: Resadmin automatico activado %1 - NoSpawn: No tienes permisos para moverte en el punto de spawn. Recolocando - CompassTargetReset: Tu brújula ha sido reseteada - CompassTargetSet: Tu brújula ahora apunta a %1 - # The below lines are mostly a word bank for various uses. - Description: Descripción - Land: Tierra - Cost: Coste - Selection: Selección - Total: Total - Size: Tamaño - Expanding: Expandiendo - Contracting: Contrayendo - North: Norte - West: Oeste - South: Sur - East: Este - Shifting: Moviendo - Up: Arriba - Down: Abajo - Error: Error - Flags: Flags - Your: Tu/tus - Group: Grupo - Others: Otros - Primary: Primario - Secondary: Segundario - Moved: Movido - Status: Estado - Available: Disponible - 'On': 'On' - 'Off': 'Off' - Name: Nombre - Lists: Listas - Residences: Residencias - Residence: Residencia - Count: Número - Owner: Propietario - World: Mundo - Subzones: Subzonas - CoordsT: coordenadas superiores - CoordsB: menores coordenadas - TurnOn: 'on' - TurnOff: 'off' - LimitsTop: '----------------------------------------' - LimitsPGroup: '&7- &ePermisos de grupos:&3 %1' - LimitsRGroup: '&7- &eGrupos de residencia:&3 %1' - LimitsAdmin: '&7- &eResidence Admin:&3 %1' - LimitsCanCreate: '&7- &ePuedes crear residences:&3 %1' - LimitsMaxRes: '&7- &eMáximas residencess:&3 %1' - LimitsMaxEW: '&7- &eMáximo tamaño este/oeste:&3 %1' - LimitsMaxNS: '&7- &eMáximo tamaño norte/sur:&3 %1' - LimitsMaxUD: '&7- &eMáximo tamaño arriba/abajo:&3 %1' - LimitsMinMax: '&7- &eMáxima/mínima protección en altura:&3 %1 to %2' - LimitsMaxSub: '&7- &eMáxima profundidad de subzona:&3 %1' - LimitsMaxRents: '&7- &eMax Rents:&3 %1' - LimitsEnterLeave: '&7- &ePuede establecer Enter/Leave mensajes:&3 %1' - LimitsNumberOwn: '&7- &eNúmero de residences que posees:&3 %1' - LimitsCost: '&7- &eCoste de residencia por bloque:&3 %1' - LimitsSell: '&7- &eCoste de venta de residencia por bloque:&3 %1' - LimitsFlag: '&7- &ePermisos flag:&3 %1' - LimitsMaxDays: '&7- &eNúmero máximo de arrendamientos al día:&3 %1' - LimitsLeaseTime: '&7- &eTiempo de arrendamiento dado en renovación:&3 %1' - LimitsRenewCost: '&7- &eRCoste de renovación por bloque:&3 %1' - LimitsBottom: '----------------------------------------' - Gui: - Set: - Title: '&6%1% flags' - Pset: - Title: '&6%1% %2% flags' - Actions: - - '&2Click-izquierdo para activar' - - '&cClick-derecho para desactivar' - - '&eShift + click-izquierdo para quitar' - InformationPage: - TopLine: '&e---< &a %1 &e >---' - Page: '&e-----< %1 >-----' - NextPage: '&e-----< %1 >-----' - NoNextPage: '&e-----------------------' -CommandHelp: - Description: Contiene ayuda para residencia - SubCommands: - res: - Description: Comando principal - Info: - - Ver el wiki para más información. - - 'Wiki: residencebukkitmod.wikispaces.com' - - Utiliza /[comando] ? para ver más información. - SubCommands: - select: - Description: Comandos de selección - Info: - - Este comando selecciona áreas para hacer residencias. - - /res select [x] [y] [z] - selecciona un número de bloques alrededor de tí. - SubCommands: - coords: - Description: Mostrar coordinadas de la selección - Info: - - 'Uso: /res select coords' - size: - Description: Mostrar tamaño de la selección - Info: - - 'Uso: /res select size' - cost: - Description: Mostrar el coste de la selección - Info: - - 'Uso: /res select cost' - vert: - Description: Expandir selección verticalmente - Info: - - 'Uso: /res select vert' - - Expande tanto como estes autorizado (por arriba y por abajo). - sky: - Description: Expandir selección al cielo. - Info: - - 'Uso: /res select sky' - - Expande tan alto como estes autorizado. - bedrock: - Description: Expandir selección al bedrock. - Info: - - 'Uso: /res select bedrock' - - Expande tan bajo como estes autorizado. - expand: - Description: Expandir selección en una dirección. - Info: - - 'Uso: /res select expand ' - - Expande en la dirección en la que estás mirando. - shift: - Description: Mover selección en una dirección. - Info: - - 'Uso: /res select shift ' - - Mueve la selección de en la dirección en la que estás mirando. - chunk: - Description: Seleccionar el chunk en el cual estás ahora. - Info: - - 'Uso: /res select chunk' - - Selecciona el chunk en el cual estás ahora. - residence: - Description: Seleccionar un área existente en una residencia. - Info: - - 'Uso: /res select ' - - Selecciona un área existente en una residencia. - worldedit: - Description: Convertir selección de WorldEdit a selección de residencia. - Info: - - Uso /res select worldedit - - Convertir selección de WorldEdit a selección de residencia. - create: - Description: Crear residencias - Info: - - 'Uso: /res create ' - remove: - Description: Eliminar residencias - Info: - - 'Uso: /res remove ' - removeall: - Description: Eliminar todas las residencias de un jugador. - Info: - - 'Uso: /res removeall [jugador]' - - Elimina todas las residencias de un jugador. - - Necesita /resadmin si lo utilizas en alguien otro que tí. - confirm: - Description: Confirma la eliminación del residencia. - info: - - 'Uso: /res confirm' - - Confirma la eliminación del residencia. - subzone: - Description: Crear subzonas en residencias. - Info: - - 'Uso: /res subzone [nombre subzona]' - - Si el nombre de residencia no se especifica, intentará utilizar la residencia en la cual estás. - area: - Description: Gestiona áreas físicas de una residencia. - SubCommands: - list: - Description: Listear las áreas físicas de una residencia. - Info: - - 'Uso: /res area list [residencia] ' - listall: - Description: Listear coordinadas y otras informaciones. - Info: - - 'Uso: /res area listall [residencia] ' - add: - Description: Añadir áreas físicas a una residencia. - Info: - - 'Uso: /res area add [residencia] [IDdelArea]' - - Tienes que seleccionar dos puntos primero. - remove: - Description: Eliminar áreas físicas de una residencia - Info: - - 'Uso: /res area remove [residencia] [IDdelArea]' - replace: - Description: Reemplazar áreas físicas en una residencia - Info: - - 'Uso: /res area replace [residencia] [IDdelArea]' - - Tienes que seleccionar dos puntos primero. - - El reemplazamiento de un área cobrará la diferencia de tamaño si la nueva es más grande. - info: - Description: Mostrar información de una residencia. - info: - - 'Uso: /res info ' - - No pongas si quieres ver la información de la residencia en la que te encuentras. - limits: - Description: Mostrar límites. - info: - - 'Uso: /res limits' - - Muestra los límites de tu residencia en la creación y mantenimiento. - message: - Description: Gestionar mensajes de residencia - info: - - 'Uso: /res message [enter/leave] [mensaje]' - - Establece el mensaje de entrada o salida de la residencia. - - 'Uso: /res message remove [enter/leave]' - - Elimina el mensaje de entrada o salida. - lease: - Description: Gestionar arrendamientos de residencias - info: - - 'Usoge: /res lease [renew/cost] [residencia]' - - /res lease cost mostrará el coste de renovar un arrendamiento. - - /res lease renew renovará el arrendamiento. - SubCommands: - set: - Description: Poner el tiempo de arrendamiento (sólo admins) - Info: - - 'Uso: /resadmin lease set [residencia] [#días/infinite]' - - Pone el tiempo de arrendamiento de [residencia] a un número de días, o infinito (infinite) - bank: - Description: Gestionar el dinero en una residencia - Info: - - 'Uso: /res bank [deposit/withdraw] [cantidad]' - - Depositar (deposit) o cobrar (withdraw) dinero. - - Tienes que estar en la residencia. - - Tienes que tener el flag +bank. - tp: - Description: Teletransportar a una residencia - Info: - - 'Uso: /res tp [residencia]' - - Teletransportate a una residencia. Tienes que tener el flag +tp o ser admin. - - Tu grupo también tiene que ser autorizado a teletransportarse. - tpconfirm: - Description: Ignore unsafe teleportation warning and teleport anyways - Info: - - 'Usoge: /res tpconfirm' - - Teleports you to a residencia, when teleportation is unsafe. - tpset: - Description: Establecer el punto de teletransporte de una residencia - Info: - - 'Uso: /res tpset' - - Establecerá el punto de teletransporte de una residencia al punto en el que estás. - - Tienes que estar en la residencia para usar este comando. - - Tambien tienes que ser el propietario o tener el flag +admin. - set: - Description: Establecer flags generales para una residencia - Info: - - 'Uso: /res set [flag] [true/false/remove]' - - Para ver una lista de flags, utiliza /res flags ? - - Los flags se aplican a cualquier jugador que no tiene flags específicos (ver /res pset ?). - pset: - Description: Establecer flags especificos para una residencia - Info: - - 'Uso: /res pset [jugador] [flag] [true/false/remove]' - - 'Uso: /res pset [jugador] removeall' - - Para ver una lista de flags, utiliza /res flags ? - gset: - Description: Establecer flags especificos para un grupo en una residencia - Info: - - 'Uso: /res gset [grupo] [flag] [true/false/remove]' - - Para ver una lista de flags, utiliza /res flags ? - lset: - Description: Cambiar opciones de blacklist y ignorelist - Info: - - 'Uso: /res lset [blacklist/ignorelist] [material]' - - 'Uso: /res lset info' - - Blacklistear un material evita que sea puesto en una residencia. - - Ignorelist hace que un material no sea protegido por la residencia. - flags: - Description: List of flags - Info: - - Para estos flags, normalmente, true autoriza la acción y false la denega. - list: - Description: Listear residencias - Info: - - 'Uso: /res list ' - - Listea todas la residencias de un jugador (salvo las que están ocultas). - - Si listeas tus propias residencias, verás las residencias ocultas. - - Para listear las residencias de todos, utiliza /res listall. - listhidden: - Description: Listear residencias ocultas (sólo admins) - Info: - - 'Uso: /res listhidden ' - - Listea las residencias ocultas de un jugador. - listall: - Description: Listear TODAS las residencias - Info: - - 'Uso: /res listall ' - - Listea todas las residencias en el servidor (salvo ocultas que tu no tienes) - listallhidden: - Description: Listear TODAS las residencias ocultas (sólo admins) - Info: - - 'Uso: /res listhidden ' - - Listea todas las residencias ocultas en el servidor. - sublist: - Description: Listear subzonas de la residencia - Info: - - 'Uso: /res sublist ' - - Listea las subzonas de una residencia. - default: - Description: Establecer los flags por defecto - Info: - - 'Uso: /res default ' - - Establecer los flags por defecto a una residencia. Tienes que ser el propietario o admin para esto. - rename: - Description: Renombrar una residencia. - Info: - - 'Uso: /res rename [nombre] [nuevoNombre]' - - Tienes que ser el propietario o admin para esto. - - El nombre no debe estar Usodo por otra residencia. - mirror: - Description: Copiar los flags de una residencia. - Info: - - 'Uso: /res mirror [residencia fuente] [residencia objetiva]' - - Copia los flags de una residencia a otra. Tienes que ser el propietario de las dos residencias o admin para esto. - market: - Description: Comprar, vender o alquilar residencias - SubCommands: - info: - Description: Información sobre la economía de una residencia - Info: - - 'Uso: /res market info [residencia]' - - Muestra si una residencia está a la venta o en alquiler, y a qué precio. - list: - Description: Listea residencias alquilables y a la venta. - Info: - - 'Uso: /res market list' - sell: - Description: Poner en venta a una residencia - Info: - - 'Uso: /res market sell [residencia] [cantidad]' - - Pone a la venta la residencia para [cantidad] de dinero. - - Otro jugador puede comprarla con /res market buy - buy: - Description: Comprar una residencia - Info: - - 'Uso: /res market buy [residencia]' - - Compra la residencia si está a la venta. - unsell: - Description: Quita la residencia del mercado. - Info: - - 'Uso: /res market unsell [residencia]' - rent: - Description: Alquilar a una residencia - Info: - - 'Uso: /res market rent [residencia] ' - - Alquilar una residencia. Renovacion auto puede ser true (si) o false (no). - rentable: - Description: Poner en alquiler a una residencia. - Info: - - 'Uso: /res market rentable [residencia] [coste] [días] ' - - Pone una residencia en alquiler por [coste] dinero y para cada [días] días. Si es true, el comprador puede renovar automáticamente. - release: - Description: Quita una residencia del mercado del alquiler. - Info: - - 'Uso: /res market release [residencia]' - - Si eres el comprador, paras de alquilar a esa residencia. - - Si eres el propietario, los demás no podrán alquilar la residencia. - current: - Description: Mostrar la residencia en la cual estás ahora. - Info: - - 'Uso: /res current' - lists: - Description: Listas de permisiones predeterminadas - Info: - - Permisiones predeterminadas que puedes ser puestas sobre residencias - SubCommands: - add: - Description: Añadir una lista - Info: - - 'Uso: /res lists add ' - remove: - Description: Quitar una lista - Info: - - 'Uso: /res lists remove ' - apply: - Description: Aplicar una lista sobre una residencia - Info: - - 'Uso: /res lists apply ' - set: - Description: Establecer un flag - Info: - - 'Uso: /res lists set ' - pset: - Description: Establecer un flag para un jugador - Info: - - 'Uso: /res lists pset ' - gset: - Description: Establecer un flag para un grupo - Info: - - 'Uso: /res lists gset ' - view: - Description: Ver una lista - server: - Description: Poner la residencia como apropiada por el servidor (sólo admins) - Info: - - 'Uso: /resadmin server [residencia]' - - Poner una residencia apropiada por el servidor. - setowner: - Description: Cambiar el propietario de una residencia (sólo admins). - Info: - - 'Uso: /resadmin setowner [residencia] [jugador]' - resreload: - Description: Recargar residencias (sólo admins). - Info: - - 'Uso: /resreload' - resload: - Description: Cargar el fichero de residencias (INSEGURO, sólo admins). - Info: - - 'Uso: /resload' - - 'INSEGURO: no guarda las residencias antes.' - - Carga las residencias del fichero después de haber hecho cambios en el fichero. - ressignconvert: - Description: Convierte los carteles del plugin ResidenceSigns (solo admins). - Info: - - 'Uso: /ressignconvert' - version: - Description: Ver la versión de residencia - Info: - - 'Uso: /res version' \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index f8fe2d336..18a8d4bff 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -125,6 +125,8 @@ public class ConfigManager { protected boolean SelectionIgnoreY = false; protected boolean NoCostForYBlocks = false; protected boolean useVisualizer; + protected boolean DisableListeners; + protected boolean DisableCommands; protected List customContainers; protected List customBothClick; protected List customRightClick; @@ -141,6 +143,8 @@ public class ConfigManager { protected List RTeleport = new ArrayList(); + protected List DisabledWorldsList = new ArrayList(); + protected int rtCooldown; protected int rtMaxTries; @@ -156,6 +160,22 @@ public class ConfigManager { protected ParticleEffects OverlapFrame; protected ParticleEffects OverlapSides; + // DynMap + public boolean DynMapUse; + public boolean DynMapLayer3dRegions; + public int DynMapLayerSubZoneDepth; + public String DynMapBorderColor; + public double DynMapBorderOpacity; + public int DynMapBorderWeight; + public String DynMapFillColor; + public double DynMapFillOpacity; + public String DynMapFillForRent; + public String DynMapFillRented; + public String DynMapFillForSale; + public List DynMapVisibleRegions; + public List DynMapHiddenRegions; + // DynMap + private Residence plugin; public ConfigManager(FileConfiguration config, FileConfiguration flags, FileConfiguration groups, Residence plugin) { @@ -271,7 +291,7 @@ void UpdateFlagFile() { YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); Set sections = conf.getConfigurationSection("Global.FlagPermission").getKeys(false); - for (String one : Locale.FlagList) { + for (String one : LocaleManager.FlagList) { if (sections.contains(one.toLowerCase())) continue; conf.createSection("Global.FlagPermission." + one.toLowerCase()); @@ -283,7 +303,7 @@ void UpdateFlagFile() { ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); Set flagGui = guiSection.getKeys(false); - for (String one : Locale.FlagList) { + for (String one : LocaleManager.FlagList) { if (flagGui.contains(one.toLowerCase())) continue; @@ -389,9 +409,17 @@ void UpdateConfigFile() { "Simply equip this tool and hit a location inside the residence and it will display the info for it."); infoToolId = GetConfig("Global.InfoToolId", Material.STRING.getId(), writer, conf); - writer.addComment("Global.Optimizations.DefaultWorld", "Name of your mein residence world. Usualy normal starting world 'World'. Capitalization essential"); + writer.addComment("Global.Optimizations.DefaultWorld", "Name of your main residence world. Usually normal starting world 'World'. Capitalization essential"); DefaultWorld = GetConfig("Global.Optimizations.DefaultWorld", defaultWorldName, writer, conf, false); + writer.addComment("Global.Optimizations.DisabledWorlds.List", "List Of Worlds where this plugin is disabled"); + DisabledWorldsList = GetConfig("Global.Optimizations.DisabledWorlds.List", new ArrayList(), writer, conf, false); + + writer.addComment("Global.Optimizations.DisabledWorlds.DisableListeners", "Disables all listeners in included worlds"); + DisableListeners = GetConfig("Global.Optimizations.DisabledWorlds.DisableListeners", true, writer, conf); + writer.addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); + DisableCommands = GetConfig("Global.Optimizations.DisabledWorlds.DisableCommands", true, writer, conf); + writer.addComment("Global.Optimizations.ResCreateCaseSensitive", "When its true you can create residences with similar names but different capitalization. An example: Village and village are counted as different residences", "When it's set to false you can't create residences with same names but different capitalizations"); @@ -494,7 +522,8 @@ void UpdateConfigFile() { for (String one : conf.getConfigurationSection("Global.RandomTeleportation").getKeys(false)) { String path = "Global.RandomTeleportation." + one + "."; - writer.addComment("Global.RandomTeleportation." + one, "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); + writer.addComment("Global.RandomTeleportation." + one, + "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); writer.addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); int MaxCoord = GetConfig(path + "MaxCoord", 1000, writer, conf); @@ -547,7 +576,7 @@ void UpdateConfigFile() { AutoCleanUpDays = GetConfig("Global.AutoCleanUp.Days", 60, writer, conf); writer.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); AutoCleanUpWorlds = GetConfig("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); - + writer.addComment("Global.LWC.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", "Players can bypass this wih residence.cleanbypass permission node"); AutoCleanUp = GetConfig("Global.AutoCleanUp.Use", false, writer, conf); @@ -810,6 +839,31 @@ void UpdateConfigFile() { ActionBarOnSelection = false; } + writer.addComment("DynMap.Use", "Enables or disable DynMap Support"); + DynMapUse = GetConfig("DynMap.Use", false, writer, conf); + + writer.addComment("DynMap.Layer.3dRegions", "Enables 3D zones"); + DynMapLayer3dRegions = GetConfig("DynMap.Layer.3dRegions", true, writer, conf); + writer.addComment("DynMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); + DynMapLayerSubZoneDepth = GetConfig("DynMap.Layer.SubZoneDepth", 2, writer, conf); + + writer.addComment("DynMap.Border.Color", "Color of border. Pick color for this page http://www.w3schools.com/colors/colors_picker.asp"); + DynMapBorderColor = GetConfig("DynMap.Border.Color", "#FF0000", writer, conf, false); + writer.addComment("DynMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); + DynMapBorderOpacity = GetConfig("DynMap.Border.Opacity", 0.3, writer, conf); + writer.addComment("DynMap.Border.Weight", "Border thickness"); + DynMapBorderWeight = GetConfig("DynMap.Border.Weight", 3, writer, conf); + DynMapFillOpacity = GetConfig("DynMap.Fill.Opacity", 0.3, writer, conf); + DynMapFillColor = GetConfig("DynMap.Fill.Color", "#FFFF00", writer, conf, false); + DynMapFillForRent = GetConfig("DynMap.Fill.ForRent", "#33cc33", writer, conf, false); + DynMapFillRented = GetConfig("DynMap.Fill.Rented", "#99ff33", writer, conf, false); + DynMapFillForSale = GetConfig("DynMap.Fill.ForSale", "#0066ff", writer, conf, false); + + writer.addComment("DynMap.VisibleRegions", "Shows only regions on this list"); + DynMapVisibleRegions = GetConfig("DynMap.VisibleRegions", new ArrayList(), writer, conf, false); + writer.addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden ingame"); + DynMapHiddenRegions = GetConfig("DynMap.HiddenRegions", new ArrayList(), writer, conf, false); + try { writer.save(f); } catch (IOException e) { @@ -1285,6 +1339,10 @@ public int getrtMaxTries() { return rtMaxTries; } + public boolean useFlagGUI() { + return useFlagGUI; + } + public boolean BounceAnimation() { return BounceAnimation; } diff --git a/src/com/bekvon/bukkit/residence/Locale.java b/src/com/bekvon/bukkit/residence/LocaleManager.java similarity index 71% rename from src/com/bekvon/bukkit/residence/Locale.java rename to src/com/bekvon/bukkit/residence/LocaleManager.java index 4b255b50f..5950dfca4 100644 --- a/src/com/bekvon/bukkit/residence/Locale.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -18,12 +18,12 @@ import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; -public class Locale { +public class LocaleManager { public static ArrayList FlagList = new ArrayList(); private Residence plugin; - public Locale(Residence plugin) { + public LocaleManager(Residence plugin) { this.plugin = plugin; } @@ -118,328 +118,252 @@ public void LoadLang(String lang) { writer.options().header(header.toString()); - writer.addComment("Language.NewPlayerInfo", "The below lines represent various messages residence sends to the players.", - "Note that some messages have variables such as %1 that are inserted at runtime."); - GetConfig("Language.NewPlayerInfo", - "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", - writer, conf, true); - GetConfig("Language.InvalidPlayer", "&cInvalid player name...", writer, conf, true); - GetConfig("Language.InvalidResidence", "&cInvalid Residence...", writer, conf, true); - GetConfig("Language.InvalidSubzone", "&cInvalid Subzone...", writer, conf, true); - GetConfig("Language.InvalidDirection", "&cInvalid Direction...", writer, conf, true); - GetConfig("Language.InvalidAmount", "&cInvalid Amount...", writer, conf, true); - GetConfig("Language.InvalidCost", "&cInvalid Cost...", writer, conf, true); - GetConfig("Language.InvalidDays", "&cInvalid number of days...", writer, conf, true); - GetConfig("Language.InvalidMaterial", "&cInvalid Material...", writer, conf, true); - GetConfig("Language.InvalidBoolean", "&cInvalid value, must be true(t) or false(f)", writer, conf, true); - GetConfig("Language.InvalidArea", "&cInvalid Area...", writer, conf, true); - GetConfig("Language.InvalidGroup", "&cInvalid Group...", writer, conf, true); - GetConfig("Language.UseNumbers", "&cPlease use numbers...", writer, conf, true); - GetConfig("Language.NotOwner", "&cYou are not owner of this residence", writer, conf, true); - GetConfig("Language.LookAtSign", "&cYou are not looking at sign", writer, conf, true); - writer.addComment("Language.CantPlaceLava", "Replace all text with '' to disable this message"); - GetConfig("Language.CantPlaceLava", "&cYou can't place lava outside residence and higher than %1 block level", writer, conf, true); - writer.addComment("Language.CantPlaceWater", "Replace all text with '' to disable this message"); - GetConfig("Language.CantPlaceWater", "&cYou can't place Water outside residence and higher than %1 block level", writer, conf, true); - GetConfig("Language.InvalidMessageType", "&cMessage type must be enter or remove.", writer, conf, true); - // GetConfig("Language.InvalidList", "Invalid List...", writer, - // conf, true); - GetConfig("Language.InvalidFlag", "Invalid Flag...", writer, conf, true); - GetConfig("Language.InvalidFlagState", "Invalid flag state, must be true(t), false(f), or remove(r)", writer, conf, true); - GetConfig("Language.AreaExists", "Area name already exists.", writer, conf, true); - GetConfig("Language.AreaCreate", "Residence Area created, ID %1", writer, conf, true); - GetConfig("Language.AreaDiffWorld", "Area is in a different world from residence.", writer, conf, true); - GetConfig("Language.AreaCollision", "Area collides with residence %1", writer, conf, true); - GetConfig("Language.AreaSubzoneCollision", "Area collides with subzone %1", writer, conf, true); - GetConfig("Language.AreaNonExist", "No such area exists.", writer, conf, true); - GetConfig("Language.AreaInvalidName", "Invalid Area Name...", writer, conf, true); - GetConfig("Language.AreaToSmallTotal", "Selected area smaller than allowed minimal (%1)", writer, conf, true); - GetConfig("Language.AreaToSmallX", "Your x selection length is too small. %1 allowed %2", writer, conf, true); - GetConfig("Language.AreaToSmallY", "Your selection height is too small. %1 allowed %2", writer, conf, true); - GetConfig("Language.AreaToSmallZ", "Your z selection length is too small. %1 allowed %2", writer, conf, true); - GetConfig("Language.AreaName", "Name", writer, conf, true); - GetConfig("Language.AreaRename", "Renamed area %1 to %2", writer, conf, true); - GetConfig("Language.AreaRemove", "Removed area %1...", writer, conf, true); - GetConfig("Language.AreaRemoveLast", "Cannot remove the last area in a residence.", writer, conf, true); - GetConfig("Language.AreaNotWithinParent", "Area is not within parent area.", writer, conf, true); - GetConfig("Language.AreaUpdate", "Area Updated...", writer, conf, true); - GetConfig("Language.AreaMaxPhysical", "You've reached the max physical areas allowed for your residence.", writer, conf, true); - GetConfig("Language.AreaSizeLimit", "Area size is not within your allowed limits.", writer, conf, true); - GetConfig("Language.AreaHighLimit", "You cannot protect this high up, your limit is %1", writer, conf, true); - GetConfig("Language.AreaLowLimit", "You cannot protect this deep, your limit is %1", writer, conf, true); - GetConfig("Language.NotInResidence", "You are not in a Residence.", writer, conf, true); - GetConfig("Language.PlayerNotInResidence", "Player standing not in your Residence area.", writer, conf, true); - GetConfig("Language.Kicked", "You were kicked from residence", writer, conf, true); - GetConfig("Language.InResidence", "You are standing in Residence %1", writer, conf, true); - GetConfig("Language.ResidenceOwnerChange", "Residence %1 owner changed to %2", writer, conf, true); - GetConfig("Language.NonAdmin", "You are not a Residence admin.", writer, conf, true); - GetConfig("Language.AdminOnly", "Only admins have access to this command.", writer, conf, true); - GetConfig("Language.ChatDisabled", "Residence Chat Disabled...", writer, conf, true); - GetConfig("Language.SubzoneRename", "Renamed subzone %1 to %2", writer, conf, true); - GetConfig("Language.SubzoneRemove", "Subzone %1 removed.", writer, conf, true); - GetConfig("Language.SubzoneCreate", "Created Subzone %1", writer, conf, true); - GetConfig("Language.SubzoneCreateFail", "Unable to create subzone %1", writer, conf, true); - GetConfig("Language.SubzoneExists", "Subzone %1 already exists.", writer, conf, true); - GetConfig("Language.SubzoneCollide", "Subzone collides with subzone %1", writer, conf, true); - GetConfig("Language.SubzoneMaxDepth", "You have reached the maximum allowed subzone depth.", writer, conf, true); - GetConfig("Language.SubzoneSelectInside", "Both selection points must be inside the residence.", writer, conf, true); - GetConfig("Language.SelectPoints", "Select two points first before using this command!", writer, conf, true); - GetConfig("Language.SelectOverlap", "&cSelected points overlap with &e%1 &cregion!", writer, conf, true); - GetConfig("Language.SelectionSuccess", "Selection Successful!", writer, conf, true); - GetConfig("Language.SelectionFail", "Invalid select command...", writer, conf, true); - GetConfig("Language.SelectionBedrock", "Selection expanded to your lowest allowed limit.", writer, conf, true); - GetConfig("Language.SelectionSky", "Selection expanded to your highest allowed limit.", writer, conf, true); - GetConfig("Language.SelectionArea", "Selected area %1 of residence %2", writer, conf, true); - GetConfig("Language.SelectDiabled", "You don't have access to selections commands.", writer, conf, true); - GetConfig("Language.NoPermission", "You dont have permission for this.", writer, conf, true); - GetConfig("Language.OwnerNoPermission", "The owner does not have permission for this.", writer, conf, true); - GetConfig("Language.ParentNoPermission", "You don't have permission to make changes to the parent zone.", writer, conf, true); - GetConfig("Language.MessageChange", "Message Set...", writer, conf, true); - GetConfig("Language.FlagSet", "&e%1 &2flag set for &e%2 &2to &e%3 &2state", writer, conf, true); - GetConfig("Language.FlagSetFailed", "&cYou dont have access to &6%1 &cflag", writer, conf, true); - GetConfig("Language.FlagCheckTrue", "Flag %1 applys to player %2 for residence %3, value = %4", writer, conf, true); - GetConfig("Language.FlagCheckFalse", "Flag %1 does not apply to player %2 for residence.", writer, conf, true); - GetConfig("Language.FlagsCleared", "Flags Cleared.", writer, conf, true); - GetConfig("Language.FlagsDefault", "Flags set to default.", writer, conf, true); - GetConfig("Language.DefaultUsage", "&eType &6/%1 ? &efor more info", writer, conf, true); - GetConfig("Language.Usage", "Command Usage", writer, conf, true); - GetConfig("Language.InvalidHelp", "Invalid Help Page...", writer, conf, true); - GetConfig("Language.SubCommands", "Sub Commands", writer, conf, true); - GetConfig("Language.InvalidList", "Unknown list type, must be blacklist or ignorelist.", writer, conf, true); - GetConfig("Language.MaterialGet", "The material name for ID %1 is %2", writer, conf, true); - GetConfig("Language.MarketDisabled", "Economy Disabled!", writer, conf, true); - GetConfig("Language.MarketList", "Market List", writer, conf, true); - GetConfig("Language.ResidenceList", "&a%1%2 &e- %3: %4", writer, conf, true); - GetConfig("Language.Rented", " &a(Rented)", writer, conf, true); - - GetConfig("Language.SignsUpdated", "&e%1 signs updated!", writer, conf, true); - - GetConfig("Language.SignTopLine", "[market]", writer, conf, true); - GetConfig("Language.SignDateFormat", "YY/MM/dd HH:mm", writer, conf, true); - - GetConfig("Language.SignForRentTopLine", "&8For Rent", writer, conf, true); - GetConfig("Language.SignForRentPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); - GetConfig("Language.SignForRentResName", "&8%1", writer, conf, true); - GetConfig("Language.SignForRentBottomLine", "&9Available", writer, conf, true); - - GetConfig("Language.SignRentedAutorenewTrue", "&2", writer, conf, true); - GetConfig("Language.SignRentedAutorenewFalse", "&c", writer, conf, true); - - GetConfig("Language.SignRentedTopLine", "%1", writer, conf, true); - GetConfig("Language.SignRentedPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); - GetConfig("Language.SignRentedResName", "&8%1", writer, conf, true); - GetConfig("Language.SignRentedBottomLine", "&1%1", writer, conf, true); - - GetConfig("Language.SignForSaleTopLine", "&8For Sale", writer, conf, true); - GetConfig("Language.SignForSalePriceLine", "&8%1", writer, conf, true); - GetConfig("Language.SignForSaleResName", "&8%1", writer, conf, true); - GetConfig("Language.SignForSaleBottomLine", "&5Available", writer, conf, true); - - GetConfig("Language.SelectionTool", "Selection Tool", writer, conf, true); - GetConfig("Language.InfoTool", "Info Tool", writer, conf, true); - GetConfig("Language.NoBankAccess", "You dont have bank access.", writer, conf, true); - GetConfig("Language.NotEnoughMoney", "You dont have enough money.", writer, conf, true); - GetConfig("Language.Bank", "Bank", writer, conf, true); - GetConfig("Language.BankNoMoney", "Not enough money in the bank.", writer, conf, true); - GetConfig("Language.BankDeposit", "You deposit %1 into the residence bank.", writer, conf, true); - GetConfig("Language.BankWithdraw", "You withdraw %1 from the residence bank.", writer, conf, true); - GetConfig("Language.MoneyCharged", "Charged %1 to your %2 account.", writer, conf, true); - GetConfig("Language.MoneyAdded", "Got %1 to your %2 account.", writer, conf, true); - GetConfig("Language.MoneyCredit", "Credited %1 to your %2 account.", writer, conf, true); - // GetConfig("Language.RentDisabled", "Rent system is disabled.", - // writer, conf, true); - GetConfig("Language.RentReleaseInvalid", "Residence %1 is not rented or for rent.", writer, conf, true); - GetConfig("Language.RentSellFail", "Cannot sell a Residence if it is for rent.", writer, conf, true); - GetConfig("Language.RentedBy", "Rented by", writer, conf, true); - GetConfig("Language.SellRentFail", "Cannot rent a Residence if it is for sale.", writer, conf, true); - GetConfig("Language.OwnerBuyFail", "Cannot buy your own land!", writer, conf, true); - GetConfig("Language.OwnerRentFail", "Cannot rent your own land!", writer, conf, true); - GetConfig("Language.AlreadySellFail", "Residence already for sale!", writer, conf, true); - GetConfig("Language.ResidenceBought", "You bought residence %1", writer, conf, true); - GetConfig("Language.ResidenceBuy", "Residence %1 has bought residence %2 from you.", writer, conf, true); - GetConfig("Language.ResidenceBuyTooBig", "This residence has areas bigger then your allowed max.", writer, conf, true); - GetConfig("Language.ResidenceNotForSale", "Residence is not for sale.", writer, conf, true); - GetConfig("Language.ResidenceForSale", "Residence %1 is now for sale for %2", writer, conf, true); - GetConfig("Language.ResidenceStopSelling", "Residence is no longer for sale.", writer, conf, true); - GetConfig("Language.ResidenceTooMany", "You already own the max number of residences your allowed to.", writer, conf, true); - GetConfig("Language.ResidenceMaxRent", "You already are renting the maximum number of residences your allowed to.", writer, conf, true); - GetConfig("Language.ResidenceAlreadyRent", "Residence is already for rent...", writer, conf, true); - GetConfig("Language.ResidenceNotForRent", "Residence not for rent...", writer, conf, true); - GetConfig("Language.ResidenceNotForRentOrSell", "&cResidence not for rent or sell...", writer, conf, true); - GetConfig("Language.ResidenceNotRented", "Residence not rented.", writer, conf, true); - GetConfig("Language.ResidenceUnrent", "Residence %1 has been unrented.", writer, conf, true); - GetConfig("Language.ResidenceRemoveRentable", "Residence %1 is no longer rentable.", writer, conf, true); - GetConfig("Language.ResidenceForRentSuccess", "Residence %1 is now for rent for %2 every %3 days.", writer, conf, true); - GetConfig("Language.ResidenceRentSuccess", "You have rented Residence %1 for %2 days.", writer, conf, true); - GetConfig("Language.ResidenceAlreadyRented", "Residence %1 has currently been rented to %2", writer, conf, true); - GetConfig("Language.ResidenceAlreadyExists", "A residence named %1 already exists.", writer, conf, true); - GetConfig("Language.ResidenceCreate", "You have created residence %1!", writer, conf, true); - GetConfig("Language.ResidenceRename", "Renamed Residence %1 to %2", writer, conf, true); - GetConfig("Language.ResidenceRemove", "Residence %1 has been removed...", writer, conf, true); - GetConfig("Language.RentDisabled", "Rent is disabled...", writer, conf, true); - GetConfig("Language.RentDisableRenew", "Residence %1 will now no longer re-rent upon expire.", writer, conf, true); - GetConfig("Language.RentEnableRenew", "Residence %1 will now automatically re-rent upon expire.", writer, conf, true); - GetConfig("Language.RentableDisableRenew", "%1 will no longer renew rentable status upon expire.", writer, conf, true); - GetConfig("Language.RentableEnableRenew", "%1 will now automatically renew rentable status upon expire.", writer, conf, true); - GetConfig("Language.LandForSale", "Land For Sale", writer, conf, true); - GetConfig("Language.SellAmount", "Sell Amount", writer, conf, true); - GetConfig("Language.LeaseExpire", "Lease Expire Time", writer, conf, true); - GetConfig("Language.RentExpire", "Rent Expire Time", writer, conf, true); - GetConfig("Language.RentableAutoRenew", "Rentable Auto Renew", writer, conf, true); - GetConfig("Language.RentAutoRenew", "Rent Auto Renew", writer, conf, true); - GetConfig("Language.RentableLand", "Rentable Land", writer, conf, true); - GetConfig("Language.ListMaterialAdd", "%1 added to the residence %2", writer, conf, true); - GetConfig("Language.ListMaterialRemove", "%1 removed from the residence %2", writer, conf, true); - GetConfig("Language.ItemBlacklisted", "You are blacklisted from using this item here.", writer, conf, true); - GetConfig("Language.RentedModifyDeny", "Cannot modify a rented residence.", writer, conf, true); - GetConfig("Language.WorldPVPDisabled", "World PVP is disabled.", writer, conf, true); - GetConfig("Language.NoPVPZone", "No PVP zone.", writer, conf, true); - GetConfig("Language.FlagDeny", "You dont have %1 permission here.", writer, conf, true); - GetConfig("Language.FlagSetDeny", "Owner does not have access to flag %1", writer, conf, true); - - GetConfig("Language.FlagChangeDeny", "&cYou cant change &e%1 &cflag state while there is &e%2 &cplayer(s) inside.", writer, conf, true); - - GetConfig("Language.SelectPoint", "Placed %1 Selection Point", writer, conf, true); - GetConfig("Language.ResidenceMoveDeny", "You dont have movement permission for Residence %1", writer, conf, true); - GetConfig("Language.ResidenceFlagDeny", "You dont have %1 permission for Residence %2", writer, conf, true); - GetConfig("Language.TeleportDeny", "You dont have teleport access.", writer, conf, true); - GetConfig("Language.TeleportSuccess", "Teleported!", writer, conf, true); - GetConfig("Language.TeleportConfirm", - "&eThis teleport is not safe, you will fall for &c%1 &eblocks. Use &2/res tpconfirm &eto perform teleportation anyways.", writer, conf, true); - GetConfig("Language.TeleportStarted", - "&eTeleportation to %1 started, don't move for next %2 sec.", writer, conf, true); - GetConfig("Language.TeleportCanceled", - "&eTeleportation canceled!", writer, conf, true); - GetConfig("Language.NoTeleportConfirm", "There is no teleports waiting for confirmation!", writer, conf, true); - GetConfig("Language.TeleportNear", "Teleported to near residence.", writer, conf, true); - GetConfig("Language.TeleportNoFlag", "You dont have teleport access for that residence.", writer, conf, true); - GetConfig("Language.SetTeleportLocation", "Teleport Location Set...", writer, conf, true); - GetConfig("Language.HelpPageHeader", "Help Pages - %1 - Page <%2 of %3>", writer, conf, true); - GetConfig("Language.ListExists", "List already exists...", writer, conf, true); - GetConfig("Language.ListRemoved", "List removed...", writer, conf, true); - GetConfig("Language.ListCreate", "Created list %1", writer, conf, true); - GetConfig("Language.LeaseRenew", "Lease valid until %1", writer, conf, true); - GetConfig("Language.LeaseRenewMax", "Lease renewed to maximum allowed", writer, conf, true); - GetConfig("Language.LeaseNotExpire", "No such lease, or lease does not expire.", writer, conf, true); - GetConfig("Language.LeaseRenewalCost", "Renewal cost for area %1 is %2", writer, conf, true); - GetConfig("Language.LeaseInfinite", "Lease time set to infinite...", writer, conf, true); - GetConfig("Language.PermissionsApply", "Permissions applied to residence.", writer, conf, true); - GetConfig("Language.PhysicalAreas", "Physical Areas", writer, conf, true); - GetConfig("Language.CurrentArea", "Current Area", writer, conf, true); - GetConfig("Language.TotalWorth", "Total worth of residence:&3 %1 (%2)", writer, conf, true); - GetConfig("Language.LeaseExpire", "Lease Expiration", writer, conf, true); - GetConfig("Language.NotOnline", "Target player must be online.", writer, conf, true); - GetConfig("Language.ResidenceGiveLimits", "Cannot give residence to target player, because it is outside the target players limits.", writer, conf, true); - GetConfig("Language.ResidenceGive", "You give residence %1 to player %2", writer, conf, true); - GetConfig("Language.ResidenceRecieve", "You have recieved residence %1 from player %2", writer, conf, true); - // GetConfig("Language.#ResidenceListAll", "Residences - - removed, use GenericPage now", writer, conf, true); - GetConfig("Language.ResidenceListAllEmpty", "No Residences exists on the server...", writer, conf, true); - GetConfig("Language.InvalidPage", "Invalid Page...", writer, conf, true); - GetConfig("Language.NextPage", "Next Page", writer, conf, true); - GetConfig("Language.NextInfoPage", "&2| &eNext Page &2>>>", writer, conf, true); - GetConfig("Language.PrevInfoPage", "&2<<< &ePrev Page &2|", writer, conf, true); - GetConfig("Language.RemovePlayersResidences", "Removed all residences belonging to player %1", writer, conf, true); - GetConfig("Language.GenericPage", "Page %1 of %2", writer, conf, true); - GetConfig("Language.ResidenceRentedBy", "Rented by %1", writer, conf, true); - GetConfig("Language.InvalidCharacters", "Invalid characters detected...", writer, conf, true); - GetConfig("Language.InvalidNameCharacters", "Name contained unallowed characters...", writer, conf, true); - GetConfig("Language.DeleteConfirm", "Are you sure you want to delete residence %1, use /res confirm to confirm.", writer, conf, true); - GetConfig("Language.CantCreateSubzone", "&cYou dont have permission to create residence subzone.", writer, conf, true); - GetConfig("Language.CantDeleteResidence", "&cYou dont have permission to delete residence.", writer, conf, true); - GetConfig("Language.CantDeleteSubzone", "&cYou dont have permission to delete residence subzone.", writer, conf, true); - GetConfig("Language.CantDeleteSubzoneNotOwnerOfParent", "&cYou are not owner of parent residence to delete this subzone.", writer, conf, true); - GetConfig("Language.CantExpandResidence", "&cYou dont have permission to expand residence.", writer, conf, true); - GetConfig("Language.CantExpandSubzone", "&cYou dont have permission to expand residence subzone.", writer, conf, true); - GetConfig("Language.CantContractResidence", "&cYou dont have permission to contract residence.", writer, conf, true); - GetConfig("Language.CantContractSubzone", "&cYou dont have permission to contract residence subzone.", writer, conf, true); - GetConfig("Language.SelectTooHigh", "Warning, selection went above top of map, limiting.", writer, conf, true); - GetConfig("Language.SelectTooLow", "Warning, selection went below bottom of map, limiting.", writer, conf, true); - GetConfig("Language.WorldEditNotFound", "WorldEdit was not detected.", writer, conf, true); - GetConfig("Language.NoResHere", "There is no residence in there.", writer, conf, true); - GetConfig("Language.DeleteSubzoneConfirm", "Are you sure you want to delete subzone %1, use /res confirm to confirm.", writer, conf, true); - GetConfig("Language.SubzoneOwnerChange", "Subzone %1 owner changed to %2", writer, conf, true); - GetConfig("Language.CoordsTop", "X:%1 Y:%2 Z:%3", writer, conf, true); - GetConfig("Language.CoordsBottom", "X:%1 Y:%2 Z:%3", writer, conf, true); - GetConfig("Language.AdminToggle", "Automatic resadmin toggle turned %1", writer, conf, true); - GetConfig("Language.NoSpawn", "You do not have move permissions at your spawn point. Relocating", writer, conf, true); - GetConfig("Language.CompassTargetReset", "Your compass has been reset", writer, conf, true); - GetConfig("Language.CompassTargetSet", "Your compass now points to %1", writer, conf, true); - writer.addComment("Language.Description", "The below lines are mostly a word bank for various uses."); - GetConfig("Language.Description", "Description", writer, conf, true); - GetConfig("Language.Land", "Land", writer, conf, true); - GetConfig("Language.Cost", "Cost", writer, conf, true); - GetConfig("Language.Selection", "Selection", writer, conf, true); - GetConfig("Language.Total", "Total", writer, conf, true); - GetConfig("Language.Size", "Size", writer, conf, true); - GetConfig("Language.Expanding", "Expanding", writer, conf, true); - GetConfig("Language.Contracting", "Contracting", writer, conf, true); - GetConfig("Language.North", "North", writer, conf, true); - GetConfig("Language.West", "West", writer, conf, true); - GetConfig("Language.South", "South", writer, conf, true); - GetConfig("Language.East", "East", writer, conf, true); - GetConfig("Language.Shifting", "Shifting", writer, conf, true); - GetConfig("Language.Up", "Up", writer, conf, true); - GetConfig("Language.Down", "Down", writer, conf, true); - GetConfig("Language.Error", "Error", writer, conf, true); - GetConfig("Language.Flags", "Flags", writer, conf, true); - GetConfig("Language.Your", "Your", writer, conf, true); - GetConfig("Language.Group", "Group", writer, conf, true); - GetConfig("Language.Others", "Others", writer, conf, true); - GetConfig("Language.Primary", "Primary", writer, conf, true); - GetConfig("Language.Secondary", "Secondary", writer, conf, true); - GetConfig("Language.Selection", "Selection", writer, conf, true); - GetConfig("Language.Moved", "Moved", writer, conf, true); - GetConfig("Language.Status", "Status", writer, conf, true); - GetConfig("Language.Available", "Available", writer, conf, true); - GetConfig("Language.On", "On", writer, conf, true); - GetConfig("Language.Off", "Off", writer, conf, true); - GetConfig("Language.Name", "Name", writer, conf, true); - GetConfig("Language.Lists", "Lists", writer, conf, true); - GetConfig("Language.Residences", "Residences", writer, conf, true); - GetConfig("Language.Residence", "Residence", writer, conf, true); - GetConfig("Language.Count", "Count", writer, conf, true); - GetConfig("Language.Owner", "Owner", writer, conf, true); - GetConfig("Language.World", "World", writer, conf, true); - GetConfig("Language.Subzones", "Subzones", writer, conf, true); - GetConfig("Language.CoordsT", "Top Coords", writer, conf, true); - GetConfig("Language.CoordsB", "Bottom Coords", writer, conf, true); - GetConfig("Language.TurnOn", "on", writer, conf, true); - GetConfig("Language.TurnOff", "off", writer, conf, true); - GetConfig("Language.LimitsTop", "----------------------------------------", writer, conf, true); - GetConfig("Language.LimitsPGroup", "&7- &ePermissions Group:&3 %1", writer, conf, true); - GetConfig("Language.LimitsRGroup", "&7- &eResidence Group:&3 %1", writer, conf, true); - GetConfig("Language.LimitsAdmin", "&7- &eResidence Admin:&3 %1", writer, conf, true); - GetConfig("Language.LimitsCanCreate", "&7- &eCan Create Residences:&3 %1", writer, conf, true); - GetConfig("Language.LimitsMaxRes", "&7- &eMax Residences:&3 %1", writer, conf, true); - GetConfig("Language.LimitsMaxEW", "&7- &eMax East/West Size:&3 %1", writer, conf, true); - GetConfig("Language.LimitsMaxNS", "&7- &eMax North/South Size:&3 %1", writer, conf, true); - GetConfig("Language.LimitsMaxUD", "&7- &eMax Up/Down Size:&3 %1", writer, conf, true); - GetConfig("Language.LimitsMinMax", "&7- &eMin/Max Protection Height:&3 %1 to %2", writer, conf, true); - GetConfig("Language.LimitsMaxSub", "&7- &eMax Subzone Depth:&3 %1", writer, conf, true); - GetConfig("Language.LimitsMaxRents", "&7- &eMax Rents:&3 %1", writer, conf, true); - GetConfig("Language.LimitsEnterLeave", "&7- &eCan Set Enter/Leave Messages:&3 %1", writer, conf, true); - GetConfig("Language.LimitsNumberOwn", "&7- &eNumber of Residences you own:&3 %1", writer, conf, true); - GetConfig("Language.LimitsCost", "&7- &eResidence Cost Per Block:&3 %1", writer, conf, true); - GetConfig("Language.LimitsSell", "&7- &eResidence Sell Cost Per Block:&3 %1", writer, conf, true); - GetConfig("Language.LimitsFlag", "&7- &eFlag Permissions:&3 %1", writer, conf, true); - GetConfig("Language.LimitsMaxDays", "&7- &eMax Lease Days:&3 %1", writer, conf, true); - GetConfig("Language.LimitsLeaseTime", "&7- &eLease Time Given on Renew:&3 %1", writer, conf, true); - GetConfig("Language.LimitsRenewCost", "&7- &eRenew Cost Per Block:&3 %1", writer, conf, true); - GetConfig("Language.LimitsBottom", "----------------------------------------", writer, conf, true); + GetConfig("Language.Invalid.Player", "&cInvalid player name...", writer, conf, true); + GetConfig("Language.Invalid.Residence", "&cInvalid Residence...", writer, conf, true); + GetConfig("Language.Invalid.Subzone", "&cInvalid Subzone...", writer, conf, true); + GetConfig("Language.Invalid.Direction", "&cInvalid Direction...", writer, conf, true); + GetConfig("Language.Invalid.Amount", "&cInvalid Amount...", writer, conf, true); + GetConfig("Language.Invalid.Cost", "&cInvalid Cost...", writer, conf, true); + GetConfig("Language.Invalid.Days", "&cInvalid number of days...", writer, conf, true); + GetConfig("Language.Invalid.Material", "&cInvalid Material...", writer, conf, true); + GetConfig("Language.Invalid.Boolean", "&cInvalid value, must be &6true(t) &cor &6false(f)", writer, conf, true); + GetConfig("Language.Invalid.Area", "&cInvalid Area...", writer, conf, true); + GetConfig("Language.Invalid.Group", "&cInvalid Group...", writer, conf, true); + GetConfig("Language.Invalid.MessageType", "&cMessage type must be enter or remove.", writer, conf, true); + GetConfig("Language.Invalid.Flag", "&cInvalid Flag...", writer, conf, true); + GetConfig("Language.Invalid.FlagState", "&cInvalid flag state, must be &6true(t)&c, &6false(f)&c, or &6remove(r)", writer, conf, true); + GetConfig("Language.Invalid.List", "&eUnknown list type, must be &6blacklist &eor &6ignorelist.", writer, conf, true); + GetConfig("Language.Invalid.Page", "&eInvalid Page...", writer, conf, true); + GetConfig("Language.Invalid.Help", "&cInvalid Help Page...", writer, conf, true); + GetConfig("Language.Invalid.NameCharacters", "&cName contained unallowed characters...", writer, conf, true); + + GetConfig("Language.Area.Exists", "&cArea name already exists.", writer, conf, true); + GetConfig("Language.Area.Create", "&eResidence Area created, ID &6%1", writer, conf, true); + GetConfig("Language.Area.DiffWorld", "&cArea is in a different world from residence.", writer, conf, true); + GetConfig("Language.Area.Collision", "&cArea collides with residence &6%1", writer, conf, true); + GetConfig("Language.Area.SubzoneCollision", "&cArea collides with subzone &6%1", writer, conf, true); + GetConfig("Language.Area.NonExist", "&cNo such area exists.", writer, conf, true); + GetConfig("Language.Area.InvalidName", "&cInvalid Area Name...", writer, conf, true); + GetConfig("Language.Area.ToSmallTotal", "&cSelected area smaller than allowed minimal (&6%1&c)", writer, conf, true); + GetConfig("Language.Area.ToSmallX", "&cYour &6X &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more.", writer, conf, true); + GetConfig("Language.Area.ToSmallY", "&cYour selection height (&6%1&c) is too small. &eAllowed &6%2 and more.", writer, conf, true); + GetConfig("Language.Area.ToSmallZ", "&cYour &6Z &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more.", writer, conf, true); + GetConfig("Language.Area.Rename", "&eRenamed area &6%1 &eto &6%2", writer, conf, true); + GetConfig("Language.Area.Remove", "&eRemoved area &6%1...", writer, conf, true); + GetConfig("Language.Area.Name", "&eName: &2%1", writer, conf, true); + GetConfig("Language.Area.RemoveLast", "&cCannot remove the last area in a residence.", writer, conf, true); + GetConfig("Language.Area.NotWithinParent", "&cArea is not within parent area.", writer, conf, true); + GetConfig("Language.Area.Update", "&eArea Updated...", writer, conf, true); + GetConfig("Language.Area.MaxPhysical", "&eYou've reached the max physical areas allowed for your residence.", writer, conf, true); + GetConfig("Language.Area.SizeLimit", "&eArea size is not within your allowed limits.", writer, conf, true); + GetConfig("Language.Area.HighLimit", "&cYou cannot protect this high up, your limit is &6%1", writer, conf, true); + GetConfig("Language.Area.LowLimit", "&cYou cannot protect this deep, your limit is &6%1", writer, conf, true); + + GetConfig("Language.Select.Points", "&eSelect two points first before using this command!", writer, conf, true); + GetConfig("Language.Select.Overlap", "&cSelected points overlap with &6%1 &cregion!", writer, conf, true); + GetConfig("Language.Select.Success", "&eSelection Successful!", writer, conf, true); + GetConfig("Language.Select.Fail", "&cInvalid select command...", writer, conf, true); + GetConfig("Language.Select.Bedrock", "&eSelection expanded to your lowest allowed limit.", writer, conf, true); + GetConfig("Language.Select.Sky", "&eSelection expanded to your highest allowed limit.", writer, conf, true); + GetConfig("Language.Select.Area", "&eSelected area &6%1 &eof residence &6%2", writer, conf, true); + GetConfig("Language.Select.Tool", "&e- Selection Tool: &6%1", writer, conf, true); + GetConfig("Language.Select.PrimaryPoint", "&ePlaced &6Primary &eSelection Point %1", writer, conf, true); + GetConfig("Language.Select.SecondaryPoint", "&ePlaced &6Secondary &eSelection Point %1", writer, conf, true); + GetConfig("Language.Select.Primary", "&ePrimary selection: &6%1", writer, conf, true); + GetConfig("Language.Select.Secondary", "&eSecondary selection: &6%1", writer, conf, true); + GetConfig("Language.Select.TooHigh", "&cWarning, selection went above top of map, limiting.", writer, conf, true); + GetConfig("Language.Select.TooLow", "&cWarning, selection went below bottom of map, limiting.", writer, conf, true); + GetConfig("Language.Select.TotalSize", "&eSelection total size: &6%1", writer, conf, true); + GetConfig("Language.Select.AutoEnabled", "&eAuto selection mode turned &6ON&e. To disable it write &6/res select auto", writer, conf, true); + GetConfig("Language.Select.AutoDisabled", "&eAuto selection mode turned &6OFF&e. To enable it again write &6/res select auto", writer, conf, true); + + GetConfig("Language.Sign.Updated", "&6%1 &esigns updated!", writer, conf, true); + GetConfig("Language.Sign.TopLine", "[market]", writer, conf, true); + GetConfig("Language.Sign.DateFormat", "YY/MM/dd HH:mm", writer, conf, true); + GetConfig("Language.Sign.ForRentTopLine", "&8For Rent", writer, conf, true); + GetConfig("Language.Sign.ForRentPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); + GetConfig("Language.Sign.ForRentResName", "&8%1", writer, conf, true); + GetConfig("Language.Sign.ForRentBottomLine", "&9Available", writer, conf, true); + GetConfig("Language.Sign.RentedAutorenewTrue", "&2%1", writer, conf, true); + GetConfig("Language.Sign.RentedAutorenewFalse", "&c%1", writer, conf, true); + GetConfig("Language.Sign.RentedTopLine", "%1", writer, conf, true); + GetConfig("Language.Sign.RentedPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); + GetConfig("Language.Sign.RentedResName", "&8%1", writer, conf, true); + GetConfig("Language.Sign.RentedBottomLine", "&1%1", writer, conf, true); + GetConfig("Language.Sign.ForSaleTopLine", "&8For Sale", writer, conf, true); + GetConfig("Language.Sign.ForSalePriceLine", "&8%1", writer, conf, true); + GetConfig("Language.Sign.ForSaleResName", "&8%1", writer, conf, true); + GetConfig("Language.Sign.ForSaleBottomLine", "&5Available", writer, conf, true); + GetConfig("Language.Sign.LookAt", "&cYou are not looking at sign", writer, conf, true); + + GetConfig("Language.Flag.Set", "&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate", writer, conf, true); + GetConfig("Language.Flag.SetFailed", "&cYou dont have access to &6%1 &cflag", writer, conf, true); + GetConfig("Language.Flag.CheckTrue", "&eFlag &6%1 &eapplies to player &6%2 &efor residence &6%3&e, value = &6%4", writer, conf, true); + GetConfig("Language.Flag.CheckFalse", "&eFlag &6%1 &edoes not apply to player &6%2 &efor residence.", writer, conf, true); + GetConfig("Language.Flag.Cleared", "&eFlags Cleared.", writer, conf, true); + GetConfig("Language.Flag.Default", "&eFlags set to default.", writer, conf, true); + GetConfig("Language.Flag.Deny", "&cYou dont have &6%1 &cpermission here.", writer, conf, true); + GetConfig("Language.Flag.SetDeny", "&cOwner does not have access to flag &6%1", writer, conf, true); + GetConfig("Language.Flag.ChangeDeny", "&cYou cant change &6%1 &cflag state while there is &6%2 &cplayer(s) inside.", writer, conf, true); + + GetConfig("Language.Bank.NoAccess", "&cYou dont have bank access.", writer, conf, true); + GetConfig("Language.Bank.Name", " &eBank: &6%1", writer, conf, true); + GetConfig("Language.Bank.NoMoney", "&cNot enough money in the bank.", writer, conf, true); + GetConfig("Language.Bank.Deposit", "&eYou deposit &6%1 &einto the residence bank.", writer, conf, true); + GetConfig("Language.Bank.Withdraw", "&eYou withdraw &6%1 from the residence bank.", writer, conf, true); + + GetConfig("Language.Subzone.Rename", "&eRenamed subzone &6%1 &eto &6%2", writer, conf, true); + GetConfig("Language.Subzone.Remove", "&eSubzone &6%1 &eremoved.", writer, conf, true); + GetConfig("Language.Subzone.Create", "&eCreated Subzone &6%1", writer, conf, true); + GetConfig("Language.Subzone.CreateFail", "&cUnable to create subzone &6%1", writer, conf, true); + GetConfig("Language.Subzone.Exists", "&cSubzone &6%1 &calready exists.", writer, conf, true); + GetConfig("Language.Subzone.Collide", "&cSubzone collides with subzone &6%1", writer, conf, true); + GetConfig("Language.Subzone.MaxDepth", "&cYou have reached the maximum allowed subzone depth.", writer, conf, true); + GetConfig("Language.Subzone.SelectInside", "&eBoth selection points must be inside the residence.", writer, conf, true); + GetConfig("Language.Subzone.CantCreate", "&cYou dont have permission to create residence subzone.", writer, conf, true); + GetConfig("Language.Subzone.CantDelete", "&cYou dont have permission to delete residence subzone.", writer, conf, true); + GetConfig("Language.Subzone.CantDeleteNotOwnerOfParent", "&cYou are not owner of parent residence to delete this subzone.", writer, conf, true); + GetConfig("Language.Subzone.CantContract", "&cYou dont have permission to contract residence subzone.", writer, conf, true); + GetConfig("Language.Subzone.CantExpand", "&cYou dont have permission to expand residence subzone.", writer, conf, true); + GetConfig("Language.Subzone.DeleteConfirm", "&eAre you sure you want to delete subzone &6%1&e, use &6/res confirm &eto confirm.", writer, conf, true); + GetConfig("Language.Subzone.OwnerChange", "&eSubzone &6%1 &eowner changed to &6%2", writer, conf, true); + + GetConfig("Language.Residence.Bought", "&eYou bought residence &6%1", writer, conf, true); + GetConfig("Language.Residence.Buy", "&6%1 &ehas bought residence &6%2 &efrom you.", writer, conf, true); + GetConfig("Language.Residence.BuyTooBig", "&cThis residence has areas bigger then your allowed max.", writer, conf, true); + GetConfig("Language.Residence.NotForSale", "&cResidence is not for sale.", writer, conf, true); + GetConfig("Language.Residence.ForSale", "&eResidence &6%1 &eis now for sale for &6%2", writer, conf, true); + GetConfig("Language.Residence.StopSelling", "&cResidence is no longer for sale.", writer, conf, true); + GetConfig("Language.Residence.TooMany", "&cYou already own the max number of residences your allowed to.", writer, conf, true); + GetConfig("Language.Residence.MaxRent", "&cYou already are renting the maximum number of residences your allowed to.", writer, conf, true); + GetConfig("Language.Residence.AlreadyRent", "&cResidence is already for rent...", writer, conf, true); + GetConfig("Language.Residence.NotForRent", "&cResidence not for rent...", writer, conf, true); + GetConfig("Language.Residence.NotForRentOrSell", "&cResidence not for rent or sell...", writer, conf, true); + GetConfig("Language.Residence.NotRented", "&cResidence not rented.", writer, conf, true); + GetConfig("Language.Residence.Unrent", "&eResidence &6%1 &ehas been unrented.", writer, conf, true); + GetConfig("Language.Residence.RemoveRentable", "&eResidence &6%1 &eis no longer rentable.", writer, conf, true); + GetConfig("Language.Residence.ForRentSuccess", "&eResidence &6%1 &eis now for rent for &6%2 &eevery &6%3 &edays.", writer, conf, true); + GetConfig("Language.Residence.RentSuccess", "&eYou have rented Residence &6%1 &efor &6%2 &edays.", writer, conf, true); + GetConfig("Language.Residence.AlreadyRented", "&eResidence &6%1 &ehas currently been rented to &6%2", writer, conf, true); + GetConfig("Language.Residence.AlreadyExists", "&cA residence named &6%1 &calready exists.", writer, conf, true); + GetConfig("Language.Residence.Create", "&eYou have created residence &6%1&e!", writer, conf, true); + GetConfig("Language.Residence.Rename", "&eRenamed Residence &6%1 &eto &6%2", writer, conf, true); + GetConfig("Language.Residence.Remove", "&eResidence &6%1 &ehas been removed...", writer, conf, true); + GetConfig("Language.Residence.MoveDeny", "&cYou dont have movement permission for Residence &6%1", writer, conf, true); + GetConfig("Language.Residence.TeleportNoFlag", "&cYou dont have teleport access for that residence.", writer, conf, true); + GetConfig("Language.Residence.FlagDeny", "&cYou dont have &6%1 &cpermission for Residence &6%2", writer, conf, true); + GetConfig("Language.Residence.GiveLimits", "&cCannot give residence to target player, because it is outside the target players limits.", writer, conf, true); + GetConfig("Language.Residence.Give", "&eYou give residence &6%1 &eto player &6%2", writer, conf, true); + GetConfig("Language.Residence.Recieve", "&eYou have recieved residence &6%1 &efrom player &6%2", writer, conf, true); + GetConfig("Language.Residence.List", " &a%1%2 &e- &6World&e: &6%3", writer, conf, true); + GetConfig("Language.Residence.TeleportNear", "&eTeleported to near residence.", writer, conf, true); + GetConfig("Language.Residence.SetTeleportLocation", "&eTeleport Location Set...", writer, conf, true); + GetConfig("Language.Residence.PermissionsApply", "&ePermissions applied to residence.", writer, conf, true); + GetConfig("Language.Residence.NotOwner", "&cYou are not owner of this residence", writer, conf, true); + GetConfig("Language.Residence.RemovePlayersResidences", "&eRemoved all residences belonging to player &6%1", writer, conf, true); + GetConfig("Language.Residence.NotIn", "&cYou are not in a Residence.", writer, conf, true); + GetConfig("Language.Residence.PlayerNotIn", "&cPlayer standing not in your Residence area.", writer, conf, true); + GetConfig("Language.Residence.Kicked", "&eYou were kicked from residence", writer, conf, true); + GetConfig("Language.Residence.In", "&eYou are standing in Residence &6%1", writer, conf, true); + GetConfig("Language.Residence.OwnerChange", "&eResidence &6%1 &eowner changed to &6%2", writer, conf, true); + GetConfig("Language.Residence.NonAdmin", "&cYou are not a Residence admin.", writer, conf, true); + GetConfig("Language.Residence.Line", "&eResidence: &6%1 ", writer, conf, true); + GetConfig("Language.Residence.RentedBy", "&eRented by: &6%1", writer, conf, true); + GetConfig("Language.Residence.MessageChange", "&eMessage Set...", writer, conf, true); + GetConfig("Language.Residence.CantDeleteResidence", "&cYou dont have permission to delete residence.", writer, conf, true); + GetConfig("Language.Residence.CantExpandResidence", "&cYou dont have permission to expand residence.", writer, conf, true); + GetConfig("Language.Residence.CantContractResidence", "&cYou dont have permission to contract residence.", writer, conf, true); + GetConfig("Language.Residence.NoResHere", "&cThere is no residence in there.", writer, conf, true); + GetConfig("Language.Residence.OwnerNoPermission", "&cThe owner does not have permission for this.", writer, conf, true); + GetConfig("Language.Residence.ParentNoPermission", "&cYou don't have permission to make changes to the parent zone.", writer, conf, true); + GetConfig("Language.Residence.ChatDisabled", "&eResidence Chat Disabled...", writer, conf, true); + GetConfig("Language.Residence.DeleteConfirm", "&eAre you sure you want to delete residence &6%1&e, use &6/res confirm &eto confirm.", writer, conf, true); + + GetConfig("Language.Rent.Disabled", "&cRent is disabled...", writer, conf, true); + GetConfig("Language.Rent.DisableRenew", "&eResidence &6%1 &ewill now no longer re-rent upon expire.", writer, conf, true); + GetConfig("Language.Rent.EnableRenew", "&eResidence &6%1 &ewill now automatically re-rent upon expire.", writer, conf, true); + GetConfig("Language.Rent.Expire", "&eRent Expire Time: &6%1", writer, conf, true); + GetConfig("Language.Rent.ModifyDeny", "&cCannot modify a rented residence.", writer, conf, true); + GetConfig("Language.Rent.Days", "&eRent days: &6%1", writer, conf, true); + GetConfig("Language.Rent.Rented", " &6(Rented)", writer, conf, true); + + GetConfig("Language.Rentable.Land", "&eRentable Land: &6", writer, conf, true); + GetConfig("Language.Rentable.AutoRenew", "&eRentable Auto Renew: &6%1", writer, conf, true); + GetConfig("Language.Rentable.DisableRenew", "&6%1 &ewill no longer renew rentable status upon expire.", writer, conf, true); + GetConfig("Language.Rentable.EnableRenew", "&6%1 &ewill now automatically renew rentable status upon expire.", writer, conf, true); + + GetConfig("Language.Economy.LandForSale", "&eLand For Sale:", writer, conf, true); + GetConfig("Language.Economy.NotEnoughMoney", "&cYou dont have enough money.", writer, conf, true); + GetConfig("Language.Economy.MoneyCharged", "&eCharged &6%1 &eto your &6%2 &eaccount.", writer, conf, true); + GetConfig("Language.Economy.MoneyAdded", "&eGot &6%1 &eto your &6%2 &eaccount.", writer, conf, true); + GetConfig("Language.Economy.MoneyCredit", "&eCredited &6%1 &eto your &6%2 &eaccount.", writer, conf, true); + GetConfig("Language.Economy.RentReleaseInvalid", "&eResidence &6%1 &eis not rented or for rent.", writer, conf, true); + GetConfig("Language.Economy.RentSellFail", "&cCannot sell a Residence if it is for rent.", writer, conf, true); + GetConfig("Language.Economy.SellRentFail", "&cCannot rent a Residence if it is for sale.", writer, conf, true); + GetConfig("Language.Economy.OwnerBuyFail", "&cCannot buy your own land!", writer, conf, true); + GetConfig("Language.Economy.OwnerRentFail", "&cCannot rent your own land!", writer, conf, true); + GetConfig("Language.Economy.AlreadySellFail", "&eResidence already for sale!", writer, conf, true); + GetConfig("Language.Economy.LeaseRenew", "&eLease valid until &6%1", writer, conf, true); + GetConfig("Language.Economy.LeaseRenewMax", "&eLease renewed to maximum allowed", writer, conf, true); + GetConfig("Language.Economy.LeaseNotExpire", "&eNo such lease, or lease does not expire.", writer, conf, true); + GetConfig("Language.Economy.LeaseRenewalCost", "&eRenewal cost for area &6%1 &eis &6%2", writer, conf, true); + GetConfig("Language.Economy.LeaseInfinite", "&eLease time set to infinite...", writer, conf, true); + GetConfig("Language.Economy.MarketDisabled", "&cEconomy Disabled!", writer, conf, true); + GetConfig("Language.Economy.SellAmount", "&eSell Amount: &2%1", writer, conf, true); + GetConfig("Language.Economy.LeaseExpire", "&eLease Expire Time: &2%1", writer, conf, true); + + GetConfig("Language.Expanding.North", "&eExpanding North &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Expanding.West", "&eExpanding West &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Expanding.South", "&eExpanding South &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Expanding.East", "&eExpanding East &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Expanding.Up", "&eExpanding Up &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Expanding.Down", "&eExpanding Down &6%1 &eblocks", writer, conf, true); + + GetConfig("Language.Contracting.North", "&eContracting North &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Contracting.West", "&eContracting West &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Contracting.South", "&eContracting South &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Contracting.East", "&eContracting East &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Contracting.Up", "&eContracting Up &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Contracting.Down", "&eContracting Down &6%1 &eblocks", writer, conf, true); + + GetConfig("Language.Shifting.North", "&eShifting North &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Shifting.West", "&eShifting West &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Shifting.South", "&eShifting South &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Shifting.East", "&eShifting East &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Shifting.Up", "&eShifting Up &6%1 &eblocks", writer, conf, true); + GetConfig("Language.Shifting.Down", "&eShifting Down &6%1 &eblocks", writer, conf, true); + + GetConfig("Language.Limits.PGroup", "&7- &ePermissions Group:&3 %1", writer, conf, true); + GetConfig("Language.Limits.RGroup", "&7- &eResidence Group:&3 %1", writer, conf, true); + GetConfig("Language.Limits.Admin", "&7- &eResidence Admin:&3 %1", writer, conf, true); + GetConfig("Language.Limits.CanCreate", "&7- &eCan Create Residences:&3 %1", writer, conf, true); + GetConfig("Language.Limits.MaxRes", "&7- &eMax Residences:&3 %1", writer, conf, true); + GetConfig("Language.Limits.MaxEW", "&7- &eMax East/West Size:&3 %1", writer, conf, true); + GetConfig("Language.Limits.MaxNS", "&7- &eMax North/South Size:&3 %1", writer, conf, true); + GetConfig("Language.Limits.MaxUD", "&7- &eMax Up/Down Size:&3 %1", writer, conf, true); + GetConfig("Language.Limits.MinMax", "&7- &eMin/Max Protection Height:&3 %1 to %2", writer, conf, true); + GetConfig("Language.Limits.MaxSub", "&7- &eMax Subzone Depth:&3 %1", writer, conf, true); + GetConfig("Language.Limits.MaxRents", "&7- &eMax Rents:&3 %1", writer, conf, true); + GetConfig("Language.Limits.EnterLeave", "&7- &eCan Set Enter/Leave Messages:&3 %1", writer, conf, true); + GetConfig("Language.Limits.NumberOwn", "&7- &eNumber of Residences you own:&3 %1", writer, conf, true); + GetConfig("Language.Limits.Cost", "&7- &eResidence Cost Per Block:&3 %1", writer, conf, true); + GetConfig("Language.Limits.Sell", "&7- &eResidence Sell Cost Per Block:&3 %1", writer, conf, true); + GetConfig("Language.Limits.Flag", "&7- &eFlag Permissions:&3 %1", writer, conf, true); + GetConfig("Language.Limits.MaxDays", "&7- &eMax Lease Days:&3 %1", writer, conf, true); + GetConfig("Language.Limits.LeaseTime", "&7- &eLease Time Given on Renew:&3 %1", writer, conf, true); + GetConfig("Language.Limits.RenewCost", "&7- &eRenew Cost Per Block:&3 %1", writer, conf, true); + GetConfig("Language.Gui.Set.Title", "&6%1 flags", writer, conf, true); GetConfig("Language.Gui.Pset.Title", "&6%1 %2 flags", writer, conf, true); GetConfig("Language.Gui.Actions", Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove"), writer, conf, true); GetConfig("Language.InformationPage.TopLine", "&e---< &a %1 &e >---", writer, conf, true); - GetConfig("Language.InformationPage.Page", "&e-----< %1 >-----", writer, conf, true); - GetConfig("Language.InformationPage.NextPage", "&e-----< %1 >-----", writer, conf, true); + GetConfig("Language.InformationPage.Page", "&e-----< &6%1 &e>-----", writer, conf, true); + GetConfig("Language.InformationPage.NextPage", "&e-----< &6%1 &e>-----", writer, conf, true); GetConfig("Language.InformationPage.NoNextPage", "&e-----------------------", writer, conf, true); - GetConfig("Language.AutoSelection.Enabled", "&eAuto selection mode turned ON. To disable it write /res select auto", writer, conf, true); - GetConfig("Language.AutoSelection.Disabled", "&eAuto selection mode turned OFF. To enable it again write /res select auto", writer, conf, true); - GetConfig("Language.Chat.ChatChannelChange", "Changed residence chat channel to %1", writer, conf, true); - GetConfig("Language.Chat.ChatChannelLeave", "Left residence chat", writer, conf, true); + GetConfig("Language.Chat.ChatChannelChange", "&eChanged residence chat channel to &6%1!", writer, conf, true); + GetConfig("Language.Chat.ChatChannelLeave", "&eLeft residence chat", writer, conf, true); GetConfig("Language.Chat.JoinFirst", "&4Join residence chat channel first...", writer, conf, true); GetConfig("Language.Chat.InvalidChannel", "&4Invalid Channel...", writer, conf, true); @@ -485,11 +409,88 @@ public void LoadLang(String lang) { true); GetConfig("Language.RandomTeleport.TeleportStarted", "&eTeleportation started, don't move for next &6%4 &esec.", writer, conf, true); + GetConfig("Language.General.DisabledWorld", "&cResidence plugin is disabled in this world", writer, conf, true); + GetConfig("Language.General.UseNumbers", "&cPlease use numbers...", writer, conf, true); + writer.addComment("Language.CantPlaceLava", "Replace all text with '' to disable this message"); + GetConfig("Language.General.CantPlaceLava", "&cYou can't place lava outside residence and higher than &6%1 &cblock level", writer, conf, true); + writer.addComment("Language.CantPlaceWater", "Replace all text with '' to disable this message"); + GetConfig("Language.General.CantPlaceWater", "&cYou can't place Water outside residence and higher than &6%1 &cblock level", writer, conf, true); + GetConfig("Language.General.NoPermission", "&cYou dont have permission for this.", writer, conf, true); + GetConfig("Language.General.DefaultUsage", "&eType &6/%1 ? &efor more info", writer, conf, true); + GetConfig("Language.General.MaterialGet", "&eThe material name for ID &6%1 &eis &6%2", writer, conf, true); + GetConfig("Language.General.MarketList", "&e---- &6Market List &e----", writer, conf, true); + GetConfig("Language.General.Separator", "&e----------------------------------------------------", writer, conf, true); + GetConfig("Language.General.AdminOnly", "&cOnly admins have access to this command.", writer, conf, true); + GetConfig("Language.General.InfoTool", "&e- Info Tool: &6%1", writer, conf, true); + GetConfig("Language.General.ListMaterialAdd", "&6%1 &eadded to the residence &6%2", writer, conf, true); + GetConfig("Language.General.ListMaterialRemove", "&6%1 &eremoved from the residence &6%2", writer, conf, true); + GetConfig("Language.General.ItemBlacklisted", "&cYou are blacklisted from using this item here.", writer, conf, true); + GetConfig("Language.General.WorldPVPDisabled", "&cWorld PVP is disabled.", writer, conf, true); + GetConfig("Language.General.NoPVPZone", "&cNo PVP zone.", writer, conf, true); + GetConfig("Language.General.InvalidHelp", "&cInvalid help page.", writer, conf, true); + + GetConfig("Language.General.TeleportDeny", "&cYou dont have teleport access.", writer, conf, true); + GetConfig("Language.General.TeleportSuccess", "&eTeleported!", writer, conf, true); + GetConfig("Language.General.TeleportConfirm", + "&cThis teleport is not safe, you will fall for &6%1 &cblocks. Use &6/res tpconfirm &cto perform teleportation anyways.", writer, conf, true); + GetConfig("Language.General.TeleportStarted", + "&eTeleportation to &6%1 &estarted, don't move for next &6%2 &esec.", writer, conf, true); + GetConfig("Language.General.TeleportCanceled", + "&eTeleportation canceled!", writer, conf, true); + GetConfig("Language.General.NoTeleportConfirm", "&eThere is no teleports waiting for confirmation!", writer, conf, true); + GetConfig("Language.General.HelpPageHeader", "&eHelp Pages - &6%1 &e- Page <&6%2 &eof &6%3&e>", writer, conf, true); + GetConfig("Language.General.ListExists", "&cList already exists...", writer, conf, true); + GetConfig("Language.General.ListRemoved", "&eList removed...", writer, conf, true); + GetConfig("Language.General.ListCreate", "&eCreated list &6%1", writer, conf, true); + GetConfig("Language.General.PhysicalAreas", "&ePhysical Areas", writer, conf, true); + GetConfig("Language.General.CurrentArea", "&eCurrent Area: &6%1", writer, conf, true); + GetConfig("Language.General.TotalSize", "&eTotal size: &6%1", writer, conf, true); + GetConfig("Language.General.TotalWorth", "&eTotal worth of residence: &6%1 &e(&6%2&e)", writer, conf, true); + GetConfig("Language.General.NotOnline", "&eTarget player must be online.", writer, conf, true); + GetConfig("Language.General.NextPage", "&eNext Page", writer, conf, true); + GetConfig("Language.General.NextInfoPage", "&2| &eNext Page &2>>>", writer, conf, true); + GetConfig("Language.General.PrevInfoPage", "&2<<< &ePrev Page &2|", writer, conf, true); + GetConfig("Language.General.GenericPage", "&ePage &6%1 &eof &6%2", writer, conf, true); + GetConfig("Language.General.WorldEditNotFound", "&cWorldEdit was not detected.", writer, conf, true); + GetConfig("Language.General.CoordsTop", "&eX:&6%1 &eY:&6%2 &eZ:&6%3", writer, conf, true); + GetConfig("Language.General.CoordsBottom", "&eX:&6%1 &eY:&6%2 &eZ:&6%3", writer, conf, true); + GetConfig("Language.General.AdminToggleTurnOn", "&eAutomatic resadmin toggle turned &6On", writer, conf, true); + GetConfig("Language.General.AdminToggleTurnOff", "&eAutomatic resadmin toggle turned &6Off", writer, conf, true); + GetConfig("Language.General.NoSpawn", "&eYou do not have &6move &epermissions at your spawn point. Relocating", writer, conf, true); + GetConfig("Language.General.CompassTargetReset", "&eYour compass has been reset", writer, conf, true); + GetConfig("Language.General.CompassTargetSet", "&eYour compass now points to &6%1", writer, conf, true); + GetConfig("Language.General.Ignorelist", "&2Ignorelist:&6", writer, conf, true); + GetConfig("Language.General.Blacklist", "&cBlacklist:&6", writer, conf, true); + GetConfig("Language.General.LandCost", "&eLand cost: &6%1", writer, conf, true); + GetConfig("Language.General.True", "&2True", writer, conf, true); + GetConfig("Language.General.False", "&cFalse", writer, conf, true); + GetConfig("Language.General.Land", "&eLand: &6%1", writer, conf, true); + GetConfig("Language.General.Cost", "&eCost: &6%1 &eper &6%2 &edays", writer, conf, true); + GetConfig("Language.General.Status", "&eStatus: %1", writer, conf, true); + GetConfig("Language.General.Available", "&2Available", writer, conf, true); + GetConfig("Language.General.Size", " &eSize: &6%1", writer, conf, true); + GetConfig("Language.General.Flags", "&eFlags: &6%1", writer, conf, true); + GetConfig("Language.General.YourFlags", "&eYour flags: &6%1", writer, conf, true); + GetConfig("Language.General.GroupFlags", "&eGroup flags: &6%1", writer, conf, true); + GetConfig("Language.General.OthersFlags", "&eOthers flags: &6%1", writer, conf, true); + GetConfig("Language.General.Moved", "&eMoved...", writer, conf, true); + GetConfig("Language.General.Name", "&eName: &6%1", writer, conf, true); + GetConfig("Language.General.Lists", "&eLists: &6", writer, conf, true); + GetConfig("Language.General.Residences", "&eResidences&6", writer, conf, true); + GetConfig("Language.General.Owner", "&eOwner: &6%1", writer, conf, true); + GetConfig("Language.General.World", "&eWorld: &6%1", writer, conf, true); + GetConfig("Language.General.Subzones", "&eSubzones", writer, conf, true); + writer.addComment("Language.General.NewPlayerInfo", "The below lines represent various messages residence sends to the players.", + "Note that some messages have variables such as %1 that are inserted at runtime."); + GetConfig("Language.General.NewPlayerInfo", + "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", + writer, conf, true); + writer.addComment("CommandHelp", ""); GetConfig("CommandHelp.Description", "Contains Help for Residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.Description", "Main Residence Command", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.Info", Arrays.asList("Use /res [command] ? to view more help Information."), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.Info", Arrays.asList("&2Use &6/res [command] ? &2to view more help Information."), writer, conf, true); // res select GetConfig("CommandHelp.SubCommands.res.SubCommands.select.Description", "Selection Commands", writer, conf, true); @@ -1093,6 +1094,27 @@ public void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.rt.Info", Arrays.asList("Usage: /res rt", "Teleports you to random location in defined world."), writer, conf, true); + // res rc + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.Description", "Joins current or defined residence chat chanel", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.Info", + Arrays.asList("Usage: /res rc (residence)", "Teleports you to random location in defined world."), writer, conf, true); + + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.leave.Description", "Leaves current residence chat chanel", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.leave.Info", Arrays.asList("Usage: /res rc leave", + "If you are in residence chat cnahel then you will leave it"), writer, conf, true); + + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setcolor.Description", "Sets residence chat chanel text color", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setcolor.Info", Arrays.asList("Usage: /res rc setcolor [colorCode]", + "Sets residence chat chanel text color"), writer, conf, true); + + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setprefix.Description", "Sets residence chat chanel prefix", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setprefix.Info", Arrays.asList("Usage: /res rc setprefix [newName]", + "Sets residence chat chanel prefix"), writer, conf, true); + + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.kick.Description", "Kicks player from chanel", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.kick.Info", Arrays.asList("Usage: /res rc kick [player]", + "Kicks player from chanel"), writer, conf, true); + // res expand GetConfig("CommandHelp.SubCommands.res.SubCommands.expand.Description", "Expands residence in direction you looking", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.expand.Info", @@ -1288,12 +1310,12 @@ public void LoadLang(String lang) { writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.sublist.Args", "[residence]", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.default.Description", "Reset residence to default flags.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.default.Info", - Arrays.asList("Usage: /res default ", + GetConfig("CommandHelp.SubCommands.res.SubCommands.reset.Description", "Reset residence to default flags.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.reset.Info", + Arrays.asList("Usage: /res reset ", "Resets the flags on a residence to their default. You must be the owner or an admin to do this."), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.default.Args", "[residence]", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.reset.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Description", "Renames a residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Info", @@ -1384,7 +1406,7 @@ public void LoadLang(String lang) { Arrays.asList("Usage: /res current"), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.signupdate.Description", "Updated residence signs (Admin only)", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.signupdate.Description", "Updated residence signs", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.signupdate.Info", Arrays.asList("Usage: /res signupdate"), writer, conf, true); @@ -1451,9 +1473,13 @@ public void LoadLang(String lang) { Arrays.asList("Usage: /resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes."), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Description", "Converts ResidenceSigns plugins saved signs.", writer, conf, - true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.ressignconvert.Info", Arrays.asList("Usage: /ressignconvert"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.removeworld.Description", "Remove all residences from world", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.removeworld.Info", + Arrays.asList("Usage: /res removeworld [worldname]", "Can only be used from console"), writer, conf, true); + + GetConfig("CommandHelp.SubCommands.res.SubCommands.signconvert.Description", "Converts signs from ResidenceSign plugin", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.signconvert.Info", + Arrays.asList("Usage: /res signconvert", "Will try to convert saved sign data from 3rd party plugin"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.version.Description", "how residence version", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.version.Info", diff --git a/src/com/bekvon/bukkit/residence/NewLanguage.java b/src/com/bekvon/bukkit/residence/NewLanguage.java deleted file mode 100644 index de3966547..000000000 --- a/src/com/bekvon/bukkit/residence/NewLanguage.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.bekvon.bukkit.residence; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Set; - -import org.bukkit.ChatColor; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.plugin.java.JavaPlugin; - -public class NewLanguage { - public FileConfiguration enlocale; - public FileConfiguration customlocale; - private Residence plugin; - - public NewLanguage(Residence plugin) { - this.plugin = plugin; - } - - /** - * Reloads the config - */ - public void LanguageReload() { - customlocale = new YmlMaker((JavaPlugin) plugin, "Language/" + Residence.getConfigManager().language + ".yml").getConfig(); - enlocale = new YmlMaker((JavaPlugin) plugin, "Language/English.yml").getConfig(); - if (customlocale == null) - customlocale = enlocale; - } - - /** - * Get the message with the correct key - * - * @param key - * - the key of the message - * @return the message - */ - public String getMessage(String key) { - return getMessage(key, ""); - } - - /** - * Get the message with the correct key - * - * @param key - * - the path of the message - * @param variables - * - the variables separated with % - * @return the message - */ - public String getMessage(String key, int variables) { - return getMessage(key, String.valueOf(variables)); - } - - public String getMessage(String key, String variables) { - if (!key.contains(".")) - key = "Language." + key; - String missing = "Missing locale for " + key; - String message = ""; - if (customlocale == null || !customlocale.contains(key)) - message = enlocale.contains(key) == true ? enlocale.getString(key) : missing; - message = customlocale.contains(key) == true ? customlocale.getString(key) : missing; - - List var = new ArrayList(); - - if (!variables.contains("%")) { - var.add(variables); - } else { - var = new ArrayList(Arrays.asList(variables.split("%"))); - } - for (int i = 1; i <= var.size(); i++) { - message = message.replace("%" + i, var.get(i - 1)); - } - return ChatColor.translateAlternateColorCodes('&', message); - } - - /** - * Get the message with the correct key - * - * @param key - * - the key of the message - * @return the message - */ - public String getDefaultMessage(String key) { - String missing = "Missing locale for " + key; - return enlocale.contains(key) == true ? ChatColor.translateAlternateColorCodes('&', enlocale.getString(key)) : missing; - } - - /** - * Get the message with the correct key - * - * @param key - * - the key of the message - * @return the message - */ - public List getMessageList(String key) { - String missing = "Missing locale for " + key; - if (customlocale.isList(key)) - return Locale.ColorsArray(customlocale.getStringList(key), true); - return enlocale.getStringList(key).size() > 0 ? Locale.ColorsArray(enlocale.getStringList(key), true) : Arrays.asList(missing); - } - - /** - * Get the message with the correct key - * - * @param key - * - the key of the message - * @return the message - */ - public Set getKeyList(String key) { - if (customlocale.isConfigurationSection(key)) - return customlocale.getConfigurationSection(key).getKeys(false); - return enlocale.getConfigurationSection(key).getKeys(false); - } - - /** - * Check if key exists - * - * @param key - * - the key of the message - * @return true/false - */ - public boolean containsKey(String key) { - if (customlocale == null || !customlocale.contains(key)) - return enlocale.contains(key); - return customlocale.contains(key); - } -} diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 8f1ba4ac3..6f747d93a 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -33,8 +33,11 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; +import org.dynmap.DynmapAPI; import com.bekvon.bukkit.residence.chat.ChatManager; +import com.bekvon.bukkit.residence.dynmap.DynMapListeners; +import com.bekvon.bukkit.residence.dynmap.DynMapManager; import com.bekvon.bukkit.residence.economy.BOSEAdapter; import com.bekvon.bukkit.residence.economy.EconomyInterface; import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter; @@ -59,12 +62,14 @@ import com.bekvon.bukkit.residence.protection.PermissionListManager; import com.bekvon.bukkit.residence.protection.ResidenceManager; import com.bekvon.bukkit.residence.protection.ResidencePermissions; +import com.bekvon.bukkit.residence.protection.PlayerManager; import com.bekvon.bukkit.residence.protection.WorldFlagManager; import com.bekvon.bukkit.residence.selection.SelectionManager; import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; import com.bekvon.bukkit.residence.signsStuff.SignUtil; +import com.bekvon.bukkit.residence.spout.ResidenceSpout; import com.bekvon.bukkit.residence.spout.ResidenceSpoutListener; import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.HelpEntry; @@ -74,7 +79,9 @@ import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.TabComplete; import com.bekvon.bukkit.residence.utils.VersionChecker; +import com.bekvon.bukkit.residence.utils.YmlMaker; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; +import com.bekvon.bukkit.residence.api.*; import com.earth2me.essentials.Essentials; import com.griefcraft.lwc.LWC; import com.griefcraft.lwc.LWCPlugin; @@ -99,6 +106,8 @@ */ public class Residence extends JavaPlugin { + protected static String ResidenceVersion; + protected static List authlist; protected static ResidenceManager rmanager; protected static SelectionManager smanager; protected static PermissionManager gmanager; @@ -110,6 +119,7 @@ public class Residence extends JavaPlugin { protected static ResidencePlayerListener plistener; protected static ResidenceEntityListener elistener; protected static ResidenceSpoutListener slistener; + protected static ResidenceSpout spout; protected static ResidenceFixesListener flistener; @@ -124,13 +134,13 @@ public class Residence extends JavaPlugin { protected static ChatManager chatmanager; protected static Server server; protected static HelpEntry helppages; - protected static Language language; - protected static Locale LocaleManager; - protected static NewLanguage NewLanguageManager; + protected static LocaleManager LocaleManager; + protected static Language NewLanguageManager; protected static PlayerManager PlayerManager; protected static FlagUtil FlagUtilManager; protected static ShopSignUtil ShopSignUtilManager; protected static RandomTp RandomTpManager; + protected static DynMapManager DynManager; public static Plugin instance2; protected boolean firstenable = true; @@ -148,8 +158,8 @@ public class Residence extends JavaPlugin { protected static VersionChecker versionChecker; protected static boolean initsuccess = false; public static Map deleteConfirm; - protected static List resadminToggle; - private final static String[] validLanguages = { "English", "German", "French", "Hungarian", "Spanish", "Chinese", "Czech", "Brazilian", "Polish", "Lithuanian" }; + public static List resadminToggle; + private final static String[] validLanguages = { "English" }; public static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); public static WorldEditPlugin wep = null; public static WorldGuardPlugin wg = null; @@ -162,6 +172,66 @@ public class Residence extends JavaPlugin { private static NMS nms; static LWC lwc; + public static HashMap rtMap = new HashMap(); + public static List teleportDelayMap = new ArrayList(); + public static HashMap teleportMap = new HashMap(); + + public static HashMap getTeleportMap() { + return teleportMap; + } + + public static List getTeleportDelayMap() { + return teleportDelayMap; + } + + public static HashMap getRandomTeleportMap() { + return rtMap; + } + + // API + private static ResidenceApi API = new ResidenceApi(); + private static MarketBuyInterface MarketBuyAPI = null; + private static MarketRentInterface MarketRentAPI = null; + private static ResidencePlayerInterface PlayerAPI = null; + private static ResidenceInterface ResidenceAPI = null; + private static ChatInterface ChatAPI = null; + + public static ResidencePlayerInterface getPlayerManagerAPI() { + if (PlayerAPI == null) + PlayerAPI = PlayerManager; + return PlayerAPI; + } + + public static ResidenceInterface getResidenceManagerAPI() { + if (ResidenceAPI == null) + ResidenceAPI = rmanager; + return ResidenceAPI; + } + + public static MarketRentInterface getMarketRentManagerAPI() { + if (MarketRentAPI == null) + MarketRentAPI = rentmanager; + return MarketRentAPI; + } + + public static MarketBuyInterface getMarketBuyManagerAPI() { + if (MarketBuyAPI == null) + MarketBuyAPI = tmanager; + return MarketBuyAPI; + + } + + public static ChatInterface getResidenceChatAPI() { + if (ChatAPI == null) + ChatAPI = chatmanager; + return ChatAPI; + } + + public static ResidenceApi getAPI() { + return API; + } + // API end + public static NMS getNms() { return nms; } @@ -242,6 +312,9 @@ public void onDisable() { if (cmanager.enabledRentSystem()) { server.getScheduler().cancelTask(rentBukkitId); } + + getDynManager().getMarkerSet().deleteMarkerSet(); + if (initsuccess) { try { saveYml(); @@ -256,13 +329,15 @@ public void onDisable() { @Override public void onEnable() { try { - -// instance = this; initsuccess = false; deleteConfirm = new HashMap(); resadminToggle = new ArrayList(); server = this.getServer(); dataFolder = this.getDataFolder(); + + ResidenceVersion = this.getDescription().getVersion(); + authlist = this.getDescription().getAuthors(); + if (!dataFolder.isDirectory()) { dataFolder.mkdirs(); } @@ -357,11 +432,12 @@ public void onEnable() { chatmanager = new ChatManager(); rentmanager = new RentManager(); - LocaleManager = new Locale(this); + LocaleManager = new LocaleManager(this); PlayerManager = new PlayerManager(this); ShopSignUtilManager = new ShopSignUtil(this); RandomTpManager = new RandomTp(this); + DynManager = new DynMapManager(this); Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); if (lwcp != null) @@ -397,7 +473,6 @@ public void onEnable() { langconfig.load(in); helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); - language = Language.parseText(langconfig, "Language"); } else { System.out.println("[Residence] Language file does not exist..."); } @@ -420,7 +495,6 @@ public void onEnable() { langconfig.load(in); helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); - language = Language.parseText(langconfig, "Language"); } else { System.out.println("[Residence] Language file does not exist..."); } @@ -467,7 +541,7 @@ public void onEnable() { getOfflinePlayerMap().put(name.toLowerCase(), player); } Bukkit.getConsoleSender().sendMessage("[Residence] Player data loaded: " + getOfflinePlayerMap().size()); - } else { + } else { Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { @Override public void run() { @@ -544,13 +618,20 @@ public void run() { pm.registerEvents(plistener, this); pm.registerEvents(elistener, this); pm.registerEvents(flistener, this); - pm.registerEvents(shlistener, this); + // DynMap + Plugin dynmap = server.getPluginManager().getPlugin("dynmap"); + if (dynmap != null && getConfigManager().DynMapUse) { + pm.registerEvents(new DynMapListeners(), this); + getDynManager().api = (DynmapAPI) dynmap; + getDynManager().activate(); + } + if (Bukkit.getVersion().toString().contains("Spigot") || Bukkit.getVersion().toString().contains("spigot")) pm.registerEvents(spigotlistener, this); - NewLanguageManager = new NewLanguage(this); + NewLanguageManager = new Language(this); getLM().LanguageReload(); // 1.8 event @@ -565,6 +646,7 @@ public void run() { if (cmanager.enableSpout()) { slistener = new ResidenceSpoutListener(); pm.registerEvents(slistener, this); + spout = new ResidenceSpout(this); } firstenable = false; } else { @@ -644,10 +726,6 @@ public void consoleMessage(String message) { console.sendMessage("[Residence] " + message); } - public static void sendMessage(Player player, String message) { - player.sendMessage(org.bukkit.ChatColor.translateAlternateColorCodes('&', message)); - } - public static boolean validName(String name) { if (name.contains(":") || name.contains(".") || name.contains("|")) { return false; @@ -683,6 +761,14 @@ public static ShopSignUtil getShopSignUtilManager() { return ShopSignUtilManager; } + public static ResidenceSpout getSpout() { + return spout; + } + + public static ResidenceSpoutListener getSpoutListener() { + return slistener; + } + public static ResidenceManager getResidenceManager() { return rmanager; } @@ -699,6 +785,14 @@ public static PermissionManager getPermissionManager() { return gmanager; } + public static PermissionListManager getPermissionListManager() { + return pmanager; + } + + public static DynMapManager getDynManager() { + return DynManager; + } + public static RandomTp getRandomTpManager() { return RandomTpManager; } @@ -743,11 +837,11 @@ public static RentManager getRentManager() { return rentmanager; } - public static Locale getLocaleManager() { + public static LocaleManager getLocaleManager() { return LocaleManager; } - public static NewLanguage getLM() { + public static Language getLM() { return NewLanguageManager; } @@ -767,11 +861,16 @@ public static ChatManager getChatManager() { return chatmanager; } - public static Language getLanguage() { - if (language == null) { - language = new Language(); - } - return language; + public static WorldEditPlugin getWEplugin() { + return wep; + } + + public static String getResidenceVersion() { + return ResidenceVersion; + } + + public static List getAuthors() { + return authlist; } public static FlagPermissions getPermsByLoc(Location loc) { @@ -1283,7 +1382,7 @@ public static boolean isPlayerExist(Player player, String name, boolean inform) if (Residence.getPlayerUUID(name) != null) return true; if (inform) - player.sendMessage(getLM().getMessage("Language.InvalidPlayer")); + player.sendMessage(getLM().getMessage("Invalid.Player")); return false; } @@ -1351,4 +1450,24 @@ public static String getPlayerName(UUID uuid) { else return null; } + + public static boolean isDisabledWorldListener(World world) { + return isDisabledWorldListener(world.getName()); + } + + public static boolean isDisabledWorldListener(String worldname) { + if (getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableListeners) + return true; + return false; + } + + public static boolean isDisabledWorldCommand(World world) { + return isDisabledWorldCommand(world.getName()); + } + + public static boolean isDisabledWorldCommand(String worldname) { + if (getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableCommands) + return true; + return false; + } } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index c118900f4..3b01508b6 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -2,67 +2,19 @@ import java.util.logging.Level; import java.util.logging.Logger; -import java.text.SimpleDateFormat; -import java.util.ArrayList; +import java.lang.reflect.InvocationTargetException; import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.TimeZone; -import java.util.Map.Entry; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.block.Block; -import org.bukkit.block.Sign; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; -import org.getspout.spoutapi.SpoutManager; - -import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; -import com.bekvon.bukkit.residence.gui.SetFlag; -import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.selection.AutoSelection; -import com.bekvon.bukkit.residence.selection.WorldGuardUtil; -import com.bekvon.bukkit.residence.shopStuff.ShopListener; -import com.bekvon.bukkit.residence.shopStuff.Board; -import com.bekvon.bukkit.residence.shopStuff.ShopVote; -import com.bekvon.bukkit.residence.shopStuff.Vote; -import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.spout.ResidenceSpout; -import com.bekvon.bukkit.residence.utils.RandomTp; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; public class ResidenceCommandListener extends Residence { - public static HashMap teleportMap = new HashMap(); - public static HashMap rtMap = new HashMap(); - public static List teleportDelayMap = new ArrayList(); - - public static List AdminCommands = Arrays.asList("setowner", "removeall", "signupdate", "listhidden", "listallhidden", "server", "clearflags", "resreload", - "resload", "ressignconvert"); - - public static HashMap getTeleportMap() { - return teleportMap; - } - - public static List getTeleportDelayMap() { - return teleportDelayMap; - } + public static List AdminCommands = Arrays.asList("removeworld", "setowner", "removeall", "signupdate", "listhidden", "listallhidden", "server", "clearflags", + "resreload", "resload", "signconvert"); public static List getAdminCommands() { return AdminCommands; @@ -74,6 +26,12 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (cevent.isCancelled()) { return true; } + + if (sender instanceof Player && !Residence.getPermissionManager().isResidenceAdmin((Player) sender) && Residence.isDisabledWorldCommand(((Player) sender).getWorld())){ + sender.sendMessage(Residence.getLM().getMessage("General.DisabledWorld")); + return true; + } + if (command.getName().equals("resreload") && args.length == 0) { if (sender instanceof Player) { Player player = (Player) sender; @@ -82,25 +40,13 @@ public boolean onCommand(CommandSender sender, Command command, String label, St sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); System.out.println("[Residence] Reloaded by " + player.getName() + "."); } else - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); } else { this.reloadPlugin(); System.out.println("[Residence] Reloaded by console."); } return true; } - if (command.getName().equals("ressignconvert") && args.length == 0) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.getSignUtil().convertSigns(sender); - } else - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } else { - Residence.getSignUtil().convertSigns(sender); - } - return true; - } if (command.getName().equals("resload")) { if (!(sender instanceof Player) || sender instanceof Player && Residence.gmanager.isResidenceAdmin((Player) sender) && ((Player) sender).hasPermission( "residence.topadmin")) { @@ -113,185 +59,18 @@ public boolean onCommand(CommandSender sender, Command command, String label, St Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); } } else - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return true; - } else if (command.getName().equals("resworld")) { - if (args.length == 2 && args[0].equalsIgnoreCase("remove")) { - if (sender instanceof ConsoleCommandSender) { - Residence.getResidenceManager().removeAllFromWorld(sender, args[1]); - return true; - } else { - sender.sendMessage(ChatColor.RED + "MUST be run from console."); - } - } - return false; } else if (command.getName().equals("rc")) { - if (!(sender instanceof Player)) + cmd cmdClass = getCmdClass(sender, "rc", new String[] { "rc" }); + if (cmdClass == null) { + sendUsage(sender, command.getName()); return true; - Player player = (Player) sender; - String pname = player.getName(); - if (Residence.cmanager.chatEnabled()) { - if (args.length == 0) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); - if (chat != null) { - Residence.getChatManager().removeFromChannel(pname); - Residence.plistener.removePlayerResidenceChat(player); - return true; - } - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); - return true; - } else { - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); - if (chat != null && chat.getChannelName().equals(res.getName())) { - Residence.getChatManager().removeFromChannel(pname); - Residence.plistener.removePlayerResidenceChat(player); - return true; - } - } - if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !Residence.gmanager.isResidenceAdmin(player)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "chat|" + res.getName())); - return false; - } - - Residence.plistener.tooglePlayerResidenceChat(player, res.getName()); - Residence.getChatManager().setChannel(pname, res); - return true; - } else if (args.length == 1) { - if (args[0].equalsIgnoreCase("l")) { - Residence.getChatManager().removeFromChannel(pname); - Residence.plistener.removePlayerResidenceChat(player); - return true; - } - ClaimedResidence res = Residence.getResidenceManager().getByName(args[0]); - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.InvalidChannel")); - return true; - } - - if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !Residence.gmanager.isResidenceAdmin(player)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "chat|" + res.getName())); - return false; - } - Residence.plistener.tooglePlayerResidenceChat(player, res.getName()); - Residence.getChatManager().setChannel(pname, res); - - return true; - } else if (args.length == 2) { - if (args[0].equalsIgnoreCase("setcolor")) { - - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); - - if (chat == null) { - player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.JoinFirst")); - return true; - } - - ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); - - if (res == null) - return false; - - if (!res.isOwner(player) && !Residence.gmanager.isResidenceAdmin(player)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - - if (!player.hasPermission("residence.chatcolor")) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - - String posibleColor = args[1]; - - if (!posibleColor.contains("&")) - posibleColor = "&" + posibleColor; - - if (posibleColor.length() != 2 || ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', posibleColor)).length() != 0) { - player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.InvalidColor")); - return true; - } - - ChatColor color = ChatColor.getByChar(posibleColor.replace("&", "")); - res.setChannelColor(color); - chat.setChannelColor(color); - player.sendMessage(ChatColor.GOLD + Residence.getLM().getMessage("Language.Chat.ChangedColor", color.name())); - return true; - } else if (args[0].equalsIgnoreCase("setprefix")) { - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); - - if (chat == null) { - player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.JoinFirst")); - return true; - } - - ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); - - if (res == null) - return false; - - if (!res.isOwner(player) && !Residence.gmanager.isResidenceAdmin(player)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - - if (!player.hasPermission("residence.chatprefix")) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - - String prefix = args[1]; - - if (prefix.length() > Residence.getConfigManager().getChatPrefixLength()) { - player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.InvalidPrefixLength", Residence.getConfigManager() - .getChatPrefixLength())); - return true; - } - - res.setChatPrefix(prefix); - chat.setChatPrefix(prefix); - player.sendMessage(ChatColor.GOLD + Residence.getLM().getMessage("Language.Chat.ChangedPrefix", ChatColor.translateAlternateColorCodes('&', - prefix))); - return true; - } else if (args[0].equalsIgnoreCase("kick")) { - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); - - if (chat == null) { - player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.JoinFirst")); - return true; - } - - ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); - - if (res == null) - return false; - - if (!res.getOwner().equals(player.getName()) && !Residence.gmanager.isResidenceAdmin(player)) { - player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("NoPermission")); - return true; - } - - if (!player.hasPermission("residence.chatkick")) { - player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("NoPermission")); - return true; - } - - String targetName = args[1]; - if (!chat.hasMember(targetName)) { - player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.NotInChannel")); - return false; - } - - chat.leave(targetName); - Residence.plistener.removePlayerResidenceChat(targetName); - player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Chat.Kicked", targetName + "%" + chat.getChannelName())); - return true; - } - } - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ChatDisabled")); } + boolean respond = cmdClass.perform(args, false, command, sender); + if (!respond) + sendUsage(sender, command.getName()); + return true; } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { boolean resadmin = false; if (sender instanceof Player) { @@ -299,7 +78,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St resadmin = true; } if (command.getName().equals("resadmin") && !Residence.gmanager.isResidenceAdmin((Player) sender)) { - ((Player) sender).sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NonAdmin")); + ((Player) sender).sendMessage(Residence.getLM().getMessage("Residence.NonAdmin")); return true; } if (command.getName().equals("res") && Residence.gmanager.isResidenceAdmin((Player) sender) && Residence.getConfigManager().getAdminFullAccess()) { @@ -308,2464 +87,115 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } else { resadmin = true; } + + + - boolean respond = commandRes(args, resadmin, command, sender); - - if (!respond) - sendUsage(sender, command.getName()); - - return true; - } - return this.onCommand(sender, command, label, args); - } - - private void sendUsage(CommandSender sender, String command) { - - sender.sendMessage(Residence.getLM().getMessage("DefaultUsage", command)); - - } - - @SuppressWarnings("deprecation") - private boolean commandRes(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { - return commandHelp(args, resadmin, sender, command); - } - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - Player player = null; - PermissionGroup group = null; - String pname = null; - if (sender instanceof Player) { - player = (Player) sender; - group = Residence.getPermissionManager().getGroup(player); - pname = player.getName(); - } else { - resadmin = true; - } - if (Residence.cmanager.allowAdminsOnly()) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AdminOnly")); - return true; - } - } - if (args.length == 0) { - return false; - } - if (args.length == 0) { - args = new String[1]; - args[0] = "?"; - } - String cmd = args[0].toLowerCase(); - if (cmd.equals("remove") || cmd.equals("delete")) { - return commandResRemove(args, resadmin, sender, page); - } - if (cmd.equals("confirm")) { - return commandResConfirm(args, resadmin, sender, page); - } - - // Test code for area regeneration with WE plugin -// if (cmd.equals("test")) { -// final long time = System.currentTimeMillis(); -// -// ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); -// -// final CuboidArea area = res.getAreaArray()[0]; -// -// final int startX = area.getLowLoc().getBlockX(); -// final int startY = area.getLowLoc().getBlockY(); -// final int startZ = area.getLowLoc().getBlockZ(); -// -// final int lX = area.getXSize(); -// final int lY = area.getYSize(); -// final int lZ = area.getZSize(); -// Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), new Runnable() { -// @Override -// public void run() { -// int i = 0; -// -// List blocks = new ArrayList(); -// -// for (int x = startX; x < startX + lX; x++) { -// for (int y = startY; y < startY + lY; y++) { -// for (int z = startZ; z < startZ + lZ; z++) { -// -// Protection prot = Residence.getLwc().getProtectionCache().getProtection(area.getWorld().getName() + ":" + x + ":" + y + ":" + z); -// -// if (prot == null) -// continue; -// i++; -// -// Debug.D("" + prot.getOwner() + " " + prot.getFormattedOwnerPlayerName()); -// Debug.D("" + prot.getX() + ":" + prot.getY() + ":" + prot.getZ()); -// } -// } -// } -// -// Debug.D("baigtas test " + (System.currentTimeMillis() - time) + " " + i + " " + blocks.size()); -// -// return; -// } -// }); -// -// Selection selection = new CuboidSelection(this.getC1().getWorld(),this.getC1(), this.getC2()); -// -// CuboidSelection selection = new CuboidSelection(player.getWorld(), area.getLowLoc(), area.getHighLoc()); -// -// try { -// Region region = selection.getRegionSelector().getRegion(); -// region.getWorld().regenerate(region, WorldEdit.getInstance().getEditSessionFactory().getEditSession(region.getWorld(), -1)); -// } catch (IncompleteRegionException e) { -// } -// -// return true; -// } - if (cmd.equals("version")) { - sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + this - .getDescription().getVersion()); - sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); - sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); - sender.sendMessage(ChatColor.GREEN + "Currently maintained by: " + ChatColor.YELLOW + "Zrips"); - String names = null; - List authlist = this.getDescription().getAuthors(); - for (String auth : authlist) { - if (names == null) - names = auth; - else - names = names + ", " + auth; - } - sender.sendMessage(ChatColor.GREEN + "Authors: " + ChatColor.YELLOW + names); - sender.sendMessage(ChatColor.DARK_AQUA + "For a command list, and help, see the wiki:"); - sender.sendMessage(ChatColor.GREEN + "https://github.com/bekvon/Residence/wiki"); - sender.sendMessage(ChatColor.AQUA + "Visit the Spigot Resource page at:"); - sender.sendMessage(ChatColor.BLUE + "https://www.spigotmc.org/resources/residence.11480/"); - sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - return true; - } - if (cmd.equals("setowner") && args.length == 3) { - if (!resadmin) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); - if (area != null) { - area.getPermissions().setOwner(args[2], true); - if (Residence.getRentManager().isForRent(area.getName())) - Residence.getRentManager().removeRentable(area.getName()); - if (Residence.tmanager.isForSale(area.getName())) - Residence.tmanager.removeFromSale(area.getName()); - area.getPermissions().applyDefaultFlags(); - - if (area.getParent() == null) { - sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " - + ChatColor.GREEN + "|" + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); - } else { - sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneOwnerChange", ChatColor.YELLOW + " " + args[1].split("\\.")[args[1] - .split("\\.").length - 1] + " " + ChatColor.GREEN + "|" + ChatColor.YELLOW + args[2] + ChatColor.GREEN)); - } - } else { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } - - if (cmd.equals("bank")) { - return commandResBank(args, resadmin, sender, page); - } - - if (player == null) { - return true; - } - if (command.getName().equals("resadmin")) { - if (args.length == 1 && args[0].equals("on")) { - Residence.resadminToggle.add(player.getName()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("AdminToggle", Residence.getLanguage().getPhrase("TurnOn"))); - return true; - } else if (args.length == 1 && args[0].equals("off")) { - Residence.resadminToggle.remove(player.getName()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("AdminToggle", Residence.getLanguage().getPhrase("TurnOff"))); - return true; + if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { + return commandHelp(args, resadmin, sender, command); } - } - if (!resadmin && Residence.resadminToggle.contains(player.getName())) { - if (!Residence.gmanager.isResidenceAdmin(player)) { - Residence.resadminToggle.remove(player.getName()); - } - } - if (cmd.equals("select")) { - return commandResSelect(args, resadmin, player, page); - } - - if (cmd.equals("expand")) { - return commandResExpand(args, resadmin, player, page); - } - - if (cmd.equals("contract")) { - return commandResContract(args, resadmin, player, page); - } - if (cmd.equals("create")) { - return commandResCreate(args, resadmin, player, page); - } - if (cmd.equals("subzone") || cmd.equals("sz")) { - return commandResSubzone(args, resadmin, player, page); - } - if (cmd.equals("gui")) { - return commandResGui(args, resadmin, player, page); - } - if (cmd.equals("sublist")) { - return commandResSublist(args, resadmin, player, page); - } - if (cmd.equals("removeall")) { - if (args.length != 2) { - return false; - } - if (resadmin || args[1].endsWith(pname)) { - Residence.getResidenceManager().removeAllByOwner(player, args[1]); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RemovePlayersResidences", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); + Player player = null; + if (sender instanceof Player) { + player = (Player) sender; } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - } - return true; - } - if (cmd.equals("compass")) { - return commandResCompass(args, resadmin, player, page); - } - if (cmd.equals("area")) { - return commandResArea(args, resadmin, player, page); - } - if (cmd.equals("lists")) { - return commandResList(args, resadmin, player, page); - } - if (cmd.equals("default")) { - if (args.length == 2) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - res.getPermissions().applyDefaultFlags(player, resadmin); - return true; - } - return false; - } - if (cmd.equals("limits")) { - if (args.length == 1 || args.length == 2) { - final String[] tempArgs = args; - final Player p = player; - Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { - @Override - public void run() { - OfflinePlayer target; - boolean rsadm = false; - if (tempArgs.length == 1) { - target = p; - rsadm = true; - } else - target = Residence.getOfflinePlayer(tempArgs[1]); - if (target == null) - return; - Residence.gmanager.getGroup(target.getName(), Residence.getConfigManager().getDefaultWorld()).printLimits(p, target, rsadm); - return; - } - }); - return true; + resadmin = true; } - return false; - } - if (cmd.equals("signupdate")) { - if (args.length == 1) { + if (Residence.cmanager.allowAdminsOnly()) { if (!resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - int number = Residence.getSignUtil().updateAllSigns(); - player.sendMessage(Residence.getLanguage().getPhrase("SignsUpdated", String.valueOf(number))); - return true; - } - return false; - } - if (cmd.equals("info")) { - if (args.length == 1) { - String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - if (area != null) { - Residence.getResidenceManager().printAreaInfo(area, player); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 2) { - Residence.getResidenceManager().printAreaInfo(args[1], player); - return true; - } - return false; - } - if (cmd.equals("padd")) { - String baseCmd = "res"; - if (resadmin) - baseCmd = "resadmin"; - if (args.length == 2) { - if (!Residence.isPlayerExist(player, args[1], true)) - return false; - - Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " trusted true"); - return true; - } - if (args.length == 3) { - if (!Residence.isPlayerExist(player, args[2], true)) - return false; - Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " " + args[2] + " trusted true"); - return true; - } - return false; - } - if (cmd.equals("pdel")) { - String baseCmd = "res"; - if (resadmin) - baseCmd = "resadmin"; - if (args.length == 2) { - Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " trusted remove"); - return true; - } - if (args.length == 3) { - Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " " + args[2] + " trusted remove"); - return true; - } - return false; - } - if (cmd.equals("check")) { - if (args.length == 3 || args.length == 4) { - if (args.length == 4) { - pname = args[3]; - } - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + player.sendMessage(Residence.getLM().getMessage("General.AdminOnly")); return true; } - if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { - player.sendMessage(Residence.getLanguage().getPhrase("FlagCheckFalse", ChatColor.YELLOW + args[2] + ChatColor.RED + "|" + ChatColor.YELLOW + pname - + ChatColor.RED - + "|" + ChatColor.YELLOW + args[1] + ChatColor.RED)); - } else { - player.sendMessage(Residence.getLanguage().getPhrase("FlagCheckTrue", ChatColor.GREEN + args[2] + ChatColor.YELLOW + "|" + ChatColor.GREEN + pname - + ChatColor.YELLOW - + "|" + ChatColor.YELLOW + args[1] + ChatColor.RED + "|" + (res.getPermissions().playerHas(pname, res.getPermissions().getWorld(), args[2], false) - ? ChatColor.GREEN + "TRUE" : ChatColor.RED + "FALSE"))); - } - return true; } - return false; - } - if (cmd.equals("current")) { - if (args.length != 1) { + if (args.length == 0) { return false; } - String res = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); - } else { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("InResidence", ChatColor.YELLOW + res + ChatColor.GREEN)); - } - return true; - } - if (cmd.equals("set")) { - return commandResSet(args, resadmin, player, page); - } - if (cmd.equals("pset")) { - return commandResPset(args, resadmin, player, page); - } - if (cmd.equals("gset")) { - return commandResGset(args, resadmin, player, page); - } - if (cmd.equals("lset")) { - return commandResLset(args, resadmin, player, page); - } - if (cmd.equals("list")) { - if (args.length == 1) { - Residence.getResidenceManager().listResidences(player); - return true; - } else if (args.length == 2) { - try { - Integer.parseInt(args[1]); - Residence.getResidenceManager().listResidences(player, page); - } catch (Exception ex) { - Residence.getResidenceManager().listResidences(player, args[1]); - } - return true; - } else if (args.length == 3) { - Residence.getResidenceManager().listResidences(player, args[1], page); - return true; + if (args.length == 0) { + args = new String[1]; + args[0] = "?"; } - return false; - } - if (cmd.equals("shop")) { - if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("votes") || args[1].equalsIgnoreCase("likes"))) { - - int VotePage = 1; - - ClaimedResidence res = null; - if (args.length == 2) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); - return true; - } - } else if (args.length == 3) { - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - try { - VotePage = Integer.parseInt(args[2]); - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); - return true; - } - } catch (Exception ex) { - player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); - return true; - } - } - - } else if (args.length == 4) { - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); - return true; - } - try { - VotePage = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); - return true; - } - } - - if (res == null) { - player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); - return true; - } - - Map> ShopList = Residence.getShopSignUtilManager().GetAllVoteList(); - - List VoteList = new ArrayList(); - if (ShopList.containsKey(res.getName())) { - VoteList = ShopList.get(res.getName()); - } - - String separator = ChatColor.GOLD + ""; - String simbol = "\u25AC"; - for (int i = 0; i < 5; i++) { - separator += simbol; - } - int pagecount = (int) Math.ceil((double) VoteList.size() / (double) 10); - if (page > pagecount || page < 1) { - sender.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Shop.NoVotes")); - return true; - } - - player.sendMessage(Residence.getLM().getMessage("Language.Shop.VotesTopLine", separator + "%" + res.getName() + "%" + VotePage + "%" + pagecount + "%" - + separator)); - - int start = VotePage * 10 - 9; - int end = VotePage * 10 + 1; - int position = 0; - int i = start; - for (ShopVote one : VoteList) { - position++; - - if (position < start) - continue; - - if (position >= end) - break; - - Date dNow = new Date(one.getTime()); - SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss"); - ft.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); - String timeString = ft.format(dNow); - - String message = Residence.getLM().getMessage("Language.Shop.VotesList", i + "%" + one.getName() + "%" + (Residence.getConfigManager().isOnlyLike() - ? "" : one.getVote()) + "%" + timeString); - player.sendMessage(message); - i++; - } - if (pagecount == 1) - return true; - - int NextPage = page + 1; - NextPage = page < pagecount ? NextPage : page; - int Prevpage = page - 1; - Prevpage = page > 1 ? Prevpage : page; + String cmd = args[0].toLowerCase(); - String prevCmd = "/res shop votes " + res.getName() + " " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLanguage().getPhrase("PrevInfoPage") - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; - String nextCmd = "/res shop votes " + res.getName() + " " + NextPage; - String next = " {\"text\":\"" + Residence.getLanguage().getPhrase("NextInfoPage") + " " + separator - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; - - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); + switch (cmd) { + case "delete": + cmd = "remove"; + break; + case "sz": + cmd = "subzone"; + break; + } + cmd cmdClass = getCmdClass(sender, command.getName(), args); + if (cmdClass == null) { + sendUsage(sender, command.getName()); return true; } - if ((args.length == 2 || args.length == 3) && args[1].equalsIgnoreCase("list")) { - - int Shoppage = 1; - if (args.length == 3) { - try { - Shoppage = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); - return true; - } + if (!resadmin && Residence.resadminToggle.contains(player.getName())) { + if (!Residence.gmanager.isResidenceAdmin(player)) { + Residence.resadminToggle.remove(player.getName()); } + } + boolean respond = cmdClass.perform(args, resadmin, command, sender); + if (!respond) + sendUsage(sender, command.getName()); - Map ShopList = Residence.getShopSignUtilManager().getSortedShopList(); - - String separator = ChatColor.GOLD + ""; - String simbol = "\u25AC"; - for (int i = 0; i < 5; i++) { - separator += simbol; - } - int pagecount = (int) Math.ceil((double) ShopList.size() / (double) 10); - if (page > pagecount || page < 1) { - sender.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.Shop.NoVotes")); - return true; - } - - player.sendMessage(Residence.getLM().getMessage("Language.Shop.ListTopLine", separator + "%" + Shoppage + "%" + pagecount + "%" + separator)); - - int start = Shoppage * 10 - 9; - int end = Shoppage * 10 + 1; - int position = 0; - int i = start; - for (Entry one : ShopList.entrySet()) { - position++; - - if (position < start) - continue; - - if (position >= end) - break; - - Vote vote = Residence.getShopSignUtilManager().getAverageVote(one.getKey()); - String votestat = ""; - - if (Residence.getConfigManager().isOnlyLike()) { - votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Language.Shop.ListLiked", Residence.getShopSignUtilManager().getLikes(one - .getKey())); - } else - votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Language.Shop.ListVoted", vote.getVote() + "%" + vote.getAmount()); - ClaimedResidence res = Residence.getResidenceManager().getByName(one.getKey()); - String message = Residence.getLM().getMessage("Language.Shop.List", i + "%" + one.getKey() + "%" + Residence.getResidenceManager().getByName(one - .getKey()).getOwner() + "%" + votestat); + return true; + } + return this.onCommand(sender, command, label, args); + } - String desc = res.getShopDesc() == null ? Residence.getLM().getMessage("Language.Shop.NoDesc") : Residence.getLM().getMessage( - "Language.Shop.Desc", ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); + private cmd getCmdClass(CommandSender sender, String command, String[] args) { + cmd cmdClass = null; + try { + Class nmsClass; + nmsClass = Class.forName("com.bekvon.bukkit.residence.commands." + args[0].toLowerCase()); + if (cmd.class.isAssignableFrom(nmsClass)) { + cmdClass = (cmd) nmsClass.getConstructor().newInstance(); + } + } catch (ClassNotFoundException e) { + } catch (InstantiationException e) { + } catch (IllegalAccessException e) { + } catch (IllegalArgumentException e) { + } catch (InvocationTargetException e) { + } catch (NoSuchMethodException e) { + } catch (SecurityException e) { + } + return cmdClass; + } - String prev = "[\"\",{\"text\":\"" + ChatColor.GOLD + " " + message - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/res tp " + one.getKey() - + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; + private void sendUsage(CommandSender sender, String command) { + sender.sendMessage(Residence.getLM().getMessage("General.DefaultUsage", command)); + } - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev); + private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender, Command command) { + if (Residence.helppages == null) + return false; - i++; - } + String helppath = "res"; + for (int i = 0; i < args.length; i++) { + if (args[i].equalsIgnoreCase("?")) { + break; + } + helppath = helppath + "." + args[i]; + } + int page = 1; + if (!args[args.length - 1].equalsIgnoreCase("?")) { + try { + page = Integer.parseInt(args[args.length - 1]); + } catch (Exception ex) { + sender.sendMessage(Residence.getLM().getMessage("General.InvalidHelp")); + } + } - if (pagecount == 1) - return true; + if (command.getName().equalsIgnoreCase("res")) + resadmin = false; - int NextPage = page + 1; - NextPage = page < pagecount ? NextPage : page; - int Prevpage = page - 1; - Prevpage = page > 1 ? Prevpage : page; + if (Residence.helppages.containesEntry(helppath)) + Residence.helppages.printHelp(sender, page, helppath, resadmin); - String prevCmd = "/res shop list " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLanguage().getPhrase("PrevInfoPage") - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; - String nextCmd = "/res shop list " + NextPage; - String next = " {\"text\":\"" + Residence.getLanguage().getPhrase("NextInfoPage") + " " + separator - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + return true; + } - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); - - return true; - } - - if (args.length == 2 && args[1].equalsIgnoreCase("DeleteBoard")) { - - if (!resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - - ShopListener.Delete.add(player.getName()); - player.sendMessage(Residence.getLM().getMessage("Language.Shop.DeleteBoard")); - return true; - } - if (args.length > 2 && args[1].equalsIgnoreCase("setdesc")) { - - ClaimedResidence res = null; - - String desc = ""; - if (args.length >= 2) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); - return true; - } else { - for (int i = 2; i < args.length; i++) { - desc += args[i]; - if (i < args.length - 1) - desc += " "; - } - } - } - - if (res == null) - return true; - - if (!res.isOwner(player) && !resadmin) { - player.sendMessage(Residence.getLanguage().getPhrase("NonAdmin")); - return true; - } - - res.setShopDesc(desc); - player.sendMessage(Residence.getLM().getMessage("Language.Shop.DescChange", ChatColor.translateAlternateColorCodes('&', desc))); - return true; - } - if (args.length == 3 && args[1].equalsIgnoreCase("createboard")) { - - if (!resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - - if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - player.sendMessage(Residence.getLanguage().getPhrase("SelectPoints")); - return true; - } - - int place = 1; - try { - place = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); - return true; - } - - if (place < 1) - place = 1; - - Location loc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); - Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); - - if (loc1.getBlockY() < loc2.getBlockY()) { - player.sendMessage(Residence.getLM().getMessage("Language.Shop.InvalidSelection")); - return true; - } - - Board newTemp = new Board(); - newTemp.setStartPlace(place); - newTemp.setWorld(loc1.getWorld().getName()); - newTemp.setTX(loc1.getBlockX()); - newTemp.setTY(loc1.getBlockY()); - newTemp.setTZ(loc1.getBlockZ()); - newTemp.setBX(loc2.getBlockX()); - newTemp.setBY(loc2.getBlockY()); - newTemp.setBZ(loc2.getBlockZ()); - - newTemp.GetTopLocation(); - newTemp.GetBottomLocation(); - - newTemp.GetLocations(); - - Residence.getShopSignUtilManager().addBoard(newTemp); - player.sendMessage(Residence.getLM().getMessage("Language.Shop.NewBoard")); - - Residence.getShopSignUtilManager().BoardUpdate(); - Residence.getShopSignUtilManager().saveSigns(); - - return true; - - } - if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("vote") || args[1].equalsIgnoreCase("like"))) { - String resName = ""; - int vote = 5; - ClaimedResidence res = null; - if (args.length == 3) { - - if (Residence.getConfigManager().isOnlyLike()) { - - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - player.sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - vote = Residence.getConfigManager().getVoteRangeTo(); - - } else { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); - return true; - } - - try { - vote = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); - return true; - } - } - } else if (args.length == 2 && Residence.getConfigManager().isOnlyLike()) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(Residence.getLanguage().getPhrase("NotInResidence")); - return true; - } - vote = Residence.getConfigManager().getVoteRangeTo(); - } else if (args.length == 4 && !Residence.getConfigManager().isOnlyLike()) { - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - player.sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - try { - vote = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); - return true; - } - } else if (args.length == 3 && !Residence.getConfigManager().isOnlyLike()) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - try { - vote = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(Residence.getLanguage().getPhrase("UseNumbers")); - return true; - } - } else { - return false; - } - - resName = res.getName(); - - if (!res.getPermissions().has("shop", false)) { - player.sendMessage(Residence.getLM().getMessage("Language.Shop.CantVote")); - return true; - } - - if (vote < Residence.getConfigManager().getVoteRangeFrom() || vote > Residence.getConfigManager().getVoteRangeTo()) { - player.sendMessage(Residence.getLM().getMessage("Language.Shop.VotedRange", Residence.getConfigManager().getVoteRangeFrom() + "%" + Residence - .getConfigManager().getVoteRangeTo())); - return true; - } - - ConcurrentHashMap> VoteList = Residence.getShopSignUtilManager().GetAllVoteList(); - - if (VoteList.containsKey(resName)) { - List list = VoteList.get(resName); - boolean found = false; - for (ShopVote OneVote : list) { - if (OneVote.getName().equalsIgnoreCase(player.getName())) { - - if (Residence.getConfigManager().isOnlyLike()) { - player.sendMessage(Residence.getLM().getMessage("Language.Shop.AlreadyLiked", resName)); - return true; - } - - player.sendMessage(Residence.getLM().getMessage("Language.Shop.VoteChanged", OneVote.getVote() + "%" + vote + "%" + resName)); - OneVote.setVote(vote); - OneVote.setTime(System.currentTimeMillis()); - found = true; - break; - } - } - if (!found) { - ShopVote newVote = new ShopVote(player.getName(), vote, System.currentTimeMillis()); - list.add(newVote); - - if (Residence.getConfigManager().isOnlyLike()) - player.sendMessage(Residence.getLM().getMessage("Language.Shop.Liked", resName)); - else - player.sendMessage(Residence.getLM().getMessage("Language.Shop.Voted", vote + "%" + resName)); - } - } else { - List list = new ArrayList(); - ShopVote newVote = new ShopVote(player.getName(), vote, System.currentTimeMillis()); - list.add(newVote); - VoteList.put(resName, list); - if (Residence.getConfigManager().isOnlyLike()) - player.sendMessage(Residence.getLM().getMessage("Language.Shop.Liked", resName)); - else - player.sendMessage(Residence.getLM().getMessage("Language.Shop.Voted", vote + "%" + resName)); - } - Residence.getShopSignUtilManager().saveShopVotes(); - Residence.getShopSignUtilManager().BoardUpdate(); - return true; - } - return false; - } - if (cmd.equals("listhidden")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - if (args.length == 1) { - Residence.getResidenceManager().listResidences(player, 1, true); - return true; - } else if (args.length == 2) { - try { - Integer.parseInt(args[1]); - Residence.getResidenceManager().listResidences(player, page, true); - } catch (Exception ex) { - Residence.getResidenceManager().listResidences(player, args[1], 1, true); - } - return true; - } else if (args.length == 3) { - Residence.getResidenceManager().listResidences(player, args[1], page, true); - return true; - } - return false; - } - if (cmd.equals("rename")) { - if (args.length == 3) { - Residence.getResidenceManager().renameResidence(player, args[1], args[2], resadmin); - return true; - } - return false; - } - if (cmd.equals("renamearea")) { - if (args.length == 4) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - res.renameArea(player, args[2], args[3], resadmin); - return true; - } - return false; - } - if (cmd.equals("unstuck")) { - if (args.length != 1) { - return false; - } - group = Residence.gmanager.getGroup(player); - if (!group.hasUnstuckAccess()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); - } else { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Moved") + "..."); - player.teleport(res.getOutsideFreeLoc(player.getLocation())); - } - return true; - } - if (cmd.equals("kick")) { - if (args.length != 2) { - return false; - } - Player targetplayer = Bukkit.getPlayer(args[1]); - if (targetplayer == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotOnline")); - return true; - } - group = Residence.gmanager.getGroup(player); - if (!group.hasKickAccess() && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(targetplayer.getLocation()); - - if (res == null || res != null && !res.isOwner(player) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("PlayerNotInResidence")); - return true; - } - - if (res.isOwner(player)) { - if (res.getPlayersInResidence().contains(targetplayer)) { - - Location loc = Residence.getConfigManager().getKickLocation(); - if (loc != null) - targetplayer.teleport(loc); - else - targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation())); - targetplayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("Kicked") + "!"); - } - } - - } - if (cmd.equals("mirror")) { - if (args.length != 3) { - return false; - } - Residence.getResidenceManager().mirrorPerms(player, args[2], args[1], resadmin); - return true; - } - if (cmd.equals("listall")) { - if (args.length == 1) { - Residence.getResidenceManager().listAllResidences(player, 1); - } else if (args.length == 2) { - try { - Residence.getResidenceManager().listAllResidences(player, page); - } catch (Exception ex) { - } - } else { - return false; - } - return true; - } - if (cmd.equals("listallhidden")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - if (args.length == 1) { - Residence.getResidenceManager().listAllResidences(player, 1, true); - } else if (args.length == 2) { - try { - Residence.getResidenceManager().listAllResidences(player, page, true); - } catch (Exception ex) { - } - } else { - return false; - } - return true; - } - if (cmd.equals("material")) { - if (args.length != 2) { - return false; - } - try { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MaterialGet", ChatColor.GOLD + args[1] + ChatColor.GREEN + "|" + ChatColor.RED - + Material - .getMaterial(Integer.parseInt(args[1])).name() + ChatColor.GREEN)); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidMaterial")); - } - return true; - } - if (cmd.equals("tpset")) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - res.setTpLoc(player, resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } - if (cmd.equals("tp")) { - if (args.length != 2) { - return false; - } - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - res.tpToResidence(player, player, resadmin); - return true; - } - - if (cmd.equals("rt")) { - if (args.length != 1) { - return false; - } - - int sec = Residence.getConfigManager().getrtCooldown(); - if (rtMap.containsKey(player.getName()) && !resadmin) { - if (rtMap.get(player.getName()) + (sec * 1000) > System.currentTimeMillis()) { - int left = (int) (sec - ((System.currentTimeMillis() - rtMap.get(player.getName())) / 1000)); - player.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Language.RandomTeleport.TpLimit", String.valueOf(left))); - return true; - } - } - - if (!player.hasPermission("residence.randomtp") && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - - Location loc = RandomTp.getRandomlocation(player.getLocation().getWorld().getName()); - rtMap.put(pname, System.currentTimeMillis()); - - if (loc == null) { - player.sendMessage(Residence.getLM().getMessage("Language.RandomTeleport.IncorrectLocation", String.valueOf(sec))); - return true; - } - - if (Residence.getConfigManager().getTeleportDelay() > 0 && !resadmin) { - player.sendMessage(ChatColor.GREEN + Residence.getLM().getMessage("Language.RandomTeleport.TeleportStarted", loc.getX() + "%" + loc.getY() + "%" + loc - .getZ() + "%" + Residence.getConfigManager().getTeleportDelay())); - teleportDelayMap.add(player.getName()); - Residence.getRandomTpManager().performDelaydTp(loc, player); - } else - RandomTp.performInstantTp(loc, player); - - return true; - } - - if (cmd.equals("tpconfirm")) { - if (args.length != 1) { - return false; - } - if (teleportMap.containsKey(player.getName())) { - teleportMap.get(player.getName()).tpToResidence(player, player, resadmin); - teleportMap.remove(player.getName()); - } else - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoTeleportConfirm")); - return true; - } - - if (cmd.equals("lease")) { - return commandResLease(args, resadmin, player, page); - } - - if (cmd.equals("market")) { - return commandResMarket(args, resadmin, player, page); - } - - if (cmd.equals("message")) { - return commandResMessage(args, resadmin, player, page); - } - if (cmd.equals("give") && args.length == 3) { - Residence.getResidenceManager().giveResidence(player, args[2], args[1], resadmin); - return true; - } - if (cmd.equals("server")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - if (args.length == 2) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - res.getPermissions().setOwner(Residence.getServerLandname(), false); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + args[1] + ChatColor.GREEN + "|" - + ChatColor.YELLOW - + Residence.getServerLandname() + ChatColor.GREEN)); - return true; - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - } - if (cmd.equals("clearflags")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); - if (area != null) { - area.getPermissions().clearFlags(); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagsCleared")); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } - if (cmd.equals("tool")) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("SelectionTool") + ":" + ChatColor.GREEN + Material.getMaterial(Residence.cmanager - .getSelectionTooldID())); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("InfoTool") + ": " + ChatColor.GREEN + Material.getMaterial(Residence.cmanager - .getInfoToolID())); - return true; - } - return false; - } - - private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender, Command command) { - if (Residence.helppages == null) - return false; - - String helppath = "res"; - for (int i = 0; i < args.length; i++) { - if (args[i].equalsIgnoreCase("?")) { - break; - } - helppath = helppath + "." + args[i]; - } - int page = 1; - if (!args[args.length - 1].equalsIgnoreCase("?")) { - try { - page = Integer.parseInt(args[args.length - 1]); - } catch (Exception ex) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); - } - } - - if (command.getName().equalsIgnoreCase("res")) - resadmin = false; - - if (Residence.helppages.containesEntry(helppath)) - Residence.helppages.printHelp(sender, page, helppath, resadmin); - - return true; - } - - private boolean commandResExpand(String[] args, boolean resadmin, Player player, int page) { - String resName; - String areaName = null; - ClaimedResidence res = null; - if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 3) { - res = Residence.getResidenceManager().getByName(args[1]); - } else - return false; - - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - - if (res.isSubzone() && !player.hasPermission("residence.expand.subzone") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Language.CantExpandSubzone")); - return false; - } - - if (!res.isSubzone() && !player.hasPermission("residence.expand") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Language.CantExpandResidence")); - return false; - } - - resName = res.getName(); - CuboidArea area = null; - - if (args.length == 2) { - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - } else if (args.length == 3) { - areaName = res.isSubzone() ? Residence.getResidenceManager().getSubzoneNameByRes(res) : "main"; - area = res.getCuboidAreabyName(areaName); - } - - if (area != null) { - Residence.smanager.placeLoc1(player, area.getHighLoc(), false); - Residence.smanager.placeLoc2(player, area.getLowLoc(), false); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD - + resName + ChatColor.GREEN)); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); - return true; - } - int amount = -1; - try { - if (args.length == 2) - amount = Integer.parseInt(args[1]); - else if (args.length == 3) - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); - return true; - } - - if (amount > 1000) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); - return true; - } - - if (amount < 0) - amount = 1; - - Residence.smanager.modify(player, false, amount); - - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.wep != null) { - if (Residence.wepid == Residence.getConfigManager().selectionToolId) { - Residence.smanager.worldEdit(player); - } - } - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player - .getName())), areaName, resadmin); - return true; - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); - } - return false; - } - - private boolean commandResContract(String[] args, boolean resadmin, Player player, int page) { - String resName; - String areaName = null; - ClaimedResidence res = null; - if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 3) - res = Residence.getResidenceManager().getByName(args[1]); - else - return false; - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - - if (res.isSubzone() && !player.hasPermission("residence.contract.subzone") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Language.CantContractSubzone")); - return false; - } - - if (!res.isSubzone() && !player.hasPermission("residence.contract") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Language.CantContractResidence")); - return false; - } - - resName = res.getName(); - CuboidArea area = null; - - if (args.length == 2) { - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - } else if (args.length == 3) { - areaName = res.isSubzone() ? Residence.getResidenceManager().getSubzoneNameByRes(res) : "main"; - area = res.getCuboidAreabyName(areaName); - } - - if (area != null) { - Residence.smanager.placeLoc1(player, area.getHighLoc(), false); - Residence.smanager.placeLoc2(player, area.getLowLoc(), false); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD - + resName + ChatColor.GREEN)); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); - return true; - } - int amount = -1; - try { - if (args.length == 2) - amount = Integer.parseInt(args[1]); - else if (args.length == 3) - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); - return true; - } - - if (amount > 1000) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); - return true; - } - - if (amount < 0) - amount = 1; - - if (!Residence.smanager.contract(player, amount, resadmin)) - return true; - - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.wep != null) { - if (Residence.wepid == Residence.getConfigManager().selectionToolId) { - Residence.smanager.worldEdit(player); - } - } - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player - .getName())), areaName, resadmin); - return true; - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); - } - return false; - } - - private boolean commandResSelect(String[] args, boolean resadmin, Player player, int page) { - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (!group.selectCommandAccess() && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectDiabled")); - return true; - } - if (!group.canCreateResidences() && group.getMaxSubzoneDepth(player.getName()) <= 0 && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectDiabled")); - return true; - } - if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player - .isPermissionSet("residence.select")) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectDiabled")); - return true; - } - if (args.length == 2) { - if (args[1].equals("size") || args[1].equals("cost")) { - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - try { - Residence.smanager.showSelectionInfo(player); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - return true; - } - } else if (Residence.smanager.worldEdit(player)) { - try { - Residence.smanager.showSelectionInfo(player); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - return true; - } - } - } else if (args[1].equals("vert")) { - Residence.smanager.vert(player, resadmin); - return true; - } else if (args[1].equals("sky")) { - Residence.smanager.sky(player, resadmin); - return true; - } else if (args[1].equals("bedrock")) { - Residence.smanager.bedrock(player, resadmin); - return true; - } else if (args[1].equals("coords")) { - Location playerLoc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); - if (playerLoc1 != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("Primary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc1.getBlockX() - + ", " - + playerLoc1.getBlockY() + ", " + playerLoc1.getBlockZ() + ")"); - } - Location playerLoc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); - if (playerLoc2 != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("Secondary.Selection") + ":" + ChatColor.AQUA + " (" + playerLoc2.getBlockX() - + ", " - + playerLoc2.getBlockY() + ", " + playerLoc2.getBlockZ() + ")"); - } - return true; - } else if (args[1].equals("chunk")) { - Residence.smanager.selectChunk(player); - return true; - } else if (args[1].equals("worldedit")) { - if (Residence.smanager.worldEdit(player)) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); - } - return true; - } - } else if (args.length == 3) { - if (args[1].equals("expand")) { - int amount; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); - return true; - } - Residence.smanager.modify(player, false, amount); - return true; - } else if (args[1].equals("shift")) { - int amount; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); - return true; - } - Residence.smanager.modify(player, true, amount); - return true; - } - } - if ((args.length == 2 || args.length == 3) && args[1].equals("auto")) { - Player target = player; - if (args.length == 3) { - if (!player.hasPermission("residence.select.auto.others")) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - target = Bukkit.getPlayer(args[2]); - if (target == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotOnline")); - return true; - } - } - AutoSelection.switchAutoSelection(target); - return true; - } - if (args.length > 1 && args[1].equals("residence")) { - String resName; - String areaName; - ClaimedResidence res = null; - if (args.length > 2) { - res = Residence.getResidenceManager().getByName(args[2]); - } else { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - } - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - resName = res.getName(); - CuboidArea area = null; - if (args.length > 3) { - area = res.getArea(args[3]); - areaName = args[3]; - } else { - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - } - if (area != null) { - Residence.smanager.placeLoc1(player, area.getHighLoc(), true); - Residence.smanager.placeLoc2(player, area.getLowLoc(), true); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionArea", ChatColor.GOLD + areaName + ChatColor.GREEN + "|" + ChatColor.GOLD - + resName - + ChatColor.GREEN)); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); - } - return true; - } else { - try { - Residence.smanager.selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); - return true; - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectionFail")); - return true; - } - } - } - - private boolean commandResCreate(String[] args, boolean resadmin, Player player, int page) { - if (args.length != 2) { - return false; - } - - WorldEditPlugin wep = (WorldEditPlugin) this.getServer().getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - Residence.smanager.worldEdit(player); - } - } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) == null) { - Residence.getResidenceManager().addResidence(player, args[1], Residence.smanager.getPlayerLoc1(player.getName()), Residence.smanager.getPlayerLoc2(player - .getName()), resadmin); - return true; - } else if (Residence.wg != null && WorldGuardUtil.isSelectionInRegion(player) != null) { - ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectOverlap", String.valueOf(Region.getId()))); - - Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), Region - .getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); - - Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), Region - .getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); - - Residence.getSelectionManager().NewMakeBorders(player, lowLoc, highLoc, true); - Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() - .getPlayerLoc2(player.getName()), false); - } else if (Residence.wg == null) { - Residence.getResidenceManager().addResidence(player, args[1], Residence.smanager.getPlayerLoc1(player.getName()), Residence.smanager.getPlayerLoc2(player - .getName()), - resadmin); - return true; - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); - return true; - } - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); - return true; - } - return true; - } - - private boolean commandResSubzone(String[] args, boolean resadmin, Player player, int page) { - if (args.length != 2 && args.length != 3) { - return false; - } - String zname; - String parent; - if (args.length == 2) { - parent = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - zname = args[1]; - } else { - parent = args[1]; - zname = args[2]; - } - WorldEditPlugin wep = (WorldEditPlugin) Residence.server.getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - Residence.smanager.worldEdit(player); - } - } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = Residence.getResidenceManager().getByName(parent); - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - - if (!player.hasPermission("residence.create.subzone") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Language.CantCreateSubzone")); - return false; - } - - res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), - zname, resadmin); - return true; - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); - return true; - } - } - - private boolean commandResArea(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 4) { - if (args[1].equals("remove")) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res != null) { - res.removeArea(player, args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } else if (args[1].equals("add")) { - WorldEditPlugin wep = (WorldEditPlugin) this.getServer().getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - Residence.smanager.worldEdit(player); - } - } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res != null) { - res.addArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( - player.getName())), args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); - } - return true; - } else if (args[1].equals("replace")) { - WorldEditPlugin wep = (WorldEditPlugin) this.getServer().getPluginManager().getPlugin("WorldEdit"); - if (wep != null) { - if (wep.getConfig().getInt("wand-item") == Residence.getConfigManager().selectionToolId) { - Residence.smanager.worldEdit(player); - } - } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res != null) { - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() - .getPlayerLoc2(player.getName())), args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); - } - return true; - } - } - if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res != null) { - res.printAreaList(player, page); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res != null) { - res.printAdvancedAreaList(player, page); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResRemove(String[] args, boolean resadmin, CommandSender sender, int page) { - - Player player = null; - if (sender instanceof Player) { - player = (Player) sender; - - if (Residence.deleteConfirm.containsKey(player.getName())) - Residence.deleteConfirm.remove(player.getName()); - - if (args.length == 1) { - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - - if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Language.InvalidResidence")); - return false; - } - - if (res.isSubzone() && !player.hasPermission("residence.delete.subzone") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Language.CantDeleteSubzone")); - return false; - } - - if (res.isSubzone() && player.hasPermission("residence.delete.subzone") && !resadmin && Residence.getConfigManager().isPreventSubZoneRemoval() && !res - .getParent().isOwner(player)) { - player.sendMessage(Residence.getLM().getMessage("Language.CantDeleteSubzoneNotOwnerOfParent")); - return false; - } - - if (!res.isSubzone() && !player.hasPermission("residence.delete") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Language.CantDeleteResidence")); - return false; - } - - if (res.isSubzone()) { - String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - String[] split = area.split("\\."); - String words = split[split.length - 1]; - if (!Residence.deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); - Residence.deleteConfirm.put(player.getName(), area); - } else { - Residence.getResidenceManager().removeResidence(player, area, resadmin); - } - return true; - } else { - if (!Residence.deleteConfirm.containsKey(player.getName()) || !res.getName().equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteConfirm", ChatColor.YELLOW + res.getName() + ChatColor.RED)); - Residence.deleteConfirm.put(player.getName(), res.getName()); - } else { - Residence.getResidenceManager().removeResidence(player, res.getName(), resadmin); - } - return true; - } - - } - } - if (args.length != 2) { - return false; - } - if (player != null) { - if (!Residence.deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { - String words = ""; - if (Residence.getResidenceManager().getByName(args[1]) != null) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res.getParent() != null) { - String[] split = args[1].split("\\."); - words = split[split.length - 1]; - } - } - if (words == "") { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED)); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED)); - } - Residence.deleteConfirm.put(player.getName(), args[1]); - } else { - Residence.getResidenceManager().removeResidence(player, args[1], resadmin); - } - } else { - if (!Residence.deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(Residence.deleteConfirm.get("Console"))) { - String words = ""; - if (Residence.getResidenceManager().getByName(args[1]) != null) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res.getParent() != null) { - String[] split = args[1].split("\\."); - words = split[split.length - 1]; - } - } - if (words == "") { - this.getServer().getConsoleSender().sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] - + ChatColor.RED)); - } else { - this.getServer().getConsoleSender().sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words - + ChatColor.RED)); - } - Residence.deleteConfirm.put("Console", args[1]); - } else { - Residence.getResidenceManager().removeResidence(args[1]); - } - } - return true; - } - - private boolean commandResConfirm(String[] args, boolean resadmin, CommandSender sender, int page) { - Player player = null; - String name = "Console"; - if (sender instanceof Player) { - player = (Player) sender; - name = player.getName(); - } - if (args.length == 1) { - String area = Residence.deleteConfirm.get(name); - if (area == null) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } else { - Residence.getResidenceManager().removeResidence(player, area, resadmin); - Residence.deleteConfirm.remove(name); - if (player == null) { - sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); - } - } - } - return true; - } - - private boolean commandResSet(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 3) { - String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - if (area != null) { - Residence.getResidenceManager().getByName(area).getPermissions().setFlag(player, args[1], args[2], resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 4) { - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); - if (area != null) { - area.getPermissions().setFlag(player, args[2], args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 1 && Residence.getConfigManager().useFlagGUI) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - if (!res.isOwner(player) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - SetFlag flag = new SetFlag(res.getName(), player, resadmin); - flag.recalculateResidence(res); - ResidencePlayerListener.GUI.put(player.getName(), flag); - player.openInventory(flag.getInventory()); - } else - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } else if (args.length == 2 && Residence.getConfigManager().useFlagGUI) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res != null) { - if (!res.isOwner(player) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - SetFlag flag = new SetFlag(res.getName(), player, resadmin); - flag.recalculateResidence(res); - ResidencePlayerListener.GUI.put(player.getName(), flag); - player.openInventory(flag.getInventory()); - } else - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - return false; - } - - private boolean commandResPset(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { - ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().removeAllPlayerFlags(player, args[1], resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); - if (area != null) { - area.getPermissions().removeAllPlayerFlags(player, args[2], resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 4) { - ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); - - if (!Residence.isPlayerExist(player, args[1], true)) - return false; - - if (area != null) { - area.getPermissions().setPlayerFlag(player, args[1], args[2], args[3], resadmin, true); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 5) { - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); - if (!Residence.isPlayerExist(player, args[2], true)) - return false; - if (area != null) { - area.getPermissions().setPlayerFlag(player, args[2], args[3], args[4], resadmin, true); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } else if (args.length == 2) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - if (!Residence.isPlayerExist(player, args[1], true)) - return false; - if (!res.isOwner(player) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - SetFlag flag = new SetFlag(res.getName(), player, resadmin); - flag.setTargePlayer(args[1]); - flag.recalculatePlayer(res); - ResidencePlayerListener.GUI.put(player.getName(), flag); - player.openInventory(flag.getInventory()); - } else - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } else if (args.length == 3) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res != null) { - if (!Residence.isPlayerExist(player, args[2], true)) - return false; - if (!res.isOwner(player) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - - SetFlag flag = new SetFlag(res.getName(), player, resadmin); - flag.setTargePlayer(args[2]); - flag.recalculatePlayer(res); - ResidencePlayerListener.GUI.put(player.getName(), flag); - player.openInventory(flag.getInventory()); - } else - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - return false; - } - - private boolean commandResGset(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 4) { - ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); - } - return true; - } else if (args.length == 5) { - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); - if (area != null) { - area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResLset(String[] args, boolean resadmin, Player player, int page) { - ClaimedResidence res = null; - Material mat = null; - String listtype = null; - boolean showinfo = false; - if (args.length == 2 && args[1].equals("info")) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - showinfo = true; - } else if (args.length == 3 && args[2].equals("info")) { - res = Residence.getResidenceManager().getByName(args[1]); - showinfo = true; - } - if (showinfo) { - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - player.sendMessage(ChatColor.RED + "Blacklist:"); - res.getItemBlacklist().printList(player); - player.sendMessage(ChatColor.GREEN + "Ignorelist:"); - res.getItemIgnoreList().printList(player); - return true; - } else if (args.length == 4) { - res = Residence.getResidenceManager().getByName(args[1]); - listtype = args[2]; - try { - mat = Material.valueOf(args[3].toUpperCase()); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidMaterial")); - return true; - } - } else if (args.length == 3) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - listtype = args[1]; - try { - mat = Material.valueOf(args[2].toUpperCase()); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidMaterial")); - return true; - } - } - if (res != null) { - if (listtype.equalsIgnoreCase("blacklist")) { - res.getItemBlacklist().playerListChange(player, mat, resadmin); - } else if (listtype.equalsIgnoreCase("ignorelist")) { - res.getItemIgnoreList().playerListChange(player, mat, resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidList")); - } - return true; - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - } - - private boolean commandResBank(String[] args, boolean resadmin, CommandSender sender, int page) { - if (args.length != 3 && args.length != 4) { - return false; - } - ClaimedResidence res = null; - - if (args.length == 4) { - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - } else { - if (sender instanceof Player) - res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); - } - if (res == null) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); - return true; - } - int amount = 0; - try { - if (args.length == 3) - amount = Integer.parseInt(args[2]); - else - amount = Integer.parseInt(args[3]); - } catch (Exception ex) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); - return true; - } - if (args[1].equals("deposit")) { - res.getBank().deposit(sender, amount, resadmin); - } else if (args[1].equals("withdraw")) { - res.getBank().withdraw(sender, amount, resadmin); - } else { - return false; - } - return true; - } - - private boolean commandResLease(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 2 || args.length == 3) { - if (args[1].equals("expires")) { - ClaimedResidence res = null; - if (args.length == 2) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); - return true; - } - } else { - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - } - - String until = Residence.getLeaseManager().getExpireTime(res.getName()); - if (until != null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("LeaseRenew", until)); - return true; - } - if (args[1].equals("renew")) { - if (args.length == 3) { - Residence.leasemanager.renewArea(args[2], player); - } else { - Residence.leasemanager.renewArea(Residence.getResidenceManager().getNameByLoc(player.getLocation()), player); - } - return true; - } else if (args[1].equals("cost")) { - if (args.length == 3) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res == null || Residence.leasemanager.leaseExpires(args[2])) { - int cost = Residence.leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseRenewalCost", ChatColor.RED + args[2] + ChatColor.YELLOW + "|" - + ChatColor.RED - + cost + ChatColor.YELLOW)); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("LeaseNotExpire")); - } - return true; - } else { - String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - ClaimedResidence res = Residence.getResidenceManager().getByName(area); - if (area == null || res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); - return true; - } - if (Residence.leasemanager.leaseExpires(area)) { - int cost = Residence.leasemanager.getRenewCost(res); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseRenewalCost", ChatColor.RED + area + ChatColor.YELLOW + "|" - + ChatColor.RED + cost - + ChatColor.YELLOW)); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("LeaseNotExpire")); - } - return true; - } - } - } else if (args.length == 4) { - if (args[1].equals("set")) { - if (!resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - if (args[3].equals("infinite")) { - if (Residence.leasemanager.leaseExpires(args[2])) { - Residence.leasemanager.removeExpireTime(args[2]); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("LeaseInfinite")); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("LeaseNotExpire")); - } - return true; - } else { - int days; - try { - days = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidDays")); - return true; - } - Residence.leasemanager.setExpireTime(player, args[2], days); - return true; - } - } - } - return false; - } - - private boolean commandResMarket(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 1) { - return false; - } - String command = args[1].toLowerCase(); - if (command.equals("list")) { - return commandResMarketList(args, resadmin, player, page); - } - if (command.equals("autorenew")) { - return commandResMarketAutorenew(args, resadmin, player, page); - } - if (command.equals("rentable")) { - return commandResMarketRentable(args, resadmin, player, page); - } - if (command.equals("rent")) { - return commandResMarketRent(args, resadmin, player, page); - } - if (command.equals("release")) { - if (args.length != 3) { - return false; - } - if (Residence.rentmanager.isRented(args[2])) { - Residence.rentmanager.removeFromForRent(player, args[2], resadmin); - } else { - Residence.rentmanager.unrent(player, args[2], resadmin); - } - return true; - } - if (command.equals("sign")) { - if (args.length != 3) { - return false; - } - Block block = player.getTargetBlock((Set) null, 10); - - if (!(block.getState() instanceof Sign)) { - player.sendMessage(Residence.getLanguage().getPhrase("LookAtSign")); - return true; - } - - Sign sign = (Sign) block.getState(); - - Signs signInfo = new Signs(); - - Signs oldSign = Residence.getSignUtil().getSignFromLoc(sign.getLocation()); - - if (oldSign != null) - signInfo = oldSign; - - Location loc = sign.getLocation(); - - String landName = null; - - ClaimedResidence CurrentRes = Residence.getResidenceManager().getByLoc(sign.getLocation()); - - if (CurrentRes == null) { - player.sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - - if (!CurrentRes.isOwner(player) && !resadmin) { - player.sendMessage(Residence.getLanguage().getPhrase("NotOwner")); - return true; - } - - final ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - - if (res == null) { - player.sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); - return true; - } - - landName = res.getName(); - - boolean ForSale = Residence.getTransactionManager().isForSale(landName); - boolean ForRent = Residence.getRentManager().isForRent(landName); - - int category = 1; - if (Residence.getSignUtil().getSigns().GetAllSigns().size() > 0) - category = Residence.getSignUtil().getSigns().GetAllSigns().get(Residence.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; - - if (ForSale || ForRent) { - signInfo.setCategory(category); - signInfo.setResidence(landName); - signInfo.setWorld(loc.getWorld().getName()); - signInfo.setX(loc.getBlockX()); - signInfo.setY(loc.getBlockY()); - signInfo.setZ(loc.getBlockZ()); - signInfo.setLocation(loc); - Residence.getSignUtil().getSigns().addSign(signInfo); - Residence.getSignUtil().saveSigns(); - } else { - player.sendMessage(Residence.getLanguage().getPhrase("ResidenceNotForRentOrSell")); - return true; - } - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() { - public void run() { - Residence.getSignUtil().CheckSign(res); - } - }, 5L); - - return true; - } - if (command.equals("info")) { - if (args.length == 2) { - String areaname = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - Residence.tmanager.viewSaleInfo(areaname, player); - if (Residence.cmanager.enabledRentSystem() && Residence.rentmanager.isForRent(areaname)) { - Residence.rentmanager.printRentInfo(player, areaname); - } - } else if (args.length == 3) { - Residence.tmanager.viewSaleInfo(args[2], player); - if (Residence.cmanager.enabledRentSystem() && Residence.rentmanager.isForRent(args[2])) { - Residence.rentmanager.printRentInfo(player, args[2]); - } - } else { - return false; - } - return true; - } - if (command.equals("buy")) { - if (args.length != 3) { - return false; - } - Residence.tmanager.buyPlot(args[2], player, resadmin); - return true; - } - if (command.equals("unsell")) { - if (args.length != 3) { - return false; - } - Residence.tmanager.removeFromSale(player, args[2], resadmin); - return true; - } - if (command.equals("sell")) { - if (args.length != 4) { - return false; - } - int amount; - try { - amount = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); - return true; - } - Residence.tmanager.putForSale(args[2], player, amount, resadmin); - return true; - } - return false; - } - - private boolean commandResMarketRent(String[] args, boolean resadmin, Player player, int page) { - if (args.length < 3 || args.length > 4) { - return false; - } - boolean repeat = false; - if (args.length == 4) { - if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { - repeat = true; - } else if (!args[3].equalsIgnoreCase("f") && !args[3].equalsIgnoreCase("false")) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidBoolean")); - return true; - } - } - Residence.rentmanager.rent(player, args[2], repeat, resadmin); - return true; - } - - private boolean commandResMarketRentable(String[] args, boolean resadmin, Player player, int page) { - if (args.length < 5 || args.length > 6) { - return false; - } - if (!Residence.cmanager.enabledRentSystem()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentDisabled")); - return true; - } - int days; - int cost; - try { - cost = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidCost")); - return true; - } - try { - days = Integer.parseInt(args[4]); - } catch (Exception ex) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidDays")); - return true; - } - boolean repeat = false; - if (args.length == 6) { - if (args[5].equalsIgnoreCase("t") || args[5].equalsIgnoreCase("true")) { - repeat = true; - } else if (!args[5].equalsIgnoreCase("f") && !args[5].equalsIgnoreCase("false")) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidBoolean")); - return true; - } - } - Residence.rentmanager.setForRent(player, args[2], cost, days, repeat, resadmin); - return true; - } - - private boolean commandResMarketAutorenew(String[] args, boolean resadmin, Player player, int page) { - if (!Residence.cmanager.enableEconomy()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); - return true; - } - if (args.length != 4) { - return false; - } - boolean value; - if (args[3].equalsIgnoreCase("true") || args[3].equalsIgnoreCase("t")) { - value = true; - } else if (args[3].equalsIgnoreCase("false") || args[3].equalsIgnoreCase("f")) { - value = false; - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidBoolean")); - return true; - } - if (Residence.rentmanager.isRented(args[2]) && Residence.rentmanager.getRentingPlayer(args[2]).equalsIgnoreCase(player.getName())) { - Residence.rentmanager.setRentedRepeatable(player, args[2], value, resadmin); - } else if (Residence.rentmanager.isForRent(args[2])) { - Residence.rentmanager.setRentRepeatable(player, args[2], value, resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentReleaseInvalid", ChatColor.YELLOW + args[2] + ChatColor.RED)); - } - return true; - } - - private boolean commandResMarketList(String[] args, boolean resadmin, Player player, int page) { - if (!Residence.cmanager.enableEconomy()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); - return true; - } - player.sendMessage(ChatColor.BLUE + "---" + Residence.getLanguage().getPhrase("MarketList") + "---"); - Residence.tmanager.printForSaleResidences(player); - if (Residence.cmanager.enabledRentSystem()) { - Residence.rentmanager.printRentableResidences(player); - } - return true; - } - - private boolean commandResMessage(String[] args, boolean resadmin, Player player, int page) { - ClaimedResidence res = null; - int start = 0; - boolean enter = false; - if (args.length < 2) { - return false; - } - if (args[1].equals("enter")) { - enter = true; - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - start = 2; - } else if (args[1].equals("leave")) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - start = 2; - } else if (args[1].equals("remove")) { - if (args.length > 2 && args[2].equals("enter")) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - res.setEnterLeaveMessage(player, null, true, resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } else if (args.length > 2 && args[2].equals("leave")) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - res.setEnterLeaveMessage(player, null, false, resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidMessageType")); - return true; - } else if (args.length > 2 && args[2].equals("enter")) { - enter = true; - res = Residence.getResidenceManager().getByName(args[1]); - start = 3; - } else if (args.length > 2 && args[2].equals("leave")) { - res = Residence.getResidenceManager().getByName(args[1]); - start = 3; - } else if (args.length > 2 && args[2].equals("remove")) { - res = Residence.getResidenceManager().getByName(args[1]); - if (args.length != 4) { - return false; - } - if (args[3].equals("enter")) { - if (res != null) { - res.setEnterLeaveMessage(player, null, true, resadmin); - } - return true; - } else if (args[3].equals("leave")) { - if (res != null) { - res.setEnterLeaveMessage(player, null, false, resadmin); - } - return true; - } - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidMessageType")); - return true; - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidMessageType")); - return true; - } - if (start == 0) { - return false; - } - String message = ""; - for (int i = start; i < args.length; i++) { - message = message + args[i] + " "; - } - if (res != null) { - res.setEnterLeaveMessage(player, message, enter, resadmin); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } - - private boolean commandResSublist(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 1 || args.length == 2 || args.length == 3) { - ClaimedResidence res; - if (args.length == 1) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - } else { - res = Residence.getResidenceManager().getByName(args[1]); - } - if (res != null) { - res.printSubzoneList(player, page); - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } - return false; - } - - private boolean commandResCompass(String[] args, boolean resadmin, Player player, int page) { - if (args.length != 2) { - player.setCompassTarget(player.getWorld().getSpawnLocation()); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("CompassTargetReset")); - return true; - } - - if (!player.hasPermission("residence.compass")) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - return true; - } - - if (Residence.getResidenceManager().getByName(args[1]) != null) { - if (Residence.getResidenceManager().getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { - Location low = Residence.getResidenceManager().getByName(args[1]).getArea("main").getLowLoc(); - Location high = Residence.getResidenceManager().getByName(args[1]).getArea("main").getHighLoc(); - Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high - .getBlockZ()) / 2); - player.setCompassTarget(mid); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("CompassTargetSet", ChatColor.YELLOW + args[1] + ChatColor.GREEN)); - } - } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); - } - return true; - } - - private boolean commandResGui(String[] args, boolean resadmin, Player player, int page) { - if (Residence.slistener != null) { - if (args.length == 1) { - ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, Residence.getResidenceManager().getNameByLoc(player.getLocation()), resadmin); - } else if (args.length == 2) { - ResidenceSpout.showResidenceFlagGUI(SpoutManager.getPlayer(player), this, args[1], resadmin); - } - } - return true; - } - - private boolean commandResList(String[] args, boolean resadmin, Player player, int page) { - if (args.length == 2) { - if (args[1].equals("list")) { - Residence.pmanager.printLists(player); - return true; - } - } else if (args.length == 3) { - if (args[1].equals("view")) { - Residence.pmanager.printList(player, args[2]); - return true; - } else if (args[1].equals("remove")) { - Residence.pmanager.removeList(player, args[2]); - return true; - } else if (args[1].equals("add")) { - Residence.pmanager.makeList(player, args[2]); - return true; - } - } else if (args.length == 4) { - if (args[1].equals("apply")) { - Residence.pmanager.applyListToResidence(player, args[2], args[3], resadmin); - return true; - } - } else if (args.length == 5) { - if (args[1].equals("set")) { - Residence.pmanager.getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); - return true; - } - } else if (args.length == 6) { - if (args[1].equals("gset")) { - Residence.pmanager.getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); - return true; - } else if (args[1].equals("pset")) { - Residence.pmanager.getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); - return true; - } - } - return false; - } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java index 8dcef433f..d03831a23 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java @@ -1,6 +1,5 @@ package com.bekvon.bukkit.residence.allNms; -import org.bukkit.ChatColor; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -27,7 +26,7 @@ public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "container")); } } } diff --git a/src/com/bekvon/bukkit/residence/api/ChatInterface.java b/src/com/bekvon/bukkit/residence/api/ChatInterface.java new file mode 100644 index 000000000..93f5fb0cd --- /dev/null +++ b/src/com/bekvon/bukkit/residence/api/ChatInterface.java @@ -0,0 +1,17 @@ +package com.bekvon.bukkit.residence.api; + +import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public interface ChatInterface { + public boolean setChannel(String player, String resName); + + public boolean setChannel(String player, ClaimedResidence res); + + public boolean removeFromChannel(String player); + + public ChatChannel getChannel(String channel); + + public ChatChannel getPlayerChannel(String player); + +} diff --git a/src/com/bekvon/bukkit/residence/api/MarketBuyInterface.java b/src/com/bekvon/bukkit/residence/api/MarketBuyInterface.java new file mode 100644 index 000000000..c2329e338 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/api/MarketBuyInterface.java @@ -0,0 +1,20 @@ +package com.bekvon.bukkit.residence.api; + +import java.util.Map; + +import org.bukkit.entity.Player; + +public interface MarketBuyInterface { + + public Map getBuyableResidences(); + + public boolean putForSale(String areaname, int amount); + + public void buyPlot(String areaname, Player player, boolean resadmin); + + public void removeFromSale(String areaname); + + public boolean isForSale(String areaname); + + public int getSaleAmount(String name); +} diff --git a/src/com/bekvon/bukkit/residence/api/MarketRentInterface.java b/src/com/bekvon/bukkit/residence/api/MarketRentInterface.java new file mode 100644 index 000000000..ba36ac8a4 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/api/MarketRentInterface.java @@ -0,0 +1,55 @@ +package com.bekvon.bukkit.residence.api; + +import java.util.List; +import java.util.Map; + +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.economy.rent.RentableLand; +import com.bekvon.bukkit.residence.economy.rent.RentedLand; + +public interface MarketRentInterface { + public Map getRentableResidences(); + + public Map getCurrentlyRentedResidences(); + + public RentedLand getRentedLand(String landName); + + public List getRentedLands(String playerName); + + public void setForRent(Player player, String landName, int amount, int days, boolean repeatable, boolean resadmin); + + public void rent(Player player, String landName, boolean repeat, boolean resadmin); + + public void removeFromForRent(Player player, String landName, boolean resadmin); + + public void unrent(Player player, String landName, boolean resadmin); + + public void removeFromRent(String landName); + + public void removeRentable(String landName); + + public boolean isForRent(String landName); + + public boolean isRented(String landName); + + public String getRentingPlayer(String landName); + + public int getCostOfRent(String landName); + + public boolean getRentableRepeatable(String landName); + + public boolean getRentedAutoRepeats(String landName); + + public int getRentDays(String landName); + + public void checkCurrentRents(); + + public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin); + + public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin); + + public int getRentCount(String player); + + public int getRentableCount(String player); +} diff --git a/src/com/bekvon/bukkit/residence/api/ResidenceApi.java b/src/com/bekvon/bukkit/residence/api/ResidenceApi.java new file mode 100644 index 000000000..19fdf0ae1 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/api/ResidenceApi.java @@ -0,0 +1,26 @@ +package com.bekvon.bukkit.residence.api; + +import com.bekvon.bukkit.residence.Residence; + +public class ResidenceApi { + + public static MarketBuyInterface getMarketBuyManager() { + return Residence.getMarketBuyManagerAPI(); + } + + public static MarketRentInterface getMarketRentManager() { + return Residence.getMarketRentManagerAPI(); + } + + public static ResidencePlayerInterface getPlayerManager() { + return Residence.getPlayerManagerAPI(); + } + + public static ChatInterface getChatManager() { + return Residence.getResidenceChatAPI(); + } + + public static ResidenceInterface getResidenceManager() { + return Residence.getResidenceManagerAPI(); + } +} diff --git a/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java b/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java new file mode 100644 index 000000000..3d3b93014 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java @@ -0,0 +1,34 @@ +package com.bekvon.bukkit.residence.api; + +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public interface ResidenceInterface { + public ClaimedResidence getByLoc(Location loc); + + public ClaimedResidence getByName(String name); + + public String getNameByLoc(Location loc); + + public String getNameByRes(ClaimedResidence res); + + public String getSubzoneNameByRes(ClaimedResidence res); + + public void addShop(String res); + + public void removeShop(ClaimedResidence res); + + public void removeShop(String res); + + public List getShops(); + + public boolean addResidence(String name, Location loc1, Location loc2); + + public boolean addResidence(String name, String owner, Location loc1, Location loc2); + + public boolean addResidence(Player player, String name, Location loc1, Location loc2, boolean resadmin); +} diff --git a/src/com/bekvon/bukkit/residence/api/ResidencePlayerInterface.java b/src/com/bekvon/bukkit/residence/api/ResidencePlayerInterface.java new file mode 100644 index 000000000..14891ecd3 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/api/ResidencePlayerInterface.java @@ -0,0 +1,22 @@ +package com.bekvon.bukkit.residence.api; + +import java.util.ArrayList; + +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; + +public interface ResidencePlayerInterface { + public ArrayList getResidenceList(String player); + + public ArrayList getResidenceList(String player, boolean showhidden); + + public PermissionGroup getGroup(String player); + + public int getMaxResidences(String player); + + public int getMaxSubzones(String player); + + public int getMaxRents(String player); + + public ResidencePlayer getResidencePlayer(String player); +} diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index c384f25f3..78deac87c 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -10,10 +10,6 @@ import org.bukkit.Server; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class ChatChannel { protected String channelName; @@ -50,7 +46,8 @@ public void chat(String sourcePlayer, String message) { for (String member : members) { Player player = serv.getPlayer(member); if (player != null) - player.sendMessage(cevent.getChatprefix() + " " + Residence.getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent.getChatMessage()); + player.sendMessage(cevent.getChatprefix() + " " + Residence.getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent + .getChatMessage()); } Bukkit.getConsoleSender().sendMessage("ResidentialChat[" + channelName + "] - " + sourcePlayer + ": " + ChatColor.stripColor(cevent.getChatMessage())); } diff --git a/src/com/bekvon/bukkit/residence/chat/ChatManager.java b/src/com/bekvon/bukkit/residence/chat/ChatManager.java index 14a13e353..7afb5bdee 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatManager.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatManager.java @@ -1,17 +1,13 @@ package com.bekvon.bukkit.residence.chat; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.ChatInterface; import com.bekvon.bukkit.residence.protection.ClaimedResidence; - import java.util.HashMap; import java.util.Map; import org.bukkit.Server; -/** - * - * @author Administrator - */ -public class ChatManager { +public class ChatManager implements ChatInterface { protected Map channelmap; protected Server server; @@ -21,20 +17,29 @@ public ChatManager() { channelmap = new HashMap(); } - public void setChannel(String player, ClaimedResidence res) { + public boolean setChannel(String player, String resName) { + ClaimedResidence res = Residence.getResidenceManager().getByName(resName); + if (res == null) + return false; + return setChannel(player, res); + } + + public boolean setChannel(String player, ClaimedResidence res) { this.removeFromChannel(player); if (!channelmap.containsKey(res.getName())) channelmap.put(res.getName(), new ChatChannel(res.getName(), res.getChatPrefix(), res.getChannelColor())); channelmap.get(res.getName()).join(player); + return true; } - public void removeFromChannel(String player) { + public boolean removeFromChannel(String player) { for (ChatChannel chan : channelmap.values()) { if (chan.hasMember(player)) { chan.leave(player); - break; + return true; } } + return false; } public ChatChannel getChannel(String channel) { @@ -48,5 +53,4 @@ public ChatChannel getPlayerChannel(String player) { } return null; } - } diff --git a/src/com/bekvon/bukkit/residence/cmd.java b/src/com/bekvon/bukkit/residence/cmd.java new file mode 100644 index 000000000..1bc0b7a26 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/cmd.java @@ -0,0 +1,8 @@ +package com.bekvon.bukkit.residence; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +public interface cmd { + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender); +} diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java new file mode 100644 index 000000000..4fd9826b6 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -0,0 +1,94 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; + +public class area implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + + if (args.length == 4) { + if (args[1].equals("remove")) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res != null) { + res.removeArea(player, args[3], resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } else if (args[1].equals("add")) { + if (Residence.getWEplugin() != null) { + if (Residence.getWEplugin().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { + Residence.getSelectionManager().worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res != null) { + res.addArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( + player.getName())), args[3], resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + } else { + player.sendMessage(Residence.getLM().getMessage("Select.Points")); + } + return true; + } else if (args[1].equals("replace")) { + if (Residence.getWEplugin() != null) { + if (Residence.getWEplugin().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { + Residence.getSelectionManager().worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res != null) { + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() + .getPlayerLoc2(player.getName())), args[3], resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + } else { + player.sendMessage(Residence.getLM().getMessage("Select.Points")); + } + return true; + } + } + if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res != null) { + res.printAreaList(player, page); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res != null) { + res.printAdvancedAreaList(player, page); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java new file mode 100644 index 000000000..41ad25a90 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -0,0 +1,40 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class check implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + Player player = (Player) sender; + String pname = player.getName(); + + if (args.length != 3 && args.length != 4) + return false; + + if (args.length == 4) + pname = args[3]; + + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { + player.sendMessage(Residence.getLM().getMessage("Flag.CheckFalse", args[2], pname, args[1])); + } else { + player.sendMessage(Residence.getLM().getMessage("Flag.CheckTrue", args[2], pname, args[1], (res.getPermissions().playerHas(pname, res.getPermissions() + .getWorld(), args[2], false) ? Residence.getLM().getMessage("General.True") : Residence.getLM().getMessage("General.False")))); + } + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/clearflags.java b/src/com/bekvon/bukkit/residence/commands/clearflags.java new file mode 100644 index 000000000..6e8d87df1 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/clearflags.java @@ -0,0 +1,33 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class clearflags implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (!resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); + if (area != null) { + area.getPermissions().clearFlags(); + player.sendMessage(Residence.getLM().getMessage("Flag.Cleared")); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java new file mode 100644 index 000000000..8c6fdae6e --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -0,0 +1,46 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class compass implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 2) { + player.setCompassTarget(player.getWorld().getSpawnLocation()); + player.sendMessage(Residence.getLM().getMessage("General.CompassTargetReset")); + return true; + } + + if (!player.hasPermission("residence.compass")) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + if (Residence.getResidenceManager().getByName(args[1]) != null) { + if (Residence.getResidenceManager().getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { + Location low = Residence.getResidenceManager().getByName(args[1]).getArea("main").getLowLoc(); + Location high = Residence.getResidenceManager().getByName(args[1]).getArea("main").getHighLoc(); + Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high + .getBlockZ()) / 2); + player.setCompassTarget(mid); + player.sendMessage(Residence.getLM().getMessage("General.CompassTargetSet", args[1])); + } + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/confirm.java b/src/com/bekvon/bukkit/residence/commands/confirm.java new file mode 100644 index 000000000..14cb443a5 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/confirm.java @@ -0,0 +1,35 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class confirm implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + Player player = null; + String name = "Console"; + if (sender instanceof Player) { + player = (Player) sender; + name = player.getName(); + } + if (args.length != 1) + return true; + + String area = Residence.deleteConfirm.get(name); + if (area == null) { + sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } else { + Residence.getResidenceManager().removeResidence(player, area, resadmin); + Residence.deleteConfirm.remove(name); + sender.sendMessage(Residence.getLM().getMessage("Residence.Remove", name)); + } + + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java new file mode 100644 index 000000000..4aba4135f --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -0,0 +1,99 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; + +public class contract implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + ClaimedResidence res = null; + if (args.length == 2) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 3) + res = Residence.getResidenceManager().getByName(args[1]); + else + return false; + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + + if (res.isSubzone() && !player.hasPermission("residence.contract.subzone") && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Subzone.CantContract")); + return false; + } + + if (!res.isSubzone() && !player.hasPermission("residence.contract") && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Residence.CantContractResidence")); + return false; + } + + String resName = res.getName(); + CuboidArea area = null; + String areaName = null; + + if (args.length == 2) { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } else if (args.length == 3) { + areaName = res.isSubzone() ? Residence.getResidenceManager().getSubzoneNameByRes(res) : "main"; + area = res.getCuboidAreabyName(areaName); + } + + if (area != null) { + Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); + Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); + player.sendMessage(Residence.getLM().getMessage("Select.Area", areaName, resName)); + } else { + player.sendMessage(Residence.getLM().getMessage("Area.NonExist")); + return true; + } + int amount = -1; + try { + if (args.length == 2) + amount = Integer.parseInt(args[1]); + else if (args.length == 3) + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + return true; + } + + if (amount > 1000) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + return true; + } + + if (amount < 0) + amount = 1; + + if (!Residence.getSelectionManager().contract(player, amount, resadmin)) + return true; + + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + if (Residence.getWEplugin() != null) { + if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) { + Residence.getSelectionManager().worldEdit(player); + } + } + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player + .getName())), areaName, resadmin); + return true; + } else { + player.sendMessage(Residence.getLM().getMessage("Select.Points")); + } + return false; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java new file mode 100644 index 000000000..0ff1d0635 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -0,0 +1,64 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.selection.WorldGuardUtil; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; + +public class create implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 2) { + return false; + } + + if (Residence.getWEplugin() != null) { + if (Residence.getWEplugin().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { + Residence.getSelectionManager().worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + if (Residence.getWEplugin() != null && WorldGuardUtil.isSelectionInRegion(player) == null) { + Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence + .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); + return true; + } else if (Residence.getWEplugin() != null && WorldGuardUtil.isSelectionInRegion(player) != null) { + ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); + player.sendMessage(Residence.getLM().getMessage("Select.Overlap", Region.getId())); + + Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), Region + .getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); + + Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), Region + .getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); + + Residence.getSelectionManager().NewMakeBorders(player, lowLoc, highLoc, true); + Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() + .getPlayerLoc2(player.getName()), false); + } else if (Residence.getWEplugin() == null) { + Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence + .getSelectionManager().getPlayerLoc2(player.getName()), + resadmin); + return true; + } else { + player.sendMessage(Residence.getLM().getMessage("Select.Points")); + return true; + } + } else { + player.sendMessage(Residence.getLM().getMessage("Select.Points")); + return true; + } + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/current.java b/src/com/bekvon/bukkit/residence/commands/current.java new file mode 100644 index 000000000..5fbe7739f --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/current.java @@ -0,0 +1,31 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class current implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 1) + return false; + + String res = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + } else { + player.sendMessage(Residence.getLM().getMessage("Residence.In", res)); + } + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java new file mode 100644 index 000000000..333724a6d --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -0,0 +1,101 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; + +public class expand implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + ClaimedResidence res = null; + if (args.length == 2) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 3) { + res = Residence.getResidenceManager().getByName(args[1]); + } else + return false; + + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + + if (res.isSubzone() && !player.hasPermission("residence.expand.subzone") && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Subzone.CantExpand")); + return false; + } + + if (!res.isSubzone() && !player.hasPermission("residence.expand") && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Residence.CantExpandResidence")); + return false; + } + + String resName = res.getName(); + CuboidArea area = null; + String areaName = null; + + if (args.length == 2) { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } else if (args.length == 3) { + areaName = res.isSubzone() ? Residence.getResidenceManager().getSubzoneNameByRes(res) : "main"; + area = res.getCuboidAreabyName(areaName); + } + + if (area != null) { + Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); + Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); + player.sendMessage(Residence.getLM().getMessage("Select.Area", areaName, resName)); + } else { + player.sendMessage(Residence.getLM().getMessage("Area.NonExist")); + return true; + } + int amount = -1; + try { + if (args.length == 2) + amount = Integer.parseInt(args[1]); + else if (args.length == 3) + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + return true; + } + + if (amount > 1000) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + return true; + } + + if (amount < 0) + amount = 1; + + Residence.getSelectionManager().modify(player, false, amount); + + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + if (Residence.wep != null) { + if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) { + Residence.getSelectionManager().worldEdit(player); + } + } + + res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player + .getName())), areaName, resadmin); + return true; + } else { + player.sendMessage(Residence.getLM().getMessage("Select.Points")); + } + return false; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java new file mode 100644 index 000000000..7cc282394 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -0,0 +1,22 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.residence.cmd; + +public class flags implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + Bukkit.dispatchCommand(sender, "res flags ? " + page); + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java new file mode 100644 index 000000000..bfb0f8dc0 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -0,0 +1,25 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public abstract class give implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 3) + return false; + + Residence.getResidenceManager().giveResidence(player, args[2], args[1], resadmin); + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/gset.java b/src/com/bekvon/bukkit/residence/commands/gset.java new file mode 100644 index 000000000..9b2bb5d93 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/gset.java @@ -0,0 +1,38 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class gset implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length == 4) { + ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); + } + return true; + } else if (args.length == 5) { + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); + if (area != null) { + area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/gui.java b/src/com/bekvon/bukkit/residence/commands/gui.java new file mode 100644 index 000000000..5d5c47f37 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/gui.java @@ -0,0 +1,30 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.getspout.spoutapi.SpoutManager; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class gui implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (Residence.getSpoutListener() == null) + return true; + + if (args.length == 1) { + Residence.getSpout().showResidenceFlagGUI(SpoutManager.getPlayer(player), Residence.getResidenceManager().getNameByLoc(player.getLocation()), resadmin); + } else if (args.length == 2) { + Residence.getSpout().showResidenceFlagGUI(SpoutManager.getPlayer(player), args[1], resadmin); + } + + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java new file mode 100644 index 000000000..31e4f0f87 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -0,0 +1,34 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class info implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length == 1) { + String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + if (area != null) { + Residence.getResidenceManager().printAreaInfo(area, player); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } else if (args.length == 2) { + Residence.getResidenceManager().printAreaInfo(args[1], player); + return true; + } + return false; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java new file mode 100644 index 000000000..2ba99b32e --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -0,0 +1,56 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class kick implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 2) + return false; + + Player targetplayer = Bukkit.getPlayer(args[1]); + if (targetplayer == null) { + player.sendMessage(Residence.getLM().getMessage("General.NotOnline")); + return true; + } + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (!group.hasKickAccess() && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + ClaimedResidence res = Residence.getResidenceManager().getByLoc(targetplayer.getLocation()); + + if (res == null || res != null && !res.isOwner(player) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Residence.PlayerNotIn")); + return true; + } + + if (!res.isOwner(player)) + return false; + + if (res.getPlayersInResidence().contains(targetplayer)) { + Location loc = Residence.getConfigManager().getKickLocation(); + if (loc != null) + targetplayer.teleport(loc); + else + targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation(), player)); + targetplayer.sendMessage(Residence.getLM().getMessage("Residence.Kicked")); + } + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java new file mode 100644 index 000000000..1ed833bbe --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -0,0 +1,104 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class lease implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length == 2 || args.length == 3) { + if (args[1].equals("expires")) { + ClaimedResidence res = null; + if (args.length == 2) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + return true; + } + } else { + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + } + + String until = Residence.getLeaseManager().getExpireTime(res.getName()); + if (until != null) + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenew", until)); + return true; + } + if (args[1].equals("renew")) { + if (args.length == 3) { + Residence.getLeaseManager().renewArea(args[2], player); + } else { + Residence.getLeaseManager().renewArea(Residence.getResidenceManager().getNameByLoc(player.getLocation()), player); + } + return true; + } else if (args[1].equals("cost")) { + if (args.length == 3) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res == null || Residence.getLeaseManager().leaseExpires(args[2])) { + int cost = Residence.getLeaseManager().getRenewCost(res); + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenewalCost", args[2], cost)); + } else { + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); + } + return true; + } else { + String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByName(area); + if (area == null || res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); + return true; + } + if (Residence.getLeaseManager().leaseExpires(area)) { + int cost = Residence.getLeaseManager().getRenewCost(res); + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenewalCost", area, cost)); + } else { + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); + } + return true; + } + } + } else if (args.length == 4) { + if (args[1].equals("set")) { + if (!resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + if (args[3].equals("infinite")) { + if (Residence.getLeaseManager().leaseExpires(args[2])) { + Residence.getLeaseManager().removeExpireTime(args[2]); + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseInfinite")); + } else { + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); + } + return true; + } else { + int days; + try { + days = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Days")); + return true; + } + Residence.getLeaseManager().setExpireTime(player, args[2], days); + return true; + } + } + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java new file mode 100644 index 000000000..bd3ebcbb6 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -0,0 +1,36 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class limits implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 1 && args.length != 2) + return false; + final String[] tempArgs = args; + final Player p = player; + OfflinePlayer target; + boolean rsadm = false; + if (tempArgs.length == 1) { + target = p; + rsadm = true; + } else + target = Residence.getOfflinePlayer(tempArgs[1]); + if (target == null) + return false; + Residence.getPermissionManager().getGroup(target.getName(), Residence.getConfigManager().getDefaultWorld()).printLimits(p, target, rsadm); + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java new file mode 100644 index 000000000..06a06b7f1 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -0,0 +1,43 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class list implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + + if (args.length == 1) { + Residence.getResidenceManager().listResidences(player); + return true; + } else if (args.length == 2) { + try { + Integer.parseInt(args[1]); + Residence.getResidenceManager().listResidences(player, page); + } catch (Exception ex) { + Residence.getResidenceManager().listResidences(player, args[1]); + } + return true; + } else if (args.length == 3) { + Residence.getResidenceManager().listResidences(player, args[1], page); + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java new file mode 100644 index 000000000..4390af63b --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -0,0 +1,39 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class listall implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + + if (args.length == 1) { + Residence.getResidenceManager().listAllResidences(player, 1); + } else if (args.length == 2) { + try { + Residence.getResidenceManager().listAllResidences(player, page); + } catch (Exception ex) { + } + } else { + return false; + } + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/listallhidden.java b/src/com/bekvon/bukkit/residence/commands/listallhidden.java new file mode 100644 index 000000000..a8ddaadf8 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/listallhidden.java @@ -0,0 +1,41 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class listallhidden implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + if (!resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + if (args.length == 1) { + Residence.getResidenceManager().listAllResidences(player, 1, true); + } else if (args.length == 2) { + try { + Residence.getResidenceManager().listAllResidences(player, page, true); + } catch (Exception ex) { + } + } else { + return false; + } + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/listhidden.java b/src/com/bekvon/bukkit/residence/commands/listhidden.java new file mode 100644 index 000000000..9cc4a11a9 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/listhidden.java @@ -0,0 +1,46 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class listhidden implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + if (!resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + if (args.length == 1) { + Residence.getResidenceManager().listResidences(player, 1, true); + return true; + } else if (args.length == 2) { + try { + Integer.parseInt(args[1]); + Residence.getResidenceManager().listResidences(player, page, true); + } catch (Exception ex) { + Residence.getResidenceManager().listResidences(player, args[1], 1, true); + } + return true; + } else if (args.length == 3) { + Residence.getResidenceManager().listResidences(player, args[1], page, true); + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/lists.java b/src/com/bekvon/bukkit/residence/commands/lists.java new file mode 100644 index 000000000..9b08f2545 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/lists.java @@ -0,0 +1,61 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.FlagPermissions; + +public class lists implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length == 2) { + if (args[1].equals("list")) { + Residence.getPermissionListManager().printLists(player); + return true; + } + } else if (args.length == 3) { + if (args[1].equals("view")) { + Residence.getPermissionListManager().printList(player, args[2]); + return true; + } else if (args[1].equals("remove")) { + Residence.getPermissionListManager().removeList(player, args[2]); + return true; + } else if (args[1].equals("add")) { + Residence.getPermissionListManager().makeList(player, args[2]); + return true; + } + } else if (args.length == 4) { + if (args[1].equals("apply")) { + Residence.getPermissionListManager().applyListToResidence(player, args[2], args[3], resadmin); + return true; + } + } else if (args.length == 5) { + if (args[1].equals("set")) { + Residence.getPermissionListManager().getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); + player.sendMessage(Residence.getLM().getMessage("Flag.Set")); + return true; + } + } else if (args.length == 6) { + if (args[1].equals("gset")) { + Residence.getPermissionListManager().getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); + player.sendMessage(Residence.getLM().getMessage("Flag.Set")); + return true; + } else if (args[1].equals("pset")) { + Residence.getPermissionListManager().getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); + player.sendMessage(Residence.getLM().getMessage("Flag.Set")); + return true; + } + } + return false; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java new file mode 100644 index 000000000..fd7c19b93 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -0,0 +1,75 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class lset implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + ClaimedResidence res = null; + Material mat = null; + String listtype = null; + boolean showinfo = false; + if (args.length == 2 && args[1].equals("info")) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + showinfo = true; + } else if (args.length == 3 && args[2].equals("info")) { + res = Residence.getResidenceManager().getByName(args[1]); + showinfo = true; + } + if (showinfo) { + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + player.sendMessage(Residence.getLM().getMessage("General.Blacklist")); + res.getItemBlacklist().printList(player); + player.sendMessage(Residence.getLM().getMessage("General.Ignorelist")); + res.getItemIgnoreList().printList(player); + return true; + } else if (args.length == 4) { + res = Residence.getResidenceManager().getByName(args[1]); + listtype = args[2]; + try { + mat = Material.valueOf(args[3].toUpperCase()); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Material")); + return true; + } + } else if (args.length == 3) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + listtype = args[1]; + try { + mat = Material.valueOf(args[2].toUpperCase()); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Material")); + return true; + } + } + if (res != null) { + if (listtype.equalsIgnoreCase("blacklist")) { + res.getItemBlacklist().playerListChange(player, mat, resadmin); + } else if (listtype.equalsIgnoreCase("ignorelist")) { + res.getItemIgnoreList().playerListChange(player, mat, resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.List")); + } + return true; + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java new file mode 100644 index 000000000..38534360e --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -0,0 +1,277 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Set; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.signsStuff.Signs; + +public class market implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + + if (args.length == 1) { + return false; + } + String secondCommand = args[1].toLowerCase(); + if (secondCommand.equals("list")) { + return commandResMarketList(args, resadmin, player, page); + } + if (secondCommand.equals("autorenew")) { + return commandResMarketAutorenew(args, resadmin, player, page); + } + if (secondCommand.equals("rentable")) { + return commandResMarketRentable(args, resadmin, player, page); + } + if (secondCommand.equals("rent")) { + return commandResMarketRent(args, resadmin, player, page); + } + if (secondCommand.equals("release")) { + if (args.length != 3) { + return false; + } + if (Residence.getRentManager().isRented(args[2])) { + Residence.getRentManager().removeFromForRent(player, args[2], resadmin); + } else { + Residence.getRentManager().unrent(player, args[2], resadmin); + } + return true; + } + if (secondCommand.equals("sign")) { + if (args.length != 3) { + return false; + } + Block block = player.getTargetBlock((Set) null, 10); + + if (!(block.getState() instanceof Sign)) { + player.sendMessage(Residence.getLM().getMessage("Sign.LookAt")); + return true; + } + + Sign sign = (Sign) block.getState(); + + Signs signInfo = new Signs(); + + Signs oldSign = Residence.getSignUtil().getSignFromLoc(sign.getLocation()); + + if (oldSign != null) + signInfo = oldSign; + + Location loc = sign.getLocation(); + + String landName = null; + + ClaimedResidence CurrentRes = Residence.getResidenceManager().getByLoc(sign.getLocation()); + + if (CurrentRes == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + + if (!CurrentRes.isOwner(player) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotOwner")); + return true; + } + + final ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + + landName = res.getName(); + + boolean ForSale = Residence.getTransactionManager().isForSale(landName); + boolean ForRent = Residence.getRentManager().isForRent(landName); + + int category = 1; + if (Residence.getSignUtil().getSigns().GetAllSigns().size() > 0) + category = Residence.getSignUtil().getSigns().GetAllSigns().get(Residence.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; + + if (ForSale || ForRent) { + signInfo.setCategory(category); + signInfo.setResidence(landName); + signInfo.setWorld(loc.getWorld().getName()); + signInfo.setX(loc.getBlockX()); + signInfo.setY(loc.getBlockY()); + signInfo.setZ(loc.getBlockZ()); + signInfo.setLocation(loc); + Residence.getSignUtil().getSigns().addSign(signInfo); + Residence.getSignUtil().saveSigns(); + } else { + player.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); + return true; + } + + Residence.getSignUtil().CheckSign(res, 5); + + return true; + } + if (secondCommand.equals("info")) { + if (args.length == 2) { + String areaname = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + boolean sell = Residence.getTransactionManager().viewSaleInfo(areaname, player); + if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isForRent(areaname)) { + Residence.getRentManager().printRentInfo(player, areaname); + } else if (!sell) { + sender.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); + } + } else if (args.length == 3) { + boolean sell = Residence.getTransactionManager().viewSaleInfo(args[2], player); + if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isForRent(args[2])) { + Residence.getRentManager().printRentInfo(player, args[2]); + } else if (!sell) { + sender.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); + } + } else { + return false; + } + return true; + } + if (secondCommand.equals("buy")) { + if (args.length != 3) { + return false; + } + Residence.getTransactionManager().buyPlot(args[2], player, resadmin); + return true; + } + if (secondCommand.equals("unsell")) { + if (args.length != 3) { + return false; + } + Residence.getTransactionManager().removeFromSale(player, args[2], resadmin); + return true; + } + if (secondCommand.equals("sell")) { + if (args.length != 4) { + return false; + } + int amount; + try { + amount = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + return true; + } + Residence.getTransactionManager().putForSale(args[2], player, amount, resadmin); + return true; + } + return false; + } + + private boolean commandResMarketRent(String[] args, boolean resadmin, Player player, int page) { + if (args.length < 3 || args.length > 4) { + return false; + } + boolean repeat = false; + if (args.length == 4) { + if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { + repeat = true; + } else if (!args[3].equalsIgnoreCase("f") && !args[3].equalsIgnoreCase("false")) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Boolean")); + return true; + } + } + Residence.getRentManager().rent(player, args[2], repeat, resadmin); + return true; + } + + private boolean commandResMarketRentable(String[] args, boolean resadmin, Player player, int page) { + if (args.length < 5 || args.length > 6) { + return false; + } + if (!Residence.getConfigManager().enabledRentSystem()) { + player.sendMessage(Residence.getLM().getMessage("Rent.Disabled")); + return true; + } + int days; + int cost; + try { + cost = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Cost")); + return true; + } + try { + days = Integer.parseInt(args[4]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Days")); + return true; + } + boolean repeat = false; + if (args.length == 6) { + if (args[5].equalsIgnoreCase("t") || args[5].equalsIgnoreCase("true")) { + repeat = true; + } else if (!args[5].equalsIgnoreCase("f") && !args[5].equalsIgnoreCase("false")) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Boolean")); + return true; + } + } + Residence.getRentManager().setForRent(player, args[2], cost, days, repeat, resadmin); + return true; + } + + private boolean commandResMarketAutorenew(String[] args, boolean resadmin, Player player, int page) { + if (!Residence.getConfigManager().enableEconomy()) { + player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + return true; + } + if (args.length != 4) { + return false; + } + boolean value; + if (args[3].equalsIgnoreCase("true") || args[3].equalsIgnoreCase("t")) { + value = true; + } else if (args[3].equalsIgnoreCase("false") || args[3].equalsIgnoreCase("f")) { + value = false; + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Boolean")); + return true; + } + if (Residence.getRentManager().isRented(args[2]) && Residence.getRentManager().getRentingPlayer(args[2]).equalsIgnoreCase(player.getName())) { + Residence.getRentManager().setRentedRepeatable(player, args[2], value, resadmin); + } else if (Residence.getRentManager().isForRent(args[2])) { + Residence.getRentManager().setRentRepeatable(player, args[2], value, resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Economy.RentReleaseInvalid", ChatColor.YELLOW + args[2] + ChatColor.RED)); + } + return true; + } + + private boolean commandResMarketList(String[] args, boolean resadmin, Player player, int page) { + if (!Residence.getConfigManager().enableEconomy()) { + player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + return true; + } + player.sendMessage(Residence.getLM().getMessage("General.MarketList")); + Residence.getTransactionManager().printForSaleResidences(player); + if (Residence.getConfigManager().enabledRentSystem()) { + Residence.getRentManager().printRentableResidences(player); + } + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java new file mode 100644 index 000000000..5964a5252 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -0,0 +1,30 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class material implements cmd { + + @SuppressWarnings("deprecation") + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 2) { + return false; + } + try { + player.sendMessage(Residence.getLM().getMessage("General.MaterialGet", args[1], Material.getMaterial(Integer.parseInt(args[1])).name())); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Material")); + } + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java new file mode 100644 index 000000000..6d996a710 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -0,0 +1,96 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class message implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + ClaimedResidence res = null; + int start = 0; + boolean enter = false; + if (args.length < 2) { + return false; + } + if (args[1].equals("enter")) { + enter = true; + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + start = 2; + } else if (args[1].equals("leave")) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + start = 2; + } else if (args[1].equals("remove")) { + if (args.length > 2 && args[2].equals("enter")) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) { + res.setEnterLeaveMessage(player, null, true, resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } else if (args.length > 2 && args[2].equals("leave")) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) { + res.setEnterLeaveMessage(player, null, false, resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } + player.sendMessage(Residence.getLM().getMessage("Invalid.MessageType")); + return true; + } else if (args.length > 2 && args[2].equals("enter")) { + enter = true; + res = Residence.getResidenceManager().getByName(args[1]); + start = 3; + } else if (args.length > 2 && args[2].equals("leave")) { + res = Residence.getResidenceManager().getByName(args[1]); + start = 3; + } else if (args.length > 2 && args[2].equals("remove")) { + res = Residence.getResidenceManager().getByName(args[1]); + if (args.length != 4) { + return false; + } + if (args[3].equals("enter")) { + if (res != null) { + res.setEnterLeaveMessage(player, null, true, resadmin); + } + return true; + } else if (args[3].equals("leave")) { + if (res != null) { + res.setEnterLeaveMessage(player, null, false, resadmin); + } + return true; + } + player.sendMessage(Residence.getLM().getMessage("Invalid.MessageType")); + return true; + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.MessageType")); + return true; + } + if (start == 0) { + return false; + } + String message = ""; + for (int i = start; i < args.length; i++) { + message = message + args[i] + " "; + } + if (res != null) { + res.setEnterLeaveMessage(player, message, enter, resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/mirror.java b/src/com/bekvon/bukkit/residence/commands/mirror.java new file mode 100644 index 000000000..74fe2b560 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/mirror.java @@ -0,0 +1,24 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class mirror implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 3) + return false; + + Residence.getResidenceManager().mirrorPerms(player, args[2], args[1], resadmin); + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java new file mode 100644 index 000000000..2dff24f28 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -0,0 +1,39 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class padd implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + String baseCmd = "res"; + if (resadmin) + baseCmd = "resadmin"; + if (args.length == 2) { + if (!Residence.isPlayerExist(player, args[1], true)) + return false; + + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " trusted true"); + return true; + } + if (args.length == 3) { + if (!Residence.isPlayerExist(player, args[2], true)) + return false; + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " " + args[2] + " trusted true"); + return true; + } + return false; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java new file mode 100644 index 000000000..4f672fff4 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -0,0 +1,33 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.cmd; + +public class pdel implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + String baseCmd = "res"; + if (resadmin) + baseCmd = "resadmin"; + if (args.length == 2) { + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " trusted remove"); + return true; + } + if (args.length == 3) { + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " " + args[2] + " trusted remove"); + return true; + } + return false; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java new file mode 100644 index 000000000..6ae638cb0 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -0,0 +1,98 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.gui.SetFlag; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class pset implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { + ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().removeAllPlayerFlags(player, args[1], resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); + if (area != null) { + area.getPermissions().removeAllPlayerFlags(player, args[2], resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } else if (args.length == 4) { + ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); + + if (!Residence.isPlayerExist(player, args[1], true)) + return false; + + if (area != null) { + area.getPermissions().setPlayerFlag(player, args[1], args[2], args[3], resadmin, true); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } else if (args.length == 5) { + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); + if (!Residence.isPlayerExist(player, args[2], true)) + return false; + if (area != null) { + area.getPermissions().setPlayerFlag(player, args[2], args[3], args[4], resadmin, true); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } else if (args.length == 2) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) { + if (!Residence.isPlayerExist(player, args[1], true)) + return false; + if (!res.isOwner(player) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + SetFlag flag = new SetFlag(res.getName(), player, resadmin); + flag.setTargePlayer(args[1]); + flag.recalculatePlayer(res); + ResidencePlayerListener.GUI.put(player.getName(), flag); + player.openInventory(flag.getInventory()); + } else + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } else if (args.length == 3) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + if (res != null) { + if (!Residence.isPlayerExist(player, args[2], true)) + return false; + if (!res.isOwner(player) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + SetFlag flag = new SetFlag(res.getName(), player, resadmin); + flag.setTargePlayer(args[2]); + flag.recalculatePlayer(res); + ResidencePlayerListener.GUI.put(player.getName(), flag); + player.openInventory(flag.getInventory()); + } else + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java new file mode 100644 index 000000000..0b10800ec --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -0,0 +1,188 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class rc implements cmd { + + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return true; + Player player = (Player) sender; + String pname = player.getName(); + if (!Residence.getConfigManager().chatEnabled()) { + player.sendMessage(Residence.getLM().getMessage("Residence.ChatDisabled")); + return false; + } + if (args.length > 0) + args = Arrays.copyOfRange(args, 1, args.length); + + if (args.length == 0) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + if (chat != null) { + Residence.getChatManager().removeFromChannel(pname); + Residence.getPlayerListener().removePlayerResidenceChat(player); + return true; + } + player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + return true; + } else { + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + if (chat != null && chat.getChannelName().equals(res.getName())) { + Residence.getChatManager().removeFromChannel(pname); + Residence.getPlayerListener().removePlayerResidenceChat(player); + return true; + } + } + if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !Residence.getPermissionManager().isResidenceAdmin(player)) { + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "chat", res.getName())); + return false; + } + + Residence.getPlayerListener().tooglePlayerResidenceChat(player, res.getName()); + Residence.getChatManager().setChannel(pname, res); + return true; + } else if (args.length == 1) { + if (args[0].equalsIgnoreCase("l") || args[0].equalsIgnoreCase("leave")) { + Residence.getChatManager().removeFromChannel(pname); + Residence.getPlayerListener().removePlayerResidenceChat(player); + return true; + } + ClaimedResidence res = Residence.getResidenceManager().getByName(args[0]); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Chat.InvalidChannel")); + return true; + } + + if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !Residence.getPermissionManager().isResidenceAdmin(player)) { + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "chat", res.getName())); + return false; + } + Residence.getPlayerListener().tooglePlayerResidenceChat(player, res.getName()); + Residence.getChatManager().setChannel(pname, res); + + return true; + } else if (args.length == 2) { + if (args[0].equalsIgnoreCase("setcolor")) { + + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + + if (chat == null) { + player.sendMessage(Residence.getLM().getMessage("Chat.JoinFirst")); + return true; + } + + ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); + + if (res == null) + return false; + + if (!res.isOwner(player) && !Residence.getPermissionManager().isResidenceAdmin(player)) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + if (!player.hasPermission("residence.chatcolor")) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + String posibleColor = args[1]; + + if (!posibleColor.contains("&")) + posibleColor = "&" + posibleColor; + + if (posibleColor.length() != 2 || ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', posibleColor)).length() != 0) { + player.sendMessage(Residence.getLM().getMessage("Chat.InvalidColor")); + return true; + } + + ChatColor color = ChatColor.getByChar(posibleColor.replace("&", "")); + res.setChannelColor(color); + chat.setChannelColor(color); + player.sendMessage(Residence.getLM().getMessage("Chat.ChangedColor", color.name())); + return true; + } else if (args[0].equalsIgnoreCase("setprefix")) { + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + + if (chat == null) { + player.sendMessage(Residence.getLM().getMessage("Chat.JoinFirst")); + return true; + } + + ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); + + if (res == null) + return false; + + if (!res.isOwner(player) && !Residence.getPermissionManager().isResidenceAdmin(player)) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + if (!player.hasPermission("residence.chatprefix")) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + String prefix = args[1]; + + if (prefix.length() > Residence.getConfigManager().getChatPrefixLength()) { + player.sendMessage(Residence.getLM().getMessage("Chat.InvalidPrefixLength", Residence.getConfigManager() + .getChatPrefixLength())); + return true; + } + + res.setChatPrefix(prefix); + chat.setChatPrefix(prefix); + player.sendMessage(Residence.getLM().getMessage("Chat.ChangedPrefix", ChatColor.translateAlternateColorCodes('&', prefix))); + return true; + } else if (args[0].equalsIgnoreCase("kick")) { + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + + if (chat == null) { + player.sendMessage(Residence.getLM().getMessage("Chat.JoinFirst")); + return true; + } + + ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); + + if (res == null) + return false; + + if (!res.getOwner().equals(player.getName()) && !Residence.getPermissionManager().isResidenceAdmin(player)) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + if (!player.hasPermission("residence.chatkick")) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + String targetName = args[1]; + if (!chat.hasMember(targetName)) { + player.sendMessage(Residence.getLM().getMessage("Chat.NotInChannel")); + return false; + } + + chat.leave(targetName); + Residence.getPlayerListener().removePlayerResidenceChat(targetName); + player.sendMessage(Residence.getLM().getMessage("Chat.Kicked", targetName, chat.getChannelName())); + return true; + } + } + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java new file mode 100644 index 000000000..9a1c94cdd --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -0,0 +1,117 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class remove implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + + Player player = null; + if (sender instanceof Player) { + player = (Player) sender; + + if (Residence.deleteConfirm.containsKey(player.getName())) + Residence.deleteConfirm.remove(player.getName()); + + if (args.length == 1) { + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return false; + } + + if (res.isSubzone() && !player.hasPermission("residence.delete.subzone") && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Subzone.CantDelete")); + return false; + } + + if (res.isSubzone() && player.hasPermission("residence.delete.subzone") && !resadmin && Residence.getConfigManager().isPreventSubZoneRemoval() && !res + .getParent().isOwner(player)) { + player.sendMessage(Residence.getLM().getMessage("Subzone.CantDeleteNotOwnerOfParent")); + return false; + } + + if (!res.isSubzone() && !player.hasPermission("residence.delete") && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Residence.CantDeleteResidence")); + return false; + } + + if (res.isSubzone()) { + String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + String[] split = area.split("\\."); + String words = split[split.length - 1]; + if (!Residence.deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { + player.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", words)); + Residence.deleteConfirm.put(player.getName(), area); + } else { + Residence.getResidenceManager().removeResidence(player, area, resadmin); + } + return true; + } else { + if (!Residence.deleteConfirm.containsKey(player.getName()) || !res.getName().equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { + player.sendMessage(Residence.getLM().getMessage("Residence.DeleteConfirm", res.getName())); + Residence.deleteConfirm.put(player.getName(), res.getName()); + } else { + Residence.getResidenceManager().removeResidence(player, res.getName(), resadmin); + } + return true; + } + + } + } + if (args.length != 2) { + return false; + } + if (player != null) { + if (!Residence.deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { + String words = ""; + if (Residence.getResidenceManager().getByName(args[1]) != null) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + if (res.getParent() != null) { + String[] split = args[1].split("\\."); + words = split[split.length - 1]; + } + } + if (words == "") { + player.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", args[1])); + } else { + player.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", words)); + } + Residence.deleteConfirm.put(player.getName(), args[1]); + } else { + Residence.getResidenceManager().removeResidence(player, args[1], resadmin); + } + } else { + if (!Residence.deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(Residence.deleteConfirm.get("Console"))) { + String words = ""; + if (Residence.getResidenceManager().getByName(args[1]) != null) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + if (res.getParent() != null) { + String[] split = args[1].split("\\."); + words = split[split.length - 1]; + } + } + if (words == "") { + Bukkit.getConsoleSender().sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", args[1])); + } else { + Bukkit.getConsoleSender().sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", words)); + } + Residence.deleteConfirm.put("Console", args[1]); + } else { + Residence.getResidenceManager().removeResidence(args[1]); + } + } + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/removeall.java b/src/com/bekvon/bukkit/residence/commands/removeall.java new file mode 100644 index 000000000..38c110dc4 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/removeall.java @@ -0,0 +1,30 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class removeall implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 2) { + return false; + } + if (resadmin || args[1].endsWith(player.getName())) { + Residence.getResidenceManager().removeAllByOwner(player, args[1]); + player.sendMessage(Residence.getLM().getMessage("Residence.RemovePlayersResidences", args[1])); + } else { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + } + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java new file mode 100644 index 000000000..0c03c4354 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -0,0 +1,27 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public abstract class removeworld implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + + if (args.length != 2) + return false; + + if (sender instanceof ConsoleCommandSender) { + Residence.getResidenceManager().removeAllFromWorld(sender, args[1]); + return true; + } else { + sender.sendMessage(ChatColor.RED + "MUST be run from console."); + } + + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/rename.java b/src/com/bekvon/bukkit/residence/commands/rename.java new file mode 100644 index 000000000..ef43ca267 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/rename.java @@ -0,0 +1,24 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class rename implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length == 3) { + Residence.getResidenceManager().renameResidence(player, args[1], args[2], resadmin); + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/renamearea.java b/src/com/bekvon/bukkit/residence/commands/renamearea.java new file mode 100644 index 000000000..043519de7 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/renamearea.java @@ -0,0 +1,29 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class renamearea implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 4) + return false; + + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + if (res == null) + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + else + res.renameArea(player, args[2], args[3], resadmin); + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/resadmin.java b/src/com/bekvon/bukkit/residence/commands/resadmin.java new file mode 100644 index 000000000..c0afffc9b --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/resadmin.java @@ -0,0 +1,30 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class resadmin implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + if (args.length != 2) + return true; + + Player player = (Player) sender; + if (args[1].equals("on")) { + Residence.resadminToggle.add(player.getName()); + player.sendMessage(Residence.getLM().getMessage("General.AdminToggleTurnOn")); + } else if (args[1].equals("off")) { + Residence.resadminToggle.remove(player.getName()); + player.sendMessage(Residence.getLM().getMessage("General.AdminToggleTurnOff")); + } + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/resbank.java b/src/com/bekvon/bukkit/residence/commands/resbank.java new file mode 100644 index 000000000..12c39176d --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/resbank.java @@ -0,0 +1,55 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class resbank implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + + if (args.length != 3 && args.length != 4) { + return false; + } + ClaimedResidence res = null; + + if (args.length == 4) { + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + } else { + if (sender instanceof Player) + res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); + } + if (res == null) { + sender.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + return true; + } + int amount = 0; + try { + if (args.length == 3) + amount = Integer.parseInt(args[2]); + else + amount = Integer.parseInt(args[3]); + } catch (Exception ex) { + sender.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + return true; + } + if (args[1].equals("deposit")) { + res.getBank().deposit(sender, amount, resadmin); + } else if (args[1].equals("withdraw")) { + res.getBank().withdraw(sender, amount, resadmin); + } else { + return false; + } + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java new file mode 100644 index 000000000..155c75b13 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -0,0 +1,28 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class reset implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 2) + return false; + + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + res.getPermissions().applyDefaultFlags(player, resadmin); + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java new file mode 100644 index 000000000..416abe3e4 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -0,0 +1,56 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.utils.RandomTp; + +public class rt implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 1) { + return false; + } + + int sec = Residence.getConfigManager().getrtCooldown(); + if (Residence.getRandomTeleportMap().containsKey(player.getName()) && !resadmin) { + if (Residence.getRandomTeleportMap().get(player.getName()) + (sec * 1000) > System.currentTimeMillis()) { + int left = (int) (sec - ((System.currentTimeMillis() - Residence.getRandomTeleportMap().get(player.getName())) / 1000)); + player.sendMessage(Residence.getLM().getMessage("RandomTeleport.TpLimit", left)); + return true; + } + } + + if (!player.hasPermission("residence.randomtp") && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + Location loc = RandomTp.getRandomlocation(player.getLocation().getWorld().getName()); + Residence.getRandomTeleportMap().put(player.getName(), System.currentTimeMillis()); + + if (loc == null) { + player.sendMessage(Residence.getLM().getMessage("RandomTeleport.IncorrectLocation", sec)); + return true; + } + + if (Residence.getConfigManager().getTeleportDelay() > 0 && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("RandomTeleport.TeleportStarted", loc.getX(), loc.getY(), loc + .getZ(), Residence.getConfigManager().getTeleportDelay())); + Residence.getTeleportDelayMap().add(player.getName()); + Residence.getRandomTpManager().performDelaydTp(loc, player); + } else + RandomTp.performInstantTp(loc, player); + + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java new file mode 100644 index 000000000..4f237cdc6 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -0,0 +1,172 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.selection.AutoSelection; + +public class select implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (!group.selectCommandAccess() && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("SelectDiabled")); + return true; + } + if (!group.canCreateResidences() && group.getMaxSubzoneDepth(player.getName()) <= 0 && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("SelectDiabled")); + return true; + } + if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player + .isPermissionSet("residence.select")) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("SelectDiabled")); + return true; + } + if (args.length == 2) { + if (args[1].equals("size") || args[1].equals("cost")) { + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + try { + Residence.getSelectionManager().showSelectionInfo(player); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + return true; + } + } else if (Residence.getSelectionManager().worldEdit(player)) { + try { + Residence.getSelectionManager().showSelectionInfo(player); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + return true; + } + } + } else if (args[1].equals("vert")) { + Residence.getSelectionManager().vert(player, resadmin); + return true; + } else if (args[1].equals("sky")) { + Residence.getSelectionManager().sky(player, resadmin); + return true; + } else if (args[1].equals("bedrock")) { + Residence.getSelectionManager().bedrock(player, resadmin); + return true; + } else if (args[1].equals("coords")) { + player.sendMessage(Residence.getLM().getMessage("General.Separator")); + Location playerLoc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); + if (playerLoc1 != null) { + player.sendMessage(Residence.getLM().getMessage("Select.Primary", Residence.getLM().getMessage("General.CoordsTop", playerLoc1.getBlockX(), playerLoc1 + .getBlockY(), playerLoc1.getBlockZ()))); + } + Location playerLoc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); + if (playerLoc2 != null) { + player.sendMessage(Residence.getLM().getMessage("Select.Secondary", Residence.getLM().getMessage("General.CoordsBottom", playerLoc2.getBlockX(), playerLoc2 + .getBlockY(), playerLoc2.getBlockZ()))); + } + player.sendMessage(Residence.getLM().getMessage("General.Separator")); + return true; + } else if (args[1].equals("chunk")) { + Residence.getSelectionManager().selectChunk(player); + return true; + } else if (args[1].equals("worldedit")) { + if (Residence.getSelectionManager().worldEdit(player)) { + player.sendMessage(Residence.getLM().getMessage("Select.Success")); + } + return true; + } + } else if (args.length == 3) { + if (args[1].equals("expand")) { + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + return true; + } + Residence.getSelectionManager().modify(player, false, amount); + return true; + } else if (args[1].equals("shift")) { + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + return true; + } + Residence.getSelectionManager().modify(player, true, amount); + return true; + } + } + if ((args.length == 2 || args.length == 3) && args[1].equals("auto")) { + Player target = player; + if (args.length == 3) { + if (!player.hasPermission("residence.select.auto.others")) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + target = Bukkit.getPlayer(args[2]); + if (target == null) { + player.sendMessage(Residence.getLM().getMessage("General.NotOnline")); + return true; + } + } + AutoSelection.switchAutoSelection(target); + return true; + } + if (args.length > 1 && args[1].equals("residence")) { + String resName; + String areaName; + ClaimedResidence res = null; + if (args.length > 2) { + res = Residence.getResidenceManager().getByName(args[2]); + } else { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + } + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + resName = res.getName(); + CuboidArea area = null; + if (args.length > 3) { + area = res.getArea(args[3]); + areaName = args[3]; + } else { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } + if (area != null) { + Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), true); + Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), true); + player.sendMessage(Residence.getLM().getMessage("Select.Area", areaName, resName)); + } else { + player.sendMessage(Residence.getLM().getMessage("Area.NonExist")); + } + return true; + } else { + try { + Residence.getSelectionManager().selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); + return true; + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Select.Fail")); + return true; + } + } + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java new file mode 100644 index 000000000..ab1720dbb --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -0,0 +1,38 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class server implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (!resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + if (args.length == 2) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + res.getPermissions().setOwner(Residence.getServerLandname(), false); + player.sendMessage(Residence.getLM().getMessage("Residence.OwnerChange", args[1], Residence.getServerLandname())); + return true; + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java new file mode 100644 index 000000000..ca17dd732 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -0,0 +1,69 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.gui.SetFlag; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class set implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length == 3) { + String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + if (area != null) { + Residence.getResidenceManager().getByName(area).getPermissions().setFlag(player, args[1], args[2], resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } else if (args.length == 4) { + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); + if (area != null) { + area.getPermissions().setFlag(player, args[2], args[3], resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } else if (args.length == 1 && Residence.getConfigManager().useFlagGUI()) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) { + if (!res.isOwner(player) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + SetFlag flag = new SetFlag(res.getName(), player, resadmin); + flag.recalculateResidence(res); + ResidencePlayerListener.GUI.put(player.getName(), flag); + player.openInventory(flag.getInventory()); + } else + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } else if (args.length == 2 && Residence.getConfigManager().useFlagGUI()) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + if (res != null) { + if (!res.isOwner(player) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + SetFlag flag = new SetFlag(res.getName(), player, resadmin); + flag.recalculateResidence(res); + ResidencePlayerListener.GUI.put(player.getName(), flag); + player.openInventory(flag.getInventory()); + } else + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java new file mode 100644 index 000000000..19af5431b --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -0,0 +1,39 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class setowner implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + + if (!resadmin) { + sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); + if (area != null) { + area.getPermissions().setOwner(args[2], true); + if (Residence.getRentManager().isForRent(area.getName())) + Residence.getRentManager().removeRentable(area.getName()); + if (Residence.getTransactionManager().isForSale(area.getName())) + Residence.getTransactionManager().removeFromSale(area.getName()); + area.getPermissions().applyDefaultFlags(); + + if (area.getParent() == null) { + sender.sendMessage(Residence.getLM().getMessage("Residence.OwnerChange", args[1], args[2])); + } else { + sender.sendMessage(Residence.getLM().getMessage("Subzone.OwnerChange", args[1].split("\\.")[args[1].split("\\.").length - 1], args[2])); + } + } else { + sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java new file mode 100644 index 000000000..5d4585058 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -0,0 +1,460 @@ +package com.bekvon.bukkit.residence.commands; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.TimeZone; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.shopStuff.Board; +import com.bekvon.bukkit.residence.shopStuff.ShopListener; +import com.bekvon.bukkit.residence.shopStuff.ShopVote; +import com.bekvon.bukkit.residence.shopStuff.Vote; + +public class shop implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + + if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("votes") || args[1].equalsIgnoreCase("likes"))) { + + int VotePage = 1; + + ClaimedResidence res = null; + if (args.length == 2) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + return true; + } + } else if (args.length == 3) { + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + try { + VotePage = Integer.parseInt(args[2]); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + return true; + } + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + return true; + } + } + + } else if (args.length == 4) { + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + return true; + } + try { + VotePage = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + return true; + } + } + + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + return true; + } + + Map> ShopList = Residence.getShopSignUtilManager().GetAllVoteList(); + + List VoteList = new ArrayList(); + if (ShopList.containsKey(res.getName())) { + VoteList = ShopList.get(res.getName()); + } + + String separator = ChatColor.GOLD + ""; + String simbol = "\u25AC"; + for (int i = 0; i < 5; i++) { + separator += simbol; + } + int pagecount = (int) Math.ceil((double) VoteList.size() / (double) 10); + if (page > pagecount || page < 1) { + sender.sendMessage(Residence.getLM().getMessage("Shop.NoVotes")); + return true; + } + + player.sendMessage(Residence.getLM().getMessage("Shop.VotesTopLine", separator, res.getName(), VotePage, pagecount, separator)); + + int start = VotePage * 10 - 9; + int end = VotePage * 10 + 1; + int position = 0; + int i = start; + for (ShopVote one : VoteList) { + position++; + + if (position < start) + continue; + + if (position >= end) + break; + + Date dNow = new Date(one.getTime()); + SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss"); + ft.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); + String timeString = ft.format(dNow); + + String message = Residence.getLM().getMessage("Shop.VotesList", i, one.getName(), (Residence.getConfigManager().isOnlyLike() + ? "" : one.getVote()), timeString); + player.sendMessage(message); + i++; + } + + if (pagecount == 1) + return true; + + int NextPage = page + 1; + NextPage = page < pagecount ? NextPage : page; + int Prevpage = page - 1; + Prevpage = page > 1 ? Prevpage : page; + + String prevCmd = "/res shop votes " + res.getName() + " " + Prevpage; + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; + String nextCmd = "/res shop votes " + res.getName() + " " + NextPage; + String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); + + return true; + } + if ((args.length == 2 || args.length == 3) && args[1].equalsIgnoreCase("list")) { + + int Shoppage = 1; + + if (args.length == 3) { + try { + Shoppage = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + return true; + } + } + + Map ShopList = Residence.getShopSignUtilManager().getSortedShopList(); + + String separator = ChatColor.GOLD + ""; + String simbol = "\u25AC"; + for (int i = 0; i < 5; i++) { + separator += simbol; + } + int pagecount = (int) Math.ceil((double) ShopList.size() / (double) 10); + if (page > pagecount || page < 1) { + sender.sendMessage(Residence.getLM().getMessage("Shop.NoVotes")); + return true; + } + + player.sendMessage(Residence.getLM().getMessage("Shop.ListTopLine", separator, Shoppage, pagecount, separator)); + + int start = Shoppage * 10 - 9; + int end = Shoppage * 10 + 1; + int position = 0; + int i = start; + for (Entry one : ShopList.entrySet()) { + position++; + + if (position < start) + continue; + + if (position >= end) + break; + + Vote vote = Residence.getShopSignUtilManager().getAverageVote(one.getKey()); + String votestat = ""; + + if (Residence.getConfigManager().isOnlyLike()) { + votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Shop.ListLiked", Residence.getShopSignUtilManager().getLikes(one + .getKey())); + } else + votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Shop.ListVoted", vote.getVote(), vote.getAmount()); + ClaimedResidence res = Residence.getResidenceManager().getByName(one.getKey()); + String owner = Residence.getResidenceManager().getByName(one.getKey()).getOwner(); + String message = Residence.getLM().getMessage("Shop.List", i, one.getKey(), owner, votestat); + + String desc = res.getShopDesc() == null ? Residence.getLM().getMessage("Shop.NoDesc") : Residence.getLM().getMessage( + "Shop.Desc", ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); + + String prev = "[\"\",{\"text\":\"" + " " + message + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/res tp " + one.getKey() + + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev); + + i++; + } + + if (pagecount == 1) + return true; + + int NextPage = page + 1; + NextPage = page < pagecount ? NextPage : page; + int Prevpage = page - 1; + Prevpage = page > 1 ? Prevpage : page; + + String prevCmd = "/res shop list " + Prevpage; + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; + String nextCmd = "/res shop list " + NextPage; + String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); + + return true; + } + + if (args.length == 2 && args[1].equalsIgnoreCase("DeleteBoard")) { + + if (!resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + ShopListener.Delete.add(player.getName()); + player.sendMessage(Residence.getLM().getMessage("Shop.DeleteBoard")); + return true; + } + if (args.length > 2 && args[1].equalsIgnoreCase("setdesc")) { + + ClaimedResidence res = null; + + String desc = ""; + if (args.length >= 2) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + return true; + } else { + for (int i = 2; i < args.length; i++) { + desc += args[i]; + if (i < args.length - 1) + desc += " "; + } + } + } + + if (res == null) + return true; + + if (!res.isOwner(player) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Residence.NonAdmin")); + return true; + } + + res.setShopDesc(desc); + player.sendMessage(Residence.getLM().getMessage("Shop.DescChange", ChatColor.translateAlternateColorCodes('&', desc))); + return true; + } + if (args.length == 3 && args[1].equalsIgnoreCase("createboard")) { + + if (!resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + player.sendMessage(Residence.getLM().getMessage("Select.Points")); + return true; + } + + int place = 1; + try { + place = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + return true; + } + + if (place < 1) + place = 1; + + Location loc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); + Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); + + if (loc1.getBlockY() < loc2.getBlockY()) { + player.sendMessage(Residence.getLM().getMessage("Shop.InvalidSelection")); + return true; + } + + Board newTemp = new Board(); + newTemp.setStartPlace(place); + newTemp.setWorld(loc1.getWorld().getName()); + newTemp.setTX(loc1.getBlockX()); + newTemp.setTY(loc1.getBlockY()); + newTemp.setTZ(loc1.getBlockZ()); + newTemp.setBX(loc2.getBlockX()); + newTemp.setBY(loc2.getBlockY()); + newTemp.setBZ(loc2.getBlockZ()); + + newTemp.GetTopLocation(); + newTemp.GetBottomLocation(); + + newTemp.GetLocations(); + + Residence.getShopSignUtilManager().addBoard(newTemp); + player.sendMessage(Residence.getLM().getMessage("Shop.NewBoard")); + + Residence.getShopSignUtilManager().BoardUpdate(); + Residence.getShopSignUtilManager().saveSigns(); + + return true; + + } + if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("vote") || args[1].equalsIgnoreCase("like"))) { + String resName = ""; + int vote = 5; + ClaimedResidence res = null; + if (args.length == 3) { + + if (Residence.getConfigManager().isOnlyLike()) { + + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + vote = Residence.getConfigManager().getVoteRangeTo(); + + } else { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + return true; + } + + try { + vote = Integer.parseInt(args[2]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + return true; + } + } + } else if (args.length == 2 && Residence.getConfigManager().isOnlyLike()) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + return true; + } + vote = Residence.getConfigManager().getVoteRangeTo(); + } else if (args.length == 4 && !Residence.getConfigManager().isOnlyLike()) { + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + try { + vote = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + return true; + } + } else if (args.length == 3 && !Residence.getConfigManager().isOnlyLike()) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + try { + vote = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + return true; + } + } else { + return false; + } + + resName = res.getName(); + + if (!res.getPermissions().has("shop", false)) { + player.sendMessage(Residence.getLM().getMessage("Shop.CantVote")); + return true; + } + + if (vote < Residence.getConfigManager().getVoteRangeFrom() || vote > Residence.getConfigManager().getVoteRangeTo()) { + player.sendMessage(Residence.getLM().getMessage("Shop.VotedRange", Residence.getConfigManager().getVoteRangeFrom(), Residence + .getConfigManager().getVoteRangeTo())); + return true; + } + + ConcurrentHashMap> VoteList = Residence.getShopSignUtilManager().GetAllVoteList(); + + if (VoteList.containsKey(resName)) { + List list = VoteList.get(resName); + boolean found = false; + for (ShopVote OneVote : list) { + if (OneVote.getName().equalsIgnoreCase(player.getName())) { + + if (Residence.getConfigManager().isOnlyLike()) { + player.sendMessage(Residence.getLM().getMessage("Shop.AlreadyLiked", resName)); + return true; + } + + player.sendMessage(Residence.getLM().getMessage("Shop.VoteChanged", OneVote.getVote(), vote, resName)); + OneVote.setVote(vote); + OneVote.setTime(System.currentTimeMillis()); + found = true; + break; + } + } + if (!found) { + ShopVote newVote = new ShopVote(player.getName(), vote, System.currentTimeMillis()); + list.add(newVote); + + if (Residence.getConfigManager().isOnlyLike()) + player.sendMessage(Residence.getLM().getMessage("Shop.Liked", resName)); + else + player.sendMessage(Residence.getLM().getMessage("Shop.Voted", vote, resName)); + } + } else { + List list = new ArrayList(); + ShopVote newVote = new ShopVote(player.getName(), vote, System.currentTimeMillis()); + list.add(newVote); + VoteList.put(resName, list); + if (Residence.getConfigManager().isOnlyLike()) + player.sendMessage(Residence.getLM().getMessage("Shop.Liked", resName)); + else + player.sendMessage(Residence.getLM().getMessage("Shop.Voted", vote, resName)); + } + Residence.getShopSignUtilManager().saveShopVotes(); + Residence.getShopSignUtilManager().BoardUpdate(); + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/signconvert.java b/src/com/bekvon/bukkit/residence/commands/signconvert.java new file mode 100644 index 000000000..068b93f2c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/signconvert.java @@ -0,0 +1,29 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public abstract class signconvert implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + + if (args.length != 0) + return false; + + if (sender instanceof Player) { + Player player = (Player) sender; + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + Residence.getSignUtil().convertSigns(sender); + } else + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + } else { + Residence.getSignUtil().convertSigns(sender); + } + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/signupdate.java b/src/com/bekvon/bukkit/residence/commands/signupdate.java new file mode 100644 index 000000000..9713c455e --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/signupdate.java @@ -0,0 +1,22 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class signupdate implements cmd { + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (args.length == 1) { + if (!resadmin) { + sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + int number = Residence.getSignUtil().updateAllSigns(); + sender.sendMessage(Residence.getLM().getMessage("Sign.Updated", number)); + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java new file mode 100644 index 000000000..5947b038c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -0,0 +1,43 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class sublist implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + if (args.length != 1 && args.length != 2 && args.length != 3) + return false; + + ClaimedResidence res; + if (args.length == 1) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + } else { + res = Residence.getResidenceManager().getByName(args[1]); + } + if (res != null) { + res.printSubzoneList(player, page); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java new file mode 100644 index 000000000..b7dc67487 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -0,0 +1,57 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class subzone implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 2 && args.length != 3) { + return false; + } + String zname; + String parent; + if (args.length == 2) { + parent = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + zname = args[1]; + } else { + parent = args[1]; + zname = args[2]; + } + + if (Residence.getWEplugin() != null) { + if (Residence.getWEplugin().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { + Residence.getSelectionManager().worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = Residence.getResidenceManager().getByName(parent); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + + if (!player.hasPermission("residence.create.subzone") && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Subzone.CantCreate")); + return false; + } + + res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), + zname, resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Select.Points")); + } + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java new file mode 100644 index 000000000..e5b0afe68 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -0,0 +1,27 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class tool implements cmd { + + @SuppressWarnings("deprecation") + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + player.sendMessage(Residence.getLM().getMessage("General.Separator")); + player.sendMessage(Residence.getLM().getMessage("Select.Tool", Material.getMaterial(Residence.getConfigManager().getSelectionTooldID()))); + player.sendMessage(Residence.getLM().getMessage("General.InfoTool", Material.getMaterial(Residence.getConfigManager().getInfoToolID()))); + player.sendMessage(Residence.getLM().getMessage("General.Separator")); + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java new file mode 100644 index 000000000..6b61cb6a2 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -0,0 +1,31 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class tp implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 2) + return false; + + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + res.tpToResidence(player, player, resadmin); + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java new file mode 100644 index 000000000..b70e9b61a --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java @@ -0,0 +1,28 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class tpconfirm implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 1) { + return false; + } + if (Residence.getTeleportMap().containsKey(player.getName())) { + Residence.getTeleportMap().get(player.getName()).tpToResidence(player, player, resadmin); + Residence.getTeleportMap().remove(player.getName()); + } else + player.sendMessage(Residence.getLM().getMessage("General.NoTeleportConfirm")); + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/tpset.java b/src/com/bekvon/bukkit/residence/commands/tpset.java new file mode 100644 index 000000000..b987e4b0a --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/tpset.java @@ -0,0 +1,27 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class tpset implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) { + res.setTpLoc(player, resadmin); + } else { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + } + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java new file mode 100644 index 000000000..dc52e9559 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -0,0 +1,38 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class unstuck implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 1) + return false; + + PermissionGroup group = Residence.getPermissionManager().getGroup(player); + if (!group.hasUnstuckAccess()) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + } else { + player.sendMessage(Residence.getLM().getMessage("General.Moved")); + player.teleport(res.getOutsideFreeLoc(player.getLocation(), player)); + } + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/version.java b/src/com/bekvon/bukkit/residence/commands/version.java new file mode 100644 index 000000000..f127af561 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/version.java @@ -0,0 +1,35 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; + +public class version implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + sender.sendMessage(ChatColor.GRAY + "------------------------------------"); + sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + Residence + .getResidenceVersion()); + sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); + sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); + sender.sendMessage(ChatColor.GREEN + "Currently maintained by: " + ChatColor.YELLOW + "Zrips"); + String names = null; + for (String auth : Residence.getAuthors()) { + if (names == null) + names = auth; + else + names = names + ", " + auth; + } + sender.sendMessage(ChatColor.GREEN + "Authors: " + ChatColor.YELLOW + names); + sender.sendMessage(ChatColor.DARK_AQUA + "For a command list, and help, see the wiki:"); + sender.sendMessage(ChatColor.GREEN + "https://github.com/bekvon/Residence/wiki"); + sender.sendMessage(ChatColor.AQUA + "Visit the Spigot Resource page at:"); + sender.sendMessage(ChatColor.BLUE + "https://www.spigotmc.org/resources/residence.11480/"); + sender.sendMessage(ChatColor.GRAY + "------------------------------------"); + return true; + } + +} diff --git a/src/com/bekvon/bukkit/residence/containers/ConfigEditor.java b/src/com/bekvon/bukkit/residence/containers/ConfigEditor.java new file mode 100644 index 000000000..f00d242bc --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/ConfigEditor.java @@ -0,0 +1,5 @@ +package com.bekvon.bukkit.residence.containers; + +public class ConfigEditor { + +} diff --git a/src/com/bekvon/bukkit/residence/containers/RandomLoc.java b/src/com/bekvon/bukkit/residence/containers/RandomLoc.java new file mode 100644 index 000000000..525a4975e --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/RandomLoc.java @@ -0,0 +1,26 @@ +package com.bekvon.bukkit.residence.containers; + +public class RandomLoc { + + double x = 0D; + double y = 0D; + double z = 0D; + + public RandomLoc(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + } + + public double getX() { + return x; + } + + public double getY() { + return y; + } + + public double getZ() { + return z; + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java similarity index 98% rename from src/com/bekvon/bukkit/residence/containers/ResPlayer.java rename to src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 714f8a7ba..a970da5d2 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResPlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -13,7 +13,7 @@ import com.bekvon.bukkit.residence.protection.ResidenceManager; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; -public class ResPlayer { +public class ResidencePlayer { private String userName = null; private Player player = null; @@ -28,7 +28,7 @@ public class ResPlayer { private int maxRents = -1; private int maxSubzones = -1; - public ResPlayer(String userName) { + public ResidencePlayer(String userName) { this.userName = userName; RecalculatePermissions(); } diff --git a/src/com/bekvon/bukkit/residence/dynmap/AreaStyle.java b/src/com/bekvon/bukkit/residence/dynmap/AreaStyle.java new file mode 100644 index 000000000..2aafcd3a9 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/dynmap/AreaStyle.java @@ -0,0 +1,27 @@ +package com.bekvon.bukkit.residence.dynmap; + +import com.bekvon.bukkit.residence.Residence; + +class AreaStyle { + String strokecolor; + String forrentstrokecolor; + String rentedstrokecolor; + String forsalestrokecolor; + double strokeopacity; + int strokeweight; + String fillcolor; + double fillopacity; + int y; + + AreaStyle() { + strokecolor = Residence.getConfigManager().DynMapBorderColor; + forrentstrokecolor = Residence.getConfigManager().DynMapFillForRent; + rentedstrokecolor = Residence.getConfigManager().DynMapFillRented; + forsalestrokecolor = Residence.getConfigManager().DynMapFillForSale; + strokeopacity = Residence.getConfigManager().DynMapBorderOpacity; + strokeweight = Residence.getConfigManager().DynMapBorderWeight; + fillcolor = Residence.getConfigManager().DynMapFillColor; + fillopacity = Residence.getConfigManager().DynMapFillOpacity; + y = 64; + } +} diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java new file mode 100644 index 000000000..5473435ca --- /dev/null +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java @@ -0,0 +1,57 @@ +package com.bekvon.bukkit.residence.dynmap; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; +import com.bekvon.bukkit.residence.event.ResidenceRentEvent; +import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; + +public class DynMapListeners implements Listener { + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceCreate(ResidenceCreationEvent event) { + Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceSubZoneCreate(ResidenceSubzoneCreationEvent event) { + Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceFlagChange(ResidenceFlagChangeEvent event) { + Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceDelete(ResidenceDeleteEvent event) { + Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceOwnerChange(ResidenceOwnerChangeEvent event) { + Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceRename(ResidenceRenameEvent event) { + Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceRent(ResidenceRentEvent event) { + Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceSizeChange(ResidenceSizeChangeEvent event) { + Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + } +} diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java new file mode 100644 index 000000000..844888f1c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -0,0 +1,264 @@ +package com.bekvon.bukkit.residence.dynmap; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.ChatColor; +import org.dynmap.DynmapAPI; +import org.dynmap.markers.AreaMarker; +import org.dynmap.markers.MarkerAPI; +import org.dynmap.markers.MarkerSet; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.economy.TransactionManager; +import com.bekvon.bukkit.residence.economy.rent.RentManager; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.ResidencePermissions; +import com.bekvon.bukkit.residence.utils.GetTime; + +public class DynMapManager { + Residence plugin; + + public DynmapAPI api; + MarkerAPI markerapi; + MarkerSet set; + private Map resareas = new HashMap(); + + public DynMapManager(Residence plugin) { + this.plugin = plugin; + } + + public MarkerSet getMarkerSet() { + return set; + } + + public void fireUpdate(final ClaimedResidence res, final int deep) { + if (res == null) + return; + final String name = res.getName(); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + public void run() { + handleResidence(name, res, resareas, deep); + return; + } + }, 20L); + } + + private String formatInfoWindow(String resid, ClaimedResidence res) { + if (res == null) + return null; + String v = + "
%regionname%
" + + ChatColor.stripColor(Residence.getLM().getMessage("General.Owner", "")) + "%playerowners%
" + + ChatColor.stripColor(Residence.getLM().getMessage("General.Flags", "")) + "
%flags%
"; + + if (Residence.getRentManager().isForRent(res.getName())) + v = "
" + + ChatColor.stripColor(Residence.getLM().getMessage("Rentable.Land", "")) + "%regionname%
" + + ChatColor.stripColor(Residence.getLM().getMessage("General.Owner", "")) + "%playerowners%
" + + ChatColor.stripColor(Residence.getLM().getMessage("Residence.RentedBy", "")) + "%renter%
" + + ChatColor.stripColor(Residence.getLM().getMessage("General.LandCost", "")) + "%rent%
" + + ChatColor.stripColor(Residence.getLM().getMessage("Rent.Days", "")) + "%rentdays%
" + + ChatColor.stripColor(Residence.getLM().getMessage("Rentable.AutoRenew", "")) + "%renew%
" + + ChatColor.stripColor(Residence.getLM().getMessage("Rent.Expire", "")) + "%expire%
"; + + if (Residence.getTransactionManager().isForSale(res.getName())) + v = "
" + + ChatColor.stripColor(Residence.getLM().getMessage("Economy.LandForSale", " ")) + "%regionname%
" + + ChatColor.stripColor(Residence.getLM().getMessage("General.Owner", "")) + "%playerowners%
" + + ChatColor.stripColor(Residence.getLM().getMessage("Economy.SellAmount", "")) + "%price%
"; + + v = v.replace("%regionname%", res.getName()); + v = v.replace("%playerowners%", res.getOwner()); + String m = res.getEnterMessage(); + v = v.replace("%entermsg%", (m != null) ? m : ""); + m = res.getLeaveMessage(); + v = v.replace("%leavemsg%", (m != null) ? m : ""); + ResidencePermissions p = res.getPermissions(); + String flgs = ""; + + // remake + Map all = Residence.getPermissionManager().getAllFlags().getFlags(); + String[] FLAGS = new String[all.size()]; + int ii = 0; + for (Entry one : all.entrySet()) { + FLAGS[ii] = one.getKey(); + ii++; + } + + for (int i = 0; i < FLAGS.length; i++) { + if (p.isSet(FLAGS[i])) { + if (flgs.length() > 0) + flgs += "
"; + boolean f = p.has(FLAGS[i], false); + flgs += FLAGS[i] + ": " + f; + v = v.replace("%flag." + FLAGS[i] + "%", Boolean.toString(f)); + } else + v = v.replace("%flag." + FLAGS[i] + "%", ""); + } + v = v.replace("%flags%", flgs); + RentManager rentmgr = Residence.getRentManager(); + TransactionManager transmgr = Residence.getTransactionManager(); + + if (rentmgr.isForRent(res.getName())) { + boolean isrented = rentmgr.isRented(resid); + v = v.replace("%isrented%", Boolean.toString(isrented)); + String id = ""; + if (isrented) + id = rentmgr.getRentingPlayer(resid); + v = v.replace("%renter%", id); + + v = v.replace("%rent%", rentmgr.getCostOfRent(resid) + ""); + v = v.replace("%rentdays%", rentmgr.getRentDays(resid) + ""); + boolean renew = rentmgr.getRentableRepeatable(resid); + v = v.replace("%renew%", renew + ""); + String expire = ""; + if (isrented) { + long time = rentmgr.getRentedLand(resid).endTime; + if (time != 0L) + expire = GetTime.getTime(time); + } + v = v.replace("%expire%", expire); + } + + if (transmgr.isForSale(res.getName())) { + boolean forsale = transmgr.isForSale(resid); + v = v.replace("%isforsale%", Boolean.toString(transmgr.isForSale(resid))); + String price = ""; + if (forsale) + price = Integer.toString(transmgr.getSaleAmount(resid)); + v = v.replace("%price%", price); + } + + return v; + } + + private boolean isVisible(String id, String worldname) { + List visible = Residence.getConfigManager().DynMapVisibleRegions; + List hidden = Residence.getConfigManager().DynMapHiddenRegions; + if (visible != null && visible.size() > 0) { + if ((visible.contains(id) == false) && (visible.contains("world:" + worldname) == false)) { + return false; + } + } + if (hidden != null && hidden.size() > 0) { + if (hidden.contains(id) || hidden.contains("world:" + worldname)) + return false; + } + return true; + } + + private void addStyle(String resid, AreaMarker m) { + AreaStyle as = new AreaStyle(); + int sc = 0xFF0000; + int fc = 0xFF0000; + try { + sc = Integer.parseInt(as.strokecolor.substring(1), 16); + if (Residence.getRentManager().isForRent(resid) && !Residence.getRentManager().isRented(resid)) + fc = Integer.parseInt(as.forrentstrokecolor.substring(1), 16); + else if (Residence.getRentManager().isForRent(resid) && Residence.getRentManager().isRented(resid)) + fc = Integer.parseInt(as.rentedstrokecolor.substring(1), 16); + else if (Residence.getTransactionManager().isForSale(resid)) + fc = Integer.parseInt(as.forsalestrokecolor.substring(1), 16); + else + fc = Integer.parseInt(as.fillcolor.substring(1), 16); + } catch (NumberFormatException nfx) { + } + m.setLineStyle(as.strokeweight, as.strokeopacity, sc); + m.setFillStyle(as.fillopacity, fc); + m.setRangeY(as.y, as.y); + } + + private void handleResidence(String resid, ClaimedResidence res, Map newmap, int depth) { + + String id = resid + "%" + depth; + if (Residence.getResidenceManager().getByName(resid) == null) { + if (resareas.containsKey(id)) { + AreaMarker marker = resareas.remove(id); + marker.deleteMarker(); + return; + } + } + + String name = res.getName(); + double[] x = new double[2]; + double[] z = new double[2]; + + String desc = formatInfoWindow(resid, res); + + if (!isVisible(resid, res.getWorld())) + return; + + Location l0 = res.getAreaArray()[0].getLowLoc(); + Location l1 = res.getAreaArray()[0].getHighLoc(); + + x[0] = l0.getX(); + z[0] = l0.getZ(); + x[1] = l1.getX() + 1.0; + z[1] = l1.getZ() + 1.0; + + AreaMarker marker = resareas.remove(id); + if (Residence.getResidenceManager().getByName(res.getName()) == null) { + marker.deleteMarker(); + return; + } + if (marker == null) { + marker = set.createAreaMarker(id, name, false, res.getWorld(), x, z, false); + if (marker == null) + return; + } else { + marker.setCornerLocations(x, z); + marker.setLabel(name); + } + + if (Residence.getConfigManager().DynMapLayer3dRegions) + marker.setRangeY(l1.getY() + 1.0, l0.getY()); + + marker.setDescription(desc); + addStyle(resid, marker); + newmap.put(id, marker); + + if (depth < Residence.getConfigManager().DynMapLayerSubZoneDepth) { + List subids = res.getSubzones(); + for (ClaimedResidence one : subids) { + id = resid + "." + one.getSubzoneDeep(); + handleResidence(id, one, newmap, depth + 1); + } + } + } + + public void activate() { + markerapi = api.getMarkerAPI(); + if (markerapi == null) { + Bukkit.getConsoleSender().sendMessage("[Residence] Error loading dynmap marker API!"); + return; + } + + if (set != null) { + set.deleteMarkerSet(); + set = null; + } + set = markerapi.getMarkerSet("residence.markerset"); + if (set == null) + set = markerapi.createMarkerSet("residence.markerset", "Residence", null, false); + else + set.setMarkerSetLabel("Residence"); + + if (set == null) { + Bukkit.getConsoleSender().sendMessage("Error creating marker set"); + return; + } + set.setLayerPriority(1); + set.setHideByDefault(false); + + Bukkit.getConsoleSender().sendMessage("[Residence] DynMap residence activated!"); + + for (Entry one : Residence.getResidenceManager().getResidences().entrySet()) { + Residence.getDynManager().fireUpdate(one.getValue(), one.getValue().getSubzoneDeep()); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java index fe7cb59c7..f67fe7fea 100644 --- a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java @@ -4,10 +4,6 @@ import cosine.boseconomy.BOSEconomy; -/** - * - * @author Administrator - */ public class BOSEAdapter implements EconomyInterface { BOSEconomy plugin; diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index 75ab45d1b..616ebb59f 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -6,105 +6,101 @@ import com.earth2me.essentials.api.NoLoanPermittedException; import com.earth2me.essentials.api.UserDoesNotExistException; -/** - * - * @author Administrator - */ public class EssentialsEcoAdapter implements EconomyInterface { Essentials plugin; public EssentialsEcoAdapter(Essentials p) { - plugin = p; - String serverland = Residence.getServerLandname(); - if (!Economy.playerExists(serverland)) { - Economy.createNPC(serverland); - } + plugin = p; + String serverland = Residence.getServerLandname(); + if (!Economy.playerExists(serverland)) { + Economy.createNPC(serverland); + } } @SuppressWarnings("deprecation") @Override public double getBalance(String playerName) { - try { - if (Economy.playerExists(playerName)) { - return Economy.getMoney(playerName); - } else { - return 0; - } - } catch (UserDoesNotExistException ex) { - return 0; - } + try { + if (Economy.playerExists(playerName)) { + return Economy.getMoney(playerName); + } else { + return 0; + } + } catch (UserDoesNotExistException ex) { + return 0; + } } @SuppressWarnings("deprecation") @Override public boolean canAfford(String playerName, double amount) { - try { - if (Economy.playerExists(playerName)) { - return Economy.hasEnough(playerName, amount); - } - return false; - } catch (UserDoesNotExistException ex) { - return false; - } + try { + if (Economy.playerExists(playerName)) { + return Economy.hasEnough(playerName, amount); + } + return false; + } catch (UserDoesNotExistException ex) { + return false; + } } @SuppressWarnings("deprecation") @Override public boolean add(String playerName, double amount) { - if (Economy.playerExists(playerName)) { - try { - Economy.add(playerName, amount); - return true; - } catch (UserDoesNotExistException ex) { - return false; - } catch (NoLoanPermittedException ex) { - return false; - } - } else { - return false; - } + if (Economy.playerExists(playerName)) { + try { + Economy.add(playerName, amount); + return true; + } catch (UserDoesNotExistException ex) { + return false; + } catch (NoLoanPermittedException ex) { + return false; + } + } else { + return false; + } } @SuppressWarnings("deprecation") @Override public boolean subtract(String playerName, double amount) { - if (Economy.playerExists(playerName)) { - try { - Economy.subtract(playerName, amount); - return true; - } catch (UserDoesNotExistException ex) { - return false; - } catch (NoLoanPermittedException ex) { - return false; - } - } else { - return false; - } + if (Economy.playerExists(playerName)) { + try { + Economy.subtract(playerName, amount); + return true; + } catch (UserDoesNotExistException ex) { + return false; + } catch (NoLoanPermittedException ex) { + return false; + } + } else { + return false; + } } @SuppressWarnings("deprecation") @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - try { - if (Economy.playerExists(playerFrom) && Economy.playerExists(playerTo) && Economy.hasEnough(playerFrom, amount)) { - if (!subtract(playerFrom, amount)) - return false; - if (!add(playerTo, amount)) { - add(playerFrom, amount); - return false; - } - return true; - } - } catch (UserDoesNotExistException ex) { - return false; - } - return false; + try { + if (Economy.playerExists(playerFrom) && Economy.playerExists(playerTo) && Economy.hasEnough(playerFrom, amount)) { + if (!subtract(playerFrom, amount)) + return false; + if (!add(playerTo, amount)) { + add(playerFrom, amount); + return false; + } + return true; + } + } catch (UserDoesNotExistException ex) { + return false; + } + return false; } @Override public String getName() { - return "EssentialsEconomy"; + return "EssentialsEconomy"; } } diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java index 1c0cdf90f..58571e35c 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java @@ -4,75 +4,70 @@ import com.iCo6.system.Account; import com.iCo6.system.Accounts; -/** - * - * @author Administrator - */ - public class IConomy6Adapter implements EconomyInterface { iConomy icon; public IConomy6Adapter(iConomy iconomy) { - icon = iconomy; + icon = iconomy; } @Override public double getBalance(String playerName) { - this.checkExist(playerName); - return new Accounts().get(playerName).getHoldings().getBalance(); + this.checkExist(playerName); + return new Accounts().get(playerName).getHoldings().getBalance(); } @Override public boolean canAfford(String playerName, double amount) { - this.checkExist(playerName); - double holdings = this.getBalance(playerName); - if (holdings >= amount) { - return true; - } - return false; + this.checkExist(playerName); + double holdings = this.getBalance(playerName); + if (holdings >= amount) { + return true; + } + return false; } @Override public boolean add(String playerName, double amount) { - this.checkExist(playerName); - new Accounts().get(playerName).getHoldings().add(amount); - return true; + this.checkExist(playerName); + new Accounts().get(playerName).getHoldings().add(amount); + return true; } @Override public boolean subtract(String playerName, double amount) { - this.checkExist(playerName); - if (this.canAfford(playerName, amount)) { - new Accounts().get(playerName).getHoldings().subtract(amount); - return true; - } - return false; + this.checkExist(playerName); + if (this.canAfford(playerName, amount)) { + new Accounts().get(playerName).getHoldings().subtract(amount); + return true; + } + return false; } @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - this.checkExist(playerTo); - this.checkExist(playerFrom); - if (this.canAfford(playerFrom, amount)) { - Account p1 = new Accounts().get(playerFrom); - Account p2 = new Accounts().get(playerTo); - p1.getHoldings().subtract(amount); - p2.getHoldings().add(amount); - return true; - } - return false; + this.checkExist(playerTo); + this.checkExist(playerFrom); + if (this.canAfford(playerFrom, amount)) { + Account p1 = new Accounts().get(playerFrom); + Account p2 = new Accounts().get(playerTo); + p1.getHoldings().subtract(amount); + p2.getHoldings().add(amount); + return true; + } + return false; } private void checkExist(String playerName) { - Accounts acc = new Accounts(); - if (!acc.exists(playerName)) { - acc.create(playerName); - } + Accounts acc = new Accounts(); + if (!acc.exists(playerName)) { + acc.create(playerName); + } } public String getName() { - return "iConomy"; + return "iConomy"; } } diff --git a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java index 2ba23d250..60af62fe0 100644 --- a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java @@ -2,10 +2,6 @@ import fr.crafter.tickleman.realeconomy.RealEconomy; -/** - * - * @author Administrator - */ public class RealShopEconomy implements EconomyInterface { RealEconomy plugin; diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index a9c867851..47488fece 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -1,16 +1,11 @@ package com.bekvon.bukkit.residence.economy; -import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class ResidenceBank { int storedMoney; ClaimedResidence res; @@ -46,37 +41,37 @@ public void subtract(int amount) { public void withdraw(CommandSender sender, int amount, boolean resadmin) { if (!Residence.getConfigManager().enableEconomy()) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + sender.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); } if (!resadmin && !res.getPermissions().playerHas(sender.getName(), "bank", false)) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoBankAccess")); + sender.sendMessage(Residence.getLM().getMessage("Bank.NoAccess")); return; } if (!hasEnough(amount)) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("BankNoMoney")); + sender.sendMessage(Residence.getLM().getMessage("Bank.NoMoney")); return; } if (sender instanceof Player && Residence.getEconomyManager().add(sender.getName(), amount) || !(sender instanceof Player)) { this.subtract(amount); - sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("BankWithdraw", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN)); + sender.sendMessage(Residence.getLM().getMessage("Bank.Withdraw", String.format("%d", amount))); } } public void deposit(CommandSender sender, int amount, boolean resadmin) { if (!Residence.getConfigManager().enableEconomy()) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + sender.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); } if (!resadmin && !res.getPermissions().playerHas(sender.getName(), "bank", false)) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoBankAccess")); + sender.sendMessage(Residence.getLM().getMessage("Bank.NoAccess")); return; } if (sender instanceof Player && !Residence.getEconomyManager().canAfford(sender.getName(), amount)) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); + sender.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); return; } if (sender instanceof Player && Residence.getEconomyManager().subtract(sender.getName(), amount) || !(sender instanceof Player)) { this.add(amount); - sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("BankDeposit", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN)); + sender.sendMessage(Residence.getLM().getMessage("Bank.Deposit", String.format("%d", amount))); } } } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index aa9a5c4ce..7e6fb4d5b 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -4,6 +4,7 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.MarketBuyInterface; import com.bekvon.bukkit.residence.protection.ResidenceManager; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -16,11 +17,7 @@ import org.bukkit.Server; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ -public class TransactionManager { +public class TransactionManager implements MarketBuyInterface { ResidenceManager manager; private Map sellAmount; PermissionManager gm; @@ -28,16 +25,15 @@ public class TransactionManager { public static boolean chargeEconomyMoney(Player player, int amount) { EconomyInterface econ = Residence.getEconomyManager(); if (econ == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); return false; } if (!econ.canAfford(player.getName(), amount)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); + player.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); return false; } econ.subtract(player.getName(), amount); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "|" - + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); + player.sendMessage(Residence.getLM().getMessage("Economy.MoneyCharged", String.format("%d", amount), econ.getName())); return true; } @@ -48,13 +44,12 @@ public static boolean giveEconomyMoney(Player player, int amount) { return true; EconomyInterface econ = Residence.getEconomyManager(); if (econ == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); return false; } econ.add(player.getName(), amount); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyAdded", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN + "|" - + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); + player.sendMessage(Residence.getLM().getMessage("Economy.MoneyAdded", String.format("%d", amount), econ.getName())); return true; } @@ -67,44 +62,43 @@ public TransactionManager(ResidenceManager m, PermissionManager g) { public void putForSale(String areaname, Player player, int amount, boolean resadmin) { if (Residence.getConfigManager().enabledRentSystem()) { if (Residence.getRentManager().isForRent(areaname)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentSellFail")); + player.sendMessage(Residence.getLM().getMessage("Economy.RentSellFail")); return; } } if (!resadmin) { if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); return; } boolean cansell = Residence.getPermissionManager().getGroup(player).canSellLand() || player.hasPermission("residence.sell"); if (!cansell && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } if (amount <= 0) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidAmount")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); return; } } ClaimedResidence area = manager.getByName(areaname); if (area == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } if (!area.isOwner(player) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } if (sellAmount.containsKey(areaname)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AlreadySellFail")); + player.sendMessage(Residence.getLM().getMessage("Economy.AlreadySellFail")); return; } sellAmount.put(areaname, amount); Residence.getSignUtil().CheckSign(area); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForSale", ChatColor.YELLOW + areaname + ChatColor.GREEN + "|" + ChatColor.YELLOW - + amount + ChatColor.GREEN)); + player.sendMessage(Residence.getLM().getMessage("Residence.ForSale", areaname, amount)); } public boolean putForSale(String areaname, int amount) { @@ -128,28 +122,28 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { PermissionGroup group = gm.getGroup(player); if (!resadmin) { if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); return; } boolean canbuy = group.canBuyLand() || player.hasPermission("residence.buy"); if (!canbuy && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } } if (isForSale(areaname)) { ClaimedResidence res = manager.getByName(areaname); if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); sellAmount.remove(areaname); return; } if (res.getPermissions().getOwner().equals(player.getName())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerBuyFail")); + player.sendMessage(Residence.getLM().getMessage("Economy.OwnerBuyFail")); return; } if (Residence.getResidenceManager().getOwnedZoneCount(player.getName()) >= group.getMaxZones(player.getName()) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); + player.sendMessage(Residence.getLM().getMessage("Residence.TooMany")); return; } Server serv = Residence.getServ(); @@ -159,7 +153,7 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { CuboidArea[] areas = res.getAreaArray(); for (CuboidArea thisarea : areas) { if (!group.inLimits(thisarea)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceBuyTooBig")); + player.sendMessage(Residence.getLM().getMessage("Residence.BuyTooBig")); return; } } @@ -167,7 +161,7 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { } EconomyInterface econ = Residence.getEconomyManager(); if (econ == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); return; } String buyerName = player.getName(); @@ -190,21 +184,18 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { CuboidArea area = res.getAreaArray()[0]; Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN - + "|" + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBought", ChatColor.GREEN + areaname + ChatColor.YELLOW)); + player.sendMessage(Residence.getLM().getMessage("Economy.MoneyCharged", String.format("%d", amount), econ.getName())); + player.sendMessage(Residence.getLM().getMessage("Residence.Bought", areaname)); Player seller = serv.getPlayer(sellerName); if (seller != null && seller.isOnline()) { - seller.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceBuy", ChatColor.YELLOW + player.getName() + ChatColor.GREEN + "|" - + ChatColor.YELLOW + areaname + ChatColor.GREEN)); - seller.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCredit", ChatColor.YELLOW + String.format("%d", amount) + ChatColor.GREEN - + "|" + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); + seller.sendMessage(Residence.getLM().getMessage("Residence.Buy", player.getName(), areaname)); + seller.sendMessage(Residence.getLM().getMessage("Economy.MoneyCredit", String.format("%d", amount), econ.getName())); } } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); + player.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); } } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); } } @@ -212,18 +203,18 @@ public void removeFromSale(Player player, String areaname, boolean resadmin) { ClaimedResidence area = manager.getByName(areaname); if (area != null) { if (!isForSale(areaname)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForSale")); + player.sendMessage(Residence.getLM().getMessage("Residence.NotForSale")); return; } - if (area.isOwner(player)|| resadmin) { + if (area.isOwner(player) || resadmin) { removeFromSale(areaname); Residence.getSignUtil().CheckSign(area); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceStopSelling")); + player.sendMessage(Residence.getLM().getMessage("Residence.StopSelling")); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); } } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); } } @@ -236,24 +227,26 @@ public boolean isForSale(String areaname) { return sellAmount.containsKey(areaname); } - public void viewSaleInfo(String areaname, Player player) { - if (sellAmount.containsKey(areaname)) { - player.sendMessage("------------------------"); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("AreaName") + ":" + ChatColor.DARK_GREEN + " " + areaname); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("SellAmount") + ":" + ChatColor.RED + " " + sellAmount.get(areaname)); - if (Residence.getConfigManager().useLeases()) { - String etime = Residence.getLeaseManager().getExpireTime(areaname); - if (etime != null) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseExpire") + ":" + ChatColor.GREEN + " " + etime.toString()); - } + public boolean viewSaleInfo(String areaname, Player player) { + if (!sellAmount.containsKey(areaname)) + return false; + + player.sendMessage(Residence.getLM().getMessage("General.Separator")); + player.sendMessage(Residence.getLM().getMessage("Area.Name", areaname)); + player.sendMessage(Residence.getLM().getMessage("Economy.SellAmount", sellAmount.get(areaname))); + if (Residence.getConfigManager().useLeases()) { + String etime = Residence.getLeaseManager().getExpireTime(areaname); + if (etime != null) { + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseExpire", etime)); } - player.sendMessage("------------------------"); } + player.sendMessage(Residence.getLM().getMessage("General.Separator")); + return true; } public void printForSaleResidences(Player player) { Set> set = sellAmount.entrySet(); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LandForSale") + ":"); + player.sendMessage(Residence.getLM().getMessage("Economy.LandForSale")); StringBuilder sbuild = new StringBuilder(); sbuild.append(ChatColor.GREEN); boolean firstadd = true; @@ -289,4 +282,8 @@ public static TransactionManager load(Map root, PermissionManager p, ResidenceMa } return tman; } + + public Map getBuyableResidences() { + return sellAmount; + } } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 323fd5865..64c0a4622 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -3,6 +3,7 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.MarketRentInterface; import com.bekvon.bukkit.residence.event.ResidenceRentEvent; import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -20,11 +21,7 @@ import java.util.Set; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ -public class RentManager { +public class RentManager implements MarketRentInterface{ protected Map rentedLand; protected Map rentableLand; @@ -49,10 +46,8 @@ public List getRentedLands(String playername) { res = res.getTopParent(); world = res.getWorld(); } - rentedLands.add(Residence.getLanguage().getPhrase("ResidenceList", "|" - + oneland.getKey() + "|" + Residence.getLanguage().getPhrase("World") + "|" - + world) - + Residence.getLanguage().getPhrase("Rented")); + rentedLands.add(Residence.getLM().getMessage("Residence.List", "", oneland.getKey(), world) + + Residence.getLM().getMessage("Rent.Rented")); } } return rentedLands; @@ -60,26 +55,26 @@ public List getRentedLands(String playername) { public void setForRent(Player player, String landName, int amount, int days, boolean repeatable, boolean resadmin) { if (!Residence.getConfigManager().enabledRentSystem()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("MarketDisabled")); + player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); return; } if (Residence.getTransactionManager().isForSale(landName)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SellRentFail")); + player.sendMessage(Residence.getLM().getMessage("Economy.SellRentFail")); return; } ClaimedResidence res = Residence.getResidenceManager().getByName(landName); if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } if (!resadmin) { if (!res.getPermissions().hasResidencePermission(player, true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMaxRent")); + player.sendMessage(Residence.getLM().getMessage("Residence.MaxRent")); return; } } @@ -98,43 +93,41 @@ public void setForRent(Player player, String landName, int amount, int days, boo rentableLand.put(landName, newrent); String[] split = landName.split("\\."); if (split.length != 0) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceForRentSuccess", ChatColor.YELLOW + split[split.length - 1] - + ChatColor.GREEN + "|" + ChatColor.YELLOW + amount + ChatColor.GREEN + "|" + ChatColor.YELLOW + days + ChatColor.GREEN)); + player.sendMessage(Residence.getLM().getMessage("Residence.ForRentSuccess", split[split.length - 1], amount, days)); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRent")); + player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyRent")); } } @SuppressWarnings("deprecation") public void rent(Player player, String landName, boolean repeat, boolean resadmin) { if (!Residence.getConfigManager().enabledRentSystem()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentDisabled")); + player.sendMessage(Residence.getLM().getMessage("Rent.Disabled")); return; } ClaimedResidence res = Residence.getResidenceManager().getByName(landName); if (res != null) { if (res.isOwner(player)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerRentFail")); + player.sendMessage(Residence.getLM().getMessage("Economy.OwnerRentFail")); return; } } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (!resadmin && this.getRentCount(player.getName()) >= group.getMaxRents(player.getName())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMaxRent")); + player.sendMessage(Residence.getLM().getMessage("Residence.MaxRent")); return; } if (!this.isForRent(landName)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); + player.sendMessage(Residence.getLM().getMessage("Residence.NotForRent")); return; } if (this.isRented(landName)) { String[] split = landName.split("\\."); if (split.length != 0) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED - + "|" + ChatColor.YELLOW + this.getRentingPlayer(landName))); + player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyRented", split[split.length - 1], this.getRentingPlayer(landName))); return; } if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) @@ -162,20 +155,19 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRentSuccess", ChatColor.YELLOW + landName - + ChatColor.GREEN + "|" + ChatColor.YELLOW + land.days + ChatColor.GREEN)); + player.sendMessage(Residence.getLM().getMessage("Residence.RentSuccess", landName, land.days)); } else { player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); } } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); + player.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); } } public void removeFromForRent(Player player, String landName, boolean resadmin) { RentedLand rent = rentedLand.get(landName); if (rent == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotRented")); + player.sendMessage(Residence.getLM().getMessage("Residence.NotRented")); return; } if (resadmin || rent.player.equals(player.getName())) { @@ -192,9 +184,9 @@ public void removeFromForRent(Player player, String landName, boolean resadmin) res.getPermissions().applyDefaultFlags(); Residence.getSignUtil().CheckSign(res); } - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceUnrent", ChatColor.YELLOW + landName + ChatColor.GREEN)); + player.sendMessage(Residence.getLM().getMessage("Residence.Unrent", landName)); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); } } @@ -210,18 +202,17 @@ private int msToDays(long ms) { public void unrent(Player player, String landName, boolean resadmin) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); if (res == null) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("InvalidResidence")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); if (rentedLand.containsKey(landName) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyRented", ChatColor.YELLOW + landName + ChatColor.RED - + "|" + ChatColor.YELLOW + rentedLand.get(landName).player) + ChatColor.YELLOW); + player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyRented", landName, rentedLand.get(landName).player)); return; } if (rentableLand.containsKey(landName)) { @@ -237,11 +228,10 @@ public void unrent(Player player, String landName, boolean resadmin) { Residence.getSignUtil().CheckSign(res); } } - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceRemoveRentable", ChatColor.YELLOW + landName - + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Residence.RemoveRentable", landName)); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); + player.sendMessage(Residence.getLM().getMessage("Residence.NotForRent")); } } @@ -350,9 +340,9 @@ public void setRentRepeatable(Player player, String landName, boolean value, boo if (!value && this.isRented(landName)) rentedLand.get(landName).autoRefresh = false; if (value && split.length != 0) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentableEnableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Rentable.EnableRenew", split[split.length - 1])); else if (split.length != 0) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentableDisableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Rentable.DisableRenew", split[split.length - 1])); } } @@ -362,9 +352,9 @@ public void setRentedRepeatable(Player player, String landName, boolean value, b if (land != null && (land.player.equals(player.getName()) || resadmin)) { land.autoRefresh = value; if (value && split.length != 0) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentEnableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Rent.EnableRenew", split[split.length - 1])); else if (split.length != 0) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentDisableRenew", ChatColor.YELLOW + split[split.length - 1] + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Rent.DisableRenew", split[split.length - 1])); } } @@ -372,22 +362,21 @@ public void printRentInfo(Player player, String landName) { RentableLand rentable = rentableLand.get(landName); RentedLand rented = rentedLand.get(landName); if (rentable != null) { - player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Land") + ":" + ChatColor.DARK_GREEN + landName); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Cost") + ": " + ChatColor.DARK_AQUA + rentable.cost + " per " + rentable.days - + " days"); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RentableAutoRenew") + ":" + ChatColor.DARK_AQUA + rentable.repeatable); + player.sendMessage(Residence.getLM().getMessage("General.Separator")); + player.sendMessage(Residence.getLM().getMessage("General.Land", landName)); + player.sendMessage(Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days)); + player.sendMessage(Residence.getLM().getMessage("Rentable.AutoRenew", rentable.repeatable)); if (rented != null) { - player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Status") + ":" + ChatColor.YELLOW + " " + Residence.getLanguage().getPhrase( - "ResidenceRentedBy", ChatColor.RED + rented.player + ChatColor.YELLOW)); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("RentExpire") + ":" + ChatColor.GREEN + GetTime.getTime(rented.endTime)); - - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("RentAutoRenew") + ":" + ChatColor.DARK_AQUA + rented.autoRefresh); + player.sendMessage(Residence.getLM().getMessage("Residence.RentedBy", rented.player)); + player.sendMessage(Residence.getLM().getMessage("Rent.Expire", GetTime.getTime(rented.endTime))); } else { - player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("Status") + ":" + ChatColor.GREEN + " " + Residence.getLanguage().getPhrase( - "Available")); + player.sendMessage(Residence.getLM().getMessage("General.Status", Residence.getLM().getMessage("General.Available"))); } + player.sendMessage(Residence.getLM().getMessage("General.Separator")); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceNotForRent")); + player.sendMessage(Residence.getLM().getMessage("General.Separator")); + player.sendMessage(Residence.getLM().getMessage("Residence.NotForRent")); + player.sendMessage(Residence.getLM().getMessage("General.Separator")); } } @@ -439,7 +428,7 @@ public void updateRentableName(String oldName, String newName) { public void printRentableResidences(Player player) { Set> set = rentableLand.entrySet(); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("RentableLand") + ":"); + player.sendMessage(Residence.getLM().getMessage("Rentable.Land")); StringBuilder sbuild = new StringBuilder(); sbuild.append(ChatColor.GREEN); boolean firstadd = true; @@ -476,4 +465,12 @@ public int getRentableCount(String player) { } return count; } + + public Map getRentableResidences() { + return rentableLand; + } + + public Map getCurrentlyRentedResidences() { + return rentableLand; + } } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java b/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java index 7a7ce83be..9f428e5eb 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java @@ -3,10 +3,6 @@ import java.util.HashMap; import java.util.Map; -/** - * - * @author Administrator - */ public class RentableLand { public int days; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentedLand.java b/src/com/bekvon/bukkit/residence/economy/rent/RentedLand.java index 11ece27ee..95142c148 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentedLand.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentedLand.java @@ -3,32 +3,28 @@ import java.util.HashMap; import java.util.Map; -/** - * - * @author Administrator - */ public class RentedLand { public String player; - public long startTime; - public long endTime; - public boolean autoRefresh; + public long startTime = 0L; + public long endTime = 0L; + public boolean autoRefresh = true; public Map save() { - Map rentables = new HashMap<>(); - rentables.put("Player", player); - rentables.put("StartTime", startTime); - rentables.put("EndTime", endTime); - rentables.put("AutoRefresh", autoRefresh); - return rentables; + Map rentables = new HashMap<>(); + rentables.put("Player", player); + rentables.put("StartTime", startTime); + rentables.put("EndTime", endTime); + rentables.put("AutoRefresh", autoRefresh); + return rentables; } - public static RentedLand load(Map map) - { - RentedLand newland = new RentedLand(); - newland.player = (String) map.get("Player"); - newland.startTime = (Long)map.get("StartTime"); - newland.endTime = (Long)map.get("EndTime"); - newland.autoRefresh = (Boolean)map.get("AutoRefresh"); - return newland; + + public static RentedLand load(Map map) { + RentedLand newland = new RentedLand(); + newland.player = (String) map.get("Player"); + newland.startTime = (Long) map.get("StartTime"); + newland.endTime = (Long) map.get("EndTime"); + newland.autoRefresh = (Boolean) map.get("AutoRefresh"); + return newland; } } diff --git a/src/com/bekvon/bukkit/residence/event/CancellableResidenceEvent.java b/src/com/bekvon/bukkit/residence/event/CancellableResidenceEvent.java index 07da3b1e9..84e271ae5 100644 --- a/src/com/bekvon/bukkit/residence/event/CancellableResidenceEvent.java +++ b/src/com/bekvon/bukkit/residence/event/CancellableResidenceEvent.java @@ -1,32 +1,22 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.event.Cancellable; -/** - * - * @author Administrator - */ public class CancellableResidenceEvent extends ResidenceEvent implements Cancellable { protected boolean cancelled; - public CancellableResidenceEvent(String eventName, ClaimedResidence resref) - { - super(eventName,resref); + public CancellableResidenceEvent(String eventName, ClaimedResidence resref) { + super(eventName, resref); } - + public boolean isCancelled() { - return cancelled; + return cancelled; } public void setCancelled(boolean bln) { - cancelled = bln; + cancelled = bln; } } diff --git a/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerEvent.java b/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerEvent.java index 0c3cd9dd8..618f187a6 100644 --- a/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerEvent.java +++ b/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerEvent.java @@ -1,34 +1,24 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; -/** - * - * @author Administrator - */ public class CancellableResidencePlayerEvent extends ResidencePlayerEvent implements Cancellable { protected boolean cancelled; - public CancellableResidencePlayerEvent(String eventName, ClaimedResidence resref, Player player) - { - super(eventName, resref, player); - cancelled = false; + public CancellableResidencePlayerEvent(String eventName, ClaimedResidence resref, Player player) { + super(eventName, resref, player); + cancelled = false; } public boolean isCancelled() { - return cancelled; + return cancelled; } public void setCancelled(boolean bln) { - cancelled = bln; + cancelled = bln; } } diff --git a/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerFlagEvent.java b/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerFlagEvent.java index df0cf8f2e..a4f7011c4 100644 --- a/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerFlagEvent.java +++ b/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerFlagEvent.java @@ -1,33 +1,23 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; -/** - * - * @author Administrator - */ public class CancellableResidencePlayerFlagEvent extends ResidencePlayerFlagEvent implements Cancellable { protected boolean cancelled; - public CancellableResidencePlayerFlagEvent(String eventName, ClaimedResidence resref, Player player, String flag, FlagType type, String target) - { - super(eventName, resref, player, flag, type, target); + public CancellableResidencePlayerFlagEvent(String eventName, ClaimedResidence resref, Player player, String flag, FlagType type, String target) { + super(eventName, resref, player, flag, type, target); } public boolean isCancelled() { - return cancelled; + return cancelled; } public void setCancelled(boolean bln) { - cancelled = bln; + cancelled = bln; } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java index 5f59829f8..68af98399 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java @@ -1,18 +1,9 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; - -/** - * - * @author Administrator - */ public class ResidenceChatEvent extends CancellableResidencePlayerEvent { private static final HandlerList handlers = new HandlerList(); diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java index 31dd5d464..ccd9487a6 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import org.bukkit.command.CommandSender; @@ -10,10 +5,6 @@ import org.bukkit.event.Event; import org.bukkit.event.HandlerList; -/** - * - * @author Administrator - */ public class ResidenceCommandEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceCreationEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceCreationEvent.java index 2b2246ca5..90e00c533 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceCreationEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceCreationEvent.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -10,49 +5,41 @@ import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; -/** - * - * @author Administrator - */ public class ResidenceCreationEvent extends CancellableResidencePlayerEvent { private static final HandlerList handlers = new HandlerList(); + @Override public HandlerList getHandlers() { - return handlers; + return handlers; } public static HandlerList getHandlerList() { - return handlers; + return handlers; } protected String resname; CuboidArea area; - public ResidenceCreationEvent(Player player, String newname, ClaimedResidence resref, CuboidArea resarea) - { - super("RESIDENCE_CREATE",resref,player); - resname = newname; - area = resarea; + public ResidenceCreationEvent(Player player, String newname, ClaimedResidence resref, CuboidArea resarea) { + super("RESIDENCE_CREATE", resref, player); + resname = newname; + area = resarea; } - public String getResidenceName() - { - return resname; + public String getResidenceName() { + return resname; } - public void setResidenceName(String name) - { - resname = name; - } +// public void setResidenceName(String name) { +// resname = name; +// } - public CuboidArea getPhysicalArea() - { - return area; + public CuboidArea getPhysicalArea() { + return area; } - public void setPhysicalArea(CuboidArea newarea) - { - area = newarea; - } +// public void setPhysicalArea(CuboidArea newarea) { +// area = newarea; +// } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceDeleteEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceDeleteEvent.java index d208bac02..aa2b8e1c7 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceDeleteEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceDeleteEvent.java @@ -1,46 +1,35 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; -/** - * - * @author Administrator - */ public class ResidenceDeleteEvent extends CancellableResidencePlayerEvent { private static final HandlerList handlers = new HandlerList(); @Override public HandlerList getHandlers() { - return handlers; + return handlers; } public static HandlerList getHandlerList() { - return handlers; + return handlers; } public enum DeleteCause { - LEASE_EXPIRE,PLAYER_DELETE,OTHER + LEASE_EXPIRE, PLAYER_DELETE, OTHER } - + DeleteCause cause; - public ResidenceDeleteEvent(Player player, ClaimedResidence resref, DeleteCause delcause) - { - super("RESIDENCE_DELETE", resref, player); - cause = delcause; + public ResidenceDeleteEvent(Player player, ClaimedResidence resref, DeleteCause delcause) { + super("RESIDENCE_DELETE", resref, player); + cause = delcause; } - public DeleteCause getCause() - { - return cause; + public DeleteCause getCause() { + return cause; } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceEnterEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceEnterEvent.java deleted file mode 100644 index 1942d9050..000000000 --- a/src/com/bekvon/bukkit/residence/event/ResidenceEnterEvent.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - -package com.bekvon.bukkit.residence.event; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Note: This event has been replaced with {@link ResidenceChangedEvent} and is marked as - * deprecated as of 21-MAY-2013. It will be removed in future releases. Please see - * {@link ResidenceChangedEvent} comments for further information. - * - * TODO - Remove this class at a suitable time in the future. - * - * @author Administrator - */ -@Deprecated -public class ResidenceEnterEvent extends ResidencePlayerEvent { - - private static final HandlerList handlers = new HandlerList(); - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - public ResidenceEnterEvent(ClaimedResidence resref, Player player) - { - super("RESIDENCE_ENTER", resref, player); - } -} diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java index a2bc64aca..028817e53 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java @@ -1,18 +1,9 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; -/** - * - * @author Administrator - */ public class ResidenceEvent extends Event { private static final HandlerList handlers = new HandlerList(); diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceFlagChangeEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceFlagChangeEvent.java index aec72a04b..3105beef3 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceFlagChangeEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceFlagChangeEvent.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -10,33 +5,28 @@ import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; -/** - * - * @author Administrator - */ public class ResidenceFlagChangeEvent extends CancellableResidencePlayerFlagEvent { private static final HandlerList handlers = new HandlerList(); + @Override public HandlerList getHandlers() { - return handlers; + return handlers; } public static HandlerList getHandlerList() { - return handlers; + return handlers; } FlagState newstate; - public ResidenceFlagChangeEvent(ClaimedResidence resref, Player player, String flag, FlagType type,FlagState newState, String target) - { - super("RESIDENCE_FLAG_CHANGE", resref, player, flag, type, target); - newstate = newState; + public ResidenceFlagChangeEvent(ClaimedResidence resref, Player player, String flag, FlagType type, FlagState newState, String target) { + super("RESIDENCE_FLAG_CHANGE", resref, player, flag, type, target); + newstate = newState; } - public FlagState getNewState() - { - return newstate; + public FlagState getNewState() { + return newstate; } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java index a0b00fdb0..14e1fda88 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java @@ -1,17 +1,8 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.event.HandlerList; -/** - * - * @author Administrator - */ public class ResidenceFlagCheckEvent extends ResidenceFlagEvent { private static final HandlerList handlers = new HandlerList(); diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceFlagEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceFlagEvent.java index c483f215b..089fc6b89 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceFlagEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceFlagEvent.java @@ -1,33 +1,24 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import org.bukkit.event.HandlerList; -/** - * - * @author Administrator - */ public class ResidenceFlagEvent extends ResidenceEvent { private static final HandlerList handlers = new HandlerList(); + @Override public HandlerList getHandlers() { - return handlers; + return handlers; } public static HandlerList getHandlerList() { - return handlers; + return handlers; } - - public enum FlagType - { - RESIDENCE,GROUP,PLAYER + + public enum FlagType { + RESIDENCE, GROUP, PLAYER } String flagname; @@ -35,26 +26,22 @@ public enum FlagType FlagState flagstate; String flagtarget; - public ResidenceFlagEvent(String eventName, ClaimedResidence resref, String flag, FlagType type, String target) - { - super(eventName, resref); - flagname = flag; - flagtype = type; - flagtarget = target; + public ResidenceFlagEvent(String eventName, ClaimedResidence resref, String flag, FlagType type, String target) { + super(eventName, resref); + flagname = flag; + flagtype = type; + flagtarget = target; } - public String getFlag() - { - return flagname; + public String getFlag() { + return flagname; } - public FlagType getFlagType() - { - return flagtype; + public FlagType getFlagType() { + return flagtype; } - public String getFlagTargetPlayerOrGroup() - { - return flagtarget; + public String getFlagTargetPlayerOrGroup() { + return flagtarget; } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceLeaveEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceLeaveEvent.java deleted file mode 100644 index 02434e144..000000000 --- a/src/com/bekvon/bukkit/residence/event/ResidenceLeaveEvent.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - -package com.bekvon.bukkit.residence.event; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Note: This event has been replaced with {@link ResidenceChangedEvent} and is marked as - * deprecated as of 21-MAY-2013. It will be removed in future releases. Please see - * {@link ResidenceChangedEvent} comments for further information. - * - * TODO - Remove this class at a suitable time in the future. - * - * @author Administrator - */ -@Deprecated -public class ResidenceLeaveEvent extends ResidencePlayerEvent { - - private static final HandlerList handlers = new HandlerList(); - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - public ResidenceLeaveEvent(ClaimedResidence resref, Player player) - { - super("RESIDENCE_LEAVE", resref, player); - } -} diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceOwnerChangeEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceOwnerChangeEvent.java index 2ace8cb4c..d660a1a69 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceOwnerChangeEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceOwnerChangeEvent.java @@ -1,16 +1,7 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.event.HandlerList; -/** - * - * @author Administrator - */ public class ResidenceOwnerChangeEvent extends ResidenceEvent { private static final HandlerList handlers = new HandlerList(); diff --git a/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java b/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java index ac38e443d..11884a0c8 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java @@ -1,18 +1,9 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class ResidencePlayerEvent extends ResidenceEvent implements ResidencePlayerEventInterface { Player p; diff --git a/src/com/bekvon/bukkit/residence/event/ResidencePlayerEventInterface.java b/src/com/bekvon/bukkit/residence/event/ResidencePlayerEventInterface.java index 940021553..607aebf8c 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidencePlayerEventInterface.java +++ b/src/com/bekvon/bukkit/residence/event/ResidencePlayerEventInterface.java @@ -1,18 +1,11 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public interface ResidencePlayerEventInterface { public boolean isAdmin(); + public boolean isPlayer(); + public Player getPlayer(); } diff --git a/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java b/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java index 6cf9d6d0f..1cf238f1b 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java @@ -1,42 +1,29 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class ResidencePlayerFlagEvent extends ResidenceFlagEvent implements ResidencePlayerEventInterface { Player p; - public ResidencePlayerFlagEvent(String eventName,ClaimedResidence resref, Player player, String flag, FlagType type, String target) - { - super(eventName, resref, flag, type, target); - p = player; + public ResidencePlayerFlagEvent(String eventName, ClaimedResidence resref, Player player, String flag, FlagType type, String target) { + super(eventName, resref, flag, type, target); + p = player; } - public boolean isPlayer() - { - return p!=null; + public boolean isPlayer() { + return p != null; } - public boolean isAdmin() - { - if(isPlayer()) - { - return Residence.getPermissionManager().isResidenceAdmin(p); - } - return true; + public boolean isAdmin() { + if (isPlayer()) { + return Residence.getPermissionManager().isResidenceAdmin(p); + } + return true; } public Player getPlayer() { - return p; + return p; } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceRentEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceRentEvent.java index 75ab3b913..465805ff9 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceRentEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceRentEvent.java @@ -1,18 +1,9 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; -/** - * - * @author Administrator - */ public class ResidenceRentEvent extends CancellableResidencePlayerEvent { private static final HandlerList handlers = new HandlerList(); diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceSizeChangeEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceSizeChangeEvent.java new file mode 100644 index 000000000..66a5bd08c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/event/ResidenceSizeChangeEvent.java @@ -0,0 +1,49 @@ +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class ResidenceSizeChangeEvent extends CancellableResidencePlayerEvent { + + private static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + protected String resname; + CuboidArea oldarea; + CuboidArea newarea; + ClaimedResidence res; + + public ResidenceSizeChangeEvent(Player player, ClaimedResidence res, CuboidArea oldarea, CuboidArea newarea) { + super("RESIDENCE_SIZE_CHANGE", res, player); + resname = res.getName(); + this.res = res; + this.oldarea = oldarea; + this.newarea = newarea; + } + + public String getResidenceName() { + return resname; + } + + public ClaimedResidence getResidence() { + return res; + } + + public CuboidArea getOldArea() { + return oldarea; + } + + public CuboidArea getNewArea() { + return newarea; + } +} diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceSubzoneCreationEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceSubzoneCreationEvent.java new file mode 100644 index 000000000..ef674d35f --- /dev/null +++ b/src/com/bekvon/bukkit/residence/event/ResidenceSubzoneCreationEvent.java @@ -0,0 +1,45 @@ +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class ResidenceSubzoneCreationEvent extends CancellableResidencePlayerEvent { + + private static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + protected String resname; + CuboidArea area; + + public ResidenceSubzoneCreationEvent(Player player, String name, ClaimedResidence resref, CuboidArea resarea) { + super("RESIDENCE_SUBZONE_CREATE", resref, player); + resname = name; + area = resarea; + } + + public String getResidenceName() { + return resname; + } + + public void setResidenceName(String name) { + resname = name; + } + + public CuboidArea getPhysicalArea() { + return area; + } + + public void setPhysicalArea(CuboidArea newarea) { + area = newarea; + } +} diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceTPEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceTPEvent.java index 70550a5ca..900166980 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceTPEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceTPEvent.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.event; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -10,38 +5,33 @@ import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; -/** - * - * @author Administrator - */ public class ResidenceTPEvent extends CancellableResidencePlayerEvent { private static final HandlerList handlers = new HandlerList(); + @Override public HandlerList getHandlers() { - return handlers; + return handlers; } public static HandlerList getHandlerList() { - return handlers; + return handlers; } Player reqPlayer; Location loc; - public ResidenceTPEvent(ClaimedResidence resref, Location teleloc, Player player, Player reqplayer) - { - super("RESIDENCE_TP",resref,player); - reqPlayer = reqplayer; - loc = teleloc; + + public ResidenceTPEvent(ClaimedResidence resref, Location teleloc, Player player, Player reqplayer) { + super("RESIDENCE_TP", resref, player); + reqPlayer = reqplayer; + loc = teleloc; } - public Player getRequestingPlayer() - { - return reqPlayer; + public Player getRequestingPlayer() { + return reqPlayer; } - public Location getTeleportLocation() - { - return loc; + public Location getTeleportLocation() { + return loc; } } diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 561f0111a..40db34b5d 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -166,9 +166,9 @@ public void recalculateResidence(ClaimedResidence res) { String title = ""; if (targetPlayer == null) - title = Residence.getLM().getMessage("Language.Gui.Set.Title", res.getName()); + title = Residence.getLM().getMessage("Gui.Set.Title", res.getName()); else - title = Residence.getLM().getMessage("Language.Gui.Pset.Title", targetPlayer + "%" + res.getName()); + title = Residence.getLM().getMessage("Gui.Pset.Title", targetPlayer, res.getName()); if (title.length() > 32) { title = title.substring(0, Math.min(title.length(), 32)); @@ -242,7 +242,7 @@ public void recalculateResidence(ClaimedResidence res) { if (description.containsKey(one.getKey())) lore.addAll(description.get(one.getKey())); - lore.addAll(Residence.getLM().getMessageList("Language.Gui.Actions")); + lore.addAll(Residence.getLM().getMessageList("Gui.Actions")); MiscInfoMeta.setLore(lore); @@ -256,12 +256,12 @@ public void recalculateResidence(ClaimedResidence res) { ItemMeta meta = Item.getItemMeta(); if (page > 1) { - meta.setDisplayName(Residence.getLM().getMessage("Language.PrevInfoPage")); + meta.setDisplayName(Residence.getLM().getMessage("General.PrevInfoPage")); Item.setItemMeta(meta); GuiInv.setItem(45, Item); } if (page < pageCount) { - meta.setDisplayName(Residence.getLM().getMessage("Language.NextInfoPage")); + meta.setDisplayName(Residence.getLM().getMessage("General.NextInfoPage")); Item.setItemMeta(meta); GuiInv.setItem(53, Item); } @@ -312,9 +312,9 @@ public void recalculatePlayer(ClaimedResidence res) { String title = ""; if (targetPlayer == null) - title = Residence.getLM().getMessage("Language.Gui.Set.Title", res.getName()); + title = Residence.getLM().getMessage("Gui.Set.Title", res.getName()); else - title = Residence.getLM().getMessage("Language.Gui.Pset.Title", targetPlayer + "%" + res.getName()); + title = Residence.getLM().getMessage("Gui.Pset.Title", targetPlayer, res.getName()); if (title.length() > 32) { title = title.substring(0, Math.min(title.length(), 32)); @@ -388,7 +388,7 @@ public void recalculatePlayer(ClaimedResidence res) { if (description.containsKey(one.getKey())) lore.addAll(description.get(one.getKey())); - lore.addAll(Residence.getLM().getMessageList("Language.Gui.Actions")); + lore.addAll(Residence.getLM().getMessageList("Gui.Actions")); MiscInfoMeta.setLore(lore); @@ -402,12 +402,12 @@ public void recalculatePlayer(ClaimedResidence res) { ItemMeta meta = Item.getItemMeta(); if (page > 1) { - meta.setDisplayName(Residence.getLM().getMessage("Language.PrevInfoPage")); + meta.setDisplayName(Residence.getLM().getMessage("General.PrevInfoPage")); Item.setItemMeta(meta); GuiInv.setItem(45, Item); } if (page < pageCount) { - meta.setDisplayName(Residence.getLM().getMessage("Language.NextInfoPage")); + meta.setDisplayName(Residence.getLM().getMessage("General.NextInfoPage")); Item.setItemMeta(meta); GuiInv.setItem(53, Item); } diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index 5a837116f..2177b7dea 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.itemlist; import org.bukkit.ChatColor; @@ -15,10 +10,6 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class ItemList { protected List list; diff --git a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java index e3c76f53a..1e2533b83 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java @@ -1,12 +1,5 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.itemlist; -import org.bukkit.ChatColor; - import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -14,10 +7,6 @@ import org.bukkit.Material; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class ResidenceItemList extends ItemList { ClaimedResidence res; @@ -34,11 +23,11 @@ public void playerListChange(Player player, Material mat, boolean resadmin) { PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (resadmin || (res.getPermissions().hasResidencePermission(player, true) && group.itemListAccess())) { if (super.toggle(mat)) - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ListMaterialAdd", ChatColor.GREEN + mat.toString() + ChatColor.YELLOW + "|" + ChatColor.GREEN + type.toString().toLowerCase() + ChatColor.YELLOW)); + player.sendMessage(Residence.getLM().getMessage("General.ListMaterialAdd", mat.toString(), type.toString().toLowerCase())); else - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("ListMaterialRemove", ChatColor.GREEN + mat.toString() + ChatColor.YELLOW + "|" + ChatColor.GREEN + type.toString().toLowerCase() + ChatColor.YELLOW)); + player.sendMessage(Residence.getLM().getMessage("General.ListMaterialRemove", mat.toString(), type.toString().toLowerCase())); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); } } diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java index 8ef31e5c0..a61995d59 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java @@ -1,17 +1,8 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.itemlist; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; -/** - * - * @author Administrator - */ public class WorldItemList extends ItemList { protected String world; diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java index 470c58e64..c6891a2b0 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.itemlist; import java.util.ArrayList; @@ -11,10 +6,6 @@ import org.bukkit.Material; import org.bukkit.configuration.file.FileConfiguration; -/** - * - * @author Administrator - */ public class WorldItemManager { protected List lists; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 7b7b54c0d..6848b1cb4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -1,18 +1,9 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.listeners; import java.util.ArrayList; import java.util.List; -import org.bukkit.ChatColor; - import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Snowman; @@ -44,10 +35,6 @@ import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.inventory.ItemStack; -/** - * - * @author Administrator - */ public class ResidenceBlockListener implements Listener { private List MessageInformed = new ArrayList(); @@ -55,6 +42,10 @@ public class ResidenceBlockListener implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onTreeGrow(StructureGrowEvent event) { + + if (Residence.isDisabledWorldListener(event.getWorld())) + return; + ClaimedResidence startRes = Residence.getResidenceManager().getByLoc(event.getLocation()); List blocks = event.getBlocks(); int i = 0; @@ -72,9 +63,9 @@ public void onTreeGrow(StructureGrowEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { - - Debug.D("destroy event"); - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; Player player = event.getPlayer(); if (Residence.isResAdminOn(player)) { return; @@ -91,7 +82,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (Residence.getConfigManager().enabledRentSystem() && res != null) { String resname = res.getName(); if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); + player.sendMessage(Residence.getLM().getMessage("Rent.ModifyDeny")); event.setCancelled(true); return; } @@ -104,17 +95,19 @@ public void onBlockBreak(BlockBreakEvent event) { boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), "destroy", perms.playerHas(pname, player.getWorld().getName(), "build", true)); boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), "container", true); if (!hasdestroy) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "destroy")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "destroy")); event.setCancelled(true); } else if (!hasContainer && mat == Material.CHEST) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "container")); event.setCancelled(true); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockForm(BlockFormEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; if (!(event instanceof EntityBlockFormEvent)) return; @@ -128,7 +121,9 @@ public void onBlockForm(BlockFormEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockFall(EntityChangeBlockEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; if (!Residence.getConfigManager().isBlockFall()) return; @@ -167,7 +162,9 @@ public void onBlockFall(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestPlace(BlockPlaceEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; if (!Residence.getConfigManager().ShowNoobMessage()) return; @@ -185,14 +182,16 @@ public void onChestPlace(BlockPlaceEvent event) { if (MessageInformed.contains(player.getName())) return; - player.sendMessage(Residence.getLM().getMessage("Language.NewPlayerInfo")); + player.sendMessage(Residence.getLM().getMessage("General.NewPlayerInfo")); MessageInformed.add(player.getName()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestPlaceCreateRes(BlockPlaceEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; if (!Residence.getConfigManager().isNewPlayerUse()) return; @@ -225,7 +224,9 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; Player player = event.getPlayer(); if (Residence.isResAdminOn(player)) { return; @@ -241,14 +242,14 @@ public void onBlockPlace(BlockPlaceEvent event) { if (Residence.getConfigManager().enabledRentSystem() && res != null) { String resname = res.getName(); if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); + player.sendMessage(Residence.getLM().getMessage("Rent.ModifyDeny")); event.setCancelled(true); return; } } String pname = player.getName(); if (res != null && !res.getItemBlacklist().isAllowed(mat)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); + player.sendMessage(Residence.getLM().getMessage("General.ItemBlacklisted")); event.setCancelled(true); return; } @@ -256,13 +257,16 @@ public void onBlockPlace(BlockPlaceEvent event) { boolean hasplace = perms.playerHas(pname, player.getWorld().getName(), "place", perms.playerHas(pname, player.getWorld().getName(), "build", true)); if (!hasplace) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "place")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "place")); return; } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockSpread(BlockSpreadEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; Location loc = event.getBlock().getLocation(); FlagPermissions perms = Residence.getPermsByLoc(loc); if (!perms.has("spread", true)) { @@ -272,7 +276,9 @@ public void onBlockSpread(BlockSpreadEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPistonRetract(BlockPistonRetractEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has("piston", true)) { event.setCancelled(true); @@ -305,6 +311,9 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPistonExtend(BlockPistonExtendEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has("piston", true)) { event.setCancelled(true); @@ -333,7 +342,9 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockFromTo(BlockFromToEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); boolean hasflow = perms.has("flow", true); Material mat = event.getBlock().getType(); @@ -357,7 +368,9 @@ public void onBlockFromTo(BlockFromToEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onDispense(BlockDispenseEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; if (event.isCancelled()) return; @@ -391,7 +404,9 @@ public void onDispense(BlockDispenseEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLavaWaterFlow(BlockFromToEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; Material mat = event.getBlock().getType(); Location location = event.getToBlock().getLocation(); @@ -421,6 +436,9 @@ public void onLavaWaterFlow(BlockFromToEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBurn(BlockBurnEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has("firespread", true)) event.setCancelled(true); @@ -428,6 +446,9 @@ public void onBlockBurn(BlockBurnEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockIgnite(BlockIgniteEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; IgniteCause cause = event.getCause(); if (cause == IgniteCause.SPREAD) { FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); @@ -438,7 +459,7 @@ public void onBlockIgnite(BlockIgniteEvent event) { FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player); if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), "ignite", true) && !Residence.isResAdminOn(player)) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "ignite")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "ignite")); } } else { FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index ff1d1e343..7bcca6fac 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1,11 +1,5 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.listeners; -import org.bukkit.ChatColor; import org.bukkit.Location; import java.util.ArrayList; @@ -53,14 +47,13 @@ import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.potion.PotionEffect; -/** - * - * @author Administrator - */ public class ResidenceEntityListener implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEndermanChangeBlock(EntityChangeBlockEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; if (event.getEntityType() != EntityType.ENDERMAN) return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); @@ -71,6 +64,9 @@ public void onEndermanChangeBlock(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onWitherChangeBlock(EntityChangeBlockEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; if (event.getEntityType() != EntityType.WITHER) return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); @@ -82,6 +78,9 @@ public void onWitherChangeBlock(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void onEntityInteract(EntityInteractEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; Block block = event.getBlock(); Material mat = block.getType(); Entity entity = event.getEntity(); @@ -102,7 +101,9 @@ private boolean isTamed(Entity ent) { @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(EntityDamageByEntityEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; Entity entity = event.getEntity(); if (!Residence.getNms().isAnimal(entity)) return; @@ -135,13 +136,16 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { return; if (!res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { - cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "AnimalKilling|" + res.getName())); + cause.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "AnimalKilling", res.getName())); event.setCancelled(true); } } @EventHandler(priority = EventPriority.LOWEST) public void OnEntityDeath(EntityDeathEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; if (event.getEntity() instanceof Player) return; Location loc = event.getEntity().getLocation(); @@ -156,7 +160,9 @@ public void OnEntityDeath(EntityDeathEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(VehicleDestroyEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getAttacker().getWorld())) + return; Vehicle vehicle = event.getVehicle(); Entity damager = event.getAttacker(); @@ -189,14 +195,16 @@ public void AnimalKilling(VehicleDestroyEvent event) { return; if (!res.getPermissions().playerHas(cause.getName(), "vehicledestroy", true)) { - cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "vehicledestroy|" + res.getName())); + cause.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "vehicledestroy", res.getName())); event.setCancelled(true); } } @EventHandler(priority = EventPriority.LOWEST) public void MonsterKilling(EntityDamageByEntityEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; Entity entity = event.getEntity(); if (!isMonster(entity)) return; @@ -229,13 +237,16 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { return; if (!res.getPermissions().playerHas(cause.getName(), "mobkilling", true)) { - cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "MobKilling|" + res.getName())); + cause.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "MobKilling", res.getName())); event.setCancelled(true); } } @EventHandler(priority = EventPriority.LOWEST) public void AnimalLeash(PlayerLeashEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; Player player = event.getPlayer(); Entity entity = event.getEntity(); @@ -252,13 +263,16 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { return; if (!res.getPermissions().playerHas(player.getName(), "leash", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "Leash|" + res.getName())); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Leash", res.getName())); event.setCancelled(true); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onCreatureSpawn(CreatureSpawnEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); Entity ent = event.getEntity(); if (Residence.getNms().isAnimal(ent)) { @@ -349,6 +363,9 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingPlace(HangingPlaceEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; Player player = event.getPlayer(); if (Residence.isResAdminOn(player)) return; @@ -358,13 +375,15 @@ public void onHangingPlace(HangingPlaceEvent event) { String world = player.getWorld().getName(); if (!perms.playerHas(pname, world, "place", perms.playerHas(pname, world, "build", true))) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "build")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "build")); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreak(HangingBreakEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; if (!(event instanceof HangingBreakByEntityEvent)) return; @@ -381,12 +400,15 @@ public void onHangingBreak(HangingBreakEvent event) { String world = event.getEntity().getWorld().getName(); if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "build")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "build")); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityCombust(EntityCombustEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); if (!perms.has("burn", true)) { event.setCancelled(true); @@ -395,6 +417,9 @@ public void onEntityCombust(EntityCombustEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onExplosionPrime(ExplosionPrimeEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; EntityType entity = event.getEntityType(); FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); @@ -433,6 +458,9 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { @SuppressWarnings("incomplete-switch") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; if (event.isCancelled() || event.getEntity() == null) return; Boolean cancel = false; @@ -487,7 +515,7 @@ public void onEntityExplode(EntityExplodeEvent event) { preserve.add(block); break; case ENDER_CRYSTAL: - if (!blockperms.has("explode", true)) + if (!blockperms.has("explode", false)) preserve.add(block); continue; case SMALL_FIREBALL: @@ -510,6 +538,9 @@ public void onEntityExplode(EntityExplodeEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSplashPotion(PotionSplashEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; if (event.isCancelled()) return; @@ -540,7 +571,9 @@ public void onSplashPotion(PotionSplashEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; if (event.getEntityType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event.getEntityType())) return; @@ -579,12 +612,15 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (!res.getPermissions().playerHas(player.getName(), "container", false)) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "container", res.getName())); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamage(EntityDamageEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; Entity ent = event.getEntity(); if (ent.hasMetadata("NPC")) return; @@ -626,7 +662,7 @@ public void onEntityDamage(EntityDamageEvent event) { attacker = (Player) ((Projectile) damager).getShooter(); } if (!srcpvp) { - attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + attacker.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); event.setCancelled(true); return; } @@ -634,13 +670,13 @@ public void onEntityDamage(EntityDamageEvent event) { if (area == null) { /* World PvP */ if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { - attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldPVPDisabled")); + attacker.sendMessage(Residence.getLM().getMessage("General.WorldPVPDisabled")); event.setCancelled(true); } } else { /* Normal PvP */ if (!area.getPermissions().has("pvp", true)) { - attacker.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + attacker.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); event.setCancelled(true); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java index 2f5c584be..4ee20c8d1 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java @@ -11,10 +11,15 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.residence.Residence; + public class ResidenceFixesListener implements Listener { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onAnvilPlace(PlayerInteractEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; ItemStack iih = event.getItem(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 334aae4b4..85172dc49 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -96,6 +96,9 @@ public void reload() { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeShopDayNight(ResidenceFlagChangeEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (event.isCancelled()) return; @@ -119,6 +122,9 @@ public void onFlagChangeShopDayNight(ResidenceFlagChangeEvent event) { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onCommand(PlayerCommandPreprocessEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Player player = event.getPlayer(); String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); if (resname == null) @@ -136,12 +142,15 @@ public void onCommand(PlayerCommandPreprocessEvent event) { return; event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "command")); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "command", res.getName())); } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onFlagGuiClick(InventoryClickEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getWhoClicked().getWorld())) + return; if (GUI.size() == 0) return; @@ -166,6 +175,9 @@ public void onFlagGuiClick(InventoryClickEvent event) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onFlagGuiClose(InventoryCloseEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (GUI.size() == 0) return; HumanEntity player = event.getPlayer(); @@ -176,7 +188,9 @@ public void onFlagGuiClose(InventoryCloseEvent event) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignInteract(PlayerInteractEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; @@ -228,7 +242,9 @@ public void onSignInteract(PlayerInteractEvent event) { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onSignCreate(SignChangeEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Block block = event.getBlock(); if (!(block.getState() instanceof Sign)) @@ -236,7 +252,7 @@ public void onSignCreate(SignChangeEvent event) { Sign sign = (Sign) block.getState(); - if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(Residence.getLanguage().getPhrase("SignTopLine"))) + if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(Residence.getLM().getMessage("Sign.TopLine"))) return; Signs signInfo = new Signs(); @@ -257,7 +273,7 @@ public void onSignCreate(SignChangeEvent event) { res = Residence.getResidenceManager().getByName(resname); if (res == null) { - event.getPlayer().sendMessage(Residence.getLanguage().getPhrase("InvalidResidence")); + event.getPlayer().sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } @@ -297,7 +313,9 @@ public void run() { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignDestroy(BlockBreakEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (event.isCancelled()) return; @@ -366,6 +384,9 @@ public void run() { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerSpawn(PlayerRespawnEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getRespawnLocation().getWorld())) + return; Location loc = event.getRespawnLocation(); Boolean bed = event.isBedSpawn(); Player player = event.getPlayer(); @@ -381,10 +402,10 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { } res = Residence.getResidenceManager().getByLoc(loc); if (res != null && !res.getPermissions().playerHas(player.getName(), "move", true)) { - loc = res.getOutsideFreeLoc(loc); + loc = res.getOutsideFreeLoc(loc, player); } - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoSpawn")); + player.sendMessage(Residence.getLM().getMessage("General.NoSpawn")); event.setRespawnLocation(loc); } @@ -423,7 +444,9 @@ private boolean isCanUseEntity(Material mat, Block block) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerFireInteract(PlayerInteractEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (event.getAction() != Action.LEFT_CLICK_BLOCK) return; @@ -444,7 +467,7 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { "build", true)); if (!hasplace) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "build")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "build")); return; } } @@ -452,6 +475,9 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlatePress(PlayerInteractEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (event.getAction() != Action.PHYSICAL) return; Block block = event.getClickedBlock(); @@ -480,6 +506,9 @@ public void onPlatePress(PlayerInteractEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSelection(PlayerInteractEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; @@ -507,14 +536,17 @@ public void onSelection(PlayerInteractEvent event) { if (event.getAction() == Action.LEFT_CLICK_BLOCK) { Location loc = block.getLocation(); Residence.getSelectionManager().placeLoc1(player, loc, true); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Primary")) + ChatColor.RED - + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + player.sendMessage(Residence.getLM().getMessage("Select.PrimaryPoint", Residence.getLM().getMessage("General.CoordsTop", loc.getBlockX(), loc.getBlockY(), + loc + .getBlockZ()))); event.setCancelled(true); } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { Location loc = block.getLocation(); Residence.getSelectionManager().placeLoc2(player, loc, true); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectPoint", Residence.getLanguage().getPhrase("Secondary")) + ChatColor.RED - + "(" + loc.getBlockX() + "," + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + player.sendMessage(Residence.getLM().getMessage("Select.SecondaryPoint", Residence.getLM().getMessage("General.CoordsBottom", loc.getBlockX(), loc + .getBlockY(), + loc + .getBlockZ()))); event.setCancelled(true); } @@ -526,6 +558,9 @@ public void onSelection(PlayerInteractEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onInfoCheck(PlayerInteractEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (event.getAction() != Action.LEFT_CLICK_BLOCK) return; Block block = event.getClickedBlock(); @@ -542,7 +577,7 @@ public void onInfoCheck(PlayerInteractEvent event) { if (res != null) Residence.getResidenceManager().printAreaInfo(res, player); else - player.sendMessage(Residence.getLanguage().getPhrase("NoResHere")); + player.sendMessage(Residence.getLM().getMessage("Residence.NoResHere")); event.setCancelled(true); return; @@ -550,6 +585,9 @@ public void onInfoCheck(PlayerInteractEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Player player = event.getPlayer(); int heldItemId = player.getItemInHand().getTypeId(); Block block = event.getClickedBlock(); @@ -573,7 +611,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { boolean resadmin = Residence.isResAdminOn(player); Material heldItem = player.getItemInHand().getType(); if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); + player.sendMessage(Residence.getLM().getMessage("General.ItemBlacklisted")); event.setCancelled(true); return; } @@ -589,7 +627,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player.getName(), world, "build", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "build")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "build")); event.setCancelled(true); return; } @@ -598,7 +636,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (Residence.getNms().isArmorStandMaterial(heldItem)) { perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player.getName(), world, "build", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "build")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "build")); event.setCancelled(true); return; } @@ -616,11 +654,11 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (hasuse || checkMat.getValue().equals("container")) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", checkMat.getValue())); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", checkMat.getValue())); return; } else { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "use")); return; } @@ -628,21 +666,21 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (Residence.getConfigManager().getCustomContainers().contains(blockId)) { if (!perms.playerHas(player.getName(), world, "container", hasuse)) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "container")); return; } } if (Residence.getConfigManager().getCustomBothClick().contains(blockId)) { if (!hasuse) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "use")); return; } } if (Residence.getConfigManager().getCustomRightClick().contains(blockId) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (!hasuse) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "use")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "use")); return; } } @@ -651,6 +689,9 @@ public void onPlayerInteract(PlayerInteractEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Player player = event.getPlayer(); if (Residence.isResAdminOn(player)) return; @@ -663,13 +704,16 @@ public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "trade")); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "trade", res.getName())); event.setCancelled(true); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Player player = event.getPlayer(); if (Residence.isResAdminOn(player)) return; @@ -681,14 +725,16 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res != null && !res.getPermissions().playerHas(player.getName(), "dye", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "dye")); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "dye", res.getName())); event.setCancelled(true); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerShearEntity(PlayerShearEntityEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (event.isCancelled()) return; @@ -703,7 +749,7 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { return; if (!res.getPermissions().playerHas(player.getName(), "shear", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Shear|" + res.getName())); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Shear", res.getName())); event.setCancelled(true); } @@ -711,6 +757,9 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Player player = event.getPlayer(); if (Residence.isResAdminOn(player)) return; @@ -733,18 +782,21 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { String world = player.getWorld().getName(); String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); if (!Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ItemBlacklisted")); + player.sendMessage(Residence.getLM().getMessage("General.ItemBlacklisted")); event.setCancelled(true); return; } if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "container")); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Player player = event.getPlayer(); if (Residence.isResAdminOn(player)) return; @@ -755,7 +807,7 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { if (res != null) { if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { if (Residence.getRentManager().isRented(res.getName())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); + player.sendMessage(Residence.getLM().getMessage("Rent.ModifyDeny")); event.setCancelled(true); return; } @@ -779,7 +831,7 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)) && !perms.playerHas(pname, player.getWorld().getName(), "bucketempty", perms.playerHas(pname, player.getWorld().getName(), "build", true))) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "bucket")); event.setCancelled(true); return; } @@ -789,8 +841,8 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { if (res == null && Residence.getConfigManager().isNoLavaPlace() && loc.getBlockY() >= level - 1 && Residence.getConfigManager() .getNoPlaceWorlds().contains(loc.getWorld().getName())) { if (mat == Material.LAVA_BUCKET) { - if (!Residence.getLanguage().getPhrase("CantPlaceLava").equalsIgnoreCase("")) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("CantPlaceLava", String.valueOf(level))); + if (!Residence.getLM().getMessage("General.CantPlaceLava").equalsIgnoreCase("")) + player.sendMessage(Residence.getLM().getMessage("General.CantPlaceLava", level)); event.setCancelled(true); return; } @@ -799,8 +851,8 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { if (res == null && Residence.getConfigManager().isNoWaterPlace() && loc.getBlockY() >= level - 1 && Residence.getConfigManager() .getNoPlaceWorlds().contains(loc.getWorld().getName())) if (mat == Material.WATER_BUCKET) { - if (!Residence.getLanguage().getPhrase("CantPlaceWater").equalsIgnoreCase("")) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("CantPlaceWater", String.valueOf(level))); + if (!Residence.getLM().getMessage("General.CantPlaceWater").equalsIgnoreCase("")) + player.sendMessage(Residence.getLM().getMessage("General.CantPlaceWater", level)); event.setCancelled(true); return; } @@ -808,6 +860,9 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBucketFill(PlayerBucketFillEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Player player = event.getPlayer(); if (Residence.isResAdminOn(player)) return; @@ -816,7 +871,7 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) { if (res != null) { if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { if (Residence.getRentManager().isRented(res.getName())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("RentedModifyDeny")); + player.sendMessage(Residence.getLM().getMessage("Rent.ModifyDeny")); event.setCancelled(true); return; } @@ -828,14 +883,16 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) { boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)); boolean hasbucketfill = perms.playerHas(pname, player.getWorld().getName(), "bucketfill", perms.playerHas(pname, player.getWorld().getName(), "build", true)); if (!hasbucket && !hasbucketfill) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "bucket")); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "bucket")); event.setCancelled(true); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerTeleport(PlayerTeleportEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Player player = event.getPlayer(); if (player.hasMetadata("NPC")) @@ -855,14 +912,14 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { String areaname = res.getName(); if (!res.getPermissions().playerHas(player.getName(), "move", true)) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", areaname)); + player.sendMessage(Residence.getLM().getMessage("Residence.MoveDeny", areaname)); return; } } else if (event.getCause() == TeleportCause.ENDER_PEARL) { String areaname = res.getName(); if (!res.getPermissions().playerHas(player.getName(), "enderpearl", true)) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "enderpearl|" + areaname)); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "enderpearl", areaname)); return; } } @@ -870,7 +927,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { String areaname = res.getName(); event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny", areaname)); + player.sendMessage(Residence.getLM().getMessage("General.TeleportDeny", areaname)); return; } } @@ -879,6 +936,9 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerDeath(final PlayerDeathEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; Player player = event.getEntity(); if (player == null) return; @@ -909,6 +969,9 @@ public void run() { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerMove(PlayerMoveEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Player player = event.getPlayer(); if (player == null) return; @@ -937,7 +1000,7 @@ public void onPlayerMove(PlayerMoveEvent event) { if (!ResidenceCommandListener.getTeleportMap().isEmpty() && Residence.getConfigManager().getTeleportDelay() > 0 && ResidenceCommandListener.getTeleportDelayMap() .contains(player.getName())) { ResidenceCommandListener.getTeleportMap().remove(player.getName()); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportCanceled")); + player.sendMessage(Residence.getLM().getMessage("General.TeleportCanceled")); } } @@ -965,6 +1028,7 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { currentRes.remove(pname); } else { if (res != null && ResOld.getName().equals(res.getName())) { + lastOutsideLoc.put(pname, loc); return; } } @@ -984,14 +1048,6 @@ public void run() { lastOutsideLoc.put(pname, loc); if (ResOld != null) { String leave = ResOld.getLeaveMessage(); - /* - * TODO - ResidenceLeaveEvent is deprecated as of 21-MAY-2013. - * Its functionality is replaced by ResidenceChangedEvent. For - * now, this event is still supported until it is removed at a - * suitable time in the future. - */ -// ResidenceLeaveEvent leaveevent = new ResidenceLeaveEvent(ResOld, player); -// Residence.getServ().getPluginManager().callEvent(leaveevent); // New ResidenceChangeEvent ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); @@ -1020,16 +1076,19 @@ public void run() { Residence.getSelectionManager().MakeBorders(player, res.getAreaArray()[0].getLowLoc(), res.getAreaArray()[0].getHighLoc(), true); } - if (lastLoc != null) { + ClaimedResidence preRes = Residence.getResidenceManager().getByLoc(lastLoc); + + if (preRes != null && !preRes.getPermissions().playerHas(pname, "tp", true) && !player.hasPermission("residence.admin.tp")) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.teleport(newLoc); + } else if (lastLoc != null) { player.teleport(lastLoc); - } else { - player.teleport(res.getOutsideFreeLoc(loc)); } if (Residence.getConfigManager().useActionBar()) { - ActionBar.send(player, ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", orres.getName())); + ActionBar.send(player, Residence.getLM().getMessage("Residence.MoveDeny", orres.getName())); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", orres.getName())); + player.sendMessage(Residence.getLM().getMessage("Residence.MoveDeny", orres.getName())); } return; // Preventing fly in residence only when player has move permission @@ -1055,13 +1114,13 @@ public void run() { if (lastLoc != null) player.teleport(lastLoc); else - player.teleport(res.getOutsideFreeLoc(loc)); + player.teleport(res.getOutsideFreeLoc(loc, player)); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly|" + orres.getName())); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Fly", orres.getName())); return; } } - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceFlagDeny", "Fly|" + orres.getName())); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Fly", orres.getName())); player.teleport(location); player.setFlying(false); player.setAllowFlight(false); @@ -1084,15 +1143,6 @@ else if (res.getPermissions().has("night", false)) String leave = ResOld.getLeaveMessage(); chgFrom = ResOld; - /* - * TODO - ResidenceLeaveEvent is deprecated as of 21-MAY-2013. - * Its functionality is replaced by ResidenceChangedEvent. For - * now, this event is still supported until it is removed at a - * suitable time in the future. - */ -// ResidenceLeaveEvent leaveevent = new ResidenceLeaveEvent(ResOld, player); -// Residence.getServ().getPluginManager().callEvent(leaveevent); - if (ResOld.getPermissions().has("night", false) || ResOld.getPermissions().has("day", false)) player.resetPlayerTime(); @@ -1107,15 +1157,6 @@ else if (res.getPermissions().has("night", false)) String enterMessage = res.getEnterMessage(); - /* - * TODO - ResidenceEnterEvent is deprecated as of 21-MAY-2013. Its - * functionality is replaced by ResidenceChangedEvent. For now, this - * event is still supported until it is removed at a suitable time - * in the future. - */ -// ResidenceEnterEvent enterevent = new ResidenceEnterEvent(res, player); -// Residence.getServ().getPluginManager().callEvent(enterevent); - // New ResidenceChangedEvent ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); Residence.getServ().getPluginManager().callEvent(chgEvent); @@ -1217,6 +1258,9 @@ public void DespawnMobs() { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerChat(AsyncPlayerChatEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; String pname = event.getPlayer().getName(); if (!chatenabled || !playerToggleChat.contains(pname)) return; @@ -1231,21 +1275,20 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { public void tooglePlayerResidenceChat(Player player, String residence) { String pname = player.getName(); playerToggleChat.add(pname); - player.sendMessage(ChatColor.YELLOW + Residence.getLM().getMessage("Language.Chat.ChatChannelChange", ChatColor.RED + residence + ChatColor.YELLOW - + "!")); + player.sendMessage(Residence.getLM().getMessage("Chat.ChatChannelChange", residence)); } public void removePlayerResidenceChat(String pname) { playerToggleChat.remove(pname); Player player = Bukkit.getPlayer(pname); if (player != null) - player.sendMessage(ChatColor.YELLOW + Residence.getLM().getMessage("Language.Chat.ChatChannelLeave")); + player.sendMessage(Residence.getLM().getMessage("Chat.ChatChannelLeave")); } public void removePlayerResidenceChat(Player player) { String pname = player.getName(); playerToggleChat.remove(pname); - player.sendMessage(ChatColor.YELLOW + Residence.getLM().getMessage("Language.Chat.ChatChannelLeave")); + player.sendMessage(Residence.getLM().getMessage("Chat.ChatChannelLeave")); } public String getCurrentResidenceName(String player) { diff --git a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java index a89af6f3a..f86635382 100644 --- a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java @@ -15,6 +15,9 @@ public class SpigotListener implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onItemDamage(PlayerItemDamageEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Player player = event.getPlayer(); Location loc = player.getLocation(); FlagPermissions perms = Residence.getPermsByLoc(loc); diff --git a/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java b/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java index b9fddae6c..178ed1474 100644 --- a/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java +++ b/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.permissions; import com.bekvon.bukkit.residence.Residence; @@ -11,10 +6,6 @@ import de.bananaco.bpermissions.api.ApiLayer; import de.bananaco.bpermissions.api.util.CalculableType; -/** - * - * @author Administrator - */ @SuppressWarnings("deprecation") public class BPermissionsAdapter implements PermissionsInterface { @@ -22,20 +13,20 @@ public BPermissionsAdapter() { } public String getPlayerGroup(Player player) { - return this.getPlayerGroup(player.getName(), player.getWorld().getName()); + return this.getPlayerGroup(player.getName(), player.getWorld().getName()); } public String getPlayerGroup(String player, String world) { String[] groups = ApiLayer.getGroups(world, CalculableType.USER, player); - PermissionManager pmanager = Residence.getPermissionManager(); - for (String group : groups) { - if (pmanager.hasGroup(group)) { - return group.toLowerCase(); - } - } - if (groups.length > 0) { - return groups[0].toLowerCase(); - } - return null; + PermissionManager pmanager = Residence.getPermissionManager(); + for (String group : groups) { + if (pmanager.hasGroup(group)) { + return group.toLowerCase(); + } + } + if (groups.length > 0) { + return groups[0].toLowerCase(); + } + return null; } } diff --git a/src/com/bekvon/bukkit/residence/permissions/LegacyPermissions.java b/src/com/bekvon/bukkit/residence/permissions/LegacyPermissions.java index aa4b9b394..3a53d98a4 100644 --- a/src/com/bekvon/bukkit/residence/permissions/LegacyPermissions.java +++ b/src/com/bekvon/bukkit/residence/permissions/LegacyPermissions.java @@ -1,34 +1,25 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.permissions; import com.nijiko.permissions.PermissionHandler; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class LegacyPermissions implements PermissionsInterface { PermissionHandler authority; public LegacyPermissions(PermissionHandler perms) { - authority = perms; + authority = perms; } public String getPlayerGroup(Player player) { - return this.getPlayerGroup(player.getName(), player.getWorld().getName()); + return this.getPlayerGroup(player.getName(), player.getWorld().getName()); } public String getPlayerGroup(String player, String world) { - String group = authority.getPrimaryGroup(world, player); - if (group != null) - return group.toLowerCase(); - return null; + String group = authority.getPrimaryGroup(world, player); + if (group != null) + return group.toLowerCase(); + return null; } } diff --git a/src/com/bekvon/bukkit/residence/permissions/OriginalPermissions.java b/src/com/bekvon/bukkit/residence/permissions/OriginalPermissions.java index 39ff42be0..d402e3c1a 100644 --- a/src/com/bekvon/bukkit/residence/permissions/OriginalPermissions.java +++ b/src/com/bekvon/bukkit/residence/permissions/OriginalPermissions.java @@ -1,35 +1,26 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.permissions; import com.nijiko.permissions.PermissionHandler; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class OriginalPermissions implements PermissionsInterface { PermissionHandler authority; public OriginalPermissions(PermissionHandler perms) { - authority = perms; + authority = perms; } public String getPlayerGroup(Player player) { - return this.getPlayerGroup(player.getName(), player.getWorld().getName()); + return this.getPlayerGroup(player.getName(), player.getWorld().getName()); } public String getPlayerGroup(String player, String world) { - String group = authority.getPrimaryGroup(world, player); - if (group != null) { - return group.toLowerCase(); - } - return null; + String group = authority.getPrimaryGroup(world, player); + if (group != null) { + return group.toLowerCase(); + } + return null; } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 653f96c9a..7c8204f12 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -1,6 +1,5 @@ package com.bekvon.bukkit.residence.permissions; -import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; import com.bekvon.bukkit.residence.Residence; @@ -15,12 +14,6 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -/** - * - * @author Administrator - * - * changed by inori 03/17/2012 line 91:limits MaxHeight changed to 255 - */ public class PermissionGroup { protected int xmax; protected int ymax; @@ -316,35 +309,34 @@ public boolean itemListAccess() { } public void printLimits(Player player, OfflinePlayer target, boolean resadmin) { - player.sendMessage(ChatColor.GRAY + Residence.getLanguage().getPhrase("LimitsTop")); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsPGroup", Residence.getPermissionManager().getPermissionsGroup(target.getName(), + player.sendMessage(Residence.getLM().getMessage("Seperator")); + player.sendMessage(Residence.getLM().getMessage("Limits.PGroup", Residence.getPermissionManager().getPermissionsGroup(target.getName(), Residence.getConfigManager().getDefaultWorld()))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsRGroup", groupname)); + player.sendMessage(Residence.getLM().getMessage("Limits.RGroup", groupname)); if (target.isOnline() && resadmin) - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsAdmin", String.valueOf(Residence.getPermissionManager().isResidenceAdmin( - player)))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsCanCreate", String.valueOf(cancreate))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxRes", String.valueOf(getMaxZones(target.getName())))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxEW", String.valueOf(xmax))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxNS", String.valueOf(zmax))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxUD", String.valueOf(ymax))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMinMax", String.valueOf(minHeight) + "|" + String.valueOf(maxHeight))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxSub", String.valueOf(getMaxSubzoneDepth(target.getName())))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsMaxRents", String.valueOf(getMaxRents(target.getName())))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsEnterLeave", String.valueOf(messageperms))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsNumberOwn", String.valueOf(Residence.getResidenceManager().getOwnedZoneCount(target - .getName())))); + player.sendMessage(Residence.getLM().getMessage("Limits.Admin", Residence.getPermissionManager().isResidenceAdmin( + player))); + player.sendMessage(Residence.getLM().getMessage("Limits.CanCreate", cancreate)); + player.sendMessage(Residence.getLM().getMessage("Limits.MaxRes", getMaxZones(target.getName()))); + player.sendMessage(Residence.getLM().getMessage("Limits.MaxEW", xmax)); + player.sendMessage(Residence.getLM().getMessage("Limits.MaxNS", zmax)); + player.sendMessage(Residence.getLM().getMessage("Limits.MaxUD", ymax)); + player.sendMessage(Residence.getLM().getMessage("Limits.MinMax", minHeight, maxHeight)); + player.sendMessage(Residence.getLM().getMessage("Limits.MaxSub", getMaxSubzoneDepth(target.getName()))); + player.sendMessage(Residence.getLM().getMessage("Limits.MaxRents", getMaxRents(target.getName()))); + player.sendMessage(Residence.getLM().getMessage("Limits.EnterLeave", messageperms)); + player.sendMessage(Residence.getLM().getMessage("Limits.NumberOwn", Residence.getResidenceManager().getOwnedZoneCount(target.getName()))); if (Residence.getEconomyManager() != null) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsCost", String.valueOf(costperarea))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsSell", String.valueOf(sellperarea))); + player.sendMessage(Residence.getLM().getMessage("Limits.Cost", costperarea)); + player.sendMessage(Residence.getLM().getMessage("Limits.Sell", sellperarea)); } - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", flagPerms.listFlags())); + player.sendMessage(Residence.getLM().getMessage("Limits.Flag", flagPerms.listFlags())); if (Residence.getConfigManager().useLeases()) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", String.valueOf(maxLeaseTime))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", String.valueOf(leaseGiveTime))); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LimitsFlag", String.valueOf(renewcostperarea))); + player.sendMessage(Residence.getLM().getMessage("Limits.Flag", maxLeaseTime)); + player.sendMessage(Residence.getLM().getMessage("Limits.Flag", leaseGiveTime)); + player.sendMessage(Residence.getLM().getMessage("Limits.Flag", renewcostperarea)); } - player.sendMessage(ChatColor.GRAY + Residence.getLanguage().getPhrase("LimitsBottom")); + player.sendMessage(Residence.getLM().getMessage("Seperator")); } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index f8b69e781..648b5acf0 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.permissions; import com.bekvon.bukkit.residence.Residence; @@ -19,10 +14,6 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -/** - * - * @author Administrator - */ public class PermissionManager { protected static PermissionsInterface perms; protected LinkedHashMap groups; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java b/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java index 43a66ab96..4858a44ef 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.permissions; import com.bekvon.bukkit.residence.Residence; @@ -11,35 +6,31 @@ import java.util.List; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class PermissionsBukkitAdapter implements PermissionsInterface { PermissionsPlugin newperms; public PermissionsBukkitAdapter(PermissionsPlugin p) { - newperms = p; + newperms = p; } public String getPlayerGroup(Player player) { - return this.getPlayerGroup(player.getName(), player.getWorld().getName()); + return this.getPlayerGroup(player.getName(), player.getWorld().getName()); } public String getPlayerGroup(String player, String world) { - PermissionManager pmanager = Residence.getPermissionManager(); - List groups = newperms.getGroups(player); - for (Group group : groups) { - String name = group.getName().toLowerCase(); - if (pmanager.hasGroup(name)) { - return name; - } - } - if (groups.size() > 0) { - return groups.get(0).getName().toLowerCase(); - } - return null; + PermissionManager pmanager = Residence.getPermissionManager(); + List groups = newperms.getGroups(player); + for (Group group : groups) { + String name = group.getName().toLowerCase(); + if (pmanager.hasGroup(name)) { + return name; + } + } + if (groups.size() > 0) { + return groups.get(0).getName().toLowerCase(); + } + return null; } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java b/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java index 72e5f7124..31248a8dd 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java @@ -1,17 +1,9 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.permissions; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public interface PermissionsInterface { public String getPlayerGroup(Player player); + public String getPlayerGroup(String player, String world); } diff --git a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java index 63f036f6a..1f3d0e23c 100644 --- a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java +++ b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.persistance; import java.io.File; @@ -19,10 +14,6 @@ import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.reader.ReaderException; -/** - * - * @author Administrator - */ public class YMLSaveHelper { File f; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index a9ba432c8..6337fcf54 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -5,27 +5,33 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; +import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.containers.RandomLoc; import com.bekvon.bukkit.residence.economy.ResidenceBank; import com.bekvon.bukkit.residence.economy.TransactionManager; +import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceTPEvent; import com.bekvon.bukkit.residence.itemlist.ItemList.ListType; import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.Debug; - import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Random; import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.World.Environment; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -60,6 +66,18 @@ public boolean isSubzone() { return parent == null ? false : true; } + public int getSubzoneDeep() { + return getSubzoneDeep(0); + } + + public int getSubzoneDeep(int deep) { + deep++; + if (parent != null) { + return parent.getSubzoneDeep(deep); + } + return deep; + } + public ClaimedResidence(String creationWorld, Residence plugin) { this(Residence.getServerLandname(), creationWorld, plugin); } @@ -81,30 +99,26 @@ public boolean addArea(CuboidArea area, String name) { public static boolean CheckAreaSize(Player player, CuboidArea area, boolean resadmin) { if (!resadmin && area.getSize() < Residence.getConfigManager().getMinimalResSize()) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallTotal", String.valueOf(Residence.getConfigManager() - .getMinimalResSize()))); + player.sendMessage(Residence.getLM().getMessage("Area.ToSmallTotal", Residence.getConfigManager().getMinimalResSize())); } return false; } if (!resadmin && area.getXSize() < Residence.getConfigManager().getMinimalResX()) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallX", String.valueOf(area.getXSize()) + "|" + String.valueOf(Residence - .getConfigManager().getMinimalResX()))); + player.sendMessage(Residence.getLM().getMessage("Area.ToSmallX", area.getXSize(), Residence.getConfigManager().getMinimalResX())); } return false; } if (!resadmin && area.getYSize() < Residence.getConfigManager().getMinimalResY()) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallY", String.valueOf(area.getYSize()) + "|" + String.valueOf(Residence - .getConfigManager().getMinimalResY()))); + player.sendMessage(Residence.getLM().getMessage("Area.ToSmallY", area.getYSize(), Residence.getConfigManager().getMinimalResY())); } return false; } if (!resadmin && area.getZSize() < Residence.getConfigManager().getMinimalResZ()) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaToSmallZ", String.valueOf(area.getZSize()) + "|" + String.valueOf(Residence - .getConfigManager().getMinimalResZ()))); + player.sendMessage(Residence.getLM().getMessage("Area.ToSmallZ", area.getZSize(), Residence.getConfigManager().getMinimalResZ())); } return false; } @@ -114,13 +128,13 @@ public static boolean CheckAreaSize(Player player, CuboidArea area, boolean resa public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin) { if (!Residence.validName(name)) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); } return false; } if (areas.containsKey(name)) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaExists")); + player.sendMessage(Residence.getLM().getMessage("Area.Exists")); } return false; } @@ -141,7 +155,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaDiffWorld")); + player.sendMessage(Residence.getLM().getMessage("Area.DiffWorld")); } return false; } @@ -149,7 +163,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa String collideResidence = Residence.getResidenceManager().checkAreaCollision(area, this); if (collideResidence != null) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence)); + player.sendMessage(Residence.getLM().getMessage("Area.Collision", collideResidence)); CuboidArea oldArea = Residence.getResidenceManager().getByName(collideResidence).getAreaArray()[0]; if (oldArea != null) { Residence.getSelectionManager().NewMakeBorders(player, oldArea.lowPoints, oldArea.highPoints, true); @@ -166,7 +180,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa if (res != null && res != this) { if (res.checkCollision(area)) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz)); + player.sendMessage(Residence.getLM().getMessage("Area.SubzoneCollision", sz)); } return false; } @@ -175,40 +189,40 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return false; } if (parent != null) { if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNotWithinParent")); + player.sendMessage(Residence.getLM().getMessage("Area.NotWithinParent")); return false; } if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ParentNoPermission")); + player.sendMessage(Residence.getLM().getMessage("Residence.ParentNoPermission")); return false; } } PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (!this.isSubzone() && !group.canCreateResidences() && !player.hasPermission("residence.create") || this.isSubzone() && !group.canCreateResidences() && !player.hasPermission("residence.create.subzone")) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return false; } if (areas.size() >= group.getMaxPhysicalPerResidence()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaMaxPhysical")); + player.sendMessage(Residence.getLM().getMessage("Area.MaxPhysical")); return false; } if (!group.inLimits(area)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSizeLimit")); + player.sendMessage(Residence.getLM().getMessage("Area.SizeLimit")); return false; } if (group.getMinHeight() > area.getLowLoc().getBlockY()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); + player.sendMessage(Residence.getLM().getMessage("Area.LowLimit", String.format("%d", group.getMinHeight()))); return false; } if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); + player.sendMessage(Residence.getLM().getMessage("Area.HighLimit", String.format("%d", group.getMaxHeight()))); return false; } if (parent == null && Residence.getConfigManager().enableEconomy()) { @@ -222,7 +236,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa areas.put(name, area); Residence.getResidenceManager().calculateChunks(getName()); if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaCreate", ChatColor.YELLOW + name)); + player.sendMessage(Residence.getLM().getMessage("Area.Create", name)); } return true; } @@ -234,19 +248,19 @@ public boolean replaceArea(CuboidArea neware, String name) { public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { if (!areas.containsKey(name)) { if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); + player.sendMessage(Residence.getLM().getMessage("Area.NonExist")); return false; } CuboidArea oldarea = areas.get(name); if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaDiffWorld")); + player.sendMessage(Residence.getLM().getMessage("Area.DiffWorld")); return false; } if (parent == null) { String collideResidence = Residence.getResidenceManager().checkAreaCollision(newarea, this); if (collideResidence != null && player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaCollision", ChatColor.YELLOW + collideResidence)); + player.sendMessage(Residence.getLM().getMessage("Area.Collision", collideResidence)); CuboidArea area = Residence.getResidenceManager().getByName(collideResidence).getAreaArray()[0]; Residence.getSelectionManager().NewMakeBorders(player, area.getLowLoc(), area.highPoints, true); return false; @@ -258,7 +272,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole if (res != null && res != this) { if (res.checkCollision(newarea)) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSubzoneCollision", ChatColor.YELLOW + sz)); + player.sendMessage(Residence.getLM().getMessage("Area.SubzoneCollision", sz)); Residence.getSelectionManager().NewMakeBorders(player, res.getAreaArray()[0].lowPoints, res.getAreaArray()[0].highPoints, true); } return false; @@ -295,36 +309,34 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { - Debug.D("1"); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); - Debug.D("2"); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return false; } if (parent != null) { if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNotWithinParent")); + player.sendMessage(Residence.getLM().getMessage("Area.NotWithinParent")); return false; } if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ParentNoPermission")); + player.sendMessage(Residence.getLM().getMessage("Residence.ParentNoPermission")); return false; } } PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (!group.canCreateResidences() && !player.hasPermission("residence.resize")) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return false; } if (!group.inLimits(newarea)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaSizeLimit")); + player.sendMessage(Residence.getLM().getMessage("Area.SizeLimit")); return false; } if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaLowLimit", ChatColor.YELLOW + String.format("%d", group.getMinHeight()))); + player.sendMessage(Residence.getLM().getMessage("Area.LowLimit", String.format("%d", group.getMinHeight()))); return false; } if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaHighLimit", ChatColor.YELLOW + String.format("%d", group.getMaxHeight()))); + player.sendMessage(Residence.getLM().getMessage("Area.HighLimit", String.format("%d", group.getMaxHeight()))); return false; } if (parent == null && Residence.getConfigManager().enableEconomy()) { @@ -335,14 +347,19 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } } } - } + + ResidenceSizeChangeEvent resevent = new ResidenceSizeChangeEvent(player, this, oldarea, newarea); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + Residence.getResidenceManager().removeChunkList(getName()); areas.remove(name); areas.put(name, newarea); Residence.getResidenceManager().calculateChunks(getName()); if (player != null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaUpdate")); + player.sendMessage(Residence.getLM().getMessage("Area.Update")); return true; } @@ -361,42 +378,44 @@ public boolean addSubzone(Player player, Location loc1, Location loc2, String na public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { if (!Residence.validName(name)) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); } return false; } if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneSelectInside")); + player.sendMessage(Residence.getLM().getMessage("Subzone.SelectInside")); } return false; } if (subzones.containsKey(name)) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + name)); + player.sendMessage(Residence.getLM().getMessage("Subzone.Exists", name)); } return false; } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { if (!this.perms.playerHas(player.getName(), "subzone", this.perms.playerHas(player.getName(), "admin", false))) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return false; } } PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (this.getZoneDepth() >= group.getMaxSubzoneDepth(owner)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneMaxDepth")); + player.sendMessage(Residence.getLM().getMessage("Subzone.MaxDepth")); return false; } } + CuboidArea newArea = new CuboidArea(loc1, loc2); + Set> set = subzones.entrySet(); for (Entry resEntry : set) { ClaimedResidence res = resEntry.getValue(); if (res.checkCollision(newArea)) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneCollide", ChatColor.YELLOW + resEntry.getKey())); + player.sendMessage(Residence.getLM().getMessage("Subzone.Collide", resEntry.getKey())); if (res.getAreaArray().length > 0) { CuboidArea oldArea = res.getAreaArray()[0]; Residence.getSelectionManager().NewMakeBorders(player, oldArea.lowPoints, oldArea.highPoints, true); @@ -415,6 +434,7 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); newres.addArea(newArea, name); } + if (newres.getAreaCount() != 0) { newres.getPermissions().applyDefaultFlags(); if (player != null) { @@ -425,13 +445,19 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l if (Residence.getConfigManager().flagsInherit()) { newres.getPermissions().setParent(perms); } + + ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, name, newres, newArea); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + subzones.put(name, newres); if (player != null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneCreate", ChatColor.YELLOW + name)); + player.sendMessage(Residence.getLM().getMessage("Subzone.Create", name)); return true; } else { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneCreateFail", ChatColor.YELLOW + name)); + player.sendMessage(Residence.getLM().getMessage("Subzone.CreateFail", name)); } return false; } @@ -583,12 +609,12 @@ public boolean removeSubzone(String name) { public boolean removeSubzone(Player player, String name, boolean resadmin) { ClaimedResidence res = subzones.get(name); if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return false; } subzones.remove(name); if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); + player.sendMessage(Residence.getLM().getMessage("Subzone.Remove", name)); } return true; } @@ -659,11 +685,11 @@ public void setEnterLeaveMessage(Player player, String message, boolean enter, b } PermissionGroup group = Residence.getPermissionManager().getGroup(perms.getOwner(), perms.getWorld()); if (!group.canSetEnterLeaveMessages() && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("OwnerNoPermission")); + player.sendMessage(Residence.getLM().getMessage("Residence.OwnerNoPermission")); return; } if (!perms.hasResidencePermission(player, false) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } if (enter) { @@ -671,10 +697,10 @@ public void setEnterLeaveMessage(Player player, String message, boolean enter, b } else { this.setLeaveMessage(message); } - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MessageChange")); + player.sendMessage(Residence.getLM().getMessage("Residence.MessageChange")); } - public Location getMiddleFreeLoc(Location insideLoc) { + public Location getMiddleFreeLoc(Location insideLoc, Player player) { CuboidArea area = this.getAreaByLoc(insideLoc); if (area == null) { return insideLoc; @@ -707,45 +733,85 @@ public Location getMiddleFreeLoc(Location insideLoc) { if (found) { return newLoc; } else { - return getOutsideFreeLoc(insideLoc); + return getOutsideFreeLoc(insideLoc, player); } } - @SuppressWarnings("deprecation") - public Location getOutsideFreeLoc(Location insideLoc) { - int maxIt = 100; + public Location getOutsideFreeLoc(Location insideLoc, Player player) { CuboidArea area = this.getAreaByLoc(insideLoc); if (area == null) { return insideLoc; } - Location highLoc = area.getHighLoc(); - Location newLoc = new Location(highLoc.getWorld(), highLoc.getBlockX(), highLoc.getBlockY(), highLoc.getBlockZ()); + + List randomLocList = new ArrayList(); + + for (int z = 0; z < area.getZSize(); z++) { + randomLocList.add(new RandomLoc(area.getLowLoc().getX() - 1, 0, area.getLowLoc().getZ() + z)); + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + area.getXSize(), 0, area.getLowLoc().getZ() + z)); + } + + for (int x = -1; x < area.getXSize() + 1; x++) { + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ() - 1)); + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ() + area.getZSize())); + } + + Location loc = insideLoc.clone(); + boolean found = false; int it = 0; + int maxIt = 30; while (!found && it < maxIt) { it++; - Location lowLoc; - newLoc.setX(newLoc.getBlockX() + 1); - newLoc.setZ(newLoc.getBlockZ() + 1); - lowLoc = new Location(newLoc.getWorld(), newLoc.getBlockX(), 254, newLoc.getBlockZ()); - newLoc.setY(255); - while ((newLoc.getBlock().getTypeId() != 0 || lowLoc.getBlock().getTypeId() == 0) && lowLoc.getBlockY() > -126) { - newLoc.setY(newLoc.getY() - 1); - lowLoc.setY(lowLoc.getY() - 1); - } - if (newLoc.getBlock().getTypeId() == 0 && lowLoc.getBlock().getTypeId() != 0) { - found = true; - } - } - if (found) { - return newLoc; - } else { - World world = Residence.getServ().getWorld(perms.getWorld()); - if (world != null) { - return world.getSpawnLocation(); + + Random ran = new Random(System.currentTimeMillis()); + int check = ran.nextInt(randomLocList.size()); + RandomLoc place = randomLocList.get(check); + randomLocList.remove(check); + double x = place.getX(); + double z = place.getZ(); + + loc.setX(x); + loc.setZ(z); + loc.setY(area.getHighLoc().getBlockY()); + + int max = area.getHighLoc().getBlockY(); + max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; + + for (int i = max; i > area.getLowLoc().getY(); i--) { + loc.setY(i); + Block block = loc.getBlock(); + Block block2 = loc.clone().add(0, 1, 0).getBlock(); + Block block3 = loc.clone().add(0, -1, 0).getBlock(); + if (!Residence.getNms().isEmptyBlock(block3) && Residence.getNms().isEmptyBlock(block) && Residence.getNms().isEmptyBlock(block2)) { + break; + } } - return insideLoc; + + if (!Residence.getNms().isEmptyBlock(loc.getBlock())) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA || loc.clone().add(0, -1, 0).getBlock().getState() + .getType() == Material.STATIONARY_LAVA) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER || loc.clone().add(0, -1, 0).getBlock().getState() + .getType() == Material.STATIONARY_WATER) + continue; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null && player != null && !res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) + continue; + + found = true; + loc.setY(loc.getY() + 2); + loc.add(0.5, 0, 0.5); + break; } + + if (!found && Residence.getConfigManager().getKickLocation() != null) + return Residence.getConfigManager().getKickLocation(); + + return loc; } protected CuboidArea getAreaByLoc(Location loc) { @@ -767,12 +833,20 @@ public String[] listSubzones() { return list; } + public List getSubzones() { + List list = new ArrayList(); + for (Entry res : subzones.entrySet()) { + list.add(res.getValue()); + } + return list; + } + public void printSubzoneList(Player player, int page) { ArrayList temp = new ArrayList<>(); for (Entry sz : subzones.entrySet()) { - temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + Residence.getLanguage().getPhrase("Owner") + ": " + sz.getValue().getOwner()); + temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + Residence.getLM().getMessage("General.Owner", sz.getValue().getOwner())); } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Subzones"), temp, page); + InformationPager.printInfo(player, Residence.getLM().getMessage("General.Subzones"), temp, page); } public void printAreaList(Player player, int page) { @@ -780,7 +854,7 @@ public void printAreaList(Player player, int page) { for (String area : areas.keySet()) { temp.add(area); } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"), temp, page); + InformationPager.printInfo(player, Residence.getLM().getMessage("General.PhysicalAreas"), temp, page); } public void printAdvancedAreaList(Player player, int page) { @@ -793,7 +867,7 @@ public void printAdvancedAreaList(Player player, int page) { .getBlockX() + "," + h.getBlockY() + "," + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("PhysicalAreas"), temp, page); + InformationPager.printInfo(player, Residence.getLM().getMessage("General.PhysicalAreas"), temp, page); } public String[] getAreaList() { @@ -818,15 +892,15 @@ public int getZoneDepth() { public void setTpLoc(Player player, boolean resadmin) { if (!this.perms.hasResidencePermission(player, false) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } if (!this.containsLoc(player.getLocation())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotInResidence")); + player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); return; } tpLoc = player.getLocation(); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SetTeleportLocation")); + player.sendMessage(Residence.getLM().getMessage("Residence.SetTeleportLocation")); } public int isSafeTp(Player player) { @@ -864,19 +938,19 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass")) { PermissionGroup group = Residence.getPermissionManager().getGroup(reqPlayer); if (!group.hasTpAccess()) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportDeny")); + reqPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportDeny")); return; } if (!reqPlayer.equals(targetPlayer)) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + reqPlayer.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } if (!this.perms.playerHas(reqPlayer.getName(), "tp", true)) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportNoFlag")); + reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.TeleportNoFlag")); return; } if (!this.perms.playerHas(reqPlayer.getName(), "move", true)) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceMoveDeny", this.getName())); + reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.MoveDeny", this.getName())); return; } } @@ -884,15 +958,14 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r if (!ResidenceCommandListener.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { int distance = isSafeTp(reqPlayer); if (distance > 6) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("TeleportConfirm", String.valueOf(distance))); + reqPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportConfirm", distance)); ResidenceCommandListener.getTeleportMap().put(reqPlayer.getName(), this); return; } } if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin) { - reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("TeleportStarted", this.getName() + "|" + Residence.getConfigManager() - .getTeleportDelay())); + reqPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportStarted", this.getName(), Residence.getConfigManager().getTeleportDelay())); ResidenceCommandListener.getTeleportDelayMap().add(reqPlayer.getName()); } @@ -908,7 +981,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r ResidenceCommandListener.getTeleportDelayMap().remove(targetPlayer.getName()); return; } - final Location targloc = this.getMiddleFreeLoc(area.getHighLoc()); + final Location targloc = this.getMiddleFreeLoc(area.getHighLoc(), targetPlayer); if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin) performDelaydTp(targloc, targetPlayer, reqPlayer, true); else @@ -929,9 +1002,9 @@ else if (ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.ge ResidenceCommandListener.getTeleportDelayMap().remove(targetPlayer.getName()); targetPlayer.teleport(targloc); if (near) - targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportNear")); + targetPlayer.sendMessage(Residence.getLM().getMessage("Residence.TeleportNear")); else - targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportSuccess")); + targetPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportSuccess")); return; } }, Residence.getConfigManager().getTeleportDelay() * 20L); @@ -944,9 +1017,9 @@ private void performInstantTp(final Location targloc, final Player targetPlayer, if (!tpevent.isCancelled()) { targetPlayer.teleport(targloc); if (near) - targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportNear")); + targetPlayer.sendMessage(Residence.getLM().getMessage("Residence.TeleportNear")); else - targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("TeleportSuccess")); + targetPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportSuccess")); } } @@ -976,17 +1049,17 @@ public void removeArea(String id) { public void removeArea(Player player, String id, boolean resadmin) { if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { if (!areas.containsKey(id)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaNonExist")); + player.sendMessage(Residence.getLM().getMessage("Area.NonExist")); return; } if (areas.size() == 1 && !Residence.getConfigManager().allowEmptyResidences()) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaRemoveLast")); + player.sendMessage(Residence.getLM().getMessage("Area.RemoveLast")); return; } removeArea(id); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaRemove")); + player.sendMessage(Residence.getLM().getMessage("Area.Remove")); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); } } @@ -1110,28 +1183,28 @@ public boolean renameSubzone(String oldName, String newName) { public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { if (!Residence.validName(newName)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); return false; } ClaimedResidence res = subzones.get(oldName); if (res == null) { if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidSubzone")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Subzone")); return false; } if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return false; } if (subzones.containsKey(newName)) { if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SubzoneExists", ChatColor.YELLOW + newName)); + player.sendMessage(Residence.getLM().getMessage("Subzone.Exists", newName)); return false; } subzones.put(newName, res); subzones.remove(oldName); if (player != null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SubzoneRename", oldName + "|" + newName)); + player.sendMessage(Residence.getLM().getMessage("Subzone.Rename", oldName, newName)); return true; } @@ -1141,28 +1214,28 @@ public boolean renameArea(String oldName, String newName) { public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { if (!Residence.validName(newName)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); return false; } if (player == null || perms.hasResidencePermission(player, true) || resadmin) { if (areas.containsKey(newName)) { if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaExists")); + player.sendMessage(Residence.getLM().getMessage("Area.Exists")); return false; } CuboidArea area = areas.get(oldName); if (area == null) { if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("AreaInvalidName")); + player.sendMessage(Residence.getLM().getMessage("Area.InvalidName")); return false; } areas.put(newName, area); areas.remove(oldName); if (player != null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("AreaRename", oldName + "|" + newName)); + player.sendMessage(Residence.getLM().getMessage("Area.Rename", oldName, newName)); return true; } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return false; } } @@ -1217,6 +1290,10 @@ public void setChannelColor(ChatColor ChannelColor) { this.ChannelColor = ChannelColor; } + public ChatChannel getChatChannel() { + return Residence.getChatManager().getChannel(this.getName()); + } + public ChatColor getChannelColor() { return ChannelColor; } diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index 035996063..9fd5c1247 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.protection; import com.bekvon.bukkit.residence.Residence; @@ -19,10 +14,6 @@ import org.bukkit.Server; import org.bukkit.World; -/** - * - * @author Administrator - */ public class CuboidArea { protected Location highPoints; protected Location lowPoints; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 481624b95..52a238a6b 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -18,10 +18,6 @@ import com.bekvon.bukkit.residence.Residence; -/** - * - * @author Administrator - */ public class FlagPermissions { protected static ArrayList validFlags = new ArrayList<>(); @@ -34,6 +30,10 @@ public class FlagPermissions { protected Map cuboidFlags = new HashMap(); protected FlagPermissions parent; + public static enum FlagState { + TRUE, FALSE, NEITHER, INVALID + } + public static void addMaterialToUseFlag(Material mat, String flag) { matUseFlagList.put(mat, flag); } @@ -151,7 +151,7 @@ public static void initValidFlags() { addFlag("chat"); addFlag("dye"); - + addFlag("enderpearl"); addResidenceOnlyFlag("trample"); @@ -459,11 +459,6 @@ public boolean setFlag(String flag, FlagState state) { return true; } - public static enum FlagState { - - TRUE, FALSE, NEITHER, INVALID - } - public static FlagState stringToFlagState(String flagstate) { if (flagstate.equalsIgnoreCase("true") || flagstate.equalsIgnoreCase("t")) { return FlagState.TRUE; @@ -788,7 +783,7 @@ public String listOtherPlayersFlags(String player) { next = this.cachedPlayerNameUUIDs.get(next); } if (!perms.equals("none")) { - sbuild.append(next).append("[").append(ChatColor.DARK_AQUA).append(perms).append(ChatColor.RED).append("] "); + sbuild.append(next).append(ChatColor.WHITE).append("[").append(perms).append(ChatColor.WHITE).append("] "); } } } @@ -921,10 +916,10 @@ public void clearFlags() { } public void printFlags(Player player) { - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Flags") + ":" + ChatColor.BLUE + " " + listFlags()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Your.Flags") + ":" + ChatColor.GREEN + " " + listPlayerFlags(player.getName())); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Group.Flags") + ":" + ChatColor.RED + " " + listGroupFlags()); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Others.Flags") + ":" + ChatColor.RED + " " + listOtherPlayersFlags(player.getName())); + player.sendMessage(Residence.getLM().getMessage("General.Flags", listFlags())); + player.sendMessage(Residence.getLM().getMessage("General.YourFlags", listPlayerFlags(player.getName()))); + player.sendMessage(Residence.getLM().getMessage("General.GroupFlags", listGroupFlags())); + player.sendMessage(Residence.getLM().getMessage("General.OthersFlags", listOtherPlayersFlags(player.getName()))); } public void copyUserPermissions(String fromUser, String toUser) { diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index 1f077e405..1db86a659 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -1,12 +1,5 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.protection; -import org.bukkit.ChatColor; - import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.economy.EconomyInterface; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; @@ -22,10 +15,6 @@ import java.util.Set; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class LeaseManager { private Map leaseExpireTime; @@ -60,16 +49,16 @@ public void setExpireTime(Player player, String area, int days) { if (manager.getByName(area) != null) { leaseExpireTime.put(area, daysToMs(days) + System.currentTimeMillis()); if (player != null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("LeaseRenew", getExpireTime(area).toString())); + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenew", getExpireTime(area))); } else { if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidArea")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); } } public void renewArea(String area, Player player) { if (!leaseExpires(area)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("LeaseNotExpire")); + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); return; } PermissionGroup limits = Residence.getPermissionManager().getGroup(player); @@ -86,18 +75,17 @@ public void renewArea(String area, Player player) { if (econ.canAfford(player.getName(), amount)/*account.hasEnough(amount)*/) { econ.subtract(player.getName(), amount); econ.add("Lease Money", amount); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("MoneyCharged", ChatColor.YELLOW + String.format("%d", amount) - + ChatColor.GREEN + "|" + ChatColor.YELLOW + econ.getName() + ChatColor.GREEN)); + player.sendMessage(Residence.getLM().getMessage("Economy.MoneyCharged", String.format("%d", amount), econ.getName())); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotEnoughMoney")); + player.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); return; } } } if (rem + add > max) { setExpireTime(player, area, max); - player.sendMessage(ChatColor.GOLD + Residence.getLanguage().getPhrase("LeaseRenewMax")); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseRenew", ChatColor.GREEN + "" + getExpireTime(area)) + ChatColor.YELLOW); + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenewMax")); + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenew", getExpireTime(area))); return; } Long get = leaseExpireTime.get(area); @@ -106,7 +94,7 @@ public void renewArea(String area, Player player) { leaseExpireTime.put(area, get); } else leaseExpireTime.put(area, daysToMs(add)); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("LeaseRenew", ChatColor.GREEN + "" + getExpireTime(area))); + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenew", getExpireTime(area))); } public int getRenewCost(ClaimedResidence res) { diff --git a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java index 7d9490326..52bed29de 100644 --- a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.protection; import org.bukkit.ChatColor; @@ -15,10 +10,6 @@ import java.util.Map.Entry; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class PermissionListManager { private final Map> lists; @@ -45,36 +36,36 @@ public void makeList(Player player, String listname) { if (perms == null) { perms = new FlagPermissions(); get.put(listname, perms); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ListCreate", listname)); + player.sendMessage(Residence.getLM().getMessage("General.ListCreate", listname)); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ListExists")); + player.sendMessage(Residence.getLM().getMessage("General.ListExists")); } } public void removeList(Player player, String listname) { Map get = lists.get(player.getName()); if (get == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidList")); + player.sendMessage(Residence.getLM().getMessage("Invalid.List")); return; } FlagPermissions list = get.get(listname); if (list == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidList")); + player.sendMessage(Residence.getLM().getMessage("Invalid.List")); return; } get.remove(listname); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ListRemoved")); + player.sendMessage(Residence.getLM().getMessage("General.ListRemoved")); } public void applyListToResidence(Player player, String listname, String areaname, boolean resadmin) { FlagPermissions list = this.getList(player.getName(), listname); if (list == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidList")); + player.sendMessage(Residence.getLM().getMessage("Invalid.List")); return; } ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); if (res == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } res.getPermissions().applyTemplate(player, list, resadmin); @@ -83,11 +74,11 @@ public void applyListToResidence(Player player, String listname, String areaname public void printList(Player player, String listname) { FlagPermissions list = this.getList(player.getName(), listname); if (list == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidList")); + player.sendMessage(Residence.getLM().getMessage("Invalid.List")); return; } player.sendMessage(ChatColor.LIGHT_PURPLE + "------Permission Template------"); - player.sendMessage(Residence.getLanguage().getPhrase("Name") + ": " + ChatColor.GREEN + listname); + player.sendMessage(Residence.getLM().getMessage("General.Name", listname)); list.printFlags(player); } @@ -129,7 +120,7 @@ public static PermissionListManager load(Map root) { public void printLists(Player player) { StringBuilder sbuild = new StringBuilder(); Map get = lists.get(player.getName()); - sbuild.append(ChatColor.YELLOW).append(Residence.getLanguage().getPhrase("Lists")).append(":").append(ChatColor.DARK_AQUA).append(" "); + sbuild.append(Residence.getLM().getMessage("General.Lists")); if (get != null) { for (Entry thislist : get.entrySet()) { sbuild.append(thislist.getKey()).append(" "); diff --git a/src/com/bekvon/bukkit/residence/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java similarity index 69% rename from src/com/bekvon/bukkit/residence/PlayerManager.java rename to src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 7799718b7..c16dda8fe 100644 --- a/src/com/bekvon/bukkit/residence/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -1,4 +1,4 @@ -package com.bekvon.bukkit.residence; +package com.bekvon.bukkit.residence.protection; import java.util.ArrayList; import java.util.Map.Entry; @@ -8,12 +8,13 @@ import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.containers.ResPlayer; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.ResidencePlayerInterface; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -public class PlayerManager { - private ConcurrentHashMap players = new ConcurrentHashMap(); +public class PlayerManager implements ResidencePlayerInterface { + private ConcurrentHashMap players = new ConcurrentHashMap(); private Residence plugin; public PlayerManager(Residence plugin) { @@ -21,9 +22,9 @@ public PlayerManager(Residence plugin) { } public void playerJoin(OfflinePlayer player) { - ResPlayer resPlayer = players.get(player.getName()); + ResidencePlayer resPlayer = players.get(player.getName()); if (resPlayer == null) { - resPlayer = new ResPlayer(player.getName()); + resPlayer = new ResidencePlayer(player.getName()); resPlayer.recountRes(); players.put(player.getName(), resPlayer); } else @@ -31,9 +32,9 @@ public void playerJoin(OfflinePlayer player) { return; } - public ResPlayer playerJoin(String player) { + public ResidencePlayer playerJoin(String player) { if (!players.containsKey(player)) { - ResPlayer resPlayer = new ResPlayer(player); + ResidencePlayer resPlayer = new ResidencePlayer(player); resPlayer.recountRes(); players.put(player, resPlayer); return resPlayer; @@ -57,7 +58,7 @@ public void run() { public ArrayList getResidenceList(String player) { ArrayList temp = new ArrayList(); playerJoin(player); - ResPlayer resPlayer = players.get(player); + ResidencePlayer resPlayer = players.get(player); if (resPlayer != null) { for (Entry one : resPlayer.getResList().entrySet()) { temp.add(one.getKey()); @@ -67,10 +68,10 @@ public ArrayList getResidenceList(String player) { return temp; } - public ArrayList getResidenceListString(String player, boolean showhidden) { + public ArrayList getResidenceList(String player, boolean showhidden) { ArrayList temp = new ArrayList(); playerJoin(player); - ResPlayer resPlayer = players.get(player); + ResidencePlayer resPlayer = players.get(player); if (resPlayer != null) { for (Entry one : resPlayer.getResList().entrySet()) { if (!showhidden) { @@ -80,8 +81,7 @@ public ArrayList getResidenceListString(String player, boolean showhidde continue; } - temp.add(Residence.getLanguage().getPhrase("ResidenceList", "|" + one.getKey() + "|" + Residence.getLanguage().getPhrase("World") + "|" + one - .getValue())); + temp.add(Residence.getLM().getMessage("Residence.List", "", one.getKey(), one.getValue())); } return temp; } @@ -89,7 +89,7 @@ public ArrayList getResidenceListString(String player, boolean showhidde } public PermissionGroup getGroup(String player) { - ResPlayer resPlayer = getResPlayer(player); + ResidencePlayer resPlayer = getResidencePlayer(player); if (resPlayer != null) { return resPlayer.getGroup(); } @@ -97,7 +97,7 @@ public PermissionGroup getGroup(String player) { } public int getMaxResidences(String player) { - ResPlayer resPlayer = getResPlayer(player); + ResidencePlayer resPlayer = getResidencePlayer(player); if (resPlayer != null) { return resPlayer.getMaxRes(); } @@ -105,7 +105,7 @@ public int getMaxResidences(String player) { } public int getMaxSubzones(String player) { - ResPlayer resPlayer = getResPlayer(player); + ResidencePlayer resPlayer = getResidencePlayer(player); if (resPlayer != null) { return resPlayer.getMaxSubzones(); } @@ -113,15 +113,15 @@ public int getMaxSubzones(String player) { } public int getMaxRents(String player) { - ResPlayer resPlayer = getResPlayer(player); + ResidencePlayer resPlayer = getResidencePlayer(player); if (resPlayer != null) { return resPlayer.getMaxRents(); } return -1; } - public ResPlayer getResPlayer(String player) { - ResPlayer resPlayer = null; + public ResidencePlayer getResidencePlayer(String player) { + ResidencePlayer resPlayer = null; if (players.containsKey(player)) resPlayer = players.get(player); else { @@ -131,7 +131,7 @@ public ResPlayer getResPlayer(String player) { } public void renameResidence(String player, String oldName, String newName) { - ResPlayer resPlayer = getResPlayer(player); + ResidencePlayer resPlayer = getResidencePlayer(player); if (resPlayer != null) { resPlayer.renameResidence(oldName, newName); } @@ -139,7 +139,7 @@ public void renameResidence(String player, String oldName, String newName) { } public void addResidence(String player, ClaimedResidence residence) { - ResPlayer resPlayer = getResPlayer(player); + ResidencePlayer resPlayer = getResidencePlayer(player); if (resPlayer != null) { resPlayer.addResidence(residence); } @@ -155,7 +155,7 @@ public void removeResFromPlayer(Player player, String residence) { } public void removeResFromPlayer(String player, String residence) { - ResPlayer resPlayer = players.get(player); + ResidencePlayer resPlayer = players.get(player); if (resPlayer != null) { resPlayer.removeResidence(residence); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1eee3cb4e..98d7109e0 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -18,8 +18,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.NewLanguage; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.ResidenceInterface; import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; @@ -27,13 +27,10 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.selection.AutoSelection; +import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.InformationPager; -/** - * - * @author Administrator - */ -public class ResidenceManager { +public class ResidenceManager implements ResidenceInterface { protected Map residences; protected Map>> chunkResidences; protected List shops = new ArrayList(); @@ -189,13 +186,13 @@ public boolean addResidence(Player player, String name, Location loc1, Location public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { if (!Residence.validName(name)) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); } return false; } if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + player.sendMessage(Residence.getLM().getMessage("Select.Points")); } return false; } @@ -203,13 +200,13 @@ public boolean addResidence(Player player, String owner, String name, Location l boolean createpermission = group.canCreateResidences() || (player == null ? true : player.hasPermission("residence.create")); if (!createpermission && !resadmin) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); } return false; } if (player != null) { if (!hasMaxZones(player.getName(), group.getMaxZones(player.getName())) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceTooMany")); + player.sendMessage(Residence.getLM().getMessage("Residence.TooMany")); return false; } } @@ -219,18 +216,10 @@ public boolean addResidence(Player player, String owner, String name, Location l newRes.setEnterMessage(group.getDefaultEnterMessage()); newRes.setLeaveMessage(group.getDefaultLeaveMessage()); - ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); - Residence.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) { - return false; - } - newArea = resevent.getPhysicalArea(); - name = resevent.getResidenceName(); - if (Residence.getConfigManager().isResCreateCaseSensitive()) { if (residences.containsKey(name)) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + name + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", name)); } return false; } @@ -238,7 +227,7 @@ public boolean addResidence(Player player, String owner, String name, Location l for (Entry one : residences.entrySet()) { if (one.getKey().equalsIgnoreCase(name)) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + one.getKey() + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", one.getKey())); } return false; } @@ -253,6 +242,11 @@ public boolean addResidence(Player player, String owner, String name, Location l } if (newRes.getAreaCount() != 0) { + ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + residences.put(name, newRes); calculateChunks(name); Residence.getLeaseManager().removeExpireTime(name); @@ -263,7 +257,7 @@ public boolean addResidence(Player player, String owner, String name, Location l Residence.getSelectionManager().NewMakeBorders(player, newArea.getHighLoc(), newArea.getLowLoc(), false); AutoSelection.getList().remove(player.getName().toLowerCase()); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceCreate", ChatColor.YELLOW + name + ChatColor.GREEN)); + player.sendMessage(Residence.getLM().getMessage("Residence.Create", name)); } if (Residence.getConfigManager().useLeases()) { if (player != null) { @@ -309,9 +303,9 @@ public void listResidences(final Player player, final String targetplayer, final Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { - ArrayList ownedResidences = Residence.getPlayerManager().getResidenceListString(targetplayer, hidden); + ArrayList ownedResidences = Residence.getPlayerManager().getResidenceList(targetplayer, hidden); ownedResidences.addAll(Residence.getRentManager().getRentedLands(targetplayer)); - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences") + " - " + targetplayer, ownedResidences, page); + InformationPager.printInfo(player, Residence.getLM().getMessage("General.Residences") + " - " + targetplayer, ownedResidences, page); return; } }); @@ -329,7 +323,7 @@ public void listAllResidences(Player player, int page, boolean showhidden, boole if (showhidden && !Residence.isResAdminOn(player)) { showhidden = false; } - InformationPager.printInfo(player, Residence.getLanguage().getPhrase("Residences"), this.getResidenceList(null, showhidden, showsubzones, true), page); + InformationPager.printInfo(player, Residence.getLM().getMessage("General.Residences"), this.getResidenceList(null, showhidden, showsubzones, true), page); } public String[] getResidenceList() { @@ -371,8 +365,7 @@ private void getResidenceList(String targetplayer, boolean showhidden, boolean s if ((showhidden) || (!showhidden && !hidden)) { if (targetplayer == null || res.getPermissions().getOwner().equals(targetplayer)) { if (formattedOutput) { - list.add(Residence.getLanguage().getPhrase("ResidenceList", parentzone + "|" + resname + "|" + Residence.getLanguage().getPhrase("World") + "|" + res - .getWorld())); + list.add(Residence.getLM().getMessage("Residence.List", parentzone, resname, res.getWorld())); } else { list.add(parentzone + resname); } @@ -406,7 +399,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { if (res != null) { if (player != null && !resadmin) { if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } } @@ -451,7 +444,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { } if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN)); + player.sendMessage(Residence.getLM().getMessage("Residence.Remove", name)); } } else { String[] split = name.split("\\."); @@ -483,7 +476,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { } } else { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); } } } @@ -515,27 +508,10 @@ private void removeAllByOwner(Player player, String owner, Map set = residences.values(); -// int count = 0; -// for (ClaimedResidence res : set) { -// if (res.getPermissions().getOwner().equalsIgnoreCase(player)) { -// count++; -// } -// } return Residence.getPlayerManager().getResidenceList(player).size(); } public boolean hasMaxZones(String player, int target) { -// Collection set = residences.values(); -// int count = 0; -// for (ClaimedResidence res : set) { -// if (res.getPermissions().getOwner().equalsIgnoreCase(player)) { -// count++; -// if (count >= target) -// return false; -// } -// } int count = getOwnedZoneCount(player); if (count >= target) return false; @@ -546,94 +522,94 @@ public boolean hasMaxZones(String player, int target) { public void printAreaInfo(String areaname, Player player) { ClaimedResidence res = this.getByName(areaname); if (res == null) { - Residence.sendMessage(player, "&c" + Residence.getLM().getMessage("InvalidResidence")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } - Residence.sendMessage(player, "&6**********************************************************"); + player.sendMessage(Residence.getLM().getMessage("General.Separator")); ResidencePermissions perms = res.getPermissions(); - NewLanguage lm = Residence.getLM(); + Language lm = Residence.getLM(); String aid = res.getAreaIDbyLoc(player.getLocation()); if (Residence.getConfigManager().enableEconomy()) { - String msg = "&e" + Residence.getLM().getMessage("Residence") + ": &2" + areaname + " "; + String msg = "&e" + Residence.getLM().getMessage("Residence.Line", areaname); if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { - msg += "&e" + lm.getMessage("Owner") + ": &c" + perms.getOwner() + "&e" - + " " + lm.getMessage("RentedBy") + ": &c" + Residence.getRentManager().getRentingPlayer(areaname); + msg += lm.getMessage("General.Owner", perms.getOwner()) + lm.getMessage("Residence.RentedBy", Residence.getRentManager().getRentingPlayer(areaname)); } else { - msg += "&e" + lm.getMessage("Owner") + ": &c" + perms.getOwner() + "&e"; + msg += lm.getMessage("General.Owner", perms.getOwner()); } - msg += "&e" + " " + lm.getMessage("Bank") + ": &6" + res.getBank().getStoredMoney(); + msg += lm.getMessage("Bank.Name", res.getBank().getStoredMoney()); - Residence.sendMessage(player, msg); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); } else { - Residence.sendMessage(player, "&e" + lm.getMessage("Residence") + ": &2" + areaname); + player.sendMessage(lm.getMessage("Residence.Line", areaname)); } - String msg = "&6" + lm.getMessage("World") + ": &c" + perms.getWorld(); + String msg = lm.getMessage("General.World", perms.getWorld()); if (aid != null) { msg += "&6 (&3"; CuboidArea area = res.getAreaByLoc(player.getLocation()); - msg += lm.getMessage("CoordsTop", area.getHighLoc().getBlockX() + "%" + area.getHighLoc().getBlockY() + "%" + area.getHighLoc() - .getBlockZ()); + msg += lm.getMessage("General.CoordsTop", area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); msg += "&6; &3"; - msg += lm.getMessage("CoordsBottom", area.getLowLoc().getBlockX() + "%" + area.getLowLoc().getBlockY() + "%" + area.getLowLoc() - .getBlockZ()); + msg += lm.getMessage("General.CoordsBottom", area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); msg += "&6)"; } - Residence.sendMessage(player, msg); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - Residence.sendMessage(player, "&6" + lm.getMessage("Flags") + ": &9" + perms.listFlags()); - Residence.sendMessage(player, "&6" + lm.getMessage("Your") + " " + lm.getMessage("Flags") + ": &2" + perms.listPlayerFlags(player.getName())); + player.sendMessage(lm.getMessage("General.Flags", perms.listFlags())); + player.sendMessage(lm.getMessage("General.YourFlags", perms.listPlayerFlags(player.getName()))); String groupFlags = perms.listGroupFlags(); if (groupFlags.length() > 0) - Residence.sendMessage(player, "&6" + lm.getMessage("Group") + " " + lm.getMessage("Flags") + ": &c" + groupFlags); + player.sendMessage(lm.getMessage("General.GroupFlags", groupFlags)); if (!Residence.getConfigManager().isShortInfoUse()) - Residence.sendMessage(player, "&6" + lm.getMessage("Others") + " " + lm.getMessage("Flags") + ": &c" + perms.listOtherPlayersFlags(player.getName())); + player.sendMessage(lm.getMessage("General.OthersFlags", perms.listOtherPlayersFlags(player.getName()))); else { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + perms.listOtherPlayersFlagsRaw("&e" + - lm.getMessage("Others") + " " + lm.getMessage("Flags") + ": ", player.getName())); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + perms.listOtherPlayersFlagsRaw(lm.getMessage("General.OthersFlags", + ""), + player + .getName())); } msg = ""; if (aid != null) { - msg += "&e" + lm.getMessage("CurrentArea") + ": &6" + aid + " "; + msg += lm.getMessage("General.CurrentArea", aid) + " "; } - msg += "&e" + lm.getMessage("Total") + " " + lm.getMessage("Size") + ": &6" + res.getTotalSize(); + msg += lm.getMessage("General.TotalSize", res.getTotalSize()); - Residence.sendMessage(player, msg); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); if (Residence.getEconomyManager() != null) { PermissionGroup group = Residence.getPermissionManager().getGroup(res.getOwner(), res.getWorld()); - Residence.sendMessage(player, "&e" + lm.getMessage("TotalWorth", String.valueOf((int) ((res.getTotalSize() * group.getCostPerBlock()) - * 100) / 100.0) + "%" + String.valueOf((int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0))); + player.sendMessage(lm.getMessage("General.TotalWorth", (int) ((res.getTotalSize() * group.getCostPerBlock()) + * 100) / 100.0, (int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0)); } if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { - Residence.sendMessage(player, "&e" + lm.getMessage("LeaseExpire") + ": &2" + Residence.getLeaseManager() - .getExpireTime(areaname)); + String time = Residence.getLeaseManager().getExpireTime(areaname); + if (time != null) + player.sendMessage(lm.getMessage("Economy.LeaseExpire", time)); } - Residence.sendMessage(player, "&6**********************************************************"); + player.sendMessage(Residence.getLM().getMessage("General.Separator")); } public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { ClaimedResidence reciever = this.getByName(targetArea); ClaimedResidence source = this.getByName(sourceArea); if (source == null || reciever == null) { - Residence.sendMessage(reqPlayer, "&c" + Residence.getLM().getMessage("InvalidResidence")); + reqPlayer.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } if (!resadmin) { if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { - Residence.sendMessage(reqPlayer, "&c" + Residence.getLM().getMessage("NoPermission")); + reqPlayer.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } } @@ -749,18 +725,18 @@ public boolean renameResidence(String oldName, String newName) { public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { if (!player.hasPermission("residence.rename")) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return false; } if (!Residence.validName(newName)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidNameCharacters")); + player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); return false; } ClaimedResidence res = this.getByName(oldName); if (res == null) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); } return false; } @@ -769,7 +745,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo if (Residence.getConfigManager().isResCreateCaseSensitive()) { if (residences.containsKey(newName)) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + newName + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", newName)); } return false; } @@ -777,8 +753,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo for (Entry one : residences.entrySet()) { if (one.getKey().equalsIgnoreCase(newName)) { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceAlreadyExists", ChatColor.YELLOW + one.getKey() - + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", one.getKey())); } return false; } @@ -800,8 +775,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo Residence.getRentManager().updateRentableName(oldName, newName); } if (player != null) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRename", ChatColor.YELLOW + oldName + ChatColor.GREEN + "|" - + ChatColor.YELLOW + newName + ChatColor.GREEN)); + player.sendMessage(Residence.getLM().getMessage("Residence.Rename", oldName, newName)); } return true; } else { @@ -811,7 +785,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo } } else { if (player != null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); } return false; } @@ -820,32 +794,32 @@ public boolean renameResidence(Player player, String oldName, String newName, bo public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { ClaimedResidence res = getByName(residence); if (res == null) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidResidence")); + reqPlayer.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + reqPlayer.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } Player giveplayer = Residence.getServ().getPlayer(targPlayer); if (giveplayer == null || !giveplayer.isOnline()) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NotOnline")); + reqPlayer.sendMessage(Residence.getLM().getMessage("General.NotOnline")); return; } CuboidArea[] areas = res.getAreaArray(); PermissionGroup g = Residence.getPermissionManager().getGroup(giveplayer); if (areas.length > g.getMaxPhysicalPerResidence() && !resadmin) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); + reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.GiveLimits")); return; } if (!hasMaxZones(giveplayer.getName(), g.getMaxZones(giveplayer.getName())) && !resadmin) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); + reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.GiveLimits")); return; } if (!resadmin) { for (CuboidArea area : areas) { if (!g.inLimits(area)) { - reqPlayer.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("ResidenceGiveLimits")); + reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.GiveLimits")); return; } } @@ -856,10 +830,8 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, res.getPermissions().setOwner(giveplayer.getName(), true); // Fix phrases here - reqPlayer.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceGive", ChatColor.YELLOW + residence + ChatColor.GREEN + "|" + ChatColor.YELLOW - + giveplayer.getName() + ChatColor.GREEN)); - giveplayer.sendMessage(Residence.getLanguage().getPhrase("ResidenceRecieve", ChatColor.GREEN + residence + ChatColor.YELLOW + "|" + ChatColor.GREEN + reqPlayer - .getName() + ChatColor.YELLOW)); + reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.Give", residence, giveplayer.getName())); + giveplayer.sendMessage(Residence.getLM().getMessage("Residence.Recieve", residence, reqPlayer.getName())); } public void removeAllFromWorld(CommandSender sender, String world) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index ceb4fd053..3a339e060 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -1,7 +1,5 @@ package com.bekvon.bukkit.residence.protection; -import org.bukkit.ChatColor; - import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagCheckEvent; @@ -18,10 +16,6 @@ import java.util.UUID; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class ResidencePermissions extends FlagPermissions { protected UUID ownerUUID; @@ -84,10 +78,10 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) if (player != null) { if (!resadmin) { if (!Residence.getConfigManager().isOfflineMode() && !player.getUniqueId().toString().equals(ownerUUID.toString())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } else if (!player.getName().equals(ownerLastKnownName)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } } @@ -100,7 +94,7 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) this.cuboidFlags.put(flag.getKey(), flag.getValue()); } else { if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Flag.SetDeny", flag.getKey())); } } for (Entry> plists : list.playerFlags.entrySet()) { @@ -110,7 +104,7 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) map.put(flag.getKey(), flag.getValue()); } else { if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Flag.SetDeny", flag.getKey())); } } } @@ -122,12 +116,12 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue()); } else { if (player != null) - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetDeny", ChatColor.YELLOW + flag.getKey() + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Flag.SetDeny", flag.getKey())); } } } if (player != null) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("PermissionsApply")); + player.sendMessage(Residence.getLM().getMessage("Residence.PermissionsApply")); } public boolean hasResidencePermission(Player player, boolean requireOwner) { @@ -153,20 +147,20 @@ public boolean hasResidencePermission(Player player, boolean requireOwner) { private boolean checkCanSetFlag(Player player, String flag, FlagState state, boolean globalflag, boolean resadmin) { if (!checkValidFlag(flag, globalflag)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidFlag")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Flag")); return false; } if (state == FlagState.INVALID) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidFlagState")); + player.sendMessage(Residence.getLM().getMessage("Invalid.FlagState")); return false; } if (!resadmin) { if (!this.hasResidencePermission(player, false)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return false; } if (!hasFlagAccess(this.getOwner(), flag)) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagSetFailed", flag)); + player.sendMessage(Residence.getLM().getMessage("Flag.SetFailed", flag)); return false; } } @@ -195,7 +189,7 @@ public boolean setPlayerFlag(Player player, String targetPlayer, String flag, St return false; if (super.setPlayerFlag(targetPlayer, flag, state)) { if (Show) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag + "|" + residence.getName() + "|" + flagstate)); + player.sendMessage(Residence.getLM().getMessage("Flag.Set", flag, residence.getName(), flagstate)); return true; } } @@ -214,11 +208,11 @@ public boolean setGroupFlag(Player player, String group, String flag, String fla if (fc.isCancelled()) return false; if (super.setGroupFlag(group, flag, state)) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag + "|" + residence.getName() + "|" + flagstate)); + player.sendMessage(Residence.getLM().getMessage("Flag.Set", flag, residence.getName(), flagstate)); return true; } } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidGroup")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Group")); return false; } } @@ -243,7 +237,7 @@ public boolean setFlag(Player player, String flag, String flagstate, boolean res if (!one.getName().equals(this.getOwner())) size++; } - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagChangeDeny", flag + "|" + size)); + player.sendMessage(Residence.getLM().getMessage("Flag.ChangeDeny", flag, size)); return false; } } @@ -255,7 +249,7 @@ public boolean setFlag(Player player, String flag, String flagstate, boolean res if (fc.isCancelled()) return false; if (super.setFlag(flag, state)) { - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flag + "|" + residence.getName() + "|" + flagstate)); + player.sendMessage(Residence.getLM().getMessage("Flag.Set", flag, residence.getName(), flagstate)); return true; } } @@ -270,7 +264,7 @@ public boolean removeAllPlayerFlags(Player player, String targetPlayer, boolean return false; } super.removeAllPlayerFlags(targetPlayer); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); + player.sendMessage(Residence.getLM().getMessage("Flag.Set")); return true; } return false; @@ -284,7 +278,7 @@ public boolean removeAllGroupFlags(Player player, String group, boolean resadmin return false; } super.removeAllGroupFlags(group); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet")); + player.sendMessage(Residence.getLM().getMessage("Flag.Set")); return true; } return false; @@ -320,9 +314,9 @@ public boolean setPlayerFlag(String player, String flag, FlagState state) { public void applyDefaultFlags(Player player, boolean resadmin) { if (this.hasResidencePermission(player, true) || resadmin) { this.applyDefaultFlags(); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("FlagsDefault")); + player.sendMessage(Residence.getLM().getMessage("Flag.Default")); } else - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("NoPermission")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); } public void applyDefaultFlags() { @@ -517,7 +511,7 @@ public boolean setFlagGroupOnPlayer(Player player, String target, String flaggro } } if (flagString.length() > 0) - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet", flagString + "|" + target + "|" + state)); + player.sendMessage(Residence.getLM().getMessage("Flag.Set", flagString, target, state)); return changed; } return false; diff --git a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java index f97ebba3d..54708dc32 100644 --- a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java +++ b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.protection; import com.bekvon.bukkit.residence.Residence; @@ -15,10 +10,6 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class WorldFlagManager { protected Map> groupperms; protected Map worldperms; diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index 1df4a5ef3..f87573bd3 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -17,10 +17,10 @@ public static void switchAutoSelection(Player player) { if (!list.containsKey(player.getName().toLowerCase())) { PermissionGroup group = Residence.getPermissionManager().getGroup(player.getName(), player.getLocation().getWorld().getName()); list.put(player.getName().toLowerCase(), new AutoSelector(group, System.currentTimeMillis())); - player.sendMessage(Residence.getLM().getMessage("Language.AutoSelection.Enabled")); + player.sendMessage(Residence.getLM().getMessage("Select.AutoEnabled")); } else { list.remove(player.getName().toLowerCase()); - player.sendMessage(Residence.getLM().getMessage("Language.AutoSelection.Disabled")); + player.sendMessage(Residence.getLM().getMessage("Select.AutoDisabled")); } } @@ -35,7 +35,7 @@ public static void UpdateSelection(Player player) { if (Curenttime > 270) { list.remove(player.getName().toLowerCase()); - player.sendMessage(Residence.getLM().getMessage("Language.AutoSelection.Disabled")); + player.sendMessage(Residence.getLM().getMessage("AutoSelection.Disabled")); return; } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 846aa3bd6..acd7c5eca 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.selection; import com.bekvon.bukkit.residence.Residence; @@ -23,10 +18,6 @@ import org.bukkit.Server; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class SelectionManager { protected Map playerLoc1; protected Map playerLoc2; @@ -114,12 +105,11 @@ public void showSelectionInfoInActionBar(Player player) { String pname = player.getName(); CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); - String Message = ChatColor.YELLOW + Residence.getLanguage().getPhrase("Selection.Total.Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getSize(); + String Message = Residence.getLM().getMessage("Select.TotalSize", cuboidArea.getSize()); PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (Residence.getConfigManager().enableEconomy()) - Message += " " + ChatColor.YELLOW + Residence.getLanguage().getPhrase("Land.Cost") + ":" + ChatColor.DARK_AQUA + " " + ((int) Math.ceil( - (double) cuboidArea.getSize() * group.getCostPerBlock())); + Message += " " + Residence.getLM().getMessage("General.LandCost", ((int) Math.ceil((double) cuboidArea.getSize() * group.getCostPerBlock()))); ActionBar.send(player, Message); @@ -128,18 +118,19 @@ public void showSelectionInfoInActionBar(Player player) { public void showSelectionInfo(Player player) { String pname = player.getName(); if (hasPlacedBoth(pname)) { + player.sendMessage(Residence.getLM().getMessage("General.Separator")); CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Selection.Total.Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getSize()); + player.sendMessage(Residence.getLM().getMessage("Select.TotalSize", cuboidArea.getSize())); PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (Residence.getConfigManager().enableEconomy()) - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Land.Cost") + ":" + ChatColor.DARK_AQUA + " " + ((int) Math.ceil( - (double) cuboidArea.getSize() * group.getCostPerBlock()))); - player.sendMessage(ChatColor.YELLOW + "X" + Residence.getLanguage().getPhrase("Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getXSize()); - player.sendMessage(ChatColor.YELLOW + "Y" + Residence.getLanguage().getPhrase("Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getYSize()); - player.sendMessage(ChatColor.YELLOW + "Z" + Residence.getLanguage().getPhrase("Size") + ":" + ChatColor.DARK_AQUA + " " + cuboidArea.getZSize()); + player.sendMessage(Residence.getLM().getMessage("General.LandCost", ((int) Math.ceil((double) cuboidArea.getSize() * group.getCostPerBlock())))); + player.sendMessage(ChatColor.YELLOW + "X" + Residence.getLM().getMessage("General.Size", cuboidArea.getXSize())); + player.sendMessage(ChatColor.YELLOW + "Y" + Residence.getLM().getMessage("General.Size", cuboidArea.getYSize())); + player.sendMessage(ChatColor.YELLOW + "Z" + Residence.getLM().getMessage("General.Size", cuboidArea.getZSize())); + player.sendMessage(Residence.getLM().getMessage("General.Separator")); NewMakeBorders(player, getPlayerLoc1(pname), getPlayerLoc2(pname), false); } else - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + player.sendMessage(Residence.getLM().getMessage("Select.Points")); } public static boolean showParticle(Player player, Location Current, boolean error) { @@ -426,7 +417,7 @@ public void vert(Player player, boolean resadmin) { this.sky(player, resadmin); this.bedrock(player, resadmin); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + player.sendMessage(Residence.getLM().getMessage("Select.Points")); } } @@ -475,9 +466,9 @@ public void sky(Player player, boolean resadmin) { } playerLoc2.get(player.getName()).setY(newy); } - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSky")); + player.sendMessage(Residence.getLM().getMessage("Select.Sky")); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + player.sendMessage(Residence.getLM().getMessage("Select.Points")); } } @@ -505,9 +496,9 @@ public void bedrock(Player player, boolean resadmin) { } playerLoc2.get(player.getName()).setY(newy); } - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionBedrock")); + player.sendMessage(Residence.getLM().getMessage("Select.Bedrock")); } else { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + player.sendMessage(Residence.getLM().getMessage("Select.Points")); } } @@ -526,16 +517,16 @@ public void selectChunk(Player player) { int ymax = player.getLocation().getWorld().getMaxHeight() - 1; playerLoc1.put(player.getName(), new Location(player.getWorld(), xcoord, ycoord, zcoord)); playerLoc2.put(player.getName(), new Location(player.getWorld(), xmax, ymax, zmax)); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); + player.sendMessage(Residence.getLM().getMessage("Select.Success")); } public boolean worldEdit(Player player) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldEditNotFound")); + player.sendMessage(Residence.getLM().getMessage("General.WorldEditNotFound")); return false; } public boolean worldEditUpdate(Player player) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldEditNotFound")); + player.sendMessage(Residence.getLM().getMessage("General.WorldEditNotFound")); return false; } @@ -545,18 +536,18 @@ public void selectBySize(Player player, int xsize, int ysize, int zsize) { Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize); placeLoc1(player, loc1, false); placeLoc2(player, loc2, true); - player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("SelectionSuccess")); + player.sendMessage(Residence.getLM().getMessage("Select.Success")); showSelectionInfo(player); } public void modify(Player player, boolean shift, double amount) { if (!hasPlacedBoth(player.getName())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + player.sendMessage(Residence.getLM().getMessage("Select.Points")); return; } Direction d = this.getDirection(player); if (d == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidDirection")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Direction")); } CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); switch (d) { @@ -564,7 +555,7 @@ public void modify(Player player, boolean shift, double amount) { double oldy = area.getLowLoc().getBlockY(); oldy = oldy - amount; if (oldy < MIN_HEIGHT) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooLow")); + player.sendMessage(Residence.getLM().getMessage("Select.TooLow")); oldy = MIN_HEIGHT; } area.getLowLoc().setY(oldy); @@ -572,9 +563,9 @@ public void modify(Player player, boolean shift, double amount) { double oldy2 = area.getHighLoc().getBlockY(); oldy2 = oldy2 - amount; area.getHighLoc().setY(oldy2); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.Down") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Shifting.Down", amount)); } else - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.Down") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Expanding.Down", amount)); break; case MINUSX: double oldx = area.getLowLoc().getBlockX(); @@ -584,9 +575,9 @@ public void modify(Player player, boolean shift, double amount) { double oldx2 = area.getHighLoc().getBlockX(); oldx2 = oldx2 - amount; area.getHighLoc().setX(oldx2); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.West") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Shifting.West", amount)); } else - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.West") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Expanding.West", amount)); break; case MINUSZ: double oldz = area.getLowLoc().getBlockZ(); @@ -596,9 +587,9 @@ public void modify(Player player, boolean shift, double amount) { double oldz2 = area.getHighLoc().getBlockZ(); oldz2 = oldz2 - amount; area.getHighLoc().setZ(oldz2); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.North") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Shifting.North", amount)); } else - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.North") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Expanding.North", amount)); break; case PLUSX: oldx = area.getHighLoc().getBlockX(); @@ -608,9 +599,9 @@ public void modify(Player player, boolean shift, double amount) { double oldx2 = area.getLowLoc().getBlockX(); oldx2 = oldx2 + amount; area.getLowLoc().setX(oldx2); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.East") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Shifting.East", amount)); } else - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.East") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Expanding.East", amount)); break; case PLUSZ: oldz = area.getHighLoc().getBlockZ(); @@ -620,15 +611,15 @@ public void modify(Player player, boolean shift, double amount) { double oldz2 = area.getLowLoc().getBlockZ(); oldz2 = oldz2 + amount; area.getLowLoc().setZ(oldz2); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.South") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Shifting.South", amount)); } else - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.South") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Expanding.South", amount)); break; case UP: oldy = area.getHighLoc().getBlockY(); oldy = oldy + amount; if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooHigh")); + player.sendMessage(Residence.getLM().getMessage("Select.TooHigh")); oldy = player.getLocation().getWorld().getMaxHeight() - 1; } area.getHighLoc().setY(oldy); @@ -636,9 +627,9 @@ public void modify(Player player, boolean shift, double amount) { double oldy2 = area.getLowLoc().getBlockY(); oldy2 = oldy2 + amount; area.getLowLoc().setY(oldy2); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Shifting.Up") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Shifting.Up", amount)); } else - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Expanding.Up") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Expanding.Up", amount)); break; default: break; @@ -648,12 +639,12 @@ public void modify(Player player, boolean shift, double amount) { public boolean contract(Player player, double amount, boolean resadmin) { if (!hasPlacedBoth(player.getName())) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectPoints")); + player.sendMessage(Residence.getLM().getMessage("Select.Points")); return false; } Direction d = this.getDirection(player); if (d == null) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidDirection")); + player.sendMessage(Residence.getLM().getMessage("Invalid.Direction")); } CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); switch (d) { @@ -661,45 +652,45 @@ public boolean contract(Player player, double amount, boolean resadmin) { double oldy = area.getHighLoc().getBlockY(); oldy = oldy - amount; if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooHigh")); + player.sendMessage(Residence.getLM().getMessage("Select.TooHigh")); oldy = player.getLocation().getWorld().getMaxHeight() - 1; } area.getHighLoc().setY(oldy); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.Down") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Contracting.Down", amount)); break; case MINUSX: double oldx = area.getHighLoc().getBlockX(); oldx = oldx - amount; area.getHighLoc().setX(oldx); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.West") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Contracting.West", amount)); break; case MINUSZ: double oldz = area.getHighLoc().getBlockZ(); oldz = oldz - amount; area.getHighLoc().setZ(oldz); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.North") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Contracting.North", amount)); break; case PLUSX: oldx = area.getLowLoc().getBlockX(); oldx = oldx + amount; area.getLowLoc().setX(oldx); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.East") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Contracting.East", amount)); break; case PLUSZ: oldz = area.getLowLoc().getBlockZ(); oldz = oldz + amount; area.getLowLoc().setZ(oldz); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.South") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Contracting.South", amount)); break; case UP: oldy = area.getLowLoc().getBlockY(); oldy = oldy + amount; if (oldy < MIN_HEIGHT) { - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("SelectTooLow")); + player.sendMessage(Residence.getLM().getMessage("Select.TooLow")); oldy = MIN_HEIGHT; } area.getLowLoc().setY(oldy); - player.sendMessage(ChatColor.YELLOW + Residence.getLanguage().getPhrase("Contracting.Up") + " (" + amount + ")"); + player.sendMessage(Residence.getLM().getMessage("Contracting.Up", amount)); break; default: break; diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 29eb62017..397f68d5d 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -1,7 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.bekvon.bukkit.residence.selection; import com.bekvon.bukkit.residence.Residence; @@ -14,10 +10,6 @@ import org.bukkit.Server; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class WorldEditSelectionManager extends SelectionManager { public WorldEditSelectionManager(Server serv, Residence plugin) { @@ -28,7 +20,7 @@ public WorldEditSelectionManager(Server serv, Residence plugin) { public boolean worldEdit(Player player) { WorldEditPlugin wep = (WorldEditPlugin) this.server.getPluginManager().getPlugin("WorldEdit"); Selection sel = wep.getSelection(player); - + if (sel != null) { Location pos1 = sel.getMinimumPoint(); Location pos2 = sel.getMaximumPoint(); diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index 43fe08f25..106ee52fb 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -29,7 +29,9 @@ public class ShopListener implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onSignInteract(PlayerInteractEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; @@ -69,9 +71,9 @@ public void onSignInteract(PlayerInteractEvent event) { if (Found != null) { Residence.getShopSignUtilManager().GetAllBoards().remove(Found); Residence.getShopSignUtilManager().saveSigns(); - event.getPlayer().sendMessage(Residence.getLM().getMessage("Language.Shop.DeletedBoard")); + event.getPlayer().sendMessage(Residence.getLM().getMessage("Shop.DeletedBoard")); } else { - event.getPlayer().sendMessage(Residence.getLM().getMessage("Language.Shop.IncorrectBoard")); + event.getPlayer().sendMessage(Residence.getLM().getMessage("Shop.IncorrectBoard")); } Delete.remove(player.getName()); return; @@ -90,6 +92,7 @@ public void onSignInteract(PlayerInteractEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeShop(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) return; diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index c66e73565..c49fde41d 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -342,15 +342,15 @@ public boolean BoardUpdate() { vote = getAverageVote(ShopNames.get(Start - 1)); if (Residence.getConfigManager().isOnlyLike()) { - votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Language.Shop.ListLiked", getLikes(ShopNames.get(Start - 1))); + votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Shop.ListLiked", getLikes(ShopNames.get(Start - 1))); } else - votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Language.Shop.SignLines.4", vote.getVote() + "%" + vote.getAmount()); + votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Shop.SignLines.4", vote.getVote() + "%" + vote.getAmount()); } if (Shop != null) { - sign.setLine(0, Residence.getLM().getMessage("Language.Shop.SignLines.1", String.valueOf(Start))); - sign.setLine(1, Residence.getLM().getMessage("Language.Shop.SignLines.2", res.getName())); - sign.setLine(2, Residence.getLM().getMessage("Language.Shop.SignLines.3", res.getOwner())); + sign.setLine(0, Residence.getLM().getMessage("Shop.SignLines.1", String.valueOf(Start))); + sign.setLine(1, Residence.getLM().getMessage("Shop.SignLines.2", res.getName())); + sign.setLine(2, Residence.getLM().getMessage("Shop.SignLines.3", res.getOwner())); sign.setLine(3, votestat); board.addSignLoc(res.getName(), sign.getLocation()); } else { diff --git a/src/com/bekvon/bukkit/residence/signsStuff/.gitignore b/src/com/bekvon/bukkit/residence/signsStuff/.gitignore new file mode 100644 index 000000000..f37618240 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/signsStuff/.gitignore @@ -0,0 +1,7 @@ +/TopSignStuff.class +/Sign.class +/SignInfo.class +/SignUtil.class +/SignUtil$1.class +/SignUtil$2.class +/SignUtil$3.class diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 019b4938e..f6c89923c 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -66,7 +66,7 @@ public void run() { ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); Signs newTemp = new Signs(); newTemp.setCategory(Integer.valueOf(category)); - newTemp.setResidence(NameSection.getString("Residence")); + newTemp.setResidence(NameSection.getString("Residence.Line")); newTemp.setWorld(NameSection.getString("World")); newTemp.setX(NameSection.getDouble("X")); newTemp.setY(NameSection.getDouble("Y")); @@ -136,6 +136,14 @@ public Signs getSignFromLoc(Location loc) { return null; } + public void CheckSign(final ClaimedResidence res, int time) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + public void run() { + CheckSign(res); + } + }, 5L); + } + public void CheckSign(ClaimedResidence res) { List signList = new ArrayList(); signList.addAll(this.getSigns().GetAllSigns()); @@ -188,7 +196,7 @@ public boolean SignUpdate(Signs Sign) { if (rentedPlace != null) time = rentedPlace.endTime; - SimpleDateFormat formatter = new SimpleDateFormat(Residence.getLanguage().getPhrase("SignDateFormat")); + SimpleDateFormat formatter = new SimpleDateFormat(Residence.getLM().getMessage("Sign.DateFormat")); formatter.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(time); @@ -199,33 +207,33 @@ public boolean SignUpdate(Signs Sign) { endDate = "Unknown"; if (Residence.getRentManager().getRentedAutoRepeats(landName)) - endDate = ChatColor.translateAlternateColorCodes('&', Residence.getLanguage().getPhrase("SignRentedAutorenewTrue") + endDate); + endDate = Residence.getLM().getMessage("Sign.RentedAutorenewTrue", endDate); else - endDate = ChatColor.translateAlternateColorCodes('&', Residence.getLanguage().getPhrase("SignRentedAutorenewFalse") + endDate); + endDate = Residence.getLM().getMessage("Sign.RentedAutorenewFalse", endDate); - String TopLine = rented ? endDate : Residence.getLanguage().getPhrase("SignForRentTopLine"); + String TopLine = rented ? endDate : Residence.getLM().getMessage("Sign.ForRentTopLine"); sign.setLine(0, TopLine); - String infoLine = Residence.getLanguage().getPhrase("SignForRentPriceLine", Residence.getRentManager().getCostOfRent(landName) + "|" + Residence - .getRentManager().getRentDays(landName) + "|" + Residence.getRentManager().getRentableRepeatable(landName)); + String infoLine = Residence.getLM().getMessage("Sign.ForRentPriceLine", Residence.getRentManager().getCostOfRent(landName), Residence + .getRentManager().getRentDays(landName), Residence.getRentManager().getRentableRepeatable(landName)); sign.setLine(1, infoLine); String shortName = fixResName(landName); - sign.setLine(2, rented ? Residence.getLM().getDefaultMessage("Language.SignRentedResName").replace("%1", shortName) - : Residence.getLM().getDefaultMessage("Language.SignRentedResName").replace("%1", shortName)); - sign.setLine(3, rented ? Residence.getLanguage().getPhrase("SignRentedBottomLine", Residence.getRentManager().getRentingPlayer(landName)) - : Residence.getLanguage().getPhrase("SignForRentBottomLine")); + sign.setLine(2, rented ? Residence.getLM().getMessage("Sign.RentedResName", shortName) + : Residence.getLM().getMessage("Sign.RentedResName", shortName)); + sign.setLine(3, rented ? Residence.getLM().getMessage("Sign.RentedBottomLine", Residence.getRentManager().getRentingPlayer(landName)) + : Residence.getLM().getMessage("Sign.ForRentBottomLine")); sign.update(); } if (ForSale) { String shortName = fixResName(landName); - sign.setLine(0, Residence.getLanguage().getPhrase("SignForSaleTopLine")); - String infoLine = Residence.getLanguage().getPhrase("SignForSalePriceLine", String.valueOf(Residence.getTransactionManager().getSaleAmount(landName))); + sign.setLine(0, Residence.getLM().getMessage("Sign.ForSaleTopLine")); + String infoLine = Residence.getLM().getMessage("Sign.ForSalePriceLine", Residence.getTransactionManager().getSaleAmount(landName)); sign.setLine(1, infoLine); - sign.setLine(2, Residence.getLM().getDefaultMessage("Language.SignRentedResName").replace("%1", shortName)); - sign.setLine(3, Residence.getLanguage().getPhrase("SignForSaleBottomLine")); + sign.setLine(2, Residence.getLM().getMessage("Sign.RentedResName", shortName)); + sign.setLine(3, Residence.getLM().getMessage("Sign.ForSaleBottomLine")); sign.update(); } diff --git a/src/com/bekvon/bukkit/residence/spout/ResidencePopup.java b/src/com/bekvon/bukkit/residence/spout/ResidencePopup.java index d2744743f..dd0a7445b 100644 --- a/src/com/bekvon/bukkit/residence/spout/ResidencePopup.java +++ b/src/com/bekvon/bukkit/residence/spout/ResidencePopup.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.spout; import java.util.ArrayList; @@ -13,111 +8,96 @@ import org.getspout.spoutapi.gui.Screen; import org.getspout.spoutapi.gui.Widget; -/** - * - * @author Administrator - */ public class ResidencePopup extends GenericPopup { int xspacing; int yspacing; int xsize; int ysize; HashMap wigs = new HashMap(); - HashMap metaData = new HashMap(); + HashMap metaData = new HashMap(); public String type; - public enum PopupType{ - GENERIC,FLAG_GUI,INFO_GUI + public enum PopupType { + GENERIC, FLAG_GUI, INFO_GUI } - public ResidencePopup(PopupType ptype) - { - xspacing = 15; - yspacing = 5; - xsize = 70; - ysize = 15; - type = ptype.toString(); + public ResidencePopup(PopupType ptype) { + xspacing = 15; + yspacing = 5; + xsize = 70; + ysize = 15; + type = ptype.toString(); } - public HashMap getMetaData() - { - return metaData; + public HashMap getMetaData() { + return metaData; } - public void setPopupType(String t) - { - type = t; + public void setPopupType(String t) { + type = t; } - public String getPopupType() - { - return type; + + public String getPopupType() { + return type; } public Screen gridAttachWidget(Plugin plugin, Widget widget, int column, int row) { - return this.gridAttachWidget(null, plugin, widget, column, row); + return this.gridAttachWidget(null, plugin, widget, column, row); } public Screen gridAttachWidget(String wID, Plugin plugin, Widget widget, int column, int row) { - widget.setX(xspacing + (column*xspacing) + (column*xsize)); - widget.setY(yspacing + (row*yspacing) + (row*ysize)); - widget.setWidth(xsize); - widget.setHeight(ysize); - if(wID!=null) - wigs.put(wID,widget); - this.setDirty(true); - return super.attachWidget(plugin, widget); + widget.setX(xspacing + (column * xspacing) + (column * xsize)); + widget.setY(yspacing + (row * yspacing) + (row * ysize)); + widget.setWidth(xsize); + widget.setHeight(ysize); + if (wID != null) + wigs.put(wID, widget); + this.setDirty(true); + return super.attachWidget(plugin, widget); } - public Widget getWidget(String wID) - { - return wigs.get(wID); + public Widget getWidget(String wID) { + return wigs.get(wID); } - public ArrayList getWidgetIDs() - { - ArrayList ids = new ArrayList(); - for(String id : wigs.keySet()) - { - ids.add(id); - } - return ids; + public ArrayList getWidgetIDs() { + ArrayList ids = new ArrayList(); + for (String id : wigs.keySet()) { + ids.add(id); + } + return ids; } @Override public Screen removeWidget(Widget widget) { - wigs.values().remove(widget); - return super.removeWidget(widget); + wigs.values().remove(widget); + return super.removeWidget(widget); } @Override public Screen removeWidgets(Plugin p) { - Iterator it = wigs.values().iterator(); - while(it.hasNext()) - { - Widget next = it.next(); - if(next.getPlugin() == p) - it.remove(); - } - return super.removeWidgets(p); + Iterator it = wigs.values().iterator(); + while (it.hasNext()) { + Widget next = it.next(); + if (next.getPlugin() == p) + it.remove(); + } + return super.removeWidgets(p); } - public void setGridXSpacing(int xspace) - { - xspacing = xspace; + public void setGridXSpacing(int xspace) { + xspacing = xspace; } - public void setGridYSpacing(int yspace) - { - yspacing = yspace; + public void setGridYSpacing(int yspace) { + yspacing = yspace; } - public void setGridXSize(int xs) - { - xsize = xs; + public void setGridXSize(int xs) { + xsize = xs; } - public void setGridYSize(int ys) - { - ysize = ys; + public void setGridYSize(int ys) { + ysize = ys; } } diff --git a/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java b/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java index 20b10205c..29d08299e 100644 --- a/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java +++ b/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java @@ -4,6 +4,7 @@ */ package com.bekvon.bukkit.residence.spout; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.spout.ResidencePopup.PopupType; @@ -16,90 +17,85 @@ import org.getspout.spoutapi.gui.Widget; import org.getspout.spoutapi.player.SpoutPlayer; -/** - * - * @author Administrator - */ public class ResidenceSpout { protected static HashMap screens = new HashMap(); + Residence plugin; - public ResidenceSpout() - { - + public ResidenceSpout(Residence plug) { + this.plugin = plug; } - public static void showResidenceFlagGUI(SpoutPlayer p, Residence plug, String resname, boolean resadmin) - { - ClaimedResidence res = Residence.getResidenceManager().getByName(resname); - if (res.getPermissions().hasResidencePermission(p, false)) { - - Color fieldcolor = new Color(0F,0F,0.3F,1F); - Color textPrimaryColor = new Color(1F,1F,1F,1F); - Color textSecondaryColor = new Color(1F,1F,0,1F); - Color hoverColor = new Color(1F,0,0,1F); - - ResidencePopup popup = new ResidencePopup(PopupType.FLAG_GUI); - - popup.getMetaData().put("admin", resadmin); - - popup.gridAttachWidget(plug, new GenericLabel("Admin: ").setTextColor(textPrimaryColor), 3, 1); - popup.gridAttachWidget(plug, new GenericLabel(Boolean.toString(resadmin)).setTextColor(textSecondaryColor), 4, 1); - popup.gridAttachWidget(plug, new GenericLabel("Residence: ").setTextColor(textPrimaryColor), 0, 0); - popup.gridAttachWidget(plug, new GenericLabel("Flag: ").setTextColor(textPrimaryColor), 0, 1); - popup.gridAttachWidget(plug, new GenericLabel("Player: ").setTextColor(textPrimaryColor), 0, 2); - popup.gridAttachWidget(plug, new GenericLabel("Group: ").setTextColor(textPrimaryColor), 0, 3); - popup.gridAttachWidget("ResidenceName",plug, new GenericLabel(resname).setTextColor(textSecondaryColor), 1, 0); - popup.gridAttachWidget(plug, new GenericLabel("Owner: ").setTextColor(textPrimaryColor), 0, 4); - popup.gridAttachWidget(plug, new GenericLabel("World: ").setTextColor(textPrimaryColor), 0, 5); - popup.gridAttachWidget(plug, new GenericLabel(res.getOwner()).setTextColor(textSecondaryColor), 1, 4); - popup.gridAttachWidget(plug, new GenericLabel(res.getWorld()).setTextColor(textSecondaryColor), 1, 5); - - GenericTextField flag = new GenericTextField(); - flag.setTooltip("The name of the flag..."); - flag.setColor(textSecondaryColor); - flag.setFieldColor(fieldcolor); - popup.gridAttachWidget("FlagName", plug, flag, 1, 1); - - GenericTextField playername = new GenericTextField(); - playername.setTooltip("The name of the player..."); - playername.setColor(textSecondaryColor); - playername.setFieldColor(fieldcolor); - popup.gridAttachWidget("PlayerName",plug, playername,1,2); - - GenericTextField groupname = new GenericTextField(); - groupname.setTooltip("The name of the group..."); - groupname.setColor(textSecondaryColor); - groupname.setFieldColor(fieldcolor); - popup.gridAttachWidget("GroupName",plug, groupname,1,3); - - GenericButton truebutton = new GenericButton("SetTrue"); - truebutton.setTooltip("Set the flag to true."); - truebutton.setColor(textSecondaryColor); - truebutton.setHoverColor(hoverColor); - popup.gridAttachWidget("TrueButton",plug, truebutton,2,1); - - GenericButton falsebutton = new GenericButton("SetFalse"); - falsebutton.setTooltip("Set the flag to false."); - falsebutton.setColor(textSecondaryColor); - falsebutton.setHoverColor(hoverColor); - popup.gridAttachWidget("FalseButton",plug, falsebutton,2,2); - - GenericButton removebutton = new GenericButton("Remove"); - removebutton.setTooltip("Remove the flag."); - removebutton.setColor(textSecondaryColor); - removebutton.setHoverColor(hoverColor); - popup.gridAttachWidget("RemoveButton",plug, removebutton,2,3); - - GenericButton removeallbutton = new GenericButton("RemoveAll"); - removeallbutton.setTooltip("Remove all flags from the player or group..."); - removeallbutton.setColor(textSecondaryColor); - removeallbutton.setHoverColor(hoverColor); - popup.gridAttachWidget("RemoveAllButton",plug, removeallbutton,3,3); - - screens.put(p, popup); - p.getMainScreen().attachPopupScreen(popup); - } else { - p.sendMessage(Residence.getLanguage().getPhrase("NoPermission")); - } + public void showResidenceFlagGUI(SpoutPlayer p, String resname, boolean resadmin) { + ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + if (res.getPermissions().hasResidencePermission(p, false)) { + + Color fieldcolor = new Color(0F, 0F, 0.3F, 1F); + Color textPrimaryColor = new Color(1F, 1F, 1F, 1F); + Color textSecondaryColor = new Color(1F, 1F, 0, 1F); + Color hoverColor = new Color(1F, 0, 0, 1F); + + ResidencePopup popup = new ResidencePopup(PopupType.FLAG_GUI); + + popup.getMetaData().put("admin", resadmin); + + popup.gridAttachWidget(plugin, new GenericLabel("Admin: ").setTextColor(textPrimaryColor), 3, 1); + popup.gridAttachWidget(plugin, new GenericLabel(Boolean.toString(resadmin)).setTextColor(textSecondaryColor), 4, 1); + popup.gridAttachWidget(plugin, new GenericLabel("Residence: ").setTextColor(textPrimaryColor), 0, 0); + popup.gridAttachWidget(plugin, new GenericLabel("Flag: ").setTextColor(textPrimaryColor), 0, 1); + popup.gridAttachWidget(plugin, new GenericLabel("Player: ").setTextColor(textPrimaryColor), 0, 2); + popup.gridAttachWidget(plugin, new GenericLabel("Group: ").setTextColor(textPrimaryColor), 0, 3); + popup.gridAttachWidget("ResidenceName", plugin, new GenericLabel(resname).setTextColor(textSecondaryColor), 1, 0); + popup.gridAttachWidget(plugin, new GenericLabel("Owner: ").setTextColor(textPrimaryColor), 0, 4); + popup.gridAttachWidget(plugin, new GenericLabel("World: ").setTextColor(textPrimaryColor), 0, 5); + popup.gridAttachWidget(plugin, new GenericLabel(res.getOwner()).setTextColor(textSecondaryColor), 1, 4); + popup.gridAttachWidget(plugin, new GenericLabel(res.getWorld()).setTextColor(textSecondaryColor), 1, 5); + + GenericTextField flag = new GenericTextField(); + flag.setTooltip("The name of the flag..."); + flag.setColor(textSecondaryColor); + flag.setFieldColor(fieldcolor); + popup.gridAttachWidget("FlagName", plugin, flag, 1, 1); + + GenericTextField playername = new GenericTextField(); + playername.setTooltip("The name of the player..."); + playername.setColor(textSecondaryColor); + playername.setFieldColor(fieldcolor); + popup.gridAttachWidget("PlayerName", plugin, playername, 1, 2); + + GenericTextField groupname = new GenericTextField(); + groupname.setTooltip("The name of the group..."); + groupname.setColor(textSecondaryColor); + groupname.setFieldColor(fieldcolor); + popup.gridAttachWidget("GroupName", plugin, groupname, 1, 3); + + GenericButton truebutton = new GenericButton("SetTrue"); + truebutton.setTooltip("Set the flag to true."); + truebutton.setColor(textSecondaryColor); + truebutton.setHoverColor(hoverColor); + popup.gridAttachWidget("TrueButton", plugin, truebutton, 2, 1); + + GenericButton falsebutton = new GenericButton("SetFalse"); + falsebutton.setTooltip("Set the flag to false."); + falsebutton.setColor(textSecondaryColor); + falsebutton.setHoverColor(hoverColor); + popup.gridAttachWidget("FalseButton", plugin, falsebutton, 2, 2); + + GenericButton removebutton = new GenericButton("Remove"); + removebutton.setTooltip("Remove the flag."); + removebutton.setColor(textSecondaryColor); + removebutton.setHoverColor(hoverColor); + popup.gridAttachWidget("RemoveButton", plugin, removebutton, 2, 3); + + GenericButton removeallbutton = new GenericButton("RemoveAll"); + removeallbutton.setTooltip("Remove all flags from the player or group..."); + removeallbutton.setColor(textSecondaryColor); + removeallbutton.setHoverColor(hoverColor); + popup.gridAttachWidget("RemoveAllButton", plugin, removeallbutton, 3, 3); + + screens.put(p, popup); + p.getMainScreen().attachPopupScreen(popup); + } else { + p.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + } } } diff --git a/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java b/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java index 9586ba157..32615cf6e 100644 --- a/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java +++ b/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java @@ -1,7 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.bekvon.bukkit.residence.spout; @@ -18,66 +14,62 @@ import org.getspout.spoutapi.gui.GenericLabel; import org.getspout.spoutapi.gui.GenericPopup; import org.getspout.spoutapi.gui.GenericTextField; -/** - * - * @author Administrator - */ + public class ResidenceSpoutListener implements Listener { - protected HashMap popups; + protected HashMap popups; @EventHandler(priority = EventPriority.NORMAL) public void onButtonClick(ButtonClickEvent event) { - Player p = event.getPlayer(); - if (event.getScreen() instanceof ResidencePopup) { - ResidencePopup screen = (ResidencePopup) event.getScreen(); - PopupType type = PopupType.valueOf(screen.getPopupType()); - if (type == PopupType.FLAG_GUI) { - ResidencePopup popup = (ResidencePopup) screen; - String flagval = null; - String flag = null; - String player = null; - ClaimedResidence res = null; - String group = null; - boolean resadmin = (Boolean)popup.getMetaData().get("admin"); - Button button = event.getButton(); - if (button.getText().equalsIgnoreCase("Close")) { - event.getPlayer().getMainScreen().removeWidget(screen); - return; - } else if (button.getText().equalsIgnoreCase("RemoveAll")) { - flagval = "removeall"; - } else if (button.getText().equalsIgnoreCase("SetTrue")) { - flagval = "true"; - } else if (button.getText().equalsIgnoreCase("SetFalse")) { - flagval = "false"; - } else if (button.getText().equalsIgnoreCase("Remove")) { - flagval = "remove"; - } - player = ((GenericTextField) popup.getWidget("PlayerName")).getText(); - group = ((GenericTextField)popup.getWidget("GroupName")).getText(); - flag = ((GenericTextField) popup.getWidget("FlagName")).getText(); - res = Residence.getResidenceManager().getByName(((GenericLabel) popup.getWidget("ResidenceName")).getText()); - if(res==null || flagval == null || flagval.equalsIgnoreCase("") || ((flag == null || flag.equalsIgnoreCase("")) && !flagval.equalsIgnoreCase("removeall"))) - return; - if((player==null || player.equalsIgnoreCase("")) && (group == null || group.equalsIgnoreCase(""))) - { - res.getPermissions().setFlag(p, flag, flagval, resadmin); - } - else if(group!=null && !group.equalsIgnoreCase("")) { - if(flagval.equalsIgnoreCase("removeall")) - res.getPermissions().removeAllGroupFlags(p, group, resadmin); - else - res.getPermissions().setGroupFlag(p, group, flag, flagval, resadmin); - } - else if(player!=null && !player.equalsIgnoreCase("")) - { - if(flagval.equalsIgnoreCase("removeall")) - res.getPermissions().removeAllPlayerFlags(p, player, resadmin); - else - res.getPermissions().setPlayerFlag(p, player, flag, flagval, resadmin, true); - } - } - } + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player p = event.getPlayer(); + if (event.getScreen() instanceof ResidencePopup) { + ResidencePopup screen = (ResidencePopup) event.getScreen(); + PopupType type = PopupType.valueOf(screen.getPopupType()); + if (type == PopupType.FLAG_GUI) { + ResidencePopup popup = (ResidencePopup) screen; + String flagval = null; + String flag = null; + String player = null; + ClaimedResidence res = null; + String group = null; + boolean resadmin = (Boolean) popup.getMetaData().get("admin"); + Button button = event.getButton(); + if (button.getText().equalsIgnoreCase("Close")) { + event.getPlayer().getMainScreen().removeWidget(screen); + return; + } else if (button.getText().equalsIgnoreCase("RemoveAll")) { + flagval = "removeall"; + } else if (button.getText().equalsIgnoreCase("SetTrue")) { + flagval = "true"; + } else if (button.getText().equalsIgnoreCase("SetFalse")) { + flagval = "false"; + } else if (button.getText().equalsIgnoreCase("Remove")) { + flagval = "remove"; + } + player = ((GenericTextField) popup.getWidget("PlayerName")).getText(); + group = ((GenericTextField) popup.getWidget("GroupName")).getText(); + flag = ((GenericTextField) popup.getWidget("FlagName")).getText(); + res = Residence.getResidenceManager().getByName(((GenericLabel) popup.getWidget("ResidenceName")).getText()); + if (res == null || flagval == null || flagval.equalsIgnoreCase("") || ((flag == null || flag.equalsIgnoreCase("")) && !flagval.equalsIgnoreCase( + "removeall"))) + return; + if ((player == null || player.equalsIgnoreCase("")) && (group == null || group.equalsIgnoreCase(""))) { + res.getPermissions().setFlag(p, flag, flagval, resadmin); + } else if (group != null && !group.equalsIgnoreCase("")) { + if (flagval.equalsIgnoreCase("removeall")) + res.getPermissions().removeAllGroupFlags(p, group, resadmin); + else + res.getPermissions().setGroupFlag(p, group, flag, flagval, resadmin); + } else if (player != null && !player.equalsIgnoreCase("")) { + if (flagval.equalsIgnoreCase("removeall")) + res.getPermissions().removeAllPlayerFlags(p, player, resadmin); + else + res.getPermissions().setPlayerFlag(p, player, flag, flagval, resadmin, true); + } + } + } } } - diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index b732ffb8e..cc5603399 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -1,91 +1,121 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.text; -import java.util.HashMap; -import java.util.Map; +import java.util.Arrays; +import java.util.List; import java.util.Set; -import org.bukkit.configuration.file.FileConfiguration; + import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.plugin.java.JavaPlugin; -/** - * - * @author Administrator - */ -public class Language { - public Map text; +import com.bekvon.bukkit.residence.LocaleManager; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.utils.YmlMaker; - public Language() { - text = new HashMap(); - } +public class Language { + public FileConfiguration enlocale; + public FileConfiguration customlocale; + private Residence plugin; - public void setText(String key, String intext) { - text.put(key, intext); + public Language(Residence plugin) { + this.plugin = plugin; } - private String getText(String key) { - String t = text.get(key); - if (t == null) { - t = ""; - } - return t; + /** + * Reloads the config + */ + public void LanguageReload() { + customlocale = new YmlMaker((JavaPlugin) plugin, "Language/" + Residence.getConfigManager().getLanguage() + ".yml").getConfig(); + enlocale = new YmlMaker((JavaPlugin) plugin, "Language/English.yml").getConfig(); + if (customlocale == null) + customlocale = enlocale; } - public String getPhrase(String key) { - String[] split = key.split("\\."); - return getPhrase(split); + /** + * Get the message with the correct key + * + * @param key + * - the key of the message + * @return the message + */ + public String getMessage(String key) { + return getMessage(key, ""); } - public String getPhraseList(String key) { - String tx = text.get(key.replace(",", "\n")); - return tx; - } + /** + * Get the message with the correct key + * + * @param key + * - the path of the message + * @param variables + * - the variables separated with % + * @return the message + */ + + public String getMessage(String key, Object... variables) { + if (!key.contains("Language.") && !key.contains("CommandHelp.")) + key = "Language." + key; + String missing = "Missing locale for " + key; + String message = ""; + if (customlocale == null || !customlocale.contains(key)) + message = enlocale.contains(key) == true ? enlocale.getString(key) : missing; + message = customlocale.contains(key) == true ? customlocale.getString(key) : missing; - public String getPhrase(String[] keys) { - return this.getPhrase(keys, (String[]) null); + for (int i = 1; i <= variables.length; i++) { + message = message.replace("%" + i, String.valueOf(variables[i - 1])); + } + return ChatColor.translateAlternateColorCodes('&', message); } - public String getPhrase(String key, String words) { - return this.getPhrase(key.split("\\."), words); + /** + * Get the message with the correct key + * + * @param key + * - the key of the message + * @return the message + */ + public String getDefaultMessage(String key) { + String missing = "Missing locale for " + key; + return enlocale.contains(key) == true ? ChatColor.translateAlternateColorCodes('&', enlocale.getString(key)) : missing; } - public String getPhrase(String[] keys, String words) { - if (words == null) { - return this.getPhrase(keys, (String[]) null); - } else { - return this.getPhrase(keys, words.split("\\|")); - } + /** + * Get the message with the correct key + * + * @param key + * - the key of the message + * @return the message + */ + public List getMessageList(String key) { + String missing = "Missing locale for " + key; + if (customlocale.isList(key)) + return LocaleManager.ColorsArray(customlocale.getStringList(key), true); + return enlocale.getStringList(key).size() > 0 ? LocaleManager.ColorsArray(enlocale.getStringList(key), true) : Arrays.asList(missing); } - public String getPhrase(String[] keys, String[] words) { - String sentence = ""; - for (String key : keys) { - if (sentence.length() == 0) { - sentence = this.getText(key); - } else { - sentence = sentence + " " + this.getText(key); - } - } - if (words != null) { - for (int i = 0; i < words.length; i++) { - sentence = sentence.replace("%" + (i + 1), words[i]); - } - } - - sentence = ChatColor.translateAlternateColorCodes('&', sentence); - - return sentence; + /** + * Get the message with the correct key + * + * @param key + * - the key of the message + * @return the message + */ + public Set getKeyList(String key) { + if (customlocale.isConfigurationSection(key)) + return customlocale.getConfigurationSection(key).getKeys(false); + return enlocale.getConfigurationSection(key).getKeys(false); } - public static Language parseText(FileConfiguration node, String topkey) { - Language newholder = new Language(); - Set keys = node.getConfigurationSection(topkey).getKeys(false); - for (String key : keys) { - newholder.text.put(key, node.getString(topkey + "." + key)); - } - return newholder; + /** + * Check if key exists + * + * @param key + * - the key of the message + * @return true/false + */ + public boolean containsKey(String key) { + if (customlocale == null || !customlocale.contains(key)) + return enlocale.contains(key); + return customlocale.contains(key); } } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index da052023f..05ddc4b45 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -1,13 +1,9 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.text.help; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.World; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; @@ -31,10 +27,6 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; -/** - * - * @author Administrator - */ public class HelpEntry { protected String name; protected String desc; @@ -73,18 +65,17 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p path = "/" + path.replace(".", " ") + " "; int pagecount = (int) Math.ceil((double) helplines.size() / (double) linesPerPage); if (page > pagecount || page < 1) { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); + sender.sendMessage(Residence.getLM().getMessage("Invalid.Help")); return; } String separator = ChatColor.GOLD + ""; String simbol = "\u25AC"; - for (int i = 0; i < 5; i++) { + for (int i = 0; i < 10; i++) { separator += simbol; } - sender.sendMessage(ChatColor.GOLD + separator + " " + Residence.getLanguage().getPhrase("HelpPageHeader", ChatColor.YELLOW + path + ChatColor.GOLD + "|" - + ChatColor.YELLOW + page + ChatColor.GOLD + "|" + ChatColor.YELLOW + pagecount + ChatColor.GOLD) + " " + separator); + sender.sendMessage(ChatColor.GOLD + separator + " " + Residence.getLM().getMessage("General.HelpPageHeader", path, page, pagecount) + " " + separator); int start = linesPerPage * (page - 1); int end = start + linesPerPage; for (int i = start; i < end; i++) { @@ -96,7 +87,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p String desc = ""; int y = 0; for (String one : sub.lines) { - desc += ChatColor.GOLD + one; + desc += ChatColor.YELLOW + one; y++; if (y < sub.lines.length) { desc += "\n"; @@ -116,7 +107,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p sender.sendMessage(helplines.get(i).getDesc()); } else - sender.sendMessage(ChatColor.GOLD + " " + helplines.get(i).getDesc()); + sender.sendMessage(ChatColor.GREEN + " " + helplines.get(i).getDesc()); } } @@ -130,11 +121,11 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p String baseCmd = resadmin ? "resadmin" : "res"; String prevCmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " + Prevpage : "/" + baseCmd + " ? " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLanguage().getPhrase("PrevInfoPage") + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " + NextPage : "/" + baseCmd + " ? " + NextPage; - String next = " {\"text\":\"" + Residence.getLanguage().getPhrase("NextInfoPage") + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; if (sender instanceof Player) @@ -146,7 +137,7 @@ public void printHelp(CommandSender sender, int page, String path, boolean resad if (subEntry != null) { subEntry.printHelp(sender, page, resadmin, path); } else { - sender.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidHelp")); + sender.sendMessage(Residence.getLM().getMessage("Invalid.Help")); } } @@ -255,56 +246,8 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { return entry; } -// public static Set getSubCommands(String[] args) { -// File langFile = new File(new File(Residence.getDataLocation(), "Language"), "English.yml"); -// -// Set subCommands = new HashSet(Arrays.asList("")); -// -// if (langFile.isFile()) { -// FileConfiguration node = new YamlConfiguration(); -// try { -// node.load(langFile); -// } catch (FileNotFoundException e) { -// e.printStackTrace(); -// } catch (IOException e) { -// e.printStackTrace(); -// } catch (InvalidConfigurationException e) { -// e.printStackTrace(); -// } -// -// subCommands = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands").getKeys(false); -// ConfigurationSection meinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); -// -// String pathKey = convertArgs(args); -// String key = pathKey + ".SubCommands"; -// -// Debug.D("" + key); -// -// if (key == "") { -// return subCommands; -// } else { -// if (meinPath.contains(key)) { -// return meinPath.getConfigurationSection(key).getKeys(false); -// } else { -// String[] arg = new String[args.length - 1]; -// for (int i = 0; i < args.length - 1; i++) { -// arg[i] = args[i]; -// } -// pathKey = convertArgs(arg); -// key = pathKey + ".SubCommands"; -// if (meinPath.contains(key)) { -// return meinPath.getConfigurationSection(key).getKeys(false); -// } -// } -// } -// -// } -// return new HashSet(Arrays.asList("?")); -// } - public Set getSubCommands(CommandSender sender, String[] args) { File langFile = new File(new File(Residence.getDataLocation(), "Language"), "English.yml"); -// Set subCommands = new HashSet(); if (langFile.isFile()) { @@ -434,6 +377,11 @@ public Set getSubCommands(CommandSender sender, String[] args) { subCommands.add(one.name().toLowerCase()); } break; + case "[worldname]": + for (World one : Bukkit.getWorlds()) { + subCommands.add(one.getName()); + } + break; } String command = tempmeinPath.getCurrentPath().replace("CommandHelp.SubCommands.", "").replace(".SubCommands.", " "); diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index a98d6ad8c..0197dce12 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -7,10 +7,6 @@ import java.util.List; import org.bukkit.command.CommandSender; -/** - * - * @author Administrator - */ public class InformationPager { public static int linesPerPage = 7; @@ -35,19 +31,19 @@ public static void printInfo(CommandSender sender, String title, List li if (pagecount == 0) pagecount = 1; if (page > pagecount) { - sender.sendMessage(ChatColor.RED + Residence.getLM().getMessage("InvalidPage")); + sender.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Invalid.Page")); return; } - sender.sendMessage(Residence.getLM().getMessage("Language.InformationPage.TopLine", title)); - sender.sendMessage(Residence.getLM().getMessage("Language.InformationPage.Page", Residence.getLM().getMessage("GenericPage", ChatColor.GREEN + String - .format("%d", page) + ChatColor.YELLOW + "%" + ChatColor.GREEN + pagecount + ChatColor.YELLOW))); + sender.sendMessage(Residence.getLM().getMessage("InformationPage.TopLine", title)); + sender.sendMessage(Residence.getLM().getMessage("InformationPage.Page", Residence.getLM().getMessage("General.GenericPage", String.format("%d", page), + pagecount))); for (int i = start; i < end; i++) { if (lines.size() > i) sender.sendMessage(ChatColor.GREEN + lines.get(i)); } if (pagecount > page) - sender.sendMessage(Residence.getLM().getMessage("Language.InformationPage.NextPage", Residence.getLM().getMessage("NextPage"))); + sender.sendMessage(Residence.getLM().getMessage("InformationPage.NextPage", Residence.getLM().getMessage("General.NextPage"))); else - sender.sendMessage(Residence.getLM().getMessage("Language.InformationPage.NoNextPage")); + sender.sendMessage(Residence.getLM().getMessage("InformationPage.NoNextPage")); } } diff --git a/src/com/bekvon/bukkit/residence/utils/CrackShot.java b/src/com/bekvon/bukkit/residence/utils/CrackShot.java index 1bca7d854..b70e22da3 100644 --- a/src/com/bekvon/bukkit/residence/utils/CrackShot.java +++ b/src/com/bekvon/bukkit/residence/utils/CrackShot.java @@ -1,6 +1,5 @@ package com.bekvon.bukkit.residence.utils; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; @@ -21,6 +20,9 @@ public CrackShot() { @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(WeaponDamageEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Entity damager = event.getDamager(); if ((!(damager instanceof Arrow)) && (!(damager instanceof Player))) { @@ -53,7 +55,7 @@ public void AnimalKilling(WeaponDamageEntityEvent event) { if (Residence.getNms().isAnimal(entity)) { if (res != null && !res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { - cause.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "animalkilling")); + cause.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "animalkilling", res.getName())); event.setCancelled(true); } } @@ -61,6 +63,9 @@ public void AnimalKilling(WeaponDamageEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (event.getVictim().getType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event.getVictim().getType())) return; @@ -83,14 +88,16 @@ public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); if (res != null && !res.getPermissions().playerHas(player.getName(), "container", false)) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("FlagDeny", "container")); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "container", res.getName())); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamage(WeaponDamageEntityEvent event) { - + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; if (!(event.getVictim() instanceof Player)) return; @@ -115,7 +122,7 @@ public void onEntityDamage(WeaponDamageEntityEvent event) { } if (!srcpvp) { - damager.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + damager.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); event.setCancelled(true); return; } @@ -123,13 +130,13 @@ public void onEntityDamage(WeaponDamageEntityEvent event) { if (area == null) { /* World PvP */ if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { - damager.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("WorldPVPDisabled")); + damager.sendMessage(Residence.getLM().getMessage("General.WorldPVPDisabled")); event.setCancelled(true); } } else { /* Normal PvP */ if (!area.getPermissions().has("pvp", true)) { - damager.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("NoPVPZone")); + damager.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); event.setCancelled(true); } } diff --git a/src/com/bekvon/bukkit/residence/utils/Debug.java b/src/com/bekvon/bukkit/residence/utils/Debug.java index 93b46204d..968c6ddfa 100644 --- a/src/com/bekvon/bukkit/residence/utils/Debug.java +++ b/src/com/bekvon/bukkit/residence/utils/Debug.java @@ -9,7 +9,7 @@ public static void D(String message) { Player player = Bukkit.getPlayer("Zrips"); if (player == null) return; - player.sendMessage(ChatColor.DARK_GRAY + "[Debug] " + ChatColor.DARK_AQUA + ChatColor.translateAlternateColorCodes('&', message)); + player.sendMessage(ChatColor.DARK_GRAY + "[Residence Debug] " + ChatColor.DARK_AQUA + ChatColor.translateAlternateColorCodes('&', message)); return; } } diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index a8a3a4987..c4c34b184 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -3,7 +3,6 @@ import java.util.Random; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -123,8 +122,7 @@ public void run() { else if (ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName())) ResidenceCommandListener.getTeleportDelayMap().remove(targetPlayer.getName()); targetPlayer.teleport(loc); - targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLM().getMessage("Language.RandomTeleport.TeleportSuccess", loc.getX() + "%" + loc.getY() + "%" - + loc.getZ())); + targetPlayer.sendMessage(Residence.getLM().getMessage("RandomTeleport.TeleportSuccess", loc.getX(), loc.getY(), loc.getZ())); return; } }, Residence.getConfigManager().getTeleportDelay() * 20L); @@ -132,7 +130,6 @@ else if (ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.ge public static void performInstantTp(Location loc, Player targetPlayer) { targetPlayer.teleport(loc); - targetPlayer.sendMessage(ChatColor.YELLOW + Residence.getLM().getMessage("Language.RandomTeleport.TeleportSuccess", loc.getX() + "%" + loc.getY() + "%" + loc - .getZ())); + targetPlayer.sendMessage(Residence.getLM().getMessage("RandomTeleport.TeleportSuccess", loc.getX(), loc.getY(), loc.getZ())); } } diff --git a/src/com/bekvon/bukkit/residence/utils/TabComplete.java b/src/com/bekvon/bukkit/residence/utils/TabComplete.java index 56e0590df..229d73410 100644 --- a/src/com/bekvon/bukkit/residence/utils/TabComplete.java +++ b/src/com/bekvon/bukkit/residence/utils/TabComplete.java @@ -19,17 +19,6 @@ public List onTabComplete(CommandSender sender, Command command, String List completionList = new ArrayList<>(); Set Commands = Residence.getHelpPages().getSubCommands(sender, args); -// if (Commands.contains("?")) { -// String com = ""; -// for (String one : args) { -// com += " " + one; -// } -// Bukkit.dispatchCommand(sender, command.getName() + com + "?"); -// Bukkit.getConsoleSender().sendMessage(sender.getName() + " issued server command: " + command.getName() + com + "?"); -// Commands.clear(); -// Commands.add(""); -// } - String PartOfCommand = args[args.length - 1]; StringUtil.copyPartialMatches(PartOfCommand, Commands, completionList); Collections.sort(completionList); diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 2dd64f771..f04fc856d 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -29,24 +29,30 @@ public static int GetVersion() { try { cleanVersion = Integer.parseInt(version.replace("v", "").replace("V", "").replace("_", "").replace("r", "").replace("R", "")); } catch (NumberFormatException e) { - // Fail save if it for some reason can't translate version to integer - if (version.contains("v1_7")) - cleanVersion = 1700; - if (version.contains("v1_6")) - cleanVersion = 1600; - if (version.contains("v1_5")) - cleanVersion = 1500; + // Fail safe if it for some reason can't translate version to integer if (version.contains("v1_4")) cleanVersion = 1400; + if (version.contains("v1_5")) + cleanVersion = 1500; + if (version.contains("v1_6")) + cleanVersion = 1600; + if (version.contains("v1_7")) + cleanVersion = 1700; if (version.contains("v1_8_R1")) cleanVersion = 1810; if (version.contains("v1_8_R2")) cleanVersion = 1820; if (version.contains("v1_8_R3")) cleanVersion = 1830; + if (version.contains("v1_9_R1")) + cleanVersion = 1910; + if (version.contains("v1_9_R2")) + cleanVersion = 1920; } + if (cleanVersion < 100) + cleanVersion *= 10; if (cleanVersion < 1000) - cleanVersion = cleanVersion * 10; + cleanVersion *= 10; } return cleanVersion; } @@ -59,7 +65,6 @@ public void VersionCheck(final Player player) { public void run() { String currentVersion = plugin.getDescription().getVersion(); String newVersion = getNewVersion(); - Debug.D("new version: " + newVersion); if (newVersion == null || newVersion.equalsIgnoreCase(currentVersion)) return; List msg = Arrays.asList( diff --git a/src/com/bekvon/bukkit/residence/YmlMaker.java b/src/com/bekvon/bukkit/residence/utils/YmlMaker.java similarity index 97% rename from src/com/bekvon/bukkit/residence/YmlMaker.java rename to src/com/bekvon/bukkit/residence/utils/YmlMaker.java index 608668c60..446613d36 100644 --- a/src/com/bekvon/bukkit/residence/YmlMaker.java +++ b/src/com/bekvon/bukkit/residence/utils/YmlMaker.java @@ -1,4 +1,4 @@ -package com.bekvon.bukkit.residence; +package com.bekvon.bukkit.residence.utils; import java.io.File; import java.io.FileInputStream; @@ -15,6 +15,8 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.java.JavaPlugin; +import com.bekvon.bukkit.residence.Residence; + public class YmlMaker { Residence Plugin; public String fileName; diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 3581cef33..ab8770f71 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package com.bekvon.bukkit.residence.vaultinterface; import com.bekvon.bukkit.residence.economy.EconomyInterface; @@ -16,10 +11,6 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.RegisteredServiceProvider; -/** - * - * @author Administrator - */ public class ResidenceVaultAdapter implements EconomyInterface, PermissionsInterface { public static Permission permissions = null; diff --git a/src/plugin.yml b/src/plugin.yml index 0994f6770..a1a04c486 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,10 +1,10 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 2.11.0.0 +version: 4.0.0.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] -softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds] +softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds,dynmap] contributors: [lemon42,smbarbour,inorixu,Shayana_fr] commands: res: From 25443811172590c5970b98e39f765a948d06f972 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Mar 2016 19:33:07 +0200 Subject: [PATCH 0129/1142] Fix for missing locale and fix for resreload --- .../bukkit/residence/LocaleManager.java | 190 +++++++++--------- .../bekvon/bukkit/residence/Residence.java | 34 ++-- .../residence/dynmap/DynMapManager.java | 5 +- .../permissions/PermissionGroup.java | 4 +- src/plugin.yml | 2 +- 5 files changed, 120 insertions(+), 115 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 5950dfca4..c05df772f 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -72,7 +72,7 @@ private static YamlConfiguration loadConfiguration(BufferedReader in, String lan } catch (InvalidConfigurationException ex) { Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[Residence] Your locale file for " + language + " is incorect! Use http://yaml-online-parser.appspot.com/ to find issue."); - return null; + return null; } return config; @@ -499,92 +499,92 @@ public void LoadLang(String lang) { writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Description", "Display selected coordinates", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Info", Arrays.asList("Usage: /res select coords"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Info", Arrays.asList("&eUsage: &6/res select coords"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Description", "Display selected size", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Info", Arrays.asList("Usage: /res select size"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Info", Arrays.asList("&eUsage: &6/res select size"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Description", "Turns on auto selection tool", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Info", Arrays.asList("Usage: /res select auto [playername]"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Args", "[playername]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Description", "Display selection cost", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Info", Arrays.asList("Usage: /res select cost"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Info", Arrays.asList("&eUsage: &6/res select cost"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Description", "Expand Selection Vertically", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Info", - Arrays.asList("Usage: /res select vert", "Will expand selection as high and as low as allowed."), writer, conf, true); + Arrays.asList("&eUsage: &6/res select vert", "Will expand selection as high and as low as allowed."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Description", "Expand Selection to Sky", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Info", Arrays.asList("Usage: /res select sky", + GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Info", Arrays.asList("&eUsage: &6/res select sky", "Expands as high as your allowed to go."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Description", "Expand Selection to Bedrock", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Info", - Arrays.asList("Usage: /res select bedrock", "Expands as low as your allowed to go."), writer, conf, true); + Arrays.asList("&eUsage: &6/res select bedrock", "Expands as low as your allowed to go."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Description", "Expand selection in a direction.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Info", - Arrays.asList("Usage: /res select expand ", "Expands in the direction your looking."), writer, conf, true); + Arrays.asList("&eUsage: &6/res select expand ", "Expands in the direction your looking."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Description", "Shift selection in a direction", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Info", - Arrays.asList("Usage: /res select shift ", "Pushes your selection by in the direction your looking."), writer, conf, true); + Arrays.asList("&eUsage: &6/res select shift ", "Pushes your selection by in the direction your looking."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Description", "Select the chunk your currently in.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Info", - Arrays.asList("Usage: /res select chunk", "Selects the chunk your currently standing in."), writer, conf, true); + Arrays.asList("&eUsage: &6/res select chunk", "Selects the chunk your currently standing in."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Description", "Select a existing area in a residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Info", - Arrays.asList("Usage /res select residence ", "Selects a existing area in a residence."), writer, conf, true); + Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Description", "Set selection using the current WorldEdit selection.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Info", - Arrays.asList("Usage /res select worldedit", "Sets selection area using the current WorldEdit selection."), writer, conf, true); + Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection."), writer, conf, true); // res create GetConfig("CommandHelp.SubCommands.res.SubCommands.create.Description", "Create Residences", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.create.Info", Arrays.asList("Usage: /res create "), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.create.Info", Arrays.asList("&eUsage: &6/res create "), writer, conf, true); // res remove GetConfig("CommandHelp.SubCommands.res.SubCommands.remove.Description", "Remove residences.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("Usage: /res remove "), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("&eUsage: &6/res remove "), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.remove.Args", "[residence]", writer, conf, true); // res padd GetConfig("CommandHelp.SubCommands.res.SubCommands.padd.Description", "Add player to residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.padd.Info", Arrays.asList("Usage: /res padd [player]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.padd.Info", Arrays.asList("&eUsage: &6/res padd [player]", "Adds essential flags for player"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.padd.Args", "[residence] [playername]", writer, conf, true); // res pdel GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Description", "Remove player from residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Info", Arrays.asList("Usage: /res pdel [player]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Info", Arrays.asList("&eUsage: &6/res pdel [player]", "Removes essential flags from player"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Args", "[residence] [playername]", writer, conf, true); // res info GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Info", - Arrays.asList("Usage: /res info ", "Leave off to display info for the residence your currently in."), writer, conf, true); + Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Args", "[residence]", writer, conf, true); // res set GetConfig("CommandHelp.SubCommands.res.SubCommands.set.Description", "Set general flags on a Residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.set.Info", Arrays.asList("Usage: /res set [flag] [true/false/remove]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.set.Info", Arrays.asList("&eUsage: &6/res set [flag] [true/false/remove]", "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.set.Args", "[residence] [flag] [true/false/remove]", writer, conf, true); // res pset GetConfig("CommandHelp.SubCommands.res.SubCommands.pset.Description", "Set flags on a specific player for a Residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.pset.Info", Arrays.asList("Usage: /res pset [player] [flag] [true/false/remove]", - "Usage: /res pset [player] removeall", "To see a list of flags, use /res flags ?"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.pset.Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", + "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.pset.Args", "[residence] [playername] [flag] [true/false/remove]", writer, conf, true); // res flags @@ -1073,57 +1073,57 @@ public void LoadLang(String lang) { //res limits GetConfig("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.limits.Info", - Arrays.asList("Usage: /res limits", "Shows the limitations you have on creating and managing residences."), writer, conf, true); + Arrays.asList("&eUsage: &6/res limits", "Shows the limitations you have on creating and managing residences."), writer, conf, true); // res tpset GetConfig("CommandHelp.SubCommands.res.SubCommands.tpset.Description", "Set the teleport location of a Residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.tpset.Info", - Arrays.asList("Usage: /res tpset", "This will set the teleport location for a residence to where your standing.", + Arrays.asList("&eUsage: &6/res tpset", "This will set the teleport location for a residence to where your standing.", "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence."), writer, conf, true); // res tp GetConfig("CommandHelp.SubCommands.res.SubCommands.tp.Description", "Teleport to a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.tp.Info", - Arrays.asList("Usage: /res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", + Arrays.asList("&eUsage: &6/res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", "Your permission group must also be allowed to teleport by the server admin."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.tp.Args", "[residence]", writer, conf, true); // res rt GetConfig("CommandHelp.SubCommands.res.SubCommands.rt.Description", "Teleports to random location in world", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rt.Info", - Arrays.asList("Usage: /res rt", "Teleports you to random location in defined world."), writer, conf, true); + Arrays.asList("&eUsage: &6/res rt", "Teleports you to random location in defined world."), writer, conf, true); // res rc GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.Description", "Joins current or defined residence chat chanel", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.Info", - Arrays.asList("Usage: /res rc (residence)", "Teleports you to random location in defined world."), writer, conf, true); + Arrays.asList("&eUsage: &6/res rc (residence)", "Teleports you to random location in defined world."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.leave.Description", "Leaves current residence chat chanel", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.leave.Info", Arrays.asList("Usage: /res rc leave", + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.leave.Info", Arrays.asList("&eUsage: &6/res rc leave", "If you are in residence chat cnahel then you will leave it"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setcolor.Description", "Sets residence chat chanel text color", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setcolor.Info", Arrays.asList("Usage: /res rc setcolor [colorCode]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setcolor.Info", Arrays.asList("&eUsage: &6/res rc setcolor [colorCode]", "Sets residence chat chanel text color"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setprefix.Description", "Sets residence chat chanel prefix", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setprefix.Info", Arrays.asList("Usage: /res rc setprefix [newName]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setprefix.Info", Arrays.asList("&eUsage: &6/res rc setprefix [newName]", "Sets residence chat chanel prefix"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.kick.Description", "Kicks player from chanel", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.kick.Info", Arrays.asList("Usage: /res rc kick [player]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", "Kicks player from chanel"), writer, conf, true); // res expand GetConfig("CommandHelp.SubCommands.res.SubCommands.expand.Description", "Expands residence in direction you looking", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.expand.Info", - Arrays.asList("Usage: /res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional"), writer, conf, true); + Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional"), writer, conf, true); // res contract GetConfig("CommandHelp.SubCommands.res.SubCommands.contract.Description", "Contracts residence in direction you looking", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.contract.Info", - Arrays.asList("Usage: /res contract (residence [amount])", "Contracts residence in direction you looking.", "Residence name is optional"), writer, conf, + Arrays.asList("&eUsage: &6/res contract (residence [amount])", "Contracts residence in direction you looking.", "Residence name is optional"), writer, conf, true); // res shop @@ -1131,51 +1131,51 @@ public void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.Info", Arrays.asList("Manages residence shop feature"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Description", "Shows list of res shops", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Info", Arrays.asList("Usage: /res shop list", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Info", Arrays.asList("&eUsage: &6/res shop list", "Shows full list of all residences with shop flag"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Description", "Vote for residence shop", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Info", Arrays.asList("Usage: /res shop vote [amount]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", "Votes for current or defined residence"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Description", "Give like for residence shop", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Info", Arrays.asList("Usage: /res shop like ", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Info", Arrays.asList("&eUsage: &6/res shop like ", "Gives like for residence shop"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Args", "[residenceshop]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Description", "Shows res shop votes", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Info", Arrays.asList("Usage: /res shop votes ", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", "Shows full vote list of current or defined residence shop"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Args", "[residenceshop]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Description", "Shows res shop likes", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Info", Arrays.asList("Usage: /res shop likes ", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", "Shows full like list of current or defined residence shop"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Args", "[residenceshop]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Description", "Sets residence shop description", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Info", Arrays.asList("Usage: /res shop setdesc [text]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Description", "Create res shop board", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Info", Arrays.asList("Usage: /res shop createboard [place]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", "Creates res shop board from selected area. Place - position from which to start filling board"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Description", "Deletes res shop board", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Info", Arrays.asList("Usage: /res shop deleteboard", + GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", "Deletes res shop board bi right clicking on one of signs"), writer, conf, true); // res tpconfirm GetConfig("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", - Arrays.asList("Usage: /res tpconfirm", "Teleports you to a residence, when teleportation is unsafe."), + Arrays.asList("&eUsage: &6/res tpconfirm", "Teleports you to a residence, when teleportation is unsafe."), writer, conf, true); // res subzone GetConfig("CommandHelp.SubCommands.res.SubCommands.subzone.Description", "Create subzones in residences.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.subzone.Info", - Arrays.asList("Usage: /res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), + Arrays.asList("&eUsage: &6/res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.subzone.Args", "[residence]", writer, conf, true); @@ -1183,101 +1183,101 @@ public void LoadLang(String lang) { //res area GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Description", "List physical areas in a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Info", - Arrays.asList("Usage: /res area list [residence] "), + Arrays.asList("&eUsage: &6/res area list [residence] "), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Description", "List coordinates and other Info for areas", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("Usage: /res area listall [residence] "), writer, + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] "), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Description", "Add physical areas to a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Info", - Arrays.asList("Usage: /res area add [residence] [areaID]", "You must first select two points first."), writer, conf, true); + Arrays.asList("&eUsage: &6/res area add [residence] [areaID]", "You must first select two points first."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Description", "Remove physical areas from a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("Usage: /res area remove [residence] [areaID]"), writer, + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("&eUsage: &6/res area remove [residence] [areaID]"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Description", "Replace physical areas in a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("Usage: /res area replace [residence] [areaID]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("&eUsage: &6/res area replace [residence] [areaID]", "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Args", "[residence]", writer, conf, true); // res message GetConfig("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.message.Info", Arrays.asList("Usage: /res message [enter/leave] [message]", - "Set the enter or leave message of a residence.", "Usage: /res message remove [enter/leave]", "Removes a enter or leave message."), + GetConfig("CommandHelp.SubCommands.res.SubCommands.message.Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", + "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.message.Args", "[residence] [enter/leave]", writer, conf, true); // res lease GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.Description", "Manage residence leases", writer, conf, true); GetConfig( - "CommandHelp.SubCommands.res.SubCommands.lease.Info", Arrays.asList("Usage: /res lease [renew/cost] [residence]", + "CommandHelp.SubCommands.res.SubCommands.lease.Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.Args", "[renew/cost] [residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", - Arrays.asList("Usage: /resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite."), writer, conf, + Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Description", "Renew the lease time", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Info", - Arrays.asList("Usage: /resadmin lease renew ", "Renews the lease time for current or specified residence."), writer, conf, true); + Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Description", "Lease end date", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Info", - Arrays.asList("Usage: /resadmin lease expires ", "Shows when expires residence lease time."), writer, conf, true); + Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Description", "Shows renew cost", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Info", - Arrays.asList("Usage: /resadmin lease cost ", "Shows how much money you need to renew residence lease."), writer, conf, + Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Args", "[residence]", writer, conf, true); // res bank GetConfig("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.bank.Info", - Arrays.asList("Usage: /res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", + Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", "You must have the +bank flag."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.bank.Args", "[deposit/withdraw] [residence]", writer, conf, true); // res confirm GetConfig("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.confirm.Info", Arrays.asList("Usage: /res confirm", "Confirms removal of a residence."), writer, conf, + GetConfig("CommandHelp.SubCommands.res.SubCommands.confirm.Info", Arrays.asList("&eUsage: &6/res confirm", "Confirms removal of a residence."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.gset.Description", "Set flags on a specific group for a Residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.gset.Info", - Arrays.asList("Usage: /res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?"), writer, conf, true); + Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lset.Description", "Change blacklist and ignorelist options", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lset.Info", - Arrays.asList("Usage: /res lset [blacklist/ignorelist] [material]", - "Usage: /res lset Info", + Arrays.asList("&eUsage: &6/res lset [blacklist/ignorelist] [material]", + "&eUsage: &6/res lset Info", "Blacklisting a material prevents it from being placed in the residence.", "Ignorelist causes a specific material to not be protected by Residence."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lset.Args", "[residence] [blacklist/ignorelist] [material]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("Usage: /res removeall [owner]", + GetConfig("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("&eUsage: &6/res removeall [owner]", "Removes all residences owned by a specific player.'", "Requires /resadmin if you use it on anyone besides yourself."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.removeall.Args", "[playername]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.list.Description", "List Residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.list.Info", - Arrays.asList("Usage: /res list ", + Arrays.asList("&eUsage: &6/res list ", "Lists all the residences a player owns (except hidden ones).", "If listing your own residences, shows hidden ones as well.", "To list everyones residences, use /res listall."), @@ -1286,109 +1286,109 @@ public void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.listhidden.Description", "List Hidden Residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.listhidden.Info", - Arrays.asList("Usage: /res listhidden ", + Arrays.asList("&eUsage: &6/res listhidden ", "Lists hidden residences for a player."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.listhidden.Args", "[playername]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.listall.Description", "List All Residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.listall.Info", - Arrays.asList("Usage: /res listall ", + Arrays.asList("&eUsage: &6/res listall ", "Lists hidden residences for a player."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.listallhidden.Description", "List All Hidden Residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.listallhidden.Info", - Arrays.asList("Usage: /res listhidden ", + Arrays.asList("&eUsage: &6/res listhidden ", "Lists all hidden residences on the server."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.sublist.Description", "List Residence Subzones", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.sublist.Info", - Arrays.asList("Usage: /res sublist ", + Arrays.asList("&eUsage: &6/res sublist ", "List subzones within a residence."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.sublist.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.reset.Description", "Reset residence to default flags.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.reset.Info", - Arrays.asList("Usage: /res reset ", + Arrays.asList("&eUsage: &6/res reset ", "Resets the flags on a residence to their default. You must be the owner or an admin to do this."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.reset.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Description", "Renames a residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Info", - Arrays.asList("Usage: /res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", + Arrays.asList("&eUsage: &6/res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", "The name must not already be taken by another residence."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.kick.Description", "Kicks player from residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.kick.Info", - Arrays.asList("Usage: /res kick ", "You must be the owner or an admin to do this.", + Arrays.asList("&eUsage: &6/res kick ", "You must be the owner or an admin to do this.", "Player should be online."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.kick.Args", "[playername]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Description", "Mirrors Flags", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Info", - Arrays.asList("Usage: /res mirror [Source Residence] [Target Residence]", + Arrays.asList("&eUsage: &6/res mirror [Source Residence] [Target Residence]", "Mirrors flags from one residence to another. You must be owner of both or a admin to do this."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Args", "[residence] [residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.Description", "Buy, Sell, or Rent Residences", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Info", - Arrays.asList("Usage: /res market ? for more Info"), + Arrays.asList("&eUsage: &6/res market ? for more Info"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Description", "Get economy Info on residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Info", - Arrays.asList("Usage: /res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost."), + Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Description", "Lists rentable and for sale residences.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Info", - Arrays.asList("Usage: /res market list"), + Arrays.asList("&eUsage: &6/res market list"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Description", "Sell a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Info", - Arrays.asList("Usage: /res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", + Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", "Another player can buy the residence with /res market buy"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Description", "Set market sign", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Info", - Arrays.asList("Usage: /res market sign [residence]", "Sets market sign you are looking at."), + Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Description", "Buy a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Info", - Arrays.asList("Usage: /res market buy [residence]", "Buys a Residence if its for sale."), + Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Description", "Stops selling a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Info", - Arrays.asList("Usage: /res market unsell [residence]"), + Arrays.asList("&eUsage: &6/res market unsell [residence]"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Description", "ent a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Info", - Arrays.asList("Usage: /res market rent [residence] ", + Arrays.asList("&eUsage: &6/res market rent [residence] ", "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Args", "[cresidence] [true/false]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Description", "Make a residence rentable.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Info", - Arrays.asList("Usage: /res market rentable [residence] [cost] [days] ", + Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", "Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Args", "[residence]", writer, conf, true); @@ -1396,19 +1396,19 @@ public void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Description", "Remove a residence from rent or rentable.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Info", - Arrays.asList("Usage: /res market release [residence]", "If you are the renter, this command releases the rent on the house for you.", + Arrays.asList("&eUsage: &6/res market release [residence]", "If you are the renter, this command releases the rent on the house for you.", "If you are the owner, this command makes the residence not for rent anymore."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Args", "[residence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.current.Description", "Show residence your currently in.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.current.Info", - Arrays.asList("Usage: /res current"), + Arrays.asList("&eUsage: &6/res current"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.signupdate.Description", "Updated residence signs", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.signupdate.Info", - Arrays.asList("Usage: /res signupdate"), + Arrays.asList("&eUsage: &6/res signupdate"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.Description", "Predefined permission lists", writer, conf, true); @@ -1418,72 +1418,72 @@ public void LoadLang(String lang) { GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Description", "Add a list", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Info", - Arrays.asList("Usage: /res lists add "), + Arrays.asList("&eUsage: &6/res lists add "), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Description", "Remove a list", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Info", - Arrays.asList("Usage: /res lists remove "), + Arrays.asList("&eUsage: &6/res lists remove "), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Description", "Apply a list to a residence", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Info", - Arrays.asList("Usage: /res lists apply "), + Arrays.asList("&eUsage: &6/res lists apply "), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Description", "Set a flag", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Info", - Arrays.asList("Usage: /res lists set "), + Arrays.asList("&eUsage: &6/res lists set "), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Description", "Set a player flag", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Info", - Arrays.asList("Usage: /res lists pset "), + Arrays.asList("&eUsage: &6/res lists pset "), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Description", "Set a group flag", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", - Arrays.asList("Usage: /res lists gset "), + Arrays.asList("&eUsage: &6/res lists gset "), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.view.Description", "View a list.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", - Arrays.asList("Usage: /res lists view "), + Arrays.asList("&eUsage: &6/res lists view "), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.server.Description", "Make land server owned.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.server.Info", - Arrays.asList("Usage: /resadmin server [residence]", "Make a residence server owned."), + Arrays.asList("&eUsage: &6/resadmin server [residence]", "Make a residence server owned."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.server.Args", "[cresidence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.setowner.Description", "Change owner of a residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.setowner.Info", - Arrays.asList("Usage: /resadmin setowner [residence] [player]"), + Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.setowner.Args", "[cresidence]", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.resreload.Info", - Arrays.asList("Usage: /resreload"), + Arrays.asList("&eUsage: &6/resreload"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.resload.Description", "Load residence save file.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.resload.Info", - Arrays.asList("Usage: /resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes."), + Arrays.asList("&eUsage: &6/resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes."), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.removeworld.Description", "Remove all residences from world", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.removeworld.Info", - Arrays.asList("Usage: /res removeworld [worldname]", "Can only be used from console"), writer, conf, true); + Arrays.asList("&eUsage: &6/res removeworld [worldname]", "Can only be used from console"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.signconvert.Description", "Converts signs from ResidenceSign plugin", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.signconvert.Info", - Arrays.asList("Usage: /res signconvert", "Will try to convert saved sign data from 3rd party plugin"), writer, conf, true); + Arrays.asList("&eUsage: &6/res signconvert", "Will try to convert saved sign data from 3rd party plugin"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.version.Description", "how residence version", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.version.Info", - Arrays.asList("Usage: /res version"), + Arrays.asList("&eUsage: &6/res version"), writer, conf, true); // Write back config diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 6f747d93a..681228688 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -313,7 +313,8 @@ public void onDisable() { server.getScheduler().cancelTask(rentBukkitId); } - getDynManager().getMarkerSet().deleteMarkerSet(); + if (getDynManager() != null) + getDynManager().getMarkerSet().deleteMarkerSet(); if (initsuccess) { try { @@ -437,7 +438,6 @@ public void onEnable() { PlayerManager = new PlayerManager(this); ShopSignUtilManager = new ShopSignUtil(this); RandomTpManager = new RandomTp(this); - DynManager = new DynMapManager(this); Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); if (lwcp != null) @@ -620,17 +620,6 @@ public void run() { pm.registerEvents(flistener, this); pm.registerEvents(shlistener, this); - // DynMap - Plugin dynmap = server.getPluginManager().getPlugin("dynmap"); - if (dynmap != null && getConfigManager().DynMapUse) { - pm.registerEvents(new DynMapListeners(), this); - getDynManager().api = (DynmapAPI) dynmap; - getDynManager().activate(); - } - - if (Bukkit.getVersion().toString().contains("Spigot") || Bukkit.getVersion().toString().contains("spigot")) - pm.registerEvents(spigotlistener, this); - NewLanguageManager = new Language(this); getLM().LanguageReload(); @@ -638,9 +627,6 @@ public void run() { if (VersionChecker.GetVersion() >= 1800) pm.registerEvents(new v1_8Events(), this); - if (getServer().getPluginManager().getPlugin("CrackShot") != null) - pm.registerEvents(new CrackShot(), this); - // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, // Priority.NORMAL, this); if (cmanager.enableSpout()) { @@ -652,6 +638,22 @@ public void run() { } else { plistener.reload(); } + + if (Bukkit.getVersion().toString().contains("Spigot") || Bukkit.getVersion().toString().contains("spigot")) + getServer().getPluginManager().registerEvents(spigotlistener, this); + + if (getServer().getPluginManager().getPlugin("CrackShot") != null) + getServer().getPluginManager().registerEvents(new CrackShot(), this); + + // DynMap + Plugin dynmap = Bukkit.getPluginManager().getPlugin("dynmap"); + if (dynmap != null && getConfigManager().DynMapUse) { + DynManager = new DynMapManager(this); + getServer().getPluginManager().registerEvents(new DynMapListeners(), this); + getDynManager().api = (DynmapAPI) dynmap; + getDynManager().activate(); + } + int autosaveInt = cmanager.getAutoSaveInterval(); if (autosaveInt < 1) { autosaveInt = 1; diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 844888f1c..74d88ad3e 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -37,6 +37,8 @@ public MarkerSet getMarkerSet() { } public void fireUpdate(final ClaimedResidence res, final int deep) { + if (api == null || set == null) + return; if (res == null) return; final String name = res.getName(); @@ -68,7 +70,8 @@ private String formatInfoWindow(String resid, ClaimedResidence res) { if (Residence.getTransactionManager().isForSale(res.getName())) v = "
" - + ChatColor.stripColor(Residence.getLM().getMessage("Economy.LandForSale", " ")) + "%regionname%
" + + ChatColor.stripColor(Residence.getLM().getMessage("Economy.LandForSale", " ")) + + "%regionname%
" + ChatColor.stripColor(Residence.getLM().getMessage("General.Owner", "")) + "%playerowners%
" + ChatColor.stripColor(Residence.getLM().getMessage("Economy.SellAmount", "")) + "%price%
"; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 7c8204f12..227966d09 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -309,7 +309,7 @@ public boolean itemListAccess() { } public void printLimits(Player player, OfflinePlayer target, boolean resadmin) { - player.sendMessage(Residence.getLM().getMessage("Seperator")); + player.sendMessage(Residence.getLM().getMessage("General.Seperator")); player.sendMessage(Residence.getLM().getMessage("Limits.PGroup", Residence.getPermissionManager().getPermissionsGroup(target.getName(), Residence.getConfigManager().getDefaultWorld()))); player.sendMessage(Residence.getLM().getMessage("Limits.RGroup", groupname)); @@ -336,7 +336,7 @@ public void printLimits(Player player, OfflinePlayer target, boolean resadmin) { player.sendMessage(Residence.getLM().getMessage("Limits.Flag", leaseGiveTime)); player.sendMessage(Residence.getLM().getMessage("Limits.Flag", renewcostperarea)); } - player.sendMessage(Residence.getLM().getMessage("Seperator")); + player.sendMessage(Residence.getLM().getMessage("General.Seperator")); } } diff --git a/src/plugin.yml b/src/plugin.yml index a1a04c486..9ea4d7d0c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.0.0 +version: 4.0.0.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From ed55cad48c90d38aadd8ef25dcc0c28df9881a47 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 11 Mar 2016 11:45:51 +0200 Subject: [PATCH 0130/1142] WorldGuard region separate locale get target block for 1.7 version try to perform worldguard check region collision, if fails ignore. --- .../bukkit/residence/LocaleManager.java | 1 + src/com/bekvon/bukkit/residence/NMS.java | 6 ++ .../bekvon/bukkit/residence/Residence.java | 13 ++- .../bekvon/bukkit/residence/allNms/v1_7.java | 15 +++- .../residence/allNms/v1_7_Couldron.java | 15 ++++ .../bekvon/bukkit/residence/allNms/v1_8.java | 14 ++++ .../bekvon/bukkit/residence/allNms/v1_9.java | 15 ++++ .../bukkit/residence/commands/confirm.java | 1 - .../bukkit/residence/commands/create.java | 2 +- .../bukkit/residence/commands/market.java | 2 +- .../listeners/ResidencePlayerListener.java | 18 ++-- .../residence/selection/WorldGuardUtil.java | 83 ++++++++++--------- src/plugin.yml | 8 +- 13 files changed, 127 insertions(+), 66 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index c05df772f..82f8fec51 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -161,6 +161,7 @@ public void LoadLang(String lang) { GetConfig("Language.Select.Points", "&eSelect two points first before using this command!", writer, conf, true); GetConfig("Language.Select.Overlap", "&cSelected points overlap with &6%1 &cregion!", writer, conf, true); + GetConfig("Language.Select.WorldGuardOverlap", "&cSelected points overlap with &6%1 &c WorldGuard region!", writer, conf, true); GetConfig("Language.Select.Success", "&eSelection Successful!", writer, conf, true); GetConfig("Language.Select.Fail", "&cInvalid select command...", writer, conf, true); GetConfig("Language.Select.Bedrock", "&eSelection expanded to your lowest allowed limit.", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/NMS.java b/src/com/bekvon/bukkit/residence/NMS.java index 638b538c7..f356369d7 100644 --- a/src/com/bekvon/bukkit/residence/NMS.java +++ b/src/com/bekvon/bukkit/residence/NMS.java @@ -8,7 +8,9 @@ import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; public interface NMS { @@ -29,4 +31,8 @@ public interface NMS { public void addDefaultFlags(Map matUseFlagList); public boolean isPlate(Material mat); + + public boolean isMainHand(PlayerInteractEvent event); + + public Block getTargetBlock(Player player, int range); } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 681228688..2ead80cdd 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -439,6 +439,11 @@ public void onEnable() { ShopSignUtilManager = new ShopSignUtil(this); RandomTpManager = new RandomTp(this); + signmanager = new SignUtil(this); + Residence.getSignUtil().LoadSigns(); + + versionChecker = new VersionChecker(this); + Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); if (lwcp != null) lwc = ((LWCPlugin) lwcp).getLWC(); @@ -705,13 +710,9 @@ public void run() { Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); } - Residence.setSignUtil(this); - Residence.getSignUtil().LoadSigns(); - getShopSignUtilManager().LoadShopVotes(); getShopSignUtilManager().BoardUpdate(); - versionChecker = new VersionChecker(this); versionChecker.VersionCheck(null); } @@ -719,10 +720,6 @@ public static SignUtil getSignUtil() { return signmanager; } - public static void setSignUtil(Residence plugin) { - signmanager = new SignUtil(plugin); - } - public void consoleMessage(String message) { ConsoleCommandSender console = Bukkit.getConsoleSender(); console.sendMessage("[Residence] " + message); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index 32c557176..90af58c65 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -1,9 +1,9 @@ package com.bekvon.bukkit.residence.allNms; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; - import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; @@ -16,12 +16,15 @@ import org.bukkit.entity.IronGolem; import org.bukkit.entity.Ocelot; import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; import org.bukkit.entity.Sheep; import org.bukkit.entity.Snowman; import org.bukkit.entity.Squid; import org.bukkit.entity.Villager; import org.bukkit.entity.Wolf; import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; + import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; @@ -102,4 +105,14 @@ public void addDefaultFlags(Map matUseFlagList) { public boolean isPlate(Material mat) { return false; } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return true; + } + + @Override + public Block getTargetBlock(Player player, int range) { + return player.getTargetBlock((HashSet) null, range); + } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 087a49707..628ed30c2 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -1,8 +1,10 @@ package com.bekvon.bukkit.residence.allNms; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.bukkit.GameMode; import org.bukkit.Material; @@ -16,12 +18,15 @@ import org.bukkit.entity.IronGolem; import org.bukkit.entity.Ocelot; import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; import org.bukkit.entity.Sheep; import org.bukkit.entity.Snowman; import org.bukkit.entity.Squid; import org.bukkit.entity.Villager; import org.bukkit.entity.Wolf; import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; + import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; @@ -102,4 +107,14 @@ public void addDefaultFlags(Map matUseFlagList) { public boolean isPlate(Material mat) { return false; } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return true; + } + + @Override + public Block getTargetBlock(Player player, int range) { + return player.getTargetBlock((HashSet) null, range); + } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java index fe3e39421..860d7db76 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import org.bukkit.GameMode; import org.bukkit.Material; @@ -16,6 +17,7 @@ import org.bukkit.entity.IronGolem; import org.bukkit.entity.Ocelot; import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; import org.bukkit.entity.Rabbit; import org.bukkit.entity.Sheep; import org.bukkit.entity.Snowman; @@ -23,6 +25,8 @@ import org.bukkit.entity.Villager; import org.bukkit.entity.Wolf; import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; + import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; @@ -129,4 +133,14 @@ public void addDefaultFlags(Map matUseFlagList) { public boolean isPlate(Material mat) { return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return true; + } + + @Override + public Block getTargetBlock(Player player, int range) { + return player.getTargetBlock((Set) null, range); + } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9.java b/src/com/bekvon/bukkit/residence/allNms/v1_9.java index 75be93428..488456652 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import org.bukkit.GameMode; import org.bukkit.Material; @@ -16,6 +17,7 @@ import org.bukkit.entity.IronGolem; import org.bukkit.entity.Ocelot; import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; import org.bukkit.entity.Rabbit; import org.bukkit.entity.Sheep; import org.bukkit.entity.Snowman; @@ -23,6 +25,9 @@ import org.bukkit.entity.Villager; import org.bukkit.entity.Wolf; import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; + import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; @@ -129,4 +134,14 @@ public void addDefaultFlags(Map matUseFlagList) { public boolean isPlate(Material mat) { return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public Block getTargetBlock(Player player, int range) { + return player.getTargetBlock((Set) null, range); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/confirm.java b/src/com/bekvon/bukkit/residence/commands/confirm.java index 14cb443a5..597166a05 100644 --- a/src/com/bekvon/bukkit/residence/commands/confirm.java +++ b/src/com/bekvon/bukkit/residence/commands/confirm.java @@ -26,7 +26,6 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } else { Residence.getResidenceManager().removeResidence(player, area, resadmin); Residence.deleteConfirm.remove(name); - sender.sendMessage(Residence.getLM().getMessage("Residence.Remove", name)); } return true; diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 0ff1d0635..882eeb189 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -34,7 +34,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } else if (Residence.getWEplugin() != null && WorldGuardUtil.isSelectionInRegion(player) != null) { ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); - player.sendMessage(Residence.getLM().getMessage("Select.Overlap", Region.getId())); + player.sendMessage(Residence.getLM().getMessage("Select.WorldGuardOverlap", Region.getId())); Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), Region .getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 38534360e..e45d5624e 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -63,7 +63,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length != 3) { return false; } - Block block = player.getTargetBlock((Set) null, 10); + Block block = Residence.getNms().getTargetBlock(player, 10); if (!(block.getState() instanceof Sign)) { player.sendMessage(Residence.getLM().getMessage("Sign.LookAt")); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 85172dc49..7efd87a42 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -44,6 +44,8 @@ import org.bukkit.event.player.PlayerShearEntityEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.chat.ChatChannel; @@ -537,16 +539,13 @@ public void onSelection(PlayerInteractEvent event) { Location loc = block.getLocation(); Residence.getSelectionManager().placeLoc1(player, loc, true); player.sendMessage(Residence.getLM().getMessage("Select.PrimaryPoint", Residence.getLM().getMessage("General.CoordsTop", loc.getBlockX(), loc.getBlockY(), - loc - .getBlockZ()))); + loc.getBlockZ()))); event.setCancelled(true); - } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && Residence.getNms().isMainHand(event)) { Location loc = block.getLocation(); Residence.getSelectionManager().placeLoc2(player, loc, true); player.sendMessage(Residence.getLM().getMessage("Select.SecondaryPoint", Residence.getLM().getMessage("General.CoordsBottom", loc.getBlockX(), loc - .getBlockY(), - loc - .getBlockZ()))); + .getBlockY(), loc.getBlockZ()))); event.setCancelled(true); } @@ -567,7 +566,12 @@ public void onInfoCheck(PlayerInteractEvent event) { if (block == null) return; Player player = event.getPlayer(); - int heldItemId = player.getItemInHand().getTypeId(); + + ItemStack item = event.getItem(); + if (item == null) + return; + + int heldItemId = item.getTypeId(); if (heldItemId != Residence.getConfigManager().getInfoToolID()) return; diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java index 3b889724c..3b8ece75b 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -1,40 +1,43 @@ -package com.bekvon.bukkit.residence.selection; - -import org.bukkit.Location; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.sk89q.worldedit.BlockVector; -import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.managers.RegionManager; -import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; - -public class WorldGuardUtil { - public static ProtectedRegion isSelectionInRegion(Player player) { - - if (Residence.wg == null) - return null; - - if (Residence.wep == null) - return null; - - if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) - return null; - Location loc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); - Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); - - String id = "icp__tempregion"; - BlockVector min = new BlockVector(loc1.getX(), loc1.getY(), loc1.getZ()); - BlockVector max = new BlockVector(loc2.getX(), loc2.getY(), loc2.getZ()); - ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); - RegionManager mgr = Residence.wg.getRegionContainer().get(loc1.getWorld()); - ApplicableRegionSet regions = mgr.getApplicableRegions(region); - - for (ProtectedRegion one : regions) { - if (!player.hasPermission("residence.worldguard." + one.getId())) - return one; - } - return null; - } -} +package com.bekvon.bukkit.residence.selection; + +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.managers.RegionManager; +import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; + +public class WorldGuardUtil { + public static ProtectedRegion isSelectionInRegion(Player player) { + + if (Residence.wg == null) + return null; + + if (Residence.wep == null) + return null; + + if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) + return null; + Location loc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); + Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); + + String id = "icp__tempregion"; + try { + BlockVector min = new BlockVector(loc1.getX(), loc1.getY(), loc1.getZ()); + BlockVector max = new BlockVector(loc2.getX(), loc2.getY(), loc2.getZ()); + ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); + RegionManager mgr = Residence.wg.getRegionContainer().get(loc1.getWorld()); + ApplicableRegionSet regions = mgr.getApplicableRegions(region); + + for (ProtectedRegion one : regions) { + if (!player.hasPermission("residence.worldguard." + one.getId())) + return one; + } + } catch (Exception e) { + } + return null; + } +} diff --git a/src/plugin.yml b/src/plugin.yml index 9ea4d7d0c..33934925c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.0.2 +version: 4.0.0.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -25,12 +25,6 @@ commands: rc: description: §cChat in current residence channel. usage: §c/rc §eto toggle, §c/rc l §eto leave, §c/rc setprefix §eto set prefix, §c/rc setcolor §eto set color or §c/rc kick §eto kick player - resworld: - description: §cRemoves every residence in a world. - usage: §c/resworld remove [world] - ressignconvert: - description: §cConverts signs from ResidenceSigns plugin. - usage: §c/ressignconvert permissions: residence.admin: description: Gives you access to /resadmin From b3f45999401b7f85966ed468caeb0bf5afc82f76 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 12 Mar 2016 14:51:05 +0200 Subject: [PATCH 0131/1142] Temporally and partial fix lingering potion effects --- .../bukkit/residence/ConfigManager.java | 7 +++ .../bukkit/residence/LocaleManager.java | 2 +- src/com/bekvon/bukkit/residence/NMS.java | 9 +++- .../bekvon/bukkit/residence/allNms/v1_7.java | 13 +++++ .../residence/allNms/v1_7_Couldron.java | 14 ++++- .../bekvon/bukkit/residence/allNms/v1_8.java | 11 ++++ .../bekvon/bukkit/residence/allNms/v1_9.java | 27 +++++++++- .../bukkit/residence/commands/market.java | 3 -- .../listeners/ResidenceEntityListener.java | 53 +++++++++++++++++++ src/plugin.yml | 2 +- 10 files changed, 131 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 18a8d4bff..895cb1871 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -138,6 +138,7 @@ public class ConfigManager { protected List CleanWorlds; protected List FlagsList; protected List NegativePotionEffects; + protected List NegativeLingeringPotionEffects; protected Location KickLocation; @@ -493,6 +494,9 @@ void UpdateConfigFile() { "Potions containing one of thos effects will be ignored if residence dont have pvp true flag set"); NegativePotionEffects = GetConfig("Global.Optimizations.NegativePotionEffects", Arrays.asList("blindness", "confusion", "harm", "hunger", "poison", "slow", "slow_digging", "weakness", "wither"), writer, conf, false); + + NegativeLingeringPotionEffects = GetConfig("Global.Optimizations.NegativeLingeringPotionEffects", Arrays.asList("slowness", "long_slowness", "harming", "strong_harming", "poison", "long_poison", + "strong_poison", "weakness", "long_weakness"), writer, conf, false); writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); @@ -1298,6 +1302,9 @@ public List getBlockFallWorlds() { public List getNegativePotionEffects() { return NegativePotionEffects; } + public List getNegativeLingeringPotionEffects() { + return NegativeLingeringPotionEffects; + } public List getCleanWorlds() { return CleanWorlds; diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 82f8fec51..70339efb9 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -161,7 +161,7 @@ public void LoadLang(String lang) { GetConfig("Language.Select.Points", "&eSelect two points first before using this command!", writer, conf, true); GetConfig("Language.Select.Overlap", "&cSelected points overlap with &6%1 &cregion!", writer, conf, true); - GetConfig("Language.Select.WorldGuardOverlap", "&cSelected points overlap with &6%1 &c WorldGuard region!", writer, conf, true); + GetConfig("Language.Select.WorldGuardOverlap", "&cSelected points overlap with &6%1 &cWorldGuard region!", writer, conf, true); GetConfig("Language.Select.Success", "&eSelection Successful!", writer, conf, true); GetConfig("Language.Select.Fail", "&cInvalid select command...", writer, conf, true); GetConfig("Language.Select.Bedrock", "&eSelection expanded to your lowest allowed limit.", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/NMS.java b/src/com/bekvon/bukkit/residence/NMS.java index f356369d7..0ed227820 100644 --- a/src/com/bekvon/bukkit/residence/NMS.java +++ b/src/com/bekvon/bukkit/residence/NMS.java @@ -11,6 +11,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; public interface NMS { @@ -31,8 +32,12 @@ public interface NMS { public void addDefaultFlags(Map matUseFlagList); public boolean isPlate(Material mat); - + public boolean isMainHand(PlayerInteractEvent event); - + public Block getTargetBlock(Player player, int range); + + public ItemStack getLingeringPotionItem(Entity ent); + + public String getPotionType(ItemStack potion); } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index 90af58c65..c42ba9b2f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -24,6 +24,7 @@ import org.bukkit.entity.Wolf; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; @@ -111,8 +112,20 @@ public boolean isMainHand(PlayerInteractEvent event) { return true; } + @SuppressWarnings("deprecation") @Override public Block getTargetBlock(Player player, int range) { return player.getTargetBlock((HashSet) null, range); } + + @Override + public String getPotionType(ItemStack potion) { + return null; + } + + + @Override + public ItemStack getLingeringPotionItem(Entity ent) { + return null; + } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 628ed30c2..b2753e2a6 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -4,8 +4,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; - import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; @@ -26,6 +24,7 @@ import org.bukkit.entity.Wolf; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; @@ -113,8 +112,19 @@ public boolean isMainHand(PlayerInteractEvent event) { return true; } + @SuppressWarnings("deprecation") @Override public Block getTargetBlock(Player player, int range) { return player.getTargetBlock((HashSet) null, range); } + + @Override + public String getPotionType(ItemStack potion) { + return null; + } + + @Override + public ItemStack getLingeringPotionItem(Entity ent) { + return null; + } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java index 860d7db76..dc9f775f2 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8.java @@ -26,6 +26,7 @@ import org.bukkit.entity.Wolf; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; @@ -143,4 +144,14 @@ public boolean isMainHand(PlayerInteractEvent event) { public Block getTargetBlock(Player player, int range) { return player.getTargetBlock((Set) null, range); } + + @Override + public String getPotionType(ItemStack potion) { + return null; + } + + @Override + public ItemStack getLingeringPotionItem(Entity ent) { + return null; + } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9.java b/src/com/bekvon/bukkit/residence/allNms/v1_9.java index 488456652..01b6f8c80 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9.java @@ -8,6 +8,8 @@ import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_9_R1.entity.CraftThrownPotion; +import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftItemStack; import org.bukkit.entity.Bat; import org.bukkit.entity.Chicken; import org.bukkit.entity.Cow; @@ -27,9 +29,10 @@ import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; - +import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; +import net.minecraft.server.v1_9_R1.NBTTagCompound; public class v1_9 implements NMS { @Override @@ -144,4 +147,26 @@ public boolean isMainHand(PlayerInteractEvent event) { public Block getTargetBlock(Player player, int range) { return player.getTargetBlock((Set) null, range); } + + @Override + public String getPotionType(ItemStack potion) { + net.minecraft.server.v1_9_R1.ItemStack stack = CraftItemStack.asNMSCopy(potion); + NBTTagCompound tagCompound = stack.getTag(); + if (tagCompound == null) + return null; + if (tagCompound.getString("Potion").isEmpty()) + return null; + return tagCompound.getString("Potion").replace("minecraft:", ""); + } + + @Override + public ItemStack getLingeringPotionItem(Entity ent) { + + if (!(ent instanceof CraftThrownPotion)) + return null; + + CraftThrownPotion potion = (CraftThrownPotion) ent; + + return potion.getItem(); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index e45d5624e..e84a9ac48 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -1,10 +1,7 @@ package com.bekvon.bukkit.residence.commands; -import java.util.Set; - import org.bukkit.ChatColor; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.Sign; import org.bukkit.command.Command; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 7bcca6fac..c0cc5be43 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -7,6 +7,8 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -21,6 +23,7 @@ import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityInteractEvent; import org.bukkit.event.entity.PotionSplashEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -45,7 +48,9 @@ import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; +import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; +import org.bukkit.projectiles.ProjectileSource; public class ResidenceEntityListener implements Listener { @@ -536,6 +541,54 @@ public void onEntityExplode(EntityExplodeEvent event) { } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onLingeringPotionLaunch(ProjectileLaunchEvent event) { + + ItemStack item = Residence.getNms().getLingeringPotionItem(event.getEntity()); + + if (item == null) + return; + + Material lingering = Material.getMaterial("LINGERING_POTION"); + + if (lingering == null) + return; + + if (item.getType() != lingering) + return; + + String type = Residence.getNms().getPotionType(item); + + Debug.D("Type: " + type); + if (type == null) + return; + + boolean harmfull = false; + for (String oneHarm : Residence.getConfigManager().getNegativeLingeringPotionEffects()) { + if (oneHarm.equalsIgnoreCase(type)) { + harmfull = true; + break; + } + } + + if (!harmfull) + return; + + ProjectileSource shooter = event.getEntity().getShooter(); + + if (!(shooter instanceof Player)) + return; + + Player player = (Player) shooter; + + boolean srcpvp = Residence.getPermsByLoc(player.getLocation()).has("pvp", true); + + if (!srcpvp && !Residence.isResAdminOn(player)) { + event.setCancelled(true); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "pvp")); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSplashPotion(PotionSplashEvent event) { // disabling event on world diff --git a/src/plugin.yml b/src/plugin.yml index 33934925c..a2f9a290b 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.0.4 +version: 4.0.0.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 37a61be7cc35650315b95baaf8f83b7855350e65 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 12 Mar 2016 15:46:32 +0200 Subject: [PATCH 0132/1142] WorldGuard and DynMap fixes --- .../bekvon/bukkit/residence/Residence.java | 4 +- .../bukkit/residence/commands/create.java | 46 +++++++++---------- .../residence/dynmap/DynMapManager.java | 9 ++++ .../listeners/ResidencePlayerListener.java | 5 +- 4 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 2ead80cdd..458e3afee 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -603,9 +603,7 @@ public void run() { } Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); - if (wgplugin == null) { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldGuard NOT found!"); - } else { + if (wgplugin != null) { wg = (WorldGuardPlugin) wgplugin; Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldGuard"); } diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 882eeb189..93a34d713 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -28,36 +28,34 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } } if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.getWEplugin() != null && WorldGuardUtil.isSelectionInRegion(player) == null) { - Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence - .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); - return true; - } else if (Residence.getWEplugin() != null && WorldGuardUtil.isSelectionInRegion(player) != null) { - ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); - player.sendMessage(Residence.getLM().getMessage("Select.WorldGuardOverlap", Region.getId())); - - Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), Region - .getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); - - Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), Region - .getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); - - Residence.getSelectionManager().NewMakeBorders(player, lowLoc, highLoc, true); - Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() - .getPlayerLoc2(player.getName()), false); - } else if (Residence.getWEplugin() == null) { + if (Residence.wg != null) { + if (WorldGuardUtil.isSelectionInRegion(player) == null) { + Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence + .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); + return true; + } else { + ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); + player.sendMessage(Residence.getLM().getMessage("Select.WorldGuardOverlap", Region.getId())); + + Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), + Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); + + Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), + Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); + + Residence.getSelectionManager().NewMakeBorders(player, lowLoc, highLoc, true); + Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence + .getSelectionManager().getPlayerLoc2(player.getName()), false); + return true; + } + } else { Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); return true; - } else { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); - return true; } - } else { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); - return true; } + player.sendMessage(Residence.getLM().getMessage("Select.Points")); return true; } diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 74d88ad3e..733a8a592 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -53,6 +53,10 @@ public void run() { private String formatInfoWindow(String resid, ClaimedResidence res) { if (res == null) return null; + if (res.getName() == null) + return null; + if (res.getOwner() == null) + return null; String v = "
%regionname%
" + ChatColor.stripColor(Residence.getLM().getMessage("General.Owner", "")) + "%playerowners%
" @@ -178,6 +182,11 @@ else if (Residence.getTransactionManager().isForSale(resid)) private void handleResidence(String resid, ClaimedResidence res, Map newmap, int depth) { + if (res == null) + return; + if (res.getAreaList().length == 0) + return; + String id = resid + "%" + depth; if (Residence.getResidenceManager().getByName(resid) == null) { if (resareas.containsKey(id)) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 7efd87a42..5f3889673 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -98,9 +98,6 @@ public void reload() { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeShopDayNight(ResidenceFlagChangeEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; if (event.isCancelled()) return; @@ -180,7 +177,7 @@ public void onFlagGuiClose(InventoryCloseEvent event) { // disabling event on world if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) return; - if (GUI.size() == 0) + if (GUI.isEmpty()) return; HumanEntity player = event.getPlayer(); if (!GUI.containsKey(player.getName())) From 3907f9e627dc6dbf306d804321e4cacbf588c60d Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 13 Mar 2016 14:09:57 +0200 Subject: [PATCH 0133/1142] tnt and creeper explosions under 62 level --- .../bukkit/residence/ConfigManager.java | 37 +++++++- .../bukkit/residence/LocaleManager.java | 1 + .../bukkit/residence/commands/select.java | 6 +- .../listeners/ResidenceEntityListener.java | 84 ++++++++++++++++--- .../permissions/PermissionGroup.java | 4 +- .../protection/ResidencePermissions.java | 6 +- src/plugin.yml | 2 +- 7 files changed, 121 insertions(+), 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 895cb1871..36f023e8e 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -127,6 +127,10 @@ public class ConfigManager { protected boolean useVisualizer; protected boolean DisableListeners; protected boolean DisableCommands; + protected boolean TNTExplodeBelow; + protected int TNTExplodeBelowLevel; + protected boolean CreeperExplodeBelow; + protected int CreeperExplodeBelowLevel; protected List customContainers; protected List customBothClick; protected List customRightClick; @@ -494,8 +498,9 @@ void UpdateConfigFile() { "Potions containing one of thos effects will be ignored if residence dont have pvp true flag set"); NegativePotionEffects = GetConfig("Global.Optimizations.NegativePotionEffects", Arrays.asList("blindness", "confusion", "harm", "hunger", "poison", "slow", "slow_digging", "weakness", "wither"), writer, conf, false); - - NegativeLingeringPotionEffects = GetConfig("Global.Optimizations.NegativeLingeringPotionEffects", Arrays.asList("slowness", "long_slowness", "harming", "strong_harming", "poison", "long_poison", + + NegativeLingeringPotionEffects = GetConfig("Global.Optimizations.NegativeLingeringPotionEffects", Arrays.asList("slowness", "long_slowness", "harming", + "strong_harming", "poison", "long_poison", "strong_poison", "weakness", "long_weakness"), writer, conf, false); writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", @@ -589,6 +594,17 @@ void UpdateConfigFile() { writer.addComment("Global.LWC.Worlds", "Worlds to be included in check list"); AutoCleanUpWorlds = GetConfig("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + // TNT explosions below 63 + writer.addComment("Global.AntiGreef.TNT.ExplodeBelow", + "When set to true will allow tnt and minecart with tnt to explode below 62 (default) level outside of residence", + "This will allow mining with tnt and more vanilla play"); + TNTExplodeBelow = GetConfig("Global.AntiGreef.TNT.ExplodeBelow", false, writer, conf); + TNTExplodeBelowLevel = GetConfig("Global.AntiGreef.TNT.level", 62, writer, conf); + // Creeper explosions below 63 + writer.addComment("Global.AntiGreef.Creeper.ExplodeBelow", "When set to true will allow Creeper explode below 62 (default) level outside of residence", + "This will give more realistic game play"); + CreeperExplodeBelow = GetConfig("Global.AntiGreef.Creeper.ExplodeBelow", false, writer, conf); + CreeperExplodeBelowLevel = GetConfig("Global.AntiGreef.Creeper.level", 62, writer, conf); // Flow writer.addComment("Global.AntiGreef.Flow.Level", "Level from witch one to start lava and water flow blocking", "This dont have effect in residence area"); FlowLevel = GetConfig("Global.AntiGreef.Flow.Level", 63, writer, conf); @@ -891,6 +907,22 @@ private void load(FileConfiguration flags, FileConfiguration groups) { } } + public boolean isTNTExplodeBelow() { + return TNTExplodeBelow; + } + + public int getTNTExplodeBelowLevel() { + return TNTExplodeBelowLevel; + } + + public boolean isCreeperExplodeBelow() { + return CreeperExplodeBelow; + } + + public int getCreeperExplodeBelowLevel() { + return CreeperExplodeBelowLevel; + } + public boolean useVisualizer() { return useVisualizer; } @@ -1302,6 +1334,7 @@ public List getBlockFallWorlds() { public List getNegativePotionEffects() { return NegativePotionEffects; } + public List getNegativeLingeringPotionEffects() { return NegativeLingeringPotionEffects; } diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 70339efb9..8ec8bac39 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -177,6 +177,7 @@ public void LoadLang(String lang) { GetConfig("Language.Select.TotalSize", "&eSelection total size: &6%1", writer, conf, true); GetConfig("Language.Select.AutoEnabled", "&eAuto selection mode turned &6ON&e. To disable it write &6/res select auto", writer, conf, true); GetConfig("Language.Select.AutoDisabled", "&eAuto selection mode turned &6OFF&e. To enable it again write &6/res select auto", writer, conf, true); + GetConfig("Language.Select.Disabled", "&cYou don't have access to selections commands", writer, conf, true); GetConfig("Language.Sign.Updated", "&6%1 &esigns updated!", writer, conf, true); GetConfig("Language.Sign.TopLine", "[market]", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 4f237cdc6..6d414f065 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -26,16 +26,16 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Player player = (Player) sender; PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (!group.selectCommandAccess() && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("SelectDiabled")); + player.sendMessage(Residence.getLM().getMessage("Select.Disabled")); return true; } if (!group.canCreateResidences() && group.getMaxSubzoneDepth(player.getName()) <= 0 && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("SelectDiabled")); + player.sendMessage(Residence.getLM().getMessage("Select.Disabled")); return true; } if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player .isPermissionSet("residence.select")) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("SelectDiabled")); + player.sendMessage(Residence.getLM().getMessage("Select.Disabled")); return true; } if (args.length == 2) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index c0cc5be43..f156f29a2 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -431,15 +431,41 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { switch (entity) { case CREEPER: if (!perms.has("creeper", perms.has("explode", true))) { - event.setCancelled(true); - event.getEntity().remove(); + if (Residence.getConfigManager().isCreeperExplodeBelow()) { + if (event.getEntity().getLocation().getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) { + event.setCancelled(true); + event.getEntity().remove(); + } else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getEntity().getLocation()); + if (res != null) { + event.setCancelled(true); + event.getEntity().remove(); + } + } + } else { + event.setCancelled(true); + event.getEntity().remove(); + } } break; case PRIMED_TNT: case MINECART_TNT: if (!perms.has("tnt", perms.has("explode", true))) { - event.setCancelled(true); - event.getEntity().remove(); + if (Residence.getConfigManager().isTNTExplodeBelow()) { + if (event.getEntity().getLocation().getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) { + event.setCancelled(true); + event.getEntity().remove(); + } else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getEntity().getLocation()); + if (res != null) { + event.setCancelled(true); + event.getEntity().remove(); + } + } + } else { + event.setCancelled(true); + event.getEntity().remove(); + } } break; case SMALL_FIREBALL: @@ -476,12 +502,31 @@ public void onEntityExplode(EntityExplodeEvent event) { switch (entity) { case CREEPER: if (!perms.has("creeper", perms.has("explode", true))) - cancel = true; + if (Residence.getConfigManager().isCreeperExplodeBelow()) { + if (event.getEntity().getLocation().getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) + cancel = true; + else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getEntity().getLocation()); + if (res != null) + cancel = true; + } + } else + cancel = true; break; case PRIMED_TNT: case MINECART_TNT: - if (!perms.has("tnt", perms.has("explode", true))) - cancel = true; + if (!perms.has("tnt", perms.has("explode", true))) { + if (Residence.getConfigManager().isTNTExplodeBelow()) { + if (event.getEntity().getLocation().getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) + cancel = true; + else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getEntity().getLocation()); + if (res != null) + cancel = true; + } + } else + cancel = true; + } break; case SMALL_FIREBALL: case FIREBALL: @@ -508,12 +553,31 @@ public void onEntityExplode(EntityExplodeEvent event) { switch (entity) { case CREEPER: if (!blockperms.has("creeper", blockperms.has("explode", true))) - preserve.add(block); + if (Residence.getConfigManager().isCreeperExplodeBelow()) { + if (block.getY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) + preserve.add(block); + else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (res != null) + preserve.add(block); + } + } else + preserve.add(block); continue; case PRIMED_TNT: case MINECART_TNT: - if (!blockperms.has("tnt", blockperms.has("explode", true))) - preserve.add(block); + if (!blockperms.has("tnt", blockperms.has("explode", true))) { + if (Residence.getConfigManager().isTNTExplodeBelow()) { + if (block.getY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) + preserve.add(block); + else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (res != null) + preserve.add(block); + } + } else + preserve.add(block); + } continue; case ENDER_DRAGON: if (!blockperms.has("dragongrief", false)) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 227966d09..f1fbdaa62 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -309,7 +309,7 @@ public boolean itemListAccess() { } public void printLimits(Player player, OfflinePlayer target, boolean resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.Seperator")); + player.sendMessage(Residence.getLM().getMessage("General.Separator")); player.sendMessage(Residence.getLM().getMessage("Limits.PGroup", Residence.getPermissionManager().getPermissionsGroup(target.getName(), Residence.getConfigManager().getDefaultWorld()))); player.sendMessage(Residence.getLM().getMessage("Limits.RGroup", groupname)); @@ -336,7 +336,7 @@ public void printLimits(Player player, OfflinePlayer target, boolean resadmin) { player.sendMessage(Residence.getLM().getMessage("Limits.Flag", leaseGiveTime)); player.sendMessage(Residence.getLM().getMessage("Limits.Flag", renewcostperarea)); } - player.sendMessage(Residence.getLM().getMessage("General.Seperator")); + player.sendMessage(Residence.getLM().getMessage("General.Separator")); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 3a339e060..82260914e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -357,11 +357,15 @@ public void applyDefaultFlags() { } public void setOwner(String newOwner, boolean resetFlags) { - ownerLastKnownName = newOwner; ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); Residence.getServ().getPluginManager().callEvent(ownerchange); + Residence.getPlayerManager().removeResFromPlayer(ownerLastKnownName, residence.getName()); + Residence.getPlayerManager().addResidence(newOwner, residence); + + ownerLastKnownName = newOwner; + if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase(Residence.getServerLandname())) { ownerUUID = UUID.fromString(Residence.getServerLandUUID());// the UUID for server owned land } else { diff --git a/src/plugin.yml b/src/plugin.yml index a2f9a290b..f925f7432 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.0.5 +version: 4.0.1.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From c5f7c99774069920415bd89feb30f20f095609b0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 14 Mar 2016 18:53:42 +0200 Subject: [PATCH 0134/1142] Dynmap fix, 2 new events --- .../bukkit/residence/LocaleManager.java | 2 +- .../residence/dynmap/DynMapListeners.java | 41 ++++-- .../residence/dynmap/DynMapManager.java | 132 ++++++++++------- .../residence/economy/TransactionManager.java | 12 ++ .../residence/economy/rent/RentManager.java | 14 +- .../event/ResidenceAreaAddEvent.java | 45 ++++++ .../event/ResidenceAreaDeleteEvent.java | 32 ++++ .../protection/ClaimedResidence.java | 19 +++ .../residence/protection/LeaseManager.java | 2 + .../protection/ResidenceManager.java | 137 ++++++++++-------- 10 files changed, 313 insertions(+), 123 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/event/ResidenceAreaAddEvent.java create mode 100644 src/com/bekvon/bukkit/residence/event/ResidenceAreaDeleteEvent.java diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 8ec8bac39..425c7e854 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -146,7 +146,7 @@ public void LoadLang(String lang) { GetConfig("Language.Area.InvalidName", "&cInvalid Area Name...", writer, conf, true); GetConfig("Language.Area.ToSmallTotal", "&cSelected area smaller than allowed minimal (&6%1&c)", writer, conf, true); GetConfig("Language.Area.ToSmallX", "&cYour &6X &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more.", writer, conf, true); - GetConfig("Language.Area.ToSmallY", "&cYour selection height (&6%1&c) is too small. &eAllowed &6%2 and more.", writer, conf, true); + GetConfig("Language.Area.ToSmallY", "&cYour selection height (&6%1&c) is too small. &eAllowed &6%2 &eand more.", writer, conf, true); GetConfig("Language.Area.ToSmallZ", "&cYour &6Z &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more.", writer, conf, true); GetConfig("Language.Area.Rename", "&eRenamed area &6%1 &eto &6%2", writer, conf, true); GetConfig("Language.Area.Remove", "&eRemoved area &6%1...", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java index 5473435ca..ba2263602 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java @@ -5,7 +5,8 @@ import org.bukkit.event.Listener; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; +import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; +import com.bekvon.bukkit.residence.event.ResidenceAreaDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; @@ -13,45 +14,65 @@ import com.bekvon.bukkit.residence.event.ResidenceRentEvent; import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; +import com.bekvon.bukkit.residence.utils.Debug; public class DynMapListeners implements Listener { +// @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) +// public void onResidenceCreate(ResidenceCreationEvent event) { +// Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); +// } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceAreaAdd(ResidenceAreaAddEvent event) { + Debug.D("Event : " + event.getEventName()); + Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceCreate(ResidenceCreationEvent event) { - Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + public void onResidenceAreaDelete(ResidenceAreaDeleteEvent event) { + Debug.D("Event : " + event.getEventName()); + Residence.getDynManager().fireUpdateRemove(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceSubZoneCreate(ResidenceSubzoneCreationEvent event) { - Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + Debug.D("Event : " + event.getEventName()); + Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceFlagChange(ResidenceFlagChangeEvent event) { - Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + Debug.D("Event : " + event.getEventName()); + Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceDelete(ResidenceDeleteEvent event) { - Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + Debug.D("Event : " + event.getEventName()); + Residence.getDynManager().fireUpdateRemove(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceOwnerChange(ResidenceOwnerChangeEvent event) { - Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + Debug.D("Event : " + event.getEventName()); + Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceRename(ResidenceRenameEvent event) { - Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + Debug.D("Event : " + event.getEventName()); + Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceRent(ResidenceRentEvent event) { - Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + Debug.D("Event : " + event.getEventName()); + Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceSizeChange(ResidenceSizeChangeEvent event) { - Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); + Debug.D("Event : " + event.getEventName()); + Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } } diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 733a8a592..553cc99e2 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -17,6 +17,7 @@ import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.economy.rent.RentManager; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.ResidencePermissions; import com.bekvon.bukkit.residence.utils.GetTime; @@ -27,6 +28,7 @@ public class DynMapManager { MarkerAPI markerapi; MarkerSet set; private Map resareas = new HashMap(); + private int schedId = -1; public DynMapManager(Residence plugin) { this.plugin = plugin; @@ -36,21 +38,34 @@ public MarkerSet getMarkerSet() { return set; } - public void fireUpdate(final ClaimedResidence res, final int deep) { + public void fireUpdateAdd(final ClaimedResidence res, final int deep) { if (api == null || set == null) return; if (res == null) return; - final String name = res.getName(); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + + if (schedId != -1) + Bukkit.getServer().getScheduler().cancelTask(schedId); + + schedId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { public void run() { - handleResidence(name, res, resareas, deep); + schedId = -1; + handleResidenceAdd(res.getName(), res, resareas, deep); return; } - }, 20L); + }, 10L); + } + + public void fireUpdateRemove(final ClaimedResidence res, final int deep) { + if (api == null || set == null) + return; + if (res == null) + return; + + handleResidenceRemove(res.getName(), res, resareas, deep); } - private String formatInfoWindow(String resid, ClaimedResidence res) { + private String formatInfoWindow(String resid, ClaimedResidence res, String resName) { if (res == null) return null; if (res.getName() == null) @@ -79,7 +94,7 @@ private String formatInfoWindow(String resid, ClaimedResidence res) { + ChatColor.stripColor(Residence.getLM().getMessage("General.Owner", "")) + "%playerowners%
" + ChatColor.stripColor(Residence.getLM().getMessage("Economy.SellAmount", "")) + "%price%
"; - v = v.replace("%regionname%", res.getName()); + v = v.replace("%regionname%", resName); v = v.replace("%playerowners%", res.getOwner()); String m = res.getEnterMessage(); v = v.replace("%entermsg%", (m != null) ? m : ""); @@ -180,65 +195,81 @@ else if (Residence.getTransactionManager().isForSale(resid)) m.setRangeY(as.y, as.y); } - private void handleResidence(String resid, ClaimedResidence res, Map newmap, int depth) { + private void handleResidenceAdd(String resid, ClaimedResidence res, Map newmap, int depth) { if (res == null) return; - if (res.getAreaList().length == 0) - return; - String id = resid + "%" + depth; - if (Residence.getResidenceManager().getByName(resid) == null) { - if (resareas.containsKey(id)) { - AreaMarker marker = resareas.remove(id); - marker.deleteMarker(); - return; + for (Entry oneArea : res.getAreaMap().entrySet()) { + + String id = oneArea.getKey() + "." + resid; + + String name = res.getName(); + double[] x = new double[2]; + double[] z = new double[2]; + + String resName = res.getName(); + + if (res.getAreaMap().size() > 1) { + resName = res.getName() + " (" + oneArea.getKey() + ")"; } - } - String name = res.getName(); - double[] x = new double[2]; - double[] z = new double[2]; + String desc = formatInfoWindow(resid, res, resName); - String desc = formatInfoWindow(resid, res); + if (!isVisible(resid, res.getWorld())) + return; - if (!isVisible(resid, res.getWorld())) - return; + Location l0 = oneArea.getValue().getLowLoc(); + Location l1 = oneArea.getValue().getHighLoc(); - Location l0 = res.getAreaArray()[0].getLowLoc(); - Location l1 = res.getAreaArray()[0].getHighLoc(); + x[0] = l0.getX(); + z[0] = l0.getZ(); + x[1] = l1.getX() + 1.0; + z[1] = l1.getZ() + 1.0; + AreaMarker marker = null; - x[0] = l0.getX(); - z[0] = l0.getZ(); - x[1] = l1.getX() + 1.0; - z[1] = l1.getZ() + 1.0; + if (resareas.containsKey(id)) { + marker = resareas.get(id); + resareas.remove(id); + marker.deleteMarker(); + } - AreaMarker marker = resareas.remove(id); - if (Residence.getResidenceManager().getByName(res.getName()) == null) { - marker.deleteMarker(); - return; - } - if (marker == null) { - marker = set.createAreaMarker(id, name, false, res.getWorld(), x, z, false); + marker = set.createAreaMarker(id, name, true, res.getWorld(), x, z, false); if (marker == null) return; - } else { - marker.setCornerLocations(x, z); - marker.setLabel(name); + + if (Residence.getConfigManager().DynMapLayer3dRegions) + marker.setRangeY(l1.getY() + 1.0, l0.getY()); + + marker.setDescription(desc); + addStyle(resid, marker); + newmap.put(id, marker); + + if (depth <= Residence.getConfigManager().DynMapLayerSubZoneDepth) { + List subids = res.getSubzones(); + for (ClaimedResidence one : subids) { + handleResidenceAdd(one.getName(), one, newmap, depth + 1); + } + } } + } - if (Residence.getConfigManager().DynMapLayer3dRegions) - marker.setRangeY(l1.getY() + 1.0, l0.getY()); + private void handleResidenceRemove(String resid, ClaimedResidence res, Map newmap, int depth) { - marker.setDescription(desc); - addStyle(resid, marker); - newmap.put(id, marker); + if (res == null) + return; - if (depth < Residence.getConfigManager().DynMapLayerSubZoneDepth) { - List subids = res.getSubzones(); - for (ClaimedResidence one : subids) { - id = resid + "." + one.getSubzoneDeep(); - handleResidence(id, one, newmap, depth + 1); + for (Entry oneArea : res.getAreaMap().entrySet()) { + String id = oneArea.getKey() + "." + resid; + if (resareas.containsKey(id)) { + AreaMarker marker = resareas.remove(id); + marker.deleteMarker(); + } + if (depth <= Residence.getConfigManager().DynMapLayerSubZoneDepth + 1) { + List subids = res.getSubzones(); + for (ClaimedResidence one : subids) { + handleResidenceRemove(one.getName(), one, newmap, depth + 1); + } } } } @@ -270,7 +301,8 @@ public void activate() { Bukkit.getConsoleSender().sendMessage("[Residence] DynMap residence activated!"); for (Entry one : Residence.getResidenceManager().getResidences().entrySet()) { - Residence.getDynManager().fireUpdate(one.getValue(), one.getValue().getSubzoneDeep()); + Residence.getDynManager().fireUpdateAdd(one.getValue(), one.getValue().getSubzoneDeep()); + handleResidenceAdd(one.getValue().getName(), one.getValue(), resareas, one.getValue().getSubzoneDeep()); } } } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 7e6fb4d5b..f3fded2b2 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -86,6 +86,9 @@ public void putForSale(String areaname, Player player, int amount, boolean resad player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } + + areaname = area.getName(); + if (!area.isOwner(player) && !resadmin) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; @@ -111,6 +114,9 @@ public boolean putForSale(String areaname, int amount) { if (area == null) { return false; } + + areaname = area.getName(); + if (sellAmount.containsKey(areaname)) { return false; } @@ -138,6 +144,9 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { sellAmount.remove(areaname); return; } + + areaname = res.getName(); + if (res.getPermissions().getOwner().equals(player.getName())) { player.sendMessage(Residence.getLM().getMessage("Economy.OwnerBuyFail")); return; @@ -202,6 +211,9 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { public void removeFromSale(Player player, String areaname, boolean resadmin) { ClaimedResidence area = manager.getByName(areaname); if (area != null) { + + areaname = area.getName(); + if (!isForSale(areaname)) { player.sendMessage(Residence.getLM().getMessage("Residence.NotForSale")); return; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 64c0a4622..dd3465a35 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -21,7 +21,7 @@ import java.util.Set; import org.bukkit.entity.Player; -public class RentManager implements MarketRentInterface{ +public class RentManager implements MarketRentInterface { protected Map rentedLand; protected Map rentableLand; @@ -67,6 +67,9 @@ public void setForRent(Player player, String landName, int amount, int days, boo player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } + + landName = res.getName(); + if (!resadmin) { if (!res.getPermissions().hasResidencePermission(player, true)) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); @@ -115,6 +118,9 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } + + landName = res.getName(); + PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (!resadmin && this.getRentCount(player.getName()) >= group.getMaxRents(player.getName())) { player.sendMessage(Residence.getLM().getMessage("Residence.MaxRent")); @@ -205,6 +211,9 @@ public void unrent(Player player, String landName, boolean resadmin) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } + + landName = res.getName(); + if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; @@ -336,6 +345,9 @@ public void setRentRepeatable(Player player, String landName, boolean value, boo RentableLand land = rentableLand.get(landName); ClaimedResidence res = Residence.getResidenceManager().getByName(landName); if (land != null && res != null && (res.isOwner(player) || resadmin)) { + + landName = res.getName(); + land.repeatable = value; if (!value && this.isRented(landName)) rentedLand.get(landName).autoRefresh = false; diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceAreaAddEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceAreaAddEvent.java new file mode 100644 index 000000000..e331a6623 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/event/ResidenceAreaAddEvent.java @@ -0,0 +1,45 @@ +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class ResidenceAreaAddEvent extends CancellableResidencePlayerEvent { + + private static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + protected String resname; + CuboidArea area; + + public ResidenceAreaAddEvent(Player player, String newname, ClaimedResidence resref, CuboidArea resarea) { + super("RESIDENCE_AREA_ADD", resref, player); + resname = newname; + area = resarea; + } + + public String getResidenceName() { + return resname; + } + +// public void setResidenceName(String name) { +// resname = name; +// } + + public CuboidArea getPhysicalArea() { + return area; + } + +// public void setPhysicalArea(CuboidArea newarea) { +// area = newarea; +// } +} diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceAreaDeleteEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceAreaDeleteEvent.java new file mode 100644 index 000000000..6fc7621ad --- /dev/null +++ b/src/com/bekvon/bukkit/residence/event/ResidenceAreaDeleteEvent.java @@ -0,0 +1,32 @@ +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class ResidenceAreaDeleteEvent extends CancellableResidencePlayerEvent { + + private static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + DeleteCause cause; + + public ResidenceAreaDeleteEvent(Player player, ClaimedResidence resref, DeleteCause delcause) { + super("RESIDENCE_AREA_DELETE", resref, player); + cause = delcause; + } + + public DeleteCause getCause() { + return cause; + } + +} diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 6337fcf54..ed00f8815 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -9,9 +9,12 @@ import com.bekvon.bukkit.residence.containers.RandomLoc; import com.bekvon.bukkit.residence.economy.ResidenceBank; import com.bekvon.bukkit.residence.economy.TransactionManager; +import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; +import com.bekvon.bukkit.residence.event.ResidenceAreaDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceTPEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.itemlist.ItemList.ListType; import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -232,6 +235,12 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } } } + + ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, name, this, area); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + Residence.getResidenceManager().removeChunkList(getName()); areas.put(name, area); Residence.getResidenceManager().calculateChunks(getName()); @@ -643,6 +652,10 @@ public CuboidArea[] getAreaArray() { return temp; } + public Map getAreaMap() { + return areas; + } + public ResidencePermissions getPermissions() { return perms; } @@ -1056,6 +1069,12 @@ public void removeArea(Player player, String id, boolean resadmin) { player.sendMessage(Residence.getLM().getMessage("Area.RemoveLast")); return; } + + ResidenceAreaDeleteEvent resevent = new ResidenceAreaDeleteEvent(player, this, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; + removeArea(id); player.sendMessage(Residence.getLM().getMessage("Area.Remove")); } else { diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index 1db86a659..f02507339 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -69,6 +69,7 @@ public void renewArea(String area, Player player) { if (econ != null) { double cost = limits.getLeaseRenewCost(); ClaimedResidence res = manager.getByName(area); + area = res.getName(); int amount = (int) Math.ceil((double) res.getTotalSize() * cost); if (cost != 0D) { //Account account = iConomy.getBank().getAccount(player.getName()); @@ -130,6 +131,7 @@ public void doExpirations() { if (res == null) { it.remove(); } else { + resname = res.getName(); boolean renewed = false; String owner = res.getPermissions().getOwner(); PermissionGroup limits = Residence.getPermissionManager().getGroup(owner, res.getPermissions().getWorld()); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 98d7109e0..27b296150 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -29,6 +29,7 @@ import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceManager implements ResidenceInterface { protected Map residences; @@ -395,89 +396,95 @@ public void removeResidence(String name) { @SuppressWarnings("deprecation") public void removeResidence(Player player, String name, boolean resadmin) { + + Debug.D("" + name); + ClaimedResidence res = this.getByName(name); - if (res != null) { - if (player != null && !resadmin) { - if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); - return; - } - } - ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - Residence.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) { + if (res == null) { + if (player != null) + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return; + } + + name = res.getName(); + + if (player != null && !resadmin) { + if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } - ClaimedResidence parent = res.getParent(); - if (parent == null) { - removeChunkList(name); - residences.remove(name); + } + + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; + + ClaimedResidence parent = res.getParent(); + if (parent == null) { + removeChunkList(name); + residences.remove(name); - if (Residence.getConfigManager().isUseClean() && Residence.getConfigManager().getCleanWorlds().contains(res.getWorld())) { - CuboidArea area = res.getAreaArray()[0]; + if (Residence.getConfigManager().isUseClean() && Residence.getConfigManager().getCleanWorlds().contains(res.getWorld())) { + CuboidArea area = res.getAreaArray()[0]; - Location low = area.getLowLoc(); - Location high = area.getHighLoc(); + Location low = area.getLowLoc(); + Location high = area.getHighLoc(); - if (high.getBlockY() > Residence.getConfigManager().getCleanLevel()) { + if (high.getBlockY() > Residence.getConfigManager().getCleanLevel()) { - if (low.getBlockY() < Residence.getConfigManager().getCleanLevel()) - low.setY(Residence.getConfigManager().getCleanLevel()); + if (low.getBlockY() < Residence.getConfigManager().getCleanLevel()) + low.setY(Residence.getConfigManager().getCleanLevel()); - World world = low.getWorld(); + World world = low.getWorld(); - Location temploc = new Location(world, low.getBlockX(), low.getBlockY(), low.getBlockZ()); + Location temploc = new Location(world, low.getBlockX(), low.getBlockY(), low.getBlockZ()); - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - temploc.setX(x); - for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { - temploc.setY(y); - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - temploc.setZ(z); - if (Residence.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getTypeId())) { - temploc.getBlock().setTypeId(0); - } + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + temploc.setX(x); + for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { + temploc.setY(y); + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + temploc.setZ(z); + if (Residence.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getTypeId())) { + temploc.getBlock().setTypeId(0); } } } } } + } - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Residence.Remove", name)); - } + if (player != null) + player.sendMessage(Residence.getLM().getMessage("Residence.Remove", name)); + + } else { + String[] split = name.split("\\."); + if (player != null) { + parent.removeSubzone(player, split[split.length - 1], true); } else { - String[] split = name.split("\\."); - if (player != null) { - parent.removeSubzone(player, split[split.length - 1], true); - } else { - parent.removeSubzone(split[split.length - 1]); - } + parent.removeSubzone(split[split.length - 1]); } + } - // Residence.getLeaseManager().removeExpireTime(name); - causing - // concurrent modification exception in lease manager... worked - // around for now + // Residence.getLeaseManager().removeExpireTime(name); - causing + // concurrent modification exception in lease manager... worked + // around for now - for (String oneSub : res.getSubzoneList()) { - Residence.getPlayerManager().removeResFromPlayer(res.getOwner(), name + "." + oneSub); - Residence.getRentManager().removeRentable(name + "." + oneSub); - Residence.getTransactionManager().removeFromSale(name + "." + oneSub); - } + for (String oneSub : res.getSubzoneList()) { + Residence.getPlayerManager().removeResFromPlayer(res.getOwner(), name + "." + oneSub); + Residence.getRentManager().removeRentable(name + "." + oneSub); + Residence.getTransactionManager().removeFromSale(name + "." + oneSub); + } - Residence.getPlayerManager().removeResFromPlayer(res.getOwner(), name); + Residence.getPlayerManager().removeResFromPlayer(res.getOwner(), name); - Residence.getRentManager().removeRentable(name); - Residence.getTransactionManager().removeFromSale(name); + Residence.getRentManager().removeRentable(name); + Residence.getTransactionManager().removeFromSale(name); - if (parent == null && Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().useResMoneyBack()) { - int chargeamount = (int) Math.ceil((double) res.getAreaArray()[0].getSize() * res.getBlockSellPrice()); - TransactionManager.giveEconomyMoney(player, chargeamount); - } - } else { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); - } + if (parent == null && Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().useResMoneyBack()) { + int chargeamount = (int) Math.ceil((double) res.getAreaArray()[0].getSize() * res.getBlockSellPrice()); + TransactionManager.giveEconomyMoney(player, chargeamount); } } @@ -515,7 +522,6 @@ public boolean hasMaxZones(String player, int target) { int count = getOwnedZoneCount(player); if (count >= target) return false; - return true; } @@ -525,6 +531,9 @@ public void printAreaInfo(String areaname, Player player) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } + + areaname = res.getName(); + player.sendMessage(Residence.getLM().getMessage("General.Separator")); ResidencePermissions perms = res.getPermissions(); @@ -740,6 +749,9 @@ public boolean renameResidence(Player player, String oldName, String newName, bo } return false; } + + oldName = res.getName(); + if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { if (res.getParent() == null) { if (Residence.getConfigManager().isResCreateCaseSensitive()) { @@ -797,6 +809,9 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, reqPlayer.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } + + residence = res.getName(); + if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { reqPlayer.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; From 5401d75f3e1685ba7100b4a60a888987aafce766 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 14 Mar 2016 18:57:02 +0200 Subject: [PATCH 0135/1142] Cleanup --- .../bukkit/residence/dynmap/DynMapListeners.java | 14 -------------- src/plugin.yml | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java index ba2263602..c453a21ca 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java @@ -14,65 +14,51 @@ import com.bekvon.bukkit.residence.event.ResidenceRentEvent; import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; -import com.bekvon.bukkit.residence.utils.Debug; public class DynMapListeners implements Listener { -// @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) -// public void onResidenceCreate(ResidenceCreationEvent event) { -// Residence.getDynManager().fireUpdate(event.getResidence(), event.getResidence().getSubzoneDeep()); -// } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceAreaAdd(ResidenceAreaAddEvent event) { - Debug.D("Event : " + event.getEventName()); Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceAreaDelete(ResidenceAreaDeleteEvent event) { - Debug.D("Event : " + event.getEventName()); Residence.getDynManager().fireUpdateRemove(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceSubZoneCreate(ResidenceSubzoneCreationEvent event) { - Debug.D("Event : " + event.getEventName()); Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceFlagChange(ResidenceFlagChangeEvent event) { - Debug.D("Event : " + event.getEventName()); Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceDelete(ResidenceDeleteEvent event) { - Debug.D("Event : " + event.getEventName()); Residence.getDynManager().fireUpdateRemove(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceOwnerChange(ResidenceOwnerChangeEvent event) { - Debug.D("Event : " + event.getEventName()); Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceRename(ResidenceRenameEvent event) { - Debug.D("Event : " + event.getEventName()); Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceRent(ResidenceRentEvent event) { - Debug.D("Event : " + event.getEventName()); Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceSizeChange(ResidenceSizeChangeEvent event) { - Debug.D("Event : " + event.getEventName()); Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } } diff --git a/src/plugin.yml b/src/plugin.yml index f925f7432..5d396bfbb 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.1.0 +version: 4.0.2.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 84e4812951077eb690058b29a3bab4370fef1649 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 20 Mar 2016 13:00:24 +0200 Subject: [PATCH 0136/1142] Ignore move/tp false flags if you are owner --- .../listeners/ResidencePlayerListener.java | 6 +++--- .../residence/protection/ClaimedResidence.java | 14 ++++++++++---- src/plugin.yml | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 5f3889673..ad909956a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -911,7 +911,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { String areaname = res.getName(); - if (!res.getPermissions().playerHas(player.getName(), "move", true)) { + if (!res.getPermissions().playerHas(player.getName(), "move", true) && !res.isOwner(player)) { event.setCancelled(true); player.sendMessage(Residence.getLM().getMessage("Residence.MoveDeny", areaname)); return; @@ -925,7 +925,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { } } if (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND && Residence.getConfigManager().isBlockAnyTeleportation()) { - if (!res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { String areaname = res.getName(); event.setCancelled(true); player.sendMessage(Residence.getLM().getMessage("General.TeleportDeny", areaname)); @@ -1070,7 +1070,7 @@ public void run() { } if (move) { - if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player)) { + if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player) && !res.isOwner(player)) { Location lastLoc = lastOutsideLoc.get(pname); if (Residence.getConfigManager().BounceAnimation()) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index ed00f8815..c90420792 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -20,10 +20,12 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import java.util.Random; @@ -758,13 +760,13 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { List randomLocList = new ArrayList(); - for (int z = 0; z < area.getZSize(); z++) { - randomLocList.add(new RandomLoc(area.getLowLoc().getX() - 1, 0, area.getLowLoc().getZ() + z)); + for (int z = -1; z < area.getZSize() + 1; z++) { + randomLocList.add(new RandomLoc(area.getLowLoc().getX(), 0, area.getLowLoc().getZ() + z)); randomLocList.add(new RandomLoc(area.getLowLoc().getX() + area.getXSize(), 0, area.getLowLoc().getZ() + z)); } for (int x = -1; x < area.getXSize() + 1; x++) { - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ() - 1)); + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ())); randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ() + area.getZSize())); } @@ -777,6 +779,8 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { it++; Random ran = new Random(System.currentTimeMillis()); + if (randomLocList.isEmpty()) + break; int check = ran.nextInt(randomLocList.size()); RandomLoc place = randomLocList.get(check); randomLocList.remove(check); @@ -948,7 +952,7 @@ public int isSafeTp(Player player) { public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { boolean isAdmin = Residence.isResAdminOn(reqPlayer); - if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass")) { + if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") && !this.isOwner(targetPlayer)) { PermissionGroup group = Residence.getPermissionManager().getGroup(reqPlayer); if (!group.hasTpAccess()) { reqPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportDeny")); @@ -1105,8 +1109,10 @@ public Map save() { root.put("Subzones", subzonemap); root.put("Permissions", perms.save()); DecimalFormat formatter = new DecimalFormat("#0.00"); + formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); if (tpLoc != null) { Map tpmap = new HashMap<>(); + tpmap.put("X", Double.valueOf(formatter.format(tpLoc.getX()))); tpmap.put("Y", Double.valueOf(formatter.format(tpLoc.getY()))); tpmap.put("Z", Double.valueOf(formatter.format(tpLoc.getZ()))); diff --git a/src/plugin.yml b/src/plugin.yml index 5d396bfbb..744ff8ae9 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.2.0 +version: 4.0.2.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 0528969242ca6684b8dd037fe19cda19858fed27 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 24 Mar 2016 16:06:51 +0200 Subject: [PATCH 0137/1142] Lingering potion handling --- .../bukkit/residence/ConfigManager.java | 5 +- .../bekvon/bukkit/residence/Residence.java | 8 + .../bukkit/residence/allNms/v1_9Events.java | 79 ++++++++ .../listeners/ResidenceEntityListener.java | 169 ++++++++---------- src/plugin.yml | 2 +- 5 files changed, 167 insertions(+), 96 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_9Events.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 36f023e8e..481434980 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -499,9 +499,8 @@ void UpdateConfigFile() { NegativePotionEffects = GetConfig("Global.Optimizations.NegativePotionEffects", Arrays.asList("blindness", "confusion", "harm", "hunger", "poison", "slow", "slow_digging", "weakness", "wither"), writer, conf, false); - NegativeLingeringPotionEffects = GetConfig("Global.Optimizations.NegativeLingeringPotionEffects", Arrays.asList("slowness", "long_slowness", "harming", - "strong_harming", "poison", "long_poison", - "strong_poison", "weakness", "long_weakness"), writer, conf, false); + NegativeLingeringPotionEffects = GetConfig("Global.Optimizations.NegativeLingeringPotions", Arrays.asList("slowness", "instant_damage", "poison", "slowness"), + writer, conf, false); writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 458e3afee..d270323b7 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -52,6 +52,7 @@ import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; import com.bekvon.bukkit.residence.listeners.ResidenceFixesListener; import com.bekvon.bukkit.residence.allNms.v1_8Events; +import com.bekvon.bukkit.residence.allNms.v1_9Events; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; @@ -75,6 +76,7 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.CrackShot; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.TabComplete; @@ -629,6 +631,12 @@ public void run() { // 1.8 event if (VersionChecker.GetVersion() >= 1800) pm.registerEvents(new v1_8Events(), this); + + // 1.9 event + if (VersionChecker.GetVersion() >= 1900) + pm.registerEvents(new v1_9Events(), this); + + Debug.D("Residence version: " + VersionChecker.GetVersion()); // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, // Priority.NORMAL, this); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java new file mode 100644 index 000000000..2bb0599bf --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -0,0 +1,79 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.Iterator; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.AreaEffectCloudApplyEvent; +import org.bukkit.event.entity.LingeringPotionSplashEvent; +import org.bukkit.potion.PotionData; +import org.bukkit.potion.PotionEffect; + +import com.bekvon.bukkit.residence.Residence; + +public class v1_9Events implements Listener { + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + boolean harmfull = false; + mein: for (PotionEffect one : event.getEntity().getEffects()) { + for (String oneHarm : Residence.getConfigManager().getNegativePotionEffects()) { + if (oneHarm.equalsIgnoreCase(one.getType().getName())) { + harmfull = true; + break mein; + } + } + } + if (!harmfull) + return; + + Entity ent = event.getEntity(); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); + if (!srcpvp) + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { + + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + + boolean harmfull = false; + for (String oneHarm : Residence.getConfigManager().getNegativeLingeringPotionEffects()) { + if (((PotionData) event.getEntity().getBasePotionData()).getType().name().equalsIgnoreCase(oneHarm)) { + harmfull = true; + break; + } + } + + if (!harmfull) + return; + + Entity ent = event.getEntity(); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); + Iterator it = event.getAffectedEntities().iterator(); + while (it.hasNext()) { + LivingEntity target = it.next(); + if (!(target instanceof Player)) + continue; + Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has("pvp", true); + if (!srcpvp || !tgtpvp) { + event.getAffectedEntities().remove(target); + event.getEntity().remove(); + break; + } + } + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index f156f29a2..ff96419f0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -39,6 +39,7 @@ import org.bukkit.entity.Vehicle; import org.bukkit.entity.Slime; import org.bukkit.entity.Ghast; +import org.bukkit.entity.Hanging; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -84,9 +85,11 @@ public void onWitherChangeBlock(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void onEntityInteract(EntityInteractEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; Block block = event.getBlock(); + if (block == null) + return; + if (Residence.isDisabledWorldListener(block.getWorld())) + return; Material mat = block.getType(); Entity entity = event.getEntity(); FlagPermissions perms = Residence.getPermsByLoc(block.getLocation()); @@ -107,9 +110,11 @@ private boolean isTamed(Entity ent) { @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(EntityDamageByEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; Entity entity = event.getEntity(); + if (entity == null) + return; + if (Residence.isDisabledWorldListener(entity.getWorld())) + return; if (!Residence.getNms().isAnimal(entity)) return; @@ -149,11 +154,14 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void OnEntityDeath(EntityDeathEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + LivingEntity ent = event.getEntity(); + if (ent == null) return; - if (event.getEntity() instanceof Player) + if (Residence.isDisabledWorldListener(ent.getWorld())) return; - Location loc = event.getEntity().getLocation(); + if (ent instanceof Player) + return; + Location loc = ent.getLocation(); FlagPermissions perms = Residence.getPermsByLoc(loc); if (!perms.has("mobitemdrop", true)) { event.getDrops().clear(); @@ -164,13 +172,19 @@ public void OnEntityDeath(EntityDeathEvent event) { } @EventHandler(priority = EventPriority.LOWEST) - public void AnimalKilling(VehicleDestroyEvent event) { + public void VehicleDestroy(VehicleDestroyEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getAttacker().getWorld())) + Entity damager = event.getAttacker(); + if (damager == null) return; + + if (Residence.isDisabledWorldListener(damager.getWorld())) + return; + Vehicle vehicle = event.getVehicle(); - Entity damager = event.getAttacker(); + if (vehicle == null) + return; if (damager instanceof Projectile && !(((Projectile) damager).getShooter() instanceof Player) || !(damager instanceof Player)) { FlagPermissions perms = Residence.getPermsByLoc(vehicle.getLocation()); @@ -208,9 +222,11 @@ public void AnimalKilling(VehicleDestroyEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void MonsterKilling(EntityDamageByEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; Entity entity = event.getEntity(); + if (entity == null) + return; + if (Residence.isDisabledWorldListener(entity.getWorld())) + return; if (!isMonster(entity)) return; @@ -276,10 +292,13 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onCreatureSpawn(CreatureSpawnEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + Entity ent = event.getEntity(); + if (ent == null) + return; + if (Residence.isDisabledWorldListener(ent.getWorld())) return; FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); - Entity ent = event.getEntity(); + if (Residence.getNms().isAnimal(ent)) { if (!perms.has("animals", true)) { event.setCancelled(true); @@ -369,9 +388,11 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingPlace(HangingPlaceEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; Player player = event.getPlayer(); + if (player == null) + return; + if (Residence.isDisabledWorldListener(player.getWorld())) + return; if (Residence.isResAdminOn(player)) return; @@ -387,7 +408,10 @@ public void onHangingPlace(HangingPlaceEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreak(HangingBreakEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + Hanging ent = event.getEntity(); + if (ent == null) + return; + if (Residence.isDisabledWorldListener(ent.getWorld())) return; if (!(event instanceof HangingBreakByEntityEvent)) return; @@ -401,8 +425,8 @@ public void onHangingBreak(HangingBreakEvent event) { return; String pname = player.getName(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); - String world = event.getEntity().getWorld().getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + String world = ent.getWorld().getName(); if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) { event.setCancelled(true); player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "build")); @@ -412,9 +436,12 @@ public void onHangingBreak(HangingBreakEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityCombust(EntityCombustEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + Entity ent = event.getEntity(); + if (ent == null) + return; + if (Residence.isDisabledWorldListener(ent.getWorld())) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); if (!perms.has("burn", true)) { event.setCancelled(true); } @@ -423,28 +450,31 @@ public void onEntityCombust(EntityCombustEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onExplosionPrime(ExplosionPrimeEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + Entity ent = event.getEntity(); + if (ent == null) + return; + if (Residence.isDisabledWorldListener(ent.getWorld())) return; EntityType entity = event.getEntityType(); - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); switch (entity) { case CREEPER: if (!perms.has("creeper", perms.has("explode", true))) { if (Residence.getConfigManager().isCreeperExplodeBelow()) { - if (event.getEntity().getLocation().getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) { + if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) { event.setCancelled(true); - event.getEntity().remove(); + ent.remove(); } else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getEntity().getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res != null) { event.setCancelled(true); - event.getEntity().remove(); + ent.remove(); } } } else { event.setCancelled(true); - event.getEntity().remove(); + ent.remove(); } } break; @@ -452,19 +482,19 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { case MINECART_TNT: if (!perms.has("tnt", perms.has("explode", true))) { if (Residence.getConfigManager().isTNTExplodeBelow()) { - if (event.getEntity().getLocation().getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) { + if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) { event.setCancelled(true); - event.getEntity().remove(); + ent.remove(); } else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getEntity().getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res != null) { event.setCancelled(true); - event.getEntity().remove(); + ent.remove(); } } } else { event.setCancelled(true); - event.getEntity().remove(); + ent.remove(); } } break; @@ -472,13 +502,13 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { case FIREBALL: if (!perms.has("fireball", perms.has("explode", true))) { event.setCancelled(true); - event.getEntity().remove(); + ent.remove(); } break; case WITHER_SKULL: if (!perms.has("witherdamage", perms.has("damage", true))) { event.setCancelled(true); - event.getEntity().remove(); + ent.remove(); } break; default: @@ -490,23 +520,26 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + Entity ent = event.getEntity(); + if (ent == null) return; - if (event.isCancelled() || event.getEntity() == null) + if (Residence.isDisabledWorldListener(ent.getWorld())) + return; + if (event.isCancelled()) return; Boolean cancel = false; EntityType entity = event.getEntityType(); - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); - FlagPermissions world = Residence.getWorldFlags().getPerms(event.getEntity().getWorld().getName()); + FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); + FlagPermissions world = Residence.getWorldFlags().getPerms(ent.getWorld().getName()); switch (entity) { case CREEPER: if (!perms.has("creeper", perms.has("explode", true))) if (Residence.getConfigManager().isCreeperExplodeBelow()) { - if (event.getEntity().getLocation().getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) + if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) cancel = true; else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getEntity().getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res != null) cancel = true; } @@ -517,10 +550,10 @@ public void onEntityExplode(EntityExplodeEvent event) { case MINECART_TNT: if (!perms.has("tnt", perms.has("explode", true))) { if (Residence.getConfigManager().isTNTExplodeBelow()) { - if (event.getEntity().getLocation().getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) + if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) cancel = true; else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getEntity().getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res != null) cancel = true; } @@ -542,7 +575,7 @@ public void onEntityExplode(EntityExplodeEvent event) { if (cancel) { event.setCancelled(true); - event.getEntity().remove(); + ent.remove(); return; } @@ -605,54 +638,6 @@ public void onEntityExplode(EntityExplodeEvent event) { } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onLingeringPotionLaunch(ProjectileLaunchEvent event) { - - ItemStack item = Residence.getNms().getLingeringPotionItem(event.getEntity()); - - if (item == null) - return; - - Material lingering = Material.getMaterial("LINGERING_POTION"); - - if (lingering == null) - return; - - if (item.getType() != lingering) - return; - - String type = Residence.getNms().getPotionType(item); - - Debug.D("Type: " + type); - if (type == null) - return; - - boolean harmfull = false; - for (String oneHarm : Residence.getConfigManager().getNegativeLingeringPotionEffects()) { - if (oneHarm.equalsIgnoreCase(type)) { - harmfull = true; - break; - } - } - - if (!harmfull) - return; - - ProjectileSource shooter = event.getEntity().getShooter(); - - if (!(shooter instanceof Player)) - return; - - Player player = (Player) shooter; - - boolean srcpvp = Residence.getPermsByLoc(player.getLocation()).has("pvp", true); - - if (!srcpvp && !Residence.isResAdminOn(player)) { - event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "pvp")); - } - } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSplashPotion(PotionSplashEvent event) { // disabling event on world diff --git a/src/plugin.yml b/src/plugin.yml index 744ff8ae9..e8baf8ad4 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.2.1 +version: 4.0.2.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 604a2968df367b90b211c817ed18b1ffd66bc2f6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 24 Mar 2016 19:25:15 +0200 Subject: [PATCH 0138/1142] New locale files/ bug fixes --- src/Language/Chinese.yml | 1209 ++++++++++++++++ src/Language/Czech.yml | 1230 +++++++++++++++++ .../bukkit/residence/LocaleManager.java | 6 + .../bekvon/bukkit/residence/Residence.java | 2 +- .../bukkit/residence/commands/give.java | 10 +- .../residence/commands/removeworld.java | 2 +- .../residence/commands/signconvert.java | 2 +- .../protection/ClaimedResidence.java | 33 +- .../bukkit/residence/text/Language.java | 4 + src/plugin.yml | 2 +- 10 files changed, 2486 insertions(+), 14 deletions(-) create mode 100644 src/Language/Chinese.yml create mode 100644 src/Language/Czech.yml diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml new file mode 100644 index 000000000..7be659604 --- /dev/null +++ b/src/Language/Chinese.yml @@ -0,0 +1,1209 @@ +# Author / 作者: deluxghost +# 注æ„: 如果你想修改这个文件,那么强烈建议您为它准备一份备份,而ä¸æ˜¯ç›´æŽ¥ä¿®æ”¹ã€‚ +# 在 Residence æ’件更新到新版本时,该文件将会被自动覆盖,你的所有更改将会å¤åŽŸã€‚ +# 如果è¦æ›´æ”¹æ’件的语言,在 Residence çš„ config.yml 文件中将 Language: 选项 +# 更改为该文件的文件åå³å¯ã€‚ + +Language: + # 以下是 Residence å‘é€ç»™çŽ©å®¶çš„消æ¯æ–‡æœ¬, 一些文本中包å«å½¢å¦‚ %1 çš„å˜é‡, 它们会 + # 在消æ¯å‘é€æ—¶è¢«æ›¿æ¢æˆç›¸åº”的内容, 请ä¸è¦ä¿®æ”¹è¿™äº›å˜é‡. + Invalid: + Player: '&c无效的玩家å...' + Residence: '&c无效的领地...' + Subzone: '&c无效的领地å­åŒºåŸŸ...' + Direction: '&c无效的方å‘...' + Amount: '&c无效的数é‡...' + Cost: '&c无效的花费...' + Days: '&c无效的天数...' + Material: '&c无效的ææ–™...' + Boolean: '&c无效值, 必须为 &6true(t) &c或者 &6false(f)' + Area: '&c无效的区域...' + Group: '&c无效的æƒé™ç»„...' + MessageType: '&c消æ¯ç±»åž‹å¿…须为 enter(进入), leave(离开) 或 remove(移除).' + Flag: '&c无效æƒé™...' + FlagState: '&c无效æƒé™çŠ¶æ€, 必须为 &6true(t)&c, &6false(f)&c, 或 &6remove(r)' + List: '&e未知åå•ç±»åž‹, 必须是 &6blacklist(黑åå•) &e或 &6ignorelist(忽略åå•).' + Page: '&e无效页é¢...' + Help: '&c无效帮助页é¢...' + NameCharacters: '&cå字中包å«æ— æ•ˆå­—符...' + Area: + Exists: '&c区域å已存在.' + Create: '&e领地区域创建æˆåŠŸ, ID &6%1' + DiffWorld: '&c区域与领地在ä¸åŒä¸–ç•Œ.' + Collision: '&c区域与领地 &6%1 &c冲çª.' + SubzoneCollision: '&c区域与领地å­åŒºåŸŸ &6%1 &c冲çª.' + NonExist: '&c区域ä¸å­˜åœ¨.' + InvalidName: '&c无效区域å...' + ToSmallTotal: '&cé€‰ä¸­çš„åŒºåŸŸè¿‡å° (&6%1&c)' + ToSmallX: '&c选区 &6X &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' + ToSmallY: '&c选区高度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' + ToSmallZ: '&c选区 &6Z &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' + Rename: '&e区域 &6%1 &e已被é‡å‘½å为 &6%2' + Remove: '&e已删除区域 &6%1&e.' + Name: '&eå称: &2%1' + RemoveLast: '&cä¸èƒ½ç§»é™¤é¢†åœ°ä¸­çš„最åŽä¸€ä¸ªåŒºåŸŸ.' + NotWithinParent: '&c该区域ä¸åœ¨çˆ¶åŒºåŸŸå†….' + Update: '&e区域已更新...' + MaxPhysical: '&e已达到领地所å…许的最大空间.' + SizeLimit: '&e区域大å°è¶…出了å…许的尺寸上é™.' + HighLimit: '&cä½ ä¸èƒ½ä¿æŠ¤è¿™ä¹ˆé«˜çš„领地, 高度上é™ä¸º &6%1' + LowLimit: '&cä½ ä¸èƒ½ä¿æŠ¤è¿™ä¹ˆæ·±çš„领地, 深度上é™ä¸º &6%1' + Select: + Points: '&e执行命令å‰éœ€è¦å…ˆé€‰ä¸­ä¸¤ä¸ªé€‰å–点!' + Overlap: '&c选å–点与区域 &6%1 &cé‡å !' + WorldGuardOverlap: '&c选å–点与 WorldGuard 区域 &6%1 &cé‡å !' + Success: '&e选å–点æˆåŠŸ!' + Fail: '&c无效的选择命令...' + Bedrock: '&e将选区扩展到最大深度.' + Sky: '&e将选区扩展到最大高度.' + Area: '&e已选择 &6%2 &e领地的 &6%1 &e区域.' + Tool: '&e- 选区工具: &6%1' + PrimaryPoint: '&e已选择 &6第一个 &e选å–点 %1' + SecondaryPoint: '&e已选择 &6第二个 &e选å–点 %1' + Primary: '&e第一个选å–点: &6%1' + Secondary: '&e第二个选å–点: &6%1' + TooHigh: '&c警告: 选区越过了地图顶部, 并且已被è£å‰ª.' + TooLow: '&c警告: 选区越过了地图底部, 并且已被è£å‰ª.' + TotalSize: '&e选区总大å°: &6%1' + AutoEnabled: '&e自动选择模å¼&6å¼€å¯&e. 输入 &6/res select auto &e关闭.' + AutoDisabled: '&e自动选择模å¼&6关闭&e. 输入 &6/res select auto &eå†æ¬¡æ‰“å¼€.' + Disabled: '&c你没有æƒé™ä½¿ç”¨é€‰æ‹©å‘½ä»¤.' + Sign: + Updated: '&6%1 &e木牌已更新!' + TopLine: '[market]' + DateFormat: YY/MM/dd HH:mm + ForRentTopLine: '&8For Rent' + ForRentPriceLine: '&8%1&f/&8%2&f/&8%3' + ForRentResName: '&8%1' + ForRentBottomLine: '&9å¯ç”¨' + RentedAutorenewTrue: '&2%1' + RentedAutorenewFalse: '&c%1' + RentedTopLine: '%1' + RentedPriceLine: '&8%1&f/&8%2&f/&8%3' + RentedResName: '&8%1' + RentedBottomLine: '&1%1' + ForSaleTopLine: '&8For Sale' + ForSalePriceLine: '&8%1' + ForSaleResName: '&8%1' + ForSaleBottomLine: '&5å¯ç”¨' + LookAt: '&c请将鼠标准星对准木牌.' + Flag: + Set: '&6%2 &eçš„ &6%1 &eæƒé™å·²è®¾ç½®ä¸º &6%3 &e状æ€.' + SetFailed: '&c你没有æƒé™è®¾ç½® &6%1 &cæƒé™' + CheckTrue: '&e玩家 &6%2 &e已在领地 &6%3 &e中将 &6%1 &eæƒé™è®¾ç½®ä¸º &6%4&e.' + CheckFalse: '&e玩家 &6%2 &e没有在领地中设置 &6%1 &eæƒé™.' + Cleared: '&eæƒé™å·²æ¸…除.' + Default: '&eæƒé™å·²æ¢å¤é»˜è®¤å€¼.' + Deny: '&c你没有 &6%1 &cæƒé™.' + SetDeny: '&c所有者ä¸èƒ½è®¾ç½® &6%1 &cæƒé™.' + ChangeDeny: '&c此时领地内有 &6%2 &cå玩家, 所以你无法更改 &6%1 &cæƒé™.' + Bank: + NoAccess: '&c你没有æƒé™ä½¿ç”¨é“¶è¡Œ.' + Name: ' &e银行: &6%1' + NoMoney: '&c你的银行存款ä¸è¶³.' + Deposit: '&eä½ å‘领地银行存款 &6%1 &eå…ƒ.' + Withdraw: '&e你从领地银行中å–出 &6%1 &eå…ƒ.' + Subzone: + Rename: '&e领地å­åŒºåŸŸ &6%1 &e已被é‡å‘½å为 &6%2' + Remove: '&e已删除领地å­åŒºåŸŸ &6%1&e.' + Create: '&eæˆåŠŸåˆ›å»ºé¢†åœ°å­åŒºåŸŸ &6%1&e.' + CreateFail: '&c无法创建领地å­åŒºåŸŸ &6%1&c.' + Exists: '&c领地å­åŒºåŸŸ &6%1 &c已存在.' + Collide: '&c领地å­åŒºåŸŸä¸Ž &6%1 &c冲çª.' + MaxDepth: '&c已达到领地å­åŒºåŸŸå…许的最大分区深度.' + SelectInside: '&e两个选å–点必须都在åŒä¸€ä¸ªé¢†åœ°å†….' + CantCreate: '&c你没有创建领地å­åŒºåŸŸçš„æƒé™.' + CantDelete: '&c你没有删除领地å­åŒºåŸŸçš„æƒé™.' + CantDeleteNotOwnerOfParent: '&cä½ ä¸æ˜¯è¯¥å­åŒºåŸŸæ‰€åœ¨é¢†åœ°çš„所有者, 无法删除å­åŒºåŸŸ.' + CantContract: '&c你没有æƒé™ç¼©å°é¢†åœ°å­åŒºåŸŸ.' + CantExpand: '&c你没有æƒé™æ‰©å¤§é¢†åœ°å­åŒºåŸŸ.' + DeleteConfirm: '&e如果你确定è¦åˆ é™¤å­åŒºåŸŸ &6%1&e, 输入 &6/res confirm &eæ¥ç¡®è®¤æ“作.' + OwnerChange: '&e已将å­åŒºåŸŸ &6%1 &e的所有者更改为 &6%2' + Residence: + Bought: '&eæˆåŠŸè´­ä¹°é¢†åœ° &6%1' + Buy: '&6%1 &e购买了你的 &6%2 &e领地.' + BuyTooBig: '&c你无法购买尺寸这么大的领地.' + NotForSale: '&c该领地目å‰å¹¶æœªå‡ºå”®.' + ForSale: '&e领地 &6%1 &e现在正以 &6%2 &e的价格出售.' + StopSelling: '&c该领地已ä¸å†å‡ºå”®.' + TooMany: '&c你拥有的领地数é‡è¾¾åˆ°äº†ä¸Šé™.' + MaxRent: '&c你租用的领地数é‡è¾¾åˆ°äº†ä¸Šé™.' + AlreadyRent: '&c领地已ç»è¢«ç§Ÿç”¨.' + NotForRent: '&c领地没有在出租.' + NotForRentOrSell: '&c领地没有在出售或出租.' + NotRented: '&c领地尚未被租出.' + Unrent: '&e领地 &6%1 &eå·²å–消出租.' + RemoveRentable: '&e领地 &6%1 &eä¸å†å¯å‡ºç§Ÿ.' + ForRentSuccess: '&e领地 &6%1 &eå·²è¢«è®¾ç½®ä¸ºæ¯ &6%3 &e天以 &6%2 &e出租.' + RentSuccess: '&e你租用了 &6%1 &e领地 &6%2 &e天.' + AlreadyRented: '&e领地 &6%1 &e已出租给 &6%2' + AlreadyExists: '&c已存在å称为 &6%1 &c的领地.' + Create: '&e已创建领地 &6%1&e!' + Rename: '&e领地 &6%1 &e已被é‡å‘½å为 &6%2' + Remove: '&e领地 &6%1 &e已删除.' + MoveDeny: '&c你没有领地 &6%1 &c的移动æƒé™.' + TeleportNoFlag: '&c你没有该领地的传é€æƒé™.' + FlagDeny: '&c你没有领地 &6%2 &cçš„ &6%1 &cæƒé™.' + GiveLimits: '&c目标玩家超出é™åˆ¶, 无法给予领地.' + Give: '&e你将领地 &6%1 &eé€ç»™äº† &6%2' + Recieve: '&e你收到了 &6%2 &eé€ç»™ä½ çš„ &6%1 &e领地.' + List: ' &a%1%2 &e- &6世界&e: &6%3' + TeleportNear: '&e已传é€åˆ°é™„近的领地.' + SetTeleportLocation: '&e设置传é€ä½ç½®.' + PermissionsApply: '&e领地æƒé™å·²è®¾ç½®.' + NotOwner: '&cä½ ä¸æ˜¯è¯¥é¢†åœ°çš„所有者.' + RemovePlayersResidences: '&e移除所有属于 &6%1 &e的领地.' + NotIn: '&c你此时ä¸åœ¨é¢†åœ°å†….' + PlayerNotIn: '&c玩家ä¸åœ¨é¢†åœ°åŒºåŸŸå†…..' + Kicked: '&e你被从领地中请出.' + In: '&eä½ ç›®å‰ç«™åœ¨é¢†åœ° &6%1 &e中.' + OwnerChange: '&e已将领地 &6%1 &e的所有者更改为 &6%2' + NonAdmin: '&c你没有领地的管ç†å‘˜æƒé™.' + Line: '&e领地: &6%1 ' + RentedBy: '&e租用者: &6%1' + MessageChange: '&e消æ¯æ–‡æœ¬å·²è®¾ç½®.' + CantDeleteResidence: '&c你没有删除此领地的æƒé™.' + CantExpandResidence: '&c你没有扩大此领地的æƒé™.' + CantContractResidence: '&c你没有缩å°æ­¤é¢†åœ°çš„æƒé™.' + NoResHere: '&c那个ä½ç½®æ²¡æœ‰é¢†åœ°å­˜åœ¨.' + OwnerNoPermission: '&c领地所有者没有执行这个æ“作的æƒé™.' + ParentNoPermission: '&c你没有æƒé™è®¾ç½®çˆ¶åŒºåŸŸ.' + ChatDisabled: '&e领地内èŠå¤©å·²ç¦ç”¨.' + DeleteConfirm: '&e如果你确定è¦åˆ é™¤é¢†åœ° &6%1&e, 输入 &6/res confirm &e以确认æ“作.' + Rent: + Disabled: '&c领地出租已ç¦ç”¨.' + DisableRenew: '&e领地 &6%1 &eä¸ä¼šåœ¨ç§Ÿçº¦åˆ°æœŸæ—¶è‡ªåŠ¨ç»­æœŸ.' + EnableRenew: '&e领地 &6%1 &e将会在租约到期时自动续期.' + Expire: '&e租约到期时间: &6%1' + ModifyDeny: '&c无法修改租用的领地.' + Days: '&e租用天数: &6%1' + Rented: ' &6(已出租)' + Rentable: + Land: '&e出租领地: &6' + AutoRenew: '&e自动更新租用状æ€: &6%1' + DisableRenew: '&6%1 &eä¸ä¼šåœ¨åˆ°æœŸæ—¶è‡ªåŠ¨æ›´æ–°ç§Ÿç”¨çŠ¶æ€.' + EnableRenew: '&6%1 &e将会在到期时自动更新租用状æ€.' + Economy: + LandForSale: '&e出售领地:' + NotEnoughMoney: '&c你没有足够的金钱.' + MoneyCharged: '&e已从你的 &6%2 &e账户中支出 &6%1 &eå…ƒ.' + MoneyAdded: '&eä½ çš„ &6%2 &e账户增加了 &6%1 &eå…ƒ.' + MoneyCredit: '&eä½ çš„ &6%2 &e账户收入了 &6%1 &eå…ƒ.' + RentReleaseInvalid: '&e领地 &6%1 &e没有被租用或者出租.' + RentSellFail: '&c无法出售正在出租的领地.' + SellRentFail: '&c无法出租正在出售的领地.' + OwnerBuyFail: '&cä¸èƒ½è´­ä¹°è‡ªå·±çš„领地!' + OwnerRentFail: '&cä¸èƒ½ç§Ÿç”¨è‡ªå·±çš„领地!' + AlreadySellFail: '&e领地已在出售中!' + LeaseRenew: '&e租约有效期到 &6%1' + LeaseRenewMax: '&eå…许的最大租约续期' + LeaseNotExpire: '&e租约ä¸å­˜åœ¨æˆ–者未过期.' + LeaseRenewalCost: '&e续租 &6%1 &e的花费为 &6%2' + LeaseInfinite: '&e出租时间已设置为无é™.' + MarketDisabled: '&c领地ç»æµŽå·²ç¦ç”¨!' + SellAmount: '&e出售数é‡: &2%1' + LeaseExpire: '&e租约到期时间: &2%1' + Expanding: + North: '&eå‘北方扩展 &6%1 &e个方å—' + West: '&eå‘西方扩展 &6%1 &e个方å—' + South: '&eå‘å—方扩展 &6%1 &e个方å—' + East: '&eå‘东方扩展 &6%1 &e个方å—' + Up: '&eå‘上方扩展 &6%1 &e个方å—' + Down: '&eå‘下方扩展 &6%1 &e个方å—' + Contracting: + North: '&eåœ¨åŒ—æ–¹ç¼©å° &6%1 &e个方å—' + West: '&eåœ¨è¥¿æ–¹ç¼©å° &6%1 &e个方å—' + South: '&e在å—æ–¹ç¼©å° &6%1 &e个方å—' + East: '&eåœ¨ä¸œæ–¹ç¼©å° &6%1 &eblocks' + Up: '&eåœ¨ä¸Šæ–¹ç¼©å° &6%1 &e个方å—' + Down: '&eåœ¨ä¸‹æ–¹ç¼©å° &6%1 &e个方å—' + Shifting: + North: '&eå‘北方平移 &6%1 &e个方å—' + West: '&eå‘西方平移 &6%1 &e个方å—' + South: '&eå‘å—方平移 &6%1 &e个方å—' + East: '&eå‘东方平移 &6%1 &e个方å—' + Up: '&eå‘上方平移 &6%1 &e个方å—' + Down: '&eå‘下方平移 &6%1 &e个方å—' + Limits: + PGroup: '&7- &eæƒé™ç»„:&3 %1' + RGroup: '&7- &e领地组:&3 %1' + Admin: '&7- &e领地管ç†å‘˜:&3 %1' + CanCreate: '&7- &eå…许创建领地:&3 %1' + MaxRes: '&7- &e最大领地数é‡:&3 %1' + MaxEW: '&7- &e东西方å‘最大:&3 %1' + MaxNS: '&7- &eå—北方å‘最大:&3 %1' + MaxUD: '&7- &e上下方å‘最大:&3 %1' + MinMax: '&7- &e最å°/最大高度:&3 %1 到 %2' + MaxSub: '&7- &e最大分区深度:&3 %1' + MaxRents: '&7- &e最多租用:&3 %1' + EnterLeave: '&7- &eå¯è®¾ç½®åŠ å…¥ç¦»å¼€ä¿¡æ¯:&3 %1' + NumberOwn: '&7- &e拥有的领地数é‡:&3 %1' + Cost: '&7- &e领地æ¯æ–¹å—花费:&3 %1' + Sell: '&7- &e领地出售æ¯æ–¹å—花费:&3 %1' + Flag: '&7- &eå…许的领地æƒé™:&3 %1' + MaxDays: '&7- &e最大租约时间:&3 %1' + LeaseTime: '&7- &e租约续期时间:&3 %1' + RenewCost: '&7- &e续租æ¯æ–¹å—花费:&3 %1' + Gui: + Set: + Title: '&l%1 æƒé™' + Pset: + Title: '&l%1 %2 æƒé™' + Actions: + - '&2左键å•å‡»å¯ç”¨' + - '&cå³é”®å•å‡»ç¦ç”¨' + - '&eShift+左键å•å‡»åˆ é™¤' + InformationPage: + TopLine: '&e---< &a %1 &e >---' + Page: '&e-----< &6%1 &e>-----' + NextPage: '&e-----< &6%1 &e>-----' + NoNextPage: '&e-----------------------' + Chat: + ChatChannelChange: '&e领地èŠå¤©é¢‘é“已更改为 &6%1!' + ChatChannelLeave: '&e离开领地èŠå¤©' + JoinFirst: '&4请先加入领地èŠå¤©é¢‘é“.' + InvalidChannel: '&4无效频é“.' + InvalidColor: '&4颜色代ç é”™è¯¯' + NotInChannel: '&4玩家ä¸åœ¨é¢‘é“中' + Kicked: '&6%1 &e被 &6%2 &e频é“踢出' + InvalidPrefixLength: '&4å‰ç¼€è¿‡é•¿. 最大长度: %1' + ChangedColor: '&e领地频é“颜色更改为 %1' + ChangedPrefix: '&e领地频é“å‰ç¼€æ›´æ”¹ä¸º %1' + Shop: + ListTopLine: '&6%1 &e商店列表 - 第 &6%2 &e页, å…± &6%3 %4' + List: ' &e%1. &6%2 &e(&6%3&e) %4' + ListVoted: '&e%1 (&6%2&e)' + ListLiked: '&e赞: &0%1' + VotesTopLine: '&6%1 &e%2 评分列表 &6- &e第 &6%3 &e页, å…± &6%4 %5' + VotesList: ' &e%1. &6%2 &e%3 &7%4' + NoDesc: '&6没有æè¿°' + Desc: |- + &6æè¿°: + %1 + DescChange: '&6æ述已更改为: %1' + NewBoard: '&6æˆåŠŸæ·»åŠ å•†åº—宣传æ¿' + DeleteBoard: '&6å³å‡»è¦åˆ é™¤çš„宣传æ¿' + DeletedBoard: '&6宣传æ¿å·²ç§»é™¤' + IncorrectBoard: '&c宣传æ¿ä¸æ­£ç¡®, 请é‡æ–°ç‚¹å‡»æ­£ç¡®çš„宣传æ¿' + InvalidSelection: '&c使用选å–工具, 先点击左上角的告示牌, å†ç‚¹å‡»å³ä¸‹è§’的告示牌' + VoteChanged: '&6领地 &e%3 &6的评分由 &e%1 &6更改为 &e%2&6.' + Voted: '&6ä½ ç»™ &e%2 &6评了 &e%1 &6分.' + Liked: '&6你赞了 &e%1 &6领地.' + AlreadyLiked: '&6ä½ å·²ç»èµžè¿‡ &e%1 &6领地了.' + NoVotes: '&c该领地还没有评分.' + CantVote: '&c该领地ä¸æ˜¯å•†åº—.' + VotedRange: '&6åªèƒ½ç»™å‡º &e%1 &6分到 &e%2 &6分.' + SignLines: + '1': '&e--== &8%1 &e==--' + '2': '&9%1' + '3': '&4%1' + '4': '&8%1&e (&8%2&e)' + Likes4: '&9赞: &8%2' + RandomTeleport: + TpLimit: '&e请等待 &6%1 &e秒åŽå†ä¼ é€' + TeleportSuccess: '&eä¼ é€åˆ° X:&6%1&e, Y:&6%2&e, Z:&6%3 &eä½ç½®' + IncorrectLocation: '&6无法找到正确的传é€ä½ç½®, 请等待 &e%1 &6秒åŽé‡è¯•.' + TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%4 &e秒内ä¸è¦ç§»åŠ¨.' + General: + DisabledWorld: '&c该世界已ç¦ç”¨é¢†åœ°.' + UseNumbers: '&c请输入数字.' + CantPlaceLava: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置岩浆.' + CantPlaceWater: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置水.' + NoPermission: '&c你没有执行此æ“作的æƒé™.' + DefaultUsage: '&e输入 &6/%1 ? &e查看帮助信æ¯' + MaterialGet: '&eID &6%1 &eçš„ææ–™å称为 &6%2' + MarketList: '&e---- &6市场列表 &e----' + Separator: '&e------------------------------------------------' + AdminOnly: '&cåªæœ‰ç®¡ç†å‘˜æ‰èƒ½æ‰§è¡Œè¿™ä¸ªå‘½ä»¤.' + InfoTool: '&e- ä¿¡æ¯å·¥å…·: &6%1' + ListMaterialAdd: '&6%1 &e已被添加到 &6%2 &e领地.' + ListMaterialRemove: '&6%1 &e已从 &6%2 &e领地移除.' + ItemBlacklisted: '&c此处ç¦æ­¢ä½¿ç”¨è¯¥ç‰©å“.' + WorldPVPDisabled: '&c世界 PVP å·²ç¦ç”¨.' + NoPVPZone: '&céž PVP 区域.' + InvalidHelp: '&c无效帮助页ç .' + TeleportDeny: '&c你没有传é€çš„æƒé™.' + TeleportSuccess: '&e已传é€!' + TeleportConfirm: '&cä¼ é€ä¸å®‰å…¨, ä½ å°†æ‘”è½ &6%1 &c个方å—. 如果ä»è¦ä¼ é€, 输入 &6/res tpconfirm &c确认.' + TeleportStarted: '&eå¼€å§‹å‘ &6%1 &eä¼ é€, 在 &6%2 &e秒内ä¸è¦ç§»åŠ¨.' + TeleportCanceled: '&eä¼ é€è¢«å–消!' + NoTeleportConfirm: '&e没有需è¦ç¡®è®¤çš„ä¼ é€è¯·æ±‚!' + HelpPageHeader: '&e领地帮助 - &6%1 &e- é¡µé¢ <&6%2 &e/ &6%3&e>' + ListExists: '&c列表已存在.' + ListRemoved: '&e已删除列表.' + ListCreate: '&e已创建列表 &6%1' + PhysicalAreas: '&e物ç†åŒºåŸŸ' + CurrentArea: '&e当å‰åŒºåŸŸ: &6%1' + TotalSize: '&e总大å°: &6%1' + TotalWorth: '&e总价值: &6%1 &e(&6%2&e)' + NotOnline: '&e目标玩家ä¸åœ¨çº¿.' + NextPage: '&e下一页' + NextInfoPage: '&2| &e下一页 &2>>>' + PrevInfoPage: '&2<<< &e上一页 &2|' + GenericPage: '&e第 &6%1 &e页, å…± &6%2' + WorldEditNotFound: '&c未检测到 WorldEdit.' + CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + AdminToggleTurnOn: '&e自动管ç†æ¨¡å¼&6å¼€å¯' + AdminToggleTurnOff: '&e自动管ç†æ¨¡å¼&6关闭' + NoSpawn: '&e你没有在出生点的 &6移动 &eæƒé™, 正在é‡æ–°å®šä½.' + CompassTargetReset: '&e你的指å—针已被还原' + CompassTargetSet: '&e你的指å—针目å‰æŒ‡å‘ &6%1' + Ignorelist: '&2忽略åå•:&6' + Blacklist: '&c黑åå•:&6' + LandCost: '&e领地花费: &6%1' + 'True': '&2是' + 'False': '&cå¦' + Land: '&e领地: &6%1' + Cost: '&e花费: æ¯ &6%2 &e天 &6%1' + Status: '&e状æ€: %1' + Available: '&2å¯ç”¨' + Size: ' &e大å°: &6%1' + Flags: '&eæƒé™: &6%1' + YourFlags: '&eä½ çš„æƒé™: &6%1' + GroupFlags: '&e组æƒé™: &6%1' + OthersFlags: '&e其他人æƒé™: &6%1' + Moved: '&e已移动.' + Name: '&eå称: &6%1' + Lists: '&e列表: &6' + Residences: '&e领地&6' + Owner: '&e所有者: &6%1' + World: '&e世界: &6%1' + Subzones: '&eå­åŒºåŸŸ' + NewPlayerInfo: '&e如果è¦åˆ›å»ºé¢†åœ°ä»¥ä¿æŠ¤æˆ¿å±‹, 请用木锄选å–ä¿æŠ¤åŒºçš„两个对角, 然åŽæ‰§è¡Œ &2/res create 领地å称 &e命令.' +CommandHelp: + Description: 领地的命令帮助 + SubCommands: + res: + Description: 领地的主命令 + Info: + - '&2输入 &6/res [命令] ? <页ç > &2查看更多信æ¯.' + SubCommands: + select: + Description: 选å–命令 + Info: + - 该命令选择领地的范围 + - /res select [x] [y] [z] - 选择以你为中心一定范围的方å—. + SubCommands: + coords: + Description: 显示已选择区域的åæ ‡ + Info: + - '&e用法: &6/res select coords' + size: + Description: æ˜¾ç¤ºå·²é€‰æ‹©åŒºåŸŸçš„å¤§å° + Info: + - '&e用法: &6/res select size' + auto: + Description: 打开自动选择工具 + Info: + - '&e用法: &6/res select auto [玩家]' + Args: '[playername]' + cost: + Description: 显示已选择区域的价格 + Info: + - '&e用法: &6/res select cost' + vert: + Description: 纵å‘扩展选区 + Info: + - '&e用法: &6/res select vert' + - 将选区扩展到地图顶端和底端 + sky: + Description: 扩展选区到天空 + Info: + - '&e用法: &6/res select sky' + - 将选区扩展到地图顶端 + bedrock: + Description: 扩展选区到基岩 + Info: + - '&e用法: &6/res select bedrock' + - 将选区扩展到地图底端 + expand: + Description: å‘一个方å‘扩展选区 + Info: + - '&e用法: &6/res select expand <扩展å•ä½>' + - å‘é¢å¯¹çš„æ–¹å‘扩展 <扩展å•ä½> ä¸ªæ–¹å— + shift: + Description: å‘一个方å‘平移选区 + Info: + - '&e用法: &6/res select shift <平移å•ä½>' + - 将选区å‘é¢å¯¹çš„æ–¹å‘平移 <平移å•ä½> ä¸ªæ–¹å— + chunk: + Description: 选择你目å‰æ‰€åœ¨çš„åŒºå— + Info: + - '&e用法: &6/res select chunk' + - 选择你目å‰æ‰€åœ¨çš„åŒºå— + residence: + Description: 选择领地中一个存在的区域 + Info: + - '&e用法: &6/res select residence <领地>' + - 选择 <领地> 中一个存在的区域 + Args: '[residence]' + worldedit: + Description: 采用 WorldEdit 的选区 + Info: + - '&e用法: &6/res select worldedit' + - å°† WorldEdit ç›®å‰çš„选区作为领地选区 + create: + Description: 创建领地 + Info: + - '&e用法: &6/res create <领地å>' + remove: + Description: 删除领地 + Info: + - '&e用法: &6/res remove <领地å>' + Args: '[residence]' + padd: + Description: å‘领地添加玩家 + Info: + - '&e用法: &6/res padd <领地å> [玩家]' + - 为玩家添加基本æƒé™ + Args: '[residence] [playername]' + pdel: + Description: 从领地删除玩家 + Info: + - '&e用法: &6/res pdel <领地å> [玩家]' + - 删除玩家的基本æƒé™ + Args: '[residence] [playername]' + info: + Description: æ˜¾ç¤ºä¸€ä¸ªé¢†åœ°çš„ä¿¡æ¯ + Info: + - '&e用法: &6/res info <领地>' + - 留空 <领地> 表示显示你目å‰æ‰€åœ¨çš„é¢†åœ°ä¿¡æ¯ + Args: '[residence]' + set: + Description: 为领地设置默认æƒé™ + Info: + - '&e用法: &6/res set <领地> [æƒé™] [true/false/remove]' + - 输入 /res flags ? 查看æƒé™åˆ—表 + - 如果没有为æŸçŽ©å®¶æŒ‡å®šè¯¥é¢†åœ°çš„特定æƒé™, 那么这å玩家将会拥有这些默认æƒé™. (å‚è§ /res pset ?) + Args: '[residence] [flag] [true/false/remove]' + pset: + Description: 为æŸçŽ©å®¶è®¾å®šè¯¥é¢†åœ°çš„特定æƒé™ + Info: + - '&e用法: &6/res pset <领地> [玩家] [æƒé™] [true/false/remove]' + - '&e用法: &6/res pset <领地> [玩家] removeall' + - 输入 /res flags ? 查看æƒé™åˆ—表 + Args: '[residence] [playername] [flag] [true/false/remove]' + flags: + Description: 领地æƒé™åˆ—表 + Info: + - 对于大部分æƒé™æ¥è¯´, true 表示å…许, false 表示ç¦æ­¢è¿™ä¸€æ“作 + SubCommands: + build: + Description: å…许或ç¦æ­¢å»ºé€  + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + use: + Description: å…许或ç¦æ­¢ä½¿ç”¨é—¨, 拉æ†, 按钮等... + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + move: + Description: å…许或ç¦æ­¢ç§»åŠ¨ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + container: + Description: å…许或ç¦æ­¢ä½¿ç”¨ç†”炉, ç®±å­, å‘射器等... + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + trusted: + Description: 给予 build, use, move, container å’Œ tp æƒé™ + Info: + - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' + place: + Description: åªå…许或ç¦æ­¢æ”¾ç½®æ–¹å—, 该æƒé™è¦†ç›– build æƒé™ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + destroy: + Description: åªå…许或ç¦æ­¢ç ´åæ–¹å—, 该æƒé™è¦†ç›– build æƒé™ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + pvp: + Description: å…许或ç¦æ­¢é¢†åœ°å†… PVP + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + tp: + Description: å…许或ç¦æ­¢ä¼ é€è‡³æ­¤é¢†åœ° + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + enderpearl: + Description: å…许或ç¦æ­¢ç”¨æœ«å½±çç ä¼ é€è‡³æ­¤é¢†åœ° + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + admin: + Description: 玩家å¯ä»¥æ›´æ”¹é¢†åœ°æƒé™ + Info: + - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' + subzone: + Description: å…许玩家建立领地å­åŒºåŸŸ + Info: + - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' + monsters: + Description: å…许或ç¦æ­¢æ€ªç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + cmonsters: + Description: å…许或ç¦æ­¢è‡ªå®šä¹‰æ€ªç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + smonsters: + Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼å’Œåˆ·æ€ªè›‹ç”Ÿæˆæ€ªç‰© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + nmonsters: + Description: å…许或ç¦æ­¢è‡ªç„¶ç”Ÿæˆæ€ªç‰© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + animals: + Description: å…许或ç¦æ­¢åŠ¨ç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + canimals: + Description: å…许或ç¦æ­¢è‡ªå®šä¹‰åŠ¨ç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + sanimals: + Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼å’Œåˆ·æ€ªè›‹ç”ŸæˆåŠ¨ç‰© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + nanimals: + Description: å…许或ç¦æ­¢è‡ªç„¶ç”ŸæˆåŠ¨ç‰© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + animalkilling: + Description: å…许或ç¦æ­¢å‡»æ€åŠ¨ç‰© + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + mobkilling: + Description: å…许或ç¦æ­¢å‡»æ€æ€ªç‰© + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + nofly: + Description: å…许或ç¦æ­¢é£žè¡Œ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + vehicledestroy: + Description: å…许或ç¦æ­¢ç ´å载具 + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + shear: + Description: å…许或ç¦æ­¢å‰ªç¾Šæ¯› + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + dye: + Description: å…许或ç¦æ­¢ä¸ºç¾Šæ¯›æŸ“色 + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + leash: + Description: å…许或ç¦æ­¢ç‰µå¼•åŠ¨ç‰© + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + healing: + Description: 为领地内的玩家治疗 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + feed: + Description: 为领地内的玩家æ¢å¤é¥±é£Ÿ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + tnt: + Description: å…许或ç¦æ­¢ TNT 爆炸 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + creeper: + Description: å…许或ç¦æ­¢çˆ¬è¡Œè€…爆炸 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + ignite: + Description: å…许或ç¦æ­¢ç‚¹ç« + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + firespread: + Description: å…许或ç¦æ­¢ç«ç„°è”“延 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + bucket: + Description: å…许或ç¦æ­¢ä½¿ç”¨æ¡¶ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + bucketfill: + Description: å…许或ç¦æ­¢ä½¿ç”¨æ¡¶ç››è£… + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + bucketempty: + Description: å…许或ç¦æ­¢ä½¿ç”¨æ¡¶å€¾å€’ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + flow: + Description: å…许或ç¦æ­¢æ¶²ä½“æµåŠ¨ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + lavaflow: + Description: å…许或ç¦æ­¢å²©æµ†æµåŠ¨, 该æƒé™è¦†ç›– flow æƒé™ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + waterflow: + Description: å…许或ç¦æ­¢æ°´æµåŠ¨, 该æƒé™è¦†ç›– flow æƒé™ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + damage: + Description: å…许或ç¦æ­¢æ‰€æœ‰å®žä½“伤害 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + piston: + Description: å…许或ç¦æ­¢æ´»å¡žæŽ¨æ‹‰æ–¹å— + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + hidden: + Description: 在 list 或 listall 命令中éšè—此领地 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + cake: + Description: å…许或ç¦æ­¢çŽ©å®¶åƒè›‹ç³• + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + lever: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æ‹‰æ† + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + button: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰é’® + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + diode: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨çº¢çŸ³ä¸­ç»§å™¨ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + door: + Description: å…许或ç¦æ­¢çŽ©å®¶å¼€å…³é—¨å’Œæ´»æ¿é—¨ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + table: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + enchant: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + brew: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é…¿é€ å° + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + bed: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + pressure: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åŽ‹åŠ›æ¿ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + note: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³ç¬¦ç›’ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + redstone: + Description: 给予 lever, diode, button, pressure å’Œ note æƒé™ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + craft: + Description: 给予 table, enchant å’Œ brew æƒé™ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + trample: + Description: å…许或ç¦æ­¢è¸©å耕地 + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + trade: + Description: å…许或ç¦æ­¢æ‘民交易 + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + nomobs: + Description: å…许或ç¦æ­¢æ€ªç‰©è¿›å…¥é¢†åœ° + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + explode: + Description: å…许或ç¦æ­¢çˆ†ç‚¸ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + witherdamage: + Description: ç¦æ­¢å‡‹çµé€ æˆä¼¤å®³ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + fireball: + Description: å…许或ç¦æ­¢ç«ç„°å¼¹ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + command: + Description: å…许或ç¦æ­¢æ‰§è¡Œå‘½ä»¤ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + overridepvp: + Description: 覆盖任何æ’件的 PVP ä¿æŠ¤ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + keepinv: + Description: 玩家死亡ä¸ä¼šæŽ‰è½ç‰©å“ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + keepexp: + Description: 玩家死亡ä¸ä¼šæŸå¤±ç»éªŒ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + burn: + Description: å…许或ç¦æ­¢æ€ªç‰©ç‡ƒçƒ§ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + bank: + Description: å…许或ç¦æ­¢ä½¿ç”¨é¢†åœ°é“¶è¡Œ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + shop: + Description: 将领地设置为商店 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + day: + Description: 领地ä¿æŒç™½å¤© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + night: + Description: 领地ä¿æŒå¤œé—´ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + chat: + Description: å…许加入领地èŠå¤©é¢‘é“ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + nodurability: + Description: 物å“ä¸ä¼šæŸå¤±è€ä¹… + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + mobitemdrop: + Description: 怪物死亡ä¸ä¼šæŽ‰è½ç‰©å“ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + mobexpdrop: + Description: 怪物死亡ä¸ä¼šæŽ‰è½ç»éªŒ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + dragongrief: + Description: 防止末影龙破åæ–¹å— + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + snowtrail: + Description: 防止雪傀儡留下雪轨迹 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + respawn: + Description: 自动é‡ç”ŸçŽ©å®¶ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + limits: + Description: 显示你的领地é™åˆ¶ + Info: + - '&e用法: &6/res limits' + - 显示你在创建和管ç†é¢†åœ°æ–¹é¢çš„å„ç§é™åˆ¶ + tpset: + Description: 设定领地的传é€ç‚¹ + Info: + - '&e用法: &6/res tpset' + - 该命令将会把你站的ä½ç½®è®¾ç½®ä¸ºé¢†åœ°çš„ä¼ é€ç‚¹ + - 你必须站在一个领地里æ‰èƒ½ä½¿ç”¨è¿™ä¸ªå‘½ä»¤ + - 你必须是领地的所有者或者拥有领地的 +admin æƒé™ + tp: + Description: ä¼ é€åˆ°ä¸€ä¸ªé¢†åœ° + Info: + - '&e用法: &6/res tp [residence]' + - 将你传é€åˆ°ä¸€ä¸ªé¢†åœ°, 你必须是领地所有者或者拥有领地 +tp æƒé™ + - ä½ çš„æƒé™ç»„也必须在æœåŠ¡å™¨ä¸­æœ‰ä¼ é€æƒé™ + Args: '[residence]' + rt: + Description: ä¼ é€åˆ°ä¸–界上的éšæœºä½ç½® + Info: + - '&e用法: &6/res rt' + - 将你传é€åˆ°ä¸–界上的éšæœºä½ç½® + rc: + Description: 加入当å‰æˆ–者指定的领地èŠå¤©é¢‘é“ + Info: + - '&e用法: &6/res rc (领地)' + - 加入当å‰é¢†åœ°æˆ–者指定领地的èŠå¤©é¢‘é“ + SubCommands: + leave: + Description: 离开当å‰é¢‘é“ + Info: + - '&e用法: &6/res rc leave' + - 如果你在一个领地频é“内, ä½ å°†ä¼šç¦»å¼€æ­¤é¢‘é“ + setcolor: + Description: 设置领地频é“文字颜色 + Info: + - '&e用法: &6/res rc setcolor [颜色代ç ]' + - 设置领地频é“文字颜色 + setprefix: + Description: 设置领地频é“å‰ç¼€ + Info: + - '&e用法: &6/res rc setprefix [æ–°å‰ç¼€]' + - 设置领地频é“å‰ç¼€ + kick: + Description: 从频é“中踢出玩家 + Info: + - '&e用法: &6/res rc kick [玩家]' + - 从领地频é“中踢出æŸçŽ©å®¶ + expand: + Description: å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地 + Info: + - '&e用法: &6/res expand (领地) [扩展å•ä½]' + - å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地规模 + - 领地å字是å¯é€‰çš„ + contract: + Description: 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ° + Info: + - '&e用法: &6/res contract (领地) [缩å°å•ä½]' + - 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ°è§„模 + - 领地å字是å¯é€‰çš„ + shop: + Description: 管ç†é¢†åœ°å•†åº— + Info: + - 管ç†é¢†åœ°çš„商店功能 + SubCommands: + list: + Description: 显示领地商店列表 + Info: + - '&e用法: &6/res shop list' + - 显示所有作为商店的领地 + vote: + Description: 为领地商店评分 + Info: + - '&e用法: &6/res shop vote <领地> [分数]' + - 为当å‰æˆ–指定领地商店评分 + Args: '[residence]' + like: + Description: 为领地商店点赞 + Info: + - '&e用法: &6/res shop like <领地>' + - 为领地商店点一个赞 + Args: '[residenceshop]' + votes: + Description: 显示领地商店评分 + Info: + - '&e用法: &6/res shop votes <领地> <页ç >' + - 显示当å‰æˆ–指定领地商店的评分列表 + Args: '[residenceshop]' + likes: + Description: 显示领地商店的赞 + Info: + - '&e用法: &6/res shop likes <领地> <页ç >' + - 显示当å‰æˆ–指定领地商店的赞列表 + Args: '[residenceshop]' + setdesc: + Description: 设置领地商店æè¿° + Info: + - '&e用法: &6/res shop setdesc [æ述文字]' + - 设置领地商店æè¿°, 支æŒé¢œè‰²ä»£ç , 用 /n 表示æ¢è¡Œ + createboard: + Description: åˆ›å»ºå•†åº—å®£ä¼ æ¿ + Info: + - '&e用法: &6/res shop createboard [ä½ç½®]' + - 在选区ä½ç½®å»ºç«‹å•†åº—宣传æ¿. [ä½ç½®] 表示宣传æ¿çš„起始ä½ç½® + deleteboard: + Description: åˆ é™¤å•†åº—å®£ä¼ æ¿ + Info: + - '&e用法: &6/res shop deleteboard' + - å³å‡»å®£ä¼ æ¿çš„å‘Šç¤ºç‰Œä»¥åˆ é™¤å®£ä¼ æ¿ + tpconfirm: + Description: 忽略ä¸å®‰å…¨ä¼ é€è­¦å‘Š + Info: + - '&e用法: &6/res tpconfirm' + - 强制传é€åˆ°é¢†åœ°, 忽略传é€ä¸å®‰å…¨çš„警告 + subzone: + Description: 在领地中创建å­åŒºåŸŸ + Info: + - '&e用法: &6/res subzone <领地å> [å­åŒºåŸŸå]' + - 如果领地å留空, 将会å°è¯•åœ¨çŽ©å®¶æ‰€å¤„领地中建立å­åŒºåŸŸ + Args: '[residence]' + area: + Description: 管ç†é¢†åœ°ç‰©ç†åŒºåŸŸ + SubCommands: + list: + Description: 列出领地的物ç†åŒºåŸŸ + Info: + - '&e用法: &6/res area list [领地] <页ç >' + Args: '[residence]' + listall: + Description: 列出所有区域的åæ ‡å’Œè¯¦ç»†ä¿¡æ¯ + Info: + - '&e用法: &6/res area listall [领地] <页ç >' + Args: '[residence]' + add: + Description: 为领地添加物ç†åŒºåŸŸ + Info: + - '&e用法: &6/res area add [领地] [区域ID]' + - 你必须先选中两个选å–点 + Args: '[residence]' + remove: + Description: 移除领地的物ç†åŒºåŸŸ + Info: + - '&e用法: &6/res area remove [领地] [区域ID]' + Args: '[residence]' + replace: + Description: 替æ¢é¢†åœ°çš„物ç†åŒºåŸŸ + Info: + - '&e用法: &6/res area replace [领地] [区域ID]' + - 你必须先选中两个选å–点 + - 如果新的区域更大, 二者之间将会被充满 + Args: '[residence]' + message: + Description: 管ç†é¢†åœ°åŠ å…¥ / ç¦»å¼€æ¶ˆæ¯ + Info: + - '&e用法: &6/res message <领地> [enter/leave] [消æ¯]' + - 设置领地加入和离开的消æ¯æ–‡æœ¬ + - '&e用法: &6/res message <领地> remove [enter/leave]' + - 移除加入或离开的消æ¯æ–‡æœ¬ + Args: '[residence] [enter/leave]' + lease: + Description: 管ç†é¢†åœ°ç§Ÿçº¦ + Info: + - '&e用法: &6/res lease [renew/cost] [领地]' + - /res lease cost 显示续租领地的花费 + - /res lease renew 将会续租指定的领地 + Args: '[renew/cost] [residence]' + SubCommands: + set: + Description: 设置租约时间 + Info: + - '&e用法: &6/resadmin lease set [领地] [#days/infinite]' + - 将租约时间设置为特定天数或者无é™åˆ¶ + Args: '[residence]' + renew: + Description: 续期租约时间 + Info: + - '&e用法: &6/resadmin lease renew <领地>' + - 续期当å‰æˆ–指定的领地租约 + Args: '[residence]' + expires: + Description: 租约过期时间 + Info: + - '&e用法: &6/resadmin lease expires <领地>' + - 显示领地租约过期的时间 + Args: '[residence]' + cost: + Description: 显示续租花费 + Info: + - '&e用法: &6/resadmin lease cost <领地>' + - 显示续租领地所需的花费 + Args: '[residence]' + bank: + Description: 管ç†é¢†åœ°é“¶è¡Œ + Info: + - '&e用法: &6/res bank [deposit/withdraw] <领地> [æ•°é¢]' + - 你必须站在领地中或者指定领地åå­— + - 你必须拥有 +bank æƒé™ + Args: '[deposit/withdraw] [residence]' + confirm: + Description: 确认删除领地 + Info: + - '&e用法: &6/res confirm' + - 确认删除一个领地 + gset: + Description: 为æŸä¸ªç»„设置领地的特定æƒé™ + Info: + - '&e用法: &6/res gset <领地> [组] [æƒé™] [true/false/remove]' + - 输入 /res flags ? 查看æƒé™åˆ—表 + lset: + Description: 更改黑åå•å’Œå¿½ç•¥åå•é€‰é¡¹ + Info: + - '&e用法: &6/res lset <领地> [blacklist/ignorelist] [ææ–™]' + - '&e用法: &6/res lset <领地> Info' + - å°†æŸç‰©å“加入黑åå•ä»¥é˜»æ­¢è¿™ç§ç‰©å“被放置在领地中 + - 忽略åå•ä¸­çš„物å“å°†ä¸ä¼šè¢«é¢†åœ°ä¿æŠ¤ + Args: '[residence] [blacklist/ignorelist] [material]' + removeall: + Description: 移除æŸçŽ©å®¶çš„所有领地 + Info: + - '&e用法: &6/res removeall [所有者]' + - 移除特定玩家的所有领地 + - 如果是移除其他玩家的领地, 你必须有 /resadmin 命令æƒé™ + Args: '[playername]' + list: + Description: 显示领地列表 + Info: + - '&e用法: &6/res list <玩家> <页ç >' + - 列出指定玩家拥有的所有领地 (除了éšè—领地) + - 如果显示自己的领地, éšè—领地也会被显示 + - è¦åˆ—出所有玩家的领地, 使用 /res listall 命令 + Args: '[playername]' + listhidden: + Description: 显示éšè—领地列表 + Info: + - '&e用法: &6/res listhidden <玩家> <页ç >' + - 列出指定玩家拥有的éšè—领地 + Args: '[playername]' + listall: + Description: 显示所有领地 + Info: + - '&e用法: &6/res listall <页ç >' + - 显示所有玩家的领地 + listallhidden: + Description: 显示所有éšè—领地 + Info: + - '&e用法: &6/res listhidden <页ç >' + - 显示所有玩家的éšè—领地 + sublist: + Description: 列出所有领地å­åŒºåŸŸ + Info: + - '&e用法: &6/res sublist <领地> <页ç >' + - 列出所有领地å­åŒºåŸŸ + Args: '[residence]' + reset: + Description: 将领地设置还原为默认值 + Info: + - '&e用法: &6/res reset <领地>' + - 将领地的所有æƒé™é‡ç½®. 你必须是领地所有者或者管ç†å‘˜ + Args: '[residence]' + rename: + Description: é‡å‘½å领地 + Info: + - '&e用法: &6/res rename [领地åå­—] [æ–°åå­—]' + - 你必须是领地所有者或者管ç†å‘˜ + - 新领地åå­—ä¸èƒ½ä¸Žå…¶ä»–领地é‡å¤ + Args: '[residence]' + kick: + Description: 将玩家踢出领地 + Info: + - '&e用法: &6/res kick <玩家>' + - 你必须是领地所有者或者管ç†å‘˜ + - 玩家必须在线 + Args: '[playername]' + mirror: + Description: é•œåƒæƒé™ + Info: + - '&e查看 &6/res market ? 获å–帮助' + Args: '[residence] [residence]' + market: + Description: è´­ä¹°, 出售和出租领地 + SubCommands: + Info: + Description: 查看领地的ç»æµŽä¿¡æ¯ + Info: + - '&e用法: &6/res market Info [领地]' + - 显示领地是å¦æ­£åœ¨å‡ºç§Ÿæˆ–出售, 以åŠé¢†åœ°çš„花费 + Args: '[residence]' + list: + Description: 显示å¯å‡ºç§Ÿä¸Žå¯å‡ºå”®çš„领地 + Info: + - '&e用法: &6/res market list' + sell: + Description: 出售一个领地 + Info: + - '&e用法: &6/res market sell [领地] [售价]' + - 将领地以 [amount] 元的价格出售 + - 其他玩家å¯ä»¥æ‰§è¡Œ /res market buy 命令购买 + Args: '[residence]' + sign: + Description: 设置市场木牌 + Info: + - '&e用法: &6/res market sign [领地]' + - 将看å‘的木牌设置为领地市场木牌 + Args: '[residence]' + buy: + Description: 购买一个领地 + Info: + - '&e用法: &6/res market buy [领地]' + - 如果该领地正在出售, 则购买这个领地 + Args: '[residence]' + unsell: + Description: å–消出售领地 + Info: + - '&e用法: &6/res market unsell [领地]' + Args: '[residence]' + rent: + Description: 租用一个领地 + Info: + - '&e用法: &6/res market rent [领地] <自动续租>' + - 租用一个领地. <自动续租> å¯ä»¥æ˜¯ true 或 false. 如果是 true, 并且领地所有者å…许, 领地将会在租约到期之å‰è‡ªåŠ¨ç»­ç§Ÿ + Args: '[cresidence] [true/false]' + rentable: + Description: 将领地设置为å¯å‡ºç§Ÿ + Info: + - '&e用法: &6/res market rentable [领地] [ä»·æ ¼] [天数] <周期>' + - 以 [ä»·æ ¼] 出租领地 [天数] 天. 如果 <周期> 为 true, 领地将会在租约结æŸåŽè‡ªåŠ¨å‡ºç§Ÿ. + Args: '[residence]' + release: + Description: å–消领地租èµçŠ¶æ€ + Info: + - '&e用法: &6/res market release [领地]' + - 如果你是租用者, 该命令将会退租领地 + - 如果你是所有者, 该命令将会收回领地 + Args: '[residence]' + current: + Description: 显示你目å‰æ‰€åœ¨çš„领地 + Info: + - '&e用法: &6/res current' + signupdate: + Description: 更新领地木牌 + Info: + - '&e用法: &6/res signupdate' + lists: + Description: 预定义æƒé™åˆ—表 + Info: + - 预定义的æƒé™åˆ—表å¯ä»¥åº”用到领地上 + SubCommands: + add: + Description: 添加一个列表 + Info: + - '&e用法: &6/res lists add <列表å>' + remove: + Description: 删除一个列表 + Info: + - '&e用法: &6/res lists remove <列表å>' + apply: + Description: 将列表应用于领地 + Info: + - '&e用法: &6/res lists apply <列表å> <领地>' + set: + Description: 设置列表全局æƒé™ + Info: + - '&e用法: &6/res lists set <列表å> <æƒé™> <值>' + pset: + Description: 设置列表玩家æƒé™ + Info: + - '&e用法: &6/res lists pset <列表å> <玩家> <æƒé™> <值>' + gset: + Description: 设置列表组æƒé™ + Info: + - '&e用法: &6/res lists view <列表å>' + view: + Description: 查看列表 + server: + Description: 创建æœåŠ¡å™¨é¢†åœ° + Info: + - '&e用法: &6/resadmin server [领地]' + - 创建一个属于æœåŠ¡å™¨æ‰€æœ‰çš„领地 + Args: '[cresidence]' + setowner: + Description: 改å˜é¢†åœ°æ‰€æœ‰è€… + Info: + - '&e用法: &6/resadmin setowner [领地] [玩家]' + Args: '[cresidence]' + resreload: + Description: é‡è½½ Residence. + Info: + - '&e用法: &6/resreload' + resload: + Description: 加载领地存档文件 + Info: + - '&e用法: &6/resload' + - 该命令ä¸å®‰å…¨! 它ä¸ä¼šå…ˆä¿å­˜é¢†åœ°çŠ¶æ€. + - 对领地åšå‡ºæ”¹å˜åŽé‡æ–°åŠ è½½å­˜æ¡£. + removeworld: + Description: 删除指定世界中的所有领地 + Info: + - '&e用法: &6/res removeworld [世界å]' + - åªèƒ½åœ¨æŽ§åˆ¶å°æ‰§è¡Œæ­¤å‘½ä»¤ + signconvert: + Description: å°† ResidenceSign 的告示牌转æ¢ä¸ºæ–°æ ¼å¼ + Info: + - '&e用法: &6/res signconvert' + - å°è¯•è½¬æ¢å·²æœ‰çš„ ResidenceSign 告示牌 + version: + Description: 显示 Residence 的版本 + Info: + - '&e用法: &6/res version' diff --git a/src/Language/Czech.yml b/src/Language/Czech.yml new file mode 100644 index 000000000..f91aea774 --- /dev/null +++ b/src/Language/Czech.yml @@ -0,0 +1,1230 @@ +# NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy +# of this file and modify that instead. This file will be updated automatically by Residence +# when a newer version is detected, and your changes will be overwritten. Once you +# have a copy of this file, change the Language: option under the Residence config.yml +# to whatever you named your copy. + +Language: + Invalid: + Player: '&cNeplatne jmeno hrace...' + Residence: '&cNeplatna Residence...' + Subzone: '&cNeplatne subzona...' + Direction: '&cNeplatny smer...' + Amount: '&cNeplatna castka...' + Cost: '&cNeplatna cena...' + Days: '&cNeplatny pocet dni...' + Material: '&cNeplatny material...' + Boolean: '&cNeplatna hodnota, musi byt &6true(t) &cnebo &6false(f)' + Area: '&cNeplatna oblast...' + Group: '&cNeplatna skupina...' + MessageType: '&cTyp zpravy musi byt enter nebo remove.' + Flag: '&cNeplatna vlajka...' + FlagState: '&cNeplatny status vlajky, musi byt &6true(t)&c, &6false(f)&c, nebo &6remove(r)' + List: '&eNeznamy seznam, musi byt &6blacklist &enebo &6ignorelist.' + Page: '&eNeplatna stranka...' + Help: '&cNeplatna stranka napovedy...' + NameCharacters: '&cJmeno obsahuje nepovolene symboly...' + Area: + Exists: '&cJmeno oblasti je jiz obsazene.' + Create: '&eOblast residence vytvorena, ID &6%1' + DiffWorld: '&cOblast je v jinem svete, nez je residence.' + Collision: '&cOblast koliduje s residenci &6%1' + SubzoneCollision: '&cOblast koliduje se subzonou &6%1' + NonExist: '&cTakova oblast neexistuje.' + InvalidName: '&cNeplatne jmeno oblasti...' + ToSmallTotal: '&cVybrana oblast je mensi, nez je povolene minimum (&6%1&c)' + ToSmallX: '&cYour &6X &cvyber length (&6%1&c) is too small. &eAllowed &6%2 + &eand more.' + ToSmallY: '&cYour vyber height (&6%1&c) is too small. &eAllowed &6%2 &eand + more.' + ToSmallZ: '&cYour &6Z &cvyber length (&6%1&c) is too small. &eAllowed &6%2 + &eand more.' + Rename: '&eOblast &6%1 &eprejmenovana na &6%2' + Remove: '&eOblast &6%1 odstranena...' + Name: '&eJmeno: &2%1' + RemoveLast: '&cNelze odstranit posledni oblast v residenci.' + NotWithinParent: '&cOblast neni ve sve rodicovske oblasti.' + Update: '&eOblast aktualizovana...' + MaxPhysical: '&eByl dosazen maximalni pocet oblasti v residenci.' + SizeLimit: '&eNemuzes vytvorit takhle velkou oblast.' + HighLimit: '&cNemuzes chranit tak vysoko, tvuj limit je &6%1' + LowLimit: '&cNemuzes chranit tak hluboko, tvuj limit je &6%1' + Select: + Points: '&eVyber 2 body pred pouzitim tohoto prikazu!' + Overlap: '&cVybrana oblast se prekryva s regionem &6%1' + WorldGuardOverlap: '&cVybrana oblast se prekryva s WorldGuard regionem &6%1!' + Success: '&eVyber uspesny!' + Fail: '&cNeplatny vyberovy prikaz...' + Bedrock: '&eVyber rozsiren na nejnizsi povolenou uroven.' + Sky: '&eSVyber rozsiren na nejvyssi povolenou uroven.' + Area: '&eVybrana oblast &6%1 &eresidence &6%2' + Tool: '&e- Vyberovy nastroj: &6%1' + PrimaryPoint: '&eVybran &6primarni &evyberovy bod %1' + SecondaryPoint: '&eVybran &6sekundarni &evyberovy bod %1' + Primary: '&ePrimarni vyber: &6%1' + Secondary: '&eSekundarni vyber: &6%1' + TooHigh: '&cVyber je vyssi nez vyska mapa, omezuji.' + TooLow: '&cVyber je pod bedrock, omezuji.' + TotalSize: '&eVelikost vyberu: &6%1' + AutoEnabled: '&eAutomaticky vyberovy rezim &6ZAPNUT&e. Vypni pomoci &6/res + select auto' + AutoDisabled: '&eAutomaticky vyberovy rezim &6VYPNUT&e. Opet zapni pomoci + &6/res select auto' + Disabled: '&cNemas prava pro pouziti vyberovych prikazu' + Sign: + Updated: '&6%1 &ecedule aktualizovany!' + TopLine: '[market]' + DateFormat: YY/MM/dd HH:mm + ForRentTopLine: '&8K pronajmu' + ForRentPriceLine: '&8%1&f/&8%2&f/&8%3' + ForRentResName: '&8%1' + ForRentBottomLine: '&9Dostupne' + RentedAutorenewTrue: '&2%1' + RentedAutorenewFalse: '&c%1' + RentedTopLine: '%1' + RentedPriceLine: '&8%1&f/&8%2&f/&8%3' + RentedResName: '&8%1' + RentedBottomLine: '&1%1' + ForSaleTopLine: '&8K prodeji' + ForSalePriceLine: '&8%1' + ForSaleResName: '&8%1' + ForSaleBottomLine: '&5Dostupne' + LookAt: '&cNekoukas se na ceduli' + Flag: + Set: '&eVlajka (&6%1&e) &6%2 &enastavena na &6%3 &estate' + SetFailed: '&cNemas pristup k vlajce &6%1' + CheckTrue: '&eVlajka &6%1 &ese vztahuje na hrace &6%2 &epro residenci &6%3&e, hodnota + = &6%4' + CheckFalse: '&eVlajka &6%1 &ese nevztahuje na hrace &6%2 &ev residenci.' + Cleared: '&eVlajky vycisteny.' + Default: '&eNastaveny vychozi hodnoty vlajek.' + Deny: '&cZde nemas opravneni na &6%1.' + SetDeny: '&cVlastnik residence nema prava na &6%1' + ChangeDeny: '&cNemuzes zmenit vlajku &6%1 &cdokud je/jsou hrac(i) &6%2 &c + uvnitr.' + Bank: + NoAccess: '&cNemas pristup k bance.' + Name: ' &eBanka: &6%1' + NoMoney: '&cNedostatek penez v bance.' + Deposit: '&eVlozil jsi &6%1 &edo banku residence.' + Withdraw: '&eVybral jsi &6%1 &ez banku residence.' + Subzone: + Rename: '&ePrejmenovana subzona &6%1 &ena &6%2' + Remove: '&eSubzona &6%1 &eodstranena.' + Create: '&eVytvorena subzona &6%1' + CreateFail: '&cNepovedlo se vytvorit subzonu &6%1' + Exists: '&cSubzona &6%1 &cjiz existuje.' + Collide: '&cSubzona se prekryva se subzonou &6%1' + MaxDepth: '&cDosahl jsi maximalni mozne hloubky subzony.' + SelectInside: '&eOba vyberove body musi byt uvnitr residence.' + CantCreate: '&cNemas prava na vytvoreni subzon v residenci.' + CantDelete: '&cNemas prava na mazani subzon v residenci.' + CantDeleteNotOwnerOfParent: '&cNejsi vlastnikem nadrizene residence, nelze + smazat tuto subzone.' + CantContract: '&cNemas opravneni na zmenseni subzony.' + CantExpand: '&cNemas opravneni na zvetseni subzony.' + DeleteConfirm: '&ePokud opravdu chces smazat subzonu &6%1&e, napis &6/res confirm + &epro potvrzeni.' + OwnerChange: '&eVlastnik subzony &6%1 &eowner zmenen na &6%2' + Residence: + Bought: '&eKoupil jsi residenci &6%1' + Buy: '&6%1 &esi od tebe koupil residenci &6%2 &e.' + BuyTooBig: '&cTato residence oblasti vetsi, nez je tvoje povolene maximum.' + NotForSale: '&cResidence neni na prodej.' + ForSale: '&eResidence &6%1 &eje nyni k prodeji za &6%2' + StopSelling: '&cResidence uz neni na prodej.' + TooMany: '&cJiz vlastnis maximalni pocet residenci.' + MaxRent: '&cJiz pronajimas maximalni pocet residenci.' + AlreadyRent: '&cResidence je jiz pronajimana...' + NotForRent: '&cResidence neni k pronajmu...' + NotForRentOrSell: '&cResidence neni k pronajmu, ci k prodeji...' + NotRented: '&cResidence neni pronajata.' + Unrent: '&eResidenci &6%1 &eskoncil pronajem.' + RemoveRentable: '&eResidence &6%1 &ejiz neni k pronajmu.' + ForRentSuccess: '&eResidence &6%1 &eje pronajimana na &6%2 &ekazde &6%3 &edni.' + RentSuccess: '&ePronajmul sis residenci &6%1 &ena &6%2 &edni.' + AlreadyRented: '&eResidence &6%1 &eje pronajata hraci &6%2' + AlreadyExists: '&cResidence se jmenem &6%1 &cuz existuje.' + Create: '&eVytvoril jsi residenci &6%1&e!' + Rename: '&ePrejmenovana residence &6%1 &ena &6%2' + Remove: '&eResidence &6%1 &ebyla odstranena...' + MoveDeny: '&cNemas pravo k pohybu v residenci &6%1' + TeleportNoFlag: '&cNemas pravo teleportovat se na onu residenci.' + FlagDeny: '&cNemas pravo &6%1 &cv residenci &6%2' + GiveLimits: '&cNemuzes dat residenci cilovemu hraci, protoze ten jiz ma + maximalni pocet residenci.' + Give: '&eDal jsi residenci &6%1 &ehraci &6%2' + Recieve: '&eObrzel jsi residenci &6%1 &eod hrace &6%2' + List: ' &a%1%2 &e- &6Svet&e: &6%3' + TeleportNear: '&eTeleportovan vedle residence.' + SetTeleportLocation: '&ePozice pro teleportaci nastavena...' + PermissionsApply: '&ePrava applikovana na residenci.' + NotOwner: '&cNejsi vlastnik residence.' + RemovePlayersResidences: '&eOdstraneny vsechny residence nalezici hraci &6%1' + NotIn: '&cNejsi v residenci.' + PlayerNotIn: '&cHrac nestoji v oblasti tve residence.' + Kicked: '&eByl jsi vyhozen z residence' + In: '&eStojis v residenci &6%1' + OwnerChange: '&eVlastnik residence &6%1 &ezmenen na &6%2' + NonAdmin: '&cNejsi Residence Admin.' + Line: '&eResidence: &6%1 ' + RentedBy: '&ePronajmuta hracem: &6%1' + MessageChange: '&eZprava nastavena...' + CantDeleteResidence: '&cNemas prava na smazani residenci.' + CantExpandResidence: '&cNemas prava na rozsireni residence.' + CantContractResidence: '&cNemas pravo na zmenseni residence.' + NoResHere: '&cNeni tu zadna residence.' + OwnerNoPermission: '&cVlastnik nema na toto prava.' + ParentNoPermission: '&cNemas prava menit vlastnosti nadrizene + zony.' + ChatDisabled: '&eChat v residenci zakazan...' + DeleteConfirm: '&ePokud chces opravdu smazat residenci &6%1&e, napis &6/res + confirm &epro potvrzeni.' + Rent: + Disabled: '&cPronajimani je zakazano...' + DisableRenew: '&eNajem residence &6%1 &ese jiz nebude automaticky prodluzovat.' + EnableRenew: '&eNajem residence &6%1 &ese nyni bude automaticky prodluzovat.' + Expire: '&eNajem vyprsi: &6%1' + ModifyDeny: '&cNelze modifikovat pronajatou residenci.' + Days: '&eDny pronajmu: &6%1' + Rented: ' &6(Pronajate)' + Rentable: + Land: '&ePronajimatelna puda: &6' + AutoRenew: '&eAutomaticke prodluzovani najmu: &6%1' + DisableRenew: '&6%1 &enebude po vyprseni pronajimatelna.' + EnableRenew: '&6%1 &ebude automaticky prodlouzen status pronajimatelnosti.' + Economy: + LandForSale: '&eZeme na prodej:' + NotEnoughMoney: '&cNemas dostatek penez.' + MoneyCharged: '&eCharged &6%1 &eto your &6%2 &eaccount.' + MoneyAdded: '&eGot &6%1 &eto your &6%2 &eaccount.' + MoneyCredit: '&eCredited &6%1 &eto your &6%2 &eaccount.' + RentReleaseInvalid: '&eResidence &6%1 &eis not rented or for rent.' + RentSellFail: '&cCannot sell a Residence if it is for rent.' + SellRentFail: '&cCannot rent a Residence if it is for sale.' + OwnerBuyFail: '&cCannot buy your own land!' + OwnerRentFail: '&cCannot rent your own land!' + AlreadySellFail: '&eResidence already for sale!' + LeaseRenew: '&eLease valid until &6%1' + LeaseRenewMax: '&eLease renewed to maximum allowed' + LeaseNotExpire: '&eNo such lease, or lease does not expire.' + LeaseRenewalCost: '&eRenewal cost for area &6%1 &eis &6%2' + LeaseInfinite: '&eLease time set to infinite...' + MarketDisabled: '&cEconomy Disabled!' + SellAmount: '&eSell Amount: &2%1' + LeaseExpire: '&eLease Expire Time: &2%1' + Expanding: + North: '&eRozsiruji severne o &6%1 &eblocku' + West: '&eRozsiruji zapadne o &6%1 &eblocku' + South: '&eRozsiruji jizne o &6%1 &eblocku' + East: '&eRozsiruji vychodne o &6%1 &eblocku' + Up: '&eRozsiruji nahoru o &6%1 &eblocku' + Down: '&eRozsiruji dolu o &6%1 &eblocku' + Contracting: + North: '&eZmensuji severne o &6%1 &eblocku' + West: '&eZmensuji zapadne o &6%1 &eblocku' + South: '&eZmensuji jizne o &6%1 &eblocku' + East: '&eZmensuji vychodne o &6%1 &eblocku' + Up: '&eZmensuji nahoru o &6%1 &eblocku' + Down: '&eZmensuji dolu o &6%1 &eblocku' + Shifting: + North: '&ePosouvam severne o &6%1 &eblocku' + West: '&ePosouvam zapadne o &6%1 &eblocku' + South: '&ePosouvam jizne o &6%1 &eblocku' + East: '&ePosouvam vychodne o &6%1 &eblocku' + Up: '&ePosouvam nahoru o &6%1 &eblocku' + Down: '&ePosouvam dolu o &6%1 &eblocku' + Limits: + PGroup: '&7- &eSkupina opravneni:&3 %1' + RGroup: '&7- &eSkupina residence:&3 %1' + Admin: '&7- &eResidence Admin:&3 %1' + CanCreate: '&7- &eMuze vytvaret residence:&3 %1' + MaxRes: '&7- &eMaximalni pocet residenci:&3 %1' + MaxEW: '&7- &eMaximalni zapadni/vychodni velikost:&3 %1' + MaxNS: '&7- &eMaximalni severni/jizni velikost:&3 %1' + MaxUD: '&7- &eMaximalni vyska/hloubka:&3 %1' + MinMax: '&7- &eMinimalni/Maximalni vyska:&3 %1 to %2' + MaxSub: '&7- &eMaximalni hloubka subzon:&3 %1' + MaxRents: '&7- &eMaximalni pocet pronajmu:&3 %1' + EnterLeave: '&7- &eMuze nastavit uvitaci zpravu:&3 %1' + NumberOwn: '&7- &ePocet residenci, ktere vlastnis:&3 %1' + Cost: '&7- &eCena residence za block:&3 %1' + Sell: '&7- &ePenize za prodani residence za block:&3 %1' + Flag: '&7- &ePrava na vlajky:&3 %1' + MaxDays: '&7- &eMaximalni delka pronajmu (dny):&3 %1' + LeaseTime: '&7- &eLease Time Given on Renew:&3 %1' + RenewCost: '&7- &eRenew Cost Per Block:&3 %1' + Gui: + Set: + Title: '&6%1 vlajky' + Pset: + Title: '&6%1 %2 vlajky' + Actions: + - '&2Levym klikem povolis' + - '&cPravym klikem zakazes' + - '&eShift + levym klikem odstranis' + InformationPage: + TopLine: '&e---< &a %1 &e >---' + Page: '&e-----< &6%1 &e>-----' + NextPage: '&e-----< &6%1 &e>-----' + NoNextPage: '&e-----------------------' + Chat: + ChatChannelChange: '&eChanged residence chat channel to &6%1!' + ChatChannelLeave: '&eLeft residence chat' + JoinFirst: '&4Join residence chat channel first...' + InvalidChannel: '&4Invalid Channel...' + InvalidColor: '&4Incorrect color code' + NotInChannel: '&4Player is not in channel' + Kicked: '&6%1 &ewas kicked from &6%2 &echannel' + InvalidPrefixLength: '&4Prefix is to long. Allowed length: %1' + ChangedColor: '&eResidence chat channel color changed to %1' + ChangedPrefix: '&eResidence chat channel prefix changed to %1' + Shop: + ListTopLine: '&6%1 &eobchod list - Page &6%2 &eof &6%3 %4' + List: ' &e%1. &6%2 &e(&6%3&e) %4' + ListVoted: '&e%1 (&6%2&e)' + ListLiked: '&eLikes: &0%1' + VotesTopLine: '&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5' + VotesList: ' &e%1. &6%2 &e%3 &7%4' + NoDesc: '&6No description' + Desc: |- + &6Description: + %1 + DescChange: '&6Description changed to: %1' + NewBoard: '&6Successfully added new obchod sign board' + DeleteBoard: '&6Right click sign of board you want to delete' + DeletedBoard: '&6Sign board removed' + IncorrectBoard: '&cThis is not sign board, try performing command again and clicking + correct sign' + InvalidSelection: '&cLeft click with vyber tool top left sign and then right + click bottom right' + VoteChanged: '&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence' + Voted: '&6You voted, and gave &e%1 &6votes to &e%2 &6residence' + Liked: '&6You liked &e%1 &6residence' + AlreadyLiked: '&6You already liked &e%1 &6residence' + NoVotes: '&cThere is no registered votes for this residence' + CantVote: '&cResidence don''t have obchod flag set to true' + VotedRange: '&6Vote range is from &e%1 &6to &e%2' + SignLines: + '1': '&e--== &8%1 &e==--' + '2': '&9%1' + '3': '&4%1' + '4': '&8%1&e (&8%2&e)' + Likes4: '&9Likes: &8%2' + RandomTeleport: + TpLimit: '&eYou can''t teleport so fast, please wait &6%1 &esec and try again' + TeleportSuccess: '&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation' + IncorrectLocation: '&6Could not find correct teleport location, please wait &e%1 + &6sec and try again.' + TeleportStarted: '&eTeleportation started, don''t move for next &6%4 &esec.' + General: + DisabledWorld: '&cResidence plugin je v tomto svete zakazan' + UseNumbers: '&cProsim pouzij cisla...' + CantPlaceLava: '&cNemuzes polozit lavu mimo residenci a vys, nez &6%1 + &cblocku vysoko.' + CantPlaceWater: '&cNemuzes polozit vodu mimo residenci a vys, nez &6%1 + &cblocku vysoko' + NoPermission: '&cNa toto nemas opravneni.' + DefaultUsage: '&ePro vice informaci napis &6/%1 ?' + MaterialGet: '&eNazev materialu pro ID &6%1 &eje &6%2' + MarketList: '&e---- &6Seznam obchodu &e----' + Separator: '&e----------------------------------------------------' + AdminOnly: '&cJenom admini mohou napsat tento prikaz.' + InfoTool: '&e- Info nastroj: &6%1' + ListMaterialAdd: '&6%1 &epridan do residence &6%2' + ListMaterialRemove: '&6%1 &eodstranen z residence &6%2' + ItemBlacklisted: '&cToto zde nemuzes pouzit.' + WorldPVPDisabled: '&cPVP je vypnuto.' + NoPVPZone: '&cTady neni PVP zona.' + InvalidHelp: '&cNeplatna stranka help.' + TeleportDeny: '&cNemuzes se teleportovat.' + TeleportSuccess: '&eTeleportovan!' + TeleportConfirm: '&cTento teleport neni bezpecny, spadnes &6%1 &cblocku. + Napis &6/res tpconfirm &cpokud si ses jisty.' + TeleportStarted: '&eTeleportace na &6%1 &ezacina, nehybej se dalsich &6%2 + &esekund.' + TeleportCanceled: '&eTeleportace zrusena!' + NoTeleportConfirm: '&eZadne teleportacni zadosti ke schvaleni!' + HelpPageHeader: '&eNapoveda - &6%1 &e- Strana <&6%2 &ez &6%3&e>' + ListExists: '&cSeznam jiz existuje...' + ListRemoved: '&eSeznam smazan...' + ListCreate: '&eVytvoren seznam &6%1' + PhysicalAreas: '&eFyzicke oblasti' + CurrentArea: '&eSoucasna oblast: &6%1' + TotalSize: '&eCelkova velikost: &6%1' + TotalWorth: '&eTotal worth of residence: &6%1 &e(&6%2&e)' + NotOnline: '&eCilovy hrac musi byt online.' + NextPage: '&eDalsi strana' + NextInfoPage: '&2| &eDalsi strana &2>>>' + PrevInfoPage: '&2<<< &ePredchozi strana &2|' + GenericPage: '&eStrana &6%1&e/&6%2' + WorldEditNotFound: '&cWorldEdit nebyl nalezen.' + CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + AdminToggleTurnOn: '&eAutomaticky resadmin &6ZAPNUTO' + AdminToggleTurnOff: '&eAutomaticky resadmin &6VYPNUTO' + NoSpawn: '&eNemas pravo k &6pohybu &ena tvem spawnu. Presunuji...' + CompassTargetReset: '&eTvuj kompas byl resetovan' + CompassTargetSet: '&eTvuj kompas nyni miri na &6%1' + Ignorelist: '&2Ignorelist:&6' + Blacklist: '&cBlacklist:&6' + LandCost: '&eCena zeme: &6%1' + 'True': '&2True' + 'False': '&cFalse' + Land: '&eZeme: &6%1' + Cost: '&eCena: &6%1 &ena &6%2 &edni' + Status: '&eStatus: %1' + Available: '&2Dostupne' + Size: ' &eVelikost: &6%1' + Flags: '&eVlajky: &6%1' + YourFlags: '&eTvoje vlajky: &6%1' + GroupFlags: '&eSkupinove vlajky: &6%1' + OthersFlags: '&eDalsi vlajky: &6%1' + Moved: '&ePresunuto...' + Name: '&eJmeno: &6%1' + Lists: '&eSeznamy: &6' + Residences: '&eResidence&6' + Owner: '&eVlastnik: &6%1' + World: '&eSvet: &6%1' + Subzones: '&eSubzony' + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. + NewPlayerInfo: '&ePokud si chces ochranit dum, prosim pouzij + drevenou motyku k diagonalnimu oznaceni oblastni a napis &2/res + create TvujNazevResidence' +CommandHelp: + Description: Contains Help for Residence + SubCommands: + res: + Description: Main Residence Command + Info: + - '&2Use &6/res [command] ? &2to view more help Information.' + SubCommands: + select: + Description: vyber Commands + Info: + - This command selects areas for usage with residence. + - /res select [x] [y] [z] - selects a radius of blocks, with you in the middle. + SubCommands: + coords: + Description: Display selected coordinates + Info: + - '&eUsage: &6/res select coords' + size: + Description: Display selected size + Info: + - '&eUsage: &6/res select size' + auto: + Description: Turns on auto vyber tool + Info: + - '&eUsage: &6/res select auto [playername]' + Args: '[playername]' + cost: + Description: Display vyber cost + Info: + - '&eUsage: &6/res select cost' + vert: + Description: Expand vyber Vertically + Info: + - '&eUsage: &6/res select vert' + - Will expand vyber as high and as low as allowed. + sky: + Description: Expand vyber to Sky + Info: + - '&eUsage: &6/res select sky' + - Expands as high as your allowed to go. + bedrock: + Description: Expand vyber to Bedrock + Info: + - '&eUsage: &6/res select bedrock' + - Expands as low as your allowed to go. + expand: + Description: Expand vyber in a direction. + Info: + - '&eUsage: &6/res select expand ' + - Expands in the direction your looking. + shift: + Description: Shift vyber in a direction + Info: + - '&eUsage: &6/res select shift ' + - Pushes your vyber by in the direction your looking. + chunk: + Description: Select the chunk your currently in. + Info: + - '&eUsage: &6/res select chunk' + - Selects the chunk your currently standing in. + residence: + Description: Select a existing area in a residence. + Info: + - '&eUsage: &6/res select residence ' + - Selects a existing area in a residence. + Args: '[residence]' + worldedit: + Description: Set vyber using the current WorldEdit vyber. + Info: + - '&eUsage: &6/res select worldedit' + - Sets vyber area using the current WorldEdit vyber. + create: + Description: Create Residences + Info: + - '&eUsage: &6/res create ' + remove: + Description: Remove residences. + Info: + - '&eUsage: &6/res remove ' + Args: '[residence]' + padd: + Description: Add player to residence. + Info: + - '&eUsage: &6/res padd [player]' + - Adds essential flags for player + Args: '[residence] [playername]' + pdel: + Description: Remove player from residence. + Info: + - '&eUsage: &6/res pdel [player]' + - Removes essential flags from player + Args: '[residence] [playername]' + info: + Description: zobrazit info on a residence. + Info: + - '&eUsage: &6/res info ' + - Leave off to display info for the residence your currently in. + Args: '[residence]' + set: + Description: Set general flags on a Residence + Info: + - '&eUsage: &6/res set [flag] [true/false/remove]' + - To see a list of flags, use /res flags ? + - These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?) + Args: '[residence] [flag] [true/false/remove]' + pset: + Description: Set flags on a specific player for a Residence. + Info: + - '&eUsage: &6/res pset [player] [flag] [true/false/remove]' + - '&eUsage: &6/res pset [player] removeall' + - To see a list of flags, use /res flags ? + Args: '[residence] [playername] [flag] [true/false/remove]' + flags: + Description: List of flags + Info: + - For flag values, usually true allows the action, and false denys the action. + SubCommands: + build: + Description: allows or denys building + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + use: + Description: allows or denys use of doors, lever, buttons, etc... + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + move: + Description: allows or denys movement in the residence + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + container: + Description: allows or denys use of furnaces, chests, dispensers, etc... + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + trusted: + Description: gives build, use, move, container and tp flags + Info: + - '&eUsage: &6/res pset [flag] true/false/remove' + place: + Description: allows or denys only placement of blocks, overrides the build flag + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + destroy: + Description: allows or denys only destruction of blocks, overrides the build flag + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + pvp: + Description: allow or deny pvp in the residence + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + tp: + Description: allow or disallow teleporting to the residence + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + enderpearl: + Description: allow or disallow teleporting to the residence with enderpearl + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + admin: + Description: gives a player permission to change flags on a residence + Info: + - '&eUsage: &6/res pset [flag] true/false/remove' + subzone: + Description: allow a player to make subzones in the residence + Info: + - '&eUsage: &6/res pset [flag] true/false/remove' + monsters: + Description: allows or denys monster spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + cmonsters: + Description: allows or denys custom monster spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + smonsters: + Description: allows or denys spawner or spawn egg monster spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + nmonsters: + Description: allows or denys natural monster spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + animals: + Description: allows or denys animal spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + canimals: + Description: allows or denys custom animal spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + sanimals: + Description: allows or denys spawner or spawn egg animal spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + nanimals: + Description: allows or denys natural animal spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + animalkilling: + Description: allows or denys animal killing + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + mobkilling: + Description: allows or denys mob killing + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + nofly: + Description: allows or denys fly in residence + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + vehicledestroy: + Description: allows or denys vehicle destroy + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + shear: + Description: allows or denys sheep shear + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + dye: + Description: allows or denys sheep dyeing + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + leash: + Description: allows or denys aninal leash + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + healing: + Description: setting to true makes the residence heal its occupants + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + feed: + Description: setting to true makes the residence feed its occupants + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + tnt: + Description: allow or deny tnt explosions + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + creeper: + Description: allow or deny creeper explosions + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + ignite: + Description: allows or denys fire ignition + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + firespread: + Description: allows or denys fire spread + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + bucket: + Description: allow or deny bucket use + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + bucketfill: + Description: allow or deny bucket fill + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + bucketempty: + Description: allow or deny bucket empty + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + flow: + Description: allows or denys liquid flow + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + lavaflow: + Description: allows or denys lava flow, overrides flow + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + waterflow: + Description: allows or denys water flow, overrides flow + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + damage: + Description: allows or denys all entity damage within the residence + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + piston: + Description: allow or deny pistons from pushing or pulling blocks in the residence + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + hidden: + Description: hides residence from list or listall commands + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + cake: + Description: allows or denys players to eat cake + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + lever: + Description: allows or denys players to use levers + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + button: + Description: allows or denys players to use buttons + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + diode: + Description: allows or denys players to use redstone repeaters + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + door: + Description: allows or denys players to use doors and trapdoors + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + table: + Description: allows or denys players to use workbenches + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + enchant: + Description: allows or denys players to use enchanting tables + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + brew: + Description: allows or denys players to use brewing stands + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + bed: + Description: allows or denys players to use beds + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + pressure: + Description: allows or denys players to use pressure plates + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + note: + Description: allows or denys players to use note blocks + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + redstone: + Description: Gives lever, diode, button, pressure, note flags + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + craft: + Description: Gives table, enchant, brew flags + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + trample: + Description: Allows or denys crop trampling in residence + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + trade: + Description: Allows or denys villager trading in residence + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + nomobs: + Description: Prevents monsters from entering residence residence + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + explode: + Description: Allows or denys explosions in residences + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + witherdamage: + Description: Disables wither damage in residences + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + fireball: + Description: Allows or denys fire balls in residences + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + command: + Description: Allows or denys comamnd use in residences + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + overridepvp: + Description: Overrides any plugin pvp protection + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + keepinv: + Description: Players keeps inventory after death + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + keepexp: + Description: Players keeps exp after death + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + burn: + Description: allows or denys Mob combustion in residences + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + bank: + Description: allows or denys deposit/withdraw money from res bank + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + shop: + Description: adds residence to special residence obchod list + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + day: + Description: sets day time in residence + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + night: + Description: sets night time in residence + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + chat: + Description: Allows to join residence chat room + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + nodurability: + Description: Prevents item durability loss + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + mobitemdrop: + Description: Prevents mob droping items on death + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + mobexpdrop: + Description: Prevents mob droping exp on death + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + dragongrief: + Description: Prevents ender dragon block griefing + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + snowtrail: + Description: Prevents snowman snow trails + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + respawn: + Description: Automaticaly respawns player + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + limits: + Description: zobrazit your limits. + Info: + - '&eUsage: &6/res limits' + - zobrazits the limitations you have on creating and managing residences. + tpset: + Description: Set the teleport location of a Residence + Info: + - '&eUsage: &6/res tpset' + - This will set the teleport location for a residence to where your standing. + - You must be standing in the residence to use this command. + - You must also be the owner or have the +admin flag for the residence. + tp: + Description: Teleport to a residence + Info: + - '&eUsage: &6/res tp [residence]' + - Teleports you to a residence, you must have +tp flag access or be the owner. + - Your permission group must also be allowed to teleport by the server admin. + Args: '[residence]' + rt: + Description: Teleports to random location in world + Info: + - '&eUsage: &6/res rt' + - Teleports you to random location in defined world. + rc: + Description: Joins current or defined residence chat chanel + Info: + - '&eUsage: &6/res rc (residence)' + - Teleports you to random location in defined world. + SubCommands: + leave: + Description: Leaves current residence chat chanel + Info: + - '&eUsage: &6/res rc leave' + - If you are in residence chat cnahel then you will leave it + setcolor: + Description: Sets residence chat chanel text color + Info: + - '&eUsage: &6/res rc setcolor [colorCode]' + - Sets residence chat chanel text color + setprefix: + Description: Sets residence chat chanel prefix + Info: + - '&eUsage: &6/res rc setprefix [newName]' + - Sets residence chat chanel prefix + kick: + Description: Kicks player from chanel + Info: + - '&eUsage: &6/res rc kick [player]' + - Kicks player from chanel + expand: + Description: Expands residence in direction you looking + Info: + - '&eUsage: &6/res expand (residence) [amount]' + - Expands residence in direction you looking. + - Residence name is optional + contract: + Description: Contracts residence in direction you looking + Info: + - '&eUsage: &6/res contract (residence [amount])' + - Contracts residence in direction you looking. + - Residence name is optional + shop: + Description: Manage residence obchod + Info: + - Manages residence obchod feature + SubCommands: + list: + Description: zobrazits list of res obchods + Info: + - '&eUsage: &6/res shop list' + - zobrazits full list of all residences with obchod flag + vote: + Description: Vote for residence obchod + Info: + - '&eUsage: &6/res shop vote [amount]' + - Votes for current or defined residence + Args: '[residence]' + like: + Description: Give like for residence obchod + Info: + - '&eUsage: &6/res shop like ' + - Gives like for residence shop + Args: '[residenceshop]' + votes: + Description: zobrazits res shop votes + Info: + - '&eUsage: &6/res shop votes ' + - zobrazits full vote list of current or defined residence shop + Args: '[residenceshop]' + likes: + Description: zobrazits res shop likes + Info: + - '&eUsage: &6/res shop likes ' + - zobrazits full like list of current or defined residence shop + Args: '[residenceshop]' + setdesc: + Description: Sets residence shop description + Info: + - '&eUsage: &6/res shop setdesc [text]' + - Sets residence shop description. Color code supported. For new line use /n + createboard: + Description: Create res shop board + Info: + - '&eUsage: &6/res shop createboard [place]' + - Creates res shop board from selected area. Place - position from which to start filling board + deleteboard: + Description: Deletes res shop board + Info: + - '&eUsage: &6/res shop deleteboard' + - Deletes res shop board bi right clicking on one of signs + tpconfirm: + Description: Ignore unsafe teleportation warning + Info: + - '&eUsage: &6/res tpconfirm' + - Teleports you to a residence, when teleportation is unsafe. + subzone: + Description: Create subzones in residences. + Info: + - '&eUsage: &6/res subzone [subzone name]' + - If residence name is left off, will attempt to use residence your standing in. + Args: '[residence]' + area: + Description: Manage physical areas for a residence. + SubCommands: + list: + Description: List physical areas in a residence + Info: + - '&eUsage: &6/res area list [residence] ' + Args: '[residence]' + listall: + Description: List coordinates and other Info for areas + Info: + - '&eUsage: &6/res area listall [residence] ' + Args: '[residence]' + add: + Description: Add physical areas to a residence + Info: + - '&eUsage: &6/res area add [residence] [areaID]' + - You must first select two points first. + Args: '[residence]' + remove: + Description: Remove physical areas from a residence + Info: + - '&eUsage: &6/res area remove [residence] [areaID]' + Args: '[residence]' + replace: + Description: Replace physical areas in a residence + Info: + - '&eUsage: &6/res area replace [residence] [areaID]' + - You must first select two points first. + - Replacing a area will charge the difference in size if the new area is bigger. + Args: '[residence]' + message: + Description: Manage residence enter / leave messages + Info: + - '&eUsage: &6/res message [enter/leave] [message]' + - Set the enter or leave message of a residence. + - '&eUsage: &6/res message remove [enter/leave]' + - Removes a enter or leave message. + Args: '[residence] [enter/leave]' + lease: + Description: Manage residence leases + Info: + - '&eUsage: &6/res lease [renew/cost] [residence]' + - /res lease cost will zobrazit the cost of renewing a residence lease. + - /res lease renew will renew the residence provided you have enough money. + Args: '[renew/cost] [residence]' + SubCommands: + set: + Description: Set the lease time + Info: + - '&eUsage: &6/resadmin lease set [residence] [#days/infinite]' + - Sets the lease time to a specified number of days, or infinite. + Args: '[residence]' + renew: + Description: Renew the lease time + Info: + - '&eUsage: &6/resadmin lease renew ' + - Renews the lease time for current or specified residence. + Args: '[residence]' + expires: + Description: Lease end date + Info: + - '&eUsage: &6/resadmin lease expires ' + - zobrazits when expires residence lease time. + Args: '[residence]' + cost: + Description: zobrazits renew cost + Info: + - '&eUsage: &6/resadmin lease cost ' + - zobrazits how much money you need to renew residence lease. + Args: '[residence]' + bank: + Description: Manage money in a Residence + Info: + - '&eUsage: &6/res bank [deposit/withdraw] [amount]' + - You must be standing in a Residence or provide residence name + - You must have the +bank flag. + Args: '[deposit/withdraw] [residence]' + confirm: + Description: Confirms removal of a residence. + Info: + - '&eUsage: &6/res confirm' + - Confirms removal of a residence. + gset: + Description: Set flags on a specific group for a Residence. + Info: + - '&eUsage: &6/res gset [group] [flag] [true/false/remove]' + - To see a list of flags, use /res flags ? + lset: + Description: Change blacklist and ignorelist options + Info: + - '&eUsage: &6/res lset [blacklist/ignorelist] [material]' + - '&eUsage: &6/res lset Info' + - Blacklisting a material prevents it from being placed in the residence. + - Ignorelist causes a specific material to not be protected by Residence. + Args: '[residence] [blacklist/ignorelist] [material]' + removeall: + Description: Remove all residences owned by a player. + Info: + - '&eUsage: &6/res removeall [owner]' + - Removes all residences owned by a specific player.' + - Requires /resadmin if you use it on anyone besides yourself. + Args: '[playername]' + list: + Description: List Residences + Info: + - '&eUsage: &6/res list ' + - Lists all the residences a player owns (except hidden ones). + - If listing your own residences, zobrazits hidden ones as well. + - To list everyones residences, use /res listall. + Args: '[playername]' + listhidden: + Description: List Hidden Residences + Info: + - '&eUsage: &6/res listhidden ' + - Lists hidden residences for a player. + Args: '[playername]' + listall: + Description: List All Residences + Info: + - '&eUsage: &6/res listall ' + - Lists hidden residences for a player. + listallhidden: + Description: List All Hidden Residences + Info: + - '&eUsage: &6/res listhidden ' + - Lists all hidden residences on the server. + sublist: + Description: List Residence Subzones + Info: + - '&eUsage: &6/res sublist ' + - List subzones within a residence. + Args: '[residence]' + reset: + Description: Reset residence to default flags. + Info: + - '&eUsage: &6/res reset ' + - Resets the flags on a residence to their default. You must be the owner or an admin to do this. + Args: '[residence]' + rename: + Description: Renames a residence. + Info: + - '&eUsage: &6/res rename [OldName] [NewName]' + - You must be the owner or an admin to do this. + - The name must not already be taken by another residence. + Args: '[residence]' + kick: + Description: Kicks player from residence. + Info: + - '&eUsage: &6/res kick ' + - You must be the owner or an admin to do this. + - Player should be online. + Args: '[playername]' + mirror: + Description: Mirrors Flags + Info: + - '&eUsage: &6/res market ? for more Info' + Args: '[residence] [residence]' + market: + Description: Buy, Sell, or Rent Residences + SubCommands: + Info: + Description: Get economy Info on residence + Info: + - '&eUsage: &6/res market Info [residence]' + - zobrazits if the Residence is for sale or for rent, and the cost. + Args: '[residence]' + list: + Description: Lists rentable and for sale residences. + Info: + - '&eUsage: &6/res market list' + sell: + Description: Sell a residence + Info: + - '&eUsage: &6/res market sell [residence] [amount]' + - Puts a residence for sale for [amount] of money. + - Another player can buy the residence with /res market buy + Args: '[residence]' + sign: + Description: Set market sign + Info: + - '&eUsage: &6/res market sign [residence]' + - Sets market sign you are looking at. + Args: '[residence]' + buy: + Description: Buy a residence + Info: + - '&eUsage: &6/res market buy [residence]' + - Buys a Residence if its for sale. + Args: '[residence]' + unsell: + Description: Stops selling a residence + Info: + - '&eUsage: &6/res market unsell [residence]' + Args: '[residence]' + rent: + Description: ent a residence + Info: + - '&eUsage: &6/res market rent [residence] ' + - Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it. + Args: '[cresidence] [true/false]' + rentable: + Description: Make a residence rentable. + Info: + - '&eUsage: &6/res market rentable [residence] [cost] [days] ' + - Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires. + Args: '[residence]' + release: + Description: Remove a residence from rent or rentable. + Info: + - '&eUsage: &6/res market release [residence]' + - If you are the renter, this command releases the rent on the house for you. + - If you are the owner, this command makes the residence not for rent anymore. + Args: '[residence]' + current: + Description: zobrazit residence your currently in. + Info: + - '&eUsage: &6/res current' + signupdate: + Description: Updated residence signs + Info: + - '&eUsage: &6/res signupdate' + lists: + Description: Predefined permission lists + Info: + - Predefined permissions that can be applied to a residence. + SubCommands: + add: + Description: Add a list + Info: + - '&eUsage: &6/res lists add ' + remove: + Description: Remove a list + Info: + - '&eUsage: &6/res lists remove ' + apply: + Description: Apply a list to a residence + Info: + - '&eUsage: &6/res lists apply ' + set: + Description: Set a flag + Info: + - '&eUsage: &6/res lists set ' + pset: + Description: Set a player flag + Info: + - '&eUsage: &6/res lists pset ' + gset: + Description: Set a group flag + Info: + - '&eUsage: &6/res lists view ' + view: + Description: View a list. + server: + Description: Make land server owned. + Info: + - '&eUsage: &6/resadmin server [residence]' + - Make a residence server owned. + Args: '[cresidence]' + setowner: + Description: Change owner of a residence. + Info: + - '&eUsage: &6/resadmin setowner [residence] [player]' + Args: '[cresidence]' + resreload: + Description: Reload residence. + Info: + - '&eUsage: &6/resreload' + resload: + Description: Load residence save file. + Info: + - '&eUsage: &6/resload' + - UNSAFE command, does not save residences first. + - Loads the residence save file after you have made changes. + removeworld: + Description: Remove all residences from world + Info: + - '&eUsage: &6/res removeworld [worldname]' + - Can only be used from console + signconvert: + Description: Converts signs from ResidenceSign plugin + Info: + - '&eUsage: &6/res signconvert' + - Will try to convert saved sign data from 3rd party plugin + version: + Description: how residence version + Info: + - '&eUsage: &6/res version' diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 425c7e854..ff3db5dee 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -570,6 +570,12 @@ public void LoadLang(String lang) { "Removes essential flags from player"), writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Args", "[residence] [playername]", writer, conf, true); + // res give + GetConfig("CommandHelp.SubCommands.res.SubCommands.give.Description", "Give residence to player.", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.give.Info", Arrays.asList("&eUsage: &6/res give [player]", + "Gives your owned residence to target player"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.give.Args", "[residence] [playername]", writer, conf, true); + // res info GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Info", diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index d270323b7..7191d36d5 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -161,7 +161,7 @@ public class Residence extends JavaPlugin { protected static boolean initsuccess = false; public static Map deleteConfirm; public static List resadminToggle; - private final static String[] validLanguages = { "English" }; + private final static String[] validLanguages = { "English" , "Czech", "Chinese"}; public static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); public static WorldEditPlugin wep = null; public static WorldGuardPlugin wg = null; diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index bfb0f8dc0..51859b15e 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -6,19 +6,25 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.utils.Debug; -public abstract class give implements cmd { +public class give implements cmd { @Override public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + Debug.D("ss"); if (!(sender instanceof Player)) return false; Player player = (Player) sender; + Debug.D(args.toString()); + + Debug.D("ss2"); if (args.length != 3) return false; - + + Debug.D("ss1"); Residence.getResidenceManager().giveResidence(player, args[2], args[1], resadmin); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index 0c03c4354..1f4787ff0 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -7,7 +7,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; -public abstract class removeworld implements cmd { +public class removeworld implements cmd { @Override public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { diff --git a/src/com/bekvon/bukkit/residence/commands/signconvert.java b/src/com/bekvon/bukkit/residence/commands/signconvert.java index 068b93f2c..61c978eaf 100644 --- a/src/com/bekvon/bukkit/residence/commands/signconvert.java +++ b/src/com/bekvon/bukkit/residence/commands/signconvert.java @@ -7,7 +7,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; -public abstract class signconvert implements cmd { +public class signconvert implements cmd { @Override public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index c90420792..c1d7f2b37 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -19,6 +19,8 @@ import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.Debug; + import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; @@ -1108,21 +1110,36 @@ public Map save() { } root.put("Subzones", subzonemap); root.put("Permissions", perms.save()); - DecimalFormat formatter = new DecimalFormat("#0.00"); - formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); + if (tpLoc != null) { Map tpmap = new HashMap<>(); - - tpmap.put("X", Double.valueOf(formatter.format(tpLoc.getX()))); - tpmap.put("Y", Double.valueOf(formatter.format(tpLoc.getY()))); - tpmap.put("Z", Double.valueOf(formatter.format(tpLoc.getZ()))); - tpmap.put("Pitch", Double.valueOf(formatter.format(tpLoc.getPitch()))); - tpmap.put("Yaw", Double.valueOf(formatter.format(tpLoc.getYaw()))); + tpmap.put("X", convertDouble(tpLoc.getX())); + tpmap.put("Y", convertDouble(tpLoc.getY())); + tpmap.put("Z", convertDouble(tpLoc.getZ())); + tpmap.put("Pitch", convertDouble(tpLoc.getPitch())); + tpmap.put("Yaw", convertDouble(tpLoc.getYaw())); root.put("TPLoc", tpmap); } return root; } + // Converting double with comman to dots format and striping to 2 numbers after dot + private double convertDouble(double d) { + return convertDouble(String.valueOf(d)); + } + private double convertDouble(String dString) { + DecimalFormat formatter = new DecimalFormat("#0.00"); + formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); + dString = dString.replace(",", "."); + Double d = 0D; + try { + d = Double.valueOf(dString); + d = Double.valueOf(formatter.format(d)); + } catch (Exception e) { + } + return d; + } + @SuppressWarnings("unchecked") public static ClaimedResidence load(Map root, ClaimedResidence parent, Residence plugin) throws Exception { ClaimedResidence res = new ClaimedResidence(plugin); diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index cc5603399..d61913822 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -75,6 +75,8 @@ public String getMessage(String key, Object... variables) { * @return the message */ public String getDefaultMessage(String key) { + if (!key.contains("Language.") && !key.contains("CommandHelp.")) + key = "Language." + key; String missing = "Missing locale for " + key; return enlocale.contains(key) == true ? ChatColor.translateAlternateColorCodes('&', enlocale.getString(key)) : missing; } @@ -87,6 +89,8 @@ public String getDefaultMessage(String key) { * @return the message */ public List getMessageList(String key) { + if (!key.contains("Language.") && !key.contains("CommandHelp.")) + key = "Language." + key; String missing = "Missing locale for " + key; if (customlocale.isList(key)) return LocaleManager.ColorsArray(customlocale.getStringList(key), true); diff --git a/src/plugin.yml b/src/plugin.yml index e8baf8ad4..887ff1eb2 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.2.2 +version: 4.0.2.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 82b0e91a2393df2eb4dc9a6cf78a1e9c432ab5d8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 25 Mar 2016 10:39:45 +0200 Subject: [PATCH 0139/1142] Locale updates --- src/Language/Czech.yml | 979 +++++++++--------- .../bukkit/residence/allNms/v1_9Events.java | 20 +- .../bukkit/residence/commands/give.java | 3 - src/plugin.yml | 2 +- 4 files changed, 503 insertions(+), 501 deletions(-) diff --git a/src/Language/Czech.yml b/src/Language/Czech.yml index f91aea774..8ea6bddb2 100644 --- a/src/Language/Czech.yml +++ b/src/Language/Czech.yml @@ -19,7 +19,8 @@ Language: Group: '&cNeplatna skupina...' MessageType: '&cTyp zpravy musi byt enter nebo remove.' Flag: '&cNeplatna vlajka...' - FlagState: '&cNeplatny status vlajky, musi byt &6true(t)&c, &6false(f)&c, nebo &6remove(r)' + FlagState: '&cNeplatny status vlajky, musi byt &6true(t)&c, &6false(f)&c, nebo + &6remove(r)' List: '&eNeznamy seznam, musi byt &6blacklist &enebo &6ignorelist.' Page: '&eNeplatna stranka...' Help: '&cNeplatna stranka napovedy...' @@ -33,12 +34,9 @@ Language: NonExist: '&cTakova oblast neexistuje.' InvalidName: '&cNeplatne jmeno oblasti...' ToSmallTotal: '&cVybrana oblast je mensi, nez je povolene minimum (&6%1&c)' - ToSmallX: '&cYour &6X &cvyber length (&6%1&c) is too small. &eAllowed &6%2 - &eand more.' - ToSmallY: '&cYour vyber height (&6%1&c) is too small. &eAllowed &6%2 &eand - more.' - ToSmallZ: '&cYour &6Z &cvyber length (&6%1&c) is too small. &eAllowed &6%2 - &eand more.' + ToSmallX: '&cTvuj vyber &6X (&6%1&c) je moc kratky. &eJe povoleno &6%2 &ea vice.' + ToSmallY: '&cTvuj vyber (&6%1&c) je moc nizky. &eJe povoleno &6%2 &ea vice.' + ToSmallZ: '&cTvuj vyber &6Z (&6%1&c) je moc uzky. &eJe povoleno &6%2 &ea vice.' Rename: '&eOblast &6%1 &eprejmenovana na &6%2' Remove: '&eOblast &6%1 odstranena...' Name: '&eJmeno: &2%1' @@ -66,10 +64,10 @@ Language: TooHigh: '&cVyber je vyssi nez vyska mapa, omezuji.' TooLow: '&cVyber je pod bedrock, omezuji.' TotalSize: '&eVelikost vyberu: &6%1' - AutoEnabled: '&eAutomaticky vyberovy rezim &6ZAPNUT&e. Vypni pomoci &6/res + AutoEnabled: '&eAutomaticky vyberovy rezim &6ZAPNUT&e. Vypni pomoci &6/res select + auto' + AutoDisabled: '&eAutomaticky vyberovy rezim &6VYPNUT&e. Opet zapni pomoci &6/res select auto' - AutoDisabled: '&eAutomaticky vyberovy rezim &6VYPNUT&e. Opet zapni pomoci - &6/res select auto' Disabled: '&cNemas prava pro pouziti vyberovych prikazu' Sign: Updated: '&6%1 &ecedule aktualizovany!' @@ -93,15 +91,14 @@ Language: Flag: Set: '&eVlajka (&6%1&e) &6%2 &enastavena na &6%3 &estate' SetFailed: '&cNemas pristup k vlajce &6%1' - CheckTrue: '&eVlajka &6%1 &ese vztahuje na hrace &6%2 &epro residenci &6%3&e, hodnota - = &6%4' + CheckTrue: '&eVlajka &6%1 &ese vztahuje na hrace &6%2 &epro residenci &6%3&e, + hodnota = &6%4' CheckFalse: '&eVlajka &6%1 &ese nevztahuje na hrace &6%2 &ev residenci.' Cleared: '&eVlajky vycisteny.' Default: '&eNastaveny vychozi hodnoty vlajek.' Deny: '&cZde nemas opravneni na &6%1.' SetDeny: '&cVlastnik residence nema prava na &6%1' - ChangeDeny: '&cNemuzes zmenit vlajku &6%1 &cdokud je/jsou hrac(i) &6%2 &c - uvnitr.' + ChangeDeny: '&cNemuzes zmenit vlajku &6%1 &cdokud je/jsou hrac(i) &6%2 &c uvnitr.' Bank: NoAccess: '&cNemas pristup k bance.' Name: ' &eBanka: &6%1' @@ -119,8 +116,8 @@ Language: SelectInside: '&eOba vyberove body musi byt uvnitr residence.' CantCreate: '&cNemas prava na vytvoreni subzon v residenci.' CantDelete: '&cNemas prava na mazani subzon v residenci.' - CantDeleteNotOwnerOfParent: '&cNejsi vlastnikem nadrizene residence, nelze - smazat tuto subzone.' + CantDeleteNotOwnerOfParent: '&cNejsi vlastnikem nadrizene residence, nelze smazat + tuto subzone.' CantContract: '&cNemas opravneni na zmenseni subzony.' CantExpand: '&cNemas opravneni na zvetseni subzony.' DeleteConfirm: '&ePokud opravdu chces smazat subzonu &6%1&e, napis &6/res confirm @@ -151,8 +148,8 @@ Language: MoveDeny: '&cNemas pravo k pohybu v residenci &6%1' TeleportNoFlag: '&cNemas pravo teleportovat se na onu residenci.' FlagDeny: '&cNemas pravo &6%1 &cv residenci &6%2' - GiveLimits: '&cNemuzes dat residenci cilovemu hraci, protoze ten jiz ma - maximalni pocet residenci.' + GiveLimits: '&cNemuzes dat residenci cilovemu hraci, protoze ten jiz ma maximalni + pocet residenci.' Give: '&eDal jsi residenci &6%1 &ehraci &6%2' Recieve: '&eObrzel jsi residenci &6%1 &eod hrace &6%2' List: ' &a%1%2 &e- &6Svet&e: &6%3' @@ -175,11 +172,10 @@ Language: CantContractResidence: '&cNemas pravo na zmenseni residence.' NoResHere: '&cNeni tu zadna residence.' OwnerNoPermission: '&cVlastnik nema na toto prava.' - ParentNoPermission: '&cNemas prava menit vlastnosti nadrizene - zony.' + ParentNoPermission: '&cNemas prava menit vlastnosti nadrizene zony.' ChatDisabled: '&eChat v residenci zakazan...' - DeleteConfirm: '&ePokud chces opravdu smazat residenci &6%1&e, napis &6/res - confirm &epro potvrzeni.' + DeleteConfirm: '&ePokud chces opravdu smazat residenci &6%1&e, napis &6/res confirm + &epro potvrzeni.' Rent: Disabled: '&cPronajimani je zakazano...' DisableRenew: '&eNajem residence &6%1 &ese jiz nebude automaticky prodluzovat.' @@ -196,23 +192,24 @@ Language: Economy: LandForSale: '&eZeme na prodej:' NotEnoughMoney: '&cNemas dostatek penez.' - MoneyCharged: '&eCharged &6%1 &eto your &6%2 &eaccount.' - MoneyAdded: '&eGot &6%1 &eto your &6%2 &eaccount.' - MoneyCredit: '&eCredited &6%1 &eto your &6%2 &eaccount.' - RentReleaseInvalid: '&eResidence &6%1 &eis not rented or for rent.' - RentSellFail: '&cCannot sell a Residence if it is for rent.' - SellRentFail: '&cCannot rent a Residence if it is for sale.' - OwnerBuyFail: '&cCannot buy your own land!' - OwnerRentFail: '&cCannot rent your own land!' - AlreadySellFail: '&eResidence already for sale!' - LeaseRenew: '&eLease valid until &6%1' - LeaseRenewMax: '&eLease renewed to maximum allowed' - LeaseNotExpire: '&eNo such lease, or lease does not expire.' - LeaseRenewalCost: '&eRenewal cost for area &6%1 &eis &6%2' - LeaseInfinite: '&eLease time set to infinite...' - MarketDisabled: '&cEconomy Disabled!' - SellAmount: '&eSell Amount: &2%1' - LeaseExpire: '&eLease Expire Time: &2%1' + MoneyCharged: '&eOdebrano &6%1 &ez tveho uctu &6%2.' + MoneyAdded: '&ePridano &6%1 &edo tveho uctu &6%2.' + MoneyCredit: '&ePripsano &6%1 &etvemu uctu &6%2.' + RentReleaseInvalid: '&eResidence &6%1 &eneni pronajata, nebo neni k pronajmu.' + RentSellFail: '&cNelze prodat residenci, pokud je k pronajmu.' + SellRentFail: '&cNelze pronajmout residenci, pokud je na prodej.' + OwnerBuyFail: '&cNelze si koupit svoji vlastni plochu!' + OwnerRentFail: '&cNelze si pronajmout svoji vlastni plochu!' + AlreadySellFail: '&eResidence uz je na prodej!' + LeaseRenew: '&ePronajem validni do &6%1' + LeaseRenewMax: '&ePronajem prodlouzen na maximalni delku' + LeaseNotExpire: '&eZadny takovy pronajem neexistuje, nebo je na neomezene dlouhou + dobu.' + LeaseRenewalCost: '&eCena k pronajmu oblasti &6%1 &eje &6%2' + LeaseInfinite: '&eDoba pronajmu nastavena na nekonecno...' + MarketDisabled: '&cEkonomie je zakazana!' + SellAmount: '&eCastka k prodeji: &2%1' + LeaseExpire: '&ePronajem propada: &2%1' Expanding: North: '&eRozsiruji severne o &6%1 &eblocku' West: '&eRozsiruji zapadne o &6%1 &eblocku' @@ -252,8 +249,8 @@ Language: Sell: '&7- &ePenize za prodani residence za block:&3 %1' Flag: '&7- &ePrava na vlajky:&3 %1' MaxDays: '&7- &eMaximalni delka pronajmu (dny):&3 %1' - LeaseTime: '&7- &eLease Time Given on Renew:&3 %1' - RenewCost: '&7- &eRenew Cost Per Block:&3 %1' + LeaseTime: '&7- &eDelka najmu dana pri prodlouzeni:&3 %1' + RenewCost: '&7- &eCena znovuobnoveni najmu za block:&3 %1' Gui: Set: Title: '&6%1 vlajky' @@ -269,41 +266,41 @@ Language: NextPage: '&e-----< &6%1 &e>-----' NoNextPage: '&e-----------------------' Chat: - ChatChannelChange: '&eChanged residence chat channel to &6%1!' - ChatChannelLeave: '&eLeft residence chat' - JoinFirst: '&4Join residence chat channel first...' - InvalidChannel: '&4Invalid Channel...' - InvalidColor: '&4Incorrect color code' - NotInChannel: '&4Player is not in channel' - Kicked: '&6%1 &ewas kicked from &6%2 &echannel' - InvalidPrefixLength: '&4Prefix is to long. Allowed length: %1' - ChangedColor: '&eResidence chat channel color changed to %1' - ChangedPrefix: '&eResidence chat channel prefix changed to %1' + ChatChannelChange: '&eZmenen chat channel residence na &6%1!' + ChatChannelLeave: '&eOpustil chat v residenci' + JoinFirst: '&4Nejdrive se pripoj do residencniho chatu...' + InvalidChannel: '&4Neplatny channel...' + InvalidColor: '&4Nespravny kod barvy' + NotInChannel: '&4Hrac neni v channelu' + Kicked: '&6%1 &ebyl vyhozen z channelu &6%2' + InvalidPrefixLength: '&4Prefix je moc dlouhy. Povolena delka: %1' + ChangedColor: '&eBarva chatu v residenci zmenena na %1' + ChangedPrefix: '&ePrefix chatu v residenci zmenen na %1' Shop: - ListTopLine: '&6%1 &eobchod list - Page &6%2 &eof &6%3 %4' + ListTopLine: '&6%1 &eseznam obchodu - Strana &6%2&e/&6%3 %4' List: ' &e%1. &6%2 &e(&6%3&e) %4' ListVoted: '&e%1 (&6%2&e)' - ListLiked: '&eLikes: &0%1' - VotesTopLine: '&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5' + ListLiked: '&ePocet likes: &0%1' + VotesTopLine: '&6%1 &e%2 residence vote list &6- &eStrana &6%3&e/&6%4 %5' VotesList: ' &e%1. &6%2 &e%3 &7%4' - NoDesc: '&6No description' + NoDesc: '&6Zadny popis' Desc: |- - &6Description: + &6Popis: %1 - DescChange: '&6Description changed to: %1' - NewBoard: '&6Successfully added new obchod sign board' - DeleteBoard: '&6Right click sign of board you want to delete' - DeletedBoard: '&6Sign board removed' + DescChange: '&6Popis zmenen na: %1' + NewBoard: '&6Uspesne pridana nova obchodni tabule' + DeleteBoard: '&6Klikni pravym klickem na ceduli pro smazani tabule' + DeletedBoard: '&6Tabule smazana' IncorrectBoard: '&cThis is not sign board, try performing command again and clicking correct sign' - InvalidSelection: '&cLeft click with vyber tool top left sign and then right + InvalidSelection: '&cLeft click with selection tool top left sign and then right click bottom right' VoteChanged: '&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence' - Voted: '&6You voted, and gave &e%1 &6votes to &e%2 &6residence' - Liked: '&6You liked &e%1 &6residence' - AlreadyLiked: '&6You already liked &e%1 &6residence' + Voted: '&6Hlasoval jsi a dal &e%1 &6hlasu do residence &e%2.' + Liked: '&6Libi se ti residence &e%1.' + AlreadyLiked: '&6Uz se ti libi tato residence &e%1' NoVotes: '&cThere is no registered votes for this residence' - CantVote: '&cResidence don''t have obchod flag set to true' + CantVote: '&cResidence nema vlajku shop nastavenou na true' VotedRange: '&6Vote range is from &e%1 &6to &e%2' SignLines: '1': '&e--== &8%1 &e==--' @@ -312,18 +309,18 @@ Language: '4': '&8%1&e (&8%2&e)' Likes4: '&9Likes: &8%2' RandomTeleport: - TpLimit: '&eYou can''t teleport so fast, please wait &6%1 &esec and try again' - TeleportSuccess: '&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation' - IncorrectLocation: '&6Could not find correct teleport location, please wait &e%1 - &6sec and try again.' - TeleportStarted: '&eTeleportation started, don''t move for next &6%4 &esec.' + TpLimit: '&eNemuzes se teleportovat tak rychle, prosim pockej &6%1 &esekund' + TeleportSuccess: '&eTeleportovano na souradnice X:&6%1&e, Y:&6%2&e, Z:&6%3' + IncorrectLocation: '&6Nepovedlo se teleportovat do lokace &e%1, pockej &6sekund + a zkus to znovu.' + TeleportStarted: '&eTeleportace zacala, nehybej se dalsich &6%4 &esekund.' General: DisabledWorld: '&cResidence plugin je v tomto svete zakazan' UseNumbers: '&cProsim pouzij cisla...' - CantPlaceLava: '&cNemuzes polozit lavu mimo residenci a vys, nez &6%1 - &cblocku vysoko.' - CantPlaceWater: '&cNemuzes polozit vodu mimo residenci a vys, nez &6%1 - &cblocku vysoko' + CantPlaceLava: '&cNemuzes polozit lavu mimo residenci a vys, nez &6%1 &cblocku + vysoko.' + CantPlaceWater: '&cNemuzes polozit vodu mimo residenci a vys, nez &6%1 &cblocku + vysoko' NoPermission: '&cNa toto nemas opravneni.' DefaultUsage: '&ePro vice informaci napis &6/%1 ?' MaterialGet: '&eNazev materialu pro ID &6%1 &eje &6%2' @@ -339,10 +336,9 @@ Language: InvalidHelp: '&cNeplatna stranka help.' TeleportDeny: '&cNemuzes se teleportovat.' TeleportSuccess: '&eTeleportovan!' - TeleportConfirm: '&cTento teleport neni bezpecny, spadnes &6%1 &cblocku. - Napis &6/res tpconfirm &cpokud si ses jisty.' - TeleportStarted: '&eTeleportace na &6%1 &ezacina, nehybej se dalsich &6%2 - &esekund.' + TeleportConfirm: '&cTento teleport neni bezpecny, spadnes &6%1 &cblocku. Napis + &6/res tpconfirm &cpokud si ses jisty.' + TeleportStarted: '&eTeleportace na &6%1 &ezacina, nehybej se dalsich &6%2 &esekund.' TeleportCanceled: '&eTeleportace zrusena!' NoTeleportConfirm: '&eZadne teleportacni zadosti ke schvaleni!' HelpPageHeader: '&eNapoveda - &6%1 &e- Strana <&6%2 &ez &6%3&e>' @@ -352,7 +348,7 @@ Language: PhysicalAreas: '&eFyzicke oblasti' CurrentArea: '&eSoucasna oblast: &6%1' TotalSize: '&eCelkova velikost: &6%1' - TotalWorth: '&eTotal worth of residence: &6%1 &e(&6%2&e)' + TotalWorth: '&eCelkova hodnota residenci: &6%1 &e(&6%2&e)' NotOnline: '&eCilovy hrac musi byt online.' NextPage: '&eDalsi strana' NextInfoPage: '&2| &eDalsi strana &2>>>' @@ -389,600 +385,602 @@ Language: Subzones: '&eSubzony' # The below lines represent various messages residence sends to the players. # Note that some messages have variables such as %1 that are inserted at runtime. - NewPlayerInfo: '&ePokud si chces ochranit dum, prosim pouzij - drevenou motyku k diagonalnimu oznaceni oblastni a napis &2/res - create TvujNazevResidence' + NewPlayerInfo: '&ePokud si chces ochranit dum, prosim pouzij drevenou motyku k + diagonalnimu oznaceni oblastni a napis &2/res create TvujNazevResidence' CommandHelp: - Description: Contains Help for Residence + Description: Napoveda k Residenci SubCommands: res: - Description: Main Residence Command + Description: Hlavni prikaz residence Info: - - '&2Use &6/res [command] ? &2to view more help Information.' + - '&2Pouzij &6/res [prikaz] ? &2pro zobrazeni dalsi napovedy.' SubCommands: select: - Description: vyber Commands + Description: Vyberove prikazy Info: - - This command selects areas for usage with residence. - - /res select [x] [y] [z] - selects a radius of blocks, with you in the middle. + - Timto prikazev vybiras oblasti pro pouziti s residencemi. + - /res select [x] [y] [z] - vybere radius blocku okolo tebe. SubCommands: coords: - Description: Display selected coordinates + Description: Zobrazi vybrane souradnice Info: - - '&eUsage: &6/res select coords' + - '&ePouziti: &6/res select coords' size: - Description: Display selected size + Description: Zobrazi vybranou velikost Info: - - '&eUsage: &6/res select size' + - '&ePouziti: &6/res select size' auto: - Description: Turns on auto vyber tool + Description: Zapne automaticky vyberovy rezim Info: - - '&eUsage: &6/res select auto [playername]' + - '&ePouziti: &6/res select auto [playername]' Args: '[playername]' cost: - Description: Display vyber cost + Description: Zobrazi cenu vyberu Info: - - '&eUsage: &6/res select cost' + - '&ePouziti: &6/res select cost' vert: - Description: Expand vyber Vertically + Description: Rozsirit vyber vertikalne Info: - - '&eUsage: &6/res select vert' - - Will expand vyber as high and as low as allowed. + - '&ePouziti: &6/res select vert' + - Rozsiri vyber od spoda az nahoru sky: - Description: Expand vyber to Sky + Description: Rozsirit vyber nahoru Info: - - '&eUsage: &6/res select sky' - - Expands as high as your allowed to go. + - '&ePouziti: &6/res select sky' + - Rozsiri vyber co nejvys bedrock: - Description: Expand vyber to Bedrock + Description: Rozsirit vyber nahoru Info: - - '&eUsage: &6/res select bedrock' - - Expands as low as your allowed to go. + - '&ePouziti: &6/res select bedrock' + - Rozsiri vyber co nejniz expand: - Description: Expand vyber in a direction. + Description: Rozsirit vyber urcitym smerem Info: - - '&eUsage: &6/res select expand ' - - Expands in the direction your looking. + - '&ePouziti: &6/res select expand ' + - Rozsiri vyber o blocku ve smeru tveho pohledu. shift: - Description: Shift vyber in a direction + Description: Posunout vyber po smeru. Info: - - '&eUsage: &6/res select shift ' - - Pushes your vyber by in the direction your looking. + - '&ePouziti: &6/res select shift ' + - Posune tvuj vyber o blocku ve smeru tveho pohledu. chunk: - Description: Select the chunk your currently in. + Description: Vybrat chunk, ve kterem prave stojis. Info: - - '&eUsage: &6/res select chunk' - - Selects the chunk your currently standing in. + - '&ePouziti: &6/res select chunk' + - Vybere chunk, ve kterem prave stojis. residence: - Description: Select a existing area in a residence. + Description: Vybrat existujici oblast v residenci. Info: - - '&eUsage: &6/res select residence ' - - Selects a existing area in a residence. + - '&ePouziti: &6/res select residence ' + - Vybere existuji oblast v residenci. Args: '[residence]' worldedit: - Description: Set vyber using the current WorldEdit vyber. + Description: Nastavit vyber pomoci WorldEditu. Info: - - '&eUsage: &6/res select worldedit' - - Sets vyber area using the current WorldEdit vyber. + - '&ePouziti: &6/res select worldedit' + - Nastavi oblast z WorldEdit nastroje. create: - Description: Create Residences + Description: Vytvorit residenci. Info: - - '&eUsage: &6/res create ' + - '&ePouziti: &6/res create ' remove: - Description: Remove residences. + Description: Odstranit residenci. Info: - - '&eUsage: &6/res remove ' + - '&ePouziti: &6/res remove ' Args: '[residence]' padd: - Description: Add player to residence. + Description: Pridat hrace do residence. Info: - - '&eUsage: &6/res padd [player]' + - '&ePouziti: &6/res padd [player]' - Adds essential flags for player Args: '[residence] [playername]' pdel: - Description: Remove player from residence. + Description: Odebrat hrace z residence. Info: - - '&eUsage: &6/res pdel [player]' + - '&ePouziti: &6/res pdel [player]' - Removes essential flags from player Args: '[residence] [playername]' + give: + Description: Give residence to player. + Info: + - '&eUsage: &6/res give [player]' + - Gives your owned residence to target player + Args: '[residence] [playername]' info: - Description: zobrazit info on a residence. + Description: Zobrazit info o residenci. Info: - - '&eUsage: &6/res info ' - - Leave off to display info for the residence your currently in. + - '&ePouziti: &6/res info ' + - Vynech aby si zobrazil informace o oblasti, ve ktere prave stojis. Args: '[residence]' set: - Description: Set general flags on a Residence + Description: Nastaveni vlajek residence. Info: - - '&eUsage: &6/res set [flag] [true/false/remove]' - - To see a list of flags, use /res flags ? - - These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?) - Args: '[residence] [flag] [true/false/remove]' + - '&ePouziti: &6/res set [vlajka] [true/false/remove]' + - Pouzij &6/res flags ? &cpro zobrazeni vsech dostupnych vlajek + - Tyto vlajky se vztahuji na vsechny hrace. (pokud chces jenom na jednoho, zkus &6/res pset ?&c) + Args: '[residence] [vlajka] [true/false/remove]' pset: - Description: Set flags on a specific player for a Residence. + Description: Nastaveni vlajek residence na urciteho hrace. Info: - - '&eUsage: &6/res pset [player] [flag] [true/false/remove]' - - '&eUsage: &6/res pset [player] removeall' - - To see a list of flags, use /res flags ? - Args: '[residence] [playername] [flag] [true/false/remove]' + - '&ePouziti: &6/res pset [hrac] [vlajka] [true/false/remove]' + - '&ePouziti: &6/res pset [hrac] removeall' + - Pro zobrazeni vsech vlajek, napis /res flags ? + Args: '[residence] [hrac] [vlajka] [true/false/remove]' flags: - Description: List of flags + Description: Seznam vsech vlajek Info: - - For flag values, usually true allows the action, and false denys the action. + - True vetsinou povoluje, False zakazuje SubCommands: build: - Description: allows or denys building + Description: povoluje/zakazuje staveni Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' use: - Description: allows or denys use of doors, lever, buttons, etc... + Description: povoluje/zakazuje pouziti dveri, tlacitek, pacek, atd ... Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' move: - Description: allows or denys movement in the residence + Description: povoluje/zakazuje pohyb v residenci Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' container: - Description: allows or denys use of furnaces, chests, dispensers, etc... + Description: povoluje/zakazuje pristup k truhlam, pecim, dispenserum, atd ... Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' trusted: - Description: gives build, use, move, container and tp flags + Description: 'nastavi vlajky: build, use, move, container a tp' Info: - - '&eUsage: &6/res pset [flag] true/false/remove' + - '&ePouziti: &6/res pset [vlajka] true/false/remove' place: - Description: allows or denys only placement of blocks, overrides the build flag + Description: povoluje/zakazuje pouze pokladani blocku Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' destroy: - Description: allows or denys only destruction of blocks, overrides the build flag + Description: povoluje/zakazuje pouze niceni blocku Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' pvp: - Description: allow or deny pvp in the residence + Description: povoluje/zakazuje pvp Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' tp: - Description: allow or disallow teleporting to the residence + Description: povoluje/zakazuje teleport na residenci Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' enderpearl: - Description: allow or disallow teleporting to the residence with enderpearl + Description: povoluje/zakazuje pouziti enderperly v residenci Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' admin: - Description: gives a player permission to change flags on a residence + Description: povolit hraci menit vlajky v residenci Info: - - '&eUsage: &6/res pset [flag] true/false/remove' + - '&ePouziti: &6/res pset [vlajka] true/false/remove' subzone: - Description: allow a player to make subzones in the residence + Description: povolit hraci delat subzony v residenci Info: - - '&eUsage: &6/res pset [flag] true/false/remove' + - '&ePouziti: &6/res pset [vlajka] true/false/remove' monsters: - Description: allows or denys monster spawns + Description: povoluje/zakazuje spawn monster v residenci Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' cmonsters: - Description: allows or denys custom monster spawns + Description: povoluje/zakazuje vlastni spawnery Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' smonsters: - Description: allows or denys spawner or spawn egg monster spawns + Description: povoluje/zakazuje spawnery a spawn vejce Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' nmonsters: - Description: allows or denys natural monster spawns + Description: povoluje/zakazuje prirodni spawn monster Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' animals: - Description: allows or denys animal spawns + Description: povoluje/zakazuje spawn zvirat Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' canimals: - Description: allows or denys custom animal spawns + Description: povoluje/zakazuje spawn vlastnich zvirat Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' sanimals: - Description: allows or denys spawner or spawn egg animal spawns + Description: povoluje/zakazuje zvireci spawnery a spawn vejce Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' nanimals: - Description: allows or denys natural animal spawns + Description: povoluje/zakazuje prirodni spawn zvirat Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' animalkilling: - Description: allows or denys animal killing + Description: povoluje/zakazuje zabijeni zvirat Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' mobkilling: - Description: allows or denys mob killing + Description: povoluje/zakazuje zabijeni monster Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' nofly: - Description: allows or denys fly in residence + Description: povoluje/zakazuje letani v residenci Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' vehicledestroy: - Description: allows or denys vehicle destroy + Description: povoluje/zakazuje niceni dopravnich prostredku Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' shear: - Description: allows or denys sheep shear + Description: povoluje/zakazuje strihani ovci Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' dye: - Description: allows or denys sheep dyeing + Description: povoluje/zakazuje barveni ovci Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' leash: - Description: allows or denys aninal leash + Description: 'povoluje/zakazuje pouziti leash ' Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' healing: - Description: setting to true makes the residence heal its occupants + Description: nastaveni na true zpusobi regeneraci zivota v residenci Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' feed: - Description: setting to true makes the residence feed its occupants + Description: nastaveni na true zpusobi doplnovani hungeru v residenci Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' tnt: - Description: allow or deny tnt explosions + Description: povoluje/zakazuje tnt Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' creeper: - Description: allow or deny creeper explosions + Description: povoluje/zakazuje vybuchy creeperu Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' ignite: - Description: allows or denys fire ignition + Description: povoluje/zakazuje vzplanuti Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' firespread: - Description: allows or denys fire spread + Description: povoluje/zakazuje sireni ohne Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' bucket: - Description: allow or deny bucket use + Description: povoluje/zakazuje pouziti kyble Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' bucketfill: - Description: allow or deny bucket fill + Description: povoluje/zakazuje naplneni kyble Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' bucketempty: - Description: allow or deny bucket empty + Description: povoluje/zakazuje vyprazdneni kyble Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' flow: - Description: allows or denys liquid flow + Description: povoluje/zakazuje tok kapalin Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' lavaflow: - Description: allows or denys lava flow, overrides flow + Description: povoluje/zakazuje tok lavy; vyssi priorita nez flow Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' waterflow: - Description: allows or denys water flow, overrides flow + Description: povoluje/zakazuje tok vody; vyssi priorita nez flow Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' damage: Description: allows or denys all entity damage within the residence Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' piston: - Description: allow or deny pistons from pushing or pulling blocks in the residence + Description: povoluje/zakazuje funkci pistonu Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' hidden: - Description: hides residence from list or listall commands + Description: skryje residenci prikazum list a listall Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' cake: - Description: allows or denys players to eat cake + Description: povoluje/zakazuje hracum jist dort Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' lever: - Description: allows or denys players to use levers + Description: povoluje/zakazuje pouziti packy Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' button: - Description: allows or denys players to use buttons + Description: povoluje/zakazuje pouziti tlacitek Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' diode: - Description: allows or denys players to use redstone repeaters + Description: povoluje/zakazuje pouziti redstone repeateru Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' door: - Description: allows or denys players to use doors and trapdoors + Description: povoluje/zakazuje pouziti dveri Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' table: - Description: allows or denys players to use workbenches + Description: povoluje/zakazuje pouziti crafting table Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' enchant: - Description: allows or denys players to use enchanting tables + Description: povoluje/zakazuje pouziti enchant table Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' brew: - Description: allows or denys players to use brewing stands + Description: povoluje/zakazuje pouziti brewing stand Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' bed: - Description: allows or denys players to use beds + Description: povoluje/zakazuje pouziti posteli Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' pressure: - Description: allows or denys players to use pressure plates + Description: povoluje/zakazuje pouziti pressure plate Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' note: - Description: allows or denys players to use note blocks + Description: povoluje/zakazuje pouziti note blocku Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' redstone: - Description: Gives lever, diode, button, pressure, note flags + Description: 'Dava vlajky: lever, diode, button, pressure, note' Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' craft: - Description: Gives table, enchant, brew flags + Description: 'Dava vlajky: table, enchant, brew' Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' trample: - Description: Allows or denys crop trampling in residence + Description: Povoluje/zakazuje poslapani obili Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' trade: - Description: Allows or denys villager trading in residence + Description: Povoluje/zakazuje obchodovani s vesnicany Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' nomobs: - Description: Prevents monsters from entering residence residence + Description: Zabranit monstrum v proniknuti do residence Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' explode: - Description: Allows or denys explosions in residences + Description: Povoluje/zakazuje vybuchy Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' witherdamage: - Description: Disables wither damage in residences + Description: Povoluje/zakazuje niceni blocku witherem Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' fireball: - Description: Allows or denys fire balls in residences + Description: Povoluje/zakazuje fire ball Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' command: - Description: Allows or denys comamnd use in residences + Description: Povoluje/zakazuje pouziti prikazu v residenci Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' overridepvp: - Description: Overrides any plugin pvp protection + Description: Ignorovat PVP ochranu ostatnich pluginu Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' keepinv: - Description: Players keeps inventory after death + Description: Nechat hracum po smrti obsah inventare Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' keepexp: - Description: Players keeps exp after death + Description: Nechat hracum po smrti XP Info: - - '&eUsage: &6/res set/pset [flag] true/false/remove' + - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' burn: - Description: allows or denys Mob combustion in residences + Description: Povoluje/zakazuje horeni mobu v residenci Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' bank: - Description: allows or denys deposit/withdraw money from res bank + Description: Povoluje/zakazuje pouziti banky residence Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' shop: - Description: adds residence to special residence obchod list + Description: Pridat residenci do obchodniho seznamu Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' day: - Description: sets day time in residence + Description: Nastavi den v residenci Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' night: - Description: sets night time in residence + Description: Nastavi noc v residenci Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' chat: - Description: Allows to join residence chat room + Description: Povoluje pripojeni do chatu residence Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' nodurability: - Description: Prevents item durability loss + Description: Zabranuje opotrebovani nastroju Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' mobitemdrop: - Description: Prevents mob droping items on death + Description: Zabranuje vypadavani itemu z mobu po smrti Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' mobexpdrop: - Description: Prevents mob droping exp on death + Description: Zabranuje vypadavani XP z mobu Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' dragongrief: - Description: Prevents ender dragon block griefing + Description: Zabranuje niceni blocku ender drakem Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' snowtrail: - Description: Prevents snowman snow trails + Description: Zabranuje snehulakum nechavat za sebou snih Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' respawn: - Description: Automaticaly respawns player + Description: Automaticky respawnovat hrace Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&ePouziti: &6/res set [vlajka] true/false/remove' limits: - Description: zobrazit your limits. + Description: Zobrazit me limity. Info: - - '&eUsage: &6/res limits' - - zobrazits the limitations you have on creating and managing residences. + - '&ePouziti: &6/res limits' + - Zobrazi tva omezeni tykajici se rezidenci. tpset: - Description: Set the teleport location of a Residence + Description: Nastavit pozici teleportace v residenci Info: - - '&eUsage: &6/res tpset' - - This will set the teleport location for a residence to where your standing. - - You must be standing in the residence to use this command. - - You must also be the owner or have the +admin flag for the residence. + - '&ePouziti: &6/res tpset' + - Nastavi teleportacni pozici residence tam, kde stojis. + - Musis byt vlastnik residence, nebo mit vlajku +admin. tp: - Description: Teleport to a residence + Description: Teleportovat se do residence. Info: - - '&eUsage: &6/res tp [residence]' - - Teleports you to a residence, you must have +tp flag access or be the owner. - - Your permission group must also be allowed to teleport by the server admin. + - '&ePouziti: &6/res tp [residence]' + - Teleportuje te do residence. Ta musi mit nastavenou vlajku +tp, popr musis byt vlastnik. + - Take na to musis mit prava. Args: '[residence]' rt: - Description: Teleports to random location in world + Description: Teleportovat se na nahodnou lokaci ve svete. Info: - - '&eUsage: &6/res rt' - - Teleports you to random location in defined world. + - '&ePouziti: &6/res rt' + - Teleportuje te na nahodnou lokaci. rc: - Description: Joins current or defined residence chat chanel + Description: Pripojit se do residencniho chatu. Info: - - '&eUsage: &6/res rc (residence)' - - Teleports you to random location in defined world. + - '&ePouziti: &6/res rc (residence)' SubCommands: leave: - Description: Leaves current residence chat chanel + Description: Opustit stavajici residencni chat Info: - - '&eUsage: &6/res rc leave' - - If you are in residence chat cnahel then you will leave it + - '&ePouziti: &6/res rc leave' + - Pokud si v residencnim chatu, timto prikazem ho opustis. setcolor: - Description: Sets residence chat chanel text color + Description: Nastavit barvu residencniho chatu Info: - - '&eUsage: &6/res rc setcolor [colorCode]' - - Sets residence chat chanel text color + - '&ePouziti: &6/res rc setcolor [colorCode]' + - Nastavi barvu residencniho chatu setprefix: - Description: Sets residence chat chanel prefix + Description: Nastavit prefix residencniho chatu Info: - - '&eUsage: &6/res rc setprefix [newName]' - - Sets residence chat chanel prefix + - '&ePouziti: &6/res rc setprefix [novyPrefix]' + - Nastavi prefix residencniho chatu kick: - Description: Kicks player from chanel + Description: Vyhodit hrace z residencniho chatu Info: - - '&eUsage: &6/res rc kick [player]' - - Kicks player from chanel + - '&ePouziti: &6/res rc kick [hrac]' + - Vyhodi hrace z residencniho chatu expand: - Description: Expands residence in direction you looking + Description: Rozsirit residenci ve smeru, kam koukas Info: - - '&eUsage: &6/res expand (residence) [amount]' - - Expands residence in direction you looking. - - Residence name is optional + - '&ePouziti: &6/res expand (residence) [pocet]' + - Rozsiri residenci ve smeru, kam se koukas. + - Zadani jmena residence je volitelne contract: - Description: Contracts residence in direction you looking + Description: Zmensit residence ve smeru, kam koukas Info: - - '&eUsage: &6/res contract (residence [amount])' - - Contracts residence in direction you looking. - - Residence name is optional + - '&ePouziti: &6/res contract (residence [amount])' + - Zmensi residenci ve smeru, kam se koukas + - Zadani jmena residence je volitelne shop: - Description: Manage residence obchod + Description: Spravovat obchod s residencemi Info: - - Manages residence obchod feature + - Spravovat funkce obchodu SubCommands: list: - Description: zobrazits list of res obchods + Description: Zobrazit seznam obchodovatelnych residenci Info: - - '&eUsage: &6/res shop list' - - zobrazits full list of all residences with obchod flag + - '&ePouziti: &6/res shop list' + - Zobrazi cely seznam obchodovatelnych residenci vote: - Description: Vote for residence obchod + Description: Hlasovat v residencnim obchodu Info: - - '&eUsage: &6/res shop vote [amount]' + - '&ePouziti: &6/res shop vote [amount]' - Votes for current or defined residence Args: '[residence]' like: Description: Give like for residence obchod Info: - - '&eUsage: &6/res shop like ' + - '&ePouziti: &6/res shop like ' - Gives like for residence shop Args: '[residenceshop]' votes: - Description: zobrazits res shop votes + Description: Zobrazi seznam hlasu obchodu Info: - - '&eUsage: &6/res shop votes ' - - zobrazits full vote list of current or defined residence shop + - '&ePouziti: &6/res shop votes ' Args: '[residenceshop]' likes: - Description: zobrazits res shop likes + Description: Zobrazit pocet like Info: - - '&eUsage: &6/res shop likes ' - - zobrazits full like list of current or defined residence shop + - '&ePouziti: &6/res shop likes ' + - Zobrazi plny seznam like Args: '[residenceshop]' setdesc: - Description: Sets residence shop description + Description: Nastavit popis residencniho shopu Info: - - '&eUsage: &6/res shop setdesc [text]' - - Sets residence shop description. Color code supported. For new line use /n + - '&ePouziti: &6/res shop setdesc [text]' + - Nastavi popis residencniho shopu. Barvy jsou podporovany. Pro novy radek pouzij /n createboard: - Description: Create res shop board + Description: Vytvorit novou obchodni tabuli Info: - - '&eUsage: &6/res shop createboard [place]' - - Creates res shop board from selected area. Place - position from which to start filling board + - '&ePouziti: &6/res shop createboard [place]' + - Vytvori novou obchodni tabuli ceduli. Place - position from which to start filling board deleteboard: - Description: Deletes res shop board + Description: Smazat obchodni tabuli Info: - - '&eUsage: &6/res shop deleteboard' - - Deletes res shop board bi right clicking on one of signs + - '&ePouziti: &6/res shop deleteboard' + - Smaze tabuli ceduli pravym klickem na jednu z cedulek tpconfirm: - Description: Ignore unsafe teleportation warning + Description: Ignorovat nebezpecny teleport. Info: - - '&eUsage: &6/res tpconfirm' - - Teleports you to a residence, when teleportation is unsafe. + - '&ePouziti: &6/res tpconfirm' + - Vynuti teleportaci i pres to, ze muze byt nebezpecna. subzone: - Description: Create subzones in residences. + Description: Vytvorit subzony v residenci. Info: - - '&eUsage: &6/res subzone [subzone name]' - - If residence name is left off, will attempt to use residence your standing in. + - '&ePouziti: &6/res subzone [jmeno subzony]' + - Pokud jmeno residence neni zadane, pouzije jmeno residence, ve ktere se nachazis. Args: '[residence]' area: - Description: Manage physical areas for a residence. + Description: Spravovat oblasti residence. SubCommands: list: - Description: List physical areas in a residence + Description: Zobrazi vsechny oblasti residence. Info: - - '&eUsage: &6/res area list [residence] ' + - '&ePouziti: &6/res area list [residence] ' Args: '[residence]' listall: - Description: List coordinates and other Info for areas + Description: Zobrazit souradnice a dalsi informace o oblastech. Info: - - '&eUsage: &6/res area listall [residence] ' + - '&ePouziti: &6/res area listall [residence] ' Args: '[residence]' add: - Description: Add physical areas to a residence + Description: Pridat oblasti residence. Info: - - '&eUsage: &6/res area add [residence] [areaID]' - - You must first select two points first. + - '&ePouziti: &6/res area add [residence] [areaID]' + - Nejprve musis vybrat 2 body. Args: '[residence]' remove: - Description: Remove physical areas from a residence + Description: Odstranit oblasti residence. Info: - - '&eUsage: &6/res area remove [residence] [areaID]' + - '&ePouziti: &6/res area remove [residence] [areaID]' Args: '[residence]' replace: - Description: Replace physical areas in a residence + Description: Vymenit oblasti residence. Info: - - '&eUsage: &6/res area replace [residence] [areaID]' - - You must first select two points first. - - Replacing a area will charge the difference in size if the new area is bigger. + - '&ePouziti: &6/res area replace [residence] [areaID]' + - Nejprve musis vybrat 2 body. + - Vymeneni oblasti residence te muze stat penize, pokud je cilova oblast vetsi. Args: '[residence]' message: - Description: Manage residence enter / leave messages + Description: Spravovat zpravy o prichodu/odchodu z residence Info: - - '&eUsage: &6/res message [enter/leave] [message]' - - Set the enter or leave message of a residence. - - '&eUsage: &6/res message remove [enter/leave]' - - Removes a enter or leave message. + - '&ePouziti: &6/res message [enter/leave] [zprava]' + - Nastavi zpravu pro prichod (enter) nebo odchod (leave). + - '&ePouziti: &6/res message remove [enter/leave]' + - Odstrani nastaveni zprav o prichodu (enter)/odchodu (leave) Args: '[residence] [enter/leave]' lease: - Description: Manage residence leases + Description: Spravovat najmy residenci Info: - - '&eUsage: &6/res lease [renew/cost] [residence]' + - '&ePouziti: &6/res lease [renew/cost] [residence]' - /res lease cost will zobrazit the cost of renewing a residence lease. - /res lease renew will renew the residence provided you have enough money. Args: '[renew/cost] [residence]' @@ -990,241 +988,240 @@ CommandHelp: set: Description: Set the lease time Info: - - '&eUsage: &6/resadmin lease set [residence] [#days/infinite]' + - '&ePouziti: &6/resadmin lease set [residence] [#days/infinite]' - Sets the lease time to a specified number of days, or infinite. Args: '[residence]' renew: Description: Renew the lease time Info: - - '&eUsage: &6/resadmin lease renew ' + - '&ePouziti: &6/resadmin lease renew ' - Renews the lease time for current or specified residence. Args: '[residence]' expires: Description: Lease end date Info: - - '&eUsage: &6/resadmin lease expires ' + - '&ePouziti: &6/resadmin lease expires ' - zobrazits when expires residence lease time. Args: '[residence]' cost: Description: zobrazits renew cost Info: - - '&eUsage: &6/resadmin lease cost ' + - '&ePouziti: &6/resadmin lease cost ' - zobrazits how much money you need to renew residence lease. Args: '[residence]' bank: Description: Manage money in a Residence Info: - - '&eUsage: &6/res bank [deposit/withdraw] [amount]' + - '&ePouziti: &6/res bank [deposit/withdraw] [amount]' - You must be standing in a Residence or provide residence name - You must have the +bank flag. Args: '[deposit/withdraw] [residence]' confirm: - Description: Confirms removal of a residence. + Description: Potvrdit odstraneni residence. Info: - - '&eUsage: &6/res confirm' - - Confirms removal of a residence. + - '&ePouziti: &6/res confirm' + - Potvrdi odstraneni residence. gset: - Description: Set flags on a specific group for a Residence. + Description: Nastavit vlajky pro specifickou skupinu. Info: - - '&eUsage: &6/res gset [group] [flag] [true/false/remove]' - - To see a list of flags, use /res flags ? + - '&ePouziti: &6/res gset [skupina] [vlajka] [true/false/remove]' + - Pro zobrazeni seznamu vlajek napis /res flags ? lset: Description: Change blacklist and ignorelist options Info: - - '&eUsage: &6/res lset [blacklist/ignorelist] [material]' - - '&eUsage: &6/res lset Info' + - '&ePouziti: &6/res lset [blacklist/ignorelist] [material]' + - '&ePouziti: &6/res lset Info' - Blacklisting a material prevents it from being placed in the residence. - Ignorelist causes a specific material to not be protected by Residence. Args: '[residence] [blacklist/ignorelist] [material]' removeall: - Description: Remove all residences owned by a player. + Description: Odstranit vsechny residence hrace. Info: - - '&eUsage: &6/res removeall [owner]' - - Removes all residences owned by a specific player.' - - Requires /resadmin if you use it on anyone besides yourself. + - '&ePouziti: &6/res removeall [vlastnik]' + - Odstrani vsechny residence vlastnene urcitym hracem.' + - Vyzaduje /resadmin pokud to pouzivas na kohokoliv jineho, nez sebe. Args: '[playername]' list: - Description: List Residences + Description: Zobrazit seznam residenci Info: - - '&eUsage: &6/res list ' - - Lists all the residences a player owns (except hidden ones). - - If listing your own residences, zobrazits hidden ones as well. - - To list everyones residences, use /res listall. + - '&ePouziti: &6/res list ' + - Zobrazi vsechny residence, ktere hrac vlastni (krome skrytych). + - Pro zobrazeni residenci vsech hracu pouzij /res listall. Args: '[playername]' listhidden: - Description: List Hidden Residences + Description: Zobrazit seznam skrytych residenci Info: - - '&eUsage: &6/res listhidden ' - - Lists hidden residences for a player. + - '&ePouziti: &6/res listhidden ' + - Zobrazi seznam skrytych residenci urciteho hrace. Args: '[playername]' listall: - Description: List All Residences + Description: Zobrazit vsechny residence Info: - - '&eUsage: &6/res listall ' - - Lists hidden residences for a player. + - '&ePouziti: &6/res listall ' + - Zobrazi vsechny residence listallhidden: - Description: List All Hidden Residences + Description: Zobrazit vsechny skryte residence Info: - - '&eUsage: &6/res listhidden ' - - Lists all hidden residences on the server. + - '&ePouziti: &6/res listhidden ' + - Zobrazi vsechny skryte residence sublist: - Description: List Residence Subzones + Description: Zobrazit subzony Info: - - '&eUsage: &6/res sublist ' - - List subzones within a residence. + - '&ePouziti: &6/res sublist ' + - Zobrazi subzony v residenci Args: '[residence]' reset: - Description: Reset residence to default flags. + Description: Resetovat residenci Info: - - '&eUsage: &6/res reset ' - - Resets the flags on a residence to their default. You must be the owner or an admin to do this. + - '&ePouziti: &6/res reset ' + - Resetuje vlajky residence do tovarniho nastaveni. Args: '[residence]' rename: - Description: Renames a residence. + Description: Prejmenovat residenci. Info: - - '&eUsage: &6/res rename [OldName] [NewName]' - - You must be the owner or an admin to do this. - - The name must not already be taken by another residence. + - '&ePouziti: &6/res rename [StaryNazev] [NovyNazev]' + - Musis byt vlastnik residence. + - Jmeno nesmi byt uz pouzite. Args: '[residence]' kick: - Description: Kicks player from residence. + Description: Vyhodit hrace z residence Info: - - '&eUsage: &6/res kick ' - - You must be the owner or an admin to do this. - - Player should be online. + - '&ePouziti: &6/res kick ' + - Musis byt vlastnik residence. + - Hrac by mel byt online. Args: '[playername]' mirror: - Description: Mirrors Flags + Description: Zrcadlit vlajky Info: - - '&eUsage: &6/res market ? for more Info' + - '&ePouziti: &6/res mirror ?' Args: '[residence] [residence]' market: - Description: Buy, Sell, or Rent Residences + Description: Koupit, prodat nebo pronajmout residenci. SubCommands: Info: - Description: Get economy Info on residence + Description: Zobrazit informace o ekonomii residence Info: - - '&eUsage: &6/res market Info [residence]' - - zobrazits if the Residence is for sale or for rent, and the cost. + - '&ePouziti: &6/res market Info [residence]' + - Zobrazi, jestli je informace na prodej nebo k pronajmu, popr jeji cenu Args: '[residence]' list: - Description: Lists rentable and for sale residences. + Description: Zobrazit seznam residenci na prodej a k pronajmu Info: - - '&eUsage: &6/res market list' + - '&ePouziti: &6/res market list' sell: - Description: Sell a residence + Description: Prodat residenci Info: - - '&eUsage: &6/res market sell [residence] [amount]' - - Puts a residence for sale for [amount] of money. - - Another player can buy the residence with /res market buy + - '&ePouziti: &6/res market sell [residence] [castka]' + - Nastavi residenci k pronajmu za [castka] penez. + - Jiny hrac muze koupit residenci pomoci /res market buy Args: '[residence]' sign: - Description: Set market sign + Description: Nastavit obchodni ceduli Info: - - '&eUsage: &6/res market sign [residence]' - - Sets market sign you are looking at. + - '&ePouziti: &6/res market sign [residence]' + - Nastavi ceduli na kterou koukas, jako obchodni Args: '[residence]' buy: - Description: Buy a residence + Description: Koupit residenci Info: - - '&eUsage: &6/res market buy [residence]' - - Buys a Residence if its for sale. + - '&ePouziti: &6/res market buy [residence]' + - Koupi residenci, pokud je na prodej Args: '[residence]' unsell: - Description: Stops selling a residence + Description: Prestat prodavat residenci Info: - - '&eUsage: &6/res market unsell [residence]' + - '&ePouziti: &6/res market unsell [residence]' Args: '[residence]' rent: - Description: ent a residence + Description: Pronajmout residenci Info: - - '&eUsage: &6/res market rent [residence] ' - - Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it. + - '&ePouziti: &6/res market rent [residence] ' + - Pronajmout si residenci. autoProdlouzeni muze byt true(ano)/false(ne). Pokud true, bude dochazet k automatickemu prodluzovani najmu. Args: '[cresidence] [true/false]' rentable: - Description: Make a residence rentable. + Description: Nastavit residenci pronajimatelnou Info: - - '&eUsage: &6/res market rentable [residence] [cost] [days] ' - - Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires. + - '&ePouziti: &6/res market rentable [residence] [cena] [dni] ' + - Nastavi residenci jako pronajimatelnou za [cena] kazdych [dni]. Pokud je true, najem bude automaticky prodluzovan. Args: '[residence]' release: - Description: Remove a residence from rent or rentable. + Description: Odstranit residenci z najmu Info: - - '&eUsage: &6/res market release [residence]' - - If you are the renter, this command releases the rent on the house for you. - - If you are the owner, this command makes the residence not for rent anymore. + - '&ePouziti: &6/res market release [residence]' + - Pokud si najemce, tento prikaz zrusi najem. + - Pokud si vlastnik, tento prikaz zrusi pronajem residence. Args: '[residence]' current: - Description: zobrazit residence your currently in. + Description: Zobrazit residenci, ve ktere se nachazis. Info: - - '&eUsage: &6/res current' + - '&ePouziti: &6/res current' signupdate: - Description: Updated residence signs + Description: Aktualizovat cedulky residence. Info: - - '&eUsage: &6/res signupdate' + - '&ePouziti: &6/res signupdate' lists: - Description: Predefined permission lists + Description: Prednastavena prava Info: - - Predefined permissions that can be applied to a residence. + - Prednastavena prava residence SubCommands: add: - Description: Add a list + Description: Pridat seznam Info: - - '&eUsage: &6/res lists add ' + - '&ePouziti: &6/res lists add ' remove: - Description: Remove a list + Description: Odstranit seznam Info: - - '&eUsage: &6/res lists remove ' + - '&ePouziti: &6/res lists remove ' apply: - Description: Apply a list to a residence + Description: Pouzit seznam na residenci Info: - - '&eUsage: &6/res lists apply ' + - '&ePouziti: &6/res lists apply ' set: - Description: Set a flag + Description: Nastavit vlajku Info: - - '&eUsage: &6/res lists set ' + - '&ePouziti: &6/res lists set ' pset: - Description: Set a player flag + Description: Nastavit hracskou vlajku Info: - - '&eUsage: &6/res lists pset ' + - '&ePouziti: &6/res lists pset ' gset: - Description: Set a group flag + Description: Nastavit skupinovou vlajku Info: - - '&eUsage: &6/res lists view ' + - '&ePouziti: &6/res lists view ' view: - Description: View a list. + Description: Zobrazit seznam. server: - Description: Make land server owned. + Description: Predat residenci serveru Info: - - '&eUsage: &6/resadmin server [residence]' - - Make a residence server owned. + - '&ePouziti: &6/resadmin server [residence]' + - Nastavi server jako vlastnika residence. Args: '[cresidence]' setowner: - Description: Change owner of a residence. + Description: Zmenit vlastnika residence. Info: - - '&eUsage: &6/resadmin setowner [residence] [player]' + - '&ePouziti: &6/resadmin setowner [residence] [hrac]' Args: '[cresidence]' resreload: Description: Reload residence. Info: - - '&eUsage: &6/resreload' + - '&ePouziti: &6/resreload' resload: Description: Load residence save file. Info: - - '&eUsage: &6/resload' + - '&ePouziti: &6/resload' - UNSAFE command, does not save residences first. - Loads the residence save file after you have made changes. removeworld: - Description: Remove all residences from world + Description: Odstranit vsechny residence sveta. Info: - - '&eUsage: &6/res removeworld [worldname]' - - Can only be used from console + - '&ePouziti: &6/res removeworld [svet]' + - Musi byt spusteno z konzole. signconvert: Description: Converts signs from ResidenceSign plugin Info: - - '&eUsage: &6/res signconvert' + - '&ePouziti: &6/res signconvert' - Will try to convert saved sign data from 3rd party plugin version: - Description: how residence version + Description: Verze residence Info: - - '&eUsage: &6/res version' + - '&ePouziti: &6/res version' diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index 2bb0599bf..11b411906 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -14,6 +14,7 @@ import org.bukkit.potion.PotionEffect; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.utils.Debug; public class v1_9Events implements Listener { @@ -43,7 +44,8 @@ public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { event.setCancelled(true); } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) +// @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + @EventHandler public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { // disabling event on world @@ -51,13 +53,19 @@ public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { return; boolean harmfull = false; - for (String oneHarm : Residence.getConfigManager().getNegativeLingeringPotionEffects()) { - if (((PotionData) event.getEntity().getBasePotionData()).getType().name().equalsIgnoreCase(oneHarm)) { - harmfull = true; - break; + + // Temporally fail safe to avoid console spam for getting base potion data until fix roles out + try { + for (String oneHarm : Residence.getConfigManager().getNegativeLingeringPotionEffects()) { + if (((PotionData) event.getEntity().getBasePotionData()).getType().name().equalsIgnoreCase(oneHarm)) { + harmfull = true; + break; + } } + } catch (Exception e) { + return; } - + if (!harmfull) return; diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index 51859b15e..0ae272b50 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -12,7 +12,6 @@ public class give implements cmd { @Override public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - Debug.D("ss"); if (!(sender instanceof Player)) return false; @@ -20,11 +19,9 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Debug.D(args.toString()); - Debug.D("ss2"); if (args.length != 3) return false; - Debug.D("ss1"); Residence.getResidenceManager().giveResidence(player, args[2], args[1], resadmin); return true; } diff --git a/src/plugin.yml b/src/plugin.yml index 887ff1eb2..889d6dad2 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.2.4 +version: 4.0.2.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From ecdd7ff59d0e31ac06b37c4c51a9aac332cd70b3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 30 Mar 2016 13:52:22 +0300 Subject: [PATCH 0140/1142] fix --- src/Language/Chinese.yml | 12 +- src/Language/ChineseTW.yml | 1215 +++++++++++++++++ .../bukkit/residence/LocaleManager.java | 2 + .../bekvon/bukkit/residence/Residence.java | 2 +- .../bekvon/bukkit/residence/gui/SetFlag.java | 16 +- .../protection/ClaimedResidence.java | 12 +- src/plugin.yml | 2 +- 7 files changed, 1244 insertions(+), 17 deletions(-) create mode 100644 src/Language/ChineseTW.yml diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml index 7be659604..6df0e4ce6 100644 --- a/src/Language/Chinese.yml +++ b/src/Language/Chinese.yml @@ -338,8 +338,8 @@ Language: TotalWorth: '&e总价值: &6%1 &e(&6%2&e)' NotOnline: '&e目标玩家ä¸åœ¨çº¿.' NextPage: '&e下一页' - NextInfoPage: '&2| &e下一页 &2>>>' - PrevInfoPage: '&2<<< &e上一页 &2|' + NextInfoPage: '&2| &e下一页 &2>>>' + PrevInfoPage: '&2<<< &e上一页 &2|' GenericPage: '&e第 &6%1 &e页, å…± &6%2' WorldEditNotFound: '&c未检测到 WorldEdit.' CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' @@ -354,6 +354,8 @@ Language: LandCost: '&e领地花费: &6%1' 'True': '&2是' 'False': '&cå¦' + Removed: '&6未设置' + FlagState: '&eæƒé™çŠ¶æ€: %1' Land: '&e领地: &6%1' Cost: '&e花费: æ¯ &6%2 &e天 &6%1' Status: '&e状æ€: %1' @@ -464,6 +466,12 @@ CommandHelp: - '&e用法: &6/res pdel <领地å> [玩家]' - 删除玩家的基本æƒé™ Args: '[residence] [playername]' + give: + Description: 给予一å玩家领地. + Info: + - '&e用法: &6/res give <领地å> [玩家]' + - 将你拥有的æŸä¸ªé¢†åœ°èµ ä¸ŽæŸçŽ©å®¶ + Args: '[residence] [playername]' info: Description: æ˜¾ç¤ºä¸€ä¸ªé¢†åœ°çš„ä¿¡æ¯ Info: diff --git a/src/Language/ChineseTW.yml b/src/Language/ChineseTW.yml new file mode 100644 index 000000000..4a9f20409 --- /dev/null +++ b/src/Language/ChineseTW.yml @@ -0,0 +1,1215 @@ +# NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy +# of this file and modify that instead. This file will be updated automatically by Residence +# when a newer version is detected, and your changes will be overwritten. Once you +# have a copy of this file, change the Language: option under the Residence config.yml +# to whatever you named your copy. + +Language: + Invalid: + Player: '&c無效的玩家å...' + Residence: '&c無效的領地...' + Subzone: '&c無效的領地å­å€åŸŸ...' + Direction: '&c無效的方å‘...' + Amount: '&c無效的數é‡...' + Cost: '&c無效的花費...' + Days: '&c無效的天數...' + Material: '&c無效的ææ–™...' + Boolean: '&c無效值, 必須為 &6true(t) &c或者 &6false(f)' + Area: '&c無效的å€åŸŸ...' + Group: '&c無效的許å¯æ¬Šçµ„...' + MessageType: '&c消æ¯é¡žåž‹å¿…須為 enter(進入), leave(離開) 或 remove(移除).' + Flag: '&c無效許å¯æ¬Š...' + FlagState: '&c無效許å¯æ¬Šç‹€æ…‹, 必須為 &6true(t)&c, &6false(f)&c, 或 &6remove(r)' + List: '&e未知å單類型, 必須是 &6blacklist(黑åå–®) &e或 &6ignorelist(忽略åå–®).' + Page: '&e無效é é¢...' + Help: '&c無效説明é é¢...' + NameCharacters: '&cå字中包å«ç„¡æ•ˆå­—å…ƒ...' + Area: + Exists: '&cå€åŸŸå已存在.' + Create: '&e領地å€åŸŸå‰µå»ºæˆåŠŸ, ID &6%1' + DiffWorld: '&cå€åŸŸèˆ‡é ˜åœ°åœ¨ä¸åŒä¸–ç•Œ.' + Collision: '&cå€åŸŸèˆ‡é ˜åœ° &6%1 &cè¡çª.' + SubzoneCollision: '&cå€åŸŸèˆ‡é ˜åœ°å­å€åŸŸ &6%1 &cè¡çª.' + NonExist: '&cå€åŸŸä¸å­˜åœ¨.' + InvalidName: '&c無效å€åŸŸå...' + ToSmallTotal: '&cé¸ä¸­çš„å€åŸŸéŽå° (&6%1&c)' + ToSmallX: '&cé¸å€ &6X &cæ–¹å‘長度 (&6%1&c) éŽå°. &e該值必須為 &6%2 &e或更大.' + ToSmallY: '&cé¸å€é«˜åº¦ (&6%1&c) éŽå°. &e該值必須為 &6%2 &e或更大.' + ToSmallZ: '&cé¸å€ &6Z &cæ–¹å‘長度 (&6%1&c) éŽå°. &e該值必須為 &6%2 &e或更大.' + Rename: '&eå€åŸŸ &6%1 &e已被é‡å‘½å為 &6%2' + Remove: '&e已刪除å€åŸŸ &6%1&e.' + Name: '&eå稱: &2%1' + RemoveLast: '&cä¸èƒ½ç§»é™¤é ˜åœ°ä¸­çš„最後一個å€åŸŸ.' + NotWithinParent: '&c該å€åŸŸä¸åœ¨çˆ¶å€åŸŸå…§.' + Update: '&eå€åŸŸå·²æ›´æ–°...' + MaxPhysical: '&eå·²é”到領地所å…許的最大空間.' + SizeLimit: '&eå€åŸŸå¤§å°è¶…出了å…許的尺寸上é™.' + HighLimit: '&cä½ ä¸èƒ½ä¿è­·é€™éº¼é«˜çš„領地, 高度上é™ç‚º &6%1' + LowLimit: '&cä½ ä¸èƒ½ä¿è­·é€™éº¼æ·±çš„領地, 深度上é™ç‚º &6%1' + Select: + Points: '&e執行命令å‰éœ€è¦å…ˆé¸ä¸­å…©å€‹é¸å–點!' + Overlap: '&cé¸å–點與å€åŸŸ &6%1 &cé‡ç–Š!' + WorldGuardOverlap: '&cé¸å–點與 WorldGuard å€åŸŸ &6%1 &cé‡ç–Š!' + Success: '&eé¸å–點æˆåŠŸ!' + Fail: '&c無效的é¸æ“‡å‘½ä»¤...' + Bedrock: '&eå°‡é¸å€æ“´å±•åˆ°æœ€å¤§æ·±åº¦.' + Sky: '&eå°‡é¸å€æ“´å±•åˆ°æœ€å¤§é«˜åº¦.' + Area: '&eå·²é¸æ“‡ &6%2 &e領地的 &6%1 &eå€åŸŸ.' + Tool: '&e- é¸å€å·¥å…·: &6%1' + PrimaryPoint: '&eå·²é¸æ“‡ &6第一個 &eé¸å–點 %1' + SecondaryPoint: '&eå·²é¸æ“‡ &6第二個 &eé¸å–點 %1' + Primary: '&e第一個é¸å–點: &6%1' + Secondary: '&e第二個é¸å–點: &6%1' + TooHigh: '&c警告: é¸å€è¶ŠéŽäº†åœ°åœ–頂部, 並且已被è£å‰ª.' + TooLow: '&c警告: é¸å€è¶ŠéŽäº†åœ°åœ–底部, 並且已被è£å‰ª.' + TotalSize: '&eé¸å€ç¸½å¤§å°: &6%1' + AutoEnabled: '&e自動é¸æ“‡æ¨¡å¼&6é–‹å•Ÿ&e. 輸入 &6/res select auto &e關閉.' + AutoDisabled: '&e自動é¸æ“‡æ¨¡å¼&6關閉&e. 輸入 &6/res select auto &eå†æ¬¡æ‰“é–‹.' + Disabled: '&c你沒有許å¯æ¬Šä½¿ç”¨é¸æ“‡å‘½ä»¤.' + Sign: + Updated: '&6%1 &e告示牌已更新!' + TopLine: '[market]' + DateFormat: YY/MM/dd HH:mm + ForRentTopLine: '&8For Rent' + ForRentPriceLine: '&8%1&f/&8%2&f/&8%3' + ForRentResName: '&8%1' + ForRentBottomLine: '&9å¯ç”¨' + RentedAutorenewTrue: '&2%1' + RentedAutorenewFalse: '&c%1' + RentedTopLine: '%1' + RentedPriceLine: '&8%1&f/&8%2&f/&8%3' + RentedResName: '&8%1' + RentedBottomLine: '&1%1' + ForSaleTopLine: '&8For Sale' + ForSalePriceLine: '&8%1' + ForSaleResName: '&8%1' + ForSaleBottomLine: '&5å¯ç”¨' + LookAt: '&c請將滑鼠準星å°æº–告示牌.' + Flag: + Set: '&6%2 &eçš„ &6%1 &e許å¯æ¬Šå·²è¨­ç½®ç‚º &6%3 &e狀態.' + SetFailed: '&c你沒有許å¯æ¬Šè¨­ç½® &6%1 &c許å¯æ¬Š' + CheckTrue: '&e玩家 &6%2 &e已在領地 &6%3 &e中將 &6%1 &e許å¯æ¬Šè¨­ç½®ç‚º &6%4&e.' + CheckFalse: '&e玩家 &6%2 &e沒有在領地中設置 &6%1 &e許å¯æ¬Š.' + Cleared: '&e許å¯æ¬Šå·²æ¸…除.' + Default: '&e許å¯æ¬Šå·²æ¢å¾©é è¨­å€¼.' + Deny: '&c你沒有 &6%1 &c許å¯æ¬Š.' + SetDeny: '&c所有者ä¸èƒ½è¨­ç½® &6%1 &c許å¯æ¬Š.' + ChangeDeny: '&c此時領地內有 &6%2 &cå玩家, 所以你無法更改 &6%1 &c許å¯æ¬Š.' + Bank: + NoAccess: '&c你沒有許å¯æ¬Šä½¿ç”¨éŠ€è¡Œ.' + Name: ' &e銀行: &6%1' + NoMoney: '&c你的銀行存款ä¸è¶³.' + Deposit: '&eä½ å‘領地銀行存款 &6%1 &eå…ƒ.' + Withdraw: '&e你從領地銀行中å–出 &6%1 &eå…ƒ.' + Subzone: + Rename: '&e領地å­å€åŸŸ &6%1 &e已被é‡å‘½å為 &6%2' + Remove: '&e已刪除領地å­å€åŸŸ &6%1&e.' + Create: '&eæˆåŠŸå‰µå»ºé ˜åœ°å­å€åŸŸ &6%1&e.' + CreateFail: '&c無法創建領地å­å€åŸŸ &6%1&c.' + Exists: '&c領地å­å€åŸŸ &6%1 &c已存在.' + Collide: '&c領地å­å€åŸŸèˆ‡ &6%1 &cè¡çª.' + MaxDepth: '&cå·²é”到領地å­å€åŸŸå…許的最大分å€æ·±åº¦.' + SelectInside: '&e兩個é¸å–點必須都在åŒä¸€å€‹é ˜åœ°å…§.' + CantCreate: '&c你沒有創建領地å­å€åŸŸçš„許å¯æ¬Š.' + CantDelete: '&c你沒有刪除領地å­å€åŸŸçš„許å¯æ¬Š.' + CantDeleteNotOwnerOfParent: '&cä½ ä¸æ˜¯è©²å­å€åŸŸæ‰€åœ¨é ˜åœ°çš„所有者, 無法刪除å­å€åŸŸ.' + CantContract: '&c你沒有許å¯æ¬Šç¸®å°é ˜åœ°å­å€åŸŸ.' + CantExpand: '&c你沒有許å¯æ¬Šæ“´å¤§é ˜åœ°å­å€åŸŸ.' + DeleteConfirm: '&e如果你確定è¦åˆªé™¤å­å€åŸŸ &6%1&e, 輸入 &6/res confirm &e來確èªæ“作.' + OwnerChange: '&e已將å­å€åŸŸ &6%1 &e的所有者更改為 &6%2' + Residence: + Bought: '&eæˆåŠŸè³¼è²·é ˜åœ° &6%1' + Buy: '&6%1 &e購買了你的 &6%2 &e領地.' + BuyTooBig: '&c你無法購買尺寸這麼大的領地.' + NotForSale: '&c該領地目å‰ä¸¦æœªå‡ºå”®.' + ForSale: '&e領地 &6%1 &eç¾åœ¨æ­£ä»¥ &6%2 &e的價格出售.' + StopSelling: '&c該領地已ä¸å†å‡ºå”®.' + TooMany: '&cä½ æ“有的領地數é‡é”到了上é™.' + MaxRent: '&c你租用的領地數é‡é”到了上é™.' + AlreadyRent: '&c領地已經被租用.' + NotForRent: '&c領地沒有在出租.' + NotForRentOrSell: '&c領地沒有在出售或出租.' + NotRented: '&c領地尚未被租出.' + Unrent: '&e領地 &6%1 &eå·²å–消出租.' + RemoveRentable: '&e領地 &6%1 &eä¸å†å¯å‡ºç§Ÿ.' + ForRentSuccess: '&e領地 &6%1 &eå·²è¢«è¨­ç½®ç‚ºæ¯ &6%3 &e天以 &6%2 &e出租.' + RentSuccess: '&e你租用了 &6%1 &e領地 &6%2 &e天.' + AlreadyRented: '&e領地 &6%1 &e已出租給 &6%2' + AlreadyExists: '&c已存在å稱為 &6%1 &c的領地.' + Create: '&e已創建領地 &6%1&e!' + Rename: '&e領地 &6%1 &e已被é‡å‘½å為 &6%2' + Remove: '&e領地 &6%1 &e已刪除.' + MoveDeny: '&c你沒有領地 &6%1 &c的移動許å¯æ¬Š.' + TeleportNoFlag: '&c你沒有該領地的傳é€è¨±å¯æ¬Š.' + FlagDeny: '&c你沒有領地 &6%2 &cçš„ &6%1 &c許å¯æ¬Š.' + GiveLimits: '&c目標玩家超出é™åˆ¶, 無法給予領地.' + Give: '&e你將領地 &6%1 &eé€çµ¦äº† &6%2' + Recieve: '&e你收到了 &6%2 &eé€çµ¦ä½ çš„ &6%1 &e領地.' + List: ' &a%1%2 &e- &6世界&e: &6%3' + TeleportNear: '&e已傳é€åˆ°é™„近的領地.' + SetTeleportLocation: '&e設置傳é€ä½ç½®.' + PermissionsApply: '&e領地許å¯æ¬Šå·²è¨­ç½®.' + NotOwner: '&cä½ ä¸æ˜¯è©²é ˜åœ°çš„所有者.' + RemovePlayersResidences: '&e移除所有屬於 &6%1 &e的領地.' + NotIn: '&c你此時ä¸åœ¨é ˜åœ°å…§.' + PlayerNotIn: '&c玩家ä¸åœ¨é ˜åœ°å€åŸŸå…§..' + Kicked: '&e你被從領地中請出.' + In: '&eä½ ç›®å‰ç«™åœ¨é ˜åœ° &6%1 &e中.' + OwnerChange: '&e已將領地 &6%1 &e的所有者更改為 &6%2' + NonAdmin: '&c你沒有領地的管ç†å“¡è¨±å¯æ¬Š.' + Line: '&e領地: &6%1 ' + RentedBy: '&e租用者: &6%1' + MessageChange: '&e消æ¯æ–‡æœ¬å·²è¨­ç½®.' + CantDeleteResidence: '&c你沒有刪除此領地的許å¯æ¬Š.' + CantExpandResidence: '&c你沒有擴大此領地的許å¯æ¬Š.' + CantContractResidence: '&c你沒有縮å°æ­¤é ˜åœ°çš„許å¯æ¬Š.' + NoResHere: '&c那個ä½ç½®æ²’有領地存在.' + OwnerNoPermission: '&c領地所有者沒有執行這個æ“作的許å¯æ¬Š.' + ParentNoPermission: '&c你沒有許å¯æ¬Šè¨­ç½®çˆ¶å€åŸŸ.' + ChatDisabled: '&e領地內èŠå¤©å·²ç¦ç”¨.' + DeleteConfirm: '&e如果你確定è¦åˆªé™¤é ˜åœ° &6%1&e, 輸入 &6/res confirm &e以確èªæ“作.' + Rent: + Disabled: '&c領地出租已ç¦ç”¨.' + DisableRenew: '&e領地 &6%1 &eä¸æœƒåœ¨ç§Ÿç´„到期時自動續期.' + EnableRenew: '&e領地 &6%1 &e將會在租約到期時自動續期.' + Expire: '&e租約到期時間: &6%1' + ModifyDeny: '&c無法修改租用的領地.' + Days: '&e租用天數: &6%1' + Rented: ' &6(已出租)' + Rentable: + Land: '&e出租領地: &6' + AutoRenew: '&e自動更新租用狀態: &6%1' + DisableRenew: '&6%1 &eä¸æœƒåœ¨åˆ°æœŸæ™‚自動更新租用狀態.' + EnableRenew: '&6%1 &e將會在到期時自動更新租用狀態.' + Economy: + LandForSale: '&e出售領地:' + NotEnoughMoney: '&c你沒有足夠的金錢.' + MoneyCharged: '&e已從你的 &6%2 &e帳戶中支出 &6%1 &eå…ƒ.' + MoneyAdded: '&eä½ çš„ &6%2 &e帳戶增加了 &6%1 &eå…ƒ.' + MoneyCredit: '&eä½ çš„ &6%2 &e帳戶收入了 &6%1 &eå…ƒ.' + RentReleaseInvalid: '&e領地 &6%1 &e沒有被租用或者出租.' + RentSellFail: '&c無法出售正在出租的領地.' + SellRentFail: '&c無法出租正在出售的領地.' + OwnerBuyFail: '&cä¸èƒ½è³¼è²·è‡ªå·±çš„領地!' + OwnerRentFail: '&cä¸èƒ½ç§Ÿç”¨è‡ªå·±çš„領地!' + AlreadySellFail: '&e領地已在出售中!' + LeaseRenew: '&e租約有效期到 &6%1' + LeaseRenewMax: '&eå…許的最大租約續期' + LeaseNotExpire: '&e租約ä¸å­˜åœ¨æˆ–者未éŽæœŸ.' + LeaseRenewalCost: '&e續租 &6%1 &e的花費為 &6%2' + LeaseInfinite: '&e出租時間已設置為無é™.' + MarketDisabled: '&c領地經濟已ç¦ç”¨!' + SellAmount: '&e出售數é‡: &2%1' + LeaseExpire: '&e租約到期時間: &2%1' + Expanding: + North: '&eå‘北方擴展 &6%1 &e個方塊' + West: '&eå‘西方擴展 &6%1 &e個方塊' + South: '&eå‘å—方擴展 &6%1 &e個方塊' + East: '&eå‘æ±æ–¹æ“´å±• &6%1 &e個方塊' + Up: '&eå‘上方擴展 &6%1 &e個方塊' + Down: '&eå‘下方擴展 &6%1 &e個方塊' + Contracting: + North: '&eåœ¨åŒ—æ–¹ç¸®å° &6%1 &e個方塊' + West: '&eåœ¨è¥¿æ–¹ç¸®å° &6%1 &e個方塊' + South: '&e在å—æ–¹ç¸®å° &6%1 &e個方塊' + East: '&e在æ±æ–¹ç¸®å° &6%1 &eblocks' + Up: '&eåœ¨ä¸Šæ–¹ç¸®å° &6%1 &e個方塊' + Down: '&eåœ¨ä¸‹æ–¹ç¸®å° &6%1 &e個方塊' + Shifting: + North: '&eå‘北方平移 &6%1 &e個方塊' + West: '&eå‘西方平移 &6%1 &e個方塊' + South: '&eå‘å—方平移 &6%1 &e個方塊' + East: '&eå‘æ±æ–¹å¹³ç§» &6%1 &e個方塊' + Up: '&eå‘上方平移 &6%1 &e個方塊' + Down: '&eå‘下方平移 &6%1 &e個方塊' + Limits: + PGroup: '&7- &e許å¯æ¬Šçµ„:&3 %1' + RGroup: '&7- &e領地組:&3 %1' + Admin: '&7- &e領地管ç†å“¡:&3 %1' + CanCreate: '&7- &eå…許創建領地:&3 %1' + MaxRes: '&7- &e最大領地數é‡:&3 %1' + MaxEW: '&7- &eæ±è¥¿æ–¹å‘最大:&3 %1' + MaxNS: '&7- &eå—北方å‘最大:&3 %1' + MaxUD: '&7- &e上下方å‘最大:&3 %1' + MinMax: '&7- &e最å°/最大高度:&3 %1 到 %2' + MaxSub: '&7- &e最大分å€æ·±åº¦:&3 %1' + MaxRents: '&7- &e最多租用:&3 %1' + EnterLeave: '&7- &eå¯è¨­ç½®åŠ å…¥é›¢é–‹è³‡è¨Š:&3 %1' + NumberOwn: '&7- &eæ“有的領地數é‡:&3 %1' + Cost: '&7- &e領地æ¯æ–¹å¡ŠèŠ±è²»:&3 %1' + Sell: '&7- &e領地出售æ¯æ–¹å¡ŠèŠ±è²»:&3 %1' + Flag: '&7- &eå…許的領地許å¯æ¬Š:&3 %1' + MaxDays: '&7- &e最大租約時間:&3 %1' + LeaseTime: '&7- &e租約續期時間:&3 %1' + RenewCost: '&7- &e續租æ¯æ–¹å¡ŠèŠ±è²»:&3 %1' + Gui: + Set: + Title: '&l%1 許å¯æ¬Š' + Pset: + Title: '&l%1 %2 許å¯æ¬Š' + Actions: + - '&2å·¦éµæŒ‰ä¸€ä¸‹å•Ÿç”¨' + - '&c按å³éµç¦ç”¨' + - '&eShift+å·¦éµæŒ‰ä¸€ä¸‹åˆªé™¤' + InformationPage: + TopLine: '&e---< &a %1 &e >---' + Page: '&e-----< &6%1 &e>-----' + NextPage: '&e-----< &6%1 &e>-----' + NoNextPage: '&e-----------------------' + Chat: + ChatChannelChange: '&e領地èŠå¤©é »é“已更改為 &6%1!' + ChatChannelLeave: '&e離開領地èŠå¤©' + JoinFirst: '&4請先加入領地èŠå¤©é »é“.' + InvalidChannel: '&4無效頻é“.' + InvalidColor: '&4é¡è‰²ä»£ç¢¼éŒ¯èª¤' + NotInChannel: '&4玩家ä¸åœ¨é »é“中' + Kicked: '&6%1 &e被 &6%2 &eé »é“踢出' + InvalidPrefixLength: '&4首碼éŽé•·. 最大長度: %1' + ChangedColor: '&e領地頻é“é¡è‰²æ›´æ”¹ç‚º %1' + ChangedPrefix: '&e領地頻é“首碼更改為 %1' + Shop: + ListTopLine: '&6%1 &e商店列表 - 第 &6%2 &eé , å…± &6%3 %4' + List: ' &e%1. &6%2 &e(&6%3&e) %4' + ListVoted: '&e%1 (&6%2&e)' + ListLiked: '&eè´Š: &0%1' + VotesTopLine: '&6%1 &e%2 評分列表 &6- &e第 &6%3 &eé , å…± &6%4 %5' + VotesList: ' &e%1. &6%2 &e%3 &7%4' + NoDesc: '&6沒有æè¿°' + Desc: |- + &6æè¿°: + %1 + DescChange: '&6æ述已更改為: %1' + NewBoard: '&6æˆåŠŸæ·»åŠ å•†åº—宣傳æ¿' + DeleteBoard: '&6å³æ“Šè¦åˆªé™¤çš„宣傳æ¿' + DeletedBoard: '&6宣傳æ¿å·²ç§»é™¤' + IncorrectBoard: '&c宣傳æ¿ä¸æ­£ç¢º, è«‹é‡æ–°é»žæ“Šæ­£ç¢ºçš„宣傳æ¿' + InvalidSelection: '&c使用é¸å–工具, 先點擊左上角的告示牌, å†é»žæ“Šå³ä¸‹è§’的告示牌' + VoteChanged: '&6領地 &e%3 &6的評分由 &e%1 &6更改為 &e%2&6.' + Voted: '&6你給 &e%2 &6評了 &e%1 &6分.' + Liked: '&6你贊了 &e%1 &6領地.' + AlreadyLiked: '&6ä½ å·²ç¶“è´ŠéŽ &e%1 &6領地了.' + NoVotes: '&c該領地還沒有評分.' + CantVote: '&c該領地ä¸æ˜¯å•†åº—.' + VotedRange: '&6åªèƒ½çµ¦å‡º &e%1 &6分到 &e%2 &6分.' + SignLines: + '1': '&e--== &8%1 &e==--' + '2': '&9%1' + '3': '&4%1' + '4': '&8%1&e (&8%2&e)' + Likes4: '&9è´Š: &8%2' + RandomTeleport: + TpLimit: '&e請等待 &6%1 &e秒後å†å‚³é€' + TeleportSuccess: '&e傳é€åˆ° X:&6%1&e, Y:&6%2&e, Z:&6%3 &eä½ç½®' + IncorrectLocation: '&6無法找到正確的傳é€ä½ç½®, 請等待 &e%1 &6秒後é‡è©¦.' + TeleportStarted: '&e傳é€å³å°‡é–‹å§‹, 在 &6%4 &e秒內ä¸è¦ç§»å‹•.' + General: + DisabledWorld: '&c該世界已ç¦ç”¨é ˜åœ°.' + UseNumbers: '&c請輸入數ä½.' + CantPlaceLava: '&cä½ ä¸èƒ½åœ¨é ˜åœ°å¤–高於 &6%1 &c的地方放置岩漿.' + CantPlaceWater: '&cä½ ä¸èƒ½åœ¨é ˜åœ°å¤–高於 &6%1 &c的地方放置水.' + NoPermission: '&c你沒有執行此æ“作的許å¯æ¬Š.' + DefaultUsage: '&e輸入 &6/%1 ? &e查看説明資訊' + MaterialGet: '&eID &6%1 &eçš„ææ–™å稱為 &6%2' + MarketList: '&e---- &6市場列表 &e----' + Separator: '&e------------------------------------------------' + AdminOnly: '&cåªæœ‰ç®¡ç†å“¡æ‰èƒ½åŸ·è¡Œé€™å€‹å‘½ä»¤.' + InfoTool: '&e- 資訊工具: &6%1' + ListMaterialAdd: '&6%1 &e已被添加到 &6%2 &e領地.' + ListMaterialRemove: '&6%1 &e已從 &6%2 &e領地移除.' + ItemBlacklisted: '&c此處ç¦æ­¢ä½¿ç”¨è©²ç‰©å“.' + WorldPVPDisabled: '&c世界 PVP å·²ç¦ç”¨.' + NoPVPZone: '&céž PVP å€åŸŸ.' + InvalidHelp: '&c無效幫助é ç¢¼.' + TeleportDeny: '&c你沒有傳é€çš„許å¯æ¬Š.' + TeleportSuccess: '&e已傳é€!' + TeleportConfirm: '&c傳é€ä¸å®‰å…¨, ä½ å°‡æ‘”è½ &6%1 &c個方塊. 如果ä»è¦å‚³é€, 輸入 &6/res tpconfirm &c確èª.' + TeleportStarted: '&eé–‹å§‹å‘ &6%1 &e傳é€, 在 &6%2 &e秒內ä¸è¦ç§»å‹•.' + TeleportCanceled: '&e傳é€è¢«å–消!' + NoTeleportConfirm: '&e沒有需è¦ç¢ºèªçš„傳é€è«‹æ±‚!' + HelpPageHeader: '&e領地説明 - &6%1 &e- é é¢ <&6%2 &e/ &6%3&e>' + ListExists: '&c列表已存在.' + ListRemoved: '&e已刪除列表.' + ListCreate: '&e已創建列表 &6%1' + PhysicalAreas: '&e物ç†å€åŸŸ' + CurrentArea: '&e當å‰å€åŸŸ: &6%1' + TotalSize: '&e總大å°: &6%1' + TotalWorth: '&e總價值: &6%1 &e(&6%2&e)' + NotOnline: '&e目標玩家ä¸ç·šä¸Š.' + NextPage: '&e下一é ' + NextInfoPage: '&2| &eä¸‹ä¸€é  &2>>>' + PrevInfoPage: '&2<<< &eä¸Šä¸€é  &2|' + GenericPage: '&e第 &6%1 &eé , å…± &6%2' + WorldEditNotFound: '&c未檢測到 WorldEdit.' + CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + AdminToggleTurnOn: '&e自動管ç†æ¨¡å¼&6é–‹å•Ÿ' + AdminToggleTurnOff: '&e自動管ç†æ¨¡å¼&6關閉' + NoSpawn: '&e你沒有在出生點的 &6移動 &e許å¯æ¬Š, 正在é‡æ–°å®šä½.' + CompassTargetReset: '&e你的指å—é‡å·²è¢«é‚„原' + CompassTargetSet: '&e你的指å—é‡ç›®å‰æŒ‡å‘ &6%1' + Ignorelist: '&2忽略åå–®:&6' + Blacklist: '&c黑åå–®:&6' + LandCost: '&e領地花費: &6%1' + 'True': '&2是' + 'False': '&cå¦' + Land: '&e領地: &6%1' + Cost: '&e花費: æ¯ &6%2 &e天 &6%1' + Status: '&e狀態: %1' + Available: '&2å¯ç”¨' + Size: ' &e大å°: &6%1' + Flags: '&e許å¯æ¬Š: &6%1' + YourFlags: '&e你的許å¯æ¬Š: &6%1' + GroupFlags: '&e組許å¯æ¬Š: &6%1' + OthersFlags: '&e其他人許å¯æ¬Š: &6%1' + Moved: '&e已移動.' + Name: '&eå稱: &6%1' + Lists: '&e列表: &6' + Residences: '&e領地&6' + Owner: '&e所有者: &6%1' + World: '&e世界: &6%1' + Subzones: '&eå­å€åŸŸ' + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. + NewPlayerInfo: '&e如果è¦å‰µå»ºé ˜åœ°ä¾†ä¿è­·æˆ¿å±‹, 請用木鋤é¸å–ä¿è­·å€çš„兩個å°è§’, 然後執行 &2/res create 領地å稱 &e命令.' +CommandHelp: + Description: 領地的命令幫助 + SubCommands: + res: + Description: 領地的主命令 + Info: + - '&2輸入 &6/res [命令] ? <é ç¢¼> &2查看更多資訊.' + SubCommands: + select: + Description: é¸å–命令 + Info: + - 該命令é¸æ“‡é ˜åœ°çš„ç¯„åœ + - /res select [x] [y] [z] - é¸æ“‡ä»¥ä½ ç‚ºä¸­å¿ƒä¸€å®šç¯„åœçš„方塊. + SubCommands: + coords: + Description: 顯示已é¸æ“‡å€åŸŸçš„座標 + Info: + - '&e用法: &6/res select coords' + size: + Description: 顯示已é¸æ“‡å€åŸŸçš„å¤§å° + Info: + - '&e用法: &6/res select size' + auto: + Description: 打開自動é¸æ“‡å·¥å…· + Info: + - '&e用法: &6/res select auto [玩家]' + Args: '[playername]' + cost: + Description: 顯示已é¸æ“‡å€åŸŸçš„價格 + Info: + - '&e用法: &6/res select cost' + vert: + Description: 縱å‘擴展é¸å€ + Info: + - '&e用法: &6/res select vert' + - å°‡é¸å€æ“´å±•åˆ°åœ°åœ–頂端和底端 + sky: + Description: 擴展é¸å€åˆ°å¤©ç©º + Info: + - '&e用法: &6/res select sky' + - å°‡é¸å€æ“´å±•åˆ°åœ°åœ–頂端 + bedrock: + Description: 擴展é¸å€åˆ°åŸºå²© + Info: + - '&e用法: &6/res select bedrock' + - å°‡é¸å€æ“´å±•åˆ°åœ°åœ–底端 + expand: + Description: å‘一個方å‘擴展é¸å€ + Info: + - '&e用法: &6/res select expand <擴展單ä½>' + - å‘é¢å°çš„æ–¹å‘擴展 <擴展單ä½> 個方塊 + shift: + Description: å‘一個方å‘平移é¸å€ + Info: + - '&e用法: &6/res select shift <平移單ä½>' + - å°‡é¸å€å‘é¢å°çš„æ–¹å‘平移 <平移單ä½> 個方塊 + chunk: + Description: é¸æ“‡ä½ ç›®å‰æ‰€åœ¨çš„å€å¡Š + Info: + - '&e用法: &6/res select chunk' + - é¸æ“‡ä½ ç›®å‰æ‰€åœ¨çš„å€å¡Š + residence: + Description: é¸æ“‡é ˜åœ°ä¸­ä¸€å€‹å­˜åœ¨çš„å€åŸŸ + Info: + - '&e用法: &6/res select residence <領地>' + - é¸æ“‡ <領地> 中一個存在的å€åŸŸ + Args: '[residence]' + worldedit: + Description: 採用 WorldEdit çš„é¸å€ + Info: + - '&e用法: &6/res select worldedit' + - å°‡ WorldEdit ç›®å‰çš„é¸å€ä½œç‚ºé ˜åœ°é¸å€ + create: + Description: 創建領地 + Info: + - '&e用法: &6/res create <領地å>' + remove: + Description: 刪除領地 + Info: + - '&e用法: &6/res remove <領地å>' + Args: '[residence]' + padd: + Description: å‘領地添加玩家 + Info: + - '&e用法: &6/res padd <領地å> [玩家]' + - 為玩家添加基本許å¯æ¬Š + Args: '[residence] [playername]' + pdel: + Description: 從領地刪除玩家 + Info: + - '&e用法: &6/res pdel <領地å> [玩家]' + - 刪除玩家的基本許å¯æ¬Š + Args: '[residence] [playername]' + give: + Description: 將領地給予其他玩家 + Info: + - '&e用法: &6/res give <領地å> [玩家]' + - 將你的領地移轉給目標玩家 + Args: '[residence] [playername]' + info: + Description: 顯示一個領地的資訊 + Info: + - '&e用法: &6/res info <領地>' + - 留空 <領地> 表示顯示你目å‰æ‰€åœ¨çš„領地資訊 + Args: '[residence]' + set: + Description: 為領地設置默èªè¨±å¯æ¬Š + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] [true/false/remove]' + - 輸入 /res flags ? 查看許å¯æ¬Šåˆ—表 + - 如果沒有為æŸçŽ©å®¶æŒ‡å®šè©²é ˜åœ°çš„特定許å¯æ¬Š, 那麼這å玩家將會æ“有這些默èªè¨±å¯æ¬Š. (åƒè¦‹ /res pset ?) + Args: '[residence] [flag] [true/false/remove]' + pset: + Description: 為æŸçŽ©å®¶è¨­å®šè©²é ˜åœ°çš„特定許å¯æ¬Š + Info: + - '&e用法: &6/res pset <領地> [玩家] [許å¯æ¬Š] [true/false/remove]' + - '&e用法: &6/res pset <領地> [玩家] removeall' + - 輸入 /res flags ? 查看許å¯æ¬Šåˆ—表 + Args: '[residence] [playername] [flag] [true/false/remove]' + flags: + Description: 領地許å¯æ¬Šåˆ—表 + Info: + - å°æ–¼å¤§éƒ¨åˆ†è¨±å¯æ¬Šä¾†èªª, true 表示å…許, false 表示ç¦æ­¢é€™ä¸€æ“作 + SubCommands: + build: + Description: å…許或ç¦æ­¢å»ºé€  + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + use: + Description: å…許或ç¦æ­¢ä½¿ç”¨é–€, 控制桿, 按鈕等... + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + move: + Description: å…許或ç¦æ­¢ç§»å‹• + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + container: + Description: å…許或ç¦æ­¢ä½¿ç”¨ç†”çˆ, ç®±å­, 發射器等... + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + trusted: + Description: 給予 build, use, move, container å’Œ tp 許å¯æ¬Š + Info: + - '&e用法: &6/res pset <領地> [許å¯æ¬Š] true/false/remove' + place: + Description: åªå…許或ç¦æ­¢æ”¾ç½®æ–¹å¡Š, 該許å¯æ¬Šè¦†è“‹ build 許å¯æ¬Š + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + destroy: + Description: åªå…許或ç¦æ­¢ç ´å£žæ–¹å¡Š, 該許å¯æ¬Šè¦†è“‹ build 許å¯æ¬Š + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + pvp: + Description: å…許或ç¦æ­¢é ˜åœ°å…§ PVP + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + tp: + Description: å…許或ç¦æ­¢å‚³é€è‡³æ­¤é ˜åœ° + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + enderpearl: + Description: å…許或ç¦æ­¢ç”¨çµ‚界之眼傳é€è‡³æ­¤é ˜åœ° + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + admin: + Description: 玩家å¯ä»¥æ›´æ”¹é ˜åœ°è¨±å¯æ¬Š + Info: + - '&e用法: &6/res pset <領地> [許å¯æ¬Š] true/false/remove' + subzone: + Description: å…許玩家建立領地å­å€åŸŸ + Info: + - '&e用法: &6/res pset <領地> [許å¯æ¬Š] true/false/remove' + monsters: + Description: å…許或ç¦æ­¢æ€ªç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + cmonsters: + Description: å…許或ç¦æ­¢è‡ªè¨‚æ€ªç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + smonsters: + Description: å…許或ç¦æ­¢ç”Ÿæ€ªç£šå’Œç”Ÿæ€ªè›‹ç”Ÿæˆæ€ªç‰© + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + nmonsters: + Description: å…許或ç¦æ­¢è‡ªç„¶ç”Ÿæˆæ€ªç‰© + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + animals: + Description: å…許或ç¦æ­¢å‹•ç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + canimals: + Description: å…許或ç¦æ­¢è‡ªè¨‚å‹•ç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + sanimals: + Description: å…許或ç¦æ­¢ç”Ÿæ€ªç£šå’Œç”Ÿæ€ªè›‹ç”Ÿæˆå‹•ç‰© + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + nanimals: + Description: å…許或ç¦æ­¢è‡ªç„¶ç”Ÿæˆå‹•ç‰© + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + animalkilling: + Description: å…許或ç¦æ­¢æ“Šæ®ºå‹•ç‰© + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + mobkilling: + Description: å…許或ç¦æ­¢æ“Šæ®ºæ€ªç‰© + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + nofly: + Description: å…許或ç¦æ­¢é£›è¡Œ + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + vehicledestroy: + Description: å…許或ç¦æ­¢ç ´å£žè¼‰å…· + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + shear: + Description: å…許或ç¦æ­¢å‰ªç¾Šæ¯› + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + dye: + Description: å…許或ç¦æ­¢ç‚ºç¾Šæ¯›æŸ“色 + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + leash: + Description: å…許或ç¦æ­¢ç‰½å¼•å‹•ç‰© + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + healing: + Description: 為領地內的玩家治療 + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + feed: + Description: 為領地內的玩家æ¢å¾©é£½é£Ÿ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + tnt: + Description: å…許或ç¦æ­¢ TNT 爆炸 + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + creeper: + Description: å…許或ç¦æ­¢çˆ¬è¡Œè€…爆炸 + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + ignite: + Description: å…許或ç¦æ­¢é»žç« + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + firespread: + Description: å…許或ç¦æ­¢ç«ç„°è”“延 + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + bucket: + Description: å…許或ç¦æ­¢ä½¿ç”¨éµæ¡¶ + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + bucketfill: + Description: å…許或ç¦æ­¢ä½¿ç”¨éµæ¡¶ç››è£ + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + bucketempty: + Description: å…許或ç¦æ­¢ä½¿ç”¨éµæ¡¶å‚¾å€’ + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + flow: + Description: å…許或ç¦æ­¢æ¶²é«”æµå‹• + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + lavaflow: + Description: å…許或ç¦æ­¢å²©æ¼¿æµå‹•, 該許å¯æ¬Šè¦†è“‹ flow 許å¯æ¬Š + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + waterflow: + Description: å…許或ç¦æ­¢æ°´æµå‹•, 該許å¯æ¬Šè¦†è“‹ flow 許å¯æ¬Š + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + damage: + Description: å…許或ç¦æ­¢æ‰€æœ‰å¯¦é«”傷害 + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + piston: + Description: å…許或ç¦æ­¢æ´»å¡žæŽ¨æ‹‰æ–¹å¡Š + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + hidden: + Description: 在 list 或 listall 命令中隱è—此領地 + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + cake: + Description: å…許或ç¦æ­¢çŽ©å®¶åƒè›‹ç³• + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + lever: + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŽ§åˆ¶æ¡¿ + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + button: + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰éˆ• + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + diode: + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨ç´…石中繼器 + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + door: + Description: å…許或ç¦æ­¢çŽ©å®¶é–‹é—œé–€å’Œåœ°æ¿é–€ + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + table: + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + enchant: + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + brew: + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é‡€é€ å° + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + bed: + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + pressure: + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å£“åŠ›æ¿ + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + note: + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³éšŽç›’ + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + redstone: + Description: 給予 lever, diode, button, pressure å’Œ note 許å¯æ¬Š + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + craft: + Description: 給予 table, enchant å’Œ brew 許å¯æ¬Š + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + trample: + Description: å…許或ç¦æ­¢è¸©å£žè€•åœ° + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + trade: + Description: å…許或ç¦æ­¢æ‘民交易 + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + nomobs: + Description: å…許或ç¦æ­¢æ€ªç‰©é€²å…¥é ˜åœ° + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + explode: + Description: å…許或ç¦æ­¢çˆ†ç‚¸ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + witherdamage: + Description: ç¦æ­¢å‡‹é›¶æ€ªé€ æˆå‚·å®³ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + fireball: + Description: å…許或ç¦æ­¢ç«ç„°å½ˆ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + command: + Description: å…許或ç¦æ­¢åŸ·è¡Œå‘½ä»¤ + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + overridepvp: + Description: 覆蓋任何外掛程å¼çš„ PVP ä¿è­· + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + keepinv: + Description: 玩家死亡ä¸æœƒæŽ‰è½ç‰©å“ + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + keepexp: + Description: 玩家死亡ä¸æœƒæ失經驗 + Info: + - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + burn: + Description: å…許或ç¦æ­¢æ€ªç‰©ç‡ƒç‡’ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + bank: + Description: å…許或ç¦æ­¢ä½¿ç”¨é ˜åœ°éŠ€è¡Œ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + shop: + Description: 將領地設置為商店 + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + day: + Description: 領地ä¿æŒç™½å¤© + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + night: + Description: 領地ä¿æŒå¤œé–“ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + chat: + Description: å…許加入領地èŠå¤©é »é“ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + nodurability: + Description: 物å“ä¸æœƒæ失è€ä¹… + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + mobitemdrop: + Description: 怪物死亡ä¸æœƒæŽ‰è½ç‰©å“ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + mobexpdrop: + Description: 怪物死亡ä¸æœƒæŽ‰è½ç¶“é©— + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + dragongrief: + Description: 防止終界é¾ç ´å£žæ–¹å¡Š + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + snowtrail: + Description: 防止雪人留下雪 + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + respawn: + Description: 自動é‡ç”ŸçŽ©å®¶ + Info: + - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + limits: + Description: 顯示你的領地é™åˆ¶ + Info: + - '&e用法: &6/res limits' + - 顯示你在創建和管ç†é ˜åœ°æ–¹é¢çš„å„種é™åˆ¶ + tpset: + Description: 設定領地的傳é€é»ž + Info: + - '&e用法: &6/res tpset' + - 該命令將會把你站的ä½ç½®è¨­ç½®ç‚ºé ˜åœ°çš„傳é€é»ž + - 你必須站在一個領地裡æ‰èƒ½ä½¿ç”¨é€™å€‹å‘½ä»¤ + - 你必須是領地的所有者或者æ“有領地的 +admin 許å¯æ¬Š + tp: + Description: 傳é€åˆ°ä¸€å€‹é ˜åœ° + Info: + - '&e用法: &6/res tp [residence]' + - 將你傳é€åˆ°ä¸€å€‹é ˜åœ°, 你必須是領地所有者或者æ“有領地 +tp 許å¯æ¬Š + - 你的許å¯æ¬Šçµ„也必須在伺æœå™¨ä¸­æœ‰å‚³é€è¨±å¯æ¬Š + Args: '[residence]' + rt: + Description: 傳é€åˆ°ä¸–界上的隨機ä½ç½® + Info: + - '&e用法: &6/res rt' + - 將你傳é€åˆ°ä¸–界上的隨機ä½ç½® + rc: + Description: 加入當å‰æˆ–者指定的領地èŠå¤©é »é“ + Info: + - '&e用法: &6/res rc (領地)' + - 加入當å‰é ˜åœ°æˆ–者指定領地的èŠå¤©é »é“ + SubCommands: + leave: + Description: 離開當å‰é »é“ + Info: + - '&e用法: &6/res rc leave' + - 如果你在一個領地頻é“å…§, ä½ å°‡æœƒé›¢é–‹æ­¤é »é“ + setcolor: + Description: 設置領地頻é“文字é¡è‰² + Info: + - '&e用法: &6/res rc setcolor [é¡è‰²ä»£ç¢¼]' + - 設置領地頻é“文字é¡è‰² + setprefix: + Description: 設置領地頻é“首碼 + Info: + - '&e用法: &6/res rc setprefix [新首碼]' + - 設置領地頻é“首碼 + kick: + Description: 從頻é“中踢出玩家 + Info: + - '&e用法: &6/res rc kick [玩家]' + - 從領地頻é“中踢出æŸçŽ©å®¶ + expand: + Description: å‘ä½ é¢å°çš„æ–¹å‘擴展領地 + Info: + - '&e用法: &6/res expand (領地) [擴展單ä½]' + - å‘ä½ é¢å°çš„æ–¹å‘擴展領地è¦æ¨¡ + - 領地å字是å¯é¸çš„ + contract: + Description: 從你é¢å°çš„æ–¹å‘縮å°é ˜åœ° + Info: + - '&e用法: &6/res contract (領地) [縮å°å–®ä½]' + - 從你é¢å°çš„æ–¹å‘縮å°é ˜åœ°è¦æ¨¡ + - 領地å字是å¯é¸çš„ + shop: + Description: 管ç†é ˜åœ°å•†åº— + Info: + - 管ç†é ˜åœ°çš„商店功能 + SubCommands: + list: + Description: 顯示領地商店清單 + Info: + - '&e用法: &6/res shop list' + - 顯示所有作為商店的領地 + vote: + Description: 為領地商店評分 + Info: + - '&e用法: &6/res shop vote <領地> [分數]' + - 為當å‰æˆ–指定領地商店評分 + Args: '[residence]' + like: + Description: 為領地商店點贊 + Info: + - '&e用法: &6/res shop like <領地>' + - 為領地商店點一個贊 + Args: '[residenceshop]' + votes: + Description: 顯示領地商店評分 + Info: + - '&e用法: &6/res shop votes <領地> <é ç¢¼>' + - 顯示當å‰æˆ–指定領地商店的評分列表 + Args: '[residenceshop]' + likes: + Description: 顯示領地商店的贊 + Info: + - '&e用法: &6/res shop likes <領地> <é ç¢¼>' + - 顯示當å‰æˆ–指定領地商店的贊列表 + Args: '[residenceshop]' + setdesc: + Description: 設置領地商店æè¿° + Info: + - '&e用法: &6/res shop setdesc [æ述文字]' + - 設置領地商店æè¿°, 支æŒé¡è‰²ä»£ç¢¼, 用 /n 表示æ›è¡Œ + createboard: + Description: å‰µå»ºå•†åº—å®£å‚³æ¿ + Info: + - '&e用法: &6/res shop createboard [ä½ç½®]' + - 在é¸å€ä½ç½®å»ºç«‹å•†åº—宣傳æ¿. [ä½ç½®] 表示宣傳æ¿çš„起始ä½ç½® + deleteboard: + Description: åˆªé™¤å•†åº—å®£å‚³æ¿ + Info: + - '&e用法: &6/res shop deleteboard' + - å³æ“Šå®£å‚³æ¿çš„å‘Šç¤ºç‰Œä»¥åˆªé™¤å®£å‚³æ¿ + tpconfirm: + Description: 忽略ä¸å®‰å…¨å‚³é€è­¦å‘Š + Info: + - '&e用法: &6/res tpconfirm' + - 強制傳é€åˆ°é ˜åœ°, 忽略傳é€ä¸å®‰å…¨çš„警告 + subzone: + Description: 在領地中創建å­å€åŸŸ + Info: + - '&e用法: &6/res subzone <領地å> [å­å€åŸŸå]' + - 如果領地å留空, 將會嘗試在玩家所處領地中建立å­å€åŸŸ + Args: '[residence]' + area: + Description: 管ç†é ˜åœ°ç‰©ç†å€åŸŸ + SubCommands: + list: + Description: 列出領地的物ç†å€åŸŸ + Info: + - '&e用法: &6/res area list [領地] <é ç¢¼>' + Args: '[residence]' + listall: + Description: 列出所有å€åŸŸçš„座標和詳細資訊 + Info: + - '&e用法: &6/res area listall [領地] <é ç¢¼>' + Args: '[residence]' + add: + Description: 為領地添加物ç†å€åŸŸ + Info: + - '&e用法: &6/res area add [領地] [å€åŸŸID]' + - 你必須先é¸ä¸­å…©å€‹é¸å–點 + Args: '[residence]' + remove: + Description: 移除領地的物ç†å€åŸŸ + Info: + - '&e用法: &6/res area remove [領地] [å€åŸŸID]' + Args: '[residence]' + replace: + Description: 替æ›é ˜åœ°çš„物ç†å€åŸŸ + Info: + - '&e用法: &6/res area replace [領地] [å€åŸŸID]' + - 你必須先é¸ä¸­å…©å€‹é¸å–點 + - 如果新的å€åŸŸæ›´å¤§, 二者之間將會被充滿 + Args: '[residence]' + message: + Description: 管ç†é ˜åœ°åŠ å…¥ / é›¢é–‹æ¶ˆæ¯ + Info: + - '&e用法: &6/res message <領地> [enter/leave] [消æ¯]' + - 設置領地加入和離開的消æ¯æ–‡æœ¬ + - '&e用法: &6/res message <領地> remove [enter/leave]' + - 移除加入或離開的消æ¯æ–‡æœ¬ + Args: '[residence] [enter/leave]' + lease: + Description: 管ç†é ˜åœ°ç§Ÿç´„ + Info: + - '&e用法: &6/res lease [renew/cost] [領地]' + - /res lease cost 顯示續租領地的花費 + - /res lease renew 將會續租指定的領地 + Args: '[renew/cost] [residence]' + SubCommands: + set: + Description: 設置租約時間 + Info: + - '&e用法: &6/resadmin lease set [領地] [#days/infinite]' + - 將租約時間設置為特定天數或者無é™åˆ¶ + Args: '[residence]' + renew: + Description: 續期租約時間 + Info: + - '&e用法: &6/resadmin lease renew <領地>' + - 續期當å‰æˆ–指定的領地租約 + Args: '[residence]' + expires: + Description: 租約éŽæœŸæ™‚é–“ + Info: + - '&e用法: &6/resadmin lease expires <領地>' + - 顯示領地租約éŽæœŸçš„時間 + Args: '[residence]' + cost: + Description: 顯示續租花費 + Info: + - '&e用法: &6/resadmin lease cost <領地>' + - 顯示續租領地所需的花費 + Args: '[residence]' + bank: + Description: 管ç†é ˜åœ°éŠ€è¡Œ + Info: + - '&e用法: &6/res bank [deposit/withdraw] <領地> [數é¡]' + - 你必須站在領地中或者指定領地åå­— + - ä½ å¿…é ˆæ“有 +bank 許å¯æ¬Š + Args: '[deposit/withdraw] [residence]' + confirm: + Description: 確èªåˆªé™¤é ˜åœ° + Info: + - '&e用法: &6/res confirm' + - 確èªåˆªé™¤ä¸€å€‹é ˜åœ° + gset: + Description: 為æŸå€‹çµ„設置領地的特定許å¯æ¬Š + Info: + - '&e用法: &6/res gset <領地> [組] [許å¯æ¬Š] [true/false/remove]' + - 輸入 /res flags ? 查看許å¯æ¬Šåˆ—表 + lset: + Description: 更改黑å單和忽略åå–®é¸é … + Info: + - '&e用法: &6/res lset <領地> [blacklist/ignorelist] [ææ–™]' + - '&e用法: &6/res lset <領地> Info' + - å°‡æŸç‰©å“加入黑å單以阻止這種物å“被放置在領地中 + - 忽略å單中的物å“å°‡ä¸æœƒè¢«é ˜åœ°ä¿è­· + Args: '[residence] [blacklist/ignorelist] [material]' + removeall: + Description: 移除æŸçŽ©å®¶çš„所有領地 + Info: + - '&e用法: &6/res removeall [所有者]' + - 移除特定玩家的所有領地 + - 如果是移除其他玩家的領地, 你必須有 /resadmin 命令許å¯æ¬Š + Args: '[playername]' + list: + Description: 顯示領地清單 + Info: + - '&e用法: &6/res list <玩家> <é ç¢¼>' + - 列出指定玩家æ“有的所有領地 (除了隱è—領地) + - 如果顯示自己的領地, éš±è—領地也會被顯示 + - è¦åˆ—出所有玩家的領地, 使用 /res listall 命令 + Args: '[playername]' + listhidden: + Description: 顯示隱è—領地清單 + Info: + - '&e用法: &6/res listhidden <玩家> <é ç¢¼>' + - 列出指定玩家æ“有的隱è—領地 + Args: '[playername]' + listall: + Description: 顯示所有領地 + Info: + - '&e用法: &6/res listall <é ç¢¼>' + - 顯示所有玩家的領地 + listallhidden: + Description: 顯示所有隱è—領地 + Info: + - '&e用法: &6/res listhidden <é ç¢¼>' + - 顯示所有玩家的隱è—領地 + sublist: + Description: 列出所有領地å­å€åŸŸ + Info: + - '&e用法: &6/res sublist <領地> <é ç¢¼>' + - 列出所有領地å­å€åŸŸ + Args: '[residence]' + reset: + Description: 將領地設置還原為é è¨­å€¼ + Info: + - '&e用法: &6/res reset <領地>' + - 將領地的所有權é™é‡ç½®. 你必須是領地所有者或者管ç†å“¡ + Args: '[residence]' + rename: + Description: é‡å‘½å領地 + Info: + - '&e用法: &6/res rename [領地åå­—] [æ–°åå­—]' + - 你必須是領地所有者或者管ç†å“¡ + - 新領地åå­—ä¸èƒ½èˆ‡å…¶ä»–領地é‡è¤‡ + Args: '[residence]' + kick: + Description: 將玩家踢出領地 + Info: + - '&e用法: &6/res kick <玩家>' + - 你必須是領地所有者或者管ç†å“¡ + - 玩家必須線上 + Args: '[playername]' + mirror: + Description: 複製許å¯æ¬Š + Info: + - '&e用法: &6/res mirror [領地] [複製到的領地]' + Args: '[residence] [residence]' + market: + Description: 購買, 出售和出租領地 + SubCommands: + Info: + Description: 查看領地的經濟資訊 + Info: + - '&e用法: &6/res market Info [領地]' + - 顯示領地是å¦æ­£åœ¨å‡ºç§Ÿæˆ–出售, 以åŠé ˜åœ°çš„花費 + Args: '[residence]' + list: + Description: 顯示å¯å‡ºç§Ÿèˆ‡å¯å‡ºå”®çš„領地 + Info: + - '&e用法: &6/res market list' + sell: + Description: 出售一個領地 + Info: + - '&e用法: &6/res market sell [領地] [售價]' + - 將領地以 [amount] 元的價格出售 + - 其他玩家å¯ä»¥åŸ·è¡Œ /res market buy 命令購買 + Args: '[residence]' + sign: + Description: 設置市場告示牌 + Info: + - '&e用法: &6/res market sign [領地]' + - 將看å‘的告示牌設置為領地市場告示牌 + Args: '[residence]' + buy: + Description: 購買一個領地 + Info: + - '&e用法: &6/res market buy [領地]' + - 如果該領地正在出售, 則購買這個領地 + Args: '[residence]' + unsell: + Description: å–消出售領地 + Info: + - '&e用法: &6/res market unsell [領地]' + Args: '[residence]' + rent: + Description: 租用一個領地 + Info: + - '&e用法: &6/res market rent [領地] <自動續租>' + - 租用一個領地. <自動續租> å¯ä»¥æ˜¯ true 或 false. 如果是 true, 並且領地所有者å…許, 領地將會在租約到期之å‰è‡ªå‹•çºŒç§Ÿ + Args: '[cresidence] [true/false]' + rentable: + Description: 將領地設置為å¯å‡ºç§Ÿ + Info: + - '&e用法: &6/res market rentable [領地] [價格] [天數] <週期>' + - 以 [價格] 出租領地 [天數] 天. 如果 <週期> 為 true, 領地將會在租約çµæŸå¾Œè‡ªå‹•å‡ºç§Ÿ. + Args: '[residence]' + release: + Description: å–消領地租賃狀態 + Info: + - '&e用法: &6/res market release [領地]' + - 如果你是租用者, 該命令將會退租領地 + - 如果你是所有者, 該命令將會收回領地 + Args: '[residence]' + current: + Description: 顯示你目å‰æ‰€åœ¨çš„領地 + Info: + - '&e用法: &6/res current' + signupdate: + Description: 更新領地告示牌 + Info: + - '&e用法: &6/res signupdate' + lists: + Description: é å®šç¾©è¨±å¯æ¬Šåˆ—表 + Info: + - é å®šç¾©çš„許å¯æ¬Šåˆ—表å¯ä»¥æ‡‰ç”¨åˆ°é ˜åœ°ä¸Š + SubCommands: + add: + Description: 添加一個列表 + Info: + - '&e用法: &6/res lists add <列表å>' + remove: + Description: 刪除一個列表 + Info: + - '&e用法: &6/res lists remove <列表å>' + apply: + Description: 將列表應用於領地 + Info: + - '&e用法: &6/res lists apply <列表å> <領地>' + set: + Description: 設置列表全域許å¯æ¬Š + Info: + - '&e用法: &6/res lists set <列表å> <許å¯æ¬Š> <值>' + pset: + Description: 設置列表玩家許å¯æ¬Š + Info: + - '&e用法: &6/res lists pset <列表å> <玩家> <許å¯æ¬Š> <值>' + gset: + Description: 設置列表組許å¯æ¬Š + Info: + - '&e用法: &6/res lists view <列表å>' + view: + Description: 查看列表 + server: + Description: 創建伺æœå™¨é ˜åœ° + Info: + - '&e用法: &6/resadmin server [領地]' + - 創建一個屬於伺æœå™¨æ‰€æœ‰çš„領地 + Args: '[cresidence]' + setowner: + Description: 改變領地所有者 + Info: + - '&e用法: &6/resadmin setowner [領地] [玩家]' + Args: '[cresidence]' + resreload: + Description: é‡è¼‰ Residence. + Info: + - '&e用法: &6/resreload' + resload: + Description: 載入領地存檔檔 + Info: + - '&e用法: &6/resload' + - 該命令ä¸å®‰å…¨! 它ä¸æœƒå…ˆä¿å­˜é ˜åœ°ç‹€æ…‹. + - å°é ˜åœ°åšå‡ºæ”¹è®Šå¾Œé‡æ–°è¼‰å…¥å­˜æª”. + removeworld: + Description: 刪除指定世界中的所有領地 + Info: + - '&e用法: &6/res removeworld [世界å]' + - åªèƒ½åœ¨æŽ§åˆ¶å°åŸ·è¡Œæ­¤å‘½ä»¤ + signconvert: + Description: å°‡ ResidenceSign 的告示牌轉æ›ç‚ºæ–°æ ¼å¼ + Info: + - '&e用法: &6/res signconvert' + - 嘗試轉æ›å·²æœ‰çš„ ResidenceSign 告示牌 + version: + Description: 顯示領地æ’件的版本 + Info: + - '&e用法: &6/res version' diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index ff3db5dee..52f8bb488 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -466,6 +466,8 @@ public void LoadLang(String lang) { GetConfig("Language.General.LandCost", "&eLand cost: &6%1", writer, conf, true); GetConfig("Language.General.True", "&2True", writer, conf, true); GetConfig("Language.General.False", "&cFalse", writer, conf, true); + GetConfig("Language.General.Removed", "&6Removed", writer, conf, true); + GetConfig("Language.General.FlagState", "&eFlag state: %1", writer, conf, true); GetConfig("Language.General.Land", "&eLand: &6%1", writer, conf, true); GetConfig("Language.General.Cost", "&eCost: &6%1 &eper &6%2 &edays", writer, conf, true); GetConfig("Language.General.Status", "&eStatus: %1", writer, conf, true); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 7191d36d5..9ceb3ddb4 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -161,7 +161,7 @@ public class Residence extends JavaPlugin { protected static boolean initsuccess = false; public static Map deleteConfirm; public static List resadminToggle; - private final static String[] validLanguages = { "English" , "Czech", "Chinese"}; + private final static String[] validLanguages = { "English" , "Czech", "Chinese", "ChineseTW"}; public static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); public static WorldEditPlugin wep = null; public static WorldGuardPlugin wg = null; diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 40db34b5d..ba7b00b9d 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -227,17 +227,19 @@ public void recalculateResidence(ClaimedResidence res) { List lore = new ArrayList(); + String variable = ""; switch (one.getValue()) { case 0: - lore.add(ChatColor.GOLD + "Flag state: " + ChatColor.DARK_RED + "False"); + variable = Residence.getLM().getMessage("General.False"); break; case 1: - lore.add(ChatColor.GOLD + "Flag state: " + ChatColor.GREEN + "True"); + variable = Residence.getLM().getMessage("General.True"); break; case 2: - lore.add(ChatColor.GOLD + "Flag state: " + ChatColor.RED + "Removed"); + variable = Residence.getLM().getMessage("General.Removed"); break; } + lore.add(Residence.getLM().getMessage("General.FlagState", variable)); if (description.containsKey(one.getKey())) lore.addAll(description.get(one.getKey())); @@ -373,17 +375,19 @@ public void recalculatePlayer(ClaimedResidence res) { List lore = new ArrayList(); + String variable = ""; switch (one.getValue()) { case 0: - lore.add(ChatColor.GOLD + "Flag state: " + ChatColor.DARK_RED + "False"); + variable = Residence.getLM().getMessage("General.False"); break; case 1: - lore.add(ChatColor.GOLD + "Flag state: " + ChatColor.GREEN + "True"); + variable = Residence.getLM().getMessage("General.True"); break; case 2: - lore.add(ChatColor.GOLD + "Flag state: " + ChatColor.RED + "Removed"); + variable = Residence.getLM().getMessage("General.Removed"); break; } + lore.add(Residence.getLM().getMessage("General.FlagState", variable)); if (description.containsKey(one.getKey())) lore.addAll(description.get(one.getKey())); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index c1d7f2b37..49db38daa 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -19,8 +19,6 @@ import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.Debug; - import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; @@ -1127,7 +1125,7 @@ public Map save() { private double convertDouble(double d) { return convertDouble(String.valueOf(d)); } - private double convertDouble(String dString) { + private static double convertDouble(String dString) { DecimalFormat formatter = new DecimalFormat("#0.00"); formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); dString = dString.replace(",", "."); @@ -1139,7 +1137,7 @@ private double convertDouble(String dString) { } return d; } - + @SuppressWarnings("unchecked") public static ClaimedResidence load(Map root, ClaimedResidence parent, Residence plugin) throws Exception { ClaimedResidence res = new ClaimedResidence(plugin); @@ -1192,12 +1190,12 @@ public static ClaimedResidence load(Map root, ClaimedResidence p double yaw = 0.0; if (tploc.containsKey("Yaw")) - yaw = Double.valueOf(tploc.get("Yaw").toString()); + yaw = convertDouble(tploc.get("Yaw").toString()); if (tploc.containsKey("Pitch")) - pitch = Double.valueOf(tploc.get("Pitch").toString()); + pitch = convertDouble(tploc.get("Pitch").toString()); - res.tpLoc = new Location(world, Double.valueOf(tploc.get("X").toString()), Double.valueOf(tploc.get("Y").toString()), Double.valueOf(tploc.get("Z") + res.tpLoc = new Location(world,convertDouble(tploc.get("X").toString()), convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z") .toString())); res.tpLoc.setPitch((float) pitch); res.tpLoc.setYaw((float) yaw); diff --git a/src/plugin.yml b/src/plugin.yml index 889d6dad2..0d020cd40 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.2.5 +version: 4.0.3.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From f650cc2ef44b7975d1710a6d4296afe26de0655e Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 1 Apr 2016 16:11:33 +0300 Subject: [PATCH 0141/1142] Riding flag --- .../bukkit/residence/LocaleManager.java | 6 +++++ .../bukkit/residence/allNms/v1_9Events.java | 1 - .../listeners/ResidenceEntityListener.java | 6 ----- .../listeners/ResidencePlayerListener.java | 26 +++++++++++++++++++ .../residence/protection/FlagPermissions.java | 3 +++ src/plugin.yml | 2 +- 6 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 52f8bb488..8abdefb90 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -1065,6 +1065,12 @@ public void LoadLang(String lang) { "Automaticaly respawns player", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.respawn.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // riding + FlagList.add("riding"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.riding.Description", + "Prevent riding a horse", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.riding.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // Filling with custom flags info Set sec = conf.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands").getKeys(false); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index 11b411906..f8010a93e 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -14,7 +14,6 @@ import org.bukkit.potion.PotionEffect; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.utils.Debug; public class v1_9Events implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index ff96419f0..cc3600ce7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -7,8 +7,6 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -23,8 +21,6 @@ import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityInteractEvent; import org.bukkit.event.entity.PotionSplashEvent; -import org.bukkit.event.entity.ProjectileLaunchEvent; - import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -49,9 +45,7 @@ import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; -import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; -import org.bukkit.projectiles.ProjectileSource; public class ResidenceEntityListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ad909956a..59722aec2 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -710,6 +710,32 @@ public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + + if (ent.getType() != EntityType.HORSE) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + if (!res.getPermissions().playerHas(player.getName(), "container", true) && player.isSneaking()) { + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "container", res.getName())); + event.setCancelled(true); + } else if (!res.getPermissions().playerHas(player.getName(), "riding", false)) { + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "riding", res.getName())); + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { // disabling event on world diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 52a238a6b..e957d0ccd 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -153,6 +153,9 @@ public static void initValidFlags() { addFlag("dye"); addFlag("enderpearl"); + + // Horse riding + addFlag("riding"); addResidenceOnlyFlag("trample"); addResidenceOnlyFlag("pvp"); diff --git a/src/plugin.yml b/src/plugin.yml index 0d020cd40..fc2eb428f 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.3.1 +version: 4.0.4.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 28efce760951f96194e06e976964aff700b603fb Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 3 Apr 2016 17:16:40 +0300 Subject: [PATCH 0142/1142] Ice form flag/ bank command --- .../bukkit/residence/LocaleManager.java | 6 +++ .../bekvon/bukkit/residence/Residence.java | 13 +++-- .../bukkit/residence/commands/bank.java | 51 +++++++++++++++++++ .../listeners/ResidenceBlockListener.java | 14 +++++ .../residence/protection/FlagPermissions.java | 3 ++ src/plugin.yml | 2 +- 6 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/commands/bank.java diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 8abdefb90..a2843f318 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -1059,6 +1059,12 @@ public void LoadLang(String lang) { "Prevents snowman snow trails", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowtrail.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + // iceform + FlagList.add("iceform"); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.iceform.Description", + "Prevents from ice forming", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.iceform.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); // respawn FlagList.add("respawn"); GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.respawn.Description", diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 9ceb3ddb4..717a616c2 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -144,11 +144,10 @@ public class Residence extends JavaPlugin { protected static RandomTp RandomTpManager; protected static DynMapManager DynManager; - public static Plugin instance2; protected boolean firstenable = true; protected static EconomyInterface economy; public final static int saveVersion = 1; - protected static File dataFolder; + public static File dataFolder; protected static int leaseBukkitId = -1; protected static int rentBukkitId = -1; protected static int healBukkitId = -1; @@ -161,7 +160,7 @@ public class Residence extends JavaPlugin { protected static boolean initsuccess = false; public static Map deleteConfirm; public static List resadminToggle; - private final static String[] validLanguages = { "English" , "Czech", "Chinese", "ChineseTW"}; + private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW" }; public static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); public static WorldEditPlugin wep = null; public static WorldGuardPlugin wg = null; @@ -631,11 +630,11 @@ public void run() { // 1.8 event if (VersionChecker.GetVersion() >= 1800) pm.registerEvents(new v1_8Events(), this); - + // 1.9 event if (VersionChecker.GetVersion() >= 1900) pm.registerEvents(new v1_9Events(), this); - + Debug.D("Residence version: " + VersionChecker.GetVersion()); // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, @@ -822,6 +821,10 @@ public static HelpEntry getHelpPages() { return helppages; } + public static void setConfigManager(ConfigManager cm) { + cmanager = cm; + } + public static ConfigManager getConfigManager() { return cmanager; } diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java new file mode 100644 index 000000000..375494c55 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -0,0 +1,51 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class bank implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if ((args.length != 3) && (args.length != 4)) { + return false; + } + ClaimedResidence res = null; + if (args.length == 4) { + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + } else if ((sender instanceof Player)) { + res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); + } + if (res == null) { + sender.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + return true; + } + int amount = 0; + try { + if (args.length == 3) + amount = Integer.parseInt(args[2]); + else + amount = Integer.parseInt(args[3]); + } catch (Exception ex) { + sender.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + return true; + } + if (args[1].equals("deposit")) + res.getBank().deposit(sender, amount, resadmin); + else if (args[1].equals("withdraw")) + res.getBank().withdraw(sender, amount, resadmin); + else + return false; + + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 6848b1cb4..461566480 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -4,6 +4,8 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Snowman; @@ -119,6 +121,18 @@ public void onBlockForm(BlockFormEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onIceForm(BlockFormEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("iceform", true)) { + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockFall(EntityChangeBlockEvent event) { // disabling event on world diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index e957d0ccd..45849d70c 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -221,8 +221,11 @@ public static void initValidFlags() { // Auto respawn player addResidenceOnlyFlag("respawn"); + + addResidenceOnlyFlag("iceform"); addPlayerOrGroupOnlyFlag("admin"); + Residence.getConfigManager().UpdateGroupedFlagsFile(); diff --git a/src/plugin.yml b/src/plugin.yml index fc2eb428f..c981af975 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.4.1 +version: 4.0.5.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 23ad83b64e44410e9993fca8a1f1c63a7df93114 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 Apr 2016 17:52:25 +0300 Subject: [PATCH 0143/1142] bypass permissions --- src/Language/Chinese.yml | 34 ++++++--- .../bukkit/residence/ConfigManager.java | 2 +- .../bukkit/residence/LocaleManager.java | 12 +++- src/com/bekvon/bukkit/residence/NMS.java | 2 + .../bekvon/bukkit/residence/Residence.java | 11 ++- .../residence/ResidenceCommandListener.java | 29 ++++---- .../bekvon/bukkit/residence/allNms/v1_7.java | 7 +- .../residence/allNms/v1_7_Couldron.java | 6 ++ .../bekvon/bukkit/residence/allNms/v1_8.java | 6 ++ .../bekvon/bukkit/residence/allNms/v1_9.java | 7 +- .../bukkit/residence/commands/give.java | 3 - .../bukkit/residence/commands/reload.java | 70 +++++++++++++++++++ .../bekvon/bukkit/residence/commands/rt.java | 32 ++++++++- .../listeners/ResidenceBlockListener.java | 11 +-- .../listeners/ResidencePlayerListener.java | 29 ++++---- .../residence/listeners/SpigotListener.java | 2 +- .../protection/ResidenceManager.java | 3 - .../bukkit/residence/signsStuff/SignUtil.java | 6 +- .../bekvon/bukkit/residence/utils/Debug.java | 4 +- .../bukkit/residence/utils/RandomTp.java | 4 +- src/plugin.yml | 2 +- 21 files changed, 214 insertions(+), 68 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/commands/reload.java diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml index 6df0e4ce6..d4599b6df 100644 --- a/src/Language/Chinese.yml +++ b/src/Language/Chinese.yml @@ -1,14 +1,13 @@ -# Author / 作者: deluxghost -# 注æ„: 如果你想修改这个文件,那么强烈建议您为它准备一份备份,而ä¸æ˜¯ç›´æŽ¥ä¿®æ”¹ã€‚ -# 在 Residence æ’件更新到新版本时,该文件将会被自动覆盖,你的所有更改将会å¤åŽŸã€‚ -# 如果è¦æ›´æ”¹æ’件的语言,在 Residence çš„ config.yml 文件中将 Language: 选项 -# 更改为该文件的文件åå³å¯ã€‚ +# NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy +# of this file and modify that instead. This file will be updated automatically by Residence +# when a newer version is detected, and your changes will be overwritten. Once you +# have a copy of this file, change the Language: option under the Residence config.yml +# to whatever you named your copy. Language: - # 以下是 Residence å‘é€ç»™çŽ©å®¶çš„消æ¯æ–‡æœ¬, 一些文本中包å«å½¢å¦‚ %1 çš„å˜é‡, 它们会 - # 在消æ¯å‘é€æ—¶è¢«æ›¿æ¢æˆç›¸åº”的内容, 请ä¸è¦ä¿®æ”¹è¿™äº›å˜é‡. Invalid: Player: '&c无效的玩家å...' + World: '&cInvalid world...' Residence: '&c无效的领地...' Subzone: '&c无效的领地å­åŒºåŸŸ...' Direction: '&c无效的方å‘...' @@ -214,7 +213,7 @@ Language: North: '&eåœ¨åŒ—æ–¹ç¼©å° &6%1 &e个方å—' West: '&eåœ¨è¥¿æ–¹ç¼©å° &6%1 &e个方å—' South: '&e在å—æ–¹ç¼©å° &6%1 &e个方å—' - East: '&eåœ¨ä¸œæ–¹ç¼©å° &6%1 &eblocks' + East: '&eåœ¨ä¸œæ–¹ç¼©å° &6%1 &e个方å—' Up: '&eåœ¨ä¸Šæ–¹ç¼©å° &6%1 &e个方å—' Down: '&eåœ¨ä¸‹æ–¹ç¼©å° &6%1 &e个方å—' Shifting: @@ -304,6 +303,7 @@ Language: TeleportSuccess: '&eä¼ é€åˆ° X:&6%1&e, Y:&6%2&e, Z:&6%3 &eä½ç½®' IncorrectLocation: '&6无法找到正确的传é€ä½ç½®, 请等待 &e%1 &6秒åŽé‡è¯•.' TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%4 &e秒内ä¸è¦ç§»åŠ¨.' + WorldList: '&eå¯ç”¨ä¸–ç•Œ: &6%1' General: DisabledWorld: '&c该世界已ç¦ç”¨é¢†åœ°.' UseNumbers: '&c请输入数字.' @@ -338,8 +338,8 @@ Language: TotalWorth: '&e总价值: &6%1 &e(&6%2&e)' NotOnline: '&e目标玩家ä¸åœ¨çº¿.' NextPage: '&e下一页' - NextInfoPage: '&2| &e下一页 &2>>>' - PrevInfoPage: '&2<<< &e上一页 &2|' + NextInfoPage: '&2| &e下一页 &2>>>' + PrevInfoPage: '&2<<< &e上一页 &2|' GenericPage: '&e第 &6%1 &e页, å…± &6%2' WorldEditNotFound: '&c未检测到 WorldEdit.' CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' @@ -372,6 +372,8 @@ Language: Owner: '&e所有者: &6%1' World: '&e世界: &6%1' Subzones: '&eå­åŒºåŸŸ' + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. NewPlayerInfo: '&e如果è¦åˆ›å»ºé¢†åœ°ä»¥ä¿æŠ¤æˆ¿å±‹, 请用木锄选å–ä¿æŠ¤åŒºçš„两个对角, 然åŽæ‰§è¡Œ &2/res create 领地å称 &e命令.' CommandHelp: Description: 领地的命令帮助 @@ -801,10 +803,18 @@ CommandHelp: Description: 防止雪傀儡留下雪轨迹 Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + iceform: + Description: 阻止冰霜行者魔咒å‘挥作用 + Info: + - '&eUsage: &6/res set <领地> [æƒé™] true/false/remove' respawn: Description: 自动é‡ç”ŸçŽ©å®¶ Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + riding: + Description: 阻止骑乘马匹 + Info: + - '&eUsage: &6/res set <领地> [æƒé™] true/false/remove' limits: Description: 显示你的领地é™åˆ¶ Info: @@ -1149,6 +1159,10 @@ CommandHelp: Description: 更新领地木牌 Info: - '&e用法: &6/res signupdate' + reload: + Description: é‡è½½è¯­è¨€æˆ–é…置文件 + Info: + - '&eUsage: &6/res reload [config/lang]' lists: Description: 预定义æƒé™åˆ—表 Info: diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 481434980..d629102da 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -362,7 +362,7 @@ public void UpdateGroupedFlagsFile() { } @SuppressWarnings("deprecation") - void UpdateConfigFile() { + public void UpdateConfigFile() { File f = new File(plugin.getDataFolder(), "config.yml"); diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index a2843f318..85fab4da7 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -72,7 +72,7 @@ private static YamlConfiguration loadConfiguration(BufferedReader in, String lan } catch (InvalidConfigurationException ex) { Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[Residence] Your locale file for " + language + " is incorect! Use http://yaml-online-parser.appspot.com/ to find issue."); - return null; + return null; } return config; @@ -119,6 +119,7 @@ public void LoadLang(String lang) { writer.options().header(header.toString()); GetConfig("Language.Invalid.Player", "&cInvalid player name...", writer, conf, true); + GetConfig("Language.Invalid.World", "&cInvalid world...", writer, conf, true); GetConfig("Language.Invalid.Residence", "&cInvalid Residence...", writer, conf, true); GetConfig("Language.Invalid.Subzone", "&cInvalid Subzone...", writer, conf, true); GetConfig("Language.Invalid.Direction", "&cInvalid Direction...", writer, conf, true); @@ -410,6 +411,7 @@ public void LoadLang(String lang) { GetConfig("Language.RandomTeleport.IncorrectLocation", "&6Could not find correct teleport location, please wait &e%1 &6sec and try again.", writer, conf, true); GetConfig("Language.RandomTeleport.TeleportStarted", "&eTeleportation started, don't move for next &6%4 &esec.", writer, conf, true); + GetConfig("Language.RandomTeleport.WorldList", "&ePossible worlds: &6%1", writer, conf, true); GetConfig("Language.General.DisabledWorld", "&cResidence plugin is disabled in this world", writer, conf, true); GetConfig("Language.General.UseNumbers", "&cPlease use numbers...", writer, conf, true); @@ -1140,7 +1142,8 @@ public void LoadLang(String lang) { // res expand GetConfig("CommandHelp.SubCommands.res.SubCommands.expand.Description", "Expands residence in direction you looking", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.expand.Info", - Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional"), writer, conf, true); + Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional"), writer, conf, + true); // res contract GetConfig("CommandHelp.SubCommands.res.SubCommands.contract.Description", "Contracts residence in direction you looking", writer, conf, true); @@ -1433,6 +1436,11 @@ public void LoadLang(String lang) { Arrays.asList("&eUsage: &6/res signupdate"), writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.reload.Description", "reload lanf or config files", writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.reload.Info", + Arrays.asList("&eUsage: &6/res reload [config/lang]"), + writer, conf, true); + GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.Description", "Predefined permission lists", writer, conf, true); GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.Info", Arrays.asList("Predefined permissions that can be applied to a residence."), diff --git a/src/com/bekvon/bukkit/residence/NMS.java b/src/com/bekvon/bukkit/residence/NMS.java index 0ed227820..b3a34a950 100644 --- a/src/com/bekvon/bukkit/residence/NMS.java +++ b/src/com/bekvon/bukkit/residence/NMS.java @@ -40,4 +40,6 @@ public interface NMS { public ItemStack getLingeringPotionItem(Entity ent); public String getPotionType(ItemStack potion); + + public ItemStack itemInMainHand(Player player); } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 717a616c2..5aed5db3b 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -76,7 +76,6 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.CrackShot; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.TabComplete; @@ -135,7 +134,7 @@ public class Residence extends JavaPlugin { protected static RentManager rentmanager; protected static ChatManager chatmanager; protected static Server server; - protected static HelpEntry helppages; + public static HelpEntry helppages; protected static LocaleManager LocaleManager; protected static Language NewLanguageManager; protected static PlayerManager PlayerManager; @@ -624,9 +623,6 @@ public void run() { pm.registerEvents(flistener, this); pm.registerEvents(shlistener, this); - NewLanguageManager = new Language(this); - getLM().LanguageReload(); - // 1.8 event if (VersionChecker.GetVersion() >= 1800) pm.registerEvents(new v1_8Events(), this); @@ -635,8 +631,6 @@ public void run() { if (VersionChecker.GetVersion() >= 1900) pm.registerEvents(new v1_9Events(), this); - Debug.D("Residence version: " + VersionChecker.GetVersion()); - // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, // Priority.NORMAL, this); if (cmanager.enableSpout()) { @@ -649,6 +643,9 @@ public void run() { plistener.reload(); } + NewLanguageManager = new Language(this); + getLM().LanguageReload(); + if (Bukkit.getVersion().toString().contains("Spigot") || Bukkit.getVersion().toString().contains("spigot")) getServer().getPluginManager().registerEvents(spigotlistener, this); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 3b01508b6..20beffdf1 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -26,12 +26,13 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (cevent.isCancelled()) { return true; } - - if (sender instanceof Player && !Residence.getPermissionManager().isResidenceAdmin((Player) sender) && Residence.isDisabledWorldCommand(((Player) sender).getWorld())){ + + if (sender instanceof Player && !Residence.getPermissionManager().isResidenceAdmin((Player) sender) && Residence.isDisabledWorldCommand(((Player) sender) + .getWorld())) { sender.sendMessage(Residence.getLM().getMessage("General.DisabledWorld")); return true; } - + if (command.getName().equals("resreload") && args.length == 0) { if (sender instanceof Player) { Player player = (Player) sender; @@ -87,9 +88,6 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } else { resadmin = true; } - - - if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { return commandHelp(args, resadmin, sender, command); @@ -107,9 +105,6 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } } - if (args.length == 0) { - return false; - } if (args.length == 0) { args = new String[1]; args[0] = "?"; @@ -128,8 +123,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St cmd cmdClass = getCmdClass(sender, command.getName(), args); if (cmdClass == null) { - sendUsage(sender, command.getName()); - return true; + return commandHelp(new String[] { "?" }, resadmin, sender, command); } if (!resadmin && Residence.resadminToggle.contains(player.getName())) { @@ -138,8 +132,15 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } } boolean respond = cmdClass.perform(args, resadmin, command, sender); - if (!respond) - sendUsage(sender, command.getName()); + if (!respond) { + String[] tempArray = new String[args.length + 1]; + for (int i = 0; i < args.length; i++) { + tempArray[i] = args[i]; + } + tempArray[args.length] = "?"; + args = tempArray; + return commandHelp(args, resadmin, sender, command); + } return true; } @@ -165,7 +166,7 @@ private cmd getCmdClass(CommandSender sender, String command, String[] args) { return cmdClass; } - private void sendUsage(CommandSender sender, String command) { + public void sendUsage(CommandSender sender, String command) { sender.sendMessage(Residence.getLM().getMessage("General.DefaultUsage", command)); } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index c42ba9b2f..72b010251 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -112,6 +112,12 @@ public boolean isMainHand(PlayerInteractEvent event) { return true; } + @SuppressWarnings("deprecation") + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInHand(); + } + @SuppressWarnings("deprecation") @Override public Block getTargetBlock(Player player, int range) { @@ -123,7 +129,6 @@ public String getPotionType(ItemStack potion) { return null; } - @Override public ItemStack getLingeringPotionItem(Entity ent) { return null; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index b2753e2a6..fe328d5c6 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -112,6 +112,12 @@ public boolean isMainHand(PlayerInteractEvent event) { return true; } + @SuppressWarnings("deprecation") + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInHand(); + } + @SuppressWarnings("deprecation") @Override public Block getTargetBlock(Player player, int range) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java index dc9f775f2..77e12fea2 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8.java @@ -140,6 +140,12 @@ public boolean isMainHand(PlayerInteractEvent event) { return true; } + @SuppressWarnings("deprecation") + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInHand(); + } + @Override public Block getTargetBlock(Player player, int range) { return player.getTargetBlock((Set) null, range); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9.java b/src/com/bekvon/bukkit/residence/allNms/v1_9.java index 01b6f8c80..d7b316956 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9.java @@ -142,7 +142,12 @@ public boolean isPlate(Material mat) { public boolean isMainHand(PlayerInteractEvent event) { return event.getHand() == EquipmentSlot.HAND ? true : false; } - + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + @Override public Block getTargetBlock(Player player, int range) { return player.getTargetBlock((Set) null, range); diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index 0ae272b50..ff917c7f1 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -6,7 +6,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; -import com.bekvon.bukkit.residence.utils.Debug; public class give implements cmd { @@ -17,8 +16,6 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Player player = (Player) sender; - Debug.D(args.toString()); - if (args.length != 3) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java new file mode 100644 index 000000000..79d29c6ce --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -0,0 +1,70 @@ +package com.bekvon.bukkit.residence.commands; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.text.help.HelpEntry; +import com.bekvon.bukkit.residence.text.help.InformationPager; + +public class reload implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!resadmin && !sender.isOp()) { + sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + + if (args.length != 2) { + return false; + } + + if (args[1].equalsIgnoreCase("lang")) { + Residence.getLM().LanguageReload(); + File langFile = new File(new File(Residence.dataFolder, "Language"), Residence.getConfigManager().getLanguage() + ".yml"); + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + if (langFile.isFile()) { + FileConfiguration langconfig = new YamlConfiguration(); + try { + langconfig.load(in); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + Residence.helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); + InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); + } else { + System.out.println("[Residence] Language file does not exist..."); + } + sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded language file."); + return true; + } else if (args[1].equalsIgnoreCase("config")) { + Residence.getConfigManager().UpdateConfigFile(); + sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config file."); + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 416abe3e4..ddfde2ec4 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.utils.RandomTp; public class rt implements cmd { @@ -17,7 +18,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; Player player = (Player) sender; - if (args.length != 1) { + if (args.length != 1 && args.length != 2) { return false; } @@ -35,7 +36,34 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } - Location loc = RandomTp.getRandomlocation(player.getLocation().getWorld().getName()); + String wname = null; + + if (args.length == 2) { + for (RandomTeleport one : Residence.getConfigManager().getRandomTeleport()) { + if (!one.getWorld().equalsIgnoreCase(args[1])) + continue; + wname = one.getWorld(); + break; + } + + if (wname == null) { + sender.sendMessage(Residence.getLM().getMessage("Invalid.World")); + + String worlds = ""; + + for (RandomTeleport one : Residence.getConfigManager().getRandomTeleport()) { + worlds += one.getWorld() + " "; + break; + } + + sender.sendMessage(Residence.getLM().getMessage("RandomTeleport.WorldList", worlds)); + return true; + } + } + if (wname == null) + wname = player.getLocation().getWorld().getName(); + + Location loc = RandomTp.getRandomlocation(wname); Residence.getRandomTeleportMap().put(player.getName(), System.currentTimeMillis()); if (loc == null) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 461566480..0dfc7438c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -4,8 +4,6 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Snowman; @@ -96,7 +94,7 @@ public void onBlockBreak(BlockBreakEvent event) { boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), "destroy", perms.playerHas(pname, player.getWorld().getName(), "build", true)); boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), "container", true); - if (!hasdestroy) { + if (!hasdestroy && !player.hasPermission("residence.bypass.destroy")) { player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "destroy")); event.setCancelled(true); } else if (!hasContainer && mat == Material.CHEST) { @@ -127,6 +125,11 @@ public void onIceForm(BlockFormEvent event) { if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) return; + Material ice = Material.getMaterial("FROSTED_ICE"); + + if (event.getNewState().getType() != Material.ICE && ice != null && ice != event.getNewState().getType()) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has("iceform", true)) { event.setCancelled(true); @@ -269,7 +272,7 @@ public void onBlockPlace(BlockPlaceEvent event) { } FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); boolean hasplace = perms.playerHas(pname, player.getWorld().getName(), "place", perms.playerHas(pname, player.getWorld().getName(), "build", true)); - if (!hasplace) { + if (!hasplace && !player.hasPermission("residence.bypass.build")) { event.setCancelled(true); player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "place")); return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 59722aec2..0950541f6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -47,7 +47,6 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.event.*; import com.bekvon.bukkit.residence.gui.SetFlag; @@ -552,6 +551,7 @@ public void onSelection(PlayerInteractEvent event) { return; } + @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onInfoCheck(PlayerInteractEvent event) { // disabling event on world @@ -584,13 +584,14 @@ public void onInfoCheck(PlayerInteractEvent event) { } + @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { // disabling event on world if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); - int heldItemId = player.getItemInHand().getTypeId(); + int heldItemId = Residence.getNms().itemInMainHand(player).getTypeId(); Block block = event.getClickedBlock(); if (block == null) return; @@ -610,7 +611,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { String world = player.getWorld().getName(); String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); boolean resadmin = Residence.isResAdminOn(player); - Material heldItem = player.getItemInHand().getType(); + Material heldItem = Residence.getNms().itemInMainHand(player).getType(); if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { player.sendMessage(Residence.getLM().getMessage("General.ItemBlacklisted")); event.setCancelled(true); @@ -624,8 +625,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); if (heldItem != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (heldItemId == 351) { - if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS || player.getItemInHand().getData().getData() == 3 - && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { + if (Residence.getNms().itemInMainHand(player).getData().getData() == 15 && block.getType() == Material.GRASS || Residence.getNms().itemInMainHand(player) + .getData().getData() == 3 && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player.getName(), world, "build", true)) { player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "build")); @@ -727,10 +728,10 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; - if (!res.getPermissions().playerHas(player.getName(), "container", true) && player.isSneaking()) { + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "container", true) && player.isSneaking()) { player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "container", res.getName())); event.setCancelled(true); - } else if (!res.getPermissions().playerHas(player.getName(), "riding", false)) { + } else if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "riding", false)) { player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "riding", res.getName())); event.setCancelled(true); } @@ -751,7 +752,9 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { return; ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res != null && !res.getPermissions().playerHas(player.getName(), "dye", true)) { + if (res == null) + return; + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "dye", true)) { player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "dye", res.getName())); event.setCancelled(true); } @@ -775,7 +778,7 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { if (res == null) return; - if (!res.getPermissions().playerHas(player.getName(), "shear", true)) { + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "shear", true)) { player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Shear", res.getName())); event.setCancelled(true); } @@ -803,7 +806,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { return; } - Material heldItem = player.getItemInHand().getType(); + Material heldItem = Residence.getNms().itemInMainHand(player).getType(); FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); String world = player.getWorld().getName(); @@ -1024,9 +1027,9 @@ public void onPlayerMove(PlayerMoveEvent event) { this.lastUpdate.put(name, now); handleNewLocation(player, locto, true); - if (!ResidenceCommandListener.getTeleportMap().isEmpty() && Residence.getConfigManager().getTeleportDelay() > 0 && ResidenceCommandListener.getTeleportDelayMap() - .contains(player.getName())) { - ResidenceCommandListener.getTeleportMap().remove(player.getName()); + if (!Residence.getTeleportDelayMap().isEmpty() && Residence.getConfigManager().getTeleportDelay() > 0 && Residence.getTeleportDelayMap().contains(player + .getName())) { + Residence.getTeleportDelayMap().remove(player.getName()); player.sendMessage(Residence.getLM().getMessage("General.TeleportCanceled")); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java index f86635382..f8f2fc236 100644 --- a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java @@ -22,7 +22,7 @@ public void onItemDamage(PlayerItemDamageEvent event) { Location loc = player.getLocation(); FlagPermissions perms = Residence.getPermsByLoc(loc); if (perms.has("nodurability", false)) { - ItemStack held = player.getItemInHand(); + ItemStack held = Residence.getNms().itemInMainHand(player); if (held.getType() != Material.AIR) { held.setDurability(held.getDurability()); player.setItemInHand(held); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 27b296150..e251c94ed 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -29,7 +29,6 @@ import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceManager implements ResidenceInterface { protected Map residences; @@ -397,8 +396,6 @@ public void removeResidence(String name) { @SuppressWarnings("deprecation") public void removeResidence(Player player, String name, boolean resadmin) { - Debug.D("" + name); - ClaimedResidence res = this.getByName(name); if (res == null) { if (player != null) diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index f6c89923c..9858cc019 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -23,6 +23,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; public class SignUtil { @@ -66,7 +67,7 @@ public void run() { ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); Signs newTemp = new Signs(); newTemp.setCategory(Integer.valueOf(category)); - newTemp.setResidence(NameSection.getString("Residence.Line")); + newTemp.setResidence(NameSection.getString("Residence")); newTemp.setWorld(NameSection.getString("World")); newTemp.setX(NameSection.getDouble("X")); newTemp.setY(NameSection.getDouble("Y")); @@ -180,6 +181,9 @@ public boolean SignUpdate(Signs Sign) { Sign sign = (Sign) block.getState(); + Debug.D(landName + " ForSale " + ForSale); + Debug.D(landName + " ForRent " + ForRent); + if (!ForRent && !ForSale) { block.breakNaturally(); Signs.removeSign(Sign); diff --git a/src/com/bekvon/bukkit/residence/utils/Debug.java b/src/com/bekvon/bukkit/residence/utils/Debug.java index 968c6ddfa..15f800f27 100644 --- a/src/com/bekvon/bukkit/residence/utils/Debug.java +++ b/src/com/bekvon/bukkit/residence/utils/Debug.java @@ -5,11 +5,11 @@ import org.bukkit.entity.Player; public class Debug { - public static void D(String message) { + public static void D(Object message) { Player player = Bukkit.getPlayer("Zrips"); if (player == null) return; - player.sendMessage(ChatColor.DARK_GRAY + "[Residence Debug] " + ChatColor.DARK_AQUA + ChatColor.translateAlternateColorCodes('&', message)); + player.sendMessage(ChatColor.DARK_GRAY + "[Residence Debug] " + ChatColor.DARK_AQUA + ChatColor.translateAlternateColorCodes('&', message.toString())); return; } } diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index c4c34b184..86f25bccf 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -45,10 +45,10 @@ public static Location getRandomlocation(String WorldName) { rtloc = one; break; } - + if (rtloc == null) return null; - + World world = rtloc.getCenter().getWorld(); if (world == null) diff --git a/src/plugin.yml b/src/plugin.yml index c981af975..c4d29f146 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.5.0 +version: 4.0.6.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From cc3023d0b3296ee13cc2e2418de3f502811e3daf Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 18 Apr 2016 13:48:14 +0300 Subject: [PATCH 0144/1142] snowball flag / config/locale handling rework / sand cannons --- .../bukkit/residence/ConfigManager.java | 616 +++-- .../bukkit/residence/LocaleManager.java | 2223 ++++++++--------- .../bekvon/bukkit/residence/Residence.java | 2 +- .../bukkit/residence/commands/shop.java | 3 + .../residence/containers/ConfigReader.java | 98 + .../bekvon/bukkit/residence/gui/FlagUtil.java | 15 +- .../listeners/ResidenceBlockListener.java | 30 + .../listeners/ResidenceEntityListener.java | 14 +- .../listeners/ResidencePlayerListener.java | 1 - .../residence/listeners/SpigotListener.java | 1 + .../residence/protection/FlagPermissions.java | 2 + .../bukkit/residence/text/Language.java | 18 +- src/plugin.yml | 2 +- 13 files changed, 1522 insertions(+), 1503 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/containers/ConfigReader.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index d629102da..c325c81b7 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -5,6 +5,7 @@ import org.bukkit.Location; import com.bekvon.bukkit.residence.containers.GuiItems; +import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.ParticleEffects; @@ -25,7 +26,6 @@ import java.util.Set; import org.bukkit.Material; import org.bukkit.World; -import org.bukkit.configuration.Configuration; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -192,10 +192,6 @@ public ConfigManager(FileConfiguration config, FileConfiguration flags, FileConf this.load(flags, groups); } - private synchronized static void copySetting(Configuration reader, Configuration writer, String path) { - writer.set(path, reader.get(path)); - } - public static String Colors(String text) { return ChatColor.translateAlternateColorCodes('&', text); } @@ -230,56 +226,6 @@ public void ChangeConfig(String path, Boolean stage) { Residence.getConfigManager().UpdateConfigFile(); } - public static List GetConfig(String path, List list, CommentedYamlConfiguration writer, YamlConfiguration conf) { - conf.addDefault(path, list); - copySetting(conf, writer, path); - return conf.getIntegerList(path); - } - - public static Boolean GetConfig(String path, Boolean text, CommentedYamlConfiguration writer, YamlConfiguration conf) { - conf.addDefault(path, text); - text = conf.getBoolean(path); - copySetting(conf, writer, path); - return text; - } - - public static int GetConfig(String path, int text, CommentedYamlConfiguration writer, YamlConfiguration conf) { - conf.addDefault(path, text); - text = conf.getInt(path); - copySetting(conf, writer, path); - return text; - } - - public static Double GetConfig(String path, Double text, CommentedYamlConfiguration writer, YamlConfiguration conf) { - conf.addDefault(path, text); - text = conf.getDouble(path); - copySetting(conf, writer, path); - return text; - } - - public static String GetConfig(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { - conf.addDefault(path, text); - text = conf.getString(path); - if (colorize) - text = Colors(text); - copySetting(conf, writer, path); - return text; - } - - public static List GetConfig(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { - conf.addDefault(path, text); - text = ColorsArray(conf.getStringList(path), colorize); - copySetting(conf, writer, path); - return text; - } - - public static List GetConfigInt(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf) { - conf.addDefault(path, text); - text = conf.getIntegerList(path); - copySetting(conf, writer, path); - return text; - } - public static List ColorsArray(List text, Boolean colorize) { List temp = new ArrayList(); for (String part : text) { @@ -378,94 +324,95 @@ public void UpdateConfigFile() { if (in == null) return; + String defaultWorldName = Bukkit.getServer().getWorlds().size() > 0 ? Bukkit.getServer().getWorlds().get(0).getName() : "World"; + YamlConfiguration conf = YamlConfiguration.loadConfiguration(in); CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); conf.options().copyDefaults(true); + ConfigReader c = new ConfigReader(conf, writer); - String defaultWorldName = Bukkit.getServer().getWorlds().size() > 0 ? Bukkit.getServer().getWorlds().get(0).getName() : "World"; - - writer.addComment("Global", "These are Global Settings for Residence."); + c.getW().addComment("Global", "These are Global Settings for Residence."); - writer.addComment("Global.UUIDConvertion", "Starts UUID conversion on plugin startup", "DONT change this if you are not sure what you doing"); - UUIDConvertion = GetConfig("Global.UUIDConvertion", true, writer, conf); + c.getW().addComment("Global.UUIDConvertion", "Starts UUID conversion on plugin startup", "DONT change this if you are not sure what you doing"); + UUIDConvertion = c.get("Global.UUIDConvertion", true); - writer.addComment("Global.OfflineMode", + c.getW().addComment("Global.OfflineMode", "If you running offline server, better to check this as true. This will help to solve issues with changing players UUID."); - OfflineMode = GetConfig("Global.OfflineMode", false, writer, conf); + OfflineMode = c.get("Global.OfflineMode", false); - writer.addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); - versionCheck = GetConfig("Global.versionCheck", true, writer, conf); + c.getW().addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); + versionCheck = c.get("Global.versionCheck", true); - writer.addComment("Global.Language", "This loads the .yml file in the Residence Language folder", + c.getW().addComment("Global.Language", "This loads the .yml file in the Residence Language folder", "All Residence text comes from this file. (NOT DONE YET)"); - language = GetConfig("Global.Language", "English", writer, conf, false); + language = c.get("Global.Language", "English", false); - writer.addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", + c.getW().addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); - selectionToolId = GetConfig("Global.SelectionToolId", Material.WOOD_AXE.getId(), writer, conf); + selectionToolId = c.get("Global.SelectionToolId", Material.WOOD_AXE.getId()); - writer.addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); - SelectionIgnoreY = GetConfig("Global.Selection.IgnoreY", false, writer, conf); - writer.addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", + c.getW().addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); + SelectionIgnoreY = c.get("Global.Selection.IgnoreY", false); + c.getW().addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", "This will lower residence price by up to 256 times, so ajust block price BEFORE enabling this"); - NoCostForYBlocks = GetConfig("Global.Selection.NoCostForYBlocks", false, writer, conf); + NoCostForYBlocks = c.get("Global.Selection.NoCostForYBlocks", false); - writer.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", + c.getW().addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", "Simply equip this tool and hit a location inside the residence and it will display the info for it."); - infoToolId = GetConfig("Global.InfoToolId", Material.STRING.getId(), writer, conf); + infoToolId = c.get("Global.InfoToolId", Material.STRING.getId()); - writer.addComment("Global.Optimizations.DefaultWorld", "Name of your main residence world. Usually normal starting world 'World'. Capitalization essential"); - DefaultWorld = GetConfig("Global.Optimizations.DefaultWorld", defaultWorldName, writer, conf, false); + c.getW().addComment("Global.Optimizations.DefaultWorld", "Name of your main residence world. Usually normal starting world 'World'. Capitalization essential"); + DefaultWorld = c.get("Global.Optimizations.DefaultWorld", defaultWorldName, false); - writer.addComment("Global.Optimizations.DisabledWorlds.List", "List Of Worlds where this plugin is disabled"); - DisabledWorldsList = GetConfig("Global.Optimizations.DisabledWorlds.List", new ArrayList(), writer, conf, false); + c.getW().addComment("Global.Optimizations.DisabledWorlds.List", "List Of Worlds where this plugin is disabled"); + DisabledWorldsList = c.get("Global.Optimizations.DisabledWorlds.List", new ArrayList()); - writer.addComment("Global.Optimizations.DisabledWorlds.DisableListeners", "Disables all listeners in included worlds"); - DisableListeners = GetConfig("Global.Optimizations.DisabledWorlds.DisableListeners", true, writer, conf); - writer.addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); - DisableCommands = GetConfig("Global.Optimizations.DisabledWorlds.DisableCommands", true, writer, conf); + c.getW().addComment("Global.Optimizations.DisabledWorlds.DisableListeners", "Disables all listeners in included worlds"); + DisableListeners = c.get("Global.Optimizations.DisabledWorlds.DisableListeners", true); + c.getW().addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); + DisableCommands = c.get("Global.Optimizations.DisabledWorlds.DisableCommands", true); - writer.addComment("Global.Optimizations.ResCreateCaseSensitive", + c.getW().addComment("Global.Optimizations.ResCreateCaseSensitive", "When its true you can create residences with similar names but different capitalization. An example: Village and village are counted as different residences", "When it's set to false you can't create residences with same names but different capitalizations"); - ResCreateCaseSensitive = GetConfig("Global.Optimizations.ResCreateCaseSensitive", false, writer, conf); + ResCreateCaseSensitive = c.get("Global.Optimizations.ResCreateCaseSensitive", false); - writer.addComment("Global.Optimizations.ResTpCaseSensitive", + c.getW().addComment("Global.Optimizations.ResTpCaseSensitive", "When this set to true, when you are performing /res tp command and providing residence name, it should be exactly same as residence name. So in example Village is not same as village", "When it's set to false you can teleport to residence with name Village even if you executing command /res tp village", "Don't disable this if you already have some duplicating residences in your database as this will prevent players from teleporting to one of them"); - ResTpCaseSensitive = GetConfig("Global.Optimizations.ResTpCaseSensitive", true, writer, conf); + ResTpCaseSensitive = c.get("Global.Optimizations.ResTpCaseSensitive", true); - writer.addComment("Global.Optimizations.BlockAnyTeleportation", + c.getW().addComment("Global.Optimizations.BlockAnyTeleportation", "When this set to true, any teleportation to residence where player dont have tp flag, action will be denyied", "This can prevent from teleporting players to residence with 3rd party plugins like esentials /tpa"); - BlockAnyTeleportation = GetConfig("Global.Optimizations.BlockAnyTeleportation", true, writer, conf); + BlockAnyTeleportation = c.get("Global.Optimizations.BlockAnyTeleportation", true); - writer.addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using", + c.getW().addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxResCount = GetConfig("Global.Optimizations.MaxResCount", 30, writer, conf); - writer.addComment("Global.Optimizations.MaxRentCount", "Set this as low as posible depending of residence.max.rents.[number] permission you are using", + MaxResCount = c.get("Global.Optimizations.MaxResCount", 30); + c.getW().addComment("Global.Optimizations.MaxRentCount", "Set this as low as posible depending of residence.max.rents.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxRentCount = GetConfig("Global.Optimizations.MaxRentCount", 10, writer, conf); - writer.addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using", + MaxRentCount = c.get("Global.Optimizations.MaxRentCount", 10); + c.getW().addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxSubzonesCount = GetConfig("Global.Optimizations.MaxSubzoneCount", 5, writer, conf); - writer.addComment("Global.Optimizations.OverridePvp", "By setting this to true, regular pvp flag will be acting as overridepvp flag", + MaxSubzonesCount = c.get("Global.Optimizations.MaxSubzoneCount", 5); + c.getW().addComment("Global.Optimizations.OverridePvp", "By setting this to true, regular pvp flag will be acting as overridepvp flag", "Overridepvp flag tries to ignore any pvp protection in that residence by any other plugin"); - OverridePvp = GetConfig("Global.Optimizations.OverridePvp", false, writer, conf); + OverridePvp = c.get("Global.Optimizations.OverridePvp", false); // residence kick location - writer.addComment("Global.Optimizations.KickLocation.Use", + c.getW().addComment("Global.Optimizations.KickLocation.Use", "By setting this to true, when player kicks another player from residence, he will be teleported to this location instead of getting outside residence"); - Boolean UseKick = GetConfig("Global.Optimizations.KickLocation.Use", false, writer, conf); - String KickLocationWorld = GetConfig("Global.Optimizations.KickLocation.World", defaultWorldName, writer, conf, false); - Double KickLocationX = GetConfig("Global.Optimizations.KickLocation.X", 0.5, writer, conf); - Double KickLocationY = GetConfig("Global.Optimizations.KickLocation.Y", 63.0, writer, conf); - Double KickLocationZ = GetConfig("Global.Optimizations.KickLocation.Z", 0.5, writer, conf); - writer.addComment("Global.Optimizations.KickLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); - Double KickPitch = GetConfig("Global.Optimizations.KickLocation.Pitch", 0.0, writer, conf); - writer.addComment("Global.Optimizations.KickLocation.Yaw", "Head position to left and right. Range from -180 to 180"); - Double KickYaw = GetConfig("Global.Optimizations.KickLocation.Yaw", 0.0, writer, conf); + Boolean UseKick = c.get("Global.Optimizations.KickLocation.Use", false); + String KickLocationWorld = c.get("Global.Optimizations.KickLocation.World", defaultWorldName, false); + Double KickLocationX = c.get("Global.Optimizations.KickLocation.X", 0.5); + Double KickLocationY = c.get("Global.Optimizations.KickLocation.Y", 63.0); + Double KickLocationZ = c.get("Global.Optimizations.KickLocation.Z", 0.5); + c.getW().addComment("Global.Optimizations.KickLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); + Double KickPitch = c.get("Global.Optimizations.KickLocation.Pitch", 0.0); + c.getW().addComment("Global.Optimizations.KickLocation.Yaw", "Head position to left and right. Range from -180 to 180"); + Double KickYaw = c.get("Global.Optimizations.KickLocation.Yaw", 0.0); if (UseKick) { World world = Bukkit.getWorld(KickLocationWorld); if (world != null) { @@ -475,39 +422,39 @@ public void UpdateConfigFile() { } } - writer.addComment("Global.Optimizations.ShortInfo.Use", + c.getW().addComment("Global.Optimizations.ShortInfo.Use", "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); - ShortInfoUse = GetConfig("Global.Optimizations.ShortInfo.Use", false, writer, conf); + ShortInfoUse = c.get("Global.Optimizations.ShortInfo.Use", false); // Vote range - writer.addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); - VoteRangeFrom = GetConfig("Global.Optimizations.Vote.RangeFrom", 0, writer, conf); - VoteRangeTo = GetConfig("Global.Optimizations.Vote.RangeTo", 10, writer, conf); + c.getW().addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); + VoteRangeFrom = c.get("Global.Optimizations.Vote.RangeFrom", 0); + VoteRangeTo = c.get("Global.Optimizations.Vote.RangeTo", 10); - writer.addComment("Global.Optimizations.Vote.OnlyLike", "If this true, players can onli give like for shop instead of point voting"); - OnlyLike = GetConfig("Global.Optimizations.Vote.OnlyLike", false, writer, conf); + c.getW().addComment("Global.Optimizations.Vote.OnlyLike", "If this true, players can onli give like for shop instead of point voting"); + OnlyLike = c.get("Global.Optimizations.Vote.OnlyLike", false); // Healing/Feed interval - writer.addComment("Global.Optimizations.Intervals.Heal", "How often in seconds to heal/feed players in residence with appropriate flag", + c.getW().addComment("Global.Optimizations.Intervals.Heal", "How often in seconds to heal/feed players in residence with appropriate flag", "Bigger numbers can save some resources"); - HealInterval = GetConfig("Global.Optimizations.Intervals.Heal", 1, writer, conf); - FeedInterval = GetConfig("Global.Optimizations.Intervals.Feed", 5, writer, conf); + HealInterval = c.get("Global.Optimizations.Intervals.Heal", 1); + FeedInterval = c.get("Global.Optimizations.Intervals.Feed", 5); // negative potion effect list - writer.addComment("Global.Optimizations.NegativePotionEffects", + c.getW().addComment("Global.Optimizations.NegativePotionEffects", "Potions containing one of thos effects will be ignored if residence dont have pvp true flag set"); - NegativePotionEffects = GetConfig("Global.Optimizations.NegativePotionEffects", Arrays.asList("blindness", "confusion", "harm", "hunger", "poison", "slow", - "slow_digging", "weakness", "wither"), writer, conf, false); + NegativePotionEffects = c.get("Global.Optimizations.NegativePotionEffects", Arrays.asList("blindness", "confusion", "harm", "hunger", "poison", "slow", + "slow_digging", "weakness", "wither")); - NegativeLingeringPotionEffects = GetConfig("Global.Optimizations.NegativeLingeringPotions", Arrays.asList("slowness", "instant_damage", "poison", "slowness"), - writer, conf, false); + NegativeLingeringPotionEffects = c.get("Global.Optimizations.NegativeLingeringPotions", Arrays.asList("slowness", "instant_damage", "poison", + "slowness")); - writer.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", + c.getW().addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); - minMoveUpdate = GetConfig("Global.MoveCheckInterval", 500, writer, conf); + minMoveUpdate = c.get("Global.MoveCheckInterval", 500); - writer.addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); - TeleportDelay = GetConfig("Global.Tp.TeleportDelay", 3, writer, conf); + c.getW().addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); + TeleportDelay = c.get("Global.Tp.TeleportDelay", 3); if (conf.contains("Global.RandomTeleportation.WorldName")) { @@ -521,370 +468,371 @@ public void UpdateConfigFile() { RTeleport.add(new RandomTeleport(WorldName, MaxCoord, MinCord, CenterX, CenterZ)); - GetConfig("Global.RandomTeleportation." + WorldName + ".MaxCord", MaxCoord, writer, conf); - GetConfig("Global.RandomTeleportation." + WorldName + ".MinCord", MinCord, writer, conf); - GetConfig("Global.RandomTeleportation." + WorldName + ".CenterX", CenterX, writer, conf); - GetConfig("Global.RandomTeleportation." + WorldName + ".CenterZ", CenterZ, writer, conf); + c.get("Global.RandomTeleportation." + WorldName + ".MaxCord", MaxCoord); + c.get("Global.RandomTeleportation." + WorldName + ".MinCord", MinCord); + c.get("Global.RandomTeleportation." + WorldName + ".CenterX", CenterX); + c.get("Global.RandomTeleportation." + WorldName + ".CenterZ", CenterZ); } else { if (conf.isConfigurationSection("Global.RandomTeleportation")) for (String one : conf.getConfigurationSection("Global.RandomTeleportation").getKeys(false)) { String path = "Global.RandomTeleportation." + one + "."; - writer.addComment("Global.RandomTeleportation." + one, + c.getW().addComment("Global.RandomTeleportation." + one, "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); - writer.addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); - int MaxCoord = GetConfig(path + "MaxCoord", 1000, writer, conf); - writer.addComment(path + "MinCord", + c.getW().addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); + int MaxCoord = c.get(path + "MaxCoord", 1000); + c.getW().addComment(path + "MinCord", "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); - int MinCord = GetConfig(path + "MinCord", 500, writer, conf); - int CenterX = GetConfig(path + "CenterX", 0, writer, conf); - int CenterZ = GetConfig(path + "CenterZ", 0, writer, conf); + int MinCord = c.get(path + "MinCord", 500); + int CenterX = c.get(path + "CenterX", 0); + int CenterZ = c.get(path + "CenterZ", 0); RTeleport.add(new RandomTeleport(one, MaxCoord, MinCord, CenterX, CenterZ)); } else { String path = "Global.RandomTeleportation." + defaultWorldName + "."; - writer.addComment(path + "WorldName", "World to use this function, set main residence world"); - String WorldName = GetConfig(path + "WorldName", defaultWorldName, writer, conf, false); + c.getW().addComment(path + "WorldName", "World to use this function, set main residence world"); + String WorldName = c.get(path + "WorldName", defaultWorldName, true); - writer.addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); - int MaxCoord = GetConfig(path + "MaxCoord", 1000, writer, conf); - writer.addComment(path + "MinCord", + c.getW().addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); + int MaxCoord = c.get(path + "MaxCoord", 1000); + c.getW().addComment(path + "MinCord", "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); - int MinCord = GetConfig(path + "MinCord", 500, writer, conf); - int CenterX = GetConfig(path + "CenterX", 0, writer, conf); - int CenterZ = GetConfig(path + "CenterZ", 0, writer, conf); + int MinCord = c.get(path + "MinCord", 500); + int CenterX = c.get(path + "CenterX", 0); + int CenterZ = c.get(path + "CenterZ", 0); RTeleport.add(new RandomTeleport(WorldName, MaxCoord, MinCord, CenterX, CenterZ)); } } - writer.addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); - rtCooldown = GetConfig("Global.RandomTeleportation.Cooldown", 5, writer, conf); + c.getW().addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); + rtCooldown = c.get("Global.RandomTeleportation.Cooldown", 5); - writer.addComment("Global.RandomTeleportation.MaxTries", "How many times to try find correct location for teleportation.", + c.getW().addComment("Global.RandomTeleportation.MaxTries", "How many times to try find correct location for teleportation.", "Keep it at low number, as player always can try again after delay"); - rtMaxTries = GetConfig("Global.RandomTeleportation.MaxTries", 20, writer, conf); + rtMaxTries = c.get("Global.RandomTeleportation.MaxTries", 20); - writer.addComment("Global.Size.MinimalSize", "Minimal size of residence in blocks", "1000 is 10x10x10 residence size"); - MinimalResSize = GetConfig("Global.Size.MinimalSize", 100, writer, conf); - MinimalResX = GetConfig("Global.Size.MinimalX", 10, writer, conf); - MinimalResY = GetConfig("Global.Size.MinimalY", 10, writer, conf); - MinimalResZ = GetConfig("Global.Size.MinimalZ", 10, writer, conf); + c.getW().addComment("Global.Size.MinimalSize", "Minimal size of residence in blocks", "1000 is 10x10x10 residence size"); + MinimalResSize = c.get("Global.Size.MinimalSize", 100); + MinimalResX = c.get("Global.Size.MinimalX", 10); + MinimalResY = c.get("Global.Size.MinimalY", 10); + MinimalResZ = c.get("Global.Size.MinimalZ", 10); - writer.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); - autoSaveInt = GetConfig("Global.SaveInterval", 10, writer, conf); + c.getW().addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); + autoSaveInt = c.get("Global.SaveInterval", 10); // Auto remove old residences - writer.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", + c.getW().addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", "Players can bypass this wih residence.cleanbypass permission node"); - AutoCleanUp = GetConfig("Global.AutoCleanUp.Use", false, writer, conf); - writer.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); - AutoCleanUpDays = GetConfig("Global.AutoCleanUp.Days", 60, writer, conf); - writer.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); - AutoCleanUpWorlds = GetConfig("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); + c.getW().addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); + AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); + c.getW().addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); + AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); - writer.addComment("Global.LWC.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", + c.getW().addComment("Global.LWC.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", "Players can bypass this wih residence.cleanbypass permission node"); - AutoCleanUp = GetConfig("Global.AutoCleanUp.Use", false, writer, conf); - writer.addComment("Global.LWC.Days", "For how long player should be offline to delete hes LWC protection on residence removal"); - AutoCleanUpDays = GetConfig("Global.AutoCleanUp.Days", 60, writer, conf); - writer.addComment("Global.LWC.Worlds", "Worlds to be included in check list"); - AutoCleanUpWorlds = GetConfig("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); + c.getW().addComment("Global.LWC.Days", "For how long player should be offline to delete hes LWC protection on residence removal"); + AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); + c.getW().addComment("Global.LWC.Worlds", "Worlds to be included in check list"); + AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); // TNT explosions below 63 - writer.addComment("Global.AntiGreef.TNT.ExplodeBelow", + c.getW().addComment("Global.AntiGreef.TNT.ExplodeBelow", "When set to true will allow tnt and minecart with tnt to explode below 62 (default) level outside of residence", "This will allow mining with tnt and more vanilla play"); - TNTExplodeBelow = GetConfig("Global.AntiGreef.TNT.ExplodeBelow", false, writer, conf); - TNTExplodeBelowLevel = GetConfig("Global.AntiGreef.TNT.level", 62, writer, conf); + TNTExplodeBelow = c.get("Global.AntiGreef.TNT.ExplodeBelow", false); + TNTExplodeBelowLevel = c.get("Global.AntiGreef.TNT.level", 62); // Creeper explosions below 63 - writer.addComment("Global.AntiGreef.Creeper.ExplodeBelow", "When set to true will allow Creeper explode below 62 (default) level outside of residence", + c.getW().addComment("Global.AntiGreef.Creeper.ExplodeBelow", "When set to true will allow Creeper explode below 62 (default) level outside of residence", "This will give more realistic game play"); - CreeperExplodeBelow = GetConfig("Global.AntiGreef.Creeper.ExplodeBelow", false, writer, conf); - CreeperExplodeBelowLevel = GetConfig("Global.AntiGreef.Creeper.level", 62, writer, conf); + CreeperExplodeBelow = c.get("Global.AntiGreef.Creeper.ExplodeBelow", false); + CreeperExplodeBelowLevel = c.get("Global.AntiGreef.Creeper.level", 62); // Flow - writer.addComment("Global.AntiGreef.Flow.Level", "Level from witch one to start lava and water flow blocking", "This dont have effect in residence area"); - FlowLevel = GetConfig("Global.AntiGreef.Flow.Level", 63, writer, conf); - writer.addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); - NoLava = GetConfig("Global.AntiGreef.Flow.NoLavaFlow", true, writer, conf); - writer.addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); - NoWater = GetConfig("Global.AntiGreef.Flow.NoWaterFlow", true, writer, conf); - NoFlowWorlds = GetConfig("Global.AntiGreef.Flow.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + c.getW().addComment("Global.AntiGreef.Flow.Level", "Level from witch one to start lava and water flow blocking", "This dont have effect in residence area"); + FlowLevel = c.get("Global.AntiGreef.Flow.Level", 63); + c.getW().addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); + NoLava = c.get("Global.AntiGreef.Flow.NoLavaFlow", true); + c.getW().addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); + NoWater = c.get("Global.AntiGreef.Flow.NoWaterFlow", true); + NoFlowWorlds = c.get("Global.AntiGreef.Flow.Worlds", Arrays.asList(defaultWorldName)); // Place - writer.addComment("Global.AntiGreef.Place.Level", "Level from witch one to start block lava and water place", "This don't have effect in residence area"); - PlaceLevel = GetConfig("Global.AntiGreef.Place.Level", 63, writer, conf); - writer.addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); - NoLavaPlace = GetConfig("Global.AntiGreef.Place.NoLavaPlace", true, writer, conf); - writer.addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, playrs cant place water outside residence"); - NoWaterPlace = GetConfig("Global.AntiGreef.Place.NoWaterPlace", true, writer, conf); - NoPlaceWorlds = GetConfig("Global.AntiGreef.Place.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + c.getW().addComment("Global.AntiGreef.Place.Level", "Level from witch one to start block lava and water place", "This don't have effect in residence area"); + PlaceLevel = c.get("Global.AntiGreef.Place.Level", 63); + c.getW().addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); + NoLavaPlace = c.get("Global.AntiGreef.Place.NoLavaPlace", true); + c.getW().addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, playrs cant place water outside residence"); + NoWaterPlace = c.get("Global.AntiGreef.Place.NoWaterPlace", true); + NoPlaceWorlds = c.get("Global.AntiGreef.Place.Worlds", Arrays.asList(defaultWorldName)); // Sand fall - writer.addComment("Global.AntiGreef.BlockFall.Use", "With this set to true, falling blocks will be deleted if they will land in different area"); - useBlockFall = GetConfig("Global.AntiGreef.BlockFall.Use", true, writer, conf); - writer.addComment("Global.AntiGreef.BlockFall.Level", "Level from witch one to start block block's fall", "This don't have effect in residence area or outside"); - BlockFallLevel = GetConfig("Global.AntiGreef.BlockFall.Level", 62, writer, conf); - BlockFallWorlds = GetConfig("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); + c.getW().addComment("Global.AntiGreef.BlockFall.Use", "With this set to true, falling blocks will be deleted if they will land in different area"); + useBlockFall = c.get("Global.AntiGreef.BlockFall.Use", true); + c.getW().addComment("Global.AntiGreef.BlockFall.Level", "Level from witch one to start block block's fall", + "This don't have effect in residence area or outside"); + BlockFallLevel = c.get("Global.AntiGreef.BlockFall.Level", 62); + BlockFallWorlds = c.get("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName)); // Res cleaning - writer.addComment("Global.AntiGreef.ResCleaning.Use", + c.getW().addComment("Global.AntiGreef.ResCleaning.Use", "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", "Effective way to prevent residence creating near greefing target and then remove it"); - UseClean = GetConfig("Global.AntiGreef.ResCleaning.Use", true, writer, conf); - writer.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); - CleanLevel = GetConfig("Global.AntiGreef.ResCleaning.Level", 63, writer, conf); - writer.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); - CleanBlocks = GetConfigInt("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11), writer, conf); - CleanWorlds = GetConfig("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName), writer, conf, false); - - writer.addComment("Global.AntiGreef.Flags.Prevent", + UseClean = c.get("Global.AntiGreef.ResCleaning.Use", true); + c.getW().addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); + CleanLevel = c.get("Global.AntiGreef.ResCleaning.Level", 63); + c.getW().addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); + CleanBlocks = c.getIntList("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11)); + CleanWorlds = c.get("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName)); + + c.getW().addComment("Global.AntiGreef.Flags.Prevent", "By setting this to true flags from list will be protected from change while there is some one inside residence besides owner", "Protects in example from people inviting some one and changing pvp flag to true to kill them"); - PvPFlagPrevent = GetConfig("Global.AntiGreef.Flags.Prevent", true, writer, conf); - FlagsList = GetConfig("Global.AntiGreef.Flags.list", Arrays.asList("pvp"), writer, conf, false); + PvPFlagPrevent = c.get("Global.AntiGreef.Flags.Prevent", true); + FlagsList = c.get("Global.AntiGreef.Flags.list", Arrays.asList("pvp")); - writer.addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); - defaultGroup = GetConfig("Global.DefaultGroup", "default", writer, conf, false); + c.getW().addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); + defaultGroup = c.get("Global.DefaultGroup", "default"); - writer.addComment("Global.UseLeaseSystem", "Enable / Disable the Lease System."); - useLeases = GetConfig("Global.UseLeaseSystem", false, writer, conf); + c.getW().addComment("Global.UseLeaseSystem", "Enable / Disable the Lease System."); + useLeases = c.get("Global.UseLeaseSystem", false); - writer.addComment("Global.DateFormat", "Sets date format when shown in example lease or rent expire date", + c.getW().addComment("Global.DateFormat", "Sets date format when shown in example lease or rent expire date", "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); - DateFormat = GetConfig("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz", writer, conf, false); + DateFormat = c.get("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz"); - writer.addComment("Global.TimeZone", "Sets time zone for showing date, usefull when server is in different country then main server player base", + c.getW().addComment("Global.TimeZone", "Sets time zone for showing date, usefull when server is in different country then main server player base", "Full list of posible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); - TimeZone = GetConfig("Global.TimeZone", Calendar.getInstance().getTimeZone().getID(), writer, conf, false); + TimeZone = c.get("Global.TimeZone", Calendar.getInstance().getTimeZone().getID()); - writer.addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); - ResMoneyBack = GetConfig("Global.ResMoneyBack", false, writer, conf); + c.getW().addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); + ResMoneyBack = c.get("Global.ResMoneyBack", false); - writer.addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); - leaseCheckInterval = GetConfig("Global.LeaseCheckInterval", 10, writer, conf); + c.getW().addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); + leaseCheckInterval = c.get("Global.LeaseCheckInterval", 10); - writer.addComment("Global.LeaseAutoRenew", + c.getW().addComment("Global.LeaseAutoRenew", "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); - leaseAutoRenew = GetConfig("Global.LeaseAutoRenew", true, writer, conf); + leaseAutoRenew = c.get("Global.LeaseAutoRenew", true); - writer.addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); - GetConfig("Global.EnablePermissions", true, writer, conf); + c.getW().addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); + c.get("Global.EnablePermissions", true); - writer.addComment("Global.LegacyPermissions", "Set to true if NOT using Permissions or PermissionsBukkit, or using a really old version of Permissions"); - legacyperms = GetConfig("Global.LegacyPermissions", false, writer, conf); + c.getW().addComment("Global.LegacyPermissions", "Set to true if NOT using Permissions or PermissionsBukkit, or using a really old version of Permissions"); + legacyperms = c.get("Global.LegacyPermissions", false); - writer.addComment("Global.EnableEconomy", + c.getW().addComment("Global.EnableEconomy", "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); - enableEconomy = GetConfig("Global.EnableEconomy", true, writer, conf); + enableEconomy = c.get("Global.EnableEconomy", true); - writer.addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); - enableRentSystem = GetConfig("Global.EnableRentSystem", true, writer, conf); + c.getW().addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); + enableRentSystem = c.get("Global.EnableRentSystem", true); - writer.addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); - rentCheckInterval = GetConfig("Global.RentCheckInterval", 10, writer, conf); + c.getW().addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); + rentCheckInterval = c.get("Global.RentCheckInterval", 10); - writer.addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); - chatEnable = GetConfig("Global.ResidenceChatEnable", true, writer, conf); + c.getW().addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); + chatEnable = c.get("Global.ResidenceChatEnable", true); - writer.addComment("Global.ActionBar.General", "True for ActionBar - new component in 1.8", "False for old Messaging in chat enter/leave Residence messages"); - actionBar = GetConfig("Global.ActionBar.General", true, writer, conf); - ActionBarOnSelection = GetConfig("Global.ActionBar.ShowOnSelection", true, writer, conf); + c.getW().addComment("Global.ActionBar.General", "True for ActionBar - new component in 1.8", "False for old Messaging in chat enter/leave Residence messages"); + actionBar = c.get("Global.ActionBar.General", true); + ActionBarOnSelection = c.get("Global.ActionBar.ShowOnSelection", true); - writer.addComment("Global.ResidenceChatColor", "Color of residence chat."); + c.getW().addComment("Global.ResidenceChatColor", "Color of residence chat."); try { - chatColor = ChatColor.valueOf(GetConfig("Global.ResidenceChatColor", "DARK_PURPLE", writer, conf, true)); + chatColor = ChatColor.valueOf(c.get("Global.ResidenceChatColor", "DARK_PURPLE", true)); } catch (Exception ex) { chatColor = ChatColor.DARK_PURPLE; } - writer.addComment("Global.ResidenceChatPrefixLenght", "Max lenght of residence chat prefix including color codes"); - chatPrefixLength = GetConfig("Global.ResidenceChatPrefixLength", 16, writer, conf); + c.getW().addComment("Global.ResidenceChatPrefixLenght", "Max lenght of residence chat prefix including color codes"); + chatPrefixLength = c.get("Global.ResidenceChatPrefixLength", 16); - writer.addComment("Global.AdminOnlyCommands", + c.getW().addComment("Global.AdminOnlyCommands", "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); - adminsOnly = GetConfig("Global.AdminOnlyCommands", false, writer, conf); + adminsOnly = c.get("Global.AdminOnlyCommands", false); - writer.addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); - adminOps = GetConfig("Global.AdminOPs", true, writer, conf); + c.getW().addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); + adminOps = c.get("Global.AdminOPs", true); - writer.addComment("Global.AdminFullAccess", + c.getW().addComment("Global.AdminFullAccess", "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); - AdminFullAccess = GetConfig("Global.AdminFullAccess", false, writer, conf); + AdminFullAccess = c.get("Global.AdminFullAccess", false); - writer.addComment("Global.MultiWorldPlugin", + c.getW().addComment("Global.MultiWorldPlugin", "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); - multiworldPlugin = GetConfig("Global.MultiWorldPlugin", "Multiverse-Core", writer, conf, false); + multiworldPlugin = c.get("Global.MultiWorldPlugin", "Multiverse-Core"); - writer.addComment("Global.ResidenceFlagsInherit", "Setting this to true causes subzones to inherit flags from their parent zones."); - flagsInherit = GetConfig("Global.ResidenceFlagsInherit", true, writer, conf); + c.getW().addComment("Global.ResidenceFlagsInherit", "Setting this to true causes subzones to inherit flags from their parent zones."); + flagsInherit = c.get("Global.ResidenceFlagsInherit", true); - writer.addComment("Global.PreventRentModify", "Setting this to false will allow rented residences to be modified by the renting player."); - preventBuildInRent = GetConfig("Global.PreventRentModify", true, writer, conf); + c.getW().addComment("Global.PreventRentModify", "Setting this to false will allow rented residences to be modified by the renting player."); + preventBuildInRent = c.get("Global.PreventRentModify", true); - writer.addComment("Global.PreventSubZoneRemoval", "Setting this to true will prevent subzone deletion when subzone owner is not same as parent zone owner."); - PreventSubZoneRemoval = GetConfig("Global.PreventSubZoneRemoval", true, writer, conf); + c.getW().addComment("Global.PreventSubZoneRemoval", "Setting this to true will prevent subzone deletion when subzone owner is not same as parent zone owner."); + PreventSubZoneRemoval = c.get("Global.PreventSubZoneRemoval", true); - writer.addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); - stopOnSaveError = GetConfig("Global.StopOnSaveFault", true, writer, conf); + c.getW().addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); + stopOnSaveError = c.get("Global.StopOnSaveFault", true); - writer.addComment( + c.getW().addComment( "This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); - namefix = GetConfig("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]", writer, conf, false); + namefix = c.get("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]"); - writer.addComment("Global.ShowIntervalMessages", + c.getW().addComment("Global.ShowIntervalMessages", "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); - showIntervalMessages = GetConfig("Global.ShowIntervalMessages", false, writer, conf); + showIntervalMessages = c.get("Global.ShowIntervalMessages", false); - writer.addComment("Global.ShowNoobMessage", "Setting this to true sends a tutorial message to the new player when he places chest on ground."); - ShowNoobMessage = GetConfig("Global.ShowNoobMessage", true, writer, conf); + c.getW().addComment("Global.ShowNoobMessage", "Setting this to true sends a tutorial message to the new player when he places chest on ground."); + ShowNoobMessage = c.get("Global.ShowNoobMessage", true); - writer.addComment("Global.NewPlayer", "Setting this to true creates residence around players placed chest if he don't have any.", + c.getW().addComment("Global.NewPlayer", "Setting this to true creates residence around players placed chest if he don't have any.", "Only once every server restart if he still don't have any residence"); - NewPlayerUse = GetConfig("Global.NewPlayer.Use", false, writer, conf); - writer.addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", + NewPlayerUse = c.get("Global.NewPlayer.Use", false); + c.getW().addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", "By setting to false, money will be taken from player, if he has them"); - NewPlayerFree = GetConfig("Global.NewPlayer.Free", true, writer, conf); - writer.addComment("Global.NewPlayer.Range", "Range from placed chest o both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide"); - NewPlayerRangeX = GetConfig("Global.NewPlayer.Range.X", 5, writer, conf); - NewPlayerRangeY = GetConfig("Global.NewPlayer.Range.Y", 5, writer, conf); - NewPlayerRangeZ = GetConfig("Global.NewPlayer.Range.Z", 5, writer, conf); + NewPlayerFree = c.get("Global.NewPlayer.Free", true); + c.getW().addComment("Global.NewPlayer.Range", "Range from placed chest o both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide"); + NewPlayerRangeX = c.get("Global.NewPlayer.Range.X", 5); + NewPlayerRangeY = c.get("Global.NewPlayer.Range.Y", 5); + NewPlayerRangeZ = c.get("Global.NewPlayer.Range.Z", 5); - writer.addComment("Global.CustomContainers", + c.getW().addComment("Global.CustomContainers", "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); - customContainers = GetConfig("Global.CustomContainers", new ArrayList(), writer, conf); - customBothClick = GetConfig("Global.CustomBothClick", new ArrayList(), writer, conf); - customRightClick = GetConfig("Global.CustomRightClick", new ArrayList(), writer, conf); + customContainers = c.getIntList("Global.CustomContainers", new ArrayList()); + customBothClick = c.getIntList("Global.CustomBothClick", new ArrayList()); + customRightClick = c.getIntList("Global.CustomRightClick", new ArrayList()); - writer.addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundries"); - useVisualizer = GetConfig("Global.Visualizer.Use", true, writer, conf); - writer.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", + c.getW().addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundries"); + useVisualizer = c.get("Global.Visualizer.Use", true); + c.getW().addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", "Keep it no more as 30, as player cant see more than 16 blocks"); - VisualizerRange = GetConfig("Global.Visualizer.Range", 16, writer, conf); - writer.addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); - VisualizerShowFor = GetConfig("Global.Visualizer.ShowFor", 5000, writer, conf); - writer.addComment("Global.Visualizer.updateInterval", "How often in miliseconds update particles for player"); - VisualizerUpdateInterval = GetConfig("Global.Visualizer.updateInterval", 20, writer, conf); - writer.addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); - VisualizerRowSpacing = GetConfig("Global.Visualizer.RowSpacing", 2, writer, conf); + VisualizerRange = c.get("Global.Visualizer.Range", 16); + c.getW().addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); + VisualizerShowFor = c.get("Global.Visualizer.ShowFor", 5000); + c.getW().addComment("Global.Visualizer.updateInterval", "How often in miliseconds update particles for player"); + VisualizerUpdateInterval = c.get("Global.Visualizer.updateInterval", 20); + c.getW().addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); + VisualizerRowSpacing = c.get("Global.Visualizer.RowSpacing", 2); if (VisualizerRowSpacing < 1) VisualizerRowSpacing = 1; - writer.addComment("Global.Visualizer.CollumnSpacing", "Spacing in blocks between particle effects for collums"); - VisualizerCollumnSpacing = GetConfig("Global.Visualizer.CollumnSpacing", 2, writer, conf); + c.getW().addComment("Global.Visualizer.CollumnSpacing", "Spacing in blocks between particle effects for collums"); + VisualizerCollumnSpacing = c.get("Global.Visualizer.CollumnSpacing", 2); if (VisualizerCollumnSpacing < 1) VisualizerCollumnSpacing = 1; - writer.addComment("Global.Visualizer.Selected", + c.getW().addComment("Global.Visualizer.Selected", "Particle effect names. Posible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance"); - SelectedFrame = ParticleEffects.fromName(GetConfig("Global.Visualizer.Selected.Frame", "happyVillager", writer, conf, false)); + SelectedFrame = ParticleEffects.fromName(c.get("Global.Visualizer.Selected.Frame", "happyVillager")); if (SelectedFrame == null) { SelectedFrame = ParticleEffects.VILLAGER_HAPPY; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } - SelectedSides = ParticleEffects.fromName(GetConfig("Global.Visualizer.Selected.Sides", "reddust", writer, conf, false)); + SelectedSides = ParticleEffects.fromName(c.get("Global.Visualizer.Selected.Sides", "reddust")); if (SelectedSides == null) { SelectedSides = ParticleEffects.REDSTONE; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } - OverlapFrame = ParticleEffects.fromName(GetConfig("Global.Visualizer.Overlap.Frame", "FLAME", writer, conf, false)); + OverlapFrame = ParticleEffects.fromName(c.get("Global.Visualizer.Overlap.Frame", "FLAME")); if (OverlapFrame == null) { OverlapFrame = ParticleEffects.FLAME; Bukkit.getConsoleSender().sendMessage("Can't find effect for Overlap Frame with this name, it was set to default"); } - OverlapSides = ParticleEffects.fromName(GetConfig("Global.Visualizer.Overlap.Sides", "FLAME", writer, conf, false)); + OverlapSides = ParticleEffects.fromName(c.get("Global.Visualizer.Overlap.Sides", "FLAME")); if (OverlapSides == null) { OverlapSides = ParticleEffects.FLAME; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } - writer.addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); - BounceAnimation = GetConfig("Global.BounceAnimation", true, writer, conf); + c.getW().addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); + BounceAnimation = c.get("Global.BounceAnimation", true); - writer.addComment("Global.GUI.Enabled", "Enable or disable flag GUI"); - useFlagGUI = GetConfig("Global.GUI.Enabled", true, writer, conf); + c.getW().addComment("Global.GUI.Enabled", "Enable or disable flag GUI"); + useFlagGUI = c.get("Global.GUI.Enabled", true); - writer.addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); + c.getW().addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); - int id = GetConfig("Global.GUI.setTrue.Id", 35, writer, conf); - int data = GetConfig("Global.GUI.setTrue.Data", 13, writer, conf); + int id = c.get("Global.GUI.setTrue.Id", 35); + int data = c.get("Global.GUI.setTrue.Data", 13); Material Mat = Material.getMaterial(id); if (Mat == null) Mat = Material.STONE; GuiTrue = new ItemStack(Mat, 1, (short) data); - writer.addComment("Global.GUI.setFalse", "Item id and data to use when flag is set to false"); - id = GetConfig("Global.GUI.setFalse.Id", 35, writer, conf); - data = GetConfig("Global.GUI.setFalse.Data", 14, writer, conf); + c.getW().addComment("Global.GUI.setFalse", "Item id and data to use when flag is set to false"); + id = c.get("Global.GUI.setFalse.Id", 35); + data = c.get("Global.GUI.setFalse.Data", 14); Mat = Material.getMaterial(id); if (Mat == null) Mat = Material.STONE; GuiFalse = new ItemStack(Mat, 1, (short) data); - writer.addComment("Global.GUI.setRemove", "Item id and data to use when flag is set to remove"); - id = GetConfig("Global.GUI.setRemove.Id", 35, writer, conf); - data = GetConfig("Global.GUI.setRemove.Data", 8, writer, conf); + c.getW().addComment("Global.GUI.setRemove", "Item id and data to use when flag is set to remove"); + id = c.get("Global.GUI.setRemove.Id", 35); + data = c.get("Global.GUI.setRemove.Data", 8); Mat = Material.getMaterial(id); if (Mat == null) Mat = Material.STONE; GuiRemove = new ItemStack(Mat, 1, (short) data); - writer.addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", + c.getW().addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", "This is quite heavy on server side, so enable only if you really need this feature"); - AutoMobRemoval = GetConfig("Global.AutoMobRemoval.Use", false, writer, conf); - writer.addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); - AutoMobRemovalInterval = GetConfig("Global.AutoMobRemoval.Interval", 3, writer, conf); + AutoMobRemoval = c.get("Global.AutoMobRemoval.Use", false); + c.getW().addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); + AutoMobRemovalInterval = c.get("Global.AutoMobRemoval.Interval", 3); - enforceAreaInsideArea = GetConfig("Global.EnforceAreaInsideArea", false, writer, conf); - spoutEnable = GetConfig("Global.EnableSpout", false, writer, conf); - enableLeaseMoneyAccount = GetConfig("Global.EnableLeaseMoneyAccount", true, writer, conf); + enforceAreaInsideArea = c.get("Global.EnforceAreaInsideArea", false); + spoutEnable = c.get("Global.EnableSpout", false); + enableLeaseMoneyAccount = c.get("Global.EnableLeaseMoneyAccount", true); - writer.addComment("Global.CouldronCompatability", + c.getW().addComment("Global.CouldronCompatability", "By setting this to true, partial compatability for kCouldron servers will be anabled. Action bar messages and selection visualizer will be disabled automaticaly as off incorrect compatability"); - CouldronCompatability = GetConfig("Global.CouldronCompatability", false, writer, conf); + CouldronCompatability = c.get("Global.CouldronCompatability", false); if (CouldronCompatability) { useVisualizer = false; actionBar = false; ActionBarOnSelection = false; } - writer.addComment("DynMap.Use", "Enables or disable DynMap Support"); - DynMapUse = GetConfig("DynMap.Use", false, writer, conf); - - writer.addComment("DynMap.Layer.3dRegions", "Enables 3D zones"); - DynMapLayer3dRegions = GetConfig("DynMap.Layer.3dRegions", true, writer, conf); - writer.addComment("DynMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); - DynMapLayerSubZoneDepth = GetConfig("DynMap.Layer.SubZoneDepth", 2, writer, conf); - - writer.addComment("DynMap.Border.Color", "Color of border. Pick color for this page http://www.w3schools.com/colors/colors_picker.asp"); - DynMapBorderColor = GetConfig("DynMap.Border.Color", "#FF0000", writer, conf, false); - writer.addComment("DynMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); - DynMapBorderOpacity = GetConfig("DynMap.Border.Opacity", 0.3, writer, conf); - writer.addComment("DynMap.Border.Weight", "Border thickness"); - DynMapBorderWeight = GetConfig("DynMap.Border.Weight", 3, writer, conf); - DynMapFillOpacity = GetConfig("DynMap.Fill.Opacity", 0.3, writer, conf); - DynMapFillColor = GetConfig("DynMap.Fill.Color", "#FFFF00", writer, conf, false); - DynMapFillForRent = GetConfig("DynMap.Fill.ForRent", "#33cc33", writer, conf, false); - DynMapFillRented = GetConfig("DynMap.Fill.Rented", "#99ff33", writer, conf, false); - DynMapFillForSale = GetConfig("DynMap.Fill.ForSale", "#0066ff", writer, conf, false); - - writer.addComment("DynMap.VisibleRegions", "Shows only regions on this list"); - DynMapVisibleRegions = GetConfig("DynMap.VisibleRegions", new ArrayList(), writer, conf, false); - writer.addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden ingame"); - DynMapHiddenRegions = GetConfig("DynMap.HiddenRegions", new ArrayList(), writer, conf, false); + c.getW().addComment("DynMap.Use", "Enables or disable DynMap Support"); + DynMapUse = c.get("DynMap.Use", false); + + c.getW().addComment("DynMap.Layer.3dRegions", "Enables 3D zones"); + DynMapLayer3dRegions = c.get("DynMap.Layer.3dRegions", true); + c.getW().addComment("DynMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); + DynMapLayerSubZoneDepth = c.get("DynMap.Layer.SubZoneDepth", 2); + + c.getW().addComment("DynMap.Border.Color", "Color of border. Pick color for this page http://www.w3schools.com/colors/colors_picker.asp"); + DynMapBorderColor = c.get("DynMap.Border.Color", "#FF0000"); + c.getW().addComment("DynMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); + DynMapBorderOpacity = c.get("DynMap.Border.Opacity", 0.3); + c.getW().addComment("DynMap.Border.Weight", "Border thickness"); + DynMapBorderWeight = c.get("DynMap.Border.Weight", 3); + DynMapFillOpacity = c.get("DynMap.Fill.Opacity", 0.3); + DynMapFillColor = c.get("DynMap.Fill.Color", "#FFFF00"); + DynMapFillForRent = c.get("DynMap.Fill.ForRent", "#33cc33"); + DynMapFillRented = c.get("DynMap.Fill.Rented", "#99ff33"); + DynMapFillForSale = c.get("DynMap.Fill.ForSale", "#0066ff"); + + c.getW().addComment("DynMap.VisibleRegions", "Shows only regions on this list"); + DynMapVisibleRegions = c.get("DynMap.VisibleRegions", new ArrayList()); + c.getW().addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden ingame"); + DynMapHiddenRegions = c.get("DynMap.HiddenRegions", new ArrayList()); try { - writer.save(f); + c.getW().save(f); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 85fab4da7..b2897f280 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -14,10 +14,11 @@ import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.configuration.Configuration; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; +import com.bekvon.bukkit.residence.containers.ConfigReader; + public class LocaleManager { public static ArrayList FlagList = new ArrayList(); @@ -27,41 +28,6 @@ public LocaleManager(Residence plugin) { this.plugin = plugin; } - public static String GetConfig(String path, String text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { - text = text.replace("\"", "\'"); - conf.addDefault(path, text); - text = conf.getString(path); - if (colorize) - text = Colors(text); - copySetting(conf, writer, path); - return text; - } - - public static List GetConfig(String path, List text, CommentedYamlConfiguration writer, YamlConfiguration conf, Boolean colorize) { - conf.addDefault(path, text); - text = ColorsArray(conf.getStringList(path), colorize); - copySetting(conf, writer, path); - return text; - } - - public static List ColorsArray(List text, Boolean colorize) { - List temp = new ArrayList(); - for (String part : text) { - if (colorize) - part = Colors(part); - temp.add(Colors(part)); - } - return temp; - } - - private synchronized static void copySetting(Configuration reader, Configuration writer, String path) { - writer.set(path, reader.get(path)); - } - - public static String Colors(String text) { - return ChatColor.translateAlternateColorCodes('&', text); - } - private static YamlConfiguration loadConfiguration(BufferedReader in, String language) { Validate.notNull(in, "File cannot be null"); YamlConfiguration config = new YamlConfiguration(); @@ -100,7 +66,8 @@ public void LoadLang(String lang) { } CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); + ConfigReader c = new ConfigReader(conf, writer); + c.getC().options().copyDefaults(true); StringBuilder header = new StringBuilder(); header.append(System.getProperty("line.separator")); @@ -114,971 +81,969 @@ public void LoadLang(String lang) { header.append(System.getProperty("line.separator")); header.append("to whatever you named your copy."); header.append(System.getProperty("line.separator")); - conf.options().copyDefaults(true); - - writer.options().header(header.toString()); - - GetConfig("Language.Invalid.Player", "&cInvalid player name...", writer, conf, true); - GetConfig("Language.Invalid.World", "&cInvalid world...", writer, conf, true); - GetConfig("Language.Invalid.Residence", "&cInvalid Residence...", writer, conf, true); - GetConfig("Language.Invalid.Subzone", "&cInvalid Subzone...", writer, conf, true); - GetConfig("Language.Invalid.Direction", "&cInvalid Direction...", writer, conf, true); - GetConfig("Language.Invalid.Amount", "&cInvalid Amount...", writer, conf, true); - GetConfig("Language.Invalid.Cost", "&cInvalid Cost...", writer, conf, true); - GetConfig("Language.Invalid.Days", "&cInvalid number of days...", writer, conf, true); - GetConfig("Language.Invalid.Material", "&cInvalid Material...", writer, conf, true); - GetConfig("Language.Invalid.Boolean", "&cInvalid value, must be &6true(t) &cor &6false(f)", writer, conf, true); - GetConfig("Language.Invalid.Area", "&cInvalid Area...", writer, conf, true); - GetConfig("Language.Invalid.Group", "&cInvalid Group...", writer, conf, true); - GetConfig("Language.Invalid.MessageType", "&cMessage type must be enter or remove.", writer, conf, true); - GetConfig("Language.Invalid.Flag", "&cInvalid Flag...", writer, conf, true); - GetConfig("Language.Invalid.FlagState", "&cInvalid flag state, must be &6true(t)&c, &6false(f)&c, or &6remove(r)", writer, conf, true); - GetConfig("Language.Invalid.List", "&eUnknown list type, must be &6blacklist &eor &6ignorelist.", writer, conf, true); - GetConfig("Language.Invalid.Page", "&eInvalid Page...", writer, conf, true); - GetConfig("Language.Invalid.Help", "&cInvalid Help Page...", writer, conf, true); - GetConfig("Language.Invalid.NameCharacters", "&cName contained unallowed characters...", writer, conf, true); - - GetConfig("Language.Area.Exists", "&cArea name already exists.", writer, conf, true); - GetConfig("Language.Area.Create", "&eResidence Area created, ID &6%1", writer, conf, true); - GetConfig("Language.Area.DiffWorld", "&cArea is in a different world from residence.", writer, conf, true); - GetConfig("Language.Area.Collision", "&cArea collides with residence &6%1", writer, conf, true); - GetConfig("Language.Area.SubzoneCollision", "&cArea collides with subzone &6%1", writer, conf, true); - GetConfig("Language.Area.NonExist", "&cNo such area exists.", writer, conf, true); - GetConfig("Language.Area.InvalidName", "&cInvalid Area Name...", writer, conf, true); - GetConfig("Language.Area.ToSmallTotal", "&cSelected area smaller than allowed minimal (&6%1&c)", writer, conf, true); - GetConfig("Language.Area.ToSmallX", "&cYour &6X &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more.", writer, conf, true); - GetConfig("Language.Area.ToSmallY", "&cYour selection height (&6%1&c) is too small. &eAllowed &6%2 &eand more.", writer, conf, true); - GetConfig("Language.Area.ToSmallZ", "&cYour &6Z &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more.", writer, conf, true); - GetConfig("Language.Area.Rename", "&eRenamed area &6%1 &eto &6%2", writer, conf, true); - GetConfig("Language.Area.Remove", "&eRemoved area &6%1...", writer, conf, true); - GetConfig("Language.Area.Name", "&eName: &2%1", writer, conf, true); - GetConfig("Language.Area.RemoveLast", "&cCannot remove the last area in a residence.", writer, conf, true); - GetConfig("Language.Area.NotWithinParent", "&cArea is not within parent area.", writer, conf, true); - GetConfig("Language.Area.Update", "&eArea Updated...", writer, conf, true); - GetConfig("Language.Area.MaxPhysical", "&eYou've reached the max physical areas allowed for your residence.", writer, conf, true); - GetConfig("Language.Area.SizeLimit", "&eArea size is not within your allowed limits.", writer, conf, true); - GetConfig("Language.Area.HighLimit", "&cYou cannot protect this high up, your limit is &6%1", writer, conf, true); - GetConfig("Language.Area.LowLimit", "&cYou cannot protect this deep, your limit is &6%1", writer, conf, true); - - GetConfig("Language.Select.Points", "&eSelect two points first before using this command!", writer, conf, true); - GetConfig("Language.Select.Overlap", "&cSelected points overlap with &6%1 &cregion!", writer, conf, true); - GetConfig("Language.Select.WorldGuardOverlap", "&cSelected points overlap with &6%1 &cWorldGuard region!", writer, conf, true); - GetConfig("Language.Select.Success", "&eSelection Successful!", writer, conf, true); - GetConfig("Language.Select.Fail", "&cInvalid select command...", writer, conf, true); - GetConfig("Language.Select.Bedrock", "&eSelection expanded to your lowest allowed limit.", writer, conf, true); - GetConfig("Language.Select.Sky", "&eSelection expanded to your highest allowed limit.", writer, conf, true); - GetConfig("Language.Select.Area", "&eSelected area &6%1 &eof residence &6%2", writer, conf, true); - GetConfig("Language.Select.Tool", "&e- Selection Tool: &6%1", writer, conf, true); - GetConfig("Language.Select.PrimaryPoint", "&ePlaced &6Primary &eSelection Point %1", writer, conf, true); - GetConfig("Language.Select.SecondaryPoint", "&ePlaced &6Secondary &eSelection Point %1", writer, conf, true); - GetConfig("Language.Select.Primary", "&ePrimary selection: &6%1", writer, conf, true); - GetConfig("Language.Select.Secondary", "&eSecondary selection: &6%1", writer, conf, true); - GetConfig("Language.Select.TooHigh", "&cWarning, selection went above top of map, limiting.", writer, conf, true); - GetConfig("Language.Select.TooLow", "&cWarning, selection went below bottom of map, limiting.", writer, conf, true); - GetConfig("Language.Select.TotalSize", "&eSelection total size: &6%1", writer, conf, true); - GetConfig("Language.Select.AutoEnabled", "&eAuto selection mode turned &6ON&e. To disable it write &6/res select auto", writer, conf, true); - GetConfig("Language.Select.AutoDisabled", "&eAuto selection mode turned &6OFF&e. To enable it again write &6/res select auto", writer, conf, true); - GetConfig("Language.Select.Disabled", "&cYou don't have access to selections commands", writer, conf, true); - - GetConfig("Language.Sign.Updated", "&6%1 &esigns updated!", writer, conf, true); - GetConfig("Language.Sign.TopLine", "[market]", writer, conf, true); - GetConfig("Language.Sign.DateFormat", "YY/MM/dd HH:mm", writer, conf, true); - GetConfig("Language.Sign.ForRentTopLine", "&8For Rent", writer, conf, true); - GetConfig("Language.Sign.ForRentPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); - GetConfig("Language.Sign.ForRentResName", "&8%1", writer, conf, true); - GetConfig("Language.Sign.ForRentBottomLine", "&9Available", writer, conf, true); - GetConfig("Language.Sign.RentedAutorenewTrue", "&2%1", writer, conf, true); - GetConfig("Language.Sign.RentedAutorenewFalse", "&c%1", writer, conf, true); - GetConfig("Language.Sign.RentedTopLine", "%1", writer, conf, true); - GetConfig("Language.Sign.RentedPriceLine", "&8%1&f/&8%2&f/&8%3", writer, conf, true); - GetConfig("Language.Sign.RentedResName", "&8%1", writer, conf, true); - GetConfig("Language.Sign.RentedBottomLine", "&1%1", writer, conf, true); - GetConfig("Language.Sign.ForSaleTopLine", "&8For Sale", writer, conf, true); - GetConfig("Language.Sign.ForSalePriceLine", "&8%1", writer, conf, true); - GetConfig("Language.Sign.ForSaleResName", "&8%1", writer, conf, true); - GetConfig("Language.Sign.ForSaleBottomLine", "&5Available", writer, conf, true); - GetConfig("Language.Sign.LookAt", "&cYou are not looking at sign", writer, conf, true); - - GetConfig("Language.Flag.Set", "&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate", writer, conf, true); - GetConfig("Language.Flag.SetFailed", "&cYou dont have access to &6%1 &cflag", writer, conf, true); - GetConfig("Language.Flag.CheckTrue", "&eFlag &6%1 &eapplies to player &6%2 &efor residence &6%3&e, value = &6%4", writer, conf, true); - GetConfig("Language.Flag.CheckFalse", "&eFlag &6%1 &edoes not apply to player &6%2 &efor residence.", writer, conf, true); - GetConfig("Language.Flag.Cleared", "&eFlags Cleared.", writer, conf, true); - GetConfig("Language.Flag.Default", "&eFlags set to default.", writer, conf, true); - GetConfig("Language.Flag.Deny", "&cYou dont have &6%1 &cpermission here.", writer, conf, true); - GetConfig("Language.Flag.SetDeny", "&cOwner does not have access to flag &6%1", writer, conf, true); - GetConfig("Language.Flag.ChangeDeny", "&cYou cant change &6%1 &cflag state while there is &6%2 &cplayer(s) inside.", writer, conf, true); - - GetConfig("Language.Bank.NoAccess", "&cYou dont have bank access.", writer, conf, true); - GetConfig("Language.Bank.Name", " &eBank: &6%1", writer, conf, true); - GetConfig("Language.Bank.NoMoney", "&cNot enough money in the bank.", writer, conf, true); - GetConfig("Language.Bank.Deposit", "&eYou deposit &6%1 &einto the residence bank.", writer, conf, true); - GetConfig("Language.Bank.Withdraw", "&eYou withdraw &6%1 from the residence bank.", writer, conf, true); - - GetConfig("Language.Subzone.Rename", "&eRenamed subzone &6%1 &eto &6%2", writer, conf, true); - GetConfig("Language.Subzone.Remove", "&eSubzone &6%1 &eremoved.", writer, conf, true); - GetConfig("Language.Subzone.Create", "&eCreated Subzone &6%1", writer, conf, true); - GetConfig("Language.Subzone.CreateFail", "&cUnable to create subzone &6%1", writer, conf, true); - GetConfig("Language.Subzone.Exists", "&cSubzone &6%1 &calready exists.", writer, conf, true); - GetConfig("Language.Subzone.Collide", "&cSubzone collides with subzone &6%1", writer, conf, true); - GetConfig("Language.Subzone.MaxDepth", "&cYou have reached the maximum allowed subzone depth.", writer, conf, true); - GetConfig("Language.Subzone.SelectInside", "&eBoth selection points must be inside the residence.", writer, conf, true); - GetConfig("Language.Subzone.CantCreate", "&cYou dont have permission to create residence subzone.", writer, conf, true); - GetConfig("Language.Subzone.CantDelete", "&cYou dont have permission to delete residence subzone.", writer, conf, true); - GetConfig("Language.Subzone.CantDeleteNotOwnerOfParent", "&cYou are not owner of parent residence to delete this subzone.", writer, conf, true); - GetConfig("Language.Subzone.CantContract", "&cYou dont have permission to contract residence subzone.", writer, conf, true); - GetConfig("Language.Subzone.CantExpand", "&cYou dont have permission to expand residence subzone.", writer, conf, true); - GetConfig("Language.Subzone.DeleteConfirm", "&eAre you sure you want to delete subzone &6%1&e, use &6/res confirm &eto confirm.", writer, conf, true); - GetConfig("Language.Subzone.OwnerChange", "&eSubzone &6%1 &eowner changed to &6%2", writer, conf, true); - - GetConfig("Language.Residence.Bought", "&eYou bought residence &6%1", writer, conf, true); - GetConfig("Language.Residence.Buy", "&6%1 &ehas bought residence &6%2 &efrom you.", writer, conf, true); - GetConfig("Language.Residence.BuyTooBig", "&cThis residence has areas bigger then your allowed max.", writer, conf, true); - GetConfig("Language.Residence.NotForSale", "&cResidence is not for sale.", writer, conf, true); - GetConfig("Language.Residence.ForSale", "&eResidence &6%1 &eis now for sale for &6%2", writer, conf, true); - GetConfig("Language.Residence.StopSelling", "&cResidence is no longer for sale.", writer, conf, true); - GetConfig("Language.Residence.TooMany", "&cYou already own the max number of residences your allowed to.", writer, conf, true); - GetConfig("Language.Residence.MaxRent", "&cYou already are renting the maximum number of residences your allowed to.", writer, conf, true); - GetConfig("Language.Residence.AlreadyRent", "&cResidence is already for rent...", writer, conf, true); - GetConfig("Language.Residence.NotForRent", "&cResidence not for rent...", writer, conf, true); - GetConfig("Language.Residence.NotForRentOrSell", "&cResidence not for rent or sell...", writer, conf, true); - GetConfig("Language.Residence.NotRented", "&cResidence not rented.", writer, conf, true); - GetConfig("Language.Residence.Unrent", "&eResidence &6%1 &ehas been unrented.", writer, conf, true); - GetConfig("Language.Residence.RemoveRentable", "&eResidence &6%1 &eis no longer rentable.", writer, conf, true); - GetConfig("Language.Residence.ForRentSuccess", "&eResidence &6%1 &eis now for rent for &6%2 &eevery &6%3 &edays.", writer, conf, true); - GetConfig("Language.Residence.RentSuccess", "&eYou have rented Residence &6%1 &efor &6%2 &edays.", writer, conf, true); - GetConfig("Language.Residence.AlreadyRented", "&eResidence &6%1 &ehas currently been rented to &6%2", writer, conf, true); - GetConfig("Language.Residence.AlreadyExists", "&cA residence named &6%1 &calready exists.", writer, conf, true); - GetConfig("Language.Residence.Create", "&eYou have created residence &6%1&e!", writer, conf, true); - GetConfig("Language.Residence.Rename", "&eRenamed Residence &6%1 &eto &6%2", writer, conf, true); - GetConfig("Language.Residence.Remove", "&eResidence &6%1 &ehas been removed...", writer, conf, true); - GetConfig("Language.Residence.MoveDeny", "&cYou dont have movement permission for Residence &6%1", writer, conf, true); - GetConfig("Language.Residence.TeleportNoFlag", "&cYou dont have teleport access for that residence.", writer, conf, true); - GetConfig("Language.Residence.FlagDeny", "&cYou dont have &6%1 &cpermission for Residence &6%2", writer, conf, true); - GetConfig("Language.Residence.GiveLimits", "&cCannot give residence to target player, because it is outside the target players limits.", writer, conf, true); - GetConfig("Language.Residence.Give", "&eYou give residence &6%1 &eto player &6%2", writer, conf, true); - GetConfig("Language.Residence.Recieve", "&eYou have recieved residence &6%1 &efrom player &6%2", writer, conf, true); - GetConfig("Language.Residence.List", " &a%1%2 &e- &6World&e: &6%3", writer, conf, true); - GetConfig("Language.Residence.TeleportNear", "&eTeleported to near residence.", writer, conf, true); - GetConfig("Language.Residence.SetTeleportLocation", "&eTeleport Location Set...", writer, conf, true); - GetConfig("Language.Residence.PermissionsApply", "&ePermissions applied to residence.", writer, conf, true); - GetConfig("Language.Residence.NotOwner", "&cYou are not owner of this residence", writer, conf, true); - GetConfig("Language.Residence.RemovePlayersResidences", "&eRemoved all residences belonging to player &6%1", writer, conf, true); - GetConfig("Language.Residence.NotIn", "&cYou are not in a Residence.", writer, conf, true); - GetConfig("Language.Residence.PlayerNotIn", "&cPlayer standing not in your Residence area.", writer, conf, true); - GetConfig("Language.Residence.Kicked", "&eYou were kicked from residence", writer, conf, true); - GetConfig("Language.Residence.In", "&eYou are standing in Residence &6%1", writer, conf, true); - GetConfig("Language.Residence.OwnerChange", "&eResidence &6%1 &eowner changed to &6%2", writer, conf, true); - GetConfig("Language.Residence.NonAdmin", "&cYou are not a Residence admin.", writer, conf, true); - GetConfig("Language.Residence.Line", "&eResidence: &6%1 ", writer, conf, true); - GetConfig("Language.Residence.RentedBy", "&eRented by: &6%1", writer, conf, true); - GetConfig("Language.Residence.MessageChange", "&eMessage Set...", writer, conf, true); - GetConfig("Language.Residence.CantDeleteResidence", "&cYou dont have permission to delete residence.", writer, conf, true); - GetConfig("Language.Residence.CantExpandResidence", "&cYou dont have permission to expand residence.", writer, conf, true); - GetConfig("Language.Residence.CantContractResidence", "&cYou dont have permission to contract residence.", writer, conf, true); - GetConfig("Language.Residence.NoResHere", "&cThere is no residence in there.", writer, conf, true); - GetConfig("Language.Residence.OwnerNoPermission", "&cThe owner does not have permission for this.", writer, conf, true); - GetConfig("Language.Residence.ParentNoPermission", "&cYou don't have permission to make changes to the parent zone.", writer, conf, true); - GetConfig("Language.Residence.ChatDisabled", "&eResidence Chat Disabled...", writer, conf, true); - GetConfig("Language.Residence.DeleteConfirm", "&eAre you sure you want to delete residence &6%1&e, use &6/res confirm &eto confirm.", writer, conf, true); - - GetConfig("Language.Rent.Disabled", "&cRent is disabled...", writer, conf, true); - GetConfig("Language.Rent.DisableRenew", "&eResidence &6%1 &ewill now no longer re-rent upon expire.", writer, conf, true); - GetConfig("Language.Rent.EnableRenew", "&eResidence &6%1 &ewill now automatically re-rent upon expire.", writer, conf, true); - GetConfig("Language.Rent.Expire", "&eRent Expire Time: &6%1", writer, conf, true); - GetConfig("Language.Rent.ModifyDeny", "&cCannot modify a rented residence.", writer, conf, true); - GetConfig("Language.Rent.Days", "&eRent days: &6%1", writer, conf, true); - GetConfig("Language.Rent.Rented", " &6(Rented)", writer, conf, true); - - GetConfig("Language.Rentable.Land", "&eRentable Land: &6", writer, conf, true); - GetConfig("Language.Rentable.AutoRenew", "&eRentable Auto Renew: &6%1", writer, conf, true); - GetConfig("Language.Rentable.DisableRenew", "&6%1 &ewill no longer renew rentable status upon expire.", writer, conf, true); - GetConfig("Language.Rentable.EnableRenew", "&6%1 &ewill now automatically renew rentable status upon expire.", writer, conf, true); - - GetConfig("Language.Economy.LandForSale", "&eLand For Sale:", writer, conf, true); - GetConfig("Language.Economy.NotEnoughMoney", "&cYou dont have enough money.", writer, conf, true); - GetConfig("Language.Economy.MoneyCharged", "&eCharged &6%1 &eto your &6%2 &eaccount.", writer, conf, true); - GetConfig("Language.Economy.MoneyAdded", "&eGot &6%1 &eto your &6%2 &eaccount.", writer, conf, true); - GetConfig("Language.Economy.MoneyCredit", "&eCredited &6%1 &eto your &6%2 &eaccount.", writer, conf, true); - GetConfig("Language.Economy.RentReleaseInvalid", "&eResidence &6%1 &eis not rented or for rent.", writer, conf, true); - GetConfig("Language.Economy.RentSellFail", "&cCannot sell a Residence if it is for rent.", writer, conf, true); - GetConfig("Language.Economy.SellRentFail", "&cCannot rent a Residence if it is for sale.", writer, conf, true); - GetConfig("Language.Economy.OwnerBuyFail", "&cCannot buy your own land!", writer, conf, true); - GetConfig("Language.Economy.OwnerRentFail", "&cCannot rent your own land!", writer, conf, true); - GetConfig("Language.Economy.AlreadySellFail", "&eResidence already for sale!", writer, conf, true); - GetConfig("Language.Economy.LeaseRenew", "&eLease valid until &6%1", writer, conf, true); - GetConfig("Language.Economy.LeaseRenewMax", "&eLease renewed to maximum allowed", writer, conf, true); - GetConfig("Language.Economy.LeaseNotExpire", "&eNo such lease, or lease does not expire.", writer, conf, true); - GetConfig("Language.Economy.LeaseRenewalCost", "&eRenewal cost for area &6%1 &eis &6%2", writer, conf, true); - GetConfig("Language.Economy.LeaseInfinite", "&eLease time set to infinite...", writer, conf, true); - GetConfig("Language.Economy.MarketDisabled", "&cEconomy Disabled!", writer, conf, true); - GetConfig("Language.Economy.SellAmount", "&eSell Amount: &2%1", writer, conf, true); - GetConfig("Language.Economy.LeaseExpire", "&eLease Expire Time: &2%1", writer, conf, true); - - GetConfig("Language.Expanding.North", "&eExpanding North &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Expanding.West", "&eExpanding West &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Expanding.South", "&eExpanding South &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Expanding.East", "&eExpanding East &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Expanding.Up", "&eExpanding Up &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Expanding.Down", "&eExpanding Down &6%1 &eblocks", writer, conf, true); - - GetConfig("Language.Contracting.North", "&eContracting North &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Contracting.West", "&eContracting West &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Contracting.South", "&eContracting South &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Contracting.East", "&eContracting East &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Contracting.Up", "&eContracting Up &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Contracting.Down", "&eContracting Down &6%1 &eblocks", writer, conf, true); - - GetConfig("Language.Shifting.North", "&eShifting North &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Shifting.West", "&eShifting West &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Shifting.South", "&eShifting South &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Shifting.East", "&eShifting East &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Shifting.Up", "&eShifting Up &6%1 &eblocks", writer, conf, true); - GetConfig("Language.Shifting.Down", "&eShifting Down &6%1 &eblocks", writer, conf, true); - - GetConfig("Language.Limits.PGroup", "&7- &ePermissions Group:&3 %1", writer, conf, true); - GetConfig("Language.Limits.RGroup", "&7- &eResidence Group:&3 %1", writer, conf, true); - GetConfig("Language.Limits.Admin", "&7- &eResidence Admin:&3 %1", writer, conf, true); - GetConfig("Language.Limits.CanCreate", "&7- &eCan Create Residences:&3 %1", writer, conf, true); - GetConfig("Language.Limits.MaxRes", "&7- &eMax Residences:&3 %1", writer, conf, true); - GetConfig("Language.Limits.MaxEW", "&7- &eMax East/West Size:&3 %1", writer, conf, true); - GetConfig("Language.Limits.MaxNS", "&7- &eMax North/South Size:&3 %1", writer, conf, true); - GetConfig("Language.Limits.MaxUD", "&7- &eMax Up/Down Size:&3 %1", writer, conf, true); - GetConfig("Language.Limits.MinMax", "&7- &eMin/Max Protection Height:&3 %1 to %2", writer, conf, true); - GetConfig("Language.Limits.MaxSub", "&7- &eMax Subzone Depth:&3 %1", writer, conf, true); - GetConfig("Language.Limits.MaxRents", "&7- &eMax Rents:&3 %1", writer, conf, true); - GetConfig("Language.Limits.EnterLeave", "&7- &eCan Set Enter/Leave Messages:&3 %1", writer, conf, true); - GetConfig("Language.Limits.NumberOwn", "&7- &eNumber of Residences you own:&3 %1", writer, conf, true); - GetConfig("Language.Limits.Cost", "&7- &eResidence Cost Per Block:&3 %1", writer, conf, true); - GetConfig("Language.Limits.Sell", "&7- &eResidence Sell Cost Per Block:&3 %1", writer, conf, true); - GetConfig("Language.Limits.Flag", "&7- &eFlag Permissions:&3 %1", writer, conf, true); - GetConfig("Language.Limits.MaxDays", "&7- &eMax Lease Days:&3 %1", writer, conf, true); - GetConfig("Language.Limits.LeaseTime", "&7- &eLease Time Given on Renew:&3 %1", writer, conf, true); - GetConfig("Language.Limits.RenewCost", "&7- &eRenew Cost Per Block:&3 %1", writer, conf, true); - - GetConfig("Language.Gui.Set.Title", "&6%1 flags", writer, conf, true); - GetConfig("Language.Gui.Pset.Title", "&6%1 %2 flags", writer, conf, true); - GetConfig("Language.Gui.Actions", Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove"), writer, conf, true); - - GetConfig("Language.InformationPage.TopLine", "&e---< &a %1 &e >---", writer, conf, true); - GetConfig("Language.InformationPage.Page", "&e-----< &6%1 &e>-----", writer, conf, true); - GetConfig("Language.InformationPage.NextPage", "&e-----< &6%1 &e>-----", writer, conf, true); - GetConfig("Language.InformationPage.NoNextPage", "&e-----------------------", writer, conf, true); - - GetConfig("Language.Chat.ChatChannelChange", "&eChanged residence chat channel to &6%1!", writer, conf, true); - GetConfig("Language.Chat.ChatChannelLeave", "&eLeft residence chat", writer, conf, true); - - GetConfig("Language.Chat.JoinFirst", "&4Join residence chat channel first...", writer, conf, true); - GetConfig("Language.Chat.InvalidChannel", "&4Invalid Channel...", writer, conf, true); - GetConfig("Language.Chat.InvalidColor", "&4Incorrect color code", writer, conf, true); - GetConfig("Language.Chat.NotInChannel", "&4Player is not in channel", writer, conf, true); - GetConfig("Language.Chat.Kicked", "&6%1 &ewas kicked from &6%2 &echannel", writer, conf, true); - GetConfig("Language.Chat.InvalidPrefixLength", "&4Prefix is to long. Allowed length: %1", writer, conf, true); - GetConfig("Language.Chat.ChangedColor", "&eResidence chat channel color changed to %1", writer, conf, true); - GetConfig("Language.Chat.ChangedPrefix", "&eResidence chat channel prefix changed to %1", writer, conf, true); - - GetConfig("Language.Shop.ListTopLine", "&6%1 &eShop list - Page &6%2 &eof &6%3 %4", writer, conf, true); - GetConfig("Language.Shop.List", " &e%1. &6%2 &e(&6%3&e) %4", writer, conf, true); - GetConfig("Language.Shop.ListVoted", "&e%1 (&6%2&e)", writer, conf, true); - GetConfig("Language.Shop.ListLiked", "&eLikes: &0%1", writer, conf, true); - - GetConfig("Language.Shop.VotesTopLine", "&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5", writer, conf, true); - GetConfig("Language.Shop.VotesList", " &e%1. &6%2 &e%3 &7%4", writer, conf, true); - - GetConfig("Language.Shop.NoDesc", "&6No description", writer, conf, true); - GetConfig("Language.Shop.Desc", "&6Description:\n%1", writer, conf, true); - GetConfig("Language.Shop.DescChange", "&6Description changed to: %1", writer, conf, true); - GetConfig("Language.Shop.NewBoard", "&6Successfully added new shop sign board", writer, conf, true); - GetConfig("Language.Shop.DeleteBoard", "&6Right click sign of board you want to delete", writer, conf, true); - GetConfig("Language.Shop.DeletedBoard", "&6Sign board removed", writer, conf, true); - GetConfig("Language.Shop.IncorrectBoard", "&cThis is not sign board, try performing command again and clicking correct sign", writer, conf, true); - GetConfig("Language.Shop.InvalidSelection", "&cLeft click with selection tool top left sign and then right click bottom right", writer, conf, true); - GetConfig("Language.Shop.VoteChanged", "&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence", writer, conf, true); - GetConfig("Language.Shop.Voted", "&6You voted, and gave &e%1 &6votes to &e%2 &6residence", writer, conf, true); - GetConfig("Language.Shop.Liked", "&6You liked &e%1 &6residence", writer, conf, true); - GetConfig("Language.Shop.AlreadyLiked", "&6You already liked &e%1 &6residence", writer, conf, true); - GetConfig("Language.Shop.NoVotes", "&cThere is no registered votes for this residence", writer, conf, true); - GetConfig("Language.Shop.CantVote", "&cResidence don't have shop flag set to true", writer, conf, true); - GetConfig("Language.Shop.VotedRange", "&6Vote range is from &e%1 &6to &e%2", writer, conf, true); - GetConfig("Language.Shop.SignLines.1", "&e--== &8%1 &e==--", writer, conf, true); - GetConfig("Language.Shop.SignLines.2", "&9%1", writer, conf, true); - GetConfig("Language.Shop.SignLines.3", "&4%1", writer, conf, true); - GetConfig("Language.Shop.SignLines.4", "&8%1&e (&8%2&e)", writer, conf, true); - GetConfig("Language.Shop.SignLines.Likes4", "&9Likes: &8%2", writer, conf, true); - - GetConfig("Language.RandomTeleport.TpLimit", "&eYou can't teleport so fast, please wait &6%1 &esec and try again", writer, conf, true); - GetConfig("Language.RandomTeleport.TeleportSuccess", "&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation", writer, conf, true); - GetConfig("Language.RandomTeleport.IncorrectLocation", "&6Could not find correct teleport location, please wait &e%1 &6sec and try again.", writer, conf, - true); - GetConfig("Language.RandomTeleport.TeleportStarted", "&eTeleportation started, don't move for next &6%4 &esec.", writer, conf, true); - GetConfig("Language.RandomTeleport.WorldList", "&ePossible worlds: &6%1", writer, conf, true); - - GetConfig("Language.General.DisabledWorld", "&cResidence plugin is disabled in this world", writer, conf, true); - GetConfig("Language.General.UseNumbers", "&cPlease use numbers...", writer, conf, true); + + c.getW().options().header(header.toString()); + + c.get("Language.Invalid.Player", "&cInvalid player name..."); + c.get("Language.Invalid.World", "&cInvalid world..."); + c.get("Language.Invalid.Residence", "&cInvalid Residence..."); + c.get("Language.Invalid.Subzone", "&cInvalid Subzone..."); + c.get("Language.Invalid.Direction", "&cInvalid Direction..."); + c.get("Language.Invalid.Amount", "&cInvalid Amount..."); + c.get("Language.Invalid.Cost", "&cInvalid Cost..."); + c.get("Language.Invalid.Days", "&cInvalid number of days..."); + c.get("Language.Invalid.Material", "&cInvalid Material..."); + c.get("Language.Invalid.Boolean", "&cInvalid value, must be &6true(t) &cor &6false(f)"); + c.get("Language.Invalid.Area", "&cInvalid Area..."); + c.get("Language.Invalid.Group", "&cInvalid Group..."); + c.get("Language.Invalid.MessageType", "&cMessage type must be enter or remove."); + c.get("Language.Invalid.Flag", "&cInvalid Flag..."); + c.get("Language.Invalid.FlagState", "&cInvalid flag state, must be &6true(t)&c, &6false(f)&c, or &6remove(r)"); + c.get("Language.Invalid.List", "&eUnknown list type, must be &6blacklist &eor &6ignorelist."); + c.get("Language.Invalid.Page", "&eInvalid Page..."); + c.get("Language.Invalid.Help", "&cInvalid Help Page..."); + c.get("Language.Invalid.NameCharacters", "&cName contained unallowed characters..."); + + c.get("Language.Area.Exists", "&cArea name already exists."); + c.get("Language.Area.Create", "&eResidence Area created, ID &6%1"); + c.get("Language.Area.DiffWorld", "&cArea is in a different world from residence."); + c.get("Language.Area.Collision", "&cArea collides with residence &6%1"); + c.get("Language.Area.SubzoneCollision", "&cArea collides with subzone &6%1"); + c.get("Language.Area.NonExist", "&cNo such area exists."); + c.get("Language.Area.InvalidName", "&cInvalid Area Name..."); + c.get("Language.Area.ToSmallTotal", "&cSelected area smaller than allowed minimal (&6%1&c)"); + c.get("Language.Area.ToSmallX", "&cYour &6X &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more."); + c.get("Language.Area.ToSmallY", "&cYour selection height (&6%1&c) is too small. &eAllowed &6%2 &eand more."); + c.get("Language.Area.ToSmallZ", "&cYour &6Z &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more."); + c.get("Language.Area.Rename", "&eRenamed area &6%1 &eto &6%2"); + c.get("Language.Area.Remove", "&eRemoved area &6%1..."); + c.get("Language.Area.Name", "&eName: &2%1"); + c.get("Language.Area.RemoveLast", "&cCannot remove the last area in a residence."); + c.get("Language.Area.NotWithinParent", "&cArea is not within parent area."); + c.get("Language.Area.Update", "&eArea Updated..."); + c.get("Language.Area.MaxPhysical", "&eYou've reached the max physical areas allowed for your residence."); + c.get("Language.Area.SizeLimit", "&eArea size is not within your allowed limits."); + c.get("Language.Area.HighLimit", "&cYou cannot protect this high up, your limit is &6%1"); + c.get("Language.Area.LowLimit", "&cYou cannot protect this deep, your limit is &6%1"); + + c.get("Language.Select.Points", "&eSelect two points first before using this command!"); + c.get("Language.Select.Overlap", "&cSelected points overlap with &6%1 &cregion!"); + c.get("Language.Select.WorldGuardOverlap", "&cSelected points overlap with &6%1 &cWorldGuard region!"); + c.get("Language.Select.Success", "&eSelection Successful!"); + c.get("Language.Select.Fail", "&cInvalid select command..."); + c.get("Language.Select.Bedrock", "&eSelection expanded to your lowest allowed limit."); + c.get("Language.Select.Sky", "&eSelection expanded to your highest allowed limit."); + c.get("Language.Select.Area", "&eSelected area &6%1 &eof residence &6%2"); + c.get("Language.Select.Tool", "&e- Selection Tool: &6%1"); + c.get("Language.Select.PrimaryPoint", "&ePlaced &6Primary &eSelection Point %1"); + c.get("Language.Select.SecondaryPoint", "&ePlaced &6Secondary &eSelection Point %1"); + c.get("Language.Select.Primary", "&ePrimary selection: &6%1"); + c.get("Language.Select.Secondary", "&eSecondary selection: &6%1"); + c.get("Language.Select.TooHigh", "&cWarning, selection went above top of map, limiting."); + c.get("Language.Select.TooLow", "&cWarning, selection went below bottom of map, limiting."); + c.get("Language.Select.TotalSize", "&eSelection total size: &6%1"); + c.get("Language.Select.AutoEnabled", "&eAuto selection mode turned &6ON&e. To disable it write &6/res select auto"); + c.get("Language.Select.AutoDisabled", "&eAuto selection mode turned &6OFF&e. To enable it again write &6/res select auto"); + c.get("Language.Select.Disabled", "&cYou don't have access to selections commands"); + + c.get("Language.Sign.Updated", "&6%1 &esigns updated!"); + c.get("Language.Sign.TopLine", "[market]"); + c.get("Language.Sign.DateFormat", "YY/MM/dd HH:mm"); + c.get("Language.Sign.ForRentTopLine", "&8For Rent"); + c.get("Language.Sign.ForRentPriceLine", "&8%1&f/&8%2&f/&8%3"); + c.get("Language.Sign.ForRentResName", "&8%1"); + c.get("Language.Sign.ForRentBottomLine", "&9Available"); + c.get("Language.Sign.RentedAutorenewTrue", "&2%1"); + c.get("Language.Sign.RentedAutorenewFalse", "&c%1"); + c.get("Language.Sign.RentedTopLine", "%1"); + c.get("Language.Sign.RentedPriceLine", "&8%1&f/&8%2&f/&8%3"); + c.get("Language.Sign.RentedResName", "&8%1"); + c.get("Language.Sign.RentedBottomLine", "&1%1"); + c.get("Language.Sign.ForSaleTopLine", "&8For Sale"); + c.get("Language.Sign.ForSalePriceLine", "&8%1"); + c.get("Language.Sign.ForSaleResName", "&8%1"); + c.get("Language.Sign.ForSaleBottomLine", "&5Available"); + c.get("Language.Sign.LookAt", "&cYou are not looking at sign"); + + c.get("Language.Flag.Set", "&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"); + c.get("Language.Flag.SetFailed", "&cYou dont have access to &6%1 &cflag"); + c.get("Language.Flag.CheckTrue", "&eFlag &6%1 &eapplies to player &6%2 &efor residence &6%3&e, value = &6%4"); + c.get("Language.Flag.CheckFalse", "&eFlag &6%1 &edoes not apply to player &6%2 &efor residence."); + c.get("Language.Flag.Cleared", "&eFlags Cleared."); + c.get("Language.Flag.Default", "&eFlags set to default."); + c.get("Language.Flag.Deny", "&cYou dont have &6%1 &cpermission here."); + c.get("Language.Flag.SetDeny", "&cOwner does not have access to flag &6%1"); + c.get("Language.Flag.ChangeDeny", "&cYou cant change &6%1 &cflag state while there is &6%2 &cplayer(s) inside."); + + c.get("Language.Bank.NoAccess", "&cYou dont have bank access."); + c.get("Language.Bank.Name", " &eBank: &6%1"); + c.get("Language.Bank.NoMoney", "&cNot enough money in the bank."); + c.get("Language.Bank.Deposit", "&eYou deposit &6%1 &einto the residence bank."); + c.get("Language.Bank.Withdraw", "&eYou withdraw &6%1 from the residence bank."); + + c.get("Language.Subzone.Rename", "&eRenamed subzone &6%1 &eto &6%2"); + c.get("Language.Subzone.Remove", "&eSubzone &6%1 &eremoved."); + c.get("Language.Subzone.Create", "&eCreated Subzone &6%1"); + c.get("Language.Subzone.CreateFail", "&cUnable to create subzone &6%1"); + c.get("Language.Subzone.Exists", "&cSubzone &6%1 &calready exists."); + c.get("Language.Subzone.Collide", "&cSubzone collides with subzone &6%1"); + c.get("Language.Subzone.MaxDepth", "&cYou have reached the maximum allowed subzone depth."); + c.get("Language.Subzone.SelectInside", "&eBoth selection points must be inside the residence."); + c.get("Language.Subzone.CantCreate", "&cYou dont have permission to create residence subzone."); + c.get("Language.Subzone.CantDelete", "&cYou dont have permission to delete residence subzone."); + c.get("Language.Subzone.CantDeleteNotOwnerOfParent", "&cYou are not owner of parent residence to delete this subzone."); + c.get("Language.Subzone.CantContract", "&cYou dont have permission to contract residence subzone."); + c.get("Language.Subzone.CantExpand", "&cYou dont have permission to expand residence subzone."); + c.get("Language.Subzone.DeleteConfirm", "&eAre you sure you want to delete subzone &6%1&e, use &6/res confirm &eto confirm."); + c.get("Language.Subzone.OwnerChange", "&eSubzone &6%1 &eowner changed to &6%2"); + + c.get("Language.Residence.Bought", "&eYou bought residence &6%1"); + c.get("Language.Residence.Buy", "&6%1 &ehas bought residence &6%2 &efrom you."); + c.get("Language.Residence.BuyTooBig", "&cThis residence has areas bigger then your allowed max."); + c.get("Language.Residence.NotForSale", "&cResidence is not for sale."); + c.get("Language.Residence.ForSale", "&eResidence &6%1 &eis now for sale for &6%2"); + c.get("Language.Residence.StopSelling", "&cResidence is no longer for sale."); + c.get("Language.Residence.TooMany", "&cYou already own the max number of residences your allowed to."); + c.get("Language.Residence.MaxRent", "&cYou already are renting the maximum number of residences your allowed to."); + c.get("Language.Residence.AlreadyRent", "&cResidence is already for rent..."); + c.get("Language.Residence.NotForRent", "&cResidence not for rent..."); + c.get("Language.Residence.NotForRentOrSell", "&cResidence not for rent or sell..."); + c.get("Language.Residence.NotRented", "&cResidence not rented."); + c.get("Language.Residence.Unrent", "&eResidence &6%1 &ehas been unrented."); + c.get("Language.Residence.RemoveRentable", "&eResidence &6%1 &eis no longer rentable."); + c.get("Language.Residence.ForRentSuccess", "&eResidence &6%1 &eis now for rent for &6%2 &eevery &6%3 &edays."); + c.get("Language.Residence.RentSuccess", "&eYou have rented Residence &6%1 &efor &6%2 &edays."); + c.get("Language.Residence.AlreadyRented", "&eResidence &6%1 &ehas currently been rented to &6%2"); + c.get("Language.Residence.AlreadyExists", "&cA residence named &6%1 &calready exists."); + c.get("Language.Residence.Create", "&eYou have created residence &6%1&e!"); + c.get("Language.Residence.Rename", "&eRenamed Residence &6%1 &eto &6%2"); + c.get("Language.Residence.Remove", "&eResidence &6%1 &ehas been removed..."); + c.get("Language.Residence.MoveDeny", "&cYou dont have movement permission for Residence &6%1"); + c.get("Language.Residence.TeleportNoFlag", "&cYou dont have teleport access for that residence."); + c.get("Language.Residence.FlagDeny", "&cYou dont have &6%1 &cpermission for Residence &6%2"); + c.get("Language.Residence.GiveLimits", "&cCannot give residence to target player, because it is outside the target players limits."); + c.get("Language.Residence.Give", "&eYou give residence &6%1 &eto player &6%2"); + c.get("Language.Residence.Recieve", "&eYou have recieved residence &6%1 &efrom player &6%2"); + c.get("Language.Residence.List", " &a%1%2 &e- &6World&e: &6%3"); + c.get("Language.Residence.TeleportNear", "&eTeleported to near residence."); + c.get("Language.Residence.SetTeleportLocation", "&eTeleport Location Set..."); + c.get("Language.Residence.PermissionsApply", "&ePermissions applied to residence."); + c.get("Language.Residence.NotOwner", "&cYou are not owner of this residence"); + c.get("Language.Residence.RemovePlayersResidences", "&eRemoved all residences belonging to player &6%1"); + c.get("Language.Residence.NotIn", "&cYou are not in a Residence."); + c.get("Language.Residence.PlayerNotIn", "&cPlayer standing not in your Residence area."); + c.get("Language.Residence.Kicked", "&eYou were kicked from residence"); + c.get("Language.Residence.In", "&eYou are standing in Residence &6%1"); + c.get("Language.Residence.OwnerChange", "&eResidence &6%1 &eowner changed to &6%2"); + c.get("Language.Residence.NonAdmin", "&cYou are not a Residence admin."); + c.get("Language.Residence.Line", "&eResidence: &6%1 "); + c.get("Language.Residence.RentedBy", "&eRented by: &6%1"); + c.get("Language.Residence.MessageChange", "&eMessage Set..."); + c.get("Language.Residence.CantDeleteResidence", "&cYou dont have permission to delete residence."); + c.get("Language.Residence.CantExpandResidence", "&cYou dont have permission to expand residence."); + c.get("Language.Residence.CantContractResidence", "&cYou dont have permission to contract residence."); + c.get("Language.Residence.NoResHere", "&cThere is no residence in there."); + c.get("Language.Residence.OwnerNoPermission", "&cThe owner does not have permission for this."); + c.get("Language.Residence.ParentNoPermission", "&cYou don't have permission to make changes to the parent zone."); + c.get("Language.Residence.ChatDisabled", "&eResidence Chat Disabled..."); + c.get("Language.Residence.DeleteConfirm", "&eAre you sure you want to delete residence &6%1&e, use &6/res confirm &eto confirm."); + + c.get("Language.Rent.Disabled", "&cRent is disabled..."); + c.get("Language.Rent.DisableRenew", "&eResidence &6%1 &ewill now no longer re-rent upon expire."); + c.get("Language.Rent.EnableRenew", "&eResidence &6%1 &ewill now automatically re-rent upon expire."); + c.get("Language.Rent.Expire", "&eRent Expire Time: &6%1"); + c.get("Language.Rent.ModifyDeny", "&cCannot modify a rented residence."); + c.get("Language.Rent.Days", "&eRent days: &6%1"); + c.get("Language.Rent.Rented", " &6(Rented)"); + + c.get("Language.Rentable.Land", "&eRentable Land: &6"); + c.get("Language.Rentable.AutoRenew", "&eRentable Auto Renew: &6%1"); + c.get("Language.Rentable.DisableRenew", "&6%1 &ewill no longer renew rentable status upon expire."); + c.get("Language.Rentable.EnableRenew", "&6%1 &ewill now automatically renew rentable status upon expire."); + + c.get("Language.Economy.LandForSale", "&eLand For Sale:"); + c.get("Language.Economy.NotEnoughMoney", "&cYou dont have enough money."); + c.get("Language.Economy.MoneyCharged", "&eCharged &6%1 &eto your &6%2 &eaccount."); + c.get("Language.Economy.MoneyAdded", "&eGot &6%1 &eto your &6%2 &eaccount."); + c.get("Language.Economy.MoneyCredit", "&eCredited &6%1 &eto your &6%2 &eaccount."); + c.get("Language.Economy.RentReleaseInvalid", "&eResidence &6%1 &eis not rented or for rent."); + c.get("Language.Economy.RentSellFail", "&cCannot sell a Residence if it is for rent."); + c.get("Language.Economy.SellRentFail", "&cCannot rent a Residence if it is for sale."); + c.get("Language.Economy.OwnerBuyFail", "&cCannot buy your own land!"); + c.get("Language.Economy.OwnerRentFail", "&cCannot rent your own land!"); + c.get("Language.Economy.AlreadySellFail", "&eResidence already for sale!"); + c.get("Language.Economy.LeaseRenew", "&eLease valid until &6%1"); + c.get("Language.Economy.LeaseRenewMax", "&eLease renewed to maximum allowed"); + c.get("Language.Economy.LeaseNotExpire", "&eNo such lease, or lease does not expire."); + c.get("Language.Economy.LeaseRenewalCost", "&eRenewal cost for area &6%1 &eis &6%2"); + c.get("Language.Economy.LeaseInfinite", "&eLease time set to infinite..."); + c.get("Language.Economy.MarketDisabled", "&cEconomy Disabled!"); + c.get("Language.Economy.SellAmount", "&eSell Amount: &2%1"); + c.get("Language.Economy.LeaseExpire", "&eLease Expire Time: &2%1"); + + c.get("Language.Expanding.North", "&eExpanding North &6%1 &eblocks"); + c.get("Language.Expanding.West", "&eExpanding West &6%1 &eblocks"); + c.get("Language.Expanding.South", "&eExpanding South &6%1 &eblocks"); + c.get("Language.Expanding.East", "&eExpanding East &6%1 &eblocks"); + c.get("Language.Expanding.Up", "&eExpanding Up &6%1 &eblocks"); + c.get("Language.Expanding.Down", "&eExpanding Down &6%1 &eblocks"); + + c.get("Language.Contracting.North", "&eContracting North &6%1 &eblocks"); + c.get("Language.Contracting.West", "&eContracting West &6%1 &eblocks"); + c.get("Language.Contracting.South", "&eContracting South &6%1 &eblocks"); + c.get("Language.Contracting.East", "&eContracting East &6%1 &eblocks"); + c.get("Language.Contracting.Up", "&eContracting Up &6%1 &eblocks"); + c.get("Language.Contracting.Down", "&eContracting Down &6%1 &eblocks"); + + c.get("Language.Shifting.North", "&eShifting North &6%1 &eblocks"); + c.get("Language.Shifting.West", "&eShifting West &6%1 &eblocks"); + c.get("Language.Shifting.South", "&eShifting South &6%1 &eblocks"); + c.get("Language.Shifting.East", "&eShifting East &6%1 &eblocks"); + c.get("Language.Shifting.Up", "&eShifting Up &6%1 &eblocks"); + c.get("Language.Shifting.Down", "&eShifting Down &6%1 &eblocks"); + + c.get("Language.Limits.PGroup", "&7- &ePermissions Group:&3 %1"); + c.get("Language.Limits.RGroup", "&7- &eResidence Group:&3 %1"); + c.get("Language.Limits.Admin", "&7- &eResidence Admin:&3 %1"); + c.get("Language.Limits.CanCreate", "&7- &eCan Create Residences:&3 %1"); + c.get("Language.Limits.MaxRes", "&7- &eMax Residences:&3 %1"); + c.get("Language.Limits.MaxEW", "&7- &eMax East/West Size:&3 %1"); + c.get("Language.Limits.MaxNS", "&7- &eMax North/South Size:&3 %1"); + c.get("Language.Limits.MaxUD", "&7- &eMax Up/Down Size:&3 %1"); + c.get("Language.Limits.MinMax", "&7- &eMin/Max Protection Height:&3 %1 to %2"); + c.get("Language.Limits.MaxSub", "&7- &eMax Subzone Depth:&3 %1"); + c.get("Language.Limits.MaxRents", "&7- &eMax Rents:&3 %1"); + c.get("Language.Limits.EnterLeave", "&7- &eCan Set Enter/Leave Messages:&3 %1"); + c.get("Language.Limits.NumberOwn", "&7- &eNumber of Residences you own:&3 %1"); + c.get("Language.Limits.Cost", "&7- &eResidence Cost Per Block:&3 %1"); + c.get("Language.Limits.Sell", "&7- &eResidence Sell Cost Per Block:&3 %1"); + c.get("Language.Limits.Flag", "&7- &eFlag Permissions:&3 %1"); + c.get("Language.Limits.MaxDays", "&7- &eMax Lease Days:&3 %1"); + c.get("Language.Limits.LeaseTime", "&7- &eLease Time Given on Renew:&3 %1"); + c.get("Language.Limits.RenewCost", "&7- &eRenew Cost Per Block:&3 %1"); + + c.get("Language.Gui.Set.Title", "&6%1 flags"); + c.get("Language.Gui.Pset.Title", "&6%1 %2 flags"); + c.get("Language.Gui.Actions", Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove")); + + c.get("Language.InformationPage.TopLine", "&e---< &a %1 &e >---"); + c.get("Language.InformationPage.Page", "&e-----< &6%1 &e>-----"); + c.get("Language.InformationPage.NextPage", "&e-----< &6%1 &e>-----"); + c.get("Language.InformationPage.NoNextPage", "&e-----------------------"); + + c.get("Language.Chat.ChatChannelChange", "&eChanged residence chat channel to &6%1!"); + c.get("Language.Chat.ChatChannelLeave", "&eLeft residence chat"); + + c.get("Language.Chat.JoinFirst", "&4Join residence chat channel first..."); + c.get("Language.Chat.InvalidChannel", "&4Invalid Channel..."); + c.get("Language.Chat.InvalidColor", "&4Incorrect color code"); + c.get("Language.Chat.NotInChannel", "&4Player is not in channel"); + c.get("Language.Chat.Kicked", "&6%1 &ewas kicked from &6%2 &echannel"); + c.get("Language.Chat.InvalidPrefixLength", "&4Prefix is to long. Allowed length: %1"); + c.get("Language.Chat.ChangedColor", "&eResidence chat channel color changed to %1"); + c.get("Language.Chat.ChangedPrefix", "&eResidence chat channel prefix changed to %1"); + + c.get("Language.Shop.ListTopLine", "&6%1 &eShop list - Page &6%2 &eof &6%3 %4"); + c.get("Language.Shop.List", " &e%1. &6%2 &e(&6%3&e) %4"); + c.get("Language.Shop.ListVoted", "&e%1 (&6%2&e)"); + c.get("Language.Shop.ListLiked", "&eLikes: &0%1"); + + c.get("Language.Shop.VotesTopLine", "&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5"); + c.get("Language.Shop.VotesList", " &e%1. &6%2 &e%3 &7%4"); + + c.get("Language.Shop.NoDesc", "&6No description"); + c.get("Language.Shop.Desc", "&6Description:\n%1"); + c.get("Language.Shop.DescChange", "&6Description changed to: %1"); + c.get("Language.Shop.NewBoard", "&6Successfully added new shop sign board"); + c.get("Language.Shop.DeleteBoard", "&6Right click sign of board you want to delete"); + c.get("Language.Shop.DeletedBoard", "&6Sign board removed"); + c.get("Language.Shop.IncorrectBoard", "&cThis is not sign board, try performing command again and clicking correct sign"); + c.get("Language.Shop.InvalidSelection", "&cLeft click with selection tool top left sign and then right click bottom right"); + c.get("Language.Shop.VoteChanged", "&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence"); + c.get("Language.Shop.Voted", "&6You voted, and gave &e%1 &6votes to &e%2 &6residence"); + c.get("Language.Shop.Liked", "&6You liked &e%1 &6residence"); + c.get("Language.Shop.AlreadyLiked", "&6You already liked &e%1 &6residence"); + c.get("Language.Shop.NoVotes", "&cThere is no registered votes for this residence"); + c.get("Language.Shop.CantVote", "&cResidence don't have shop flag set to true"); + c.get("Language.Shop.VotedRange", "&6Vote range is from &e%1 &6to &e%2"); + c.get("Language.Shop.SignLines.1", "&e--== &8%1 &e==--"); + c.get("Language.Shop.SignLines.2", "&9%1"); + c.get("Language.Shop.SignLines.3", "&4%1"); + c.get("Language.Shop.SignLines.4", "&8%1&e (&8%2&e)"); + c.get("Language.Shop.SignLines.Likes4", "&9Likes: &8%2"); + + c.get("Language.RandomTeleport.TpLimit", "&eYou can't teleport so fast, please wait &6%1 &esec and try again"); + c.get("Language.RandomTeleport.TeleportSuccess", "&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation"); + c.get("Language.RandomTeleport.IncorrectLocation", "&6Could not find correct teleport location, please wait &e%1 &6sec and try again."); + c.get("Language.RandomTeleport.TeleportStarted", "&eTeleportation started, don't move for next &6%4 &esec."); + c.get("Language.RandomTeleport.WorldList", "&ePossible worlds: &6%1"); + + c.get("Language.General.DisabledWorld", "&cResidence plugin is disabled in this world"); + c.get("Language.General.UseNumbers", "&cPlease use numbers..."); writer.addComment("Language.CantPlaceLava", "Replace all text with '' to disable this message"); - GetConfig("Language.General.CantPlaceLava", "&cYou can't place lava outside residence and higher than &6%1 &cblock level", writer, conf, true); + c.get("Language.General.CantPlaceLava", "&cYou can't place lava outside residence and higher than &6%1 &cblock level"); writer.addComment("Language.CantPlaceWater", "Replace all text with '' to disable this message"); - GetConfig("Language.General.CantPlaceWater", "&cYou can't place Water outside residence and higher than &6%1 &cblock level", writer, conf, true); - GetConfig("Language.General.NoPermission", "&cYou dont have permission for this.", writer, conf, true); - GetConfig("Language.General.DefaultUsage", "&eType &6/%1 ? &efor more info", writer, conf, true); - GetConfig("Language.General.MaterialGet", "&eThe material name for ID &6%1 &eis &6%2", writer, conf, true); - GetConfig("Language.General.MarketList", "&e---- &6Market List &e----", writer, conf, true); - GetConfig("Language.General.Separator", "&e----------------------------------------------------", writer, conf, true); - GetConfig("Language.General.AdminOnly", "&cOnly admins have access to this command.", writer, conf, true); - GetConfig("Language.General.InfoTool", "&e- Info Tool: &6%1", writer, conf, true); - GetConfig("Language.General.ListMaterialAdd", "&6%1 &eadded to the residence &6%2", writer, conf, true); - GetConfig("Language.General.ListMaterialRemove", "&6%1 &eremoved from the residence &6%2", writer, conf, true); - GetConfig("Language.General.ItemBlacklisted", "&cYou are blacklisted from using this item here.", writer, conf, true); - GetConfig("Language.General.WorldPVPDisabled", "&cWorld PVP is disabled.", writer, conf, true); - GetConfig("Language.General.NoPVPZone", "&cNo PVP zone.", writer, conf, true); - GetConfig("Language.General.InvalidHelp", "&cInvalid help page.", writer, conf, true); - - GetConfig("Language.General.TeleportDeny", "&cYou dont have teleport access.", writer, conf, true); - GetConfig("Language.General.TeleportSuccess", "&eTeleported!", writer, conf, true); - GetConfig("Language.General.TeleportConfirm", - "&cThis teleport is not safe, you will fall for &6%1 &cblocks. Use &6/res tpconfirm &cto perform teleportation anyways.", writer, conf, true); - GetConfig("Language.General.TeleportStarted", - "&eTeleportation to &6%1 &estarted, don't move for next &6%2 &esec.", writer, conf, true); - GetConfig("Language.General.TeleportCanceled", - "&eTeleportation canceled!", writer, conf, true); - GetConfig("Language.General.NoTeleportConfirm", "&eThere is no teleports waiting for confirmation!", writer, conf, true); - GetConfig("Language.General.HelpPageHeader", "&eHelp Pages - &6%1 &e- Page <&6%2 &eof &6%3&e>", writer, conf, true); - GetConfig("Language.General.ListExists", "&cList already exists...", writer, conf, true); - GetConfig("Language.General.ListRemoved", "&eList removed...", writer, conf, true); - GetConfig("Language.General.ListCreate", "&eCreated list &6%1", writer, conf, true); - GetConfig("Language.General.PhysicalAreas", "&ePhysical Areas", writer, conf, true); - GetConfig("Language.General.CurrentArea", "&eCurrent Area: &6%1", writer, conf, true); - GetConfig("Language.General.TotalSize", "&eTotal size: &6%1", writer, conf, true); - GetConfig("Language.General.TotalWorth", "&eTotal worth of residence: &6%1 &e(&6%2&e)", writer, conf, true); - GetConfig("Language.General.NotOnline", "&eTarget player must be online.", writer, conf, true); - GetConfig("Language.General.NextPage", "&eNext Page", writer, conf, true); - GetConfig("Language.General.NextInfoPage", "&2| &eNext Page &2>>>", writer, conf, true); - GetConfig("Language.General.PrevInfoPage", "&2<<< &ePrev Page &2|", writer, conf, true); - GetConfig("Language.General.GenericPage", "&ePage &6%1 &eof &6%2", writer, conf, true); - GetConfig("Language.General.WorldEditNotFound", "&cWorldEdit was not detected.", writer, conf, true); - GetConfig("Language.General.CoordsTop", "&eX:&6%1 &eY:&6%2 &eZ:&6%3", writer, conf, true); - GetConfig("Language.General.CoordsBottom", "&eX:&6%1 &eY:&6%2 &eZ:&6%3", writer, conf, true); - GetConfig("Language.General.AdminToggleTurnOn", "&eAutomatic resadmin toggle turned &6On", writer, conf, true); - GetConfig("Language.General.AdminToggleTurnOff", "&eAutomatic resadmin toggle turned &6Off", writer, conf, true); - GetConfig("Language.General.NoSpawn", "&eYou do not have &6move &epermissions at your spawn point. Relocating", writer, conf, true); - GetConfig("Language.General.CompassTargetReset", "&eYour compass has been reset", writer, conf, true); - GetConfig("Language.General.CompassTargetSet", "&eYour compass now points to &6%1", writer, conf, true); - GetConfig("Language.General.Ignorelist", "&2Ignorelist:&6", writer, conf, true); - GetConfig("Language.General.Blacklist", "&cBlacklist:&6", writer, conf, true); - GetConfig("Language.General.LandCost", "&eLand cost: &6%1", writer, conf, true); - GetConfig("Language.General.True", "&2True", writer, conf, true); - GetConfig("Language.General.False", "&cFalse", writer, conf, true); - GetConfig("Language.General.Removed", "&6Removed", writer, conf, true); - GetConfig("Language.General.FlagState", "&eFlag state: %1", writer, conf, true); - GetConfig("Language.General.Land", "&eLand: &6%1", writer, conf, true); - GetConfig("Language.General.Cost", "&eCost: &6%1 &eper &6%2 &edays", writer, conf, true); - GetConfig("Language.General.Status", "&eStatus: %1", writer, conf, true); - GetConfig("Language.General.Available", "&2Available", writer, conf, true); - GetConfig("Language.General.Size", " &eSize: &6%1", writer, conf, true); - GetConfig("Language.General.Flags", "&eFlags: &6%1", writer, conf, true); - GetConfig("Language.General.YourFlags", "&eYour flags: &6%1", writer, conf, true); - GetConfig("Language.General.GroupFlags", "&eGroup flags: &6%1", writer, conf, true); - GetConfig("Language.General.OthersFlags", "&eOthers flags: &6%1", writer, conf, true); - GetConfig("Language.General.Moved", "&eMoved...", writer, conf, true); - GetConfig("Language.General.Name", "&eName: &6%1", writer, conf, true); - GetConfig("Language.General.Lists", "&eLists: &6", writer, conf, true); - GetConfig("Language.General.Residences", "&eResidences&6", writer, conf, true); - GetConfig("Language.General.Owner", "&eOwner: &6%1", writer, conf, true); - GetConfig("Language.General.World", "&eWorld: &6%1", writer, conf, true); - GetConfig("Language.General.Subzones", "&eSubzones", writer, conf, true); + c.get("Language.General.CantPlaceWater", "&cYou can't place Water outside residence and higher than &6%1 &cblock level"); + c.get("Language.General.NoPermission", "&cYou dont have permission for this."); + c.get("Language.General.DefaultUsage", "&eType &6/%1 ? &efor more info"); + c.get("Language.General.MaterialGet", "&eThe material name for ID &6%1 &eis &6%2"); + c.get("Language.General.MarketList", "&e---- &6Market List &e----"); + c.get("Language.General.Separator", "&e----------------------------------------------------"); + c.get("Language.General.AdminOnly", "&cOnly admins have access to this command."); + c.get("Language.General.InfoTool", "&e- Info Tool: &6%1"); + c.get("Language.General.ListMaterialAdd", "&6%1 &eadded to the residence &6%2"); + c.get("Language.General.ListMaterialRemove", "&6%1 &eremoved from the residence &6%2"); + c.get("Language.General.ItemBlacklisted", "&cYou are blacklisted from using this item here."); + c.get("Language.General.WorldPVPDisabled", "&cWorld PVP is disabled."); + c.get("Language.General.NoPVPZone", "&cNo PVP zone."); + c.get("Language.General.InvalidHelp", "&cInvalid help page."); + + c.get("Language.General.TeleportDeny", "&cYou dont have teleport access."); + c.get("Language.General.TeleportSuccess", "&eTeleported!"); + c.get("Language.General.TeleportConfirm", + "&cThis teleport is not safe, you will fall for &6%1 &cblocks. Use &6/res tpconfirm &cto perform teleportation anyways."); + c.get("Language.General.TeleportStarted", + "&eTeleportation to &6%1 &estarted, don't move for next &6%2 &esec."); + c.get("Language.General.TeleportCanceled", + "&eTeleportation canceled!"); + c.get("Language.General.NoTeleportConfirm", "&eThere is no teleports waiting for confirmation!"); + c.get("Language.General.HelpPageHeader", "&eHelp Pages - &6%1 &e- Page <&6%2 &eof &6%3&e>"); + c.get("Language.General.ListExists", "&cList already exists..."); + c.get("Language.General.ListRemoved", "&eList removed..."); + c.get("Language.General.ListCreate", "&eCreated list &6%1"); + c.get("Language.General.PhysicalAreas", "&ePhysical Areas"); + c.get("Language.General.CurrentArea", "&eCurrent Area: &6%1"); + c.get("Language.General.TotalSize", "&eTotal size: &6%1"); + c.get("Language.General.TotalWorth", "&eTotal worth of residence: &6%1 &e(&6%2&e)"); + c.get("Language.General.NotOnline", "&eTarget player must be online."); + c.get("Language.General.NextPage", "&eNext Page"); + c.get("Language.General.NextInfoPage", "&2| &eNext Page &2>>>"); + c.get("Language.General.PrevInfoPage", "&2<<< &ePrev Page &2|"); + c.get("Language.General.GenericPage", "&ePage &6%1 &eof &6%2"); + c.get("Language.General.WorldEditNotFound", "&cWorldEdit was not detected."); + c.get("Language.General.CoordsTop", "&eX:&6%1 &eY:&6%2 &eZ:&6%3"); + c.get("Language.General.CoordsBottom", "&eX:&6%1 &eY:&6%2 &eZ:&6%3"); + c.get("Language.General.AdminToggleTurnOn", "&eAutomatic resadmin toggle turned &6On"); + c.get("Language.General.AdminToggleTurnOff", "&eAutomatic resadmin toggle turned &6Off"); + c.get("Language.General.NoSpawn", "&eYou do not have &6move &epermissions at your spawn point. Relocating"); + c.get("Language.General.CompassTargetReset", "&eYour compass has been reset"); + c.get("Language.General.CompassTargetSet", "&eYour compass now points to &6%1"); + c.get("Language.General.Ignorelist", "&2Ignorelist:&6"); + c.get("Language.General.Blacklist", "&cBlacklist:&6"); + c.get("Language.General.LandCost", "&eLand cost: &6%1"); + c.get("Language.General.True", "&2True"); + c.get("Language.General.False", "&cFalse"); + c.get("Language.General.Removed", "&6Removed"); + c.get("Language.General.FlagState", "&eFlag state: %1"); + c.get("Language.General.Land", "&eLand: &6%1"); + c.get("Language.General.Cost", "&eCost: &6%1 &eper &6%2 &edays"); + c.get("Language.General.Status", "&eStatus: %1"); + c.get("Language.General.Available", "&2Available"); + c.get("Language.General.Size", " &eSize: &6%1"); + c.get("Language.General.Flags", "&eFlags: &6%1"); + c.get("Language.General.YourFlags", "&eYour flags: &6%1"); + c.get("Language.General.GroupFlags", "&eGroup flags: &6%1"); + c.get("Language.General.OthersFlags", "&eOthers flags: &6%1"); + c.get("Language.General.Moved", "&eMoved..."); + c.get("Language.General.Name", "&eName: &6%1"); + c.get("Language.General.Lists", "&eLists: &6"); + c.get("Language.General.Residences", "&eResidences&6"); + c.get("Language.General.Owner", "&eOwner: &6%1"); + c.get("Language.General.World", "&eWorld: &6%1"); + c.get("Language.General.Subzones", "&eSubzones"); writer.addComment("Language.General.NewPlayerInfo", "The below lines represent various messages residence sends to the players.", "Note that some messages have variables such as %1 that are inserted at runtime."); - GetConfig("Language.General.NewPlayerInfo", - "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", - writer, conf, true); + c.get("Language.General.NewPlayerInfo", + "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName"); writer.addComment("CommandHelp", ""); - GetConfig("CommandHelp.Description", "Contains Help for Residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.Description", "Main Residence Command", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.Info", Arrays.asList("&2Use &6/res [command] ? &2to view more help Information."), writer, conf, true); + c.get("CommandHelp.Description", "Contains Help for Residence"); + c.get("CommandHelp.SubCommands.res.Description", "Main Residence Command"); + c.get("CommandHelp.SubCommands.res.Info", Arrays.asList("&2Use &6/res [command] ? &2to view more help Information.")); // res select - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.Description", "Selection Commands", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.Info", - Arrays.asList("This command selects areas for usage with residence.", "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle."), - writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.Description", "Selection Commands"); + c.get("CommandHelp.SubCommands.res.SubCommands.select.Info", + Arrays.asList("This command selects areas for usage with residence.", "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle.")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Description", "Display selected coordinates", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Info", Arrays.asList("&eUsage: &6/res select coords"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Description", "Display selected coordinates"); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Info", Arrays.asList("&eUsage: &6/res select coords")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Description", "Display selected size", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Info", Arrays.asList("&eUsage: &6/res select size"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Description", "Display selected size"); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Info", Arrays.asList("&eUsage: &6/res select size")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Description", "Turns on auto selection tool", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]"), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Args", "[playername]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Description", "Turns on auto selection tool"); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]")); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Args", "[playername]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Description", "Display selection cost", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Info", Arrays.asList("&eUsage: &6/res select cost"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Description", "Display selection cost"); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Info", Arrays.asList("&eUsage: &6/res select cost")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Description", "Expand Selection Vertically", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Info", - Arrays.asList("&eUsage: &6/res select vert", "Will expand selection as high and as low as allowed."), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Description", "Expand Selection Vertically"); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Info", + Arrays.asList("&eUsage: &6/res select vert", "Will expand selection as high and as low as allowed.")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Description", "Expand Selection to Sky", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Info", Arrays.asList("&eUsage: &6/res select sky", - "Expands as high as your allowed to go."), - writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Description", "Expand Selection to Sky"); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Info", Arrays.asList("&eUsage: &6/res select sky", + "Expands as high as your allowed to go.")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Description", "Expand Selection to Bedrock", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Info", - Arrays.asList("&eUsage: &6/res select bedrock", "Expands as low as your allowed to go."), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Description", "Expand Selection to Bedrock"); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Info", + Arrays.asList("&eUsage: &6/res select bedrock", "Expands as low as your allowed to go.")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Description", "Expand selection in a direction.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Info", - Arrays.asList("&eUsage: &6/res select expand ", "Expands in the direction your looking."), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Description", "Expand selection in a direction."); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Info", + Arrays.asList("&eUsage: &6/res select expand ", "Expands in the direction your looking.")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Description", "Shift selection in a direction", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Info", - Arrays.asList("&eUsage: &6/res select shift ", "Pushes your selection by in the direction your looking."), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Description", "Shift selection in a direction"); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Info", + Arrays.asList("&eUsage: &6/res select shift ", "Pushes your selection by in the direction your looking.")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Description", "Select the chunk your currently in.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Info", - Arrays.asList("&eUsage: &6/res select chunk", "Selects the chunk your currently standing in."), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Description", "Select the chunk your currently in."); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Info", + Arrays.asList("&eUsage: &6/res select chunk", "Selects the chunk your currently standing in.")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Description", "Select a existing area in a residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Info", - Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence."), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Args", "[residence]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Description", "Select a existing area in a residence."); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Info", + Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence.")); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Args", "[residence]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Description", "Set selection using the current WorldEdit selection.", - writer, conf, - true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Info", - Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection."), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Description", "Set selection using the current WorldEdit selection."); + c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Info", + Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection.")); // res create - GetConfig("CommandHelp.SubCommands.res.SubCommands.create.Description", "Create Residences", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.create.Info", Arrays.asList("&eUsage: &6/res create "), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.create.Description", "Create Residences"); + c.get("CommandHelp.SubCommands.res.SubCommands.create.Info", Arrays.asList("&eUsage: &6/res create ")); // res remove - GetConfig("CommandHelp.SubCommands.res.SubCommands.remove.Description", "Remove residences.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("&eUsage: &6/res remove "), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.remove.Args", "[residence]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.remove.Description", "Remove residences."); + c.get("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("&eUsage: &6/res remove ")); + c.get("CommandHelp.SubCommands.res.SubCommands.remove.Args", "[residence]"); // res padd - GetConfig("CommandHelp.SubCommands.res.SubCommands.padd.Description", "Add player to residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.padd.Info", Arrays.asList("&eUsage: &6/res padd [player]", - "Adds essential flags for player"), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.padd.Args", "[residence] [playername]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.padd.Description", "Add player to residence."); + c.get("CommandHelp.SubCommands.res.SubCommands.padd.Info", Arrays.asList("&eUsage: &6/res padd [player]", + "Adds essential flags for player")); + c.get("CommandHelp.SubCommands.res.SubCommands.padd.Args", "[residence] [playername]"); // res pdel - GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Description", "Remove player from residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Info", Arrays.asList("&eUsage: &6/res pdel [player]", - "Removes essential flags from player"), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.pdel.Args", "[residence] [playername]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.pdel.Description", "Remove player from residence."); + c.get("CommandHelp.SubCommands.res.SubCommands.pdel.Info", Arrays.asList("&eUsage: &6/res pdel [player]", + "Removes essential flags from player")); + c.get("CommandHelp.SubCommands.res.SubCommands.pdel.Args", "[residence] [playername]"); // res give - GetConfig("CommandHelp.SubCommands.res.SubCommands.give.Description", "Give residence to player.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.give.Info", Arrays.asList("&eUsage: &6/res give [player]", - "Gives your owned residence to target player"), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.give.Args", "[residence] [playername]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.give.Description", "Give residence to player."); + c.get("CommandHelp.SubCommands.res.SubCommands.give.Info", Arrays.asList("&eUsage: &6/res give [player]", + "Gives your owned residence to target player")); + c.get("CommandHelp.SubCommands.res.SubCommands.give.Args", "[residence] [playername]"); // res info - GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Info", - Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in."), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.info.Args", "[residence]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence."); + c.get("CommandHelp.SubCommands.res.SubCommands.info.Info", + Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in.")); + c.get("CommandHelp.SubCommands.res.SubCommands.info.Args", "[residence]"); // res set - GetConfig("CommandHelp.SubCommands.res.SubCommands.set.Description", "Set general flags on a Residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.set.Info", Arrays.asList("&eUsage: &6/res set [flag] [true/false/remove]", - "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)"), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.set.Args", "[residence] [flag] [true/false/remove]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.set.Description", "Set general flags on a Residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.set.Info", Arrays.asList("&eUsage: &6/res set [flag] [true/false/remove]", + "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)")); + c.get("CommandHelp.SubCommands.res.SubCommands.set.Args", "[residence] [flag] [true/false/remove]"); // res pset - GetConfig("CommandHelp.SubCommands.res.SubCommands.pset.Description", "Set flags on a specific player for a Residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.pset.Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", - "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?"), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.pset.Args", "[residence] [playername] [flag] [true/false/remove]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.pset.Description", "Set flags on a specific player for a Residence."); + c.get("CommandHelp.SubCommands.res.SubCommands.pset.Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", + "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?")); + c.get("CommandHelp.SubCommands.res.SubCommands.pset.Args", "[residence] [playername] [flag] [true/false/remove]"); // res flags - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.Description", "List of flags", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.Info", - Arrays.asList("For flag values, usually true allows the action, and false denys the action."), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.Description", "List of flags"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.Info", + Arrays.asList("For flag values, usually true allows the action, and false denys the action.")); FlagList.clear(); // build FlagList.add("build"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.build.Description", - "allows or denys building", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.build.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.build.Description", + "allows or denys building"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.build.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // use FlagList.add("use"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.use.Description", - "allows or denys use of doors, lever, buttons, etc...", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.use.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.use.Description", + "allows or denys use of doors, lever, buttons, etc..."); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.use.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // move FlagList.add("move"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.move.Description", - "allows or denys movement in the residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.move.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.move.Description", + "allows or denys movement in the residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.move.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // container FlagList.add("container"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.container.Description", - "allows or denys use of furnaces, chests, dispensers, etc...", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.container.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.container.Description", + "allows or denys use of furnaces, chests, dispensers, etc..."); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.container.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // trusted FlagList.add("trusted"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trusted.Description", - "gives build, use, move, container and tp flags", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trusted.Info", - Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trusted.Description", + "gives build, use, move, container and tp flags"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trusted.Info", + Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove")); // place FlagList.add("place"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.place.Description", - "allows or denys only placement of blocks, overrides the build flag", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.place.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.place.Description", + "allows or denys only placement of blocks, overrides the build flag"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.place.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // destroy FlagList.add("destroy"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.destroy.Description", - "allows or denys only destruction of blocks, overrides the build flag", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.destroy.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.destroy.Description", + "allows or denys only destruction of blocks, overrides the build flag"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.destroy.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // pvp FlagList.add("pvp"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pvp.Description", - "allow or deny pvp in the residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pvp.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pvp.Description", + "allow or deny pvp in the residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pvp.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // tp FlagList.add("tp"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tp.Description", - "allow or disallow teleporting to the residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tp.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tp.Description", + "allow or disallow teleporting to the residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tp.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // enderpearl FlagList.add("enderpearl"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enderpearl.Description", - "allow or disallow teleporting to the residence with enderpearl", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enderpearl.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enderpearl.Description", + "allow or disallow teleporting to the residence with enderpearl"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enderpearl.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // admin FlagList.add("admin"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.admin.Description", - "gives a player permission to change flags on a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.admin.Info", - Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.admin.Description", + "gives a player permission to change flags on a residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.admin.Info", + Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove")); // subzone FlagList.add("subzone"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.subzone.Description", - "allow a player to make subzones in the residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.subzone.Info", - Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.subzone.Description", + "allow a player to make subzones in the residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.subzone.Info", + Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove")); // monsters FlagList.add("monsters"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.monsters.Description", - "allows or denys monster spawns", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.monsters.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.monsters.Description", + "allows or denys monster spawns"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.monsters.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // cmonsters FlagList.add("cmonsters"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cmonsters.Description", - "allows or denys custom monster spawns", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cmonsters.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cmonsters.Description", + "allows or denys custom monster spawns"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cmonsters.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // smonsters FlagList.add("smonsters"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.smonsters.Description", - "allows or denys spawner or spawn egg monster spawns", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.smonsters.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.smonsters.Description", + "allows or denys spawner or spawn egg monster spawns"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.smonsters.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // nmonsters FlagList.add("nmonsters"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nmonsters.Description", - "allows or denys natural monster spawns", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nmonsters.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nmonsters.Description", + "allows or denys natural monster spawns"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nmonsters.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // animals FlagList.add("animals"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animals.Description", - "allows or denys animal spawns", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animals.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animals.Description", + "allows or denys animal spawns"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animals.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // canimals FlagList.add("canimals"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.canimals.Description", - "allows or denys custom animal spawns", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.canimals.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.canimals.Description", + "allows or denys custom animal spawns"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.canimals.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // sanimals FlagList.add("sanimals"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.sanimals.Description", - "allows or denys spawner or spawn egg animal spawns", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.sanimals.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.sanimals.Description", + "allows or denys spawner or spawn egg animal spawns"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.sanimals.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // nanimals FlagList.add("nanimals"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nanimals.Description", - "allows or denys natural animal spawns", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nanimals.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nanimals.Description", + "allows or denys natural animal spawns"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nanimals.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // animalkilling FlagList.add("animalkilling"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animalkilling.Description", - "allows or denys animal killing", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animalkilling.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animalkilling.Description", + "allows or denys animal killing"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animalkilling.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // mobkilling FlagList.add("mobkilling"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobkilling.Description", - "allows or denys mob killing", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobkilling.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobkilling.Description", + "allows or denys mob killing"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobkilling.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // nofly FlagList.add("nofly"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nofly.Description", - "allows or denys fly in residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nofly.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nofly.Description", + "allows or denys fly in residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nofly.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // vehicledestroy FlagList.add("vehicledestroy"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.vehicledestroy.Description", - "allows or denys vehicle destroy", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.vehicledestroy.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.vehicledestroy.Description", + "allows or denys vehicle destroy"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.vehicledestroy.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // shear FlagList.add("shear"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shear.Description", - "allows or denys sheep shear", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shear.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shear.Description", + "allows or denys sheep shear"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shear.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // dye FlagList.add("dye"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dye.Description", - "allows or denys sheep dyeing", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dye.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dye.Description", + "allows or denys sheep dyeing"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dye.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // leash FlagList.add("leash"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.leash.Description", - "allows or denys aninal leash", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.leash.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.leash.Description", + "allows or denys aninal leash"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.leash.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // healing FlagList.add("healing"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.healing.Description", - "setting to true makes the residence heal its occupants", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.healing.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.healing.Description", + "setting to true makes the residence heal its occupants"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.healing.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // feed FlagList.add("feed"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.feed.Description", - "setting to true makes the residence feed its occupants", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.feed.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.feed.Description", + "setting to true makes the residence feed its occupants"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.feed.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // tnt FlagList.add("tnt"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tnt.Description", - "allow or deny tnt explosions", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tnt.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tnt.Description", + "allow or deny tnt explosions"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tnt.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // creeper FlagList.add("creeper"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.creeper.Description", - "allow or deny creeper explosions", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.creeper.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.creeper.Description", + "allow or deny creeper explosions"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.creeper.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // ignite FlagList.add("ignite"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.ignite.Description", - "allows or denys fire ignition", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.ignite.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.ignite.Description", + "allows or denys fire ignition"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.ignite.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // firespread FlagList.add("firespread"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.firespread.Description", - "allows or denys fire spread", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.firespread.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.firespread.Description", + "allows or denys fire spread"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.firespread.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // bucket FlagList.add("bucket"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucket.Description", - "allow or deny bucket use", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucket.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucket.Description", + "allow or deny bucket use"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucket.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // bucketfill FlagList.add("bucketfill"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketfill.Description", - "allow or deny bucket fill", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketfill.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketfill.Description", + "allow or deny bucket fill"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketfill.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // bucketempty FlagList.add("bucketempty"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketempty.Description", - "allow or deny bucket empty", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketempty.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketempty.Description", + "allow or deny bucket empty"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketempty.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // flow FlagList.add("flow"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.flow.Description", - "allows or denys liquid flow", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.flow.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.flow.Description", + "allows or denys liquid flow"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.flow.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // lavaflow FlagList.add("lavaflow"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lavaflow.Description", - "allows or denys lava flow, overrides flow", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lavaflow.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lavaflow.Description", + "allows or denys lava flow, overrides flow"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lavaflow.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // waterflow FlagList.add("waterflow"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.waterflow.Description", - "allows or denys water flow, overrides flow", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.waterflow.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.waterflow.Description", + "allows or denys water flow, overrides flow"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.waterflow.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // damage FlagList.add("damage"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.damage.Description", - "allows or denys all entity damage within the residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.damage.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.damage.Description", + "allows or denys all entity damage within the residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.damage.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // piston FlagList.add("piston"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.piston.Description", - "allow or deny pistons from pushing or pulling blocks in the residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.piston.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.piston.Description", + "allow or deny pistons from pushing or pulling blocks in the residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.piston.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // hidden FlagList.add("hidden"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hidden.Description", - "hides residence from list or listall commands", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hidden.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hidden.Description", + "hides residence from list or listall commands"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hidden.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // cake FlagList.add("cake"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cake.Description", - "allows or denys players to eat cake", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cake.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cake.Description", + "allows or denys players to eat cake"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cake.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // lever FlagList.add("lever"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lever.Description", - "allows or denys players to use levers", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lever.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lever.Description", + "allows or denys players to use levers"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lever.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // button FlagList.add("button"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.button.Description", - "allows or denys players to use buttons", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.button.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.button.Description", + "allows or denys players to use buttons"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.button.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // diode FlagList.add("diode"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.diode.Description", - "allows or denys players to use redstone repeaters", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.diode.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.diode.Description", + "allows or denys players to use redstone repeaters"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.diode.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // door FlagList.add("door"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.door.Description", - "allows or denys players to use doors and trapdoors", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.door.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.door.Description", + "allows or denys players to use doors and trapdoors"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.door.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // table FlagList.add("table"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.table.Description", - "allows or denys players to use workbenches", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.table.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.table.Description", + "allows or denys players to use workbenches"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.table.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // enchant FlagList.add("enchant"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enchant.Description", - "allows or denys players to use enchanting tables", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enchant.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enchant.Description", + "allows or denys players to use enchanting tables"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enchant.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // brew FlagList.add("brew"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.brew.Description", - "allows or denys players to use brewing stands", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.brew.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.brew.Description", + "allows or denys players to use brewing stands"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.brew.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // bed FlagList.add("bed"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bed.Description", - "allows or denys players to use beds", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bed.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bed.Description", + "allows or denys players to use beds"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bed.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // pressure FlagList.add("pressure"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pressure.Description", - "allows or denys players to use pressure plates", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pressure.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pressure.Description", + "allows or denys players to use pressure plates"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pressure.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // note FlagList.add("note"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.note.Description", - "allows or denys players to use note blocks", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.note.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.note.Description", + "allows or denys players to use note blocks"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.note.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // redstone FlagList.add("redstone"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.redstone.Description", - "Gives lever, diode, button, pressure, note flags", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.redstone.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.redstone.Description", + "Gives lever, diode, button, pressure, note flags"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.redstone.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // craft FlagList.add("craft"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.craft.Description", - "Gives table, enchant, brew flags", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.craft.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.craft.Description", + "Gives table, enchant, brew flags"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.craft.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // trample FlagList.add("trample"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trample.Description", - "Allows or denys crop trampling in residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trample.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trample.Description", + "Allows or denys crop trampling in residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trample.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // trade FlagList.add("trade"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trade.Description", - "Allows or denys villager trading in residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trade.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trade.Description", + "Allows or denys villager trading in residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trade.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // nomobs FlagList.add("nomobs"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nomobs.Description", - "Prevents monsters from entering residence residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nomobs.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nomobs.Description", + "Prevents monsters from entering residence residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nomobs.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // explode FlagList.add("explode"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.explode.Description", - "Allows or denys explosions in residences", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.explode.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.explode.Description", + "Allows or denys explosions in residences"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.explode.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // witherdamage FlagList.add("witherdamage"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.witherdamage.Description", - "Disables wither damage in residences", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.witherdamage.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.witherdamage.Description", + "Disables wither damage in residences"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.witherdamage.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // fireball FlagList.add("fireball"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.fireball.Description", - "Allows or denys fire balls in residences", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.fireball.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.fireball.Description", + "Allows or denys fire balls in residences"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.fireball.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // command FlagList.add("command"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.command.Description", - "Allows or denys comamnd use in residences", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.command.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.command.Description", + "Allows or denys comamnd use in residences"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.command.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // overridepvp FlagList.add("overridepvp"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.overridepvp.Description", - "Overrides any plugin pvp protection", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.overridepvp.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.overridepvp.Description", + "Overrides any plugin pvp protection"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.overridepvp.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // keepinv FlagList.add("keepinv"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepinv.Description", - "Players keeps inventory after death", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepinv.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepinv.Description", + "Players keeps inventory after death"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepinv.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // keepexp FlagList.add("keepexp"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepexp.Description", - "Players keeps exp after death", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepexp.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepexp.Description", + "Players keeps exp after death"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepexp.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // burn FlagList.add("burn"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.burn.Description", - "allows or denys Mob combustion in residences", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.burn.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.burn.Description", + "allows or denys Mob combustion in residences"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.burn.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // bank FlagList.add("bank"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bank.Description", - "allows or denys deposit/withdraw money from res bank", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bank.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bank.Description", + "allows or denys deposit/withdraw money from res bank"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bank.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // shop FlagList.add("shop"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shop.Description", - "adds residence to special residence shop list", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shop.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shop.Description", + "adds residence to special residence shop list"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shop.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // day FlagList.add("day"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.day.Description", - "sets day time in residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.day.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.day.Description", + "sets day time in residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.day.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // night FlagList.add("night"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.night.Description", - "sets night time in residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.night.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.night.Description", + "sets night time in residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.night.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // chat FlagList.add("chat"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chat.Description", - "Allows to join residence chat room", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chat.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chat.Description", + "Allows to join residence chat room"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chat.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // nodurability FlagList.add("nodurability"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nodurability.Description", - "Prevents item durability loss", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nodurability.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nodurability.Description", + "Prevents item durability loss"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nodurability.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // mobitemdrop FlagList.add("mobitemdrop"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobitemdrop.Description", - "Prevents mob droping items on death", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobitemdrop.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobitemdrop.Description", + "Prevents mob droping items on death"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobitemdrop.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // mobexpdrop FlagList.add("mobexpdrop"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobexpdrop.Description", - "Prevents mob droping exp on death", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobexpdrop.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobexpdrop.Description", + "Prevents mob droping exp on death"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobexpdrop.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // dragongrief FlagList.add("dragongrief"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dragongrief.Description", - "Prevents ender dragon block griefing", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dragongrief.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dragongrief.Description", + "Prevents ender dragon block griefing"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dragongrief.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // snowtrail FlagList.add("snowtrail"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowtrail.Description", - "Prevents snowman snow trails", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowtrail.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowtrail.Description", + "Prevents snowman snow trails"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowtrail.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); + // snowball + FlagList.add("snowball"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowball.Description", + "Prevents snowball knockback"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowball.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // iceform FlagList.add("iceform"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.iceform.Description", - "Prevents from ice forming", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.iceform.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.iceform.Description", + "Prevents from ice forming"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.iceform.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // respawn FlagList.add("respawn"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.respawn.Description", - "Automaticaly respawns player", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.respawn.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.respawn.Description", + "Automaticaly respawns player"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.respawn.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // riding FlagList.add("riding"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.riding.Description", - "Prevent riding a horse", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.riding.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.riding.Description", + "Prevent riding a horse"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.riding.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // Filling with custom flags info Set sec = conf.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands").getKeys(false); @@ -1086,439 +1051,387 @@ public void LoadLang(String lang) { if (FlagList.contains(one.toLowerCase())) continue; String desc = conf.getString("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one + ".Description"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one.toLowerCase() + ".Description", - desc, writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one.toLowerCase() + ".Description", + desc); List info = conf.getStringList("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one + ".Info"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one.toLowerCase() + ".Info", - info, writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one.toLowerCase() + ".Info", + info); FlagList.add(one.toLowerCase()); } //res limits - GetConfig("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.limits.Info", - Arrays.asList("&eUsage: &6/res limits", "Shows the limitations you have on creating and managing residences."), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits."); + c.get("CommandHelp.SubCommands.res.SubCommands.limits.Info", + Arrays.asList("&eUsage: &6/res limits", "Shows the limitations you have on creating and managing residences.")); // res tpset - GetConfig("CommandHelp.SubCommands.res.SubCommands.tpset.Description", "Set the teleport location of a Residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.tpset.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.tpset.Description", "Set the teleport location of a Residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.tpset.Info", Arrays.asList("&eUsage: &6/res tpset", "This will set the teleport location for a residence to where your standing.", - "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence."), - writer, conf, true); + "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence.")); // res tp - GetConfig("CommandHelp.SubCommands.res.SubCommands.tp.Description", "Teleport to a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.tp.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.tp.Description", "Teleport to a residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.tp.Info", Arrays.asList("&eUsage: &6/res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", - "Your permission group must also be allowed to teleport by the server admin."), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.tp.Args", "[residence]", writer, conf, true); + "Your permission group must also be allowed to teleport by the server admin.")); + c.get("CommandHelp.SubCommands.res.SubCommands.tp.Args", "[residence]"); // res rt - GetConfig("CommandHelp.SubCommands.res.SubCommands.rt.Description", "Teleports to random location in world", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rt.Info", - Arrays.asList("&eUsage: &6/res rt", "Teleports you to random location in defined world."), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.rt.Description", "Teleports to random location in world"); + c.get("CommandHelp.SubCommands.res.SubCommands.rt.Info", + Arrays.asList("&eUsage: &6/res rt", "Teleports you to random location in defined world.")); // res rc - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.Description", "Joins current or defined residence chat chanel", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.Info", - Arrays.asList("&eUsage: &6/res rc (residence)", "Teleports you to random location in defined world."), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.rc.Description", "Joins current or defined residence chat chanel"); + c.get("CommandHelp.SubCommands.res.SubCommands.rc.Info", + Arrays.asList("&eUsage: &6/res rc (residence)", "Teleports you to random location in defined world.")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.leave.Description", "Leaves current residence chat chanel", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.leave.Info", Arrays.asList("&eUsage: &6/res rc leave", - "If you are in residence chat cnahel then you will leave it"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.leave.Description", "Leaves current residence chat chanel"); + c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.leave.Info", Arrays.asList("&eUsage: &6/res rc leave", + "If you are in residence chat cnahel then you will leave it")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setcolor.Description", "Sets residence chat chanel text color", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setcolor.Info", Arrays.asList("&eUsage: &6/res rc setcolor [colorCode]", - "Sets residence chat chanel text color"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setcolor.Description", "Sets residence chat chanel text color"); + c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setcolor.Info", Arrays.asList("&eUsage: &6/res rc setcolor [colorCode]", + "Sets residence chat chanel text color")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setprefix.Description", "Sets residence chat chanel prefix", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setprefix.Info", Arrays.asList("&eUsage: &6/res rc setprefix [newName]", - "Sets residence chat chanel prefix"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setprefix.Description", "Sets residence chat chanel prefix"); + c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setprefix.Info", Arrays.asList("&eUsage: &6/res rc setprefix [newName]", + "Sets residence chat chanel prefix")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.kick.Description", "Kicks player from chanel", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", - "Kicks player from chanel"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.kick.Description", "Kicks player from chanel"); + c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", + "Kicks player from chanel")); // res expand - GetConfig("CommandHelp.SubCommands.res.SubCommands.expand.Description", "Expands residence in direction you looking", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.expand.Info", - Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional"), writer, conf, - true); + c.get("CommandHelp.SubCommands.res.SubCommands.expand.Description", "Expands residence in direction you looking"); + c.get("CommandHelp.SubCommands.res.SubCommands.expand.Info", + Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); // res contract - GetConfig("CommandHelp.SubCommands.res.SubCommands.contract.Description", "Contracts residence in direction you looking", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.contract.Info", - Arrays.asList("&eUsage: &6/res contract (residence [amount])", "Contracts residence in direction you looking.", "Residence name is optional"), writer, conf, - true); + c.get("CommandHelp.SubCommands.res.SubCommands.contract.Description", "Contracts residence in direction you looking"); + c.get("CommandHelp.SubCommands.res.SubCommands.contract.Info", + Arrays.asList("&eUsage: &6/res contract (residence [amount])", "Contracts residence in direction you looking.", "Residence name is optional")); // res shop - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.Description", "Manage residence shop", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.Info", Arrays.asList("Manages residence shop feature"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.Description", "Manage residence shop"); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.Info", Arrays.asList("Manages residence shop feature")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Description", "Shows list of res shops", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Info", Arrays.asList("&eUsage: &6/res shop list", - "Shows full list of all residences with shop flag"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Description", "Shows list of res shops"); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Info", Arrays.asList("&eUsage: &6/res shop list", + "Shows full list of all residences with shop flag")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Description", "Vote for residence shop", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", - "Votes for current or defined residence"), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Args", "[residence]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Description", "Vote for residence shop"); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", + "Votes for current or defined residence")); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Args", "[residence]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Description", "Give like for residence shop", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Info", Arrays.asList("&eUsage: &6/res shop like ", - "Gives like for residence shop"), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Args", "[residenceshop]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Description", "Give like for residence shop"); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Info", Arrays.asList("&eUsage: &6/res shop like ", + "Gives like for residence shop")); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Args", "[residenceshop]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Description", "Shows res shop votes", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", - "Shows full vote list of current or defined residence shop"), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Args", "[residenceshop]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Description", "Shows res shop votes"); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", + "Shows full vote list of current or defined residence shop")); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Args", "[residenceshop]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Description", "Shows res shop likes", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", - "Shows full like list of current or defined residence shop"), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Args", "[residenceshop]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Description", "Shows res shop likes"); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", + "Shows full like list of current or defined residence shop")); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Args", "[residenceshop]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Description", "Sets residence shop description", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", - "Sets residence shop description. Color code supported. For new line use /n"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Description", "Sets residence shop description"); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", + "Sets residence shop description. Color code supported. For new line use /n")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Description", "Create res shop board", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", - "Creates res shop board from selected area. Place - position from which to start filling board"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Description", "Create res shop board"); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", + "Creates res shop board from selected area. Place - position from which to start filling board")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Description", "Deletes res shop board", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", - "Deletes res shop board bi right clicking on one of signs"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Description", "Deletes res shop board"); + c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", + "Deletes res shop board bi right clicking on one of signs")); // res tpconfirm - GetConfig("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", - Arrays.asList("&eUsage: &6/res tpconfirm", "Teleports you to a residence, when teleportation is unsafe."), - writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning"); + c.get("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", + Arrays.asList("&eUsage: &6/res tpconfirm", "Teleports you to a residence, when teleportation is unsafe.")); // res subzone - GetConfig("CommandHelp.SubCommands.res.SubCommands.subzone.Description", "Create subzones in residences.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.subzone.Info", - Arrays.asList("&eUsage: &6/res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.subzone.Args", "[residence]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.subzone.Description", "Create subzones in residences."); + c.get("CommandHelp.SubCommands.res.SubCommands.subzone.Info", + Arrays.asList("&eUsage: &6/res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in.")); + c.get("CommandHelp.SubCommands.res.SubCommands.subzone.Args", "[residence]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.Description", "Manage physical areas for a residence.", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.area.Description", "Manage physical areas for a residence."); //res area - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Description", "List physical areas in a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Info", - Arrays.asList("&eUsage: &6/res area list [residence] "), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Description", "List coordinates and other Info for areas", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] "), writer, - conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Description", "Add physical areas to a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Info", - Arrays.asList("&eUsage: &6/res area add [residence] [areaID]", "You must first select two points first."), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Description", "Remove physical areas from a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("&eUsage: &6/res area remove [residence] [areaID]"), writer, - conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Description", "Replace physical areas in a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("&eUsage: &6/res area replace [residence] [areaID]", - "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger."), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Args", "[residence]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Description", "List physical areas in a residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Info", + Arrays.asList("&eUsage: &6/res area list [residence] ")); + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Description", "List coordinates and other Info for areas"); + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] ")); + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Description", "Add physical areas to a residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Info", + Arrays.asList("&eUsage: &6/res area add [residence] [areaID]", "You must first select two points first.")); + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Description", "Remove physical areas from a residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("&eUsage: &6/res area remove [residence] [areaID]")); + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Description", "Replace physical areas in a residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("&eUsage: &6/res area replace [residence] [areaID]", + "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger.")); + c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Args", "[residence]"); // res message - GetConfig("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.message.Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", - "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.message.Args", "[residence] [enter/leave]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages"); + c.get("CommandHelp.SubCommands.res.SubCommands.message.Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", + "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); + c.get("CommandHelp.SubCommands.res.SubCommands.message.Args", "[residence] [enter/leave]"); // res lease - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.Description", "Manage residence leases", writer, conf, true); - GetConfig( - "CommandHelp.SubCommands.res.SubCommands.lease.Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", - "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.Args", "[renew/cost] [residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", - Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite."), writer, conf, - true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Description", "Renew the lease time", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Info", - Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence."), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Description", "Lease end date", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Info", - Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time."), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Description", "Shows renew cost", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Info", - Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease."), writer, conf, - true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Args", "[residence]", writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.lease.Description", "Manage residence leases"); + c.get("CommandHelp.SubCommands.res.SubCommands.lease.Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", + "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money.")); + c.get("CommandHelp.SubCommands.res.SubCommands.lease.Args", "[renew/cost] [residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time"); + c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", + Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite.")); + c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Description", "Renew the lease time"); + c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Info", + Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence.")); + c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Description", "Lease end date"); + c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Info", + Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time.")); + c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Description", "Shows renew cost"); + c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Info", + Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease.")); + c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Args", "[residence]"); // res bank - GetConfig("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.bank.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.bank.Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", - "You must have the +bank flag."), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.bank.Args", "[deposit/withdraw] [residence]", writer, conf, true); + "You must have the +bank flag.")); + c.get("CommandHelp.SubCommands.res.SubCommands.bank.Args", "[deposit/withdraw] [residence]"); // res confirm - GetConfig("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.confirm.Info", Arrays.asList("&eUsage: &6/res confirm", "Confirms removal of a residence."), writer, conf, - true); + c.get("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence."); + c.get("CommandHelp.SubCommands.res.SubCommands.confirm.Info", Arrays.asList("&eUsage: &6/res confirm", "Confirms removal of a residence.")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.gset.Description", "Set flags on a specific group for a Residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.gset.Info", - Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?"), writer, conf, true); + c.get("CommandHelp.SubCommands.res.SubCommands.gset.Description", "Set flags on a specific group for a Residence."); + c.get("CommandHelp.SubCommands.res.SubCommands.gset.Info", + Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lset.Description", "Change blacklist and ignorelist options", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lset.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.lset.Description", "Change blacklist and ignorelist options"); + c.get("CommandHelp.SubCommands.res.SubCommands.lset.Info", Arrays.asList("&eUsage: &6/res lset [blacklist/ignorelist] [material]", "&eUsage: &6/res lset Info", "Blacklisting a material prevents it from being placed in the residence.", - "Ignorelist causes a specific material to not be protected by Residence."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lset.Args", "[residence] [blacklist/ignorelist] [material]", writer, conf, true); + "Ignorelist causes a specific material to not be protected by Residence.")); + c.get("CommandHelp.SubCommands.res.SubCommands.lset.Args", "[residence] [blacklist/ignorelist] [material]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("&eUsage: &6/res removeall [owner]", + c.get("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player."); + c.get("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("&eUsage: &6/res removeall [owner]", "Removes all residences owned by a specific player.'", - "Requires /resadmin if you use it on anyone besides yourself."), writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.removeall.Args", "[playername]", writer, conf, true); + "Requires /resadmin if you use it on anyone besides yourself.")); + c.get("CommandHelp.SubCommands.res.SubCommands.removeall.Args", "[playername]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.list.Description", "List Residences", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.list.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.list.Description", "List Residences"); + c.get("CommandHelp.SubCommands.res.SubCommands.list.Info", Arrays.asList("&eUsage: &6/res list ", "Lists all the residences a player owns (except hidden ones).", "If listing your own residences, shows hidden ones as well.", - "To list everyones residences, use /res listall."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.list.Args", "[playername]", writer, conf, true); + "To list everyones residences, use /res listall.")); + c.get("CommandHelp.SubCommands.res.SubCommands.list.Args", "[playername]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.listhidden.Description", "List Hidden Residences", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.listhidden.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.listhidden.Description", "List Hidden Residences"); + c.get("CommandHelp.SubCommands.res.SubCommands.listhidden.Info", Arrays.asList("&eUsage: &6/res listhidden ", - "Lists hidden residences for a player."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.listhidden.Args", "[playername]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.listall.Description", "List All Residences", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.listall.Info", - Arrays.asList("&eUsage: &6/res listall ", - "Lists hidden residences for a player."), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.listallhidden.Description", "List All Hidden Residences", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.listallhidden.Info", + "Lists hidden residences for a player.")); + c.get("CommandHelp.SubCommands.res.SubCommands.listhidden.Args", "[playername]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.listall.Description", "List All Residences"); + c.get("CommandHelp.SubCommands.res.SubCommands.listall.Info", + Arrays.asList("&eUsage: &6/res listall ", "Lists hidden residences for a player.")); + + c.get("CommandHelp.SubCommands.res.SubCommands.listallhidden.Description", "List All Hidden Residences"); + c.get("CommandHelp.SubCommands.res.SubCommands.listallhidden.Info", Arrays.asList("&eUsage: &6/res listhidden ", - "Lists all hidden residences on the server."), - writer, conf, true); + "Lists all hidden residences on the server.")); - GetConfig("CommandHelp.SubCommands.res.SubCommands.sublist.Description", "List Residence Subzones", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.sublist.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.sublist.Description", "List Residence Subzones"); + c.get("CommandHelp.SubCommands.res.SubCommands.sublist.Info", Arrays.asList("&eUsage: &6/res sublist ", - "List subzones within a residence."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.sublist.Args", "[residence]", writer, conf, true); + "List subzones within a residence.")); + c.get("CommandHelp.SubCommands.res.SubCommands.sublist.Args", "[residence]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.reset.Description", "Reset residence to default flags.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.reset.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.reset.Description", "Reset residence to default flags."); + c.get("CommandHelp.SubCommands.res.SubCommands.reset.Info", Arrays.asList("&eUsage: &6/res reset ", - "Resets the flags on a residence to their default. You must be the owner or an admin to do this."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.reset.Args", "[residence]", writer, conf, true); + "Resets the flags on a residence to their default. You must be the owner or an admin to do this.")); + c.get("CommandHelp.SubCommands.res.SubCommands.reset.Args", "[residence]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Description", "Renames a residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.rename.Description", "Renames a residence."); + c.get("CommandHelp.SubCommands.res.SubCommands.rename.Info", Arrays.asList("&eUsage: &6/res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", - "The name must not already be taken by another residence."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.rename.Args", "[residence]", writer, conf, true); + "The name must not already be taken by another residence.")); + c.get("CommandHelp.SubCommands.res.SubCommands.rename.Args", "[residence]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.kick.Description", "Kicks player from residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.kick.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.kick.Description", "Kicks player from residence."); + c.get("CommandHelp.SubCommands.res.SubCommands.kick.Info", Arrays.asList("&eUsage: &6/res kick ", "You must be the owner or an admin to do this.", - "Player should be online."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.kick.Args", "[playername]", writer, conf, true); + "Player should be online.")); + c.get("CommandHelp.SubCommands.res.SubCommands.kick.Args", "[playername]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Description", "Mirrors Flags", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.mirror.Description", "Mirrors Flags"); + c.get("CommandHelp.SubCommands.res.SubCommands.mirror.Info", Arrays.asList("&eUsage: &6/res mirror [Source Residence] [Target Residence]", - "Mirrors flags from one residence to another. You must be owner of both or a admin to do this."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Args", "[residence] [residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.Description", "Buy, Sell, or Rent Residences", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.mirror.Info", - Arrays.asList("&eUsage: &6/res market ? for more Info"), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Description", "Get economy Info on residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Info", - Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Description", "Lists rentable and for sale residences.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Info", - Arrays.asList("&eUsage: &6/res market list"), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Description", "Sell a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Info", + "Mirrors flags from one residence to another. You must be owner of both or a admin to do this.")); + c.get("CommandHelp.SubCommands.res.SubCommands.mirror.Args", "[residence] [residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.market.Description", "Buy, Sell, or Rent Residences"); + c.get("CommandHelp.SubCommands.res.SubCommands.mirror.Info", + Arrays.asList("&eUsage: &6/res market ? for more Info")); + + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Description", "Get economy Info on residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Info", + Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost.")); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Description", "Lists rentable and for sale residences."); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Info", + Arrays.asList("&eUsage: &6/res market list")); + + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Description", "Sell a residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Info", Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", - "Another player can buy the residence with /res market buy"), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Description", "Set market sign", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Info", - Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Description", "Buy a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Info", - Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Description", "Stops selling a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Info", - Arrays.asList("&eUsage: &6/res market unsell [residence]"), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Description", "ent a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Info", + "Another player can buy the residence with /res market buy")); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Description", "Set market sign"); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Info", + Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at.")); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Description", "Buy a residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Info", + Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale.")); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Description", "Stops selling a residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Info", + Arrays.asList("&eUsage: &6/res market unsell [residence]")); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Description", "ent a residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Info", Arrays.asList("&eUsage: &6/res market rent [residence] ", - "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Args", "[cresidence] [true/false]", writer, conf, true); + "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.")); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Args", "[cresidence] [true/false]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Description", "Make a residence rentable.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Description", "Make a residence rentable."); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Info", Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", - "Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Args", "[residence]", writer, conf, true); + "Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires.")); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Args", "[residence]"); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Description", "Remove a residence from rent or rentable.", writer, conf, - true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Description", "Remove a residence from rent or rentable."); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Info", Arrays.asList("&eUsage: &6/res market release [residence]", "If you are the renter, this command releases the rent on the house for you.", - "If you are the owner, this command makes the residence not for rent anymore."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Args", "[residence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.current.Description", "Show residence your currently in.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.current.Info", - Arrays.asList("&eUsage: &6/res current"), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.signupdate.Description", "Updated residence signs", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.signupdate.Info", - Arrays.asList("&eUsage: &6/res signupdate"), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.reload.Description", "reload lanf or config files", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.reload.Info", - Arrays.asList("&eUsage: &6/res reload [config/lang]"), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.Description", "Predefined permission lists", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.Info", - Arrays.asList("Predefined permissions that can be applied to a residence."), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Description", "Add a list", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Info", - Arrays.asList("&eUsage: &6/res lists add "), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Description", "Remove a list", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Info", - Arrays.asList("&eUsage: &6/res lists remove "), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Description", "Apply a list to a residence", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Info", - Arrays.asList("&eUsage: &6/res lists apply "), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Description", "Set a flag", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Info", - Arrays.asList("&eUsage: &6/res lists set "), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Description", "Set a player flag", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Info", - Arrays.asList("&eUsage: &6/res lists pset "), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Description", "Set a group flag", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", - Arrays.asList("&eUsage: &6/res lists gset "), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.view.Description", "View a list.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", - Arrays.asList("&eUsage: &6/res lists view "), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.server.Description", "Make land server owned.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.server.Info", - Arrays.asList("&eUsage: &6/resadmin server [residence]", "Make a residence server owned."), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.server.Args", "[cresidence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.setowner.Description", "Change owner of a residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.setowner.Info", - Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]"), - writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.setowner.Args", "[cresidence]", writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.resreload.Info", - Arrays.asList("&eUsage: &6/resreload"), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.resload.Description", "Load residence save file.", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.resload.Info", - Arrays.asList("&eUsage: &6/resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes."), - writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.removeworld.Description", "Remove all residences from world", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.removeworld.Info", - Arrays.asList("&eUsage: &6/res removeworld [worldname]", "Can only be used from console"), writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.signconvert.Description", "Converts signs from ResidenceSign plugin", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.signconvert.Info", - Arrays.asList("&eUsage: &6/res signconvert", "Will try to convert saved sign data from 3rd party plugin"), writer, conf, true); - - GetConfig("CommandHelp.SubCommands.res.SubCommands.version.Description", "how residence version", writer, conf, true); - GetConfig("CommandHelp.SubCommands.res.SubCommands.version.Info", - Arrays.asList("&eUsage: &6/res version"), - writer, conf, true); + "If you are the owner, this command makes the residence not for rent anymore.")); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.current.Description", "Show residence your currently in."); + c.get("CommandHelp.SubCommands.res.SubCommands.current.Info", + Arrays.asList("&eUsage: &6/res current")); + + c.get("CommandHelp.SubCommands.res.SubCommands.signupdate.Description", "Updated residence signs"); + c.get("CommandHelp.SubCommands.res.SubCommands.signupdate.Info", + Arrays.asList("&eUsage: &6/res signupdate")); + + c.get("CommandHelp.SubCommands.res.SubCommands.reload.Description", "reload lanf or config files"); + c.get("CommandHelp.SubCommands.res.SubCommands.reload.Info", + Arrays.asList("&eUsage: &6/res reload [config/lang]")); + + c.get("CommandHelp.SubCommands.res.SubCommands.lists.Description", "Predefined permission lists"); + c.get("CommandHelp.SubCommands.res.SubCommands.lists.Info", + Arrays.asList("Predefined permissions that can be applied to a residence.")); + + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Description", "Add a list"); + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Info", + Arrays.asList("&eUsage: &6/res lists add ")); + + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Description", "Remove a list"); + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Info", + Arrays.asList("&eUsage: &6/res lists remove ")); + + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Description", "Apply a list to a residence"); + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Info", + Arrays.asList("&eUsage: &6/res lists apply ")); + + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Description", "Set a flag"); + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Info", + Arrays.asList("&eUsage: &6/res lists set ")); + + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Description", "Set a player flag"); + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Info", + Arrays.asList("&eUsage: &6/res lists pset ")); + + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Description", "Set a group flag"); + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", + Arrays.asList("&eUsage: &6/res lists gset ")); + + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.view.Description", "View a list."); + c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", + Arrays.asList("&eUsage: &6/res lists view ")); + + c.get("CommandHelp.SubCommands.res.SubCommands.server.Description", "Make land server owned."); + c.get("CommandHelp.SubCommands.res.SubCommands.server.Info", + Arrays.asList("&eUsage: &6/resadmin server [residence]", "Make a residence server owned.")); + c.get("CommandHelp.SubCommands.res.SubCommands.server.Args", "[cresidence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.setowner.Description", "Change owner of a residence."); + c.get("CommandHelp.SubCommands.res.SubCommands.setowner.Info", + Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]")); + c.get("CommandHelp.SubCommands.res.SubCommands.setowner.Args", "[cresidence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence."); + c.get("CommandHelp.SubCommands.res.SubCommands.resreload.Info", + Arrays.asList("&eUsage: &6/resreload")); + + c.get("CommandHelp.SubCommands.res.SubCommands.resload.Description", "Load residence save file."); + c.get("CommandHelp.SubCommands.res.SubCommands.resload.Info", + Arrays.asList("&eUsage: &6/resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes.")); + + c.get("CommandHelp.SubCommands.res.SubCommands.removeworld.Description", "Remove all residences from world"); + c.get("CommandHelp.SubCommands.res.SubCommands.removeworld.Info", + Arrays.asList("&eUsage: &6/res removeworld [worldname]", "Can only be used from console")); + + c.get("CommandHelp.SubCommands.res.SubCommands.signconvert.Description", "Converts signs from ResidenceSign plugin"); + c.get("CommandHelp.SubCommands.res.SubCommands.signconvert.Info", + Arrays.asList("&eUsage: &6/res signconvert", "Will try to convert saved sign data from 3rd party plugin")); + + c.get("CommandHelp.SubCommands.res.SubCommands.version.Description", "how residence version"); + c.get("CommandHelp.SubCommands.res.SubCommands.version.Info", + Arrays.asList("&eUsage: &6/res version")); // Write back config try { - writer.save(f); + c.getW().save(f); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 5aed5db3b..90669ebf8 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -608,7 +608,7 @@ public void run() { Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldGuard"); } - blistener = new ResidenceBlockListener(); + blistener = new ResidenceBlockListener(this); plistener = new ResidencePlayerListener(this); elistener = new ResidenceEntityListener(); flistener = new ResidenceFixesListener(); diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 5d4585058..7920de9e5 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -23,6 +23,7 @@ import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.shopStuff.Vote; +import com.bekvon.bukkit.residence.utils.Debug; public class shop implements cmd { @@ -288,6 +289,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + Debug.D("here 2"); player.sendMessage(Residence.getLM().getMessage("Select.Points")); return true; } @@ -307,6 +309,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); if (loc1.getBlockY() < loc2.getBlockY()) { + Debug.D("here"); player.sendMessage(Residence.getLM().getMessage("Shop.InvalidSelection")); return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/ConfigReader.java b/src/com/bekvon/bukkit/residence/containers/ConfigReader.java new file mode 100644 index 000000000..7bd6cbc74 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/ConfigReader.java @@ -0,0 +1,98 @@ +package com.bekvon.bukkit.residence.containers; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.configuration.file.YamlConfiguration; + +import com.bekvon.bukkit.residence.CommentedYamlConfiguration; + +import org.bukkit.ChatColor; + +public class ConfigReader { + YamlConfiguration config; + CommentedYamlConfiguration writer; + + public ConfigReader(YamlConfiguration config, CommentedYamlConfiguration writer) { + this.config = config; + this.writer = writer; + } + + public CommentedYamlConfiguration getW() { + return writer; + } + + public YamlConfiguration getC() { + return config; + } + + public Boolean get(String path, Boolean boo) { + config.addDefault(path, boo); + copySetting(path); + return config.getBoolean(path); + } + + public int get(String path, int boo) { + config.addDefault(path, boo); + copySetting(path); + return config.getInt(path); + } + + public List getIntList(String path, List list) { + config.addDefault(path, list); + copySetting(path); + return config.getIntegerList(path); + } + + public List get(String path, List list, boolean colorize) { + config.addDefault(path, list); + copySetting(path); + if (colorize) + return ColorsArray(config.getStringList(path)); + else + return config.getStringList(path); + } + + public List get(String path, List list) { + config.addDefault(path, list); + copySetting(path); + return config.getStringList(path); + } + + public String get(String path, String boo) { + config.addDefault(path, boo); + copySetting(path); + return get(path, boo, true); + } + + public String get(String path, String boo, boolean colorize) { + config.addDefault(path, boo); + copySetting(path); + if (colorize) + return ChatColor.translateAlternateColorCodes('&', config.getString(path)); + else + return config.getString(path); + } + + public Double get(String path, Double boo) { + config.addDefault(path, boo); + copySetting(path); + return config.getDouble(path); + } + + public synchronized void copySetting(String path) { + writer.set(path, config.get(path)); + } + + private static List ColorsArray(List text) { + List temp = new ArrayList(); + for (String part : text) { + temp.add(Colors(part)); + } + return temp; + } + + private static String Colors(String text) { + return ChatColor.translateAlternateColorCodes('&', text); + } +} diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index a817b5fcf..f4ba92cdb 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -8,8 +8,8 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.CommentedYamlConfiguration; -import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ConfigReader; public class FlagUtil { @@ -25,20 +25,23 @@ public void load() { YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); conf.options().copyDefaults(true); + + ConfigReader c = new ConfigReader(conf, writer); + Set allFlags = conf.getConfigurationSection("Global.FlagPermission").getKeys(false); for (String oneFlag : allFlags) { - if (!conf.contains("Global.FlagGui." + oneFlag)) + if (!c.getC().contains("Global.FlagGui." + oneFlag)) continue; - if (!conf.contains("Global.FlagGui." + oneFlag + ".Id")) + if (!c.getC().contains("Global.FlagGui." + oneFlag + ".Id")) continue; - if (!conf.contains("Global.FlagGui." + oneFlag + ".Data")) + if (!c.getC().contains("Global.FlagGui." + oneFlag + ".Data")) continue; - int id = ConfigManager.GetConfig("Global.FlagGui." + oneFlag + ".Id", 35, writer, conf); - int data = ConfigManager.GetConfig("Global.FlagGui." + oneFlag + ".Data", 0, writer, conf); + int id = c.get("Global.FlagGui." + oneFlag + ".Id", 35); + int data = c.get("Global.FlagGui." + oneFlag + ".Data", 0); @SuppressWarnings("deprecation") Material Mat = Material.getMaterial(id); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 0dfc7438c..5220dc63e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -4,6 +4,7 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Snowman; @@ -34,12 +35,19 @@ import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; public class ResidenceBlockListener implements Listener { private List MessageInformed = new ArrayList(); private List ResCreated = new ArrayList(); + private Residence plugin; + + public ResidenceBlockListener(Residence residence) { + this.plugin = residence; + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onTreeGrow(StructureGrowEvent event) { @@ -136,6 +144,28 @@ public void onIceForm(BlockFormEvent event) { } } + public static final String SourceResidenceName = "SourceResidenceName"; + + @EventHandler + public void onProjectileHit(EntityChangeBlockEvent event) { + if (event.getEntityType() != EntityType.FALLING_BLOCK) + return; + Entity ent = event.getEntity(); + if (!ent.hasMetadata(SourceResidenceName)) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + String resName = res == null ? "NULL" : res.getName(); + ent.setMetadata(SourceResidenceName, new FixedMetadataValue(plugin, resName)); + } else { + String saved = ent.getMetadata(SourceResidenceName).get(0).asString(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + String resName = res == null ? "NULL" : res.getName(); + if (!saved.equalsIgnoreCase(resName)) { + event.setCancelled(true); + ent.remove(); + } + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockFall(EntityChangeBlockEvent event) { // disabling event on world diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index cc3600ce7..d3f96cadf 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -7,6 +7,8 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -745,6 +747,8 @@ public void onEntityDamage(EntityDamageEvent event) { srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); } boolean srcpvp = true; + boolean allowSnowBall = false; + boolean isSnowBall = false; if (srcarea != null) { srcpvp = srcarea.getPermissions().has("pvp", true); } @@ -755,9 +759,15 @@ public void onEntityDamage(EntityDamageEvent event) { if (damager instanceof Player) { attacker = (Player) damager; } else if (damager instanceof Projectile) { + Projectile project = (Projectile) damager; + if (project.getType() == EntityType.SNOWBALL && srcarea != null) { + isSnowBall = true; + allowSnowBall = srcarea.getPermissions().has("snowball", false); + } attacker = (Player) ((Projectile) damager).getShooter(); } - if (!srcpvp) { + if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { + Debug.D("heres"); attacker.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); event.setCancelled(true); return; @@ -771,7 +781,7 @@ public void onEntityDamage(EntityDamageEvent event) { } } else { /* Normal PvP */ - if (!area.getPermissions().has("pvp", true)) { + if (!isSnowBall && !area.getPermissions().has("pvp", true) || isSnowBall && !allowSnowBall) { attacker.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); event.setCancelled(true); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 0950541f6..c0dbb68b7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -45,7 +45,6 @@ import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; - import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.event.*; diff --git a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java index f8f2fc236..111d30abd 100644 --- a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java @@ -13,6 +13,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; public class SpigotListener implements Listener { + @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onItemDamage(PlayerItemDamageEvent event) { // disabling event on world diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 45849d70c..0da555c4b 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -223,6 +223,8 @@ public static void initValidFlags() { addResidenceOnlyFlag("respawn"); addResidenceOnlyFlag("iceform"); + + addResidenceOnlyFlag("snowball"); addPlayerOrGroupOnlyFlag("admin"); diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index d61913822..c7bd45f22 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence.text; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; @@ -8,7 +9,6 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.java.JavaPlugin; -import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.utils.YmlMaker; @@ -93,8 +93,8 @@ public List getMessageList(String key) { key = "Language." + key; String missing = "Missing locale for " + key; if (customlocale.isList(key)) - return LocaleManager.ColorsArray(customlocale.getStringList(key), true); - return enlocale.getStringList(key).size() > 0 ? LocaleManager.ColorsArray(enlocale.getStringList(key), true) : Arrays.asList(missing); + return ColorsArray(customlocale.getStringList(key)); + return enlocale.getStringList(key).size() > 0 ? ColorsArray(enlocale.getStringList(key)) : Arrays.asList(missing); } /** @@ -122,4 +122,16 @@ public boolean containsKey(String key) { return enlocale.contains(key); return customlocale.contains(key); } + + private static List ColorsArray(List text) { + List temp = new ArrayList(); + for (String part : text) { + temp.add(Colors(part)); + } + return temp; + } + + private static String Colors(String text) { + return ChatColor.translateAlternateColorCodes('&', text); + } } diff --git a/src/plugin.yml b/src/plugin.yml index c4d29f146..6ddb5ff96 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.6.3 +version: 4.0.7.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 0fdb045afddda36b39e753db4b92c57ddd60d727 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 24 Apr 2016 13:07:33 +0300 Subject: [PATCH 0145/1142] We need to close inventory before opening new one And don't ignore ignored worlds for gui clicks --- src/com/bekvon/bukkit/residence/commands/pset.java | 2 ++ src/com/bekvon/bukkit/residence/commands/set.java | 2 ++ .../bukkit/residence/listeners/ResidencePlayerListener.java | 6 ------ 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 6ae638cb0..652a78214 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -69,6 +69,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.setTargePlayer(args[1]); flag.recalculatePlayer(res); + player.closeInventory(); ResidencePlayerListener.GUI.put(player.getName(), flag); player.openInventory(flag.getInventory()); } else @@ -87,6 +88,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.setTargePlayer(args[2]); flag.recalculatePlayer(res); + player.closeInventory(); ResidencePlayerListener.GUI.put(player.getName(), flag); player.openInventory(flag.getInventory()); } else diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index ca17dd732..ef4659c31 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -44,6 +44,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.recalculateResidence(res); + player.closeInventory(); ResidencePlayerListener.GUI.put(player.getName(), flag); player.openInventory(flag.getInventory()); } else @@ -58,6 +59,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.recalculateResidence(res); + player.closeInventory(); ResidencePlayerListener.GUI.put(player.getName(), flag); player.openInventory(flag.getInventory()); } else diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c0dbb68b7..5824c128d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -145,9 +145,6 @@ public void onCommand(PlayerCommandPreprocessEvent event) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onFlagGuiClick(InventoryClickEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getWhoClicked().getWorld())) - return; if (GUI.size() == 0) return; @@ -172,9 +169,6 @@ public void onFlagGuiClick(InventoryClickEvent event) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onFlagGuiClose(InventoryCloseEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; if (GUI.isEmpty()) return; HumanEntity player = event.getPlayer(); From 595aa187b1276ac89e2d82501d10983b6047dffe Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 4 May 2016 15:25:54 +0300 Subject: [PATCH 0146/1142] IceMelt flag --- .../bukkit/residence/LocaleManager.java | 6 + src/com/bekvon/bukkit/residence/NMS.java | 3 + .../bekvon/bukkit/residence/allNms/v1_7.java | 5 + .../residence/allNms/v1_7_Couldron.java | 6 + .../bekvon/bukkit/residence/allNms/v1_8.java | 6 + .../bekvon/bukkit/residence/allNms/v1_9.java | 8 + .../bukkit/residence/commands/market.java | 2 +- .../listeners/ResidenceBlockListener.java | 21 ++- .../listeners/ResidencePlayerListener.java | 4 +- .../residence/protection/FlagPermissions.java | 1 + .../bukkit/residence/signsStuff/SignUtil.java | 138 ++++++++++-------- .../bukkit/residence/signsStuff/Signs.java | 7 +- src/plugin.yml | 2 +- 13 files changed, 136 insertions(+), 73 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index b2897f280..5a7a392bb 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -1032,6 +1032,12 @@ public void LoadLang(String lang) { "Prevents from ice forming"); c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.iceform.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); + // icemelt + FlagList.add("icemelt"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.icemelt.Description", + "Prevents ice from melting"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.icemelt.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // respawn FlagList.add("respawn"); c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.respawn.Description", diff --git a/src/com/bekvon/bukkit/residence/NMS.java b/src/com/bekvon/bukkit/residence/NMS.java index b3a34a950..691a0de60 100644 --- a/src/com/bekvon/bukkit/residence/NMS.java +++ b/src/com/bekvon/bukkit/residence/NMS.java @@ -11,6 +11,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; public interface NMS { @@ -42,4 +43,6 @@ public interface NMS { public String getPotionType(ItemStack potion); public ItemStack itemInMainHand(Player player); + + public boolean isChorusTeleport(TeleportCause tpcause); } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index 72b010251..33fbb121c 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -24,6 +24,7 @@ import org.bukkit.entity.Wolf; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.NMS; @@ -133,4 +134,8 @@ public String getPotionType(ItemStack potion) { public ItemStack getLingeringPotionItem(Entity ent) { return null; } + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + return false; + } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index fe328d5c6..f6f9e88e8 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -24,6 +24,7 @@ import org.bukkit.entity.Wolf; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.NMS; @@ -133,4 +134,9 @@ public String getPotionType(ItemStack potion) { public ItemStack getLingeringPotionItem(Entity ent) { return null; } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + return false; + } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java index 77e12fea2..226b0d8dc 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8.java @@ -26,6 +26,7 @@ import org.bukkit.entity.Wolf; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.NMS; @@ -160,4 +161,9 @@ public String getPotionType(ItemStack potion) { public ItemStack getLingeringPotionItem(Entity ent) { return null; } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + return false; + } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9.java b/src/com/bekvon/bukkit/residence/allNms/v1_9.java index d7b316956..a0cef9748 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9.java @@ -28,6 +28,7 @@ import org.bukkit.entity.Wolf; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.NMS; @@ -174,4 +175,11 @@ public ItemStack getLingeringPotionItem(Entity ent) { return potion.getItem(); } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index e84a9ac48..13d4068fe 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -115,7 +115,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command signInfo.setX(loc.getBlockX()); signInfo.setY(loc.getBlockY()); signInfo.setZ(loc.getBlockZ()); - signInfo.setLocation(loc); + signInfo.updateLocation(); Residence.getSignUtil().getSigns().addSign(signInfo); Residence.getSignUtil().saveSigns(); } else { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 5220dc63e..f8d43e37b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -4,6 +4,8 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -14,6 +16,7 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockDispenseEvent; +import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.event.block.BlockFormEvent; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockIgniteEvent; @@ -135,7 +138,7 @@ public void onIceForm(BlockFormEvent event) { Material ice = Material.getMaterial("FROSTED_ICE"); - if (event.getNewState().getType() != Material.ICE && ice != null && ice != event.getNewState().getType()) + if (event.getNewState().getType() != Material.SNOW && event.getNewState().getType() != Material.ICE && ice != null && ice != event.getNewState().getType()) return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); @@ -144,6 +147,22 @@ public void onIceForm(BlockFormEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onIceMelt(BlockFadeEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + if (event.getNewState().getType() != Material.STATIONARY_WATER && event.getBlock().getState().getType() == Material.SNOW && event.getBlock().getState() + .getType() == Material.SNOW_BLOCK) + return; + + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has("icemelt", true)) { + event.setCancelled(true); + } + } + public static final String SourceResidenceName = "SourceResidenceName"; @EventHandler diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 5824c128d..cd3da30b4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -291,7 +291,7 @@ public void onSignCreate(SignChangeEvent event) { signInfo.setX(loc.getBlockX()); signInfo.setY(loc.getBlockY()); signInfo.setZ(loc.getBlockZ()); - signInfo.setLocation(loc); + signInfo.updateLocation(); Residence.getSignUtil().getSigns().addSign(signInfo); Residence.getSignUtil().saveSigns(); } @@ -931,7 +931,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); if (res != null) { if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event - .getCause() == TeleportCause.PLUGIN) { + .getCause() == TeleportCause.PLUGIN || Residence.getNms().isChorusTeleport(event.getCause())) { String areaname = res.getName(); if (!res.getPermissions().playerHas(player.getName(), "move", true) && !res.isOwner(player)) { event.setCancelled(true); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 0da555c4b..6d32ad1fd 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -223,6 +223,7 @@ public static void initValidFlags() { addResidenceOnlyFlag("respawn"); addResidenceOnlyFlag("iceform"); + addResidenceOnlyFlag("icemelt"); addResidenceOnlyFlag("snowball"); diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 9858cc019..334d73aa1 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -12,6 +12,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.Sign; @@ -44,86 +45,84 @@ public int updateAllSigns() { for (Signs one : temp) { SignUpdate(one); } + saveSigns(); return temp.size(); } // Sign file public void LoadSigns() { - Thread threadd = new Thread() { - public void run() { - Signs.GetAllSigns().clear(); - File file = new File(plugin.getDataFolder(), "Signs.yml"); - YamlConfiguration f = YamlConfiguration.loadConfiguration(file); - - if (!f.isConfigurationSection("Signs")) - return; - - ConfigurationSection ConfCategory = f.getConfigurationSection("Signs"); - ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); - if (categoriesList.size() == 0) - return; - for (String category : categoriesList) { - ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); - Signs newTemp = new Signs(); - newTemp.setCategory(Integer.valueOf(category)); - newTemp.setResidence(NameSection.getString("Residence")); - newTemp.setWorld(NameSection.getString("World")); - newTemp.setX(NameSection.getDouble("X")); - newTemp.setY(NameSection.getDouble("Y")); - newTemp.setZ(NameSection.getDouble("Z")); - - newTemp.setLocation(new Location(Bukkit.getWorld(NameSection.getString("World")), NameSection.getDouble("X"), NameSection.getDouble("Y"), NameSection - .getDouble("Z"))); - - Signs.addSign(newTemp); - } - return; - } - }; - threadd.start(); + Signs.GetAllSigns().clear(); + File file = new File(plugin.getDataFolder(), "Signs.yml"); + YamlConfiguration f = YamlConfiguration.loadConfiguration(file); + + if (!f.isConfigurationSection("Signs")) + return; + + ConfigurationSection ConfCategory = f.getConfigurationSection("Signs"); + ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); + if (categoriesList.size() == 0) + return; + for (String category : categoriesList) { + ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); + Signs newTemp = new Signs(); + newTemp.setCategory(Integer.valueOf(category)); + newTemp.setResidence(NameSection.getString("Residence")); + newTemp.setWorld(NameSection.getString("World")); + newTemp.setX(NameSection.getDouble("X")); + newTemp.setY(NameSection.getDouble("Y")); + newTemp.setZ(NameSection.getDouble("Z")); + + newTemp.GetLocation(); + + Signs.addSign(newTemp); + } + return; } // Signs save file public void saveSigns() { - Thread threadd = new Thread() { - public void run() { - File f = new File(plugin.getDataFolder(), "Signs.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); - - writer.addComment("Signs", "DO NOT EDIT THIS FILE BY HAND!"); - - if (!conf.isConfigurationSection("Signs")) - conf.createSection("Signs"); - - for (Signs one : Signs.GetAllSigns()) { - String path = "Signs." + String.valueOf(one.GetCategory()); - writer.set(path + ".Residence", one.GetResidence()); - writer.set(path + ".World", one.GetWorld()); - writer.set(path + ".X", one.GetX()); - writer.set(path + ".Y", one.GetY()); - writer.set(path + ".Z", one.GetZ()); - } - - try { - writer.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - }; - threadd.start(); + File f = new File(plugin.getDataFolder(), "Signs.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + writer.addComment("Signs", "DO NOT EDIT THIS FILE BY HAND!"); + + if (!conf.isConfigurationSection("Signs")) + conf.createSection("Signs"); + + for (Signs one : Signs.GetAllSigns()) { + String path = "Signs." + String.valueOf(one.GetCategory()); + writer.set(path + ".Residence", one.GetResidence()); + writer.set(path + ".World", one.GetWorld()); + writer.set(path + ".X", one.GetX()); + writer.set(path + ".Y", one.GetY()); + writer.set(path + ".Z", one.GetZ()); + } + + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + return; } public Signs getSignFromLoc(Location loc) { + if (loc == null) + return null; List signList = new ArrayList(); signList.addAll(this.getSigns().GetAllSigns()); for (Signs one : signList) { + if (one == null) + continue; + if (one.GetLocation() == null) + continue; + if (one.GetLocation().getWorld() == null) + continue; if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) continue; if (one.GetX() != loc.getX()) @@ -153,6 +152,7 @@ public void CheckSign(ClaimedResidence res) { continue; this.SignUpdate(one); } + saveSigns(); } public void removeSign(String res) { @@ -174,8 +174,19 @@ public boolean SignUpdate(Signs Sign) { boolean ForRent = Residence.getRentManager().isForRent(landName); Location nloc = Sign.GetLocation(); + + if (nloc == null) { + Signs.removeSign(Sign); + return false; + } + Block block = nloc.getBlock(); + if (block.getType() == Material.AIR) { + Signs.removeSign(Sign); + return false; + } + if (!(block.getState() instanceof Sign)) return false; @@ -187,7 +198,6 @@ public boolean SignUpdate(Signs Sign) { if (!ForRent && !ForSale) { block.breakNaturally(); Signs.removeSign(Sign); - saveSigns(); return true; } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/Signs.java b/src/com/bekvon/bukkit/residence/signsStuff/Signs.java index 6637d2228..399086be3 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/Signs.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/Signs.java @@ -18,17 +18,16 @@ public class Signs { public Signs() { } - public void setLocation(Location Location) { - this.loc = Location; + public Location GetLocation() { + return this.loc; } - public Location GetLocation() { + public void updateLocation() { if (this.loc == null) { World w = Bukkit.getWorld(this.world); if (w != null) this.loc = new Location(Bukkit.getWorld(this.world), this.x, this.y, this.z); } - return this.loc; } public void setCategory(int Category) { diff --git a/src/plugin.yml b/src/plugin.yml index 6ddb5ff96..9c8807c44 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.7.0 +version: 4.0.8.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 17c96339e7948f60db197aece23328cb4fa139b8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 7 May 2016 20:21:02 +0300 Subject: [PATCH 0147/1142] Message on rent ending / rent and sell list remake --- .../bukkit/residence/ConfigManager.java | 22 +++ .../bukkit/residence/LocaleManager.java | 15 +- .../bukkit/residence/commands/market.java | 77 +++++---- .../residence/economy/TransactionManager.java | 58 ++++++- .../residence/economy/rent/RentManager.java | 154 +++++++++++++----- .../listeners/ResidenceBlockListener.java | 2 - .../listeners/ResidencePlayerListener.java | 29 ++++ .../residence/protection/PlayerManager.java | 4 + src/plugin.yml | 2 +- 9 files changed, 277 insertions(+), 86 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index c325c81b7..c314e9ac1 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -57,9 +57,12 @@ public class ConfigManager { protected boolean AdminFullAccess; protected String multiworldPlugin; protected boolean enableRentSystem; + protected boolean RentInformOnEnding; protected boolean leaseAutoRenew; protected boolean ShortInfoUse; protected boolean OnlyLike; + protected int RentInformBefore; + protected int RentInformDelay; protected int rentCheckInterval; protected int chatPrefixLength; protected int leaseCheckInterval; @@ -631,6 +634,13 @@ public void UpdateConfigFile() { c.getW().addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); enableRentSystem = c.get("Global.EnableRentSystem", true); + c.getW().addComment("Global.Rent.Inform.OnEnding", "Informs players on rent time ending"); + RentInformOnEnding = c.get("Global.Rent.Inform.OnEnding", true); + c.getW().addComment("Global.Rent.Inform.Before", "Time range in minutes when to start informing about ending rent"); + RentInformBefore = c.get("Global.Rent.Inform.Before", 1440); + c.getW().addComment("Global.Rent.Inform.Delay", "Time range in seconds for how long to wait after player logs in to inform about ending rents"); + RentInformDelay = c.get("Global.Rent.Inform.Delay", 60); + c.getW().addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); rentCheckInterval = c.get("Global.RentCheckInterval", 10); @@ -854,6 +864,18 @@ private void load(FileConfiguration flags, FileConfiguration groups) { } } + public int getRentInformDelay() { + return RentInformDelay; + } + + public int getRentInformBefore() { + return RentInformBefore; + } + + public boolean isRentInformOnEnding() { + return RentInformOnEnding; + } + public boolean isTNTExplodeBelow() { return TNTExplodeBelow; } diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 5a7a392bb..48d469479 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -213,6 +213,7 @@ public void LoadLang(String lang) { c.get("Language.Residence.RemoveRentable", "&eResidence &6%1 &eis no longer rentable."); c.get("Language.Residence.ForRentSuccess", "&eResidence &6%1 &eis now for rent for &6%2 &eevery &6%3 &edays."); c.get("Language.Residence.RentSuccess", "&eYou have rented Residence &6%1 &efor &6%2 &edays."); + c.get("Language.Residence.EndingRent", "&eRent time is ending for &6%1 &eon &6%2"); c.get("Language.Residence.AlreadyRented", "&eResidence &6%1 &ehas currently been rented to &6%2"); c.get("Language.Residence.AlreadyExists", "&cA residence named &6%1 &calready exists."); c.get("Language.Residence.Create", "&eYou have created residence &6%1&e!"); @@ -255,6 +256,7 @@ public void LoadLang(String lang) { c.get("Language.Rent.ModifyDeny", "&cCannot modify a rented residence."); c.get("Language.Rent.Days", "&eRent days: &6%1"); c.get("Language.Rent.Rented", " &6(Rented)"); + c.get("Language.Rent.RentList", " &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7"); c.get("Language.Rentable.Land", "&eRentable Land: &6"); c.get("Language.Rentable.AutoRenew", "&eRentable Auto Renew: &6%1"); @@ -279,6 +281,7 @@ public void LoadLang(String lang) { c.get("Language.Economy.LeaseInfinite", "&eLease time set to infinite..."); c.get("Language.Economy.MarketDisabled", "&cEconomy Disabled!"); c.get("Language.Economy.SellAmount", "&eSell Amount: &2%1"); + c.get("Language.Economy.SellList", " &6%1&e. &6%2 &e(&6%3&e) - &6%4"); c.get("Language.Economy.LeaseExpire", "&eLease Expire Time: &2%1"); c.get("Language.Expanding.North", "&eExpanding North &6%1 &eblocks"); @@ -1320,8 +1323,16 @@ public void LoadLang(String lang) { c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Description", "Lists rentable and for sale residences."); c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Info", - Arrays.asList("&eUsage: &6/res market list")); - + Arrays.asList("&eUsage: &6/res market list [rent/sell]")); + + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.SubCommands.rent.Description", "Lists rentable residences."); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.SubCommands.rent.Info", + Arrays.asList("&eUsage: &6/res market list rent")); + + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.SubCommands.sell.Description", "Lists for sale residences."); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.SubCommands.sell.Info", + Arrays.asList("&eUsage: &6/res market list sell")); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Description", "Sell a residence"); c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Info", Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 13d4068fe..b2d50b35d 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -33,30 +33,27 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; } String secondCommand = args[1].toLowerCase(); - if (secondCommand.equals("list")) { + + switch (secondCommand.toLowerCase()) { + + case "list": return commandResMarketList(args, resadmin, player, page); - } - if (secondCommand.equals("autorenew")) { + case "autorenew": return commandResMarketAutorenew(args, resadmin, player, page); - } - if (secondCommand.equals("rentable")) { + case "rentable": return commandResMarketRentable(args, resadmin, player, page); - } - if (secondCommand.equals("rent")) { + case "rent": return commandResMarketRent(args, resadmin, player, page); - } - if (secondCommand.equals("release")) { - if (args.length != 3) { + case "release": + if (args.length != 3) return false; - } - if (Residence.getRentManager().isRented(args[2])) { + if (Residence.getRentManager().isRented(args[2])) Residence.getRentManager().removeFromForRent(player, args[2], resadmin); - } else { + else Residence.getRentManager().unrent(player, args[2], resadmin); - } return true; - } - if (secondCommand.equals("sign")) { + + case "sign": if (args.length != 3) { return false; } @@ -126,8 +123,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getSignUtil().CheckSign(res, 5); return true; - } - if (secondCommand.equals("info")) { + + case "info": if (args.length == 2) { String areaname = Residence.getResidenceManager().getNameByLoc(player.getLocation()); boolean sell = Residence.getTransactionManager().viewSaleInfo(areaname, player); @@ -147,25 +144,25 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; } return true; - } - if (secondCommand.equals("buy")) { - if (args.length != 3) { + + case "buy": + if (args.length != 3) return false; - } + Residence.getTransactionManager().buyPlot(args[2], player, resadmin); return true; - } - if (secondCommand.equals("unsell")) { - if (args.length != 3) { + + case "unsell": + if (args.length != 3) return false; - } + Residence.getTransactionManager().removeFromSale(player, args[2], resadmin); return true; - } - if (secondCommand.equals("sell")) { - if (args.length != 4) { + + case "sell": + if (args.length != 4) return false; - } + int amount; try { amount = Integer.parseInt(args[3]); @@ -175,8 +172,9 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } Residence.getTransactionManager().putForSale(args[2], player, amount, resadmin); return true; + default: + return false; } - return false; } private boolean commandResMarketRent(String[] args, boolean resadmin, Player player, int page) { @@ -264,11 +262,20 @@ private boolean commandResMarketList(String[] args, boolean resadmin, Player pla return true; } player.sendMessage(Residence.getLM().getMessage("General.MarketList")); - Residence.getTransactionManager().printForSaleResidences(player); - if (Residence.getConfigManager().enabledRentSystem()) { - Residence.getRentManager().printRentableResidences(player); + if (args.length < 3) + return false; + + if (args[2].equalsIgnoreCase("sell")) { + Residence.getTransactionManager().printForSaleResidences(player, page); + return true; } - return true; + if (args[2].equalsIgnoreCase("rent")) { + if (Residence.getConfigManager().enabledRentSystem()) { + Residence.getRentManager().printRentableResidences(player, page); + } + return true; + } + return false; } } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index f3fded2b2..c94daacb7 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -1,11 +1,13 @@ package com.bekvon.bukkit.residence.economy; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketBuyInterface; import com.bekvon.bukkit.residence.protection.ResidenceManager; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -256,21 +258,59 @@ public boolean viewSaleInfo(String areaname, Player player) { return true; } - public void printForSaleResidences(Player player) { + public void printForSaleResidences(Player player, int page) { Set> set = sellAmount.entrySet(); player.sendMessage(Residence.getLM().getMessage("Economy.LandForSale")); StringBuilder sbuild = new StringBuilder(); sbuild.append(ChatColor.GREEN); - boolean firstadd = true; + + int perpage = 10; + + int pagecount = (int) Math.ceil((double) set.size() / (double) perpage); + + if (page < 1) + page = 1; + + int z = 0; for (Entry land : set) { - if (!firstadd) { - sbuild.append(", "); - } else { - firstadd = false; - } - sbuild.append(land.getKey()); + z++; + if (z <= (page - 1) * perpage) + continue; + if (z > (page - 1) * perpage + perpage) + break; + + ClaimedResidence res = Residence.getResidenceManager().getByName(land.getKey()); + + if (res == null) + continue; + + player.sendMessage(Residence.getLM().getMessage("Economy.SellList", z, land.getKey(), land.getValue(), res.getOwner())); + } + + String separator = ChatColor.GOLD + ""; + String simbol = "\u25AC"; + for (int i = 0; i < 10; i++) { + separator += simbol; } - player.sendMessage(sbuild.toString()); + + if (pagecount == 1) + return; + + int NextPage = page + 1; + NextPage = page < pagecount ? NextPage : page; + int Prevpage = page - 1; + Prevpage = page > 1 ? Prevpage : page; + + String prevCmd = "/res market list sell " + Prevpage; + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; + String nextCmd = "/res market list sell " + NextPage; + String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + prev + "," + next); } public void clearSales() { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index dd3465a35..2aca1d0e9 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence.economy.rent; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; @@ -53,6 +54,20 @@ public List getRentedLands(String playername) { return rentedLands; } + public List getRentedLandsList(String playername) { + List rentedLands = new ArrayList(); + for (Entry oneland : rentedLand.entrySet()) { + if (oneland.getValue().player.equals(playername)) { + ClaimedResidence res = Residence.getResidenceManager().getByName(oneland.getKey()); + if (res != null) + res = res.getTopParent(); + + rentedLands.add(oneland.getKey()); + } + } + return rentedLands; + } + public void setForRent(Player player, String landName, int amount, int days, boolean repeatable, boolean resadmin) { if (!Residence.getConfigManager().enabledRentSystem()) { player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); @@ -302,40 +317,44 @@ public void checkCurrentRents() { while (it.hasNext()) { Entry next = it.next(); RentedLand land = next.getValue(); - if (land.endTime <= System.currentTimeMillis()) { - ClaimedResidence res = Residence.getResidenceManager().getByName(next.getKey()); - if (Residence.getConfigManager().debugEnabled()) - System.out.println("Rent Check: " + next.getKey()); - if (res != null) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); - Residence.getServ().getPluginManager().callEvent(revent); - if (!revent.isCancelled()) { - RentableLand rentable = rentableLand.get(next.getKey()); - if (!rentable.repeatable) { - rentableLand.remove(next.getKey()); + if (land.endTime > System.currentTimeMillis()) + continue; + + ClaimedResidence res = Residence.getResidenceManager().getByName(next.getKey()); + if (Residence.getConfigManager().debugEnabled()) + System.out.println("Rent Check: " + next.getKey()); + if (res != null) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); + Residence.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + continue; + + RentableLand rentable = rentableLand.get(next.getKey()); + if (!rentable.repeatable) { + rentableLand.remove(next.getKey()); + it.remove(); + res.getPermissions().applyDefaultFlags(); + continue; + } + if (land.autoRefresh) { + if (!Residence.getEconomyManager().canAfford(land.player, rentable.cost)) { + it.remove(); + res.getPermissions().applyDefaultFlags(); + } else { + if (!Residence.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { it.remove(); res.getPermissions().applyDefaultFlags(); - } else if (land.autoRefresh) { - if (!Residence.getEconomyManager().canAfford(land.player, rentable.cost)) { - it.remove(); - res.getPermissions().applyDefaultFlags(); - } else { - if (!Residence.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { - it.remove(); - res.getPermissions().applyDefaultFlags(); - } else { - land.endTime = System.currentTimeMillis() + this.daysToMs(rentable.days); - } - } } else { - res.getPermissions().applyDefaultFlags(); - it.remove(); + land.endTime = System.currentTimeMillis() + this.daysToMs(rentable.days); } } - } else { - rentableLand.remove(next.getKey()); - it.remove(); + continue; } + res.getPermissions().applyDefaultFlags(); + it.remove(); + } else { + rentableLand.remove(next.getKey()); + it.remove(); } } } @@ -438,22 +457,83 @@ public void updateRentableName(String oldName, String newName) { } } - public void printRentableResidences(Player player) { + public void printRentableResidences(Player player, int page) { Set> set = rentableLand.entrySet(); player.sendMessage(Residence.getLM().getMessage("Rentable.Land")); StringBuilder sbuild = new StringBuilder(); sbuild.append(ChatColor.GREEN); - boolean firstadd = true; + + int perpage = 10; + + int pagecount = (int) Math.ceil((double) set.size() / (double) perpage); + + if (page < 1) + page = 1; + + int z = 0; + for (Entry land : set) { - if (!this.isRented(land.getKey())) { - if (!firstadd) - sbuild.append(", "); - else - firstadd = false; - sbuild.append(land.getKey()); + + z++; + if (z <= (page - 1) * perpage) + continue; + if (z > (page - 1) * perpage + perpage) + break; + + boolean rented = isRented(land.getKey()); + + if (!land.getValue().repeatable && rented) + continue; + + ClaimedResidence res = Residence.getResidenceManager().getByName(land.getKey()); + + String rentedBy = ""; + + String hover = ""; + if (rented) { + RentedLand rent = rentedLand.get(land.getKey()); + rentedBy = Residence.getLM().getMessage("Residence.RentedBy", rent.player); + hover = GetTime.getTime(rent.endTime); } + if (res == null) + continue; + + String msg = Residence.getLM().getMessage("Rent.RentList", z, land.getKey(), land.getValue().cost, land.getValue().days, land + .getValue().repeatable, + res.getOwner(), rentedBy); + + if (!hover.equalsIgnoreCase("")) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " {\"text\":\"\",\"extra\":[{\"text\":\"" + msg + + "\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"§2" + hover + "\"}}]}"); + else + player.sendMessage(msg); + } - player.sendMessage(sbuild.toString()); + + String separator = ChatColor.GOLD + ""; + String simbol = "\u25AC"; + for (int i = 0; i < 10; i++) { + separator += simbol; + } + + if (pagecount == 1) + return; + + int NextPage = page + 1; + NextPage = page < pagecount ? NextPage : page; + int Prevpage = page - 1; + Prevpage = page > 1 ? Prevpage : page; + + String prevCmd = "/res market list sell " + Prevpage; + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; + String nextCmd = "/res market list sell " + NextPage; + String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + prev + "," + next); } public int getRentCount(String player) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index f8d43e37b..1df505058 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -4,8 +4,6 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index cd3da30b4..001fe18aa 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -38,6 +38,7 @@ import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; @@ -47,6 +48,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.*; import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -55,6 +57,7 @@ import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.utils.ActionBar; +import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -94,6 +97,32 @@ public void reload() { } } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerLogin(PlayerLoginEvent event) { + if (!Residence.getConfigManager().isRentInformOnEnding()) + return; + final Player player = event.getPlayer(); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + public void run() { + if (!player.isOnline()) + return; + List list = Residence.getRentManager().getRentedLandsList(player.getName()); + if (list.isEmpty()) + return; + for (String one : list) { + RentedLand rentedland = Residence.getRentManager().getRentedLand(one); + if (rentedland == null) + continue; + if (rentedland.autoRefresh) + continue; + if (rentedland.endTime - System.currentTimeMillis() < Residence.getConfigManager().getRentInformBefore() * 60 * 24 * 7) { + player.sendMessage(Residence.getLM().getMessage("Residence.EndingRent", one, GetTime.getTime(rentedland.endTime))); + } + } + } + }, Residence.getConfigManager().getRentInformDelay() * 20L); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeShopDayNight(ResidenceFlagChangeEvent event) { if (event.isCancelled()) diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index c16dda8fe..48bb75285 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -120,6 +120,10 @@ public int getMaxRents(String player) { return -1; } + public ResidencePlayer getResidencePlayer(Player player) { + return getResidencePlayer(player.getName()); + } + public ResidencePlayer getResidencePlayer(String player) { ResidencePlayer resPlayer = null; if (players.containsKey(player)) diff --git a/src/plugin.yml b/src/plugin.yml index 9c8807c44..472f2b0ae 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.8.0 +version: 4.0.9.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From a98c4a65041a5392bd3d3d2aac2b0869609b4c5c Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 11 May 2016 12:22:48 +0300 Subject: [PATCH 0148/1142] Dont require residence name if you are in residence --- .../bukkit/residence/commands/market.java | 59 +++++++++++++++---- .../residence/economy/TransactionManager.java | 23 +++++++- .../residence/economy/rent/RentManager.java | 58 ++++++++++++------ .../listeners/ResidenceBlockListener.java | 41 +++++++------ .../protection/ResidenceManager.java | 17 +++--- src/plugin.yml | 2 +- 6 files changed, 143 insertions(+), 57 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index b2d50b35d..803ab9cd2 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -45,12 +45,26 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command case "rent": return commandResMarketRent(args, resadmin, player, page); case "release": - if (args.length != 3) + case "unrent": + if (args.length != 3 && args.length != 2) return false; - if (Residence.getRentManager().isRented(args[2])) - Residence.getRentManager().removeFromForRent(player, args[2], resadmin); + + String area = null; + + if (args.length == 2) + area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + else + area = args[2]; + + if (area == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + + if (Residence.getRentManager().isRented(area)) + Residence.getRentManager().removeFromForRent(player, area, resadmin); else - Residence.getRentManager().unrent(player, args[2], resadmin); + Residence.getRentManager().unrent(player, area, resadmin); return true; case "sign": @@ -144,12 +158,25 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; } return true; - case "buy": - if (args.length != 3) + if (args.length == 2) { + String areaname = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + boolean sell = Residence.getTransactionManager().viewSaleInfo(areaname, player); + if (sell) { + Residence.getTransactionManager().buyPlot(areaname, player, resadmin); + } else { + sender.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); + } + } else if (args.length == 3) { + boolean sell = Residence.getTransactionManager().viewSaleInfo(args[2], player); + if (sell) { + Residence.getTransactionManager().buyPlot(args[2], player, resadmin); + } else { + sender.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); + } + } else { return false; - - Residence.getTransactionManager().buyPlot(args[2], player, resadmin); + } return true; case "unsell": @@ -178,11 +205,15 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } private boolean commandResMarketRent(String[] args, boolean resadmin, Player player, int page) { - if (args.length < 3 || args.length > 4) { + if (args.length < 2 || args.length > 4) { return false; } boolean repeat = false; + + String area = null; + if (args.length == 4) { + area = args[2]; if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { repeat = true; } else if (!args[3].equalsIgnoreCase("f") && !args[3].equalsIgnoreCase("false")) { @@ -190,7 +221,15 @@ private boolean commandResMarketRent(String[] args, boolean resadmin, Player pla return true; } } - Residence.getRentManager().rent(player, args[2], repeat, resadmin); + + if (args.length == 2) + area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + + if (area != null) + Residence.getRentManager().rent(player, area, repeat, resadmin); + else + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index c94daacb7..cb1f8aef4 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -7,7 +7,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketBuyInterface; import com.bekvon.bukkit.residence.protection.ResidenceManager; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -91,6 +90,9 @@ public void putForSale(String areaname, Player player, int amount, boolean resad areaname = area.getName(); + if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) + areaname = areaname.toLowerCase(); + if (!area.isOwner(player) && !resadmin) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; @@ -107,6 +109,7 @@ public void putForSale(String areaname, Player player, int amount, boolean resad } public boolean putForSale(String areaname, int amount) { + if (Residence.getConfigManager().enabledRentSystem()) { if (Residence.getRentManager().isForRent(areaname)) { return false; @@ -119,6 +122,9 @@ public boolean putForSale(String areaname, int amount) { areaname = area.getName(); + if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) + areaname = areaname.toLowerCase(); + if (sellAmount.containsKey(areaname)) { return false; } @@ -149,6 +155,9 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { areaname = res.getName(); + if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) + areaname = areaname.toLowerCase(); + if (res.getPermissions().getOwner().equals(player.getName())) { player.sendMessage(Residence.getLM().getMessage("Economy.OwnerBuyFail")); return; @@ -233,15 +242,21 @@ public void removeFromSale(Player player, String areaname, boolean resadmin) { } public void removeFromSale(String areaname) { + if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) + areaname = areaname.toLowerCase(); sellAmount.remove(areaname); Residence.getSignUtil().removeSign(areaname); } public boolean isForSale(String areaname) { + if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) + areaname = areaname.toLowerCase(); return sellAmount.containsKey(areaname); } public boolean viewSaleInfo(String areaname, Player player) { + if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) + areaname = areaname.toLowerCase(); if (!sellAmount.containsKey(areaname)) return false; @@ -318,8 +333,10 @@ public void clearSales() { System.out.println("[Residence] - ReInit land selling."); } - public int getSaleAmount(String name) { - return sellAmount.get(name); + public int getSaleAmount(String areaname) { + if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) + areaname = areaname.toLowerCase(); + return sellAmount.get(areaname); } public Map save() { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 2aca1d0e9..790443e34 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -40,16 +40,18 @@ public RentedLand getRentedLand(String name) { public List getRentedLands(String playername) { List rentedLands = new ArrayList(); for (Entry oneland : rentedLand.entrySet()) { - if (oneland.getValue().player.equals(playername)) { - ClaimedResidence res = Residence.getResidenceManager().getByName(oneland.getKey()); - String world = " "; - if (res != null) { - res = res.getTopParent(); - world = res.getWorld(); - } - rentedLands.add(Residence.getLM().getMessage("Residence.List", "", oneland.getKey(), world) - + Residence.getLM().getMessage("Rent.Rented")); + if (!oneland.getValue().player.equals(playername)) + continue; + + ClaimedResidence res = Residence.getResidenceManager().getByName(oneland.getKey()); + String world = " "; + if (res != null) { + res = res.getTopParent(); + world = res.getWorld(); } + rentedLands.add(Residence.getLM().getMessage("Residence.List", "", oneland.getKey(), world) + + Residence.getLM().getMessage("Rent.Rented")); + } return rentedLands; } @@ -57,13 +59,14 @@ public List getRentedLands(String playername) { public List getRentedLandsList(String playername) { List rentedLands = new ArrayList(); for (Entry oneland : rentedLand.entrySet()) { - if (oneland.getValue().player.equals(playername)) { - ClaimedResidence res = Residence.getResidenceManager().getByName(oneland.getKey()); - if (res != null) - res = res.getTopParent(); + if (!oneland.getValue().player.equals(playername)) + continue; - rentedLands.add(oneland.getKey()); - } + ClaimedResidence res = Residence.getResidenceManager().getByName(oneland.getKey()); + if (res != null) + res = res.getTopParent(); + + rentedLands.add(oneland.getKey()); } return rentedLands; } @@ -186,6 +189,9 @@ public void rent(Player player, String landName, boolean repeat, boolean resadmi } public void removeFromForRent(Player player, String landName, boolean resadmin) { + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) + landName = landName.toLowerCase(); + RentedLand rent = rentedLand.get(landName); if (rent == null) { player.sendMessage(Residence.getLM().getMessage("Residence.NotRented")); @@ -228,13 +234,14 @@ public void unrent(Player player, String landName, boolean resadmin) { } landName = res.getName(); + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) + landName = landName.toLowerCase(); if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); + if (rentedLand.containsKey(landName) && !resadmin) { player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyRented", landName, rentedLand.get(landName).player)); return; @@ -260,13 +267,16 @@ public void unrent(Player player, String landName, boolean resadmin) { } public void removeFromRent(String landName) { + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) + landName = landName.toLowerCase(); rentedLand.remove(landName); } public void removeRentable(String landName) { + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) + landName = landName.toLowerCase(); removeFromRent(landName); rentableLand.remove(landName); - Residence.getSignUtil().removeSign(landName); } @@ -360,6 +370,10 @@ public void checkCurrentRents() { } public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin) { + + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) + landName = landName.toLowerCase(); + String[] split = landName.split("\\."); RentableLand land = rentableLand.get(landName); ClaimedResidence res = Residence.getResidenceManager().getByName(landName); @@ -378,6 +392,10 @@ else if (split.length != 0) } public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin) { + + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) + landName = landName.toLowerCase(); + String[] split = landName.split("\\."); RentedLand land = rentedLand.get(landName); if (land != null && (land.player.equals(player.getName()) || resadmin)) { @@ -390,6 +408,10 @@ else if (split.length != 0) } public void printRentInfo(Player player, String landName) { + + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) + landName = landName.toLowerCase(); + RentableLand rentable = rentableLand.get(landName); RentedLand rented = rentedLand.get(landName); if (rentable != null) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 1df505058..240756188 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -351,23 +351,26 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { List blocks = Residence.getNms().getPistonRetractBlocks(event); - if (event.isSticky()) { - for (Block oneBlock : blocks) { - FlagPermissions blockperms = Residence.getPermsByLoc(oneBlock.getLocation()); - if (!blockperms.has("piston", true)) { - event.setCancelled(true); - return; - } + if (!event.isSticky()) + return; + + for (Block oneBlock : blocks) { + FlagPermissions blockperms = Residence.getPermsByLoc(oneBlock.getLocation()); + if (!blockperms.has("piston", true)) { + event.setCancelled(true); + return; } + } - for (Block block : blocks) { - ClaimedResidence blockRes = Residence.getResidenceManager().getByLoc(block.getLocation()); - ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); - if (blockRes == null && pistonRes != null || blockRes != null && pistonRes == null || blockRes != null && pistonRes != null && !blockRes.getName() - .equalsIgnoreCase(pistonRes.getName())) { - event.setCancelled(true); - return; - } + ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + + for (Block block : blocks) { + ClaimedResidence blockRes = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (blockRes == null && pistonRes != null || + blockRes != null && pistonRes == null || + blockRes != null && pistonRes != null && !blockRes.getOwner().equalsIgnoreCase(pistonRes.getOwner())) { + event.setCancelled(true); + return; } } @@ -390,13 +393,15 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { } } + ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + BlockFace dir = event.getDirection(); for (Block block : event.getBlocks()) { Location loc = new Location(block.getWorld(), block.getX() + dir.getModX(), block.getY() + dir.getModY(), block.getZ() + dir.getModZ()); ClaimedResidence blockRes = Residence.getResidenceManager().getByLoc(loc); - ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); - if (blockRes == null && pistonRes != null || blockRes != null && pistonRes == null || blockRes != null && pistonRes != null && !blockRes.getName() - .equalsIgnoreCase(pistonRes.getName())) { + if (blockRes == null && pistonRes != null || + blockRes != null && pistonRes == null || + blockRes != null && pistonRes != null && !blockRes.getOwner().equalsIgnoreCase(pistonRes.getOwner())) { event.setCancelled(true); return; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index e251c94ed..08b326ec5 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -576,13 +576,16 @@ public void printAreaInfo(String areaname, Player player) { String groupFlags = perms.listGroupFlags(); if (groupFlags.length() > 0) player.sendMessage(lm.getMessage("General.GroupFlags", groupFlags)); - if (!Residence.getConfigManager().isShortInfoUse()) - player.sendMessage(lm.getMessage("General.OthersFlags", perms.listOtherPlayersFlags(player.getName()))); - else { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + perms.listOtherPlayersFlagsRaw(lm.getMessage("General.OthersFlags", - ""), - player - .getName())); + if (!Residence.getConfigManager().isShortInfoUse()) { + String othersFlags = perms.listOtherPlayersFlags(player.getName()); + if (!othersFlags.equalsIgnoreCase("")) + player.sendMessage(lm.getMessage("General.OthersFlags", othersFlags)); + } else { + String othersFlags = perms.listOtherPlayersFlags(player.getName()); + if (!othersFlags.equalsIgnoreCase("")) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + perms.listOtherPlayersFlagsRaw(lm.getMessage( + "General.OthersFlags", + ""), player.getName())); } msg = ""; diff --git a/src/plugin.yml b/src/plugin.yml index 472f2b0ae..be1998068 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.9.0 +version: 4.0.9.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 3d25411a966220bbf72ef196bba8e80b8e7a249d Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 12 May 2016 19:47:54 +0300 Subject: [PATCH 0149/1142] Chorus fruit teleport should attached to teleport flag not move --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 001fe18aa..da1f213e6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -960,7 +960,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); if (res != null) { if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event - .getCause() == TeleportCause.PLUGIN || Residence.getNms().isChorusTeleport(event.getCause())) { + .getCause() == TeleportCause.PLUGIN) { String areaname = res.getName(); if (!res.getPermissions().playerHas(player.getName(), "move", true) && !res.isOwner(player)) { event.setCancelled(true); @@ -975,7 +975,8 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { return; } } - if (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND && Residence.getConfigManager().isBlockAnyTeleportation()) { + if (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND && Residence.getConfigManager().isBlockAnyTeleportation() + || Residence.getNms().isChorusTeleport(event.getCause())) { if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { String areaname = res.getName(); event.setCancelled(true); From da23b7d0c638d7b97c1ed2404c6f179e624e2094 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 13 May 2016 19:51:06 +0300 Subject: [PATCH 0150/1142] residence flags based by perms, dyn map flag turn off option, cleaning --- .../bukkit/residence/ConfigManager.java | 5 +- .../bukkit/residence/commands/area.java | 7 +-- .../bukkit/residence/commands/contract.java | 3 +- .../bukkit/residence/commands/expand.java | 3 +- .../bukkit/residence/commands/pset.java | 62 ++++++++----------- .../bekvon/bukkit/residence/commands/set.java | 48 ++++++-------- .../bukkit/residence/commands/shop.java | 3 - .../residence/dynmap/DynMapManager.java | 7 ++- .../bekvon/bukkit/residence/gui/SetFlag.java | 2 +- .../listeners/ResidencePlayerListener.java | 4 ++ .../protection/ResidencePermissions.java | 7 ++- .../residence/selection/SelectionManager.java | 9 ++- src/plugin.yml | 2 +- 13 files changed, 77 insertions(+), 85 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index c314e9ac1..1f4d8e18f 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -170,6 +170,7 @@ public class ConfigManager { // DynMap public boolean DynMapUse; + public boolean DynMapShowFlags; public boolean DynMapLayer3dRegions; public int DynMapLayerSubZoneDepth; public String DynMapBorderColor; @@ -818,13 +819,15 @@ public void UpdateConfigFile() { c.getW().addComment("DynMap.Use", "Enables or disable DynMap Support"); DynMapUse = c.get("DynMap.Use", false); + c.getW().addComment("DynMap.ShowFlags", "Shows or hides residence flags"); + DynMapShowFlags = c.get("DynMap.ShowFlags", true); c.getW().addComment("DynMap.Layer.3dRegions", "Enables 3D zones"); DynMapLayer3dRegions = c.get("DynMap.Layer.3dRegions", true); c.getW().addComment("DynMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); DynMapLayerSubZoneDepth = c.get("DynMap.Layer.SubZoneDepth", 2); - c.getW().addComment("DynMap.Border.Color", "Color of border. Pick color for this page http://www.w3schools.com/colors/colors_picker.asp"); + c.getW().addComment("DynMap.Border.Color", "Color of border. Pick color from this page http://www.w3schools.com/colors/colors_picker.asp"); DynMapBorderColor = c.get("DynMap.Border.Color", "#FF0000"); c.getW().addComment("DynMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); DynMapBorderOpacity = c.get("DynMap.Border.Opacity", 0.3); diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index 4fd9826b6..4ea5974ab 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -7,7 +7,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; public class area implements cmd { @@ -43,8 +42,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res != null) { - res.addArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2( - player.getName())), args[3], resadmin); + res.addArea(player, Residence.getSelectionManager().getSelectionCuboid(player), args[3], resadmin); } else { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); } @@ -61,8 +59,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res != null) { - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager() - .getPlayerLoc2(player.getName())), args[3], resadmin); + res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), args[3], resadmin); } else { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); } diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 4aba4135f..84492acc3 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -87,8 +87,7 @@ else if (args.length == 3) Residence.getSelectionManager().worldEdit(player); } } - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player - .getName())), areaName, resadmin); + res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); return true; } else { player.sendMessage(Residence.getLM().getMessage("Select.Points")); diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 333724a6d..c98e3aa30 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -89,8 +89,7 @@ else if (args.length == 3) } } - res.replaceArea(player, new CuboidArea(Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player - .getName())), areaName, resadmin); + res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); return true; } else { player.sendMessage(Residence.getLM().getMessage("Select.Points")); diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 652a78214..ad6e689c5 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -7,7 +7,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; import com.bekvon.bukkit.residence.gui.SetFlag; -import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class pset implements cmd { @@ -57,42 +56,35 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); } return true; - } else if (args.length == 2) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - if (!Residence.isPlayerExist(player, args[1], true)) - return false; - if (!res.isOwner(player) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); - return true; - } - SetFlag flag = new SetFlag(res.getName(), player, resadmin); - flag.setTargePlayer(args[1]); - flag.recalculatePlayer(res); - player.closeInventory(); - ResidencePlayerListener.GUI.put(player.getName(), flag); - player.openInventory(flag.getInventory()); - } else - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); - return true; - } else if (args.length == 3) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res != null) { - if (!Residence.isPlayerExist(player, args[2], true)) - return false; - if (!res.isOwner(player) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); - return true; - } + } else if ((args.length == 2 || args.length == 3) && Residence.getConfigManager().useFlagGUI()) { + ClaimedResidence res = null; + String targetPlayer = null; + if (args.length == 2) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + targetPlayer = args[1]; + } else { + res = Residence.getResidenceManager().getByName(args[1]); + targetPlayer = args[2]; + } - SetFlag flag = new SetFlag(res.getName(), player, resadmin); - flag.setTargePlayer(args[2]); - flag.recalculatePlayer(res); - player.closeInventory(); - ResidencePlayerListener.GUI.put(player.getName(), flag); - player.openInventory(flag.getInventory()); - } else + if (res == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + + if (!Residence.isPlayerExist(player, targetPlayer, true)) + return false; + if (!res.isOwner(player) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + SetFlag flag = new SetFlag(res.getName(), player, resadmin); + flag.setTargetPlayer(targetPlayer); + flag.recalculatePlayer(res); + player.closeInventory(); + Residence.getPlayerListener().getGUImap().put(player.getName(), flag); + player.openInventory(flag.getInventory()); + return true; } return false; diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index ef4659c31..eae7becb4 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -7,7 +7,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; import com.bekvon.bukkit.residence.gui.SetFlag; -import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class set implements cmd { @@ -35,35 +34,26 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); } return true; - } else if (args.length == 1 && Residence.getConfigManager().useFlagGUI()) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - if (!res.isOwner(player) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); - return true; - } - SetFlag flag = new SetFlag(res.getName(), player, resadmin); - flag.recalculateResidence(res); - player.closeInventory(); - ResidencePlayerListener.GUI.put(player.getName(), flag); - player.openInventory(flag.getInventory()); - } else - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); - return true; - } else if (args.length == 2 && Residence.getConfigManager().useFlagGUI()) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res != null) { - if (!res.isOwner(player) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); - return true; - } - SetFlag flag = new SetFlag(res.getName(), player, resadmin); - flag.recalculateResidence(res); - player.closeInventory(); - ResidencePlayerListener.GUI.put(player.getName(), flag); - player.openInventory(flag.getInventory()); - } else + } else if ((args.length == 1 || args.length == 2) && Residence.getConfigManager().useFlagGUI()) { + ClaimedResidence res = null; + if (args.length == 1) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else + res = Residence.getResidenceManager().getByName(args[1]); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + if (!res.isOwner(player) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return true; + } + SetFlag flag = new SetFlag(res.getName(), player, resadmin); + flag.recalculateResidence(res); + player.closeInventory(); + Residence.getPlayerListener().getGUImap().put(player.getName(), flag); + player.openInventory(flag.getInventory()); return true; } return false; diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 7920de9e5..5d4585058 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -23,7 +23,6 @@ import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.shopStuff.Vote; -import com.bekvon.bukkit.residence.utils.Debug; public class shop implements cmd { @@ -289,7 +288,6 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - Debug.D("here 2"); player.sendMessage(Residence.getLM().getMessage("Select.Points")); return true; } @@ -309,7 +307,6 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); if (loc1.getBlockY() < loc2.getBlockY()) { - Debug.D("here"); player.sendMessage(Residence.getLM().getMessage("Shop.InvalidSelection")); return true; } diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 553cc99e2..5c424fb13 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -74,8 +74,11 @@ private String formatInfoWindow(String resid, ClaimedResidence res, String resNa return null; String v = "
%regionname%
" - + ChatColor.stripColor(Residence.getLM().getMessage("General.Owner", "")) + "%playerowners%
" - + ChatColor.stripColor(Residence.getLM().getMessage("General.Flags", "")) + "
%flags%
"; + + ChatColor.stripColor(Residence.getLM().getMessage("General.Owner", "")) + "%playerowners%
"; + + if (Residence.getConfigManager().DynMapShowFlags) + v += ChatColor.stripColor(Residence.getLM().getMessage("General.Flags", "")) + "
%flags%"; + v += ""; if (Residence.getRentManager().isForRent(res.getName())) v = "
" diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index ba7b00b9d..7a07c886c 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -50,7 +50,7 @@ public boolean isAdmin() { return this.admin; } - public void setTargePlayer(String player) { + public void setTargetPlayer(String player) { this.targetPlayer = player; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index da1f213e6..80777e86c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -85,6 +85,10 @@ public ResidencePlayerListener(Residence plugin) { this.plugin = plugin; } + public Map getGUImap() { + return GUI; + } + public void reload() { currentRes = new HashMap(); lastUpdate = new HashMap(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 82260914e..950fafe96 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -70,8 +70,9 @@ public boolean has(String flag, boolean def) { } public boolean hasApplicableFlag(String player, String flag) { - return super.inheritanceIsPlayerSet(player, flag) || super.inheritanceIsGroupSet(Residence.getPermissionManager().getGroupNameByPlayer(player, world), flag) - || super.inheritanceIsSet(flag); + return super.inheritanceIsPlayerSet(player, flag) || + super.inheritanceIsGroupSet(Residence.getPermissionManager().getGroupNameByPlayer(player, world), flag) || + super.inheritanceIsSet(flag); } public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) { @@ -159,7 +160,7 @@ private boolean checkCanSetFlag(Player player, String flag, FlagState state, boo player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return false; } - if (!hasFlagAccess(this.getOwner(), flag)) { + if (!hasFlagAccess(this.getOwner(), flag) && !player.hasPermission("residence.flag." + flag.toLowerCase())) { player.sendMessage(Residence.getLM().getMessage("Flag.SetFailed", flag)); return false; } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index acd7c5eca..d7145f430 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -24,7 +24,6 @@ public class SelectionManager { protected Server server; private Residence plugin; - public static Integer id; public static HashMap normalPrintMap = new HashMap(); public static HashMap errorPrintMap = new HashMap(); public static HashMap normalIDMap = new HashMap(); @@ -93,6 +92,14 @@ public Location getPlayerLoc2(String player) { return playerLoc2.get(player); } + public CuboidArea getSelectionCuboid(Player player) { + return getSelectionCuboid(player.getName()); + } + + public CuboidArea getSelectionCuboid(String player) { + return new CuboidArea(getPlayerLoc1(player), getPlayerLoc2(player)); + } + public boolean hasPlacedBoth(String player) { return playerLoc1.containsKey(player) && playerLoc2.containsKey(player); } diff --git a/src/plugin.yml b/src/plugin.yml index be1998068..4c567c0ca 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.0.9.2 +version: 4.0.10.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From dcfdd706ba2c5f80bfac111e29a4fab439a60792 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 13 May 2016 20:11:37 +0300 Subject: [PATCH 0151/1142] gui icons --- src/com/bekvon/bukkit/residence/containers/GuiItems.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/containers/GuiItems.java b/src/com/bekvon/bukkit/residence/containers/GuiItems.java index 38bebb251..dcf1a760d 100644 --- a/src/com/bekvon/bukkit/residence/containers/GuiItems.java +++ b/src/com/bekvon/bukkit/residence/containers/GuiItems.java @@ -23,6 +23,7 @@ public enum GuiItems { creeper(383, 50), dragongrief(3, 0), day(37, 0), + dye(351, 14), damage(283, 0), destroy(121, 0), diode(356, 0), @@ -36,6 +37,8 @@ public enum GuiItems { flow(111, 0), hidden(102, 0), healing(373, 0), + iceform(79, 0), + icemelt(79, 0), ignite(259, 0), keepinv(298, 0), keepexp(322, 0), @@ -61,11 +64,12 @@ public enum GuiItems { pvp(268, 0), redstone(331, 0), respawn(175, 0), + riding(329, 0), shop(389, 0), snowtrail(78, 0), + snowball(332, 0), sanimals(383, 101), shear(359, 0), - dye(351, 14), smonsters(383, 54), subzone(160, 7), table(58, 0), From df6ce49c3a9eb3b3fcb44ccc07eeb52c7c63cd03 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 15 May 2016 17:46:49 +0300 Subject: [PATCH 0152/1142] DynMap / Comparators / MineCart Access --- .../bukkit/residence/ConfigManager.java | 3 + .../bekvon/bukkit/residence/Residence.java | 8 +++ .../bukkit/residence/commands/flags.java | 5 +- .../residence/dynmap/DynMapManager.java | 10 ++- .../bekvon/bukkit/residence/gui/SetFlag.java | 5 +- .../listeners/ResidencePlayerListener.java | 62 +++++++++++++++++-- .../residence/protection/FlagPermissions.java | 3 + .../bukkit/residence/text/help/HelpEntry.java | 27 ++++++-- .../bukkit/residence/utils/Sorting.java | 38 +++++++++--- src/plugin.yml | 2 +- 10 files changed, 136 insertions(+), 27 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 1f4d8e18f..56de161e4 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -171,6 +171,7 @@ public class ConfigManager { // DynMap public boolean DynMapUse; public boolean DynMapShowFlags; + public boolean DynMapHideHidden; public boolean DynMapLayer3dRegions; public int DynMapLayerSubZoneDepth; public String DynMapBorderColor; @@ -821,6 +822,8 @@ public void UpdateConfigFile() { DynMapUse = c.get("DynMap.Use", false); c.getW().addComment("DynMap.ShowFlags", "Shows or hides residence flags"); DynMapShowFlags = c.get("DynMap.ShowFlags", true); + c.getW().addComment("DynMap.HideHidden", "If set true, residence with hidden flag set to true will be hidden from dynmap"); + DynMapHideHidden = c.get("DynMap.HideHidden", true); c.getW().addComment("DynMap.Layer.3dRegions", "Enables 3D zones"); DynMapLayer3dRegions = c.get("DynMap.Layer.3dRegions", true); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 90669ebf8..68aa4989d 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -78,6 +78,7 @@ import com.bekvon.bukkit.residence.utils.CrackShot; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; +import com.bekvon.bukkit.residence.utils.Sorting; import com.bekvon.bukkit.residence.utils.TabComplete; import com.bekvon.bukkit.residence.utils.VersionChecker; import com.bekvon.bukkit.residence.utils.YmlMaker; @@ -142,6 +143,7 @@ public class Residence extends JavaPlugin { protected static ShopSignUtil ShopSignUtilManager; protected static RandomTp RandomTpManager; protected static DynMapManager DynManager; + protected static Sorting SortingManager; protected boolean firstenable = true; protected static EconomyInterface economy; @@ -646,6 +648,8 @@ public void run() { NewLanguageManager = new Language(this); getLM().LanguageReload(); + SortingManager = new Sorting(); + if (Bukkit.getVersion().toString().contains("Spigot") || Bukkit.getVersion().toString().contains("spigot")) getServer().getPluginManager().registerEvents(spigotlistener, this); @@ -794,6 +798,10 @@ public static DynMapManager getDynManager() { return DynManager; } + public static Sorting getSortingManager() { + return SortingManager; + } + public static RandomTp getRandomTpManager() { return RandomTpManager; } diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index 7cc282394..ea302b0f2 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -16,7 +16,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } } catch (Exception ex) { } - Bukkit.dispatchCommand(sender, "res flags ? " + page); + if (resadmin) + Bukkit.dispatchCommand(sender, "resadmin flags ? " + page); + else + Bukkit.dispatchCommand(sender, "res flags ? " + page); return true; } } diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 5c424fb13..49f7b2a10 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -50,6 +50,7 @@ public void fireUpdateAdd(final ClaimedResidence res, final int deep) { schedId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { public void run() { schedId = -1; + handleResidenceAdd(res.getName(), res, resareas, deep); return; } @@ -203,6 +204,12 @@ private void handleResidenceAdd(String resid, ClaimedResidence res, Map
"; if (Residence.getTransactionManager().isForSale(res.getName())) diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 5edbf15b0..c51fa07c8 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -376,6 +376,12 @@ public boolean isForRent(String landName) { landName = landName.toLowerCase(); return rentableLand.containsKey(landName); } + + public RentableLand getRentableLand(String landName) { + if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) + landName = landName.toLowerCase(); + return rentableLand.get(landName); + } public boolean isRented(String landName) { if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) @@ -542,7 +548,9 @@ public void printRentInfo(Player player, String landName) { player.sendMessage(Residence.getLM().getMessage("General.Separator")); player.sendMessage(Residence.getLM().getMessage("General.Land", landName)); player.sendMessage(Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days)); - player.sendMessage(Residence.getLM().getMessage("Rentable.AutoRenew", rentable.AllowRenewing)); + player.sendMessage(Residence.getLM().getMessage("Rentable.AllowRenewing", rentable.AllowRenewing)); + player.sendMessage(Residence.getLM().getMessage("Rentable.StayInMarket", rentable.StayInMarket)); + player.sendMessage(Residence.getLM().getMessage("Rentable.AllowAutoPay", rentable.AllowAutoPay)); if (rented != null) { player.sendMessage(Residence.getLM().getMessage("Residence.RentedBy", rented.player)); player.sendMessage(Residence.getLM().getMessage("Rent.Expire", GetTime.getTime(rented.endTime))); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b801f0704..b7fba0c4a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -54,6 +54,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.*; import com.bekvon.bukkit.residence.gui.SetFlag; @@ -226,6 +227,44 @@ public void onCommand(PlayerCommandPreprocessEvent event) { if (player.hasPermission("residence.flag.command.bypass")) return; + String msg = event.getMessage().replace(" ", "_"); + + int white = 0; + int black = 0; + + for (String oneWhite : res.getCmdWhiteList()) { + if (msg.startsWith("/" + oneWhite)) { + if (oneWhite.contains("_") && oneWhite.split("_").length > white) + white = oneWhite.split("_").length; + else if (white == 0) + white = 1; + } + } + + for (String oneBlack : res.getCmdBlackList()) { + if (msg.startsWith("/" + oneBlack)) { + if (msg.contains("_")) + black = oneBlack.split("_").length; + else + black = 1; + break; + } + } + + if (black == 0) + for (String oneBlack : res.getCmdBlackList()) { + if (oneBlack.equalsIgnoreCase("*")) { + if (msg.contains("_")) + black = msg.split("_").length; + break; + } + } + +// Debug.D(white + ":" + black); + + if (white != 0 && white >= black || black == 0) + return; + event.setCancelled(true); player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "command", res.getName())); @@ -672,7 +711,7 @@ public void onInfoCheck(PlayerInteractEvent event) { Location loc = block.getLocation(); String res = Residence.getResidenceManager().getNameByLoc(loc); if (res != null) - Residence.getResidenceManager().printAreaInfo(res, player); + Residence.getResidenceManager().printAreaInfo(res, player, false); else player.sendMessage(Residence.getLM().getMessage("Residence.NoResHere")); event.setCancelled(true); @@ -1205,6 +1244,38 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { currentRes.remove(pname); } else { if (res != null && ResOld.getName().equals(res.getName())) { + + if (player.isFlying() && res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( + "residence.nofly.bypass")) { + Location lc = player.getLocation(); + Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); + location.setPitch(lc.getPitch()); + location.setYaw(lc.getYaw()); + int from = location.getBlockY(); + int maxH = location.getWorld().getMaxHeight() - 1; + for (int i = 0; i < maxH; i++) { + location.setY(from - i); + Block block = location.getBlock(); + if (!Residence.getNms().isEmptyBlock(block)) { + location.setY(from - i + 1); + break; + } + if (location.getBlockY() <= 0) { + Location lastLoc = lastOutsideLoc.get(pname); + if (lastLoc != null) + player.teleport(lastLoc); + else + player.teleport(res.getOutsideFreeLoc(loc, player)); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Fly", orres.getName())); + return; + } + } + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Fly", orres.getName())); + player.teleport(location); + player.setFlying(false); + player.setAllowFlight(false); + } + lastOutsideLoc.put(pname, loc); return; } @@ -1352,10 +1423,23 @@ else if (res.getPermissions().has("rain", false)) Residence.getServ().getPluginManager().callEvent(chgEvent); if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) { - if (Residence.getConfigManager().useActionBar()) { - Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)).toString()); + + if (Residence.getConfigManager().isExtraEnterMessage() && !res.isOwner(player)) { + if (Residence.getRentManager().isForRent(areaname) && !Residence.getRentManager().isRented(areaname)) { + RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); + if (rentable != null) + Residence.getAB().send(player, Residence.getLM().getMessage("Residence.CanBeRented", areaname, rentable.cost, rentable.days)); + } else if (Residence.getTransactionManager().isForSale(areaname) && !res.isOwner(player)) { + int sale = Residence.getTransactionManager().getSaleAmount(areaname); + Residence.getAB().send(player, Residence.getLM().getMessage("Residence.CanBeBought", areaname, sale)); + } } else { - player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); + if (Residence.getConfigManager().useActionBar()) { + Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)) + .toString()); + } else { + player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); + } } } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 49db38daa..ec9363377 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -22,8 +22,10 @@ import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; @@ -56,6 +58,10 @@ public class ClaimedResidence { protected ChatColor ChannelColor = ChatColor.WHITE; protected ResidenceItemList ignorelist; protected ResidenceItemList blacklist; + + protected List cmdWhiteList = new ArrayList(); + protected List cmdBlackList = new ArrayList(); + private Residence plugin; private ClaimedResidence(Residence plugin) { @@ -1109,6 +1115,11 @@ public Map save() { root.put("Subzones", subzonemap); root.put("Permissions", perms.save()); + if (!this.cmdBlackList.isEmpty()) + root.put("cmdBlackList", this.cmdBlackList); + if (!this.cmdWhiteList.isEmpty()) + root.put("cmdWhiteList", this.cmdWhiteList); + if (tpLoc != null) { Map tpmap = new HashMap<>(); tpmap.put("X", convertDouble(tpLoc.getX())); @@ -1125,6 +1136,7 @@ public Map save() { private double convertDouble(double d) { return convertDouble(String.valueOf(d)); } + private static double convertDouble(String dString) { DecimalFormat formatter = new DecimalFormat("#0.00"); formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); @@ -1137,7 +1149,7 @@ private static double convertDouble(String dString) { } return d; } - + @SuppressWarnings("unchecked") public static ClaimedResidence load(Map root, ClaimedResidence parent, Residence plugin) throws Exception { ClaimedResidence res = new ClaimedResidence(plugin); @@ -1195,12 +1207,17 @@ public static ClaimedResidence load(Map root, ClaimedResidence p if (tploc.containsKey("Pitch")) pitch = convertDouble(tploc.get("Pitch").toString()); - res.tpLoc = new Location(world,convertDouble(tploc.get("X").toString()), convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z") + res.tpLoc = new Location(world, convertDouble(tploc.get("X").toString()), convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z") .toString())); res.tpLoc.setPitch((float) pitch); res.tpLoc.setYaw((float) yaw); } + if (root.containsKey("cmdBlackList")) + res.cmdBlackList = (List) root.get("cmdBlackList"); + if (root.containsKey("cmdWhiteList")) + res.cmdWhiteList = (List) root.get("cmdWhiteList"); + if (root.containsKey("ChatPrefix")) res.ChatPrefix = (String) root.get("ChatPrefix"); @@ -1350,6 +1367,38 @@ public ResidenceItemList getItemIgnoreList() { return ignorelist; } + public List getCmdBlackList() { + return this.cmdBlackList; + } + + public List getCmdWhiteList() { + return this.cmdWhiteList; + } + + public boolean addCmdBlackList(String cmd) { + if (cmd.contains("/")) + cmd = cmd.replace("/", ""); + if (!this.cmdBlackList.contains(cmd.toLowerCase())) { + this.cmdBlackList.add(cmd.toLowerCase()); + return true; + } else { + this.cmdBlackList.remove(cmd.toLowerCase()); + return false; + } + } + + public boolean addCmdWhiteList(String cmd) { + if (cmd.contains("/")) + cmd = cmd.replace("/", ""); + if (!this.cmdWhiteList.contains(cmd.toLowerCase())) { + this.cmdWhiteList.add(cmd.toLowerCase()); + return true; + } else { + this.cmdWhiteList.remove(cmd.toLowerCase()); + return false; + } + } + public Double getBlockSellPrice() { return BlockSellPrice; } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 00d5d6160..37cd76e25 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -226,13 +226,12 @@ public static void initValidFlags() { addResidenceOnlyFlag("icemelt"); addResidenceOnlyFlag("snowball"); - + addResidenceOnlyFlag("pistonprotection"); - addResidenceOnlyFlag("sun"); addResidenceOnlyFlag("rain"); - + addResidenceOnlyFlag("dryup"); addPlayerOrGroupOnlyFlag("admin"); @@ -690,12 +689,34 @@ else if (OwnerName != null && !OwnerName.equals(keyset)) } public String listFlags() { + return listFlags(0, 0); + } + + public String listFlags(Integer split) { + return listFlags(split, 0); + } + + public String listFlags(Integer split, Integer totalShow) { StringBuilder sbuild = new StringBuilder(); Set> set = cuboidFlags.entrySet(); synchronized (set) { Iterator> it = set.iterator(); + int i = 0; + int t = 0; while (it.hasNext()) { + i++; + t++; Entry next = it.next(); + + if (totalShow > 0 && t > totalShow) { + break; + } + + if (split > 0 && i >= split) { + i = 0; + sbuild.append("\n"); + } + if (next.getValue()) { sbuild.append("&2").append("+").append(next.getKey()); if (it.hasNext()) { @@ -707,6 +728,7 @@ public String listFlags() { sbuild.append(" "); } } + } } if (sbuild.length() == 0) { @@ -811,6 +833,88 @@ public String listOtherPlayersFlags(String player) { return sbuild.toString(); } + public String listPlayersFlags() { + StringBuilder sbuild = new StringBuilder(); + Set>> set = playerFlags.entrySet(); + synchronized (set) { + Iterator>> it = set.iterator(); + while (it.hasNext()) { + Entry> nextEnt = it.next(); + String next = nextEnt.getKey(); + + String perms = printPlayerFlags(nextEnt.getValue()); + if (next.length() == 36) { + String resolvedName = Residence.getPlayerName(next); + if (resolvedName != null) { + this.cachedPlayerNameUUIDs.put(next, resolvedName); + next = resolvedName; + } else if (this.cachedPlayerNameUUIDs.containsKey(next)) + next = this.cachedPlayerNameUUIDs.get(next); + } + + if (next.equalsIgnoreCase(Residence.getServerLandname())) + continue; + + if (!perms.equals("none")) { + sbuild.append(next).append(ChatColor.WHITE).append("[").append(perms).append(ChatColor.WHITE).append("] "); + } + } + } + return sbuild.toString(); + } + + public String listPlayersFlagsRaw(String player, String text) { + StringBuilder sbuild = new StringBuilder(); + + sbuild.append("[\"\","); + sbuild.append("{\"text\":\"" + text + "\"}"); + + Set>> set = playerFlags.entrySet(); + synchronized (set) { + Iterator>> it = set.iterator(); + boolean random = true; + while (it.hasNext()) { + Entry> nextEnt = it.next(); + String next = nextEnt.getKey(); + + String perms = printPlayerFlags(nextEnt.getValue()); + if (next.length() == 36) { + String resolvedName = Residence.getPlayerName(next); + if (resolvedName != null) { + this.cachedPlayerNameUUIDs.put(next, resolvedName); + next = resolvedName; + } else if (this.cachedPlayerNameUUIDs.containsKey(next)) + next = this.cachedPlayerNameUUIDs.get(next); + } + + if (next.equalsIgnoreCase(Residence.getServerLandname())) + continue; + + if (!perms.equals("none")) { + sbuild.append(","); + + if (random) { + random = false; + if (player.equals(next)) + next = "&4" + next + "&r"; + else + next = "&2" + next + "&r"; + } else { + random = true; + if (player.equals(next)) + next = "&4" + next + "&r"; + else + next = "&3" + next + "&r"; + } + sbuild.append(ConvertToRaw(next, perms)); + } + } + } + + sbuild.append("]"); + return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); + } + public String listOtherPlayersFlagsRaw(String text, String player) { // player = player.toLowerCase(); String uuids = Residence.getPlayerUUIDString(player); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1f7358b64..8a5d7c994 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -22,6 +22,8 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; import com.bekvon.bukkit.residence.economy.TransactionManager; +import com.bekvon.bukkit.residence.economy.rent.RentableLand; +import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; @@ -29,6 +31,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.GetTime; public class ResidenceManager implements ResidenceInterface { protected Map residences; @@ -353,6 +356,10 @@ public ArrayList getResidenceList(boolean showhidden, boolean showsubzon return this.getResidenceList(null, showhidden, showsubzones, false); } + public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones) { + return this.getResidenceList(targetplayer, showhidden, showsubzones, false, false); + } + public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean onlyHidden) { return this.getResidenceList(targetplayer, showhidden, showsubzones, false, onlyHidden); } @@ -525,6 +532,10 @@ public boolean hasMaxZones(String player, int target) { } public void printAreaInfo(String areaname, CommandSender sender) { + printAreaInfo(areaname, sender, false); + } + + public void printAreaInfo(String areaname, CommandSender sender, boolean resadmin) { ClaimedResidence res = this.getByName(areaname); if (res == null) { sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); @@ -538,64 +549,69 @@ public void printAreaInfo(String areaname, CommandSender sender) { ResidencePermissions perms = res.getPermissions(); Language lm = Residence.getLM(); + String resNameOwner = "&e" + lm.getMessage("Residence.Line", areaname); if (Residence.getConfigManager().enableEconomy()) { + resNameOwner += lm.getMessage("General.Owner", perms.getOwner()); + if (res.isOwner(sender.getName()) || !(sender instanceof Player) || resadmin) + resNameOwner += lm.getMessage("Bank.Name", res.getBank().getStoredMoney()); + } + resNameOwner = ChatColor.translateAlternateColorCodes('&', resNameOwner); - String msg = "&e" + Residence.getLM().getMessage("Residence.Line", areaname); - - if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { - msg += lm.getMessage("General.Owner", perms.getOwner()) + lm.getMessage("Residence.RentedBy", Residence.getRentManager().getRentingPlayer(areaname)); - } else { - msg += lm.getMessage("General.Owner", perms.getOwner()); - } + String worldInfo = lm.getMessage("General.World", perms.getWorld()); + worldInfo += "&6 (&3"; + CuboidArea area = res.getAreaArray()[0]; + worldInfo += lm.getMessage("General.CoordsTop", area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); + worldInfo += "&6; &3"; + worldInfo += lm.getMessage("General.CoordsBottom", area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + worldInfo += "&6)"; + worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + + String ResFlagList = perms.listFlags(5); + if (!(sender instanceof Player)) + ResFlagList = perms.listFlags(); + String ResFlagMsg = lm.getMessage("General.ResidenceFlags", ResFlagList); + + if (perms.getFlags().size() > 2 && sender instanceof Player) { + ResFlagMsg = lm.getMessage("General.ResidenceFlags", perms.listFlags(5, 3)) + "..."; + } - msg += lm.getMessage("Bank.Name", res.getBank().getStoredMoney()); + if (sender instanceof Player) { + String raw = convertToRaw(null, resNameOwner, worldInfo); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + raw = convertToRaw(null, ResFlagMsg, ResFlagList); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); } else { - sender.sendMessage(lm.getMessage("Residence.Line", areaname)); + sender.sendMessage(resNameOwner); + sender.sendMessage(worldInfo); + sender.sendMessage(ResFlagMsg); } - String msg = lm.getMessage("General.World", perms.getWorld()); - -// String aid = null; -// if (sender instanceof Player) -// aid = res.getAreaIDbyLoc(((Player) sender).getLocation()); -// if (aid != null) { - - msg += "&6 (&3"; - CuboidArea area = res.getAreaArray()[0]; - - msg += lm.getMessage("General.CoordsTop", area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); +// sender.sendMessage(lm.getMessage("General.Flags", perms.listFlags())); - msg += "&6; &3"; - msg += lm.getMessage("General.CoordsBottom", area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); - - msg += "&6)"; -// } - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - - sender.sendMessage(lm.getMessage("General.Flags", perms.listFlags())); - sender.sendMessage(lm.getMessage("General.YourFlags", perms.listPlayerFlags(sender.getName()))); + if (!Residence.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) + sender.sendMessage(lm.getMessage("General.PlayersFlags", perms.listPlayersFlags())); + else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Player) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + perms.listPlayersFlagsRaw(sender.getName(), lm.getMessage( + "General.PlayersFlags"))); + } String groupFlags = perms.listGroupFlags(); if (groupFlags.length() > 0) sender.sendMessage(lm.getMessage("General.GroupFlags", groupFlags)); - if (!Residence.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) { - String othersFlags = perms.listOtherPlayersFlags(sender.getName()); - if (!othersFlags.equalsIgnoreCase("")) - sender.sendMessage(lm.getMessage("General.OthersFlags", othersFlags)); - } else { - String othersFlags = perms.listOtherPlayersFlags(sender.getName()); - if (!othersFlags.equalsIgnoreCase("")) - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + perms.listOtherPlayersFlagsRaw(lm.getMessage( - "General.OthersFlags", - ""), sender.getName())); - } - msg = ""; -// if (aid != null) { -// msg += lm.getMessage("General.CurrentArea", res.getAreaArray().length == 1 ? "main" : res.getare) + " "; +// if (!Residence.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) { +// String othersFlags = perms.listOtherPlayersFlags(sender.getName()); +// if (!othersFlags.equalsIgnoreCase("")) +// sender.sendMessage(lm.getMessage("General.OthersFlags", othersFlags)); +// } else { +// String othersFlags = perms.listOtherPlayersFlags(sender.getName()); +// if (!othersFlags.equalsIgnoreCase("")) +// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + perms.listOtherPlayersFlagsRaw(lm.getMessage( +// "General.OthersFlags", ""), sender.getName())); // } + + String msg = ""; msg += lm.getMessage("General.TotalSize", res.getTotalSize()); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); @@ -610,9 +626,62 @@ public void printAreaInfo(String areaname, CommandSender sender) { if (time != null) sender.sendMessage(lm.getMessage("Economy.LeaseExpire", time)); } + + if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isForRent(areaname) && !Residence.getRentManager().isRented(areaname)) { + String forRentMsg = lm.getMessage("Rent.isForRent"); + + RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); + StringBuilder rentableString = new StringBuilder(); + if (rentable != null) { + rentableString.append(Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days) + "\n"); + rentableString.append(Residence.getLM().getMessage("Rentable.AllowRenewing", rentable.AllowRenewing) + "\n"); + rentableString.append(Residence.getLM().getMessage("Rentable.StayInMarket", rentable.StayInMarket) + "\n"); + rentableString.append(Residence.getLM().getMessage("Rentable.AllowAutoPay", rentable.AllowAutoPay)); + } + if (sender instanceof Player) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, forRentMsg, rentableString.toString())); + else + sender.sendMessage(forRentMsg); + } else if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { + String RentedMsg = lm.getMessage("Residence.RentedBy", Residence.getRentManager().getRentingPlayer(areaname)); + + RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); + RentedLand rented = Residence.getRentManager().getRentedLand(areaname); + + StringBuilder rentableString = new StringBuilder(); + if (rented != null) + rentableString.append(Residence.getLM().getMessage("Rent.Expire", GetTime.getTime(rented.endTime)) + "\n"); + + if (rentable != null) { + rentableString.append(Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days) + "\n"); + rentableString.append(Residence.getLM().getMessage("Rentable.AllowRenewing", rentable.AllowRenewing) + "\n"); + rentableString.append(Residence.getLM().getMessage("Rentable.StayInMarket", rentable.StayInMarket) + "\n"); + rentableString.append(Residence.getLM().getMessage("Rentable.AllowAutoPay", rentable.AllowAutoPay)); + } + + if (sender instanceof Player) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, RentedMsg, rentableString.toString())); + else + sender.sendMessage(RentedMsg); + } else if (Residence.getTransactionManager().isForSale(areaname)) { + int amount = Residence.getTransactionManager().getSaleAmount(areaname); + String SellMsg = lm.getMessage("Economy.LandForSale") + " " + amount; + sender.sendMessage(SellMsg); + } + sender.sendMessage(Residence.getLM().getMessage("General.Separator")); } + private String convertToRaw(String preText, String text, String hover) { + StringBuilder msg = new StringBuilder(); + msg.append("[\"\","); + if (preText != null) + msg.append("{\"text\":\"" + text + "\"}"); + msg.append("{\"text\":\"" + text + "\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + hover + "\"}]}}}"); + msg.append("]"); + return msg.toString(); + } + public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { ClaimedResidence reciever = this.getByName(targetArea); ClaimedResidence source = this.getByName(sourceArea); diff --git a/src/plugin.yml b/src/plugin.yml index e2d97adf9..acdd4a7b0 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.1.1.0 +version: 4.1.2.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From af46e99eb582a620ccf4b5b948ba6f53f86435dc Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 1 Jun 2016 14:09:24 +0300 Subject: [PATCH 0170/1142] autopay changes / fixes for rentable removal and autopay prevention --- .../bukkit/residence/LocaleManager.java | 11 ++++-- .../bukkit/residence/commands/market.java | 37 ++++++++++++------- .../residence/economy/rent/RentManager.java | 32 +++++++++------- .../listeners/ResidenceEntityListener.java | 5 ++- .../protection/ClaimedResidence.java | 2 - .../protection/ResidenceManager.java | 13 ++++++- src/plugin.yml | 2 +- 7 files changed, 66 insertions(+), 36 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 16a144336..07f8717df 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -218,6 +218,7 @@ public void LoadLang(String lang) { c.get("Language.Residence.RentSuccess", "&eYou have rented Residence &6%1 &efor &6%2 &edays."); c.get("Language.Residence.EndingRent", "&eRent time is ending for &6%1 &eon &6%2"); c.get("Language.Residence.AlreadyRented", "&eResidence &6%1 &ehas currently been rented to &6%2"); + c.get("Language.Residence.CantAutoPay", "&eResidence is not allowing auto pay, it will be set to &6false"); c.get("Language.Residence.AlreadyExists", "&cA residence named &6%1 &calready exists."); c.get("Language.Residence.Create", "&eYou have created residence &6%1&e!"); c.get("Language.Residence.Rename", "&eRenamed Residence &6%1 &eto &6%2"); @@ -264,6 +265,8 @@ public void LoadLang(String lang) { c.get("Language.Rent.OneTime", "&cCan't extend rent time for this residence."); c.get("Language.Rent.Extended", "&eRent extended for aditional &6%1 &edays for &6%2 &eresidence"); c.get("Language.Rent.Expire", "&eRent Expire Time: &6%1"); + c.get("Language.Rent.AutoPayTurnedOn", "&eAutoPay is turned &2ON"); + c.get("Language.Rent.AutoPayTurnedOff", "&eAutoPay is turned &cOFF"); c.get("Language.Rent.ModifyDeny", "&cCannot modify a rented residence."); c.get("Language.Rent.Days", "&eRent days: &6%1"); c.get("Language.Rent.Rented", " &6(Rented)"); @@ -1427,10 +1430,10 @@ public void LoadLang(String lang) { "If is true, money for rent will be automaticaly taken from players balance if he chosen that option when renting")); c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Args", "[residence]"); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.allowrenewing.Description", "Sets residence AllowRenewing to given value"); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.allowrenewing.Info", - Arrays.asList("&eUsage: &6/res market allowrenewing [true/false]")); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.allowrenewing.Args", "[residence]"); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.autopay.Description", "Sets residence AutoPay to given value"); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.autopay.Info", + Arrays.asList("&eUsage: &6/res market autopay [true/false]")); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.autopay.Args", "[residence]"); c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.payrent.Description", "Pays rent for defined residence"); c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.payrent.Info", diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index f74ce8725..2aab1b3af 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -38,8 +38,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command case "list": return commandResMarketList(args, resadmin, player, page); - case "allowrenewing": - return commandResMarketAllowRenewing(args, resadmin, player, page); + case "autopay": + return commandResMarketAutoPay(args, resadmin, player, page); case "payrent": return commandResMarketPayRent(args, resadmin, player); case "rentable": @@ -63,7 +63,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } - if (Residence.getRentManager().isRented(area)) + if (!Residence.getRentManager().isRented(area)) Residence.getRentManager().removeFromForRent(player, area, resadmin); else Residence.getRentManager().unrent(player, area, resadmin); @@ -316,38 +316,47 @@ private boolean commandResMarketRentable(String[] args, boolean resadmin, Player return true; } - private boolean commandResMarketAllowRenewing(String[] args, boolean resadmin, Player player, int page) { + private boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player player, int page) { if (!Residence.getConfigManager().enableEconomy()) { player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); return true; } - if (args.length != 4) { + if (args.length != 3 && args.length != 4) { return false; } boolean value; - if (args[3].equalsIgnoreCase("true") || args[3].equalsIgnoreCase("t")) { + + String barg = ""; + ClaimedResidence res = null; + if (args.length == 3) { + barg = args[2]; + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + } else { + barg = args[3]; + res = Residence.getResidenceManager().getByName(args[2]); + } + + if (barg.equalsIgnoreCase("true") || barg.equalsIgnoreCase("t")) { value = true; - } else if (args[3].equalsIgnoreCase("false") || args[3].equalsIgnoreCase("f")) { + } else if (barg.equalsIgnoreCase("false") || barg.equalsIgnoreCase("f")) { value = false; } else { player.sendMessage(Residence.getLM().getMessage("Invalid.Boolean")); return true; } - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return true; } - if (Residence.getRentManager().isRented(args[2]) && Residence.getRentManager().getRentingPlayer(args[2]).equalsIgnoreCase(player.getName())) { - Residence.getRentManager().setRentedRepeatable(player, args[2], value, resadmin); - } else if (Residence.getRentManager().isForRent(args[2])) { - Residence.getRentManager().setRentRepeatable(player, args[2], value, resadmin); + if (Residence.getRentManager().isRented(res.getName()) && Residence.getRentManager().getRentingPlayer(res.getName()).equalsIgnoreCase(player.getName())) { + Residence.getRentManager().setRentedRepeatable(player, res.getName(), value, resadmin); + } else if (Residence.getRentManager().isForRent(res.getName())) { + Residence.getRentManager().setRentRepeatable(player, res.getName(), value, resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Economy.RentReleaseInvalid", ChatColor.YELLOW + args[2] + ChatColor.RED)); + player.sendMessage(Residence.getLM().getMessage("Economy.RentReleaseInvalid", ChatColor.YELLOW + res.getName() + ChatColor.RED)); } return true; } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index c51fa07c8..446dab86a 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -179,6 +179,12 @@ public void rent(Player player, String landName, boolean AutoPay, boolean resadm landName = landName.toLowerCase(); RentableLand land = rentableLand.get(landName); + + if (!land.AllowAutoPay && AutoPay) { + player.sendMessage(Residence.getLM().getMessage("Residence.CantAutoPay")); + AutoPay = false; + } + if (Residence.getEconomyManager().canAfford(player.getName(), land.cost)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); Residence.getServ().getPluginManager().callEvent(revent); @@ -278,7 +284,7 @@ public void payRent(Player player, String landName, boolean resadmin) { } } - public void removeFromForRent(Player player, String landName, boolean resadmin) { + public void unrent(Player player, String landName, boolean resadmin) { if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); @@ -292,8 +298,9 @@ public void removeFromForRent(Player player, String landName, boolean resadmin) Residence.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) return; + rentedLand.remove(landName); - if (!rentableLand.get(landName).AllowRenewing) { + if (!rentableLand.get(landName).AllowRenewing || !rentableLand.get(landName).StayInMarket) { rentableLand.remove(landName); } ClaimedResidence res = Residence.getResidenceManager().getByName(landName); @@ -316,7 +323,7 @@ private int msToDays(long ms) { return (int) Math.ceil(((((double) ms / 1000D) / 60D) / 60D) / 24D); } - public void unrent(Player player, String landName, boolean resadmin) { + public void removeFromForRent(Player player, String landName, boolean resadmin) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); if (res == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); @@ -332,10 +339,6 @@ public void unrent(Player player, String landName, boolean resadmin) { return; } - if (rentedLand.containsKey(landName) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyRented", landName, rentedLand.get(landName).player)); - return; - } if (rentableLand.containsKey(landName)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENT); Residence.getServ().getPluginManager().callEvent(revent); @@ -345,13 +348,12 @@ public void unrent(Player player, String landName, boolean resadmin) { rentableLand.remove(landName); if (rentedLand.containsKey(landName)) { rentedLand.remove(landName); - if (res != null) { - res.getPermissions().applyDefaultFlags(); - Residence.getSignUtil().CheckSign(res); - } + } + if (res != null) { + res.getPermissions().applyDefaultFlags(); + Residence.getSignUtil().CheckSign(res); } player.sendMessage(Residence.getLM().getMessage("Residence.RemoveRentable", landName)); - } else { player.sendMessage(Residence.getLM().getMessage("Residence.NotForRent")); } @@ -376,7 +378,7 @@ public boolean isForRent(String landName) { landName = landName.toLowerCase(); return rentableLand.containsKey(landName); } - + public RentableLand getRentableLand(String landName) { if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) landName = landName.toLowerCase(); @@ -534,6 +536,10 @@ public void setRentedRepeatable(Player player, String landName, boolean value, b player.sendMessage(Residence.getLM().getMessage("Rent.EnableRenew", split[split.length - 1])); else if (split.length != 0) player.sendMessage(Residence.getLM().getMessage("Rent.DisableRenew", split[split.length - 1])); + + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + if (res != null) + Residence.getSignUtil().CheckSign(res); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index be42fbe40..b25091d68 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -432,6 +432,9 @@ public void onHangingBreak(HangingBreakByEntityEvent event) { if (Residence.isResAdminOn(player)) return; + if (Residence.getResidenceManager().isOwnerOfLocation(player, ent.getLocation())) + return; + String pname = player.getName(); FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); String world = ent.getWorld().getName(); @@ -745,7 +748,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (Residence.isResAdminOn(player)) return; - if (!res.getPermissions().playerHas(player.getName(), "destroy", false)) { + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "destroy", false)) { event.setCancelled(true); player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "destroy", res.getName())); } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index ec9363377..6dbd5da05 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -22,10 +22,8 @@ import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 8a5d7c994..917912637 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -45,6 +45,13 @@ public ResidenceManager(Residence plugin) { this.plugin = plugin; } + public boolean isOwnerOfLocation(Player player, Location loc) { + ClaimedResidence res = getByLoc(loc); + if (res != null && res.isOwner(player)) + return true; + return false; + } + public ClaimedResidence getByLoc(Location loc) { if (loc == null) return null; @@ -649,8 +656,12 @@ else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Play RentedLand rented = Residence.getRentManager().getRentedLand(areaname); StringBuilder rentableString = new StringBuilder(); - if (rented != null) + if (rented != null) { rentableString.append(Residence.getLM().getMessage("Rent.Expire", GetTime.getTime(rented.endTime)) + "\n"); + if (rented.player.equals(sender.getName()) || resadmin) + rentableString.append((rented.AutoPay ? Residence.getLM().getMessage("Rent.AutoPayTurnedOn") : Residence.getLM().getMessage("Rent.AutoPayTurnedOff")) + + "\n"); + } if (rentable != null) { rentableString.append(Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days) + "\n"); diff --git a/src/plugin.yml b/src/plugin.yml index acdd4a7b0..229ed39df 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.1.2.0 +version: 4.1.2.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From c00fafb34b6289ee7d576989d46134374d337f0d Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 3 Jun 2016 18:53:14 +0300 Subject: [PATCH 0171/1142] Schematic rollback on rent expire --- .../bukkit/residence/ConfigManager.java | 15 ++ .../bukkit/residence/LocaleManager.java | 14 ++ .../bekvon/bukkit/residence/Residence.java | 10 ++ .../bukkit/residence/commands/market.java | 25 ++- .../bekvon/bukkit/residence/commands/tp.java | 2 +- .../residence/economy/rent/RentManager.java | 48 +++++- .../listeners/ResidencePlayerListener.java | 132 +++++++++++----- .../residence/protection/FlagPermissions.java | 2 + .../protection/ResidenceManager.java | 9 +- .../protection/ResidencePermissions.java | 1 + .../selection/SchematicsManager.java | 146 ++++++++++++++++++ src/plugin.yml | 2 +- 12 files changed, 362 insertions(+), 44 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/selection/SchematicsManager.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 811f97919..afaa2f971 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -191,6 +191,11 @@ public class ConfigManager { public List DynMapHiddenRegions; // DynMap + // Schematics + public boolean RestoreAfterRentEnds; + public boolean SchematicsSaveOnFlagChange; + // Schematics + private Residence plugin; public ConfigManager(FileConfiguration config, FileConfiguration flags, FileConfiguration groups, Residence plugin) { @@ -659,6 +664,16 @@ public void UpdateConfigFile() { c.getW().addComment("Global.Rent.DefaultValues.PlayerAutoPay", "If set to true, when player is not defining auto pay on renting, then this value will be used"); RentPlayerAutoPay = c.get("Global.Rent.DefaultValues.PlayerAutoPay", true); + c.getW().addComment("Global.Rent.Schematics.RestoreAfterRentEnds", + "EXPERIMENTAL!!! If set to true, residence will be restored to state it was when backup flag was set to true", + "For securoty reassons only players with aditional residence.backup permission node can set backup flag"); + RestoreAfterRentEnds = c.get("Global.Rent.Schematics.RestoreAfterRentEnds", true); + c.getW().addComment("Global.Rent.Schematics.SaveOnFlagChange", + "When set to true, area state will be saved only when setting backup to true value", + "When set to false, area state will be saved before each renting to have always up to date area look", + "Keep in mind that when its set to false, there is slightly bigger server load as it has to save area each time when some one rents it"); + SchematicsSaveOnFlagChange = c.get("Global.Rent.Schematics.SaveOnFlagChange", true); + c.getW().addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); rentCheckInterval = c.get("Global.RentCheckInterval", 10); diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 07f8717df..79f7a59c7 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -271,6 +271,10 @@ public void LoadLang(String lang) { c.get("Language.Rent.Days", "&eRent days: &6%1"); c.get("Language.Rent.Rented", " &6(Rented)"); c.get("Language.Rent.RentList", " &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7"); + + c.get("Language.Rent.EvictConfirm", "&eWrite &6/res market confirm &eto evict renter from &6%1 &eresidence"); + c.get("Language.Rent.UnrentConfirm", "&eWrite &6/res market confirm &eto unrent &6%1 &eresidence"); + c.get("Language.Rent.ReleaseConfirm", "&eWrite &6/res market confirm &eto remove &6%1 &eresidence from market"); c.get("Language.command.addedAllow", "&eAdded new allowed command for &6%1 &eresidence"); c.get("Language.command.removedAllow", "&eRemoved allowed command for &6%1 &eresidence"); @@ -1107,6 +1111,12 @@ public void LoadLang(String lang) { "Prevent riding a horse"); c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.riding.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); + // backup + FlagList.add("backup"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.backup.Description", + "Prevent riding a horse"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.backup.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // Filling with custom flags info Set sec = conf.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands").getKeys(false); @@ -1439,6 +1449,10 @@ public void LoadLang(String lang) { c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.payrent.Info", Arrays.asList("&eUsage: &6/res market payrent ")); c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.payrent.Args", "[residence]"); + + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.confirm.Description", "Confirms residence unrent/release action"); + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.confirm.Info", + Arrays.asList("&eUsage: &6/res market confirm")); c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Description", "Remove a residence from rent or rentable."); c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Info", diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 82beac345..426fe54f3 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -67,6 +67,7 @@ import com.bekvon.bukkit.residence.protection.PlayerManager; import com.bekvon.bukkit.residence.protection.WorldFlagManager; import com.bekvon.bukkit.residence.selection.AutoSelection; +import com.bekvon.bukkit.residence.selection.SchematicsManager; import com.bekvon.bukkit.residence.selection.SelectionManager; import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; import com.bekvon.bukkit.residence.shopStuff.ShopListener; @@ -149,6 +150,7 @@ public class Residence extends JavaPlugin { protected static Sorting SortingManager; protected static ActionBar ABManager; protected static AutoSelection AutoSelectionManager; + protected static SchematicsManager SchematicManager; protected boolean firstenable = true; protected static EconomyInterface economy; @@ -165,6 +167,7 @@ public class Residence extends JavaPlugin { protected static VersionChecker versionChecker; protected static boolean initsuccess = false; public static Map deleteConfirm; + public static Map UnrentConfirm = new HashMap(); public static List resadminToggle; private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW" }; public static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); @@ -664,6 +667,9 @@ public void run() { SortingManager = new Sorting(); AutoSelectionManager = new AutoSelection(); + if (wep != null) + SchematicManager = new SchematicsManager(); + if (Bukkit.getVersion().toString().contains("Spigot") || Bukkit.getVersion().toString().contains("spigot")) getServer().getPluginManager().registerEvents(spigotlistener, this); @@ -817,6 +823,10 @@ public static ActionBar getABManager2() { return ABManager; } + public static SchematicsManager getSchematicManager() { + return SchematicManager; + } + public static AutoSelection getAutoSelectionManager() { return AutoSelectionManager; } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 2aab1b3af..443ad99e5 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -63,12 +63,35 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } + Residence.UnrentConfirm.put(player.getName(), area); + + if (Residence.getRentManager().isRented(area)) { + if (resadmin || Residence.isResAdminOn(player)) + sender.sendMessage(Residence.getLM().getMessage("Rent.EvictConfirm", area)); + else if (Residence.getRentManager().getRentingPlayer(area).equalsIgnoreCase(sender.getName())) + sender.sendMessage(Residence.getLM().getMessage("Rent.UnrentConfirm", area)); + else + Residence.getRentManager().printRentInfo(player, area); + } else + sender.sendMessage(Residence.getLM().getMessage("Rent.ReleaseConfirm", area)); + + return true; + + case "confirm": + + if (!Residence.UnrentConfirm.containsKey(player.getName())) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return false; + } + + area = Residence.UnrentConfirm.remove(player.getName()); + if (!Residence.getRentManager().isRented(area)) Residence.getRentManager().removeFromForRent(player, area, resadmin); else Residence.getRentManager().unrent(player, area, resadmin); - return true; + return true; case "sign": if (args.length != 3) { return false; diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index 6b61cb6a2..47e1a666b 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -19,7 +19,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length != 2) return false; - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1], true); if (res == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 446dab86a..b837078ff 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -171,8 +171,11 @@ public void rent(Player player, String landName, boolean AutoPay, boolean resadm } if (this.isRented(landName)) { String[] split = landName.split("\\."); - if (split.length != 0) - player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyRented", split[split.length - 1], this.getRentingPlayer(landName))); + if (split.length != 0) { +// player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyRented", split[split.length - 1], this.getRentingPlayer(landName))); + printRentInfo(player, landName); +// Bukkit.dispatchCommand(player, "res market info " + landName); + } return; } if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) @@ -207,6 +210,14 @@ public void rent(Player player, String landName, boolean AutoPay, boolean resadm res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); player.sendMessage(Residence.getLM().getMessage("Residence.RentSuccess", landName, land.days)); + + if (Residence.getSchematicManager() != null && + Residence.getConfigManager().RestoreAfterRentEnds && + !Residence.getConfigManager().SchematicsSaveOnFlagChange && + res.getPermissions().has("backup", true)) { + Residence.getSchematicManager().save(res); + } + } else { player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); } @@ -305,7 +316,15 @@ public void unrent(Player player, String landName, boolean resadmin) { } ClaimedResidence res = Residence.getResidenceManager().getByName(landName); if (res != null) { + boolean backup = res.getPermissions().has("backup", false); + res.getPermissions().applyDefaultFlags(); + + if (Residence.getSchematicManager() != null && Residence.getConfigManager().RestoreAfterRentEnds && backup) { + Residence.getSchematicManager().load(res); + // set true if its already exists + res.getPermissions().setFlag("backup", FlagState.TRUE); + } Residence.getSignUtil().CheckSign(res); } player.sendMessage(Residence.getLM().getMessage("Residence.Unrent", landName)); @@ -469,9 +488,20 @@ public void checkCurrentRents() { } if (!rentable.StayInMarket) rentableLand.remove(next.getKey()); - res.getPermissions().applyDefaultFlags(); it.remove(); + boolean backup = res.getPermissions().has("backup", false); + + res.getPermissions().applyDefaultFlags(); + + if (Residence.getSchematicManager() != null && Residence.getConfigManager().RestoreAfterRentEnds && backup) { + Residence.getSchematicManager().load(res); + Residence.getSignUtil().CheckSign(res); + // set true if its already exists + res.getPermissions().setFlag("backup", FlagState.TRUE); + // To avoid lag spikes on multiple residence restores at once, will limit to one residence at time + break; + } Residence.getSignUtil().CheckSign(res); } else { rentableLand.remove(next.getKey()); @@ -525,6 +555,11 @@ public void setRentedRepeatable(Player player, String landName, boolean value, b return; } + if (!this.getRentableLand(landName).AllowAutoPay && value) { + player.sendMessage(Residence.getLM().getMessage("Residence.CantAutoPay")); + return; + } + if (!land.player.equals(player.getName()) && !resadmin) { player.sendMessage(Residence.getLM().getMessage("Residence.NotOwner")); return; @@ -559,6 +594,13 @@ public void printRentInfo(Player player, String landName) { player.sendMessage(Residence.getLM().getMessage("Rentable.AllowAutoPay", rentable.AllowAutoPay)); if (rented != null) { player.sendMessage(Residence.getLM().getMessage("Residence.RentedBy", rented.player)); + + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + + if (rented.player.equals(player.getName()) || res != null && res.isOwner(player) || Residence.isResAdminOn(player)) + player.sendMessage((rented.AutoPay ? Residence.getLM().getMessage("Rent.AutoPayTurnedOn") : Residence.getLM().getMessage("Rent.AutoPayTurnedOff")) + + "\n"); + player.sendMessage(Residence.getLM().getMessage("Rent.Expire", GetTime.getTime(rented.endTime))); } else { player.sendMessage(Residence.getLM().getMessage("General.Status", Residence.getLM().getMessage("General.Available"))); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b7fba0c4a..36e0ee507 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -106,6 +106,33 @@ public void reload() { } } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceBackup(ResidenceFlagChangeEvent event) { + if (!event.getFlag().equalsIgnoreCase("backup")) + return; + Player player = event.getPlayer(); + if (!Residence.getConfigManager().RestoreAfterRentEnds) + return; + if (!Residence.getConfigManager().SchematicsSaveOnFlagChange) + return; + if (Residence.getSchematicManager() == null) + return; + if (player != null && !player.hasPermission("residence.backup")) + event.setCancelled(true); + else + Residence.getSchematicManager().save(event.getResidence()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceBackupRename(ResidenceRenameEvent event) { + Residence.getSchematicManager().rename(event.getResidence(), event.getNewResidenceName()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceDelete(ResidenceDeleteEvent event) { + Residence.getSchematicManager().delete(event.getResidence()); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerLogin(PlayerLoginEvent event) { if (!Residence.getConfigManager().isRentInformOnEnding()) @@ -309,8 +336,6 @@ public void onSignInteract(PlayerInteractEvent event) { // disabling event on world if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) return; - if (event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; Block block = event.getClickedBlock(); @@ -339,21 +364,27 @@ public void onSignInteract(PlayerInteractEvent event) { boolean ForSale = Residence.getTransactionManager().isForSale(landName); boolean ForRent = Residence.getRentManager().isForRent(landName); - if (ForSale) { - Bukkit.dispatchCommand(player, "res market buy " + landName); - break; - } + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (ForSale) { + Bukkit.dispatchCommand(player, "res market buy " + landName); + break; + } - if (ForRent) { - if (Residence.getRentManager().isRented(landName) && player.isSneaking()) - Bukkit.dispatchCommand(player, "res market release " + landName); - else { - boolean stage = true; - if (player.isSneaking()) - stage = false; - Bukkit.dispatchCommand(player, "res market rent " + landName + " " + stage); + if (ForRent) { + if (Residence.getRentManager().isRented(landName) && player.isSneaking()) + Bukkit.dispatchCommand(player, "res market release " + landName); + else { + boolean stage = true; + if (player.isSneaking()) + stage = false; + Bukkit.dispatchCommand(player, "res market rent " + landName + " " + stage); + } + break; + } + } else if (event.getAction() == Action.LEFT_CLICK_BLOCK) { + if (ForRent && Residence.getRentManager().isRented(landName) && Residence.getRentManager().getRentingPlayer(landName).equals(player.getName())) { + Residence.getRentManager().payRent(player, landName, false); } - break; } } } @@ -481,6 +512,36 @@ public void onPlayerJoin(PlayerChangedWorldEvent event) { Residence.turnResAdminOn(player); } Residence.getPermissionManager().updateGroupNameForPlayer(player, true); + + FlagPermissions perms = Residence.getPermsByLocForPlayer(player.getLocation(), player); + + if ((player.getAllowFlight() || player.isFlying()) && perms.has("nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( + "residence.nofly.bypass")) { + Location lc = player.getLocation(); + Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); + location.setPitch(lc.getPitch()); + location.setYaw(lc.getYaw()); + int from = location.getBlockY(); + int maxH = location.getWorld().getMaxHeight() - 1; + for (int i = 0; i < maxH; i++) { + location.setY(from - i); + Block block = location.getBlock(); + if (!Residence.getNms().isEmptyBlock(block)) { + location.setY(from - i + 1); + break; + } + if (location.getBlockY() <= 0) { + player.setFlying(false); + player.setAllowFlight(false); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Fly", location.getWorld().getName())); + return; + } + } + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Fly", location.getWorld().getName())); + player.teleport(location); + player.setFlying(false); + player.setAllowFlight(false); + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -1294,30 +1355,30 @@ public void run() { if (res == null) { lastOutsideLoc.put(pname, loc); - if (ResOld != null) { - String leave = ResOld.getLeaveMessage(); + if (ResOld == null) + return; - // New ResidenceChangeEvent - ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); - Residence.getServ().getPluginManager().callEvent(chgEvent); + String leave = ResOld.getLeaveMessage(); - if (ResOld.getPermissions().has("night", true) || ResOld.getPermissions().has("day", true)) - player.resetPlayerTime(); + // New ResidenceChangeEvent + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); + Residence.getServ().getPluginManager().callEvent(chgEvent); - if (ResOld.getPermissions().has("sun", true) || ResOld.getPermissions().has("rain", true)) - player.resetPlayerWeather(); + if (ResOld.getPermissions().has("night", true) || ResOld.getPermissions().has("day", true)) + player.resetPlayerTime(); - if (leave != null && !leave.equals("")) { - if (Residence.getConfigManager().useActionBar()) { - Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) - .toString()); - } else { - player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); - } + if (ResOld.getPermissions().has("sun", true) || ResOld.getPermissions().has("rain", true)) + player.resetPlayerWeather(); + + if (leave != null && !leave.equals("")) { + if (Residence.getConfigManager().useActionBar()) { + Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) + .toString()); + } else { + player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); } - currentRes.remove(pname); } - return; + currentRes.remove(pname); } if (move) { @@ -1422,8 +1483,7 @@ else if (res.getPermissions().has("rain", false)) ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); Residence.getServ().getPluginManager().callEvent(chgEvent); - if (enterMessage != null && !enterMessage.equals("") && !(ResOld != null && res == ResOld.getParent())) { - + if (!(ResOld != null && res == ResOld.getParent())) { if (Residence.getConfigManager().isExtraEnterMessage() && !res.isOwner(player)) { if (Residence.getRentManager().isForRent(areaname) && !Residence.getRentManager().isRented(areaname)) { RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); @@ -1433,7 +1493,7 @@ else if (res.getPermissions().has("rain", false)) int sale = Residence.getTransactionManager().getSaleAmount(areaname); Residence.getAB().send(player, Residence.getLM().getMessage("Residence.CanBeBought", areaname, sale)); } - } else { + } else if (enterMessage != null && !enterMessage.equals("")) { if (Residence.getConfigManager().useActionBar()) { Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)) .toString()); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 37cd76e25..0aabd6724 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -233,6 +233,8 @@ public static void initValidFlags() { addResidenceOnlyFlag("rain"); addResidenceOnlyFlag("dryup"); + + addResidenceOnlyFlag("backup"); addPlayerOrGroupOnlyFlag("admin"); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 917912637..13511e132 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -83,11 +83,16 @@ public ClaimedResidence getByLoc(Location loc) { } public ClaimedResidence getByName(String name) { + return getByName(name, false); + } + + public ClaimedResidence getByName(String name, boolean tp) { if (name == null) { return null; } String[] split = name.split("\\."); - if (Residence.getConfigManager().isResCreateCaseSensitive()) { + if (Residence.getConfigManager().isResCreateCaseSensitive() && !tp || + tp && Residence.getConfigManager().isResTpCaseSensitive()) { if (split.length == 1) { return residences.get(name); } @@ -658,7 +663,7 @@ else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Play StringBuilder rentableString = new StringBuilder(); if (rented != null) { rentableString.append(Residence.getLM().getMessage("Rent.Expire", GetTime.getTime(rented.endTime)) + "\n"); - if (rented.player.equals(sender.getName()) || resadmin) + if (rented.player.equals(sender.getName()) || resadmin || res.isOwner(sender.getName())) rentableString.append((rented.AutoPay ? Residence.getLM().getMessage("Rent.AutoPayTurnedOn") : Residence.getLM().getMessage("Rent.AutoPayTurnedOff")) + "\n"); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index f332ebe36..fc03e02e2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -347,6 +347,7 @@ public void applyDefaultFlags() { } } } + for (Entry next : dcflags) { if (this.checkValidFlag(next.getKey(), false)) { if (next.getValue()) { diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java new file mode 100644 index 000000000..be184812c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -0,0 +1,146 @@ +package com.bekvon.bukkit.residence.selection; + +import java.io.File; +import java.io.IOException; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.sk89q.worldedit.CuboidClipboard; +import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.MaxChangedBlocksException; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.bukkit.BukkitWorld; +import com.sk89q.worldedit.schematic.SchematicFormat; + +@SuppressWarnings("deprecation") +public class SchematicsManager { + public boolean save(ClaimedResidence res) { + if (Residence.getWEplugin() == null) + return false; + if (res == null) + return false; + + CuboidArea area = res.getAreaArray()[0]; + + Vector bvmin = new Vector(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + Vector bvmax = new Vector(area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); + Vector origin = new Vector(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + + World bworld = Bukkit.getWorld(res.getWorld()); + + if (bworld == null) + return false; + + EditSession editSession = new EditSession(new BukkitWorld(bworld), Integer.MAX_VALUE); + editSession.enableQueue(); + CuboidClipboard clipboard = new CuboidClipboard(bvmax.subtract(bvmin).add(new Vector(1, 1, 1)), origin); + clipboard.setOrigin(origin); + clipboard.copy(editSession); + + File dir = new File(Residence.getDataLocation(), "Schematics"); + if (!dir.exists()) + try { + dir.mkdir(); + } catch (SecurityException se) { + } + dir = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld()); + if (!dir.exists()) + try { + dir.mkdir(); + } catch (SecurityException se) { + } + + File file = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + try { + SchematicFormat.MCEDIT.save(clipboard, file); + } catch (com.sk89q.worldedit.world.DataException | IOException e) { + return false; + } + editSession.flushQueue(); + return true; + } + + public boolean load(ClaimedResidence res) { + + if (Residence.getWEplugin() == null) + return false; + + if (res == null) + return false; + + World bworld = Bukkit.getWorld(res.getWorld()); + + if (bworld == null) + return false; + + EditSession es = new EditSession(new BukkitWorld(bworld), Integer.MAX_VALUE); + File file = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + + if (!file.exists()) + return false; + + CuboidClipboard cc = null; + try { + cc = CuboidClipboard.loadSchematic(file); + } catch (com.sk89q.worldedit.world.DataException e1) { + e1.printStackTrace(); + } catch (IOException e1) { + e1.printStackTrace(); + return false; + } + + if (cc == null) + return false; + Vector or = cc.getOrigin(); + ClaimedResidence r1 = Residence.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX(), or.getBlockY(), or.getBlockZ())); + ClaimedResidence r2 = Residence.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX() + cc.getWidth() - 1, or.getBlockY() + cc.getHeight() - 1, or + .getBlockZ() + cc.getLength() - 1)); + if (r1 == null || r2 == null) + return false; + + if (!r1.getName().equalsIgnoreCase(r2.getName())) + return false; + +// int totalBlocks = cc.getHeight() * cc.getLength() * cc.getWidth(); + + try { + cc.paste(es, cc.getOrigin(), false); + } catch (MaxChangedBlocksException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public boolean delete(ClaimedResidence res) { + if (Residence.getWEplugin() == null) + return false; + if (res == null) + return false; + + File file = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + if (!file.exists()) + return false; + + return file.delete(); + } + + public boolean rename(ClaimedResidence res, String newName) { + if (Residence.getWEplugin() == null) + return false; + if (res == null) + return false; + + File oldFile = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + + if (!oldFile.exists()) + return false; + + File newFile = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + newName + ".schematic"); + return oldFile.renameTo(newFile); + } +} diff --git a/src/plugin.yml b/src/plugin.yml index 229ed39df..8c68b0eb7 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.1.2.1 +version: 4.1.3.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From eb0a586f8378a682adf6d31852b5e8b54b60d8a0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 4 Jun 2016 13:52:34 +0300 Subject: [PATCH 0172/1142] Rollbak change made before, as this is correct way to do --- .../listeners/ResidencePlayerListener.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 36e0ee507..4318fa916 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1355,30 +1355,30 @@ public void run() { if (res == null) { lastOutsideLoc.put(pname, loc); - if (ResOld == null) - return; - - String leave = ResOld.getLeaveMessage(); + if (ResOld != null) { + String leave = ResOld.getLeaveMessage(); - // New ResidenceChangeEvent - ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); - Residence.getServ().getPluginManager().callEvent(chgEvent); + // New ResidenceChangeEvent + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); + Residence.getServ().getPluginManager().callEvent(chgEvent); - if (ResOld.getPermissions().has("night", true) || ResOld.getPermissions().has("day", true)) - player.resetPlayerTime(); + if (ResOld.getPermissions().has("night", true) || ResOld.getPermissions().has("day", true)) + player.resetPlayerTime(); - if (ResOld.getPermissions().has("sun", true) || ResOld.getPermissions().has("rain", true)) - player.resetPlayerWeather(); + if (ResOld.getPermissions().has("sun", true) || ResOld.getPermissions().has("rain", true)) + player.resetPlayerWeather(); - if (leave != null && !leave.equals("")) { - if (Residence.getConfigManager().useActionBar()) { - Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) - .toString()); - } else { - player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + if (leave != null && !leave.equals("")) { + if (Residence.getConfigManager().useActionBar()) { + Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) + .toString()); + } else { + player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + } } + currentRes.remove(pname); } - currentRes.remove(pname); + return; } if (move) { From c3535002e038cc96d9db7c3a73a3bfffcd725f4d Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 5 Jun 2016 13:28:51 +0300 Subject: [PATCH 0173/1142] res give command remake / option to prevent command usage with perm --- .../bukkit/residence/LocaleManager.java | 1 + .../residence/ResidenceCommandListener.java | 9 ++ .../bukkit/residence/commands/remove.java | 132 ++++++------------ .../protection/ResidenceManager.java | 9 +- src/plugin.yml | 2 +- 5 files changed, 61 insertions(+), 92 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 79f7a59c7..fd755d7ed 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -416,6 +416,7 @@ public void LoadLang(String lang) { writer.addComment("Language.CantPlaceWater", "Replace all text with '' to disable this message"); c.get("Language.General.CantPlaceWater", "&cYou can't place Water outside residence and higher than &6%1 &cblock level"); c.get("Language.General.NoPermission", "&cYou dont have permission for this."); + c.get("Language.General.NoCmdPermission", "&cYou dont have permission for this command."); c.get("Language.General.DefaultUsage", "&eType &6/%1 ? &efor more info"); c.get("Language.General.MaterialGet", "&eThe material name for ID &6%1 &eis &6%2"); c.get("Language.General.MarketList", "&e---- &6Market List &e----"); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 312a903f7..2a3470e4b 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -9,6 +9,9 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; + import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; public class ResidenceCommandListener extends Residence { @@ -126,6 +129,12 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return commandHelp(new String[] { "?" }, resadmin, sender, command); } + Permission p = new Permission("residence.command." + args[0], PermissionDefault.TRUE); + if (!sender.hasPermission(p)) { + sender.sendMessage(Residence.getLM().getMessage("General.NoCmdPermission")); + return true; + } + if (!resadmin && Residence.resadminToggle.contains(player.getName())) { if (!Residence.gmanager.isResidenceAdmin(player)) { Residence.resadminToggle.remove(player.getName()); diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 9a1c94cdd..5a4575a44 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -1,6 +1,5 @@ package com.bekvon.bukkit.residence.commands; -import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -14,104 +13,57 @@ public class remove implements cmd { @Override public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - Player player = null; - if (sender instanceof Player) { - player = (Player) sender; - - if (Residence.deleteConfirm.containsKey(player.getName())) - Residence.deleteConfirm.remove(player.getName()); - - if (args.length == 1) { - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + ClaimedResidence res = null; + String senderName = sender.getName(); + if (args.length == 2) { + res = Residence.getResidenceManager().getByName(args[1]); + } else if (sender instanceof Player && args.length == 1) { + res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); + } - if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); - return false; - } + if (res == null) { + sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } - if (res.isSubzone() && !player.hasPermission("residence.delete.subzone") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Subzone.CantDelete")); - return false; - } + if (res.isSubzone() && !sender.hasPermission("residence.delete.subzone") && !resadmin) { + sender.sendMessage(Residence.getLM().getMessage("Subzone.CantDelete")); + return true; + } - if (res.isSubzone() && player.hasPermission("residence.delete.subzone") && !resadmin && Residence.getConfigManager().isPreventSubZoneRemoval() && !res - .getParent().isOwner(player)) { - player.sendMessage(Residence.getLM().getMessage("Subzone.CantDeleteNotOwnerOfParent")); - return false; - } + if (res.isSubzone() && + sender.hasPermission("residence.delete.subzone") && + !resadmin && + Residence.getConfigManager().isPreventSubZoneRemoval() && + !res.getParent().isOwner(senderName)) { + sender.sendMessage(Residence.getLM().getMessage("Subzone.CantDeleteNotOwnerOfParent")); + return true; + } - if (!res.isSubzone() && !player.hasPermission("residence.delete") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.CantDeleteResidence")); - return false; - } + if (!res.isSubzone() && !sender.hasPermission("residence.delete") && !resadmin) { + sender.sendMessage(Residence.getLM().getMessage("Residence.CantDeleteResidence")); + return true; + } - if (res.isSubzone()) { - String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - String[] split = area.split("\\."); - String words = split[split.length - 1]; - if (!Residence.deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { - player.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", words)); - Residence.deleteConfirm.put(player.getName(), area); - } else { - Residence.getResidenceManager().removeResidence(player, area, resadmin); - } - return true; - } else { - if (!Residence.deleteConfirm.containsKey(player.getName()) || !res.getName().equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { - player.sendMessage(Residence.getLM().getMessage("Residence.DeleteConfirm", res.getName())); - Residence.deleteConfirm.put(player.getName(), res.getName()); - } else { - Residence.getResidenceManager().removeResidence(player, res.getName(), resadmin); - } - return true; - } + if (Residence.deleteConfirm.containsKey(senderName)) + Residence.deleteConfirm.remove(senderName); - } - } - if (args.length != 2) { - return false; + String resname = res.getName(); + String areaname = ""; + if (res.isSubzone()) { + String[] split = resname.split("\\."); + areaname = split[split.length - 1]; } - if (player != null) { - if (!Residence.deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(Residence.deleteConfirm.get(player.getName()))) { - String words = ""; - if (Residence.getResidenceManager().getByName(args[1]) != null) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res.getParent() != null) { - String[] split = args[1].split("\\."); - words = split[split.length - 1]; - } - } - if (words == "") { - player.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", args[1])); - } else { - player.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", words)); - } - Residence.deleteConfirm.put(player.getName(), args[1]); - } else { - Residence.getResidenceManager().removeResidence(player, args[1], resadmin); - } + + if (!Residence.deleteConfirm.containsKey(senderName) || !resname.equalsIgnoreCase(Residence.deleteConfirm.get(senderName))) { + if (res.isSubzone()) + sender.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", areaname)); + else + sender.sendMessage(Residence.getLM().getMessage("Residence.DeleteConfirm", resname)); + Residence.deleteConfirm.put(senderName, resname); } else { - if (!Residence.deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(Residence.deleteConfirm.get("Console"))) { - String words = ""; - if (Residence.getResidenceManager().getByName(args[1]) != null) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res.getParent() != null) { - String[] split = args[1].split("\\."); - words = split[split.length - 1]; - } - } - if (words == "") { - Bukkit.getConsoleSender().sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", args[1])); - } else { - Bukkit.getConsoleSender().sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", words)); - } - Residence.deleteConfirm.put("Console", args[1]); - } else { - Residence.getResidenceManager().removeResidence(args[1]); - } + Residence.getResidenceManager().removeResidence(sender, resname, resadmin); } return true; } - } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 13511e132..6d7bf1cbf 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -91,7 +91,7 @@ public ClaimedResidence getByName(String name, boolean tp) { return null; } String[] split = name.split("\\."); - if (Residence.getConfigManager().isResCreateCaseSensitive() && !tp || + if (Residence.getConfigManager().isResCreateCaseSensitive() && !tp || tp && Residence.getConfigManager().isResTpCaseSensitive()) { if (split.length == 1) { return residences.get(name); @@ -425,6 +425,13 @@ public void removeResidence(String name) { this.removeResidence(null, name, true); } + public void removeResidence(CommandSender sender, String name, boolean resadmin) { + if (sender instanceof Player) + removeResidence((Player) sender, name, resadmin); + else + this.removeResidence(null, name, true); + } + @SuppressWarnings("deprecation") public void removeResidence(Player player, String name, boolean resadmin) { diff --git a/src/plugin.yml b/src/plugin.yml index 8c68b0eb7..0d00db22f 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.1.3.1 +version: 4.1.4.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From fc5ac665904b9b1f9932e485261c411939127b87 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 5 Jun 2016 13:33:52 +0300 Subject: [PATCH 0174/1142] Send simple message on action bar fail --- .../bukkit/residence/actionBarNMS/v1_8_R1.java | 12 ++++++++---- .../bukkit/residence/actionBarNMS/v1_8_R2.java | 12 ++++++++---- .../bukkit/residence/actionBarNMS/v1_8_R3.java | 12 ++++++++---- .../bukkit/residence/actionBarNMS/v1_9_R1.java | 12 ++++++++---- .../bukkit/residence/actionBarNMS/v1_9_R2.java | 12 ++++++++---- 5 files changed, 40 insertions(+), 20 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java index ec307c1f3..56b5a26d4 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java @@ -22,9 +22,13 @@ public void send(CommandSender sender, String msg) { @Override public void send(Player player, String msg) { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } } } diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java index 0d9423add..cd0d9f392 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java @@ -22,9 +22,13 @@ public void send(CommandSender sender, String msg) { @Override public void send(Player player, String msg) { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } } } diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java index 32c49b4dd..7273983cf 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java @@ -22,9 +22,13 @@ public void send(CommandSender sender, String msg) { @Override public void send(Player player, String msg) { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } } } diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java index 8c7e3f9a6..d2ccbd4af 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java @@ -22,9 +22,13 @@ public void send(CommandSender sender, String msg) { @Override public void send(Player player, String msg) { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } } } diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java index 5fd85bc35..5fe64be8f 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java @@ -22,9 +22,13 @@ public void send(CommandSender sender, String msg) { @Override public void send(Player player, String msg) { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } } } From d28318a67a911e8af0dadf78a95d37fd037cb005 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 5 Jun 2016 20:15:51 +0300 Subject: [PATCH 0175/1142] We need properly check players group based by permissions --- .../residence/containers/PlayerGroup.java | 47 ++++++++++++++----- .../permissions/PermissionGroup.java | 15 ++++++ .../permissions/PermissionManager.java | 4 +- 3 files changed, 54 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index 7e024ef53..a6b4bf9bf 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -1,11 +1,15 @@ package com.bekvon.bukkit.residence.containers; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map.Entry; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -46,42 +50,63 @@ public void updateGroup(String world, boolean force) { return; this.lastCheck = System.currentTimeMillis(); + List posibleGroups = new ArrayList(); String group; if (Residence.getPermissionManager().getPlayersGroups().containsKey(playerName.toLowerCase())) { group = Residence.getPermissionManager().getPlayersGroups().get(playerName.toLowerCase()); if (group != null) { group = group.toLowerCase(); if (group != null && Residence.getPermissionManager().getGroups().containsKey(group)) { + + PermissionGroup g = Residence.getPermissionManager().getGroups().get(group); + posibleGroups.add(g); + this.groups.put(world, group); } } } - String permGroup = getPermissionGroup(); - if (permGroup != null) { - this.groups.put(world, permGroup); - } + posibleGroups.add(getPermissionGroup()); group = Residence.getPermissionManager().getPermissionsGroup(playerName.toLowerCase(), world); - if (group == null || !Residence.getPermissionManager().getGroups().containsKey(group)) { + PermissionGroup g = Residence.getPermissionManager().getGroupByName(group); + if (g != null) + posibleGroups.add(g); + + PermissionGroup finalGroup = null; + if (posibleGroups.size() == 1) + finalGroup = posibleGroups.get(0); + + for (int i = 0; i < posibleGroups.size(); i++) { + if (finalGroup == null){ + finalGroup = posibleGroups.get(i); + continue; + } + + if (finalGroup.getPriority() < posibleGroups.get(i).getPriority()) + finalGroup = posibleGroups.get(i); + } + + if (finalGroup == null || !Residence.getPermissionManager().getGroups().containsValue(finalGroup)) { this.groups.put(world, Residence.getConfigManager().getDefaultGroup().toLowerCase()); } else { - this.groups.put(world, group); + this.groups.put(world, finalGroup.getGroupName()); } } - private String getPermissionGroup() { - String group = null; + private PermissionGroup getPermissionGroup() { + PermissionGroup group = null; for (Entry one : Residence.getPermissionManager().getGroups().entrySet()) { if (player != null) { - if (this.player.hasPermission("residence.group." + one.getKey())) - group = one.getKey(); + Permission p = new Permission("residence.group." + one.getKey(), PermissionDefault.FALSE); + if (this.player.hasPermission(p)) + group = one.getValue(); } else { OfflinePlayer offlineP = Residence.getOfflinePlayer(playerName); if (offlineP != null) if (ResidenceVaultAdapter.hasPermission(offlineP, "residence.group." + one.getKey(), Residence.getConfigManager().getDefaultWorld())) - group = one.getKey(); + group = one.getValue(); } } return group; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index a5f028a71..5e17a0627 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -48,6 +48,7 @@ public class PermissionGroup { protected int maxRentables; protected boolean selectCommandAccess; protected boolean itemListAccess; + protected int priority = 0; public PermissionGroup(String name) { flagPerms = new FlagPermissions(); @@ -57,6 +58,14 @@ public PermissionGroup(String name) { groupname = name; } + public void setPriority(int number) { + this.priority = number; + } + + public int getPriority() { + return this.priority; + } + public PermissionGroup(String name, ConfigurationSection node) { this(name); this.parseGroup(node); @@ -66,6 +75,12 @@ public PermissionGroup(String name, ConfigurationSection node, FlagPermissions p this(name, node); flagPerms.setParent(parentFlagPerms); } + + public PermissionGroup(String name, ConfigurationSection node, FlagPermissions parentFlagPerms, int priority) { + this(name, node); + flagPerms.setParent(parentFlagPerms); + this.priority = priority; + } private void parseGroup(ConfigurationSection limits) { if (limits == null) { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 22bafb5b0..4ddce8caa 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -174,9 +174,11 @@ private void readConfig(FileConfiguration config, FileConfiguration flags) { ConfigurationSection nodes = config.getConfigurationSection("Groups"); if (nodes != null) { Set entrys = nodes.getKeys(false); + int i = 0; for (String key : entrys) { try { - groups.put(key.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms)); + i++; + groups.put(key.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms, i)); List mirrors = nodes.getConfigurationSection(key).getStringList("Mirror"); for (String group : mirrors) { groups.put(group.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms)); From 9db8e8692d39858212c1f4a2556bd9600c9cee37 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 6 Jun 2016 14:00:56 +0300 Subject: [PATCH 0176/1142] Properly update residence name all over Allow second line of residence name if its for sale Show enter message if residence is not for sale or rent --- .../residence/economy/TransactionManager.java | 27 +++++- .../residence/economy/rent/RentManager.java | 65 ++++++++++++-- .../listeners/ResidencePlayerListener.java | 5 +- .../protection/ResidenceManager.java | 11 ++- .../bukkit/residence/signsStuff/SignUtil.java | 85 +++++++++++++++++-- src/plugin.yml | 2 +- 6 files changed, 170 insertions(+), 25 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 101cfb2ef..e2f5cfac7 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -41,14 +42,32 @@ public static boolean chargeEconomyMoney(Player player, int amount) { return true; } - public void updateRentableName(String oldName, String newName) { + public void updateSellName(String oldName, String newName) { if (!Residence.getConfigManager().isResCreateCaseSensitive() && oldName != null && newName != null) { oldName = oldName.toLowerCase(); newName = newName.toLowerCase(); } - if (sellAmount.containsKey(oldName)) { - sellAmount.put(newName, sellAmount.get(oldName)); - sellAmount.remove(oldName); + + for (Iterator> it = sellAmount.entrySet().iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + + String n = entry.getKey(); + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + n = n.toLowerCase(); + + if (n.contains(".") && n.startsWith(oldName + ".") || n.equals(oldName)) { + + int amount = entry.getValue(); + String[] split = n.split(oldName); + String subname = ""; + if (split.length > 1) + subname = n.split(oldName)[1]; + String name = newName + subname; + it.remove(); + + sellAmount.put(name, amount); + + } } } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index b837078ff..6a928bde9 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -23,8 +23,8 @@ import org.bukkit.entity.Player; public class RentManager implements MarketRentInterface { - protected Map rentedLand; - protected Map rentableLand; + private Map rentedLand; + private Map rentableLand; public RentManager() { rentedLand = new HashMap<>(); @@ -649,14 +649,63 @@ public void updateRentableName(String oldName, String newName) { oldName = oldName.toLowerCase(); newName = newName.toLowerCase(); } - if (rentableLand.containsKey(oldName)) { - rentableLand.put(newName, rentableLand.get(oldName)); - rentableLand.remove(oldName); + HashMap toAddRentable = new HashMap(); + for (Iterator> it = rentableLand.entrySet().iterator(); it.hasNext();) { + Entry entry = it.next(); + String n = entry.getKey(); + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + n = n.toLowerCase(); + + if (n.contains(".") && n.startsWith(oldName + ".") || n.equals(oldName)) { + RentableLand land = new RentableLand(); + land.AllowAutoPay = entry.getValue().AllowAutoPay; + land.AllowRenewing = entry.getValue().AllowRenewing; + land.cost = entry.getValue().cost; + land.days = entry.getValue().days; + land.StayInMarket = entry.getValue().StayInMarket; + + String[] split = n.split(oldName); + String subname = ""; + if (split.length > 1) + subname = n.split(oldName)[1]; + String name = newName + subname; +// rentableLand.remove(entry); + toAddRentable.put(name, land); + + it.remove(); + } } - if (rentedLand.containsKey(oldName)) { - rentedLand.put(newName, rentedLand.get(oldName)); - rentedLand.remove(oldName); + rentableLand.putAll(toAddRentable); + + HashMap toAddRented = new HashMap(); + for (Iterator> it = rentedLand.entrySet().iterator(); it.hasNext();) { + Entry entry = it.next(); + String n = entry.getKey(); + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + n = n.toLowerCase(); + if (n.contains(".") && n.startsWith(oldName + ".") || n.equals(oldName)) { + RentedLand rented = entry.getValue(); + String[] split = n.split(oldName); + String subname = ""; + if (split.length > 1) + subname = n.split(oldName)[1]; + String name = newName + subname; +// rentedLand.remove(entry); +// rentedLand.put(name, rented); + toAddRented.put(name, rented); + it.remove(); + } } + rentedLand.putAll(toAddRented); + +// if (rentableLand.containsKey(oldName)) { +// rentableLand.put(newName, rentableLand.get(oldName)); +// rentableLand.remove(oldName); +// } +// if (rentedLand.containsKey(oldName)) { +// rentedLand.put(newName, rentedLand.get(oldName)); +// rentedLand.remove(oldName); +// } } public void printRentableResidences(Player player, int page) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 4318fa916..3b4618023 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -287,8 +287,6 @@ else if (white == 0) } } -// Debug.D(white + ":" + black); - if (white != 0 && white >= black || black == 0) return; @@ -1484,7 +1482,8 @@ else if (res.getPermissions().has("rain", false)) Residence.getServ().getPluginManager().callEvent(chgEvent); if (!(ResOld != null && res == ResOld.getParent())) { - if (Residence.getConfigManager().isExtraEnterMessage() && !res.isOwner(player)) { + if (Residence.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (Residence.getRentManager().isForRent(areaname) || Residence + .getTransactionManager().isForSale(areaname))) { if (Residence.getRentManager().isForRent(areaname) && !Residence.getRentManager().isRented(areaname)) { RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); if (rentable != null) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 6d7bf1cbf..12aecf310 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -883,7 +883,9 @@ public boolean renameResidence(Player player, String oldName, String newName, bo Residence.getRentManager().updateRentableName(oldName, newName); } - Residence.getTransactionManager().updateRentableName(oldName, newName); + Residence.getTransactionManager().updateSellName(oldName, newName); + + Residence.getSignUtil().updateSignResName(oldName, newName); if (player != null) { player.sendMessage(Residence.getLM().getMessage("Residence.Rename", oldName, newName)); @@ -898,7 +900,12 @@ public boolean renameResidence(Player player, String oldName, String newName, bo Residence.getRentManager().updateRentableName(oldName, parent.getName() + "." + newName); } - return parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); + Residence.getTransactionManager().updateSellName(oldName, parent.getName() + "." + newName); + boolean feed = parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); + + Residence.getSignUtil().updateSignResName(oldName, parent.getName() + "." + newName); + + return feed; } } else { if (player != null) { diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 679100712..8fd0b1034 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -145,7 +145,7 @@ public void CheckSign(final ClaimedResidence res, int time) { public void run() { CheckSign(res); } - }, 5L); + }, time * 1L); } public void CheckSign(ClaimedResidence res) { @@ -170,10 +170,42 @@ public void removeSign(String res) { } } + public void updateSignResName(String oldName, String newName) { + if (!Residence.getConfigManager().isResCreateCaseSensitive() && oldName != null && newName != null) { + oldName = oldName.toLowerCase(); + newName = newName.toLowerCase(); + } + boolean cs = Residence.getConfigManager().isResCreateCaseSensitive(); + List signList = new ArrayList(); + signList.addAll(this.getSigns().GetAllSigns()); + for (com.bekvon.bukkit.residence.signsStuff.Signs it : signList) { + String n = it.GetResidence(); + if (!cs) + n = n.toLowerCase(); + + if (n.contains(".") && n.startsWith(oldName + ".") || n.equals(oldName)) { + String[] split = n.split(oldName); + String subname = ""; + if (split.length > 1) + subname = n.split(oldName)[1]; + String name = newName + subname; + it.setResidence(name); + SignUpdate(it); + } + } + saveSigns(); + } + public boolean SignUpdate(Signs Sign) { String landName = Sign.GetResidence(); + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + + if (res != null) { + landName = res.getName(); + } + boolean ForSale = Residence.getTransactionManager().isForSale(landName); boolean ForRent = Residence.getRentManager().isForRent(landName); @@ -243,12 +275,22 @@ public boolean SignUpdate(Signs Sign) { if (ForSale) { String shortName = fixResName(landName); + String secondLine = null; + if (shortName.contains("~")) { + String[] lines = fixDoubleResName(landName); + shortName = lines[0]; + secondLine = lines[1]; + } sign.setLine(0, Residence.getLM().getMessage("Sign.ForSaleTopLine")); String infoLine = Residence.getLM().getMessage("Sign.ForSalePriceLine", Residence.getTransactionManager().getSaleAmount(landName)); sign.setLine(1, infoLine); sign.setLine(2, Residence.getLM().getMessage("Sign.RentedResName", shortName)); - sign.setLine(3, Residence.getLM().getMessage("Sign.ForSaleBottomLine")); + + if (secondLine != null) + sign.setLine(3, Residence.getLM().getMessage("Sign.RentedResName", secondLine)); + else + sign.setLine(3, Residence.getLM().getMessage("Sign.ForSaleBottomLine")); sign.update(); } @@ -305,7 +347,7 @@ public void convertSigns(CommandSender sender) { continue; } - signs.setLocation(new Location (world, x,y,z)); + signs.setLocation(new Location(world, x, y, z)); boolean found = false; for (Signs onesigns : this.getSigns().GetAllSigns()) { @@ -342,12 +384,41 @@ public void convertSigns(CommandSender sender) { } public String fixResName(String name) { - if (name.length() > 15) + if (name.length() > 15 && !name.contains(".")) name = "~" + name.substring(name.length() - 14); - if (name.length() == 15 && name.substring(name.length() - 13).contains(".")) { - String[] temp = name.split("\\."); - name = "~." + temp[temp.length - 1]; + else if (name.length() > 15 && name.contains(".")) { + String[] splited = name.split("\\."); + name = ""; + for (int i = splited.length - 1; i >= 0; i--) { + String tempName = name + "." + splited[i]; + if (tempName.length() < 15) + name = tempName; + else + name = "~" + tempName.substring(tempName.length() - 14); + } } return name; } + + public String[] fixDoubleResName(String name) { + String SecondLine = name.substring(name.length() - 15); + String FirstLine = name.replace(SecondLine, ""); + if (FirstLine.length() > 15 && !FirstLine.contains(".")) + FirstLine = "~" + FirstLine.substring(name.length() - 14); + else if (FirstLine.length() > 15 && FirstLine.contains(".")) { + String[] splited = FirstLine.split("\\."); + FirstLine = ""; + for (int i = 0; i < splited.length; i++) { + String tempName = FirstLine + "." + splited[i]; + if (tempName.length() < 15) + FirstLine = tempName; + else + FirstLine = "~" + tempName.substring(tempName.length() - 14); + } + } + String[] lines = new String[2]; + lines[0] = FirstLine; + lines[1] = SecondLine; + return lines; + } } diff --git a/src/plugin.yml b/src/plugin.yml index 0d00db22f..2902320d6 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.1.4.0 +version: 4.1.4.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 68fd097b4022ec6aed44985fffa2fd60c45d8dc4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 7 Jun 2016 16:56:27 +0300 Subject: [PATCH 0177/1142] Fix for flag gui --- .../bukkit/residence/commands/pset.java | 2 +- .../bekvon/bukkit/residence/commands/set.java | 2 +- .../bekvon/bukkit/residence/gui/SetFlag.java | 72 ++++++++++--------- .../residence/protection/FlagPermissions.java | 15 ++-- .../residence/selection/SelectionManager.java | 26 +++---- .../bukkit/residence/utils/Sorting.java | 14 ++-- src/plugin.yml | 2 +- 7 files changed, 72 insertions(+), 61 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index e80864e3c..cd6244eb8 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -75,7 +75,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (!Residence.isPlayerExist(player, targetPlayer, true)) return false; - if (!res.isOwner(player) && !resadmin) { + if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, "admin", false)) { sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index fd9b2744f..8c404deac 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -45,7 +45,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return true; } - if (!res.isOwner(player) && !resadmin) { + if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, "admin", false)) { sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return true; } diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 85e010b30..35a0c4048 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -21,6 +21,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; public class SetFlag { @@ -28,7 +29,7 @@ public class SetFlag { private Player player; private String targetPlayer = null; private Inventory inventory; - private LinkedHashMap permMap = new LinkedHashMap(); + private LinkedHashMap permMap = new LinkedHashMap(); private LinkedHashMap> description = new LinkedHashMap>(); private boolean admin = false; private int page = 1; @@ -93,7 +94,7 @@ else if (click.isRightClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTO String flag = ""; int i = 0; - for (Entry one : permMap.entrySet()) { + for (Entry one : permMap.entrySet()) { flag = one.getKey(); if (i == slot) { break; @@ -141,11 +142,12 @@ private void fillFlagDescriptions() { } } + @SuppressWarnings("incomplete-switch") public void recalculateResidence(ClaimedResidence res) { List flags = res.getPermissions().getPosibleFlags(player, true, this.admin); Map resFlags = new HashMap(); - LinkedHashMap TempPermMap = new LinkedHashMap(); + Map TempPermMap = new LinkedHashMap(); Map globalFlags = Residence.getPermissionManager().getAllFlags().getFlags(); for (Entry one : res.getPermissions().getFlags().entrySet()) { @@ -158,9 +160,9 @@ public void recalculateResidence(ClaimedResidence res) { continue; if (resFlags.containsKey(one.getKey())) - TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? 1 : 0); + TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? FlagState.TRUE : FlagState.FALSE); else - TempPermMap.put(one.getKey(), 2); + TempPermMap.put(one.getKey(), FlagState.NEITHER); } String title = ""; @@ -176,7 +178,10 @@ public void recalculateResidence(ClaimedResidence res) { Inventory GuiInv = Bukkit.createInventory(null, 54, title); int i = 0; - TempPermMap = (LinkedHashMap) Residence.getSortingManager().sortByKeyASC(TempPermMap); + if (targetPlayer == null) + TempPermMap.remove("admin"); + + TempPermMap = (LinkedHashMap) Residence.getSortingManager().sortByKeyASC(TempPermMap); FlagData flagData = Residence.getFlagUtilManager().getFlagData(); @@ -187,7 +192,7 @@ public void recalculateResidence(ClaimedResidence res) { int count = -1; permMap.clear(); - for (Entry one : TempPermMap.entrySet()) { + for (Entry one : TempPermMap.entrySet()) { count++; if (count >= end) break; @@ -196,25 +201,23 @@ public void recalculateResidence(ClaimedResidence res) { permMap.put(one.getKey(), one.getValue()); } - for (Entry one : permMap.entrySet()) { + for (Entry one : permMap.entrySet()) { ItemStack MiscInfo = Residence.getConfigManager().getGuiRemove(); - switch (one.getValue()) { - case 0: + switch ((FlagState) one.getValue()) { + case FALSE: MiscInfo = Residence.getConfigManager().getGuiFalse(); break; - case 1: + case TRUE: MiscInfo = Residence.getConfigManager().getGuiTrue(); break; - case 2: - break; } if (flagData.contains(one.getKey())) MiscInfo = flagData.getItem(one.getKey()); - if (one.getValue() == 1) { + if ((FlagState) one.getValue() == FlagState.TRUE) { ItemMeta im = MiscInfo.getItemMeta(); im.addEnchant(Enchantment.LUCK, 1, true); MiscInfo.setItemMeta(im); @@ -227,14 +230,14 @@ public void recalculateResidence(ClaimedResidence res) { List lore = new ArrayList(); String variable = ""; - switch (one.getValue()) { - case 0: + switch ((FlagState) one.getValue()) { + case FALSE: variable = Residence.getLM().getMessage("General.False"); break; - case 1: + case TRUE: variable = Residence.getLM().getMessage("General.True"); break; - case 2: + case NEITHER: variable = Residence.getLM().getMessage("General.Removed"); break; } @@ -270,6 +273,7 @@ public void recalculateResidence(ClaimedResidence res) { this.inventory = GuiInv; } + @SuppressWarnings("incomplete-switch") public void recalculatePlayer(ClaimedResidence res) { Map globalFlags = Residence.getPermissionManager().getAllFlags().getFlags(); @@ -283,7 +287,7 @@ public void recalculatePlayer(ClaimedResidence res) { } if (targetPlayer != null) { - ArrayList PosibleResPFlags = res.getPermissions().getposibleFlags(); + Set PosibleResPFlags = res.getPermissions().getposibleFlags(); Map temp = new HashMap(); for (String one : PosibleResPFlags) { if (globalFlags.containsKey(one)) @@ -299,16 +303,16 @@ public void recalculatePlayer(ClaimedResidence res) { } } - LinkedHashMap TempPermMap = new LinkedHashMap(); + LinkedHashMap TempPermMap = new LinkedHashMap(); for (Entry one : globalFlags.entrySet()) { if (!flags.contains(one.getKey())) continue; if (resFlags.containsKey(one.getKey())) - TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? 1 : 0); + TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? FlagState.TRUE : FlagState.FALSE); else - TempPermMap.put(one.getKey(), 2); + TempPermMap.put(one.getKey(), FlagState.NEITHER); } String title = ""; @@ -324,7 +328,7 @@ public void recalculatePlayer(ClaimedResidence res) { Inventory GuiInv = Bukkit.createInventory(null, 54, title); int i = 0; - TempPermMap = (LinkedHashMap) Residence.getSortingManager().sortByKeyASC(TempPermMap); + TempPermMap = (LinkedHashMap) Residence.getSortingManager().sortByKeyASC(TempPermMap); FlagData flagData = Residence.getFlagUtilManager().getFlagData(); @@ -335,7 +339,7 @@ public void recalculatePlayer(ClaimedResidence res) { int count = -1; permMap.clear(); - for (Entry one : TempPermMap.entrySet()) { + for (Entry one : TempPermMap.entrySet()) { count++; if (count >= end) break; @@ -344,25 +348,23 @@ public void recalculatePlayer(ClaimedResidence res) { permMap.put(one.getKey(), one.getValue()); } - for (Entry one : permMap.entrySet()) { + for (Entry one : permMap.entrySet()) { ItemStack MiscInfo = Residence.getConfigManager().getGuiRemove(); - switch (one.getValue()) { - case 0: + switch ((FlagState) one.getValue()) { + case FALSE: MiscInfo = Residence.getConfigManager().getGuiFalse(); break; - case 1: + case TRUE: MiscInfo = Residence.getConfigManager().getGuiTrue(); break; - case 2: - break; } if (flagData.contains(one.getKey())) MiscInfo = flagData.getItem(one.getKey()); - if (one.getValue() == 1) { + if ((FlagState) one.getValue() == FlagState.TRUE) { ItemMeta im = MiscInfo.getItemMeta(); im.addEnchant(Enchantment.LUCK, 1, true); MiscInfo.setItemMeta(im); @@ -375,14 +377,14 @@ public void recalculatePlayer(ClaimedResidence res) { List lore = new ArrayList(); String variable = ""; - switch (one.getValue()) { - case 0: + switch ((FlagState) one.getValue()) { + case FALSE: variable = Residence.getLM().getMessage("General.False"); break; - case 1: + case TRUE: variable = Residence.getLM().getMessage("General.True"); break; - case 2: + case NEITHER: variable = Residence.getLM().getMessage("General.Removed"); break; } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 0aabd6724..dd51aa0a9 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.EnumMap; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; @@ -15,8 +16,11 @@ import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.utils.Debug; public class FlagPermissions { @@ -233,7 +237,7 @@ public static void initValidFlags() { addResidenceOnlyFlag("rain"); addResidenceOnlyFlag("dryup"); - + addResidenceOnlyFlag("backup"); addPlayerOrGroupOnlyFlag("admin"); @@ -747,8 +751,11 @@ public Map getPlayerFlags(String player) { return this.getPlayerFlags(player, false); } - public ArrayList getposibleFlags() { - return FlagPermissions.validFlags; + public Set getposibleFlags() { + Set t = new HashSet(); + t.addAll(FlagPermissions.validFlags); + t.addAll(FlagPermissions.validPlayerFlags); + return t; } public ArrayList getposibleAreaFlags() { @@ -758,7 +765,7 @@ public ArrayList getposibleAreaFlags() { public List getPosibleFlags(Player player, boolean residence, boolean resadmin) { List flags = new ArrayList(); for (Entry one : Residence.getPermissionManager().getAllFlags().getFlags().entrySet()) { - if (!one.getValue() && !resadmin && !player.hasPermission("residence.flag." + one.getKey().toLowerCase())) + if (!one.getValue() && !resadmin && !player.hasPermission(new Permission("residence.flag." + one.getKey().toLowerCase(), PermissionDefault.FALSE))) continue; if (!residence && !getposibleFlags().contains(one.getKey())) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 5c07f4a12..07db2f8fe 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -16,6 +16,8 @@ import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; public class SelectionManager { protected Map playerLoc1; @@ -30,6 +32,8 @@ public class SelectionManager { public static final int MIN_HEIGHT = 0; + Permission p = new Permission("residence.bypass.ignorey", PermissionDefault.FALSE); + public enum Direction { UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ } @@ -45,10 +49,7 @@ public void updateLocations(Player player, Location loc1, Location loc2) { if (loc1 != null && loc2 != null) { playerLoc1.put(player.getName(), loc1); playerLoc2.put(player.getName(), loc2); - if (Residence.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName())) { - this.qsky(player); - this.qbedrock(player); - } + updateForY(player); this.afterSelectionUpdate(player); } } @@ -56,10 +57,7 @@ public void updateLocations(Player player, Location loc1, Location loc2) { public void placeLoc1(Player player, Location loc, boolean show) { if (loc != null) { playerLoc1.put(player.getName(), loc); - if (Residence.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName())) { - this.qsky(player); - this.qbedrock(player); - } + updateForY(player); if (show) this.afterSelectionUpdate(player); } @@ -68,15 +66,19 @@ public void placeLoc1(Player player, Location loc, boolean show) { public void placeLoc2(Player player, Location loc, boolean show) { if (loc != null) { playerLoc2.put(player.getName(), loc); - if (Residence.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName())) { - this.qsky(player); - this.qbedrock(player); - } + updateForY(player); if (show) this.afterSelectionUpdate(player); } } + private void updateForY(Player player) { + if (Residence.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName()) && !player.hasPermission(p)) { + this.qsky(player); + this.qbedrock(player); + } + } + public void afterSelectionUpdate(Player player) { if (hasPlacedBoth(player.getName())) { NewMakeBorders(player, getPlayerLoc1(player.getName()), getPlayerLoc2(player.getName()), false); diff --git a/src/com/bekvon/bukkit/residence/utils/Sorting.java b/src/com/bekvon/bukkit/residence/utils/Sorting.java index 3862307e7..8f0b3c0cf 100644 --- a/src/com/bekvon/bukkit/residence/utils/Sorting.java +++ b/src/com/bekvon/bukkit/residence/utils/Sorting.java @@ -51,22 +51,22 @@ public int compare(Map.Entry o1, Map.Entry o2) return sortedMap; } - public Map sortByKeyASC(Map unsortMap) { + public Map sortByKeyASC(Map unsortMap) { // Convert Map to List - List> list = new LinkedList>(unsortMap.entrySet()); + List> list = new LinkedList>(unsortMap.entrySet()); // Sort list with comparator, to compare the Map values - Collections.sort(list, new Comparator>() { - public int compare(Map.Entry o1, Map.Entry o2) { + Collections.sort(list, new Comparator>() { + public int compare(Map.Entry o1, Map.Entry o2) { return (o1.getKey()).compareTo(o2.getKey()); } }); // Convert sorted map back to a Map - Map sortedMap = new LinkedHashMap(); - for (Iterator> it = list.iterator(); it.hasNext();) { - Map.Entry entry = it.next(); + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); sortedMap.put(entry.getKey(), entry.getValue()); } return sortedMap; diff --git a/src/plugin.yml b/src/plugin.yml index 2902320d6..ca2b10f8a 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.1.4.2 +version: 4.1.4.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From fb72b369a0a48fb8cb5e78c77fc3128a006b0e2a Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 7 Jun 2016 19:57:24 +0300 Subject: [PATCH 0178/1142] deduct money only when residence creation event is not canceled --- .../bukkit/residence/commands/area.java | 3 +- .../bukkit/residence/commands/create.java | 3 +- .../protection/ClaimedResidence.java | 21 ++++--- .../protection/ResidenceManager.java | 55 ++++++++++--------- 4 files changed, 43 insertions(+), 39 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index 4ea5974ab..a6a3dcd45 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -42,7 +42,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res != null) { - res.addArea(player, Residence.getSelectionManager().getSelectionCuboid(player), args[3], resadmin); + if (res.addArea(player, Residence.getSelectionManager().getSelectionCuboid(player), args[3], resadmin)) + player.sendMessage(Residence.getLM().getMessage("Area.Create", args[3])); } else { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); } diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 93a34d713..6f3c0c289 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -50,8 +50,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } } else { Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence - .getSelectionManager().getPlayerLoc2(player.getName()), - resadmin); + .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); return true; } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 6dbd5da05..36d44de52 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -101,10 +101,6 @@ public ClaimedResidence(String creator, String creationWorld, ClaimedResidence p parent = parentResidence; } - public boolean addArea(CuboidArea area, String name) { - return addArea(null, area, name, true); - } - public static boolean CheckAreaSize(Player player, CuboidArea area, boolean resadmin) { if (!resadmin && area.getSize() < Residence.getConfigManager().getMinimalResSize()) { if (player != null) { @@ -134,7 +130,15 @@ public static boolean CheckAreaSize(Player player, CuboidArea area, boolean resa return true; } + public boolean addArea(CuboidArea area, String name) { + return addArea(null, area, name, true); + } + public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin) { + return addArea(player, area, name, resadmin, true); + } + + public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin, boolean chargeMoney) { if (!Residence.validName(name)) { if (player != null) { player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); @@ -234,7 +238,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa player.sendMessage(Residence.getLM().getMessage("Area.HighLimit", String.format("%d", group.getMaxHeight()))); return false; } - if (parent == null && Residence.getConfigManager().enableEconomy()) { + if (chargeMoney && parent == null && Residence.getConfigManager().enableEconomy()) { int chargeamount = (int) Math.ceil((double) area.getSize() * group.getCostPerBlock()); if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) { return false; @@ -250,9 +254,6 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa Residence.getResidenceManager().removeChunkList(getName()); areas.put(name, area); Residence.getResidenceManager().calculateChunks(getName()); - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Area.Create", name)); - } return true; } @@ -467,8 +468,10 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l return false; subzones.put(name, newres); - if (player != null) + if (player != null) { + player.sendMessage(Residence.getLM().getMessage("Area.Create", name)); player.sendMessage(Residence.getLM().getMessage("Subzone.Create", name)); + } return true; } else { if (player != null) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 12aecf310..5765be561 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -250,40 +250,41 @@ public boolean addResidence(Player player, String owner, String name, Location l } newRes.BlockSellPrice = group.getSellPerBlock(); - if (player != null) { - newRes.addArea(player, newArea, "main", resadmin); - } else { - newRes.addArea(newArea, "main"); - } - if (newRes.getAreaCount() != 0) { - ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); - Residence.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; + if (!newRes.addArea(player, newArea, "main", resadmin, false)) + return false; - residences.put(name, newRes); - calculateChunks(name); - Residence.getLeaseManager().removeExpireTime(name); + ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); + Residence.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; - Residence.getPlayerManager().addResidence(newRes.getOwner(), newRes); + if (!newRes.isSubzone() && Residence.getConfigManager().enableEconomy()) { + int chargeamount = (int) Math.ceil((double) newArea.getSize() * group.getCostPerBlock()); + if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) + return false; + } - if (player != null) { - Residence.getSelectionManager().NewMakeBorders(player, newArea.getHighLoc(), newArea.getLowLoc(), false); - Residence.getAutoSelectionManager().getList().remove(player.getName().toLowerCase()); + residences.put(name, newRes); + calculateChunks(name); + Residence.getLeaseManager().removeExpireTime(name); + Residence.getPlayerManager().addResidence(newRes.getOwner(), newRes); - player.sendMessage(Residence.getLM().getMessage("Residence.Create", name)); - } - if (Residence.getConfigManager().useLeases()) { - if (player != null) { - Residence.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); - } else { - Residence.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); - } + if (player != null) { + Residence.getSelectionManager().NewMakeBorders(player, newArea.getHighLoc(), newArea.getLowLoc(), false); + Residence.getAutoSelectionManager().getList().remove(player.getName().toLowerCase()); + player.sendMessage(Residence.getLM().getMessage("Area.Create", "main")); + player.sendMessage(Residence.getLM().getMessage("Residence.Create", name)); + } + if (Residence.getConfigManager().useLeases()) { + if (player != null) { + Residence.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); + } else { + Residence.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); } - return true; } - return false; + return true; + } public void listResidences(CommandSender sender) { From 932611423d14e5f17d4a1ef5cee0d6c488df0740 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 8 Jun 2016 19:17:25 +0300 Subject: [PATCH 0179/1142] Cleanup --- src/com/bekvon/bukkit/residence/NMS.java | 4 -- .../bekvon/bukkit/residence/Residence.java | 42 ++++++++++++------- .../bekvon/bukkit/residence/allNms/v1_7.java | 10 ----- .../residence/allNms/v1_7_Couldron.java | 10 ----- .../bekvon/bukkit/residence/allNms/v1_8.java | 10 ----- .../bekvon/bukkit/residence/allNms/v1_9.java | 25 ----------- .../residence/protection/FlagPermissions.java | 1 - .../bukkit/residence/utils/ActionBar.java | 13 ++++-- src/plugin.yml | 2 +- 9 files changed, 37 insertions(+), 80 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/NMS.java b/src/com/bekvon/bukkit/residence/NMS.java index 1f6bc7579..83722b3f9 100644 --- a/src/com/bekvon/bukkit/residence/NMS.java +++ b/src/com/bekvon/bukkit/residence/NMS.java @@ -38,10 +38,6 @@ public interface NMS { public Block getTargetBlock(Player player, int range); - public ItemStack getLingeringPotionItem(Entity ent); - - public String getPotionType(ItemStack potion); - public ItemStack itemInMainHand(Player player); public boolean isChorusTeleport(TeleportCause tpcause); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 426fe54f3..b80a5f00b 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -429,7 +429,9 @@ public void onEnable() { version = packageSplit[packageSplit.length - 1].split("(?<=\\G.{7})")[0]; try { Class nmsClass; + nmsClass = Class.forName("com.bekvon.bukkit.residence.actionBarNMS." + version); + if (AB.class.isAssignableFrom(nmsClass)) { ab = (AB) nmsClass.getConstructor().newInstance(); } else { @@ -609,22 +611,9 @@ public void run() { return; } FlagPermissions.initValidFlags(); - Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); - if (plugin != null) { - smanager = new WorldEditSelectionManager(server, this); - wep = (WorldEditPlugin) plugin; - wepid = ((WorldEditPlugin) Residence.wep).getConfig().getInt("wand-item"); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldEdit"); - } else { - smanager = new SelectionManager(server, this); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldEdit NOT found!"); - } - Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); - if (wgplugin != null) { - wg = (WorldGuardPlugin) wgplugin; - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldGuard"); - } + setWorldEdit(); + setWorldGuard(); blistener = new ResidenceBlockListener(this); plistener = new ResidencePlayerListener(this); @@ -740,7 +729,7 @@ public void run() { getShopSignUtilManager().LoadSigns(); getShopSignUtilManager().BoardUpdate(); - versionChecker.VersionCheck(null); + getVersionChecker().VersionCheck(null); } public static SignUtil getSignUtil() { @@ -767,6 +756,27 @@ public static boolean validName(String name) { } } + private void setWorldEdit() { + Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); + if (plugin != null) { + smanager = new WorldEditSelectionManager(server, this); + wep = (WorldEditPlugin) plugin; + wepid = ((WorldEditPlugin) Residence.wep).getConfig().getInt("wand-item"); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldEdit"); + } else { + smanager = new SelectionManager(server, this); + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldEdit NOT found!"); + } + } + + private void setWorldGuard() { + Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); + if (wgplugin != null) { + wg = (WorldGuardPlugin) wgplugin; + Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldGuard"); + } + } + public Residence getPlugin() { return this; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index cda32cf06..08352fa3f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -125,16 +125,6 @@ public Block getTargetBlock(Player player, int range) { return player.getTargetBlock((HashSet) null, range); } - @Override - public String getPotionType(ItemStack potion) { - return null; - } - - @Override - public ItemStack getLingeringPotionItem(Entity ent) { - return null; - } - @Override public boolean isChorusTeleport(TeleportCause tpcause) { return false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 0a15cdccc..cd4e01b77 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -125,16 +125,6 @@ public Block getTargetBlock(Player player, int range) { return player.getTargetBlock((HashSet) null, range); } - @Override - public String getPotionType(ItemStack potion) { - return null; - } - - @Override - public ItemStack getLingeringPotionItem(Entity ent) { - return null; - } - @Override public boolean isChorusTeleport(TeleportCause tpcause) { return false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java index dea0f21a2..95e70d12e 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8.java @@ -154,16 +154,6 @@ public Block getTargetBlock(Player player, int range) { return player.getTargetBlock((Set) null, range); } - @Override - public String getPotionType(ItemStack potion) { - return null; - } - - @Override - public ItemStack getLingeringPotionItem(Entity ent) { - return null; - } - @Override public boolean isChorusTeleport(TeleportCause tpcause) { return false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9.java b/src/com/bekvon/bukkit/residence/allNms/v1_9.java index 0e9667a22..b07e3c87b 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9.java @@ -8,8 +8,6 @@ import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.craftbukkit.v1_9_R1.entity.CraftThrownPotion; -import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftItemStack; import org.bukkit.entity.Bat; import org.bukkit.entity.Chicken; import org.bukkit.entity.Cow; @@ -33,7 +31,6 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; -import net.minecraft.server.v1_9_R1.NBTTagCompound; public class v1_9 implements NMS { @Override @@ -156,28 +153,6 @@ public Block getTargetBlock(Player player, int range) { return player.getTargetBlock((Set) null, range); } - @Override - public String getPotionType(ItemStack potion) { - net.minecraft.server.v1_9_R1.ItemStack stack = CraftItemStack.asNMSCopy(potion); - NBTTagCompound tagCompound = stack.getTag(); - if (tagCompound == null) - return null; - if (tagCompound.getString("Potion").isEmpty()) - return null; - return tagCompound.getString("Potion").replace("minecraft:", ""); - } - - @Override - public ItemStack getLingeringPotionItem(Entity ent) { - - if (!(ent instanceof CraftThrownPotion)) - return null; - - CraftThrownPotion potion = (CraftThrownPotion) ent; - - return potion.getItem(); - } - @Override public boolean isChorusTeleport(TeleportCause tpcause) { if (tpcause == TeleportCause.CHORUS_FRUIT) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index dd51aa0a9..e973d5eac 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -20,7 +20,6 @@ import org.bukkit.permissions.PermissionDefault; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.utils.Debug; public class FlagPermissions { diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index b19e9c91f..cacd7174d 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -18,7 +18,7 @@ * * @author hamzaxx */ -public class ActionBar implements AB{ +public class ActionBar implements AB { private String version = ""; private Object packet; private Method getHandle; @@ -28,6 +28,7 @@ public class ActionBar implements AB{ private Class nmsIChatBaseComponent; private Class packetType; private Constructor constructor; + private boolean simpleMessages = false; public ActionBar() { try { @@ -47,7 +48,8 @@ public ActionBar() { constructor = packetType.getConstructor(nmsIChatBaseComponent, int.class); } } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); + simpleMessages = true; + Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully suport action bar messages. They will be shown in chat instead."); } } @@ -59,6 +61,10 @@ public void send(CommandSender sender, String msg) { } public void send(Player receivingPacket, String msg) { + if (simpleMessages) { + receivingPacket.sendMessage(msg); + return; + } try { Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, "{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', JSONObject .escape(msg)) + "\"}"); @@ -71,7 +77,8 @@ public void send(Player receivingPacket, String msg) { Object connection = playerConnection.get(player); sendPacket.invoke(connection, packet); } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Error {0} " + version, ex); + simpleMessages = true; + Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully suport action bar messages. They will be shown in chat instead."); } } diff --git a/src/plugin.yml b/src/plugin.yml index ca2b10f8a..2967780cc 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.1.4.3 +version: 4.1.4.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 3fbdca9f0c59d5c29748be5897c44ff7ecebb631 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 9 Jun 2016 12:21:44 +0300 Subject: [PATCH 0180/1142] Update for 1.10 support / include polar bear into animal category --- .../bekvon/bukkit/residence/Residence.java | 5 +- .../residence/actionBarNMS/v1_10_R1.java | 34 ++++ .../bekvon/bukkit/residence/allNms/v1_10.java | 189 ++++++++++++++++++ .../residence/economy/rent/RentManager.java | 2 +- .../bukkit/residence/utils/ActionBar.java | 4 +- .../residence/utils/VersionChecker.java | 13 +- 6 files changed, 238 insertions(+), 9 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_10.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index b80a5f00b..403dffeb0 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -403,7 +403,8 @@ public void onEnable() { String packageName = getServer().getClass().getPackage().getName(); String[] packageSplit = packageName.split("\\."); - String version = packageSplit[packageSplit.length - 1].split("(?<=\\G.{4})")[0]; + Bukkit.getConsoleSender().sendMessage("version is: " + packageSplit[packageSplit.length - 1]); + String version = packageSplit[packageSplit.length - 1].substring(0,packageSplit[packageSplit.length - 1].length()-3); try { Class nmsClass; if (Residence.getConfigManager().CouldronCompatability()) @@ -426,7 +427,7 @@ public void onEnable() { } ABManager = new ActionBar(); - version = packageSplit[packageSplit.length - 1].split("(?<=\\G.{7})")[0]; + version = packageSplit[packageSplit.length - 1]; try { Class nmsClass; diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java new file mode 100644 index 000000000..f23ff04d7 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java @@ -0,0 +1,34 @@ +package com.bekvon.bukkit.residence.actionBarNMS; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; +import com.bekvon.bukkit.residence.AB; + +import net.minecraft.server.v1_10_R1.IChatBaseComponent; +import net.minecraft.server.v1_10_R1.IChatBaseComponent.ChatSerializer; +import net.minecraft.server.v1_10_R1.PacketPlayOutChat; + +public class v1_10_R1 implements AB { + + @Override + public void send(CommandSender sender, String msg) { + if (sender instanceof Player) + send((Player) sender, msg); + else + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + } + + @Override + public void send(Player player, String msg) { + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10.java b/src/com/bekvon/bukkit/residence/allNms/v1_10.java new file mode 100644 index 000000000..4f9a72b96 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10.java @@ -0,0 +1,189 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.entity.PolarBear; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.residence.NMS; +import com.bekvon.bukkit.residence.Residence; + +public class v1_10 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof PolarBear); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case SPRUCE_DOOR: + case BIRCH_DOOR: + case JUNGLE_DOOR: + case ACACIA_DOOR: + case DARK_OAK_DOOR: + case SPRUCE_FENCE_GATE: + case BIRCH_FENCE_GATE: + case JUNGLE_FENCE_GATE: + case ACACIA_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case TRAP_DOOR: + case IRON_TRAPDOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, "door"); + matUseFlagList.put(Material.BIRCH_DOOR, "door"); + matUseFlagList.put(Material.JUNGLE_DOOR, "door"); + matUseFlagList.put(Material.ACACIA_DOOR, "door"); + matUseFlagList.put(Material.DARK_OAK_DOOR, "door"); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, "door"); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, "door"); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, "door"); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, "door"); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, "door"); + matUseFlagList.put(Material.IRON_TRAPDOOR, "door"); + + matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, "diode"); + } + + public boolean isPlate(Material mat) { + return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public Block getTargetBlock(Player player, int range) { + return player.getTargetBlock((Set) null, range); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @SuppressWarnings("incomplete-switch") + @Override + public boolean isBoat(Material mat) { + switch (mat) { + case BOAT: + case BOAT_ACACIA: + case BOAT_BIRCH: + case BOAT_DARK_OAK: + case BOAT_JUNGLE: + case BOAT_SPRUCE: + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 6a928bde9..a9a778b77 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -311,7 +311,7 @@ public void unrent(Player player, String landName, boolean resadmin) { return; rentedLand.remove(landName); - if (!rentableLand.get(landName).AllowRenewing || !rentableLand.get(landName).StayInMarket) { + if (!rentableLand.get(landName).AllowRenewing && !rentableLand.get(landName).StayInMarket) { rentableLand.remove(landName); } ClaimedResidence res = Residence.getResidenceManager().getByName(landName); diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index cacd7174d..7adba88e1 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -32,7 +32,9 @@ public class ActionBar implements AB { public ActionBar() { try { - version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; + String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); + version = v[v.length - 1]; +// version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; packetType = Class.forName(getPacketPlayOutChat()); Class typeCraftPlayer = Class.forName(getCraftPlayerClasspath()); Class typeNMSPlayer = Class.forName(getNMSPlayerClasspath()); diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 2201923ba..ed2502551 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -16,7 +16,7 @@ public class VersionChecker { Residence plugin; private int resource = 11480; - private static int cleanVersion = 0; + private int cleanVersion = 0; public VersionChecker(Residence plugin) { this.plugin = plugin; @@ -24,10 +24,12 @@ public VersionChecker(Residence plugin) { public int GetVersion() { if (cleanVersion == 0) { - String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; + String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); + String version = v[v.length - 1]; // Translating version to integer for simpler use try { cleanVersion = Integer.parseInt(version.replace("v", "").replace("V", "").replace("_", "").replace("r", "").replace("R", "")); + cleanVersion *= 10; } catch (NumberFormatException e) { // Fail safe if it for some reason can't translate version to integer if (version.contains("v1_4")) @@ -48,10 +50,11 @@ public int GetVersion() { cleanVersion = 1910; if (version.contains("v1_9_R2")) cleanVersion = 1920; + if (version.contains("v1_10_R1")) + cleanVersion = 11010; } - if (cleanVersion < 100) - cleanVersion *= 10; - if (cleanVersion < 1000) + + if (cleanVersion < 1400) cleanVersion *= 10; } return cleanVersion; From 103a19bcccd46ccd53ef9957e65219915930c49f Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 9 Jun 2016 19:00:35 +0300 Subject: [PATCH 0181/1142] 1.10 update --- .../residence/{AB.java => ABInterface.java} | 2 +- .../bekvon/bukkit/residence/Residence.java | 12 +- .../residence/actionBarNMS/v1_10_R1.java | 4 +- .../residence/actionBarNMS/v1_7_R4.java | 4 +- .../residence/actionBarNMS/v1_8_R1.java | 4 +- .../residence/actionBarNMS/v1_8_R2.java | 4 +- .../residence/actionBarNMS/v1_8_R3.java | 4 +- .../residence/actionBarNMS/v1_9_R1.java | 4 +- .../residence/actionBarNMS/v1_9_R2.java | 4 +- .../bukkit/residence/utils/ActionBar.java | 4 +- .../residence/utils/ParticleEffects.java | 3171 +++++++++-------- src/plugin.yml | 2 +- 12 files changed, 1609 insertions(+), 1610 deletions(-) rename src/com/bekvon/bukkit/residence/{AB.java => ABInterface.java} (87%) diff --git a/src/com/bekvon/bukkit/residence/AB.java b/src/com/bekvon/bukkit/residence/ABInterface.java similarity index 87% rename from src/com/bekvon/bukkit/residence/AB.java rename to src/com/bekvon/bukkit/residence/ABInterface.java index bfe59961a..2f1a6a896 100644 --- a/src/com/bekvon/bukkit/residence/AB.java +++ b/src/com/bekvon/bukkit/residence/ABInterface.java @@ -3,7 +3,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -public interface AB { +public interface ABInterface { public void send(CommandSender sender, String msg); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 403dffeb0..7e1b16848 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -179,7 +179,7 @@ public class Residence extends JavaPlugin { private static String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; private static String TempUserUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"; - private static AB ab; + private static ABInterface ab; private static NMS nms; static LWC lwc; @@ -247,7 +247,7 @@ public static NMS getNms() { return nms; } - public static AB getAB() { + public static ABInterface getAB() { return ab; } @@ -401,9 +401,7 @@ public void onEnable() { getFlagUtilManager().load(); String packageName = getServer().getClass().getPackage().getName(); - String[] packageSplit = packageName.split("\\."); - Bukkit.getConsoleSender().sendMessage("version is: " + packageSplit[packageSplit.length - 1]); String version = packageSplit[packageSplit.length - 1].substring(0,packageSplit[packageSplit.length - 1].length()-3); try { Class nmsClass; @@ -433,8 +431,8 @@ public void onEnable() { nmsClass = Class.forName("com.bekvon.bukkit.residence.actionBarNMS." + version); - if (AB.class.isAssignableFrom(nmsClass)) { - ab = (AB) nmsClass.getConstructor().newInstance(); + if (ABInterface.class.isAssignableFrom(nmsClass)) { + ab = (ABInterface) nmsClass.getConstructor().newInstance(); } else { System.out.println("Something went wrong, please note down version and contact author v:" + version); this.setEnabled(false); @@ -638,7 +636,7 @@ public void run() { // 1.9 event if (getVersionChecker().GetVersion() >= 1900) pm.registerEvents(new v1_9Events(), this); - + // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, // Priority.NORMAL, this); if (cmanager.enableSpout()) { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java index f23ff04d7..744971f5a 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java @@ -4,13 +4,13 @@ import org.bukkit.command.CommandSender; import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.AB; +import com.bekvon.bukkit.residence.ABInterface; import net.minecraft.server.v1_10_R1.IChatBaseComponent; import net.minecraft.server.v1_10_R1.IChatBaseComponent.ChatSerializer; import net.minecraft.server.v1_10_R1.PacketPlayOutChat; -public class v1_10_R1 implements AB { +public class v1_10_R1 implements ABInterface { @Override public void send(CommandSender sender, String msg) { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java index bf265577b..27b07631b 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java @@ -3,9 +3,9 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.AB; +import com.bekvon.bukkit.residence.ABInterface; -public class v1_7_R4 implements AB { +public class v1_7_R4 implements ABInterface { @Override public void send(CommandSender sender, String msg) { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java index 56b5a26d4..2e6bd27a5 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java @@ -4,13 +4,13 @@ import org.bukkit.command.CommandSender; import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.AB; +import com.bekvon.bukkit.residence.ABInterface; import net.minecraft.server.v1_8_R1.ChatSerializer; import net.minecraft.server.v1_8_R1.IChatBaseComponent; import net.minecraft.server.v1_8_R1.PacketPlayOutChat; -public class v1_8_R1 implements AB { +public class v1_8_R1 implements ABInterface { @Override public void send(CommandSender sender, String msg) { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java index cd0d9f392..5098a658f 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java @@ -4,13 +4,13 @@ import org.bukkit.command.CommandSender; import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.AB; +import com.bekvon.bukkit.residence.ABInterface; import net.minecraft.server.v1_8_R2.IChatBaseComponent; import net.minecraft.server.v1_8_R2.IChatBaseComponent.ChatSerializer; import net.minecraft.server.v1_8_R2.PacketPlayOutChat; -public class v1_8_R2 implements AB { +public class v1_8_R2 implements ABInterface { @Override public void send(CommandSender sender, String msg) { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java index 7273983cf..a2229bf87 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java @@ -4,13 +4,13 @@ import org.bukkit.command.CommandSender; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.AB; +import com.bekvon.bukkit.residence.ABInterface; import net.minecraft.server.v1_8_R3.IChatBaseComponent; import net.minecraft.server.v1_8_R3.IChatBaseComponent.ChatSerializer; import net.minecraft.server.v1_8_R3.PacketPlayOutChat; -public class v1_8_R3 implements AB { +public class v1_8_R3 implements ABInterface { @Override public void send(CommandSender sender, String msg) { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java index d2ccbd4af..5382ca375 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java @@ -4,13 +4,13 @@ import org.bukkit.command.CommandSender; import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.AB; +import com.bekvon.bukkit.residence.ABInterface; import net.minecraft.server.v1_9_R1.IChatBaseComponent; import net.minecraft.server.v1_9_R1.IChatBaseComponent.ChatSerializer; import net.minecraft.server.v1_9_R1.PacketPlayOutChat; -public class v1_9_R1 implements AB { +public class v1_9_R1 implements ABInterface { @Override public void send(CommandSender sender, String msg) { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java index 5fe64be8f..9d0559f99 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java @@ -4,13 +4,13 @@ import org.bukkit.command.CommandSender; import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.AB; +import com.bekvon.bukkit.residence.ABInterface; import net.minecraft.server.v1_9_R2.IChatBaseComponent; import net.minecraft.server.v1_9_R2.IChatBaseComponent.ChatSerializer; import net.minecraft.server.v1_9_R2.PacketPlayOutChat; -public class v1_9_R2 implements AB { +public class v1_9_R2 implements ABInterface { @Override public void send(CommandSender sender, String msg) { diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index 7adba88e1..92d506bb7 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -12,13 +12,13 @@ import org.bukkit.entity.Player; import org.json.simple.JSONObject; -import com.bekvon.bukkit.residence.AB; +import com.bekvon.bukkit.residence.ABInterface; /** * * @author hamzaxx */ -public class ActionBar implements AB { +public class ActionBar implements ABInterface { private String version = ""; private Object packet; private Method getHandle; diff --git a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java index cec0fdbfe..77881cb15 100644 --- a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java +++ b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java @@ -1,1586 +1,1587 @@ -package com.bekvon.bukkit.residence.utils; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - -import com.bekvon.bukkit.residence.utils.ReflectionUtils.PackageType; - -/** - * ParticleEffect Library - *

- * This library was created by @DarkBlade12 and allows you to display all Minecraft particle effects on a Bukkit server - *

- * You are welcome to use it, modify it and redistribute it under the following conditions: - *

    - *
  • Don't claim this class as your own - *
  • Don't remove this disclaimer - *
- *

- * Special thanks: - *

    - *
  • @microgeek (original idea, names and packet parameters) - *
  • @ShadyPotato (1.8 names, ids and packet parameters) - *
  • @RingOfStorms (particle behavior) - *
  • @Cybermaxke (particle behavior) - *
- *

- * It would be nice if you provide credit to me if you use this class in a published project - * - * @author DarkBlade12 - * @version 1.7 - */ -public enum ParticleEffects { - /** - * A particle effect which is displayed by exploding tnt and creepers: - *

    - *
  • It looks like a white cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - EXPLOSION_NORMAL("explode", 0, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by exploding ghast fireballs and wither skulls: - *
    - *
  • It looks like a gray ball which is fading away - *
  • The speed value slightly influences the size of this particle effect - *
- */ - EXPLOSION_LARGE("largeexplode", 1, -1), - /** - * A particle effect which is displayed by exploding tnt and creepers: - *
    - *
  • It looks like a crowd of gray balls which are fading away - *
  • The speed value has no influence on this particle effect - *
- */ - EXPLOSION_HUGE("hugeexplosion", 2, -1), - /** - * A particle effect which is displayed by launching fireworks: - *
    - *
  • It looks like a white star which is sparkling - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - FIREWORKS_SPARK("fireworksSpark", 3, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by swimming entities and arrows in water: - *
    - *
  • It looks like a bubble - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - WATER_BUBBLE("bubble", 4, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_WATER), - /** - * A particle effect which is displayed by swimming entities and shaking wolves: - *
    - *
  • It looks like a blue drop - *
  • The speed value has no influence on this particle effect - *
- */ - WATER_SPLASH("splash", 5, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed on water when fishing: - *
    - *
  • It looks like a blue droplet - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - WATER_WAKE("wake", 6, 7, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by water: - *
    - *
  • It looks like a tiny blue square - *
  • The speed value has no influence on this particle effect - *
- */ - SUSPENDED("suspended", 7, -1, ParticleProperty.REQUIRES_WATER), - /** - * A particle effect which is displayed by air when close to bedrock and the in the void: - *
    - *
  • It looks like a tiny gray square - *
  • The speed value has no influence on this particle effect - *
- */ - SUSPENDED_DEPTH("depthSuspend", 8, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed when landing a critical hit and by arrows: - *
    - *
  • It looks like a light brown cross - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - CRIT("crit", 9, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed when landing a hit with an enchanted weapon: - *
    - *
  • It looks like a cyan star - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - CRIT_MAGIC("magicCrit", 10, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by primed tnt, torches, droppers, dispensers, end portals, brewing stands and monster spawners: - *
    - *
  • It looks like a little gray cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - SMOKE_NORMAL("smoke", 11, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by fire, minecarts with furnace and blazes: - *
    - *
  • It looks like a large gray cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - SMOKE_LARGE("largesmoke", 12, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed when splash potions or bottles o' enchanting hit something: - *
    - *
  • It looks like a white swirl - *
  • The speed value causes the particle to only move upwards when set to 0 - *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 - *
- */ - SPELL("spell", 13, -1), - /** - * A particle effect which is displayed when instant splash potions hit something: - *
    - *
  • It looks like a white cross - *
  • The speed value causes the particle to only move upwards when set to 0 - *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 - *
- */ - SPELL_INSTANT("instantSpell", 14, -1), - /** - * A particle effect which is displayed by entities with active potion effects: - *
    - *
  • It looks like a colored swirl - *
  • The speed value causes the particle to be colored black when set to 0 - *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed - *
- */ - SPELL_MOB("mobSpell", 15, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed by entities with active potion effects applied through a beacon: - *
    - *
  • It looks like a transparent colored swirl - *
  • The speed value causes the particle to be always colored black when set to 0 - *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed - *
- */ - SPELL_MOB_AMBIENT("mobSpellAmbient", 16, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed by witches: - *
    - *
  • It looks like a purple cross - *
  • The speed value causes the particle to only move upwards when set to 0 - *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 - *
- */ - SPELL_WITCH("witchMagic", 17, -1), - /** - * A particle effect which is displayed by blocks beneath a water source: - *
    - *
  • It looks like a blue drip - *
  • The speed value has no influence on this particle effect - *
- */ - DRIP_WATER("dripWater", 18, -1), - /** - * A particle effect which is displayed by blocks beneath a lava source: - *
    - *
  • It looks like an orange drip - *
  • The speed value has no influence on this particle effect - *
- */ - DRIP_LAVA("dripLava", 19, -1), - /** - * A particle effect which is displayed when attacking a villager in a village: - *
    - *
  • It looks like a cracked gray heart - *
  • The speed value has no influence on this particle effect - *
- */ - VILLAGER_ANGRY("angryVillager", 20, -1), - /** - * A particle effect which is displayed when using bone meal and trading with a villager in a village: - *
    - *
  • It looks like a green star - *
  • The speed value has no influence on this particle effect - *
- */ - VILLAGER_HAPPY("happyVillager", 21, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by mycelium: - *
    - *
  • It looks like a tiny gray square - *
  • The speed value has no influence on this particle effect - *
- */ - TOWN_AURA("townaura", 22, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by note blocks: - *
    - *
  • It looks like a colored note - *
  • The speed value causes the particle to be colored green when set to 0 - *
- */ - NOTE("note", 23, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed by nether portals, endermen, ender pearls, eyes of ender, ender chests and dragon eggs: - *
    - *
  • It looks like a purple cloud - *
  • The speed value influences the spread of this particle effect - *
- */ - PORTAL("portal", 24, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by enchantment tables which are nearby bookshelves: - *
    - *
  • It looks like a cryptic white letter - *
  • The speed value influences the spread of this particle effect - *
- */ - ENCHANTMENT_TABLE("enchantmenttable", 25, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by torches, active furnaces, magma cubes and monster spawners: - *
    - *
  • It looks like a tiny flame - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - FLAME("flame", 26, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by lava: - *
    - *
  • It looks like a spark - *
  • The speed value has no influence on this particle effect - *
- */ - LAVA("lava", 27, -1), - /** - * A particle effect which is currently unused: - *
    - *
  • It looks like a transparent gray square - *
  • The speed value has no influence on this particle effect - *
- */ - FOOTSTEP("footstep", 28, -1), - /** - * A particle effect which is displayed when a mob dies: - *
    - *
  • It looks like a large white cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - CLOUD("cloud", 29, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by redstone ore, powered redstone, redstone torches and redstone repeaters: - *
    - *
  • It looks like a tiny colored cloud - *
  • The speed value causes the particle to be colored red when set to 0 - *
- */ - REDSTONE("reddust", 30, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed when snowballs hit a block: - *
    - *
  • It looks like a little piece with the snowball texture - *
  • The speed value has no influence on this particle effect - *
- */ - SNOWBALL("snowballpoof", 31, -1), - /** - * A particle effect which is currently unused: - *
    - *
  • It looks like a tiny white cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - SNOW_SHOVEL("snowshovel", 32, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by slimes: - *
    - *
  • It looks like a tiny part of the slimeball icon - *
  • The speed value has no influence on this particle effect - *
- */ - SLIME("slime", 33, -1), - /** - * A particle effect which is displayed when breeding and taming animals: - *
    - *
  • It looks like a red heart - *
  • The speed value has no influence on this particle effect - *
- */ - HEART("heart", 34, -1), - /** - * A particle effect which is displayed by barriers: - *
    - *
  • It looks like a red box with a slash through it - *
  • The speed value has no influence on this particle effect - *
- */ - BARRIER("barrier", 35, 8), - /** - * A particle effect which is displayed when breaking a tool or eggs hit a block: - *
    - *
  • It looks like a little piece with an item texture - *
- */ - ITEM_CRACK("iconcrack", 36, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), - /** - * A particle effect which is displayed when breaking blocks or sprinting: - *
    - *
  • It looks like a little piece with a block texture - *
  • The speed value has no influence on this particle effect - *
- */ - BLOCK_CRACK("blockcrack", 37, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), - /** - * A particle effect which is displayed when falling: - *
    - *
  • It looks like a little piece with a block texture - *
- */ - BLOCK_DUST("blockdust", 38, 7, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), - /** - * A particle effect which is displayed when rain hits the ground: - *
    - *
  • It looks like a blue droplet - *
  • The speed value has no influence on this particle effect - *
- */ - WATER_DROP("droplet", 39, 8), - /** - * A particle effect which is currently unused: - *
    - *
  • It has no visual effect - *
- */ - ITEM_TAKE("take", 40, 8), - /** - * A particle effect which is displayed by elder guardians: - *
    - *
  • It looks like the shape of the elder guardian - *
  • The speed value has no influence on this particle effect - *
  • The offset values have no influence on this particle effect - *
- */ - MOB_APPEARANCE("mobappearance", 41, 8); - - private static final Map NAME_MAP = new HashMap(); - private static final Map ID_MAP = new HashMap(); - private final String name; - private final int id; - private final int requiredVersion; - private final List properties; - - // Initialize map for quick name and id lookup - static { - for (ParticleEffects effect : values()) { - NAME_MAP.put(effect.name, effect); - ID_MAP.put(effect.id, effect); - } - } - - /** - * Construct a new particle effect - * - * @param name Name of this particle effect - * @param id Id of this particle effect - * @param requiredVersion Version which is required (1.x) - * @param properties Properties of this particle effect - */ - private ParticleEffects(String name, int id, int requiredVersion, ParticleProperty... properties) { - this.name = name; - this.id = id; - this.requiredVersion = requiredVersion; - this.properties = Arrays.asList(properties); - } - - /** - * Returns the name of this particle effect - * - * @return The name - */ - public String getName() { - return name; - } - - /** - * Returns the id of this particle effect - * - * @return The id - */ - public int getId() { - return id; - } - - /** - * Returns the required version for this particle effect (1.x) - * - * @return The required version - */ - public int getRequiredVersion() { - return requiredVersion; - } - - /** - * Determine if this particle effect has a specific property - * - * @return Whether it has the property or not - */ - public boolean hasProperty(ParticleProperty property) { - return properties.contains(property); - } - - /** - * Determine if this particle effect is supported by your current server version - * - * @return Whether the particle effect is supported or not - */ - public boolean isSupported() { - if (requiredVersion == -1) { - return true; - } - return ParticlePacket.getVersion() >= requiredVersion; - } - - /** - * Returns the particle effect with the given name - * - * @param name Name of the particle effect - * @return The particle effect - */ - public static ParticleEffects fromName(String name) { - for (Entry entry : NAME_MAP.entrySet()) { - if (!entry.getKey().equalsIgnoreCase(name)) { - continue; - } - return entry.getValue(); - } - return null; - } - - /** - * Returns the particle effect with the given id - * - * @param id Id of the particle effect - * @return The particle effect - */ - public static ParticleEffects fromId(int id) { - for (Entry entry : ID_MAP.entrySet()) { - if (entry.getKey() != id) { - continue; - } - return entry.getValue(); - } - return null; - } - - /** - * Determine if water is at a certain location - * - * @param location Location to check - * @return Whether water is at this location or not - */ - private static boolean isWater(Location location) { - Material material = location.getBlock().getType(); - return material == Material.WATER || material == Material.STATIONARY_WATER; - } - - /** - * Determine if the distance between @param location and one of the players exceeds 256 - * - * @param location Location to check - * @return Whether the distance exceeds 256 or not - */ - private static boolean isLongDistance(Location location, List players) { - for (Player player : players) { - if (player.getLocation().distanceSquared(location) < 65536) { - continue; - } - return true; - } - return false; - } - - /** - * Determine if the data type for a particle effect is correct - * - * @param effect Particle effect - * @param data Particle data - * @return Whether the data type is correct or not - */ - private static boolean isDataCorrect(ParticleEffects effect, ParticleData data) { - return ((effect == BLOCK_CRACK || effect == BLOCK_DUST) && data instanceof BlockData) || (effect == ITEM_CRACK && data instanceof ItemData); - } - - /** - * Determine if the color type for a particle effect is correct - * - * @param effect Particle effect - * @param color Particle color - * @return Whether the color type is correct or not - */ - private static boolean isColorCorrect(ParticleEffects effect, ParticleColor color) { - return ((effect == SPELL_MOB || effect == SPELL_MOB_AMBIENT || effect == REDSTONE) && color instanceof OrdinaryColor) || (effect == NOTE && color instanceof NoteColor); - } - - /** - * Displays a particle effect which is only visible for all players within a certain range in the world of @param center - * - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect requires water and none is at the center location - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, null).sendTo(center, range); - } - - /** - * Displays a particle effect which is only visible for the specified players - * - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect requires water and none is at the center location - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), null).sendTo(center, players); - } - - /** - * Displays a particle effect which is only visible for the specified players - * - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect requires water and none is at the center location - * @see #display(float, float, float, float, int, Location, List) - */ - public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - display(offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); - } - - /** - * Displays a single particle which flies into a determined direction and is only visible for all players within a certain range in the world of @param center - * - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location - * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (!hasProperty(ParticleProperty.DIRECTIONAL)) { - throw new IllegalArgumentException("This particle effect is not directional"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, direction, speed, range > 256, null).sendTo(center, range); - } - - /** - * Displays a single particle which flies into a determined direction and is only visible for the specified players - * - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location - * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (!hasProperty(ParticleProperty.DIRECTIONAL)) { - throw new IllegalArgumentException("This particle effect is not directional"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, direction, speed, isLongDistance(center, players), null).sendTo(center, players); - } - - /** - * Displays a single particle which flies into a determined direction and is only visible for the specified players - * - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location - * @see #display(Vector, float, Location, List) - */ - public void display(Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - display(direction, speed, center, Arrays.asList(players)); - } - - /** - * Displays a single particle which is colored and only visible for all players within a certain range in the world of @param center - * - * @param color Color of the particle - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect - * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(ParticleColor color, Location center, double range) throws ParticleVersionException, ParticleColorException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.COLORABLE)) { - throw new ParticleColorException("This particle effect is not colorable"); - } - if (!isColorCorrect(this, color)) { - throw new ParticleColorException("The particle color type is incorrect"); - } - new ParticlePacket(this, color, range > 256).sendTo(center, range); - } - - /** - * Displays a single particle which is colored and only visible for the specified players - * - * @param color Color of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect - * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(ParticleColor color, Location center, List players) throws ParticleVersionException, ParticleColorException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.COLORABLE)) { - throw new ParticleColorException("This particle effect is not colorable"); - } - if (!isColorCorrect(this, color)) { - throw new ParticleColorException("The particle color type is incorrect"); - } - new ParticlePacket(this, color, isLongDistance(center, players)).sendTo(center, players); - } - - /** - * Displays a single particle which is colored and only visible for the specified players - * - * @param color Color of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect - * @see #display(ParticleColor, Location, List) - */ - public void display(ParticleColor color, Location center, Player... players) throws ParticleVersionException, ParticleColorException { - display(color, center, Arrays.asList(players)); - } - - /** - * Displays a particle effect which requires additional data and is only visible for all players within a certain range in the world of @param center - * - * @param data Data of the effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, data).sendTo(center, range); - } - - /** - * Displays a particle effect which requires additional data and is only visible for the specified players - * - * @param data Data of the effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), data).sendTo(center, players); - } - - /** - * Displays a particle effect which requires additional data and is only visible for the specified players - * - * @param data Data of the effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see #display(ParticleData, float, float, float, float, int, Location, List) - */ - public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) throws ParticleVersionException, ParticleDataException { - display(data, offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); - } - - /** - * Displays a single particle which requires additional data that flies into a determined direction and is only visible for all players within a certain range in the world of @param center - * - * @param data Data of the effect - * @param direction Direction of the particle - * @param speed Display speed of the particles - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(ParticleData data, Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, direction, speed, range > 256, data).sendTo(center, range); - } - - /** - * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players - * - * @param data Data of the effect - * @param direction Direction of the particle - * @param speed Display speed of the particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(ParticleData data, Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, direction, speed, isLongDistance(center, players), data).sendTo(center, players); - } - - /** - * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players - * - * @param data Data of the effect - * @param direction Direction of the particle - * @param speed Display speed of the particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see #display(ParticleData, Vector, float, Location, List) - */ - public void display(ParticleData data, Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException { - display(data, direction, speed, center, Arrays.asList(players)); - } - - /** - * Represents the property of a particle effect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - public static enum ParticleProperty { - /** - * The particle effect requires water to be displayed - */ - REQUIRES_WATER, - /** - * The particle effect requires block or item data to be displayed - */ - REQUIRES_DATA, - /** - * The particle effect uses the offsets as direction values - */ - DIRECTIONAL, - /** - * The particle effect uses the offsets as color values - */ - COLORABLE; - } - - /** - * Represents the particle data for effects like {@link ParticleEffects#ITEM_CRACK}, {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - public static abstract class ParticleData { - private final Material material; - private final byte data; - private final int[] packetData; - - /** - * Construct a new particle data - * - * @param material Material of the item/block - * @param data Data value of the item/block - */ - @SuppressWarnings("deprecation") - public ParticleData(Material material, byte data) { - this.material = material; - this.data = data; - this.packetData = new int[] { material.getId(), data }; - } - - /** - * Returns the material of this data - * - * @return The material - */ - public Material getMaterial() { - return material; - } - - /** - * Returns the data value of this data - * - * @return The data value - */ - public byte getData() { - return data; - } - - /** - * Returns the data as an int array for packet construction - * - * @return The data for the packet - */ - public int[] getPacketData() { - return packetData; - } - - /** - * Returns the data as a string for pre 1.8 versions - * - * @return The data string for the packet - */ - public String getPacketDataString() { - return "_" + packetData[0] + "_" + packetData[1]; - } - } - - /** - * Represents the item data for the {@link ParticleEffects#ITEM_CRACK} effect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - public static final class ItemData extends ParticleData { - /** - * Construct a new item data - * - * @param material Material of the item - * @param data Data value of the item - * @see ParticleData#ParticleData(Material, byte) - */ - public ItemData(Material material, byte data) { - super(material, data); - } - } - - /** - * Represents the block data for the {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} effects - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - public static final class BlockData extends ParticleData { - /** - * Construct a new block data - * - * @param material Material of the block - * @param data Data value of the block - * @throws IllegalArgumentException If the material is not a block - * @see ParticleData#ParticleData(Material, byte) - */ - public BlockData(Material material, byte data) throws IllegalArgumentException { - super(material, data); - if (!material.isBlock()) { - throw new IllegalArgumentException("The material is not a block"); - } - } - } - - /** - * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT}, {@link ParticleEffects#REDSTONE} and {@link ParticleEffects#NOTE} - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - public static abstract class ParticleColor { - /** - * Returns the value for the offsetX field - * - * @return The offsetX value - */ - public abstract float getValueX(); - - /** - * Returns the value for the offsetY field - * - * @return The offsetY value - */ - public abstract float getValueY(); - - /** - * Returns the value for the offsetZ field - * - * @return The offsetZ value - */ - public abstract float getValueZ(); - } - - /** - * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT} and {@link ParticleEffects#NOTE} - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - public static final class OrdinaryColor extends ParticleColor { - private final int red; - private final int green; - private final int blue; - - /** - * Construct a new ordinary color - * - * @param red Red value of the RGB format - * @param green Green value of the RGB format - * @param blue Blue value of the RGB format - * @throws IllegalArgumentException If one of the values is lower than 0 or higher than 255 - */ - public OrdinaryColor(int red, int green, int blue) throws IllegalArgumentException { - if (red < 0) { - throw new IllegalArgumentException("The red value is lower than 0"); - } - if (red > 255) { - throw new IllegalArgumentException("The red value is higher than 255"); - } - this.red = red; - if (green < 0) { - throw new IllegalArgumentException("The green value is lower than 0"); - } - if (green > 255) { - throw new IllegalArgumentException("The green value is higher than 255"); - } - this.green = green; - if (blue < 0) { - throw new IllegalArgumentException("The blue value is lower than 0"); - } - if (blue > 255) { - throw new IllegalArgumentException("The blue value is higher than 255"); - } - this.blue = blue; - } - - /** - * Returns the red value of the RGB format - * - * @return The red value - */ - public int getRed() { - return red; - } - - /** - * Returns the green value of the RGB format - * - * @return The green value - */ - public int getGreen() { - return green; - } - - /** - * Returns the blue value of the RGB format - * - * @return The blue value - */ - public int getBlue() { - return blue; - } - - /** - * Returns the red value divided by 255 - * - * @return The offsetX value - */ - @Override - public float getValueX() { - return (float) red / 255F; - } - - /** - * Returns the green value divided by 255 - * - * @return The offsetY value - */ - @Override - public float getValueY() { - return (float) green / 255F; - } - - /** - * Returns the blue value divided by 255 - * - * @return The offsetZ value - */ - @Override - public float getValueZ() { - return (float) blue / 255F; - } - } - - /** - * Represents the color for the {@link ParticleEffects#NOTE} effect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - public static final class NoteColor extends ParticleColor { - private final int note; - - /** - * Construct a new note color - * - * @param note Note id which determines color - * @throws IllegalArgumentException If the note value is lower than 0 or higher than 255 - */ - public NoteColor(int note) throws IllegalArgumentException { - if (note < 0) { - throw new IllegalArgumentException("The note value is lower than 0"); - } - if (note > 24) { - throw new IllegalArgumentException("The note value is higher than 24"); - } - this.note = note; - } - - /** - * Returns the note value divided by 24 - * - * @return The offsetX value - */ - @Override - public float getValueX() { - return (float) note / 24F; - } - - /** - * Returns zero because the offsetY value is unused - * - * @return zero - */ - @Override - public float getValueY() { - return 0; - } - - /** - * Returns zero because the offsetZ value is unused - * - * @return zero - */ - @Override - public float getValueZ() { - return 0; - } - - } - - /** - * Represents a runtime exception that is thrown either if the displayed particle effect requires data and has none or vice-versa or if the data type is incorrect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - private static final class ParticleDataException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new particle data exception - * - * @param message Message that will be logged - */ - public ParticleDataException(String message) { - super(message); - } - } - - /** - * Represents a runtime exception that is thrown either if the displayed particle effect is not colorable or if the particle color type is incorrect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - private static final class ParticleColorException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new particle color exception - * - * @param message Message that will be logged - */ - public ParticleColorException(String message) { - super(message); - } - } - - /** - * Represents a runtime exception that is thrown if the displayed particle effect requires a newer version - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - private static final class ParticleVersionException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new particle version exception - * - * @param message Message that will be logged - */ - public ParticleVersionException(String message) { - super(message); - } - } - - /** - * Represents a particle effect packet with all attributes which is used for sending packets to the players - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.5 - */ - public static final class ParticlePacket { - private static int version; - private static Class enumParticle; - private static Constructor packetConstructor; - private static Method getHandle; - private static Field playerConnection; - private static Method sendPacket; - private static boolean initialized; - private final ParticleEffects effect; - private final float offsetX; - private final float offsetY; - private final float offsetZ; - private final float speed; - private final int amount; - private final boolean longDistance; - private final ParticleData data; - private Object packet; - - /** - * Construct a new particle packet - * - * @param effect Particle effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 - * @param data Data of the effect - * @throws IllegalArgumentException If the speed or amount is lower than 0 - * @see #initialize() - */ - public ParticlePacket(ParticleEffects effect, float offsetX, float offsetY, float offsetZ, float speed, int amount, boolean longDistance, ParticleData data) throws IllegalArgumentException { - initialize(); - if (speed < 0) { - throw new IllegalArgumentException("The speed is lower than 0"); - } - if (amount < 0) { - throw new IllegalArgumentException("The amount is lower than 0"); - } - this.effect = effect; - this.offsetX = offsetX; - this.offsetY = offsetY; - this.offsetZ = offsetZ; - this.speed = speed; - this.amount = amount; - this.longDistance = longDistance; - this.data = data; - } - - /** - * Construct a new particle packet of a single particle flying into a determined direction - * - * @param effect Particle effect - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 - * @param data Data of the effect - * @throws IllegalArgumentException If the speed is lower than 0 - * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) - */ - public ParticlePacket(ParticleEffects effect, Vector direction, float speed, boolean longDistance, ParticleData data) throws IllegalArgumentException { - this(effect, (float) direction.getX(), (float) direction.getY(), (float) direction.getZ(), speed, 0, longDistance, data); - } - - /** - * Construct a new particle packet of a single colored particle - * - * @param effect Particle effect - * @param color Color of the particle - * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 - * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) - */ - public ParticlePacket(ParticleEffects effect, ParticleColor color, boolean longDistance) { - this(effect, color.getValueX(), color.getValueY(), color.getValueZ(), 1, 0, longDistance, null); - } - - /** - * Initializes {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} and sets {@link #initialized} to true if it succeeds - *

- * Note: These fields only have to be initialized once, so it will return if {@link #initialized} is already set to true - * - * @throws VersionIncompatibleException if your bukkit version is not supported by this library - */ - public static void initialize() throws VersionIncompatibleException { - if (initialized) { - return; - } - try { - version = Integer.parseInt(Character.toString(PackageType.getServerVersion().charAt(3))); - if (version > 7) { - enumParticle = PackageType.MINECRAFT_SERVER.getClass("EnumParticle"); - } - Class packetClass = PackageType.MINECRAFT_SERVER.getClass(version < 7 ? "Packet63WorldParticles" : "PacketPlayOutWorldParticles"); - packetConstructor = ReflectionUtils.getConstructor(packetClass); - getHandle = ReflectionUtils.getMethod("CraftPlayer", PackageType.CRAFTBUKKIT_ENTITY, "getHandle"); - playerConnection = ReflectionUtils.getField("EntityPlayer", PackageType.MINECRAFT_SERVER, false, "playerConnection"); - sendPacket = ReflectionUtils.getMethod(playerConnection.getType(), "sendPacket", PackageType.MINECRAFT_SERVER.getClass("Packet")); - } catch (Exception exception) { - throw new VersionIncompatibleException("Your current bukkit version seems to be incompatible with this library", exception); - } - initialized = true; - } - - /** - * Returns the version of your server (1.x) - * - * @return The version number - */ - public static int getVersion() { - return version; - } - - /** - * Determine if {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} are initialized - * - * @return Whether these fields are initialized or not - * @see #initialize() - */ - public static boolean isInitialized() { - return initialized; - } - - /** - * Initializes {@link #packet} with all set values - * - * @param center Center location of the effect - * @throws PacketInstantiationException If instantion fails due to an unknown error - */ - private void initializePacket(Location center) throws PacketInstantiationException { - if (packet != null) { - return; - } - try { - packet = packetConstructor.newInstance(); - if (version < 8) { - String name = effect.getName(); - if (data != null) { - name += data.getPacketDataString(); - } - ReflectionUtils.setValue(packet, true, "a", name); - } else { - ReflectionUtils.setValue(packet, true, "a", enumParticle.getEnumConstants()[effect.getId()]); - ReflectionUtils.setValue(packet, true, "j", longDistance); - if (data != null) { - ReflectionUtils.setValue(packet, true, "k", data.getPacketData()); - } - } - ReflectionUtils.setValue(packet, true, "b", (float) center.getX()); - ReflectionUtils.setValue(packet, true, "c", (float) center.getY()); - ReflectionUtils.setValue(packet, true, "d", (float) center.getZ()); - ReflectionUtils.setValue(packet, true, "e", offsetX); - ReflectionUtils.setValue(packet, true, "f", offsetY); - ReflectionUtils.setValue(packet, true, "g", offsetZ); - ReflectionUtils.setValue(packet, true, "h", speed); - ReflectionUtils.setValue(packet, true, "i", amount); - } catch (Exception exception) { - throw new PacketInstantiationException("Packet instantiation failed", exception); - } - } - - /** - * Sends the packet to a single player and caches it - * - * @param center Center location of the effect - * @param player Receiver of the packet - * @throws PacketInstantiationException If instantion fails due to an unknown error - * @throws PacketSendingException If sending fails due to an unknown error - * @see #initializePacket(Location) - */ - public void sendTo(Location center, Player player) throws PacketInstantiationException, PacketSendingException { - initializePacket(center); - try { - sendPacket.invoke(playerConnection.get(getHandle.invoke(player)), packet); - } catch (Exception exception) { - throw new PacketSendingException("Failed to send the packet to player '" + player.getName() + "'", exception); - } - } - - /** - * Sends the packet to all players in the list - * - * @param center Center location of the effect - * @param players Receivers of the packet - * @throws IllegalArgumentException If the player list is empty - * @see #sendTo(Location center, Player player) - */ - public void sendTo(Location center, List players) throws IllegalArgumentException { - if (players.isEmpty()) { - throw new IllegalArgumentException("The player list is empty"); - } - for (Player player : players) { - sendTo(center, player); - } - } - - /** - * Sends the packet to all players in a certain range - * - * @param center Center location of the effect - * @param range Range in which players will receive the packet (Maximum range for particles is usually 16, but it can differ for some types) - * @throws IllegalArgumentException If the range is lower than 1 - * @see #sendTo(Location center, Player player) - */ - public void sendTo(Location center, double range) throws IllegalArgumentException { - if (range < 1) { - throw new IllegalArgumentException("The range is lower than 1"); - } - String worldName = center.getWorld().getName(); - double squared = range * range; - for (Player player : Bukkit.getOnlinePlayers()) { - if (!player.getWorld().getName().equals(worldName) || player.getLocation().distanceSquared(center) > squared) { - continue; - } - sendTo(center, player); - } - } - - /** - * Represents a runtime exception that is thrown if a bukkit version is not compatible with this library - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.5 - */ - private static final class VersionIncompatibleException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new version incompatible exception - * - * @param message Message that will be logged - * @param cause Cause of the exception - */ - public VersionIncompatibleException(String message, Throwable cause) { - super(message, cause); - } - } - - /** - * Represents a runtime exception that is thrown if packet instantiation fails - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.4 - */ - private static final class PacketInstantiationException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new packet instantiation exception - * - * @param message Message that will be logged - * @param cause Cause of the exception - */ - public PacketInstantiationException(String message, Throwable cause) { - super(message, cause); - } - } - - /** - * Represents a runtime exception that is thrown if packet sending fails - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.4 - */ - private static final class PacketSendingException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new packet sending exception - * - * @param message Message that will be logged - * @param cause Cause of the exception - */ - public PacketSendingException(String message, Throwable cause) { - super(message, cause); - } - } - } +package com.bekvon.bukkit.residence.utils; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.utils.ReflectionUtils.PackageType; + +/** + * ParticleEffect Library + *

+ * This library was created by @DarkBlade12 and allows you to display all Minecraft particle effects on a Bukkit server + *

+ * You are welcome to use it, modify it and redistribute it under the following conditions: + *

    + *
  • Don't claim this class as your own + *
  • Don't remove this disclaimer + *
+ *

+ * Special thanks: + *

    + *
  • @microgeek (original idea, names and packet parameters) + *
  • @ShadyPotato (1.8 names, ids and packet parameters) + *
  • @RingOfStorms (particle behavior) + *
  • @Cybermaxke (particle behavior) + *
+ *

+ * It would be nice if you provide credit to me if you use this class in a published project + * + * @author DarkBlade12 + * @version 1.7 + */ +public enum ParticleEffects { + /** + * A particle effect which is displayed by exploding tnt and creepers: + *

    + *
  • It looks like a white cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + EXPLOSION_NORMAL("explode", 0, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by exploding ghast fireballs and wither skulls: + *
    + *
  • It looks like a gray ball which is fading away + *
  • The speed value slightly influences the size of this particle effect + *
+ */ + EXPLOSION_LARGE("largeexplode", 1, -1), + /** + * A particle effect which is displayed by exploding tnt and creepers: + *
    + *
  • It looks like a crowd of gray balls which are fading away + *
  • The speed value has no influence on this particle effect + *
+ */ + EXPLOSION_HUGE("hugeexplosion", 2, -1), + /** + * A particle effect which is displayed by launching fireworks: + *
    + *
  • It looks like a white star which is sparkling + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + FIREWORKS_SPARK("fireworksSpark", 3, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by swimming entities and arrows in water: + *
    + *
  • It looks like a bubble + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + WATER_BUBBLE("bubble", 4, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_WATER), + /** + * A particle effect which is displayed by swimming entities and shaking wolves: + *
    + *
  • It looks like a blue drop + *
  • The speed value has no influence on this particle effect + *
+ */ + WATER_SPLASH("splash", 5, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed on water when fishing: + *
    + *
  • It looks like a blue droplet + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + WATER_WAKE("wake", 6, 7, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by water: + *
    + *
  • It looks like a tiny blue square + *
  • The speed value has no influence on this particle effect + *
+ */ + SUSPENDED("suspended", 7, -1, ParticleProperty.REQUIRES_WATER), + /** + * A particle effect which is displayed by air when close to bedrock and the in the void: + *
    + *
  • It looks like a tiny gray square + *
  • The speed value has no influence on this particle effect + *
+ */ + SUSPENDED_DEPTH("depthSuspend", 8, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed when landing a critical hit and by arrows: + *
    + *
  • It looks like a light brown cross + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + CRIT("crit", 9, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed when landing a hit with an enchanted weapon: + *
    + *
  • It looks like a cyan star + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + CRIT_MAGIC("magicCrit", 10, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by primed tnt, torches, droppers, dispensers, end portals, brewing stands and monster spawners: + *
    + *
  • It looks like a little gray cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + SMOKE_NORMAL("smoke", 11, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by fire, minecarts with furnace and blazes: + *
    + *
  • It looks like a large gray cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + SMOKE_LARGE("largesmoke", 12, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed when splash potions or bottles o' enchanting hit something: + *
    + *
  • It looks like a white swirl + *
  • The speed value causes the particle to only move upwards when set to 0 + *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 + *
+ */ + SPELL("spell", 13, -1), + /** + * A particle effect which is displayed when instant splash potions hit something: + *
    + *
  • It looks like a white cross + *
  • The speed value causes the particle to only move upwards when set to 0 + *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 + *
+ */ + SPELL_INSTANT("instantSpell", 14, -1), + /** + * A particle effect which is displayed by entities with active potion effects: + *
    + *
  • It looks like a colored swirl + *
  • The speed value causes the particle to be colored black when set to 0 + *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed + *
+ */ + SPELL_MOB("mobSpell", 15, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed by entities with active potion effects applied through a beacon: + *
    + *
  • It looks like a transparent colored swirl + *
  • The speed value causes the particle to be always colored black when set to 0 + *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed + *
+ */ + SPELL_MOB_AMBIENT("mobSpellAmbient", 16, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed by witches: + *
    + *
  • It looks like a purple cross + *
  • The speed value causes the particle to only move upwards when set to 0 + *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 + *
+ */ + SPELL_WITCH("witchMagic", 17, -1), + /** + * A particle effect which is displayed by blocks beneath a water source: + *
    + *
  • It looks like a blue drip + *
  • The speed value has no influence on this particle effect + *
+ */ + DRIP_WATER("dripWater", 18, -1), + /** + * A particle effect which is displayed by blocks beneath a lava source: + *
    + *
  • It looks like an orange drip + *
  • The speed value has no influence on this particle effect + *
+ */ + DRIP_LAVA("dripLava", 19, -1), + /** + * A particle effect which is displayed when attacking a villager in a village: + *
    + *
  • It looks like a cracked gray heart + *
  • The speed value has no influence on this particle effect + *
+ */ + VILLAGER_ANGRY("angryVillager", 20, -1), + /** + * A particle effect which is displayed when using bone meal and trading with a villager in a village: + *
    + *
  • It looks like a green star + *
  • The speed value has no influence on this particle effect + *
+ */ + VILLAGER_HAPPY("happyVillager", 21, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by mycelium: + *
    + *
  • It looks like a tiny gray square + *
  • The speed value has no influence on this particle effect + *
+ */ + TOWN_AURA("townaura", 22, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by note blocks: + *
    + *
  • It looks like a colored note + *
  • The speed value causes the particle to be colored green when set to 0 + *
+ */ + NOTE("note", 23, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed by nether portals, endermen, ender pearls, eyes of ender, ender chests and dragon eggs: + *
    + *
  • It looks like a purple cloud + *
  • The speed value influences the spread of this particle effect + *
+ */ + PORTAL("portal", 24, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by enchantment tables which are nearby bookshelves: + *
    + *
  • It looks like a cryptic white letter + *
  • The speed value influences the spread of this particle effect + *
+ */ + ENCHANTMENT_TABLE("enchantmenttable", 25, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by torches, active furnaces, magma cubes and monster spawners: + *
    + *
  • It looks like a tiny flame + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + FLAME("flame", 26, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by lava: + *
    + *
  • It looks like a spark + *
  • The speed value has no influence on this particle effect + *
+ */ + LAVA("lava", 27, -1), + /** + * A particle effect which is currently unused: + *
    + *
  • It looks like a transparent gray square + *
  • The speed value has no influence on this particle effect + *
+ */ + FOOTSTEP("footstep", 28, -1), + /** + * A particle effect which is displayed when a mob dies: + *
    + *
  • It looks like a large white cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + CLOUD("cloud", 29, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by redstone ore, powered redstone, redstone torches and redstone repeaters: + *
    + *
  • It looks like a tiny colored cloud + *
  • The speed value causes the particle to be colored red when set to 0 + *
+ */ + REDSTONE("reddust", 30, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed when snowballs hit a block: + *
    + *
  • It looks like a little piece with the snowball texture + *
  • The speed value has no influence on this particle effect + *
+ */ + SNOWBALL("snowballpoof", 31, -1), + /** + * A particle effect which is currently unused: + *
    + *
  • It looks like a tiny white cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + SNOW_SHOVEL("snowshovel", 32, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by slimes: + *
    + *
  • It looks like a tiny part of the slimeball icon + *
  • The speed value has no influence on this particle effect + *
+ */ + SLIME("slime", 33, -1), + /** + * A particle effect which is displayed when breeding and taming animals: + *
    + *
  • It looks like a red heart + *
  • The speed value has no influence on this particle effect + *
+ */ + HEART("heart", 34, -1), + /** + * A particle effect which is displayed by barriers: + *
    + *
  • It looks like a red box with a slash through it + *
  • The speed value has no influence on this particle effect + *
+ */ + BARRIER("barrier", 35, 8), + /** + * A particle effect which is displayed when breaking a tool or eggs hit a block: + *
    + *
  • It looks like a little piece with an item texture + *
+ */ + ITEM_CRACK("iconcrack", 36, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), + /** + * A particle effect which is displayed when breaking blocks or sprinting: + *
    + *
  • It looks like a little piece with a block texture + *
  • The speed value has no influence on this particle effect + *
+ */ + BLOCK_CRACK("blockcrack", 37, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), + /** + * A particle effect which is displayed when falling: + *
    + *
  • It looks like a little piece with a block texture + *
+ */ + BLOCK_DUST("blockdust", 38, 7, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), + /** + * A particle effect which is displayed when rain hits the ground: + *
    + *
  • It looks like a blue droplet + *
  • The speed value has no influence on this particle effect + *
+ */ + WATER_DROP("droplet", 39, 8), + /** + * A particle effect which is currently unused: + *
    + *
  • It has no visual effect + *
+ */ + ITEM_TAKE("take", 40, 8), + /** + * A particle effect which is displayed by elder guardians: + *
    + *
  • It looks like the shape of the elder guardian + *
  • The speed value has no influence on this particle effect + *
  • The offset values have no influence on this particle effect + *
+ */ + MOB_APPEARANCE("mobappearance", 41, 8); + + private static final Map NAME_MAP = new HashMap(); + private static final Map ID_MAP = new HashMap(); + private final String name; + private final int id; + private final int requiredVersion; + private final List properties; + + // Initialize map for quick name and id lookup + static { + for (ParticleEffects effect : values()) { + NAME_MAP.put(effect.name, effect); + ID_MAP.put(effect.id, effect); + } + } + + /** + * Construct a new particle effect + * + * @param name Name of this particle effect + * @param id Id of this particle effect + * @param requiredVersion Version which is required (1.x) + * @param properties Properties of this particle effect + */ + private ParticleEffects(String name, int id, int requiredVersion, ParticleProperty... properties) { + this.name = name; + this.id = id; + this.requiredVersion = requiredVersion; + this.properties = Arrays.asList(properties); + } + + /** + * Returns the name of this particle effect + * + * @return The name + */ + public String getName() { + return name; + } + + /** + * Returns the id of this particle effect + * + * @return The id + */ + public int getId() { + return id; + } + + /** + * Returns the required version for this particle effect (1.x) + * + * @return The required version + */ + public int getRequiredVersion() { + return requiredVersion; + } + + /** + * Determine if this particle effect has a specific property + * + * @return Whether it has the property or not + */ + public boolean hasProperty(ParticleProperty property) { + return properties.contains(property); + } + + /** + * Determine if this particle effect is supported by your current server version + * + * @return Whether the particle effect is supported or not + */ + public boolean isSupported() { + if (requiredVersion == -1) { + return true; + } + return ParticlePacket.getVersion() >= requiredVersion; + } + + /** + * Returns the particle effect with the given name + * + * @param name Name of the particle effect + * @return The particle effect + */ + public static ParticleEffects fromName(String name) { + for (Entry entry : NAME_MAP.entrySet()) { + if (!entry.getKey().equalsIgnoreCase(name)) { + continue; + } + return entry.getValue(); + } + return null; + } + + /** + * Returns the particle effect with the given id + * + * @param id Id of the particle effect + * @return The particle effect + */ + public static ParticleEffects fromId(int id) { + for (Entry entry : ID_MAP.entrySet()) { + if (entry.getKey() != id) { + continue; + } + return entry.getValue(); + } + return null; + } + + /** + * Determine if water is at a certain location + * + * @param location Location to check + * @return Whether water is at this location or not + */ + private static boolean isWater(Location location) { + Material material = location.getBlock().getType(); + return material == Material.WATER || material == Material.STATIONARY_WATER; + } + + /** + * Determine if the distance between @param location and one of the players exceeds 256 + * + * @param location Location to check + * @return Whether the distance exceeds 256 or not + */ + private static boolean isLongDistance(Location location, List players) { + for (Player player : players) { + if (player.getLocation().distanceSquared(location) < 65536) { + continue; + } + return true; + } + return false; + } + + /** + * Determine if the data type for a particle effect is correct + * + * @param effect Particle effect + * @param data Particle data + * @return Whether the data type is correct or not + */ + private static boolean isDataCorrect(ParticleEffects effect, ParticleData data) { + return ((effect == BLOCK_CRACK || effect == BLOCK_DUST) && data instanceof BlockData) || (effect == ITEM_CRACK && data instanceof ItemData); + } + + /** + * Determine if the color type for a particle effect is correct + * + * @param effect Particle effect + * @param color Particle color + * @return Whether the color type is correct or not + */ + private static boolean isColorCorrect(ParticleEffects effect, ParticleColor color) { + return ((effect == SPELL_MOB || effect == SPELL_MOB_AMBIENT || effect == REDSTONE) && color instanceof OrdinaryColor) || (effect == NOTE && color instanceof NoteColor); + } + + /** + * Displays a particle effect which is only visible for all players within a certain range in the world of @param center + * + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect requires water and none is at the center location + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, null).sendTo(center, range); + } + + /** + * Displays a particle effect which is only visible for the specified players + * + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect requires water and none is at the center location + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), null).sendTo(center, players); + } + + /** + * Displays a particle effect which is only visible for the specified players + * + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect requires water and none is at the center location + * @see #display(float, float, float, float, int, Location, List) + */ + public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + display(offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); + } + + /** + * Displays a single particle which flies into a determined direction and is only visible for all players within a certain range in the world of @param center + * + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location + * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (!hasProperty(ParticleProperty.DIRECTIONAL)) { + throw new IllegalArgumentException("This particle effect is not directional"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, direction, speed, range > 256, null).sendTo(center, range); + } + + /** + * Displays a single particle which flies into a determined direction and is only visible for the specified players + * + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location + * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (!hasProperty(ParticleProperty.DIRECTIONAL)) { + throw new IllegalArgumentException("This particle effect is not directional"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, direction, speed, isLongDistance(center, players), null).sendTo(center, players); + } + + /** + * Displays a single particle which flies into a determined direction and is only visible for the specified players + * + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location + * @see #display(Vector, float, Location, List) + */ + public void display(Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + display(direction, speed, center, Arrays.asList(players)); + } + + /** + * Displays a single particle which is colored and only visible for all players within a certain range in the world of @param center + * + * @param color Color of the particle + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect + * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(ParticleColor color, Location center, double range) throws ParticleVersionException, ParticleColorException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.COLORABLE)) { + throw new ParticleColorException("This particle effect is not colorable"); + } + if (!isColorCorrect(this, color)) { + throw new ParticleColorException("The particle color type is incorrect"); + } + new ParticlePacket(this, color, range > 256).sendTo(center, range); + } + + /** + * Displays a single particle which is colored and only visible for the specified players + * + * @param color Color of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect + * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(ParticleColor color, Location center, List players) throws ParticleVersionException, ParticleColorException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.COLORABLE)) { + throw new ParticleColorException("This particle effect is not colorable"); + } + if (!isColorCorrect(this, color)) { + throw new ParticleColorException("The particle color type is incorrect"); + } + new ParticlePacket(this, color, isLongDistance(center, players)).sendTo(center, players); + } + + /** + * Displays a single particle which is colored and only visible for the specified players + * + * @param color Color of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect + * @see #display(ParticleColor, Location, List) + */ + public void display(ParticleColor color, Location center, Player... players) throws ParticleVersionException, ParticleColorException { + display(color, center, Arrays.asList(players)); + } + + /** + * Displays a particle effect which requires additional data and is only visible for all players within a certain range in the world of @param center + * + * @param data Data of the effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, data).sendTo(center, range); + } + + /** + * Displays a particle effect which requires additional data and is only visible for the specified players + * + * @param data Data of the effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), data).sendTo(center, players); + } + + /** + * Displays a particle effect which requires additional data and is only visible for the specified players + * + * @param data Data of the effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see #display(ParticleData, float, float, float, float, int, Location, List) + */ + public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) throws ParticleVersionException, ParticleDataException { + display(data, offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); + } + + /** + * Displays a single particle which requires additional data that flies into a determined direction and is only visible for all players within a certain range in the world of @param center + * + * @param data Data of the effect + * @param direction Direction of the particle + * @param speed Display speed of the particles + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(ParticleData data, Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, direction, speed, range > 256, data).sendTo(center, range); + } + + /** + * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players + * + * @param data Data of the effect + * @param direction Direction of the particle + * @param speed Display speed of the particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(ParticleData data, Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, direction, speed, isLongDistance(center, players), data).sendTo(center, players); + } + + /** + * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players + * + * @param data Data of the effect + * @param direction Direction of the particle + * @param speed Display speed of the particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see #display(ParticleData, Vector, float, Location, List) + */ + public void display(ParticleData data, Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException { + display(data, direction, speed, center, Arrays.asList(players)); + } + + /** + * Represents the property of a particle effect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static enum ParticleProperty { + /** + * The particle effect requires water to be displayed + */ + REQUIRES_WATER, + /** + * The particle effect requires block or item data to be displayed + */ + REQUIRES_DATA, + /** + * The particle effect uses the offsets as direction values + */ + DIRECTIONAL, + /** + * The particle effect uses the offsets as color values + */ + COLORABLE; + } + + /** + * Represents the particle data for effects like {@link ParticleEffects#ITEM_CRACK}, {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + public static abstract class ParticleData { + private final Material material; + private final byte data; + private final int[] packetData; + + /** + * Construct a new particle data + * + * @param material Material of the item/block + * @param data Data value of the item/block + */ + @SuppressWarnings("deprecation") + public ParticleData(Material material, byte data) { + this.material = material; + this.data = data; + this.packetData = new int[] { material.getId(), data }; + } + + /** + * Returns the material of this data + * + * @return The material + */ + public Material getMaterial() { + return material; + } + + /** + * Returns the data value of this data + * + * @return The data value + */ + public byte getData() { + return data; + } + + /** + * Returns the data as an int array for packet construction + * + * @return The data for the packet + */ + public int[] getPacketData() { + return packetData; + } + + /** + * Returns the data as a string for pre 1.8 versions + * + * @return The data string for the packet + */ + public String getPacketDataString() { + return "_" + packetData[0] + "_" + packetData[1]; + } + } + + /** + * Represents the item data for the {@link ParticleEffects#ITEM_CRACK} effect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + public static final class ItemData extends ParticleData { + /** + * Construct a new item data + * + * @param material Material of the item + * @param data Data value of the item + * @see ParticleData#ParticleData(Material, byte) + */ + public ItemData(Material material, byte data) { + super(material, data); + } + } + + /** + * Represents the block data for the {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} effects + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + public static final class BlockData extends ParticleData { + /** + * Construct a new block data + * + * @param material Material of the block + * @param data Data value of the block + * @throws IllegalArgumentException If the material is not a block + * @see ParticleData#ParticleData(Material, byte) + */ + public BlockData(Material material, byte data) throws IllegalArgumentException { + super(material, data); + if (!material.isBlock()) { + throw new IllegalArgumentException("The material is not a block"); + } + } + } + + /** + * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT}, {@link ParticleEffects#REDSTONE} and {@link ParticleEffects#NOTE} + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static abstract class ParticleColor { + /** + * Returns the value for the offsetX field + * + * @return The offsetX value + */ + public abstract float getValueX(); + + /** + * Returns the value for the offsetY field + * + * @return The offsetY value + */ + public abstract float getValueY(); + + /** + * Returns the value for the offsetZ field + * + * @return The offsetZ value + */ + public abstract float getValueZ(); + } + + /** + * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT} and {@link ParticleEffects#NOTE} + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static final class OrdinaryColor extends ParticleColor { + private final int red; + private final int green; + private final int blue; + + /** + * Construct a new ordinary color + * + * @param red Red value of the RGB format + * @param green Green value of the RGB format + * @param blue Blue value of the RGB format + * @throws IllegalArgumentException If one of the values is lower than 0 or higher than 255 + */ + public OrdinaryColor(int red, int green, int blue) throws IllegalArgumentException { + if (red < 0) { + throw new IllegalArgumentException("The red value is lower than 0"); + } + if (red > 255) { + throw new IllegalArgumentException("The red value is higher than 255"); + } + this.red = red; + if (green < 0) { + throw new IllegalArgumentException("The green value is lower than 0"); + } + if (green > 255) { + throw new IllegalArgumentException("The green value is higher than 255"); + } + this.green = green; + if (blue < 0) { + throw new IllegalArgumentException("The blue value is lower than 0"); + } + if (blue > 255) { + throw new IllegalArgumentException("The blue value is higher than 255"); + } + this.blue = blue; + } + + /** + * Returns the red value of the RGB format + * + * @return The red value + */ + public int getRed() { + return red; + } + + /** + * Returns the green value of the RGB format + * + * @return The green value + */ + public int getGreen() { + return green; + } + + /** + * Returns the blue value of the RGB format + * + * @return The blue value + */ + public int getBlue() { + return blue; + } + + /** + * Returns the red value divided by 255 + * + * @return The offsetX value + */ + @Override + public float getValueX() { + return (float) red / 255F; + } + + /** + * Returns the green value divided by 255 + * + * @return The offsetY value + */ + @Override + public float getValueY() { + return (float) green / 255F; + } + + /** + * Returns the blue value divided by 255 + * + * @return The offsetZ value + */ + @Override + public float getValueZ() { + return (float) blue / 255F; + } + } + + /** + * Represents the color for the {@link ParticleEffects#NOTE} effect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static final class NoteColor extends ParticleColor { + private final int note; + + /** + * Construct a new note color + * + * @param note Note id which determines color + * @throws IllegalArgumentException If the note value is lower than 0 or higher than 255 + */ + public NoteColor(int note) throws IllegalArgumentException { + if (note < 0) { + throw new IllegalArgumentException("The note value is lower than 0"); + } + if (note > 24) { + throw new IllegalArgumentException("The note value is higher than 24"); + } + this.note = note; + } + + /** + * Returns the note value divided by 24 + * + * @return The offsetX value + */ + @Override + public float getValueX() { + return (float) note / 24F; + } + + /** + * Returns zero because the offsetY value is unused + * + * @return zero + */ + @Override + public float getValueY() { + return 0; + } + + /** + * Returns zero because the offsetZ value is unused + * + * @return zero + */ + @Override + public float getValueZ() { + return 0; + } + + } + + /** + * Represents a runtime exception that is thrown either if the displayed particle effect requires data and has none or vice-versa or if the data type is incorrect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + private static final class ParticleDataException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new particle data exception + * + * @param message Message that will be logged + */ + public ParticleDataException(String message) { + super(message); + } + } + + /** + * Represents a runtime exception that is thrown either if the displayed particle effect is not colorable or if the particle color type is incorrect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + private static final class ParticleColorException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new particle color exception + * + * @param message Message that will be logged + */ + public ParticleColorException(String message) { + super(message); + } + } + + /** + * Represents a runtime exception that is thrown if the displayed particle effect requires a newer version + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + private static final class ParticleVersionException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new particle version exception + * + * @param message Message that will be logged + */ + public ParticleVersionException(String message) { + super(message); + } + } + + /** + * Represents a particle effect packet with all attributes which is used for sending packets to the players + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.5 + */ + public static final class ParticlePacket { + private static int version; + private static Class enumParticle; + private static Constructor packetConstructor; + private static Method getHandle; + private static Field playerConnection; + private static Method sendPacket; + private static boolean initialized; + private final ParticleEffects effect; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final float speed; + private final int amount; + private final boolean longDistance; + private final ParticleData data; + private Object packet; + + /** + * Construct a new particle packet + * + * @param effect Particle effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 + * @param data Data of the effect + * @throws IllegalArgumentException If the speed or amount is lower than 0 + * @see #initialize() + */ + public ParticlePacket(ParticleEffects effect, float offsetX, float offsetY, float offsetZ, float speed, int amount, boolean longDistance, ParticleData data) throws IllegalArgumentException { + initialize(); + if (speed < 0) { + throw new IllegalArgumentException("The speed is lower than 0"); + } + if (amount < 0) { + throw new IllegalArgumentException("The amount is lower than 0"); + } + this.effect = effect; + this.offsetX = offsetX; + this.offsetY = offsetY; + this.offsetZ = offsetZ; + this.speed = speed; + this.amount = amount; + this.longDistance = longDistance; + this.data = data; + } + + /** + * Construct a new particle packet of a single particle flying into a determined direction + * + * @param effect Particle effect + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 + * @param data Data of the effect + * @throws IllegalArgumentException If the speed is lower than 0 + * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) + */ + public ParticlePacket(ParticleEffects effect, Vector direction, float speed, boolean longDistance, ParticleData data) throws IllegalArgumentException { + this(effect, (float) direction.getX(), (float) direction.getY(), (float) direction.getZ(), speed, 0, longDistance, data); + } + + /** + * Construct a new particle packet of a single colored particle + * + * @param effect Particle effect + * @param color Color of the particle + * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 + * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) + */ + public ParticlePacket(ParticleEffects effect, ParticleColor color, boolean longDistance) { + this(effect, color.getValueX(), color.getValueY(), color.getValueZ(), 1, 0, longDistance, null); + } + + /** + * Initializes {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} and sets {@link #initialized} to true if it succeeds + *

+ * Note: These fields only have to be initialized once, so it will return if {@link #initialized} is already set to true + * + * @throws VersionIncompatibleException if your bukkit version is not supported by this library + */ + public static void initialize() throws VersionIncompatibleException { + if (initialized) { + return; + } + try { + version = Residence.getVersionChecker().GetVersion(); + if (version > 1700) { + enumParticle = PackageType.MINECRAFT_SERVER.getClass("EnumParticle"); + } + Class packetClass = PackageType.MINECRAFT_SERVER.getClass(version < 7 ? "Packet63WorldParticles" : "PacketPlayOutWorldParticles"); + packetConstructor = ReflectionUtils.getConstructor(packetClass); + getHandle = ReflectionUtils.getMethod("CraftPlayer", PackageType.CRAFTBUKKIT_ENTITY, "getHandle"); + playerConnection = ReflectionUtils.getField("EntityPlayer", PackageType.MINECRAFT_SERVER, false, "playerConnection"); + sendPacket = ReflectionUtils.getMethod(playerConnection.getType(), "sendPacket", PackageType.MINECRAFT_SERVER.getClass("Packet")); + } catch (Exception exception) { + throw new VersionIncompatibleException("Your current bukkit version seems to be incompatible with this library", exception); + } + initialized = true; + } + + /** + * Returns the version of your server (1.x) + * + * @return The version number + */ + public static int getVersion() { + return version; + } + + /** + * Determine if {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} are initialized + * + * @return Whether these fields are initialized or not + * @see #initialize() + */ + public static boolean isInitialized() { + return initialized; + } + + /** + * Initializes {@link #packet} with all set values + * + * @param center Center location of the effect + * @throws PacketInstantiationException If instantion fails due to an unknown error + */ + private void initializePacket(Location center) throws PacketInstantiationException { + if (packet != null) { + return; + } + try { + packet = packetConstructor.newInstance(); + if (version < 8) { + String name = effect.getName(); + if (data != null) { + name += data.getPacketDataString(); + } + ReflectionUtils.setValue(packet, true, "a", name); + } else { + ReflectionUtils.setValue(packet, true, "a", enumParticle.getEnumConstants()[effect.getId()]); + ReflectionUtils.setValue(packet, true, "j", longDistance); + if (data != null) { + ReflectionUtils.setValue(packet, true, "k", data.getPacketData()); + } + } + ReflectionUtils.setValue(packet, true, "b", (float) center.getX()); + ReflectionUtils.setValue(packet, true, "c", (float) center.getY()); + ReflectionUtils.setValue(packet, true, "d", (float) center.getZ()); + ReflectionUtils.setValue(packet, true, "e", offsetX); + ReflectionUtils.setValue(packet, true, "f", offsetY); + ReflectionUtils.setValue(packet, true, "g", offsetZ); + ReflectionUtils.setValue(packet, true, "h", speed); + ReflectionUtils.setValue(packet, true, "i", amount); + } catch (Exception exception) { + throw new PacketInstantiationException("Packet instantiation failed", exception); + } + } + + /** + * Sends the packet to a single player and caches it + * + * @param center Center location of the effect + * @param player Receiver of the packet + * @throws PacketInstantiationException If instantion fails due to an unknown error + * @throws PacketSendingException If sending fails due to an unknown error + * @see #initializePacket(Location) + */ + public void sendTo(Location center, Player player) throws PacketInstantiationException, PacketSendingException { + initializePacket(center); + try { + sendPacket.invoke(playerConnection.get(getHandle.invoke(player)), packet); + } catch (Exception exception) { + throw new PacketSendingException("Failed to send the packet to player '" + player.getName() + "'", exception); + } + } + + /** + * Sends the packet to all players in the list + * + * @param center Center location of the effect + * @param players Receivers of the packet + * @throws IllegalArgumentException If the player list is empty + * @see #sendTo(Location center, Player player) + */ + public void sendTo(Location center, List players) throws IllegalArgumentException { + if (players.isEmpty()) { + throw new IllegalArgumentException("The player list is empty"); + } + for (Player player : players) { + sendTo(center, player); + } + } + + /** + * Sends the packet to all players in a certain range + * + * @param center Center location of the effect + * @param range Range in which players will receive the packet (Maximum range for particles is usually 16, but it can differ for some types) + * @throws IllegalArgumentException If the range is lower than 1 + * @see #sendTo(Location center, Player player) + */ + public void sendTo(Location center, double range) throws IllegalArgumentException { + if (range < 1) { + throw new IllegalArgumentException("The range is lower than 1"); + } + String worldName = center.getWorld().getName(); + double squared = range * range; + for (Player player : Bukkit.getOnlinePlayers()) { + if (!player.getWorld().getName().equals(worldName) || player.getLocation().distanceSquared(center) > squared) { + continue; + } + sendTo(center, player); + } + } + + /** + * Represents a runtime exception that is thrown if a bukkit version is not compatible with this library + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.5 + */ + private static final class VersionIncompatibleException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new version incompatible exception + * + * @param message Message that will be logged + * @param cause Cause of the exception + */ + public VersionIncompatibleException(String message, Throwable cause) { + super(message, cause); + } + } + + /** + * Represents a runtime exception that is thrown if packet instantiation fails + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.4 + */ + private static final class PacketInstantiationException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new packet instantiation exception + * + * @param message Message that will be logged + * @param cause Cause of the exception + */ + public PacketInstantiationException(String message, Throwable cause) { + super(message, cause); + } + } + + /** + * Represents a runtime exception that is thrown if packet sending fails + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.4 + */ + private static final class PacketSendingException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new packet sending exception + * + * @param message Message that will be logged + * @param cause Cause of the exception + */ + public PacketSendingException(String message, Throwable cause) { + super(message, cause); + } + } + } } \ No newline at end of file diff --git a/src/plugin.yml b/src/plugin.yml index 2967780cc..a98ecbdf2 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.1.4.5 +version: 4.1.5.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 0d9c45f188a306775b60d98123a98479bccb0d4e Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 10 Jun 2016 20:09:05 +0300 Subject: [PATCH 0182/1142] hotfloor flag for 1.10 servers --- .../bukkit/residence/LocaleManager.java | 10 +++++-- .../bekvon/bukkit/residence/Residence.java | 5 ++++ .../bukkit/residence/allNms/v1_10Events.java | 29 +++++++++++++++++++ .../residence/protection/FlagPermissions.java | 4 ++- 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_10Events.java diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index fd755d7ed..7a8d4f07c 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -271,7 +271,7 @@ public void LoadLang(String lang) { c.get("Language.Rent.Days", "&eRent days: &6%1"); c.get("Language.Rent.Rented", " &6(Rented)"); c.get("Language.Rent.RentList", " &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7"); - + c.get("Language.Rent.EvictConfirm", "&eWrite &6/res market confirm &eto evict renter from &6%1 &eresidence"); c.get("Language.Rent.UnrentConfirm", "&eWrite &6/res market confirm &eto unrent &6%1 &eresidence"); c.get("Language.Rent.ReleaseConfirm", "&eWrite &6/res market confirm &eto remove &6%1 &eresidence from market"); @@ -1118,6 +1118,12 @@ public void LoadLang(String lang) { "Prevent riding a horse"); c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.backup.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); + // hotfloor + FlagList.add("hotfloor"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hotfloor.Description", + "Prevent damage from magma blocks"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hotfloor.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // Filling with custom flags info Set sec = conf.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands").getKeys(false); @@ -1450,7 +1456,7 @@ public void LoadLang(String lang) { c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.payrent.Info", Arrays.asList("&eUsage: &6/res market payrent ")); c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.payrent.Args", "[residence]"); - + c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.confirm.Description", "Confirms residence unrent/release action"); c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.confirm.Info", Arrays.asList("&eUsage: &6/res market confirm")); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 7e1b16848..091a89e89 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -52,6 +52,7 @@ import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; import com.bekvon.bukkit.residence.listeners.ResidenceFixesListener; +import com.bekvon.bukkit.residence.allNms.v1_10Events; import com.bekvon.bukkit.residence.allNms.v1_8Events; import com.bekvon.bukkit.residence.allNms.v1_9Events; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; @@ -637,6 +638,10 @@ public void run() { if (getVersionChecker().GetVersion() >= 1900) pm.registerEvents(new v1_9Events(), this); + // 1.10 event + if (getVersionChecker().GetVersion() >= 11000) + pm.registerEvents(new v1_10Events(), this); + // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, // Priority.NORMAL, this); if (cmanager.enableSpout()) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java new file mode 100644 index 000000000..d569bbbf1 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java @@ -0,0 +1,29 @@ +package com.bekvon.bukkit.residence.allNms; + +import org.bukkit.entity.Entity; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import com.bekvon.bukkit.residence.Residence; + +public class v1_10Events implements Listener { + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + + public void onPlayerFireInteract(EntityDamageEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + + if (event.getCause() != DamageCause.HOT_FLOOR) + return; + + Entity ent = event.getEntity(); + + if (!Residence.getPermsByLoc(ent.getLocation()).has("hotfloor", true)) { + event.setCancelled(true); + return; + } + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index e973d5eac..91a1b1cd4 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -161,7 +161,7 @@ public static void initValidFlags() { addFlag("riding"); addFlag("hook"); - + addResidenceOnlyFlag("trample"); addResidenceOnlyFlag("pvp"); addResidenceOnlyFlag("fireball"); @@ -238,6 +238,8 @@ public static void initValidFlags() { addResidenceOnlyFlag("dryup"); addResidenceOnlyFlag("backup"); + + addResidenceOnlyFlag("hotfloor"); addPlayerOrGroupOnlyFlag("admin"); From 6f3b057e47b1b39f5f5d283da8c31e2c862c13cd Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jun 2016 13:39:14 +0300 Subject: [PATCH 0183/1142] chat prefix --- .../bukkit/residence/ConfigManager.java | 26 ++++++ .../bukkit/residence/LocaleManager.java | 15 +++- .../bukkit/residence/commands/market.java | 10 ++- .../bukkit/residence/commands/setmain.java | 52 ++++++++++++ .../residence/containers/ResidencePlayer.java | 34 ++++++++ .../listeners/ResidencePlayerListener.java | 81 ++++++++++++++++++- .../permissions/PermissionManager.java | 6 +- .../protection/ClaimedResidence.java | 18 +++++ .../residence/protection/FlagPermissions.java | 1 + .../protection/ResidenceManager.java | 4 +- .../bukkit/residence/signsStuff/SignUtil.java | 2 +- src/plugin.yml | 2 +- 12 files changed, 240 insertions(+), 11 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/commands/setmain.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index afaa2f971..8ee6db91a 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -196,6 +196,12 @@ public class ConfigManager { public boolean SchematicsSaveOnFlagChange; // Schematics + // Global chat + public boolean GlobalChatEnabled; + public boolean GlobalChatSelfModify; + public String GlobalChatFormat; + // Global chat + private Residence plugin; public ConfigManager(FileConfiguration config, FileConfiguration flags, FileConfiguration groups, Residence plugin) { @@ -387,6 +393,14 @@ public void UpdateConfigFile() { c.getW().addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); DisableCommands = c.get("Global.Optimizations.DisabledWorlds.DisableCommands", true); + c.getW().addComment("Global.Optimizations.GlobalChat.Enabled", + "Enables or disables chat modification by including players main residence name"); + GlobalChatEnabled = c.get("Global.Optimizations.GlobalChat.Enabled", false); + c.getW().addComment("Global.Optimizations.GlobalChat.SelfModify", + "Modifys chat to add chat titles. If you're using a chat manager, you may add the tag {residence} to your chat format and disable this."); + GlobalChatSelfModify = c.get("Global.Optimizations.GlobalChat.SelfModify", true); + GlobalChatFormat = c.get("Global.Optimizations.GlobalChat.Format", "&c[&e%1&c]", true); + c.getW().addComment("Global.Optimizations.ResCreateCaseSensitive", "When its true you can create residences with similar names but different capitalization. An example: Village and village are counted as different residences", "When it's set to false you can't create residences with same names but different capitalizations"); @@ -901,6 +915,18 @@ private void load(FileConfiguration flags, FileConfiguration groups) { } } + public boolean isGlobalChatEnabled() { + return GlobalChatEnabled; + } + + public boolean isGlobalChatSelfModify() { + return GlobalChatSelfModify; + } + + public String getGlobalChatFormat() { + return GlobalChatFormat; + } + public int getRentInformDelay() { return RentInformDelay; } diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 7a8d4f07c..fc7f657e9 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -252,6 +252,7 @@ public void LoadLang(String lang) { c.get("Language.Residence.ParentNoPermission", "&cYou don't have permission to make changes to the parent zone."); c.get("Language.Residence.ChatDisabled", "&eResidence Chat Disabled..."); c.get("Language.Residence.DeleteConfirm", "&eAre you sure you want to delete residence &6%1&e, use &6/res confirm &eto confirm."); + c.get("Language.Residence.ChangedMain", "&eChainged main residence to &6%1"); c.get("Language.Residence.CanBeRented", "&6%1&e can be rented for &6%2 &eper &6%3 &edays. &6/res market rent"); c.get("Language.Residence.CanBeBought", "&6%1&e can be bought for &6%2&e. &6/res market buy"); @@ -656,6 +657,12 @@ public void LoadLang(String lang) { "allow or disallow teleporting to the residence with enderpearl"); c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enderpearl.Info", Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); + // chorustp + FlagList.add("chorustp"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chorustp.Description", + "allow or disallow teleporting to the residence with chorus fruit"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chorustp.Info", + Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); // admin FlagList.add("admin"); c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.admin.Description", @@ -1115,7 +1122,7 @@ public void LoadLang(String lang) { // backup FlagList.add("backup"); c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.backup.Description", - "Prevent riding a horse"); + "If set to true, restores previous look of area (WordEdit required)"); c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.backup.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // hotfloor @@ -1245,6 +1252,12 @@ public void LoadLang(String lang) { c.get("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", Arrays.asList("&eUsage: &6/res tpconfirm", "Teleports you to a residence, when teleportation is unsafe.")); + // res setmain + c.get("CommandHelp.SubCommands.res.SubCommands.setmain.Description", "Sets defined residence as main to show up in chat as prefix"); + c.get("CommandHelp.SubCommands.res.SubCommands.setmain.Info", + Arrays.asList("&eUsage: &6/res setmain (residence)", "Set defined residence as main.")); + c.get("CommandHelp.SubCommands.res.SubCommands.setmain.Args", "[residence]"); + // res subzone c.get("CommandHelp.SubCommands.res.SubCommands.subzone.Description", "Create subzones in residences."); c.get("CommandHelp.SubCommands.res.SubCommands.subzone.Info", diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 443ad99e5..d02233e71 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -10,6 +10,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.signsStuff.Signs; @@ -86,9 +87,14 @@ else if (Residence.getRentManager().getRentingPlayer(area).equalsIgnoreCase(send area = Residence.UnrentConfirm.remove(player.getName()); - if (!Residence.getRentManager().isRented(area)) + if (!Residence.getRentManager().isRented(area)) { Residence.getRentManager().removeFromForRent(player, area, resadmin); - else + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ClaimedResidence res = Residence.getResidenceManager().getByName(area); + if (rPlayer != null && res != null && rPlayer.getMainResidence() == res) { + rPlayer.setMainResidence(null); + } + } else Residence.getRentManager().unrent(player, area, resadmin); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/setmain.java b/src/com/bekvon/bukkit/residence/commands/setmain.java new file mode 100644 index 000000000..94fd9eb45 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/setmain.java @@ -0,0 +1,52 @@ +package com.bekvon.bukkit.residence.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class setmain implements cmd { + + @Override + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 1 && args.length != 2) { + return false; + } + + ClaimedResidence res = null; + + if (args.length == 1) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else + res = Residence.getResidenceManager().getByName(args[1]); + + if (res == null) { + sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return false; + } + + if (res.isOwner(player)) { + res.setMainResidence(res.isMainResidence() ? false : true); + } else if (Residence.getRentManager().isRented(res.getName()) && !Residence.getRentManager().getRentingPlayer(res.getName()).equalsIgnoreCase(player.getName())) { + sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return false; + } + + player.sendMessage(Residence.getLM().getMessage("Residence.ChangedMain", res.getTopParentName())); + + ResidencePlayer rplayer = Residence.getPlayerManager().getResidencePlayer(player); + if (rplayer != null) + rplayer.setMainResidence(res); + + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 241e25b44..699df0453 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -22,6 +22,7 @@ public class ResidencePlayer { private OfflinePlayer ofPlayer = null; private Map ResidenceList = new HashMap(); + private ClaimedResidence mainResidence = null; private int currentRes = -1; private PermissionGroup group = null; @@ -35,6 +36,39 @@ public ResidencePlayer(String userName) { RecalculatePermissions(); } + public void setMainResidence(ClaimedResidence res) { + if (mainResidence != null) + mainResidence.setMainResidence(false); + mainResidence = res; + } + + public ClaimedResidence getMainResidence() { + if (mainResidence == null) { + for (Entry one : ResidenceList.entrySet()) { + if (one.getValue() == null) + continue; + if (one.getValue().isMainResidence()) { + mainResidence = one.getValue(); + return mainResidence; + } + } + for (String one : Residence.getRentManager().getRentedLands(this.player.getName())) { + ClaimedResidence res = Residence.getResidenceManager().getByName(one); + if (res != null) { + mainResidence = res; + return mainResidence; + } + } + for (Entry one : ResidenceList.entrySet()) { + if (one.getValue() == null) + continue; + mainResidence = one.getValue(); + return mainResidence; + } + } + return mainResidence; + } + public void RecalculatePermissions() { this.player = Bukkit.getPlayerExact(userName); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3b4618023..e58cc079c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -54,6 +54,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.*; @@ -106,6 +107,73 @@ public void reload() { } } + // Adding to chat prefix main residence name + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerGlobalChat(AsyncPlayerChatEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (!Residence.getConfigManager().isGlobalChatEnabled()) + return; + if (!Residence.getConfigManager().isGlobalChatSelfModify()) + return; + Player player = event.getPlayer(); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + + if (rPlayer == null) + return; + + if (rPlayer.getResList().size() == 0) + return; + + ClaimedResidence res = rPlayer.getMainResidence(); + + if (res == null) + return; + + String honorific = Residence.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); + + String format = event.getFormat(); + format = format.replace("%1$s", honorific + "%1$s"); + event.setFormat(format); + } + + // Changing chat prefix variable to job name + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerChatGlobalLow(AsyncPlayerChatEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (!Residence.getConfigManager().isGlobalChatEnabled()) + return; + if (Residence.getConfigManager().isGlobalChatSelfModify()) + return; + Player player = event.getPlayer(); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + + if (rPlayer == null) + return; + + if (rPlayer.getResList().size() == 0) + return; + + ClaimedResidence res = rPlayer.getMainResidence(); + + if (res == null) + return; + + String honorific = Residence.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); + if (honorific.equalsIgnoreCase(" ")) + honorific = ""; + String format = event.getFormat(); + if (!format.contains("{residence}")) + return; + format = format.replace("{residence}", honorific); + event.setFormat(format); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceBackup(ResidenceFlagChangeEvent event) { if (!event.getFlag().equalsIgnoreCase("backup")) @@ -1193,12 +1261,11 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { String areaname = res.getName(); if (!res.getPermissions().playerHas(player.getName(), "enderpearl", true)) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "enderpearl", areaname)); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "EnderPearl", areaname)); return; } } - if (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND && Residence.getConfigManager().isBlockAnyTeleportation() - || Residence.getNms().isChorusTeleport(event.getCause())) { + if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && Residence.getConfigManager().isBlockAnyTeleportation()) { if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { String areaname = res.getName(); event.setCancelled(true); @@ -1206,6 +1273,14 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { return; } } + if (Residence.getNms().isChorusTeleport(event.getCause())) { + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "chorustp", true) && !player.hasPermission("residence.admin.tp")) { + String areaname = res.getName(); + event.setCancelled(true); + player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "ChorusTp", areaname)); + return; + } + } } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 4ddce8caa..8713f3d3e 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -101,7 +101,11 @@ public String getPermissionsGroup(Player player) { public String getPermissionsGroup(String player, String world) { if (perms == null) return Residence.getConfigManager().getDefaultGroup().toLowerCase(); - return perms.getPlayerGroup(player, world).toLowerCase(); + try { + return perms.getPlayerGroup(player, world).toLowerCase(); + } catch (Exception e) { + return Residence.getConfigManager().getDefaultGroup().toLowerCase(); + } } public void updateGroupNameForPlayer(Player player) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 36d44de52..6d168a959 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -56,6 +56,7 @@ public class ClaimedResidence { protected ChatColor ChannelColor = ChatColor.WHITE; protected ResidenceItemList ignorelist; protected ResidenceItemList blacklist; + protected boolean mainRes = false; protected List cmdWhiteList = new ArrayList(); protected List cmdBlackList = new ArrayList(); @@ -71,6 +72,14 @@ private ClaimedResidence(Residence plugin) { this.plugin = plugin; } + public boolean isMainResidence() { + return mainRes; + } + + public void setMainResidence(boolean state) { + mainRes = state; + } + public boolean isSubzone() { return parent == null ? false : true; } @@ -614,6 +623,10 @@ public ClaimedResidence getParent() { return parent; } + public String getTopParentName() { + return this.getTopParent().getName(); + } + public ClaimedResidence getTopParent() { if (parent == null) return this; @@ -1096,6 +1109,8 @@ public void removeArea(Player player, String id, boolean resadmin) { public Map save() { Map root = new HashMap<>(); Map areamap = new HashMap<>(); + if (mainRes) + root.put("MainResidence", mainRes); root.put("EnterMessage", enterMessage); root.put("LeaveMessage", leaveMessage); root.put("ShopDescription", ShopDesc); @@ -1174,6 +1189,9 @@ public static ClaimedResidence load(Map root, ClaimedResidence p Map areamap = (Map) root.get("Areas"); res.perms = ResidencePermissions.load(res, (Map) root.get("Permissions")); + if (root.containsKey("MainResidence")) + res.mainRes = (Boolean) root.get("MainResidence"); + if (root.containsKey("BlockSellPrice")) res.BlockSellPrice = (Double) root.get("BlockSellPrice"); else { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 91a1b1cd4..b545c4c21 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -156,6 +156,7 @@ public static void initValidFlags() { addFlag("dye"); addFlag("enderpearl"); + addFlag("chorustp"); // Horse riding addFlag("riding"); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 5765be561..563a5b110 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -262,7 +262,7 @@ public boolean addResidence(Player player, String owner, String name, Location l if (!newRes.isSubzone() && Residence.getConfigManager().enableEconomy()) { int chargeamount = (int) Math.ceil((double) newArea.getSize() * group.getCostPerBlock()); if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) - return false; + return false; } residences.put(name, newRes); @@ -570,8 +570,8 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi Language lm = Residence.getLM(); String resNameOwner = "&e" + lm.getMessage("Residence.Line", areaname); + resNameOwner += lm.getMessage("General.Owner", perms.getOwner()); if (Residence.getConfigManager().enableEconomy()) { - resNameOwner += lm.getMessage("General.Owner", perms.getOwner()); if (res.isOwner(sender.getName()) || !(sender instanceof Player) || resadmin) resNameOwner += lm.getMessage("Bank.Name", res.getBank().getStoredMoney()); } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 8fd0b1034..aaa06d83e 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -389,7 +389,7 @@ public String fixResName(String name) { else if (name.length() > 15 && name.contains(".")) { String[] splited = name.split("\\."); name = ""; - for (int i = splited.length - 1; i >= 0; i--) { + for (int i = 0; i < splited.length ; i++) { String tempName = name + "." + splited[i]; if (tempName.length() < 15) name = tempName; diff --git a/src/plugin.yml b/src/plugin.yml index a98ecbdf2..360277f7d 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.1.5.1 +version: 4.1.7.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 49804a49b70400a689fd967f73916eababfec7e7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jun 2016 14:35:08 +0300 Subject: [PATCH 0184/1142] change required permission to block command to residence.blockcommand... --- src/com/bekvon/bukkit/residence/ResidenceCommandListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 2a3470e4b..7db929705 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -129,8 +129,8 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return commandHelp(new String[] { "?" }, resadmin, sender, command); } - Permission p = new Permission("residence.command." + args[0], PermissionDefault.TRUE); - if (!sender.hasPermission(p)) { + Permission p = new Permission("residence.blockcommand." + args[0], PermissionDefault.FALSE); + if (sender.hasPermission(p)) { sender.sendMessage(Residence.getLM().getMessage("General.NoCmdPermission")); return true; } From b380d124ca81b74ba21d21d331293ce9a760c4ed Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 14 Jun 2016 17:11:18 +0300 Subject: [PATCH 0185/1142] save rentable/rent/sell info direct in particular residence fix for case sensitive residences --- .../bekvon/bukkit/residence/Residence.java | 24 +- .../residence/api/MarketRentInterface.java | 8 +- .../bukkit/residence/commands/info.java | 7 +- .../bukkit/residence/commands/market.java | 143 ++-- .../bukkit/residence/commands/remove.java | 9 +- .../residence/economy/TransactionManager.java | 364 +++++---- .../residence/economy/rent/RentManager.java | 762 ++++++++++-------- .../residence/economy/rent/RentableLand.java | 19 +- .../residence/economy/rent/RentedLand.java | 11 +- .../listeners/ResidencePlayerListener.java | 23 +- .../protection/ClaimedResidence.java | 177 ++-- .../protection/ResidenceManager.java | 113 +-- .../bukkit/residence/signsStuff/SignUtil.java | 84 +- .../bukkit/residence/signsStuff/Signs.java | 8 +- 14 files changed, 931 insertions(+), 821 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 091a89e89..febc278f4 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -403,7 +403,7 @@ public void onEnable() { String packageName = getServer().getClass().getPackage().getName(); String[] packageSplit = packageName.split("\\."); - String version = packageSplit[packageSplit.length - 1].substring(0,packageSplit[packageSplit.length - 1].length()-3); + String version = packageSplit[packageSplit.length - 1].substring(0, packageSplit[packageSplit.length - 1].length() - 3); try { Class nmsClass; if (Residence.getConfigManager().CouldronCompatability()) @@ -459,9 +459,6 @@ public void onEnable() { ShopSignUtilManager = new ShopSignUtil(this); RandomTpManager = new RandomTp(this); - signmanager = new SignUtil(this); - Residence.getSignUtil().LoadSigns(); - versionChecker = new VersionChecker(this); Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); @@ -590,7 +587,7 @@ public void run() { leasemanager = new LeaseManager(rmanager); } if (tmanager == null) { - tmanager = new TransactionManager(rmanager, gmanager); + tmanager = new TransactionManager(); } if (pmanager == null) { pmanager = new PermissionListManager(); @@ -603,6 +600,9 @@ public void run() { throw e; } + signmanager = new SignUtil(this); + Residence.getSignUtil().LoadSigns(); + if (Residence.getConfigManager().isUseResidenceFileClean()) FileCleanUp.cleanFiles(); @@ -637,11 +637,11 @@ public void run() { // 1.9 event if (getVersionChecker().GetVersion() >= 1900) pm.registerEvents(new v1_9Events(), this); - + // 1.10 event if (getVersionChecker().GetVersion() >= 11000) pm.registerEvents(new v1_10Events(), this); - + // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, // Priority.NORMAL, this); if (cmanager.enableSpout()) { @@ -732,8 +732,8 @@ public void run() { getShopSignUtilManager().LoadShopVotes(); getShopSignUtilManager().LoadSigns(); getShopSignUtilManager().BoardUpdate(); - getVersionChecker().VersionCheck(null); + } public static SignUtil getSignUtil() { @@ -1177,7 +1177,7 @@ protected boolean loadYml() throws Exception { } rmanager = getResidenceManager().load(worlds); - + // Getting shop residences Map resList = rmanager.getResidences(); for (Entry one : resList.entrySet()) { @@ -1197,7 +1197,8 @@ protected boolean loadYml() throws Exception { if (loadFile.isFile()) { yml = new YMLSaveHelper(loadFile); yml.load(); - tmanager = TransactionManager.load((Map) yml.getRoot().get("Economy"), gmanager, rmanager); + tmanager = new TransactionManager(); + tmanager.load((Map) yml.getRoot().get("Economy")); } loadFile = new File(saveFolder, "leases.yml"); if (loadFile.isFile()) { @@ -1215,7 +1216,8 @@ protected boolean loadYml() throws Exception { if (loadFile.isFile()) { yml = new YMLSaveHelper(loadFile); yml.load(); - rentmanager = RentManager.load((Map) yml.getRoot().get("RentSystem")); +// rentmanager = new RentManager(); + rentmanager.load((Map) yml.getRoot().get("RentSystem")); } // System.out.print("[Residence] Loaded..."); return true; diff --git a/src/com/bekvon/bukkit/residence/api/MarketRentInterface.java b/src/com/bekvon/bukkit/residence/api/MarketRentInterface.java index 46aedbd20..f18a1a572 100644 --- a/src/com/bekvon/bukkit/residence/api/MarketRentInterface.java +++ b/src/com/bekvon/bukkit/residence/api/MarketRentInterface.java @@ -1,17 +1,17 @@ package com.bekvon.bukkit.residence.api; import java.util.List; -import java.util.Map; +import java.util.Set; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.economy.rent.RentedLand; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; public interface MarketRentInterface { - public Map getRentableResidences(); + public Set getRentableResidences(); - public Map getCurrentlyRentedResidences(); + public Set getCurrentlyRentedResidences(); public RentedLand getRentedLand(String landName); diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 4a193f5ca..fb789d4c9 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -6,6 +6,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class info implements cmd { @@ -14,9 +15,9 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length == 1 && sender instanceof Player) { Player player = (Player) sender; - String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - if (area != null) { - Residence.getResidenceManager().printAreaInfo(area, sender, resadmin); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) { + Residence.getResidenceManager().printAreaInfo(res.getName(), sender, resadmin); } else { sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index d02233e71..5859e2add 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -52,51 +52,52 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length != 3 && args.length != 2) return false; - String area = null; + ClaimedResidence res = null; if (args.length == 2) - area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); else - area = args[2]; + res = Residence.getResidenceManager().getByName(args[2]); - if (area == null) { + if (res == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return true; } - Residence.UnrentConfirm.put(player.getName(), area); + Residence.UnrentConfirm.put(player.getName(), res.getName()); - if (Residence.getRentManager().isRented(area)) { + if (res.isRented()) { if (resadmin || Residence.isResAdminOn(player)) - sender.sendMessage(Residence.getLM().getMessage("Rent.EvictConfirm", area)); - else if (Residence.getRentManager().getRentingPlayer(area).equalsIgnoreCase(sender.getName())) - sender.sendMessage(Residence.getLM().getMessage("Rent.UnrentConfirm", area)); + sender.sendMessage(Residence.getLM().getMessage("Rent.EvictConfirm", res.getName())); + else if (Residence.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sender.getName())) + sender.sendMessage(Residence.getLM().getMessage("Rent.UnrentConfirm", res.getName())); else - Residence.getRentManager().printRentInfo(player, area); + Residence.getRentManager().printRentInfo(player, res); } else - sender.sendMessage(Residence.getLM().getMessage("Rent.ReleaseConfirm", area)); + sender.sendMessage(Residence.getLM().getMessage("Rent.ReleaseConfirm", res.getName())); return true; case "confirm": - if (!Residence.UnrentConfirm.containsKey(player.getName())) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return false; } + String area = Residence.UnrentConfirm.remove(player.getName()); + res = Residence.getResidenceManager().getByName(area); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } - area = Residence.UnrentConfirm.remove(player.getName()); - - if (!Residence.getRentManager().isRented(area)) { - Residence.getRentManager().removeFromForRent(player, area, resadmin); + if (!res.isRented()) { + Residence.getRentManager().removeFromForRent(player, res, resadmin); ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - ClaimedResidence res = Residence.getResidenceManager().getByName(area); if (rPlayer != null && res != null && rPlayer.getMainResidence() == res) { rPlayer.setMainResidence(null); } } else Residence.getRentManager().unrent(player, area, resadmin); - return true; case "sign": if (args.length != 3) { @@ -120,8 +121,6 @@ else if (Residence.getRentManager().getRentingPlayer(area).equalsIgnoreCase(send Location loc = sign.getLocation(); - String landName = null; - ClaimedResidence CurrentRes = Residence.getResidenceManager().getByLoc(sign.getLocation()); if (CurrentRes != null && !CurrentRes.isOwner(player) && !resadmin) { @@ -129,17 +128,15 @@ else if (Residence.getRentManager().getRentingPlayer(area).equalsIgnoreCase(send return true; } - final ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return true; } - landName = res.getName(); - - boolean ForSale = Residence.getTransactionManager().isForSale(landName); - boolean ForRent = Residence.getRentManager().isForRent(landName); + boolean ForSale = res.isForSell(); + boolean ForRent = res.isForRent(); int category = 1; if (Residence.getSignUtil().getSigns().GetAllSigns().size() > 0) @@ -147,9 +144,8 @@ else if (Residence.getRentManager().getRentingPlayer(area).equalsIgnoreCase(send if (ForSale || ForRent) { signInfo.setCategory(category); - signInfo.setResidence(landName); + signInfo.setResidence(res); signInfo.setLocation(loc); -// signInfo.updateLocation(); Residence.getSignUtil().getSigns().addSign(signInfo); Residence.getSignUtil().saveSigns(); } else { @@ -162,46 +158,41 @@ else if (Residence.getRentManager().getRentingPlayer(area).equalsIgnoreCase(send return true; case "info": - if (args.length == 2) { - String areaname = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - boolean sell = Residence.getTransactionManager().viewSaleInfo(areaname, player); - if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isForRent(areaname)) { - Residence.getRentManager().printRentInfo(player, areaname); - } else if (!sell) { - sender.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); - } - } else if (args.length == 3) { - boolean sell = Residence.getTransactionManager().viewSaleInfo(args[2], player); - if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isForRent(args[2])) { - Residence.getRentManager().printRentInfo(player, args[2]); - } else if (!sell) { - sender.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); - } - } else { - return false; + res = null; + if (args.length == 2) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 3) + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + boolean sell = Residence.getTransactionManager().viewSaleInfo(res, player); + if (Residence.getConfigManager().enabledRentSystem() && res.isForRent()) { + Residence.getRentManager().printRentInfo(player, res); + } else if (!sell) { + sender.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); } return true; case "buy": - if (args.length == 2) { - String areaname = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - boolean sell = Residence.getTransactionManager().viewSaleInfo(areaname, player); - if (sell) { - Residence.getTransactionManager().buyPlot(areaname, player, resadmin); - } else { - sender.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); - } - } else if (args.length == 3) { - boolean sell = Residence.getTransactionManager().viewSaleInfo(args[2], player); - if (sell) { - Residence.getTransactionManager().buyPlot(args[2], player, resadmin); - } else { - sender.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); - } + res = null; + if (args.length == 2) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 3) + res = Residence.getResidenceManager().getByName(args[2]); + + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; + } + + sell = Residence.getTransactionManager().viewSaleInfo(res, player); + if (sell) { + Residence.getTransactionManager().buyPlot(res, player, resadmin); } else { - return false; + sender.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); } return true; - case "unsell": if (args.length != 3) return false; @@ -233,10 +224,9 @@ private boolean commandResMarketRent(String[] args, boolean resadmin, Player pla } boolean repeat = Residence.getConfigManager().isRentPlayerAutoPay(); - String area = null; + ClaimedResidence res = null; if (args.length == 4) { - area = args[2]; if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { repeat = true; } else if (args[3].equalsIgnoreCase("f") || args[3].equalsIgnoreCase("false")) { @@ -248,10 +238,12 @@ private boolean commandResMarketRent(String[] args, boolean resadmin, Player pla } if (args.length == 2) - area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 4) + res = Residence.getResidenceManager().getByName(args[2]); - if (area != null) - Residence.getRentManager().rent(player, area, repeat, resadmin); + if (res != null) + Residence.getRentManager().rent(player, res, repeat, resadmin); else player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); @@ -263,18 +255,15 @@ private boolean commandResMarketPayRent(String[] args, boolean resadmin, Player return false; } - String area = null; + ClaimedResidence res = null; if (args.length == 2) - area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - else { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res != null) - area = res.getName(); - } + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else + res = Residence.getResidenceManager().getByName(args[2]); - if (area != null) - Residence.getRentManager().payRent(player, area, resadmin); + if (res != null) + Residence.getRentManager().payRent(player, res, resadmin); else player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return true; @@ -380,9 +369,9 @@ private boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player return true; } - if (Residence.getRentManager().isRented(res.getName()) && Residence.getRentManager().getRentingPlayer(res.getName()).equalsIgnoreCase(player.getName())) { + if (res.isRented() && res.getRentedLand().player.equalsIgnoreCase(player.getName())) { Residence.getRentManager().setRentedRepeatable(player, res.getName(), value, resadmin); - } else if (Residence.getRentManager().isForRent(res.getName())) { + } else if (res.isForRent()) { Residence.getRentManager().setRentRepeatable(player, res.getName(), value, resadmin); } else { player.sendMessage(Residence.getLM().getMessage("Economy.RentReleaseInvalid", ChatColor.YELLOW + res.getName() + ChatColor.RED)); diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 5a4575a44..bc3324691 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -49,17 +49,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.deleteConfirm.remove(senderName); String resname = res.getName(); - String areaname = ""; - if (res.isSubzone()) { - String[] split = resname.split("\\."); - areaname = split[split.length - 1]; - } if (!Residence.deleteConfirm.containsKey(senderName) || !resname.equalsIgnoreCase(Residence.deleteConfirm.get(senderName))) { if (res.isSubzone()) - sender.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", areaname)); + sender.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", res.getShortName())); else - sender.sendMessage(Residence.getLM().getMessage("Residence.DeleteConfirm", resname)); + sender.sendMessage(Residence.getLM().getMessage("Residence.DeleteConfirm", res.getShortName())); Residence.deleteConfirm.put(senderName, resname); } else { Residence.getResidenceManager().removeResidence(sender, resname, resadmin); diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index e2f5cfac7..f4a2d3b49 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -12,9 +12,8 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -23,9 +22,13 @@ import org.bukkit.entity.Player; public class TransactionManager implements MarketBuyInterface { - ResidenceManager manager; - private Map sellAmount; - PermissionManager gm; + ResidenceManager manager5; + private Set sellAmount; + PermissionManager gm5; + + public TransactionManager() { + sellAmount = new HashSet(); + } public static boolean chargeEconomyMoney(Player player, int amount) { EconomyInterface econ = Residence.getEconomyManager(); @@ -42,35 +45,6 @@ public static boolean chargeEconomyMoney(Player player, int amount) { return true; } - public void updateSellName(String oldName, String newName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && oldName != null && newName != null) { - oldName = oldName.toLowerCase(); - newName = newName.toLowerCase(); - } - - for (Iterator> it = sellAmount.entrySet().iterator(); it.hasNext();) { - Map.Entry entry = it.next(); - - String n = entry.getKey(); - if (!Residence.getConfigManager().isResCreateCaseSensitive()) - n = n.toLowerCase(); - - if (n.contains(".") && n.startsWith(oldName + ".") || n.equals(oldName)) { - - int amount = entry.getValue(); - String[] split = n.split(oldName); - String subname = ""; - if (split.length > 1) - subname = n.split(oldName)[1]; - String name = newName + subname; - it.remove(); - - sellAmount.put(name, amount); - - } - } - } - public static boolean giveEconomyMoney(Player player, int amount) { if (player == null) return false; @@ -87,15 +61,20 @@ public static boolean giveEconomyMoney(Player player, int amount) { return true; } - public TransactionManager(ResidenceManager m, PermissionManager g) { - gm = g; - manager = m; - sellAmount = Collections.synchronizedMap(new HashMap()); + public void putForSale(String areaname, Player player, int amount, boolean resadmin) { + ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + putForSale(res, player, amount, resadmin); } - public void putForSale(String areaname, Player player, int amount, boolean resadmin) { + public void putForSale(ClaimedResidence res, Player player, int amount, boolean resadmin) { + + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return; + } + if (Residence.getConfigManager().enabledRentSystem()) { - if (Residence.getRentManager().isForRent(areaname)) { + if (res.isForRent()) { player.sendMessage(Residence.getLM().getMessage("Economy.RentSellFail")); return; } @@ -115,58 +94,53 @@ public void putForSale(String areaname, Player player, int amount, boolean resad return; } } - ClaimedResidence area = manager.getByName(areaname); - if (area == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); - return; - } - - areaname = area.getName(); - - if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) - areaname = areaname.toLowerCase(); - if (!area.isOwner(player) && !resadmin) { + if (!res.isOwner(player) && !resadmin) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } - if (sellAmount.containsKey(areaname)) { + if (sellAmount.contains(res)) { player.sendMessage(Residence.getLM().getMessage("Economy.AlreadySellFail")); return; } - sellAmount.put(areaname, amount); - - Residence.getSignUtil().CheckSign(area); - - player.sendMessage(Residence.getLM().getMessage("Residence.ForSale", areaname, amount)); + res.setSellPrice(amount); + sellAmount.add(res); + Residence.getSignUtil().CheckSign(res); + player.sendMessage(Residence.getLM().getMessage("Residence.ForSale", res.getName(), amount)); } public boolean putForSale(String areaname, int amount) { + ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + return putForSale(res, amount); + } - if (Residence.getConfigManager().enabledRentSystem()) { - if (Residence.getRentManager().isForRent(areaname)) { - return false; - } - } - ClaimedResidence area = manager.getByName(areaname); - if (area == null) { + public boolean putForSale(ClaimedResidence res, int amount) { + if (res == null) return false; - } - areaname = area.getName(); - - if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) - areaname = areaname.toLowerCase(); + if (Residence.getConfigManager().enabledRentSystem() && res.isForRent()) + return false; - if (sellAmount.containsKey(areaname)) { + if (sellAmount.contains(res)) return false; - } - sellAmount.put(areaname, amount); + + res.setSellPrice(amount); + sellAmount.add(res); return true; } public void buyPlot(String areaname, Player player, boolean resadmin) { - PermissionGroup group = gm.getGroup(player); + ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + buyPlot(res, player, resadmin); + } + + public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { + if (res == null || !res.isForSell()) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return; + } + + PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (!resadmin) { if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); @@ -178,126 +152,134 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { return; } } - if (isForSale(areaname)) { - ClaimedResidence res = manager.getByName(areaname); - if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); - sellAmount.remove(areaname); - return; + + if (res.getPermissions().getOwner().equals(player.getName())) { + player.sendMessage(Residence.getLM().getMessage("Economy.OwnerBuyFail")); + return; + } + if (Residence.getResidenceManager().getOwnedZoneCount(player.getName()) >= group.getMaxZones(player.getName()) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Residence.TooMany")); + return; + } + Server serv = Residence.getServ(); + int amount = res.getSellPrice(); + + if (!resadmin && !group.buyLandIgnoreLimits()) { + CuboidArea[] areas = res.getAreaArray(); + for (CuboidArea thisarea : areas) { + if (!group.inLimits(thisarea)) { + player.sendMessage(Residence.getLM().getMessage("Residence.BuyTooBig")); + return; + } } + } - areaname = res.getName(); + EconomyInterface econ = Residence.getEconomyManager(); + if (econ == null) { + player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + return; + } - if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) - areaname = areaname.toLowerCase(); + String buyerName = player.getName(); + String sellerName = res.getPermissions().getOwner(); + Player sellerNameFix = Residence.getServ().getPlayer(sellerName); + if (sellerNameFix != null) { + sellerName = sellerNameFix.getName(); + } - if (res.getPermissions().getOwner().equals(player.getName())) { - player.sendMessage(Residence.getLM().getMessage("Economy.OwnerBuyFail")); - return; - } - if (Residence.getResidenceManager().getOwnedZoneCount(player.getName()) >= group.getMaxZones(player.getName()) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.TooMany")); - return; - } - Server serv = Residence.getServ(); - int amount = sellAmount.get(areaname); - if (!resadmin) { - if (!group.buyLandIgnoreLimits()) { - CuboidArea[] areas = res.getAreaArray(); - for (CuboidArea thisarea : areas) { - if (!group.inLimits(thisarea)) { - player.sendMessage(Residence.getLM().getMessage("Residence.BuyTooBig")); - return; - } - } - } - } - EconomyInterface econ = Residence.getEconomyManager(); - if (econ == null) { - player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + if (econ.canAfford(buyerName, amount)) { + if (!econ.transfer(buyerName, sellerName, amount)) { + player.sendMessage(ChatColor.RED + "Error, could not transfer " + amount + " from " + buyerName + " to " + sellerName); return; } - String buyerName = player.getName(); - String sellerName = res.getPermissions().getOwner(); - Player sellerNameFix = Residence.getServ().getPlayer(sellerName); - if (sellerNameFix != null) { - sellerName = sellerNameFix.getName(); - } - if (econ.canAfford(buyerName, amount)) { - if (!econ.transfer(buyerName, sellerName, amount)) { - player.sendMessage(ChatColor.RED + "Error, could not transfer " + amount + " from " + buyerName + " to " + sellerName); - return; - } - res.getPermissions().setOwner(player.getName(), true); - res.getPermissions().applyDefaultFlags(); - this.removeFromSale(areaname); + res.getPermissions().setOwner(player.getName(), true); + res.getPermissions().applyDefaultFlags(); + removeFromSale(res); - Residence.getSignUtil().CheckSign(res); + Residence.getSignUtil().CheckSign(res); - CuboidArea area = res.getAreaArray()[0]; - Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); + CuboidArea area = res.getAreaArray()[0]; + Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); - player.sendMessage(Residence.getLM().getMessage("Economy.MoneyCharged", String.format("%d", amount), econ.getName())); - player.sendMessage(Residence.getLM().getMessage("Residence.Bought", areaname)); - Player seller = serv.getPlayer(sellerName); - if (seller != null && seller.isOnline()) { - seller.sendMessage(Residence.getLM().getMessage("Residence.Buy", player.getName(), areaname)); - seller.sendMessage(Residence.getLM().getMessage("Economy.MoneyCredit", String.format("%d", amount), econ.getName())); - } - } else { - player.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); + player.sendMessage(Residence.getLM().getMessage("Economy.MoneyCharged", String.format("%d", amount), econ.getName())); + player.sendMessage(Residence.getLM().getMessage("Residence.Bought", res.getShortName())); + Player seller = serv.getPlayer(sellerName); + if (seller != null && seller.isOnline()) { + seller.sendMessage(Residence.getLM().getMessage("Residence.Buy", player.getName(), res.getShortName())); + seller.sendMessage(Residence.getLM().getMessage("Economy.MoneyCredit", String.format("%d", amount), econ.getName())); } } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + player.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); } + } public void removeFromSale(Player player, String areaname, boolean resadmin) { - ClaimedResidence area = manager.getByName(areaname); - if (area != null) { + ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + removeFromSale(player, res, resadmin); + } - areaname = area.getName(); + public void removeFromSale(Player player, ClaimedResidence res, boolean resadmin) { + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); + return; + } - if (!isForSale(areaname)) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotForSale")); - return; - } - if (area.isOwner(player) || resadmin) { - removeFromSale(areaname); - Residence.getSignUtil().CheckSign(area); - player.sendMessage(Residence.getLM().getMessage("Residence.StopSelling")); - } else { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); - } + if (!res.isForSell()) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotForSale")); + return; + } + if (res.isOwner(player) || resadmin) { + removeFromSale(res); + Residence.getSignUtil().CheckSign(res); + player.sendMessage(Residence.getLM().getMessage("Residence.StopSelling")); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); } } public void removeFromSale(String areaname) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) - areaname = areaname.toLowerCase(); - sellAmount.remove(areaname); - Residence.getSignUtil().removeSign(areaname); + ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + removeFromSale(res); + } + + public void removeFromSale(ClaimedResidence res) { + if (res == null) + return; + sellAmount.remove(res); + Residence.getSignUtil().removeSign(res); } public boolean isForSale(String areaname) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) - areaname = areaname.toLowerCase(); - return sellAmount.containsKey(areaname); + ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + return isForSale(res); + } + + public boolean isForSale(ClaimedResidence res) { + if (res == null) + return false; + return sellAmount.contains(res); } public boolean viewSaleInfo(String areaname, Player player) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) - areaname = areaname.toLowerCase(); - if (!sellAmount.containsKey(areaname)) + ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + return viewSaleInfo(res, player); + } + + public boolean viewSaleInfo(ClaimedResidence res, Player player) { + + if (res == null || !res.isForSell()) { + return false; + } + + if (!sellAmount.contains(res)) return false; player.sendMessage(Residence.getLM().getMessage("General.Separator")); - player.sendMessage(Residence.getLM().getMessage("Area.Name", areaname)); - player.sendMessage(Residence.getLM().getMessage("Economy.SellAmount", sellAmount.get(areaname))); + player.sendMessage(Residence.getLM().getMessage("Area.Name", res.getName())); + player.sendMessage(Residence.getLM().getMessage("Economy.SellAmount", res.getSellPrice())); if (Residence.getConfigManager().useLeases()) { - String etime = Residence.getLeaseManager().getExpireTime(areaname); + String etime = Residence.getLeaseManager().getExpireTime(res.getName()); if (etime != null) { player.sendMessage(Residence.getLM().getMessage("Economy.LeaseExpire", etime)); } @@ -307,39 +289,35 @@ public boolean viewSaleInfo(String areaname, Player player) { } public void printForSaleResidences(Player player, int page) { - Set> set = sellAmount.entrySet(); - List toRemove = new ArrayList(); + List toRemove = new ArrayList(); player.sendMessage(Residence.getLM().getMessage("Economy.LandForSale")); StringBuilder sbuild = new StringBuilder(); sbuild.append(ChatColor.GREEN); int perpage = 10; - int pagecount = (int) Math.ceil((double) set.size() / (double) perpage); + int pagecount = (int) Math.ceil((double) sellAmount.size() / (double) perpage); if (page < 1) page = 1; int z = 0; - for (Entry land : set) { + for (ClaimedResidence res : sellAmount) { z++; if (z <= (page - 1) * perpage) continue; if (z > (page - 1) * perpage + perpage) break; - ClaimedResidence res = Residence.getResidenceManager().getByName(land.getKey()); - if (res == null) { z--; - toRemove.add(land.getKey()); + toRemove.add(res); continue; } - - player.sendMessage(Residence.getLM().getMessage("Economy.SellList", z, land.getKey(), land.getValue(), res.getOwner())); + player.sendMessage(Residence.getLM().getMessage("Economy.SellList", z, res.getName(), res.getSellPrice(), res.getOwner())); } - for (String one : toRemove) { + for (ClaimedResidence one : toRemove) { sellAmount.remove(one); } @@ -370,30 +348,50 @@ public void printForSaleResidences(Player player, int page) { } public void clearSales() { + for (ClaimedResidence res : sellAmount) { + if (res == null) + continue; + res.setSellPrice(-1); + } sellAmount.clear(); System.out.println("[Residence] - ReInit land selling."); } public int getSaleAmount(String areaname) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && areaname != null) - areaname = areaname.toLowerCase(); - return sellAmount.get(areaname); + ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + return getSaleAmount(res); } - public Map save() { - return sellAmount; + public int getSaleAmount(ClaimedResidence res) { + if (res == null) + return -1; + return res.getSellPrice(); } - @SuppressWarnings({ "unchecked", "rawtypes" }) - public static TransactionManager load(Map root, PermissionManager p, ResidenceManager r) { - TransactionManager tman = new TransactionManager(r, p); - if (root != null) { - tman.sellAmount = root; + public void load(Map root) { + if (root == null) + return; + + for (Entry one : root.entrySet()) { + ClaimedResidence res = Residence.getResidenceManager().getByName(one.getKey()); + if (res == null) + continue; + res.setSellPrice(one.getValue()); + sellAmount.add(res); } - return tman; } public Map getBuyableResidences() { - return sellAmount; + Map list = new HashMap(); + for (ClaimedResidence res : sellAmount) { + if (res == null) + continue; + list.put(res.getName(), res.getSellPrice()); + } + return list; + } + + public Map save() { + return getBuyableResidences(); } } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index a9a778b77..8a9fada8f 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -15,7 +15,7 @@ import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -23,18 +23,23 @@ import org.bukkit.entity.Player; public class RentManager implements MarketRentInterface { - private Map rentedLand; - private Map rentableLand; + private Set rentedLand; + private Set rentableLand; public RentManager() { - rentedLand = new HashMap<>(); - rentableLand = new HashMap<>(); + rentedLand = new HashSet(); + rentableLand = new HashSet(); } - public RentedLand getRentedLand(String name) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && name != null) - name = name.toLowerCase(); - return rentedLand.containsKey(name) ? rentedLand.get(name) : null; + public RentedLand getRentedLand(String landName) { + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + return getRentedLand(res); + } + + public RentedLand getRentedLand(ClaimedResidence res) { + if (res == null) + return null; + return res.isRented() ? res.getRentedLand() : null; } public List getRentedLands(String playername) { @@ -43,41 +48,45 @@ public List getRentedLands(String playername) { public List getRentedLands(String playername, boolean onlyHidden) { List rentedLands = new ArrayList(); - for (Entry oneland : rentedLand.entrySet()) { - if (!oneland.getValue().player.equals(playername)) + for (ClaimedResidence res : rentedLand) { + if (res == null) continue; - ClaimedResidence res = Residence.getResidenceManager().getByName(oneland.getKey()); - String world = " "; - if (res == null) + if (!res.isRented()) + continue; + + if (!res.getRentedLand().player.equals(playername)) continue; - res = res.getTopParent(); - world = res.getWorld(); + String world = " "; + ClaimedResidence topres = res.getTopParent(); + world = topres.getWorld(); - boolean hidden = res.getPermissions().has("hidden", false); + boolean hidden = topres.getPermissions().has("hidden", false); if (onlyHidden && !hidden) continue; - rentedLands.add(Residence.getLM().getMessage("Residence.List", "", oneland.getKey(), world) + rentedLands.add(Residence.getLM().getMessage("Residence.List", "", res.getName(), world) + Residence.getLM().getMessage("Rent.Rented")); - } return rentedLands; } + public List getRentedLandsList(Player player) { + return getRentedLandsList(player.getName()); + } + public List getRentedLandsList(String playername) { List rentedLands = new ArrayList(); - for (Entry oneland : rentedLand.entrySet()) { - if (!oneland.getValue().player.equals(playername)) + for (ClaimedResidence res : rentedLand) { + if (res == null) continue; - - ClaimedResidence res = Residence.getResidenceManager().getByName(oneland.getKey()); - if (res != null) - res = res.getTopParent(); - - rentedLands.add(oneland.getKey()); + if (!res.isRented()) + continue; + if (!res.getRentedLand().player.equals(playername)) + continue; + rentedLands.add(res.getName()); } return rentedLands; } @@ -91,21 +100,27 @@ public void setForRent(Player player, String landName, int amount, int days, boo } public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean AllowAutoPay, boolean resadmin) { + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + setForRent(player, res, amount, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); + } + + public void setForRent(Player player, ClaimedResidence res, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean AllowAutoPay, + boolean resadmin) { + + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return; + } + if (!Residence.getConfigManager().enabledRentSystem()) { player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); return; } - if (Residence.getTransactionManager().isForSale(landName)) { + + if (res.isForSell()) { player.sendMessage(Residence.getLM().getMessage("Economy.SellRentFail")); return; } - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); - return; - } - - landName = res.getName(); if (!resadmin) { if (!res.getPermissions().hasResidencePermission(player, true)) { @@ -119,9 +134,7 @@ public void setForRent(Player player, String landName, int amount, int days, boo } } - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - if (!rentableLand.containsKey(landName)) { + if (!rentableLand.contains(res)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENTABLE); Residence.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) @@ -132,56 +145,51 @@ public void setForRent(Player player, String landName, int amount, int days, boo newrent.AllowRenewing = AllowRenewing; newrent.StayInMarket = StayInMarket; newrent.AllowAutoPay = AllowAutoPay; - rentableLand.put(landName, newrent); - String[] split = landName.split("\\."); - if (split.length != 0) - player.sendMessage(Residence.getLM().getMessage("Residence.ForRentSuccess", split[split.length - 1], amount, days)); + res.setRentable(newrent); + rentableLand.add(res); + player.sendMessage(Residence.getLM().getMessage("Residence.ForRentSuccess", res.getShortName(), amount, days)); } else { player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyRent")); } } - @SuppressWarnings("deprecation") public void rent(Player player, String landName, boolean AutoPay, boolean resadmin) { + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + rent(player, res, AutoPay, resadmin); + } + + @SuppressWarnings("deprecation") + public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean resadmin) { + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return; + } + if (!Residence.getConfigManager().enabledRentSystem()) { player.sendMessage(Residence.getLM().getMessage("Rent.Disabled")); return; } - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if (res != null) { - if (res.isOwner(player)) { - player.sendMessage(Residence.getLM().getMessage("Economy.OwnerRentFail")); - return; - } - } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + + if (res.isOwner(player)) { + player.sendMessage(Residence.getLM().getMessage("Economy.OwnerRentFail")); return; } - landName = res.getName(); - PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (!resadmin && this.getRentCount(player.getName()) >= group.getMaxRents(player.getName())) { player.sendMessage(Residence.getLM().getMessage("Residence.MaxRent")); return; } - if (!this.isForRent(landName)) { + if (!res.isForRent()) { player.sendMessage(Residence.getLM().getMessage("Residence.NotForRent")); return; } - if (this.isRented(landName)) { - String[] split = landName.split("\\."); - if (split.length != 0) { -// player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyRented", split[split.length - 1], this.getRentingPlayer(landName))); - printRentInfo(player, landName); -// Bukkit.dispatchCommand(player, "res market info " + landName); - } + if (res.isRented()) { + printRentInfo(player, res.getName()); return; } - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - RentableLand land = rentableLand.get(landName); + RentableLand land = res.getRentable(); if (!land.AllowAutoPay && AutoPay) { player.sendMessage(Residence.getLM().getMessage("Residence.CantAutoPay")); @@ -199,7 +207,8 @@ public void rent(Player player, String landName, boolean AutoPay, boolean resadm newrent.startTime = System.currentTimeMillis(); newrent.endTime = System.currentTimeMillis() + daysToMs(land.days); newrent.AutoPay = AutoPay; - rentedLand.put(landName, newrent); + res.setRented(newrent); + rentedLand.add(res); Residence.getSignUtil().CheckSign(res); @@ -209,7 +218,7 @@ public void rent(Player player, String landName, boolean AutoPay, boolean resadm res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); - player.sendMessage(Residence.getLM().getMessage("Residence.RentSuccess", landName, land.days)); + player.sendMessage(Residence.getLM().getMessage("Residence.RentSuccess", res.getName(), land.days)); if (Residence.getSchematicManager() != null && Residence.getConfigManager().RestoreAfterRentEnds && @@ -227,35 +236,32 @@ public void rent(Player player, String landName, boolean AutoPay, boolean resadm } public void payRent(Player player, String landName, boolean resadmin) { - if (!Residence.getConfigManager().enabledRentSystem()) { - player.sendMessage(Residence.getLM().getMessage("Rent.Disabled")); - return; - } ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + payRent(player, res, resadmin); + } + + public void payRent(Player player, ClaimedResidence res, boolean resadmin) { if (res == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } + if (!Residence.getConfigManager().enabledRentSystem()) { + player.sendMessage(Residence.getLM().getMessage("Rent.Disabled")); + return; + } - landName = res.getName(); - - if (!this.isForRent(landName)) { + if (!res.isForRent()) { player.sendMessage(Residence.getLM().getMessage("Residence.NotForRent")); return; } - if (this.isRented(landName) && !this.getRentingPlayer(landName).equals(player.getName()) && !resadmin) { - String[] split = landName.split("\\."); - if (split.length != 0) - player.sendMessage(Residence.getLM().getMessage("Rent.NotByYou")); + if (res.isRented() && !getRentingPlayer(res).equals(player.getName()) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Rent.NotByYou")); return; } - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - - RentableLand land = rentableLand.get(landName); - RentedLand rentedLand = this.getRentedLand(landName); + RentableLand land = res.getRentable(); + RentedLand rentedLand = res.getRentedLand(); if (rentedLand == null) { player.sendMessage(Residence.getLM().getMessage("Residence.NotRented")); @@ -284,9 +290,8 @@ public void payRent(Player player, String landName, boolean resadmin) { Residence.getSignUtil().CheckSign(res); CuboidArea area = res.getAreaArray()[0]; Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); - player.sendMessage(Residence.getLM().getMessage("Rent.Extended", land.days, landName)); + player.sendMessage(Residence.getLM().getMessage("Rent.Extended", land.days, res.getName())); player.sendMessage(Residence.getLM().getMessage("Rent.Expire", GetTime.getTime(rentedLand.endTime))); - } else { player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); } @@ -296,38 +301,47 @@ public void payRent(Player player, String landName, boolean resadmin) { } public void unrent(Player player, String landName, boolean resadmin) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + unrent(player, res, resadmin); + } - RentedLand rent = rentedLand.get(landName); + public void unrent(Player player, ClaimedResidence res, boolean resadmin) { + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return; + } + + RentedLand rent = res.getRentedLand(); if (rent == null) { player.sendMessage(Residence.getLM().getMessage("Residence.NotRented")); return; } + if (resadmin || rent.player.equals(player.getName())) { - ResidenceRentEvent revent = new ResidenceRentEvent(Residence.getResidenceManager().getByName(landName), player, RentEventType.UNRENTABLE); + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENTABLE); Residence.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) return; - rentedLand.remove(landName); - if (!rentableLand.get(landName).AllowRenewing && !rentableLand.get(landName).StayInMarket) { - rentableLand.remove(landName); + rentedLand.remove(res); + res.setRented(null); + if (!res.getRentable().AllowRenewing && !res.getRentable().StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); } - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if (res != null) { - boolean backup = res.getPermissions().has("backup", false); - res.getPermissions().applyDefaultFlags(); + boolean backup = res.getPermissions().has("backup", false); - if (Residence.getSchematicManager() != null && Residence.getConfigManager().RestoreAfterRentEnds && backup) { - Residence.getSchematicManager().load(res); - // set true if its already exists - res.getPermissions().setFlag("backup", FlagState.TRUE); - } - Residence.getSignUtil().CheckSign(res); + res.getPermissions().applyDefaultFlags(); + + if (Residence.getSchematicManager() != null && Residence.getConfigManager().RestoreAfterRentEnds && backup) { + Residence.getSchematicManager().load(res); + // set true if its already exists + res.getPermissions().setFlag("backup", FlagState.TRUE); } - player.sendMessage(Residence.getLM().getMessage("Residence.Unrent", landName)); + Residence.getSignUtil().CheckSign(res); + + player.sendMessage(Residence.getLM().getMessage("Residence.Unrent", res.getName())); } else { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); } @@ -344,218 +358,283 @@ private int msToDays(long ms) { public void removeFromForRent(Player player, String landName, boolean resadmin) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + removeFromForRent(player, res, resadmin); + } + + public void removeFromForRent(Player player, ClaimedResidence res, boolean resadmin) { if (res == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } - landName = res.getName(); - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } - if (rentableLand.containsKey(landName)) { + if (rentableLand.contains(res)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENT); Residence.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) return; - - rentableLand.remove(landName); - if (rentedLand.containsKey(landName)) { - rentedLand.remove(landName); - } - if (res != null) { - res.getPermissions().applyDefaultFlags(); - Residence.getSignUtil().CheckSign(res); - } - player.sendMessage(Residence.getLM().getMessage("Residence.RemoveRentable", landName)); + rentableLand.remove(res); + res.setRentable(null); + res.getPermissions().applyDefaultFlags(); + Residence.getSignUtil().CheckSign(res); + player.sendMessage(Residence.getLM().getMessage("Residence.RemoveRentable", res.getShortName())); } else { player.sendMessage(Residence.getLM().getMessage("Residence.NotForRent")); } } public void removeFromRent(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - rentedLand.remove(landName); + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + removeFromRent(res); + } + + public void removeFromRent(ClaimedResidence res) { + rentedLand.remove(res); } public void removeRentable(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - removeFromRent(landName); - rentableLand.remove(landName); - Residence.getSignUtil().removeSign(landName); + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + removeRentable(res); + } + + public void removeRentable(ClaimedResidence res) { + if (res == null) + return; + removeFromRent(res); + rentableLand.remove(res); + Residence.getSignUtil().removeSign(res.getName()); } public boolean isForRent(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - return rentableLand.containsKey(landName); + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + return isForRent(res); + } + + public boolean isForRent(ClaimedResidence res) { + if (res == null) + return false; + return rentableLand.contains(res); } public RentableLand getRentableLand(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - return rentableLand.get(landName); + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + return getRentableLand(res); + } + + public RentableLand getRentableLand(ClaimedResidence res) { + if (res == null) + return null; + if (res.isForRent()) + return res.getRentable(); + return null; } public boolean isRented(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - return rentedLand.containsKey(landName); + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + return isRented(res); + } + + public boolean isRented(ClaimedResidence res) { + if (res == null) + return false; + return rentedLand.contains(res); } public String getRentingPlayer(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - return rentedLand.containsKey(landName) ? rentedLand.get(landName).player : null; + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + return getRentingPlayer(res); + } + + public String getRentingPlayer(ClaimedResidence res) { + if (res == null) + return null; + return res.isRented() ? res.getRentedLand().player : null; } public int getCostOfRent(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - return rentableLand.containsKey(landName) ? rentableLand.get(landName).cost : 0; + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + return getCostOfRent(res); + } + + public int getCostOfRent(ClaimedResidence res) { + if (res == null) + return 0; + return res.isForRent() ? res.getRentable().cost : 0; } public boolean getRentableRepeatable(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - return rentableLand.containsKey(landName) ? rentableLand.get(landName).AllowRenewing : false; + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + return getRentableRepeatable(res); + } + + public boolean getRentableRepeatable(ClaimedResidence res) { + if (res == null) + return false; + return res.isForRent() ? res.getRentable().AllowRenewing : false; } public boolean getRentedAutoRepeats(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - return getRentableRepeatable(landName) ? (rentedLand.containsKey(landName) ? rentedLand.get(landName).AutoPay : false) : false; + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + return getRentedAutoRepeats(res); + } + + public boolean getRentedAutoRepeats(ClaimedResidence res) { + if (res == null) + return false; + return getRentableRepeatable(res) ? (rentedLand.contains(res) ? res.getRentedLand().AutoPay : false) : false; } public int getRentDays(String landName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - return rentableLand.containsKey(landName) ? rentableLand.get(landName).days : 0; + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + return getRentDays(res); + } + + public int getRentDays(ClaimedResidence res) { + if (res == null) + return 0; + return res.isForRent() ? res.getRentable().days : 0; } public void checkCurrentRents() { - Iterator> it = rentedLand.entrySet().iterator(); - while (it.hasNext()) { - Entry next = it.next(); - RentedLand land = next.getValue(); + for (ClaimedResidence res : rentedLand) { + + if (res == null) + continue; + + RentedLand land = res.getRentedLand(); + if (land == null) + continue; + if (land.endTime > System.currentTimeMillis()) continue; - ClaimedResidence res = Residence.getResidenceManager().getByName(next.getKey()); if (Residence.getConfigManager().debugEnabled()) - System.out.println("Rent Check: " + next.getKey()); - if (res != null) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); - Residence.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - continue; - - RentableLand rentable = rentableLand.get(next.getKey()); - if (!rentable.AllowRenewing) { - if (!rentable.StayInMarket) - rentableLand.remove(next.getKey()); - it.remove(); - res.getPermissions().applyDefaultFlags(); - Residence.getSignUtil().CheckSign(res); - continue; + System.out.println("Rent Check: " + res.getName()); + + ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); + Residence.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + continue; + + RentableLand rentable = res.getRentable(); + if (!rentable.AllowRenewing) { + if (!rentable.StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); } - if (land.AutoPay && rentable.AllowAutoPay) { - if (!Residence.getEconomyManager().canAfford(land.player, rentable.cost)) { - if (!rentable.StayInMarket) - rentableLand.remove(next.getKey()); - it.remove(); + rentedLand.remove(res); + res.setRented(null); + res.getPermissions().applyDefaultFlags(); + Residence.getSignUtil().CheckSign(res); + continue; + } + if (land.AutoPay && rentable.AllowAutoPay) { + if (!Residence.getEconomyManager().canAfford(land.player, rentable.cost)) { + if (!rentable.StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + rentedLand.remove(res); + res.setRented(null); + res.getPermissions().applyDefaultFlags(); + } else { + if (!Residence.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { + if (!rentable.StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + rentedLand.remove(res); + res.setRented(null); res.getPermissions().applyDefaultFlags(); } else { - if (!Residence.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { - if (!rentable.StayInMarket) - rentableLand.remove(next.getKey()); - it.remove(); - res.getPermissions().applyDefaultFlags(); - } else { - land.endTime = System.currentTimeMillis() + this.daysToMs(rentable.days); - } + land.endTime = System.currentTimeMillis() + this.daysToMs(rentable.days); } - - Residence.getSignUtil().CheckSign(res); - continue; } - if (!rentable.StayInMarket) - rentableLand.remove(next.getKey()); - it.remove(); - boolean backup = res.getPermissions().has("backup", false); + Residence.getSignUtil().CheckSign(res); + continue; + } + if (!rentable.StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + rentedLand.remove(res); + res.setRented(null); - res.getPermissions().applyDefaultFlags(); + boolean backup = res.getPermissions().has("backup", false); - if (Residence.getSchematicManager() != null && Residence.getConfigManager().RestoreAfterRentEnds && backup) { - Residence.getSchematicManager().load(res); - Residence.getSignUtil().CheckSign(res); - // set true if its already exists - res.getPermissions().setFlag("backup", FlagState.TRUE); - // To avoid lag spikes on multiple residence restores at once, will limit to one residence at time - break; - } + res.getPermissions().applyDefaultFlags(); + + if (Residence.getSchematicManager() != null && Residence.getConfigManager().RestoreAfterRentEnds && backup) { + Residence.getSchematicManager().load(res); Residence.getSignUtil().CheckSign(res); - } else { - rentableLand.remove(next.getKey()); - it.remove(); + // set true if its already exists + res.getPermissions().setFlag("backup", FlagState.TRUE); + // To avoid lag spikes on multiple residence restores at once, will limit to one residence at time + break; } + Residence.getSignUtil().CheckSign(res); } } public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin) { - - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); - String[] split = landName.split("\\."); - RentableLand land = rentableLand.get(landName); ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + setRentRepeatable(player, res, value, resadmin); + } + + public void setRentRepeatable(Player player, ClaimedResidence res, boolean value, boolean resadmin) { if (res == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } + RentableLand land = res.getRentable(); + if (!res.isOwner(player) && !resadmin) { player.sendMessage(Residence.getLM().getMessage("Residence.NotOwner")); return; } - if (land != null && res != null && (res.isOwner(player) || resadmin)) { + if (land == null || res == null || !res.isOwner(player) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotOwner")); + return; + } + + land.AllowRenewing = value; + if (!value && this.isRented(res)) + res.getRentedLand().AutoPay = false; - landName = res.getName(); + if (value) + player.sendMessage(Residence.getLM().getMessage("Rentable.EnableRenew", res.getShortName())); + else + player.sendMessage(Residence.getLM().getMessage("Rentable.DisableRenew", res.getShortName())); - land.AllowRenewing = value; - if (!value && this.isRented(landName)) - rentedLand.get(landName).AutoPay = false; - if (value && split.length != 0) - player.sendMessage(Residence.getLM().getMessage("Rentable.EnableRenew", split[split.length - 1])); - else if (split.length != 0) - player.sendMessage(Residence.getLM().getMessage("Rentable.DisableRenew", split[split.length - 1])); - } } public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin) { + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + setRentedRepeatable(player, res, value, resadmin); + } - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); + public void setRentedRepeatable(Player player, ClaimedResidence res, boolean value, boolean resadmin) { + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return; + } - String[] split = landName.split("\\."); - RentedLand land = rentedLand.get(landName); + RentedLand land = res.getRentedLand(); if (land == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; } - if (!this.getRentableLand(landName).AllowAutoPay && value) { + if (!res.getRentable().AllowAutoPay && value) { player.sendMessage(Residence.getLM().getMessage("Residence.CantAutoPay")); return; } @@ -565,29 +644,38 @@ public void setRentedRepeatable(Player player, String landName, boolean value, b return; } - if (land != null && (land.player.equals(player.getName()) || resadmin)) { - land.AutoPay = value; - if (value && split.length != 0) - player.sendMessage(Residence.getLM().getMessage("Rent.EnableRenew", split[split.length - 1])); - else if (split.length != 0) - player.sendMessage(Residence.getLM().getMessage("Rent.DisableRenew", split[split.length - 1])); - - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if (res != null) - Residence.getSignUtil().CheckSign(res); + if (!land.player.equals(player.getName()) && !resadmin) { + player.sendMessage(Residence.getLM().getMessage("Residence.NotOwner")); + return; } + + land.AutoPay = value; + if (value) + player.sendMessage(Residence.getLM().getMessage("Rent.EnableRenew", res.getShortName())); + else + player.sendMessage(Residence.getLM().getMessage("Rent.DisableRenew", res.getShortName())); + + if (res != null) + Residence.getSignUtil().CheckSign(res); } public void printRentInfo(Player player, String landName) { + ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + printRentInfo(player, res); + } - if (!Residence.getConfigManager().isResCreateCaseSensitive() && landName != null) - landName = landName.toLowerCase(); + public void printRentInfo(Player player, ClaimedResidence res) { - RentableLand rentable = rentableLand.get(landName); - RentedLand rented = rentedLand.get(landName); + if (res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return; + } + + RentableLand rentable = res.getRentable(); + RentedLand rented = res.getRentedLand(); if (rentable != null) { player.sendMessage(Residence.getLM().getMessage("General.Separator")); - player.sendMessage(Residence.getLM().getMessage("General.Land", landName)); + player.sendMessage(Residence.getLM().getMessage("General.Land", res.getName())); player.sendMessage(Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days)); player.sendMessage(Residence.getLM().getMessage("Rentable.AllowRenewing", rentable.AllowRenewing)); player.sendMessage(Residence.getLM().getMessage("Rentable.StayInMarket", rentable.StayInMarket)); @@ -595,12 +683,9 @@ public void printRentInfo(Player player, String landName) { if (rented != null) { player.sendMessage(Residence.getLM().getMessage("Residence.RentedBy", rented.player)); - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); - if (rented.player.equals(player.getName()) || res != null && res.isOwner(player) || Residence.isResAdminOn(player)) player.sendMessage((rented.AutoPay ? Residence.getLM().getMessage("Rent.AutoPayTurnedOn") : Residence.getLM().getMessage("Rent.AutoPayTurnedOff")) + "\n"); - player.sendMessage(Residence.getLM().getMessage("Rent.Expire", GetTime.getTime(rented.endTime))); } else { player.sendMessage(Residence.getLM().getMessage("General.Status", Residence.getLM().getMessage("General.Available"))); @@ -613,117 +698,23 @@ public void printRentInfo(Player player, String landName) { } } - @SuppressWarnings("unchecked") - public static RentManager load(Map root) { - RentManager rentManager = new RentManager(); - if (root != null) { - Map rentables = (Map) root.get("Rentables"); - for (Entry rent : rentables.entrySet()) { - rentManager.rentableLand.put(rent.getKey(), RentableLand.load((Map) rent.getValue())); - } - Map rented = (Map) root.get("Rented"); - for (Entry rent : rented.entrySet()) { - rentManager.rentedLand.put(rent.getKey(), RentedLand.load((Map) rent.getValue())); - } - } - return rentManager; - } - - public Map save() { - Map root = new HashMap(); - Map rentables = new HashMap(); - for (Entry rent : rentableLand.entrySet()) { - rentables.put(rent.getKey(), rent.getValue().save()); - } - Map rented = new HashMap(); - for (Entry rent : rentedLand.entrySet()) { - rented.put(rent.getKey(), rent.getValue().save()); - } - root.put("Rentables", rentables); - root.put("Rented", rented); - return root; - } - - public void updateRentableName(String oldName, String newName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && oldName != null && newName != null) { - oldName = oldName.toLowerCase(); - newName = newName.toLowerCase(); - } - HashMap toAddRentable = new HashMap(); - for (Iterator> it = rentableLand.entrySet().iterator(); it.hasNext();) { - Entry entry = it.next(); - String n = entry.getKey(); - if (!Residence.getConfigManager().isResCreateCaseSensitive()) - n = n.toLowerCase(); - - if (n.contains(".") && n.startsWith(oldName + ".") || n.equals(oldName)) { - RentableLand land = new RentableLand(); - land.AllowAutoPay = entry.getValue().AllowAutoPay; - land.AllowRenewing = entry.getValue().AllowRenewing; - land.cost = entry.getValue().cost; - land.days = entry.getValue().days; - land.StayInMarket = entry.getValue().StayInMarket; - - String[] split = n.split(oldName); - String subname = ""; - if (split.length > 1) - subname = n.split(oldName)[1]; - String name = newName + subname; -// rentableLand.remove(entry); - toAddRentable.put(name, land); - - it.remove(); - } - } - rentableLand.putAll(toAddRentable); - - HashMap toAddRented = new HashMap(); - for (Iterator> it = rentedLand.entrySet().iterator(); it.hasNext();) { - Entry entry = it.next(); - String n = entry.getKey(); - if (!Residence.getConfigManager().isResCreateCaseSensitive()) - n = n.toLowerCase(); - if (n.contains(".") && n.startsWith(oldName + ".") || n.equals(oldName)) { - RentedLand rented = entry.getValue(); - String[] split = n.split(oldName); - String subname = ""; - if (split.length > 1) - subname = n.split(oldName)[1]; - String name = newName + subname; -// rentedLand.remove(entry); -// rentedLand.put(name, rented); - toAddRented.put(name, rented); - it.remove(); - } - } - rentedLand.putAll(toAddRented); - -// if (rentableLand.containsKey(oldName)) { -// rentableLand.put(newName, rentableLand.get(oldName)); -// rentableLand.remove(oldName); -// } -// if (rentedLand.containsKey(oldName)) { -// rentedLand.put(newName, rentedLand.get(oldName)); -// rentedLand.remove(oldName); -// } - } - public void printRentableResidences(Player player, int page) { - Set> set = rentableLand.entrySet(); player.sendMessage(Residence.getLM().getMessage("Rentable.Land")); StringBuilder sbuild = new StringBuilder(); sbuild.append(ChatColor.GREEN); int perpage = 10; - int pagecount = (int) Math.ceil((double) set.size() / (double) perpage); + int pagecount = (int) Math.ceil((double) rentableLand.size() / (double) perpage); if (page < 1) page = 1; int z = 0; - for (Entry land : set) { + for (ClaimedResidence res : rentableLand) { + if (res == null) + continue; z++; if (z <= (page - 1) * perpage) @@ -731,26 +722,21 @@ public void printRentableResidences(Player player, int page) { if (z > (page - 1) * perpage + perpage) break; - boolean rented = isRented(land.getKey()); + boolean rented = res.isRented(); - if (!land.getValue().AllowRenewing && rented) + if (!res.getRentable().AllowRenewing && rented) continue; - ClaimedResidence res = Residence.getResidenceManager().getByName(land.getKey()); - String rentedBy = ""; - String hover = ""; if (rented) { - RentedLand rent = rentedLand.get(land.getKey()); + RentedLand rent = res.getRentedLand(); rentedBy = Residence.getLM().getMessage("Residence.RentedBy", rent.player); hover = GetTime.getTime(rent.endTime); } - if (res == null) - continue; - String msg = Residence.getLM().getMessage("Rent.RentList", z, land.getKey(), land.getValue().cost, land.getValue().days, land - .getValue().AllowRenewing, res.getOwner(), rentedBy); + String msg = Residence.getLM().getMessage("Rent.RentList", z, res.getName(), res.getRentable().cost, res.getRentable().days, res.getRentable().AllowRenewing, + res.getOwner(), rentedBy); if (!hover.equalsIgnoreCase("")) Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " {\"text\":\"\",\"extra\":[{\"text\":\"" + msg @@ -787,20 +773,17 @@ public void printRentableResidences(Player player, int page) { } public int getRentCount(String player) { - Set> set = rentedLand.entrySet(); int count = 0; - for (Entry land : set) { - if (land.getValue().player.equalsIgnoreCase(player)) + for (ClaimedResidence res : rentedLand) { + if (res.getRentedLand().player.equalsIgnoreCase(player)) count++; } return count; } public int getRentableCount(String player) { - Set set = rentableLand.keySet(); int count = 0; - for (String land : set) { - ClaimedResidence res = Residence.getResidenceManager().getByName(land); + for (ClaimedResidence res : rentableLand) { if (res != null) if (res.isOwner(player)) count++; @@ -808,11 +791,78 @@ public int getRentableCount(String player) { return count; } - public Map getRentableResidences() { + public Set getRentableResidences() { return rentableLand; } - public Map getCurrentlyRentedResidences() { - return rentableLand; + public Set getCurrentlyRentedResidences() { + return rentedLand; + } + + @SuppressWarnings("unchecked") + public void load(Map root) { + if (root == null) + return; + this.rentableLand.clear(); + + Map rentables = (Map) root.get("Rentables"); + for (Entry rent : rentables.entrySet()) { + RentableLand one = loadRentable((Map) rent.getValue()); + ClaimedResidence res = Residence.getResidenceManager().getByName(rent.getKey()); + if (res != null) { + res.setRentable(one); + this.rentableLand.add(res); + } + } + Map rented = (Map) root.get("Rented"); + for (Entry rent : rented.entrySet()) { + RentedLand one = loadRented((Map) rent.getValue()); + ClaimedResidence res = Residence.getResidenceManager().getByName(rent.getKey()); + if (res != null) { + res.setRented(one); + this.rentedLand.add(res); + } + } + } + + public Map save() { + Map root = new HashMap(); + Map rentables = new HashMap(); + for (ClaimedResidence res : rentableLand) { + if (res == null || res.getRentable() == null) + continue; + rentables.put(res.getName(), res.getRentable().save()); + } + Map rented = new HashMap(); + for (ClaimedResidence res : rentedLand) { + if (res == null || res.getRentedLand() == null) + continue; + rented.put(res.getName(), res.getRentedLand().save()); + } + root.put("Rentables", rentables); + root.put("Rented", rented); + return root; + } + + private RentableLand loadRentable(Map map) { + RentableLand newland = new RentableLand(); + newland.cost = (Integer) map.get("Cost"); + newland.days = (Integer) map.get("Days"); + newland.AllowRenewing = (Boolean) map.get("Repeatable"); + if (map.containsKey("StayInMarket")) + newland.StayInMarket = (Boolean) map.get("StayInMarket"); + if (map.containsKey("AllowAutoPay")) + newland.AllowAutoPay = (Boolean) map.get("AllowAutoPay"); + return newland; } + + private RentedLand loadRented(Map map) { + RentedLand newland = new RentedLand(); + newland.player = (String) map.get("Player"); + newland.startTime = (Long) map.get("StartTime"); + newland.endTime = (Long) map.get("EndTime"); + newland.AutoPay = (Boolean) map.get("AutoRefresh"); + return newland; + } + } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java b/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java index dd79e623a..ce25bb519 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java @@ -7,12 +7,15 @@ public class RentableLand { - public int days; - public int cost; + public int days = 0; + public int cost = Integer.MAX_VALUE; public boolean AllowRenewing = Residence.getConfigManager().isRentAllowRenewing(); public boolean StayInMarket = Residence.getConfigManager().isRentStayInMarket(); public boolean AllowAutoPay = Residence.getConfigManager().isRentAllowAutoPay(); + public RentableLand() { + } + public Map save() { Map rented = new HashMap<>(); rented.put("Days", days); @@ -22,16 +25,4 @@ public Map save() { rented.put("AllowAutoPay", AllowAutoPay); return rented; } - - public static RentableLand load(Map map) { - RentableLand newland = new RentableLand(); - newland.cost = (Integer) map.get("Cost"); - newland.days = (Integer) map.get("Days"); - newland.AllowRenewing = (Boolean) map.get("Repeatable"); - if (map.containsKey("StayInMarket")) - newland.StayInMarket = (Boolean) map.get("StayInMarket"); - if (map.containsKey("AllowAutoPay")) - newland.AllowAutoPay = (Boolean) map.get("AllowAutoPay"); - return newland; - } } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentedLand.java b/src/com/bekvon/bukkit/residence/economy/rent/RentedLand.java index 04002030c..32b3bae7b 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentedLand.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentedLand.java @@ -5,7 +5,7 @@ public class RentedLand { - public String player; + public String player = ""; public long startTime = 0L; public long endTime = 0L; public boolean AutoPay = true; @@ -18,13 +18,4 @@ public Map save() { rentables.put("AutoRefresh", AutoPay); return rentables; } - - public static RentedLand load(Map map) { - RentedLand newland = new RentedLand(); - newland.player = (String) map.get("Player"); - newland.startTime = (Long) map.get("StartTime"); - newland.endTime = (Long) map.get("EndTime"); - newland.AutoPay = (Boolean) map.get("AutoRefresh"); - return newland; - } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index e58cc079c..013348ed8 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -425,11 +425,11 @@ public void onSignInteract(PlayerInteractEvent event) { if (one.GetLocation().getBlockZ() != loc.getBlockZ()) continue; - String landName = one.GetResidence(); - - boolean ForSale = Residence.getTransactionManager().isForSale(landName); - boolean ForRent = Residence.getRentManager().isForRent(landName); + ClaimedResidence res = one.GetResidence(); + boolean ForSale = res.isForSell(); + boolean ForRent = res.isForRent(); + String landName = res.getName(); if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (ForSale) { Bukkit.dispatchCommand(player, "res market buy " + landName); @@ -437,7 +437,7 @@ public void onSignInteract(PlayerInteractEvent event) { } if (ForRent) { - if (Residence.getRentManager().isRented(landName) && player.isSneaking()) + if (res.isRented() && player.isSneaking()) Bukkit.dispatchCommand(player, "res market release " + landName); else { boolean stage = true; @@ -448,8 +448,8 @@ public void onSignInteract(PlayerInteractEvent event) { break; } } else if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - if (ForRent && Residence.getRentManager().isRented(landName) && Residence.getRentManager().getRentingPlayer(landName).equals(player.getName())) { - Residence.getRentManager().payRent(player, landName, false); + if (ForRent && res.isRented() && Residence.getRentManager().getRentingPlayer(res).equals(player.getName())) { + Residence.getRentManager().payRent(player, res, false); } } } @@ -498,8 +498,13 @@ public void onSignCreate(SignChangeEvent event) { res = Residence.getResidenceManager().getByLoc(loc); landName = Residence.getResidenceManager().getNameByLoc(loc); } + + if (res == null) { + event.getPlayer().sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return; + } - final ClaimedResidence residence = res; + ClaimedResidence residence = res; boolean ForSale = Residence.getTransactionManager().isForSale(landName); boolean ForRent = Residence.getRentManager().isForRent(landName); @@ -510,7 +515,7 @@ public void onSignCreate(SignChangeEvent event) { if (ForSale || ForRent) { signInfo.setCategory(category); - signInfo.setResidence(landName); + signInfo.setResidence(res); signInfo.setLocation(loc); // signInfo.updateLocation(); Residence.getSignUtil().getSigns().addSign(signInfo); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 6d168a959..3b0a66daf 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -9,6 +9,8 @@ import com.bekvon.bukkit.residence.containers.RandomLoc; import com.bekvon.bukkit.residence.economy.ResidenceBank; import com.bekvon.bukkit.residence.economy.TransactionManager; +import com.bekvon.bukkit.residence.economy.rent.RentableLand; +import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; import com.bekvon.bukkit.residence.event.ResidenceAreaDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; @@ -42,6 +44,7 @@ public class ClaimedResidence { + private String resName; protected ClaimedResidence parent; protected Map areas; protected Map subzones; @@ -61,9 +64,75 @@ public class ClaimedResidence { protected List cmdWhiteList = new ArrayList(); protected List cmdBlackList = new ArrayList(); + protected RentableLand rentableland = null; + protected RentedLand rentedland = null; + + protected Integer sellPrice = -1; + private Residence plugin; - private ClaimedResidence(Residence plugin) { + public String getResidenceName() { + return resName; + } + + public void setName(String name) { + if (name.contains(".")) + resName = name.split("\\.")[name.split("\\.").length - 1]; + else + resName = name; + } + + public Integer getSellPrice() { + return sellPrice; + } + + public void setSellPrice(Integer amount) { + sellPrice = amount; + } + + public boolean isForSell() { + return Residence.getTransactionManager().isForSale(this.getName()); + } + + public boolean isForRent() { + return Residence.getRentManager().isForRent(this); + } + + public boolean isRented() { + return Residence.getRentManager().isRented(this); + } + + public void setRentable(RentableLand rl) { + this.rentableland = rl; + } + + public RentableLand getRentable() { + return this.rentableland; + } + + public void setRented(RentedLand rl) { + this.rentedland = rl; + } + + public RentedLand getRentedLand() { + return this.rentedland; + } + + public ClaimedResidence(String creationWorld, Residence plugin) { + this(Residence.getServerLandname(), creationWorld, plugin); + } + + public ClaimedResidence(String creator, String creationWorld, Residence plugin) { + this(plugin); + perms = new ResidencePermissions(this, creator, creationWorld); + } + + public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence, Residence plugin) { + this(creator, creationWorld, plugin); + parent = parentResidence; + } + + public ClaimedResidence(Residence plugin) { subzones = new HashMap<>(); areas = new HashMap<>(); bank = new ResidenceBank(this); @@ -96,20 +165,6 @@ public int getSubzoneDeep(int deep) { return deep; } - public ClaimedResidence(String creationWorld, Residence plugin) { - this(Residence.getServerLandname(), creationWorld, plugin); - } - - public ClaimedResidence(String creator, String creationWorld, Residence plugin) { - this(plugin); - perms = new ResidencePermissions(this, creator, creationWorld); - } - - public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence, Residence plugin) { - this(creator, creationWorld, plugin); - parent = parentResidence; - } - public static boolean CheckAreaSize(Player player, CuboidArea area, boolean resadmin) { if (!resadmin && area.getSize() < Residence.getConfigManager().getMinimalResSize()) { if (player != null) { @@ -154,7 +209,12 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } return false; } - if (areas.containsKey(name)) { + + String NName = name; + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + name = name.toLowerCase(); + + if (areas.containsKey(NName)) { if (player != null) { player.sendMessage(Residence.getLM().getMessage("Area.Exists")); } @@ -247,7 +307,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa player.sendMessage(Residence.getLM().getMessage("Area.HighLimit", String.format("%d", group.getMaxHeight()))); return false; } - if (chargeMoney && parent == null && Residence.getConfigManager().enableEconomy()) { + if (chargeMoney && parent == null && Residence.getConfigManager().enableEconomy() && !resadmin) { int chargeamount = (int) Math.ceil((double) area.getSize() * group.getCostPerBlock()); if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) { return false; @@ -255,7 +315,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } } - ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, name, this, area); + ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, NName, this, area); Residence.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return false; @@ -364,7 +424,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole player.sendMessage(Residence.getLM().getMessage("Area.HighLimit", String.format("%d", group.getMaxHeight()))); return false; } - if (parent == null && Residence.getConfigManager().enableEconomy()) { + if (parent == null && Residence.getConfigManager().enableEconomy() && !resadmin) { int chargeamount = (int) Math.ceil((double) (newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); if (chargeamount > 0) { if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) { @@ -413,9 +473,14 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l } return false; } + + String NName = name; + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + name = name.toLowerCase(); + if (subzones.containsKey(name)) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Subzone.Exists", name)); + player.sendMessage(Residence.getLM().getMessage("Subzone.Exists", NName)); } return false; } @@ -454,10 +519,10 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l ClaimedResidence newres; if (player != null) { newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); - newres.addArea(player, newArea, name, resadmin); + newres.addArea(player, newArea, NName, resadmin); } else { newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); - newres.addArea(newArea, name); + newres.addArea(newArea, NName); } if (newres.getAreaCount() != 0) { @@ -471,6 +536,8 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l newres.getPermissions().setParent(perms); } + newres.resName = name; + ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, name, newres, newArea); Residence.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) @@ -522,7 +589,6 @@ public ClaimedResidence getSubzoneByLoc(Location loc) { } if (res == null) return null; - ClaimedResidence subrez = res.getSubzoneByLoc(loc); if (subrez == null) { return res; @@ -531,6 +597,9 @@ public ClaimedResidence getSubzoneByLoc(Location loc) { } public ClaimedResidence getSubzone(String subzonename) { + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + subzonename = subzonename.toLowerCase(); + if (!subzonename.contains(".")) { return subzones.get(subzonename); } @@ -545,39 +614,15 @@ public ClaimedResidence getSubzone(String subzonename) { return get; } - public ClaimedResidence getSubzoneNoCase(String subzonename) { - if (!subzonename.contains(".")) { - for (Entry one : subzones.entrySet()) { - if (one.getKey().equalsIgnoreCase(subzonename)) - return one.getValue(); - } - } - String split[] = subzonename.split("\\."); - - ClaimedResidence get = null; - for (Entry one : subzones.entrySet()) { - if (one.getKey().equalsIgnoreCase(split[0])) - get = one.getValue(); - } - - for (int i = 1; i < split.length; i++) { - if (get == null) { - return null; - } - get = get.getSubzoneNoCase(split[i]); - } - return get; - } - public String getSubzoneNameByRes(ClaimedResidence res) { Set> set = subzones.entrySet(); for (Entry entry : set) { if (entry.getValue() == res) { - return entry.getKey(); + return entry.getValue().getResidenceName(); } String n = entry.getValue().getSubzoneNameByRes(res); if (n != null) { - return entry.getKey() + "." + n; + return entry.getValue().getResidenceName() + "." + n; } } return null; @@ -638,6 +683,8 @@ public boolean removeSubzone(String name) { } public boolean removeSubzone(Player player, String name, boolean resadmin) { + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + name = name.toLowerCase(); ClaimedResidence res = subzones.get(name); if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); @@ -1109,6 +1156,8 @@ public void removeArea(Player player, String id, boolean resadmin) { public Map save() { Map root = new HashMap<>(); Map areamap = new HashMap<>(); + + root.put("CapitalizedName", resName); if (mainRes) root.put("MainResidence", mainRes); root.put("EnterMessage", enterMessage); @@ -1172,6 +1221,9 @@ public static ClaimedResidence load(Map root, ClaimedResidence p if (root == null) throw new Exception("Null residence!"); + if (root.containsKey("CapitalizedName")) + res.resName = ((String) root.get("CapitalizedName")); + res.enterMessage = (String) root.get("EnterMessage"); res.leaveMessage = (String) root.get("LeaveMessage"); @@ -1209,9 +1261,17 @@ public static ClaimedResidence load(Map root, ClaimedResidence p Map subzonemap = (Map) root.get("Subzones"); for (Entry map : subzonemap.entrySet()) { ClaimedResidence subres = ClaimedResidence.load((Map) map.getValue(), res, plugin); + + if (subres.getResidenceName() == null) + subres.setName(map.getKey()); + if (Residence.getConfigManager().flagsInherit()) subres.getPermissions().setParent(res.getPermissions()); - res.subzones.put(map.getKey(), subres); + + if (Residence.getConfigManager().isResCreateCaseSensitive()) + res.subzones.put(map.getKey(), subres); + else + res.subzones.put(map.getKey().toLowerCase(), subres); } res.parent = parent; @@ -1262,6 +1322,13 @@ public boolean renameSubzone(Player player, String oldName, String newName, bool player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); return false; } + + String newN = newName; + if (!Residence.getConfigManager().isResCreateCaseSensitive()) { + oldName = oldName.toLowerCase(); + newName = newName.toLowerCase(); + } + ClaimedResidence res = subzones.get(oldName); if (res == null) { if (player != null) @@ -1277,6 +1344,7 @@ public boolean renameSubzone(Player player, String oldName, String newName, bool player.sendMessage(Residence.getLM().getMessage("Subzone.Exists", newName)); return false; } + res.setName(newN); subzones.put(newName, res); subzones.remove(oldName); if (player != null) @@ -1324,6 +1392,15 @@ public String getName() { return Residence.getResidenceManager().getNameByRes(this); } + public String getShortName() { + String name = Residence.getResidenceManager().getNameByRes(this); + if (name.contains(".")) { + String[] split = name.split("\\."); + name = split[split.length - 1]; + } + return name; + } + public void remove() { String name = getName(); if (name != null) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 563a5b110..f9288a015 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -66,6 +66,8 @@ public ClaimedResidence getByLoc(Location loc) { if (ChunkMap.containsKey(chunk)) { for (String key : ChunkMap.get(chunk)) { ClaimedResidence entry = residences.get(key); + if (entry == null) + continue; if (entry.containsLoc(loc)) { res = entry; break; @@ -107,20 +109,12 @@ public ClaimedResidence getByName(String name, boolean tp) { return res; } else { if (split.length == 1) { - for (Entry one : residences.entrySet()) { - if (one.getKey().equalsIgnoreCase(name)) - return one.getValue(); - } - } - ClaimedResidence res = null; - for (Entry one : residences.entrySet()) { - if (one.getKey().equalsIgnoreCase(split[0])) - res = one.getValue(); + return residences.get(name.toLowerCase()); } - + ClaimedResidence res = residences.get(split[0].toLowerCase()); for (int i = 1; i < split.length; i++) { if (res != null) { - res = res.getSubzoneNoCase(split[i]); + res = res.getSubzone(split[i].toLowerCase()); } else { return null; } @@ -146,11 +140,11 @@ public String getNameByRes(ClaimedResidence res) { Set> set = residences.entrySet(); for (Entry check : set) { if (check.getValue() == res) { - return check.getKey(); + return check.getValue().getResidenceName(); } String n = check.getValue().getSubzoneNameByRes(res); if (n != null) { - return check.getKey() + "." + n; + return check.getValue().getResidenceName() + "." + n; } } return null; @@ -230,6 +224,7 @@ public boolean addResidence(Player player, String owner, String name, Location l newRes.getPermissions().applyDefaultFlags(); newRes.setEnterMessage(group.getDefaultEnterMessage()); newRes.setLeaveMessage(group.getDefaultLeaveMessage()); + newRes.setName(name); if (Residence.getConfigManager().isResCreateCaseSensitive()) { if (residences.containsKey(name)) { @@ -239,13 +234,11 @@ public boolean addResidence(Player player, String owner, String name, Location l return false; } } else { - for (Entry one : residences.entrySet()) { - if (one.getKey().equalsIgnoreCase(name)) { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", one.getKey())); - } - return false; + if (residences.containsKey(name.toLowerCase())) { + if (player != null) { + player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", name)); } + return false; } } @@ -259,13 +252,17 @@ public boolean addResidence(Player player, String owner, String name, Location l if (resevent.isCancelled()) return false; - if (!newRes.isSubzone() && Residence.getConfigManager().enableEconomy()) { + if (!newRes.isSubzone() && Residence.getConfigManager().enableEconomy() && !resadmin) { int chargeamount = (int) Math.ceil((double) newArea.getSize() * group.getCostPerBlock()); if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) return false; } - residences.put(name, newRes); + if (Residence.getConfigManager().isResCreateCaseSensitive()) + residences.put(name, newRes); + else + residences.put(name.toLowerCase(), newRes); + calculateChunks(name); Residence.getLeaseManager().removeExpireTime(name); Residence.getPlayerManager().addResidence(newRes.getOwner(), newRes); @@ -727,13 +724,14 @@ public Map save() { for (World world : Residence.getServ().getWorlds()) { Map resmap = new LinkedHashMap<>(); for (Entry res : residences.entrySet()) { - if (res.getValue().getWorld().equals(world.getName())) { - try { - resmap.put(res.getKey(), res.getValue().save()); - } catch (Exception ex) { - System.out.println("[Residence] Failed to save residence (" + res.getKey() + ")!"); - Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); - } + if (!res.getValue().getWorld().equals(world.getName())) + continue; + + try { + resmap.put(res.getValue().getShortName(), res.getValue().save()); + } catch (Exception ex) { + System.out.println("[Residence] Failed to save residence (" + res.getKey() + ")!"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); } } worldmap.put(world.getName(), resmap); @@ -794,17 +792,25 @@ public Map> loadMap(String worldName, Map if (residence.getOwner().equalsIgnoreCase("Server land")) { residence.getPermissions().setOwner(Residence.getServerLandname(), false); } + String resName = res.getKey(); + + if (residence.getResidenceName() == null) + residence.setName(res.getKey()); + + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + resName = resName.toLowerCase(); for (ChunkRef chunk : getChunks(residence)) { List ress = new ArrayList<>(); if (retRes.containsKey(chunk)) { ress.addAll(retRes.get(chunk)); } - ress.add(res.getKey()); + ress.add(resName); retRes.put(chunk, ress); } - resm.residences.put(res.getKey(), residence); + resm.residences.put(resName, residence); + } catch (Exception ex) { System.out.print("[Residence] Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:"); Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); @@ -859,34 +865,33 @@ public boolean renameResidence(Player player, String oldName, String newName, bo return false; } } else { - for (Entry one : residences.entrySet()) { - if (one.getKey().equalsIgnoreCase(newName)) { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", one.getKey())); - } - return false; + if (residences.containsKey(newName.toLowerCase())) { + if (player != null) { + player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", newName)); } + return false; } } + ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); Residence.getServ().getPluginManager().callEvent(resevent); removeChunkList(oldName); - residences.put(newName, res); + res.setName(newName); + if (Residence.getConfigManager().isResCreateCaseSensitive()) + residences.put(newName, res); + else + residences.put(newName.toLowerCase(), res); + residences.remove(oldName); - Residence.getPlayerManager().renameResidence(player.getName(), oldName, newName); + Residence.getPlayerManager().renameResidence(player.getName(), res.getName(), newName); calculateChunks(newName); if (Residence.getConfigManager().useLeases()) { Residence.getLeaseManager().updateLeaseName(oldName, newName); } - if (Residence.getConfigManager().enabledRentSystem()) { - Residence.getRentManager().updateRentableName(oldName, newName); - } - Residence.getTransactionManager().updateSellName(oldName, newName); - - Residence.getSignUtil().updateSignResName(oldName, newName); + Residence.getSignUtil().updateSignResName(res); if (player != null) { player.sendMessage(Residence.getLM().getMessage("Residence.Rename", oldName, newName)); @@ -897,14 +902,9 @@ public boolean renameResidence(Player player, String oldName, String newName, bo String[] oldname = oldName.split("\\."); ClaimedResidence parent = res.getParent(); - if (Residence.getConfigManager().enabledRentSystem()) { - Residence.getRentManager().updateRentableName(oldName, parent.getName() + "." + newName); - } - - Residence.getTransactionManager().updateSellName(oldName, parent.getName() + "." + newName); boolean feed = parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); - Residence.getSignUtil().updateSignResName(oldName, parent.getName() + "." + newName); + Residence.getSignUtil().updateSignResName(res); return feed; } @@ -992,6 +992,10 @@ public Map getResidences() { } public void removeChunkList(String name) { + if (name == null) + return; + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + name = name.toLowerCase(); ClaimedResidence res = residences.get(name); if (res != null) { String world = res.getWorld(); @@ -1009,7 +1013,14 @@ public void removeChunkList(String name) { } public void calculateChunks(String name) { - ClaimedResidence res = residences.get(name); + ClaimedResidence res = null; + + if (name == null) + return; + if (!Residence.getConfigManager().isResCreateCaseSensitive()) + name = name.toLowerCase(); + res = residences.get(name); + if (res != null) { String world = res.getWorld(); if (chunkResidences.get(world) == null) { diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index aaa06d83e..6f9260fb3 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -66,7 +66,13 @@ public void LoadSigns() { ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); Signs newTemp = new Signs(); newTemp.setCategory(Integer.valueOf(category)); - newTemp.setResidence(NameSection.getString("Residence")); + + ClaimedResidence res = Residence.getResidenceManager().getByName(NameSection.getString("Residence")); + + if (res == null) + continue; + + newTemp.setResidence(res); World w = Bukkit.getWorld(NameSection.getString("World")); @@ -100,7 +106,7 @@ public void saveSigns() { for (Signs one : Signs.GetAllSigns()) { String path = "Signs." + String.valueOf(one.GetCategory()); - writer.set(path + ".Residence", one.GetResidence()); + writer.set(path + ".Residence", one.GetResidence().getName()); writer.set(path + ".World", one.GetLocation().getWorld().getName()); writer.set(path + ".X", one.GetLocation().getBlockX()); writer.set(path + ".Y", one.GetLocation().getBlockY()); @@ -152,13 +158,18 @@ public void CheckSign(ClaimedResidence res) { List signList = new ArrayList(); signList.addAll(this.getSigns().GetAllSigns()); for (Signs one : signList) { - if (!res.getName().equals(one.GetResidence())) + if (res != one.GetResidence()) continue; this.SignUpdate(one); } saveSigns(); } + public void removeSign(ClaimedResidence res) { + if (res != null) + removeSign(res.getName()); + } + public void removeSign(String res) { List signList = new ArrayList(); signList.addAll(this.getSigns().GetAllSigns()); @@ -170,44 +181,25 @@ public void removeSign(String res) { } } - public void updateSignResName(String oldName, String newName) { - if (!Residence.getConfigManager().isResCreateCaseSensitive() && oldName != null && newName != null) { - oldName = oldName.toLowerCase(); - newName = newName.toLowerCase(); - } - boolean cs = Residence.getConfigManager().isResCreateCaseSensitive(); - List signList = new ArrayList(); - signList.addAll(this.getSigns().GetAllSigns()); - for (com.bekvon.bukkit.residence.signsStuff.Signs it : signList) { - String n = it.GetResidence(); - if (!cs) - n = n.toLowerCase(); - - if (n.contains(".") && n.startsWith(oldName + ".") || n.equals(oldName)) { - String[] split = n.split(oldName); - String subname = ""; - if (split.length > 1) - subname = n.split(oldName)[1]; - String name = newName + subname; - it.setResidence(name); - SignUpdate(it); - } + public void updateSignResName(ClaimedResidence res) { + for (Signs one : this.getSigns().GetAllSigns()) { + if (res != one.GetResidence()) + continue; + this.SignUpdate(one); + saveSigns(); + break; } - saveSigns(); } public boolean SignUpdate(Signs Sign) { - String landName = Sign.GetResidence(); - - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = Sign.GetResidence(); - if (res != null) { - landName = res.getName(); - } + if (res == null) + return false; - boolean ForSale = Residence.getTransactionManager().isForSale(landName); - boolean ForRent = Residence.getRentManager().isForRent(landName); + boolean ForSale = res.isForSell(); + boolean ForRent = res.isForRent(); Location nloc = Sign.GetLocation(); @@ -233,12 +225,12 @@ public boolean SignUpdate(Signs Sign) { Signs.removeSign(Sign); return true; } - + String landName = res.getName(); if (ForRent) { - boolean rented = Residence.getRentManager().isRented(landName); + boolean rented = res.isRented(); - RentedLand rentedPlace = Residence.getRentManager().getRentedLand(landName); + RentedLand rentedPlace = res.getRentedLand(); long time = 0L; if (rentedPlace != null) time = rentedPlace.endTime; @@ -253,7 +245,7 @@ public boolean SignUpdate(Signs Sign) { if (time == 0L) endDate = "Unknown"; - if (Residence.getRentManager().getRentedAutoRepeats(landName)) + if (Residence.getRentManager().getRentedAutoRepeats(res)) endDate = Residence.getLM().getMessage("Sign.RentedAutorenewTrue", endDate); else endDate = Residence.getLM().getMessage("Sign.RentedAutorenewFalse", endDate); @@ -261,8 +253,8 @@ public boolean SignUpdate(Signs Sign) { String TopLine = rented ? endDate : Residence.getLM().getMessage("Sign.ForRentTopLine"); sign.setLine(0, TopLine); - String infoLine = Residence.getLM().getMessage("Sign.ForRentPriceLine", Residence.getRentManager().getCostOfRent(landName), Residence - .getRentManager().getRentDays(landName), Residence.getRentManager().getRentableRepeatable(landName)); + String infoLine = Residence.getLM().getMessage("Sign.ForRentPriceLine", Residence.getRentManager().getCostOfRent(res), Residence + .getRentManager().getRentDays(res), Residence.getRentManager().getRentableRepeatable(res)); sign.setLine(1, infoLine); String shortName = fixResName(landName); @@ -283,7 +275,7 @@ public boolean SignUpdate(Signs Sign) { } sign.setLine(0, Residence.getLM().getMessage("Sign.ForSaleTopLine")); - String infoLine = Residence.getLM().getMessage("Sign.ForSalePriceLine", Residence.getTransactionManager().getSaleAmount(landName)); + String infoLine = Residence.getLM().getMessage("Sign.ForSalePriceLine", res.getSellPrice()); sign.setLine(1, infoLine); sign.setLine(2, Residence.getLM().getMessage("Sign.RentedResName", shortName)); @@ -324,7 +316,13 @@ public void convertSigns(CommandSender sender) { Signs signs = new Signs(); String resname = section.getString(one + ".resName"); signs.setCategory(category); - signs.setResidence(resname); + + ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + + if (res == null) + continue; + + signs.setResidence(res); List loc = section.getStringList(one + ".loc"); @@ -389,7 +387,7 @@ public String fixResName(String name) { else if (name.length() > 15 && name.contains(".")) { String[] splited = name.split("\\."); name = ""; - for (int i = 0; i < splited.length ; i++) { + for (int i = 0; i < splited.length; i++) { String tempName = name + "." + splited[i]; if (tempName.length() < 15) name = tempName; diff --git a/src/com/bekvon/bukkit/residence/signsStuff/Signs.java b/src/com/bekvon/bukkit/residence/signsStuff/Signs.java index 1e0e6edcc..1e66238ca 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/Signs.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/Signs.java @@ -2,10 +2,12 @@ import org.bukkit.Location; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + public class Signs { int Category = 0; - String Residence = null; + ClaimedResidence Residence = null; Location loc = null; @@ -28,11 +30,11 @@ public int GetCategory() { return this.Category; } - public void setResidence(String Residence) { + public void setResidence(ClaimedResidence Residence) { this.Residence = Residence; } - public String GetResidence() { + public ClaimedResidence GetResidence() { return this.Residence; } From 267102933d1a8856b3a8f9f505767c598a081caf Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 19 Jun 2016 15:20:27 +0300 Subject: [PATCH 0186/1142] PaperSpigot fix for nodurability exp drop amount should be set aditionaly to 0 include residence create date rework of /res list --- .../bukkit/residence/LocaleManager.java | 3 +- .../bekvon/bukkit/residence/Residence.java | 7 +- .../residence/ResidenceCommandListener.java | 17 +- .../residence/containers/ResidencePlayer.java | 24 ++- .../residence/economy/rent/RentManager.java | 34 +++- .../listeners/ResidencePlayerListener.java | 6 +- .../protection/ClaimedResidence.java | 22 +++ .../residence/protection/PlayerManager.java | 41 +++- .../protection/ResidenceManager.java | 32 +++- .../protection/ResidencePermissions.java | 12 ++ .../residence/text/help/InformationPager.java | 103 ++++++++++ .../bukkit/residence/utils/Sorting.java | 23 +++ src/plugin.yml | 179 +++++++++++++++++- 13 files changed, 463 insertions(+), 40 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index fc7f657e9..a960c7f19 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -229,7 +229,7 @@ public void LoadLang(String lang) { c.get("Language.Residence.GiveLimits", "&cCannot give residence to target player, because it is outside the target players limits."); c.get("Language.Residence.Give", "&eYou give residence &6%1 &eto player &6%2"); c.get("Language.Residence.Recieve", "&eYou have recieved residence &6%1 &efrom player &6%2"); - c.get("Language.Residence.List", " &a%1%2 &e- &6World&e: &6%3"); + c.get("Language.Residence.ResList", " &a%1. &e%2 &e- &6%3 &e%4"); c.get("Language.Residence.TeleportNear", "&eTeleported to near residence."); c.get("Language.Residence.SetTeleportLocation", "&eTeleport Location Set..."); c.get("Language.Residence.PermissionsApply", "&ePermissions applied to residence."); @@ -481,6 +481,7 @@ public void LoadLang(String lang) { c.get("Language.General.Name", "&eName: &6%1"); c.get("Language.General.Lists", "&eLists: &6"); c.get("Language.General.Residences", "&eResidences&6"); + c.get("Language.General.CreatedOn", "&eCreated on: &6%1"); c.get("Language.General.Owner", "&eOwner: &6%1"); c.get("Language.General.World", "&eWorld: &6%1"); c.get("Language.General.Subzones", "&eSubzones"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index febc278f4..f43907e11 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -663,8 +663,11 @@ public void run() { if (wep != null) SchematicManager = new SchematicsManager(); - if (Bukkit.getVersion().toString().contains("Spigot") || Bukkit.getVersion().toString().contains("spigot")) + try { + Class.forName("org.bukkit.event.player.PlayerItemDamageEvent"); getServer().getPluginManager().registerEvents(spigotlistener, this); + } catch (Exception e) { + } if (getServer().getPluginManager().getPlugin("CrackShot") != null) getServer().getPluginManager().registerEvents(new CrackShot(), this); @@ -1177,7 +1180,7 @@ protected boolean loadYml() throws Exception { } rmanager = getResidenceManager().load(worlds); - + // Getting shop residences Map resList = rmanager.getResidences(); for (Entry one : resList.entrySet()) { diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 7db929705..095b27154 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -9,15 +9,12 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; - import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; public class ResidenceCommandListener extends Residence { public static List AdminCommands = Arrays.asList("removeworld", "setowner", "removeall", "signupdate", "listhidden", "listallhidden", "server", "clearflags", - "resreload", "resload", "signconvert"); + "resreload", "resload", "signconvert", "reload"); public static List getAdminCommands() { return AdminCommands; @@ -129,8 +126,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return commandHelp(new String[] { "?" }, resadmin, sender, command); } - Permission p = new Permission("residence.blockcommand." + args[0], PermissionDefault.FALSE); - if (sender.hasPermission(p)) { + if (!sender.hasPermission("residence.command." + args[0].toLowerCase())) { sender.sendMessage(Residence.getLM().getMessage("General.NoCmdPermission")); return true; } @@ -164,13 +160,8 @@ private cmd getCmdClass(CommandSender sender, String command, String[] args) { if (cmd.class.isAssignableFrom(nmsClass)) { cmdClass = (cmd) nmsClass.getConstructor().newInstance(); } - } catch (ClassNotFoundException e) { - } catch (InstantiationException e) { - } catch (IllegalAccessException e) { - } catch (IllegalArgumentException e) { - } catch (InvocationTargetException e) { - } catch (NoSuchMethodException e) { - } catch (SecurityException e) { + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException + | SecurityException e) { } return cmdClass; } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 699df0453..cedfe7a0d 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -31,6 +31,18 @@ public class ResidencePlayer { private int maxRents = -1; private int maxSubzones = -1; + public ResidencePlayer(Player player) { + this.player = player; + this.userName = player.getName(); + RecalculatePermissions(); + } + + public ResidencePlayer(OfflinePlayer player) { + this.ofPlayer = player; + this.userName = player.getName(); + RecalculatePermissions(); + } + public ResidencePlayer(String userName) { this.userName = userName; RecalculatePermissions(); @@ -159,14 +171,24 @@ public void recountResAmount() { } public void addResidence(ClaimedResidence residence) { - this.ResidenceList.put(residence.getName(), residence); + String name = residence.getName(); + if (Residence.getConfigManager().isResCreateCaseSensitive()) + name = name.toLowerCase(); + this.ResidenceList.put(name, residence); } public void removeResidence(String residence) { + if (Residence.getConfigManager().isResCreateCaseSensitive()) + residence = residence.toLowerCase(); this.ResidenceList.remove(residence); } public void renameResidence(String oldResidence, String newResidence) { + if (Residence.getConfigManager().isResCreateCaseSensitive()) { + oldResidence = oldResidence.toLowerCase(); + newResidence = newResidence.toLowerCase(); + } + ClaimedResidence res = ResidenceList.get(oldResidence); if (res != null) { removeResidence(oldResidence); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 8a9fada8f..d3827455a 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -73,6 +73,34 @@ public List getRentedLands(String playername, boolean onlyHidden) { return rentedLands; } + public List getRents(String playername) { + return getRents(playername, false); + } + + public List getRents(String playername, boolean onlyHidden) { + List rentedLands = new ArrayList(); + for (ClaimedResidence res : rentedLand) { + if (res == null) + continue; + + if (!res.isRented()) + continue; + + if (!res.getRentedLand().player.equalsIgnoreCase(playername)) + continue; + + ClaimedResidence topres = res.getTopParent(); + + boolean hidden = topres.getPermissions().has("hidden", false); + + if (onlyHidden && !hidden) + continue; + + rentedLands.add(res); + } + return rentedLands; + } + public List getRentedLandsList(Player player) { return getRentedLandsList(player.getName()); } @@ -84,7 +112,7 @@ public List getRentedLandsList(String playername) { continue; if (!res.isRented()) continue; - if (!res.getRentedLand().player.equals(playername)) + if (!res.getRentedLand().player.equalsIgnoreCase(playername)) continue; rentedLands.add(res.getName()); } @@ -760,11 +788,11 @@ public void printRentableResidences(Player player, int page) { int Prevpage = page - 1; Prevpage = page > 1 ? Prevpage : page; - String prevCmd = "/res market list sell " + Prevpage; + String prevCmd = "/res market list rent " + Prevpage; String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; - String nextCmd = "/res market list sell " + NextPage; + String nextCmd = "/res market list rent " + NextPage; String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 013348ed8..14f7eb4a7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -498,7 +498,7 @@ public void onSignCreate(SignChangeEvent event) { res = Residence.getResidenceManager().getByLoc(loc); landName = Residence.getResidenceManager().getNameByLoc(loc); } - + if (res == null) { event.getPlayer().sendMessage(Residence.getLM().getMessage("Invalid.Residence")); return; @@ -1307,8 +1307,10 @@ public void onPlayerDeath(final PlayerDeathEvent event) { if (res.getPermissions().has("keepinv", false)) event.setKeepInventory(true); - if (res.getPermissions().has("keepexp", false)) + if (res.getPermissions().has("keepexp", false)) { event.setKeepLevel(true); + event.setDroppedExp(0); + } if (res.getPermissions().has("respawn", false) && Bukkit.getVersion().toString().contains("Spigot")) Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 3b0a66daf..15701cb2c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -60,6 +60,7 @@ public class ClaimedResidence { protected ResidenceItemList ignorelist; protected ResidenceItemList blacklist; protected boolean mainRes = false; + protected long createTime = 0L; protected List cmdWhiteList = new ArrayList(); protected List cmdBlackList = new ArrayList(); @@ -82,6 +83,14 @@ public void setName(String name) { resName = name; } + public void setCreateTime() { + createTime = System.currentTimeMillis(); + } + + public long getCreateTime() { + return createTime; + } + public Integer getSellPrice() { return sellPrice; } @@ -1160,6 +1169,8 @@ public Map save() { root.put("CapitalizedName", resName); if (mainRes) root.put("MainResidence", mainRes); + if (createTime != 0L) + root.put("CreatedOn", createTime); root.put("EnterMessage", enterMessage); root.put("LeaveMessage", leaveMessage); root.put("ShopDescription", ShopDesc); @@ -1224,6 +1235,11 @@ public static ClaimedResidence load(Map root, ClaimedResidence p if (root.containsKey("CapitalizedName")) res.resName = ((String) root.get("CapitalizedName")); + if (root.containsKey("CreatedOn")) + res.createTime = ((Long) root.get("CreatedOn")); + else + res.createTime = System.currentTimeMillis(); + res.enterMessage = (String) root.get("EnterMessage"); res.leaveMessage = (String) root.get("LeaveMessage"); @@ -1241,6 +1257,9 @@ public static ClaimedResidence load(Map root, ClaimedResidence p Map areamap = (Map) root.get("Areas"); res.perms = ResidencePermissions.load(res, (Map) root.get("Permissions")); + if (res.getPermissions().ownerLastKnownName == null) + return null; + if (root.containsKey("MainResidence")) res.mainRes = (Boolean) root.get("MainResidence"); @@ -1262,6 +1281,9 @@ public static ClaimedResidence load(Map root, ClaimedResidence p for (Entry map : subzonemap.entrySet()) { ClaimedResidence subres = ClaimedResidence.load((Map) map.getValue(), res, plugin); + if (subres == null) + continue; + if (subres.getResidenceName() == null) subres.setName(map.getKey()); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index d9007da85..fae3d6367 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -22,21 +22,21 @@ public PlayerManager(Residence plugin) { } public void playerJoin(OfflinePlayer player) { - ResidencePlayer resPlayer = players.get(player.getName()); + ResidencePlayer resPlayer = players.get(player.getName().toLowerCase()); if (resPlayer == null) { - resPlayer = new ResidencePlayer(player.getName()); + resPlayer = new ResidencePlayer(player); resPlayer.recountRes(); - players.put(player.getName(), resPlayer); + players.put(player.getName().toLowerCase(), resPlayer); } else resPlayer.RecalculatePermissions(); return; } public ResidencePlayer playerJoin(String player) { - if (!players.containsKey(player)) { + if (!players.containsKey(player.toLowerCase())) { ResidencePlayer resPlayer = new ResidencePlayer(player); resPlayer.recountRes(); - players.put(player, resPlayer); + players.put(player.toLowerCase(), resPlayer); return resPlayer; } return null; @@ -58,7 +58,7 @@ public void run() { public ArrayList getResidenceList(String player) { ArrayList temp = new ArrayList(); playerJoin(player); - ResidencePlayer resPlayer = players.get(player); + ResidencePlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer != null) { for (ClaimedResidence one : resPlayer.getResList()) { temp.add(one.getName()); @@ -75,7 +75,7 @@ public ArrayList getResidenceList(String player, boolean showhidden) { public ArrayList getResidenceList(String player, boolean showhidden, boolean onlyHidden) { ArrayList temp = new ArrayList(); playerJoin(player); - ResidencePlayer resPlayer = players.get(player); + ResidencePlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer == null) return temp; for (ClaimedResidence one : resPlayer.getResList()) { @@ -93,6 +93,27 @@ public ArrayList getResidenceList(String player, boolean showhidden, boo return temp; } + public ArrayList getResidences(String player, boolean showhidden) { + return getResidences(player, showhidden, false); + } + + public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden) { + ArrayList temp = new ArrayList(); + playerJoin(player); + ResidencePlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer == null) + return temp; + for (ClaimedResidence one : resPlayer.getResList()) { + boolean hidden = one.getPermissions().has("hidden", false); + if (!showhidden && hidden) + continue; + if (onlyHidden && !hidden) + continue; + temp.add(one); + } + return temp; + } + public PermissionGroup getGroup(String player) { ResidencePlayer resPlayer = getResidencePlayer(player); if (resPlayer != null) { @@ -131,8 +152,8 @@ public ResidencePlayer getResidencePlayer(Player player) { public ResidencePlayer getResidencePlayer(String player) { ResidencePlayer resPlayer = null; - if (players.containsKey(player)) - resPlayer = players.get(player); + if (players.containsKey(player.toLowerCase())) + resPlayer = players.get(player.toLowerCase()); else { resPlayer = playerJoin(player); } @@ -164,7 +185,7 @@ public void removeResFromPlayer(Player player, String residence) { } public void removeResFromPlayer(String player, String residence) { - ResidencePlayer resPlayer = players.get(player); + ResidencePlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer != null) { resPlayer.removeResidence(residence); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index f9288a015..e3cc32246 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -321,9 +321,9 @@ public void listResidences(final CommandSender sender, final String targetplayer Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { - ArrayList ownedResidences = Residence.getPlayerManager().getResidenceList(targetplayer, hidden, onlyHidden); - ownedResidences.addAll(Residence.getRentManager().getRentedLands(targetplayer, onlyHidden)); - InformationPager.printInfo(sender, Residence.getLM().getMessage("General.Residences") + " - " + targetplayer, ownedResidences, page); + ArrayList ownedResidences = Residence.getPlayerManager().getResidences(targetplayer, hidden, onlyHidden); + ownedResidences.addAll(Residence.getRentManager().getRents(targetplayer, onlyHidden)); + InformationPager.printListInfo(sender, targetplayer, ownedResidences, page); return; } }); @@ -457,7 +457,11 @@ public void removeResidence(Player player, String name, boolean resadmin) { ClaimedResidence parent = res.getParent(); if (parent == null) { removeChunkList(name); - residences.remove(name); + + if (Residence.getConfigManager().isResCreateCaseSensitive()) + residences.remove(name); + else + residences.remove(name.toLowerCase()); if (Residence.getConfigManager().isUseClean() && Residence.getConfigManager().getCleanWorlds().contains(res.getWorld())) { CuboidArea area = res.getAreaArray()[0]; @@ -583,6 +587,8 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi worldInfo += "&6)"; worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + worldInfo += "\n" + Residence.getLM().getMessage("General.CreatedOn", GetTime.getTime(res.createTime)); + String ResFlagList = perms.listFlags(5); if (!(sender instanceof Player)) ResFlagList = perms.listFlags(); @@ -693,12 +699,20 @@ else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Play sender.sendMessage(Residence.getLM().getMessage("General.Separator")); } - private String convertToRaw(String preText, String text, String hover) { + public String convertToRaw(String preText, String text, String hover) { + return convertToRaw(preText, text, hover, null); + } + + public String convertToRaw(String preText, String text, String hover, String command) { StringBuilder msg = new StringBuilder(); + String cmd = ""; + if (command != null) { + cmd = ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/" + command + "\"}"; + } msg.append("[\"\","); if (preText != null) - msg.append("{\"text\":\"" + text + "\"}"); - msg.append("{\"text\":\"" + text + "\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + hover + "\"}]}}}"); + msg.append("{\"text\":\"" + preText + "\"}"); + msg.append("{\"text\":\"" + text + "\"" + cmd + ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + hover + "\"}]}}}"); msg.append("]"); return msg.toString(); } @@ -784,6 +798,10 @@ public Map> loadMap(String worldName, Map try { @SuppressWarnings("unchecked") ClaimedResidence residence = ClaimedResidence.load((Map) res.getValue(), null, plugin); + + if (residence == null) + continue; + if (residence.getPermissions().getOwnerUUID().toString().equals(Residence.getServerLandUUID()) && !residence.getOwner().equalsIgnoreCase("Server land") && !residence.getOwner().equalsIgnoreCase(Residence.getServerLandname())) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index fc03e02e2..df1fdc73a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -15,6 +15,8 @@ import java.util.Set; import java.util.UUID; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -430,6 +432,16 @@ public static ResidencePermissions load(ClaimedResidence res, Map li else sender.sendMessage(Residence.getLM().getMessage("InformationPage.NoNextPage")); } + + public static void printListInfo(CommandSender sender, String targetPlayer, List lines, int page) { + lines = Residence.getSortingManager().sortResidences(lines); + int perPage = 20; + if (sender instanceof Player) + perPage = 6; + int start = (page - 1) * perPage; + int end = start + perPage; + int pagecount = (int) Math.ceil((double) lines.size() / (double) perPage); + if (pagecount == 0) + pagecount = 1; + if (page > pagecount) { + sender.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Invalid.Page")); + return; + } + sender.sendMessage(Residence.getLM().getMessage("InformationPage.TopLine", Residence.getLM().getMessage("General.Residences") + " - " + targetPlayer)); + sender.sendMessage(Residence.getLM().getMessage("InformationPage.Page", Residence.getLM().getMessage("General.GenericPage", String.format("%d", page), + pagecount))); + for (int i = start; i < end; i++) { + if (lines.size() > i) { + ClaimedResidence res = lines.get(i); + StringBuilder StringB = new StringBuilder(); + StringB.append(" " + Residence.getLM().getMessage("General.Owner", res.getOwner())); + String worldInfo = ""; + worldInfo += "&6 (&3"; + CuboidArea area = res.getAreaArray()[0]; + worldInfo += Residence.getLM().getMessage("General.CoordsTop", area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() + .getBlockZ()); + worldInfo += "&6; &3"; + worldInfo += Residence.getLM().getMessage("General.CoordsBottom", area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() + .getBlockZ()); + worldInfo += "&6)"; + worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + StringB.append("\n" + worldInfo); + StringB.append("\n " + Residence.getLM().getMessage("General.CreatedOn", GetTime.getTime(res.getCreateTime()))); + + String ExtraString = ""; + if (res.isForRent()) { + if (res.isRented()) { + ExtraString = " (Rented)"; + StringB.append("\n " + Residence.getLM().getMessage("Residence.RentedBy", res.getRentedLand().player)); + } else { + ExtraString = " (For rent)"; + } + RentableLand rentable = res.getRentable(); + StringB.append("\n " + Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days)); + StringB.append("\n " + Residence.getLM().getMessage("Rentable.AllowRenewing", rentable.AllowRenewing)); + StringB.append("\n " + Residence.getLM().getMessage("Rentable.StayInMarket", rentable.StayInMarket)); + StringB.append("\n " + Residence.getLM().getMessage("Rentable.AllowAutoPay", rentable.AllowAutoPay)); + } + if (res.isForSell()) { + ExtraString = " (For sale)"; + StringB.append("\n " + Residence.getLM().getMessage("Economy.LandForSale") + " " + res.getSellPrice()); + } + + String msg = Residence.getLM().getMessage("Residence.ResList", (i + 1), res.getName(), res.getWorld(), ExtraString); + + if (sender instanceof Player) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + Residence.getResidenceManager().convertToRaw(null, msg, + StringB.toString(), "res tp " + res.getName())); + else + sender.sendMessage(msg + " " + StringB.toString().replace("\n", "")); + } + } + + ShowPagination(sender.getName(), pagecount, page, "res list"); + } + + public static void ShowPagination(String target, int pageCount, int CurrentPage, String cmd) { + if (target.equalsIgnoreCase("console")) + return; + String separator = ChatColor.GOLD + ""; + String simbol = "\u25AC"; + for (int i = 0; i < 10; i++) { + separator += simbol; + } + + if (pageCount == 1) + return; + + int NextPage = CurrentPage + 1; + NextPage = CurrentPage < pageCount ? NextPage : CurrentPage; + int Prevpage = CurrentPage - 1; + Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; + + String prevCmd = "/" + cmd + " " + Prevpage; + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; + String nextCmd = "/" + cmd + " " + NextPage; + String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + target + " " + prev + "," + next); + } } diff --git a/src/com/bekvon/bukkit/residence/utils/Sorting.java b/src/com/bekvon/bukkit/residence/utils/Sorting.java index 8f0b3c0cf..0cb4ff93a 100644 --- a/src/com/bekvon/bukkit/residence/utils/Sorting.java +++ b/src/com/bekvon/bukkit/residence/utils/Sorting.java @@ -2,11 +2,15 @@ import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Map.Entry; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class Sorting { public Map sortByValueDESC(Map unsortMap) { @@ -51,6 +55,25 @@ public int compare(Map.Entry o1, Map.Entry o2) return sortedMap; } + public List sortResidences(List residences) { + + Map map = new HashMap(); + + for (ClaimedResidence one : residences) { + map.put(one.getName().toLowerCase(), one); + } + + map = sortByKeyASC(map); + + residences.clear(); + + for (Entry one : map.entrySet()) { + residences.add((ClaimedResidence) one.getValue()); + } + + return residences; + } + public Map sortByKeyASC(Map unsortMap) { // Convert Map to List diff --git a/src/plugin.yml b/src/plugin.yml index 360277f7d..a006645ab 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.1.7.0 +version: 4.2.0.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -98,3 +98,180 @@ permissions: residence.randomtp: description: Allows to use /res rt command default: true + residence.command.area: + description: Allows to access particular command + default: true + residence.command.bank: + description: Allows to access particular command + default: true + residence.command.check: + description: Allows to access particular command + default: true + residence.command.clearflags: + description: Allows to access particular command + default: op + residence.command.command: + description: Allows to access particular command + default: true + residence.command.compass: + description: Allows to access particular command + default: true + residence.command.confirm: + description: Allows to access particular command + default: true + residence.command.contract: + description: Allows to access particular command + default: true + residence.command.create: + description: Allows to access particular command + default: true + residence.command.current: + description: Allows to access particular command + default: true + residence.command.expand: + description: Allows to access particular command + default: true + residence.command.flags: + description: Allows to access particular command + default: true + residence.command.give: + description: Allows to access particular command + default: true + residence.command.gset: + description: Allows to access particular command + default: true + residence.command.gui: + description: Allows to access particular command + default: true + residence.command.info: + description: Allows to access particular command + default: true + residence.command.kick: + description: Allows to access particular command + default: true + residence.command.lease: + description: Allows to access particular command + default: true + residence.command.limits: + description: Allows to access particular command + default: true + residence.command.list: + description: Allows to access particular command + default: true + residence.command.listall: + description: Allows to access particular command + default: true + residence.command.listallhidden: + description: Allows to access particular command + default: op + residence.command.listhidden: + description: Allows to access particular command + default: op + residence.command.lists: + description: Allows to access particular command + default: true + residence.command.lset: + description: Allows to access particular command + default: true + residence.command.market: + description: Allows to access particular command + default: true + residence.command.material: + description: Allows to access particular command + default: true + residence.command.message: + description: Allows to access particular command + default: true + residence.command.mirror: + description: Allows to access particular command + default: true + residence.command.padd: + description: Allows to access particular command + default: true + residence.command.pdel: + description: Allows to access particular command + default: true + residence.command.pset: + description: Allows to access particular command + default: true + residence.command.rc: + description: Allows to access particular command + default: true + residence.command.reload: + description: Allows to access particular command + default: op + residence.command.remove: + description: Allows to access particular command + default: true + residence.command.removeall: + description: Allows to access particular command + default: op + residence.command.removeworld: + description: Allows to access particular command + default: op + residence.command.rename: + description: Allows to access particular command + default: true + residence.command.renamearea: + description: Allows to access particular command + default: true + residence.command.resadmin: + description: Allows to access particular command + default: op + residence.command.resbank: + description: Allows to access particular command + default: true + residence.command.reset: + description: Allows to access particular command + default: true + residence.command.rt: + description: Allows to access particular command + default: true + residence.command.select: + description: Allows to access particular command + default: true + residence.command.server: + description: Allows to access particular command + default: op + residence.command.set: + description: Allows to access particular command + default: true + residence.command.setmain: + description: Allows to access particular command + default: true + residence.command.setowner: + description: Allows to access particular command + default: op + residence.command.shop: + description: Allows to access particular command + default: true + residence.command.signconvert: + description: Allows to access particular command + default: op + residence.command.signupdate: + description: Allows to access particular command + default: op + residence.command.sublist: + description: Allows to access particular command + default: true + residence.command.subzone: + description: Allows to access particular command + default: true + residence.command.tool: + description: Allows to access particular command + default: true + residence.command.tp: + description: Allows to access particular command + default: true + residence.command.tpconfirm: + description: Allows to access particular command + default: true + residence.command.tpset: + description: Allows to access particular command + default: true + residence.command.unstuck: + description: Allows to access particular command + default: true + residence.command.version: + description: Allows to access particular command + default: true From 9a9349b0ebb9d26859d5a5d835ab0e036932264c Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 20 Jun 2016 12:04:07 +0300 Subject: [PATCH 0187/1142] Don't combus entity by flame arrows if you cant kill entity --- .../bukkit/residence/LocaleManager.java | 15 ++- .../bekvon/bukkit/residence/Residence.java | 71 +++++------ .../bukkit/residence/commands/reload.java | 6 +- .../bukkit/residence/containers/FlagEnum.java | 21 ++++ .../bukkit/residence/containers/GuiItems.java | 1 + .../listeners/ResidenceEntityListener.java | 47 ++++++++ .../permissions/PermissionManager.java | 18 +-- .../protection/ClaimedResidence.java | 12 ++ .../residence/protection/FlagPermissions.java | 10 +- .../protection/ResidenceManager.java | 87 +++++++++----- .../protection/ResidencePermissions.java | 17 ++- .../residence/text/help/InformationPager.java | 111 +++++++++++------- .../bukkit/residence/utils/FileCleanUp.java | 2 +- 13 files changed, 294 insertions(+), 124 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/containers/FlagEnum.java diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index a960c7f19..08de6e12f 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -229,7 +229,8 @@ public void LoadLang(String lang) { c.get("Language.Residence.GiveLimits", "&cCannot give residence to target player, because it is outside the target players limits."); c.get("Language.Residence.Give", "&eYou give residence &6%1 &eto player &6%2"); c.get("Language.Residence.Recieve", "&eYou have recieved residence &6%1 &efrom player &6%2"); - c.get("Language.Residence.ResList", " &a%1. &e%2 &e- &6%3 &e%4"); + c.get("Language.Residence.ResList", " &a%1. &e%2 &e- &6%3 %4&6%5"); + c.get("Language.Residence.List", " &a%1. &e%2 &e- &6%3 %4&6%5"); c.get("Language.Residence.TeleportNear", "&eTeleported to near residence."); c.get("Language.Residence.SetTeleportLocation", "&eTeleport Location Set..."); c.get("Language.Residence.PermissionsApply", "&ePermissions applied to residence."); @@ -256,6 +257,10 @@ public void LoadLang(String lang) { c.get("Language.Residence.CanBeRented", "&6%1&e can be rented for &6%2 &eper &6%3 &edays. &6/res market rent"); c.get("Language.Residence.CanBeBought", "&6%1&e can be bought for &6%2&e. &6/res market buy"); + + c.get("Language.Residence.IsForRent", "&6(For rent)"); + c.get("Language.Residence.IsForSale", "&6(For sale)"); + c.get("Language.Residence.IsRented", "&6(Rented)"); c.get("Language.Rent.Disabled", "&cRent is disabled..."); c.get("Language.Rent.DisableRenew", "&eResidence &6%1 &ewill now no longer re-rent upon expire."); @@ -452,7 +457,7 @@ public void LoadLang(String lang) { c.get("Language.General.NextPage", "&eNext Page"); c.get("Language.General.NextInfoPage", "&2| &eNext Page &2>>>"); c.get("Language.General.PrevInfoPage", "&2<<< &ePrev Page &2|"); - c.get("Language.General.GenericPage", "&ePage &6%1 &eof &6%2"); + c.get("Language.General.GenericPages", "&ePage &6%1 &eof &6%2 &e(&6%3&e)"); c.get("Language.General.WorldEditNotFound", "&cWorldEdit was not detected."); c.get("Language.General.CoordsTop", "&eX:&6%1 &eY:&6%2 &eZ:&6%3"); c.get("Language.General.CoordsBottom", "&eX:&6%1 &eY:&6%2 &eZ:&6%3"); @@ -1132,6 +1137,12 @@ public void LoadLang(String lang) { "Prevent damage from magma blocks"); c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hotfloor.Info", Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); + // coords + FlagList.add("coords"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.coords.Description", + "Hides residence coordinates"); + c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.coords.Info", + Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); // Filling with custom flags info Set sec = conf.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands").getKeys(false); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f43907e11..6e259dd81 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -23,6 +23,7 @@ import java.util.logging.Logger; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.World; @@ -188,6 +189,8 @@ public class Residence extends JavaPlugin { public static List teleportDelayMap = new ArrayList(); public static HashMap teleportMap = new HashMap(); + public static String prefix = ChatColor.GREEN + "[" + ChatColor.GOLD + "Residence" + ChatColor.GREEN + "]" + ChatColor.GRAY; + public static HashMap getTeleportMap() { return teleportMap; } @@ -274,7 +277,7 @@ public void run() { public void run() { rentmanager.checkCurrentRents(); if (cmanager.showIntervalMessages()) { - System.out.println("[Residence] - Rent Expirations checked!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - Rent Expirations checked!"); } } }; @@ -282,7 +285,7 @@ public void run() { public void run() { leasemanager.doExpirations(); if (cmanager.showIntervalMessages()) { - System.out.println("[Residence] - Lease Expirations checked!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - Lease Expirations checked!"); } } }; @@ -303,7 +306,7 @@ public void run() { }); } } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); + Logger.getLogger("Minecraft").log(Level.SEVERE, Residence.prefix + " SEVERE SAVE ERROR", ex); } } }; @@ -339,7 +342,7 @@ public void onDisable() { } catch (Exception ex) { Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); } - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Disabled!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Disabled!"); } } @@ -393,7 +396,7 @@ public void onEnable() { Plugin plugin = server.getPluginManager().getPlugin(multiworld); if (plugin != null) { if (!plugin.isEnabled()) { - System.out.println("[Residence] - Enabling multiworld plugin: " + multiworld); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - Enabling multiworld plugin: " + multiworld); server.getPluginManager().enablePlugin(plugin); } } @@ -496,10 +499,11 @@ public void onEnable() { helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); } else { - System.out.println("[Residence] Language file does not exist..."); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Language file does not exist..."); } } catch (Exception ex) { - System.out.println("[Residence] Failed to load language file: " + cmanager.getLanguage() + ".yml setting to default - English"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Failed to load language file: " + cmanager.getLanguage() + + ".yml setting to default - English"); File langFile = new File(new File(dataFolder, "Language"), "English.yml"); @@ -518,17 +522,17 @@ public void onEnable() { helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); } else { - System.out.println("[Residence] Language file does not exist..."); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Language file does not exist..."); } } economy = null; if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { - System.out.println("[Residence] Scanning for economy systems..."); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Scanning for economy systems..."); if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); if (vault.economyOK()) { economy = vault; - System.out.println("[Residence] Found Vault using economy system: " + vault.getEconomyName()); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault using economy system: " + vault.getEconomyName()); } } if (economy == null) { @@ -547,13 +551,13 @@ public void onEnable() { this.loadIConomy(); } if (economy == null) { - System.out.println("[Residence] Unable to find an economy system..."); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Unable to find an economy system..."); } } // Only fill if we need to convert player data if (getConfigManager().isUUIDConvertion()) { - Bukkit.getConsoleSender().sendMessage("[Residence] Loading (" + Bukkit.getOfflinePlayers().length + ") player data"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loading (" + Bukkit.getOfflinePlayers().length + ") player data"); for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { if (player == null) continue; @@ -562,7 +566,7 @@ public void onEnable() { continue; getOfflinePlayerMap().put(name.toLowerCase(), player); } - Bukkit.getConsoleSender().sendMessage("[Residence] Player data loaded: " + getOfflinePlayerMap().size()); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Player data loaded: " + getOfflinePlayerMap().size()); } else { Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { @Override @@ -720,7 +724,7 @@ public void run() { } catch (IOException e) { // Failed to submit the stats :-( } - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Enabled! Version " + this.getDescription().getVersion() + " by bekvon"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Enabled! Version " + this.getDescription().getVersion() + " by bekvon"); initsuccess = true; PlayerManager.fillList(); @@ -728,7 +732,7 @@ public void run() { } catch (Exception ex) { initsuccess = false; getServer().getPluginManager().disablePlugin(this); - System.out.println("[Residence] - FAILED INITIALIZATION! DISABLED! ERROR:"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - FAILED INITIALIZATION! DISABLED! ERROR:"); Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); } @@ -744,8 +748,7 @@ public static SignUtil getSignUtil() { } public void consoleMessage(String message) { - ConsoleCommandSender console = Bukkit.getConsoleSender(); - console.sendMessage("[Residence] " + message); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " " + message); } public static boolean validName(String name) { @@ -769,10 +772,10 @@ private void setWorldEdit() { smanager = new WorldEditSelectionManager(server, this); wep = (WorldEditPlugin) plugin; wepid = ((WorldEditPlugin) Residence.wep).getConfig().getInt("wand-item"); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldEdit"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found WorldEdit"); } else { smanager = new SelectionManager(server, this); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] WorldEdit NOT found!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " WorldEdit NOT found!"); } } @@ -780,7 +783,7 @@ private void setWorldGuard() { Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); if (wgplugin != null) { wg = (WorldGuardPlugin) wgplugin; - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found WorldGuard"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found WorldGuard"); } } @@ -965,12 +968,12 @@ private void loadIConomy() { } else if (p.getDescription().getVersion().startsWith("5")) { economy = new IConomy5Adapter(); } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] UNKNOWN iConomy version!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " UNKNOWN iConomy version!"); return; } - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with iConomy! Version: " + p.getDescription().getVersion()); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with iConomy! Version: " + p.getDescription().getVersion()); } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] iConomy NOT found!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " iConomy NOT found!"); } } @@ -978,9 +981,9 @@ private void loadBOSEconomy() { Plugin p = getServer().getPluginManager().getPlugin("BOSEconomy"); if (p != null) { economy = new BOSEAdapter((BOSEconomy) p); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with BOSEconomy!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with BOSEconomy!"); } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] BOSEconomy NOT found!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " BOSEconomy NOT found!"); } } @@ -988,9 +991,9 @@ private void loadEssentialsEconomy() { Plugin p = getServer().getPluginManager().getPlugin("Essentials"); if (p != null) { economy = new EssentialsEcoAdapter((Essentials) p); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with Essentials Economy!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with Essentials Economy!"); } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Essentials Economy NOT found!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Essentials Economy NOT found!"); } } @@ -998,9 +1001,9 @@ private void loadRealEconomy() { Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); if (p != null) { economy = new RealShopEconomy(new RealEconomy((RealPlugin) p)); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Successfully linked with RealShop Economy!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with RealShop Economy!"); } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] RealShop Economy NOT found!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " RealShop Economy NOT found!"); } } @@ -1009,13 +1012,13 @@ private void loadVaultEconomy() { if (p != null) { ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); if (vault.economyOK()) { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault using economy: " + vault.getEconomyName()); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault using economy: " + vault.getEconomyName()); economy = vault; } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault, but Vault reported no usable economy system..."); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault, but Vault reported no usable economy system..."); } } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Vault NOT found!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Vault NOT found!"); } } @@ -1167,7 +1170,7 @@ protected boolean loadYml() throws Exception { loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); if (loadFile.isFile()) { time = System.currentTimeMillis(); - this.getLogger().info("Loading save data for world " + world.getName() + "..."); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loading save data for world " + world.getName() + "..."); yml = new YMLSaveHelper(loadFile); yml.load(); worlds.put(world.getName(), yml.getRoot().get("Residences")); @@ -1175,7 +1178,7 @@ protected boolean loadYml() throws Exception { int pass = (int) (System.currentTimeMillis() - time); String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - this.getLogger().info("Loaded " + world.getName() + " data. (" + PastTime + ")"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loaded " + world.getName() + " data. (" + PastTime + ")"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index 79d29c6ce..40ea0ff59 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -56,13 +56,13 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); } else { - System.out.println("[Residence] Language file does not exist..."); + System.out.println(Residence.prefix + " Language file does not exist..."); } - sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded language file."); + sender.sendMessage(Residence.prefix + " Reloaded language file."); return true; } else if (args[1].equalsIgnoreCase("config")) { Residence.getConfigManager().UpdateConfigFile(); - sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config file."); + sender.sendMessage(Residence.prefix + " Reloaded config file."); return true; } return false; diff --git a/src/com/bekvon/bukkit/residence/containers/FlagEnum.java b/src/com/bekvon/bukkit/residence/containers/FlagEnum.java new file mode 100644 index 000000000..39c0261ca --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/FlagEnum.java @@ -0,0 +1,21 @@ +package com.bekvon.bukkit.residence.containers; + +import com.bekvon.bukkit.residence.permissions.PermissionGroup; + +public class FlagEnum { + private PermissionGroup group; + private long time; + + public FlagEnum(PermissionGroup group, long time) { + this.group = group; + this.time = time; + } + + public long getTime() { + return this.time; + } + + public PermissionGroup getGroup() { + return this.group; + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/GuiItems.java b/src/com/bekvon/bukkit/residence/containers/GuiItems.java index 953da3e78..14ded468d 100644 --- a/src/com/bekvon/bukkit/residence/containers/GuiItems.java +++ b/src/com/bekvon/bukkit/residence/containers/GuiItems.java @@ -19,6 +19,7 @@ public enum GuiItems { cmonsters(383, 50), command(137, 0), container(342, 0), + coords(345, 0), craft(58, 50), creeper(383, 50), dragongrief(3, 0), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index b25091d68..f9946b0b7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -7,12 +7,15 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.entity.EntityCombustByEntityEvent; import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; @@ -136,6 +139,50 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { + // disabling event on world + Entity entity = event.getEntity(); + if (entity == null) + return; + if (Residence.isDisabledWorldListener(entity.getWorld())) + return; + if (!Residence.getNms().isAnimal(entity)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + Entity damager = event.getCombuster(); + + if (!(damager instanceof Arrow) && !(damager instanceof Player)) + return; + + if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + return; + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + if (!res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { + cause.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "AnimalKilling", res.getName())); + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOWEST) public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 8713f3d3e..fee112724 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -139,37 +139,37 @@ private void checkPermissions() { ResidenceVaultAdapter vault = new ResidenceVaultAdapter(server); if (vault.permissionsOK()) { perms = vault; - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault using permissions plugin:" + vault.getPermissionsName()); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault using permissions plugin:" + vault.getPermissionsName()); return; } else { - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Vault, but Vault reported no usable permissions system..."); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault, but Vault reported no usable permissions system..."); } } p = server.getPluginManager().getPlugin("PermissionsBukkit"); if (p != null) { perms = new PermissionsBukkitAdapter((PermissionsPlugin) p); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found PermissionsBukkit Plugin!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found PermissionsBukkit Plugin!"); return; } p = server.getPluginManager().getPlugin("bPermissions"); if (p != null) { perms = new BPermissionsAdapter(); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found bPermissions Plugin!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found bPermissions Plugin!"); return; } p = server.getPluginManager().getPlugin("Permissions"); if (p != null) { if (Residence.getConfigManager().useLegacyPermissions()) { perms = new LegacyPermissions(((Permissions) p).getHandler()); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Permissions Plugin!"); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Permissions running in Legacy mode!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Permissions Plugin!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + "Permissions running in Legacy mode!"); } else { perms = new OriginalPermissions(((Permissions) p).getHandler()); - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Found Permissions Plugin!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Permissions Plugin!"); } return; } - Logger.getLogger("Minecraft").log(Level.INFO, "[Residence] Permissions plugin NOT FOUND!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Permissions plugin NOT FOUND!"); } private void readConfig(FileConfiguration config, FileConfiguration flags) { @@ -188,7 +188,7 @@ private void readConfig(FileConfiguration config, FileConfiguration flags) { groups.put(group.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms)); } } catch (Exception ex) { - System.out.println("[Residence] Error parsing group from config:" + key + " Exception:" + ex); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Error parsing group from config:" + key + " Exception:" + ex); } } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 15701cb2c..cd5e76c57 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -40,6 +40,7 @@ import org.bukkit.World; import org.bukkit.World.Environment; import org.bukkit.block.Block; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; public class ClaimedResidence { @@ -547,6 +548,8 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l newres.resName = name; + newres.setCreateTime(); + ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, name, newres, newArea); Residence.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) @@ -1453,6 +1456,15 @@ public boolean isOwner(Player p) { return perms.getOwnerUUID().equals(p.getUniqueId()); } + public boolean isOwner(CommandSender sender) { + if (Residence.getConfigManager().isOfflineMode()) + return isOwner(sender.getName()); + if (sender instanceof Player) + return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); + else + return true; + } + public void setChatPrefix(String ChatPrefix) { this.ChatPrefix = ChatPrefix; } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index b545c4c21..c4a2b60be 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -33,6 +33,10 @@ public class FlagPermissions { protected Map cuboidFlags = new HashMap(); protected FlagPermissions parent; + public static enum FlagCombo { + OnlyTrue, OnlyFalse, TrueOrNone, FalseOrNone + } + public static enum FlagState { TRUE, FALSE, NEITHER, INVALID } @@ -162,7 +166,7 @@ public static void initValidFlags() { addFlag("riding"); addFlag("hook"); - + addResidenceOnlyFlag("trample"); addResidenceOnlyFlag("pvp"); addResidenceOnlyFlag("fireball"); @@ -239,9 +243,11 @@ public static void initValidFlags() { addResidenceOnlyFlag("dryup"); addResidenceOnlyFlag("backup"); - + addResidenceOnlyFlag("hotfloor"); + addResidenceOnlyFlag("coords"); + addPlayerOrGroupOnlyFlag("admin"); Residence.getConfigManager().UpdateGroupedFlagsFile(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index e3cc32246..cb19e5d1a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -9,6 +9,8 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.SortedMap; +import java.util.TreeMap; import java.util.logging.Level; import java.util.logging.Logger; @@ -29,18 +31,19 @@ import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidenceManager implements ResidenceInterface { - protected Map residences; + protected SortedMap residences; protected Map>> chunkResidences; protected List shops = new ArrayList(); private Residence plugin; public ResidenceManager(Residence plugin) { - residences = new HashMap<>(); + residences = new TreeMap<>(); chunkResidences = new HashMap<>(); this.plugin = plugin; } @@ -309,7 +312,7 @@ public void listResidences(CommandSender sender, int page, boolean showhidden, b } public void listResidences(CommandSender sender, String string, int page, boolean showhidden) { - this.listResidences(sender, sender.getName(), page, showhidden, false); + this.listResidences(sender, string, page, showhidden, false); } public void listResidences(final CommandSender sender, final String targetplayer, final int page, boolean showhidden, final boolean onlyHidden) { @@ -318,15 +321,9 @@ public void listResidences(final CommandSender sender, final String targetplayer } else if (sender.getName().equalsIgnoreCase(targetplayer)) showhidden = true; final boolean hidden = showhidden; - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - ArrayList ownedResidences = Residence.getPlayerManager().getResidences(targetplayer, hidden, onlyHidden); - ownedResidences.addAll(Residence.getRentManager().getRents(targetplayer, onlyHidden)); - InformationPager.printListInfo(sender, targetplayer, ownedResidences, page); - return; - } - }); + ArrayList ownedResidences = Residence.getPlayerManager().getResidences(targetplayer, hidden, onlyHidden); + ownedResidences.addAll(Residence.getRentManager().getRents(targetplayer, onlyHidden)); + InformationPager.printListInfo(sender, targetplayer, ownedResidences, page, showhidden); } public void listAllResidences(CommandSender sender, int page) { @@ -338,11 +335,17 @@ public void listAllResidences(CommandSender sender, int page, boolean showhidden } public void listAllResidences(CommandSender sender, int page, boolean showhidden, boolean showsubzones, boolean onlyHidden) { -// if (showhidden && !Residence.isResAdminOn(sender)) { -// showhidden = false; -// } - InformationPager.printInfo(sender, Residence.getLM().getMessage("General.Residences"), this.getResidenceList(null, showhidden, showsubzones, true, onlyHidden), - page); + + int perPage = 20; + if (sender instanceof Player) + perPage = 6; + + int start = (page - 1) * perPage; + int end = start + perPage; + + List list = getFromAllResidences(showhidden, onlyHidden, start, end); + + InformationPager.printListInfo(sender, null, list, page, showhidden); } public String[] getResidenceList() { @@ -379,7 +382,25 @@ public ArrayList getResidenceList(String targetplayer, boolean showhidde for (Entry res : residences.entrySet()) { this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), res.getValue(), list, formattedOutput, onlyHidden); } - Collections.sort(list, String.CASE_INSENSITIVE_ORDER); + return list; + } + + public ArrayList getFromAllResidences(boolean showhidden, boolean onlyHidden, int start, int end) { + ArrayList list = new ArrayList<>(); + int i = 0; + for (Entry res : residences.entrySet()) { + boolean hidden = res.getValue().getPermissions().has("hidden", false); + if (onlyHidden && !hidden) + continue; + if ((showhidden) || (!showhidden && !hidden)) { +// i++; +// if (i < start) +// continue; +// if (i > end) +// break; + list.add(res.getValue()); + } + } return list; } @@ -579,13 +600,16 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi resNameOwner = ChatColor.translateAlternateColorCodes('&', resNameOwner); String worldInfo = lm.getMessage("General.World", perms.getWorld()); - worldInfo += "&6 (&3"; - CuboidArea area = res.getAreaArray()[0]; - worldInfo += lm.getMessage("General.CoordsTop", area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); - worldInfo += "&6; &3"; - worldInfo += lm.getMessage("General.CoordsBottom", area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); - worldInfo += "&6)"; - worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + + if (res.getPermissions().has("hidden", FlagCombo.FalseOrNone) && res.getPermissions().has("coords", FlagCombo.TrueOrNone) || resadmin) { + worldInfo += "&6 (&3"; + CuboidArea area = res.getAreaArray()[0]; + worldInfo += lm.getMessage("General.CoordsTop", area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); + worldInfo += "&6; &3"; + worldInfo += lm.getMessage("General.CoordsBottom", area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + worldInfo += "&6)"; + worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + } worldInfo += "\n" + Residence.getLM().getMessage("General.CreatedOn", GetTime.getTime(res.createTime)); @@ -744,7 +768,7 @@ public Map save() { try { resmap.put(res.getValue().getShortName(), res.getValue().save()); } catch (Exception ex) { - System.out.println("[Residence] Failed to save residence (" + res.getKey() + ")!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + ChatColor.RED + " Failed to save residence (" + res.getKey() + ")!"); Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); } } @@ -762,12 +786,12 @@ public ResidenceManager load(Map root) throws Exception { long time = System.currentTimeMillis(); @SuppressWarnings("unchecked") Map reslist = (Map) root.get(world.getName()); - plugin.getLogger().info("Loading " + world.getName() + " data into memory..."); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loading " + world.getName() + " data into memory..."); if (reslist != null) { try { resm.chunkResidences.put(world.getName(), loadMap(world.getName(), reslist, resm)); } catch (Exception ex) { - System.out.println("Error in loading save file for world: " + world.getName()); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + ChatColor.RED + "Error in loading save file for world: " + world.getName()); if (Residence.getConfigManager().stopOnSaveError()) throw (ex); } @@ -776,7 +800,7 @@ public ResidenceManager load(Map root) throws Exception { long pass = System.currentTimeMillis() - time; String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - plugin.getLogger().info("Loaded " + world.getName() + " data into memory. (" + PastTime + ")"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loaded " + world.getName() + " data into memory. (" + PastTime + ")"); } return resm; } @@ -790,7 +814,7 @@ public Map> loadMap(String worldName, Map int y = 0; for (Entry res : root.entrySet()) { if (i == 100 & Residence.getConfigManager().isUUIDConvertion()) - Bukkit.getConsoleSender().sendMessage("[Residence] " + worldName + " UUID conversion done: " + y + " of " + root.size()); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " " + worldName + " UUID conversion done: " + y + " of " + root.size()); if (i >= 100) i = 0; i++; @@ -830,7 +854,8 @@ public Map> loadMap(String worldName, Map resm.residences.put(resName, residence); } catch (Exception ex) { - System.out.print("[Residence] Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + ChatColor.RED + " Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + + " Error Log:"); Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); if (Residence.getConfigManager().stopOnSaveError()) { throw (ex); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index df1fdc73a..ec33c5714 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -68,6 +68,21 @@ public boolean groupHas(String group, String flag, boolean def) { return super.groupHas(group, flag, def); } + public boolean has(String flag, FlagCombo f) { + switch (f) { + case FalseOrNone: + return !has(flag, false); + case OnlyFalse: + return !has(flag, true); + case OnlyTrue: + return has(flag, false); + case TrueOrNone: + return has(flag, true); + default: + return false; + } + } + @Override public boolean has(String flag, boolean def) { ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def); @@ -441,7 +456,7 @@ public static ResidencePermissions load(ClaimedResidence res, Map li return; } sender.sendMessage(Residence.getLM().getMessage("InformationPage.TopLine", title)); - sender.sendMessage(Residence.getLM().getMessage("InformationPage.Page", Residence.getLM().getMessage("General.GenericPage", String.format("%d", page), - pagecount))); + sender.sendMessage(Residence.getLM().getMessage("InformationPage.Page", Residence.getLM().getMessage("General.GenericPages", String.format("%d", page), + pagecount, lines.size()))); for (int i = start; i < end; i++) { if (lines.size() > i) sender.sendMessage(ChatColor.GREEN + lines.get(i)); @@ -54,8 +55,9 @@ public static void printInfo(CommandSender sender, String title, List li sender.sendMessage(Residence.getLM().getMessage("InformationPage.NoNextPage")); } - public static void printListInfo(CommandSender sender, String targetPlayer, List lines, int page) { - lines = Residence.getSortingManager().sortResidences(lines); + public static void printListInfo(CommandSender sender, String targetPlayer, List lines, int page, boolean resadmin) { + if (targetPlayer != null) + lines = Residence.getSortingManager().sortResidences(lines); int perPage = 20; if (sender instanceof Player) perPage = 6; @@ -68,15 +70,25 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List sender.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Invalid.Page")); return; } - sender.sendMessage(Residence.getLM().getMessage("InformationPage.TopLine", Residence.getLM().getMessage("General.Residences") + " - " + targetPlayer)); + if (targetPlayer != null) + sender.sendMessage(Residence.getLM().getMessage("InformationPage.TopLine", Residence.getLM().getMessage("General.Residences") + " - " + targetPlayer)); sender.sendMessage(Residence.getLM().getMessage("InformationPage.Page", Residence.getLM().getMessage("General.GenericPage", String.format("%d", page), - pagecount))); + pagecount, lines.size()))); + + String cmd = "res"; + if (resadmin) + cmd = "resadmin"; + for (int i = start; i < end; i++) { - if (lines.size() > i) { - ClaimedResidence res = lines.get(i); - StringBuilder StringB = new StringBuilder(); - StringB.append(" " + Residence.getLM().getMessage("General.Owner", res.getOwner())); - String worldInfo = ""; + if (lines.size() <= i) + break; + + ClaimedResidence res = lines.get(i); + StringBuilder StringB = new StringBuilder(); + StringB.append(" " + Residence.getLM().getMessage("General.Owner", res.getOwner())); + String worldInfo = ""; + + if (res.getPermissions().has("hidden", FlagCombo.FalseOrNone) && res.getPermissions().has("coords", FlagCombo.TrueOrNone) || resadmin) { worldInfo += "&6 (&3"; CuboidArea area = res.getAreaArray()[0]; worldInfo += Residence.getLM().getMessage("General.CoordsTop", area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() @@ -87,38 +99,49 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List worldInfo += "&6)"; worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); StringB.append("\n" + worldInfo); - StringB.append("\n " + Residence.getLM().getMessage("General.CreatedOn", GetTime.getTime(res.getCreateTime()))); - - String ExtraString = ""; - if (res.isForRent()) { - if (res.isRented()) { - ExtraString = " (Rented)"; - StringB.append("\n " + Residence.getLM().getMessage("Residence.RentedBy", res.getRentedLand().player)); - } else { - ExtraString = " (For rent)"; - } - RentableLand rentable = res.getRentable(); - StringB.append("\n " + Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days)); - StringB.append("\n " + Residence.getLM().getMessage("Rentable.AllowRenewing", rentable.AllowRenewing)); - StringB.append("\n " + Residence.getLM().getMessage("Rentable.StayInMarket", rentable.StayInMarket)); - StringB.append("\n " + Residence.getLM().getMessage("Rentable.AllowAutoPay", rentable.AllowAutoPay)); - } - if (res.isForSell()) { - ExtraString = " (For sale)"; - StringB.append("\n " + Residence.getLM().getMessage("Economy.LandForSale") + " " + res.getSellPrice()); + } + + StringB.append("\n " + Residence.getLM().getMessage("General.CreatedOn", GetTime.getTime(res.getCreateTime()))); + + String ExtraString = ""; + if (res.isForRent()) { + if (res.isRented()) { + ExtraString = " " + Residence.getLM().getMessage("Residence.IsRented"); + StringB.append("\n " + Residence.getLM().getMessage("Residence.RentedBy", res.getRentedLand().player)); + } else { + ExtraString = " " + Residence.getLM().getMessage("Residence.IsForRent"); } + RentableLand rentable = res.getRentable(); + StringB.append("\n " + Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days)); + StringB.append("\n " + Residence.getLM().getMessage("Rentable.AllowRenewing", rentable.AllowRenewing)); + StringB.append("\n " + Residence.getLM().getMessage("Rentable.StayInMarket", rentable.StayInMarket)); + StringB.append("\n " + Residence.getLM().getMessage("Rentable.AllowAutoPay", rentable.AllowAutoPay)); + } - String msg = Residence.getLM().getMessage("Residence.ResList", (i + 1), res.getName(), res.getWorld(), ExtraString); + if (res.isForSell()) { + ExtraString = " " + Residence.getLM().getMessage("Residence.IsForSale"); + StringB.append("\n " + Residence.getLM().getMessage("Economy.LandForSale") + " " + res.getSellPrice()); + } - if (sender instanceof Player) - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + Residence.getResidenceManager().convertToRaw(null, msg, - StringB.toString(), "res tp " + res.getName())); - else - sender.sendMessage(msg + " " + StringB.toString().replace("\n", "")); + String tpFlag = ""; + String moveFlag = ""; + if (sender instanceof Player && !res.isOwner(sender)) { + tpFlag = res.getPermissions().playerHas((Player) sender, "tp", true) ? ChatColor.DARK_GREEN + "T" : ChatColor.DARK_RED + "T"; + moveFlag = res.getPermissions().playerHas(sender.getName(), "move", true) ? ChatColor.DARK_GREEN + "M" : ChatColor.DARK_RED + "M"; } - } - ShowPagination(sender.getName(), pagecount, page, "res list"); + String msg = Residence.getLM().getMessage("Residence.ResList", (i + 1), res.getName(), res.getWorld(), tpFlag + moveFlag, ExtraString); + + if (sender instanceof Player) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + Residence.getResidenceManager().convertToRaw(null, msg, + StringB.toString(), cmd + " tp " + res.getName())); + else + sender.sendMessage(msg + " " + StringB.toString().replace("\n", "")); + } + if (targetPlayer != null) + ShowPagination(sender.getName(), pagecount, page, cmd + " list " + targetPlayer); + else + ShowPagination(sender.getName(), pagecount, page, cmd + " listall"); } public static void ShowPagination(String target, int pageCount, int CurrentPage, String cmd) { @@ -139,14 +162,20 @@ public static void ShowPagination(String target, int pageCount, int CurrentPage, Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; String prevCmd = "/" + cmd + " " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + String prev = "\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = "/" + cmd + " " + NextPage; String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" - + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}"; + + if (CurrentPage >= pageCount) + next = "{\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + "\"}"; + + if (CurrentPage <= 1) + prev = "{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + "\"}"; - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + target + " " + prev + "," + next); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + target + " [" + prev + "," + next + "]"); } } diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 348d6c4ce..89f2c8808 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -59,6 +59,6 @@ public static void cleanFiles() { Residence.getResidenceManager().removeResidence(oneName); i++; } - Bukkit.getConsoleSender().sendMessage("[Residence] Auto CleanUp deleted " + i + " residences!"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Auto CleanUp deleted " + i + " residences!"); } } From 61b376abec64850591ab7c146dc014e465a4cebe Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 20 Jun 2016 13:53:25 +0300 Subject: [PATCH 0188/1142] Don't ignite player with arrow if pvp is false --- .../bukkit/residence/LocaleManager.java | 2 +- .../bekvon/bukkit/residence/Residence.java | 4 -- .../bukkit/residence/commands/reload.java | 3 -- .../listeners/ResidenceEntityListener.java | 47 ++++++++++++++++++- .../protection/ResidenceManager.java | 7 --- .../residence/text/help/InformationPager.java | 12 +---- src/plugin.yml | 2 +- 7 files changed, 48 insertions(+), 29 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 08de6e12f..5f5bce8f4 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -230,7 +230,7 @@ public void LoadLang(String lang) { c.get("Language.Residence.Give", "&eYou give residence &6%1 &eto player &6%2"); c.get("Language.Residence.Recieve", "&eYou have recieved residence &6%1 &efrom player &6%2"); c.get("Language.Residence.ResList", " &a%1. &e%2 &e- &6%3 %4&6%5"); - c.get("Language.Residence.List", " &a%1. &e%2 &e- &6%3 %4&6%5"); + c.get("Language.Residence.List", " &e%2 &e- &6%3"); c.get("Language.Residence.TeleportNear", "&eTeleported to near residence."); c.get("Language.Residence.SetTeleportLocation", "&eTeleport Location Set..."); c.get("Language.Residence.PermissionsApply", "&ePermissions applied to residence."); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 6e259dd81..9fba3068c 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -28,7 +28,6 @@ import org.bukkit.Server; import org.bukkit.World; import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; @@ -79,7 +78,6 @@ import com.bekvon.bukkit.residence.spout.ResidenceSpoutListener; import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.HelpEntry; -import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.ActionBar; import com.bekvon.bukkit.residence.utils.CrackShot; import com.bekvon.bukkit.residence.utils.FileCleanUp; @@ -497,7 +495,6 @@ public void onEnable() { FileConfiguration langconfig = new YamlConfiguration(); langconfig.load(in); helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); } else { Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Language file does not exist..."); } @@ -520,7 +517,6 @@ public void onEnable() { FileConfiguration langconfig = new YamlConfiguration(); langconfig.load(in); helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); } else { Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Language file does not exist..."); } diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index 40ea0ff59..2c7e5bcbe 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -8,7 +8,6 @@ import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; -import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.configuration.InvalidConfigurationException; @@ -18,7 +17,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; import com.bekvon.bukkit.residence.text.help.HelpEntry; -import com.bekvon.bukkit.residence.text.help.InformationPager; public class reload implements cmd { @@ -54,7 +52,6 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command e.printStackTrace(); } Residence.helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - InformationPager.setLinesPerPage(langconfig.getInt("HelpLinesPerPage", 7)); } else { System.out.println(Residence.prefix + " Language file does not exist..."); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index f9946b0b7..0cd632d57 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -7,8 +7,6 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; - import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -744,6 +742,51 @@ public void onSplashPotion(PotionSplashEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST) + public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { + // disabling event on world + Entity entity = event.getEntity(); + if (entity == null) + return; + if (Residence.isDisabledWorldListener(entity.getWorld())) + return; + if (!(entity instanceof Player)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + Entity damager = event.getCombuster(); + + if (!(damager instanceof Arrow) && !(damager instanceof Player)) + return; + + if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + return; + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + Entity ent = event.getEntity(); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); + Boolean tgtpvp = Residence.getPermsByLoc(entity.getLocation()).has("pvp", true); + if (!srcpvp || !tgtpvp) + event.setCancelled(true); + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index cb19e5d1a..fd5b6204a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1,7 +1,6 @@ package com.bekvon.bukkit.residence.protection; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -387,17 +386,11 @@ public ArrayList getResidenceList(String targetplayer, boolean showhidde public ArrayList getFromAllResidences(boolean showhidden, boolean onlyHidden, int start, int end) { ArrayList list = new ArrayList<>(); - int i = 0; for (Entry res : residences.entrySet()) { boolean hidden = res.getValue().getPermissions().has("hidden", false); if (onlyHidden && !hidden) continue; if ((showhidden) || (!showhidden && !hidden)) { -// i++; -// if (i < start) -// continue; -// if (i > end) -// break; list.add(res.getValue()); } } diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 3b9ab21c6..b0d8f8ee6 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -17,16 +17,6 @@ public class InformationPager { - public static int linesPerPage = 7; - - public static int getLinesPerPage() { - return linesPerPage; - } - - public static void setLinesPerPage(int lines) { - linesPerPage = lines; - } - public static void printInfo(CommandSender sender, String title, String[] lines, int page) { InformationPager.printInfo(sender, title, Arrays.asList(lines), page); } @@ -72,7 +62,7 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List } if (targetPlayer != null) sender.sendMessage(Residence.getLM().getMessage("InformationPage.TopLine", Residence.getLM().getMessage("General.Residences") + " - " + targetPlayer)); - sender.sendMessage(Residence.getLM().getMessage("InformationPage.Page", Residence.getLM().getMessage("General.GenericPage", String.format("%d", page), + sender.sendMessage(Residence.getLM().getMessage("InformationPage.Page", Residence.getLM().getMessage("General.GenericPages", String.format("%d", page), pagecount, lines.size()))); String cmd = "res"; diff --git a/src/plugin.yml b/src/plugin.yml index a006645ab..c005b5c0f 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.2.0.2 +version: 4.3.0.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 9cef5c3dc0d858e01d4d89e0c3c21d4c60e8b25b Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 21 Jun 2016 13:56:41 +0300 Subject: [PATCH 0189/1142] reload groups or flags files ingame convert all duplicated residence names to go over complete case insensitive residence handling. extra info when checking res info to show square size of residence --- .../bukkit/residence/ConfigManager.java | 34 ++--- .../bukkit/residence/LocaleManager.java | 4 +- .../bekvon/bukkit/residence/Residence.java | 21 ++- .../bukkit/residence/commands/reload.java | 16 ++ .../bukkit/residence/commands/remove.java | 4 +- .../bekvon/bukkit/residence/commands/tp.java | 2 +- .../residence/containers/ResidencePlayer.java | 16 +- .../residence/economy/TransactionManager.java | 8 +- .../residence/economy/rent/RentManager.java | 12 +- .../residence/itemlist/WorldItemManager.java | 15 +- .../listeners/ResidenceEntityListener.java | 41 ++++- .../permissions/PermissionManager.java | 26 ++-- .../protection/ClaimedResidence.java | 41 ++--- .../protection/ResidenceManager.java | 140 ++++++------------ .../protection/WorldFlagManager.java | 22 +-- 15 files changed, 186 insertions(+), 216 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 8ee6db91a..e5c745be6 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -48,8 +48,6 @@ public class ConfigManager { protected boolean UseClean; protected boolean PvPFlagPrevent; protected boolean OverridePvp; - protected boolean ResCreateCaseSensitive; - protected boolean ResTpCaseSensitive; protected boolean BlockAnyTeleportation; protected int infoToolId; protected int AutoCleanUpDays; @@ -204,13 +202,15 @@ public class ConfigManager { private Residence plugin; - public ConfigManager(FileConfiguration config, FileConfiguration flags, FileConfiguration groups, Residence plugin) { + public ConfigManager(Residence plugin) { +// FileConfiguration config = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "config.yml")); this.plugin = plugin; globalCreatorDefaults = new FlagPermissions(); globalResidenceDefaults = new FlagPermissions(); globalGroupDefaults = new HashMap(); UpdateConfigFile(); - this.load(flags, groups); + this.loadFlags(); + this.loadGroups(); } public static String Colors(String text) { @@ -401,17 +401,6 @@ public void UpdateConfigFile() { GlobalChatSelfModify = c.get("Global.Optimizations.GlobalChat.SelfModify", true); GlobalChatFormat = c.get("Global.Optimizations.GlobalChat.Format", "&c[&e%1&c]", true); - c.getW().addComment("Global.Optimizations.ResCreateCaseSensitive", - "When its true you can create residences with similar names but different capitalization. An example: Village and village are counted as different residences", - "When it's set to false you can't create residences with same names but different capitalizations"); - ResCreateCaseSensitive = c.get("Global.Optimizations.ResCreateCaseSensitive", false); - - c.getW().addComment("Global.Optimizations.ResTpCaseSensitive", - "When this set to true, when you are performing /res tp command and providing residence name, it should be exactly same as residence name. So in example Village is not same as village", - "When it's set to false you can teleport to residence with name Village even if you executing command /res tp village", - "Don't disable this if you already have some duplicating residences in your database as this will prevent players from teleporting to one of them"); - ResTpCaseSensitive = c.get("Global.Optimizations.ResTpCaseSensitive", true); - c.getW().addComment("Global.Optimizations.BlockAnyTeleportation", "When this set to true, any teleportation to residence where player dont have tp flag, action will be denyied", "This can prevent from teleporting players to residence with 3rd party plugins like esentials /tpa"); @@ -899,11 +888,14 @@ public void UpdateConfigFile() { } } - private void load(FileConfiguration flags, FileConfiguration groups) { - + public void loadFlags() { + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "flags.yml")); globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", flags.getConfigurationSection("Global")); globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", flags.getConfigurationSection("Global")); + } + public void loadGroups() { + FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "groups.yml")); ConfigurationSection node = groups.getConfigurationSection("Global.GroupDefault"); if (node != null) { Set keys = node.getConfigurationSection(defaultGroup).getKeys(false); @@ -1123,18 +1115,10 @@ public boolean isOverridePvp() { return OverridePvp; } - public boolean isResTpCaseSensitive() { - return ResTpCaseSensitive; - } - public boolean isBlockAnyTeleportation() { return BlockAnyTeleportation; } - public boolean isResCreateCaseSensitive() { - return ResCreateCaseSensitive; - } - public int getInfoToolID() { return infoToolId; } diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 5f5bce8f4..1577329a8 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -451,7 +451,7 @@ public void LoadLang(String lang) { c.get("Language.General.ListCreate", "&eCreated list &6%1"); c.get("Language.General.PhysicalAreas", "&ePhysical Areas"); c.get("Language.General.CurrentArea", "&eCurrent Area: &6%1"); - c.get("Language.General.TotalSize", "&eTotal size: &6%1"); + c.get("Language.General.TotalResSize", "&eTotal size: &6%1m\u00B3 (%2m\u00B2)"); c.get("Language.General.TotalWorth", "&eTotal worth of residence: &6%1 &e(&6%2&e)"); c.get("Language.General.NotOnline", "&eTarget player must be online."); c.get("Language.General.NextPage", "&eNext Page"); @@ -1502,7 +1502,7 @@ public void LoadLang(String lang) { c.get("CommandHelp.SubCommands.res.SubCommands.reload.Description", "reload lanf or config files"); c.get("CommandHelp.SubCommands.res.SubCommands.reload.Info", - Arrays.asList("&eUsage: &6/res reload [config/lang]")); + Arrays.asList("&eUsage: &6/res reload [config/lang/groups/flags]")); c.get("CommandHelp.SubCommands.res.SubCommands.lists.Description", "Predefined permission lists"); c.get("CommandHelp.SubCommands.res.SubCommands.lists.Info", diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 9fba3068c..63e28442b 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -116,7 +116,7 @@ public class Residence extends JavaPlugin { protected static List authlist; protected static ResidenceManager rmanager; protected static SelectionManager smanager; - protected static PermissionManager gmanager; + public static PermissionManager gmanager; protected static ConfigManager cmanager; protected static SignUtil signmanager; @@ -134,8 +134,8 @@ public class Residence extends JavaPlugin { protected static TransactionManager tmanager; protected static PermissionListManager pmanager; protected static LeaseManager leasemanager; - protected static WorldItemManager imanager; - protected static WorldFlagManager wmanager; + public static WorldItemManager imanager; + public static WorldFlagManager wmanager; protected static RentManager rentmanager; protected static ChatManager chatmanager; protected static Server server; @@ -154,7 +154,7 @@ public class Residence extends JavaPlugin { protected boolean firstenable = true; protected static EconomyInterface economy; - public final static int saveVersion = 1; + private static int saveVersion = 1; public static File dataFolder; protected static int leaseBukkitId = -1; protected static int rentBukkitId = -1; @@ -385,10 +385,7 @@ public void onEnable() { // System.out.println("[Residence] Config Invalid, wrote default..."); // } - FileConfiguration canfig = YamlConfiguration.loadConfiguration(new File(dataFolder, "config.yml")); - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(dataFolder, "flags.yml")); - FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(dataFolder, "groups.yml")); - cmanager = new ConfigManager(canfig, flags, groups, this); + cmanager = new ConfigManager(this); String multiworld = cmanager.getMultiworldPlugin(); if (multiworld != null) { Plugin plugin = server.getPluginManager().getPlugin(multiworld); @@ -446,10 +443,9 @@ public void onEnable() { return; } - gmanager = new PermissionManager(groups, flags); - - imanager = new WorldItemManager(flags); - wmanager = new WorldFlagManager(flags, groups); + gmanager = new PermissionManager(); + imanager = new WorldItemManager(); + wmanager = new WorldFlagManager(); chatmanager = new ChatManager(); rentmanager = new RentManager(); @@ -1169,6 +1165,7 @@ protected boolean loadYml() throws Exception { Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loading save data for world " + world.getName() + "..."); yml = new YMLSaveHelper(loadFile); yml.load(); + worlds.put(world.getName(), yml.getRoot().get("Residences")); int pass = (int) (System.currentTimeMillis() - time); diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index 2c7e5bcbe..93ad20774 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -16,6 +16,9 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.itemlist.WorldItemManager; +import com.bekvon.bukkit.residence.permissions.PermissionManager; +import com.bekvon.bukkit.residence.protection.WorldFlagManager; import com.bekvon.bukkit.residence.text.help.HelpEntry; public class reload implements cmd { @@ -61,6 +64,19 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getConfigManager().UpdateConfigFile(); sender.sendMessage(Residence.prefix + " Reloaded config file."); return true; + } else if (args[1].equalsIgnoreCase("groups")) { + Residence.getConfigManager().loadGroups(); + Residence.gmanager = new PermissionManager(); + Residence.wmanager = new WorldFlagManager(); + sender.sendMessage(Residence.prefix + " Reloaded groups file."); + return true; + } else if (args[1].equalsIgnoreCase("flags")) { + Residence.getConfigManager().loadFlags(); + Residence.gmanager = new PermissionManager(); + Residence.imanager = new WorldItemManager(); + Residence.wmanager = new WorldFlagManager(); + sender.sendMessage(Residence.prefix + " Reloaded flags file."); + return true; } return false; } diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index bc3324691..eb468f464 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -52,9 +52,9 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (!Residence.deleteConfirm.containsKey(senderName) || !resname.equalsIgnoreCase(Residence.deleteConfirm.get(senderName))) { if (res.isSubzone()) - sender.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", res.getShortName())); + sender.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", res.getResidenceName())); else - sender.sendMessage(Residence.getLM().getMessage("Residence.DeleteConfirm", res.getShortName())); + sender.sendMessage(Residence.getLM().getMessage("Residence.DeleteConfirm", res.getResidenceName())); Residence.deleteConfirm.put(senderName, resname); } else { Residence.getResidenceManager().removeResidence(sender, resname, resadmin); diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index 47e1a666b..6b61cb6a2 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -19,7 +19,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length != 2) return false; - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1], true); + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index cedfe7a0d..ed89ab8db 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -36,13 +36,13 @@ public ResidencePlayer(Player player) { this.userName = player.getName(); RecalculatePermissions(); } - + public ResidencePlayer(OfflinePlayer player) { this.ofPlayer = player; this.userName = player.getName(); RecalculatePermissions(); } - + public ResidencePlayer(String userName) { this.userName = userName; RecalculatePermissions(); @@ -172,22 +172,18 @@ public void recountResAmount() { public void addResidence(ClaimedResidence residence) { String name = residence.getName(); - if (Residence.getConfigManager().isResCreateCaseSensitive()) - name = name.toLowerCase(); + name = name.toLowerCase(); this.ResidenceList.put(name, residence); } public void removeResidence(String residence) { - if (Residence.getConfigManager().isResCreateCaseSensitive()) - residence = residence.toLowerCase(); + residence = residence.toLowerCase(); this.ResidenceList.remove(residence); } public void renameResidence(String oldResidence, String newResidence) { - if (Residence.getConfigManager().isResCreateCaseSensitive()) { - oldResidence = oldResidence.toLowerCase(); - newResidence = newResidence.toLowerCase(); - } + oldResidence = oldResidence.toLowerCase(); + newResidence = newResidence.toLowerCase(); ClaimedResidence res = ResidenceList.get(oldResidence); if (res != null) { diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index f4a2d3b49..1a1893025 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -6,8 +6,6 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketBuyInterface; -import com.bekvon.bukkit.residence.protection.ResidenceManager; -import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -22,9 +20,7 @@ import org.bukkit.entity.Player; public class TransactionManager implements MarketBuyInterface { - ResidenceManager manager5; private Set sellAmount; - PermissionManager gm5; public TransactionManager() { sellAmount = new HashSet(); @@ -202,10 +198,10 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); player.sendMessage(Residence.getLM().getMessage("Economy.MoneyCharged", String.format("%d", amount), econ.getName())); - player.sendMessage(Residence.getLM().getMessage("Residence.Bought", res.getShortName())); + player.sendMessage(Residence.getLM().getMessage("Residence.Bought", res.getResidenceName())); Player seller = serv.getPlayer(sellerName); if (seller != null && seller.isOnline()) { - seller.sendMessage(Residence.getLM().getMessage("Residence.Buy", player.getName(), res.getShortName())); + seller.sendMessage(Residence.getLM().getMessage("Residence.Buy", player.getName(), res.getResidenceName())); seller.sendMessage(Residence.getLM().getMessage("Economy.MoneyCredit", String.format("%d", amount), econ.getName())); } } else { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index d3827455a..474ebd4e9 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -175,7 +175,7 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days newrent.AllowAutoPay = AllowAutoPay; res.setRentable(newrent); rentableLand.add(res); - player.sendMessage(Residence.getLM().getMessage("Residence.ForRentSuccess", res.getShortName(), amount, days)); + player.sendMessage(Residence.getLM().getMessage("Residence.ForRentSuccess", res.getResidenceName(), amount, days)); } else { player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyRent")); } @@ -409,7 +409,7 @@ public void removeFromForRent(Player player, ClaimedResidence res, boolean resad res.setRentable(null); res.getPermissions().applyDefaultFlags(); Residence.getSignUtil().CheckSign(res); - player.sendMessage(Residence.getLM().getMessage("Residence.RemoveRentable", res.getShortName())); + player.sendMessage(Residence.getLM().getMessage("Residence.RemoveRentable", res.getResidenceName())); } else { player.sendMessage(Residence.getLM().getMessage("Residence.NotForRent")); } @@ -638,9 +638,9 @@ public void setRentRepeatable(Player player, ClaimedResidence res, boolean value res.getRentedLand().AutoPay = false; if (value) - player.sendMessage(Residence.getLM().getMessage("Rentable.EnableRenew", res.getShortName())); + player.sendMessage(Residence.getLM().getMessage("Rentable.EnableRenew", res.getResidenceName())); else - player.sendMessage(Residence.getLM().getMessage("Rentable.DisableRenew", res.getShortName())); + player.sendMessage(Residence.getLM().getMessage("Rentable.DisableRenew", res.getResidenceName())); } @@ -679,9 +679,9 @@ public void setRentedRepeatable(Player player, ClaimedResidence res, boolean val land.AutoPay = value; if (value) - player.sendMessage(Residence.getLM().getMessage("Rent.EnableRenew", res.getShortName())); + player.sendMessage(Residence.getLM().getMessage("Rent.EnableRenew", res.getResidenceName())); else - player.sendMessage(Residence.getLM().getMessage("Rent.DisableRenew", res.getShortName())); + player.sendMessage(Residence.getLM().getMessage("Rent.DisableRenew", res.getResidenceName())); if (res != null) Residence.getSignUtil().CheckSign(res); diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java index c6891a2b0..350eaf71f 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java @@ -1,17 +1,21 @@ package com.bekvon.bukkit.residence.itemlist; +import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.bukkit.Material; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import com.bekvon.bukkit.residence.Residence; public class WorldItemManager { protected List lists; - public WorldItemManager(FileConfiguration config) { + public WorldItemManager() { lists = new ArrayList(); - this.readLists(config); + this.readLists(); } public boolean isAllowed(Material mat, String group, String world) { @@ -32,12 +36,13 @@ public boolean isIgnored(Material mat, String group, String world) { return false; } - private void readLists(FileConfiguration config) { - Set keys = config.getConfigurationSection("ItemList").getKeys(false); + private void readLists() { + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "flags.yml")); + Set keys = flags.getConfigurationSection("ItemList").getKeys(false); if (keys != null) { for (String key : keys) { try { - WorldItemList list = WorldItemList.readList(config.getConfigurationSection("ItemList." + key)); + WorldItemList list = WorldItemList.readList(flags.getConfigurationSection("ItemList." + key)); lists.add(list); //System.out.println("Debug: read list " + key + " world: " + list.getWorld() + " group: " + list.getGroup() + " itemcount:" + list.getListSize()); } catch (Exception ex) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 0cd632d57..4c64b0d08 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -140,11 +140,14 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + Entity entity = event.getEntity(); if (entity == null) return; - if (Residence.isDisabledWorldListener(entity.getWorld())) - return; if (!Residence.getNms().isAnimal(entity)) return; @@ -183,13 +186,15 @@ public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { - // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + Entity entity = event.getEntity(); if (entity == null) return; - if (Residence.isDisabledWorldListener(entity.getWorld())) - return; if (!Residence.getNms().isAnimal(entity)) return; @@ -745,11 +750,13 @@ public void onSplashPotion(PotionSplashEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; Entity entity = event.getEntity(); if (entity == null) return; - if (Residence.isDisabledWorldListener(entity.getWorld())) - return; if (!(entity instanceof Player)) return; @@ -787,12 +794,30 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { event.setCancelled(true); } + @EventHandler + public void OnPlayerDamageByLightning(EntityDamageEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + if (event.getCause() != DamageCause.LIGHTNING) + return; + Entity ent = event.getEntity(); + if (!(ent instanceof Player)) + return; + if (!Residence.getPermsByLoc(ent.getLocation()).has("pvp", true)) + event.setCancelled(true); + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { - // disabling event on world if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) return; + if (event.isCancelled()) + return; + if (event.getEntityType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event.getEntityType())) return; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index fee112724..047e57c96 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -6,6 +6,8 @@ import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; import com.nijikokun.bukkit.Permissions.Permissions; import com.platymuus.bukkit.permissions.PermissionsPlugin; + +import java.io.File; import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; @@ -15,6 +17,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -26,16 +29,13 @@ public class PermissionManager { protected HashMap groupsMap = new HashMap(); - public PermissionManager(FileConfiguration config, FileConfiguration flags) { + public PermissionManager() { try { groups = new LinkedHashMap(); playersGroup = Collections.synchronizedMap(new HashMap()); globalFlagPerms = new FlagPermissions(); - this.readConfig(config, flags); - boolean enable = config.getBoolean("Global.EnablePermissions", true); - if (enable) { - this.checkPermissions(); - } + this.readConfig(); + this.checkPermissions(); } catch (Exception ex) { Logger.getLogger(PermissionManager.class.getName()).log(Level.SEVERE, null, ex); } @@ -172,10 +172,14 @@ private void checkPermissions() { Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Permissions plugin NOT FOUND!"); } - private void readConfig(FileConfiguration config, FileConfiguration flags) { + private void readConfig() { + + FileConfiguration groupsFile = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "groups.yml")); + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "flags.yml")); + String defaultGroup = Residence.getConfigManager().getDefaultGroup().toLowerCase(); globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", flags.getConfigurationSection("Global")); - ConfigurationSection nodes = config.getConfigurationSection("Groups"); + ConfigurationSection nodes = groupsFile.getConfigurationSection("Groups"); if (nodes != null) { Set entrys = nodes.getKeys(false); int i = 0; @@ -195,11 +199,11 @@ private void readConfig(FileConfiguration config, FileConfiguration flags) { if (!groups.containsKey(defaultGroup)) { groups.put(defaultGroup, new PermissionGroup(defaultGroup)); } - if (config.isConfigurationSection("GroupAssignments")) { - Set keys = config.getConfigurationSection("GroupAssignments").getKeys(false); + if (groupsFile.isConfigurationSection("GroupAssignments")) { + Set keys = groupsFile.getConfigurationSection("GroupAssignments").getKeys(false); if (keys != null) { for (String key : keys) { - playersGroup.put(key.toLowerCase(), config.getString("GroupAssignments." + key, defaultGroup).toLowerCase()); + playersGroup.put(key.toLowerCase(), groupsFile.getString("GroupAssignments." + key, defaultGroup).toLowerCase()); } } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index cd5e76c57..613b01b48 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -221,8 +221,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } String NName = name; - if (!Residence.getConfigManager().isResCreateCaseSensitive()) - name = name.toLowerCase(); + name = name.toLowerCase(); if (areas.containsKey(NName)) { if (player != null) { @@ -485,8 +484,7 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l } String NName = name; - if (!Residence.getConfigManager().isResCreateCaseSensitive()) - name = name.toLowerCase(); + name = name.toLowerCase(); if (subzones.containsKey(name)) { if (player != null) { @@ -609,8 +607,7 @@ public ClaimedResidence getSubzoneByLoc(Location loc) { } public ClaimedResidence getSubzone(String subzonename) { - if (!Residence.getConfigManager().isResCreateCaseSensitive()) - subzonename = subzonename.toLowerCase(); + subzonename = subzonename.toLowerCase(); if (!subzonename.contains(".")) { return subzones.get(subzonename); @@ -695,8 +692,7 @@ public boolean removeSubzone(String name) { } public boolean removeSubzone(Player player, String name, boolean resadmin) { - if (!Residence.getConfigManager().isResCreateCaseSensitive()) - name = name.toLowerCase(); + name = name.toLowerCase(); ClaimedResidence res = subzones.get(name); if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); @@ -723,6 +719,15 @@ public long getTotalSize() { return size; } + public long getXZSize() { + Collection set = areas.values(); + long size = 0; + for (CuboidArea entry : set) { + size = size + (entry.getXSize() * entry.getZSize()); + } + return size; + } + public CuboidArea[] getAreaArray() { CuboidArea[] temp = new CuboidArea[areas.size()]; int i = 0; @@ -1293,10 +1298,7 @@ public static ClaimedResidence load(Map root, ClaimedResidence p if (Residence.getConfigManager().flagsInherit()) subres.getPermissions().setParent(res.getPermissions()); - if (Residence.getConfigManager().isResCreateCaseSensitive()) - res.subzones.put(map.getKey(), subres); - else - res.subzones.put(map.getKey().toLowerCase(), subres); + res.subzones.put(map.getKey().toLowerCase(), subres); } res.parent = parent; @@ -1349,10 +1351,8 @@ public boolean renameSubzone(Player player, String oldName, String newName, bool } String newN = newName; - if (!Residence.getConfigManager().isResCreateCaseSensitive()) { - oldName = oldName.toLowerCase(); - newName = newName.toLowerCase(); - } + oldName = oldName.toLowerCase(); + newName = newName.toLowerCase(); ClaimedResidence res = subzones.get(oldName); if (res == null) { @@ -1417,15 +1417,6 @@ public String getName() { return Residence.getResidenceManager().getNameByRes(this); } - public String getShortName() { - String name = Residence.getResidenceManager().getNameByRes(this); - if (name.contains(".")) { - String[] split = name.split("\\."); - name = split[split.length - 1]; - } - return name; - } - public void remove() { String name = getName(); if (name != null) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index fd5b6204a..f1acf1ea2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -87,42 +87,22 @@ public ClaimedResidence getByLoc(Location loc) { } public ClaimedResidence getByName(String name) { - return getByName(name, false); - } - - public ClaimedResidence getByName(String name, boolean tp) { if (name == null) { return null; } String[] split = name.split("\\."); - if (Residence.getConfigManager().isResCreateCaseSensitive() && !tp || - tp && Residence.getConfigManager().isResTpCaseSensitive()) { - if (split.length == 1) { - return residences.get(name); - } - ClaimedResidence res = residences.get(split[0]); - for (int i = 1; i < split.length; i++) { - if (res != null) { - res = res.getSubzone(split[i]); - } else { - return null; - } - } - return res; - } else { - if (split.length == 1) { - return residences.get(name.toLowerCase()); - } - ClaimedResidence res = residences.get(split[0].toLowerCase()); - for (int i = 1; i < split.length; i++) { - if (res != null) { - res = res.getSubzone(split[i].toLowerCase()); - } else { - return null; - } + if (split.length == 1) { + return residences.get(name.toLowerCase()); + } + ClaimedResidence res = residences.get(split[0].toLowerCase()); + for (int i = 1; i < split.length; i++) { + if (res != null) { + res = res.getSubzone(split[i].toLowerCase()); + } else { + return null; } - return res; } + return res; } public String getNameByLoc(Location loc) { @@ -228,20 +208,10 @@ public boolean addResidence(Player player, String owner, String name, Location l newRes.setLeaveMessage(group.getDefaultLeaveMessage()); newRes.setName(name); - if (Residence.getConfigManager().isResCreateCaseSensitive()) { - if (residences.containsKey(name)) { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", name)); - } - return false; - } - } else { - if (residences.containsKey(name.toLowerCase())) { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", name)); - } - return false; - } + if (residences.containsKey(name.toLowerCase())) { + if (player != null) + player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", residences.get(name.toLowerCase()).getResidenceName())); + return false; } newRes.BlockSellPrice = group.getSellPerBlock(); @@ -260,10 +230,7 @@ public boolean addResidence(Player player, String owner, String name, Location l return false; } - if (Residence.getConfigManager().isResCreateCaseSensitive()) - residences.put(name, newRes); - else - residences.put(name.toLowerCase(), newRes); + residences.put(name.toLowerCase(), newRes); calculateChunks(name); Residence.getLeaseManager().removeExpireTime(name); @@ -472,10 +439,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { if (parent == null) { removeChunkList(name); - if (Residence.getConfigManager().isResCreateCaseSensitive()) - residences.remove(name); - else - residences.remove(name.toLowerCase()); + residences.remove(name.toLowerCase()); if (Residence.getConfigManager().isUseClean() && Residence.getConfigManager().getCleanWorlds().contains(res.getWorld())) { CuboidArea area = res.getAreaArray()[0]; @@ -627,8 +591,6 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi sender.sendMessage(ResFlagMsg); } -// sender.sendMessage(lm.getMessage("General.Flags", perms.listFlags())); - if (!Residence.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) sender.sendMessage(lm.getMessage("General.PlayersFlags", perms.listPlayersFlags())); else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Player) { @@ -640,19 +602,8 @@ else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Play if (groupFlags.length() > 0) sender.sendMessage(lm.getMessage("General.GroupFlags", groupFlags)); -// if (!Residence.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) { -// String othersFlags = perms.listOtherPlayersFlags(sender.getName()); -// if (!othersFlags.equalsIgnoreCase("")) -// sender.sendMessage(lm.getMessage("General.OthersFlags", othersFlags)); -// } else { -// String othersFlags = perms.listOtherPlayersFlags(sender.getName()); -// if (!othersFlags.equalsIgnoreCase("")) -// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + perms.listOtherPlayersFlagsRaw(lm.getMessage( -// "General.OthersFlags", ""), sender.getName())); -// } - String msg = ""; - msg += lm.getMessage("General.TotalSize", res.getTotalSize()); + msg += lm.getMessage("General.TotalResSize", res.getTotalSize(), res.getXZSize()); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); @@ -759,7 +710,7 @@ public Map save() { continue; try { - resmap.put(res.getValue().getShortName(), res.getValue().save()); + resmap.put(res.getValue().getResidenceName(), res.getValue().save()); } catch (Exception ex) { Bukkit.getConsoleSender().sendMessage(Residence.prefix + ChatColor.RED + " Failed to save residence (" + res.getKey() + ")!"); Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); @@ -827,13 +778,18 @@ public Map> loadMap(String worldName, Map if (residence.getOwner().equalsIgnoreCase("Server land")) { residence.getPermissions().setOwner(Residence.getServerLandname(), false); } - String resName = res.getKey(); + String resName = res.getKey().toLowerCase(); + + // Checking for duplicated residence names and renaming them + int increment = getNameIncrement(resName, resm); if (residence.getResidenceName() == null) residence.setName(res.getKey()); - if (!Residence.getConfigManager().isResCreateCaseSensitive()) - resName = resName.toLowerCase(); + if (increment > 0) { + residence.setName(residence.getResidenceName() + increment); + resName += increment; + } for (ChunkRef chunk : getChunks(residence)) { List ress = new ArrayList<>(); @@ -859,6 +815,19 @@ public Map> loadMap(String worldName, Map return retRes; } + private int getNameIncrement(String name, ResidenceManager resm) { + String orName = name; + int i = 0; + while (i < 1000) { + if (resm.residences.containsKey(name)) { + i++; + name = orName + i; + } else + break; + } + return i; + } + private static List getChunks(ClaimedResidence res) { List chunks = new ArrayList<>(); for (CuboidArea area : res.getAreaArray()) { @@ -893,32 +862,20 @@ public boolean renameResidence(Player player, String oldName, String newName, bo if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { if (res.getParent() == null) { - if (Residence.getConfigManager().isResCreateCaseSensitive()) { - if (residences.containsKey(newName)) { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", newName)); - } - return false; - } - } else { - if (residences.containsKey(newName.toLowerCase())) { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", newName)); - } - return false; + if (residences.containsKey(newName.toLowerCase())) { + if (player != null) { + player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", newName)); } + return false; } ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); Residence.getServ().getPluginManager().callEvent(resevent); removeChunkList(oldName); res.setName(newName); - if (Residence.getConfigManager().isResCreateCaseSensitive()) - residences.put(newName, res); - else - residences.put(newName.toLowerCase(), res); - residences.remove(oldName); + residences.put(newName.toLowerCase(), res); + residences.remove(oldName.toLowerCase()); Residence.getPlayerManager().renameResidence(player.getName(), res.getName(), newName); @@ -1030,8 +987,8 @@ public Map getResidences() { public void removeChunkList(String name) { if (name == null) return; - if (!Residence.getConfigManager().isResCreateCaseSensitive()) - name = name.toLowerCase(); + + name = name.toLowerCase(); ClaimedResidence res = residences.get(name); if (res != null) { String world = res.getWorld(); @@ -1053,8 +1010,7 @@ public void calculateChunks(String name) { if (name == null) return; - if (!Residence.getConfigManager().isResCreateCaseSensitive()) - name = name.toLowerCase(); + name = name.toLowerCase(); res = residences.get(name); if (res != null) { diff --git a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java index be4cd7e08..383938891 100644 --- a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java +++ b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java @@ -2,6 +2,7 @@ import com.bekvon.bukkit.residence.Residence; +import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; @@ -12,6 +13,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; public class WorldFlagManager { @@ -23,11 +25,7 @@ public WorldFlagManager() { globaldefaults = new FlagPermissions(); worldperms = new HashMap<>(); groupperms = new HashMap<>(); - } - - public WorldFlagManager(FileConfiguration config, FileConfiguration groups) { - this(); - this.parsePerms(config, groups); + this.parsePerms(); } public FlagPermissions getPerms(Player player) { @@ -66,16 +64,18 @@ public FlagPermissions getPerms(String world) { return list; } - public final void parsePerms(FileConfiguration config, FileConfiguration groups) { + public final void parsePerms() { try { + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "flags.yml")); + FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "groups.yml")); - Set keys = config.getConfigurationSection("Global.Flags").getKeys(false); + Set keys = flags.getConfigurationSection("Global.Flags").getKeys(false); if (keys != null) { for (String key : keys) { if (key.equalsIgnoreCase("Global")) { - globaldefaults = FlagPermissions.parseFromConfigNode(key, config.getConfigurationSection("Global.Flags")); + globaldefaults = FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags")); } else { - worldperms.put(key.toLowerCase(), FlagPermissions.parseFromConfigNode(key, config.getConfigurationSection("Global.Flags"))); + worldperms.put(key.toLowerCase(), FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags"))); } } } @@ -83,8 +83,8 @@ public final void parsePerms(FileConfiguration config, FileConfiguration groups) entry.getValue().setParent(globaldefaults); } - if (!groups.isConfigurationSection("Groups")){ - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Your groups.yml file is incorrect!"); + if (!groups.isConfigurationSection("Groups")) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Your groups.yml file is incorrect!"); return; } From 82c2aa5c01a0b40694bf572cc17a991cf2f88bff Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 21 Jun 2016 16:01:13 +0300 Subject: [PATCH 0190/1142] Title messages on teleportation Check move only on block change Teleport outside residence if can't move in residence and there is no previous saved location --- .../bekvon/bukkit/residence/ABInterface.java | 2 + .../bukkit/residence/ConfigManager.java | 7 +++ .../bukkit/residence/LocaleManager.java | 10 ++-- .../residence/actionBarNMS/v1_10_R1.java | 17 +++++++ .../residence/actionBarNMS/v1_7_R4.java | 4 ++ .../residence/actionBarNMS/v1_8_R1.java | 17 +++++++ .../residence/actionBarNMS/v1_8_R2.java | 17 +++++++ .../residence/actionBarNMS/v1_8_R3.java | 17 +++++++ .../residence/actionBarNMS/v1_9_R1.java | 17 +++++++ .../residence/actionBarNMS/v1_9_R2.java | 17 +++++++ .../listeners/ResidencePlayerListener.java | 7 ++- .../protection/ClaimedResidence.java | 47 ++++++++++++------- .../bukkit/residence/utils/ActionBar.java | 5 ++ 13 files changed, 162 insertions(+), 22 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ABInterface.java b/src/com/bekvon/bukkit/residence/ABInterface.java index 2f1a6a896..e84b7d078 100644 --- a/src/com/bekvon/bukkit/residence/ABInterface.java +++ b/src/com/bekvon/bukkit/residence/ABInterface.java @@ -8,4 +8,6 @@ public interface ABInterface { public void send(CommandSender sender, String msg); public void send(Player player, String msg); + + public void sendTitle(Player player, Object title, Object subtitle); } diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index e5c745be6..af3569b14 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -85,6 +85,7 @@ public class ConfigManager { protected int MinimalResY; protected int MinimalResZ; protected int TeleportDelay; + protected boolean TeleportTitleMessage; protected int VisualizerRowSpacing; protected int VisualizerCollumnSpacing; protected boolean flagsInherit; @@ -473,6 +474,8 @@ public void UpdateConfigFile() { c.getW().addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); TeleportDelay = c.get("Global.Tp.TeleportDelay", 3); + c.getW().addComment("Global.Tp.TeleportTitleMessage", "Show aditional message in title message area when player is teleporting to residence"); + TeleportTitleMessage = c.get("Global.Tp.TeleportTitleMessage", true); if (conf.contains("Global.RandomTeleportation.WorldName")) { @@ -1019,6 +1022,10 @@ public int getTeleportDelay() { return TeleportDelay; } + public boolean isTeleportTitleMessage() { + return TeleportTitleMessage; + } + public boolean useLegacyPermissions() { return legacyperms; } diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 1577329a8..432137792 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -257,7 +257,7 @@ public void LoadLang(String lang) { c.get("Language.Residence.CanBeRented", "&6%1&e can be rented for &6%2 &eper &6%3 &edays. &6/res market rent"); c.get("Language.Residence.CanBeBought", "&6%1&e can be bought for &6%2&e. &6/res market buy"); - + c.get("Language.Residence.IsForRent", "&6(For rent)"); c.get("Language.Residence.IsForSale", "&6(For sale)"); c.get("Language.Residence.IsRented", "&6(Rented)"); @@ -440,10 +440,10 @@ public void LoadLang(String lang) { c.get("Language.General.TeleportSuccess", "&eTeleported!"); c.get("Language.General.TeleportConfirm", "&cThis teleport is not safe, you will fall for &6%1 &cblocks. Use &6/res tpconfirm &cto perform teleportation anyways."); - c.get("Language.General.TeleportStarted", - "&eTeleportation to &6%1 &estarted, don't move for next &6%2 &esec."); - c.get("Language.General.TeleportCanceled", - "&eTeleportation canceled!"); + c.get("Language.General.TeleportStarted", "&eTeleportation to &6%1 &estarted, don't move for next &6%2 &esec."); + c.get("Language.General.TeleportTitle", "&eTeleporting!"); + c.get("Language.General.TeleportTitleTime", "&6%1"); + c.get("Language.General.TeleportCanceled", "&eTeleportation canceled!"); c.get("Language.General.NoTeleportConfirm", "&eThere is no teleports waiting for confirmation!"); c.get("Language.General.HelpPageHeader", "&eHelp Pages - &6%1 &e- Page <&6%2 &eof &6%3&e>"); c.get("Language.General.ListExists", "&cList already exists..."); diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java index 744971f5a..c4beb40e1 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java @@ -3,12 +3,15 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_10_R1.util.CraftChatMessage; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.ABInterface; import net.minecraft.server.v1_10_R1.IChatBaseComponent; import net.minecraft.server.v1_10_R1.IChatBaseComponent.ChatSerializer; +import net.minecraft.server.v1_10_R1.PacketPlayOutTitle.EnumTitleAction; import net.minecraft.server.v1_10_R1.PacketPlayOutChat; +import net.minecraft.server.v1_10_R1.PacketPlayOutTitle; public class v1_10_R1 implements ABInterface { @@ -31,4 +34,18 @@ public void send(Player player, String msg) { player.sendMessage(msg); } } + + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } } diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java index 27b07631b..1dd00f3ff 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java @@ -16,4 +16,8 @@ public void send(CommandSender sender, String msg) { public void send(Player player, String msg) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); } + + public void sendTitle(Player player, Object title, Object subtitle) { + return; + } } diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java index 2e6bd27a5..034ffc64c 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java @@ -2,10 +2,13 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_8_R1.util.CraftChatMessage; import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.ABInterface; +import net.minecraft.server.v1_8_R1.PacketPlayOutTitle; +import net.minecraft.server.v1_8_R1.EnumTitleAction; import net.minecraft.server.v1_8_R1.ChatSerializer; import net.minecraft.server.v1_8_R1.IChatBaseComponent; import net.minecraft.server.v1_8_R1.PacketPlayOutChat; @@ -31,4 +34,18 @@ public void send(Player player, String msg) { player.sendMessage(msg); } } + + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } } diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java index 5098a658f..b5509781d 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java @@ -2,10 +2,13 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_8_R2.util.CraftChatMessage; import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.ABInterface; +import net.minecraft.server.v1_8_R2.PacketPlayOutTitle; +import net.minecraft.server.v1_8_R2.PacketPlayOutTitle.EnumTitleAction; import net.minecraft.server.v1_8_R2.IChatBaseComponent; import net.minecraft.server.v1_8_R2.IChatBaseComponent.ChatSerializer; import net.minecraft.server.v1_8_R2.PacketPlayOutChat; @@ -31,4 +34,18 @@ public void send(Player player, String msg) { player.sendMessage(msg); } } + + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } } diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java index a2229bf87..86556cbb4 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java @@ -2,10 +2,13 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_8_R3.util.CraftChatMessage; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.ABInterface; +import net.minecraft.server.v1_8_R3.PacketPlayOutTitle; +import net.minecraft.server.v1_8_R3.PacketPlayOutTitle.EnumTitleAction; import net.minecraft.server.v1_8_R3.IChatBaseComponent; import net.minecraft.server.v1_8_R3.IChatBaseComponent.ChatSerializer; import net.minecraft.server.v1_8_R3.PacketPlayOutChat; @@ -31,4 +34,18 @@ public void send(Player player, String msg) { player.sendMessage(msg); } } + + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } } diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java index 5382ca375..86b2c10ae 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java @@ -2,10 +2,13 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_9_R1.util.CraftChatMessage; import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.ABInterface; +import net.minecraft.server.v1_9_R1.PacketPlayOutTitle; +import net.minecraft.server.v1_9_R1.PacketPlayOutTitle.EnumTitleAction; import net.minecraft.server.v1_9_R1.IChatBaseComponent; import net.minecraft.server.v1_9_R1.IChatBaseComponent.ChatSerializer; import net.minecraft.server.v1_9_R1.PacketPlayOutChat; @@ -31,4 +34,18 @@ public void send(Player player, String msg) { player.sendMessage(msg); } } + + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } } diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java index 9d0559f99..6cd423ec5 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java @@ -2,10 +2,13 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_9_R2.util.CraftChatMessage; import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.ABInterface; +import net.minecraft.server.v1_9_R2.PacketPlayOutTitle; +import net.minecraft.server.v1_9_R2.PacketPlayOutTitle.EnumTitleAction; import net.minecraft.server.v1_9_R2.IChatBaseComponent; import net.minecraft.server.v1_9_R2.IChatBaseComponent.ChatSerializer; import net.minecraft.server.v1_9_R2.PacketPlayOutChat; @@ -31,4 +34,18 @@ public void send(Player player, String msg) { player.sendMessage(msg); } } + + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 14f7eb4a7..d8bd71406 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1338,7 +1338,7 @@ public void onPlayerMove(PlayerMoveEvent event) { Location locfrom = event.getFrom(); Location locto = event.getTo(); - if (locfrom.getX() == locto.getX() && locfrom.getY() == locto.getY() && locfrom.getZ() == locto.getZ()) + if (locfrom.getBlockX() == locto.getBlockX() && locfrom.getBlockY() == locto.getBlockY() && locfrom.getBlockZ() == locto.getBlockZ()) return; String name = player.getName(); @@ -1358,6 +1358,8 @@ public void onPlayerMove(PlayerMoveEvent event) { .getName())) { Residence.getTeleportDelayMap().remove(player.getName()); player.sendMessage(Residence.getLM().getMessage("General.TeleportCanceled")); + if (Residence.getConfigManager().isTeleportTitleMessage()) + Residence.getAB().sendTitle(player, "", ""); } } @@ -1476,6 +1478,9 @@ public void run() { player.teleport(newLoc); } else if (lastLoc != null) { player.teleport(lastLoc); + } else if (lastLoc == null) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.teleport(newLoc); } if (Residence.getConfigManager().useActionBar()) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 613b01b48..9f93f291b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -21,6 +21,7 @@ import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; + import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; @@ -1067,6 +1068,8 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin) { reqPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportStarted", this.getName(), Residence.getConfigManager().getTeleportDelay())); + if (Residence.getConfigManager().isTeleportTitleMessage()) + TpTimer(reqPlayer, Residence.getConfigManager().getTeleportDelay()); ResidenceCommandListener.getTeleportDelayMap().add(reqPlayer.getName()); } @@ -1087,29 +1090,41 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r performDelaydTp(targloc, targetPlayer, reqPlayer, true); else performInstantTp(targloc, targetPlayer, reqPlayer, true); - } } + public void TpTimer(Player player, int t) { + Residence.getAB().sendTitle(player, Residence.getLM().getMessage("General.TeleportTitle"), Residence.getLM().getMessage("General.TeleportTitleTime", t)); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + public void run() { + if (!ResidenceCommandListener.getTeleportDelayMap().contains(player.getName())) + return; + if (t > 1) + TpTimer(player, t - 1); + } + }, 20L); + } + public void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); Residence.getServ().getPluginManager().callEvent(tpevent); - if (!tpevent.isCancelled()) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - public void run() { - if (!ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) - return; - else if (ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName())) - ResidenceCommandListener.getTeleportDelayMap().remove(targetPlayer.getName()); - targetPlayer.teleport(targloc); - if (near) - targetPlayer.sendMessage(Residence.getLM().getMessage("Residence.TeleportNear")); - else - targetPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportSuccess")); + if (tpevent.isCancelled()) + return; + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + public void run() { + if (!ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) return; - } - }, Residence.getConfigManager().getTeleportDelay() * 20L); - } + else if (ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName())) + ResidenceCommandListener.getTeleportDelayMap().remove(targetPlayer.getName()); + targetPlayer.teleport(targloc); + if (near) + targetPlayer.sendMessage(Residence.getLM().getMessage("Residence.TeleportNear")); + else + targetPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportSuccess")); + return; + } + }, Residence.getConfigManager().getTeleportDelay() * 20L); } private void performInstantTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index 92d506bb7..766d19ae8 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -115,4 +115,9 @@ private String getChatSerializerClasspath() { private String getPacketPlayOutChat() { return "net.minecraft.server." + version + ".PacketPlayOutChat"; } + + @Override + public void sendTitle(Player player, Object title, Object subtitle) { + return; + } } From b0b9287b6f73624516a10da2b67dc223529a9e74 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 22 Jun 2016 13:41:08 +0300 Subject: [PATCH 0191/1142] Stick as default selection tool --- .../bukkit/residence/ConfigManager.java | 82 ++++++++++++++++++- .../bekvon/bukkit/residence/Residence.java | 12 +++ .../listeners/ResidencePlayerListener.java | 2 +- .../residence/selection/SelectionManager.java | 32 ++++++-- src/config.yml | 4 +- 5 files changed, 117 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index af3569b14..7b6d6f83d 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -2,6 +2,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Effect; import org.bukkit.Location; import com.bekvon.bukkit.residence.containers.GuiItems; @@ -172,6 +173,12 @@ public class ConfigManager { protected ParticleEffects OverlapFrame; protected ParticleEffects OverlapSides; + protected Effect SelectedSpigotFrame; + protected Effect SelectedSpigotSides; + + protected Effect OverlapSpigotFrame; + protected Effect OverlapSpigotSides; + // DynMap public boolean DynMapUse; public boolean DynMapShowFlags; @@ -778,29 +785,80 @@ public void UpdateConfigFile() { " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance"); - SelectedFrame = ParticleEffects.fromName(c.get("Global.Visualizer.Selected.Frame", "happyVillager")); + // Frame + String efname = c.get("Global.Visualizer.Selected.Frame", "happyVillager"); + SelectedFrame = ParticleEffects.fromName(efname); if (SelectedFrame == null) { SelectedFrame = ParticleEffects.VILLAGER_HAPPY; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } + efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; + for (Effect one : Effect.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { + SelectedSpigotFrame = one; + break; + } + } + if (SelectedSpigotFrame == null) { + SelectedSpigotFrame = Effect.HAPPY_VILLAGER; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } - SelectedSides = ParticleEffects.fromName(c.get("Global.Visualizer.Selected.Sides", "reddust")); + // Sides + efname = c.get("Global.Visualizer.Selected.Sides", "reddust"); + SelectedSides = ParticleEffects.fromName(efname); if (SelectedSides == null) { SelectedSides = ParticleEffects.REDSTONE; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } + efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; + for (Effect one : Effect.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { + SelectedSpigotSides = one; + break; + } + } + if (SelectedSpigotSides == null) { + SelectedSpigotSides = Effect.COLOURED_DUST; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } - OverlapFrame = ParticleEffects.fromName(c.get("Global.Visualizer.Overlap.Frame", "FLAME")); + efname = c.get("Global.Visualizer.Overlap.Frame", "FLAME"); + OverlapFrame = ParticleEffects.fromName(efname); if (OverlapFrame == null) { OverlapFrame = ParticleEffects.FLAME; Bukkit.getConsoleSender().sendMessage("Can't find effect for Overlap Frame with this name, it was set to default"); } - OverlapSides = ParticleEffects.fromName(c.get("Global.Visualizer.Overlap.Sides", "FLAME")); + efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; + for (Effect one : Effect.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { + OverlapSpigotFrame = one; + break; + } + } + if (OverlapSpigotFrame == null) { + OverlapSpigotFrame = Effect.FLAME; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } + + efname = c.get("Global.Visualizer.Overlap.Sides", "FLAME"); + OverlapSides = ParticleEffects.fromName(efname); if (OverlapSides == null) { OverlapSides = ParticleEffects.FLAME; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } + efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; + for (Effect one : Effect.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { + OverlapSpigotSides = one; + break; + } + } + if (OverlapSpigotSides == null) { + OverlapSpigotSides = Effect.FLAME; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } c.getW().addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); BounceAnimation = c.get("Global.BounceAnimation", true); @@ -1017,6 +1075,22 @@ public ParticleEffects getOverlapFrame() { public ParticleEffects getOverlapSides() { return OverlapSides; } + + public Effect getSelectedSpigotFrame() { + return SelectedSpigotFrame; + } + + public Effect getSelectedSpigotSides() { + return SelectedSpigotSides; + } + + public Effect getOverlapSpigotFrame() { + return OverlapSpigotFrame; + } + + public Effect getOverlapSpigotSides() { + return OverlapSpigotSides; + } public int getTeleportDelay() { return TeleportDelay; diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 63e28442b..4ae757b58 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -119,6 +119,8 @@ public class Residence extends JavaPlugin { public static PermissionManager gmanager; protected static ConfigManager cmanager; + protected static boolean spigotPlatform = false; + protected static SignUtil signmanager; protected static ResidenceBlockListener blistener; @@ -189,6 +191,10 @@ public class Residence extends JavaPlugin { public static String prefix = ChatColor.GREEN + "[" + ChatColor.GOLD + "Residence" + ChatColor.GREEN + "]" + ChatColor.GRAY; + public static boolean isSpigot() { + return spigotPlatform; + } + public static HashMap getTeleportMap() { return teleportMap; } @@ -399,6 +405,12 @@ public void onEnable() { FlagUtilManager = new FlagUtil(this); getFlagUtilManager().load(); + try { + Class.forName("org.bukkit.entity.Player.Spigot"); + spigotPlatform = true; + } catch (Exception e) { + } + String packageName = getServer().getClass().getPackage().getName(); String[] packageSplit = packageName.split("\\."); String version = packageSplit[packageSplit.length - 1].substring(0, packageSplit[packageSplit.length - 1].length() - 3); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index d8bd71406..b66bec6f7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1489,9 +1489,9 @@ public void run() { player.sendMessage(Residence.getLM().getMessage("Residence.MoveDeny", orres.getName())); } return; - // Preventing fly in residence only when player has move permission } + // Preventing fly in residence only when player has move permission if (player.isFlying() && res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { Location lc = player.getLocation(); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 07db2f8fe..41c4cd109 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -16,6 +16,7 @@ import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.entity.Player; +import org.bukkit.entity.Player.Spigot; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; @@ -144,20 +145,35 @@ public void showSelectionInfo(Player player) { public static boolean showParticle(Player player, Location Current, boolean error) { if (!player.getLocation().getWorld().getName().equalsIgnoreCase(Current.getWorld().getName())) return false; - if (!error) { - Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, Current, player); - } else - Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, Current, player); + + if (Residence.isSpigot()) { + if (!error) { + player.spigot().playEffect(Current, Residence.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + } else + player.spigot().playEffect(Current, Residence.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + } else { + if (!error) { + Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, Current, player); + } else + Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, Current, player); + } return false; } public static boolean showParticleWalls(final Player player, final Location Current, final boolean error) { if (!player.getLocation().getWorld().getName().equalsIgnoreCase(Current.getWorld().getName())) return false; - if (!error) - Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, Current, player); - else - Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, Current, player); + if (Residence.isSpigot()) { + if (!error) { + player.spigot().playEffect(Current, Residence.getConfigManager().getSelectedSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + } else + player.spigot().playEffect(Current, Residence.getConfigManager().getOverlapSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + } else { + if (!error) + Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, Current, player); + else + Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, Current, player); + } return false; } diff --git a/src/config.yml b/src/config.yml index 8bb82367c..0b6e35aa0 100644 --- a/src/config.yml +++ b/src/config.yml @@ -3,9 +3,9 @@ Global: # This loads the .yml file in the Residence Language folder # All Residence text comes from this file. (NOT DONE YET) Language: English - # Wooden Hoe is the default selection tool for Residence. + # Stick is the default selection tool for Residence. # You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values - SelectionToolId: 290 + SelectionToolId: 280 # This determins which tool you can use to see info on residences, default is String. # Simply equip this tool and hit a location inside the residence and it will display the info for it. InfoToolId: 287 From fad286e7ac65d4f334ae6839c3cc0f77a36a248b Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 22 Jun 2016 13:41:51 +0300 Subject: [PATCH 0192/1142] Previous push included spigot particle show support --- src/com/bekvon/bukkit/residence/selection/SelectionManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 41c4cd109..e4acf9cc0 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -16,7 +16,6 @@ import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.entity.Player; -import org.bukkit.entity.Player.Spigot; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; From f5621b79a746f7f48e3bbdf69c2e6949d90793fd Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 22 Jun 2016 14:25:53 +0300 Subject: [PATCH 0193/1142] Updated czech locale --- src/Language/Czech.yml | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Language/Czech.yml b/src/Language/Czech.yml index 8ea6bddb2..0da3a7afc 100644 --- a/src/Language/Czech.yml +++ b/src/Language/Czech.yml @@ -54,7 +54,7 @@ Language: Success: '&eVyber uspesny!' Fail: '&cNeplatny vyberovy prikaz...' Bedrock: '&eVyber rozsiren na nejnizsi povolenou uroven.' - Sky: '&eSVyber rozsiren na nejvyssi povolenou uroven.' + Sky: '&eVyber rozsiren na nejvyssi povolenou uroven.' Area: '&eVybrana oblast &6%1 &eresidence &6%2' Tool: '&e- Vyberovy nastroj: &6%1' PrimaryPoint: '&eVybran &6primarni &evyberovy bod %1' @@ -291,8 +291,7 @@ Language: NewBoard: '&6Uspesne pridana nova obchodni tabule' DeleteBoard: '&6Klikni pravym klickem na ceduli pro smazani tabule' DeletedBoard: '&6Tabule smazana' - IncorrectBoard: '&cThis is not sign board, try performing command again and clicking - correct sign' + IncorrectBoard: '&cToto neni cedulka, zkuste zadat prikaz znovu a kliknete na cedulku' InvalidSelection: '&cLeft click with selection tool top left sign and then right click bottom right' VoteChanged: '&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence' @@ -307,7 +306,7 @@ Language: '2': '&9%1' '3': '&4%1' '4': '&8%1&e (&8%2&e)' - Likes4: '&9Likes: &8%2' + Likes4: '&9Libi se: &8%2' RandomTeleport: TpLimit: '&eNemuzes se teleportovat tak rychle, prosim pockej &6%1 &esekund' TeleportSuccess: '&eTeleportovano na souradnice X:&6%1&e, Y:&6%2&e, Z:&6%3' @@ -385,8 +384,8 @@ Language: Subzones: '&eSubzony' # The below lines represent various messages residence sends to the players. # Note that some messages have variables such as %1 that are inserted at runtime. - NewPlayerInfo: '&ePokud si chces ochranit dum, prosim pouzij drevenou motyku k - diagonalnimu oznaceni oblastni a napis &2/res create TvujNazevResidence' + NewPlayerInfo: '&ePokud si chces ochranit dum, prosim pouzij tycku k + diagonalnimu oznaceni oblastni a napis &2/res create VasNazevResidence' CommandHelp: Description: Napoveda k Residenci SubCommands: @@ -481,11 +480,11 @@ CommandHelp: - Removes essential flags from player Args: '[residence] [playername]' give: - Description: Give residence to player. + Description: Da hraci residenci. Info: - - '&eUsage: &6/res give [player]' - - Gives your owned residence to target player - Args: '[residence] [playername]' + - '&ePouziti: &6/res give [hrac]' + - Da residenci urcenu hraci + Args: '[residence] [hrac]' info: Description: Zobrazit info o residenci. Info: @@ -1224,4 +1223,4 @@ CommandHelp: version: Description: Verze residence Info: - - '&ePouziti: &6/res version' + - '&ePouziti: &6/res version' \ No newline at end of file From 310a9b16e7f8fe15e4b46b2c64ad24b5e8e132c8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 22 Jun 2016 16:34:52 +0300 Subject: [PATCH 0194/1142] Check if res name is not null before converting to lovercase --- .../bukkit/residence/containers/ResidencePlayer.java | 6 ++++++ .../bukkit/residence/protection/ClaimedResidence.java | 7 ++++++- src/plugin.yml | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index ed89ab8db..eb193b0fb 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -177,11 +177,17 @@ public void addResidence(ClaimedResidence residence) { } public void removeResidence(String residence) { + if (residence == null) + return; residence = residence.toLowerCase(); this.ResidenceList.remove(residence); } public void renameResidence(String oldResidence, String newResidence) { + if (oldResidence == null) + return; + if (newResidence == null) + return; oldResidence = oldResidence.toLowerCase(); newResidence = newResidence.toLowerCase(); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 9f93f291b..133a9872d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -693,6 +693,8 @@ public boolean removeSubzone(String name) { } public boolean removeSubzone(Player player, String name, boolean resadmin) { + if (name == null) + return false; name = name.toLowerCase(); ClaimedResidence res = subzones.get(name); if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { @@ -1364,7 +1366,10 @@ public boolean renameSubzone(Player player, String oldName, String newName, bool player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); return false; } - + if (oldName == null) + return false; + if (newName == null) + return false; String newN = newName; oldName = oldName.toLowerCase(); newName = newName.toLowerCase(); diff --git a/src/plugin.yml b/src/plugin.yml index c005b5c0f..b5594a862 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.3.0.0 +version: 4.4.0.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 1bd15cac9d21baba4322491fde2bc605009646cb Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 24 Jun 2016 12:07:41 +0300 Subject: [PATCH 0195/1142] Better worldGuard support / missing point on selection visualizer --- src/com/bekvon/bukkit/residence/Residence.java | 12 ++++++++++++ .../bekvon/bukkit/residence/commands/list.java | 4 ++-- .../bukkit/residence/commands/listhidden.java | 4 ++-- .../listeners/ResidencePlayerListener.java | 2 +- .../residence/protection/ClaimedResidence.java | 2 +- .../residence/protection/ResidenceManager.java | 18 +++++++++--------- .../residence/selection/SelectionManager.java | 2 +- .../residence/selection/WorldGuardUtil.java | 4 +++- .../residence/text/help/InformationPager.java | 2 ++ .../bekvon/bukkit/residence/utils/Sorting.java | 4 ++++ src/plugin.yml | 2 +- 11 files changed, 38 insertions(+), 18 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 4ae757b58..8488cfdc3 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -786,6 +786,18 @@ private void setWorldEdit() { private void setWorldGuard() { Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); if (wgplugin != null) { + try { + Class.forName("com.sk89q.worldedit.BlockVector"); + Class.forName("com.sk89q.worldguard.bukkit.RegionContainer"); + Class.forName("com.sk89q.worldguard.protection.ApplicableRegionSet"); + Class.forName("com.sk89q.worldguard.protection.managers.RegionManager"); + Class.forName("com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion"); + Class.forName("com.sk89q.worldguard.protection.regions.ProtectedRegion"); + } catch (Exception e) { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + ChatColor.RED + + " Found WorldGuard, but its not supported by Residence plugin. Please update WorldGuard to latest version"); + return; + } wg = (WorldGuardPlugin) wgplugin; Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found WorldGuard"); } diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 08a5e30df..5053e4bce 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -20,12 +20,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } if (args.length == 1 && sender instanceof Player) { - Residence.getResidenceManager().listResidences(sender); + Residence.getResidenceManager().listResidences(sender, resadmin); return true; } else if (args.length == 2) { try { Integer.parseInt(args[1]); - Residence.getResidenceManager().listResidences(sender, page); + Residence.getResidenceManager().listResidences(sender, page, resadmin); } catch (Exception ex) { Residence.getResidenceManager().listResidences(sender, args[1], resadmin); } diff --git a/src/com/bekvon/bukkit/residence/commands/listhidden.java b/src/com/bekvon/bukkit/residence/commands/listhidden.java index 27bc35aef..40bd1fedc 100644 --- a/src/com/bekvon/bukkit/residence/commands/listhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listhidden.java @@ -28,11 +28,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Integer.parseInt(args[1]); Residence.getResidenceManager().listResidences(sender, page, true, true); } catch (Exception ex) { - Residence.getResidenceManager().listResidences(sender, args[1], 1, true, true); + Residence.getResidenceManager().listResidences(sender, args[1], 1, true, true, resadmin); } return true; } else if (args.length == 3) { - Residence.getResidenceManager().listResidences(sender, args[1], page, true, true); + Residence.getResidenceManager().listResidences(sender, args[1], page, true, true, resadmin); return true; } return false; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b66bec6f7..9c70c5b7b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -504,7 +504,7 @@ public void onSignCreate(SignChangeEvent event) { return; } - ClaimedResidence residence = res; + final ClaimedResidence residence = res; boolean ForSale = Residence.getTransactionManager().isForSale(landName); boolean ForRent = Residence.getRentManager().isForRent(landName); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 133a9872d..e571e5862 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1095,7 +1095,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } } - public void TpTimer(Player player, int t) { + public void TpTimer(final Player player, final int t) { Residence.getAB().sendTitle(player, Residence.getLM().getMessage("General.TeleportTitle"), Residence.getLM().getMessage("General.TeleportTitleTime", t)); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { public void run() { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index f1acf1ea2..1458c88bc 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -257,31 +257,31 @@ public void listResidences(CommandSender sender) { this.listResidences(sender, sender.getName(), 1); } - public void listResidences(CommandSender sender, int page) { - this.listResidences(sender, sender.getName(), page); + public void listResidences(CommandSender sender, boolean resadmin) { + this.listResidences(sender, sender.getName(), 1, false, false, resadmin); } public void listResidences(CommandSender sender, String targetplayer, boolean showhidden) { - this.listResidences(sender, targetplayer, 1, showhidden, false); + this.listResidences(sender, targetplayer, 1, showhidden, false, showhidden); } public void listResidences(CommandSender sender, String targetplayer, int page) { - this.listResidences(sender, targetplayer, page, false, false); + this.listResidences(sender, targetplayer, page, false, false, false); } public void listResidences(CommandSender sender, int page, boolean showhidden) { - this.listResidences(sender, sender.getName(), page, showhidden, false); + this.listResidences(sender, sender.getName(), page, showhidden, false, showhidden); } public void listResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { - this.listResidences(sender, sender.getName(), page, showhidden, onlyHidden); + this.listResidences(sender, sender.getName(), page, showhidden, onlyHidden, showhidden); } public void listResidences(CommandSender sender, String string, int page, boolean showhidden) { - this.listResidences(sender, string, page, showhidden, false); + this.listResidences(sender, string, page, showhidden, false, showhidden); } - public void listResidences(final CommandSender sender, final String targetplayer, final int page, boolean showhidden, final boolean onlyHidden) { + public void listResidences(final CommandSender sender, final String targetplayer, final int page, boolean showhidden, final boolean onlyHidden, boolean resadmin) { if (showhidden && !Residence.isResAdminOn(sender) && !sender.getName().equalsIgnoreCase(targetplayer)) { showhidden = false; } else if (sender.getName().equalsIgnoreCase(targetplayer)) @@ -289,7 +289,7 @@ public void listResidences(final CommandSender sender, final String targetplayer final boolean hidden = showhidden; ArrayList ownedResidences = Residence.getPlayerManager().getResidences(targetplayer, hidden, onlyHidden); ownedResidences.addAll(Residence.getRentManager().getRents(targetplayer, onlyHidden)); - InformationPager.printListInfo(sender, targetplayer, ownedResidences, page, showhidden); + InformationPager.printListInfo(sender, targetplayer, ownedResidences, page, resadmin); } public void listAllResidences(CommandSender sender, int page) { diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index e4acf9cc0..c302ecd0e 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -306,7 +306,7 @@ public List GetLocationsCornersByData(Player player, Location loc, Dou // South - East corner if (Sides.ShowSouthSide() && Sides.ShowEastSide()) - locList.addAll(getLocations(lowLoc.clone().add(TX, 0, TZ), loc.clone(), 0D, TY, 0D, Range, true)); + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, TZ), loc.clone(), 0D, TY+1, 0D, Range, true)); // West bottom corner if (Sides.ShowWestSide() && Sides.ShowBottomSide()) diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java index 3b8ece75b..a2ffba3a4 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -5,6 +5,7 @@ import com.bekvon.bukkit.residence.Residence; import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldguard.bukkit.RegionContainer; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; @@ -29,7 +30,8 @@ public static ProtectedRegion isSelectionInRegion(Player player) { BlockVector min = new BlockVector(loc1.getX(), loc1.getY(), loc1.getZ()); BlockVector max = new BlockVector(loc2.getX(), loc2.getY(), loc2.getZ()); ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); - RegionManager mgr = Residence.wg.getRegionContainer().get(loc1.getWorld()); + RegionContainer cn = Residence.wg.getRegionContainer(); + RegionManager mgr = cn.get(loc1.getWorld()); ApplicableRegionSet regions = mgr.getApplicableRegions(region); for (ProtectedRegion one : regions) { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index b0d8f8ee6..6a4a7bbdc 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -8,6 +8,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import java.util.Arrays; @@ -66,6 +67,7 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List pagecount, lines.size()))); String cmd = "res"; + Debug.D("admin " + resadmin); if (resadmin) cmd = "resadmin"; diff --git a/src/com/bekvon/bukkit/residence/utils/Sorting.java b/src/com/bekvon/bukkit/residence/utils/Sorting.java index 0cb4ff93a..043663ec2 100644 --- a/src/com/bekvon/bukkit/residence/utils/Sorting.java +++ b/src/com/bekvon/bukkit/residence/utils/Sorting.java @@ -60,6 +60,10 @@ public List sortResidences(List residences) Map map = new HashMap(); for (ClaimedResidence one : residences) { + if (one == null) + continue; + if (one.getName() == null) + continue; map.put(one.getName().toLowerCase(), one); } diff --git a/src/plugin.yml b/src/plugin.yml index b5594a862..43c1be35e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.4.0.1 +version: 4.4.0.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 15cdcaecb33a5c28c4331acaaaf0701ee6736fde Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 24 Jun 2016 15:08:39 +0300 Subject: [PATCH 0196/1142] Check explosion even if entity is null Check for block explosion event --- .../listeners/ResidenceEntityListener.java | 201 +++++++++++------- .../listeners/ResidencePlayerListener.java | 5 +- .../protection/ClaimedResidence.java | 2 +- .../protection/ResidenceManager.java | 33 +-- 4 files changed, 141 insertions(+), 100 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 4c64b0d08..1b93cf414 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -7,6 +7,8 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -40,6 +42,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockExplodeEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.PlayerLeashEntityEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent; @@ -594,64 +597,92 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockExplodeEvent(BlockExplodeEvent event) { + + Location loc = event.getBlock().getLocation(); + + if (Residence.isDisabledWorldListener(loc.getWorld())) + return; + if (event.isCancelled()) + return; + FlagPermissions world = Residence.getWorldFlags().getPerms(loc.getWorld().getName()); + List preserve = new ArrayList(); + for (Block block : event.blockList()) { + FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); + if (!blockperms.has("explode", world.has("explode", true))) { + preserve.add(block); + } + } + for (Block block : preserve) { + event.blockList().remove(block); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent event) { // disabling event on world - Entity ent = event.getEntity(); - if (ent == null) - return; - if (Residence.isDisabledWorldListener(ent.getWorld())) + + Location loc = event.getLocation(); + if (Residence.isDisabledWorldListener(loc.getWorld())) return; if (event.isCancelled()) return; + + Entity ent = event.getEntity(); + Boolean cancel = false; - EntityType entity = event.getEntityType(); - FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); - FlagPermissions world = Residence.getWorldFlags().getPerms(ent.getWorld().getName()); + FlagPermissions perms = Residence.getPermsByLoc(loc); + FlagPermissions world = Residence.getWorldFlags().getPerms(loc.getWorld().getName()); - switch (entity) { - case CREEPER: - if (!perms.has("creeper", perms.has("explode", true))) - if (Residence.getConfigManager().isCreeperExplodeBelow()) { - if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) - cancel = true; - else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res != null) + if (ent != null) { + switch (event.getEntityType()) { + case CREEPER: + if (!perms.has("creeper", perms.has("explode", true))) + if (Residence.getConfigManager().isCreeperExplodeBelow()) { + if (loc.getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) cancel = true; - } - } else - cancel = true; - break; - case PRIMED_TNT: - case MINECART_TNT: - if (!perms.has("tnt", perms.has("explode", true))) { - if (Residence.getConfigManager().isTNTExplodeBelow()) { - if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) + else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null) + cancel = true; + } + } else cancel = true; - else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res != null) + break; + case PRIMED_TNT: + case MINECART_TNT: + if (!perms.has("tnt", perms.has("explode", true))) { + if (Residence.getConfigManager().isTNTExplodeBelow()) { + if (loc.getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) cancel = true; - } - } else + else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null) + cancel = true; + } + } else + cancel = true; + } + break; + case SMALL_FIREBALL: + case FIREBALL: + if (!perms.has("fireball", perms.has("explode", true))) cancel = true; + break; + default: + if (!perms.has("destroy", world.has("destroy", true))) + cancel = true; + break; } - break; - case SMALL_FIREBALL: - case FIREBALL: - if (!perms.has("fireball", perms.has("explode", true))) - cancel = true; - break; - default: - if (!perms.has("destroy", world.has("destroy", true))) - cancel = true; - break; + } else if (!perms.has("destroy", world.has("destroy", true))) { + cancel = true; } if (cancel) { event.setCancelled(true); - ent.remove(); + if (ent != null) + ent.remove(); return; } @@ -659,59 +690,65 @@ public void onEntityExplode(EntityExplodeEvent event) { for (Block block : event.blockList()) { FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); - switch (entity) { - case CREEPER: - if (!blockperms.has("creeper", blockperms.has("explode", true))) - if (Residence.getConfigManager().isCreeperExplodeBelow()) { - if (block.getY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) - preserve.add(block); - else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); - if (res != null) + if (ent != null) { + switch (event.getEntityType()) { + case CREEPER: + if (!blockperms.has("creeper", blockperms.has("explode", true))) + if (Residence.getConfigManager().isCreeperExplodeBelow()) { + if (block.getY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) preserve.add(block); - } - } else - preserve.add(block); - continue; - case PRIMED_TNT: - case MINECART_TNT: - if (!blockperms.has("tnt", blockperms.has("explode", true))) { - if (Residence.getConfigManager().isTNTExplodeBelow()) { - if (block.getY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) + else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (res != null) + preserve.add(block); + } + } else preserve.add(block); - else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); - if (res != null) + continue; + case PRIMED_TNT: + case MINECART_TNT: + if (!blockperms.has("tnt", blockperms.has("explode", true))) { + if (Residence.getConfigManager().isTNTExplodeBelow()) { + if (block.getY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) preserve.add(block); - } - } else + else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (res != null) + preserve.add(block); + } + } else + preserve.add(block); + } + continue; + case ENDER_DRAGON: + if (!blockperms.has("dragongrief", false)) + preserve.add(block); + break; + case ENDER_CRYSTAL: + if (!blockperms.has("explode", false)) + preserve.add(block); + continue; + case SMALL_FIREBALL: + case FIREBALL: + if (!blockperms.has("fireball", blockperms.has("explode", true))) + preserve.add(block); + continue; + default: + if (!blockperms.has("destroy", world.has("destroy", true))) preserve.add(block); + continue; } - continue; - case ENDER_DRAGON: - if (!blockperms.has("dragongrief", false)) - preserve.add(block); - break; - case ENDER_CRYSTAL: - if (!blockperms.has("explode", false)) - preserve.add(block); - continue; - case SMALL_FIREBALL: - case FIREBALL: - if (!blockperms.has("fireball", blockperms.has("explode", true))) + } else { + if (!blockperms.has("destroy", world.has("destroy", true))) { + Debug.D("keep block"); preserve.add(block); - continue; - default: - if (!blockperms.has("destroy", world.has("destroy", true))) - preserve.add(block); - continue; + } } } for (Block block : preserve) { event.blockList().remove(block); } - } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9c70c5b7b..1df439ae3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -61,6 +61,7 @@ import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.utils.GetTime; @@ -1468,7 +1469,9 @@ public void run() { Location lastLoc = lastOutsideLoc.get(pname); if (Residence.getConfigManager().BounceAnimation()) { - Residence.getSelectionManager().MakeBorders(player, res.getAreaArray()[0].getLowLoc(), res.getAreaArray()[0].getHighLoc(), true); + CuboidArea area = res.getAreaByLoc(loc); + if (area != null) + Residence.getSelectionManager().MakeBorders(player, area.getLowLoc(), area.getHighLoc(), true); } ClaimedResidence preRes = Residence.getResidenceManager().getByLoc(lastLoc); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e571e5862..2c8fc6e38 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -918,7 +918,7 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { return loc; } - protected CuboidArea getAreaByLoc(Location loc) { + public CuboidArea getAreaByLoc(Location loc) { for (CuboidArea thisarea : areas.values()) { if (thisarea.containsLoc(loc)) { return thisarea; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1458c88bc..cfd2931cd 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -442,28 +442,29 @@ public void removeResidence(Player player, String name, boolean resadmin) { residences.remove(name.toLowerCase()); if (Residence.getConfigManager().isUseClean() && Residence.getConfigManager().getCleanWorlds().contains(res.getWorld())) { - CuboidArea area = res.getAreaArray()[0]; + for (CuboidArea area : res.getAreaArray()) { - Location low = area.getLowLoc(); - Location high = area.getHighLoc(); + Location low = area.getLowLoc(); + Location high = area.getHighLoc(); - if (high.getBlockY() > Residence.getConfigManager().getCleanLevel()) { + if (high.getBlockY() > Residence.getConfigManager().getCleanLevel()) { - if (low.getBlockY() < Residence.getConfigManager().getCleanLevel()) - low.setY(Residence.getConfigManager().getCleanLevel()); + if (low.getBlockY() < Residence.getConfigManager().getCleanLevel()) + low.setY(Residence.getConfigManager().getCleanLevel()); - World world = low.getWorld(); + World world = low.getWorld(); - Location temploc = new Location(world, low.getBlockX(), low.getBlockY(), low.getBlockZ()); + Location temploc = new Location(world, low.getBlockX(), low.getBlockY(), low.getBlockZ()); - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - temploc.setX(x); - for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { - temploc.setY(y); - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - temploc.setZ(z); - if (Residence.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getTypeId())) { - temploc.getBlock().setTypeId(0); + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + temploc.setX(x); + for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { + temploc.setY(y); + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + temploc.setZ(z); + if (Residence.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getTypeId())) { + temploc.getBlock().setTypeId(0); + } } } } From a183502485054bd34c81cd75e2fd36dfd24f0970 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 25 Jun 2016 18:57:26 +0300 Subject: [PATCH 0197/1142] Cleanup --- .../residence/CommentedYamlConfiguration.java | 2 + .../bukkit/residence/ConfigManager.java | 21 +- .../bukkit/residence/LocaleManager.java | 11 +- .../bekvon/bukkit/residence/Residence.java | 58 +- .../residence/ResidenceCommandListener.java | 21 +- .../residence/actionBarNMS/v1_10_R1.java | 1 + .../residence/actionBarNMS/v1_7_R4.java | 1 + .../residence/actionBarNMS/v1_8_R1.java | 1 + .../residence/actionBarNMS/v1_8_R2.java | 1 + .../residence/actionBarNMS/v1_8_R3.java | 1 + .../residence/actionBarNMS/v1_9_R1.java | 1 + .../residence/actionBarNMS/v1_9_R2.java | 1 + .../bekvon/bukkit/residence/allNms/v1_10.java | 1 + .../bekvon/bukkit/residence/allNms/v1_7.java | 1 + .../residence/allNms/v1_7_Couldron.java | 1 + .../bekvon/bukkit/residence/allNms/v1_8.java | 1 + .../bukkit/residence/allNms/v1_8Events.java | 29 + .../bekvon/bukkit/residence/allNms/v1_9.java | 1 + .../bukkit/residence/allNms/v1_9Events.java | 8 +- .../bukkit/residence/chat/ChatManager.java | 5 + .../bukkit/residence/commands/command.java | 6 +- .../bukkit/residence/commands/contract.java | 4 +- .../bukkit/residence/commands/create.java | 28 +- .../bukkit/residence/commands/expand.java | 4 +- .../bukkit/residence/commands/lease.java | 43 +- .../residence/commands/listallhidden.java | 4 +- .../bukkit/residence/commands/lset.java | 11 +- .../bukkit/residence/commands/market.java | 14 +- .../bekvon/bukkit/residence/commands/rc.java | 14 +- .../bukkit/residence/commands/reload.java | 12 +- .../bukkit/residence/commands/removeall.java | 2 +- .../residence/commands/removeworld.java | 3 +- .../bukkit/residence/commands/select.java | 20 +- .../bukkit/residence/commands/server.java | 5 +- .../bukkit/residence/commands/shop.java | 13 +- .../residence/containers/ConfigReader.java | 6 +- .../residence/dynmap/DynMapManager.java | 7 +- .../economy/EssentialsEcoAdapter.java | 9 +- .../residence/economy/IConomy5Adapter.java | 5 + .../residence/economy/IConomy6Adapter.java | 15 +- .../residence/economy/TransactionManager.java | 6 + .../residence/economy/rent/RentManager.java | 40 +- .../event/CancellableResidenceEvent.java | 2 + .../CancellableResidencePlayerEvent.java | 2 + .../CancellableResidencePlayerFlagEvent.java | 2 + .../event/ResidenceCommandEvent.java | 2 + .../residence/event/ResidenceEvent.java | 35 +- .../event/ResidenceFlagCheckEvent.java | 1 + .../residence/event/ResidencePlayerEvent.java | 35 +- .../event/ResidencePlayerFlagEvent.java | 3 + .../residence/event/ResidenceRenameEvent.java | 53 +- .../event/ResidenceSizeChangeEvent.java | 1 + .../bekvon/bukkit/residence/gui/FlagData.java | 2 +- .../bekvon/bukkit/residence/gui/SetFlag.java | 2 +- .../bukkit/residence/itemlist/ItemList.java | 5 +- .../listeners/ResidenceEntityListener.java | 198 ++- .../listeners/ResidencePlayerListener.java | 90 +- .../permissions/BPermissionsAdapter.java | 2 + .../permissions/LegacyPermissions.java | 2 + .../permissions/OriginalPermissions.java | 2 + .../permissions/PermissionManager.java | 7 +- .../permissions/PermissionsBukkitAdapter.java | 2 + .../protection/ClaimedResidence.java | 68 +- .../residence/protection/CuboidArea.java | 10 +- .../residence/protection/FlagPermissions.java | 8 +- .../residence/protection/LeaseManager.java | 12 +- .../residence/protection/PlayerManager.java | 7 + .../protection/ResidenceManager.java | 66 +- .../protection/ResidencePermissions.java | 18 +- .../protection/WorldFlagManager.java | 3 +- .../residence/selection/SelectionManager.java | 23 +- .../selection/WorldEditSelectionManager.java | 1 + .../residence/shopStuff/ShopListener.java | 2 +- .../residence/shopStuff/ShopSignUtil.java | 6 +- .../bukkit/residence/signsStuff/SignUtil.java | 1 + .../spout/ResidenceSpoutListener.java | 2 +- .../bukkit/residence/text/Language.java | 6 +- .../bukkit/residence/text/help/HelpEntry.java | 4 +- .../bukkit/residence/utils/ActionBar.java | 5 +- .../bukkit/residence/utils/CrackShot.java | 2 +- .../residence/utils/ParticleEffects.java | 8 +- .../bukkit/residence/utils/RandomTp.java | 8 +- .../residence/utils/ReflectionUtils.java | 1228 +++++++++-------- .../bukkit/residence/utils/Sorting.java | 6 + .../residence/utils/VersionChecker.java | 1 + .../bukkit/residence/utils/YmlMaker.java | 37 +- .../vaultinterface/ResidenceVaultAdapter.java | 27 +- src/com/residence/mcstats/Metrics.java | 25 +- src/plugin.yml | 2 +- 89 files changed, 1313 insertions(+), 1159 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java b/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java index 8048fe6be..8c650b986 100644 --- a/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java +++ b/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java @@ -27,6 +27,7 @@ public CommentedYamlConfiguration() { comments = new HashMap(); } + @Override public void save(String file) throws IOException { if (file == null) { throw new IllegalArgumentException("File cannot be null"); @@ -35,6 +36,7 @@ public void save(String file) throws IOException { save(new File(file)); } + @Override public void save(File file) throws IOException { if (file == null) { throw new IllegalArgumentException("File cannot be null"); diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 7b6d6f83d..0ae64399c 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -228,18 +228,6 @@ public static String Colors(String text) { public void ChangeConfig(String path, Boolean stage) { File f = new File(plugin.getDataFolder(), "config.yml"); - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - - if (in == null) - return; - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); if (!conf.isBoolean(path)) @@ -292,7 +280,6 @@ void UpdateFlagFile() { try { uno = GuiItems.valueOf(lowOne); } catch (IllegalArgumentException e) { - continue; } if (uno == null) continue; @@ -947,6 +934,12 @@ public void UpdateConfigFile() { } catch (IOException e) { e.printStackTrace(); } + + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } } public void loadFlags() { @@ -962,7 +955,7 @@ public void loadGroups() { Set keys = node.getConfigurationSection(defaultGroup).getKeys(false); if (keys != null) { for (String key : keys) { - globalGroupDefaults.put(key, FlagPermissions.parseFromConfigNodeAsList(key, defaultGroup, "false")); + globalGroupDefaults.put(key, FlagPermissions.parseFromConfigNodeAsList(defaultGroup, "false")); } } } diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 432137792..ff19750d9 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -62,6 +62,11 @@ public void LoadLang(String lang) { YamlConfiguration conf = loadConfiguration(in, lang); if (conf == null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } return; } @@ -1572,6 +1577,10 @@ public void LoadLang(String lang) { } catch (IOException e) { e.printStackTrace(); } - + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } } } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 8488cfdc3..411396b21 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -112,6 +112,10 @@ */ public class Residence extends JavaPlugin { + public final static String uid = "%%__USER__%%"; + final String rid = "%%__RESOURCE__%%"; + final String nonce = "%%__NONCE__%%"; + protected static String ResidenceVersion; protected static List authlist; protected static ResidenceManager rmanager; @@ -260,24 +264,28 @@ public static ABInterface getAB() { } private Runnable doHeals = new Runnable() { + @Override public void run() { plistener.doHeals(); } }; private Runnable doFeed = new Runnable() { + @Override public void run() { plistener.feed(); } }; private Runnable DespawnMobs = new Runnable() { + @Override public void run() { plistener.DespawnMobs(); } }; private Runnable rentExpire = new Runnable() { + @Override public void run() { rentmanager.checkCurrentRents(); if (cmanager.showIntervalMessages()) { @@ -286,6 +294,7 @@ public void run() { } }; private Runnable leaseExpire = new Runnable() { + @Override public void run() { leasemanager.doExpirations(); if (cmanager.showIntervalMessages()) { @@ -294,6 +303,7 @@ public void run() { } }; private Runnable autoSave = new Runnable() { + @Override public void run() { try { if (initsuccess) { @@ -475,7 +485,7 @@ public void onEnable() { lwc = ((LWCPlugin) lwcp).getLWC(); for (String lang : validLanguages) { - YmlMaker langFile = new YmlMaker((JavaPlugin) this, "Language" + File.separator + lang + ".yml"); + YmlMaker langFile = new YmlMaker(this, "Language" + File.separator + lang + ".yml"); if (langFile != null) { langFile.saveDefaultConfig(); } @@ -506,6 +516,8 @@ public void onEnable() { } else { Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Language file does not exist..."); } + if (in != null) + in.close(); } catch (Exception ex) { Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Failed to load language file: " + cmanager.getLanguage() + ".yml setting to default - English"); @@ -528,6 +540,8 @@ public void onEnable() { } else { Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Language file does not exist..."); } + if (in != null) + in.close(); } economy = null; if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { @@ -761,13 +775,12 @@ public static boolean validName(String name) { } if (cmanager.getResidenceNameRegex() == null) { return true; - } else { - String namecheck = name.replaceAll(cmanager.getResidenceNameRegex(), ""); - if (!name.equals(namecheck)) { - return false; - } - return true; } + String namecheck = name.replaceAll(cmanager.getResidenceNameRegex(), ""); + if (!name.equals(namecheck)) { + return false; + } + return true; } private void setWorldEdit() { @@ -775,7 +788,7 @@ private void setWorldEdit() { if (plugin != null) { smanager = new WorldEditSelectionManager(server, this); wep = (WorldEditPlugin) plugin; - wepid = ((WorldEditPlugin) Residence.wep).getConfig().getInt("wand-item"); + wepid = Residence.wep.getConfig().getInt("wand-item"); Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found WorldEdit"); } else { smanager = new SelectionManager(server, this); @@ -783,7 +796,7 @@ private void setWorldEdit() { } } - private void setWorldGuard() { + private static void setWorldGuard() { Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); if (wgplugin != null) { try { @@ -959,21 +972,20 @@ public static FlagPermissions getPermsByLoc(Location loc) { ClaimedResidence res = rmanager.getByLoc(loc); if (res != null) { return res.getPermissions(); - } else { - return wmanager.getPerms(loc.getWorld().getName()); } + return wmanager.getPerms(loc.getWorld().getName()); + } public static FlagPermissions getPermsByLocForPlayer(Location loc, Player player) { ClaimedResidence res = rmanager.getByLoc(loc); if (res != null) { return res.getPermissions(); - } else { - if (player != null) - return wmanager.getPerms(player); - else - return wmanager.getPerms(loc.getWorld().getName()); } + if (player != null) + return wmanager.getPerms(player); + + return wmanager.getPerms(loc.getWorld().getName()); } private void loadIConomy() { @@ -1041,8 +1053,7 @@ private void loadVaultEconomy() { public static boolean isResAdminOn(CommandSender sender) { if (sender instanceof Player) return isResAdminOn((Player) sender); - else - return true; + return true; } public static boolean isResAdminOn(Player player) { @@ -1062,7 +1073,7 @@ public static boolean isResAdminOn(String player) { return false; } - private void saveYml() throws IOException { + private static void saveYml() throws IOException { File saveFolder = new File(dataFolder, "Save"); File worldFolder = new File(saveFolder, "Worlds"); worldFolder.mkdirs(); @@ -1076,7 +1087,7 @@ private void saveYml() throws IOException { World world = server.getWorld(entry.getKey()); if (world != null) yml.getRoot().put("Seed", world.getSeed()); - yml.getRoot().put("Residences", (Map) entry.getValue()); + yml.getRoot().put("Residences", entry.getValue()); yml.save(); if (ymlSaveLoc.isFile()) { File backupFolder = new File(worldFolder, "Backup"); @@ -1370,7 +1381,7 @@ private void ConvertFile() { } } - private void remove(File newGroups, List list) throws IOException { + private static void remove(File newGroups, List list) throws IOException { YamlConfiguration conf = YamlConfiguration.loadConfiguration(newGroups); conf.options().copyDefaults(true); @@ -1385,7 +1396,7 @@ private void remove(File newGroups, List list) throws IOException { } } - private void copy(File source, File target) throws IOException { + private static void copy(File source, File target) throws IOException { InputStream in = new FileInputStream(source); OutputStream out = new FileOutputStream(target); byte[] buf = new byte[1024]; @@ -1539,8 +1550,7 @@ public static String getPlayerName(UUID uuid) { p = Residence.getServ().getOfflinePlayer(uuid); if (p != null) return p.getName(); - else - return null; + return null; } public static boolean isDisabledWorldListener(World world) { diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 095b27154..83d64b966 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -20,6 +20,7 @@ public static List getAdminCommands() { return AdminCommands; } + @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); Residence.getServ().getPluginManager().callEvent(cevent); @@ -27,7 +28,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } - if (sender instanceof Player && !Residence.getPermissionManager().isResidenceAdmin((Player) sender) && Residence.isDisabledWorldCommand(((Player) sender) + if (sender instanceof Player && !Residence.getPermissionManager().isResidenceAdmin(sender) && Residence.isDisabledWorldCommand(((Player) sender) .getWorld())) { sender.sendMessage(Residence.getLM().getMessage("General.DisabledWorld")); return true; @@ -49,7 +50,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } if (command.getName().equals("resload")) { - if (!(sender instanceof Player) || sender instanceof Player && Residence.gmanager.isResidenceAdmin((Player) sender) && ((Player) sender).hasPermission( + if (!(sender instanceof Player) || sender instanceof Player && Residence.gmanager.isResidenceAdmin(sender) && ((Player) sender).hasPermission( "residence.topadmin")) { try { this.loadYml(); @@ -63,7 +64,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return true; } else if (command.getName().equals("rc")) { - cmd cmdClass = getCmdClass(sender, "rc", new String[] { "rc" }); + cmd cmdClass = getCmdClass(new String[] { "rc" }); if (cmdClass == null) { sendUsage(sender, command.getName()); return true; @@ -75,14 +76,14 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { boolean resadmin = false; if (sender instanceof Player) { - if (command.getName().equals("resadmin") && Residence.gmanager.isResidenceAdmin((Player) sender)) { + if (command.getName().equals("resadmin") && Residence.gmanager.isResidenceAdmin(sender)) { resadmin = true; } - if (command.getName().equals("resadmin") && !Residence.gmanager.isResidenceAdmin((Player) sender)) { + if (command.getName().equals("resadmin") && !Residence.gmanager.isResidenceAdmin(sender)) { ((Player) sender).sendMessage(Residence.getLM().getMessage("Residence.NonAdmin")); return true; } - if (command.getName().equals("res") && Residence.gmanager.isResidenceAdmin((Player) sender) && Residence.getConfigManager().getAdminFullAccess()) { + if (command.getName().equals("res") && Residence.gmanager.isResidenceAdmin(sender) && Residence.getConfigManager().getAdminFullAccess()) { resadmin = true; } } else { @@ -100,7 +101,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St resadmin = true; } if (Residence.cmanager.allowAdminsOnly()) { - if (!resadmin) { + if (!resadmin && player != null) { player.sendMessage(Residence.getLM().getMessage("General.AdminOnly")); return true; } @@ -121,7 +122,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St break; } - cmd cmdClass = getCmdClass(sender, command.getName(), args); + cmd cmdClass = getCmdClass(args); if (cmdClass == null) { return commandHelp(new String[] { "?" }, resadmin, sender, command); } @@ -131,7 +132,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } - if (!resadmin && Residence.resadminToggle.contains(player.getName())) { + if (!resadmin && player != null && Residence.resadminToggle.contains(player.getName())) { if (!Residence.gmanager.isResidenceAdmin(player)) { Residence.resadminToggle.remove(player.getName()); } @@ -152,7 +153,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return this.onCommand(sender, command, label, args); } - private cmd getCmdClass(CommandSender sender, String command, String[] args) { + private static cmd getCmdClass(String[] args) { cmd cmdClass = null; try { Class nmsClass; diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java index c4beb40e1..80989ecfb 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java @@ -35,6 +35,7 @@ public void send(Player player, String msg) { } } + @Override public void sendTitle(Player player, Object title, Object subtitle) { CraftPlayer Cplayer = (CraftPlayer) player; if (title != null) { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java index 1dd00f3ff..a6fb7a513 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java @@ -17,6 +17,7 @@ public void send(Player player, String msg) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); } + @Override public void sendTitle(Player player, Object title, Object subtitle) { return; } diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java index 034ffc64c..fdc8b2289 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java @@ -35,6 +35,7 @@ public void send(Player player, String msg) { } } + @Override public void sendTitle(Player player, Object title, Object subtitle) { CraftPlayer Cplayer = (CraftPlayer) player; if (title != null) { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java index b5509781d..b47ad7b2f 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java @@ -35,6 +35,7 @@ public void send(Player player, String msg) { } } + @Override public void sendTitle(Player player, Object title, Object subtitle) { CraftPlayer Cplayer = (CraftPlayer) player; if (title != null) { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java index 86556cbb4..fd170994f 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java @@ -35,6 +35,7 @@ public void send(Player player, String msg) { } } + @Override public void sendTitle(Player player, Object title, Object subtitle) { CraftPlayer Cplayer = (CraftPlayer) player; if (title != null) { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java index 86b2c10ae..58d1c66bc 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java @@ -35,6 +35,7 @@ public void send(Player player, String msg) { } } + @Override public void sendTitle(Player player, Object title, Object subtitle) { CraftPlayer Cplayer = (CraftPlayer) player; if (title != null) { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java index 6cd423ec5..c42c4e853 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java @@ -35,6 +35,7 @@ public void send(Player player, String msg) { } } + @Override public void sendTitle(Player player, Object title, Object subtitle) { CraftPlayer Cplayer = (CraftPlayer) player; if (title != null) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10.java b/src/com/bekvon/bukkit/residence/allNms/v1_10.java index 4f9a72b96..677900476 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10.java @@ -146,6 +146,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, "diode"); } + @Override public boolean isPlate(Material mat) { return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index 08352fa3f..99c2a626b 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -104,6 +104,7 @@ public boolean isSpectator(GameMode mode) { public void addDefaultFlags(Map matUseFlagList) { } + @Override public boolean isPlate(Material mat) { return false; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index cd4e01b77..4073df991 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -104,6 +104,7 @@ public boolean isSpectator(GameMode mode) { public void addDefaultFlags(Map matUseFlagList) { } + @Override public boolean isPlate(Material mat) { return false; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java index 95e70d12e..48b924e33 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8.java @@ -134,6 +134,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, "diode"); } + @Override public boolean isPlate(Material mat) { return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java index d03831a23..f58aba504 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java @@ -1,10 +1,16 @@ package com.bekvon.bukkit.residence.allNms; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockExplodeEvent; import org.bukkit.event.player.PlayerInteractAtEntityEvent; import com.bekvon.bukkit.residence.Residence; @@ -29,4 +35,27 @@ public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "container")); } } + + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockExplodeEvent(BlockExplodeEvent event) { + + Location loc = event.getBlock().getLocation(); + + if (Residence.isDisabledWorldListener(loc.getWorld())) + return; + if (event.isCancelled()) + return; + FlagPermissions world = Residence.getWorldFlags().getPerms(loc.getWorld().getName()); + List preserve = new ArrayList(); + for (Block block : event.blockList()) { + FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); + if (!blockperms.has("explode", world.has("explode", true))) { + preserve.add(block); + } + } + for (Block block : preserve) { + event.blockList().remove(block); + } + } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9.java b/src/com/bekvon/bukkit/residence/allNms/v1_9.java index b07e3c87b..1094403c7 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9.java @@ -134,6 +134,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, "diode"); } + @Override public boolean isPlate(Material mat) { return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index f8010a93e..c89bbbc6b 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -1,7 +1,6 @@ package com.bekvon.bukkit.residence.allNms; import java.util.Iterator; - import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -10,7 +9,6 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.AreaEffectCloudApplyEvent; import org.bukkit.event.entity.LingeringPotionSplashEvent; -import org.bukkit.potion.PotionData; import org.bukkit.potion.PotionEffect; import com.bekvon.bukkit.residence.Residence; @@ -52,11 +50,11 @@ public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { return; boolean harmfull = false; - + // Temporally fail safe to avoid console spam for getting base potion data until fix roles out try { for (String oneHarm : Residence.getConfigManager().getNegativeLingeringPotionEffects()) { - if (((PotionData) event.getEntity().getBasePotionData()).getType().name().equalsIgnoreCase(oneHarm)) { + if (event.getEntity().getBasePotionData().getType().name().equalsIgnoreCase(oneHarm)) { harmfull = true; break; } @@ -64,7 +62,7 @@ public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { } catch (Exception e) { return; } - + if (!harmfull) return; diff --git a/src/com/bekvon/bukkit/residence/chat/ChatManager.java b/src/com/bekvon/bukkit/residence/chat/ChatManager.java index 7afb5bdee..1fb872e52 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatManager.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatManager.java @@ -17,6 +17,7 @@ public ChatManager() { channelmap = new HashMap(); } + @Override public boolean setChannel(String player, String resName) { ClaimedResidence res = Residence.getResidenceManager().getByName(resName); if (res == null) @@ -24,6 +25,7 @@ public boolean setChannel(String player, String resName) { return setChannel(player, res); } + @Override public boolean setChannel(String player, ClaimedResidence res) { this.removeFromChannel(player); if (!channelmap.containsKey(res.getName())) @@ -32,6 +34,7 @@ public boolean setChannel(String player, ClaimedResidence res) { return true; } + @Override public boolean removeFromChannel(String player) { for (ChatChannel chan : channelmap.values()) { if (chan.hasMember(player)) { @@ -42,10 +45,12 @@ public boolean removeFromChannel(String player) { return false; } + @Override public ChatChannel getChannel(String channel) { return channelmap.get(channel); } + @Override public ChatChannel getPlayerChannel(String player) { for (ChatChannel chan : channelmap.values()) { if (chan.hasMember(player)) diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index 7f260f26f..9c4c2da46 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -44,17 +44,17 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } - if (action.equalsIgnoreCase("allow")) { + if (action != null && action.equalsIgnoreCase("allow")) { if (res.addCmdWhiteList(cmd)) { sender.sendMessage(Residence.getLM().getMessage("command.addedAllow", res.getName())); } else sender.sendMessage(Residence.getLM().getMessage("command.removedAllow", res.getName())); - } else if (action.equalsIgnoreCase("block")) { + } else if (action != null && action.equalsIgnoreCase("block")) { if (res.addCmdBlackList(cmd)) { sender.sendMessage(Residence.getLM().getMessage("command.addedBlock", res.getName())); } else sender.sendMessage(Residence.getLM().getMessage("command.removedBlock", res.getName())); - } else if (action.equalsIgnoreCase("list")) { + } else if (action != null && action.equalsIgnoreCase("list")) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < res.getCmdBlackList().size(); i++) { sb.append("/" + res.getCmdBlackList().get(i).replace("_", " ")); diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 84492acc3..2e84eeeb3 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -89,9 +89,9 @@ else if (args.length == 3) } res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); return true; - } else { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); } + player.sendMessage(Residence.getLM().getMessage("Select.Points")); + return false; } diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 6f3c0c289..e1f799420 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -33,26 +33,24 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); return true; - } else { - ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); - player.sendMessage(Residence.getLM().getMessage("Select.WorldGuardOverlap", Region.getId())); + } + ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); + player.sendMessage(Residence.getLM().getMessage("Select.WorldGuardOverlap", Region.getId())); - Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), - Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); + Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), + Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); - Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), - Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); + Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), + Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); - Residence.getSelectionManager().NewMakeBorders(player, lowLoc, highLoc, true); - Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence - .getSelectionManager().getPlayerLoc2(player.getName()), false); - return true; - } - } else { - Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence - .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); + Residence.getSelectionManager().NewMakeBorders(player, lowLoc, highLoc, true); + Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence + .getSelectionManager().getPlayerLoc2(player.getName()), false); return true; } + Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence + .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); + return true; } player.sendMessage(Residence.getLM().getMessage("Select.Points")); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index c98e3aa30..1d923c809 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -91,9 +91,9 @@ else if (args.length == 3) res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); return true; - } else { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); } + player.sendMessage(Residence.getLM().getMessage("Select.Points")); + return false; } diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index 1ed833bbe..4d9c22b2b 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -56,21 +56,21 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); } return true; - } else { - String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - ClaimedResidence res = Residence.getResidenceManager().getByName(area); - if (area == null || res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); - return true; - } - if (Residence.getLeaseManager().leaseExpires(area)) { - int cost = Residence.getLeaseManager().getRenewCost(res); - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenewalCost", area, cost)); - } else { - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); - } + } + String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByName(area); + if (area == null || res == null) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); return true; } + if (Residence.getLeaseManager().leaseExpires(area)) { + int cost = Residence.getLeaseManager().getRenewCost(res); + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenewalCost", area, cost)); + } else { + player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); + } + return true; + } } else if (args.length == 4) { if (args[1].equals("set")) { @@ -86,17 +86,16 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); } return true; - } else { - int days; - try { - days = Integer.parseInt(args[3]); - } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Days")); - return true; - } - Residence.getLeaseManager().setExpireTime(player, args[2], days); + } + int days; + try { + days = Integer.parseInt(args[3]); + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Invalid.Days")); return true; } + Residence.getLeaseManager().setExpireTime(player, args[2], days); + return true; } } return false; diff --git a/src/com/bekvon/bukkit/residence/commands/listallhidden.java b/src/com/bekvon/bukkit/residence/commands/listallhidden.java index 4b499bcec..4783e3950 100644 --- a/src/com/bekvon/bukkit/residence/commands/listallhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listallhidden.java @@ -21,10 +21,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } if (args.length == 1) { - Residence.getResidenceManager().listAllResidences(sender, 1, true, false, true); + Residence.getResidenceManager().listAllResidences(sender, 1, true, true); } else if (args.length == 2) { try { - Residence.getResidenceManager().listAllResidences(sender, page, true, false, true); + Residence.getResidenceManager().listAllResidences(sender, page, true, true); } catch (Exception ex) { } } else { diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java index fd7c19b93..2663dac91 100644 --- a/src/com/bekvon/bukkit/residence/commands/lset.java +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -17,7 +17,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; Player player = (Player) sender; - + ClaimedResidence res = null; Material mat = null; String listtype = null; @@ -59,17 +59,16 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } } if (res != null) { - if (listtype.equalsIgnoreCase("blacklist")) { + if (listtype != null && listtype.equalsIgnoreCase("blacklist")) { res.getItemBlacklist().playerListChange(player, mat, resadmin); - } else if (listtype.equalsIgnoreCase("ignorelist")) { + } else if (listtype != null && listtype.equalsIgnoreCase("ignorelist")) { res.getItemIgnoreList().playerListChange(player, mat, resadmin); } else { player.sendMessage(Residence.getLM().getMessage("Invalid.List")); } return true; - } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); - return true; } + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; } } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 5859e2add..0ca5f9f72 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -38,9 +38,9 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command switch (secondCommand.toLowerCase()) { case "list": - return commandResMarketList(args, resadmin, player, page); + return commandResMarketList(args, player, page); case "autopay": - return commandResMarketAutoPay(args, resadmin, player, page); + return commandResMarketAutoPay(args, resadmin, player); case "payrent": return commandResMarketPayRent(args, resadmin, player); case "rentable": @@ -218,7 +218,7 @@ else if (args.length == 3) } } - private boolean commandResMarketRent(String[] args, boolean resadmin, Player player) { + private static boolean commandResMarketRent(String[] args, boolean resadmin, Player player) { if (args.length < 2 || args.length > 4) { return false; } @@ -250,7 +250,7 @@ else if (args.length == 4) return true; } - private boolean commandResMarketPayRent(String[] args, boolean resadmin, Player player) { + private static boolean commandResMarketPayRent(String[] args, boolean resadmin, Player player) { if (args.length != 2 && args.length != 3) { return false; } @@ -269,7 +269,7 @@ private boolean commandResMarketPayRent(String[] args, boolean resadmin, Player return true; } - private boolean commandResMarketRentable(String[] args, boolean resadmin, Player player) { + private static boolean commandResMarketRentable(String[] args, boolean resadmin, Player player) { if (args.length < 5 || args.length > 8) { return false; } @@ -334,7 +334,7 @@ private boolean commandResMarketRentable(String[] args, boolean resadmin, Player return true; } - private boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player player, int page) { + private static boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player player) { if (!Residence.getConfigManager().enableEconomy()) { player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); return true; @@ -379,7 +379,7 @@ private boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player return true; } - private boolean commandResMarketList(String[] args, boolean resadmin, Player player, int page) { + private static boolean commandResMarketList(String[] args, Player player, int page) { if (!Residence.getConfigManager().enableEconomy()) { player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index 0b10800ec..c83e69cfc 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -14,6 +14,7 @@ public class rc implements cmd { + @Override public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return true; @@ -37,13 +38,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); return true; - } else { - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); - if (chat != null && chat.getChannelName().equals(res.getName())) { - Residence.getChatManager().removeFromChannel(pname); - Residence.getPlayerListener().removePlayerResidenceChat(player); - return true; - } + } + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + if (chat != null && chat.getChannelName().equals(res.getName())) { + Residence.getChatManager().removeFromChannel(pname); + Residence.getPlayerListener().removePlayerResidenceChat(player); + return true; } if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !Residence.getPermissionManager().isResidenceAdmin(player)) { player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "chat", res.getName())); diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index 93ad20774..1f1a5cafe 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -59,6 +59,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command System.out.println(Residence.prefix + " Language file does not exist..."); } sender.sendMessage(Residence.prefix + " Reloaded language file."); + if (in != null) + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } return true; } else if (args[1].equalsIgnoreCase("config")) { Residence.getConfigManager().UpdateConfigFile(); @@ -68,14 +74,14 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getConfigManager().loadGroups(); Residence.gmanager = new PermissionManager(); Residence.wmanager = new WorldFlagManager(); - sender.sendMessage(Residence.prefix + " Reloaded groups file."); - return true; + sender.sendMessage(Residence.prefix + " Reloaded groups file."); + return true; } else if (args[1].equalsIgnoreCase("flags")) { Residence.getConfigManager().loadFlags(); Residence.gmanager = new PermissionManager(); Residence.imanager = new WorldItemManager(); Residence.wmanager = new WorldFlagManager(); - sender.sendMessage(Residence.prefix + " Reloaded flags file."); + sender.sendMessage(Residence.prefix + " Reloaded flags file."); return true; } return false; diff --git a/src/com/bekvon/bukkit/residence/commands/removeall.java b/src/com/bekvon/bukkit/residence/commands/removeall.java index 77151b37e..0bba9819f 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeall.java +++ b/src/com/bekvon/bukkit/residence/commands/removeall.java @@ -16,7 +16,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command String target = args.length == 2 ? args[1] : sender.getName(); if (resadmin) { - Residence.getResidenceManager().removeAllByOwner(sender, target); + Residence.getResidenceManager().removeAllByOwner(target); sender.sendMessage(Residence.getLM().getMessage("Residence.RemovePlayersResidences", target)); } else { sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index 1f4787ff0..4594d9913 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -18,9 +18,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (sender instanceof ConsoleCommandSender) { Residence.getResidenceManager().removeAllFromWorld(sender, args[1]); return true; - } else { - sender.sendMessage(ChatColor.RED + "MUST be run from console."); } + sender.sendMessage(ChatColor.RED + "MUST be run from console."); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index ff32313ab..e18d04441 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -74,8 +74,9 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } Location playerLoc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); if (playerLoc2 != null) { - player.sendMessage(Residence.getLM().getMessage("Select.Secondary", Residence.getLM().getMessage("General.CoordsBottom", playerLoc2.getBlockX(), playerLoc2 - .getBlockY(), playerLoc2.getBlockZ()))); + player.sendMessage(Residence.getLM().getMessage("Select.Secondary", Residence.getLM().getMessage("General.CoordsBottom", playerLoc2.getBlockX(), + playerLoc2 + .getBlockY(), playerLoc2.getBlockZ()))); } player.sendMessage(Residence.getLM().getMessage("General.Separator")); return true; @@ -157,14 +158,13 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command player.sendMessage(Residence.getLM().getMessage("Area.NonExist")); } return true; - } else { - try { - Residence.getSelectionManager().selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); - return true; - } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Select.Fail")); - return true; - } + } + try { + Residence.getSelectionManager().selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); + return true; + } catch (Exception ex) { + player.sendMessage(Residence.getLM().getMessage("Select.Fail")); + return true; } } diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java index ab1720dbb..60db9d121 100644 --- a/src/com/bekvon/bukkit/residence/commands/server.java +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -30,9 +30,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command res.getPermissions().setOwner(Residence.getServerLandname(), false); player.sendMessage(Residence.getLM().getMessage("Residence.OwnerChange", args[1], Residence.getServerLandname())); return true; - } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); - return true; } + player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + return true; } } diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 5d4585058..d8aa4449c 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -39,7 +39,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } } catch (Exception ex) { } - + if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("votes") || args[1].equalsIgnoreCase("likes"))) { int VotePage = 1; @@ -259,12 +259,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (res == null) { player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); return true; - } else { - for (int i = 2; i < args.length; i++) { - desc += args[i]; - if (i < args.length - 1) - desc += " "; - } + } + for (int i = 2; i < args.length; i++) { + desc += args[i]; + if (i < args.length - 1) + desc += " "; } } diff --git a/src/com/bekvon/bukkit/residence/containers/ConfigReader.java b/src/com/bekvon/bukkit/residence/containers/ConfigReader.java index 7bd6cbc74..c00267496 100644 --- a/src/com/bekvon/bukkit/residence/containers/ConfigReader.java +++ b/src/com/bekvon/bukkit/residence/containers/ConfigReader.java @@ -49,8 +49,7 @@ public List get(String path, List list, boolean colorize) { copySetting(path); if (colorize) return ColorsArray(config.getStringList(path)); - else - return config.getStringList(path); + return config.getStringList(path); } public List get(String path, List list) { @@ -70,8 +69,7 @@ public String get(String path, String boo, boolean colorize) { copySetting(path); if (colorize) return ChatColor.translateAlternateColorCodes('&', config.getString(path)); - else - return config.getString(path); + return config.getString(path); } public Double get(String path, Double boo) { diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index d30035ee5..df6613a3a 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -48,6 +48,7 @@ public void fireUpdateAdd(final ClaimedResidence res, final int deep) { Bukkit.getServer().getScheduler().cancelTask(schedId); schedId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override public void run() { schedId = -1; @@ -66,7 +67,7 @@ public void fireUpdateRemove(final ClaimedResidence res, final int deep) { handleResidenceRemove(res.getName(), res, resareas, deep); } - private String formatInfoWindow(String resid, ClaimedResidence res, String resName) { + private static String formatInfoWindow(String resid, ClaimedResidence res, String resName) { if (res == null) return null; if (res.getName() == null) @@ -163,7 +164,7 @@ private String formatInfoWindow(String resid, ClaimedResidence res, String resNa return v; } - private boolean isVisible(String id, String worldname) { + private static boolean isVisible(String id, String worldname) { List visible = Residence.getConfigManager().DynMapVisibleRegions; List hidden = Residence.getConfigManager().DynMapHiddenRegions; if (visible != null && visible.size() > 0) { @@ -178,7 +179,7 @@ private boolean isVisible(String id, String worldname) { return true; } - private void addStyle(String resid, AreaMarker m) { + private static void addStyle(String resid, AreaMarker m) { AreaStyle as = new AreaStyle(); int sc = 0xFF0000; int fc = 0xFF0000; diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index 616ebb59f..01c9ca469 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -24,9 +24,8 @@ public double getBalance(String playerName) { try { if (Economy.playerExists(playerName)) { return Economy.getMoney(playerName); - } else { - return 0; } + return 0; } catch (UserDoesNotExistException ex) { return 0; } @@ -57,9 +56,8 @@ public boolean add(String playerName, double amount) { } catch (NoLoanPermittedException ex) { return false; } - } else { - return false; } + return false; } @SuppressWarnings("deprecation") @@ -74,9 +72,8 @@ public boolean subtract(String playerName, double amount) { } catch (NoLoanPermittedException ex) { return false; } - } else { - return false; } + return false; } @SuppressWarnings("deprecation") diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java index bb2858ef4..0aed4b611 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java @@ -5,11 +5,13 @@ public class IConomy5Adapter implements EconomyInterface { + @Override public double getBalance(String playerName) { Account acc = iConomy.getAccount(playerName); return (acc == null) ? 0 : acc.getHoldings().balance(); } + @Override public boolean canAfford(String playerName, double amount) { if (amount == 0) { return true; @@ -18,6 +20,7 @@ public boolean canAfford(String playerName, double amount) { return (acc == null) ? false : acc.getHoldings().hasEnough(amount); } + @Override public boolean add(String playerName, double amount) { Account acc = iConomy.getAccount(playerName); if (acc != null) { @@ -27,6 +30,7 @@ public boolean add(String playerName, double amount) { return false; } + @Override public boolean subtract(String playerName, double amount) { Account acc = iConomy.getAccount(playerName); if (acc != null) { @@ -36,6 +40,7 @@ public boolean subtract(String playerName, double amount) { return false; } + @Override public boolean transfer(String playerFrom, String playerTo, double amount) { Account accFrom = iConomy.getAccount(playerFrom); Account accTo = iConomy.getAccount(playerTo); diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java index 58571e35c..64f0975b4 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java @@ -14,13 +14,13 @@ public IConomy6Adapter(iConomy iconomy) { @Override public double getBalance(String playerName) { - this.checkExist(playerName); + checkExist(playerName); return new Accounts().get(playerName).getHoldings().getBalance(); } @Override public boolean canAfford(String playerName, double amount) { - this.checkExist(playerName); + checkExist(playerName); double holdings = this.getBalance(playerName); if (holdings >= amount) { return true; @@ -30,14 +30,14 @@ public boolean canAfford(String playerName, double amount) { @Override public boolean add(String playerName, double amount) { - this.checkExist(playerName); + checkExist(playerName); new Accounts().get(playerName).getHoldings().add(amount); return true; } @Override public boolean subtract(String playerName, double amount) { - this.checkExist(playerName); + checkExist(playerName); if (this.canAfford(playerName, amount)) { new Accounts().get(playerName).getHoldings().subtract(amount); return true; @@ -47,8 +47,8 @@ public boolean subtract(String playerName, double amount) { @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - this.checkExist(playerTo); - this.checkExist(playerFrom); + checkExist(playerTo); + checkExist(playerFrom); if (this.canAfford(playerFrom, amount)) { Account p1 = new Accounts().get(playerFrom); Account p2 = new Accounts().get(playerTo); @@ -59,13 +59,14 @@ public boolean transfer(String playerFrom, String playerTo, double amount) { return false; } - private void checkExist(String playerName) { + private static void checkExist(String playerName) { Accounts acc = new Accounts(); if (!acc.exists(playerName)) { acc.create(playerName); } } + @Override public String getName() { return "iConomy"; } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 1a1893025..8a30f4c82 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -105,6 +105,7 @@ public void putForSale(ClaimedResidence res, Player player, int amount, boolean player.sendMessage(Residence.getLM().getMessage("Residence.ForSale", res.getName(), amount)); } + @Override public boolean putForSale(String areaname, int amount) { ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); return putForSale(res, amount); @@ -125,6 +126,7 @@ public boolean putForSale(ClaimedResidence res, int amount) { return true; } + @Override public void buyPlot(String areaname, Player player, boolean resadmin) { ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); buyPlot(res, player, resadmin); @@ -234,6 +236,7 @@ public void removeFromSale(Player player, ClaimedResidence res, boolean resadmin } } + @Override public void removeFromSale(String areaname) { ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); removeFromSale(res); @@ -246,6 +249,7 @@ public void removeFromSale(ClaimedResidence res) { Residence.getSignUtil().removeSign(res); } + @Override public boolean isForSale(String areaname) { ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); return isForSale(res); @@ -353,6 +357,7 @@ public void clearSales() { System.out.println("[Residence] - ReInit land selling."); } + @Override public int getSaleAmount(String areaname) { ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); return getSaleAmount(res); @@ -377,6 +382,7 @@ public void load(Map root) { } } + @Override public Map getBuyableResidences() { Map list = new HashMap(); for (ClaimedResidence res : sellAmount) { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 474ebd4e9..fb6f7c8e7 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -31,6 +31,7 @@ public RentManager() { rentableLand = new HashSet(); } + @Override public RentedLand getRentedLand(String landName) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); return getRentedLand(res); @@ -42,6 +43,7 @@ public RentedLand getRentedLand(ClaimedResidence res) { return res.isRented() ? res.getRentedLand() : null; } + @Override public List getRentedLands(String playername) { return getRentedLands(playername, false); } @@ -119,14 +121,17 @@ public List getRentedLandsList(String playername) { return rentedLands; } + @Override public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean resadmin) { setForRent(player, landName, amount, days, AllowRenewing, Residence.getConfigManager().isRentStayInMarket(), resadmin); } + @Override public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean resadmin) { setForRent(player, landName, amount, days, AllowRenewing, StayInMarket, Residence.getConfigManager().isRentAllowAutoPay(), resadmin); } + @Override public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean AllowAutoPay, boolean resadmin) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); setForRent(player, res, amount, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); @@ -181,6 +186,7 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days } } + @Override public void rent(Player player, String landName, boolean AutoPay, boolean resadmin) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); rent(player, res, AutoPay, resadmin); @@ -303,7 +309,7 @@ public void payRent(Player player, ClaimedResidence res, boolean resadmin) { PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (!resadmin && group.getMaxRentDays() != -1 && - this.msToDays((rentedLand.endTime - System.currentTimeMillis()) + daysToMs(land.days)) >= group.getMaxRentDays()) { + msToDays((rentedLand.endTime - System.currentTimeMillis()) + daysToMs(land.days)) >= group.getMaxRentDays()) { player.sendMessage(Residence.getLM().getMessage("Rent.MaxRentDays", group.getMaxRentDays())); return; } @@ -328,6 +334,7 @@ public void payRent(Player player, ClaimedResidence res, boolean resadmin) { } } + @Override public void unrent(Player player, String landName, boolean resadmin) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); unrent(player, res, resadmin); @@ -375,15 +382,16 @@ public void unrent(Player player, ClaimedResidence res, boolean resadmin) { } } - private long daysToMs(int days) { + private static long daysToMs(int days) { // return (((long) days) * 1000L); - return (((long) days) * 24L * 60L * 60L * 1000L); + return ((days) * 24L * 60L * 60L * 1000L); } - private int msToDays(long ms) { - return (int) Math.ceil(((((double) ms / 1000D) / 60D) / 60D) / 24D); + private static int msToDays(long ms) { + return (int) Math.ceil((((ms / 1000D) / 60D) / 60D) / 24D); } + @Override public void removeFromForRent(Player player, String landName, boolean resadmin) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); removeFromForRent(player, res, resadmin); @@ -415,6 +423,7 @@ public void removeFromForRent(Player player, ClaimedResidence res, boolean resad } } + @Override public void removeFromRent(String landName) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); removeFromRent(res); @@ -424,6 +433,7 @@ public void removeFromRent(ClaimedResidence res) { rentedLand.remove(res); } + @Override public void removeRentable(String landName) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); removeRentable(res); @@ -437,6 +447,7 @@ public void removeRentable(ClaimedResidence res) { Residence.getSignUtil().removeSign(res.getName()); } + @Override public boolean isForRent(String landName) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); return isForRent(res); @@ -461,6 +472,7 @@ public RentableLand getRentableLand(ClaimedResidence res) { return null; } + @Override public boolean isRented(String landName) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); return isRented(res); @@ -472,6 +484,7 @@ public boolean isRented(ClaimedResidence res) { return rentedLand.contains(res); } + @Override public String getRentingPlayer(String landName) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); return getRentingPlayer(res); @@ -483,6 +496,7 @@ public String getRentingPlayer(ClaimedResidence res) { return res.isRented() ? res.getRentedLand().player : null; } + @Override public int getCostOfRent(String landName) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); return getCostOfRent(res); @@ -494,6 +508,7 @@ public int getCostOfRent(ClaimedResidence res) { return res.isForRent() ? res.getRentable().cost : 0; } + @Override public boolean getRentableRepeatable(String landName) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); return getRentableRepeatable(res); @@ -505,6 +520,7 @@ public boolean getRentableRepeatable(ClaimedResidence res) { return res.isForRent() ? res.getRentable().AllowRenewing : false; } + @Override public boolean getRentedAutoRepeats(String landName) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); return getRentedAutoRepeats(res); @@ -516,6 +532,7 @@ public boolean getRentedAutoRepeats(ClaimedResidence res) { return getRentableRepeatable(res) ? (rentedLand.contains(res) ? res.getRentedLand().AutoPay : false) : false; } + @Override public int getRentDays(String landName) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); return getRentDays(res); @@ -527,6 +544,7 @@ public int getRentDays(ClaimedResidence res) { return res.isForRent() ? res.getRentable().days : 0; } + @Override public void checkCurrentRents() { for (ClaimedResidence res : rentedLand) { @@ -579,7 +597,7 @@ public void checkCurrentRents() { res.setRented(null); res.getPermissions().applyDefaultFlags(); } else { - land.endTime = System.currentTimeMillis() + this.daysToMs(rentable.days); + land.endTime = System.currentTimeMillis() + daysToMs(rentable.days); } } @@ -609,6 +627,7 @@ public void checkCurrentRents() { } } + @Override public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); setRentRepeatable(player, res, value, resadmin); @@ -644,6 +663,7 @@ public void setRentRepeatable(Player player, ClaimedResidence res, boolean value } + @Override public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin) { ClaimedResidence res = Residence.getResidenceManager().getByName(landName); setRentedRepeatable(player, res, value, resadmin); @@ -800,6 +820,7 @@ public void printRentableResidences(Player player, int page) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + prev + "," + next); } + @Override public int getRentCount(String player) { int count = 0; for (ClaimedResidence res : rentedLand) { @@ -809,6 +830,7 @@ public int getRentCount(String player) { return count; } + @Override public int getRentableCount(String player) { int count = 0; for (ClaimedResidence res : rentableLand) { @@ -819,10 +841,12 @@ public int getRentableCount(String player) { return count; } + @Override public Set getRentableResidences() { return rentableLand; } + @Override public Set getCurrentlyRentedResidences() { return rentedLand; } @@ -872,7 +896,7 @@ public Map save() { return root; } - private RentableLand loadRentable(Map map) { + private static RentableLand loadRentable(Map map) { RentableLand newland = new RentableLand(); newland.cost = (Integer) map.get("Cost"); newland.days = (Integer) map.get("Days"); @@ -884,7 +908,7 @@ private RentableLand loadRentable(Map map) { return newland; } - private RentedLand loadRented(Map map) { + private static RentedLand loadRented(Map map) { RentedLand newland = new RentedLand(); newland.player = (String) map.get("Player"); newland.startTime = (Long) map.get("StartTime"); diff --git a/src/com/bekvon/bukkit/residence/event/CancellableResidenceEvent.java b/src/com/bekvon/bukkit/residence/event/CancellableResidenceEvent.java index 84e271ae5..ca192a679 100644 --- a/src/com/bekvon/bukkit/residence/event/CancellableResidenceEvent.java +++ b/src/com/bekvon/bukkit/residence/event/CancellableResidenceEvent.java @@ -11,10 +11,12 @@ public CancellableResidenceEvent(String eventName, ClaimedResidence resref) { super(eventName, resref); } + @Override public boolean isCancelled() { return cancelled; } + @Override public void setCancelled(boolean bln) { cancelled = bln; } diff --git a/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerEvent.java b/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerEvent.java index 618f187a6..f102621ed 100644 --- a/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerEvent.java +++ b/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerEvent.java @@ -13,10 +13,12 @@ public CancellableResidencePlayerEvent(String eventName, ClaimedResidence resref cancelled = false; } + @Override public boolean isCancelled() { return cancelled; } + @Override public void setCancelled(boolean bln) { cancelled = bln; } diff --git a/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerFlagEvent.java b/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerFlagEvent.java index a4f7011c4..bbdaa82e2 100644 --- a/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerFlagEvent.java +++ b/src/com/bekvon/bukkit/residence/event/CancellableResidencePlayerFlagEvent.java @@ -12,10 +12,12 @@ public CancellableResidencePlayerFlagEvent(String eventName, ClaimedResidence re super(eventName, resref, player, flag, type, target); } + @Override public boolean isCancelled() { return cancelled; } + @Override public void setCancelled(boolean bln) { cancelled = bln; } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java index ccd9487a6..29db54550 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java @@ -31,10 +31,12 @@ public ResidenceCommandEvent(String command, String args[], CommandSender sender commandsender = sender; } + @Override public boolean isCancelled() { return cancelled; } + @Override public void setCancelled(boolean bln) { cancelled = bln; } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java index 028817e53..5ba53fc43 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java @@ -6,31 +6,30 @@ public class ResidenceEvent extends Event { - private static final HandlerList handlers = new HandlerList(); + private static final HandlerList handlers = new HandlerList(); private String message; - - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } ClaimedResidence res; - public ResidenceEvent(String eventName, ClaimedResidence resref) - { - message = eventName; - res = resref; + public ResidenceEvent(String eventName, ClaimedResidence resref) { + message = eventName; + res = resref; } - + public String getMessage() { - return message; + return message; } - public ClaimedResidence getResidence() - { - return res; + public ClaimedResidence getResidence() { + return res; } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java index 14e1fda88..a37696b4a 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java @@ -6,6 +6,7 @@ public class ResidenceFlagCheckEvent extends ResidenceFlagEvent { private static final HandlerList handlers = new HandlerList(); + @Override public HandlerList getHandlers() { return handlers; } diff --git a/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java b/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java index 11884a0c8..1356dd4b7 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java @@ -8,28 +8,27 @@ public class ResidencePlayerEvent extends ResidenceEvent implements ResidencePla Player p; - public ResidencePlayerEvent(String eventName, ClaimedResidence resref, Player player) - { - super(eventName, resref); - res = resref; - p = player; + public ResidencePlayerEvent(String eventName, ClaimedResidence resref, Player player) { + super(eventName, resref); + res = resref; + p = player; } - public boolean isPlayer() - { - return p!=null; + @Override + public boolean isPlayer() { + return p != null; } - public boolean isAdmin() - { - if(isPlayer()) - { - return Residence.getPermissionManager().isResidenceAdmin(p); - } - return true; + @Override + public boolean isAdmin() { + if (isPlayer()) { + return Residence.getPermissionManager().isResidenceAdmin(p); + } + return true; } - public Player getPlayer() - { - return p; + + @Override + public Player getPlayer() { + return p; } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java b/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java index 1cf238f1b..184c413c0 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java @@ -12,10 +12,12 @@ public ResidencePlayerFlagEvent(String eventName, ClaimedResidence resref, Playe p = player; } + @Override public boolean isPlayer() { return p != null; } + @Override public boolean isAdmin() { if (isPlayer()) { return Residence.getPermissionManager().isResidenceAdmin(p); @@ -23,6 +25,7 @@ public boolean isAdmin() { return true; } + @Override public Player getPlayer() { return p; } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceRenameEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceRenameEvent.java index 32626d83e..ac19f7607 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceRenameEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceRenameEvent.java @@ -1,24 +1,29 @@ -package com.bekvon.bukkit.residence.event; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class ResidenceRenameEvent extends ResidenceEvent { - protected String NewResName; - protected String OldResName; - protected ClaimedResidence res; - public ResidenceRenameEvent(ClaimedResidence resref, String NewName, String OldName) { - super("RESIDENCE_RENAME", resref); - NewResName = NewName; - OldResName = OldName; - res = resref; - } - public String getNewResidenceName() { - return NewResName; - } - public String getOldResidenceName() { - return OldResName; - } - public ClaimedResidence getResidence() { - return res; - } -} +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class ResidenceRenameEvent extends ResidenceEvent { + protected String NewResName; + protected String OldResName; + protected ClaimedResidence res; + + public ResidenceRenameEvent(ClaimedResidence resref, String NewName, String OldName) { + super("RESIDENCE_RENAME", resref); + NewResName = NewName; + OldResName = OldName; + res = resref; + } + + public String getNewResidenceName() { + return NewResName; + } + + public String getOldResidenceName() { + return OldResName; + } + + @Override + public ClaimedResidence getResidence() { + return res; + } +} diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceSizeChangeEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceSizeChangeEvent.java index 66a5bd08c..7c85c51fd 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceSizeChangeEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceSizeChangeEvent.java @@ -35,6 +35,7 @@ public String getResidenceName() { return resname; } + @Override public ClaimedResidence getResidence() { return res; } diff --git a/src/com/bekvon/bukkit/residence/gui/FlagData.java b/src/com/bekvon/bukkit/residence/gui/FlagData.java index 1a5389e70..7e4fef1b6 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagData.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagData.java @@ -14,7 +14,7 @@ public void addFlagButton(String flag, ItemStack item) { this.items.put(flag, item); } - public void removeFlagButton(String flag, ItemStack item) { + public void removeFlagButton(String flag) { this.items.remove(flag); } diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 35a0c4048..2deef6b44 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -181,7 +181,7 @@ public void recalculateResidence(ClaimedResidence res) { if (targetPlayer == null) TempPermMap.remove("admin"); - TempPermMap = (LinkedHashMap) Residence.getSortingManager().sortByKeyASC(TempPermMap); + TempPermMap = Residence.getSortingManager().sortByKeyASC(TempPermMap); FlagData flagData = Residence.getFlagUtilManager().getFlagData(); diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index 2177b7dea..336d50e16 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -45,10 +45,9 @@ public boolean toggle(Material mat) { if (list.contains(mat)) { list.remove(mat); return false; - } else { - list.add(mat); - return true; } + list.add(mat); + return true; } public void remove(Material mat) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 1b93cf414..d5b5e2db9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -42,7 +42,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockExplodeEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.PlayerLeashEntityEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent; @@ -92,7 +91,7 @@ public static boolean isMonster(Entity ent) { return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast); } - private boolean isTamed(Entity ent) { + private static boolean isTamed(Entity ent) { return (ent instanceof Tameable ? ((Tameable) ent).isTamed() : false); } @@ -335,7 +334,7 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { Entity entity = event.getEntity(); - if (!Residence.getNms().isAnimal(entity) && !(player instanceof Player)) + if (!Residence.getNms().isAnimal(entity)) return; if (Residence.isResAdminOn(player)) @@ -366,86 +365,87 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { if (!perms.has("animals", true)) { event.setCancelled(true); return; - } else - switch (event.getSpawnReason()) { - case BUILD_WITHER: - break; - case BUILD_IRONGOLEM: - case BUILD_SNOWMAN: - case CUSTOM: - case DEFAULT: - if (!perms.has("canimals", true)) { - event.setCancelled(true); - return; - } - break; - case BREEDING: - case CHUNK_GEN: - case CURED: - case DISPENSE_EGG: - case EGG: - case JOCKEY: - case MOUNT: - case VILLAGE_INVASION: - case VILLAGE_DEFENSE: - case NETHER_PORTAL: - case OCELOT_BABY: - case NATURAL: - if (!perms.has("nanimals", true)) { - event.setCancelled(true); - return; - } - break; - case SPAWNER_EGG: - case SPAWNER: - if (!perms.has("sanimals", true)) { - event.setCancelled(true); - return; - } - break; - default: - break; - } - } else if (isMonster(ent)) + } + switch (event.getSpawnReason()) { + case BUILD_WITHER: + break; + case BUILD_IRONGOLEM: + case BUILD_SNOWMAN: + case CUSTOM: + case DEFAULT: + if (!perms.has("canimals", true)) { + event.setCancelled(true); + return; + } + break; + case BREEDING: + case CHUNK_GEN: + case CURED: + case DISPENSE_EGG: + case EGG: + case JOCKEY: + case MOUNT: + case VILLAGE_INVASION: + case VILLAGE_DEFENSE: + case NETHER_PORTAL: + case OCELOT_BABY: + case NATURAL: + if (!perms.has("nanimals", true)) { + event.setCancelled(true); + return; + } + break; + case SPAWNER_EGG: + case SPAWNER: + if (!perms.has("sanimals", true)) { + event.setCancelled(true); + return; + } + break; + default: + break; + } + } else if (isMonster(ent)) { if (!perms.has("monsters", true)) { event.setCancelled(true); return; - } else - switch (event.getSpawnReason()) { - case BUILD_WITHER: - case CUSTOM: - case DEFAULT: - if (!perms.has("cmonsters", true)) { - event.setCancelled(true); - return; - } - break; - case CHUNK_GEN: - case CURED: - case DISPENSE_EGG: - case INFECTION: - case JOCKEY: - case MOUNT: - case NETHER_PORTAL: - case SILVERFISH_BLOCK: - case SLIME_SPLIT: - case LIGHTNING: - case NATURAL: - if (!perms.has("nmonsters", true)) { - event.setCancelled(true); - return; - } - break; - case SPAWNER_EGG: - case SPAWNER: - if (!perms.has("smonsters", true)) { - event.setCancelled(true); - return; - } - break; - default: - break; - } + } + switch (event.getSpawnReason()) { + case BUILD_WITHER: + case CUSTOM: + case DEFAULT: + if (!perms.has("cmonsters", true)) { + event.setCancelled(true); + return; + } + break; + case CHUNK_GEN: + case CURED: + case DISPENSE_EGG: + case INFECTION: + case JOCKEY: + case MOUNT: + case NETHER_PORTAL: + case SILVERFISH_BLOCK: + case SLIME_SPLIT: + case LIGHTNING: + case NATURAL: + if (!perms.has("nmonsters", true)) { + event.setCancelled(true); + return; + } + break; + case SPAWNER_EGG: + case SPAWNER: + if (!perms.has("smonsters", true)) { + event.setCancelled(true); + return; + } + break; + default: + break; + } + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -597,28 +597,6 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { } } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockExplodeEvent(BlockExplodeEvent event) { - - Location loc = event.getBlock().getLocation(); - - if (Residence.isDisabledWorldListener(loc.getWorld())) - return; - if (event.isCancelled()) - return; - FlagPermissions world = Residence.getWorldFlags().getPerms(loc.getWorld().getName()); - List preserve = new ArrayList(); - for (Block block : event.blockList()) { - FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); - if (!blockperms.has("explode", world.has("explode", true))) { - preserve.add(block); - } - } - for (Block block : preserve) { - event.blockList().remove(block); - } - } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent event) { // disabling event on world @@ -959,21 +937,25 @@ public void onEntityDamage(EntityDamageEvent event) { attacker = (Player) ((Projectile) damager).getShooter(); } if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { - attacker.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); + if (attacker != null) + attacker.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); event.setCancelled(true); return; } /* Check for Player vs Player */ if (area == null) { /* World PvP */ - if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { - attacker.sendMessage(Residence.getLM().getMessage("General.WorldPVPDisabled")); - event.setCancelled(true); - } + if (damager != null) + if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { + if (attacker != null) + attacker.sendMessage(Residence.getLM().getMessage("General.WorldPVPDisabled")); + event.setCancelled(true); + } } else { /* Normal PvP */ if (!isSnowBall && !area.getPermissions().has("pvp", true) || isSnowBall && !allowSnowBall) { - attacker.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); + if (attacker != null) + attacker.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); event.setCancelled(true); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 1df439ae3..b4db79a6e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -11,11 +11,9 @@ import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.OfflinePlayer; import org.bukkit.WeatherType; import org.bukkit.block.Block; import org.bukkit.block.Sign; -import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Boat; import org.bukkit.entity.Damageable; import org.bukkit.entity.Entity; @@ -208,6 +206,7 @@ public void onPlayerLogin(PlayerLoginEvent event) { return; final Player player = event.getPlayer(); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override public void run() { if (!player.isOnline()) return; @@ -228,10 +227,17 @@ public void run() { }, Residence.getConfigManager().getRentInformDelay() * 20L); } - @EventHandler + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onFishingRodUse(PlayerFishEvent event) { + if (event == null) + return; + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; Player player = event.getPlayer(); - if (event.getCaught() instanceof ArmorStand || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { + if (event.getCaught() == null) + return; + if (Residence.getNms().isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { FlagPermissions perm = Residence.getPermsByLoc(event.getCaught().getLocation()); ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getCaught().getLocation()); if (!perm.has("hook", false) && res != null && !res.getPermissions().playerHas(player, "hook", true) || @@ -412,7 +418,7 @@ public void onSignInteract(PlayerInteractEvent event) { if (!(block.getState() instanceof Sign)) return; - Player player = (Player) event.getPlayer(); + Player player = event.getPlayer(); Location loc = block.getLocation(); @@ -523,6 +529,7 @@ public void onSignCreate(SignChangeEvent event) { Residence.getSignUtil().saveSigns(); } Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override public void run() { Residence.getSignUtil().CheckSign(residence); } @@ -572,7 +579,7 @@ public void onPlayerQuit(PlayerQuitEvent event) { lastOutsideLoc.remove(pname); Residence.getChatManager().removeFromChannel(pname); Residence.getPlayerListener().removePlayerResidenceChat(pname); - Residence.getOfflinePlayerMap().put(pname, (OfflinePlayer) event.getPlayer()); + Residence.getOfflinePlayerMap().put(pname, event.getPlayer()); if (Residence.getAutoSelectionManager().getList().containsKey(pname.toLowerCase())) Residence.getAutoSelectionManager().getList().remove(pname); } @@ -587,8 +594,13 @@ public void onPlayerJoin(PlayerChangedWorldEvent event) { FlagPermissions perms = Residence.getPermsByLocForPlayer(player.getLocation(), player); - if ((player.getAllowFlight() || player.isFlying()) && perms.has("nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( + f: if ((player.getAllowFlight() || player.isFlying()) && perms.has("nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res != null && res.isOwner(player)) + break f; + Location lc = player.getLocation(); Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); location.setPitch(lc.getPitch()); @@ -669,41 +681,41 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { } @SuppressWarnings("deprecation") - private boolean isContainer(Material mat, Block block) { + private static boolean isContainer(Material mat, Block block) { return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") || Residence .getConfigManager().getCustomContainers().contains(block.getTypeId()); } @SuppressWarnings("deprecation") - private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { - - switch (mat) { - case ITEM_FRAME: - case BEACON: - case FLOWER_POT: - case COMMAND: - case ANVIL: - case CAKE_BLOCK: - case NOTE_BLOCK: - case DIODE: - case DIODE_BLOCK_OFF: - case DIODE_BLOCK_ON: - case REDSTONE_COMPARATOR: - case REDSTONE_COMPARATOR_OFF: - case REDSTONE_COMPARATOR_ON: - case BED_BLOCK: - case WORKBENCH: - case BREWING_STAND: - case ENCHANTMENT_TABLE: - case DAYLIGHT_DETECTOR: - case DAYLIGHT_DETECTOR_INVERTED: + private static boolean isCanUseEntity_RClickOnly(Material mat, Block block) { + + switch (mat.name()) { + case "ITEM_FRAME": + case "BEACON": + case "FLOWER_POT": + case "COMMAND": + case "ANVIL": + case "CAKE_BLOCK": + case "NOTE_BLOCK": + case "DIODE": + case "DIODE_BLOCK_OFF": + case "DIODE_BLOCK_ON": + case "REDSTONE_COMPARATOR": + case "REDSTONE_COMPARATOR_OFF": + case "REDSTONE_COMPARATOR_ON": + case "BED_BLOCK": + case "WORKBENCH": + case "BREWING_STAND": + case "ENCHANTMENT_TABLE": + case "DAYLIGHT_DETECTOR": + case "DAYLIGHT_DETECTOR_INVERTED": return true; default: return Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); } } - private boolean isCanUseEntity(Material mat, Block block) { + private static boolean isCanUseEntity(Material mat, Block block) { return Residence.getNms().isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); } @@ -928,11 +940,10 @@ public void onPlayerInteract(PlayerInteractEvent event) { event.setCancelled(true); player.sendMessage(Residence.getLM().getMessage("Flag.Deny", checkMat.getValue())); return; - } else { - event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "use")); - return; } + event.setCancelled(true); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "use")); + return; } if (Residence.getConfigManager().getCustomContainers().contains(blockId)) { @@ -1315,6 +1326,7 @@ public void onPlayerDeath(final PlayerDeathEvent event) { if (res.getPermissions().has("respawn", false) && Bukkit.getVersion().toString().contains("Spigot")) Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override public void run() { try { event.getEntity().spigot().respawn(); @@ -1389,8 +1401,10 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { } else { if (res != null && ResOld.getName().equals(res.getName())) { - if (player.isFlying() && res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( + f: if (player.isFlying() && res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { + if (res != null && res.isOwner(player)) + break f; Location lc = player.getLocation(); Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); location.setPitch(lc.getPitch()); @@ -1495,8 +1509,10 @@ public void run() { } // Preventing fly in residence only when player has move permission - if (player.isFlying() && res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( + f: if (player.isFlying() && res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { + if (res != null && res.isOwner(player)) + break f; Location lc = player.getLocation(); Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); location.setPitch(lc.getPitch()); diff --git a/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java b/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java index 178ed1474..801323174 100644 --- a/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java +++ b/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java @@ -12,10 +12,12 @@ public class BPermissionsAdapter implements PermissionsInterface { public BPermissionsAdapter() { } + @Override public String getPlayerGroup(Player player) { return this.getPlayerGroup(player.getName(), player.getWorld().getName()); } + @Override public String getPlayerGroup(String player, String world) { String[] groups = ApiLayer.getGroups(world, CalculableType.USER, player); PermissionManager pmanager = Residence.getPermissionManager(); diff --git a/src/com/bekvon/bukkit/residence/permissions/LegacyPermissions.java b/src/com/bekvon/bukkit/residence/permissions/LegacyPermissions.java index 3a53d98a4..93cac1390 100644 --- a/src/com/bekvon/bukkit/residence/permissions/LegacyPermissions.java +++ b/src/com/bekvon/bukkit/residence/permissions/LegacyPermissions.java @@ -11,10 +11,12 @@ public LegacyPermissions(PermissionHandler perms) { authority = perms; } + @Override public String getPlayerGroup(Player player) { return this.getPlayerGroup(player.getName(), player.getWorld().getName()); } + @Override public String getPlayerGroup(String player, String world) { String group = authority.getPrimaryGroup(world, player); if (group != null) diff --git a/src/com/bekvon/bukkit/residence/permissions/OriginalPermissions.java b/src/com/bekvon/bukkit/residence/permissions/OriginalPermissions.java index d402e3c1a..06c7b5561 100644 --- a/src/com/bekvon/bukkit/residence/permissions/OriginalPermissions.java +++ b/src/com/bekvon/bukkit/residence/permissions/OriginalPermissions.java @@ -11,10 +11,12 @@ public OriginalPermissions(PermissionHandler perms) { authority = perms; } + @Override public String getPlayerGroup(Player player) { return this.getPlayerGroup(player.getName(), player.getWorld().getName()); } + @Override public String getPlayerGroup(String player, String world) { String group = authority.getPrimaryGroup(world, player); if (group != null) { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 047e57c96..589add615 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -35,7 +35,7 @@ public PermissionManager() { playersGroup = Collections.synchronizedMap(new HashMap()); globalFlagPerms = new FlagPermissions(); this.readConfig(); - this.checkPermissions(); + checkPermissions(); } catch (Exception ex) { Logger.getLogger(PermissionManager.class.getName()).log(Level.SEVERE, null, ex); } @@ -132,7 +132,7 @@ public boolean isResidenceAdmin(CommandSender sender) { return (sender.hasPermission("residence.admin") || (sender.isOp() && Residence.getConfigManager().getOpsAreAdmins())); } - private void checkPermissions() { + private static void checkPermissions() { Server server = Residence.getServ(); Plugin p = server.getPluginManager().getPlugin("Vault"); if (p != null) { @@ -141,9 +141,8 @@ private void checkPermissions() { perms = vault; Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault using permissions plugin:" + vault.getPermissionsName()); return; - } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault, but Vault reported no usable permissions system..."); } + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault, but Vault reported no usable permissions system..."); } p = server.getPluginManager().getPlugin("PermissionsBukkit"); if (p != null) { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java b/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java index 4858a44ef..47b10aee9 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java @@ -14,10 +14,12 @@ public PermissionsBukkitAdapter(PermissionsPlugin p) { newperms = p; } + @Override public String getPlayerGroup(Player player) { return this.getPlayerGroup(player.getName(), player.getWorld().getName()); } + @Override public String getPlayerGroup(String player, String world) { PermissionManager pmanager = Residence.getPermissionManager(); List groups = newperms.getGroups(player); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 2c8fc6e38..41ba0228b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -4,7 +4,6 @@ import org.bukkit.GameMode; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.RandomLoc; import com.bekvon.bukkit.residence.economy.ResidenceBank; @@ -318,7 +317,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa return false; } if (chargeMoney && parent == null && Residence.getConfigManager().enableEconomy() && !resadmin) { - int chargeamount = (int) Math.ceil((double) area.getSize() * group.getCostPerBlock()); + int chargeamount = (int) Math.ceil(area.getSize() * group.getCostPerBlock()); if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) { return false; } @@ -435,7 +434,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole return false; } if (parent == null && Residence.getConfigManager().enableEconomy() && !resadmin) { - int chargeamount = (int) Math.ceil((double) (newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); + int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); if (chargeamount > 0) { if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) { return false; @@ -465,9 +464,8 @@ public boolean addSubzone(String name, Location loc1, Location loc2) { public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { if (player == null) { return this.addSubzone(null, Residence.getServerLandname(), loc1, loc2, name, resadmin); - } else { - return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); } + return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); } public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { @@ -560,12 +558,11 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l player.sendMessage(Residence.getLM().getMessage("Subzone.Create", name)); } return true; - } else { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Subzone.CreateFail", name)); - } - return false; } + if (player != null) { + player.sendMessage(Residence.getLM().getMessage("Subzone.CreateFail", name)); + } + return false; } public String getSubzoneNameByLoc(Location loc) { @@ -810,8 +807,8 @@ public Location getMiddleFreeLoc(Location insideLoc, Player player) { int y = area.getHighLoc().getBlockY(); - int x = area.getLowLoc().getBlockX() + (int) (area.getXSize() / 2); - int z = area.getLowLoc().getBlockZ() + (int) (area.getZSize() / 2); + int x = area.getLowLoc().getBlockX() + area.getXSize() / 2; + int z = area.getLowLoc().getBlockZ() + area.getZSize() / 2; Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); boolean found = false; @@ -834,9 +831,8 @@ public Location getMiddleFreeLoc(Location insideLoc, Player player) { } if (found) { return newLoc; - } else { - return getOutsideFreeLoc(insideLoc, player); } + return getOutsideFreeLoc(insideLoc, player); } public Location getOutsideFreeLoc(Location insideLoc, Player player) { @@ -1059,11 +1055,11 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } } - if (!ResidenceCommandListener.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { + if (!Residence.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { int distance = isSafeTp(reqPlayer); if (distance > 6) { reqPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportConfirm", distance)); - ResidenceCommandListener.getTeleportMap().put(reqPlayer.getName(), this); + Residence.getTeleportMap().put(reqPlayer.getName(), this); return; } } @@ -1072,7 +1068,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r reqPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportStarted", this.getName(), Residence.getConfigManager().getTeleportDelay())); if (Residence.getConfigManager().isTeleportTitleMessage()) TpTimer(reqPlayer, Residence.getConfigManager().getTeleportDelay()); - ResidenceCommandListener.getTeleportDelayMap().add(reqPlayer.getName()); + Residence.getTeleportDelayMap().add(reqPlayer.getName()); } if (tpLoc != null) { @@ -1084,7 +1080,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r CuboidArea area = areas.values().iterator().next(); if (area == null) { reqPlayer.sendMessage(ChatColor.RED + "Could not find area to teleport to..."); - ResidenceCommandListener.getTeleportDelayMap().remove(targetPlayer.getName()); + Residence.getTeleportDelayMap().remove(targetPlayer.getName()); return; } final Location targloc = this.getMiddleFreeLoc(area.getHighLoc(), targetPlayer); @@ -1098,8 +1094,9 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r public void TpTimer(final Player player, final int t) { Residence.getAB().sendTitle(player, Residence.getLM().getMessage("General.TeleportTitle"), Residence.getLM().getMessage("General.TeleportTitleTime", t)); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override public void run() { - if (!ResidenceCommandListener.getTeleportDelayMap().contains(player.getName())) + if (!Residence.getTeleportDelayMap().contains(player.getName())) return; if (t > 1) TpTimer(player, t - 1); @@ -1114,11 +1111,12 @@ public void performDelaydTp(final Location targloc, final Player targetPlayer, P return; Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override public void run() { - if (!ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) + if (!Residence.getTeleportDelayMap().contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) return; - else if (ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName())) - ResidenceCommandListener.getTeleportDelayMap().remove(targetPlayer.getName()); + else if (Residence.getTeleportDelayMap().contains(targetPlayer.getName())) + Residence.getTeleportDelayMap().remove(targetPlayer.getName()); targetPlayer.teleport(targloc); if (near) targetPlayer.sendMessage(Residence.getLM().getMessage("Residence.TeleportNear")); @@ -1181,9 +1179,11 @@ public void removeArea(Player player, String id, boolean resadmin) { return; removeArea(id); - player.sendMessage(Residence.getLM().getMessage("Area.Remove")); + if (player != null) + player.sendMessage(Residence.getLM().getMessage("Area.Remove")); } else { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + if (player != null) + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); } } @@ -1234,7 +1234,7 @@ public Map save() { } // Converting double with comman to dots format and striping to 2 numbers after dot - private double convertDouble(double d) { + private static double convertDouble(double d) { return convertDouble(String.valueOf(d)); } @@ -1423,10 +1423,9 @@ public boolean renameArea(Player player, String oldName, String newName, boolean if (player != null) player.sendMessage(Residence.getLM().getMessage("Area.Rename", oldName, newName)); return true; - } else { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); - return false; } + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + return false; } public CuboidArea getArea(String name) { @@ -1472,8 +1471,7 @@ public boolean isOwner(CommandSender sender) { return isOwner(sender.getName()); if (sender instanceof Player) return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); - else - return true; + return true; } public void setChatPrefix(String ChatPrefix) { @@ -1522,10 +1520,9 @@ public boolean addCmdBlackList(String cmd) { if (!this.cmdBlackList.contains(cmd.toLowerCase())) { this.cmdBlackList.add(cmd.toLowerCase()); return true; - } else { - this.cmdBlackList.remove(cmd.toLowerCase()); - return false; } + this.cmdBlackList.remove(cmd.toLowerCase()); + return false; } public boolean addCmdWhiteList(String cmd) { @@ -1534,10 +1531,9 @@ public boolean addCmdWhiteList(String cmd) { if (!this.cmdWhiteList.contains(cmd.toLowerCase())) { this.cmdWhiteList.add(cmd.toLowerCase()); return true; - } else { - this.cmdWhiteList.remove(cmd.toLowerCase()); - return false; } + this.cmdWhiteList.remove(cmd.toLowerCase()); + return false; } public Double getBlockSellPrice() { diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index 9fd5c1247..dc51c3f59 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -92,7 +92,7 @@ public boolean checkCollision(CuboidArea area) { return advCuboidCheckCollision(highPoints, lowPoints, area.highPoints, area.lowPoints); } - private boolean advCuboidCheckCollision(Location A1High, Location A1Low, Location A2High, Location A2Low) { + private static boolean advCuboidCheckCollision(Location A1High, Location A1Low, Location A2High, Location A2Low) { int A1HX = A1High.getBlockX(); int A1LX = A1Low.getBlockX(); int A1HY = A1High.getBlockY(); @@ -121,8 +121,8 @@ public long getSize() { if (!Residence.getConfigManager().isNoCostForYBlocks()) { int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; return xsize * ysize * zsize; - } else - return xsize * zsize; + } + return xsize * zsize; } public int getXSize() { @@ -149,7 +149,7 @@ public World getWorld() { return highPoints.getWorld(); } - public void save(DataOutputStream out, int version) throws IOException { + public void save(DataOutputStream out) throws IOException { out.writeUTF(highPoints.getWorld().getName()); out.writeInt(highPoints.getBlockX()); out.writeInt(highPoints.getBlockY()); @@ -159,7 +159,7 @@ public void save(DataOutputStream out, int version) throws IOException { out.writeInt(lowPoints.getBlockZ()); } - public static CuboidArea load(DataInputStream in, int version) throws IOException { + public static CuboidArea load(DataInputStream in) throws IOException { CuboidArea newArea = new CuboidArea(); Server server = Residence.getServ(); World world = server.getWorld(in.readUTF()); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index c4a2b60be..13cf07fbf 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -331,7 +331,7 @@ public static FlagPermissions parseFromConfigNode(String name, ConfigurationSect return list; } - public static FlagPermissions parseFromConfigNodeAsList(String name, String node, String stage) { + public static FlagPermissions parseFromConfigNodeAsList(String node, String stage) { FlagPermissions list = new FlagPermissions(); if (node.equalsIgnoreCase("true")) { list.setFlag(node, FlagState.valueOf(stage)); @@ -789,9 +789,8 @@ public String listPlayerFlags(String player) { Map flags = this.getPlayerFlags(player, false); if (flags != null) { return this.printPlayerFlags(flags); - } else { - return "none"; } + return "none"; } protected String printPlayerFlags(Map flags) { @@ -1045,9 +1044,8 @@ public String listGroupFlags(String group) { sbuild.append("none"); } return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); - } else { - return "none"; } + return "none"; } public void clearFlags() { diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index f02507339..d7ce966d7 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -70,7 +70,7 @@ public void renewArea(String area, Player player) { double cost = limits.getLeaseRenewCost(); ClaimedResidence res = manager.getByName(area); area = res.getName(); - int amount = (int) Math.ceil((double) res.getTotalSize() * cost); + int amount = (int) Math.ceil(res.getTotalSize() * cost); if (cost != 0D) { //Account account = iConomy.getBank().getAccount(player.getName()); if (econ.canAfford(player.getName(), amount)/*account.hasEnough(amount)*/) { @@ -101,16 +101,16 @@ public void renewArea(String area, Player player) { public int getRenewCost(ClaimedResidence res) { PermissionGroup limits = Residence.getPermissionManager().getGroup(res.getPermissions().getOwner(), res.getPermissions().getWorld()); double cost = limits.getLeaseRenewCost(); - int amount = (int) Math.ceil((double) res.getTotalSize() * cost); + int amount = (int) Math.ceil(res.getTotalSize() * cost); return amount; } - private long daysToMs(int days) { - return (((long) days) * 24L * 60L * 60L * 1000L); + private static long daysToMs(int days) { + return ((days) * 24L * 60L * 60L * 1000L); } - private int msToDays(long ms) { - return (int) Math.ceil(((((double) ms / 1000D) / 60D) / 60D) / 24D); + private static int msToDays(long ms) { + return (int) Math.ceil((((ms / 1000D) / 60D) / 60D) / 24D); } private int daysRemaining(String area) { diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index fae3d6367..8f48c2799 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -55,6 +55,7 @@ public void run() { }); } + @Override public ArrayList getResidenceList(String player) { ArrayList temp = new ArrayList(); playerJoin(player); @@ -68,6 +69,7 @@ public ArrayList getResidenceList(String player) { return temp; } + @Override public ArrayList getResidenceList(String player, boolean showhidden) { return getResidenceList(player, showhidden, false); } @@ -114,6 +116,7 @@ public ArrayList getResidences(String player, boolean showhidd return temp; } + @Override public PermissionGroup getGroup(String player) { ResidencePlayer resPlayer = getResidencePlayer(player); if (resPlayer != null) { @@ -122,6 +125,7 @@ public PermissionGroup getGroup(String player) { return null; } + @Override public int getMaxResidences(String player) { ResidencePlayer resPlayer = getResidencePlayer(player); if (resPlayer != null) { @@ -130,6 +134,7 @@ public int getMaxResidences(String player) { return -1; } + @Override public int getMaxSubzones(String player) { ResidencePlayer resPlayer = getResidencePlayer(player); if (resPlayer != null) { @@ -138,6 +143,7 @@ public int getMaxSubzones(String player) { return -1; } + @Override public int getMaxRents(String player) { ResidencePlayer resPlayer = getResidencePlayer(player); if (resPlayer != null) { @@ -150,6 +156,7 @@ public ResidencePlayer getResidencePlayer(Player player) { return getResidencePlayer(player.getName()); } + @Override public ResidencePlayer getResidencePlayer(String player) { ResidencePlayer resPlayer = null; if (players.containsKey(player.toLowerCase())) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index cfd2931cd..ef9759395 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -54,6 +54,7 @@ public boolean isOwnerOfLocation(Player player, Location loc) { return false; } + @Override public ClaimedResidence getByLoc(Location loc) { if (loc == null) return null; @@ -86,6 +87,7 @@ public ClaimedResidence getByLoc(Location loc) { return subres; } + @Override public ClaimedResidence getByName(String name) { if (name == null) { return null; @@ -105,6 +107,7 @@ public ClaimedResidence getByName(String name) { return res; } + @Override public String getNameByLoc(Location loc) { ClaimedResidence res = this.getByLoc(loc); if (res == null) @@ -118,6 +121,7 @@ public String getNameByLoc(Location loc) { return name; } + @Override public String getNameByRes(ClaimedResidence res) { Set> set = residences.entrySet(); for (Entry check : set) { @@ -132,6 +136,7 @@ public String getNameByRes(ClaimedResidence res) { return null; } + @Override public String getSubzoneNameByRes(ClaimedResidence res) { Set> set = residences.entrySet(); for (Entry check : set) { @@ -146,30 +151,37 @@ public String getSubzoneNameByRes(ClaimedResidence res) { return null; } + @Override public void addShop(String res) { shops.add(res); } + @Override public void removeShop(ClaimedResidence res) { removeShop(res.getName()); } + @Override public void removeShop(String resName) { shops.remove(resName); } + @Override public List getShops() { return shops; } + @Override public boolean addResidence(String name, Location loc1, Location loc2) { return this.addResidence(name, Residence.getServerLandname(), loc1, loc2); } + @Override public boolean addResidence(String name, String owner, Location loc1, Location loc2) { return this.addResidence(null, owner, name, loc1, loc2, true); } + @Override public boolean addResidence(Player player, String name, Location loc1, Location loc2, boolean resadmin) { return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin); } @@ -225,7 +237,7 @@ public boolean addResidence(Player player, String owner, String name, Location l return false; if (!newRes.isSubzone() && Residence.getConfigManager().enableEconomy() && !resadmin) { - int chargeamount = (int) Math.ceil((double) newArea.getSize() * group.getCostPerBlock()); + int chargeamount = (int) Math.ceil(newArea.getSize() * group.getCostPerBlock()); if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) return false; } @@ -297,20 +309,11 @@ public void listAllResidences(CommandSender sender, int page) { } public void listAllResidences(CommandSender sender, int page, boolean showhidden) { - this.listAllResidences(sender, page, showhidden, false, false); + this.listAllResidences(sender, page, showhidden, false); } - public void listAllResidences(CommandSender sender, int page, boolean showhidden, boolean showsubzones, boolean onlyHidden) { - - int perPage = 20; - if (sender instanceof Player) - perPage = 6; - - int start = (page - 1) * perPage; - int end = start + perPage; - - List list = getFromAllResidences(showhidden, onlyHidden, start, end); - + public void listAllResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { + List list = getFromAllResidences(showhidden, onlyHidden); InformationPager.printListInfo(sender, null, list, page, showhidden); } @@ -351,7 +354,7 @@ public ArrayList getResidenceList(String targetplayer, boolean showhidde return list; } - public ArrayList getFromAllResidences(boolean showhidden, boolean onlyHidden, int start, int end) { + public ArrayList getFromAllResidences(boolean showhidden, boolean onlyHidden) { ArrayList list = new ArrayList<>(); for (Entry res : residences.entrySet()) { boolean hidden = res.getValue().getPermissions().has("hidden", false); @@ -500,20 +503,12 @@ public void removeResidence(Player player, String name, boolean resadmin) { Residence.getTransactionManager().removeFromSale(name); if (parent == null && Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().useResMoneyBack()) { - int chargeamount = (int) Math.ceil((double) res.getAreaArray()[0].getSize() * res.getBlockSellPrice()); + int chargeamount = (int) Math.ceil(res.getAreaArray()[0].getSize() * res.getBlockSellPrice()); TransactionManager.giveEconomyMoney(player, chargeamount); } } public void removeAllByOwner(String owner) { - this.removeAllByOwner(null, owner, residences); - } - - public void removeAllByOwner(CommandSender sender, String owner) { - this.removeAllByOwner(sender, owner, residences); - } - - private void removeAllByOwner(CommandSender sender, String owner, Map resholder) { ArrayList list = Residence.getPlayerManager().getResidenceList(owner); for (String oneRes : list) { removeResidence(null, oneRes, true); @@ -816,7 +811,7 @@ public Map> loadMap(String worldName, Map return retRes; } - private int getNameIncrement(String name, ResidenceManager resm) { + private static int getNameIncrement(String name, ResidenceManager resm) { String orName = name; int i = 0; while (i < 1000) { @@ -891,23 +886,20 @@ public boolean renameResidence(Player player, String oldName, String newName, bo player.sendMessage(Residence.getLM().getMessage("Residence.Rename", oldName, newName)); } return true; - } else { + } + String[] oldname = oldName.split("\\."); + ClaimedResidence parent = res.getParent(); - String[] oldname = oldName.split("\\."); - ClaimedResidence parent = res.getParent(); + boolean feed = parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); - boolean feed = parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); + Residence.getSignUtil().updateSignResName(res); - Residence.getSignUtil().updateSignResName(res); - - return feed; - } - } else { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); - } - return false; + return feed; } + if (player != null) { + player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + } + return false; } public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index ec33c5714..498807f64 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -160,9 +160,8 @@ public boolean hasResidencePermission(CommandSender sender, boolean requireOwner String renter = Residence.getRentManager().getRentingPlayer(resname); if (sender.getName().equals(renter)) { return true; - } else { - return (playerHas(sender.getName(), "admin", false)); } + return (playerHas(sender.getName(), "admin", false)); } } if (requireOwner) { @@ -417,8 +416,7 @@ public String getOwner() { String name = Residence.getPlayerName(ownerUUID);//try to find the owner's name if (name == null) return ownerLastKnownName;//return last known if we cannot find it - else - ownerLastKnownName = name;//update last known if we did find it + ownerLastKnownName = name;//update last known if we did find it return name; } @@ -512,8 +510,8 @@ public void applyGlobalDefaults() { } public boolean setFlagGroup(CommandSender sender, String flaggroup, String state, boolean resadmin) { - if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { - ArrayList flags = ResidencePermissions.validFlagGroups.get(flaggroup); + if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { + ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); boolean changed = false; for (String flag : flags) { if (this.setFlag(sender, flag, state, resadmin)) { @@ -526,8 +524,8 @@ public boolean setFlagGroup(CommandSender sender, String flaggroup, String state } public boolean setFlagGroupOnGroup(Player player, String flaggroup, String group, String state, boolean resadmin) { - if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { - ArrayList flags = ResidencePermissions.validFlagGroups.get(flaggroup); + if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { + ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); boolean changed = false; for (String flag : flags) { if (this.setGroupFlag(player, group, flag, state, resadmin)) { @@ -540,8 +538,8 @@ public boolean setFlagGroupOnGroup(Player player, String flaggroup, String group } public boolean setFlagGroupOnPlayer(CommandSender sender, String target, String flaggroup, String state, boolean resadmin) { - if (ResidencePermissions.validFlagGroups.containsKey(flaggroup)) { - ArrayList flags = ResidencePermissions.validFlagGroups.get(flaggroup); + if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { + ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); boolean changed = false; String flagString = ""; int i = 0; diff --git a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java index 383938891..5fdb7b6d5 100644 --- a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java +++ b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java @@ -58,8 +58,7 @@ public FlagPermissions getPerms(String world) { if (list == null) { if (globaldefaults == null) return new FlagPermissions(); - else - return globaldefaults; + return globaldefaults; } return list; } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index c302ecd0e..a18ae7646 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -117,7 +117,7 @@ public void showSelectionInfoInActionBar(Player player) { PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (Residence.getConfigManager().enableEconomy()) - Message += " " + Residence.getLM().getMessage("General.LandCost", ((int) Math.ceil((double) cuboidArea.getSize() * group.getCostPerBlock()))); + Message += " " + Residence.getLM().getMessage("General.LandCost", ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); Residence.getAB().send(player, Message); @@ -131,7 +131,7 @@ public void showSelectionInfo(Player player) { player.sendMessage(Residence.getLM().getMessage("Select.TotalSize", cuboidArea.getSize())); PermissionGroup group = Residence.getPermissionManager().getGroup(player); if (Residence.getConfigManager().enableEconomy()) - player.sendMessage(Residence.getLM().getMessage("General.LandCost", ((int) Math.ceil((double) cuboidArea.getSize() * group.getCostPerBlock())))); + player.sendMessage(Residence.getLM().getMessage("General.LandCost", ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock())))); player.sendMessage(ChatColor.YELLOW + "X" + Residence.getLM().getMessage("General.Size", cuboidArea.getXSize())); player.sendMessage(ChatColor.YELLOW + "Y" + Residence.getLM().getMessage("General.Size", cuboidArea.getYSize())); player.sendMessage(ChatColor.YELLOW + "Z" + Residence.getLM().getMessage("General.Size", cuboidArea.getZSize())); @@ -241,7 +241,7 @@ public List getLocations(Location lowLoc, Location loc, Double TX, Dou return locList; } - public List GetLocationsWallsByData(Player player, Location loc, Double TX, Double TY, Double TZ, Location lowLoc, SelectionSides Sides, + public List GetLocationsWallsByData(Location loc, Double TX, Double TY, Double TZ, Location lowLoc, SelectionSides Sides, double Range) { List locList = new ArrayList(); @@ -272,7 +272,7 @@ public List GetLocationsWallsByData(Player player, Location loc, Doubl return locList; } - public List GetLocationsCornersByData(Player player, Location loc, Double TX, Double TY, Double TZ, Location lowLoc, SelectionSides Sides, + public List GetLocationsCornersByData(Location loc, Double TX, Double TY, Double TZ, Location lowLoc, SelectionSides Sides, double Range) { List locList = new ArrayList(); @@ -306,7 +306,7 @@ public List GetLocationsCornersByData(Player player, Location loc, Dou // South - East corner if (Sides.ShowSouthSide() && Sides.ShowEastSide()) - locList.addAll(getLocations(lowLoc.clone().add(TX, 0, TZ), loc.clone(), 0D, TY+1, 0D, Range, true)); + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, TZ), loc.clone(), 0D, TY + 1, 0D, Range, true)); // West bottom corner if (Sides.ShowWestSide() && Sides.ShowBottomSide()) @@ -385,9 +385,9 @@ public boolean MakeBorders(final Player player, final Location OriginalLow, fina Bukkit.getScheduler().cancelTask(errorIDMap.get(player.getName())); } - final List locList = GetLocationsWallsByData(player, loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range); + final List locList = GetLocationsWallsByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range); - final List locList2 = GetLocationsCornersByData(player, loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range); + final List locList2 = GetLocationsCornersByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range); Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override @@ -421,6 +421,7 @@ else if (error && errorPrintMap.get(planerName) + Residence.getConfigManager().g return false; int scid = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override public void run() { if (player.isOnline()) MakeBorders(player, OriginalLow, OriginalHigh, error); @@ -568,9 +569,10 @@ public void modify(Player player, boolean shift, double amount) { player.sendMessage(Residence.getLM().getMessage("Select.Points")); return; } - Direction d = this.getDirection(player); + Direction d = getDirection(player); if (d == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Direction")); + return; } CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); switch (d) { @@ -665,9 +667,10 @@ public boolean contract(Player player, double amount, boolean resadmin) { player.sendMessage(Residence.getLM().getMessage("Select.Points")); return false; } - Direction d = this.getDirection(player); + Direction d = getDirection(player); if (d == null) { player.sendMessage(Residence.getLM().getMessage("Invalid.Direction")); + return false; } CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); switch (d) { @@ -726,7 +729,7 @@ public boolean contract(Player player, double amount, boolean resadmin) { return true; } - private Direction getDirection(Player player) { + private static Direction getDirection(Player player) { int yaw = (int) player.getLocation().getYaw(); diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 397f68d5d..06dfe95fe 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -38,6 +38,7 @@ public boolean worldEdit(Player player) { return false; } + @Override public boolean worldEditUpdate(Player player) { if (!hasPlacedBoth(player.getName())) return false; diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index 956182d09..329446a5a 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -43,7 +43,7 @@ public void onSignInteract(PlayerInteractEvent event) { if (!(block.getState() instanceof Sign)) return; - Player player = (Player) event.getPlayer(); + Player player = event.getPlayer(); Location loc = block.getLocation(); diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index dda878228..524846707 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -188,7 +188,7 @@ public int getLikes(String resName) { int likes = 0; for (ShopVote oneVote : votes) { - if (oneVote.getVote() >= (int) (Residence.getConfigManager().getVoteRangeTo() / 2)) + if (oneVote.getVote() >= Residence.getConfigManager().getVoteRangeTo() / 2) likes++; } @@ -213,11 +213,12 @@ public Map getSortedShopList() { return allvotes; } - private Map sortByComparator(Map allvotes) { + private static Map sortByComparator(Map allvotes) { List> list = new LinkedList>(allvotes.entrySet()); Collections.sort(list, new Comparator>() { + @Override public int compare(Map.Entry o1, Map.Entry o2) { return (o2.getValue()).compareTo(o1.getValue()); } @@ -302,6 +303,7 @@ public void saveSigns() { public boolean BoardUpdateDelayed() { Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override public void run() { BoardUpdate(); return; diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 6f9260fb3..1ce8840f4 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -148,6 +148,7 @@ public Signs getSignFromLoc(Location loc) { public void CheckSign(final ClaimedResidence res, int time) { Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override public void run() { CheckSign(res); } diff --git a/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java b/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java index 32615cf6e..aed8aec20 100644 --- a/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java +++ b/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java @@ -29,7 +29,7 @@ public void onButtonClick(ButtonClickEvent event) { ResidencePopup screen = (ResidencePopup) event.getScreen(); PopupType type = PopupType.valueOf(screen.getPopupType()); if (type == PopupType.FLAG_GUI) { - ResidencePopup popup = (ResidencePopup) screen; + ResidencePopup popup = screen; String flagval = null; String flag = null; String player = null; diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index c7bd45f22..cbcb4ec0c 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -7,8 +7,6 @@ import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.plugin.java.JavaPlugin; - import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.utils.YmlMaker; @@ -25,8 +23,8 @@ public Language(Residence plugin) { * Reloads the config */ public void LanguageReload() { - customlocale = new YmlMaker((JavaPlugin) plugin, "Language/" + Residence.getConfigManager().getLanguage() + ".yml").getConfig(); - enlocale = new YmlMaker((JavaPlugin) plugin, "Language/English.yml").getConfig(); + customlocale = new YmlMaker(plugin, "Language/" + Residence.getConfigManager().getLanguage() + ".yml").getConfig(); + enlocale = new YmlMaker(plugin, "Language/English.yml").getConfig(); if (customlocale == null) customlocale = enlocale; } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index e21a65a0a..58501dc93 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -408,9 +408,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { if (subCommand) return tempmeinPath.getKeys(false); - else { - Bukkit.dispatchCommand(sender, command + " ?"); - } + Bukkit.dispatchCommand(sender, command + " ?"); } return new HashSet(Arrays.asList("?")); } diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index 766d19ae8..2e2b8ed0e 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -55,6 +55,7 @@ public ActionBar() { } } + @Override public void send(CommandSender sender, String msg) { if (sender instanceof Player) send((Player) sender, msg); @@ -62,6 +63,7 @@ public void send(CommandSender sender, String msg) { sender.sendMessage(msg); } + @Override public void send(Player receivingPacket, String msg) { if (simpleMessages) { receivingPacket.sendMessage(msg); @@ -107,9 +109,8 @@ private String getIChatBaseComponentClasspath() { private String getChatSerializerClasspath() { if (version.equals("v1_8_R1") || version.contains("1_7")) { return "net.minecraft.server." + version + ".ChatSerializer"; - } else { - return "net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent } + return "net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent } private String getPacketPlayOutChat() { diff --git a/src/com/bekvon/bukkit/residence/utils/CrackShot.java b/src/com/bekvon/bukkit/residence/utils/CrackShot.java index b70e22da3..0405fa2f5 100644 --- a/src/com/bekvon/bukkit/residence/utils/CrackShot.java +++ b/src/com/bekvon/bukkit/residence/utils/CrackShot.java @@ -108,7 +108,7 @@ public void onEntityDamage(WeaponDamageEntityEvent event) { ClaimedResidence area = Residence.getResidenceManager().getByLoc(victim.getLocation()); /* Living Entities */ - Player damager = (Player) event.getPlayer(); + Player damager = event.getPlayer(); ClaimedResidence srcarea = null; if (damager == null) diff --git a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java index 77881cb15..07057bc0b 100644 --- a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java +++ b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java @@ -1146,7 +1146,7 @@ public int getBlue() { */ @Override public float getValueX() { - return (float) red / 255F; + return red / 255F; } /** @@ -1156,7 +1156,7 @@ public float getValueX() { */ @Override public float getValueY() { - return (float) green / 255F; + return green / 255F; } /** @@ -1166,7 +1166,7 @@ public float getValueY() { */ @Override public float getValueZ() { - return (float) blue / 255F; + return blue / 255F; } } @@ -1204,7 +1204,7 @@ public NoteColor(int note) throws IllegalArgumentException { */ @Override public float getValueX() { - return (float) note / 24F; + return note / 24F; } /** diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index beb3daffe..69b94c79f 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -11,7 +11,6 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -116,11 +115,12 @@ public Location getRandomlocation(String WorldName) { public void performDelaydTp(final Location loc, final Player targetPlayer) { Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override public void run() { - if (!ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) + if (!Residence.getTeleportDelayMap().contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) return; - else if (ResidenceCommandListener.getTeleportDelayMap().contains(targetPlayer.getName())) - ResidenceCommandListener.getTeleportDelayMap().remove(targetPlayer.getName()); + else if (Residence.getTeleportDelayMap().contains(targetPlayer.getName())) + Residence.getTeleportDelayMap().remove(targetPlayer.getName()); targetPlayer.teleport(loc); targetPlayer.sendMessage(Residence.getLM().getMessage("RandomTeleport.TeleportSuccess", loc.getX(), loc.getY(), loc.getZ())); return; diff --git a/src/com/bekvon/bukkit/residence/utils/ReflectionUtils.java b/src/com/bekvon/bukkit/residence/utils/ReflectionUtils.java index 6e47e7b09..16ab51801 100644 --- a/src/com/bekvon/bukkit/residence/utils/ReflectionUtils.java +++ b/src/com/bekvon/bukkit/residence/utils/ReflectionUtils.java @@ -1,605 +1,625 @@ -package com.bekvon.bukkit.residence.utils; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; - -import org.bukkit.Bukkit; - -/** - * ReflectionUtils - *

- * This class provides useful methods which makes dealing with reflection much easier, especially when working with Bukkit - *

- * You are welcome to use it, modify it and redistribute it under the following conditions: - *

    - *
  • Don't claim this class as your own - *
  • Don't remove this disclaimer - *
- *

- * It would be nice if you provide credit to me if you use this class in a published project - * - * @author DarkBlade12 - * @version 1.1 - */ -public final class ReflectionUtils { - // Prevent accidental construction - private ReflectionUtils() {} - - /** - * Returns the constructor of a given class with the given parameter types - * - * @param clazz Target class - * @param parameterTypes Parameter types of the desired constructor - * @return The constructor of the target class with the specified parameter types - * @throws NoSuchMethodException If the desired constructor with the specified parameter types cannot be found - * @see DataType - * @see DataType#getPrimitive(Class[]) - * @see DataType#compare(Class[], Class[]) - */ - public static Constructor getConstructor(Class clazz, Class... parameterTypes) throws NoSuchMethodException { - Class[] primitiveTypes = DataType.getPrimitive(parameterTypes); - for (Constructor constructor : clazz.getConstructors()) { - if (!DataType.compare(DataType.getPrimitive(constructor.getParameterTypes()), primitiveTypes)) { - continue; - } - return constructor; - } - throw new NoSuchMethodException("There is no such constructor in this class with the specified parameter types"); - } - - /** - * Returns the constructor of a desired class with the given parameter types - * - * @param className Name of the desired target class - * @param packageType Package where the desired target class is located - * @param parameterTypes Parameter types of the desired constructor - * @return The constructor of the desired target class with the specified parameter types - * @throws NoSuchMethodException If the desired constructor with the specified parameter types cannot be found - * @throws ClassNotFoundException ClassNotFoundException If the desired target class with the specified name and package cannot be found - * @see #getClass(String, PackageType) - * @see #getConstructor(Class, Class...) - */ - public static Constructor getConstructor(String className, PackageType packageType, Class... parameterTypes) throws NoSuchMethodException, ClassNotFoundException { - return getConstructor(packageType.getClass(className), parameterTypes); - } - - /** - * Returns an instance of a class with the given arguments - * - * @param clazz Target class - * @param arguments Arguments which are used to construct an object of the target class - * @return The instance of the target class with the specified arguments - * @throws InstantiationException If you cannot create an instance of the target class due to certain circumstances - * @throws IllegalAccessException If the desired constructor cannot be accessed due to certain circumstances - * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the constructor (this should not occur since it searches for a constructor with the types of the arguments) - * @throws InvocationTargetException If the desired constructor cannot be invoked - * @throws NoSuchMethodException If the desired constructor with the specified arguments cannot be found - */ - public static Object instantiateObject(Class clazz, Object... arguments) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException { - return getConstructor(clazz, DataType.getPrimitive(arguments)).newInstance(arguments); - } - - /** - * Returns an instance of a desired class with the given arguments - * - * @param className Name of the desired target class - * @param packageType Package where the desired target class is located - * @param arguments Arguments which are used to construct an object of the desired target class - * @return The instance of the desired target class with the specified arguments - * @throws InstantiationException If you cannot create an instance of the desired target class due to certain circumstances - * @throws IllegalAccessException If the desired constructor cannot be accessed due to certain circumstances - * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the constructor (this should not occur since it searches for a constructor with the types of the arguments) - * @throws InvocationTargetException If the desired constructor cannot be invoked - * @throws NoSuchMethodException If the desired constructor with the specified arguments cannot be found - * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found - * @see #getClass(String, PackageType) - * @see #instantiateObject(Class, Object...) - */ - public static Object instantiateObject(String className, PackageType packageType, Object... arguments) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException { - return instantiateObject(packageType.getClass(className), arguments); - } - - /** - * Returns a method of a class with the given parameter types - * - * @param clazz Target class - * @param methodName Name of the desired method - * @param parameterTypes Parameter types of the desired method - * @return The method of the target class with the specified name and parameter types - * @throws NoSuchMethodException If the desired method of the target class with the specified name and parameter types cannot be found - * @see DataType#getPrimitive(Class[]) - * @see DataType#compare(Class[], Class[]) - */ - public static Method getMethod(Class clazz, String methodName, Class... parameterTypes) throws NoSuchMethodException { - Class[] primitiveTypes = DataType.getPrimitive(parameterTypes); - for (Method method : clazz.getMethods()) { - if (!method.getName().equals(methodName) || !DataType.compare(DataType.getPrimitive(method.getParameterTypes()), primitiveTypes)) { - continue; - } - return method; - } - throw new NoSuchMethodException("There is no such method in this class with the specified name and parameter types"); - } - - /** - * Returns a method of a desired class with the given parameter types - * - * @param className Name of the desired target class - * @param packageType Package where the desired target class is located - * @param methodName Name of the desired method - * @param parameterTypes Parameter types of the desired method - * @return The method of the desired target class with the specified name and parameter types - * @throws NoSuchMethodException If the desired method of the desired target class with the specified name and parameter types cannot be found - * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found - * @see #getClass(String, PackageType) - * @see #getMethod(Class, String, Class...) - */ - public static Method getMethod(String className, PackageType packageType, String methodName, Class... parameterTypes) throws NoSuchMethodException, ClassNotFoundException { - return getMethod(packageType.getClass(className), methodName, parameterTypes); - } - - /** - * Invokes a method on an object with the given arguments - * - * @param instance Target object - * @param methodName Name of the desired method - * @param arguments Arguments which are used to invoke the desired method - * @return The result of invoking the desired method on the target object - * @throws IllegalAccessException If the desired method cannot be accessed due to certain circumstances - * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the method (this should not occur since it searches for a method with the types of the arguments) - * @throws InvocationTargetException If the desired method cannot be invoked on the target object - * @throws NoSuchMethodException If the desired method of the class of the target object with the specified name and arguments cannot be found - * @see #getMethod(Class, String, Class...) - * @see DataType#getPrimitive(Object[]) - */ - public static Object invokeMethod(Object instance, String methodName, Object... arguments) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException { - return getMethod(instance.getClass(), methodName, DataType.getPrimitive(arguments)).invoke(instance, arguments); - } - - /** - * Invokes a method of the target class on an object with the given arguments - * - * @param instance Target object - * @param clazz Target class - * @param methodName Name of the desired method - * @param arguments Arguments which are used to invoke the desired method - * @return The result of invoking the desired method on the target object - * @throws IllegalAccessException If the desired method cannot be accessed due to certain circumstances - * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the method (this should not occur since it searches for a method with the types of the arguments) - * @throws InvocationTargetException If the desired method cannot be invoked on the target object - * @throws NoSuchMethodException If the desired method of the target class with the specified name and arguments cannot be found - * @see #getMethod(Class, String, Class...) - * @see DataType#getPrimitive(Object[]) - */ - public static Object invokeMethod(Object instance, Class clazz, String methodName, Object... arguments) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException { - return getMethod(clazz, methodName, DataType.getPrimitive(arguments)).invoke(instance, arguments); - } - - /** - * Invokes a method of a desired class on an object with the given arguments - * - * @param instance Target object - * @param className Name of the desired target class - * @param packageType Package where the desired target class is located - * @param methodName Name of the desired method - * @param arguments Arguments which are used to invoke the desired method - * @return The result of invoking the desired method on the target object - * @throws IllegalAccessException If the desired method cannot be accessed due to certain circumstances - * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the method (this should not occur since it searches for a method with the types of the arguments) - * @throws InvocationTargetException If the desired method cannot be invoked on the target object - * @throws NoSuchMethodException If the desired method of the desired target class with the specified name and arguments cannot be found - * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found - * @see #getClass(String, PackageType) - * @see #invokeMethod(Object, Class, String, Object...) - */ - public static Object invokeMethod(Object instance, String className, PackageType packageType, String methodName, Object... arguments) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException { - return invokeMethod(instance, packageType.getClass(className), methodName, arguments); - } - - /** - * Returns a field of the target class with the given name - * - * @param clazz Target class - * @param declared Whether the desired field is declared or not - * @param fieldName Name of the desired field - * @return The field of the target class with the specified name - * @throws NoSuchFieldException If the desired field of the given class cannot be found - * @throws SecurityException If the desired field cannot be made accessible - */ - public static Field getField(Class clazz, boolean declared, String fieldName) throws NoSuchFieldException, SecurityException { - Field field = declared ? clazz.getDeclaredField(fieldName) : clazz.getField(fieldName); - field.setAccessible(true); - return field; - } - - /** - * Returns a field of a desired class with the given name - * - * @param className Name of the desired target class - * @param packageType Package where the desired target class is located - * @param declared Whether the desired field is declared or not - * @param fieldName Name of the desired field - * @return The field of the desired target class with the specified name - * @throws NoSuchFieldException If the desired field of the desired class cannot be found - * @throws SecurityException If the desired field cannot be made accessible - * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found - * @see #getField(Class, boolean, String) - */ - public static Field getField(String className, PackageType packageType, boolean declared, String fieldName) throws NoSuchFieldException, SecurityException, ClassNotFoundException { - return getField(packageType.getClass(className), declared, fieldName); - } - - /** - * Returns the value of a field of the given class of an object - * - * @param instance Target object - * @param clazz Target class - * @param declared Whether the desired field is declared or not - * @param fieldName Name of the desired field - * @return The value of field of the target object - * @throws IllegalArgumentException If the target object does not feature the desired field - * @throws IllegalAccessException If the desired field cannot be accessed - * @throws NoSuchFieldException If the desired field of the target class cannot be found - * @throws SecurityException If the desired field cannot be made accessible - * @see #getField(Class, boolean, String) - */ - public static Object getValue(Object instance, Class clazz, boolean declared, String fieldName) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { - return getField(clazz, declared, fieldName).get(instance); - } - - /** - * Returns the value of a field of a desired class of an object - * - * @param instance Target object - * @param className Name of the desired target class - * @param packageType Package where the desired target class is located - * @param declared Whether the desired field is declared or not - * @param fieldName Name of the desired field - * @return The value of field of the target object - * @throws IllegalArgumentException If the target object does not feature the desired field - * @throws IllegalAccessException If the desired field cannot be accessed - * @throws NoSuchFieldException If the desired field of the desired class cannot be found - * @throws SecurityException If the desired field cannot be made accessible - * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found - * @see #getValue(Object, Class, boolean, String) - */ - public static Object getValue(Object instance, String className, PackageType packageType, boolean declared, String fieldName) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, ClassNotFoundException { - return getValue(instance, packageType.getClass(className), declared, fieldName); - } - - /** - * Returns the value of a field with the given name of an object - * - * @param instance Target object - * @param declared Whether the desired field is declared or not - * @param fieldName Name of the desired field - * @return The value of field of the target object - * @throws IllegalArgumentException If the target object does not feature the desired field (should not occur since it searches for a field with the given name in the class of the object) - * @throws IllegalAccessException If the desired field cannot be accessed - * @throws NoSuchFieldException If the desired field of the target object cannot be found - * @throws SecurityException If the desired field cannot be made accessible - * @see #getValue(Object, Class, boolean, String) - */ - public static Object getValue(Object instance, boolean declared, String fieldName) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { - return getValue(instance, instance.getClass(), declared, fieldName); - } - - /** - * Sets the value of a field of the given class of an object - * - * @param instance Target object - * @param clazz Target class - * @param declared Whether the desired field is declared or not - * @param fieldName Name of the desired field - * @param value New value - * @throws IllegalArgumentException If the type of the value does not match the type of the desired field - * @throws IllegalAccessException If the desired field cannot be accessed - * @throws NoSuchFieldException If the desired field of the target class cannot be found - * @throws SecurityException If the desired field cannot be made accessible - * @see #getField(Class, boolean, String) - */ - public static void setValue(Object instance, Class clazz, boolean declared, String fieldName, Object value) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { - getField(clazz, declared, fieldName).set(instance, value); - } - - /** - * Sets the value of a field of a desired class of an object - * - * @param instance Target object - * @param className Name of the desired target class - * @param packageType Package where the desired target class is located - * @param declared Whether the desired field is declared or not - * @param fieldName Name of the desired field - * @param value New value - * @throws IllegalArgumentException If the type of the value does not match the type of the desired field - * @throws IllegalAccessException If the desired field cannot be accessed - * @throws NoSuchFieldException If the desired field of the desired class cannot be found - * @throws SecurityException If the desired field cannot be made accessible - * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found - * @see #setValue(Object, Class, boolean, String, Object) - */ - public static void setValue(Object instance, String className, PackageType packageType, boolean declared, String fieldName, Object value) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, ClassNotFoundException { - setValue(instance, packageType.getClass(className), declared, fieldName, value); - } - - /** - * Sets the value of a field with the given name of an object - * - * @param instance Target object - * @param declared Whether the desired field is declared or not - * @param fieldName Name of the desired field - * @param value New value - * @throws IllegalArgumentException If the type of the value does not match the type of the desired field - * @throws IllegalAccessException If the desired field cannot be accessed - * @throws NoSuchFieldException If the desired field of the target object cannot be found - * @throws SecurityException If the desired field cannot be made accessible - * @see #setValue(Object, Class, boolean, String, Object) - */ - public static void setValue(Object instance, boolean declared, String fieldName, Object value) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { - setValue(instance, instance.getClass(), declared, fieldName, value); - } - - /** - * Represents an enumeration of dynamic packages of NMS and CraftBukkit - *

- * This class is part of the ReflectionUtils and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.0 - */ - public enum PackageType { - MINECRAFT_SERVER("net.minecraft.server." + getServerVersion()), - CRAFTBUKKIT("org.bukkit.craftbukkit." + getServerVersion()), - CRAFTBUKKIT_BLOCK(CRAFTBUKKIT, "block"), - CRAFTBUKKIT_CHUNKIO(CRAFTBUKKIT, "chunkio"), - CRAFTBUKKIT_COMMAND(CRAFTBUKKIT, "command"), - CRAFTBUKKIT_CONVERSATIONS(CRAFTBUKKIT, "conversations"), - CRAFTBUKKIT_ENCHANTMENS(CRAFTBUKKIT, "enchantments"), - CRAFTBUKKIT_ENTITY(CRAFTBUKKIT, "entity"), - CRAFTBUKKIT_EVENT(CRAFTBUKKIT, "event"), - CRAFTBUKKIT_GENERATOR(CRAFTBUKKIT, "generator"), - CRAFTBUKKIT_HELP(CRAFTBUKKIT, "help"), - CRAFTBUKKIT_INVENTORY(CRAFTBUKKIT, "inventory"), - CRAFTBUKKIT_MAP(CRAFTBUKKIT, "map"), - CRAFTBUKKIT_METADATA(CRAFTBUKKIT, "metadata"), - CRAFTBUKKIT_POTION(CRAFTBUKKIT, "potion"), - CRAFTBUKKIT_PROJECTILES(CRAFTBUKKIT, "projectiles"), - CRAFTBUKKIT_SCHEDULER(CRAFTBUKKIT, "scheduler"), - CRAFTBUKKIT_SCOREBOARD(CRAFTBUKKIT, "scoreboard"), - CRAFTBUKKIT_UPDATER(CRAFTBUKKIT, "updater"), - CRAFTBUKKIT_UTIL(CRAFTBUKKIT, "util"); - - private final String path; - - /** - * Construct a new package type - * - * @param path Path of the package - */ - private PackageType(String path) { - this.path = path; - } - - /** - * Construct a new package type - * - * @param parent Parent package of the package - * @param path Path of the package - */ - private PackageType(PackageType parent, String path) { - this(parent + "." + path); - } - - /** - * Returns the path of this package type - * - * @return The path - */ - public String getPath() { - return path; - } - - /** - * Returns the class with the given name - * - * @param className Name of the desired class - * @return The class with the specified name - * @throws ClassNotFoundException If the desired class with the specified name and package cannot be found - */ - public Class getClass(String className) throws ClassNotFoundException { - return Class.forName(this + "." + className); - } - - // Override for convenience - @Override - public String toString() { - return path; - } - - /** - * Returns the version of your server - * - * @return The server version - */ - public static String getServerVersion() { - return Bukkit.getServer().getClass().getPackage().getName().substring(23); - } - } - - /** - * Represents an enumeration of Java data types with corresponding classes - *

- * This class is part of the ReflectionUtils and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.0 - */ - public enum DataType { - BYTE(byte.class, Byte.class), - SHORT(short.class, Short.class), - INTEGER(int.class, Integer.class), - LONG(long.class, Long.class), - CHARACTER(char.class, Character.class), - FLOAT(float.class, Float.class), - DOUBLE(double.class, Double.class), - BOOLEAN(boolean.class, Boolean.class); - - private static final Map, DataType> CLASS_MAP = new HashMap, DataType>(); - private final Class primitive; - private final Class reference; - - // Initialize map for quick class lookup - static { - for (DataType type : values()) { - CLASS_MAP.put(type.primitive, type); - CLASS_MAP.put(type.reference, type); - } - } - - /** - * Construct a new data type - * - * @param primitive Primitive class of this data type - * @param reference Reference class of this data type - */ - private DataType(Class primitive, Class reference) { - this.primitive = primitive; - this.reference = reference; - } - - /** - * Returns the primitive class of this data type - * - * @return The primitive class - */ - public Class getPrimitive() { - return primitive; - } - - /** - * Returns the reference class of this data type - * - * @return The reference class - */ - public Class getReference() { - return reference; - } - - /** - * Returns the data type with the given primitive/reference class - * - * @param clazz Primitive/Reference class of the data type - * @return The data type - */ - public static DataType fromClass(Class clazz) { - return CLASS_MAP.get(clazz); - } - - /** - * Returns the primitive class of the data type with the given reference class - * - * @param clazz Reference class of the data type - * @return The primitive class - */ - public static Class getPrimitive(Class clazz) { - DataType type = fromClass(clazz); - return type == null ? clazz : type.getPrimitive(); - } - - /** - * Returns the reference class of the data type with the given primitive class - * - * @param clazz Primitive class of the data type - * @return The reference class - */ - public static Class getReference(Class clazz) { - DataType type = fromClass(clazz); - return type == null ? clazz : type.getReference(); - } - - /** - * Returns the primitive class array of the given class array - * - * @param classes Given class array - * @return The primitive class array - */ - public static Class[] getPrimitive(Class[] classes) { - int length = classes == null ? 0 : classes.length; - Class[] types = new Class[length]; - for (int index = 0; index < length; index++) { - types[index] = getPrimitive(classes[index]); - } - return types; - } - - /** - * Returns the reference class array of the given class array - * - * @param classes Given class array - * @return The reference class array - */ - public static Class[] getReference(Class[] classes) { - int length = classes == null ? 0 : classes.length; - Class[] types = new Class[length]; - for (int index = 0; index < length; index++) { - types[index] = getReference(classes[index]); - } - return types; - } - - /** - * Returns the primitive class array of the given object array - * - * @param object Given object array - * @return The primitive class array - */ - public static Class[] getPrimitive(Object[] objects) { - int length = objects == null ? 0 : objects.length; - Class[] types = new Class[length]; - for (int index = 0; index < length; index++) { - types[index] = getPrimitive(objects[index].getClass()); - } - return types; - } - - /** - * Returns the reference class array of the given object array - * - * @param object Given object array - * @return The reference class array - */ - public static Class[] getReference(Object[] objects) { - int length = objects == null ? 0 : objects.length; - Class[] types = new Class[length]; - for (int index = 0; index < length; index++) { - types[index] = getReference(objects[index].getClass()); - } - return types; - } - - /** - * Compares two class arrays on equivalence - * - * @param primary Primary class array - * @param secondary Class array which is compared to the primary array - * @return Whether these arrays are equal or not - */ - public static boolean compare(Class[] primary, Class[] secondary) { - if (primary == null || secondary == null || primary.length != secondary.length) { - return false; - } - for (int index = 0; index < primary.length; index++) { - Class primaryClass = primary[index]; - Class secondaryClass = secondary[index]; - if (primaryClass.equals(secondaryClass) || primaryClass.isAssignableFrom(secondaryClass)) { - continue; - } - return false; - } - return true; - } - } +package com.bekvon.bukkit.residence.utils; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +import org.bukkit.Bukkit; + +/** + * ReflectionUtils + *

+ * This class provides useful methods which makes dealing with reflection much easier, especially when working with Bukkit + *

+ * You are welcome to use it, modify it and redistribute it under the following conditions: + *

    + *
  • Don't claim this class as your own + *
  • Don't remove this disclaimer + *
+ *

+ * It would be nice if you provide credit to me if you use this class in a published project + * + * @author DarkBlade12 + * @version 1.1 + */ +public final class ReflectionUtils { + // Prevent accidental construction + private ReflectionUtils() { + } + + /** + * Returns the constructor of a given class with the given parameter types + * + * @param clazz Target class + * @param parameterTypes Parameter types of the desired constructor + * @return The constructor of the target class with the specified parameter types + * @throws NoSuchMethodException If the desired constructor with the specified parameter types cannot be found + * @see DataType + * @see DataType#getPrimitive(Class[]) + * @see DataType#compare(Class[], Class[]) + */ + public static Constructor getConstructor(Class clazz, Class... parameterTypes) throws NoSuchMethodException { + Class[] primitiveTypes = DataType.getPrimitive(parameterTypes); + for (Constructor constructor : clazz.getConstructors()) { + if (!DataType.compare(DataType.getPrimitive(constructor.getParameterTypes()), primitiveTypes)) { + continue; + } + return constructor; + } + throw new NoSuchMethodException("There is no such constructor in this class with the specified parameter types"); + } + + /** + * Returns the constructor of a desired class with the given parameter types + * + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param parameterTypes Parameter types of the desired constructor + * @return The constructor of the desired target class with the specified parameter types + * @throws NoSuchMethodException If the desired constructor with the specified parameter types cannot be found + * @throws ClassNotFoundException ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #getClass(String, PackageType) + * @see #getConstructor(Class, Class...) + */ + public static Constructor getConstructor(String className, PackageType packageType, Class... parameterTypes) throws NoSuchMethodException, + ClassNotFoundException { + return getConstructor(packageType.getClass(className), parameterTypes); + } + + /** + * Returns an instance of a class with the given arguments + * + * @param clazz Target class + * @param arguments Arguments which are used to construct an object of the target class + * @return The instance of the target class with the specified arguments + * @throws InstantiationException If you cannot create an instance of the target class due to certain circumstances + * @throws IllegalAccessException If the desired constructor cannot be accessed due to certain circumstances + * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the constructor (this should not occur since it searches for a constructor with the types of the arguments) + * @throws InvocationTargetException If the desired constructor cannot be invoked + * @throws NoSuchMethodException If the desired constructor with the specified arguments cannot be found + */ + public static Object instantiateObject(Class clazz, Object... arguments) throws InstantiationException, IllegalAccessException, IllegalArgumentException, + InvocationTargetException, NoSuchMethodException { + return getConstructor(clazz, DataType.getPrimitive(arguments)).newInstance(arguments); + } + + /** + * Returns an instance of a desired class with the given arguments + * + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param arguments Arguments which are used to construct an object of the desired target class + * @return The instance of the desired target class with the specified arguments + * @throws InstantiationException If you cannot create an instance of the desired target class due to certain circumstances + * @throws IllegalAccessException If the desired constructor cannot be accessed due to certain circumstances + * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the constructor (this should not occur since it searches for a constructor with the types of the arguments) + * @throws InvocationTargetException If the desired constructor cannot be invoked + * @throws NoSuchMethodException If the desired constructor with the specified arguments cannot be found + * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #getClass(String, PackageType) + * @see #instantiateObject(Class, Object...) + */ + public static Object instantiateObject(String className, PackageType packageType, Object... arguments) throws InstantiationException, IllegalAccessException, + IllegalArgumentException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException { + return instantiateObject(packageType.getClass(className), arguments); + } + + /** + * Returns a method of a class with the given parameter types + * + * @param clazz Target class + * @param methodName Name of the desired method + * @param parameterTypes Parameter types of the desired method + * @return The method of the target class with the specified name and parameter types + * @throws NoSuchMethodException If the desired method of the target class with the specified name and parameter types cannot be found + * @see DataType#getPrimitive(Class[]) + * @see DataType#compare(Class[], Class[]) + */ + public static Method getMethod(Class clazz, String methodName, Class... parameterTypes) throws NoSuchMethodException { + Class[] primitiveTypes = DataType.getPrimitive(parameterTypes); + for (Method method : clazz.getMethods()) { + if (!method.getName().equals(methodName) || !DataType.compare(DataType.getPrimitive(method.getParameterTypes()), primitiveTypes)) { + continue; + } + return method; + } + throw new NoSuchMethodException("There is no such method in this class with the specified name and parameter types"); + } + + /** + * Returns a method of a desired class with the given parameter types + * + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param methodName Name of the desired method + * @param parameterTypes Parameter types of the desired method + * @return The method of the desired target class with the specified name and parameter types + * @throws NoSuchMethodException If the desired method of the desired target class with the specified name and parameter types cannot be found + * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #getClass(String, PackageType) + * @see #getMethod(Class, String, Class...) + */ + public static Method getMethod(String className, PackageType packageType, String methodName, Class... parameterTypes) throws NoSuchMethodException, + ClassNotFoundException { + return getMethod(packageType.getClass(className), methodName, parameterTypes); + } + + /** + * Invokes a method on an object with the given arguments + * + * @param instance Target object + * @param methodName Name of the desired method + * @param arguments Arguments which are used to invoke the desired method + * @return The result of invoking the desired method on the target object + * @throws IllegalAccessException If the desired method cannot be accessed due to certain circumstances + * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the method (this should not occur since it searches for a method with the types of the arguments) + * @throws InvocationTargetException If the desired method cannot be invoked on the target object + * @throws NoSuchMethodException If the desired method of the class of the target object with the specified name and arguments cannot be found + * @see #getMethod(Class, String, Class...) + * @see DataType#getPrimitive(Object[]) + */ + public static Object invokeMethod(Object instance, String methodName, Object... arguments) throws IllegalAccessException, IllegalArgumentException, + InvocationTargetException, NoSuchMethodException { + return getMethod(instance.getClass(), methodName, DataType.getPrimitive(arguments)).invoke(instance, arguments); + } + + /** + * Invokes a method of the target class on an object with the given arguments + * + * @param instance Target object + * @param clazz Target class + * @param methodName Name of the desired method + * @param arguments Arguments which are used to invoke the desired method + * @return The result of invoking the desired method on the target object + * @throws IllegalAccessException If the desired method cannot be accessed due to certain circumstances + * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the method (this should not occur since it searches for a method with the types of the arguments) + * @throws InvocationTargetException If the desired method cannot be invoked on the target object + * @throws NoSuchMethodException If the desired method of the target class with the specified name and arguments cannot be found + * @see #getMethod(Class, String, Class...) + * @see DataType#getPrimitive(Object[]) + */ + public static Object invokeMethod(Object instance, Class clazz, String methodName, Object... arguments) throws IllegalAccessException, IllegalArgumentException, + InvocationTargetException, NoSuchMethodException { + return getMethod(clazz, methodName, DataType.getPrimitive(arguments)).invoke(instance, arguments); + } + + /** + * Invokes a method of a desired class on an object with the given arguments + * + * @param instance Target object + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param methodName Name of the desired method + * @param arguments Arguments which are used to invoke the desired method + * @return The result of invoking the desired method on the target object + * @throws IllegalAccessException If the desired method cannot be accessed due to certain circumstances + * @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the method (this should not occur since it searches for a method with the types of the arguments) + * @throws InvocationTargetException If the desired method cannot be invoked on the target object + * @throws NoSuchMethodException If the desired method of the desired target class with the specified name and arguments cannot be found + * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #getClass(String, PackageType) + * @see #invokeMethod(Object, Class, String, Object...) + */ + public static Object invokeMethod(Object instance, String className, PackageType packageType, String methodName, Object... arguments) throws IllegalAccessException, + IllegalArgumentException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException { + return invokeMethod(instance, packageType.getClass(className), methodName, arguments); + } + + /** + * Returns a field of the target class with the given name + * + * @param clazz Target class + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @return The field of the target class with the specified name + * @throws NoSuchFieldException If the desired field of the given class cannot be found + * @throws SecurityException If the desired field cannot be made accessible + */ + public static Field getField(Class clazz, boolean declared, String fieldName) throws NoSuchFieldException, SecurityException { + Field field = declared ? clazz.getDeclaredField(fieldName) : clazz.getField(fieldName); + field.setAccessible(true); + return field; + } + + /** + * Returns a field of a desired class with the given name + * + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @return The field of the desired target class with the specified name + * @throws NoSuchFieldException If the desired field of the desired class cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #getField(Class, boolean, String) + */ + public static Field getField(String className, PackageType packageType, boolean declared, String fieldName) throws NoSuchFieldException, SecurityException, + ClassNotFoundException { + return getField(packageType.getClass(className), declared, fieldName); + } + + /** + * Returns the value of a field of the given class of an object + * + * @param instance Target object + * @param clazz Target class + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @return The value of field of the target object + * @throws IllegalArgumentException If the target object does not feature the desired field + * @throws IllegalAccessException If the desired field cannot be accessed + * @throws NoSuchFieldException If the desired field of the target class cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @see #getField(Class, boolean, String) + */ + public static Object getValue(Object instance, Class clazz, boolean declared, String fieldName) throws IllegalArgumentException, IllegalAccessException, + NoSuchFieldException, SecurityException { + return getField(clazz, declared, fieldName).get(instance); + } + + /** + * Returns the value of a field of a desired class of an object + * + * @param instance Target object + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @return The value of field of the target object + * @throws IllegalArgumentException If the target object does not feature the desired field + * @throws IllegalAccessException If the desired field cannot be accessed + * @throws NoSuchFieldException If the desired field of the desired class cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #getValue(Object, Class, boolean, String) + */ + public static Object getValue(Object instance, String className, PackageType packageType, boolean declared, String fieldName) throws IllegalArgumentException, + IllegalAccessException, NoSuchFieldException, SecurityException, ClassNotFoundException { + return getValue(instance, packageType.getClass(className), declared, fieldName); + } + + /** + * Returns the value of a field with the given name of an object + * + * @param instance Target object + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @return The value of field of the target object + * @throws IllegalArgumentException If the target object does not feature the desired field (should not occur since it searches for a field with the given name in the class of the object) + * @throws IllegalAccessException If the desired field cannot be accessed + * @throws NoSuchFieldException If the desired field of the target object cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @see #getValue(Object, Class, boolean, String) + */ + public static Object getValue(Object instance, boolean declared, String fieldName) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, + SecurityException { + return getValue(instance, instance.getClass(), declared, fieldName); + } + + /** + * Sets the value of a field of the given class of an object + * + * @param instance Target object + * @param clazz Target class + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @param value New value + * @throws IllegalArgumentException If the type of the value does not match the type of the desired field + * @throws IllegalAccessException If the desired field cannot be accessed + * @throws NoSuchFieldException If the desired field of the target class cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @see #getField(Class, boolean, String) + */ + public static void setValue(Object instance, Class clazz, boolean declared, String fieldName, Object value) throws IllegalArgumentException, + IllegalAccessException, NoSuchFieldException, SecurityException { + getField(clazz, declared, fieldName).set(instance, value); + } + + /** + * Sets the value of a field of a desired class of an object + * + * @param instance Target object + * @param className Name of the desired target class + * @param packageType Package where the desired target class is located + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @param value New value + * @throws IllegalArgumentException If the type of the value does not match the type of the desired field + * @throws IllegalAccessException If the desired field cannot be accessed + * @throws NoSuchFieldException If the desired field of the desired class cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found + * @see #setValue(Object, Class, boolean, String, Object) + */ + public static void setValue(Object instance, String className, PackageType packageType, boolean declared, String fieldName, Object value) + throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, ClassNotFoundException { + setValue(instance, packageType.getClass(className), declared, fieldName, value); + } + + /** + * Sets the value of a field with the given name of an object + * + * @param instance Target object + * @param declared Whether the desired field is declared or not + * @param fieldName Name of the desired field + * @param value New value + * @throws IllegalArgumentException If the type of the value does not match the type of the desired field + * @throws IllegalAccessException If the desired field cannot be accessed + * @throws NoSuchFieldException If the desired field of the target object cannot be found + * @throws SecurityException If the desired field cannot be made accessible + * @see #setValue(Object, Class, boolean, String, Object) + */ + public static void setValue(Object instance, boolean declared, String fieldName, Object value) throws IllegalArgumentException, IllegalAccessException, + NoSuchFieldException, SecurityException { + setValue(instance, instance.getClass(), declared, fieldName, value); + } + + /** + * Represents an enumeration of dynamic packages of NMS and CraftBukkit + *

+ * This class is part of the ReflectionUtils and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.0 + */ + public enum PackageType { + MINECRAFT_SERVER("net.minecraft.server." + getServerVersion()), + CRAFTBUKKIT("org.bukkit.craftbukkit." + getServerVersion()), + CRAFTBUKKIT_BLOCK(CRAFTBUKKIT, "block"), + CRAFTBUKKIT_CHUNKIO(CRAFTBUKKIT, "chunkio"), + CRAFTBUKKIT_COMMAND(CRAFTBUKKIT, "command"), + CRAFTBUKKIT_CONVERSATIONS(CRAFTBUKKIT, "conversations"), + CRAFTBUKKIT_ENCHANTMENS(CRAFTBUKKIT, "enchantments"), + CRAFTBUKKIT_ENTITY(CRAFTBUKKIT, "entity"), + CRAFTBUKKIT_EVENT(CRAFTBUKKIT, "event"), + CRAFTBUKKIT_GENERATOR(CRAFTBUKKIT, "generator"), + CRAFTBUKKIT_HELP(CRAFTBUKKIT, "help"), + CRAFTBUKKIT_INVENTORY(CRAFTBUKKIT, "inventory"), + CRAFTBUKKIT_MAP(CRAFTBUKKIT, "map"), + CRAFTBUKKIT_METADATA(CRAFTBUKKIT, "metadata"), + CRAFTBUKKIT_POTION(CRAFTBUKKIT, "potion"), + CRAFTBUKKIT_PROJECTILES(CRAFTBUKKIT, "projectiles"), + CRAFTBUKKIT_SCHEDULER(CRAFTBUKKIT, "scheduler"), + CRAFTBUKKIT_SCOREBOARD(CRAFTBUKKIT, "scoreboard"), + CRAFTBUKKIT_UPDATER(CRAFTBUKKIT, "updater"), + CRAFTBUKKIT_UTIL(CRAFTBUKKIT, "util"); + + private final String path; + + /** + * Construct a new package type + * + * @param path Path of the package + */ + private PackageType(String path) { + this.path = path; + } + + /** + * Construct a new package type + * + * @param parent Parent package of the package + * @param path Path of the package + */ + private PackageType(PackageType parent, String path) { + this(parent + "." + path); + } + + /** + * Returns the path of this package type + * + * @return The path + */ + public String getPath() { + return path; + } + + /** + * Returns the class with the given name + * + * @param className Name of the desired class + * @return The class with the specified name + * @throws ClassNotFoundException If the desired class with the specified name and package cannot be found + */ + public Class getClass(String className) throws ClassNotFoundException { + return Class.forName(this + "." + className); + } + + // Override for convenience + @Override + public String toString() { + return path; + } + + /** + * Returns the version of your server + * + * @return The server version + */ + public static String getServerVersion() { + return Bukkit.getServer().getClass().getPackage().getName().substring(23); + } + } + + /** + * Represents an enumeration of Java data types with corresponding classes + *

+ * This class is part of the ReflectionUtils and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.0 + */ + public enum DataType { + BYTE(byte.class, Byte.class), + SHORT(short.class, Short.class), + INTEGER(int.class, Integer.class), + LONG(long.class, Long.class), + CHARACTER(char.class, Character.class), + FLOAT(float.class, Float.class), + DOUBLE(double.class, Double.class), + BOOLEAN(boolean.class, Boolean.class); + + private static final Map, DataType> CLASS_MAP = new HashMap, DataType>(); + private final Class primitive; + private final Class reference; + + // Initialize map for quick class lookup + static { + for (DataType type : values()) { + CLASS_MAP.put(type.primitive, type); + CLASS_MAP.put(type.reference, type); + } + } + + /** + * Construct a new data type + * + * @param primitive Primitive class of this data type + * @param reference Reference class of this data type + */ + private DataType(Class primitive, Class reference) { + this.primitive = primitive; + this.reference = reference; + } + + /** + * Returns the primitive class of this data type + * + * @return The primitive class + */ + public Class getPrimitive() { + return primitive; + } + + /** + * Returns the reference class of this data type + * + * @return The reference class + */ + public Class getReference() { + return reference; + } + + /** + * Returns the data type with the given primitive/reference class + * + * @param clazz Primitive/Reference class of the data type + * @return The data type + */ + public static DataType fromClass(Class clazz) { + return CLASS_MAP.get(clazz); + } + + /** + * Returns the primitive class of the data type with the given reference class + * + * @param clazz Reference class of the data type + * @return The primitive class + */ + public static Class getPrimitive(Class clazz) { + DataType type = fromClass(clazz); + return type == null ? clazz : type.getPrimitive(); + } + + /** + * Returns the reference class of the data type with the given primitive class + * + * @param clazz Primitive class of the data type + * @return The reference class + */ + public static Class getReference(Class clazz) { + DataType type = fromClass(clazz); + return type == null ? clazz : type.getReference(); + } + + /** + * Returns the primitive class array of the given class array + * + * @param classes Given class array + * @return The primitive class array + */ + public static Class[] getPrimitive(Class[] classes) { + int length = classes == null ? 0 : classes.length; + Class[] types = new Class[length]; + for (int index = 0; index < length; index++) { + if (classes != null) + types[index] = getPrimitive(classes[index]); + } + return types; + } + + /** + * Returns the reference class array of the given class array + * + * @param classes Given class array + * @return The reference class array + */ + public static Class[] getReference(Class[] classes) { + int length = classes == null ? 0 : classes.length; + Class[] types = new Class[length]; + for (int index = 0; index < length; index++) { + if (classes != null) + types[index] = getReference(classes[index]); + } + return types; + } + + /** + * Returns the primitive class array of the given object array + * + * @param object Given object array + * @return The primitive class array + */ + public static Class[] getPrimitive(Object[] objects) { + int length = objects == null ? 0 : objects.length; + Class[] types = new Class[length]; + for (int index = 0; index < length; index++) { + if (objects != null) + types[index] = getPrimitive(objects[index].getClass()); + } + return types; + } + + /** + * Returns the reference class array of the given object array + * + * @param object Given object array + * @return The reference class array + */ + public static Class[] getReference(Object[] objects) { + int length = objects == null ? 0 : objects.length; + Class[] types = new Class[length]; + for (int index = 0; index < length; index++) { + if (objects != null) + types[index] = getReference(objects[index].getClass()); + } + return types; + } + + /** + * Compares two class arrays on equivalence + * + * @param primary Primary class array + * @param secondary Class array which is compared to the primary array + * @return Whether these arrays are equal or not + */ + public static boolean compare(Class[] primary, Class[] secondary) { + if (primary == null || secondary == null || primary.length != secondary.length) { + return false; + } + for (int index = 0; index < primary.length; index++) { + Class primaryClass = primary[index]; + Class secondaryClass = secondary[index]; + if (primaryClass.equals(secondaryClass) || primaryClass.isAssignableFrom(secondaryClass)) { + continue; + } + return false; + } + return true; + } + } } \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/utils/Sorting.java b/src/com/bekvon/bukkit/residence/utils/Sorting.java index 043663ec2..e56f4b54c 100644 --- a/src/com/bekvon/bukkit/residence/utils/Sorting.java +++ b/src/com/bekvon/bukkit/residence/utils/Sorting.java @@ -20,6 +20,7 @@ public Map sortByValueDESC(Map unsortMap) { // Sort list with comparator, to compare the Map values Collections.sort(list, new Comparator>() { + @Override public int compare(Map.Entry o1, Map.Entry o2) { return (o2.getValue()).compareTo(o1.getValue()); } @@ -41,6 +42,7 @@ public Map sortByKeyDESC(Map unsortMap) { // Sort list with comparator, to compare the Map values Collections.sort(list, new Comparator>() { + @Override public int compare(Map.Entry o1, Map.Entry o2) { return (o2.getKey()).compareTo(o1.getKey()); } @@ -85,6 +87,7 @@ public Map sortByKeyASC(Map unsortMap) { // Sort list with comparator, to compare the Map values Collections.sort(list, new Comparator>() { + @Override public int compare(Map.Entry o1, Map.Entry o2) { return (o1.getKey()).compareTo(o2.getKey()); } @@ -106,6 +109,7 @@ public Map sortStringByKeyASC(Map unsortMap) { // Sort list with comparator, to compare the Map values Collections.sort(list, new Comparator>() { + @Override public int compare(Map.Entry o1, Map.Entry o2) { return (o1.getKey()).compareTo(o2.getKey()); } @@ -127,6 +131,7 @@ public Map sortDoubleDESC(Map unsortMap) { // Sort list with comparator, to compare the Map values Collections.sort(list, new Comparator>() { + @Override public int compare(Map.Entry o1, Map.Entry o2) { return (o2.getValue()).compareTo(o1.getValue()); } @@ -148,6 +153,7 @@ public Map sortASC(Map unsortMap) { // Sort list with comparator, to compare the Map values Collections.sort(list, new Comparator>() { + @Override public int compare(Map.Entry o1, Map.Entry o2) { return (o1.getValue()).compareTo(o2.getValue()); } diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index ed2502551..0f68789a2 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -65,6 +65,7 @@ public void VersionCheck(final Player player) { return; Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override public void run() { String currentVersion = plugin.getDescription().getVersion(); String newVersion = getNewVersion(); diff --git a/src/com/bekvon/bukkit/residence/utils/YmlMaker.java b/src/com/bekvon/bukkit/residence/utils/YmlMaker.java index 446613d36..0a97a0b3b 100644 --- a/src/com/bekvon/bukkit/residence/utils/YmlMaker.java +++ b/src/com/bekvon/bukkit/residence/utils/YmlMaker.java @@ -69,23 +69,46 @@ private static YamlConfiguration loadConfiguration(InputStream defConfigStream) } public void reloadConfig() { + InputStreamReader f = null; try { - this.Configuration = loadConfiguration(new InputStreamReader(new FileInputStream(this.ConfigFile), "UTF-8")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } catch (FileNotFoundException e) { - e.printStackTrace(); + f = new InputStreamReader(new FileInputStream(this.ConfigFile), "UTF-8"); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); } - if (Configuration == null) + if (f != null) + this.Configuration = loadConfiguration(f); + + if (Configuration == null) { + if (f != null) + try { + f.close(); + } catch (IOException e) { + e.printStackTrace(); + } return; - + } + InputStream defConfigStream = this.plugin.getResource(this.fileName); if (defConfigStream != null) { YamlConfiguration defConfig = loadConfiguration(defConfigStream); if (defConfig != null) this.Configuration.setDefaults(defConfig); } + if (defConfigStream != null) + try { + defConfigStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + if (f != null) + try { + f.close(); + } catch (IOException e) { + e.printStackTrace(); + } } public FileConfiguration getConfig() { diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index ab8770f71..80f98bb9d 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -33,12 +33,12 @@ public boolean chatOK() { } public ResidenceVaultAdapter(Server s) { - this.setupPermissions(s); - this.setupEconomy(s); - this.setupChat(s); + setupPermissions(s); + setupEconomy(s); + setupChat(s); } - private boolean setupPermissions(Server s) { + private static boolean setupPermissions(Server s) { RegisteredServiceProvider permissionProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); if (permissionProvider != null) { permissions = permissionProvider.getProvider(); @@ -46,7 +46,7 @@ private boolean setupPermissions(Server s) { return (permissions != null); } - private boolean setupChat(Server s) { + private static boolean setupChat(Server s) { RegisteredServiceProvider chatProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); if (chatProvider != null) { chat = chatProvider.getProvider(); @@ -54,7 +54,7 @@ private boolean setupChat(Server s) { return (chat != null); } - private boolean setupEconomy(Server s) { + private static boolean setupEconomy(Server s) { RegisteredServiceProvider economyProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); if (economyProvider != null) { economy = economyProvider.getProvider(); @@ -62,23 +62,23 @@ private boolean setupEconomy(Server s) { return (economy != null); } + @Override public String getPlayerGroup(Player player) { String group = permissions.getPrimaryGroup(player).toLowerCase(); if (group == null) { return group; - } else { - return group.toLowerCase(); } + return group.toLowerCase(); } + @Override public String getPlayerGroup(String player, String world) { @SuppressWarnings("deprecation") String group = permissions.getPrimaryGroup(world, player); if (group == null) { return group; - } else { - return group.toLowerCase(); } + return group.toLowerCase(); } public static boolean hasPermission(OfflinePlayer player, String perm, String world) { @@ -117,13 +117,11 @@ public boolean transfer(String playerFrom, String playerTo, double amount) { if (economy.withdrawPlayer(playerFrom, amount).transactionSuccess()) { if (economy.depositPlayer(playerTo, amount).transactionSuccess()) { return true; - } else { - economy.depositPlayer(playerFrom, amount); - return false; } - } else { + economy.depositPlayer(playerFrom, amount); return false; } + return false; } public String getEconomyName() { @@ -147,6 +145,7 @@ public String getChatName() { return ""; } + @Override public String getName() { return "Vault"; } diff --git a/src/com/residence/mcstats/Metrics.java b/src/com/residence/mcstats/Metrics.java index fe8bcf347..dc07bd832 100644 --- a/src/com/residence/mcstats/Metrics.java +++ b/src/com/residence/mcstats/Metrics.java @@ -225,6 +225,7 @@ public boolean start() { private boolean firstPost = true; + @Override public void run() { try { // This has to be synchronized or it can collide with the disable method. @@ -356,7 +357,8 @@ private void postPlugin(final boolean isPing) throws IOException { String pluginVersion = description.getVersion(); String serverVersion = Bukkit.getVersion(); int playersOnline = 0; - for (@SuppressWarnings("unused") Player one : Bukkit.getOnlinePlayers()) { + for (@SuppressWarnings("unused") + Player one : Bukkit.getOnlinePlayers()) { playersOnline++; } @@ -451,18 +453,17 @@ private void postPlugin(final boolean isPing) throws IOException { if (response == null || response.startsWith("ERR")) { throw new IOException(response);//Throw the exception - } else { - // Is this the first update this hour? - if (response.contains("OK This is your first update this hour")) { - synchronized (graphs) { - final Iterator iter = graphs.iterator(); + } + // Is this the first update this hour? + if (response.contains("OK This is your first update this hour")) { + synchronized (graphs) { + final Iterator iter = graphs.iterator(); - while (iter.hasNext()) { - final Graph graph = iter.next(); + while (iter.hasNext()) { + final Graph graph = iter.next(); - for (Plotter plotter : graph.getPlotters()) { - plotter.reset(); - } + for (Plotter plotter : graph.getPlotters()) { + plotter.reset(); } } } @@ -474,7 +475,7 @@ private void postPlugin(final boolean isPing) throws IOException { * * @return true if mineshafter is installed on the server */ - private boolean isMineshafterPresent() { + private static boolean isMineshafterPresent() { try { Class.forName("mineshafter.MineServer"); return true; diff --git a/src/plugin.yml b/src/plugin.yml index 43c1be35e..f863f56f1 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.4.0.4 +version: 4.4.0.6 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 5ad9f378c260cf4585e54e0803e59e6834dca53b Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 30 Jun 2016 15:12:46 +0300 Subject: [PATCH 0198/1142] Option to pick what you want to backup and for how long to keep it --- .../bukkit/residence/ConfigManager.java | 135 +++++++++++-- .../bekvon/bukkit/residence/Residence.java | 10 +- .../bukkit/residence/commands/remove.java | 24 ++- .../residence/containers/ResidencePlayer.java | 12 +- .../protection/ResidencePermissions.java | 32 ++-- .../residence/text/help/InformationPager.java | 2 - src/com/residence/zip/ZipLibrary.java | 181 ++++++++++-------- src/plugin.yml | 2 +- 8 files changed, 272 insertions(+), 126 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 0ae64399c..26e6e5fd4 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -71,6 +71,20 @@ public class ConfigManager { protected int chatPrefixLength; protected int leaseCheckInterval; protected int autoSaveInt; + + // Backup stuff + protected boolean BackupAutoCleanUpUse; + protected int BackupAutoCleanUpDays; + protected boolean UseZipBackup; + protected boolean BackupWorldFiles; + protected boolean BackupforsaleFile; + protected boolean BackupleasesFile; + protected boolean BackuppermlistsFile; + protected boolean BackuprentFile; + protected boolean BackupflagsFile; + protected boolean BackupgroupsFile; + protected boolean BackupconfigFile; + protected int FlowLevel; protected int PlaceLevel; protected int BlockFallLevel; @@ -538,6 +552,24 @@ public void UpdateConfigFile() { c.getW().addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); autoSaveInt = c.get("Global.SaveInterval", 10); + c.getW().addComment("Global.Backup.AutoCleanUp.Use", + "Do you want to automaticaly remove backup files from main backup folder if they are older than defined day amount"); + BackupAutoCleanUpUse = c.get("Global.Backup.AutoCleanUp.Use", false); + BackupAutoCleanUpDays = c.get("Global.Backup.AutoCleanUp.Days", 30); + + c.getW().addComment("Global.Backup.UseZip", "Do you want to backup files by creating zip files in main residence folder in backup folder", + "This wont have effect on regular backuped files made in save folder"); + UseZipBackup = c.get("Global.Backup.UseZip", true); + + BackupWorldFiles = c.get("Global.Backup.IncludeFiles.Worlds", true); + BackupforsaleFile = c.get("Global.Backup.IncludeFiles.forsale", true); + BackupleasesFile = c.get("Global.Backup.IncludeFiles.leases", true); + BackuppermlistsFile = c.get("Global.Backup.IncludeFiles.permlists", true); + BackuprentFile = c.get("Global.Backup.IncludeFiles.rent", true); + BackupflagsFile = c.get("Global.Backup.IncludeFiles.flags", true); + BackupgroupsFile = c.get("Global.Backup.IncludeFiles.groups", true); + BackupconfigFile = c.get("Global.Backup.IncludeFiles.config", true); + // Auto remove old residences c.getW().addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", "Players can bypass this wih residence.cleanbypass permission node"); @@ -547,13 +579,14 @@ public void UpdateConfigFile() { c.getW().addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); - c.getW().addComment("Global.LWC.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", - "Players can bypass this wih residence.cleanbypass permission node"); - AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); - c.getW().addComment("Global.LWC.Days", "For how long player should be offline to delete hes LWC protection on residence removal"); - AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); - c.getW().addComment("Global.LWC.Worlds", "Worlds to be included in check list"); - AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); + // Not in use currently +// c.getW().addComment("Global.LWC.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", +// "Players can bypass this wih residence.cleanbypass permission node"); +// AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); +// c.getW().addComment("Global.LWC.Days", "For how long player should be offline to delete hes LWC protection on residence removal"); +// AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); +// c.getW().addComment("Global.LWC.Worlds", "Worlds to be included in check list"); +// AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); // TNT explosions below 63 c.getW().addComment("Global.AntiGreef.TNT.ExplodeBelow", @@ -767,10 +800,22 @@ public void UpdateConfigFile() { VisualizerCollumnSpacing = c.get("Global.Visualizer.CollumnSpacing", 2); if (VisualizerCollumnSpacing < 1) VisualizerCollumnSpacing = 1; + + String effectsList = ""; + for (Effect one : Effect.values()) { + if (one == null) + continue; + if (one.name() == null) + continue; + effectsList += one.name().toLowerCase() + ", "; + } + c.getW().addComment("Global.Visualizer.Selected", "Particle effect names. Posible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", - " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance"); + " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance", + "", + "If using spigot based server different particales can be used:", effectsList); // Frame String efname = c.get("Global.Visualizer.Selected.Frame", "happyVillager"); @@ -786,8 +831,11 @@ public void UpdateConfigFile() { break; } } + if (SelectedSpigotFrame == null) { - SelectedSpigotFrame = Effect.HAPPY_VILLAGER; + SelectedSpigotFrame = Effect.getByName("HAPPY_VILLAGER"); + if (SelectedSpigotFrame == null) + SelectedSpigotFrame = Effect.values()[0]; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } @@ -806,7 +854,10 @@ public void UpdateConfigFile() { } } if (SelectedSpigotSides == null) { - SelectedSpigotSides = Effect.COLOURED_DUST; + SelectedSpigotSides = Effect.getByName("COLOURED_DUST"); + if (SelectedSpigotSides == null) + SelectedSpigotSides = Effect.values()[0]; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } @@ -825,7 +876,9 @@ public void UpdateConfigFile() { } } if (OverlapSpigotFrame == null) { - OverlapSpigotFrame = Effect.FLAME; + OverlapSpigotFrame = Effect.getByName("FLAME"); + if (OverlapSpigotFrame == null) + OverlapSpigotFrame = Effect.values()[0]; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } @@ -843,7 +896,9 @@ public void UpdateConfigFile() { } } if (OverlapSpigotSides == null) { - OverlapSpigotSides = Effect.FLAME; + OverlapSpigotSides = Effect.getByName("FLAME"); + if (OverlapSpigotSides == null) + OverlapSpigotSides = Effect.values()[0]; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } @@ -934,7 +989,7 @@ public void UpdateConfigFile() { } catch (IOException e) { e.printStackTrace(); } - + try { in.close(); } catch (IOException e) { @@ -1068,19 +1123,19 @@ public ParticleEffects getOverlapFrame() { public ParticleEffects getOverlapSides() { return OverlapSides; } - + public Effect getSelectedSpigotFrame() { return SelectedSpigotFrame; } - + public Effect getSelectedSpigotSides() { return SelectedSpigotSides; } - + public Effect getOverlapSpigotFrame() { return OverlapSpigotFrame; } - + public Effect getOverlapSpigotSides() { return OverlapSpigotSides; } @@ -1241,6 +1296,52 @@ public int getAutoSaveInterval() { return autoSaveInt; } + // backup stuff + public boolean BackupAutoCleanUpUse() { + return BackupAutoCleanUpUse; + } + + public int BackupAutoCleanUpDays() { + return BackupAutoCleanUpDays; + } + + public boolean UseZipBackup() { + return UseZipBackup; + } + + public boolean BackupWorldFiles() { + return BackupWorldFiles; + } + + public boolean BackupforsaleFile() { + return BackupforsaleFile; + } + + public boolean BackupleasesFile() { + return BackupleasesFile; + } + + public boolean BackuppermlistsFile() { + return BackuppermlistsFile; + } + + public boolean BackuprentFile() { + return BackuprentFile; + } + + public boolean BackupflagsFile() { + return BackupflagsFile; + } + + public boolean BackupgroupsFile() { + return BackupgroupsFile; + } + + public boolean BackupconfigFile() { + return BackupconfigFile; + } + // backup stuff + public int getFlowLevel() { return FlowLevel; } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 411396b21..b6cfb98ce 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -112,10 +112,6 @@ */ public class Residence extends JavaPlugin { - public final static String uid = "%%__USER__%%"; - final String rid = "%%__RESOURCE__%%"; - final String nonce = "%%__NONCE__%%"; - protected static String ResidenceVersion; protected static List authlist; protected static ResidenceManager rmanager; @@ -1486,6 +1482,12 @@ public static boolean isPlayerExist(CommandSender sender, String name, boolean i return true; if (inform) sender.sendMessage(getLM().getMessage("Invalid.Player")); + @SuppressWarnings("unused") + String a = "%%__USER__%%"; + @SuppressWarnings("unused") + String b = "%%__RESOURCE__%%"; + @SuppressWarnings("unused") + String c = "%%__NONCE__%%"; return false; } diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index eb468f464..053cb2a8d 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence.commands; +import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -51,10 +52,25 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command String resname = res.getName(); if (!Residence.deleteConfirm.containsKey(senderName) || !resname.equalsIgnoreCase(Residence.deleteConfirm.get(senderName))) { - if (res.isSubzone()) - sender.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", res.getResidenceName())); - else - sender.sendMessage(Residence.getLM().getMessage("Residence.DeleteConfirm", res.getResidenceName())); + String cmd = "res"; + if (resadmin) + cmd = "resadmin"; + if (sender instanceof Player) { + String raw = ""; + if (res.isSubzone()) { + raw = Residence.getResidenceManager().convertToRaw(null, Residence.getLM().getMessage("Subzone.DeleteConfirm", res.getResidenceName()), + "Click to confirm remove", cmd + " confirm"); + } else { + raw = Residence.getResidenceManager().convertToRaw(null, Residence.getLM().getMessage("Residence.DeleteConfirm", res.getResidenceName()), + "Click to confirm remove", cmd + " confirm"); + } + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); + } else { + if (res.isSubzone()) + sender.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", res.getResidenceName())); + else + sender.sendMessage(Residence.getLM().getMessage("Residence.DeleteConfirm", res.getResidenceName())); + } Residence.deleteConfirm.put(senderName, resname); } else { Residence.getResidenceManager().removeResidence(sender, resname, resadmin); diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index eb193b0fb..526c2ad62 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -95,7 +95,7 @@ public void RecalculatePermissions() { public void recountMaxRes() { for (int i = 1; i <= Residence.getConfigManager().getMaxResCount(); i++) { if (player != null) { - if (this.player.isPermissionSet("residence.max.res." + i)) + if (this.player.hasPermission("residence.max.res." + i)) this.maxRes = i; } else { if (ofPlayer != null) @@ -133,6 +133,14 @@ public void recountMaxSubzones() { public int getMaxRes() { recountMaxRes(); + if (this.player != null) { + Residence.getPermissionManager().updateGroupNameForPlayer(this.player.getName(), this.player.isOnline() ? this.player.getPlayer().getLocation().getWorld() + .getName() : Residence.getConfigManager().getDefaultWorld(), true); + PermissionGroup g = Residence.getPermissionManager().getGroup(this.player); + if (this.maxRes < g.getMaxZones()) + return g.getMaxZones(); + } + return this.maxRes; } @@ -171,6 +179,8 @@ public void recountResAmount() { } public void addResidence(ClaimedResidence residence) { + if (residence == null) + return; String name = residence.getName(); name = name.toLowerCase(); this.ResidenceList.put(name, residence); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 498807f64..bfd664667 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -351,36 +351,28 @@ public void applyDefaultFlags() { PermissionManager gm = Residence.getPermissionManager(); PermissionGroup group = gm.getGroup(this.getOwner(), world); Set> dflags = group.getDefaultResidenceFlags(); - Set> dcflags = group.getDefaultCreatorFlags(); +// Set> dcflags = group.getDefaultCreatorFlags(); Set>> dgflags = group.getDefaultGroupFlags(); this.applyGlobalDefaults(); for (Entry next : dflags) { if (this.checkValidFlag(next.getKey(), true)) { - if (next.getValue()) { - this.setFlag(next.getKey(), FlagState.TRUE); - } else { - this.setFlag(next.getKey(), FlagState.FALSE); - } + this.setFlag(next.getKey(), next.getValue() ? FlagState.TRUE : FlagState.FALSE); } } - for (Entry next : dcflags) { - if (this.checkValidFlag(next.getKey(), false)) { - if (next.getValue()) { - this.setPlayerFlag(this.getOwner(), next.getKey(), FlagState.TRUE); - } else { - this.setPlayerFlag(this.getOwner(), next.getKey(), FlagState.FALSE); - } - } - } +// for (Entry next : dcflags) { +// if (this.checkValidFlag(next.getKey(), false)) { +// if (next.getValue()) { +// this.setPlayerFlag(this.getOwner(), next.getKey(), FlagState.TRUE); +// } else { +// this.setPlayerFlag(this.getOwner(), next.getKey(), FlagState.FALSE); +// } +// } +// } for (Entry> entry : dgflags) { Map value = entry.getValue(); for (Entry flag : value.entrySet()) { - if (flag.getValue()) { - this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); - } else { - this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); - } + this.setGroupFlag(entry.getKey(), flag.getKey(), flag.getValue() ? FlagState.TRUE : FlagState.FALSE); } } } diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 6a4a7bbdc..b0d8f8ee6 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -8,7 +8,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import java.util.Arrays; @@ -67,7 +66,6 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List pagecount, lines.size()))); String cmd = "res"; - Debug.D("admin " + resadmin); if (resadmin) cmd = "resadmin"; diff --git a/src/com/residence/zip/ZipLibrary.java b/src/com/residence/zip/ZipLibrary.java index c677feb48..137fa9aec 100644 --- a/src/com/residence/zip/ZipLibrary.java +++ b/src/com/residence/zip/ZipLibrary.java @@ -19,100 +19,127 @@ public class ZipLibrary { private static File BackupDir = new File(Residence.getDataLocation(), "Backup"); + private static void cleanFiles() { + int x = Residence.getConfigManager().BackupAutoCleanUpDays() * 60 * 1000 * 24 * 60; + Long time = System.currentTimeMillis(); + for (File file : BackupDir.listFiles()) { + long diff = time - file.lastModified(); + if (diff > x) { + file.delete(); + } + } + } + public static void backup() throws IOException { - try { - BackupDir.mkdir(); - - } - catch (Exception e) { - e.printStackTrace(); - return; - } - - // Generate the proper date for the backup filename - Date date = new Date(); - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); - File fileZip = new File(BackupDir, dateFormat.format(date) + ".zip"); - - // Create the Source List, and add directories/etc to the file. - List sources = new ArrayList(); - - File saveFolder = new File(Residence.getDataLocation(), "Save"); - File worldFolder = new File(saveFolder, "Worlds"); - if (!saveFolder.isDirectory()) { - return; - } - File saveFile; - for (World world : Residence.getServ().getWorlds()) { - saveFile = new File(worldFolder, "res_" + world.getName() + ".yml"); - if (saveFile.isFile()) { - sources.add(saveFile); - } - } - - - packZip(fileZip, sources); + try { + BackupDir.mkdir(); + } catch (Exception e) { + e.printStackTrace(); + return; + } + if (Residence.getConfigManager().BackupAutoCleanUpUse()) + cleanFiles(); + // Generate the proper date for the backup filename + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); + File fileZip = new File(BackupDir, dateFormat.format(date) + ".zip"); + + // Create the Source List, and add directories/etc to the file. + List sources = new ArrayList(); + + File saveFolder = new File(Residence.getDataLocation(), "Save"); + File worldFolder = new File(saveFolder, "Worlds"); + + if (!saveFolder.isDirectory()) { + return; + } + + File saveFile; + if (Residence.getConfigManager().BackupWorldFiles()) + for (World world : Residence.getServ().getWorlds()) { + saveFile = new File(worldFolder, "res_" + world.getName() + ".yml"); + if (saveFile.isFile()) { + sources.add(saveFile); + } + } + + if (Residence.getConfigManager().BackupforsaleFile()) + sources.add(new File(saveFolder, "forsale.yml")); + if (Residence.getConfigManager().BackupleasesFile()) + sources.add(new File(saveFolder, "leases.yml")); + if (Residence.getConfigManager().BackuppermlistsFile()) + sources.add(new File(saveFolder, "permlists.yml")); + if (Residence.getConfigManager().BackuprentFile()) + sources.add(new File(saveFolder, "rent.yml")); + + if (Residence.getConfigManager().BackupflagsFile()) + sources.add(new File(Residence.getDataLocation(), "flags.yml")); + if (Residence.getConfigManager().BackupgroupsFile()) + sources.add(new File(Residence.getDataLocation(), "groups.yml")); + if (Residence.getConfigManager().BackupconfigFile()) + sources.add(new File(Residence.getDataLocation(), "config.yml")); + + if (Residence.getConfigManager().UseZipBackup()) + packZip(fileZip, sources); } private static void packZip(File output, List sources) throws IOException { - ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(output)); - zipOut.setLevel(Deflater.DEFAULT_COMPRESSION); - - for (File source : sources) { - if (source.isDirectory()) { - zipDir(zipOut, "", source); - } - else { - zipFile(zipOut, "", source); - } - } - - zipOut.flush(); - zipOut.close(); + ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(output)); + zipOut.setLevel(Deflater.DEFAULT_COMPRESSION); + + for (File source : sources) { + if (source.isDirectory()) { + zipDir(zipOut, "", source); + } else { + zipFile(zipOut, "", source); + } + } + + zipOut.flush(); + zipOut.close(); } private static String buildPath(String path, String file) { - if (path == null || path.isEmpty()) { - return file; - } + if (path == null || path.isEmpty()) { + return file; + } - return path + File.separator + file; + return path + File.separator + file; } private static void zipDir(ZipOutputStream zos, String path, File dir) throws IOException { - if (!dir.canRead()) { - return; - } - - File[] files = dir.listFiles(); - path = buildPath(path, dir.getName()); - - for (File source : files) { - if (source.isDirectory()) { - zipDir(zos, path, source); - } - else { - zipFile(zos, path, source); - } - } + if (!dir.canRead()) { + return; + } + + File[] files = dir.listFiles(); + path = buildPath(path, dir.getName()); + + for (File source : files) { + if (source.isDirectory()) { + zipDir(zos, path, source); + } else { + zipFile(zos, path, source); + } + } } private static void zipFile(ZipOutputStream zos, String path, File file) throws IOException { - if (!file.canRead()) { - return; - } + if (!file.canRead()) { + return; + } - zos.putNextEntry(new ZipEntry(buildPath(path, file.getName()))); + zos.putNextEntry(new ZipEntry(buildPath(path, file.getName()))); - FileInputStream fis = new FileInputStream(file); - byte[] buffer = new byte[4092]; - int byteCount = 0; + FileInputStream fis = new FileInputStream(file); + byte[] buffer = new byte[4092]; + int byteCount = 0; - while ((byteCount = fis.read(buffer)) != -1) { - zos.write(buffer, 0, byteCount); - } + while ((byteCount = fis.read(buffer)) != -1) { + zos.write(buffer, 0, byteCount); + } - fis.close(); - zos.closeEntry(); + fis.close(); + zos.closeEntry(); } } diff --git a/src/plugin.yml b/src/plugin.yml index f863f56f1..f5339bf2a 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.4.0.6 +version: 4.4.0.7 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 07bf49b2dc2b192470f457ace1257ad38e9bab38 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 11 Jul 2016 12:14:32 +0300 Subject: [PATCH 0199/1142] create shopVotes file if nonexist --- .../bekvon/bukkit/residence/shopStuff/ShopSignUtil.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index 524846707..5fea18192 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -72,6 +72,15 @@ public void LoadShopVotes() { GetAllVoteList().clear(); File file = new File(plugin.getDataFolder(), "ShopVotes.yml"); YamlConfiguration f = YamlConfiguration.loadConfiguration(file); + + if (!file.exists()){ + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } if (!f.isConfigurationSection("ShopVotes")) return; From b509817540ce7f2390582fcbe245c80d70a2c3cd Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 11 Jul 2016 12:15:11 +0300 Subject: [PATCH 0200/1142] Check particle visulaize what mode we need to run on --- .../bekvon/bukkit/residence/Residence.java | 5 +- .../residence/selection/SelectionManager.java | 43 +- .../residence/utils/ParticleEffects.java | 2743 +++++++++-------- src/plugin.yml | 2 +- 4 files changed, 1411 insertions(+), 1382 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index b6cfb98ce..feaff029c 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -80,6 +80,7 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.utils.ActionBar; import com.bekvon.bukkit.residence.utils.CrackShot; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.Sorting; @@ -412,7 +413,9 @@ public void onEnable() { getFlagUtilManager().load(); try { - Class.forName("org.bukkit.entity.Player.Spigot"); + Debug.D("spigot 1 "); +// Class.forName("org.bukkit.entity.Player.Spigot"); + Debug.D("spigot 2 "); spigotPlatform = true; } catch (Exception e) { } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index a18ae7646..cdb6bef18 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -392,19 +392,36 @@ public boolean MakeBorders(final Player player, final Location OriginalLow, fina Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { - if (!error) - for (Location one : locList) - Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, one, player); - else - for (Location one : locList) - Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, one, player); - - if (!error) - for (Location one : locList2) - Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, one, player); - else - for (Location one : locList2) - Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, one, player); + + if (Residence.isSpigot()) { + if (!error) + for (Location one : locList) + player.spigot().playEffect(one, Residence.getConfigManager().getSelectedSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + else + for (Location one : locList) + player.spigot().playEffect(one, Residence.getConfigManager().getOverlapSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + + if (!error) + for (Location one : locList2) + player.spigot().playEffect(one, Residence.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + else + for (Location one : locList2) + player.spigot().playEffect(one, Residence.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + } else { + if (!error) + for (Location one : locList) + Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, one, player); + else + for (Location one : locList) + Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, one, player); + if (!error) + for (Location one : locList2) + Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, one, player); + else + for (Location one : locList2) + Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, one, player); + } + return; } }); diff --git a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java index 07057bc0b..6949af721 100644 --- a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java +++ b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java @@ -15,7 +15,6 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.utils.ReflectionUtils.PackageType; /** @@ -43,1545 +42,1555 @@ * @version 1.7 */ public enum ParticleEffects { - /** - * A particle effect which is displayed by exploding tnt and creepers: - *

    - *
  • It looks like a white cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - EXPLOSION_NORMAL("explode", 0, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by exploding ghast fireballs and wither skulls: - *
    - *
  • It looks like a gray ball which is fading away - *
  • The speed value slightly influences the size of this particle effect - *
- */ - EXPLOSION_LARGE("largeexplode", 1, -1), - /** - * A particle effect which is displayed by exploding tnt and creepers: - *
    - *
  • It looks like a crowd of gray balls which are fading away - *
  • The speed value has no influence on this particle effect - *
- */ - EXPLOSION_HUGE("hugeexplosion", 2, -1), - /** - * A particle effect which is displayed by launching fireworks: - *
    - *
  • It looks like a white star which is sparkling - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - FIREWORKS_SPARK("fireworksSpark", 3, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by swimming entities and arrows in water: - *
    - *
  • It looks like a bubble - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - WATER_BUBBLE("bubble", 4, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_WATER), - /** - * A particle effect which is displayed by swimming entities and shaking wolves: - *
    - *
  • It looks like a blue drop - *
  • The speed value has no influence on this particle effect - *
- */ - WATER_SPLASH("splash", 5, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed on water when fishing: - *
    - *
  • It looks like a blue droplet - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - WATER_WAKE("wake", 6, 7, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by water: - *
    - *
  • It looks like a tiny blue square - *
  • The speed value has no influence on this particle effect - *
- */ - SUSPENDED("suspended", 7, -1, ParticleProperty.REQUIRES_WATER), - /** - * A particle effect which is displayed by air when close to bedrock and the in the void: - *
    - *
  • It looks like a tiny gray square - *
  • The speed value has no influence on this particle effect - *
- */ - SUSPENDED_DEPTH("depthSuspend", 8, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed when landing a critical hit and by arrows: - *
    - *
  • It looks like a light brown cross - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - CRIT("crit", 9, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed when landing a hit with an enchanted weapon: - *
    - *
  • It looks like a cyan star - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - CRIT_MAGIC("magicCrit", 10, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by primed tnt, torches, droppers, dispensers, end portals, brewing stands and monster spawners: - *
    - *
  • It looks like a little gray cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - SMOKE_NORMAL("smoke", 11, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by fire, minecarts with furnace and blazes: - *
    - *
  • It looks like a large gray cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - SMOKE_LARGE("largesmoke", 12, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed when splash potions or bottles o' enchanting hit something: - *
    - *
  • It looks like a white swirl - *
  • The speed value causes the particle to only move upwards when set to 0 - *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 - *
- */ - SPELL("spell", 13, -1), - /** - * A particle effect which is displayed when instant splash potions hit something: - *
    - *
  • It looks like a white cross - *
  • The speed value causes the particle to only move upwards when set to 0 - *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 - *
- */ - SPELL_INSTANT("instantSpell", 14, -1), - /** - * A particle effect which is displayed by entities with active potion effects: - *
    - *
  • It looks like a colored swirl - *
  • The speed value causes the particle to be colored black when set to 0 - *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed - *
- */ - SPELL_MOB("mobSpell", 15, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed by entities with active potion effects applied through a beacon: - *
    - *
  • It looks like a transparent colored swirl - *
  • The speed value causes the particle to be always colored black when set to 0 - *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed - *
- */ - SPELL_MOB_AMBIENT("mobSpellAmbient", 16, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed by witches: - *
    - *
  • It looks like a purple cross - *
  • The speed value causes the particle to only move upwards when set to 0 - *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 - *
- */ - SPELL_WITCH("witchMagic", 17, -1), - /** - * A particle effect which is displayed by blocks beneath a water source: - *
    - *
  • It looks like a blue drip - *
  • The speed value has no influence on this particle effect - *
- */ - DRIP_WATER("dripWater", 18, -1), - /** - * A particle effect which is displayed by blocks beneath a lava source: - *
    - *
  • It looks like an orange drip - *
  • The speed value has no influence on this particle effect - *
- */ - DRIP_LAVA("dripLava", 19, -1), - /** - * A particle effect which is displayed when attacking a villager in a village: - *
    - *
  • It looks like a cracked gray heart - *
  • The speed value has no influence on this particle effect - *
- */ - VILLAGER_ANGRY("angryVillager", 20, -1), - /** - * A particle effect which is displayed when using bone meal and trading with a villager in a village: - *
    - *
  • It looks like a green star - *
  • The speed value has no influence on this particle effect - *
- */ - VILLAGER_HAPPY("happyVillager", 21, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by mycelium: - *
    - *
  • It looks like a tiny gray square - *
  • The speed value has no influence on this particle effect - *
- */ - TOWN_AURA("townaura", 22, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by note blocks: - *
    - *
  • It looks like a colored note - *
  • The speed value causes the particle to be colored green when set to 0 - *
- */ - NOTE("note", 23, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed by nether portals, endermen, ender pearls, eyes of ender, ender chests and dragon eggs: - *
    - *
  • It looks like a purple cloud - *
  • The speed value influences the spread of this particle effect - *
- */ - PORTAL("portal", 24, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by enchantment tables which are nearby bookshelves: - *
    - *
  • It looks like a cryptic white letter - *
  • The speed value influences the spread of this particle effect - *
- */ - ENCHANTMENT_TABLE("enchantmenttable", 25, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by torches, active furnaces, magma cubes and monster spawners: - *
    - *
  • It looks like a tiny flame - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - FLAME("flame", 26, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by lava: - *
    - *
  • It looks like a spark - *
  • The speed value has no influence on this particle effect - *
- */ - LAVA("lava", 27, -1), - /** - * A particle effect which is currently unused: - *
    - *
  • It looks like a transparent gray square - *
  • The speed value has no influence on this particle effect - *
- */ - FOOTSTEP("footstep", 28, -1), - /** - * A particle effect which is displayed when a mob dies: - *
    - *
  • It looks like a large white cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - CLOUD("cloud", 29, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by redstone ore, powered redstone, redstone torches and redstone repeaters: - *
    - *
  • It looks like a tiny colored cloud - *
  • The speed value causes the particle to be colored red when set to 0 - *
- */ - REDSTONE("reddust", 30, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed when snowballs hit a block: - *
    - *
  • It looks like a little piece with the snowball texture - *
  • The speed value has no influence on this particle effect - *
- */ - SNOWBALL("snowballpoof", 31, -1), - /** - * A particle effect which is currently unused: - *
    - *
  • It looks like a tiny white cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - SNOW_SHOVEL("snowshovel", 32, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by slimes: - *
    - *
  • It looks like a tiny part of the slimeball icon - *
  • The speed value has no influence on this particle effect - *
- */ - SLIME("slime", 33, -1), - /** - * A particle effect which is displayed when breeding and taming animals: - *
    - *
  • It looks like a red heart - *
  • The speed value has no influence on this particle effect - *
- */ - HEART("heart", 34, -1), - /** - * A particle effect which is displayed by barriers: - *
    - *
  • It looks like a red box with a slash through it - *
  • The speed value has no influence on this particle effect - *
- */ - BARRIER("barrier", 35, 8), - /** - * A particle effect which is displayed when breaking a tool or eggs hit a block: - *
    - *
  • It looks like a little piece with an item texture - *
- */ - ITEM_CRACK("iconcrack", 36, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), - /** - * A particle effect which is displayed when breaking blocks or sprinting: - *
    - *
  • It looks like a little piece with a block texture - *
  • The speed value has no influence on this particle effect - *
- */ - BLOCK_CRACK("blockcrack", 37, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), - /** - * A particle effect which is displayed when falling: - *
    - *
  • It looks like a little piece with a block texture - *
- */ - BLOCK_DUST("blockdust", 38, 7, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), - /** - * A particle effect which is displayed when rain hits the ground: - *
    - *
  • It looks like a blue droplet - *
  • The speed value has no influence on this particle effect - *
- */ - WATER_DROP("droplet", 39, 8), - /** - * A particle effect which is currently unused: - *
    - *
  • It has no visual effect - *
- */ - ITEM_TAKE("take", 40, 8), - /** - * A particle effect which is displayed by elder guardians: - *
    - *
  • It looks like the shape of the elder guardian - *
  • The speed value has no influence on this particle effect - *
  • The offset values have no influence on this particle effect - *
- */ - MOB_APPEARANCE("mobappearance", 41, 8); - - private static final Map NAME_MAP = new HashMap(); - private static final Map ID_MAP = new HashMap(); - private final String name; - private final int id; - private final int requiredVersion; - private final List properties; - - // Initialize map for quick name and id lookup - static { - for (ParticleEffects effect : values()) { - NAME_MAP.put(effect.name, effect); - ID_MAP.put(effect.id, effect); - } + /** + * A particle effect which is displayed by exploding tnt and creepers: + *
    + *
  • It looks like a white cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + EXPLOSION_NORMAL("explode", 0, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by exploding ghast fireballs and wither skulls: + *
    + *
  • It looks like a gray ball which is fading away + *
  • The speed value slightly influences the size of this particle effect + *
+ */ + EXPLOSION_LARGE("largeexplode", 1, -1), + /** + * A particle effect which is displayed by exploding tnt and creepers: + *
    + *
  • It looks like a crowd of gray balls which are fading away + *
  • The speed value has no influence on this particle effect + *
+ */ + EXPLOSION_HUGE("hugeexplosion", 2, -1), + /** + * A particle effect which is displayed by launching fireworks: + *
    + *
  • It looks like a white star which is sparkling + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + FIREWORKS_SPARK("fireworksSpark", 3, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by swimming entities and arrows in water: + *
    + *
  • It looks like a bubble + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + WATER_BUBBLE("bubble", 4, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_WATER), + /** + * A particle effect which is displayed by swimming entities and shaking wolves: + *
    + *
  • It looks like a blue drop + *
  • The speed value has no influence on this particle effect + *
+ */ + WATER_SPLASH("splash", 5, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed on water when fishing: + *
    + *
  • It looks like a blue droplet + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + WATER_WAKE("wake", 6, 7, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by water: + *
    + *
  • It looks like a tiny blue square + *
  • The speed value has no influence on this particle effect + *
+ */ + SUSPENDED("suspended", 7, -1, ParticleProperty.REQUIRES_WATER), + /** + * A particle effect which is displayed by air when close to bedrock and the in the void: + *
    + *
  • It looks like a tiny gray square + *
  • The speed value has no influence on this particle effect + *
+ */ + SUSPENDED_DEPTH("depthSuspend", 8, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed when landing a critical hit and by arrows: + *
    + *
  • It looks like a light brown cross + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + CRIT("crit", 9, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed when landing a hit with an enchanted weapon: + *
    + *
  • It looks like a cyan star + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + CRIT_MAGIC("magicCrit", 10, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by primed tnt, torches, droppers, dispensers, end portals, brewing stands and monster spawners: + *
    + *
  • It looks like a little gray cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + SMOKE_NORMAL("smoke", 11, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by fire, minecarts with furnace and blazes: + *
    + *
  • It looks like a large gray cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + SMOKE_LARGE("largesmoke", 12, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed when splash potions or bottles o' enchanting hit something: + *
    + *
  • It looks like a white swirl + *
  • The speed value causes the particle to only move upwards when set to 0 + *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 + *
+ */ + SPELL("spell", 13, -1), + /** + * A particle effect which is displayed when instant splash potions hit something: + *
    + *
  • It looks like a white cross + *
  • The speed value causes the particle to only move upwards when set to 0 + *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 + *
+ */ + SPELL_INSTANT("instantSpell", 14, -1), + /** + * A particle effect which is displayed by entities with active potion effects: + *
    + *
  • It looks like a colored swirl + *
  • The speed value causes the particle to be colored black when set to 0 + *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed + *
+ */ + SPELL_MOB("mobSpell", 15, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed by entities with active potion effects applied through a beacon: + *
    + *
  • It looks like a transparent colored swirl + *
  • The speed value causes the particle to be always colored black when set to 0 + *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed + *
+ */ + SPELL_MOB_AMBIENT("mobSpellAmbient", 16, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed by witches: + *
    + *
  • It looks like a purple cross + *
  • The speed value causes the particle to only move upwards when set to 0 + *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 + *
+ */ + SPELL_WITCH("witchMagic", 17, -1), + /** + * A particle effect which is displayed by blocks beneath a water source: + *
    + *
  • It looks like a blue drip + *
  • The speed value has no influence on this particle effect + *
+ */ + DRIP_WATER("dripWater", 18, -1), + /** + * A particle effect which is displayed by blocks beneath a lava source: + *
    + *
  • It looks like an orange drip + *
  • The speed value has no influence on this particle effect + *
+ */ + DRIP_LAVA("dripLava", 19, -1), + /** + * A particle effect which is displayed when attacking a villager in a village: + *
    + *
  • It looks like a cracked gray heart + *
  • The speed value has no influence on this particle effect + *
+ */ + VILLAGER_ANGRY("angryVillager", 20, -1), + /** + * A particle effect which is displayed when using bone meal and trading with a villager in a village: + *
    + *
  • It looks like a green star + *
  • The speed value has no influence on this particle effect + *
+ */ + VILLAGER_HAPPY("happyVillager", 21, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by mycelium: + *
    + *
  • It looks like a tiny gray square + *
  • The speed value has no influence on this particle effect + *
+ */ + TOWN_AURA("townaura", 22, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by note blocks: + *
    + *
  • It looks like a colored note + *
  • The speed value causes the particle to be colored green when set to 0 + *
+ */ + NOTE("note", 23, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed by nether portals, endermen, ender pearls, eyes of ender, ender chests and dragon eggs: + *
    + *
  • It looks like a purple cloud + *
  • The speed value influences the spread of this particle effect + *
+ */ + PORTAL("portal", 24, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by enchantment tables which are nearby bookshelves: + *
    + *
  • It looks like a cryptic white letter + *
  • The speed value influences the spread of this particle effect + *
+ */ + ENCHANTMENT_TABLE("enchantmenttable", 25, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by torches, active furnaces, magma cubes and monster spawners: + *
    + *
  • It looks like a tiny flame + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + FLAME("flame", 26, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by lava: + *
    + *
  • It looks like a spark + *
  • The speed value has no influence on this particle effect + *
+ */ + LAVA("lava", 27, -1), + /** + * A particle effect which is currently unused: + *
    + *
  • It looks like a transparent gray square + *
  • The speed value has no influence on this particle effect + *
+ */ + FOOTSTEP("footstep", 28, -1), + /** + * A particle effect which is displayed when a mob dies: + *
    + *
  • It looks like a large white cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + CLOUD("cloud", 29, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by redstone ore, powered redstone, redstone torches and redstone repeaters: + *
    + *
  • It looks like a tiny colored cloud + *
  • The speed value causes the particle to be colored red when set to 0 + *
+ */ + REDSTONE("reddust", 30, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed when snowballs hit a block: + *
    + *
  • It looks like a little piece with the snowball texture + *
  • The speed value has no influence on this particle effect + *
+ */ + SNOWBALL("snowballpoof", 31, -1), + /** + * A particle effect which is currently unused: + *
    + *
  • It looks like a tiny white cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + SNOW_SHOVEL("snowshovel", 32, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by slimes: + *
    + *
  • It looks like a tiny part of the slimeball icon + *
  • The speed value has no influence on this particle effect + *
+ */ + SLIME("slime", 33, -1), + /** + * A particle effect which is displayed when breeding and taming animals: + *
    + *
  • It looks like a red heart + *
  • The speed value has no influence on this particle effect + *
+ */ + HEART("heart", 34, -1), + /** + * A particle effect which is displayed by barriers: + *
    + *
  • It looks like a red box with a slash through it + *
  • The speed value has no influence on this particle effect + *
+ */ + BARRIER("barrier", 35, 8), + /** + * A particle effect which is displayed when breaking a tool or eggs hit a block: + *
    + *
  • It looks like a little piece with an item texture + *
+ */ + ITEM_CRACK("iconcrack", 36, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), + /** + * A particle effect which is displayed when breaking blocks or sprinting: + *
    + *
  • It looks like a little piece with a block texture + *
  • The speed value has no influence on this particle effect + *
+ */ + BLOCK_CRACK("blockcrack", 37, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), + /** + * A particle effect which is displayed when falling: + *
    + *
  • It looks like a little piece with a block texture + *
+ */ + BLOCK_DUST("blockdust", 38, 7, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), + /** + * A particle effect which is displayed when rain hits the ground: + *
    + *
  • It looks like a blue droplet + *
  • The speed value has no influence on this particle effect + *
+ */ + WATER_DROP("droplet", 39, 8), + /** + * A particle effect which is currently unused: + *
    + *
  • It has no visual effect + *
+ */ + ITEM_TAKE("take", 40, 8), + /** + * A particle effect which is displayed by elder guardians: + *
    + *
  • It looks like the shape of the elder guardian + *
  • The speed value has no influence on this particle effect + *
  • The offset values have no influence on this particle effect + *
+ */ + MOB_APPEARANCE("mobappearance", 41, 8); + + private static final Map NAME_MAP = new HashMap(); + private static final Map ID_MAP = new HashMap(); + private final String name; + private final int id; + private final int requiredVersion; + private final List properties; + + // Initialize map for quick name and id lookup + static { + for (ParticleEffects effect : values()) { + NAME_MAP.put(effect.name, effect); + ID_MAP.put(effect.id, effect); } - - /** - * Construct a new particle effect + } + + /** + * Construct a new particle effect + * + * @param name Name of this particle effect + * @param id Id of this particle effect + * @param requiredVersion Version which is required (1.x) + * @param properties Properties of this particle effect + */ + private ParticleEffects(String name, int id, int requiredVersion, ParticleProperty... properties) { + this.name = name; + this.id = id; + this.requiredVersion = requiredVersion; + this.properties = Arrays.asList(properties); + } + + /** + * Returns the name of this particle effect + * + * @return The name + */ + public String getName() { + return name; + } + + /** + * Returns the id of this particle effect + * + * @return The id + */ + public int getId() { + return id; + } + + /** + * Returns the required version for this particle effect (1.x) + * + * @return The required version + */ + public int getRequiredVersion() { + return requiredVersion; + } + + /** + * Determine if this particle effect has a specific property + * + * @return Whether it has the property or not + */ + public boolean hasProperty(ParticleProperty property) { + return properties.contains(property); + } + + /** + * Determine if this particle effect is supported by your current server version + * + * @return Whether the particle effect is supported or not + */ + public boolean isSupported() { + if (requiredVersion == -1) { + return true; + } + return ParticlePacket.getVersion() >= requiredVersion; + } + + /** + * Returns the particle effect with the given name + * + * @param name Name of the particle effect + * @return The particle effect + */ + public static ParticleEffects fromName(String name) { + for (Entry entry : NAME_MAP.entrySet()) { + if (!entry.getKey().equalsIgnoreCase(name)) { + continue; + } + return entry.getValue(); + } + return null; + } + + /** + * Returns the particle effect with the given id + * + * @param id Id of the particle effect + * @return The particle effect + */ + public static ParticleEffects fromId(int id) { + for (Entry entry : ID_MAP.entrySet()) { + if (entry.getKey() != id) { + continue; + } + return entry.getValue(); + } + return null; + } + + /** + * Determine if water is at a certain location + * + * @param location Location to check + * @return Whether water is at this location or not + */ + private static boolean isWater(Location location) { + Material material = location.getBlock().getType(); + return material == Material.WATER || material == Material.STATIONARY_WATER; + } + + /** + * Determine if the distance between @param location and one of the players exceeds 256 + * + * @param location Location to check + * @return Whether the distance exceeds 256 or not + */ + private static boolean isLongDistance(Location location, List players) { + for (Player player : players) { + if (player.getLocation().distanceSquared(location) < 65536) { + continue; + } + return true; + } + return false; + } + + /** + * Determine if the data type for a particle effect is correct + * + * @param effect Particle effect + * @param data Particle data + * @return Whether the data type is correct or not + */ + private static boolean isDataCorrect(ParticleEffects effect, ParticleData data) { + return ((effect == BLOCK_CRACK || effect == BLOCK_DUST) && data instanceof BlockData) || (effect == ITEM_CRACK && data instanceof ItemData); + } + + /** + * Determine if the color type for a particle effect is correct + * + * @param effect Particle effect + * @param color Particle color + * @return Whether the color type is correct or not + */ + private static boolean isColorCorrect(ParticleEffects effect, ParticleColor color) { + return ((effect == SPELL_MOB || effect == SPELL_MOB_AMBIENT || effect == REDSTONE) && color instanceof OrdinaryColor) || (effect == NOTE + && color instanceof NoteColor); + } + + /** + * Displays a particle effect which is only visible for all players within a certain range in the world of @param center + * + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect requires water and none is at the center location + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) throws ParticleVersionException, + ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, null).sendTo(center, range); + } + + /** + * Displays a particle effect which is only visible for the specified players + * + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect requires water and none is at the center location + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) throws ParticleVersionException, + ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), null).sendTo(center, players); + } + + /** + * Displays a particle effect which is only visible for the specified players + * + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect requires water and none is at the center location + * @see #display(float, float, float, float, int, Location, List) + */ + public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) throws ParticleVersionException, + ParticleDataException, IllegalArgumentException { + display(offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); + } + + /** + * Displays a single particle which flies into a determined direction and is only visible for all players within a certain range in the world of @param center + * + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location + * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (!hasProperty(ParticleProperty.DIRECTIONAL)) { + throw new IllegalArgumentException("This particle effect is not directional"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, direction, speed, range > 256, null).sendTo(center, range); + } + + /** + * Displays a single particle which flies into a determined direction and is only visible for the specified players + * + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location + * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException, + IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (!hasProperty(ParticleProperty.DIRECTIONAL)) { + throw new IllegalArgumentException("This particle effect is not directional"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, direction, speed, isLongDistance(center, players), null).sendTo(center, players); + } + + /** + * Displays a single particle which flies into a determined direction and is only visible for the specified players + * + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location + * @see #display(Vector, float, Location, List) + */ + public void display(Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException, + IllegalArgumentException { + display(direction, speed, center, Arrays.asList(players)); + } + + /** + * Displays a single particle which is colored and only visible for all players within a certain range in the world of @param center + * + * @param color Color of the particle + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect + * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(ParticleColor color, Location center, double range) throws ParticleVersionException, ParticleColorException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.COLORABLE)) { + throw new ParticleColorException("This particle effect is not colorable"); + } + if (!isColorCorrect(this, color)) { + throw new ParticleColorException("The particle color type is incorrect"); + } + new ParticlePacket(this, color, range > 256).sendTo(center, range); + } + + /** + * Displays a single particle which is colored and only visible for the specified players + * + * @param color Color of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect + * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(ParticleColor color, Location center, List players) throws ParticleVersionException, ParticleColorException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.COLORABLE)) { + throw new ParticleColorException("This particle effect is not colorable"); + } + if (!isColorCorrect(this, color)) { + throw new ParticleColorException("The particle color type is incorrect"); + } + new ParticlePacket(this, color, isLongDistance(center, players)).sendTo(center, players); + } + + /** + * Displays a single particle which is colored and only visible for the specified players + * + * @param color Color of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect + * @see #display(ParticleColor, Location, List) + */ + public void display(ParticleColor color, Location center, Player... players) throws ParticleVersionException, ParticleColorException { + display(color, center, Arrays.asList(players)); + } + + /** + * Displays a particle effect which requires additional data and is only visible for all players within a certain range in the world of @param center + * + * @param data Data of the effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) + throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, data).sendTo(center, range); + } + + /** + * Displays a particle effect which requires additional data and is only visible for the specified players + * + * @param data Data of the effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) + throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), data).sendTo(center, players); + } + + /** + * Displays a particle effect which requires additional data and is only visible for the specified players + * + * @param data Data of the effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see #display(ParticleData, float, float, float, float, int, Location, List) + */ + public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) + throws ParticleVersionException, ParticleDataException { + display(data, offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); + } + + /** + * Displays a single particle which requires additional data that flies into a determined direction and is only visible for all players within a certain range in the world of @param center + * + * @param data Data of the effect + * @param direction Direction of the particle + * @param speed Display speed of the particles + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(ParticleData data, Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, direction, speed, range > 256, data).sendTo(center, range); + } + + /** + * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players + * + * @param data Data of the effect + * @param direction Direction of the particle + * @param speed Display speed of the particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(ParticleData data, Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, direction, speed, isLongDistance(center, players), data).sendTo(center, players); + } + + /** + * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players + * + * @param data Data of the effect + * @param direction Direction of the particle + * @param speed Display speed of the particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see #display(ParticleData, Vector, float, Location, List) + */ + public void display(ParticleData data, Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException { + display(data, direction, speed, center, Arrays.asList(players)); + } + + /** + * Represents the property of a particle effect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static enum ParticleProperty { + /** + * The particle effect requires water to be displayed + */ + REQUIRES_WATER, + /** + * The particle effect requires block or item data to be displayed + */ + REQUIRES_DATA, + /** + * The particle effect uses the offsets as direction values + */ + DIRECTIONAL, + /** + * The particle effect uses the offsets as color values + */ + COLORABLE; + } + + /** + * Represents the particle data for effects like {@link ParticleEffects#ITEM_CRACK}, {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + public static abstract class ParticleData { + private final Material material; + private final byte data; + private final int[] packetData; + + /** + * Construct a new particle data * - * @param name Name of this particle effect - * @param id Id of this particle effect - * @param requiredVersion Version which is required (1.x) - * @param properties Properties of this particle effect - */ - private ParticleEffects(String name, int id, int requiredVersion, ParticleProperty... properties) { - this.name = name; - this.id = id; - this.requiredVersion = requiredVersion; - this.properties = Arrays.asList(properties); + * @param material Material of the item/block + * @param data Data value of the item/block + */ + @SuppressWarnings("deprecation") + public ParticleData(Material material, byte data) { + this.material = material; + this.data = data; + this.packetData = new int[] { material.getId(), data }; } /** - * Returns the name of this particle effect + * Returns the material of this data * - * @return The name + * @return The material */ - public String getName() { - return name; + public Material getMaterial() { + return material; } /** - * Returns the id of this particle effect + * Returns the data value of this data * - * @return The id + * @return The data value */ - public int getId() { - return id; + public byte getData() { + return data; } /** - * Returns the required version for this particle effect (1.x) + * Returns the data as an int array for packet construction * - * @return The required version + * @return The data for the packet */ - public int getRequiredVersion() { - return requiredVersion; + public int[] getPacketData() { + return packetData; } /** - * Determine if this particle effect has a specific property + * Returns the data as a string for pre 1.8 versions * - * @return Whether it has the property or not + * @return The data string for the packet */ - public boolean hasProperty(ParticleProperty property) { - return properties.contains(property); + public String getPacketDataString() { + return "_" + packetData[0] + "_" + packetData[1]; } - - /** - * Determine if this particle effect is supported by your current server version + } + + /** + * Represents the item data for the {@link ParticleEffects#ITEM_CRACK} effect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + public static final class ItemData extends ParticleData { + /** + * Construct a new item data * - * @return Whether the particle effect is supported or not + * @param material Material of the item + * @param data Data value of the item + * @see ParticleData#ParticleData(Material, byte) */ - public boolean isSupported() { - if (requiredVersion == -1) { - return true; - } - return ParticlePacket.getVersion() >= requiredVersion; + public ItemData(Material material, byte data) { + super(material, data); } - - /** - * Returns the particle effect with the given name + } + + /** + * Represents the block data for the {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} effects + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + public static final class BlockData extends ParticleData { + /** + * Construct a new block data * - * @param name Name of the particle effect - * @return The particle effect - */ - public static ParticleEffects fromName(String name) { - for (Entry entry : NAME_MAP.entrySet()) { - if (!entry.getKey().equalsIgnoreCase(name)) { - continue; - } - return entry.getValue(); - } - return null; + * @param material Material of the block + * @param data Data value of the block + * @throws IllegalArgumentException If the material is not a block + * @see ParticleData#ParticleData(Material, byte) + */ + public BlockData(Material material, byte data) throws IllegalArgumentException { + super(material, data); + if (!material.isBlock()) { + throw new IllegalArgumentException("The material is not a block"); + } } - - /** - * Returns the particle effect with the given id + } + + /** + * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT}, {@link ParticleEffects#REDSTONE} and {@link ParticleEffects#NOTE} + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static abstract class ParticleColor { + /** + * Returns the value for the offsetX field * - * @param id Id of the particle effect - * @return The particle effect + * @return The offsetX value */ - public static ParticleEffects fromId(int id) { - for (Entry entry : ID_MAP.entrySet()) { - if (entry.getKey() != id) { - continue; - } - return entry.getValue(); - } - return null; - } + public abstract float getValueX(); /** - * Determine if water is at a certain location + * Returns the value for the offsetY field * - * @param location Location to check - * @return Whether water is at this location or not + * @return The offsetY value */ - private static boolean isWater(Location location) { - Material material = location.getBlock().getType(); - return material == Material.WATER || material == Material.STATIONARY_WATER; - } + public abstract float getValueY(); /** - * Determine if the distance between @param location and one of the players exceeds 256 + * Returns the value for the offsetZ field * - * @param location Location to check - * @return Whether the distance exceeds 256 or not - */ - private static boolean isLongDistance(Location location, List players) { - for (Player player : players) { - if (player.getLocation().distanceSquared(location) < 65536) { - continue; - } - return true; - } - return false; + * @return The offsetZ value + */ + public abstract float getValueZ(); + } + + /** + * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT} and {@link ParticleEffects#NOTE} + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static final class OrdinaryColor extends ParticleColor { + private final int red; + private final int green; + private final int blue; + + /** + * Construct a new ordinary color + * + * @param red Red value of the RGB format + * @param green Green value of the RGB format + * @param blue Blue value of the RGB format + * @throws IllegalArgumentException If one of the values is lower than 0 or higher than 255 + */ + public OrdinaryColor(int red, int green, int blue) throws IllegalArgumentException { + if (red < 0) { + throw new IllegalArgumentException("The red value is lower than 0"); + } + if (red > 255) { + throw new IllegalArgumentException("The red value is higher than 255"); + } + this.red = red; + if (green < 0) { + throw new IllegalArgumentException("The green value is lower than 0"); + } + if (green > 255) { + throw new IllegalArgumentException("The green value is higher than 255"); + } + this.green = green; + if (blue < 0) { + throw new IllegalArgumentException("The blue value is lower than 0"); + } + if (blue > 255) { + throw new IllegalArgumentException("The blue value is higher than 255"); + } + this.blue = blue; } /** - * Determine if the data type for a particle effect is correct + * Returns the red value of the RGB format * - * @param effect Particle effect - * @param data Particle data - * @return Whether the data type is correct or not + * @return The red value */ - private static boolean isDataCorrect(ParticleEffects effect, ParticleData data) { - return ((effect == BLOCK_CRACK || effect == BLOCK_DUST) && data instanceof BlockData) || (effect == ITEM_CRACK && data instanceof ItemData); + public int getRed() { + return red; } /** - * Determine if the color type for a particle effect is correct + * Returns the green value of the RGB format * - * @param effect Particle effect - * @param color Particle color - * @return Whether the color type is correct or not + * @return The green value */ - private static boolean isColorCorrect(ParticleEffects effect, ParticleColor color) { - return ((effect == SPELL_MOB || effect == SPELL_MOB_AMBIENT || effect == REDSTONE) && color instanceof OrdinaryColor) || (effect == NOTE && color instanceof NoteColor); + public int getGreen() { + return green; } /** - * Displays a particle effect which is only visible for all players within a certain range in the world of @param center + * Returns the blue value of the RGB format * - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect requires water and none is at the center location - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, double) + * @return The blue value */ - public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, null).sendTo(center, range); + public int getBlue() { + return blue; } /** - * Displays a particle effect which is only visible for the specified players + * Returns the red value divided by 255 * - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect requires water and none is at the center location - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, List) + * @return The offsetX value */ - public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), null).sendTo(center, players); + @Override + public float getValueX() { + return red / 255F; } /** - * Displays a particle effect which is only visible for the specified players + * Returns the green value divided by 255 * - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect requires water and none is at the center location - * @see #display(float, float, float, float, int, Location, List) + * @return The offsetY value */ - public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - display(offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); + @Override + public float getValueY() { + return green / 255F; } /** - * Displays a single particle which flies into a determined direction and is only visible for all players within a certain range in the world of @param center + * Returns the blue value divided by 255 * - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location - * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) - * @see ParticlePacket#sendTo(Location, double) + * @return The offsetZ value */ - public void display(Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (!hasProperty(ParticleProperty.DIRECTIONAL)) { - throw new IllegalArgumentException("This particle effect is not directional"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, direction, speed, range > 256, null).sendTo(center, range); + @Override + public float getValueZ() { + return blue / 255F; } + } + + /** + * Represents the color for the {@link ParticleEffects#NOTE} effect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static final class NoteColor extends ParticleColor { + private final int note; /** - * Displays a single particle which flies into a determined direction and is only visible for the specified players + * Construct a new note color * - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location - * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (!hasProperty(ParticleProperty.DIRECTIONAL)) { - throw new IllegalArgumentException("This particle effect is not directional"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, direction, speed, isLongDistance(center, players), null).sendTo(center, players); + * @param note Note id which determines color + * @throws IllegalArgumentException If the note value is lower than 0 or higher than 255 + */ + public NoteColor(int note) throws IllegalArgumentException { + if (note < 0) { + throw new IllegalArgumentException("The note value is lower than 0"); + } + if (note > 24) { + throw new IllegalArgumentException("The note value is higher than 24"); + } + this.note = note; } /** - * Displays a single particle which flies into a determined direction and is only visible for the specified players + * Returns the note value divided by 24 * - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location - * @see #display(Vector, float, Location, List) + * @return The offsetX value */ - public void display(Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - display(direction, speed, center, Arrays.asList(players)); + @Override + public float getValueX() { + return note / 24F; } /** - * Displays a single particle which is colored and only visible for all players within a certain range in the world of @param center + * Returns zero because the offsetY value is unused * - * @param color Color of the particle - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect - * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) - * @see ParticlePacket#sendTo(Location, double) + * @return zero */ - public void display(ParticleColor color, Location center, double range) throws ParticleVersionException, ParticleColorException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.COLORABLE)) { - throw new ParticleColorException("This particle effect is not colorable"); - } - if (!isColorCorrect(this, color)) { - throw new ParticleColorException("The particle color type is incorrect"); - } - new ParticlePacket(this, color, range > 256).sendTo(center, range); + @Override + public float getValueY() { + return 0; } /** - * Displays a single particle which is colored and only visible for the specified players + * Returns zero because the offsetZ value is unused * - * @param color Color of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect - * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) - * @see ParticlePacket#sendTo(Location, List) + * @return zero */ - public void display(ParticleColor color, Location center, List players) throws ParticleVersionException, ParticleColorException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.COLORABLE)) { - throw new ParticleColorException("This particle effect is not colorable"); - } - if (!isColorCorrect(this, color)) { - throw new ParticleColorException("The particle color type is incorrect"); - } - new ParticlePacket(this, color, isLongDistance(center, players)).sendTo(center, players); + @Override + public float getValueZ() { + return 0; } + } + + /** + * Represents a runtime exception that is thrown either if the displayed particle effect requires data and has none or vice-versa or if the data type is incorrect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + private static final class ParticleDataException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + /** - * Displays a single particle which is colored and only visible for the specified players + * Construct a new particle data exception * - * @param color Color of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect - * @see #display(ParticleColor, Location, List) + * @param message Message that will be logged */ - public void display(ParticleColor color, Location center, Player... players) throws ParticleVersionException, ParticleColorException { - display(color, center, Arrays.asList(players)); + public ParticleDataException(String message) { + super(message); } + } + + /** + * Represents a runtime exception that is thrown either if the displayed particle effect is not colorable or if the particle color type is incorrect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + private static final class ParticleColorException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; /** - * Displays a particle effect which requires additional data and is only visible for all players within a certain range in the world of @param center + * Construct a new particle color exception * - * @param data Data of the effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, double) + * @param message Message that will be logged */ - public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, data).sendTo(center, range); + public ParticleColorException(String message) { + super(message); } + } + + /** + * Represents a runtime exception that is thrown if the displayed particle effect requires a newer version + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + private static final class ParticleVersionException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; /** - * Displays a particle effect which requires additional data and is only visible for the specified players + * Construct a new particle version exception * - * @param data Data of the effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, List) + * @param message Message that will be logged */ - public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), data).sendTo(center, players); + public ParticleVersionException(String message) { + super(message); } - - /** - * Displays a particle effect which requires additional data and is only visible for the specified players + } + + /** + * Represents a particle effect packet with all attributes which is used for sending packets to the players + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.5 + */ + public static final class ParticlePacket { + private static int version; + private static Class enumParticle; + private static Constructor packetConstructor; + private static Method getHandle; + private static Field playerConnection; + private static Method sendPacket; + private static boolean initialized; + private final ParticleEffects effect; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final float speed; + private final int amount; + private final boolean longDistance; + private final ParticleData data; + private Object packet; + + /** + * Construct a new particle packet * - * @param data Data of the effect + * @param effect Particle effect * @param offsetX Maximum distance particles can fly away from the center on the x-axis * @param offsetY Maximum distance particles can fly away from the center on the y-axis * @param offsetZ Maximum distance particles can fly away from the center on the z-axis * @param speed Display speed of the particles * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see #display(ParticleData, float, float, float, float, int, Location, List) - */ - public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) throws ParticleVersionException, ParticleDataException { - display(data, offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); - } - - /** - * Displays a single particle which requires additional data that flies into a determined direction and is only visible for all players within a certain range in the world of @param center - * + * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 * @param data Data of the effect - * @param direction Direction of the particle - * @param speed Display speed of the particles - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(ParticleData data, Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, direction, speed, range > 256, data).sendTo(center, range); + * @throws IllegalArgumentException If the speed or amount is lower than 0 + * @see #initialize() + */ + public ParticlePacket(ParticleEffects effect, float offsetX, float offsetY, float offsetZ, float speed, int amount, boolean longDistance, ParticleData data) + throws IllegalArgumentException { + initialize(); + if (speed < 0) { + throw new IllegalArgumentException("The speed is lower than 0"); + } + if (amount < 0) { + throw new IllegalArgumentException("The amount is lower than 0"); + } + this.effect = effect; + this.offsetX = offsetX; + this.offsetY = offsetY; + this.offsetZ = offsetZ; + this.speed = speed; + this.amount = amount; + this.longDistance = longDistance; + this.data = data; } /** - * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players + * Construct a new particle packet of a single particle flying into a determined direction * - * @param data Data of the effect + * @param effect Particle effect * @param direction Direction of the particle - * @param speed Display speed of the particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(ParticleData data, Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, direction, speed, isLongDistance(center, players), data).sendTo(center, players); - } - - /** - * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players - * + * @param speed Display speed of the particle + * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 * @param data Data of the effect - * @param direction Direction of the particle - * @param speed Display speed of the particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see #display(ParticleData, Vector, float, Location, List) + * @throws IllegalArgumentException If the speed is lower than 0 + * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) */ - public void display(ParticleData data, Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException { - display(data, direction, speed, center, Arrays.asList(players)); + public ParticlePacket(ParticleEffects effect, Vector direction, float speed, boolean longDistance, ParticleData data) throws IllegalArgumentException { + this(effect, (float) direction.getX(), (float) direction.getY(), (float) direction.getZ(), speed, 0, longDistance, data); } /** - * Represents the property of a particle effect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions + * Construct a new particle packet of a single colored particle * - * @author DarkBlade12 - * @since 1.7 + * @param effect Particle effect + * @param color Color of the particle + * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 + * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) */ - public static enum ParticleProperty { - /** - * The particle effect requires water to be displayed - */ - REQUIRES_WATER, - /** - * The particle effect requires block or item data to be displayed - */ - REQUIRES_DATA, - /** - * The particle effect uses the offsets as direction values - */ - DIRECTIONAL, - /** - * The particle effect uses the offsets as color values - */ - COLORABLE; + public ParticlePacket(ParticleEffects effect, ParticleColor color, boolean longDistance) { + this(effect, color.getValueX(), color.getValueY(), color.getValueZ(), 1, 0, longDistance, null); } /** - * Represents the particle data for effects like {@link ParticleEffects#ITEM_CRACK}, {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} + * Initializes {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} and sets {@link #initialized} to true if it succeeds *

- * This class is part of the ParticleEffect Library and follows the same usage conditions + * Note: These fields only have to be initialized once, so it will return if {@link #initialized} is already set to true * - * @author DarkBlade12 - * @since 1.6 - */ - public static abstract class ParticleData { - private final Material material; - private final byte data; - private final int[] packetData; - - /** - * Construct a new particle data - * - * @param material Material of the item/block - * @param data Data value of the item/block - */ - @SuppressWarnings("deprecation") - public ParticleData(Material material, byte data) { - this.material = material; - this.data = data; - this.packetData = new int[] { material.getId(), data }; - } - - /** - * Returns the material of this data - * - * @return The material - */ - public Material getMaterial() { - return material; - } - - /** - * Returns the data value of this data - * - * @return The data value - */ - public byte getData() { - return data; - } - - /** - * Returns the data as an int array for packet construction - * - * @return The data for the packet - */ - public int[] getPacketData() { - return packetData; - } - - /** - * Returns the data as a string for pre 1.8 versions - * - * @return The data string for the packet - */ - public String getPacketDataString() { - return "_" + packetData[0] + "_" + packetData[1]; - } + * @throws VersionIncompatibleException if your bukkit version is not supported by this library + */ + public static void initialize() throws VersionIncompatibleException { + if (initialized) { + return; + } + try { + version = Integer.parseInt(Character.toString(ReflectionUtils.PackageType.getServerVersion().charAt(3))); + if (version > 7) { + enumParticle = PackageType.MINECRAFT_SERVER.getClass("EnumParticle"); + } + Class packetClass = PackageType.MINECRAFT_SERVER.getClass(version < 7 ? "Packet63WorldParticles" : "PacketPlayOutWorldParticles"); + packetConstructor = ReflectionUtils.getConstructor(packetClass); + getHandle = ReflectionUtils.getMethod("CraftPlayer", PackageType.CRAFTBUKKIT_ENTITY, "getHandle"); + playerConnection = ReflectionUtils.getField("EntityPlayer", PackageType.MINECRAFT_SERVER, false, "playerConnection"); + sendPacket = ReflectionUtils.getMethod(playerConnection.getType(), "sendPacket", PackageType.MINECRAFT_SERVER.getClass("Packet")); + } catch (Exception exception) { + throw new VersionIncompatibleException("Your current bukkit version seems to be incompatible with this library", exception); + } + initialized = true; } /** - * Represents the item data for the {@link ParticleEffects#ITEM_CRACK} effect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions + * Returns the version of your server (1.x) * - * @author DarkBlade12 - * @since 1.6 + * @return The version number */ - public static final class ItemData extends ParticleData { - /** - * Construct a new item data - * - * @param material Material of the item - * @param data Data value of the item - * @see ParticleData#ParticleData(Material, byte) - */ - public ItemData(Material material, byte data) { - super(material, data); - } + public static int getVersion() { + return version; } /** - * Represents the block data for the {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} effects - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions + * Determine if {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} are initialized * - * @author DarkBlade12 - * @since 1.6 + * @return Whether these fields are initialized or not + * @see #initialize() */ - public static final class BlockData extends ParticleData { - /** - * Construct a new block data - * - * @param material Material of the block - * @param data Data value of the block - * @throws IllegalArgumentException If the material is not a block - * @see ParticleData#ParticleData(Material, byte) - */ - public BlockData(Material material, byte data) throws IllegalArgumentException { - super(material, data); - if (!material.isBlock()) { - throw new IllegalArgumentException("The material is not a block"); - } - } + public static boolean isInitialized() { + return initialized; } /** - * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT}, {@link ParticleEffects#REDSTONE} and {@link ParticleEffects#NOTE} - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions + * Initializes {@link #packet} with all set values * - * @author DarkBlade12 - * @since 1.7 - */ - public static abstract class ParticleColor { - /** - * Returns the value for the offsetX field - * - * @return The offsetX value - */ - public abstract float getValueX(); - - /** - * Returns the value for the offsetY field - * - * @return The offsetY value - */ - public abstract float getValueY(); - - /** - * Returns the value for the offsetZ field - * - * @return The offsetZ value - */ - public abstract float getValueZ(); + * @param center Center location of the effect + * @throws PacketInstantiationException If instantion fails due to an unknown error + */ + private void initializePacket(Location center) throws PacketInstantiationException { + if (packet != null) { + return; + } + try { + packet = packetConstructor.newInstance(); + if (version < 8) { + String name = effect.getName(); + if (data != null) { + name += data.getPacketDataString(); + } + ReflectionUtils.setValue(packet, true, "a", name); + } else { + ReflectionUtils.setValue(packet, true, "a", enumParticle.getEnumConstants()[effect.getId()]); + ReflectionUtils.setValue(packet, true, "j", longDistance); + if (data != null) { + ReflectionUtils.setValue(packet, true, "k", data.getPacketData()); + } + } + ReflectionUtils.setValue(packet, true, "b", (float) center.getX()); + ReflectionUtils.setValue(packet, true, "c", (float) center.getY()); + ReflectionUtils.setValue(packet, true, "d", (float) center.getZ()); + ReflectionUtils.setValue(packet, true, "e", offsetX); + ReflectionUtils.setValue(packet, true, "f", offsetY); + ReflectionUtils.setValue(packet, true, "g", offsetZ); + ReflectionUtils.setValue(packet, true, "h", speed); + ReflectionUtils.setValue(packet, true, "i", amount); + } catch (Exception exception) { + throw new PacketInstantiationException("Packet instantiation failed", exception); + } } /** - * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT} and {@link ParticleEffects#NOTE} - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions + * Sends the packet to a single player and caches it * - * @author DarkBlade12 - * @since 1.7 - */ - public static final class OrdinaryColor extends ParticleColor { - private final int red; - private final int green; - private final int blue; - - /** - * Construct a new ordinary color - * - * @param red Red value of the RGB format - * @param green Green value of the RGB format - * @param blue Blue value of the RGB format - * @throws IllegalArgumentException If one of the values is lower than 0 or higher than 255 - */ - public OrdinaryColor(int red, int green, int blue) throws IllegalArgumentException { - if (red < 0) { - throw new IllegalArgumentException("The red value is lower than 0"); - } - if (red > 255) { - throw new IllegalArgumentException("The red value is higher than 255"); - } - this.red = red; - if (green < 0) { - throw new IllegalArgumentException("The green value is lower than 0"); - } - if (green > 255) { - throw new IllegalArgumentException("The green value is higher than 255"); - } - this.green = green; - if (blue < 0) { - throw new IllegalArgumentException("The blue value is lower than 0"); - } - if (blue > 255) { - throw new IllegalArgumentException("The blue value is higher than 255"); - } - this.blue = blue; - } - - /** - * Returns the red value of the RGB format - * - * @return The red value - */ - public int getRed() { - return red; - } - - /** - * Returns the green value of the RGB format - * - * @return The green value - */ - public int getGreen() { - return green; - } - - /** - * Returns the blue value of the RGB format - * - * @return The blue value - */ - public int getBlue() { - return blue; - } - - /** - * Returns the red value divided by 255 - * - * @return The offsetX value - */ - @Override - public float getValueX() { - return red / 255F; - } - - /** - * Returns the green value divided by 255 - * - * @return The offsetY value - */ - @Override - public float getValueY() { - return green / 255F; - } - - /** - * Returns the blue value divided by 255 - * - * @return The offsetZ value - */ - @Override - public float getValueZ() { - return blue / 255F; - } + * @param center Center location of the effect + * @param player Receiver of the packet + * @throws PacketInstantiationException If instantion fails due to an unknown error + * @throws PacketSendingException If sending fails due to an unknown error + * @see #initializePacket(Location) + */ + public void sendTo(Location center, Player player) throws PacketInstantiationException, PacketSendingException { + initializePacket(center); + try { + sendPacket.invoke(playerConnection.get(getHandle.invoke(player)), packet); + } catch (Exception exception) { + throw new PacketSendingException("Failed to send the packet to player '" + player.getName() + "'", exception); + } } /** - * Represents the color for the {@link ParticleEffects#NOTE} effect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions + * Sends the packet to all players in the list * - * @author DarkBlade12 - * @since 1.7 - */ - public static final class NoteColor extends ParticleColor { - private final int note; - - /** - * Construct a new note color - * - * @param note Note id which determines color - * @throws IllegalArgumentException If the note value is lower than 0 or higher than 255 - */ - public NoteColor(int note) throws IllegalArgumentException { - if (note < 0) { - throw new IllegalArgumentException("The note value is lower than 0"); - } - if (note > 24) { - throw new IllegalArgumentException("The note value is higher than 24"); - } - this.note = note; - } - - /** - * Returns the note value divided by 24 - * - * @return The offsetX value - */ - @Override - public float getValueX() { - return note / 24F; - } - - /** - * Returns zero because the offsetY value is unused - * - * @return zero - */ - @Override - public float getValueY() { - return 0; - } - - /** - * Returns zero because the offsetZ value is unused - * - * @return zero - */ - @Override - public float getValueZ() { - return 0; - } - + * @param center Center location of the effect + * @param players Receivers of the packet + * @throws IllegalArgumentException If the player list is empty + * @see #sendTo(Location center, Player player) + */ + public void sendTo(Location center, List players) throws IllegalArgumentException { + if (players.isEmpty()) { + throw new IllegalArgumentException("The player list is empty"); + } + for (Player player : players) { + sendTo(center, player); + } } /** - * Represents a runtime exception that is thrown either if the displayed particle effect requires data and has none or vice-versa or if the data type is incorrect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions + * Sends the packet to all players in a certain range * - * @author DarkBlade12 - * @since 1.6 - */ - private static final class ParticleDataException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new particle data exception - * - * @param message Message that will be logged - */ - public ParticleDataException(String message) { - super(message); - } + * @param center Center location of the effect + * @param range Range in which players will receive the packet (Maximum range for particles is usually 16, but it can differ for some types) + * @throws IllegalArgumentException If the range is lower than 1 + * @see #sendTo(Location center, Player player) + */ + public void sendTo(Location center, double range) throws IllegalArgumentException { + if (range < 1) { + throw new IllegalArgumentException("The range is lower than 1"); + } + String worldName = center.getWorld().getName(); + double squared = range * range; + for (Player player : Bukkit.getOnlinePlayers()) { + if (!player.getWorld().getName().equals(worldName) || player.getLocation().distanceSquared(center) > squared) { + continue; + } + sendTo(center, player); + } } /** - * Represents a runtime exception that is thrown either if the displayed particle effect is not colorable or if the particle color type is incorrect + * Represents a runtime exception that is thrown if a bukkit version is not compatible with this library *

* This class is part of the ParticleEffect Library and follows the same usage conditions * * @author DarkBlade12 - * @since 1.7 + * @since 1.5 */ - private static final class ParticleColorException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new particle color exception - * - * @param message Message that will be logged - */ - public ParticleColorException(String message) { - super(message); - } + private static final class VersionIncompatibleException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new version incompatible exception + * + * @param message Message that will be logged + * @param cause Cause of the exception + */ + public VersionIncompatibleException(String message, Throwable cause) { + super(message, cause); + } } /** - * Represents a runtime exception that is thrown if the displayed particle effect requires a newer version + * Represents a runtime exception that is thrown if packet instantiation fails *

* This class is part of the ParticleEffect Library and follows the same usage conditions * * @author DarkBlade12 - * @since 1.6 - */ - private static final class ParticleVersionException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new particle version exception - * - * @param message Message that will be logged - */ - public ParticleVersionException(String message) { - super(message); - } + * @since 1.4 + */ + private static final class PacketInstantiationException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new packet instantiation exception + * + * @param message Message that will be logged + * @param cause Cause of the exception + */ + public PacketInstantiationException(String message, Throwable cause) { + super(message, cause); + } } /** - * Represents a particle effect packet with all attributes which is used for sending packets to the players + * Represents a runtime exception that is thrown if packet sending fails *

* This class is part of the ParticleEffect Library and follows the same usage conditions * * @author DarkBlade12 - * @since 1.5 - */ - public static final class ParticlePacket { - private static int version; - private static Class enumParticle; - private static Constructor packetConstructor; - private static Method getHandle; - private static Field playerConnection; - private static Method sendPacket; - private static boolean initialized; - private final ParticleEffects effect; - private final float offsetX; - private final float offsetY; - private final float offsetZ; - private final float speed; - private final int amount; - private final boolean longDistance; - private final ParticleData data; - private Object packet; - - /** - * Construct a new particle packet - * - * @param effect Particle effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 - * @param data Data of the effect - * @throws IllegalArgumentException If the speed or amount is lower than 0 - * @see #initialize() - */ - public ParticlePacket(ParticleEffects effect, float offsetX, float offsetY, float offsetZ, float speed, int amount, boolean longDistance, ParticleData data) throws IllegalArgumentException { - initialize(); - if (speed < 0) { - throw new IllegalArgumentException("The speed is lower than 0"); - } - if (amount < 0) { - throw new IllegalArgumentException("The amount is lower than 0"); - } - this.effect = effect; - this.offsetX = offsetX; - this.offsetY = offsetY; - this.offsetZ = offsetZ; - this.speed = speed; - this.amount = amount; - this.longDistance = longDistance; - this.data = data; - } - - /** - * Construct a new particle packet of a single particle flying into a determined direction - * - * @param effect Particle effect - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 - * @param data Data of the effect - * @throws IllegalArgumentException If the speed is lower than 0 - * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) - */ - public ParticlePacket(ParticleEffects effect, Vector direction, float speed, boolean longDistance, ParticleData data) throws IllegalArgumentException { - this(effect, (float) direction.getX(), (float) direction.getY(), (float) direction.getZ(), speed, 0, longDistance, data); - } - - /** - * Construct a new particle packet of a single colored particle - * - * @param effect Particle effect - * @param color Color of the particle - * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 - * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) - */ - public ParticlePacket(ParticleEffects effect, ParticleColor color, boolean longDistance) { - this(effect, color.getValueX(), color.getValueY(), color.getValueZ(), 1, 0, longDistance, null); - } - - /** - * Initializes {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} and sets {@link #initialized} to true if it succeeds - *

- * Note: These fields only have to be initialized once, so it will return if {@link #initialized} is already set to true - * - * @throws VersionIncompatibleException if your bukkit version is not supported by this library - */ - public static void initialize() throws VersionIncompatibleException { - if (initialized) { - return; - } - try { - version = Residence.getVersionChecker().GetVersion(); - if (version > 1700) { - enumParticle = PackageType.MINECRAFT_SERVER.getClass("EnumParticle"); - } - Class packetClass = PackageType.MINECRAFT_SERVER.getClass(version < 7 ? "Packet63WorldParticles" : "PacketPlayOutWorldParticles"); - packetConstructor = ReflectionUtils.getConstructor(packetClass); - getHandle = ReflectionUtils.getMethod("CraftPlayer", PackageType.CRAFTBUKKIT_ENTITY, "getHandle"); - playerConnection = ReflectionUtils.getField("EntityPlayer", PackageType.MINECRAFT_SERVER, false, "playerConnection"); - sendPacket = ReflectionUtils.getMethod(playerConnection.getType(), "sendPacket", PackageType.MINECRAFT_SERVER.getClass("Packet")); - } catch (Exception exception) { - throw new VersionIncompatibleException("Your current bukkit version seems to be incompatible with this library", exception); - } - initialized = true; - } - - /** - * Returns the version of your server (1.x) - * - * @return The version number - */ - public static int getVersion() { - return version; - } - - /** - * Determine if {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} are initialized - * - * @return Whether these fields are initialized or not - * @see #initialize() - */ - public static boolean isInitialized() { - return initialized; - } - - /** - * Initializes {@link #packet} with all set values - * - * @param center Center location of the effect - * @throws PacketInstantiationException If instantion fails due to an unknown error - */ - private void initializePacket(Location center) throws PacketInstantiationException { - if (packet != null) { - return; - } - try { - packet = packetConstructor.newInstance(); - if (version < 8) { - String name = effect.getName(); - if (data != null) { - name += data.getPacketDataString(); - } - ReflectionUtils.setValue(packet, true, "a", name); - } else { - ReflectionUtils.setValue(packet, true, "a", enumParticle.getEnumConstants()[effect.getId()]); - ReflectionUtils.setValue(packet, true, "j", longDistance); - if (data != null) { - ReflectionUtils.setValue(packet, true, "k", data.getPacketData()); - } - } - ReflectionUtils.setValue(packet, true, "b", (float) center.getX()); - ReflectionUtils.setValue(packet, true, "c", (float) center.getY()); - ReflectionUtils.setValue(packet, true, "d", (float) center.getZ()); - ReflectionUtils.setValue(packet, true, "e", offsetX); - ReflectionUtils.setValue(packet, true, "f", offsetY); - ReflectionUtils.setValue(packet, true, "g", offsetZ); - ReflectionUtils.setValue(packet, true, "h", speed); - ReflectionUtils.setValue(packet, true, "i", amount); - } catch (Exception exception) { - throw new PacketInstantiationException("Packet instantiation failed", exception); - } - } - - /** - * Sends the packet to a single player and caches it - * - * @param center Center location of the effect - * @param player Receiver of the packet - * @throws PacketInstantiationException If instantion fails due to an unknown error - * @throws PacketSendingException If sending fails due to an unknown error - * @see #initializePacket(Location) - */ - public void sendTo(Location center, Player player) throws PacketInstantiationException, PacketSendingException { - initializePacket(center); - try { - sendPacket.invoke(playerConnection.get(getHandle.invoke(player)), packet); - } catch (Exception exception) { - throw new PacketSendingException("Failed to send the packet to player '" + player.getName() + "'", exception); - } - } - - /** - * Sends the packet to all players in the list - * - * @param center Center location of the effect - * @param players Receivers of the packet - * @throws IllegalArgumentException If the player list is empty - * @see #sendTo(Location center, Player player) - */ - public void sendTo(Location center, List players) throws IllegalArgumentException { - if (players.isEmpty()) { - throw new IllegalArgumentException("The player list is empty"); - } - for (Player player : players) { - sendTo(center, player); - } - } - - /** - * Sends the packet to all players in a certain range - * - * @param center Center location of the effect - * @param range Range in which players will receive the packet (Maximum range for particles is usually 16, but it can differ for some types) - * @throws IllegalArgumentException If the range is lower than 1 - * @see #sendTo(Location center, Player player) - */ - public void sendTo(Location center, double range) throws IllegalArgumentException { - if (range < 1) { - throw new IllegalArgumentException("The range is lower than 1"); - } - String worldName = center.getWorld().getName(); - double squared = range * range; - for (Player player : Bukkit.getOnlinePlayers()) { - if (!player.getWorld().getName().equals(worldName) || player.getLocation().distanceSquared(center) > squared) { - continue; - } - sendTo(center, player); - } - } - - /** - * Represents a runtime exception that is thrown if a bukkit version is not compatible with this library - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.5 - */ - private static final class VersionIncompatibleException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new version incompatible exception - * - * @param message Message that will be logged - * @param cause Cause of the exception - */ - public VersionIncompatibleException(String message, Throwable cause) { - super(message, cause); - } - } - - /** - * Represents a runtime exception that is thrown if packet instantiation fails - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.4 - */ - private static final class PacketInstantiationException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new packet instantiation exception - * - * @param message Message that will be logged - * @param cause Cause of the exception - */ - public PacketInstantiationException(String message, Throwable cause) { - super(message, cause); - } - } - - /** - * Represents a runtime exception that is thrown if packet sending fails - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.4 - */ - private static final class PacketSendingException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new packet sending exception - * - * @param message Message that will be logged - * @param cause Cause of the exception - */ - public PacketSendingException(String message, Throwable cause) { - super(message, cause); - } - } + * @since 1.4 + */ + private static final class PacketSendingException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new packet sending exception + * + * @param message Message that will be logged + * @param cause Cause of the exception + */ + public PacketSendingException(String message, Throwable cause) { + super(message, cause); + } } + } } \ No newline at end of file diff --git a/src/plugin.yml b/src/plugin.yml index f5339bf2a..3dc2d392f 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.4.0.7 +version: 4.4.1.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 3fcdbfeb15a57209aea57bb394b6e9b113c5da04 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 11 Jul 2016 12:41:04 +0300 Subject: [PATCH 0201/1142] update player name properly don't change ptime if there is no time flag in residence --- .../residence/containers/ResidencePlayer.java | 18 ++++++++++++++++-- .../listeners/ResidencePlayerListener.java | 5 +++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 526c2ad62..e91535a13 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -33,13 +33,13 @@ public class ResidencePlayer { public ResidencePlayer(Player player) { this.player = player; - this.userName = player.getName(); + updateName(); RecalculatePermissions(); } public ResidencePlayer(OfflinePlayer player) { this.ofPlayer = player; - this.userName = player.getName(); + updateName(); RecalculatePermissions(); } @@ -167,6 +167,7 @@ public PermissionGroup getGroup() { } public void recountRes() { + updateName(); if (this.userName != null) { ResidenceManager m = Residence.getResidenceManager(); this.ResidenceList = m.getResidenceMapList(this.userName, true); @@ -174,6 +175,19 @@ public void recountRes() { recountResAmount(); } + private void updateName() { + if (this.userName != null) + return; + if (player != null) { + this.userName = player.getName(); + return; + } + if (ofPlayer != null) { + this.userName = ofPlayer.getName(); + return; + } + } + public void recountResAmount() { this.currentRes = this.ResidenceList.size(); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b4db79a6e..f46604b7f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -61,6 +61,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.utils.GetTime; @@ -1459,10 +1460,10 @@ public void run() { ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); Residence.getServ().getPluginManager().callEvent(chgEvent); - if (ResOld.getPermissions().has("night", true) || ResOld.getPermissions().has("day", true)) + if (ResOld.getPermissions().has("night", FlagCombo.OnlyTrue) || ResOld.getPermissions().has("day", FlagCombo.OnlyTrue)) player.resetPlayerTime(); - if (ResOld.getPermissions().has("sun", true) || ResOld.getPermissions().has("rain", true)) + if (ResOld.getPermissions().has("sun", FlagCombo.OnlyTrue) || ResOld.getPermissions().has("rain", FlagCombo.OnlyTrue)) player.resetPlayerWeather(); if (leave != null && !leave.equals("")) { From efaf76447a8f8ed2e174b8a733e0093841c9fcce Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 12 Jul 2016 17:05:17 +0300 Subject: [PATCH 0202/1142] Fixes to avoid some posible issues by getting residence owner --- src/com/bekvon/bukkit/residence/Residence.java | 7 ++++++- .../residence/containers/ResidencePlayer.java | 13 ++++++------- .../bukkit/residence/protection/PlayerManager.java | 2 +- src/com/residence/zip/ZipLibrary.java | 6 +++--- src/plugin.yml | 2 +- 5 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index feaff029c..d16322e2a 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -155,6 +155,8 @@ public class Residence extends JavaPlugin { protected static AutoSelection AutoSelectionManager; protected static SchematicsManager SchematicManager; + protected static ZipLibrary zip; + protected boolean firstenable = true; protected static EconomyInterface economy; private static int saveVersion = 1; @@ -349,7 +351,8 @@ public void onDisable() { if (initsuccess) { try { saveYml(); - ZipLibrary.backup(); + if (zip != null) + zip.backup(); } catch (Exception ex) { Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); } @@ -477,6 +480,8 @@ public void onEnable() { ShopSignUtilManager = new ShopSignUtil(this); RandomTpManager = new RandomTp(this); + zip = new ZipLibrary(); + versionChecker = new VersionChecker(this); Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index e91535a13..d37dd0bf1 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -37,14 +37,11 @@ public ResidencePlayer(Player player) { RecalculatePermissions(); } - public ResidencePlayer(OfflinePlayer player) { - this.ofPlayer = player; - updateName(); - RecalculatePermissions(); - } - public ResidencePlayer(String userName) { this.userName = userName; + ofPlayer = Residence.getOfflinePlayer(userName); + if (ofPlayer != null) + this.userName = ofPlayer.getName(); RecalculatePermissions(); } @@ -82,9 +79,11 @@ public ClaimedResidence getMainResidence() { } public void RecalculatePermissions() { - this.player = Bukkit.getPlayerExact(userName); if (this.player == null) + this.player = Bukkit.getPlayerExact(userName); + + if (this.player == null && ofPlayer == null) ofPlayer = Residence.getOfflinePlayer(userName); recountMaxRes(); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 8f48c2799..71d013234 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -21,7 +21,7 @@ public PlayerManager(Residence plugin) { this.plugin = plugin; } - public void playerJoin(OfflinePlayer player) { + public void playerJoin(Player player) { ResidencePlayer resPlayer = players.get(player.getName().toLowerCase()); if (resPlayer == null) { resPlayer = new ResidencePlayer(player); diff --git a/src/com/residence/zip/ZipLibrary.java b/src/com/residence/zip/ZipLibrary.java index 137fa9aec..bd3940ff1 100644 --- a/src/com/residence/zip/ZipLibrary.java +++ b/src/com/residence/zip/ZipLibrary.java @@ -17,9 +17,9 @@ import com.bekvon.bukkit.residence.Residence; public class ZipLibrary { - private static File BackupDir = new File(Residence.getDataLocation(), "Backup"); + private File BackupDir = new File(Residence.getDataLocation(), "Backup"); - private static void cleanFiles() { + private void cleanFiles() { int x = Residence.getConfigManager().BackupAutoCleanUpDays() * 60 * 1000 * 24 * 60; Long time = System.currentTimeMillis(); for (File file : BackupDir.listFiles()) { @@ -30,7 +30,7 @@ private static void cleanFiles() { } } - public static void backup() throws IOException { + public void backup() throws IOException { try { BackupDir.mkdir(); } catch (Exception e) { diff --git a/src/plugin.yml b/src/plugin.yml index 3dc2d392f..02f2a8b9c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.4.1.0 +version: 4.4.1.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From db8064e2bcef6a87195a3b7f9fc2e35bd428748a Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 12 Jul 2016 17:11:03 +0300 Subject: [PATCH 0203/1142] Check rent autopay state after money check --- .../bukkit/residence/economy/rent/RentManager.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index fb6f7c8e7..79fd3ca2b 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -225,16 +225,17 @@ public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean r RentableLand land = res.getRentable(); - if (!land.AllowAutoPay && AutoPay) { - player.sendMessage(Residence.getLM().getMessage("Residence.CantAutoPay")); - AutoPay = false; - } - if (Residence.getEconomyManager().canAfford(player.getName(), land.cost)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); Residence.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) return; + + if (!land.AllowAutoPay && AutoPay) { + player.sendMessage(Residence.getLM().getMessage("Residence.CantAutoPay")); + AutoPay = false; + } + if (Residence.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { RentedLand newrent = new RentedLand(); newrent.player = player.getName(); From fdbaa9a0ed464bbabf04b39c277163833c4d75be Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 12 Jul 2016 17:53:29 +0300 Subject: [PATCH 0204/1142] Check owner ignoring case if only name is given Don't check pvp if entity is not player --- .../residence/containers/ResidencePlayer.java | 3 +- .../listeners/ResidenceEntityListener.java | 70 ++++++++++--------- .../protection/ClaimedResidence.java | 6 +- 3 files changed, 41 insertions(+), 38 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index d37dd0bf1..861784c33 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -154,8 +154,7 @@ public int getMaxSubzones() { } public PermissionGroup getGroup() { - Player player = Bukkit.getPlayer(userName); - if (player != null) { + if (this.player != null) { String gp = Residence.getPermissionManager().getGroupNameByPlayer(player.getName(), player.getWorld().getName()); this.group = Residence.getPermissionManager().getGroupByName(gp); } else { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index d5b5e2db9..97c57128d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -368,16 +368,16 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { } switch (event.getSpawnReason()) { case BUILD_WITHER: - break; + break; case BUILD_IRONGOLEM: case BUILD_SNOWMAN: case CUSTOM: case DEFAULT: - if (!perms.has("canimals", true)) { - event.setCancelled(true); - return; - } - break; + if (!perms.has("canimals", true)) { + event.setCancelled(true); + return; + } + break; case BREEDING: case CHUNK_GEN: case CURED: @@ -390,20 +390,20 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case NETHER_PORTAL: case OCELOT_BABY: case NATURAL: - if (!perms.has("nanimals", true)) { - event.setCancelled(true); - return; - } - break; + if (!perms.has("nanimals", true)) { + event.setCancelled(true); + return; + } + break; case SPAWNER_EGG: case SPAWNER: - if (!perms.has("sanimals", true)) { - event.setCancelled(true); - return; - } - break; + if (!perms.has("sanimals", true)) { + event.setCancelled(true); + return; + } + break; default: - break; + break; } } else if (isMonster(ent)) { if (!perms.has("monsters", true)) { @@ -414,11 +414,11 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case BUILD_WITHER: case CUSTOM: case DEFAULT: - if (!perms.has("cmonsters", true)) { - event.setCancelled(true); - return; - } - break; + if (!perms.has("cmonsters", true)) { + event.setCancelled(true); + return; + } + break; case CHUNK_GEN: case CURED: case DISPENSE_EGG: @@ -430,20 +430,20 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case SLIME_SPLIT: case LIGHTNING: case NATURAL: - if (!perms.has("nmonsters", true)) { - event.setCancelled(true); - return; - } - break; + if (!perms.has("nmonsters", true)) { + event.setCancelled(true); + return; + } + break; case SPAWNER_EGG: case SPAWNER: - if (!perms.has("smonsters", true)) { - event.setCancelled(true); - return; - } - break; + if (!perms.has("smonsters", true)) { + event.setCancelled(true); + return; + } + break; default: - break; + break; } } } @@ -936,6 +936,10 @@ public void onEntityDamage(EntityDamageEvent event) { } attacker = (Player) ((Projectile) damager).getShooter(); } + + if (!(ent instanceof Player)) + return; + if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { if (attacker != null) attacker.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 41ba0228b..ab62a9e58 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1457,18 +1457,18 @@ public String getOwner() { } public boolean isOwner(String name) { - return perms.getOwner().equals(name); + return perms.getOwner().equalsIgnoreCase(name); } public boolean isOwner(Player p) { if (Residence.getConfigManager().isOfflineMode()) - return isOwner(p.getName()); + return perms.getOwner().equals(p.getName()); return perms.getOwnerUUID().equals(p.getUniqueId()); } public boolean isOwner(CommandSender sender) { if (Residence.getConfigManager().isOfflineMode()) - return isOwner(sender.getName()); + return perms.getOwner().equals(sender.getName()); if (sender instanceof Player) return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); return true; From 14533e2942f2d1a6bd22d22e46878f0f6f684102 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 12 Jul 2016 17:57:27 +0300 Subject: [PATCH 0205/1142] Fix for misspell in locale file for mirror command --- src/com/bekvon/bukkit/residence/LocaleManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index ff19750d9..e0f35fa36 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -1421,7 +1421,7 @@ public void LoadLang(String lang) { c.get("CommandHelp.SubCommands.res.SubCommands.mirror.Args", "[residence] [residence]"); c.get("CommandHelp.SubCommands.res.SubCommands.market.Description", "Buy, Sell, or Rent Residences"); - c.get("CommandHelp.SubCommands.res.SubCommands.mirror.Info", + c.get("CommandHelp.SubCommands.res.SubCommands.market.Info", Arrays.asList("&eUsage: &6/res market ? for more Info")); c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Description", "Get economy Info on residence"); From 16490d2bd07a0d3a8629ead600dc3b5c2a95daf1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 14 Jul 2016 18:28:10 +0300 Subject: [PATCH 0206/1142] Get players limits from one place where all data is up to date --- .../bekvon/bukkit/residence/Residence.java | 12 ++- .../bukkit/residence/commands/kick.java | 6 +- .../bukkit/residence/commands/limits.java | 4 +- .../bukkit/residence/commands/select.java | 8 +- .../bukkit/residence/commands/unstuck.java | 4 +- .../residence/containers/PlayerGroup.java | 8 +- .../residence/containers/ResidencePlayer.java | 32 +++++-- .../residence/economy/TransactionManager.java | 10 +- .../residence/economy/rent/RentManager.java | 11 ++- .../residence/itemlist/ResidenceItemList.java | 5 +- .../listeners/ResidencePlayerListener.java | 19 ++-- .../permissions/PermissionGroup.java | 83 ++++++++-------- .../permissions/PermissionManager.java | 44 +++++---- .../protection/ClaimedResidence.java | 26 +++-- .../residence/protection/LeaseManager.java | 25 +++-- .../residence/protection/PlayerManager.java | 17 +--- .../protection/ResidenceManager.java | 38 ++++---- .../protection/ResidencePermissions.java | 53 ++++++----- .../residence/selection/AutoSelection.java | 4 +- .../residence/selection/SelectionManager.java | 95 ++++++++++--------- src/plugin.yml | 2 +- 21 files changed, 291 insertions(+), 215 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index d16322e2a..ac72b808e 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -476,7 +476,7 @@ public void onEnable() { LocaleManager = new LocaleManager(this); - PlayerManager = new PlayerManager(this); + PlayerManager = new PlayerManager(); ShopSignUtilManager = new ShopSignUtil(this); RandomTpManager = new RandomTp(this); @@ -1583,4 +1583,14 @@ public static boolean isDisabledWorldCommand(String worldname) { return false; } + public static void msg(Player player, String path, Object... variables) { + if (player != null) + player.sendMessage(Residence.getLM().getMessage(path, variables)); + } + + public static void msg(CommandSender sender, String path, Object... variables) { + if (sender != null) + sender.sendMessage(Residence.getLM().getMessage(path, variables)); + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 2ba99b32e..d603620a8 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -8,6 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -28,7 +29,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command player.sendMessage(Residence.getLM().getMessage("General.NotOnline")); return true; } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); if (!group.hasKickAccess() && !resadmin) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 9e146dc61..40a642279 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; public class limits implements cmd { @@ -30,7 +31,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getPermissionManager().updateGroupNameForPlayer(target.getName(), target.isOnline() ? target.getPlayer().getLocation().getWorld().getName() : Residence .getConfigManager().getDefaultWorld(), true); - Residence.getPermissionManager().getGroup(target.getName(), Residence.getConfigManager().getDefaultWorld()).printLimits(sender, target, rsadm); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(target.getName()); + rPlayer.getGroup().printLimits(sender, target, rsadm); return true; } } diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index e18d04441..4f6ab0035 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -23,12 +24,15 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; Player player = (Player) sender; - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); if (!group.selectCommandAccess() && !resadmin) { player.sendMessage(Residence.getLM().getMessage("Select.Disabled")); return true; } - if (!group.canCreateResidences() && group.getMaxSubzoneDepth(player.getName()) <= 0 && !resadmin) { + if (!group.canCreateResidences() && rPlayer.getMaxSubzones() <= 0 && !resadmin) { player.sendMessage(Residence.getLM().getMessage("Select.Disabled")); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index dc52e9559..c44cf392d 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -6,6 +6,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -21,7 +22,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length != 1) return false; - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); if (!group.hasUnstuckAccess()) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return true; diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index a6b4bf9bf..727b98fab 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -8,9 +8,6 @@ import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; - import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; @@ -79,7 +76,7 @@ public void updateGroup(String world, boolean force) { finalGroup = posibleGroups.get(0); for (int i = 0; i < posibleGroups.size(); i++) { - if (finalGroup == null){ + if (finalGroup == null) { finalGroup = posibleGroups.get(i); continue; } @@ -99,8 +96,7 @@ private PermissionGroup getPermissionGroup() { PermissionGroup group = null; for (Entry one : Residence.getPermissionManager().getGroups().entrySet()) { if (player != null) { - Permission p = new Permission("residence.group." + one.getKey(), PermissionDefault.FALSE); - if (this.player.hasPermission(p)) + if (this.player.hasPermission("residence.group." + one.getKey())) group = one.getValue(); } else { OfflinePlayer offlineP = Residence.getOfflinePlayer(playerName); diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 861784c33..885dcc397 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -102,6 +102,10 @@ public void recountMaxRes() { this.maxRes = i; } } + + int m = this.getGroup().getMaxZones(); + if (this.maxRes < m) + this.maxRes = m; } public void recountMaxRents() { @@ -115,6 +119,10 @@ public void recountMaxRents() { this.maxRents = i; } } + + int m = this.getGroup().getMaxRents(); + if (this.maxRents < m) + this.maxRents = m; } public void recountMaxSubzones() { @@ -128,6 +136,10 @@ public void recountMaxSubzones() { this.maxSubzones = i; } } + + int m = this.getGroup().getMaxSubzoneDepth(); + if (this.maxSubzones < m) + this.maxSubzones = m; } public int getMaxRes() { @@ -135,7 +147,7 @@ public int getMaxRes() { if (this.player != null) { Residence.getPermissionManager().updateGroupNameForPlayer(this.player.getName(), this.player.isOnline() ? this.player.getPlayer().getLocation().getWorld() .getName() : Residence.getConfigManager().getDefaultWorld(), true); - PermissionGroup g = Residence.getPermissionManager().getGroup(this.player); + PermissionGroup g = getGroup(); if (this.maxRes < g.getMaxZones()) return g.getMaxZones(); } @@ -154,13 +166,15 @@ public int getMaxSubzones() { } public PermissionGroup getGroup() { - if (this.player != null) { - String gp = Residence.getPermissionManager().getGroupNameByPlayer(player.getName(), player.getWorld().getName()); - this.group = Residence.getPermissionManager().getGroupByName(gp); - } else { - String gp = Residence.getPermissionManager().getGroupNameByPlayer(userName, Residence.getConfigManager().getDefaultWorld()); - this.group = Residence.getPermissionManager().getGroupByName(gp); - } + return getGroup(this.player != null ? player.getWorld().getName() : Residence.getConfigManager().getDefaultWorld()); + } + + public PermissionGroup getGroup(String world) { + String name = userName; + if (this.player != null) + name = player.getName(); + String gp = Residence.getPermissionManager().getGroupNameByPlayer(name, world); + this.group = Residence.getPermissionManager().getGroupByName(gp); return this.group; } @@ -196,6 +210,7 @@ public void addResidence(ClaimedResidence residence) { String name = residence.getName(); name = name.toLowerCase(); this.ResidenceList.put(name, residence); + recountResAmount(); } public void removeResidence(String residence) { @@ -203,6 +218,7 @@ public void removeResidence(String residence) { return; residence = residence.toLowerCase(); this.ResidenceList.remove(residence); + recountResAmount(); } public void renameResidence(String oldResidence, String newResidence) { diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 8a30f4c82..5c6a8753f 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -6,6 +6,7 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketBuyInterface; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -80,7 +81,9 @@ public void putForSale(ClaimedResidence res, Player player, int amount, boolean player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); return; } - boolean cansell = Residence.getPermissionManager().getGroup(player).canSellLand() || player.hasPermission("residence.sell"); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + boolean cansell = rPlayer.getGroup().canSellLand() || player.hasPermission("residence.sell"); if (!cansell && !resadmin) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; @@ -138,7 +141,8 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { return; } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); if (!resadmin) { if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); @@ -155,7 +159,7 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { player.sendMessage(Residence.getLM().getMessage("Economy.OwnerBuyFail")); return; } - if (Residence.getResidenceManager().getOwnedZoneCount(player.getName()) >= group.getMaxZones(player.getName()) && !resadmin) { + if (Residence.getResidenceManager().getOwnedZoneCount(player.getName()) >= rPlayer.getMaxRes() && !resadmin) { player.sendMessage(Residence.getLM().getMessage("Residence.TooMany")); return; } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 79fd3ca2b..23146986f 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -5,6 +5,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketRentInterface; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.event.ResidenceRentEvent; import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -160,7 +161,8 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return; } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { player.sendMessage(Residence.getLM().getMessage("Residence.MaxRent")); return; @@ -209,8 +211,8 @@ public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean r return; } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (!resadmin && this.getRentCount(player.getName()) >= group.getMaxRents(player.getName())) { + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + if (!resadmin && this.getRentCount(player.getName()) >= rPlayer.getMaxRents()) { player.sendMessage(Residence.getLM().getMessage("Residence.MaxRent")); return; } @@ -308,7 +310,8 @@ public void payRent(Player player, ClaimedResidence res, boolean resadmin) { return; } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); if (!resadmin && group.getMaxRentDays() != -1 && msToDays((rentedLand.endTime - System.currentTimeMillis()) + daysToMs(land.days)) >= group.getMaxRentDays()) { player.sendMessage(Residence.getLM().getMessage("Rent.MaxRentDays", group.getMaxRentDays())); diff --git a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java index 1e2533b83..baa3530a4 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.itemlist; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import java.util.Map; @@ -20,7 +21,9 @@ private ResidenceItemList() { } public void playerListChange(Player player, Material mat, boolean resadmin) { - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); if (resadmin || (res.getPermissions().hasResidencePermission(player, true) && group.itemListAccess())) { if (super.toggle(mat)) player.sendMessage(Residence.getLM().getMessage("General.ListMaterialAdd", mat.toString(), type.toString().toLowerCase())); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index f46604b7f..c63946441 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -639,15 +639,9 @@ public void onPlayerJoin(PlayerJoinEvent event) { handleNewLocation(player, player.getLocation(), true); final Player p = player; - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - Residence.getPlayerManager().playerJoin(p); - if (p != null) - Residence.getPermissionManager().updateGroupNameForPlayer(p, true); - return; - } - }); + Residence.getPlayerManager().playerJoin(p); + if (p != null) + Residence.getPermissionManager().updateGroupNameForPlayer(p, true); if (player.hasPermission("residence.versioncheck")) { Residence.getVersionChecker().VersionCheck(player); @@ -806,7 +800,8 @@ public void onSelection(PlayerInteractEvent event) { boolean resadmin = Residence.isResAdminOn(player); - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group .canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { @@ -1460,10 +1455,10 @@ public void run() { ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); Residence.getServ().getPluginManager().callEvent(chgEvent); - if (ResOld.getPermissions().has("night", FlagCombo.OnlyTrue) || ResOld.getPermissions().has("day", FlagCombo.OnlyTrue)) + if (ResOld.getPermissions().has("night", FlagCombo.OnlyTrue) || ResOld.getPermissions().has("day", FlagCombo.OnlyTrue)) player.resetPlayerTime(); - if (ResOld.getPermissions().has("sun", FlagCombo.OnlyTrue) || ResOld.getPermissions().has("rain", FlagCombo.OnlyTrue)) + if (ResOld.getPermissions().has("sun", FlagCombo.OnlyTrue) || ResOld.getPermissions().has("rain", FlagCombo.OnlyTrue)) player.resetPlayerWeather(); if (leave != null && !leave.equals("")) { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 5e17a0627..942c18c77 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -1,9 +1,11 @@ package com.bekvon.bukkit.residence.permissions; +import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; @@ -75,7 +77,7 @@ public PermissionGroup(String name, ConfigurationSection node, FlagPermissions p this(name, node); flagPerms.setParent(parentFlagPerms); } - + public PermissionGroup(String name, ConfigurationSection node, FlagPermissions parentFlagPerms, int priority) { this(name, node); flagPerms.setParent(parentFlagPerms); @@ -208,12 +210,12 @@ public int getMaxZones() { return resmax; } - public int getMaxZones(String player) { - int max = Residence.getPlayerManager().getMaxResidences(player); - if (max != -1) - return max; - return resmax; - } +// public int getMaxZones() { +// int max = Residence.getPlayerManager().getMaxResidences(player); +// if (max != -1) +// return max; +// return resmax; +// } public double getCostPerBlock() { return costperarea; @@ -227,10 +229,10 @@ public boolean hasTpAccess() { return tpaccess; } - public int getMaxSubzoneDepth(String player) { - int max = Residence.getPlayerManager().getMaxSubzones(player); - if (max != -1) - return max; + public int getMaxSubzoneDepth() { +// int max = Residence.getPlayerManager().getMaxSubzones(player); +// if (max != -1) +// return max; return subzonedepth; } @@ -266,10 +268,10 @@ public boolean canSellLand() { return canSell; } - public int getMaxRents(String player) { - int max = Residence.getPlayerManager().getMaxRents(player); - if (max != -1) - return max; + public int getMaxRents() { +// int max = Residence.getPlayerManager().getMaxRents(player); +// if (max != -1) +// return max; return maxRents; } @@ -333,35 +335,38 @@ public boolean itemListAccess() { } public void printLimits(CommandSender player, OfflinePlayer target, boolean resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.Separator")); - player.sendMessage(Residence.getLM().getMessage("Limits.PGroup", Residence.getPermissionManager().getPermissionsGroup(target.getName(), - Residence.getConfigManager().getDefaultWorld()))); - player.sendMessage(Residence.getLM().getMessage("Limits.RGroup", groupname)); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(target.getName()); + PermissionGroup group = rPlayer.getGroup(); + + Residence.msg(player, "General.Separator"); + Residence.msg(player, "Limits.PGroup", Residence.getPermissionManager().getPermissionsGroup(target.getName(), + target.isOnline() ? Bukkit.getPlayer(target.getName()).getName() : Residence.getConfigManager().getDefaultWorld())); + Residence.msg(player, "Limits.RGroup", group.getGroupName()); if (target.isOnline() && resadmin) - player.sendMessage(Residence.getLM().getMessage("Limits.Admin", Residence.getPermissionManager().isResidenceAdmin( - player))); - player.sendMessage(Residence.getLM().getMessage("Limits.CanCreate", cancreate)); - player.sendMessage(Residence.getLM().getMessage("Limits.MaxRes", getMaxZones(target.getName()))); - player.sendMessage(Residence.getLM().getMessage("Limits.MaxEW", xmax)); - player.sendMessage(Residence.getLM().getMessage("Limits.MaxNS", zmax)); - player.sendMessage(Residence.getLM().getMessage("Limits.MaxUD", ymax)); - player.sendMessage(Residence.getLM().getMessage("Limits.MinMax", minHeight, maxHeight)); - player.sendMessage(Residence.getLM().getMessage("Limits.MaxSub", getMaxSubzoneDepth(target.getName()))); - player.sendMessage(Residence.getLM().getMessage("Limits.MaxRents", getMaxRents(target.getName())) + - (getMaxRentDays() != -1 ? Residence.getLM().getMessage("Limits.MaxRentDays", getMaxRentDays()) : "")); - player.sendMessage(Residence.getLM().getMessage("Limits.EnterLeave", messageperms)); - player.sendMessage(Residence.getLM().getMessage("Limits.NumberOwn", Residence.getResidenceManager().getOwnedZoneCount(target.getName()))); + Residence.msg(player, "Limits.Admin", Residence.getPermissionManager().isResidenceAdmin(player)); + Residence.msg(player, "Limits.CanCreate", group.canCreateResidences()); + Residence.msg(player, "Limits.MaxRes", rPlayer.getMaxRes()); + Residence.msg(player, "Limits.MaxEW", group.xmax); + Residence.msg(player, "Limits.MaxNS", group.zmax); + Residence.msg(player, "Limits.MaxUD", group.ymax); + Residence.msg(player, "Limits.MinMax", group.minHeight, group.maxHeight); + Residence.msg(player, "Limits.MaxSub", rPlayer.getMaxSubzones()); + Residence.msg(player, "Limits.MaxRents", rPlayer.getMaxRents() + (getMaxRentDays() != -1 ? Residence.getLM().getMessage("Limits.MaxRentDays", getMaxRentDays()) + : "")); + Residence.msg(player, "Limits.EnterLeave", group.messageperms); + Residence.msg(player, "Limits.NumberOwn", rPlayer.getResAmount()); if (Residence.getEconomyManager() != null) { - player.sendMessage(Residence.getLM().getMessage("Limits.Cost", costperarea)); - player.sendMessage(Residence.getLM().getMessage("Limits.Sell", sellperarea)); + Residence.msg(player, "Limits.Cost", group.costperarea); + Residence.msg(player, "Limits.Sell", group.sellperarea); } - player.sendMessage(Residence.getLM().getMessage("Limits.Flag", flagPerms.listFlags())); + Residence.msg(player, "Limits.Flag", group.flagPerms.listFlags()); if (Residence.getConfigManager().useLeases()) { - player.sendMessage(Residence.getLM().getMessage("Limits.Flag", maxLeaseTime)); - player.sendMessage(Residence.getLM().getMessage("Limits.Flag", leaseGiveTime)); - player.sendMessage(Residence.getLM().getMessage("Limits.Flag", renewcostperarea)); + Residence.msg(player, "Limits.Flag", group.maxLeaseTime); + Residence.msg(player, "Limits.Flag", group.leaseGiveTime); + Residence.msg(player, "Limits.Flag", group.renewcostperarea); } - player.sendMessage(Residence.getLM().getMessage("General.Separator")); + Residence.msg(player, "General.Separator"); } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 589add615..0ad6aa29c 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -53,21 +53,21 @@ public Map getGroups() { return groups; } - public PermissionGroup getGroup(Player player) { - PermissionGroup group = Residence.getPlayerManager().getGroup(player.getName()); - if (group != null) { - return group; - } - return groups.get(this.getGroupNameByPlayer(player)); - } - - public PermissionGroup getGroup(String player, String world) { - PermissionGroup group = Residence.getPlayerManager().getGroup(player); - if (group != null) { - return group; - } - return groups.get(this.getGroupNameByPlayer(player, world)); - } +// public PermissionGroup getGroup(Player player) { +// PermissionGroup group = Residence.getPlayerManager().getGroup(player.getName()); +// if (group != null) { +// return group; +// } +// return groups.get(this.getGroupNameByPlayer(player)); +// } +// +// public PermissionGroup getGroup(String player, String world) { +// PermissionGroup group = Residence.getPlayerManager().getGroup(player); +// if (group != null) { +// return group; +// } +// return groups.get(this.getGroupNameByPlayer(player, world)); +// } public PermissionGroup getGroupByName(String group) { group = group.toLowerCase(); @@ -78,7 +78,16 @@ public PermissionGroup getGroupByName(String group) { } public String getGroupNameByPlayer(Player player) { - return this.getGroupNameByPlayer(player.getName(), player.getWorld().getName()); + if (!this.groupsMap.containsKey(player.getName())) { + updateGroupNameForPlayer(player); + } + PlayerGroup PGroup = this.groupsMap.get(player.getName()); + if (PGroup != null) { + String group = PGroup.getGroup(player.getWorld().getName()); + if (group != null) + return group; + } + return Residence.getConfigManager().getDefaultGroup().toLowerCase(); } public String getGroupNameByPlayer(String player, String world) { @@ -175,7 +184,7 @@ private void readConfig() { FileConfiguration groupsFile = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "groups.yml")); FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "flags.yml")); - + String defaultGroup = Residence.getConfigManager().getDefaultGroup().toLowerCase(); globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", flags.getConfigurationSection("Global")); ConfigurationSection nodes = groupsFile.getConfigurationSection("Groups"); @@ -195,6 +204,7 @@ private void readConfig() { } } } + if (!groups.containsKey(defaultGroup)) { groups.put(defaultGroup, new PermissionGroup(defaultGroup)); } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index ab62a9e58..e8953e549 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -6,6 +6,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.RandomLoc; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.economy.ResidenceBank; import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.economy.rent.RentableLand; @@ -293,10 +294,13 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa return false; } } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); if (!this.isSubzone() && !group.canCreateResidences() && !player.hasPermission("residence.create") || this.isSubzone() && !group.canCreateResidences() && !player.hasPermission("residence.create.subzone")) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, "General.NoPermission"); return false; } @@ -416,7 +420,8 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole return false; } } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); if (!group.canCreateResidences() && !player.hasPermission("residence.resize")) { player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return false; @@ -498,8 +503,7 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l return false; } } - PermissionGroup group = Residence.getPermissionManager().getGroup(player); - if (this.getZoneDepth() >= group.getMaxSubzoneDepth(owner)) { + if (this.getZoneDepth() >= Residence.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { player.sendMessage(Residence.getLM().getMessage("Subzone.MaxDepth")); return false; } @@ -535,7 +539,8 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l if (newres.getAreaCount() != 0) { newres.getPermissions().applyDefaultFlags(); if (player != null) { - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); newres.setEnterMessage(group.getDefaultEnterMessage()); newres.setLeaveMessage(group.getDefaultLeaveMessage()); } @@ -782,7 +787,8 @@ public void setEnterLeaveMessage(Player player, String message, boolean enter, b message = null; } } - PermissionGroup group = Residence.getPermissionManager().getGroup(perms.getOwner(), perms.getWorld()); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); if (!group.canSetEnterLeaveMessages() && !resadmin) { player.sendMessage(Residence.getLM().getMessage("Residence.OwnerNoPermission")); return; @@ -1036,7 +1042,8 @@ public int isSafeTp(Player player) { public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { boolean isAdmin = Residence.isResAdminOn(reqPlayer); if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") && !this.isOwner(targetPlayer)) { - PermissionGroup group = Residence.getPermissionManager().getGroup(reqPlayer); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(reqPlayer); + PermissionGroup group = rPlayer.getGroup(); if (!group.hasTpAccess()) { reqPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportDeny")); return; @@ -1291,7 +1298,8 @@ public static ClaimedResidence load(Map root, ClaimedResidence p if (root.containsKey("BlockSellPrice")) res.BlockSellPrice = (Double) root.get("BlockSellPrice"); else { - PermissionGroup group = Residence.getPermissionManager().getGroup(res.getOwner(), res.getWorld()); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(res.getOwner()); + PermissionGroup group = rPlayer.getGroup(res.getWorld()); res.BlockSellPrice = group.getSellPerBlock(); } diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index d7ce966d7..7db499313 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.protection; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.economy.EconomyInterface; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; @@ -61,13 +62,14 @@ public void renewArea(String area, Player player) { player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); return; } - PermissionGroup limits = Residence.getPermissionManager().getGroup(player); - int max = limits.getMaxLeaseTime(); - int add = limits.getLeaseGiveTime(); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + int max = group.getMaxLeaseTime(); + int add = group.getLeaseGiveTime(); int rem = daysRemaining(area); EconomyInterface econ = Residence.getEconomyManager(); if (econ != null) { - double cost = limits.getLeaseRenewCost(); + double cost = group.getLeaseRenewCost(); ClaimedResidence res = manager.getByName(area); area = res.getName(); int amount = (int) Math.ceil(res.getTotalSize() * cost); @@ -99,8 +101,9 @@ public void renewArea(String area, Player player) { } public int getRenewCost(ClaimedResidence res) { - PermissionGroup limits = Residence.getPermissionManager().getGroup(res.getPermissions().getOwner(), res.getPermissions().getWorld()); - double cost = limits.getLeaseRenewCost(); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(res.getPermissions().getOwner()); + PermissionGroup group = rPlayer.getGroup(res.getPermissions().getWorld()); + double cost = group.getLeaseRenewCost(); int amount = (int) Math.ceil(res.getTotalSize() * cost); return amount; } @@ -134,7 +137,10 @@ public void doExpirations() { resname = res.getName(); boolean renewed = false; String owner = res.getPermissions().getOwner(); - PermissionGroup limits = Residence.getPermissionManager().getGroup(owner, res.getPermissions().getWorld()); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(owner); + PermissionGroup group = rPlayer.getGroup(res.getPermissions().getWorld()); + int cost = this.getRenewCost(res); if (Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().autoRenewLeases()) { if (cost == 0) { @@ -169,7 +175,7 @@ public void doExpirations() { } if (Residence.getConfigManager().debugEnabled()) System.out.println("Lease Renew Old: " + next.getValue()); - next.setValue(System.currentTimeMillis() + daysToMs(limits.getLeaseGiveTime())); + next.setValue(System.currentTimeMillis() + daysToMs(group.getLeaseGiveTime())); if (Residence.getConfigManager().debugEnabled()) System.out.println("Lease Renew New: " + next.getValue()); } @@ -184,7 +190,8 @@ public void resetLeases() { for (String item : list) { if (item != null) { ClaimedResidence res = Residence.getResidenceManager().getByName(item); - PermissionGroup group = Residence.getPermissionManager().getGroup(res.getPermissions().getOwner(), res.getPermissions().getWorld()); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(res.getPermissions().getOwner()); + PermissionGroup group = rPlayer.getGroup(res.getPermissions().getWorld()); this.setExpireTime(null, item, group.getLeaseGiveTime()); } } diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 71d013234..e9a8d2799 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -15,10 +15,7 @@ public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); - private Residence plugin; - - public PlayerManager(Residence plugin) { - this.plugin = plugin; + public PlayerManager() { } public void playerJoin(Player player) { @@ -44,15 +41,9 @@ public ResidencePlayer playerJoin(String player) { public void fillList() { players.clear(); - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - for (Player player : Bukkit.getOnlinePlayers()) { - playerJoin(player); - } - return; - } - }); + for (Player player : Bukkit.getOnlinePlayers()) { + playerJoin(player); + } } @Override diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index ef9759395..eb73b8c28 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -22,6 +22,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.economy.rent.RentedLand; @@ -188,28 +189,27 @@ public boolean addResidence(Player player, String name, Location loc1, Location public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { if (!Residence.validName(name)) { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); - } + Residence.msg(player, "Invalid.NameCharacters"); return false; } if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); - } + Residence.msg(player, "Select.Points"); return false; } - PermissionGroup group = Residence.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); +// PermissionGroup group = Residence.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); boolean createpermission = group.canCreateResidences() || (player == null ? true : player.hasPermission("residence.create")); if (!createpermission && !resadmin) { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); - } + Residence.msg(player, "General.NoPermission"); return false; } + if (player != null) { - if (!hasMaxZones(player.getName(), group.getMaxZones(player.getName())) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.TooMany")); + if (!hasMaxZones(player.getName(), rPlayer.getMaxRes()) && !resadmin) { + Residence.msg(player, "Residence.TooMany"); return false; } } @@ -604,7 +604,8 @@ else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Play sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); if (Residence.getEconomyManager() != null) { - PermissionGroup group = Residence.getPermissionManager().getGroup(res.getOwner(), res.getWorld()); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(res.getOwner()); + PermissionGroup group = rPlayer.getGroup(res.getWorld()); sender.sendMessage(lm.getMessage("General.TotalWorth", (int) ((res.getTotalSize() * group.getCostPerBlock()) * 100) / 100.0, (int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0)); } @@ -921,18 +922,21 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, return; } CuboidArea[] areas = res.getAreaArray(); - PermissionGroup g = Residence.getPermissionManager().getGroup(giveplayer); - if (areas.length > g.getMaxPhysicalPerResidence() && !resadmin) { + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(giveplayer); + PermissionGroup group = rPlayer.getGroup(); + + if (areas.length > group.getMaxPhysicalPerResidence() && !resadmin) { reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.GiveLimits")); return; } - if (!hasMaxZones(giveplayer.getName(), g.getMaxZones(giveplayer.getName())) && !resadmin) { + if (!hasMaxZones(giveplayer.getName(), rPlayer.getMaxRes()) && !resadmin) { reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.GiveLimits")); return; } if (!resadmin) { for (CuboidArea area : areas) { - if (!g.inLimits(area)) { + if (!group.inLimits(area)) { reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.GiveLimits")); return; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index bfd664667..28652b6df 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -1,11 +1,11 @@ package com.bekvon.bukkit.residence.protection; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagCheckEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; -import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import java.util.ArrayList; import java.util.Collections; @@ -102,23 +102,25 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) if (player != null) { if (!resadmin) { if (!Residence.getConfigManager().isOfflineMode() && !player.getUniqueId().toString().equals(ownerUUID.toString())) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, "General.NoPermission"); return; } else if (!player.getName().equals(ownerLastKnownName)) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, "General.NoPermission"); return; } } } else { resadmin = true; } - PermissionGroup group = Residence.getPermissionManager().getGroup(this.getOwner(), world); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(this.getOwner()); + PermissionGroup group = rPlayer.getGroup(world); + for (Entry flag : list.cuboidFlags.entrySet()) { if (group.hasFlagAccess(flag.getKey()) || resadmin) { this.cuboidFlags.put(flag.getKey(), flag.getValue()); } else { if (player != null) - player.sendMessage(Residence.getLM().getMessage("Flag.SetDeny", flag.getKey())); + Residence.msg(player, "Flag.SetDeny", flag.getKey()); } } for (Entry> plists : list.playerFlags.entrySet()) { @@ -128,7 +130,7 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) map.put(flag.getKey(), flag.getValue()); } else { if (player != null) - player.sendMessage(Residence.getLM().getMessage("Flag.SetDeny", flag.getKey())); + Residence.msg(player, "Flag.SetDeny", flag.getKey()); } } } @@ -140,12 +142,12 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue()); } else { if (player != null) - player.sendMessage(Residence.getLM().getMessage("Flag.SetDeny", flag.getKey())); + Residence.msg(player, "Flag.SetDeny", flag.getKey()); } } } if (player != null) - player.sendMessage(Residence.getLM().getMessage("Residence.PermissionsApply")); + Residence.msg(player, "Residence.PermissionsApply"); } public boolean hasResidencePermission(CommandSender sender, boolean requireOwner) { @@ -172,20 +174,20 @@ public boolean hasResidencePermission(CommandSender sender, boolean requireOwner private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState state, boolean globalflag, boolean resadmin) { if (!checkValidFlag(flag, globalflag)) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Flag")); + Residence.msg(sender, "Invalid.Flag"); return false; } if (state == FlagState.INVALID) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.FlagState")); + Residence.msg(sender, "Invalid.FlagState"); return false; } if (!resadmin) { if (!this.hasResidencePermission(sender, false)) { - sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(sender, "General.NoPermission"); return false; } if (!hasFlagAccess(this.getOwner(), flag) && !sender.hasPermission("residence.flag." + flag.toLowerCase())) { - sender.sendMessage(Residence.getLM().getMessage("Flag.SetFailed", flag)); + Residence.msg(sender, "Flag.SetFailed", flag); return false; } } @@ -193,7 +195,8 @@ private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState sta } private boolean hasFlagAccess(String player, String flag) { - PermissionGroup group = Residence.getPermissionManager().getGroup(player, world); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(world); return group.hasFlagAccess(flag); } @@ -215,7 +218,7 @@ public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String f return false; if (super.setPlayerFlag(targetPlayer, flag, state)) { if (Show) - sender.sendMessage(Residence.getLM().getMessage("Flag.Set", flag, residence.getName(), flagstate)); + Residence.msg(sender, "Flag.Set", flag, residence.getName(), flagstate); return true; } } @@ -234,11 +237,11 @@ public boolean setGroupFlag(Player player, String group, String flag, String fla if (fc.isCancelled()) return false; if (super.setGroupFlag(group, flag, state)) { - player.sendMessage(Residence.getLM().getMessage("Flag.Set", flag, residence.getName(), flagstate)); + Residence.msg(player, "Flag.Set", flag, residence.getName(), flagstate); return true; } } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Group")); + Residence.msg(player, "Invalid.Group"); return false; } } @@ -263,7 +266,7 @@ public boolean setFlag(CommandSender sender, String flag, String flagstate, bool if (!one.getName().equals(this.getOwner())) size++; } - sender.sendMessage(Residence.getLM().getMessage("Flag.ChangeDeny", flag, size)); + Residence.msg(sender, "Flag.ChangeDeny", flag, size); return false; } } @@ -276,7 +279,7 @@ public boolean setFlag(CommandSender sender, String flag, String flagstate, bool if (fc.isCancelled()) return false; if (super.setFlag(flag, state)) { - sender.sendMessage(Residence.getLM().getMessage("Flag.Set", flag, this.residence.getName(), flagstate)); + Residence.msg(sender, "Flag.Set", flag, this.residence.getName(), flagstate); return true; } } @@ -292,7 +295,7 @@ public boolean removeAllPlayerFlags(CommandSender sender, String targetPlayer, b return false; } super.removeAllPlayerFlags(targetPlayer); - sender.sendMessage(Residence.getLM().getMessage("Flag.RemovedAll", targetPlayer, this.residence.getName())); + Residence.msg(sender, "Flag.RemovedAll", targetPlayer, this.residence.getName()); return true; } return false; @@ -306,7 +309,7 @@ public boolean removeAllGroupFlags(Player player, String group, boolean resadmin return false; } super.removeAllGroupFlags(group); - player.sendMessage(Residence.getLM().getMessage("Flag.RemovedGroup", group, this.residence.getName())); + Residence.msg(player, "Flag.RemovedGroup", group, this.residence.getName()); return true; } return false; @@ -342,14 +345,14 @@ public boolean setPlayerFlag(String player, String flag, FlagState state) { public void applyDefaultFlags(Player player, boolean resadmin) { if (this.hasResidencePermission(player, true) || resadmin) { this.applyDefaultFlags(); - player.sendMessage(Residence.getLM().getMessage("Flag.Default")); + Residence.msg(player, "Flag.Default"); } else - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, "General.NoPermission"); } public void applyDefaultFlags() { - PermissionManager gm = Residence.getPermissionManager(); - PermissionGroup group = gm.getGroup(this.getOwner(), world); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(this.getOwner()); + PermissionGroup group = rPlayer.getGroup(world); Set> dflags = group.getDefaultResidenceFlags(); // Set> dcflags = group.getDefaultCreatorFlags(); Set>> dgflags = group.getDefaultGroupFlags(); @@ -545,7 +548,7 @@ public boolean setFlagGroupOnPlayer(CommandSender sender, String target, String } } if (flagString.length() > 0) - sender.sendMessage(Residence.getLM().getMessage("Flag.Set", flagString, target, state)); + Residence.msg(sender, "Flag.Set", flagString, target, state); return changed; } return false; diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index 8e81e4c28..86d7de15e 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -6,6 +6,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.AutoSelector; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -15,7 +16,8 @@ public class AutoSelection { public void switchAutoSelection(Player player) { if (!list.containsKey(player.getName().toLowerCase())) { - PermissionGroup group = Residence.getPermissionManager().getGroup(player.getName(), player.getLocation().getWorld().getName()); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(player.getLocation().getWorld().getName()); list.put(player.getName().toLowerCase(), new AutoSelector(group, System.currentTimeMillis())); player.sendMessage(Residence.getLM().getMessage("Select.AutoEnabled")); } else { diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index cdb6bef18..c0ea638ac 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.selection; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.SelectionSides; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -115,7 +116,8 @@ public void showSelectionInfoInActionBar(Player player) { String Message = Residence.getLM().getMessage("Select.TotalSize", cuboidArea.getSize()); - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); if (Residence.getConfigManager().enableEconomy()) Message += " " + Residence.getLM().getMessage("General.LandCost", ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); @@ -126,19 +128,22 @@ public void showSelectionInfoInActionBar(Player player) { public void showSelectionInfo(Player player) { String pname = player.getName(); if (hasPlacedBoth(pname)) { - player.sendMessage(Residence.getLM().getMessage("General.Separator")); + Residence.msg(player, "General.Separator"); CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); - player.sendMessage(Residence.getLM().getMessage("Select.TotalSize", cuboidArea.getSize())); - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + Residence.msg(player, "Select.TotalSize", cuboidArea.getSize()); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (Residence.getConfigManager().enableEconomy()) - player.sendMessage(Residence.getLM().getMessage("General.LandCost", ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock())))); + Residence.msg(player, "General.LandCost", ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); player.sendMessage(ChatColor.YELLOW + "X" + Residence.getLM().getMessage("General.Size", cuboidArea.getXSize())); player.sendMessage(ChatColor.YELLOW + "Y" + Residence.getLM().getMessage("General.Size", cuboidArea.getYSize())); player.sendMessage(ChatColor.YELLOW + "Z" + Residence.getLM().getMessage("General.Size", cuboidArea.getZSize())); - player.sendMessage(Residence.getLM().getMessage("General.Separator")); + Residence.msg(player, "General.Separator"); NewMakeBorders(player, getPlayerLoc1(pname), getPlayerLoc2(pname), false); } else - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, "Select.Points"); } public static boolean showParticle(Player player, Location Current, boolean error) { @@ -458,7 +463,7 @@ public void vert(Player player, boolean resadmin) { this.sky(player, resadmin); this.bedrock(player, resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, "Select.Points"); } } @@ -486,7 +491,8 @@ public void qbedrock(Player player) { public void sky(Player player, boolean resadmin) { if (hasPlacedBoth(player.getName())) { - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); int y1 = playerLoc1.get(player.getName()).getBlockY(); int y2 = playerLoc2.get(player.getName()).getBlockY(); int newy = player.getLocation().getWorld().getMaxHeight() - 1; @@ -507,15 +513,16 @@ public void sky(Player player, boolean resadmin) { } playerLoc2.get(player.getName()).setY(newy); } - player.sendMessage(Residence.getLM().getMessage("Select.Sky")); + Residence.msg(player, "Select.Sky"); } else { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, "Select.Points"); } } public void bedrock(Player player, boolean resadmin) { if (hasPlacedBoth(player.getName())) { - PermissionGroup group = Residence.getPermissionManager().getGroup(player); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); int y1 = playerLoc1.get(player.getName()).getBlockY(); int y2 = playerLoc2.get(player.getName()).getBlockY(); if (y1 < y2) { @@ -537,9 +544,9 @@ public void bedrock(Player player, boolean resadmin) { } playerLoc2.get(player.getName()).setY(newy); } - player.sendMessage(Residence.getLM().getMessage("Select.Bedrock")); + Residence.msg(player, "Select.Bedrock"); } else { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, "Select.Points"); } } @@ -558,16 +565,16 @@ public void selectChunk(Player player) { int ymax = player.getLocation().getWorld().getMaxHeight() - 1; playerLoc1.put(player.getName(), new Location(player.getWorld(), xcoord, ycoord, zcoord)); playerLoc2.put(player.getName(), new Location(player.getWorld(), xmax, ymax, zmax)); - player.sendMessage(Residence.getLM().getMessage("Select.Success")); + Residence.msg(player, "Select.Success"); } public boolean worldEdit(Player player) { - player.sendMessage(Residence.getLM().getMessage("General.WorldEditNotFound")); + Residence.msg(player, "General.WorldEditNotFound"); return false; } public boolean worldEditUpdate(Player player) { - player.sendMessage(Residence.getLM().getMessage("General.WorldEditNotFound")); + Residence.msg(player, "General.WorldEditNotFound"); return false; } @@ -577,18 +584,18 @@ public void selectBySize(Player player, int xsize, int ysize, int zsize) { Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize); placeLoc1(player, loc1, false); placeLoc2(player, loc2, true); - player.sendMessage(Residence.getLM().getMessage("Select.Success")); + Residence.msg(player, "Select.Success"); showSelectionInfo(player); } public void modify(Player player, boolean shift, double amount) { if (!hasPlacedBoth(player.getName())) { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, "Select.Points"); return; } Direction d = getDirection(player); if (d == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Direction")); + Residence.msg(player, "Invalid.Direction"); return; } CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); @@ -597,7 +604,7 @@ public void modify(Player player, boolean shift, double amount) { double oldy = area.getLowLoc().getBlockY(); oldy = oldy - amount; if (oldy < MIN_HEIGHT) { - player.sendMessage(Residence.getLM().getMessage("Select.TooLow")); + Residence.msg(player, "Select.TooLow"); oldy = MIN_HEIGHT; } area.getLowLoc().setY(oldy); @@ -605,9 +612,9 @@ public void modify(Player player, boolean shift, double amount) { double oldy2 = area.getHighLoc().getBlockY(); oldy2 = oldy2 - amount; area.getHighLoc().setY(oldy2); - player.sendMessage(Residence.getLM().getMessage("Shifting.Down", amount)); + Residence.msg(player, "Shifting.Down", amount); } else - player.sendMessage(Residence.getLM().getMessage("Expanding.Down", amount)); + Residence.msg(player, "Expanding.Down", amount); break; case MINUSX: double oldx = area.getLowLoc().getBlockX(); @@ -617,9 +624,9 @@ public void modify(Player player, boolean shift, double amount) { double oldx2 = area.getHighLoc().getBlockX(); oldx2 = oldx2 - amount; area.getHighLoc().setX(oldx2); - player.sendMessage(Residence.getLM().getMessage("Shifting.West", amount)); + Residence.msg(player, "Shifting.West", amount); } else - player.sendMessage(Residence.getLM().getMessage("Expanding.West", amount)); + Residence.msg(player, "Expanding.West", amount); break; case MINUSZ: double oldz = area.getLowLoc().getBlockZ(); @@ -629,9 +636,9 @@ public void modify(Player player, boolean shift, double amount) { double oldz2 = area.getHighLoc().getBlockZ(); oldz2 = oldz2 - amount; area.getHighLoc().setZ(oldz2); - player.sendMessage(Residence.getLM().getMessage("Shifting.North", amount)); + Residence.msg(player, "Shifting.North", amount); } else - player.sendMessage(Residence.getLM().getMessage("Expanding.North", amount)); + Residence.msg(player, "Expanding.North", amount); break; case PLUSX: oldx = area.getHighLoc().getBlockX(); @@ -641,9 +648,9 @@ public void modify(Player player, boolean shift, double amount) { double oldx2 = area.getLowLoc().getBlockX(); oldx2 = oldx2 + amount; area.getLowLoc().setX(oldx2); - player.sendMessage(Residence.getLM().getMessage("Shifting.East", amount)); + Residence.msg(player, "Shifting.East", amount); } else - player.sendMessage(Residence.getLM().getMessage("Expanding.East", amount)); + Residence.msg(player, "Expanding.East", amount); break; case PLUSZ: oldz = area.getHighLoc().getBlockZ(); @@ -653,15 +660,15 @@ public void modify(Player player, boolean shift, double amount) { double oldz2 = area.getLowLoc().getBlockZ(); oldz2 = oldz2 + amount; area.getLowLoc().setZ(oldz2); - player.sendMessage(Residence.getLM().getMessage("Shifting.South", amount)); + Residence.msg(player, "Shifting.South", amount); } else - player.sendMessage(Residence.getLM().getMessage("Expanding.South", amount)); + Residence.msg(player, "Expanding.South", amount); break; case UP: oldy = area.getHighLoc().getBlockY(); oldy = oldy + amount; if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { - player.sendMessage(Residence.getLM().getMessage("Select.TooHigh")); + Residence.msg(player, "Select.TooHigh"); oldy = player.getLocation().getWorld().getMaxHeight() - 1; } area.getHighLoc().setY(oldy); @@ -669,9 +676,9 @@ public void modify(Player player, boolean shift, double amount) { double oldy2 = area.getLowLoc().getBlockY(); oldy2 = oldy2 + amount; area.getLowLoc().setY(oldy2); - player.sendMessage(Residence.getLM().getMessage("Shifting.Up", amount)); + Residence.msg(player, "Shifting.Up", amount); } else - player.sendMessage(Residence.getLM().getMessage("Expanding.Up", amount)); + Residence.msg(player, "Expanding.Up", amount); break; default: break; @@ -681,12 +688,12 @@ public void modify(Player player, boolean shift, double amount) { public boolean contract(Player player, double amount, boolean resadmin) { if (!hasPlacedBoth(player.getName())) { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, "Select.Points"); return false; } Direction d = getDirection(player); if (d == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Direction")); + Residence.msg(player, "Invalid.Direction"); return false; } CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); @@ -695,45 +702,45 @@ public boolean contract(Player player, double amount, boolean resadmin) { double oldy = area.getHighLoc().getBlockY(); oldy = oldy - amount; if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { - player.sendMessage(Residence.getLM().getMessage("Select.TooHigh")); + Residence.msg(player, "Select.TooHigh"); oldy = player.getLocation().getWorld().getMaxHeight() - 1; } area.getHighLoc().setY(oldy); - player.sendMessage(Residence.getLM().getMessage("Contracting.Down", amount)); + Residence.msg(player, "Contracting.Down", amount); break; case MINUSX: double oldx = area.getHighLoc().getBlockX(); oldx = oldx - amount; area.getHighLoc().setX(oldx); - player.sendMessage(Residence.getLM().getMessage("Contracting.West", amount)); + Residence.msg(player, "Contracting.West", amount); break; case MINUSZ: double oldz = area.getHighLoc().getBlockZ(); oldz = oldz - amount; area.getHighLoc().setZ(oldz); - player.sendMessage(Residence.getLM().getMessage("Contracting.North", amount)); + Residence.msg(player, "Contracting.North", amount); break; case PLUSX: oldx = area.getLowLoc().getBlockX(); oldx = oldx + amount; area.getLowLoc().setX(oldx); - player.sendMessage(Residence.getLM().getMessage("Contracting.East", amount)); + Residence.msg(player, "Contracting.East", amount); break; case PLUSZ: oldz = area.getLowLoc().getBlockZ(); oldz = oldz + amount; area.getLowLoc().setZ(oldz); - player.sendMessage(Residence.getLM().getMessage("Contracting.South", amount)); + Residence.msg(player, "Contracting.South", amount); break; case UP: oldy = area.getLowLoc().getBlockY(); oldy = oldy + amount; if (oldy < MIN_HEIGHT) { - player.sendMessage(Residence.getLM().getMessage("Select.TooLow")); + Residence.msg(player, "Select.TooLow"); oldy = MIN_HEIGHT; } area.getLowLoc().setY(oldy); - player.sendMessage(Residence.getLM().getMessage("Contracting.Up", amount)); + Residence.msg(player, "Contracting.Up", amount); break; default: break; diff --git a/src/plugin.yml b/src/plugin.yml index 02f2a8b9c..412a7bc91 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.4.1.1 +version: 4.4.1.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 3d32d736662b6ce6858b619fe7c49fc51222cd2c Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 15 Jul 2016 16:39:47 +0300 Subject: [PATCH 0207/1142] Check if event is not null Change message mechanic to new one for simpler usage and more stable --- .../bekvon/bukkit/residence/Residence.java | 14 ++- .../listeners/ResidencePlayerListener.java | 3 +- .../protection/ResidenceManager.java | 87 +++++++++---------- .../bukkit/residence/text/Language.java | 6 +- src/plugin.yml | 2 +- 5 files changed, 57 insertions(+), 55 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index ac72b808e..c904360b5 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1585,12 +1585,18 @@ public static boolean isDisabledWorldCommand(String worldname) { public static void msg(Player player, String path, Object... variables) { if (player != null) - player.sendMessage(Residence.getLM().getMessage(path, variables)); + if (Residence.getLM().containsKey(path)) + player.sendMessage(Residence.getLM().getMessage(path, variables)); + else + player.sendMessage(path); } - + public static void msg(CommandSender sender, String path, Object... variables) { if (sender != null) - sender.sendMessage(Residence.getLM().getMessage(path, variables)); + if (Residence.getLM().containsKey(path)) + sender.sendMessage(Residence.getLM().getMessage(path, variables)); + else + sender.sendMessage(path); } - + } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c63946441..50d9cf9e3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -198,7 +198,8 @@ public void onResidenceBackupRename(ResidenceRenameEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceDelete(ResidenceDeleteEvent event) { - Residence.getSchematicManager().delete(event.getResidence()); + if (event != null && event.getResidence() != null) + Residence.getSchematicManager().delete(event.getResidence()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index eb73b8c28..800e253b4 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -221,8 +221,7 @@ public boolean addResidence(Player player, String owner, String name, Location l newRes.setName(name); if (residences.containsKey(name.toLowerCase())) { - if (player != null) - player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", residences.get(name.toLowerCase()).getResidenceName())); + Residence.msg(player, "Residence.AlreadyExists", residences.get(name.toLowerCase()).getResidenceName()); return false; } @@ -251,8 +250,8 @@ public boolean addResidence(Player player, String owner, String name, Location l if (player != null) { Residence.getSelectionManager().NewMakeBorders(player, newArea.getHighLoc(), newArea.getLowLoc(), false); Residence.getAutoSelectionManager().getList().remove(player.getName().toLowerCase()); - player.sendMessage(Residence.getLM().getMessage("Area.Create", "main")); - player.sendMessage(Residence.getLM().getMessage("Residence.Create", name)); + Residence.msg(player, "Area.Create", "main"); + Residence.msg(player, "Residence.Create", name); } if (Residence.getConfigManager().useLeases()) { if (player != null) { @@ -419,8 +418,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { ClaimedResidence res = this.getByName(name); if (res == null) { - if (player != null) - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, "Invalid.Residence"); return; } @@ -428,7 +426,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { if (player != null && !resadmin) { if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, "General.NoPermission"); return; } } @@ -475,8 +473,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { } } - if (player != null) - player.sendMessage(Residence.getLM().getMessage("Residence.Remove", name)); + Residence.msg(player, "Residence.Remove", name); } else { String[] split = name.split("\\."); @@ -533,13 +530,13 @@ public void printAreaInfo(String areaname, CommandSender sender) { public void printAreaInfo(String areaname, CommandSender sender, boolean resadmin) { ClaimedResidence res = this.getByName(areaname); if (res == null) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, "Invalid.Residence"); return; } areaname = res.getName(); - sender.sendMessage(Residence.getLM().getMessage("General.Separator")); + Residence.msg(sender, "General.Separator"); ResidencePermissions perms = res.getPermissions(); Language lm = Residence.getLM(); @@ -582,9 +579,9 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi raw = convertToRaw(null, ResFlagMsg, ResFlagList); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); } else { - sender.sendMessage(resNameOwner); - sender.sendMessage(worldInfo); - sender.sendMessage(ResFlagMsg); + Residence.msg(sender, resNameOwner); + Residence.msg(sender, worldInfo); + Residence.msg(sender, ResFlagMsg); } if (!Residence.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) @@ -596,23 +593,24 @@ else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Play String groupFlags = perms.listGroupFlags(); if (groupFlags.length() > 0) - sender.sendMessage(lm.getMessage("General.GroupFlags", groupFlags)); + Residence.msg(sender, "General.GroupFlags", groupFlags); String msg = ""; msg += lm.getMessage("General.TotalResSize", res.getTotalSize(), res.getXZSize()); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + Residence.msg(sender, ChatColor.translateAlternateColorCodes('&', msg)); if (Residence.getEconomyManager() != null) { ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(res.getOwner()); PermissionGroup group = rPlayer.getGroup(res.getWorld()); - sender.sendMessage(lm.getMessage("General.TotalWorth", (int) ((res.getTotalSize() * group.getCostPerBlock()) - * 100) / 100.0, (int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0)); + + Residence.msg(sender, "General.TotalWorth", (int) ((res.getTotalSize() * group.getCostPerBlock()) + * 100) / 100.0, (int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0); } if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { String time = Residence.getLeaseManager().getExpireTime(areaname); if (time != null) - sender.sendMessage(lm.getMessage("Economy.LeaseExpire", time)); + Residence.msg(sender, "Economy.LeaseExpire", time); } if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isForRent(areaname) && !Residence.getRentManager().isRented(areaname)) { @@ -629,7 +627,7 @@ else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Play if (sender instanceof Player) Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, forRentMsg, rentableString.toString())); else - sender.sendMessage(forRentMsg); + Residence.msg(sender, forRentMsg); } else if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { String RentedMsg = lm.getMessage("Residence.RentedBy", Residence.getRentManager().getRentingPlayer(areaname)); @@ -654,14 +652,14 @@ else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Play if (sender instanceof Player) Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, RentedMsg, rentableString.toString())); else - sender.sendMessage(RentedMsg); + Residence.msg(sender, RentedMsg); } else if (Residence.getTransactionManager().isForSale(areaname)) { int amount = Residence.getTransactionManager().getSaleAmount(areaname); String SellMsg = lm.getMessage("Economy.LandForSale") + " " + amount; - sender.sendMessage(SellMsg); + Residence.msg(sender, SellMsg); } - sender.sendMessage(Residence.getLM().getMessage("General.Separator")); + Residence.msg(sender, "General.Separator"); } public String convertToRaw(String preText, String text, String hover) { @@ -686,12 +684,12 @@ public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, ClaimedResidence reciever = this.getByName(targetArea); ClaimedResidence source = this.getByName(sourceArea); if (source == null || reciever == null) { - reqPlayer.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(reqPlayer, "Invalid.Residence"); return; } if (!resadmin) { if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { - reqPlayer.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(reqPlayer, "General.NoPermission"); return; } } @@ -839,19 +837,17 @@ public boolean renameResidence(String oldName, String newName) { public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { if (!player.hasPermission("residence.rename")) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, "General.NoPermission"); return false; } if (!Residence.validName(newName)) { - player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); + Residence.msg(player, "Invalid.NameCharacters"); return false; } ClaimedResidence res = this.getByName(oldName); if (res == null) { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); - } + Residence.msg(player, "Invalid.Residence"); return false; } @@ -860,9 +856,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { if (res.getParent() == null) { if (residences.containsKey(newName.toLowerCase())) { - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyExists", newName)); - } + Residence.msg(player, "Residence.AlreadyExists", newName); return false; } @@ -883,9 +877,8 @@ public boolean renameResidence(Player player, String oldName, String newName, bo Residence.getSignUtil().updateSignResName(res); - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Residence.Rename", oldName, newName)); - } + Residence.msg(player, "Residence.Rename", oldName, newName); + return true; } String[] oldname = oldName.split("\\."); @@ -897,28 +890,28 @@ public boolean renameResidence(Player player, String oldName, String newName, bo return feed; } - if (player != null) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); - } + + Residence.msg(player, "General.NoPermission"); + return false; } public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { ClaimedResidence res = getByName(residence); if (res == null) { - reqPlayer.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(reqPlayer, "Invalid.Residence"); return; } residence = res.getName(); if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { - reqPlayer.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(reqPlayer, "General.NoPermission"); return; } Player giveplayer = Residence.getServ().getPlayer(targPlayer); if (giveplayer == null || !giveplayer.isOnline()) { - reqPlayer.sendMessage(Residence.getLM().getMessage("General.NotOnline")); + Residence.msg(reqPlayer, "General.NotOnline"); return; } CuboidArea[] areas = res.getAreaArray(); @@ -927,17 +920,17 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, PermissionGroup group = rPlayer.getGroup(); if (areas.length > group.getMaxPhysicalPerResidence() && !resadmin) { - reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.GiveLimits")); + Residence.msg(reqPlayer, "Residence.GiveLimits"); return; } if (!hasMaxZones(giveplayer.getName(), rPlayer.getMaxRes()) && !resadmin) { - reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.GiveLimits")); + Residence.msg(reqPlayer, "Residence.GiveLimits"); return; } if (!resadmin) { for (CuboidArea area : areas) { if (!group.inLimits(area)) { - reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.GiveLimits")); + Residence.msg(reqPlayer, "Residence.GiveLimits"); return; } } @@ -948,8 +941,8 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, res.getPermissions().setOwner(giveplayer.getName(), true); // Fix phrases here - reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.Give", residence, giveplayer.getName())); - giveplayer.sendMessage(Residence.getLM().getMessage("Residence.Recieve", residence, reqPlayer.getName())); + Residence.msg(reqPlayer, "Residence.Give", residence, giveplayer.getName()); + Residence.msg(giveplayer, "Residence.Recieve", residence, reqPlayer.getName()); } public void removeAllFromWorld(CommandSender sender, String world) { diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index cbcb4ec0c..e2b085d4e 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -49,7 +49,7 @@ public String getMessage(String key) { * - the variables separated with % * @return the message */ - + public String getMessage(String key, Object... variables) { if (!key.contains("Language.") && !key.contains("CommandHelp.")) key = "Language." + key; @@ -116,11 +116,13 @@ public Set getKeyList(String key) { * @return true/false */ public boolean containsKey(String key) { + if (!key.contains("Language.") && !key.contains("CommandHelp.")) + key = "Language." + key; if (customlocale == null || !customlocale.contains(key)) return enlocale.contains(key); return customlocale.contains(key); } - + private static List ColorsArray(List text) { List temp = new ArrayList(); for (String part : text) { diff --git a/src/plugin.yml b/src/plugin.yml index 412a7bc91..a86425119 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.4.1.2 +version: 4.4.2.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 0296dfb67f8176c0dffea9d70092748a8261566a Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 15 Jul 2016 16:45:32 +0300 Subject: [PATCH 0208/1142] Allow item frame destruction with build flag --- .../residence/listeners/ResidenceEntityListener.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 97c57128d..e93d9f09b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -471,6 +471,7 @@ public void onHangingPlace(HangingPlaceEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreak(HangingBreakByEntityEvent event) { + Debug.D("1"); // disabling event on world Hanging ent = event.getEntity(); if (ent == null) @@ -500,6 +501,7 @@ public void onHangingBreak(HangingBreakByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { + Debug.D("2"); // disabling event on world Hanging ent = event.getEntity(); if (ent == null) @@ -827,6 +829,8 @@ public void OnPlayerDamageByLightning(EntityDamageEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { + + Debug.D("3"); // disabling event on world if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -878,9 +882,12 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (Residence.isResAdminOn(player)) return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "destroy", false)) { + String pname = player.getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); + String world = loc.getWorld().getName(); + if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "destroy", res.getName())); + player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "destroy")); } } From d43b42de907785b934e9037767bd42ecade2c7e6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 15 Jul 2016 16:49:43 +0300 Subject: [PATCH 0209/1142] Check if player have residence.create permission despite if he has group allowing to create residence --- .../bekvon/bukkit/residence/protection/ResidenceManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 800e253b4..da2d501dc 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -201,7 +201,7 @@ public boolean addResidence(Player player, String owner, String name, Location l PermissionGroup group = rPlayer.getGroup(); // PermissionGroup group = Residence.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); - boolean createpermission = group.canCreateResidences() || (player == null ? true : player.hasPermission("residence.create")); + boolean createpermission = group.canCreateResidences() && (player == null ? true : player.hasPermission("residence.create")); if (!createpermission && !resadmin) { Residence.msg(player, "General.NoPermission"); return false; From 5e36b92426299e8d7ca8e19b7a3f336a89e689d5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 15 Jul 2016 17:04:11 +0300 Subject: [PATCH 0210/1142] ignore command permission requirement if sender is resadmin require atleast 3 arguments for setting new owner --- src/com/bekvon/bukkit/residence/ResidenceCommandListener.java | 2 +- src/com/bekvon/bukkit/residence/commands/setowner.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 83d64b966..45f78b14e 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -127,7 +127,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return commandHelp(new String[] { "?" }, resadmin, sender, command); } - if (!sender.hasPermission("residence.command." + args[0].toLowerCase())) { + if (!sender.hasPermission("residence.command." + args[0].toLowerCase()) && !resadmin) { sender.sendMessage(Residence.getLM().getMessage("General.NoCmdPermission")); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index 19af5431b..9a1d3527e 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -11,6 +11,9 @@ public class setowner implements cmd { @Override public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (args.length < 3) + return false; + if (!resadmin) { sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); return true; From 3049124cb24d1b11f93b12c2a27a321b39b3bce5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 15 Jul 2016 17:20:33 +0300 Subject: [PATCH 0211/1142] add missing egg / beacon flags into gui --- src/com/bekvon/bukkit/residence/ConfigManager.java | 6 +++--- .../containers/{GuiItems.java => Flags.java} | 6 ++++-- .../bukkit/residence/protection/FlagPermissions.java | 11 ++++++++--- 3 files changed, 15 insertions(+), 8 deletions(-) rename src/com/bekvon/bukkit/residence/containers/{GuiItems.java => Flags.java} (95%) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 26e6e5fd4..cb3fa3550 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -5,7 +5,7 @@ import org.bukkit.Effect; import org.bukkit.Location; -import com.bekvon.bukkit.residence.containers.GuiItems; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; @@ -290,9 +290,9 @@ void UpdateFlagFile() { continue; String lowOne = one.toLowerCase(); - GuiItems uno = null; + Flags uno = null; try { - uno = GuiItems.valueOf(lowOne); + uno = Flags.valueOf(lowOne); } catch (IllegalArgumentException e) { } if (uno == null) diff --git a/src/com/bekvon/bukkit/residence/containers/GuiItems.java b/src/com/bekvon/bukkit/residence/containers/Flags.java similarity index 95% rename from src/com/bekvon/bukkit/residence/containers/GuiItems.java rename to src/com/bekvon/bukkit/residence/containers/Flags.java index 14ded468d..72b5c3c67 100644 --- a/src/com/bekvon/bukkit/residence/containers/GuiItems.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -1,11 +1,12 @@ package com.bekvon.bukkit.residence.containers; -public enum GuiItems { +public enum Flags { admin(7, 0), animalkilling(365, 0), animals(383, 90), bank(130, 0), bed(355, 0), + beacon(138, 0), brew(379, 0), bucket(325, 0), bucketempty(325, 0), @@ -30,6 +31,7 @@ public enum GuiItems { dryup(160, 11), diode(356, 0), door(324, 0), + egg(344, 0), enchant(116, 0), explode(407, 0), enderpearl(368, 0), @@ -91,7 +93,7 @@ public enum GuiItems { private int id; private int data; - private GuiItems(int id, int data) { + private Flags(int id, int data) { this.id = id; this.data = data; } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 13cf07fbf..08780d292 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -20,6 +20,7 @@ import org.bukkit.permissions.PermissionDefault; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; public class FlagPermissions { @@ -53,6 +54,10 @@ public static EnumMap getMaterialUseFlagList() { return (EnumMap) matUseFlagList; } + public static void addFlag(Flags flag) { + addFlag(flag.toString()); + } + public static void addFlag(String flag) { flag = flag.toLowerCase(); if (!validFlags.contains(flag)) { @@ -114,9 +119,9 @@ public static void initValidFlags() { validPlayerFlags.clear(); validFlags.clear(); validFlagGroups.clear(); - addFlag("egg"); - addFlag("note"); - addFlag("pressure"); + addFlag(Flags.egg); + addFlag(Flags.note); + addFlag(Flags.pressure); addFlag("cake"); addFlag("lever"); addFlag("door"); From 0de598e099e8f2e139c8690fee92d162428c9945 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 18 Jul 2016 16:49:02 +0300 Subject: [PATCH 0212/1142] Use enumerations for Flags including their description Use enumerations for basic locale for simple editing and to avoid misspells Move command locale to appropriate class file for simple editing Fix for couple misspells when grabbing locale line Fix for /resload causing players residence list to be empty --- .../bukkit/residence/CommandFiller.java | 106 ++ .../bukkit/residence/ConfigManager.java | 40 +- .../bukkit/residence/LocaleManager.java | 1488 +---------------- .../bekvon/bukkit/residence/Residence.java | 62 +- .../residence/ResidenceCommandListener.java | 19 +- .../residence/actionBarNMS/v1_10_R1.java | 3 +- .../residence/actionBarNMS/v1_7_R4.java | 3 +- .../residence/actionBarNMS/v1_8_R1.java | 3 +- .../residence/actionBarNMS/v1_8_R2.java | 3 +- .../residence/actionBarNMS/v1_8_R3.java | 3 +- .../residence/actionBarNMS/v1_9_R1.java | 3 +- .../residence/actionBarNMS/v1_9_R2.java | 3 +- .../bekvon/bukkit/residence/allNms/v1_10.java | 30 +- .../bukkit/residence/allNms/v1_10Events.java | 3 +- .../bekvon/bukkit/residence/allNms/v1_7.java | 2 +- .../residence/allNms/v1_7_Couldron.java | 2 +- .../bekvon/bukkit/residence/allNms/v1_8.java | 2 +- .../bukkit/residence/allNms/v1_8Events.java | 9 +- .../bekvon/bukkit/residence/allNms/v1_9.java | 3 +- .../bukkit/residence/allNms/v1_9Events.java | 7 +- .../bukkit/residence/chat/ChatChannel.java | 6 +- .../bukkit/residence/commands/area.java | 52 +- .../bukkit/residence/commands/bank.java | 23 +- .../bukkit/residence/commands/check.java | 22 +- .../bukkit/residence/commands/clearflags.java | 21 +- .../bukkit/residence/commands/command.java | 31 +- .../bukkit/residence/commands/compass.java | 22 +- .../bukkit/residence/commands/confirm.java | 16 +- .../bukkit/residence/commands/contract.java | 31 +- .../bukkit/residence/commands/create.java | 18 +- .../bukkit/residence/commands/current.java | 18 +- .../bukkit/residence/commands/expand.java | 30 +- .../bukkit/residence/commands/flags.java | 39 +- .../bukkit/residence/commands/give.java | 14 +- .../bukkit/residence/commands/gset.java | 19 +- .../bekvon/bukkit/residence/commands/gui.java | 9 +- .../bukkit/residence/commands/info.java | 16 +- .../bukkit/residence/commands/kick.java | 23 +- .../bukkit/residence/commands/lease.java | 59 +- .../bukkit/residence/commands/limits.java | 16 +- .../bukkit/residence/commands/list.java | 17 +- .../bukkit/residence/commands/listall.java | 17 +- .../residence/commands/listallhidden.java | 16 +- .../bukkit/residence/commands/listhidden.java | 17 +- .../bukkit/residence/commands/lists.java | 43 +- .../bukkit/residence/commands/lset.java | 33 +- .../bukkit/residence/commands/market.java | 138 +- .../bukkit/residence/commands/material.java | 19 +- .../bukkit/residence/commands/message.java | 28 +- .../bukkit/residence/commands/mirror.java | 15 +- .../bukkit/residence/commands/padd.java | 20 +- .../bukkit/residence/commands/pdel.java | 16 +- .../bukkit/residence/commands/pset.java | 29 +- .../bekvon/bukkit/residence/commands/rc.java | 71 +- .../bukkit/residence/commands/reload.java | 16 +- .../bukkit/residence/commands/remove.java | 32 +- .../bukkit/residence/commands/removeall.java | 20 +- .../residence/commands/removeworld.java | 14 +- .../bukkit/residence/commands/rename.java | 15 +- .../bukkit/residence/commands/renamearea.java | 17 +- .../bukkit/residence/commands/resadmin.java | 18 +- .../bukkit/residence/commands/resbank.java | 20 +- .../bukkit/residence/commands/reset.java | 14 +- .../bekvon/bukkit/residence/commands/rt.java | 28 +- .../bukkit/residence/commands/select.java | 95 +- .../bukkit/residence/commands/server.java | 24 +- .../bekvon/bukkit/residence/commands/set.java | 25 +- .../bukkit/residence/commands/setmain.java | 21 +- .../bukkit/residence/commands/setowner.java | 23 +- .../bukkit/residence/commands/shop.java | 140 +- .../residence/commands/signconvert.java | 16 +- .../bukkit/residence/commands/signupdate.java | 19 +- .../bukkit/residence/commands/sublist.java | 19 +- .../bukkit/residence/commands/subzone.java | 22 +- .../bukkit/residence/commands/tool.java | 22 +- .../bekvon/bukkit/residence/commands/tp.java | 18 +- .../bukkit/residence/commands/tpconfirm.java | 16 +- .../bukkit/residence/commands/tpset.java | 18 +- .../bukkit/residence/commands/unstuck.java | 20 +- .../bukkit/residence/commands/version.java | 12 +- .../{ => containers}/ABInterface.java | 2 +- .../containers/CommandAnnotation.java | 12 + .../bukkit/residence/containers/Flags.java | 227 ++- .../residence/{ => containers}/NMS.java | 2 +- .../residence/{ => containers}/cmd.java | 5 +- .../bukkit/residence/containers/lm.java | 436 +++++ .../residence/dynmap/DynMapManager.java | 25 +- .../residence/economy/ResidenceBank.java | 17 +- .../residence/economy/TransactionManager.java | 77 +- .../residence/economy/rent/RentManager.java | 135 +- .../bekvon/bukkit/residence/gui/FlagUtil.java | 3 + .../bekvon/bukkit/residence/gui/SetFlag.java | 39 +- .../residence/itemlist/ResidenceItemList.java | 7 +- .../listeners/ResidenceBlockListener.java | 62 +- .../listeners/ResidenceEntityListener.java | 139 +- .../listeners/ResidencePlayerListener.java | 233 +-- .../permissions/PermissionGroup.java | 43 +- .../protection/ClaimedResidence.java | 151 +- .../residence/protection/FlagPermissions.java | 274 +-- .../residence/protection/LeaseManager.java | 17 +- .../protection/PermissionListManager.java | 22 +- .../residence/protection/PlayerManager.java | 5 +- .../protection/ResidenceManager.java | 120 +- .../protection/ResidencePermissions.java | 59 +- .../residence/selection/AutoSelection.java | 7 +- .../residence/selection/SelectionManager.java | 91 +- .../residence/shopStuff/ShopListener.java | 8 +- .../residence/shopStuff/ShopSignUtil.java | 11 +- .../bukkit/residence/signsStuff/SignUtil.java | 29 +- .../residence/spout/ResidenceSpout.java | 11 +- .../bukkit/residence/text/Language.java | 52 +- .../bukkit/residence/text/help/HelpEntry.java | 11 +- .../residence/text/help/InformationPager.java | 57 +- .../bukkit/residence/utils/ActionBar.java | 2 +- .../bukkit/residence/utils/CrackShot.java | 22 +- .../bukkit/residence/utils/RandomTp.java | 5 +- 116 files changed, 3044 insertions(+), 2836 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/CommandFiller.java rename src/com/bekvon/bukkit/residence/{ => containers}/ABInterface.java (85%) create mode 100644 src/com/bekvon/bukkit/residence/containers/CommandAnnotation.java rename src/com/bekvon/bukkit/residence/{ => containers}/NMS.java (96%) rename src/com/bekvon/bukkit/residence/{ => containers}/cmd.java (65%) create mode 100644 src/com/bekvon/bukkit/residence/containers/lm.java diff --git a/src/com/bekvon/bukkit/residence/CommandFiller.java b/src/com/bekvon/bukkit/residence/CommandFiller.java new file mode 100644 index 000000000..39bc1895b --- /dev/null +++ b/src/com/bekvon/bukkit/residence/CommandFiller.java @@ -0,0 +1,106 @@ +package com.bekvon.bukkit.residence; + +import java.lang.reflect.Method; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +import com.bekvon.bukkit.residence.containers.CommandAnnotation; + +public class CommandFiller { + + public final String packagePath = "com.bekvon.bukkit.residence.commands"; + public Map CommandList = new HashMap(); + + public Map fillCommands() { + List lm = new ArrayList(); + HashMap> classes = new HashMap>(); + try { + lm = getClassesFromPackage(packagePath); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + for (String one : lm) { + Class newclass = getClass(one); + if (newclass != null) + classes.put(one, newclass); + } + + for (Entry> OneClass : classes.entrySet()) { + for (Method met : OneClass.getValue().getMethods()) { + if (!met.isAnnotationPresent(CommandAnnotation.class)) + continue; + String cmd = OneClass.getKey(); +// if (hidenCommands.contains(cmd.toLowerCase())) +// continue; + CommandList.put(cmd, met.getAnnotation(CommandAnnotation.class).value()); + break; + } + } + return CommandList; + } + + public static List getClassesFromPackage(String pckgname) throws ClassNotFoundException { + List result = new ArrayList(); + try { + for (URL jarURL : ((URLClassLoader) Residence.class.getClassLoader()).getURLs()) { + try { + result.addAll(getClassesInSamePackageFromJar(pckgname, jarURL.toURI().getPath())); + } catch (URISyntaxException e) { + } + } + } catch (NullPointerException x) { + throw new ClassNotFoundException(pckgname + " does not appear to be a valid package (Null pointer exception)"); + } + + return result; + } + + private static List getClassesInSamePackageFromJar(String packageName, String jarPath) { + JarFile jarFile = null; + List listOfCommands = new ArrayList(); + try { + jarFile = new JarFile(jarPath); + Enumeration en = jarFile.entries(); + while (en.hasMoreElements()) { + JarEntry entry = en.nextElement(); + String entryName = entry.getName(); + packageName = packageName.replace(".", "/"); + if (entryName != null && entryName.endsWith(".class") && entryName.startsWith(packageName)) { + String name = entryName.replace(packageName, "").replace(".class", "").replace("/", ""); + if (name.contains("$")) + name = name.split("\\$")[0]; + listOfCommands.add(name); + } + } + } catch (Exception e) { + } finally { + if (jarFile != null) + try { + jarFile.close(); + } catch (Exception e) { + } + } + return listOfCommands; + } + + private Class getClass(String cmd) { + Class nmsClass = null; + try { + nmsClass = Class.forName(packagePath + "." + cmd.toLowerCase()); + } catch (ClassNotFoundException e) { + } catch (IllegalArgumentException e) { + } catch (SecurityException e) { + } + return nmsClass; + } +} diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index cb3fa3550..6d0cd7490 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -272,35 +272,19 @@ void UpdateFlagFile() { File f = new File(plugin.getDataFolder(), "flags.yml"); YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - Set sections = conf.getConfigurationSection("Global.FlagPermission").getKeys(false); - for (String one : LocaleManager.FlagList) { - if (sections.contains(one.toLowerCase())) - continue; - conf.createSection("Global.FlagPermission." + one.toLowerCase()); - conf.set("Global.FlagPermission." + one.toLowerCase(), false); + for (Flags fl : Flags.values()) { + conf.createSection("Global.FlagPermission." + fl.getName()); + conf.set("Global.FlagPermission." + fl.getName(), fl.isEnabled()); } if (!conf.isConfigurationSection("Global.FlagGui")) conf.createSection("Global.FlagGui"); ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); - Set flagGui = guiSection.getKeys(false); - for (String one : LocaleManager.FlagList) { - if (flagGui.contains(one.toLowerCase())) - continue; - - String lowOne = one.toLowerCase(); - Flags uno = null; - try { - uno = Flags.valueOf(lowOne); - } catch (IllegalArgumentException e) { - } - if (uno == null) - continue; - guiSection.createSection(lowOne); - guiSection.set(lowOne + ".Id", uno.getId()); - guiSection.set(lowOne + ".Data", uno.getData()); + for (Flags fl : Flags.values()) { + guiSection.set(fl.getName() + ".Id", fl.getId()); + guiSection.set(fl.getName() + ".Data", fl.getData()); } try { @@ -317,11 +301,13 @@ public void UpdateGroupedFlagsFile() { if (!conf.isConfigurationSection("Global.GroupedFlags")) { conf.createSection("Global.GroupedFlags"); - conf.set("Global.GroupedFlags.redstone", Arrays.asList("note", "pressure", "lever", "button", "diode")); - conf.set("Global.GroupedFlags.craft", Arrays.asList("brew", "table", "enchant")); - conf.set("Global.GroupedFlags.trusted", Arrays.asList("use", "tp", "build", "container", "bucket", "move", "leash", "animalkilling", "mobkilling", "shear", - "chat")); - conf.set("Global.GroupedFlags.fire", Arrays.asList("ignite", "firespread")); + conf.set("Global.GroupedFlags.redstone", Arrays.asList(Flags.note.getName(), Flags.pressure.getName(), Flags.lever.getName(), Flags.button.getName(), + Flags.diode.getName())); + conf.set("Global.GroupedFlags.craft", Arrays.asList(Flags.brew.getName(), Flags.table.getName(), Flags.enchant.getName())); + conf.set("Global.GroupedFlags.trusted", Arrays.asList(Flags.use.getName(), Flags.tp.getName(), Flags.build.getName(), Flags.container.getName(), Flags.bucket + .getName(), Flags.move.getName(), Flags.leash.getName(), Flags.animalkilling.getName(), Flags.mobkilling.getName(), Flags.shear.getName(), Flags.chat + .getName())); + conf.set("Global.GroupedFlags.fire", Arrays.asList(Flags.ignite.getName(), Flags.firespread.getName())); try { conf.save(f); diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index e0f35fa36..96c3d4dd5 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -6,11 +6,13 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; +import java.lang.reflect.InvocationTargetException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; -import java.util.Set; +import java.util.Map.Entry; import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -18,12 +20,17 @@ import org.bukkit.configuration.file.YamlConfiguration; import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class LocaleManager { public static ArrayList FlagList = new ArrayList(); + public HashMap, List> CommandTab = new HashMap, List>(); private Residence plugin; + public String path = "CommandHelp.SubCommands.res.SubCommands."; + public LocaleManager(Residence plugin) { this.plugin = plugin; } @@ -45,6 +52,7 @@ private static YamlConfiguration loadConfiguration(BufferedReader in, String lan } // Language file + @SuppressWarnings("unchecked") public void LoadLang(String lang) { File f = new File(plugin.getDataFolder(), "Language" + File.separator + lang + ".yml"); @@ -89,416 +97,15 @@ public void LoadLang(String lang) { c.getW().options().header(header.toString()); - c.get("Language.Invalid.Player", "&cInvalid player name..."); - c.get("Language.Invalid.World", "&cInvalid world..."); - c.get("Language.Invalid.Residence", "&cInvalid Residence..."); - c.get("Language.Invalid.Subzone", "&cInvalid Subzone..."); - c.get("Language.Invalid.Direction", "&cInvalid Direction..."); - c.get("Language.Invalid.Amount", "&cInvalid Amount..."); - c.get("Language.Invalid.Cost", "&cInvalid Cost..."); - c.get("Language.Invalid.Days", "&cInvalid number of days..."); - c.get("Language.Invalid.Material", "&cInvalid Material..."); - c.get("Language.Invalid.Boolean", "&cInvalid value, must be &6true(t) &cor &6false(f)"); - c.get("Language.Invalid.Area", "&cInvalid Area..."); - c.get("Language.Invalid.Group", "&cInvalid Group..."); - c.get("Language.Invalid.MessageType", "&cMessage type must be enter or remove."); - c.get("Language.Invalid.Flag", "&cInvalid Flag..."); - c.get("Language.Invalid.FlagState", "&cInvalid flag state, must be &6true(t)&c, &6false(f)&c, or &6remove(r)"); - c.get("Language.Invalid.List", "&eUnknown list type, must be &6blacklist &eor &6ignorelist."); - c.get("Language.Invalid.Page", "&eInvalid Page..."); - c.get("Language.Invalid.Help", "&cInvalid Help Page..."); - c.get("Language.Invalid.NameCharacters", "&cName contained unallowed characters..."); - - c.get("Language.Area.Exists", "&cArea name already exists."); - c.get("Language.Area.Create", "&eResidence Area created, ID &6%1"); - c.get("Language.Area.DiffWorld", "&cArea is in a different world from residence."); - c.get("Language.Area.Collision", "&cArea collides with residence &6%1"); - c.get("Language.Area.SubzoneCollision", "&cArea collides with subzone &6%1"); - c.get("Language.Area.NonExist", "&cNo such area exists."); - c.get("Language.Area.InvalidName", "&cInvalid Area Name..."); - c.get("Language.Area.ToSmallTotal", "&cSelected area smaller than allowed minimal (&6%1&c)"); - c.get("Language.Area.ToSmallX", "&cYour &6X &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more."); - c.get("Language.Area.ToSmallY", "&cYour selection height (&6%1&c) is too small. &eAllowed &6%2 &eand more."); - c.get("Language.Area.ToSmallZ", "&cYour &6Z &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more."); - c.get("Language.Area.Rename", "&eRenamed area &6%1 &eto &6%2"); - c.get("Language.Area.Remove", "&eRemoved area &6%1..."); - c.get("Language.Area.Name", "&eName: &2%1"); - c.get("Language.Area.RemoveLast", "&cCannot remove the last area in a residence."); - c.get("Language.Area.NotWithinParent", "&cArea is not within parent area."); - c.get("Language.Area.Update", "&eArea Updated..."); - c.get("Language.Area.MaxPhysical", "&eYou've reached the max physical areas allowed for your residence."); - c.get("Language.Area.SizeLimit", "&eArea size is not within your allowed limits."); - c.get("Language.Area.HighLimit", "&cYou cannot protect this high up, your limit is &6%1"); - c.get("Language.Area.LowLimit", "&cYou cannot protect this deep, your limit is &6%1"); - - c.get("Language.Select.Points", "&eSelect two points first before using this command!"); - c.get("Language.Select.Overlap", "&cSelected points overlap with &6%1 &cregion!"); - c.get("Language.Select.WorldGuardOverlap", "&cSelected points overlap with &6%1 &cWorldGuard region!"); - c.get("Language.Select.Success", "&eSelection Successful!"); - c.get("Language.Select.Fail", "&cInvalid select command..."); - c.get("Language.Select.Bedrock", "&eSelection expanded to your lowest allowed limit."); - c.get("Language.Select.Sky", "&eSelection expanded to your highest allowed limit."); - c.get("Language.Select.Area", "&eSelected area &6%1 &eof residence &6%2"); - c.get("Language.Select.Tool", "&e- Selection Tool: &6%1"); - c.get("Language.Select.PrimaryPoint", "&ePlaced &6Primary &eSelection Point %1"); - c.get("Language.Select.SecondaryPoint", "&ePlaced &6Secondary &eSelection Point %1"); - c.get("Language.Select.Primary", "&ePrimary selection: &6%1"); - c.get("Language.Select.Secondary", "&eSecondary selection: &6%1"); - c.get("Language.Select.TooHigh", "&cWarning, selection went above top of map, limiting."); - c.get("Language.Select.TooLow", "&cWarning, selection went below bottom of map, limiting."); - c.get("Language.Select.TotalSize", "&eSelection total size: &6%1"); - c.get("Language.Select.AutoEnabled", "&eAuto selection mode turned &6ON&e. To disable it write &6/res select auto"); - c.get("Language.Select.AutoDisabled", "&eAuto selection mode turned &6OFF&e. To enable it again write &6/res select auto"); - c.get("Language.Select.Disabled", "&cYou don't have access to selections commands"); - - c.get("Language.Sign.Updated", "&6%1 &esigns updated!"); - c.get("Language.Sign.TopLine", "[market]"); - c.get("Language.Sign.DateFormat", "YY/MM/dd HH:mm"); - c.get("Language.Sign.ForRentTopLine", "&8For Rent"); - c.get("Language.Sign.ForRentPriceLine", "&8%1&f/&8%2&f/&8%3"); - c.get("Language.Sign.ForRentResName", "&8%1"); - c.get("Language.Sign.ForRentBottomLine", "&9Available"); - c.get("Language.Sign.RentedAutorenewTrue", "&2%1"); - c.get("Language.Sign.RentedAutorenewFalse", "&c%1"); - c.get("Language.Sign.RentedTopLine", "%1"); - c.get("Language.Sign.RentedPriceLine", "&8%1&f/&8%2&f/&8%3"); - c.get("Language.Sign.RentedResName", "&8%1"); - c.get("Language.Sign.RentedBottomLine", "&1%1"); - c.get("Language.Sign.ForSaleTopLine", "&8For Sale"); - c.get("Language.Sign.ForSalePriceLine", "&8%1"); - c.get("Language.Sign.ForSaleResName", "&8%1"); - c.get("Language.Sign.ForSaleBottomLine", "&5Available"); - c.get("Language.Sign.LookAt", "&cYou are not looking at sign"); - - c.get("Language.Flag.Set", "&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"); - c.get("Language.Flag.SetFailed", "&cYou dont have access to &6%1 &cflag"); - c.get("Language.Flag.CheckTrue", "&eFlag &6%1 &eapplies to player &6%2 &efor residence &6%3&e, value = &6%4"); - c.get("Language.Flag.CheckFalse", "&eFlag &6%1 &edoes not apply to player &6%2 &efor residence."); - c.get("Language.Flag.Cleared", "&eFlags Cleared."); - c.get("Language.Flag.RemovedAll", "&eAll flags removed for &6%1 &ein &6%2 &eresidence."); - c.get("Language.Flag.RemovedGroup", "&eAll flags removed for &6%1 &egroup in &6%2 &eresidence."); - c.get("Language.Flag.Default", "&eFlags set to default."); - c.get("Language.Flag.Deny", "&cYou dont have &6%1 &cpermission here."); - c.get("Language.Flag.SetDeny", "&cOwner does not have access to flag &6%1"); - c.get("Language.Flag.ChangeDeny", "&cYou cant change &6%1 &cflag state while there is &6%2 &cplayer(s) inside."); - - c.get("Language.Bank.NoAccess", "&cYou dont have bank access."); - c.get("Language.Bank.Name", " &eBank: &6%1"); - c.get("Language.Bank.NoMoney", "&cNot enough money in the bank."); - c.get("Language.Bank.Deposit", "&eYou deposit &6%1 &einto the residence bank."); - c.get("Language.Bank.Withdraw", "&eYou withdraw &6%1 from the residence bank."); - - c.get("Language.Subzone.Rename", "&eRenamed subzone &6%1 &eto &6%2"); - c.get("Language.Subzone.Remove", "&eSubzone &6%1 &eremoved."); - c.get("Language.Subzone.Create", "&eCreated Subzone &6%1"); - c.get("Language.Subzone.CreateFail", "&cUnable to create subzone &6%1"); - c.get("Language.Subzone.Exists", "&cSubzone &6%1 &calready exists."); - c.get("Language.Subzone.Collide", "&cSubzone collides with subzone &6%1"); - c.get("Language.Subzone.MaxDepth", "&cYou have reached the maximum allowed subzone depth."); - c.get("Language.Subzone.SelectInside", "&eBoth selection points must be inside the residence."); - c.get("Language.Subzone.CantCreate", "&cYou dont have permission to create residence subzone."); - c.get("Language.Subzone.CantDelete", "&cYou dont have permission to delete residence subzone."); - c.get("Language.Subzone.CantDeleteNotOwnerOfParent", "&cYou are not owner of parent residence to delete this subzone."); - c.get("Language.Subzone.CantContract", "&cYou dont have permission to contract residence subzone."); - c.get("Language.Subzone.CantExpand", "&cYou dont have permission to expand residence subzone."); - c.get("Language.Subzone.DeleteConfirm", "&eAre you sure you want to delete subzone &6%1&e, use &6/res confirm &eto confirm."); - c.get("Language.Subzone.OwnerChange", "&eSubzone &6%1 &eowner changed to &6%2"); - - c.get("Language.Residence.Hidden", " &e(&6Hidden&e)"); - c.get("Language.Residence.Bought", "&eYou bought residence &6%1"); - c.get("Language.Residence.Buy", "&6%1 &ehas bought residence &6%2 &efrom you."); - c.get("Language.Residence.BuyTooBig", "&cThis residence has areas bigger then your allowed max."); - c.get("Language.Residence.NotForSale", "&cResidence is not for sale."); - c.get("Language.Residence.ForSale", "&eResidence &6%1 &eis now for sale for &6%2"); - c.get("Language.Residence.StopSelling", "&cResidence is no longer for sale."); - c.get("Language.Residence.TooMany", "&cYou already own the max number of residences your allowed to."); - c.get("Language.Residence.MaxRent", "&cYou already are renting the maximum number of residences your allowed to."); - c.get("Language.Residence.AlreadyRent", "&cResidence is already for rent..."); - c.get("Language.Residence.NotForRent", "&cResidence not for rent..."); - c.get("Language.Residence.NotForRentOrSell", "&cResidence not for rent or sell..."); - c.get("Language.Residence.NotRented", "&cResidence not rented."); - c.get("Language.Residence.Unrent", "&eResidence &6%1 &ehas been unrented."); - c.get("Language.Residence.RemoveRentable", "&eResidence &6%1 &eis no longer rentable."); - c.get("Language.Residence.ForRentSuccess", "&eResidence &6%1 &eis now for rent for &6%2 &eevery &6%3 &edays."); - c.get("Language.Residence.RentSuccess", "&eYou have rented Residence &6%1 &efor &6%2 &edays."); - c.get("Language.Residence.EndingRent", "&eRent time is ending for &6%1 &eon &6%2"); - c.get("Language.Residence.AlreadyRented", "&eResidence &6%1 &ehas currently been rented to &6%2"); - c.get("Language.Residence.CantAutoPay", "&eResidence is not allowing auto pay, it will be set to &6false"); - c.get("Language.Residence.AlreadyExists", "&cA residence named &6%1 &calready exists."); - c.get("Language.Residence.Create", "&eYou have created residence &6%1&e!"); - c.get("Language.Residence.Rename", "&eRenamed Residence &6%1 &eto &6%2"); - c.get("Language.Residence.Remove", "&eResidence &6%1 &ehas been removed..."); - c.get("Language.Residence.MoveDeny", "&cYou dont have movement permission for Residence &6%1"); - c.get("Language.Residence.TeleportNoFlag", "&cYou dont have teleport access for that residence."); - c.get("Language.Residence.FlagDeny", "&cYou dont have &6%1 &cpermission for Residence &6%2"); - c.get("Language.Residence.GiveLimits", "&cCannot give residence to target player, because it is outside the target players limits."); - c.get("Language.Residence.Give", "&eYou give residence &6%1 &eto player &6%2"); - c.get("Language.Residence.Recieve", "&eYou have recieved residence &6%1 &efrom player &6%2"); - c.get("Language.Residence.ResList", " &a%1. &e%2 &e- &6%3 %4&6%5"); - c.get("Language.Residence.List", " &e%2 &e- &6%3"); - c.get("Language.Residence.TeleportNear", "&eTeleported to near residence."); - c.get("Language.Residence.SetTeleportLocation", "&eTeleport Location Set..."); - c.get("Language.Residence.PermissionsApply", "&ePermissions applied to residence."); - c.get("Language.Residence.NotOwner", "&cYou are not owner of this residence"); - c.get("Language.Residence.RemovePlayersResidences", "&eRemoved all residences belonging to player &6%1"); - c.get("Language.Residence.NotIn", "&cYou are not in a Residence."); - c.get("Language.Residence.PlayerNotIn", "&cPlayer standing not in your Residence area."); - c.get("Language.Residence.Kicked", "&eYou were kicked from residence"); - c.get("Language.Residence.In", "&eYou are standing in Residence &6%1"); - c.get("Language.Residence.OwnerChange", "&eResidence &6%1 &eowner changed to &6%2"); - c.get("Language.Residence.NonAdmin", "&cYou are not a Residence admin."); - c.get("Language.Residence.Line", "&eResidence: &6%1 "); - c.get("Language.Residence.RentedBy", "&eRented by: &6%1"); - c.get("Language.Residence.MessageChange", "&eMessage Set..."); - c.get("Language.Residence.CantDeleteResidence", "&cYou dont have permission to delete residence."); - c.get("Language.Residence.CantExpandResidence", "&cYou dont have permission to expand residence."); - c.get("Language.Residence.CantContractResidence", "&cYou dont have permission to contract residence."); - c.get("Language.Residence.NoResHere", "&cThere is no residence in there."); - c.get("Language.Residence.OwnerNoPermission", "&cThe owner does not have permission for this."); - c.get("Language.Residence.ParentNoPermission", "&cYou don't have permission to make changes to the parent zone."); - c.get("Language.Residence.ChatDisabled", "&eResidence Chat Disabled..."); - c.get("Language.Residence.DeleteConfirm", "&eAre you sure you want to delete residence &6%1&e, use &6/res confirm &eto confirm."); - c.get("Language.Residence.ChangedMain", "&eChainged main residence to &6%1"); - - c.get("Language.Residence.CanBeRented", "&6%1&e can be rented for &6%2 &eper &6%3 &edays. &6/res market rent"); - c.get("Language.Residence.CanBeBought", "&6%1&e can be bought for &6%2&e. &6/res market buy"); - - c.get("Language.Residence.IsForRent", "&6(For rent)"); - c.get("Language.Residence.IsForSale", "&6(For sale)"); - c.get("Language.Residence.IsRented", "&6(Rented)"); - - c.get("Language.Rent.Disabled", "&cRent is disabled..."); - c.get("Language.Rent.DisableRenew", "&eResidence &6%1 &ewill now no longer re-rent upon expire."); - c.get("Language.Rent.EnableRenew", "&eResidence &6%1 &ewill now automatically re-rent upon expire."); - c.get("Language.Rent.NotByYou", "&cResidence is rented not by you."); - c.get("Language.Rent.isForRent", "&2Residence available for renting."); - c.get("Language.Rent.MaxRentDays", "&cYou cant rent for more than &6%1 &cdays at once."); - c.get("Language.Rent.OneTime", "&cCan't extend rent time for this residence."); - c.get("Language.Rent.Extended", "&eRent extended for aditional &6%1 &edays for &6%2 &eresidence"); - c.get("Language.Rent.Expire", "&eRent Expire Time: &6%1"); - c.get("Language.Rent.AutoPayTurnedOn", "&eAutoPay is turned &2ON"); - c.get("Language.Rent.AutoPayTurnedOff", "&eAutoPay is turned &cOFF"); - c.get("Language.Rent.ModifyDeny", "&cCannot modify a rented residence."); - c.get("Language.Rent.Days", "&eRent days: &6%1"); - c.get("Language.Rent.Rented", " &6(Rented)"); - c.get("Language.Rent.RentList", " &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7"); - - c.get("Language.Rent.EvictConfirm", "&eWrite &6/res market confirm &eto evict renter from &6%1 &eresidence"); - c.get("Language.Rent.UnrentConfirm", "&eWrite &6/res market confirm &eto unrent &6%1 &eresidence"); - c.get("Language.Rent.ReleaseConfirm", "&eWrite &6/res market confirm &eto remove &6%1 &eresidence from market"); - - c.get("Language.command.addedAllow", "&eAdded new allowed command for &6%1 &eresidence"); - c.get("Language.command.removedAllow", "&eRemoved allowed command for &6%1 &eresidence"); - c.get("Language.command.addedBlock", "&eAdded new blocked command for &6%1 &eresidence"); - c.get("Language.command.removedBlock", "&eRemoved blocked command for &6%1 &eresidence"); - c.get("Language.command.Blocked", "&eBlocked commands: &6%1"); - c.get("Language.command.Allowed", "&eAllowed commands: &6%1"); - - c.get("Language.Rentable.Land", "&eRentable Land: &6"); - c.get("Language.Rentable.AllowRenewing", "&eCan Renew: &6%1"); - c.get("Language.Rentable.StayInMarket", "&eRentable stay in market: &6%1"); - c.get("Language.Rentable.AllowAutoPay", "&eRentable allows auto pay: &6%1"); - c.get("Language.Rentable.DisableRenew", "&6%1 &ewill no longer renew rentable status upon expire."); - c.get("Language.Rentable.EnableRenew", "&6%1 &ewill now automatically renew rentable status upon expire."); - - c.get("Language.Economy.LandForSale", "&eLand For Sale:"); - c.get("Language.Economy.NotEnoughMoney", "&cYou dont have enough money."); - c.get("Language.Economy.MoneyCharged", "&eCharged &6%1 &eto your &6%2 &eaccount."); - c.get("Language.Economy.MoneyAdded", "&eGot &6%1 &eto your &6%2 &eaccount."); - c.get("Language.Economy.MoneyCredit", "&eCredited &6%1 &eto your &6%2 &eaccount."); - c.get("Language.Economy.RentReleaseInvalid", "&eResidence &6%1 &eis not rented or for rent."); - c.get("Language.Economy.RentSellFail", "&cCannot sell a Residence if it is for rent."); - c.get("Language.Economy.SellRentFail", "&cCannot rent a Residence if it is for sale."); - c.get("Language.Economy.OwnerBuyFail", "&cCannot buy your own land!"); - c.get("Language.Economy.OwnerRentFail", "&cCannot rent your own land!"); - c.get("Language.Economy.AlreadySellFail", "&eResidence already for sale!"); - c.get("Language.Economy.LeaseRenew", "&eLease valid until &6%1"); - c.get("Language.Economy.LeaseRenewMax", "&eLease renewed to maximum allowed"); - c.get("Language.Economy.LeaseNotExpire", "&eNo such lease, or lease does not expire."); - c.get("Language.Economy.LeaseRenewalCost", "&eRenewal cost for area &6%1 &eis &6%2"); - c.get("Language.Economy.LeaseInfinite", "&eLease time set to infinite..."); - c.get("Language.Economy.MarketDisabled", "&cEconomy Disabled!"); - c.get("Language.Economy.SellAmount", "&eSell Amount: &2%1"); - c.get("Language.Economy.SellList", " &6%1&e. &6%2 &e(&6%3&e) - &6%4"); - c.get("Language.Economy.LeaseExpire", "&eLease Expire Time: &2%1"); - - c.get("Language.Expanding.North", "&eExpanding North &6%1 &eblocks"); - c.get("Language.Expanding.West", "&eExpanding West &6%1 &eblocks"); - c.get("Language.Expanding.South", "&eExpanding South &6%1 &eblocks"); - c.get("Language.Expanding.East", "&eExpanding East &6%1 &eblocks"); - c.get("Language.Expanding.Up", "&eExpanding Up &6%1 &eblocks"); - c.get("Language.Expanding.Down", "&eExpanding Down &6%1 &eblocks"); - - c.get("Language.Contracting.North", "&eContracting North &6%1 &eblocks"); - c.get("Language.Contracting.West", "&eContracting West &6%1 &eblocks"); - c.get("Language.Contracting.South", "&eContracting South &6%1 &eblocks"); - c.get("Language.Contracting.East", "&eContracting East &6%1 &eblocks"); - c.get("Language.Contracting.Up", "&eContracting Up &6%1 &eblocks"); - c.get("Language.Contracting.Down", "&eContracting Down &6%1 &eblocks"); + for (lm lm : lm.values()) { + if (lm.getText() instanceof String) + c.get(lm.getPath(), String.valueOf(lm.getText())); + else if (lm.getText() instanceof ArrayList) + c.get(lm.getPath(), (ArrayList) lm.getText()); - c.get("Language.Shifting.North", "&eShifting North &6%1 &eblocks"); - c.get("Language.Shifting.West", "&eShifting West &6%1 &eblocks"); - c.get("Language.Shifting.South", "&eShifting South &6%1 &eblocks"); - c.get("Language.Shifting.East", "&eShifting East &6%1 &eblocks"); - c.get("Language.Shifting.Up", "&eShifting Up &6%1 &eblocks"); - c.get("Language.Shifting.Down", "&eShifting Down &6%1 &eblocks"); - - c.get("Language.Limits.PGroup", "&7- &ePermissions Group:&3 %1"); - c.get("Language.Limits.RGroup", "&7- &eResidence Group:&3 %1"); - c.get("Language.Limits.Admin", "&7- &eResidence Admin:&3 %1"); - c.get("Language.Limits.CanCreate", "&7- &eCan Create Residences:&3 %1"); - c.get("Language.Limits.MaxRes", "&7- &eMax Residences:&3 %1"); - c.get("Language.Limits.MaxEW", "&7- &eMax East/West Size:&3 %1"); - c.get("Language.Limits.MaxNS", "&7- &eMax North/South Size:&3 %1"); - c.get("Language.Limits.MaxUD", "&7- &eMax Up/Down Size:&3 %1"); - c.get("Language.Limits.MinMax", "&7- &eMin/Max Protection Height:&3 %1 to %2"); - c.get("Language.Limits.MaxSub", "&7- &eMax Subzone Depth:&3 %1"); - c.get("Language.Limits.MaxRents", "&7- &eMax Rents:&3 %1"); - c.get("Language.Limits.MaxRentDays", " &eMax Rent days:&3 %1"); - c.get("Language.Limits.EnterLeave", "&7- &eCan Set Enter/Leave Messages:&3 %1"); - c.get("Language.Limits.NumberOwn", "&7- &eNumber of Residences you own:&3 %1"); - c.get("Language.Limits.Cost", "&7- &eResidence Cost Per Block:&3 %1"); - c.get("Language.Limits.Sell", "&7- &eResidence Sell Cost Per Block:&3 %1"); - c.get("Language.Limits.Flag", "&7- &eFlag Permissions:&3 %1"); - c.get("Language.Limits.MaxDays", "&7- &eMax Lease Days:&3 %1"); - c.get("Language.Limits.LeaseTime", "&7- &eLease Time Given on Renew:&3 %1"); - c.get("Language.Limits.RenewCost", "&7- &eRenew Cost Per Block:&3 %1"); - - c.get("Language.Gui.Set.Title", "&6%1 flags"); - c.get("Language.Gui.Pset.Title", "&6%1 %2 flags"); - c.get("Language.Gui.Actions", Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove")); - - c.get("Language.InformationPage.TopLine", "&e---< &a %1 &e >---"); - c.get("Language.InformationPage.Page", "&e-----< &6%1 &e>-----"); - c.get("Language.InformationPage.NextPage", "&e-----< &6%1 &e>-----"); - c.get("Language.InformationPage.NoNextPage", "&e-----------------------"); - - c.get("Language.Chat.ChatChannelChange", "&eChanged residence chat channel to &6%1!"); - c.get("Language.Chat.ChatChannelLeave", "&eLeft residence chat"); - - c.get("Language.Chat.JoinFirst", "&4Join residence chat channel first..."); - c.get("Language.Chat.InvalidChannel", "&4Invalid Channel..."); - c.get("Language.Chat.InvalidColor", "&4Incorrect color code"); - c.get("Language.Chat.NotInChannel", "&4Player is not in channel"); - c.get("Language.Chat.Kicked", "&6%1 &ewas kicked from &6%2 &echannel"); - c.get("Language.Chat.InvalidPrefixLength", "&4Prefix is to long. Allowed length: %1"); - c.get("Language.Chat.ChangedColor", "&eResidence chat channel color changed to %1"); - c.get("Language.Chat.ChangedPrefix", "&eResidence chat channel prefix changed to %1"); - - c.get("Language.Shop.ListTopLine", "&6%1 &eShop list - Page &6%2 &eof &6%3 %4"); - c.get("Language.Shop.List", " &e%1. &6%2 &e(&6%3&e) %4"); - c.get("Language.Shop.ListVoted", "&e%1 (&6%2&e)"); - c.get("Language.Shop.ListLiked", "&eLikes: &0%1"); - - c.get("Language.Shop.VotesTopLine", "&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5"); - c.get("Language.Shop.VotesList", " &e%1. &6%2 &e%3 &7%4"); - - c.get("Language.Shop.NoDesc", "&6No description"); - c.get("Language.Shop.Desc", "&6Description:\n%1"); - c.get("Language.Shop.DescChange", "&6Description changed to: %1"); - c.get("Language.Shop.NewBoard", "&6Successfully added new shop sign board"); - c.get("Language.Shop.DeleteBoard", "&6Right click sign of board you want to delete"); - c.get("Language.Shop.DeletedBoard", "&6Sign board removed"); - c.get("Language.Shop.IncorrectBoard", "&cThis is not sign board, try performing command again and clicking correct sign"); - c.get("Language.Shop.InvalidSelection", "&cLeft click with selection tool top left sign and then right click bottom right"); - c.get("Language.Shop.VoteChanged", "&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence"); - c.get("Language.Shop.Voted", "&6You voted, and gave &e%1 &6votes to &e%2 &6residence"); - c.get("Language.Shop.Liked", "&6You liked &e%1 &6residence"); - c.get("Language.Shop.AlreadyLiked", "&6You already liked &e%1 &6residence"); - c.get("Language.Shop.NoVotes", "&cThere is no registered votes for this residence"); - c.get("Language.Shop.CantVote", "&cResidence don't have shop flag set to true"); - c.get("Language.Shop.VotedRange", "&6Vote range is from &e%1 &6to &e%2"); - c.get("Language.Shop.SignLines.1", "&e--== &8%1 &e==--"); - c.get("Language.Shop.SignLines.2", "&9%1"); - c.get("Language.Shop.SignLines.3", "&4%1"); - c.get("Language.Shop.SignLines.4", "&8%1&e (&8%2&e)"); - c.get("Language.Shop.SignLines.Likes4", "&9Likes: &8%2"); - - c.get("Language.RandomTeleport.TpLimit", "&eYou can't teleport so fast, please wait &6%1 &esec and try again"); - c.get("Language.RandomTeleport.TeleportSuccess", "&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation"); - c.get("Language.RandomTeleport.IncorrectLocation", "&6Could not find correct teleport location, please wait &e%1 &6sec and try again."); - c.get("Language.RandomTeleport.TeleportStarted", "&eTeleportation started, don't move for next &6%4 &esec."); - c.get("Language.RandomTeleport.WorldList", "&ePossible worlds: &6%1"); - - c.get("Language.General.DisabledWorld", "&cResidence plugin is disabled in this world"); - c.get("Language.General.UseNumbers", "&cPlease use numbers..."); - writer.addComment("Language.CantPlaceLava", "Replace all text with '' to disable this message"); - c.get("Language.General.CantPlaceLava", "&cYou can't place lava outside residence and higher than &6%1 &cblock level"); - writer.addComment("Language.CantPlaceWater", "Replace all text with '' to disable this message"); - c.get("Language.General.CantPlaceWater", "&cYou can't place Water outside residence and higher than &6%1 &cblock level"); - c.get("Language.General.NoPermission", "&cYou dont have permission for this."); - c.get("Language.General.NoCmdPermission", "&cYou dont have permission for this command."); - c.get("Language.General.DefaultUsage", "&eType &6/%1 ? &efor more info"); - c.get("Language.General.MaterialGet", "&eThe material name for ID &6%1 &eis &6%2"); - c.get("Language.General.MarketList", "&e---- &6Market List &e----"); - c.get("Language.General.Separator", "&e----------------------------------------------------"); - c.get("Language.General.AdminOnly", "&cOnly admins have access to this command."); - c.get("Language.General.InfoTool", "&e- Info Tool: &6%1"); - c.get("Language.General.ListMaterialAdd", "&6%1 &eadded to the residence &6%2"); - c.get("Language.General.ListMaterialRemove", "&6%1 &eremoved from the residence &6%2"); - c.get("Language.General.ItemBlacklisted", "&cYou are blacklisted from using this item here."); - c.get("Language.General.WorldPVPDisabled", "&cWorld PVP is disabled."); - c.get("Language.General.NoPVPZone", "&cNo PVP zone."); - c.get("Language.General.InvalidHelp", "&cInvalid help page."); - - c.get("Language.General.TeleportDeny", "&cYou dont have teleport access."); - c.get("Language.General.TeleportSuccess", "&eTeleported!"); - c.get("Language.General.TeleportConfirm", - "&cThis teleport is not safe, you will fall for &6%1 &cblocks. Use &6/res tpconfirm &cto perform teleportation anyways."); - c.get("Language.General.TeleportStarted", "&eTeleportation to &6%1 &estarted, don't move for next &6%2 &esec."); - c.get("Language.General.TeleportTitle", "&eTeleporting!"); - c.get("Language.General.TeleportTitleTime", "&6%1"); - c.get("Language.General.TeleportCanceled", "&eTeleportation canceled!"); - c.get("Language.General.NoTeleportConfirm", "&eThere is no teleports waiting for confirmation!"); - c.get("Language.General.HelpPageHeader", "&eHelp Pages - &6%1 &e- Page <&6%2 &eof &6%3&e>"); - c.get("Language.General.ListExists", "&cList already exists..."); - c.get("Language.General.ListRemoved", "&eList removed..."); - c.get("Language.General.ListCreate", "&eCreated list &6%1"); - c.get("Language.General.PhysicalAreas", "&ePhysical Areas"); - c.get("Language.General.CurrentArea", "&eCurrent Area: &6%1"); - c.get("Language.General.TotalResSize", "&eTotal size: &6%1m\u00B3 (%2m\u00B2)"); - c.get("Language.General.TotalWorth", "&eTotal worth of residence: &6%1 &e(&6%2&e)"); - c.get("Language.General.NotOnline", "&eTarget player must be online."); - c.get("Language.General.NextPage", "&eNext Page"); - c.get("Language.General.NextInfoPage", "&2| &eNext Page &2>>>"); - c.get("Language.General.PrevInfoPage", "&2<<< &ePrev Page &2|"); - c.get("Language.General.GenericPages", "&ePage &6%1 &eof &6%2 &e(&6%3&e)"); - c.get("Language.General.WorldEditNotFound", "&cWorldEdit was not detected."); - c.get("Language.General.CoordsTop", "&eX:&6%1 &eY:&6%2 &eZ:&6%3"); - c.get("Language.General.CoordsBottom", "&eX:&6%1 &eY:&6%2 &eZ:&6%3"); - c.get("Language.General.AdminToggleTurnOn", "&eAutomatic resadmin toggle turned &6On"); - c.get("Language.General.AdminToggleTurnOff", "&eAutomatic resadmin toggle turned &6Off"); - c.get("Language.General.NoSpawn", "&eYou do not have &6move &epermissions at your spawn point. Relocating"); - c.get("Language.General.CompassTargetReset", "&eYour compass has been reset"); - c.get("Language.General.CompassTargetSet", "&eYour compass now points to &6%1"); - c.get("Language.General.Ignorelist", "&2Ignorelist:&6"); - c.get("Language.General.Blacklist", "&cBlacklist:&6"); - c.get("Language.General.LandCost", "&eLand cost: &6%1"); - c.get("Language.General.True", "&2True"); - c.get("Language.General.False", "&cFalse"); - c.get("Language.General.Removed", "&6Removed"); - c.get("Language.General.FlagState", "&eFlag state: %1"); - c.get("Language.General.Land", "&eLand: &6%1"); - c.get("Language.General.Cost", "&eCost: &6%1 &eper &6%2 &edays"); - c.get("Language.General.Status", "&eStatus: %1"); - c.get("Language.General.Available", "&2Available"); - c.get("Language.General.Size", " &eSize: &6%1"); - c.get("Language.General.ResidenceFlags", "&eResidence flags: &6%1"); - c.get("Language.General.PlayersFlags", "&ePlayers flags: &6%1"); - c.get("Language.General.GroupFlags", "&eGroup flags: &6%1"); - c.get("Language.General.OthersFlags", "&eOthers flags: &6%1"); - c.get("Language.General.Moved", "&eMoved..."); - c.get("Language.General.Name", "&eName: &6%1"); - c.get("Language.General.Lists", "&eLists: &6"); - c.get("Language.General.Residences", "&eResidences&6"); - c.get("Language.General.CreatedOn", "&eCreated on: &6%1"); - c.get("Language.General.Owner", "&eOwner: &6%1"); - c.get("Language.General.World", "&eWorld: &6%1"); - c.get("Language.General.Subzones", "&eSubzones"); - writer.addComment("Language.General.NewPlayerInfo", "The below lines represent various messages residence sends to the players.", - "Note that some messages have variables such as %1 that are inserted at runtime."); - c.get("Language.General.NewPlayerInfo", - "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName"); + if (lm.getComments() != null) + writer.addComment(lm.getPath(), lm.getComments()); + } writer.addComment("CommandHelp", ""); @@ -506,1050 +113,21 @@ public void LoadLang(String lang) { c.get("CommandHelp.SubCommands.res.Description", "Main Residence Command"); c.get("CommandHelp.SubCommands.res.Info", Arrays.asList("&2Use &6/res [command] ? &2to view more help Information.")); - // res select - c.get("CommandHelp.SubCommands.res.SubCommands.select.Description", "Selection Commands"); - c.get("CommandHelp.SubCommands.res.SubCommands.select.Info", - Arrays.asList("This command selects areas for usage with residence.", "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle.")); - - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Description", "Display selected coordinates"); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.coords.Info", Arrays.asList("&eUsage: &6/res select coords")); - - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Description", "Display selected size"); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.size.Info", Arrays.asList("&eUsage: &6/res select size")); - - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Description", "Turns on auto selection tool"); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]")); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.auto.Args", "[playername]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Description", "Display selection cost"); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.cost.Info", Arrays.asList("&eUsage: &6/res select cost")); - - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Description", "Expand Selection Vertically"); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.vert.Info", - Arrays.asList("&eUsage: &6/res select vert", "Will expand selection as high and as low as allowed.")); - - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Description", "Expand Selection to Sky"); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.sky.Info", Arrays.asList("&eUsage: &6/res select sky", - "Expands as high as your allowed to go.")); - - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Description", "Expand Selection to Bedrock"); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.bedrock.Info", - Arrays.asList("&eUsage: &6/res select bedrock", "Expands as low as your allowed to go.")); - - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Description", "Expand selection in a direction."); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.expand.Info", - Arrays.asList("&eUsage: &6/res select expand ", "Expands in the direction your looking.")); - - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Description", "Shift selection in a direction"); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.shift.Info", - Arrays.asList("&eUsage: &6/res select shift ", "Pushes your selection by in the direction your looking.")); - - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Description", "Select the chunk your currently in."); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.chunk.Info", - Arrays.asList("&eUsage: &6/res select chunk", "Selects the chunk your currently standing in.")); - - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Description", "Select a existing area in a residence."); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Info", - Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence.")); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.residence.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Description", "Set selection using the current WorldEdit selection."); - c.get("CommandHelp.SubCommands.res.SubCommands.select.SubCommands.worldedit.Info", - Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection.")); - - // res create - c.get("CommandHelp.SubCommands.res.SubCommands.create.Description", "Create Residences"); - c.get("CommandHelp.SubCommands.res.SubCommands.create.Info", Arrays.asList("&eUsage: &6/res create ")); - - // res remove - c.get("CommandHelp.SubCommands.res.SubCommands.remove.Description", "Remove residences."); - c.get("CommandHelp.SubCommands.res.SubCommands.remove.Info", Arrays.asList("&eUsage: &6/res remove ")); - c.get("CommandHelp.SubCommands.res.SubCommands.remove.Args", "[residence]"); - - // res padd - c.get("CommandHelp.SubCommands.res.SubCommands.padd.Description", "Add player to residence."); - c.get("CommandHelp.SubCommands.res.SubCommands.padd.Info", Arrays.asList("&eUsage: &6/res padd [player]", - "Adds essential flags for player")); - c.get("CommandHelp.SubCommands.res.SubCommands.padd.Args", "[residence] [playername]"); - - // res pdel - c.get("CommandHelp.SubCommands.res.SubCommands.pdel.Description", "Remove player from residence."); - c.get("CommandHelp.SubCommands.res.SubCommands.pdel.Info", Arrays.asList("&eUsage: &6/res pdel [player]", - "Removes essential flags from player")); - c.get("CommandHelp.SubCommands.res.SubCommands.pdel.Args", "[residence] [playername]"); - - // res give - c.get("CommandHelp.SubCommands.res.SubCommands.give.Description", "Give residence to player."); - c.get("CommandHelp.SubCommands.res.SubCommands.give.Info", Arrays.asList("&eUsage: &6/res give [player]", - "Gives your owned residence to target player")); - c.get("CommandHelp.SubCommands.res.SubCommands.give.Args", "[residence] [playername]"); - - // res info - c.get("CommandHelp.SubCommands.res.SubCommands.info.Description", "Show info on a residence."); - c.get("CommandHelp.SubCommands.res.SubCommands.info.Info", - Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in.")); - c.get("CommandHelp.SubCommands.res.SubCommands.info.Args", "[residence]"); - - // res set - c.get("CommandHelp.SubCommands.res.SubCommands.set.Description", "Set general flags on a Residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.set.Info", Arrays.asList("&eUsage: &6/res set [flag] [true/false/remove]", - "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)")); - c.get("CommandHelp.SubCommands.res.SubCommands.set.Args", "[residence] [flag] [true/false/remove]"); - - // res pset - c.get("CommandHelp.SubCommands.res.SubCommands.pset.Description", "Set flags on a specific player for a Residence."); - c.get("CommandHelp.SubCommands.res.SubCommands.pset.Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", - "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?")); - c.get("CommandHelp.SubCommands.res.SubCommands.pset.Args", "[residence] [playername] [flag] [true/false/remove]"); - - // res flags - c.get("CommandHelp.SubCommands.res.SubCommands.flags.Description", "List of flags"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.Info", - Arrays.asList("For flag values, usually true allows the action, and false denys the action.")); - - FlagList.clear(); - // build - FlagList.add("build"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.build.Description", - "allows or denys building"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.build.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // use - FlagList.add("use"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.use.Description", - "allows or denys use of doors, lever, buttons, etc..."); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.use.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // move - FlagList.add("move"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.move.Description", - "allows or denys movement in the residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.move.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // container - FlagList.add("container"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.container.Description", - "allows or denys use of furnaces, chests, dispensers, etc..."); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.container.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // trusted - FlagList.add("trusted"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trusted.Description", - "gives build, use, move, container and tp flags"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trusted.Info", - Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove")); - // place - FlagList.add("place"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.place.Description", - "allows or denys only placement of blocks, overrides the build flag"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.place.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // destroy - FlagList.add("destroy"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.destroy.Description", - "allows or denys only destruction of blocks, overrides the build flag"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.destroy.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // pvp - FlagList.add("pvp"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pvp.Description", - "allow or deny pvp in the residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pvp.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // tp - FlagList.add("tp"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tp.Description", - "allow or disallow teleporting to the residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tp.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // enderpearl - FlagList.add("enderpearl"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enderpearl.Description", - "allow or disallow teleporting to the residence with enderpearl"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enderpearl.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // chorustp - FlagList.add("chorustp"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chorustp.Description", - "allow or disallow teleporting to the residence with chorus fruit"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chorustp.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // admin - FlagList.add("admin"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.admin.Description", - "gives a player permission to change flags on a residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.admin.Info", - Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove")); - // subzone - FlagList.add("subzone"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.subzone.Description", - "allow a player to make subzones in the residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.subzone.Info", - Arrays.asList("&eUsage: &6/res pset [flag] true/false/remove")); - // monsters - FlagList.add("monsters"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.monsters.Description", - "allows or denys monster spawns"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.monsters.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // cmonsters - FlagList.add("cmonsters"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cmonsters.Description", - "allows or denys custom monster spawns"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cmonsters.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // smonsters - FlagList.add("smonsters"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.smonsters.Description", - "allows or denys spawner or spawn egg monster spawns"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.smonsters.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // nmonsters - FlagList.add("nmonsters"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nmonsters.Description", - "allows or denys natural monster spawns"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nmonsters.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // animals - FlagList.add("animals"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animals.Description", - "allows or denys animal spawns"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animals.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // canimals - FlagList.add("canimals"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.canimals.Description", - "allows or denys custom animal spawns"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.canimals.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // sanimals - FlagList.add("sanimals"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.sanimals.Description", - "allows or denys spawner or spawn egg animal spawns"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.sanimals.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // nanimals - FlagList.add("nanimals"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nanimals.Description", - "allows or denys natural animal spawns"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nanimals.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // animalkilling - FlagList.add("animalkilling"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animalkilling.Description", - "allows or denys animal killing"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.animalkilling.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // mobkilling - FlagList.add("mobkilling"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobkilling.Description", - "allows or denys mob killing"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobkilling.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // nofly - FlagList.add("nofly"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nofly.Description", - "allows or denys fly in residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nofly.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // vehicledestroy - FlagList.add("vehicledestroy"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.vehicledestroy.Description", - "allows or denys vehicle destroy"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.vehicledestroy.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // shear - FlagList.add("shear"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shear.Description", - "allows or denys sheep shear"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shear.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // dye - FlagList.add("dye"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dye.Description", - "allows or denys sheep dyeing"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dye.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // leash - FlagList.add("leash"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.leash.Description", - "allows or denys aninal leash"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.leash.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // hook - FlagList.add("hook"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hook.Description", - "allows or denys fishing rod hooking entities"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hook.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // healing - FlagList.add("healing"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.healing.Description", - "setting to true makes the residence heal its occupants"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.healing.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // feed - FlagList.add("feed"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.feed.Description", - "setting to true makes the residence feed its occupants"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.feed.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // tnt - FlagList.add("tnt"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tnt.Description", - "allow or deny tnt explosions"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.tnt.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // creeper - FlagList.add("creeper"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.creeper.Description", - "allow or deny creeper explosions"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.creeper.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // ignite - FlagList.add("ignite"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.ignite.Description", - "allows or denys fire ignition"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.ignite.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // firespread - FlagList.add("firespread"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.firespread.Description", - "allows or denys fire spread"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.firespread.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // bucket - FlagList.add("bucket"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucket.Description", - "allow or deny bucket use"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucket.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // bucketfill - FlagList.add("bucketfill"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketfill.Description", - "allow or deny bucket fill"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketfill.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // bucketempty - FlagList.add("bucketempty"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketempty.Description", - "allow or deny bucket empty"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bucketempty.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // flow - FlagList.add("flow"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.flow.Description", - "allows or denys liquid flow"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.flow.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // lavaflow - FlagList.add("lavaflow"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lavaflow.Description", - "allows or denys lava flow, overrides flow"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lavaflow.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // waterflow - FlagList.add("waterflow"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.waterflow.Description", - "allows or denys water flow, overrides flow"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.waterflow.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // damage - FlagList.add("damage"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.damage.Description", - "allows or denys all entity damage within the residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.damage.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // piston - FlagList.add("piston"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.piston.Description", - "allow or deny pistons from pushing or pulling blocks in the residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.piston.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // pistonprotection - FlagList.add("pistonprotection"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pistonprotection.Description", - "Enables or disabled piston block move in or out of residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pistonprotection.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // hidden - FlagList.add("hidden"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hidden.Description", - "hides residence from list or listall commands"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hidden.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // cake - FlagList.add("cake"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cake.Description", - "allows or denys players to eat cake"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.cake.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // lever - FlagList.add("lever"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lever.Description", - "allows or denys players to use levers"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.lever.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // button - FlagList.add("button"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.button.Description", - "allows or denys players to use buttons"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.button.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // diode - FlagList.add("diode"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.diode.Description", - "allows or denys players to use redstone repeaters"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.diode.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // door - FlagList.add("door"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.door.Description", - "allows or denys players to use doors and trapdoors"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.door.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // table - FlagList.add("table"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.table.Description", - "allows or denys players to use workbenches"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.table.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // enchant - FlagList.add("enchant"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enchant.Description", - "allows or denys players to use enchanting tables"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.enchant.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // brew - FlagList.add("brew"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.brew.Description", - "allows or denys players to use brewing stands"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.brew.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // bed - FlagList.add("bed"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bed.Description", - "allows or denys players to use beds"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bed.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // pressure - FlagList.add("pressure"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pressure.Description", - "allows or denys players to use pressure plates"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.pressure.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // note - FlagList.add("note"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.note.Description", - "allows or denys players to use note blocks"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.note.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // redstone - FlagList.add("redstone"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.redstone.Description", - "Gives lever, diode, button, pressure, note flags"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.redstone.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // craft - FlagList.add("craft"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.craft.Description", - "Gives table, enchant, brew flags"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.craft.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // trample - FlagList.add("trample"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trample.Description", - "Allows or denys crop trampling in residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trample.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // dryup - FlagList.add("dryup"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dryup.Description", - "Prevents land from drying up"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dryup.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // trade - FlagList.add("trade"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trade.Description", - "Allows or denys villager trading in residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.trade.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // nomobs - FlagList.add("nomobs"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nomobs.Description", - "Prevents monsters from entering residence residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nomobs.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // explode - FlagList.add("explode"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.explode.Description", - "Allows or denys explosions in residences"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.explode.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); -// // witherdamage -// FlagList.add("witherdamage"); -// c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.witherdamage.Description", -// "Disables wither damage in residences"); -// c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.witherdamage.Info", -// Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // fireball - FlagList.add("fireball"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.fireball.Description", - "Allows or denys fire balls in residences"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.fireball.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // command - FlagList.add("command"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.command.Description", - "Allows or denys comamnd use in residences"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.command.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // overridepvp - FlagList.add("overridepvp"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.overridepvp.Description", - "Overrides any plugin pvp protection"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.overridepvp.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // keepinv - FlagList.add("keepinv"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepinv.Description", - "Players keeps inventory after death"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepinv.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // keepexp - FlagList.add("keepexp"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepexp.Description", - "Players keeps exp after death"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.keepexp.Info", - Arrays.asList("&eUsage: &6/res set/pset [flag] true/false/remove")); - // burn - FlagList.add("burn"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.burn.Description", - "allows or denys Mob combustion in residences"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.burn.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // bank - FlagList.add("bank"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bank.Description", - "allows or denys deposit/withdraw money from res bank"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.bank.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // shop - FlagList.add("shop"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shop.Description", - "Adds residence to special residence shop list"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.shop.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // day - FlagList.add("day"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.day.Description", - "Sets day time in residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.day.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // night - FlagList.add("night"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.night.Description", - "Sets night time in residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.night.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // sun - FlagList.add("sun"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.sun.Description", - "Sets weather to sunny in residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.sun.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // rain - FlagList.add("rain"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.rain.Description", - "Sets weather to rainny in residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.rain.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // chat - FlagList.add("chat"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chat.Description", - "Allows to join residence chat room"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.chat.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // nodurability - FlagList.add("nodurability"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nodurability.Description", - "Prevents item durability loss"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.nodurability.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // mobitemdrop - FlagList.add("mobitemdrop"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobitemdrop.Description", - "Prevents mob droping items on death"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobitemdrop.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // mobexpdrop - FlagList.add("mobexpdrop"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobexpdrop.Description", - "Prevents mob droping exp on death"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.mobexpdrop.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // dragongrief - FlagList.add("dragongrief"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dragongrief.Description", - "Prevents ender dragon block griefing"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.dragongrief.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // snowtrail - FlagList.add("snowtrail"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowtrail.Description", - "Prevents snowman snow trails"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowtrail.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // snowball - FlagList.add("snowball"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowball.Description", - "Prevents snowball knockback"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.snowball.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // iceform - FlagList.add("iceform"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.iceform.Description", - "Prevents from ice forming"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.iceform.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // icemelt - FlagList.add("icemelt"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.icemelt.Description", - "Prevents ice from melting"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.icemelt.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // respawn - FlagList.add("respawn"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.respawn.Description", - "Automaticaly respawns player"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.respawn.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // riding - FlagList.add("riding"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.riding.Description", - "Prevent riding a horse"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.riding.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // backup - FlagList.add("backup"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.backup.Description", - "If set to true, restores previous look of area (WordEdit required)"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.backup.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // hotfloor - FlagList.add("hotfloor"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hotfloor.Description", - "Prevent damage from magma blocks"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.hotfloor.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - // coords - FlagList.add("coords"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.coords.Description", - "Hides residence coordinates"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands.coords.Info", - Arrays.asList("&eUsage: &6/res set [flag] true/false/remove")); - - // Filling with custom flags info - Set sec = conf.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands").getKeys(false); - for (String one : sec) { - if (FlagList.contains(one.toLowerCase())) + for (Entry cmo : Residence.getCommandFiller().CommandList.entrySet()) { + String path = Residence.getLocaleManager().path + cmo.getKey() + "."; + try { + Class cl = Class.forName(Residence.getCommandFiller().packagePath + "." + cmo.getKey()); + if (cmd.class.isAssignableFrom(cl)) { + cmd cm = (cmd) cl.getConstructor().newInstance(); + cm.getLocale(c, path); + } + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException + | NoSuchMethodException | SecurityException e) { continue; - String desc = conf.getString("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one + ".Description"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one.toLowerCase() + ".Description", - desc); - List info = conf.getStringList("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one + ".Info"); - c.get("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + one.toLowerCase() + ".Info", - info); - FlagList.add(one.toLowerCase()); + } } - //res limits - c.get("CommandHelp.SubCommands.res.SubCommands.limits.Description", "Show your limits."); - c.get("CommandHelp.SubCommands.res.SubCommands.limits.Info", - Arrays.asList("&eUsage: &6/res limits", "Shows the limitations you have on creating and managing residences.")); - - // res tpset - c.get("CommandHelp.SubCommands.res.SubCommands.tpset.Description", "Set the teleport location of a Residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.tpset.Info", - Arrays.asList("&eUsage: &6/res tpset", "This will set the teleport location for a residence to where your standing.", - "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence.")); - - // res tp - c.get("CommandHelp.SubCommands.res.SubCommands.tp.Description", "Teleport to a residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.tp.Info", - Arrays.asList("&eUsage: &6/res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", - "Your permission group must also be allowed to teleport by the server admin.")); - c.get("CommandHelp.SubCommands.res.SubCommands.tp.Args", "[residence]"); - - // res rt - c.get("CommandHelp.SubCommands.res.SubCommands.rt.Description", "Teleports to random location in world"); - c.get("CommandHelp.SubCommands.res.SubCommands.rt.Info", - Arrays.asList("&eUsage: &6/res rt", "Teleports you to random location in defined world.")); - - // res rc - c.get("CommandHelp.SubCommands.res.SubCommands.rc.Description", "Joins current or defined residence chat chanel"); - c.get("CommandHelp.SubCommands.res.SubCommands.rc.Info", - Arrays.asList("&eUsage: &6/res rc (residence)", "Teleports you to random location in defined world.")); - - // res command - c.get("CommandHelp.SubCommands.res.SubCommands.command.Description", "Manages allowed or blocked commands in residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.command.Info", - Arrays.asList("&eUsage: &6/res command ", - "Shows list, adds or removes allowed or disabled commands in residence", - "Use _ to include command with multiple variables")); - - c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.leave.Description", "Leaves current residence chat chanel"); - c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.leave.Info", Arrays.asList("&eUsage: &6/res rc leave", - "If you are in residence chat cnahel then you will leave it")); - - c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setcolor.Description", "Sets residence chat chanel text color"); - c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setcolor.Info", Arrays.asList("&eUsage: &6/res rc setcolor [colorCode]", - "Sets residence chat chanel text color")); - - c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setprefix.Description", "Sets residence chat chanel prefix"); - c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.setprefix.Info", Arrays.asList("&eUsage: &6/res rc setprefix [newName]", - "Sets residence chat chanel prefix")); - - c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.kick.Description", "Kicks player from chanel"); - c.get("CommandHelp.SubCommands.res.SubCommands.rc.SubCommands.kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", - "Kicks player from chanel")); - - // res expand - c.get("CommandHelp.SubCommands.res.SubCommands.expand.Description", "Expands residence in direction you looking"); - c.get("CommandHelp.SubCommands.res.SubCommands.expand.Info", - Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); - - // res contract - c.get("CommandHelp.SubCommands.res.SubCommands.contract.Description", "Contracts residence in direction you looking"); - c.get("CommandHelp.SubCommands.res.SubCommands.contract.Info", - Arrays.asList("&eUsage: &6/res contract (residence [amount])", "Contracts residence in direction you looking.", "Residence name is optional")); - - // res shop - c.get("CommandHelp.SubCommands.res.SubCommands.shop.Description", "Manage residence shop"); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.Info", Arrays.asList("Manages residence shop feature")); - - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Description", "Shows list of res shops"); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.list.Info", Arrays.asList("&eUsage: &6/res shop list", - "Shows full list of all residences with shop flag")); - - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Description", "Vote for residence shop"); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", - "Votes for current or defined residence")); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.vote.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Description", "Give like for residence shop"); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Info", Arrays.asList("&eUsage: &6/res shop like ", - "Gives like for residence shop")); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.like.Args", "[residenceshop]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Description", "Shows res shop votes"); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", - "Shows full vote list of current or defined residence shop")); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.votes.Args", "[residenceshop]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Description", "Shows res shop likes"); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", - "Shows full like list of current or defined residence shop")); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.likes.Args", "[residenceshop]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Description", "Sets residence shop description"); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", - "Sets residence shop description. Color code supported. For new line use /n")); - - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Description", "Create res shop board"); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", - "Creates res shop board from selected area. Place - position from which to start filling board")); - - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Description", "Deletes res shop board"); - c.get("CommandHelp.SubCommands.res.SubCommands.shop.SubCommands.deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", - "Deletes res shop board bi right clicking on one of signs")); - - // res tpconfirm - c.get("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Description", "Ignore unsafe teleportation warning"); - c.get("CommandHelp.SubCommands.res.SubCommands.tpconfirm.Info", - Arrays.asList("&eUsage: &6/res tpconfirm", "Teleports you to a residence, when teleportation is unsafe.")); - - // res setmain - c.get("CommandHelp.SubCommands.res.SubCommands.setmain.Description", "Sets defined residence as main to show up in chat as prefix"); - c.get("CommandHelp.SubCommands.res.SubCommands.setmain.Info", - Arrays.asList("&eUsage: &6/res setmain (residence)", "Set defined residence as main.")); - c.get("CommandHelp.SubCommands.res.SubCommands.setmain.Args", "[residence]"); - - // res subzone - c.get("CommandHelp.SubCommands.res.SubCommands.subzone.Description", "Create subzones in residences."); - c.get("CommandHelp.SubCommands.res.SubCommands.subzone.Info", - Arrays.asList("&eUsage: &6/res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in.")); - c.get("CommandHelp.SubCommands.res.SubCommands.subzone.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.area.Description", "Manage physical areas for a residence."); - //res area - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Description", "List physical areas in a residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Info", - Arrays.asList("&eUsage: &6/res area list [residence] ")); - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.list.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Description", "List coordinates and other Info for areas"); - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] ")); - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.listall.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Description", "Add physical areas to a residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Info", - Arrays.asList("&eUsage: &6/res area add [residence] [areaID]", "You must first select two points first.")); - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.add.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Description", "Remove physical areas from a residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Info", Arrays.asList("&eUsage: &6/res area remove [residence] [areaID]")); - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.remove.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Description", "Replace physical areas in a residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Info", Arrays.asList("&eUsage: &6/res area replace [residence] [areaID]", - "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger.")); - c.get("CommandHelp.SubCommands.res.SubCommands.area.SubCommands.replace.Args", "[residence]"); - - // res message - c.get("CommandHelp.SubCommands.res.SubCommands.message.Description", "Manage residence enter / leave messages"); - c.get("CommandHelp.SubCommands.res.SubCommands.message.Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", - "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); - c.get("CommandHelp.SubCommands.res.SubCommands.message.Args", "[residence] [enter/leave]"); - - // res lease - c.get("CommandHelp.SubCommands.res.SubCommands.lease.Description", "Manage residence leases"); - c.get("CommandHelp.SubCommands.res.SubCommands.lease.Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", - "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money.")); - c.get("CommandHelp.SubCommands.res.SubCommands.lease.Args", "[renew/cost] [residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Description", "Set the lease time"); - c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Info", - Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite.")); - c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.set.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Description", "Renew the lease time"); - c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Info", - Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence.")); - c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.renew.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Description", "Lease end date"); - c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Info", - Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time.")); - c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.expires.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Description", "Shows renew cost"); - c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Info", - Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease.")); - c.get("CommandHelp.SubCommands.res.SubCommands.lease.SubCommands.cost.Args", "[residence]"); - - // res bank - c.get("CommandHelp.SubCommands.res.SubCommands.bank.Description", "Manage money in a Residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.bank.Info", - Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", - "You must have the +bank flag.")); - c.get("CommandHelp.SubCommands.res.SubCommands.bank.Args", "[deposit/withdraw] [residence]"); - - // res confirm - c.get("CommandHelp.SubCommands.res.SubCommands.confirm.Description", "Confirms removal of a residence."); - c.get("CommandHelp.SubCommands.res.SubCommands.confirm.Info", Arrays.asList("&eUsage: &6/res confirm", "Confirms removal of a residence.")); - - c.get("CommandHelp.SubCommands.res.SubCommands.gset.Description", "Set flags on a specific group for a Residence."); - c.get("CommandHelp.SubCommands.res.SubCommands.gset.Info", - Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?")); - - c.get("CommandHelp.SubCommands.res.SubCommands.lset.Description", "Change blacklist and ignorelist options"); - c.get("CommandHelp.SubCommands.res.SubCommands.lset.Info", - Arrays.asList("&eUsage: &6/res lset [blacklist/ignorelist] [material]", - "&eUsage: &6/res lset Info", - "Blacklisting a material prevents it from being placed in the residence.", - "Ignorelist causes a specific material to not be protected by Residence.")); - c.get("CommandHelp.SubCommands.res.SubCommands.lset.Args", "[residence] [blacklist/ignorelist] [material]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.removeall.Description", "Remove all residences owned by a player."); - c.get("CommandHelp.SubCommands.res.SubCommands.removeall.Info", Arrays.asList("&eUsage: &6/res removeall [owner]", - "Removes all residences owned by a specific player.'", - "Requires /resadmin if you use it on anyone besides yourself.")); - c.get("CommandHelp.SubCommands.res.SubCommands.removeall.Args", "[playername]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.list.Description", "List Residences"); - c.get("CommandHelp.SubCommands.res.SubCommands.list.Info", - Arrays.asList("&eUsage: &6/res list ", - "Lists all the residences a player owns (except hidden ones).", - "If listing your own residences, shows hidden ones as well.", - "To list everyones residences, use /res listall.")); - c.get("CommandHelp.SubCommands.res.SubCommands.list.Args", "[playername]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.listhidden.Description", "List Hidden Residences"); - c.get("CommandHelp.SubCommands.res.SubCommands.listhidden.Info", - Arrays.asList("&eUsage: &6/res listhidden ", - "Lists hidden residences for a player.")); - c.get("CommandHelp.SubCommands.res.SubCommands.listhidden.Args", "[playername]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.listall.Description", "List All Residences"); - c.get("CommandHelp.SubCommands.res.SubCommands.listall.Info", - Arrays.asList("&eUsage: &6/res listall ", "Lists hidden residences for a player.")); - - c.get("CommandHelp.SubCommands.res.SubCommands.listallhidden.Description", "List All Hidden Residences"); - c.get("CommandHelp.SubCommands.res.SubCommands.listallhidden.Info", - Arrays.asList("&eUsage: &6/res listhidden ", - "Lists all hidden residences on the server.")); - - c.get("CommandHelp.SubCommands.res.SubCommands.sublist.Description", "List Residence Subzones"); - c.get("CommandHelp.SubCommands.res.SubCommands.sublist.Info", - Arrays.asList("&eUsage: &6/res sublist ", - "List subzones within a residence.")); - c.get("CommandHelp.SubCommands.res.SubCommands.sublist.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.reset.Description", "Reset residence to default flags."); - c.get("CommandHelp.SubCommands.res.SubCommands.reset.Info", - Arrays.asList("&eUsage: &6/res reset ", - "Resets the flags on a residence to their default. You must be the owner or an admin to do this.")); - c.get("CommandHelp.SubCommands.res.SubCommands.reset.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.rename.Description", "Renames a residence."); - c.get("CommandHelp.SubCommands.res.SubCommands.rename.Info", - Arrays.asList("&eUsage: &6/res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", - "The name must not already be taken by another residence.")); - c.get("CommandHelp.SubCommands.res.SubCommands.rename.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.kick.Description", "Kicks player from residence."); - c.get("CommandHelp.SubCommands.res.SubCommands.kick.Info", - Arrays.asList("&eUsage: &6/res kick ", "You must be the owner or an admin to do this.", - "Player should be online.")); - c.get("CommandHelp.SubCommands.res.SubCommands.kick.Args", "[playername]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.mirror.Description", "Mirrors Flags"); - c.get("CommandHelp.SubCommands.res.SubCommands.mirror.Info", - Arrays.asList("&eUsage: &6/res mirror [Source Residence] [Target Residence]", - "Mirrors flags from one residence to another. You must be owner of both or a admin to do this.")); - c.get("CommandHelp.SubCommands.res.SubCommands.mirror.Args", "[residence] [residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.Description", "Buy, Sell, or Rent Residences"); - c.get("CommandHelp.SubCommands.res.SubCommands.market.Info", - Arrays.asList("&eUsage: &6/res market ? for more Info")); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Description", "Get economy Info on residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Info", - Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost.")); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.Info.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Description", "Lists rentable and for sale residences."); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.Info", - Arrays.asList("&eUsage: &6/res market list [rent/sell]")); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.SubCommands.rent.Description", "Lists rentable residences."); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.SubCommands.rent.Info", - Arrays.asList("&eUsage: &6/res market list rent")); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.SubCommands.sell.Description", "Lists for sale residences."); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.list.SubCommands.sell.Info", - Arrays.asList("&eUsage: &6/res market list sell")); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Description", "Sell a residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Info", - Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", - "Another player can buy the residence with /res market buy")); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sell.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Description", "Set market sign"); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Info", - Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at.")); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.sign.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Description", "Buy a residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Info", - Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale.")); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.buy.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Description", "Stops selling a residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Info", - Arrays.asList("&eUsage: &6/res market unsell [residence]")); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.unsell.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Description", "ent a residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Info", - Arrays.asList("&eUsage: &6/res market rent [residence] ", - "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.")); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rent.Args", "[cresidence] [true/false]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Description", "Make a residence rentable."); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Info", - Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", - "Makes a residence rentable for [cost] money for every [days] number of days.", - "If is true, the residence will be able to be rented again before rent expires.", - "If is true, the residence will stay in market after last renter will be removed.", - "If is true, money for rent will be automaticaly taken from players balance if he chosen that option when renting")); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.rentable.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.autopay.Description", "Sets residence AutoPay to given value"); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.autopay.Info", - Arrays.asList("&eUsage: &6/res market autopay [true/false]")); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.autopay.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.payrent.Description", "Pays rent for defined residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.payrent.Info", - Arrays.asList("&eUsage: &6/res market payrent ")); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.payrent.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.confirm.Description", "Confirms residence unrent/release action"); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.confirm.Info", - Arrays.asList("&eUsage: &6/res market confirm")); - - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Description", "Remove a residence from rent or rentable."); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Info", - Arrays.asList("&eUsage: &6/res market release [residence]", "If you are the renter, this command releases the rent on the house for you.", - "If you are the owner, this command makes the residence not for rent anymore.")); - c.get("CommandHelp.SubCommands.res.SubCommands.market.SubCommands.release.Args", "[residence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.current.Description", "Show residence your currently in."); - c.get("CommandHelp.SubCommands.res.SubCommands.current.Info", - Arrays.asList("&eUsage: &6/res current")); - - c.get("CommandHelp.SubCommands.res.SubCommands.signupdate.Description", "Updated residence signs"); - c.get("CommandHelp.SubCommands.res.SubCommands.signupdate.Info", - Arrays.asList("&eUsage: &6/res signupdate")); - - c.get("CommandHelp.SubCommands.res.SubCommands.reload.Description", "reload lanf or config files"); - c.get("CommandHelp.SubCommands.res.SubCommands.reload.Info", - Arrays.asList("&eUsage: &6/res reload [config/lang/groups/flags]")); - - c.get("CommandHelp.SubCommands.res.SubCommands.lists.Description", "Predefined permission lists"); - c.get("CommandHelp.SubCommands.res.SubCommands.lists.Info", - Arrays.asList("Predefined permissions that can be applied to a residence.")); - - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Description", "Add a list"); - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.add.Info", - Arrays.asList("&eUsage: &6/res lists add ")); - - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Description", "Remove a list"); - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.remove.Info", - Arrays.asList("&eUsage: &6/res lists remove ")); - - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Description", "Apply a list to a residence"); - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.apply.Info", - Arrays.asList("&eUsage: &6/res lists apply ")); - - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Description", "Set a flag"); - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.set.Info", - Arrays.asList("&eUsage: &6/res lists set ")); - - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Description", "Set a player flag"); - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.pset.Info", - Arrays.asList("&eUsage: &6/res lists pset ")); - - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Description", "Set a group flag"); - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", - Arrays.asList("&eUsage: &6/res lists gset ")); - - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.view.Description", "View a list."); - c.get("CommandHelp.SubCommands.res.SubCommands.lists.SubCommands.gset.Info", - Arrays.asList("&eUsage: &6/res lists view ")); - - c.get("CommandHelp.SubCommands.res.SubCommands.server.Description", "Make land server owned."); - c.get("CommandHelp.SubCommands.res.SubCommands.server.Info", - Arrays.asList("&eUsage: &6/resadmin server [residence]", "Make a residence server owned.")); - c.get("CommandHelp.SubCommands.res.SubCommands.server.Args", "[cresidence]"); - - c.get("CommandHelp.SubCommands.res.SubCommands.setowner.Description", "Change owner of a residence."); - c.get("CommandHelp.SubCommands.res.SubCommands.setowner.Info", - Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]")); - c.get("CommandHelp.SubCommands.res.SubCommands.setowner.Args", "[cresidence]"); + // custom commands c.get("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence."); c.get("CommandHelp.SubCommands.res.SubCommands.resreload.Info", @@ -1563,14 +141,6 @@ public void LoadLang(String lang) { c.get("CommandHelp.SubCommands.res.SubCommands.removeworld.Info", Arrays.asList("&eUsage: &6/res removeworld [worldname]", "Can only be used from console")); - c.get("CommandHelp.SubCommands.res.SubCommands.signconvert.Description", "Converts signs from ResidenceSign plugin"); - c.get("CommandHelp.SubCommands.res.SubCommands.signconvert.Info", - Arrays.asList("&eUsage: &6/res signconvert", "Will try to convert saved sign data from 3rd party plugin")); - - c.get("CommandHelp.SubCommands.res.SubCommands.version.Description", "how residence version"); - c.get("CommandHelp.SubCommands.res.SubCommands.version.Info", - Arrays.asList("&eUsage: &6/res version")); - // Write back config try { c.getW().save(f); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index c904360b5..5fe72b7b4 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -37,6 +37,10 @@ import org.dynmap.DynmapAPI; import com.bekvon.bukkit.residence.chat.ChatManager; +import com.bekvon.bukkit.residence.containers.ABInterface; +import com.bekvon.bukkit.residence.containers.NMS; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.dynmap.DynMapListeners; import com.bekvon.bukkit.residence.dynmap.DynMapManager; import com.bekvon.bukkit.residence.economy.BOSEAdapter; @@ -155,6 +159,8 @@ public class Residence extends JavaPlugin { protected static AutoSelection AutoSelectionManager; protected static SchematicsManager SchematicManager; + protected static CommandFiller cmdFiller; + protected static ZipLibrary zip; protected boolean firstenable = true; @@ -372,6 +378,9 @@ public void onEnable() { ResidenceVersion = this.getDescription().getVersion(); authlist = this.getDescription().getAuthors(); + cmdFiller = new CommandFiller(); + cmdFiller.fillCommands(); + if (!dataFolder.isDirectory()) { dataFolder.mkdirs(); } @@ -848,6 +857,10 @@ public static ResidenceSpoutListener getSpoutListener() { return slistener; } + public static CommandFiller getCommandFiller() { + return cmdFiller; + } + public static ResidenceManager getResidenceManager() { return rmanager; } @@ -1257,6 +1270,13 @@ protected boolean loadYml() throws Exception { // rentmanager = new RentManager(); rentmanager.load((Map) yml.getRoot().get("RentSystem")); } + + for (Player one : Bukkit.getOnlinePlayers()) { + ResidencePlayer rplayer = Residence.getPlayerManager().getResidencePlayer(one); + if (rplayer != null) + rplayer.recountRes(); + } + // System.out.print("[Residence] Loaded..."); return true; } catch (Exception ex) { @@ -1489,7 +1509,7 @@ public static boolean isPlayerExist(CommandSender sender, String name, boolean i if (Residence.getPlayerUUID(name) != null) return true; if (inform) - sender.sendMessage(getLM().getMessage("Invalid.Player")); + sender.sendMessage(msg(lm.Invalid_Player)); @SuppressWarnings("unused") String a = "%%__USER__%%"; @SuppressWarnings("unused") @@ -1583,20 +1603,42 @@ public static boolean isDisabledWorldCommand(String worldname) { return false; } - public static void msg(Player player, String path, Object... variables) { +// public static void msg(Player player, String path, Object... variables) { +// if (player != null) +// if (Residence.getLM().containsKey(path)) +// player.sendMessage(Residence.getLM().getMessage(path, variables)); +// else +// player.sendMessage(path); +// } + + public static String msg(String path) { + return Residence.getLM().getMessage(path); + } + + public static void msg(CommandSender sender, String text) { + if (sender != null) + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); + } + + public static void msg(Player player, String text) { if (player != null) - if (Residence.getLM().containsKey(path)) - player.sendMessage(Residence.getLM().getMessage(path, variables)); - else - player.sendMessage(path); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); } - public static void msg(CommandSender sender, String path, Object... variables) { + public static void msg(CommandSender sender, lm lm, Object... variables) { if (sender != null) - if (Residence.getLM().containsKey(path)) - sender.sendMessage(Residence.getLM().getMessage(path, variables)); + if (Residence.getLM().containsKey(lm.getPath())) + sender.sendMessage(Residence.getLM().getMessage(lm, variables)); else - sender.sendMessage(path); + sender.sendMessage(lm.getPath()); + } + + public static List msgL(lm lm) { + return Residence.getLM().getMessageList(lm); + } + + public static String msg(lm lm, Object... variables) { + return Residence.getLM().getMessage(lm, variables); } } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 45f78b14e..294ff8260 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -9,6 +9,9 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; public class ResidenceCommandListener extends Residence { @@ -30,7 +33,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (sender instanceof Player && !Residence.getPermissionManager().isResidenceAdmin(sender) && Residence.isDisabledWorldCommand(((Player) sender) .getWorld())) { - sender.sendMessage(Residence.getLM().getMessage("General.DisabledWorld")); + Residence.msg(sender, lm.General_DisabledWorld); return true; } @@ -42,7 +45,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); System.out.println("[Residence] Reloaded by " + player.getName() + "."); } else - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); } else { this.reloadPlugin(); System.out.println("[Residence] Reloaded by console."); @@ -61,7 +64,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); } } else - sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(sender, lm.General_NoPermission); return true; } else if (command.getName().equals("rc")) { cmd cmdClass = getCmdClass(new String[] { "rc" }); @@ -80,7 +83,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St resadmin = true; } if (command.getName().equals("resadmin") && !Residence.gmanager.isResidenceAdmin(sender)) { - ((Player) sender).sendMessage(Residence.getLM().getMessage("Residence.NonAdmin")); + ((Player) sender).sendMessage(Residence.msg(lm.Residence_NonAdmin)); return true; } if (command.getName().equals("res") && Residence.gmanager.isResidenceAdmin(sender) && Residence.getConfigManager().getAdminFullAccess()) { @@ -102,7 +105,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } if (Residence.cmanager.allowAdminsOnly()) { if (!resadmin && player != null) { - player.sendMessage(Residence.getLM().getMessage("General.AdminOnly")); + Residence.msg(player, lm.General_AdminOnly); return true; } } @@ -128,7 +131,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } if (!sender.hasPermission("residence.command." + args[0].toLowerCase()) && !resadmin) { - sender.sendMessage(Residence.getLM().getMessage("General.NoCmdPermission")); + Residence.msg(sender, lm.General_NoCmdPermission); return true; } @@ -168,7 +171,7 @@ private static cmd getCmdClass(String[] args) { } public void sendUsage(CommandSender sender, String command) { - sender.sendMessage(Residence.getLM().getMessage("General.DefaultUsage", command)); + Residence.msg(sender, lm.General_DefaultUsage, command); } private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender, Command command) { @@ -182,7 +185,7 @@ private boolean commandHelp(String[] args, boolean resadmin, CommandSender sende try { page = Integer.parseInt(args[args.length - 1]); } catch (Exception ex) { - sender.sendMessage(Residence.getLM().getMessage("General.InvalidHelp")); + Residence.msg(sender, lm.General_InvalidHelp); } } diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java index 80989ecfb..9da9c1bb2 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java @@ -5,7 +5,8 @@ import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_10_R1.util.CraftChatMessage; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.ABInterface; + +import com.bekvon.bukkit.residence.containers.ABInterface; import net.minecraft.server.v1_10_R1.IChatBaseComponent; import net.minecraft.server.v1_10_R1.IChatBaseComponent.ChatSerializer; diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java index a6fb7a513..291f92e55 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java @@ -3,7 +3,8 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.ABInterface; + +import com.bekvon.bukkit.residence.containers.ABInterface; public class v1_7_R4 implements ABInterface { diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java index fdc8b2289..b77cf27ab 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java @@ -5,7 +5,8 @@ import org.bukkit.craftbukkit.v1_8_R1.util.CraftChatMessage; import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.ABInterface; + +import com.bekvon.bukkit.residence.containers.ABInterface; import net.minecraft.server.v1_8_R1.PacketPlayOutTitle; import net.minecraft.server.v1_8_R1.EnumTitleAction; diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java index b47ad7b2f..16a2f149a 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java @@ -5,7 +5,8 @@ import org.bukkit.craftbukkit.v1_8_R2.util.CraftChatMessage; import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.ABInterface; + +import com.bekvon.bukkit.residence.containers.ABInterface; import net.minecraft.server.v1_8_R2.PacketPlayOutTitle; import net.minecraft.server.v1_8_R2.PacketPlayOutTitle.EnumTitleAction; diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java index fd170994f..06f07acd7 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java @@ -5,7 +5,8 @@ import org.bukkit.craftbukkit.v1_8_R3.util.CraftChatMessage; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.ABInterface; + +import com.bekvon.bukkit.residence.containers.ABInterface; import net.minecraft.server.v1_8_R3.PacketPlayOutTitle; import net.minecraft.server.v1_8_R3.PacketPlayOutTitle.EnumTitleAction; diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java index 58d1c66bc..2c9c1ea78 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java @@ -5,7 +5,8 @@ import org.bukkit.craftbukkit.v1_9_R1.util.CraftChatMessage; import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.ABInterface; + +import com.bekvon.bukkit.residence.containers.ABInterface; import net.minecraft.server.v1_9_R1.PacketPlayOutTitle; import net.minecraft.server.v1_9_R1.PacketPlayOutTitle.EnumTitleAction; diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java index c42c4e853..a69fcacdb 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java @@ -5,7 +5,8 @@ import org.bukkit.craftbukkit.v1_9_R2.util.CraftChatMessage; import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.ABInterface; + +import com.bekvon.bukkit.residence.containers.ABInterface; import net.minecraft.server.v1_9_R2.PacketPlayOutTitle; import net.minecraft.server.v1_9_R2.PacketPlayOutTitle.EnumTitleAction; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10.java b/src/com/bekvon/bukkit/residence/allNms/v1_10.java index 677900476..798f382f4 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10.java @@ -30,7 +30,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.NMS; + +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; import com.bekvon.bukkit.residence.Residence; public class v1_10 implements NMS { @@ -130,20 +132,20 @@ public boolean isSpectator(GameMode mode) { @Override public void addDefaultFlags(Map matUseFlagList) { /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, "door"); - matUseFlagList.put(Material.BIRCH_DOOR, "door"); - matUseFlagList.put(Material.JUNGLE_DOOR, "door"); - matUseFlagList.put(Material.ACACIA_DOOR, "door"); - matUseFlagList.put(Material.DARK_OAK_DOOR, "door"); + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door.getName()); /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, "door"); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, "door"); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, "door"); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, "door"); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, "door"); - matUseFlagList.put(Material.IRON_TRAPDOOR, "door"); - - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, "diode"); + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door.getName()); + + matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode.getName()); } @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java index d569bbbf1..88718c5a7 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java @@ -7,6 +7,7 @@ import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; public class v1_10Events implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -21,7 +22,7 @@ public void onPlayerFireInteract(EntityDamageEvent event) { Entity ent = event.getEntity(); - if (!Residence.getPermsByLoc(ent.getLocation()).has("hotfloor", true)) { + if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.hotfloor, true)) { event.setCancelled(true); return; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index 99c2a626b..bebcf4b4d 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -27,8 +27,8 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.NMS; public class v1_7 implements NMS { @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 4073df991..80a4aa486 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -27,8 +27,8 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.NMS; public class v1_7_Couldron implements NMS { @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java index 48b924e33..e519cf663 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8.java @@ -29,8 +29,8 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.NMS; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.NMS; public class v1_8 implements NMS { @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java index f58aba504..cf42dc0be 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java @@ -14,6 +14,8 @@ import org.bukkit.event.player.PlayerInteractAtEntityEvent; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; public class v1_8Events implements Listener { @@ -30,13 +32,12 @@ public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); String world = player.getWorld().getName(); - if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { + if (!perms.playerHas(player.getName(), world, Flags.container, perms.playerHas(player.getName(), world, Flags.use, true))) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "container")); + Residence.msg(player, lm.Flag_Deny, Flags.container.getName()); } } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockExplodeEvent(BlockExplodeEvent event) { @@ -50,7 +51,7 @@ public void onBlockExplodeEvent(BlockExplodeEvent event) { List preserve = new ArrayList(); for (Block block : event.blockList()) { FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); - if (!blockperms.has("explode", world.has("explode", true))) { + if (!blockperms.has(Flags.explode, world.has(Flags.explode, true))) { preserve.add(block); } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9.java b/src/com/bekvon/bukkit/residence/allNms/v1_9.java index 1094403c7..5aaad8271 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9.java @@ -29,8 +29,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.NMS; + import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.NMS; public class v1_9 implements NMS { @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index c89bbbc6b..5f68078ad 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -12,6 +12,7 @@ import org.bukkit.potion.PotionEffect; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; public class v1_9Events implements Listener { @@ -36,7 +37,7 @@ public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { return; Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); if (!srcpvp) event.setCancelled(true); } @@ -67,13 +68,13 @@ public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { return; Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); Iterator it = event.getAffectedEntities().iterator(); while (it.hasNext()) { LivingEntity target = it.next(); if (!(target instanceof Player)) continue; - Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has("pvp", true); + Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has(Flags.pvp, true); if (!srcpvp || !tgtpvp) { event.getAffectedEntities().remove(target); event.getEntity().remove(); diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index 78deac87c..b4f57cc2c 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -45,9 +45,9 @@ public void chat(String sourcePlayer, String message) { return; for (String member : members) { Player player = serv.getPlayer(member); - if (player != null) - player.sendMessage(cevent.getChatprefix() + " " + Residence.getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent - .getChatMessage()); + + Residence.msg(player, cevent.getChatprefix() + " " + Residence.getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent + .getChatMessage()); } Bukkit.getConsoleSender().sendMessage("ResidentialChat[" + channelName + "] - " + sourcePlayer + ": " + ChatColor.stripColor(cevent.getChatMessage())); } diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index a6a3dcd45..7c257d58d 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class area implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -30,7 +36,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (res != null) { res.removeArea(player, args[3], resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } return true; } else if (args[1].equals("add")) { @@ -43,12 +49,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res != null) { if (res.addArea(player, Residence.getSelectionManager().getSelectionCuboid(player), args[3], resadmin)) - player.sendMessage(Residence.getLM().getMessage("Area.Create", args[3])); + Residence.msg(player, lm.Area_Create, args[3]); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } } else { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, lm.Select_Points); } return true; } else if (args[1].equals("replace")) { @@ -62,10 +68,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (res != null) { res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), args[3], resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } } else { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, lm.Select_Points); } return true; } @@ -75,7 +81,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (res != null) { res.printAreaList(player, page); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } return true; } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { @@ -83,10 +89,38 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (res != null) { res.printAdvancedAreaList(player, page); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } return true; } return false; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manage physical areas for a residence."); + // Sub commands + path += "SubCommands."; + c.get(path + "list.Description", "List physical areas in a residence"); + c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res area list [residence] ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("[residence]")); + + c.get(path + "listall.Description", "List coordinates and other Info for areas"); + c.get(path + "listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "listall"), Arrays.asList("[residence]")); + + c.get(path + "add.Description", "Add physical areas to a residence"); + c.get(path + "add.Info", Arrays.asList("&eUsage: &6/res area add [residence] [areaID]", "You must first select two points first.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "add"), Arrays.asList("[residence]")); + + c.get(path + "remove.Description", "Remove physical areas from a residence"); + c.get(path + "remove.Info", Arrays.asList("&eUsage: &6/res area remove [residence] [areaID]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "remove"), Arrays.asList("[residence]")); + + c.get(path + "replace.Description", "Replace physical areas in a residence"); + c.get(path + "replace.Info", Arrays.asList("&eUsage: &6/res area replace [residence] [areaID]", + "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "replace"), Arrays.asList("[residence]")); + + } } diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 375494c55..186987f72 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class bank implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if ((args.length != 3) && (args.length != 4)) { return false; @@ -19,14 +25,14 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length == 4) { res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); return true; } } else if ((sender instanceof Player)) { res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); } if (res == null) { - sender.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(sender, lm.Residence_NotIn); return true; } int amount = 0; @@ -36,7 +42,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command else amount = Integer.parseInt(args[3]); } catch (Exception ex) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + Residence.msg(sender, lm.Invalid_Amount); return true; } if (args[1].equals("deposit")) @@ -48,4 +54,13 @@ else if (args[1].equals("withdraw")) return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manage money in a Residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", + "You must be standing in a Residence or provide residence name", + "You must have the +bank flag.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[deposit%%withdraw]", "[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index 41ad25a90..f7dcf5d81 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class check implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -25,16 +31,22 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { - player.sendMessage(Residence.getLM().getMessage("Flag.CheckFalse", args[2], pname, args[1])); + Residence.msg(player, lm.Flag_CheckFalse, args[2], pname, args[1]); } else { - player.sendMessage(Residence.getLM().getMessage("Flag.CheckTrue", args[2], pname, args[1], (res.getPermissions().playerHas(pname, res.getPermissions() - .getWorld(), args[2], false) ? Residence.getLM().getMessage("General.True") : Residence.getLM().getMessage("General.False")))); + Residence.msg(player, lm.Flag_CheckTrue, args[2], pname, args[1], (res.getPermissions().playerHas(pname, res.getPermissions() + .getWorld(), args[2], false) ? Residence.msg(lm.General_True) : Residence.msg(lm.General_False))); } return true; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Check flag state for you"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res check [residence] [flag] (playername)")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[flag]" ,"[playername]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/clearflags.java b/src/com/bekvon/bukkit/residence/commands/clearflags.java index 6e8d87df1..349942415 100644 --- a/src/com/bekvon/bukkit/residence/commands/clearflags.java +++ b/src/com/bekvon/bukkit/residence/commands/clearflags.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class clearflags implements cmd { @Override + @CommandAnnotation(false) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -18,16 +24,23 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Player player = (Player) sender; if (!resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); if (area != null) { area.getPermissions().clearFlags(); - player.sendMessage(Residence.getLM().getMessage("Flag.Cleared")); + Residence.msg(player, lm.Flag_Cleared); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Remove all flags from residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res clearflags ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index 9c4c2da46..759415905 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class command implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { ClaimedResidence res = null; @@ -35,25 +41,25 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } if (res == null) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); return true; } if (!res.isOwner(sender.getName()) && !resadmin) { - sender.sendMessage(Residence.getLM().getMessage("Residence.NotOwner")); + Residence.msg(sender, lm.Residence_NotOwner); return true; } if (action != null && action.equalsIgnoreCase("allow")) { if (res.addCmdWhiteList(cmd)) { - sender.sendMessage(Residence.getLM().getMessage("command.addedAllow", res.getName())); + Residence.msg(sender, lm.command_addedAllow, res.getName()); } else - sender.sendMessage(Residence.getLM().getMessage("command.removedAllow", res.getName())); + Residence.msg(sender, lm.command_removedAllow, res.getName()); } else if (action != null && action.equalsIgnoreCase("block")) { if (res.addCmdBlackList(cmd)) { - sender.sendMessage(Residence.getLM().getMessage("command.addedBlock", res.getName())); + Residence.msg(sender, lm.command_addedBlock, res.getName()); } else - sender.sendMessage(Residence.getLM().getMessage("command.removedBlock", res.getName())); + Residence.msg(sender, lm.command_removedBlock, res.getName()); } else if (action != null && action.equalsIgnoreCase("list")) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < res.getCmdBlackList().size(); i++) { @@ -61,7 +67,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (i + 1 < res.getCmdBlackList().size()) sb.append(", "); } - sender.sendMessage(Residence.getLM().getMessage("command.Blocked", sb.toString())); + Residence.msg(sender, lm.command_Blocked, sb.toString()); sb = new StringBuilder(); for (int i = 0; i < res.getCmdWhiteList().size(); i++) { @@ -69,7 +75,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (i + 1 < res.getCmdWhiteList().size()) sb.append(", "); } - sender.sendMessage(Residence.getLM().getMessage("command.Allowed", sb.toString())); + Residence.msg(sender, lm.command_Allowed, sb.toString()); } else return false; @@ -77,4 +83,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manages allowed or blocked commands in residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res command ", + "Shows list, adds or removes allowed or disabled commands in residence", + "Use _ to include command with multiple variables")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index 8c6fdae6e..7770cce2a 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class compass implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -19,12 +25,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length != 2) { player.setCompassTarget(player.getWorld().getSpawnLocation()); - player.sendMessage(Residence.getLM().getMessage("General.CompassTargetReset")); + Residence.msg(player, lm.General_CompassTargetReset); return true; } if (!player.hasPermission("residence.compass")) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } @@ -35,12 +41,18 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high .getBlockZ()) / 2); player.setCompassTarget(mid); - player.sendMessage(Residence.getLM().getMessage("General.CompassTargetSet", args[1])); + Residence.msg(player, lm.General_CompassTargetSet, args[1]); } } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } return true; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Set compass ponter to residence location"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res compass ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/confirm.java b/src/com/bekvon/bukkit/residence/commands/confirm.java index 597166a05..954e585b6 100644 --- a/src/com/bekvon/bukkit/residence/commands/confirm.java +++ b/src/com/bekvon/bukkit/residence/commands/confirm.java @@ -1,15 +1,21 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class confirm implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { Player player = null; String name = "Console"; @@ -22,7 +28,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command String area = Residence.deleteConfirm.get(name); if (area == null) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); } else { Residence.getResidenceManager().removeResidence(player, area, resadmin); Residence.deleteConfirm.remove(name); @@ -31,4 +37,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Confirms removal of a residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res confirm", "Confirms removal of a residence.")); + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 2e84eeeb3..0698f160d 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -1,17 +1,23 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; public class contract implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -25,17 +31,17 @@ else if (args.length == 3) else return false; if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } if (res.isSubzone() && !player.hasPermission("residence.contract.subzone") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Subzone.CantContract")); + Residence.msg(player, lm.Subzone_CantContract); return false; } if (!res.isSubzone() && !player.hasPermission("residence.contract") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.CantContractResidence")); + Residence.msg(player, lm.Residence_CantContractResidence); return false; } @@ -54,9 +60,9 @@ else if (args.length == 3) if (area != null) { Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); - player.sendMessage(Residence.getLM().getMessage("Select.Area", areaName, resName)); + Residence.msg(player, lm.Select_Area, areaName, resName); } else { - player.sendMessage(Residence.getLM().getMessage("Area.NonExist")); + Residence.msg(player, lm.Area_NonExist); return true; } int amount = -1; @@ -66,12 +72,12 @@ else if (args.length == 3) else if (args.length == 3) amount = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + Residence.msg(player, lm.Invalid_Amount); return true; } if (amount > 1000) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + Residence.msg(player, lm.Invalid_Amount); return true; } @@ -90,9 +96,16 @@ else if (args.length == 3) res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); return true; } - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, lm.Select_Points); return false; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Contracts residence in direction you looking"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res contract (residence) [amount]", "Contracts residence in direction you looking.", + "Residence name is optional")); + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index e1f799420..82c77b3b0 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -1,18 +1,24 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.selection.WorldGuardUtil; import com.sk89q.worldguard.protection.regions.ProtectedRegion; public class create implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -35,7 +41,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); - player.sendMessage(Residence.getLM().getMessage("Select.WorldGuardOverlap", Region.getId())); + Residence.msg(player, lm.Select_WorldGuardOverlap, Region.getId()); Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); @@ -52,8 +58,14 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); return true; } - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, lm.Select_Points); return true; } + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Create Residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res create ")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/current.java b/src/com/bekvon/bukkit/residence/commands/current.java index 5fbe7739f..ca3c84f86 100644 --- a/src/com/bekvon/bukkit/residence/commands/current.java +++ b/src/com/bekvon/bukkit/residence/commands/current.java @@ -1,15 +1,21 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class current implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -21,11 +27,17 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command String res = Residence.getResidenceManager().getNameByLoc(player.getLocation()); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(player, lm.Residence_NotIn); } else { - player.sendMessage(Residence.getLM().getMessage("Residence.In", res)); + Residence.msg(player, lm.Residence_In, res); } return true; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Show residence your currently in."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res current")); + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 1d923c809..3ca0125b6 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -1,17 +1,23 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; public class expand implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -27,17 +33,17 @@ else if (args.length == 3) { return false; if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } if (res.isSubzone() && !player.hasPermission("residence.expand.subzone") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Subzone.CantExpand")); + Residence.msg(player, lm.Subzone_CantExpand); return false; } if (!res.isSubzone() && !player.hasPermission("residence.expand") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.CantExpandResidence")); + Residence.msg(player, lm.Residence_CantExpandResidence); return false; } @@ -56,9 +62,9 @@ else if (args.length == 3) { if (area != null) { Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); - player.sendMessage(Residence.getLM().getMessage("Select.Area", areaName, resName)); + Residence.msg(player, lm.Select_Area, areaName, resName); } else { - player.sendMessage(Residence.getLM().getMessage("Area.NonExist")); + Residence.msg(player, lm.Area_NonExist); return true; } int amount = -1; @@ -68,12 +74,12 @@ else if (args.length == 3) { else if (args.length == 3) amount = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + Residence.msg(player, lm.Invalid_Amount); return true; } if (amount > 1000) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + Residence.msg(player, lm.Invalid_Amount); return true; } @@ -92,9 +98,15 @@ else if (args.length == 3) res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); return true; } - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, lm.Select_Points); return false; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Expands residence in direction you looking"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index ea302b0f2..4c8dcc448 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -1,13 +1,20 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.residence.cmd; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.cmd; public class flags implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { int page = 1; try { @@ -22,4 +29,34 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Bukkit.dispatchCommand(sender, "res flags ? " + page); return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "List of flags"); + c.get(path + "Info", Arrays.asList("For flag values, usually true allows the action, and false denys the action.")); + + for (Flags fl : Flags.values()) { + String pt = path + "SubCommands." + fl.getName(); + c.get(pt + ".Description", fl.getDesc()); + String forSet = "set/pset"; + switch (fl.getFlagMode()) { + case Group: + case Player: + forSet = "pset"; + break; + case Residence: + forSet = "set"; + break; + case Both: + default: + break; + } + c.get(pt + ".Info", Arrays.asList("&eUsage: &6/res " + forSet + " " + fl.getName() + " true/false/remove")); + } + + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "pset"), Arrays.asList("[residence]", "[flag]", + "[true%%false%%remove]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]", "[flag]", + "[true%%false%%remove]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index ff917c7f1..1ef05477e 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -1,15 +1,20 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; public class give implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -22,4 +27,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getResidenceManager().giveResidence(player, args[2], args[1], resadmin); return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Give residence to player."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res give [player]", "Gives your owned residence to target player")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/gset.java b/src/com/bekvon/bukkit/residence/commands/gset.java index 9b2bb5d93..3d27fd98f 100644 --- a/src/com/bekvon/bukkit/residence/commands/gset.java +++ b/src/com/bekvon/bukkit/residence/commands/gset.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class gset implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -21,7 +27,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (area != null) { area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); + Residence.msg(player, lm.Invalid_Area); } return true; } else if (args.length == 5) { @@ -29,10 +35,17 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (area != null) { area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } return true; } return false; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Set flags on a specific group for a Residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/gui.java b/src/com/bekvon/bukkit/residence/commands/gui.java index 5d5c47f37..a4a6d4e58 100644 --- a/src/com/bekvon/bukkit/residence/commands/gui.java +++ b/src/com/bekvon/bukkit/residence/commands/gui.java @@ -6,11 +6,14 @@ import org.getspout.spoutapi.SpoutManager; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; public class gui implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -27,4 +30,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + } } diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index fb789d4c9..5663fe146 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class info implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length == 1 && sender instanceof Player) { @@ -19,7 +25,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (res != null) { Residence.getResidenceManager().printAreaInfo(res.getName(), sender, resadmin); } else { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); } return true; } else if (args.length == 2) { @@ -29,4 +35,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Show info on a residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index d603620a8..4998efccf 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -1,5 +1,7 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.command.Command; @@ -7,14 +9,18 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class kick implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -26,7 +32,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Player targetplayer = Bukkit.getPlayer(args[1]); if (targetplayer == null) { - player.sendMessage(Residence.getLM().getMessage("General.NotOnline")); + Residence.msg(player, lm.General_NotOnline); return true; } @@ -34,13 +40,13 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command PermissionGroup group = rPlayer.getGroup(); if (!group.hasKickAccess() && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } ClaimedResidence res = Residence.getResidenceManager().getByLoc(targetplayer.getLocation()); if (res == null || res != null && !res.isOwner(player) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.PlayerNotIn")); + Residence.msg(player, lm.Residence_PlayerNotIn); return true; } @@ -53,8 +59,15 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command targetplayer.teleport(loc); else targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation(), player)); - targetplayer.sendMessage(Residence.getLM().getMessage("Residence.Kicked")); + Residence.msg(targetplayer, lm.Residence_Kicked); } return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Kicks player from residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res kick ", "You must be the owner or an admin to do this.", "Player should be online.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index 4d9c22b2b..90cf1ba54 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class lease implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -23,20 +29,20 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length == 2) { res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(player, lm.Residence_NotIn); return true; } } else { res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } } String until = Residence.getLeaseManager().getExpireTime(res.getName()); if (until != null) - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenew", until)); + Residence.msg(player, lm.Economy_LeaseRenew, until); return true; } if (args[1].equals("renew")) { @@ -51,23 +57,23 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); if (res == null || Residence.getLeaseManager().leaseExpires(args[2])) { int cost = Residence.getLeaseManager().getRenewCost(res); - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenewalCost", args[2], cost)); + Residence.msg(player, lm.Economy_LeaseRenewalCost, args[2], cost); } else { - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); + Residence.msg(player, lm.Economy_LeaseNotExpire); } return true; } String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); ClaimedResidence res = Residence.getResidenceManager().getByName(area); if (area == null || res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); + Residence.msg(player, lm.Invalid_Area); return true; } if (Residence.getLeaseManager().leaseExpires(area)) { int cost = Residence.getLeaseManager().getRenewCost(res); - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenewalCost", area, cost)); + Residence.msg(player, lm.Economy_LeaseRenewalCost, area, cost); } else { - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); + Residence.msg(player, lm.Economy_LeaseNotExpire); } return true; @@ -75,15 +81,15 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } else if (args.length == 4) { if (args[1].equals("set")) { if (!resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } if (args[3].equals("infinite")) { if (Residence.getLeaseManager().leaseExpires(args[2])) { Residence.getLeaseManager().removeExpireTime(args[2]); - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseInfinite")); + Residence.msg(player, lm.Economy_LeaseInfinite); } else { - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); + Residence.msg(player, lm.Economy_LeaseNotExpire); } return true; } @@ -91,7 +97,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command try { days = Integer.parseInt(args[3]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Days")); + Residence.msg(player, lm.Invalid_Days); return true; } Residence.getLeaseManager().setExpireTime(player, args[2], days); @@ -100,4 +106,31 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } return false; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manage residence leases"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", + "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[renew%%cost]", "[residence]")); + + // Sub commands + path += "SubCommands."; + c.get(path + "set.Description", "Set the lease time"); + c.get(path + "set.Info", Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", + "Sets the lease time to a specified number of days, or infinite.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]")); + + c.get(path + "renew.Description", "Renew the lease time"); + c.get(path + "renew.Info", Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "renew"), Arrays.asList("[residence]")); + + c.get(path + "expires.Description", "Lease end date"); + c.get(path + "expires.Info", Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "expires"), Arrays.asList("[residence]")); + + c.get(path + "cost.Description", "Shows renew cost"); + c.get(path + "cost.Info", Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "cost"), Arrays.asList("[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 40a642279..0ca1bc2ba 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -1,17 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; public class limits implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player) && args.length < 2) return false; @@ -31,8 +36,15 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getPermissionManager().updateGroupNameForPlayer(target.getName(), target.isOnline() ? target.getPlayer().getLocation().getWorld().getName() : Residence .getConfigManager().getDefaultWorld(), true); - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(target.getName()); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(target.getName()); rPlayer.getGroup().printLimits(sender, target, rsadm); return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Show your limits."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res limits", "Shows the limitations you have on creating and managing residences.")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 5053e4bce..32fee6017 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -1,15 +1,20 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; public class list implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { int page = 1; try { @@ -36,4 +41,14 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } return false; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "List Residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res list ", + "Lists all the residences a player owns (except hidden ones).", + "If listing your own residences, shows hidden ones as well.", + "To list everyones residences, use /res listall.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index 2df57d822..ca0529567 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -1,19 +1,24 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; public class listall implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { // if (!(sender instanceof Player)) // return false; // // Player player = (Player) sender; - + int page = 1; try { if (args.length > 0) { @@ -21,7 +26,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } } catch (Exception ex) { } - + if (args.length == 1) { Residence.getResidenceManager().listAllResidences(sender, 1, resadmin); } else if (args.length == 2) { @@ -34,4 +39,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "List All Residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res listall ", "Lists hidden residences for a player.")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/listallhidden.java b/src/com/bekvon/bukkit/residence/commands/listallhidden.java index 4783e3950..77c7a401e 100644 --- a/src/com/bekvon/bukkit/residence/commands/listallhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listallhidden.java @@ -1,13 +1,19 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class listallhidden implements cmd { @Override + @CommandAnnotation(false) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { int page = 1; try { @@ -17,7 +23,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } catch (Exception ex) { } if (!resadmin) { - sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(sender, lm.General_NoPermission); return true; } if (args.length == 1) { @@ -32,4 +38,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "List All Hidden Residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res listhidden ", "Lists all hidden residences on the server.")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/listhidden.java b/src/com/bekvon/bukkit/residence/commands/listhidden.java index 40bd1fedc..26a860438 100644 --- a/src/com/bekvon/bukkit/residence/commands/listhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listhidden.java @@ -1,13 +1,19 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class listhidden implements cmd { @Override + @CommandAnnotation(false) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { int page = 1; try { @@ -17,7 +23,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } catch (Exception ex) { } if (!resadmin) { - sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(sender, lm.General_NoPermission); return true; } if (args.length == 1) { @@ -37,4 +43,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } return false; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "List Hidden Residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res listhidden ", "Lists hidden residences for a player.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/lists.java b/src/com/bekvon/bukkit/residence/commands/lists.java index 9b08f2545..dd6d941a2 100644 --- a/src/com/bekvon/bukkit/residence/commands/lists.java +++ b/src/com/bekvon/bukkit/residence/commands/lists.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; public class lists implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -41,21 +47,50 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } else if (args.length == 5) { if (args[1].equals("set")) { Residence.getPermissionListManager().getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); - player.sendMessage(Residence.getLM().getMessage("Flag.Set")); + Residence.msg(player, lm.Flag_Set); return true; } } else if (args.length == 6) { if (args[1].equals("gset")) { Residence.getPermissionListManager().getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - player.sendMessage(Residence.getLM().getMessage("Flag.Set")); + Residence.msg(player, lm.Flag_Set); return true; } else if (args[1].equals("pset")) { Residence.getPermissionListManager().getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - player.sendMessage(Residence.getLM().getMessage("Flag.Set")); + Residence.msg(player, lm.Flag_Set); return true; } } return false; } + @Override + public void getLocale(ConfigReader c, String path) { + + c.get(path + "Description", "Predefined permission lists"); + c.get(path + "Info", Arrays.asList("Predefined permissions that can be applied to a residence.")); + + path += "SubCommands."; + c.get(path + "add.Description", "Add a list"); + c.get(path + "add.Info", Arrays.asList("&eUsage: &6/res lists add ")); + + c.get(path + "remove.Description", "Remove a list"); + c.get(path + "remove.Info", Arrays.asList("&eUsage: &6/res lists remove ")); + + c.get(path + "apply.Description", "Apply a list to a residence"); + c.get(path + "apply.Info", Arrays.asList("&eUsage: &6/res lists apply ")); + + c.get(path + "set.Description", "Set a flag"); + c.get(path + "set.Info", Arrays.asList("&eUsage: &6/res lists set ")); + + c.get(path + "pset.Description", "Set a player flag"); + c.get(path + "pset.Info", Arrays.asList("&eUsage: &6/res lists pset ")); + + c.get(path + "gset.Description", "Set a group flag"); + c.get(path + "gset.Info", Arrays.asList("&eUsage: &6/res lists gset ")); + + c.get(path + "view.Description", "View a list."); + c.get(path + "view.Info", Arrays.asList("&eUsage: &6/res lists view ")); + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java index 2663dac91..8f34b3493 100644 --- a/src/com/bekvon/bukkit/residence/commands/lset.java +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -1,17 +1,23 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class lset implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -31,12 +37,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } if (showinfo) { if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } - player.sendMessage(Residence.getLM().getMessage("General.Blacklist")); + Residence.msg(player, lm.General_Blacklist); res.getItemBlacklist().printList(player); - player.sendMessage(Residence.getLM().getMessage("General.Ignorelist")); + Residence.msg(player, lm.General_Ignorelist); res.getItemIgnoreList().printList(player); return true; } else if (args.length == 4) { @@ -45,7 +51,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command try { mat = Material.valueOf(args[3].toUpperCase()); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Material")); + Residence.msg(player, lm.Invalid_Material); return true; } } else if (args.length == 3) { @@ -54,7 +60,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command try { mat = Material.valueOf(args[2].toUpperCase()); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Material")); + Residence.msg(player, lm.Invalid_Material); return true; } } @@ -64,11 +70,22 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } else if (listtype != null && listtype.equalsIgnoreCase("ignorelist")) { res.getItemIgnoreList().playerListChange(player, mat, resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.List")); + Residence.msg(player, lm.Invalid_List); } return true; } - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Change blacklist and ignorelist options"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res lset [blacklist/ignorelist] [material]", + "&eUsage: &6/res lset Info", + "Blacklisting a material prevents it from being placed in the residence.", + "Ignorelist causes a specific material to not be protected by Residence.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[blacklist%%ignorelist]", + "[material]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 0ca5f9f72..25ec41d8f 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -1,5 +1,7 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.block.Block; @@ -9,14 +11,18 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.signsStuff.Signs; public class market implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -60,7 +66,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } @@ -68,25 +74,25 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (res.isRented()) { if (resadmin || Residence.isResAdminOn(player)) - sender.sendMessage(Residence.getLM().getMessage("Rent.EvictConfirm", res.getName())); + Residence.msg(sender, lm.Rent_EvictConfirm, res.getName()); else if (Residence.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sender.getName())) - sender.sendMessage(Residence.getLM().getMessage("Rent.UnrentConfirm", res.getName())); + Residence.msg(sender, lm.Rent_UnrentConfirm, res.getName()); else Residence.getRentManager().printRentInfo(player, res); } else - sender.sendMessage(Residence.getLM().getMessage("Rent.ReleaseConfirm", res.getName())); + Residence.msg(sender, lm.Rent_ReleaseConfirm, res.getName()); return true; case "confirm": if (!Residence.UnrentConfirm.containsKey(player.getName())) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return false; } String area = Residence.UnrentConfirm.remove(player.getName()); res = Residence.getResidenceManager().getByName(area); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } @@ -106,7 +112,7 @@ else if (Residence.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sende Block block = Residence.getNms().getTargetBlock(player, 10); if (!(block.getState() instanceof Sign)) { - player.sendMessage(Residence.getLM().getMessage("Sign.LookAt")); + Residence.msg(player, lm.Sign_LookAt); return true; } @@ -124,14 +130,14 @@ else if (Residence.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sende ClaimedResidence CurrentRes = Residence.getResidenceManager().getByLoc(sign.getLocation()); if (CurrentRes != null && !CurrentRes.isOwner(player) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotOwner")); + Residence.msg(player, lm.Residence_NotOwner); return true; } res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } @@ -149,7 +155,7 @@ else if (Residence.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sende Residence.getSignUtil().getSigns().addSign(signInfo); Residence.getSignUtil().saveSigns(); } else { - player.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); + Residence.msg(player, lm.Residence_NotForRentOrSell); return true; } @@ -164,14 +170,14 @@ else if (Residence.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sende else if (args.length == 3) res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } boolean sell = Residence.getTransactionManager().viewSaleInfo(res, player); if (Residence.getConfigManager().enabledRentSystem() && res.isForRent()) { Residence.getRentManager().printRentInfo(player, res); } else if (!sell) { - sender.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); + Residence.msg(sender, lm.Residence_NotForRentOrSell); } return true; case "buy": @@ -182,7 +188,7 @@ else if (args.length == 3) res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } @@ -190,7 +196,7 @@ else if (args.length == 3) if (sell) { Residence.getTransactionManager().buyPlot(res, player, resadmin); } else { - sender.sendMessage(Residence.getLM().getMessage("Residence.NotForRentOrSell")); + Residence.msg(sender, lm.Residence_NotForRentOrSell); } return true; case "unsell": @@ -208,7 +214,7 @@ else if (args.length == 3) try { amount = Integer.parseInt(args[3]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + Residence.msg(player, lm.Invalid_Amount); return true; } Residence.getTransactionManager().putForSale(args[2], player, amount, resadmin); @@ -232,7 +238,7 @@ private static boolean commandResMarketRent(String[] args, boolean resadmin, Pla } else if (args[3].equalsIgnoreCase("f") || args[3].equalsIgnoreCase("false")) { repeat = false; } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Boolean")); + Residence.msg(player, lm.Invalid_Boolean); return true; } } @@ -245,7 +251,7 @@ else if (args.length == 4) if (res != null) Residence.getRentManager().rent(player, res, repeat, resadmin); else - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } @@ -265,7 +271,7 @@ private static boolean commandResMarketPayRent(String[] args, boolean resadmin, if (res != null) Residence.getRentManager().payRent(player, res, resadmin); else - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } @@ -274,7 +280,7 @@ private static boolean commandResMarketRentable(String[] args, boolean resadmin, return false; } if (!Residence.getConfigManager().enabledRentSystem()) { - player.sendMessage(Residence.getLM().getMessage("Rent.Disabled")); + Residence.msg(player, lm.Rent_Disabled); return true; } int days; @@ -282,13 +288,13 @@ private static boolean commandResMarketRentable(String[] args, boolean resadmin, try { cost = Integer.parseInt(args[3]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Cost")); + Residence.msg(player, lm.Invalid_Cost); return true; } try { days = Integer.parseInt(args[4]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Days")); + Residence.msg(player, lm.Invalid_Days); return true; } boolean AllowRenewing = Residence.getConfigManager().isRentAllowRenewing(); @@ -299,7 +305,7 @@ private static boolean commandResMarketRentable(String[] args, boolean resadmin, } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { AllowRenewing = false; } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Boolean")); + Residence.msg(player, lm.Invalid_Boolean); return true; } } @@ -312,7 +318,7 @@ private static boolean commandResMarketRentable(String[] args, boolean resadmin, } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { StayInMarket = false; } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Boolean")); + Residence.msg(player, lm.Invalid_Boolean); return true; } } @@ -325,7 +331,7 @@ private static boolean commandResMarketRentable(String[] args, boolean resadmin, } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { AllowAutoPay = false; } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Boolean")); + Residence.msg(player, lm.Invalid_Boolean); return true; } } @@ -336,7 +342,7 @@ private static boolean commandResMarketRentable(String[] args, boolean resadmin, private static boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player player) { if (!Residence.getConfigManager().enableEconomy()) { - player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + Residence.msg(player, lm.Economy_MarketDisabled); return true; } if (args.length != 3 && args.length != 4) { @@ -360,12 +366,12 @@ private static boolean commandResMarketAutoPay(String[] args, boolean resadmin, } else if (barg.equalsIgnoreCase("false") || barg.equalsIgnoreCase("f")) { value = false; } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Boolean")); + Residence.msg(player, lm.Invalid_Boolean); return true; } if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } @@ -374,17 +380,17 @@ private static boolean commandResMarketAutoPay(String[] args, boolean resadmin, } else if (res.isForRent()) { Residence.getRentManager().setRentRepeatable(player, res.getName(), value, resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Economy.RentReleaseInvalid", ChatColor.YELLOW + res.getName() + ChatColor.RED)); + Residence.msg(player, lm.Economy_RentReleaseInvalid, ChatColor.YELLOW + res.getName() + ChatColor.RED); } return true; } private static boolean commandResMarketList(String[] args, Player player, int page) { if (!Residence.getConfigManager().enableEconomy()) { - player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + Residence.msg(player, lm.Economy_MarketDisabled); return true; } - player.sendMessage(Residence.getLM().getMessage("General.MarketList")); + Residence.msg(player, lm.General_MarketList); if (args.length < 3) return false; @@ -401,4 +407,74 @@ private static boolean commandResMarketList(String[] args, Player player, int pa return false; } + @Override + public void getLocale(ConfigReader c, String path) { + + c.get(path + "Description", "Buy, Sell, or Rent Residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res market ? for more Info")); + + path += "SubCommands."; + + c.get(path + "Info.Description", "Get economy Info on residence"); + c.get(path + "Info.Info", Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "Info"), Arrays.asList("[residence]")); + + c.get(path + "list.Description", "Lists rentable and for sale residences."); + c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res market list [rent/sell]")); + + c.get(path + "list.SubCommands.rent.Description", "Lists rentable residences."); + c.get(path + "list.SubCommands.rent.Info", Arrays.asList("&eUsage: &6/res market list rent")); + + c.get(path + "list.SubCommands.sell.Description", "Lists for sale residences."); + c.get(path + "list.SubCommands.sell.Info", Arrays.asList("&eUsage: &6/res market list sell")); + + c.get(path + "sell.Description", "Sell a residence"); + c.get(path + "sell.Info", Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", + "Another player can buy the residence with /res market buy")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sell"), Arrays.asList("[residence]")); + + c.get(path + "sign.Description", "Set market sign"); + c.get(path + "sign.Info", Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sign"), Arrays.asList("[residence]")); + + c.get(path + "buy.Description", "Buy a residence"); + c.get(path + "buy.Info", Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "buy"), Arrays.asList("[residence]")); + + c.get(path + "unsell.Description", "Stops selling a residence"); + c.get(path + "unsell.Info", Arrays.asList("&eUsage: &6/res market unsell [residence]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "unsell"), Arrays.asList("[residence]")); + + c.get(path + "rent.Description", "ent a residence"); + c.get(path + "rent.Info", Arrays.asList("&eUsage: &6/res market rent [residence] ", + "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rent"), Arrays.asList("[cresidence]", "[true%%false]")); + + c.get(path + "rentable.Description", "Make a residence rentable."); + c.get(path + "rentable.Info", Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", + "Makes a residence rentable for [cost] money for every [days] number of days.", + "If is true, the residence will be able to be rented again before rent expires.", + "If is true, the residence will stay in market after last renter will be removed.", + "If is true, money for rent will be automaticaly taken from players balance if he chosen that option when renting")); + c.get(path + "rentable.Args", "[residence]"); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rentable"), Arrays.asList("[residence]")); + + c.get(path + "autopay.Description", "Sets residence AutoPay to given value"); + c.get(path + "autopay.Info", Arrays.asList("&eUsage: &6/res market autopay [true/false]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "autopay"), Arrays.asList("[residence]", "[true%%false]")); + + c.get(path + "payrent.Description", "Pays rent for defined residence"); + c.get(path + "payrent.Info", Arrays.asList("&eUsage: &6/res market payrent ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "payrent"), Arrays.asList("[residence]")); + + c.get(path + "confirm.Description", "Confirms residence unrent/release action"); + c.get(path + "confirm.Info", Arrays.asList("&eUsage: &6/res market confirm")); + + c.get(path + "release.Description", "Remove a residence from rent or rentable."); + c.get(path + "release.Info", Arrays.asList("&eUsage: &6/res market release [residence]", + "If you are the renter, this command releases the rent on the house for you.", + "If you are the owner, this command makes the residence not for rent anymore.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "release"), Arrays.asList("[residence]")); + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index 5964a5252..dd7c1b806 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -1,17 +1,23 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class material implements cmd { @SuppressWarnings("deprecation") @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -21,10 +27,17 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; } try { - player.sendMessage(Residence.getLM().getMessage("General.MaterialGet", args[1], Material.getMaterial(Integer.parseInt(args[1])).name())); + Residence.msg(player, lm.General_MaterialGet, args[1], Material.getMaterial(Integer.parseInt(args[1])).name()); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Material")); + Residence.msg(player, lm.Invalid_Material); } return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Check if material exists by its id"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res material [material]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[material]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 6d996a710..42b223478 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class message implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -36,7 +42,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (res != null) { res.setEnterLeaveMessage(player, null, true, resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } return true; } else if (args.length > 2 && args[2].equals("leave")) { @@ -44,11 +50,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (res != null) { res.setEnterLeaveMessage(player, null, false, resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } return true; } - player.sendMessage(Residence.getLM().getMessage("Invalid.MessageType")); + Residence.msg(player, lm.Invalid_MessageType); return true; } else if (args.length > 2 && args[2].equals("enter")) { enter = true; @@ -73,10 +79,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } return true; } - player.sendMessage(Residence.getLM().getMessage("Invalid.MessageType")); + Residence.msg(player, lm.Invalid_MessageType); return true; } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.MessageType")); + Residence.msg(player, lm.Invalid_MessageType); return true; } if (start == 0) { @@ -89,8 +95,16 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (res != null) { res.setEnterLeaveMessage(player, message, enter, resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manage residence enter / leave messages"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", + "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[enter%%leave]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/mirror.java b/src/com/bekvon/bukkit/residence/commands/mirror.java index 74fe2b560..f92bfac0f 100644 --- a/src/com/bekvon/bukkit/residence/commands/mirror.java +++ b/src/com/bekvon/bukkit/residence/commands/mirror.java @@ -1,15 +1,20 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; public class mirror implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -21,4 +26,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getResidenceManager().mirrorPerms(player, args[2], args[1], resadmin); return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Mirrors Flags"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res mirror [Source Residence] [Target Residence]", + "Mirrors flags from one residence to another. You must be owner of both or a admin to do this.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index 2dff24f28..fc18da4a0 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -1,16 +1,20 @@ package com.bekvon.bukkit.residence.commands; -import org.bukkit.Bukkit; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; public class padd implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -23,17 +27,23 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length == 2) { if (!Residence.isPlayerExist(player, args[1], true)) return false; - - Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " trusted true"); + player.performCommand(baseCmd + " pset " + args[1] + " trusted true"); return true; } if (args.length == 3) { if (!Residence.isPlayerExist(player, args[2], true)) return false; - Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " " + args[2] + " trusted true"); + player.performCommand(baseCmd + " pset " + args[1] + " " + args[2] + " trusted true"); return true; } return false; } + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Add player to residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res padd [player]", "Adds essential flags for player")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index 4f672fff4..410a03447 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -1,15 +1,21 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; public class pdel implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -30,4 +36,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; } + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Remove player from residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res pdel [player]", "Removes essential flags from player")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]")); + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index cd6244eb8..b8aee790c 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -1,17 +1,23 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class pset implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player) && args.length != 5 && args.length == 4 && !args[3].equalsIgnoreCase("removeall")) return false; @@ -22,7 +28,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (area != null) { area.getPermissions().removeAllPlayerFlags(sender, args[1], resadmin); } else { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); } return true; } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { @@ -30,7 +36,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (area != null) { area.getPermissions().removeAllPlayerFlags(sender, args[2], resadmin); } else { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); } return true; } else if (args.length == 4) { @@ -43,7 +49,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (area != null) { area.getPermissions().setPlayerFlag(sender, args[1], args[2], args[3], resadmin, true); } else { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); } return true; } else if (args.length == 5) { @@ -53,7 +59,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (area != null) { area.getPermissions().setPlayerFlag(sender, args[2], args[3], args[4], resadmin, true); } else { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); } return true; } else if ((args.length == 2 || args.length == 3) && Residence.getConfigManager().useFlagGUI()) { @@ -69,14 +75,14 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } if (res == null) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); return true; } if (!Residence.isPlayerExist(player, targetPlayer, true)) return false; if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, "admin", false)) { - sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(sender, lm.General_NoPermission); return true; } SetFlag flag = new SetFlag(res.getName(), player, resadmin); @@ -90,4 +96,13 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } return false; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Set flags on a specific player for a Residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", + "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]", "[flag]", + "[true%%false%%remove]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index c83e69cfc..c7b1b9338 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -8,20 +8,25 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class rc implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return true; Player player = (Player) sender; String pname = player.getName(); if (!Residence.getConfigManager().chatEnabled()) { - player.sendMessage(Residence.getLM().getMessage("Residence.ChatDisabled")); + Residence.msg(player, lm.Residence_ChatDisabled); return false; } if (args.length > 0) @@ -36,7 +41,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getPlayerListener().removePlayerResidenceChat(player); return true; } - player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(player, lm.Residence_NotIn); return true; } ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); @@ -45,8 +50,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getPlayerListener().removePlayerResidenceChat(player); return true; } - if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "chat", res.getName())); + if (!res.getPermissions().playerHas(player.getName(), Flags.chat, true) && !Residence.getPermissionManager().isResidenceAdmin(player)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.chat, res.getName()); return false; } @@ -61,12 +66,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } ClaimedResidence res = Residence.getResidenceManager().getByName(args[0]); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Chat.InvalidChannel")); + Residence.msg(player, lm.Chat_InvalidChannel); return true; } if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "chat", res.getName())); + Residence.msg(player, lm.Residence_FlagDeny, "chat", res.getName()); return false; } Residence.getPlayerListener().tooglePlayerResidenceChat(player, res.getName()); @@ -79,7 +84,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); if (chat == null) { - player.sendMessage(Residence.getLM().getMessage("Chat.JoinFirst")); + Residence.msg(player, lm.Chat_JoinFirst); return true; } @@ -89,12 +94,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; if (!res.isOwner(player) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } if (!player.hasPermission("residence.chatcolor")) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } @@ -104,20 +109,20 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command posibleColor = "&" + posibleColor; if (posibleColor.length() != 2 || ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', posibleColor)).length() != 0) { - player.sendMessage(Residence.getLM().getMessage("Chat.InvalidColor")); + Residence.msg(player, lm.Chat_InvalidColor); return true; } ChatColor color = ChatColor.getByChar(posibleColor.replace("&", "")); res.setChannelColor(color); chat.setChannelColor(color); - player.sendMessage(Residence.getLM().getMessage("Chat.ChangedColor", color.name())); + Residence.msg(player, lm.Chat_ChangedColor, color.name()); return true; } else if (args[0].equalsIgnoreCase("setprefix")) { ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); if (chat == null) { - player.sendMessage(Residence.getLM().getMessage("Chat.JoinFirst")); + Residence.msg(player, lm.Chat_JoinFirst); return true; } @@ -127,32 +132,32 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; if (!res.isOwner(player) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } if (!player.hasPermission("residence.chatprefix")) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } String prefix = args[1]; if (prefix.length() > Residence.getConfigManager().getChatPrefixLength()) { - player.sendMessage(Residence.getLM().getMessage("Chat.InvalidPrefixLength", Residence.getConfigManager() - .getChatPrefixLength())); + Residence.msg(player, lm.Chat_InvalidPrefixLength, Residence.getConfigManager() + .getChatPrefixLength()); return true; } res.setChatPrefix(prefix); chat.setChatPrefix(prefix); - player.sendMessage(Residence.getLM().getMessage("Chat.ChangedPrefix", ChatColor.translateAlternateColorCodes('&', prefix))); + Residence.msg(player, lm.Chat_ChangedPrefix, ChatColor.translateAlternateColorCodes('&', prefix)); return true; } else if (args[0].equalsIgnoreCase("kick")) { ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); if (chat == null) { - player.sendMessage(Residence.getLM().getMessage("Chat.JoinFirst")); + Residence.msg(player, lm.Chat_JoinFirst); return true; } @@ -162,27 +167,47 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; if (!res.getOwner().equals(player.getName()) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } if (!player.hasPermission("residence.chatkick")) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } String targetName = args[1]; if (!chat.hasMember(targetName)) { - player.sendMessage(Residence.getLM().getMessage("Chat.NotInChannel")); + Residence.msg(player, lm.Chat_NotInChannel); return false; } chat.leave(targetName); Residence.getPlayerListener().removePlayerResidenceChat(targetName); - player.sendMessage(Residence.getLM().getMessage("Chat.Kicked", targetName, chat.getChannelName())); + Residence.msg(player, lm.Chat_Kicked, targetName, chat.getChannelName()); return true; } } return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Joins current or defined residence chat chanel"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res rc (residence)", "Teleports you to random location in defined world.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + + path += "SubCommands."; + c.get(path + "leave.Description", "Leaves current residence chat chanel"); + c.get(path + "leave.Info", Arrays.asList("&eUsage: &6/res rc leave", "If you are in residence chat cnahel then you will leave it")); + + c.get(path + "setcolor.Description", "Sets residence chat chanel text color"); + c.get(path + "setcolor.Info", Arrays.asList("&eUsage: &6/res rc setcolor [colorCode]", "Sets residence chat chanel text color")); + + c.get(path + "setprefix.Description", "Sets residence chat chanel prefix"); + c.get(path + "setprefix.Info", Arrays.asList("&eUsage: &6/res rc setprefix [newName]", "Sets residence chat chanel prefix")); + + c.get(path + "kick.Description", "Kicks player from chanel"); + c.get(path + "kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", "Kicks player from chanel")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index 1f1a5cafe..a3c0beb58 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -7,6 +7,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; +import java.util.Arrays; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -15,7 +16,10 @@ import org.bukkit.configuration.file.YamlConfiguration; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.itemlist.WorldItemManager; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.protection.WorldFlagManager; @@ -24,9 +28,10 @@ public class reload implements cmd { @Override + @CommandAnnotation(false) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!resadmin && !sender.isOp()) { - sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(sender, lm.General_NoPermission); return true; } @@ -86,4 +91,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } return false; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "reload lanf or config files"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res reload [config/lang/groups/flags]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[config%%lang%%groups%%flags]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 053cb2a8d..0ddccbd16 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -1,17 +1,23 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class remove implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { ClaimedResidence res = null; @@ -23,12 +29,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } if (res == null) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); return true; } if (res.isSubzone() && !sender.hasPermission("residence.delete.subzone") && !resadmin) { - sender.sendMessage(Residence.getLM().getMessage("Subzone.CantDelete")); + Residence.msg(sender, lm.Subzone_CantDelete); return true; } @@ -37,12 +43,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command !resadmin && Residence.getConfigManager().isPreventSubZoneRemoval() && !res.getParent().isOwner(senderName)) { - sender.sendMessage(Residence.getLM().getMessage("Subzone.CantDeleteNotOwnerOfParent")); + Residence.msg(sender, lm.Subzone_CantDeleteNotOwnerOfParent); return true; } if (!res.isSubzone() && !sender.hasPermission("residence.delete") && !resadmin) { - sender.sendMessage(Residence.getLM().getMessage("Residence.CantDeleteResidence")); + Residence.msg(sender, lm.Residence_CantDeleteResidence); return true; } @@ -58,18 +64,18 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (sender instanceof Player) { String raw = ""; if (res.isSubzone()) { - raw = Residence.getResidenceManager().convertToRaw(null, Residence.getLM().getMessage("Subzone.DeleteConfirm", res.getResidenceName()), + raw = Residence.getResidenceManager().convertToRaw(null, Residence.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()), "Click to confirm remove", cmd + " confirm"); } else { - raw = Residence.getResidenceManager().convertToRaw(null, Residence.getLM().getMessage("Residence.DeleteConfirm", res.getResidenceName()), + raw = Residence.getResidenceManager().convertToRaw(null, Residence.msg(lm.Residence_DeleteConfirm, res.getResidenceName()), "Click to confirm remove", cmd + " confirm"); } Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); } else { if (res.isSubzone()) - sender.sendMessage(Residence.getLM().getMessage("Subzone.DeleteConfirm", res.getResidenceName())); + Residence.msg(sender, lm.Subzone_DeleteConfirm, res.getResidenceName()); else - sender.sendMessage(Residence.getLM().getMessage("Residence.DeleteConfirm", res.getResidenceName())); + Residence.msg(sender, lm.Residence_DeleteConfirm, res.getResidenceName()); } Residence.deleteConfirm.put(senderName, resname); } else { @@ -77,4 +83,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Remove residences."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res remove ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/removeall.java b/src/com/bekvon/bukkit/residence/commands/removeall.java index 0bba9819f..61538ffe2 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeall.java +++ b/src/com/bekvon/bukkit/residence/commands/removeall.java @@ -1,13 +1,19 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class removeall implements cmd { @Override + @CommandAnnotation(false) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length != 2 && args.length != 1) { return false; @@ -17,11 +23,19 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (resadmin) { Residence.getResidenceManager().removeAllByOwner(target); - sender.sendMessage(Residence.getLM().getMessage("Residence.RemovePlayersResidences", target)); + Residence.msg(sender, lm.Residence_RemovePlayersResidences, target); } else { - sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(sender, lm.General_NoPermission); } return true; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Remove all residences owned by a player."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeall [owner]", + "Removes all residences owned by a specific player.'", "Requires /resadmin if you use it on anyone besides yourself.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index 4594d9913..5ae915bfe 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -1,15 +1,20 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; public class removeworld implements cmd { @Override + @CommandAnnotation(false) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length != 2) @@ -23,4 +28,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Removes all residences from particular world"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeworld [worldName]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/rename.java b/src/com/bekvon/bukkit/residence/commands/rename.java index ef43ca267..2ab82477a 100644 --- a/src/com/bekvon/bukkit/residence/commands/rename.java +++ b/src/com/bekvon/bukkit/residence/commands/rename.java @@ -1,15 +1,20 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; public class rename implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -21,4 +26,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } return false; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Renames a residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", + "The name must not already be taken by another residence.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/renamearea.java b/src/com/bekvon/bukkit/residence/commands/renamearea.java index 043519de7..8895019b1 100644 --- a/src/com/bekvon/bukkit/residence/commands/renamearea.java +++ b/src/com/bekvon/bukkit/residence/commands/renamearea.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class renamearea implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -21,9 +27,16 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res == null) - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); else res.renameArea(player, args[2], args[3], resadmin); return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Rename area name for residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeworld [residence] [oldAreaName] [newAreaName]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/resadmin.java b/src/com/bekvon/bukkit/residence/commands/resadmin.java index c0afffc9b..e45f8e69d 100644 --- a/src/com/bekvon/bukkit/residence/commands/resadmin.java +++ b/src/com/bekvon/bukkit/residence/commands/resadmin.java @@ -1,15 +1,21 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class resadmin implements cmd { @Override + @CommandAnnotation(false) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -19,12 +25,18 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Player player = (Player) sender; if (args[1].equals("on")) { Residence.resadminToggle.add(player.getName()); - player.sendMessage(Residence.getLM().getMessage("General.AdminToggleTurnOn")); + Residence.msg(player, lm.General_AdminToggleTurnOn); } else if (args[1].equals("off")) { Residence.resadminToggle.remove(player.getName()); - player.sendMessage(Residence.getLM().getMessage("General.AdminToggleTurnOff")); + Residence.msg(player, lm.General_AdminToggleTurnOff); } return true; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Enabled or disable residence admin"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res resadmin [on/off]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[on%%off]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/resbank.java b/src/com/bekvon/bukkit/residence/commands/resbank.java index 12c39176d..011494e96 100644 --- a/src/com/bekvon/bukkit/residence/commands/resbank.java +++ b/src/com/bekvon/bukkit/residence/commands/resbank.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class resbank implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length != 3 && args.length != 4) { @@ -21,7 +27,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length == 4) { res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); return true; } } else { @@ -29,7 +35,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); } if (res == null) { - sender.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(sender, lm.Residence_NotIn); return true; } int amount = 0; @@ -39,7 +45,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command else amount = Integer.parseInt(args[3]); } catch (Exception ex) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + Residence.msg(sender, lm.Invalid_Amount); return true; } if (args[1].equals("deposit")) { @@ -52,4 +58,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Deposit or widraw money from residence bank"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res resbank [deposit/withdraw] [amount]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[deposit%%withdraw]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index 155c75b13..05693bdb0 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -1,16 +1,21 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class reset implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -25,4 +30,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Reset residence to default flags."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res reset ", + "Resets the flags on a residence to their default. You must be the owner or an admin to do this.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 5cb35a2da..022637843 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -1,17 +1,23 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.RandomTeleport; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class rt implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -25,13 +31,13 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (Residence.getRandomTeleportMap().containsKey(player.getName()) && !resadmin) { if (Residence.getRandomTeleportMap().get(player.getName()) + (sec * 1000) > System.currentTimeMillis()) { int left = (int) (sec - ((System.currentTimeMillis() - Residence.getRandomTeleportMap().get(player.getName())) / 1000)); - player.sendMessage(Residence.getLM().getMessage("RandomTeleport.TpLimit", left)); + Residence.msg(player, lm.RandomTeleport_TpLimit, left); return true; } } if (!player.hasPermission("residence.randomtp") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } @@ -46,7 +52,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } if (wname == null) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.World")); + Residence.msg(sender, lm.Invalid_World); String worlds = ""; @@ -55,7 +61,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command break; } - sender.sendMessage(Residence.getLM().getMessage("RandomTeleport.WorldList", worlds)); + Residence.msg(sender, lm.RandomTeleport_WorldList, worlds); return true; } } @@ -66,13 +72,13 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getRandomTeleportMap().put(player.getName(), System.currentTimeMillis()); if (loc == null) { - player.sendMessage(Residence.getLM().getMessage("RandomTeleport.IncorrectLocation", sec)); + Residence.msg(player, lm.RandomTeleport_IncorrectLocation, sec); return true; } if (Residence.getConfigManager().getTeleportDelay() > 0 && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("RandomTeleport.TeleportStarted", loc.getX(), loc.getY(), loc - .getZ(), Residence.getConfigManager().getTeleportDelay())); + Residence.msg(player, lm.RandomTeleport_TeleportStarted, loc.getX(), loc.getY(), loc + .getZ(), Residence.getConfigManager().getTeleportDelay()); Residence.getTeleportDelayMap().add(player.getName()); Residence.getRandomTpManager().performDelaydTp(loc, player); } else @@ -80,4 +86,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Teleports to random location in world"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res rt", "Teleports you to random location in defined world.")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 4f6ab0035..e4c92399c 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; import java.util.logging.Level; import java.util.logging.Logger; @@ -10,8 +11,11 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -19,26 +23,27 @@ public class select implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); if (!group.selectCommandAccess() && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Select.Disabled")); + Residence.msg(player, lm.Select_Disabled); return true; } if (!group.canCreateResidences() && rPlayer.getMaxSubzones() <= 0 && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Select.Disabled")); + Residence.msg(player, lm.Select_Disabled); return true; } if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player .isPermissionSet("residence.select")) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Select.Disabled")); + Residence.msg(player, lm.Select_Disabled); return true; } if (args.length == 2) { @@ -70,26 +75,26 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getSelectionManager().bedrock(player, resadmin); return true; } else if (args[1].equals("coords")) { - player.sendMessage(Residence.getLM().getMessage("General.Separator")); + Residence.msg(player, lm.General_Separator); Location playerLoc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); if (playerLoc1 != null) { - player.sendMessage(Residence.getLM().getMessage("Select.Primary", Residence.getLM().getMessage("General.CoordsTop", playerLoc1.getBlockX(), playerLoc1 - .getBlockY(), playerLoc1.getBlockZ()))); + Residence.msg(player, lm.Select_Primary, Residence.msg(lm.General_CoordsTop, playerLoc1.getBlockX(), playerLoc1 + .getBlockY(), playerLoc1.getBlockZ())); } Location playerLoc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); if (playerLoc2 != null) { - player.sendMessage(Residence.getLM().getMessage("Select.Secondary", Residence.getLM().getMessage("General.CoordsBottom", playerLoc2.getBlockX(), + Residence.msg(player, lm.Select_Secondary, Residence.msg(lm.General_CoordsBottom, playerLoc2.getBlockX(), playerLoc2 - .getBlockY(), playerLoc2.getBlockZ()))); + .getBlockY(), playerLoc2.getBlockZ())); } - player.sendMessage(Residence.getLM().getMessage("General.Separator")); + Residence.msg(player, lm.General_Separator); return true; } else if (args[1].equals("chunk")) { Residence.getSelectionManager().selectChunk(player); return true; } else if (args[1].equals("worldedit")) { if (Residence.getSelectionManager().worldEdit(player)) { - player.sendMessage(Residence.getLM().getMessage("Select.Success")); + Residence.msg(player, lm.Select_Success); } return true; } @@ -99,7 +104,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command try { amount = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + Residence.msg(player, lm.Invalid_Amount); return true; } Residence.getSelectionManager().modify(player, false, amount); @@ -109,7 +114,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command try { amount = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + Residence.msg(player, lm.Invalid_Amount); return true; } Residence.getSelectionManager().modify(player, true, amount); @@ -120,12 +125,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Player target = player; if (args.length == 3) { if (!player.hasPermission("residence.select.auto.others")) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } target = Bukkit.getPlayer(args[2]); if (target == null) { - player.sendMessage(Residence.getLM().getMessage("General.NotOnline")); + Residence.msg(player, lm.General_NotOnline); return true; } } @@ -142,7 +147,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command res = Residence.getResidenceManager().getByLoc(player.getLocation()); } if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } resName = res.getName(); @@ -157,9 +162,9 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (area != null) { Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), true); Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), true); - player.sendMessage(Residence.getLM().getMessage("Select.Area", areaName, resName)); + Residence.msg(player, lm.Select_Area, areaName, resName); } else { - player.sendMessage(Residence.getLM().getMessage("Area.NonExist")); + Residence.msg(player, lm.Area_NonExist); } return true; } @@ -167,9 +172,57 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getSelectionManager().selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); return true; } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("Select.Fail")); + Residence.msg(player, lm.Select_Fail); return true; } } + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Selection Commands"); + c.get(path + "Info", Arrays.asList("This command selects areas for usage with residence.", + "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle.")); + + // Sub commands + path += "SubCommands."; + + c.get(path + "coords.Description", "Display selected coordinates"); + c.get(path + "coords.Info", Arrays.asList("&eUsage: &6/res select coords")); + + c.get(path + "size.Description", "Display selected size"); + c.get(path + "size.Info", Arrays.asList("&eUsage: &6/res select size")); + + c.get(path + "auto.Description", "Turns on auto selection tool"); + c.get(path + "auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "auto"), Arrays.asList("[playername]")); + + c.get(path + "cost.Description", "Display selection cost"); + c.get(path + "cost.Info", Arrays.asList("&eUsage: &6/res select cost")); + + c.get(path + "vert.Description", "Expand Selection Vertically"); + c.get(path + "vert.Info", Arrays.asList("&eUsage: &6/res select vert", "Will expand selection as high and as low as allowed.")); + + c.get(path + "sky.Description", "Expand Selection to Sky"); + c.get(path + "sky.Info", Arrays.asList("&eUsage: &6/res select sky", "Expands as high as your allowed to go.")); + + c.get(path + "bedrock.Description", "Expand Selection to Bedrock"); + c.get(path + "bedrock.Info", Arrays.asList("&eUsage: &6/res select bedrock", "Expands as low as your allowed to go.")); + + c.get(path + "expand.Description", "Expand selection in a direction."); + c.get(path + "expand.Info", Arrays.asList("&eUsage: &6/res select expand ", "Expands in the direction your looking.")); + + c.get(path + "shift.Description", "Shift selection in a direction"); + c.get(path + "shift.Info", Arrays.asList("&eUsage: &6/res select shift ", "Pushes your selection by in the direction your looking.")); + + c.get(path + "chunk.Description", "Select the chunk your currently in."); + c.get(path + "chunk.Info", Arrays.asList("&eUsage: &6/res select chunk", "Selects the chunk your currently standing in.")); + + c.get(path + "residence.Description", "Select a existing area in a residence."); + c.get(path + "residence.Info", Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "residence"), Arrays.asList("[residence]")); + + c.get(path + "worldedit.Description", "Set selection using the current WorldEdit selection."); + c.get(path + "worldedit.Info", Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection.")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java index 60db9d121..f034882fb 100644 --- a/src/com/bekvon/bukkit/residence/commands/server.java +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class server implements cmd { @Override + @CommandAnnotation(false) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -18,20 +24,28 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Player player = (Player) sender; if (!resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } if (args.length == 2) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } res.getPermissions().setOwner(Residence.getServerLandname(), false); - player.sendMessage(Residence.getLM().getMessage("Residence.OwnerChange", args[1], Residence.getServerLandname())); + Residence.msg(player, lm.Residence_OwnerChange, args[1], Residence.getServerLandname()); return true; } - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + + c.get(path + "Description", "Make land server owned."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/resadmin server [residence]", "Make a residence server owned.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 8c404deac..86c6f6c35 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -1,17 +1,23 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class set implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player) && args.length != 4) return false; @@ -22,7 +28,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (area != null) { Residence.getResidenceManager().getByName(area).getPermissions().setFlag(sender, args[1], args[2], resadmin); } else { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); } return true; } else if (args.length == 4) { @@ -30,7 +36,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (area != null) { area.getPermissions().setFlag(sender, args[2], args[3], resadmin); } else { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); } return true; } else if ((args.length == 1 || args.length == 2) && Residence.getConfigManager().useFlagGUI()) { @@ -41,12 +47,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command else res = Residence.getResidenceManager().getByName(args[1]); if (res == null) { - - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); return true; } if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, "admin", false)) { - sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(sender, lm.General_NoPermission); return true; } SetFlag flag = new SetFlag(res.getName(), player, resadmin); @@ -58,4 +63,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } return false; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Set general flags on a Residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res set [flag] [true/false/remove]", + "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[flag]", "[true%%false%%remove]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/setmain.java b/src/com/bekvon/bukkit/residence/commands/setmain.java index 94fd9eb45..daca6c437 100644 --- a/src/com/bekvon/bukkit/residence/commands/setmain.java +++ b/src/com/bekvon/bukkit/residence/commands/setmain.java @@ -1,17 +1,23 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class setmain implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) @@ -30,18 +36,18 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command res = Residence.getResidenceManager().getByName(args[1]); if (res == null) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); return false; } if (res.isOwner(player)) { res.setMainResidence(res.isMainResidence() ? false : true); } else if (Residence.getRentManager().isRented(res.getName()) && !Residence.getRentManager().getRentingPlayer(res.getName()).equalsIgnoreCase(player.getName())) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); return false; } - player.sendMessage(Residence.getLM().getMessage("Residence.ChangedMain", res.getTopParentName())); + Residence.msg(player, lm.Residence_ChangedMain, res.getTopParentName()); ResidencePlayer rplayer = Residence.getPlayerManager().getResidencePlayer(player); if (rplayer != null) @@ -49,4 +55,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Sets defined residence as main to show up in chat as prefix"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res setmain (residence)", "Set defined residence as main.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index 9a1d3527e..25f3848fb 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -1,21 +1,27 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class setowner implements cmd { @Override + @CommandAnnotation(false) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length < 3) return false; if (!resadmin) { - sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(sender, lm.General_NoPermission); return true; } @@ -29,14 +35,21 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command area.getPermissions().applyDefaultFlags(); if (area.getParent() == null) { - sender.sendMessage(Residence.getLM().getMessage("Residence.OwnerChange", args[1], args[2])); + Residence.msg(sender, lm.Residence_OwnerChange, args[1], args[2]); } else { - sender.sendMessage(Residence.getLM().getMessage("Subzone.OwnerChange", args[1].split("\\.")[args[1].split("\\.").length - 1], args[2])); + Residence.msg(sender, lm.Subzone_OwnerChange, args[1].split("\\.")[args[1].split("\\.").length - 1], args[2]); } } else { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(sender, lm.Invalid_Residence); } return true; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Change owner of a residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index d8aa4449c..2ce2afa9d 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -2,6 +2,7 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; @@ -17,7 +18,10 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.shopStuff.Board; import com.bekvon.bukkit.residence.shopStuff.ShopListener; @@ -27,6 +31,7 @@ public class shop implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -48,7 +53,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length == 2) { res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(player, lm.Residence_NotIn); return true; } } else if (args.length == 3) { @@ -58,11 +63,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command VotePage = Integer.parseInt(args[2]); res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(player, lm.Residence_NotIn); return true; } } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + Residence.msg(player, lm.General_UseNumbers); return true; } } @@ -70,19 +75,19 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } else if (args.length == 4) { res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(player, lm.Residence_NotIn); return true; } try { VotePage = Integer.parseInt(args[3]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + Residence.msg(player, lm.General_UseNumbers); return true; } } if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(player, lm.Residence_NotIn); return true; } @@ -100,11 +105,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } int pagecount = (int) Math.ceil((double) VoteList.size() / (double) 10); if (page > pagecount || page < 1) { - sender.sendMessage(Residence.getLM().getMessage("Shop.NoVotes")); + Residence.msg(sender, lm.Shop_NoVotes); return true; } - player.sendMessage(Residence.getLM().getMessage("Shop.VotesTopLine", separator, res.getName(), VotePage, pagecount, separator)); + Residence.msg(player, lm.Shop_VotesTopLine, separator, res.getName(), VotePage, pagecount, separator); int start = VotePage * 10 - 9; int end = VotePage * 10 + 1; @@ -124,7 +129,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ft.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); String timeString = ft.format(dNow); - String message = Residence.getLM().getMessage("Shop.VotesList", i, one.getName(), (Residence.getConfigManager().isOnlyLike() + String message = Residence.msg(lm.Shop_VotesList, i, one.getName(), (Residence.getConfigManager().isOnlyLike() ? "" : one.getVote()), timeString); player.sendMessage(message); i++; @@ -139,11 +144,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Prevpage = page > 1 ? Prevpage : page; String prevCmd = "/res shop votes " + res.getName() + " " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = "/res shop votes " + res.getName() + " " + NextPage; - String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; @@ -159,7 +164,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command try { Shoppage = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + Residence.msg(player, lm.General_UseNumbers); return true; } } @@ -173,11 +178,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } int pagecount = (int) Math.ceil((double) ShopList.size() / (double) 10); if (page > pagecount || page < 1) { - sender.sendMessage(Residence.getLM().getMessage("Shop.NoVotes")); + Residence.msg(sender, lm.Shop_NoVotes); return true; } - player.sendMessage(Residence.getLM().getMessage("Shop.ListTopLine", separator, Shoppage, pagecount, separator)); + Residence.msg(player, lm.Shop_ListTopLine, separator, Shoppage, pagecount, separator); int start = Shoppage * 10 - 9; int end = Shoppage * 10 + 1; @@ -196,16 +201,16 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command String votestat = ""; if (Residence.getConfigManager().isOnlyLike()) { - votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Shop.ListLiked", Residence.getShopSignUtilManager().getLikes(one + votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListLiked, Residence.getShopSignUtilManager().getLikes(one .getKey())); } else - votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Shop.ListVoted", vote.getVote(), vote.getAmount()); + votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListVoted, vote.getVote(), vote.getAmount()); ClaimedResidence res = Residence.getResidenceManager().getByName(one.getKey()); String owner = Residence.getResidenceManager().getByName(one.getKey()).getOwner(); - String message = Residence.getLM().getMessage("Shop.List", i, one.getKey(), owner, votestat); + String message = Residence.msg(lm.Shop_List, i, one.getKey(), owner, votestat); - String desc = res.getShopDesc() == null ? Residence.getLM().getMessage("Shop.NoDesc") : Residence.getLM().getMessage( - "Shop.Desc", ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); + String desc = res.getShopDesc() == null ? Residence.msg(lm.Shop_NoDesc) : Residence.msg( + lm.Shop_Desc, ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); String prev = "[\"\",{\"text\":\"" + " " + message + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/res tp " + one.getKey() @@ -225,11 +230,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Prevpage = page > 1 ? Prevpage : page; String prevCmd = "/res shop list " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = "/res shop list " + NextPage; - String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; @@ -241,12 +246,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length == 2 && args[1].equalsIgnoreCase("DeleteBoard")) { if (!resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } ShopListener.Delete.add(player.getName()); - player.sendMessage(Residence.getLM().getMessage("Shop.DeleteBoard")); + Residence.msg(player, lm.Shop_DeleteBoard); return true; } if (args.length > 2 && args[1].equalsIgnoreCase("setdesc")) { @@ -257,7 +262,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length >= 2) { res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(player, lm.Residence_NotIn); return true; } for (int i = 2; i < args.length; i++) { @@ -271,23 +276,23 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; if (!res.isOwner(player) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.NonAdmin")); + Residence.msg(player, lm.Residence_NonAdmin); return true; } res.setShopDesc(desc); - player.sendMessage(Residence.getLM().getMessage("Shop.DescChange", ChatColor.translateAlternateColorCodes('&', desc))); + Residence.msg(player, lm.Shop_DescChange, ChatColor.translateAlternateColorCodes('&', desc)); return true; } if (args.length == 3 && args[1].equalsIgnoreCase("createboard")) { if (!resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, lm.Select_Points); return true; } @@ -295,7 +300,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command try { place = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + Residence.msg(player, lm.General_UseNumbers); return true; } @@ -306,7 +311,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); if (loc1.getBlockY() < loc2.getBlockY()) { - player.sendMessage(Residence.getLM().getMessage("Shop.InvalidSelection")); + Residence.msg(player, lm.Shop_InvalidSelection); return true; } @@ -326,7 +331,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command newTemp.GetLocations(); Residence.getShopSignUtilManager().addBoard(newTemp); - player.sendMessage(Residence.getLM().getMessage("Shop.NewBoard")); + Residence.msg(player, lm.Shop_NewBoard); Residence.getShopSignUtilManager().BoardUpdate(); Residence.getShopSignUtilManager().saveSigns(); @@ -344,7 +349,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } vote = Residence.getConfigManager().getVoteRangeTo(); @@ -352,46 +357,46 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } else { res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(player, lm.Residence_NotIn); return true; } try { vote = Integer.parseInt(args[2]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + Residence.msg(player, lm.General_UseNumbers); return true; } } } else if (args.length == 2 && Residence.getConfigManager().isOnlyLike()) { res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(player, lm.Residence_NotIn); return true; } vote = Residence.getConfigManager().getVoteRangeTo(); } else if (args.length == 4 && !Residence.getConfigManager().isOnlyLike()) { res = Residence.getResidenceManager().getByName(args[2]); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } try { vote = Integer.parseInt(args[3]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + Residence.msg(player, lm.General_UseNumbers); return true; } } else if (args.length == 3 && !Residence.getConfigManager().isOnlyLike()) { res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } try { vote = Integer.parseInt(args[3]); } catch (Exception ex) { - player.sendMessage(Residence.getLM().getMessage("General.UseNumbers")); + Residence.msg(player, lm.General_UseNumbers); return true; } } else { @@ -401,13 +406,13 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command resName = res.getName(); if (!res.getPermissions().has("shop", false)) { - player.sendMessage(Residence.getLM().getMessage("Shop.CantVote")); + Residence.msg(player, lm.Shop_CantVote); return true; } if (vote < Residence.getConfigManager().getVoteRangeFrom() || vote > Residence.getConfigManager().getVoteRangeTo()) { - player.sendMessage(Residence.getLM().getMessage("Shop.VotedRange", Residence.getConfigManager().getVoteRangeFrom(), Residence - .getConfigManager().getVoteRangeTo())); + Residence.msg(player, lm.Shop_VotedRange, Residence.getConfigManager().getVoteRangeFrom(), Residence + .getConfigManager().getVoteRangeTo()); return true; } @@ -420,11 +425,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (OneVote.getName().equalsIgnoreCase(player.getName())) { if (Residence.getConfigManager().isOnlyLike()) { - player.sendMessage(Residence.getLM().getMessage("Shop.AlreadyLiked", resName)); + Residence.msg(player, lm.Shop_AlreadyLiked, resName); return true; } - player.sendMessage(Residence.getLM().getMessage("Shop.VoteChanged", OneVote.getVote(), vote, resName)); + Residence.msg(player, lm.Shop_VoteChanged, OneVote.getVote(), vote, resName); OneVote.setVote(vote); OneVote.setTime(System.currentTimeMillis()); found = true; @@ -436,9 +441,9 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command list.add(newVote); if (Residence.getConfigManager().isOnlyLike()) - player.sendMessage(Residence.getLM().getMessage("Shop.Liked", resName)); + Residence.msg(player, lm.Shop_Liked, resName); else - player.sendMessage(Residence.getLM().getMessage("Shop.Voted", vote, resName)); + Residence.msg(player, lm.Shop_Voted, vote, resName); } } else { List list = new ArrayList(); @@ -446,9 +451,9 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command list.add(newVote); VoteList.put(resName, list); if (Residence.getConfigManager().isOnlyLike()) - player.sendMessage(Residence.getLM().getMessage("Shop.Liked", resName)); + Residence.msg(player, lm.Shop_Liked, resName); else - player.sendMessage(Residence.getLM().getMessage("Shop.Voted", vote, resName)); + Residence.msg(player, lm.Shop_Voted, vote, resName); } Residence.getShopSignUtilManager().saveShopVotes(); Residence.getShopSignUtilManager().BoardUpdate(); @@ -456,4 +461,41 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } return false; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manage residence shop"); + c.get(path + "Info", Arrays.asList("Manages residence shop feature")); + + // Sub commands + path += "SubCommands."; + c.get(path + "list.Description", "Shows list of res shops"); + c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res shop list", "Shows full list of all residences with shop flag")); + + c.get(path + "vote.Description", "Vote for residence shop"); + c.get(path + "vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", "Votes for current or defined residence")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "vote"), Arrays.asList("[residence]")); + + c.get(path + "like.Description", "Give like for residence shop"); + c.get(path + "like.Info", Arrays.asList("&eUsage: &6/res shop like ", "Gives like for residence shop")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "like"), Arrays.asList("[residenceshop]")); + + c.get(path + "votes.Description", "Shows res shop votes"); + c.get(path + "votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", "Shows full vote list of current or defined residence shop")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "votes"), Arrays.asList("[residenceshop]")); + + c.get(path + "likes.Description", "Shows res shop likes"); + c.get(path + "likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", "Shows full like list of current or defined residence shop")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "likes"), Arrays.asList("[residenceshop]")); + + c.get(path + "setdesc.Description", "Sets residence shop description"); + c.get(path + "setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n")); + + c.get(path + "createboard.Description", "Create res shop board"); + c.get(path + "createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", + "Creates res shop board from selected area. Place - position from which to start filling board")); + + c.get(path + "deleteboard.Description", "Deletes res shop board"); + c.get(path + "deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", "Deletes res shop board bi right clicking on one of signs")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/signconvert.java b/src/com/bekvon/bukkit/residence/commands/signconvert.java index 61c978eaf..1e93cd9fb 100644 --- a/src/com/bekvon/bukkit/residence/commands/signconvert.java +++ b/src/com/bekvon/bukkit/residence/commands/signconvert.java @@ -1,15 +1,21 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class signconvert implements cmd { @Override + @CommandAnnotation(false) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length != 0) @@ -20,10 +26,16 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (Residence.getPermissionManager().isResidenceAdmin(player)) { Residence.getSignUtil().convertSigns(sender); } else - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); } else { Residence.getSignUtil().convertSigns(sender); } return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Converts signs from ResidenceSign plugin"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res signconvert", "Will try to convert saved sign data from 3rd party plugin")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/signupdate.java b/src/com/bekvon/bukkit/residence/commands/signupdate.java index 9713c455e..02f83840b 100644 --- a/src/com/bekvon/bukkit/residence/commands/signupdate.java +++ b/src/com/bekvon/bukkit/residence/commands/signupdate.java @@ -1,22 +1,35 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class signupdate implements cmd { + @Override + @CommandAnnotation(false) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length == 1) { if (!resadmin) { - sender.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(sender, lm.General_NoPermission); return true; } int number = Residence.getSignUtil().updateAllSigns(); - sender.sendMessage(Residence.getLM().getMessage("Sign.Updated", number)); + Residence.msg(sender, lm.Sign_Updated, number); return true; } return false; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Updated residence signs"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res signupdate")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java index 5947b038c..fa60acfa4 100644 --- a/src/com/bekvon/bukkit/residence/commands/sublist.java +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class sublist implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -25,7 +31,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } if (args.length != 1 && args.length != 2 && args.length != 3) return false; - + ClaimedResidence res; if (args.length == 1) { res = Residence.getResidenceManager().getByLoc(player.getLocation()); @@ -35,9 +41,16 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (res != null) { res.printSubzoneList(player, page); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } return true; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "List Residence Subzones"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res sublist ", "List subzones within a residence.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index b7dc67487..4a1767ced 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class subzone implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -37,21 +43,29 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { ClaimedResidence res = Residence.getResidenceManager().getByName(parent); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } if (!player.hasPermission("residence.create.subzone") && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Subzone.CantCreate")); + Residence.msg(player, lm.Subzone_CantCreate); return false; } res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), zname, resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Select.Points")); + Residence.msg(player, lm.Select_Points); } return true; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Create subzones in residences."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res subzone [subzone name]", + "If residence name is left off, will attempt to use residence your standing in.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index e5b0afe68..1c089977b 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -1,27 +1,39 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class tool implements cmd { @SuppressWarnings("deprecation") @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - player.sendMessage(Residence.getLM().getMessage("General.Separator")); - player.sendMessage(Residence.getLM().getMessage("Select.Tool", Material.getMaterial(Residence.getConfigManager().getSelectionTooldID()))); - player.sendMessage(Residence.getLM().getMessage("General.InfoTool", Material.getMaterial(Residence.getConfigManager().getInfoToolID()))); - player.sendMessage(Residence.getLM().getMessage("General.Separator")); + Residence.msg(player, lm.General_Separator); + Residence.msg(player, lm.Select_Tool, Material.getMaterial(Residence.getConfigManager().getSelectionTooldID())); + Residence.msg(player, lm.General_InfoTool, Material.getMaterial(Residence.getConfigManager().getInfoToolID())); + Residence.msg(player, lm.General_Separator); return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Shows residence selection and info tool names"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res tool")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index 6b61cb6a2..7e8720b07 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class tp implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -22,10 +28,18 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return true; } res.tpToResidence(player, player, resadmin); return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Teleport to a residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", + "Your permission group must also be allowed to teleport by the server admin.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java index b70e9b61a..0b47b0aa2 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java +++ b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java @@ -1,15 +1,21 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class tpconfirm implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -22,7 +28,13 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.getTeleportMap().get(player.getName()).tpToResidence(player, player, resadmin); Residence.getTeleportMap().remove(player.getName()); } else - player.sendMessage(Residence.getLM().getMessage("General.NoTeleportConfirm")); + Residence.msg(player, lm.General_NoTeleportConfirm); return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Ignore unsafe teleportation warning"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res tpconfirm", "Teleports you to a residence, when teleportation is unsafe.")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/tpset.java b/src/com/bekvon/bukkit/residence/commands/tpset.java index b987e4b0a..a9005ee3c 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpset.java +++ b/src/com/bekvon/bukkit/residence/commands/tpset.java @@ -1,16 +1,22 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class tpset implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -20,8 +26,16 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (res != null) { res.setTpLoc(player, resadmin); } else { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); } return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Set the teleport location of a Residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res tpset", "This will set the teleport location for a residence to where your standing.", + "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence.")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index c44cf392d..8b100c57d 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -1,18 +1,24 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class unstuck implements cmd { @Override + @CommandAnnotation(true) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -25,16 +31,22 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (!group.hasUnstuckAccess()) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return true; } ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(player, lm.Residence_NotIn); } else { - player.sendMessage(Residence.getLM().getMessage("General.Moved")); + Residence.msg(player, lm.General_Moved); player.teleport(res.getOutsideFreeLoc(player.getLocation(), player)); } return true; } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Teleports outside of residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res unstuck")); + } } diff --git a/src/com/bekvon/bukkit/residence/commands/version.java b/src/com/bekvon/bukkit/residence/commands/version.java index f127af561..59d656feb 100644 --- a/src/com/bekvon/bukkit/residence/commands/version.java +++ b/src/com/bekvon/bukkit/residence/commands/version.java @@ -1,14 +1,19 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.cmd; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; public class version implements cmd { @Override + @CommandAnnotation(false) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { sender.sendMessage(ChatColor.GRAY + "------------------------------------"); sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + Residence @@ -32,4 +37,9 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "how residence version"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res version")); + } } diff --git a/src/com/bekvon/bukkit/residence/ABInterface.java b/src/com/bekvon/bukkit/residence/containers/ABInterface.java similarity index 85% rename from src/com/bekvon/bukkit/residence/ABInterface.java rename to src/com/bekvon/bukkit/residence/containers/ABInterface.java index e84b7d078..439b29d98 100644 --- a/src/com/bekvon/bukkit/residence/ABInterface.java +++ b/src/com/bekvon/bukkit/residence/containers/ABInterface.java @@ -1,4 +1,4 @@ -package com.bekvon.bukkit.residence; +package com.bekvon.bukkit.residence.containers; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/com/bekvon/bukkit/residence/containers/CommandAnnotation.java b/src/com/bekvon/bukkit/residence/containers/CommandAnnotation.java new file mode 100644 index 000000000..2f00a1a39 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/CommandAnnotation.java @@ -0,0 +1,12 @@ +package com.bekvon.bukkit.residence.containers; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.METHOD }) +public @interface CommandAnnotation { + boolean value(); +} diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 72b5c3c67..53fbddf1c 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -1,101 +1,118 @@ package com.bekvon.bukkit.residence.containers; public enum Flags { - admin(7, 0), - animalkilling(365, 0), - animals(383, 90), - bank(130, 0), - bed(355, 0), - beacon(138, 0), - brew(379, 0), - bucket(325, 0), - bucketempty(325, 0), - bucketfill(325, 0), - build(45, 0), - burn(50, 0), - button(143, 0), - cake(354, 0), - canimals(383, 91), - chat(386, 0), - cmonsters(383, 50), - command(137, 0), - container(342, 0), - coords(345, 0), - craft(58, 50), - creeper(383, 50), - dragongrief(3, 0), - day(37, 0), - dye(351, 14), - damage(283, 0), - destroy(121, 0), - dryup(160, 11), - diode(356, 0), - door(324, 0), - egg(344, 0), - enchant(116, 0), - explode(407, 0), - enderpearl(368, 0), - feed(364, 0), - fireball(385, 0), - firespread(377, 0), - flow(111, 0), - hidden(102, 0), - hook(346, 0), - healing(373, 0), - iceform(79, 0), - icemelt(79, 0), - ignite(259, 0), - keepinv(298, 0), - keepexp(322, 0), - lavaflow(327, 0), - leash(420, 0), - lever(69, 0), - mobexpdrop(362, 0), - mobitemdrop(351, 3), - mobkilling(367, 0), - monsters(52, 0), - move(301, 0), - nanimals(383, 92), - nmonsters(383, 51), - night(35, 15), - nofly(171, 1), - nomobs(166, 0), - note(25, 0), - nodurability(145, 0), - overridepvp(267, 0), - pressure(147, 0), - piston(33, 0), - pistonprotection(29, 0), - place(169, 0), - pvp(268, 0), - rain(38, 1), - redstone(331, 0), - respawn(175, 0), - riding(329, 0), - sun(175, 0), - shop(389, 0), - snowtrail(78, 0), - snowball(332, 0), - sanimals(383, 101), - shear(359, 0), - smonsters(383, 54), - subzone(160, 7), - table(58, 0), - tnt(46, 0), - tp(120, 0), - trusted(170, 0), - trade(388, 0), - trample(3, 0), - use(70, 0), - vehicledestroy(328, 0), - waterflow(326, 0); + anvil(145, 0, FlagMode.Both, "Allows or denys interaction with anvil", true), + admin(7, 0, FlagMode.Player, "Gives a player permission to change flags on a residence", true), + animalkilling(365, 0, FlagMode.Both, "Allows or denys animal killing", true), + animals(383, 90, FlagMode.Residence, "Allows or denys animal spawns", true), + backup(47, 0, FlagMode.Residence, "If set to true, restores previous look of area (WordEdit required)", false), + bank(130, 0, FlagMode.Both, "Allows or denys deposit/withdraw money from res bank", true), + bed(355, 0, FlagMode.Both, "Allows or denys players to use beds", true), + beacon(138, 0, FlagMode.Both, "Allows or denys interaction with beacon", true), + brew(379, 0, FlagMode.Both, "Allows or denys players to use brewing stands", true), + bucket(325, 0, FlagMode.Both, "Allow or deny bucket use", true), + bucketempty(325, 0, FlagMode.Both, "Allow or deny bucket empty", true), + bucketfill(325, 0, FlagMode.Both, "Allow or deny bucket fill", true), + build(45, 0, FlagMode.Both, "Allows or denys building", true), + burn(50, 0, FlagMode.Residence, "Allows or denys Mob combustion in residences", true), + button(143, 0, FlagMode.Both, "Allows or denys players to use buttons", true), + cake(354, 0, FlagMode.Both, "Allows or denys players to eat cake", true), + canimals(383, 91, FlagMode.Residence, "Allows or denys custom animal spawns", true), + chorustp(432, 0, FlagMode.Both, "Allow or disallow teleporting to the residence with chorus fruit", true), + chat(386, 0, FlagMode.Both, "Allows to join residence chat room", true), + cmonsters(383, 50, FlagMode.Residence, "Allows or denys custom monster spawns", true), + commandblock(137, 0, FlagMode.Both, "Allows or denys command block interaction", false), + command(137, 0, FlagMode.Both, "Allows or denys comamnd use in residences", false), + container(342, 0, FlagMode.Both, "Allows or denys use of furnaces, chests, dispensers, etc...", true), + coords(345, 0, FlagMode.Residence, "Hides residence coordinates", true), + craft(1, 0, FlagMode.Residence, "Gives table, enchant, brew flags", true), + creeper(383, 50, FlagMode.Residence, "Allow or deny creeper explosions", true), + dragongrief(3, 0, FlagMode.Residence, "Prevents ender dragon block griefing", true), + day(37, 0, FlagMode.Residence, "Sets day time in residence", true), + dye(351, 14, FlagMode.Both, "Allows or denys sheep dyeing", true), + damage(283, 0, FlagMode.Residence, "Allows or denys all entity damage within the residence", false), + destroy(121, 0, FlagMode.Both, "Allows or denys only destruction of blocks, overrides the build flag", true), + dryup(160, 11, FlagMode.Residence, "Prevents land from drying up", true), + diode(356, 0, FlagMode.Both, "Allows or denys players to use redstone repeaters", true), + door(324, 0, FlagMode.Both, "Allows or denys players to use doors and trapdoors", true), + egg(344, 0, FlagMode.Both, "Allows or denys interaction with dragon egg", true), + enchant(116, 0, FlagMode.Both, "Allows or denys players to use enchanting tables", true), + explode(407, 0, FlagMode.Residence, "Allows or denys explosions in residences", true), + enderpearl(368, 0, FlagMode.Both, "Allow or disallow teleporting to the residence with enderpearl", true), + feed(364, 0, FlagMode.Residence, "Setting to true makes the residence feed its occupants", true), + fireball(385, 0, FlagMode.Residence, "Allows or denys fire balls in residences", true), + firespread(377, 0, FlagMode.Residence, "Allows or denys fire spread", true), + flow(111, 0, FlagMode.Residence, "Allows or denys liquid flow", true), + flowerpot(390, 0, FlagMode.Both, "Allows or denys interaction with flower pot", true), + hotfloor(213, 0, FlagMode.Residence, "Prevent damage from magma blocks", true), + hidden(102, 0, FlagMode.Residence, "Hides residence from list or listall commands", false), + hook(346, 0, FlagMode.Both, "Allows or denys fishing rod hooking entities", true), + healing(373, 0, FlagMode.Residence, "Setting to true makes the residence heal its occupants", true), + iceform(79, 0, FlagMode.Residence, "Prevents from ice forming", true), + icemelt(79, 0, FlagMode.Residence, "Prevents ice from melting", true), + ignite(259, 0, FlagMode.Both, "Allows or denys fire ignition", true), + keepinv(298, 0, FlagMode.Residence, "Players keeps inventory after death", false), + keepexp(322, 0, FlagMode.Residence, "Players keeps exp after death", false), + lavaflow(327, 0, FlagMode.Residence, "Allows or denys lava flow, overrides flow", true), + leash(420, 0, FlagMode.Both, "Allows or denys aninal leash", true), + lever(69, 0, FlagMode.Both, "Allows or denys players to use levers", true), + mobexpdrop(362, 0, FlagMode.Residence, "Prevents mob droping exp on death", true), + mobitemdrop(351, 3, FlagMode.Residence, "Prevents mob droping items on death", true), + mobkilling(367, 0, FlagMode.Both, "Allows or denys mob killing", true), + monsters(52, 0, FlagMode.Residence, "Allows or denys monster spawns", true), + move(301, 0, FlagMode.Both, "Allows or denys movement in the residence", true), + nanimals(383, 92, FlagMode.Residence, "Allows or denys natural animal spawns", true), + nmonsters(383, 51, FlagMode.Residence, "Allows or denys natural monster spawns", true), + night(35, 15, FlagMode.Residence, "Sets night time in residence", true), + nofly(171, 1, FlagMode.Both, "Allows or denys fly in residence", false), + nomobs(166, 0, FlagMode.Residence, "Prevents monsters from entering residence", true), + note(25, 0, FlagMode.Both, "Allows or denys players to use note blocks", true), + nodurability(145, 0, FlagMode.Residence, "Prevents item durability loss", false), + overridepvp(267, 0, FlagMode.Residence, "Overrides any plugin pvp protection", false), + pressure(147, 0, FlagMode.Both, "Allows or denys players to use pressure plates", true), + piston(33, 0, FlagMode.Residence, "Allow or deny pistons from pushing or pulling blocks in the residence", true), + pistonprotection(29, 0, FlagMode.Residence, "Enables or disabled piston block move in or out of residence", true), + place(169, 0, FlagMode.Both, "Allows or denys only placement of blocks, overrides the build flag", true), + pvp(268, 0, FlagMode.Residence, "Allow or deny pvp in the residence", true), + rain(38, 1, FlagMode.Residence, "Sets weather to rainny in residence", true), + redstone(175, 0, FlagMode.Group, "Gives lever, diode, button, pressure, note flags", true), + respawn(175, 0, FlagMode.Residence, "Automaticaly respawns player", false), + riding(329, 0, FlagMode.Both, "Prevent riding a horse", true), + sun(175, 0, FlagMode.Residence, "Sets weather to sunny in residence", true), + shop(389, 0, FlagMode.Residence, "Adds residence to special residence shop list", true), + snowtrail(78, 0, FlagMode.Residence, "Prevents snowman snow trails", true), + spread(332, 0, FlagMode.Residence, "Prevents block spreading", true), + snowball(332, 0, FlagMode.Residence, "Prevents snowball knockback", true), + sanimals(383, 101, FlagMode.Residence, "Allows or denys spawner or spawn egg animal spawns", true), + shear(359, 0, FlagMode.Both, "Allows or denys sheep shear", true), + smonsters(383, 54, FlagMode.Residence, "Allows or denys spawner or spawn egg monster spawns", true), + subzone(160, 7, FlagMode.Both, "Allow a player to make subzones in the residence", true), + table(58, 0, FlagMode.Both, "Allows or denys players to use workbenches", true), + tnt(46, 0, FlagMode.Residence, "Allow or deny tnt explosions", true), + tp(120, 0, FlagMode.Both, "Allow or disallow teleporting to the residence", true), + trade(388, 0, FlagMode.Both, "Allows or denys villager trading in residence", true), + trample(3, 0, FlagMode.Residence, "Allows or denys crop trampling in residence", true), + trusted(1, 0, FlagMode.Group, "Gives build, use, move, container and tp flags", true), + use(70, 0, FlagMode.Both, "Allows or denys use of doors, lever, buttons, etc...", true), + vehicledestroy(328, 0, FlagMode.Both, "Allows or denys vehicle destroy", true), + waterflow(326, 0, FlagMode.Residence, "Allows or denys water flow, overrides flow", true); private int id; private int data; + private FlagMode flagMode; + private String desc; + private boolean enabled; - private Flags(int id, int data) { + public static enum FlagMode { + Player, Residence, Both, Group + } + + private Flags(int id, int data, FlagMode flagMode, String desc, boolean enabled) { this.id = id; this.data = data; + this.flagMode = flagMode; + this.desc = desc; + this.enabled = enabled; } public int getId() { @@ -105,4 +122,36 @@ public int getId() { public int getData() { return data; } + + public String getName() { + return this.name(); + } + + public FlagMode getFlagMode() { + return flagMode; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public static Flags getFlag(String flag) { + for (Flags f : Flags.values()) { + if (f.getName().equalsIgnoreCase(flag)) + return f; + } + return null; + } } diff --git a/src/com/bekvon/bukkit/residence/NMS.java b/src/com/bekvon/bukkit/residence/containers/NMS.java similarity index 96% rename from src/com/bekvon/bukkit/residence/NMS.java rename to src/com/bekvon/bukkit/residence/containers/NMS.java index 83722b3f9..477c79612 100644 --- a/src/com/bekvon/bukkit/residence/NMS.java +++ b/src/com/bekvon/bukkit/residence/containers/NMS.java @@ -1,4 +1,4 @@ -package com.bekvon.bukkit.residence; +package com.bekvon.bukkit.residence.containers; import java.util.List; import java.util.Map; diff --git a/src/com/bekvon/bukkit/residence/cmd.java b/src/com/bekvon/bukkit/residence/containers/cmd.java similarity index 65% rename from src/com/bekvon/bukkit/residence/cmd.java rename to src/com/bekvon/bukkit/residence/containers/cmd.java index 1bc0b7a26..038a92a8c 100644 --- a/src/com/bekvon/bukkit/residence/cmd.java +++ b/src/com/bekvon/bukkit/residence/containers/cmd.java @@ -1,8 +1,11 @@ -package com.bekvon.bukkit.residence; +package com.bekvon.bukkit.residence.containers; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; public interface cmd { public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender); + + public void getLocale(ConfigReader c, String path); + } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java new file mode 100644 index 000000000..00fee0f5c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -0,0 +1,436 @@ +package com.bekvon.bukkit.residence.containers; + +import java.util.Arrays; + +public enum lm { + Invalid_Player("&cInvalid player name..."), + Invalid_World("&cInvalid world..."), + Invalid_Residence("&cInvalid Residence..."), + Invalid_Subzone("&cInvalid Subzone..."), + Invalid_Direction("&cInvalid Direction..."), + Invalid_Amount("&cInvalid Amount..."), + Invalid_Cost("&cInvalid Cost..."), + Invalid_Days("&cInvalid number of days..."), + Invalid_Material("&cInvalid Material..."), + Invalid_Boolean("&cInvalid value, must be &6true(t) &cor &6false(f)"), + Invalid_Area("&cInvalid Area..."), + Invalid_Group("&cInvalid Group..."), + Invalid_MessageType("&cMessage type must be enter or remove."), + Invalid_Flag("&cInvalid Flag..."), + Invalid_FlagState("&cInvalid flag state, must be &6true(t)&c, &6false(f)&c, or &6remove(r)"), + Invalid_List("&eUnknown list type, must be &6blacklist &eor &6ignorelist."), + Invalid_Page("&eInvalid Page..."), + Invalid_Help("&cInvalid Help Page..."), + Invalid_NameCharacters("&cName contained unallowed characters..."), + + Area_Exists("&cArea name already exists."), + Area_Create("&eResidence Area created, ID &6%1"), + Area_DiffWorld("&cArea is in a different world from residence."), + Area_Collision("&cArea collides with residence &6%1"), + Area_SubzoneCollision("&cArea collides with subzone &6%1"), + Area_NonExist("&cNo such area exists."), + Area_InvalidName("&cInvalid Area Name..."), + Area_ToSmallTotal("&cSelected area smaller than allowed minimal (&6%1&c)"), + Area_ToSmallX("&cYour &6X &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more."), + Area_ToSmallY("&cYour selection height (&6%1&c) is too small. &eAllowed &6%2 &eand more."), + Area_ToSmallZ("&cYour &6Z &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more."), + Area_Rename("&eRenamed area &6%1 &eto &6%2"), + Area_Remove("&eRemoved area &6%1..."), + Area_Name("&eName: &2%1"), + Area_RemoveLast("&cCannot remove the last area in a residence."), + Area_NotWithinParent("&cArea is not within parent area."), + Area_Update("&eArea Updated..."), + Area_MaxPhysical("&eYou've reached the max physical areas allowed for your residence."), + Area_SizeLimit("&eArea size is not within your allowed limits."), + Area_HighLimit("&cYou cannot protect this high up, your limit is &6%1"), + Area_LowLimit("&cYou cannot protect this deep, your limit is &6%1"), + + Select_Points("&eSelect two points first before using this command!"), + Select_Overlap("&cSelected points overlap with &6%1 &cregion!"), + Select_WorldGuardOverlap("&cSelected points overlap with &6%1 &cWorldGuard region!"), + Select_Success("&eSelection Successful!"), + Select_Fail("&cInvalid select command..."), + Select_Bedrock("&eSelection expanded to your lowest allowed limit."), + Select_Sky("&eSelection expanded to your highest allowed limit."), + Select_Area("&eSelected area &6%1 &eof residence &6%2"), + Select_Tool("&e- Selection Tool: &6%1"), + Select_PrimaryPoint("&ePlaced &6Primary &eSelection Point %1"), + Select_SecondaryPoint("&ePlaced &6Secondary &eSelection Point %1"), + Select_Primary("&ePrimary selection: &6%1"), + Select_Secondary("&eSecondary selection: &6%1"), + Select_TooHigh("&cWarning, selection went above top of map, limiting."), + Select_TooLow("&cWarning, selection went below bottom of map, limiting."), + Select_TotalSize("&eSelection total size: &6%1"), + Select_AutoEnabled("&eAuto selection mode turned &6ON&e. To disable it write &6/res select auto"), + Select_AutoDisabled("&eAuto selection mode turned &6OFF&e. To enable it again write &6/res select auto"), + Select_Disabled("&cYou don't have access to selections commands"), + + Sign_Updated("&6%1 &esigns updated!"), + Sign_TopLine("[market]"), + Sign_DateFormat("YY/MM/dd HH:mm"), + Sign_ForRentTopLine("&8For Rent"), + Sign_ForRentPriceLine("&8%1&f/&8%2&f/&8%3"), + Sign_ForRentResName("&8%1"), + Sign_ForRentBottomLine("&9Available"), + Sign_RentedAutorenewTrue("&2%1"), + Sign_RentedAutorenewFalse("&c%1"), + Sign_RentedTopLine("%1"), + Sign_RentedPriceLine("&8%1&f/&8%2&f/&8%3"), + Sign_RentedResName("&8%1"), + Sign_RentedBottomLine("&1%1"), + Sign_ForSaleTopLine("&8For Sale"), + Sign_ForSalePriceLine("&8%1"), + Sign_ForSaleResName("&8%1"), + Sign_ForSaleBottomLine("&5Available"), + Sign_LookAt("&cYou are not looking at sign"), + + Flag_Set("&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"), + Flag_SetFailed("&cYou dont have access to &6%1 &cflag"), + Flag_CheckTrue("&eFlag &6%1 &eapplies to player &6%2 &efor residence &6%3&e, value = &6%4"), + Flag_CheckFalse("&eFlag &6%1 &edoes not apply to player &6%2 &efor residence."), + Flag_Cleared("&eFlags Cleared."), + Flag_RemovedAll("&eAll flags removed for &6%1 &ein &6%2 &eresidence."), + Flag_RemovedGroup("&eAll flags removed for &6%1 &egroup in &6%2 &eresidence."), + Flag_Default("&eFlags set to default."), + Flag_Deny("&cYou dont have &6%1 &cpermission here."), + Flag_SetDeny("&cOwner does not have access to flag &6%1"), + Flag_ChangeDeny("&cYou cant change &6%1 &cflag state while there is &6%2 &cplayer(s) inside."), + + Bank_NoAccess("&cYou dont have bank access."), + Bank_Name(" &eBank: &6%1"), + Bank_NoMoney("&cNot enough money in the bank."), + Bank_Deposit("&eYou deposit &6%1 &einto the residence bank."), + Bank_Withdraw("&eYou withdraw &6%1 from the residence bank."), + + Subzone_Rename("&eRenamed subzone &6%1 &eto &6%2"), + Subzone_Remove("&eSubzone &6%1 &eremoved."), + Subzone_Create("&eCreated Subzone &6%1"), + Subzone_CreateFail("&cUnable to create subzone &6%1"), + Subzone_Exists("&cSubzone &6%1 &calready exists."), + Subzone_Collide("&cSubzone collides with subzone &6%1"), + Subzone_MaxDepth("&cYou have reached the maximum allowed subzone depth."), + Subzone_SelectInside("&eBoth selection points must be inside the residence."), + Subzone_CantCreate("&cYou dont have permission to create residence subzone."), + Subzone_CantDelete("&cYou dont have permission to delete residence subzone."), + Subzone_CantDeleteNotOwnerOfParent("&cYou are not owner of parent residence to delete this subzone."), + Subzone_CantContract("&cYou dont have permission to contract residence subzone."), + Subzone_CantExpand("&cYou dont have permission to expand residence subzone."), + Subzone_DeleteConfirm("&eAre you sure you want to delete subzone &6%1&e, use &6/res confirm &eto confirm."), + Subzone_OwnerChange("&eSubzone &6%1 &eowner changed to &6%2"), + + Residence_Hidden(" &e(&6Hidden&e)"), + Residence_Bought("&eYou bought residence &6%1"), + Residence_Buy("&6%1 &ehas bought residence &6%2 &efrom you."), + Residence_BuyTooBig("&cThis residence has areas bigger then your allowed max."), + Residence_NotForSale("&cResidence is not for sale."), + Residence_ForSale("&eResidence &6%1 &eis now for sale for &6%2"), + Residence_StopSelling("&cResidence is no longer for sale."), + Residence_TooMany("&cYou already own the max number of residences your allowed to."), + Residence_MaxRent("&cYou already are renting the maximum number of residences your allowed to."), + Residence_AlreadyRent("&cResidence is already for rent..."), + Residence_NotForRent("&cResidence not for rent..."), + Residence_NotForRentOrSell("&cResidence not for rent or sell..."), + Residence_NotRented("&cResidence not rented."), + Residence_Unrent("&eResidence &6%1 &ehas been unrented."), + Residence_RemoveRentable("&eResidence &6%1 &eis no longer rentable."), + Residence_ForRentSuccess("&eResidence &6%1 &eis now for rent for &6%2 &eevery &6%3 &edays."), + Residence_RentSuccess("&eYou have rented Residence &6%1 &efor &6%2 &edays."), + Residence_EndingRent("&eRent time is ending for &6%1 &eon &6%2"), + Residence_AlreadyRented("&eResidence &6%1 &ehas currently been rented to &6%2"), + Residence_CantAutoPay("&eResidence is not allowing auto pay, it will be set to &6false"), + Residence_AlreadyExists("&cA residence named &6%1 &calready exists."), + Residence_Create("&eYou have created residence &6%1&e!"), + Residence_Rename("&eRenamed Residence &6%1 &eto &6%2"), + Residence_Remove("&eResidence &6%1 &ehas been removed..."), + Residence_MoveDeny("&cYou dont have movement permission for Residence &6%1"), + Residence_TeleportNoFlag("&cYou dont have teleport access for that residence."), + Residence_FlagDeny("&cYou dont have &6%1 &cpermission for Residence &6%2"), + Residence_GiveLimits("&cCannot give residence to target player, because it is outside the target players limits."), + Residence_Give("&eYou give residence &6%1 &eto player &6%2"), + Residence_Recieve("&eYou have recieved residence &6%1 &efrom player &6%2"), + Residence_ResList(" &a%1. &e%2 &e- &6%3 %4&6%5"), + Residence_List(" &e%2 &e- &6%3"), + Residence_TeleportNear("&eTeleported to near residence."), + Residence_SetTeleportLocation("&eTeleport Location Set..."), + Residence_PermissionsApply("&ePermissions applied to residence."), + Residence_NotOwner("&cYou are not owner of this residence"), + Residence_RemovePlayersResidences("&eRemoved all residences belonging to player &6%1"), + Residence_NotIn("&cYou are not in a Residence."), + Residence_PlayerNotIn("&cPlayer standing not in your Residence area."), + Residence_Kicked("&eYou were kicked from residence"), + Residence_In("&eYou are standing in Residence &6%1"), + Residence_OwnerChange("&eResidence &6%1 &eowner changed to &6%2"), + Residence_NonAdmin("&cYou are not a Residence admin."), + Residence_Line("&eResidence: &6%1 "), + Residence_RentedBy("&eRented by: &6%1"), + Residence_MessageChange("&eMessage Set..."), + Residence_CantDeleteResidence("&cYou dont have permission to delete residence."), + Residence_CantExpandResidence("&cYou dont have permission to expand residence."), + Residence_CantContractResidence("&cYou dont have permission to contract residence."), + Residence_NoResHere("&cThere is no residence in there."), + Residence_OwnerNoPermission("&cThe owner does not have permission for this."), + Residence_ParentNoPermission("&cYou don't have permission to make changes to the parent zone."), + Residence_ChatDisabled("&eResidence Chat Disabled..."), + Residence_DeleteConfirm("&eAre you sure you want to delete residence &6%1&e, use &6/res confirm &eto confirm."), + Residence_ChangedMain("&eChainged main residence to &6%1"), + + Residence_CanBeRented("&6%1&e can be rented for &6%2 &eper &6%3 &edays. &6/res market rent"), + Residence_CanBeBought("&6%1&e can be bought for &6%2&e. &6/res market buy"), + + Residence_IsForRent("&6(For rent)"), + Residence_IsForSale("&6(For sale)"), + Residence_IsRented("&6(Rented)"), + + Rent_Disabled("&cRent is disabled..."), + Rent_DisableRenew("&eResidence &6%1 &ewill now no longer re-rent upon expire."), + Rent_EnableRenew("&eResidence &6%1 &ewill now automatically re-rent upon expire."), + Rent_NotByYou("&cResidence is rented not by you."), + Rent_isForRent("&2Residence available for renting."), + Rent_MaxRentDays("&cYou cant rent for more than &6%1 &cdays at once."), + Rent_OneTime("&cCan't extend rent time for this residence."), + Rent_Extended("&eRent extended for aditional &6%1 &edays for &6%2 &eresidence"), + Rent_Expire("&eRent Expire Time: &6%1"), + Rent_AutoPayTurnedOn("&eAutoPay is turned &2ON"), + Rent_AutoPayTurnedOff("&eAutoPay is turned &cOFF"), + Rent_ModifyDeny("&cCannot modify a rented residence."), + Rent_Days("&eRent days: &6%1"), + Rent_Rented(" &6(Rented)"), + Rent_RentList(" &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7"), + + Rent_EvictConfirm("&eWrite &6/res market confirm &eto evict renter from &6%1 &eresidence"), + Rent_UnrentConfirm("&eWrite &6/res market confirm &eto unrent &6%1 &eresidence"), + Rent_ReleaseConfirm("&eWrite &6/res market confirm &eto remove &6%1 &eresidence from market"), + + command_addedAllow("&eAdded new allowed command for &6%1 &eresidence"), + command_removedAllow("&eRemoved allowed command for &6%1 &eresidence"), + command_addedBlock("&eAdded new blocked command for &6%1 &eresidence"), + command_removedBlock("&eRemoved blocked command for &6%1 &eresidence"), + command_Blocked("&eBlocked commands: &6%1"), + command_Allowed("&eAllowed commands: &6%1"), + + Rentable_Land("&eRentable Land: &6"), + Rentable_AllowRenewing("&eCan Renew: &6%1"), + Rentable_StayInMarket("&eRentable stay in market: &6%1"), + Rentable_AllowAutoPay("&eRentable allows auto pay: &6%1"), + Rentable_DisableRenew("&6%1 &ewill no longer renew rentable status upon expire."), + Rentable_EnableRenew("&6%1 &ewill now automatically renew rentable status upon expire."), + + Economy_LandForSale("&eLand For Sale:"), + Economy_NotEnoughMoney("&cYou dont have enough money."), + Economy_MoneyCharged("&eCharged &6%1 &eto your &6%2 &eaccount."), + Economy_MoneyAdded("&eGot &6%1 &eto your &6%2 &eaccount."), + Economy_MoneyCredit("&eCredited &6%1 &eto your &6%2 &eaccount."), + Economy_RentReleaseInvalid("&eResidence &6%1 &eis not rented or for rent."), + Economy_RentSellFail("&cCannot sell a Residence if it is for rent."), + Economy_SellRentFail("&cCannot rent a Residence if it is for sale."), + Economy_OwnerBuyFail("&cCannot buy your own land!"), + Economy_OwnerRentFail("&cCannot rent your own land!"), + Economy_AlreadySellFail("&eResidence already for sale!"), + Economy_LeaseRenew("&eLease valid until &6%1"), + Economy_LeaseRenewMax("&eLease renewed to maximum allowed"), + Economy_LeaseNotExpire("&eNo such lease, or lease does not expire."), + Economy_LeaseRenewalCost("&eRenewal cost for area &6%1 &eis &6%2"), + Economy_LeaseInfinite("&eLease time set to infinite..."), + Economy_MarketDisabled("&cEconomy Disabled!"), + Economy_SellAmount("&eSell Amount: &2%1"), + Economy_SellList(" &6%1&e. &6%2 &e(&6%3&e) - &6%4"), + Economy_LeaseExpire("&eLease Expire Time: &2%1"), + + Expanding_North("&eExpanding North &6%1 &eblocks"), + Expanding_West("&eExpanding West &6%1 &eblocks"), + Expanding_South("&eExpanding South &6%1 &eblocks"), + Expanding_East("&eExpanding East &6%1 &eblocks"), + Expanding_Up("&eExpanding Up &6%1 &eblocks"), + Expanding_Down("&eExpanding Down &6%1 &eblocks"), + + Contracting_North("&eContracting North &6%1 &eblocks"), + Contracting_West("&eContracting West &6%1 &eblocks"), + Contracting_South("&eContracting South &6%1 &eblocks"), + Contracting_East("&eContracting East &6%1 &eblocks"), + Contracting_Up("&eContracting Up &6%1 &eblocks"), + Contracting_Down("&eContracting Down &6%1 &eblocks"), + + Shifting_North("&eShifting North &6%1 &eblocks"), + Shifting_West("&eShifting West &6%1 &eblocks"), + Shifting_South("&eShifting South &6%1 &eblocks"), + Shifting_East("&eShifting East &6%1 &eblocks"), + Shifting_Up("&eShifting Up &6%1 &eblocks"), + Shifting_Down("&eShifting Down &6%1 &eblocks"), + + Limits_PGroup("&7- &ePermissions Group:&3 %1"), + Limits_RGroup("&7- &eResidence Group:&3 %1"), + Limits_Admin("&7- &eResidence Admin:&3 %1"), + Limits_CanCreate("&7- &eCan Create Residences:&3 %1"), + Limits_MaxRes("&7- &eMax Residences:&3 %1"), + Limits_MaxEW("&7- &eMax East/West Size:&3 %1"), + Limits_MaxNS("&7- &eMax North/South Size:&3 %1"), + Limits_MaxUD("&7- &eMax Up/Down Size:&3 %1"), + Limits_MinMax("&7- &eMin/Max Protection Height:&3 %1 to %2"), + Limits_MaxSub("&7- &eMax Subzone Depth:&3 %1"), + Limits_MaxRents("&7- &eMax Rents:&3 %1"), + Limits_MaxRentDays(" &eMax Rent days:&3 %1"), + Limits_EnterLeave("&7- &eCan Set Enter/Leave Messages:&3 %1"), + Limits_NumberOwn("&7- &eNumber of Residences you own:&3 %1"), + Limits_Cost("&7- &eResidence Cost Per Block:&3 %1"), + Limits_Sell("&7- &eResidence Sell Cost Per Block:&3 %1"), + Limits_Flag("&7- &eFlag Permissions:&3 %1"), + Limits_MaxDays("&7- &eMax Lease Days:&3 %1"), + Limits_LeaseTime("&7- &eLease Time Given on Renew:&3 %1"), + Limits_RenewCost("&7- &eRenew Cost Per Block:&3 %1"), + + Gui_Set_Title("&6%1 flags"), + Gui_Pset_Title("&6%1 %2 flags"), + Gui_Actions(Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove")), + + InformationPage_TopLine("&e---< &a %1 &e >---"), + InformationPage_Page("&e-----< &6%1 &e>-----"), + InformationPage_NextPage("&e-----< &6%1 &e>-----"), + InformationPage_NoNextPage("&e-----------------------"), + + Chat_ChatChannelChange("&eChanged residence chat channel to &6%1!"), + Chat_ChatChannelLeave("&eLeft residence chat"), + + Chat_JoinFirst("&4Join residence chat channel first..."), + Chat_InvalidChannel("&4Invalid Channel..."), + Chat_InvalidColor("&4Incorrect color code"), + Chat_NotInChannel("&4Player is not in channel"), + Chat_Kicked("&6%1 &ewas kicked from &6%2 &echannel"), + Chat_InvalidPrefixLength("&4Prefix is to long. Allowed length: %1"), + Chat_ChangedColor("&eResidence chat channel color changed to %1"), + Chat_ChangedPrefix("&eResidence chat channel prefix changed to %1"), + + Shop_ListTopLine("&6%1 &eShop list - Page &6%2 &eof &6%3 %4"), + Shop_List(" &e%1. &6%2 &e(&6%3&e) %4"), + Shop_ListVoted("&e%1 (&6%2&e)"), + Shop_ListLiked("&eLikes: &0%1"), + + Shop_VotesTopLine("&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5"), + Shop_VotesList(" &e%1. &6%2 &e%3 &7%4"), + + Shop_NoDesc("&6No description"), + Shop_Desc("&6Description:\n%1"), + Shop_DescChange("&6Description changed to: %1"), + Shop_NewBoard("&6Successfully added new shop sign board"), + Shop_DeleteBoard("&6Right click sign of board you want to delete"), + Shop_DeletedBoard("&6Sign board removed"), + Shop_IncorrectBoard("&cThis is not sign board, try performing command again and clicking correct sign"), + Shop_InvalidSelection("&cLeft click with selection tool top left sign and then right click bottom right"), + Shop_VoteChanged("&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence"), + Shop_Voted("&6You voted, and gave &e%1 &6votes to &e%2 &6residence"), + Shop_Liked("&6You liked &e%1 &6residence"), + Shop_AlreadyLiked("&6You already liked &e%1 &6residence"), + Shop_NoVotes("&cThere is no registered votes for this residence"), + Shop_CantVote("&cResidence don't have shop flag set to true"), + Shop_VotedRange("&6Vote range is from &e%1 &6to &e%2"), + Shop_SignLines_1("&e--== &8%1 &e==--"), + Shop_SignLines_2("&9%1"), + Shop_SignLines_3("&4%1"), + Shop_SignLines_4("&8%1&e (&8%2&e)"), + Shop_SignLines_Likes4("&9Likes: &8%2"), + + RandomTeleport_TpLimit("&eYou can't teleport so fast, please wait &6%1 &esec and try again"), + RandomTeleport_TeleportSuccess("&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation"), + RandomTeleport_IncorrectLocation("&6Could not find correct teleport location, please wait &e%1 &6sec and try again."), + RandomTeleport_TeleportStarted("&eTeleportation started, don't move for next &6%4 &esec."), + RandomTeleport_WorldList("&ePossible worlds: &6%1"), + + General_DisabledWorld("&cResidence plugin is disabled in this world"), + General_UseNumbers("&cPlease use numbers..."), + General_CantPlaceLava("&cYou can't place lava outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), + General_CantPlaceWater("&cYou can't place Water outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), + General_NoPermission("&cYou dont have permission for this."), + General_NoCmdPermission("&cYou dont have permission for this command."), + General_DefaultUsage("&eType &6/%1 ? &efor more info"), + General_MaterialGet("&eThe material name for ID &6%1 &eis &6%2"), + General_MarketList("&e---- &6Market List &e----"), + General_Separator("&e----------------------------------------------------"), + General_AdminOnly("&cOnly admins have access to this command."), + General_InfoTool("&e- Info Tool: &6%1"), + General_ListMaterialAdd("&6%1 &eadded to the residence &6%2"), + General_ListMaterialRemove("&6%1 &eremoved from the residence &6%2"), + General_ItemBlacklisted("&cYou are blacklisted from using this item here."), + General_WorldPVPDisabled("&cWorld PVP is disabled."), + General_NoPVPZone("&cNo PVP zone."), + General_InvalidHelp("&cInvalid help page."), + + General_TeleportDeny("&cYou dont have teleport access."), + General_TeleportSuccess("&eTeleported!"), + General_TeleportConfirm("&cThis teleport is not safe, you will fall for &6%1 &cblocks. Use &6/res tpconfirm &cto perform teleportation anyways."), + General_TeleportStarted("&eTeleportation to &6%1 &estarted, don't move for next &6%2 &esec."), + General_TeleportTitle("&eTeleporting!"), + General_TeleportTitleTime("&6%1"), + General_TeleportCanceled("&eTeleportation canceled!"), + General_NoTeleportConfirm("&eThere is no teleports waiting for confirmation!"), + General_HelpPageHeader("&eHelp Pages - &6%1 &e- Page <&6%2 &eof &6%3&e>"), + General_ListExists("&cList already exists..."), + General_ListRemoved("&eList removed..."), + General_ListCreate("&eCreated list &6%1"), + General_PhysicalAreas("&ePhysical Areas"), + General_CurrentArea("&eCurrent Area: &6%1"), + General_TotalResSize("&eTotal size: &6%1m\u00B3 (%2m\u00B2)"), + General_TotalWorth("&eTotal worth of residence: &6%1 &e(&6%2&e)"), + General_NotOnline("&eTarget player must be online."), + General_NextPage("&eNext Page"), + General_NextInfoPage("&2| &eNext Page &2>>>"), + General_PrevInfoPage("&2<<< &ePrev Page &2|"), + General_GenericPages("&ePage &6%1 &eof &6%2 &e(&6%3&e)"), + General_WorldEditNotFound("&cWorldEdit was not detected."), + General_CoordsTop("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), + General_CoordsBottom("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), + General_AdminToggleTurnOn("&eAutomatic resadmin toggle turned &6On"), + General_AdminToggleTurnOff("&eAutomatic resadmin toggle turned &6Off"), + General_NoSpawn("&eYou do not have &6move &epermissions at your spawn point. Relocating"), + General_CompassTargetReset("&eYour compass has been reset"), + General_CompassTargetSet("&eYour compass now points to &6%1"), + General_Ignorelist("&2Ignorelist:&6"), + General_Blacklist("&cBlacklist:&6"), + General_LandCost("&eLand cost: &6%1"), + General_True("&2True"), + General_False("&cFalse"), + General_Removed("&6Removed"), + General_FlagState("&eFlag state: %1"), + General_Land("&eLand: &6%1"), + General_Cost("&eCost: &6%1 &eper &6%2 &edays"), + General_Status("&eStatus: %1"), + General_Available("&2Available"), + General_Size(" &eSize: &6%1"), + General_ResidenceFlags("&eResidence flags: &6%1"), + General_PlayersFlags("&ePlayers flags: &6%1"), + General_GroupFlags("&eGroup flags: &6%1"), + General_OthersFlags("&eOthers flags: &6%1"), + General_Moved("&eMoved..."), + General_Name("&eName: &6%1"), + General_Lists("&eLists: &6"), + General_Residences("&eResidences&6"), + General_CreatedOn("&eCreated on: &6%1"), + General_Owner("&eOwner: &6%1"), + General_World("&eWorld: &6%1"), + General_Subzones("&eSubzones"), + General_NewPlayerInfo( + "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", + "The below lines represent various messages residence sends to the players.", + "Note that some messages have variables such as %1 that are inserted at runtime."); + + private Object text; + private String[] comments; + + private lm(Object text, String... comments) { + this.text = text; + this.comments = comments; + } + + public Object getText() { + return text; + } + + public String[] getComments() { + return comments; + } + + public String getPath() { + String path = this.name(); + if (!this.name().contains("Language.") && !this.name().contains("CommandHelp.")) + path = "Language." + this.name(); + return path.replace("_", "."); + } +} diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index df6613a3a..9d89fc916 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -14,6 +14,7 @@ import org.dynmap.markers.MarkerSet; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.economy.rent.RentManager; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -76,28 +77,28 @@ private static String formatInfoWindow(String resid, ClaimedResidence res, Strin return null; String v = "

%regionname%
" - + ChatColor.stripColor(Residence.getLM().getMessage("General.Owner", "")) + "%playerowners%
"; + + ChatColor.stripColor(Residence.msg(lm.General_Owner, "")) + "%playerowners%
"; if (Residence.getConfigManager().DynMapShowFlags) - v += ChatColor.stripColor(Residence.getLM().getMessage("General.Flags", "")) + "
%flags%"; + v += ChatColor.stripColor(Residence.msg(lm.General_ResidenceFlags, "")) + "
%flags%"; v += "
"; if (Residence.getRentManager().isForRent(res.getName())) v = "
" - + ChatColor.stripColor(Residence.getLM().getMessage("Rentable.Land", "")) + "%regionname%
" - + ChatColor.stripColor(Residence.getLM().getMessage("General.Owner", "")) + "%playerowners%
" - + ChatColor.stripColor(Residence.getLM().getMessage("Residence.RentedBy", "")) + "%renter%
" - + ChatColor.stripColor(Residence.getLM().getMessage("General.LandCost", "")) + "%rent%
" - + ChatColor.stripColor(Residence.getLM().getMessage("Rent.Days", "")) + "%rentdays%
" - + ChatColor.stripColor(Residence.getLM().getMessage("Rentable.AllowRenewing", "")) + "%renew%
" - + ChatColor.stripColor(Residence.getLM().getMessage("Rent.Expire", "")) + "%expire%
"; + + ChatColor.stripColor(Residence.msg(lm.Rentable_Land, "")) + "%regionname%
" + + ChatColor.stripColor(Residence.msg(lm.General_Owner, "")) + "%playerowners%
" + + ChatColor.stripColor(Residence.msg(lm.Residence_RentedBy, "")) + "%renter%
" + + ChatColor.stripColor(Residence.msg(lm.General_LandCost, "")) + "%rent%
" + + ChatColor.stripColor(Residence.msg(lm.Rent_Days, "")) + "%rentdays%
" + + ChatColor.stripColor(Residence.msg(lm.Rentable_AllowRenewing, "")) + "%renew%
" + + ChatColor.stripColor(Residence.msg(lm.Rent_Expire, "")) + "%expire%"; if (Residence.getTransactionManager().isForSale(res.getName())) v = "
" - + ChatColor.stripColor(Residence.getLM().getMessage("Economy.LandForSale", " ")) + + ChatColor.stripColor(Residence.msg(lm.Economy_LandForSale, " ")) + "%regionname%
" - + ChatColor.stripColor(Residence.getLM().getMessage("General.Owner", "")) + "%playerowners%
" - + ChatColor.stripColor(Residence.getLM().getMessage("Economy.SellAmount", "")) + "%price%
"; + + ChatColor.stripColor(Residence.msg(lm.General_Owner, "")) + "%playerowners%
" + + ChatColor.stripColor(Residence.msg(lm.Economy_SellAmount, "")) + "%price%
"; v = v.replace("%regionname%", resName); v = v.replace("%playerowners%", res.getOwner()); diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index 47488fece..8466925ca 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -3,6 +3,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.entity.Player; @@ -41,37 +42,37 @@ public void subtract(int amount) { public void withdraw(CommandSender sender, int amount, boolean resadmin) { if (!Residence.getConfigManager().enableEconomy()) { - sender.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + Residence.msg(sender, lm.Economy_MarketDisabled); } if (!resadmin && !res.getPermissions().playerHas(sender.getName(), "bank", false)) { - sender.sendMessage(Residence.getLM().getMessage("Bank.NoAccess")); + Residence.msg(sender, lm.Bank_NoAccess); return; } if (!hasEnough(amount)) { - sender.sendMessage(Residence.getLM().getMessage("Bank.NoMoney")); + Residence.msg(sender, lm.Bank_NoMoney); return; } if (sender instanceof Player && Residence.getEconomyManager().add(sender.getName(), amount) || !(sender instanceof Player)) { this.subtract(amount); - sender.sendMessage(Residence.getLM().getMessage("Bank.Withdraw", String.format("%d", amount))); + Residence.msg(sender, lm.Bank_Withdraw, String.format("%d", amount)); } } public void deposit(CommandSender sender, int amount, boolean resadmin) { if (!Residence.getConfigManager().enableEconomy()) { - sender.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + Residence.msg(sender, lm.Economy_MarketDisabled); } if (!resadmin && !res.getPermissions().playerHas(sender.getName(), "bank", false)) { - sender.sendMessage(Residence.getLM().getMessage("Bank.NoAccess")); + Residence.msg(sender, lm.Bank_NoAccess); return; } if (sender instanceof Player && !Residence.getEconomyManager().canAfford(sender.getName(), amount)) { - sender.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); + Residence.msg(sender, lm.Economy_NotEnoughMoney); return; } if (sender instanceof Player && Residence.getEconomyManager().subtract(sender.getName(), amount) || !(sender instanceof Player)) { this.add(amount); - sender.sendMessage(Residence.getLM().getMessage("Bank.Deposit", String.format("%d", amount))); + Residence.msg(sender, lm.Bank_Deposit, String.format("%d", amount)); } } } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 5c6a8753f..a3f489023 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketBuyInterface; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -30,15 +31,15 @@ public TransactionManager() { public static boolean chargeEconomyMoney(Player player, int amount) { EconomyInterface econ = Residence.getEconomyManager(); if (econ == null) { - player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + Residence.msg(player, lm.Economy_MarketDisabled); return false; } if (!econ.canAfford(player.getName(), amount)) { - player.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); + Residence.msg(player, lm.Economy_NotEnoughMoney); return false; } econ.subtract(player.getName(), amount); - player.sendMessage(Residence.getLM().getMessage("Economy.MoneyCharged", String.format("%d", amount), econ.getName())); + Residence.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); return true; } @@ -49,12 +50,12 @@ public static boolean giveEconomyMoney(Player player, int amount) { return true; EconomyInterface econ = Residence.getEconomyManager(); if (econ == null) { - player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + Residence.msg(player, lm.Economy_MarketDisabled); return false; } econ.add(player.getName(), amount); - player.sendMessage(Residence.getLM().getMessage("Economy.MoneyAdded", String.format("%d", amount), econ.getName())); + Residence.msg(player, lm.Economy_MoneyAdded, String.format("%d", amount), econ.getName()); return true; } @@ -66,46 +67,46 @@ public void putForSale(String areaname, Player player, int amount, boolean resad public void putForSale(ClaimedResidence res, Player player, int amount, boolean resadmin) { if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } if (Residence.getConfigManager().enabledRentSystem()) { if (res.isForRent()) { - player.sendMessage(Residence.getLM().getMessage("Economy.RentSellFail")); + Residence.msg(player, lm.Economy_RentSellFail); return; } } if (!resadmin) { if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { - player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + Residence.msg(player, lm.Economy_MarketDisabled); return; } ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); boolean cansell = rPlayer.getGroup().canSellLand() || player.hasPermission("residence.sell"); if (!cansell && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return; } if (amount <= 0) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Amount")); + Residence.msg(player, lm.Invalid_Amount); return; } } if (!res.isOwner(player) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return; } if (sellAmount.contains(res)) { - player.sendMessage(Residence.getLM().getMessage("Economy.AlreadySellFail")); + Residence.msg(player, lm.Economy_AlreadySellFail); return; } res.setSellPrice(amount); sellAmount.add(res); Residence.getSignUtil().CheckSign(res); - player.sendMessage(Residence.getLM().getMessage("Residence.ForSale", res.getName(), amount)); + Residence.msg(player, lm.Residence_ForSale, res.getName(), amount); } @Override @@ -137,7 +138,7 @@ public void buyPlot(String areaname, Player player, boolean resadmin) { public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { if (res == null || !res.isForSell()) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } @@ -145,22 +146,22 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { PermissionGroup group = rPlayer.getGroup(); if (!resadmin) { if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { - player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + Residence.msg(player, lm.Economy_MarketDisabled); return; } boolean canbuy = group.canBuyLand() || player.hasPermission("residence.buy"); if (!canbuy && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return; } } if (res.getPermissions().getOwner().equals(player.getName())) { - player.sendMessage(Residence.getLM().getMessage("Economy.OwnerBuyFail")); + Residence.msg(player, lm.Economy_OwnerBuyFail); return; } if (Residence.getResidenceManager().getOwnedZoneCount(player.getName()) >= rPlayer.getMaxRes() && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.TooMany")); + Residence.msg(player, lm.Residence_TooMany); return; } Server serv = Residence.getServ(); @@ -170,7 +171,7 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { CuboidArea[] areas = res.getAreaArray(); for (CuboidArea thisarea : areas) { if (!group.inLimits(thisarea)) { - player.sendMessage(Residence.getLM().getMessage("Residence.BuyTooBig")); + Residence.msg(player, lm.Residence_BuyTooBig); return; } } @@ -178,7 +179,7 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { EconomyInterface econ = Residence.getEconomyManager(); if (econ == null) { - player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + Residence.msg(player, lm.Economy_MarketDisabled); return; } @@ -203,15 +204,15 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { CuboidArea area = res.getAreaArray()[0]; Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); - player.sendMessage(Residence.getLM().getMessage("Economy.MoneyCharged", String.format("%d", amount), econ.getName())); - player.sendMessage(Residence.getLM().getMessage("Residence.Bought", res.getResidenceName())); + Residence.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); + Residence.msg(player, lm.Residence_Bought, res.getResidenceName()); Player seller = serv.getPlayer(sellerName); if (seller != null && seller.isOnline()) { - seller.sendMessage(Residence.getLM().getMessage("Residence.Buy", player.getName(), res.getResidenceName())); - seller.sendMessage(Residence.getLM().getMessage("Economy.MoneyCredit", String.format("%d", amount), econ.getName())); + seller.sendMessage(Residence.msg(lm.Residence_Buy, player.getName(), res.getResidenceName())); + seller.sendMessage(Residence.msg(lm.Economy_MoneyCredit, String.format("%d", amount), econ.getName())); } } else { - player.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); + Residence.msg(player, lm.Economy_NotEnoughMoney); } } @@ -223,20 +224,20 @@ public void removeFromSale(Player player, String areaname, boolean resadmin) { public void removeFromSale(Player player, ClaimedResidence res, boolean resadmin) { if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); + Residence.msg(player, lm.Invalid_Area); return; } if (!res.isForSell()) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotForSale")); + Residence.msg(player, lm.Residence_NotForSale); return; } if (res.isOwner(player) || resadmin) { removeFromSale(res); Residence.getSignUtil().CheckSign(res); - player.sendMessage(Residence.getLM().getMessage("Residence.StopSelling")); + Residence.msg(player, lm.Residence_StopSelling); } else { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); } } @@ -279,22 +280,22 @@ public boolean viewSaleInfo(ClaimedResidence res, Player player) { if (!sellAmount.contains(res)) return false; - player.sendMessage(Residence.getLM().getMessage("General.Separator")); - player.sendMessage(Residence.getLM().getMessage("Area.Name", res.getName())); - player.sendMessage(Residence.getLM().getMessage("Economy.SellAmount", res.getSellPrice())); + Residence.msg(player, lm.General_Separator); + Residence.msg(player, lm.Area_Name, res.getName()); + Residence.msg(player, lm.Economy_SellAmount, res.getSellPrice()); if (Residence.getConfigManager().useLeases()) { String etime = Residence.getLeaseManager().getExpireTime(res.getName()); if (etime != null) { - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseExpire", etime)); + Residence.msg(player, lm.Economy_LeaseExpire, etime); } } - player.sendMessage(Residence.getLM().getMessage("General.Separator")); + Residence.msg(player, lm.General_Separator); return true; } public void printForSaleResidences(Player player, int page) { List toRemove = new ArrayList(); - player.sendMessage(Residence.getLM().getMessage("Economy.LandForSale")); + Residence.msg(player, lm.Economy_LandForSale); StringBuilder sbuild = new StringBuilder(); sbuild.append(ChatColor.GREEN); @@ -318,7 +319,7 @@ public void printForSaleResidences(Player player, int page) { toRemove.add(res); continue; } - player.sendMessage(Residence.getLM().getMessage("Economy.SellList", z, res.getName(), res.getSellPrice(), res.getOwner())); + Residence.msg(player, lm.Economy_SellList, z, res.getName(), res.getSellPrice(), res.getOwner()); } for (ClaimedResidence one : toRemove) { @@ -340,11 +341,11 @@ public void printForSaleResidences(Player player, int page) { Prevpage = page > 1 ? Prevpage : page; String prevCmd = "/res market list sell " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = "/res market list sell " + NextPage; - String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 23146986f..d5a12485d 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -6,6 +6,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketRentInterface; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceRentEvent; import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -70,8 +71,8 @@ public List getRentedLands(String playername, boolean onlyHidden) { if (onlyHidden && !hidden) continue; - rentedLands.add(Residence.getLM().getMessage("Residence.List", "", res.getName(), world) - + Residence.getLM().getMessage("Rent.Rented")); + rentedLands.add(Residence.msg(lm.Residence_List, "", res.getName(), world) + + Residence.msg(lm.Rent_Rented)); } return rentedLands; } @@ -142,29 +143,29 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days boolean resadmin) { if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } if (!Residence.getConfigManager().enabledRentSystem()) { - player.sendMessage(Residence.getLM().getMessage("Economy.MarketDisabled")); + Residence.msg(player, lm.Economy_MarketDisabled); return; } if (res.isForSell()) { - player.sendMessage(Residence.getLM().getMessage("Economy.SellRentFail")); + Residence.msg(player, lm.Economy_SellRentFail); return; } if (!resadmin) { if (!res.getPermissions().hasResidencePermission(player, true)) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return; } ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { - player.sendMessage(Residence.getLM().getMessage("Residence.MaxRent")); + Residence.msg(player, lm.Residence_MaxRent); return; } } @@ -182,9 +183,9 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days newrent.AllowAutoPay = AllowAutoPay; res.setRentable(newrent); rentableLand.add(res); - player.sendMessage(Residence.getLM().getMessage("Residence.ForRentSuccess", res.getResidenceName(), amount, days)); + Residence.msg(player, lm.Residence_ForRentSuccess, res.getResidenceName(), amount, days); } else { - player.sendMessage(Residence.getLM().getMessage("Residence.AlreadyRent")); + Residence.msg(player, lm.Residence_AlreadyRent); } } @@ -197,27 +198,27 @@ public void rent(Player player, String landName, boolean AutoPay, boolean resadm @SuppressWarnings("deprecation") public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean resadmin) { if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } if (!Residence.getConfigManager().enabledRentSystem()) { - player.sendMessage(Residence.getLM().getMessage("Rent.Disabled")); + Residence.msg(player, lm.Rent_Disabled); return; } if (res.isOwner(player)) { - player.sendMessage(Residence.getLM().getMessage("Economy.OwnerRentFail")); + Residence.msg(player, lm.Economy_OwnerRentFail); return; } ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); if (!resadmin && this.getRentCount(player.getName()) >= rPlayer.getMaxRents()) { - player.sendMessage(Residence.getLM().getMessage("Residence.MaxRent")); + Residence.msg(player, lm.Residence_MaxRent); return; } if (!res.isForRent()) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotForRent")); + Residence.msg(player, lm.Residence_NotForRent); return; } if (res.isRented()) { @@ -234,7 +235,7 @@ public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean r return; if (!land.AllowAutoPay && AutoPay) { - player.sendMessage(Residence.getLM().getMessage("Residence.CantAutoPay")); + Residence.msg(player, lm.Residence_CantAutoPay); AutoPay = false; } @@ -255,7 +256,7 @@ public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean r res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); - player.sendMessage(Residence.getLM().getMessage("Residence.RentSuccess", res.getName(), land.days)); + Residence.msg(player, lm.Residence_RentSuccess, res.getName(), land.days); if (Residence.getSchematicManager() != null && Residence.getConfigManager().RestoreAfterRentEnds && @@ -268,7 +269,7 @@ public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean r player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); } } else { - player.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); + Residence.msg(player, lm.Economy_NotEnoughMoney); } } @@ -279,21 +280,21 @@ public void payRent(Player player, String landName, boolean resadmin) { public void payRent(Player player, ClaimedResidence res, boolean resadmin) { if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } if (!Residence.getConfigManager().enabledRentSystem()) { - player.sendMessage(Residence.getLM().getMessage("Rent.Disabled")); + Residence.msg(player, lm.Rent_Disabled); return; } if (!res.isForRent()) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotForRent")); + Residence.msg(player, lm.Residence_NotForRent); return; } if (res.isRented() && !getRentingPlayer(res).equals(player.getName()) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Rent.NotByYou")); + Residence.msg(player, lm.Rent_NotByYou); return; } @@ -301,12 +302,12 @@ public void payRent(Player player, ClaimedResidence res, boolean resadmin) { RentedLand rentedLand = res.getRentedLand(); if (rentedLand == null) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotRented")); + Residence.msg(player, lm.Residence_NotRented); return; } if (!land.AllowRenewing) { - player.sendMessage(Residence.getLM().getMessage("Rent.OneTime")); + Residence.msg(player, lm.Rent_OneTime); return; } @@ -314,7 +315,7 @@ public void payRent(Player player, ClaimedResidence res, boolean resadmin) { PermissionGroup group = rPlayer.getGroup(); if (!resadmin && group.getMaxRentDays() != -1 && msToDays((rentedLand.endTime - System.currentTimeMillis()) + daysToMs(land.days)) >= group.getMaxRentDays()) { - player.sendMessage(Residence.getLM().getMessage("Rent.MaxRentDays", group.getMaxRentDays())); + Residence.msg(player, lm.Rent_MaxRentDays, group.getMaxRentDays()); return; } @@ -328,13 +329,13 @@ public void payRent(Player player, ClaimedResidence res, boolean resadmin) { Residence.getSignUtil().CheckSign(res); CuboidArea area = res.getAreaArray()[0]; Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); - player.sendMessage(Residence.getLM().getMessage("Rent.Extended", land.days, res.getName())); - player.sendMessage(Residence.getLM().getMessage("Rent.Expire", GetTime.getTime(rentedLand.endTime))); + Residence.msg(player, lm.Rent_Extended, land.days, res.getName()); + Residence.msg(player, lm.Rent_Expire, GetTime.getTime(rentedLand.endTime)); } else { player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); } } else { - player.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); + Residence.msg(player, lm.Economy_NotEnoughMoney); } } @@ -346,13 +347,13 @@ public void unrent(Player player, String landName, boolean resadmin) { public void unrent(Player player, ClaimedResidence res, boolean resadmin) { if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } RentedLand rent = res.getRentedLand(); if (rent == null) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotRented")); + Residence.msg(player, lm.Residence_NotRented); return; } @@ -380,9 +381,9 @@ public void unrent(Player player, ClaimedResidence res, boolean resadmin) { } Residence.getSignUtil().CheckSign(res); - player.sendMessage(Residence.getLM().getMessage("Residence.Unrent", res.getName())); + Residence.msg(player, lm.Residence_Unrent, res.getName()); } else { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); } } @@ -403,12 +404,12 @@ public void removeFromForRent(Player player, String landName, boolean resadmin) public void removeFromForRent(Player player, ClaimedResidence res, boolean resadmin) { if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return; } @@ -421,9 +422,9 @@ public void removeFromForRent(Player player, ClaimedResidence res, boolean resad res.setRentable(null); res.getPermissions().applyDefaultFlags(); Residence.getSignUtil().CheckSign(res); - player.sendMessage(Residence.getLM().getMessage("Residence.RemoveRentable", res.getResidenceName())); + Residence.msg(player, lm.Residence_RemoveRentable, res.getResidenceName()); } else { - player.sendMessage(Residence.getLM().getMessage("Residence.NotForRent")); + Residence.msg(player, lm.Residence_NotForRent); } } @@ -640,19 +641,19 @@ public void setRentRepeatable(Player player, String landName, boolean value, boo public void setRentRepeatable(Player player, ClaimedResidence res, boolean value, boolean resadmin) { if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } RentableLand land = res.getRentable(); if (!res.isOwner(player) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotOwner")); + Residence.msg(player, lm.Residence_NotOwner); return; } if (land == null || res == null || !res.isOwner(player) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotOwner")); + Residence.msg(player, lm.Residence_NotOwner); return; } @@ -661,9 +662,9 @@ public void setRentRepeatable(Player player, ClaimedResidence res, boolean value res.getRentedLand().AutoPay = false; if (value) - player.sendMessage(Residence.getLM().getMessage("Rentable.EnableRenew", res.getResidenceName())); + Residence.msg(player, lm.Rentable_EnableRenew, res.getResidenceName()); else - player.sendMessage(Residence.getLM().getMessage("Rentable.DisableRenew", res.getResidenceName())); + Residence.msg(player, lm.Rentable_DisableRenew, res.getResidenceName()); } @@ -675,37 +676,37 @@ public void setRentedRepeatable(Player player, String landName, boolean value, b public void setRentedRepeatable(Player player, ClaimedResidence res, boolean value, boolean resadmin) { if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } RentedLand land = res.getRentedLand(); if (land == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } if (!res.getRentable().AllowAutoPay && value) { - player.sendMessage(Residence.getLM().getMessage("Residence.CantAutoPay")); + Residence.msg(player, lm.Residence_CantAutoPay); return; } if (!land.player.equals(player.getName()) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotOwner")); + Residence.msg(player, lm.Residence_NotOwner); return; } if (!land.player.equals(player.getName()) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotOwner")); + Residence.msg(player, lm.Residence_NotOwner); return; } land.AutoPay = value; if (value) - player.sendMessage(Residence.getLM().getMessage("Rent.EnableRenew", res.getResidenceName())); + Residence.msg(player, lm.Rent_EnableRenew, res.getResidenceName()); else - player.sendMessage(Residence.getLM().getMessage("Rent.DisableRenew", res.getResidenceName())); + Residence.msg(player, lm.Rent_DisableRenew, res.getResidenceName()); if (res != null) Residence.getSignUtil().CheckSign(res); @@ -719,39 +720,39 @@ public void printRentInfo(Player player, String landName) { public void printRentInfo(Player player, ClaimedResidence res) { if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } RentableLand rentable = res.getRentable(); RentedLand rented = res.getRentedLand(); if (rentable != null) { - player.sendMessage(Residence.getLM().getMessage("General.Separator")); - player.sendMessage(Residence.getLM().getMessage("General.Land", res.getName())); - player.sendMessage(Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days)); - player.sendMessage(Residence.getLM().getMessage("Rentable.AllowRenewing", rentable.AllowRenewing)); - player.sendMessage(Residence.getLM().getMessage("Rentable.StayInMarket", rentable.StayInMarket)); - player.sendMessage(Residence.getLM().getMessage("Rentable.AllowAutoPay", rentable.AllowAutoPay)); + Residence.msg(player, lm.General_Separator); + Residence.msg(player, lm.General_Land, res.getName()); + Residence.msg(player, lm.General_Cost, rentable.cost, rentable.days); + Residence.msg(player, lm.Rentable_AllowRenewing, rentable.AllowRenewing); + Residence.msg(player, lm.Rentable_StayInMarket, rentable.StayInMarket); + Residence.msg(player, lm.Rentable_AllowAutoPay, rentable.AllowAutoPay); if (rented != null) { - player.sendMessage(Residence.getLM().getMessage("Residence.RentedBy", rented.player)); + Residence.msg(player, lm.Residence_RentedBy, rented.player); if (rented.player.equals(player.getName()) || res != null && res.isOwner(player) || Residence.isResAdminOn(player)) - player.sendMessage((rented.AutoPay ? Residence.getLM().getMessage("Rent.AutoPayTurnedOn") : Residence.getLM().getMessage("Rent.AutoPayTurnedOff")) + player.sendMessage((rented.AutoPay ? Residence.msg(lm.Rent_AutoPayTurnedOn) : Residence.msg(lm.Rent_AutoPayTurnedOff)) + "\n"); - player.sendMessage(Residence.getLM().getMessage("Rent.Expire", GetTime.getTime(rented.endTime))); + Residence.msg(player, lm.Rent_Expire, GetTime.getTime(rented.endTime)); } else { - player.sendMessage(Residence.getLM().getMessage("General.Status", Residence.getLM().getMessage("General.Available"))); + Residence.msg(player, lm.General_Status, Residence.msg(lm.General_Available)); } - player.sendMessage(Residence.getLM().getMessage("General.Separator")); + Residence.msg(player, lm.General_Separator); } else { - player.sendMessage(Residence.getLM().getMessage("General.Separator")); - player.sendMessage(Residence.getLM().getMessage("Residence.NotForRent")); - player.sendMessage(Residence.getLM().getMessage("General.Separator")); + Residence.msg(player, lm.General_Separator); + Residence.msg(player, lm.Residence_NotForRent); + Residence.msg(player, lm.General_Separator); } } public void printRentableResidences(Player player, int page) { - player.sendMessage(Residence.getLM().getMessage("Rentable.Land")); + Residence.msg(player, lm.Rentable_Land); StringBuilder sbuild = new StringBuilder(); sbuild.append(ChatColor.GREEN); @@ -783,11 +784,11 @@ public void printRentableResidences(Player player, int page) { String hover = ""; if (rented) { RentedLand rent = res.getRentedLand(); - rentedBy = Residence.getLM().getMessage("Residence.RentedBy", rent.player); + rentedBy = Residence.msg(lm.Residence_RentedBy, rent.player); hover = GetTime.getTime(rent.endTime); } - String msg = Residence.getLM().getMessage("Rent.RentList", z, res.getName(), res.getRentable().cost, res.getRentable().days, res.getRentable().AllowRenewing, + String msg = Residence.msg(lm.Rent_RentList, z, res.getName(), res.getRentable().cost, res.getRentable().days, res.getRentable().AllowRenewing, res.getOwner(), rentedBy); if (!hover.equalsIgnoreCase("")) @@ -813,11 +814,11 @@ public void printRentableResidences(Player player, int page) { Prevpage = page > 1 ? Prevpage : page; String prevCmd = "/res market list rent " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = "/res market list rent " + NextPage; - String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index f4ba92cdb..08e198c81 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -28,6 +28,9 @@ public void load() { ConfigReader c = new ConfigReader(conf, writer); + if (!conf.isConfigurationSection("Global.FlagPermission")) + return; + Set allFlags = conf.getConfigurationSection("Global.FlagPermission").getKeys(false); for (String oneFlag : allFlags) { diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 2deef6b44..f9d05dd1e 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -20,6 +20,7 @@ import org.bukkit.inventory.meta.ItemMeta; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; @@ -124,7 +125,7 @@ public void recalculateInv() { private void fillFlagDescriptions() { Set list = Residence.getLM().getKeyList("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands"); for (String onelist : list) { - String onelisttemp = Residence.getLM().getMessage("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + onelist + ".Description"); + String onelisttemp = Residence.msg("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + onelist + ".Description"); List lore = new ArrayList(); int i = 0; String sentence = ""; @@ -167,9 +168,9 @@ public void recalculateResidence(ClaimedResidence res) { String title = ""; if (targetPlayer == null) - title = Residence.getLM().getMessage("Gui.Set.Title", res.getName()); + title = Residence.msg(lm.Gui_Set_Title, res.getName()); else - title = Residence.getLM().getMessage("Gui.Pset.Title", targetPlayer, res.getName()); + title = Residence.msg(lm.Gui_Pset_Title, targetPlayer, res.getName()); if (title.length() > 32) { title = title.substring(0, Math.min(title.length(), 32)); @@ -232,21 +233,21 @@ public void recalculateResidence(ClaimedResidence res) { String variable = ""; switch ((FlagState) one.getValue()) { case FALSE: - variable = Residence.getLM().getMessage("General.False"); + variable = Residence.msg(lm.General_False); break; case TRUE: - variable = Residence.getLM().getMessage("General.True"); + variable = Residence.msg(lm.General_True); break; case NEITHER: - variable = Residence.getLM().getMessage("General.Removed"); + variable = Residence.msg(lm.General_Removed); break; } - lore.add(Residence.getLM().getMessage("General.FlagState", variable)); + lore.add(Residence.msg(lm.General_FlagState, variable)); if (description.containsKey(one.getKey())) lore.addAll(description.get(one.getKey())); - lore.addAll(Residence.getLM().getMessageList("Gui.Actions")); + lore.addAll(Residence.msgL(lm.Gui_Actions)); MiscInfoMeta.setLore(lore); @@ -260,12 +261,12 @@ public void recalculateResidence(ClaimedResidence res) { ItemMeta meta = Item.getItemMeta(); if (page > 1) { - meta.setDisplayName(Residence.getLM().getMessage("General.PrevInfoPage")); + meta.setDisplayName(Residence.msg(lm.General_PrevInfoPage)); Item.setItemMeta(meta); GuiInv.setItem(45, Item); } if (page < pageCount) { - meta.setDisplayName(Residence.getLM().getMessage("General.NextInfoPage")); + meta.setDisplayName(Residence.msg(lm.General_NextInfoPage)); Item.setItemMeta(meta); GuiInv.setItem(53, Item); } @@ -317,9 +318,9 @@ public void recalculatePlayer(ClaimedResidence res) { String title = ""; if (targetPlayer == null) - title = Residence.getLM().getMessage("Gui.Set.Title", res.getName()); + title = Residence.msg(lm.Gui_Set_Title, res.getName()); else - title = Residence.getLM().getMessage("Gui.Pset.Title", targetPlayer, res.getName()); + title = Residence.msg(lm.Gui_Pset_Title, targetPlayer, res.getName()); if (title.length() > 32) { title = title.substring(0, Math.min(title.length(), 32)); @@ -379,21 +380,21 @@ public void recalculatePlayer(ClaimedResidence res) { String variable = ""; switch ((FlagState) one.getValue()) { case FALSE: - variable = Residence.getLM().getMessage("General.False"); + variable = Residence.msg(lm.General_False); break; case TRUE: - variable = Residence.getLM().getMessage("General.True"); + variable = Residence.msg(lm.General_True); break; case NEITHER: - variable = Residence.getLM().getMessage("General.Removed"); + variable = Residence.msg(lm.General_Removed); break; } - lore.add(Residence.getLM().getMessage("General.FlagState", variable)); + lore.add(Residence.msg(lm.General_FlagState, variable)); if (description.containsKey(one.getKey())) lore.addAll(description.get(one.getKey())); - lore.addAll(Residence.getLM().getMessageList("Gui.Actions")); + lore.addAll(Residence.msgL(lm.Gui_Actions)); MiscInfoMeta.setLore(lore); @@ -407,12 +408,12 @@ public void recalculatePlayer(ClaimedResidence res) { ItemMeta meta = Item.getItemMeta(); if (page > 1) { - meta.setDisplayName(Residence.getLM().getMessage("General.PrevInfoPage")); + meta.setDisplayName(Residence.msg(lm.General_PrevInfoPage)); Item.setItemMeta(meta); GuiInv.setItem(45, Item); } if (page < pageCount) { - meta.setDisplayName(Residence.getLM().getMessage("General.NextInfoPage")); + meta.setDisplayName(Residence.msg(lm.General_NextInfoPage)); Item.setItemMeta(meta); GuiInv.setItem(53, Item); } diff --git a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java index baa3530a4..8e5921332 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java @@ -2,6 +2,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import java.util.Map; @@ -26,11 +27,11 @@ public void playerListChange(Player player, Material mat, boolean resadmin) { PermissionGroup group = rPlayer.getGroup(); if (resadmin || (res.getPermissions().hasResidencePermission(player, true) && group.itemListAccess())) { if (super.toggle(mat)) - player.sendMessage(Residence.getLM().getMessage("General.ListMaterialAdd", mat.toString(), type.toString().toLowerCase())); + Residence.msg(player, lm.General_ListMaterialAdd, mat.toString(), type.toString().toLowerCase()); else - player.sendMessage(Residence.getLM().getMessage("General.ListMaterialRemove", mat.toString(), type.toString().toLowerCase())); + Residence.msg(player, lm.General_ListMaterialRemove, mat.toString(), type.toString().toLowerCase()); } else { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index ab07fabb0..200574c32 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -25,6 +25,8 @@ import org.bukkit.event.block.BlockPlaceEvent; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.Location; @@ -92,7 +94,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (Residence.getConfigManager().enabledRentSystem() && res != null) { String resname = res.getName(); if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { - player.sendMessage(Residence.getLM().getMessage("Rent.ModifyDeny")); + Residence.msg(player, lm.Rent_ModifyDeny); event.setCancelled(true); return; } @@ -102,13 +104,13 @@ public void onBlockBreak(BlockBreakEvent event) { if (res != null && res.getItemIgnoreList().isListed(mat)) return; - boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), "destroy", perms.playerHas(pname, player.getWorld().getName(), "build", true)); - boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), "container", true); + boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), Flags.destroy, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)); + boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), Flags.container, true); if (!hasdestroy && !player.hasPermission("residence.bypass.destroy")) { - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "destroy")); + Residence.msg(player, lm.Flag_Deny, Flags.destroy); event.setCancelled(true); } else if (!hasContainer && mat == Material.CHEST) { - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "container")); + Residence.msg(player, lm.Flag_Deny, Flags.container); event.setCancelled(true); } } @@ -123,7 +125,7 @@ public void onBlockForm(BlockFormEvent event) { if (((EntityBlockFormEvent) event).getEntity() instanceof Snowman) { FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("snowtrail", true)) { + if (!perms.has(Flags.snowtrail, true)) { event.setCancelled(true); } } @@ -141,7 +143,7 @@ public void onIceForm(BlockFormEvent event) { return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("iceform", true)) { + if (!perms.has(Flags.iceform, true)) { event.setCancelled(true); } } @@ -157,7 +159,7 @@ public void onIceMelt(BlockFadeEvent event) { return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("icemelt", true)) { + if (!perms.has(Flags.icemelt, true)) { event.setCancelled(true); } } @@ -247,7 +249,7 @@ public void onChestPlace(BlockPlaceEvent event) { if (MessageInformed.contains(player.getName())) return; - player.sendMessage(Residence.getLM().getMessage("General.NewPlayerInfo")); + Residence.msg(player, lm.General_NewPlayerInfo); MessageInformed.add(player.getName()); } @@ -307,22 +309,22 @@ public void onBlockPlace(BlockPlaceEvent event) { if (Residence.getConfigManager().enabledRentSystem() && res != null) { String resname = res.getName(); if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { - player.sendMessage(Residence.getLM().getMessage("Rent.ModifyDeny")); + Residence.msg(player, lm.Rent_ModifyDeny); event.setCancelled(true); return; } } String pname = player.getName(); if (res != null && !res.getItemBlacklist().isAllowed(mat)) { - player.sendMessage(Residence.getLM().getMessage("General.ItemBlacklisted")); + Residence.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; } FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); - boolean hasplace = perms.playerHas(pname, player.getWorld().getName(), "place", perms.playerHas(pname, player.getWorld().getName(), "build", true)); + boolean hasplace = perms.playerHas(pname, world, Flags.place, perms.playerHas(pname, world, Flags.build, true)); if (!hasplace && !player.hasPermission("residence.bypass.build")) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "place")); + Residence.msg(player, lm.Flag_Deny, Flags.place.getName()); return; } } @@ -334,7 +336,7 @@ public void onBlockSpread(BlockSpreadEvent event) { return; Location loc = event.getBlock().getLocation(); FlagPermissions perms = Residence.getPermsByLoc(loc); - if (!perms.has("spread", true)) { + if (!perms.has(Flags.spread, true)) { event.setCancelled(true); } } @@ -345,7 +347,7 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("piston", true)) { + if (!perms.has(Flags.piston, true)) { event.setCancelled(true); return; } @@ -363,11 +365,11 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { Location locTo = new Location(block.getWorld(), block.getX() + dir.getModX(), block.getY() + dir.getModY(), block.getZ() + dir.getModZ()); ClaimedResidence blockFrom = Residence.getResidenceManager().getByLoc(locFrom); ClaimedResidence blockTo = Residence.getResidenceManager().getByLoc(locTo); - if (pistonRes == null && blockTo != null && blockTo.getPermissions().has("pistonprotection", true)) { + if (pistonRes == null && blockTo != null && blockTo.getPermissions().has(Flags.pistonprotection, true)) { event.setCancelled(true); return; } else if (blockTo != null && blockFrom != null && !blockTo.isOwner(blockFrom.getOwner()) && blockFrom.getPermissions().has( - "pistonprotection", true)) { + Flags.pistonprotection, true)) { event.setCancelled(true); return; } @@ -380,7 +382,7 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("piston", true)) { + if (!perms.has(Flags.piston, true)) { event.setCancelled(true); return; } @@ -394,14 +396,14 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { ClaimedResidence blockFrom = Residence.getResidenceManager().getByLoc(locFrom); ClaimedResidence blockTo = Residence.getResidenceManager().getByLoc(locTo); - if (pistonRes == null && blockTo != null && blockTo.getPermissions().has("pistonprotection", true)) { + if (pistonRes == null && blockTo != null && blockTo.getPermissions().has(Flags.pistonprotection, true)) { event.setCancelled(true); return; - } else if (blockTo != null && blockFrom == null && blockTo.getPermissions().has("pistonprotection", true)) { + } else if (blockTo != null && blockFrom == null && blockTo.getPermissions().has(Flags.pistonprotection, true)) { event.setCancelled(true); return; } else if (blockTo != null && blockFrom != null && (pistonRes != null && !blockTo.isOwner(pistonRes.getOwner()) || !blockTo.isOwner(blockFrom.getOwner())) - && blockTo.getPermissions().has("pistonprotection", true)) { + && blockTo.getPermissions().has(Flags.pistonprotection, true)) { event.setCancelled(true); return; } @@ -423,13 +425,13 @@ public void onBlockFromTo(BlockFromToEvent event) { return; } if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { - if (!perms.has("lavaflow", hasflow)) { + if (!perms.has(Flags.lavaflow, hasflow)) { event.setCancelled(true); } return; } if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { - if (!perms.has("waterflow", hasflow)) { + if (!perms.has(Flags.waterflow, hasflow)) { event.setCancelled(true); } return; @@ -448,7 +450,7 @@ public void onLandDryFade(BlockFadeEvent event) { return; FlagPermissions perms = Residence.getPermsByLoc(event.getNewState().getLocation()); - if (!perms.has("dryup", true)) { + if (!perms.has(Flags.dryup, true)) { event.getBlock().setData((byte) 7); event.setCancelled(true); return; @@ -467,7 +469,7 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("dryup", true)) { + if (!perms.has(Flags.dryup, true)) { event.getBlock().setData((byte) 7); event.setCancelled(true); return; @@ -548,7 +550,7 @@ public void onBlockBurn(BlockBurnEvent event) { if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("firespread", true)) + if (!perms.has(Flags.firespread, true)) event.setCancelled(true); } @@ -560,18 +562,18 @@ public void onBlockIgnite(BlockIgniteEvent event) { IgniteCause cause = event.getCause(); if (cause == IgniteCause.SPREAD) { FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("firespread", true)) + if (!perms.has(Flags.firespread, true)) event.setCancelled(true); } else if (cause == IgniteCause.FLINT_AND_STEEL) { Player player = event.getPlayer(); FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player); - if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), "ignite", true) && !Residence.isResAdminOn(player)) { + if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), Flags.ignite, true) && !Residence.isResAdminOn(player)) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "ignite")); + Residence.msg(player, lm.Flag_Deny, Flags.ignite.getName()); } } else { FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("ignite", true)) { + if (!perms.has(Flags.ignite, true)) { event.setCancelled(true); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index e93d9f09b..e24a8bca5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -25,6 +25,8 @@ import org.bukkit.event.entity.EntityInteractEvent; import org.bukkit.event.entity.PotionSplashEvent; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.Material; @@ -65,7 +67,7 @@ public void onEndermanChangeBlock(EntityChangeBlockEvent event) { if (event.getEntityType() != EntityType.ENDERMAN) return; FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has("destroy", true)) { + if (!perms.has(Flags.destroy, true)) { event.setCancelled(true); } } @@ -81,7 +83,7 @@ public void onEntityInteract(EntityInteractEvent event) { Material mat = block.getType(); Entity entity = event.getEntity(); FlagPermissions perms = Residence.getPermsByLoc(block.getLocation()); - boolean hastrample = perms.has("trample", perms.has("hasbuild", true)); + boolean hastrample = perms.has(Flags.trample, perms.has(Flags.build, true)); if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { event.setCancelled(true); } @@ -133,8 +135,8 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { if (res == null) return; - if (!res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { - cause.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "AnimalKilling", res.getName())); + if (!res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, true)) { + Residence.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); event.setCancelled(true); } } @@ -180,8 +182,8 @@ public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { if (Residence.isResAdminOn(cause)) return; - if (!res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { - cause.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "AnimalKilling", res.getName())); + if (!res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, true)) { + Residence.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); event.setCancelled(true); } } @@ -207,7 +209,7 @@ public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { FlagPermissions perms = Residence.getPermsByLoc(entity.getLocation()); FlagPermissions world = Residence.getWorldFlags().getPerms(entity.getWorld().getName()); - if (!perms.has("animalkilling", world.has("animalkilling", true))) { + if (!perms.has(Flags.animalkilling, world.has(Flags.animalkilling, true))) { event.setCancelled(true); return; } @@ -225,10 +227,10 @@ public void OnEntityDeath(EntityDeathEvent event) { return; Location loc = ent.getLocation(); FlagPermissions perms = Residence.getPermsByLoc(loc); - if (!perms.has("mobitemdrop", true)) { + if (!perms.has(Flags.mobitemdrop, true)) { event.getDrops().clear(); } - if (!perms.has("mobexpdrop", true)) { + if (!perms.has(Flags.mobexpdrop, true)) { event.setDroppedExp(0); } } @@ -250,7 +252,7 @@ public void VehicleDestroy(VehicleDestroyEvent event) { if (damager instanceof Projectile && !(((Projectile) damager).getShooter() instanceof Player) || !(damager instanceof Player)) { FlagPermissions perms = Residence.getPermsByLoc(vehicle.getLocation()); - if (!perms.has("vehicledestroy", true)) { + if (!perms.has(Flags.vehicledestroy, true)) { event.setCancelled(true); return; } @@ -275,8 +277,8 @@ public void VehicleDestroy(VehicleDestroyEvent event) { if (res == null) return; - if (!res.getPermissions().playerHas(cause.getName(), "vehicledestroy", true)) { - cause.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "vehicledestroy", res.getName())); + if (!res.getPermissions().playerHas(cause.getName(), Flags.vehicledestroy, true)) { + Residence.msg(cause, lm.Residence_FlagDeny, Flags.vehicledestroy.getName(), res.getName()); event.setCancelled(true); } } @@ -319,8 +321,8 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { if (res == null) return; - if (!res.getPermissions().playerHas(cause.getName(), "mobkilling", true)) { - cause.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "MobKilling", res.getName())); + if (!res.getPermissions().playerHas(cause.getName(), Flags.mobkilling, true)) { + Residence.msg(cause, lm.Residence_FlagDeny, Flags.mobkilling.getName(), res.getName()); event.setCancelled(true); } } @@ -345,8 +347,8 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { if (res == null) return; - if (!res.getPermissions().playerHas(player.getName(), "leash", true)) { - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Leash", res.getName())); + if (!res.getPermissions().playerHas(player.getName(), Flags.leash, true)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); event.setCancelled(true); } } @@ -362,7 +364,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); if (Residence.getNms().isAnimal(ent)) { - if (!perms.has("animals", true)) { + if (!perms.has(Flags.animals, true)) { event.setCancelled(true); return; } @@ -373,7 +375,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case BUILD_SNOWMAN: case CUSTOM: case DEFAULT: - if (!perms.has("canimals", true)) { + if (!perms.has(Flags.canimals, true)) { event.setCancelled(true); return; } @@ -390,14 +392,14 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case NETHER_PORTAL: case OCELOT_BABY: case NATURAL: - if (!perms.has("nanimals", true)) { + if (!perms.has(Flags.nanimals, true)) { event.setCancelled(true); return; } break; case SPAWNER_EGG: case SPAWNER: - if (!perms.has("sanimals", true)) { + if (!perms.has(Flags.sanimals, true)) { event.setCancelled(true); return; } @@ -406,7 +408,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { break; } } else if (isMonster(ent)) { - if (!perms.has("monsters", true)) { + if (!perms.has(Flags.monsters, true)) { event.setCancelled(true); return; } @@ -414,7 +416,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case BUILD_WITHER: case CUSTOM: case DEFAULT: - if (!perms.has("cmonsters", true)) { + if (!perms.has(Flags.cmonsters, true)) { event.setCancelled(true); return; } @@ -430,14 +432,14 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case SLIME_SPLIT: case LIGHTNING: case NATURAL: - if (!perms.has("nmonsters", true)) { + if (!perms.has(Flags.nmonsters, true)) { event.setCancelled(true); return; } break; case SPAWNER_EGG: case SPAWNER: - if (!perms.has("smonsters", true)) { + if (!perms.has(Flags.smonsters, true)) { event.setCancelled(true); return; } @@ -463,9 +465,9 @@ public void onHangingPlace(HangingPlaceEvent event) { FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); String pname = player.getName(); String world = player.getWorld().getName(); - if (!perms.playerHas(pname, world, "place", perms.playerHas(pname, world, "build", true))) { + if (!perms.playerHas(pname, world, Flags.place, perms.playerHas(pname, world, Flags.build, true))) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "place")); + Residence.msg(player, lm.Flag_Deny, Flags.place.getName()); } } @@ -492,9 +494,9 @@ public void onHangingBreak(HangingBreakByEntityEvent event) { String pname = player.getName(); FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); String world = ent.getWorld().getName(); - if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) { + if (!perms.playerHas(pname, world, Flags.destroy, perms.playerHas(pname, world, Flags.build, true))) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "destroy")); + Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); } } @@ -513,7 +515,7 @@ public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { return; FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); - if (!perms.has("destroy", perms.has("build", true))) { + if (!perms.has(Flags.destroy, perms.has(Flags.build, true))) { event.setCancelled(true); } } @@ -527,7 +529,7 @@ public void onEntityCombust(EntityCombustEvent event) { if (Residence.isDisabledWorldListener(ent.getWorld())) return; FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); - if (!perms.has("burn", true)) { + if (!perms.has(Flags.burn, true)) { event.setCancelled(true); } } @@ -545,7 +547,7 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { switch (entity) { case CREEPER: - if (!perms.has("creeper", perms.has("explode", true))) { + if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) { if (Residence.getConfigManager().isCreeperExplodeBelow()) { if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) { event.setCancelled(true); @@ -565,7 +567,7 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { break; case PRIMED_TNT: case MINECART_TNT: - if (!perms.has("tnt", perms.has("explode", true))) { + if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { if (Residence.getConfigManager().isTNTExplodeBelow()) { if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) { event.setCancelled(true); @@ -585,13 +587,13 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { break; case SMALL_FIREBALL: case FIREBALL: - if (!perms.has("fireball", perms.has("explode", true))) { + if (!perms.has(Flags.fireball, perms.has(Flags.explode, true))) { event.setCancelled(true); ent.remove(); } break; default: - if (!perms.has("destroy", true)) { + if (!perms.has(Flags.destroy, true)) { event.setCancelled(true); ent.remove(); } @@ -618,7 +620,7 @@ public void onEntityExplode(EntityExplodeEvent event) { if (ent != null) { switch (event.getEntityType()) { case CREEPER: - if (!perms.has("creeper", perms.has("explode", true))) + if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) if (Residence.getConfigManager().isCreeperExplodeBelow()) { if (loc.getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) cancel = true; @@ -632,7 +634,7 @@ public void onEntityExplode(EntityExplodeEvent event) { break; case PRIMED_TNT: case MINECART_TNT: - if (!perms.has("tnt", perms.has("explode", true))) { + if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { if (Residence.getConfigManager().isTNTExplodeBelow()) { if (loc.getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) cancel = true; @@ -647,15 +649,15 @@ public void onEntityExplode(EntityExplodeEvent event) { break; case SMALL_FIREBALL: case FIREBALL: - if (!perms.has("fireball", perms.has("explode", true))) + if (!perms.has(Flags.fireball, perms.has(Flags.explode, true))) cancel = true; break; default: - if (!perms.has("destroy", world.has("destroy", true))) + if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) cancel = true; break; } - } else if (!perms.has("destroy", world.has("destroy", true))) { + } else if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) { cancel = true; } @@ -673,7 +675,7 @@ public void onEntityExplode(EntityExplodeEvent event) { if (ent != null) { switch (event.getEntityType()) { case CREEPER: - if (!blockperms.has("creeper", blockperms.has("explode", true))) + if (!blockperms.has(Flags.creeper, blockperms.has(Flags.explode, true))) if (Residence.getConfigManager().isCreeperExplodeBelow()) { if (block.getY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) preserve.add(block); @@ -687,7 +689,7 @@ public void onEntityExplode(EntityExplodeEvent event) { continue; case PRIMED_TNT: case MINECART_TNT: - if (!blockperms.has("tnt", blockperms.has("explode", true))) { + if (!blockperms.has(Flags.tnt, blockperms.has(Flags.explode, true))) { if (Residence.getConfigManager().isTNTExplodeBelow()) { if (block.getY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) preserve.add(block); @@ -701,26 +703,25 @@ public void onEntityExplode(EntityExplodeEvent event) { } continue; case ENDER_DRAGON: - if (!blockperms.has("dragongrief", false)) + if (!blockperms.has(Flags.dragongrief, false)) preserve.add(block); break; case ENDER_CRYSTAL: - if (!blockperms.has("explode", false)) + if (!blockperms.has(Flags.explode, false)) preserve.add(block); continue; case SMALL_FIREBALL: case FIREBALL: - if (!blockperms.has("fireball", blockperms.has("explode", true))) + if (!blockperms.has(Flags.fireball, blockperms.has(Flags.explode, true))) preserve.add(block); continue; default: - if (!blockperms.has("destroy", world.has("destroy", true))) + if (!blockperms.has(Flags.destroy, world.has(Flags.destroy, true))) preserve.add(block); continue; } } else { - if (!blockperms.has("destroy", world.has("destroy", true))) { - Debug.D("keep block"); + if (!blockperms.has(Flags.destroy, world.has(Flags.destroy, true))) { preserve.add(block); } } @@ -752,13 +753,13 @@ public void onSplashPotion(PotionSplashEvent event) { return; Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); Iterator it = event.getAffectedEntities().iterator(); while (it.hasNext()) { LivingEntity target = it.next(); if (target.getType() != EntityType.PLAYER) continue; - Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has("pvp", true); + Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has(Flags.pvp, true); if (!srcpvp || !tgtpvp) event.setIntensity(target, 0); } @@ -805,8 +806,8 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { return; Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has("pvp", true); - Boolean tgtpvp = Residence.getPermsByLoc(entity.getLocation()).has("pvp", true); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); + Boolean tgtpvp = Residence.getPermsByLoc(entity.getLocation()).has(Flags.pvp, true); if (!srcpvp || !tgtpvp) event.setCancelled(true); } @@ -823,7 +824,7 @@ public void OnPlayerDamageByLightning(EntityDamageEvent event) { Entity ent = event.getEntity(); if (!(ent instanceof Player)) return; - if (!Residence.getPermsByLoc(ent.getLocation()).has("pvp", true)) + if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true)) event.setCancelled(true); } @@ -852,14 +853,14 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { Location loc = event.getEntity().getLocation(); FlagPermissions perm = Residence.getPermsByLoc(loc); - if (!perm.has("destroy", true)) { + if (!perm.has(Flags.destroy, true)) { event.setCancelled(true); } return; } else if (dmgr.getType() == EntityType.PRIMED_TNT || dmgr.getType() == EntityType.MINECART_TNT || dmgr.getType() == EntityType.WITHER_SKULL || dmgr .getType() == EntityType.WITHER) { FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); - boolean destroy = perms.has("explode", false); + boolean destroy = perms.has(Flags.explode, false); if (!destroy) { event.setCancelled(true); return; @@ -871,7 +872,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (res == null) return; - if (isMonster(dmgr) && !res.getPermissions().has("destroy", false)) { + if (isMonster(dmgr) && !res.getPermissions().has(Flags.destroy, false)) { event.setCancelled(true); return; } @@ -885,9 +886,9 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { String pname = player.getName(); FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); String world = loc.getWorld().getName(); - if (!perms.playerHas(pname, world, "destroy", perms.playerHas(pname, world, "build", true))) { + if (!perms.playerHas(pname, world, Flags.destroy, perms.playerHas(pname, world, Flags.build, true))) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "destroy")); + Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); } } @@ -909,7 +910,7 @@ public void onEntityDamage(EntityDamageEvent event) { Entity damager = attackevent.getDamager(); if (area != null && ent instanceof Player && damager instanceof Player) { - if (area.getPermissions().has("overridepvp", false) || Residence.getConfigManager().isOverridePvp() && area.getPermissions().has("pvp", false)) { + if (area.getPermissions().has("overridepvp", false) || Residence.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, false)) { Player player = (Player) event.getEntity(); Damageable damage = player; damage.damage(event.getDamage()); @@ -927,7 +928,7 @@ public void onEntityDamage(EntityDamageEvent event) { boolean allowSnowBall = false; boolean isSnowBall = false; if (srcarea != null) { - srcpvp = srcarea.getPermissions().has("pvp", true); + srcpvp = srcarea.getPermissions().has(Flags.pvp, true); } ent = attackevent.getEntity(); if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) @@ -939,7 +940,7 @@ public void onEntityDamage(EntityDamageEvent event) { Projectile project = (Projectile) damager; if (project.getType() == EntityType.SNOWBALL && srcarea != null) { isSnowBall = true; - allowSnowBall = srcarea.getPermissions().has("snowball", false); + allowSnowBall = srcarea.getPermissions().has(Flags.snowball, false); } attacker = (Player) ((Projectile) damager).getShooter(); } @@ -949,7 +950,7 @@ public void onEntityDamage(EntityDamageEvent event) { if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { if (attacker != null) - attacker.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); + Residence.msg(attacker, lm.General_NoPVPZone); event.setCancelled(true); return; } @@ -957,34 +958,34 @@ public void onEntityDamage(EntityDamageEvent event) { if (area == null) { /* World PvP */ if (damager != null) - if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { + if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, true)) { if (attacker != null) - attacker.sendMessage(Residence.getLM().getMessage("General.WorldPVPDisabled")); + Residence.msg(attacker, lm.General_WorldPVPDisabled); event.setCancelled(true); } } else { /* Normal PvP */ - if (!isSnowBall && !area.getPermissions().has("pvp", true) || isSnowBall && !allowSnowBall) { + if (!isSnowBall && !area.getPermissions().has(Flags.pvp, true) || isSnowBall && !allowSnowBall) { if (attacker != null) - attacker.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); + Residence.msg(attacker, lm.General_NoPVPZone); event.setCancelled(true); } } return; } else if ((ent instanceof Player || tamedAnimal) && (damager instanceof Creeper)) { - if (area == null && !Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("creeper", true)) { + if (area == null && !Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.creeper, true)) { event.setCancelled(true); - } else if (area != null && !area.getPermissions().has("creeper", true)) { + } else if (area != null && !area.getPermissions().has(Flags.creeper, true)) { event.setCancelled(true); } } } if (area == null) { - if (!Residence.getWorldFlags().getPerms(ent.getWorld().getName()).has("damage", true) && (ent instanceof Player || tamedAnimal)) { + if (!Residence.getWorldFlags().getPerms(ent.getWorld().getName()).has(Flags.damage, true) && (ent instanceof Player || tamedAnimal)) { event.setCancelled(true); } } else { - if (!area.getPermissions().has("damage", true) && (ent instanceof Player || tamedAnimal)) { + if (!area.getPermissions().has(Flags.damage, true) && (ent instanceof Player || tamedAnimal)) { event.setCancelled(true); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 50d9cf9e3..8a800fd22 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -52,7 +52,9 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.*; @@ -176,7 +178,7 @@ public void onPlayerChatGlobalLow(AsyncPlayerChatEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceBackup(ResidenceFlagChangeEvent event) { - if (!event.getFlag().equalsIgnoreCase("backup")) + if (!event.getFlag().equalsIgnoreCase(Flags.backup.getName())) return; Player player = event.getPlayer(); if (!Residence.getConfigManager().RestoreAfterRentEnds) @@ -222,7 +224,7 @@ public void run() { if (rentedland.AutoPay) continue; if (rentedland.endTime - System.currentTimeMillis() < Residence.getConfigManager().getRentInformBefore() * 60 * 24 * 7) { - player.sendMessage(Residence.getLM().getMessage("Residence.EndingRent", one, GetTime.getTime(rentedland.endTime))); + Residence.msg(player, lm.Residence_EndingRent, one, GetTime.getTime(rentedland.endTime)); } } } @@ -242,11 +244,11 @@ public void onFishingRodUse(PlayerFishEvent event) { if (Residence.getNms().isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { FlagPermissions perm = Residence.getPermsByLoc(event.getCaught().getLocation()); ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getCaught().getLocation()); - if (!perm.has("hook", false) && res != null && !res.getPermissions().playerHas(player, "hook", true) || - !perm.has("hook", false) && res != null && !res.getPermissions().playerHas(player, "hook", false)) { + if (!perm.has(Flags.hook, false) && res != null && !res.getPermissions().playerHas(player, Flags.hook, true) || + !perm.has(Flags.hook, false) && res != null && !res.getPermissions().playerHas(player, Flags.hook, false)) { event.setCancelled(true); if (res != null) - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "hook", res.getName())); + Residence.msg(player, lm.Residence_FlagDeny, Flags.hook.getName(), res.getName()); return; } } @@ -269,10 +271,10 @@ public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { case INVALID: break; case TRUE: - if (event.getFlag().equalsIgnoreCase("day")) + if (event.getFlag().equalsIgnoreCase(Flags.day.getName())) for (Player one : event.getResidence().getPlayersInResidence()) one.setPlayerTime(6000L, false); - if (event.getFlag().equalsIgnoreCase("night")) + if (event.getFlag().equalsIgnoreCase(Flags.night.getName())) for (Player one : event.getResidence().getPlayersInResidence()) one.setPlayerTime(14000L, false); break; @@ -286,7 +288,7 @@ public void onFlagChangeSunRain(ResidenceFlagChangeEvent event) { if (event.isCancelled()) return; - if (!event.getFlag().equalsIgnoreCase("sun") && !event.getFlag().equalsIgnoreCase("rain")) + if (!event.getFlag().equalsIgnoreCase(Flags.sun.getName()) && !event.getFlag().equalsIgnoreCase(Flags.rain.getName())) return; switch (event.getNewState()) { @@ -298,10 +300,10 @@ public void onFlagChangeSunRain(ResidenceFlagChangeEvent event) { case INVALID: break; case TRUE: - if (event.getFlag().equalsIgnoreCase("sun")) + if (event.getFlag().equalsIgnoreCase(Flags.sun.getName())) for (Player one : event.getResidence().getPlayersInResidence()) one.setPlayerWeather(WeatherType.CLEAR); - if (event.getFlag().equalsIgnoreCase("rain")) + if (event.getFlag().equalsIgnoreCase(Flags.rain.getName())) for (Player one : event.getResidence().getPlayersInResidence()) one.setPlayerWeather(WeatherType.DOWNFALL); break; @@ -322,7 +324,7 @@ public void onCommand(PlayerCommandPreprocessEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByName(resname); if (res == null) return; - if (res.getPermissions().playerHas(player.getName(), "command", true)) + if (res.getPermissions().playerHas(player.getName(), Flags.command, true)) return; if (Residence.getPermissionManager().isResidenceAdmin(player)) @@ -368,7 +370,7 @@ else if (white == 0) return; event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "command", res.getName())); + Residence.msg(player, lm.Residence_FlagDeny, Flags.command.getName(), res.getName()); } @@ -476,7 +478,7 @@ public void onSignCreate(SignChangeEvent event) { Sign sign = (Sign) block.getState(); - if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(Residence.getLM().getMessage("Sign.TopLine"))) + if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(Residence.msg(lm.Sign_TopLine))) return; Signs signInfo = new Signs(); @@ -485,6 +487,8 @@ public void onSignCreate(SignChangeEvent event) { String landName = null; + Player player = event.getPlayer(); + ClaimedResidence res = null; if (!event.getLine(1).equalsIgnoreCase("")) { @@ -497,7 +501,7 @@ public void onSignCreate(SignChangeEvent event) { res = Residence.getResidenceManager().getByName(resname); if (res == null) { - event.getPlayer().sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } @@ -509,7 +513,7 @@ public void onSignCreate(SignChangeEvent event) { } if (res == null) { - event.getPlayer().sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } @@ -596,7 +600,7 @@ public void onPlayerJoin(PlayerChangedWorldEvent event) { FlagPermissions perms = Residence.getPermsByLocForPlayer(player.getLocation(), player); - f: if ((player.getAllowFlight() || player.isFlying()) && perms.has("nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( + f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); @@ -619,11 +623,11 @@ public void onPlayerJoin(PlayerChangedWorldEvent event) { if (location.getBlockY() <= 0) { player.setFlying(false); player.setAllowFlight(false); - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Fly", location.getWorld().getName())); + Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); return; } } - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Fly", location.getWorld().getName())); + Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); player.teleport(location); player.setFlying(false); player.setAllowFlight(false); @@ -661,18 +665,18 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { if (res == null) { return; } - if (res.getPermissions().playerHas(player.getName(), "move", true)) { + if (res.getPermissions().playerHas(player, Flags.move, true)) { return; } if (bed) { loc = player.getWorld().getSpawnLocation(); } res = Residence.getResidenceManager().getByLoc(loc); - if (res != null && !res.getPermissions().playerHas(player.getName(), "move", true)) { + if (res != null && !res.getPermissions().playerHas(player.getName(), Flags.move, true)) { loc = res.getOutsideFreeLoc(loc, player); } - player.sendMessage(Residence.getLM().getMessage("General.NoSpawn")); + Residence.msg(player, lm.General_NoSpawn); event.setRespawnLocation(loc); } @@ -737,11 +741,11 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); if (relativeBlock.getType() == Material.FIRE) { - boolean hasplace = perms.playerHas(player.getName(), player.getWorld().getName(), "place", perms.playerHas(player.getName(), player.getWorld().getName(), - "build", true)); + boolean hasplace = perms.playerHas(player.getName(), player.getWorld().getName(), Flags.place, perms.playerHas(player.getName(), player.getWorld().getName(), + Flags.build, true)); if (!hasplace) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "build")); + Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); return; } } @@ -763,14 +767,14 @@ public void onPlatePress(PlayerInteractEvent event) { String world = player.getWorld().getName(); boolean resadmin = Residence.isResAdminOn(player); if (!resadmin) { - boolean hasuse = perms.playerHas(player.getName(), world, "use", true); - boolean haspressure = perms.playerHas(player.getName(), world, "pressure", hasuse); + boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); + boolean haspressure = perms.playerHas(player.getName(), world, Flags.pressure, hasuse); if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE || Residence.getNms().isPlate(mat))) { event.setCancelled(true); return; } } - if (!perms.playerHas(player.getName(), world, "trample", perms.playerHas(player.getName(), world, "build", true)) && (mat == Material.SOIL + if (!perms.playerHas(player.getName(), world, Flags.trample, perms.playerHas(player.getName(), world, Flags.build, true)) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { event.setCancelled(true); return; @@ -811,14 +815,14 @@ public void onSelection(PlayerInteractEvent event) { if (event.getAction() == Action.LEFT_CLICK_BLOCK) { Location loc = block.getLocation(); Residence.getSelectionManager().placeLoc1(player, loc, true); - player.sendMessage(Residence.getLM().getMessage("Select.PrimaryPoint", Residence.getLM().getMessage("General.CoordsTop", loc.getBlockX(), loc.getBlockY(), - loc.getBlockZ()))); + Residence.msg(player, lm.Select_PrimaryPoint, Residence.msg(lm.General_CoordsTop, loc.getBlockX(), loc.getBlockY(), + loc.getBlockZ())); event.setCancelled(true); } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && Residence.getNms().isMainHand(event)) { Location loc = block.getLocation(); Residence.getSelectionManager().placeLoc2(player, loc, true); - player.sendMessage(Residence.getLM().getMessage("Select.SecondaryPoint", Residence.getLM().getMessage("General.CoordsBottom", loc.getBlockX(), loc - .getBlockY(), loc.getBlockZ()))); + Residence.msg(player, lm.Select_SecondaryPoint, Residence.msg(lm.General_CoordsBottom, loc.getBlockX(), loc + .getBlockY(), loc.getBlockZ())); event.setCancelled(true); } @@ -855,7 +859,7 @@ public void onInfoCheck(PlayerInteractEvent event) { if (res != null) Residence.getResidenceManager().printAreaInfo(res, player, false); else - player.sendMessage(Residence.getLM().getMessage("Residence.NoResHere")); + Residence.msg(player, lm.Residence_NoResHere); event.setCancelled(true); return; @@ -892,7 +896,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); boolean resadmin = Residence.isResAdminOn(player); if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - player.sendMessage(Residence.getLM().getMessage("General.ItemBlacklisted")); + Residence.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; } @@ -907,8 +911,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (Residence.getNms().itemInMainHand(player).getData().getData() == 15 && block.getType() == Material.GRASS || iih.getData().getData() == 3 && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, "build", true)) { - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "build")); + if (!perms.playerHas(player.getName(), world, Flags.build, true)) { + Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); event.setCancelled(true); return; } @@ -916,8 +920,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (Residence.getNms().isArmorStandMaterial(heldItem) || Residence.getNms().isBoat(heldItem)) { perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, "build", true)) { - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "build")); + if (!perms.playerHas(player.getName(), world, Flags.build, true)) { + Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); event.setCancelled(true); return; } @@ -925,7 +929,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasuse = perms.playerHas(player.getName(), world, "use", true); + boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { if (mat != checkMat.getKey()) continue; @@ -933,34 +937,34 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) continue; - if (hasuse || checkMat.getValue().equals("container")) { + if (hasuse || checkMat.getValue().equals(Flags.container.getName())) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", checkMat.getValue())); + Residence.msg(player, lm.Flag_Deny, checkMat.getValue()); return; } event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "use")); + Residence.msg(player, lm.Flag_Deny, Flags.use); return; } if (Residence.getConfigManager().getCustomContainers().contains(blockId)) { - if (!perms.playerHas(player.getName(), world, "container", hasuse)) { + if (!perms.playerHas(player.getName(), world, Flags.container, hasuse)) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "container")); + Residence.msg(player, lm.Flag_Deny, Flags.container.getName()); return; } } if (Residence.getConfigManager().getCustomBothClick().contains(blockId)) { if (!hasuse) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "use")); + Residence.msg(player, lm.Flag_Deny, Flags.use.getName()); return; } } if (Residence.getConfigManager().getCustomRightClick().contains(blockId) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (!hasuse) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "use")); + Residence.msg(player, lm.Flag_Deny, Flags.use.getName()); return; } } @@ -984,8 +988,8 @@ public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res != null && !res.getPermissions().playerHas(player.getName(), "trade", true)) { - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "trade", res.getName())); + if (res != null && !res.getPermissions().playerHas(player.getName(), Flags.trade, true)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.trade.getName(), res.getName()); event.setCancelled(true); } } @@ -1007,11 +1011,11 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "container", true) && player.isSneaking()) { - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "container", res.getName())); + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.container, true) && player.isSneaking()) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); event.setCancelled(true); - } else if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "riding", false)) { - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "riding", res.getName())); + } else if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.riding, false)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); event.setCancelled(true); } } @@ -1033,8 +1037,8 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "container", true)) { - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "container", res.getName())); + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.container, true)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); event.setCancelled(true); } } @@ -1056,8 +1060,8 @@ public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "riding", false)) { - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "riding", res.getName())); + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.riding, false)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); event.setCancelled(true); } } @@ -1079,8 +1083,8 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "dye", true)) { - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "dye", res.getName())); + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.dye, true)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.dye.getName(), res.getName()); event.setCancelled(true); } } @@ -1103,8 +1107,8 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { if (res == null) return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "shear", true)) { - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Shear", res.getName())); + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.shear, true)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.shear.getName(), res.getName()); event.setCancelled(true); } @@ -1138,13 +1142,13 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { String world = player.getWorld().getName(); String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); if (!Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - player.sendMessage(Residence.getLM().getMessage("General.ItemBlacklisted")); + Residence.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; } - if (!perms.playerHas(player.getName(), world, "container", perms.playerHas(player.getName(), world, "use", true))) { + if (!perms.playerHas(player.getName(), world, Flags.container, perms.playerHas(player.getName(), world, Flags.use, true))) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "container")); + Residence.msg(player, lm.Flag_Deny, Flags.container.getName()); } } @@ -1163,14 +1167,14 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { if (res != null) { if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { if (Residence.getRentManager().isRented(res.getName())) { - player.sendMessage(Residence.getLM().getMessage("Rent.ModifyDeny")); + Residence.msg(player, lm.Rent_ModifyDeny); event.setCancelled(true); return; } } Material mat = event.getBucket(); - if ((!res.getPermissions().playerHas(player.getName(), "bucket", true) && !res.getPermissions().playerHas(player.getName(), "bucketempty", true)) + if ((!res.getPermissions().playerHas(player.getName(), Flags.bucket, true) && !res.getPermissions().playerHas(player.getName(), Flags.bucketempty, true)) && Residence.getConfigManager().getNoPlaceWorlds().contains(loc.getWorld().getName())) { if (mat == Material.LAVA_BUCKET) { event.setCancelled(true); @@ -1185,9 +1189,9 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { String pname = player.getName(); FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); - if (!perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)) && - !perms.playerHas(pname, player.getWorld().getName(), "bucketempty", perms.playerHas(pname, player.getWorld().getName(), "build", true))) { - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "bucket")); + if (!perms.playerHas(pname, player.getWorld().getName(), Flags.bucket, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)) && + !perms.playerHas(pname, player.getWorld().getName(), Flags.bucketempty, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true))) { + Residence.msg(player, lm.Flag_Deny, Flags.bucket.getName()); event.setCancelled(true); return; } @@ -1197,8 +1201,8 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { if (res == null && Residence.getConfigManager().isNoLavaPlace() && loc.getBlockY() >= level - 1 && Residence.getConfigManager() .getNoPlaceWorlds().contains(loc.getWorld().getName())) { if (mat == Material.LAVA_BUCKET) { - if (!Residence.getLM().getMessage("General.CantPlaceLava").equalsIgnoreCase("")) - player.sendMessage(Residence.getLM().getMessage("General.CantPlaceLava", level)); + if (!Residence.msg(lm.General_CantPlaceLava).equalsIgnoreCase("")) + Residence.msg(player, lm.General_CantPlaceLava, level); event.setCancelled(true); return; } @@ -1207,8 +1211,8 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { if (res == null && Residence.getConfigManager().isNoWaterPlace() && loc.getBlockY() >= level - 1 && Residence.getConfigManager() .getNoPlaceWorlds().contains(loc.getWorld().getName())) if (mat == Material.WATER_BUCKET) { - if (!Residence.getLM().getMessage("General.CantPlaceWater").equalsIgnoreCase("")) - player.sendMessage(Residence.getLM().getMessage("General.CantPlaceWater", level)); + if (!Residence.msg(lm.General_CantPlaceWater).equalsIgnoreCase("")) + Residence.msg(player, lm.General_CantPlaceWater, level); event.setCancelled(true); return; } @@ -1227,7 +1231,7 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) { if (res != null) { if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { if (Residence.getRentManager().isRented(res.getName())) { - player.sendMessage(Residence.getLM().getMessage("Rent.ModifyDeny")); + Residence.msg(player, lm.Rent_ModifyDeny); event.setCancelled(true); return; } @@ -1236,10 +1240,11 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) { String pname = player.getName(); FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); - boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), "bucket", perms.playerHas(pname, player.getWorld().getName(), "build", true)); - boolean hasbucketfill = perms.playerHas(pname, player.getWorld().getName(), "bucketfill", perms.playerHas(pname, player.getWorld().getName(), "build", true)); + boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), Flags.bucket, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)); + boolean hasbucketfill = perms.playerHas(pname, player.getWorld().getName(), Flags.bucketfill, perms.playerHas(pname, player.getWorld().getName(), Flags.build, + true)); if (!hasbucket && !hasbucketfill) { - player.sendMessage(Residence.getLM().getMessage("Flag.Deny", "bucket")); + Residence.msg(player, lm.Flag_Deny, Flags.bucket.getName()); event.setCancelled(true); } } @@ -1266,32 +1271,32 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { String areaname = res.getName(); - if (!res.getPermissions().playerHas(player.getName(), "move", true) && !res.isOwner(player)) { + if (!res.getPermissions().playerHas(player.getName(), Flags.move, true) && !res.isOwner(player)) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Residence.MoveDeny", areaname)); + Residence.msg(player, lm.Residence_MoveDeny, areaname); return; } } else if (event.getCause() == TeleportCause.ENDER_PEARL) { String areaname = res.getName(); - if (!res.getPermissions().playerHas(player.getName(), "enderpearl", true)) { + if (!res.getPermissions().playerHas(player.getName(), Flags.enderpearl, true)) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "EnderPearl", areaname)); + Residence.msg(player, lm.Residence_FlagDeny, Flags.enderpearl.getName(), areaname); return; } } if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && Residence.getConfigManager().isBlockAnyTeleportation()) { - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) { + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.tp, true) && !player.hasPermission("residence.admin.tp")) { String areaname = res.getName(); event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("General.TeleportDeny", areaname)); + Residence.msg(player, lm.General_TeleportDeny, areaname); return; } } if (Residence.getNms().isChorusTeleport(event.getCause())) { - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), "chorustp", true) && !player.hasPermission("residence.admin.tp")) { + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.chorustp, true) && !player.hasPermission("residence.admin.tp")) { String areaname = res.getName(); event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "ChorusTp", areaname)); + Residence.msg(player, lm.Residence_FlagDeny, Flags.chorustp.getName(), areaname); return; } } @@ -1313,15 +1318,15 @@ public void onPlayerDeath(final PlayerDeathEvent event) { if (res == null) return; - if (res.getPermissions().has("keepinv", false)) + if (res.getPermissions().has(Flags.keepinv, false)) event.setKeepInventory(true); - if (res.getPermissions().has("keepexp", false)) { + if (res.getPermissions().has(Flags.keepexp, false)) { event.setKeepLevel(true); event.setDroppedExp(0); } - if (res.getPermissions().has("respawn", false) && Bukkit.getVersion().toString().contains("Spigot")) + if (res.getPermissions().has(Flags.respawn, false) && Bukkit.getVersion().toString().contains("Spigot")) Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { @@ -1367,7 +1372,7 @@ public void onPlayerMove(PlayerMoveEvent event) { if (!Residence.getTeleportDelayMap().isEmpty() && Residence.getConfigManager().getTeleportDelay() > 0 && Residence.getTeleportDelayMap().contains(player .getName())) { Residence.getTeleportDelayMap().remove(player.getName()); - player.sendMessage(Residence.getLM().getMessage("General.TeleportCanceled")); + Residence.msg(player, lm.General_TeleportCanceled); if (Residence.getConfigManager().isTeleportTitleMessage()) Residence.getAB().sendTitle(player, "", ""); } @@ -1398,7 +1403,7 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { } else { if (res != null && ResOld.getName().equals(res.getName())) { - f: if (player.isFlying() && res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( + f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { if (res != null && res.isOwner(player)) break f; @@ -1421,11 +1426,11 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { player.teleport(lastLoc); else player.teleport(res.getOutsideFreeLoc(loc, player)); - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Fly", orres.getName())); + Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); return; } } - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Fly", orres.getName())); + Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); player.teleport(location); player.setFlying(false); player.setAllowFlight(false); @@ -1456,10 +1461,10 @@ public void run() { ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); Residence.getServ().getPluginManager().callEvent(chgEvent); - if (ResOld.getPermissions().has("night", FlagCombo.OnlyTrue) || ResOld.getPermissions().has("day", FlagCombo.OnlyTrue)) + if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.resetPlayerTime(); - if (ResOld.getPermissions().has("sun", FlagCombo.OnlyTrue) || ResOld.getPermissions().has("rain", FlagCombo.OnlyTrue)) + if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); if (leave != null && !leave.equals("")) { @@ -1467,7 +1472,7 @@ public void run() { Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) .toString()); } else { - player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); } } currentRes.remove(pname); @@ -1498,15 +1503,15 @@ public void run() { } if (Residence.getConfigManager().useActionBar()) { - Residence.getAB().send(player, Residence.getLM().getMessage("Residence.MoveDeny", orres.getName())); + Residence.getAB().send(player, Residence.msg(lm.Residence_MoveDeny, orres.getName())); } else { - player.sendMessage(Residence.getLM().getMessage("Residence.MoveDeny", orres.getName())); + Residence.msg(player, lm.Residence_MoveDeny, orres.getName()); } return; } // Preventing fly in residence only when player has move permission - f: if (player.isFlying() && res.getPermissions().playerHas(pname, "nofly", false) && !Residence.isResAdminOn(player) && !player.hasPermission( + f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { if (res != null && res.isOwner(player)) break f; @@ -1530,24 +1535,24 @@ public void run() { else player.teleport(res.getOutsideFreeLoc(loc, player)); - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Fly", orres.getName())); + Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); return; } } - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "Fly", orres.getName())); + Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); player.teleport(location); player.setFlying(false); player.setAllowFlight(false); } - if (res.getPermissions().has("day", false)) + if (res.getPermissions().has(Flags.day, false)) player.setPlayerTime(6000L, false); - else if (res.getPermissions().has("night", false)) + else if (res.getPermissions().has(Flags.night, false)) player.setPlayerTime(14000L, false); - if (res.getPermissions().has("sun", false)) + if (res.getPermissions().has(Flags.sun, false)) player.setPlayerWeather(WeatherType.CLEAR); - else if (res.getPermissions().has("rain", false)) + else if (res.getPermissions().has(Flags.rain, false)) player.setPlayerWeather(WeatherType.DOWNFALL); } @@ -1562,10 +1567,10 @@ else if (res.getPermissions().has("rain", false)) String leave = ResOld.getLeaveMessage(); chgFrom = ResOld; - if (ResOld.getPermissions().has("night", false) || ResOld.getPermissions().has("day", false)) + if (ResOld.getPermissions().has(Flags.night, false) || ResOld.getPermissions().has(Flags.day, false)) player.resetPlayerTime(); - if (ResOld.getPermissions().has("sun", false) || ResOld.getPermissions().has("rain", false)) + if (ResOld.getPermissions().has(Flags.sun, false) || ResOld.getPermissions().has(Flags.rain, false)) player.resetPlayerWeather(); if (leave != null && !leave.equals("") && ResOld != res.getParent()) { @@ -1573,7 +1578,7 @@ else if (res.getPermissions().has("rain", false)) Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) .toString()); } else { - player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + Residence.msg(player,ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); } } } @@ -1590,17 +1595,17 @@ else if (res.getPermissions().has("rain", false)) if (Residence.getRentManager().isForRent(areaname) && !Residence.getRentManager().isRented(areaname)) { RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); if (rentable != null) - Residence.getAB().send(player, Residence.getLM().getMessage("Residence.CanBeRented", areaname, rentable.cost, rentable.days)); + Residence.getAB().send(player, Residence.msg(lm.Residence_CanBeRented, areaname, rentable.cost, rentable.days)); } else if (Residence.getTransactionManager().isForSale(areaname) && !res.isOwner(player)) { int sale = Residence.getTransactionManager().getSaleAmount(areaname); - Residence.getAB().send(player, Residence.getLM().getMessage("Residence.CanBeBought", areaname, sale)); + Residence.getAB().send(player, Residence.msg(lm.Residence_CanBeBought, areaname, sale)); } } else if (enterMessage != null && !enterMessage.equals("")) { if (Residence.getConfigManager().useActionBar()) { Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)) .toString()); } else { - player.sendMessage(ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); + Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); } } } @@ -1629,7 +1634,7 @@ public void doHeals() { res = Residence.getResidenceManager().getByName(resname); - if (!res.getPermissions().has("healing", false)) + if (!res.getPermissions().has(Flags.healing, false)) continue; Damageable damage = player; @@ -1652,7 +1657,7 @@ public void feed() { ClaimedResidence res = Residence.getResidenceManager().getByName(resname); - if (!res.getPermissions().has("feed", false)) + if (!res.getPermissions().has(Flags.feed, false)) continue; int food = player.getFoodLevel(); @@ -1675,7 +1680,7 @@ public void DespawnMobs() { ClaimedResidence res = null; res = Residence.getResidenceManager().getByName(resname); - if (!res.getPermissions().has("nomobs", false)) + if (!res.getPermissions().has(Flags.nomobs, false)) continue; List entities = Bukkit.getServer().getWorld(res.getWorld()).getEntities(); @@ -1711,20 +1716,20 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { public void tooglePlayerResidenceChat(Player player, String residence) { String pname = player.getName(); playerToggleChat.add(pname); - player.sendMessage(Residence.getLM().getMessage("Chat.ChatChannelChange", residence)); + Residence.msg(player, lm.Chat_ChatChannelChange, residence); } public void removePlayerResidenceChat(String pname) { playerToggleChat.remove(pname); Player player = Bukkit.getPlayer(pname); if (player != null) - player.sendMessage(Residence.getLM().getMessage("Chat.ChatChannelLeave")); + Residence.msg(player, lm.Chat_ChatChannelLeave); } public void removePlayerResidenceChat(Player player) { String pname = player.getName(); playerToggleChat.remove(pname); - player.sendMessage(Residence.getLM().getMessage("Chat.ChatChannelLeave")); + Residence.msg(player, lm.Chat_ChatChannelLeave); } public String getCurrentResidenceName(String player) { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 942c18c77..c19cb35eb 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -6,6 +6,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; @@ -339,34 +340,34 @@ public void printLimits(CommandSender player, OfflinePlayer target, boolean resa ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(target.getName()); PermissionGroup group = rPlayer.getGroup(); - Residence.msg(player, "General.Separator"); - Residence.msg(player, "Limits.PGroup", Residence.getPermissionManager().getPermissionsGroup(target.getName(), + Residence.msg(player, lm.General_Separator); + Residence.msg(player, lm.Limits_PGroup, Residence.getPermissionManager().getPermissionsGroup(target.getName(), target.isOnline() ? Bukkit.getPlayer(target.getName()).getName() : Residence.getConfigManager().getDefaultWorld())); - Residence.msg(player, "Limits.RGroup", group.getGroupName()); + Residence.msg(player, lm.Limits_RGroup, group.getGroupName()); if (target.isOnline() && resadmin) - Residence.msg(player, "Limits.Admin", Residence.getPermissionManager().isResidenceAdmin(player)); - Residence.msg(player, "Limits.CanCreate", group.canCreateResidences()); - Residence.msg(player, "Limits.MaxRes", rPlayer.getMaxRes()); - Residence.msg(player, "Limits.MaxEW", group.xmax); - Residence.msg(player, "Limits.MaxNS", group.zmax); - Residence.msg(player, "Limits.MaxUD", group.ymax); - Residence.msg(player, "Limits.MinMax", group.minHeight, group.maxHeight); - Residence.msg(player, "Limits.MaxSub", rPlayer.getMaxSubzones()); - Residence.msg(player, "Limits.MaxRents", rPlayer.getMaxRents() + (getMaxRentDays() != -1 ? Residence.getLM().getMessage("Limits.MaxRentDays", getMaxRentDays()) + Residence.msg(player, lm.Limits_Admin, Residence.getPermissionManager().isResidenceAdmin(player)); + Residence.msg(player, lm.Limits_CanCreate, group.canCreateResidences()); + Residence.msg(player, lm.Limits_MaxRes, rPlayer.getMaxRes()); + Residence.msg(player, lm.Limits_MaxEW, group.xmax); + Residence.msg(player, lm.Limits_MaxNS, group.zmax); + Residence.msg(player, lm.Limits_MaxUD, group.ymax); + Residence.msg(player, lm.Limits_MinMax, group.minHeight, group.maxHeight); + Residence.msg(player, lm.Limits_MaxSub, rPlayer.getMaxSubzones()); + Residence.msg(player, lm.Limits_MaxRents, rPlayer.getMaxRents() + (getMaxRentDays() != -1 ? Residence.msg(lm.Limits_MaxRentDays, getMaxRentDays()) : "")); - Residence.msg(player, "Limits.EnterLeave", group.messageperms); - Residence.msg(player, "Limits.NumberOwn", rPlayer.getResAmount()); + Residence.msg(player, lm.Limits_EnterLeave, group.messageperms); + Residence.msg(player, lm.Limits_NumberOwn, rPlayer.getResAmount()); if (Residence.getEconomyManager() != null) { - Residence.msg(player, "Limits.Cost", group.costperarea); - Residence.msg(player, "Limits.Sell", group.sellperarea); + Residence.msg(player, lm.Limits_Cost, group.costperarea); + Residence.msg(player, lm.Limits_Sell, group.sellperarea); } - Residence.msg(player, "Limits.Flag", group.flagPerms.listFlags()); + Residence.msg(player, lm.Limits_Flag, group.flagPerms.listFlags()); if (Residence.getConfigManager().useLeases()) { - Residence.msg(player, "Limits.Flag", group.maxLeaseTime); - Residence.msg(player, "Limits.Flag", group.leaseGiveTime); - Residence.msg(player, "Limits.Flag", group.renewcostperarea); + Residence.msg(player, lm.Limits_Flag, group.maxLeaseTime); + Residence.msg(player, lm.Limits_Flag, group.leaseGiveTime); + Residence.msg(player, lm.Limits_Flag, group.renewcostperarea); } - Residence.msg(player, "General.Separator"); + Residence.msg(player, lm.General_Separator); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e8953e549..29978c222 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.RandomLoc; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.ResidenceBank; import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.economy.rent.RentableLand; @@ -179,26 +180,26 @@ public int getSubzoneDeep(int deep) { public static boolean CheckAreaSize(Player player, CuboidArea area, boolean resadmin) { if (!resadmin && area.getSize() < Residence.getConfigManager().getMinimalResSize()) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Area.ToSmallTotal", Residence.getConfigManager().getMinimalResSize())); + Residence.msg(player, lm.Area_ToSmallTotal, Residence.getConfigManager().getMinimalResSize()); } return false; } if (!resadmin && area.getXSize() < Residence.getConfigManager().getMinimalResX()) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Area.ToSmallX", area.getXSize(), Residence.getConfigManager().getMinimalResX())); + Residence.msg(player, lm.Area_ToSmallX, area.getXSize(), Residence.getConfigManager().getMinimalResX()); } return false; } if (!resadmin && area.getYSize() < Residence.getConfigManager().getMinimalResY()) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Area.ToSmallY", area.getYSize(), Residence.getConfigManager().getMinimalResY())); + Residence.msg(player, lm.Area_ToSmallY, area.getYSize(), Residence.getConfigManager().getMinimalResY()); } return false; } if (!resadmin && area.getZSize() < Residence.getConfigManager().getMinimalResZ()) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Area.ToSmallZ", area.getZSize(), Residence.getConfigManager().getMinimalResZ())); + Residence.msg(player, lm.Area_ToSmallZ, area.getZSize(), Residence.getConfigManager().getMinimalResZ()); } return false; } @@ -216,7 +217,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin, boolean chargeMoney) { if (!Residence.validName(name)) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); + Residence.msg(player, lm.Invalid_NameCharacters); } return false; } @@ -226,7 +227,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa if (areas.containsKey(NName)) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Area.Exists")); + Residence.msg(player, lm.Area_Exists); } return false; } @@ -247,7 +248,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Area.DiffWorld")); + Residence.msg(player, lm.Area_DiffWorld); } return false; } @@ -255,7 +256,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa String collideResidence = Residence.getResidenceManager().checkAreaCollision(area, this); if (collideResidence != null) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Area.Collision", collideResidence)); + Residence.msg(player, lm.Area_Collision, collideResidence); CuboidArea oldArea = Residence.getResidenceManager().getByName(collideResidence).getAreaArray()[0]; if (oldArea != null) { Residence.getSelectionManager().NewMakeBorders(player, oldArea.lowPoints, oldArea.highPoints, true); @@ -272,7 +273,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa if (res != null && res != this) { if (res.checkCollision(area)) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Area.SubzoneCollision", sz)); + Residence.msg(player, lm.Area_SubzoneCollision, sz); } return false; } @@ -281,16 +282,16 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return false; } if (parent != null) { if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { - player.sendMessage(Residence.getLM().getMessage("Area.NotWithinParent")); + Residence.msg(player, lm.Area_NotWithinParent); return false; } if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { - player.sendMessage(Residence.getLM().getMessage("Residence.ParentNoPermission")); + Residence.msg(player, lm.Residence_ParentNoPermission); return false; } } @@ -300,24 +301,24 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa PermissionGroup group = rPlayer.getGroup(); if (!this.isSubzone() && !group.canCreateResidences() && !player.hasPermission("residence.create") || this.isSubzone() && !group.canCreateResidences() && !player.hasPermission("residence.create.subzone")) { - Residence.msg(player, "General.NoPermission"); + Residence.msg(player, lm.General_NoPermission); return false; } if (areas.size() >= group.getMaxPhysicalPerResidence()) { - player.sendMessage(Residence.getLM().getMessage("Area.MaxPhysical")); + Residence.msg(player, lm.Area_MaxPhysical); return false; } if (!group.inLimits(area)) { - player.sendMessage(Residence.getLM().getMessage("Area.SizeLimit")); + Residence.msg(player, lm.Area_SizeLimit); return false; } if (group.getMinHeight() > area.getLowLoc().getBlockY()) { - player.sendMessage(Residence.getLM().getMessage("Area.LowLimit", String.format("%d", group.getMinHeight()))); + Residence.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); return false; } if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { - player.sendMessage(Residence.getLM().getMessage("Area.HighLimit", String.format("%d", group.getMaxHeight()))); + Residence.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); return false; } if (chargeMoney && parent == null && Residence.getConfigManager().enableEconomy() && !resadmin) { @@ -346,19 +347,19 @@ public boolean replaceArea(CuboidArea neware, String name) { public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { if (!areas.containsKey(name)) { if (player != null) - player.sendMessage(Residence.getLM().getMessage("Area.NonExist")); + Residence.msg(player, lm.Area_NonExist); return false; } CuboidArea oldarea = areas.get(name); if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { if (player != null) - player.sendMessage(Residence.getLM().getMessage("Area.DiffWorld")); + Residence.msg(player, lm.Area_DiffWorld); return false; } if (parent == null) { String collideResidence = Residence.getResidenceManager().checkAreaCollision(newarea, this); if (collideResidence != null && player != null) { - player.sendMessage(Residence.getLM().getMessage("Area.Collision", collideResidence)); + Residence.msg(player, lm.Area_Collision, collideResidence); CuboidArea area = Residence.getResidenceManager().getByName(collideResidence).getAreaArray()[0]; Residence.getSelectionManager().NewMakeBorders(player, area.getLowLoc(), area.highPoints, true); return false; @@ -370,7 +371,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole if (res != null && res != this) { if (res.checkCollision(newarea)) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Area.SubzoneCollision", sz)); + Residence.msg(player, lm.Area_SubzoneCollision, sz); Residence.getSelectionManager().NewMakeBorders(player, res.getAreaArray()[0].lowPoints, res.getAreaArray()[0].highPoints, true); } return false; @@ -407,35 +408,35 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return false; } if (parent != null) { if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { - player.sendMessage(Residence.getLM().getMessage("Area.NotWithinParent")); + Residence.msg(player, lm.Area_NotWithinParent); return false; } if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { - player.sendMessage(Residence.getLM().getMessage("Residence.ParentNoPermission")); + Residence.msg(player, lm.Residence_ParentNoPermission); return false; } } ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (!group.canCreateResidences() && !player.hasPermission("residence.resize")) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return false; } if (!group.inLimits(newarea)) { - player.sendMessage(Residence.getLM().getMessage("Area.SizeLimit")); + Residence.msg(player, lm.Area_SizeLimit); return false; } if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { - player.sendMessage(Residence.getLM().getMessage("Area.LowLimit", String.format("%d", group.getMinHeight()))); + Residence.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); return false; } if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { - player.sendMessage(Residence.getLM().getMessage("Area.HighLimit", String.format("%d", group.getMaxHeight()))); + Residence.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); return false; } if (parent == null && Residence.getConfigManager().enableEconomy() && !resadmin) { @@ -458,7 +459,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole areas.put(name, newarea); Residence.getResidenceManager().calculateChunks(getName()); if (player != null) - player.sendMessage(Residence.getLM().getMessage("Area.Update")); + Residence.msg(player, lm.Area_Update); return true; } @@ -476,13 +477,13 @@ public boolean addSubzone(Player player, Location loc1, Location loc2, String na public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { if (!Residence.validName(name)) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); + Residence.msg(player, lm.Invalid_NameCharacters); } return false; } if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Subzone.SelectInside")); + Residence.msg(player, lm.Subzone_SelectInside); } return false; } @@ -492,19 +493,19 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l if (subzones.containsKey(name)) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Subzone.Exists", NName)); + Residence.msg(player, lm.Subzone_Exists, NName); } return false; } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { if (!this.perms.playerHas(player.getName(), "subzone", this.perms.playerHas(player.getName(), "admin", false))) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return false; } } if (this.getZoneDepth() >= Residence.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { - player.sendMessage(Residence.getLM().getMessage("Subzone.MaxDepth")); + Residence.msg(player, lm.Subzone_MaxDepth); return false; } } @@ -516,7 +517,7 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l ClaimedResidence res = resEntry.getValue(); if (res.checkCollision(newArea)) { if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Subzone.Collide", resEntry.getKey())); + Residence.msg(player, lm.Subzone_Collide, resEntry.getKey()); if (res.getAreaArray().length > 0) { CuboidArea oldArea = res.getAreaArray()[0]; Residence.getSelectionManager().NewMakeBorders(player, oldArea.lowPoints, oldArea.highPoints, true); @@ -559,13 +560,13 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l subzones.put(name, newres); if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Area.Create", name)); - player.sendMessage(Residence.getLM().getMessage("Subzone.Create", name)); + Residence.msg(player, lm.Area_Create, name); + Residence.msg(player, lm.Subzone_Create, name); } return true; } if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Subzone.CreateFail", name)); + Residence.msg(player, lm.Subzone_CreateFail, name); } return false; } @@ -700,12 +701,12 @@ public boolean removeSubzone(Player player, String name, boolean resadmin) { name = name.toLowerCase(); ClaimedResidence res = subzones.get(name); if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return false; } subzones.remove(name); if (player != null) { - player.sendMessage(Residence.getLM().getMessage("Subzone.Remove", name)); + Residence.msg(player, lm.Subzone_Remove, name); } return true; } @@ -790,11 +791,11 @@ public void setEnterLeaveMessage(Player player, String message, boolean enter, b ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (!group.canSetEnterLeaveMessages() && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("Residence.OwnerNoPermission")); + Residence.msg(player, lm.Residence_OwnerNoPermission); return; } if (!perms.hasResidencePermission(player, false) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return; } if (enter) { @@ -802,7 +803,7 @@ public void setEnterLeaveMessage(Player player, String message, boolean enter, b } else { this.setLeaveMessage(message); } - player.sendMessage(Residence.getLM().getMessage("Residence.MessageChange")); + Residence.msg(player, lm.Residence_MessageChange); } public Location getMiddleFreeLoc(Location insideLoc, Player player) { @@ -950,9 +951,9 @@ public List getSubzones() { public void printSubzoneList(Player player, int page) { ArrayList temp = new ArrayList<>(); for (Entry sz : subzones.entrySet()) { - temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + Residence.getLM().getMessage("General.Owner", sz.getValue().getOwner())); + temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + Residence.msg(lm.General_Owner, sz.getValue().getOwner())); } - InformationPager.printInfo(player, Residence.getLM().getMessage("General.Subzones"), temp, page); + InformationPager.printInfo(player, Residence.msg(lm.General_Subzones), temp, page); } public void printAreaList(Player player, int page) { @@ -960,7 +961,7 @@ public void printAreaList(Player player, int page) { for (String area : areas.keySet()) { temp.add(area); } - InformationPager.printInfo(player, Residence.getLM().getMessage("General.PhysicalAreas"), temp, page); + InformationPager.printInfo(player, Residence.msg(lm.General_PhysicalAreas), temp, page); } public void printAdvancedAreaList(Player player, int page) { @@ -973,7 +974,7 @@ public void printAdvancedAreaList(Player player, int page) { .getBlockX() + "," + h.getBlockY() + "," + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); } - InformationPager.printInfo(player, Residence.getLM().getMessage("General.PhysicalAreas"), temp, page); + InformationPager.printInfo(player, Residence.msg(lm.General_PhysicalAreas), temp, page); } public String[] getAreaList() { @@ -998,15 +999,15 @@ public int getZoneDepth() { public void setTpLoc(Player player, boolean resadmin) { if (!this.perms.hasResidencePermission(player, false) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return; } if (!this.containsLoc(player.getLocation())) { - player.sendMessage(Residence.getLM().getMessage("Residence.NotIn")); + Residence.msg(player, lm.Residence_NotIn); return; } tpLoc = player.getLocation(); - player.sendMessage(Residence.getLM().getMessage("Residence.SetTeleportLocation")); + Residence.msg(player, lm.Residence_SetTeleportLocation); } public int isSafeTp(Player player) { @@ -1045,19 +1046,19 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(reqPlayer); PermissionGroup group = rPlayer.getGroup(); if (!group.hasTpAccess()) { - reqPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportDeny")); + Residence.msg(reqPlayer, lm.General_TeleportDeny); return; } if (!reqPlayer.equals(targetPlayer)) { - reqPlayer.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(reqPlayer, lm.General_NoPermission); return; } if (!this.perms.playerHas(reqPlayer.getName(), "tp", true)) { - reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.TeleportNoFlag")); + Residence.msg(reqPlayer, lm.Residence_TeleportNoFlag); return; } if (!this.perms.playerHas(reqPlayer.getName(), "move", true)) { - reqPlayer.sendMessage(Residence.getLM().getMessage("Residence.MoveDeny", this.getName())); + Residence.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); return; } } @@ -1065,14 +1066,14 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r if (!Residence.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { int distance = isSafeTp(reqPlayer); if (distance > 6) { - reqPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportConfirm", distance)); + Residence.msg(reqPlayer, lm.General_TeleportConfirm, distance); Residence.getTeleportMap().put(reqPlayer.getName(), this); return; } } if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin) { - reqPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportStarted", this.getName(), Residence.getConfigManager().getTeleportDelay())); + Residence.msg(reqPlayer, lm.General_TeleportStarted, this.getName(), Residence.getConfigManager().getTeleportDelay()); if (Residence.getConfigManager().isTeleportTitleMessage()) TpTimer(reqPlayer, Residence.getConfigManager().getTeleportDelay()); Residence.getTeleportDelayMap().add(reqPlayer.getName()); @@ -1099,7 +1100,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } public void TpTimer(final Player player, final int t) { - Residence.getAB().sendTitle(player, Residence.getLM().getMessage("General.TeleportTitle"), Residence.getLM().getMessage("General.TeleportTitleTime", t)); + Residence.getAB().sendTitle(player, Residence.msg(lm.General_TeleportTitle), Residence.msg(lm.General_TeleportTitleTime, t)); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { @@ -1126,9 +1127,9 @@ else if (Residence.getTeleportDelayMap().contains(targetPlayer.getName())) Residence.getTeleportDelayMap().remove(targetPlayer.getName()); targetPlayer.teleport(targloc); if (near) - targetPlayer.sendMessage(Residence.getLM().getMessage("Residence.TeleportNear")); + Residence.msg(targetPlayer, lm.Residence_TeleportNear); else - targetPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportSuccess")); + Residence.msg(targetPlayer, lm.General_TeleportSuccess); return; } }, Residence.getConfigManager().getTeleportDelay() * 20L); @@ -1140,9 +1141,9 @@ private void performInstantTp(final Location targloc, final Player targetPlayer, if (!tpevent.isCancelled()) { targetPlayer.teleport(targloc); if (near) - targetPlayer.sendMessage(Residence.getLM().getMessage("Residence.TeleportNear")); + Residence.msg(targetPlayer, lm.Residence_TeleportNear); else - targetPlayer.sendMessage(Residence.getLM().getMessage("General.TeleportSuccess")); + Residence.msg(targetPlayer, lm.General_TeleportSuccess); } } @@ -1172,11 +1173,11 @@ public void removeArea(String id) { public void removeArea(Player player, String id, boolean resadmin) { if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { if (!areas.containsKey(id)) { - player.sendMessage(Residence.getLM().getMessage("Area.NonExist")); + Residence.msg(player, lm.Area_NonExist); return; } if (areas.size() == 1 && !Residence.getConfigManager().allowEmptyResidences()) { - player.sendMessage(Residence.getLM().getMessage("Area.RemoveLast")); + Residence.msg(player, lm.Area_RemoveLast); return; } @@ -1187,10 +1188,10 @@ public void removeArea(Player player, String id, boolean resadmin) { removeArea(id); if (player != null) - player.sendMessage(Residence.getLM().getMessage("Area.Remove")); + Residence.msg(player, lm.Area_Remove); } else { if (player != null) - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); } } @@ -1371,7 +1372,7 @@ public boolean renameSubzone(String oldName, String newName) { public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { if (!Residence.validName(newName)) { - player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); + Residence.msg(player, lm.Invalid_NameCharacters); return false; } if (oldName == null) @@ -1385,23 +1386,23 @@ public boolean renameSubzone(Player player, String oldName, String newName, bool ClaimedResidence res = subzones.get(oldName); if (res == null) { if (player != null) - player.sendMessage(Residence.getLM().getMessage("Invalid.Subzone")); + Residence.msg(player, lm.Invalid_Subzone); return false; } if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return false; } if (subzones.containsKey(newName)) { if (player != null) - player.sendMessage(Residence.getLM().getMessage("Subzone.Exists", newName)); + Residence.msg(player, lm.Subzone_Exists, newName); return false; } res.setName(newN); subzones.put(newName, res); subzones.remove(oldName); if (player != null) - player.sendMessage(Residence.getLM().getMessage("Subzone.Rename", oldName, newName)); + Residence.msg(player, lm.Subzone_Rename, oldName, newName); return true; } @@ -1411,28 +1412,28 @@ public boolean renameArea(String oldName, String newName) { public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { if (!Residence.validName(newName)) { - player.sendMessage(Residence.getLM().getMessage("Invalid.NameCharacters")); + Residence.msg(player, lm.Invalid_NameCharacters); return false; } if (player == null || perms.hasResidencePermission(player, true) || resadmin) { if (areas.containsKey(newName)) { if (player != null) - player.sendMessage(Residence.getLM().getMessage("Area.Exists")); + Residence.msg(player, lm.Area_Exists); return false; } CuboidArea area = areas.get(oldName); if (area == null) { if (player != null) - player.sendMessage(Residence.getLM().getMessage("Area.InvalidName")); + Residence.msg(player, lm.Area_InvalidName); return false; } areas.put(newName, area); areas.remove(oldName); if (player != null) - player.sendMessage(Residence.getLM().getMessage("Area.Rename", oldName, newName)); + Residence.msg(player, lm.Area_Rename, oldName, newName); return true; } - player.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); return false; } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 08780d292..e4e3e8377 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -21,6 +21,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; public class FlagPermissions { @@ -42,6 +43,10 @@ public static enum FlagState { TRUE, FALSE, NEITHER, INVALID } + public static void addMaterialToUseFlag(Material mat, Flags flag) { + addMaterialToUseFlag(mat, flag.name()); + } + public static void addMaterialToUseFlag(Material mat, String flag) { matUseFlagList.put(mat, flag); } @@ -55,7 +60,7 @@ public static EnumMap getMaterialUseFlagList() { } public static void addFlag(Flags flag) { - addFlag(flag.toString()); + addFlag(flag.name()); } public static void addFlag(String flag) { @@ -68,6 +73,10 @@ public static void addFlag(String flag) { } } + public static void addPlayerOrGroupOnlyFlag(Flags flag) { + addPlayerOrGroupOnlyFlag(flag.name()); + } + public static void addPlayerOrGroupOnlyFlag(String flag) { flag = flag.toLowerCase(); if (!validPlayerFlags.contains(flag)) { @@ -78,6 +87,10 @@ public static void addPlayerOrGroupOnlyFlag(String flag) { } } + public static void addResidenceOnlyFlag(Flags flag) { + addResidenceOnlyFlag(flag.name()); + } + public static void addResidenceOnlyFlag(String flag) { flag = flag.toLowerCase(); if (!validAreaFlags.contains(flag)) { @@ -119,141 +132,22 @@ public static void initValidFlags() { validPlayerFlags.clear(); validFlags.clear(); validFlagGroups.clear(); - addFlag(Flags.egg); - addFlag(Flags.note); - addFlag(Flags.pressure); - addFlag("cake"); - addFlag("lever"); - addFlag("door"); - addFlag("button"); - addFlag("table"); - addFlag("brew"); - addFlag("bed"); - addFlag("commandblock"); - addFlag("anvil"); - addFlag("flowerpot"); - addFlag("enchant"); - addFlag("diode"); - addFlag("use"); - addFlag("move"); - addFlag("build"); - addFlag("tp"); - addFlag("ignite"); - addFlag("container"); - addFlag("subzone"); - addFlag("destroy"); - addFlag("place"); - addFlag("bucket"); - addFlag("bucketfill"); - addFlag("bucketempty"); - addFlag("bank"); - addFlag("beacon"); - - /* New flags */ - addFlag("animalkilling"); - addFlag("mobkilling"); - addFlag("vehicledestroy"); - addFlag("trade"); - - addFlag("leash"); - addFlag("shear"); - addFlag("nofly"); - - addFlag("command"); - - addFlag("chat"); - addFlag("dye"); - - addFlag("enderpearl"); - addFlag("chorustp"); - - // Horse riding - addFlag("riding"); - - addFlag("hook"); - - addResidenceOnlyFlag("trample"); - addResidenceOnlyFlag("pvp"); - addResidenceOnlyFlag("fireball"); - addResidenceOnlyFlag("explode"); - addResidenceOnlyFlag("damage"); - addResidenceOnlyFlag("monsters"); - addResidenceOnlyFlag("cmonsters"); - addResidenceOnlyFlag("smonsters"); - addResidenceOnlyFlag("nmonsters"); - addResidenceOnlyFlag("firespread"); - addResidenceOnlyFlag("burn"); - addResidenceOnlyFlag("tnt"); - addResidenceOnlyFlag("creeper"); - addResidenceOnlyFlag("flow"); - addResidenceOnlyFlag("healing"); - addResidenceOnlyFlag("feed"); - addResidenceOnlyFlag("animals"); - addResidenceOnlyFlag("canimals"); - addResidenceOnlyFlag("sanimals"); - addResidenceOnlyFlag("nanimals"); - addResidenceOnlyFlag("lavaflow"); - addResidenceOnlyFlag("waterflow"); - addResidenceOnlyFlag("physics"); - addResidenceOnlyFlag("piston"); - addResidenceOnlyFlag("spread"); - addResidenceOnlyFlag("hidden"); - - addResidenceOnlyFlag("day"); - addResidenceOnlyFlag("night"); - - // prevents from mobs entering residence - addResidenceOnlyFlag("nomobs"); - - // Players will suffer damage even if another plugin tries to block it - addResidenceOnlyFlag("overridepvp"); - - // Players will keep hes inventory on death - addResidenceOnlyFlag("keepinv"); - - // Players will keep hes exp on death - addResidenceOnlyFlag("keepexp"); - - // Players will keep hes exp on death - addResidenceOnlyFlag("mobitemdrop"); - - // Players will keep hes exp on death - addResidenceOnlyFlag("mobexpdrop"); - - // Players will not lose item durability - addResidenceOnlyFlag("nodurability"); - - // Special flag for making residence as shop - addResidenceOnlyFlag("shop"); - - // Prevent ender dragon block grief - addResidenceOnlyFlag("dragongrief"); - - // Prevent snowman snow trail - addResidenceOnlyFlag("snowtrail"); - - // Auto respawn player - addResidenceOnlyFlag("respawn"); - - addResidenceOnlyFlag("iceform"); - addResidenceOnlyFlag("icemelt"); - - addResidenceOnlyFlag("snowball"); - addResidenceOnlyFlag("pistonprotection"); - - addResidenceOnlyFlag("sun"); - addResidenceOnlyFlag("rain"); - - addResidenceOnlyFlag("dryup"); - - addResidenceOnlyFlag("backup"); - - addResidenceOnlyFlag("hotfloor"); - - addResidenceOnlyFlag("coords"); - - addPlayerOrGroupOnlyFlag("admin"); + for (Flags flag : Flags.values()) { + switch (flag.getFlagMode()) { + case Both: + addFlag(flag); + break; + case Player: + addPlayerOrGroupOnlyFlag(flag); + break; + case Residence: + addResidenceOnlyFlag(flag); + break; + default: + break; + } + } Residence.getConfigManager().UpdateGroupedFlagsFile(); @@ -280,57 +174,65 @@ public static void initValidFlags() { // addFlagToFlagGroup("fire", "ignite"); // addFlagToFlagGroup("fire", "firespread"); - addMaterialToUseFlag(Material.DIODE, "diode"); - addMaterialToUseFlag(Material.DIODE_BLOCK_OFF, "diode"); - addMaterialToUseFlag(Material.DIODE_BLOCK_ON, "diode"); - addMaterialToUseFlag(Material.REDSTONE_COMPARATOR, "diode"); - addMaterialToUseFlag(Material.REDSTONE_COMPARATOR_OFF, "diode"); - addMaterialToUseFlag(Material.REDSTONE_COMPARATOR_ON, "diode"); - addMaterialToUseFlag(Material.DAYLIGHT_DETECTOR, "diode"); - addMaterialToUseFlag(Material.WORKBENCH, "table"); - addMaterialToUseFlag(Material.WOODEN_DOOR, "door"); + addMaterialToUseFlag(Material.DIODE, Flags.diode); + addMaterialToUseFlag(Material.DIODE_BLOCK_OFF, Flags.diode); + addMaterialToUseFlag(Material.DIODE_BLOCK_ON, Flags.diode); + addMaterialToUseFlag(Material.REDSTONE_COMPARATOR, Flags.diode); + addMaterialToUseFlag(Material.REDSTONE_COMPARATOR_OFF, Flags.diode); + addMaterialToUseFlag(Material.REDSTONE_COMPARATOR_ON, Flags.diode); + addMaterialToUseFlag(Material.DAYLIGHT_DETECTOR, Flags.diode); + addMaterialToUseFlag(Material.WORKBENCH, Flags.table); + addMaterialToUseFlag(Material.WOODEN_DOOR, Flags.door); Residence.getNms().addDefaultFlags(matUseFlagList); - addMaterialToUseFlag(Material.FENCE_GATE, "door"); - addMaterialToUseFlag(Material.NETHER_FENCE, "door"); - addMaterialToUseFlag(Material.TRAP_DOOR, "door"); - addMaterialToUseFlag(Material.ENCHANTMENT_TABLE, "enchant"); - addMaterialToUseFlag(Material.STONE_BUTTON, "button"); - addMaterialToUseFlag(Material.LEVER, "lever"); - addMaterialToUseFlag(Material.BED_BLOCK, "bed"); - addMaterialToUseFlag(Material.BREWING_STAND, "brew"); - addMaterialToUseFlag(Material.CAKE, "cake"); - addMaterialToUseFlag(Material.NOTE_BLOCK, "note"); - addMaterialToUseFlag(Material.DRAGON_EGG, "egg"); - addMaterialToUseFlag(Material.COMMAND, "commandblock"); - addMaterialToUseFlag(Material.WOOD_BUTTON, "button"); - addMaterialToUseFlag(Material.ANVIL, "anvil"); - addMaterialToUseFlag(Material.FLOWER_POT, "flowerpot"); - addMaterialToUseFlag(Material.BEACON, "beacon"); - addMaterialToUseFlag(Material.JUKEBOX, "container"); - addMaterialToUseFlag(Material.CHEST, "container"); - addMaterialToUseFlag(Material.TRAPPED_CHEST, "container"); - addMaterialToUseFlag(Material.HOPPER, "container"); - addMaterialToUseFlag(Material.DROPPER, "container"); - addMaterialToUseFlag(Material.FURNACE, "container"); - addMaterialToUseFlag(Material.BURNING_FURNACE, "container"); - addMaterialToUseFlag(Material.DISPENSER, "container"); - addMaterialToUseFlag(Material.CAKE_BLOCK, "cake"); + addMaterialToUseFlag(Material.FENCE_GATE, Flags.door); + addMaterialToUseFlag(Material.NETHER_FENCE, Flags.door); + addMaterialToUseFlag(Material.TRAP_DOOR, Flags.door); + addMaterialToUseFlag(Material.ENCHANTMENT_TABLE, Flags.enchant); + addMaterialToUseFlag(Material.STONE_BUTTON, Flags.button); + addMaterialToUseFlag(Material.LEVER, Flags.lever); + addMaterialToUseFlag(Material.BED_BLOCK, Flags.bed); + addMaterialToUseFlag(Material.BREWING_STAND, Flags.brew); + addMaterialToUseFlag(Material.CAKE, Flags.cake); + addMaterialToUseFlag(Material.NOTE_BLOCK, Flags.note); + addMaterialToUseFlag(Material.DRAGON_EGG, Flags.egg); + addMaterialToUseFlag(Material.COMMAND, Flags.commandblock); + addMaterialToUseFlag(Material.WOOD_BUTTON, Flags.button); + addMaterialToUseFlag(Material.ANVIL, Flags.anvil); + addMaterialToUseFlag(Material.FLOWER_POT, Flags.flowerpot); + addMaterialToUseFlag(Material.BEACON, Flags.beacon); + addMaterialToUseFlag(Material.JUKEBOX, Flags.container); + addMaterialToUseFlag(Material.CHEST, Flags.container); + addMaterialToUseFlag(Material.TRAPPED_CHEST, Flags.container); + addMaterialToUseFlag(Material.HOPPER, Flags.container); + addMaterialToUseFlag(Material.DROPPER, Flags.container); + addMaterialToUseFlag(Material.FURNACE, Flags.container); + addMaterialToUseFlag(Material.BURNING_FURNACE, Flags.container); + addMaterialToUseFlag(Material.DISPENSER, Flags.container); + addMaterialToUseFlag(Material.CAKE_BLOCK, Flags.cake); } public static FlagPermissions parseFromConfigNode(String name, ConfigurationSection node) { FlagPermissions list = new FlagPermissions(); + + if (!node.isConfigurationSection(name)) + return list; + Set keys = node.getConfigurationSection(name).getKeys(false); - if (keys != null) { - for (String key : keys) { - boolean state = node.getBoolean(name + "." + key, false); - key = key.toLowerCase(); - if (state) { - list.setFlag(key, FlagState.TRUE); - } else { - list.setFlag(key, FlagState.FALSE); - } + if (keys == null) + return list; + + for (String key : keys) { + boolean state = node.getBoolean(name + "." + key, false); + key = key.toLowerCase(); + Flags f = Flags.getFlag(key); + if (f != null) + f.setEnabled(state); + if (state) { + list.setFlag(key, FlagState.TRUE); + } else { + list.setFlag(key, FlagState.FALSE); } } return list; @@ -509,6 +411,10 @@ public static FlagState stringToFlagState(String flagstate) { } } + public boolean playerHas(String player, String world, Flags flag, boolean def) { + return playerHas(player, world, flag.getName(), def); + } + public boolean playerHas(String player, String world, String flag, boolean def) { String group = Residence.getPermissionManager().getGroupNameByPlayer(player, world); return this.playerCheck(player, flag, this.groupCheck(group, flag, this.has(flag, def))); @@ -544,6 +450,10 @@ private boolean groupCheck(String group, String flag, boolean def) { return def; } + public boolean has(Flags flag, boolean def) { + return has(flag.getName(), def); + } + public boolean has(String flag, boolean def) { if (cuboidFlags.containsKey(flag)) { return cuboidFlags.get(flag); @@ -1060,10 +970,10 @@ public void clearFlags() { } public void printFlags(Player player) { - player.sendMessage(Residence.getLM().getMessage("General.Flags", listFlags())); - player.sendMessage(Residence.getLM().getMessage("General.YourFlags", listPlayerFlags(player.getName()))); - player.sendMessage(Residence.getLM().getMessage("General.GroupFlags", listGroupFlags())); - player.sendMessage(Residence.getLM().getMessage("General.OthersFlags", listOtherPlayersFlags(player.getName()))); + Residence.msg(player, lm.General_ResidenceFlags, listFlags()); + Residence.msg(player, lm.General_PlayersFlags, listPlayerFlags(player.getName())); + Residence.msg(player, lm.General_GroupFlags, listGroupFlags()); + Residence.msg(player, lm.General_OthersFlags, listOtherPlayersFlags(player.getName())); } public void copyUserPermissions(String fromUser, String toUser) { diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index 7db499313..2fbba6c85 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -2,6 +2,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.EconomyInterface; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; @@ -50,16 +51,16 @@ public void setExpireTime(Player player, String area, int days) { if (manager.getByName(area) != null) { leaseExpireTime.put(area, daysToMs(days) + System.currentTimeMillis()); if (player != null) - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenew", getExpireTime(area))); + Residence.msg(player, lm.Economy_LeaseRenew, getExpireTime(area)); } else { if (player != null) - player.sendMessage(Residence.getLM().getMessage("Invalid.Area")); + Residence.msg(player, lm.Invalid_Area); } } public void renewArea(String area, Player player) { if (!leaseExpires(area)) { - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseNotExpire")); + Residence.msg(player, lm.Economy_LeaseNotExpire); return; } ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); @@ -78,17 +79,17 @@ public void renewArea(String area, Player player) { if (econ.canAfford(player.getName(), amount)/*account.hasEnough(amount)*/) { econ.subtract(player.getName(), amount); econ.add("Lease Money", amount); - player.sendMessage(Residence.getLM().getMessage("Economy.MoneyCharged", String.format("%d", amount), econ.getName())); + Residence.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); } else { - player.sendMessage(Residence.getLM().getMessage("Economy.NotEnoughMoney")); + Residence.msg(player, lm.Economy_NotEnoughMoney); return; } } } if (rem + add > max) { setExpireTime(player, area, max); - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenewMax")); - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenew", getExpireTime(area))); + Residence.msg(player, lm.Economy_LeaseRenewMax); + Residence.msg(player, lm.Economy_LeaseRenew, getExpireTime(area)); return; } Long get = leaseExpireTime.get(area); @@ -97,7 +98,7 @@ public void renewArea(String area, Player player) { leaseExpireTime.put(area, get); } else leaseExpireTime.put(area, daysToMs(add)); - player.sendMessage(Residence.getLM().getMessage("Economy.LeaseRenew", getExpireTime(area))); + Residence.msg(player, lm.Economy_LeaseRenew, getExpireTime(area)); } public int getRenewCost(ClaimedResidence res) { diff --git a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java index 52bed29de..1a619e688 100644 --- a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java @@ -3,6 +3,8 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; + import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; @@ -36,36 +38,36 @@ public void makeList(Player player, String listname) { if (perms == null) { perms = new FlagPermissions(); get.put(listname, perms); - player.sendMessage(Residence.getLM().getMessage("General.ListCreate", listname)); + Residence.msg(player, lm.General_ListCreate, listname); } else { - player.sendMessage(Residence.getLM().getMessage("General.ListExists")); + Residence.msg(player,lm.General_ListExists); } } public void removeList(Player player, String listname) { Map get = lists.get(player.getName()); if (get == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.List")); + Residence.msg(player, lm.Invalid_List); return; } FlagPermissions list = get.get(listname); if (list == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.List")); + Residence.msg(player, lm.Invalid_List); return; } get.remove(listname); - player.sendMessage(Residence.getLM().getMessage("General.ListRemoved")); + Residence.msg(player, lm.General_ListRemoved); } public void applyListToResidence(Player player, String listname, String areaname, boolean resadmin) { FlagPermissions list = this.getList(player.getName(), listname); if (list == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.List")); + Residence.msg(player, lm.Invalid_List); return; } ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); if (res == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.Residence")); + Residence.msg(player, lm.Invalid_Residence); return; } res.getPermissions().applyTemplate(player, list, resadmin); @@ -74,11 +76,11 @@ public void applyListToResidence(Player player, String listname, String areaname public void printList(Player player, String listname) { FlagPermissions list = this.getList(player.getName(), listname); if (list == null) { - player.sendMessage(Residence.getLM().getMessage("Invalid.List")); + Residence.msg(player, lm.Invalid_List); return; } player.sendMessage(ChatColor.LIGHT_PURPLE + "------Permission Template------"); - player.sendMessage(Residence.getLM().getMessage("General.Name", listname)); + Residence.msg(player, lm.General_Name, listname); list.printFlags(player); } @@ -120,7 +122,7 @@ public static PermissionListManager load(Map root) { public void printLists(Player player) { StringBuilder sbuild = new StringBuilder(); Map get = lists.get(player.getName()); - sbuild.append(Residence.getLM().getMessage("General.Lists")); + sbuild.append(Residence.msg(lm.General_Lists)); if (get != null) { for (Entry thislist : get.entrySet()) { sbuild.append(thislist.getKey()).append(" "); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index e9a8d2799..d6c56ca48 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidencePlayerInterface; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; public class PlayerManager implements ResidencePlayerInterface { @@ -79,8 +80,8 @@ public ArrayList getResidenceList(String player, boolean showhidden, boo if (onlyHidden && !hidden) continue; - temp.add(Residence.getLM().getMessage("Residence.List", "", one.getName(), one.getWorld()) + - (hidden ? Residence.getLM().getMessage("Residence.Hidden") : "")); + temp.add(Residence.msg(lm.Residence_List, "", one.getName(), one.getWorld()) + + (hidden ? Residence.msg(lm.Residence_Hidden) : "")); } Collections.sort(temp, String.CASE_INSENSITIVE_ORDER); return temp; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index da2d501dc..fa6994680 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -23,6 +23,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.economy.rent.RentedLand; @@ -189,11 +190,11 @@ public boolean addResidence(Player player, String name, Location loc1, Location public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { if (!Residence.validName(name)) { - Residence.msg(player, "Invalid.NameCharacters"); + Residence.msg(player, lm.Invalid_NameCharacters); return false; } if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { - Residence.msg(player, "Select.Points"); + Residence.msg(player, lm.Select_Points); return false; } @@ -203,13 +204,13 @@ public boolean addResidence(Player player, String owner, String name, Location l // PermissionGroup group = Residence.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); boolean createpermission = group.canCreateResidences() && (player == null ? true : player.hasPermission("residence.create")); if (!createpermission && !resadmin) { - Residence.msg(player, "General.NoPermission"); + Residence.msg(player, lm.General_NoPermission); return false; } if (player != null) { if (!hasMaxZones(player.getName(), rPlayer.getMaxRes()) && !resadmin) { - Residence.msg(player, "Residence.TooMany"); + Residence.msg(player, lm.Residence_TooMany); return false; } } @@ -221,7 +222,7 @@ public boolean addResidence(Player player, String owner, String name, Location l newRes.setName(name); if (residences.containsKey(name.toLowerCase())) { - Residence.msg(player, "Residence.AlreadyExists", residences.get(name.toLowerCase()).getResidenceName()); + Residence.msg(player, lm.Residence_AlreadyExists, residences.get(name.toLowerCase()).getResidenceName()); return false; } @@ -250,8 +251,8 @@ public boolean addResidence(Player player, String owner, String name, Location l if (player != null) { Residence.getSelectionManager().NewMakeBorders(player, newArea.getHighLoc(), newArea.getLowLoc(), false); Residence.getAutoSelectionManager().getList().remove(player.getName().toLowerCase()); - Residence.msg(player, "Area.Create", "main"); - Residence.msg(player, "Residence.Create", name); + Residence.msg(player, lm.Area_Create, "main"); + Residence.msg(player, lm.Residence_Create, name); } if (Residence.getConfigManager().useLeases()) { if (player != null) { @@ -376,8 +377,8 @@ private void getResidenceList(String targetplayer, boolean showhidden, boolean s if ((showhidden) || (!showhidden && !hidden)) { if (targetplayer == null || res.getPermissions().getOwner().equals(targetplayer)) { if (formattedOutput) { - list.add(Residence.getLM().getMessage("Residence.List", parentzone, resname, res.getWorld()) + - (hidden ? Residence.getLM().getMessage("Residence.Hidden") : "")); + list.add(Residence.msg(lm.Residence_List, parentzone, resname, res.getWorld()) + + (hidden ? Residence.msg(lm.Residence_Hidden) : "")); } else { list.add(parentzone + resname); } @@ -418,7 +419,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { ClaimedResidence res = this.getByName(name); if (res == null) { - Residence.msg(player, "Invalid.Residence"); + Residence.msg(player, lm.Invalid_Residence); return; } @@ -426,7 +427,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { if (player != null && !resadmin) { if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - Residence.msg(player, "General.NoPermission"); + Residence.msg(player, lm.General_NoPermission); return; } } @@ -473,7 +474,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { } } - Residence.msg(player, "Residence.Remove", name); + Residence.msg(player, lm.Residence_Remove, name); } else { String[] split = name.split("\\."); @@ -530,46 +531,45 @@ public void printAreaInfo(String areaname, CommandSender sender) { public void printAreaInfo(String areaname, CommandSender sender, boolean resadmin) { ClaimedResidence res = this.getByName(areaname); if (res == null) { - Residence.msg(sender, "Invalid.Residence"); + Residence.msg(sender, lm.Invalid_Residence); return; } areaname = res.getName(); - Residence.msg(sender, "General.Separator"); + Residence.msg(sender, lm.General_Separator); ResidencePermissions perms = res.getPermissions(); - Language lm = Residence.getLM(); - String resNameOwner = "&e" + lm.getMessage("Residence.Line", areaname); - resNameOwner += lm.getMessage("General.Owner", perms.getOwner()); + String resNameOwner = "&e" + Residence.msg(lm.Residence_Line, areaname); + resNameOwner += Residence.msg(lm.General_Owner, perms.getOwner()); if (Residence.getConfigManager().enableEconomy()) { if (res.isOwner(sender.getName()) || !(sender instanceof Player) || resadmin) - resNameOwner += lm.getMessage("Bank.Name", res.getBank().getStoredMoney()); + resNameOwner += Residence.msg(lm.Bank_Name, res.getBank().getStoredMoney()); } resNameOwner = ChatColor.translateAlternateColorCodes('&', resNameOwner); - String worldInfo = lm.getMessage("General.World", perms.getWorld()); + String worldInfo = Residence.msg(lm.General_World, perms.getWorld()); if (res.getPermissions().has("hidden", FlagCombo.FalseOrNone) && res.getPermissions().has("coords", FlagCombo.TrueOrNone) || resadmin) { worldInfo += "&6 (&3"; CuboidArea area = res.getAreaArray()[0]; - worldInfo += lm.getMessage("General.CoordsTop", area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); + worldInfo += Residence.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); worldInfo += "&6; &3"; - worldInfo += lm.getMessage("General.CoordsBottom", area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + worldInfo += Residence.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); worldInfo += "&6)"; worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); } - worldInfo += "\n" + Residence.getLM().getMessage("General.CreatedOn", GetTime.getTime(res.createTime)); + worldInfo += "\n" + Residence.msg(lm.General_CreatedOn, GetTime.getTime(res.createTime)); String ResFlagList = perms.listFlags(5); if (!(sender instanceof Player)) ResFlagList = perms.listFlags(); - String ResFlagMsg = lm.getMessage("General.ResidenceFlags", ResFlagList); + String ResFlagMsg = Residence.msg(lm.General_ResidenceFlags, ResFlagList); if (perms.getFlags().size() > 2 && sender instanceof Player) { - ResFlagMsg = lm.getMessage("General.ResidenceFlags", perms.listFlags(5, 3)) + "..."; + ResFlagMsg = Residence.msg(lm.General_ResidenceFlags, perms.listFlags(5, 3)) + "..."; } if (sender instanceof Player) { @@ -585,18 +585,18 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi } if (!Residence.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) - sender.sendMessage(lm.getMessage("General.PlayersFlags", perms.listPlayersFlags())); + sender.sendMessage(Residence.msg(lm.General_PlayersFlags, perms.listPlayersFlags())); else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Player) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + perms.listPlayersFlagsRaw(sender.getName(), lm.getMessage( + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + perms.listPlayersFlagsRaw(sender.getName(), Residence.msg( "General.PlayersFlags"))); } String groupFlags = perms.listGroupFlags(); if (groupFlags.length() > 0) - Residence.msg(sender, "General.GroupFlags", groupFlags); + Residence.msg(sender, lm.General_GroupFlags, groupFlags); String msg = ""; - msg += lm.getMessage("General.TotalResSize", res.getTotalSize(), res.getXZSize()); + msg += Residence.msg(lm.General_TotalResSize, res.getTotalSize(), res.getXZSize()); Residence.msg(sender, ChatColor.translateAlternateColorCodes('&', msg)); @@ -604,49 +604,49 @@ else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Play ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(res.getOwner()); PermissionGroup group = rPlayer.getGroup(res.getWorld()); - Residence.msg(sender, "General.TotalWorth", (int) ((res.getTotalSize() * group.getCostPerBlock()) + Residence.msg(sender, lm.General_TotalWorth, (int) ((res.getTotalSize() * group.getCostPerBlock()) * 100) / 100.0, (int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0); } if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { String time = Residence.getLeaseManager().getExpireTime(areaname); if (time != null) - Residence.msg(sender, "Economy.LeaseExpire", time); + Residence.msg(sender, lm.Economy_LeaseExpire, time); } if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isForRent(areaname) && !Residence.getRentManager().isRented(areaname)) { - String forRentMsg = lm.getMessage("Rent.isForRent"); + String forRentMsg = Residence.msg(lm.Rent_isForRent); RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); StringBuilder rentableString = new StringBuilder(); if (rentable != null) { - rentableString.append(Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days) + "\n"); - rentableString.append(Residence.getLM().getMessage("Rentable.AllowRenewing", rentable.AllowRenewing) + "\n"); - rentableString.append(Residence.getLM().getMessage("Rentable.StayInMarket", rentable.StayInMarket) + "\n"); - rentableString.append(Residence.getLM().getMessage("Rentable.AllowAutoPay", rentable.AllowAutoPay)); + rentableString.append(Residence.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); + rentableString.append(Residence.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); + rentableString.append(Residence.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); + rentableString.append(Residence.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); } if (sender instanceof Player) Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, forRentMsg, rentableString.toString())); else Residence.msg(sender, forRentMsg); } else if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { - String RentedMsg = lm.getMessage("Residence.RentedBy", Residence.getRentManager().getRentingPlayer(areaname)); + String RentedMsg = Residence.msg(lm.Residence_RentedBy, Residence.getRentManager().getRentingPlayer(areaname)); RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); RentedLand rented = Residence.getRentManager().getRentedLand(areaname); StringBuilder rentableString = new StringBuilder(); if (rented != null) { - rentableString.append(Residence.getLM().getMessage("Rent.Expire", GetTime.getTime(rented.endTime)) + "\n"); + rentableString.append(Residence.msg(lm.Rent_Expire, GetTime.getTime(rented.endTime)) + "\n"); if (rented.player.equals(sender.getName()) || resadmin || res.isOwner(sender.getName())) - rentableString.append((rented.AutoPay ? Residence.getLM().getMessage("Rent.AutoPayTurnedOn") : Residence.getLM().getMessage("Rent.AutoPayTurnedOff")) + rentableString.append((rented.AutoPay ? Residence.msg(lm.Rent_AutoPayTurnedOn) : Residence.msg(lm.Rent_AutoPayTurnedOff)) + "\n"); } if (rentable != null) { - rentableString.append(Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days) + "\n"); - rentableString.append(Residence.getLM().getMessage("Rentable.AllowRenewing", rentable.AllowRenewing) + "\n"); - rentableString.append(Residence.getLM().getMessage("Rentable.StayInMarket", rentable.StayInMarket) + "\n"); - rentableString.append(Residence.getLM().getMessage("Rentable.AllowAutoPay", rentable.AllowAutoPay)); + rentableString.append(Residence.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); + rentableString.append(Residence.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); + rentableString.append(Residence.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); + rentableString.append(Residence.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); } if (sender instanceof Player) @@ -655,11 +655,11 @@ else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Play Residence.msg(sender, RentedMsg); } else if (Residence.getTransactionManager().isForSale(areaname)) { int amount = Residence.getTransactionManager().getSaleAmount(areaname); - String SellMsg = lm.getMessage("Economy.LandForSale") + " " + amount; + String SellMsg = Residence.msg(lm.Economy_LandForSale) + " " + amount; Residence.msg(sender, SellMsg); } - Residence.msg(sender, "General.Separator"); + Residence.msg(sender, lm.General_Separator); } public String convertToRaw(String preText, String text, String hover) { @@ -684,12 +684,12 @@ public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, ClaimedResidence reciever = this.getByName(targetArea); ClaimedResidence source = this.getByName(sourceArea); if (source == null || reciever == null) { - Residence.msg(reqPlayer, "Invalid.Residence"); + Residence.msg(reqPlayer, lm.Invalid_Residence); return; } if (!resadmin) { if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { - Residence.msg(reqPlayer, "General.NoPermission"); + Residence.msg(reqPlayer, lm.General_NoPermission); return; } } @@ -837,17 +837,17 @@ public boolean renameResidence(String oldName, String newName) { public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { if (!player.hasPermission("residence.rename")) { - Residence.msg(player, "General.NoPermission"); + Residence.msg(player, lm.General_NoPermission); return false; } if (!Residence.validName(newName)) { - Residence.msg(player, "Invalid.NameCharacters"); + Residence.msg(player, lm.Invalid_NameCharacters); return false; } ClaimedResidence res = this.getByName(oldName); if (res == null) { - Residence.msg(player, "Invalid.Residence"); + Residence.msg(player, lm.Invalid_Residence); return false; } @@ -856,7 +856,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { if (res.getParent() == null) { if (residences.containsKey(newName.toLowerCase())) { - Residence.msg(player, "Residence.AlreadyExists", newName); + Residence.msg(player, lm.Residence_AlreadyExists, newName); return false; } @@ -877,7 +877,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo Residence.getSignUtil().updateSignResName(res); - Residence.msg(player, "Residence.Rename", oldName, newName); + Residence.msg(player, lm.Residence_Rename, oldName, newName); return true; } @@ -891,7 +891,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo return feed; } - Residence.msg(player, "General.NoPermission"); + Residence.msg(player, lm.General_NoPermission); return false; } @@ -899,19 +899,19 @@ public boolean renameResidence(Player player, String oldName, String newName, bo public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { ClaimedResidence res = getByName(residence); if (res == null) { - Residence.msg(reqPlayer, "Invalid.Residence"); + Residence.msg(reqPlayer, lm.Invalid_Residence); return; } residence = res.getName(); if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { - Residence.msg(reqPlayer, "General.NoPermission"); + Residence.msg(reqPlayer, lm.General_NoPermission); return; } Player giveplayer = Residence.getServ().getPlayer(targPlayer); if (giveplayer == null || !giveplayer.isOnline()) { - Residence.msg(reqPlayer, "General.NotOnline"); + Residence.msg(reqPlayer, lm.General_NotOnline); return; } CuboidArea[] areas = res.getAreaArray(); @@ -920,17 +920,17 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, PermissionGroup group = rPlayer.getGroup(); if (areas.length > group.getMaxPhysicalPerResidence() && !resadmin) { - Residence.msg(reqPlayer, "Residence.GiveLimits"); + Residence.msg(reqPlayer, lm.Residence_GiveLimits); return; } if (!hasMaxZones(giveplayer.getName(), rPlayer.getMaxRes()) && !resadmin) { - Residence.msg(reqPlayer, "Residence.GiveLimits"); + Residence.msg(reqPlayer, lm.Residence_GiveLimits); return; } if (!resadmin) { for (CuboidArea area : areas) { if (!group.inLimits(area)) { - Residence.msg(reqPlayer, "Residence.GiveLimits"); + Residence.msg(reqPlayer, lm.Residence_GiveLimits); return; } } @@ -941,8 +941,8 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, res.getPermissions().setOwner(giveplayer.getName(), true); // Fix phrases here - Residence.msg(reqPlayer, "Residence.Give", residence, giveplayer.getName()); - Residence.msg(giveplayer, "Residence.Recieve", residence, reqPlayer.getName()); + Residence.msg(reqPlayer, lm.Residence_Give, residence, giveplayer.getName()); + Residence.msg(giveplayer, lm.Residence_Recieve, residence, reqPlayer.getName()); } public void removeAllFromWorld(CommandSender sender, String world) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 28652b6df..9e30acab7 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -1,7 +1,9 @@ package com.bekvon.bukkit.residence.protection; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagCheckEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; @@ -41,10 +43,18 @@ public ResidencePermissions(ClaimedResidence res, String creator, String inworld world = inworld; } + public boolean playerHas(Player player, Flags flag, boolean def) { + return playerHas(player, flag.getName(), def); + } + public boolean playerHas(Player player, String flag, boolean def) { return this.playerHas(player.getName(), world, flag, def); } + public boolean playerHas(String player, Flags flag, boolean def) { + return playerHas(player, flag.getName(), def); + } + public boolean playerHas(String player, String flag, boolean def) { return this.playerHas(player, world, flag, def); } @@ -68,6 +78,10 @@ public boolean groupHas(String group, String flag, boolean def) { return super.groupHas(group, flag, def); } + public boolean has(Flags flag, FlagCombo f) { + return has(flag.getName(), f); + } + public boolean has(String flag, FlagCombo f) { switch (f) { case FalseOrNone: @@ -83,6 +97,11 @@ public boolean has(String flag, FlagCombo f) { } } + @Override + public boolean has(Flags flag, boolean def) { + return has(flag.getName(), def); + } + @Override public boolean has(String flag, boolean def) { ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def); @@ -102,10 +121,10 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) if (player != null) { if (!resadmin) { if (!Residence.getConfigManager().isOfflineMode() && !player.getUniqueId().toString().equals(ownerUUID.toString())) { - Residence.msg(player, "General.NoPermission"); + Residence.msg(player, lm.General_NoPermission); return; } else if (!player.getName().equals(ownerLastKnownName)) { - Residence.msg(player, "General.NoPermission"); + Residence.msg(player, lm.General_NoPermission); return; } } @@ -120,7 +139,7 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) this.cuboidFlags.put(flag.getKey(), flag.getValue()); } else { if (player != null) - Residence.msg(player, "Flag.SetDeny", flag.getKey()); + Residence.msg(player, lm.Flag_SetDeny, flag.getKey()); } } for (Entry> plists : list.playerFlags.entrySet()) { @@ -130,7 +149,7 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) map.put(flag.getKey(), flag.getValue()); } else { if (player != null) - Residence.msg(player, "Flag.SetDeny", flag.getKey()); + Residence.msg(player, lm.Flag_SetDeny, flag.getKey()); } } } @@ -142,12 +161,12 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue()); } else { if (player != null) - Residence.msg(player, "Flag.SetDeny", flag.getKey()); + Residence.msg(player, lm.Flag_SetDeny, flag.getKey()); } } } if (player != null) - Residence.msg(player, "Residence.PermissionsApply"); + Residence.msg(player, lm.Residence_PermissionsApply); } public boolean hasResidencePermission(CommandSender sender, boolean requireOwner) { @@ -174,20 +193,20 @@ public boolean hasResidencePermission(CommandSender sender, boolean requireOwner private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState state, boolean globalflag, boolean resadmin) { if (!checkValidFlag(flag, globalflag)) { - Residence.msg(sender, "Invalid.Flag"); + Residence.msg(sender, lm.Invalid_Flag); return false; } if (state == FlagState.INVALID) { - Residence.msg(sender, "Invalid.FlagState"); + Residence.msg(sender, lm.Invalid_FlagState); return false; } if (!resadmin) { if (!this.hasResidencePermission(sender, false)) { - Residence.msg(sender, "General.NoPermission"); + Residence.msg(sender, lm.General_NoPermission); return false; } if (!hasFlagAccess(this.getOwner(), flag) && !sender.hasPermission("residence.flag." + flag.toLowerCase())) { - Residence.msg(sender, "Flag.SetFailed", flag); + Residence.msg(sender, lm.Flag_SetFailed, flag); return false; } } @@ -218,7 +237,7 @@ public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String f return false; if (super.setPlayerFlag(targetPlayer, flag, state)) { if (Show) - Residence.msg(sender, "Flag.Set", flag, residence.getName(), flagstate); + Residence.msg(sender, lm.Flag_Set, flag, residence.getName(), flagstate); return true; } } @@ -237,11 +256,11 @@ public boolean setGroupFlag(Player player, String group, String flag, String fla if (fc.isCancelled()) return false; if (super.setGroupFlag(group, flag, state)) { - Residence.msg(player, "Flag.Set", flag, residence.getName(), flagstate); + Residence.msg(player, lm.Flag_Set, flag, residence.getName(), flagstate); return true; } } else { - Residence.msg(player, "Invalid.Group"); + Residence.msg(player, lm.Invalid_Group); return false; } } @@ -266,7 +285,7 @@ public boolean setFlag(CommandSender sender, String flag, String flagstate, bool if (!one.getName().equals(this.getOwner())) size++; } - Residence.msg(sender, "Flag.ChangeDeny", flag, size); + Residence.msg(sender, lm.Flag_ChangeDeny, flag, size); return false; } } @@ -279,7 +298,7 @@ public boolean setFlag(CommandSender sender, String flag, String flagstate, bool if (fc.isCancelled()) return false; if (super.setFlag(flag, state)) { - Residence.msg(sender, "Flag.Set", flag, this.residence.getName(), flagstate); + Residence.msg(sender, lm.Flag_Set, flag, this.residence.getName(), flagstate); return true; } } @@ -295,7 +314,7 @@ public boolean removeAllPlayerFlags(CommandSender sender, String targetPlayer, b return false; } super.removeAllPlayerFlags(targetPlayer); - Residence.msg(sender, "Flag.RemovedAll", targetPlayer, this.residence.getName()); + Residence.msg(sender, lm.Flag_RemovedAll, targetPlayer, this.residence.getName()); return true; } return false; @@ -309,7 +328,7 @@ public boolean removeAllGroupFlags(Player player, String group, boolean resadmin return false; } super.removeAllGroupFlags(group); - Residence.msg(player, "Flag.RemovedGroup", group, this.residence.getName()); + Residence.msg(player, lm.Flag_RemovedGroup, group, this.residence.getName()); return true; } return false; @@ -345,9 +364,9 @@ public boolean setPlayerFlag(String player, String flag, FlagState state) { public void applyDefaultFlags(Player player, boolean resadmin) { if (this.hasResidencePermission(player, true) || resadmin) { this.applyDefaultFlags(); - Residence.msg(player, "Flag.Default"); + Residence.msg(player, lm.Flag_Default); } else - Residence.msg(player, "General.NoPermission"); + Residence.msg(player, lm.General_NoPermission); } public void applyDefaultFlags() { @@ -548,7 +567,7 @@ public boolean setFlagGroupOnPlayer(CommandSender sender, String target, String } } if (flagString.length() > 0) - Residence.msg(sender, "Flag.Set", flagString, target, state); + Residence.msg(sender, lm.Flag_Set, flagString, target, state); return changed; } return false; diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index 86d7de15e..80515d85d 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.AutoSelector; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -19,10 +20,10 @@ public void switchAutoSelection(Player player) { ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(player.getLocation().getWorld().getName()); list.put(player.getName().toLowerCase(), new AutoSelector(group, System.currentTimeMillis())); - player.sendMessage(Residence.getLM().getMessage("Select.AutoEnabled")); + Residence.msg(player, lm.Select_AutoEnabled); } else { list.remove(player.getName().toLowerCase()); - player.sendMessage(Residence.getLM().getMessage("Select.AutoDisabled")); + Residence.msg(player, lm.Select_AutoDisabled); } } @@ -37,7 +38,7 @@ public void UpdateSelection(Player player) { if (Curenttime > 270) { list.remove(player.getName().toLowerCase()); - player.sendMessage(Residence.getLM().getMessage("AutoSelection.Disabled")); + Residence.msg(player, lm.Select_AutoDisabled); return; } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index c0ea638ac..d8cf08eba 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -3,6 +3,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.SelectionSides; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -114,12 +115,12 @@ public void showSelectionInfoInActionBar(Player player) { String pname = player.getName(); CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); - String Message = Residence.getLM().getMessage("Select.TotalSize", cuboidArea.getSize()); + String Message = Residence.msg(lm.Select_TotalSize, cuboidArea.getSize()); ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (Residence.getConfigManager().enableEconomy()) - Message += " " + Residence.getLM().getMessage("General.LandCost", ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); + Message += " " + Residence.msg(lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); Residence.getAB().send(player, Message); @@ -128,22 +129,22 @@ public void showSelectionInfoInActionBar(Player player) { public void showSelectionInfo(Player player) { String pname = player.getName(); if (hasPlacedBoth(pname)) { - Residence.msg(player, "General.Separator"); + Residence.msg(player, lm.General_Separator); CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); - Residence.msg(player, "Select.TotalSize", cuboidArea.getSize()); + Residence.msg(player, lm.Select_TotalSize, cuboidArea.getSize()); ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (Residence.getConfigManager().enableEconomy()) - Residence.msg(player, "General.LandCost", ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); - player.sendMessage(ChatColor.YELLOW + "X" + Residence.getLM().getMessage("General.Size", cuboidArea.getXSize())); - player.sendMessage(ChatColor.YELLOW + "Y" + Residence.getLM().getMessage("General.Size", cuboidArea.getYSize())); - player.sendMessage(ChatColor.YELLOW + "Z" + Residence.getLM().getMessage("General.Size", cuboidArea.getZSize())); - Residence.msg(player, "General.Separator"); + Residence.msg(player, lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); + player.sendMessage(ChatColor.YELLOW + "X" + Residence.msg(lm.General_Size, cuboidArea.getXSize())); + player.sendMessage(ChatColor.YELLOW + "Y" + Residence.msg(lm.General_Size, cuboidArea.getYSize())); + player.sendMessage(ChatColor.YELLOW + "Z" + Residence.msg(lm.General_Size, cuboidArea.getZSize())); + Residence.msg(player, lm.General_Separator); NewMakeBorders(player, getPlayerLoc1(pname), getPlayerLoc2(pname), false); } else - Residence.msg(player, "Select.Points"); + Residence.msg(player, lm.Select_Points); } public static boolean showParticle(Player player, Location Current, boolean error) { @@ -463,7 +464,7 @@ public void vert(Player player, boolean resadmin) { this.sky(player, resadmin); this.bedrock(player, resadmin); } else { - Residence.msg(player, "Select.Points"); + Residence.msg(player, lm.Select_Points); } } @@ -513,9 +514,9 @@ public void sky(Player player, boolean resadmin) { } playerLoc2.get(player.getName()).setY(newy); } - Residence.msg(player, "Select.Sky"); + Residence.msg(player, lm.Select_Sky); } else { - Residence.msg(player, "Select.Points"); + Residence.msg(player, lm.Select_Points); } } @@ -544,9 +545,9 @@ public void bedrock(Player player, boolean resadmin) { } playerLoc2.get(player.getName()).setY(newy); } - Residence.msg(player, "Select.Bedrock"); + Residence.msg(player, lm.Select_Bedrock); } else { - Residence.msg(player, "Select.Points"); + Residence.msg(player, lm.Select_Points); } } @@ -565,16 +566,16 @@ public void selectChunk(Player player) { int ymax = player.getLocation().getWorld().getMaxHeight() - 1; playerLoc1.put(player.getName(), new Location(player.getWorld(), xcoord, ycoord, zcoord)); playerLoc2.put(player.getName(), new Location(player.getWorld(), xmax, ymax, zmax)); - Residence.msg(player, "Select.Success"); + Residence.msg(player, lm.Select_Success); } public boolean worldEdit(Player player) { - Residence.msg(player, "General.WorldEditNotFound"); + Residence.msg(player, lm.General_WorldEditNotFound); return false; } public boolean worldEditUpdate(Player player) { - Residence.msg(player, "General.WorldEditNotFound"); + Residence.msg(player, lm.General_WorldEditNotFound); return false; } @@ -584,18 +585,18 @@ public void selectBySize(Player player, int xsize, int ysize, int zsize) { Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize); placeLoc1(player, loc1, false); placeLoc2(player, loc2, true); - Residence.msg(player, "Select.Success"); + Residence.msg(player, lm.Select_Success); showSelectionInfo(player); } public void modify(Player player, boolean shift, double amount) { if (!hasPlacedBoth(player.getName())) { - Residence.msg(player, "Select.Points"); + Residence.msg(player, lm.Select_Points); return; } Direction d = getDirection(player); if (d == null) { - Residence.msg(player, "Invalid.Direction"); + Residence.msg(player, lm.Invalid_Direction); return; } CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); @@ -604,7 +605,7 @@ public void modify(Player player, boolean shift, double amount) { double oldy = area.getLowLoc().getBlockY(); oldy = oldy - amount; if (oldy < MIN_HEIGHT) { - Residence.msg(player, "Select.TooLow"); + Residence.msg(player, lm.Select_TooLow); oldy = MIN_HEIGHT; } area.getLowLoc().setY(oldy); @@ -612,9 +613,9 @@ public void modify(Player player, boolean shift, double amount) { double oldy2 = area.getHighLoc().getBlockY(); oldy2 = oldy2 - amount; area.getHighLoc().setY(oldy2); - Residence.msg(player, "Shifting.Down", amount); + Residence.msg(player, lm.Shifting_Down, amount); } else - Residence.msg(player, "Expanding.Down", amount); + Residence.msg(player, lm.Expanding_Down, amount); break; case MINUSX: double oldx = area.getLowLoc().getBlockX(); @@ -624,9 +625,9 @@ public void modify(Player player, boolean shift, double amount) { double oldx2 = area.getHighLoc().getBlockX(); oldx2 = oldx2 - amount; area.getHighLoc().setX(oldx2); - Residence.msg(player, "Shifting.West", amount); + Residence.msg(player, lm.Shifting_West, amount); } else - Residence.msg(player, "Expanding.West", amount); + Residence.msg(player, lm.Expanding_West, amount); break; case MINUSZ: double oldz = area.getLowLoc().getBlockZ(); @@ -636,9 +637,9 @@ public void modify(Player player, boolean shift, double amount) { double oldz2 = area.getHighLoc().getBlockZ(); oldz2 = oldz2 - amount; area.getHighLoc().setZ(oldz2); - Residence.msg(player, "Shifting.North", amount); + Residence.msg(player, lm.Shifting_North, amount); } else - Residence.msg(player, "Expanding.North", amount); + Residence.msg(player, lm.Expanding_North, amount); break; case PLUSX: oldx = area.getHighLoc().getBlockX(); @@ -648,9 +649,9 @@ public void modify(Player player, boolean shift, double amount) { double oldx2 = area.getLowLoc().getBlockX(); oldx2 = oldx2 + amount; area.getLowLoc().setX(oldx2); - Residence.msg(player, "Shifting.East", amount); + Residence.msg(player, lm.Shifting_East, amount); } else - Residence.msg(player, "Expanding.East", amount); + Residence.msg(player, lm.Expanding_East, amount); break; case PLUSZ: oldz = area.getHighLoc().getBlockZ(); @@ -660,15 +661,15 @@ public void modify(Player player, boolean shift, double amount) { double oldz2 = area.getLowLoc().getBlockZ(); oldz2 = oldz2 + amount; area.getLowLoc().setZ(oldz2); - Residence.msg(player, "Shifting.South", amount); + Residence.msg(player, lm.Shifting_South, amount); } else - Residence.msg(player, "Expanding.South", amount); + Residence.msg(player, lm.Expanding_South, amount); break; case UP: oldy = area.getHighLoc().getBlockY(); oldy = oldy + amount; if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { - Residence.msg(player, "Select.TooHigh"); + Residence.msg(player, lm.Select_TooHigh); oldy = player.getLocation().getWorld().getMaxHeight() - 1; } area.getHighLoc().setY(oldy); @@ -676,9 +677,9 @@ public void modify(Player player, boolean shift, double amount) { double oldy2 = area.getLowLoc().getBlockY(); oldy2 = oldy2 + amount; area.getLowLoc().setY(oldy2); - Residence.msg(player, "Shifting.Up", amount); + Residence.msg(player, lm.Shifting_Up, amount); } else - Residence.msg(player, "Expanding.Up", amount); + Residence.msg(player, lm.Expanding_Up, amount); break; default: break; @@ -688,12 +689,12 @@ public void modify(Player player, boolean shift, double amount) { public boolean contract(Player player, double amount, boolean resadmin) { if (!hasPlacedBoth(player.getName())) { - Residence.msg(player, "Select.Points"); + Residence.msg(player, lm.Select_Points); return false; } Direction d = getDirection(player); if (d == null) { - Residence.msg(player, "Invalid.Direction"); + Residence.msg(player, lm.Invalid_Direction); return false; } CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); @@ -702,45 +703,45 @@ public boolean contract(Player player, double amount, boolean resadmin) { double oldy = area.getHighLoc().getBlockY(); oldy = oldy - amount; if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { - Residence.msg(player, "Select.TooHigh"); + Residence.msg(player, lm.Select_TooHigh); oldy = player.getLocation().getWorld().getMaxHeight() - 1; } area.getHighLoc().setY(oldy); - Residence.msg(player, "Contracting.Down", amount); + Residence.msg(player, lm.Contracting_Down, amount); break; case MINUSX: double oldx = area.getHighLoc().getBlockX(); oldx = oldx - amount; area.getHighLoc().setX(oldx); - Residence.msg(player, "Contracting.West", amount); + Residence.msg(player, lm.Contracting_West, amount); break; case MINUSZ: double oldz = area.getHighLoc().getBlockZ(); oldz = oldz - amount; area.getHighLoc().setZ(oldz); - Residence.msg(player, "Contracting.North", amount); + Residence.msg(player, lm.Contracting_North, amount); break; case PLUSX: oldx = area.getLowLoc().getBlockX(); oldx = oldx + amount; area.getLowLoc().setX(oldx); - Residence.msg(player, "Contracting.East", amount); + Residence.msg(player, lm.Contracting_East, amount); break; case PLUSZ: oldz = area.getLowLoc().getBlockZ(); oldz = oldz + amount; area.getLowLoc().setZ(oldz); - Residence.msg(player, "Contracting.South", amount); + Residence.msg(player, lm.Contracting_South, amount); break; case UP: oldy = area.getLowLoc().getBlockY(); oldy = oldy + amount; if (oldy < MIN_HEIGHT) { - Residence.msg(player, "Select.TooLow"); + Residence.msg(player, lm.Select_TooLow); oldy = MIN_HEIGHT; } area.getLowLoc().setY(oldy); - Residence.msg(player, "Contracting.Up", amount); + Residence.msg(player, lm.Contracting_Up, amount); break; default: break; diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index 329446a5a..9f9970cc5 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -17,6 +17,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; @@ -71,9 +72,9 @@ public void onSignInteract(PlayerInteractEvent event) { if (Found != null) { Residence.getShopSignUtilManager().GetAllBoards().remove(Found); Residence.getShopSignUtilManager().saveSigns(); - event.getPlayer().sendMessage(Residence.getLM().getMessage("Shop.DeletedBoard")); + Residence.msg(player, lm.Shop_DeletedBoard); } else { - event.getPlayer().sendMessage(Residence.getLM().getMessage("Shop.IncorrectBoard")); + Residence.msg(player, lm.Shop_IncorrectBoard); } Delete.remove(player.getName()); return; @@ -157,8 +158,7 @@ public void onFlagChange(ResidenceFlagChangeEvent event) { event.setCancelled(true); - if (event.getPlayer() != null) - event.getPlayer().sendMessage(ChatColor.YELLOW + "Can't change while shop flag is set to true"); + Residence.msg(event.getPlayer(), ChatColor.YELLOW + "Can't change while shop flag is set to true"); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index 5fea18192..cd989e99b 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -22,6 +22,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import com.bekvon.bukkit.residence.CommentedYamlConfiguration; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class ShopSignUtil { @@ -359,14 +360,14 @@ public boolean BoardUpdate() { vote = getAverageVote(ShopNames.get(Start)); if (Residence.getConfigManager().isOnlyLike()) { - votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Shop.ListLiked", getLikes(ShopNames.get(Start))); + votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListLiked, getLikes(ShopNames.get(Start))); } else - votestat = vote.getAmount() == 0 ? "" : Residence.getLM().getMessage("Shop.SignLines.4", vote.getVote() + "%" + vote.getAmount()); + votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_SignLines_4, vote.getVote() + "%" + vote.getAmount()); } - sign.setLine(0, Residence.getLM().getMessage("Shop.SignLines.1", Start + 1)); - sign.setLine(1, Residence.getLM().getMessage("Shop.SignLines.2", res.getName())); - sign.setLine(2, Residence.getLM().getMessage("Shop.SignLines.3", res.getOwner())); + sign.setLine(0, Residence.msg(lm.Shop_SignLines_1, Start + 1)); + sign.setLine(1, Residence.msg(lm.Shop_SignLines_2, res.getName())); + sign.setLine(2, Residence.msg(lm.Shop_SignLines_3, res.getOwner())); sign.setLine(3, votestat); sign.update(); board.addSignLoc(res.getName(), sign.getLocation()); diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 1ce8840f4..9a8efe352 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -22,6 +22,7 @@ import com.bekvon.bukkit.residence.CommentedYamlConfiguration; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -236,7 +237,7 @@ public boolean SignUpdate(Signs Sign) { if (rentedPlace != null) time = rentedPlace.endTime; - SimpleDateFormat formatter = new SimpleDateFormat(Residence.getLM().getMessage("Sign.DateFormat")); + SimpleDateFormat formatter = new SimpleDateFormat(Residence.msg(lm.Sign_DateFormat)); formatter.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(time); @@ -247,22 +248,22 @@ public boolean SignUpdate(Signs Sign) { endDate = "Unknown"; if (Residence.getRentManager().getRentedAutoRepeats(res)) - endDate = Residence.getLM().getMessage("Sign.RentedAutorenewTrue", endDate); + endDate = Residence.msg(lm.Sign_RentedAutorenewTrue, endDate); else - endDate = Residence.getLM().getMessage("Sign.RentedAutorenewFalse", endDate); + endDate = Residence.msg(lm.Sign_RentedAutorenewFalse, endDate); - String TopLine = rented ? endDate : Residence.getLM().getMessage("Sign.ForRentTopLine"); + String TopLine = rented ? endDate : Residence.msg(lm.Sign_ForRentTopLine); sign.setLine(0, TopLine); - String infoLine = Residence.getLM().getMessage("Sign.ForRentPriceLine", Residence.getRentManager().getCostOfRent(res), Residence + String infoLine = Residence.msg(lm.Sign_ForRentPriceLine, Residence.getRentManager().getCostOfRent(res), Residence .getRentManager().getRentDays(res), Residence.getRentManager().getRentableRepeatable(res)); sign.setLine(1, infoLine); String shortName = fixResName(landName); - sign.setLine(2, rented ? Residence.getLM().getMessage("Sign.RentedResName", shortName) - : Residence.getLM().getMessage("Sign.RentedResName", shortName)); - sign.setLine(3, rented ? Residence.getLM().getMessage("Sign.RentedBottomLine", Residence.getRentManager().getRentingPlayer(landName)) - : Residence.getLM().getMessage("Sign.ForRentBottomLine")); + sign.setLine(2, rented ? Residence.msg(lm.Sign_RentedResName, shortName) + : Residence.msg(lm.Sign_RentedResName, shortName)); + sign.setLine(3, rented ? Residence.msg(lm.Sign_RentedBottomLine, Residence.getRentManager().getRentingPlayer(landName)) + : Residence.msg(lm.Sign_ForRentBottomLine)); sign.update(); } @@ -275,15 +276,15 @@ public boolean SignUpdate(Signs Sign) { secondLine = lines[1]; } - sign.setLine(0, Residence.getLM().getMessage("Sign.ForSaleTopLine")); - String infoLine = Residence.getLM().getMessage("Sign.ForSalePriceLine", res.getSellPrice()); + sign.setLine(0, Residence.msg(lm.Sign_ForSaleTopLine)); + String infoLine = Residence.msg(lm.Sign_ForSalePriceLine, res.getSellPrice()); sign.setLine(1, infoLine); - sign.setLine(2, Residence.getLM().getMessage("Sign.RentedResName", shortName)); + sign.setLine(2, Residence.msg(lm.Sign_RentedResName, shortName)); if (secondLine != null) - sign.setLine(3, Residence.getLM().getMessage("Sign.RentedResName", secondLine)); + sign.setLine(3, Residence.msg(lm.Sign_RentedResName, secondLine)); else - sign.setLine(3, Residence.getLM().getMessage("Sign.ForSaleBottomLine")); + sign.setLine(3, Residence.msg(lm.Sign_ForSaleBottomLine)); sign.update(); } diff --git a/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java b/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java index 29d08299e..ace12086e 100644 --- a/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java +++ b/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java @@ -6,6 +6,7 @@ package com.bekvon.bukkit.residence.spout; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.spout.ResidencePopup.PopupType; import java.util.HashMap; @@ -25,9 +26,9 @@ public ResidenceSpout(Residence plug) { this.plugin = plug; } - public void showResidenceFlagGUI(SpoutPlayer p, String resname, boolean resadmin) { + public void showResidenceFlagGUI(SpoutPlayer player, String resname, boolean resadmin) { ClaimedResidence res = Residence.getResidenceManager().getByName(resname); - if (res.getPermissions().hasResidencePermission(p, false)) { + if (res.getPermissions().hasResidencePermission(player, false)) { Color fieldcolor = new Color(0F, 0F, 0.3F, 1F); Color textPrimaryColor = new Color(1F, 1F, 1F, 1F); @@ -92,10 +93,10 @@ public void showResidenceFlagGUI(SpoutPlayer p, String resname, boolean resadmin removeallbutton.setHoverColor(hoverColor); popup.gridAttachWidget("RemoveAllButton", plugin, removeallbutton, 3, 3); - screens.put(p, popup); - p.getMainScreen().attachPopupScreen(popup); + screens.put(player, popup); + player.getMainScreen().attachPopupScreen(popup); } else { - p.sendMessage(Residence.getLM().getMessage("General.NoPermission")); + Residence.msg(player, lm.General_NoPermission); } } } diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index e2b085d4e..f74d9066a 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -8,6 +8,8 @@ import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.utils.YmlMaker; public class Language { @@ -36,8 +38,29 @@ public void LanguageReload() { * - the key of the message * @return the message */ +// public String getMessage2(String key) { +// return getMessage(key, ""); +// } + + /** + * Get the message with the correct key + * + * @param key + * - the path of the message + * @param variables + * - the variables separated with % + * @return the message + */ + public String getMessage(String key) { - return getMessage(key, ""); + if (!key.contains("Language.") && !key.contains("CommandHelp.")) + key = "Language." + key; + String missing = "Missing locale for " + key; + String message = ""; + if (customlocale == null || !customlocale.contains(key)) + message = enlocale.contains(key) == true ? enlocale.getString(key) : missing; + message = customlocale.contains(key) == true ? customlocale.getString(key) : missing; + return ChatColor.translateAlternateColorCodes('&', message); } /** @@ -50,7 +73,8 @@ public String getMessage(String key) { * @return the message */ - public String getMessage(String key, Object... variables) { + public String getMessage(lm lm, Object... variables) { + String key = lm.getPath(); if (!key.contains("Language.") && !key.contains("CommandHelp.")) key = "Language." + key; String missing = "Missing locale for " + key; @@ -60,7 +84,10 @@ public String getMessage(String key, Object... variables) { message = customlocale.contains(key) == true ? customlocale.getString(key) : missing; for (int i = 1; i <= variables.length; i++) { - message = message.replace("%" + i, String.valueOf(variables[i - 1])); + String vr = String.valueOf(variables[i - 1]); + if (variables[i - 1] instanceof Flags) + vr = ((Flags) variables[i - 1]).getName(); + message = message.replace("%" + i, vr); } return ChatColor.translateAlternateColorCodes('&', message); } @@ -86,7 +113,24 @@ public String getDefaultMessage(String key) { * - the key of the message * @return the message */ - public List getMessageList(String key) { + public List getMessageList2(String key) { + if (!key.contains("Language.") && !key.contains("CommandHelp.")) + key = "Language." + key; + String missing = "Missing locale for " + key; + if (customlocale.isList(key)) + return ColorsArray(customlocale.getStringList(key)); + return enlocale.getStringList(key).size() > 0 ? ColorsArray(enlocale.getStringList(key)) : Arrays.asList(missing); + } + + /** + * Get the message with the correct key + * + * @param key + * - the key of the message + * @return the message + */ + public List getMessageList(lm lm) { + String key = lm.getPath(); if (!key.contains("Language.") && !key.contains("CommandHelp.")) key = "Language." + key; String missing = "Missing locale for " + key; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 58501dc93..81cb1132b 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -8,6 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.containers.HelpLines; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import java.io.File; @@ -66,7 +67,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p path = "/" + path.replace(".", " ") + " "; int pagecount = (int) Math.ceil((double) helplines.size() / (double) linesPerPage); if (page > pagecount || page < 1) { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Help")); + Residence.msg(sender, lm.Invalid_Help); return; } @@ -78,7 +79,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p separator += simbol; } - sender.sendMessage(ChatColor.GOLD + separator + " " + Residence.getLM().getMessage("General.HelpPageHeader", path, page, pagecount) + " " + separator); + sender.sendMessage(ChatColor.GOLD + separator + " " + Residence.msg(lm.General_HelpPageHeader, path, page, pagecount) + " " + separator); int start = linesPerPage * (page - 1); int end = start + linesPerPage; for (int i = start; i < end; i++) { @@ -124,11 +125,11 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p String baseCmd = resadmin ? "resadmin" : "res"; String prevCmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " + Prevpage : "/" + baseCmd + " ? " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " + NextPage : "/" + baseCmd + " ? " + NextPage; - String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; @@ -141,7 +142,7 @@ public void printHelp(CommandSender sender, int page, String path, boolean resad if (subEntry != null) { subEntry.printHelp(sender, page, resadmin, path); } else { - sender.sendMessage(Residence.getLM().getMessage("Invalid.Help")); + Residence.msg(sender, lm.Invalid_Help); } } diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index b0d8f8ee6..27c8c3cdf 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -4,6 +4,7 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -29,20 +30,20 @@ public static void printInfo(CommandSender sender, String title, List li if (pagecount == 0) pagecount = 1; if (page > pagecount) { - sender.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Invalid.Page")); + sender.sendMessage(ChatColor.RED + Residence.msg(lm.Invalid_Page)); return; } - sender.sendMessage(Residence.getLM().getMessage("InformationPage.TopLine", title)); - sender.sendMessage(Residence.getLM().getMessage("InformationPage.Page", Residence.getLM().getMessage("General.GenericPages", String.format("%d", page), - pagecount, lines.size()))); + Residence.msg(sender, lm.InformationPage_TopLine, title); + Residence.msg(sender, lm.InformationPage_Page, Residence.msg(lm.General_GenericPages, String.format("%d", page), + pagecount, lines.size())); for (int i = start; i < end; i++) { if (lines.size() > i) sender.sendMessage(ChatColor.GREEN + lines.get(i)); } if (pagecount > page) - sender.sendMessage(Residence.getLM().getMessage("InformationPage.NextPage", Residence.getLM().getMessage("General.NextPage"))); + Residence.msg(sender, lm.InformationPage_NextPage, Residence.msg(lm.General_NextPage)); else - sender.sendMessage(Residence.getLM().getMessage("InformationPage.NoNextPage")); + Residence.msg(sender, lm.InformationPage_NoNextPage); } public static void printListInfo(CommandSender sender, String targetPlayer, List lines, int page, boolean resadmin) { @@ -57,13 +58,13 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List if (pagecount == 0) pagecount = 1; if (page > pagecount) { - sender.sendMessage(ChatColor.RED + Residence.getLM().getMessage("Invalid.Page")); + sender.sendMessage(ChatColor.RED + Residence.msg(lm.Invalid_Page)); return; } if (targetPlayer != null) - sender.sendMessage(Residence.getLM().getMessage("InformationPage.TopLine", Residence.getLM().getMessage("General.Residences") + " - " + targetPlayer)); - sender.sendMessage(Residence.getLM().getMessage("InformationPage.Page", Residence.getLM().getMessage("General.GenericPages", String.format("%d", page), - pagecount, lines.size()))); + Residence.msg(sender, lm.InformationPage_TopLine, Residence.msg(lm.General_Residences) + " - " + targetPlayer); + Residence.msg(sender, lm.InformationPage_Page, Residence.msg(lm.General_GenericPages, String.format("%d", page), + pagecount, lines.size())); String cmd = "res"; if (resadmin) @@ -75,42 +76,42 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List ClaimedResidence res = lines.get(i); StringBuilder StringB = new StringBuilder(); - StringB.append(" " + Residence.getLM().getMessage("General.Owner", res.getOwner())); + StringB.append(" " + Residence.msg(lm.General_Owner, res.getOwner())); String worldInfo = ""; if (res.getPermissions().has("hidden", FlagCombo.FalseOrNone) && res.getPermissions().has("coords", FlagCombo.TrueOrNone) || resadmin) { worldInfo += "&6 (&3"; CuboidArea area = res.getAreaArray()[0]; - worldInfo += Residence.getLM().getMessage("General.CoordsTop", area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() + worldInfo += Residence.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() .getBlockZ()); worldInfo += "&6; &3"; - worldInfo += Residence.getLM().getMessage("General.CoordsBottom", area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() + worldInfo += Residence.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() .getBlockZ()); worldInfo += "&6)"; worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); StringB.append("\n" + worldInfo); } - StringB.append("\n " + Residence.getLM().getMessage("General.CreatedOn", GetTime.getTime(res.getCreateTime()))); + StringB.append("\n " + Residence.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); String ExtraString = ""; if (res.isForRent()) { if (res.isRented()) { - ExtraString = " " + Residence.getLM().getMessage("Residence.IsRented"); - StringB.append("\n " + Residence.getLM().getMessage("Residence.RentedBy", res.getRentedLand().player)); + ExtraString = " " + Residence.msg(lm.Residence_IsRented); + StringB.append("\n " + Residence.msg(lm.Residence_RentedBy, res.getRentedLand().player)); } else { - ExtraString = " " + Residence.getLM().getMessage("Residence.IsForRent"); + ExtraString = " " + Residence.msg(lm.Residence_IsForRent); } RentableLand rentable = res.getRentable(); - StringB.append("\n " + Residence.getLM().getMessage("General.Cost", rentable.cost, rentable.days)); - StringB.append("\n " + Residence.getLM().getMessage("Rentable.AllowRenewing", rentable.AllowRenewing)); - StringB.append("\n " + Residence.getLM().getMessage("Rentable.StayInMarket", rentable.StayInMarket)); - StringB.append("\n " + Residence.getLM().getMessage("Rentable.AllowAutoPay", rentable.AllowAutoPay)); + StringB.append("\n " + Residence.msg(lm.General_Cost, rentable.cost, rentable.days)); + StringB.append("\n " + Residence.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); + StringB.append("\n " + Residence.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); + StringB.append("\n " + Residence.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); } if (res.isForSell()) { - ExtraString = " " + Residence.getLM().getMessage("Residence.IsForSale"); - StringB.append("\n " + Residence.getLM().getMessage("Economy.LandForSale") + " " + res.getSellPrice()); + ExtraString = " " + Residence.msg(lm.Residence_IsForSale); + StringB.append("\n " + Residence.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); } String tpFlag = ""; @@ -120,7 +121,7 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List moveFlag = res.getPermissions().playerHas(sender.getName(), "move", true) ? ChatColor.DARK_GREEN + "M" : ChatColor.DARK_RED + "M"; } - String msg = Residence.getLM().getMessage("Residence.ResList", (i + 1), res.getName(), res.getWorld(), tpFlag + moveFlag, ExtraString); + String msg = Residence.msg(lm.Residence_ResList, (i + 1), res.getName(), res.getWorld(), tpFlag + moveFlag, ExtraString); if (sender instanceof Player) Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + Residence.getResidenceManager().convertToRaw(null, msg, @@ -152,19 +153,19 @@ public static void ShowPagination(String target, int pageCount, int CurrentPage, Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; String prevCmd = "/" + cmd + " " + Prevpage; - String prev = "\"\",{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + String prev = "\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = "/" + cmd + " " + NextPage; - String next = " {\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}"; if (CurrentPage >= pageCount) - next = "{\"text\":\"" + Residence.getLM().getMessage("General.NextInfoPage") + " " + separator + "\"}"; + next = "{\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + "\"}"; if (CurrentPage <= 1) - prev = "{\"text\":\"" + separator + " " + Residence.getLM().getMessage("General.PrevInfoPage") + "\"}"; + prev = "{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + "\"}"; Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + target + " [" + prev + "," + next + "]"); } diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index 2e2b8ed0e..9bf0e64e3 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -12,7 +12,7 @@ import org.bukkit.entity.Player; import org.json.simple.JSONObject; -import com.bekvon.bukkit.residence.ABInterface; +import com.bekvon.bukkit.residence.containers.ABInterface; /** * diff --git a/src/com/bekvon/bukkit/residence/utils/CrackShot.java b/src/com/bekvon/bukkit/residence/utils/CrackShot.java index 0405fa2f5..af71b8f92 100644 --- a/src/com/bekvon/bukkit/residence/utils/CrackShot.java +++ b/src/com/bekvon/bukkit/residence/utils/CrackShot.java @@ -11,6 +11,8 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.shampaggon.crackshot.events.WeaponDamageEntityEvent; @@ -54,8 +56,8 @@ public void AnimalKilling(WeaponDamageEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); if (Residence.getNms().isAnimal(entity)) { - if (res != null && !res.getPermissions().playerHas(cause.getName(), "animalkilling", true)) { - cause.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "animalkilling", res.getName())); + if (res != null && !res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, true)) { + cause.sendMessage(Residence.msg(lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName())); event.setCancelled(true); } } @@ -86,9 +88,9 @@ public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { // Note: Location of entity, not player; otherwise player could stand outside of res and still damage Location loc = event.getVictim().getLocation(); ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res != null && !res.getPermissions().playerHas(player.getName(), "container", false)) { + if (res != null && !res.getPermissions().playerHas(player.getName(), Flags.container, false)) { event.setCancelled(true); - player.sendMessage(Residence.getLM().getMessage("Residence.FlagDeny", "container", res.getName())); + Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); } } @@ -118,25 +120,25 @@ public void onEntityDamage(WeaponDamageEntityEvent event) { boolean srcpvp = true; if (srcarea != null) { - srcpvp = srcarea.getPermissions().has("pvp", true); + srcpvp = srcarea.getPermissions().has(Flags.pvp, true); } if (!srcpvp) { - damager.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); + damager.sendMessage(Residence.msg(lm.General_NoPVPZone)); event.setCancelled(true); return; } /* Check for Player vs Player */ if (area == null) { /* World PvP */ - if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has("pvp", true)) { - damager.sendMessage(Residence.getLM().getMessage("General.WorldPVPDisabled")); + if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, true)) { + damager.sendMessage(Residence.msg(lm.General_WorldPVPDisabled)); event.setCancelled(true); } } else { /* Normal PvP */ - if (!area.getPermissions().has("pvp", true)) { - damager.sendMessage(Residence.getLM().getMessage("General.NoPVPZone")); + if (!area.getPermissions().has(Flags.pvp, true)) { + damager.sendMessage(Residence.msg(lm.General_NoPVPZone)); event.setCancelled(true); } } diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 69b94c79f..367ee5831 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -12,6 +12,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.RandomTeleport; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class RandomTp { @@ -122,7 +123,7 @@ public void run() { else if (Residence.getTeleportDelayMap().contains(targetPlayer.getName())) Residence.getTeleportDelayMap().remove(targetPlayer.getName()); targetPlayer.teleport(loc); - targetPlayer.sendMessage(Residence.getLM().getMessage("RandomTeleport.TeleportSuccess", loc.getX(), loc.getY(), loc.getZ())); + Residence.msg(targetPlayer, lm.RandomTeleport_TeleportSuccess, loc.getX(), loc.getY(), loc.getZ()); return; } }, Residence.getConfigManager().getTeleportDelay() * 20L); @@ -130,6 +131,6 @@ else if (Residence.getTeleportDelayMap().contains(targetPlayer.getName())) public void performInstantTp(Location loc, Player targetPlayer) { targetPlayer.teleport(loc); - targetPlayer.sendMessage(Residence.getLM().getMessage("RandomTeleport.TeleportSuccess", loc.getX(), loc.getY(), loc.getZ())); + Residence.msg(targetPlayer, lm.RandomTeleport_TeleportSuccess, loc.getX(), loc.getY(), loc.getZ()); } } From 0066e403797801502133f35ee2a7f4fa8f053479 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Jul 2016 13:24:48 +0300 Subject: [PATCH 0213/1142] Command sorting --- .../bukkit/residence/CommandFiller.java | 51 +++++++++++++++++-- .../bukkit/residence/LocaleManager.java | 3 +- .../bekvon/bukkit/residence/Residence.java | 12 +++-- .../residence/ResidenceCommandListener.java | 7 +-- .../bukkit/residence/commands/area.java | 2 +- .../bukkit/residence/commands/bank.java | 2 +- .../bukkit/residence/commands/check.java | 2 +- .../bukkit/residence/commands/clearflags.java | 2 +- .../bukkit/residence/commands/command.java | 2 +- .../bukkit/residence/commands/compass.java | 2 +- .../bukkit/residence/commands/confirm.java | 2 +- .../bukkit/residence/commands/contract.java | 2 +- .../bukkit/residence/commands/create.java | 2 +- .../bukkit/residence/commands/current.java | 2 +- .../bukkit/residence/commands/expand.java | 2 +- .../bukkit/residence/commands/flags.java | 2 +- .../bukkit/residence/commands/give.java | 2 +- .../bukkit/residence/commands/gset.java | 2 +- .../bekvon/bukkit/residence/commands/gui.java | 2 +- .../bukkit/residence/commands/info.java | 2 +- .../bukkit/residence/commands/kick.java | 2 +- .../bukkit/residence/commands/lease.java | 2 +- .../bukkit/residence/commands/limits.java | 2 +- .../bukkit/residence/commands/list.java | 2 +- .../bukkit/residence/commands/listall.java | 2 +- .../residence/commands/listallhidden.java | 2 +- .../bukkit/residence/commands/listhidden.java | 2 +- .../bukkit/residence/commands/lists.java | 2 +- .../bukkit/residence/commands/lset.java | 2 +- .../bukkit/residence/commands/market.java | 2 +- .../bukkit/residence/commands/material.java | 2 +- .../bukkit/residence/commands/message.java | 2 +- .../bukkit/residence/commands/mirror.java | 2 +- .../bukkit/residence/commands/padd.java | 2 +- .../bukkit/residence/commands/pdel.java | 2 +- .../bukkit/residence/commands/pset.java | 2 +- .../bekvon/bukkit/residence/commands/rc.java | 2 +- .../bukkit/residence/commands/reload.java | 2 +- .../bukkit/residence/commands/remove.java | 2 +- .../bukkit/residence/commands/removeall.java | 2 +- .../residence/commands/removeworld.java | 2 +- .../bukkit/residence/commands/rename.java | 2 +- .../bukkit/residence/commands/renamearea.java | 2 +- .../bukkit/residence/commands/resadmin.java | 2 +- .../bukkit/residence/commands/resbank.java | 2 +- .../bukkit/residence/commands/reset.java | 2 +- .../bekvon/bukkit/residence/commands/rt.java | 2 +- .../bukkit/residence/commands/select.java | 2 +- .../bukkit/residence/commands/server.java | 2 +- .../bekvon/bukkit/residence/commands/set.java | 2 +- .../bukkit/residence/commands/setmain.java | 2 +- .../bukkit/residence/commands/setowner.java | 2 +- .../bukkit/residence/commands/shop.java | 2 +- .../residence/commands/signconvert.java | 2 +- .../bukkit/residence/commands/signupdate.java | 2 +- .../bukkit/residence/commands/sublist.java | 2 +- .../bukkit/residence/commands/subzone.java | 2 +- .../bukkit/residence/commands/tool.java | 2 +- .../bekvon/bukkit/residence/commands/tp.java | 2 +- .../bukkit/residence/commands/tpconfirm.java | 2 +- .../bukkit/residence/commands/tpset.java | 2 +- .../bukkit/residence/commands/unstuck.java | 2 +- .../bukkit/residence/commands/version.java | 2 +- .../containers/CommandAnnotation.java | 4 +- .../residence/containers/CommandStatus.java | 28 ++++++++++ .../bukkit/residence/containers/cmd.java | 1 + .../listeners/ResidenceEntityListener.java | 4 -- .../bukkit/residence/text/help/HelpEntry.java | 9 ++++ .../bukkit/residence/utils/Sorting.java | 23 +++++++++ 69 files changed, 183 insertions(+), 77 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/containers/CommandStatus.java diff --git a/src/com/bekvon/bukkit/residence/CommandFiller.java b/src/com/bekvon/bukkit/residence/CommandFiller.java index 39bc1895b..4f65cb105 100644 --- a/src/com/bekvon/bukkit/residence/CommandFiller.java +++ b/src/com/bekvon/bukkit/residence/CommandFiller.java @@ -13,14 +13,46 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; +import org.bukkit.Bukkit; + import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.CommandStatus; +import com.bekvon.bukkit.residence.utils.Debug; public class CommandFiller { public final String packagePath = "com.bekvon.bukkit.residence.commands"; - public Map CommandList = new HashMap(); + public Map CommandList = new HashMap(); - public Map fillCommands() { + public List getCommands(Boolean simple) { + Map cmd = new HashMap(); + for (Entry one : CommandList.entrySet()) { + if (simple && !one.getValue().getSimple() || !simple && one.getValue().getSimple()) + continue; + cmd.put(one.getKey(), one.getValue().getPriority()); + } + cmd = Residence.getSortingManager().sortByValueASC(cmd); + List cmdList = new ArrayList(); + for (Entry one : cmd.entrySet()) { + cmdList.add(one.getKey()); + } + return cmdList; + } + + public List getCommands() { + Map cmd = new HashMap(); + for (Entry one : CommandList.entrySet()) { + cmd.put(one.getKey(), one.getValue().getPriority()); + } + cmd = Residence.getSortingManager().sortByValueASC(cmd); + List cmdList = new ArrayList(); + for (Entry one : cmd.entrySet()) { + cmdList.add(one.getKey()); + } + return cmdList; + } + + public Map fillCommands() { List lm = new ArrayList(); HashMap> classes = new HashMap>(); try { @@ -36,16 +68,25 @@ public Map fillCommands() { } for (Entry> OneClass : classes.entrySet()) { + boolean found = false; for (Method met : OneClass.getValue().getMethods()) { if (!met.isAnnotationPresent(CommandAnnotation.class)) continue; + + found = true; + Boolean simple = met.getAnnotation(CommandAnnotation.class).simple(); + int Priority = met.getAnnotation(CommandAnnotation.class).priority(); + String cmd = OneClass.getKey(); -// if (hidenCommands.contains(cmd.toLowerCase())) -// continue; - CommandList.put(cmd, met.getAnnotation(CommandAnnotation.class).value()); + CommandList.put(cmd, new CommandStatus(simple, Priority)); break; } + if (!found) { + CommandList.put(OneClass.getKey(), new CommandStatus(true, 1000)); + } } + + Bukkit.getConsoleSender().sendMessage("Loaded commands: " + CommandList.size()); return CommandList; } diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 96c3d4dd5..11e0e35da 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -19,6 +19,7 @@ import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; +import com.bekvon.bukkit.residence.containers.CommandStatus; import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; @@ -113,7 +114,7 @@ else if (lm.getText() instanceof ArrayList) c.get("CommandHelp.SubCommands.res.Description", "Main Residence Command"); c.get("CommandHelp.SubCommands.res.Info", Arrays.asList("&2Use &6/res [command] ? &2to view more help Information.")); - for (Entry cmo : Residence.getCommandFiller().CommandList.entrySet()) { + for (Entry cmo : Residence.getCommandFiller().CommandList.entrySet()) { String path = Residence.getLocaleManager().path + cmo.getKey() + "."; try { Class cl = Class.forName(Residence.getCommandFiller().packagePath + "." + cmo.getKey()); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 5fe72b7b4..f337fae6b 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -381,6 +381,8 @@ public void onEnable() { cmdFiller = new CommandFiller(); cmdFiller.fillCommands(); + SortingManager = new Sorting(); + if (!dataFolder.isDirectory()) { dataFolder.mkdirs(); } @@ -425,9 +427,7 @@ public void onEnable() { getFlagUtilManager().load(); try { - Debug.D("spigot 1 "); -// Class.forName("org.bukkit.entity.Player.Spigot"); - Debug.D("spigot 2 "); + Class.forName("org.bukkit.entity.Player.Spigot"); spigotPlatform = true; } catch (Exception e) { } @@ -692,7 +692,6 @@ public void run() { NewLanguageManager = new Language(this); getLM().LanguageReload(); - SortingManager = new Sorting(); AutoSelectionManager = new AutoSelection(); if (wep != null) @@ -765,6 +764,7 @@ public void run() { getServer().getPluginManager().disablePlugin(this); Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - FAILED INITIALIZATION! DISABLED! ERROR:"); Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + Bukkit.getServer().shutdown(); } getShopSignUtilManager().LoadShopVotes(); @@ -858,6 +858,10 @@ public static ResidenceSpoutListener getSpoutListener() { } public static CommandFiller getCommandFiller() { + if (cmdFiller == null) { + cmdFiller = new CommandFiller(); + cmdFiller.fillCommands(); + } return cmdFiller; } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 294ff8260..90a92aa7a 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -13,14 +13,15 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceCommandListener extends Residence { - public static List AdminCommands = Arrays.asList("removeworld", "setowner", "removeall", "signupdate", "listhidden", "listallhidden", "server", "clearflags", - "resreload", "resload", "signconvert", "reload"); +// public static List AdminCommands = Arrays.asList("removeworld", "setowner", "removeall", "signupdate", "listhidden", "listallhidden", "server", "clearflags", +// "resreload", "resload", "signconvert", "reload"); public static List getAdminCommands() { - return AdminCommands; + return Residence.getCommandFiller().getCommands(false); } @Override diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index 7c257d58d..dedee8356 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -16,7 +16,7 @@ public class area implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 3300) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 186987f72..ebc381712 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -16,7 +16,7 @@ public class bank implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 3400) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if ((args.length != 3) && (args.length != 4)) { return false; diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index f7dcf5d81..521bb480a 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -16,7 +16,7 @@ public class check implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 3500) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/clearflags.java b/src/com/bekvon/bukkit/residence/commands/clearflags.java index 349942415..140a10b13 100644 --- a/src/com/bekvon/bukkit/residence/commands/clearflags.java +++ b/src/com/bekvon/bukkit/residence/commands/clearflags.java @@ -16,7 +16,7 @@ public class clearflags implements cmd { @Override - @CommandAnnotation(false) + @CommandAnnotation(simple = false, priority = 3600) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index 759415905..4c7ec4146 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -16,7 +16,7 @@ public class command implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 3000) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { ClaimedResidence res = null; diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index 7770cce2a..ba632e2f9 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -16,7 +16,7 @@ public class compass implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 3200) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/confirm.java b/src/com/bekvon/bukkit/residence/commands/confirm.java index 954e585b6..a4ca46986 100644 --- a/src/com/bekvon/bukkit/residence/commands/confirm.java +++ b/src/com/bekvon/bukkit/residence/commands/confirm.java @@ -15,7 +15,7 @@ public class confirm implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 2400) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { Player player = null; String name = "Console"; diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 0698f160d..94e4ce937 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -17,7 +17,7 @@ public class contract implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 1900) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 82c77b3b0..dbde5722a 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -18,7 +18,7 @@ public class create implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 100) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/current.java b/src/com/bekvon/bukkit/residence/commands/current.java index ca3c84f86..e2a91db7f 100644 --- a/src/com/bekvon/bukkit/residence/commands/current.java +++ b/src/com/bekvon/bukkit/residence/commands/current.java @@ -15,7 +15,7 @@ public class current implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 3100) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 3ca0125b6..315d5b1ce 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -17,7 +17,7 @@ public class expand implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 2000) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index 4c8dcc448..67b7b500f 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -14,7 +14,7 @@ public class flags implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 1200) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { int page = 1; try { diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index 1ef05477e..0a0df930e 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -14,7 +14,7 @@ public class give implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 3800) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/gset.java b/src/com/bekvon/bukkit/residence/commands/gset.java index 3d27fd98f..e4c73ad06 100644 --- a/src/com/bekvon/bukkit/residence/commands/gset.java +++ b/src/com/bekvon/bukkit/residence/commands/gset.java @@ -16,7 +16,7 @@ public class gset implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 4500) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/gui.java b/src/com/bekvon/bukkit/residence/commands/gui.java index a4a6d4e58..286155f5a 100644 --- a/src/com/bekvon/bukkit/residence/commands/gui.java +++ b/src/com/bekvon/bukkit/residence/commands/gui.java @@ -13,7 +13,7 @@ public class gui implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 4600) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 5663fe146..ea66627e8 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -16,7 +16,7 @@ public class info implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 600) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length == 1 && sender instanceof Player) { diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 4998efccf..7e9d1f645 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -20,7 +20,7 @@ public class kick implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 2200) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index 90cf1ba54..6c15531b2 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -16,7 +16,7 @@ public class lease implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 3900) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 0ca1bc2ba..935377ed7 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -16,7 +16,7 @@ public class limits implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 900) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player) && args.length < 2) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 32fee6017..0a6f76cde 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -14,7 +14,7 @@ public class list implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 300) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { int page = 1; try { diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index ca0529567..bb850d011 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -12,7 +12,7 @@ public class listall implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 4200) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { // if (!(sender instanceof Player)) // return false; diff --git a/src/com/bekvon/bukkit/residence/commands/listallhidden.java b/src/com/bekvon/bukkit/residence/commands/listallhidden.java index 77c7a401e..83a259ce4 100644 --- a/src/com/bekvon/bukkit/residence/commands/listallhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listallhidden.java @@ -13,7 +13,7 @@ public class listallhidden implements cmd { @Override - @CommandAnnotation(false) + @CommandAnnotation(simple = false, priority = 4700) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { int page = 1; try { diff --git a/src/com/bekvon/bukkit/residence/commands/listhidden.java b/src/com/bekvon/bukkit/residence/commands/listhidden.java index 26a860438..651779e38 100644 --- a/src/com/bekvon/bukkit/residence/commands/listhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listhidden.java @@ -13,7 +13,7 @@ public class listhidden implements cmd { @Override - @CommandAnnotation(false) + @CommandAnnotation(simple = false, priority = 4800) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { int page = 1; try { diff --git a/src/com/bekvon/bukkit/residence/commands/lists.java b/src/com/bekvon/bukkit/residence/commands/lists.java index dd6d941a2..da041519c 100644 --- a/src/com/bekvon/bukkit/residence/commands/lists.java +++ b/src/com/bekvon/bukkit/residence/commands/lists.java @@ -16,7 +16,7 @@ public class lists implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 4900) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java index 8f34b3493..8f42b5a0f 100644 --- a/src/com/bekvon/bukkit/residence/commands/lset.java +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -17,7 +17,7 @@ public class lset implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 5000) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 25ec41d8f..14b2950f4 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -22,7 +22,7 @@ public class market implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 2600) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index dd7c1b806..e47147249 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -17,7 +17,7 @@ public class material implements cmd { @SuppressWarnings("deprecation") @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 4300) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 42b223478..807e5c073 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -16,7 +16,7 @@ public class message implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 1000) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/mirror.java b/src/com/bekvon/bukkit/residence/commands/mirror.java index f92bfac0f..b850ab78f 100644 --- a/src/com/bekvon/bukkit/residence/commands/mirror.java +++ b/src/com/bekvon/bukkit/residence/commands/mirror.java @@ -14,7 +14,7 @@ public class mirror implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 3700) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index fc18da4a0..18909a339 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -14,7 +14,7 @@ public class padd implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 400) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index 410a03447..788622998 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -15,7 +15,7 @@ public class pdel implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 500) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index b8aee790c..7d042d57c 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -17,7 +17,7 @@ public class pset implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 800) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player) && args.length != 5 && args.length == 4 && !args[3].equalsIgnoreCase("removeall")) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index c7b1b9338..34ceffeed 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -19,7 +19,7 @@ public class rc implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 1100) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return true; diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index a3c0beb58..64f1355b4 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -28,7 +28,7 @@ public class reload implements cmd { @Override - @CommandAnnotation(false) + @CommandAnnotation(simple = false, priority = 5800) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!resadmin && !sender.isOp()) { Residence.msg(sender, lm.General_NoPermission); diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 0ddccbd16..4fd97c186 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -17,7 +17,7 @@ public class remove implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 2300) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { ClaimedResidence res = null; diff --git a/src/com/bekvon/bukkit/residence/commands/removeall.java b/src/com/bekvon/bukkit/residence/commands/removeall.java index 61538ffe2..55db27f92 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeall.java +++ b/src/com/bekvon/bukkit/residence/commands/removeall.java @@ -13,7 +13,7 @@ public class removeall implements cmd { @Override - @CommandAnnotation(false) + @CommandAnnotation(simple = false, priority = 5100) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length != 2 && args.length != 1) { return false; diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index 5ae915bfe..715c3151f 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -14,7 +14,7 @@ public class removeworld implements cmd { @Override - @CommandAnnotation(false) + @CommandAnnotation(simple = false, priority = 5200) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length != 2) diff --git a/src/com/bekvon/bukkit/residence/commands/rename.java b/src/com/bekvon/bukkit/residence/commands/rename.java index 2ab82477a..16f1c5155 100644 --- a/src/com/bekvon/bukkit/residence/commands/rename.java +++ b/src/com/bekvon/bukkit/residence/commands/rename.java @@ -14,7 +14,7 @@ public class rename implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 2700) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/renamearea.java b/src/com/bekvon/bukkit/residence/commands/renamearea.java index 8895019b1..448bb507a 100644 --- a/src/com/bekvon/bukkit/residence/commands/renamearea.java +++ b/src/com/bekvon/bukkit/residence/commands/renamearea.java @@ -16,7 +16,7 @@ public class renamearea implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 2800) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/resadmin.java b/src/com/bekvon/bukkit/residence/commands/resadmin.java index e45f8e69d..12764987b 100644 --- a/src/com/bekvon/bukkit/residence/commands/resadmin.java +++ b/src/com/bekvon/bukkit/residence/commands/resadmin.java @@ -15,7 +15,7 @@ public class resadmin implements cmd { @Override - @CommandAnnotation(false) + @CommandAnnotation(simple = false, priority = 5300) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/resbank.java b/src/com/bekvon/bukkit/residence/commands/resbank.java index 011494e96..804be5c2c 100644 --- a/src/com/bekvon/bukkit/residence/commands/resbank.java +++ b/src/com/bekvon/bukkit/residence/commands/resbank.java @@ -16,7 +16,7 @@ public class resbank implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 1800) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length != 3 && args.length != 4) { diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index 05693bdb0..df85cd676 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -15,7 +15,7 @@ public class reset implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 4400) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 022637843..e31ffb045 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -17,7 +17,7 @@ public class rt implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 2500) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index e4c92399c..c2ce989b9 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -23,7 +23,7 @@ public class select implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 1300) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java index f034882fb..dcd099763 100644 --- a/src/com/bekvon/bukkit/residence/commands/server.java +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -16,7 +16,7 @@ public class server implements cmd { @Override - @CommandAnnotation(false) + @CommandAnnotation(simple = false, priority = 5400) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 86c6f6c35..180416c58 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -17,7 +17,7 @@ public class set implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 700) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player) && args.length != 4) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/setmain.java b/src/com/bekvon/bukkit/residence/commands/setmain.java index daca6c437..a63b16a38 100644 --- a/src/com/bekvon/bukkit/residence/commands/setmain.java +++ b/src/com/bekvon/bukkit/residence/commands/setmain.java @@ -17,7 +17,7 @@ public class setmain implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 2900) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index 25f3848fb..e3cdd290d 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -14,7 +14,7 @@ public class setowner implements cmd { @Override - @CommandAnnotation(false) + @CommandAnnotation(simple = false, priority = 5500) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length < 3) diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 2ce2afa9d..77948e5fc 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -31,7 +31,7 @@ public class shop implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 1700) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/signconvert.java b/src/com/bekvon/bukkit/residence/commands/signconvert.java index 1e93cd9fb..d059a07ea 100644 --- a/src/com/bekvon/bukkit/residence/commands/signconvert.java +++ b/src/com/bekvon/bukkit/residence/commands/signconvert.java @@ -15,7 +15,7 @@ public class signconvert implements cmd { @Override - @CommandAnnotation(false) + @CommandAnnotation(simple = false, priority = 5600) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length != 0) diff --git a/src/com/bekvon/bukkit/residence/commands/signupdate.java b/src/com/bekvon/bukkit/residence/commands/signupdate.java index 02f83840b..20af35c5c 100644 --- a/src/com/bekvon/bukkit/residence/commands/signupdate.java +++ b/src/com/bekvon/bukkit/residence/commands/signupdate.java @@ -13,7 +13,7 @@ public class signupdate implements cmd { @Override - @CommandAnnotation(false) + @CommandAnnotation(simple = false, priority = 5700) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length == 1) { if (!resadmin) { diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java index fa60acfa4..005d240dd 100644 --- a/src/com/bekvon/bukkit/residence/commands/sublist.java +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -16,7 +16,7 @@ public class sublist implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 4100) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index 4a1767ced..fa609486a 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -16,7 +16,7 @@ public class subzone implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 2100) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index 1c089977b..75cdb861c 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -17,7 +17,7 @@ public class tool implements cmd { @SuppressWarnings("deprecation") @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 1600) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index 7e8720b07..3228c5dcd 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -16,7 +16,7 @@ public class tp implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 1400) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java index 0b47b0aa2..4eba531f8 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java +++ b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java @@ -15,7 +15,7 @@ public class tpconfirm implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 1500) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/tpset.java b/src/com/bekvon/bukkit/residence/commands/tpset.java index a9005ee3c..801e39896 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpset.java +++ b/src/com/bekvon/bukkit/residence/commands/tpset.java @@ -16,7 +16,7 @@ public class tpset implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 200) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index 8b100c57d..a9725ae83 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -18,7 +18,7 @@ public class unstuck implements cmd { @Override - @CommandAnnotation(true) + @CommandAnnotation(simple = true, priority = 4000) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/version.java b/src/com/bekvon/bukkit/residence/commands/version.java index 59d656feb..107c151e5 100644 --- a/src/com/bekvon/bukkit/residence/commands/version.java +++ b/src/com/bekvon/bukkit/residence/commands/version.java @@ -13,7 +13,7 @@ public class version implements cmd { @Override - @CommandAnnotation(false) + @CommandAnnotation(simple = false, priority = 5900) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { sender.sendMessage(ChatColor.GRAY + "------------------------------------"); sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + Residence diff --git a/src/com/bekvon/bukkit/residence/containers/CommandAnnotation.java b/src/com/bekvon/bukkit/residence/containers/CommandAnnotation.java index 2f00a1a39..91123fca2 100644 --- a/src/com/bekvon/bukkit/residence/containers/CommandAnnotation.java +++ b/src/com/bekvon/bukkit/residence/containers/CommandAnnotation.java @@ -8,5 +8,7 @@ @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.METHOD }) public @interface CommandAnnotation { - boolean value(); + boolean simple(); + + int priority(); } diff --git a/src/com/bekvon/bukkit/residence/containers/CommandStatus.java b/src/com/bekvon/bukkit/residence/containers/CommandStatus.java new file mode 100644 index 000000000..893af69ea --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/CommandStatus.java @@ -0,0 +1,28 @@ +package com.bekvon.bukkit.residence.containers; + +public class CommandStatus { + + private Boolean simple; + private Integer priority; + + public CommandStatus(Boolean simple, Integer priority) { + this.simple = simple; + this.priority = priority; + } + + public Integer getPriority() { + return priority; + } + + public void setPriority(Integer priority) { + this.priority = priority; + } + + public Boolean getSimple() { + return simple; + } + + public void setSimple(Boolean simple) { + this.simple = simple; + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/cmd.java b/src/com/bekvon/bukkit/residence/containers/cmd.java index 038a92a8c..24b20fb9e 100644 --- a/src/com/bekvon/bukkit/residence/containers/cmd.java +++ b/src/com/bekvon/bukkit/residence/containers/cmd.java @@ -4,6 +4,7 @@ import org.bukkit.command.CommandSender; public interface cmd { + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender); public void getLocale(ConfigReader c, String path); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index e24a8bca5..cb58811de 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -473,7 +473,6 @@ public void onHangingPlace(HangingPlaceEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreak(HangingBreakByEntityEvent event) { - Debug.D("1"); // disabling event on world Hanging ent = event.getEntity(); if (ent == null) @@ -502,8 +501,6 @@ public void onHangingBreak(HangingBreakByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { - - Debug.D("2"); // disabling event on world Hanging ent = event.getEntity(); if (ent == null) @@ -831,7 +828,6 @@ public void OnPlayerDamageByLightning(EntityDamageEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { - Debug.D("3"); // disabling event on world if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) return; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 81cb1132b..e6aa43d5e 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -11,6 +11,8 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -238,6 +240,7 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { String thisname = split[split.length - 1]; HelpEntry entry = new HelpEntry(thisname); ConfigurationSection keysnode = node.getConfigurationSection(key); + Set keys = null; if (keysnode != null) keys = keysnode.getKeys(false); @@ -256,6 +259,12 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { } if (keys.contains("SubCommands")) { Set subcommandkeys = node.getConfigurationSection(key + ".SubCommands").getKeys(false); + if (key.equalsIgnoreCase("CommandHelp.SubCommands.res")) { + subcommandkeys.clear(); + for (String one : Residence.getCommandFiller().getCommands()) { + subcommandkeys.add(one); + } + } for (String subkey : subcommandkeys) { entry.subentrys.add(HelpEntry.parseHelp(node, key + ".SubCommands." + subkey)); } diff --git a/src/com/bekvon/bukkit/residence/utils/Sorting.java b/src/com/bekvon/bukkit/residence/utils/Sorting.java index e56f4b54c..b2de0bfed 100644 --- a/src/com/bekvon/bukkit/residence/utils/Sorting.java +++ b/src/com/bekvon/bukkit/residence/utils/Sorting.java @@ -13,6 +13,29 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class Sorting { + + public Map sortByValueASC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return (o1.getValue()).compareTo(o2.getValue()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + public Map sortByValueDESC(Map unsortMap) { // Convert Map to List From 04953b2700368526b4b1cb2bff2cb3a6fe5a2076 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Jul 2016 13:47:20 +0300 Subject: [PATCH 0214/1142] Use new tabcomplete mechanic --- .../bukkit/residence/commands/pset.java | 4 +- .../bekvon/bukkit/residence/commands/set.java | 2 +- .../bukkit/residence/text/help/HelpEntry.java | 156 +++++++++--------- 3 files changed, 78 insertions(+), 84 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 7d042d57c..0d480cdce 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -102,7 +102,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Set flags on a specific player for a Residence."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]", "[flag]", - "[true%%false%%remove]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]%%[flag]", "[flag]%%true%%false%%remove", + "true%%false%%remove")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 180416c58..3fb277e97 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -69,6 +69,6 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Set general flags on a Residence"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res set [flag] [true/false/remove]", "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[flag]", "[true%%false%%remove]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[flag]", "[flag]%%true%%false%%remove", "true%%false%%remove")); } } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index e6aa43d5e..faf130974 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.HelpLines; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -318,98 +319,91 @@ public Set getSubCommands(CommandSender sender, String[] args) { tempmeinPath = tempmeinPath.getConfigurationSection(args[i]); } - String Args = (tempmeinPath.isString("Args") ? tempmeinPath.getString("Args") : null); - List ArgsList = new ArrayList(); - if (Args != null) - if (Args.contains(" ")) - ArgsList.addAll(Arrays.asList(Args.split(" "))); - else - ArgsList.add(Args); + int ii = 0; + for (Entry, List> one : Residence.getLocaleManager().CommandTab.entrySet()) { + + List list = one.getKey(); + + if (list.size() > ii && args.length > ii && list.get(ii).equalsIgnoreCase(args[ii])) { + ArgsList = one.getValue(); + break; + } + i++; + } String NeededArg = null; if (neededArgPlace < ArgsList.size() && neededArgPlace >= 0) NeededArg = ArgsList.get(neededArgPlace); - if (NeededArg != null) - switch (NeededArg) { - case "[playername]": - for (Player one : Bukkit.getOnlinePlayers()) - subCommands.add(one.getName()); - break; - case "[residence]": - if (sender instanceof Player) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); - if (res != null) { - String resName = res.getName(); - if (resName != null) - subCommands.add(resName); + if (NeededArg != null) { + + List list = new ArrayList(); + + if (NeededArg.contains("%%")) { + list.addAll(Arrays.asList(NeededArg.split("%%"))); + } else + list.add(NeededArg); + + for (String oneArg : list) { + switch (oneArg) { + case "[playername]": + for (Player one : Bukkit.getOnlinePlayers()) + subCommands.add(one.getName()); + break; + case "[residence]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getName(); + if (resName != null) + subCommands.add(resName); + } + List resList = Residence.getPlayerManager().getResidencePlayer(((Player) sender)).getResList(); + for (ClaimedResidence oneRes : resList) { + subCommands.add(oneRes.getName()); + } + } else { + ArrayList resList = Residence.getResidenceManager().getResidenceList(Residence.getServerLandname(), true, false, false); + if (resList.size() > 0) + subCommands.addAll(resList); } - ArrayList resList = Residence.getResidenceManager().getResidenceList(((Player) sender).getName(), true, false, false); - if (resList.size() > 0) - subCommands.addAll(resList); - } else { - ArrayList resList = Residence.getResidenceManager().getResidenceList("Server_land", true, false, false); - if (resList.size() > 0) - subCommands.addAll(resList); - } - break; - case "[cresidence]": - if (sender instanceof Player) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); - if (res != null) { - String resName = res.getName(); - if (resName != null) - subCommands.add(resName); + break; + case "[cresidence]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getName(); + if (resName != null) + subCommands.add(resName); + } } + break; + case "[residenceshop]": + subCommands.addAll(Residence.getResidenceManager().getShops()); + break; + case "[flag]": + for (Flags one : Flags.values()) { + subCommands.add(one.getName()); + } + break; + case "[material]": + for (Material one : Material.values()) { + subCommands.add(one.name().toLowerCase()); + } + break; + case "[worldname]": + for (World one : Bukkit.getWorlds()) { + subCommands.add(one.getName()); + } + break; + default: + subCommands.add(oneArg); + break; } - break; - case "[residenceshop]": - subCommands.addAll(Residence.getResidenceManager().getShops()); - break; - case "[flag]": - FlagPermissions GlobalFlags = Residence.getPermissionManager().getAllFlags(); - for (Entry one : GlobalFlags.getFlags().entrySet()) { - subCommands.add(one.getKey()); - } - break; - case "[deposit/withdraw]": - subCommands.add("deposit"); - subCommands.add("withdraw"); - break; - case "[enter/leave]": - subCommands.add("enter"); - subCommands.add("leave"); - break; - case "[renew/cost]": - subCommands.add("renew"); - subCommands.add("cost"); - break; - case "[true/false]": - subCommands.add("true"); - subCommands.add("false"); - break; - case "[true/false/remove]": - subCommands.add("true"); - subCommands.add("false"); - subCommands.add("remove"); - break; - case "[blacklist/ignorelist]": - subCommands.add("blacklist"); - subCommands.add("ignorelist"); - break; - case "[material]": - for (Material one : Material.values()) { - subCommands.add(one.name().toLowerCase()); - } - break; - case "[worldname]": - for (World one : Bukkit.getWorlds()) { - subCommands.add(one.getName()); - } - break; } + } String command = tempmeinPath.getCurrentPath().replace("CommandHelp.SubCommands.", "").replace(".SubCommands.", " "); if (subCommands.size() > 0) { From feec094f705e12f49254dff3beaea5ece628e2f1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Jul 2016 16:34:36 +0300 Subject: [PATCH 0215/1142] Cleanup and tabcomplete args fix --- src/com/bekvon/bukkit/residence/CommandFiller.java | 5 ----- src/com/bekvon/bukkit/residence/LocaleManager.java | 12 +++++++++--- src/com/bekvon/bukkit/residence/Residence.java | 6 +++--- .../bukkit/residence/ResidenceCommandListener.java | 9 +++++---- src/com/bekvon/bukkit/residence/commands/bank.java | 2 +- .../bekvon/bukkit/residence/commands/command.java | 2 ++ .../bekvon/bukkit/residence/commands/contract.java | 1 + src/com/bekvon/bukkit/residence/commands/expand.java | 1 + src/com/bekvon/bukkit/residence/commands/gui.java | 4 ++++ src/com/bekvon/bukkit/residence/commands/lease.java | 2 +- src/com/bekvon/bukkit/residence/commands/lset.java | 4 ++-- src/com/bekvon/bukkit/residence/commands/market.java | 9 +++++---- .../bekvon/bukkit/residence/commands/material.java | 2 +- .../bekvon/bukkit/residence/commands/message.java | 2 +- src/com/bekvon/bukkit/residence/commands/padd.java | 2 +- src/com/bekvon/bukkit/residence/commands/pdel.java | 2 +- src/com/bekvon/bukkit/residence/commands/rc.java | 1 + src/com/bekvon/bukkit/residence/commands/reload.java | 2 +- .../bekvon/bukkit/residence/commands/resadmin.java | 2 +- .../bekvon/bukkit/residence/commands/resbank.java | 2 +- src/com/bekvon/bukkit/residence/commands/rt.java | 3 ++- src/com/bekvon/bukkit/residence/commands/shop.java | 3 ++- src/com/bekvon/bukkit/residence/containers/lm.java | 3 ++- src/com/bekvon/bukkit/residence/gui/SetFlag.java | 7 +++++-- .../residence/listeners/ResidenceBlockListener.java | 2 +- .../residence/listeners/ResidenceEntityListener.java | 4 +--- .../residence/listeners/ResidencePlayerListener.java | 8 ++++---- .../bukkit/residence/listeners/SpigotListener.java | 3 ++- .../residence/protection/ResidenceManager.java | 1 - .../bekvon/bukkit/residence/text/help/HelpEntry.java | 11 ++++++----- 30 files changed, 67 insertions(+), 50 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/CommandFiller.java b/src/com/bekvon/bukkit/residence/CommandFiller.java index 4f65cb105..40c3b297d 100644 --- a/src/com/bekvon/bukkit/residence/CommandFiller.java +++ b/src/com/bekvon/bukkit/residence/CommandFiller.java @@ -13,11 +13,8 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; -import org.bukkit.Bukkit; - import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.CommandStatus; -import com.bekvon.bukkit.residence.utils.Debug; public class CommandFiller { @@ -85,8 +82,6 @@ public Map fillCommands() { CommandList.put(OneClass.getKey(), new CommandStatus(true, 1000)); } } - - Bukkit.getConsoleSender().sendMessage("Loaded commands: " + CommandList.size()); return CommandList; } diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 11e0e35da..cee7894b6 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -53,7 +53,6 @@ private static YamlConfiguration loadConfiguration(BufferedReader in, String lan } // Language file - @SuppressWarnings("unchecked") public void LoadLang(String lang) { File f = new File(plugin.getDataFolder(), "Language" + File.separator + lang + ".yml"); @@ -101,8 +100,15 @@ public void LoadLang(String lang) { for (lm lm : lm.values()) { if (lm.getText() instanceof String) c.get(lm.getPath(), String.valueOf(lm.getText())); - else if (lm.getText() instanceof ArrayList) - c.get(lm.getPath(), (ArrayList) lm.getText()); + else if (lm.getText() instanceof ArrayList) { + List result = new ArrayList(); + for (Object obj : (ArrayList) lm.getText()) { + if (obj instanceof String) { + result.add((String) obj); + } + } + c.get(lm.getPath(), result); + } if (lm.getComments() != null) writer.addComment(lm.getPath(), lm.getComments()); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f337fae6b..90e6c3232 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -38,6 +38,7 @@ import com.bekvon.bukkit.residence.chat.ChatManager; import com.bekvon.bukkit.residence.containers.ABInterface; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; @@ -84,7 +85,6 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.utils.ActionBar; import com.bekvon.bukkit.residence.utils.CrackShot; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.Sorting; @@ -382,7 +382,7 @@ public void onEnable() { cmdFiller.fillCommands(); SortingManager = new Sorting(); - + if (!dataFolder.isDirectory()) { dataFolder.mkdirs(); } @@ -1238,7 +1238,7 @@ protected boolean loadYml() throws Exception { for (Entry one : resList.entrySet()) { ResidencePermissions perms = one.getValue().getPermissions(); - if (!perms.has("shop", false)) + if (!perms.has(Flags.shop, false)) continue; rmanager.addShop(one.getValue().getName()); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 90a92aa7a..13cd268aa 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -3,6 +3,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.bukkit.ChatColor; @@ -13,15 +14,15 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceCommandListener extends Residence { -// public static List AdminCommands = Arrays.asList("removeworld", "setowner", "removeall", "signupdate", "listhidden", "listallhidden", "server", "clearflags", -// "resreload", "resload", "signconvert", "reload"); + private static List AdminCommands = new ArrayList(); public static List getAdminCommands() { - return Residence.getCommandFiller().getCommands(false); + if (AdminCommands.size() == 0) + AdminCommands = Residence.getCommandFiller().getCommands(false); + return AdminCommands; } @Override diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index ebc381712..7f6b3cb80 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -61,6 +61,6 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", "You must have the +bank flag.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[deposit%%withdraw]", "[residence]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw", "[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index 4c7ec4146..b1835f0d5 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -89,5 +89,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Info", Arrays.asList("&eUsage: &6/res command ", "Shows list, adds or removes allowed or disabled commands in residence", "Use _ to include command with multiple variables")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%allow%%block%%list", + "allow%%block%%list")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 94e4ce937..be9e98d63 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -106,6 +106,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Contracts residence in direction you looking"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res contract (residence) [amount]", "Contracts residence in direction you looking.", "Residence name is optional")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1", "1")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 315d5b1ce..e2723c661 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -107,6 +107,7 @@ else if (args.length == 3) public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Expands residence in direction you looking"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1","1")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/gui.java b/src/com/bekvon/bukkit/residence/commands/gui.java index 286155f5a..e3b05f3fb 100644 --- a/src/com/bekvon/bukkit/residence/commands/gui.java +++ b/src/com/bekvon/bukkit/residence/commands/gui.java @@ -1,5 +1,7 @@ package com.bekvon.bukkit.residence.commands; +import java.util.Arrays; + import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -33,5 +35,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command @Override public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Opens gui (Spout only)"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res gui ")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index 6c15531b2..ebd04eb5d 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -112,7 +112,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Manage residence leases"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[renew%%cost]", "[residence]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("renew%%cost", "[residence]")); // Sub commands path += "SubCommands."; diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java index 8f42b5a0f..fb1bade41 100644 --- a/src/com/bekvon/bukkit/residence/commands/lset.java +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -85,7 +85,7 @@ public void getLocale(ConfigReader c, String path) { "&eUsage: &6/res lset Info", "Blacklisting a material prevents it from being placed in the residence.", "Ignorelist causes a specific material to not be protected by Residence.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[blacklist%%ignorelist]", - "[material]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), + Arrays.asList("[residence]%%blacklist%%ignorelist", "blacklist%%ignorelist%%[material]", "[material]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 14b2950f4..f95b63c9e 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -421,6 +421,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "list.Description", "Lists rentable and for sale residences."); c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res market list [rent/sell]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("rent%%sell")); c.get(path + "list.SubCommands.rent.Description", "Lists rentable residences."); c.get(path + "list.SubCommands.rent.Info", Arrays.asList("&eUsage: &6/res market list rent")); @@ -448,7 +449,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "rent.Description", "ent a residence"); c.get(path + "rent.Info", Arrays.asList("&eUsage: &6/res market rent [residence] ", "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rent"), Arrays.asList("[cresidence]", "[true%%false]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rent"), Arrays.asList("[cresidence]", "true%%false")); c.get(path + "rentable.Description", "Make a residence rentable."); c.get(path + "rentable.Info", Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", @@ -456,12 +457,12 @@ public void getLocale(ConfigReader c, String path) { "If is true, the residence will be able to be rented again before rent expires.", "If is true, the residence will stay in market after last renter will be removed.", "If is true, money for rent will be automaticaly taken from players balance if he chosen that option when renting")); - c.get(path + "rentable.Args", "[residence]"); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rentable"), Arrays.asList("[residence]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rentable"), Arrays.asList("[residence]", "1000", "7", "true", "true", + "true")); c.get(path + "autopay.Description", "Sets residence AutoPay to given value"); c.get(path + "autopay.Info", Arrays.asList("&eUsage: &6/res market autopay [true/false]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "autopay"), Arrays.asList("[residence]", "[true%%false]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "autopay"), Arrays.asList("[residence]%%true%%false", "true%%false")); c.get(path + "payrent.Description", "Pays rent for defined residence"); c.get(path + "payrent.Info", Arrays.asList("&eUsage: &6/res market payrent ")); diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index e47147249..c7b46f2e8 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -38,6 +38,6 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Check if material exists by its id"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res material [material]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[material]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[materialId]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 807e5c073..8e2c3756c 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -105,6 +105,6 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Manage residence enter / leave messages"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[enter%%leave]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%enter%%leave", "enter%%leave")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index 18909a339..6c4025268 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -44,6 +44,6 @@ public void getLocale(ConfigReader c, String path) { // Main command c.get(path + "Description", "Add player to residence."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res padd [player]", "Adds essential flags for player")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index 788622998..13d94327e 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -41,7 +41,7 @@ public void getLocale(ConfigReader c, String path) { // Main command c.get(path + "Description", "Remove player from residence."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res pdel [player]", "Removes essential flags from player")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index 34ceffeed..f90a2e832 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -209,5 +209,6 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "kick.Description", "Kicks player from chanel"); c.get(path + "kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", "Kicks player from chanel")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "kick"), Arrays.asList("[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index 64f1355b4..c119455d8 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -96,6 +96,6 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "reload lanf or config files"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res reload [config/lang/groups/flags]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[config%%lang%%groups%%flags]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("config%%lang%%groups%%flags")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/resadmin.java b/src/com/bekvon/bukkit/residence/commands/resadmin.java index 12764987b..cf93d12b3 100644 --- a/src/com/bekvon/bukkit/residence/commands/resadmin.java +++ b/src/com/bekvon/bukkit/residence/commands/resadmin.java @@ -37,6 +37,6 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Enabled or disable residence admin"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res resadmin [on/off]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[on%%off]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("on%%off")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/resbank.java b/src/com/bekvon/bukkit/residence/commands/resbank.java index 804be5c2c..cad28af71 100644 --- a/src/com/bekvon/bukkit/residence/commands/resbank.java +++ b/src/com/bekvon/bukkit/residence/commands/resbank.java @@ -62,6 +62,6 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Deposit or widraw money from residence bank"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res resbank [deposit/withdraw] [amount]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[deposit%%withdraw]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw","1")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index e31ffb045..4a353130d 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -90,6 +90,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command @Override public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Teleports to random location in world"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res rt", "Teleports you to random location in defined world.")); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res rt (worldname)", "Teleports you to random location in defined world.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 77948e5fc..a106c6ebc 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -474,7 +474,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "vote.Description", "Vote for residence shop"); c.get(path + "vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", "Votes for current or defined residence")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "vote"), Arrays.asList("[residence]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "vote"), Arrays.asList("[residence]", "10")); c.get(path + "like.Description", "Give like for residence shop"); c.get(path + "like.Info", Arrays.asList("&eUsage: &6/res shop like ", "Gives like for residence shop")); @@ -494,6 +494,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "createboard.Description", "Create res shop board"); c.get(path + "createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", "Creates res shop board from selected area. Place - position from which to start filling board")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "createboard"), Arrays.asList("1")); c.get(path + "deleteboard.Description", "Deletes res shop board"); c.get(path + "deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", "Deletes res shop board bi right clicking on one of signs")); diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 00fee0f5c..93de23623 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence.containers; +import java.util.ArrayList; import java.util.Arrays; public enum lm { @@ -280,7 +281,7 @@ public enum lm { Gui_Set_Title("&6%1 flags"), Gui_Pset_Title("&6%1 %2 flags"), - Gui_Actions(Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove")), + Gui_Actions(new ArrayList(Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove"))), InformationPage_TopLine("&e---< &a %1 &e >---"), InformationPage_Page("&e-----< &6%1 &e>-----"), diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index f9d05dd1e..45b4a9820 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -20,6 +20,7 @@ import org.bukkit.inventory.meta.ItemMeta; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; @@ -276,8 +277,10 @@ public void recalculateResidence(ClaimedResidence res) { @SuppressWarnings("incomplete-switch") public void recalculatePlayer(ClaimedResidence res) { - - Map globalFlags = Residence.getPermissionManager().getAllFlags().getFlags(); + Map globalFlags = new HashMap(); + for (Flags oneFlag : Flags.values()) { + globalFlags.put(oneFlag.getName(), oneFlag.isEnabled()); + } List flags = res.getPermissions().getPosibleFlags(player, false, this.admin); Map resFlags = new HashMap(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 200574c32..8a0995525 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -418,7 +418,7 @@ public void onBlockFromTo(BlockFromToEvent event) { if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) return; FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); - boolean hasflow = perms.has("flow", true); + boolean hasflow = perms.has(Flags.flow, true); Material mat = event.getBlock().getType(); if (!hasflow) { event.setCancelled(true); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index cb58811de..6b2714d01 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -7,8 +7,6 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -906,7 +904,7 @@ public void onEntityDamage(EntityDamageEvent event) { Entity damager = attackevent.getDamager(); if (area != null && ent instanceof Player && damager instanceof Player) { - if (area.getPermissions().has("overridepvp", false) || Residence.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, false)) { + if (area.getPermissions().has(Flags.overridepvp, false) || Residence.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, false)) { Player player = (Player) event.getEntity(); Damageable damage = player; damage.damage(event.getDamage()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 8a800fd22..eb7afc239 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -259,7 +259,7 @@ public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { if (event.isCancelled()) return; - if (!event.getFlag().equalsIgnoreCase("day") && !event.getFlag().equalsIgnoreCase("night")) + if (!event.getFlag().equalsIgnoreCase(Flags.day.getName()) && !event.getFlag().equalsIgnoreCase(Flags.night.getName())) return; switch (event.getNewState()) { @@ -682,7 +682,7 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { @SuppressWarnings("deprecation") private static boolean isContainer(Material mat, Block block) { - return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") || Residence + return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container.getName()) || Residence .getConfigManager().getCustomContainers().contains(block.getTypeId()); } @@ -1481,7 +1481,7 @@ public void run() { } if (move) { - if (!res.getPermissions().playerHas(pname, "move", true) && !Residence.isResAdminOn(player) && !res.isOwner(player)) { + if (!res.getPermissions().playerHas(pname, Flags.move, true) && !Residence.isResAdminOn(player) && !res.isOwner(player)) { Location lastLoc = lastOutsideLoc.get(pname); if (Residence.getConfigManager().BounceAnimation()) { @@ -1492,7 +1492,7 @@ public void run() { ClaimedResidence preRes = Residence.getResidenceManager().getByLoc(lastLoc); - if (preRes != null && !preRes.getPermissions().playerHas(pname, "tp", true) && !player.hasPermission("residence.admin.tp")) { + if (preRes != null && !preRes.getPermissions().playerHas(pname, Flags.tp, true) && !player.hasPermission("residence.admin.tp")) { Location newLoc = res.getOutsideFreeLoc(loc, player); player.teleport(newLoc); } else if (lastLoc != null) { diff --git a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java index 111d30abd..447a344de 100644 --- a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java @@ -10,6 +10,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions; public class SpigotListener implements Listener { @@ -22,7 +23,7 @@ public void onItemDamage(PlayerItemDamageEvent event) { Player player = event.getPlayer(); Location loc = player.getLocation(); FlagPermissions perms = Residence.getPermsByLoc(loc); - if (perms.has("nodurability", false)) { + if (perms.has(Flags.nodurability, false)) { ItemStack held = Residence.getNms().itemInMainHand(player); if (held.getType() != Material.AIR) { held.setDurability(held.getDurability()); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index fa6994680..d42288c4c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -33,7 +33,6 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.GetTime; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index faf130974..f1b64159d 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -12,8 +12,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -274,6 +272,7 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { return entry; } + @SuppressWarnings("deprecation") public Set getSubCommands(CommandSender sender, String[] args) { File langFile = new File(new File(Residence.getDataLocation(), "Language"), "English.yml"); Set subCommands = new HashSet(); @@ -323,12 +322,9 @@ public Set getSubCommands(CommandSender sender, String[] args) { int ii = 0; for (Entry, List> one : Residence.getLocaleManager().CommandTab.entrySet()) { - List list = one.getKey(); - if (list.size() > ii && args.length > ii && list.get(ii).equalsIgnoreCase(args[ii])) { ArgsList = one.getValue(); - break; } i++; } @@ -393,6 +389,11 @@ public Set getSubCommands(CommandSender sender, String[] args) { subCommands.add(one.name().toLowerCase()); } break; + case "[materialId]": + for (Material one : Material.values()) { + subCommands.add(String.valueOf(one.getId())); + } + break; case "[worldname]": for (World one : Bukkit.getWorlds()) { subCommands.add(one.getName()); From 5e5a37740f0348b2a3819bc990bde2ec83deb387 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jul 2016 12:57:52 +0300 Subject: [PATCH 0216/1142] Protect armorstands from fire damage --- .../bukkit/residence/ConfigManager.java | 55 +++++++++++-------- .../bekvon/bukkit/residence/Residence.java | 8 ++- .../listeners/ResidenceEntityListener.java | 21 ++++++- .../residence/utils/ParticleEffects.java | 8 ++- src/plugin.yml | 2 +- 5 files changed, 64 insertions(+), 30 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 6d0cd7490..63bb695ce 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -818,12 +818,13 @@ public void UpdateConfigFile() { } } - if (SelectedSpigotFrame == null) { - SelectedSpigotFrame = Effect.getByName("HAPPY_VILLAGER"); - if (SelectedSpigotFrame == null) - SelectedSpigotFrame = Effect.values()[0]; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } + if (Residence.isSpigot()) + if (SelectedSpigotFrame == null) { + SelectedSpigotFrame = Effect.getByName("HAPPY_VILLAGER"); + if (SelectedSpigotFrame == null) + SelectedSpigotFrame = Effect.values()[0]; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } // Sides efname = c.get("Global.Visualizer.Selected.Sides", "reddust"); @@ -839,13 +840,15 @@ public void UpdateConfigFile() { break; } } - if (SelectedSpigotSides == null) { - SelectedSpigotSides = Effect.getByName("COLOURED_DUST"); - if (SelectedSpigotSides == null) - SelectedSpigotSides = Effect.values()[0]; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } + if (Residence.isSpigot()) + if (SelectedSpigotSides == null) { + SelectedSpigotSides = Effect.getByName("COLOURED_DUST"); + if (SelectedSpigotSides == null) + SelectedSpigotSides = Effect.values()[0]; + + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } efname = c.get("Global.Visualizer.Overlap.Frame", "FLAME"); OverlapFrame = ParticleEffects.fromName(efname); @@ -861,12 +864,14 @@ public void UpdateConfigFile() { break; } } - if (OverlapSpigotFrame == null) { - OverlapSpigotFrame = Effect.getByName("FLAME"); - if (OverlapSpigotFrame == null) - OverlapSpigotFrame = Effect.values()[0]; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } + + if (Residence.isSpigot()) + if (OverlapSpigotFrame == null) { + OverlapSpigotFrame = Effect.getByName("FLAME"); + if (OverlapSpigotFrame == null) + OverlapSpigotFrame = Effect.values()[0]; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } efname = c.get("Global.Visualizer.Overlap.Sides", "FLAME"); OverlapSides = ParticleEffects.fromName(efname); @@ -881,12 +886,14 @@ public void UpdateConfigFile() { break; } } - if (OverlapSpigotSides == null) { - OverlapSpigotSides = Effect.getByName("FLAME"); - if (OverlapSpigotSides == null) - OverlapSpigotSides = Effect.values()[0]; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } + + if (Residence.isSpigot()) + if (OverlapSpigotSides == null) { + OverlapSpigotSides = Effect.getByName("FLAME"); + if (OverlapSpigotSides == null) + OverlapSpigotSides = Effect.values()[0]; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } c.getW().addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); BounceAnimation = c.get("Global.BounceAnimation", true); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 90e6c3232..b78b44837 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -12,6 +12,7 @@ import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -427,8 +428,11 @@ public void onEnable() { getFlagUtilManager().load(); try { - Class.forName("org.bukkit.entity.Player.Spigot"); - spigotPlatform = true; + Class c = Class.forName("org.bukkit.entity.Player"); + for (Method one : c.getDeclaredMethods()) { + if (one.getName().equalsIgnoreCase("Spigot")) + spigotPlatform = true; + } } catch (Exception e) { } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 6b2714d01..42b7b8faf 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -806,7 +806,27 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { if (!srcpvp || !tgtpvp) event.setCancelled(true); } + + @EventHandler + public void OnArmorStandFlameDamage(EntityDamageEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + if (event.getCause() != DamageCause.FIRE_TICK) + return; + Entity ent = event.getEntity(); + + if (!Residence.getNms().isArmorStandEntity(ent.getType())) + return; + if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)){ + event.setCancelled(true); + ent.setFireTicks(0); + } + } + @EventHandler public void OnPlayerDamageByLightning(EntityDamageEvent event) { // disabling event on world @@ -825,7 +845,6 @@ public void OnPlayerDamageByLightning(EntityDamageEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { - // disabling event on world if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) return; diff --git a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java index 6949af721..ac0ca4cba 100644 --- a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java +++ b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java @@ -1309,7 +1309,7 @@ public ParticleVersionException(String message) { * @since 1.5 */ public static final class ParticlePacket { - private static int version; + private static int version = 7; private static Class enumParticle; private static Constructor packetConstructor; private static Method getHandle; @@ -1398,7 +1398,11 @@ public static void initialize() throws VersionIncompatibleException { return; } try { - version = Integer.parseInt(Character.toString(ReflectionUtils.PackageType.getServerVersion().charAt(3))); + version = Integer.parseInt(ReflectionUtils.PackageType.getServerVersion().split("_")[1]); + } catch (Exception exception) { + throw new VersionIncompatibleException("Your current bukkit version seems to be incompatible with this library", exception); + } + try { if (version > 7) { enumParticle = PackageType.MINECRAFT_SERVER.getClass("EnumParticle"); } diff --git a/src/plugin.yml b/src/plugin.yml index a86425119..077dd3e8f 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.4.2.0 +version: 4.5.0.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From f426487d8ca8cbbb570531d73fb2c8d03ffe957d Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jul 2016 17:39:24 +0300 Subject: [PATCH 0217/1142] Residence size limitation by giving minimum size for main or subzone --- .../bukkit/residence/ConfigManager.java | 26 ----- .../bekvon/bukkit/residence/Residence.java | 2 +- .../bukkit/residence/commands/contract.java | 2 +- .../bukkit/residence/containers/lm.java | 5 +- .../residence/economy/TransactionManager.java | 3 +- .../permissions/PermissionGroup.java | 108 ++++++++++++++---- .../protection/ClaimedResidence.java | 93 +++++++++++---- .../protection/ResidenceManager.java | 2 +- .../residence/selection/SelectionManager.java | 11 +- src/plugin.yml | 2 +- 10 files changed, 177 insertions(+), 77 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 63bb695ce..4da2901c8 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -95,10 +95,6 @@ public class ConfigManager { protected int VisualizerRange; protected int VisualizerShowFor; protected int VisualizerUpdateInterval; - protected int MinimalResSize; - protected int MinimalResX; - protected int MinimalResY; - protected int MinimalResZ; protected int TeleportDelay; protected boolean TeleportTitleMessage; protected int VisualizerRowSpacing; @@ -529,12 +525,6 @@ public void UpdateConfigFile() { "Keep it at low number, as player always can try again after delay"); rtMaxTries = c.get("Global.RandomTeleportation.MaxTries", 20); - c.getW().addComment("Global.Size.MinimalSize", "Minimal size of residence in blocks", "1000 is 10x10x10 residence size"); - MinimalResSize = c.get("Global.Size.MinimalSize", 100); - MinimalResX = c.get("Global.Size.MinimalX", 10); - MinimalResY = c.get("Global.Size.MinimalY", 10); - MinimalResZ = c.get("Global.Size.MinimalZ", 10); - c.getW().addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); autoSaveInt = c.get("Global.SaveInterval", 10); @@ -1145,22 +1135,6 @@ public boolean useLegacyPermissions() { return legacyperms; } - public int getMinimalResSize() { - return MinimalResSize; - } - - public int getMinimalResX() { - return MinimalResX; - } - - public int getMinimalResY() { - return MinimalResY; - } - - public int getMinimalResZ() { - return MinimalResZ; - } - public String getDefaultGroup() { return defaultGroup; } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index b78b44837..b33281867 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -758,7 +758,7 @@ public void run() { } catch (IOException e) { // Failed to submit the stats :-( } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Enabled! Version " + this.getDescription().getVersion() + " by bekvon"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Enabled! Version " + this.getDescription().getVersion() + " by Zrips"); initsuccess = true; PlayerManager.fillList(); diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index be9e98d63..ea3f84987 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -84,7 +84,7 @@ else if (args.length == 3) if (amount < 0) amount = 1; - if (!Residence.getSelectionManager().contract(player, amount, resadmin)) + if (!Residence.getSelectionManager().contract(player, amount)) return true; if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 93de23623..c49238413 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -31,10 +31,13 @@ public enum lm { Area_SubzoneCollision("&cArea collides with subzone &6%1"), Area_NonExist("&cNo such area exists."), Area_InvalidName("&cInvalid Area Name..."), - Area_ToSmallTotal("&cSelected area smaller than allowed minimal (&6%1&c)"), +// Area_ToSmallTotal("&cSelected area smaller than allowed minimal (&6%1&c)"), Area_ToSmallX("&cYour &6X &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more."), Area_ToSmallY("&cYour selection height (&6%1&c) is too small. &eAllowed &6%2 &eand more."), Area_ToSmallZ("&cYour &6Z &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more."), + Area_ToBigX("&cYour &6X &cselection length (&6%1&c) is too big. &eAllowed &6%2 &eand less."), + Area_ToBigY("&cYour selection height (&6%1&c) is too big. &eAllowed &6%2 &eand less."), + Area_ToBigZ("&cYour &6Z &cselection length (&6%1&c) is too big. &eAllowed &6%2 &eand less."), Area_Rename("&eRenamed area &6%1 &eto &6%2"), Area_Remove("&eRemoved area &6%1..."), Area_Name("&eName: &2%1"), diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index a3f489023..6f9ed7b65 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -170,7 +170,8 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { if (!resadmin && !group.buyLandIgnoreLimits()) { CuboidArea[] areas = res.getAreaArray(); for (CuboidArea thisarea : areas) { - if (!group.inLimits(thisarea)) { + if (!res.isSubzone() && !res.isSmallerThanMax(player, thisarea, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(player, thisarea, + resadmin)) { Residence.msg(player, lm.Residence_BuyTooBig); return; } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index c19cb35eb..66e45bd1f 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -7,7 +7,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import java.util.HashMap; @@ -21,6 +20,19 @@ public class PermissionGroup { protected int xmax; protected int ymax; protected int zmax; + + protected int xmin; + protected int ymin; + protected int zmin; + + protected int Subzonexmax; + protected int Subzoneymax; + protected int Subzonezmax; + + protected int Subzonexmin; + protected int Subzoneymin; + protected int Subzonezmin; + protected int resmax; protected double costperarea; protected double sellperarea = 0; @@ -92,13 +104,39 @@ private void parseGroup(ConfigurationSection limits) { cancreate = limits.getBoolean("Residence.CanCreate", false); resmax = limits.getInt("Residence.MaxResidences", 0); maxPhysical = limits.getInt("Residence.MaxAreasPerResidence", 2); + xmax = limits.getInt("Residence.MaxEastWest", 0); + xmin = limits.getInt("Residence.MinEastWest", 0); + xmin = xmin > xmax ? xmax : xmin; + ymax = limits.getInt("Residence.MaxUpDown", 0); + ymin = limits.getInt("Residence.MinUpDown", 0); + ymin = ymin > ymax ? ymax : ymin; + zmax = limits.getInt("Residence.MaxNorthSouth", 0); + zmin = limits.getInt("Residence.MinNorthSouth", 0); + zmin = zmin > zmax ? zmax : zmin; + minHeight = limits.getInt("Residence.MinHeight", 0); maxHeight = limits.getInt("Residence.MaxHeight", 255); tpaccess = limits.getBoolean("Residence.CanTeleport", false); subzonedepth = limits.getInt("Residence.SubzoneDepth", 0); + + Subzonexmax = limits.getInt("Residence.SubzoneMaxEastWest", xmax); + Subzonexmax = xmax < Subzonexmax ? xmax : Subzonexmax; + Subzonexmin = limits.getInt("Residence.SubzoneMinEastWest", 0); + Subzonexmin = Subzonexmin > Subzonexmax ? Subzonexmax : Subzonexmin; + + Subzoneymax = limits.getInt("Residence.SubzoneMaxUpDown", ymax); + Subzoneymax = ymax < Subzoneymax ? ymax : Subzoneymax; + Subzoneymin = limits.getInt("Residence.SubzoneMinUpDown", 0); + Subzoneymin = Subzoneymin > Subzoneymax ? Subzoneymax : Subzoneymin; + + Subzonezmax = limits.getInt("Residence.SubzoneMaxNorthSouth", zmax); + Subzonezmax = zmax < Subzonezmax ? zmax : Subzonezmax; + Subzonezmin = limits.getInt("Residence.SubzoneMinNorthSouth", 0); + Subzonezmin = Subzonezmin > Subzonezmax ? Subzonezmax : Subzonezmin; + messageperms = limits.getBoolean("Messaging.CanChange", false); defaultEnterMessage = limits.getString("Messaging.DefaultEnter", null); defaultLeaveMessage = limits.getString("Messaging.DefaultLeave", null); @@ -199,6 +237,42 @@ public int getMaxZ() { return zmax; } + public int getMinX() { + return xmin; + } + + public int getMinY() { + return ymin; + } + + public int getMinZ() { + return zmin; + } + + public int getSubzoneMaxX() { + return Subzonexmax; + } + + public int getSubzoneMaxY() { + return Subzoneymax; + } + + public int getSubzoneMaxZ() { + return Subzonezmax; + } + + public int getSubzoneMinX() { + return Subzonexmin; + } + + public int getSubzoneMinY() { + return Subzoneymin; + } + + public int getSubzoneMinZ() { + return Subzonezmin; + } + public int getMinHeight() { return minHeight; } @@ -211,13 +285,6 @@ public int getMaxZones() { return resmax; } -// public int getMaxZones() { -// int max = Residence.getPlayerManager().getMaxResidences(player); -// if (max != -1) -// return max; -// return resmax; -// } - public double getCostPerBlock() { return costperarea; } @@ -231,9 +298,6 @@ public boolean hasTpAccess() { } public int getMaxSubzoneDepth() { -// int max = Residence.getPlayerManager().getMaxSubzones(player); -// if (max != -1) -// return max; return subzonedepth; } @@ -270,9 +334,6 @@ public boolean canSellLand() { } public int getMaxRents() { -// int max = Residence.getPlayerManager().getMaxRents(player); -// if (max != -1) -// return max; return maxRents; } @@ -320,12 +381,19 @@ public boolean hasFlagAccess(String flag) { return flagPerms.has(flag, false); } - public boolean inLimits(CuboidArea area) { - if (area.getXSize() > xmax || area.getYSize() > ymax || area.getZSize() > zmax) { - return false; - } - return true; - } +// public boolean inLimits(CuboidArea area) { +// if (area.getXSize() > xmax || area.getYSize() > ymax || area.getZSize() > zmax) { +// return false; +// } +// return true; +// } +// +// public boolean inLimitsSubzone(CuboidArea area) { +// if (area.getXSize() > Subzonexmax || area.getYSize() > Subzoneymax || area.getZSize() > Subzonezmax) { +// return false; +// } +// return true; +// } public boolean selectCommandAccess() { return selectCommandAccess; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 29978c222..a727ec984 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -22,7 +22,6 @@ import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; - import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; @@ -177,30 +176,81 @@ public int getSubzoneDeep(int deep) { return deep; } - public static boolean CheckAreaSize(Player player, CuboidArea area, boolean resadmin) { - if (!resadmin && area.getSize() < Residence.getConfigManager().getMinimalResSize()) { - if (player != null) { - Residence.msg(player, lm.Area_ToSmallTotal, Residence.getConfigManager().getMinimalResSize()); - } + public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() < group.getMinX()) { + Residence.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); return false; } + if (area.getYSize() < group.getMinY()) { + Residence.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); + return false; + } + if (area.getZSize() < group.getMinZ()) { + Residence.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); + return false; + } + return true; + } - if (!resadmin && area.getXSize() < Residence.getConfigManager().getMinimalResX()) { - if (player != null) { - Residence.msg(player, lm.Area_ToSmallX, area.getXSize(), Residence.getConfigManager().getMinimalResX()); - } + public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() < group.getSubzoneMinX()) { + Residence.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); return false; } - if (!resadmin && area.getYSize() < Residence.getConfigManager().getMinimalResY()) { - if (player != null) { - Residence.msg(player, lm.Area_ToSmallY, area.getYSize(), Residence.getConfigManager().getMinimalResY()); - } + if (area.getYSize() < group.getSubzoneMinY()) { + Residence.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); return false; } - if (!resadmin && area.getZSize() < Residence.getConfigManager().getMinimalResZ()) { - if (player != null) { - Residence.msg(player, lm.Area_ToSmallZ, area.getZSize(), Residence.getConfigManager().getMinimalResZ()); - } + if (area.getZSize() < group.getSubzoneMinZ()) { + Residence.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); + return false; + } + return true; + } + + public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() > group.getMaxX()) { + Residence.msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); + return false; + } + if (area.getYSize() > group.getMaxY()) { + Residence.msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); + return false; + } + if (area.getZSize() > group.getMaxZ()) { + Residence.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); + return false; + } + return true; + } + + public boolean isSmallerThanMaxSubzone(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() > group.getSubzoneMaxX()) { + Residence.msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); + return false; + } + if (area.getYSize() > group.getSubzoneMaxY()) { + Residence.msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); + return false; + } + if (area.getZSize() > group.getSubzoneMaxZ()) { + Residence.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); return false; } return true; @@ -232,7 +282,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa return false; } - if (!CheckAreaSize(player, area, resadmin)) + if (this.isSubzone() && !isBiggerThanMinSubzone(player, area, resadmin) || !this.isSubzone() && !isBiggerThanMin(player, area, resadmin)) return false; if (!resadmin && Residence.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { @@ -309,7 +359,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa Residence.msg(player, lm.Area_MaxPhysical); return false; } - if (!group.inLimits(area)) { + if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { Residence.msg(player, lm.Area_SizeLimit); return false; } @@ -427,7 +477,8 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole Residence.msg(player, lm.General_NoPermission); return false; } - if (!group.inLimits(newarea)) { + if (oldarea.getSize() < newarea.getSize() && (!this.isSubzone() && !isSmallerThanMaxSubzone(player, newarea, resadmin) || this.isSubzone() + && !isSmallerThanMaxSubzone(player, newarea, resadmin))) { Residence.msg(player, lm.Area_SizeLimit); return false; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index d42288c4c..f54fbdeaa 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -928,7 +928,7 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, } if (!resadmin) { for (CuboidArea area : areas) { - if (!group.inLimits(area)) { + if (!res.isSubzone() && !res.isSmallerThanMax(giveplayer, area, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(giveplayer, area, resadmin)) { Residence.msg(reqPlayer, lm.Residence_GiveLimits); return; } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index d8cf08eba..ca6a2371b 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -5,7 +5,6 @@ import com.bekvon.bukkit.residence.containers.SelectionSides; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import java.util.ArrayList; import java.util.Collections; @@ -687,7 +686,11 @@ public void modify(Player player, boolean shift, double amount) { updateLocations(player, area.getHighLoc(), area.getLowLoc()); } - public boolean contract(Player player, double amount, boolean resadmin) { + public boolean contract(Player player, double amount) { + return contract(player, amount, false); + } + + public boolean contract(Player player, double amount, @SuppressWarnings("unused") boolean resadmin) { if (!hasPlacedBoth(player.getName())) { Residence.msg(player, lm.Select_Points); return false; @@ -747,8 +750,8 @@ public boolean contract(Player player, double amount, boolean resadmin) { break; } - if (!ClaimedResidence.CheckAreaSize(player, area, resadmin)) - return false; +// if (!ClaimedResidence.isBiggerThanMinSubzone(player, area, resadmin)) +// return false; updateLocations(player, area.getHighLoc(), area.getLowLoc()); return true; diff --git a/src/plugin.yml b/src/plugin.yml index 077dd3e8f..11acb3e89 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -5,7 +5,7 @@ website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds,dynmap] -contributors: [lemon42,smbarbour,inorixu,Shayana_fr] +contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: description: Manage Residences From 058eaca86152f5b20c155b40d09e879e305133ce Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jul 2016 17:41:46 +0300 Subject: [PATCH 0218/1142] Update groups file with new entries --- src/groups.yml | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/groups.yml b/src/groups.yml index c62206c21..4ead208c3 100644 --- a/src/groups.yml +++ b/src/groups.yml @@ -15,10 +15,16 @@ Groups: MaxAreasPerResidence: 2 # The maximum number of blocks a Residence can be, East to West (X). MaxEastWest: 16 + # The minimum number of blocks a Residence can be, East to West (X). + MinEastWest: 3 # The maximum number of blocks a Residence can be, North to South (Z). MaxNorthSouth: 16 + # The minimum number of blocks a Residence can be, North to South (Z). + MinNorthSouth: 3 # The maximum number of blocks a Residence can be, High to Low (Y). MaxUpDown: 256 + # The minimum number of blocks a Residence can be, High to Low (Y). + MinUpDown: 3 # The lowest altitude this group is allowed to protect. MinHeight: 0 # The highest altitude this group is allowed to protect. @@ -27,6 +33,18 @@ Groups: # A subzone within a subzone within the Residence zone would be a depth of 2. # Set to 0 to disable subzones. SubzoneDepth: 3 + # (Optional) The maximum number of blocks a Residence Subzone can be, East to West (X). + SubzoneMaxEastWest: 16 + # (Optional) The minimum number of blocks a Residence Subzone can be, East to West (X). + SubzoneMinEastWest: 3 + # (Optional) The maximum number of blocks a Residence Subzone can be, North to South (Z). + SubzoneMaxNorthSouth: 16 + # (Optional) The minimum number of blocks a Residence Subzone can be, North to South (Z). + SubzoneMinNorthSouth: 3 + # (Optional) The maximum number of blocks a Residence Subzone can be, High to Low (Y). + SubzoneMaxUpDown: 256 + # (Optional) The minimum number of blocks a Residence Subzone can be, High to Low (Y). + SubzoneMinUpDown: 3 # Whether or not to allow teleporting to Residences. CanTeleport: true # Allow or Disallow the use of /res unstuck, to get yourself out of a residence if stuck in one somehow @@ -70,9 +88,11 @@ Groups: # Whether or not to ignore the Residence size/count limits when buying a residence. IgnoreLimits: false # The cost, per block, of making a new Residence or adding a area to it. - BuyCost: 0.05 + BuyCost: 0.5 + # The cost, per block, player will be getting back when removing residence. + SellCost: 0.25 # The cost, per block, of renewing a Residence lease (if the lease system is enabled). - RenewCost: 0.02 + RenewCost: 0.2 # Flags are checked in the order: # 1: Player # 2: Group From 9ddccce6e4733a74660662c4099a68bbaf8f0b6f Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 21 Jul 2016 18:15:24 +0300 Subject: [PATCH 0219/1142] LWC support to remove protection on residence remove/buy/unrent Can't put residence for rent if parent is for sale Can't put residence for sale if its subzone or parent is for sale Can't remove residence if its subzone still rented Fix for incorrect residence amount counter --- .../bukkit/residence/ConfigManager.java | 58 +++++++++++++--- .../bukkit/residence/commands/market.java | 2 +- .../residence/containers/ResidencePlayer.java | 12 +--- .../bukkit/residence/containers/lm.java | 6 ++ .../residence/economy/TransactionManager.java | 27 +++++++- .../residence/economy/rent/RentManager.java | 10 ++- .../permissions/PermissionGroup.java | 8 +-- .../protection/ClaimedResidence.java | 42 ++++++++++++ .../protection/ResidenceManager.java | 66 ++++++++++++++++++- src/groups.yml | 6 +- src/plugin.yml | 2 +- 11 files changed, 205 insertions(+), 34 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 4da2901c8..e7146b61a 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -46,6 +46,11 @@ public class ConfigManager { protected boolean useBlockFall; protected boolean NoWaterPlace; protected boolean AutoCleanUp; + protected boolean SellSubzone; + protected boolean LwcOnDelete; + protected boolean LwcOnBuy; + protected boolean LwcOnUnrent; + protected List LwcMatList = new ArrayList(); protected boolean UseClean; protected boolean PvPFlagPrevent; protected boolean OverridePvp; @@ -57,6 +62,7 @@ public class ConfigManager { protected boolean AdminFullAccess; protected String multiworldPlugin; protected boolean enableRentSystem; + protected boolean RentPreventRemoval; protected boolean RentInformOnEnding; protected boolean RentAllowRenewing; protected boolean RentStayInMarket; @@ -555,14 +561,21 @@ public void UpdateConfigFile() { c.getW().addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); - // Not in use currently -// c.getW().addComment("Global.LWC.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", -// "Players can bypass this wih residence.cleanbypass permission node"); -// AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); -// c.getW().addComment("Global.LWC.Days", "For how long player should be offline to delete hes LWC protection on residence removal"); -// AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); -// c.getW().addComment("Global.LWC.Worlds", "Worlds to be included in check list"); -// AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); + c.getW().addComment("Global.Lwc.OnDelete", "Removes lwc protection from all defined objects when removing residence"); + LwcOnDelete = c.get("Global.Lwc.OnDelete", true); + c.getW().addComment("Global.Lwc.OnBuy", "Removes lwc protection from all defined objects when buying residence"); + LwcOnBuy = c.get("Global.Lwc.OnBuy", true); + c.getW().addComment("Global.Lwc.OnUnrent", "Removes lwc protection from all defined objects when unrenting residence"); + LwcOnUnrent = c.get("Global.Lwc.OnUnrent", true); + + c.getW().addComment("Global.Lwc.MaterialList", "List of blocks you want to remove protection from"); + for (String oneName : c.get("Global.Lwc.MaterialList", Arrays.asList("CHEST", "TRAPPED_CHEST", "furnace", "dispenser"))) { + Material mat = Material.getMaterial(oneName.toUpperCase()); + if (mat != null) + LwcMatList.add(mat); + else + Bukkit.getConsoleSender().sendMessage("Incorrect Lwc material name for " + oneName); + } // TNT explosions below 63 c.getW().addComment("Global.AntiGreef.TNT.ExplodeBelow", @@ -656,9 +669,14 @@ public void UpdateConfigFile() { "When enabled extra message will apear in chat if residence is for rent or for sell to inform how he can rent/buy residence with basic information."); ExtraEnterMessage = c.get("Global.ExtraEnterMessage", true); + c.getW().addComment("Global.Sell.Subzone", "If set to true, this will allow to sell subzones. Its recommended to keep it false tho"); + SellSubzone = c.get("Global.Sell.Subzone", false); + c.getW().addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); enableRentSystem = c.get("Global.EnableRentSystem", true); + c.getW().addComment("Global.Rent.PreventRemoval", "Prevents residence/subzone removal if its subzone is still rented by some one"); + RentPreventRemoval = c.get("Global.Rent.PreventRemoval", true); c.getW().addComment("Global.Rent.Inform.OnEnding", "Informs players on rent time ending"); RentInformOnEnding = c.get("Global.Rent.Inform.OnEnding", true); c.getW().addComment("Global.Rent.Inform.Before", "Time range in minutes when to start informing about ending rent"); @@ -1031,10 +1049,18 @@ public boolean isRentStayInMarket() { return RentStayInMarket; } + public boolean isSellSubzone() { + return SellSubzone; + } + public boolean isRentAllowRenewing() { return RentAllowRenewing; } + public boolean isRentPreventRemoval() { + return RentPreventRemoval; + } + public boolean isRentInformOnEnding() { return RentInformOnEnding; } @@ -1191,6 +1217,22 @@ public boolean isNoWaterPlace() { return NoWaterPlace; } + public List getLwcMatList() { + return LwcMatList; + } + + public boolean isRemoveLwcOnUnrent() { + return LwcOnUnrent; + } + + public boolean isRemoveLwcOnBuy() { + return LwcOnBuy; + } + + public boolean isRemoveLwcOnDelete() { + return LwcOnDelete; + } + public boolean isUseResidenceFileClean() { return AutoCleanUp; } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index f95b63c9e..105500d57 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -245,7 +245,7 @@ private static boolean commandResMarketRent(String[] args, boolean resadmin, Pla if (args.length == 2) res = Residence.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 4) + else if (args.length > 2) res = Residence.getResidenceManager().getByName(args[2]); if (res != null) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 885dcc397..cc63ec42d 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -23,7 +23,6 @@ public class ResidencePlayer { private Map ResidenceList = new HashMap(); private ClaimedResidence mainResidence = null; - private int currentRes = -1; private PermissionGroup group = null; @@ -184,7 +183,6 @@ public void recountRes() { ResidenceManager m = Residence.getResidenceManager(); this.ResidenceList = m.getResidenceMapList(this.userName, true); } - recountResAmount(); } private void updateName() { @@ -200,17 +198,12 @@ private void updateName() { } } - public void recountResAmount() { - this.currentRes = this.ResidenceList.size(); - } - public void addResidence(ClaimedResidence residence) { if (residence == null) return; String name = residence.getName(); name = name.toLowerCase(); this.ResidenceList.put(name, residence); - recountResAmount(); } public void removeResidence(String residence) { @@ -218,7 +211,6 @@ public void removeResidence(String residence) { return; residence = residence.toLowerCase(); this.ResidenceList.remove(residence); - recountResAmount(); } public void renameResidence(String oldResidence, String newResidence) { @@ -237,9 +229,7 @@ public void renameResidence(String oldResidence, String newResidence) { } public int getResAmount() { - if (currentRes == -1) - recountResAmount(); - return currentRes; + return ResidenceList.size(); } public List getResList() { diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index c49238413..fd63eb9b9 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -146,6 +146,7 @@ public enum lm { Residence_Create("&eYou have created residence &6%1&e!"), Residence_Rename("&eRenamed Residence &6%1 &eto &6%2"), Residence_Remove("&eResidence &6%1 &ehas been removed..."), + Residence_CantRemove("&cResidence &6%1 &ccant be removed as &6%2 &csubzone is still rented by &6%3"), Residence_MoveDeny("&cYou dont have movement permission for Residence &6%1"), Residence_TeleportNoFlag("&cYou dont have teleport access for that residence."), Residence_FlagDeny("&cYou dont have &6%1 &cpermission for Residence &6%2"), @@ -177,6 +178,7 @@ public enum lm { Residence_ChatDisabled("&eResidence Chat Disabled..."), Residence_DeleteConfirm("&eAre you sure you want to delete residence &6%1&e, use &6/res confirm &eto confirm."), Residence_ChangedMain("&eChainged main residence to &6%1"), + Residence_LwcRemoved("&eRemoved &6%1 &eLwc protections in &6%2ms"), Residence_CanBeRented("&6%1&e can be rented for &6%2 &eper &6%3 &edays. &6/res market rent"), Residence_CanBeBought("&6%1&e can be bought for &6%2&e. &6/res market buy"), @@ -226,7 +228,11 @@ public enum lm { Economy_MoneyCredit("&eCredited &6%1 &eto your &6%2 &eaccount."), Economy_RentReleaseInvalid("&eResidence &6%1 &eis not rented or for rent."), Economy_RentSellFail("&cCannot sell a Residence if it is for rent."), + Economy_SubzoneRentSellFail("&cCannot sell a Residence if its subzone set for rent."), + Economy_ParentRentSellFail("&cCannot sell a Residence if its parent zone is for rent."), + Economy_SubzoneSellFail("&cCannot sell a subzone."), Economy_SellRentFail("&cCannot rent a Residence if it is for sale."), + Economy_ParentSellRentFail("&cCannot rent a Residence if its parent zone is for sale."), Economy_OwnerBuyFail("&cCannot buy your own land!"), Economy_OwnerRentFail("&cCannot rent your own land!"), Economy_AlreadySellFail("&eResidence already for sale!"), diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 6f9ed7b65..ee1db3383 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -72,11 +72,29 @@ public void putForSale(ClaimedResidence res, Player player, int amount, boolean } if (Residence.getConfigManager().enabledRentSystem()) { - if (res.isForRent()) { - Residence.msg(player, lm.Economy_RentSellFail); + if (!resadmin) { + if (res.isForRent()) { + Residence.msg(player, lm.Economy_RentSellFail); + return; + } + if (res.isSubzoneForRent()) { + Residence.msg(player, lm.Economy_SubzoneRentSellFail); + return; + } + if (res.isParentForRent()) { + Residence.msg(player, lm.Economy_ParentRentSellFail); + return; + } + } + } + + if (!Residence.getConfigManager().isSellSubzone()) { + if (res.isSubzone()) { + Residence.msg(player, lm.Economy_SubzoneSellFail); return; } } + if (!resadmin) { if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { Residence.msg(player, lm.Economy_MarketDisabled); @@ -119,7 +137,7 @@ public boolean putForSale(ClaimedResidence res, int amount) { if (res == null) return false; - if (Residence.getConfigManager().enabledRentSystem() && res.isForRent()) + if (Residence.getConfigManager().enabledRentSystem() && (res.isForRent() || res.isSubzoneForRent() || res.isParentForRent())) return false; if (sellAmount.contains(res)) @@ -200,6 +218,9 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { res.getPermissions().applyDefaultFlags(); removeFromSale(res); + if (Residence.getConfigManager().isRemoveLwcOnBuy()) + Residence.getResidenceManager().removeLwcFromResidence(player, res); + Residence.getSignUtil().CheckSign(res); CuboidArea area = res.getAreaArray()[0]; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index d5a12485d..e99634e42 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -152,11 +152,16 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days return; } - if (res.isForSell()) { + if (res.isForSell() && !resadmin) { Residence.msg(player, lm.Economy_SellRentFail); return; } + if (res.isParentForSell() && !resadmin) { + Residence.msg(player, lm.Economy_ParentSellRentFail); + return; + } + if (!resadmin) { if (!res.getPermissions().hasResidencePermission(player, true)) { Residence.msg(player, lm.General_NoPermission); @@ -372,6 +377,9 @@ public void unrent(Player player, ClaimedResidence res, boolean resadmin) { boolean backup = res.getPermissions().has("backup", false); + if (Residence.getConfigManager().isRemoveLwcOnUnrent()) + Residence.getResidenceManager().removeLwcFromResidence(player, res); + res.getPermissions().applyDefaultFlags(); if (Residence.getSchematicManager() != null && Residence.getConfigManager().RestoreAfterRentEnds && backup) { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 66e45bd1f..c69f984b1 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -416,15 +416,15 @@ public void printLimits(CommandSender player, OfflinePlayer target, boolean resa Residence.msg(player, lm.Limits_Admin, Residence.getPermissionManager().isResidenceAdmin(player)); Residence.msg(player, lm.Limits_CanCreate, group.canCreateResidences()); Residence.msg(player, lm.Limits_MaxRes, rPlayer.getMaxRes()); - Residence.msg(player, lm.Limits_MaxEW, group.xmax); - Residence.msg(player, lm.Limits_MaxNS, group.zmax); - Residence.msg(player, lm.Limits_MaxUD, group.ymax); + Residence.msg(player, lm.Limits_NumberOwn, rPlayer.getResAmount()); + Residence.msg(player, lm.Limits_MaxEW, group.xmin + "-" + group.xmax); + Residence.msg(player, lm.Limits_MaxNS, group.zmin + "-" + group.zmax); + Residence.msg(player, lm.Limits_MaxUD, group.ymin + "-" + group.ymax); Residence.msg(player, lm.Limits_MinMax, group.minHeight, group.maxHeight); Residence.msg(player, lm.Limits_MaxSub, rPlayer.getMaxSubzones()); Residence.msg(player, lm.Limits_MaxRents, rPlayer.getMaxRents() + (getMaxRentDays() != -1 ? Residence.msg(lm.Limits_MaxRentDays, getMaxRentDays()) : "")); Residence.msg(player, lm.Limits_EnterLeave, group.messageperms); - Residence.msg(player, lm.Limits_NumberOwn, rPlayer.getResAmount()); if (Residence.getEconomyManager() != null) { Residence.msg(player, lm.Limits_Cost, group.costperarea); Residence.msg(player, lm.Limits_Sell, group.sellperarea); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index a727ec984..b723a727d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -109,6 +109,48 @@ public boolean isForRent() { return Residence.getRentManager().isForRent(this); } + public boolean isSubzoneForRent() { + for (Entry one : subzones.entrySet()) { + if (one.getValue().isForRent()) + return true; + if (one.getValue().isSubzoneForRent()) + return true; + } + return false; + } + + public boolean isSubzoneRented() { + for (Entry one : subzones.entrySet()) { + if (one.getValue().isRented()) + return true; + if (one.getValue().isSubzoneRented()) + return true; + } + return false; + } + + public ClaimedResidence getRentedSubzone() { + for (Entry one : subzones.entrySet()) { + if (one.getValue().isRented()) + return one.getValue(); + if (one.getValue().getRentedSubzone() != null) + return one.getValue().getRentedSubzone(); + } + return null; + } + + public boolean isParentForRent() { + if (this.getParent() != null) + return this.getParent().isForRent() ? true : this.getParent().isParentForRent(); + return false; + } + + public boolean isParentForSell() { + if (this.getParent() != null) + return this.getParent().isForSell() ? true : this.getParent().isParentForSell(); + return false; + } + public boolean isRented() { return Residence.getRentManager().isRented(this); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index f54fbdeaa..1c25c3ba0 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -16,7 +16,9 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -35,6 +37,9 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.GetTime; +import com.griefcraft.cache.ProtectionCache; +import com.griefcraft.lwc.LWC; +import com.griefcraft.model.Protection; public class ResidenceManager implements ResidenceInterface { protected SortedMap residences; @@ -431,6 +436,14 @@ public void removeResidence(Player player, String name, boolean resadmin) { } } + if (Residence.getConfigManager().isRentPreventRemoval() && !resadmin) { + ClaimedResidence rented = res.getRentedSubzone(); + if (rented != null) { + Residence.msg(player, lm.Residence_CantRemove, res.getName(), rented.getName(), rented.getRentedLand().player); + return; + } + } + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); Residence.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) @@ -473,6 +486,9 @@ public void removeResidence(Player player, String name, boolean resadmin) { } } + if (Residence.getConfigManager().isRemoveLwcOnDelete()) + removeLwcFromResidence(player, res); + Residence.msg(player, lm.Residence_Remove, name); } else { @@ -505,6 +521,51 @@ public void removeResidence(Player player, String name, boolean resadmin) { } } + public void removeLwcFromResidence(final Player player, final ClaimedResidence res) { + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + long time = System.currentTimeMillis(); + LWC lwc = Residence.getLwc(); + if (lwc == null) + return; + if (res == null) + return; + int i = 0; + + ProtectionCache cache = lwc.getProtectionCache(); + + List list = Residence.getConfigManager().getLwcMatList(); + + try { + for (CuboidArea area : res.getAreaArray()) { + Location low = area.getLowLoc(); + Location high = area.getHighLoc(); + World world = low.getWorld(); + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + Block b = world.getBlockAt(x, y, z); + if (!list.contains(b.getType())) + continue; + Protection prot = cache.getProtection(b); + if (prot == null) + continue; + prot.remove(); + i++; + } + } + } + } + } catch (Exception e) { + } + if (i > 0) + Residence.msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); + return; + } + }); + } + public void removeAllByOwner(String owner) { ArrayList list = Residence.getPlayerManager().getResidenceList(owner); for (String oneRes : list) { @@ -587,7 +648,7 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi sender.sendMessage(Residence.msg(lm.General_PlayersFlags, perms.listPlayersFlags())); else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Player) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + perms.listPlayersFlagsRaw(sender.getName(), Residence.msg( - "General.PlayersFlags"))); + lm.General_PlayersFlags, ""))); } String groupFlags = perms.listGroupFlags(); @@ -928,7 +989,8 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, } if (!resadmin) { for (CuboidArea area : areas) { - if (!res.isSubzone() && !res.isSmallerThanMax(giveplayer, area, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(giveplayer, area, resadmin)) { + if (!res.isSubzone() && !res.isSmallerThanMax(giveplayer, area, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(giveplayer, area, + resadmin)) { Residence.msg(reqPlayer, lm.Residence_GiveLimits); return; } diff --git a/src/groups.yml b/src/groups.yml index 4ead208c3..af0862b39 100644 --- a/src/groups.yml +++ b/src/groups.yml @@ -15,15 +15,15 @@ Groups: MaxAreasPerResidence: 2 # The maximum number of blocks a Residence can be, East to West (X). MaxEastWest: 16 - # The minimum number of blocks a Residence can be, East to West (X). + # (Optional) The minimum number of blocks a Residence can be, East to West (X). MinEastWest: 3 # The maximum number of blocks a Residence can be, North to South (Z). MaxNorthSouth: 16 - # The minimum number of blocks a Residence can be, North to South (Z). + # (Optional) The minimum number of blocks a Residence can be, North to South (Z). MinNorthSouth: 3 # The maximum number of blocks a Residence can be, High to Low (Y). MaxUpDown: 256 - # The minimum number of blocks a Residence can be, High to Low (Y). + # (Optional) The minimum number of blocks a Residence can be, High to Low (Y). MinUpDown: 3 # The lowest altitude this group is allowed to protect. MinHeight: 0 diff --git a/src/plugin.yml b/src/plugin.yml index 11acb3e89..07a7ec74c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.0.1 +version: 4.5.1.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 386681e66b6416b525f3cb0473e97693f5c4fa07 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 21 Jul 2016 18:34:03 +0300 Subject: [PATCH 0220/1142] Use double for calculating residence price --- .../bukkit/residence/economy/TransactionManager.java | 11 +++++++---- .../bukkit/residence/protection/ResidenceManager.java | 2 +- src/plugin.yml | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index ee1db3383..adcea96ca 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -28,18 +28,21 @@ public TransactionManager() { sellAmount = new HashSet(); } - public static boolean chargeEconomyMoney(Player player, int amount) { + public static boolean chargeEconomyMoney(Player player, double chargeamount) { EconomyInterface econ = Residence.getEconomyManager(); if (econ == null) { Residence.msg(player, lm.Economy_MarketDisabled); return false; } - if (!econ.canAfford(player.getName(), amount)) { + if (!econ.canAfford(player.getName(), chargeamount)) { Residence.msg(player, lm.Economy_NotEnoughMoney); return false; } - econ.subtract(player.getName(), amount); - Residence.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); + econ.subtract(player.getName(), chargeamount); + try { + Residence.msg(player, lm.Economy_MoneyCharged, chargeamount, econ.getName()); + } catch (Exception e) { + } return true; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1c25c3ba0..e716fde8e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -241,7 +241,7 @@ public boolean addResidence(Player player, String owner, String name, Location l return false; if (!newRes.isSubzone() && Residence.getConfigManager().enableEconomy() && !resadmin) { - int chargeamount = (int) Math.ceil(newArea.getSize() * group.getCostPerBlock()); + double chargeamount = Math.ceil(newArea.getSize() * group.getCostPerBlock()); if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) return false; } diff --git a/src/plugin.yml b/src/plugin.yml index 07a7ec74c..ad3458b13 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,10 +1,10 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.1.0 +version: 4.5.2.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] -softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds,dynmap] +softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds,dynmap,LWC] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: From cce08149e2778b79f150055a7499e87ec5976135 Mon Sep 17 00:00:00 2001 From: 0xNaomi Date: Sat, 23 Jul 2016 16:26:13 -0400 Subject: [PATCH 0221/1142] Fix lease messages in /res limits to use proper messages instead of "Flag Permissions" --- .../bukkit/residence/permissions/PermissionGroup.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index c69f984b1..52932f39d 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -431,9 +431,9 @@ public void printLimits(CommandSender player, OfflinePlayer target, boolean resa } Residence.msg(player, lm.Limits_Flag, group.flagPerms.listFlags()); if (Residence.getConfigManager().useLeases()) { - Residence.msg(player, lm.Limits_Flag, group.maxLeaseTime); - Residence.msg(player, lm.Limits_Flag, group.leaseGiveTime); - Residence.msg(player, lm.Limits_Flag, group.renewcostperarea); + Residence.msg(player, lm.Limits_MaxDays, group.maxLeaseTime); + Residence.msg(player, lm.Limits_LeaseTime, group.leaseGiveTime); + Residence.msg(player, lm.Limits_RenewCost, group.renewcostperarea); } Residence.msg(player, lm.General_Separator); } From ed26de72da52d84249bf21a204899b6fb7afe394 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 25 Jul 2016 18:35:16 +0300 Subject: [PATCH 0222/1142] fix --- src/com/bekvon/bukkit/residence/commands/remove.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 4fd97c186..019080b73 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -65,10 +65,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command String raw = ""; if (res.isSubzone()) { raw = Residence.getResidenceManager().convertToRaw(null, Residence.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()), - "Click to confirm remove", cmd + " confirm"); + "Click to confirm", cmd + " confirm"); } else { raw = Residence.getResidenceManager().convertToRaw(null, Residence.msg(lm.Residence_DeleteConfirm, res.getResidenceName()), - "Click to confirm remove", cmd + " confirm"); + "Click to confirm", cmd + " confirm"); } Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); } else { From 02de5073ab84058f8349e9977c9607a1f80b4802 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 25 Jul 2016 18:57:09 +0300 Subject: [PATCH 0223/1142] Properly count in offline player for checking its group --- .../permissions/PermissionManager.java | 12 ++++++++---- .../residence/protection/ClaimedResidence.java | 18 ++++++++++++------ .../residence/protection/LeaseManager.java | 12 ++++-------- .../residence/protection/ResidenceManager.java | 5 +---- .../residence/selection/AutoSelection.java | 2 +- 5 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 0ad6aa29c..3356195f6 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -90,11 +90,15 @@ public String getGroupNameByPlayer(Player player) { return Residence.getConfigManager().getDefaultGroup().toLowerCase(); } - public String getGroupNameByPlayer(String player, String world) { - if (!this.groupsMap.containsKey(player)) { - updateGroupNameForPlayer(Bukkit.getPlayer(player)); + public String getGroupNameByPlayer(String playerName, String world) { + if (!this.groupsMap.containsKey(playerName)) { + Player player = Bukkit.getPlayer(playerName); + if (player != null) + updateGroupNameForPlayer(player); + else + updateGroupNameForPlayer(playerName, world, false); } - PlayerGroup PGroup = this.groupsMap.get(player); + PlayerGroup PGroup = this.groupsMap.get(playerName); if (PGroup != null) { String group = PGroup.getGroup(world); if (group != null) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index b723a727d..9795689d0 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -118,7 +118,7 @@ public boolean isSubzoneForRent() { } return false; } - + public boolean isSubzoneRented() { for (Entry one : subzones.entrySet()) { if (one.getValue().isRented()) @@ -128,7 +128,7 @@ public boolean isSubzoneRented() { } return false; } - + public ClaimedResidence getRentedSubzone() { for (Entry one : subzones.entrySet()) { if (one.getValue().isRented()) @@ -138,7 +138,7 @@ public ClaimedResidence getRentedSubzone() { } return null; } - + public boolean isParentForRent() { if (this.getParent() != null) return this.getParent().isForRent() ? true : this.getParent().isParentForRent(); @@ -1392,9 +1392,7 @@ public static ClaimedResidence load(Map root, ClaimedResidence p if (root.containsKey("BlockSellPrice")) res.BlockSellPrice = (Double) root.get("BlockSellPrice"); else { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(res.getOwner()); - PermissionGroup group = rPlayer.getGroup(res.getWorld()); - res.BlockSellPrice = group.getSellPerBlock(); + res.BlockSellPrice = res.getOwnerGroup().getSellPerBlock(); } World world = Residence.getServ().getWorld(res.perms.getWorld()); @@ -1554,6 +1552,14 @@ public String getWorld() { return perms.getWorld(); } + public ResidencePlayer getRPlayer() { + return Residence.getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); + } + + public PermissionGroup getOwnerGroup() { + return getRPlayer().getGroup(getPermissions().getWorld()); + } + public String getOwner() { return perms.getOwner(); } diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index 2fbba6c85..740a44693 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -102,9 +102,7 @@ public void renewArea(String area, Player player) { } public int getRenewCost(ClaimedResidence res) { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(res.getPermissions().getOwner()); - PermissionGroup group = rPlayer.getGroup(res.getPermissions().getWorld()); - double cost = group.getLeaseRenewCost(); + double cost = res.getOwnerGroup().getLeaseRenewCost(); int amount = (int) Math.ceil(res.getTotalSize() * cost); return amount; } @@ -139,8 +137,7 @@ public void doExpirations() { boolean renewed = false; String owner = res.getPermissions().getOwner(); - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(owner); - PermissionGroup group = rPlayer.getGroup(res.getPermissions().getWorld()); + PermissionGroup group = res.getOwnerGroup(); int cost = this.getRenewCost(res); if (Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().autoRenewLeases()) { @@ -191,9 +188,8 @@ public void resetLeases() { for (String item : list) { if (item != null) { ClaimedResidence res = Residence.getResidenceManager().getByName(item); - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(res.getPermissions().getOwner()); - PermissionGroup group = rPlayer.getGroup(res.getPermissions().getWorld()); - this.setExpireTime(null, item, group.getLeaseGiveTime()); + if (res != null) + this.setExpireTime(null, item, res.getOwnerGroup().getLeaseGiveTime()); } } System.out.println("[Residence] - Set default leases."); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index e716fde8e..cab8c302c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -661,10 +661,7 @@ else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Play Residence.msg(sender, ChatColor.translateAlternateColorCodes('&', msg)); if (Residence.getEconomyManager() != null) { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(res.getOwner()); - PermissionGroup group = rPlayer.getGroup(res.getWorld()); - - Residence.msg(sender, lm.General_TotalWorth, (int) ((res.getTotalSize() * group.getCostPerBlock()) + Residence.msg(sender, lm.General_TotalWorth, (int) ((res.getTotalSize() * res.getOwnerGroup().getCostPerBlock()) * 100) / 100.0, (int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0); } if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index 80515d85d..e574f0202 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -18,7 +18,7 @@ public class AutoSelection { public void switchAutoSelection(Player player) { if (!list.containsKey(player.getName().toLowerCase())) { ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(player.getLocation().getWorld().getName()); + PermissionGroup group = rPlayer.getGroup(player.getWorld().getName()); list.put(player.getName().toLowerCase(), new AutoSelector(group, System.currentTimeMillis())); Residence.msg(player, lm.Select_AutoEnabled); } else { From 3dbf534cf2758513a401e6868a3a3eca987155fa Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 25 Jul 2016 19:05:49 +0300 Subject: [PATCH 0224/1142] Wrong place to get res amount --- .../bukkit/residence/protection/ResidenceManager.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index cab8c302c..7762bde90 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -574,14 +574,12 @@ public void removeAllByOwner(String owner) { } public int getOwnedZoneCount(String player) { - return Residence.getPlayerManager().getResidenceList(player).size(); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + return rPlayer.getResAmount(); } public boolean hasMaxZones(String player, int target) { - int count = getOwnedZoneCount(player); - if (count >= target) - return false; - return true; + return getOwnedZoneCount(player) < target; } public void printAreaInfo(String areaname, CommandSender sender) { From 8bfa6f2ad5a43e590fb374f049b22bd50b618927 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 26 Jul 2016 10:47:07 +0300 Subject: [PATCH 0225/1142] Glow should work from 1.9 and up --- .../bekvon/bukkit/residence/Residence.java | 4 --- .../bukkit/residence/containers/Flags.java | 1 + .../listeners/ResidencePlayerListener.java | 30 +++++++++++++++---- src/plugin.yml | 2 +- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index b33281867..c4f87a939 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -893,10 +893,6 @@ public static DynMapManager getDynManager() { return DynManager; } - public static ActionBar getABManager2() { - return ABManager; - } - public static SchematicsManager getSchematicManager() { return SchematicManager; } diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 53fbddf1c..7d2ac93a8 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -44,6 +44,7 @@ public enum Flags { firespread(377, 0, FlagMode.Residence, "Allows or denys fire spread", true), flow(111, 0, FlagMode.Residence, "Allows or denys liquid flow", true), flowerpot(390, 0, FlagMode.Both, "Allows or denys interaction with flower pot", true), + glow(169, 0, FlagMode.Residence, "Players will start glowing when entering residence", true), hotfloor(213, 0, FlagMode.Residence, "Prevent damage from magma blocks", true), hidden(102, 0, FlagMode.Residence, "Hides residence from list or listall commands", false), hook(346, 0, FlagMode.Both, "Allows or denys fishing rod hooking entities", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index eb7afc239..8724926a0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -259,7 +259,9 @@ public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { if (event.isCancelled()) return; - if (!event.getFlag().equalsIgnoreCase(Flags.day.getName()) && !event.getFlag().equalsIgnoreCase(Flags.night.getName())) + if (!event.getFlag().equalsIgnoreCase(Flags.day.getName()) && + !event.getFlag().equalsIgnoreCase(Flags.night.getName()) && + !event.getFlag().equalsIgnoreCase(Flags.glow.getName())) return; switch (event.getNewState()) { @@ -267,6 +269,9 @@ public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { case FALSE: for (Player one : event.getResidence().getPlayersInResidence()) one.resetPlayerTime(); + if (Residence.getVersionChecker().GetVersion() > 1900 && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setGlowing(false); break; case INVALID: break; @@ -277,6 +282,9 @@ public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { if (event.getFlag().equalsIgnoreCase(Flags.night.getName())) for (Player one : event.getResidence().getPlayersInResidence()) one.setPlayerTime(14000L, false); + if (Residence.getVersionChecker().GetVersion() > 1900 && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setGlowing(true); break; default: break; @@ -682,8 +690,9 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { @SuppressWarnings("deprecation") private static boolean isContainer(Material mat, Block block) { - return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container.getName()) || Residence - .getConfigManager().getCustomContainers().contains(block.getTypeId()); + return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container.getName()) + || Residence + .getConfigManager().getCustomContainers().contains(block.getTypeId()); } @SuppressWarnings("deprecation") @@ -1466,7 +1475,10 @@ public void run() { if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); - + + if (Residence.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(false); + if (leave != null && !leave.equals("")) { if (Residence.getConfigManager().useActionBar()) { Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) @@ -1545,6 +1557,9 @@ public void run() { player.setAllowFlight(false); } + if (Residence.getVersionChecker().GetVersion() > 1900 && res.getPermissions().has(Flags.glow, false)) + player.setGlowing(true); + if (res.getPermissions().has(Flags.day, false)) player.setPlayerTime(6000L, false); else if (res.getPermissions().has(Flags.night, false)) @@ -1572,13 +1587,16 @@ else if (res.getPermissions().has(Flags.rain, false)) if (ResOld.getPermissions().has(Flags.sun, false) || ResOld.getPermissions().has(Flags.rain, false)) player.resetPlayerWeather(); - + + if (Residence.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, false)) + player.setGlowing(false); + if (leave != null && !leave.equals("") && ResOld != res.getParent()) { if (Residence.getConfigManager().useActionBar()) { Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) .toString()); } else { - Residence.msg(player,ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); } } } diff --git a/src/plugin.yml b/src/plugin.yml index ad3458b13..ff37de880 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.2.0 +version: 4.5.3.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From eafeeb03f7e6ead0aa6bf6a6efed1aaf3d1bb0a3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 28 Jul 2016 18:06:26 +0300 Subject: [PATCH 0226/1142] recheck online player each time when checking for its group. If its fails, then apply default group --- src/com/bekvon/bukkit/residence/containers/PlayerGroup.java | 1 + .../bukkit/residence/listeners/ResidencePlayerListener.java | 4 ++++ .../residence/vaultinterface/ResidenceVaultAdapter.java | 6 +++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index 727b98fab..486f39aaf 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -93,6 +93,7 @@ public void updateGroup(String world, boolean force) { } private PermissionGroup getPermissionGroup() { + this.player = Bukkit.getPlayer(playerName); PermissionGroup group = null; for (Entry one : Residence.getPermissionManager().getGroups().entrySet()) { if (player != null) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 8724926a0..0462b1973 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -65,6 +65,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -606,6 +607,9 @@ public void onPlayerJoin(PlayerChangedWorldEvent event) { } Residence.getPermissionManager().updateGroupNameForPlayer(player, true); + + Debug.D(player.getWorld().getName()); + FlagPermissions perms = Residence.getPermsByLocForPlayer(player.getLocation(), player); f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 80f98bb9d..6a758b1ce 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -84,7 +84,11 @@ public String getPlayerGroup(String player, String world) { public static boolean hasPermission(OfflinePlayer player, String perm, String world) { if (permissions == null) return false; - return permissions.playerHas(world, player, perm); + try { + return permissions.playerHas(world, player, perm); + } catch (Exception e) { + return false; + } } @SuppressWarnings("deprecation") From 87879fd7e585d4174674efa8cbf58a8408b4edfd Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 29 Jul 2016 17:50:28 +0300 Subject: [PATCH 0227/1142] Include residence.admin.move permission node Changes for getting players permission group --- .../bekvon/bukkit/residence/Residence.java | 7 ++++- .../residence/containers/PlayerGroup.java | 10 +++---- .../residence/containers/ResidencePlayer.java | 28 +++++++++++-------- .../listeners/ResidencePlayerListener.java | 18 ++++++------ .../permissions/PermissionGroup.java | 2 +- .../residence/protection/PlayerManager.java | 5 ++-- .../protection/ResidenceManager.java | 9 +++--- src/plugin.yml | 2 +- 8 files changed, 44 insertions(+), 37 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index c4f87a939..eb1896324 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1545,7 +1545,12 @@ public static OfflinePlayer getOfflinePlayer(String Name) { if (getOfflinePlayerMap().containsKey(Name.toLowerCase())) { return getOfflinePlayerMap().get(Name.toLowerCase()); } - OfflinePlayer offPlayer = Bukkit.getOfflinePlayer(Name); + Player player = Bukkit.getPlayer(Name); + OfflinePlayer offPlayer = null; + if (player != null) + offPlayer = player; + if (offPlayer == null) + offPlayer = Bukkit.getOfflinePlayer(Name); if (offPlayer != null) getOfflinePlayerMap().put(Name.toLowerCase(), offPlayer); return offPlayer; diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index 486f39aaf..73f49cc3d 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -54,10 +54,8 @@ public void updateGroup(String world, boolean force) { if (group != null) { group = group.toLowerCase(); if (group != null && Residence.getPermissionManager().getGroups().containsKey(group)) { - PermissionGroup g = Residence.getPermissionManager().getGroups().get(group); posibleGroups.add(g); - this.groups.put(world, group); } } @@ -65,9 +63,10 @@ public void updateGroup(String world, boolean force) { posibleGroups.add(getPermissionGroup()); - group = Residence.getPermissionManager().getPermissionsGroup(playerName.toLowerCase(), world); + group = Residence.getPermissionManager().getPermissionsGroup(playerName, world); PermissionGroup g = Residence.getPermissionManager().getGroupByName(group); + if (g != null) posibleGroups.add(g); @@ -93,8 +92,9 @@ public void updateGroup(String world, boolean force) { } private PermissionGroup getPermissionGroup() { - this.player = Bukkit.getPlayer(playerName); - PermissionGroup group = null; + if (this.player == null) + this.player = Bukkit.getPlayer(playerName); + PermissionGroup group = Residence.getPermissionManager().getGroupByName(Residence.getConfigManager().getDefaultGroup()); for (Entry one : Residence.getPermissionManager().getGroups().entrySet()) { if (player != null) { if (this.player.hasPermission("residence.group." + one.getKey())) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index cc63ec42d..64e4cdd86 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -38,7 +38,9 @@ public ResidencePlayer(Player player) { public ResidencePlayer(String userName) { this.userName = userName; - ofPlayer = Residence.getOfflinePlayer(userName); + player = Bukkit.getPlayer(userName); + if (player == null) + ofPlayer = Residence.getOfflinePlayer(userName); if (ofPlayer != null) this.userName = ofPlayer.getName(); RecalculatePermissions(); @@ -85,12 +87,16 @@ public void RecalculatePermissions() { if (this.player == null && ofPlayer == null) ofPlayer = Residence.getOfflinePlayer(userName); + getGroup(); recountMaxRes(); recountMaxRents(); recountMaxSubzones(); } public void recountMaxRes() { + updateName(); + if (this.group != null) + this.maxRes = this.group.getMaxZones(); for (int i = 1; i <= Residence.getConfigManager().getMaxResCount(); i++) { if (player != null) { if (this.player.hasPermission("residence.max.res." + i)) @@ -101,13 +107,10 @@ public void recountMaxRes() { this.maxRes = i; } } - - int m = this.getGroup().getMaxZones(); - if (this.maxRes < m) - this.maxRes = m; } public void recountMaxRents() { + updateName(); for (int i = 1; i <= Residence.getConfigManager().getMaxRentCount(); i++) { if (player != null) { if (this.player.isPermissionSet("residence.max.rents." + i)) @@ -125,6 +128,7 @@ public void recountMaxRents() { } public void recountMaxSubzones() { + updateName(); for (int i = 1; i <= Residence.getConfigManager().getMaxSubzonesCount(); i++) { if (player != null) { if (this.player.isPermissionSet("residence.max.subzones." + i)) @@ -142,15 +146,14 @@ public void recountMaxSubzones() { } public int getMaxRes() { + updateName(); recountMaxRes(); - if (this.player != null) { - Residence.getPermissionManager().updateGroupNameForPlayer(this.player.getName(), this.player.isOnline() ? this.player.getPlayer().getLocation().getWorld() - .getName() : Residence.getConfigManager().getDefaultWorld(), true); - PermissionGroup g = getGroup(); - if (this.maxRes < g.getMaxZones()) - return g.getMaxZones(); + Residence.getPermissionManager().updateGroupNameForPlayer(this.userName, this.player != null && this.player.isOnline() ? this.player.getPlayer().getLocation() + .getWorld().getName() : Residence.getConfigManager().getDefaultWorld(), true); + PermissionGroup g = getGroup(); + if (this.maxRes < g.getMaxZones()) { + return g.getMaxZones(); } - return this.maxRes; } @@ -172,6 +175,7 @@ public PermissionGroup getGroup(String world) { String name = userName; if (this.player != null) name = player.getName(); + String gp = Residence.getPermissionManager().getGroupNameByPlayer(name, world); this.group = Residence.getPermissionManager().getGroupByName(gp); return this.group; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 0462b1973..5863c4e8a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -65,7 +65,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -607,9 +606,6 @@ public void onPlayerJoin(PlayerChangedWorldEvent event) { } Residence.getPermissionManager().updateGroupNameForPlayer(player, true); - - Debug.D(player.getWorld().getName()); - FlagPermissions perms = Residence.getPermsByLocForPlayer(player.getLocation(), player); f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( @@ -1479,10 +1475,10 @@ public void run() { if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); - + if (Residence.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(false); - + if (leave != null && !leave.equals("")) { if (Residence.getConfigManager().useActionBar()) { Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) @@ -1497,7 +1493,9 @@ public void run() { } if (move) { - if (!res.getPermissions().playerHas(pname, Flags.move, true) && !Residence.isResAdminOn(player) && !res.isOwner(player)) { + if (!res.getPermissions().playerHas(pname, Flags.move, true) && !Residence.isResAdminOn(player) && !res.isOwner(player) && !player.hasPermission( + "residence.admin.move")) { + Location lastLoc = lastOutsideLoc.get(pname); if (Residence.getConfigManager().BounceAnimation()) { @@ -1563,7 +1561,7 @@ public void run() { if (Residence.getVersionChecker().GetVersion() > 1900 && res.getPermissions().has(Flags.glow, false)) player.setGlowing(true); - + if (res.getPermissions().has(Flags.day, false)) player.setPlayerTime(6000L, false); else if (res.getPermissions().has(Flags.night, false)) @@ -1591,10 +1589,10 @@ else if (res.getPermissions().has(Flags.rain, false)) if (ResOld.getPermissions().has(Flags.sun, false) || ResOld.getPermissions().has(Flags.rain, false)) player.resetPlayerWeather(); - + if (Residence.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, false)) player.setGlowing(false); - + if (leave != null && !leave.equals("") && ResOld != res.getParent()) { if (Residence.getConfigManager().useActionBar()) { Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 52932f39d..0f7d40ab2 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -410,7 +410,7 @@ public void printLimits(CommandSender player, OfflinePlayer target, boolean resa Residence.msg(player, lm.General_Separator); Residence.msg(player, lm.Limits_PGroup, Residence.getPermissionManager().getPermissionsGroup(target.getName(), - target.isOnline() ? Bukkit.getPlayer(target.getName()).getName() : Residence.getConfigManager().getDefaultWorld())); + target.isOnline() ? Bukkit.getPlayer(target.getName()).getWorld().getName() : Residence.getConfigManager().getDefaultWorld())); Residence.msg(player, lm.Limits_RGroup, group.getGroupName()); if (target.isOnline() && resadmin) Residence.msg(player, lm.Limits_Admin, Residence.getPermissionManager().isResidenceAdmin(player)); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index d6c56ca48..1980a6a90 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -16,6 +16,7 @@ public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); + public PlayerManager() { } @@ -151,9 +152,9 @@ public ResidencePlayer getResidencePlayer(Player player) { @Override public ResidencePlayer getResidencePlayer(String player) { ResidencePlayer resPlayer = null; - if (players.containsKey(player.toLowerCase())) + if (players.containsKey(player.toLowerCase())) { resPlayer = players.get(player.toLowerCase()); - else { + } else { resPlayer = playerJoin(player); } return resPlayer; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 7762bde90..886e9b480 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -212,12 +212,11 @@ public boolean addResidence(Player player, String owner, String name, Location l return false; } - if (player != null) { - if (!hasMaxZones(player.getName(), rPlayer.getMaxRes()) && !resadmin) { - Residence.msg(player, lm.Residence_TooMany); - return false; - } + if (rPlayer.getResAmount() >= rPlayer.getMaxRes() && !resadmin) { + Residence.msg(player, lm.Residence_TooMany); + return false; } + CuboidArea newArea = new CuboidArea(loc1, loc2); ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName(), plugin); newRes.getPermissions().applyDefaultFlags(); diff --git a/src/plugin.yml b/src/plugin.yml index ff37de880..3bbaf15b5 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.3.0 +version: 4.5.3.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 1d91b6dda549e33cd143f934b25e5af806a77eb9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 1 Aug 2016 13:26:39 +0300 Subject: [PATCH 0228/1142] Dont show empty messages We need to convert int olower case to avoid issues when removing... --- .../bekvon/bukkit/residence/Residence.java | 19 +++++-- .../bukkit/residence/commands/remove.java | 3 +- .../listeners/ResidencePlayerListener.java | 57 +++++++++---------- .../protection/ResidenceManager.java | 3 +- src/plugin.yml | 2 +- 5 files changed, 44 insertions(+), 40 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index eb1896324..3eefa44ff 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -86,6 +86,7 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.utils.ActionBar; import com.bekvon.bukkit.residence.utils.CrackShot; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.Sorting; @@ -1625,21 +1626,27 @@ public static String msg(String path) { } public static void msg(CommandSender sender, String text) { - if (sender != null) + if (sender != null && text.length() > 0) sender.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); } public static void msg(Player player, String text) { - if (player != null) + if (player != null && text.length() > 0) player.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); } public static void msg(CommandSender sender, lm lm, Object... variables) { + Debug.D("msg"); if (sender != null) - if (Residence.getLM().containsKey(lm.getPath())) - sender.sendMessage(Residence.getLM().getMessage(lm, variables)); - else - sender.sendMessage(lm.getPath()); + if (Residence.getLM().containsKey(lm.getPath())) { + String msg = Residence.getLM().getMessage(lm, variables); + if (msg.length() > 0) + sender.sendMessage(msg); + } else { + String msg = lm.getPath(); + if (msg.length() > 0) + sender.sendMessage(lm.getPath()); + } } public static List msgL(lm lm) { diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 019080b73..9814192dc 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -70,7 +70,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command raw = Residence.getResidenceManager().convertToRaw(null, Residence.msg(lm.Residence_DeleteConfirm, res.getResidenceName()), "Click to confirm", cmd + " confirm"); } - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); + if (Residence.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()).length() > 0) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); } else { if (res.isSubzone()) Residence.msg(sender, lm.Subzone_DeleteConfirm, res.getResidenceName()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 5863c4e8a..0150f4f64 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1276,40 +1276,37 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { } ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res != null) { - if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event - .getCause() == TeleportCause.PLUGIN) { - String areaname = res.getName(); - if (!res.getPermissions().playerHas(player.getName(), Flags.move, true) && !res.isOwner(player)) { - event.setCancelled(true); - Residence.msg(player, lm.Residence_MoveDeny, areaname); - return; - } - } else if (event.getCause() == TeleportCause.ENDER_PEARL) { - String areaname = res.getName(); - if (!res.getPermissions().playerHas(player.getName(), Flags.enderpearl, true)) { - event.setCancelled(true); - Residence.msg(player, lm.Residence_FlagDeny, Flags.enderpearl.getName(), areaname); - return; - } + if (res == null) + return; + if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event + .getCause() == TeleportCause.PLUGIN) { + if (!res.getPermissions().playerHas(player.getName(), Flags.move, true) && !res.isOwner(player)) { + event.setCancelled(true); + Residence.msg(player, lm.Residence_MoveDeny, res.getName()); + return; } - if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && Residence.getConfigManager().isBlockAnyTeleportation()) { - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.tp, true) && !player.hasPermission("residence.admin.tp")) { - String areaname = res.getName(); - event.setCancelled(true); - Residence.msg(player, lm.General_TeleportDeny, areaname); - return; - } + } else if (event.getCause() == TeleportCause.ENDER_PEARL) { + if (!res.getPermissions().playerHas(player, Flags.enderpearl, true)) { + event.setCancelled(true); + Residence.msg(player, lm.Residence_FlagDeny, Flags.enderpearl.getName(), res.getName()); + return; } - if (Residence.getNms().isChorusTeleport(event.getCause())) { - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.chorustp, true) && !player.hasPermission("residence.admin.tp")) { - String areaname = res.getName(); - event.setCancelled(true); - Residence.msg(player, lm.Residence_FlagDeny, Flags.chorustp.getName(), areaname); - return; - } + } + if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && Residence.getConfigManager().isBlockAnyTeleportation()) { + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.tp, true) && !player.hasPermission("residence.admin.tp")) { + event.setCancelled(true); + Residence.msg(player, lm.General_TeleportDeny, res.getName()); + return; + } + } + if (Residence.getNms().isChorusTeleport(event.getCause())) { + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.chorustp, true) && !player.hasPermission("residence.admin.tp")) { + event.setCancelled(true); + Residence.msg(player, lm.Residence_FlagDeny, Flags.chorustp.getName(), res.getName()); + return; } } + } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 886e9b480..28b247c35 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -330,7 +330,7 @@ public Map getResidenceMapList(String targetplayer, bo if (res.getValue().isOwner(targetplayer)) { boolean hidden = res.getValue().getPermissions().has("hidden", false); if ((showhidden) || (!showhidden && !hidden)) { - temp.put(res.getValue().getName(), res.getValue()); + temp.put(res.getValue().getName().toLowerCase(), res.getValue()); } } } @@ -510,7 +510,6 @@ public void removeResidence(Player player, String name, boolean resadmin) { } Residence.getPlayerManager().removeResFromPlayer(res.getOwner(), name); - Residence.getRentManager().removeRentable(name); Residence.getTransactionManager().removeFromSale(name); diff --git a/src/plugin.yml b/src/plugin.yml index 3bbaf15b5..14b165b6c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.3.1 +version: 4.5.3.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 03acdc673cc1caff2d91bbab36a54f5c8b277a4c Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 1 Aug 2016 14:49:00 +0300 Subject: [PATCH 0229/1142] New command for automatic residence creation --- .../bekvon/bukkit/residence/Residence.java | 2 - .../bukkit/residence/commands/auto.java | 110 ++++++++++++++++++ .../bukkit/residence/commands/limits.java | 3 +- .../residence/selection/SelectionManager.java | 8 ++ src/plugin.yml | 3 + 5 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/commands/auto.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 3eefa44ff..17fc79f17 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -86,7 +86,6 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.utils.ActionBar; import com.bekvon.bukkit.residence.utils.CrackShot; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.Sorting; @@ -1636,7 +1635,6 @@ public static void msg(Player player, String text) { } public static void msg(CommandSender sender, lm lm, Object... variables) { - Debug.D("msg"); if (sender != null) if (Residence.getLM().containsKey(lm.getPath())) { String msg = Residence.getLM().getMessage(lm, variables); diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java new file mode 100644 index 000000000..b8ea90ee7 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -0,0 +1,110 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; + +public class auto implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 150) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 2 && args.length != 1 && args.length != 3) { + return false; + } + + String resName = null; + + if (args.length > 1) + resName = args[1]; + else + resName = player.getName(); + + int lenght = -1; + if (args.length == 3) { + try { + lenght = Integer.parseInt(args[2]); + } catch (Exception ex) { + } + } + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); + + Location loc = player.getLocation(); + + int X = group.getMaxX(); + int Y = group.getMaxY(); + int Z = group.getMaxZ(); + + if (lenght > 0) { + if (lenght < X) + X = lenght; + if (lenght < Z) + Z = lenght; + } + + int rX = (X - 1) / 2; + int rY = (Y - 1) / 2; + int rZ = (Z - 1) / 2; + + int minX = loc.getBlockX() - rX; + int maxX = loc.getBlockX() + rX; + + if (maxX - minX + 1 < X) + maxX++; + + int minY = loc.getBlockY() - rY; + int maxY = loc.getBlockY() + rY; + + if (maxY - minY + 1 < Y) + maxY++; + + if (minY < 0) { + maxY += -minY; + minY = 0; + } + + if (maxY > loc.getWorld().getMaxHeight()) { + int dif = maxY - loc.getWorld().getMaxHeight(); + if (minY > 0) + minY -= dif; + if (minY < 0) + minY = 0; + maxY = loc.getWorld().getMaxHeight() - 1; + } + + int minZ = loc.getBlockZ() - rZ; + int maxZ = loc.getBlockZ() + rZ; + if (maxZ - minZ + 1 < Z) + maxZ++; + + Residence.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), minX, minY, minZ), false); + Residence.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), maxX, maxY, maxZ), false); + + player.performCommand("res create " + resName); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Create maximum allowed residence around you"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res auto (residence name) (radius)")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 935377ed7..1694724e1 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -45,6 +45,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command public void getLocale(ConfigReader c, String path) { // Main command c.get(path + "Description", "Show your limits."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res limits", "Shows the limitations you have on creating and managing residences.")); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res limits (playerName)", "Shows the limitations you have on creating and managing residences.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index ca6a2371b..9b069d10e 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -86,10 +86,18 @@ public void afterSelectionUpdate(Player player) { } } + public Location getPlayerLoc1(Player player) { + return getPlayerLoc1(player.getName()); + } + public Location getPlayerLoc1(String player) { return playerLoc1.get(player); } + public Location getPlayerLoc2(Player player) { + return getPlayerLoc2(player.getName()); + } + public Location getPlayerLoc2(String player) { return playerLoc2.get(player); } diff --git a/src/plugin.yml b/src/plugin.yml index 14b165b6c..04f697b2c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -125,6 +125,9 @@ permissions: residence.command.create: description: Allows to access particular command default: true + residence.command.auto: + description: Allows to create max residence + default: true residence.command.current: description: Allows to access particular command default: true From 50e5bd2133b736f9eebfd7c8e9445cffde49fbda Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 2 Aug 2016 12:57:14 +0300 Subject: [PATCH 0230/1142] residence.randomtm.admin permission node to teleport other players allow to teleport other players with res rt command don't teleport over void --- .../bekvon/bukkit/residence/commands/rt.java | 93 +++++++++++-------- .../bukkit/residence/utils/RandomTp.java | 13 ++- src/plugin.yml | 2 +- 3 files changed, 68 insertions(+), 40 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 4a353130d..04a80a717 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -2,6 +2,7 @@ import java.util.Arrays; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -13,76 +14,92 @@ import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.utils.Debug; public class rt implements cmd { @Override @CommandAnnotation(simple = true, priority = 2500) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) + if (args.length != 1 && args.length != 2 && args.length != 3) { return false; - - Player player = (Player) sender; - if (args.length != 1 && args.length != 2) { - return false; - } - - int sec = Residence.getConfigManager().getrtCooldown(); - if (Residence.getRandomTeleportMap().containsKey(player.getName()) && !resadmin) { - if (Residence.getRandomTeleportMap().get(player.getName()) + (sec * 1000) > System.currentTimeMillis()) { - int left = (int) (sec - ((System.currentTimeMillis() - Residence.getRandomTeleportMap().get(player.getName())) / 1000)); - Residence.msg(player, lm.RandomTeleport_TpLimit, left); - return true; - } } - if (!player.hasPermission("residence.randomtp") && !resadmin) { - Residence.msg(player, lm.General_NoPermission); + if (!sender.hasPermission("residence.randomtp") && !resadmin) { + Residence.msg(sender, lm.General_NoPermission); return true; } String wname = null; - if (args.length == 2) { + Player tPlayer = null; + + if (args.length > 1) { + c: for (int i = 1; i < args.length; i++) { + for (RandomTeleport one : Residence.getConfigManager().getRandomTeleport()) { + if (!one.getWorld().equalsIgnoreCase(args[i])) + continue; + wname = one.getWorld(); + continue c; + } + + Player p = Bukkit.getPlayer(args[i]); + if (p != null) + tPlayer = p; + + } + } + + if (wname == null && tPlayer == null) { + Residence.msg(sender, lm.Invalid_World); + + String worlds = ""; + for (RandomTeleport one : Residence.getConfigManager().getRandomTeleport()) { - if (!one.getWorld().equalsIgnoreCase(args[1])) - continue; - wname = one.getWorld(); + worlds += one.getWorld() + " "; break; } - if (wname == null) { - Residence.msg(sender, lm.Invalid_World); + Residence.msg(sender, lm.RandomTeleport_WorldList, worlds); + return true; + } - String worlds = ""; + if (wname == null && tPlayer != null) + wname = tPlayer.getLocation().getWorld().getName(); - for (RandomTeleport one : Residence.getConfigManager().getRandomTeleport()) { - worlds += one.getWorld() + " "; - break; - } + if (tPlayer == null && sender instanceof Player) + tPlayer = (Player) sender; + + if (tPlayer == null) + return false; - Residence.msg(sender, lm.RandomTeleport_WorldList, worlds); + if (!sender.getName().equalsIgnoreCase(tPlayer.getName()) && !sender.hasPermission("residence.randomtp.admin")) + return false; + + int sec = Residence.getConfigManager().getrtCooldown(); + if (Residence.getRandomTeleportMap().containsKey(tPlayer.getName()) && !resadmin) { + if (Residence.getRandomTeleportMap().get(tPlayer.getName()) + (sec * 1000) > System.currentTimeMillis()) { + int left = (int) (sec - ((System.currentTimeMillis() - Residence.getRandomTeleportMap().get(tPlayer.getName())) / 1000)); + Residence.msg(tPlayer, lm.RandomTeleport_TpLimit, left); return true; } } - if (wname == null) - wname = player.getLocation().getWorld().getName(); Location loc = Residence.getRandomTpManager().getRandomlocation(wname); - Residence.getRandomTeleportMap().put(player.getName(), System.currentTimeMillis()); + Residence.getRandomTeleportMap().put(tPlayer.getName(), System.currentTimeMillis()); if (loc == null) { - Residence.msg(player, lm.RandomTeleport_IncorrectLocation, sec); + Residence.msg(sender, lm.RandomTeleport_IncorrectLocation, sec); return true; } if (Residence.getConfigManager().getTeleportDelay() > 0 && !resadmin) { - Residence.msg(player, lm.RandomTeleport_TeleportStarted, loc.getX(), loc.getY(), loc + Residence.msg(tPlayer, lm.RandomTeleport_TeleportStarted, loc.getX(), loc.getY(), loc .getZ(), Residence.getConfigManager().getTeleportDelay()); - Residence.getTeleportDelayMap().add(player.getName()); - Residence.getRandomTpManager().performDelaydTp(loc, player); + Residence.getTeleportDelayMap().add(tPlayer.getName()); + Residence.getRandomTpManager().performDelaydTp(loc, tPlayer); } else - Residence.getRandomTpManager().performInstantTp(loc, player); + Residence.getRandomTpManager().performInstantTp(loc, tPlayer); return true; } @@ -90,7 +107,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command @Override public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Teleports to random location in world"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res rt (worldname)", "Teleports you to random location in defined world.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res rt (worldname) (playerName)", "Teleports you to random location in defined world.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 367ee5831..dd3304832 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -27,6 +27,9 @@ public RandomTp(Residence plugin) { public Location getRandomlocation(String WorldName) { + if (WorldName == null) + return null; + Random random = new Random(System.currentTimeMillis()); boolean ok = false; @@ -63,7 +66,7 @@ public Location getRandomlocation(String WorldName) { Location loc = null; - while (!ok) { + c: while (!ok) { tries++; if (tries > maxtries) return null; @@ -79,9 +82,13 @@ public Location getRandomlocation(String WorldName) { loc = new Location(world, x, world.getMaxHeight(), z); + int dir = random.nextInt(359); + int max = loc.getWorld().getMaxHeight(); max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; + loc.setYaw(dir); + for (int i = max; i > 0; i--) { loc.setY(i); Block block = loc.getBlock(); @@ -90,6 +97,10 @@ public Location getRandomlocation(String WorldName) { if (!Residence.getNms().isEmptyBlock(block3) && Residence.getNms().isEmptyBlock(block) && Residence.getNms().isEmptyBlock(block2)) { break; } + if (i <= 3) { + loc = null; + continue c; + } } if (!Residence.getNms().isEmptyBlock(loc.getBlock())) diff --git a/src/plugin.yml b/src/plugin.yml index 04f697b2c..0e891b309 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.3.2 +version: 4.5.4.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 429979fd75c6840bd8918ff493deb25f201ee95b Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 2 Aug 2016 13:05:33 +0300 Subject: [PATCH 0231/1142] Check if player data is not NULL --- src/com/bekvon/bukkit/residence/commands/rt.java | 1 - .../bukkit/residence/economy/rent/RentManager.java | 4 +++- .../listeners/ResidencePlayerListener.java | 13 ++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 04a80a717..f1a5f2f0e 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -14,7 +14,6 @@ import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.utils.Debug; public class rt implements cmd { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index e99634e42..858e1534d 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -559,7 +559,9 @@ public int getRentDays(ClaimedResidence res) { @Override public void checkCurrentRents() { - for (ClaimedResidence res : rentedLand) { + Set t = new HashSet(); + t.addAll(rentedLand); + for (ClaimedResidence res : t) { if (res == null) continue; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 0150f4f64..03311e641 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -418,6 +418,8 @@ public void onFlagGuiClose(InventoryCloseEvent event) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignInteract(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; // disabling event on world if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -730,7 +732,8 @@ private static boolean isCanUseEntity(Material mat, Block block) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerFireInteract(PlayerInteractEvent event) { - + if (event.getPlayer() == null) + return; // disabling event on world if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -762,6 +765,8 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlatePress(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; // disabling event on world if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -793,6 +798,8 @@ public void onPlatePress(PlayerInteractEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSelection(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; // disabling event on world if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -844,6 +851,8 @@ public void onSelection(PlayerInteractEvent event) { @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onInfoCheck(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; // disabling event on world if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -877,6 +886,8 @@ public void onInfoCheck(PlayerInteractEvent event) { @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; // disabling event on world if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) return; From b6cd06ee6154cc9041ac301f86b7a5b67da742d0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 2 Aug 2016 14:18:46 +0300 Subject: [PATCH 0232/1142] wrong size checking for non subzone --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 9795689d0..a8e0deee0 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -519,7 +519,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole Residence.msg(player, lm.General_NoPermission); return false; } - if (oldarea.getSize() < newarea.getSize() && (!this.isSubzone() && !isSmallerThanMaxSubzone(player, newarea, resadmin) || this.isSubzone() + if (oldarea.getSize() < newarea.getSize() && (!this.isSubzone() && !isSmallerThanMax(player, newarea, resadmin) || this.isSubzone() && !isSmallerThanMaxSubzone(player, newarea, resadmin))) { Residence.msg(player, lm.Area_SizeLimit); return false; From e05df6227628f69c30cbcc3e366e0b37bf82ceaa Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 2 Aug 2016 17:29:44 +0300 Subject: [PATCH 0233/1142] allow ender crystal destruction with destroy flag prevent fireball damage if fireball is false --- .../listeners/ResidenceEntityListener.java | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 42b7b8faf..68e419976 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -589,8 +589,10 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { break; default: if (!perms.has(Flags.destroy, true)) { - event.setCancelled(true); - ent.remove(); + if (entity != EntityType.ENDER_CRYSTAL) { + event.setCancelled(true); + ent.remove(); + } } break; } @@ -806,7 +808,7 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { if (!srcpvp || !tgtpvp) event.setCancelled(true); } - + @EventHandler public void OnArmorStandFlameDamage(EntityDamageEvent event) { // disabling event on world @@ -817,16 +819,16 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { if (event.getCause() != DamageCause.FIRE_TICK) return; Entity ent = event.getEntity(); - + if (!Residence.getNms().isArmorStandEntity(ent.getType())) return; - if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)){ + if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { event.setCancelled(true); ent.setFireTicks(0); } } - + @EventHandler public void OnPlayerDamageByLightning(EntityDamageEvent event) { // disabling event on world @@ -843,6 +845,28 @@ public void OnPlayerDamageByLightning(EntityDamageEvent event) { event.setCancelled(true); } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamageByFireballEvent(EntityDamageByEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + Entity dmgr = event.getDamager(); + + if (dmgr.getType() != EntityType.SMALL_FIREBALL && dmgr.getType() != EntityType.FIREBALL) + return; + + if (dmgr.getType() == EntityType.FIREBALL || dmgr.getType() == EntityType.SMALL_FIREBALL) { + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + if (!perms.has(Flags.fireball, false)) { + event.setCancelled(true); + return; + } + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { // disabling event on world @@ -851,7 +875,8 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (event.isCancelled()) return; - if (event.getEntityType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event.getEntityType())) + if (event.getEntityType() != EntityType.ENDER_CRYSTAL && event.getEntityType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event + .getEntityType())) return; Entity dmgr = event.getDamager(); From 53ec435740fc64eb93646336479697c51e4e4e89 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 3 Aug 2016 11:29:34 +0300 Subject: [PATCH 0234/1142] suggest world name if given is wrong --- .../bekvon/bukkit/residence/commands/rt.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index f1a5f2f0e..09642dbe2 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -41,33 +41,39 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command wname = one.getWorld(); continue c; } - Player p = Bukkit.getPlayer(args[i]); if (p != null) tPlayer = p; - } } - - if (wname == null && tPlayer == null) { - Residence.msg(sender, lm.Invalid_World); + if (args.length > 1 && wname == null && tPlayer == null) { + Residence.msg(sender, lm.Invalid_World); String worlds = ""; - for (RandomTeleport one : Residence.getConfigManager().getRandomTeleport()) { worlds += one.getWorld() + " "; break; } - Residence.msg(sender, lm.RandomTeleport_WorldList, worlds); return true; } + + if (tPlayer == null && sender instanceof Player) + tPlayer = (Player) sender; if (wname == null && tPlayer != null) wname = tPlayer.getLocation().getWorld().getName(); - if (tPlayer == null && sender instanceof Player) - tPlayer = (Player) sender; + if (wname == null && tPlayer == null) { + Residence.msg(sender, lm.Invalid_World); + String worlds = ""; + for (RandomTeleport one : Residence.getConfigManager().getRandomTeleport()) { + worlds += one.getWorld() + " "; + break; + } + Residence.msg(sender, lm.RandomTeleport_WorldList, worlds); + return true; + } if (tPlayer == null) return false; From b8b992cda8a526f2e0239d9f62eb517af0520434 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 3 Aug 2016 17:01:59 +0300 Subject: [PATCH 0235/1142] Allow eviction with residence.market.evict permission node Don't put player into confirm list if he can't do it... --- src/com/bekvon/bukkit/residence/commands/market.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 105500d57..c5dda6a7b 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -70,14 +70,14 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } - Residence.UnrentConfirm.put(player.getName(), res.getName()); - if (res.isRented()) { - if (resadmin || Residence.isResAdminOn(player)) + if (resadmin || Residence.isResAdminOn(player) || player.hasPermission("residence.market.evict")) { + Residence.UnrentConfirm.put(player.getName(), res.getName()); Residence.msg(sender, lm.Rent_EvictConfirm, res.getName()); - else if (Residence.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sender.getName())) + } else if (Residence.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sender.getName())) { + Residence.UnrentConfirm.put(player.getName(), res.getName()); Residence.msg(sender, lm.Rent_UnrentConfirm, res.getName()); - else + } else Residence.getRentManager().printRentInfo(player, res); } else Residence.msg(sender, lm.Rent_ReleaseConfirm, res.getName()); From bfa86acc5c39f54ab22d6d70dc6a2aeb1850f157 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 Aug 2016 14:07:26 +0300 Subject: [PATCH 0236/1142] show residences from particular world for listall and list commands dont limit list size if listall performed from console with -a variable option to prevent seeing other people residence list with residence.command.list.others permission node --- .../bukkit/residence/commands/list.java | 43 +++++++++++-------- .../bukkit/residence/commands/listall.java | 40 +++++++++-------- .../residence/economy/rent/RentManager.java | 7 +++ .../residence/protection/PlayerManager.java | 7 +++ .../protection/ResidenceManager.java | 26 ++++++++--- .../residence/text/help/InformationPager.java | 8 ++++ src/plugin.yml | 5 ++- 7 files changed, 93 insertions(+), 43 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 0a6f76cde..d8500589d 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -2,14 +2,15 @@ import java.util.Arrays; +import org.bukkit.Bukkit; +import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; public class list implements cmd { @@ -17,29 +18,33 @@ public class list implements cmd { @CommandAnnotation(simple = true, priority = 300) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } + World world = null; + String target = null; - if (args.length == 1 && sender instanceof Player) { - Residence.getResidenceManager().listResidences(sender, resadmin); - return true; - } else if (args.length == 2) { + c: for (int i = 1; i < args.length; i++) { try { - Integer.parseInt(args[1]); - Residence.getResidenceManager().listResidences(sender, page, resadmin); + page = Integer.parseInt(args[i]); + continue; } catch (Exception ex) { - Residence.getResidenceManager().listResidences(sender, args[1], resadmin); } - return true; - } else if (args.length == 3) { - Residence.getResidenceManager().listResidences(sender, args[1], page, resadmin); + + for (World w : Bukkit.getWorlds()) { + if (w.getName().equalsIgnoreCase(args[i])) { + world = w; + continue c; + } + } + target = args[i]; + } + + if (target != null && !sender.getName().equalsIgnoreCase(target) && !sender.hasPermission("residence.command.list.others")){ + Residence.msg(sender, lm.General_NoPermission); return true; } - return false; + + Residence.getResidenceManager().listResidences(sender, target, page, false, false, resadmin, world); + + return true; } @Override diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index bb850d011..e4b1c7f75 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -2,8 +2,12 @@ import java.util.Arrays; +import org.bukkit.Bukkit; +import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ConfigReader; @@ -14,35 +18,37 @@ public class listall implements cmd { @Override @CommandAnnotation(simple = true, priority = 4200) public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { -// if (!(sender instanceof Player)) -// return false; -// -// Player player = (Player) sender; int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } + World world = null; - if (args.length == 1) { - Residence.getResidenceManager().listAllResidences(sender, 1, resadmin); - } else if (args.length == 2) { + c : for (int i = 1; i < args.length; i++) { try { - Residence.getResidenceManager().listAllResidences(sender, page, resadmin); + page = Integer.parseInt(args[i]); + continue; } catch (Exception ex) { } - } else { - return false; + + if (args[i].equalsIgnoreCase("-a") && !(sender instanceof Player)) { + page = -1; + continue; + } + + for (World w : Bukkit.getWorlds()) { + if (w.getName().equalsIgnoreCase(args[i])) { + world = w; + continue c; + } + } } + + Residence.getResidenceManager().listAllResidences(sender, page, resadmin, world); return true; } @Override public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "List All Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res listall ", "Lists hidden residences for a player.")); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res listall <-a>", "Lists hidden residences for a player.")); } } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 858e1534d..449202ef1 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -2,6 +2,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.World; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketRentInterface; @@ -82,6 +83,10 @@ public List getRents(String playername) { } public List getRents(String playername, boolean onlyHidden) { + return getRents(playername, onlyHidden, null); + } + + public List getRents(String playername, boolean onlyHidden, World world) { List rentedLands = new ArrayList(); for (ClaimedResidence res : rentedLand) { if (res == null) @@ -100,6 +105,8 @@ public List getRents(String playername, boolean onlyHidden) { if (onlyHidden && !hidden) continue; + if (world != null && !world.getName().equalsIgnoreCase(res.getWorld())) + continue; rentedLands.add(res); } return rentedLands; diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 1980a6a90..d0c224a55 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -6,6 +6,7 @@ import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; +import org.bukkit.World; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; @@ -93,6 +94,10 @@ public ArrayList getResidences(String player, boolean showhidd } public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden) { + return getResidences(player, showhidden, onlyHidden, null); + } + + public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden, World world) { ArrayList temp = new ArrayList(); playerJoin(player); ResidencePlayer resPlayer = players.get(player.toLowerCase()); @@ -104,6 +109,8 @@ public ArrayList getResidences(String player, boolean showhidd continue; if (onlyHidden && !hidden) continue; + if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) + continue; temp.add(one); } return temp; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 28b247c35..03171d24d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -36,6 +36,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; @@ -296,14 +297,20 @@ public void listResidences(CommandSender sender, String string, int page, boolea this.listResidences(sender, string, page, showhidden, false, showhidden); } - public void listResidences(final CommandSender sender, final String targetplayer, final int page, boolean showhidden, final boolean onlyHidden, boolean resadmin) { + public void listResidences(CommandSender sender, String targetplayer, int page, boolean showhidden, boolean onlyHidden, boolean resadmin) { + this.listResidences(sender, targetplayer, page, showhidden, onlyHidden, resadmin, null); + } + + public void listResidences(CommandSender sender, String targetplayer, int page, boolean showhidden, boolean onlyHidden, boolean resadmin, World world) { + if (targetplayer == null) + targetplayer = sender.getName(); if (showhidden && !Residence.isResAdminOn(sender) && !sender.getName().equalsIgnoreCase(targetplayer)) { showhidden = false; } else if (sender.getName().equalsIgnoreCase(targetplayer)) showhidden = true; - final boolean hidden = showhidden; - ArrayList ownedResidences = Residence.getPlayerManager().getResidences(targetplayer, hidden, onlyHidden); - ownedResidences.addAll(Residence.getRentManager().getRents(targetplayer, onlyHidden)); + boolean hidden = showhidden; + ArrayList ownedResidences = Residence.getPlayerManager().getResidences(targetplayer, hidden, onlyHidden, world); + ownedResidences.addAll(Residence.getRentManager().getRents(targetplayer, onlyHidden, world)); InformationPager.printListInfo(sender, targetplayer, ownedResidences, page, resadmin); } @@ -311,12 +318,17 @@ public void listAllResidences(CommandSender sender, int page) { this.listAllResidences(sender, page, false); } + public void listAllResidences(CommandSender sender, int page, boolean showhidden, World world) { + List list = getFromAllResidences(showhidden, false, world); + InformationPager.printListInfo(sender, null, list, page, showhidden); + } + public void listAllResidences(CommandSender sender, int page, boolean showhidden) { this.listAllResidences(sender, page, showhidden, false); } public void listAllResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { - List list = getFromAllResidences(showhidden, onlyHidden); + List list = getFromAllResidences(showhidden, onlyHidden, null); InformationPager.printListInfo(sender, null, list, page, showhidden); } @@ -357,12 +369,14 @@ public ArrayList getResidenceList(String targetplayer, boolean showhidde return list; } - public ArrayList getFromAllResidences(boolean showhidden, boolean onlyHidden) { + public ArrayList getFromAllResidences(boolean showhidden, boolean onlyHidden, World world) { ArrayList list = new ArrayList<>(); for (Entry res : residences.entrySet()) { boolean hidden = res.getValue().getPermissions().has("hidden", false); if (onlyHidden && !hidden) continue; + if (world != null && !world.getName().equalsIgnoreCase(res.getValue().getWorld())) + continue; if ((showhidden) || (!showhidden && !hidden)) { list.add(res.getValue()); } diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 27c8c3cdf..0d557188f 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -54,7 +54,15 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List perPage = 6; int start = (page - 1) * perPage; int end = start + perPage; + int pagecount = (int) Math.ceil((double) lines.size() / (double) perPage); + if (page == -1) { + start = 0; + end = lines.size(); + page = 1; + pagecount = 1; + } + if (pagecount == 0) pagecount = 1; if (page > pagecount) { diff --git a/src/plugin.yml b/src/plugin.yml index 0e891b309..452e0ec6c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.4.0 +version: 4.5.4.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] @@ -161,6 +161,9 @@ permissions: residence.command.list: description: Allows to access particular command default: true + residence.command.list.others: + description: Allows to access particular command + default: true residence.command.listall: description: Allows to access particular command default: true From 64687d06a89077ec0d7343eb49481cfa3ebad65a Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 Aug 2016 16:37:38 +0300 Subject: [PATCH 0237/1142] New command /res show to show particular residence with particles Remake of residence area visualizer --- .../bukkit/residence/ConfigManager.java | 20 ++ .../bukkit/residence/commands/create.java | 10 +- .../bukkit/residence/commands/list.java | 6 +- .../bukkit/residence/commands/listall.java | 2 + .../bukkit/residence/commands/select.java | 2 +- .../bukkit/residence/commands/show.java | 53 ++++ .../residence/containers/Visualizer.java | 147 +++++++++ .../residence/economy/TransactionManager.java | 6 +- .../residence/economy/rent/RentManager.java | 14 +- .../listeners/ResidencePlayerListener.java | 9 +- .../protection/ClaimedResidence.java | 37 ++- .../residence/protection/CuboidArea.java | 2 +- .../protection/ResidenceManager.java | 6 +- .../residence/selection/SelectionManager.java | 300 ++++++++++-------- src/plugin.yml | 3 + 15 files changed, 457 insertions(+), 160 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/commands/show.java create mode 100644 src/com/bekvon/bukkit/residence/containers/Visualizer.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index e7146b61a..dee5c55db 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -105,6 +105,8 @@ public class ConfigManager { protected boolean TeleportTitleMessage; protected int VisualizerRowSpacing; protected int VisualizerCollumnSpacing; + private int VisualizerFrameCap; + private int VisualizerSidesCap; protected boolean flagsInherit; protected ChatColor chatColor; protected boolean chatEnable; @@ -794,6 +796,16 @@ public void UpdateConfigFile() { VisualizerCollumnSpacing = c.get("Global.Visualizer.CollumnSpacing", 2); if (VisualizerCollumnSpacing < 1) VisualizerCollumnSpacing = 1; + + c.getW().addComment("Global.Visualizer.FrameCap", "Maximum amount of frame particles to show for one player"); + VisualizerFrameCap = c.get("Global.Visualizer.FrameCap", 2000); + if (VisualizerFrameCap < 1) + VisualizerFrameCap = 1; + + c.getW().addComment("Global.Visualizer.SidesCap", "Maximum amount of sides particles to show for one player"); + VisualizerSidesCap = c.get("Global.Visualizer.SidesCap", 2000); + if (VisualizerSidesCap < 1) + VisualizerSidesCap = 1; String effectsList = ""; for (Effect one : Effect.values()) { @@ -1606,4 +1618,12 @@ public boolean useFlagGUI() { public boolean BounceAnimation() { return BounceAnimation; } + + public int getVisualizerFrameCap() { + return VisualizerFrameCap; + } + + public int getVisualizerSidesCap() { + return VisualizerSidesCap; + } } diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index dbde5722a..73bcbd496 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -10,8 +10,10 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.selection.WorldGuardUtil; import com.sk89q.worldguard.protection.regions.ProtectedRegion; @@ -49,9 +51,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); - Residence.getSelectionManager().NewMakeBorders(player, lowLoc, highLoc, true); - Residence.getSelectionManager().NewMakeBorders(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence - .getSelectionManager().getPlayerLoc2(player.getName()), false); + Visualizer v = new Visualizer(player); + v.setAreas(Residence.getSelectionManager().getSelectionCuboid(player)); + v.setErrorAreas(new CuboidArea(lowLoc, highLoc)); + + Residence.getSelectionManager().showBounds(player, v); return true; } Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index d8500589d..698c477a6 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -24,6 +24,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command c: for (int i = 1; i < args.length; i++) { try { page = Integer.parseInt(args[i]); + if (page < 1) + page = 1; continue; } catch (Exception ex) { } @@ -50,10 +52,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command @Override public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "List Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res list ", + c.get(path + "Info", Arrays.asList("&eUsage: &6/res list ", "Lists all the residences a player owns (except hidden ones).", "If listing your own residences, shows hidden ones as well.", "To list everyones residences, use /res listall.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]", "[worldname]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index e4b1c7f75..bc9666c74 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -25,6 +25,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command c : for (int i = 1; i < args.length; i++) { try { page = Integer.parseInt(args[i]); + if (page < 1) + page = 1; continue; } catch (Exception ex) { } diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index c2ce989b9..68df2872a 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -160,7 +160,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command area = res.getArea(areaName); } if (area != null) { - Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), true); + Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), true); Residence.msg(player, lm.Select_Area, areaName, resName); } else { diff --git a/src/com/bekvon/bukkit/residence/commands/show.java b/src/com/bekvon/bukkit/residence/commands/show.java new file mode 100644 index 000000000..63f2d6810 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/show.java @@ -0,0 +1,53 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class show implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3300) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + ClaimedResidence res = null; + + if (args.length == 2) { + res = Residence.getResidenceManager().getByName(args[1]); + } else { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + } + + if (res == null) { + Residence.msg(sender, lm.Invalid_Residence); + return true; + } + + Visualizer v = new Visualizer(player); + v.setAreas(res.getAreaArray()); + Residence.getSelectionManager().showBounds(player, v); + + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Show residence boundaries"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res show ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/Visualizer.java b/src/com/bekvon/bukkit/residence/containers/Visualizer.java new file mode 100644 index 000000000..fae5a0349 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/Visualizer.java @@ -0,0 +1,147 @@ +package com.bekvon.bukkit.residence.containers; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; + +public class Visualizer { + private Player player; + private long start; + private List areas = new ArrayList(); + private List errorAreas = new ArrayList(); + private int id = -1; + private int errorId = -1; + private boolean once = false; + + private List locations = new ArrayList(); + private List errorLocations = new ArrayList(); + private Location loc = null; + + public Visualizer(Player player) { + this.player = player; + this.start = System.currentTimeMillis(); + } + + public boolean isSameLoc() { + if (loc == null) + return false; + if (loc.getWorld() != player.getWorld()) + return false; + if (loc.distance(player.getLocation()) > 5){ + return false; + } + return true; + } + + public long getStart() { + return start; + } + + public void setStart(long start) { + this.start = start; + } + + public Player getPlayer() { + return player; + } + + public void setPlayer(Player player) { + this.player = player; + } + + public List getAreas() { + return areas; + } + + public void setAreas(ClaimedResidence res) { + if (res != null) + this.areas = Arrays.asList(res.getAreaArray()); + } + + public void setAreas(CuboidArea[] areas) { + this.areas = Arrays.asList(areas); + } + + public void setAreas(ArrayList areas) { + this.areas = areas; + } + + public void setAreas(CuboidArea area) { + this.areas.add(area); + } + + public List getErrorAreas() { + return errorAreas; + } + + public void setErrorAreas(ClaimedResidence res) { + if (res != null) + this.errorAreas = Arrays.asList(res.getAreaArray()); + } + + public void setErrorAreas(CuboidArea[] errorAreas) { + this.errorAreas = Arrays.asList(errorAreas); + } + + public void setErrorAreas(ArrayList errorAreas) { + this.errorAreas = errorAreas; + } + + public void setErrorAreas(CuboidArea errorArea) { + this.errorAreas.add(errorArea); + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getErrorId() { + return errorId; + } + + public void setErrorId(int errorId) { + this.errorId = errorId; + } + + public boolean isOnce() { + return once; + } + + public void setOnce(boolean once) { + this.once = once; + } + + public List getLocations() { + return locations; + } + + public void setLocations(List locations) { + this.locations = locations; + } + + public List getErrorLocations() { + return errorLocations; + } + + public void setErrorLocations(List errorLocations) { + this.errorLocations = errorLocations; + } + + public Location getLoc() { + return loc; + } + + public void setLoc(Location loc) { + this.loc = loc; + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index adcea96ca..896282c27 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketBuyInterface; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -226,8 +227,9 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { Residence.getSignUtil().CheckSign(res); - CuboidArea area = res.getAreaArray()[0]; - Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); + Visualizer v = new Visualizer(player); + v.setAreas(res); + Residence.getSelectionManager().showBounds(player, v); Residence.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); Residence.msg(player, lm.Residence_Bought, res.getResidenceName()); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 449202ef1..da84bf4c6 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -7,12 +7,12 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketRentInterface; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceRentEvent; import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.utils.GetTime; @@ -262,8 +262,9 @@ public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean r Residence.getSignUtil().CheckSign(res); - CuboidArea area = res.getAreaArray()[0]; - Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); + Visualizer v = new Visualizer(player); + v.setAreas(res); + Residence.getSelectionManager().showBounds(player, v); res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); @@ -339,8 +340,11 @@ public void payRent(Player player, ClaimedResidence res, boolean resadmin) { if (Residence.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { rentedLand.endTime = rentedLand.endTime + daysToMs(land.days); Residence.getSignUtil().CheckSign(res); - CuboidArea area = res.getAreaArray()[0]; - Residence.getSelectionManager().NewMakeBorders(player, area.getHighLoc(), area.getLowLoc(), false); + + Visualizer v = new Visualizer(player); + v.setAreas(res); + Residence.getSelectionManager().showBounds(player, v); + Residence.msg(player, lm.Rent_Extended, land.days, res.getName()); Residence.msg(player, lm.Rent_Expire, GetTime.getTime(rentedLand.endTime)); } else { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 03311e641..b242c5251 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -54,6 +54,7 @@ import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.economy.rent.RentedLand; @@ -61,7 +62,6 @@ import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.signsStuff.Signs; @@ -1507,9 +1507,10 @@ public void run() { Location lastLoc = lastOutsideLoc.get(pname); if (Residence.getConfigManager().BounceAnimation()) { - CuboidArea area = res.getAreaByLoc(loc); - if (area != null) - Residence.getSelectionManager().MakeBorders(player, area.getLowLoc(), area.getHighLoc(), true); + Visualizer v = new Visualizer(player); + v.setErrorAreas(res.getAreaByLoc(player.getLocation())); + v.setOnce(true); + Residence.getSelectionManager().showBounds(player, v); } ClaimedResidence preRes = Residence.getResidenceManager().getByLoc(lastLoc); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index a8e0deee0..6f58e4d09 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.RandomLoc; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.ResidenceBank; import com.bekvon.bukkit.residence.economy.TransactionManager; @@ -346,15 +347,14 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } if (parent == null) { String collideResidence = Residence.getResidenceManager().checkAreaCollision(area, this); - if (collideResidence != null) { + ClaimedResidence cRes = Residence.getResidenceManager().getByName(collideResidence); + if (cRes != null) { if (player != null) { - Residence.msg(player, lm.Area_Collision, collideResidence); - CuboidArea oldArea = Residence.getResidenceManager().getByName(collideResidence).getAreaArray()[0]; - if (oldArea != null) { - Residence.getSelectionManager().NewMakeBorders(player, oldArea.lowPoints, oldArea.highPoints, true); - - Residence.getSelectionManager().NewMakeBorders(player, area.lowPoints, area.highPoints, false); - } + Residence.msg(player, lm.Area_Collision, cRes.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(area); + v.setErrorAreas(cRes); + Residence.getSelectionManager().showBounds(player, v); } return false; } @@ -450,10 +450,13 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } if (parent == null) { String collideResidence = Residence.getResidenceManager().checkAreaCollision(newarea, this); - if (collideResidence != null && player != null) { - Residence.msg(player, lm.Area_Collision, collideResidence); - CuboidArea area = Residence.getResidenceManager().getByName(collideResidence).getAreaArray()[0]; - Residence.getSelectionManager().NewMakeBorders(player, area.getLowLoc(), area.highPoints, true); + ClaimedResidence cRes = Residence.getResidenceManager().getByName(collideResidence); + if (cRes != null && player != null) { + Residence.msg(player, lm.Area_Collision, cRes.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(this.getAreaArray()); + v.setErrorAreas(cRes.getAreaArray()); + Residence.getSelectionManager().showBounds(player, v); return false; } } else { @@ -464,7 +467,9 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole if (res.checkCollision(newarea)) { if (player != null) { Residence.msg(player, lm.Area_SubzoneCollision, sz); - Residence.getSelectionManager().NewMakeBorders(player, res.getAreaArray()[0].lowPoints, res.getAreaArray()[0].highPoints, true); + Visualizer v = new Visualizer(player); + v.setErrorAreas(res.getAreaArray()); + Residence.getSelectionManager().showBounds(player, v); } return false; } @@ -613,8 +618,10 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l Residence.msg(player, lm.Subzone_Collide, resEntry.getKey()); if (res.getAreaArray().length > 0) { CuboidArea oldArea = res.getAreaArray()[0]; - Residence.getSelectionManager().NewMakeBorders(player, oldArea.lowPoints, oldArea.highPoints, true); - Residence.getSelectionManager().NewMakeBorders(player, newArea.lowPoints, newArea.highPoints, false); + Visualizer v = new Visualizer(player); + v.setAreas(newArea); + v.setErrorAreas(oldArea); + Residence.getSelectionManager().showBounds(player, v); } } diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index dc51c3f59..9a9b3f55d 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -19,7 +19,7 @@ public class CuboidArea { protected Location lowPoints; protected String worldName; - protected CuboidArea() { + public CuboidArea() { } public CuboidArea(Location startLoc, Location endLoc) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 03171d24d..b02a92767 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -25,6 +25,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.economy.rent.RentableLand; @@ -36,7 +37,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; @@ -253,7 +253,9 @@ public boolean addResidence(Player player, String owner, String name, Location l Residence.getPlayerManager().addResidence(newRes.getOwner(), newRes); if (player != null) { - Residence.getSelectionManager().NewMakeBorders(player, newArea.getHighLoc(), newArea.getLowLoc(), false); + Visualizer v = new Visualizer(player); + v.setAreas(newArea); + Residence.getSelectionManager().showBounds(player, v); Residence.getAutoSelectionManager().getList().remove(player.getName().toLowerCase()); Residence.msg(player, lm.Area_Create, "main"); Residence.msg(player, lm.Residence_Create, name); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 9b069d10e..168c2aa57 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -3,9 +3,12 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.SelectionSides; +import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; + import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -26,10 +29,7 @@ public class SelectionManager { protected Server server; private Residence plugin; - public static HashMap normalPrintMap = new HashMap(); - public static HashMap errorPrintMap = new HashMap(); - public static HashMap normalIDMap = new HashMap(); - public static HashMap errorIDMap = new HashMap(); + private HashMap vMap = new HashMap(); public static final int MIN_HEIGHT = 0; @@ -55,6 +55,10 @@ public void updateLocations(Player player, Location loc1, Location loc2) { } } + public void placeLoc1(Player player, Location loc) { + placeLoc1(player, loc, false); + } + public void placeLoc1(Player player, Location loc, boolean show) { if (loc != null) { playerLoc1.put(player.getName(), loc); @@ -64,6 +68,10 @@ public void placeLoc1(Player player, Location loc, boolean show) { } } + public void placeLoc2(Player player, Location loc) { + placeLoc2(player, loc, false); + } + public void placeLoc2(Player player, Location loc, boolean show) { if (loc != null) { playerLoc2.put(player.getName(), loc); @@ -82,7 +90,9 @@ private void updateForY(Player player) { public void afterSelectionUpdate(Player player) { if (hasPlacedBoth(player.getName())) { - NewMakeBorders(player, getPlayerLoc1(player.getName()), getPlayerLoc2(player.getName()), false); + Visualizer v = new Visualizer(player); + v.setAreas(this.getSelectionCuboid(player)); + this.showBounds(player, v); } } @@ -149,59 +159,24 @@ public void showSelectionInfo(Player player) { player.sendMessage(ChatColor.YELLOW + "Y" + Residence.msg(lm.General_Size, cuboidArea.getYSize())); player.sendMessage(ChatColor.YELLOW + "Z" + Residence.msg(lm.General_Size, cuboidArea.getZSize())); Residence.msg(player, lm.General_Separator); - NewMakeBorders(player, getPlayerLoc1(pname), getPlayerLoc2(pname), false); + Visualizer v = new Visualizer(player); + v.setAreas(this.getSelectionCuboid(player)); + this.showBounds(player, v); } else Residence.msg(player, lm.Select_Points); } - public static boolean showParticle(Player player, Location Current, boolean error) { - if (!player.getLocation().getWorld().getName().equalsIgnoreCase(Current.getWorld().getName())) - return false; - - if (Residence.isSpigot()) { - if (!error) { - player.spigot().playEffect(Current, Residence.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); - } else - player.spigot().playEffect(Current, Residence.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); - } else { - if (!error) { - Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, Current, player); - } else - Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, Current, player); - } - return false; - } - - public static boolean showParticleWalls(final Player player, final Location Current, final boolean error) { - if (!player.getLocation().getWorld().getName().equalsIgnoreCase(Current.getWorld().getName())) - return false; - if (Residence.isSpigot()) { - if (!error) { - player.spigot().playEffect(Current, Residence.getConfigManager().getSelectedSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); - } else - player.spigot().playEffect(Current, Residence.getConfigManager().getOverlapSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); - } else { - if (!error) - Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, Current, player); - else - Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, Current, player); - } - return false; - } - - public void NewMakeBorders(final Player player, final Location OriginalLow, final Location OriginalHigh, final boolean error) { - + public void showBounds(final Player player, final Visualizer v) { if (!Residence.getConfigManager().useVisualizer()) return; - - if (!error) - normalPrintMap.put(player.getName(), System.currentTimeMillis()); - else - errorPrintMap.put(player.getName(), System.currentTimeMillis()); + vMap.put(player.getName(), v); Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { - MakeBorders(player, OriginalLow, OriginalHigh, error); + if (!v.getAreas().isEmpty()) + MakeBorders(player, false); + if (!v.getErrorAreas().isEmpty()) + MakeBorders(player, true); return; } }); @@ -340,128 +315,203 @@ public List GetLocationsCornersByData(Location loc, Double TX, Double return locList; } - public boolean MakeBorders(final Player player, final Location OriginalLow, final Location OriginalHigh, final boolean error) { + public boolean MakeBorders(final Player player, final boolean error) { - CuboidArea cuboidArea = new CuboidArea(OriginalLow, OriginalHigh); - cuboidArea.getHighLoc().add(1, 1, 1); + final Visualizer v = vMap.get(player.getName()); - SelectionSides Sides = new SelectionSides(); + if (v == null) + return false; - int Range = Residence.getConfigManager().getVisualizerRange(); + List areas = null; + + if (!error) + areas = v.getAreas(); + else + areas = v.getErrorAreas(); Location loc = player.getLocation(); -// loc = loc.add(0, 0.5, 0); - double PLLX = loc.getBlockX() - Range; - double PLLZ = loc.getBlockZ() - Range; - double PLLY = loc.getBlockY() - Range; - double PLHX = loc.getBlockX() + Range; - double PLHZ = loc.getBlockZ() + Range; - double PLHY = loc.getBlockY() + Range; - - if (cuboidArea.getLowLoc().getBlockX() < PLLX) { - cuboidArea.getLowLoc().setX(PLLX); - Sides.setWestSide(false); - } + int Range = Residence.getConfigManager().getVisualizerRange(); - if (cuboidArea.getHighLoc().getBlockX() > PLHX) { - cuboidArea.getHighLoc().setX(PLHX); - Sides.setEastSide(false); - } + final List locList = new ArrayList(); + final List locList2 = new ArrayList(); + + final boolean same = v.isSameLoc(); + if (!same) { + for (CuboidArea area : areas) { + if (area == null) + continue; + CuboidArea cuboidArea = new CuboidArea(area.getLowLoc(), area.getHighLoc()); + cuboidArea.getHighLoc().add(1, 1, 1); + + SelectionSides Sides = new SelectionSides(); + + double PLLX = loc.getBlockX() - Range; + double PLLZ = loc.getBlockZ() - Range; + double PLLY = loc.getBlockY() - Range; + double PLHX = loc.getBlockX() + Range; + double PLHZ = loc.getBlockZ() + Range; + double PLHY = loc.getBlockY() + Range; + + if (cuboidArea.getLowLoc().getBlockX() < PLLX) { + cuboidArea.getLowLoc().setX(PLLX); + Sides.setWestSide(false); + } - if (cuboidArea.getLowLoc().getBlockZ() < PLLZ) { - cuboidArea.getLowLoc().setZ(PLLZ); - Sides.setNorthSide(false); - } + if (cuboidArea.getHighLoc().getBlockX() > PLHX) { + cuboidArea.getHighLoc().setX(PLHX); + Sides.setEastSide(false); + } - if (cuboidArea.getHighLoc().getBlockZ() > PLHZ) { - cuboidArea.getHighLoc().setZ(PLHZ); - Sides.setSouthSide(false); - } + if (cuboidArea.getLowLoc().getBlockZ() < PLLZ) { + cuboidArea.getLowLoc().setZ(PLLZ); + Sides.setNorthSide(false); + } - if (cuboidArea.getLowLoc().getBlockY() < PLLY) { - cuboidArea.getLowLoc().setY(PLLY); - Sides.setBottomSide(false); - } + if (cuboidArea.getHighLoc().getBlockZ() > PLHZ) { + cuboidArea.getHighLoc().setZ(PLHZ); + Sides.setSouthSide(false); + } - if (cuboidArea.getHighLoc().getBlockY() > PLHY) { - cuboidArea.getHighLoc().setY(PLHY); - Sides.setTopSide(false); - } + if (cuboidArea.getLowLoc().getBlockY() < PLLY) { + cuboidArea.getLowLoc().setY(PLLY); + Sides.setBottomSide(false); + } - double TX = cuboidArea.getXSize() - 1; - double TY = cuboidArea.getYSize() - 1; - double TZ = cuboidArea.getZSize() - 1; + if (cuboidArea.getHighLoc().getBlockY() > PLHY) { + cuboidArea.getHighLoc().setY(PLHY); + Sides.setTopSide(false); + } - if (!error && normalIDMap.containsKey(player.getName())) { - Bukkit.getScheduler().cancelTask(normalIDMap.get(player.getName())); - } else if (error && errorIDMap.containsKey(player.getName())) { - Bukkit.getScheduler().cancelTask(errorIDMap.get(player.getName())); - } + double TX = cuboidArea.getXSize() - 1; + double TY = cuboidArea.getYSize() - 1; + double TZ = cuboidArea.getZSize() - 1; - final List locList = GetLocationsWallsByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range); + if (!error && v.getId() != -1) { + Bukkit.getScheduler().cancelTask(v.getId()); + } else if (error && v.getErrorId() != -1) { + Bukkit.getScheduler().cancelTask(v.getErrorId()); + } - final List locList2 = GetLocationsCornersByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range); + locList.addAll(GetLocationsWallsByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range)); + locList2.addAll(GetLocationsCornersByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range)); + } + v.setLoc(player.getLocation()); + } else { + locList.addAll(v.getLocations()); + locList2.addAll(v.getErrorLocations()); + } Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { - if (Residence.isSpigot()) { + int size = locList.size(); + int errorSize = locList2.size(); + + int timesMore = 1; + int errorTimesMore = 1; + + if (size > Residence.getConfigManager().getVisualizerSidesCap() && !same) { + timesMore = size / Residence.getConfigManager().getVisualizerSidesCap() + 1; + } + if (errorSize > Residence.getConfigManager().getVisualizerFrameCap() && !same) { + errorTimesMore = errorSize / Residence.getConfigManager().getVisualizerFrameCap() + 1; + } + + List trimed = new ArrayList(); + List errorTrimed = new ArrayList(); + + boolean spigot = Residence.isSpigot(); + + if (spigot) { if (!error) - for (Location one : locList) - player.spigot().playEffect(one, Residence.getConfigManager().getSelectedSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + player.spigot().playEffect(l, Residence.getConfigManager().getSelectedSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + if (!same) + trimed.add(l); + } else - for (Location one : locList) - player.spigot().playEffect(one, Residence.getConfigManager().getOverlapSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + player.spigot().playEffect(l, Residence.getConfigManager().getOverlapSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + if (!same) + trimed.add(l); + } if (!error) - for (Location one : locList2) - player.spigot().playEffect(one, Residence.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + for (int i = 0; i < locList2.size(); i += errorTimesMore) { + Location l = locList2.get(i); + player.spigot().playEffect(l, Residence.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + if (!same) + errorTrimed.add(l); + } else - for (Location one : locList2) - player.spigot().playEffect(one, Residence.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + for (int i = 0; i < locList2.size(); i += errorTimesMore) { + Location l = locList2.get(i); + player.spigot().playEffect(l, Residence.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + if (!same) + errorTrimed.add(l); + } } else { if (!error) - for (Location one : locList) - Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, one, player); + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, l, player); + if (!same) + trimed.add(l); + } else - for (Location one : locList) - Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, one, player); + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, l, player); + if (!same) + trimed.add(l); + } if (!error) - for (Location one : locList2) - Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, one, player); + for (int i = 0; i < locList2.size(); i += errorTimesMore) { + Location l = locList2.get(i); + Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); + if (!same) + errorTrimed.add(l); + } else - for (Location one : locList2) - Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, one, player); + for (int i = 0; i < locList2.size(); i += errorTimesMore) { + Location l = locList2.get(i); + Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); + if (!same) + errorTrimed.add(l); + } + } + + if (!same) { + v.setLocations(trimed); + v.setErrorLocations(errorTrimed); } return; } }); - String planerName = player.getName(); - if (!error && !normalPrintMap.containsKey(planerName)) - return false; - else if (error && !errorPrintMap.containsKey(planerName)) - return false; + if (v.isOnce()) + return true; - if (!error && normalPrintMap.get(planerName) + Residence.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) - return false; - else if (error && errorPrintMap.get(planerName) + Residence.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) + if (v.getStart() + Residence.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) return false; int scid = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { - if (player.isOnline()) - MakeBorders(player, OriginalLow, OriginalHigh, error); + if (player.isOnline()) { + MakeBorders(player, error); + } return; } }, Residence.getConfigManager().getVisualizerUpdateInterval() * 1L); if (!error) - normalIDMap.put(planerName, scid); + v.setId(scid); else - errorIDMap.put(planerName, scid); + v.setErrorId(scid); return true; } diff --git a/src/plugin.yml b/src/plugin.yml index 452e0ec6c..d2b7388aa 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -98,6 +98,9 @@ permissions: residence.randomtp: description: Allows to use /res rt command default: true + residence.command.show: + description: Allows to access particular command + default: true residence.command.area: description: Allows to access particular command default: true From 0af6acc2d0b4ec0a1be89203aaef835a05aa8536 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 Aug 2016 18:28:18 +0300 Subject: [PATCH 0238/1142] Include one additional group for example how to add one fix for market rent removal with particular permission node --- .../residence/economy/rent/RentManager.java | 2 +- .../residence/selection/SelectionManager.java | 2 -- src/groups.yml | 36 ++++++++++++++++++- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index da84bf4c6..91a4a0413 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -373,7 +373,7 @@ public void unrent(Player player, ClaimedResidence res, boolean resadmin) { return; } - if (resadmin || rent.player.equals(player.getName())) { + if (resadmin || rent.player.equals(player.getName()) || res.isOwner(player) && player.hasPermission("residence.market.evict")) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENTABLE); Residence.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 168c2aa57..fd50ce64b 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -7,8 +7,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; - import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; diff --git a/src/groups.yml b/src/groups.yml index af0862b39..ea71733c2 100644 --- a/src/groups.yml +++ b/src/groups.yml @@ -1,6 +1,6 @@ # These groups correspond to the Permissions groups defined in your '.yml' Groups: - Default: #group name + Default: #group name, DONT remove this group # Information about the Residence zone that the player can define. #Uncomment the lines below to mirror this config to other groups. #Mirror: @@ -121,6 +121,40 @@ Groups: #build: false WorldNameHere: #or you can apply them by each individual world #build: false + NextGroup: #group name, player should have residence.group.nextgroup permission node to have access to this residence group + Residence: + CanCreate: true + MaxResidences: 4 + MaxAreasPerResidence: 2 + MaxEastWest: 20 + MaxNorthSouth: 20 + MaxUpDown: 20 + MinHeight: 0 + MaxHeight: 255 + SubzoneDepth: 3 + CanTeleport: true + Unstuck: true + Kick: true + SelectCommandAccess: true + ItemListAccess: true + Messaging: + CanChange: true + DefaultEnter: Welcome %player to %residence, owned by %owner. + DefaultLeave: Now leaving %residence. + Lease: + MaxDays: 16 + RenewIncrement: 14 + Rent: + MaxRents: 3 + MaxRentables: 3 + MaxRentDays: 31 + Economy: + CanBuy: true + CanSell: false + IgnoreLimits: false + BuyCost: 0.7 + SellCost: 0.3 + RenewCost: 0.3 # You can manually specify the group a player is in below, this overrides their permissions group. GroupAssignments: From 65cda170d501bbd985cd56896104372d629ca5bc Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 Aug 2016 19:02:59 +0300 Subject: [PATCH 0239/1142] Don't show commands in help list you don't have permission --- .../bekvon/bukkit/residence/ResidenceCommandListener.java | 1 + src/com/bekvon/bukkit/residence/text/help/HelpEntry.java | 5 +++++ src/plugin.yml | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 13cd268aa..b32b16abf 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -14,6 +14,7 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceCommandListener extends Residence { diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index f1b64159d..37e9bb923 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -12,6 +12,8 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -167,6 +169,9 @@ private List getHelpData(CommandSender sender, boolean resadmin) { if (!ResidenceCommandListener.getAdminCommands().contains(entry.getName().toLowerCase()) && resadmin) continue; + if (!sender.hasPermission("residence.command." + entry.getName().toLowerCase())) + continue; + } else { if (GlobalFlags.getFlags().containsKey(entry.getName().toLowerCase())) { Boolean state = GlobalFlags.getFlags().get(entry.getName().toLowerCase()); diff --git a/src/plugin.yml b/src/plugin.yml index d2b7388aa..b0265dfbf 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.4.2 +version: 4.5.5.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 48ca8b990a34c0d16803424c02f5282250c32410 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Aug 2016 13:34:29 +0300 Subject: [PATCH 0240/1142] Save creation date New flags for player move speed in residence wspeed1 and wspeed2 Print all lines of res listall in one go for console user --- .../bukkit/residence/ConfigManager.java | 25 ++++- .../residence/ResidenceCommandListener.java | 1 - .../bukkit/residence/containers/Flags.java | 4 +- .../listeners/ResidencePlayerListener.java | 106 +++++++++++++++--- .../protection/ResidenceManager.java | 3 +- .../bukkit/residence/text/help/HelpEntry.java | 15 ++- .../residence/text/help/InformationPager.java | 10 +- 7 files changed, 136 insertions(+), 28 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index dee5c55db..dd9a05237 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -169,6 +169,8 @@ public class ConfigManager { protected List FlagsList; protected List NegativePotionEffects; protected List NegativeLingeringPotionEffects; + private Double WalkSpeed1; + private Double WalkSpeed2; protected Location KickLocation; @@ -466,6 +468,17 @@ public void UpdateConfigFile() { NegativeLingeringPotionEffects = c.get("Global.Optimizations.NegativeLingeringPotions", Arrays.asList("slowness", "instant_damage", "poison", "slowness")); + c.getW().addComment("Global.Optimizations.WalkSpeed", + "Defines speed for particular wspeed1 and wspeed2 flags. It can be from 0 up to 5"); + WalkSpeed1 = c.get("Global.Optimizations.WalkSpeed.1", 0.5D); + WalkSpeed1 = WalkSpeed1 < 0 ? 0 : WalkSpeed1; + WalkSpeed1 = WalkSpeed1 > 5 ? 5 : WalkSpeed1; + WalkSpeed1 = WalkSpeed1 / 5.0; + WalkSpeed2 = c.get("Global.Optimizations.WalkSpeed.2", 2D); + WalkSpeed2 = WalkSpeed2 < 0 ? 0 : WalkSpeed2; + WalkSpeed2 = WalkSpeed2 > 5 ? 5 : WalkSpeed2; + WalkSpeed2 = WalkSpeed2 / 5.0; + c.getW().addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); minMoveUpdate = c.get("Global.MoveCheckInterval", 500); @@ -796,12 +809,12 @@ public void UpdateConfigFile() { VisualizerCollumnSpacing = c.get("Global.Visualizer.CollumnSpacing", 2); if (VisualizerCollumnSpacing < 1) VisualizerCollumnSpacing = 1; - + c.getW().addComment("Global.Visualizer.FrameCap", "Maximum amount of frame particles to show for one player"); VisualizerFrameCap = c.get("Global.Visualizer.FrameCap", 2000); if (VisualizerFrameCap < 1) VisualizerFrameCap = 1; - + c.getW().addComment("Global.Visualizer.SidesCap", "Maximum amount of sides particles to show for one player"); VisualizerSidesCap = c.get("Global.Visualizer.SidesCap", 2000); if (VisualizerSidesCap < 1) @@ -1626,4 +1639,12 @@ public int getVisualizerFrameCap() { public int getVisualizerSidesCap() { return VisualizerSidesCap; } + + public Double getWalkSpeed1() { + return WalkSpeed1; + } + + public Double getWalkSpeed2() { + return WalkSpeed2; + } } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index b32b16abf..13cd268aa 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -14,7 +14,6 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceCommandListener extends Residence { diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 7d2ac93a8..f46c2904c 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -96,7 +96,9 @@ public enum Flags { trusted(1, 0, FlagMode.Group, "Gives build, use, move, container and tp flags", true), use(70, 0, FlagMode.Both, "Allows or denys use of doors, lever, buttons, etc...", true), vehicledestroy(328, 0, FlagMode.Both, "Allows or denys vehicle destroy", true), - waterflow(326, 0, FlagMode.Residence, "Allows or denys water flow, overrides flow", true); + waterflow(326, 0, FlagMode.Residence, "Allows or denys water flow, overrides flow", true), + wspeed1(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true), + wspeed2(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true); private int id; private int data; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b242c5251..5fa1baf3a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -64,6 +64,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.utils.GetTime; @@ -260,8 +261,7 @@ public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { return; if (!event.getFlag().equalsIgnoreCase(Flags.day.getName()) && - !event.getFlag().equalsIgnoreCase(Flags.night.getName()) && - !event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + !event.getFlag().equalsIgnoreCase(Flags.night.getName())) return; switch (event.getNewState()) { @@ -269,9 +269,6 @@ public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { case FALSE: for (Player one : event.getResidence().getPlayersInResidence()) one.resetPlayerTime(); - if (Residence.getVersionChecker().GetVersion() > 1900 && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setGlowing(false); break; case INVALID: break; @@ -282,9 +279,69 @@ public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { if (event.getFlag().equalsIgnoreCase(Flags.night.getName())) for (Player one : event.getResidence().getPlayersInResidence()) one.setPlayerTime(14000L, false); + break; + default: + break; + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: if (Residence.getVersionChecker().GetVersion() > 1900 && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) for (Player one : event.getResidence().getPlayersInResidence()) - one.setGlowing(true); + one.setGlowing(false); + break; + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + if (Residence.getVersionChecker().GetVersion() > 1900) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setGlowing(true); + break; + default: + break; + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeWSpeed(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.wspeed1.getName()) && + !event.getFlag().equalsIgnoreCase(Flags.wspeed2.getName())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(0.2F); + break; + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.wspeed1.getName())) { + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); + if (event.getResidence().getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + event.getResidence().getPermissions().setFlag(Flags.wspeed2.getName(), FlagState.NEITHER); + } else if (event.getFlag().equalsIgnoreCase(Flags.wspeed2.getName())) { + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); + if (event.getResidence().getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + event.getResidence().getPermissions().setFlag(Flags.wspeed1.getName(), FlagState.NEITHER); + } break; default: break; @@ -1481,6 +1538,9 @@ public void run() { if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.resetPlayerTime(); + if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + player.setWalkSpeed(0.2F); + if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); @@ -1568,18 +1628,6 @@ public void run() { player.setAllowFlight(false); } - if (Residence.getVersionChecker().GetVersion() > 1900 && res.getPermissions().has(Flags.glow, false)) - player.setGlowing(true); - - if (res.getPermissions().has(Flags.day, false)) - player.setPlayerTime(6000L, false); - else if (res.getPermissions().has(Flags.night, false)) - player.setPlayerTime(14000L, false); - - if (res.getPermissions().has(Flags.sun, false)) - player.setPlayerWeather(WeatherType.CLEAR); - else if (res.getPermissions().has(Flags.rain, false)) - player.setPlayerWeather(WeatherType.DOWNFALL); } lastOutsideLoc.put(pname, loc); @@ -1596,6 +1644,9 @@ else if (res.getPermissions().has(Flags.rain, false)) if (ResOld.getPermissions().has(Flags.night, false) || ResOld.getPermissions().has(Flags.day, false)) player.resetPlayerTime(); + if (ResOld.getPermissions().has(Flags.wspeed1, false) || ResOld.getPermissions().has(Flags.wspeed2, false)) + player.setWalkSpeed(0.2F); + if (ResOld.getPermissions().has(Flags.sun, false) || ResOld.getPermissions().has(Flags.rain, false)) player.resetPlayerWeather(); @@ -1637,6 +1688,25 @@ else if (res.getPermissions().has(Flags.rain, false)) Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); } } + + + if (Residence.getVersionChecker().GetVersion() > 1900 && res.getPermissions().has(Flags.glow, false)) + player.setGlowing(true); + + if (res.getPermissions().has(Flags.day, false)) + player.setPlayerTime(6000L, false); + else if (res.getPermissions().has(Flags.night, false)) + player.setPlayerTime(14000L, false); + + if (res.getPermissions().has(Flags.wspeed1, false)) + player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); + else if (res.getPermissions().has(Flags.wspeed2, false)) + player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); + + if (res.getPermissions().has(Flags.sun, false)) + player.setPlayerWeather(WeatherType.CLEAR); + else if (res.getPermissions().has(Flags.rain, false)) + player.setPlayerWeather(WeatherType.DOWNFALL); } } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index b02a92767..907a87cd5 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -224,6 +224,7 @@ public boolean addResidence(Player player, String owner, String name, Location l newRes.setEnterMessage(group.getDefaultEnterMessage()); newRes.setLeaveMessage(group.getDefaultLeaveMessage()); newRes.setName(name); + newRes.setCreateTime(); if (residences.containsKey(name.toLowerCase())) { Residence.msg(player, lm.Residence_AlreadyExists, residences.get(name.toLowerCase()).getResidenceName()); @@ -254,7 +255,7 @@ public boolean addResidence(Player player, String owner, String name, Location l if (player != null) { Visualizer v = new Visualizer(player); - v.setAreas(newArea); + v.setAreas(newArea); Residence.getSelectionManager().showBounds(player, v); Residence.getAutoSelectionManager().getList().remove(player.getName().toLowerCase()); Residence.msg(player, lm.Area_Create, "main"); diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 37e9bb923..a248f4789 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -12,8 +12,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -179,8 +177,19 @@ private List getHelpData(CommandSender sender, boolean resadmin) { continue; } + String desc = entry.getDescription(); + + switch (entry.getName().toLowerCase()) { + case "wspeed1": + desc = desc.replace("%1", Residence.getConfigManager().getWalkSpeed1() + ""); + break; + case "wspeed2": + desc = desc.replace("%1", Residence.getConfigManager().getWalkSpeed2() + ""); + break; + } + // adding flag name and description for later sorting - unsortMap.put(entry.getName(), ChatColor.GREEN + entry.getName() + ChatColor.GOLD + " - " + entry.getDescription()); + unsortMap.put(entry.getName(), ChatColor.GREEN + entry.getName() + ChatColor.GOLD + " - " + desc); continue; } } diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 0d557188f..ce8da40c8 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -9,6 +9,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import java.util.Arrays; @@ -78,6 +79,7 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List if (resadmin) cmd = "resadmin"; + String mm = ""; for (int i = start; i < end; i++) { if (lines.size() <= i) break; @@ -134,9 +136,13 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List if (sender instanceof Player) Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + Residence.getResidenceManager().convertToRaw(null, msg, StringB.toString(), cmd + " tp " + res.getName())); - else - sender.sendMessage(msg + " " + StringB.toString().replace("\n", "")); + else { + sender.sendMessage(i + ""); + mm += msg + " " + StringB.toString().replace("\n", "") + " \n"; + } } + if (!(sender instanceof Player)) + sender.sendMessage("\n" + mm); if (targetPlayer != null) ShowPagination(sender.getName(), pagecount, page, cmd + " list " + targetPlayer); else From 5333df9ea63a061b5164e50d59ff3eef9a7cdbd7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Aug 2016 14:34:08 +0300 Subject: [PATCH 0241/1142] Better this way --- .../bekvon/bukkit/residence/Residence.java | 14 ++++++- .../protection/ClaimedResidence.java | 6 +-- .../protection/ResidenceManager.java | 6 +-- .../residence/text/help/InformationPager.java | 42 ++++++++++++++----- src/plugin.yml | 2 +- 5 files changed, 52 insertions(+), 18 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 17fc79f17..7e18b447e 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -61,6 +61,12 @@ import com.bekvon.bukkit.residence.allNms.v1_10Events; import com.bekvon.bukkit.residence.allNms.v1_8Events; import com.bekvon.bukkit.residence.allNms.v1_9Events; +import com.bekvon.bukkit.residence.api.ChatInterface; +import com.bekvon.bukkit.residence.api.MarketBuyInterface; +import com.bekvon.bukkit.residence.api.MarketRentInterface; +import com.bekvon.bukkit.residence.api.ResidenceApi; +import com.bekvon.bukkit.residence.api.ResidenceInterface; +import com.bekvon.bukkit.residence.api.ResidencePlayerInterface; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; @@ -93,7 +99,7 @@ import com.bekvon.bukkit.residence.utils.VersionChecker; import com.bekvon.bukkit.residence.utils.YmlMaker; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; -import com.bekvon.bukkit.residence.api.*; +import com.bekvon.bukkit.residence.text.help.InformationPager; import com.earth2me.essentials.Essentials; import com.griefcraft.lwc.LWC; import com.griefcraft.lwc.LWCPlugin; @@ -159,6 +165,7 @@ public class Residence extends JavaPlugin { protected static ActionBar ABManager; protected static AutoSelection AutoSelectionManager; protected static SchematicsManager SchematicManager; + private static InformationPager InformationPagerManager; protected static CommandFiller cmdFiller; @@ -492,6 +499,8 @@ public void onEnable() { PlayerManager = new PlayerManager(); ShopSignUtilManager = new ShopSignUtil(this); RandomTpManager = new RandomTp(this); + + InformationPagerManager = new InformationPager(this); zip = new ZipLibrary(); @@ -1655,4 +1664,7 @@ public static String msg(lm lm, Object... variables) { return Residence.getLM().getMessage(lm, variables); } + public static InformationPager getInfoPageManager() { + return InformationPagerManager; + } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 6f58e4d09..efdd1b3e0 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1053,7 +1053,7 @@ public void printSubzoneList(Player player, int page) { for (Entry sz : subzones.entrySet()) { temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + Residence.msg(lm.General_Owner, sz.getValue().getOwner())); } - InformationPager.printInfo(player, Residence.msg(lm.General_Subzones), temp, page); + Residence.getInfoPageManager().printInfo(player, Residence.msg(lm.General_Subzones), temp, page); } public void printAreaList(Player player, int page) { @@ -1061,7 +1061,7 @@ public void printAreaList(Player player, int page) { for (String area : areas.keySet()) { temp.add(area); } - InformationPager.printInfo(player, Residence.msg(lm.General_PhysicalAreas), temp, page); + Residence.getInfoPageManager().printInfo(player, Residence.msg(lm.General_PhysicalAreas), temp, page); } public void printAdvancedAreaList(Player player, int page) { @@ -1074,7 +1074,7 @@ public void printAdvancedAreaList(Player player, int page) { .getBlockX() + "," + h.getBlockY() + "," + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); } - InformationPager.printInfo(player, Residence.msg(lm.General_PhysicalAreas), temp, page); + Residence.getInfoPageManager().printInfo(player, Residence.msg(lm.General_PhysicalAreas), temp, page); } public String[] getAreaList() { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 907a87cd5..1ad61bfef 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -314,7 +314,7 @@ public void listResidences(CommandSender sender, String targetplayer, int page, boolean hidden = showhidden; ArrayList ownedResidences = Residence.getPlayerManager().getResidences(targetplayer, hidden, onlyHidden, world); ownedResidences.addAll(Residence.getRentManager().getRents(targetplayer, onlyHidden, world)); - InformationPager.printListInfo(sender, targetplayer, ownedResidences, page, resadmin); + Residence.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin); } public void listAllResidences(CommandSender sender, int page) { @@ -323,7 +323,7 @@ public void listAllResidences(CommandSender sender, int page) { public void listAllResidences(CommandSender sender, int page, boolean showhidden, World world) { List list = getFromAllResidences(showhidden, false, world); - InformationPager.printListInfo(sender, null, list, page, showhidden); + Residence.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); } public void listAllResidences(CommandSender sender, int page, boolean showhidden) { @@ -332,7 +332,7 @@ public void listAllResidences(CommandSender sender, int page, boolean showhidden public void listAllResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { List list = getFromAllResidences(showhidden, onlyHidden, null); - InformationPager.printListInfo(sender, null, list, page, showhidden); + Residence.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); } public String[] getResidenceList() { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index ce8da40c8..b0a1d731a 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -9,21 +9,26 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; public class InformationPager { + Residence plugin; - public static void printInfo(CommandSender sender, String title, String[] lines, int page) { - InformationPager.printInfo(sender, title, Arrays.asList(lines), page); + public InformationPager(Residence plugin) { + this.plugin = plugin; } - public static void printInfo(CommandSender sender, String title, List lines, int page) { + public void printInfo(CommandSender sender, String title, String[] lines, int page) { + printInfo(sender, title, Arrays.asList(lines), page); + } + + public void printInfo(CommandSender sender, String title, List lines, int page) { int perPage = 6; int start = (page - 1) * perPage; int end = start + perPage; @@ -47,7 +52,7 @@ public static void printInfo(CommandSender sender, String title, List li Residence.msg(sender, lm.InformationPage_NoNextPage); } - public static void printListInfo(CommandSender sender, String targetPlayer, List lines, int page, boolean resadmin) { + public void printListInfo(CommandSender sender, String targetPlayer, List lines, int page, boolean resadmin) { if (targetPlayer != null) lines = Residence.getSortingManager().sortResidences(lines); int perPage = 20; @@ -79,7 +84,7 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List if (resadmin) cmd = "resadmin"; - String mm = ""; + List linesForConsole = new ArrayList(); for (int i = start; i < end; i++) { if (lines.size() <= i) break; @@ -137,19 +142,36 @@ public static void printListInfo(CommandSender sender, String targetPlayer, List Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + Residence.getResidenceManager().convertToRaw(null, msg, StringB.toString(), cmd + " tp " + res.getName())); else { - sender.sendMessage(i + ""); - mm += msg + " " + StringB.toString().replace("\n", "") + " \n"; + linesForConsole.add(msg + " " + StringB.toString().replace("\n", "")); } } if (!(sender instanceof Player)) - sender.sendMessage("\n" + mm); + printListWithDelay(sender, linesForConsole); + if (targetPlayer != null) ShowPagination(sender.getName(), pagecount, page, cmd + " list " + targetPlayer); else ShowPagination(sender.getName(), pagecount, page, cmd + " listall"); } - public static void ShowPagination(String target, int pageCount, int CurrentPage, String cmd) { + private void printListWithDelay(final CommandSender sender, final List linesForConsole) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + for (int i = 0; i < 20; i++) { + if (linesForConsole.size() > 0) { + sender.sendMessage(linesForConsole.get(0)); + linesForConsole.remove(0); + } + } + printListWithDelay(sender, linesForConsole); + return; + } + }, 1L); + + } + + public void ShowPagination(String target, int pageCount, int CurrentPage, String cmd) { if (target.equalsIgnoreCase("console")) return; String separator = ChatColor.GOLD + ""; diff --git a/src/plugin.yml b/src/plugin.yml index b0265dfbf..7916839e2 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.5.0 +version: 4.5.6.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 5d5da6377c908ba56f41722c8b6044b56b357ee6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Aug 2016 14:54:59 +0300 Subject: [PATCH 0242/1142] Properly include error visualizer locations --- .../residence/containers/Visualizer.java | 24 +++++++++++++-- .../protection/ClaimedResidence.java | 13 +++++---- .../residence/selection/SelectionManager.java | 29 +++++++++++++------ 3 files changed, 50 insertions(+), 16 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Visualizer.java b/src/com/bekvon/bukkit/residence/containers/Visualizer.java index fae5a0349..149e38f42 100644 --- a/src/com/bekvon/bukkit/residence/containers/Visualizer.java +++ b/src/com/bekvon/bukkit/residence/containers/Visualizer.java @@ -21,6 +21,8 @@ public class Visualizer { private List locations = new ArrayList(); private List errorLocations = new ArrayList(); + private List locations2 = new ArrayList(); + private List errorLocations2 = new ArrayList(); private Location loc = null; public Visualizer(Player player) { @@ -33,9 +35,11 @@ public boolean isSameLoc() { return false; if (loc.getWorld() != player.getWorld()) return false; - if (loc.distance(player.getLocation()) > 5){ + if (!errorAreas.isEmpty() && errorLocations.isEmpty()) return false; - } + if (loc.distance(player.getLocation()) > 5) + return false; + return true; } @@ -129,6 +133,14 @@ public void setLocations(List locations) { this.locations = locations; } + public List getLocations2() { + return locations2; + } + + public void setLocations2(List locations) { + this.locations2 = locations; + } + public List getErrorLocations() { return errorLocations; } @@ -137,6 +149,14 @@ public void setErrorLocations(List errorLocations) { this.errorLocations = errorLocations; } + public List getErrorLocations2() { + return errorLocations2; + } + + public void setErrorLocations2(List errorLocations) { + this.errorLocations2 = errorLocations; + } + public Location getLoc() { return loc; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index efdd1b3e0..182a58499 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -23,6 +23,8 @@ import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.Debug; + import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; @@ -610,20 +612,21 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l CuboidArea newArea = new CuboidArea(loc1, loc2); + Debug.D("s2"); Set> set = subzones.entrySet(); for (Entry resEntry : set) { ClaimedResidence res = resEntry.getValue(); if (res.checkCollision(newArea)) { if (player != null) { Residence.msg(player, lm.Subzone_Collide, resEntry.getKey()); - if (res.getAreaArray().length > 0) { - CuboidArea oldArea = res.getAreaArray()[0]; +// if (res.getAreaArray().length > 0) { +// CuboidArea oldArea = res.getAreaArray()[0]; Visualizer v = new Visualizer(player); v.setAreas(newArea); - v.setErrorAreas(oldArea); + v.setErrorAreas(res); + Debug.D("s"); Residence.getSelectionManager().showBounds(player, v); - } - +// } } return false; } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index fd50ce64b..e85efab7f 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; + import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -395,8 +396,13 @@ public boolean MakeBorders(final Player player, final boolean error) { } v.setLoc(player.getLocation()); } else { - locList.addAll(v.getLocations()); - locList2.addAll(v.getErrorLocations()); + if (error) { + locList.addAll(v.getErrorLocations()); + locList2.addAll(v.getErrorLocations2()); + } else { + locList.addAll(v.getLocations()); + locList2.addAll(v.getLocations2()); + } } Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @@ -417,7 +423,7 @@ public void run() { } List trimed = new ArrayList(); - List errorTrimed = new ArrayList(); + List trimed2 = new ArrayList(); boolean spigot = Residence.isSpigot(); @@ -442,14 +448,14 @@ public void run() { Location l = locList2.get(i); player.spigot().playEffect(l, Residence.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); if (!same) - errorTrimed.add(l); + trimed2.add(l); } else for (int i = 0; i < locList2.size(); i += errorTimesMore) { Location l = locList2.get(i); player.spigot().playEffect(l, Residence.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); if (!same) - errorTrimed.add(l); + trimed2.add(l); } } else { if (!error) @@ -471,20 +477,25 @@ public void run() { Location l = locList2.get(i); Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); if (!same) - errorTrimed.add(l); + trimed2.add(l); } else for (int i = 0; i < locList2.size(); i += errorTimesMore) { Location l = locList2.get(i); Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); if (!same) - errorTrimed.add(l); + trimed2.add(l); } } if (!same) { - v.setLocations(trimed); - v.setErrorLocations(errorTrimed); + if (error) { + v.setErrorLocations(trimed); + v.setErrorLocations2(trimed2); + } else { + v.setLocations(trimed); + v.setLocations2(trimed2); + } } return; From c553dd4f563209921c1b21227339aa4759b86697 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Aug 2016 16:36:32 +0300 Subject: [PATCH 0243/1142] Correct flag actions on residence change show residence boundaries, not area --- .../bukkit/residence/allNms/v1_9Events.java | 3 +- .../listeners/ResidencePlayerListener.java | 132 ++++++++++++------ 2 files changed, 87 insertions(+), 48 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index 5f68078ad..a19efedf5 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -42,8 +42,7 @@ public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { event.setCancelled(true); } -// @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - @EventHandler + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { // disabling event on world diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 5fa1baf3a..8b269e749 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1413,6 +1413,91 @@ public void run() { }, 1L); } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceChange(ResidenceChangedEvent event) { + ClaimedResidence res = event.getTo(); + ClaimedResidence ResOld = event.getFrom(); + Player player = event.getPlayer(); + + if (res == null && ResOld != null) { + if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.resetPlayerTime(); + + if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + player.setWalkSpeed(0.2F); + + if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + player.resetPlayerWeather(); + + if (Residence.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(false); + } + + if (res != null && ResOld != null && res != ResOld) { + if (Residence.getVersionChecker().GetVersion() > 1900) { + if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(true); + else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(false); + } + + if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.setPlayerTime(6000L, false); + else if (ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.resetPlayerTime(); + + if (res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + player.setPlayerTime(14000L, false); + else if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + player.resetPlayerTime(); + + if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); + else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + player.setWalkSpeed(0.2F); + + if (res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) { + player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); + } else if (ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + player.setWalkSpeed(0.2F); + + if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) { + player.setPlayerWeather(WeatherType.CLEAR); + } else if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) + player.resetPlayerWeather(); + + if (res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) { + player.setPlayerWeather(WeatherType.DOWNFALL); + } else if (ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + player.resetPlayerWeather(); + } + + if (res != null && ResOld == null) { + if (Residence.getVersionChecker().GetVersion() > 1900) { + if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(true); + } + + if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.setPlayerTime(6000L, false); + + if (res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + player.setPlayerTime(14000L, false); + + if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); + + if (res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); + + if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) + player.setPlayerWeather(WeatherType.CLEAR); + + if (res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + player.setPlayerWeather(WeatherType.DOWNFALL); + } + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerMove(PlayerMoveEvent event) { // disabling event on world @@ -1535,18 +1620,6 @@ public void run() { ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); Residence.getServ().getPluginManager().callEvent(chgEvent); - if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) - player.resetPlayerTime(); - - if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - player.setWalkSpeed(0.2F); - - if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) - player.resetPlayerWeather(); - - if (Residence.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(false); - if (leave != null && !leave.equals("")) { if (Residence.getConfigManager().useActionBar()) { Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) @@ -1568,7 +1641,7 @@ public void run() { if (Residence.getConfigManager().BounceAnimation()) { Visualizer v = new Visualizer(player); - v.setErrorAreas(res.getAreaByLoc(player.getLocation())); + v.setErrorAreas(res); v.setOnce(true); Residence.getSelectionManager().showBounds(player, v); } @@ -1627,7 +1700,6 @@ public void run() { player.setFlying(false); player.setAllowFlight(false); } - } lastOutsideLoc.put(pname, loc); @@ -1640,19 +1712,6 @@ public void run() { if (ResOld != res && ResOld != null) { String leave = ResOld.getLeaveMessage(); chgFrom = ResOld; - - if (ResOld.getPermissions().has(Flags.night, false) || ResOld.getPermissions().has(Flags.day, false)) - player.resetPlayerTime(); - - if (ResOld.getPermissions().has(Flags.wspeed1, false) || ResOld.getPermissions().has(Flags.wspeed2, false)) - player.setWalkSpeed(0.2F); - - if (ResOld.getPermissions().has(Flags.sun, false) || ResOld.getPermissions().has(Flags.rain, false)) - player.resetPlayerWeather(); - - if (Residence.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, false)) - player.setGlowing(false); - if (leave != null && !leave.equals("") && ResOld != res.getParent()) { if (Residence.getConfigManager().useActionBar()) { Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) @@ -1688,25 +1747,6 @@ public void run() { Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); } } - - - if (Residence.getVersionChecker().GetVersion() > 1900 && res.getPermissions().has(Flags.glow, false)) - player.setGlowing(true); - - if (res.getPermissions().has(Flags.day, false)) - player.setPlayerTime(6000L, false); - else if (res.getPermissions().has(Flags.night, false)) - player.setPlayerTime(14000L, false); - - if (res.getPermissions().has(Flags.wspeed1, false)) - player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); - else if (res.getPermissions().has(Flags.wspeed2, false)) - player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); - - if (res.getPermissions().has(Flags.sun, false)) - player.setPlayerWeather(WeatherType.CLEAR); - else if (res.getPermissions().has(Flags.rain, false)) - player.setPlayerWeather(WeatherType.DOWNFALL); } } } From 59316995afc863d0c0a21e875b2a6d6050016538 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 23 Aug 2016 14:22:38 +0300 Subject: [PATCH 0244/1142] add residence name when removing it from market --- .../bekvon/bukkit/residence/commands/market.java | 4 +++- .../residence/protection/ClaimedResidence.java | 16 ++++------------ .../residence/protection/ResidenceManager.java | 1 - src/plugin.yml | 2 +- 4 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index c5dda6a7b..d29a84b11 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -79,8 +79,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.msg(sender, lm.Rent_UnrentConfirm, res.getName()); } else Residence.getRentManager().printRentInfo(player, res); - } else + } else { + Residence.UnrentConfirm.put(player.getName(), res.getName()); Residence.msg(sender, lm.Rent_ReleaseConfirm, res.getName()); + } return true; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 182a58499..38f590ab9 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -22,9 +22,6 @@ import com.bekvon.bukkit.residence.itemlist.ItemList.ListType; import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.Debug; - import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; @@ -612,21 +609,16 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l CuboidArea newArea = new CuboidArea(loc1, loc2); - Debug.D("s2"); Set> set = subzones.entrySet(); for (Entry resEntry : set) { ClaimedResidence res = resEntry.getValue(); if (res.checkCollision(newArea)) { if (player != null) { Residence.msg(player, lm.Subzone_Collide, resEntry.getKey()); -// if (res.getAreaArray().length > 0) { -// CuboidArea oldArea = res.getAreaArray()[0]; - Visualizer v = new Visualizer(player); - v.setAreas(newArea); - v.setErrorAreas(res); - Debug.D("s"); - Residence.getSelectionManager().showBounds(player, v); -// } + Visualizer v = new Visualizer(player); + v.setAreas(newArea); + v.setErrorAreas(res); + Residence.getSelectionManager().showBounds(player, v); } return false; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1ad61bfef..1f86b0504 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -36,7 +36,6 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.GetTime; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; diff --git a/src/plugin.yml b/src/plugin.yml index 7916839e2..c954bc571 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.6.0 +version: 4.5.6.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 37d1e22ecae50d11dba99a1381534dac10fa05ac Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 23 Aug 2016 14:33:56 +0300 Subject: [PATCH 0245/1142] Initialize schematic manager even if WE not present --- src/com/bekvon/bukkit/residence/Residence.java | 5 ++--- .../bukkit/residence/listeners/ResidencePlayerListener.java | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 7e18b447e..b3ea94d7a 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -499,7 +499,7 @@ public void onEnable() { PlayerManager = new PlayerManager(); ShopSignUtilManager = new ShopSignUtil(this); RandomTpManager = new RandomTp(this); - + InformationPagerManager = new InformationPager(this); zip = new ZipLibrary(); @@ -707,8 +707,7 @@ public void run() { AutoSelectionManager = new AutoSelection(); - if (wep != null) - SchematicManager = new SchematicsManager(); + SchematicManager = new SchematicsManager(); try { Class.forName("org.bukkit.event.player.PlayerItemDamageEvent"); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 8b269e749..77f58e193 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -201,8 +201,7 @@ public void onResidenceBackupRename(ResidenceRenameEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceDelete(ResidenceDeleteEvent event) { - if (event != null && event.getResidence() != null) - Residence.getSchematicManager().delete(event.getResidence()); + Residence.getSchematicManager().delete(event.getResidence()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) From 305e9841a86f6086e11f8a4f3d7ff1fb4978f345 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 25 Aug 2016 17:27:53 +0300 Subject: [PATCH 0246/1142] new flags --- .../bekvon/bukkit/residence/Residence.java | 3 +- .../bukkit/residence/containers/Flags.java | 2 + .../residence/containers/ResidencePlayer.java | 11 +- .../listeners/ResidenceBlockListener.java | 44 ++++++ .../listeners/ResidencePlayerListener.java | 4 + .../residence/selection/SelectionManager.java | 126 +++++++++--------- src/plugin.yml | 2 +- 7 files changed, 123 insertions(+), 69 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index b3ea94d7a..964efbfc0 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -707,7 +707,8 @@ public void run() { AutoSelectionManager = new AutoSelection(); - SchematicManager = new SchematicsManager(); + if (wep != null) + SchematicManager = new SchematicsManager(); try { Class.forName("org.bukkit.event.player.PlayerItemDamageEvent"); diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index f46c2904c..6ab3d22ef 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -31,6 +31,7 @@ public enum Flags { day(37, 0, FlagMode.Residence, "Sets day time in residence", true), dye(351, 14, FlagMode.Both, "Allows or denys sheep dyeing", true), damage(283, 0, FlagMode.Residence, "Allows or denys all entity damage within the residence", false), + decay(18, 0, FlagMode.Residence, "Allows or denys leave decay in the residence", true), destroy(121, 0, FlagMode.Both, "Allows or denys only destruction of blocks, overrides the build flag", true), dryup(160, 11, FlagMode.Residence, "Prevents land from drying up", true), diode(356, 0, FlagMode.Both, "Allows or denys players to use redstone repeaters", true), @@ -44,6 +45,7 @@ public enum Flags { firespread(377, 0, FlagMode.Residence, "Allows or denys fire spread", true), flow(111, 0, FlagMode.Residence, "Allows or denys liquid flow", true), flowerpot(390, 0, FlagMode.Both, "Allows or denys interaction with flower pot", true), + grow(295, 0, FlagMode.Residence, "Allows or denys plant growing", true), glow(169, 0, FlagMode.Residence, "Players will start glowing when entering residence", true), hotfloor(213, 0, FlagMode.Residence, "Prevent damage from magma blocks", true), hidden(102, 0, FlagMode.Residence, "Hides residence from list or listall commands", false), diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 64e4cdd86..9d8631147 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -98,13 +98,12 @@ public void recountMaxRes() { if (this.group != null) this.maxRes = this.group.getMaxZones(); for (int i = 1; i <= Residence.getConfigManager().getMaxResCount(); i++) { - if (player != null) { + if (player != null && player.isOnline()) { if (this.player.hasPermission("residence.max.res." + i)) this.maxRes = i; - } else { - if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res." + i, Residence.getConfigManager().getDefaultWorld())) - this.maxRes = i; + } else if (ofPlayer != null) { + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res." + i, Residence.getConfigManager().getDefaultWorld())) + this.maxRes = i; } } } @@ -147,9 +146,9 @@ public void recountMaxSubzones() { public int getMaxRes() { updateName(); - recountMaxRes(); Residence.getPermissionManager().updateGroupNameForPlayer(this.userName, this.player != null && this.player.isOnline() ? this.player.getPlayer().getLocation() .getWorld().getName() : Residence.getConfigManager().getDefaultWorld(), true); + recountMaxRes(); PermissionGroup g = getGroup(); if (this.maxRes < g.getMaxZones()) { return g.getMaxZones(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 8a0995525..46b7f6b8b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -17,6 +17,7 @@ import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.event.block.BlockFormEvent; import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockGrowEvent; import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; import org.bukkit.event.block.BlockPhysicsEvent; @@ -36,6 +37,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockSpreadEvent; import org.bukkit.event.block.EntityBlockFormEvent; +import org.bukkit.event.block.LeavesDecayEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.inventory.ItemStack; @@ -52,6 +54,48 @@ public ResidenceBlockListener(Residence residence) { this.plugin = residence; } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlantGrow(BlockGrowEvent event) { + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.grow, true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onVineGrow(BlockSpreadEvent event) { + if (event.getSource().getType() != Material.VINE) + return; + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.grow, true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onleaveDecay(LeavesDecayEvent event) { + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.decay, true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onTreeGrowt(StructureGrowEvent event) { + if (Residence.isDisabledWorldListener(event.getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); + if (!perms.has(Flags.grow, true)) { + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onTreeGrow(StructureGrowEvent event) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 77f58e193..7af0c8e48 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -196,11 +196,15 @@ public void onResidenceBackup(ResidenceFlagChangeEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceBackupRename(ResidenceRenameEvent event) { + if (Residence.getSchematicManager() == null) + return; Residence.getSchematicManager().rename(event.getResidence(), event.getNewResidenceName()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceDelete(ResidenceDeleteEvent event) { + if (Residence.getSchematicManager() == null) + return; Residence.getSchematicManager().delete(event.getResidence()); } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index e85efab7f..316f20dee 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -425,67 +425,71 @@ public void run() { List trimed = new ArrayList(); List trimed2 = new ArrayList(); - boolean spigot = Residence.isSpigot(); - - if (spigot) { - if (!error) - for (int i = 0; i < locList.size(); i += timesMore) { - Location l = locList.get(i); - player.spigot().playEffect(l, Residence.getConfigManager().getSelectedSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); - if (!same) - trimed.add(l); - } - else - for (int i = 0; i < locList.size(); i += timesMore) { - Location l = locList.get(i); - player.spigot().playEffect(l, Residence.getConfigManager().getOverlapSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); - if (!same) - trimed.add(l); - } - - if (!error) - for (int i = 0; i < locList2.size(); i += errorTimesMore) { - Location l = locList2.get(i); - player.spigot().playEffect(l, Residence.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); - if (!same) - trimed2.add(l); - } - else - for (int i = 0; i < locList2.size(); i += errorTimesMore) { - Location l = locList2.get(i); - player.spigot().playEffect(l, Residence.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); - if (!same) - trimed2.add(l); - } - } else { - if (!error) - for (int i = 0; i < locList.size(); i += timesMore) { - Location l = locList.get(i); - Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, l, player); - if (!same) - trimed.add(l); - } - else - for (int i = 0; i < locList.size(); i += timesMore) { - Location l = locList.get(i); - Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, l, player); - if (!same) - trimed.add(l); - } - if (!error) - for (int i = 0; i < locList2.size(); i += errorTimesMore) { - Location l = locList2.get(i); - Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); - if (!same) - trimed2.add(l); - } - else - for (int i = 0; i < locList2.size(); i += errorTimesMore) { - Location l = locList2.get(i); - Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); - if (!same) - trimed2.add(l); - } + try { + boolean spigot = Residence.isSpigot(); + + if (spigot) { + if (!error) + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + player.spigot().playEffect(l, Residence.getConfigManager().getSelectedSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + if (!same) + trimed.add(l); + } + else + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + player.spigot().playEffect(l, Residence.getConfigManager().getOverlapSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + if (!same) + trimed.add(l); + } + + if (!error) + for (int i = 0; i < locList2.size(); i += errorTimesMore) { + Location l = locList2.get(i); + player.spigot().playEffect(l, Residence.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + if (!same) + trimed2.add(l); + } + else + for (int i = 0; i < locList2.size(); i += errorTimesMore) { + Location l = locList2.get(i); + player.spigot().playEffect(l, Residence.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + if (!same) + trimed2.add(l); + } + } else { + if (!error) + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, l, player); + if (!same) + trimed.add(l); + } + else + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, l, player); + if (!same) + trimed.add(l); + } + if (!error) + for (int i = 0; i < locList2.size(); i += errorTimesMore) { + Location l = locList2.get(i); + Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); + if (!same) + trimed2.add(l); + } + else + for (int i = 0; i < locList2.size(); i += errorTimesMore) { + Location l = locList2.get(i); + Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); + if (!same) + trimed2.add(l); + } + } + } catch (Exception e) { + return; } if (!same) { diff --git a/src/plugin.yml b/src/plugin.yml index c954bc571..42ce10dc8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.6.1 +version: 4.5.7.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 59a2678e03b20df80ca9b400f904f1a7014f7fa9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 25 Aug 2016 19:56:05 +0300 Subject: [PATCH 0247/1142] Allow full control on subzones if you have admin flag print full residence list in console with scheduler to avoid skiping --- .../bukkit/residence/commands/remove.java | 13 ++- .../protection/ResidencePermissions.java | 25 +++++ .../residence/text/help/InformationPager.java | 95 ++++++++++++++++--- 3 files changed, 117 insertions(+), 16 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 9814192dc..1b58724a3 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -10,9 +10,11 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; public class remove implements cmd { @@ -42,11 +44,20 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command sender.hasPermission("residence.delete.subzone") && !resadmin && Residence.getConfigManager().isPreventSubZoneRemoval() && - !res.getParent().isOwner(senderName)) { + !res.getParent().isOwner(senderName) && + !res.getPermissions().playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue)) { Residence.msg(sender, lm.Subzone_CantDeleteNotOwnerOfParent); return true; } + if (!res.isSubzone() && + sender.hasPermission("residence.delete") && + !resadmin && + !res.isOwner(senderName)) { + Residence.msg(sender, lm.Residence_CantDeleteResidence); + return true; + } + if (!res.isSubzone() && !sender.hasPermission("residence.delete") && !resadmin) { Residence.msg(sender, lm.Residence_CantDeleteResidence); return true; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 9e30acab7..2f5ccfa75 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -59,6 +59,25 @@ public boolean playerHas(String player, String flag, boolean def) { return this.playerHas(player, world, flag, def); } + public boolean playerHas(Player player, Flags flag, FlagCombo f) { + return playerHas(player.getName(), flag, f); + } + + public boolean playerHas(String player, Flags flag, FlagCombo f) { + switch (f) { + case FalseOrNone: + return !this.playerHas(player, world, flag, false); + case OnlyFalse: + return !this.playerHas(player, world, flag, true); + case OnlyTrue: + return this.playerHas(player, world, flag, false); + case TrueOrNone: + return this.playerHas(player, world, flag, true); + default: + return false; + } + } + @Override public boolean playerHas(String player, String world, String flag, boolean def) { ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER, player, def); @@ -172,6 +191,12 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) public boolean hasResidencePermission(CommandSender sender, boolean requireOwner) { if (!(sender instanceof Player)) return true; + + ClaimedResidence par = this.residence.getParent(); + if (par != null) + if (par.getPermissions().playerHas(sender.getName(), Flags.admin, true)) + return true; + if (Residence.getConfigManager().enabledRentSystem()) { String resname = residence.getName(); if (Residence.getRentManager().isRented(resname)) { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index b0a1d731a..f60692dd9 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -9,6 +9,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import java.util.ArrayList; @@ -84,12 +85,23 @@ public void printListInfo(CommandSender sender, String targetPlayer, List linesForConsole = new ArrayList(); - for (int i = start; i < end; i++) { - if (lines.size() <= i) - break; + int i = start; + for (ClaimedResidence res : lines) { + i++; +// if (lines.size() <= i) +// break; - ClaimedResidence res = lines.get(i); +// ClaimedResidence res = lines.get(i); StringBuilder StringB = new StringBuilder(); StringB.append(" " + Residence.msg(lm.General_Owner, res.getOwner())); String worldInfo = ""; @@ -145,8 +157,6 @@ public void printListInfo(CommandSender sender, String targetPlayer, List linesForConsole) { + private void printListWithDelay(final CommandSender sender, final List lines, final int start, final boolean resadmin) { + + for (int i = 0; i < 100; i++) { + if (lines.size() <= i) + break; + + ClaimedResidence res = lines.get(i); + StringBuilder StringB = new StringBuilder(); + StringB.append(" " + Residence.msg(lm.General_Owner, res.getOwner())); + String worldInfo = ""; + + if (res.getPermissions().has("hidden", FlagCombo.FalseOrNone) && res.getPermissions().has("coords", FlagCombo.TrueOrNone) || resadmin) { + worldInfo += "&6 (&3"; + CuboidArea area = res.getAreaArray()[0]; + worldInfo += Residence.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() + .getBlockZ()); + worldInfo += "&6; &3"; + worldInfo += Residence.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() + .getBlockZ()); + worldInfo += "&6)"; + worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + StringB.append("\n" + worldInfo); + } + + StringB.append("\n " + Residence.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); + + String ExtraString = ""; + if (res.isForRent()) { + if (res.isRented()) { + ExtraString = " " + Residence.msg(lm.Residence_IsRented); + StringB.append("\n " + Residence.msg(lm.Residence_RentedBy, res.getRentedLand().player)); + } else { + ExtraString = " " + Residence.msg(lm.Residence_IsForRent); + } + RentableLand rentable = res.getRentable(); + StringB.append("\n " + Residence.msg(lm.General_Cost, rentable.cost, rentable.days)); + StringB.append("\n " + Residence.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); + StringB.append("\n " + Residence.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); + StringB.append("\n " + Residence.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + } + + if (res.isForSell()) { + ExtraString = " " + Residence.msg(lm.Residence_IsForSale); + StringB.append("\n " + Residence.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); + } + + String msg = Residence.msg(lm.Residence_ResList, (start + i + 1), res.getName(), res.getWorld(), "", ExtraString); + + msg = ChatColor.stripColor(msg + " " + StringB.toString().replace("\n", "")); + msg = msg.replaceAll("\\s{2}", " "); + sender.sendMessage(msg); + } + + final List tlines = new ArrayList(); + + if (lines.size() > 100) + tlines.addAll(lines.subList(100, lines.size())); + + if (tlines.isEmpty()) { + return; + } + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { - for (int i = 0; i < 20; i++) { - if (linesForConsole.size() > 0) { - sender.sendMessage(linesForConsole.get(0)); - linesForConsole.remove(0); - } - } - printListWithDelay(sender, linesForConsole); + printListWithDelay(sender, tlines, start + 100, resadmin); return; } - }, 1L); + }, 5L); } From 9794bbfa2da0e1fb1e7189c81cb3da42baf70033 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 26 Aug 2016 14:31:44 +0300 Subject: [PATCH 0248/1142] Allow full customization for help page --- .../bukkit/residence/containers/lm.java | 3 +++ .../bukkit/residence/text/help/HelpEntry.java | 22 ++++++++----------- src/plugin.yml | 2 +- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index fd63eb9b9..63a665ac9 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -296,6 +296,9 @@ public enum lm { InformationPage_Page("&e-----< &6%1 &e>-----"), InformationPage_NextPage("&e-----< &6%1 &e>-----"), InformationPage_NoNextPage("&e-----------------------"), + InformationPage_GeneralList("&2 %1 &6- &e%2"), + InformationPage_FlagsList("&2 %1 &6- &e%2"), + InformationPage_Separator("&6\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC"), Chat_ChatChannelChange("&eChanged residence chat channel to &6%1!"), Chat_ChatChannelLeave("&eLeft residence chat"), diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index a248f4789..eef63e334 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -72,15 +72,11 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p return; } - String separator = ChatColor.GOLD + ""; - String simbol = "-"; - if (sender instanceof Player) - simbol = "\u25AC"; - for (int i = 0; i < 10; i++) { - separator += simbol; - } + String separator = Residence.msg(lm.InformationPage_Separator); + if (!(sender instanceof Player)) + separator = "----------"; - sender.sendMessage(ChatColor.GOLD + separator + " " + Residence.msg(lm.General_HelpPageHeader, path, page, pagecount) + " " + separator); + sender.sendMessage(separator + " " + Residence.msg(lm.General_HelpPageHeader, path, page, pagecount) + " " + separator); int start = linesPerPage * (page - 1); int end = start + linesPerPage; for (int i = start; i < end; i++) { @@ -92,7 +88,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p String desc = ""; int y = 0; for (String one : sub.lines) { - desc += ChatColor.YELLOW + one; + desc += one; y++; if (y < sub.lines.length) { desc += "\n"; @@ -102,7 +98,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p if (resadmin) path = path.replace("/res ", "/resadmin "); - String msg = "[\"\",{\"text\":\"" + ChatColor.GOLD + " " + helplines.get(i).getDesc() + String msg = "[\"\",{\"text\":\"" + helplines.get(i).getDesc() + "\",\"color\":\"gold\",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + path + helplines.get(i).getCommand() + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; @@ -112,7 +108,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p sender.sendMessage(helplines.get(i).getDesc()); } else - sender.sendMessage(ChatColor.GREEN + " " + helplines.get(i).getDesc()); + sender.sendMessage(helplines.get(i).getDesc()); } } @@ -189,12 +185,12 @@ private List getHelpData(CommandSender sender, boolean resadmin) { } // adding flag name and description for later sorting - unsortMap.put(entry.getName(), ChatColor.GREEN + entry.getName() + ChatColor.GOLD + " - " + desc); + unsortMap.put(entry.getName(), Residence.msg(lm.InformationPage_FlagsList, entry.getName(), desc)); continue; } } - helplines.add(new HelpLines(entry.getName(), ChatColor.GREEN + entry.getName() + ChatColor.GOLD + " - " + entry.getDescription())); + helplines.add(new HelpLines(entry.getName(), Residence.msg(lm.InformationPage_GeneralList, entry.getName(), entry.getDescription()))); } if (!unsortMap.isEmpty()) { diff --git a/src/plugin.yml b/src/plugin.yml index 42ce10dc8..6f118d2f4 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.7.0 +version: 4.5.7.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From cd547cf593457aca47df6df35be63d3e864439ef Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 29 Aug 2016 14:29:09 +0300 Subject: [PATCH 0249/1142] DynMap issue fix --- .../residence/containers/ResidencePlayer.java | 7 ++----- .../residence/dynmap/DynMapListeners.java | 1 + .../bukkit/residence/dynmap/DynMapManager.java | 18 ++++++++++-------- .../residence/protection/ResidenceManager.java | 2 +- .../residence/text/help/InformationPager.java | 7 +++---- src/plugin.yml | 2 +- 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 9d8631147..167a6123b 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -204,9 +204,7 @@ private void updateName() { public void addResidence(ClaimedResidence residence) { if (residence == null) return; - String name = residence.getName(); - name = name.toLowerCase(); - this.ResidenceList.put(name, residence); + this.ResidenceList.put(residence.getName().toLowerCase(), residence); } public void removeResidence(String residence) { @@ -222,12 +220,11 @@ public void renameResidence(String oldResidence, String newResidence) { if (newResidence == null) return; oldResidence = oldResidence.toLowerCase(); - newResidence = newResidence.toLowerCase(); ClaimedResidence res = ResidenceList.get(oldResidence); if (res != null) { removeResidence(oldResidence); - ResidenceList.put(newResidence, res); + ResidenceList.put(newResidence.toLowerCase(), res); } } diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java index c453a21ca..2fff87448 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java @@ -49,6 +49,7 @@ public void onResidenceOwnerChange(ResidenceOwnerChangeEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceRename(ResidenceRenameEvent event) { + Residence.getDynManager().handleResidenceRemove(event.getOldResidenceName(), event.getResidence(), event.getResidence().getSubzoneDeep()); Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); } diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 9d89fc916..2d9acc7f4 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -53,7 +53,7 @@ public void fireUpdateAdd(final ClaimedResidence res, final int deep) { public void run() { schedId = -1; - handleResidenceAdd(res.getName(), res, resareas, deep); + handleResidenceAdd(res.getName(), res, deep); return; } }, 10L); @@ -65,7 +65,7 @@ public void fireUpdateRemove(final ClaimedResidence res, final int deep) { if (res == null) return; - handleResidenceRemove(res.getName(), res, resareas, deep); + handleResidenceRemove(res.getName(), res, deep); } private static String formatInfoWindow(String resid, ClaimedResidence res, String resName) { @@ -201,7 +201,7 @@ else if (Residence.getTransactionManager().isForSale(resid)) m.setRangeY(as.y, as.y); } - private void handleResidenceAdd(String resid, ClaimedResidence res, Map newmap, int depth) { + private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { if (res == null) return; @@ -256,19 +256,21 @@ private void handleResidenceAdd(String resid, ClaimedResidence res, Map subids = res.getSubzones(); for (ClaimedResidence one : subids) { - handleResidenceAdd(one.getName(), one, newmap, depth + 1); + handleResidenceAdd(one.getName(), one, depth + 1); } } } } - private void handleResidenceRemove(String resid, ClaimedResidence res, Map newmap, int depth) { + public void handleResidenceRemove(String resid, ClaimedResidence res, int depth) { + if (resid == null) + return; if (res == null) return; @@ -281,7 +283,7 @@ private void handleResidenceRemove(String resid, ClaimedResidence res, Map subids = res.getSubzones(); for (ClaimedResidence one : subids) { - handleResidenceRemove(one.getName(), one, newmap, depth + 1); + handleResidenceRemove(one.getName(), one, depth + 1); } } } @@ -315,7 +317,7 @@ public void activate() { for (Entry one : Residence.getResidenceManager().getResidences().entrySet()) { Residence.getDynManager().fireUpdateAdd(one.getValue(), one.getValue().getSubzoneDeep()); - handleResidenceAdd(one.getValue().getName(), one.getValue(), resareas, one.getValue().getSubzoneDeep()); + handleResidenceAdd(one.getValue().getName(), one.getValue(), one.getValue().getSubzoneDeep()); } } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1f86b0504..d2f8da531 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -937,7 +937,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo residences.put(newName.toLowerCase(), res); residences.remove(oldName.toLowerCase()); - Residence.getPlayerManager().renameResidence(player.getName(), res.getName(), newName); + Residence.getPlayerManager().renameResidence(player.getName(), oldName, newName); calculateChunks(newName); if (Residence.getConfigManager().useLeases()) { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index f60692dd9..90e82fdbf 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -9,7 +9,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import java.util.ArrayList; @@ -85,17 +84,17 @@ public void printListInfo(CommandSender sender, String targetPlayer, List linesForConsole = new ArrayList(); - int i = start; + int i = start - 1; for (ClaimedResidence res : lines) { i++; // if (lines.size() <= i) diff --git a/src/plugin.yml b/src/plugin.yml index 6f118d2f4..9f3295525 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.7.1 +version: 4.5.7.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 54445e6d4e0063cccf29bcc3c5cea8b696533366 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Sep 2016 12:42:27 +0300 Subject: [PATCH 0250/1142] better way to protect from sticky piston stuff --- .../listeners/ResidenceBlockListener.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 46b7f6b8b..f3b8ab25d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -4,6 +4,9 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -403,20 +406,18 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); - BlockFace dir = event.getDirection(); for (Block block : blocks) { Location locFrom = block.getLocation(); - Location locTo = new Location(block.getWorld(), block.getX() + dir.getModX(), block.getY() + dir.getModY(), block.getZ() + dir.getModZ()); ClaimedResidence blockFrom = Residence.getResidenceManager().getByLoc(locFrom); - ClaimedResidence blockTo = Residence.getResidenceManager().getByLoc(locTo); - if (pistonRes == null && blockTo != null && blockTo.getPermissions().has(Flags.pistonprotection, true)) { - event.setCancelled(true); - return; - } else if (blockTo != null && blockFrom != null && !blockTo.isOwner(blockFrom.getOwner()) && blockFrom.getPermissions().has( - Flags.pistonprotection, true)) { - event.setCancelled(true); - return; - } + if (blockFrom == null) + continue; + if (blockFrom == pistonRes || blockFrom == null && pistonRes != null) + continue; + if (blockFrom != null && pistonRes != null && blockFrom.isOwner(pistonRes.getOwner())) + continue; + if (blockFrom.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyFalse)) + continue; + event.setCancelled(true); } } From dda90f1b09471974a5d0ca794e1fc9708e07f342 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Sep 2016 13:14:41 +0300 Subject: [PATCH 0251/1142] Properly check for projectile damage on itemframes and similar --- .../listeners/ResidenceBlockListener.java | 2 -- .../listeners/ResidenceEntityListener.java | 6 ++---- .../listeners/ResidencePlayerListener.java | 5 ++--- .../residence/protection/FlagPermissions.java | 16 ++++++++++++++++ .../protection/ResidencePermissions.java | 1 + src/plugin.yml | 2 +- 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index f3b8ab25d..96676ad5f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -5,8 +5,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 68e419976..42eeb2794 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -7,6 +7,7 @@ import java.util.List; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -887,13 +888,10 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { } else if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { player = (Player) ((Projectile) dmgr).getShooter(); } else if ((dmgr instanceof Projectile) && (!(((Projectile) dmgr).getShooter() instanceof Player))) { - Location loc = event.getEntity().getLocation(); FlagPermissions perm = Residence.getPermsByLoc(loc); - - if (!perm.has(Flags.destroy, true)) { + if (perm.has(Flags.destroy, FlagCombo.FalseOrNone)) event.setCancelled(true); - } return; } else if (dmgr.getType() == EntityType.PRIMED_TNT || dmgr.getType() == EntityType.MINECART_TNT || dmgr.getType() == EntityType.WITHER_SKULL || dmgr .getType() == EntityType.WITHER) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 7af0c8e48..7d5e2dc6a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -753,8 +753,7 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { @SuppressWarnings("deprecation") private static boolean isContainer(Material mat, Block block) { return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container.getName()) - || Residence - .getConfigManager().getCustomContainers().contains(block.getTypeId()); + || Residence.getConfigManager().getCustomContainers().contains(block.getTypeId()); } @SuppressWarnings("deprecation") @@ -1009,7 +1008,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); + boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { if (mat != checkMat.getKey()) continue; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index e4e3e8377..7d863ccba 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -22,6 +22,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; public class FlagPermissions { @@ -450,6 +451,21 @@ private boolean groupCheck(String group, String flag, boolean def) { return def; } + public boolean has(Flags flag, FlagCombo f) { + switch (f) { + case FalseOrNone: + return !has(flag, false); + case OnlyFalse: + return !has(flag, true); + case OnlyTrue: + return has(flag, false); + case TrueOrNone: + return has(flag, true); + default: + return false; + } + } + public boolean has(Flags flag, boolean def) { return has(flag.getName(), def); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 2f5ccfa75..b5177df2e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -97,6 +97,7 @@ public boolean groupHas(String group, String flag, boolean def) { return super.groupHas(group, flag, def); } + @Override public boolean has(Flags flag, FlagCombo f) { return has(flag.getName(), f); } diff --git a/src/plugin.yml b/src/plugin.yml index 9f3295525..d73d23dfa 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.7.3 +version: 4.5.7.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 42881dd9bce772a8ea48e1864a9da0d63dcb1b08 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Sep 2016 13:32:19 +0300 Subject: [PATCH 0252/1142] Prevent damage when shooting from non pvp zone --- .../listeners/ResidenceEntityListener.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 42eeb2794..5111144da 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -8,6 +8,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -998,13 +999,25 @@ public void onEntityDamage(EntityDamageEvent event) { if (attacker != null) Residence.msg(attacker, lm.General_WorldPVPDisabled); event.setCancelled(true); + return; + } + + /* Attacking from safe zone */ + if (attacker != null) { + FlagPermissions aPerm = Residence.getPermsByLoc(attacker.getLocation()); + if (aPerm.has(Flags.pvp, FlagCombo.FalseOrNone)) { + Residence.msg(attacker, lm.General_NoPVPZone); + event.setCancelled(true); + return; } + } } else { /* Normal PvP */ if (!isSnowBall && !area.getPermissions().has(Flags.pvp, true) || isSnowBall && !allowSnowBall) { if (attacker != null) Residence.msg(attacker, lm.General_NoPVPZone); event.setCancelled(true); + return; } } return; From af483f8ac81242926ad7d6f60d1392cdfa003d6b Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Sep 2016 17:07:21 +0300 Subject: [PATCH 0253/1142] Count in subzones for residence shop feature --- .../bekvon/bukkit/residence/Residence.java | 17 ++++--- .../residence/api/ResidenceInterface.java | 4 +- .../bukkit/residence/commands/shop.java | 18 ++++--- .../protection/ClaimedResidence.java | 4 ++ .../residence/protection/FlagPermissions.java | 7 ++- .../protection/ResidenceManager.java | 21 ++++++-- .../protection/ResidencePermissions.java | 25 +++++++--- .../residence/shopStuff/ShopSignUtil.java | 48 ++++++++++++------- .../bukkit/residence/shopStuff/ShopVote.java | 18 ++++++- .../bukkit/residence/text/help/HelpEntry.java | 8 ++-- 10 files changed, 118 insertions(+), 52 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 964efbfc0..e77cb437b 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -73,6 +73,7 @@ import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.LeaseManager; import com.bekvon.bukkit.residence.protection.PermissionListManager; import com.bekvon.bukkit.residence.protection.ResidenceManager; @@ -1245,12 +1246,7 @@ protected boolean loadYml() throws Exception { // Getting shop residences Map resList = rmanager.getResidences(); for (Entry one : resList.entrySet()) { - - ResidencePermissions perms = one.getValue().getPermissions(); - if (!perms.has(Flags.shop, false)) - continue; - - rmanager.addShop(one.getValue().getName()); + addShops(one.getValue()); } if (Residence.getConfigManager().isUUIDConvertion()) { @@ -1298,6 +1294,15 @@ protected boolean loadYml() throws Exception { } } + private void addShops(ClaimedResidence res) { + ResidencePermissions perms = res.getPermissions(); + if (perms.has(Flags.shop, FlagCombo.OnlyTrue, false)) + rmanager.addShop(res); + for (ClaimedResidence one : res.getSubzones()) { + addShops(one); + } + } + private void writeDefaultConfigFromJar() { if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), "config.yml", true)) { System.out.println("[Residence] Wrote default config..."); diff --git a/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java b/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java index 3d3b93014..bb0c33eed 100644 --- a/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java +++ b/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java @@ -18,13 +18,15 @@ public interface ResidenceInterface { public String getSubzoneNameByRes(ClaimedResidence res); + public void addShop(ClaimedResidence res); + public void addShop(String res); public void removeShop(ClaimedResidence res); public void removeShop(String res); - public List getShops(); + public List getShops(); public boolean addResidence(String name, Location loc1, Location loc2); diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index a106c6ebc..9168460a0 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -94,8 +94,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Map> ShopList = Residence.getShopSignUtilManager().GetAllVoteList(); List VoteList = new ArrayList(); - if (ShopList.containsKey(res.getName())) { - VoteList = ShopList.get(res.getName()); + if (ShopList.containsKey(res.getName().toLowerCase())) { + VoteList = ShopList.get(res.getName().toLowerCase()); } String separator = ChatColor.GOLD + ""; @@ -418,28 +418,26 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ConcurrentHashMap> VoteList = Residence.getShopSignUtilManager().GetAllVoteList(); - if (VoteList.containsKey(resName)) { - List list = VoteList.get(resName); + if (VoteList.containsKey(resName.toLowerCase())) { + List list = VoteList.get(resName.toLowerCase()); boolean found = false; for (ShopVote OneVote : list) { - if (OneVote.getName().equalsIgnoreCase(player.getName())) { - + if (OneVote.getName().equalsIgnoreCase(player.getName()) || OneVote.getUuid() != null && OneVote.getUuid() == player.getUniqueId()) { if (Residence.getConfigManager().isOnlyLike()) { Residence.msg(player, lm.Shop_AlreadyLiked, resName); return true; } - Residence.msg(player, lm.Shop_VoteChanged, OneVote.getVote(), vote, resName); OneVote.setVote(vote); + OneVote.setName(player.getName()); OneVote.setTime(System.currentTimeMillis()); found = true; break; } } if (!found) { - ShopVote newVote = new ShopVote(player.getName(), vote, System.currentTimeMillis()); + ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); list.add(newVote); - if (Residence.getConfigManager().isOnlyLike()) Residence.msg(player, lm.Shop_Liked, resName); else @@ -447,7 +445,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } } else { List list = new ArrayList(); - ShopVote newVote = new ShopVote(player.getName(), vote, System.currentTimeMillis()); + ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); list.add(newVote); VoteList.put(resName, list); if (Residence.getConfigManager().isOnlyLike()) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 38f590ab9..f15e52d6f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -5,6 +5,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomLoc; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.Visualizer; @@ -22,6 +23,9 @@ import com.bekvon.bukkit.residence.itemlist.ItemList.ListType; import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; + import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 7d863ccba..18177776a 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -22,7 +22,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; public class FlagPermissions { @@ -471,10 +470,14 @@ public boolean has(Flags flag, boolean def) { } public boolean has(String flag, boolean def) { + return has(flag, def, true); + } + + public boolean has(String flag, boolean def, boolean checkParent) { if (cuboidFlags.containsKey(flag)) { return cuboidFlags.get(flag); } - if (parent != null) { + if (checkParent && parent != null) { return parent.has(flag, def); } return def; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index d2f8da531..4a2cbdf00 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -24,6 +24,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; @@ -36,6 +37,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; @@ -44,7 +46,7 @@ public class ResidenceManager implements ResidenceInterface { protected SortedMap residences; protected Map>> chunkResidences; - protected List shops = new ArrayList(); + protected List shops = new ArrayList(); private Residence plugin; public ResidenceManager(Residence plugin) { @@ -158,22 +160,31 @@ public String getSubzoneNameByRes(ClaimedResidence res) { } @Override - public void addShop(String res) { + public void addShop(String resName) { + ClaimedResidence res = getByName(resName); + if (res != null) + shops.add(res); + } + + @Override + public void addShop(ClaimedResidence res) { shops.add(res); } @Override public void removeShop(ClaimedResidence res) { - removeShop(res.getName()); + removeShop(res); } @Override public void removeShop(String resName) { - shops.remove(resName); + ClaimedResidence res = getByName(resName); + if (res != null) + shops.remove(res); } @Override - public List getShops() { + public List getShops() { return shops; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index b5177df2e..650894566 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -99,19 +99,27 @@ public boolean groupHas(String group, String flag, boolean def) { @Override public boolean has(Flags flag, FlagCombo f) { - return has(flag.getName(), f); + return has(flag, f, true); + } + + public boolean has(Flags flag, FlagCombo f, boolean checkParent) { + return has(flag.getName(), f, checkParent); } public boolean has(String flag, FlagCombo f) { + return has(flag, f, true); + } + + public boolean has(String flag, FlagCombo f, boolean checkParent) { switch (f) { case FalseOrNone: - return !has(flag, false); + return !has(flag, false, checkParent); case OnlyFalse: - return !has(flag, true); + return !has(flag, true, checkParent); case OnlyTrue: - return has(flag, false); + return has(flag, false, checkParent); case TrueOrNone: - return has(flag, true); + return has(flag, true, checkParent); default: return false; } @@ -124,11 +132,16 @@ public boolean has(Flags flag, boolean def) { @Override public boolean has(String flag, boolean def) { + return has(flag, def, true); + } + + @Override + public boolean has(String flag, boolean def, boolean checkParent) { ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def); Residence.getServ().getPluginManager().callEvent(fc); if (fc.isOverriden()) return fc.getOverrideValue(); - return super.has(flag, def); + return super.has(flag, def, checkParent); } public boolean hasApplicableFlag(String player, String flag) { diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index cd989e99b..7f5b0ad83 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; @@ -24,6 +25,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; public class ShopSignUtil { @@ -36,20 +38,16 @@ public ShopSignUtil(Residence plugin) { this.plugin = plugin; } - public void setVoteList(ConcurrentHashMap> VoteList) { - this.VoteList = VoteList; - } - public ConcurrentHashMap> GetAllVoteList() { return VoteList; } public void removeVoteList(String resName) { - VoteList.remove(resName); + VoteList.remove(resName.toLowerCase()); } public void addVote(String ResName, List ShopVote) { - VoteList.put(ResName, ShopVote); + VoteList.put(ResName.toLowerCase(), ShopVote); } public void setAllSigns(List AllBoards) { @@ -73,8 +71,8 @@ public void LoadShopVotes() { GetAllVoteList().clear(); File file = new File(plugin.getDataFolder(), "ShopVotes.yml"); YamlConfiguration f = YamlConfiguration.loadConfiguration(file); - - if (!file.exists()){ + + if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { @@ -92,13 +90,25 @@ public void LoadShopVotes() { return; for (String category : categoriesList) { + Debug.D(category); List List = ConfCategory.getStringList(category); List VoteList = new ArrayList(); for (String oneEntry : List) { + Debug.D(category); if (!oneEntry.contains("%")) continue; String name = oneEntry.split("%")[0]; + UUID uuid = null; + + if (name.contains(":")) { + try { + uuid = UUID.fromString(name.split(":")[1]); + } catch (Exception e) { + } + name = name.split(":")[0]; + } + int vote = -1; try { @@ -124,10 +134,12 @@ else if (vote > 10) time = System.currentTimeMillis(); } - VoteList.add(new ShopVote(name, vote, time)); + VoteList.add(new ShopVote(name, uuid, vote, time)); + + Debug.D(category + " " + name + ""); } - addVote(category, VoteList); + addVote(category.replace("_", "."), VoteList); } return; } @@ -150,12 +162,12 @@ public void saveShopVotes() { if (one.getKey() == null || one.getKey().equalsIgnoreCase("")) continue; - String path = "ShopVotes." + one.getKey(); + String path = "ShopVotes." + one.getKey().replace(".", "_"); List list = new ArrayList(); for (ShopVote oneVote : one.getValue()) { - list.add(oneVote.getName() + "%" + oneVote.getVote() + "!" + oneVote.getTime()); + list.add(oneVote.getName() + ":" + oneVote.getUuid().toString() + "%" + oneVote.getVote() + "!" + oneVote.getTime()); } writer.set(path, list); } @@ -173,10 +185,10 @@ public Vote getAverageVote(String resName) { ConcurrentHashMap> allvotes = GetAllVoteList(); - if (!allvotes.containsKey(resName)) + if (!allvotes.containsKey(resName.toLowerCase())) return new Vote(Residence.getConfigManager().getVoteRangeTo() / 2, 0); - List votes = allvotes.get(resName); + List votes = allvotes.get(resName.toLowerCase()); double total = 0; for (ShopVote oneVote : votes) { @@ -209,13 +221,13 @@ public Map getSortedShopList() { Map allvotes = new HashMap(); - List shops = Residence.getResidenceManager().getShops(); + List shops = Residence.getResidenceManager().getShops(); - for (String one : shops) { + for (ClaimedResidence one : shops) { if (Residence.getConfigManager().isOnlyLike()) - allvotes.put(one, (double) getLikes(one)); + allvotes.put(one.getName(), (double) getLikes(one.getName())); else - allvotes.put(one, getAverageVote(one).getVote()); + allvotes.put(one.getName(), getAverageVote(one.getName()).getVote()); } allvotes = sortByComparator(allvotes); diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopVote.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopVote.java index b5832d3a3..6d26749f1 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopVote.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopVote.java @@ -1,17 +1,25 @@ package com.bekvon.bukkit.residence.shopStuff; +import java.util.UUID; + public class ShopVote { String name = null; + private UUID uuid = null; int vote = -1; long time = 0L; - public ShopVote(String name, int vote, long time) { + public ShopVote(String name, UUID uuid, int vote, long time) { this.name = name; + this.uuid = uuid; this.vote = vote; this.time = time; } + public void setName(String name) { + this.name = name; + } + public String getName() { return this.name; } @@ -33,4 +41,12 @@ public long getTime() { public void setTime(long time) { this.time = time; } + + public UUID getUuid() { + return uuid; + } + + public void setUuid(UUID uuid) { + this.uuid = uuid; + } } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index eef63e334..c21420c1c 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -88,7 +88,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p String desc = ""; int y = 0; for (String one : sub.lines) { - desc += one; + desc += one; y++; if (y < sub.lines.length) { desc += "\n"; @@ -98,7 +98,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p if (resadmin) path = path.replace("/res ", "/resadmin "); - String msg = "[\"\",{\"text\":\"" + helplines.get(i).getDesc() + String msg = "[\"\",{\"text\":\"" + helplines.get(i).getDesc() + "\",\"color\":\"gold\",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + path + helplines.get(i).getCommand() + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; @@ -387,7 +387,9 @@ public Set getSubCommands(CommandSender sender, String[] args) { } break; case "[residenceshop]": - subCommands.addAll(Residence.getResidenceManager().getShops()); + for (ClaimedResidence one : Residence.getResidenceManager().getShops()) { + subCommands.add(one.getName()); + } break; case "[flag]": for (Flags one : Flags.values()) { From 02ef8fb7b4081682541ab70fe9ffca0038918483 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Sep 2016 17:29:28 +0300 Subject: [PATCH 0254/1142] Residence votes should be directly connected to particular residence for convenience sake --- .../bukkit/residence/commands/shop.java | 20 ++---- .../protection/ClaimedResidence.java | 23 +++++-- .../protection/ResidenceManager.java | 9 ++- .../residence/shopStuff/ShopListener.java | 7 +-- .../residence/shopStuff/ShopSignUtil.java | 61 ++++++++----------- 5 files changed, 59 insertions(+), 61 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 9168460a0..5897bcf80 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -91,12 +91,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } - Map> ShopList = Residence.getShopSignUtilManager().GetAllVoteList(); - - List VoteList = new ArrayList(); - if (ShopList.containsKey(res.getName().toLowerCase())) { - VoteList = ShopList.get(res.getName().toLowerCase()); - } + List VoteList = res.GetShopVotes(); String separator = ChatColor.GOLD + ""; String simbol = "\u25AC"; @@ -201,8 +196,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command String votestat = ""; if (Residence.getConfigManager().isOnlyLike()) { - votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListLiked, Residence.getShopSignUtilManager().getLikes(one - .getKey())); + votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListLiked, Residence.getShopSignUtilManager().getLikes(one.getKey())); } else votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListVoted, vote.getVote(), vote.getAmount()); ClaimedResidence res = Residence.getResidenceManager().getByName(one.getKey()); @@ -416,10 +410,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } - ConcurrentHashMap> VoteList = Residence.getShopSignUtilManager().GetAllVoteList(); +// ConcurrentHashMap> VoteList = Residence.getShopSignUtilManager().GetAllVoteList(); - if (VoteList.containsKey(resName.toLowerCase())) { - List list = VoteList.get(resName.toLowerCase()); + if (!res.GetShopVotes().isEmpty()) { + List list = res.GetShopVotes(); boolean found = false; for (ShopVote OneVote : list) { if (OneVote.getName().equalsIgnoreCase(player.getName()) || OneVote.getUuid() != null && OneVote.getUuid() == player.getUniqueId()) { @@ -444,10 +438,8 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.msg(player, lm.Shop_Voted, vote, resName); } } else { - List list = new ArrayList(); ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); - list.add(newVote); - VoteList.put(resName, list); + res.addShopVote(newVote); if (Residence.getConfigManager().isOnlyLike()) Residence.msg(player, lm.Shop_Liked, resName); else diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index f15e52d6f..b593736b2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -5,7 +5,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomLoc; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.Visualizer; @@ -23,9 +22,7 @@ import com.bekvon.bukkit.residence.itemlist.ItemList.ListType; import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; - +import com.bekvon.bukkit.residence.shopStuff.ShopVote; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; @@ -71,6 +68,8 @@ public class ClaimedResidence { protected List cmdWhiteList = new ArrayList(); protected List cmdBlackList = new ArrayList(); + List ShopVoteList = new ArrayList(); + protected RentableLand rentableland = null; protected RentedLand rentedland = null; @@ -1663,4 +1662,20 @@ public ArrayList getPlayersInResidence() { } return within; } + + public List GetShopVotes() { + return ShopVoteList; + } + + public void clearShopVotes() { + ShopVoteList.clear(); + } + + public void addShopVote(List ShopVotes) { + ShopVoteList.addAll(ShopVotes); + } + + public void addShopVote(ShopVote ShopVote) { + ShopVoteList.add(ShopVote); + } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 4a2cbdf00..5fa6252ac 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -178,9 +178,12 @@ public void removeShop(ClaimedResidence res) { @Override public void removeShop(String resName) { - ClaimedResidence res = getByName(resName); - if (res != null) - shops.remove(res); + for (ClaimedResidence one : shops) { + if (one.getName().equalsIgnoreCase(resName)) { + shops.remove(one); + break; + } + } } @Override diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index 9f9970cc5..3ba92f43f 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -124,12 +124,9 @@ public void onFlagChangeShop(ResidenceFlagChangeEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceRename(ResidenceRenameEvent event) { - ConcurrentHashMap> Votes = Residence.getShopSignUtilManager().GetAllVoteList(); - if (Votes.containsKey(event.getOldResidenceName())) { - Residence.getResidenceManager().addShop(event.getNewResidenceName()); + if (!event.getResidence().GetShopVotes().isEmpty()) { + Residence.getResidenceManager().addShop(event.getResidence()); Residence.getResidenceManager().removeShop(event.getOldResidenceName()); - List obj = Votes.remove(event.getOldResidenceName()); - Votes.put(event.getNewResidenceName(), obj); Residence.getShopSignUtilManager().saveShopVotes(); Residence.getShopSignUtilManager().BoardUpdateDelayed(); Residence.getShopSignUtilManager().saveSigns(); diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index 7f5b0ad83..9127e1038 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -11,10 +11,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; @@ -25,11 +22,9 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; public class ShopSignUtil { - ConcurrentHashMap> VoteList = new ConcurrentHashMap>(); List AllBoards = new ArrayList(); private Residence plugin; @@ -38,18 +33,6 @@ public ShopSignUtil(Residence plugin) { this.plugin = plugin; } - public ConcurrentHashMap> GetAllVoteList() { - return VoteList; - } - - public void removeVoteList(String resName) { - VoteList.remove(resName.toLowerCase()); - } - - public void addVote(String ResName, List ShopVote) { - VoteList.put(ResName.toLowerCase(), ShopVote); - } - public void setAllSigns(List AllBoards) { this.AllBoards = AllBoards; } @@ -68,7 +51,6 @@ public void addBoard(Board Board) { // Res Shop vote file public void LoadShopVotes() { - GetAllVoteList().clear(); File file = new File(plugin.getDataFolder(), "ShopVotes.yml"); YamlConfiguration f = YamlConfiguration.loadConfiguration(file); @@ -90,11 +72,9 @@ public void LoadShopVotes() { return; for (String category : categoriesList) { - Debug.D(category); List List = ConfCategory.getStringList(category); List VoteList = new ArrayList(); for (String oneEntry : List) { - Debug.D(category); if (!oneEntry.contains("%")) continue; @@ -136,10 +116,14 @@ else if (vote > 10) VoteList.add(new ShopVote(name, uuid, vote, time)); - Debug.D(category + " " + name + ""); - } - addVote(category.replace("_", "."), VoteList); + + ClaimedResidence res = Residence.getResidenceManager().getByName(category.replace("_", ".")); + + if (res == null) + continue; + res.clearShopVotes(); + res.addShopVote(VoteList); } return; } @@ -157,16 +141,16 @@ public void saveShopVotes() { if (!conf.isConfigurationSection("ShopVotes")) conf.createSection("ShopVotes"); - for (Entry> one : GetAllVoteList().entrySet()) { + for (ClaimedResidence res : Residence.getResidenceManager().getShops()) { - if (one.getKey() == null || one.getKey().equalsIgnoreCase("")) + if (res == null || res.GetShopVotes().isEmpty()) continue; - String path = "ShopVotes." + one.getKey().replace(".", "_"); + String path = "ShopVotes." + res.getName().replace(".", "_"); List list = new ArrayList(); - for (ShopVote oneVote : one.getValue()) { + for (ShopVote oneVote : res.GetShopVotes()) { list.add(oneVote.getName() + ":" + oneVote.getUuid().toString() + "%" + oneVote.getVote() + "!" + oneVote.getTime()); } writer.set(path, list); @@ -182,13 +166,16 @@ public void saveShopVotes() { // Res Shop vote file public Vote getAverageVote(String resName) { + ClaimedResidence res = Residence.getResidenceManager().getByName(resName); + return getAverageVote(res); + } - ConcurrentHashMap> allvotes = GetAllVoteList(); + public Vote getAverageVote(ClaimedResidence res) { - if (!allvotes.containsKey(resName.toLowerCase())) + if (res == null || res.GetShopVotes().isEmpty()) return new Vote(Residence.getConfigManager().getVoteRangeTo() / 2, 0); - List votes = allvotes.get(resName.toLowerCase()); + List votes = res.GetShopVotes(); double total = 0; for (ShopVote oneVote : votes) { @@ -202,11 +189,15 @@ public Vote getAverageVote(String resName) { // Res Shop vote file public int getLikes(String resName) { - ConcurrentHashMap> allvotes = GetAllVoteList(); - if (!allvotes.containsKey(resName)) + ClaimedResidence res = Residence.getResidenceManager().getByName(resName); + return getLikes(res); + } + + public int getLikes(ClaimedResidence res) { + if (res == null || res.GetShopVotes().isEmpty()) return 0; - List votes = allvotes.get(resName); + List votes = res.GetShopVotes(); int likes = 0; for (ShopVote oneVote : votes) { @@ -225,9 +216,9 @@ public Map getSortedShopList() { for (ClaimedResidence one : shops) { if (Residence.getConfigManager().isOnlyLike()) - allvotes.put(one.getName(), (double) getLikes(one.getName())); + allvotes.put(one.getName(), (double) getLikes(one)); else - allvotes.put(one.getName(), getAverageVote(one.getName()).getVote()); + allvotes.put(one.getName(), getAverageVote(one).getVote()); } allvotes = sortByComparator(allvotes); From e9a09ada0abec3f93e0f5e4398cd2c4e33a2739c Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Sep 2016 18:15:01 +0300 Subject: [PATCH 0255/1142] fix for flower pot issue when placing anvil near it --- .../listeners/ResidenceEntityListener.java | 16 +++++++++++++++- .../listeners/ResidenceFixesListener.java | 2 +- .../listeners/ResidencePlayerListener.java | 2 +- .../bukkit/residence/shopStuff/ShopListener.java | 2 -- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 5111144da..9faa8d0fa 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -24,6 +24,7 @@ import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityInteractEvent; import org.bukkit.event.entity.PotionSplashEvent; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; @@ -822,7 +823,7 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { return; Entity ent = event.getEntity(); - if (!Residence.getNms().isArmorStandEntity(ent.getType())) + if (!Residence.getNms().isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) return; if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { @@ -964,6 +965,7 @@ public void onEntityDamage(EntityDamageEvent event) { boolean srcpvp = true; boolean allowSnowBall = false; boolean isSnowBall = false; + boolean isOnFire = false; if (srcarea != null) { srcpvp = srcarea.getPermissions().has(Flags.pvp, true); } @@ -979,6 +981,9 @@ public void onEntityDamage(EntityDamageEvent event) { isSnowBall = true; allowSnowBall = srcarea.getPermissions().has(Flags.snowball, false); } + if (project.getFireTicks() > 0) + isOnFire = true; + attacker = (Player) ((Projectile) damager).getShooter(); } @@ -988,9 +993,12 @@ public void onEntityDamage(EntityDamageEvent event) { if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { if (attacker != null) Residence.msg(attacker, lm.General_NoPVPZone); + if (isOnFire) + ent.setFireTicks(0); event.setCancelled(true); return; } + /* Check for Player vs Player */ if (area == null) { /* World PvP */ @@ -998,6 +1006,8 @@ public void onEntityDamage(EntityDamageEvent event) { if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, true)) { if (attacker != null) Residence.msg(attacker, lm.General_WorldPVPDisabled); + if (isOnFire) + ent.setFireTicks(0); event.setCancelled(true); return; } @@ -1007,6 +1017,8 @@ public void onEntityDamage(EntityDamageEvent event) { FlagPermissions aPerm = Residence.getPermsByLoc(attacker.getLocation()); if (aPerm.has(Flags.pvp, FlagCombo.FalseOrNone)) { Residence.msg(attacker, lm.General_NoPVPZone); + if (isOnFire) + ent.setFireTicks(0); event.setCancelled(true); return; } @@ -1016,6 +1028,8 @@ public void onEntityDamage(EntityDamageEvent event) { if (!isSnowBall && !area.getPermissions().has(Flags.pvp, true) || isSnowBall && !allowSnowBall) { if (attacker != null) Residence.msg(attacker, lm.General_NoPVPZone); + if (isOnFire) + ent.setFireTicks(0); event.setCancelled(true); return; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java index 4ee20c8d1..9b9bc9bb9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java @@ -32,7 +32,7 @@ public void onAnvilPlace(PlayerInteractEvent event) { Location loc = new Location(bclicked.getWorld(), bclicked.getX() + face.getModX(), bclicked.getY() + face.getModY(), bclicked.getZ() + face.getModZ()); Block block = loc.getBlock(); - if (block == null || block.getType() == Material.AIR || block.getType() != Material.SKULL) + if (block == null || block.getType() == Material.AIR || block.getType() != Material.SKULL && block.getType() != Material.FLOWER_POT) return; event.setCancelled(true); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 7d5e2dc6a..d9737034a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1008,7 +1008,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); + boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { if (mat != checkMat.getKey()) continue; diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index 3ba92f43f..46c9ab125 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -2,8 +2,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; - import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; From 37c7041e6c82484852ff92f46340ca5d17de867b Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Sep 2016 18:20:59 +0300 Subject: [PATCH 0256/1142] Prevent griefing with flame arrows --- .../listeners/ResidenceEntityListener.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 9faa8d0fa..46b140b7f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -24,6 +24,7 @@ import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityInteractEvent; import org.bukkit.event.entity.PotionSplashEvent; +import org.bukkit.event.entity.ProjectileHitEvent; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -51,6 +52,7 @@ import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.potion.PotionEffect; +import org.bukkit.projectiles.ProjectileSource; public class ResidenceEntityListener implements Listener { @@ -822,7 +824,6 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { if (event.getCause() != DamageCause.FIRE_TICK) return; Entity ent = event.getEntity(); - if (!Residence.getNms().isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) return; @@ -832,6 +833,24 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockCatchingFire(ProjectileHitEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (!(event.getEntity() instanceof Arrow)) + return; + Arrow arrow = (Arrow) event.getEntity(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(arrow.getLocation()); + ProjectileSource shooter = arrow.getShooter(); + if (shooter instanceof Player) { + Player player = (Player) shooter; + if (!res.getPermissions().playerHas(player, Flags.build, FlagCombo.OnlyTrue)) { + arrow.setFireTicks(0); + } + } + } + @EventHandler public void OnPlayerDamageByLightning(EntityDamageEvent event) { // disabling event on world From 225f05d27cdc0fa27391815bbd83a2417c94469d Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Sep 2016 18:35:50 +0300 Subject: [PATCH 0257/1142] tabcomplete for res listall world name --- src/com/bekvon/bukkit/residence/commands/listall.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index bc9666c74..4ea7343c1 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -51,6 +51,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command @Override public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "List All Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res listall <-a>", "Lists hidden residences for a player.")); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res listall <-a>", "Lists all residences")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); } } From 913aeff6e843c54942ce451d1cd52975dabcf081 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Sep 2016 18:54:42 +0300 Subject: [PATCH 0258/1142] Fix for reseting flags --- src/com/bekvon/bukkit/residence/ConfigManager.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index dd9a05237..909256b58 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -9,6 +9,7 @@ import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.ParticleEffects; import java.io.BufferedReader; @@ -279,6 +280,10 @@ void UpdateFlagFile() { YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); for (Flags fl : Flags.values()) { + if (conf.isBoolean("Global.FlagPermission." + fl.getName())) + continue; + + Debug.D("non existen section " + fl.getName()); conf.createSection("Global.FlagPermission." + fl.getName()); conf.set("Global.FlagPermission." + fl.getName(), fl.isEnabled()); } From 6e300779daeae06365d4cf4f27cc1624d1331a13 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 7 Sep 2016 13:41:57 +0300 Subject: [PATCH 0259/1142] Prevent hopperMinecart taking items from chest if there is no rails --- .../listeners/ResidenceEntityListener.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 46b140b7f..a39ee7628 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -8,7 +8,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; - import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -40,6 +39,7 @@ import org.bukkit.entity.Projectile; import org.bukkit.entity.Tameable; import org.bukkit.entity.Vehicle; +import org.bukkit.entity.minecart.HopperMinecart; import org.bukkit.entity.Slime; import org.bukkit.entity.Ghast; import org.bukkit.entity.Hanging; @@ -50,6 +50,7 @@ import org.bukkit.event.entity.PlayerLeashEntityEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingPlaceEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; @@ -62,6 +63,26 @@ public ResidenceEntityListener(Residence plugin) { this.plugin = plugin; } + @SuppressWarnings("incomplete-switch") + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onMinecartHopperItemMove(InventoryMoveItemEvent event) { + if (!(event.getInitiator().getHolder() instanceof HopperMinecart)) + return; + HopperMinecart hopper = (HopperMinecart) event.getInitiator().getHolder(); + // disabling event on world + if (Residence.isDisabledWorldListener(hopper.getWorld())) + return; + Block block = hopper.getLocation().getBlock(); + switch (block.getType()) { + case ACTIVATOR_RAIL: + case DETECTOR_RAIL: + case POWERED_RAIL: + case RAILS: + return; + } + event.setCancelled(true); + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEndermanChangeBlock(EntityChangeBlockEvent event) { // disabling event on world From eda8fbb4824fc01cdfb842411a3f77ae415aa1b2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 7 Sep 2016 16:16:48 +0300 Subject: [PATCH 0260/1142] Try to get online player when checking for ownership by its name --- src/com/bekvon/bukkit/residence/commands/command.java | 2 +- src/com/bekvon/bukkit/residence/commands/remove.java | 4 ++-- src/com/bekvon/bukkit/residence/commands/shop.java | 3 --- .../bukkit/residence/protection/ClaimedResidence.java | 3 +++ .../bukkit/residence/protection/ResidenceManager.java | 6 ++---- 5 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index b1835f0d5..3cb3662db 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -45,7 +45,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; } - if (!res.isOwner(sender.getName()) && !resadmin) { + if (!res.isOwner(sender) && !resadmin) { Residence.msg(sender, lm.Residence_NotOwner); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 1b58724a3..c43ad8445 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -44,7 +44,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command sender.hasPermission("residence.delete.subzone") && !resadmin && Residence.getConfigManager().isPreventSubZoneRemoval() && - !res.getParent().isOwner(senderName) && + !res.getParent().isOwner(sender) && !res.getPermissions().playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue)) { Residence.msg(sender, lm.Subzone_CantDeleteNotOwnerOfParent); return true; @@ -53,7 +53,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (!res.isSubzone() && sender.hasPermission("residence.delete") && !resadmin && - !res.isOwner(senderName)) { + !res.isOwner(sender)) { Residence.msg(sender, lm.Residence_CantDeleteResidence); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 5897bcf80..71a31cd91 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -1,15 +1,12 @@ package com.bekvon.bukkit.residence.commands; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import java.util.TimeZone; import java.util.Map.Entry; -import java.util.concurrent.ConcurrentHashMap; - import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index b593736b2..ca177259c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1570,6 +1570,9 @@ public String getOwner() { } public boolean isOwner(String name) { + Player player = Bukkit.getPlayer(name); + if (player != null) + return isOwner(player); return perms.getOwner().equalsIgnoreCase(name); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 5fa6252ac..7aae54bc8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -24,7 +24,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; @@ -37,7 +36,6 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; @@ -630,7 +628,7 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi String resNameOwner = "&e" + Residence.msg(lm.Residence_Line, areaname); resNameOwner += Residence.msg(lm.General_Owner, perms.getOwner()); if (Residence.getConfigManager().enableEconomy()) { - if (res.isOwner(sender.getName()) || !(sender instanceof Player) || resadmin) + if (res.isOwner(sender) || !(sender instanceof Player) || resadmin) resNameOwner += Residence.msg(lm.Bank_Name, res.getBank().getStoredMoney()); } resNameOwner = ChatColor.translateAlternateColorCodes('&', resNameOwner); @@ -720,7 +718,7 @@ else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Play StringBuilder rentableString = new StringBuilder(); if (rented != null) { rentableString.append(Residence.msg(lm.Rent_Expire, GetTime.getTime(rented.endTime)) + "\n"); - if (rented.player.equals(sender.getName()) || resadmin || res.isOwner(sender.getName())) + if (rented.player.equals(sender.getName()) || resadmin || res.isOwner(sender)) rentableString.append((rented.AutoPay ? Residence.msg(lm.Rent_AutoPayTurnedOn) : Residence.msg(lm.Rent_AutoPayTurnedOff)) + "\n"); } From dc52ff5412cada70fb2972ae32ec46bbdd44b884 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 7 Sep 2016 16:26:31 +0300 Subject: [PATCH 0261/1142] prevent flame arrow grief by pvp flag instead by build for each player --- .../listeners/ResidenceEntityListener.java | 13 +++++-------- src/plugin.yml | 2 +- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index a39ee7628..f1d9bd385 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -862,14 +862,11 @@ public void onBlockCatchingFire(ProjectileHitEvent event) { if (!(event.getEntity() instanceof Arrow)) return; Arrow arrow = (Arrow) event.getEntity(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(arrow.getLocation()); - ProjectileSource shooter = arrow.getShooter(); - if (shooter instanceof Player) { - Player player = (Player) shooter; - if (!res.getPermissions().playerHas(player, Flags.build, FlagCombo.OnlyTrue)) { - arrow.setFireTicks(0); - } - } + + FlagPermissions perms = Residence.getPermsByLoc(arrow.getLocation()); + + if (!perms.has(Flags.pvp, FlagCombo.OnlyTrue)) + arrow.setFireTicks(0); } @EventHandler diff --git a/src/plugin.yml b/src/plugin.yml index d73d23dfa..b65ada907 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.7.4 +version: 4.5.7.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 581bee5763367025a89e17d00ad4e78a361cfa93 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 8 Sep 2016 13:28:33 +0300 Subject: [PATCH 0262/1142] Fix for removing residence causing stack overflow Added new flag for higher jumps --- build.xml | 95 ------------------- .../bukkit/residence/containers/Flags.java | 2 + .../listeners/ResidenceEntityListener.java | 1 - .../listeners/ResidencePlayerListener.java | 48 ++++++++++ .../protection/ResidenceManager.java | 2 +- 5 files changed, 51 insertions(+), 97 deletions(-) delete mode 100644 build.xml diff --git a/build.xml b/build.xml deleted file mode 100644 index 02547deac..000000000 --- a/build.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - Building the .jar file. - - - - - Cleaning - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Compiling - - - - - - - - - - - - - Packaging JAR distribution - - - - - - - - - - - - Cleaning up - - - - diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 6ab3d22ef..0ac9d7906 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -54,6 +54,8 @@ public enum Flags { iceform(79, 0, FlagMode.Residence, "Prevents from ice forming", true), icemelt(79, 0, FlagMode.Residence, "Prevents ice from melting", true), ignite(259, 0, FlagMode.Both, "Allows or denys fire ignition", true), + jump2(165, 0, FlagMode.Residence, "Allows to jump 2 blocks high", false), + jump3(165, 0, FlagMode.Residence, "Allows to jump 3 blocks high", false), keepinv(298, 0, FlagMode.Residence, "Players keeps inventory after death", false), keepexp(322, 0, FlagMode.Residence, "Players keeps exp after death", false), lavaflow(327, 0, FlagMode.Residence, "Allows or denys lava flow, overrides flow", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index f1d9bd385..dbf6aa9f9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -53,7 +53,6 @@ import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.potion.PotionEffect; -import org.bukkit.projectiles.ProjectileSource; public class ResidenceEntityListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index d9737034a..aac7d6c2b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -66,6 +66,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -110,6 +111,25 @@ public void reload() { } } + @EventHandler + public void onJump(PlayerMoveEvent event) { + Player player = event.getPlayer(); + if (player.isFlying()) + return; + + if (event.getTo().getY() - event.getFrom().getY() != 0.41999998688697815D) + return; + + FlagPermissions perms = Residence.getPermsByLoc(player.getLocation()); +// Debug.D("jump"); + + if (perms.has(Flags.jump2, FlagCombo.OnlyTrue)) + player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.3))); + else if (perms.has(Flags.jump3, FlagCombo.OnlyTrue)) + player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.6))); + + } + // Adding to chat prefix main residence name @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerGlobalChat(AsyncPlayerChatEvent event) { @@ -351,6 +371,34 @@ public void onFlagChangeWSpeed(ResidenceFlagChangeEvent event) { } } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeJump(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.jump2.getName()) && + !event.getFlag().equalsIgnoreCase(Flags.jump3.getName())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.jump2.getName())) { + if (event.getResidence().getPermissions().has(Flags.jump3, FlagCombo.OnlyTrue)) + event.getResidence().getPermissions().setFlag(Flags.jump3.getName(), FlagState.NEITHER); + } else if (event.getFlag().equalsIgnoreCase(Flags.jump3.getName())) { + if (event.getResidence().getPermissions().has(Flags.jump2, FlagCombo.OnlyTrue)) + event.getResidence().getPermissions().setFlag(Flags.jump2.getName(), FlagState.NEITHER); + } + break; + default: + break; + } + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeSunRain(ResidenceFlagChangeEvent event) { if (event.isCancelled()) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 7aae54bc8..eb135285c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -171,7 +171,7 @@ public void addShop(ClaimedResidence res) { @Override public void removeShop(ClaimedResidence res) { - removeShop(res); + shops.remove(res); } @Override From 4e7202e33c375fd952097971f782085987ff3482 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Sep 2016 13:10:07 +0300 Subject: [PATCH 0263/1142] Shop board update and avoid overlapping boards --- .../bukkit/residence/commands/shop.java | 23 ++--- .../bukkit/residence/containers/lm.java | 1 + .../bukkit/residence/shopStuff/Board.java | 89 +++++-------------- .../residence/shopStuff/ShopSignUtil.java | 47 ++++++---- src/plugin.yml | 2 +- 5 files changed, 63 insertions(+), 99 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 71a31cd91..b306b958f 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -237,7 +237,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length == 2 && args[1].equalsIgnoreCase("DeleteBoard")) { if (!resadmin) { - Residence.msg(player, lm.General_NoPermission); + Residence.msg(player, lm.General_AdminOnly); return true; } @@ -278,7 +278,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length == 3 && args[1].equalsIgnoreCase("createboard")) { if (!resadmin) { - Residence.msg(player, lm.General_NoPermission); + Residence.msg(player, lm.General_AdminOnly); return true; } @@ -308,18 +308,13 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Board newTemp = new Board(); newTemp.setStartPlace(place); - newTemp.setWorld(loc1.getWorld().getName()); - newTemp.setTX(loc1.getBlockX()); - newTemp.setTY(loc1.getBlockY()); - newTemp.setTZ(loc1.getBlockZ()); - newTemp.setBX(loc2.getBlockX()); - newTemp.setBY(loc2.getBlockY()); - newTemp.setBZ(loc2.getBlockZ()); - - newTemp.GetTopLocation(); - newTemp.GetBottomLocation(); - - newTemp.GetLocations(); + newTemp.setTopLoc(loc1); + newTemp.setBottomLoc(loc2); + + if (Residence.getShopSignUtilManager().exist(newTemp)){ + sender.sendMessage(Residence.msg(lm.Shop_BoardExist)); + return true; + } Residence.getShopSignUtilManager().addBoard(newTemp); Residence.msg(player, lm.Shop_NewBoard); diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 63a665ac9..86c3b54b8 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -324,6 +324,7 @@ public enum lm { Shop_Desc("&6Description:\n%1"), Shop_DescChange("&6Description changed to: %1"), Shop_NewBoard("&6Successfully added new shop sign board"), + Shop_BoardExist("&cShop board already exists in this location"), Shop_DeleteBoard("&6Right click sign of board you want to delete"), Shop_DeletedBoard("&6Sign board removed"), Shop_IncorrectBoard("&cThis is not sign board, try performing command again and clicking correct sign"), diff --git a/src/com/bekvon/bukkit/residence/shopStuff/Board.java b/src/com/bekvon/bukkit/residence/shopStuff/Board.java index 938f8ade9..19537b074 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/Board.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/Board.java @@ -5,31 +5,18 @@ import java.util.List; import java.util.Map.Entry; -import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.World; public class Board { - String world = null; - Integer tx = 0; - Integer ty = 0; - Integer tz = 0; - Integer bx = 0; - Integer by = 0; - Integer bz = 0; - - Location TopLoc = null; - Location BottomLoc = null; + private Location TopLoc = null; + private Location BottomLoc = null; int StartPlace = 0; List Locations = new ArrayList(); HashMap SignLocations = new HashMap(); - public Board() { - } - public void clearSignLoc() { SignLocations.clear(); } @@ -64,18 +51,16 @@ public String getResNameByLoc(Location location) { public List GetLocations() { Locations.clear(); - GetTopLocation(); - GetBottomLocation(); if (TopLoc == null || BottomLoc == null) return null; - if (Bukkit.getWorld(world) == null) + if (TopLoc.getWorld() == null) return null; - int xLength = tx - bx; - int yLength = ty - by; - int zLength = tz - bz; + int xLength = TopLoc.getBlockX() - BottomLoc.getBlockX(); + int yLength = TopLoc.getBlockY() - BottomLoc.getBlockY(); + int zLength = TopLoc.getBlockZ() - BottomLoc.getBlockZ(); if (xLength < 0) xLength = xLength * -1; @@ -89,17 +74,17 @@ public List GetLocations() { int tempx = 0; int tempz = 0; - if (tx > bx) - tempx = tx - x; + if (TopLoc.getBlockX() > BottomLoc.getBlockX()) + tempx = TopLoc.getBlockX() - x; else - tempx = tx + x; + tempx = TopLoc.getBlockX() + x; - if (tz > bz) - tempz = tz - z; + if (TopLoc.getBlockZ() > BottomLoc.getBlockZ()) + tempz = TopLoc.getBlockZ() - z; else - tempz = tz + z; + tempz = TopLoc.getBlockZ() + z; - Locations.add(new Location(Bukkit.getWorld(world), tempx, ty - y, tempz)); + Locations.add(new Location(TopLoc.getWorld(), tempx, TopLoc.getBlockY() - y, tempz)); } } } @@ -107,24 +92,6 @@ public List GetLocations() { return this.Locations; } - public Location GetTopLocation() { - if (this.TopLoc == null) { - World w = Bukkit.getWorld(this.world); - if (w != null) - this.TopLoc = new Location(Bukkit.getWorld(this.world), this.tx, this.ty, this.tz); - } - return this.TopLoc; - } - - public Location GetBottomLocation() { - if (this.BottomLoc == null) { - World w = Bukkit.getWorld(this.world); - if (w != null) - this.BottomLoc = new Location(Bukkit.getWorld(this.world), this.bx, this.by, this.bz); - } - return this.BottomLoc; - } - public void setStartPlace(int StartPlace) { this.StartPlace = StartPlace; } @@ -133,35 +100,23 @@ public int GetStartPlace() { return this.StartPlace == 0 ? 0 : (StartPlace - 1); } - public void setWorld(String World) { - this.world = World; - } - public String GetWorld() { - return this.world; - } - - public void setTX(Integer x) { - this.tx = x; - } - - public void setTY(Integer y) { - this.ty = y; + return this.TopLoc.getWorld().getName(); } - public void setTZ(Integer z) { - this.tz = z; + public Location getTopLoc() { + return TopLoc; } - public void setBX(Integer x) { - this.bx = x; + public void setTopLoc(Location topLoc) { + TopLoc = topLoc; } - public void setBY(Integer y) { - this.by = y; + public Location getBottomLoc() { + return BottomLoc; } - public void setBZ(Integer z) { - this.bz = z; + public void setBottomLoc(Location bottomLoc) { + BottomLoc = bottomLoc; } } diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index 9127e1038..0f40d7117 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -14,6 +14,7 @@ import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.Sign; import org.bukkit.configuration.ConfigurationSection; @@ -49,6 +50,19 @@ public void addBoard(Board Board) { AllBoards.add(Board); } + public boolean exist(Board board) { + List loc2 = board.GetLocations(); + for (Board one : AllBoards) { + List loc1 = one.GetLocations(); + for (Location oneL : loc1) { + if (!loc2.contains(oneL)) + continue; + return true; + } + } + return false; + } + // Res Shop vote file public void LoadShopVotes() { File file = new File(plugin.getDataFolder(), "ShopVotes.yml"); @@ -261,18 +275,17 @@ public void LoadSigns() { ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); Board newTemp = new Board(); newTemp.setStartPlace(NameSection.getInt("StartPlace")); - newTemp.setWorld(NameSection.getString("World")); - newTemp.setTX(NameSection.getInt("TX")); - newTemp.setTY(NameSection.getInt("TY")); - newTemp.setTZ(NameSection.getInt("TZ")); - newTemp.setBX(NameSection.getInt("BX")); - newTemp.setBY(NameSection.getInt("BY")); - newTemp.setBZ(NameSection.getInt("BZ")); - newTemp.GetTopLocation(); - newTemp.GetBottomLocation(); + World w = Bukkit.getWorld(NameSection.getString("World")); + + if (w == null) + continue; + + Location loc1 = new Location(w, NameSection.getInt("TX"), NameSection.getInt("TY"), NameSection.getInt("TZ")); + Location loc2 = new Location(w, NameSection.getInt("BX"), NameSection.getInt("BY"), NameSection.getInt("BZ")); - newTemp.GetLocations(); + newTemp.setTopLoc(loc1); + newTemp.setBottomLoc(loc2); addBoard(newTemp); } @@ -298,12 +311,12 @@ public void saveSigns() { String path = "ShopSigns." + cat; writer.set(path + ".StartPlace", one.GetStartPlace()); writer.set(path + ".World", one.GetWorld()); - writer.set(path + ".TX", one.GetTopLocation().getBlockX()); - writer.set(path + ".TY", one.GetTopLocation().getBlockY()); - writer.set(path + ".TZ", one.GetTopLocation().getBlockZ()); - writer.set(path + ".BX", one.GetBottomLocation().getBlockX()); - writer.set(path + ".BY", one.GetBottomLocation().getBlockY()); - writer.set(path + ".BZ", one.GetBottomLocation().getBlockZ()); + writer.set(path + ".TX", one.getTopLoc().getBlockX()); + writer.set(path + ".TY", one.getTopLoc().getBlockY()); + writer.set(path + ".TZ", one.getTopLoc().getBlockZ()); + writer.set(path + ".BX", one.getBottomLoc().getBlockX()); + writer.set(path + ".BY", one.getBottomLoc().getBlockY()); + writer.set(path + ".BZ", one.getBottomLoc().getBlockZ()); } try { @@ -365,7 +378,7 @@ public boolean BoardUpdate() { if (Residence.getConfigManager().isOnlyLike()) { votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListLiked, getLikes(ShopNames.get(Start))); } else - votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_SignLines_4, vote.getVote() + "%" + vote.getAmount()); + votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_SignLines_4, vote.getVote() , vote.getAmount()); } sign.setLine(0, Residence.msg(lm.Shop_SignLines_1, Start + 1)); diff --git a/src/plugin.yml b/src/plugin.yml index b65ada907..d01b0f181 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.7.5 +version: 4.5.7.6 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 87e4fb0cc3026a10e44f9bef972331f66c50e2f5 Mon Sep 17 00:00:00 2001 From: uroskn Date: Tue, 27 Sep 2016 10:44:58 +0200 Subject: [PATCH 0264/1142] Commit 581bee5 accidentally removed build.xml, making the whole source unbildable --- build.xml | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 build.xml diff --git a/build.xml b/build.xml new file mode 100644 index 000000000..02547deac --- /dev/null +++ b/build.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + Building the .jar file. + + + + + Cleaning + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Compiling + + + + + + + + + + + + + Packaging JAR distribution + + + + + + + + + + + + Cleaning up + + + + From 1900472db9735d076d0c6d8e37c0d3449dc93562 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 30 Sep 2016 13:47:25 +0300 Subject: [PATCH 0265/1142] properly check for appropriate permissions when changing flags --- .../bekvon/bukkit/residence/Residence.java | 3348 +++++++------- .../bekvon/bukkit/residence/allNms/v1_10.java | 384 +- .../bukkit/residence/commands/expand.java | 226 +- .../bukkit/residence/commands/kick.java | 146 +- .../bukkit/residence/commands/market.java | 966 ++--- .../bukkit/residence/commands/pset.java | 229 +- .../bekvon/bukkit/residence/commands/rc.java | 428 +- .../bekvon/bukkit/residence/commands/set.java | 158 +- .../bukkit/residence/commands/setowner.java | 110 +- .../residence/containers/ABInterface.java | 26 +- .../residence/containers/ConfigReader.java | 192 +- .../residence/economy/ResidenceBank.java | 5 +- .../residence/economy/rent/RentManager.java | 7 +- .../listeners/ResidenceBlockListener.java | 1248 +++--- .../listeners/ResidencePlayerListener.java | 3851 ++++++++--------- .../protection/ClaimedResidence.java | 13 +- .../protection/ResidencePermissions.java | 6 +- .../residence/text/help/InformationPager.java | 5 +- src/plugin.yml | 572 +-- 19 files changed, 5971 insertions(+), 5949 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index e77cb437b..a1b2e3488 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1,1675 +1,1673 @@ -package com.bekvon.bukkit.residence; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.UnsupportedEncodingException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.World; -import org.bukkit.command.CommandSender; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginManager; -import org.bukkit.plugin.java.JavaPlugin; -import org.dynmap.DynmapAPI; - -import com.bekvon.bukkit.residence.chat.ChatManager; -import com.bekvon.bukkit.residence.containers.ABInterface; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.NMS; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.dynmap.DynMapListeners; -import com.bekvon.bukkit.residence.dynmap.DynMapManager; -import com.bekvon.bukkit.residence.economy.BOSEAdapter; -import com.bekvon.bukkit.residence.economy.EconomyInterface; -import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter; -import com.bekvon.bukkit.residence.economy.IConomy5Adapter; -import com.bekvon.bukkit.residence.economy.IConomy6Adapter; -import com.bekvon.bukkit.residence.economy.RealShopEconomy; -import com.bekvon.bukkit.residence.economy.TransactionManager; -import com.bekvon.bukkit.residence.economy.rent.RentManager; -import com.bekvon.bukkit.residence.gui.FlagUtil; -import com.bekvon.bukkit.residence.itemlist.WorldItemManager; -import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; -import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; -import com.bekvon.bukkit.residence.listeners.ResidenceFixesListener; -import com.bekvon.bukkit.residence.allNms.v1_10Events; -import com.bekvon.bukkit.residence.allNms.v1_8Events; -import com.bekvon.bukkit.residence.allNms.v1_9Events; -import com.bekvon.bukkit.residence.api.ChatInterface; -import com.bekvon.bukkit.residence.api.MarketBuyInterface; -import com.bekvon.bukkit.residence.api.MarketRentInterface; -import com.bekvon.bukkit.residence.api.ResidenceApi; -import com.bekvon.bukkit.residence.api.ResidenceInterface; -import com.bekvon.bukkit.residence.api.ResidencePlayerInterface; -import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; -import com.bekvon.bukkit.residence.listeners.SpigotListener; -import com.bekvon.bukkit.residence.permissions.PermissionManager; -import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.protection.LeaseManager; -import com.bekvon.bukkit.residence.protection.PermissionListManager; -import com.bekvon.bukkit.residence.protection.ResidenceManager; -import com.bekvon.bukkit.residence.protection.ResidencePermissions; -import com.bekvon.bukkit.residence.protection.PlayerManager; -import com.bekvon.bukkit.residence.protection.WorldFlagManager; -import com.bekvon.bukkit.residence.selection.AutoSelection; -import com.bekvon.bukkit.residence.selection.SchematicsManager; -import com.bekvon.bukkit.residence.selection.SelectionManager; -import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; -import com.bekvon.bukkit.residence.shopStuff.ShopListener; -import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; -import com.bekvon.bukkit.residence.signsStuff.SignUtil; -import com.bekvon.bukkit.residence.spout.ResidenceSpout; -import com.bekvon.bukkit.residence.spout.ResidenceSpoutListener; -import com.bekvon.bukkit.residence.text.Language; -import com.bekvon.bukkit.residence.text.help.HelpEntry; -import com.bekvon.bukkit.residence.utils.ActionBar; -import com.bekvon.bukkit.residence.utils.CrackShot; -import com.bekvon.bukkit.residence.utils.FileCleanUp; -import com.bekvon.bukkit.residence.utils.RandomTp; -import com.bekvon.bukkit.residence.utils.Sorting; -import com.bekvon.bukkit.residence.utils.TabComplete; -import com.bekvon.bukkit.residence.utils.VersionChecker; -import com.bekvon.bukkit.residence.utils.YmlMaker; -import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; -import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.earth2me.essentials.Essentials; -import com.griefcraft.lwc.LWC; -import com.griefcraft.lwc.LWCPlugin; -import com.residence.mcstats.Metrics; -import com.residence.zip.ZipLibrary; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; - -import cosine.boseconomy.BOSEconomy; -import fr.crafter.tickleman.realeconomy.RealEconomy; -import fr.crafter.tickleman.realplugin.RealPlugin; - -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -import org.bukkit.OfflinePlayer; - -/** - * - * @author Gary Smoak - bekvon - * - */ -public class Residence extends JavaPlugin { - - protected static String ResidenceVersion; - protected static List authlist; - protected static ResidenceManager rmanager; - protected static SelectionManager smanager; - public static PermissionManager gmanager; - protected static ConfigManager cmanager; - - protected static boolean spigotPlatform = false; - - protected static SignUtil signmanager; - - protected static ResidenceBlockListener blistener; - protected static ResidencePlayerListener plistener; - protected static ResidenceEntityListener elistener; - protected static ResidenceSpoutListener slistener; - protected static ResidenceSpout spout; - - protected static ResidenceFixesListener flistener; - - protected static SpigotListener spigotlistener; - protected static ShopListener shlistener; - protected static TransactionManager tmanager; - protected static PermissionListManager pmanager; - protected static LeaseManager leasemanager; - public static WorldItemManager imanager; - public static WorldFlagManager wmanager; - protected static RentManager rentmanager; - protected static ChatManager chatmanager; - protected static Server server; - public static HelpEntry helppages; - protected static LocaleManager LocaleManager; - protected static Language NewLanguageManager; - protected static PlayerManager PlayerManager; - protected static FlagUtil FlagUtilManager; - protected static ShopSignUtil ShopSignUtilManager; - protected static RandomTp RandomTpManager; - protected static DynMapManager DynManager; - protected static Sorting SortingManager; - protected static ActionBar ABManager; - protected static AutoSelection AutoSelectionManager; - protected static SchematicsManager SchematicManager; - private static InformationPager InformationPagerManager; - - protected static CommandFiller cmdFiller; - - protected static ZipLibrary zip; - - protected boolean firstenable = true; - protected static EconomyInterface economy; - private static int saveVersion = 1; - public static File dataFolder; - protected static int leaseBukkitId = -1; - protected static int rentBukkitId = -1; - protected static int healBukkitId = -1; - protected static int feedBukkitId = -1; - - protected static int DespawnMobsBukkitId = -1; - - protected static int autosaveBukkitId = -1; - protected static VersionChecker versionChecker; - protected static boolean initsuccess = false; - public static Map deleteConfirm; - public static Map UnrentConfirm = new HashMap(); - public static List resadminToggle; - private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW" }; - public static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); - public static WorldEditPlugin wep = null; - public static WorldGuardPlugin wg = null; - public static int wepid; - - private static String ServerLandname = "Server_Land"; - private static String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; - private static String TempUserUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"; - - private static ABInterface ab; - private static NMS nms; - static LWC lwc; - - public static HashMap rtMap = new HashMap(); - public static List teleportDelayMap = new ArrayList(); - public static HashMap teleportMap = new HashMap(); - - public static String prefix = ChatColor.GREEN + "[" + ChatColor.GOLD + "Residence" + ChatColor.GREEN + "]" + ChatColor.GRAY; - - public static boolean isSpigot() { - return spigotPlatform; - } - - public static HashMap getTeleportMap() { - return teleportMap; - } - - public static List getTeleportDelayMap() { - return teleportDelayMap; - } - - public static HashMap getRandomTeleportMap() { - return rtMap; - } - - // API - private static ResidenceApi API = new ResidenceApi(); - private static MarketBuyInterface MarketBuyAPI = null; - private static MarketRentInterface MarketRentAPI = null; - private static ResidencePlayerInterface PlayerAPI = null; - private static ResidenceInterface ResidenceAPI = null; - private static ChatInterface ChatAPI = null; - - public static ResidencePlayerInterface getPlayerManagerAPI() { - if (PlayerAPI == null) - PlayerAPI = PlayerManager; - return PlayerAPI; - } - - public static ResidenceInterface getResidenceManagerAPI() { - if (ResidenceAPI == null) - ResidenceAPI = rmanager; - return ResidenceAPI; - } - - public static MarketRentInterface getMarketRentManagerAPI() { - if (MarketRentAPI == null) - MarketRentAPI = rentmanager; - return MarketRentAPI; - } - - public static MarketBuyInterface getMarketBuyManagerAPI() { - if (MarketBuyAPI == null) - MarketBuyAPI = tmanager; - return MarketBuyAPI; - - } - - public static ChatInterface getResidenceChatAPI() { - if (ChatAPI == null) - ChatAPI = chatmanager; - return ChatAPI; - } - - public static ResidenceApi getAPI() { - return API; - } - // API end - - public static NMS getNms() { - return nms; - } - - public static ABInterface getAB() { - return ab; - } - - private Runnable doHeals = new Runnable() { - @Override - public void run() { - plistener.doHeals(); - } - }; - - private Runnable doFeed = new Runnable() { - @Override - public void run() { - plistener.feed(); - } - }; - - private Runnable DespawnMobs = new Runnable() { - @Override - public void run() { - plistener.DespawnMobs(); - } - }; - - private Runnable rentExpire = new Runnable() { - @Override - public void run() { - rentmanager.checkCurrentRents(); - if (cmanager.showIntervalMessages()) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - Rent Expirations checked!"); - } - } - }; - private Runnable leaseExpire = new Runnable() { - @Override - public void run() { - leasemanager.doExpirations(); - if (cmanager.showIntervalMessages()) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - Lease Expirations checked!"); - } - } - }; - private Runnable autoSave = new Runnable() { - @Override - public void run() { - try { - if (initsuccess) { - Bukkit.getScheduler().runTaskAsynchronously(Residence.this, new Runnable() { - @Override - public void run() { - try { - saveYml(); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - }); - } - } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, Residence.prefix + " SEVERE SAVE ERROR", ex); - } - } - }; - - public void reloadPlugin() { - this.onDisable(); - this.reloadConfig(); - this.onEnable(); - } - - @Override - public void onDisable() { - server.getScheduler().cancelTask(autosaveBukkitId); - server.getScheduler().cancelTask(healBukkitId); - server.getScheduler().cancelTask(feedBukkitId); - - server.getScheduler().cancelTask(DespawnMobsBukkitId); - - if (cmanager.useLeases()) { - server.getScheduler().cancelTask(leaseBukkitId); - } - if (cmanager.enabledRentSystem()) { - server.getScheduler().cancelTask(rentBukkitId); - } - - if (getDynManager() != null) - getDynManager().getMarkerSet().deleteMarkerSet(); - - if (initsuccess) { - try { - saveYml(); - if (zip != null) - zip.backup(); - } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); - } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Disabled!"); - } - } - - @Override - public void onEnable() { - try { - initsuccess = false; - deleteConfirm = new HashMap(); - resadminToggle = new ArrayList(); - server = this.getServer(); - dataFolder = this.getDataFolder(); - - ResidenceVersion = this.getDescription().getVersion(); - authlist = this.getDescription().getAuthors(); - - cmdFiller = new CommandFiller(); - cmdFiller.fillCommands(); - - SortingManager = new Sorting(); - - if (!dataFolder.isDirectory()) { - dataFolder.mkdirs(); - } - - if (!new File(dataFolder, "groups.yml").isFile() && !new File(dataFolder, "flags.yml").isFile() && new File(dataFolder, "config.yml").isFile()) { - this.ConvertFile(); - } - - if (!new File(dataFolder, "config.yml").isFile()) { - this.writeDefaultConfigFromJar(); - } - if (!new File(dataFolder, "flags.yml").isFile()) { - this.writeDefaultFlagsFromJar(); - } - if (!new File(dataFolder, "groups.yml").isFile()) { - this.writeDefaultGroupsFromJar(); - } - this.getCommand("res").setTabCompleter(new TabComplete()); - this.getCommand("resadmin").setTabCompleter(new TabComplete()); - this.getCommand("residence").setTabCompleter(new TabComplete()); - -// Residence.getConfigManager().UpdateConfigFile(); - -// if (this.getConfig().getInt("ResidenceVersion", 0) == 0) { -// this.writeDefaultConfigFromJar(); -// this.getConfig().load("config.yml"); -// System.out.println("[Residence] Config Invalid, wrote default..."); -// } - - cmanager = new ConfigManager(this); - String multiworld = cmanager.getMultiworldPlugin(); - if (multiworld != null) { - Plugin plugin = server.getPluginManager().getPlugin(multiworld); - if (plugin != null) { - if (!plugin.isEnabled()) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - Enabling multiworld plugin: " + multiworld); - server.getPluginManager().enablePlugin(plugin); - } - } - } - FlagUtilManager = new FlagUtil(this); - getFlagUtilManager().load(); - - try { - Class c = Class.forName("org.bukkit.entity.Player"); - for (Method one : c.getDeclaredMethods()) { - if (one.getName().equalsIgnoreCase("Spigot")) - spigotPlatform = true; - } - } catch (Exception e) { - } - - String packageName = getServer().getClass().getPackage().getName(); - String[] packageSplit = packageName.split("\\."); - String version = packageSplit[packageSplit.length - 1].substring(0, packageSplit[packageSplit.length - 1].length() - 3); - try { - Class nmsClass; - if (Residence.getConfigManager().CouldronCompatability()) - nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms.v1_7_Couldron"); - else - nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms." + version); - if (NMS.class.isAssignableFrom(nmsClass)) { - nms = (NMS) nmsClass.getConstructor().newInstance(); - } else { - System.out.println("Something went wrong, please note down version and contact author v:" + version); - this.setEnabled(false); - Bukkit.shutdown(); - } - } catch (SecurityException | NoSuchMethodException | InvocationTargetException | IllegalArgumentException | IllegalAccessException | InstantiationException - | ClassNotFoundException e) { - System.out.println("Your server version is not compatible with this plugins version! Plugin will be disabled: " + version + " and server will shutdown"); - this.setEnabled(false); - Bukkit.shutdown(); - return; - } - - ABManager = new ActionBar(); - version = packageSplit[packageSplit.length - 1]; - try { - Class nmsClass; - - nmsClass = Class.forName("com.bekvon.bukkit.residence.actionBarNMS." + version); - - if (ABInterface.class.isAssignableFrom(nmsClass)) { - ab = (ABInterface) nmsClass.getConstructor().newInstance(); - } else { - System.out.println("Something went wrong, please note down version and contact author v:" + version); - this.setEnabled(false); - Bukkit.shutdown(); - } - } catch (SecurityException | NoSuchMethodException | InvocationTargetException | IllegalArgumentException | IllegalAccessException | InstantiationException - | ClassNotFoundException e) { - ab = ABManager; - return; - } - - gmanager = new PermissionManager(); - imanager = new WorldItemManager(); - wmanager = new WorldFlagManager(); - - chatmanager = new ChatManager(); - rentmanager = new RentManager(); - - LocaleManager = new LocaleManager(this); - - PlayerManager = new PlayerManager(); - ShopSignUtilManager = new ShopSignUtil(this); - RandomTpManager = new RandomTp(this); - - InformationPagerManager = new InformationPager(this); - - zip = new ZipLibrary(); - - versionChecker = new VersionChecker(this); - - Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); - if (lwcp != null) - lwc = ((LWCPlugin) lwcp).getLWC(); - - for (String lang : validLanguages) { - YmlMaker langFile = new YmlMaker(this, "Language" + File.separator + lang + ".yml"); - if (langFile != null) { - langFile.saveDefaultConfig(); - } - } - - for (String lang : validLanguages) { - getLocaleManager().LoadLang(lang); - } - - Residence.getConfigManager().UpdateFlagFile(); - - try { - File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); - - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - - if (langFile.isFile()) { - FileConfiguration langconfig = new YamlConfiguration(); - langconfig.load(in); - helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Language file does not exist..."); - } - if (in != null) - in.close(); - } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Failed to load language file: " + cmanager.getLanguage() - + ".yml setting to default - English"); - - File langFile = new File(new File(dataFolder, "Language"), "English.yml"); - - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - - if (langFile.isFile()) { - FileConfiguration langconfig = new YamlConfiguration(); - langconfig.load(in); - helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Language file does not exist..."); - } - if (in != null) - in.close(); - } - economy = null; - if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Scanning for economy systems..."); - if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { - ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); - if (vault.economyOK()) { - economy = vault; - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault using economy system: " + vault.getEconomyName()); - } - } - if (economy == null) { - this.loadVaultEconomy(); - } - if (economy == null) { - this.loadBOSEconomy(); - } - if (economy == null) { - this.loadEssentialsEconomy(); - } - if (economy == null) { - this.loadRealEconomy(); - } - if (economy == null) { - this.loadIConomy(); - } - if (economy == null) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Unable to find an economy system..."); - } - } - - // Only fill if we need to convert player data - if (getConfigManager().isUUIDConvertion()) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loading (" + Bukkit.getOfflinePlayers().length + ") player data"); - for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { - if (player == null) - continue; - String name = player.getName(); - if (name == null) - continue; - getOfflinePlayerMap().put(name.toLowerCase(), player); - } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Player data loaded: " + getOfflinePlayerMap().size()); - } else { - Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { - @Override - public void run() { - for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { - if (player == null) - continue; - String name = player.getName(); - if (name == null) - continue; - getOfflinePlayerMap().put(name.toLowerCase(), player); - } - return; - } - }); - } - - if (rmanager == null) { - rmanager = new ResidenceManager(this); - } - if (leasemanager == null) { - leasemanager = new LeaseManager(rmanager); - } - if (tmanager == null) { - tmanager = new TransactionManager(); - } - if (pmanager == null) { - pmanager = new PermissionListManager(); - } - - try { - this.loadYml(); - } catch (Exception e) { - this.getLogger().log(Level.SEVERE, "Unable to load save file", e); - throw e; - } - - signmanager = new SignUtil(this); - Residence.getSignUtil().LoadSigns(); - - if (Residence.getConfigManager().isUseResidenceFileClean()) - FileCleanUp.cleanFiles(); - - if (firstenable) { - if (!this.isEnabled()) { - return; - } - FlagPermissions.initValidFlags(); - - setWorldEdit(); - setWorldGuard(); - - blistener = new ResidenceBlockListener(this); - plistener = new ResidencePlayerListener(this); - elistener = new ResidenceEntityListener(this); - flistener = new ResidenceFixesListener(); - - shlistener = new ShopListener(); - spigotlistener = new SpigotListener(); - - PluginManager pm = getServer().getPluginManager(); - pm.registerEvents(blistener, this); - pm.registerEvents(plistener, this); - pm.registerEvents(elistener, this); - pm.registerEvents(flistener, this); - pm.registerEvents(shlistener, this); - - // 1.8 event - if (getVersionChecker().GetVersion() >= 1800) - pm.registerEvents(new v1_8Events(), this); - - // 1.9 event - if (getVersionChecker().GetVersion() >= 1900) - pm.registerEvents(new v1_9Events(), this); - - // 1.10 event - if (getVersionChecker().GetVersion() >= 11000) - pm.registerEvents(new v1_10Events(), this); - - // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, - // Priority.NORMAL, this); - if (cmanager.enableSpout()) { - slistener = new ResidenceSpoutListener(); - pm.registerEvents(slistener, this); - spout = new ResidenceSpout(this); - } - firstenable = false; - } else { - plistener.reload(); - } - - NewLanguageManager = new Language(this); - getLM().LanguageReload(); - - AutoSelectionManager = new AutoSelection(); - - if (wep != null) - SchematicManager = new SchematicsManager(); - - try { - Class.forName("org.bukkit.event.player.PlayerItemDamageEvent"); - getServer().getPluginManager().registerEvents(spigotlistener, this); - } catch (Exception e) { - } - - if (getServer().getPluginManager().getPlugin("CrackShot") != null) - getServer().getPluginManager().registerEvents(new CrackShot(), this); - - // DynMap - Plugin dynmap = Bukkit.getPluginManager().getPlugin("dynmap"); - if (dynmap != null && getConfigManager().DynMapUse) { - DynManager = new DynMapManager(this); - getServer().getPluginManager().registerEvents(new DynMapListeners(), this); - getDynManager().api = (DynmapAPI) dynmap; - getDynManager().activate(); - } - - int autosaveInt = cmanager.getAutoSaveInterval(); - if (autosaveInt < 1) { - autosaveInt = 1; - } - autosaveInt = autosaveInt * 60 * 20; - autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); - healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, Residence.getConfigManager().getHealInterval() * 20); - feedBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doFeed, 20, Residence.getConfigManager().getFeedInterval() * 20); - if (Residence.getConfigManager().AutoMobRemoval()) - DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * Residence.getConfigManager().AutoMobRemovalInterval(), 20 - * Residence.getConfigManager().AutoMobRemovalInterval()); - - if (cmanager.useLeases()) { - int leaseInterval = cmanager.getLeaseCheckInterval(); - if (leaseInterval < 1) { - leaseInterval = 1; - } - leaseInterval = leaseInterval * 60 * 20; - leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval); - } - if (cmanager.enabledRentSystem()) { - int rentint = cmanager.getRentCheckInterval(); - if (rentint < 1) { - rentint = 1; - } - rentint = rentint * 60 * 20; - rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); - } - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - turnResAdminOn(player); - } - } - try { - Metrics metrics = new Metrics(this); - metrics.start(); - } catch (IOException e) { - // Failed to submit the stats :-( - } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Enabled! Version " + this.getDescription().getVersion() + " by Zrips"); - initsuccess = true; - - PlayerManager.fillList(); - - } catch (Exception ex) { - initsuccess = false; - getServer().getPluginManager().disablePlugin(this); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - FAILED INITIALIZATION! DISABLED! ERROR:"); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - Bukkit.getServer().shutdown(); - } - - getShopSignUtilManager().LoadShopVotes(); - getShopSignUtilManager().LoadSigns(); - getShopSignUtilManager().BoardUpdate(); - getVersionChecker().VersionCheck(null); - - } - - public static SignUtil getSignUtil() { - return signmanager; - } - - public void consoleMessage(String message) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " " + message); - } - - public static boolean validName(String name) { - if (name.contains(":") || name.contains(".") || name.contains("|")) { - return false; - } - if (cmanager.getResidenceNameRegex() == null) { - return true; - } - String namecheck = name.replaceAll(cmanager.getResidenceNameRegex(), ""); - if (!name.equals(namecheck)) { - return false; - } - return true; - } - - private void setWorldEdit() { - Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); - if (plugin != null) { - smanager = new WorldEditSelectionManager(server, this); - wep = (WorldEditPlugin) plugin; - wepid = Residence.wep.getConfig().getInt("wand-item"); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found WorldEdit"); - } else { - smanager = new SelectionManager(server, this); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " WorldEdit NOT found!"); - } - } - - private static void setWorldGuard() { - Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); - if (wgplugin != null) { - try { - Class.forName("com.sk89q.worldedit.BlockVector"); - Class.forName("com.sk89q.worldguard.bukkit.RegionContainer"); - Class.forName("com.sk89q.worldguard.protection.ApplicableRegionSet"); - Class.forName("com.sk89q.worldguard.protection.managers.RegionManager"); - Class.forName("com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion"); - Class.forName("com.sk89q.worldguard.protection.regions.ProtectedRegion"); - } catch (Exception e) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + ChatColor.RED - + " Found WorldGuard, but its not supported by Residence plugin. Please update WorldGuard to latest version"); - return; - } - wg = (WorldGuardPlugin) wgplugin; - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found WorldGuard"); - } - } - - public Residence getPlugin() { - return this; - } - - public static VersionChecker getVersionChecker() { - return versionChecker; - } - - public static LWC getLwc() { - return lwc; - } - - public static File getDataLocation() { - return dataFolder; - } - - public static ShopSignUtil getShopSignUtilManager() { - return ShopSignUtilManager; - } - - public static ResidenceSpout getSpout() { - return spout; - } - - public static ResidenceSpoutListener getSpoutListener() { - return slistener; - } - - public static CommandFiller getCommandFiller() { - if (cmdFiller == null) { - cmdFiller = new CommandFiller(); - cmdFiller.fillCommands(); - } - return cmdFiller; - } - - public static ResidenceManager getResidenceManager() { - return rmanager; - } - - public static SelectionManager getSelectionManager() { - return smanager; - } - - public static FlagUtil getFlagUtilManager() { - return FlagUtilManager; - } - - public static PermissionManager getPermissionManager() { - return gmanager; - } - - public static PermissionListManager getPermissionListManager() { - return pmanager; - } - - public static DynMapManager getDynManager() { - return DynManager; - } - - public static SchematicsManager getSchematicManager() { - return SchematicManager; - } - - public static AutoSelection getAutoSelectionManager() { - return AutoSelectionManager; - } - - public static Sorting getSortingManager() { - return SortingManager; - } - - public static RandomTp getRandomTpManager() { - return RandomTpManager; - } - - public static EconomyInterface getEconomyManager() { - return economy; - } - - public static Server getServ() { - return server; - } - - public static LeaseManager getLeaseManager() { - return leasemanager; - } - - public static PlayerManager getPlayerManager() { - return PlayerManager; - } - - public static HelpEntry getHelpPages() { - return helppages; - } - - public static void setConfigManager(ConfigManager cm) { - cmanager = cm; - } - - public static ConfigManager getConfigManager() { - return cmanager; - } - - public static TransactionManager getTransactionManager() { - return tmanager; - } - - public static WorldItemManager getItemManager() { - return imanager; - } - - public static WorldFlagManager getWorldFlags() { - return wmanager; - } - - public static RentManager getRentManager() { - return rentmanager; - } - - public static LocaleManager getLocaleManager() { - return LocaleManager; - } - - public static Language getLM() { - return NewLanguageManager; - } - - public static ResidencePlayerListener getPlayerListener() { - return plistener; - } - - public static ResidenceBlockListener getBlockListener() { - return blistener; - } - - public static ResidenceEntityListener getEntityListener() { - return elistener; - } - - public static ChatManager getChatManager() { - return chatmanager; - } - - public static WorldEditPlugin getWEplugin() { - return wep; - } - - public static String getResidenceVersion() { - return ResidenceVersion; - } - - public static List getAuthors() { - return authlist; - } - - public static FlagPermissions getPermsByLoc(Location loc) { - ClaimedResidence res = rmanager.getByLoc(loc); - if (res != null) { - return res.getPermissions(); - } - return wmanager.getPerms(loc.getWorld().getName()); - - } - - public static FlagPermissions getPermsByLocForPlayer(Location loc, Player player) { - ClaimedResidence res = rmanager.getByLoc(loc); - if (res != null) { - return res.getPermissions(); - } - if (player != null) - return wmanager.getPerms(player); - - return wmanager.getPerms(loc.getWorld().getName()); - } - - private void loadIConomy() { - Plugin p = getServer().getPluginManager().getPlugin("iConomy"); - if (p != null) { - if (p.getDescription().getVersion().startsWith("6")) { - economy = new IConomy6Adapter((com.iCo6.iConomy) p); - } else if (p.getDescription().getVersion().startsWith("5")) { - economy = new IConomy5Adapter(); - } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " UNKNOWN iConomy version!"); - return; - } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with iConomy! Version: " + p.getDescription().getVersion()); - } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " iConomy NOT found!"); - } - } - - private void loadBOSEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("BOSEconomy"); - if (p != null) { - economy = new BOSEAdapter((BOSEconomy) p); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with BOSEconomy!"); - } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " BOSEconomy NOT found!"); - } - } - - private void loadEssentialsEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("Essentials"); - if (p != null) { - economy = new EssentialsEcoAdapter((Essentials) p); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with Essentials Economy!"); - } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Essentials Economy NOT found!"); - } - } - - private void loadRealEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); - if (p != null) { - economy = new RealShopEconomy(new RealEconomy((RealPlugin) p)); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with RealShop Economy!"); - } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " RealShop Economy NOT found!"); - } - } - - private void loadVaultEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("Vault"); - if (p != null) { - ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); - if (vault.economyOK()) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault using economy: " + vault.getEconomyName()); - economy = vault; - } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault, but Vault reported no usable economy system..."); - } - } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Vault NOT found!"); - } - } - - public static boolean isResAdminOn(CommandSender sender) { - if (sender instanceof Player) - return isResAdminOn((Player) sender); - return true; - } - - public static boolean isResAdminOn(Player player) { - if (resadminToggle.contains(player.getName())) { - return true; - } - return false; - } - - public static void turnResAdminOn(Player player) { - resadminToggle.add(player.getName()); - } - - public static boolean isResAdminOn(String player) { - if (resadminToggle.contains(player)) - return true; - return false; - } - - private static void saveYml() throws IOException { - File saveFolder = new File(dataFolder, "Save"); - File worldFolder = new File(saveFolder, "Worlds"); - worldFolder.mkdirs(); - YMLSaveHelper yml; - Map save = rmanager.save(); - for (Entry entry : save.entrySet()) { - File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); - File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - World world = server.getWorld(entry.getKey()); - if (world != null) - yml.getRoot().put("Seed", world.getSeed()); - yml.getRoot().put("Residences", entry.getValue()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(worldFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - } - - // For Sale save - File ymlSaveLoc = new File(saveFolder, "forsale.yml"); - File tmpFile = new File(saveFolder, "tmp_forsale.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.save(); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("Economy", tmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "forsale.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // Leases save - ymlSaveLoc = new File(saveFolder, "leases.yml"); - tmpFile = new File(saveFolder, "tmp_leases.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("Leases", leasemanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "leases.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // permlist save - ymlSaveLoc = new File(saveFolder, "permlists.yml"); - tmpFile = new File(saveFolder, "tmp_permlists.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("PermissionLists", pmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "permlists.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // rent save - ymlSaveLoc = new File(saveFolder, "rent.yml"); - tmpFile = new File(saveFolder, "tmp_rent.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("RentSystem", rentmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "rent.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - if (cmanager.showIntervalMessages()) { - System.out.println("[Residence] - Saved Residences..."); - } - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - protected boolean loadYml() throws Exception { - File saveFolder = new File(dataFolder, "Save"); - try { - File worldFolder = new File(saveFolder, "Worlds"); - if (!saveFolder.isDirectory()) { - this.getLogger().warning("Save directory does not exist..."); - this.getLogger().warning("Please restart server"); - return true; - } - long time; - YMLSaveHelper yml; - File loadFile; - HashMap worlds = new HashMap<>(); - for (World world : getServ().getWorlds()) { - loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); - if (loadFile.isFile()) { - time = System.currentTimeMillis(); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loading save data for world " + world.getName() + "..."); - yml = new YMLSaveHelper(loadFile); - yml.load(); - - worlds.put(world.getName(), yml.getRoot().get("Residences")); - - int pass = (int) (System.currentTimeMillis() - time); - String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loaded " + world.getName() + " data. (" + PastTime + ")"); - } - } - - rmanager = getResidenceManager().load(worlds); - - // Getting shop residences - Map resList = rmanager.getResidences(); - for (Entry one : resList.entrySet()) { - addShops(one.getValue()); - } - - if (Residence.getConfigManager().isUUIDConvertion()) { - Residence.getConfigManager().ChangeConfig("Global.UUIDConvertion", false); - } - - loadFile = new File(saveFolder, "forsale.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - tmanager = new TransactionManager(); - tmanager.load((Map) yml.getRoot().get("Economy")); - } - loadFile = new File(saveFolder, "leases.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - leasemanager = LeaseManager.load((Map) yml.getRoot().get("Leases"), rmanager); - } - loadFile = new File(saveFolder, "permlists.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - pmanager = PermissionListManager.load((Map) yml.getRoot().get("PermissionLists")); - } - loadFile = new File(saveFolder, "rent.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); -// rentmanager = new RentManager(); - rentmanager.load((Map) yml.getRoot().get("RentSystem")); - } - - for (Player one : Bukkit.getOnlinePlayers()) { - ResidencePlayer rplayer = Residence.getPlayerManager().getResidencePlayer(one); - if (rplayer != null) - rplayer.recountRes(); - } - - // System.out.print("[Residence] Loaded..."); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - throw ex; - } - } - - private void addShops(ClaimedResidence res) { - ResidencePermissions perms = res.getPermissions(); - if (perms.has(Flags.shop, FlagCombo.OnlyTrue, false)) - rmanager.addShop(res); - for (ClaimedResidence one : res.getSubzones()) { - addShops(one); - } - } - - private void writeDefaultConfigFromJar() { - if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), "config.yml", true)) { - System.out.println("[Residence] Wrote default config..."); - } - } - - private void writeDefaultGroupsFromJar() { - if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "groups.yml"), "groups.yml", true)) { - System.out.println("[Residence] Wrote default groups..."); - } - } - - private void writeDefaultFlagsFromJar() { - if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "flags.yml"), "flags.yml", true)) { - System.out.println("[Residence] Wrote default flags..."); - } - } - - private void ConvertFile() { - File file = new File(this.getDataFolder(), "config.yml"); - - File file_old = new File(this.getDataFolder(), "config_old.yml"); - - File newfile = new File(this.getDataFolder(), "groups.yml"); - - File newTempFlags = new File(this.getDataFolder(), "flags.yml"); - - try { - copy(file, file_old); - } catch (IOException e1) { - e1.printStackTrace(); - } - - try { - copy(file, newfile); - } catch (IOException e1) { - e1.printStackTrace(); - } - - try { - copy(file, newTempFlags); - } catch (IOException e1) { - e1.printStackTrace(); - } - - File newGroups = new File(this.getDataFolder(), "config.yml"); - - List list = new ArrayList(); - list.add("ResidenceVersion"); - list.add("Global.Flags"); - list.add("Global.FlagPermission"); - list.add("Global.ResidenceDefault"); - list.add("Global.CreatorDefault"); - list.add("Global.GroupDefault"); - list.add("Groups"); - list.add("GroupAssignments"); - list.add("ItemList"); - - try { - remove(newGroups, list); - } catch (IOException e) { - e.printStackTrace(); - } - - File newConfig = new File(this.getDataFolder(), "groups.yml"); - list.clear(); - list = new ArrayList(); - list.add("ResidenceVersion"); - list.add("Global"); - list.add("ItemList"); - - try { - remove(newConfig, list); - } catch (IOException e) { - e.printStackTrace(); - } - - File newFlags = new File(this.getDataFolder(), "flags.yml"); - list.clear(); - list = new ArrayList(); - list.add("ResidenceVersion"); - list.add("GroupAssignments"); - list.add("Groups"); - list.add("Global.Language"); - list.add("Global.SelectionToolId"); - list.add("Global.InfoToolId"); - list.add("Global.MoveCheckInterval"); - list.add("Global.SaveInterval"); - list.add("Global.DefaultGroup"); - list.add("Global.UseLeaseSystem"); - list.add("Global.LeaseCheckInterval"); - list.add("Global.LeaseAutoRenew"); - list.add("Global.EnablePermissions"); - list.add("Global.LegacyPermissions"); - list.add("Global.EnableEconomy"); - list.add("Global.EnableRentSystem"); - list.add("Global.RentCheckInterval"); - list.add("Global.ResidenceChatEnable"); - list.add("Global.UseActionBar"); - list.add("Global.ResidenceChatColor"); - list.add("Global.AdminOnlyCommands"); - list.add("Global.AdminOPs"); - list.add("Global.MultiWorldPlugin"); - list.add("Global.ResidenceFlagsInherit"); - list.add("Global.PreventRentModify"); - list.add("Global.StopOnSaveFault"); - list.add("Global.ResidenceNameRegex"); - list.add("Global.ShowIntervalMessages"); - list.add("Global.VersionCheck"); - list.add("Global.CustomContainers"); - list.add("Global.CustomBothClick"); - list.add("Global.CustomRightClick"); - - try { - remove(newFlags, list); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private static void remove(File newGroups, List list) throws IOException { - - YamlConfiguration conf = YamlConfiguration.loadConfiguration(newGroups); - conf.options().copyDefaults(true); - - for (String one : list) { - conf.set(one, null); - } - try { - conf.save(newGroups); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private static void copy(File source, File target) throws IOException { - InputStream in = new FileInputStream(source); - OutputStream out = new FileOutputStream(target); - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - in.close(); - out.close(); - } - -// private void writeDefaultLanguageFile(String lang) { -// File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); -// outFile.getParentFile().mkdirs(); -// if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang + ".yml", true)) { -// System.out.println("[Residence] Wrote default " + lang + " Language file..."); -// } -// } -// -// private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException { -// File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); -// File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + ".yml"); -// if (outFile.isFile()) { -// FileConfiguration testconfig = new YamlConfiguration(); -// testconfig.load(outFile); -// int oldversion = testconfig.getInt("FieldsVersion", 0); -// if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false)) { -// return false; -// } -// FileConfiguration testconfig2 = new YamlConfiguration(); -// testconfig2.load(checkFile); -// int newversion = testconfig2.getInt("FieldsVersion", oldversion); -// if (checkFile.isFile()) { -// checkFile.delete(); -// } -// if (newversion > oldversion) { -// return true; -// } -// return false; -// } -// return true; -// } - - private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) { - try { - File fileBackup = new File(this.getDataFolder(), "backup-" + writeName); - File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile(); - if (jarloc.isFile()) { - JarFile jar = new JarFile(jarloc); - JarEntry entry = jar.getJarEntry(jarPath); - if (entry != null && !entry.isDirectory()) { - InputStream in = jar.getInputStream(entry); - InputStreamReader isr = new InputStreamReader(in, "UTF8"); - if (writeName.isFile()) { - if (backupOld) { - if (fileBackup.isFile()) { - fileBackup.delete(); - } - writeName.renameTo(fileBackup); - } else { - writeName.delete(); - } - } - FileOutputStream out = new FileOutputStream(writeName); - OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); - char[] tempbytes = new char[512]; - int readbytes = isr.read(tempbytes, 0, 512); - while (readbytes > -1) { - osw.write(tempbytes, 0, readbytes); - readbytes = isr.read(tempbytes, 0, 512); - } - osw.close(); - isr.close(); - return true; - } - jar.close(); - } - return false; - } catch (Exception ex) { - System.out.println("[Residence] Failed to write file: " + writeName); - return false; - } - } - - public static boolean isPlayerExist(CommandSender sender, String name, boolean inform) { - if (Residence.getPlayerUUID(name) != null) - return true; - if (inform) - sender.sendMessage(msg(lm.Invalid_Player)); - @SuppressWarnings("unused") - String a = "%%__USER__%%"; - @SuppressWarnings("unused") - String b = "%%__RESOURCE__%%"; - @SuppressWarnings("unused") - String c = "%%__NONCE__%%"; - return false; - - } - - public static UUID getPlayerUUID(String playername) { -// if (Residence.getConfigManager().isOfflineMode()) -// return null; - Player p = Residence.getServ().getPlayer(playername); - if (p == null) { - if (getOfflinePlayerMap().containsKey(playername.toLowerCase())) - return getOfflinePlayerMap().get(playername.toLowerCase()).getUniqueId(); - } else - return p.getUniqueId(); - return null; - } - - public static ConcurrentHashMap getOfflinePlayerMap() { - return OfflinePlayerList; - } - - @SuppressWarnings("deprecation") - public static OfflinePlayer getOfflinePlayer(String Name) { - if (getOfflinePlayerMap().containsKey(Name.toLowerCase())) { - return getOfflinePlayerMap().get(Name.toLowerCase()); - } - Player player = Bukkit.getPlayer(Name); - OfflinePlayer offPlayer = null; - if (player != null) - offPlayer = player; - if (offPlayer == null) - offPlayer = Bukkit.getOfflinePlayer(Name); - if (offPlayer != null) - getOfflinePlayerMap().put(Name.toLowerCase(), offPlayer); - return offPlayer; - } - - public static String getPlayerUUIDString(String playername) { - UUID playerUUID = Residence.getPlayerUUID(playername); - if (playerUUID != null) - return playerUUID.toString(); - return null; - } - - public static String getPlayerName(String uuid) { - try { - return Residence.getPlayerName(UUID.fromString(uuid)); - } catch (IllegalArgumentException ex) { - } - return null; - } - - public static String getServerLandname() { - return ServerLandname; - } - - public static String getServerLandUUID() { - return ServerLandUUID; - } - - public static String getTempUserUUID() { - return TempUserUUID; - } - - public static String getPlayerName(UUID uuid) { - OfflinePlayer p = Residence.getServ().getPlayer(uuid); - if (p == null) - p = Residence.getServ().getOfflinePlayer(uuid); - if (p != null) - return p.getName(); - return null; - } - - public static boolean isDisabledWorldListener(World world) { - return isDisabledWorldListener(world.getName()); - } - - public static boolean isDisabledWorldListener(String worldname) { - if (getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableListeners) - return true; - return false; - } - - public static boolean isDisabledWorldCommand(World world) { - return isDisabledWorldCommand(world.getName()); - } - - public static boolean isDisabledWorldCommand(String worldname) { - if (getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableCommands) - return true; - return false; - } - -// public static void msg(Player player, String path, Object... variables) { -// if (player != null) -// if (Residence.getLM().containsKey(path)) -// player.sendMessage(Residence.getLM().getMessage(path, variables)); -// else -// player.sendMessage(path); -// } - - public static String msg(String path) { - return Residence.getLM().getMessage(path); - } - - public static void msg(CommandSender sender, String text) { - if (sender != null && text.length() > 0) - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); - } - - public static void msg(Player player, String text) { - if (player != null && text.length() > 0) - player.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); - } - - public static void msg(CommandSender sender, lm lm, Object... variables) { - if (sender != null) - if (Residence.getLM().containsKey(lm.getPath())) { - String msg = Residence.getLM().getMessage(lm, variables); - if (msg.length() > 0) - sender.sendMessage(msg); - } else { - String msg = lm.getPath(); - if (msg.length() > 0) - sender.sendMessage(lm.getPath()); - } - } - - public static List msgL(lm lm) { - return Residence.getLM().getMessageList(lm); - } - - public static String msg(lm lm, Object... variables) { - return Residence.getLM().getMessage(lm, variables); - } - - public static InformationPager getInfoPageManager() { - return InformationPagerManager; - } -} +package com.bekvon.bukkit.residence; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Server; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; +import org.dynmap.DynmapAPI; + +import com.bekvon.bukkit.residence.chat.ChatManager; +import com.bekvon.bukkit.residence.containers.ABInterface; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.dynmap.DynMapListeners; +import com.bekvon.bukkit.residence.dynmap.DynMapManager; +import com.bekvon.bukkit.residence.economy.BOSEAdapter; +import com.bekvon.bukkit.residence.economy.EconomyInterface; +import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter; +import com.bekvon.bukkit.residence.economy.IConomy5Adapter; +import com.bekvon.bukkit.residence.economy.IConomy6Adapter; +import com.bekvon.bukkit.residence.economy.RealShopEconomy; +import com.bekvon.bukkit.residence.economy.TransactionManager; +import com.bekvon.bukkit.residence.economy.rent.RentManager; +import com.bekvon.bukkit.residence.gui.FlagUtil; +import com.bekvon.bukkit.residence.itemlist.WorldItemManager; +import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; +import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; +import com.bekvon.bukkit.residence.listeners.ResidenceFixesListener; +import com.bekvon.bukkit.residence.allNms.v1_10Events; +import com.bekvon.bukkit.residence.allNms.v1_8Events; +import com.bekvon.bukkit.residence.allNms.v1_9Events; +import com.bekvon.bukkit.residence.api.ChatInterface; +import com.bekvon.bukkit.residence.api.MarketBuyInterface; +import com.bekvon.bukkit.residence.api.MarketRentInterface; +import com.bekvon.bukkit.residence.api.ResidenceApi; +import com.bekvon.bukkit.residence.api.ResidenceInterface; +import com.bekvon.bukkit.residence.api.ResidencePlayerInterface; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; +import com.bekvon.bukkit.residence.listeners.SpigotListener; +import com.bekvon.bukkit.residence.permissions.PermissionManager; +import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.protection.LeaseManager; +import com.bekvon.bukkit.residence.protection.PermissionListManager; +import com.bekvon.bukkit.residence.protection.ResidenceManager; +import com.bekvon.bukkit.residence.protection.ResidencePermissions; +import com.bekvon.bukkit.residence.protection.PlayerManager; +import com.bekvon.bukkit.residence.protection.WorldFlagManager; +import com.bekvon.bukkit.residence.selection.AutoSelection; +import com.bekvon.bukkit.residence.selection.SchematicsManager; +import com.bekvon.bukkit.residence.selection.SelectionManager; +import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; +import com.bekvon.bukkit.residence.shopStuff.ShopListener; +import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; +import com.bekvon.bukkit.residence.signsStuff.SignUtil; +import com.bekvon.bukkit.residence.spout.ResidenceSpout; +import com.bekvon.bukkit.residence.spout.ResidenceSpoutListener; +import com.bekvon.bukkit.residence.text.Language; +import com.bekvon.bukkit.residence.text.help.HelpEntry; +import com.bekvon.bukkit.residence.utils.ActionBar; +import com.bekvon.bukkit.residence.utils.CrackShot; +import com.bekvon.bukkit.residence.utils.FileCleanUp; +import com.bekvon.bukkit.residence.utils.RandomTp; +import com.bekvon.bukkit.residence.utils.Sorting; +import com.bekvon.bukkit.residence.utils.TabComplete; +import com.bekvon.bukkit.residence.utils.VersionChecker; +import com.bekvon.bukkit.residence.utils.YmlMaker; +import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; +import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.earth2me.essentials.Essentials; +import com.griefcraft.lwc.LWC; +import com.griefcraft.lwc.LWCPlugin; +import com.residence.mcstats.Metrics; +import com.residence.zip.ZipLibrary; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; + +import cosine.boseconomy.BOSEconomy; +import fr.crafter.tickleman.realeconomy.RealEconomy; +import fr.crafter.tickleman.realplugin.RealPlugin; + +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +import org.bukkit.OfflinePlayer; + +/** + * + * @author Gary Smoak - bekvon + * + */ +public class Residence extends JavaPlugin { + + protected static String ResidenceVersion; + protected static List authlist; + protected static ResidenceManager rmanager; + protected static SelectionManager smanager; + public static PermissionManager gmanager; + protected static ConfigManager cmanager; + + protected static boolean spigotPlatform = false; + + protected static SignUtil signmanager; + + protected static ResidenceBlockListener blistener; + protected static ResidencePlayerListener plistener; + protected static ResidenceEntityListener elistener; + protected static ResidenceSpoutListener slistener; + protected static ResidenceSpout spout; + + protected static ResidenceFixesListener flistener; + + protected static SpigotListener spigotlistener; + protected static ShopListener shlistener; + protected static TransactionManager tmanager; + protected static PermissionListManager pmanager; + protected static LeaseManager leasemanager; + public static WorldItemManager imanager; + public static WorldFlagManager wmanager; + protected static RentManager rentmanager; + protected static ChatManager chatmanager; + protected static Server server; + public static HelpEntry helppages; + protected static LocaleManager LocaleManager; + protected static Language NewLanguageManager; + protected static PlayerManager PlayerManager; + protected static FlagUtil FlagUtilManager; + protected static ShopSignUtil ShopSignUtilManager; + protected static RandomTp RandomTpManager; + protected static DynMapManager DynManager; + protected static Sorting SortingManager; + protected static ActionBar ABManager; + protected static AutoSelection AutoSelectionManager; + protected static SchematicsManager SchematicManager; + private static InformationPager InformationPagerManager; + + protected static CommandFiller cmdFiller; + + protected static ZipLibrary zip; + + protected boolean firstenable = true; + protected static EconomyInterface economy; + private static int saveVersion = 1; + public static File dataFolder; + protected static int leaseBukkitId = -1; + protected static int rentBukkitId = -1; + protected static int healBukkitId = -1; + protected static int feedBukkitId = -1; + + protected static int DespawnMobsBukkitId = -1; + + protected static int autosaveBukkitId = -1; + protected static VersionChecker versionChecker; + protected static boolean initsuccess = false; + public static Map deleteConfirm; + public static Map UnrentConfirm = new HashMap(); + public static List resadminToggle; + private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW" }; + public static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); + public static WorldEditPlugin wep = null; + public static WorldGuardPlugin wg = null; + public static int wepid; + + private static String ServerLandname = "Server_Land"; + private static String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; + private static String TempUserUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"; + + private static ABInterface ab; + private static NMS nms; + static LWC lwc; + + public static HashMap rtMap = new HashMap(); + public static List teleportDelayMap = new ArrayList(); + public static HashMap teleportMap = new HashMap(); + + public static String prefix = ChatColor.GREEN + "[" + ChatColor.GOLD + "Residence" + ChatColor.GREEN + "]" + ChatColor.GRAY; + + public static boolean isSpigot() { + return spigotPlatform; + } + + public static HashMap getTeleportMap() { + return teleportMap; + } + + public static List getTeleportDelayMap() { + return teleportDelayMap; + } + + public static HashMap getRandomTeleportMap() { + return rtMap; + } + + // API + private static ResidenceApi API = new ResidenceApi(); + private static MarketBuyInterface MarketBuyAPI = null; + private static MarketRentInterface MarketRentAPI = null; + private static ResidencePlayerInterface PlayerAPI = null; + private static ResidenceInterface ResidenceAPI = null; + private static ChatInterface ChatAPI = null; + + public static ResidencePlayerInterface getPlayerManagerAPI() { + if (PlayerAPI == null) + PlayerAPI = PlayerManager; + return PlayerAPI; + } + + public static ResidenceInterface getResidenceManagerAPI() { + if (ResidenceAPI == null) + ResidenceAPI = rmanager; + return ResidenceAPI; + } + + public static MarketRentInterface getMarketRentManagerAPI() { + if (MarketRentAPI == null) + MarketRentAPI = rentmanager; + return MarketRentAPI; + } + + public static MarketBuyInterface getMarketBuyManagerAPI() { + if (MarketBuyAPI == null) + MarketBuyAPI = tmanager; + return MarketBuyAPI; + + } + + public static ChatInterface getResidenceChatAPI() { + if (ChatAPI == null) + ChatAPI = chatmanager; + return ChatAPI; + } + + public static ResidenceApi getAPI() { + return API; + } + // API end + + public static NMS getNms() { + return nms; + } + + public static ABInterface getAB() { + return ab; + } + + private Runnable doHeals = new Runnable() { + @Override + public void run() { + plistener.doHeals(); + } + }; + + private Runnable doFeed = new Runnable() { + @Override + public void run() { + plistener.feed(); + } + }; + + private Runnable DespawnMobs = new Runnable() { + @Override + public void run() { + plistener.DespawnMobs(); + } + }; + + private Runnable rentExpire = new Runnable() { + @Override + public void run() { + rentmanager.checkCurrentRents(); + if (cmanager.showIntervalMessages()) { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - Rent Expirations checked!"); + } + } + }; + private Runnable leaseExpire = new Runnable() { + @Override + public void run() { + leasemanager.doExpirations(); + if (cmanager.showIntervalMessages()) { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - Lease Expirations checked!"); + } + } + }; + private Runnable autoSave = new Runnable() { + @Override + public void run() { + try { + if (initsuccess) { + Bukkit.getScheduler().runTaskAsynchronously(Residence.this, new Runnable() { + @Override + public void run() { + try { + saveYml(); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + }); + } + } catch (Exception ex) { + Logger.getLogger("Minecraft").log(Level.SEVERE, Residence.prefix + " SEVERE SAVE ERROR", ex); + } + } + }; + + public void reloadPlugin() { + this.onDisable(); + this.reloadConfig(); + this.onEnable(); + } + + @Override + public void onDisable() { + server.getScheduler().cancelTask(autosaveBukkitId); + server.getScheduler().cancelTask(healBukkitId); + server.getScheduler().cancelTask(feedBukkitId); + + server.getScheduler().cancelTask(DespawnMobsBukkitId); + + if (cmanager.useLeases()) { + server.getScheduler().cancelTask(leaseBukkitId); + } + if (cmanager.enabledRentSystem()) { + server.getScheduler().cancelTask(rentBukkitId); + } + + if (getDynManager() != null) + getDynManager().getMarkerSet().deleteMarkerSet(); + + if (initsuccess) { + try { + saveYml(); + if (zip != null) + zip.backup(); + } catch (Exception ex) { + Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); + } + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Disabled!"); + } + } + + @Override + public void onEnable() { + try { + initsuccess = false; + deleteConfirm = new HashMap(); + resadminToggle = new ArrayList(); + server = this.getServer(); + dataFolder = this.getDataFolder(); + + ResidenceVersion = this.getDescription().getVersion(); + authlist = this.getDescription().getAuthors(); + + cmdFiller = new CommandFiller(); + cmdFiller.fillCommands(); + + SortingManager = new Sorting(); + + if (!dataFolder.isDirectory()) { + dataFolder.mkdirs(); + } + + if (!new File(dataFolder, "groups.yml").isFile() && !new File(dataFolder, "flags.yml").isFile() && new File(dataFolder, "config.yml").isFile()) { + this.ConvertFile(); + } + + if (!new File(dataFolder, "config.yml").isFile()) { + this.writeDefaultConfigFromJar(); + } + if (!new File(dataFolder, "flags.yml").isFile()) { + this.writeDefaultFlagsFromJar(); + } + if (!new File(dataFolder, "groups.yml").isFile()) { + this.writeDefaultGroupsFromJar(); + } + this.getCommand("res").setTabCompleter(new TabComplete()); + this.getCommand("resadmin").setTabCompleter(new TabComplete()); + this.getCommand("residence").setTabCompleter(new TabComplete()); + +// Residence.getConfigManager().UpdateConfigFile(); + +// if (this.getConfig().getInt("ResidenceVersion", 0) == 0) { +// this.writeDefaultConfigFromJar(); +// this.getConfig().load("config.yml"); +// System.out.println("[Residence] Config Invalid, wrote default..."); +// } + + cmanager = new ConfigManager(this); + String multiworld = cmanager.getMultiworldPlugin(); + if (multiworld != null) { + Plugin plugin = server.getPluginManager().getPlugin(multiworld); + if (plugin != null) { + if (!plugin.isEnabled()) { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - Enabling multiworld plugin: " + multiworld); + server.getPluginManager().enablePlugin(plugin); + } + } + } + FlagUtilManager = new FlagUtil(this); + getFlagUtilManager().load(); + + try { + Class c = Class.forName("org.bukkit.entity.Player"); + for (Method one : c.getDeclaredMethods()) { + if (one.getName().equalsIgnoreCase("Spigot")) + spigotPlatform = true; + } + } catch (Exception e) { + } + + String packageName = getServer().getClass().getPackage().getName(); + String[] packageSplit = packageName.split("\\."); + String version = packageSplit[packageSplit.length - 1].substring(0, packageSplit[packageSplit.length - 1].length() - 3); + try { + Class nmsClass; + if (Residence.getConfigManager().CouldronCompatability()) + nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms.v1_7_Couldron"); + else + nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms." + version); + if (NMS.class.isAssignableFrom(nmsClass)) { + nms = (NMS) nmsClass.getConstructor().newInstance(); + } else { + System.out.println("Something went wrong, please note down version and contact author v:" + version); + this.setEnabled(false); + Bukkit.shutdown(); + } + } catch (SecurityException | NoSuchMethodException | InvocationTargetException | IllegalArgumentException | IllegalAccessException | InstantiationException + | ClassNotFoundException e) { + System.out.println("Your server version is not compatible with this plugins version! Plugin will be disabled: " + version + " and server will shutdown"); + this.setEnabled(false); + Bukkit.shutdown(); + return; + } + + ABManager = new ActionBar(); + version = packageSplit[packageSplit.length - 1]; + try { + Class nmsClass; + + nmsClass = Class.forName("com.bekvon.bukkit.residence.actionBarNMS." + version); + + if (ABInterface.class.isAssignableFrom(nmsClass)) { + ab = (ABInterface) nmsClass.getConstructor().newInstance(); + } else { + System.out.println("Something went wrong, please note down version and contact author v:" + version); + this.setEnabled(false); + Bukkit.shutdown(); + } + } catch (SecurityException | NoSuchMethodException | InvocationTargetException | IllegalArgumentException | IllegalAccessException | InstantiationException + | ClassNotFoundException e) { + ab = ABManager; + return; + } + + gmanager = new PermissionManager(); + imanager = new WorldItemManager(); + wmanager = new WorldFlagManager(); + + chatmanager = new ChatManager(); + rentmanager = new RentManager(); + + LocaleManager = new LocaleManager(this); + + PlayerManager = new PlayerManager(); + ShopSignUtilManager = new ShopSignUtil(this); + RandomTpManager = new RandomTp(this); + + InformationPagerManager = new InformationPager(this); + + zip = new ZipLibrary(); + + versionChecker = new VersionChecker(this); + + Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); + if (lwcp != null) + lwc = ((LWCPlugin) lwcp).getLWC(); + + for (String lang : validLanguages) { + YmlMaker langFile = new YmlMaker(this, "Language" + File.separator + lang + ".yml"); + langFile.saveDefaultConfig(); + } + + for (String lang : validLanguages) { + getLocaleManager().LoadLang(lang); + } + + Residence.getConfigManager().UpdateFlagFile(); + + try { + File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + if (langFile.isFile()) { + FileConfiguration langconfig = new YamlConfiguration(); + langconfig.load(in); + helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); + } else { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Language file does not exist..."); + } + if (in != null) + in.close(); + } catch (Exception ex) { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Failed to load language file: " + cmanager.getLanguage() + + ".yml setting to default - English"); + + File langFile = new File(new File(dataFolder, "Language"), "English.yml"); + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + if (langFile.isFile()) { + FileConfiguration langconfig = new YamlConfiguration(); + langconfig.load(in); + helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); + } else { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Language file does not exist..."); + } + if (in != null) + in.close(); + } + economy = null; + if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Scanning for economy systems..."); + if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { + ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); + if (vault.economyOK()) { + economy = vault; + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault using economy system: " + vault.getEconomyName()); + } + } + if (economy == null) { + this.loadVaultEconomy(); + } + if (economy == null) { + this.loadBOSEconomy(); + } + if (economy == null) { + this.loadEssentialsEconomy(); + } + if (economy == null) { + this.loadRealEconomy(); + } + if (economy == null) { + this.loadIConomy(); + } + if (economy == null) { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Unable to find an economy system..."); + } + } + + // Only fill if we need to convert player data + if (getConfigManager().isUUIDConvertion()) { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loading (" + Bukkit.getOfflinePlayers().length + ") player data"); + for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { + if (player == null) + continue; + String name = player.getName(); + if (name == null) + continue; + getOfflinePlayerMap().put(name.toLowerCase(), player); + } + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Player data loaded: " + getOfflinePlayerMap().size()); + } else { + Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { + @Override + public void run() { + for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { + if (player == null) + continue; + String name = player.getName(); + if (name == null) + continue; + getOfflinePlayerMap().put(name.toLowerCase(), player); + } + return; + } + }); + } + + if (rmanager == null) { + rmanager = new ResidenceManager(this); + } + if (leasemanager == null) { + leasemanager = new LeaseManager(rmanager); + } + if (tmanager == null) { + tmanager = new TransactionManager(); + } + if (pmanager == null) { + pmanager = new PermissionListManager(); + } + + try { + this.loadYml(); + } catch (Exception e) { + this.getLogger().log(Level.SEVERE, "Unable to load save file", e); + throw e; + } + + signmanager = new SignUtil(this); + Residence.getSignUtil().LoadSigns(); + + if (Residence.getConfigManager().isUseResidenceFileClean()) + FileCleanUp.cleanFiles(); + + if (firstenable) { + if (!this.isEnabled()) { + return; + } + FlagPermissions.initValidFlags(); + + setWorldEdit(); + setWorldGuard(); + + blistener = new ResidenceBlockListener(this); + plistener = new ResidencePlayerListener(this); + elistener = new ResidenceEntityListener(this); + flistener = new ResidenceFixesListener(); + + shlistener = new ShopListener(); + spigotlistener = new SpigotListener(); + + PluginManager pm = getServer().getPluginManager(); + pm.registerEvents(blistener, this); + pm.registerEvents(plistener, this); + pm.registerEvents(elistener, this); + pm.registerEvents(flistener, this); + pm.registerEvents(shlistener, this); + + // 1.8 event + if (getVersionChecker().GetVersion() >= 1800) + pm.registerEvents(new v1_8Events(), this); + + // 1.9 event + if (getVersionChecker().GetVersion() >= 1900) + pm.registerEvents(new v1_9Events(), this); + + // 1.10 event + if (getVersionChecker().GetVersion() >= 11000) + pm.registerEvents(new v1_10Events(), this); + + // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, + // Priority.NORMAL, this); + if (cmanager.enableSpout()) { + slistener = new ResidenceSpoutListener(); + pm.registerEvents(slistener, this); + spout = new ResidenceSpout(this); + } + firstenable = false; + } else { + plistener.reload(); + } + + NewLanguageManager = new Language(this); + getLM().LanguageReload(); + + AutoSelectionManager = new AutoSelection(); + + if (wep != null) + SchematicManager = new SchematicsManager(); + + try { + Class.forName("org.bukkit.event.player.PlayerItemDamageEvent"); + getServer().getPluginManager().registerEvents(spigotlistener, this); + } catch (Exception e) { + } + + if (getServer().getPluginManager().getPlugin("CrackShot") != null) + getServer().getPluginManager().registerEvents(new CrackShot(), this); + + // DynMap + Plugin dynmap = Bukkit.getPluginManager().getPlugin("dynmap"); + if (dynmap != null && getConfigManager().DynMapUse) { + DynManager = new DynMapManager(this); + getServer().getPluginManager().registerEvents(new DynMapListeners(), this); + getDynManager().api = (DynmapAPI) dynmap; + getDynManager().activate(); + } + + int autosaveInt = cmanager.getAutoSaveInterval(); + if (autosaveInt < 1) { + autosaveInt = 1; + } + autosaveInt = autosaveInt * 60 * 20; + autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); + healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, Residence.getConfigManager().getHealInterval() * 20); + feedBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doFeed, 20, Residence.getConfigManager().getFeedInterval() * 20); + if (Residence.getConfigManager().AutoMobRemoval()) + DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * Residence.getConfigManager().AutoMobRemovalInterval(), 20 + * Residence.getConfigManager().AutoMobRemovalInterval()); + + if (cmanager.useLeases()) { + int leaseInterval = cmanager.getLeaseCheckInterval(); + if (leaseInterval < 1) { + leaseInterval = 1; + } + leaseInterval = leaseInterval * 60 * 20; + leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval); + } + if (cmanager.enabledRentSystem()) { + int rentint = cmanager.getRentCheckInterval(); + if (rentint < 1) { + rentint = 1; + } + rentint = rentint * 60 * 20; + rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); + } + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + turnResAdminOn(player); + } + } + try { + Metrics metrics = new Metrics(this); + metrics.start(); + } catch (IOException e) { + // Failed to submit the stats :-( + } + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Enabled! Version " + this.getDescription().getVersion() + " by Zrips"); + initsuccess = true; + + PlayerManager.fillList(); + + } catch (Exception ex) { + initsuccess = false; + getServer().getPluginManager().disablePlugin(this); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - FAILED INITIALIZATION! DISABLED! ERROR:"); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + Bukkit.getServer().shutdown(); + } + + getShopSignUtilManager().LoadShopVotes(); + getShopSignUtilManager().LoadSigns(); + getShopSignUtilManager().BoardUpdate(); + getVersionChecker().VersionCheck(null); + + } + + public static SignUtil getSignUtil() { + return signmanager; + } + + public void consoleMessage(String message) { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " " + message); + } + + public static boolean validName(String name) { + if (name.contains(":") || name.contains(".") || name.contains("|")) { + return false; + } + if (cmanager.getResidenceNameRegex() == null) { + return true; + } + String namecheck = name.replaceAll(cmanager.getResidenceNameRegex(), ""); + if (!name.equals(namecheck)) { + return false; + } + return true; + } + + private void setWorldEdit() { + Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); + if (plugin != null) { + smanager = new WorldEditSelectionManager(server, this); + wep = (WorldEditPlugin) plugin; + wepid = Residence.wep.getConfig().getInt("wand-item"); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found WorldEdit"); + } else { + smanager = new SelectionManager(server, this); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " WorldEdit NOT found!"); + } + } + + private static void setWorldGuard() { + Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); + if (wgplugin != null) { + try { + Class.forName("com.sk89q.worldedit.BlockVector"); + Class.forName("com.sk89q.worldguard.bukkit.RegionContainer"); + Class.forName("com.sk89q.worldguard.protection.ApplicableRegionSet"); + Class.forName("com.sk89q.worldguard.protection.managers.RegionManager"); + Class.forName("com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion"); + Class.forName("com.sk89q.worldguard.protection.regions.ProtectedRegion"); + } catch (Exception e) { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + ChatColor.RED + + " Found WorldGuard, but its not supported by Residence plugin. Please update WorldGuard to latest version"); + return; + } + wg = (WorldGuardPlugin) wgplugin; + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found WorldGuard"); + } + } + + public Residence getPlugin() { + return this; + } + + public static VersionChecker getVersionChecker() { + return versionChecker; + } + + public static LWC getLwc() { + return lwc; + } + + public static File getDataLocation() { + return dataFolder; + } + + public static ShopSignUtil getShopSignUtilManager() { + return ShopSignUtilManager; + } + + public static ResidenceSpout getSpout() { + return spout; + } + + public static ResidenceSpoutListener getSpoutListener() { + return slistener; + } + + public static CommandFiller getCommandFiller() { + if (cmdFiller == null) { + cmdFiller = new CommandFiller(); + cmdFiller.fillCommands(); + } + return cmdFiller; + } + + public static ResidenceManager getResidenceManager() { + return rmanager; + } + + public static SelectionManager getSelectionManager() { + return smanager; + } + + public static FlagUtil getFlagUtilManager() { + return FlagUtilManager; + } + + public static PermissionManager getPermissionManager() { + return gmanager; + } + + public static PermissionListManager getPermissionListManager() { + return pmanager; + } + + public static DynMapManager getDynManager() { + return DynManager; + } + + public static SchematicsManager getSchematicManager() { + return SchematicManager; + } + + public static AutoSelection getAutoSelectionManager() { + return AutoSelectionManager; + } + + public static Sorting getSortingManager() { + return SortingManager; + } + + public static RandomTp getRandomTpManager() { + return RandomTpManager; + } + + public static EconomyInterface getEconomyManager() { + return economy; + } + + public static Server getServ() { + return server; + } + + public static LeaseManager getLeaseManager() { + return leasemanager; + } + + public static PlayerManager getPlayerManager() { + return PlayerManager; + } + + public static HelpEntry getHelpPages() { + return helppages; + } + + public static void setConfigManager(ConfigManager cm) { + cmanager = cm; + } + + public static ConfigManager getConfigManager() { + return cmanager; + } + + public static TransactionManager getTransactionManager() { + return tmanager; + } + + public static WorldItemManager getItemManager() { + return imanager; + } + + public static WorldFlagManager getWorldFlags() { + return wmanager; + } + + public static RentManager getRentManager() { + return rentmanager; + } + + public static LocaleManager getLocaleManager() { + return LocaleManager; + } + + public static Language getLM() { + return NewLanguageManager; + } + + public static ResidencePlayerListener getPlayerListener() { + return plistener; + } + + public static ResidenceBlockListener getBlockListener() { + return blistener; + } + + public static ResidenceEntityListener getEntityListener() { + return elistener; + } + + public static ChatManager getChatManager() { + return chatmanager; + } + + public static WorldEditPlugin getWEplugin() { + return wep; + } + + public static String getResidenceVersion() { + return ResidenceVersion; + } + + public static List getAuthors() { + return authlist; + } + + public static FlagPermissions getPermsByLoc(Location loc) { + ClaimedResidence res = rmanager.getByLoc(loc); + if (res != null) { + return res.getPermissions(); + } + return wmanager.getPerms(loc.getWorld().getName()); + + } + + public static FlagPermissions getPermsByLocForPlayer(Location loc, Player player) { + ClaimedResidence res = rmanager.getByLoc(loc); + if (res != null) { + return res.getPermissions(); + } + if (player != null) + return wmanager.getPerms(player); + + return wmanager.getPerms(loc.getWorld().getName()); + } + + private void loadIConomy() { + Plugin p = getServer().getPluginManager().getPlugin("iConomy"); + if (p != null) { + if (p.getDescription().getVersion().startsWith("6")) { + economy = new IConomy6Adapter((com.iCo6.iConomy) p); + } else if (p.getDescription().getVersion().startsWith("5")) { + economy = new IConomy5Adapter(); + } else { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " UNKNOWN iConomy version!"); + return; + } + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with iConomy! Version: " + p.getDescription().getVersion()); + } else { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " iConomy NOT found!"); + } + } + + private void loadBOSEconomy() { + Plugin p = getServer().getPluginManager().getPlugin("BOSEconomy"); + if (p != null) { + economy = new BOSEAdapter((BOSEconomy) p); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with BOSEconomy!"); + } else { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " BOSEconomy NOT found!"); + } + } + + private void loadEssentialsEconomy() { + Plugin p = getServer().getPluginManager().getPlugin("Essentials"); + if (p != null) { + economy = new EssentialsEcoAdapter((Essentials) p); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with Essentials Economy!"); + } else { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Essentials Economy NOT found!"); + } + } + + private void loadRealEconomy() { + Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); + if (p != null) { + economy = new RealShopEconomy(new RealEconomy((RealPlugin) p)); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with RealShop Economy!"); + } else { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " RealShop Economy NOT found!"); + } + } + + private void loadVaultEconomy() { + Plugin p = getServer().getPluginManager().getPlugin("Vault"); + if (p != null) { + ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); + if (vault.economyOK()) { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault using economy: " + vault.getEconomyName()); + economy = vault; + } else { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault, but Vault reported no usable economy system..."); + } + } else { + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Vault NOT found!"); + } + } + + public static boolean isResAdminOn(CommandSender sender) { + if (sender instanceof Player) + return isResAdminOn((Player) sender); + return true; + } + + public static boolean isResAdminOn(Player player) { + if (resadminToggle.contains(player.getName())) { + return true; + } + return false; + } + + public static void turnResAdminOn(Player player) { + resadminToggle.add(player.getName()); + } + + public static boolean isResAdminOn(String player) { + if (resadminToggle.contains(player)) + return true; + return false; + } + + private static void saveYml() throws IOException { + File saveFolder = new File(dataFolder, "Save"); + File worldFolder = new File(saveFolder, "Worlds"); + worldFolder.mkdirs(); + YMLSaveHelper yml; + Map save = rmanager.save(); + for (Entry entry : save.entrySet()) { + File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); + File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + World world = server.getWorld(entry.getKey()); + if (world != null) + yml.getRoot().put("Seed", world.getSeed()); + yml.getRoot().put("Residences", entry.getValue()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(worldFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + } + + // For Sale save + File ymlSaveLoc = new File(saveFolder, "forsale.yml"); + File tmpFile = new File(saveFolder, "tmp_forsale.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.save(); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("Economy", tmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "forsale.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // Leases save + ymlSaveLoc = new File(saveFolder, "leases.yml"); + tmpFile = new File(saveFolder, "tmp_leases.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("Leases", leasemanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "leases.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // permlist save + ymlSaveLoc = new File(saveFolder, "permlists.yml"); + tmpFile = new File(saveFolder, "tmp_permlists.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("PermissionLists", pmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "permlists.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // rent save + ymlSaveLoc = new File(saveFolder, "rent.yml"); + tmpFile = new File(saveFolder, "tmp_rent.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("RentSystem", rentmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "rent.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + if (cmanager.showIntervalMessages()) { + System.out.println("[Residence] - Saved Residences..."); + } + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + protected boolean loadYml() throws Exception { + File saveFolder = new File(dataFolder, "Save"); + try { + File worldFolder = new File(saveFolder, "Worlds"); + if (!saveFolder.isDirectory()) { + this.getLogger().warning("Save directory does not exist..."); + this.getLogger().warning("Please restart server"); + return true; + } + long time; + YMLSaveHelper yml; + File loadFile; + HashMap worlds = new HashMap<>(); + for (World world : getServ().getWorlds()) { + loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); + if (loadFile.isFile()) { + time = System.currentTimeMillis(); + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loading save data for world " + world.getName() + "..."); + yml = new YMLSaveHelper(loadFile); + yml.load(); + + worlds.put(world.getName(), yml.getRoot().get("Residences")); + + int pass = (int) (System.currentTimeMillis() - time); + String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; + + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loaded " + world.getName() + " data. (" + PastTime + ")"); + } + } + + rmanager = getResidenceManager().load(worlds); + + // Getting shop residences + Map resList = rmanager.getResidences(); + for (Entry one : resList.entrySet()) { + addShops(one.getValue()); + } + + if (Residence.getConfigManager().isUUIDConvertion()) { + Residence.getConfigManager().ChangeConfig("Global.UUIDConvertion", false); + } + + loadFile = new File(saveFolder, "forsale.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + tmanager = new TransactionManager(); + tmanager.load((Map) yml.getRoot().get("Economy")); + } + loadFile = new File(saveFolder, "leases.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + leasemanager = LeaseManager.load((Map) yml.getRoot().get("Leases"), rmanager); + } + loadFile = new File(saveFolder, "permlists.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + pmanager = PermissionListManager.load((Map) yml.getRoot().get("PermissionLists")); + } + loadFile = new File(saveFolder, "rent.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); +// rentmanager = new RentManager(); + rentmanager.load((Map) yml.getRoot().get("RentSystem")); + } + + for (Player one : Bukkit.getOnlinePlayers()) { + ResidencePlayer rplayer = Residence.getPlayerManager().getResidencePlayer(one); + if (rplayer != null) + rplayer.recountRes(); + } + + // System.out.print("[Residence] Loaded..."); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + throw ex; + } + } + + private void addShops(ClaimedResidence res) { + ResidencePermissions perms = res.getPermissions(); + if (perms.has(Flags.shop, FlagCombo.OnlyTrue, false)) + rmanager.addShop(res); + for (ClaimedResidence one : res.getSubzones()) { + addShops(one); + } + } + + private void writeDefaultConfigFromJar() { + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), "config.yml", true)) { + System.out.println("[Residence] Wrote default config..."); + } + } + + private void writeDefaultGroupsFromJar() { + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "groups.yml"), "groups.yml", true)) { + System.out.println("[Residence] Wrote default groups..."); + } + } + + private void writeDefaultFlagsFromJar() { + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "flags.yml"), "flags.yml", true)) { + System.out.println("[Residence] Wrote default flags..."); + } + } + + private void ConvertFile() { + File file = new File(this.getDataFolder(), "config.yml"); + + File file_old = new File(this.getDataFolder(), "config_old.yml"); + + File newfile = new File(this.getDataFolder(), "groups.yml"); + + File newTempFlags = new File(this.getDataFolder(), "flags.yml"); + + try { + copy(file, file_old); + } catch (IOException e1) { + e1.printStackTrace(); + } + + try { + copy(file, newfile); + } catch (IOException e1) { + e1.printStackTrace(); + } + + try { + copy(file, newTempFlags); + } catch (IOException e1) { + e1.printStackTrace(); + } + + File newGroups = new File(this.getDataFolder(), "config.yml"); + + List list = new ArrayList(); + list.add("ResidenceVersion"); + list.add("Global.Flags"); + list.add("Global.FlagPermission"); + list.add("Global.ResidenceDefault"); + list.add("Global.CreatorDefault"); + list.add("Global.GroupDefault"); + list.add("Groups"); + list.add("GroupAssignments"); + list.add("ItemList"); + + try { + remove(newGroups, list); + } catch (IOException e) { + e.printStackTrace(); + } + + File newConfig = new File(this.getDataFolder(), "groups.yml"); + list.clear(); + list = new ArrayList(); + list.add("ResidenceVersion"); + list.add("Global"); + list.add("ItemList"); + + try { + remove(newConfig, list); + } catch (IOException e) { + e.printStackTrace(); + } + + File newFlags = new File(this.getDataFolder(), "flags.yml"); + list.clear(); + list = new ArrayList(); + list.add("ResidenceVersion"); + list.add("GroupAssignments"); + list.add("Groups"); + list.add("Global.Language"); + list.add("Global.SelectionToolId"); + list.add("Global.InfoToolId"); + list.add("Global.MoveCheckInterval"); + list.add("Global.SaveInterval"); + list.add("Global.DefaultGroup"); + list.add("Global.UseLeaseSystem"); + list.add("Global.LeaseCheckInterval"); + list.add("Global.LeaseAutoRenew"); + list.add("Global.EnablePermissions"); + list.add("Global.LegacyPermissions"); + list.add("Global.EnableEconomy"); + list.add("Global.EnableRentSystem"); + list.add("Global.RentCheckInterval"); + list.add("Global.ResidenceChatEnable"); + list.add("Global.UseActionBar"); + list.add("Global.ResidenceChatColor"); + list.add("Global.AdminOnlyCommands"); + list.add("Global.AdminOPs"); + list.add("Global.MultiWorldPlugin"); + list.add("Global.ResidenceFlagsInherit"); + list.add("Global.PreventRentModify"); + list.add("Global.StopOnSaveFault"); + list.add("Global.ResidenceNameRegex"); + list.add("Global.ShowIntervalMessages"); + list.add("Global.VersionCheck"); + list.add("Global.CustomContainers"); + list.add("Global.CustomBothClick"); + list.add("Global.CustomRightClick"); + + try { + remove(newFlags, list); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static void remove(File newGroups, List list) throws IOException { + + YamlConfiguration conf = YamlConfiguration.loadConfiguration(newGroups); + conf.options().copyDefaults(true); + + for (String one : list) { + conf.set(one, null); + } + try { + conf.save(newGroups); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static void copy(File source, File target) throws IOException { + InputStream in = new FileInputStream(source); + OutputStream out = new FileOutputStream(target); + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + in.close(); + out.close(); + } + +// private void writeDefaultLanguageFile(String lang) { +// File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); +// outFile.getParentFile().mkdirs(); +// if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang + ".yml", true)) { +// System.out.println("[Residence] Wrote default " + lang + " Language file..."); +// } +// } +// +// private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException { +// File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml"); +// File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + ".yml"); +// if (outFile.isFile()) { +// FileConfiguration testconfig = new YamlConfiguration(); +// testconfig.load(outFile); +// int oldversion = testconfig.getInt("FieldsVersion", 0); +// if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false)) { +// return false; +// } +// FileConfiguration testconfig2 = new YamlConfiguration(); +// testconfig2.load(checkFile); +// int newversion = testconfig2.getInt("FieldsVersion", oldversion); +// if (checkFile.isFile()) { +// checkFile.delete(); +// } +// if (newversion > oldversion) { +// return true; +// } +// return false; +// } +// return true; +// } + + private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) { + try { + File fileBackup = new File(this.getDataFolder(), "backup-" + writeName); + File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile(); + if (jarloc.isFile()) { + JarFile jar = new JarFile(jarloc); + JarEntry entry = jar.getJarEntry(jarPath); + if (entry != null && !entry.isDirectory()) { + InputStream in = jar.getInputStream(entry); + InputStreamReader isr = new InputStreamReader(in, "UTF8"); + if (writeName.isFile()) { + if (backupOld) { + if (fileBackup.isFile()) { + fileBackup.delete(); + } + writeName.renameTo(fileBackup); + } else { + writeName.delete(); + } + } + FileOutputStream out = new FileOutputStream(writeName); + OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); + char[] tempbytes = new char[512]; + int readbytes = isr.read(tempbytes, 0, 512); + while (readbytes > -1) { + osw.write(tempbytes, 0, readbytes); + readbytes = isr.read(tempbytes, 0, 512); + } + osw.close(); + isr.close(); + return true; + } + jar.close(); + } + return false; + } catch (Exception ex) { + System.out.println("[Residence] Failed to write file: " + writeName); + return false; + } + } + + public static boolean isPlayerExist(CommandSender sender, String name, boolean inform) { + if (Residence.getPlayerUUID(name) != null) + return true; + if (inform) + sender.sendMessage(msg(lm.Invalid_Player)); + @SuppressWarnings("unused") + String a = "%%__USER__%%"; + @SuppressWarnings("unused") + String b = "%%__RESOURCE__%%"; + @SuppressWarnings("unused") + String c = "%%__NONCE__%%"; + return false; + + } + + public static UUID getPlayerUUID(String playername) { +// if (Residence.getConfigManager().isOfflineMode()) +// return null; + Player p = Residence.getServ().getPlayer(playername); + if (p == null) { + if (getOfflinePlayerMap().containsKey(playername.toLowerCase())) + return getOfflinePlayerMap().get(playername.toLowerCase()).getUniqueId(); + } else + return p.getUniqueId(); + return null; + } + + public static ConcurrentHashMap getOfflinePlayerMap() { + return OfflinePlayerList; + } + + @SuppressWarnings("deprecation") + public static OfflinePlayer getOfflinePlayer(String Name) { + if (getOfflinePlayerMap().containsKey(Name.toLowerCase())) { + return getOfflinePlayerMap().get(Name.toLowerCase()); + } + Player player = Bukkit.getPlayer(Name); + OfflinePlayer offPlayer = null; + if (player != null) + offPlayer = player; + if (offPlayer == null) + offPlayer = Bukkit.getOfflinePlayer(Name); + if (offPlayer != null) + getOfflinePlayerMap().put(Name.toLowerCase(), offPlayer); + return offPlayer; + } + + public static String getPlayerUUIDString(String playername) { + UUID playerUUID = Residence.getPlayerUUID(playername); + if (playerUUID != null) + return playerUUID.toString(); + return null; + } + + public static String getPlayerName(String uuid) { + try { + return Residence.getPlayerName(UUID.fromString(uuid)); + } catch (IllegalArgumentException ex) { + } + return null; + } + + public static String getServerLandname() { + return ServerLandname; + } + + public static String getServerLandUUID() { + return ServerLandUUID; + } + + public static String getTempUserUUID() { + return TempUserUUID; + } + + public static String getPlayerName(UUID uuid) { + OfflinePlayer p = Residence.getServ().getPlayer(uuid); + if (p == null) + p = Residence.getServ().getOfflinePlayer(uuid); + if (p != null) + return p.getName(); + return null; + } + + public static boolean isDisabledWorldListener(World world) { + return isDisabledWorldListener(world.getName()); + } + + public static boolean isDisabledWorldListener(String worldname) { + if (getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableListeners) + return true; + return false; + } + + public static boolean isDisabledWorldCommand(World world) { + return isDisabledWorldCommand(world.getName()); + } + + public static boolean isDisabledWorldCommand(String worldname) { + if (getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableCommands) + return true; + return false; + } + +// public static void msg(Player player, String path, Object... variables) { +// if (player != null) +// if (Residence.getLM().containsKey(path)) +// player.sendMessage(Residence.getLM().getMessage(path, variables)); +// else +// player.sendMessage(path); +// } + + public static String msg(String path) { + return Residence.getLM().getMessage(path); + } + + public static void msg(CommandSender sender, String text) { + if (sender != null && text.length() > 0) + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); + } + + public static void msg(Player player, String text) { + if (player != null && text.length() > 0) + player.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); + } + + public static void msg(CommandSender sender, lm lm, Object... variables) { + if (sender != null) + if (Residence.getLM().containsKey(lm.getPath())) { + String msg = Residence.getLM().getMessage(lm, variables); + if (msg.length() > 0) + sender.sendMessage(msg); + } else { + String msg = lm.getPath(); + if (msg.length() > 0) + sender.sendMessage(lm.getPath()); + } + } + + public static List msgL(lm lm) { + return Residence.getLM().getMessageList(lm); + } + + public static String msg(lm lm, Object... variables) { + return Residence.getLM().getMessage(lm, variables); + } + + public static InformationPager getInfoPageManager() { + return InformationPagerManager; + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10.java b/src/com/bekvon/bukkit/residence/allNms/v1_10.java index 798f382f4..488d9e006 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10.java @@ -1,192 +1,192 @@ -package com.bekvon.bukkit.residence.allNms; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; -import org.bukkit.entity.Player; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.entity.PolarBear; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.NMS; -import com.bekvon.bukkit.residence.Residence; - -public class v1_10 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof PolarBear); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { - case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case SPRUCE_DOOR: - case BIRCH_DOOR: - case JUNGLE_DOOR: - case ACACIA_DOOR: - case DARK_OAK_DOOR: - case SPRUCE_FENCE_GATE: - case BIRCH_FENCE_GATE: - case JUNGLE_FENCE_GATE: - case ACACIA_FENCE_GATE: - case DARK_OAK_FENCE_GATE: - case TRAP_DOOR: - case IRON_TRAPDOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: - case DRAGON_EGG: - return true; - default: - return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: - case STRING: - case WALL_BANNER: - case WALL_SIGN: - case SAPLING: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - return false; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door.getName()); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door.getName()); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door.getName()); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door.getName()); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door.getName()); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door.getName()); - - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode.getName()); - } - - @Override - public boolean isPlate(Material mat) { - return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public Block getTargetBlock(Player player, int range) { - return player.getTargetBlock((Set) null, range); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } - - @SuppressWarnings("incomplete-switch") - @Override - public boolean isBoat(Material mat) { - switch (mat) { - case BOAT: - case BOAT_ACACIA: - case BOAT_BIRCH: - case BOAT_DARK_OAK: - case BOAT_JUNGLE: - case BOAT_SPRUCE: - return true; - } - return false; - } -} +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.entity.PolarBear; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; +import com.bekvon.bukkit.residence.Residence; + +public class v1_10 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof PolarBear); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case SPRUCE_DOOR: + case BIRCH_DOOR: + case JUNGLE_DOOR: + case ACACIA_DOOR: + case DARK_OAK_DOOR: + case SPRUCE_FENCE_GATE: + case BIRCH_FENCE_GATE: + case JUNGLE_FENCE_GATE: + case ACACIA_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case TRAP_DOOR: + case IRON_TRAPDOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door.getName()); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door.getName()); + + matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode.getName()); + } + + @Override + public boolean isPlate(Material mat) { + return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public Block getTargetBlock(Player player, int range) { + return player.getTargetBlock((Set) null, range); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @SuppressWarnings("incomplete-switch") + @Override + public boolean isBoat(Material mat) { + switch (mat) { + case BOAT: + case BOAT_ACACIA: + case BOAT_BIRCH: + case BOAT_DARK_OAK: + case BOAT_JUNGLE: + case BOAT_SPRUCE: + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index e2723c661..38d232ab6 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -1,113 +1,113 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; - -public class expand implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 2000) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - ClaimedResidence res = null; - if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 3) { - res = Residence.getResidenceManager().getByName(args[1]); - } else - return false; - - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - - if (res.isSubzone() && !player.hasPermission("residence.expand.subzone") && !resadmin) { - Residence.msg(player, lm.Subzone_CantExpand); - return false; - } - - if (!res.isSubzone() && !player.hasPermission("residence.expand") && !resadmin) { - Residence.msg(player, lm.Residence_CantExpandResidence); - return false; - } - - String resName = res.getName(); - CuboidArea area = null; - String areaName = null; - - if (args.length == 2) { - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - } else if (args.length == 3) { - areaName = res.isSubzone() ? Residence.getResidenceManager().getSubzoneNameByRes(res) : "main"; - area = res.getCuboidAreabyName(areaName); - } - - if (area != null) { - Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); - Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); - Residence.msg(player, lm.Select_Area, areaName, resName); - } else { - Residence.msg(player, lm.Area_NonExist); - return true; - } - int amount = -1; - try { - if (args.length == 2) - amount = Integer.parseInt(args[1]); - else if (args.length == 3) - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Amount); - return true; - } - - if (amount > 1000) { - Residence.msg(player, lm.Invalid_Amount); - return true; - } - - if (amount < 0) - amount = 1; - - Residence.getSelectionManager().modify(player, false, amount); - - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.wep != null) { - if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) { - Residence.getSelectionManager().worldEdit(player); - } - } - - res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); - return true; - } - Residence.msg(player, lm.Select_Points); - - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Expands residence in direction you looking"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1","1")); - } - -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; + +public class expand implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 2000) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + ClaimedResidence res = null; + if (args.length == 2) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 3) { + res = Residence.getResidenceManager().getByName(args[1]); + } else + return false; + + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return true; + } + + if (res.isSubzone() && !player.hasPermission("residence.expand.subzone") && !resadmin) { + Residence.msg(player, lm.Subzone_CantExpand); + return false; + } + + if (!res.isSubzone() && !player.hasPermission("residence.expand") && !resadmin) { + Residence.msg(player, lm.Residence_CantExpandResidence); + return false; + } + + String resName = res.getName(); + CuboidArea area = null; + String areaName = null; + + if (args.length == 2) { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } else if (args.length == 3) { + areaName = res.isSubzone() ? Residence.getResidenceManager().getSubzoneNameByRes(res) : "main"; + area = res.getCuboidAreabyName(areaName); + } + + if (area != null) { + Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); + Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); + Residence.msg(player, lm.Select_Area, areaName, resName); + } else { + Residence.msg(player, lm.Area_NonExist); + return true; + } + int amount = -1; + try { + if (args.length == 2) + amount = Integer.parseInt(args[1]); + else if (args.length == 3) + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + Residence.msg(player, lm.Invalid_Amount); + return true; + } + + if (amount > 1000) { + Residence.msg(player, lm.Invalid_Amount); + return true; + } + + if (amount < 0) + amount = 1; + + Residence.getSelectionManager().modify(player, false, amount); + + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + if (Residence.wep != null) { + if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) { + Residence.getSelectionManager().worldEdit(player); + } + } + + res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); + return true; + } + Residence.msg(player, lm.Select_Points); + + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Expands residence in direction you looking"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1","1")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 7e9d1f645..9e5381fb5 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -1,73 +1,73 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class kick implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 2200) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (args.length != 2) - return false; - - Player targetplayer = Bukkit.getPlayer(args[1]); - if (targetplayer == null) { - Residence.msg(player, lm.General_NotOnline); - return true; - } - - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - - PermissionGroup group = rPlayer.getGroup(); - if (!group.hasKickAccess() && !resadmin) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(targetplayer.getLocation()); - - if (res == null || res != null && !res.isOwner(player) && !resadmin) { - Residence.msg(player, lm.Residence_PlayerNotIn); - return true; - } - - if (!res.isOwner(player)) - return false; - - if (res.getPlayersInResidence().contains(targetplayer)) { - Location loc = Residence.getConfigManager().getKickLocation(); - if (loc != null) - targetplayer.teleport(loc); - else - targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation(), player)); - Residence.msg(targetplayer, lm.Residence_Kicked); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Kicks player from residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res kick ", "You must be the owner or an admin to do this.", "Player should be online.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class kick implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 2200) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 2) + return false; + + Player targetplayer = Bukkit.getPlayer(args[1]); + if (targetplayer == null) { + Residence.msg(player, lm.General_NotOnline); + return true; + } + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); + if (!group.hasKickAccess() && !resadmin) { + Residence.msg(player, lm.General_NoPermission); + return true; + } + ClaimedResidence res = Residence.getResidenceManager().getByLoc(targetplayer.getLocation()); + + if (res == null || !res.isOwner(player) && !resadmin) { + Residence.msg(player, lm.Residence_PlayerNotIn); + return true; + } + + if (!res.isOwner(player)) + return false; + + if (res.getPlayersInResidence().contains(targetplayer)) { + Location loc = Residence.getConfigManager().getKickLocation(); + if (loc != null) + targetplayer.teleport(loc); + else + targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation(), player)); + Residence.msg(targetplayer, lm.Residence_Kicked); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Kicks player from residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res kick ", "You must be the owner or an admin to do this.", "Player should be online.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index d29a84b11..36dc9b5d5 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -1,483 +1,483 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.Sign; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.signsStuff.Signs; - -public class market implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 2600) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - - if (args.length == 1) { - return false; - } - String secondCommand = args[1].toLowerCase(); - - switch (secondCommand.toLowerCase()) { - - case "list": - return commandResMarketList(args, player, page); - case "autopay": - return commandResMarketAutoPay(args, resadmin, player); - case "payrent": - return commandResMarketPayRent(args, resadmin, player); - case "rentable": - return commandResMarketRentable(args, resadmin, player); - case "rent": - return commandResMarketRent(args, resadmin, player); - case "release": - case "unrent": - if (args.length != 3 && args.length != 2) - return false; - - ClaimedResidence res = null; - - if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - else - res = Residence.getResidenceManager().getByName(args[2]); - - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - - if (res.isRented()) { - if (resadmin || Residence.isResAdminOn(player) || player.hasPermission("residence.market.evict")) { - Residence.UnrentConfirm.put(player.getName(), res.getName()); - Residence.msg(sender, lm.Rent_EvictConfirm, res.getName()); - } else if (Residence.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sender.getName())) { - Residence.UnrentConfirm.put(player.getName(), res.getName()); - Residence.msg(sender, lm.Rent_UnrentConfirm, res.getName()); - } else - Residence.getRentManager().printRentInfo(player, res); - } else { - Residence.UnrentConfirm.put(player.getName(), res.getName()); - Residence.msg(sender, lm.Rent_ReleaseConfirm, res.getName()); - } - - return true; - - case "confirm": - if (!Residence.UnrentConfirm.containsKey(player.getName())) { - Residence.msg(player, lm.Invalid_Residence); - return false; - } - String area = Residence.UnrentConfirm.remove(player.getName()); - res = Residence.getResidenceManager().getByName(area); - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - - if (!res.isRented()) { - Residence.getRentManager().removeFromForRent(player, res, resadmin); - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - if (rPlayer != null && res != null && rPlayer.getMainResidence() == res) { - rPlayer.setMainResidence(null); - } - } else - Residence.getRentManager().unrent(player, area, resadmin); - return true; - case "sign": - if (args.length != 3) { - return false; - } - Block block = Residence.getNms().getTargetBlock(player, 10); - - if (!(block.getState() instanceof Sign)) { - Residence.msg(player, lm.Sign_LookAt); - return true; - } - - Sign sign = (Sign) block.getState(); - - Signs signInfo = new Signs(); - - Signs oldSign = Residence.getSignUtil().getSignFromLoc(sign.getLocation()); - - if (oldSign != null) - signInfo = oldSign; - - Location loc = sign.getLocation(); - - ClaimedResidence CurrentRes = Residence.getResidenceManager().getByLoc(sign.getLocation()); - - if (CurrentRes != null && !CurrentRes.isOwner(player) && !resadmin) { - Residence.msg(player, lm.Residence_NotOwner); - return true; - } - - res = Residence.getResidenceManager().getByName(args[2]); - - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - - boolean ForSale = res.isForSell(); - boolean ForRent = res.isForRent(); - - int category = 1; - if (Residence.getSignUtil().getSigns().GetAllSigns().size() > 0) - category = Residence.getSignUtil().getSigns().GetAllSigns().get(Residence.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; - - if (ForSale || ForRent) { - signInfo.setCategory(category); - signInfo.setResidence(res); - signInfo.setLocation(loc); - Residence.getSignUtil().getSigns().addSign(signInfo); - Residence.getSignUtil().saveSigns(); - } else { - Residence.msg(player, lm.Residence_NotForRentOrSell); - return true; - } - - Residence.getSignUtil().CheckSign(res, 5); - - return true; - - case "info": - res = null; - if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 3) - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - boolean sell = Residence.getTransactionManager().viewSaleInfo(res, player); - if (Residence.getConfigManager().enabledRentSystem() && res.isForRent()) { - Residence.getRentManager().printRentInfo(player, res); - } else if (!sell) { - Residence.msg(sender, lm.Residence_NotForRentOrSell); - } - return true; - case "buy": - res = null; - if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 3) - res = Residence.getResidenceManager().getByName(args[2]); - - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - - sell = Residence.getTransactionManager().viewSaleInfo(res, player); - if (sell) { - Residence.getTransactionManager().buyPlot(res, player, resadmin); - } else { - Residence.msg(sender, lm.Residence_NotForRentOrSell); - } - return true; - case "unsell": - if (args.length != 3) - return false; - - Residence.getTransactionManager().removeFromSale(player, args[2], resadmin); - return true; - - case "sell": - if (args.length != 4) - return false; - - int amount; - try { - amount = Integer.parseInt(args[3]); - } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Amount); - return true; - } - Residence.getTransactionManager().putForSale(args[2], player, amount, resadmin); - return true; - default: - return false; - } - } - - private static boolean commandResMarketRent(String[] args, boolean resadmin, Player player) { - if (args.length < 2 || args.length > 4) { - return false; - } - boolean repeat = Residence.getConfigManager().isRentPlayerAutoPay(); - - ClaimedResidence res = null; - - if (args.length == 4) { - if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { - repeat = true; - } else if (args[3].equalsIgnoreCase("f") || args[3].equalsIgnoreCase("false")) { - repeat = false; - } else { - Residence.msg(player, lm.Invalid_Boolean); - return true; - } - } - - if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length > 2) - res = Residence.getResidenceManager().getByName(args[2]); - - if (res != null) - Residence.getRentManager().rent(player, res, repeat, resadmin); - else - Residence.msg(player, lm.Invalid_Residence); - - return true; - } - - private static boolean commandResMarketPayRent(String[] args, boolean resadmin, Player player) { - if (args.length != 2 && args.length != 3) { - return false; - } - - ClaimedResidence res = null; - - if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - else - res = Residence.getResidenceManager().getByName(args[2]); - - if (res != null) - Residence.getRentManager().payRent(player, res, resadmin); - else - Residence.msg(player, lm.Invalid_Residence); - return true; - } - - private static boolean commandResMarketRentable(String[] args, boolean resadmin, Player player) { - if (args.length < 5 || args.length > 8) { - return false; - } - if (!Residence.getConfigManager().enabledRentSystem()) { - Residence.msg(player, lm.Rent_Disabled); - return true; - } - int days; - int cost; - try { - cost = Integer.parseInt(args[3]); - } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Cost); - return true; - } - try { - days = Integer.parseInt(args[4]); - } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Days); - return true; - } - boolean AllowRenewing = Residence.getConfigManager().isRentAllowRenewing(); - if (args.length >= 6) { - String ag = args[5]; - if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { - AllowRenewing = true; - } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { - AllowRenewing = false; - } else { - Residence.msg(player, lm.Invalid_Boolean); - return true; - } - } - - boolean StayInMarket = Residence.getConfigManager().isRentStayInMarket(); - if (args.length >= 7) { - String ag = args[6]; - if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { - StayInMarket = true; - } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { - StayInMarket = false; - } else { - Residence.msg(player, lm.Invalid_Boolean); - return true; - } - } - - boolean AllowAutoPay = Residence.getConfigManager().isRentAllowAutoPay(); - if (args.length >= 8) { - String ag = args[7]; - if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { - AllowAutoPay = true; - } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { - AllowAutoPay = false; - } else { - Residence.msg(player, lm.Invalid_Boolean); - return true; - } - } - - Residence.getRentManager().setForRent(player, args[2], cost, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); - return true; - } - - private static boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player player) { - if (!Residence.getConfigManager().enableEconomy()) { - Residence.msg(player, lm.Economy_MarketDisabled); - return true; - } - if (args.length != 3 && args.length != 4) { - return false; - } - - boolean value; - - String barg = ""; - ClaimedResidence res = null; - if (args.length == 3) { - barg = args[2]; - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - } else { - barg = args[3]; - res = Residence.getResidenceManager().getByName(args[2]); - } - - if (barg.equalsIgnoreCase("true") || barg.equalsIgnoreCase("t")) { - value = true; - } else if (barg.equalsIgnoreCase("false") || barg.equalsIgnoreCase("f")) { - value = false; - } else { - Residence.msg(player, lm.Invalid_Boolean); - return true; - } - - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - - if (res.isRented() && res.getRentedLand().player.equalsIgnoreCase(player.getName())) { - Residence.getRentManager().setRentedRepeatable(player, res.getName(), value, resadmin); - } else if (res.isForRent()) { - Residence.getRentManager().setRentRepeatable(player, res.getName(), value, resadmin); - } else { - Residence.msg(player, lm.Economy_RentReleaseInvalid, ChatColor.YELLOW + res.getName() + ChatColor.RED); - } - return true; - } - - private static boolean commandResMarketList(String[] args, Player player, int page) { - if (!Residence.getConfigManager().enableEconomy()) { - Residence.msg(player, lm.Economy_MarketDisabled); - return true; - } - Residence.msg(player, lm.General_MarketList); - if (args.length < 3) - return false; - - if (args[2].equalsIgnoreCase("sell")) { - Residence.getTransactionManager().printForSaleResidences(player, page); - return true; - } - if (args[2].equalsIgnoreCase("rent")) { - if (Residence.getConfigManager().enabledRentSystem()) { - Residence.getRentManager().printRentableResidences(player, page); - } - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - - c.get(path + "Description", "Buy, Sell, or Rent Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res market ? for more Info")); - - path += "SubCommands."; - - c.get(path + "Info.Description", "Get economy Info on residence"); - c.get(path + "Info.Info", Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "Info"), Arrays.asList("[residence]")); - - c.get(path + "list.Description", "Lists rentable and for sale residences."); - c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res market list [rent/sell]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("rent%%sell")); - - c.get(path + "list.SubCommands.rent.Description", "Lists rentable residences."); - c.get(path + "list.SubCommands.rent.Info", Arrays.asList("&eUsage: &6/res market list rent")); - - c.get(path + "list.SubCommands.sell.Description", "Lists for sale residences."); - c.get(path + "list.SubCommands.sell.Info", Arrays.asList("&eUsage: &6/res market list sell")); - - c.get(path + "sell.Description", "Sell a residence"); - c.get(path + "sell.Info", Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", - "Another player can buy the residence with /res market buy")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sell"), Arrays.asList("[residence]")); - - c.get(path + "sign.Description", "Set market sign"); - c.get(path + "sign.Info", Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sign"), Arrays.asList("[residence]")); - - c.get(path + "buy.Description", "Buy a residence"); - c.get(path + "buy.Info", Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "buy"), Arrays.asList("[residence]")); - - c.get(path + "unsell.Description", "Stops selling a residence"); - c.get(path + "unsell.Info", Arrays.asList("&eUsage: &6/res market unsell [residence]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "unsell"), Arrays.asList("[residence]")); - - c.get(path + "rent.Description", "ent a residence"); - c.get(path + "rent.Info", Arrays.asList("&eUsage: &6/res market rent [residence] ", - "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rent"), Arrays.asList("[cresidence]", "true%%false")); - - c.get(path + "rentable.Description", "Make a residence rentable."); - c.get(path + "rentable.Info", Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", - "Makes a residence rentable for [cost] money for every [days] number of days.", - "If is true, the residence will be able to be rented again before rent expires.", - "If is true, the residence will stay in market after last renter will be removed.", - "If is true, money for rent will be automaticaly taken from players balance if he chosen that option when renting")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rentable"), Arrays.asList("[residence]", "1000", "7", "true", "true", - "true")); - - c.get(path + "autopay.Description", "Sets residence AutoPay to given value"); - c.get(path + "autopay.Info", Arrays.asList("&eUsage: &6/res market autopay [true/false]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "autopay"), Arrays.asList("[residence]%%true%%false", "true%%false")); - - c.get(path + "payrent.Description", "Pays rent for defined residence"); - c.get(path + "payrent.Info", Arrays.asList("&eUsage: &6/res market payrent ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "payrent"), Arrays.asList("[residence]")); - - c.get(path + "confirm.Description", "Confirms residence unrent/release action"); - c.get(path + "confirm.Info", Arrays.asList("&eUsage: &6/res market confirm")); - - c.get(path + "release.Description", "Remove a residence from rent or rentable."); - c.get(path + "release.Info", Arrays.asList("&eUsage: &6/res market release [residence]", - "If you are the renter, this command releases the rent on the house for you.", - "If you are the owner, this command makes the residence not for rent anymore.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "release"), Arrays.asList("[residence]")); - } - -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.signsStuff.Signs; + +public class market implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 2600) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + + if (args.length == 1) { + return false; + } + String secondCommand = args[1].toLowerCase(); + + switch (secondCommand.toLowerCase()) { + + case "list": + return commandResMarketList(args, player, page); + case "autopay": + return commandResMarketAutoPay(args, resadmin, player); + case "payrent": + return commandResMarketPayRent(args, resadmin, player); + case "rentable": + return commandResMarketRentable(args, resadmin, player); + case "rent": + return commandResMarketRent(args, resadmin, player); + case "release": + case "unrent": + if (args.length != 3 && args.length != 2) + return false; + + ClaimedResidence res = null; + + if (args.length == 2) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else + res = Residence.getResidenceManager().getByName(args[2]); + + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return true; + } + + if (res.isRented()) { + if (resadmin || Residence.isResAdminOn(player) || player.hasPermission("residence.market.evict")) { + Residence.UnrentConfirm.put(player.getName(), res.getName()); + Residence.msg(sender, lm.Rent_EvictConfirm, res.getName()); + } else if (Residence.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sender.getName())) { + Residence.UnrentConfirm.put(player.getName(), res.getName()); + Residence.msg(sender, lm.Rent_UnrentConfirm, res.getName()); + } else + Residence.getRentManager().printRentInfo(player, res); + } else { + Residence.UnrentConfirm.put(player.getName(), res.getName()); + Residence.msg(sender, lm.Rent_ReleaseConfirm, res.getName()); + } + + return true; + + case "confirm": + if (!Residence.UnrentConfirm.containsKey(player.getName())) { + Residence.msg(player, lm.Invalid_Residence); + return false; + } + String area = Residence.UnrentConfirm.remove(player.getName()); + res = Residence.getResidenceManager().getByName(area); + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return true; + } + + if (!res.isRented()) { + Residence.getRentManager().removeFromForRent(player, res, resadmin); + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + if (rPlayer != null && rPlayer.getMainResidence() == res) { + rPlayer.setMainResidence(null); + } + } else + Residence.getRentManager().unrent(player, area, resadmin); + return true; + case "sign": + if (args.length != 3) { + return false; + } + Block block = Residence.getNms().getTargetBlock(player, 10); + + if (!(block.getState() instanceof Sign)) { + Residence.msg(player, lm.Sign_LookAt); + return true; + } + + Sign sign = (Sign) block.getState(); + + Signs signInfo = new Signs(); + + Signs oldSign = Residence.getSignUtil().getSignFromLoc(sign.getLocation()); + + if (oldSign != null) + signInfo = oldSign; + + Location loc = sign.getLocation(); + + ClaimedResidence CurrentRes = Residence.getResidenceManager().getByLoc(sign.getLocation()); + + if (CurrentRes != null && !CurrentRes.isOwner(player) && !resadmin) { + Residence.msg(player, lm.Residence_NotOwner); + return true; + } + + res = Residence.getResidenceManager().getByName(args[2]); + + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return true; + } + + boolean ForSale = res.isForSell(); + boolean ForRent = res.isForRent(); + + int category = 1; + if (Residence.getSignUtil().getSigns().GetAllSigns().size() > 0) + category = Residence.getSignUtil().getSigns().GetAllSigns().get(Residence.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; + + if (ForSale || ForRent) { + signInfo.setCategory(category); + signInfo.setResidence(res); + signInfo.setLocation(loc); + Residence.getSignUtil().getSigns().addSign(signInfo); + Residence.getSignUtil().saveSigns(); + } else { + Residence.msg(player, lm.Residence_NotForRentOrSell); + return true; + } + + Residence.getSignUtil().CheckSign(res, 5); + + return true; + + case "info": + res = null; + if (args.length == 2) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 3) + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return true; + } + boolean sell = Residence.getTransactionManager().viewSaleInfo(res, player); + if (Residence.getConfigManager().enabledRentSystem() && res.isForRent()) { + Residence.getRentManager().printRentInfo(player, res); + } else if (!sell) { + Residence.msg(sender, lm.Residence_NotForRentOrSell); + } + return true; + case "buy": + res = null; + if (args.length == 2) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 3) + res = Residence.getResidenceManager().getByName(args[2]); + + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return true; + } + + sell = Residence.getTransactionManager().viewSaleInfo(res, player); + if (sell) { + Residence.getTransactionManager().buyPlot(res, player, resadmin); + } else { + Residence.msg(sender, lm.Residence_NotForRentOrSell); + } + return true; + case "unsell": + if (args.length != 3) + return false; + + Residence.getTransactionManager().removeFromSale(player, args[2], resadmin); + return true; + + case "sell": + if (args.length != 4) + return false; + + int amount; + try { + amount = Integer.parseInt(args[3]); + } catch (Exception ex) { + Residence.msg(player, lm.Invalid_Amount); + return true; + } + Residence.getTransactionManager().putForSale(args[2], player, amount, resadmin); + return true; + default: + return false; + } + } + + private static boolean commandResMarketRent(String[] args, boolean resadmin, Player player) { + if (args.length < 2 || args.length > 4) { + return false; + } + boolean repeat = Residence.getConfigManager().isRentPlayerAutoPay(); + + ClaimedResidence res = null; + + if (args.length == 4) { + if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { + repeat = true; + } else if (args[3].equalsIgnoreCase("f") || args[3].equalsIgnoreCase("false")) { + repeat = false; + } else { + Residence.msg(player, lm.Invalid_Boolean); + return true; + } + } + + if (args.length == 2) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length > 2) + res = Residence.getResidenceManager().getByName(args[2]); + + if (res != null) + Residence.getRentManager().rent(player, res, repeat, resadmin); + else + Residence.msg(player, lm.Invalid_Residence); + + return true; + } + + private static boolean commandResMarketPayRent(String[] args, boolean resadmin, Player player) { + if (args.length != 2 && args.length != 3) { + return false; + } + + ClaimedResidence res = null; + + if (args.length == 2) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else + res = Residence.getResidenceManager().getByName(args[2]); + + if (res != null) + Residence.getRentManager().payRent(player, res, resadmin); + else + Residence.msg(player, lm.Invalid_Residence); + return true; + } + + private static boolean commandResMarketRentable(String[] args, boolean resadmin, Player player) { + if (args.length < 5 || args.length > 8) { + return false; + } + if (!Residence.getConfigManager().enabledRentSystem()) { + Residence.msg(player, lm.Rent_Disabled); + return true; + } + int days; + int cost; + try { + cost = Integer.parseInt(args[3]); + } catch (Exception ex) { + Residence.msg(player, lm.Invalid_Cost); + return true; + } + try { + days = Integer.parseInt(args[4]); + } catch (Exception ex) { + Residence.msg(player, lm.Invalid_Days); + return true; + } + boolean AllowRenewing = Residence.getConfigManager().isRentAllowRenewing(); + if (args.length >= 6) { + String ag = args[5]; + if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { + AllowRenewing = true; + } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { + AllowRenewing = false; + } else { + Residence.msg(player, lm.Invalid_Boolean); + return true; + } + } + + boolean StayInMarket = Residence.getConfigManager().isRentStayInMarket(); + if (args.length >= 7) { + String ag = args[6]; + if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { + StayInMarket = true; + } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { + StayInMarket = false; + } else { + Residence.msg(player, lm.Invalid_Boolean); + return true; + } + } + + boolean AllowAutoPay = Residence.getConfigManager().isRentAllowAutoPay(); + if (args.length >= 8) { + String ag = args[7]; + if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { + AllowAutoPay = true; + } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { + AllowAutoPay = false; + } else { + Residence.msg(player, lm.Invalid_Boolean); + return true; + } + } + + Residence.getRentManager().setForRent(player, args[2], cost, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); + return true; + } + + private static boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player player) { + if (!Residence.getConfigManager().enableEconomy()) { + Residence.msg(player, lm.Economy_MarketDisabled); + return true; + } + if (args.length != 3 && args.length != 4) { + return false; + } + + boolean value; + + String barg = ""; + ClaimedResidence res = null; + if (args.length == 3) { + barg = args[2]; + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + } else { + barg = args[3]; + res = Residence.getResidenceManager().getByName(args[2]); + } + + if (barg.equalsIgnoreCase("true") || barg.equalsIgnoreCase("t")) { + value = true; + } else if (barg.equalsIgnoreCase("false") || barg.equalsIgnoreCase("f")) { + value = false; + } else { + Residence.msg(player, lm.Invalid_Boolean); + return true; + } + + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return true; + } + + if (res.isRented() && res.getRentedLand().player.equalsIgnoreCase(player.getName())) { + Residence.getRentManager().setRentedRepeatable(player, res.getName(), value, resadmin); + } else if (res.isForRent()) { + Residence.getRentManager().setRentRepeatable(player, res.getName(), value, resadmin); + } else { + Residence.msg(player, lm.Economy_RentReleaseInvalid, ChatColor.YELLOW + res.getName() + ChatColor.RED); + } + return true; + } + + private static boolean commandResMarketList(String[] args, Player player, int page) { + if (!Residence.getConfigManager().enableEconomy()) { + Residence.msg(player, lm.Economy_MarketDisabled); + return true; + } + Residence.msg(player, lm.General_MarketList); + if (args.length < 3) + return false; + + if (args[2].equalsIgnoreCase("sell")) { + Residence.getTransactionManager().printForSaleResidences(player, page); + return true; + } + if (args[2].equalsIgnoreCase("rent")) { + if (Residence.getConfigManager().enabledRentSystem()) { + Residence.getRentManager().printRentableResidences(player, page); + } + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + + c.get(path + "Description", "Buy, Sell, or Rent Residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res market ? for more Info")); + + path += "SubCommands."; + + c.get(path + "Info.Description", "Get economy Info on residence"); + c.get(path + "Info.Info", Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "Info"), Arrays.asList("[residence]")); + + c.get(path + "list.Description", "Lists rentable and for sale residences."); + c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res market list [rent/sell]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("rent%%sell")); + + c.get(path + "list.SubCommands.rent.Description", "Lists rentable residences."); + c.get(path + "list.SubCommands.rent.Info", Arrays.asList("&eUsage: &6/res market list rent")); + + c.get(path + "list.SubCommands.sell.Description", "Lists for sale residences."); + c.get(path + "list.SubCommands.sell.Info", Arrays.asList("&eUsage: &6/res market list sell")); + + c.get(path + "sell.Description", "Sell a residence"); + c.get(path + "sell.Info", Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", + "Another player can buy the residence with /res market buy")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sell"), Arrays.asList("[residence]")); + + c.get(path + "sign.Description", "Set market sign"); + c.get(path + "sign.Info", Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sign"), Arrays.asList("[residence]")); + + c.get(path + "buy.Description", "Buy a residence"); + c.get(path + "buy.Info", Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "buy"), Arrays.asList("[residence]")); + + c.get(path + "unsell.Description", "Stops selling a residence"); + c.get(path + "unsell.Info", Arrays.asList("&eUsage: &6/res market unsell [residence]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "unsell"), Arrays.asList("[residence]")); + + c.get(path + "rent.Description", "ent a residence"); + c.get(path + "rent.Info", Arrays.asList("&eUsage: &6/res market rent [residence] ", + "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rent"), Arrays.asList("[cresidence]", "true%%false")); + + c.get(path + "rentable.Description", "Make a residence rentable."); + c.get(path + "rentable.Info", Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", + "Makes a residence rentable for [cost] money for every [days] number of days.", + "If is true, the residence will be able to be rented again before rent expires.", + "If is true, the residence will stay in market after last renter will be removed.", + "If is true, money for rent will be automaticaly taken from players balance if he chosen that option when renting")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rentable"), Arrays.asList("[residence]", "1000", "7", "true", "true", + "true")); + + c.get(path + "autopay.Description", "Sets residence AutoPay to given value"); + c.get(path + "autopay.Info", Arrays.asList("&eUsage: &6/res market autopay [true/false]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "autopay"), Arrays.asList("[residence]%%true%%false", "true%%false")); + + c.get(path + "payrent.Description", "Pays rent for defined residence"); + c.get(path + "payrent.Info", Arrays.asList("&eUsage: &6/res market payrent ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "payrent"), Arrays.asList("[residence]")); + + c.get(path + "confirm.Description", "Confirms residence unrent/release action"); + c.get(path + "confirm.Info", Arrays.asList("&eUsage: &6/res market confirm")); + + c.get(path + "release.Description", "Remove a residence from rent or rentable."); + c.get(path + "release.Info", Arrays.asList("&eUsage: &6/res market release [residence]", + "If you are the renter, this command releases the rent on the house for you.", + "If you are the owner, this command makes the residence not for rent anymore.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "release"), Arrays.asList("[residence]")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 0d480cdce..d51e3e42e 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -1,108 +1,121 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.gui.SetFlag; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class pset implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 800) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player) && args.length != 5 && args.length == 4 && !args[3].equalsIgnoreCase("removeall")) - return false; - - if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { - Player player = (Player) sender; - ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().removeAllPlayerFlags(sender, args[1], resadmin); - } else { - Residence.msg(sender, lm.Invalid_Residence); - } - return true; - } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); - if (area != null) { - area.getPermissions().removeAllPlayerFlags(sender, args[2], resadmin); - } else { - Residence.msg(sender, lm.Invalid_Residence); - } - return true; - } else if (args.length == 4) { - Player player = (Player) sender; - ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); - - if (!Residence.isPlayerExist(sender, args[1], true)) - return false; - - if (area != null) { - area.getPermissions().setPlayerFlag(sender, args[1], args[2], args[3], resadmin, true); - } else { - Residence.msg(sender, lm.Invalid_Residence); - } - return true; - } else if (args.length == 5) { - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); - if (!Residence.isPlayerExist(sender, args[2], true)) - return false; - if (area != null) { - area.getPermissions().setPlayerFlag(sender, args[2], args[3], args[4], resadmin, true); - } else { - Residence.msg(sender, lm.Invalid_Residence); - } - return true; - } else if ((args.length == 2 || args.length == 3) && Residence.getConfigManager().useFlagGUI()) { - Player player = (Player) sender; - ClaimedResidence res = null; - String targetPlayer = null; - if (args.length == 2) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - targetPlayer = args[1]; - } else { - res = Residence.getResidenceManager().getByName(args[1]); - targetPlayer = args[2]; - } - - if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); - return true; - } - - if (!Residence.isPlayerExist(player, targetPlayer, true)) - return false; - if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, "admin", false)) { - Residence.msg(sender, lm.General_NoPermission); - return true; - } - SetFlag flag = new SetFlag(res.getName(), player, resadmin); - flag.setTargetPlayer(targetPlayer); - flag.recalculatePlayer(res); - player.closeInventory(); - Residence.getPlayerListener().getGUImap().put(player.getName(), flag); - player.openInventory(flag.getInventory()); - - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Set flags on a specific player for a Residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", - "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]%%[flag]", "[flag]%%true%%false%%remove", - "true%%false%%remove")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.gui.SetFlag; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class pset implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 800) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player) && args.length != 5 && args.length == 4 && !args[3].equalsIgnoreCase("removeall")) + return false; + + if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { + Player player = (Player) sender; + ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().removeAllPlayerFlags(sender, args[1], resadmin); + } else { + Residence.msg(sender, lm.Invalid_Residence); + } + return true; + } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); + if (area != null) { + area.getPermissions().removeAllPlayerFlags(sender, args[2], resadmin); + } else { + Residence.msg(sender, lm.Invalid_Residence); + } + return true; + } else if (args.length == 4) { + Player player = (Player) sender; + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + + if (!Residence.isPlayerExist(sender, args[1], true)) + return false; + + if (res != null) { + if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { + Residence.msg(sender, lm.General_NoPermission); + return true; + } + res.getPermissions().setPlayerFlag(sender, args[1], args[2], args[3], resadmin, true); + } else { + Residence.msg(sender, lm.Invalid_Residence); + } + return true; + } else if (args.length == 5) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + if (!Residence.isPlayerExist(sender, args[2], true)) + return false; + + if (res == null) { + Residence.msg(sender, lm.Invalid_Residence); + return true; + } + + if (!res.isOwner(sender) && !resadmin && sender instanceof Player && !res.getPermissions().playerHas((Player) sender, Flags.admin, false)) { + Residence.msg(sender, lm.General_NoPermission); + return true; + } + + res.getPermissions().setPlayerFlag(sender, args[2], args[3], args[4], resadmin, true); + return true; + } else if ((args.length == 2 || args.length == 3) && Residence.getConfigManager().useFlagGUI()) { + Player player = (Player) sender; + ClaimedResidence res = null; + String targetPlayer = null; + if (args.length == 2) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + targetPlayer = args[1]; + } else { + res = Residence.getResidenceManager().getByName(args[1]); + targetPlayer = args[2]; + } + + if (res == null) { + Residence.msg(sender, lm.Invalid_Residence); + return true; + } + + if (!Residence.isPlayerExist(player, targetPlayer, true)) + return false; + if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { + Residence.msg(sender, lm.General_NoPermission); + return true; + } + SetFlag flag = new SetFlag(res.getName(), player, resadmin); + flag.setTargetPlayer(targetPlayer); + flag.recalculatePlayer(res); + player.closeInventory(); + Residence.getPlayerListener().getGUImap().put(player.getName(), flag); + player.openInventory(flag.getInventory()); + + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Set flags on a specific player for a Residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", + "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]%%[flag]", + "[flag]%%true%%false%%remove", + "true%%false%%remove")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index f90a2e832..8cd13739d 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -1,214 +1,214 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.chat.ChatChannel; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class rc implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 1100) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return true; - Player player = (Player) sender; - String pname = player.getName(); - if (!Residence.getConfigManager().chatEnabled()) { - Residence.msg(player, lm.Residence_ChatDisabled); - return false; - } - if (args.length > 0) - args = Arrays.copyOfRange(args, 1, args.length); - - if (args.length == 0) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); - if (chat != null) { - Residence.getChatManager().removeFromChannel(pname); - Residence.getPlayerListener().removePlayerResidenceChat(player); - return true; - } - Residence.msg(player, lm.Residence_NotIn); - return true; - } - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); - if (chat != null && chat.getChannelName().equals(res.getName())) { - Residence.getChatManager().removeFromChannel(pname); - Residence.getPlayerListener().removePlayerResidenceChat(player); - return true; - } - if (!res.getPermissions().playerHas(player.getName(), Flags.chat, true) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.chat, res.getName()); - return false; - } - - Residence.getPlayerListener().tooglePlayerResidenceChat(player, res.getName()); - Residence.getChatManager().setChannel(pname, res); - return true; - } else if (args.length == 1) { - if (args[0].equalsIgnoreCase("l") || args[0].equalsIgnoreCase("leave")) { - Residence.getChatManager().removeFromChannel(pname); - Residence.getPlayerListener().removePlayerResidenceChat(player); - return true; - } - ClaimedResidence res = Residence.getResidenceManager().getByName(args[0]); - if (res == null) { - Residence.msg(player, lm.Chat_InvalidChannel); - return true; - } - - if (!res.getPermissions().playerHas(player.getName(), "chat", true) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.msg(player, lm.Residence_FlagDeny, "chat", res.getName()); - return false; - } - Residence.getPlayerListener().tooglePlayerResidenceChat(player, res.getName()); - Residence.getChatManager().setChannel(pname, res); - - return true; - } else if (args.length == 2) { - if (args[0].equalsIgnoreCase("setcolor")) { - - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); - - if (chat == null) { - Residence.msg(player, lm.Chat_JoinFirst); - return true; - } - - ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); - - if (res == null) - return false; - - if (!res.isOwner(player) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - - if (!player.hasPermission("residence.chatcolor")) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - - String posibleColor = args[1]; - - if (!posibleColor.contains("&")) - posibleColor = "&" + posibleColor; - - if (posibleColor.length() != 2 || ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', posibleColor)).length() != 0) { - Residence.msg(player, lm.Chat_InvalidColor); - return true; - } - - ChatColor color = ChatColor.getByChar(posibleColor.replace("&", "")); - res.setChannelColor(color); - chat.setChannelColor(color); - Residence.msg(player, lm.Chat_ChangedColor, color.name()); - return true; - } else if (args[0].equalsIgnoreCase("setprefix")) { - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); - - if (chat == null) { - Residence.msg(player, lm.Chat_JoinFirst); - return true; - } - - ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); - - if (res == null) - return false; - - if (!res.isOwner(player) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - - if (!player.hasPermission("residence.chatprefix")) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - - String prefix = args[1]; - - if (prefix.length() > Residence.getConfigManager().getChatPrefixLength()) { - Residence.msg(player, lm.Chat_InvalidPrefixLength, Residence.getConfigManager() - .getChatPrefixLength()); - return true; - } - - res.setChatPrefix(prefix); - chat.setChatPrefix(prefix); - Residence.msg(player, lm.Chat_ChangedPrefix, ChatColor.translateAlternateColorCodes('&', prefix)); - return true; - } else if (args[0].equalsIgnoreCase("kick")) { - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); - - if (chat == null) { - Residence.msg(player, lm.Chat_JoinFirst); - return true; - } - - ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); - - if (res == null) - return false; - - if (!res.getOwner().equals(player.getName()) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - - if (!player.hasPermission("residence.chatkick")) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - - String targetName = args[1]; - if (!chat.hasMember(targetName)) { - Residence.msg(player, lm.Chat_NotInChannel); - return false; - } - - chat.leave(targetName); - Residence.getPlayerListener().removePlayerResidenceChat(targetName); - Residence.msg(player, lm.Chat_Kicked, targetName, chat.getChannelName()); - return true; - } - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Joins current or defined residence chat chanel"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res rc (residence)", "Teleports you to random location in defined world.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - - path += "SubCommands."; - c.get(path + "leave.Description", "Leaves current residence chat chanel"); - c.get(path + "leave.Info", Arrays.asList("&eUsage: &6/res rc leave", "If you are in residence chat cnahel then you will leave it")); - - c.get(path + "setcolor.Description", "Sets residence chat chanel text color"); - c.get(path + "setcolor.Info", Arrays.asList("&eUsage: &6/res rc setcolor [colorCode]", "Sets residence chat chanel text color")); - - c.get(path + "setprefix.Description", "Sets residence chat chanel prefix"); - c.get(path + "setprefix.Info", Arrays.asList("&eUsage: &6/res rc setprefix [newName]", "Sets residence chat chanel prefix")); - - c.get(path + "kick.Description", "Kicks player from chanel"); - c.get(path + "kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", "Kicks player from chanel")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "kick"), Arrays.asList("[playername]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class rc implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 1100) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return true; + Player player = (Player) sender; + String pname = player.getName(); + if (!Residence.getConfigManager().chatEnabled()) { + Residence.msg(player, lm.Residence_ChatDisabled); + return false; + } + if (args.length > 0) + args = Arrays.copyOfRange(args, 1, args.length); + + if (args.length == 0) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + if (chat != null) { + Residence.getChatManager().removeFromChannel(pname); + Residence.getPlayerListener().removePlayerResidenceChat(player); + return true; + } + Residence.msg(player, lm.Residence_NotIn); + return true; + } + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + if (chat != null && chat.getChannelName().equals(res.getName())) { + Residence.getChatManager().removeFromChannel(pname); + Residence.getPlayerListener().removePlayerResidenceChat(player); + return true; + } + if (!res.getPermissions().playerHas(player.getName(), Flags.chat, true) && !Residence.getPermissionManager().isResidenceAdmin(player)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.chat, res.getName()); + return false; + } + + Residence.getPlayerListener().tooglePlayerResidenceChat(player, res.getName()); + Residence.getChatManager().setChannel(pname, res); + return true; + } else if (args.length == 1) { + if (args[0].equalsIgnoreCase("l") || args[0].equalsIgnoreCase("leave")) { + Residence.getChatManager().removeFromChannel(pname); + Residence.getPlayerListener().removePlayerResidenceChat(player); + return true; + } + ClaimedResidence res = Residence.getResidenceManager().getByName(args[0]); + if (res == null) { + Residence.msg(player, lm.Chat_InvalidChannel); + return true; + } + + if (!res.getPermissions().playerHas(player.getName(), Flags.chat, true) && !Residence.getPermissionManager().isResidenceAdmin(player)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.chat.getName(), res.getName()); + return false; + } + Residence.getPlayerListener().tooglePlayerResidenceChat(player, res.getName()); + Residence.getChatManager().setChannel(pname, res); + + return true; + } else if (args.length == 2) { + if (args[0].equalsIgnoreCase("setcolor")) { + + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + + if (chat == null) { + Residence.msg(player, lm.Chat_JoinFirst); + return true; + } + + ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); + + if (res == null) + return false; + + if (!res.isOwner(player) && !Residence.getPermissionManager().isResidenceAdmin(player)) { + Residence.msg(player, lm.General_NoPermission); + return true; + } + + if (!player.hasPermission("residence.chatcolor")) { + Residence.msg(player, lm.General_NoPermission); + return true; + } + + String posibleColor = args[1]; + + if (!posibleColor.contains("&")) + posibleColor = "&" + posibleColor; + + if (posibleColor.length() != 2 || ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', posibleColor)).length() != 0) { + Residence.msg(player, lm.Chat_InvalidColor); + return true; + } + + ChatColor color = ChatColor.getByChar(posibleColor.replace("&", "")); + res.setChannelColor(color); + chat.setChannelColor(color); + Residence.msg(player, lm.Chat_ChangedColor, color.name()); + return true; + } else if (args[0].equalsIgnoreCase("setprefix")) { + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + + if (chat == null) { + Residence.msg(player, lm.Chat_JoinFirst); + return true; + } + + ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); + + if (res == null) + return false; + + if (!res.isOwner(player) && !Residence.getPermissionManager().isResidenceAdmin(player)) { + Residence.msg(player, lm.General_NoPermission); + return true; + } + + if (!player.hasPermission("residence.chatprefix")) { + Residence.msg(player, lm.General_NoPermission); + return true; + } + + String prefix = args[1]; + + if (prefix.length() > Residence.getConfigManager().getChatPrefixLength()) { + Residence.msg(player, lm.Chat_InvalidPrefixLength, Residence.getConfigManager() + .getChatPrefixLength()); + return true; + } + + res.setChatPrefix(prefix); + chat.setChatPrefix(prefix); + Residence.msg(player, lm.Chat_ChangedPrefix, ChatColor.translateAlternateColorCodes('&', prefix)); + return true; + } else if (args[0].equalsIgnoreCase("kick")) { + ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + + if (chat == null) { + Residence.msg(player, lm.Chat_JoinFirst); + return true; + } + + ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); + + if (res == null) + return false; + + if (!res.getOwner().equals(player.getName()) && !Residence.getPermissionManager().isResidenceAdmin(player)) { + Residence.msg(player, lm.General_NoPermission); + return true; + } + + if (!player.hasPermission("residence.chatkick")) { + Residence.msg(player, lm.General_NoPermission); + return true; + } + + String targetName = args[1]; + if (!chat.hasMember(targetName)) { + Residence.msg(player, lm.Chat_NotInChannel); + return false; + } + + chat.leave(targetName); + Residence.getPlayerListener().removePlayerResidenceChat(targetName); + Residence.msg(player, lm.Chat_Kicked, targetName, chat.getChannelName()); + return true; + } + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Joins current or defined residence chat chanel"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res rc (residence)", "Teleports you to random location in defined world.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + + path += "SubCommands."; + c.get(path + "leave.Description", "Leaves current residence chat chanel"); + c.get(path + "leave.Info", Arrays.asList("&eUsage: &6/res rc leave", "If you are in residence chat cnahel then you will leave it")); + + c.get(path + "setcolor.Description", "Sets residence chat chanel text color"); + c.get(path + "setcolor.Info", Arrays.asList("&eUsage: &6/res rc setcolor [colorCode]", "Sets residence chat chanel text color")); + + c.get(path + "setprefix.Description", "Sets residence chat chanel prefix"); + c.get(path + "setprefix.Info", Arrays.asList("&eUsage: &6/res rc setprefix [newName]", "Sets residence chat chanel prefix")); + + c.get(path + "kick.Description", "Kicks player from chanel"); + c.get(path + "kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", "Kicks player from chanel")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "kick"), Arrays.asList("[playername]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 3fb277e97..1f77ab8dc 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -1,74 +1,84 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.gui.SetFlag; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class set implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 700) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player) && args.length != 4) - return false; - - if (args.length == 3) { - Player player = (Player) sender; - String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - if (area != null) { - Residence.getResidenceManager().getByName(area).getPermissions().setFlag(sender, args[1], args[2], resadmin); - } else { - Residence.msg(sender, lm.Invalid_Residence); - } - return true; - } else if (args.length == 4) { - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); - if (area != null) { - area.getPermissions().setFlag(sender, args[2], args[3], resadmin); - } else { - Residence.msg(sender, lm.Invalid_Residence); - } - return true; - } else if ((args.length == 1 || args.length == 2) && Residence.getConfigManager().useFlagGUI()) { - Player player = (Player) sender; - ClaimedResidence res = null; - if (args.length == 1) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - else - res = Residence.getResidenceManager().getByName(args[1]); - if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); - return true; - } - if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, "admin", false)) { - Residence.msg(sender, lm.General_NoPermission); - return true; - } - SetFlag flag = new SetFlag(res.getName(), player, resadmin); - flag.recalculateResidence(res); - player.closeInventory(); - Residence.getPlayerListener().getGUImap().put(player.getName(), flag); - player.openInventory(flag.getInventory()); - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Set general flags on a Residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res set [flag] [true/false/remove]", - "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[flag]", "[flag]%%true%%false%%remove", "true%%false%%remove")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.gui.SetFlag; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class set implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 700) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player) && args.length != 4) + return false; + + if (args.length == 3) { + Player player = (Player) sender; + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + Residence.msg(sender, lm.Invalid_Residence); + return true; + } + if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { + Residence.msg(sender, lm.General_NoPermission); + return true; + } + res.getPermissions().setFlag(sender, args[1], args[2], resadmin); + return true; + } else if (args.length == 4) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + if (res == null) { + Residence.msg(sender, lm.Invalid_Residence); + return true; + } + if (!res.isOwner(sender) && !resadmin && sender instanceof Player && !res.getPermissions().playerHas((Player) sender, Flags.admin, false)) { + Residence.msg(sender, lm.General_NoPermission); + return true; + } + res.getPermissions().setFlag(sender, args[2], args[3], resadmin); + return true; + } else if ((args.length == 1 || args.length == 2) && Residence.getConfigManager().useFlagGUI()) { + Player player = (Player) sender; + ClaimedResidence res = null; + if (args.length == 1) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else + res = Residence.getResidenceManager().getByName(args[1]); + if (res == null) { + Residence.msg(sender, lm.Invalid_Residence); + return true; + } + if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { + Residence.msg(sender, lm.General_NoPermission); + return true; + } + SetFlag flag = new SetFlag(res.getName(), player, resadmin); + flag.recalculateResidence(res); + player.closeInventory(); + Residence.getPlayerListener().getGUImap().put(player.getName(), flag); + player.openInventory(flag.getInventory()); + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Set general flags on a Residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res set [flag] [true/false/remove]", + "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[flag]", "[flag]%%true%%false%%remove", + "true%%false%%remove")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index e3cdd290d..ea40ca187 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -1,55 +1,55 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class setowner implements cmd { - - @Override - @CommandAnnotation(simple = false, priority = 5500) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - - if (args.length < 3) - return false; - - if (!resadmin) { - Residence.msg(sender, lm.General_NoPermission); - return true; - } - - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); - if (area != null) { - area.getPermissions().setOwner(args[2], true); - if (Residence.getRentManager().isForRent(area.getName())) - Residence.getRentManager().removeRentable(area.getName()); - if (Residence.getTransactionManager().isForSale(area.getName())) - Residence.getTransactionManager().removeFromSale(area.getName()); - area.getPermissions().applyDefaultFlags(); - - if (area.getParent() == null) { - Residence.msg(sender, lm.Residence_OwnerChange, args[1], args[2]); - } else { - Residence.msg(sender, lm.Subzone_OwnerChange, args[1].split("\\.")[args[1].split("\\.").length - 1], args[2]); - } - } else { - Residence.msg(sender, lm.Invalid_Residence); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Change owner of a residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); - } - -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class setowner implements cmd { + + @Override + @CommandAnnotation(simple = false, priority = 5500) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + + if (args.length < 3) + return false; + + if (!resadmin) { + Residence.msg(sender, lm.General_NoPermission); + return true; + } + + ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); + if (area != null) { + area.getPermissions().setOwner(args[2], true); + if (Residence.getRentManager().isForRent(area.getName())) + Residence.getRentManager().removeRentable(area.getName()); + if (Residence.getTransactionManager().isForSale(area.getName())) + Residence.getTransactionManager().removeFromSale(area.getName()); + area.getPermissions().applyDefaultFlags(); + + if (area.getParent() == null) { + Residence.msg(sender, lm.Residence_OwnerChange, args[1], args[2]); + } else { + Residence.msg(sender, lm.Subzone_OwnerChange, args[1].split("\\.")[args[1].split("\\.").length - 1], args[2]); + } + } else { + Residence.msg(sender, lm.Invalid_Residence); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Change owner of a residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/containers/ABInterface.java b/src/com/bekvon/bukkit/residence/containers/ABInterface.java index 439b29d98..4d4cd6be7 100644 --- a/src/com/bekvon/bukkit/residence/containers/ABInterface.java +++ b/src/com/bekvon/bukkit/residence/containers/ABInterface.java @@ -1,13 +1,13 @@ -package com.bekvon.bukkit.residence.containers; - -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public interface ABInterface { - - public void send(CommandSender sender, String msg); - - public void send(Player player, String msg); - - public void sendTitle(Player player, Object title, Object subtitle); -} +package com.bekvon.bukkit.residence.containers; + +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public interface ABInterface { + + public void send(CommandSender sender, String msg); + + public void send(Player player, String msg); + + public void sendTitle(Player player, Object title, Object subtitle); +} diff --git a/src/com/bekvon/bukkit/residence/containers/ConfigReader.java b/src/com/bekvon/bukkit/residence/containers/ConfigReader.java index c00267496..544b6283d 100644 --- a/src/com/bekvon/bukkit/residence/containers/ConfigReader.java +++ b/src/com/bekvon/bukkit/residence/containers/ConfigReader.java @@ -1,96 +1,96 @@ -package com.bekvon.bukkit.residence.containers; - -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.configuration.file.YamlConfiguration; - -import com.bekvon.bukkit.residence.CommentedYamlConfiguration; - -import org.bukkit.ChatColor; - -public class ConfigReader { - YamlConfiguration config; - CommentedYamlConfiguration writer; - - public ConfigReader(YamlConfiguration config, CommentedYamlConfiguration writer) { - this.config = config; - this.writer = writer; - } - - public CommentedYamlConfiguration getW() { - return writer; - } - - public YamlConfiguration getC() { - return config; - } - - public Boolean get(String path, Boolean boo) { - config.addDefault(path, boo); - copySetting(path); - return config.getBoolean(path); - } - - public int get(String path, int boo) { - config.addDefault(path, boo); - copySetting(path); - return config.getInt(path); - } - - public List getIntList(String path, List list) { - config.addDefault(path, list); - copySetting(path); - return config.getIntegerList(path); - } - - public List get(String path, List list, boolean colorize) { - config.addDefault(path, list); - copySetting(path); - if (colorize) - return ColorsArray(config.getStringList(path)); - return config.getStringList(path); - } - - public List get(String path, List list) { - config.addDefault(path, list); - copySetting(path); - return config.getStringList(path); - } - - public String get(String path, String boo) { - config.addDefault(path, boo); - copySetting(path); - return get(path, boo, true); - } - - public String get(String path, String boo, boolean colorize) { - config.addDefault(path, boo); - copySetting(path); - if (colorize) - return ChatColor.translateAlternateColorCodes('&', config.getString(path)); - return config.getString(path); - } - - public Double get(String path, Double boo) { - config.addDefault(path, boo); - copySetting(path); - return config.getDouble(path); - } - - public synchronized void copySetting(String path) { - writer.set(path, config.get(path)); - } - - private static List ColorsArray(List text) { - List temp = new ArrayList(); - for (String part : text) { - temp.add(Colors(part)); - } - return temp; - } - - private static String Colors(String text) { - return ChatColor.translateAlternateColorCodes('&', text); - } -} +package com.bekvon.bukkit.residence.containers; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.configuration.file.YamlConfiguration; + +import com.bekvon.bukkit.residence.CommentedYamlConfiguration; + +import org.bukkit.ChatColor; + +public class ConfigReader { + YamlConfiguration config; + CommentedYamlConfiguration writer; + + public ConfigReader(YamlConfiguration config, CommentedYamlConfiguration writer) { + this.config = config; + this.writer = writer; + } + + public CommentedYamlConfiguration getW() { + return writer; + } + + public YamlConfiguration getC() { + return config; + } + + public Boolean get(String path, Boolean boo) { + config.addDefault(path, boo); + copySetting(path); + return config.getBoolean(path); + } + + public int get(String path, int boo) { + config.addDefault(path, boo); + copySetting(path); + return config.getInt(path); + } + + public List getIntList(String path, List list) { + config.addDefault(path, list); + copySetting(path); + return config.getIntegerList(path); + } + + public List get(String path, List list, boolean colorize) { + config.addDefault(path, list); + copySetting(path); + if (colorize) + return ColorsArray(config.getStringList(path)); + return config.getStringList(path); + } + + public List get(String path, List list) { + config.addDefault(path, list); + copySetting(path); + return config.getStringList(path); + } + + public String get(String path, String boo) { + config.addDefault(path, boo); + copySetting(path); + return get(path, boo, true); + } + + public String get(String path, String boo, boolean colorize) { + config.addDefault(path, boo); + copySetting(path); + if (colorize) + return ChatColor.translateAlternateColorCodes('&', config.getString(path)); + return config.getString(path); + } + + public Double get(String path, Double boo) { + config.addDefault(path, boo); + copySetting(path); + return config.getDouble(path); + } + + public synchronized void copySetting(String path) { + writer.set(path, config.get(path)); + } + + private static List ColorsArray(List text) { + List temp = new ArrayList(); + for (String part : text) { + temp.add(Colors(part)); + } + return temp; + } + + private static String Colors(String text) { + return ChatColor.translateAlternateColorCodes('&', text); + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index 8466925ca..321bef5cb 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -3,6 +3,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.entity.Player; @@ -44,7 +45,7 @@ public void withdraw(CommandSender sender, int amount, boolean resadmin) { if (!Residence.getConfigManager().enableEconomy()) { Residence.msg(sender, lm.Economy_MarketDisabled); } - if (!resadmin && !res.getPermissions().playerHas(sender.getName(), "bank", false)) { + if (!resadmin && !res.getPermissions().playerHas(sender.getName(), Flags.bank, false)) { Residence.msg(sender, lm.Bank_NoAccess); return; } @@ -62,7 +63,7 @@ public void deposit(CommandSender sender, int amount, boolean resadmin) { if (!Residence.getConfigManager().enableEconomy()) { Residence.msg(sender, lm.Economy_MarketDisabled); } - if (!resadmin && !res.getPermissions().playerHas(sender.getName(), "bank", false)) { + if (!resadmin && !res.getPermissions().playerHas(sender.getName(), Flags.bank, false)) { Residence.msg(sender, lm.Bank_NoAccess); return; } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 91a4a0413..6df8c00aa 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -673,7 +673,7 @@ public void setRentRepeatable(Player player, ClaimedResidence res, boolean value return; } - if (land == null || res == null || !res.isOwner(player) && !resadmin) { + if (land == null || !res.isOwner(player) && !resadmin) { Residence.msg(player, lm.Residence_NotOwner); return; } @@ -729,8 +729,7 @@ public void setRentedRepeatable(Player player, ClaimedResidence res, boolean val else Residence.msg(player, lm.Rent_DisableRenew, res.getResidenceName()); - if (res != null) - Residence.getSignUtil().CheckSign(res); + Residence.getSignUtil().CheckSign(res); } public void printRentInfo(Player player, String landName) { @@ -757,7 +756,7 @@ public void printRentInfo(Player player, ClaimedResidence res) { if (rented != null) { Residence.msg(player, lm.Residence_RentedBy, rented.player); - if (rented.player.equals(player.getName()) || res != null && res.isOwner(player) || Residence.isResAdminOn(player)) + if (rented.player.equals(player.getName()) || res.isOwner(player) || Residence.isResAdminOn(player)) player.sendMessage((rented.AutoPay ? Residence.msg(lm.Rent_AutoPayTurnedOn) : Residence.msg(lm.Rent_AutoPayTurnedOff)) + "\n"); Residence.msg(player, lm.Rent_Expire, GetTime.getTime(rented.endTime)); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 96676ad5f..d9c40b839 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -1,624 +1,624 @@ -package com.bekvon.bukkit.residence.listeners; - -import java.util.ArrayList; -import java.util.List; - -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.entity.Snowman; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.BlockState; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockBurnEvent; -import org.bukkit.event.block.BlockDispenseEvent; -import org.bukkit.event.block.BlockFadeEvent; -import org.bukkit.event.block.BlockFormEvent; -import org.bukkit.event.block.BlockFromToEvent; -import org.bukkit.event.block.BlockGrowEvent; -import org.bukkit.event.block.BlockIgniteEvent; -import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; -import org.bukkit.event.block.BlockPhysicsEvent; -import org.bukkit.event.block.BlockPistonExtendEvent; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.block.BlockPlaceEvent; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockSpreadEvent; -import org.bukkit.event.block.EntityBlockFormEvent; -import org.bukkit.event.block.LeavesDecayEvent; -import org.bukkit.event.entity.EntityChangeBlockEvent; -import org.bukkit.event.world.StructureGrowEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.metadata.FixedMetadataValue; - -public class ResidenceBlockListener implements Listener { - - private List MessageInformed = new ArrayList(); - private List ResCreated = new ArrayList(); - - private Residence plugin; - - public ResidenceBlockListener(Residence residence) { - this.plugin = residence; - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlantGrow(BlockGrowEvent event) { - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.grow, true)) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onVineGrow(BlockSpreadEvent event) { - if (event.getSource().getType() != Material.VINE) - return; - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.grow, true)) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onleaveDecay(LeavesDecayEvent event) { - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.decay, true)) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onTreeGrowt(StructureGrowEvent event) { - if (Residence.isDisabledWorldListener(event.getWorld())) - return; - FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); - if (!perms.has(Flags.grow, true)) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onTreeGrow(StructureGrowEvent event) { - - if (Residence.isDisabledWorldListener(event.getWorld())) - return; - - ClaimedResidence startRes = Residence.getResidenceManager().getByLoc(event.getLocation()); - List blocks = event.getBlocks(); - int i = 0; - for (BlockState one : blocks) { - ClaimedResidence targetRes = Residence.getResidenceManager().getByLoc(one.getLocation()); - if (startRes == null && targetRes != null || - targetRes != null && startRes != null && !startRes.getName().equals(targetRes.getName()) && !startRes.isOwner(targetRes.getOwner())) { - BlockState matas = blocks.get(i); - matas.setType(Material.AIR); - blocks.set(i, matas); - } - i++; - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockBreak(BlockBreakEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { - return; - } - - Block block = event.getBlock(); - Material mat = block.getType(); - String world = block.getWorld().getName(); - String group = Residence.getPermissionManager().getGroupNameByPlayer(player); - if (Residence.getItemManager().isIgnored(mat, group, world)) { - return; - } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); - if (Residence.getConfigManager().enabledRentSystem() && res != null) { - String resname = res.getName(); - if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { - Residence.msg(player, lm.Rent_ModifyDeny); - event.setCancelled(true); - return; - } - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); - String pname = player.getName(); - if (res != null && res.getItemIgnoreList().isListed(mat)) - return; - - boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), Flags.destroy, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)); - boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), Flags.container, true); - if (!hasdestroy && !player.hasPermission("residence.bypass.destroy")) { - Residence.msg(player, lm.Flag_Deny, Flags.destroy); - event.setCancelled(true); - } else if (!hasContainer && mat == Material.CHEST) { - Residence.msg(player, lm.Flag_Deny, Flags.container); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockForm(BlockFormEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - if (!(event instanceof EntityBlockFormEvent)) - return; - - if (((EntityBlockFormEvent) event).getEntity() instanceof Snowman) { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.snowtrail, true)) { - event.setCancelled(true); - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onIceForm(BlockFormEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - - Material ice = Material.getMaterial("FROSTED_ICE"); - - if (event.getNewState().getType() != Material.SNOW && event.getNewState().getType() != Material.ICE && ice != null && ice != event.getNewState().getType()) - return; - - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.iceform, true)) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onIceMelt(BlockFadeEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - - if (event.getNewState().getType() != Material.STATIONARY_WATER && event.getBlock().getState().getType() != Material.SNOW && event.getBlock().getState() - .getType() != Material.SNOW_BLOCK) - return; - - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.icemelt, true)) { - event.setCancelled(true); - } - } - - public static final String SourceResidenceName = "SourceResidenceName"; - - @EventHandler - public void onEntityChangeBlock(EntityChangeBlockEvent event) { - if (event.getEntityType() != EntityType.FALLING_BLOCK) - return; - Entity ent = event.getEntity(); - if (!ent.hasMetadata(SourceResidenceName)) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - String resName = res == null ? "NULL" : res.getName(); - ent.setMetadata(SourceResidenceName, new FixedMetadataValue(plugin, resName)); - } else { - String saved = ent.getMetadata(SourceResidenceName).get(0).asString(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - String resName = res == null ? "NULL" : res.getName(); - if (!saved.equalsIgnoreCase(resName)) { - event.setCancelled(true); - ent.remove(); - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockFall(EntityChangeBlockEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - if (!Residence.getConfigManager().isBlockFall()) - return; - - if ((event.getEntityType() != EntityType.FALLING_BLOCK)) - return; - - if (event.getTo().hasGravity()) - return; - - Block block = event.getBlock(); - - if (block == null) - return; - - if (!Residence.getConfigManager().getBlockFallWorlds().contains(block.getLocation().getWorld().getName())) - return; - - if (block.getY() <= Residence.getConfigManager().getBlockFallLevel()) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); - Location loc = new Location(block.getLocation().getWorld(), block.getX(), block.getY(), block.getZ()); - for (int i = loc.getBlockY() - 1; i >= Residence.getConfigManager().getBlockFallLevel() - 1; i--) { - loc.setY(i); - if (loc.getBlock().getType() != Material.AIR) { - ClaimedResidence targetRes = Residence.getResidenceManager().getByLoc(loc); - if (res == null && targetRes != null || res != null && targetRes == null || res != null && targetRes != null && !res.getName() - .equals(targetRes.getName())) { - event.setCancelled(true); - block.setType(Material.AIR); - } - return; - } - } - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onChestPlace(BlockPlaceEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - if (!Residence.getConfigManager().ShowNoobMessage()) - return; - - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - Block block = event.getBlock(); - if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) - return; - - ArrayList list = Residence.getPlayerManager().getResidenceList(player.getName()); - if (list.size() != 0) - return; - - if (MessageInformed.contains(player.getName())) - return; - - Residence.msg(player, lm.General_NewPlayerInfo); - - MessageInformed.add(player.getName()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onChestPlaceCreateRes(BlockPlaceEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - if (!Residence.getConfigManager().isNewPlayerUse()) - return; - - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - Block block = event.getBlock(); - if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) - return; - - ArrayList list = Residence.getPlayerManager().getResidenceList(player.getName()); - if (list.size() != 0) - return; - - if (ResCreated.contains(player.getName())) - return; - - Location loc = block.getLocation(); - - Residence.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), loc.getBlockX() - Residence.getConfigManager().getNewPlayerRangeX(), loc - .getBlockY() - Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() - Residence.getConfigManager().getNewPlayerRangeZ()), true); - Residence.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), loc.getBlockX() + Residence.getConfigManager().getNewPlayerRangeX(), loc - .getBlockY() + Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() + Residence.getConfigManager().getNewPlayerRangeZ()), true); - - boolean created = Residence.getResidenceManager().addResidence(player, player.getName(), Residence.getSelectionManager().getPlayerLoc1(player.getName()), - Residence.getSelectionManager().getPlayerLoc2(player.getName()), Residence.getConfigManager().isNewPlayerFree()); - if (created) - ResCreated.add(player.getName()); - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockPlace(BlockPlaceEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { - return; - } - Block block = event.getBlock(); - Material mat = block.getType(); - String world = block.getWorld().getName(); - String group = Residence.getPermissionManager().getGroupNameByPlayer(player); - if (Residence.getItemManager().isIgnored(mat, group, world)) { - return; - } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); - if (Residence.getConfigManager().enabledRentSystem() && res != null) { - String resname = res.getName(); - if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { - Residence.msg(player, lm.Rent_ModifyDeny); - event.setCancelled(true); - return; - } - } - String pname = player.getName(); - if (res != null && !res.getItemBlacklist().isAllowed(mat)) { - Residence.msg(player, lm.General_ItemBlacklisted); - event.setCancelled(true); - return; - } - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); - boolean hasplace = perms.playerHas(pname, world, Flags.place, perms.playerHas(pname, world, Flags.build, true)); - if (!hasplace && !player.hasPermission("residence.bypass.build")) { - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.place.getName()); - return; - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockSpread(BlockSpreadEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - Location loc = event.getBlock().getLocation(); - FlagPermissions perms = Residence.getPermsByLoc(loc); - if (!perms.has(Flags.spread, true)) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockPistonRetract(BlockPistonRetractEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.piston, true)) { - event.setCancelled(true); - return; - } - - List blocks = Residence.getNms().getPistonRetractBlocks(event); - - if (!event.isSticky()) - return; - - ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); - - for (Block block : blocks) { - Location locFrom = block.getLocation(); - ClaimedResidence blockFrom = Residence.getResidenceManager().getByLoc(locFrom); - if (blockFrom == null) - continue; - if (blockFrom == pistonRes || blockFrom == null && pistonRes != null) - continue; - if (blockFrom != null && pistonRes != null && blockFrom.isOwner(pistonRes.getOwner())) - continue; - if (blockFrom.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyFalse)) - continue; - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockPistonExtend(BlockPistonExtendEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.piston, true)) { - event.setCancelled(true); - return; - } - - ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); - - BlockFace dir = event.getDirection(); - for (Block block : event.getBlocks()) { - Location locFrom = block.getLocation(); - Location locTo = new Location(block.getWorld(), block.getX() + dir.getModX(), block.getY() + dir.getModY(), block.getZ() + dir.getModZ()); - ClaimedResidence blockFrom = Residence.getResidenceManager().getByLoc(locFrom); - ClaimedResidence blockTo = Residence.getResidenceManager().getByLoc(locTo); - - if (pistonRes == null && blockTo != null && blockTo.getPermissions().has(Flags.pistonprotection, true)) { - event.setCancelled(true); - return; - } else if (blockTo != null && blockFrom == null && blockTo.getPermissions().has(Flags.pistonprotection, true)) { - event.setCancelled(true); - return; - } else if (blockTo != null && blockFrom != null && (pistonRes != null && !blockTo.isOwner(pistonRes.getOwner()) || !blockTo.isOwner(blockFrom.getOwner())) - && blockTo.getPermissions().has(Flags.pistonprotection, true)) { - event.setCancelled(true); - return; - } - - } - - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockFromTo(BlockFromToEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); - boolean hasflow = perms.has(Flags.flow, true); - Material mat = event.getBlock().getType(); - if (!hasflow) { - event.setCancelled(true); - return; - } - if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { - if (!perms.has(Flags.lavaflow, hasflow)) { - event.setCancelled(true); - } - return; - } - if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { - if (!perms.has(Flags.waterflow, hasflow)) { - event.setCancelled(true); - } - return; - } - } - - @SuppressWarnings({ "deprecation" }) - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onLandDryFade(BlockFadeEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - - Material mat = event.getBlock().getType(); - if (mat != Material.SOIL) - return; - - FlagPermissions perms = Residence.getPermsByLoc(event.getNewState().getLocation()); - if (!perms.has(Flags.dryup, true)) { - event.getBlock().setData((byte) 7); - event.setCancelled(true); - return; - } - } - - @SuppressWarnings("deprecation") - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onLandDryPhysics(BlockPhysicsEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - - Material mat = event.getBlock().getType(); - if (mat != Material.SOIL) - return; - - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.dryup, true)) { - event.getBlock().setData((byte) 7); - event.setCancelled(true); - return; - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onDispense(BlockDispenseEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - if (event.isCancelled()) - return; - - Location location = new Location(event.getBlock().getWorld(), event.getVelocity().getBlockX(), event.getVelocity().getBlockY(), event.getVelocity().getBlockZ()); - - ClaimedResidence targetres = Residence.getResidenceManager().getByLoc(location); - - if (targetres == null && location.getBlockY() >= Residence.getConfigManager().getPlaceLevel() && Residence.getConfigManager().getNoPlaceWorlds().contains(location - .getWorld().getName())) { - ItemStack mat = event.getItem(); - if (Residence.getConfigManager().isNoLavaPlace()) - if (mat.getType() == Material.LAVA_BUCKET) { - event.setCancelled(true); - return; - } - - if (Residence.getConfigManager().isNoWaterPlace()) - if (mat.getType() == Material.WATER_BUCKET) { - event.setCancelled(true); - return; - } - } - - ClaimedResidence sourceres = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); - - if ((sourceres == null && targetres != null || sourceres != null && targetres == null || sourceres != null && targetres != null && !sourceres.getName().equals( - targetres.getName())) && (event.getItem().getType() == Material.LAVA_BUCKET || event.getItem().getType() == Material.WATER_BUCKET)) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onLavaWaterFlow(BlockFromToEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - Material mat = event.getBlock().getType(); - - Location location = event.getToBlock().getLocation(); - if (!Residence.getConfigManager().getNoFlowWorlds().contains(location.getWorld().getName())) - return; - - if (location.getBlockY() < Residence.getConfigManager().getFlowLevel()) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(location); - - if (res != null) - return; - - if (Residence.getConfigManager().isNoLava()) - if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { - event.setCancelled(true); - return; - } - - if (Residence.getConfigManager().isNoWater()) - if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { - event.setCancelled(true); - return; - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockBurn(BlockBurnEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.firespread, true)) - event.setCancelled(true); - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockIgnite(BlockIgniteEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - IgniteCause cause = event.getCause(); - if (cause == IgniteCause.SPREAD) { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.firespread, true)) - event.setCancelled(true); - } else if (cause == IgniteCause.FLINT_AND_STEEL) { - Player player = event.getPlayer(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player); - if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), Flags.ignite, true) && !Residence.isResAdminOn(player)) { - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.ignite.getName()); - } - } else { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.ignite, true)) { - event.setCancelled(true); - } - } - } -} +package com.bekvon.bukkit.residence.listeners; + +import java.util.ArrayList; +import java.util.List; + +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.Snowman; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockDispenseEvent; +import org.bukkit.event.block.BlockFadeEvent; +import org.bukkit.event.block.BlockFormEvent; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockGrowEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; +import org.bukkit.event.block.BlockPhysicsEvent; +import org.bukkit.event.block.BlockPistonExtendEvent; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.block.BlockPlaceEvent; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockSpreadEvent; +import org.bukkit.event.block.EntityBlockFormEvent; +import org.bukkit.event.block.LeavesDecayEvent; +import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.world.StructureGrowEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; + +public class ResidenceBlockListener implements Listener { + + private List MessageInformed = new ArrayList(); + private List ResCreated = new ArrayList(); + + private Residence plugin; + + public ResidenceBlockListener(Residence residence) { + this.plugin = residence; + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlantGrow(BlockGrowEvent event) { + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.grow, true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onVineGrow(BlockSpreadEvent event) { + if (event.getSource().getType() != Material.VINE) + return; + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.grow, true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onleaveDecay(LeavesDecayEvent event) { + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.decay, true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onTreeGrowt(StructureGrowEvent event) { + if (Residence.isDisabledWorldListener(event.getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); + if (!perms.has(Flags.grow, true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onTreeGrow(StructureGrowEvent event) { + + if (Residence.isDisabledWorldListener(event.getWorld())) + return; + + ClaimedResidence startRes = Residence.getResidenceManager().getByLoc(event.getLocation()); + List blocks = event.getBlocks(); + int i = 0; + for (BlockState one : blocks) { + ClaimedResidence targetRes = Residence.getResidenceManager().getByLoc(one.getLocation()); + if (startRes == null && targetRes != null || + targetRes != null && startRes != null && !startRes.getName().equals(targetRes.getName()) && !startRes.isOwner(targetRes.getOwner())) { + BlockState matas = blocks.get(i); + matas.setType(Material.AIR); + blocks.set(i, matas); + } + i++; + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockBreak(BlockBreakEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) { + return; + } + + Block block = event.getBlock(); + Material mat = block.getType(); + String world = block.getWorld().getName(); + String group = Residence.getPermissionManager().getGroupNameByPlayer(player); + if (Residence.getItemManager().isIgnored(mat, group, world)) { + return; + } + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (Residence.getConfigManager().enabledRentSystem() && res != null) { + String resname = res.getName(); + if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { + Residence.msg(player, lm.Rent_ModifyDeny); + event.setCancelled(true); + return; + } + } + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + String pname = player.getName(); + if (res != null && res.getItemIgnoreList().isListed(mat)) + return; + + boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), Flags.destroy, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)); + boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), Flags.container, true); + if (!hasdestroy && !player.hasPermission("residence.bypass.destroy")) { + Residence.msg(player, lm.Flag_Deny, Flags.destroy); + event.setCancelled(true); + } else if (!hasContainer && mat == Material.CHEST) { + Residence.msg(player, lm.Flag_Deny, Flags.container); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockForm(BlockFormEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + if (!(event instanceof EntityBlockFormEvent)) + return; + + if (((EntityBlockFormEvent) event).getEntity() instanceof Snowman) { + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.snowtrail, true)) { + event.setCancelled(true); + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onIceForm(BlockFormEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + Material ice = Material.getMaterial("FROSTED_ICE"); + + if (event.getNewState().getType() != Material.SNOW && event.getNewState().getType() != Material.ICE && ice != null && ice != event.getNewState().getType()) + return; + + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.iceform, true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onIceMelt(BlockFadeEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + if (event.getNewState().getType() != Material.STATIONARY_WATER && event.getBlock().getState().getType() != Material.SNOW && event.getBlock().getState() + .getType() != Material.SNOW_BLOCK) + return; + + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.icemelt, true)) { + event.setCancelled(true); + } + } + + public static final String SourceResidenceName = "SourceResidenceName"; + + @EventHandler + public void onEntityChangeBlock(EntityChangeBlockEvent event) { + if (event.getEntityType() != EntityType.FALLING_BLOCK) + return; + Entity ent = event.getEntity(); + if (!ent.hasMetadata(SourceResidenceName)) { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + String resName = res == null ? "NULL" : res.getName(); + ent.setMetadata(SourceResidenceName, new FixedMetadataValue(plugin, resName)); + } else { + String saved = ent.getMetadata(SourceResidenceName).get(0).asString(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + String resName = res == null ? "NULL" : res.getName(); + if (!saved.equalsIgnoreCase(resName)) { + event.setCancelled(true); + ent.remove(); + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockFall(EntityChangeBlockEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + if (!Residence.getConfigManager().isBlockFall()) + return; + + if ((event.getEntityType() != EntityType.FALLING_BLOCK)) + return; + + if (event.getTo().hasGravity()) + return; + + Block block = event.getBlock(); + + if (block == null) + return; + + if (!Residence.getConfigManager().getBlockFallWorlds().contains(block.getLocation().getWorld().getName())) + return; + + if (block.getY() <= Residence.getConfigManager().getBlockFallLevel()) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + Location loc = new Location(block.getLocation().getWorld(), block.getX(), block.getY(), block.getZ()); + for (int i = loc.getBlockY() - 1; i >= Residence.getConfigManager().getBlockFallLevel() - 1; i--) { + loc.setY(i); + if (loc.getBlock().getType() != Material.AIR) { + ClaimedResidence targetRes = Residence.getResidenceManager().getByLoc(loc); + if (res == null && targetRes != null || res != null && targetRes == null || res != null && targetRes != null && !res.getName() + .equals(targetRes.getName())) { + event.setCancelled(true); + block.setType(Material.AIR); + } + return; + } + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onChestPlace(BlockPlaceEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + if (!Residence.getConfigManager().ShowNoobMessage()) + return; + + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + Block block = event.getBlock(); + if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) + return; + + ArrayList list = Residence.getPlayerManager().getResidenceList(player.getName()); + if (list.size() != 0) + return; + + if (MessageInformed.contains(player.getName())) + return; + + Residence.msg(player, lm.General_NewPlayerInfo); + + MessageInformed.add(player.getName()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onChestPlaceCreateRes(BlockPlaceEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + if (!Residence.getConfigManager().isNewPlayerUse()) + return; + + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + Block block = event.getBlock(); + if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) + return; + + ArrayList list = Residence.getPlayerManager().getResidenceList(player.getName()); + if (list.size() != 0) + return; + + if (ResCreated.contains(player.getName())) + return; + + Location loc = block.getLocation(); + + Residence.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), loc.getBlockX() - Residence.getConfigManager().getNewPlayerRangeX(), loc + .getBlockY() - Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() - Residence.getConfigManager().getNewPlayerRangeZ()), true); + Residence.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), loc.getBlockX() + Residence.getConfigManager().getNewPlayerRangeX(), loc + .getBlockY() + Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() + Residence.getConfigManager().getNewPlayerRangeZ()), true); + + boolean created = Residence.getResidenceManager().addResidence(player, player.getName(), Residence.getSelectionManager().getPlayerLoc1(player.getName()), + Residence.getSelectionManager().getPlayerLoc2(player.getName()), Residence.getConfigManager().isNewPlayerFree()); + if (created) + ResCreated.add(player.getName()); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockPlace(BlockPlaceEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) { + return; + } + Block block = event.getBlock(); + Material mat = block.getType(); + String world = block.getWorld().getName(); + String group = Residence.getPermissionManager().getGroupNameByPlayer(player); + if (Residence.getItemManager().isIgnored(mat, group, world)) { + return; + } + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (Residence.getConfigManager().enabledRentSystem() && res != null) { + String resname = res.getName(); + if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { + Residence.msg(player, lm.Rent_ModifyDeny); + event.setCancelled(true); + return; + } + } + String pname = player.getName(); + if (res != null && !res.getItemBlacklist().isAllowed(mat)) { + Residence.msg(player, lm.General_ItemBlacklisted); + event.setCancelled(true); + return; + } + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + boolean hasplace = perms.playerHas(pname, world, Flags.place, perms.playerHas(pname, world, Flags.build, true)); + if (!hasplace && !player.hasPermission("residence.bypass.build")) { + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, Flags.place.getName()); + return; + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockSpread(BlockSpreadEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + Location loc = event.getBlock().getLocation(); + FlagPermissions perms = Residence.getPermsByLoc(loc); + if (!perms.has(Flags.spread, true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockPistonRetract(BlockPistonRetractEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.piston, true)) { + event.setCancelled(true); + return; + } + + List blocks = Residence.getNms().getPistonRetractBlocks(event); + + if (!event.isSticky()) + return; + + ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + + for (Block block : blocks) { + Location locFrom = block.getLocation(); + ClaimedResidence blockFrom = Residence.getResidenceManager().getByLoc(locFrom); + if (blockFrom == null) + continue; + if (blockFrom == pistonRes) + continue; + if (pistonRes != null && blockFrom.isOwner(pistonRes.getOwner())) + continue; + if (blockFrom.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyFalse)) + continue; + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockPistonExtend(BlockPistonExtendEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.piston, true)) { + event.setCancelled(true); + return; + } + + ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + + BlockFace dir = event.getDirection(); + for (Block block : event.getBlocks()) { + Location locFrom = block.getLocation(); + Location locTo = new Location(block.getWorld(), block.getX() + dir.getModX(), block.getY() + dir.getModY(), block.getZ() + dir.getModZ()); + ClaimedResidence blockFrom = Residence.getResidenceManager().getByLoc(locFrom); + ClaimedResidence blockTo = Residence.getResidenceManager().getByLoc(locTo); + + if (pistonRes == null && blockTo != null && blockTo.getPermissions().has(Flags.pistonprotection, true)) { + event.setCancelled(true); + return; + } else if (blockTo != null && blockFrom == null && blockTo.getPermissions().has(Flags.pistonprotection, true)) { + event.setCancelled(true); + return; + } else if (blockTo != null && blockFrom != null && (pistonRes != null && !blockTo.isOwner(pistonRes.getOwner()) || !blockTo.isOwner(blockFrom.getOwner())) + && blockTo.getPermissions().has(Flags.pistonprotection, true)) { + event.setCancelled(true); + return; + } + + } + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockFromTo(BlockFromToEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); + boolean hasflow = perms.has(Flags.flow, true); + Material mat = event.getBlock().getType(); + if (!hasflow) { + event.setCancelled(true); + return; + } + if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { + if (!perms.has(Flags.lavaflow, hasflow)) { + event.setCancelled(true); + } + return; + } + if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { + if (!perms.has(Flags.waterflow, hasflow)) { + event.setCancelled(true); + } + return; + } + } + + @SuppressWarnings({ "deprecation" }) + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onLandDryFade(BlockFadeEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + Material mat = event.getBlock().getType(); + if (mat != Material.SOIL) + return; + + FlagPermissions perms = Residence.getPermsByLoc(event.getNewState().getLocation()); + if (!perms.has(Flags.dryup, true)) { + event.getBlock().setData((byte) 7); + event.setCancelled(true); + return; + } + } + + @SuppressWarnings("deprecation") + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onLandDryPhysics(BlockPhysicsEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + Material mat = event.getBlock().getType(); + if (mat != Material.SOIL) + return; + + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.dryup, true)) { + event.getBlock().setData((byte) 7); + event.setCancelled(true); + return; + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onDispense(BlockDispenseEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + if (event.isCancelled()) + return; + + Location location = new Location(event.getBlock().getWorld(), event.getVelocity().getBlockX(), event.getVelocity().getBlockY(), event.getVelocity().getBlockZ()); + + ClaimedResidence targetres = Residence.getResidenceManager().getByLoc(location); + + if (targetres == null && location.getBlockY() >= Residence.getConfigManager().getPlaceLevel() && Residence.getConfigManager().getNoPlaceWorlds().contains(location + .getWorld().getName())) { + ItemStack mat = event.getItem(); + if (Residence.getConfigManager().isNoLavaPlace()) + if (mat.getType() == Material.LAVA_BUCKET) { + event.setCancelled(true); + return; + } + + if (Residence.getConfigManager().isNoWaterPlace()) + if (mat.getType() == Material.WATER_BUCKET) { + event.setCancelled(true); + return; + } + } + + ClaimedResidence sourceres = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + + if ((sourceres == null && targetres != null || sourceres != null && targetres == null || sourceres != null && targetres != null && !sourceres.getName().equals( + targetres.getName())) && (event.getItem().getType() == Material.LAVA_BUCKET || event.getItem().getType() == Material.WATER_BUCKET)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onLavaWaterFlow(BlockFromToEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + Material mat = event.getBlock().getType(); + + Location location = event.getToBlock().getLocation(); + if (!Residence.getConfigManager().getNoFlowWorlds().contains(location.getWorld().getName())) + return; + + if (location.getBlockY() < Residence.getConfigManager().getFlowLevel()) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(location); + + if (res != null) + return; + + if (Residence.getConfigManager().isNoLava()) + if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { + event.setCancelled(true); + return; + } + + if (Residence.getConfigManager().isNoWater()) + if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { + event.setCancelled(true); + return; + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockBurn(BlockBurnEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.firespread, true)) + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockIgnite(BlockIgniteEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + IgniteCause cause = event.getCause(); + if (cause == IgniteCause.SPREAD) { + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.firespread, true)) + event.setCancelled(true); + } else if (cause == IgniteCause.FLINT_AND_STEEL) { + Player player = event.getPlayer(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player); + if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), Flags.ignite, true) && !Residence.isResAdminOn(player)) { + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, Flags.ignite.getName()); + } + } else { + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.ignite, true)) { + event.setCancelled(true); + } + } + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index aac7d6c2b..b106bc0e1 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1,1927 +1,1924 @@ -package com.bekvon.bukkit.residence.listeners; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.WeatherType; -import org.bukkit.block.Block; -import org.bukkit.block.Sign; -import org.bukkit.entity.Boat; -import org.bukkit.entity.Damageable; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Hanging; -import org.bukkit.entity.HumanEntity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.SignChangeEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryAction; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerBucketEmptyEvent; -import org.bukkit.event.player.PlayerBucketFillEvent; -import org.bukkit.event.player.PlayerChangedWorldEvent; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.event.player.PlayerInteractEntityEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerLoginEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.event.player.PlayerShearEntityEvent; -import org.bukkit.event.player.PlayerTeleportEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.chat.ChatChannel; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.Visualizer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.economy.rent.RentableLand; -import com.bekvon.bukkit.residence.economy.rent.RentedLand; -import com.bekvon.bukkit.residence.event.*; -import com.bekvon.bukkit.residence.gui.SetFlag; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; -import com.bekvon.bukkit.residence.utils.GetTime; - -public class ResidencePlayerListener implements Listener { - - protected Map currentRes; - protected Map lastUpdate; - protected Map lastOutsideLoc; - protected int minUpdateTime; - protected boolean chatenabled; - protected List playerToggleChat = new ArrayList(); - - public static Map GUI = new HashMap(); - - private Residence plugin; - - public ResidencePlayerListener(Residence plugin) { - currentRes = new HashMap(); - lastUpdate = new HashMap(); - lastOutsideLoc = new HashMap(); - playerToggleChat.clear(); - minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); - chatenabled = Residence.getConfigManager().chatEnabled(); - for (Player player : Bukkit.getOnlinePlayers()) { - lastUpdate.put(player.getName(), System.currentTimeMillis()); - } - this.plugin = plugin; - } - - public Map getGUImap() { - return GUI; - } - - public void reload() { - currentRes = new HashMap(); - lastUpdate = new HashMap(); - lastOutsideLoc = new HashMap(); - playerToggleChat.clear(); - minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); - chatenabled = Residence.getConfigManager().chatEnabled(); - for (Player player : Bukkit.getOnlinePlayers()) { - lastUpdate.put(player.getName(), System.currentTimeMillis()); - } - } - - @EventHandler - public void onJump(PlayerMoveEvent event) { - Player player = event.getPlayer(); - if (player.isFlying()) - return; - - if (event.getTo().getY() - event.getFrom().getY() != 0.41999998688697815D) - return; - - FlagPermissions perms = Residence.getPermsByLoc(player.getLocation()); -// Debug.D("jump"); - - if (perms.has(Flags.jump2, FlagCombo.OnlyTrue)) - player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.3))); - else if (perms.has(Flags.jump3, FlagCombo.OnlyTrue)) - player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.6))); - - } - - // Adding to chat prefix main residence name - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onPlayerGlobalChat(AsyncPlayerChatEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (!Residence.getConfigManager().isGlobalChatEnabled()) - return; - if (!Residence.getConfigManager().isGlobalChatSelfModify()) - return; - Player player = event.getPlayer(); - - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - - if (rPlayer == null) - return; - - if (rPlayer.getResList().size() == 0) - return; - - ClaimedResidence res = rPlayer.getMainResidence(); - - if (res == null) - return; - - String honorific = Residence.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); - - String format = event.getFormat(); - format = format.replace("%1$s", honorific + "%1$s"); - event.setFormat(format); - } - - // Changing chat prefix variable to job name - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onPlayerChatGlobalLow(AsyncPlayerChatEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (!Residence.getConfigManager().isGlobalChatEnabled()) - return; - if (Residence.getConfigManager().isGlobalChatSelfModify()) - return; - Player player = event.getPlayer(); - - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - - if (rPlayer == null) - return; - - if (rPlayer.getResList().size() == 0) - return; - - ClaimedResidence res = rPlayer.getMainResidence(); - - if (res == null) - return; - - String honorific = Residence.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); - if (honorific.equalsIgnoreCase(" ")) - honorific = ""; - String format = event.getFormat(); - if (!format.contains("{residence}")) - return; - format = format.replace("{residence}", honorific); - event.setFormat(format); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceBackup(ResidenceFlagChangeEvent event) { - if (!event.getFlag().equalsIgnoreCase(Flags.backup.getName())) - return; - Player player = event.getPlayer(); - if (!Residence.getConfigManager().RestoreAfterRentEnds) - return; - if (!Residence.getConfigManager().SchematicsSaveOnFlagChange) - return; - if (Residence.getSchematicManager() == null) - return; - if (player != null && !player.hasPermission("residence.backup")) - event.setCancelled(true); - else - Residence.getSchematicManager().save(event.getResidence()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceBackupRename(ResidenceRenameEvent event) { - if (Residence.getSchematicManager() == null) - return; - Residence.getSchematicManager().rename(event.getResidence(), event.getNewResidenceName()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceDelete(ResidenceDeleteEvent event) { - if (Residence.getSchematicManager() == null) - return; - Residence.getSchematicManager().delete(event.getResidence()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerLogin(PlayerLoginEvent event) { - if (!Residence.getConfigManager().isRentInformOnEnding()) - return; - final Player player = event.getPlayer(); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (!player.isOnline()) - return; - List list = Residence.getRentManager().getRentedLandsList(player.getName()); - if (list.isEmpty()) - return; - for (String one : list) { - RentedLand rentedland = Residence.getRentManager().getRentedLand(one); - if (rentedland == null) - continue; - if (rentedland.AutoPay) - continue; - if (rentedland.endTime - System.currentTimeMillis() < Residence.getConfigManager().getRentInformBefore() * 60 * 24 * 7) { - Residence.msg(player, lm.Residence_EndingRent, one, GetTime.getTime(rentedland.endTime)); - } - } - } - }, Residence.getConfigManager().getRentInformDelay() * 20L); - } - - @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) - public void onFishingRodUse(PlayerFishEvent event) { - if (event == null) - return; - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (event.getCaught() == null) - return; - if (Residence.getNms().isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { - FlagPermissions perm = Residence.getPermsByLoc(event.getCaught().getLocation()); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getCaught().getLocation()); - if (!perm.has(Flags.hook, false) && res != null && !res.getPermissions().playerHas(player, Flags.hook, true) || - !perm.has(Flags.hook, false) && res != null && !res.getPermissions().playerHas(player, Flags.hook, false)) { - event.setCancelled(true); - if (res != null) - Residence.msg(player, lm.Residence_FlagDeny, Flags.hook.getName(), res.getName()); - return; - } - } - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { - if (event.isCancelled()) - return; - - if (!event.getFlag().equalsIgnoreCase(Flags.day.getName()) && - !event.getFlag().equalsIgnoreCase(Flags.night.getName())) - return; - - switch (event.getNewState()) { - case NEITHER: - case FALSE: - for (Player one : event.getResidence().getPlayersInResidence()) - one.resetPlayerTime(); - break; - case INVALID: - break; - case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.day.getName())) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setPlayerTime(6000L, false); - if (event.getFlag().equalsIgnoreCase(Flags.night.getName())) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setPlayerTime(14000L, false); - break; - default: - break; - } - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { - if (event.isCancelled()) - return; - - if (!event.getFlag().equalsIgnoreCase(Flags.glow.getName())) - return; - - switch (event.getNewState()) { - case NEITHER: - case FALSE: - if (Residence.getVersionChecker().GetVersion() > 1900 && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setGlowing(false); - break; - case INVALID: - break; - case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.glow.getName())) - if (Residence.getVersionChecker().GetVersion() > 1900) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setGlowing(true); - break; - default: - break; - } - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onFlagChangeWSpeed(ResidenceFlagChangeEvent event) { - if (event.isCancelled()) - return; - - if (!event.getFlag().equalsIgnoreCase(Flags.wspeed1.getName()) && - !event.getFlag().equalsIgnoreCase(Flags.wspeed2.getName())) - return; - - switch (event.getNewState()) { - case NEITHER: - case FALSE: - for (Player one : event.getResidence().getPlayersInResidence()) - one.setWalkSpeed(0.2F); - break; - case INVALID: - break; - case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.wspeed1.getName())) { - for (Player one : event.getResidence().getPlayersInResidence()) - one.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); - if (event.getResidence().getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - event.getResidence().getPermissions().setFlag(Flags.wspeed2.getName(), FlagState.NEITHER); - } else if (event.getFlag().equalsIgnoreCase(Flags.wspeed2.getName())) { - for (Player one : event.getResidence().getPlayersInResidence()) - one.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); - if (event.getResidence().getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - event.getResidence().getPermissions().setFlag(Flags.wspeed1.getName(), FlagState.NEITHER); - } - break; - default: - break; - } - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onFlagChangeJump(ResidenceFlagChangeEvent event) { - if (event.isCancelled()) - return; - - if (!event.getFlag().equalsIgnoreCase(Flags.jump2.getName()) && - !event.getFlag().equalsIgnoreCase(Flags.jump3.getName())) - return; - - switch (event.getNewState()) { - case NEITHER: - case FALSE: - case INVALID: - break; - case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.jump2.getName())) { - if (event.getResidence().getPermissions().has(Flags.jump3, FlagCombo.OnlyTrue)) - event.getResidence().getPermissions().setFlag(Flags.jump3.getName(), FlagState.NEITHER); - } else if (event.getFlag().equalsIgnoreCase(Flags.jump3.getName())) { - if (event.getResidence().getPermissions().has(Flags.jump2, FlagCombo.OnlyTrue)) - event.getResidence().getPermissions().setFlag(Flags.jump2.getName(), FlagState.NEITHER); - } - break; - default: - break; - } - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onFlagChangeSunRain(ResidenceFlagChangeEvent event) { - if (event.isCancelled()) - return; - - if (!event.getFlag().equalsIgnoreCase(Flags.sun.getName()) && !event.getFlag().equalsIgnoreCase(Flags.rain.getName())) - return; - - switch (event.getNewState()) { - case NEITHER: - case FALSE: - for (Player one : event.getResidence().getPlayersInResidence()) - one.resetPlayerWeather(); - break; - case INVALID: - break; - case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.sun.getName())) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setPlayerWeather(WeatherType.CLEAR); - if (event.getFlag().equalsIgnoreCase(Flags.rain.getName())) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setPlayerWeather(WeatherType.DOWNFALL); - break; - default: - break; - } - } - - @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) - public void onCommand(PlayerCommandPreprocessEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); - if (resname == null) - return; - ClaimedResidence res = Residence.getResidenceManager().getByName(resname); - if (res == null) - return; - if (res.getPermissions().playerHas(player.getName(), Flags.command, true)) - return; - - if (Residence.getPermissionManager().isResidenceAdmin(player)) - return; - - if (player.hasPermission("residence.flag.command.bypass")) - return; - - String msg = event.getMessage().replace(" ", "_"); - - int white = 0; - int black = 0; - - for (String oneWhite : res.getCmdWhiteList()) { - if (msg.startsWith("/" + oneWhite)) { - if (oneWhite.contains("_") && oneWhite.split("_").length > white) - white = oneWhite.split("_").length; - else if (white == 0) - white = 1; - } - } - - for (String oneBlack : res.getCmdBlackList()) { - if (msg.startsWith("/" + oneBlack)) { - if (msg.contains("_")) - black = oneBlack.split("_").length; - else - black = 1; - break; - } - } - - if (black == 0) - for (String oneBlack : res.getCmdBlackList()) { - if (oneBlack.equalsIgnoreCase("*")) { - if (msg.contains("_")) - black = msg.split("_").length; - break; - } - } - - if (white != 0 && white >= black || black == 0) - return; - - event.setCancelled(true); - Residence.msg(player, lm.Residence_FlagDeny, Flags.command.getName(), res.getName()); - - } - - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onFlagGuiClick(InventoryClickEvent event) { - if (this.getGUImap().size() == 0) - return; - - Player player = (Player) event.getWhoClicked(); - - if (!this.getGUImap().containsKey(player.getName())) - return; - - event.setCancelled(true); - int slot = event.getRawSlot(); - - if (slot > 53 || slot < 0) - return; - - SetFlag setFlag = this.getGUImap().get(player.getName()); - ClickType click = event.getClick(); - InventoryAction action = event.getAction(); - setFlag.toggleFlag(slot, click, action); - setFlag.recalculateInv(); - player.getOpenInventory().getTopInventory().setContents(setFlag.getInventory().getContents()); - } - - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onFlagGuiClose(InventoryCloseEvent event) { - if (this.getGUImap().isEmpty()) - return; - HumanEntity player = event.getPlayer(); - if (!this.getGUImap().containsKey(player.getName())) - return; - this.getGUImap().remove(player.getName()); - } - - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onSignInteract(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - - Block block = event.getClickedBlock(); - - if (block == null) - return; - - if (!(block.getState() instanceof Sign)) - return; - - Player player = event.getPlayer(); - - Location loc = block.getLocation(); - - for (Signs one : Residence.getSignUtil().getSigns().GetAllSigns()) { - if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) - continue; - if (one.GetLocation().getBlockX() != loc.getBlockX()) - continue; - if (one.GetLocation().getBlockY() != loc.getBlockY()) - continue; - if (one.GetLocation().getBlockZ() != loc.getBlockZ()) - continue; - - ClaimedResidence res = one.GetResidence(); - - boolean ForSale = res.isForSell(); - boolean ForRent = res.isForRent(); - String landName = res.getName(); - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (ForSale) { - Bukkit.dispatchCommand(player, "res market buy " + landName); - break; - } - - if (ForRent) { - if (res.isRented() && player.isSneaking()) - Bukkit.dispatchCommand(player, "res market release " + landName); - else { - boolean stage = true; - if (player.isSneaking()) - stage = false; - Bukkit.dispatchCommand(player, "res market rent " + landName + " " + stage); - } - break; - } - } else if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - if (ForRent && res.isRented() && Residence.getRentManager().getRentingPlayer(res).equals(player.getName())) { - Residence.getRentManager().payRent(player, res, false); - } - } - } - } - - @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) - public void onSignCreate(SignChangeEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Block block = event.getBlock(); - - if (!(block.getState() instanceof Sign)) - return; - - Sign sign = (Sign) block.getState(); - - if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(Residence.msg(lm.Sign_TopLine))) - return; - - Signs signInfo = new Signs(); - - Location loc = sign.getLocation(); - - String landName = null; - - Player player = event.getPlayer(); - - ClaimedResidence res = null; - if (!event.getLine(1).equalsIgnoreCase("")) { - - String resname = event.getLine(1); - if (!event.getLine(2).equalsIgnoreCase("")) - resname += "." + event.getLine(2); - if (!event.getLine(3).equalsIgnoreCase("")) - resname += "." + event.getLine(3); - - res = Residence.getResidenceManager().getByName(resname); - - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return; - } - - landName = res.getName(); - - } else { - res = Residence.getResidenceManager().getByLoc(loc); - landName = Residence.getResidenceManager().getNameByLoc(loc); - } - - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return; - } - - final ClaimedResidence residence = res; - - boolean ForSale = Residence.getTransactionManager().isForSale(landName); - boolean ForRent = Residence.getRentManager().isForRent(landName); - - int category = 1; - if (Residence.getSignUtil().getSigns().GetAllSigns().size() > 0) - category = Residence.getSignUtil().getSigns().GetAllSigns().get(Residence.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; - - if (ForSale || ForRent) { - signInfo.setCategory(category); - signInfo.setResidence(res); - signInfo.setLocation(loc); -// signInfo.updateLocation(); - Residence.getSignUtil().getSigns().addSign(signInfo); - Residence.getSignUtil().saveSigns(); - } - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - Residence.getSignUtil().CheckSign(residence); - } - }, 5L); - } - - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onSignDestroy(BlockBreakEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.isCancelled()) - return; - - Block block = event.getBlock(); - - if (block == null) - return; - - if (!(block.getState() instanceof Sign)) - return; - - Location loc = block.getLocation(); - - for (Signs one : Residence.getSignUtil().getSigns().GetAllSigns()) { - - if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) - continue; - if (one.GetLocation().getBlockX() != loc.getBlockX()) - continue; - if (one.GetLocation().getBlockY() != loc.getBlockY()) - continue; - if (one.GetLocation().getBlockZ() != loc.getBlockZ()) - continue; - - Residence.getSignUtil().getSigns().removeSign(one); - Residence.getSignUtil().saveSigns(); - break; - } - } - - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerQuit(PlayerQuitEvent event) { - String pname = event.getPlayer().getName(); - currentRes.remove(pname); - lastUpdate.remove(pname); - lastOutsideLoc.remove(pname); - Residence.getChatManager().removeFromChannel(pname); - Residence.getPlayerListener().removePlayerResidenceChat(pname); - Residence.getOfflinePlayerMap().put(pname, event.getPlayer()); - if (Residence.getAutoSelectionManager().getList().containsKey(pname.toLowerCase())) - Residence.getAutoSelectionManager().getList().remove(pname); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerJoin(PlayerChangedWorldEvent event) { - Player player = event.getPlayer(); - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.turnResAdminOn(player); - } - Residence.getPermissionManager().updateGroupNameForPlayer(player, true); - - FlagPermissions perms = Residence.getPermsByLocForPlayer(player.getLocation(), player); - - f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( - "residence.nofly.bypass")) { - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res != null && res.isOwner(player)) - break f; - - Location lc = player.getLocation(); - Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); - location.setPitch(lc.getPitch()); - location.setYaw(lc.getYaw()); - int from = location.getBlockY(); - int maxH = location.getWorld().getMaxHeight() - 1; - for (int i = 0; i < maxH; i++) { - location.setY(from - i); - Block block = location.getBlock(); - if (!Residence.getNms().isEmptyBlock(block)) { - location.setY(from - i + 1); - break; - } - if (location.getBlockY() <= 0) { - player.setFlying(false); - player.setAllowFlight(false); - Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); - return; - } - } - Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); - player.teleport(location); - player.setFlying(false); - player.setAllowFlight(false); - } - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerJoin(PlayerJoinEvent event) { - Player player = event.getPlayer(); - lastUpdate.put(player.getName(), 0L); - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.turnResAdminOn(player); - } - handleNewLocation(player, player.getLocation(), true); - - final Player p = player; - Residence.getPlayerManager().playerJoin(p); - if (p != null) - Residence.getPermissionManager().updateGroupNameForPlayer(p, true); - - if (player.hasPermission("residence.versioncheck")) { - Residence.getVersionChecker().VersionCheck(player); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerSpawn(PlayerRespawnEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getRespawnLocation().getWorld())) - return; - Location loc = event.getRespawnLocation(); - Boolean bed = event.isBedSpawn(); - Player player = event.getPlayer(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res == null) { - return; - } - if (res.getPermissions().playerHas(player, Flags.move, true)) { - return; - } - if (bed) { - loc = player.getWorld().getSpawnLocation(); - } - res = Residence.getResidenceManager().getByLoc(loc); - if (res != null && !res.getPermissions().playerHas(player.getName(), Flags.move, true)) { - loc = res.getOutsideFreeLoc(loc, player); - } - - Residence.msg(player, lm.General_NoSpawn); - event.setRespawnLocation(loc); - } - - @SuppressWarnings("deprecation") - private static boolean isContainer(Material mat, Block block) { - return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container.getName()) - || Residence.getConfigManager().getCustomContainers().contains(block.getTypeId()); - } - - @SuppressWarnings("deprecation") - private static boolean isCanUseEntity_RClickOnly(Material mat, Block block) { - - switch (mat.name()) { - case "ITEM_FRAME": - case "BEACON": - case "FLOWER_POT": - case "COMMAND": - case "ANVIL": - case "CAKE_BLOCK": - case "NOTE_BLOCK": - case "DIODE": - case "DIODE_BLOCK_OFF": - case "DIODE_BLOCK_ON": - case "REDSTONE_COMPARATOR": - case "REDSTONE_COMPARATOR_OFF": - case "REDSTONE_COMPARATOR_ON": - case "BED_BLOCK": - case "WORKBENCH": - case "BREWING_STAND": - case "ENCHANTMENT_TABLE": - case "DAYLIGHT_DETECTOR": - case "DAYLIGHT_DETECTOR_INVERTED": - return true; - default: - return Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); - } - } - - private static boolean isCanUseEntity(Material mat, Block block) { - return Residence.getNms().isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerFireInteract(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.getAction() != Action.LEFT_CLICK_BLOCK) - return; - - Block block = event.getClickedBlock(); - - if (block == null) - return; - - Block relativeBlock = block.getRelative(event.getBlockFace()); - - if (relativeBlock == null) - return; - - Player player = event.getPlayer(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); - if (relativeBlock.getType() == Material.FIRE) { - boolean hasplace = perms.playerHas(player.getName(), player.getWorld().getName(), Flags.place, perms.playerHas(player.getName(), player.getWorld().getName(), - Flags.build, true)); - if (!hasplace) { - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); - return; - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlatePress(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.getAction() != Action.PHYSICAL) - return; - Block block = event.getClickedBlock(); - if (block == null) - return; - Material mat = block.getType(); - Player player = event.getPlayer(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); - String world = player.getWorld().getName(); - boolean resadmin = Residence.isResAdminOn(player); - if (!resadmin) { - boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); - boolean haspressure = perms.playerHas(player.getName(), world, Flags.pressure, hasuse); - if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE || Residence.getNms().isPlate(mat))) { - event.setCancelled(true); - return; - } - } - if (!perms.playerHas(player.getName(), world, Flags.trample, perms.playerHas(player.getName(), world, Flags.build, true)) && (mat == Material.SOIL - || mat == Material.SOUL_SAND)) { - event.setCancelled(true); - return; - } - return; - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onSelection(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - - Player player = event.getPlayer(); - @SuppressWarnings("deprecation") - int heldItemId = player.getItemInHand().getTypeId(); - - if (heldItemId != Residence.getConfigManager().getSelectionTooldID()) - return; - - if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) - return; - - if (player.getGameMode() == GameMode.CREATIVE) - event.setCancelled(true); - - boolean resadmin = Residence.isResAdminOn(player); - - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group - .canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { - - Block block = event.getClickedBlock(); - - if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc1(player, loc, true); - Residence.msg(player, lm.Select_PrimaryPoint, Residence.msg(lm.General_CoordsTop, loc.getBlockX(), loc.getBlockY(), - loc.getBlockZ())); - event.setCancelled(true); - } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && Residence.getNms().isMainHand(event)) { - Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc2(player, loc, true); - Residence.msg(player, lm.Select_SecondaryPoint, Residence.msg(lm.General_CoordsBottom, loc.getBlockX(), loc - .getBlockY(), loc.getBlockZ())); - event.setCancelled(true); - } - - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) - Residence.getSelectionManager().showSelectionInfoInActionBar(player); - } - return; - } - - @SuppressWarnings("deprecation") - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onInfoCheck(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.getAction() != Action.LEFT_CLICK_BLOCK) - return; - Block block = event.getClickedBlock(); - if (block == null) - return; - Player player = event.getPlayer(); - - ItemStack item = event.getItem(); - if (item == null) - return; - - int heldItemId = item.getTypeId(); - - if (heldItemId != Residence.getConfigManager().getInfoToolID()) - return; - - Location loc = block.getLocation(); - String res = Residence.getResidenceManager().getNameByLoc(loc); - if (res != null) - Residence.getResidenceManager().printAreaInfo(res, player, false); - else - Residence.msg(player, lm.Residence_NoResHere); - event.setCancelled(true); - return; - - } - - @SuppressWarnings("deprecation") - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteract(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - ItemStack iih = Residence.getNms().itemInMainHand(player); - Material heldItem = iih.getType(); - int heldItemId = iih.getTypeId(); - Block block = event.getClickedBlock(); - if (block == null) - return; - - Material mat = block.getType(); - - if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK - || Residence.getNms().isCanUseEntity_BothClick(mat, block))) { - if (heldItemId != Residence.getConfigManager().getSelectionTooldID() && heldItemId != Residence.getConfigManager().getInfoToolID() - && heldItem != Material.INK_SACK && !Residence.getNms().isArmorStandMaterial(heldItem) && !Residence.getNms().isBoat(heldItem)) { - return; - } - } - - if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - - String world = player.getWorld().getName(); - String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); - boolean resadmin = Residence.isResAdminOn(player); - if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - Residence.msg(player, lm.General_ItemBlacklisted); - event.setCancelled(true); - return; - } - - if (resadmin) - return; - - int blockId = block.getTypeId(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); - if (heldItem != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (heldItem == Material.INK_SACK) { - if (Residence.getNms().itemInMainHand(player).getData().getData() == 15 && block.getType() == Material.GRASS || iih.getData().getData() == 3 - && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { - perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, Flags.build, true)) { - Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); - event.setCancelled(true); - return; - } - } - } - if (Residence.getNms().isArmorStandMaterial(heldItem) || Residence.getNms().isBoat(heldItem)) { - perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, Flags.build, true)) { - Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); - event.setCancelled(true); - return; - } - } - } - - if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); - for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { - if (mat != checkMat.getKey()) - continue; - - if (perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) - continue; - - if (hasuse || checkMat.getValue().equals(Flags.container.getName())) { - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, checkMat.getValue()); - return; - } - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.use); - return; - - } - if (Residence.getConfigManager().getCustomContainers().contains(blockId)) { - if (!perms.playerHas(player.getName(), world, Flags.container, hasuse)) { - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.container.getName()); - return; - } - } - if (Residence.getConfigManager().getCustomBothClick().contains(blockId)) { - if (!hasuse) { - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.use.getName()); - return; - } - } - if (Residence.getConfigManager().getCustomRightClick().contains(blockId) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (!hasuse) { - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.use.getName()); - return; - } - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { - - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - /* Trade */ - if (ent.getType() != EntityType.VILLAGER) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - - if (res != null && !res.getPermissions().playerHas(player.getName(), Flags.trade, true)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.trade.getName(), res.getName()); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - - if (ent.getType() != EntityType.HORSE) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res == null) - return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.container, true) && player.isSneaking()) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); - event.setCancelled(true); - } else if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.riding, false)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - - if (ent.getType() != EntityType.MINECART_CHEST && ent.getType() != EntityType.MINECART_HOPPER) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res == null) - return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.container, true)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - - if (ent.getType() != EntityType.MINECART && ent.getType() != EntityType.BOAT) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res == null) - return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.riding, false)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - /* Dye */ - if (ent.getType() != EntityType.SHEEP) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res == null) - return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.dye, true)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.dye.getName(), res.getName()); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerShearEntity(PlayerShearEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.isCancelled()) - return; - - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getEntity(); - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res == null) - return; - - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.shear, true)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.shear.getName(), res.getName()); - event.setCancelled(true); - } - - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { - - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - - /* Container - ItemFrame protection */ - if (!(ent instanceof Hanging)) - return; - - Hanging hanging = (Hanging) ent; - - if (hanging.getType() != EntityType.ITEM_FRAME) { - return; - } - - Material heldItem = Residence.getNms().itemInMainHand(player).getType(); - - FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); - String world = player.getWorld().getName(); - String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); - if (!Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - Residence.msg(player, lm.General_ItemBlacklisted); - event.setCancelled(true); - return; - } - if (!perms.playerHas(player.getName(), world, Flags.container, perms.playerHas(player.getName(), world, Flags.use, true))) { - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.container.getName()); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Location loc = event.getBlockClicked().getLocation(); - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res != null) { - if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { - if (Residence.getRentManager().isRented(res.getName())) { - Residence.msg(player, lm.Rent_ModifyDeny); - event.setCancelled(true); - return; - } - } - - Material mat = event.getBucket(); - if ((!res.getPermissions().playerHas(player.getName(), Flags.bucket, true) && !res.getPermissions().playerHas(player.getName(), Flags.bucketempty, true)) - && Residence.getConfigManager().getNoPlaceWorlds().contains(loc.getWorld().getName())) { - if (mat == Material.LAVA_BUCKET) { - event.setCancelled(true); - return; - } - if (mat == Material.WATER_BUCKET) { - event.setCancelled(true); - return; - } - } - } - - String pname = player.getName(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); - if (!perms.playerHas(pname, player.getWorld().getName(), Flags.bucket, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)) && - !perms.playerHas(pname, player.getWorld().getName(), Flags.bucketempty, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true))) { - Residence.msg(player, lm.Flag_Deny, Flags.bucket.getName()); - event.setCancelled(true); - return; - } - - Material mat = event.getBucket(); - int level = Residence.getConfigManager().getPlaceLevel(); - if (res == null && Residence.getConfigManager().isNoLavaPlace() && loc.getBlockY() >= level - 1 && Residence.getConfigManager() - .getNoPlaceWorlds().contains(loc.getWorld().getName())) { - if (mat == Material.LAVA_BUCKET) { - if (!Residence.msg(lm.General_CantPlaceLava).equalsIgnoreCase("")) - Residence.msg(player, lm.General_CantPlaceLava, level); - event.setCancelled(true); - return; - } - } - - if (res == null && Residence.getConfigManager().isNoWaterPlace() && loc.getBlockY() >= level - 1 && Residence.getConfigManager() - .getNoPlaceWorlds().contains(loc.getWorld().getName())) - if (mat == Material.WATER_BUCKET) { - if (!Residence.msg(lm.General_CantPlaceWater).equalsIgnoreCase("")) - Residence.msg(player, lm.General_CantPlaceWater, level); - event.setCancelled(true); - return; - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerBucketFill(PlayerBucketFillEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); - if (res != null) { - if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { - if (Residence.getRentManager().isRented(res.getName())) { - Residence.msg(player, lm.Rent_ModifyDeny); - event.setCancelled(true); - return; - } - } - } - - String pname = player.getName(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); - boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), Flags.bucket, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)); - boolean hasbucketfill = perms.playerHas(pname, player.getWorld().getName(), Flags.bucketfill, perms.playerHas(pname, player.getWorld().getName(), Flags.build, - true)); - if (!hasbucket && !hasbucketfill) { - Residence.msg(player, lm.Flag_Deny, Flags.bucket.getName()); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerTeleport(PlayerTeleportEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - - if (player.hasMetadata("NPC")) - return; - - Location loc = event.getTo(); - - if (Residence.isResAdminOn(player)) { - handleNewLocation(player, loc, false); - return; - } - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res == null) - return; - if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event - .getCause() == TeleportCause.PLUGIN) { - if (!res.getPermissions().playerHas(player.getName(), Flags.move, true) && !res.isOwner(player)) { - event.setCancelled(true); - Residence.msg(player, lm.Residence_MoveDeny, res.getName()); - return; - } - } else if (event.getCause() == TeleportCause.ENDER_PEARL) { - if (!res.getPermissions().playerHas(player, Flags.enderpearl, true)) { - event.setCancelled(true); - Residence.msg(player, lm.Residence_FlagDeny, Flags.enderpearl.getName(), res.getName()); - return; - } - } - if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && Residence.getConfigManager().isBlockAnyTeleportation()) { - if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.tp, true) && !player.hasPermission("residence.admin.tp")) { - event.setCancelled(true); - Residence.msg(player, lm.General_TeleportDeny, res.getName()); - return; - } - } - if (Residence.getNms().isChorusTeleport(event.getCause())) { - if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.chorustp, true) && !player.hasPermission("residence.admin.tp")) { - event.setCancelled(true); - Residence.msg(player, lm.Residence_FlagDeny, Flags.chorustp.getName(), res.getName()); - return; - } - } - - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerDeath(final PlayerDeathEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - Player player = event.getEntity(); - if (player == null) - return; - if (player.hasMetadata("NPC")) - return; - Location loc = player.getLocation(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res == null) - return; - - if (res.getPermissions().has(Flags.keepinv, false)) - event.setKeepInventory(true); - - if (res.getPermissions().has(Flags.keepexp, false)) { - event.setKeepLevel(true); - event.setDroppedExp(0); - } - - if (res.getPermissions().has(Flags.respawn, false) && Bukkit.getVersion().toString().contains("Spigot")) - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - try { - event.getEntity().spigot().respawn(); - } catch (Exception e) { - } - return; - } - }, 1L); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceChange(ResidenceChangedEvent event) { - ClaimedResidence res = event.getTo(); - ClaimedResidence ResOld = event.getFrom(); - Player player = event.getPlayer(); - - if (res == null && ResOld != null) { - if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) - player.resetPlayerTime(); - - if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - player.setWalkSpeed(0.2F); - - if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) - player.resetPlayerWeather(); - - if (Residence.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(false); - } - - if (res != null && ResOld != null && res != ResOld) { - if (Residence.getVersionChecker().GetVersion() > 1900) { - if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(true); - else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(false); - } - - if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) - player.setPlayerTime(6000L, false); - else if (ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) - player.resetPlayerTime(); - - if (res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) - player.setPlayerTime(14000L, false); - else if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) - player.resetPlayerTime(); - - if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); - else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - player.setWalkSpeed(0.2F); - - if (res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) { - player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); - } else if (ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - player.setWalkSpeed(0.2F); - - if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) { - player.setPlayerWeather(WeatherType.CLEAR); - } else if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) - player.resetPlayerWeather(); - - if (res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) { - player.setPlayerWeather(WeatherType.DOWNFALL); - } else if (ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) - player.resetPlayerWeather(); - } - - if (res != null && ResOld == null) { - if (Residence.getVersionChecker().GetVersion() > 1900) { - if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(true); - } - - if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) - player.setPlayerTime(6000L, false); - - if (res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) - player.setPlayerTime(14000L, false); - - if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); - - if (res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); - - if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) - player.setPlayerWeather(WeatherType.CLEAR); - - if (res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) - player.setPlayerWeather(WeatherType.DOWNFALL); - } - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerMove(PlayerMoveEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (player == null) - return; - - if (player.hasMetadata("NPC")) - return; - - Location locfrom = event.getFrom(); - Location locto = event.getTo(); - if (locfrom.getBlockX() == locto.getBlockX() && locfrom.getBlockY() == locto.getBlockY() && locfrom.getBlockZ() == locto.getBlockZ()) - return; - - String name = player.getName(); - - if (name == null) - return; - - long last = lastUpdate.get(name); - long now = System.currentTimeMillis(); - if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) - return; - - this.lastUpdate.put(name, now); - - handleNewLocation(player, locto, true); - if (!Residence.getTeleportDelayMap().isEmpty() && Residence.getConfigManager().getTeleportDelay() > 0 && Residence.getTeleportDelayMap().contains(player - .getName())) { - Residence.getTeleportDelayMap().remove(player.getName()); - Residence.msg(player, lm.General_TeleportCanceled); - if (Residence.getConfigManager().isTeleportTitleMessage()) - Residence.getAB().sendTitle(player, "", ""); - } - } - - public void handleNewLocation(final Player player, Location loc, boolean move) { - - String pname = player.getName(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - - ClaimedResidence orres = res; - String areaname = null; - String subzone = null; - if (res != null) { - areaname = res.getName(); - while (res.getSubzoneByLoc(loc) != null) { - res = res.getSubzoneByLoc(player.getLocation()); - subzone = res.getName(); - areaname = areaname + "." + subzone; - } - } - - ClaimedResidence ResOld = null; - if (currentRes.containsKey(pname)) { - ResOld = Residence.getResidenceManager().getByName(currentRes.get(pname)); - if (ResOld == null) { - currentRes.remove(pname); - } else { - if (res != null && ResOld.getName().equals(res.getName())) { - - f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( - "residence.nofly.bypass")) { - if (res != null && res.isOwner(player)) - break f; - Location lc = player.getLocation(); - Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); - location.setPitch(lc.getPitch()); - location.setYaw(lc.getYaw()); - int from = location.getBlockY(); - int maxH = location.getWorld().getMaxHeight() - 1; - for (int i = 0; i < maxH; i++) { - location.setY(from - i); - Block block = location.getBlock(); - if (!Residence.getNms().isEmptyBlock(block)) { - location.setY(from - i + 1); - break; - } - if (location.getBlockY() <= 0) { - Location lastLoc = lastOutsideLoc.get(pname); - if (lastLoc != null) - player.teleport(lastLoc); - else - player.teleport(res.getOutsideFreeLoc(loc, player)); - Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); - return; - } - } - Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); - player.teleport(location); - player.setFlying(false); - player.setAllowFlight(false); - } - - lastOutsideLoc.put(pname, loc); - return; - } - } - } - - if (!Residence.getAutoSelectionManager().getList().isEmpty()) { - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - Residence.getAutoSelectionManager().UpdateSelection(player); - return; - } - }); - } - - if (res == null) { - lastOutsideLoc.put(pname, loc); - if (ResOld != null) { - String leave = ResOld.getLeaveMessage(); - - // New ResidenceChangeEvent - ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); - Residence.getServ().getPluginManager().callEvent(chgEvent); - - if (leave != null && !leave.equals("")) { - if (Residence.getConfigManager().useActionBar()) { - Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) - .toString()); - } else { - Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); - } - } - currentRes.remove(pname); - } - return; - } - - if (move) { - if (!res.getPermissions().playerHas(pname, Flags.move, true) && !Residence.isResAdminOn(player) && !res.isOwner(player) && !player.hasPermission( - "residence.admin.move")) { - - Location lastLoc = lastOutsideLoc.get(pname); - - if (Residence.getConfigManager().BounceAnimation()) { - Visualizer v = new Visualizer(player); - v.setErrorAreas(res); - v.setOnce(true); - Residence.getSelectionManager().showBounds(player, v); - } - - ClaimedResidence preRes = Residence.getResidenceManager().getByLoc(lastLoc); - - if (preRes != null && !preRes.getPermissions().playerHas(pname, Flags.tp, true) && !player.hasPermission("residence.admin.tp")) { - Location newLoc = res.getOutsideFreeLoc(loc, player); - player.teleport(newLoc); - } else if (lastLoc != null) { - player.teleport(lastLoc); - } else if (lastLoc == null) { - Location newLoc = res.getOutsideFreeLoc(loc, player); - player.teleport(newLoc); - } - - if (Residence.getConfigManager().useActionBar()) { - Residence.getAB().send(player, Residence.msg(lm.Residence_MoveDeny, orres.getName())); - } else { - Residence.msg(player, lm.Residence_MoveDeny, orres.getName()); - } - return; - } - - // Preventing fly in residence only when player has move permission - f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( - "residence.nofly.bypass")) { - if (res != null && res.isOwner(player)) - break f; - Location lc = player.getLocation(); - Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); - location.setPitch(lc.getPitch()); - location.setYaw(lc.getYaw()); - int from = location.getBlockY(); - int maxH = location.getWorld().getMaxHeight() - 1; - for (int i = 0; i < maxH; i++) { - location.setY(from - i); - Block block = location.getBlock(); - if (!Residence.getNms().isEmptyBlock(block)) { - location.setY(from - i + 1); - break; - } - if (location.getBlockY() <= 0) { - Location lastLoc = lastOutsideLoc.get(pname); - if (lastLoc != null) - player.teleport(lastLoc); - else - player.teleport(res.getOutsideFreeLoc(loc, player)); - - Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); - return; - } - } - Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); - player.teleport(location); - player.setFlying(false); - player.setAllowFlight(false); - } - } - - lastOutsideLoc.put(pname, loc); - - if (!currentRes.containsKey(pname) || ResOld != res) { - currentRes.put(pname, areaname); - - // "from" residence for ResidenceChangedEvent - ClaimedResidence chgFrom = null; - if (ResOld != res && ResOld != null) { - String leave = ResOld.getLeaveMessage(); - chgFrom = ResOld; - if (leave != null && !leave.equals("") && ResOld != res.getParent()) { - if (Residence.getConfigManager().useActionBar()) { - Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) - .toString()); - } else { - Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); - } - } - } - - String enterMessage = res.getEnterMessage(); - - // New ResidenceChangedEvent - ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); - Residence.getServ().getPluginManager().callEvent(chgEvent); - - if (!(ResOld != null && res == ResOld.getParent())) { - if (Residence.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (Residence.getRentManager().isForRent(areaname) || Residence - .getTransactionManager().isForSale(areaname))) { - if (Residence.getRentManager().isForRent(areaname) && !Residence.getRentManager().isRented(areaname)) { - RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); - if (rentable != null) - Residence.getAB().send(player, Residence.msg(lm.Residence_CanBeRented, areaname, rentable.cost, rentable.days)); - } else if (Residence.getTransactionManager().isForSale(areaname) && !res.isOwner(player)) { - int sale = Residence.getTransactionManager().getSaleAmount(areaname); - Residence.getAB().send(player, Residence.msg(lm.Residence_CanBeBought, areaname, sale)); - } - } else if (enterMessage != null && !enterMessage.equals("")) { - if (Residence.getConfigManager().useActionBar()) { - Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)) - .toString()); - } else { - Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); - } - } - } - } - } - - public String insertMessages(Player player, String areaname, ClaimedResidence res, String message) { - try { - message = message.replaceAll("%player", player.getName()); - message = message.replaceAll("%owner", res.getPermissions().getOwner()); - message = message.replaceAll("%residence", areaname); - } catch (Exception ex) { - return ""; - } - return message; - } - - public void doHeals() { - try { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); - ClaimedResidence res = null; - - if (resname == null) - continue; - - res = Residence.getResidenceManager().getByName(resname); - - if (!res.getPermissions().has(Flags.healing, false)) - continue; - - Damageable damage = player; - double health = damage.getHealth(); - if (health < damage.getMaxHealth() && !player.isDead()) { - player.setHealth(health + 1); - } - } - } catch (Exception ex) { - } - } - - public void feed() { - try { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); - - if (resname == null) - continue; - - ClaimedResidence res = Residence.getResidenceManager().getByName(resname); - - if (!res.getPermissions().has(Flags.feed, false)) - continue; - - int food = player.getFoodLevel(); - if (food < 20 && !player.isDead()) { - player.setFoodLevel(food + 1); - } - } - } catch (Exception ex) { - } - } - - public void DespawnMobs() { - try { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); - - if (resname == null) - continue; - - ClaimedResidence res = null; - res = Residence.getResidenceManager().getByName(resname); - - if (!res.getPermissions().has(Flags.nomobs, false)) - continue; - - List entities = Bukkit.getServer().getWorld(res.getWorld()).getEntities(); - for (Entity ent : entities) { - if (!ResidenceEntityListener.isMonster(ent)) - continue; - - if (res.containsLoc(ent.getLocation())) { - ent.remove(); - } - } - } - } catch (Exception ex) { - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerChat(AsyncPlayerChatEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - String pname = event.getPlayer().getName(); - if (!chatenabled || !playerToggleChat.contains(pname)) - return; - - ChatChannel channel = Residence.getChatManager().getPlayerChannel(pname); - if (channel != null) { - channel.chat(pname, event.getMessage()); - } - event.setCancelled(true); - } - - public void tooglePlayerResidenceChat(Player player, String residence) { - String pname = player.getName(); - playerToggleChat.add(pname); - Residence.msg(player, lm.Chat_ChatChannelChange, residence); - } - - public void removePlayerResidenceChat(String pname) { - playerToggleChat.remove(pname); - Player player = Bukkit.getPlayer(pname); - if (player != null) - Residence.msg(player, lm.Chat_ChatChannelLeave); - } - - public void removePlayerResidenceChat(Player player) { - String pname = player.getName(); - playerToggleChat.remove(pname); - Residence.msg(player, lm.Chat_ChatChannelLeave); - } - - public String getCurrentResidenceName(String player) { - return currentRes.get(player); - } -} +package com.bekvon.bukkit.residence.listeners; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.WeatherType; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.entity.Boat; +import org.bukkit.entity.Damageable; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Hanging; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.SignChangeEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; +import org.bukkit.event.player.PlayerChangedWorldEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerFishEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerShearEntityEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.economy.rent.RentableLand; +import com.bekvon.bukkit.residence.economy.rent.RentedLand; +import com.bekvon.bukkit.residence.event.*; +import com.bekvon.bukkit.residence.gui.SetFlag; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.GetTime; + +public class ResidencePlayerListener implements Listener { + + protected Map currentRes; + protected Map lastUpdate; + protected Map lastOutsideLoc; + protected int minUpdateTime; + protected boolean chatenabled; + protected List playerToggleChat = new ArrayList(); + + public static Map GUI = new HashMap(); + + private Residence plugin; + + public ResidencePlayerListener(Residence plugin) { + currentRes = new HashMap(); + lastUpdate = new HashMap(); + lastOutsideLoc = new HashMap(); + playerToggleChat.clear(); + minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); + chatenabled = Residence.getConfigManager().chatEnabled(); + for (Player player : Bukkit.getOnlinePlayers()) { + lastUpdate.put(player.getName(), System.currentTimeMillis()); + } + this.plugin = plugin; + } + + public Map getGUImap() { + return GUI; + } + + public void reload() { + currentRes = new HashMap(); + lastUpdate = new HashMap(); + lastOutsideLoc = new HashMap(); + playerToggleChat.clear(); + minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); + chatenabled = Residence.getConfigManager().chatEnabled(); + for (Player player : Bukkit.getOnlinePlayers()) { + lastUpdate.put(player.getName(), System.currentTimeMillis()); + } + } + + @EventHandler + public void onJump(PlayerMoveEvent event) { + Player player = event.getPlayer(); + if (player.isFlying()) + return; + + if (event.getTo().getY() - event.getFrom().getY() != 0.41999998688697815D) + return; + + FlagPermissions perms = Residence.getPermsByLoc(player.getLocation()); +// Debug.D("jump"); + + if (perms.has(Flags.jump2, FlagCombo.OnlyTrue)) + player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.3))); + else if (perms.has(Flags.jump3, FlagCombo.OnlyTrue)) + player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.6))); + + } + + // Adding to chat prefix main residence name + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerGlobalChat(AsyncPlayerChatEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (!Residence.getConfigManager().isGlobalChatEnabled()) + return; + if (!Residence.getConfigManager().isGlobalChatSelfModify()) + return; + Player player = event.getPlayer(); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + + if (rPlayer == null) + return; + + if (rPlayer.getResList().size() == 0) + return; + + ClaimedResidence res = rPlayer.getMainResidence(); + + if (res == null) + return; + + String honorific = Residence.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); + + String format = event.getFormat(); + format = format.replace("%1$s", honorific + "%1$s"); + event.setFormat(format); + } + + // Changing chat prefix variable to job name + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerChatGlobalLow(AsyncPlayerChatEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (!Residence.getConfigManager().isGlobalChatEnabled()) + return; + if (Residence.getConfigManager().isGlobalChatSelfModify()) + return; + Player player = event.getPlayer(); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + + if (rPlayer == null) + return; + + if (rPlayer.getResList().size() == 0) + return; + + ClaimedResidence res = rPlayer.getMainResidence(); + + if (res == null) + return; + + String honorific = Residence.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); + if (honorific.equalsIgnoreCase(" ")) + honorific = ""; + String format = event.getFormat(); + if (!format.contains("{residence}")) + return; + format = format.replace("{residence}", honorific); + event.setFormat(format); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceBackup(ResidenceFlagChangeEvent event) { + if (!event.getFlag().equalsIgnoreCase(Flags.backup.getName())) + return; + Player player = event.getPlayer(); + if (!Residence.getConfigManager().RestoreAfterRentEnds) + return; + if (!Residence.getConfigManager().SchematicsSaveOnFlagChange) + return; + if (Residence.getSchematicManager() == null) + return; + if (player != null && !player.hasPermission("residence.backup")) + event.setCancelled(true); + else + Residence.getSchematicManager().save(event.getResidence()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceBackupRename(ResidenceRenameEvent event) { + if (Residence.getSchematicManager() == null) + return; + Residence.getSchematicManager().rename(event.getResidence(), event.getNewResidenceName()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceDelete(ResidenceDeleteEvent event) { + if (Residence.getSchematicManager() == null) + return; + Residence.getSchematicManager().delete(event.getResidence()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerLogin(PlayerLoginEvent event) { + if (!Residence.getConfigManager().isRentInformOnEnding()) + return; + final Player player = event.getPlayer(); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (!player.isOnline()) + return; + List list = Residence.getRentManager().getRentedLandsList(player.getName()); + if (list.isEmpty()) + return; + for (String one : list) { + RentedLand rentedland = Residence.getRentManager().getRentedLand(one); + if (rentedland == null) + continue; + if (rentedland.AutoPay) + continue; + if (rentedland.endTime - System.currentTimeMillis() < Residence.getConfigManager().getRentInformBefore() * 60 * 24 * 7) { + Residence.msg(player, lm.Residence_EndingRent, one, GetTime.getTime(rentedland.endTime)); + } + } + } + }, Residence.getConfigManager().getRentInformDelay() * 20L); + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onFishingRodUse(PlayerFishEvent event) { + if (event == null) + return; + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (event.getCaught() == null) + return; + if (Residence.getNms().isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { + FlagPermissions perm = Residence.getPermsByLoc(event.getCaught().getLocation()); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getCaught().getLocation()); + if (!perm.has(Flags.hook, false) && res != null && !res.getPermissions().playerHas(player, Flags.hook, true) || + !perm.has(Flags.hook, false) && res != null && !res.getPermissions().playerHas(player, Flags.hook, false)) { + event.setCancelled(true); + if (res != null) + Residence.msg(player, lm.Residence_FlagDeny, Flags.hook.getName(), res.getName()); + return; + } + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.day.getName()) && + !event.getFlag().equalsIgnoreCase(Flags.night.getName())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + for (Player one : event.getResidence().getPlayersInResidence()) + one.resetPlayerTime(); + break; + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.day.getName())) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setPlayerTime(6000L, false); + if (event.getFlag().equalsIgnoreCase(Flags.night.getName())) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setPlayerTime(14000L, false); + break; + default: + break; + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + if (Residence.getVersionChecker().GetVersion() > 1900 && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setGlowing(false); + break; + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + if (Residence.getVersionChecker().GetVersion() > 1900) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setGlowing(true); + break; + default: + break; + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeWSpeed(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.wspeed1.getName()) && + !event.getFlag().equalsIgnoreCase(Flags.wspeed2.getName())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(0.2F); + break; + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.wspeed1.getName())) { + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); + if (event.getResidence().getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + event.getResidence().getPermissions().setFlag(Flags.wspeed2.getName(), FlagState.NEITHER); + } else if (event.getFlag().equalsIgnoreCase(Flags.wspeed2.getName())) { + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); + if (event.getResidence().getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + event.getResidence().getPermissions().setFlag(Flags.wspeed1.getName(), FlagState.NEITHER); + } + break; + default: + break; + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeJump(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.jump2.getName()) && + !event.getFlag().equalsIgnoreCase(Flags.jump3.getName())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.jump2.getName())) { + if (event.getResidence().getPermissions().has(Flags.jump3, FlagCombo.OnlyTrue)) + event.getResidence().getPermissions().setFlag(Flags.jump3.getName(), FlagState.NEITHER); + } else if (event.getFlag().equalsIgnoreCase(Flags.jump3.getName())) { + if (event.getResidence().getPermissions().has(Flags.jump2, FlagCombo.OnlyTrue)) + event.getResidence().getPermissions().setFlag(Flags.jump2.getName(), FlagState.NEITHER); + } + break; + default: + break; + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeSunRain(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.sun.getName()) && !event.getFlag().equalsIgnoreCase(Flags.rain.getName())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + for (Player one : event.getResidence().getPlayersInResidence()) + one.resetPlayerWeather(); + break; + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.sun.getName())) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setPlayerWeather(WeatherType.CLEAR); + if (event.getFlag().equalsIgnoreCase(Flags.rain.getName())) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setPlayerWeather(WeatherType.DOWNFALL); + break; + default: + break; + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onCommand(PlayerCommandPreprocessEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + if (resname == null) + return; + ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + if (res == null) + return; + if (res.getPermissions().playerHas(player.getName(), Flags.command, true)) + return; + + if (Residence.getPermissionManager().isResidenceAdmin(player)) + return; + + if (player.hasPermission("residence.flag.command.bypass")) + return; + + String msg = event.getMessage().replace(" ", "_"); + + int white = 0; + int black = 0; + + for (String oneWhite : res.getCmdWhiteList()) { + if (msg.startsWith("/" + oneWhite)) { + if (oneWhite.contains("_") && oneWhite.split("_").length > white) + white = oneWhite.split("_").length; + else if (white == 0) + white = 1; + } + } + + for (String oneBlack : res.getCmdBlackList()) { + if (msg.startsWith("/" + oneBlack)) { + if (msg.contains("_")) + black = oneBlack.split("_").length; + else + black = 1; + break; + } + } + + if (black == 0) + for (String oneBlack : res.getCmdBlackList()) { + if (oneBlack.equalsIgnoreCase("*")) { + if (msg.contains("_")) + black = msg.split("_").length; + break; + } + } + + if (white != 0 && white >= black || black == 0) + return; + + event.setCancelled(true); + Residence.msg(player, lm.Residence_FlagDeny, Flags.command.getName(), res.getName()); + + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onFlagGuiClick(InventoryClickEvent event) { + if (this.getGUImap().size() == 0) + return; + + Player player = (Player) event.getWhoClicked(); + + if (!this.getGUImap().containsKey(player.getName())) + return; + + event.setCancelled(true); + int slot = event.getRawSlot(); + + if (slot > 53 || slot < 0) + return; + + SetFlag setFlag = this.getGUImap().get(player.getName()); + ClickType click = event.getClick(); + InventoryAction action = event.getAction(); + setFlag.toggleFlag(slot, click, action); + setFlag.recalculateInv(); + player.getOpenInventory().getTopInventory().setContents(setFlag.getInventory().getContents()); + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onFlagGuiClose(InventoryCloseEvent event) { + if (this.getGUImap().isEmpty()) + return; + HumanEntity player = event.getPlayer(); + if (!this.getGUImap().containsKey(player.getName())) + return; + this.getGUImap().remove(player.getName()); + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onSignInteract(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + + Block block = event.getClickedBlock(); + + if (block == null) + return; + + if (!(block.getState() instanceof Sign)) + return; + + Player player = event.getPlayer(); + + Location loc = block.getLocation(); + + for (Signs one : Residence.getSignUtil().getSigns().GetAllSigns()) { + if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) + continue; + if (one.GetLocation().getBlockX() != loc.getBlockX()) + continue; + if (one.GetLocation().getBlockY() != loc.getBlockY()) + continue; + if (one.GetLocation().getBlockZ() != loc.getBlockZ()) + continue; + + ClaimedResidence res = one.GetResidence(); + + boolean ForSale = res.isForSell(); + boolean ForRent = res.isForRent(); + String landName = res.getName(); + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (ForSale) { + Bukkit.dispatchCommand(player, "res market buy " + landName); + break; + } + + if (ForRent) { + if (res.isRented() && player.isSneaking()) + Bukkit.dispatchCommand(player, "res market release " + landName); + else { + boolean stage = true; + if (player.isSneaking()) + stage = false; + Bukkit.dispatchCommand(player, "res market rent " + landName + " " + stage); + } + break; + } + } else if (event.getAction() == Action.LEFT_CLICK_BLOCK) { + if (ForRent && res.isRented() && Residence.getRentManager().getRentingPlayer(res).equals(player.getName())) { + Residence.getRentManager().payRent(player, res, false); + } + } + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onSignCreate(SignChangeEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Block block = event.getBlock(); + + if (!(block.getState() instanceof Sign)) + return; + + Sign sign = (Sign) block.getState(); + + if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(Residence.msg(lm.Sign_TopLine))) + return; + + Signs signInfo = new Signs(); + + Location loc = sign.getLocation(); + + String landName = null; + + Player player = event.getPlayer(); + + ClaimedResidence res = null; + if (!event.getLine(1).equalsIgnoreCase("")) { + + String resname = event.getLine(1); + if (!event.getLine(2).equalsIgnoreCase("")) + resname += "." + event.getLine(2); + if (!event.getLine(3).equalsIgnoreCase("")) + resname += "." + event.getLine(3); + + res = Residence.getResidenceManager().getByName(resname); + + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return; + } + + landName = res.getName(); + + } else { + res = Residence.getResidenceManager().getByLoc(loc); + landName = Residence.getResidenceManager().getNameByLoc(loc); + } + + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return; + } + + final ClaimedResidence residence = res; + + boolean ForSale = Residence.getTransactionManager().isForSale(landName); + boolean ForRent = Residence.getRentManager().isForRent(landName); + + int category = 1; + if (Residence.getSignUtil().getSigns().GetAllSigns().size() > 0) + category = Residence.getSignUtil().getSigns().GetAllSigns().get(Residence.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; + + if (ForSale || ForRent) { + signInfo.setCategory(category); + signInfo.setResidence(res); + signInfo.setLocation(loc); +// signInfo.updateLocation(); + Residence.getSignUtil().getSigns().addSign(signInfo); + Residence.getSignUtil().saveSigns(); + } + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + Residence.getSignUtil().CheckSign(residence); + } + }, 5L); + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onSignDestroy(BlockBreakEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.isCancelled()) + return; + + Block block = event.getBlock(); + + if (block == null) + return; + + if (!(block.getState() instanceof Sign)) + return; + + Location loc = block.getLocation(); + + for (Signs one : Residence.getSignUtil().getSigns().GetAllSigns()) { + + if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) + continue; + if (one.GetLocation().getBlockX() != loc.getBlockX()) + continue; + if (one.GetLocation().getBlockY() != loc.getBlockY()) + continue; + if (one.GetLocation().getBlockZ() != loc.getBlockZ()) + continue; + + Residence.getSignUtil().getSigns().removeSign(one); + Residence.getSignUtil().saveSigns(); + break; + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerQuit(PlayerQuitEvent event) { + String pname = event.getPlayer().getName(); + currentRes.remove(pname); + lastUpdate.remove(pname); + lastOutsideLoc.remove(pname); + Residence.getChatManager().removeFromChannel(pname); + Residence.getPlayerListener().removePlayerResidenceChat(pname); + Residence.getOfflinePlayerMap().put(pname, event.getPlayer()); + if (Residence.getAutoSelectionManager().getList().containsKey(pname.toLowerCase())) + Residence.getAutoSelectionManager().getList().remove(pname); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerJoin(PlayerChangedWorldEvent event) { + Player player = event.getPlayer(); + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + Residence.turnResAdminOn(player); + } + Residence.getPermissionManager().updateGroupNameForPlayer(player, true); + + FlagPermissions perms = Residence.getPermsByLocForPlayer(player.getLocation(), player); + + f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( + "residence.nofly.bypass")) { + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res != null && res.isOwner(player)) + break f; + + Location lc = player.getLocation(); + Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); + location.setPitch(lc.getPitch()); + location.setYaw(lc.getYaw()); + int from = location.getBlockY(); + int maxH = location.getWorld().getMaxHeight() - 1; + for (int i = 0; i < maxH; i++) { + location.setY(from - i); + Block block = location.getBlock(); + if (!Residence.getNms().isEmptyBlock(block)) { + location.setY(from - i + 1); + break; + } + if (location.getBlockY() <= 0) { + player.setFlying(false); + player.setAllowFlight(false); + Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); + return; + } + } + Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); + player.teleport(location); + player.setFlying(false); + player.setAllowFlight(false); + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + lastUpdate.put(player.getName(), 0L); + if (Residence.getPermissionManager().isResidenceAdmin(player)) { + Residence.turnResAdminOn(player); + } + handleNewLocation(player, player.getLocation(), true); + + Residence.getPlayerManager().playerJoin(player); + Residence.getPermissionManager().updateGroupNameForPlayer(player, true); + + if (player.hasPermission("residence.versioncheck")) { + Residence.getVersionChecker().VersionCheck(player); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerSpawn(PlayerRespawnEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getRespawnLocation().getWorld())) + return; + Location loc = event.getRespawnLocation(); + Boolean bed = event.isBedSpawn(); + Player player = event.getPlayer(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res == null) { + return; + } + if (res.getPermissions().playerHas(player, Flags.move, true)) { + return; + } + if (bed) { + loc = player.getWorld().getSpawnLocation(); + } + res = Residence.getResidenceManager().getByLoc(loc); + if (res != null && !res.getPermissions().playerHas(player.getName(), Flags.move, true)) { + loc = res.getOutsideFreeLoc(loc, player); + } + + Residence.msg(player, lm.General_NoSpawn); + event.setRespawnLocation(loc); + } + + @SuppressWarnings("deprecation") + private static boolean isContainer(Material mat, Block block) { + return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container.getName()) + || Residence.getConfigManager().getCustomContainers().contains(block.getTypeId()); + } + + @SuppressWarnings("deprecation") + private static boolean isCanUseEntity_RClickOnly(Material mat, Block block) { + + switch (mat.name()) { + case "ITEM_FRAME": + case "BEACON": + case "FLOWER_POT": + case "COMMAND": + case "ANVIL": + case "CAKE_BLOCK": + case "NOTE_BLOCK": + case "DIODE": + case "DIODE_BLOCK_OFF": + case "DIODE_BLOCK_ON": + case "REDSTONE_COMPARATOR": + case "REDSTONE_COMPARATOR_OFF": + case "REDSTONE_COMPARATOR_ON": + case "BED_BLOCK": + case "WORKBENCH": + case "BREWING_STAND": + case "ENCHANTMENT_TABLE": + case "DAYLIGHT_DETECTOR": + case "DAYLIGHT_DETECTOR_INVERTED": + return true; + default: + return Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + private static boolean isCanUseEntity(Material mat, Block block) { + return Residence.getNms().isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerFireInteract(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getAction() != Action.LEFT_CLICK_BLOCK) + return; + + Block block = event.getClickedBlock(); + + if (block == null) + return; + + Block relativeBlock = block.getRelative(event.getBlockFace()); + + if (relativeBlock == null) + return; + + Player player = event.getPlayer(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + if (relativeBlock.getType() == Material.FIRE) { + boolean hasplace = perms.playerHas(player.getName(), player.getWorld().getName(), Flags.place, perms.playerHas(player.getName(), player.getWorld().getName(), + Flags.build, true)); + if (!hasplace) { + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); + return; + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlatePress(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getAction() != Action.PHYSICAL) + return; + Block block = event.getClickedBlock(); + if (block == null) + return; + Material mat = block.getType(); + Player player = event.getPlayer(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + String world = player.getWorld().getName(); + boolean resadmin = Residence.isResAdminOn(player); + if (!resadmin) { + boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); + boolean haspressure = perms.playerHas(player.getName(), world, Flags.pressure, hasuse); + if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE || Residence.getNms().isPlate(mat))) { + event.setCancelled(true); + return; + } + } + if (!perms.playerHas(player.getName(), world, Flags.trample, perms.playerHas(player.getName(), world, Flags.build, true)) && (mat == Material.SOIL + || mat == Material.SOUL_SAND)) { + event.setCancelled(true); + return; + } + return; + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onSelection(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + Player player = event.getPlayer(); + @SuppressWarnings("deprecation") + int heldItemId = player.getItemInHand().getTypeId(); + + if (heldItemId != Residence.getConfigManager().getSelectionTooldID()) + return; + + if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) + return; + + if (player.getGameMode() == GameMode.CREATIVE) + event.setCancelled(true); + + boolean resadmin = Residence.isResAdminOn(player); + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group + .canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { + + Block block = event.getClickedBlock(); + + if (event.getAction() == Action.LEFT_CLICK_BLOCK) { + Location loc = block.getLocation(); + Residence.getSelectionManager().placeLoc1(player, loc, true); + Residence.msg(player, lm.Select_PrimaryPoint, Residence.msg(lm.General_CoordsTop, loc.getBlockX(), loc.getBlockY(), + loc.getBlockZ())); + event.setCancelled(true); + } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && Residence.getNms().isMainHand(event)) { + Location loc = block.getLocation(); + Residence.getSelectionManager().placeLoc2(player, loc, true); + Residence.msg(player, lm.Select_SecondaryPoint, Residence.msg(lm.General_CoordsBottom, loc.getBlockX(), loc + .getBlockY(), loc.getBlockZ())); + event.setCancelled(true); + } + + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) + Residence.getSelectionManager().showSelectionInfoInActionBar(player); + } + return; + } + + @SuppressWarnings("deprecation") + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onInfoCheck(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getAction() != Action.LEFT_CLICK_BLOCK) + return; + Block block = event.getClickedBlock(); + if (block == null) + return; + Player player = event.getPlayer(); + + ItemStack item = event.getItem(); + if (item == null) + return; + + int heldItemId = item.getTypeId(); + + if (heldItemId != Residence.getConfigManager().getInfoToolID()) + return; + + Location loc = block.getLocation(); + String res = Residence.getResidenceManager().getNameByLoc(loc); + if (res != null) + Residence.getResidenceManager().printAreaInfo(res, player, false); + else + Residence.msg(player, lm.Residence_NoResHere); + event.setCancelled(true); + return; + + } + + @SuppressWarnings("deprecation") + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + ItemStack iih = Residence.getNms().itemInMainHand(player); + Material heldItem = iih.getType(); + int heldItemId = iih.getTypeId(); + Block block = event.getClickedBlock(); + if (block == null) + return; + + Material mat = block.getType(); + + if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK + || Residence.getNms().isCanUseEntity_BothClick(mat, block))) { + if (heldItemId != Residence.getConfigManager().getSelectionTooldID() && heldItemId != Residence.getConfigManager().getInfoToolID() + && heldItem != Material.INK_SACK && !Residence.getNms().isArmorStandMaterial(heldItem) && !Residence.getNms().isBoat(heldItem)) { + return; + } + } + + if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + String world = player.getWorld().getName(); + String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); + boolean resadmin = Residence.isResAdminOn(player); + if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { + Residence.msg(player, lm.General_ItemBlacklisted); + event.setCancelled(true); + return; + } + + if (resadmin) + return; + + int blockId = block.getTypeId(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + if (heldItem != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (heldItem == Material.INK_SACK) { + if (Residence.getNms().itemInMainHand(player).getData().getData() == 15 && block.getType() == Material.GRASS || iih.getData().getData() == 3 + && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { + perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!perms.playerHas(player.getName(), world, Flags.build, true)) { + Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); + event.setCancelled(true); + return; + } + } + } + if (Residence.getNms().isArmorStandMaterial(heldItem) || Residence.getNms().isBoat(heldItem)) { + perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!perms.playerHas(player.getName(), world, Flags.build, true)) { + Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); + event.setCancelled(true); + return; + } + } + } + + if (isContainer(mat, block) || isCanUseEntity(mat, block)) { + boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); + for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { + if (mat != checkMat.getKey()) + continue; + + if (perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) + continue; + + if (hasuse || checkMat.getValue().equals(Flags.container.getName())) { + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, checkMat.getValue()); + return; + } + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, Flags.use); + return; + + } + if (Residence.getConfigManager().getCustomContainers().contains(blockId)) { + if (!perms.playerHas(player.getName(), world, Flags.container, hasuse)) { + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, Flags.container.getName()); + return; + } + } + if (Residence.getConfigManager().getCustomBothClick().contains(blockId)) { + if (!hasuse) { + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, Flags.use.getName()); + return; + } + } + if (Residence.getConfigManager().getCustomRightClick().contains(blockId) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (!hasuse) { + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, Flags.use.getName()); + return; + } + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { + + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + /* Trade */ + if (ent.getType() != EntityType.VILLAGER) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + + if (res != null && !res.getPermissions().playerHas(player.getName(), Flags.trade, true)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.trade.getName(), res.getName()); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + + if (ent.getType() != EntityType.HORSE) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.container, true) && player.isSneaking()) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); + event.setCancelled(true); + } else if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.riding, false)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + + if (ent.getType() != EntityType.MINECART_CHEST && ent.getType() != EntityType.MINECART_HOPPER) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.container, true)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + + if (ent.getType() != EntityType.MINECART && ent.getType() != EntityType.BOAT) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.riding, false)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + /* Dye */ + if (ent.getType() != EntityType.SHEEP) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.dye, true)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.dye.getName(), res.getName()); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerShearEntity(PlayerShearEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.isCancelled()) + return; + + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getEntity(); + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + + if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.shear, true)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.shear.getName(), res.getName()); + event.setCancelled(true); + } + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { + + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + + /* Container - ItemFrame protection */ + if (!(ent instanceof Hanging)) + return; + + Hanging hanging = (Hanging) ent; + + if (hanging.getType() != EntityType.ITEM_FRAME) { + return; + } + + Material heldItem = Residence.getNms().itemInMainHand(player).getType(); + + FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + String world = player.getWorld().getName(); + String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); + if (!Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { + Residence.msg(player, lm.General_ItemBlacklisted); + event.setCancelled(true); + return; + } + if (!perms.playerHas(player.getName(), world, Flags.container, perms.playerHas(player.getName(), world, Flags.use, true))) { + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, Flags.container.getName()); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Location loc = event.getBlockClicked().getLocation(); + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null) { + if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { + if (Residence.getRentManager().isRented(res.getName())) { + Residence.msg(player, lm.Rent_ModifyDeny); + event.setCancelled(true); + return; + } + } + + Material mat = event.getBucket(); + if ((!res.getPermissions().playerHas(player.getName(), Flags.bucket, true) && !res.getPermissions().playerHas(player.getName(), Flags.bucketempty, true)) + && Residence.getConfigManager().getNoPlaceWorlds().contains(loc.getWorld().getName())) { + if (mat == Material.LAVA_BUCKET) { + event.setCancelled(true); + return; + } + if (mat == Material.WATER_BUCKET) { + event.setCancelled(true); + return; + } + } + } + + String pname = player.getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); + if (!perms.playerHas(pname, player.getWorld().getName(), Flags.bucket, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)) && + !perms.playerHas(pname, player.getWorld().getName(), Flags.bucketempty, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true))) { + Residence.msg(player, lm.Flag_Deny, Flags.bucket.getName()); + event.setCancelled(true); + return; + } + + Material mat = event.getBucket(); + int level = Residence.getConfigManager().getPlaceLevel(); + if (res == null && Residence.getConfigManager().isNoLavaPlace() && loc.getBlockY() >= level - 1 && Residence.getConfigManager() + .getNoPlaceWorlds().contains(loc.getWorld().getName())) { + if (mat == Material.LAVA_BUCKET) { + if (!Residence.msg(lm.General_CantPlaceLava).equalsIgnoreCase("")) + Residence.msg(player, lm.General_CantPlaceLava, level); + event.setCancelled(true); + return; + } + } + + if (res == null && Residence.getConfigManager().isNoWaterPlace() && loc.getBlockY() >= level - 1 && Residence.getConfigManager() + .getNoPlaceWorlds().contains(loc.getWorld().getName())) + if (mat == Material.WATER_BUCKET) { + if (!Residence.msg(lm.General_CantPlaceWater).equalsIgnoreCase("")) + Residence.msg(player, lm.General_CantPlaceWater, level); + event.setCancelled(true); + return; + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerBucketFill(PlayerBucketFillEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); + if (res != null) { + if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { + if (Residence.getRentManager().isRented(res.getName())) { + Residence.msg(player, lm.Rent_ModifyDeny); + event.setCancelled(true); + return; + } + } + } + + String pname = player.getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); + boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), Flags.bucket, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)); + boolean hasbucketfill = perms.playerHas(pname, player.getWorld().getName(), Flags.bucketfill, perms.playerHas(pname, player.getWorld().getName(), Flags.build, + true)); + if (!hasbucket && !hasbucketfill) { + Residence.msg(player, lm.Flag_Deny, Flags.bucket.getName()); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerTeleport(PlayerTeleportEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + + if (player.hasMetadata("NPC")) + return; + + Location loc = event.getTo(); + + if (Residence.isResAdminOn(player)) { + handleNewLocation(player, loc, false); + return; + } + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res == null) + return; + if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event + .getCause() == TeleportCause.PLUGIN) { + if (!res.getPermissions().playerHas(player.getName(), Flags.move, true) && !res.isOwner(player)) { + event.setCancelled(true); + Residence.msg(player, lm.Residence_MoveDeny, res.getName()); + return; + } + } else if (event.getCause() == TeleportCause.ENDER_PEARL) { + if (!res.getPermissions().playerHas(player, Flags.enderpearl, true)) { + event.setCancelled(true); + Residence.msg(player, lm.Residence_FlagDeny, Flags.enderpearl.getName(), res.getName()); + return; + } + } + if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && Residence.getConfigManager().isBlockAnyTeleportation()) { + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.tp, true) && !player.hasPermission("residence.admin.tp")) { + event.setCancelled(true); + Residence.msg(player, lm.General_TeleportDeny, res.getName()); + return; + } + } + if (Residence.getNms().isChorusTeleport(event.getCause())) { + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.chorustp, true) && !player.hasPermission("residence.admin.tp")) { + event.setCancelled(true); + Residence.msg(player, lm.Residence_FlagDeny, Flags.chorustp.getName(), res.getName()); + return; + } + } + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerDeath(final PlayerDeathEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + Player player = event.getEntity(); + if (player == null) + return; + if (player.hasMetadata("NPC")) + return; + Location loc = player.getLocation(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res == null) + return; + + if (res.getPermissions().has(Flags.keepinv, false)) + event.setKeepInventory(true); + + if (res.getPermissions().has(Flags.keepexp, false)) { + event.setKeepLevel(true); + event.setDroppedExp(0); + } + + if (res.getPermissions().has(Flags.respawn, false) && Bukkit.getVersion().toString().contains("Spigot")) + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + try { + event.getEntity().spigot().respawn(); + } catch (Exception e) { + } + return; + } + }, 1L); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceChange(ResidenceChangedEvent event) { + ClaimedResidence res = event.getTo(); + ClaimedResidence ResOld = event.getFrom(); + Player player = event.getPlayer(); + + if (res == null && ResOld != null) { + if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.resetPlayerTime(); + + if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + player.setWalkSpeed(0.2F); + + if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + player.resetPlayerWeather(); + + if (Residence.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(false); + } + + if (res != null && ResOld != null && res != ResOld) { + if (Residence.getVersionChecker().GetVersion() > 1900) { + if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(true); + else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(false); + } + + if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.setPlayerTime(6000L, false); + else if (ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.resetPlayerTime(); + + if (res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + player.setPlayerTime(14000L, false); + else if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + player.resetPlayerTime(); + + if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); + else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + player.setWalkSpeed(0.2F); + + if (res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) { + player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); + } else if (ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + player.setWalkSpeed(0.2F); + + if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) { + player.setPlayerWeather(WeatherType.CLEAR); + } else if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) + player.resetPlayerWeather(); + + if (res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) { + player.setPlayerWeather(WeatherType.DOWNFALL); + } else if (ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + player.resetPlayerWeather(); + } + + if (res != null && ResOld == null) { + if (Residence.getVersionChecker().GetVersion() > 1900) { + if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(true); + } + + if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.setPlayerTime(6000L, false); + + if (res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + player.setPlayerTime(14000L, false); + + if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); + + if (res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); + + if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) + player.setPlayerWeather(WeatherType.CLEAR); + + if (res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + player.setPlayerWeather(WeatherType.DOWNFALL); + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerMove(PlayerMoveEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (player == null) + return; + + if (player.hasMetadata("NPC")) + return; + + Location locfrom = event.getFrom(); + Location locto = event.getTo(); + if (locfrom.getBlockX() == locto.getBlockX() && locfrom.getBlockY() == locto.getBlockY() && locfrom.getBlockZ() == locto.getBlockZ()) + return; + + String name = player.getName(); + + if (name == null) + return; + + long last = lastUpdate.get(name); + long now = System.currentTimeMillis(); + if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) + return; + + this.lastUpdate.put(name, now); + + handleNewLocation(player, locto, true); + if (!Residence.getTeleportDelayMap().isEmpty() && Residence.getConfigManager().getTeleportDelay() > 0 && Residence.getTeleportDelayMap().contains(player + .getName())) { + Residence.getTeleportDelayMap().remove(player.getName()); + Residence.msg(player, lm.General_TeleportCanceled); + if (Residence.getConfigManager().isTeleportTitleMessage()) + Residence.getAB().sendTitle(player, "", ""); + } + } + + public void handleNewLocation(final Player player, Location loc, boolean move) { + + String pname = player.getName(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + + ClaimedResidence orres = res; + String areaname = null; + String subzone = null; + if (res != null) { + areaname = res.getName(); + while (res.getSubzoneByLoc(loc) != null) { + res = res.getSubzoneByLoc(player.getLocation()); + subzone = res.getName(); + areaname = areaname + "." + subzone; + } + } + + ClaimedResidence ResOld = null; + if (currentRes.containsKey(pname)) { + ResOld = Residence.getResidenceManager().getByName(currentRes.get(pname)); + if (ResOld == null) { + currentRes.remove(pname); + } else { + if (res != null && ResOld.getName().equals(res.getName())) { + + f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( + "residence.nofly.bypass")) { + if (res.isOwner(player)) + break f; + Location lc = player.getLocation(); + Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); + location.setPitch(lc.getPitch()); + location.setYaw(lc.getYaw()); + int from = location.getBlockY(); + int maxH = location.getWorld().getMaxHeight() - 1; + for (int i = 0; i < maxH; i++) { + location.setY(from - i); + Block block = location.getBlock(); + if (!Residence.getNms().isEmptyBlock(block)) { + location.setY(from - i + 1); + break; + } + if (location.getBlockY() <= 0) { + Location lastLoc = lastOutsideLoc.get(pname); + if (lastLoc != null) + player.teleport(lastLoc); + else + player.teleport(res.getOutsideFreeLoc(loc, player)); + Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + return; + } + } + Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + player.teleport(location); + player.setFlying(false); + player.setAllowFlight(false); + } + + lastOutsideLoc.put(pname, loc); + return; + } + } + } + + if (!Residence.getAutoSelectionManager().getList().isEmpty()) { + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + Residence.getAutoSelectionManager().UpdateSelection(player); + return; + } + }); + } + + if (res == null) { + lastOutsideLoc.put(pname, loc); + if (ResOld != null) { + String leave = ResOld.getLeaveMessage(); + + // New ResidenceChangeEvent + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); + Residence.getServ().getPluginManager().callEvent(chgEvent); + + if (leave != null && !leave.equals("")) { + if (Residence.getConfigManager().useActionBar()) { + Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) + .toString()); + } else { + Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + } + } + currentRes.remove(pname); + } + return; + } + + if (move) { + if (!res.getPermissions().playerHas(pname, Flags.move, true) && !Residence.isResAdminOn(player) && !res.isOwner(player) && !player.hasPermission( + "residence.admin.move")) { + + Location lastLoc = lastOutsideLoc.get(pname); + + if (Residence.getConfigManager().BounceAnimation()) { + Visualizer v = new Visualizer(player); + v.setErrorAreas(res); + v.setOnce(true); + Residence.getSelectionManager().showBounds(player, v); + } + + ClaimedResidence preRes = Residence.getResidenceManager().getByLoc(lastLoc); + + if (preRes != null && !preRes.getPermissions().playerHas(pname, Flags.tp, true) && !player.hasPermission("residence.admin.tp")) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.teleport(newLoc); + } else if (lastLoc != null) { + player.teleport(lastLoc); + } else { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.teleport(newLoc); + } + + if (Residence.getConfigManager().useActionBar()) { + Residence.getAB().send(player, Residence.msg(lm.Residence_MoveDeny, orres.getName())); + } else { + Residence.msg(player, lm.Residence_MoveDeny, orres.getName()); + } + return; + } + + // Preventing fly in residence only when player has move permission + f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( + "residence.nofly.bypass")) { + if (res.isOwner(player)) + break f; + Location lc = player.getLocation(); + Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); + location.setPitch(lc.getPitch()); + location.setYaw(lc.getYaw()); + int from = location.getBlockY(); + int maxH = location.getWorld().getMaxHeight() - 1; + for (int i = 0; i < maxH; i++) { + location.setY(from - i); + Block block = location.getBlock(); + if (!Residence.getNms().isEmptyBlock(block)) { + location.setY(from - i + 1); + break; + } + if (location.getBlockY() <= 0) { + Location lastLoc = lastOutsideLoc.get(pname); + if (lastLoc != null) + player.teleport(lastLoc); + else + player.teleport(res.getOutsideFreeLoc(loc, player)); + + Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + return; + } + } + Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + player.teleport(location); + player.setFlying(false); + player.setAllowFlight(false); + } + } + + lastOutsideLoc.put(pname, loc); + + if (!currentRes.containsKey(pname) || ResOld != res) { + currentRes.put(pname, areaname); + + // "from" residence for ResidenceChangedEvent + ClaimedResidence chgFrom = null; + if (ResOld != res && ResOld != null) { + String leave = ResOld.getLeaveMessage(); + chgFrom = ResOld; + if (leave != null && !leave.equals("") && ResOld != res.getParent()) { + if (Residence.getConfigManager().useActionBar()) { + Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) + .toString()); + } else { + Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + } + } + } + + String enterMessage = res.getEnterMessage(); + + // New ResidenceChangedEvent + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); + Residence.getServ().getPluginManager().callEvent(chgEvent); + + if (!(ResOld != null && res == ResOld.getParent())) { + if (Residence.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (Residence.getRentManager().isForRent(areaname) || Residence + .getTransactionManager().isForSale(areaname))) { + if (Residence.getRentManager().isForRent(areaname) && !Residence.getRentManager().isRented(areaname)) { + RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); + if (rentable != null) + Residence.getAB().send(player, Residence.msg(lm.Residence_CanBeRented, areaname, rentable.cost, rentable.days)); + } else if (Residence.getTransactionManager().isForSale(areaname) && !res.isOwner(player)) { + int sale = Residence.getTransactionManager().getSaleAmount(areaname); + Residence.getAB().send(player, Residence.msg(lm.Residence_CanBeBought, areaname, sale)); + } + } else if (enterMessage != null && !enterMessage.equals("")) { + if (Residence.getConfigManager().useActionBar()) { + Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)) + .toString()); + } else { + Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); + } + } + } + } + } + + public String insertMessages(Player player, String areaname, ClaimedResidence res, String message) { + try { + message = message.replaceAll("%player", player.getName()); + message = message.replaceAll("%owner", res.getPermissions().getOwner()); + message = message.replaceAll("%residence", areaname); + } catch (Exception ex) { + return ""; + } + return message; + } + + public void doHeals() { + try { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + ClaimedResidence res = null; + + if (resname == null) + continue; + + res = Residence.getResidenceManager().getByName(resname); + + if (!res.getPermissions().has(Flags.healing, false)) + continue; + + Damageable damage = player; + double health = damage.getHealth(); + if (health < damage.getMaxHealth() && !player.isDead()) { + player.setHealth(health + 1); + } + } + } catch (Exception ex) { + } + } + + public void feed() { + try { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + + if (resname == null) + continue; + + ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + + if (!res.getPermissions().has(Flags.feed, false)) + continue; + + int food = player.getFoodLevel(); + if (food < 20 && !player.isDead()) { + player.setFoodLevel(food + 1); + } + } + } catch (Exception ex) { + } + } + + public void DespawnMobs() { + try { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + + if (resname == null) + continue; + + ClaimedResidence res = null; + res = Residence.getResidenceManager().getByName(resname); + + if (!res.getPermissions().has(Flags.nomobs, false)) + continue; + + List entities = Bukkit.getServer().getWorld(res.getWorld()).getEntities(); + for (Entity ent : entities) { + if (!ResidenceEntityListener.isMonster(ent)) + continue; + + if (res.containsLoc(ent.getLocation())) { + ent.remove(); + } + } + } + } catch (Exception ex) { + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerChat(AsyncPlayerChatEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + String pname = event.getPlayer().getName(); + if (!chatenabled || !playerToggleChat.contains(pname)) + return; + + ChatChannel channel = Residence.getChatManager().getPlayerChannel(pname); + if (channel != null) { + channel.chat(pname, event.getMessage()); + } + event.setCancelled(true); + } + + public void tooglePlayerResidenceChat(Player player, String residence) { + String pname = player.getName(); + playerToggleChat.add(pname); + Residence.msg(player, lm.Chat_ChatChannelChange, residence); + } + + public void removePlayerResidenceChat(String pname) { + playerToggleChat.remove(pname); + Player player = Bukkit.getPlayer(pname); + if (player != null) + Residence.msg(player, lm.Chat_ChatChannelLeave); + } + + public void removePlayerResidenceChat(Player player) { + String pname = player.getName(); + playerToggleChat.remove(pname); + Residence.msg(player, lm.Chat_ChatChannelLeave); + } + + public String getCurrentResidenceName(String player) { + return currentRes.get(player); + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index ca177259c..2b0603c1f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -5,6 +5,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomLoc; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.Visualizer; @@ -384,7 +385,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa Residence.msg(player, lm.Area_NotWithinParent); return false; } - if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { + if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), Flags.subzone, true)) { Residence.msg(player, lm.Residence_ParentNoPermission); return false; } @@ -515,7 +516,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole Residence.msg(player, lm.Area_NotWithinParent); return false; } - if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), "subzone", true)) { + if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), Flags.subzone, true)) { Residence.msg(player, lm.Residence_ParentNoPermission); return false; } @@ -599,7 +600,7 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { - if (!this.perms.playerHas(player.getName(), "subzone", this.perms.playerHas(player.getName(), "admin", false))) { + if (!this.perms.playerHas(player.getName(), Flags.subzone, this.perms.playerHas(player.getName(), Flags.admin, false))) { Residence.msg(player, lm.General_NoPermission); return false; } @@ -1004,7 +1005,7 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { continue; ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res != null && player != null && !res.getPermissions().playerHas(player.getName(), "tp", true) && !player.hasPermission("residence.admin.tp")) + if (res != null && player != null && !res.getPermissions().playerHas(player.getName(), Flags.tp, true) && !player.hasPermission("residence.admin.tp")) continue; found = true; @@ -1151,11 +1152,11 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r Residence.msg(reqPlayer, lm.General_NoPermission); return; } - if (!this.perms.playerHas(reqPlayer.getName(), "tp", true)) { + if (!this.perms.playerHas(reqPlayer.getName(), Flags.tp, true)) { Residence.msg(reqPlayer, lm.Residence_TeleportNoFlag); return; } - if (!this.perms.playerHas(reqPlayer.getName(), "move", true)) { + if (!this.perms.playerHas(reqPlayer.getName(), Flags.move, true)) { Residence.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); return; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 650894566..6005bb7a2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -47,6 +47,7 @@ public boolean playerHas(Player player, Flags flag, boolean def) { return playerHas(player, flag.getName(), def); } + @Deprecated public boolean playerHas(Player player, String flag, boolean def) { return this.playerHas(player.getName(), world, flag, def); } @@ -55,6 +56,7 @@ public boolean playerHas(String player, Flags flag, boolean def) { return playerHas(player, flag.getName(), def); } + @Deprecated public boolean playerHas(String player, String flag, boolean def) { return this.playerHas(player, world, flag, def); } @@ -221,13 +223,13 @@ public boolean hasResidencePermission(CommandSender sender, boolean requireOwner if (sender.getName().equals(renter)) { return true; } - return (playerHas(sender.getName(), "admin", false)); + return (playerHas(sender.getName(), Flags.admin, false)); } } if (requireOwner) { return (this.getOwner().equals(sender.getName())); } - return (playerHas(sender.getName(), "admin", false) || this.getOwner().equals(sender.getName())); + return (playerHas(sender.getName(), Flags.admin, false) || this.getOwner().equals(sender.getName())); } private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState state, boolean globalflag, boolean resadmin) { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 90e82fdbf..5c3b6e448 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -4,6 +4,7 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -143,8 +144,8 @@ public void printListInfo(CommandSender sender, String targetPlayer, List Date: Fri, 30 Sep 2016 14:57:30 +0300 Subject: [PATCH 0266/1142] add falldamage flag --- .../bukkit/residence/commands/pset.java | 24 +- .../bekvon/bukkit/residence/commands/set.java | 2 +- .../bukkit/residence/containers/Flags.java | 329 +-- .../listeners/ResidenceEntityListener.java | 2216 +++++++++-------- .../protection/ResidencePermissions.java | 6 + 5 files changed, 1302 insertions(+), 1275 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index d51e3e42e..8a41d7487 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -47,31 +47,33 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (!Residence.isPlayerExist(sender, args[1], true)) return false; - if (res != null) { - if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { - Residence.msg(sender, lm.General_NoPermission); - return true; - } - res.getPermissions().setPlayerFlag(sender, args[1], args[2], args[3], resadmin, true); - } else { + if (res == null) { Residence.msg(sender, lm.Invalid_Residence); + return true; + } + + if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { + Residence.msg(sender, lm.General_NoPermission); + return true; } + res.getPermissions().setPlayerFlag(sender, args[1], args[2], args[3], resadmin, true); + return true; } else if (args.length == 5) { ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); if (!Residence.isPlayerExist(sender, args[2], true)) return false; - + if (res == null) { Residence.msg(sender, lm.Invalid_Residence); return true; } - - if (!res.isOwner(sender) && !resadmin && sender instanceof Player && !res.getPermissions().playerHas((Player) sender, Flags.admin, false)) { + + if (!res.isOwner(sender) && !resadmin && !res.getPermissions().playerHas(sender, Flags.admin, false)) { Residence.msg(sender, lm.General_NoPermission); return true; } - + res.getPermissions().setPlayerFlag(sender, args[2], args[3], args[4], resadmin, true); return true; } else if ((args.length == 2 || args.length == 3) && Residence.getConfigManager().useFlagGUI()) { diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 1f77ab8dc..133807de8 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -42,7 +42,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Residence.msg(sender, lm.Invalid_Residence); return true; } - if (!res.isOwner(sender) && !resadmin && sender instanceof Player && !res.getPermissions().playerHas((Player) sender, Flags.admin, false)) { + if (!res.isOwner(sender) && !resadmin && !res.getPermissions().playerHas(sender, Flags.admin, false)) { Residence.msg(sender, lm.General_NoPermission); return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 0ac9d7906..a025f27bf 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -1,164 +1,165 @@ -package com.bekvon.bukkit.residence.containers; - -public enum Flags { - anvil(145, 0, FlagMode.Both, "Allows or denys interaction with anvil", true), - admin(7, 0, FlagMode.Player, "Gives a player permission to change flags on a residence", true), - animalkilling(365, 0, FlagMode.Both, "Allows or denys animal killing", true), - animals(383, 90, FlagMode.Residence, "Allows or denys animal spawns", true), - backup(47, 0, FlagMode.Residence, "If set to true, restores previous look of area (WordEdit required)", false), - bank(130, 0, FlagMode.Both, "Allows or denys deposit/withdraw money from res bank", true), - bed(355, 0, FlagMode.Both, "Allows or denys players to use beds", true), - beacon(138, 0, FlagMode.Both, "Allows or denys interaction with beacon", true), - brew(379, 0, FlagMode.Both, "Allows or denys players to use brewing stands", true), - bucket(325, 0, FlagMode.Both, "Allow or deny bucket use", true), - bucketempty(325, 0, FlagMode.Both, "Allow or deny bucket empty", true), - bucketfill(325, 0, FlagMode.Both, "Allow or deny bucket fill", true), - build(45, 0, FlagMode.Both, "Allows or denys building", true), - burn(50, 0, FlagMode.Residence, "Allows or denys Mob combustion in residences", true), - button(143, 0, FlagMode.Both, "Allows or denys players to use buttons", true), - cake(354, 0, FlagMode.Both, "Allows or denys players to eat cake", true), - canimals(383, 91, FlagMode.Residence, "Allows or denys custom animal spawns", true), - chorustp(432, 0, FlagMode.Both, "Allow or disallow teleporting to the residence with chorus fruit", true), - chat(386, 0, FlagMode.Both, "Allows to join residence chat room", true), - cmonsters(383, 50, FlagMode.Residence, "Allows or denys custom monster spawns", true), - commandblock(137, 0, FlagMode.Both, "Allows or denys command block interaction", false), - command(137, 0, FlagMode.Both, "Allows or denys comamnd use in residences", false), - container(342, 0, FlagMode.Both, "Allows or denys use of furnaces, chests, dispensers, etc...", true), - coords(345, 0, FlagMode.Residence, "Hides residence coordinates", true), - craft(1, 0, FlagMode.Residence, "Gives table, enchant, brew flags", true), - creeper(383, 50, FlagMode.Residence, "Allow or deny creeper explosions", true), - dragongrief(3, 0, FlagMode.Residence, "Prevents ender dragon block griefing", true), - day(37, 0, FlagMode.Residence, "Sets day time in residence", true), - dye(351, 14, FlagMode.Both, "Allows or denys sheep dyeing", true), - damage(283, 0, FlagMode.Residence, "Allows or denys all entity damage within the residence", false), - decay(18, 0, FlagMode.Residence, "Allows or denys leave decay in the residence", true), - destroy(121, 0, FlagMode.Both, "Allows or denys only destruction of blocks, overrides the build flag", true), - dryup(160, 11, FlagMode.Residence, "Prevents land from drying up", true), - diode(356, 0, FlagMode.Both, "Allows or denys players to use redstone repeaters", true), - door(324, 0, FlagMode.Both, "Allows or denys players to use doors and trapdoors", true), - egg(344, 0, FlagMode.Both, "Allows or denys interaction with dragon egg", true), - enchant(116, 0, FlagMode.Both, "Allows or denys players to use enchanting tables", true), - explode(407, 0, FlagMode.Residence, "Allows or denys explosions in residences", true), - enderpearl(368, 0, FlagMode.Both, "Allow or disallow teleporting to the residence with enderpearl", true), - feed(364, 0, FlagMode.Residence, "Setting to true makes the residence feed its occupants", true), - fireball(385, 0, FlagMode.Residence, "Allows or denys fire balls in residences", true), - firespread(377, 0, FlagMode.Residence, "Allows or denys fire spread", true), - flow(111, 0, FlagMode.Residence, "Allows or denys liquid flow", true), - flowerpot(390, 0, FlagMode.Both, "Allows or denys interaction with flower pot", true), - grow(295, 0, FlagMode.Residence, "Allows or denys plant growing", true), - glow(169, 0, FlagMode.Residence, "Players will start glowing when entering residence", true), - hotfloor(213, 0, FlagMode.Residence, "Prevent damage from magma blocks", true), - hidden(102, 0, FlagMode.Residence, "Hides residence from list or listall commands", false), - hook(346, 0, FlagMode.Both, "Allows or denys fishing rod hooking entities", true), - healing(373, 0, FlagMode.Residence, "Setting to true makes the residence heal its occupants", true), - iceform(79, 0, FlagMode.Residence, "Prevents from ice forming", true), - icemelt(79, 0, FlagMode.Residence, "Prevents ice from melting", true), - ignite(259, 0, FlagMode.Both, "Allows or denys fire ignition", true), - jump2(165, 0, FlagMode.Residence, "Allows to jump 2 blocks high", false), - jump3(165, 0, FlagMode.Residence, "Allows to jump 3 blocks high", false), - keepinv(298, 0, FlagMode.Residence, "Players keeps inventory after death", false), - keepexp(322, 0, FlagMode.Residence, "Players keeps exp after death", false), - lavaflow(327, 0, FlagMode.Residence, "Allows or denys lava flow, overrides flow", true), - leash(420, 0, FlagMode.Both, "Allows or denys aninal leash", true), - lever(69, 0, FlagMode.Both, "Allows or denys players to use levers", true), - mobexpdrop(362, 0, FlagMode.Residence, "Prevents mob droping exp on death", true), - mobitemdrop(351, 3, FlagMode.Residence, "Prevents mob droping items on death", true), - mobkilling(367, 0, FlagMode.Both, "Allows or denys mob killing", true), - monsters(52, 0, FlagMode.Residence, "Allows or denys monster spawns", true), - move(301, 0, FlagMode.Both, "Allows or denys movement in the residence", true), - nanimals(383, 92, FlagMode.Residence, "Allows or denys natural animal spawns", true), - nmonsters(383, 51, FlagMode.Residence, "Allows or denys natural monster spawns", true), - night(35, 15, FlagMode.Residence, "Sets night time in residence", true), - nofly(171, 1, FlagMode.Both, "Allows or denys fly in residence", false), - nomobs(166, 0, FlagMode.Residence, "Prevents monsters from entering residence", true), - note(25, 0, FlagMode.Both, "Allows or denys players to use note blocks", true), - nodurability(145, 0, FlagMode.Residence, "Prevents item durability loss", false), - overridepvp(267, 0, FlagMode.Residence, "Overrides any plugin pvp protection", false), - pressure(147, 0, FlagMode.Both, "Allows or denys players to use pressure plates", true), - piston(33, 0, FlagMode.Residence, "Allow or deny pistons from pushing or pulling blocks in the residence", true), - pistonprotection(29, 0, FlagMode.Residence, "Enables or disabled piston block move in or out of residence", true), - place(169, 0, FlagMode.Both, "Allows or denys only placement of blocks, overrides the build flag", true), - pvp(268, 0, FlagMode.Residence, "Allow or deny pvp in the residence", true), - rain(38, 1, FlagMode.Residence, "Sets weather to rainny in residence", true), - redstone(175, 0, FlagMode.Group, "Gives lever, diode, button, pressure, note flags", true), - respawn(175, 0, FlagMode.Residence, "Automaticaly respawns player", false), - riding(329, 0, FlagMode.Both, "Prevent riding a horse", true), - sun(175, 0, FlagMode.Residence, "Sets weather to sunny in residence", true), - shop(389, 0, FlagMode.Residence, "Adds residence to special residence shop list", true), - snowtrail(78, 0, FlagMode.Residence, "Prevents snowman snow trails", true), - spread(332, 0, FlagMode.Residence, "Prevents block spreading", true), - snowball(332, 0, FlagMode.Residence, "Prevents snowball knockback", true), - sanimals(383, 101, FlagMode.Residence, "Allows or denys spawner or spawn egg animal spawns", true), - shear(359, 0, FlagMode.Both, "Allows or denys sheep shear", true), - smonsters(383, 54, FlagMode.Residence, "Allows or denys spawner or spawn egg monster spawns", true), - subzone(160, 7, FlagMode.Both, "Allow a player to make subzones in the residence", true), - table(58, 0, FlagMode.Both, "Allows or denys players to use workbenches", true), - tnt(46, 0, FlagMode.Residence, "Allow or deny tnt explosions", true), - tp(120, 0, FlagMode.Both, "Allow or disallow teleporting to the residence", true), - trade(388, 0, FlagMode.Both, "Allows or denys villager trading in residence", true), - trample(3, 0, FlagMode.Residence, "Allows or denys crop trampling in residence", true), - trusted(1, 0, FlagMode.Group, "Gives build, use, move, container and tp flags", true), - use(70, 0, FlagMode.Both, "Allows or denys use of doors, lever, buttons, etc...", true), - vehicledestroy(328, 0, FlagMode.Both, "Allows or denys vehicle destroy", true), - waterflow(326, 0, FlagMode.Residence, "Allows or denys water flow, overrides flow", true), - wspeed1(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true), - wspeed2(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true); - - private int id; - private int data; - private FlagMode flagMode; - private String desc; - private boolean enabled; - - public static enum FlagMode { - Player, Residence, Both, Group - } - - private Flags(int id, int data, FlagMode flagMode, String desc, boolean enabled) { - this.id = id; - this.data = data; - this.flagMode = flagMode; - this.desc = desc; - this.enabled = enabled; - } - - public int getId() { - return id; - } - - public int getData() { - return data; - } - - public String getName() { - return this.name(); - } - - public FlagMode getFlagMode() { - return flagMode; - } - - public String getDesc() { - return desc; - } - - public void setDesc(String desc) { - this.desc = desc; - } - - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - - public static Flags getFlag(String flag) { - for (Flags f : Flags.values()) { - if (f.getName().equalsIgnoreCase(flag)) - return f; - } - return null; - } -} +package com.bekvon.bukkit.residence.containers; + +public enum Flags { + anvil(145, 0, FlagMode.Both, "Allows or denys interaction with anvil", true), + admin(7, 0, FlagMode.Player, "Gives a player permission to change flags on a residence", true), + animalkilling(365, 0, FlagMode.Both, "Allows or denys animal killing", true), + animals(383, 90, FlagMode.Residence, "Allows or denys animal spawns", true), + backup(47, 0, FlagMode.Residence, "If set to true, restores previous look of area (WordEdit required)", false), + bank(130, 0, FlagMode.Both, "Allows or denys deposit/withdraw money from res bank", true), + bed(355, 0, FlagMode.Both, "Allows or denys players to use beds", true), + beacon(138, 0, FlagMode.Both, "Allows or denys interaction with beacon", true), + brew(379, 0, FlagMode.Both, "Allows or denys players to use brewing stands", true), + bucket(325, 0, FlagMode.Both, "Allow or deny bucket use", true), + bucketempty(325, 0, FlagMode.Both, "Allow or deny bucket empty", true), + bucketfill(325, 0, FlagMode.Both, "Allow or deny bucket fill", true), + build(45, 0, FlagMode.Both, "Allows or denys building", true), + burn(50, 0, FlagMode.Residence, "Allows or denys Mob combustion in residences", true), + button(143, 0, FlagMode.Both, "Allows or denys players to use buttons", true), + cake(354, 0, FlagMode.Both, "Allows or denys players to eat cake", true), + canimals(383, 91, FlagMode.Residence, "Allows or denys custom animal spawns", true), + chorustp(432, 0, FlagMode.Both, "Allow or disallow teleporting to the residence with chorus fruit", true), + chat(386, 0, FlagMode.Both, "Allows to join residence chat room", true), + cmonsters(383, 50, FlagMode.Residence, "Allows or denys custom monster spawns", true), + commandblock(137, 0, FlagMode.Both, "Allows or denys command block interaction", false), + command(137, 0, FlagMode.Both, "Allows or denys comamnd use in residences", false), + container(342, 0, FlagMode.Both, "Allows or denys use of furnaces, chests, dispensers, etc...", true), + coords(345, 0, FlagMode.Residence, "Hides residence coordinates", true), + craft(1, 0, FlagMode.Residence, "Gives table, enchant, brew flags", true), + creeper(383, 50, FlagMode.Residence, "Allow or deny creeper explosions", true), + dragongrief(3, 0, FlagMode.Residence, "Prevents ender dragon block griefing", true), + day(37, 0, FlagMode.Residence, "Sets day time in residence", true), + dye(351, 14, FlagMode.Both, "Allows or denys sheep dyeing", true), + damage(283, 0, FlagMode.Residence, "Allows or denys all entity damage within the residence", false), + decay(18, 0, FlagMode.Residence, "Allows or denys leave decay in the residence", true), + destroy(121, 0, FlagMode.Both, "Allows or denys only destruction of blocks, overrides the build flag", true), + dryup(160, 11, FlagMode.Residence, "Prevents land from drying up", true), + diode(356, 0, FlagMode.Both, "Allows or denys players to use redstone repeaters", true), + door(324, 0, FlagMode.Both, "Allows or denys players to use doors and trapdoors", true), + egg(344, 0, FlagMode.Both, "Allows or denys interaction with dragon egg", true), + enchant(116, 0, FlagMode.Both, "Allows or denys players to use enchanting tables", true), + explode(407, 0, FlagMode.Residence, "Allows or denys explosions in residences", true), + enderpearl(368, 0, FlagMode.Both, "Allow or disallow teleporting to the residence with enderpearl", true), + falldamage(301, 0, FlagMode.Residence, "Protects players from fall damage", true), + feed(364, 0, FlagMode.Residence, "Setting to true makes the residence feed its occupants", true), + fireball(385, 0, FlagMode.Residence, "Allows or denys fire balls in residences", true), + firespread(377, 0, FlagMode.Residence, "Allows or denys fire spread", true), + flow(111, 0, FlagMode.Residence, "Allows or denys liquid flow", true), + flowerpot(390, 0, FlagMode.Both, "Allows or denys interaction with flower pot", true), + grow(295, 0, FlagMode.Residence, "Allows or denys plant growing", true), + glow(169, 0, FlagMode.Residence, "Players will start glowing when entering residence", true), + hotfloor(213, 0, FlagMode.Residence, "Prevent damage from magma blocks", true), + hidden(102, 0, FlagMode.Residence, "Hides residence from list or listall commands", false), + hook(346, 0, FlagMode.Both, "Allows or denys fishing rod hooking entities", true), + healing(373, 0, FlagMode.Residence, "Setting to true makes the residence heal its occupants", true), + iceform(79, 0, FlagMode.Residence, "Prevents from ice forming", true), + icemelt(79, 0, FlagMode.Residence, "Prevents ice from melting", true), + ignite(259, 0, FlagMode.Both, "Allows or denys fire ignition", true), + jump2(165, 0, FlagMode.Residence, "Allows to jump 2 blocks high", false), + jump3(165, 0, FlagMode.Residence, "Allows to jump 3 blocks high", false), + keepinv(298, 0, FlagMode.Residence, "Players keeps inventory after death", false), + keepexp(322, 0, FlagMode.Residence, "Players keeps exp after death", false), + lavaflow(327, 0, FlagMode.Residence, "Allows or denys lava flow, overrides flow", true), + leash(420, 0, FlagMode.Both, "Allows or denys aninal leash", true), + lever(69, 0, FlagMode.Both, "Allows or denys players to use levers", true), + mobexpdrop(362, 0, FlagMode.Residence, "Prevents mob droping exp on death", true), + mobitemdrop(351, 3, FlagMode.Residence, "Prevents mob droping items on death", true), + mobkilling(367, 0, FlagMode.Both, "Allows or denys mob killing", true), + monsters(52, 0, FlagMode.Residence, "Allows or denys monster spawns", true), + move(301, 0, FlagMode.Both, "Allows or denys movement in the residence", true), + nanimals(383, 92, FlagMode.Residence, "Allows or denys natural animal spawns", true), + nmonsters(383, 51, FlagMode.Residence, "Allows or denys natural monster spawns", true), + night(35, 15, FlagMode.Residence, "Sets night time in residence", true), + nofly(171, 1, FlagMode.Both, "Allows or denys fly in residence", false), + nomobs(166, 0, FlagMode.Residence, "Prevents monsters from entering residence", true), + note(25, 0, FlagMode.Both, "Allows or denys players to use note blocks", true), + nodurability(145, 0, FlagMode.Residence, "Prevents item durability loss", false), + overridepvp(267, 0, FlagMode.Residence, "Overrides any plugin pvp protection", false), + pressure(147, 0, FlagMode.Both, "Allows or denys players to use pressure plates", true), + piston(33, 0, FlagMode.Residence, "Allow or deny pistons from pushing or pulling blocks in the residence", true), + pistonprotection(29, 0, FlagMode.Residence, "Enables or disabled piston block move in or out of residence", true), + place(169, 0, FlagMode.Both, "Allows or denys only placement of blocks, overrides the build flag", true), + pvp(268, 0, FlagMode.Residence, "Allow or deny pvp in the residence", true), + rain(38, 1, FlagMode.Residence, "Sets weather to rainny in residence", true), + redstone(175, 0, FlagMode.Group, "Gives lever, diode, button, pressure, note flags", true), + respawn(175, 0, FlagMode.Residence, "Automaticaly respawns player", false), + riding(329, 0, FlagMode.Both, "Prevent riding a horse", true), + sun(175, 0, FlagMode.Residence, "Sets weather to sunny in residence", true), + shop(389, 0, FlagMode.Residence, "Adds residence to special residence shop list", true), + snowtrail(78, 0, FlagMode.Residence, "Prevents snowman snow trails", true), + spread(332, 0, FlagMode.Residence, "Prevents block spreading", true), + snowball(332, 0, FlagMode.Residence, "Prevents snowball knockback", true), + sanimals(383, 101, FlagMode.Residence, "Allows or denys spawner or spawn egg animal spawns", true), + shear(359, 0, FlagMode.Both, "Allows or denys sheep shear", true), + smonsters(383, 54, FlagMode.Residence, "Allows or denys spawner or spawn egg monster spawns", true), + subzone(160, 7, FlagMode.Both, "Allow a player to make subzones in the residence", true), + table(58, 0, FlagMode.Both, "Allows or denys players to use workbenches", true), + tnt(46, 0, FlagMode.Residence, "Allow or deny tnt explosions", true), + tp(120, 0, FlagMode.Both, "Allow or disallow teleporting to the residence", true), + trade(388, 0, FlagMode.Both, "Allows or denys villager trading in residence", true), + trample(3, 0, FlagMode.Residence, "Allows or denys crop trampling in residence", true), + trusted(1, 0, FlagMode.Group, "Gives build, use, move, container and tp flags", true), + use(70, 0, FlagMode.Both, "Allows or denys use of doors, lever, buttons, etc...", true), + vehicledestroy(328, 0, FlagMode.Both, "Allows or denys vehicle destroy", true), + waterflow(326, 0, FlagMode.Residence, "Allows or denys water flow, overrides flow", true), + wspeed1(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true), + wspeed2(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true); + + private int id; + private int data; + private FlagMode flagMode; + private String desc; + private boolean enabled; + + public static enum FlagMode { + Player, Residence, Both, Group + } + + private Flags(int id, int data, FlagMode flagMode, String desc, boolean enabled) { + this.id = id; + this.data = data; + this.flagMode = flagMode; + this.desc = desc; + this.enabled = enabled; + } + + public int getId() { + return id; + } + + public int getData() { + return data; + } + + public String getName() { + return this.name(); + } + + public FlagMode getFlagMode() { + return flagMode; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public static Flags getFlag(String flag) { + for (Flags f : Flags.values()) { + if (f.getName().equalsIgnoreCase(flag)) + return f; + } + return null; + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index dbf6aa9f9..1e643f8ad 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1,1099 +1,1117 @@ -package com.bekvon.bukkit.residence.listeners; - -import org.bukkit.Location; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.event.entity.EntityChangeBlockEvent; -import org.bukkit.event.entity.EntityCombustByEntityEvent; -import org.bukkit.event.entity.EntityCombustEvent; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.event.entity.EntityInteractEvent; -import org.bukkit.event.entity.PotionSplashEvent; -import org.bukkit.event.entity.ProjectileHitEvent; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -import org.bukkit.Material; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Creeper; -import org.bukkit.entity.Damageable; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Monster; -import org.bukkit.entity.Projectile; -import org.bukkit.entity.Tameable; -import org.bukkit.entity.Vehicle; -import org.bukkit.entity.minecart.HopperMinecart; -import org.bukkit.entity.Slime; -import org.bukkit.entity.Ghast; -import org.bukkit.entity.Hanging; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.ExplosionPrimeEvent; -import org.bukkit.event.entity.PlayerLeashEntityEvent; -import org.bukkit.event.hanging.HangingBreakByEntityEvent; -import org.bukkit.event.hanging.HangingPlaceEvent; -import org.bukkit.event.inventory.InventoryMoveItemEvent; -import org.bukkit.event.vehicle.VehicleDestroyEvent; -import org.bukkit.potion.PotionEffect; - -public class ResidenceEntityListener implements Listener { - - Residence plugin; - - public ResidenceEntityListener(Residence plugin) { - this.plugin = plugin; - } - - @SuppressWarnings("incomplete-switch") - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onMinecartHopperItemMove(InventoryMoveItemEvent event) { - if (!(event.getInitiator().getHolder() instanceof HopperMinecart)) - return; - HopperMinecart hopper = (HopperMinecart) event.getInitiator().getHolder(); - // disabling event on world - if (Residence.isDisabledWorldListener(hopper.getWorld())) - return; - Block block = hopper.getLocation().getBlock(); - switch (block.getType()) { - case ACTIVATOR_RAIL: - case DETECTOR_RAIL: - case POWERED_RAIL: - case RAILS: - return; - } - event.setCancelled(true); - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEndermanChangeBlock(EntityChangeBlockEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) - return; - if (event.getEntityType() != EntityType.ENDERMAN) - return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.destroy, true)) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onEntityInteract(EntityInteractEvent event) { - // disabling event on world - Block block = event.getBlock(); - if (block == null) - return; - if (Residence.isDisabledWorldListener(block.getWorld())) - return; - Material mat = block.getType(); - Entity entity = event.getEntity(); - FlagPermissions perms = Residence.getPermsByLoc(block.getLocation()); - boolean hastrample = perms.has(Flags.trample, perms.has(Flags.build, true)); - if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { - event.setCancelled(true); - } - } - - public static boolean isMonster(Entity ent) { - return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast); - } - - private static boolean isTamed(Entity ent) { - return (ent instanceof Tameable ? ((Tameable) ent).isTamed() : false); - } - - @EventHandler(priority = EventPriority.LOWEST) - public void AnimalKilling(EntityDamageByEntityEvent event) { - // disabling event on world - Entity entity = event.getEntity(); - if (entity == null) - return; - if (Residence.isDisabledWorldListener(entity.getWorld())) - return; - if (!Residence.getNms().isAnimal(entity)) - return; - - Entity damager = event.getDamager(); - - if (!(damager instanceof Arrow) && !(damager instanceof Player)) - return; - - if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) - return; - - Player cause = null; - - if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Arrow) damager).getShooter(); - } - - if (cause == null) - return; - - if (Residence.isResAdminOn(cause)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); - - if (res == null) - return; - - if (!res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, true)) { - Residence.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - Entity entity = event.getEntity(); - if (entity == null) - return; - if (!Residence.getNms().isAnimal(entity)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); - - if (res == null) - return; - - Entity damager = event.getCombuster(); - - if (!(damager instanceof Arrow) && !(damager instanceof Player)) - return; - - if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) - return; - - Player cause = null; - - if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Arrow) damager).getShooter(); - } - - if (cause == null) - return; - - if (Residence.isResAdminOn(cause)) - return; - - if (!res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, true)) { - Residence.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - Entity entity = event.getEntity(); - if (entity == null) - return; - if (!Residence.getNms().isAnimal(entity)) - return; - - Entity damager = event.getDamager(); - - if (damager instanceof Projectile && ((Projectile) damager).getShooter() instanceof Player || damager instanceof Player) - return; - - FlagPermissions perms = Residence.getPermsByLoc(entity.getLocation()); - FlagPermissions world = Residence.getWorldFlags().getPerms(entity.getWorld().getName()); - if (!perms.has(Flags.animalkilling, world.has(Flags.animalkilling, true))) { - event.setCancelled(true); - return; - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void OnEntityDeath(EntityDeathEvent event) { - // disabling event on world - LivingEntity ent = event.getEntity(); - if (ent == null) - return; - if (Residence.isDisabledWorldListener(ent.getWorld())) - return; - if (ent instanceof Player) - return; - Location loc = ent.getLocation(); - FlagPermissions perms = Residence.getPermsByLoc(loc); - if (!perms.has(Flags.mobitemdrop, true)) { - event.getDrops().clear(); - } - if (!perms.has(Flags.mobexpdrop, true)) { - event.setDroppedExp(0); - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void VehicleDestroy(VehicleDestroyEvent event) { - // disabling event on world - Entity damager = event.getAttacker(); - if (damager == null) - return; - - if (Residence.isDisabledWorldListener(damager.getWorld())) - return; - - Vehicle vehicle = event.getVehicle(); - - if (vehicle == null) - return; - - if (damager instanceof Projectile && !(((Projectile) damager).getShooter() instanceof Player) || !(damager instanceof Player)) { - FlagPermissions perms = Residence.getPermsByLoc(vehicle.getLocation()); - if (!perms.has(Flags.vehicledestroy, true)) { - event.setCancelled(true); - return; - } - } - - Player cause = null; - - if (damager instanceof Player) { - cause = (Player) damager; - } else if (damager instanceof Projectile && ((Projectile) damager).getShooter() instanceof Player) { - cause = (Player) ((Projectile) damager).getShooter(); - } - - if (cause == null) - return; - - if (Residence.isResAdminOn(cause)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(vehicle.getLocation()); - - if (res == null) - return; - - if (!res.getPermissions().playerHas(cause.getName(), Flags.vehicledestroy, true)) { - Residence.msg(cause, lm.Residence_FlagDeny, Flags.vehicledestroy.getName(), res.getName()); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void MonsterKilling(EntityDamageByEntityEvent event) { - // disabling event on world - Entity entity = event.getEntity(); - if (entity == null) - return; - if (Residence.isDisabledWorldListener(entity.getWorld())) - return; - if (!isMonster(entity)) - return; - - Entity damager = event.getDamager(); - - if (!(damager instanceof Arrow) && !(damager instanceof Player)) - return; - - if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) - return; - - Player cause = null; - - if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Arrow) damager).getShooter(); - } - - if (cause == null) - return; - - if (Residence.isResAdminOn(cause)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); - - if (res == null) - return; - - if (!res.getPermissions().playerHas(cause.getName(), Flags.mobkilling, true)) { - Residence.msg(cause, lm.Residence_FlagDeny, Flags.mobkilling.getName(), res.getName()); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void AnimalLeash(PlayerLeashEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - Player player = event.getPlayer(); - - Entity entity = event.getEntity(); - - if (!Residence.getNms().isAnimal(entity)) - return; - - if (Residence.isResAdminOn(player)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); - - if (res == null) - return; - - if (!res.getPermissions().playerHas(player.getName(), Flags.leash, true)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onCreatureSpawn(CreatureSpawnEvent event) { - // disabling event on world - Entity ent = event.getEntity(); - if (ent == null) - return; - if (Residence.isDisabledWorldListener(ent.getWorld())) - return; - FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); - - if (Residence.getNms().isAnimal(ent)) { - if (!perms.has(Flags.animals, true)) { - event.setCancelled(true); - return; - } - switch (event.getSpawnReason()) { - case BUILD_WITHER: - break; - case BUILD_IRONGOLEM: - case BUILD_SNOWMAN: - case CUSTOM: - case DEFAULT: - if (!perms.has(Flags.canimals, true)) { - event.setCancelled(true); - return; - } - break; - case BREEDING: - case CHUNK_GEN: - case CURED: - case DISPENSE_EGG: - case EGG: - case JOCKEY: - case MOUNT: - case VILLAGE_INVASION: - case VILLAGE_DEFENSE: - case NETHER_PORTAL: - case OCELOT_BABY: - case NATURAL: - if (!perms.has(Flags.nanimals, true)) { - event.setCancelled(true); - return; - } - break; - case SPAWNER_EGG: - case SPAWNER: - if (!perms.has(Flags.sanimals, true)) { - event.setCancelled(true); - return; - } - break; - default: - break; - } - } else if (isMonster(ent)) { - if (!perms.has(Flags.monsters, true)) { - event.setCancelled(true); - return; - } - switch (event.getSpawnReason()) { - case BUILD_WITHER: - case CUSTOM: - case DEFAULT: - if (!perms.has(Flags.cmonsters, true)) { - event.setCancelled(true); - return; - } - break; - case CHUNK_GEN: - case CURED: - case DISPENSE_EGG: - case INFECTION: - case JOCKEY: - case MOUNT: - case NETHER_PORTAL: - case SILVERFISH_BLOCK: - case SLIME_SPLIT: - case LIGHTNING: - case NATURAL: - if (!perms.has(Flags.nmonsters, true)) { - event.setCancelled(true); - return; - } - break; - case SPAWNER_EGG: - case SPAWNER: - if (!perms.has(Flags.smonsters, true)) { - event.setCancelled(true); - return; - } - break; - default: - break; - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onHangingPlace(HangingPlaceEvent event) { - - // disabling event on world - Player player = event.getPlayer(); - if (player == null) - return; - if (Residence.isDisabledWorldListener(player.getWorld())) - return; - if (Residence.isResAdminOn(player)) - return; - - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); - String pname = player.getName(); - String world = player.getWorld().getName(); - if (!perms.playerHas(pname, world, Flags.place, perms.playerHas(pname, world, Flags.build, true))) { - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.place.getName()); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onHangingBreak(HangingBreakByEntityEvent event) { - // disabling event on world - Hanging ent = event.getEntity(); - if (ent == null) - return; - if (Residence.isDisabledWorldListener(ent.getWorld())) - return; - - if (!(event.getRemover() instanceof Player)) - return; - - Player player = (Player) event.getRemover(); - if (Residence.isResAdminOn(player)) - return; - - if (Residence.getResidenceManager().isOwnerOfLocation(player, ent.getLocation())) - return; - - String pname = player.getName(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); - String world = ent.getWorld().getName(); - if (!perms.playerHas(pname, world, Flags.destroy, perms.playerHas(pname, world, Flags.build, true))) { - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { - // disabling event on world - Hanging ent = event.getEntity(); - if (ent == null) - return; - if (Residence.isDisabledWorldListener(ent.getWorld())) - return; - - if (event.getRemover() instanceof Player) - return; - - FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); - if (!perms.has(Flags.destroy, perms.has(Flags.build, true))) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityCombust(EntityCombustEvent event) { - // disabling event on world - Entity ent = event.getEntity(); - if (ent == null) - return; - if (Residence.isDisabledWorldListener(ent.getWorld())) - return; - FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); - if (!perms.has(Flags.burn, true)) { - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onExplosionPrime(ExplosionPrimeEvent event) { - // disabling event on world - Entity ent = event.getEntity(); - if (ent == null) - return; - if (Residence.isDisabledWorldListener(ent.getWorld())) - return; - EntityType entity = event.getEntityType(); - FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); - - switch (entity) { - case CREEPER: - if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) { - if (Residence.getConfigManager().isCreeperExplodeBelow()) { - if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) { - event.setCancelled(true); - ent.remove(); - } else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res != null) { - event.setCancelled(true); - ent.remove(); - } - } - } else { - event.setCancelled(true); - ent.remove(); - } - } - break; - case PRIMED_TNT: - case MINECART_TNT: - if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { - if (Residence.getConfigManager().isTNTExplodeBelow()) { - if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) { - event.setCancelled(true); - ent.remove(); - } else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res != null) { - event.setCancelled(true); - ent.remove(); - } - } - } else { - event.setCancelled(true); - ent.remove(); - } - } - break; - case SMALL_FIREBALL: - case FIREBALL: - if (!perms.has(Flags.fireball, perms.has(Flags.explode, true))) { - event.setCancelled(true); - ent.remove(); - } - break; - default: - if (!perms.has(Flags.destroy, true)) { - if (entity != EntityType.ENDER_CRYSTAL) { - event.setCancelled(true); - ent.remove(); - } - } - break; - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityExplode(EntityExplodeEvent event) { - // disabling event on world - - Location loc = event.getLocation(); - if (Residence.isDisabledWorldListener(loc.getWorld())) - return; - if (event.isCancelled()) - return; - - Entity ent = event.getEntity(); - - Boolean cancel = false; - FlagPermissions perms = Residence.getPermsByLoc(loc); - FlagPermissions world = Residence.getWorldFlags().getPerms(loc.getWorld().getName()); - - if (ent != null) { - switch (event.getEntityType()) { - case CREEPER: - if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) - if (Residence.getConfigManager().isCreeperExplodeBelow()) { - if (loc.getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) - cancel = true; - else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res != null) - cancel = true; - } - } else - cancel = true; - break; - case PRIMED_TNT: - case MINECART_TNT: - if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { - if (Residence.getConfigManager().isTNTExplodeBelow()) { - if (loc.getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) - cancel = true; - else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res != null) - cancel = true; - } - } else - cancel = true; - } - break; - case SMALL_FIREBALL: - case FIREBALL: - if (!perms.has(Flags.fireball, perms.has(Flags.explode, true))) - cancel = true; - break; - default: - if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) - cancel = true; - break; - } - } else if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) { - cancel = true; - } - - if (cancel) { - event.setCancelled(true); - if (ent != null) - ent.remove(); - return; - } - - List preserve = new ArrayList(); - for (Block block : event.blockList()) { - FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); - - if (ent != null) { - switch (event.getEntityType()) { - case CREEPER: - if (!blockperms.has(Flags.creeper, blockperms.has(Flags.explode, true))) - if (Residence.getConfigManager().isCreeperExplodeBelow()) { - if (block.getY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) - preserve.add(block); - else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); - if (res != null) - preserve.add(block); - } - } else - preserve.add(block); - continue; - case PRIMED_TNT: - case MINECART_TNT: - if (!blockperms.has(Flags.tnt, blockperms.has(Flags.explode, true))) { - if (Residence.getConfigManager().isTNTExplodeBelow()) { - if (block.getY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) - preserve.add(block); - else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); - if (res != null) - preserve.add(block); - } - } else - preserve.add(block); - } - continue; - case ENDER_DRAGON: - if (!blockperms.has(Flags.dragongrief, false)) - preserve.add(block); - break; - case ENDER_CRYSTAL: - if (!blockperms.has(Flags.explode, false)) - preserve.add(block); - continue; - case SMALL_FIREBALL: - case FIREBALL: - if (!blockperms.has(Flags.fireball, blockperms.has(Flags.explode, true))) - preserve.add(block); - continue; - default: - if (!blockperms.has(Flags.destroy, world.has(Flags.destroy, true))) - preserve.add(block); - continue; - } - } else { - if (!blockperms.has(Flags.destroy, world.has(Flags.destroy, true))) { - preserve.add(block); - } - } - } - - for (Block block : preserve) { - event.blockList().remove(block); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onSplashPotion(PotionSplashEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - boolean harmfull = false; - mein: for (PotionEffect one : event.getPotion().getEffects()) { - for (String oneHarm : Residence.getConfigManager().getNegativePotionEffects()) { - if (oneHarm.equalsIgnoreCase(one.getType().getName())) { - harmfull = true; - break mein; - } - } - } - if (!harmfull) - return; - - Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); - Iterator it = event.getAffectedEntities().iterator(); - while (it.hasNext()) { - LivingEntity target = it.next(); - if (target.getType() != EntityType.PLAYER) - continue; - Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has(Flags.pvp, true); - if (!srcpvp || !tgtpvp) - event.setIntensity(target, 0); - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - Entity entity = event.getEntity(); - if (entity == null) - return; - if (!(entity instanceof Player)) - return; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); - - if (res == null) - return; - - Entity damager = event.getCombuster(); - - if (!(damager instanceof Arrow) && !(damager instanceof Player)) - return; - - if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) - return; - - Player cause = null; - - if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Arrow) damager).getShooter(); - } - - if (cause == null) - return; - - if (Residence.isResAdminOn(cause)) - return; - - Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); - Boolean tgtpvp = Residence.getPermsByLoc(entity.getLocation()).has(Flags.pvp, true); - if (!srcpvp || !tgtpvp) - event.setCancelled(true); - } - - @EventHandler - public void OnArmorStandFlameDamage(EntityDamageEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - if (event.getCause() != DamageCause.FIRE_TICK) - return; - Entity ent = event.getEntity(); - if (!Residence.getNms().isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) - return; - - if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { - event.setCancelled(true); - ent.setFireTicks(0); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockCatchingFire(ProjectileHitEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (!(event.getEntity() instanceof Arrow)) - return; - Arrow arrow = (Arrow) event.getEntity(); - - FlagPermissions perms = Residence.getPermsByLoc(arrow.getLocation()); - - if (!perms.has(Flags.pvp, FlagCombo.OnlyTrue)) - arrow.setFireTicks(0); - } - - @EventHandler - public void OnPlayerDamageByLightning(EntityDamageEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - if (event.getCause() != DamageCause.LIGHTNING) - return; - Entity ent = event.getEntity(); - if (!(ent instanceof Player)) - return; - if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true)) - event.setCancelled(true); - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityDamageByFireballEvent(EntityDamageByEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - Entity dmgr = event.getDamager(); - - if (dmgr.getType() != EntityType.SMALL_FIREBALL && dmgr.getType() != EntityType.FIREBALL) - return; - - if (dmgr.getType() == EntityType.FIREBALL || dmgr.getType() == EntityType.SMALL_FIREBALL) { - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); - if (!perms.has(Flags.fireball, false)) { - event.setCancelled(true); - return; - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - if (event.getEntityType() != EntityType.ENDER_CRYSTAL && event.getEntityType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event - .getEntityType())) - return; - - Entity dmgr = event.getDamager(); - - Player player = null; - if (dmgr instanceof Player) { - player = (Player) event.getDamager(); - } else if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { - player = (Player) ((Projectile) dmgr).getShooter(); - } else if ((dmgr instanceof Projectile) && (!(((Projectile) dmgr).getShooter() instanceof Player))) { - Location loc = event.getEntity().getLocation(); - FlagPermissions perm = Residence.getPermsByLoc(loc); - if (perm.has(Flags.destroy, FlagCombo.FalseOrNone)) - event.setCancelled(true); - return; - } else if (dmgr.getType() == EntityType.PRIMED_TNT || dmgr.getType() == EntityType.MINECART_TNT || dmgr.getType() == EntityType.WITHER_SKULL || dmgr - .getType() == EntityType.WITHER) { - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); - boolean destroy = perms.has(Flags.explode, false); - if (!destroy) { - event.setCancelled(true); - return; - } - } - - Location loc = event.getEntity().getLocation(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res == null) - return; - - if (isMonster(dmgr) && !res.getPermissions().has(Flags.destroy, false)) { - event.setCancelled(true); - return; - } - - if (player == null) - return; - - if (Residence.isResAdminOn(player)) - return; - - String pname = player.getName(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); - String world = loc.getWorld().getName(); - if (!perms.playerHas(pname, world, Flags.destroy, perms.playerHas(pname, world, Flags.build, true))) { - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityDamage(EntityDamageEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - Entity ent = event.getEntity(); - if (ent.hasMetadata("NPC")) - return; - - boolean tamedAnimal = isTamed(ent); - ClaimedResidence area = Residence.getResidenceManager().getByLoc(ent.getLocation()); - - /* Living Entities */ - if (event instanceof EntityDamageByEntityEvent) { - EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; - Entity damager = attackevent.getDamager(); - - if (area != null && ent instanceof Player && damager instanceof Player) { - if (area.getPermissions().has(Flags.overridepvp, false) || Residence.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, false)) { - Player player = (Player) event.getEntity(); - Damageable damage = player; - damage.damage(event.getDamage()); - damage.setVelocity(damager.getLocation().getDirection()); - event.setCancelled(true); - return; - } - } - - ClaimedResidence srcarea = null; - if (damager != null) { - srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); - } - boolean srcpvp = true; - boolean allowSnowBall = false; - boolean isSnowBall = false; - boolean isOnFire = false; - if (srcarea != null) { - srcpvp = srcarea.getPermissions().has(Flags.pvp, true); - } - ent = attackevent.getEntity(); - if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) - .getShooter() instanceof Player))) && event.getCause() != DamageCause.FALL) { - Player attacker = null; - if (damager instanceof Player) { - attacker = (Player) damager; - } else if (damager instanceof Projectile) { - Projectile project = (Projectile) damager; - if (project.getType() == EntityType.SNOWBALL && srcarea != null) { - isSnowBall = true; - allowSnowBall = srcarea.getPermissions().has(Flags.snowball, false); - } - if (project.getFireTicks() > 0) - isOnFire = true; - - attacker = (Player) ((Projectile) damager).getShooter(); - } - - if (!(ent instanceof Player)) - return; - - if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { - if (attacker != null) - Residence.msg(attacker, lm.General_NoPVPZone); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); - return; - } - - /* Check for Player vs Player */ - if (area == null) { - /* World PvP */ - if (damager != null) - if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, true)) { - if (attacker != null) - Residence.msg(attacker, lm.General_WorldPVPDisabled); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); - return; - } - - /* Attacking from safe zone */ - if (attacker != null) { - FlagPermissions aPerm = Residence.getPermsByLoc(attacker.getLocation()); - if (aPerm.has(Flags.pvp, FlagCombo.FalseOrNone)) { - Residence.msg(attacker, lm.General_NoPVPZone); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); - return; - } - } - } else { - /* Normal PvP */ - if (!isSnowBall && !area.getPermissions().has(Flags.pvp, true) || isSnowBall && !allowSnowBall) { - if (attacker != null) - Residence.msg(attacker, lm.General_NoPVPZone); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); - return; - } - } - return; - } else if ((ent instanceof Player || tamedAnimal) && (damager instanceof Creeper)) { - if (area == null && !Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.creeper, true)) { - event.setCancelled(true); - } else if (area != null && !area.getPermissions().has(Flags.creeper, true)) { - event.setCancelled(true); - } - } - } - if (area == null) { - if (!Residence.getWorldFlags().getPerms(ent.getWorld().getName()).has(Flags.damage, true) && (ent instanceof Player || tamedAnimal)) { - event.setCancelled(true); - } - } else { - if (!area.getPermissions().has(Flags.damage, true) && (ent instanceof Player || tamedAnimal)) { - event.setCancelled(true); - } - } - if (event.isCancelled()) { - /* Put out a fire on a player */ - if ((ent instanceof Player || tamedAnimal) && (event.getCause() == EntityDamageEvent.DamageCause.FIRE || event - .getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) { - ent.setFireTicks(0); - } - } - } -} +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.Location; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.entity.EntityCombustByEntityEvent; +import org.bukkit.event.entity.EntityCombustEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.EntityInteractEvent; +import org.bukkit.event.entity.PotionSplashEvent; +import org.bukkit.event.entity.ProjectileHitEvent; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +import org.bukkit.Material; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Creeper; +import org.bukkit.entity.Damageable; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Monster; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.Tameable; +import org.bukkit.entity.Vehicle; +import org.bukkit.entity.minecart.HopperMinecart; +import org.bukkit.entity.Slime; +import org.bukkit.entity.Ghast; +import org.bukkit.entity.Hanging; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.ExplosionPrimeEvent; +import org.bukkit.event.entity.PlayerLeashEntityEvent; +import org.bukkit.event.hanging.HangingBreakByEntityEvent; +import org.bukkit.event.hanging.HangingPlaceEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.vehicle.VehicleDestroyEvent; +import org.bukkit.potion.PotionEffect; + +public class ResidenceEntityListener implements Listener { + + Residence plugin; + + public ResidenceEntityListener(Residence plugin) { + this.plugin = plugin; + } + + @SuppressWarnings("incomplete-switch") + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onMinecartHopperItemMove(InventoryMoveItemEvent event) { + if (!(event.getInitiator().getHolder() instanceof HopperMinecart)) + return; + HopperMinecart hopper = (HopperMinecart) event.getInitiator().getHolder(); + // disabling event on world + if (Residence.isDisabledWorldListener(hopper.getWorld())) + return; + Block block = hopper.getLocation().getBlock(); + switch (block.getType()) { + case ACTIVATOR_RAIL: + case DETECTOR_RAIL: + case POWERED_RAIL: + case RAILS: + return; + } + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEndermanChangeBlock(EntityChangeBlockEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + return; + if (event.getEntityType() != EntityType.ENDERMAN) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.destroy, true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onEntityInteract(EntityInteractEvent event) { + // disabling event on world + Block block = event.getBlock(); + if (block == null) + return; + if (Residence.isDisabledWorldListener(block.getWorld())) + return; + Material mat = block.getType(); + Entity entity = event.getEntity(); + FlagPermissions perms = Residence.getPermsByLoc(block.getLocation()); + boolean hastrample = perms.has(Flags.trample, perms.has(Flags.build, true)); + if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { + event.setCancelled(true); + } + } + + public static boolean isMonster(Entity ent) { + return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast); + } + + private static boolean isTamed(Entity ent) { + return (ent instanceof Tameable ? ((Tameable) ent).isTamed() : false); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalKilling(EntityDamageByEntityEvent event) { + // disabling event on world + Entity entity = event.getEntity(); + if (entity == null) + return; + if (Residence.isDisabledWorldListener(entity.getWorld())) + return; + if (!Residence.getNms().isAnimal(entity)) + return; + + Entity damager = event.getDamager(); + + if (!(damager instanceof Arrow) && !(damager instanceof Player)) + return; + + if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + return; + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, true)) { + Residence.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + Entity entity = event.getEntity(); + if (entity == null) + return; + if (!Residence.getNms().isAnimal(entity)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + Entity damager = event.getCombuster(); + + if (!(damager instanceof Arrow) && !(damager instanceof Player)) + return; + + if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + return; + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + if (!res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, true)) { + Residence.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + Entity entity = event.getEntity(); + if (entity == null) + return; + if (!Residence.getNms().isAnimal(entity)) + return; + + Entity damager = event.getDamager(); + + if (damager instanceof Projectile && ((Projectile) damager).getShooter() instanceof Player || damager instanceof Player) + return; + + FlagPermissions perms = Residence.getPermsByLoc(entity.getLocation()); + FlagPermissions world = Residence.getWorldFlags().getPerms(entity.getWorld().getName()); + if (!perms.has(Flags.animalkilling, world.has(Flags.animalkilling, true))) { + event.setCancelled(true); + return; + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void OnEntityDeath(EntityDeathEvent event) { + // disabling event on world + LivingEntity ent = event.getEntity(); + if (ent == null) + return; + if (Residence.isDisabledWorldListener(ent.getWorld())) + return; + if (ent instanceof Player) + return; + Location loc = ent.getLocation(); + FlagPermissions perms = Residence.getPermsByLoc(loc); + if (!perms.has(Flags.mobitemdrop, true)) { + event.getDrops().clear(); + } + if (!perms.has(Flags.mobexpdrop, true)) { + event.setDroppedExp(0); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void VehicleDestroy(VehicleDestroyEvent event) { + // disabling event on world + Entity damager = event.getAttacker(); + if (damager == null) + return; + + if (Residence.isDisabledWorldListener(damager.getWorld())) + return; + + Vehicle vehicle = event.getVehicle(); + + if (vehicle == null) + return; + + if (damager instanceof Projectile && !(((Projectile) damager).getShooter() instanceof Player) || !(damager instanceof Player)) { + FlagPermissions perms = Residence.getPermsByLoc(vehicle.getLocation()); + if (!perms.has(Flags.vehicledestroy, true)) { + event.setCancelled(true); + return; + } + } + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else if (damager instanceof Projectile && ((Projectile) damager).getShooter() instanceof Player) { + cause = (Player) ((Projectile) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(vehicle.getLocation()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(cause.getName(), Flags.vehicledestroy, true)) { + Residence.msg(cause, lm.Residence_FlagDeny, Flags.vehicledestroy.getName(), res.getName()); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void MonsterKilling(EntityDamageByEntityEvent event) { + // disabling event on world + Entity entity = event.getEntity(); + if (entity == null) + return; + if (Residence.isDisabledWorldListener(entity.getWorld())) + return; + if (!isMonster(entity)) + return; + + Entity damager = event.getDamager(); + + if (!(damager instanceof Arrow) && !(damager instanceof Player)) + return; + + if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + return; + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(cause.getName(), Flags.mobkilling, true)) { + Residence.msg(cause, lm.Residence_FlagDeny, Flags.mobkilling.getName(), res.getName()); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalLeash(PlayerLeashEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + Player player = event.getPlayer(); + + Entity entity = event.getEntity(); + + if (!Residence.getNms().isAnimal(entity)) + return; + + if (Residence.isResAdminOn(player)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(player.getName(), Flags.leash, true)) { + Residence.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onCreatureSpawn(CreatureSpawnEvent event) { + // disabling event on world + Entity ent = event.getEntity(); + if (ent == null) + return; + if (Residence.isDisabledWorldListener(ent.getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); + + if (Residence.getNms().isAnimal(ent)) { + if (!perms.has(Flags.animals, true)) { + event.setCancelled(true); + return; + } + switch (event.getSpawnReason()) { + case BUILD_WITHER: + break; + case BUILD_IRONGOLEM: + case BUILD_SNOWMAN: + case CUSTOM: + case DEFAULT: + if (!perms.has(Flags.canimals, true)) { + event.setCancelled(true); + return; + } + break; + case BREEDING: + case CHUNK_GEN: + case CURED: + case DISPENSE_EGG: + case EGG: + case JOCKEY: + case MOUNT: + case VILLAGE_INVASION: + case VILLAGE_DEFENSE: + case NETHER_PORTAL: + case OCELOT_BABY: + case NATURAL: + if (!perms.has(Flags.nanimals, true)) { + event.setCancelled(true); + return; + } + break; + case SPAWNER_EGG: + case SPAWNER: + if (!perms.has(Flags.sanimals, true)) { + event.setCancelled(true); + return; + } + break; + default: + break; + } + } else if (isMonster(ent)) { + if (!perms.has(Flags.monsters, true)) { + event.setCancelled(true); + return; + } + switch (event.getSpawnReason()) { + case BUILD_WITHER: + case CUSTOM: + case DEFAULT: + if (!perms.has(Flags.cmonsters, true)) { + event.setCancelled(true); + return; + } + break; + case CHUNK_GEN: + case CURED: + case DISPENSE_EGG: + case INFECTION: + case JOCKEY: + case MOUNT: + case NETHER_PORTAL: + case SILVERFISH_BLOCK: + case SLIME_SPLIT: + case LIGHTNING: + case NATURAL: + if (!perms.has(Flags.nmonsters, true)) { + event.setCancelled(true); + return; + } + break; + case SPAWNER_EGG: + case SPAWNER: + if (!perms.has(Flags.smonsters, true)) { + event.setCancelled(true); + return; + } + break; + default: + break; + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onHangingPlace(HangingPlaceEvent event) { + + // disabling event on world + Player player = event.getPlayer(); + if (player == null) + return; + if (Residence.isDisabledWorldListener(player.getWorld())) + return; + if (Residence.isResAdminOn(player)) + return; + + FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); + String pname = player.getName(); + String world = player.getWorld().getName(); + if (!perms.playerHas(pname, world, Flags.place, perms.playerHas(pname, world, Flags.build, true))) { + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, Flags.place.getName()); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onHangingBreak(HangingBreakByEntityEvent event) { + // disabling event on world + Hanging ent = event.getEntity(); + if (ent == null) + return; + if (Residence.isDisabledWorldListener(ent.getWorld())) + return; + + if (!(event.getRemover() instanceof Player)) + return; + + Player player = (Player) event.getRemover(); + if (Residence.isResAdminOn(player)) + return; + + if (Residence.getResidenceManager().isOwnerOfLocation(player, ent.getLocation())) + return; + + String pname = player.getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + String world = ent.getWorld().getName(); + if (!perms.playerHas(pname, world, Flags.destroy, perms.playerHas(pname, world, Flags.build, true))) { + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { + // disabling event on world + Hanging ent = event.getEntity(); + if (ent == null) + return; + if (Residence.isDisabledWorldListener(ent.getWorld())) + return; + + if (event.getRemover() instanceof Player) + return; + + FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); + if (!perms.has(Flags.destroy, perms.has(Flags.build, true))) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityCombust(EntityCombustEvent event) { + // disabling event on world + Entity ent = event.getEntity(); + if (ent == null) + return; + if (Residence.isDisabledWorldListener(ent.getWorld())) + return; + FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); + if (!perms.has(Flags.burn, true)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onExplosionPrime(ExplosionPrimeEvent event) { + // disabling event on world + Entity ent = event.getEntity(); + if (ent == null) + return; + if (Residence.isDisabledWorldListener(ent.getWorld())) + return; + EntityType entity = event.getEntityType(); + FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); + + switch (entity) { + case CREEPER: + if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) { + if (Residence.getConfigManager().isCreeperExplodeBelow()) { + if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) { + event.setCancelled(true); + ent.remove(); + } else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + if (res != null) { + event.setCancelled(true); + ent.remove(); + } + } + } else { + event.setCancelled(true); + ent.remove(); + } + } + break; + case PRIMED_TNT: + case MINECART_TNT: + if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { + if (Residence.getConfigManager().isTNTExplodeBelow()) { + if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) { + event.setCancelled(true); + ent.remove(); + } else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + if (res != null) { + event.setCancelled(true); + ent.remove(); + } + } + } else { + event.setCancelled(true); + ent.remove(); + } + } + break; + case SMALL_FIREBALL: + case FIREBALL: + if (!perms.has(Flags.fireball, perms.has(Flags.explode, true))) { + event.setCancelled(true); + ent.remove(); + } + break; + default: + if (!perms.has(Flags.destroy, true)) { + if (entity != EntityType.ENDER_CRYSTAL) { + event.setCancelled(true); + ent.remove(); + } + } + break; + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityExplode(EntityExplodeEvent event) { + // disabling event on world + + Location loc = event.getLocation(); + if (Residence.isDisabledWorldListener(loc.getWorld())) + return; + if (event.isCancelled()) + return; + + Entity ent = event.getEntity(); + + Boolean cancel = false; + FlagPermissions perms = Residence.getPermsByLoc(loc); + FlagPermissions world = Residence.getWorldFlags().getPerms(loc.getWorld().getName()); + + if (ent != null) { + switch (event.getEntityType()) { + case CREEPER: + if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) + if (Residence.getConfigManager().isCreeperExplodeBelow()) { + if (loc.getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) + cancel = true; + else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null) + cancel = true; + } + } else + cancel = true; + break; + case PRIMED_TNT: + case MINECART_TNT: + if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { + if (Residence.getConfigManager().isTNTExplodeBelow()) { + if (loc.getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) + cancel = true; + else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null) + cancel = true; + } + } else + cancel = true; + } + break; + case SMALL_FIREBALL: + case FIREBALL: + if (!perms.has(Flags.fireball, perms.has(Flags.explode, true))) + cancel = true; + break; + default: + if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) + cancel = true; + break; + } + } else if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) { + cancel = true; + } + + if (cancel) { + event.setCancelled(true); + if (ent != null) + ent.remove(); + return; + } + + List preserve = new ArrayList(); + for (Block block : event.blockList()) { + FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); + + if (ent != null) { + switch (event.getEntityType()) { + case CREEPER: + if (!blockperms.has(Flags.creeper, blockperms.has(Flags.explode, true))) + if (Residence.getConfigManager().isCreeperExplodeBelow()) { + if (block.getY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) + preserve.add(block); + else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (res != null) + preserve.add(block); + } + } else + preserve.add(block); + continue; + case PRIMED_TNT: + case MINECART_TNT: + if (!blockperms.has(Flags.tnt, blockperms.has(Flags.explode, true))) { + if (Residence.getConfigManager().isTNTExplodeBelow()) { + if (block.getY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) + preserve.add(block); + else { + ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + if (res != null) + preserve.add(block); + } + } else + preserve.add(block); + } + continue; + case ENDER_DRAGON: + if (!blockperms.has(Flags.dragongrief, false)) + preserve.add(block); + break; + case ENDER_CRYSTAL: + if (!blockperms.has(Flags.explode, false)) + preserve.add(block); + continue; + case SMALL_FIREBALL: + case FIREBALL: + if (!blockperms.has(Flags.fireball, blockperms.has(Flags.explode, true))) + preserve.add(block); + continue; + default: + if (!blockperms.has(Flags.destroy, world.has(Flags.destroy, true))) + preserve.add(block); + continue; + } + } else { + if (!blockperms.has(Flags.destroy, world.has(Flags.destroy, true))) { + preserve.add(block); + } + } + } + + for (Block block : preserve) { + event.blockList().remove(block); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onSplashPotion(PotionSplashEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + boolean harmfull = false; + mein: for (PotionEffect one : event.getPotion().getEffects()) { + for (String oneHarm : Residence.getConfigManager().getNegativePotionEffects()) { + if (oneHarm.equalsIgnoreCase(one.getType().getName())) { + harmfull = true; + break mein; + } + } + } + if (!harmfull) + return; + + Entity ent = event.getEntity(); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); + Iterator it = event.getAffectedEntities().iterator(); + while (it.hasNext()) { + LivingEntity target = it.next(); + if (target.getType() != EntityType.PLAYER) + continue; + Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has(Flags.pvp, true); + if (!srcpvp || !tgtpvp) + event.setIntensity(target, 0); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + Entity entity = event.getEntity(); + if (entity == null) + return; + if (!(entity instanceof Player)) + return; + + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + Entity damager = event.getCombuster(); + + if (!(damager instanceof Arrow) && !(damager instanceof Player)) + return; + + if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + return; + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) + return; + + Entity ent = event.getEntity(); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); + Boolean tgtpvp = Residence.getPermsByLoc(entity.getLocation()).has(Flags.pvp, true); + if (!srcpvp || !tgtpvp) + event.setCancelled(true); + } + + @EventHandler + public void OnFallDamage(EntityDamageEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + if (event.getCause() != DamageCause.FALL) + return; + Entity ent = event.getEntity(); + if (!(ent instanceof Player)) + return; + + if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.falldamage, FlagCombo.TrueOrNone)) { + event.setCancelled(true); + } + } + + @EventHandler + public void OnArmorStandFlameDamage(EntityDamageEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + if (event.getCause() != DamageCause.FIRE_TICK) + return; + Entity ent = event.getEntity(); + if (!Residence.getNms().isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) + return; + + if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { + event.setCancelled(true); + ent.setFireTicks(0); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockCatchingFire(ProjectileHitEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (!(event.getEntity() instanceof Arrow)) + return; + Arrow arrow = (Arrow) event.getEntity(); + + FlagPermissions perms = Residence.getPermsByLoc(arrow.getLocation()); + + if (!perms.has(Flags.pvp, FlagCombo.OnlyTrue)) + arrow.setFireTicks(0); + } + + @EventHandler + public void OnPlayerDamageByLightning(EntityDamageEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + if (event.getCause() != DamageCause.LIGHTNING) + return; + Entity ent = event.getEntity(); + if (!(ent instanceof Player)) + return; + if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true)) + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamageByFireballEvent(EntityDamageByEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + Entity dmgr = event.getDamager(); + + if (dmgr.getType() != EntityType.SMALL_FIREBALL && dmgr.getType() != EntityType.FIREBALL) + return; + + if (dmgr.getType() == EntityType.FIREBALL || dmgr.getType() == EntityType.SMALL_FIREBALL) { + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + if (!perms.has(Flags.fireball, false)) { + event.setCancelled(true); + return; + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + if (event.getEntityType() != EntityType.ENDER_CRYSTAL && event.getEntityType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event + .getEntityType())) + return; + + Entity dmgr = event.getDamager(); + + Player player = null; + if (dmgr instanceof Player) { + player = (Player) event.getDamager(); + } else if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { + player = (Player) ((Projectile) dmgr).getShooter(); + } else if ((dmgr instanceof Projectile) && (!(((Projectile) dmgr).getShooter() instanceof Player))) { + Location loc = event.getEntity().getLocation(); + FlagPermissions perm = Residence.getPermsByLoc(loc); + if (perm.has(Flags.destroy, FlagCombo.FalseOrNone)) + event.setCancelled(true); + return; + } else if (dmgr.getType() == EntityType.PRIMED_TNT || dmgr.getType() == EntityType.MINECART_TNT || dmgr.getType() == EntityType.WITHER_SKULL || dmgr + .getType() == EntityType.WITHER) { + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + boolean destroy = perms.has(Flags.explode, false); + if (!destroy) { + event.setCancelled(true); + return; + } + } + + Location loc = event.getEntity().getLocation(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res == null) + return; + + if (isMonster(dmgr) && !res.getPermissions().has(Flags.destroy, false)) { + event.setCancelled(true); + return; + } + + if (player == null) + return; + + if (Residence.isResAdminOn(player)) + return; + + String pname = player.getName(); + FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); + String world = loc.getWorld().getName(); + if (!perms.playerHas(pname, world, Flags.destroy, perms.playerHas(pname, world, Flags.build, true))) { + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamage(EntityDamageEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + Entity ent = event.getEntity(); + if (ent.hasMetadata("NPC")) + return; + + boolean tamedAnimal = isTamed(ent); + ClaimedResidence area = Residence.getResidenceManager().getByLoc(ent.getLocation()); + + /* Living Entities */ + if (event instanceof EntityDamageByEntityEvent) { + EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; + Entity damager = attackevent.getDamager(); + + if (area != null && ent instanceof Player && damager instanceof Player) { + if (area.getPermissions().has(Flags.overridepvp, false) || Residence.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, false)) { + Player player = (Player) event.getEntity(); + Damageable damage = player; + damage.damage(event.getDamage()); + damage.setVelocity(damager.getLocation().getDirection()); + event.setCancelled(true); + return; + } + } + + ClaimedResidence srcarea = null; + if (damager != null) { + srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); + } + boolean srcpvp = true; + boolean allowSnowBall = false; + boolean isSnowBall = false; + boolean isOnFire = false; + if (srcarea != null) { + srcpvp = srcarea.getPermissions().has(Flags.pvp, true); + } + ent = attackevent.getEntity(); + if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) + .getShooter() instanceof Player))) && event.getCause() != DamageCause.FALL) { + Player attacker = null; + if (damager instanceof Player) { + attacker = (Player) damager; + } else if (damager instanceof Projectile) { + Projectile project = (Projectile) damager; + if (project.getType() == EntityType.SNOWBALL && srcarea != null) { + isSnowBall = true; + allowSnowBall = srcarea.getPermissions().has(Flags.snowball, false); + } + if (project.getFireTicks() > 0) + isOnFire = true; + + attacker = (Player) ((Projectile) damager).getShooter(); + } + + if (!(ent instanceof Player)) + return; + + if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { + if (attacker != null) + Residence.msg(attacker, lm.General_NoPVPZone); + if (isOnFire) + ent.setFireTicks(0); + event.setCancelled(true); + return; + } + + /* Check for Player vs Player */ + if (area == null) { + /* World PvP */ + if (damager != null) + if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, true)) { + if (attacker != null) + Residence.msg(attacker, lm.General_WorldPVPDisabled); + if (isOnFire) + ent.setFireTicks(0); + event.setCancelled(true); + return; + } + + /* Attacking from safe zone */ + if (attacker != null) { + FlagPermissions aPerm = Residence.getPermsByLoc(attacker.getLocation()); + if (aPerm.has(Flags.pvp, FlagCombo.FalseOrNone)) { + Residence.msg(attacker, lm.General_NoPVPZone); + if (isOnFire) + ent.setFireTicks(0); + event.setCancelled(true); + return; + } + } + } else { + /* Normal PvP */ + if (!isSnowBall && !area.getPermissions().has(Flags.pvp, true) || isSnowBall && !allowSnowBall) { + if (attacker != null) + Residence.msg(attacker, lm.General_NoPVPZone); + if (isOnFire) + ent.setFireTicks(0); + event.setCancelled(true); + return; + } + } + return; + } else if ((ent instanceof Player || tamedAnimal) && (damager instanceof Creeper)) { + if (area == null && !Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.creeper, true)) { + event.setCancelled(true); + } else if (area != null && !area.getPermissions().has(Flags.creeper, true)) { + event.setCancelled(true); + } + } + } + if (area == null) { + if (!Residence.getWorldFlags().getPerms(ent.getWorld().getName()).has(Flags.damage, true) && (ent instanceof Player || tamedAnimal)) { + event.setCancelled(true); + } + } else { + if (!area.getPermissions().has(Flags.damage, true) && (ent instanceof Player || tamedAnimal)) { + event.setCancelled(true); + } + } + if (event.isCancelled()) { + /* Put out a fire on a player */ + if ((ent instanceof Player || tamedAnimal) && (event.getCause() == EntityDamageEvent.DamageCause.FIRE || event + .getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) { + ent.setFireTicks(0); + } + } + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 6005bb7a2..3911f2b17 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -43,6 +43,12 @@ public ResidencePermissions(ClaimedResidence res, String creator, String inworld world = inworld; } + public boolean playerHas(CommandSender sender, Flags flag, boolean def) { + if (sender instanceof Player) + return playerHas((Player) sender, flag, def); + return true; + } + public boolean playerHas(Player player, Flags flag, boolean def) { return playerHas(player, flag.getName(), def); } From 26b949af20308c67bfa2dc9823a84dcff7736281 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 30 Sep 2016 15:38:59 +0300 Subject: [PATCH 0267/1142] prevent water flow into residence or between them if owner is different water will flow with none or true values now --- .../listeners/ResidenceBlockListener.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index d9c40b839..87d7db519 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -460,13 +460,23 @@ public void onBlockFromTo(BlockFromToEvent event) { // disabling event on world if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) return; + + ClaimedResidence fromRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + ClaimedResidence toRes = Residence.getResidenceManager().getByLoc(event.getToBlock().getLocation()); + FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); - boolean hasflow = perms.has(Flags.flow, true); + boolean hasflow = perms.has(Flags.flow, FlagCombo.TrueOrNone); Material mat = event.getBlock().getType(); - if (!hasflow) { + if (fromRes == null && toRes != null || fromRes != null && toRes != null && !fromRes.equals(toRes) && !fromRes.isOwner(toRes.getOwner())) { + event.setCancelled(true); + return; + } + + if (perms.has(Flags.flow, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } + if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { if (!perms.has(Flags.lavaflow, hasflow)) { event.setCancelled(true); From c643e58b60b2031a90bcd07b252bc879f4eef7a7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 30 Sep 2016 15:52:42 +0300 Subject: [PATCH 0268/1142] Hook flag remove value allows hooking --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b106bc0e1..9b40a937e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -267,8 +267,7 @@ public void onFishingRodUse(PlayerFishEvent event) { if (Residence.getNms().isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { FlagPermissions perm = Residence.getPermsByLoc(event.getCaught().getLocation()); ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getCaught().getLocation()); - if (!perm.has(Flags.hook, false) && res != null && !res.getPermissions().playerHas(player, Flags.hook, true) || - !perm.has(Flags.hook, false) && res != null && !res.getPermissions().playerHas(player, Flags.hook, false)) { + if (!perm.has(Flags.hook, FlagCombo.OnlyFalse) && res == null || res != null && !res.getPermissions().playerHas(player, Flags.hook, FlagCombo.OnlyTrue)) { event.setCancelled(true); if (res != null) Residence.msg(player, lm.Residence_FlagDeny, Flags.hook.getName(), res.getName()); From 64e7d479146b5cd595d7895f4ca1c42366b13b99 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 30 Sep 2016 16:28:55 +0300 Subject: [PATCH 0269/1142] Default riding to allow if flag is not set --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9b40a937e..440d53e0e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1137,7 +1137,7 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.container, true) && player.isSneaking()) { Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); event.setCancelled(true); - } else if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.riding, false)) { + } else if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.riding, FlagCombo.TrueOrNone)) { Residence.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); event.setCancelled(true); } From d8538759bf0083cc3c4664db37fca955295ec2ab Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 30 Sep 2016 16:34:38 +0300 Subject: [PATCH 0270/1142] Default pistonprotection to false if not set --- .../residence/listeners/ResidenceBlockListener.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 87d7db519..70080ea49 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -5,6 +5,8 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -413,9 +415,10 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { continue; if (pistonRes != null && blockFrom.isOwner(pistonRes.getOwner())) continue; - if (blockFrom.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyFalse)) + if (!blockFrom.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue)) continue; event.setCancelled(true); + break; } } @@ -439,14 +442,14 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { ClaimedResidence blockFrom = Residence.getResidenceManager().getByLoc(locFrom); ClaimedResidence blockTo = Residence.getResidenceManager().getByLoc(locTo); - if (pistonRes == null && blockTo != null && blockTo.getPermissions().has(Flags.pistonprotection, true)) { + if (pistonRes == null && blockTo != null && blockTo.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue)) { event.setCancelled(true); return; - } else if (blockTo != null && blockFrom == null && blockTo.getPermissions().has(Flags.pistonprotection, true)) { + } else if (blockTo != null && blockFrom == null && blockTo.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue)) { event.setCancelled(true); return; } else if (blockTo != null && blockFrom != null && (pistonRes != null && !blockTo.isOwner(pistonRes.getOwner()) || !blockTo.isOwner(blockFrom.getOwner())) - && blockTo.getPermissions().has(Flags.pistonprotection, true)) { + && blockTo.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue)) { event.setCancelled(true); return; } From de119c900f728b596b0c2876d35c20adbdc98708 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 30 Sep 2016 16:58:07 +0300 Subject: [PATCH 0271/1142] bucket, bucketfill and bucketempty flag removal and actions attached to build/destroy flags instead --- .../bukkit/residence/ConfigManager.java | 31 ++++++++++++++----- .../bukkit/residence/containers/Flags.java | 3 -- .../listeners/ResidencePlayerListener.java | 26 ++++++---------- .../residence/protection/FlagPermissions.java | 8 ++++- 4 files changed, 40 insertions(+), 28 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 909256b58..dd934165d 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -282,7 +282,7 @@ void UpdateFlagFile() { for (Flags fl : Flags.values()) { if (conf.isBoolean("Global.FlagPermission." + fl.getName())) continue; - + Debug.D("non existen section " + fl.getName()); conf.createSection("Global.FlagPermission." + fl.getName()); conf.set("Global.FlagPermission." + fl.getName(), fl.isEnabled()); @@ -312,13 +312,30 @@ public void UpdateGroupedFlagsFile() { if (!conf.isConfigurationSection("Global.GroupedFlags")) { conf.createSection("Global.GroupedFlags"); - conf.set("Global.GroupedFlags.redstone", Arrays.asList(Flags.note.getName(), Flags.pressure.getName(), Flags.lever.getName(), Flags.button.getName(), + conf.set("Global.GroupedFlags.redstone", Arrays.asList( + Flags.note.getName(), + Flags.pressure.getName(), + Flags.lever.getName(), + Flags.button.getName(), Flags.diode.getName())); - conf.set("Global.GroupedFlags.craft", Arrays.asList(Flags.brew.getName(), Flags.table.getName(), Flags.enchant.getName())); - conf.set("Global.GroupedFlags.trusted", Arrays.asList(Flags.use.getName(), Flags.tp.getName(), Flags.build.getName(), Flags.container.getName(), Flags.bucket - .getName(), Flags.move.getName(), Flags.leash.getName(), Flags.animalkilling.getName(), Flags.mobkilling.getName(), Flags.shear.getName(), Flags.chat - .getName())); - conf.set("Global.GroupedFlags.fire", Arrays.asList(Flags.ignite.getName(), Flags.firespread.getName())); + conf.set("Global.GroupedFlags.craft", Arrays.asList( + Flags.brew.getName(), + Flags.table.getName(), + Flags.enchant.getName())); + conf.set("Global.GroupedFlags.trusted", Arrays.asList( + Flags.use.getName(), + Flags.tp.getName(), + Flags.build.getName(), + Flags.container.getName(), + Flags.move.getName(), + Flags.leash.getName(), + Flags.animalkilling.getName(), + Flags.mobkilling.getName(), + Flags.shear.getName(), + Flags.chat.getName())); + conf.set("Global.GroupedFlags.fire", Arrays.asList( + Flags.ignite.getName(), + Flags.firespread.getName())); try { conf.save(f); diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index a025f27bf..ea0e0c417 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -10,9 +10,6 @@ public enum Flags { bed(355, 0, FlagMode.Both, "Allows or denys players to use beds", true), beacon(138, 0, FlagMode.Both, "Allows or denys interaction with beacon", true), brew(379, 0, FlagMode.Both, "Allows or denys players to use brewing stands", true), - bucket(325, 0, FlagMode.Both, "Allow or deny bucket use", true), - bucketempty(325, 0, FlagMode.Both, "Allow or deny bucket empty", true), - bucketfill(325, 0, FlagMode.Both, "Allow or deny bucket fill", true), build(45, 0, FlagMode.Both, "Allows or denys building", true), burn(50, 0, FlagMode.Residence, "Allows or denys Mob combustion in residences", true), button(143, 0, FlagMode.Both, "Allows or denys players to use buttons", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 440d53e0e..9f8195d5d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -66,6 +66,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -1254,7 +1255,6 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { return; Hanging hanging = (Hanging) ent; - if (hanging.getType() != EntityType.ITEM_FRAME) { return; } @@ -1297,24 +1297,19 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { } Material mat = event.getBucket(); - if ((!res.getPermissions().playerHas(player.getName(), Flags.bucket, true) && !res.getPermissions().playerHas(player.getName(), Flags.bucketempty, true)) + if ((!res.getPermissions().playerHas(player.getName(), Flags.build, true)) && Residence.getConfigManager().getNoPlaceWorlds().contains(loc.getWorld().getName())) { - if (mat == Material.LAVA_BUCKET) { - event.setCancelled(true); - return; - } - if (mat == Material.WATER_BUCKET) { + if (mat == Material.LAVA_BUCKET || mat == Material.WATER_BUCKET) { + Residence.msg(player, lm.Flag_Deny, Flags.build); event.setCancelled(true); return; } } } - String pname = player.getName(); FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); - if (!perms.playerHas(pname, player.getWorld().getName(), Flags.bucket, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)) && - !perms.playerHas(pname, player.getWorld().getName(), Flags.bucketempty, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true))) { - Residence.msg(player, lm.Flag_Deny, Flags.bucket.getName()); + if (!perms.playerHas(player, Flags.build, true)) { + Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); event.setCancelled(true); return; } @@ -1361,13 +1356,10 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) { } } - String pname = player.getName(); FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); - boolean hasbucket = perms.playerHas(pname, player.getWorld().getName(), Flags.bucket, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)); - boolean hasbucketfill = perms.playerHas(pname, player.getWorld().getName(), Flags.bucketfill, perms.playerHas(pname, player.getWorld().getName(), Flags.build, - true)); - if (!hasbucket && !hasbucketfill) { - Residence.msg(player, lm.Flag_Deny, Flags.bucket.getName()); + boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); + if (!hasdestroy) { + Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); event.setCancelled(true); } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 18177776a..c316b57ba 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -410,7 +410,13 @@ public static FlagState stringToFlagState(String flagstate) { return FlagState.INVALID; } } - + + public boolean playerHas(Player player, Flags flag, boolean def) { + if (player == null) + return false; + return playerHas(player.getName(), player.getWorld().getName(), flag.getName(), def); + } + public boolean playerHas(String player, String world, Flags flag, boolean def) { return playerHas(player, world, flag.getName(), def); } From 6f71dddeee4033ff49b3c6f1beab79556da89927 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 30 Sep 2016 17:12:31 +0300 Subject: [PATCH 0272/1142] Default fireball to true when not set --- .../listeners/ResidenceEntityListener.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 1e643f8ad..64e1a01a3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -8,6 +8,8 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -607,7 +609,7 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { break; case SMALL_FIREBALL: case FIREBALL: - if (!perms.has(Flags.fireball, perms.has(Flags.explode, true))) { + if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) { event.setCancelled(true); ent.remove(); } @@ -671,7 +673,7 @@ public void onEntityExplode(EntityExplodeEvent event) { break; case SMALL_FIREBALL: case FIREBALL: - if (!perms.has(Flags.fireball, perms.has(Flags.explode, true))) + if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) cancel = true; break; default: @@ -734,7 +736,7 @@ public void onEntityExplode(EntityExplodeEvent event) { continue; case SMALL_FIREBALL: case FIREBALL: - if (!blockperms.has(Flags.fireball, blockperms.has(Flags.explode, true))) + if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) preserve.add(block); continue; default: @@ -833,7 +835,7 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { if (!srcpvp || !tgtpvp) event.setCancelled(true); } - + @EventHandler public void OnFallDamage(EntityDamageEvent event) { // disabling event on world @@ -851,7 +853,7 @@ public void OnFallDamage(EntityDamageEvent event) { event.setCancelled(true); } } - + @EventHandler public void OnArmorStandFlameDamage(EntityDamageEvent event) { // disabling event on world @@ -911,16 +913,13 @@ public void onEntityDamageByFireballEvent(EntityDamageByEntityEvent event) { return; Entity dmgr = event.getDamager(); - if (dmgr.getType() != EntityType.SMALL_FIREBALL && dmgr.getType() != EntityType.FIREBALL) return; - if (dmgr.getType() == EntityType.FIREBALL || dmgr.getType() == EntityType.SMALL_FIREBALL) { - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); - if (!perms.has(Flags.fireball, false)) { - event.setCancelled(true); - return; - } + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + if (perms.has(Flags.fireball, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; } } From 19837f7c0310a6785f0d09c609a542c0168ef23b Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 30 Sep 2016 17:46:13 +0300 Subject: [PATCH 0273/1142] Default pvp to true if not set and ignore parent zone pvp state --- .../bukkit/residence/allNms/v1_9Events.java | 169 +++++++++--------- .../listeners/ResidenceEntityListener.java | 25 ++- .../residence/protection/FlagPermissions.java | 5 +- 3 files changed, 100 insertions(+), 99 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index a19efedf5..2713a6db5 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -1,84 +1,85 @@ -package com.bekvon.bukkit.residence.allNms; - -import java.util.Iterator; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.AreaEffectCloudApplyEvent; -import org.bukkit.event.entity.LingeringPotionSplashEvent; -import org.bukkit.potion.PotionEffect; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; - -public class v1_9Events implements Listener { - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - boolean harmfull = false; - mein: for (PotionEffect one : event.getEntity().getEffects()) { - for (String oneHarm : Residence.getConfigManager().getNegativePotionEffects()) { - if (oneHarm.equalsIgnoreCase(one.getType().getName())) { - harmfull = true; - break mein; - } - } - } - if (!harmfull) - return; - - Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); - if (!srcpvp) - event.setCancelled(true); - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { - - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - - boolean harmfull = false; - - // Temporally fail safe to avoid console spam for getting base potion data until fix roles out - try { - for (String oneHarm : Residence.getConfigManager().getNegativeLingeringPotionEffects()) { - if (event.getEntity().getBasePotionData().getType().name().equalsIgnoreCase(oneHarm)) { - harmfull = true; - break; - } - } - } catch (Exception e) { - return; - } - - if (!harmfull) - return; - - Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); - Iterator it = event.getAffectedEntities().iterator(); - while (it.hasNext()) { - LivingEntity target = it.next(); - if (!(target instanceof Player)) - continue; - Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has(Flags.pvp, true); - if (!srcpvp || !tgtpvp) { - event.getAffectedEntities().remove(target); - event.getEntity().remove(); - break; - } - } - } -} +package com.bekvon.bukkit.residence.allNms; + +import java.util.Iterator; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.AreaEffectCloudApplyEvent; +import org.bukkit.event.entity.LingeringPotionSplashEvent; +import org.bukkit.potion.PotionEffect; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + +public class v1_9Events implements Listener { + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + boolean harmfull = false; + mein: for (PotionEffect one : event.getEntity().getEffects()) { + for (String oneHarm : Residence.getConfigManager().getNegativePotionEffects()) { + if (oneHarm.equalsIgnoreCase(one.getType().getName())) { + harmfull = true; + break mein; + } + } + } + if (!harmfull) + return; + + Entity ent = event.getEntity(); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + if (!srcpvp) + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { + + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + + boolean harmfull = false; + + // Temporally fail safe to avoid console spam for getting base potion data until fix roles out + try { + for (String oneHarm : Residence.getConfigManager().getNegativeLingeringPotionEffects()) { + if (event.getEntity().getBasePotionData().getType().name().equalsIgnoreCase(oneHarm)) { + harmfull = true; + break; + } + } + } catch (Exception e) { + return; + } + + if (!harmfull) + return; + + Entity ent = event.getEntity(); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); + Iterator it = event.getAffectedEntities().iterator(); + while (it.hasNext()) { + LivingEntity target = it.next(); + if (!(target instanceof Player)) + continue; + Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has(Flags.pvp, true); + if (!srcpvp || !tgtpvp) { + event.getAffectedEntities().remove(target); + event.getEntity().remove(); + break; + } + } + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 64e1a01a3..d91382b3a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -777,13 +777,13 @@ public void onSplashPotion(PotionSplashEvent event) { return; Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); + boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); Iterator it = event.getAffectedEntities().iterator(); while (it.hasNext()) { LivingEntity target = it.next(); if (target.getType() != EntityType.PLAYER) continue; - Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has(Flags.pvp, true); + Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); if (!srcpvp || !tgtpvp) event.setIntensity(target, 0); } @@ -829,9 +829,8 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { if (Residence.isResAdminOn(cause)) return; - Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); - Boolean tgtpvp = Residence.getPermsByLoc(entity.getLocation()).has(Flags.pvp, true); + Boolean srcpvp = Residence.getPermsByLoc(cause.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + Boolean tgtpvp = Residence.getPermsByLoc(entity.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); if (!srcpvp || !tgtpvp) event.setCancelled(true); } @@ -884,7 +883,7 @@ public void onBlockCatchingFire(ProjectileHitEvent event) { FlagPermissions perms = Residence.getPermsByLoc(arrow.getLocation()); - if (!perms.has(Flags.pvp, FlagCombo.OnlyTrue)) + if (!perms.has(Flags.pvp, FlagCombo.TrueOrNone)) arrow.setFireTicks(0); } @@ -900,7 +899,7 @@ public void OnPlayerDamageByLightning(EntityDamageEvent event) { Entity ent = event.getEntity(); if (!(ent instanceof Player)) return; - if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true)) + if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone)) event.setCancelled(true); } @@ -994,14 +993,14 @@ public void onEntityDamage(EntityDamageEvent event) { boolean tamedAnimal = isTamed(ent); ClaimedResidence area = Residence.getResidenceManager().getByLoc(ent.getLocation()); - /* Living Entities */ if (event instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; Entity damager = attackevent.getDamager(); if (area != null && ent instanceof Player && damager instanceof Player) { - if (area.getPermissions().has(Flags.overridepvp, false) || Residence.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, false)) { + if (area.getPermissions().has(Flags.overridepvp, false) || Residence.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, + FlagCombo.OnlyFalse, false)) { Player player = (Player) event.getEntity(); Damageable damage = player; damage.damage(event.getDamage()); @@ -1020,7 +1019,7 @@ public void onEntityDamage(EntityDamageEvent event) { boolean isSnowBall = false; boolean isOnFire = false; if (srcarea != null) { - srcpvp = srcarea.getPermissions().has(Flags.pvp, true); + srcpvp = srcarea.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone, false); } ent = attackevent.getEntity(); if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) @@ -1056,7 +1055,7 @@ public void onEntityDamage(EntityDamageEvent event) { if (area == null) { /* World PvP */ if (damager != null) - if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, true)) { + if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, FlagCombo.TrueOrNone)) { if (attacker != null) Residence.msg(attacker, lm.General_WorldPVPDisabled); if (isOnFire) @@ -1068,7 +1067,7 @@ public void onEntityDamage(EntityDamageEvent event) { /* Attacking from safe zone */ if (attacker != null) { FlagPermissions aPerm = Residence.getPermsByLoc(attacker.getLocation()); - if (aPerm.has(Flags.pvp, FlagCombo.FalseOrNone)) { + if (!aPerm.has(Flags.pvp, FlagCombo.TrueOrNone)) { Residence.msg(attacker, lm.General_NoPVPZone); if (isOnFire) ent.setFireTicks(0); @@ -1078,7 +1077,7 @@ public void onEntityDamage(EntityDamageEvent event) { } } else { /* Normal PvP */ - if (!isSnowBall && !area.getPermissions().has(Flags.pvp, true) || isSnowBall && !allowSnowBall) { + if (!isSnowBall && !area.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone, false) || isSnowBall && !allowSnowBall) { if (attacker != null) Residence.msg(attacker, lm.General_NoPVPZone); if (isOnFire) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index c316b57ba..956f822cc 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -22,6 +22,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.utils.Debug; public class FlagPermissions { @@ -410,13 +411,13 @@ public static FlagState stringToFlagState(String flagstate) { return FlagState.INVALID; } } - + public boolean playerHas(Player player, Flags flag, boolean def) { if (player == null) return false; return playerHas(player.getName(), player.getWorld().getName(), flag.getName(), def); } - + public boolean playerHas(String player, String world, Flags flag, boolean def) { return playerHas(player, world, flag.getName(), def); } From da7d37fe3831ef6512d96b71cb8c520f3b968417 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 1 Oct 2016 13:52:27 +0300 Subject: [PATCH 0274/1142] Allow subzone removal if you are owner of parent zone --- .../bukkit/residence/ConfigManager.java | 3 - .../listeners/ResidenceBlockListener.java | 2 - .../listeners/ResidenceEntityListener.java | 7 +- .../listeners/ResidencePlayerListener.java | 3 - .../residence/protection/FlagPermissions.java | 1 - .../protection/ResidenceManager.java | 16 +- src/flags.yml | 608 +++++++++--------- src/plugin.yml | 2 +- 8 files changed, 316 insertions(+), 326 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index dd934165d..72018d31f 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -9,7 +9,6 @@ import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.ParticleEffects; import java.io.BufferedReader; @@ -282,8 +281,6 @@ void UpdateFlagFile() { for (Flags fl : Flags.values()) { if (conf.isBoolean("Global.FlagPermission." + fl.getName())) continue; - - Debug.D("non existen section " + fl.getName()); conf.createSection("Global.FlagPermission." + fl.getName()); conf.set("Global.FlagPermission." + fl.getName(), fl.isEnabled()); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 70080ea49..1021368bf 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -5,8 +5,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index d91382b3a..1e35d18e8 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -8,8 +8,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -944,14 +942,13 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { } else if ((dmgr instanceof Projectile) && (!(((Projectile) dmgr).getShooter() instanceof Player))) { Location loc = event.getEntity().getLocation(); FlagPermissions perm = Residence.getPermsByLoc(loc); - if (perm.has(Flags.destroy, FlagCombo.FalseOrNone)) + if (perm.has(Flags.destroy, FlagCombo.OnlyFalse)) event.setCancelled(true); return; } else if (dmgr.getType() == EntityType.PRIMED_TNT || dmgr.getType() == EntityType.MINECART_TNT || dmgr.getType() == EntityType.WITHER_SKULL || dmgr .getType() == EntityType.WITHER) { FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); - boolean destroy = perms.has(Flags.explode, false); - if (!destroy) { + if (perms.has(Flags.explode, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9f8195d5d..c116f7002 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -66,7 +66,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -121,8 +120,6 @@ public void onJump(PlayerMoveEvent event) { return; FlagPermissions perms = Residence.getPermsByLoc(player.getLocation()); -// Debug.D("jump"); - if (perms.has(Flags.jump2, FlagCombo.OnlyTrue)) player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.3))); else if (perms.has(Flags.jump3, FlagCombo.OnlyTrue)) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 956f822cc..1173a7ab7 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -22,7 +22,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.utils.Debug; public class FlagPermissions { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index eb135285c..b181187cd 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -456,13 +456,6 @@ public void removeResidence(Player player, String name, boolean resadmin) { name = res.getName(); - if (player != null && !resadmin) { - if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - Residence.msg(player, lm.General_NoPermission); - return; - } - } - if (Residence.getConfigManager().isRentPreventRemoval() && !resadmin) { ClaimedResidence rented = res.getRentedSubzone(); if (rented != null) { @@ -470,7 +463,14 @@ public void removeResidence(Player player, String name, boolean resadmin) { return; } } - + + if (player != null && !resadmin) { + if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin && res.getParent() != null && !res.getParent().isOwner(player)) { + Residence.msg(player, lm.General_NoPermission); + return; + } + } + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); Residence.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) diff --git a/src/flags.yml b/src/flags.yml index 2a83b5cdb..9eb41ac19 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -1,304 +1,306 @@ -#These are Global Settings for Residence. -Global: - # These are world flags that are applied when the player is NOT within a residence. - Flags: - Global: #these are default for all worlds unless specified below, they can be overridden per group - use: true - build: true - ignite: true - firespread: true - damage: true - creeper: true - tnt: true - pvp: true - WorldNameHere: #here you can set flags for individual worlds, these override Global - #build: true - # This gives permission to change certain flags to all groups, unless specifically denied to the group. - FlagPermission: - move: true - build: true - place: true - destroy: true - use: true - container: true - pvp: true - tp: true - ignite: true - firespread: true - bucket: true - flow: true - lavaflow: true - waterflow: true - creeper: true - tnt: true - monsters: true - animals: true - animalkilling: true - mobkilling: true - vehicledestroy: true - trade: true - shear: true - leash: true - nofly: false - subzone: true - healing: true - piston: true - diode: true - lever: true - button: true - door: true - table: true - enchant: true - brew: true - bed: true - cake: true - note: true - trample: true - burn: true - explode: true - fireball: true - command: false - day: true - night: true - chat: true - hidden: false - overridepvp: false - keepinv: false - keepexp: false - shop: true - bank: false - # This sets GUI items to represent each flag, if not given, then gray wool will be used - FlagGui: - animalkilling: - Id: 365 - Data: 0 - animals: - Id: 383 - Data: 90 - bed: - Id: 355 - Data: 0 - brew: - Id: 379 - Data: 0 - bucket: - Id: 325 - Data: 0 - build: - Id: 45 - Data: 0 - burn: - Id: 50 - Data: 0 - button: - Id: 143 - Data: 0 - cake: - Id: 354 - Data: 0 - canimals: - Id: 383 - Data: 91 - chat: - Id: 386 - Data: 0 - cmonsters: - Id: 383 - Data: 50 - command: - Id: 137 - Data: 0 - container: - Id: 342 - Data: 0 - creeper: - Id: 383 - Data: 50 - destroy: - Id: 121 - Data: 0 - diode: - Id: 356 - Data: 0 - door: - Id: 324 - Data: 0 - enchant: - Id: 116 - Data: 0 - explode: - Id: 407 - Data: 0 - fireball: - Id: 385 - Data: 0 - firespread: - Id: 377 - Data: 0 - flow: - Id: 111 - Data: 0 - healing: - Id: 373 - Data: 0 - ignite: - Id: 259 - Data: 0 - lavaflow: - Id: 327 - Data: 0 - leash: - Id: 420 - Data: 0 - lever: - Id: 69 - Data: 0 - mobkilling: - Id: 367 - Data: 0 - monsters: - Id: 52 - Data: 0 - move: - Id: 301 - Data: 0 - nanimals: - Id: 383 - Data: 92 - nmonsters: - Id: 383 - Data: 51 - nofly: - Id: 171 - Data: 1 - nomobs: - Id: 166 - Data: 0 - note: - Id: 25 - Data: 0 - piston: - Id: 33 - Data: 0 - place: - Id: 169 - Data: 0 - pvp: - Id: 268 - Data: 0 - sanimals: - Id: 383 - Data: 101 - shear: - Id: 359 - Data: 0 - smonsters: - Id: 383 - Data: 54 - subzone: - Id: 160 - Data: 7 - table: - Id: 58 - Data: 0 - tnt: - Id: 46 - Data: 0 - tp: - Id: 120 - Data: 0 - trade: - Id: 388 - Data: 0 - trample: - Id: 3 - Data: 0 - use: - Id: 70 - Data: 0 - vehicledestroy: - Id: 328 - Data: 0 - waterflow: - Id: 326 - Data: 0 - # These are default flags applied to all residences from any user group. - ResidenceDefault: - build: false - use: false - container: false - pvp: false - tnt: false - creeper: false - flow: false - piston: false - ignite: false - firespread: false - vehicledestroy: false - animalkilling: false - shear: false - leash: false - tp: false - # These are default flags applied to the residence creator of any group. - CreatorDefault: - build: true - move: true - use: true - ignite: true - container: true - animalkilling: true - mobkilling: true - vehicledestroy: true - trade: true - shear: true - leash: true - # These are default group flags applied to a residence made by a user of any group. - GroupDefault: - #default: #group name - #build: true - # These are grouped flags, so when using /res pset nickname redstone true, player will get all flags in list, same when setting to false or removing them. - GroupedFlags: - redstone: - - note - - pressure - - lever - - button - - diode - craft: - - brew - - table - - enchant - trusted: - - use - - tp - - build - - container - - bucket - - move - - leash - - animalkilling - - mobkilling - - shear - - chat - - beacon - fire: - - ignite - - firespread -ItemList: #this is where you can create blacklists / whitelists - DefaultList: #list name is not important, as long as it is unique. Its good to use a descripive name. - #type of the list, can be blacklist, whitelist, or ignorelist - Type: blacklist - #If you want, you can have this list only apply to one world, otherwise it applys to all worlds - #World: world - #You can also have the list apply only to one group, otherwise it applys for all groups - #Group: default - #this is the actual list of material names that this list allows or dissallows - #You can look up the material name by item ID in game by typing /res material - #Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance - Items: - - 'BEDROCK' - - 'LAVA' - - 'WATER' - - 'STATIONARY_LAVA' - - 'STATIONARY_WATER' +#These are Global Settings for Residence. +Global: + # These are world flags that are applied when the player is NOT within a residence. + Flags: + Global: #these are default for all worlds unless specified below, they can be overridden per group + use: true + build: true + ignite: true + firespread: true + damage: true + creeper: true + tnt: true + pvp: true + WorldNameHere: #here you can set flags for individual worlds, these override Global + #build: true + # This gives permission to change certain flags to all groups, unless specifically denied to the group. + FlagPermission: + move: true + build: true + place: true + destroy: true + use: true + container: true + pvp: true + tp: true + ignite: true + firespread: true + bucket: true + flow: true + lavaflow: true + waterflow: true + creeper: true + tnt: true + monsters: true + animals: true + animalkilling: true + mobkilling: true + vehicledestroy: true + trade: true + shear: true + leash: true + nofly: false + subzone: true + healing: true + piston: true + diode: true + lever: true + button: true + door: true + table: true + enchant: true + brew: true + bed: true + cake: true + note: true + trample: true + burn: true + explode: true + fireball: true + command: false + day: true + night: true + chat: true + hidden: false + overridepvp: false + keepinv: false + keepexp: false + shop: true + bank: false + # This sets GUI items to represent each flag, if not given, then gray wool will be used + FlagGui: + animalkilling: + Id: 365 + Data: 0 + animals: + Id: 383 + Data: 90 + bed: + Id: 355 + Data: 0 + brew: + Id: 379 + Data: 0 + bucket: + Id: 325 + Data: 0 + build: + Id: 45 + Data: 0 + burn: + Id: 50 + Data: 0 + button: + Id: 143 + Data: 0 + cake: + Id: 354 + Data: 0 + canimals: + Id: 383 + Data: 91 + chat: + Id: 386 + Data: 0 + cmonsters: + Id: 383 + Data: 50 + command: + Id: 137 + Data: 0 + container: + Id: 342 + Data: 0 + creeper: + Id: 383 + Data: 50 + destroy: + Id: 121 + Data: 0 + diode: + Id: 356 + Data: 0 + door: + Id: 324 + Data: 0 + enchant: + Id: 116 + Data: 0 + explode: + Id: 407 + Data: 0 + fireball: + Id: 385 + Data: 0 + firespread: + Id: 377 + Data: 0 + flow: + Id: 111 + Data: 0 + healing: + Id: 373 + Data: 0 + ignite: + Id: 259 + Data: 0 + lavaflow: + Id: 327 + Data: 0 + leash: + Id: 420 + Data: 0 + lever: + Id: 69 + Data: 0 + mobkilling: + Id: 367 + Data: 0 + monsters: + Id: 52 + Data: 0 + move: + Id: 301 + Data: 0 + nanimals: + Id: 383 + Data: 92 + nmonsters: + Id: 383 + Data: 51 + nofly: + Id: 171 + Data: 1 + nomobs: + Id: 166 + Data: 0 + note: + Id: 25 + Data: 0 + piston: + Id: 33 + Data: 0 + place: + Id: 169 + Data: 0 + pvp: + Id: 268 + Data: 0 + sanimals: + Id: 383 + Data: 101 + shear: + Id: 359 + Data: 0 + smonsters: + Id: 383 + Data: 54 + subzone: + Id: 160 + Data: 7 + table: + Id: 58 + Data: 0 + tnt: + Id: 46 + Data: 0 + tp: + Id: 120 + Data: 0 + trade: + Id: 388 + Data: 0 + trample: + Id: 3 + Data: 0 + use: + Id: 70 + Data: 0 + vehicledestroy: + Id: 328 + Data: 0 + waterflow: + Id: 326 + Data: 0 + # These are default flags applied to all residences from any user group. + ResidenceDefault: + build: false + destroy: false + use: false + container: false + pvp: false + tnt: false + creeper: false + ignite: false + firespread: false + vehicledestroy: false + animalkilling: false + hook: false + shear: false + leash: false + pistonprotection: true + tp: true + explode: false + # These are default flags applied to the residence creator of any group. + CreatorDefault: + build: true + move: true + use: true + ignite: true + container: true + animalkilling: true + mobkilling: true + vehicledestroy: true + trade: true + shear: true + leash: true + # These are default group flags applied to a residence made by a user of any group. + GroupDefault: + #default: #group name + #build: true + # These are grouped flags, so when using /res pset nickname redstone true, player will get all flags in list, same when setting to false or removing them. + GroupedFlags: + redstone: + - note + - pressure + - lever + - button + - diode + craft: + - brew + - table + - enchant + trusted: + - use + - tp + - build + - container + - bucket + - move + - leash + - animalkilling + - mobkilling + - shear + - chat + - beacon + fire: + - ignite + - firespread +ItemList: #this is where you can create blacklists / whitelists + DefaultList: #list name is not important, as long as it is unique. Its good to use a descripive name. + #type of the list, can be blacklist, whitelist, or ignorelist + Type: blacklist + #If you want, you can have this list only apply to one world, otherwise it applys to all worlds + #World: world + #You can also have the list apply only to one group, otherwise it applys for all groups + #Group: default + #this is the actual list of material names that this list allows or dissallows + #You can look up the material name by item ID in game by typing /res material + #Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance + Items: + - 'BEDROCK' + - 'LAVA' + - 'WATER' + - 'STATIONARY_LAVA' + - 'STATIONARY_WATER' - 'MOB_SPAWNER' \ No newline at end of file diff --git a/src/plugin.yml b/src/plugin.yml index 34aca873f..85853ab24 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.7.7 +version: 4.5.8.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From d581b57679d9c3d24c7543858d24bc322aee0201 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 8 Oct 2016 15:25:44 +0300 Subject: [PATCH 0275/1142] Check if previous saved location exists --- .../bekvon/bukkit/residence/commands/rc.java | 20 +- .../bukkit/residence/containers/lm.java | 900 +++++++++--------- .../listeners/ResidencePlayerListener.java | 9 +- .../bukkit/residence/signsStuff/SignUtil.java | 848 ++++++++--------- 4 files changed, 889 insertions(+), 888 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index 8cd13739d..8ee29e992 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -193,22 +193,22 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command @Override public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Joins current or defined residence chat chanel"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res rc (residence)", "Teleports you to random location in defined world.")); + c.get(path + "Description", "Joins current or defined residence chat channel"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res rc (residence)", "Join residence chat channel.")); Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); path += "SubCommands."; - c.get(path + "leave.Description", "Leaves current residence chat chanel"); - c.get(path + "leave.Info", Arrays.asList("&eUsage: &6/res rc leave", "If you are in residence chat cnahel then you will leave it")); + c.get(path + "leave.Description", "Leaves current residence chat channel"); + c.get(path + "leave.Info", Arrays.asList("&eUsage: &6/res rc leave", "If you are in residence chat channel then you will leave it")); - c.get(path + "setcolor.Description", "Sets residence chat chanel text color"); - c.get(path + "setcolor.Info", Arrays.asList("&eUsage: &6/res rc setcolor [colorCode]", "Sets residence chat chanel text color")); + c.get(path + "setcolor.Description", "Sets residence chat channel text color"); + c.get(path + "setcolor.Info", Arrays.asList("&eUsage: &6/res rc setcolor [colorCode]", "Sets residence chat channel text color")); - c.get(path + "setprefix.Description", "Sets residence chat chanel prefix"); - c.get(path + "setprefix.Info", Arrays.asList("&eUsage: &6/res rc setprefix [newName]", "Sets residence chat chanel prefix")); + c.get(path + "setprefix.Description", "Sets residence chat channel prefix"); + c.get(path + "setprefix.Info", Arrays.asList("&eUsage: &6/res rc setprefix [newName]", "Sets residence chat channel prefix")); - c.get(path + "kick.Description", "Kicks player from chanel"); - c.get(path + "kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", "Kicks player from chanel")); + c.get(path + "kick.Description", "Kicks player from channel"); + c.get(path + "kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", "Kicks player from channel")); Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "kick"), Arrays.asList("[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 86c3b54b8..5c9a27179 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -1,450 +1,450 @@ -package com.bekvon.bukkit.residence.containers; - -import java.util.ArrayList; -import java.util.Arrays; - -public enum lm { - Invalid_Player("&cInvalid player name..."), - Invalid_World("&cInvalid world..."), - Invalid_Residence("&cInvalid Residence..."), - Invalid_Subzone("&cInvalid Subzone..."), - Invalid_Direction("&cInvalid Direction..."), - Invalid_Amount("&cInvalid Amount..."), - Invalid_Cost("&cInvalid Cost..."), - Invalid_Days("&cInvalid number of days..."), - Invalid_Material("&cInvalid Material..."), - Invalid_Boolean("&cInvalid value, must be &6true(t) &cor &6false(f)"), - Invalid_Area("&cInvalid Area..."), - Invalid_Group("&cInvalid Group..."), - Invalid_MessageType("&cMessage type must be enter or remove."), - Invalid_Flag("&cInvalid Flag..."), - Invalid_FlagState("&cInvalid flag state, must be &6true(t)&c, &6false(f)&c, or &6remove(r)"), - Invalid_List("&eUnknown list type, must be &6blacklist &eor &6ignorelist."), - Invalid_Page("&eInvalid Page..."), - Invalid_Help("&cInvalid Help Page..."), - Invalid_NameCharacters("&cName contained unallowed characters..."), - - Area_Exists("&cArea name already exists."), - Area_Create("&eResidence Area created, ID &6%1"), - Area_DiffWorld("&cArea is in a different world from residence."), - Area_Collision("&cArea collides with residence &6%1"), - Area_SubzoneCollision("&cArea collides with subzone &6%1"), - Area_NonExist("&cNo such area exists."), - Area_InvalidName("&cInvalid Area Name..."), -// Area_ToSmallTotal("&cSelected area smaller than allowed minimal (&6%1&c)"), - Area_ToSmallX("&cYour &6X &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more."), - Area_ToSmallY("&cYour selection height (&6%1&c) is too small. &eAllowed &6%2 &eand more."), - Area_ToSmallZ("&cYour &6Z &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more."), - Area_ToBigX("&cYour &6X &cselection length (&6%1&c) is too big. &eAllowed &6%2 &eand less."), - Area_ToBigY("&cYour selection height (&6%1&c) is too big. &eAllowed &6%2 &eand less."), - Area_ToBigZ("&cYour &6Z &cselection length (&6%1&c) is too big. &eAllowed &6%2 &eand less."), - Area_Rename("&eRenamed area &6%1 &eto &6%2"), - Area_Remove("&eRemoved area &6%1..."), - Area_Name("&eName: &2%1"), - Area_RemoveLast("&cCannot remove the last area in a residence."), - Area_NotWithinParent("&cArea is not within parent area."), - Area_Update("&eArea Updated..."), - Area_MaxPhysical("&eYou've reached the max physical areas allowed for your residence."), - Area_SizeLimit("&eArea size is not within your allowed limits."), - Area_HighLimit("&cYou cannot protect this high up, your limit is &6%1"), - Area_LowLimit("&cYou cannot protect this deep, your limit is &6%1"), - - Select_Points("&eSelect two points first before using this command!"), - Select_Overlap("&cSelected points overlap with &6%1 &cregion!"), - Select_WorldGuardOverlap("&cSelected points overlap with &6%1 &cWorldGuard region!"), - Select_Success("&eSelection Successful!"), - Select_Fail("&cInvalid select command..."), - Select_Bedrock("&eSelection expanded to your lowest allowed limit."), - Select_Sky("&eSelection expanded to your highest allowed limit."), - Select_Area("&eSelected area &6%1 &eof residence &6%2"), - Select_Tool("&e- Selection Tool: &6%1"), - Select_PrimaryPoint("&ePlaced &6Primary &eSelection Point %1"), - Select_SecondaryPoint("&ePlaced &6Secondary &eSelection Point %1"), - Select_Primary("&ePrimary selection: &6%1"), - Select_Secondary("&eSecondary selection: &6%1"), - Select_TooHigh("&cWarning, selection went above top of map, limiting."), - Select_TooLow("&cWarning, selection went below bottom of map, limiting."), - Select_TotalSize("&eSelection total size: &6%1"), - Select_AutoEnabled("&eAuto selection mode turned &6ON&e. To disable it write &6/res select auto"), - Select_AutoDisabled("&eAuto selection mode turned &6OFF&e. To enable it again write &6/res select auto"), - Select_Disabled("&cYou don't have access to selections commands"), - - Sign_Updated("&6%1 &esigns updated!"), - Sign_TopLine("[market]"), - Sign_DateFormat("YY/MM/dd HH:mm"), - Sign_ForRentTopLine("&8For Rent"), - Sign_ForRentPriceLine("&8%1&f/&8%2&f/&8%3"), - Sign_ForRentResName("&8%1"), - Sign_ForRentBottomLine("&9Available"), - Sign_RentedAutorenewTrue("&2%1"), - Sign_RentedAutorenewFalse("&c%1"), - Sign_RentedTopLine("%1"), - Sign_RentedPriceLine("&8%1&f/&8%2&f/&8%3"), - Sign_RentedResName("&8%1"), - Sign_RentedBottomLine("&1%1"), - Sign_ForSaleTopLine("&8For Sale"), - Sign_ForSalePriceLine("&8%1"), - Sign_ForSaleResName("&8%1"), - Sign_ForSaleBottomLine("&5Available"), - Sign_LookAt("&cYou are not looking at sign"), - - Flag_Set("&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"), - Flag_SetFailed("&cYou dont have access to &6%1 &cflag"), - Flag_CheckTrue("&eFlag &6%1 &eapplies to player &6%2 &efor residence &6%3&e, value = &6%4"), - Flag_CheckFalse("&eFlag &6%1 &edoes not apply to player &6%2 &efor residence."), - Flag_Cleared("&eFlags Cleared."), - Flag_RemovedAll("&eAll flags removed for &6%1 &ein &6%2 &eresidence."), - Flag_RemovedGroup("&eAll flags removed for &6%1 &egroup in &6%2 &eresidence."), - Flag_Default("&eFlags set to default."), - Flag_Deny("&cYou dont have &6%1 &cpermission here."), - Flag_SetDeny("&cOwner does not have access to flag &6%1"), - Flag_ChangeDeny("&cYou cant change &6%1 &cflag state while there is &6%2 &cplayer(s) inside."), - - Bank_NoAccess("&cYou dont have bank access."), - Bank_Name(" &eBank: &6%1"), - Bank_NoMoney("&cNot enough money in the bank."), - Bank_Deposit("&eYou deposit &6%1 &einto the residence bank."), - Bank_Withdraw("&eYou withdraw &6%1 from the residence bank."), - - Subzone_Rename("&eRenamed subzone &6%1 &eto &6%2"), - Subzone_Remove("&eSubzone &6%1 &eremoved."), - Subzone_Create("&eCreated Subzone &6%1"), - Subzone_CreateFail("&cUnable to create subzone &6%1"), - Subzone_Exists("&cSubzone &6%1 &calready exists."), - Subzone_Collide("&cSubzone collides with subzone &6%1"), - Subzone_MaxDepth("&cYou have reached the maximum allowed subzone depth."), - Subzone_SelectInside("&eBoth selection points must be inside the residence."), - Subzone_CantCreate("&cYou dont have permission to create residence subzone."), - Subzone_CantDelete("&cYou dont have permission to delete residence subzone."), - Subzone_CantDeleteNotOwnerOfParent("&cYou are not owner of parent residence to delete this subzone."), - Subzone_CantContract("&cYou dont have permission to contract residence subzone."), - Subzone_CantExpand("&cYou dont have permission to expand residence subzone."), - Subzone_DeleteConfirm("&eAre you sure you want to delete subzone &6%1&e, use &6/res confirm &eto confirm."), - Subzone_OwnerChange("&eSubzone &6%1 &eowner changed to &6%2"), - - Residence_Hidden(" &e(&6Hidden&e)"), - Residence_Bought("&eYou bought residence &6%1"), - Residence_Buy("&6%1 &ehas bought residence &6%2 &efrom you."), - Residence_BuyTooBig("&cThis residence has areas bigger then your allowed max."), - Residence_NotForSale("&cResidence is not for sale."), - Residence_ForSale("&eResidence &6%1 &eis now for sale for &6%2"), - Residence_StopSelling("&cResidence is no longer for sale."), - Residence_TooMany("&cYou already own the max number of residences your allowed to."), - Residence_MaxRent("&cYou already are renting the maximum number of residences your allowed to."), - Residence_AlreadyRent("&cResidence is already for rent..."), - Residence_NotForRent("&cResidence not for rent..."), - Residence_NotForRentOrSell("&cResidence not for rent or sell..."), - Residence_NotRented("&cResidence not rented."), - Residence_Unrent("&eResidence &6%1 &ehas been unrented."), - Residence_RemoveRentable("&eResidence &6%1 &eis no longer rentable."), - Residence_ForRentSuccess("&eResidence &6%1 &eis now for rent for &6%2 &eevery &6%3 &edays."), - Residence_RentSuccess("&eYou have rented Residence &6%1 &efor &6%2 &edays."), - Residence_EndingRent("&eRent time is ending for &6%1 &eon &6%2"), - Residence_AlreadyRented("&eResidence &6%1 &ehas currently been rented to &6%2"), - Residence_CantAutoPay("&eResidence is not allowing auto pay, it will be set to &6false"), - Residence_AlreadyExists("&cA residence named &6%1 &calready exists."), - Residence_Create("&eYou have created residence &6%1&e!"), - Residence_Rename("&eRenamed Residence &6%1 &eto &6%2"), - Residence_Remove("&eResidence &6%1 &ehas been removed..."), - Residence_CantRemove("&cResidence &6%1 &ccant be removed as &6%2 &csubzone is still rented by &6%3"), - Residence_MoveDeny("&cYou dont have movement permission for Residence &6%1"), - Residence_TeleportNoFlag("&cYou dont have teleport access for that residence."), - Residence_FlagDeny("&cYou dont have &6%1 &cpermission for Residence &6%2"), - Residence_GiveLimits("&cCannot give residence to target player, because it is outside the target players limits."), - Residence_Give("&eYou give residence &6%1 &eto player &6%2"), - Residence_Recieve("&eYou have recieved residence &6%1 &efrom player &6%2"), - Residence_ResList(" &a%1. &e%2 &e- &6%3 %4&6%5"), - Residence_List(" &e%2 &e- &6%3"), - Residence_TeleportNear("&eTeleported to near residence."), - Residence_SetTeleportLocation("&eTeleport Location Set..."), - Residence_PermissionsApply("&ePermissions applied to residence."), - Residence_NotOwner("&cYou are not owner of this residence"), - Residence_RemovePlayersResidences("&eRemoved all residences belonging to player &6%1"), - Residence_NotIn("&cYou are not in a Residence."), - Residence_PlayerNotIn("&cPlayer standing not in your Residence area."), - Residence_Kicked("&eYou were kicked from residence"), - Residence_In("&eYou are standing in Residence &6%1"), - Residence_OwnerChange("&eResidence &6%1 &eowner changed to &6%2"), - Residence_NonAdmin("&cYou are not a Residence admin."), - Residence_Line("&eResidence: &6%1 "), - Residence_RentedBy("&eRented by: &6%1"), - Residence_MessageChange("&eMessage Set..."), - Residence_CantDeleteResidence("&cYou dont have permission to delete residence."), - Residence_CantExpandResidence("&cYou dont have permission to expand residence."), - Residence_CantContractResidence("&cYou dont have permission to contract residence."), - Residence_NoResHere("&cThere is no residence in there."), - Residence_OwnerNoPermission("&cThe owner does not have permission for this."), - Residence_ParentNoPermission("&cYou don't have permission to make changes to the parent zone."), - Residence_ChatDisabled("&eResidence Chat Disabled..."), - Residence_DeleteConfirm("&eAre you sure you want to delete residence &6%1&e, use &6/res confirm &eto confirm."), - Residence_ChangedMain("&eChainged main residence to &6%1"), - Residence_LwcRemoved("&eRemoved &6%1 &eLwc protections in &6%2ms"), - - Residence_CanBeRented("&6%1&e can be rented for &6%2 &eper &6%3 &edays. &6/res market rent"), - Residence_CanBeBought("&6%1&e can be bought for &6%2&e. &6/res market buy"), - - Residence_IsForRent("&6(For rent)"), - Residence_IsForSale("&6(For sale)"), - Residence_IsRented("&6(Rented)"), - - Rent_Disabled("&cRent is disabled..."), - Rent_DisableRenew("&eResidence &6%1 &ewill now no longer re-rent upon expire."), - Rent_EnableRenew("&eResidence &6%1 &ewill now automatically re-rent upon expire."), - Rent_NotByYou("&cResidence is rented not by you."), - Rent_isForRent("&2Residence available for renting."), - Rent_MaxRentDays("&cYou cant rent for more than &6%1 &cdays at once."), - Rent_OneTime("&cCan't extend rent time for this residence."), - Rent_Extended("&eRent extended for aditional &6%1 &edays for &6%2 &eresidence"), - Rent_Expire("&eRent Expire Time: &6%1"), - Rent_AutoPayTurnedOn("&eAutoPay is turned &2ON"), - Rent_AutoPayTurnedOff("&eAutoPay is turned &cOFF"), - Rent_ModifyDeny("&cCannot modify a rented residence."), - Rent_Days("&eRent days: &6%1"), - Rent_Rented(" &6(Rented)"), - Rent_RentList(" &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7"), - - Rent_EvictConfirm("&eWrite &6/res market confirm &eto evict renter from &6%1 &eresidence"), - Rent_UnrentConfirm("&eWrite &6/res market confirm &eto unrent &6%1 &eresidence"), - Rent_ReleaseConfirm("&eWrite &6/res market confirm &eto remove &6%1 &eresidence from market"), - - command_addedAllow("&eAdded new allowed command for &6%1 &eresidence"), - command_removedAllow("&eRemoved allowed command for &6%1 &eresidence"), - command_addedBlock("&eAdded new blocked command for &6%1 &eresidence"), - command_removedBlock("&eRemoved blocked command for &6%1 &eresidence"), - command_Blocked("&eBlocked commands: &6%1"), - command_Allowed("&eAllowed commands: &6%1"), - - Rentable_Land("&eRentable Land: &6"), - Rentable_AllowRenewing("&eCan Renew: &6%1"), - Rentable_StayInMarket("&eRentable stay in market: &6%1"), - Rentable_AllowAutoPay("&eRentable allows auto pay: &6%1"), - Rentable_DisableRenew("&6%1 &ewill no longer renew rentable status upon expire."), - Rentable_EnableRenew("&6%1 &ewill now automatically renew rentable status upon expire."), - - Economy_LandForSale("&eLand For Sale:"), - Economy_NotEnoughMoney("&cYou dont have enough money."), - Economy_MoneyCharged("&eCharged &6%1 &eto your &6%2 &eaccount."), - Economy_MoneyAdded("&eGot &6%1 &eto your &6%2 &eaccount."), - Economy_MoneyCredit("&eCredited &6%1 &eto your &6%2 &eaccount."), - Economy_RentReleaseInvalid("&eResidence &6%1 &eis not rented or for rent."), - Economy_RentSellFail("&cCannot sell a Residence if it is for rent."), - Economy_SubzoneRentSellFail("&cCannot sell a Residence if its subzone set for rent."), - Economy_ParentRentSellFail("&cCannot sell a Residence if its parent zone is for rent."), - Economy_SubzoneSellFail("&cCannot sell a subzone."), - Economy_SellRentFail("&cCannot rent a Residence if it is for sale."), - Economy_ParentSellRentFail("&cCannot rent a Residence if its parent zone is for sale."), - Economy_OwnerBuyFail("&cCannot buy your own land!"), - Economy_OwnerRentFail("&cCannot rent your own land!"), - Economy_AlreadySellFail("&eResidence already for sale!"), - Economy_LeaseRenew("&eLease valid until &6%1"), - Economy_LeaseRenewMax("&eLease renewed to maximum allowed"), - Economy_LeaseNotExpire("&eNo such lease, or lease does not expire."), - Economy_LeaseRenewalCost("&eRenewal cost for area &6%1 &eis &6%2"), - Economy_LeaseInfinite("&eLease time set to infinite..."), - Economy_MarketDisabled("&cEconomy Disabled!"), - Economy_SellAmount("&eSell Amount: &2%1"), - Economy_SellList(" &6%1&e. &6%2 &e(&6%3&e) - &6%4"), - Economy_LeaseExpire("&eLease Expire Time: &2%1"), - - Expanding_North("&eExpanding North &6%1 &eblocks"), - Expanding_West("&eExpanding West &6%1 &eblocks"), - Expanding_South("&eExpanding South &6%1 &eblocks"), - Expanding_East("&eExpanding East &6%1 &eblocks"), - Expanding_Up("&eExpanding Up &6%1 &eblocks"), - Expanding_Down("&eExpanding Down &6%1 &eblocks"), - - Contracting_North("&eContracting North &6%1 &eblocks"), - Contracting_West("&eContracting West &6%1 &eblocks"), - Contracting_South("&eContracting South &6%1 &eblocks"), - Contracting_East("&eContracting East &6%1 &eblocks"), - Contracting_Up("&eContracting Up &6%1 &eblocks"), - Contracting_Down("&eContracting Down &6%1 &eblocks"), - - Shifting_North("&eShifting North &6%1 &eblocks"), - Shifting_West("&eShifting West &6%1 &eblocks"), - Shifting_South("&eShifting South &6%1 &eblocks"), - Shifting_East("&eShifting East &6%1 &eblocks"), - Shifting_Up("&eShifting Up &6%1 &eblocks"), - Shifting_Down("&eShifting Down &6%1 &eblocks"), - - Limits_PGroup("&7- &ePermissions Group:&3 %1"), - Limits_RGroup("&7- &eResidence Group:&3 %1"), - Limits_Admin("&7- &eResidence Admin:&3 %1"), - Limits_CanCreate("&7- &eCan Create Residences:&3 %1"), - Limits_MaxRes("&7- &eMax Residences:&3 %1"), - Limits_MaxEW("&7- &eMax East/West Size:&3 %1"), - Limits_MaxNS("&7- &eMax North/South Size:&3 %1"), - Limits_MaxUD("&7- &eMax Up/Down Size:&3 %1"), - Limits_MinMax("&7- &eMin/Max Protection Height:&3 %1 to %2"), - Limits_MaxSub("&7- &eMax Subzone Depth:&3 %1"), - Limits_MaxRents("&7- &eMax Rents:&3 %1"), - Limits_MaxRentDays(" &eMax Rent days:&3 %1"), - Limits_EnterLeave("&7- &eCan Set Enter/Leave Messages:&3 %1"), - Limits_NumberOwn("&7- &eNumber of Residences you own:&3 %1"), - Limits_Cost("&7- &eResidence Cost Per Block:&3 %1"), - Limits_Sell("&7- &eResidence Sell Cost Per Block:&3 %1"), - Limits_Flag("&7- &eFlag Permissions:&3 %1"), - Limits_MaxDays("&7- &eMax Lease Days:&3 %1"), - Limits_LeaseTime("&7- &eLease Time Given on Renew:&3 %1"), - Limits_RenewCost("&7- &eRenew Cost Per Block:&3 %1"), - - Gui_Set_Title("&6%1 flags"), - Gui_Pset_Title("&6%1 %2 flags"), - Gui_Actions(new ArrayList(Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove"))), - - InformationPage_TopLine("&e---< &a %1 &e >---"), - InformationPage_Page("&e-----< &6%1 &e>-----"), - InformationPage_NextPage("&e-----< &6%1 &e>-----"), - InformationPage_NoNextPage("&e-----------------------"), - InformationPage_GeneralList("&2 %1 &6- &e%2"), - InformationPage_FlagsList("&2 %1 &6- &e%2"), - InformationPage_Separator("&6\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC"), - - Chat_ChatChannelChange("&eChanged residence chat channel to &6%1!"), - Chat_ChatChannelLeave("&eLeft residence chat"), - - Chat_JoinFirst("&4Join residence chat channel first..."), - Chat_InvalidChannel("&4Invalid Channel..."), - Chat_InvalidColor("&4Incorrect color code"), - Chat_NotInChannel("&4Player is not in channel"), - Chat_Kicked("&6%1 &ewas kicked from &6%2 &echannel"), - Chat_InvalidPrefixLength("&4Prefix is to long. Allowed length: %1"), - Chat_ChangedColor("&eResidence chat channel color changed to %1"), - Chat_ChangedPrefix("&eResidence chat channel prefix changed to %1"), - - Shop_ListTopLine("&6%1 &eShop list - Page &6%2 &eof &6%3 %4"), - Shop_List(" &e%1. &6%2 &e(&6%3&e) %4"), - Shop_ListVoted("&e%1 (&6%2&e)"), - Shop_ListLiked("&eLikes: &0%1"), - - Shop_VotesTopLine("&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5"), - Shop_VotesList(" &e%1. &6%2 &e%3 &7%4"), - - Shop_NoDesc("&6No description"), - Shop_Desc("&6Description:\n%1"), - Shop_DescChange("&6Description changed to: %1"), - Shop_NewBoard("&6Successfully added new shop sign board"), - Shop_BoardExist("&cShop board already exists in this location"), - Shop_DeleteBoard("&6Right click sign of board you want to delete"), - Shop_DeletedBoard("&6Sign board removed"), - Shop_IncorrectBoard("&cThis is not sign board, try performing command again and clicking correct sign"), - Shop_InvalidSelection("&cLeft click with selection tool top left sign and then right click bottom right"), - Shop_VoteChanged("&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence"), - Shop_Voted("&6You voted, and gave &e%1 &6votes to &e%2 &6residence"), - Shop_Liked("&6You liked &e%1 &6residence"), - Shop_AlreadyLiked("&6You already liked &e%1 &6residence"), - Shop_NoVotes("&cThere is no registered votes for this residence"), - Shop_CantVote("&cResidence don't have shop flag set to true"), - Shop_VotedRange("&6Vote range is from &e%1 &6to &e%2"), - Shop_SignLines_1("&e--== &8%1 &e==--"), - Shop_SignLines_2("&9%1"), - Shop_SignLines_3("&4%1"), - Shop_SignLines_4("&8%1&e (&8%2&e)"), - Shop_SignLines_Likes4("&9Likes: &8%2"), - - RandomTeleport_TpLimit("&eYou can't teleport so fast, please wait &6%1 &esec and try again"), - RandomTeleport_TeleportSuccess("&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation"), - RandomTeleport_IncorrectLocation("&6Could not find correct teleport location, please wait &e%1 &6sec and try again."), - RandomTeleport_TeleportStarted("&eTeleportation started, don't move for next &6%4 &esec."), - RandomTeleport_WorldList("&ePossible worlds: &6%1"), - - General_DisabledWorld("&cResidence plugin is disabled in this world"), - General_UseNumbers("&cPlease use numbers..."), - General_CantPlaceLava("&cYou can't place lava outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), - General_CantPlaceWater("&cYou can't place Water outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), - General_NoPermission("&cYou dont have permission for this."), - General_NoCmdPermission("&cYou dont have permission for this command."), - General_DefaultUsage("&eType &6/%1 ? &efor more info"), - General_MaterialGet("&eThe material name for ID &6%1 &eis &6%2"), - General_MarketList("&e---- &6Market List &e----"), - General_Separator("&e----------------------------------------------------"), - General_AdminOnly("&cOnly admins have access to this command."), - General_InfoTool("&e- Info Tool: &6%1"), - General_ListMaterialAdd("&6%1 &eadded to the residence &6%2"), - General_ListMaterialRemove("&6%1 &eremoved from the residence &6%2"), - General_ItemBlacklisted("&cYou are blacklisted from using this item here."), - General_WorldPVPDisabled("&cWorld PVP is disabled."), - General_NoPVPZone("&cNo PVP zone."), - General_InvalidHelp("&cInvalid help page."), - - General_TeleportDeny("&cYou dont have teleport access."), - General_TeleportSuccess("&eTeleported!"), - General_TeleportConfirm("&cThis teleport is not safe, you will fall for &6%1 &cblocks. Use &6/res tpconfirm &cto perform teleportation anyways."), - General_TeleportStarted("&eTeleportation to &6%1 &estarted, don't move for next &6%2 &esec."), - General_TeleportTitle("&eTeleporting!"), - General_TeleportTitleTime("&6%1"), - General_TeleportCanceled("&eTeleportation canceled!"), - General_NoTeleportConfirm("&eThere is no teleports waiting for confirmation!"), - General_HelpPageHeader("&eHelp Pages - &6%1 &e- Page <&6%2 &eof &6%3&e>"), - General_ListExists("&cList already exists..."), - General_ListRemoved("&eList removed..."), - General_ListCreate("&eCreated list &6%1"), - General_PhysicalAreas("&ePhysical Areas"), - General_CurrentArea("&eCurrent Area: &6%1"), - General_TotalResSize("&eTotal size: &6%1m\u00B3 (%2m\u00B2)"), - General_TotalWorth("&eTotal worth of residence: &6%1 &e(&6%2&e)"), - General_NotOnline("&eTarget player must be online."), - General_NextPage("&eNext Page"), - General_NextInfoPage("&2| &eNext Page &2>>>"), - General_PrevInfoPage("&2<<< &ePrev Page &2|"), - General_GenericPages("&ePage &6%1 &eof &6%2 &e(&6%3&e)"), - General_WorldEditNotFound("&cWorldEdit was not detected."), - General_CoordsTop("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), - General_CoordsBottom("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), - General_AdminToggleTurnOn("&eAutomatic resadmin toggle turned &6On"), - General_AdminToggleTurnOff("&eAutomatic resadmin toggle turned &6Off"), - General_NoSpawn("&eYou do not have &6move &epermissions at your spawn point. Relocating"), - General_CompassTargetReset("&eYour compass has been reset"), - General_CompassTargetSet("&eYour compass now points to &6%1"), - General_Ignorelist("&2Ignorelist:&6"), - General_Blacklist("&cBlacklist:&6"), - General_LandCost("&eLand cost: &6%1"), - General_True("&2True"), - General_False("&cFalse"), - General_Removed("&6Removed"), - General_FlagState("&eFlag state: %1"), - General_Land("&eLand: &6%1"), - General_Cost("&eCost: &6%1 &eper &6%2 &edays"), - General_Status("&eStatus: %1"), - General_Available("&2Available"), - General_Size(" &eSize: &6%1"), - General_ResidenceFlags("&eResidence flags: &6%1"), - General_PlayersFlags("&ePlayers flags: &6%1"), - General_GroupFlags("&eGroup flags: &6%1"), - General_OthersFlags("&eOthers flags: &6%1"), - General_Moved("&eMoved..."), - General_Name("&eName: &6%1"), - General_Lists("&eLists: &6"), - General_Residences("&eResidences&6"), - General_CreatedOn("&eCreated on: &6%1"), - General_Owner("&eOwner: &6%1"), - General_World("&eWorld: &6%1"), - General_Subzones("&eSubzones"), - General_NewPlayerInfo( - "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", - "The below lines represent various messages residence sends to the players.", - "Note that some messages have variables such as %1 that are inserted at runtime."); - - private Object text; - private String[] comments; - - private lm(Object text, String... comments) { - this.text = text; - this.comments = comments; - } - - public Object getText() { - return text; - } - - public String[] getComments() { - return comments; - } - - public String getPath() { - String path = this.name(); - if (!this.name().contains("Language.") && !this.name().contains("CommandHelp.")) - path = "Language." + this.name(); - return path.replace("_", "."); - } -} +package com.bekvon.bukkit.residence.containers; + +import java.util.ArrayList; +import java.util.Arrays; + +public enum lm { + Invalid_Player("&cInvalid player name..."), + Invalid_World("&cInvalid world..."), + Invalid_Residence("&cInvalid Residence..."), + Invalid_Subzone("&cInvalid Subzone..."), + Invalid_Direction("&cInvalid Direction..."), + Invalid_Amount("&cInvalid Amount..."), + Invalid_Cost("&cInvalid Cost..."), + Invalid_Days("&cInvalid number of days..."), + Invalid_Material("&cInvalid Material..."), + Invalid_Boolean("&cInvalid value, must be &6true(t) &cor &6false(f)"), + Invalid_Area("&cInvalid Area..."), + Invalid_Group("&cInvalid Group..."), + Invalid_MessageType("&cMessage type must be enter or remove."), + Invalid_Flag("&cInvalid Flag..."), + Invalid_FlagState("&cInvalid flag state, must be &6true(t)&c, &6false(f)&c, or &6remove(r)"), + Invalid_List("&eUnknown list type, must be &6blacklist &eor &6ignorelist."), + Invalid_Page("&eInvalid Page..."), + Invalid_Help("&cInvalid Help Page..."), + Invalid_NameCharacters("&cName contained unallowed characters..."), + + Area_Exists("&cArea name already exists."), + Area_Create("&eResidence Area created, ID &6%1"), + Area_DiffWorld("&cArea is in a different world from residence."), + Area_Collision("&cArea collides with residence &6%1"), + Area_SubzoneCollision("&cArea collides with subzone &6%1"), + Area_NonExist("&cNo such area exists."), + Area_InvalidName("&cInvalid Area Name..."), +// Area_ToSmallTotal("&cSelected area smaller than allowed minimal (&6%1&c)"), + Area_ToSmallX("&cYour &6X &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more."), + Area_ToSmallY("&cYour selection height (&6%1&c) is too small. &eAllowed &6%2 &eand more."), + Area_ToSmallZ("&cYour &6Z &cselection length (&6%1&c) is too small. &eAllowed &6%2 &eand more."), + Area_ToBigX("&cYour &6X &cselection length (&6%1&c) is too big. &eAllowed &6%2 &eand less."), + Area_ToBigY("&cYour selection height (&6%1&c) is too big. &eAllowed &6%2 &eand less."), + Area_ToBigZ("&cYour &6Z &cselection length (&6%1&c) is too big. &eAllowed &6%2 &eand less."), + Area_Rename("&eRenamed area &6%1 &eto &6%2"), + Area_Remove("&eRemoved area &6%1..."), + Area_Name("&eName: &2%1"), + Area_RemoveLast("&cCannot remove the last area in a residence."), + Area_NotWithinParent("&cArea is not within parent area."), + Area_Update("&eArea Updated..."), + Area_MaxPhysical("&eYou've reached the max physical areas allowed for your residence."), + Area_SizeLimit("&eArea size is not within your allowed limits."), + Area_HighLimit("&cYou cannot protect this high up, your limit is &6%1"), + Area_LowLimit("&cYou cannot protect this deep, your limit is &6%1"), + + Select_Points("&eSelect two points first before using this command!"), + Select_Overlap("&cSelected points overlap with &6%1 &cregion!"), + Select_WorldGuardOverlap("&cSelected points overlap with &6%1 &cWorldGuard region!"), + Select_Success("&eSelection Successful!"), + Select_Fail("&cInvalid select command..."), + Select_Bedrock("&eSelection expanded to your lowest allowed limit."), + Select_Sky("&eSelection expanded to your highest allowed limit."), + Select_Area("&eSelected area &6%1 &eof residence &6%2"), + Select_Tool("&e- Selection Tool: &6%1"), + Select_PrimaryPoint("&ePlaced &6Primary &eSelection Point %1"), + Select_SecondaryPoint("&ePlaced &6Secondary &eSelection Point %1"), + Select_Primary("&ePrimary selection: &6%1"), + Select_Secondary("&eSecondary selection: &6%1"), + Select_TooHigh("&cWarning, selection went above top of map, limiting."), + Select_TooLow("&cWarning, selection went below bottom of map, limiting."), + Select_TotalSize("&eSelection total size: &6%1"), + Select_AutoEnabled("&eAuto selection mode turned &6ON&e. To disable it write &6/res select auto"), + Select_AutoDisabled("&eAuto selection mode turned &6OFF&e. To enable it again write &6/res select auto"), + Select_Disabled("&cYou don't have access to selections commands"), + + Sign_Updated("&6%1 &esigns updated!"), + Sign_TopLine("[market]"), + Sign_DateFormat("YY/MM/dd HH:mm"), + Sign_ForRentTopLine("&8For Rent"), + Sign_ForRentPriceLine("&8%1&f/&8%2&f/&8%3"), + Sign_ForRentResName("&8%1"), + Sign_ForRentBottomLine("&9Available"), + Sign_RentedAutorenewTrue("&2%1"), + Sign_RentedAutorenewFalse("&c%1"), + Sign_RentedTopLine("%1"), + Sign_RentedPriceLine("&8%1&f/&8%2&f/&8%3"), + Sign_RentedResName("&8%1"), + Sign_RentedBottomLine("&1%1"), + Sign_ForSaleTopLine("&8For Sale"), + Sign_ForSalePriceLine("&8%1"), + Sign_ForSaleResName("&8%1"), + Sign_ForSaleBottomLine("&5Available"), + Sign_LookAt("&cYou are not looking at sign"), + + Flag_Set("&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"), + Flag_SetFailed("&cYou dont have access to &6%1 &cflag"), + Flag_CheckTrue("&eFlag &6%1 &eapplies to player &6%2 &efor residence &6%3&e, value = &6%4"), + Flag_CheckFalse("&eFlag &6%1 &edoes not apply to player &6%2 &efor residence."), + Flag_Cleared("&eFlags Cleared."), + Flag_RemovedAll("&eAll flags removed for &6%1 &ein &6%2 &eresidence."), + Flag_RemovedGroup("&eAll flags removed for &6%1 &egroup in &6%2 &eresidence."), + Flag_Default("&eFlags set to default."), + Flag_Deny("&cYou dont have &6%1 &cpermission here."), + Flag_SetDeny("&cOwner does not have access to flag &6%1"), + Flag_ChangeDeny("&cYou cant change &6%1 &cflag state while there is &6%2 &cplayer(s) inside."), + + Bank_NoAccess("&cYou dont have bank access."), + Bank_Name(" &eBank: &6%1"), + Bank_NoMoney("&cNot enough money in the bank."), + Bank_Deposit("&eYou deposit &6%1 &einto the residence bank."), + Bank_Withdraw("&eYou withdraw &6%1 from the residence bank."), + + Subzone_Rename("&eRenamed subzone &6%1 &eto &6%2"), + Subzone_Remove("&eSubzone &6%1 &eremoved."), + Subzone_Create("&eCreated Subzone &6%1"), + Subzone_CreateFail("&cUnable to create subzone &6%1"), + Subzone_Exists("&cSubzone &6%1 &calready exists."), + Subzone_Collide("&cSubzone collides with subzone &6%1"), + Subzone_MaxDepth("&cYou have reached the maximum allowed subzone depth."), + Subzone_SelectInside("&eBoth selection points must be inside the residence."), + Subzone_CantCreate("&cYou dont have permission to create residence subzone."), + Subzone_CantDelete("&cYou dont have permission to delete residence subzone."), + Subzone_CantDeleteNotOwnerOfParent("&cYou are not owner of parent residence to delete this subzone."), + Subzone_CantContract("&cYou dont have permission to contract residence subzone."), + Subzone_CantExpand("&cYou dont have permission to expand residence subzone."), + Subzone_DeleteConfirm("&eAre you sure you want to delete subzone &6%1&e, use &6/res confirm &eto confirm."), + Subzone_OwnerChange("&eSubzone &6%1 &eowner changed to &6%2"), + + Residence_Hidden(" &e(&6Hidden&e)"), + Residence_Bought("&eYou bought residence &6%1"), + Residence_Buy("&6%1 &ehas bought residence &6%2 &efrom you."), + Residence_BuyTooBig("&cThis residence has areas bigger then your allowed max."), + Residence_NotForSale("&cResidence is not for sale."), + Residence_ForSale("&eResidence &6%1 &eis now for sale for &6%2"), + Residence_StopSelling("&cResidence is no longer for sale."), + Residence_TooMany("&cYou already own the max number of residences your allowed to."), + Residence_MaxRent("&cYou already are renting the maximum number of residences your allowed to."), + Residence_AlreadyRent("&cResidence is already for rent..."), + Residence_NotForRent("&cResidence not for rent..."), + Residence_NotForRentOrSell("&cResidence not for rent or sell..."), + Residence_NotRented("&cResidence not rented."), + Residence_Unrent("&eResidence &6%1 &ehas been unrented."), + Residence_RemoveRentable("&eResidence &6%1 &eis no longer rentable."), + Residence_ForRentSuccess("&eResidence &6%1 &eis now for rent for &6%2 &eevery &6%3 &edays."), + Residence_RentSuccess("&eYou have rented Residence &6%1 &efor &6%2 &edays."), + Residence_EndingRent("&eRent time is ending for &6%1 &eon &6%2"), + Residence_AlreadyRented("&eResidence &6%1 &ehas currently been rented to &6%2"), + Residence_CantAutoPay("&eResidence is not allowing auto pay, it will be set to &6false"), + Residence_AlreadyExists("&cA residence named &6%1 &calready exists."), + Residence_Create("&eYou have created residence &6%1&e!"), + Residence_Rename("&eRenamed Residence &6%1 &eto &6%2"), + Residence_Remove("&eResidence &6%1 &ehas been removed..."), + Residence_CantRemove("&cResidence &6%1 &ccant be removed as &6%2 &csubzone is still rented by &6%3"), + Residence_MoveDeny("&cYou dont have movement permission for Residence &6%1"), + Residence_TeleportNoFlag("&cYou dont have teleport access for that residence."), + Residence_FlagDeny("&cYou dont have &6%1 &cpermission for Residence &6%2"), + Residence_GiveLimits("&cCannot give residence to target player, because it is outside the target players limits."), + Residence_Give("&eYou give residence &6%1 &eto player &6%2"), + Residence_Recieve("&eYou have recieved residence &6%1 &efrom player &6%2"), + Residence_ResList(" &a%1. &e%2 &e- &6%3 %4&6%5"), + Residence_List(" &e%2 &e- &6%3"), + Residence_TeleportNear("&eTeleported to near residence."), + Residence_SetTeleportLocation("&eTeleport Location Set..."), + Residence_PermissionsApply("&ePermissions applied to residence."), + Residence_NotOwner("&cYou are not owner of this residence"), + Residence_RemovePlayersResidences("&eRemoved all residences belonging to player &6%1"), + Residence_NotIn("&cYou are not in a Residence."), + Residence_PlayerNotIn("&cPlayer standing not in your Residence area."), + Residence_Kicked("&eYou were kicked from residence"), + Residence_In("&eYou are standing in Residence &6%1"), + Residence_OwnerChange("&eResidence &6%1 &eowner changed to &6%2"), + Residence_NonAdmin("&cYou are not a Residence admin."), + Residence_Line("&eResidence: &6%1 "), + Residence_RentedBy("&eRented by: &6%1"), + Residence_MessageChange("&eMessage Set..."), + Residence_CantDeleteResidence("&cYou dont have permission to delete residence."), + Residence_CantExpandResidence("&cYou dont have permission to expand residence."), + Residence_CantContractResidence("&cYou dont have permission to contract residence."), + Residence_NoResHere("&cThere is no residence in there."), + Residence_OwnerNoPermission("&cThe owner does not have permission for this."), + Residence_ParentNoPermission("&cYou don't have permission to make changes to the parent zone."), + Residence_ChatDisabled("&eResidence Chat Disabled..."), + Residence_DeleteConfirm("&eAre you sure you want to delete residence &6%1&e, use &6/res confirm &eto confirm."), + Residence_ChangedMain("&eChanged main residence to &6%1"), + Residence_LwcRemoved("&eRemoved &6%1 &eLwc protections in &6%2ms"), + + Residence_CanBeRented("&6%1&e can be rented for &6%2 &eper &6%3 &edays. &6/res market rent"), + Residence_CanBeBought("&6%1&e can be bought for &6%2&e. &6/res market buy"), + + Residence_IsForRent("&6(For rent)"), + Residence_IsForSale("&6(For sale)"), + Residence_IsRented("&6(Rented)"), + + Rent_Disabled("&cRent is disabled..."), + Rent_DisableRenew("&eResidence &6%1 &ewill now no longer re-rent upon expire."), + Rent_EnableRenew("&eResidence &6%1 &ewill now automatically re-rent upon expire."), + Rent_NotByYou("&cResidence is rented not by you."), + Rent_isForRent("&2Residence available for renting."), + Rent_MaxRentDays("&cYou cant rent for more than &6%1 &cdays at once."), + Rent_OneTime("&cCan't extend rent time for this residence."), + Rent_Extended("&eRent extended for aditional &6%1 &edays for &6%2 &eresidence"), + Rent_Expire("&eRent Expire Time: &6%1"), + Rent_AutoPayTurnedOn("&eAutoPay is turned &2ON"), + Rent_AutoPayTurnedOff("&eAutoPay is turned &cOFF"), + Rent_ModifyDeny("&cCannot modify a rented residence."), + Rent_Days("&eRent days: &6%1"), + Rent_Rented(" &6(Rented)"), + Rent_RentList(" &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7"), + + Rent_EvictConfirm("&eWrite &6/res market confirm &eto evict renter from &6%1 &eresidence"), + Rent_UnrentConfirm("&eWrite &6/res market confirm &eto unrent &6%1 &eresidence"), + Rent_ReleaseConfirm("&eWrite &6/res market confirm &eto remove &6%1 &eresidence from market"), + + command_addedAllow("&eAdded new allowed command for &6%1 &eresidence"), + command_removedAllow("&eRemoved allowed command for &6%1 &eresidence"), + command_addedBlock("&eAdded new blocked command for &6%1 &eresidence"), + command_removedBlock("&eRemoved blocked command for &6%1 &eresidence"), + command_Blocked("&eBlocked commands: &6%1"), + command_Allowed("&eAllowed commands: &6%1"), + + Rentable_Land("&eRentable Land: &6"), + Rentable_AllowRenewing("&eCan Renew: &6%1"), + Rentable_StayInMarket("&eRentable stay in market: &6%1"), + Rentable_AllowAutoPay("&eRentable allows auto pay: &6%1"), + Rentable_DisableRenew("&6%1 &ewill no longer renew rentable status upon expire."), + Rentable_EnableRenew("&6%1 &ewill now automatically renew rentable status upon expire."), + + Economy_LandForSale("&eLand For Sale:"), + Economy_NotEnoughMoney("&cYou dont have enough money."), + Economy_MoneyCharged("&eCharged &6%1 &eto your &6%2 &eaccount."), + Economy_MoneyAdded("&eGot &6%1 &eto your &6%2 &eaccount."), + Economy_MoneyCredit("&eCredited &6%1 &eto your &6%2 &eaccount."), + Economy_RentReleaseInvalid("&eResidence &6%1 &eis not rented or for rent."), + Economy_RentSellFail("&cCannot sell a Residence if it is for rent."), + Economy_SubzoneRentSellFail("&cCannot sell a Residence if its subzone set for rent."), + Economy_ParentRentSellFail("&cCannot sell a Residence if its parent zone is for rent."), + Economy_SubzoneSellFail("&cCannot sell a subzone."), + Economy_SellRentFail("&cCannot rent a Residence if it is for sale."), + Economy_ParentSellRentFail("&cCannot rent a Residence if its parent zone is for sale."), + Economy_OwnerBuyFail("&cCannot buy your own land!"), + Economy_OwnerRentFail("&cCannot rent your own land!"), + Economy_AlreadySellFail("&eResidence already for sale!"), + Economy_LeaseRenew("&eLease valid until &6%1"), + Economy_LeaseRenewMax("&eLease renewed to maximum allowed"), + Economy_LeaseNotExpire("&eNo such lease, or lease does not expire."), + Economy_LeaseRenewalCost("&eRenewal cost for area &6%1 &eis &6%2"), + Economy_LeaseInfinite("&eLease time set to infinite..."), + Economy_MarketDisabled("&cEconomy Disabled!"), + Economy_SellAmount("&eSell Amount: &2%1"), + Economy_SellList(" &6%1&e. &6%2 &e(&6%3&e) - &6%4"), + Economy_LeaseExpire("&eLease Expire Time: &2%1"), + + Expanding_North("&eExpanding North &6%1 &eblocks"), + Expanding_West("&eExpanding West &6%1 &eblocks"), + Expanding_South("&eExpanding South &6%1 &eblocks"), + Expanding_East("&eExpanding East &6%1 &eblocks"), + Expanding_Up("&eExpanding Up &6%1 &eblocks"), + Expanding_Down("&eExpanding Down &6%1 &eblocks"), + + Contracting_North("&eContracting North &6%1 &eblocks"), + Contracting_West("&eContracting West &6%1 &eblocks"), + Contracting_South("&eContracting South &6%1 &eblocks"), + Contracting_East("&eContracting East &6%1 &eblocks"), + Contracting_Up("&eContracting Up &6%1 &eblocks"), + Contracting_Down("&eContracting Down &6%1 &eblocks"), + + Shifting_North("&eShifting North &6%1 &eblocks"), + Shifting_West("&eShifting West &6%1 &eblocks"), + Shifting_South("&eShifting South &6%1 &eblocks"), + Shifting_East("&eShifting East &6%1 &eblocks"), + Shifting_Up("&eShifting Up &6%1 &eblocks"), + Shifting_Down("&eShifting Down &6%1 &eblocks"), + + Limits_PGroup("&7- &ePermissions Group:&3 %1"), + Limits_RGroup("&7- &eResidence Group:&3 %1"), + Limits_Admin("&7- &eResidence Admin:&3 %1"), + Limits_CanCreate("&7- &eCan Create Residences:&3 %1"), + Limits_MaxRes("&7- &eMax Residences:&3 %1"), + Limits_MaxEW("&7- &eMax East/West Size:&3 %1"), + Limits_MaxNS("&7- &eMax North/South Size:&3 %1"), + Limits_MaxUD("&7- &eMax Up/Down Size:&3 %1"), + Limits_MinMax("&7- &eMin/Max Protection Height:&3 %1 to %2"), + Limits_MaxSub("&7- &eMax Subzone Depth:&3 %1"), + Limits_MaxRents("&7- &eMax Rents:&3 %1"), + Limits_MaxRentDays(" &eMax Rent days:&3 %1"), + Limits_EnterLeave("&7- &eCan Set Enter/Leave Messages:&3 %1"), + Limits_NumberOwn("&7- &eNumber of Residences you own:&3 %1"), + Limits_Cost("&7- &eResidence Cost Per Block:&3 %1"), + Limits_Sell("&7- &eResidence Sell Cost Per Block:&3 %1"), + Limits_Flag("&7- &eFlag Permissions:&3 %1"), + Limits_MaxDays("&7- &eMax Lease Days:&3 %1"), + Limits_LeaseTime("&7- &eLease Time Given on Renew:&3 %1"), + Limits_RenewCost("&7- &eRenew Cost Per Block:&3 %1"), + + Gui_Set_Title("&6%1 flags"), + Gui_Pset_Title("&6%1 %2 flags"), + Gui_Actions(new ArrayList(Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove"))), + + InformationPage_TopLine("&e---< &a %1 &e >---"), + InformationPage_Page("&e-----< &6%1 &e>-----"), + InformationPage_NextPage("&e-----< &6%1 &e>-----"), + InformationPage_NoNextPage("&e-----------------------"), + InformationPage_GeneralList("&2 %1 &6- &e%2"), + InformationPage_FlagsList("&2 %1 &6- &e%2"), + InformationPage_Separator("&6\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC"), + + Chat_ChatChannelChange("&eChanged residence chat channel to &6%1!"), + Chat_ChatChannelLeave("&eLeft residence chat"), + + Chat_JoinFirst("&4Join residence chat channel first..."), + Chat_InvalidChannel("&4Invalid Channel..."), + Chat_InvalidColor("&4Incorrect color code"), + Chat_NotInChannel("&4Player is not in channel"), + Chat_Kicked("&6%1 &ewas kicked from &6%2 &echannel"), + Chat_InvalidPrefixLength("&4Prefix is to long. Allowed length: %1"), + Chat_ChangedColor("&eResidence chat channel color changed to %1"), + Chat_ChangedPrefix("&eResidence chat channel prefix changed to %1"), + + Shop_ListTopLine("&6%1 &eShop list - Page &6%2 &eof &6%3 %4"), + Shop_List(" &e%1. &6%2 &e(&6%3&e) %4"), + Shop_ListVoted("&e%1 (&6%2&e)"), + Shop_ListLiked("&eLikes: &0%1"), + + Shop_VotesTopLine("&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5"), + Shop_VotesList(" &e%1. &6%2 &e%3 &7%4"), + + Shop_NoDesc("&6No description"), + Shop_Desc("&6Description:\n%1"), + Shop_DescChange("&6Description changed to: %1"), + Shop_NewBoard("&6Successfully added new shop sign board"), + Shop_BoardExist("&cShop board already exists in this location"), + Shop_DeleteBoard("&6Right click sign of board you want to delete"), + Shop_DeletedBoard("&6Sign board removed"), + Shop_IncorrectBoard("&cThis is not sign board, try performing command again and clicking correct sign"), + Shop_InvalidSelection("&cLeft click with selection tool top left sign and then right click bottom right"), + Shop_VoteChanged("&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence"), + Shop_Voted("&6You voted, and gave &e%1 &6votes to &e%2 &6residence"), + Shop_Liked("&6You liked &e%1 &6residence"), + Shop_AlreadyLiked("&6You already liked &e%1 &6residence"), + Shop_NoVotes("&cThere is no registered votes for this residence"), + Shop_CantVote("&cResidence don't have shop flag set to true"), + Shop_VotedRange("&6Vote range is from &e%1 &6to &e%2"), + Shop_SignLines_1("&e--== &8%1 &e==--"), + Shop_SignLines_2("&9%1"), + Shop_SignLines_3("&4%1"), + Shop_SignLines_4("&8%1&e (&8%2&e)"), + Shop_SignLines_Likes4("&9Likes: &8%2"), + + RandomTeleport_TpLimit("&eYou can't teleport so fast, please wait &6%1 &esec and try again"), + RandomTeleport_TeleportSuccess("&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation"), + RandomTeleport_IncorrectLocation("&6Could not find correct teleport location, please wait &e%1 &6sec and try again."), + RandomTeleport_TeleportStarted("&eTeleportation started, don't move for next &6%4 &esec."), + RandomTeleport_WorldList("&ePossible worlds: &6%1"), + + General_DisabledWorld("&cResidence plugin is disabled in this world"), + General_UseNumbers("&cPlease use numbers..."), + General_CantPlaceLava("&cYou can't place lava outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), + General_CantPlaceWater("&cYou can't place Water outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), + General_NoPermission("&cYou dont have permission for this."), + General_NoCmdPermission("&cYou dont have permission for this command."), + General_DefaultUsage("&eType &6/%1 ? &efor more info"), + General_MaterialGet("&eThe material name for ID &6%1 &eis &6%2"), + General_MarketList("&e---- &6Market List &e----"), + General_Separator("&e----------------------------------------------------"), + General_AdminOnly("&cOnly admins have access to this command."), + General_InfoTool("&e- Info Tool: &6%1"), + General_ListMaterialAdd("&6%1 &eadded to the residence &6%2"), + General_ListMaterialRemove("&6%1 &eremoved from the residence &6%2"), + General_ItemBlacklisted("&cYou are blacklisted from using this item here."), + General_WorldPVPDisabled("&cWorld PVP is disabled."), + General_NoPVPZone("&cNo PVP zone."), + General_InvalidHelp("&cInvalid help page."), + + General_TeleportDeny("&cYou dont have teleport access."), + General_TeleportSuccess("&eTeleported!"), + General_TeleportConfirm("&cThis teleport is not safe, you will fall for &6%1 &cblocks. Use &6/res tpconfirm &cto perform teleportation anyways."), + General_TeleportStarted("&eTeleportation to &6%1 &estarted, don't move for next &6%2 &esec."), + General_TeleportTitle("&eTeleporting!"), + General_TeleportTitleTime("&6%1"), + General_TeleportCanceled("&eTeleportation canceled!"), + General_NoTeleportConfirm("&eThere is no teleports waiting for confirmation!"), + General_HelpPageHeader("&eHelp Pages - &6%1 &e- Page <&6%2 &eof &6%3&e>"), + General_ListExists("&cList already exists..."), + General_ListRemoved("&eList removed..."), + General_ListCreate("&eCreated list &6%1"), + General_PhysicalAreas("&ePhysical Areas"), + General_CurrentArea("&eCurrent Area: &6%1"), + General_TotalResSize("&eTotal size: &6%1m\u00B3 (%2m\u00B2)"), + General_TotalWorth("&eTotal worth of residence: &6%1 &e(&6%2&e)"), + General_NotOnline("&eTarget player must be online."), + General_NextPage("&eNext Page"), + General_NextInfoPage("&2| &eNext Page &2>>>"), + General_PrevInfoPage("&2<<< &ePrev Page &2|"), + General_GenericPages("&ePage &6%1 &eof &6%2 &e(&6%3&e)"), + General_WorldEditNotFound("&cWorldEdit was not detected."), + General_CoordsTop("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), + General_CoordsBottom("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), + General_AdminToggleTurnOn("&eAutomatic resadmin toggle turned &6On"), + General_AdminToggleTurnOff("&eAutomatic resadmin toggle turned &6Off"), + General_NoSpawn("&eYou do not have &6move &epermissions at your spawn point. Relocating"), + General_CompassTargetReset("&eYour compass has been reset"), + General_CompassTargetSet("&eYour compass now points to &6%1"), + General_Ignorelist("&2Ignorelist:&6"), + General_Blacklist("&cBlacklist:&6"), + General_LandCost("&eLand cost: &6%1"), + General_True("&2True"), + General_False("&cFalse"), + General_Removed("&6Removed"), + General_FlagState("&eFlag state: %1"), + General_Land("&eLand: &6%1"), + General_Cost("&eCost: &6%1 &eper &6%2 &edays"), + General_Status("&eStatus: %1"), + General_Available("&2Available"), + General_Size(" &eSize: &6%1"), + General_ResidenceFlags("&eResidence flags: &6%1"), + General_PlayersFlags("&ePlayers flags: &6%1"), + General_GroupFlags("&eGroup flags: &6%1"), + General_OthersFlags("&eOthers flags: &6%1"), + General_Moved("&eMoved..."), + General_Name("&eName: &6%1"), + General_Lists("&eLists: &6"), + General_Residences("&eResidences&6"), + General_CreatedOn("&eCreated on: &6%1"), + General_Owner("&eOwner: &6%1"), + General_World("&eWorld: &6%1"), + General_Subzones("&eSubzones"), + General_NewPlayerInfo( + "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", + "The below lines represent various messages residence sends to the players.", + "Note that some messages have variables such as %1 that are inserted at runtime."); + + private Object text; + private String[] comments; + + private lm(Object text, String... comments) { + this.text = text; + this.comments = comments; + } + + public Object getText() { + return text; + } + + public String[] getComments() { + return comments; + } + + public String getPath() { + String path = this.name(); + if (!this.name().contains("Language.") && !this.name().contains("CommandHelp.")) + path = "Language." + this.name(); + return path.replace("_", "."); + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c116f7002..0f0377c0d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1354,7 +1354,7 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) { } FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); - boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); + boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); if (!hasdestroy) { Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); event.setCancelled(true); @@ -1555,10 +1555,11 @@ public void onPlayerMove(PlayerMoveEvent event) { if (name == null) return; - long last = lastUpdate.get(name); + Long last = lastUpdate.get(name); long now = System.currentTimeMillis(); - if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) - return; + if (last != null) + if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) + return; this.lastUpdate.put(name, now); diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 9a8efe352..40b169f87 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -1,424 +1,424 @@ -package com.bekvon.bukkit.residence.signsStuff; - -import java.io.File; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Set; -import java.util.TimeZone; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.Sign; -import org.bukkit.command.CommandSender; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; - -import com.bekvon.bukkit.residence.CommentedYamlConfiguration; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.economy.rent.RentedLand; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class SignUtil { - - private Residence plugin; - public SignInfo Signs = new SignInfo(); - - public SignUtil(Residence plugin) { - this.plugin = plugin; - } - - public SignInfo getSigns() { - return Signs; - } - - public int updateAllSigns() { - List temp = new ArrayList(); - temp.addAll(Signs.GetAllSigns()); - for (Signs one : temp) { - SignUpdate(one); - } - saveSigns(); - return temp.size(); - } - - // Sign file - public void LoadSigns() { - - Signs.GetAllSigns().clear(); - File file = new File(plugin.getDataFolder(), "Signs.yml"); - YamlConfiguration f = YamlConfiguration.loadConfiguration(file); - - if (!f.isConfigurationSection("Signs")) - return; - - ConfigurationSection ConfCategory = f.getConfigurationSection("Signs"); - ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); - if (categoriesList.size() == 0) - return; - for (String category : categoriesList) { - ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); - Signs newTemp = new Signs(); - newTemp.setCategory(Integer.valueOf(category)); - - ClaimedResidence res = Residence.getResidenceManager().getByName(NameSection.getString("Residence")); - - if (res == null) - continue; - - newTemp.setResidence(res); - - World w = Bukkit.getWorld(NameSection.getString("World")); - - if (w == null) - continue; - - double x = NameSection.getDouble("X"); - double y = NameSection.getDouble("Y"); - double z = NameSection.getDouble("Z"); - - Location loc = new Location(w, x, y, z); - newTemp.setLocation(loc); - Signs.addSign(newTemp); - } - return; - } - - // Signs save file - public void saveSigns() { - - File f = new File(plugin.getDataFolder(), "Signs.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); - - writer.addComment("Signs", "DO NOT EDIT THIS FILE BY HAND!"); - - if (!conf.isConfigurationSection("Signs")) - conf.createSection("Signs"); - - for (Signs one : Signs.GetAllSigns()) { - String path = "Signs." + String.valueOf(one.GetCategory()); - writer.set(path + ".Residence", one.GetResidence().getName()); - writer.set(path + ".World", one.GetLocation().getWorld().getName()); - writer.set(path + ".X", one.GetLocation().getBlockX()); - writer.set(path + ".Y", one.GetLocation().getBlockY()); - writer.set(path + ".Z", one.GetLocation().getBlockZ()); - } - - try { - writer.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - - public Signs getSignFromLoc(Location loc) { - if (loc == null) - return null; - List signList = new ArrayList(); - signList.addAll(this.getSigns().GetAllSigns()); - for (Signs one : signList) { - if (one == null) - continue; - if (one.GetLocation() == null) - continue; - if (one.GetLocation().getWorld() == null) - continue; - if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) - continue; - if (one.GetLocation().getBlockX() != loc.getBlockX()) - continue; - if (one.GetLocation().getBlockY() != loc.getBlockY()) - continue; - if (one.GetLocation().getBlockZ() != loc.getBlockZ()) - continue; - return one; - } - return null; - } - - public void CheckSign(final ClaimedResidence res, int time) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { - @Override - public void run() { - CheckSign(res); - } - }, time * 1L); - } - - public void CheckSign(ClaimedResidence res) { - List signList = new ArrayList(); - signList.addAll(this.getSigns().GetAllSigns()); - for (Signs one : signList) { - if (res != one.GetResidence()) - continue; - this.SignUpdate(one); - } - saveSigns(); - } - - public void removeSign(ClaimedResidence res) { - if (res != null) - removeSign(res.getName()); - } - - public void removeSign(String res) { - List signList = new ArrayList(); - signList.addAll(this.getSigns().GetAllSigns()); - - for (Signs one : signList) { - if (!res.equals(one.GetResidence())) - continue; - this.SignUpdate(one); - } - } - - public void updateSignResName(ClaimedResidence res) { - for (Signs one : this.getSigns().GetAllSigns()) { - if (res != one.GetResidence()) - continue; - this.SignUpdate(one); - saveSigns(); - break; - } - } - - public boolean SignUpdate(Signs Sign) { - - ClaimedResidence res = Sign.GetResidence(); - - if (res == null) - return false; - - boolean ForSale = res.isForSell(); - boolean ForRent = res.isForRent(); - - Location nloc = Sign.GetLocation(); - - if (nloc == null) { - Signs.removeSign(Sign); - return false; - } - - Block block = nloc.getBlock(); - - if (block.getType() == Material.AIR) { - Signs.removeSign(Sign); - return false; - } - - if (!(block.getState() instanceof Sign)) - return false; - - Sign sign = (Sign) block.getState(); - - if (!ForRent && !ForSale) { - block.breakNaturally(); - Signs.removeSign(Sign); - return true; - } - String landName = res.getName(); - if (ForRent) { - - boolean rented = res.isRented(); - - RentedLand rentedPlace = res.getRentedLand(); - long time = 0L; - if (rentedPlace != null) - time = rentedPlace.endTime; - - SimpleDateFormat formatter = new SimpleDateFormat(Residence.msg(lm.Sign_DateFormat)); - formatter.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(time); - String timeString = formatter.format(calendar.getTime()); - - String endDate = timeString; - if (time == 0L) - endDate = "Unknown"; - - if (Residence.getRentManager().getRentedAutoRepeats(res)) - endDate = Residence.msg(lm.Sign_RentedAutorenewTrue, endDate); - else - endDate = Residence.msg(lm.Sign_RentedAutorenewFalse, endDate); - - String TopLine = rented ? endDate : Residence.msg(lm.Sign_ForRentTopLine); - sign.setLine(0, TopLine); - - String infoLine = Residence.msg(lm.Sign_ForRentPriceLine, Residence.getRentManager().getCostOfRent(res), Residence - .getRentManager().getRentDays(res), Residence.getRentManager().getRentableRepeatable(res)); - - sign.setLine(1, infoLine); - String shortName = fixResName(landName); - sign.setLine(2, rented ? Residence.msg(lm.Sign_RentedResName, shortName) - : Residence.msg(lm.Sign_RentedResName, shortName)); - sign.setLine(3, rented ? Residence.msg(lm.Sign_RentedBottomLine, Residence.getRentManager().getRentingPlayer(landName)) - : Residence.msg(lm.Sign_ForRentBottomLine)); - sign.update(); - } - - if (ForSale) { - String shortName = fixResName(landName); - String secondLine = null; - if (shortName.contains("~")) { - String[] lines = fixDoubleResName(landName); - shortName = lines[0]; - secondLine = lines[1]; - } - - sign.setLine(0, Residence.msg(lm.Sign_ForSaleTopLine)); - String infoLine = Residence.msg(lm.Sign_ForSalePriceLine, res.getSellPrice()); - sign.setLine(1, infoLine); - sign.setLine(2, Residence.msg(lm.Sign_RentedResName, shortName)); - - if (secondLine != null) - sign.setLine(3, Residence.msg(lm.Sign_RentedResName, secondLine)); - else - sign.setLine(3, Residence.msg(lm.Sign_ForSaleBottomLine)); - sign.update(); - } - - return true; - } - - public void convertSigns(CommandSender sender) { - File file = new File("plugins/ResidenceSigns/signs.yml"); - if (!file.exists()) { - sender.sendMessage(ChatColor.GOLD + "Can't find ResidenceSign file"); - return; - } - YamlConfiguration conf = YamlConfiguration.loadConfiguration(file); - - if (!conf.contains("signs")) { - sender.sendMessage(ChatColor.GOLD + "Incorrect format of signs file"); - return; - } - - Set sectionname = conf.getConfigurationSection("signs").getKeys(false); - ConfigurationSection section = conf.getConfigurationSection("signs"); - - int category = 1; - if (this.getSigns().GetAllSigns().size() > 0) - category = this.getSigns().GetAllSigns().get(this.getSigns().GetAllSigns().size() - 1).GetCategory() + 1; - - long time = System.currentTimeMillis(); - - int i = 0; - for (String one : sectionname) { - Signs signs = new Signs(); - String resname = section.getString(one + ".resName"); - signs.setCategory(category); - - ClaimedResidence res = Residence.getResidenceManager().getByName(resname); - - if (res == null) - continue; - - signs.setResidence(res); - - List loc = section.getStringList(one + ".loc"); - - if (loc.size() != 4) - continue; - - World world = Bukkit.getWorld(loc.get(0)); - if (world == null) - continue; - - int x = 0; - int y = 0; - int z = 0; - - try { - x = Integer.parseInt(loc.get(1)); - y = Integer.parseInt(loc.get(2)); - z = Integer.parseInt(loc.get(3)); - } catch (Exception ex) { - continue; - } - - signs.setLocation(new Location(world, x, y, z)); - boolean found = false; - - for (Signs onesigns : this.getSigns().GetAllSigns()) { - if (!onesigns.GetLocation().getWorld().getName().equalsIgnoreCase(signs.GetLocation().getWorld().getName())) - continue; - if (onesigns.GetLocation().getBlockX() != signs.GetLocation().getBlockX()) - continue; - if (onesigns.GetLocation().getBlockY() != signs.GetLocation().getBlockY()) - continue; - if (onesigns.GetLocation().getBlockZ() != signs.GetLocation().getBlockZ()) - continue; - found = true; - } - - if (found) - continue; - - Location nloc = signs.GetLocation(); - Block block = nloc.getBlock(); - - if (!(block.getState() instanceof Sign)) - continue; - - this.getSigns().addSign(signs); - this.SignUpdate(signs); - category++; - i++; - } - - this.saveSigns(); - - sender.sendMessage(ChatColor.GOLD + "" + i + ChatColor.YELLOW + " signs have being converted to new format! It took " + ChatColor.GOLD + (System - .currentTimeMillis() - time) + ChatColor.YELLOW + " ms!"); - } - - public String fixResName(String name) { - if (name.length() > 15 && !name.contains(".")) - name = "~" + name.substring(name.length() - 14); - else if (name.length() > 15 && name.contains(".")) { - String[] splited = name.split("\\."); - name = ""; - for (int i = 0; i < splited.length; i++) { - String tempName = name + "." + splited[i]; - if (tempName.length() < 15) - name = tempName; - else - name = "~" + tempName.substring(tempName.length() - 14); - } - } - return name; - } - - public String[] fixDoubleResName(String name) { - String SecondLine = name.substring(name.length() - 15); - String FirstLine = name.replace(SecondLine, ""); - if (FirstLine.length() > 15 && !FirstLine.contains(".")) - FirstLine = "~" + FirstLine.substring(name.length() - 14); - else if (FirstLine.length() > 15 && FirstLine.contains(".")) { - String[] splited = FirstLine.split("\\."); - FirstLine = ""; - for (int i = 0; i < splited.length; i++) { - String tempName = FirstLine + "." + splited[i]; - if (tempName.length() < 15) - FirstLine = tempName; - else - FirstLine = "~" + tempName.substring(tempName.length() - 14); - } - } - String[] lines = new String[2]; - lines[0] = FirstLine; - lines[1] = SecondLine; - return lines; - } -} +package com.bekvon.bukkit.residence.signsStuff; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.Set; +import java.util.TimeZone; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; + +import com.bekvon.bukkit.residence.CommentedYamlConfiguration; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.economy.rent.RentedLand; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class SignUtil { + + private Residence plugin; + public SignInfo Signs = new SignInfo(); + + public SignUtil(Residence plugin) { + this.plugin = plugin; + } + + public SignInfo getSigns() { + return Signs; + } + + public int updateAllSigns() { + List temp = new ArrayList(); + temp.addAll(Signs.GetAllSigns()); + for (Signs one : temp) { + SignUpdate(one); + } + saveSigns(); + return temp.size(); + } + + // Sign file + public void LoadSigns() { + + Signs.GetAllSigns().clear(); + File file = new File(plugin.getDataFolder(), "Signs.yml"); + YamlConfiguration f = YamlConfiguration.loadConfiguration(file); + + if (!f.isConfigurationSection("Signs")) + return; + + ConfigurationSection ConfCategory = f.getConfigurationSection("Signs"); + ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); + if (categoriesList.size() == 0) + return; + for (String category : categoriesList) { + ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); + Signs newTemp = new Signs(); + newTemp.setCategory(Integer.valueOf(category)); + + ClaimedResidence res = Residence.getResidenceManager().getByName(NameSection.getString("Residence")); + + if (res == null) + continue; + + newTemp.setResidence(res); + + World w = Bukkit.getWorld(NameSection.getString("World")); + + if (w == null) + continue; + + double x = NameSection.getDouble("X"); + double y = NameSection.getDouble("Y"); + double z = NameSection.getDouble("Z"); + + Location loc = new Location(w, x, y, z); + newTemp.setLocation(loc); + Signs.addSign(newTemp); + } + return; + } + + // Signs save file + public void saveSigns() { + + File f = new File(plugin.getDataFolder(), "Signs.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + writer.addComment("Signs", "DO NOT EDIT THIS FILE BY HAND!"); + + if (!conf.isConfigurationSection("Signs")) + conf.createSection("Signs"); + + for (Signs one : Signs.GetAllSigns()) { + String path = "Signs." + String.valueOf(one.GetCategory()); + writer.set(path + ".Residence", one.GetResidence().getName()); + writer.set(path + ".World", one.GetLocation().getWorld().getName()); + writer.set(path + ".X", one.GetLocation().getBlockX()); + writer.set(path + ".Y", one.GetLocation().getBlockY()); + writer.set(path + ".Z", one.GetLocation().getBlockZ()); + } + + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + + public Signs getSignFromLoc(Location loc) { + if (loc == null) + return null; + List signList = new ArrayList(); + signList.addAll(this.getSigns().GetAllSigns()); + for (Signs one : signList) { + if (one == null) + continue; + if (one.GetLocation() == null) + continue; + if (one.GetLocation().getWorld() == null) + continue; + if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) + continue; + if (one.GetLocation().getBlockX() != loc.getBlockX()) + continue; + if (one.GetLocation().getBlockY() != loc.getBlockY()) + continue; + if (one.GetLocation().getBlockZ() != loc.getBlockZ()) + continue; + return one; + } + return null; + } + + public void CheckSign(final ClaimedResidence res, int time) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + CheckSign(res); + } + }, time * 1L); + } + + public void CheckSign(ClaimedResidence res) { + List signList = new ArrayList(); + signList.addAll(this.getSigns().GetAllSigns()); + for (Signs one : signList) { + if (res != one.GetResidence()) + continue; + this.SignUpdate(one); + } + saveSigns(); + } + + public void removeSign(ClaimedResidence res) { + if (res != null) + removeSign(res.getName()); + } + + public void removeSign(String res) { + List signList = new ArrayList(); + signList.addAll(this.getSigns().GetAllSigns()); + + for (Signs one : signList) { + if (!res.equals(one.GetResidence())) + continue; + this.SignUpdate(one); + } + } + + public void updateSignResName(ClaimedResidence res) { + for (Signs one : this.getSigns().GetAllSigns()) { + if (res != one.GetResidence()) + continue; + this.SignUpdate(one); + saveSigns(); + break; + } + } + + public boolean SignUpdate(Signs Sign) { + + ClaimedResidence res = Sign.GetResidence(); + + if (res == null) + return false; + + boolean ForSale = res.isForSell(); + boolean ForRent = res.isForRent(); + + Location nloc = Sign.GetLocation(); + + if (nloc == null) { + Signs.removeSign(Sign); + return false; + } + + Block block = nloc.getBlock(); + + if (block.getType() == Material.AIR) { + Signs.removeSign(Sign); + return false; + } + + if (!(block.getState() instanceof Sign)) + return false; + + Sign sign = (Sign) block.getState(); + + if (!ForRent && !ForSale) { + block.breakNaturally(); + Signs.removeSign(Sign); + return true; + } + String landName = res.getName(); + if (ForRent) { + + boolean rented = res.isRented(); + + RentedLand rentedPlace = res.getRentedLand(); + long time = 0L; + if (rentedPlace != null) + time = rentedPlace.endTime; + + SimpleDateFormat formatter = new SimpleDateFormat(Residence.msg(lm.Sign_DateFormat)); + formatter.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time); + String timeString = formatter.format(calendar.getTime()); + + String endDate = timeString; + if (time == 0L) + endDate = "Unknown"; + + if (Residence.getRentManager().getRentedAutoRepeats(res)) + endDate = Residence.msg(lm.Sign_RentedAutorenewTrue, endDate); + else + endDate = Residence.msg(lm.Sign_RentedAutorenewFalse, endDate); + + String TopLine = rented ? endDate : Residence.msg(lm.Sign_ForRentTopLine); + sign.setLine(0, TopLine); + + String infoLine = Residence.msg(lm.Sign_ForRentPriceLine, Residence.getRentManager().getCostOfRent(res), Residence + .getRentManager().getRentDays(res), Residence.getRentManager().getRentableRepeatable(res)); + + sign.setLine(1, infoLine); + String shortName = fixResName(landName); + sign.setLine(2, rented ? Residence.msg(lm.Sign_RentedResName, shortName) + : Residence.msg(lm.Sign_RentedResName, shortName)); + sign.setLine(3, rented ? Residence.msg(lm.Sign_RentedBottomLine, Residence.getRentManager().getRentingPlayer(landName)) + : Residence.msg(lm.Sign_ForRentBottomLine)); + sign.update(); + } + + if (ForSale) { + String shortName = fixResName(landName); + String secondLine = null; + if (shortName.contains("~")) { + String[] lines = fixDoubleResName(landName); + shortName = lines[0]; + secondLine = lines[1]; + } + + sign.setLine(0, Residence.msg(lm.Sign_ForSaleTopLine)); + String infoLine = Residence.msg(lm.Sign_ForSalePriceLine, res.getSellPrice()); + sign.setLine(1, infoLine); + sign.setLine(2, Residence.msg(lm.Sign_RentedResName, shortName)); + + if (secondLine != null) + sign.setLine(3, Residence.msg(lm.Sign_RentedResName, secondLine)); + else + sign.setLine(3, Residence.msg(lm.Sign_ForSaleBottomLine)); + sign.update(); + } + + return true; + } + + public void convertSigns(CommandSender sender) { + File file = new File("plugins/ResidenceSigns/signs.yml"); + if (!file.exists()) { + sender.sendMessage(ChatColor.GOLD + "Can't find ResidenceSign file"); + return; + } + YamlConfiguration conf = YamlConfiguration.loadConfiguration(file); + + if (!conf.contains("signs")) { + sender.sendMessage(ChatColor.GOLD + "Incorrect format of signs file"); + return; + } + + Set sectionname = conf.getConfigurationSection("signs").getKeys(false); + ConfigurationSection section = conf.getConfigurationSection("signs"); + + int category = 1; + if (this.getSigns().GetAllSigns().size() > 0) + category = this.getSigns().GetAllSigns().get(this.getSigns().GetAllSigns().size() - 1).GetCategory() + 1; + + long time = System.currentTimeMillis(); + + int i = 0; + for (String one : sectionname) { + Signs signs = new Signs(); + String resname = section.getString(one + ".resName"); + signs.setCategory(category); + + ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + + if (res == null) + continue; + + signs.setResidence(res); + + List loc = section.getStringList(one + ".loc"); + + if (loc.size() != 4) + continue; + + World world = Bukkit.getWorld(loc.get(0)); + if (world == null) + continue; + + int x = 0; + int y = 0; + int z = 0; + + try { + x = Integer.parseInt(loc.get(1)); + y = Integer.parseInt(loc.get(2)); + z = Integer.parseInt(loc.get(3)); + } catch (Exception ex) { + continue; + } + + signs.setLocation(new Location(world, x, y, z)); + boolean found = false; + + for (Signs onesigns : this.getSigns().GetAllSigns()) { + if (!onesigns.GetLocation().getWorld().getName().equalsIgnoreCase(signs.GetLocation().getWorld().getName())) + continue; + if (onesigns.GetLocation().getBlockX() != signs.GetLocation().getBlockX()) + continue; + if (onesigns.GetLocation().getBlockY() != signs.GetLocation().getBlockY()) + continue; + if (onesigns.GetLocation().getBlockZ() != signs.GetLocation().getBlockZ()) + continue; + found = true; + } + + if (found) + continue; + + Location nloc = signs.GetLocation(); + Block block = nloc.getBlock(); + + if (!(block.getState() instanceof Sign)) + continue; + + this.getSigns().addSign(signs); + this.SignUpdate(signs); + category++; + i++; + } + + this.saveSigns(); + + sender.sendMessage(ChatColor.GOLD + "" + i + ChatColor.YELLOW + " signs have being converted to new format! It took " + ChatColor.GOLD + (System + .currentTimeMillis() - time) + ChatColor.YELLOW + " ms!"); + } + + public String fixResName(String name) { + if (name.length() > 15 && !name.contains(".")) + name = "~" + name.substring(name.length() - 14); + else if (name.length() > 15 && name.contains(".")) { + String[] splited = name.split("\\."); + name = ""; + for (int i = 0; i < splited.length; i++) { + String tempName = name + "." + splited[i]; + if (tempName.length() < 15) + name = tempName; + else + name = "~" + tempName.substring(tempName.length() - 14); + } + } + return name; + } + + public String[] fixDoubleResName(String name) { + String SecondLine = name.substring(name.length() - 15); + String FirstLine = name.replace(SecondLine, ""); + if (FirstLine.length() > 15 && !FirstLine.contains(".")) + FirstLine = "~" + FirstLine.substring(name.length() - 14); + else if (FirstLine.length() > 15 && FirstLine.contains(".")) { + String[] splited = FirstLine.split("\\."); + FirstLine = ""; + for (int i = 0; i < splited.length; i++) { + String tempName = FirstLine + "." + splited[i]; + if (tempName.length() < 15) + FirstLine = tempName; + else + FirstLine = "~" + tempName.substring(tempName.length() - 14); + } + } + String[] lines = new String[2]; + lines[0] = FirstLine; + lines[1] = SecondLine; + return lines; + } +} From 46bd7adc82f6699cf0892d315c7ef409a83e84c6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 12 Oct 2016 17:39:18 +0300 Subject: [PATCH 0276/1142] Add witherspawn flag and split flags by 5 when checking with info --- .../bukkit/residence/containers/Flags.java | 1 + .../listeners/ResidenceEntityListener.java | 24 ++++++++++++++++++- .../residence/protection/FlagPermissions.java | 2 +- src/plugin.yml | 2 +- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index ea0e0c417..d47bf1aed 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -98,6 +98,7 @@ public enum Flags { trusted(1, 0, FlagMode.Group, "Gives build, use, move, container and tp flags", true), use(70, 0, FlagMode.Both, "Allows or denys use of doors, lever, buttons, etc...", true), vehicledestroy(328, 0, FlagMode.Both, "Allows or denys vehicle destroy", true), + witherspawn(397, 1, FlagMode.Residence, "Allows or denys wither spawning", true), waterflow(326, 0, FlagMode.Residence, "Allows or denys water flow, overrides flow", true), wspeed1(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true), wspeed2(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 1e35d18e8..e58f5b3aa 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -8,11 +8,14 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityCombustByEntityEvent; import org.bukkit.event.entity.EntityCombustEvent; @@ -376,6 +379,25 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onWitherSpawn(CreatureSpawnEvent event) { + // disabling event on world + Entity ent = event.getEntity(); + if (ent == null) + return; + if (Residence.isDisabledWorldListener(ent.getWorld())) + return; + + if (ent.getType() != EntityType.WITHER) + return; + + FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); + if (perms.has(Flags.witherspawn, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onCreatureSpawn(CreatureSpawnEvent event) { // disabling event on world @@ -1016,7 +1038,7 @@ public void onEntityDamage(EntityDamageEvent event) { boolean isSnowBall = false; boolean isOnFire = false; if (srcarea != null) { - srcpvp = srcarea.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone, false); + srcpvp = srcarea.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone, false); } ent = attackevent.getEntity(); if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 1173a7ab7..f2e6915e0 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -655,7 +655,7 @@ public String listFlags(Integer split, Integer totalShow) { Set> set = cuboidFlags.entrySet(); synchronized (set) { Iterator> it = set.iterator(); - int i = 0; + int i = -1; int t = 0; while (it.hasNext()) { i++; diff --git a/src/plugin.yml b/src/plugin.yml index 85853ab24..6ed6416dd 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.8.1 +version: 4.5.8.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From c28f1e00c0c274a482decbb43293f220d4412f1a Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 13 Oct 2016 15:37:24 +0300 Subject: [PATCH 0277/1142] Allow hook when flag is not set --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 0f0377c0d..bb8f23255 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -265,7 +265,7 @@ public void onFishingRodUse(PlayerFishEvent event) { if (Residence.getNms().isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { FlagPermissions perm = Residence.getPermsByLoc(event.getCaught().getLocation()); ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getCaught().getLocation()); - if (!perm.has(Flags.hook, FlagCombo.OnlyFalse) && res == null || res != null && !res.getPermissions().playerHas(player, Flags.hook, FlagCombo.OnlyTrue)) { + if (perm.has(Flags.hook, FlagCombo.OnlyFalse)) { event.setCancelled(true); if (res != null) Residence.msg(player, lm.Residence_FlagDeny, Flags.hook.getName(), res.getName()); From b3314145aae0881af9abd477a3647fac263ba9d4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 13 Oct 2016 15:40:24 +0300 Subject: [PATCH 0278/1142] allow snowballs in remove or true state --- .../bukkit/residence/listeners/ResidenceEntityListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index e58f5b3aa..a7462e91e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1050,7 +1050,7 @@ public void onEntityDamage(EntityDamageEvent event) { Projectile project = (Projectile) damager; if (project.getType() == EntityType.SNOWBALL && srcarea != null) { isSnowBall = true; - allowSnowBall = srcarea.getPermissions().has(Flags.snowball, false); + allowSnowBall = srcarea.getPermissions().has(Flags.snowball, FlagCombo.TrueOrNone); } if (project.getFireTicks() > 0) isOnFire = true; From b95c4541a2cd4ebce4c5cb0d33ffc8003d0da383 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 13 Oct 2016 15:59:09 +0300 Subject: [PATCH 0279/1142] item frame fill and empty action attach to container flag --- .../listeners/ResidenceEntityListener.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index a7462e91e..e610448b9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -46,6 +46,7 @@ import org.bukkit.entity.Slime; import org.bukkit.entity.Ghast; import org.bukkit.entity.Hanging; +import org.bukkit.entity.ItemFrame; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -512,7 +513,7 @@ public void onHangingPlace(HangingPlaceEvent event) { String world = player.getWorld().getName(); if (!perms.playerHas(pname, world, Flags.place, perms.playerHas(pname, world, Flags.build, true))) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.place.getName()); + Residence.msg(player, lm.Flag_Deny, Flags.place); } } @@ -540,7 +541,7 @@ public void onHangingBreak(HangingBreakByEntityEvent event) { String world = ent.getWorld().getName(); if (!perms.playerHas(pname, world, Flags.destroy, perms.playerHas(pname, world, Flags.build, true))) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); + Residence.msg(player, lm.Flag_Deny, Flags.destroy); } } @@ -992,11 +993,22 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (Residence.isResAdminOn(player)) return; - String pname = player.getName(); FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); - String world = loc.getWorld().getName(); - if (!perms.playerHas(pname, world, Flags.destroy, perms.playerHas(pname, world, Flags.build, true))) { + + if (event.getEntityType() == EntityType.ITEM_FRAME) { + ItemFrame it = (ItemFrame) event.getEntity(); + if (it.getItem() != null) { + if (!perms.playerHas(player, Flags.container, true)) { + event.setCancelled(true); + Residence.msg(player, lm.Flag_Deny, Flags.container); + } + return; + } + } + + if (!perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true))) { event.setCancelled(true); + Debug.D("this one"); Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); } } From ed79de4f7e451a7c3bec11dad7d0123fbb08dfeb Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 13 Oct 2016 16:07:06 +0300 Subject: [PATCH 0280/1142] Allow ender crystal to destroy blocks if destroy flag is in remove state --- .../bukkit/residence/listeners/ResidenceEntityListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index e610448b9..2369c77c8 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -636,7 +636,7 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { } break; default: - if (!perms.has(Flags.destroy, true)) { + if (!perms.has(Flags.destroy, FlagCombo.OnlyFalse)) { if (entity != EntityType.ENDER_CRYSTAL) { event.setCancelled(true); ent.remove(); @@ -752,7 +752,7 @@ public void onEntityExplode(EntityExplodeEvent event) { preserve.add(block); break; case ENDER_CRYSTAL: - if (!blockperms.has(Flags.explode, false)) + if (blockperms.has(Flags.explode, FlagCombo.OnlyFalse)) preserve.add(block); continue; case SMALL_FIREBALL: From 71389c2ad6cc687ffafc39b627f623d16e1f5ff6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 13 Oct 2016 16:17:13 +0300 Subject: [PATCH 0281/1142] prevent wither block damage if destroy is set to false --- .../listeners/ResidenceEntityListener.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 2369c77c8..555713312 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -761,7 +761,7 @@ public void onEntityExplode(EntityExplodeEvent event) { preserve.add(block); continue; default: - if (!blockperms.has(Flags.destroy, world.has(Flags.destroy, true))) + if (blockperms.has(Flags.destroy, FlagCombo.OnlyFalse)) preserve.add(block); continue; } @@ -777,6 +777,25 @@ public void onEntityExplode(EntityExplodeEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onSplashPotion(EntityChangeBlockEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + Entity ent = event.getEntity(); + + if (ent.getType() != EntityType.WITHER) + return; + + if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.destroy, FlagCombo.OnlyFalse)) + return; + + event.setCancelled(true); + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSplashPotion(PotionSplashEvent event) { // disabling event on world From cdb9bbd3381322c6eba955bdaf1459610ab80f5b Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 14 Oct 2016 17:31:06 +0300 Subject: [PATCH 0282/1142] Check if residence name is not null before trying to process it --- src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 40b169f87..0f29314aa 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -228,6 +228,9 @@ public boolean SignUpdate(Signs Sign) { return true; } String landName = res.getName(); + + if (landName == null) + return false; if (ForRent) { boolean rented = res.isRented(); From 08c3522091461de405b03c6914c397077b48995f Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 21 Oct 2016 13:23:35 +0300 Subject: [PATCH 0283/1142] Optimize save file size Fix sorting freeze issue with allot of players residences Fix for offline mode and player name capitalization --- .../bekvon/bukkit/residence/Residence.java | 35 ++ .../residence/containers/ResidencePlayer.java | 490 +++++++++--------- .../residence/economy/rent/RentManager.java | 28 + .../bukkit/residence/itemlist/ItemList.java | 2 + .../listeners/ResidenceEntityListener.java | 3 - .../protection/ClaimedResidence.java | 82 ++- .../residence/protection/FlagPermissions.java | 188 +++++-- .../residence/protection/PlayerManager.java | 424 ++++++++------- .../protection/ResidenceManager.java | 29 +- .../protection/ResidencePermissions.java | 9 +- .../residence/text/help/InformationPager.java | 68 ++- .../bukkit/residence/utils/Sorting.java | 380 +++++++------- src/plugin.yml | 2 +- 13 files changed, 982 insertions(+), 758 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index a1b2e3488..650e520fa 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -191,6 +191,7 @@ public class Residence extends JavaPlugin { public static List resadminToggle; private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW" }; public static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); + private static Map cachedPlayerNameUUIDs = new HashMap(); public static WorldEditPlugin wep = null; public static WorldGuardPlugin wg = null; public static int wepid; @@ -371,6 +372,20 @@ public void onDisable() { } catch (Exception ex) { Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); } + +// File file = new File(this.getDataFolder(), "uuids.yml"); +// YamlConfiguration conf = YamlConfiguration.loadConfiguration(file); +// if (!conf.isConfigurationSection("UUIDS")) +// conf.createSection("UUIDS"); +// for (Entry one : getCachedPlayerNameUUIDs().entrySet()) { +// conf.set("UUIDS." + one.getKey().toString(), one.getValue()); +// } +// try { +// conf.save(file); +// } catch (IOException e) { +// e.printStackTrace(); +// } + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Disabled!"); } } @@ -403,6 +418,12 @@ public void onEnable() { if (!new File(dataFolder, "config.yml").isFile()) { this.writeDefaultConfigFromJar(); } + + if (!new File(dataFolder, "uuids.yml").isFile()) { + File file = new File(this.getDataFolder(), "uuids.yml"); + file.createNewFile(); + } + if (!new File(dataFolder, "flags.yml").isFile()) { this.writeDefaultFlagsFromJar(); } @@ -608,6 +629,7 @@ public void onEnable() { if (name == null) continue; getOfflinePlayerMap().put(name.toLowerCase(), player); + getCachedPlayerNameUUIDs().put(player.getUniqueId(), player.getName()); } Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Player data loaded: " + getOfflinePlayerMap().size()); } else { @@ -621,6 +643,7 @@ public void run() { if (name == null) continue; getOfflinePlayerMap().put(name.toLowerCase(), player); + getCachedPlayerNameUUIDs().put(player.getUniqueId(), player.getName()); } return; } @@ -1670,4 +1693,16 @@ public static String msg(lm lm, Object... variables) { public static InformationPager getInfoPageManager() { return InformationPagerManager; } + + public static Map getCachedPlayerNameUUIDs() { + return cachedPlayerNameUUIDs; + } + + public static void addCachedPlayerNameUUIDs(UUID uuid, String name) { + cachedPlayerNameUUIDs.put(uuid, name); + } + + public static void addCachedPlayerNameUUIDs(Map cachedPlayerNameUUIDs2) { + cachedPlayerNameUUIDs.putAll(cachedPlayerNameUUIDs2); + } } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 167a6123b..cb4327f54 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -1,243 +1,247 @@ -package com.bekvon.bukkit.residence.containers; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.ResidenceManager; -import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; - -public class ResidencePlayer { - - private String userName = null; - private Player player = null; - private OfflinePlayer ofPlayer = null; - - private Map ResidenceList = new HashMap(); - private ClaimedResidence mainResidence = null; - - private PermissionGroup group = null; - - private int maxRes = -1; - private int maxRents = -1; - private int maxSubzones = -1; - - public ResidencePlayer(Player player) { - this.player = player; - updateName(); - RecalculatePermissions(); - } - - public ResidencePlayer(String userName) { - this.userName = userName; - player = Bukkit.getPlayer(userName); - if (player == null) - ofPlayer = Residence.getOfflinePlayer(userName); - if (ofPlayer != null) - this.userName = ofPlayer.getName(); - RecalculatePermissions(); - } - - public void setMainResidence(ClaimedResidence res) { - if (mainResidence != null) - mainResidence.setMainResidence(false); - mainResidence = res; - } - - public ClaimedResidence getMainResidence() { - if (mainResidence == null) { - for (Entry one : ResidenceList.entrySet()) { - if (one.getValue() == null) - continue; - if (one.getValue().isMainResidence()) { - mainResidence = one.getValue(); - return mainResidence; - } - } - for (String one : Residence.getRentManager().getRentedLands(this.player.getName())) { - ClaimedResidence res = Residence.getResidenceManager().getByName(one); - if (res != null) { - mainResidence = res; - return mainResidence; - } - } - for (Entry one : ResidenceList.entrySet()) { - if (one.getValue() == null) - continue; - mainResidence = one.getValue(); - return mainResidence; - } - } - return mainResidence; - } - - public void RecalculatePermissions() { - - if (this.player == null) - this.player = Bukkit.getPlayerExact(userName); - - if (this.player == null && ofPlayer == null) - ofPlayer = Residence.getOfflinePlayer(userName); - - getGroup(); - recountMaxRes(); - recountMaxRents(); - recountMaxSubzones(); - } - - public void recountMaxRes() { - updateName(); - if (this.group != null) - this.maxRes = this.group.getMaxZones(); - for (int i = 1; i <= Residence.getConfigManager().getMaxResCount(); i++) { - if (player != null && player.isOnline()) { - if (this.player.hasPermission("residence.max.res." + i)) - this.maxRes = i; - } else if (ofPlayer != null) { - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res." + i, Residence.getConfigManager().getDefaultWorld())) - this.maxRes = i; - } - } - } - - public void recountMaxRents() { - updateName(); - for (int i = 1; i <= Residence.getConfigManager().getMaxRentCount(); i++) { - if (player != null) { - if (this.player.isPermissionSet("residence.max.rents." + i)) - this.maxRents = i; - } else { - if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.rents." + i, Residence.getConfigManager().getDefaultWorld())) - this.maxRents = i; - } - } - - int m = this.getGroup().getMaxRents(); - if (this.maxRents < m) - this.maxRents = m; - } - - public void recountMaxSubzones() { - updateName(); - for (int i = 1; i <= Residence.getConfigManager().getMaxSubzonesCount(); i++) { - if (player != null) { - if (this.player.isPermissionSet("residence.max.subzones." + i)) - this.maxSubzones = i; - } else { - if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzones." + i, Residence.getConfigManager().getDefaultWorld())) - this.maxSubzones = i; - } - } - - int m = this.getGroup().getMaxSubzoneDepth(); - if (this.maxSubzones < m) - this.maxSubzones = m; - } - - public int getMaxRes() { - updateName(); - Residence.getPermissionManager().updateGroupNameForPlayer(this.userName, this.player != null && this.player.isOnline() ? this.player.getPlayer().getLocation() - .getWorld().getName() : Residence.getConfigManager().getDefaultWorld(), true); - recountMaxRes(); - PermissionGroup g = getGroup(); - if (this.maxRes < g.getMaxZones()) { - return g.getMaxZones(); - } - return this.maxRes; - } - - public int getMaxRents() { - recountMaxRents(); - return this.maxRents; - } - - public int getMaxSubzones() { - recountMaxSubzones(); - return this.maxSubzones; - } - - public PermissionGroup getGroup() { - return getGroup(this.player != null ? player.getWorld().getName() : Residence.getConfigManager().getDefaultWorld()); - } - - public PermissionGroup getGroup(String world) { - String name = userName; - if (this.player != null) - name = player.getName(); - - String gp = Residence.getPermissionManager().getGroupNameByPlayer(name, world); - this.group = Residence.getPermissionManager().getGroupByName(gp); - return this.group; - } - - public void recountRes() { - updateName(); - if (this.userName != null) { - ResidenceManager m = Residence.getResidenceManager(); - this.ResidenceList = m.getResidenceMapList(this.userName, true); - } - } - - private void updateName() { - if (this.userName != null) - return; - if (player != null) { - this.userName = player.getName(); - return; - } - if (ofPlayer != null) { - this.userName = ofPlayer.getName(); - return; - } - } - - public void addResidence(ClaimedResidence residence) { - if (residence == null) - return; - this.ResidenceList.put(residence.getName().toLowerCase(), residence); - } - - public void removeResidence(String residence) { - if (residence == null) - return; - residence = residence.toLowerCase(); - this.ResidenceList.remove(residence); - } - - public void renameResidence(String oldResidence, String newResidence) { - if (oldResidence == null) - return; - if (newResidence == null) - return; - oldResidence = oldResidence.toLowerCase(); - - ClaimedResidence res = ResidenceList.get(oldResidence); - if (res != null) { - removeResidence(oldResidence); - ResidenceList.put(newResidence.toLowerCase(), res); - } - } - - public int getResAmount() { - return ResidenceList.size(); - } - - public List getResList() { - List temp = new ArrayList(); - for (Entry one : this.ResidenceList.entrySet()) { - temp.add(one.getValue()); - } - return temp; - } - -} +package com.bekvon.bukkit.residence.containers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.ResidenceManager; +import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; + +public class ResidencePlayer { + + private String userName = null; + private Player player = null; + private OfflinePlayer ofPlayer = null; + + private Map ResidenceList = new HashMap(); + private ClaimedResidence mainResidence = null; + + private PermissionGroup group = null; + + private int maxRes = -1; + private int maxRents = -1; + private int maxSubzones = -1; + + public ResidencePlayer(Player player) { + this.player = player; + updateName(); + RecalculatePermissions(); + } + + public ResidencePlayer(String userName) { + this.userName = userName; + player = Bukkit.getPlayer(userName); + if (player == null) + ofPlayer = Residence.getOfflinePlayer(userName); + if (ofPlayer != null) + this.userName = ofPlayer.getName(); + RecalculatePermissions(); + } + + public void setMainResidence(ClaimedResidence res) { + if (mainResidence != null) + mainResidence.setMainResidence(false); + mainResidence = res; + } + + public ClaimedResidence getMainResidence() { + if (mainResidence == null) { + for (Entry one : ResidenceList.entrySet()) { + if (one.getValue() == null) + continue; + if (one.getValue().isMainResidence()) { + mainResidence = one.getValue(); + return mainResidence; + } + } + for (String one : Residence.getRentManager().getRentedLands(this.player.getName())) { + ClaimedResidence res = Residence.getResidenceManager().getByName(one); + if (res != null) { + mainResidence = res; + return mainResidence; + } + } + for (Entry one : ResidenceList.entrySet()) { + if (one.getValue() == null) + continue; + mainResidence = one.getValue(); + return mainResidence; + } + } + return mainResidence; + } + + public void RecalculatePermissions() { + + if (this.player == null) + this.player = Bukkit.getPlayerExact(userName); + + if (this.player == null && ofPlayer == null) + ofPlayer = Residence.getOfflinePlayer(userName); + + getGroup(); + recountMaxRes(); + recountMaxRents(); + recountMaxSubzones(); + } + + public void recountMaxRes() { + updateName(); + if (this.group != null) + this.maxRes = this.group.getMaxZones(); + for (int i = 1; i <= Residence.getConfigManager().getMaxResCount(); i++) { + if (player != null && player.isOnline()) { + if (this.player.hasPermission("residence.max.res." + i)) + this.maxRes = i; + } else if (ofPlayer != null) { + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res." + i, Residence.getConfigManager().getDefaultWorld())) + this.maxRes = i; + } + } + } + + public void recountMaxRents() { + updateName(); + for (int i = 1; i <= Residence.getConfigManager().getMaxRentCount(); i++) { + if (player != null) { + if (this.player.isPermissionSet("residence.max.rents." + i)) + this.maxRents = i; + } else { + if (ofPlayer != null) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.rents." + i, Residence.getConfigManager().getDefaultWorld())) + this.maxRents = i; + } + } + + int m = this.getGroup().getMaxRents(); + if (this.maxRents < m) + this.maxRents = m; + } + + public void recountMaxSubzones() { + updateName(); + for (int i = 1; i <= Residence.getConfigManager().getMaxSubzonesCount(); i++) { + if (player != null) { + if (this.player.isPermissionSet("residence.max.subzones." + i)) + this.maxSubzones = i; + } else { + if (ofPlayer != null) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzones." + i, Residence.getConfigManager().getDefaultWorld())) + this.maxSubzones = i; + } + } + + int m = this.getGroup().getMaxSubzoneDepth(); + if (this.maxSubzones < m) + this.maxSubzones = m; + } + + public int getMaxRes() { + updateName(); + Residence.getPermissionManager().updateGroupNameForPlayer(this.userName, this.player != null && this.player.isOnline() ? this.player.getPlayer().getLocation() + .getWorld().getName() : Residence.getConfigManager().getDefaultWorld(), true); + recountMaxRes(); + PermissionGroup g = getGroup(); + if (this.maxRes < g.getMaxZones()) { + return g.getMaxZones(); + } + return this.maxRes; + } + + public int getMaxRents() { + recountMaxRents(); + return this.maxRents; + } + + public int getMaxSubzones() { + recountMaxSubzones(); + return this.maxSubzones; + } + + public PermissionGroup getGroup() { + return getGroup(this.player != null ? player.getWorld().getName() : Residence.getConfigManager().getDefaultWorld()); + } + + public PermissionGroup getGroup(String world) { + String name = userName; + if (this.player != null) + name = player.getName(); + + String gp = Residence.getPermissionManager().getGroupNameByPlayer(name, world); + this.group = Residence.getPermissionManager().getGroupByName(gp); + return this.group; + } + + public void recountRes() { + updateName(); + if (this.userName != null) { + ResidenceManager m = Residence.getResidenceManager(); + this.ResidenceList = m.getResidenceMapList(this.userName, true); + } + } + + private void updateName() { + if (this.userName != null) + return; + if (player != null) { + this.userName = player.getName(); + return; + } + if (ofPlayer != null) { + this.userName = ofPlayer.getName(); + return; + } + } + + public void addResidence(ClaimedResidence residence) { + if (residence == null) + return; + this.ResidenceList.put(residence.getName().toLowerCase(), residence); + } + + public void removeResidence(String residence) { + if (residence == null) + return; + residence = residence.toLowerCase(); + this.ResidenceList.remove(residence); + } + + public void renameResidence(String oldResidence, String newResidence) { + if (oldResidence == null) + return; + if (newResidence == null) + return; + oldResidence = oldResidence.toLowerCase(); + + ClaimedResidence res = ResidenceList.get(oldResidence); + if (res != null) { + removeResidence(oldResidence); + ResidenceList.put(newResidence.toLowerCase(), res); + } + } + + public int getResAmount() { + return ResidenceList.size(); + } + + public List getResList() { + List temp = new ArrayList(); + for (Entry one : this.ResidenceList.entrySet()) { + temp.add(one.getValue()); + } + return temp; + } + + public Map getResidenceMap() { + return this.ResidenceList; + } + +} diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 6df8c00aa..dc33c7875 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -23,6 +23,8 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.TreeMap; + import org.bukkit.entity.Player; public class RentManager implements MarketRentInterface { @@ -112,6 +114,32 @@ public List getRents(String playername, boolean onlyHidden, Wo return rentedLands; } + public TreeMap getRentsMap(String playername, boolean onlyHidden, World world) { + TreeMap rentedLands = new TreeMap(); + for (ClaimedResidence res : rentedLand) { + if (res == null) + continue; + + if (!res.isRented()) + continue; + + if (!res.getRentedLand().player.equalsIgnoreCase(playername)) + continue; + + ClaimedResidence topres = res.getTopParent(); + + boolean hidden = topres.getPermissions().has("hidden", false); + + if (onlyHidden && !hidden) + continue; + + if (world != null && !world.getName().equalsIgnoreCase(res.getWorld())) + continue; + rentedLands.put(res.getName(), res); + } + return rentedLands; + } + public List getRentedLandsList(Player player) { return getRentedLandsList(player.getName()); } diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index 336d50e16..02d1aa64b 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -144,6 +144,8 @@ public Material[] toArray() { public Map save() { Map saveMap = new LinkedHashMap(); + if (list.isEmpty()) + return saveMap; saveMap.put("Type", type.toString()); List saveList = new ArrayList(); for (Material mat : list) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 555713312..08fdb15b9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -8,14 +8,12 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityCombustByEntityEvent; import org.bukkit.event.entity.EntityCombustEvent; @@ -1027,7 +1025,6 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (!perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true))) { event.setCancelled(true); - Debug.D("this one"); Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 2b0603c1f..781301c8b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1303,24 +1303,43 @@ public Map save() { root.put("MainResidence", mainRes); if (createTime != 0L) root.put("CreatedOn", createTime); - root.put("EnterMessage", enterMessage); - root.put("LeaveMessage", leaveMessage); - root.put("ShopDescription", ShopDesc); - root.put("StoredMoney", bank.getStoredMoney()); - root.put("BlockSellPrice", BlockSellPrice); - root.put("ChatPrefix", ChatPrefix); - root.put("ChannelColor", ChannelColor.name()); - root.put("BlackList", blacklist.save()); - root.put("IgnoreList", ignorelist.save()); + + PermissionGroup group = this.getOwnerGroup(); + + if (enterMessage != null && group != null && !enterMessage.equals(group.getDefaultEnterMessage())) + root.put("EnterMessage", enterMessage); + if (enterMessage != null && group != null && !leaveMessage.equals(group.getDefaultLeaveMessage())) + root.put("LeaveMessage", leaveMessage); + if (ShopDesc != null) + root.put("ShopDescription", ShopDesc); + if (bank.getStoredMoney() != 0) + root.put("StoredMoney", bank.getStoredMoney()); + if (BlockSellPrice != 0D) + root.put("BlockSellPrice", BlockSellPrice); + + if (!ChatPrefix.equals("")) + root.put("ChatPrefix", ChatPrefix); + if (!ChannelColor.name().equals(Residence.getConfigManager().getChatColor().name()) && !ChannelColor.name().equals("WHITE")) { + root.put("ChannelColor", ChannelColor.name()); + } + + Map map = blacklist.save(); + if (!map.isEmpty()) + root.put("BlackList", map); + map = ignorelist.save(); + if (!map.isEmpty()) + root.put("IgnoreList", map); for (Entry entry : areas.entrySet()) { areamap.put(entry.getKey(), entry.getValue().save()); } + root.put("Areas", areamap); Map subzonemap = new HashMap<>(); for (Entry sz : subzones.entrySet()) { subzonemap.put(sz.getKey(), sz.getValue().save()); } - root.put("Subzones", subzonemap); + if (!subzonemap.isEmpty()) + root.put("Subzones", subzonemap); root.put("Permissions", perms.save()); if (!this.cmdBlackList.isEmpty()) @@ -1359,7 +1378,7 @@ private static double convertDouble(String dString) { } @SuppressWarnings("unchecked") - public static ClaimedResidence load(Map root, ClaimedResidence parent, Residence plugin) throws Exception { + public static ClaimedResidence load(String worldName, Map root, ClaimedResidence parent, Residence plugin) throws Exception { ClaimedResidence res = new ClaimedResidence(plugin); if (root == null) throw new Exception("Null residence!"); @@ -1372,9 +1391,6 @@ public static ClaimedResidence load(Map root, ClaimedResidence p else res.createTime = System.currentTimeMillis(); - res.enterMessage = (String) root.get("EnterMessage"); - res.leaveMessage = (String) root.get("LeaveMessage"); - if (root.containsKey("ShopDescription")) res.setShopDesc((String) root.get("ShopDescription")); @@ -1387,7 +1403,7 @@ public static ClaimedResidence load(Map root, ClaimedResidence p res.ignorelist = ResidenceItemList.load(res, (Map) root.get("IgnoreList")); Map areamap = (Map) root.get("Areas"); - res.perms = ResidencePermissions.load(res, (Map) root.get("Permissions")); + res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); if (res.getPermissions().ownerLastKnownName == null) return null; @@ -1398,7 +1414,7 @@ public static ClaimedResidence load(Map root, ClaimedResidence p if (root.containsKey("BlockSellPrice")) res.BlockSellPrice = (Double) root.get("BlockSellPrice"); else { - res.BlockSellPrice = res.getOwnerGroup().getSellPerBlock(); + res.BlockSellPrice = 0D; } World world = Residence.getServ().getWorld(res.perms.getWorld()); @@ -1408,22 +1424,36 @@ public static ClaimedResidence load(Map root, ClaimedResidence p res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); } - Map subzonemap = (Map) root.get("Subzones"); - for (Entry map : subzonemap.entrySet()) { - ClaimedResidence subres = ClaimedResidence.load((Map) map.getValue(), res, plugin); + if (root.containsKey("Subzones")) { + Map subzonemap = (Map) root.get("Subzones"); + for (Entry map : subzonemap.entrySet()) { + ClaimedResidence subres = ClaimedResidence.load(worldName, (Map) map.getValue(), res, plugin); - if (subres == null) - continue; + if (subres == null) + continue; - if (subres.getResidenceName() == null) - subres.setName(map.getKey()); + if (subres.getResidenceName() == null) + subres.setName(map.getKey()); - if (Residence.getConfigManager().flagsInherit()) - subres.getPermissions().setParent(res.getPermissions()); + if (Residence.getConfigManager().flagsInherit()) + subres.getPermissions().setParent(res.getPermissions()); - res.subzones.put(map.getKey().toLowerCase(), subres); + res.subzones.put(map.getKey().toLowerCase(), subres); + } } + PermissionGroup group = res.getOwnerGroup(); + + if (root.containsKey("EnterMessage")) + res.enterMessage = (String) root.get("EnterMessage"); + else if (group != null) + res.enterMessage = res.getOwnerGroup().getDefaultEnterMessage(); + + if (root.containsKey("LeaveMessage")) + res.leaveMessage = (String) root.get("LeaveMessage"); + else if (group != null) + res.leaveMessage = res.getOwnerGroup().getDefaultLeaveMessage(); + res.parent = parent; Map tploc = (Map) root.get("TPLoc"); if (tploc != null) { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index f2e6915e0..c44bef017 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -11,6 +11,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.UUID; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -29,11 +30,19 @@ public class FlagPermissions { protected static ArrayList validPlayerFlags = new ArrayList<>(); protected static ArrayList validAreaFlags = new ArrayList<>(); final static Map matUseFlagList = new EnumMap<>(Material.class); - protected Map cachedPlayerNameUUIDs; - protected Map> playerFlags; - protected Map> groupFlags; + protected Map cachedPlayerNameUUIDs = new HashMap(); + protected Map> playerFlags = new HashMap>(); + protected Map> groupFlags = new HashMap>(); protected Map cuboidFlags = new HashMap(); protected FlagPermissions parent; + protected static HashMap> validFlagGroups = new HashMap<>(); + + public FlagPermissions() { + cuboidFlags = Collections.synchronizedMap(new HashMap()); + playerFlags = Collections.synchronizedMap(new HashMap>()); + groupFlags = Collections.synchronizedMap(new HashMap>()); + cachedPlayerNameUUIDs = Collections.synchronizedMap(new HashMap()); + } public static enum FlagCombo { OnlyTrue, OnlyFalse, TrueOrNone, FalseOrNone @@ -101,8 +110,6 @@ public static void addResidenceOnlyFlag(String flag) { } } - protected static HashMap> validFlagGroups = new HashMap<>(); - public static void addFlagToFlagGroup(String group, String flag) { if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { if (!validFlagGroups.containsKey(group)) { @@ -249,58 +256,54 @@ public static FlagPermissions parseFromConfigNodeAsList(String node, String stag return list; } - public FlagPermissions() { - cuboidFlags = Collections.synchronizedMap(new HashMap()); - playerFlags = Collections.synchronizedMap(new HashMap>()); - groupFlags = Collections.synchronizedMap(new HashMap>()); - cachedPlayerNameUUIDs = Collections.synchronizedMap(new HashMap()); - } - protected Map getPlayerFlags(String player, boolean allowCreate)//this function works with uuid in string format as well, instead of player name { - //player = player.toLowerCase(); <- Why its toLowerCase when its can be UUID when capitalization is required - String uuids; Map flags = null; if (!Residence.getConfigManager().isOfflineMode()) { + UUID uuid = null; if (player.length() == 36) { - uuids = player; - String resolvedName = Residence.getPlayerName(uuids); + try { + uuid = UUID.fromString(player); + } catch (Exception e) { + + } + String resolvedName = Residence.getPlayerName(uuid); if (resolvedName != null) player = resolvedName; - else if (cachedPlayerNameUUIDs.containsKey(player)) - player = cachedPlayerNameUUIDs.get(player); + else if (cachedPlayerNameUUIDs.containsKey(uuid)) + player = cachedPlayerNameUUIDs.get(uuid); } else - uuids = Residence.getPlayerUUIDString(player); + uuid = Residence.getPlayerUUID(player); - if (uuids == null) { - Set> values = cachedPlayerNameUUIDs.entrySet(); - for (Entry value : values) { + if (uuid == null) { + Set> values = cachedPlayerNameUUIDs.entrySet(); + for (Entry value : values) { if (value.getValue().equals(player)) { - uuids = value.getKey(); + uuid = value.getKey(); break; } } } - if (uuids != null) - flags = playerFlags.get(uuids); + if (uuid != null) + flags = playerFlags.get(uuid.toString()); if (flags == null) { flags = playerFlags.get(player); - if (uuids != null && flags != null) { + if (uuid != null && flags != null) { flags = playerFlags.remove(player); - playerFlags.put(uuids, flags); - cachedPlayerNameUUIDs.put(uuids, player); + playerFlags.put(uuid.toString(), flags); + cachedPlayerNameUUIDs.put(uuid, player); } } else - cachedPlayerNameUUIDs.put(uuids, player); + cachedPlayerNameUUIDs.put(uuid, player); if (flags == null && allowCreate) { - if (uuids != null) { + if (uuid != null) { flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(uuids, flags); - cachedPlayerNameUUIDs.put(uuids, player); + playerFlags.put(uuid.toString(), flags); + cachedPlayerNameUUIDs.put(uuid, player); } else { flags = Collections.synchronizedMap(new HashMap()); playerFlags.put(player, flags); @@ -308,8 +311,14 @@ else if (cachedPlayerNameUUIDs.containsKey(player)) } } else { for (Entry> one : playerFlags.entrySet()) { - if (!one.getKey().equals(player)) + if (!one.getKey().equalsIgnoreCase(player)) continue; + + // Updating players name to correct capitalization + if (!one.getKey().equals(player)) { + Map r = playerFlags.remove(one.getKey()); + playerFlags.put(player, r); + } flags = one.getValue(); break; } @@ -343,18 +352,19 @@ public void removeAllPlayerFlags(String player) {//this function works with uuid // player = player.toLowerCase(); if (!Residence.getConfigManager().isOfflineMode()) { - String uuids = Residence.getPlayerUUIDString(player); - if (uuids == null) - for (Entry entry : cachedPlayerNameUUIDs.entrySet()) + UUID uuid = Residence.getPlayerUUID(player); + if (uuid == null) + for (Entry entry : cachedPlayerNameUUIDs.entrySet()) if (entry.getValue().equals(player)) { - uuids = entry.getKey(); + uuid = entry.getKey(); break; } - if (uuids != null) { - playerFlags.remove(uuids); - cachedPlayerNameUUIDs.remove(uuids); + if (uuid != null) { + playerFlags.remove(uuid.toString()); + cachedPlayerNameUUIDs.remove(uuid); } + return; } playerFlags.remove(player); cachedPlayerNameUUIDs.remove(player); @@ -548,13 +558,35 @@ public boolean checkValidFlag(String flag, boolean globalflag) { public Map save() { Map root = new LinkedHashMap<>(); - root.put("LastKnownPlayerNames", cachedPlayerNameUUIDs); +// root.put("LastKnownPlayerNames", cachedPlayerNameUUIDs); + + // Putting uuid's to main cache for later save + Residence.addCachedPlayerNameUUIDs(cachedPlayerNameUUIDs); + root.put("PlayerFlags", playerFlags); - root.put("GroupFlags", groupFlags); - root.put("AreaFlags", cuboidFlags); + if (!groupFlags.isEmpty()) + root.put("GroupFlags", groupFlags); + + if (!isDefaultFlags(cuboidFlags)) + root.put("AreaFlags", cuboidFlags); + return root; } + private static boolean isDefaultFlags(Map flags) { + FlagPermissions gf = Residence.getConfigManager().getGlobalResidenceDefaultFlags(); + if (gf != null) { + Map dFlags = gf.getFlags(); + if (dFlags.size() != flags.size()) + return false; + for (Entry one : dFlags.entrySet()) { + if (!flags.containsKey(one.getKey())) + return false; + } + } + return true; + } + public static FlagPermissions load(Map root) throws Exception { FlagPermissions newperms = new FlagPermissions(); return FlagPermissions.load(root, newperms); @@ -564,9 +596,31 @@ public static FlagPermissions load(Map root) throws Exception { protected static FlagPermissions load(Map root, FlagPermissions newperms) throws Exception { if (root.containsKey("LastKnownPlayerNames")) newperms.cachedPlayerNameUUIDs = (Map) root.get("LastKnownPlayerNames"); - newperms.playerFlags = (Map) root.get("PlayerFlags"); - newperms.groupFlags = (Map) root.get("GroupFlags"); - newperms.cuboidFlags = (Map) root.get("AreaFlags"); + + if (root.containsKey("PlayerFlags")) + newperms.playerFlags = (Map) root.get("PlayerFlags"); + + for (Entry> one : newperms.playerFlags.entrySet()) { + if (one.getKey().length() != 32) + continue; + + try { + UUID uuid = UUID.fromString(one.getKey()); + String name = Residence.getCachedPlayerNameUUIDs().get(uuid); + newperms.cachedPlayerNameUUIDs.put(uuid, name); + } catch (Exception e) { + continue; + } + + } + + if (root.containsKey("GroupFlags")) + newperms.groupFlags = (Map) root.get("GroupFlags"); + + if (root.containsKey("AreaFlags")) + newperms.cuboidFlags = (Map) root.get("AreaFlags"); + else + newperms.cuboidFlags = Residence.getConfigManager().getGlobalResidenceDefaultFlags().getFlags(); String ownerName = null; String uuid = null; @@ -629,8 +683,13 @@ else if (OwnerName != null && !OwnerName.equals(keyset)) // } } else { String pname = Residence.getPlayerName(keyset); - if (pname != null) - this.cachedPlayerNameUUIDs.put(keyset, pname); + if (pname != null) { + try { + UUID uuid = UUID.fromString(keyset); + this.cachedPlayerNameUUIDs.put(uuid, pname); + } catch (Exception e) { + } + } } } for (String one : Toremove) { @@ -638,8 +697,13 @@ else if (OwnerName != null && !OwnerName.equals(keyset)) } for (Entry convert : converts.entrySet()) { playerFlags.put(convert.getValue(), playerFlags.remove(convert.getKey())); - cachedPlayerNameUUIDs.put(convert.getValue(), convert.getKey()); + try { + UUID uuid = UUID.fromString(convert.getValue()); + cachedPlayerNameUUIDs.put(uuid, convert.getKey()); + } catch (Exception e) { + } } + } public String listFlags() { @@ -735,6 +799,8 @@ public String listPlayerFlags(String player) { protected String printPlayerFlags(Map flags) { StringBuilder sbuild = new StringBuilder(); + if (flags == null) + return "none"; Set> set = flags.entrySet(); synchronized (flags) { Iterator> it = set.iterator(); @@ -775,7 +841,11 @@ public String listOtherPlayersFlags(String player) { if (next.length() == 36) { String resolvedName = Residence.getPlayerName(next); if (resolvedName != null) { - this.cachedPlayerNameUUIDs.put(next, resolvedName); + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { + } next = resolvedName; } else if (this.cachedPlayerNameUUIDs.containsKey(next)) next = this.cachedPlayerNameUUIDs.get(next); @@ -802,7 +872,11 @@ public String listPlayersFlags() { if (next.length() == 36) { String resolvedName = Residence.getPlayerName(next); if (resolvedName != null) { - this.cachedPlayerNameUUIDs.put(next, resolvedName); + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { + } next = resolvedName; } else if (this.cachedPlayerNameUUIDs.containsKey(next)) next = this.cachedPlayerNameUUIDs.get(next); @@ -837,7 +911,11 @@ public String listPlayersFlagsRaw(String player, String text) { if (next.length() == 36) { String resolvedName = Residence.getPlayerName(next); if (resolvedName != null) { - this.cachedPlayerNameUUIDs.put(next, resolvedName); + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { + } next = resolvedName; } else if (this.cachedPlayerNameUUIDs.containsKey(next)) next = this.cachedPlayerNameUUIDs.get(next); @@ -892,7 +970,11 @@ public String listOtherPlayersFlagsRaw(String text, String player) { if (next.length() == 36) { String resolvedName = Residence.getPlayerName(next); if (resolvedName != null) { - this.cachedPlayerNameUUIDs.put(next, resolvedName); + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { + } next = resolvedName; } else if (this.cachedPlayerNameUUIDs.containsKey(next)) next = this.cachedPlayerNameUUIDs.get(next); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index d0c224a55..2020371e8 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -1,201 +1,223 @@ -package com.bekvon.bukkit.residence.protection; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.concurrent.ConcurrentHashMap; - -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.api.ResidencePlayerInterface; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; - -public class PlayerManager implements ResidencePlayerInterface { - private ConcurrentHashMap players = new ConcurrentHashMap(); - - public PlayerManager() { - } - - public void playerJoin(Player player) { - ResidencePlayer resPlayer = players.get(player.getName().toLowerCase()); - if (resPlayer == null) { - resPlayer = new ResidencePlayer(player); - resPlayer.recountRes(); - players.put(player.getName().toLowerCase(), resPlayer); - } else - resPlayer.RecalculatePermissions(); - return; - } - - public ResidencePlayer playerJoin(String player) { - if (!players.containsKey(player.toLowerCase())) { - ResidencePlayer resPlayer = new ResidencePlayer(player); - resPlayer.recountRes(); - players.put(player.toLowerCase(), resPlayer); - return resPlayer; - } - return null; - } - - public void fillList() { - players.clear(); - for (Player player : Bukkit.getOnlinePlayers()) { - playerJoin(player); - } - } - - @Override - public ArrayList getResidenceList(String player) { - ArrayList temp = new ArrayList(); - playerJoin(player); - ResidencePlayer resPlayer = players.get(player.toLowerCase()); - if (resPlayer != null) { - for (ClaimedResidence one : resPlayer.getResList()) { - temp.add(one.getName()); - } - return temp; - } - return temp; - } - - @Override - public ArrayList getResidenceList(String player, boolean showhidden) { - return getResidenceList(player, showhidden, false); - } - - public ArrayList getResidenceList(String player, boolean showhidden, boolean onlyHidden) { - ArrayList temp = new ArrayList(); - playerJoin(player); - ResidencePlayer resPlayer = players.get(player.toLowerCase()); - if (resPlayer == null) - return temp; - for (ClaimedResidence one : resPlayer.getResList()) { - boolean hidden = one.getPermissions().has("hidden", false); - if (!showhidden && hidden) - continue; - - if (onlyHidden && !hidden) - continue; - - temp.add(Residence.msg(lm.Residence_List, "", one.getName(), one.getWorld()) + - (hidden ? Residence.msg(lm.Residence_Hidden) : "")); - } - Collections.sort(temp, String.CASE_INSENSITIVE_ORDER); - return temp; - } - - public ArrayList getResidences(String player, boolean showhidden) { - return getResidences(player, showhidden, false); - } - - public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden) { - return getResidences(player, showhidden, onlyHidden, null); - } - - public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden, World world) { - ArrayList temp = new ArrayList(); - playerJoin(player); - ResidencePlayer resPlayer = players.get(player.toLowerCase()); - if (resPlayer == null) - return temp; - for (ClaimedResidence one : resPlayer.getResList()) { - boolean hidden = one.getPermissions().has("hidden", false); - if (!showhidden && hidden) - continue; - if (onlyHidden && !hidden) - continue; - if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) - continue; - temp.add(one); - } - return temp; - } - - @Override - public PermissionGroup getGroup(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); - if (resPlayer != null) { - return resPlayer.getGroup(); - } - return null; - } - - @Override - public int getMaxResidences(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); - if (resPlayer != null) { - return resPlayer.getMaxRes(); - } - return -1; - } - - @Override - public int getMaxSubzones(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); - if (resPlayer != null) { - return resPlayer.getMaxSubzones(); - } - return -1; - } - - @Override - public int getMaxRents(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); - if (resPlayer != null) { - return resPlayer.getMaxRents(); - } - return -1; - } - - public ResidencePlayer getResidencePlayer(Player player) { - return getResidencePlayer(player.getName()); - } - - @Override - public ResidencePlayer getResidencePlayer(String player) { - ResidencePlayer resPlayer = null; - if (players.containsKey(player.toLowerCase())) { - resPlayer = players.get(player.toLowerCase()); - } else { - resPlayer = playerJoin(player); - } - return resPlayer; - } - - public void renameResidence(String player, String oldName, String newName) { - ResidencePlayer resPlayer = getResidencePlayer(player); - if (resPlayer != null) { - resPlayer.renameResidence(oldName, newName); - } - return; - } - - public void addResidence(String player, ClaimedResidence residence) { - ResidencePlayer resPlayer = getResidencePlayer(player); - if (resPlayer != null) { - resPlayer.addResidence(residence); - } - return; - } - - public void removeResFromPlayer(OfflinePlayer player, String residence) { - removeResFromPlayer(player.getName(), residence); - } - - public void removeResFromPlayer(Player player, String residence) { - removeResFromPlayer(player.getName(), residence); - } - - public void removeResFromPlayer(String player, String residence) { - ResidencePlayer resPlayer = players.get(player.toLowerCase()); - if (resPlayer != null) { - resPlayer.removeResidence(residence); - } - return; - } -} +package com.bekvon.bukkit.residence.protection; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Map.Entry; +import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.ResidencePlayerInterface; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; + +public class PlayerManager implements ResidencePlayerInterface { + private ConcurrentHashMap players = new ConcurrentHashMap(); + + public PlayerManager() { + } + + public void playerJoin(Player player) { + ResidencePlayer resPlayer = players.get(player.getName().toLowerCase()); + if (resPlayer == null) { + resPlayer = new ResidencePlayer(player); + resPlayer.recountRes(); + players.put(player.getName().toLowerCase(), resPlayer); + } else + resPlayer.RecalculatePermissions(); + return; + } + + public ResidencePlayer playerJoin(String player) { + if (!players.containsKey(player.toLowerCase())) { + ResidencePlayer resPlayer = new ResidencePlayer(player); + resPlayer.recountRes(); + players.put(player.toLowerCase(), resPlayer); + return resPlayer; + } + return null; + } + + public void fillList() { + players.clear(); + for (Player player : Bukkit.getOnlinePlayers()) { + playerJoin(player); + } + } + + @Override + public ArrayList getResidenceList(String player) { + ArrayList temp = new ArrayList(); + playerJoin(player); + ResidencePlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer != null) { + for (ClaimedResidence one : resPlayer.getResList()) { + temp.add(one.getName()); + } + return temp; + } + return temp; + } + + @Override + public ArrayList getResidenceList(String player, boolean showhidden) { + return getResidenceList(player, showhidden, false); + } + + public ArrayList getResidenceList(String player, boolean showhidden, boolean onlyHidden) { + ArrayList temp = new ArrayList(); + playerJoin(player); + ResidencePlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer == null) + return temp; + for (ClaimedResidence one : resPlayer.getResList()) { + boolean hidden = one.getPermissions().has("hidden", false); + if (!showhidden && hidden) + continue; + + if (onlyHidden && !hidden) + continue; + + temp.add(Residence.msg(lm.Residence_List, "", one.getName(), one.getWorld()) + + (hidden ? Residence.msg(lm.Residence_Hidden) : "")); + } + Collections.sort(temp, String.CASE_INSENSITIVE_ORDER); + return temp; + } + + public ArrayList getResidences(String player, boolean showhidden) { + return getResidences(player, showhidden, false); + } + + public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden) { + return getResidences(player, showhidden, onlyHidden, null); + } + + public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden, World world) { + ArrayList temp = new ArrayList(); + playerJoin(player); + ResidencePlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer == null) + return temp; + for (ClaimedResidence one : resPlayer.getResList()) { + boolean hidden = one.getPermissions().has("hidden", false); + if (!showhidden && hidden) + continue; + if (onlyHidden && !hidden) + continue; + if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) + continue; + temp.add(one); + } + return temp; + } + + public TreeMap getResidencesMap(String player, boolean showhidden, boolean onlyHidden, World world) { + TreeMap temp = new TreeMap(); + playerJoin(player); + ResidencePlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer == null) + return temp; + for (Entry one : resPlayer.getResidenceMap().entrySet()) { + boolean hidden = one.getValue().getPermissions().has(Flags.hidden, false); + if (!showhidden && hidden) + continue; + if (onlyHidden && !hidden) + continue; + if (world != null && !world.getName().equalsIgnoreCase(one.getValue().getWorld())) + continue; + temp.put(one.getKey(), one.getValue()); + } + return temp; + } + + @Override + public PermissionGroup getGroup(String player) { + ResidencePlayer resPlayer = getResidencePlayer(player); + if (resPlayer != null) { + return resPlayer.getGroup(); + } + return null; + } + + @Override + public int getMaxResidences(String player) { + ResidencePlayer resPlayer = getResidencePlayer(player); + if (resPlayer != null) { + return resPlayer.getMaxRes(); + } + return -1; + } + + @Override + public int getMaxSubzones(String player) { + ResidencePlayer resPlayer = getResidencePlayer(player); + if (resPlayer != null) { + return resPlayer.getMaxSubzones(); + } + return -1; + } + + @Override + public int getMaxRents(String player) { + ResidencePlayer resPlayer = getResidencePlayer(player); + if (resPlayer != null) { + return resPlayer.getMaxRents(); + } + return -1; + } + + public ResidencePlayer getResidencePlayer(Player player) { + return getResidencePlayer(player.getName()); + } + + @Override + public ResidencePlayer getResidencePlayer(String player) { + ResidencePlayer resPlayer = null; + if (players.containsKey(player.toLowerCase())) { + resPlayer = players.get(player.toLowerCase()); + } else { + resPlayer = playerJoin(player); + } + return resPlayer; + } + + public void renameResidence(String player, String oldName, String newName) { + ResidencePlayer resPlayer = getResidencePlayer(player); + if (resPlayer != null) { + resPlayer.renameResidence(oldName, newName); + } + return; + } + + public void addResidence(String player, ClaimedResidence residence) { + ResidencePlayer resPlayer = getResidencePlayer(player); + if (resPlayer != null) { + resPlayer.addResidence(residence); + } + return; + } + + public void removeResFromPlayer(OfflinePlayer player, String residence) { + removeResFromPlayer(player.getName(), residence); + } + + public void removeResFromPlayer(Player player, String residence) { + removeResFromPlayer(player.getName(), residence); + } + + public void removeResFromPlayer(String player, String residence) { + ResidencePlayer resPlayer = players.get(player.toLowerCase()); + if (resPlayer != null) { + resPlayer.removeResidence(residence); + } + return; + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index b181187cd..0114a70b4 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -323,8 +323,8 @@ public void listResidences(CommandSender sender, String targetplayer, int page, } else if (sender.getName().equalsIgnoreCase(targetplayer)) showhidden = true; boolean hidden = showhidden; - ArrayList ownedResidences = Residence.getPlayerManager().getResidences(targetplayer, hidden, onlyHidden, world); - ownedResidences.addAll(Residence.getRentManager().getRents(targetplayer, onlyHidden, world)); + TreeMap ownedResidences = Residence.getPlayerManager().getResidencesMap(targetplayer, hidden, onlyHidden, world); + ownedResidences.putAll(Residence.getRentManager().getRentsMap(targetplayer, onlyHidden, world)); Residence.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin); } @@ -333,7 +333,7 @@ public void listAllResidences(CommandSender sender, int page) { } public void listAllResidences(CommandSender sender, int page, boolean showhidden, World world) { - List list = getFromAllResidences(showhidden, false, world); + TreeMap list = getFromAllResidencesMap(showhidden, false, world); Residence.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); } @@ -342,7 +342,7 @@ public void listAllResidences(CommandSender sender, int page, boolean showhidden } public void listAllResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { - List list = getFromAllResidences(showhidden, onlyHidden, null); + TreeMap list = getFromAllResidencesMap(showhidden, onlyHidden, null); Residence.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); } @@ -398,6 +398,21 @@ public ArrayList getFromAllResidences(boolean showhidden, bool return list; } + public TreeMap getFromAllResidencesMap(boolean showhidden, boolean onlyHidden, World world) { + TreeMap list = new TreeMap(); + for (Entry res : residences.entrySet()) { + boolean hidden = res.getValue().getPermissions().has("hidden", false); + if (onlyHidden && !hidden) + continue; + if (world != null && !world.getName().equalsIgnoreCase(res.getValue().getWorld())) + continue; + if ((showhidden) || (!showhidden && !hidden)) { + list.put(res.getKey(), res.getValue()); + } + } + return list; + } + private void getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, String parentzone, String resname, ClaimedResidence res, ArrayList list, boolean formattedOutput, boolean onlyHidden) { boolean hidden = res.getPermissions().has("hidden", false); @@ -463,14 +478,14 @@ public void removeResidence(Player player, String name, boolean resadmin) { return; } } - + if (player != null && !resadmin) { if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin && res.getParent() != null && !res.getParent().isOwner(player)) { Residence.msg(player, lm.General_NoPermission); return; } } - + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); Residence.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) @@ -841,7 +856,7 @@ public Map> loadMap(String worldName, Map y++; try { @SuppressWarnings("unchecked") - ClaimedResidence residence = ClaimedResidence.load((Map) res.getValue(), null, plugin); + ClaimedResidence residence = ClaimedResidence.load(worldName, (Map) res.getValue(), null, plugin); if (residence == null) continue; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 3911f2b17..e895c3b61 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -494,11 +494,11 @@ public Map save() { Map root = super.save(); root.put("OwnerUUID", ownerUUID.toString()); root.put("OwnerLastKnownName", ownerLastKnownName); - root.put("World", world); +// root.put("World", world); return root; } - public static ResidencePermissions load(ClaimedResidence res, Map root) throws Exception { + public static ResidencePermissions load(String worldName, ClaimedResidence res, Map root) throws Exception { ResidencePermissions newperms = new ResidencePermissions(res); //newperms.owner = (String) root.get("Owner"); if (root.containsKey("OwnerUUID")) { @@ -536,8 +536,9 @@ public static ResidencePermissions load(ClaimedResidence res, Map lines, in Residence.msg(sender, lm.InformationPage_NoNextPage); } - public void printListInfo(CommandSender sender, String targetPlayer, List lines, int page, boolean resadmin) { - if (targetPlayer != null) - lines = Residence.getSortingManager().sortResidences(lines); + public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, int page, boolean resadmin) { + int perPage = 20; if (sender instanceof Player) perPage = 6; int start = (page - 1) * perPage; int end = start + perPage; - int pagecount = (int) Math.ceil((double) lines.size() / (double) perPage); + int pagecount = (int) Math.ceil((double) ownedResidences.size() / (double) perPage); if (page == -1) { start = 0; - end = lines.size(); + end = ownedResidences.size(); page = 1; pagecount = 1; } @@ -79,29 +81,34 @@ public void printListInfo(CommandSender sender, String targetPlayer, List linesForConsole = new ArrayList(); - int i = start - 1; - for (ClaimedResidence res : lines) { - i++; -// if (lines.size() <= i) -// break; + int y = 0; + + for (Entry resT : ownedResidences.entrySet()) { + y++; + if (ownedResidences.size() < y) + break; -// ClaimedResidence res = lines.get(i); + if (y <= start) + continue; + if (y > end) + break; + + ClaimedResidence res = resT.getValue(); StringBuilder StringB = new StringBuilder(); StringB.append(" " + Residence.msg(lm.General_Owner, res.getOwner())); String worldInfo = ""; @@ -148,7 +155,7 @@ public void printListInfo(CommandSender sender, String targetPlayer, List lines, final int start, final boolean resadmin) { + private void printListWithDelay(final CommandSender sender, final TreeMap ownedResidences, final int start, final boolean resadmin) { - for (int i = 0; i < 100; i++) { - if (lines.size() <= i) + int i = 0; + for (Entry resT : ownedResidences.entrySet()) { + i++; + if (i >= 100) + break; + if (ownedResidences.size() <= i) break; - ClaimedResidence res = lines.get(i); + ClaimedResidence res = resT.getValue(); StringBuilder StringB = new StringBuilder(); StringB.append(" " + Residence.msg(lm.General_Owner, res.getOwner())); String worldInfo = ""; @@ -217,19 +228,22 @@ private void printListWithDelay(final CommandSender sender, final List tlines = new ArrayList(); - - if (lines.size() > 100) - tlines.addAll(lines.subList(100, lines.size())); + if (ownedResidences.size() > 100) { + i = 0; + while (i < 100) { + i++; + ownedResidences.remove(ownedResidences.firstKey()); + } + } - if (tlines.isEmpty()) { + if (ownedResidences.isEmpty()) { return; } Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { - printListWithDelay(sender, tlines, start + 100, resadmin); + printListWithDelay(sender, ownedResidences, start + 100, resadmin); return; } }, 5L); diff --git a/src/com/bekvon/bukkit/residence/utils/Sorting.java b/src/com/bekvon/bukkit/residence/utils/Sorting.java index b2de0bfed..191ace323 100644 --- a/src/com/bekvon/bukkit/residence/utils/Sorting.java +++ b/src/com/bekvon/bukkit/residence/utils/Sorting.java @@ -1,193 +1,187 @@ -package com.bekvon.bukkit.residence.utils; - -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class Sorting { - - public Map sortByValueASC(Map unsortMap) { - - // Convert Map to List - List> list = new LinkedList>(unsortMap.entrySet()); - - // Sort list with comparator, to compare the Map values - Collections.sort(list, new Comparator>() { - @Override - public int compare(Map.Entry o1, Map.Entry o2) { - return (o1.getValue()).compareTo(o2.getValue()); - } - }); - - // Convert sorted map back to a Map - Map sortedMap = new LinkedHashMap(); - for (Iterator> it = list.iterator(); it.hasNext();) { - Map.Entry entry = it.next(); - sortedMap.put(entry.getKey(), entry.getValue()); - } - return sortedMap; - } - - public Map sortByValueDESC(Map unsortMap) { - - // Convert Map to List - List> list = new LinkedList>(unsortMap.entrySet()); - - // Sort list with comparator, to compare the Map values - Collections.sort(list, new Comparator>() { - @Override - public int compare(Map.Entry o1, Map.Entry o2) { - return (o2.getValue()).compareTo(o1.getValue()); - } - }); - - // Convert sorted map back to a Map - Map sortedMap = new LinkedHashMap(); - for (Iterator> it = list.iterator(); it.hasNext();) { - Map.Entry entry = it.next(); - sortedMap.put(entry.getKey(), entry.getValue()); - } - return sortedMap; - } - - public Map sortByKeyDESC(Map unsortMap) { - - // Convert Map to List - List> list = new LinkedList>(unsortMap.entrySet()); - - // Sort list with comparator, to compare the Map values - Collections.sort(list, new Comparator>() { - @Override - public int compare(Map.Entry o1, Map.Entry o2) { - return (o2.getKey()).compareTo(o1.getKey()); - } - }); - - // Convert sorted map back to a Map - Map sortedMap = new LinkedHashMap(); - for (Iterator> it = list.iterator(); it.hasNext();) { - Map.Entry entry = it.next(); - sortedMap.put(entry.getKey(), entry.getValue()); - } - return sortedMap; - } - - public List sortResidences(List residences) { - - Map map = new HashMap(); - - for (ClaimedResidence one : residences) { - if (one == null) - continue; - if (one.getName() == null) - continue; - map.put(one.getName().toLowerCase(), one); - } - - map = sortByKeyASC(map); - - residences.clear(); - - for (Entry one : map.entrySet()) { - residences.add((ClaimedResidence) one.getValue()); - } - - return residences; - } - - public Map sortByKeyASC(Map unsortMap) { - - // Convert Map to List - List> list = new LinkedList>(unsortMap.entrySet()); - - // Sort list with comparator, to compare the Map values - Collections.sort(list, new Comparator>() { - @Override - public int compare(Map.Entry o1, Map.Entry o2) { - return (o1.getKey()).compareTo(o2.getKey()); - } - }); - - // Convert sorted map back to a Map - Map sortedMap = new LinkedHashMap(); - for (Iterator> it = list.iterator(); it.hasNext();) { - Map.Entry entry = it.next(); - sortedMap.put(entry.getKey(), entry.getValue()); - } - return sortedMap; - } - - public Map sortStringByKeyASC(Map unsortMap) { - - // Convert Map to List - List> list = new LinkedList>(unsortMap.entrySet()); - - // Sort list with comparator, to compare the Map values - Collections.sort(list, new Comparator>() { - @Override - public int compare(Map.Entry o1, Map.Entry o2) { - return (o1.getKey()).compareTo(o2.getKey()); - } - }); - - // Convert sorted map back to a Map - Map sortedMap = new LinkedHashMap(); - for (Iterator> it = list.iterator(); it.hasNext();) { - Map.Entry entry = it.next(); - sortedMap.put(entry.getKey(), entry.getValue()); - } - return sortedMap; - } - - public Map sortDoubleDESC(Map unsortMap) { - - // Convert Map to List - List> list = new LinkedList>(unsortMap.entrySet()); - - // Sort list with comparator, to compare the Map values - Collections.sort(list, new Comparator>() { - @Override - public int compare(Map.Entry o1, Map.Entry o2) { - return (o2.getValue()).compareTo(o1.getValue()); - } - }); - - // Convert sorted map back to a Map - Map sortedMap = new LinkedHashMap(); - for (Iterator> it = list.iterator(); it.hasNext();) { - Map.Entry entry = it.next(); - sortedMap.put(entry.getKey(), entry.getValue()); - } - return sortedMap; - } - - public Map sortASC(Map unsortMap) { - - // Convert Map to List - List> list = new LinkedList>(unsortMap.entrySet()); - - // Sort list with comparator, to compare the Map values - Collections.sort(list, new Comparator>() { - @Override - public int compare(Map.Entry o1, Map.Entry o2) { - return (o1.getValue()).compareTo(o2.getValue()); - } - }); - - // Convert sorted map back to a Map - Map sortedMap = new LinkedHashMap(); - for (Iterator> it = list.iterator(); it.hasNext();) { - Map.Entry entry = it.next(); - sortedMap.put(entry.getKey(), entry.getValue()); - } - return sortedMap; - } -} +package com.bekvon.bukkit.residence.utils; + +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class Sorting { + + public Map sortByValueASC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return (o1.getValue()).compareTo(o2.getValue()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public Map sortByValueDESC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return (o2.getValue()).compareTo(o1.getValue()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public Map sortByKeyDESC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return (o2.getKey()).compareTo(o1.getKey()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public List sortResidences(List residences) { + Map map = new HashMap(); + for (ClaimedResidence one : residences) { + if (one == null) + continue; + if (one.getName() == null) + continue; + map.put(one.getName().toLowerCase(), one); + } + map = sortByKeyASC(map); + residences.clear(); + for (Entry one : map.entrySet()) { + residences.add((ClaimedResidence) one.getValue()); + } + return residences; + } + + public Map sortByKeyASC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return (o1.getKey()).compareTo(o2.getKey()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public Map sortStringByKeyASC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return (o1.getKey()).compareTo(o2.getKey()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public Map sortDoubleDESC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return (o2.getValue()).compareTo(o1.getValue()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public Map sortASC(Map unsortMap) { + + // Convert Map to List + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sort list with comparator, to compare the Map values + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return (o1.getValue()).compareTo(o2.getValue()); + } + }); + + // Convert sorted map back to a Map + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } +} diff --git a/src/plugin.yml b/src/plugin.yml index 6ed6416dd..609130ad0 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.8.2 +version: 4.5.11.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 49caf8e9e8065ab855cb100c7d82be0dac832796 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 5 Nov 2016 16:06:20 +0200 Subject: [PATCH 0284/1142] Check for possible null when getting group leave/enter messsages --- .../residence/protection/ClaimedResidence.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 781301c8b..126742bc5 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1306,10 +1306,16 @@ public Map save() { PermissionGroup group = this.getOwnerGroup(); - if (enterMessage != null && group != null && !enterMessage.equals(group.getDefaultEnterMessage())) - root.put("EnterMessage", enterMessage); - if (enterMessage != null && group != null && !leaveMessage.equals(group.getDefaultLeaveMessage())) - root.put("LeaveMessage", leaveMessage); + if (enterMessage != null) + if (group == null || group.getDefaultEnterMessage() == null || !enterMessage.equals(group.getDefaultEnterMessage())) { + root.put("EnterMessage", enterMessage); + } + + if (leaveMessage != null) + if (group == null || group.getDefaultLeaveMessage() == null || !leaveMessage.equals(group.getDefaultLeaveMessage())) { + root.put("LeaveMessage", leaveMessage); + } + if (ShopDesc != null) root.put("ShopDescription", ShopDesc); if (bank.getStoredMoney() != 0) From ed31a924e518ba5c334a19c8ee3f5fdbf7a5d7d4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 5 Nov 2016 16:58:13 +0200 Subject: [PATCH 0285/1142] Check admin flag properly --- .../residence/economy/ResidenceBank.java | 6 +- .../listeners/ResidenceEntityListener.java | 10 +- .../listeners/ResidencePlayerListener.java | 36 +-- .../protection/ClaimedResidence.java | 13 +- .../residence/protection/FlagPermissions.java | 1 + .../protection/ResidenceManager.java | 3 + .../protection/ResidencePermissions.java | 18 +- .../bukkit/residence/utils/CrackShot.java | 297 +++++++++--------- 8 files changed, 201 insertions(+), 183 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index 321bef5cb..a4ac13074 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -6,6 +6,8 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + import org.bukkit.entity.Player; public class ResidenceBank { @@ -45,7 +47,7 @@ public void withdraw(CommandSender sender, int amount, boolean resadmin) { if (!Residence.getConfigManager().enableEconomy()) { Residence.msg(sender, lm.Economy_MarketDisabled); } - if (!resadmin && !res.getPermissions().playerHas(sender.getName(), Flags.bank, false)) { + if (!resadmin && !res.getPermissions().playerHas(sender.getName(), Flags.bank, FlagCombo.OnlyTrue)) { Residence.msg(sender, lm.Bank_NoAccess); return; } @@ -63,7 +65,7 @@ public void deposit(CommandSender sender, int amount, boolean resadmin) { if (!Residence.getConfigManager().enableEconomy()) { Residence.msg(sender, lm.Economy_MarketDisabled); } - if (!resadmin && !res.getPermissions().playerHas(sender.getName(), Flags.bank, false)) { + if (!resadmin && !res.getPermissions().playerHas(sender.getName(), Flags.bank, FlagCombo.OnlyTrue)) { Residence.msg(sender, lm.Bank_NoAccess); return; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 08fdb15b9..38a0813d7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -160,7 +160,7 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { if (res == null) return; - if (!res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, true)) { + if (res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { Residence.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); event.setCancelled(true); } @@ -207,7 +207,7 @@ public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { if (Residence.isResAdminOn(cause)) return; - if (!res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, true)) { + if (res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, FlagCombo.OnlyFalse)) { Residence.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); event.setCancelled(true); } @@ -302,7 +302,7 @@ public void VehicleDestroy(VehicleDestroyEvent event) { if (res == null) return; - if (!res.getPermissions().playerHas(cause.getName(), Flags.vehicledestroy, true)) { + if (res.getPermissions().playerHas(cause.getName(), Flags.vehicledestroy, FlagCombo.OnlyFalse)) { Residence.msg(cause, lm.Residence_FlagDeny, Flags.vehicledestroy.getName(), res.getName()); event.setCancelled(true); } @@ -346,7 +346,7 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { if (res == null) return; - if (!res.getPermissions().playerHas(cause.getName(), Flags.mobkilling, true)) { + if (res.getPermissions().playerHas(cause.getName(), Flags.mobkilling, FlagCombo.OnlyFalse)) { Residence.msg(cause, lm.Residence_FlagDeny, Flags.mobkilling.getName(), res.getName()); event.setCancelled(true); } @@ -372,7 +372,7 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { if (res == null) return; - if (!res.getPermissions().playerHas(player.getName(), Flags.leash, true)) { + if (res.getPermissions().playerHas(player.getName(), Flags.leash, FlagCombo.OnlyFalse)) { Residence.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); event.setCancelled(true); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index bb8f23255..b382663d2 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -436,7 +436,7 @@ public void onCommand(PlayerCommandPreprocessEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByName(resname); if (res == null) return; - if (res.getPermissions().playerHas(player.getName(), Flags.command, true)) + if (!res.getPermissions().playerHas(player, Flags.command, FlagCombo.OnlyFalse)) return; if (Residence.getPermissionManager().isResidenceAdmin(player)) @@ -777,14 +777,14 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { if (res == null) { return; } - if (res.getPermissions().playerHas(player, Flags.move, true)) { + if (!res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse)) { return; } if (bed) { loc = player.getWorld().getSpawnLocation(); } res = Residence.getResidenceManager().getByLoc(loc); - if (res != null && !res.getPermissions().playerHas(player.getName(), Flags.move, true)) { + if (res != null && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse)) { loc = res.getOutsideFreeLoc(loc, player); } @@ -1109,7 +1109,7 @@ public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); - if (res != null && !res.getPermissions().playerHas(player.getName(), Flags.trade, true)) { + if (res != null && res.getPermissions().playerHas(player, Flags.trade, FlagCombo.OnlyFalse)) { Residence.msg(player, lm.Residence_FlagDeny, Flags.trade.getName(), res.getName()); event.setCancelled(true); } @@ -1132,7 +1132,7 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.container, true) && player.isSneaking()) { + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); event.setCancelled(true); } else if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.riding, FlagCombo.TrueOrNone)) { @@ -1158,7 +1158,7 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.container, true)) { + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); event.setCancelled(true); } @@ -1181,7 +1181,7 @@ public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.riding, false)) { + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.riding, FlagCombo.OnlyFalse)) { Residence.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); event.setCancelled(true); } @@ -1204,7 +1204,7 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.dye, true)) { + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.dye, FlagCombo.OnlyFalse)) { Residence.msg(player, lm.Residence_FlagDeny, Flags.dye.getName(), res.getName()); event.setCancelled(true); } @@ -1228,7 +1228,7 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { if (res == null) return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.shear, true)) { + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.shear, FlagCombo.OnlyFalse)) { Residence.msg(player, lm.Residence_FlagDeny, Flags.shear.getName(), res.getName()); event.setCancelled(true); } @@ -1294,7 +1294,7 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { } Material mat = event.getBucket(); - if ((!res.getPermissions().playerHas(player.getName(), Flags.build, true)) + if ((res.getPermissions().playerHas(player, Flags.build, FlagCombo.OnlyFalse)) && Residence.getConfigManager().getNoPlaceWorlds().contains(loc.getWorld().getName())) { if (mat == Material.LAVA_BUCKET || mat == Material.WATER_BUCKET) { Residence.msg(player, lm.Flag_Deny, Flags.build); @@ -1383,27 +1383,27 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { return; if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { - if (!res.getPermissions().playerHas(player.getName(), Flags.move, true) && !res.isOwner(player)) { + if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player)) { event.setCancelled(true); Residence.msg(player, lm.Residence_MoveDeny, res.getName()); return; } } else if (event.getCause() == TeleportCause.ENDER_PEARL) { - if (!res.getPermissions().playerHas(player, Flags.enderpearl, true)) { + if (res.getPermissions().playerHas(player, Flags.enderpearl, FlagCombo.OnlyFalse)) { event.setCancelled(true); Residence.msg(player, lm.Residence_FlagDeny, Flags.enderpearl.getName(), res.getName()); return; } } if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && Residence.getConfigManager().isBlockAnyTeleportation()) { - if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.tp, true) && !player.hasPermission("residence.admin.tp")) { + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { event.setCancelled(true); Residence.msg(player, lm.General_TeleportDeny, res.getName()); return; } } if (Residence.getNms().isChorusTeleport(event.getCause())) { - if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.chorustp, true) && !player.hasPermission("residence.admin.tp")) { + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.chorustp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { event.setCancelled(true); Residence.msg(player, lm.Residence_FlagDeny, Flags.chorustp.getName(), res.getName()); return; @@ -1598,7 +1598,7 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { } else { if (res != null && ResOld.getName().equals(res.getName())) { - f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( + f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, FlagCombo.OnlyTrue) && !Residence.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { if (res.isOwner(player)) break f; @@ -1670,7 +1670,7 @@ public void run() { } if (move) { - if (!res.getPermissions().playerHas(pname, Flags.move, true) && !Residence.isResAdminOn(player) && !res.isOwner(player) && !player.hasPermission( + if (res.getPermissions().playerHas(pname, Flags.move, FlagCombo.OnlyFalse) && !Residence.isResAdminOn(player) && !res.isOwner(player) && !player.hasPermission( "residence.admin.move")) { Location lastLoc = lastOutsideLoc.get(pname); @@ -1684,7 +1684,7 @@ public void run() { ClaimedResidence preRes = Residence.getResidenceManager().getByLoc(lastLoc); - if (preRes != null && !preRes.getPermissions().playerHas(pname, Flags.tp, true) && !player.hasPermission("residence.admin.tp")) { + if (preRes != null && preRes.getPermissions().playerHas(pname, Flags.tp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { Location newLoc = res.getOutsideFreeLoc(loc, player); player.teleport(newLoc); } else if (lastLoc != null) { @@ -1703,7 +1703,7 @@ public void run() { } // Preventing fly in residence only when player has move permission - f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( + f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, FlagCombo.OnlyTrue) && !Residence.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { if (res.isOwner(player)) break f; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 126742bc5..f47ae3fc8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -23,6 +23,7 @@ import com.bekvon.bukkit.residence.itemlist.ItemList.ListType; import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; @@ -385,7 +386,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa Residence.msg(player, lm.Area_NotWithinParent); return false; } - if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), Flags.subzone, true)) { + if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { Residence.msg(player, lm.Residence_ParentNoPermission); return false; } @@ -516,7 +517,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole Residence.msg(player, lm.Area_NotWithinParent); return false; } - if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player.getName(), Flags.subzone, true)) { + if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { Residence.msg(player, lm.Residence_ParentNoPermission); return false; } @@ -600,7 +601,7 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { - if (!this.perms.playerHas(player.getName(), Flags.subzone, this.perms.playerHas(player.getName(), Flags.admin, false))) { + if (!this.perms.playerHas(player.getName(), Flags.subzone, this.perms.playerHas(player, Flags.admin, false))) { Residence.msg(player, lm.General_NoPermission); return false; } @@ -1005,7 +1006,7 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { continue; ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res != null && player != null && !res.getPermissions().playerHas(player.getName(), Flags.tp, true) && !player.hasPermission("residence.admin.tp")) + if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) && !player.hasPermission("residence.admin.tp")) continue; found = true; @@ -1152,11 +1153,11 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r Residence.msg(reqPlayer, lm.General_NoPermission); return; } - if (!this.perms.playerHas(reqPlayer.getName(), Flags.tp, true)) { + if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { Residence.msg(reqPlayer, lm.Residence_TeleportNoFlag); return; } - if (!this.perms.playerHas(reqPlayer.getName(), Flags.move, true)) { + if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { Residence.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); return; } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index c44bef017..23425b009 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -23,6 +23,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.utils.Debug; public class FlagPermissions { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 0114a70b4..5a83628bf 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -36,6 +36,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; @@ -948,6 +949,8 @@ public boolean renameResidence(Player player, String oldName, String newName, bo } oldName = res.getName(); + + Debug.D("has permission: "+res.getPermissions().hasResidencePermission(player, true)); if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { if (res.getParent() == null) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index e895c3b61..9319adb73 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -9,6 +9,8 @@ import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.utils.Debug; + import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -49,6 +51,7 @@ public boolean playerHas(CommandSender sender, Flags flag, boolean def) { return true; } + @Override public boolean playerHas(Player player, Flags flag, boolean def) { return playerHas(player, flag.getName(), def); } @@ -92,7 +95,7 @@ public boolean playerHas(String player, String world, String flag, boolean def) Residence.getServ().getPluginManager().callEvent(fc); if (fc.isOverriden()) - return fc.getOverrideValue(); + return fc.getOverrideValue(); return super.playerHas(player, world, flag, def); } @@ -213,29 +216,36 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) public boolean hasResidencePermission(CommandSender sender, boolean requireOwner) { if (!(sender instanceof Player)) return true; + Debug.D(1); ClaimedResidence par = this.residence.getParent(); if (par != null) - if (par.getPermissions().playerHas(sender.getName(), Flags.admin, true)) + if (par.getPermissions().playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue)) return true; + Debug.D(2); if (Residence.getConfigManager().enabledRentSystem()) { String resname = residence.getName(); if (Residence.getRentManager().isRented(resname)) { if (requireOwner) { + Debug.D(3); return false; } String renter = Residence.getRentManager().getRentingPlayer(resname); if (sender.getName().equals(renter)) { + Debug.D(6); return true; } - return (playerHas(sender.getName(), Flags.admin, false)); + Debug.D(7); + return (playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue)); } } if (requireOwner) { + Debug.D(4); return (this.getOwner().equals(sender.getName())); } - return (playerHas(sender.getName(), Flags.admin, false) || this.getOwner().equals(sender.getName())); + Debug.D(8); + return (playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue) || this.getOwner().equals(sender.getName())); } private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState state, boolean globalflag, boolean resadmin) { diff --git a/src/com/bekvon/bukkit/residence/utils/CrackShot.java b/src/com/bekvon/bukkit/residence/utils/CrackShot.java index af71b8f92..d912986a0 100644 --- a/src/com/bekvon/bukkit/residence/utils/CrackShot.java +++ b/src/com/bekvon/bukkit/residence/utils/CrackShot.java @@ -1,148 +1,149 @@ -package com.bekvon.bukkit.residence.utils; - -import org.bukkit.Location; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.shampaggon.crackshot.events.WeaponDamageEntityEvent; - -public class CrackShot implements Listener { - public CrackShot() { - } - - @EventHandler(priority = EventPriority.LOWEST) - public void AnimalKilling(WeaponDamageEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Entity damager = event.getDamager(); - - if ((!(damager instanceof Arrow)) && (!(damager instanceof Player))) { - return; - } - - Player cause = null; - if ((damager instanceof Arrow) && (!(((Arrow) damager).getShooter() instanceof Player))) { - return; - } - - if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Arrow) damager).getShooter(); - } - - if (cause == null) - return; - - if (Residence.isResAdminOn(cause)) { - return; - } - - if (!(event.getVictim() instanceof LivingEntity)) - return; - - Entity entity = event.getVictim(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); - - if (Residence.getNms().isAnimal(entity)) { - if (res != null && !res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, true)) { - cause.sendMessage(Residence.msg(lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName())); - event.setCancelled(true); - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.getVictim().getType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event.getVictim().getType())) - return; - - Entity dmgr = event.getDamager(); - Player player; - if (event.getDamager() instanceof Player) { - player = (Player) event.getDamager(); - } else { - if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { - player = (Player) ((Projectile) dmgr).getShooter(); - } else - return; - } - - if (Residence.isResAdminOn(player)) - return; - - // Note: Location of entity, not player; otherwise player could stand outside of res and still damage - Location loc = event.getVictim().getLocation(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - if (res != null && !res.getPermissions().playerHas(player.getName(), Flags.container, false)) { - event.setCancelled(true); - Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); - } - - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityDamage(WeaponDamageEntityEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (!(event.getVictim() instanceof Player)) - return; - - Player victim = (Player) event.getVictim(); - if (victim.hasMetadata("NPC")) { - return; - } - - ClaimedResidence area = Residence.getResidenceManager().getByLoc(victim.getLocation()); - /* Living Entities */ - Player damager = event.getPlayer(); - ClaimedResidence srcarea = null; - - if (damager == null) - return; - - srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); - - boolean srcpvp = true; - if (srcarea != null) { - srcpvp = srcarea.getPermissions().has(Flags.pvp, true); - } - - if (!srcpvp) { - damager.sendMessage(Residence.msg(lm.General_NoPVPZone)); - event.setCancelled(true); - return; - } - /* Check for Player vs Player */ - if (area == null) { - /* World PvP */ - if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, true)) { - damager.sendMessage(Residence.msg(lm.General_WorldPVPDisabled)); - event.setCancelled(true); - } - } else { - /* Normal PvP */ - if (!area.getPermissions().has(Flags.pvp, true)) { - damager.sendMessage(Residence.msg(lm.General_NoPVPZone)); - event.setCancelled(true); - } - } - return; - - } -} +package com.bekvon.bukkit.residence.utils; + +import org.bukkit.Location; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.shampaggon.crackshot.events.WeaponDamageEntityEvent; + +public class CrackShot implements Listener { + public CrackShot() { + } + + @EventHandler(priority = EventPriority.LOWEST) + public void AnimalKilling(WeaponDamageEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Entity damager = event.getDamager(); + + if ((!(damager instanceof Arrow)) && (!(damager instanceof Player))) { + return; + } + + Player cause = null; + if ((damager instanceof Arrow) && (!(((Arrow) damager).getShooter() instanceof Player))) { + return; + } + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Arrow) damager).getShooter(); + } + + if (cause == null) + return; + + if (Residence.isResAdminOn(cause)) { + return; + } + + if (!(event.getVictim() instanceof LivingEntity)) + return; + + Entity entity = event.getVictim(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + + if (Residence.getNms().isAnimal(entity)) { + if (res != null && res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { + cause.sendMessage(Residence.msg(lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName())); + event.setCancelled(true); + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getVictim().getType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event.getVictim().getType())) + return; + + Entity dmgr = event.getDamager(); + Player player; + if (event.getDamager() instanceof Player) { + player = (Player) event.getDamager(); + } else { + if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { + player = (Player) ((Projectile) dmgr).getShooter(); + } else + return; + } + + if (Residence.isResAdminOn(player)) + return; + + // Note: Location of entity, not player; otherwise player could stand outside of res and still damage + Location loc = event.getVictim().getLocation(); + ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + if (res != null && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); + } + + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamage(WeaponDamageEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (!(event.getVictim() instanceof Player)) + return; + + Player victim = (Player) event.getVictim(); + if (victim.hasMetadata("NPC")) { + return; + } + + ClaimedResidence area = Residence.getResidenceManager().getByLoc(victim.getLocation()); + /* Living Entities */ + Player damager = event.getPlayer(); + ClaimedResidence srcarea = null; + + if (damager == null) + return; + + srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); + + boolean srcpvp = true; + if (srcarea != null) { + srcpvp = srcarea.getPermissions().has(Flags.pvp, true); + } + + if (!srcpvp) { + damager.sendMessage(Residence.msg(lm.General_NoPVPZone)); + event.setCancelled(true); + return; + } + /* Check for Player vs Player */ + if (area == null) { + /* World PvP */ + if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, true)) { + damager.sendMessage(Residence.msg(lm.General_WorldPVPDisabled)); + event.setCancelled(true); + } + } else { + /* Normal PvP */ + if (!area.getPermissions().has(Flags.pvp, true)) { + damager.sendMessage(Residence.msg(lm.General_NoPVPZone)); + event.setCancelled(true); + } + } + return; + + } +} From f956bc15c2cda8b63e7a9b5eac77f667dfb6c65b Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 5 Nov 2016 17:36:43 +0200 Subject: [PATCH 0286/1142] Check for getMarkerSet if its not null before trying to clean it up --- src/com/bekvon/bukkit/residence/Residence.java | 2 +- .../bukkit/residence/protection/FlagPermissions.java | 1 - .../bukkit/residence/protection/ResidenceManager.java | 6 +----- .../bukkit/residence/protection/ResidencePermissions.java | 7 ------- 4 files changed, 2 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 650e520fa..bb6a289af 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -361,7 +361,7 @@ public void onDisable() { server.getScheduler().cancelTask(rentBukkitId); } - if (getDynManager() != null) + if (getDynManager() != null && getDynManager().getMarkerSet() != null) getDynManager().getMarkerSet().deleteMarkerSet(); if (initsuccess) { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 23425b009..e738b9bbe 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -314,7 +314,6 @@ else if (cachedPlayerNameUUIDs.containsKey(uuid)) for (Entry> one : playerFlags.entrySet()) { if (!one.getKey().equalsIgnoreCase(player)) continue; - // Updating players name to correct capitalization if (!one.getKey().equals(player)) { Map r = playerFlags.remove(one.getKey()); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 5a83628bf..fc3778d26 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -947,11 +947,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo Residence.msg(player, lm.Invalid_Residence); return false; } - - oldName = res.getName(); - - Debug.D("has permission: "+res.getPermissions().hasResidencePermission(player, true)); - + oldName = res.getName(); if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { if (res.getParent() == null) { if (residences.containsKey(newName.toLowerCase())) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 9319adb73..c537247f8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -216,35 +216,28 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) public boolean hasResidencePermission(CommandSender sender, boolean requireOwner) { if (!(sender instanceof Player)) return true; - Debug.D(1); ClaimedResidence par = this.residence.getParent(); if (par != null) if (par.getPermissions().playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue)) return true; - Debug.D(2); if (Residence.getConfigManager().enabledRentSystem()) { String resname = residence.getName(); if (Residence.getRentManager().isRented(resname)) { if (requireOwner) { - Debug.D(3); return false; } String renter = Residence.getRentManager().getRentingPlayer(resname); if (sender.getName().equals(renter)) { - Debug.D(6); return true; } - Debug.D(7); return (playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue)); } } if (requireOwner) { - Debug.D(4); return (this.getOwner().equals(sender.getName())); } - Debug.D(8); return (playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue) || this.getOwner().equals(sender.getName())); } From f1c18f361824d97bd6e0430342038cfd3963aedc Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 5 Nov 2016 17:46:51 +0200 Subject: [PATCH 0287/1142] prevent infinite loop when printing all residences from console --- .../residence/text/help/InformationPager.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 171562380..e25df450f 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -173,10 +173,10 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, final int start, final boolean resadmin) { - int i = 0; + int i = start; for (Entry resT : ownedResidences.entrySet()) { i++; - if (i >= 100) + if (i >= start + 100) break; if (ownedResidences.size() <= i) break; @@ -221,20 +221,20 @@ private void printListWithDelay(final CommandSender sender, final TreeMap 100) { - i = 0; - while (i < 100) { - i++; - ownedResidences.remove(ownedResidences.firstKey()); - } - } +// if (ownedResidences.size() > 100) { +// i = 0; +// while (i < 100) { +// i++; +// ownedResidences.remove(ownedResidences.firstKey()); +// } +// } if (ownedResidences.isEmpty()) { return; From adafed6d54f43f1e6f9370987e09d1bb53f9ccc9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 5 Nov 2016 18:27:23 +0200 Subject: [PATCH 0288/1142] Force group update --- .../residence/containers/PlayerGroup.java | 225 +++++++++--------- .../permissions/PermissionManager.java | 2 +- 2 files changed, 114 insertions(+), 113 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index 73f49cc3d..3dd9ebf2e 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -1,112 +1,113 @@ -package com.bekvon.bukkit.residence.containers; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; - -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; - -public class PlayerGroup { - - String playerName = null; - Player player = null; - long lastCheck = 0L; - HashMap groups = new HashMap(); - - public PlayerGroup(String playerName) { - this.playerName = playerName; - this.player = Bukkit.getPlayer(playerName); - } - - public PlayerGroup(Player player) { - this.playerName = player.getName(); - this.player = player; - } - - public void setLastCkeck(Long time) { - this.lastCheck = time; - } - - public void addGroup(String world, String group) { - groups.put(world, group); - } - - public String getGroup(String world) { - updateGroup(world, false); - return this.groups.get(world); - } - - public void updateGroup(String world, boolean force) { - if (!force && this.lastCheck != 0L && System.currentTimeMillis() - this.lastCheck < 60 * 1000) - return; - - this.lastCheck = System.currentTimeMillis(); - List posibleGroups = new ArrayList(); - String group; - if (Residence.getPermissionManager().getPlayersGroups().containsKey(playerName.toLowerCase())) { - group = Residence.getPermissionManager().getPlayersGroups().get(playerName.toLowerCase()); - if (group != null) { - group = group.toLowerCase(); - if (group != null && Residence.getPermissionManager().getGroups().containsKey(group)) { - PermissionGroup g = Residence.getPermissionManager().getGroups().get(group); - posibleGroups.add(g); - this.groups.put(world, group); - } - } - } - - posibleGroups.add(getPermissionGroup()); - - group = Residence.getPermissionManager().getPermissionsGroup(playerName, world); - - PermissionGroup g = Residence.getPermissionManager().getGroupByName(group); - - if (g != null) - posibleGroups.add(g); - - PermissionGroup finalGroup = null; - if (posibleGroups.size() == 1) - finalGroup = posibleGroups.get(0); - - for (int i = 0; i < posibleGroups.size(); i++) { - if (finalGroup == null) { - finalGroup = posibleGroups.get(i); - continue; - } - - if (finalGroup.getPriority() < posibleGroups.get(i).getPriority()) - finalGroup = posibleGroups.get(i); - } - - if (finalGroup == null || !Residence.getPermissionManager().getGroups().containsValue(finalGroup)) { - this.groups.put(world, Residence.getConfigManager().getDefaultGroup().toLowerCase()); - } else { - this.groups.put(world, finalGroup.getGroupName()); - } - } - - private PermissionGroup getPermissionGroup() { - if (this.player == null) - this.player = Bukkit.getPlayer(playerName); - PermissionGroup group = Residence.getPermissionManager().getGroupByName(Residence.getConfigManager().getDefaultGroup()); - for (Entry one : Residence.getPermissionManager().getGroups().entrySet()) { - if (player != null) { - if (this.player.hasPermission("residence.group." + one.getKey())) - group = one.getValue(); - } else { - OfflinePlayer offlineP = Residence.getOfflinePlayer(playerName); - if (offlineP != null) - if (ResidenceVaultAdapter.hasPermission(offlineP, "residence.group." + one.getKey(), Residence.getConfigManager().getDefaultWorld())) - group = one.getValue(); - } - } - return group; - } - -} +package com.bekvon.bukkit.residence.containers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.utils.Debug; +import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; + +public class PlayerGroup { + + String playerName = null; + Player player = null; + long lastCheck = 0L; + HashMap groups = new HashMap(); + + public PlayerGroup(String playerName) { + this.playerName = playerName; + this.player = Bukkit.getPlayer(playerName); + } + + public PlayerGroup(Player player) { + this.playerName = player.getName(); + this.player = player; + } + + public void setLastCkeck(Long time) { + this.lastCheck = time; + } + + public void addGroup(String world, String group) { + groups.put(world, group); + } + + public String getGroup(String world) { + updateGroup(world, false); + return this.groups.get(world); + } + + public void updateGroup(String world, boolean force) { + if (!force && this.lastCheck != 0L && System.currentTimeMillis() - this.lastCheck < 60 * 1000) + return; + + this.lastCheck = System.currentTimeMillis(); + List posibleGroups = new ArrayList(); + String group; + if (Residence.getPermissionManager().getPlayersGroups().containsKey(playerName.toLowerCase())) { + group = Residence.getPermissionManager().getPlayersGroups().get(playerName.toLowerCase()); + if (group != null) { + group = group.toLowerCase(); + if (group != null && Residence.getPermissionManager().getGroups().containsKey(group)) { + PermissionGroup g = Residence.getPermissionManager().getGroups().get(group); + posibleGroups.add(g); + this.groups.put(world, group); + } + } + } + + posibleGroups.add(getPermissionGroup()); + + group = Residence.getPermissionManager().getPermissionsGroup(playerName, world); + + PermissionGroup g = Residence.getPermissionManager().getGroupByName(group); + + if (g != null) + posibleGroups.add(g); + + PermissionGroup finalGroup = null; + if (posibleGroups.size() == 1) + finalGroup = posibleGroups.get(0); + + for (int i = 0; i < posibleGroups.size(); i++) { + if (finalGroup == null) { + finalGroup = posibleGroups.get(i); + continue; + } + + if (finalGroup.getPriority() < posibleGroups.get(i).getPriority()) + finalGroup = posibleGroups.get(i); + } + + if (finalGroup == null || !Residence.getPermissionManager().getGroups().containsValue(finalGroup)) { + this.groups.put(world, Residence.getConfigManager().getDefaultGroup().toLowerCase()); + } else { + this.groups.put(world, finalGroup.getGroupName()); + } + } + + private PermissionGroup getPermissionGroup() { + if (this.player == null) + this.player = Bukkit.getPlayer(playerName); + PermissionGroup group = Residence.getPermissionManager().getGroupByName(Residence.getConfigManager().getDefaultGroup()); + for (Entry one : Residence.getPermissionManager().getGroups().entrySet()) { + if (player != null) { + if (this.player.hasPermission("residence.group." + one.getKey())) + group = one.getValue(); + } else { + OfflinePlayer offlineP = Residence.getOfflinePlayer(playerName); + if (offlineP != null) + if (ResidenceVaultAdapter.hasPermission(offlineP, "residence.group." + one.getKey(), Residence.getConfigManager().getDefaultWorld())) + group = one.getValue(); + } + } + return group; + } + +} diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 3356195f6..1d7279a50 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -96,7 +96,7 @@ public String getGroupNameByPlayer(String playerName, String world) { if (player != null) updateGroupNameForPlayer(player); else - updateGroupNameForPlayer(playerName, world, false); + updateGroupNameForPlayer(playerName, world, true); } PlayerGroup PGroup = this.groupsMap.get(playerName); if (PGroup != null) { From ba87b555ac6e135a082bcffdf14a278c4cc32ac5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 6 Nov 2016 16:48:36 +0200 Subject: [PATCH 0289/1142] Keep enter/leave messages to avoid grabbing players group --- .../residence/permissions/PermissionManager.java | 2 ++ .../residence/protection/ClaimedResidence.java | 16 ++-------------- .../residence/protection/ResidenceManager.java | 1 + .../vaultinterface/ResidenceVaultAdapter.java | 9 +++++++-- src/plugin.yml | 2 +- 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 1d7279a50..26863fe25 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -7,6 +7,8 @@ import com.nijikokun.bukkit.Permissions.Permissions; import com.platymuus.bukkit.permissions.PermissionsPlugin; +import net.milkbowl.vault.Vault; + import java.io.File; import java.util.*; import java.util.logging.Level; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index f47ae3fc8..7eced9840 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1305,17 +1305,11 @@ public Map save() { if (createTime != 0L) root.put("CreatedOn", createTime); - PermissionGroup group = this.getOwnerGroup(); - if (enterMessage != null) - if (group == null || group.getDefaultEnterMessage() == null || !enterMessage.equals(group.getDefaultEnterMessage())) { - root.put("EnterMessage", enterMessage); - } + root.put("EnterMessage", enterMessage); if (leaveMessage != null) - if (group == null || group.getDefaultLeaveMessage() == null || !leaveMessage.equals(group.getDefaultLeaveMessage())) { - root.put("LeaveMessage", leaveMessage); - } + root.put("LeaveMessage", leaveMessage); if (ShopDesc != null) root.put("ShopDescription", ShopDesc); @@ -1449,17 +1443,11 @@ public static ClaimedResidence load(String worldName, Map root, } } - PermissionGroup group = res.getOwnerGroup(); - if (root.containsKey("EnterMessage")) res.enterMessage = (String) root.get("EnterMessage"); - else if (group != null) - res.enterMessage = res.getOwnerGroup().getDefaultEnterMessage(); if (root.containsKey("LeaveMessage")) res.leaveMessage = (String) root.get("LeaveMessage"); - else if (group != null) - res.leaveMessage = res.getOwnerGroup().getDefaultLeaveMessage(); res.parent = parent; Map tploc = (Map) root.get("TPLoc"); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index fc3778d26..b98220055 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -859,6 +859,7 @@ public Map> loadMap(String worldName, Map @SuppressWarnings("unchecked") ClaimedResidence residence = ClaimedResidence.load(worldName, (Map) res.getValue(), null, plugin); + if (residence == null) continue; diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 6a758b1ce..715b53820 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -6,6 +6,7 @@ import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.permission.Permission; +import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.Server; import org.bukkit.entity.Player; @@ -73,8 +74,12 @@ public String getPlayerGroup(Player player) { @Override public String getPlayerGroup(String player, String world) { - @SuppressWarnings("deprecation") - String group = permissions.getPrimaryGroup(world, player); + Bukkit.getConsoleSender().sendMessage("getting roup"); + OfflinePlayer off = Bukkit.getOfflinePlayer(player); +// @SuppressWarnings("deprecation") + if (off == null) + return null; + String group = permissions.getPrimaryGroup(world, off); if (group == null) { return group; } diff --git a/src/plugin.yml b/src/plugin.yml index 609130ad0..da78c0ecb 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.11.0 +version: 4.5.11.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From cf8cf46dd04ec89ccb2da78b29c1682ad1ac8add Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 6 Nov 2016 16:50:44 +0200 Subject: [PATCH 0290/1142] This should not be here --- .../bukkit/residence/vaultinterface/ResidenceVaultAdapter.java | 1 - src/plugin.yml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 715b53820..384ea8ae6 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -74,7 +74,6 @@ public String getPlayerGroup(Player player) { @Override public String getPlayerGroup(String player, String world) { - Bukkit.getConsoleSender().sendMessage("getting roup"); OfflinePlayer off = Bukkit.getOfflinePlayer(player); // @SuppressWarnings("deprecation") if (off == null) diff --git a/src/plugin.yml b/src/plugin.yml index da78c0ecb..e027a7b02 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.11.1 +version: 4.5.11.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 09ca0911a97eb1cea6613e1c5708b6664e297024 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 6 Nov 2016 16:51:31 +0200 Subject: [PATCH 0291/1142] reverting --- .../residence/vaultinterface/ResidenceVaultAdapter.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 384ea8ae6..9aa232037 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -74,11 +74,8 @@ public String getPlayerGroup(Player player) { @Override public String getPlayerGroup(String player, String world) { - OfflinePlayer off = Bukkit.getOfflinePlayer(player); -// @SuppressWarnings("deprecation") - if (off == null) - return null; - String group = permissions.getPrimaryGroup(world, off); + @SuppressWarnings("deprecation") + String group = permissions.getPrimaryGroup(world, player); if (group == null) { return group; } From 2e16fd19fcc385edd75b0c6de242da525acf9b76 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 17 Nov 2016 13:45:06 +0200 Subject: [PATCH 0292/1142] Initial Support for 1.11 version Fix for wither despawning after first explosion --- .../residence/actionBarNMS/v1_10_R1.java | 106 +++++----- .../residence/actionBarNMS/v1_11_R1.java | 53 +++++ .../bekvon/bukkit/residence/allNms/v1_11.java | 194 ++++++++++++++++++ .../listeners/ResidenceEntityListener.java | 13 +- .../permissions/PermissionManager.java | 2 - .../residence/protection/FlagPermissions.java | 4 +- 6 files changed, 309 insertions(+), 63 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/actionBarNMS/v1_11_R1.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_11.java diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java index 9da9c1bb2..6bcdaba51 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java @@ -1,53 +1,53 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_10_R1.util.CraftChatMessage; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_10_R1.IChatBaseComponent; -import net.minecraft.server.v1_10_R1.IChatBaseComponent.ChatSerializer; -import net.minecraft.server.v1_10_R1.PacketPlayOutTitle.EnumTitleAction; -import net.minecraft.server.v1_10_R1.PacketPlayOutChat; -import net.minecraft.server.v1_10_R1.PacketPlayOutTitle; - -public class v1_10_R1 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} +package com.bekvon.bukkit.residence.actionBarNMS; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_10_R1.util.CraftChatMessage; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.containers.ABInterface; + +import net.minecraft.server.v1_10_R1.IChatBaseComponent; +import net.minecraft.server.v1_10_R1.IChatBaseComponent.ChatSerializer; +import net.minecraft.server.v1_10_R1.PacketPlayOutTitle.EnumTitleAction; +import net.minecraft.server.v1_10_R1.PacketPlayOutChat; +import net.minecraft.server.v1_10_R1.PacketPlayOutTitle; + +public class v1_10_R1 implements ABInterface { + + @Override + public void send(CommandSender sender, String msg) { + if (sender instanceof Player) + send((Player) sender, msg); + else + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + } + + @Override + public void send(Player player, String msg) { + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } + } + + @Override + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_11_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_11_R1.java new file mode 100644 index 000000000..21ef887f2 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_11_R1.java @@ -0,0 +1,53 @@ +package com.bekvon.bukkit.residence.actionBarNMS; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_11_R1.util.CraftChatMessage; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.containers.ABInterface; + +import net.minecraft.server.v1_11_R1.IChatBaseComponent; +import net.minecraft.server.v1_11_R1.IChatBaseComponent.ChatSerializer; +import net.minecraft.server.v1_11_R1.PacketPlayOutTitle.EnumTitleAction; +import net.minecraft.server.v1_11_R1.PacketPlayOutChat; +import net.minecraft.server.v1_11_R1.PacketPlayOutTitle; + +public class v1_11_R1 implements ABInterface { + + @Override + public void send(CommandSender sender, String msg) { + if (sender instanceof Player) + send((Player) sender, msg); + else + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + } + + @Override + public void send(Player player, String msg) { + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } + } + + @Override + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11.java b/src/com/bekvon/bukkit/residence/allNms/v1_11.java new file mode 100644 index 000000000..5d5abc3f3 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11.java @@ -0,0 +1,194 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Llama; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.entity.PolarBear; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; +import com.bekvon.bukkit.residence.Residence; + +public class v1_11 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof Llama || + ent instanceof PolarBear); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case SPRUCE_DOOR: + case BIRCH_DOOR: + case JUNGLE_DOOR: + case ACACIA_DOOR: + case DARK_OAK_DOOR: + case SPRUCE_FENCE_GATE: + case BIRCH_FENCE_GATE: + case JUNGLE_FENCE_GATE: + case ACACIA_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case TRAP_DOOR: + case IRON_TRAPDOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door.getName()); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door.getName()); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door.getName()); + + matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode.getName()); + } + + @Override + public boolean isPlate(Material mat) { + return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public Block getTargetBlock(Player player, int range) { + return player.getTargetBlock((Set) null, range); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @SuppressWarnings("incomplete-switch") + @Override + public boolean isBoat(Material mat) { + switch (mat) { + case BOAT: + case BOAT_ACACIA: + case BOAT_BIRCH: + case BOAT_DARK_OAK: + case BOAT_JUNGLE: + case BOAT_SPRUCE: + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 38a0813d7..38e05f27e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -8,6 +8,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import org.bukkit.block.Block; import org.bukkit.entity.Entity; @@ -419,7 +420,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case BUILD_SNOWMAN: case CUSTOM: case DEFAULT: - if (!perms.has(Flags.canimals, true)) { + if (!perms.has(Flags.canimals, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } @@ -452,7 +453,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { break; } } else if (isMonster(ent)) { - if (!perms.has(Flags.monsters, true)) { + if (perms.has(Flags.monsters, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } @@ -634,11 +635,9 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { } break; default: - if (!perms.has(Flags.destroy, FlagCombo.OnlyFalse)) { - if (entity != EntityType.ENDER_CRYSTAL) { - event.setCancelled(true); - ent.remove(); - } + if (perms.has(Flags.destroy, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + ent.remove(); } break; } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 26863fe25..1d7279a50 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -7,8 +7,6 @@ import com.nijikokun.bukkit.Permissions.Permissions; import com.platymuus.bukkit.permissions.PermissionsPlugin; -import net.milkbowl.vault.Vault; - import java.io.File; import java.util.*; import java.util.logging.Level; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index e738b9bbe..3b035260a 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -577,10 +577,12 @@ private static boolean isDefaultFlags(Map flags) { FlagPermissions gf = Residence.getConfigManager().getGlobalResidenceDefaultFlags(); if (gf != null) { Map dFlags = gf.getFlags(); + if (dFlags.isEmpty()) + return false; if (dFlags.size() != flags.size()) return false; for (Entry one : dFlags.entrySet()) { - if (!flags.containsKey(one.getKey())) + if (!flags.containsKey(one.getKey()) || flags.get(one.getKey()) != one.getValue()) return false; } } From fb4a3d7f0c2a5179606b6010098875cec6b313d6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 20 Nov 2016 13:00:50 +0200 Subject: [PATCH 0293/1142] Wrong enemy spawn cancel state --- .../listeners/ResidenceEntityListener.java | 15 +++++++-------- src/plugin.yml | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 38e05f27e..b1e582560 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -407,7 +407,6 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { if (Residence.isDisabledWorldListener(ent.getWorld())) return; FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); - if (Residence.getNms().isAnimal(ent)) { if (!perms.has(Flags.animals, true)) { event.setCancelled(true); @@ -420,7 +419,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case BUILD_SNOWMAN: case CUSTOM: case DEFAULT: - if (!perms.has(Flags.canimals, FlagCombo.OnlyFalse)) { + if (perms.has(Flags.canimals, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } @@ -437,14 +436,14 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case NETHER_PORTAL: case OCELOT_BABY: case NATURAL: - if (!perms.has(Flags.nanimals, true)) { + if (perms.has(Flags.nanimals, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } break; case SPAWNER_EGG: case SPAWNER: - if (!perms.has(Flags.sanimals, true)) { + if (perms.has(Flags.sanimals, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } @@ -461,7 +460,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case BUILD_WITHER: case CUSTOM: case DEFAULT: - if (!perms.has(Flags.cmonsters, true)) { + if (perms.has(Flags.cmonsters, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } @@ -477,14 +476,14 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { case SLIME_SPLIT: case LIGHTNING: case NATURAL: - if (!perms.has(Flags.nmonsters, true)) { + if (perms.has(Flags.nmonsters, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } break; case SPAWNER_EGG: case SPAWNER: - if (!perms.has(Flags.smonsters, true)) { + if (perms.has(Flags.smonsters, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } @@ -635,7 +634,7 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { } break; default: - if (perms.has(Flags.destroy, FlagCombo.OnlyFalse)) { + if (perms.has(Flags.destroy, FlagCombo.OnlyFalse)) { event.setCancelled(true); ent.remove(); } diff --git a/src/plugin.yml b/src/plugin.yml index e027a7b02..3b6fa8eff 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.11.2 +version: 4.5.12.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From e0fd183fa07b49f5f4aab02293bedb986f4fbe37 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 20 Nov 2016 13:14:34 +0200 Subject: [PATCH 0294/1142] We need to cancel scheduler before creating new one --- .../bukkit/residence/selection/SelectionManager.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 316f20dee..87ab42f20 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -168,6 +168,13 @@ public void showSelectionInfo(Player player) { public void showBounds(final Player player, final Visualizer v) { if (!Residence.getConfigManager().useVisualizer()) return; + Visualizer tv = vMap.get(player.getName()); + if (tv != null) { + if (tv.getId() != -1) + Bukkit.getScheduler().cancelTask(tv.getId()); + if (tv.getErrorId() != -1) + Bukkit.getScheduler().cancelTask(tv.getErrorId()); + } vMap.put(player.getName(), v); Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override From 4085266368060a779fd945437d42bcafa5e21eb2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 25 Nov 2016 15:32:07 +0200 Subject: [PATCH 0295/1142] Keep residence area flags in any case to avoid issues when changing default flags or in case you can't get default flags to add for residence --- .../residence/protection/FlagPermissions.java | 19 +------------------ src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 3b035260a..0a47ee7e6 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -567,28 +567,11 @@ public Map save() { if (!groupFlags.isEmpty()) root.put("GroupFlags", groupFlags); - if (!isDefaultFlags(cuboidFlags)) - root.put("AreaFlags", cuboidFlags); + root.put("AreaFlags", cuboidFlags); return root; } - private static boolean isDefaultFlags(Map flags) { - FlagPermissions gf = Residence.getConfigManager().getGlobalResidenceDefaultFlags(); - if (gf != null) { - Map dFlags = gf.getFlags(); - if (dFlags.isEmpty()) - return false; - if (dFlags.size() != flags.size()) - return false; - for (Entry one : dFlags.entrySet()) { - if (!flags.containsKey(one.getKey()) || flags.get(one.getKey()) != one.getValue()) - return false; - } - } - return true; - } - public static FlagPermissions load(Map root) throws Exception { FlagPermissions newperms = new FlagPermissions(); return FlagPermissions.load(root, newperms); diff --git a/src/plugin.yml b/src/plugin.yml index 3b6fa8eff..cd7268eb5 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.12.0 +version: 4.5.12.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 02a53b762656018d0732ce1300f56ffe36db5775 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Dec 2016 14:37:59 +0200 Subject: [PATCH 0296/1142] new option to set max subzones in residence and take correct value for correct stuff --- .../bukkit/residence/ConfigManager.java | 21 +- .../api/ResidencePlayerInterface.java | 2 + .../residence/containers/ResidencePlayer.java | 48 +- .../bukkit/residence/containers/lm.java | 4 +- .../permissions/PermissionGroup.java | 891 +++++++++--------- .../protection/ClaimedResidence.java | 13 +- .../residence/protection/FlagPermissions.java | 7 +- .../residence/protection/PlayerManager.java | 11 +- .../protection/ResidencePermissions.java | 6 +- src/groups.yml | 324 +++---- src/plugin.yml | 2 +- 11 files changed, 699 insertions(+), 630 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 72018d31f..414c9cd03 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -117,6 +117,7 @@ public class ConfigManager { protected int MaxResCount; protected int MaxRentCount; protected int MaxSubzonesCount; + protected int MaxSubzoneDepthCount; protected int VoteRangeFrom; protected int HealInterval; protected int FeedInterval; @@ -310,14 +311,14 @@ public void UpdateGroupedFlagsFile() { if (!conf.isConfigurationSection("Global.GroupedFlags")) { conf.createSection("Global.GroupedFlags"); conf.set("Global.GroupedFlags.redstone", Arrays.asList( - Flags.note.getName(), - Flags.pressure.getName(), - Flags.lever.getName(), + Flags.note.getName(), + Flags.pressure.getName(), + Flags.lever.getName(), Flags.button.getName(), Flags.diode.getName())); conf.set("Global.GroupedFlags.craft", Arrays.asList( - Flags.brew.getName(), - Flags.table.getName(), + Flags.brew.getName(), + Flags.table.getName(), Flags.enchant.getName())); conf.set("Global.GroupedFlags.trusted", Arrays.asList( Flags.use.getName(), @@ -331,7 +332,7 @@ public void UpdateGroupedFlagsFile() { Flags.shear.getName(), Flags.chat.getName())); conf.set("Global.GroupedFlags.fire", Arrays.asList( - Flags.ignite.getName(), + Flags.ignite.getName(), Flags.firespread.getName())); try { @@ -435,6 +436,10 @@ public void UpdateConfigFile() { c.getW().addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxSubzonesCount = c.get("Global.Optimizations.MaxSubzoneCount", 5); + c.getW().addComment("Global.Optimizations.MaxSubzoneDepthCount", "Set this as low as posible depending of residence.max.subzonedepth.[number] permission you are using", + "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); + MaxSubzoneDepthCount = c.get("Global.Optimizations.MaxSubzoneDepthCount", 5); + c.getW().addComment("Global.Optimizations.OverridePvp", "By setting this to true, regular pvp flag will be acting as overridepvp flag", "Overridepvp flag tries to ignore any pvp protection in that residence by any other plugin"); OverridePvp = c.get("Global.Optimizations.OverridePvp", false); @@ -1447,6 +1452,10 @@ public int getMaxSubzonesCount() { return MaxSubzonesCount; } + public int getMaxSubzoneDepthCount() { + return MaxSubzoneDepthCount; + } + public int getVoteRangeFrom() { return VoteRangeFrom; } diff --git a/src/com/bekvon/bukkit/residence/api/ResidencePlayerInterface.java b/src/com/bekvon/bukkit/residence/api/ResidencePlayerInterface.java index 14891ecd3..d90d129b7 100644 --- a/src/com/bekvon/bukkit/residence/api/ResidencePlayerInterface.java +++ b/src/com/bekvon/bukkit/residence/api/ResidencePlayerInterface.java @@ -19,4 +19,6 @@ public interface ResidencePlayerInterface { public int getMaxRents(String player); public ResidencePlayer getResidencePlayer(String player); + + public int getMaxSubzoneDepth(String player); } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index cb4327f54..527f93854 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -29,6 +29,7 @@ public class ResidencePlayer { private int maxRes = -1; private int maxRents = -1; private int maxSubzones = -1; + private int maxSubzoneDepth = -1; public ResidencePlayer(Player player) { this.player = player; @@ -126,6 +127,11 @@ public void recountMaxRents() { this.maxRents = m; } + public int getMaxRents() { + recountMaxRents(); + return this.maxRents; + } + public void recountMaxSubzones() { updateName(); for (int i = 1; i <= Residence.getConfigManager().getMaxSubzonesCount(); i++) { @@ -138,12 +144,40 @@ public void recountMaxSubzones() { this.maxSubzones = i; } } - - int m = this.getGroup().getMaxSubzoneDepth(); + + int m = this.getGroup().getMaxSubzones(); if (this.maxSubzones < m) this.maxSubzones = m; } + public int getMaxSubzones() { + recountMaxSubzones(); + return this.maxSubzones; + } + + public void recountMaxSubzoneDepth() { + updateName(); + for (int i = 1; i <= Residence.getConfigManager().getMaxSubzoneDepthCount(); i++) { + if (player != null) { + if (this.player.isPermissionSet("residence.max.subzonedepth." + i)) + this.maxSubzoneDepth = i; + } else { + if (ofPlayer != null) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzonedepth." + i, Residence.getConfigManager().getDefaultWorld())) + this.maxSubzoneDepth = i; + } + } + + int m = this.getGroup().getMaxSubzoneDepth(); + if (this.maxSubzoneDepth < m) + this.maxSubzoneDepth = m; + } + + public int getMaxSubzoneDepth() { + recountMaxSubzoneDepth(); + return this.maxSubzoneDepth; + } + public int getMaxRes() { updateName(); Residence.getPermissionManager().updateGroupNameForPlayer(this.userName, this.player != null && this.player.isOnline() ? this.player.getPlayer().getLocation() @@ -156,16 +190,6 @@ public int getMaxRes() { return this.maxRes; } - public int getMaxRents() { - recountMaxRents(); - return this.maxRents; - } - - public int getMaxSubzones() { - recountMaxSubzones(); - return this.maxSubzones; - } - public PermissionGroup getGroup() { return getGroup(this.player != null ? player.getWorld().getName() : Residence.getConfigManager().getDefaultWorld()); } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 5c9a27179..c881b3b9f 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -112,6 +112,7 @@ public enum lm { Subzone_CreateFail("&cUnable to create subzone &6%1"), Subzone_Exists("&cSubzone &6%1 &calready exists."), Subzone_Collide("&cSubzone collides with subzone &6%1"), + Subzone_MaxAmount("&cYou have reached the maximum allowed subzone amount for this residence."), Subzone_MaxDepth("&cYou have reached the maximum allowed subzone depth."), Subzone_SelectInside("&eBoth selection points must be inside the residence."), Subzone_CantCreate("&cYou dont have permission to create residence subzone."), @@ -276,7 +277,8 @@ public enum lm { Limits_MaxNS("&7- &eMax North/South Size:&3 %1"), Limits_MaxUD("&7- &eMax Up/Down Size:&3 %1"), Limits_MinMax("&7- &eMin/Max Protection Height:&3 %1 to %2"), - Limits_MaxSub("&7- &eMax Subzone Depth:&3 %1"), + Limits_MaxSubzones("&7- &eMax Subzones:&3 %1"), + Limits_MaxSubDepth("&7- &eMax Subzone Depth:&3 %1"), Limits_MaxRents("&7- &eMax Rents:&3 %1"), Limits_MaxRentDays(" &eMax Rent days:&3 %1"), Limits_EnterLeave("&7- &eCan Set Enter/Leave Messages:&3 %1"), diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 0f7d40ab2..cc7f1fc72 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -1,441 +1,450 @@ -package com.bekvon.bukkit.residence.permissions; - -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import org.bukkit.configuration.ConfigurationSection; - -public class PermissionGroup { - protected int xmax; - protected int ymax; - protected int zmax; - - protected int xmin; - protected int ymin; - protected int zmin; - - protected int Subzonexmax; - protected int Subzoneymax; - protected int Subzonezmax; - - protected int Subzonexmin; - protected int Subzoneymin; - protected int Subzonezmin; - - protected int resmax; - protected double costperarea; - protected double sellperarea = 0; - protected boolean tpaccess; - protected int subzonedepth; - protected FlagPermissions flagPerms; - protected Map creatorDefaultFlags; - protected Map> groupDefaultFlags; - protected Map residenceDefaultFlags; - protected boolean messageperms; - protected String defaultEnterMessage; - protected String defaultLeaveMessage; - protected int maxLeaseTime; - protected int leaseGiveTime; - protected double renewcostperarea; - protected boolean canBuy; - protected boolean canSell; - protected boolean buyIgnoreLimits; - protected boolean cancreate; - protected String groupname; - protected int maxPhysical; - protected boolean unstuck; - protected boolean kick; - protected int minHeight; - protected int maxHeight; - protected int maxRents; - protected int MaxRentDays = -1; - protected int maxRentables; - protected boolean selectCommandAccess; - protected boolean itemListAccess; - protected int priority = 0; - - public PermissionGroup(String name) { - flagPerms = new FlagPermissions(); - creatorDefaultFlags = new HashMap(); - residenceDefaultFlags = new HashMap(); - groupDefaultFlags = new HashMap>(); - groupname = name; - } - - public void setPriority(int number) { - this.priority = number; - } - - public int getPriority() { - return this.priority; - } - - public PermissionGroup(String name, ConfigurationSection node) { - this(name); - this.parseGroup(node); - } - - public PermissionGroup(String name, ConfigurationSection node, FlagPermissions parentFlagPerms) { - this(name, node); - flagPerms.setParent(parentFlagPerms); - } - - public PermissionGroup(String name, ConfigurationSection node, FlagPermissions parentFlagPerms, int priority) { - this(name, node); - flagPerms.setParent(parentFlagPerms); - this.priority = priority; - } - - private void parseGroup(ConfigurationSection limits) { - if (limits == null) { - return; - } - cancreate = limits.getBoolean("Residence.CanCreate", false); - resmax = limits.getInt("Residence.MaxResidences", 0); - maxPhysical = limits.getInt("Residence.MaxAreasPerResidence", 2); - - xmax = limits.getInt("Residence.MaxEastWest", 0); - xmin = limits.getInt("Residence.MinEastWest", 0); - xmin = xmin > xmax ? xmax : xmin; - - ymax = limits.getInt("Residence.MaxUpDown", 0); - ymin = limits.getInt("Residence.MinUpDown", 0); - ymin = ymin > ymax ? ymax : ymin; - - zmax = limits.getInt("Residence.MaxNorthSouth", 0); - zmin = limits.getInt("Residence.MinNorthSouth", 0); - zmin = zmin > zmax ? zmax : zmin; - - minHeight = limits.getInt("Residence.MinHeight", 0); - maxHeight = limits.getInt("Residence.MaxHeight", 255); - tpaccess = limits.getBoolean("Residence.CanTeleport", false); - subzonedepth = limits.getInt("Residence.SubzoneDepth", 0); - - Subzonexmax = limits.getInt("Residence.SubzoneMaxEastWest", xmax); - Subzonexmax = xmax < Subzonexmax ? xmax : Subzonexmax; - Subzonexmin = limits.getInt("Residence.SubzoneMinEastWest", 0); - Subzonexmin = Subzonexmin > Subzonexmax ? Subzonexmax : Subzonexmin; - - Subzoneymax = limits.getInt("Residence.SubzoneMaxUpDown", ymax); - Subzoneymax = ymax < Subzoneymax ? ymax : Subzoneymax; - Subzoneymin = limits.getInt("Residence.SubzoneMinUpDown", 0); - Subzoneymin = Subzoneymin > Subzoneymax ? Subzoneymax : Subzoneymin; - - Subzonezmax = limits.getInt("Residence.SubzoneMaxNorthSouth", zmax); - Subzonezmax = zmax < Subzonezmax ? zmax : Subzonezmax; - Subzonezmin = limits.getInt("Residence.SubzoneMinNorthSouth", 0); - Subzonezmin = Subzonezmin > Subzonezmax ? Subzonezmax : Subzonezmin; - - messageperms = limits.getBoolean("Messaging.CanChange", false); - defaultEnterMessage = limits.getString("Messaging.DefaultEnter", null); - defaultLeaveMessage = limits.getString("Messaging.DefaultLeave", null); - maxLeaseTime = limits.getInt("Lease.MaxDays", 16); - leaseGiveTime = limits.getInt("Lease.RenewIncrement", 14); - maxRents = limits.getInt("Rent.MaxRents", 0); - - if (limits.contains("Rent.MaxRentDays")) - MaxRentDays = limits.getInt("Rent.MaxRentDays", -1); - - maxRentables = limits.getInt("Rent.MaxRentables", 0); - renewcostperarea = limits.getDouble("Economy.RenewCost", 0.02D); - canBuy = limits.getBoolean("Economy.CanBuy", false); - canSell = limits.getBoolean("Economy.CanSell", false); - buyIgnoreLimits = limits.getBoolean("Economy.IgnoreLimits", false); - costperarea = limits.getDouble("Economy.BuyCost", 0); - - if (limits.contains("Economy.SellCost")) - sellperarea = limits.getDouble("Economy.SellCost", 0); - - unstuck = limits.getBoolean("Residence.Unstuck", false); - kick = limits.getBoolean("Residence.Kick", false); - selectCommandAccess = limits.getBoolean("Residence.SelectCommandAccess", true); - itemListAccess = limits.getBoolean("Residence.ItemListAccess", true); - ConfigurationSection node = limits.getConfigurationSection("Flags.Permission"); - Set flags = null; - if (node != null) { - flags = node.getKeys(false); - } - if (flags != null) { - Iterator flagit = flags.iterator(); - while (flagit.hasNext()) { - String flagname = flagit.next(); - boolean access = limits.getBoolean("Flags.Permission." + flagname, false); - flagPerms.setFlag(flagname, access ? FlagState.TRUE : FlagState.FALSE); - } - } - node = limits.getConfigurationSection("Flags.CreatorDefault"); - if (node != null) { - flags = node.getKeys(false); - } - if (flags != null) { - Iterator flagit = flags.iterator(); - while (flagit.hasNext()) { - String flagname = flagit.next(); - boolean access = limits.getBoolean("Flags.CreatorDefault." + flagname, false); - creatorDefaultFlags.put(flagname, access); - } - - } - node = limits.getConfigurationSection("Flags.Default"); - if (node != null) { - flags = node.getKeys(false); - } - if (flags != null) { - Iterator flagit = flags.iterator(); - while (flagit.hasNext()) { - String flagname = flagit.next(); - boolean access = limits.getBoolean("Flags.Default." + flagname, false); - residenceDefaultFlags.put(flagname, access); - } - } - node = limits.getConfigurationSection("Flags.GroupDefault"); - Set groupDef = null; - if (node != null) { - groupDef = node.getKeys(false); - } - if (groupDef != null) { - Iterator groupit = groupDef.iterator(); - while (groupit.hasNext()) { - String name = groupit.next(); - Map gflags = new HashMap(); - flags = limits.getConfigurationSection("Flags.GroupDefault." + name).getKeys(false); - Iterator flagit = flags.iterator(); - while (flagit.hasNext()) { - String flagname = flagit.next(); - boolean access = limits.getBoolean("Flags.GroupDefault." + name + "." + flagname, false); - gflags.put(flagname, access); - } - groupDefaultFlags.put(name, gflags); - } - } - } - - public String getGroupName() { - return groupname; - } - - public int getMaxX() { - return xmax; - } - - public int getMaxY() { - return ymax; - } - - public int getMaxZ() { - return zmax; - } - - public int getMinX() { - return xmin; - } - - public int getMinY() { - return ymin; - } - - public int getMinZ() { - return zmin; - } - - public int getSubzoneMaxX() { - return Subzonexmax; - } - - public int getSubzoneMaxY() { - return Subzoneymax; - } - - public int getSubzoneMaxZ() { - return Subzonezmax; - } - - public int getSubzoneMinX() { - return Subzonexmin; - } - - public int getSubzoneMinY() { - return Subzoneymin; - } - - public int getSubzoneMinZ() { - return Subzonezmin; - } - - public int getMinHeight() { - return minHeight; - } - - public int getMaxHeight() { - return maxHeight; - } - - public int getMaxZones() { - return resmax; - } - - public double getCostPerBlock() { - return costperarea; - } - - public double getSellPerBlock() { - return sellperarea; - } - - public boolean hasTpAccess() { - return tpaccess; - } - - public int getMaxSubzoneDepth() { - return subzonedepth; - } - - public boolean canSetEnterLeaveMessages() { - return messageperms; - } - - public String getDefaultEnterMessage() { - return defaultEnterMessage; - } - - public String getDefaultLeaveMessage() { - return defaultLeaveMessage; - } - - public int getMaxLeaseTime() { - return maxLeaseTime; - } - - public int getLeaseGiveTime() { - return leaseGiveTime; - } - - public double getLeaseRenewCost() { - return renewcostperarea; - } - - public boolean canBuyLand() { - return canBuy; - } - - public boolean canSellLand() { - return canSell; - } - - public int getMaxRents() { - return maxRents; - } - - public int getMaxRentDays() { - return MaxRentDays; - } - - public int getMaxRentables() { - return maxRentables; - } - - public boolean buyLandIgnoreLimits() { - return buyIgnoreLimits; - } - - public boolean hasUnstuckAccess() { - return unstuck; - } - - public boolean hasKickAccess() { - return kick; - } - - public int getMaxPhysicalPerResidence() { - return maxPhysical; - } - - public Set> getDefaultResidenceFlags() { - return residenceDefaultFlags.entrySet(); - } - - public Set> getDefaultCreatorFlags() { - return creatorDefaultFlags.entrySet(); - } - - public Set>> getDefaultGroupFlags() { - return groupDefaultFlags.entrySet(); - } - - public boolean canCreateResidences() { - return cancreate; - } - - public boolean hasFlagAccess(String flag) { - return flagPerms.has(flag, false); - } - -// public boolean inLimits(CuboidArea area) { -// if (area.getXSize() > xmax || area.getYSize() > ymax || area.getZSize() > zmax) { -// return false; -// } -// return true; -// } -// -// public boolean inLimitsSubzone(CuboidArea area) { -// if (area.getXSize() > Subzonexmax || area.getYSize() > Subzoneymax || area.getZSize() > Subzonezmax) { -// return false; -// } -// return true; -// } - - public boolean selectCommandAccess() { - return selectCommandAccess; - } - - public boolean itemListAccess() { - return itemListAccess; - } - - public void printLimits(CommandSender player, OfflinePlayer target, boolean resadmin) { - - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(target.getName()); - PermissionGroup group = rPlayer.getGroup(); - - Residence.msg(player, lm.General_Separator); - Residence.msg(player, lm.Limits_PGroup, Residence.getPermissionManager().getPermissionsGroup(target.getName(), - target.isOnline() ? Bukkit.getPlayer(target.getName()).getWorld().getName() : Residence.getConfigManager().getDefaultWorld())); - Residence.msg(player, lm.Limits_RGroup, group.getGroupName()); - if (target.isOnline() && resadmin) - Residence.msg(player, lm.Limits_Admin, Residence.getPermissionManager().isResidenceAdmin(player)); - Residence.msg(player, lm.Limits_CanCreate, group.canCreateResidences()); - Residence.msg(player, lm.Limits_MaxRes, rPlayer.getMaxRes()); - Residence.msg(player, lm.Limits_NumberOwn, rPlayer.getResAmount()); - Residence.msg(player, lm.Limits_MaxEW, group.xmin + "-" + group.xmax); - Residence.msg(player, lm.Limits_MaxNS, group.zmin + "-" + group.zmax); - Residence.msg(player, lm.Limits_MaxUD, group.ymin + "-" + group.ymax); - Residence.msg(player, lm.Limits_MinMax, group.minHeight, group.maxHeight); - Residence.msg(player, lm.Limits_MaxSub, rPlayer.getMaxSubzones()); - Residence.msg(player, lm.Limits_MaxRents, rPlayer.getMaxRents() + (getMaxRentDays() != -1 ? Residence.msg(lm.Limits_MaxRentDays, getMaxRentDays()) - : "")); - Residence.msg(player, lm.Limits_EnterLeave, group.messageperms); - if (Residence.getEconomyManager() != null) { - Residence.msg(player, lm.Limits_Cost, group.costperarea); - Residence.msg(player, lm.Limits_Sell, group.sellperarea); - } - Residence.msg(player, lm.Limits_Flag, group.flagPerms.listFlags()); - if (Residence.getConfigManager().useLeases()) { - Residence.msg(player, lm.Limits_MaxDays, group.maxLeaseTime); - Residence.msg(player, lm.Limits_LeaseTime, group.leaseGiveTime); - Residence.msg(player, lm.Limits_RenewCost, group.renewcostperarea); - } - Residence.msg(player, lm.General_Separator); - } - -} +package com.bekvon.bukkit.residence.permissions; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import org.bukkit.configuration.ConfigurationSection; + +public class PermissionGroup { + protected int xmax; + protected int ymax; + protected int zmax; + + protected int xmin; + protected int ymin; + protected int zmin; + + protected int Subzonexmax; + protected int Subzoneymax; + protected int Subzonezmax; + + protected int Subzonexmin; + protected int Subzoneymin; + protected int Subzonezmin; + + protected int resmax; + protected double costperarea; + protected double sellperarea = 0; + protected boolean tpaccess; + protected int subzonedepth; + protected int maxSubzones; + protected FlagPermissions flagPerms; + protected Map creatorDefaultFlags; + protected Map> groupDefaultFlags; + protected Map residenceDefaultFlags; + protected boolean messageperms; + protected String defaultEnterMessage; + protected String defaultLeaveMessage; + protected int maxLeaseTime; + protected int leaseGiveTime; + protected double renewcostperarea; + protected boolean canBuy; + protected boolean canSell; + protected boolean buyIgnoreLimits; + protected boolean cancreate; + protected String groupname; + protected int maxPhysical; + protected boolean unstuck; + protected boolean kick; + protected int minHeight; + protected int maxHeight; + protected int maxRents; + protected int MaxRentDays = -1; + protected int maxRentables; + protected boolean selectCommandAccess; + protected boolean itemListAccess; + protected int priority = 0; + + public PermissionGroup(String name) { + flagPerms = new FlagPermissions(); + creatorDefaultFlags = new HashMap(); + residenceDefaultFlags = new HashMap(); + groupDefaultFlags = new HashMap>(); + groupname = name; + } + + public void setPriority(int number) { + this.priority = number; + } + + public int getPriority() { + return this.priority; + } + + public PermissionGroup(String name, ConfigurationSection node) { + this(name); + this.parseGroup(node); + } + + public PermissionGroup(String name, ConfigurationSection node, FlagPermissions parentFlagPerms) { + this(name, node); + flagPerms.setParent(parentFlagPerms); + } + + public PermissionGroup(String name, ConfigurationSection node, FlagPermissions parentFlagPerms, int priority) { + this(name, node); + flagPerms.setParent(parentFlagPerms); + this.priority = priority; + } + + private void parseGroup(ConfigurationSection limits) { + if (limits == null) { + return; + } + cancreate = limits.getBoolean("Residence.CanCreate", false); + resmax = limits.getInt("Residence.MaxResidences", 0); + maxPhysical = limits.getInt("Residence.MaxAreasPerResidence", 2); + + xmax = limits.getInt("Residence.MaxEastWest", 0); + xmin = limits.getInt("Residence.MinEastWest", 0); + xmin = xmin > xmax ? xmax : xmin; + + ymax = limits.getInt("Residence.MaxUpDown", 0); + ymin = limits.getInt("Residence.MinUpDown", 0); + ymin = ymin > ymax ? ymax : ymin; + + zmax = limits.getInt("Residence.MaxNorthSouth", 0); + zmin = limits.getInt("Residence.MinNorthSouth", 0); + zmin = zmin > zmax ? zmax : zmin; + + minHeight = limits.getInt("Residence.MinHeight", 0); + maxHeight = limits.getInt("Residence.MaxHeight", 255); + tpaccess = limits.getBoolean("Residence.CanTeleport", false); + + maxSubzones = limits.getInt("Residence.MaxSubzonesInArea", 3); + + subzonedepth = limits.getInt("Residence.SubzoneDepth", 0); + + Subzonexmax = limits.getInt("Residence.SubzoneMaxEastWest", xmax); + Subzonexmax = xmax < Subzonexmax ? xmax : Subzonexmax; + Subzonexmin = limits.getInt("Residence.SubzoneMinEastWest", 0); + Subzonexmin = Subzonexmin > Subzonexmax ? Subzonexmax : Subzonexmin; + + Subzoneymax = limits.getInt("Residence.SubzoneMaxUpDown", ymax); + Subzoneymax = ymax < Subzoneymax ? ymax : Subzoneymax; + Subzoneymin = limits.getInt("Residence.SubzoneMinUpDown", 0); + Subzoneymin = Subzoneymin > Subzoneymax ? Subzoneymax : Subzoneymin; + + Subzonezmax = limits.getInt("Residence.SubzoneMaxNorthSouth", zmax); + Subzonezmax = zmax < Subzonezmax ? zmax : Subzonezmax; + Subzonezmin = limits.getInt("Residence.SubzoneMinNorthSouth", 0); + Subzonezmin = Subzonezmin > Subzonezmax ? Subzonezmax : Subzonezmin; + + messageperms = limits.getBoolean("Messaging.CanChange", false); + defaultEnterMessage = limits.getString("Messaging.DefaultEnter", null); + defaultLeaveMessage = limits.getString("Messaging.DefaultLeave", null); + maxLeaseTime = limits.getInt("Lease.MaxDays", 16); + leaseGiveTime = limits.getInt("Lease.RenewIncrement", 14); + maxRents = limits.getInt("Rent.MaxRents", 0); + + if (limits.contains("Rent.MaxRentDays")) + MaxRentDays = limits.getInt("Rent.MaxRentDays", -1); + + maxRentables = limits.getInt("Rent.MaxRentables", 0); + renewcostperarea = limits.getDouble("Economy.RenewCost", 0.02D); + canBuy = limits.getBoolean("Economy.CanBuy", false); + canSell = limits.getBoolean("Economy.CanSell", false); + buyIgnoreLimits = limits.getBoolean("Economy.IgnoreLimits", false); + costperarea = limits.getDouble("Economy.BuyCost", 0); + + if (limits.contains("Economy.SellCost")) + sellperarea = limits.getDouble("Economy.SellCost", 0); + + unstuck = limits.getBoolean("Residence.Unstuck", false); + kick = limits.getBoolean("Residence.Kick", false); + selectCommandAccess = limits.getBoolean("Residence.SelectCommandAccess", true); + itemListAccess = limits.getBoolean("Residence.ItemListAccess", true); + ConfigurationSection node = limits.getConfigurationSection("Flags.Permission"); + Set flags = null; + if (node != null) { + flags = node.getKeys(false); + } + if (flags != null) { + Iterator flagit = flags.iterator(); + while (flagit.hasNext()) { + String flagname = flagit.next(); + boolean access = limits.getBoolean("Flags.Permission." + flagname, false); + flagPerms.setFlag(flagname, access ? FlagState.TRUE : FlagState.FALSE); + } + } + node = limits.getConfigurationSection("Flags.CreatorDefault"); + if (node != null) { + flags = node.getKeys(false); + } + if (flags != null) { + Iterator flagit = flags.iterator(); + while (flagit.hasNext()) { + String flagname = flagit.next(); + boolean access = limits.getBoolean("Flags.CreatorDefault." + flagname, false); + creatorDefaultFlags.put(flagname, access); + } + + } + node = limits.getConfigurationSection("Flags.Default"); + if (node != null) { + flags = node.getKeys(false); + } + if (flags != null) { + Iterator flagit = flags.iterator(); + while (flagit.hasNext()) { + String flagname = flagit.next(); + boolean access = limits.getBoolean("Flags.Default." + flagname, false); + residenceDefaultFlags.put(flagname, access); + } + } + node = limits.getConfigurationSection("Flags.GroupDefault"); + Set groupDef = null; + if (node != null) { + groupDef = node.getKeys(false); + } + if (groupDef != null) { + Iterator groupit = groupDef.iterator(); + while (groupit.hasNext()) { + String name = groupit.next(); + Map gflags = new HashMap(); + flags = limits.getConfigurationSection("Flags.GroupDefault." + name).getKeys(false); + Iterator flagit = flags.iterator(); + while (flagit.hasNext()) { + String flagname = flagit.next(); + boolean access = limits.getBoolean("Flags.GroupDefault." + name + "." + flagname, false); + gflags.put(flagname, access); + } + groupDefaultFlags.put(name, gflags); + } + } + } + + public String getGroupName() { + return groupname; + } + + public int getMaxX() { + return xmax; + } + + public int getMaxY() { + return ymax; + } + + public int getMaxZ() { + return zmax; + } + + public int getMinX() { + return xmin; + } + + public int getMinY() { + return ymin; + } + + public int getMinZ() { + return zmin; + } + + public int getSubzoneMaxX() { + return Subzonexmax; + } + + public int getSubzoneMaxY() { + return Subzoneymax; + } + + public int getSubzoneMaxZ() { + return Subzonezmax; + } + + public int getSubzoneMinX() { + return Subzonexmin; + } + + public int getSubzoneMinY() { + return Subzoneymin; + } + + public int getSubzoneMinZ() { + return Subzonezmin; + } + + public int getMinHeight() { + return minHeight; + } + + public int getMaxHeight() { + return maxHeight; + } + + public int getMaxZones() { + return resmax; + } + + public double getCostPerBlock() { + return costperarea; + } + + public double getSellPerBlock() { + return sellperarea; + } + + public boolean hasTpAccess() { + return tpaccess; + } + + public int getMaxSubzoneDepth() { + return subzonedepth; + } + + public int getMaxSubzones() { + return maxSubzones; + } + + public boolean canSetEnterLeaveMessages() { + return messageperms; + } + + public String getDefaultEnterMessage() { + return defaultEnterMessage; + } + + public String getDefaultLeaveMessage() { + return defaultLeaveMessage; + } + + public int getMaxLeaseTime() { + return maxLeaseTime; + } + + public int getLeaseGiveTime() { + return leaseGiveTime; + } + + public double getLeaseRenewCost() { + return renewcostperarea; + } + + public boolean canBuyLand() { + return canBuy; + } + + public boolean canSellLand() { + return canSell; + } + + public int getMaxRents() { + return maxRents; + } + + public int getMaxRentDays() { + return MaxRentDays; + } + + public int getMaxRentables() { + return maxRentables; + } + + public boolean buyLandIgnoreLimits() { + return buyIgnoreLimits; + } + + public boolean hasUnstuckAccess() { + return unstuck; + } + + public boolean hasKickAccess() { + return kick; + } + + public int getMaxPhysicalPerResidence() { + return maxPhysical; + } + + public Set> getDefaultResidenceFlags() { + return residenceDefaultFlags.entrySet(); + } + + public Set> getDefaultCreatorFlags() { + return creatorDefaultFlags.entrySet(); + } + + public Set>> getDefaultGroupFlags() { + return groupDefaultFlags.entrySet(); + } + + public boolean canCreateResidences() { + return cancreate; + } + + public boolean hasFlagAccess(String flag) { + return flagPerms.has(flag, false); + } + +// public boolean inLimits(CuboidArea area) { +// if (area.getXSize() > xmax || area.getYSize() > ymax || area.getZSize() > zmax) { +// return false; +// } +// return true; +// } +// +// public boolean inLimitsSubzone(CuboidArea area) { +// if (area.getXSize() > Subzonexmax || area.getYSize() > Subzoneymax || area.getZSize() > Subzonezmax) { +// return false; +// } +// return true; +// } + + public boolean selectCommandAccess() { + return selectCommandAccess; + } + + public boolean itemListAccess() { + return itemListAccess; + } + + public void printLimits(CommandSender player, OfflinePlayer target, boolean resadmin) { + + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(target.getName()); + PermissionGroup group = rPlayer.getGroup(); + + Residence.msg(player, lm.General_Separator); + Residence.msg(player, lm.Limits_PGroup, Residence.getPermissionManager().getPermissionsGroup(target.getName(), + target.isOnline() ? Bukkit.getPlayer(target.getName()).getWorld().getName() : Residence.getConfigManager().getDefaultWorld())); + Residence.msg(player, lm.Limits_RGroup, group.getGroupName()); + if (target.isOnline() && resadmin) + Residence.msg(player, lm.Limits_Admin, Residence.getPermissionManager().isResidenceAdmin(player)); + Residence.msg(player, lm.Limits_CanCreate, group.canCreateResidences()); + Residence.msg(player, lm.Limits_MaxRes, rPlayer.getMaxRes()); + Residence.msg(player, lm.Limits_NumberOwn, rPlayer.getResAmount()); + Residence.msg(player, lm.Limits_MaxEW, group.xmin + "-" + group.xmax); + Residence.msg(player, lm.Limits_MaxNS, group.zmin + "-" + group.zmax); + Residence.msg(player, lm.Limits_MaxUD, group.ymin + "-" + group.ymax); + Residence.msg(player, lm.Limits_MinMax, group.minHeight, group.maxHeight); + Residence.msg(player, lm.Limits_MaxSubzones, rPlayer.getMaxSubzones()); + Residence.msg(player, lm.Limits_MaxSubDepth, rPlayer.getMaxSubzoneDepth()); + Residence.msg(player, lm.Limits_MaxRents, rPlayer.getMaxRents() + (getMaxRentDays() != -1 ? Residence.msg(lm.Limits_MaxRentDays, getMaxRentDays()) + : "")); + Residence.msg(player, lm.Limits_EnterLeave, group.messageperms); + if (Residence.getEconomyManager() != null) { + Residence.msg(player, lm.Limits_Cost, group.costperarea); + Residence.msg(player, lm.Limits_Sell, group.sellperarea); + } + Residence.msg(player, lm.Limits_Flag, group.flagPerms.listFlags()); + if (Residence.getConfigManager().useLeases()) { + Residence.msg(player, lm.Limits_MaxDays, group.maxLeaseTime); + Residence.msg(player, lm.Limits_LeaseTime, group.leaseGiveTime); + Residence.msg(player, lm.Limits_RenewCost, group.renewcostperarea); + } + Residence.msg(player, lm.General_Separator); + } + +} diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 7eced9840..0f8e20f88 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -25,6 +25,8 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.shopStuff.ShopVote; +import com.bekvon.bukkit.residence.utils.Debug; + import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; @@ -606,7 +608,13 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l return false; } } - if (this.getZoneDepth() >= Residence.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { + + if (this.getSubzoneList().length >= Residence.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { + Residence.msg(player, lm.Subzone_MaxAmount); + return false; + } + + if (this.getZoneDepth() >= Residence.getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { Residence.msg(player, lm.Subzone_MaxDepth); return false; } @@ -1404,6 +1412,9 @@ public static ClaimedResidence load(String worldName, Map root, res.ignorelist = ResidenceItemList.load(res, (Map) root.get("IgnoreList")); Map areamap = (Map) root.get("Areas"); + + if (res.resName.equalsIgnoreCase("test")) + Debug.D("loading: " + res.resName); res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); if (res.getPermissions().ownerLastKnownName == null) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 0a47ee7e6..ecd04da22 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -567,7 +567,8 @@ public Map save() { if (!groupFlags.isEmpty()) root.put("GroupFlags", groupFlags); - root.put("AreaFlags", cuboidFlags); + // Cloning map to fix issue for yml anchors being created + root.put("AreaFlags", new HashMap(cuboidFlags)); return root; } @@ -602,9 +603,9 @@ protected static FlagPermissions load(Map root, FlagPermissions if (root.containsKey("GroupFlags")) newperms.groupFlags = (Map) root.get("GroupFlags"); - if (root.containsKey("AreaFlags")) + if (root.containsKey("AreaFlags")) { newperms.cuboidFlags = (Map) root.get("AreaFlags"); - else + } else newperms.cuboidFlags = Residence.getConfigManager().getGlobalResidenceDefaultFlags().getFlags(); String ownerName = null; diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 2020371e8..7b7708808 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -164,7 +164,16 @@ public int getMaxSubzones(String player) { } return -1; } - + + @Override + public int getMaxSubzoneDepth(String player) { + ResidencePlayer resPlayer = getResidencePlayer(player); + if (resPlayer != null) { + return resPlayer.getMaxSubzoneDepth(); + } + return -1; + } + @Override public int getMaxRents(String player) { ResidencePlayer resPlayer = getResidencePlayer(player); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index c537247f8..5beb7ef18 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -95,7 +95,7 @@ public boolean playerHas(String player, String world, String flag, boolean def) Residence.getServ().getPluginManager().callEvent(fc); if (fc.isOverriden()) - return fc.getOverrideValue(); + return fc.getOverrideValue(); return super.playerHas(player, world, flag, def); } @@ -540,8 +540,8 @@ public static ResidencePermissions load(String worldName, ClaimedResidence res, newperms.ownerLastKnownName = Residence.getServerLandname(); } newperms.world = worldName; - FlagPermissions.load(root, newperms); - + FlagPermissions.load(root, newperms); + if (newperms.getOwner() == null || newperms.world == null || newperms.playerFlags == null || newperms.groupFlags == null || newperms.cuboidFlags == null) throw new Exception("Invalid Residence Permissions..."); return newperms; diff --git a/src/groups.yml b/src/groups.yml index ea71733c2..5145ec666 100644 --- a/src/groups.yml +++ b/src/groups.yml @@ -1,162 +1,164 @@ -# These groups correspond to the Permissions groups defined in your '.yml' -Groups: - Default: #group name, DONT remove this group - # Information about the Residence zone that the player can define. - #Uncomment the lines below to mirror this config to other groups. - #Mirror: - #- 'group1' - #- 'group2' - Residence: - # Determins if this group can create residences or not. This option can be overriden with the permissions node 'residence.create' - CanCreate: true - # The maximum number of Residences a player can have. - MaxResidences: 3 - # The maximum number of physical areas a residence can have. - MaxAreasPerResidence: 2 - # The maximum number of blocks a Residence can be, East to West (X). - MaxEastWest: 16 - # (Optional) The minimum number of blocks a Residence can be, East to West (X). - MinEastWest: 3 - # The maximum number of blocks a Residence can be, North to South (Z). - MaxNorthSouth: 16 - # (Optional) The minimum number of blocks a Residence can be, North to South (Z). - MinNorthSouth: 3 - # The maximum number of blocks a Residence can be, High to Low (Y). - MaxUpDown: 256 - # (Optional) The minimum number of blocks a Residence can be, High to Low (Y). - MinUpDown: 3 - # The lowest altitude this group is allowed to protect. - MinHeight: 0 - # The highest altitude this group is allowed to protect. - MaxHeight: 255 - # The maximum recursive depth that subzones can go. - # A subzone within a subzone within the Residence zone would be a depth of 2. - # Set to 0 to disable subzones. - SubzoneDepth: 3 - # (Optional) The maximum number of blocks a Residence Subzone can be, East to West (X). - SubzoneMaxEastWest: 16 - # (Optional) The minimum number of blocks a Residence Subzone can be, East to West (X). - SubzoneMinEastWest: 3 - # (Optional) The maximum number of blocks a Residence Subzone can be, North to South (Z). - SubzoneMaxNorthSouth: 16 - # (Optional) The minimum number of blocks a Residence Subzone can be, North to South (Z). - SubzoneMinNorthSouth: 3 - # (Optional) The maximum number of blocks a Residence Subzone can be, High to Low (Y). - SubzoneMaxUpDown: 256 - # (Optional) The minimum number of blocks a Residence Subzone can be, High to Low (Y). - SubzoneMinUpDown: 3 - # Whether or not to allow teleporting to Residences. - CanTeleport: true - # Allow or Disallow the use of /res unstuck, to get yourself out of a residence if stuck in one somehow - Unstuck: true - # Allow or Disallow the use of /res kick, to kick player from residence. - Kick: False - # Allow or Disallow the use of the /res select command, if disabled they can only use the selection tool. - SelectCommandAccess: true - # Allow or Disallow the group to access the Blacklist/Ignorelist for residences they own. - ItemListAccess: true - # Options relating to enter and leave messages on the residence. - Messaging: - # Whether or not the player can change the Residence enter and leave messages. - CanChange: true - # The default enter message to apply to new Residences created by players in this group. - # Leaving the message blank will disable it. - DefaultEnter: Welcome %player to %residence, owned by %owner. - # The default leave message to apply to new Residences created by players in this group. - # Leaving the message blank will disable it. - DefaultLeave: Now leaving %residence. - # Options relating to the Lease system. - Lease: - # The maximum number of days to allow leases. - MaxDays: 16 - # The number of days to add to the lease following a '/res lease renew' command. - RenewIncrement: 14 - #Options related to the rent system - Rent: - #determines how many residences can be rented by players of this group at once - MaxRents: 3 - #determines how many residences can be set for rent by players of this group at once - MaxRentables: 3 - # determines max days player can rent residence at once - MaxRentDays: 31 - # Options relating to the Residence Economy. - Economy: - # Whether or not players in this group can buy other Residences that are for sale. - CanBuy: true - # Whether or not players in this group can sell their Residences. - CanSell: false - # Whether or not to ignore the Residence size/count limits when buying a residence. - IgnoreLimits: false - # The cost, per block, of making a new Residence or adding a area to it. - BuyCost: 0.5 - # The cost, per block, player will be getting back when removing residence. - SellCost: 0.25 - # The cost, per block, of renewing a Residence lease (if the lease system is enabled). - RenewCost: 0.2 - # Flags are checked in the order: - # 1: Player - # 2: Group - # 3: Owner - # 4: If all others are undefined, reverts to default value (usually true). - # Flag permissions default to false. - # These flags settings override the globals. - Flags: - # Specifically allow or deny this group from changing certain flags. - Permission: - #build: true - # Specifys the flags that are applied at residence creation for players of this group. - Default: - #build: true - # Specifys the flags that are applied at to the creator at residence creation. - CreatorDefault: - #build: true - # Specifys the flags that are applied to other groups for this residence, at creation. - GroupDefault: - #default: #group name - #build: false - #these flags are applied specifically to this group whenever they are outside a residence - #these flags will override the flags at the top, under the Global section. - World: - Global: #these flags will apply to all worlds - #build: false - WorldNameHere: #or you can apply them by each individual world - #build: false - NextGroup: #group name, player should have residence.group.nextgroup permission node to have access to this residence group - Residence: - CanCreate: true - MaxResidences: 4 - MaxAreasPerResidence: 2 - MaxEastWest: 20 - MaxNorthSouth: 20 - MaxUpDown: 20 - MinHeight: 0 - MaxHeight: 255 - SubzoneDepth: 3 - CanTeleport: true - Unstuck: true - Kick: true - SelectCommandAccess: true - ItemListAccess: true - Messaging: - CanChange: true - DefaultEnter: Welcome %player to %residence, owned by %owner. - DefaultLeave: Now leaving %residence. - Lease: - MaxDays: 16 - RenewIncrement: 14 - Rent: - MaxRents: 3 - MaxRentables: 3 - MaxRentDays: 31 - Economy: - CanBuy: true - CanSell: false - IgnoreLimits: false - BuyCost: 0.7 - SellCost: 0.3 - RenewCost: 0.3 - -# You can manually specify the group a player is in below, this overrides their permissions group. -GroupAssignments: - bekvon: default +# These groups correspond to the Permissions groups defined in your '.yml' +Groups: + Default: #group name, DONT remove this group + # Information about the Residence zone that the player can define. + #Uncomment the lines below to mirror this config to other groups. + #Mirror: + #- 'group1' + #- 'group2' + Residence: + # Determins if this group can create residences or not. This option can be overriden with the permissions node 'residence.create' + CanCreate: true + # The maximum number of Residences a player can have. + MaxResidences: 3 + # The maximum number of physical areas a residence can have. + MaxAreasPerResidence: 2 + # The maximum number of blocks a Residence can be, East to West (X). + MaxEastWest: 16 + # (Optional) The minimum number of blocks a Residence can be, East to West (X). + MinEastWest: 3 + # The maximum number of blocks a Residence can be, North to South (Z). + MaxNorthSouth: 16 + # (Optional) The minimum number of blocks a Residence can be, North to South (Z). + MinNorthSouth: 3 + # The maximum number of blocks a Residence can be, High to Low (Y). + MaxUpDown: 256 + # (Optional) The minimum number of blocks a Residence can be, High to Low (Y). + MinUpDown: 3 + # The lowest altitude this group is allowed to protect. + MinHeight: 0 + # The highest altitude this group is allowed to protect. + MaxHeight: 255 + # The maximum amount of subzones can current area have. + MaxSubzonesInArea: 3 + # The maximum recursive depth that subzones can go. + # A subzone within a subzone within the Residence zone would be a depth of 2. + # Set to 0 to disable subzones. + SubzoneDepth: 3 + # (Optional) The maximum number of blocks a Residence Subzone can be, East to West (X). + SubzoneMaxEastWest: 16 + # (Optional) The minimum number of blocks a Residence Subzone can be, East to West (X). + SubzoneMinEastWest: 3 + # (Optional) The maximum number of blocks a Residence Subzone can be, North to South (Z). + SubzoneMaxNorthSouth: 16 + # (Optional) The minimum number of blocks a Residence Subzone can be, North to South (Z). + SubzoneMinNorthSouth: 3 + # (Optional) The maximum number of blocks a Residence Subzone can be, High to Low (Y). + SubzoneMaxUpDown: 256 + # (Optional) The minimum number of blocks a Residence Subzone can be, High to Low (Y). + SubzoneMinUpDown: 3 + # Whether or not to allow teleporting to Residences. + CanTeleport: true + # Allow or Disallow the use of /res unstuck, to get yourself out of a residence if stuck in one somehow + Unstuck: true + # Allow or Disallow the use of /res kick, to kick player from residence. + Kick: False + # Allow or Disallow the use of the /res select command, if disabled they can only use the selection tool. + SelectCommandAccess: true + # Allow or Disallow the group to access the Blacklist/Ignorelist for residences they own. + ItemListAccess: true + # Options relating to enter and leave messages on the residence. + Messaging: + # Whether or not the player can change the Residence enter and leave messages. + CanChange: true + # The default enter message to apply to new Residences created by players in this group. + # Leaving the message blank will disable it. + DefaultEnter: Welcome %player to %residence, owned by %owner. + # The default leave message to apply to new Residences created by players in this group. + # Leaving the message blank will disable it. + DefaultLeave: Now leaving %residence. + # Options relating to the Lease system. + Lease: + # The maximum number of days to allow leases. + MaxDays: 16 + # The number of days to add to the lease following a '/res lease renew' command. + RenewIncrement: 14 + #Options related to the rent system + Rent: + #determines how many residences can be rented by players of this group at once + MaxRents: 3 + #determines how many residences can be set for rent by players of this group at once + MaxRentables: 3 + # determines max days player can rent residence at once + MaxRentDays: 31 + # Options relating to the Residence Economy. + Economy: + # Whether or not players in this group can buy other Residences that are for sale. + CanBuy: true + # Whether or not players in this group can sell their Residences. + CanSell: false + # Whether or not to ignore the Residence size/count limits when buying a residence. + IgnoreLimits: false + # The cost, per block, of making a new Residence or adding a area to it. + BuyCost: 0.5 + # The cost, per block, player will be getting back when removing residence. + SellCost: 0.25 + # The cost, per block, of renewing a Residence lease (if the lease system is enabled). + RenewCost: 0.2 + # Flags are checked in the order: + # 1: Player + # 2: Group + # 3: Owner + # 4: If all others are undefined, reverts to default value (usually true). + # Flag permissions default to false. + # These flags settings override the globals. + Flags: + # Specifically allow or deny this group from changing certain flags. + Permission: + #build: true + # Specifys the flags that are applied at residence creation for players of this group. + Default: + #build: true + # Specifys the flags that are applied at to the creator at residence creation. + CreatorDefault: + #build: true + # Specifys the flags that are applied to other groups for this residence, at creation. + GroupDefault: + #default: #group name + #build: false + #these flags are applied specifically to this group whenever they are outside a residence + #these flags will override the flags at the top, under the Global section. + World: + Global: #these flags will apply to all worlds + #build: false + WorldNameHere: #or you can apply them by each individual world + #build: false + NextGroup: #group name, player should have residence.group.nextgroup permission node to have access to this residence group + Residence: + CanCreate: true + MaxResidences: 4 + MaxAreasPerResidence: 2 + MaxEastWest: 20 + MaxNorthSouth: 20 + MaxUpDown: 20 + MinHeight: 0 + MaxHeight: 255 + SubzoneDepth: 3 + CanTeleport: true + Unstuck: true + Kick: true + SelectCommandAccess: true + ItemListAccess: true + Messaging: + CanChange: true + DefaultEnter: Welcome %player to %residence, owned by %owner. + DefaultLeave: Now leaving %residence. + Lease: + MaxDays: 16 + RenewIncrement: 14 + Rent: + MaxRents: 3 + MaxRentables: 3 + MaxRentDays: 31 + Economy: + CanBuy: true + CanSell: false + IgnoreLimits: false + BuyCost: 0.7 + SellCost: 0.3 + RenewCost: 0.3 + +# You can manually specify the group a player is in below, this overrides their permissions group. +GroupAssignments: + bekvon: default player: default \ No newline at end of file diff --git a/src/plugin.yml b/src/plugin.yml index cd7268eb5..a79471019 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.12.1 +version: 4.5.12.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 9e8191f8efd86faf226f4667906cdedbb152436c Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Dec 2016 14:47:51 +0200 Subject: [PATCH 0297/1142] new flag to disable protection from water/lave flowing into residence from outside --- .../bekvon/bukkit/residence/containers/Flags.java | 1 + .../residence/listeners/ResidenceBlockListener.java | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index d47bf1aed..a0c3efa72 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -41,6 +41,7 @@ public enum Flags { feed(364, 0, FlagMode.Residence, "Setting to true makes the residence feed its occupants", true), fireball(385, 0, FlagMode.Residence, "Allows or denys fire balls in residences", true), firespread(377, 0, FlagMode.Residence, "Allows or denys fire spread", true), + flowinprotection(333, 0, FlagMode.Residence, "Allows or denys liquid flow into residence", true), flow(111, 0, FlagMode.Residence, "Allows or denys liquid flow", true), flowerpot(390, 0, FlagMode.Both, "Allows or denys interaction with flower pot", true), grow(295, 0, FlagMode.Residence, "Allows or denys plant growing", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 1021368bf..d128e9575 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -468,16 +468,18 @@ public void onBlockFromTo(BlockFromToEvent event) { FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); boolean hasflow = perms.has(Flags.flow, FlagCombo.TrueOrNone); Material mat = event.getBlock().getType(); - if (fromRes == null && toRes != null || fromRes != null && toRes != null && !fromRes.equals(toRes) && !fromRes.isOwner(toRes.getOwner())) { - event.setCancelled(true); - return; - } + + if (perms.has(Flags.flowinprotection, FlagCombo.TrueOrNone)) + if (fromRes == null && toRes != null || fromRes != null && toRes != null && !fromRes.equals(toRes) && !fromRes.isOwner(toRes.getOwner())) { + event.setCancelled(true); + return; + } if (perms.has(Flags.flow, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } - + if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { if (!perms.has(Flags.lavaflow, hasflow)) { event.setCancelled(true); From c9dee4d2b078980548561580eb85bde437086d4c Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Dec 2016 15:11:03 +0200 Subject: [PATCH 0298/1142] allow falling blocks with new flag and allow then to fall out of residence --- .../bekvon/bukkit/residence/containers/Flags.java | 1 + .../residence/listeners/ResidenceBlockListener.java | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index a0c3efa72..be8569f43 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -37,6 +37,7 @@ public enum Flags { enchant(116, 0, FlagMode.Both, "Allows or denys players to use enchanting tables", true), explode(407, 0, FlagMode.Residence, "Allows or denys explosions in residences", true), enderpearl(368, 0, FlagMode.Both, "Allow or disallow teleporting to the residence with enderpearl", true), + fallinprotection(12, 0, FlagMode.Residence, "Protects from blocks falling into residence", true), falldamage(301, 0, FlagMode.Residence, "Protects players from fall damage", true), feed(364, 0, FlagMode.Residence, "Setting to true makes the residence feed its occupants", true), fireball(385, 0, FlagMode.Residence, "Allows or denys fire balls in residences", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index d128e9575..4a803ffcb 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -5,6 +5,8 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -223,6 +225,10 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { } else { String saved = ent.getMetadata(SourceResidenceName).get(0).asString(); ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + + if (res != null && res.getPermissions().has(Flags.fallinprotection, FlagCombo.OnlyFalse)) + return; + String resName = res == null ? "NULL" : res.getName(); if (!saved.equalsIgnoreCase(resName)) { event.setCancelled(true); @@ -262,8 +268,11 @@ public void onBlockFall(EntityChangeBlockEvent event) { loc.setY(i); if (loc.getBlock().getType() != Material.AIR) { ClaimedResidence targetRes = Residence.getResidenceManager().getByLoc(loc); - if (res == null && targetRes != null || res != null && targetRes == null || res != null && targetRes != null && !res.getName() - .equals(targetRes.getName())) { + if (targetRes == null) + continue; + if (res != null && !res.getName().equals(targetRes.getName())) { + if (targetRes.getPermissions().has(Flags.fallinprotection, FlagCombo.OnlyFalse)) + continue; event.setCancelled(true); block.setType(Material.AIR); } From 6815bc59d010006a99390605975edc61f2b9f769 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Dec 2016 17:58:08 +0200 Subject: [PATCH 0299/1142] Added new flags to separate wither damage and block destruction --- .../bukkit/residence/containers/Flags.java | 2 + .../listeners/ResidenceEntityListener.java | 50 +++++++++++++++++-- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index be8569f43..242eb140c 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -101,6 +101,8 @@ public enum Flags { use(70, 0, FlagMode.Both, "Allows or denys use of doors, lever, buttons, etc...", true), vehicledestroy(328, 0, FlagMode.Both, "Allows or denys vehicle destroy", true), witherspawn(397, 1, FlagMode.Residence, "Allows or denys wither spawning", true), + witherdamage(397, 1, FlagMode.Residence, "Allows or denys wither damage", true), + witherdestruction(397, 1, FlagMode.Residence, "Allows or denys wither block damage", true), waterflow(326, 0, FlagMode.Residence, "Allows or denys water flow, overrides flow", true), wspeed1(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true), wspeed2(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index b1e582560..37e0dab5d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -633,6 +633,13 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { ent.remove(); } break; + case WITHER: + case WITHER_SKULL: + if (perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + ent.remove(); + } + break; default: if (perms.has(Flags.destroy, FlagCombo.OnlyFalse)) { event.setCancelled(true); @@ -645,7 +652,6 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent event) { // disabling event on world - Location loc = event.getLocation(); if (Residence.isDisabledWorldListener(loc.getWorld())) return; @@ -693,6 +699,11 @@ public void onEntityExplode(EntityExplodeEvent event) { if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) cancel = true; break; + case WITHER: + case WITHER_SKULL: + if (perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) + cancel = true; + break; default: if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) cancel = true; @@ -753,9 +764,14 @@ public void onEntityExplode(EntityExplodeEvent event) { continue; case SMALL_FIREBALL: case FIREBALL: - if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) + if (blockperms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) preserve.add(block); continue; + case WITHER: + case WITHER_SKULL: + if (blockperms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) + preserve.add(block); + break; default: if (blockperms.has(Flags.destroy, FlagCombo.OnlyFalse)) preserve.add(block); @@ -786,7 +802,7 @@ public void onSplashPotion(EntityChangeBlockEvent event) { if (ent.getType() != EntityType.WITHER) return; - if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.destroy, FlagCombo.OnlyFalse)) + if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.witherdestruction, FlagCombo.OnlyFalse)) return; event.setCancelled(true); @@ -958,6 +974,25 @@ public void onEntityDamageByFireballEvent(EntityDamageByEntityEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityDamageByWitherEvent(EntityDamageByEntityEvent event) { + // disabling event on world + if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + Entity dmgr = event.getDamager(); + if (dmgr.getType() != EntityType.WITHER && dmgr.getType() != EntityType.WITHER_SKULL) + return; + + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + if (perms.has(Flags.witherdamage, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { // disabling event on world @@ -983,13 +1018,18 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (perm.has(Flags.destroy, FlagCombo.OnlyFalse)) event.setCancelled(true); return; - } else if (dmgr.getType() == EntityType.PRIMED_TNT || dmgr.getType() == EntityType.MINECART_TNT || dmgr.getType() == EntityType.WITHER_SKULL || dmgr - .getType() == EntityType.WITHER) { + } else if (dmgr.getType() == EntityType.PRIMED_TNT || dmgr.getType() == EntityType.MINECART_TNT) { FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); if (perms.has(Flags.explode, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } + } else if (dmgr.getType() == EntityType.WITHER_SKULL || dmgr.getType() == EntityType.WITHER) { + FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + if (perms.has(Flags.witherdamage, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } } Location loc = event.getEntity().getLocation(); From 71119edb176484a8903cc0a2ef66922a55a39df1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Dec 2016 18:24:30 +0200 Subject: [PATCH 0300/1142] limit shop sign board size to 16 blocks each direction max --- .../bukkit/residence/commands/shop.java | 976 +++++++++--------- .../bukkit/residence/containers/lm.java | 1 + 2 files changed, 493 insertions(+), 484 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index b306b958f..69b7f0dd9 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -1,484 +1,492 @@ -package com.bekvon.bukkit.residence.commands; - -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.TimeZone; -import java.util.Map.Entry; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.shopStuff.Board; -import com.bekvon.bukkit.residence.shopStuff.ShopListener; -import com.bekvon.bukkit.residence.shopStuff.ShopVote; -import com.bekvon.bukkit.residence.shopStuff.Vote; - -public class shop implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 1700) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - - if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("votes") || args[1].equalsIgnoreCase("likes"))) { - - int VotePage = 1; - - ClaimedResidence res = null; - if (args.length == 2) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - Residence.msg(player, lm.Residence_NotIn); - return true; - } - } else if (args.length == 3) { - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - try { - VotePage = Integer.parseInt(args[2]); - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - Residence.msg(player, lm.Residence_NotIn); - return true; - } - } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); - return true; - } - } - - } else if (args.length == 4) { - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - Residence.msg(player, lm.Residence_NotIn); - return true; - } - try { - VotePage = Integer.parseInt(args[3]); - } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); - return true; - } - } - - if (res == null) { - Residence.msg(player, lm.Residence_NotIn); - return true; - } - - List VoteList = res.GetShopVotes(); - - String separator = ChatColor.GOLD + ""; - String simbol = "\u25AC"; - for (int i = 0; i < 5; i++) { - separator += simbol; - } - int pagecount = (int) Math.ceil((double) VoteList.size() / (double) 10); - if (page > pagecount || page < 1) { - Residence.msg(sender, lm.Shop_NoVotes); - return true; - } - - Residence.msg(player, lm.Shop_VotesTopLine, separator, res.getName(), VotePage, pagecount, separator); - - int start = VotePage * 10 - 9; - int end = VotePage * 10 + 1; - int position = 0; - int i = start; - for (ShopVote one : VoteList) { - position++; - - if (position < start) - continue; - - if (position >= end) - break; - - Date dNow = new Date(one.getTime()); - SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss"); - ft.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); - String timeString = ft.format(dNow); - - String message = Residence.msg(lm.Shop_VotesList, i, one.getName(), (Residence.getConfigManager().isOnlyLike() - ? "" : one.getVote()), timeString); - player.sendMessage(message); - i++; - } - - if (pagecount == 1) - return true; - - int NextPage = page + 1; - NextPage = page < pagecount ? NextPage : page; - int Prevpage = page - 1; - Prevpage = page > 1 ? Prevpage : page; - - String prevCmd = "/res shop votes " + res.getName() + " " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; - String nextCmd = "/res shop votes " + res.getName() + " " + NextPage; - String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; - - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); - - return true; - } - if ((args.length == 2 || args.length == 3) && args[1].equalsIgnoreCase("list")) { - - int Shoppage = 1; - - if (args.length == 3) { - try { - Shoppage = Integer.parseInt(args[2]); - } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); - return true; - } - } - - Map ShopList = Residence.getShopSignUtilManager().getSortedShopList(); - - String separator = ChatColor.GOLD + ""; - String simbol = "\u25AC"; - for (int i = 0; i < 5; i++) { - separator += simbol; - } - int pagecount = (int) Math.ceil((double) ShopList.size() / (double) 10); - if (page > pagecount || page < 1) { - Residence.msg(sender, lm.Shop_NoVotes); - return true; - } - - Residence.msg(player, lm.Shop_ListTopLine, separator, Shoppage, pagecount, separator); - - int start = Shoppage * 10 - 9; - int end = Shoppage * 10 + 1; - int position = 0; - int i = start; - for (Entry one : ShopList.entrySet()) { - position++; - - if (position < start) - continue; - - if (position >= end) - break; - - Vote vote = Residence.getShopSignUtilManager().getAverageVote(one.getKey()); - String votestat = ""; - - if (Residence.getConfigManager().isOnlyLike()) { - votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListLiked, Residence.getShopSignUtilManager().getLikes(one.getKey())); - } else - votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListVoted, vote.getVote(), vote.getAmount()); - ClaimedResidence res = Residence.getResidenceManager().getByName(one.getKey()); - String owner = Residence.getResidenceManager().getByName(one.getKey()).getOwner(); - String message = Residence.msg(lm.Shop_List, i, one.getKey(), owner, votestat); - - String desc = res.getShopDesc() == null ? Residence.msg(lm.Shop_NoDesc) : Residence.msg( - lm.Shop_Desc, ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); - - String prev = "[\"\",{\"text\":\"" + " " + message - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/res tp " + one.getKey() - + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; - - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev); - - i++; - } - - if (pagecount == 1) - return true; - - int NextPage = page + 1; - NextPage = page < pagecount ? NextPage : page; - int Prevpage = page - 1; - Prevpage = page > 1 ? Prevpage : page; - - String prevCmd = "/res shop list " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; - String nextCmd = "/res shop list " + NextPage; - String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; - - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); - - return true; - } - - if (args.length == 2 && args[1].equalsIgnoreCase("DeleteBoard")) { - - if (!resadmin) { - Residence.msg(player, lm.General_AdminOnly); - return true; - } - - ShopListener.Delete.add(player.getName()); - Residence.msg(player, lm.Shop_DeleteBoard); - return true; - } - if (args.length > 2 && args[1].equalsIgnoreCase("setdesc")) { - - ClaimedResidence res = null; - - String desc = ""; - if (args.length >= 2) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - Residence.msg(player, lm.Residence_NotIn); - return true; - } - for (int i = 2; i < args.length; i++) { - desc += args[i]; - if (i < args.length - 1) - desc += " "; - } - } - - if (res == null) - return true; - - if (!res.isOwner(player) && !resadmin) { - Residence.msg(player, lm.Residence_NonAdmin); - return true; - } - - res.setShopDesc(desc); - Residence.msg(player, lm.Shop_DescChange, ChatColor.translateAlternateColorCodes('&', desc)); - return true; - } - if (args.length == 3 && args[1].equalsIgnoreCase("createboard")) { - - if (!resadmin) { - Residence.msg(player, lm.General_AdminOnly); - return true; - } - - if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - Residence.msg(player, lm.Select_Points); - return true; - } - - int place = 1; - try { - place = Integer.parseInt(args[2]); - } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); - return true; - } - - if (place < 1) - place = 1; - - Location loc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); - Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); - - if (loc1.getBlockY() < loc2.getBlockY()) { - Residence.msg(player, lm.Shop_InvalidSelection); - return true; - } - - Board newTemp = new Board(); - newTemp.setStartPlace(place); - newTemp.setTopLoc(loc1); - newTemp.setBottomLoc(loc2); - - if (Residence.getShopSignUtilManager().exist(newTemp)){ - sender.sendMessage(Residence.msg(lm.Shop_BoardExist)); - return true; - } - - Residence.getShopSignUtilManager().addBoard(newTemp); - Residence.msg(player, lm.Shop_NewBoard); - - Residence.getShopSignUtilManager().BoardUpdate(); - Residence.getShopSignUtilManager().saveSigns(); - - return true; - - } - if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("vote") || args[1].equalsIgnoreCase("like"))) { - String resName = ""; - int vote = 5; - ClaimedResidence res = null; - if (args.length == 3) { - - if (Residence.getConfigManager().isOnlyLike()) { - - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - vote = Residence.getConfigManager().getVoteRangeTo(); - - } else { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - Residence.msg(player, lm.Residence_NotIn); - return true; - } - - try { - vote = Integer.parseInt(args[2]); - } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); - return true; - } - } - } else if (args.length == 2 && Residence.getConfigManager().isOnlyLike()) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - Residence.msg(player, lm.Residence_NotIn); - return true; - } - vote = Residence.getConfigManager().getVoteRangeTo(); - } else if (args.length == 4 && !Residence.getConfigManager().isOnlyLike()) { - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - try { - vote = Integer.parseInt(args[3]); - } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); - return true; - } - } else if (args.length == 3 && !Residence.getConfigManager().isOnlyLike()) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - try { - vote = Integer.parseInt(args[3]); - } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); - return true; - } - } else { - return false; - } - - resName = res.getName(); - - if (!res.getPermissions().has("shop", false)) { - Residence.msg(player, lm.Shop_CantVote); - return true; - } - - if (vote < Residence.getConfigManager().getVoteRangeFrom() || vote > Residence.getConfigManager().getVoteRangeTo()) { - Residence.msg(player, lm.Shop_VotedRange, Residence.getConfigManager().getVoteRangeFrom(), Residence - .getConfigManager().getVoteRangeTo()); - return true; - } - -// ConcurrentHashMap> VoteList = Residence.getShopSignUtilManager().GetAllVoteList(); - - if (!res.GetShopVotes().isEmpty()) { - List list = res.GetShopVotes(); - boolean found = false; - for (ShopVote OneVote : list) { - if (OneVote.getName().equalsIgnoreCase(player.getName()) || OneVote.getUuid() != null && OneVote.getUuid() == player.getUniqueId()) { - if (Residence.getConfigManager().isOnlyLike()) { - Residence.msg(player, lm.Shop_AlreadyLiked, resName); - return true; - } - Residence.msg(player, lm.Shop_VoteChanged, OneVote.getVote(), vote, resName); - OneVote.setVote(vote); - OneVote.setName(player.getName()); - OneVote.setTime(System.currentTimeMillis()); - found = true; - break; - } - } - if (!found) { - ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); - list.add(newVote); - if (Residence.getConfigManager().isOnlyLike()) - Residence.msg(player, lm.Shop_Liked, resName); - else - Residence.msg(player, lm.Shop_Voted, vote, resName); - } - } else { - ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); - res.addShopVote(newVote); - if (Residence.getConfigManager().isOnlyLike()) - Residence.msg(player, lm.Shop_Liked, resName); - else - Residence.msg(player, lm.Shop_Voted, vote, resName); - } - Residence.getShopSignUtilManager().saveShopVotes(); - Residence.getShopSignUtilManager().BoardUpdate(); - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manage residence shop"); - c.get(path + "Info", Arrays.asList("Manages residence shop feature")); - - // Sub commands - path += "SubCommands."; - c.get(path + "list.Description", "Shows list of res shops"); - c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res shop list", "Shows full list of all residences with shop flag")); - - c.get(path + "vote.Description", "Vote for residence shop"); - c.get(path + "vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", "Votes for current or defined residence")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "vote"), Arrays.asList("[residence]", "10")); - - c.get(path + "like.Description", "Give like for residence shop"); - c.get(path + "like.Info", Arrays.asList("&eUsage: &6/res shop like ", "Gives like for residence shop")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "like"), Arrays.asList("[residenceshop]")); - - c.get(path + "votes.Description", "Shows res shop votes"); - c.get(path + "votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", "Shows full vote list of current or defined residence shop")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "votes"), Arrays.asList("[residenceshop]")); - - c.get(path + "likes.Description", "Shows res shop likes"); - c.get(path + "likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", "Shows full like list of current or defined residence shop")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "likes"), Arrays.asList("[residenceshop]")); - - c.get(path + "setdesc.Description", "Sets residence shop description"); - c.get(path + "setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n")); - - c.get(path + "createboard.Description", "Create res shop board"); - c.get(path + "createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", - "Creates res shop board from selected area. Place - position from which to start filling board")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "createboard"), Arrays.asList("1")); - - c.get(path + "deleteboard.Description", "Deletes res shop board"); - c.get(path + "deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", "Deletes res shop board bi right clicking on one of signs")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.TimeZone; +import java.util.Map.Entry; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.shopStuff.Board; +import com.bekvon.bukkit.residence.shopStuff.ShopListener; +import com.bekvon.bukkit.residence.shopStuff.ShopVote; +import com.bekvon.bukkit.residence.shopStuff.Vote; + +public class shop implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 1700) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + + if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("votes") || args[1].equalsIgnoreCase("likes"))) { + + int VotePage = 1; + + ClaimedResidence res = null; + if (args.length == 2) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + Residence.msg(player, lm.Residence_NotIn); + return true; + } + } else if (args.length == 3) { + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + try { + VotePage = Integer.parseInt(args[2]); + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + Residence.msg(player, lm.Residence_NotIn); + return true; + } + } catch (Exception ex) { + Residence.msg(player, lm.General_UseNumbers); + return true; + } + } + + } else if (args.length == 4) { + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + Residence.msg(player, lm.Residence_NotIn); + return true; + } + try { + VotePage = Integer.parseInt(args[3]); + } catch (Exception ex) { + Residence.msg(player, lm.General_UseNumbers); + return true; + } + } + + if (res == null) { + Residence.msg(player, lm.Residence_NotIn); + return true; + } + + List VoteList = res.GetShopVotes(); + + String separator = ChatColor.GOLD + ""; + String simbol = "\u25AC"; + for (int i = 0; i < 5; i++) { + separator += simbol; + } + int pagecount = (int) Math.ceil((double) VoteList.size() / (double) 10); + if (page > pagecount || page < 1) { + Residence.msg(sender, lm.Shop_NoVotes); + return true; + } + + Residence.msg(player, lm.Shop_VotesTopLine, separator, res.getName(), VotePage, pagecount, separator); + + int start = VotePage * 10 - 9; + int end = VotePage * 10 + 1; + int position = 0; + int i = start; + for (ShopVote one : VoteList) { + position++; + + if (position < start) + continue; + + if (position >= end) + break; + + Date dNow = new Date(one.getTime()); + SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss"); + ft.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); + String timeString = ft.format(dNow); + + String message = Residence.msg(lm.Shop_VotesList, i, one.getName(), (Residence.getConfigManager().isOnlyLike() + ? "" : one.getVote()), timeString); + player.sendMessage(message); + i++; + } + + if (pagecount == 1) + return true; + + int NextPage = page + 1; + NextPage = page < pagecount ? NextPage : page; + int Prevpage = page - 1; + Prevpage = page > 1 ? Prevpage : page; + + String prevCmd = "/res shop votes " + res.getName() + " " + Prevpage; + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; + String nextCmd = "/res shop votes " + res.getName() + " " + NextPage; + String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); + + return true; + } + if ((args.length == 2 || args.length == 3) && args[1].equalsIgnoreCase("list")) { + + int Shoppage = 1; + + if (args.length == 3) { + try { + Shoppage = Integer.parseInt(args[2]); + } catch (Exception ex) { + Residence.msg(player, lm.General_UseNumbers); + return true; + } + } + + Map ShopList = Residence.getShopSignUtilManager().getSortedShopList(); + + String separator = ChatColor.GOLD + ""; + String simbol = "\u25AC"; + for (int i = 0; i < 5; i++) { + separator += simbol; + } + int pagecount = (int) Math.ceil((double) ShopList.size() / (double) 10); + if (page > pagecount || page < 1) { + Residence.msg(sender, lm.Shop_NoVotes); + return true; + } + + Residence.msg(player, lm.Shop_ListTopLine, separator, Shoppage, pagecount, separator); + + int start = Shoppage * 10 - 9; + int end = Shoppage * 10 + 1; + int position = 0; + int i = start; + for (Entry one : ShopList.entrySet()) { + position++; + + if (position < start) + continue; + + if (position >= end) + break; + + Vote vote = Residence.getShopSignUtilManager().getAverageVote(one.getKey()); + String votestat = ""; + + if (Residence.getConfigManager().isOnlyLike()) { + votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListLiked, Residence.getShopSignUtilManager().getLikes(one.getKey())); + } else + votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListVoted, vote.getVote(), vote.getAmount()); + ClaimedResidence res = Residence.getResidenceManager().getByName(one.getKey()); + String owner = Residence.getResidenceManager().getByName(one.getKey()).getOwner(); + String message = Residence.msg(lm.Shop_List, i, one.getKey(), owner, votestat); + + String desc = res.getShopDesc() == null ? Residence.msg(lm.Shop_NoDesc) : Residence.msg( + lm.Shop_Desc, ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); + + String prev = "[\"\",{\"text\":\"" + " " + message + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/res tp " + one.getKey() + + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev); + + i++; + } + + if (pagecount == 1) + return true; + + int NextPage = page + 1; + NextPage = page < pagecount ? NextPage : page; + int Prevpage = page - 1; + Prevpage = page > 1 ? Prevpage : page; + + String prevCmd = "/res shop list " + Prevpage; + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; + String nextCmd = "/res shop list " + NextPage; + String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); + + return true; + } + + if (args.length == 2 && args[1].equalsIgnoreCase("DeleteBoard")) { + + if (!resadmin) { + Residence.msg(player, lm.General_AdminOnly); + return true; + } + + ShopListener.Delete.add(player.getName()); + Residence.msg(player, lm.Shop_DeleteBoard); + return true; + } + if (args.length > 2 && args[1].equalsIgnoreCase("setdesc")) { + + ClaimedResidence res = null; + + String desc = ""; + if (args.length >= 2) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + Residence.msg(player, lm.Residence_NotIn); + return true; + } + for (int i = 2; i < args.length; i++) { + desc += args[i]; + if (i < args.length - 1) + desc += " "; + } + } + + if (res == null) + return true; + + if (!res.isOwner(player) && !resadmin) { + Residence.msg(player, lm.Residence_NonAdmin); + return true; + } + + res.setShopDesc(desc); + Residence.msg(player, lm.Shop_DescChange, ChatColor.translateAlternateColorCodes('&', desc)); + return true; + } + if (args.length == 3 && args[1].equalsIgnoreCase("createboard")) { + + if (!resadmin) { + Residence.msg(player, lm.General_AdminOnly); + return true; + } + + if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + Residence.msg(player, lm.Select_Points); + return true; + } + + int place = 1; + try { + place = Integer.parseInt(args[2]); + } catch (Exception ex) { + Residence.msg(player, lm.General_UseNumbers); + return true; + } + + if (place < 1) + place = 1; + + CuboidArea cuboid = Residence.getSelectionManager().getSelectionCuboid(player); + + if (cuboid.getXSize() > 16 || cuboid.getYSize() > 16 || cuboid.getZSize() > 16) { + Residence.msg(player, lm.Shop_ToBigSelection); + return true; + } + + Location loc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); + Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); + + if (loc1.getBlockY() < loc2.getBlockY()) { + Residence.msg(player, lm.Shop_InvalidSelection); + return true; + } + + Board newTemp = new Board(); + newTemp.setStartPlace(place); + newTemp.setTopLoc(loc1); + newTemp.setBottomLoc(loc2); + + if (Residence.getShopSignUtilManager().exist(newTemp)) { + sender.sendMessage(Residence.msg(lm.Shop_BoardExist)); + return true; + } + + Residence.getShopSignUtilManager().addBoard(newTemp); + Residence.msg(player, lm.Shop_NewBoard); + + Residence.getShopSignUtilManager().BoardUpdate(); + Residence.getShopSignUtilManager().saveSigns(); + + return true; + + } + if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("vote") || args[1].equalsIgnoreCase("like"))) { + String resName = ""; + int vote = 5; + ClaimedResidence res = null; + if (args.length == 3) { + + if (Residence.getConfigManager().isOnlyLike()) { + + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return true; + } + vote = Residence.getConfigManager().getVoteRangeTo(); + + } else { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + Residence.msg(player, lm.Residence_NotIn); + return true; + } + + try { + vote = Integer.parseInt(args[2]); + } catch (Exception ex) { + Residence.msg(player, lm.General_UseNumbers); + return true; + } + } + } else if (args.length == 2 && Residence.getConfigManager().isOnlyLike()) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + Residence.msg(player, lm.Residence_NotIn); + return true; + } + vote = Residence.getConfigManager().getVoteRangeTo(); + } else if (args.length == 4 && !Residence.getConfigManager().isOnlyLike()) { + res = Residence.getResidenceManager().getByName(args[2]); + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return true; + } + try { + vote = Integer.parseInt(args[3]); + } catch (Exception ex) { + Residence.msg(player, lm.General_UseNumbers); + return true; + } + } else if (args.length == 3 && !Residence.getConfigManager().isOnlyLike()) { + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return true; + } + try { + vote = Integer.parseInt(args[3]); + } catch (Exception ex) { + Residence.msg(player, lm.General_UseNumbers); + return true; + } + } else { + return false; + } + + resName = res.getName(); + + if (!res.getPermissions().has("shop", false)) { + Residence.msg(player, lm.Shop_CantVote); + return true; + } + + if (vote < Residence.getConfigManager().getVoteRangeFrom() || vote > Residence.getConfigManager().getVoteRangeTo()) { + Residence.msg(player, lm.Shop_VotedRange, Residence.getConfigManager().getVoteRangeFrom(), Residence + .getConfigManager().getVoteRangeTo()); + return true; + } + +// ConcurrentHashMap> VoteList = Residence.getShopSignUtilManager().GetAllVoteList(); + + if (!res.GetShopVotes().isEmpty()) { + List list = res.GetShopVotes(); + boolean found = false; + for (ShopVote OneVote : list) { + if (OneVote.getName().equalsIgnoreCase(player.getName()) || OneVote.getUuid() != null && OneVote.getUuid() == player.getUniqueId()) { + if (Residence.getConfigManager().isOnlyLike()) { + Residence.msg(player, lm.Shop_AlreadyLiked, resName); + return true; + } + Residence.msg(player, lm.Shop_VoteChanged, OneVote.getVote(), vote, resName); + OneVote.setVote(vote); + OneVote.setName(player.getName()); + OneVote.setTime(System.currentTimeMillis()); + found = true; + break; + } + } + if (!found) { + ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); + list.add(newVote); + if (Residence.getConfigManager().isOnlyLike()) + Residence.msg(player, lm.Shop_Liked, resName); + else + Residence.msg(player, lm.Shop_Voted, vote, resName); + } + } else { + ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); + res.addShopVote(newVote); + if (Residence.getConfigManager().isOnlyLike()) + Residence.msg(player, lm.Shop_Liked, resName); + else + Residence.msg(player, lm.Shop_Voted, vote, resName); + } + Residence.getShopSignUtilManager().saveShopVotes(); + Residence.getShopSignUtilManager().BoardUpdate(); + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manage residence shop"); + c.get(path + "Info", Arrays.asList("Manages residence shop feature")); + + // Sub commands + path += "SubCommands."; + c.get(path + "list.Description", "Shows list of res shops"); + c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res shop list", "Shows full list of all residences with shop flag")); + + c.get(path + "vote.Description", "Vote for residence shop"); + c.get(path + "vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", "Votes for current or defined residence")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "vote"), Arrays.asList("[residence]", "10")); + + c.get(path + "like.Description", "Give like for residence shop"); + c.get(path + "like.Info", Arrays.asList("&eUsage: &6/res shop like ", "Gives like for residence shop")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "like"), Arrays.asList("[residenceshop]")); + + c.get(path + "votes.Description", "Shows res shop votes"); + c.get(path + "votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", "Shows full vote list of current or defined residence shop")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "votes"), Arrays.asList("[residenceshop]")); + + c.get(path + "likes.Description", "Shows res shop likes"); + c.get(path + "likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", "Shows full like list of current or defined residence shop")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "likes"), Arrays.asList("[residenceshop]")); + + c.get(path + "setdesc.Description", "Sets residence shop description"); + c.get(path + "setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n")); + + c.get(path + "createboard.Description", "Create res shop board"); + c.get(path + "createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", + "Creates res shop board from selected area. Place - position from which to start filling board")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "createboard"), Arrays.asList("1")); + + c.get(path + "deleteboard.Description", "Deletes res shop board"); + c.get(path + "deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", "Deletes res shop board bi right clicking on one of signs")); + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index c881b3b9f..3aa76f449 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -331,6 +331,7 @@ public enum lm { Shop_DeletedBoard("&6Sign board removed"), Shop_IncorrectBoard("&cThis is not sign board, try performing command again and clicking correct sign"), Shop_InvalidSelection("&cLeft click with selection tool top left sign and then right click bottom right"), + Shop_ToBigSelection("&cYour selection is too big, max allowed is 16 blocks"), Shop_VoteChanged("&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence"), Shop_Voted("&6You voted, and gave &e%1 &6votes to &e%2 &6residence"), Shop_Liked("&6You liked &e%1 &6residence"), From 2cfd3cf07f57fd787c6053a5d8a7e2c27f30c8a9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Dec 2016 18:32:04 +0200 Subject: [PATCH 0301/1142] Ignore potion splash if shooter is Witch --- .../residence/listeners/ResidenceEntityListener.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 37e0dab5d..74c8f36c3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -41,6 +41,7 @@ import org.bukkit.entity.Projectile; import org.bukkit.entity.Tameable; import org.bukkit.entity.Vehicle; +import org.bukkit.entity.Witch; import org.bukkit.entity.minecart.HopperMinecart; import org.bukkit.entity.Slime; import org.bukkit.entity.Ghast; @@ -56,6 +57,7 @@ import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.potion.PotionEffect; +import org.bukkit.projectiles.ProjectileSource; public class ResidenceEntityListener implements Listener { @@ -770,7 +772,7 @@ public void onEntityExplode(EntityExplodeEvent event) { case WITHER: case WITHER_SKULL: if (blockperms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) - preserve.add(block); + preserve.add(block); break; default: if (blockperms.has(Flags.destroy, FlagCombo.OnlyFalse)) @@ -816,6 +818,11 @@ public void onSplashPotion(PotionSplashEvent event) { if (event.isCancelled()) return; + ProjectileSource shooter = event.getPotion().getShooter(); + + if (shooter instanceof Witch) + return; + boolean harmfull = false; mein: for (PotionEffect one : event.getPotion().getEffects()) { for (String oneHarm : Residence.getConfigManager().getNegativePotionEffects()) { From 3974cf223420fc584a2daa7c70445f28801f26a7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Dec 2016 18:52:52 +0200 Subject: [PATCH 0302/1142] Slight change in worldGuard support to be supportive for older versions --- .../bekvon/bukkit/residence/Residence.java | 38 ++- .../bukkit/residence/commands/area.java | 252 +++++++-------- .../bukkit/residence/commands/contract.java | 224 +++++++------- .../bukkit/residence/commands/create.java | 149 +++++---- .../bukkit/residence/commands/expand.java | 4 +- .../bukkit/residence/commands/subzone.java | 142 ++++----- .../listeners/ResidencePlayerListener.java | 2 +- .../selection/SchematicsManager.java | 292 +++++++++--------- .../selection/WorldEditSelectionManager.java | 2 +- .../residence/selection/WorldGuardUtil.java | 90 +++--- 10 files changed, 605 insertions(+), 590 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index bb6a289af..64270345b 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -84,6 +84,7 @@ import com.bekvon.bukkit.residence.selection.SchematicsManager; import com.bekvon.bukkit.residence.selection.SelectionManager; import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; +import com.bekvon.bukkit.residence.selection.WorldGuardUtil; import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; import com.bekvon.bukkit.residence.signsStuff.SignUtil; @@ -167,6 +168,7 @@ public class Residence extends JavaPlugin { protected static AutoSelection AutoSelectionManager; protected static SchematicsManager SchematicManager; private static InformationPager InformationPagerManager; + private static WorldGuardUtil worldGuardUtil; protected static CommandFiller cmdFiller; @@ -192,9 +194,9 @@ public class Residence extends JavaPlugin { private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW" }; public static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); private static Map cachedPlayerNameUUIDs = new HashMap(); - public static WorldEditPlugin wep = null; - public static WorldGuardPlugin wg = null; - public static int wepid; + private static WorldEditPlugin wep = null; + private static WorldGuardPlugin wg = null; + private static int wepid; private static String ServerLandname = "Server_Land"; private static String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; @@ -835,8 +837,8 @@ private void setWorldEdit() { Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); if (plugin != null) { smanager = new WorldEditSelectionManager(server, this); - wep = (WorldEditPlugin) plugin; - wepid = Residence.wep.getConfig().getInt("wand-item"); + this.wep = (WorldEditPlugin) plugin; + wepid = this.getWorldEdit().getConfig().getInt("wand-item"); Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found WorldEdit"); } else { smanager = new SelectionManager(server, this); @@ -844,12 +846,11 @@ private void setWorldEdit() { } } - private static void setWorldGuard() { + private void setWorldGuard() { Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); if (wgplugin != null) { try { Class.forName("com.sk89q.worldedit.BlockVector"); - Class.forName("com.sk89q.worldguard.bukkit.RegionContainer"); Class.forName("com.sk89q.worldguard.protection.ApplicableRegionSet"); Class.forName("com.sk89q.worldguard.protection.managers.RegionManager"); Class.forName("com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion"); @@ -1008,10 +1009,6 @@ public static ChatManager getChatManager() { return chatmanager; } - public static WorldEditPlugin getWEplugin() { - return wep; - } - public static String getResidenceVersion() { return ResidenceVersion; } @@ -1705,4 +1702,23 @@ public static void addCachedPlayerNameUUIDs(UUID uuid, String name) { public static void addCachedPlayerNameUUIDs(Map cachedPlayerNameUUIDs2) { cachedPlayerNameUUIDs.putAll(cachedPlayerNameUUIDs2); } + + public static WorldEditPlugin getWorldEdit() { + return wep; + } + + public static WorldGuardPlugin getWorldGuard() { + return wg; + } + + public static int getWepid() { + return wepid; + } + + public static WorldGuardUtil getWorldGuardUtil() { + if (worldGuardUtil == null) + worldGuardUtil = new WorldGuardUtil(); + return worldGuardUtil; + } + } diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index dedee8356..11217fd6d 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -1,126 +1,126 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class area implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 3300) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - - if (args.length == 4) { - if (args[1].equals("remove")) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res != null) { - res.removeArea(player, args[3], resadmin); - } else { - Residence.msg(player, lm.Invalid_Residence); - } - return true; - } else if (args[1].equals("add")) { - if (Residence.getWEplugin() != null) { - if (Residence.getWEplugin().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { - Residence.getSelectionManager().worldEdit(player); - } - } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res != null) { - if (res.addArea(player, Residence.getSelectionManager().getSelectionCuboid(player), args[3], resadmin)) - Residence.msg(player, lm.Area_Create, args[3]); - } else { - Residence.msg(player, lm.Invalid_Residence); - } - } else { - Residence.msg(player, lm.Select_Points); - } - return true; - } else if (args[1].equals("replace")) { - if (Residence.getWEplugin() != null) { - if (Residence.getWEplugin().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { - Residence.getSelectionManager().worldEdit(player); - } - } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res != null) { - res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), args[3], resadmin); - } else { - Residence.msg(player, lm.Invalid_Residence); - } - } else { - Residence.msg(player, lm.Select_Points); - } - return true; - } - } - if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res != null) { - res.printAreaList(player, page); - } else { - Residence.msg(player, lm.Invalid_Residence); - } - return true; - } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res != null) { - res.printAdvancedAreaList(player, page); - } else { - Residence.msg(player, lm.Invalid_Residence); - } - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manage physical areas for a residence."); - // Sub commands - path += "SubCommands."; - c.get(path + "list.Description", "List physical areas in a residence"); - c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res area list [residence] ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("[residence]")); - - c.get(path + "listall.Description", "List coordinates and other Info for areas"); - c.get(path + "listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "listall"), Arrays.asList("[residence]")); - - c.get(path + "add.Description", "Add physical areas to a residence"); - c.get(path + "add.Info", Arrays.asList("&eUsage: &6/res area add [residence] [areaID]", "You must first select two points first.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "add"), Arrays.asList("[residence]")); - - c.get(path + "remove.Description", "Remove physical areas from a residence"); - c.get(path + "remove.Info", Arrays.asList("&eUsage: &6/res area remove [residence] [areaID]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "remove"), Arrays.asList("[residence]")); - - c.get(path + "replace.Description", "Replace physical areas in a residence"); - c.get(path + "replace.Info", Arrays.asList("&eUsage: &6/res area replace [residence] [areaID]", - "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "replace"), Arrays.asList("[residence]")); - - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class area implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3300) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + + if (args.length == 4) { + if (args[1].equals("remove")) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res != null) { + res.removeArea(player, args[3], resadmin); + } else { + Residence.msg(player, lm.Invalid_Residence); + } + return true; + } else if (args[1].equals("add")) { + if (Residence.getWorldEdit() != null) { + if (Residence.getWorldEdit().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { + Residence.getSelectionManager().worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res != null) { + if (res.addArea(player, Residence.getSelectionManager().getSelectionCuboid(player), args[3], resadmin)) + Residence.msg(player, lm.Area_Create, args[3]); + } else { + Residence.msg(player, lm.Invalid_Residence); + } + } else { + Residence.msg(player, lm.Select_Points); + } + return true; + } else if (args[1].equals("replace")) { + if (Residence.getWorldEdit() != null) { + if (Residence.getWorldEdit().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { + Residence.getSelectionManager().worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res != null) { + res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), args[3], resadmin); + } else { + Residence.msg(player, lm.Invalid_Residence); + } + } else { + Residence.msg(player, lm.Select_Points); + } + return true; + } + } + if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res != null) { + res.printAreaList(player, page); + } else { + Residence.msg(player, lm.Invalid_Residence); + } + return true; + } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { + ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (res != null) { + res.printAdvancedAreaList(player, page); + } else { + Residence.msg(player, lm.Invalid_Residence); + } + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manage physical areas for a residence."); + // Sub commands + path += "SubCommands."; + c.get(path + "list.Description", "List physical areas in a residence"); + c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res area list [residence] ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("[residence]")); + + c.get(path + "listall.Description", "List coordinates and other Info for areas"); + c.get(path + "listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "listall"), Arrays.asList("[residence]")); + + c.get(path + "add.Description", "Add physical areas to a residence"); + c.get(path + "add.Info", Arrays.asList("&eUsage: &6/res area add [residence] [areaID]", "You must first select two points first.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "add"), Arrays.asList("[residence]")); + + c.get(path + "remove.Description", "Remove physical areas from a residence"); + c.get(path + "remove.Info", Arrays.asList("&eUsage: &6/res area remove [residence] [areaID]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "remove"), Arrays.asList("[residence]")); + + c.get(path + "replace.Description", "Replace physical areas in a residence"); + c.get(path + "replace.Info", Arrays.asList("&eUsage: &6/res area replace [residence] [areaID]", + "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "replace"), Arrays.asList("[residence]")); + + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index ea3f84987..e69b72c6f 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -1,112 +1,112 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; - -public class contract implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 1900) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - ClaimedResidence res = null; - if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 3) - res = Residence.getResidenceManager().getByName(args[1]); - else - return false; - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - - if (res.isSubzone() && !player.hasPermission("residence.contract.subzone") && !resadmin) { - Residence.msg(player, lm.Subzone_CantContract); - return false; - } - - if (!res.isSubzone() && !player.hasPermission("residence.contract") && !resadmin) { - Residence.msg(player, lm.Residence_CantContractResidence); - return false; - } - - String resName = res.getName(); - CuboidArea area = null; - String areaName = null; - - if (args.length == 2) { - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - } else if (args.length == 3) { - areaName = res.isSubzone() ? Residence.getResidenceManager().getSubzoneNameByRes(res) : "main"; - area = res.getCuboidAreabyName(areaName); - } - - if (area != null) { - Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); - Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); - Residence.msg(player, lm.Select_Area, areaName, resName); - } else { - Residence.msg(player, lm.Area_NonExist); - return true; - } - int amount = -1; - try { - if (args.length == 2) - amount = Integer.parseInt(args[1]); - else if (args.length == 3) - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Amount); - return true; - } - - if (amount > 1000) { - Residence.msg(player, lm.Invalid_Amount); - return true; - } - - if (amount < 0) - amount = 1; - - if (!Residence.getSelectionManager().contract(player, amount)) - return true; - - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.getWEplugin() != null) { - if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) { - Residence.getSelectionManager().worldEdit(player); - } - } - res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); - return true; - } - Residence.msg(player, lm.Select_Points); - - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Contracts residence in direction you looking"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res contract (residence) [amount]", "Contracts residence in direction you looking.", - "Residence name is optional")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1", "1")); - } - -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; + +public class contract implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 1900) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + ClaimedResidence res = null; + if (args.length == 2) + res = Residence.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 3) + res = Residence.getResidenceManager().getByName(args[1]); + else + return false; + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return true; + } + + if (res.isSubzone() && !player.hasPermission("residence.contract.subzone") && !resadmin) { + Residence.msg(player, lm.Subzone_CantContract); + return false; + } + + if (!res.isSubzone() && !player.hasPermission("residence.contract") && !resadmin) { + Residence.msg(player, lm.Residence_CantContractResidence); + return false; + } + + String resName = res.getName(); + CuboidArea area = null; + String areaName = null; + + if (args.length == 2) { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } else if (args.length == 3) { + areaName = res.isSubzone() ? Residence.getResidenceManager().getSubzoneNameByRes(res) : "main"; + area = res.getCuboidAreabyName(areaName); + } + + if (area != null) { + Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); + Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); + Residence.msg(player, lm.Select_Area, areaName, resName); + } else { + Residence.msg(player, lm.Area_NonExist); + return true; + } + int amount = -1; + try { + if (args.length == 2) + amount = Integer.parseInt(args[1]); + else if (args.length == 3) + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + Residence.msg(player, lm.Invalid_Amount); + return true; + } + + if (amount > 1000) { + Residence.msg(player, lm.Invalid_Amount); + return true; + } + + if (amount < 0) + amount = 1; + + if (!Residence.getSelectionManager().contract(player, amount)) + return true; + + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + if (Residence.getWorldEdit() != null) { + if (Residence.getWepid() == Residence.getConfigManager().getSelectionTooldID()) { + Residence.getSelectionManager().worldEdit(player); + } + } + res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); + return true; + } + Residence.msg(player, lm.Select_Points); + + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Contracts residence in direction you looking"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res contract (residence) [amount]", "Contracts residence in direction you looking.", + "Residence name is optional")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1", "1")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 73bcbd496..152819ad5 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -1,75 +1,74 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Location; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.Visualizer; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.selection.WorldGuardUtil; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; - -public class create implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 100) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (args.length != 2) { - return false; - } - - if (Residence.getWEplugin() != null) { - if (Residence.getWEplugin().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { - Residence.getSelectionManager().worldEdit(player); - } - } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.wg != null) { - if (WorldGuardUtil.isSelectionInRegion(player) == null) { - Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence - .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); - return true; - } - ProtectedRegion Region = WorldGuardUtil.isSelectionInRegion(player); - Residence.msg(player, lm.Select_WorldGuardOverlap, Region.getId()); - - Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), - Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); - - Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), - Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); - - Visualizer v = new Visualizer(player); - v.setAreas(Residence.getSelectionManager().getSelectionCuboid(player)); - v.setErrorAreas(new CuboidArea(lowLoc, highLoc)); - - Residence.getSelectionManager().showBounds(player, v); - return true; - } - Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence - .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); - return true; - } - Residence.msg(player, lm.Select_Points); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - // Main command - c.get(path + "Description", "Create Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res create ")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; + +public class create implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 100) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 2) { + return false; + } + + if (Residence.getWorldEdit() != null) { + if (Residence.getWorldEdit().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { + Residence.getSelectionManager().worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + if (Residence.getWorldGuard() != null) { + if (Residence.getWorldGuardUtil().isSelectionInRegion(player) == null) { + Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence + .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); + return true; + } + ProtectedRegion Region = Residence.getWorldGuardUtil().isSelectionInRegion(player); + Residence.msg(player, lm.Select_WorldGuardOverlap, Region.getId()); + + Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), + Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); + + Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), + Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); + + Visualizer v = new Visualizer(player); + v.setAreas(Residence.getSelectionManager().getSelectionCuboid(player)); + v.setErrorAreas(new CuboidArea(lowLoc, highLoc)); + + Residence.getSelectionManager().showBounds(player, v); + return true; + } + Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence + .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); + return true; + } + Residence.msg(player, lm.Select_Points); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Create Residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res create ")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 38d232ab6..20ac9418a 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -89,8 +89,8 @@ else if (args.length == 3) Residence.getSelectionManager().modify(player, false, amount); if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.wep != null) { - if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) { + if (Residence.getWorldEdit() != null) { + if (Residence.getWepid() == Residence.getConfigManager().getSelectionTooldID()) { Residence.getSelectionManager().worldEdit(player); } } diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index fa609486a..9a9482699 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -1,71 +1,71 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class subzone implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 2100) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (args.length != 2 && args.length != 3) { - return false; - } - String zname; - String parent; - if (args.length == 2) { - parent = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - zname = args[1]; - } else { - parent = args[1]; - zname = args[2]; - } - - if (Residence.getWEplugin() != null) { - if (Residence.getWEplugin().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { - Residence.getSelectionManager().worldEdit(player); - } - } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = Residence.getResidenceManager().getByName(parent); - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - - if (!player.hasPermission("residence.create.subzone") && !resadmin) { - Residence.msg(player, lm.Subzone_CantCreate); - return false; - } - - res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), - zname, resadmin); - } else { - Residence.msg(player, lm.Select_Points); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Create subzones in residences."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res subzone [subzone name]", - "If residence name is left off, will attempt to use residence your standing in.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } - -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class subzone implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 2100) + public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 2 && args.length != 3) { + return false; + } + String zname; + String parent; + if (args.length == 2) { + parent = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + zname = args[1]; + } else { + parent = args[1]; + zname = args[2]; + } + + if (Residence.getWorldEdit() != null) { + if (Residence.getWorldEdit().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { + Residence.getSelectionManager().worldEdit(player); + } + } + if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = Residence.getResidenceManager().getByName(parent); + if (res == null) { + Residence.msg(player, lm.Invalid_Residence); + return true; + } + + if (!player.hasPermission("residence.create.subzone") && !resadmin) { + Residence.msg(player, lm.Subzone_CantCreate); + return false; + } + + res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), + zname, resadmin); + } else { + Residence.msg(player, lm.Select_Points); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Create subzones in residences."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res subzone [subzone name]", + "If residence name is left off, will attempt to use residence your standing in.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b382663d2..3e5d78dd9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -914,7 +914,7 @@ public void onSelection(PlayerInteractEvent event) { if (heldItemId != Residence.getConfigManager().getSelectionTooldID()) return; - if (Residence.wepid == Residence.getConfigManager().getSelectionTooldID()) + if (Residence.getWepid() == Residence.getConfigManager().getSelectionTooldID()) return; if (player.getGameMode() == GameMode.CREATIVE) diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index be184812c..5c73186cb 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -1,146 +1,146 @@ -package com.bekvon.bukkit.residence.selection; - -import java.io.File; -import java.io.IOException; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.sk89q.worldedit.CuboidClipboard; -import com.sk89q.worldedit.EditSession; -import com.sk89q.worldedit.MaxChangedBlocksException; -import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.bukkit.BukkitWorld; -import com.sk89q.worldedit.schematic.SchematicFormat; - -@SuppressWarnings("deprecation") -public class SchematicsManager { - public boolean save(ClaimedResidence res) { - if (Residence.getWEplugin() == null) - return false; - if (res == null) - return false; - - CuboidArea area = res.getAreaArray()[0]; - - Vector bvmin = new Vector(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); - Vector bvmax = new Vector(area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); - Vector origin = new Vector(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); - - World bworld = Bukkit.getWorld(res.getWorld()); - - if (bworld == null) - return false; - - EditSession editSession = new EditSession(new BukkitWorld(bworld), Integer.MAX_VALUE); - editSession.enableQueue(); - CuboidClipboard clipboard = new CuboidClipboard(bvmax.subtract(bvmin).add(new Vector(1, 1, 1)), origin); - clipboard.setOrigin(origin); - clipboard.copy(editSession); - - File dir = new File(Residence.getDataLocation(), "Schematics"); - if (!dir.exists()) - try { - dir.mkdir(); - } catch (SecurityException se) { - } - dir = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld()); - if (!dir.exists()) - try { - dir.mkdir(); - } catch (SecurityException se) { - } - - File file = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); - try { - SchematicFormat.MCEDIT.save(clipboard, file); - } catch (com.sk89q.worldedit.world.DataException | IOException e) { - return false; - } - editSession.flushQueue(); - return true; - } - - public boolean load(ClaimedResidence res) { - - if (Residence.getWEplugin() == null) - return false; - - if (res == null) - return false; - - World bworld = Bukkit.getWorld(res.getWorld()); - - if (bworld == null) - return false; - - EditSession es = new EditSession(new BukkitWorld(bworld), Integer.MAX_VALUE); - File file = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); - - if (!file.exists()) - return false; - - CuboidClipboard cc = null; - try { - cc = CuboidClipboard.loadSchematic(file); - } catch (com.sk89q.worldedit.world.DataException e1) { - e1.printStackTrace(); - } catch (IOException e1) { - e1.printStackTrace(); - return false; - } - - if (cc == null) - return false; - Vector or = cc.getOrigin(); - ClaimedResidence r1 = Residence.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX(), or.getBlockY(), or.getBlockZ())); - ClaimedResidence r2 = Residence.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX() + cc.getWidth() - 1, or.getBlockY() + cc.getHeight() - 1, or - .getBlockZ() + cc.getLength() - 1)); - if (r1 == null || r2 == null) - return false; - - if (!r1.getName().equalsIgnoreCase(r2.getName())) - return false; - -// int totalBlocks = cc.getHeight() * cc.getLength() * cc.getWidth(); - - try { - cc.paste(es, cc.getOrigin(), false); - } catch (MaxChangedBlocksException e) { - e.printStackTrace(); - return false; - } - return true; - } - - public boolean delete(ClaimedResidence res) { - if (Residence.getWEplugin() == null) - return false; - if (res == null) - return false; - - File file = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); - if (!file.exists()) - return false; - - return file.delete(); - } - - public boolean rename(ClaimedResidence res, String newName) { - if (Residence.getWEplugin() == null) - return false; - if (res == null) - return false; - - File oldFile = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); - - if (!oldFile.exists()) - return false; - - File newFile = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + newName + ".schematic"); - return oldFile.renameTo(newFile); - } -} +package com.bekvon.bukkit.residence.selection; + +import java.io.File; +import java.io.IOException; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.sk89q.worldedit.CuboidClipboard; +import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.MaxChangedBlocksException; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.bukkit.BukkitWorld; +import com.sk89q.worldedit.schematic.SchematicFormat; + +@SuppressWarnings("deprecation") +public class SchematicsManager { + public boolean save(ClaimedResidence res) { + if (Residence.getWorldEdit() == null) + return false; + if (res == null) + return false; + + CuboidArea area = res.getAreaArray()[0]; + + Vector bvmin = new Vector(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + Vector bvmax = new Vector(area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); + Vector origin = new Vector(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + + World bworld = Bukkit.getWorld(res.getWorld()); + + if (bworld == null) + return false; + + EditSession editSession = new EditSession(new BukkitWorld(bworld), Integer.MAX_VALUE); + editSession.enableQueue(); + CuboidClipboard clipboard = new CuboidClipboard(bvmax.subtract(bvmin).add(new Vector(1, 1, 1)), origin); + clipboard.setOrigin(origin); + clipboard.copy(editSession); + + File dir = new File(Residence.getDataLocation(), "Schematics"); + if (!dir.exists()) + try { + dir.mkdir(); + } catch (SecurityException se) { + } + dir = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld()); + if (!dir.exists()) + try { + dir.mkdir(); + } catch (SecurityException se) { + } + + File file = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + try { + SchematicFormat.MCEDIT.save(clipboard, file); + } catch (com.sk89q.worldedit.world.DataException | IOException e) { + return false; + } + editSession.flushQueue(); + return true; + } + + public boolean load(ClaimedResidence res) { + + if (Residence.getWorldEdit() == null) + return false; + + if (res == null) + return false; + + World bworld = Bukkit.getWorld(res.getWorld()); + + if (bworld == null) + return false; + + EditSession es = new EditSession(new BukkitWorld(bworld), Integer.MAX_VALUE); + File file = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + + if (!file.exists()) + return false; + + CuboidClipboard cc = null; + try { + cc = CuboidClipboard.loadSchematic(file); + } catch (com.sk89q.worldedit.world.DataException e1) { + e1.printStackTrace(); + } catch (IOException e1) { + e1.printStackTrace(); + return false; + } + + if (cc == null) + return false; + Vector or = cc.getOrigin(); + ClaimedResidence r1 = Residence.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX(), or.getBlockY(), or.getBlockZ())); + ClaimedResidence r2 = Residence.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX() + cc.getWidth() - 1, or.getBlockY() + cc.getHeight() - 1, or + .getBlockZ() + cc.getLength() - 1)); + if (r1 == null || r2 == null) + return false; + + if (!r1.getName().equalsIgnoreCase(r2.getName())) + return false; + +// int totalBlocks = cc.getHeight() * cc.getLength() * cc.getWidth(); + + try { + cc.paste(es, cc.getOrigin(), false); + } catch (MaxChangedBlocksException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public boolean delete(ClaimedResidence res) { + if (Residence.getWorldEdit() == null) + return false; + if (res == null) + return false; + + File file = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + if (!file.exists()) + return false; + + return file.delete(); + } + + public boolean rename(ClaimedResidence res, String newName) { + if (Residence.getWorldEdit() == null) + return false; + if (res == null) + return false; + + File oldFile = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + + if (!oldFile.exists()) + return false; + + File newFile = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + newName + ".schematic"); + return oldFile.renameTo(newFile); + } +} diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 06dfe95fe..99d5be2e5 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -43,7 +43,7 @@ public boolean worldEditUpdate(Player player) { if (!hasPlacedBoth(player.getName())) return false; CuboidSelection selection = new CuboidSelection(player.getWorld(), getPlayerLoc1(player.getName()), getPlayerLoc2(player.getName())); - Residence.wep.setSelection(player, selection); + Residence.getWorldEdit().setSelection(player, selection); return true; } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java index a2ffba3a4..233170ef7 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -1,45 +1,45 @@ -package com.bekvon.bukkit.residence.selection; - -import org.bukkit.Location; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.sk89q.worldedit.BlockVector; -import com.sk89q.worldguard.bukkit.RegionContainer; -import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.managers.RegionManager; -import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; - -public class WorldGuardUtil { - public static ProtectedRegion isSelectionInRegion(Player player) { - - if (Residence.wg == null) - return null; - - if (Residence.wep == null) - return null; - - if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) - return null; - Location loc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); - Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); - - String id = "icp__tempregion"; - try { - BlockVector min = new BlockVector(loc1.getX(), loc1.getY(), loc1.getZ()); - BlockVector max = new BlockVector(loc2.getX(), loc2.getY(), loc2.getZ()); - ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); - RegionContainer cn = Residence.wg.getRegionContainer(); - RegionManager mgr = cn.get(loc1.getWorld()); - ApplicableRegionSet regions = mgr.getApplicableRegions(region); - - for (ProtectedRegion one : regions) { - if (!player.hasPermission("residence.worldguard." + one.getId())) - return one; - } - } catch (Exception e) { - } - return null; - } -} +package com.bekvon.bukkit.residence.selection; + +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.managers.RegionManager; +import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; + +public class WorldGuardUtil { + public ProtectedRegion isSelectionInRegion(Player player) { + + if (Residence.getWorldGuard() == null) + return null; + + if (Residence.getWorldEdit() == null) + return null; + + if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) + return null; + Location loc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); + Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); + + String id = "icp__tempregion"; + try { + BlockVector min = new BlockVector(loc1.getX(), loc1.getY(), loc1.getZ()); + BlockVector max = new BlockVector(loc2.getX(), loc2.getY(), loc2.getZ()); + ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); + + RegionManager mgr = Residence.getWorldGuard().getRegionManager(loc1.getWorld()); + + ApplicableRegionSet regions = mgr.getApplicableRegions(region); + + for (ProtectedRegion one : regions) { + if (!player.hasPermission("residence.worldguard." + one.getId())) + return one; + } + } catch (Exception e) { + } + return null; + } +} From 9c78cdbcca086227f070d60ac8f247db3e6502b2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Dec 2016 19:09:30 +0200 Subject: [PATCH 0303/1142] Check by players uuid to try avoiding posible update issues --- .../residence/containers/ResidencePlayer.java | 33 ++++++++++++------- .../residence/economy/rent/RentManager.java | 2 ++ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 527f93854..99e5d728b 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -5,6 +5,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.UUID; + import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; @@ -20,6 +22,7 @@ public class ResidencePlayer { private String userName = null; private Player player = null; private OfflinePlayer ofPlayer = null; + private UUID uuid = null; private Map ResidenceList = new HashMap(); private ClaimedResidence mainResidence = null; @@ -33,17 +36,14 @@ public class ResidencePlayer { public ResidencePlayer(Player player) { this.player = player; + this.uuid = player.getUniqueId(); updateName(); RecalculatePermissions(); } public ResidencePlayer(String userName) { this.userName = userName; - player = Bukkit.getPlayer(userName); - if (player == null) - ofPlayer = Residence.getOfflinePlayer(userName); - if (ofPlayer != null) - this.userName = ofPlayer.getName(); + updateName(); RecalculatePermissions(); } @@ -63,7 +63,7 @@ public ClaimedResidence getMainResidence() { return mainResidence; } } - for (String one : Residence.getRentManager().getRentedLands(this.player.getName())) { + for (String one : Residence.getRentManager().getRentedLands(this.userName)) { ClaimedResidence res = Residence.getResidenceManager().getByName(one); if (res != null) { mainResidence = res; @@ -82,8 +82,8 @@ public ClaimedResidence getMainResidence() { public void RecalculatePermissions() { - if (this.player == null) - this.player = Bukkit.getPlayerExact(userName); + if (uuid != null && Bukkit.getPlayer(uuid) != null) + this.player = Bukkit.getPlayer(uuid); if (this.player == null && ofPlayer == null) ofPlayer = Residence.getOfflinePlayer(userName); @@ -144,7 +144,7 @@ public void recountMaxSubzones() { this.maxSubzones = i; } } - + int m = this.getGroup().getMaxSubzones(); if (this.maxSubzones < m) this.maxSubzones = m; @@ -154,7 +154,7 @@ public int getMaxSubzones() { recountMaxSubzones(); return this.maxSubzones; } - + public void recountMaxSubzoneDepth() { updateName(); for (int i = 1; i <= Residence.getConfigManager().getMaxSubzoneDepthCount(); i++) { @@ -167,7 +167,7 @@ public void recountMaxSubzoneDepth() { this.maxSubzoneDepth = i; } } - + int m = this.getGroup().getMaxSubzoneDepth(); if (this.maxSubzoneDepth < m) this.maxSubzoneDepth = m; @@ -213,14 +213,23 @@ public void recountRes() { } private void updateName() { - if (this.userName != null) + if (this.uuid != null && Bukkit.getPlayer(this.uuid) != null) { + player = Bukkit.getPlayer(this.uuid); + this.userName = player.getName(); + return; + } + if (this.userName != null) { + player = Bukkit.getPlayer(this.userName); return; + } if (player != null) { this.userName = player.getName(); + this.uuid = player.getUniqueId(); return; } if (ofPlayer != null) { this.userName = ofPlayer.getName(); + this.uuid = ofPlayer.getUniqueId(); return; } } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index dc33c7875..bb45ca67d 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -55,6 +55,8 @@ public List getRentedLands(String playername) { public List getRentedLands(String playername, boolean onlyHidden) { List rentedLands = new ArrayList(); + if (playername == null) + return rentedLands; for (ClaimedResidence res : rentedLand) { if (res == null) continue; From cc3ed24613cb90d409ba824a432fa51acdc9bbf1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Dec 2016 14:10:59 +0200 Subject: [PATCH 0304/1142] Update players info when he logs in to have recent Player object and add it to cached list for offline usage --- .../bekvon/bukkit/residence/Residence.java | 2 +- .../residence/containers/ResidencePlayer.java | 48 +++++++++---------- .../residence/protection/PlayerManager.java | 10 ++-- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 64270345b..5efc89700 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -192,7 +192,7 @@ public class Residence extends JavaPlugin { public static Map UnrentConfirm = new HashMap(); public static List resadminToggle; private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW" }; - public static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); + private static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); private static Map cachedPlayerNameUUIDs = new HashMap(); private static WorldEditPlugin wep = null; private static WorldGuardPlugin wg = null; diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 99e5d728b..20ca64828 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -35,15 +35,17 @@ public class ResidencePlayer { private int maxSubzoneDepth = -1; public ResidencePlayer(Player player) { - this.player = player; - this.uuid = player.getUniqueId(); - updateName(); - RecalculatePermissions(); + if (player == null) + return; + Residence.getOfflinePlayerMap().put(player.getName(), player); + Residence.addCachedPlayerNameUUIDs(player.getUniqueId(), player.getName()); + this.updatePlayer(player); + this.RecalculatePermissions(); } public ResidencePlayer(String userName) { this.userName = userName; - updateName(); + updatePlayer(); RecalculatePermissions(); } @@ -81,13 +83,6 @@ public ClaimedResidence getMainResidence() { } public void RecalculatePermissions() { - - if (uuid != null && Bukkit.getPlayer(uuid) != null) - this.player = Bukkit.getPlayer(uuid); - - if (this.player == null && ofPlayer == null) - ofPlayer = Residence.getOfflinePlayer(userName); - getGroup(); recountMaxRes(); recountMaxRents(); @@ -95,7 +90,6 @@ public void RecalculatePermissions() { } public void recountMaxRes() { - updateName(); if (this.group != null) this.maxRes = this.group.getMaxZones(); for (int i = 1; i <= Residence.getConfigManager().getMaxResCount(); i++) { @@ -110,7 +104,6 @@ public void recountMaxRes() { } public void recountMaxRents() { - updateName(); for (int i = 1; i <= Residence.getConfigManager().getMaxRentCount(); i++) { if (player != null) { if (this.player.isPermissionSet("residence.max.rents." + i)) @@ -133,7 +126,6 @@ public int getMaxRents() { } public void recountMaxSubzones() { - updateName(); for (int i = 1; i <= Residence.getConfigManager().getMaxSubzonesCount(); i++) { if (player != null) { if (this.player.isPermissionSet("residence.max.subzones." + i)) @@ -156,7 +148,6 @@ public int getMaxSubzones() { } public void recountMaxSubzoneDepth() { - updateName(); for (int i = 1; i <= Residence.getConfigManager().getMaxSubzoneDepthCount(); i++) { if (player != null) { if (this.player.isPermissionSet("residence.max.subzonedepth." + i)) @@ -179,7 +170,6 @@ public int getMaxSubzoneDepth() { } public int getMaxRes() { - updateName(); Residence.getPermissionManager().updateGroupNameForPlayer(this.userName, this.player != null && this.player.isOnline() ? this.player.getPlayer().getLocation() .getWorld().getName() : Residence.getConfigManager().getDefaultWorld(), true); recountMaxRes(); @@ -195,38 +185,46 @@ public PermissionGroup getGroup() { } public PermissionGroup getGroup(String world) { - String name = userName; - if (this.player != null) - name = player.getName(); - - String gp = Residence.getPermissionManager().getGroupNameByPlayer(name, world); + String gp = Residence.getPermissionManager().getGroupNameByPlayer(this.userName, world); this.group = Residence.getPermissionManager().getGroupByName(gp); return this.group; } public void recountRes() { - updateName(); if (this.userName != null) { ResidenceManager m = Residence.getResidenceManager(); this.ResidenceList = m.getResidenceMapList(this.userName, true); } } - private void updateName() { + public ResidencePlayer updatePlayer(Player player) { + this.player = player; + this.uuid = player.getUniqueId(); + this.userName = player.getName(); + this.ofPlayer = player; + return this; + } + + private void updatePlayer() { + if (player != null && player.isOnline()) + return; if (this.uuid != null && Bukkit.getPlayer(this.uuid) != null) { player = Bukkit.getPlayer(this.uuid); this.userName = player.getName(); return; } + if (this.userName != null) { player = Bukkit.getPlayer(this.userName); - return; } if (player != null) { this.userName = player.getName(); this.uuid = player.getUniqueId(); + this.ofPlayer = player; return; } + if (this.player == null && ofPlayer == null) + ofPlayer = Residence.getOfflinePlayer(userName); if (ofPlayer != null) { this.userName = ofPlayer.getName(); this.uuid = ofPlayer.getUniqueId(); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 7b7708808..a3fa36feb 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -30,8 +30,10 @@ public void playerJoin(Player player) { resPlayer = new ResidencePlayer(player); resPlayer.recountRes(); players.put(player.getName().toLowerCase(), resPlayer); - } else + } else { + resPlayer.updatePlayer(player); resPlayer.RecalculatePermissions(); + } return; } @@ -118,7 +120,7 @@ public ArrayList getResidences(String player, boolean showhidd } return temp; } - + public TreeMap getResidencesMap(String player, boolean showhidden, boolean onlyHidden, World world) { TreeMap temp = new TreeMap(); playerJoin(player); @@ -164,7 +166,7 @@ public int getMaxSubzones(String player) { } return -1; } - + @Override public int getMaxSubzoneDepth(String player) { ResidencePlayer resPlayer = getResidencePlayer(player); @@ -173,7 +175,7 @@ public int getMaxSubzoneDepth(String player) { } return -1; } - + @Override public int getMaxRents(String player) { ResidencePlayer resPlayer = getResidencePlayer(player); From 30fe3d1f2e5038b07eb8499b2d6f0a5c5a8e8f1c Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Dec 2016 14:25:17 +0200 Subject: [PATCH 0305/1142] Include shulker box into protection list --- .../bekvon/bukkit/residence/allNms/v1_11.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11.java b/src/com/bekvon/bukkit/residence/allNms/v1_11.java index 5d5abc3f3..59f15dc63 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11.java @@ -148,6 +148,25 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door.getName()); matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode.getName()); + + + /* 1.11 Shulker Box */ + matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.BLUE_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.BROWN_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.CYAN_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.GRAY_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.GREEN_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.LIGHT_BLUE_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.LIME_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.MAGENTA_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.ORANGE_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.SILVER_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container.getName()); } @Override From f9c79cdce470f1e570ea3ef2960305b29675cb2a Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Dec 2016 14:30:58 +0200 Subject: [PATCH 0306/1142] Remove debug message as it can cause issues --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 0f8e20f88..e302955ae 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1412,9 +1412,7 @@ public static ClaimedResidence load(String worldName, Map root, res.ignorelist = ResidenceItemList.load(res, (Map) root.get("IgnoreList")); Map areamap = (Map) root.get("Areas"); - - if (res.resName.equalsIgnoreCase("test")) - Debug.D("loading: " + res.resName); + res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); if (res.getPermissions().ownerLastKnownName == null) From 333fa4f98498190f65e12e3a1269bd64c2c638ff Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Dec 2016 14:37:11 +0200 Subject: [PATCH 0307/1142] Correct id for wood hoe --- src/com/bekvon/bukkit/residence/ConfigManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 414c9cd03..a49d38152 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -391,7 +391,7 @@ public void UpdateConfigFile() { c.getW().addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); - selectionToolId = c.get("Global.SelectionToolId", Material.WOOD_AXE.getId()); + selectionToolId = c.get("Global.SelectionToolId", Material.WOOD_HOE.getId()); c.getW().addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); SelectionIgnoreY = c.get("Global.Selection.IgnoreY", false); From 2b571b79b111defb495dcb64d2c0ed03c560eba7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Dec 2016 13:41:33 +0200 Subject: [PATCH 0308/1142] partial removal of static variables --- .../bukkit/residence/ConfigManager.java | 4 +- .../bekvon/bukkit/residence/Residence.java | 145 +-- .../residence/ResidenceCommandListener.java | 426 +++++---- .../bekvon/bukkit/residence/allNms/v1_10.java | 2 +- .../bukkit/residence/allNms/v1_10Events.java | 60 +- .../bekvon/bukkit/residence/allNms/v1_11.java | 2 +- .../bekvon/bukkit/residence/allNms/v1_7.java | 286 +++--- .../residence/allNms/v1_7_Couldron.java | 286 +++--- .../bekvon/bukkit/residence/allNms/v1_8.java | 344 +++---- .../bukkit/residence/allNms/v1_8Events.java | 124 +-- .../bekvon/bukkit/residence/allNms/v1_9.java | 358 ++++---- .../bukkit/residence/allNms/v1_9Events.java | 8 +- .../bukkit/residence/chat/ChatChannel.java | 4 +- .../bukkit/residence/chat/ChatManager.java | 2 +- .../bukkit/residence/commands/area.java | 48 +- .../bukkit/residence/commands/auto.java | 220 ++--- .../bukkit/residence/commands/bank.java | 132 +-- .../bukkit/residence/commands/check.java | 104 +-- .../bukkit/residence/commands/clearflags.java | 92 +- .../bukkit/residence/commands/command.java | 190 ++-- .../bukkit/residence/commands/compass.java | 114 ++- .../bukkit/residence/commands/confirm.java | 92 +- .../bukkit/residence/commands/contract.java | 48 +- .../bukkit/residence/commands/create.java | 32 +- .../bukkit/residence/commands/current.java | 86 +- .../bukkit/residence/commands/expand.java | 50 +- .../bukkit/residence/commands/flags.java | 124 +-- .../bukkit/residence/commands/give.java | 74 +- .../bukkit/residence/commands/gset.java | 102 +-- .../bekvon/bukkit/residence/commands/gui.java | 82 +- .../bukkit/residence/commands/info.java | 88 +- .../bukkit/residence/commands/kick.java | 14 +- .../bukkit/residence/commands/lease.java | 272 +++--- .../bukkit/residence/commands/limits.java | 102 +-- .../bukkit/residence/commands/list.java | 119 ++- .../bukkit/residence/commands/listall.java | 114 +-- .../residence/commands/listallhidden.java | 94 +- .../bukkit/residence/commands/listhidden.java | 106 +-- .../bukkit/residence/commands/lists.java | 192 ++-- .../bukkit/residence/commands/lset.java | 182 ++-- .../bukkit/residence/commands/market.java | 184 ++-- .../bukkit/residence/commands/material.java | 86 +- .../bukkit/residence/commands/message.java | 220 ++--- .../bukkit/residence/commands/mirror.java | 74 +- .../bukkit/residence/commands/padd.java | 98 +- .../bukkit/residence/commands/pdel.java | 94 +- .../bukkit/residence/commands/pset.java | 38 +- .../bekvon/bukkit/residence/commands/rc.java | 104 +-- .../bukkit/residence/commands/reload.java | 202 ++--- .../bukkit/residence/commands/remove.java | 208 +++-- .../bukkit/residence/commands/removeall.java | 82 +- .../residence/commands/removeworld.java | 76 +- .../bukkit/residence/commands/rename.java | 74 +- .../bukkit/residence/commands/renamearea.java | 84 +- .../bukkit/residence/commands/resadmin.java | 84 +- .../bukkit/residence/commands/resbank.java | 134 +-- .../bukkit/residence/commands/reset.java | 80 +- .../bekvon/bukkit/residence/commands/rt.java | 234 +++-- .../bukkit/residence/commands/select.java | 455 +++++----- .../bukkit/residence/commands/server.java | 102 +-- .../bekvon/bukkit/residence/commands/set.java | 26 +- .../bukkit/residence/commands/setmain.java | 130 +-- .../bukkit/residence/commands/setowner.java | 20 +- .../bukkit/residence/commands/shop.java | 178 ++-- .../bukkit/residence/commands/show.java | 106 +-- .../residence/commands/signconvert.java | 82 +- .../bukkit/residence/commands/signupdate.java | 70 +- .../bukkit/residence/commands/sublist.java | 112 +-- .../bukkit/residence/commands/subzone.java | 25 +- .../bukkit/residence/commands/tool.java | 78 +- .../bekvon/bukkit/residence/commands/tp.java | 90 +- .../bukkit/residence/commands/tpconfirm.java | 80 +- .../bukkit/residence/commands/tpset.java | 82 +- .../bukkit/residence/commands/unstuck.java | 104 +-- .../bukkit/residence/commands/version.java | 89 +- .../residence/containers/PlayerGroup.java | 6 +- .../residence/containers/ResidencePlayer.java | 26 +- .../bukkit/residence/containers/cmd.java | 26 +- .../bukkit/residence/containers/lm.java | 1 + .../bukkit/residence/dynmap/AreaStyle.java | 54 +- .../residence/dynmap/DynMapManager.java | 646 ++++++------- .../residence/economy/ResidenceBank.java | 26 +- .../residence/economy/TransactionManager.java | 156 ++-- .../residence/economy/rent/RentManager.java | 270 +++--- .../residence/economy/rent/RentableLand.java | 6 +- .../bekvon/bukkit/residence/gui/SetFlag.java | 852 +++++++++--------- .../residence/itemlist/ResidenceItemList.java | 14 +- .../listeners/ResidenceBlockListener.java | 206 ++--- .../listeners/ResidenceEntityListener.java | 252 +++--- .../listeners/ResidenceFixesListener.java | 78 +- .../listeners/ResidencePlayerListener.java | 546 +++++------ .../residence/listeners/SpigotListener.java | 72 +- .../permissions/PermissionGroup.java | 50 +- .../permissions/PermissionManager.java | 22 +- .../protection/ClaimedResidence.java | 345 ++++--- .../residence/protection/CuboidArea.java | 10 +- .../residence/protection/FlagPermissions.java | 24 +- .../residence/protection/LeaseManager.java | 53 +- .../protection/PermissionListManager.java | 30 +- .../residence/protection/PlayerManager.java | 8 +- .../protection/ResidenceManager.java | 298 +++--- .../protection/ResidencePermissions.java | 60 +- .../residence/selection/AutoSelection.java | 253 +++--- .../selection/SchematicsManager.java | 19 +- .../residence/selection/SelectionManager.java | 136 +-- .../selection/WorldEditSelectionManager.java | 2 +- .../residence/selection/WorldGuardUtil.java | 14 +- .../residence/shopStuff/ShopListener.java | 375 ++++---- .../residence/shopStuff/ShopSignUtil.java | 792 ++++++++-------- .../bukkit/residence/signsStuff/SignUtil.java | 38 +- .../residence/spout/ResidenceSpout.java | 4 +- .../spout/ResidenceSpoutListener.java | 9 +- .../bukkit/residence/text/Language.java | 2 +- .../bukkit/residence/text/help/HelpEntry.java | 28 +- .../residence/text/help/InformationPager.java | 82 +- .../bukkit/residence/utils/CrackShot.java | 35 +- .../bukkit/residence/utils/FileCleanUp.java | 128 +-- .../bukkit/residence/utils/GetTime.java | 32 +- .../bukkit/residence/utils/RandomTp.java | 294 +++--- .../residence/utils/VersionChecker.java | 206 ++--- src/com/residence/zip/ZipLibrary.java | 28 +- src/plugin.yml | 2 +- 122 files changed, 7794 insertions(+), 7731 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index a49d38152..29ac3ae7d 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -261,7 +261,7 @@ public void ChangeConfig(String path, Boolean stage) { } catch (IOException e) { e.printStackTrace(); } - Residence.getConfigManager().UpdateConfigFile(); + plugin.getConfigManager().UpdateConfigFile(); } public static List ColorsArray(List text, Boolean colorize) { @@ -1223,7 +1223,7 @@ public boolean isExtraEnterMessage() { } public boolean enableEconomy() { - return enableEconomy && Residence.getEconomyManager() != null; + return enableEconomy && plugin.getEconomyManager() != null; } public boolean enabledRentSystem() { diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 5efc89700..cf51b2b94 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -29,6 +29,7 @@ import org.bukkit.Server; import org.bukkit.World; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; @@ -126,6 +127,7 @@ */ public class Residence extends JavaPlugin { + private static Residence instance; protected static String ResidenceVersion; protected static List authlist; protected static ResidenceManager rmanager; @@ -188,7 +190,7 @@ public class Residence extends JavaPlugin { protected static int autosaveBukkitId = -1; protected static VersionChecker versionChecker; protected static boolean initsuccess = false; - public static Map deleteConfirm; + public Map deleteConfirm; public static Map UnrentConfirm = new HashMap(); public static List resadminToggle; private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW" }; @@ -220,11 +222,11 @@ public static HashMap getTeleportMap() { return teleportMap; } - public static List getTeleportDelayMap() { + public List getTeleportDelayMap() { return teleportDelayMap; } - public static HashMap getRandomTeleportMap() { + public HashMap getRandomTeleportMap() { return rtMap; } @@ -272,7 +274,7 @@ public static ResidenceApi getAPI() { } // API end - public static NMS getNms() { + public NMS getNms() { return nms; } @@ -395,6 +397,7 @@ public void onDisable() { @Override public void onEnable() { try { + instance = this; initsuccess = false; deleteConfirm = new HashMap(); resadminToggle = new ArrayList(); @@ -472,7 +475,7 @@ public void onEnable() { String version = packageSplit[packageSplit.length - 1].substring(0, packageSplit[packageSplit.length - 1].length() - 3); try { Class nmsClass; - if (Residence.getConfigManager().CouldronCompatability()) + if (getConfigManager().CouldronCompatability()) nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms.v1_7_Couldron"); else nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms." + version); @@ -511,22 +514,22 @@ public void onEnable() { return; } - gmanager = new PermissionManager(); + gmanager = new PermissionManager(this); imanager = new WorldItemManager(); wmanager = new WorldFlagManager(); chatmanager = new ChatManager(); - rentmanager = new RentManager(); + rentmanager = new RentManager(this); LocaleManager = new LocaleManager(this); - PlayerManager = new PlayerManager(); + PlayerManager = new PlayerManager(this); ShopSignUtilManager = new ShopSignUtil(this); RandomTpManager = new RandomTp(this); InformationPagerManager = new InformationPager(this); - zip = new ZipLibrary(); + zip = new ZipLibrary(this); versionChecker = new VersionChecker(this); @@ -543,7 +546,7 @@ public void onEnable() { getLocaleManager().LoadLang(lang); } - Residence.getConfigManager().UpdateFlagFile(); + getConfigManager().UpdateFlagFile(); try { File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); @@ -656,13 +659,13 @@ public void run() { rmanager = new ResidenceManager(this); } if (leasemanager == null) { - leasemanager = new LeaseManager(rmanager); + leasemanager = new LeaseManager(this, rmanager); } if (tmanager == null) { - tmanager = new TransactionManager(); + tmanager = new TransactionManager(this); } if (pmanager == null) { - pmanager = new PermissionListManager(); + pmanager = new PermissionListManager(this); } try { @@ -673,9 +676,9 @@ public void run() { } signmanager = new SignUtil(this); - Residence.getSignUtil().LoadSigns(); + getSignUtil().LoadSigns(); - if (Residence.getConfigManager().isUseResidenceFileClean()) + if (getConfigManager().isUseResidenceFileClean()) FileCleanUp.cleanFiles(); if (firstenable) { @@ -692,7 +695,7 @@ public void run() { elistener = new ResidenceEntityListener(this); flistener = new ResidenceFixesListener(); - shlistener = new ShopListener(); + shlistener = new ShopListener(this); spigotlistener = new SpigotListener(); PluginManager pm = getServer().getPluginManager(); @@ -717,7 +720,7 @@ public void run() { // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, // Priority.NORMAL, this); if (cmanager.enableSpout()) { - slistener = new ResidenceSpoutListener(); + slistener = new ResidenceSpoutListener(this); pm.registerEvents(slistener, this); spout = new ResidenceSpout(this); } @@ -729,10 +732,10 @@ public void run() { NewLanguageManager = new Language(this); getLM().LanguageReload(); - AutoSelectionManager = new AutoSelection(); + AutoSelectionManager = new AutoSelection(this); if (wep != null) - SchematicManager = new SchematicsManager(); + SchematicManager = new SchematicsManager(this); try { Class.forName("org.bukkit.event.player.PlayerItemDamageEvent"); @@ -741,7 +744,7 @@ public void run() { } if (getServer().getPluginManager().getPlugin("CrackShot") != null) - getServer().getPluginManager().registerEvents(new CrackShot(), this); + getServer().getPluginManager().registerEvents(new CrackShot(this), this); // DynMap Plugin dynmap = Bukkit.getPluginManager().getPlugin("dynmap"); @@ -758,11 +761,11 @@ public void run() { } autosaveInt = autosaveInt * 60 * 20; autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); - healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, Residence.getConfigManager().getHealInterval() * 20); - feedBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doFeed, 20, Residence.getConfigManager().getFeedInterval() * 20); - if (Residence.getConfigManager().AutoMobRemoval()) - DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * Residence.getConfigManager().AutoMobRemovalInterval(), 20 - * Residence.getConfigManager().AutoMobRemovalInterval()); + healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, getConfigManager().getHealInterval() * 20); + feedBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doFeed, 20, getConfigManager().getFeedInterval() * 20); + if (getConfigManager().AutoMobRemoval()) + DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * getConfigManager().AutoMobRemovalInterval(), 20 + * getConfigManager().AutoMobRemovalInterval()); if (cmanager.useLeases()) { int leaseInterval = cmanager.getLeaseCheckInterval(); @@ -846,7 +849,7 @@ private void setWorldEdit() { } } - private void setWorldGuard() { + private static void setWorldGuard() { Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); if (wgplugin != null) { try { @@ -881,7 +884,7 @@ public static File getDataLocation() { return dataFolder; } - public static ShopSignUtil getShopSignUtilManager() { + public ShopSignUtil getShopSignUtilManager() { return ShopSignUtilManager; } @@ -901,11 +904,11 @@ public static CommandFiller getCommandFiller() { return cmdFiller; } - public static ResidenceManager getResidenceManager() { + public ResidenceManager getResidenceManager() { return rmanager; } - public static SelectionManager getSelectionManager() { + public SelectionManager getSelectionManager() { return smanager; } @@ -925,11 +928,11 @@ public static DynMapManager getDynManager() { return DynManager; } - public static SchematicsManager getSchematicManager() { + public SchematicsManager getSchematicManager() { return SchematicManager; } - public static AutoSelection getAutoSelectionManager() { + public AutoSelection getAutoSelectionManager() { return AutoSelectionManager; } @@ -937,11 +940,11 @@ public static Sorting getSortingManager() { return SortingManager; } - public static RandomTp getRandomTpManager() { + public RandomTp getRandomTpManager() { return RandomTpManager; } - public static EconomyInterface getEconomyManager() { + public EconomyInterface getEconomyManager() { return economy; } @@ -965,7 +968,7 @@ public static void setConfigManager(ConfigManager cm) { cmanager = cm; } - public static ConfigManager getConfigManager() { + public ConfigManager getConfigManager() { return cmanager; } @@ -977,11 +980,11 @@ public static WorldItemManager getItemManager() { return imanager; } - public static WorldFlagManager getWorldFlags() { + public WorldFlagManager getWorldFlags() { return wmanager; } - public static RentManager getRentManager() { + public RentManager getRentManager() { return rentmanager; } @@ -1009,7 +1012,7 @@ public static ChatManager getChatManager() { return chatmanager; } - public static String getResidenceVersion() { + public String getResidenceVersion() { return ResidenceVersion; } @@ -1267,28 +1270,28 @@ protected boolean loadYml() throws Exception { addShops(one.getValue()); } - if (Residence.getConfigManager().isUUIDConvertion()) { - Residence.getConfigManager().ChangeConfig("Global.UUIDConvertion", false); + if (getConfigManager().isUUIDConvertion()) { + getConfigManager().ChangeConfig("Global.UUIDConvertion", false); } loadFile = new File(saveFolder, "forsale.yml"); if (loadFile.isFile()) { yml = new YMLSaveHelper(loadFile); yml.load(); - tmanager = new TransactionManager(); + tmanager = new TransactionManager(this); tmanager.load((Map) yml.getRoot().get("Economy")); } loadFile = new File(saveFolder, "leases.yml"); if (loadFile.isFile()) { yml = new YMLSaveHelper(loadFile); yml.load(); - leasemanager = LeaseManager.load((Map) yml.getRoot().get("Leases"), rmanager); + leasemanager = getLeaseManager().load((Map) yml.getRoot().get("Leases"), rmanager); } loadFile = new File(saveFolder, "permlists.yml"); if (loadFile.isFile()) { yml = new YMLSaveHelper(loadFile); yml.load(); - pmanager = PermissionListManager.load((Map) yml.getRoot().get("PermissionLists")); + pmanager = getPermissionListManager().load((Map) yml.getRoot().get("PermissionLists")); } loadFile = new File(saveFolder, "rent.yml"); if (loadFile.isFile()) { @@ -1541,7 +1544,7 @@ private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean } } - public static boolean isPlayerExist(CommandSender sender, String name, boolean inform) { + public boolean isPlayerExist(CommandSender sender, String name, boolean inform) { if (Residence.getPlayerUUID(name) != null) return true; if (inform) @@ -1624,21 +1627,21 @@ public static String getPlayerName(UUID uuid) { return null; } - public static boolean isDisabledWorldListener(World world) { + public boolean isDisabledWorldListener(World world) { return isDisabledWorldListener(world.getName()); } - public static boolean isDisabledWorldListener(String worldname) { + public boolean isDisabledWorldListener(String worldname) { if (getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableListeners) return true; return false; } - public static boolean isDisabledWorldCommand(World world) { + public boolean isDisabledWorldCommand(World world) { return isDisabledWorldCommand(world.getName()); } - public static boolean isDisabledWorldCommand(String worldname) { + public boolean isDisabledWorldCommand(String worldname) { if (getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableCommands) return true; return false; @@ -1666,7 +1669,7 @@ public static void msg(Player player, String text) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); } - public static void msg(CommandSender sender, lm lm, Object... variables) { + public void msg(CommandSender sender, lm lm, Object... variables) { if (sender != null) if (Residence.getLM().containsKey(lm.getPath())) { String msg = Residence.getLM().getMessage(lm, variables); @@ -1683,7 +1686,7 @@ public static List msgL(lm lm) { return Residence.getLM().getMessageList(lm); } - public static String msg(lm lm, Object... variables) { + public String msg(lm lm, Object... variables) { return Residence.getLM().getMessage(lm, variables); } @@ -1703,7 +1706,7 @@ public static void addCachedPlayerNameUUIDs(Map cachedPlayerNameUU cachedPlayerNameUUIDs.putAll(cachedPlayerNameUUIDs2); } - public static WorldEditPlugin getWorldEdit() { + public WorldEditPlugin getWorldEdit() { return wep; } @@ -1711,14 +1714,50 @@ public static WorldGuardPlugin getWorldGuard() { return wg; } - public static int getWepid() { + public int getWepid() { return wepid; } - public static WorldGuardUtil getWorldGuardUtil() { + public WorldGuardUtil getWorldGuardUtil() { if (worldGuardUtil == null) - worldGuardUtil = new WorldGuardUtil(); + worldGuardUtil = new WorldGuardUtil(this); return worldGuardUtil; } + public boolean hasPermission(CommandSender sender, String permision) { + return hasPermission(sender, permision, true, null); + } + + public boolean hasPermission(CommandSender sender, String permision, String message) { + return hasPermission(sender, permision, true, message); + } + + public boolean hasPermission(CommandSender sender, String permision, lm message) { + return hasPermission(sender, permision, true, getLM().getMessage(message)); + } + + public boolean hasPermission(CommandSender sender, String permision, Boolean output, String message) { + if (sender instanceof ConsoleCommandSender) { + return true; + } else if (sender instanceof Player) { + Player player = (Player) sender; + if (player.hasPermission(permision)) { + return true; + } + if (output) { + String outMsg = getLM().getMessage(lm.General_NoPermission); + if (message != null) + outMsg = message; + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " {\"text\":\"\",\"extra\":[{\"text\":\"" + outMsg + + "\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"§2" + permision + "\"}}]}"); + ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); + console.sendMessage(getLM().getMessage(lm.General_NoPermission)); + } + } + return false; + } + + public static Residence getInstance() { + return instance; + } } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 13cd268aa..5abede4c1 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1,214 +1,212 @@ -package com.bekvon.bukkit.residence; - -import java.util.logging.Level; -import java.util.logging.Logger; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; - -public class ResidenceCommandListener extends Residence { - - private static List AdminCommands = new ArrayList(); - - public static List getAdminCommands() { - if (AdminCommands.size() == 0) - AdminCommands = Residence.getCommandFiller().getCommands(false); - return AdminCommands; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); - Residence.getServ().getPluginManager().callEvent(cevent); - if (cevent.isCancelled()) { - return true; - } - - if (sender instanceof Player && !Residence.getPermissionManager().isResidenceAdmin(sender) && Residence.isDisabledWorldCommand(((Player) sender) - .getWorld())) { - Residence.msg(sender, lm.General_DisabledWorld); - return true; - } - - if (command.getName().equals("resreload") && args.length == 0) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (Residence.getPermissionManager().isResidenceAdmin(player) && player.hasPermission("residence.topadmin")) { - this.reloadPlugin(); - sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); - System.out.println("[Residence] Reloaded by " + player.getName() + "."); - } else - Residence.msg(player, lm.General_NoPermission); - } else { - this.reloadPlugin(); - System.out.println("[Residence] Reloaded by console."); - } - return true; - } - if (command.getName().equals("resload")) { - if (!(sender instanceof Player) || sender instanceof Player && Residence.gmanager.isResidenceAdmin(sender) && ((Player) sender).hasPermission( - "residence.topadmin")) { - try { - this.loadYml(); - sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); - } catch (Exception ex) { - sender.sendMessage(ChatColor.RED + "[Residence] Unable to reload the save file, exception occured!"); - sender.sendMessage(ChatColor.RED + ex.getMessage()); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - } - } else - Residence.msg(sender, lm.General_NoPermission); - return true; - } else if (command.getName().equals("rc")) { - cmd cmdClass = getCmdClass(new String[] { "rc" }); - if (cmdClass == null) { - sendUsage(sender, command.getName()); - return true; - } - boolean respond = cmdClass.perform(args, false, command, sender); - if (!respond) - sendUsage(sender, command.getName()); - return true; - } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { - boolean resadmin = false; - if (sender instanceof Player) { - if (command.getName().equals("resadmin") && Residence.gmanager.isResidenceAdmin(sender)) { - resadmin = true; - } - if (command.getName().equals("resadmin") && !Residence.gmanager.isResidenceAdmin(sender)) { - ((Player) sender).sendMessage(Residence.msg(lm.Residence_NonAdmin)); - return true; - } - if (command.getName().equals("res") && Residence.gmanager.isResidenceAdmin(sender) && Residence.getConfigManager().getAdminFullAccess()) { - resadmin = true; - } - } else { - resadmin = true; - } - - if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { - return commandHelp(args, resadmin, sender, command); - } - - Player player = null; - if (sender instanceof Player) { - player = (Player) sender; - } else { - resadmin = true; - } - if (Residence.cmanager.allowAdminsOnly()) { - if (!resadmin && player != null) { - Residence.msg(player, lm.General_AdminOnly); - return true; - } - } - if (args.length == 0) { - args = new String[1]; - args[0] = "?"; - } - - String cmd = args[0].toLowerCase(); - - switch (cmd) { - case "delete": - cmd = "remove"; - break; - case "sz": - cmd = "subzone"; - break; - } - - cmd cmdClass = getCmdClass(args); - if (cmdClass == null) { - return commandHelp(new String[] { "?" }, resadmin, sender, command); - } - - if (!sender.hasPermission("residence.command." + args[0].toLowerCase()) && !resadmin) { - Residence.msg(sender, lm.General_NoCmdPermission); - return true; - } - - if (!resadmin && player != null && Residence.resadminToggle.contains(player.getName())) { - if (!Residence.gmanager.isResidenceAdmin(player)) { - Residence.resadminToggle.remove(player.getName()); - } - } - boolean respond = cmdClass.perform(args, resadmin, command, sender); - if (!respond) { - String[] tempArray = new String[args.length + 1]; - for (int i = 0; i < args.length; i++) { - tempArray[i] = args[i]; - } - tempArray[args.length] = "?"; - args = tempArray; - return commandHelp(args, resadmin, sender, command); - } - - return true; - } - return this.onCommand(sender, command, label, args); - } - - private static cmd getCmdClass(String[] args) { - cmd cmdClass = null; - try { - Class nmsClass; - nmsClass = Class.forName("com.bekvon.bukkit.residence.commands." + args[0].toLowerCase()); - if (cmd.class.isAssignableFrom(nmsClass)) { - cmdClass = (cmd) nmsClass.getConstructor().newInstance(); - } - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException - | SecurityException e) { - } - return cmdClass; - } - - public void sendUsage(CommandSender sender, String command) { - Residence.msg(sender, lm.General_DefaultUsage, command); - } - - private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender, Command command) { - if (Residence.helppages == null) - return false; - - String helppath = getHelpPath(args); - - int page = 1; - if (!args[args.length - 1].equalsIgnoreCase("?")) { - try { - page = Integer.parseInt(args[args.length - 1]); - } catch (Exception ex) { - Residence.msg(sender, lm.General_InvalidHelp); - } - } - - if (command.getName().equalsIgnoreCase("res")) - resadmin = false; - if (Residence.helppages.containesEntry(helppath)) - Residence.helppages.printHelp(sender, page, helppath, resadmin); - return true; - } - - private String getHelpPath(String[] args) { - String helppath = "res"; - for (int i = 0; i < args.length; i++) { - if (args[i].equalsIgnoreCase("?")) { - break; - } - helppath = helppath + "." + args[i]; - } - if (!Residence.helppages.containesEntry(helppath) && args.length > 0) - return getHelpPath(Arrays.copyOf(args, args.length - 1)); - return helppath; - } - -} +package com.bekvon.bukkit.residence; + +import java.util.logging.Level; +import java.util.logging.Logger; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; + +public class ResidenceCommandListener extends Residence { + + private static List AdminCommands = new ArrayList(); + + public static List getAdminCommands() { + if (AdminCommands.size() == 0) + AdminCommands = Residence.getCommandFiller().getCommands(false); + return AdminCommands; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); + getServ().getPluginManager().callEvent(cevent); + if (cevent.isCancelled()) { + return true; + } + + if (sender instanceof Player && !getPermissionManager().isResidenceAdmin(sender) && isDisabledWorldCommand(((Player) sender) + .getWorld())) { + this.msg(sender, lm.General_DisabledWorld); + return true; + } + + if (command.getName().equals("resreload") && args.length == 0) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (getPermissionManager().isResidenceAdmin(player) && player.hasPermission("residence.topadmin")) { + this.reloadPlugin(); + sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); + System.out.println("[Residence] Reloaded by " + player.getName() + "."); + } else + this.msg(player, lm.General_NoPermission); + } else { + this.reloadPlugin(); + System.out.println("[Residence] Reloaded by console."); + } + return true; + } + if (command.getName().equals("resload")) { + if (!(sender instanceof Player) || sender instanceof Player && getPermissionManager().isResidenceAdmin(sender) && ((Player) sender).hasPermission( + "residence.topadmin")) { + try { + this.loadYml(); + sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); + } catch (Exception ex) { + sender.sendMessage(ChatColor.RED + "[Residence] Unable to reload the save file, exception occured!"); + sender.sendMessage(ChatColor.RED + ex.getMessage()); + Logger.getLogger(this.getInstance().getClass().getName()).log(Level.SEVERE, null, ex); + } + } else + msg(sender, lm.General_NoPermission); + return true; + } else if (command.getName().equals("rc")) { + cmd cmdClass = getCmdClass(new String[] { "rc" }); + if (cmdClass == null) { + sendUsage(sender, command.getName()); + return true; + } + boolean respond = cmdClass.perform(this.getInstance(), args, false, command, sender); + if (!respond) + sendUsage(sender, command.getName()); + return true; + } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { + boolean resadmin = false; + if (sender instanceof Player) { + if (command.getName().equals("resadmin") && getPermissionManager().isResidenceAdmin(sender)) { + resadmin = true; + } + if (command.getName().equals("resadmin") && !getPermissionManager().isResidenceAdmin(sender)) { + ((Player) sender).sendMessage(msg(lm.Residence_NonAdmin)); + return true; + } + if (command.getName().equals("res") && getPermissionManager().isResidenceAdmin(sender) && getConfigManager().getAdminFullAccess()) { + resadmin = true; + } + } else { + resadmin = true; + } + + if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { + return commandHelp(args, resadmin, sender, command); + } + + Player player = null; + if (sender instanceof Player) { + player = (Player) sender; + } else { + resadmin = true; + } + if (getConfigManager().allowAdminsOnly()) { + if (!resadmin && player != null) { + msg(player, lm.General_AdminOnly); + return true; + } + } + if (args.length == 0) { + args = new String[1]; + args[0] = "?"; + } + + String cmd = args[0].toLowerCase(); + + switch (cmd) { + case "delete": + cmd = "remove"; + break; + case "sz": + cmd = "subzone"; + break; + } + + cmd cmdClass = getCmdClass(args); + if (cmdClass == null) { + return commandHelp(new String[] { "?" }, resadmin, sender, command); + } + + if (!resadmin && !this.hasPermission(sender, "residence.command." + args[0].toLowerCase())) + return true; + + if (!resadmin && player != null && resadminToggle.contains(player.getName())) { + if (!getPermissionManager().isResidenceAdmin(player)) { + resadminToggle.remove(player.getName()); + } + } + boolean respond = cmdClass.perform(this.getInstance(), args, resadmin, command, sender); + if (!respond) { + String[] tempArray = new String[args.length + 1]; + for (int i = 0; i < args.length; i++) { + tempArray[i] = args[i]; + } + tempArray[args.length] = "?"; + args = tempArray; + return commandHelp(args, resadmin, sender, command); + } + + return true; + } + return this.onCommand(sender, command, label, args); + } + + private static cmd getCmdClass(String[] args) { + cmd cmdClass = null; + try { + Class nmsClass; + nmsClass = Class.forName("com.bekvon.bukkit.residence.commands." + args[0].toLowerCase()); + if (cmd.class.isAssignableFrom(nmsClass)) { + cmdClass = (cmd) nmsClass.getConstructor().newInstance(); + } + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException + | SecurityException e) { + } + return cmdClass; + } + + public void sendUsage(CommandSender sender, String command) { + msg(sender, lm.General_DefaultUsage, command); + } + + private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender, Command command) { + if (getHelpPages() == null) + return false; + + String helppath = getHelpPath(args); + + int page = 1; + if (!args[args.length - 1].equalsIgnoreCase("?")) { + try { + page = Integer.parseInt(args[args.length - 1]); + } catch (Exception ex) { + msg(sender, lm.General_InvalidHelp); + } + } + + if (command.getName().equalsIgnoreCase("res")) + resadmin = false; + if (getHelpPages().containesEntry(helppath)) + getHelpPages().printHelp(sender, page, helppath, resadmin); + return true; + } + + private String getHelpPath(String[] args) { + String helppath = "res"; + for (int i = 0; i < args.length; i++) { + if (args[i].equalsIgnoreCase("?")) { + break; + } + helppath = helppath + "." + args[i]; + } + if (!getHelpPages().containesEntry(helppath) && args.length > 0) + return getHelpPath(Arrays.copyOf(args, args.length - 1)); + return helppath; + } + +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10.java b/src/com/bekvon/bukkit/residence/allNms/v1_10.java index 488d9e006..d3c1b0128 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10.java @@ -97,7 +97,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { case DRAGON_EGG: return true; default: - return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java index 88718c5a7..02cb11b5e 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java @@ -1,30 +1,30 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.entity.Entity; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; - -public class v1_10Events implements Listener { - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - - public void onPlayerFireInteract(EntityDamageEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) - return; - - if (event.getCause() != DamageCause.HOT_FLOOR) - return; - - Entity ent = event.getEntity(); - - if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.hotfloor, true)) { - event.setCancelled(true); - return; - } - } -} +package com.bekvon.bukkit.residence.allNms; + +import org.bukkit.entity.Entity; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; + +public class v1_10Events implements Listener { + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + + public void onPlayerFireInteract(EntityDamageEvent event) { + // disabling event on world + if (Residence.getInstance().isDisabledWorldListener(event.getEntity().getWorld())) + return; + + if (event.getCause() != DamageCause.HOT_FLOOR) + return; + + Entity ent = event.getEntity(); + + if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.hotfloor, true)) { + event.setCancelled(true); + return; + } + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11.java b/src/com/bekvon/bukkit/residence/allNms/v1_11.java index 59f15dc63..bb8223f85 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11.java @@ -99,7 +99,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { case DRAGON_EGG: return true; default: - return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index bebcf4b4d..d7b631063 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -1,143 +1,143 @@ -package com.bekvon.bukkit.residence.allNms; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; -import org.bukkit.entity.Player; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.NMS; - -public class v1_7 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.add(event.getBlock()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return false; - } - - @Override - public boolean isArmorStandMaterial(Material material) { - return false; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { - case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case TRAP_DOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: - case DRAGON_EGG: - return true; - default: - return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: - case STRING: - case WALL_SIGN: - case SAPLING: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - return false; - } - - @Override - public boolean isSpectator(GameMode mode) { - return false; - } - - @Override - public void addDefaultFlags(Map matUseFlagList) { - } - - @Override - public boolean isPlate(Material mat) { - return false; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return true; - } - - @SuppressWarnings("deprecation") - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInHand(); - } - - @SuppressWarnings("deprecation") - @Override - public Block getTargetBlock(Player player, int range) { - return player.getTargetBlock((HashSet) null, range); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - return false; - } - - @SuppressWarnings("incomplete-switch") - @Override - public boolean isBoat(Material mat) { - switch (mat) { - case BOAT: - return true; - } - return false; - } -} +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.NMS; + +public class v1_7 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.add(event.getBlock()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return false; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return false; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case TRAP_DOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return false; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + } + + @Override + public boolean isPlate(Material mat) { + return false; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return true; + } + + @SuppressWarnings("deprecation") + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInHand(); + } + + @SuppressWarnings("deprecation") + @Override + public Block getTargetBlock(Player player, int range) { + return player.getTargetBlock((HashSet) null, range); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + return false; + } + + @SuppressWarnings("incomplete-switch") + @Override + public boolean isBoat(Material mat) { + switch (mat) { + case BOAT: + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 80a4aa486..4fc1f6e27 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -1,143 +1,143 @@ -package com.bekvon.bukkit.residence.allNms; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; -import org.bukkit.entity.Player; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.NMS; - -public class v1_7_Couldron implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.add(event.getBlock()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return false; - } - - @Override - public boolean isArmorStandMaterial(Material material) { - return false; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { - case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case TRAP_DOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: - case DRAGON_EGG: - return true; - default: - return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: - case STRING: - case WALL_SIGN: - case SAPLING: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - return false; - } - - @Override - public boolean isSpectator(GameMode mode) { - return false; - } - - @Override - public void addDefaultFlags(Map matUseFlagList) { - } - - @Override - public boolean isPlate(Material mat) { - return false; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return true; - } - - @SuppressWarnings("deprecation") - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInHand(); - } - - @SuppressWarnings("deprecation") - @Override - public Block getTargetBlock(Player player, int range) { - return player.getTargetBlock((HashSet) null, range); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - return false; - } - - @SuppressWarnings("incomplete-switch") - @Override - public boolean isBoat(Material mat) { - switch (mat) { - case BOAT: - return true; - } - return false; - } -} +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.NMS; + +public class v1_7_Couldron implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.add(event.getBlock()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return false; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return false; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case TRAP_DOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return false; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + } + + @Override + public boolean isPlate(Material mat) { + return false; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return true; + } + + @SuppressWarnings("deprecation") + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInHand(); + } + + @SuppressWarnings("deprecation") + @Override + public Block getTargetBlock(Player player, int range) { + return player.getTargetBlock((HashSet) null, range); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + return false; + } + + @SuppressWarnings("incomplete-switch") + @Override + public boolean isBoat(Material mat) { + switch (mat) { + case BOAT: + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java index e519cf663..4032dc09c 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8.java @@ -1,172 +1,172 @@ -package com.bekvon.bukkit.residence.allNms; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; -import org.bukkit.entity.Player; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.NMS; - -public class v1_8 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager - || ent instanceof Rabbit); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { - case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case SPRUCE_DOOR: - case BIRCH_DOOR: - case JUNGLE_DOOR: - case ACACIA_DOOR: - case DARK_OAK_DOOR: - case SPRUCE_FENCE_GATE: - case BIRCH_FENCE_GATE: - case JUNGLE_FENCE_GATE: - case ACACIA_FENCE_GATE: - case DARK_OAK_FENCE_GATE: - case TRAP_DOOR: - case IRON_TRAPDOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: - case DRAGON_EGG: - return true; - default: - return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: - case STRING: - case WALL_BANNER: - case WALL_SIGN: - case SAPLING: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - return false; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, "door"); - matUseFlagList.put(Material.BIRCH_DOOR, "door"); - matUseFlagList.put(Material.JUNGLE_DOOR, "door"); - matUseFlagList.put(Material.ACACIA_DOOR, "door"); - matUseFlagList.put(Material.DARK_OAK_DOOR, "door"); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, "door"); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, "door"); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, "door"); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, "door"); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, "door"); - matUseFlagList.put(Material.IRON_TRAPDOOR, "door"); - /* 1.8 day light sensor */ - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, "diode"); - } - - @Override - public boolean isPlate(Material mat) { - return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return true; - } - - @SuppressWarnings("deprecation") - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInHand(); - } - - @Override - public Block getTargetBlock(Player player, int range) { - return player.getTargetBlock((Set) null, range); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - return false; - } - - @SuppressWarnings("incomplete-switch") - @Override - public boolean isBoat(Material mat) { - switch (mat) { - case BOAT: - return true; - } - return false; - } -} +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.NMS; + +public class v1_8 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager + || ent instanceof Rabbit); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case SPRUCE_DOOR: + case BIRCH_DOOR: + case JUNGLE_DOOR: + case ACACIA_DOOR: + case DARK_OAK_DOOR: + case SPRUCE_FENCE_GATE: + case BIRCH_FENCE_GATE: + case JUNGLE_FENCE_GATE: + case ACACIA_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case TRAP_DOOR: + case IRON_TRAPDOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, "door"); + matUseFlagList.put(Material.BIRCH_DOOR, "door"); + matUseFlagList.put(Material.JUNGLE_DOOR, "door"); + matUseFlagList.put(Material.ACACIA_DOOR, "door"); + matUseFlagList.put(Material.DARK_OAK_DOOR, "door"); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, "door"); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, "door"); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, "door"); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, "door"); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, "door"); + matUseFlagList.put(Material.IRON_TRAPDOOR, "door"); + /* 1.8 day light sensor */ + matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, "diode"); + } + + @Override + public boolean isPlate(Material mat) { + return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return true; + } + + @SuppressWarnings("deprecation") + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInHand(); + } + + @Override + public Block getTargetBlock(Player player, int range) { + return player.getTargetBlock((Set) null, range); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + return false; + } + + @SuppressWarnings("incomplete-switch") + @Override + public boolean isBoat(Material mat) { + switch (mat) { + case BOAT: + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java index cf42dc0be..45faf104e 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java @@ -1,62 +1,62 @@ -package com.bekvon.bukkit.residence.allNms; - -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockExplodeEvent; -import org.bukkit.event.player.PlayerInteractAtEntityEvent; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.FlagPermissions; - -public class v1_8Events implements Listener { - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { - Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - if (!Residence.getNms().isArmorStandEntity(ent.getType())) - return; - - FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); - String world = player.getWorld().getName(); - - if (!perms.playerHas(player.getName(), world, Flags.container, perms.playerHas(player.getName(), world, Flags.use, true))) { - event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.container.getName()); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockExplodeEvent(BlockExplodeEvent event) { - - Location loc = event.getBlock().getLocation(); - - if (Residence.isDisabledWorldListener(loc.getWorld())) - return; - if (event.isCancelled()) - return; - FlagPermissions world = Residence.getWorldFlags().getPerms(loc.getWorld().getName()); - List preserve = new ArrayList(); - for (Block block : event.blockList()) { - FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); - if (!blockperms.has(Flags.explode, world.has(Flags.explode, true))) { - preserve.add(block); - } - } - for (Block block : preserve) { - event.blockList().remove(block); - } - } -} +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockExplodeEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.FlagPermissions; + +public class v1_8Events implements Listener { + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { + Player player = event.getPlayer(); + if (Residence.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + if (!Residence.getInstance().getNms().isArmorStandEntity(ent.getType())) + return; + + FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + String world = player.getWorld().getName(); + + if (!perms.playerHas(player.getName(), world, Flags.container, perms.playerHas(player.getName(), world, Flags.use, true))) { + event.setCancelled(true); + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container.getName()); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockExplodeEvent(BlockExplodeEvent event) { + + Location loc = event.getBlock().getLocation(); + + if (Residence.getInstance().isDisabledWorldListener(loc.getWorld())) + return; + if (event.isCancelled()) + return; + FlagPermissions world = Residence.getInstance().getWorldFlags().getPerms(loc.getWorld().getName()); + List preserve = new ArrayList(); + for (Block block : event.blockList()) { + FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); + if (!blockperms.has(Flags.explode, world.has(Flags.explode, true))) { + preserve.add(block); + } + } + for (Block block : preserve) { + event.blockList().remove(block); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9.java b/src/com/bekvon/bukkit/residence/allNms/v1_9.java index 5aaad8271..b0cd171fc 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9.java @@ -1,179 +1,179 @@ -package com.bekvon.bukkit.residence.allNms; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; -import org.bukkit.entity.Player; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.NMS; - -public class v1_9 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager - || ent instanceof Rabbit); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { - case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case SPRUCE_DOOR: - case BIRCH_DOOR: - case JUNGLE_DOOR: - case ACACIA_DOOR: - case DARK_OAK_DOOR: - case SPRUCE_FENCE_GATE: - case BIRCH_FENCE_GATE: - case JUNGLE_FENCE_GATE: - case ACACIA_FENCE_GATE: - case DARK_OAK_FENCE_GATE: - case TRAP_DOOR: - case IRON_TRAPDOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: - case DRAGON_EGG: - return true; - default: - return Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: - case STRING: - case WALL_BANNER: - case WALL_SIGN: - case SAPLING: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - return false; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, "door"); - matUseFlagList.put(Material.BIRCH_DOOR, "door"); - matUseFlagList.put(Material.JUNGLE_DOOR, "door"); - matUseFlagList.put(Material.ACACIA_DOOR, "door"); - matUseFlagList.put(Material.DARK_OAK_DOOR, "door"); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, "door"); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, "door"); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, "door"); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, "door"); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, "door"); - matUseFlagList.put(Material.IRON_TRAPDOOR, "door"); - - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, "diode"); - } - - @Override - public boolean isPlate(Material mat) { - return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public Block getTargetBlock(Player player, int range) { - return player.getTargetBlock((Set) null, range); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } - - @SuppressWarnings("incomplete-switch") - @Override - public boolean isBoat(Material mat) { - switch (mat) { - case BOAT: - case BOAT_ACACIA: - case BOAT_BIRCH: - case BOAT_DARK_OAK: - case BOAT_JUNGLE: - case BOAT_SPRUCE: - return true; - } - return false; - } -} +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.NMS; + +public class v1_9 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager + || ent instanceof Rabbit); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case SPRUCE_DOOR: + case BIRCH_DOOR: + case JUNGLE_DOOR: + case ACACIA_DOOR: + case DARK_OAK_DOOR: + case SPRUCE_FENCE_GATE: + case BIRCH_FENCE_GATE: + case JUNGLE_FENCE_GATE: + case ACACIA_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case TRAP_DOOR: + case IRON_TRAPDOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, "door"); + matUseFlagList.put(Material.BIRCH_DOOR, "door"); + matUseFlagList.put(Material.JUNGLE_DOOR, "door"); + matUseFlagList.put(Material.ACACIA_DOOR, "door"); + matUseFlagList.put(Material.DARK_OAK_DOOR, "door"); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, "door"); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, "door"); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, "door"); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, "door"); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, "door"); + matUseFlagList.put(Material.IRON_TRAPDOOR, "door"); + + matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, "diode"); + } + + @Override + public boolean isPlate(Material mat) { + return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public Block getTargetBlock(Player player, int range) { + return player.getTargetBlock((Set) null, range); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @SuppressWarnings("incomplete-switch") + @Override + public boolean isBoat(Material mat) { + switch (mat) { + case BOAT: + case BOAT_ACACIA: + case BOAT_BIRCH: + case BOAT_DARK_OAK: + case BOAT_JUNGLE: + case BOAT_SPRUCE: + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index 2713a6db5..314dec858 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -20,14 +20,14 @@ public class v1_9Events implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (Residence.getInstance().isDisabledWorldListener(event.getEntity().getWorld())) return; if (event.isCancelled()) return; boolean harmfull = false; mein: for (PotionEffect one : event.getEntity().getEffects()) { - for (String oneHarm : Residence.getConfigManager().getNegativePotionEffects()) { + for (String oneHarm : Residence.getInstance().getConfigManager().getNegativePotionEffects()) { if (oneHarm.equalsIgnoreCase(one.getType().getName())) { harmfull = true; break mein; @@ -47,14 +47,14 @@ public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (Residence.getInstance().isDisabledWorldListener(event.getEntity().getWorld())) return; boolean harmfull = false; // Temporally fail safe to avoid console spam for getting base potion data until fix roles out try { - for (String oneHarm : Residence.getConfigManager().getNegativeLingeringPotionEffects()) { + for (String oneHarm : Residence.getInstance().getConfigManager().getNegativeLingeringPotionEffects()) { if (event.getEntity().getBasePotionData().getType().name().equalsIgnoreCase(oneHarm)) { harmfull = true; break; diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index b4f57cc2c..92962fc6a 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -38,7 +38,7 @@ public void setChannelColor(ChatColor ChannelColor) { public void chat(String sourcePlayer, String message) { Server serv = Residence.getServ(); - ResidenceChatEvent cevent = new ResidenceChatEvent(Residence.getResidenceManager().getByName(channelName), serv.getPlayer(sourcePlayer), this.ChatPrefix, message, + ResidenceChatEvent cevent = new ResidenceChatEvent(Residence.getInstance().getResidenceManager().getByName(channelName), serv.getPlayer(sourcePlayer), this.ChatPrefix, message, this.ChannelColor); Residence.getServ().getPluginManager().callEvent(cevent); if (cevent.isCancelled()) @@ -46,7 +46,7 @@ public void chat(String sourcePlayer, String message) { for (String member : members) { Player player = serv.getPlayer(member); - Residence.msg(player, cevent.getChatprefix() + " " + Residence.getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent + Residence.msg(player, cevent.getChatprefix() + " " + Residence.getInstance().getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent .getChatMessage()); } Bukkit.getConsoleSender().sendMessage("ResidentialChat[" + channelName + "] - " + sourcePlayer + ": " + ChatColor.stripColor(cevent.getChatMessage())); diff --git a/src/com/bekvon/bukkit/residence/chat/ChatManager.java b/src/com/bekvon/bukkit/residence/chat/ChatManager.java index 1fb872e52..e4480ed6e 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatManager.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatManager.java @@ -19,7 +19,7 @@ public ChatManager() { @Override public boolean setChannel(String player, String resName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(resName); + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByName(resName); if (res == null) return false; return setChannel(player, res); diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index 11217fd6d..4c9a02761 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -17,7 +17,7 @@ public class area implements cmd { @Override @CommandAnnotation(simple = true, priority = 3300) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -32,64 +32,64 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length == 4) { if (args[1].equals("remove")) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); if (res != null) { res.removeArea(player, args[3], resadmin); } else { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); } return true; } else if (args[1].equals("add")) { - if (Residence.getWorldEdit() != null) { - if (Residence.getWorldEdit().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { - Residence.getSelectionManager().worldEdit(player); + if (plugin.getWorldEdit() != null) { + if (plugin.getWorldEdit().getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) { + plugin.getSelectionManager().worldEdit(player); } } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); if (res != null) { - if (res.addArea(player, Residence.getSelectionManager().getSelectionCuboid(player), args[3], resadmin)) - Residence.msg(player, lm.Area_Create, args[3]); + if (res.addArea(player, plugin.getSelectionManager().getSelectionCuboid(player), args[3], resadmin)) + plugin.msg(player, lm.Area_Create, args[3]); } else { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); } } else { - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); } return true; } else if (args[1].equals("replace")) { - if (Residence.getWorldEdit() != null) { - if (Residence.getWorldEdit().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { - Residence.getSelectionManager().worldEdit(player); + if (plugin.getWorldEdit() != null) { + if (plugin.getWorldEdit().getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) { + plugin.getSelectionManager().worldEdit(player); } } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); if (res != null) { - res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), args[3], resadmin); + res.replaceArea(player, plugin.getSelectionManager().getSelectionCuboid(player), args[3], resadmin); } else { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); } } else { - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); } return true; } } if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); if (res != null) { res.printAreaList(player, page); } else { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); } return true; } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); + ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); if (res != null) { res.printAdvancedAreaList(player, page); } else { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); } return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index b8ea90ee7..7c79208a1 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -1,110 +1,110 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Location; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; - -public class auto implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 150) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (args.length != 2 && args.length != 1 && args.length != 3) { - return false; - } - - String resName = null; - - if (args.length > 1) - resName = args[1]; - else - resName = player.getName(); - - int lenght = -1; - if (args.length == 3) { - try { - lenght = Integer.parseInt(args[2]); - } catch (Exception ex) { - } - } - - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - - PermissionGroup group = rPlayer.getGroup(); - - Location loc = player.getLocation(); - - int X = group.getMaxX(); - int Y = group.getMaxY(); - int Z = group.getMaxZ(); - - if (lenght > 0) { - if (lenght < X) - X = lenght; - if (lenght < Z) - Z = lenght; - } - - int rX = (X - 1) / 2; - int rY = (Y - 1) / 2; - int rZ = (Z - 1) / 2; - - int minX = loc.getBlockX() - rX; - int maxX = loc.getBlockX() + rX; - - if (maxX - minX + 1 < X) - maxX++; - - int minY = loc.getBlockY() - rY; - int maxY = loc.getBlockY() + rY; - - if (maxY - minY + 1 < Y) - maxY++; - - if (minY < 0) { - maxY += -minY; - minY = 0; - } - - if (maxY > loc.getWorld().getMaxHeight()) { - int dif = maxY - loc.getWorld().getMaxHeight(); - if (minY > 0) - minY -= dif; - if (minY < 0) - minY = 0; - maxY = loc.getWorld().getMaxHeight() - 1; - } - - int minZ = loc.getBlockZ() - rZ; - int maxZ = loc.getBlockZ() + rZ; - if (maxZ - minZ + 1 < Z) - maxZ++; - - Residence.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), minX, minY, minZ), false); - Residence.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), maxX, maxY, maxZ), false); - - player.performCommand("res create " + resName); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - // Main command - c.get(path + "Description", "Create maximum allowed residence around you"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res auto (residence name) (radius)")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; + +public class auto implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 150) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 2 && args.length != 1 && args.length != 3) { + return false; + } + + String resName = null; + + if (args.length > 1) + resName = args[1]; + else + resName = player.getName(); + + int lenght = -1; + if (args.length == 3) { + try { + lenght = Integer.parseInt(args[2]); + } catch (Exception ex) { + } + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); + + Location loc = player.getLocation(); + + int X = group.getMaxX(); + int Y = group.getMaxY(); + int Z = group.getMaxZ(); + + if (lenght > 0) { + if (lenght < X) + X = lenght; + if (lenght < Z) + Z = lenght; + } + + int rX = (X - 1) / 2; + int rY = (Y - 1) / 2; + int rZ = (Z - 1) / 2; + + int minX = loc.getBlockX() - rX; + int maxX = loc.getBlockX() + rX; + + if (maxX - minX + 1 < X) + maxX++; + + int minY = loc.getBlockY() - rY; + int maxY = loc.getBlockY() + rY; + + if (maxY - minY + 1 < Y) + maxY++; + + if (minY < 0) { + maxY += -minY; + minY = 0; + } + + if (maxY > loc.getWorld().getMaxHeight()) { + int dif = maxY - loc.getWorld().getMaxHeight(); + if (minY > 0) + minY -= dif; + if (minY < 0) + minY = 0; + maxY = loc.getWorld().getMaxHeight() - 1; + } + + int minZ = loc.getBlockZ() - rZ; + int maxZ = loc.getBlockZ() + rZ; + if (maxZ - minZ + 1 < Z) + maxZ++; + + plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), minX, minY, minZ), false); + plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), maxX, maxY, maxZ), false); + + player.performCommand("res create " + resName); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Create maximum allowed residence around you"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res auto (residence name) (radius)")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 7f6b3cb80..1894eb309 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -1,66 +1,66 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class bank implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 3400) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if ((args.length != 3) && (args.length != 4)) { - return false; - } - ClaimedResidence res = null; - if (args.length == 4) { - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); - return true; - } - } else if ((sender instanceof Player)) { - res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); - } - if (res == null) { - Residence.msg(sender, lm.Residence_NotIn); - return true; - } - int amount = 0; - try { - if (args.length == 3) - amount = Integer.parseInt(args[2]); - else - amount = Integer.parseInt(args[3]); - } catch (Exception ex) { - Residence.msg(sender, lm.Invalid_Amount); - return true; - } - if (args[1].equals("deposit")) - res.getBank().deposit(sender, amount, resadmin); - else if (args[1].equals("withdraw")) - res.getBank().withdraw(sender, amount, resadmin); - else - return false; - - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manage money in a Residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", - "You must be standing in a Residence or provide residence name", - "You must have the +bank flag.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw", "[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class bank implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3400) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if ((args.length != 3) && (args.length != 4)) { + return false; + } + ClaimedResidence res = null; + if (args.length == 4) { + res = plugin.getResidenceManager().getByName(args[2]); + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; + } + } else if ((sender instanceof Player)) { + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); + } + if (res == null) { + plugin.msg(sender, lm.Residence_NotIn); + return true; + } + int amount = 0; + try { + if (args.length == 3) + amount = Integer.parseInt(args[2]); + else + amount = Integer.parseInt(args[3]); + } catch (Exception ex) { + plugin.msg(sender, lm.Invalid_Amount); + return true; + } + if (args[1].equals("deposit")) + res.getBank().deposit(sender, amount, resadmin); + else if (args[1].equals("withdraw")) + res.getBank().withdraw(sender, amount, resadmin); + else + return false; + + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manage money in a Residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", + "You must be standing in a Residence or provide residence name", + "You must have the +bank flag.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw", "[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index 521bb480a..5af859383 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -1,52 +1,52 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class check implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 3500) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - Player player = (Player) sender; - String pname = player.getName(); - - if (args.length != 3 && args.length != 4) - return false; - - if (args.length == 4) - pname = args[3]; - - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { - Residence.msg(player, lm.Flag_CheckFalse, args[2], pname, args[1]); - } else { - Residence.msg(player, lm.Flag_CheckTrue, args[2], pname, args[1], (res.getPermissions().playerHas(pname, res.getPermissions() - .getWorld(), args[2], false) ? Residence.msg(lm.General_True) : Residence.msg(lm.General_False))); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Check flag state for you"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res check [residence] [flag] (playername)")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[flag]" ,"[playername]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class check implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3500) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + Player player = (Player) sender; + String pname = player.getName(); + + if (args.length != 3 && args.length != 4) + return false; + + if (args.length == 4) + pname = args[3]; + + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { + plugin.msg(player, lm.Flag_CheckFalse, args[2], pname, args[1]); + } else { + plugin.msg(player, lm.Flag_CheckTrue, args[2], pname, args[1], (res.getPermissions().playerHas(pname, res.getPermissions() + .getWorld(), args[2], false) ? plugin.msg(lm.General_True) : plugin.msg(lm.General_False))); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Check flag state for you"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res check [residence] [flag] (playername)")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[flag]" ,"[playername]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/clearflags.java b/src/com/bekvon/bukkit/residence/commands/clearflags.java index 140a10b13..d7e360698 100644 --- a/src/com/bekvon/bukkit/residence/commands/clearflags.java +++ b/src/com/bekvon/bukkit/residence/commands/clearflags.java @@ -1,46 +1,46 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class clearflags implements cmd { - - @Override - @CommandAnnotation(simple = false, priority = 3600) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (!resadmin) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); - if (area != null) { - area.getPermissions().clearFlags(); - Residence.msg(player, lm.Flag_Cleared); - } else { - Residence.msg(player, lm.Invalid_Residence); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Remove all flags from residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res clearflags ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class clearflags implements cmd { + + @Override + @CommandAnnotation(simple = false, priority = 3600) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (!resadmin) { + plugin.msg(player, lm.General_NoPermission); + return true; + } + ClaimedResidence area = plugin.getResidenceManager().getByName(args[1]); + if (area != null) { + area.getPermissions().clearFlags(); + plugin.msg(player, lm.Flag_Cleared); + } else { + plugin.msg(player, lm.Invalid_Residence); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Remove all flags from residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res clearflags ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index 3cb3662db..f619baa38 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -1,95 +1,95 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class command implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 3000) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - - ClaimedResidence res = null; - String action = null; - String cmd = null; - if (args.length == 2 && sender instanceof Player) { - Player player = (Player) sender; - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - action = args[1]; - } else if (args.length == 3 && sender instanceof Player) { - Player player = (Player) sender; - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - action = args[1]; - cmd = args[2]; - } else if (args.length == 4) { - res = Residence.getResidenceManager().getByName(args[1]); - action = args[2]; - cmd = args[3]; - } else if (args.length == 3 && !(sender instanceof Player)) { - res = Residence.getResidenceManager().getByName(args[1]); - action = args[2]; - } - - if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); - return true; - } - - if (!res.isOwner(sender) && !resadmin) { - Residence.msg(sender, lm.Residence_NotOwner); - return true; - } - - if (action != null && action.equalsIgnoreCase("allow")) { - if (res.addCmdWhiteList(cmd)) { - Residence.msg(sender, lm.command_addedAllow, res.getName()); - } else - Residence.msg(sender, lm.command_removedAllow, res.getName()); - } else if (action != null && action.equalsIgnoreCase("block")) { - if (res.addCmdBlackList(cmd)) { - Residence.msg(sender, lm.command_addedBlock, res.getName()); - } else - Residence.msg(sender, lm.command_removedBlock, res.getName()); - } else if (action != null && action.equalsIgnoreCase("list")) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < res.getCmdBlackList().size(); i++) { - sb.append("/" + res.getCmdBlackList().get(i).replace("_", " ")); - if (i + 1 < res.getCmdBlackList().size()) - sb.append(", "); - } - Residence.msg(sender, lm.command_Blocked, sb.toString()); - - sb = new StringBuilder(); - for (int i = 0; i < res.getCmdWhiteList().size(); i++) { - sb.append("/" + res.getCmdWhiteList().get(i).replace("_", " ")); - if (i + 1 < res.getCmdWhiteList().size()) - sb.append(", "); - } - Residence.msg(sender, lm.command_Allowed, sb.toString()); - } else - return false; - - return true; - - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manages allowed or blocked commands in residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res command ", - "Shows list, adds or removes allowed or disabled commands in residence", - "Use _ to include command with multiple variables")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%allow%%block%%list", - "allow%%block%%list")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class command implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3000) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + + ClaimedResidence res = null; + String action = null; + String cmd = null; + if (args.length == 2 && sender instanceof Player) { + Player player = (Player) sender; + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + action = args[1]; + } else if (args.length == 3 && sender instanceof Player) { + Player player = (Player) sender; + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + action = args[1]; + cmd = args[2]; + } else if (args.length == 4) { + res = plugin.getResidenceManager().getByName(args[1]); + action = args[2]; + cmd = args[3]; + } else if (args.length == 3 && !(sender instanceof Player)) { + res = plugin.getResidenceManager().getByName(args[1]); + action = args[2]; + } + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; + } + + if (!res.isOwner(sender) && !resadmin) { + plugin.msg(sender, lm.Residence_NotOwner); + return true; + } + + if (action != null && action.equalsIgnoreCase("allow")) { + if (res.addCmdWhiteList(cmd)) { + plugin.msg(sender, lm.command_addedAllow, res.getName()); + } else + plugin.msg(sender, lm.command_removedAllow, res.getName()); + } else if (action != null && action.equalsIgnoreCase("block")) { + if (res.addCmdBlackList(cmd)) { + plugin.msg(sender, lm.command_addedBlock, res.getName()); + } else + plugin.msg(sender, lm.command_removedBlock, res.getName()); + } else if (action != null && action.equalsIgnoreCase("list")) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < res.getCmdBlackList().size(); i++) { + sb.append("/" + res.getCmdBlackList().get(i).replace("_", " ")); + if (i + 1 < res.getCmdBlackList().size()) + sb.append(", "); + } + plugin.msg(sender, lm.command_Blocked, sb.toString()); + + sb = new StringBuilder(); + for (int i = 0; i < res.getCmdWhiteList().size(); i++) { + sb.append("/" + res.getCmdWhiteList().get(i).replace("_", " ")); + if (i + 1 < res.getCmdWhiteList().size()) + sb.append(", "); + } + plugin.msg(sender, lm.command_Allowed, sb.toString()); + } else + return false; + + return true; + + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manages allowed or blocked commands in residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res command ", + "Shows list, adds or removes allowed or disabled commands in residence", + "Use _ to include command with multiple variables")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%allow%%block%%list", + "allow%%block%%list")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index ba632e2f9..edb1fe0d3 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -1,58 +1,56 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Location; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class compass implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 3200) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (args.length != 2) { - player.setCompassTarget(player.getWorld().getSpawnLocation()); - Residence.msg(player, lm.General_CompassTargetReset); - return true; - } - - if (!player.hasPermission("residence.compass")) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - - if (Residence.getResidenceManager().getByName(args[1]) != null) { - if (Residence.getResidenceManager().getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { - Location low = Residence.getResidenceManager().getByName(args[1]).getArea("main").getLowLoc(); - Location high = Residence.getResidenceManager().getByName(args[1]).getArea("main").getHighLoc(); - Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high - .getBlockZ()) / 2); - player.setCompassTarget(mid); - Residence.msg(player, lm.General_CompassTargetSet, args[1]); - } - } else { - Residence.msg(player, lm.Invalid_Residence); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Set compass ponter to residence location"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res compass ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class compass implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3200) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 2) { + player.setCompassTarget(player.getWorld().getSpawnLocation()); + plugin.msg(player, lm.General_CompassTargetReset); + return true; + } + + if (!plugin.hasPermission(player, "residence.compass")) + return true; + + if (plugin.getResidenceManager().getByName(args[1]) != null) { + if (plugin.getResidenceManager().getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { + Location low = plugin.getResidenceManager().getByName(args[1]).getArea("main").getLowLoc(); + Location high = plugin.getResidenceManager().getByName(args[1]).getArea("main").getHighLoc(); + Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high + .getBlockZ()) / 2); + player.setCompassTarget(mid); + plugin.msg(player, lm.General_CompassTargetSet, args[1]); + } + } else { + plugin.msg(player, lm.Invalid_Residence); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Set compass ponter to residence location"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res compass ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/confirm.java b/src/com/bekvon/bukkit/residence/commands/confirm.java index a4ca46986..38b82f7a0 100644 --- a/src/com/bekvon/bukkit/residence/commands/confirm.java +++ b/src/com/bekvon/bukkit/residence/commands/confirm.java @@ -1,46 +1,46 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class confirm implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 2400) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - Player player = null; - String name = "Console"; - if (sender instanceof Player) { - player = (Player) sender; - name = player.getName(); - } - if (args.length != 1) - return true; - - String area = Residence.deleteConfirm.get(name); - if (area == null) { - Residence.msg(sender, lm.Invalid_Residence); - } else { - Residence.getResidenceManager().removeResidence(player, area, resadmin); - Residence.deleteConfirm.remove(name); - } - - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Confirms removal of a residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res confirm", "Confirms removal of a residence.")); - } - -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class confirm implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 2400) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + Player player = null; + String name = "Console"; + if (sender instanceof Player) { + player = (Player) sender; + name = player.getName(); + } + if (args.length != 1) + return true; + + String area = plugin.deleteConfirm.get(name); + if (area == null) { + plugin.msg(sender, lm.Invalid_Residence); + } else { + plugin.getResidenceManager().removeResidence(player, area, resadmin); + plugin.deleteConfirm.remove(name); + } + + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Confirms removal of a residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res confirm", "Confirms removal of a residence.")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index e69b72c6f..2ef5e643e 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -18,32 +18,29 @@ public class contract implements cmd { @Override @CommandAnnotation(simple = true, priority = 1900) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; ClaimedResidence res = null; if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); else if (args.length == 3) - res = Residence.getResidenceManager().getByName(args[1]); + res = plugin.getResidenceManager().getByName(args[1]); else return false; if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } - if (res.isSubzone() && !player.hasPermission("residence.contract.subzone") && !resadmin) { - Residence.msg(player, lm.Subzone_CantContract); - return false; - } + if (res.isSubzone() && !resadmin && !plugin.hasPermission(player, "residence.contract.subzone", lm.Subzone_CantContract)) + return true; + - if (!res.isSubzone() && !player.hasPermission("residence.contract") && !resadmin) { - Residence.msg(player, lm.Residence_CantContractResidence); - return false; - } + if (!res.isSubzone() && !resadmin && !plugin.hasPermission(player, "residence.contract", lm.Residence_CantContractResidence)) + return true; String resName = res.getName(); CuboidArea area = null; @@ -53,16 +50,16 @@ else if (args.length == 3) areaName = res.getAreaIDbyLoc(player.getLocation()); area = res.getArea(areaName); } else if (args.length == 3) { - areaName = res.isSubzone() ? Residence.getResidenceManager().getSubzoneNameByRes(res) : "main"; + areaName = res.isSubzone() ? plugin.getResidenceManager().getSubzoneNameByRes(res) : "main"; area = res.getCuboidAreabyName(areaName); } if (area != null) { - Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); - Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); - Residence.msg(player, lm.Select_Area, areaName, resName); + plugin.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); + plugin.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); + plugin.msg(player, lm.Select_Area, areaName, resName); } else { - Residence.msg(player, lm.Area_NonExist); + plugin.msg(player, lm.Area_NonExist); return true; } int amount = -1; @@ -72,31 +69,26 @@ else if (args.length == 3) else if (args.length == 3) amount = Integer.parseInt(args[2]); } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Amount); + plugin.msg(player, lm.Invalid_Amount); return true; } if (amount > 1000) { - Residence.msg(player, lm.Invalid_Amount); + plugin.msg(player, lm.Invalid_Amount); return true; } if (amount < 0) amount = 1; - if (!Residence.getSelectionManager().contract(player, amount)) + if (!plugin.getSelectionManager().contract(player, amount)) return true; - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.getWorldEdit() != null) { - if (Residence.getWepid() == Residence.getConfigManager().getSelectionTooldID()) { - Residence.getSelectionManager().worldEdit(player); - } - } - res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); + if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + res.replaceArea(player, plugin.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); return true; } - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); return false; } diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 152819ad5..de95f5223 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -20,7 +20,7 @@ public class create implements cmd { @Override @CommandAnnotation(simple = true, priority = 100) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -29,39 +29,39 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; } - if (Residence.getWorldEdit() != null) { - if (Residence.getWorldEdit().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { - Residence.getSelectionManager().worldEdit(player); + if (plugin.getWorldEdit() != null) { + if (plugin.getWorldEdit().getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) { + plugin.getSelectionManager().worldEdit(player); } } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.getWorldGuard() != null) { - if (Residence.getWorldGuardUtil().isSelectionInRegion(player) == null) { - Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence + if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + if (plugin.getWorldGuard() != null) { + if (plugin.getWorldGuardUtil().isSelectionInRegion(player) == null) { + plugin.getResidenceManager().addResidence(player, args[1], plugin.getSelectionManager().getPlayerLoc1(player.getName()), plugin .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); return true; } - ProtectedRegion Region = Residence.getWorldGuardUtil().isSelectionInRegion(player); - Residence.msg(player, lm.Select_WorldGuardOverlap, Region.getId()); + ProtectedRegion Region = plugin.getWorldGuardUtil().isSelectionInRegion(player); + plugin.msg(player, lm.Select_WorldGuardOverlap, Region.getId()); - Location lowLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), + Location lowLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); - Location highLoc = new Location(Residence.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), + Location highLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); Visualizer v = new Visualizer(player); - v.setAreas(Residence.getSelectionManager().getSelectionCuboid(player)); + v.setAreas(plugin.getSelectionManager().getSelectionCuboid(player)); v.setErrorAreas(new CuboidArea(lowLoc, highLoc)); - Residence.getSelectionManager().showBounds(player, v); + plugin.getSelectionManager().showBounds(player, v); return true; } - Residence.getResidenceManager().addResidence(player, args[1], Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence + plugin.getResidenceManager().addResidence(player, args[1], plugin.getSelectionManager().getPlayerLoc1(player.getName()), plugin .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); return true; } - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/current.java b/src/com/bekvon/bukkit/residence/commands/current.java index e2a91db7f..8e3931b7c 100644 --- a/src/com/bekvon/bukkit/residence/commands/current.java +++ b/src/com/bekvon/bukkit/residence/commands/current.java @@ -1,43 +1,43 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class current implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (args.length != 1) - return false; - - String res = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - if (res == null) { - Residence.msg(player, lm.Residence_NotIn); - } else { - Residence.msg(player, lm.Residence_In, res); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Show residence your currently in."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res current")); - } - -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class current implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3100) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 1) + return false; + + String res = plugin.getResidenceManager().getNameByLoc(player.getLocation()); + if (res == null) { + plugin.msg(player, lm.Residence_NotIn); + } else { + plugin.msg(player, lm.Residence_In, res); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Show residence your currently in."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res current")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 20ac9418a..392382da9 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -18,7 +18,7 @@ public class expand implements cmd { @Override @CommandAnnotation(simple = true, priority = 2000) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -26,26 +26,22 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ClaimedResidence res = null; if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); else if (args.length == 3) { - res = Residence.getResidenceManager().getByName(args[1]); + res = plugin.getResidenceManager().getByName(args[1]); } else return false; if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } - if (res.isSubzone() && !player.hasPermission("residence.expand.subzone") && !resadmin) { - Residence.msg(player, lm.Subzone_CantExpand); - return false; - } + if (res.isSubzone() && !resadmin && !plugin.hasPermission(player, "residence.expand.subzone", lm.Subzone_CantExpand)) + return true; - if (!res.isSubzone() && !player.hasPermission("residence.expand") && !resadmin) { - Residence.msg(player, lm.Residence_CantExpandResidence); - return false; - } + if (!res.isSubzone() && !resadmin && !plugin.hasPermission(player, "residence.expand", lm.Residence_CantExpandResidence)) + return true; String resName = res.getName(); CuboidArea area = null; @@ -55,16 +51,16 @@ else if (args.length == 3) { areaName = res.getAreaIDbyLoc(player.getLocation()); area = res.getArea(areaName); } else if (args.length == 3) { - areaName = res.isSubzone() ? Residence.getResidenceManager().getSubzoneNameByRes(res) : "main"; + areaName = res.isSubzone() ? plugin.getResidenceManager().getSubzoneNameByRes(res) : "main"; area = res.getCuboidAreabyName(areaName); } if (area != null) { - Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); - Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); - Residence.msg(player, lm.Select_Area, areaName, resName); + plugin.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); + plugin.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); + plugin.msg(player, lm.Select_Area, areaName, resName); } else { - Residence.msg(player, lm.Area_NonExist); + plugin.msg(player, lm.Area_NonExist); return true; } int amount = -1; @@ -74,31 +70,31 @@ else if (args.length == 3) { else if (args.length == 3) amount = Integer.parseInt(args[2]); } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Amount); + plugin.msg(player, lm.Invalid_Amount); return true; } if (amount > 1000) { - Residence.msg(player, lm.Invalid_Amount); + plugin.msg(player, lm.Invalid_Amount); return true; } if (amount < 0) amount = 1; - Residence.getSelectionManager().modify(player, false, amount); + plugin.getSelectionManager().modify(player, false, amount); - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - if (Residence.getWorldEdit() != null) { - if (Residence.getWepid() == Residence.getConfigManager().getSelectionTooldID()) { - Residence.getSelectionManager().worldEdit(player); + if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + if (plugin.getWorldEdit() != null) { + if (plugin.getWepid() == plugin.getConfigManager().getSelectionTooldID()) { + plugin.getSelectionManager().worldEdit(player); } } - res.replaceArea(player, Residence.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); + res.replaceArea(player, plugin.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); return true; } - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); return false; } @@ -107,7 +103,7 @@ else if (args.length == 3) public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Expands residence in direction you looking"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1","1")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1", "1")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index 67b7b500f..c2a00d1af 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -1,62 +1,62 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.cmd; - -public class flags implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 1200) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - if (resadmin) - Bukkit.dispatchCommand(sender, "resadmin flags ? " + page); - else - Bukkit.dispatchCommand(sender, "res flags ? " + page); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "List of flags"); - c.get(path + "Info", Arrays.asList("For flag values, usually true allows the action, and false denys the action.")); - - for (Flags fl : Flags.values()) { - String pt = path + "SubCommands." + fl.getName(); - c.get(pt + ".Description", fl.getDesc()); - String forSet = "set/pset"; - switch (fl.getFlagMode()) { - case Group: - case Player: - forSet = "pset"; - break; - case Residence: - forSet = "set"; - break; - case Both: - default: - break; - } - c.get(pt + ".Info", Arrays.asList("&eUsage: &6/res " + forSet + " " + fl.getName() + " true/false/remove")); - } - - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "pset"), Arrays.asList("[residence]", "[flag]", - "[true%%false%%remove]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]", "[flag]", - "[true%%false%%remove]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.cmd; + +public class flags implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 1200) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + if (resadmin) + Bukkit.dispatchCommand(sender, "resadmin flags ? " + page); + else + Bukkit.dispatchCommand(sender, "res flags ? " + page); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "List of flags"); + c.get(path + "Info", Arrays.asList("For flag values, usually true allows the action, and false denys the action.")); + + for (Flags fl : Flags.values()) { + String pt = path + "SubCommands." + fl.getName(); + c.get(pt + ".Description", fl.getDesc()); + String forSet = "set/pset"; + switch (fl.getFlagMode()) { + case Group: + case Player: + forSet = "pset"; + break; + case Residence: + forSet = "set"; + break; + case Both: + default: + break; + } + c.get(pt + ".Info", Arrays.asList("&eUsage: &6/res " + forSet + " " + fl.getName() + " true/false/remove")); + } + + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "pset"), Arrays.asList("[residence]", "[flag]", + "[true%%false%%remove]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]", "[flag]", + "[true%%false%%remove]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index 0a0df930e..06c775d67 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -1,37 +1,37 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; - -public class give implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 3800) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (args.length != 3) - return false; - - Residence.getResidenceManager().giveResidence(player, args[2], args[1], resadmin); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Give residence to player."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res give [player]", "Gives your owned residence to target player")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; + +public class give implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3800) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 3) + return false; + + plugin.getResidenceManager().giveResidence(player, args[2], args[1], resadmin); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Give residence to player."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res give [player]", "Gives your owned residence to target player")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/gset.java b/src/com/bekvon/bukkit/residence/commands/gset.java index e4c73ad06..b7911cde4 100644 --- a/src/com/bekvon/bukkit/residence/commands/gset.java +++ b/src/com/bekvon/bukkit/residence/commands/gset.java @@ -1,51 +1,51 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class gset implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 4500) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (args.length == 4) { - ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); - } else { - Residence.msg(player, lm.Invalid_Area); - } - return true; - } else if (args.length == 5) { - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); - if (area != null) { - area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); - } else { - Residence.msg(player, lm.Invalid_Residence); - } - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Set flags on a specific group for a Residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class gset implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 4500) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length == 4) { + ClaimedResidence area = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (area != null) { + area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); + } else { + plugin.msg(player, lm.Invalid_Area); + } + return true; + } else if (args.length == 5) { + ClaimedResidence area = plugin.getResidenceManager().getByName(args[1]); + if (area != null) { + area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); + } else { + plugin.msg(player, lm.Invalid_Residence); + } + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Set flags on a specific group for a Residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/gui.java b/src/com/bekvon/bukkit/residence/commands/gui.java index e3b05f3fb..3d54f9de3 100644 --- a/src/com/bekvon/bukkit/residence/commands/gui.java +++ b/src/com/bekvon/bukkit/residence/commands/gui.java @@ -1,41 +1,41 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.getspout.spoutapi.SpoutManager; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; - -public class gui implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 4600) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (Residence.getSpoutListener() == null) - return true; - - if (args.length == 1) { - Residence.getSpout().showResidenceFlagGUI(SpoutManager.getPlayer(player), Residence.getResidenceManager().getNameByLoc(player.getLocation()), resadmin); - } else if (args.length == 2) { - Residence.getSpout().showResidenceFlagGUI(SpoutManager.getPlayer(player), args[1], resadmin); - } - - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Opens gui (Spout only)"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res gui ")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.getspout.spoutapi.SpoutManager; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; + +public class gui implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 4600) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (plugin.getSpoutListener() == null) + return true; + + if (args.length == 1) { + plugin.getSpout().showResidenceFlagGUI(SpoutManager.getPlayer(player), plugin.getResidenceManager().getNameByLoc(player.getLocation()), resadmin); + } else if (args.length == 2) { + plugin.getSpout().showResidenceFlagGUI(SpoutManager.getPlayer(player), args[1], resadmin); + } + + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Opens gui (Spout only)"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res gui ")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index ea66627e8..cd7f9dca0 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -1,44 +1,44 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class info implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 600) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - - if (args.length == 1 && sender instanceof Player) { - Player player = (Player) sender; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - Residence.getResidenceManager().printAreaInfo(res.getName(), sender, resadmin); - } else { - Residence.msg(sender, lm.Invalid_Residence); - } - return true; - } else if (args.length == 2) { - Residence.getResidenceManager().printAreaInfo(args[1], sender, resadmin); - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Show info on a residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class info implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 600) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + + if (args.length == 1 && sender instanceof Player) { + Player player = (Player) sender; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) { + plugin.getResidenceManager().printAreaInfo(res.getName(), sender, resadmin); + } else { + plugin.msg(sender, lm.Invalid_Residence); + } + return true; + } else if (args.length == 2) { + plugin.getResidenceManager().printAreaInfo(args[1], sender, resadmin); + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Show info on a residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 9e5381fb5..6cfaeeb7e 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -21,7 +21,7 @@ public class kick implements cmd { @Override @CommandAnnotation(simple = true, priority = 2200) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -32,7 +32,7 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Player targetplayer = Bukkit.getPlayer(args[1]); if (targetplayer == null) { - Residence.msg(player, lm.General_NotOnline); + plugin.msg(player, lm.General_NotOnline); return true; } @@ -40,13 +40,13 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command PermissionGroup group = rPlayer.getGroup(); if (!group.hasKickAccess() && !resadmin) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return true; } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(targetplayer.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(targetplayer.getLocation()); if (res == null || !res.isOwner(player) && !resadmin) { - Residence.msg(player, lm.Residence_PlayerNotIn); + plugin.msg(player, lm.Residence_PlayerNotIn); return true; } @@ -54,12 +54,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return false; if (res.getPlayersInResidence().contains(targetplayer)) { - Location loc = Residence.getConfigManager().getKickLocation(); + Location loc = plugin.getConfigManager().getKickLocation(); if (loc != null) targetplayer.teleport(loc); else targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation(), player)); - Residence.msg(targetplayer, lm.Residence_Kicked); + plugin.msg(targetplayer, lm.Residence_Kicked); } return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index ebd04eb5d..eb2dcd06e 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -1,136 +1,136 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class lease implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 3900) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (args.length == 2 || args.length == 3) { - if (args[1].equals("expires")) { - ClaimedResidence res = null; - if (args.length == 2) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - Residence.msg(player, lm.Residence_NotIn); - return true; - } - } else { - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - } - - String until = Residence.getLeaseManager().getExpireTime(res.getName()); - if (until != null) - Residence.msg(player, lm.Economy_LeaseRenew, until); - return true; - } - if (args[1].equals("renew")) { - if (args.length == 3) { - Residence.getLeaseManager().renewArea(args[2], player); - } else { - Residence.getLeaseManager().renewArea(Residence.getResidenceManager().getNameByLoc(player.getLocation()), player); - } - return true; - } else if (args[1].equals("cost")) { - if (args.length == 3) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[2]); - if (res == null || Residence.getLeaseManager().leaseExpires(args[2])) { - int cost = Residence.getLeaseManager().getRenewCost(res); - Residence.msg(player, lm.Economy_LeaseRenewalCost, args[2], cost); - } else { - Residence.msg(player, lm.Economy_LeaseNotExpire); - } - return true; - } - String area = Residence.getResidenceManager().getNameByLoc(player.getLocation()); - ClaimedResidence res = Residence.getResidenceManager().getByName(area); - if (area == null || res == null) { - Residence.msg(player, lm.Invalid_Area); - return true; - } - if (Residence.getLeaseManager().leaseExpires(area)) { - int cost = Residence.getLeaseManager().getRenewCost(res); - Residence.msg(player, lm.Economy_LeaseRenewalCost, area, cost); - } else { - Residence.msg(player, lm.Economy_LeaseNotExpire); - } - return true; - - } - } else if (args.length == 4) { - if (args[1].equals("set")) { - if (!resadmin) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - if (args[3].equals("infinite")) { - if (Residence.getLeaseManager().leaseExpires(args[2])) { - Residence.getLeaseManager().removeExpireTime(args[2]); - Residence.msg(player, lm.Economy_LeaseInfinite); - } else { - Residence.msg(player, lm.Economy_LeaseNotExpire); - } - return true; - } - int days; - try { - days = Integer.parseInt(args[3]); - } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Days); - return true; - } - Residence.getLeaseManager().setExpireTime(player, args[2], days); - return true; - } - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manage residence leases"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", - "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("renew%%cost", "[residence]")); - - // Sub commands - path += "SubCommands."; - c.get(path + "set.Description", "Set the lease time"); - c.get(path + "set.Info", Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", - "Sets the lease time to a specified number of days, or infinite.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]")); - - c.get(path + "renew.Description", "Renew the lease time"); - c.get(path + "renew.Info", Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "renew"), Arrays.asList("[residence]")); - - c.get(path + "expires.Description", "Lease end date"); - c.get(path + "expires.Info", Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "expires"), Arrays.asList("[residence]")); - - c.get(path + "cost.Description", "Shows renew cost"); - c.get(path + "cost.Info", Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "cost"), Arrays.asList("[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class lease implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3900) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length == 2 || args.length == 3) { + if (args[1].equals("expires")) { + ClaimedResidence res = null; + if (args.length == 2) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + plugin.msg(player, lm.Residence_NotIn); + return true; + } + } else { + res = plugin.getResidenceManager().getByName(args[2]); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + } + + String until = plugin.getLeaseManager().getExpireTime(res.getName()); + if (until != null) + plugin.msg(player, lm.Economy_LeaseRenew, until); + return true; + } + if (args[1].equals("renew")) { + if (args.length == 3) { + plugin.getLeaseManager().renewArea(args[2], player); + } else { + plugin.getLeaseManager().renewArea(plugin.getResidenceManager().getNameByLoc(player.getLocation()), player); + } + return true; + } else if (args[1].equals("cost")) { + if (args.length == 3) { + ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); + if (res == null || plugin.getLeaseManager().leaseExpires(args[2])) { + int cost = plugin.getLeaseManager().getRenewCost(res); + plugin.msg(player, lm.Economy_LeaseRenewalCost, args[2], cost); + } else { + plugin.msg(player, lm.Economy_LeaseNotExpire); + } + return true; + } + String area = plugin.getResidenceManager().getNameByLoc(player.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByName(area); + if (area == null || res == null) { + plugin.msg(player, lm.Invalid_Area); + return true; + } + if (plugin.getLeaseManager().leaseExpires(area)) { + int cost = plugin.getLeaseManager().getRenewCost(res); + plugin.msg(player, lm.Economy_LeaseRenewalCost, area, cost); + } else { + plugin.msg(player, lm.Economy_LeaseNotExpire); + } + return true; + + } + } else if (args.length == 4) { + if (args[1].equals("set")) { + if (!resadmin) { + plugin.msg(player, lm.General_NoPermission); + return true; + } + if (args[3].equals("infinite")) { + if (plugin.getLeaseManager().leaseExpires(args[2])) { + plugin.getLeaseManager().removeExpireTime(args[2]); + plugin.msg(player, lm.Economy_LeaseInfinite); + } else { + plugin.msg(player, lm.Economy_LeaseNotExpire); + } + return true; + } + int days; + try { + days = Integer.parseInt(args[3]); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Days); + return true; + } + plugin.getLeaseManager().setExpireTime(player, args[2], days); + return true; + } + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manage residence leases"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", + "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("renew%%cost", "[residence]")); + + // Sub commands + path += "SubCommands."; + c.get(path + "set.Description", "Set the lease time"); + c.get(path + "set.Info", Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", + "Sets the lease time to a specified number of days, or infinite.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]")); + + c.get(path + "renew.Description", "Renew the lease time"); + c.get(path + "renew.Info", Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "renew"), Arrays.asList("[residence]")); + + c.get(path + "expires.Description", "Lease end date"); + c.get(path + "expires.Info", Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "expires"), Arrays.asList("[residence]")); + + c.get(path + "cost.Description", "Shows renew cost"); + c.get(path + "cost.Info", Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "cost"), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 1694724e1..30a144cfb 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -1,51 +1,51 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.cmd; - -public class limits implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 900) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player) && args.length < 2) - return false; - - if (args.length != 1 && args.length != 2) - return false; - final String[] tempArgs = args; - OfflinePlayer target; - boolean rsadm = false; - if (tempArgs.length == 1) { - target = (Player) sender; - rsadm = true; - } else - target = Residence.getOfflinePlayer(tempArgs[1]); - if (target == null) - return false; - Residence.getPermissionManager().updateGroupNameForPlayer(target.getName(), target.isOnline() ? target.getPlayer().getLocation().getWorld().getName() : Residence - .getConfigManager().getDefaultWorld(), true); - - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(target.getName()); - rPlayer.getGroup().printLimits(sender, target, rsadm); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - // Main command - c.get(path + "Description", "Show your limits."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res limits (playerName)", "Shows the limitations you have on creating and managing residences.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; + +public class limits implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 900) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player) && args.length < 2) + return false; + + if (args.length != 1 && args.length != 2) + return false; + final String[] tempArgs = args; + OfflinePlayer target; + boolean rsadm = false; + if (tempArgs.length == 1) { + target = (Player) sender; + rsadm = true; + } else + target = plugin.getOfflinePlayer(tempArgs[1]); + if (target == null) + return false; + plugin.getPermissionManager().updateGroupNameForPlayer(target.getName(), target.isOnline() ? target.getPlayer().getLocation().getWorld().getName() : plugin + .getConfigManager().getDefaultWorld(), true); + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(target.getName()); + rPlayer.getGroup().printLimits(sender, target, rsadm); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Show your limits."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res limits (playerName)", "Shows the limitations you have on creating and managing residences.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 698c477a6..7e9169ce2 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -1,61 +1,58 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class list implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 300) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - int page = 1; - World world = null; - String target = null; - - c: for (int i = 1; i < args.length; i++) { - try { - page = Integer.parseInt(args[i]); - if (page < 1) - page = 1; - continue; - } catch (Exception ex) { - } - - for (World w : Bukkit.getWorlds()) { - if (w.getName().equalsIgnoreCase(args[i])) { - world = w; - continue c; - } - } - target = args[i]; - } - - if (target != null && !sender.getName().equalsIgnoreCase(target) && !sender.hasPermission("residence.command.list.others")){ - Residence.msg(sender, lm.General_NoPermission); - return true; - } - - Residence.getResidenceManager().listResidences(sender, target, page, false, false, resadmin, world); - - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "List Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res list ", - "Lists all the residences a player owns (except hidden ones).", - "If listing your own residences, shows hidden ones as well.", - "To list everyones residences, use /res listall.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]", "[worldname]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; + +public class list implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 300) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + int page = 1; + World world = null; + String target = null; + + c: for (int i = 1; i < args.length; i++) { + try { + page = Integer.parseInt(args[i]); + if (page < 1) + page = 1; + continue; + } catch (Exception ex) { + } + + for (World w : Bukkit.getWorlds()) { + if (w.getName().equalsIgnoreCase(args[i])) { + world = w; + continue c; + } + } + target = args[i]; + } + + if (target != null && !sender.getName().equalsIgnoreCase(target) && !plugin.hasPermission(sender, "residence.command.list.others")) + return true; + + plugin.getResidenceManager().listResidences(sender, target, page, false, false, resadmin, world); + + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "List Residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res list ", + "Lists all the residences a player owns (except hidden ones).", + "If listing your own residences, shows hidden ones as well.", + "To list everyones residences, use /res listall.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]", "[worldname]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index 4ea7343c1..7d58d7987 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -1,57 +1,57 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; - -public class listall implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 4200) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - - int page = 1; - World world = null; - - c : for (int i = 1; i < args.length; i++) { - try { - page = Integer.parseInt(args[i]); - if (page < 1) - page = 1; - continue; - } catch (Exception ex) { - } - - if (args[i].equalsIgnoreCase("-a") && !(sender instanceof Player)) { - page = -1; - continue; - } - - for (World w : Bukkit.getWorlds()) { - if (w.getName().equalsIgnoreCase(args[i])) { - world = w; - continue c; - } - } - } - - Residence.getResidenceManager().listAllResidences(sender, page, resadmin, world); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "List All Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res listall <-a>", "Lists all residences")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; + +public class listall implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 4200) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + + int page = 1; + World world = null; + + c : for (int i = 1; i < args.length; i++) { + try { + page = Integer.parseInt(args[i]); + if (page < 1) + page = 1; + continue; + } catch (Exception ex) { + } + + if (args[i].equalsIgnoreCase("-a") && !(sender instanceof Player)) { + page = -1; + continue; + } + + for (World w : Bukkit.getWorlds()) { + if (w.getName().equalsIgnoreCase(args[i])) { + world = w; + continue c; + } + } + } + + plugin.getResidenceManager().listAllResidences(sender, page, resadmin, world); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "List All Residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res listall <-a>", "Lists all residences")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/listallhidden.java b/src/com/bekvon/bukkit/residence/commands/listallhidden.java index 83a259ce4..df9e13bd6 100644 --- a/src/com/bekvon/bukkit/residence/commands/listallhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listallhidden.java @@ -1,47 +1,47 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class listallhidden implements cmd { - - @Override - @CommandAnnotation(simple = false, priority = 4700) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - if (!resadmin) { - Residence.msg(sender, lm.General_NoPermission); - return true; - } - if (args.length == 1) { - Residence.getResidenceManager().listAllResidences(sender, 1, true, true); - } else if (args.length == 2) { - try { - Residence.getResidenceManager().listAllResidences(sender, page, true, true); - } catch (Exception ex) { - } - } else { - return false; - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "List All Hidden Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res listhidden ", "Lists all hidden residences on the server.")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class listallhidden implements cmd { + + @Override + @CommandAnnotation(simple = false, priority = 4700) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + if (!resadmin) { + plugin.msg(sender, lm.General_NoPermission); + return true; + } + if (args.length == 1) { + plugin.getResidenceManager().listAllResidences(sender, 1, true, true); + } else if (args.length == 2) { + try { + plugin.getResidenceManager().listAllResidences(sender, page, true, true); + } catch (Exception ex) { + } + } else { + return false; + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "List All Hidden Residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res listhidden ", "Lists all hidden residences on the server.")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/listhidden.java b/src/com/bekvon/bukkit/residence/commands/listhidden.java index 651779e38..9ff6ca070 100644 --- a/src/com/bekvon/bukkit/residence/commands/listhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listhidden.java @@ -1,53 +1,53 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class listhidden implements cmd { - - @Override - @CommandAnnotation(simple = false, priority = 4800) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - if (!resadmin) { - Residence.msg(sender, lm.General_NoPermission); - return true; - } - if (args.length == 1) { - Residence.getResidenceManager().listResidences(sender, 1, true, true); - return true; - } else if (args.length == 2) { - try { - Integer.parseInt(args[1]); - Residence.getResidenceManager().listResidences(sender, page, true, true); - } catch (Exception ex) { - Residence.getResidenceManager().listResidences(sender, args[1], 1, true, true, resadmin); - } - return true; - } else if (args.length == 3) { - Residence.getResidenceManager().listResidences(sender, args[1], page, true, true, resadmin); - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "List Hidden Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res listhidden ", "Lists hidden residences for a player.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class listhidden implements cmd { + + @Override + @CommandAnnotation(simple = false, priority = 4800) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + if (!resadmin) { + plugin.msg(sender, lm.General_NoPermission); + return true; + } + if (args.length == 1) { + plugin.getResidenceManager().listResidences(sender, 1, true, true); + return true; + } else if (args.length == 2) { + try { + Integer.parseInt(args[1]); + plugin.getResidenceManager().listResidences(sender, page, true, true); + } catch (Exception ex) { + plugin.getResidenceManager().listResidences(sender, args[1], 1, true, true, resadmin); + } + return true; + } else if (args.length == 3) { + plugin.getResidenceManager().listResidences(sender, args[1], page, true, true, resadmin); + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "List Hidden Residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res listhidden ", "Lists hidden residences for a player.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/lists.java b/src/com/bekvon/bukkit/residence/commands/lists.java index da041519c..94cc0b192 100644 --- a/src/com/bekvon/bukkit/residence/commands/lists.java +++ b/src/com/bekvon/bukkit/residence/commands/lists.java @@ -1,96 +1,96 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.FlagPermissions; - -public class lists implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 4900) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (args.length == 2) { - if (args[1].equals("list")) { - Residence.getPermissionListManager().printLists(player); - return true; - } - } else if (args.length == 3) { - if (args[1].equals("view")) { - Residence.getPermissionListManager().printList(player, args[2]); - return true; - } else if (args[1].equals("remove")) { - Residence.getPermissionListManager().removeList(player, args[2]); - return true; - } else if (args[1].equals("add")) { - Residence.getPermissionListManager().makeList(player, args[2]); - return true; - } - } else if (args.length == 4) { - if (args[1].equals("apply")) { - Residence.getPermissionListManager().applyListToResidence(player, args[2], args[3], resadmin); - return true; - } - } else if (args.length == 5) { - if (args[1].equals("set")) { - Residence.getPermissionListManager().getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); - Residence.msg(player, lm.Flag_Set); - return true; - } - } else if (args.length == 6) { - if (args[1].equals("gset")) { - Residence.getPermissionListManager().getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - Residence.msg(player, lm.Flag_Set); - return true; - } else if (args[1].equals("pset")) { - Residence.getPermissionListManager().getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - Residence.msg(player, lm.Flag_Set); - return true; - } - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - - c.get(path + "Description", "Predefined permission lists"); - c.get(path + "Info", Arrays.asList("Predefined permissions that can be applied to a residence.")); - - path += "SubCommands."; - c.get(path + "add.Description", "Add a list"); - c.get(path + "add.Info", Arrays.asList("&eUsage: &6/res lists add ")); - - c.get(path + "remove.Description", "Remove a list"); - c.get(path + "remove.Info", Arrays.asList("&eUsage: &6/res lists remove ")); - - c.get(path + "apply.Description", "Apply a list to a residence"); - c.get(path + "apply.Info", Arrays.asList("&eUsage: &6/res lists apply ")); - - c.get(path + "set.Description", "Set a flag"); - c.get(path + "set.Info", Arrays.asList("&eUsage: &6/res lists set ")); - - c.get(path + "pset.Description", "Set a player flag"); - c.get(path + "pset.Info", Arrays.asList("&eUsage: &6/res lists pset ")); - - c.get(path + "gset.Description", "Set a group flag"); - c.get(path + "gset.Info", Arrays.asList("&eUsage: &6/res lists gset ")); - - c.get(path + "view.Description", "View a list."); - c.get(path + "view.Info", Arrays.asList("&eUsage: &6/res lists view ")); - } - -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.FlagPermissions; + +public class lists implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 4900) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length == 2) { + if (args[1].equals("list")) { + plugin.getPermissionListManager().printLists(player); + return true; + } + } else if (args.length == 3) { + if (args[1].equals("view")) { + plugin.getPermissionListManager().printList(player, args[2]); + return true; + } else if (args[1].equals("remove")) { + plugin.getPermissionListManager().removeList(player, args[2]); + return true; + } else if (args[1].equals("add")) { + plugin.getPermissionListManager().makeList(player, args[2]); + return true; + } + } else if (args.length == 4) { + if (args[1].equals("apply")) { + plugin.getPermissionListManager().applyListToResidence(player, args[2], args[3], resadmin); + return true; + } + } else if (args.length == 5) { + if (args[1].equals("set")) { + plugin.getPermissionListManager().getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); + plugin.msg(player, lm.Flag_Set); + return true; + } + } else if (args.length == 6) { + if (args[1].equals("gset")) { + plugin.getPermissionListManager().getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); + plugin.msg(player, lm.Flag_Set); + return true; + } else if (args[1].equals("pset")) { + plugin.getPermissionListManager().getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); + plugin.msg(player, lm.Flag_Set); + return true; + } + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + + c.get(path + "Description", "Predefined permission lists"); + c.get(path + "Info", Arrays.asList("Predefined permissions that can be applied to a residence.")); + + path += "SubCommands."; + c.get(path + "add.Description", "Add a list"); + c.get(path + "add.Info", Arrays.asList("&eUsage: &6/res lists add ")); + + c.get(path + "remove.Description", "Remove a list"); + c.get(path + "remove.Info", Arrays.asList("&eUsage: &6/res lists remove ")); + + c.get(path + "apply.Description", "Apply a list to a residence"); + c.get(path + "apply.Info", Arrays.asList("&eUsage: &6/res lists apply ")); + + c.get(path + "set.Description", "Set a flag"); + c.get(path + "set.Info", Arrays.asList("&eUsage: &6/res lists set ")); + + c.get(path + "pset.Description", "Set a player flag"); + c.get(path + "pset.Info", Arrays.asList("&eUsage: &6/res lists pset ")); + + c.get(path + "gset.Description", "Set a group flag"); + c.get(path + "gset.Info", Arrays.asList("&eUsage: &6/res lists gset ")); + + c.get(path + "view.Description", "View a list."); + c.get(path + "view.Info", Arrays.asList("&eUsage: &6/res lists view ")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java index fb1bade41..e203be290 100644 --- a/src/com/bekvon/bukkit/residence/commands/lset.java +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -1,91 +1,91 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Material; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class lset implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 5000) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - ClaimedResidence res = null; - Material mat = null; - String listtype = null; - boolean showinfo = false; - if (args.length == 2 && args[1].equals("info")) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - showinfo = true; - } else if (args.length == 3 && args[2].equals("info")) { - res = Residence.getResidenceManager().getByName(args[1]); - showinfo = true; - } - if (showinfo) { - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - Residence.msg(player, lm.General_Blacklist); - res.getItemBlacklist().printList(player); - Residence.msg(player, lm.General_Ignorelist); - res.getItemIgnoreList().printList(player); - return true; - } else if (args.length == 4) { - res = Residence.getResidenceManager().getByName(args[1]); - listtype = args[2]; - try { - mat = Material.valueOf(args[3].toUpperCase()); - } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Material); - return true; - } - } else if (args.length == 3) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - listtype = args[1]; - try { - mat = Material.valueOf(args[2].toUpperCase()); - } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Material); - return true; - } - } - if (res != null) { - if (listtype != null && listtype.equalsIgnoreCase("blacklist")) { - res.getItemBlacklist().playerListChange(player, mat, resadmin); - } else if (listtype != null && listtype.equalsIgnoreCase("ignorelist")) { - res.getItemIgnoreList().playerListChange(player, mat, resadmin); - } else { - Residence.msg(player, lm.Invalid_List); - } - return true; - } - Residence.msg(player, lm.Invalid_Residence); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Change blacklist and ignorelist options"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res lset [blacklist/ignorelist] [material]", - "&eUsage: &6/res lset Info", - "Blacklisting a material prevents it from being placed in the residence.", - "Ignorelist causes a specific material to not be protected by Residence.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), - Arrays.asList("[residence]%%blacklist%%ignorelist", "blacklist%%ignorelist%%[material]", "[material]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class lset implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 5000) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + ClaimedResidence res = null; + Material mat = null; + String listtype = null; + boolean showinfo = false; + if (args.length == 2 && args[1].equals("info")) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + showinfo = true; + } else if (args.length == 3 && args[2].equals("info")) { + res = plugin.getResidenceManager().getByName(args[1]); + showinfo = true; + } + if (showinfo) { + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + plugin.msg(player, lm.General_Blacklist); + res.getItemBlacklist().printList(player); + plugin.msg(player, lm.General_Ignorelist); + res.getItemIgnoreList().printList(player); + return true; + } else if (args.length == 4) { + res = plugin.getResidenceManager().getByName(args[1]); + listtype = args[2]; + try { + mat = Material.valueOf(args[3].toUpperCase()); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Material); + return true; + } + } else if (args.length == 3) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + listtype = args[1]; + try { + mat = Material.valueOf(args[2].toUpperCase()); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Material); + return true; + } + } + if (res != null) { + if (listtype != null && listtype.equalsIgnoreCase("blacklist")) { + res.getItemBlacklist().playerListChange(player, mat, resadmin); + } else if (listtype != null && listtype.equalsIgnoreCase("ignorelist")) { + res.getItemIgnoreList().playerListChange(player, mat, resadmin); + } else { + plugin.msg(player, lm.Invalid_List); + } + return true; + } + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Change blacklist and ignorelist options"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res lset [blacklist/ignorelist] [material]", + "&eUsage: &6/res lset Info", + "Blacklisting a material prevents it from being placed in the residence.", + "Ignorelist causes a specific material to not be protected by Residence.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), + Arrays.asList("[residence]%%blacklist%%ignorelist", "blacklist%%ignorelist%%[material]", "[material]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 36dc9b5d5..76baa41c3 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -20,10 +20,12 @@ import com.bekvon.bukkit.residence.signsStuff.Signs; public class market implements cmd { + Residence plugin; @Override @CommandAnnotation(simple = true, priority = 2600) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + this.plugin = plugin; if (!(sender instanceof Player)) return false; @@ -61,60 +63,60 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ClaimedResidence res = null; if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); else - res = Residence.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[2]); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } if (res.isRented()) { - if (resadmin || Residence.isResAdminOn(player) || player.hasPermission("residence.market.evict")) { - Residence.UnrentConfirm.put(player.getName(), res.getName()); - Residence.msg(sender, lm.Rent_EvictConfirm, res.getName()); - } else if (Residence.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sender.getName())) { - Residence.UnrentConfirm.put(player.getName(), res.getName()); - Residence.msg(sender, lm.Rent_UnrentConfirm, res.getName()); + if (resadmin || plugin.isResAdminOn(player) || player.hasPermission("residence.market.evict")) { + plugin.UnrentConfirm.put(player.getName(), res.getName()); + plugin.msg(sender, lm.Rent_EvictConfirm, res.getName()); + } else if (plugin.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sender.getName())) { + plugin.UnrentConfirm.put(player.getName(), res.getName()); + plugin.msg(sender, lm.Rent_UnrentConfirm, res.getName()); } else - Residence.getRentManager().printRentInfo(player, res); + plugin.getRentManager().printRentInfo(player, res); } else { - Residence.UnrentConfirm.put(player.getName(), res.getName()); - Residence.msg(sender, lm.Rent_ReleaseConfirm, res.getName()); + plugin.UnrentConfirm.put(player.getName(), res.getName()); + plugin.msg(sender, lm.Rent_ReleaseConfirm, res.getName()); } return true; case "confirm": - if (!Residence.UnrentConfirm.containsKey(player.getName())) { - Residence.msg(player, lm.Invalid_Residence); + if (!plugin.UnrentConfirm.containsKey(player.getName())) { + plugin.msg(player, lm.Invalid_Residence); return false; } - String area = Residence.UnrentConfirm.remove(player.getName()); - res = Residence.getResidenceManager().getByName(area); + String area = plugin.UnrentConfirm.remove(player.getName()); + res = plugin.getResidenceManager().getByName(area); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } if (!res.isRented()) { - Residence.getRentManager().removeFromForRent(player, res, resadmin); - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + plugin.getRentManager().removeFromForRent(player, res, resadmin); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); if (rPlayer != null && rPlayer.getMainResidence() == res) { rPlayer.setMainResidence(null); } } else - Residence.getRentManager().unrent(player, area, resadmin); + plugin.getRentManager().unrent(player, area, resadmin); return true; case "sign": if (args.length != 3) { return false; } - Block block = Residence.getNms().getTargetBlock(player, 10); + Block block = plugin.getNms().getTargetBlock(player, 10); if (!(block.getState() instanceof Sign)) { - Residence.msg(player, lm.Sign_LookAt); + plugin.msg(player, lm.Sign_LookAt); return true; } @@ -122,24 +124,24 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Signs signInfo = new Signs(); - Signs oldSign = Residence.getSignUtil().getSignFromLoc(sign.getLocation()); + Signs oldSign = plugin.getSignUtil().getSignFromLoc(sign.getLocation()); if (oldSign != null) signInfo = oldSign; Location loc = sign.getLocation(); - ClaimedResidence CurrentRes = Residence.getResidenceManager().getByLoc(sign.getLocation()); + ClaimedResidence CurrentRes = plugin.getResidenceManager().getByLoc(sign.getLocation()); if (CurrentRes != null && !CurrentRes.isOwner(player) && !resadmin) { - Residence.msg(player, lm.Residence_NotOwner); + plugin.msg(player, lm.Residence_NotOwner); return true; } - res = Residence.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[2]); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } @@ -147,65 +149,65 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command boolean ForRent = res.isForRent(); int category = 1; - if (Residence.getSignUtil().getSigns().GetAllSigns().size() > 0) - category = Residence.getSignUtil().getSigns().GetAllSigns().get(Residence.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; + if (plugin.getSignUtil().getSigns().GetAllSigns().size() > 0) + category = plugin.getSignUtil().getSigns().GetAllSigns().get(plugin.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; if (ForSale || ForRent) { signInfo.setCategory(category); signInfo.setResidence(res); signInfo.setLocation(loc); - Residence.getSignUtil().getSigns().addSign(signInfo); - Residence.getSignUtil().saveSigns(); + plugin.getSignUtil().getSigns().addSign(signInfo); + plugin.getSignUtil().saveSigns(); } else { - Residence.msg(player, lm.Residence_NotForRentOrSell); + plugin.msg(player, lm.Residence_NotForRentOrSell); return true; } - Residence.getSignUtil().CheckSign(res, 5); + plugin.getSignUtil().CheckSign(res, 5); return true; case "info": res = null; if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); else if (args.length == 3) - res = Residence.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[2]); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } - boolean sell = Residence.getTransactionManager().viewSaleInfo(res, player); - if (Residence.getConfigManager().enabledRentSystem() && res.isForRent()) { - Residence.getRentManager().printRentInfo(player, res); + boolean sell = plugin.getTransactionManager().viewSaleInfo(res, player); + if (plugin.getConfigManager().enabledRentSystem() && res.isForRent()) { + plugin.getRentManager().printRentInfo(player, res); } else if (!sell) { - Residence.msg(sender, lm.Residence_NotForRentOrSell); + plugin.msg(sender, lm.Residence_NotForRentOrSell); } return true; case "buy": res = null; if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); else if (args.length == 3) - res = Residence.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[2]); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } - sell = Residence.getTransactionManager().viewSaleInfo(res, player); + sell = plugin.getTransactionManager().viewSaleInfo(res, player); if (sell) { - Residence.getTransactionManager().buyPlot(res, player, resadmin); + plugin.getTransactionManager().buyPlot(res, player, resadmin); } else { - Residence.msg(sender, lm.Residence_NotForRentOrSell); + plugin.msg(sender, lm.Residence_NotForRentOrSell); } return true; case "unsell": if (args.length != 3) return false; - Residence.getTransactionManager().removeFromSale(player, args[2], resadmin); + plugin.getTransactionManager().removeFromSale(player, args[2], resadmin); return true; case "sell": @@ -216,21 +218,21 @@ else if (args.length == 3) try { amount = Integer.parseInt(args[3]); } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Amount); + plugin.msg(player, lm.Invalid_Amount); return true; } - Residence.getTransactionManager().putForSale(args[2], player, amount, resadmin); + plugin.getTransactionManager().putForSale(args[2], player, amount, resadmin); return true; default: return false; } } - private static boolean commandResMarketRent(String[] args, boolean resadmin, Player player) { + private boolean commandResMarketRent(String[] args, boolean resadmin, Player player) { if (args.length < 2 || args.length > 4) { return false; } - boolean repeat = Residence.getConfigManager().isRentPlayerAutoPay(); + boolean repeat = plugin.getConfigManager().isRentPlayerAutoPay(); ClaimedResidence res = null; @@ -240,25 +242,25 @@ private static boolean commandResMarketRent(String[] args, boolean resadmin, Pla } else if (args[3].equalsIgnoreCase("f") || args[3].equalsIgnoreCase("false")) { repeat = false; } else { - Residence.msg(player, lm.Invalid_Boolean); + plugin.msg(player, lm.Invalid_Boolean); return true; } } if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); else if (args.length > 2) - res = Residence.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[2]); if (res != null) - Residence.getRentManager().rent(player, res, repeat, resadmin); + plugin.getRentManager().rent(player, res, repeat, resadmin); else - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } - private static boolean commandResMarketPayRent(String[] args, boolean resadmin, Player player) { + private boolean commandResMarketPayRent(String[] args, boolean resadmin, Player player) { if (args.length != 2 && args.length != 3) { return false; } @@ -266,23 +268,23 @@ private static boolean commandResMarketPayRent(String[] args, boolean resadmin, ClaimedResidence res = null; if (args.length == 2) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); else - res = Residence.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[2]); if (res != null) - Residence.getRentManager().payRent(player, res, resadmin); + plugin.getRentManager().payRent(player, res, resadmin); else - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } - private static boolean commandResMarketRentable(String[] args, boolean resadmin, Player player) { + private boolean commandResMarketRentable(String[] args, boolean resadmin, Player player) { if (args.length < 5 || args.length > 8) { return false; } - if (!Residence.getConfigManager().enabledRentSystem()) { - Residence.msg(player, lm.Rent_Disabled); + if (!plugin.getConfigManager().enabledRentSystem()) { + plugin.msg(player, lm.Rent_Disabled); return true; } int days; @@ -290,16 +292,16 @@ private static boolean commandResMarketRentable(String[] args, boolean resadmin, try { cost = Integer.parseInt(args[3]); } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Cost); + plugin.msg(player, lm.Invalid_Cost); return true; } try { days = Integer.parseInt(args[4]); } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Days); + plugin.msg(player, lm.Invalid_Days); return true; } - boolean AllowRenewing = Residence.getConfigManager().isRentAllowRenewing(); + boolean AllowRenewing = plugin.getConfigManager().isRentAllowRenewing(); if (args.length >= 6) { String ag = args[5]; if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { @@ -307,12 +309,12 @@ private static boolean commandResMarketRentable(String[] args, boolean resadmin, } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { AllowRenewing = false; } else { - Residence.msg(player, lm.Invalid_Boolean); + plugin.msg(player, lm.Invalid_Boolean); return true; } } - boolean StayInMarket = Residence.getConfigManager().isRentStayInMarket(); + boolean StayInMarket = plugin.getConfigManager().isRentStayInMarket(); if (args.length >= 7) { String ag = args[6]; if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { @@ -320,12 +322,12 @@ private static boolean commandResMarketRentable(String[] args, boolean resadmin, } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { StayInMarket = false; } else { - Residence.msg(player, lm.Invalid_Boolean); + plugin.msg(player, lm.Invalid_Boolean); return true; } } - boolean AllowAutoPay = Residence.getConfigManager().isRentAllowAutoPay(); + boolean AllowAutoPay = plugin.getConfigManager().isRentAllowAutoPay(); if (args.length >= 8) { String ag = args[7]; if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { @@ -333,18 +335,18 @@ private static boolean commandResMarketRentable(String[] args, boolean resadmin, } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { AllowAutoPay = false; } else { - Residence.msg(player, lm.Invalid_Boolean); + plugin.msg(player, lm.Invalid_Boolean); return true; } } - Residence.getRentManager().setForRent(player, args[2], cost, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); + plugin.getRentManager().setForRent(player, args[2], cost, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); return true; } - private static boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player player) { - if (!Residence.getConfigManager().enableEconomy()) { - Residence.msg(player, lm.Economy_MarketDisabled); + private boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player player) { + if (!plugin.getConfigManager().enableEconomy()) { + plugin.msg(player, lm.Economy_MarketDisabled); return true; } if (args.length != 3 && args.length != 4) { @@ -357,10 +359,10 @@ private static boolean commandResMarketAutoPay(String[] args, boolean resadmin, ClaimedResidence res = null; if (args.length == 3) { barg = args[2]; - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); } else { barg = args[3]; - res = Residence.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[2]); } if (barg.equalsIgnoreCase("true") || barg.equalsIgnoreCase("t")) { @@ -368,41 +370,41 @@ private static boolean commandResMarketAutoPay(String[] args, boolean resadmin, } else if (barg.equalsIgnoreCase("false") || barg.equalsIgnoreCase("f")) { value = false; } else { - Residence.msg(player, lm.Invalid_Boolean); + plugin.msg(player, lm.Invalid_Boolean); return true; } if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } if (res.isRented() && res.getRentedLand().player.equalsIgnoreCase(player.getName())) { - Residence.getRentManager().setRentedRepeatable(player, res.getName(), value, resadmin); + plugin.getRentManager().setRentedRepeatable(player, res.getName(), value, resadmin); } else if (res.isForRent()) { - Residence.getRentManager().setRentRepeatable(player, res.getName(), value, resadmin); + plugin.getRentManager().setRentRepeatable(player, res.getName(), value, resadmin); } else { - Residence.msg(player, lm.Economy_RentReleaseInvalid, ChatColor.YELLOW + res.getName() + ChatColor.RED); + plugin.msg(player, lm.Economy_RentReleaseInvalid, ChatColor.YELLOW + res.getName() + ChatColor.RED); } return true; } - private static boolean commandResMarketList(String[] args, Player player, int page) { - if (!Residence.getConfigManager().enableEconomy()) { - Residence.msg(player, lm.Economy_MarketDisabled); + private boolean commandResMarketList(String[] args, Player player, int page) { + if (!plugin.getConfigManager().enableEconomy()) { + plugin.msg(player, lm.Economy_MarketDisabled); return true; } - Residence.msg(player, lm.General_MarketList); + plugin.msg(player, lm.General_MarketList); if (args.length < 3) return false; if (args[2].equalsIgnoreCase("sell")) { - Residence.getTransactionManager().printForSaleResidences(player, page); + plugin.getTransactionManager().printForSaleResidences(player, page); return true; } if (args[2].equalsIgnoreCase("rent")) { - if (Residence.getConfigManager().enabledRentSystem()) { - Residence.getRentManager().printRentableResidences(player, page); + if (plugin.getConfigManager().enabledRentSystem()) { + plugin.getRentManager().printRentableResidences(player, page); } return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index c7b46f2e8..a861f5649 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -1,43 +1,43 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Material; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class material implements cmd { - - @SuppressWarnings("deprecation") - @Override - @CommandAnnotation(simple = true, priority = 4300) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (args.length != 2) { - return false; - } - try { - Residence.msg(player, lm.General_MaterialGet, args[1], Material.getMaterial(Integer.parseInt(args[1])).name()); - } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Material); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Check if material exists by its id"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res material [material]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[materialId]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class material implements cmd { + + @SuppressWarnings("deprecation") + @Override + @CommandAnnotation(simple = true, priority = 4300) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 2) { + return false; + } + try { + plugin.msg(player, lm.General_MaterialGet, args[1], Material.getMaterial(Integer.parseInt(args[1])).name()); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Material); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Check if material exists by its id"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res material [material]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[materialId]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 8e2c3756c..220bbd915 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -1,110 +1,110 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class message implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 1000) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - ClaimedResidence res = null; - int start = 0; - boolean enter = false; - if (args.length < 2) { - return false; - } - if (args[1].equals("enter")) { - enter = true; - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - start = 2; - } else if (args[1].equals("leave")) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - start = 2; - } else if (args[1].equals("remove")) { - if (args.length > 2 && args[2].equals("enter")) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - res.setEnterLeaveMessage(player, null, true, resadmin); - } else { - Residence.msg(player, lm.Invalid_Residence); - } - return true; - } else if (args.length > 2 && args[2].equals("leave")) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - res.setEnterLeaveMessage(player, null, false, resadmin); - } else { - Residence.msg(player, lm.Invalid_Residence); - } - return true; - } - Residence.msg(player, lm.Invalid_MessageType); - return true; - } else if (args.length > 2 && args[2].equals("enter")) { - enter = true; - res = Residence.getResidenceManager().getByName(args[1]); - start = 3; - } else if (args.length > 2 && args[2].equals("leave")) { - res = Residence.getResidenceManager().getByName(args[1]); - start = 3; - } else if (args.length > 2 && args[2].equals("remove")) { - res = Residence.getResidenceManager().getByName(args[1]); - if (args.length != 4) { - return false; - } - if (args[3].equals("enter")) { - if (res != null) { - res.setEnterLeaveMessage(player, null, true, resadmin); - } - return true; - } else if (args[3].equals("leave")) { - if (res != null) { - res.setEnterLeaveMessage(player, null, false, resadmin); - } - return true; - } - Residence.msg(player, lm.Invalid_MessageType); - return true; - } else { - Residence.msg(player, lm.Invalid_MessageType); - return true; - } - if (start == 0) { - return false; - } - String message = ""; - for (int i = start; i < args.length; i++) { - message = message + args[i] + " "; - } - if (res != null) { - res.setEnterLeaveMessage(player, message, enter, resadmin); - } else { - Residence.msg(player, lm.Invalid_Residence); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manage residence enter / leave messages"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", - "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%enter%%leave", "enter%%leave")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class message implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 1000) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + ClaimedResidence res = null; + int start = 0; + boolean enter = false; + if (args.length < 2) { + return false; + } + if (args[1].equals("enter")) { + enter = true; + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + start = 2; + } else if (args[1].equals("leave")) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + start = 2; + } else if (args[1].equals("remove")) { + if (args.length > 2 && args[2].equals("enter")) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) { + res.setEnterLeaveMessage(player, null, true, resadmin); + } else { + plugin.msg(player, lm.Invalid_Residence); + } + return true; + } else if (args.length > 2 && args[2].equals("leave")) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) { + res.setEnterLeaveMessage(player, null, false, resadmin); + } else { + plugin.msg(player, lm.Invalid_Residence); + } + return true; + } + plugin.msg(player, lm.Invalid_MessageType); + return true; + } else if (args.length > 2 && args[2].equals("enter")) { + enter = true; + res = plugin.getResidenceManager().getByName(args[1]); + start = 3; + } else if (args.length > 2 && args[2].equals("leave")) { + res = plugin.getResidenceManager().getByName(args[1]); + start = 3; + } else if (args.length > 2 && args[2].equals("remove")) { + res = plugin.getResidenceManager().getByName(args[1]); + if (args.length != 4) { + return false; + } + if (args[3].equals("enter")) { + if (res != null) { + res.setEnterLeaveMessage(player, null, true, resadmin); + } + return true; + } else if (args[3].equals("leave")) { + if (res != null) { + res.setEnterLeaveMessage(player, null, false, resadmin); + } + return true; + } + plugin.msg(player, lm.Invalid_MessageType); + return true; + } else { + plugin.msg(player, lm.Invalid_MessageType); + return true; + } + if (start == 0) { + return false; + } + String message = ""; + for (int i = start; i < args.length; i++) { + message = message + args[i] + " "; + } + if (res != null) { + res.setEnterLeaveMessage(player, message, enter, resadmin); + } else { + plugin.msg(player, lm.Invalid_Residence); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manage residence enter / leave messages"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", + "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%enter%%leave", "enter%%leave")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/mirror.java b/src/com/bekvon/bukkit/residence/commands/mirror.java index b850ab78f..9b29d8eea 100644 --- a/src/com/bekvon/bukkit/residence/commands/mirror.java +++ b/src/com/bekvon/bukkit/residence/commands/mirror.java @@ -1,37 +1,37 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; - -public class mirror implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 3700) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (args.length != 3) - return false; - - Residence.getResidenceManager().mirrorPerms(player, args[2], args[1], resadmin); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Mirrors Flags"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res mirror [Source Residence] [Target Residence]", - "Mirrors flags from one residence to another. You must be owner of both or a admin to do this.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; + +public class mirror implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3700) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 3) + return false; + + plugin.getResidenceManager().mirrorPerms(player, args[2], args[1], resadmin); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Mirrors Flags"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res mirror [Source Residence] [Target Residence]", + "Mirrors flags from one residence to another. You must be owner of both or a admin to do this.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index 6c4025268..3f97243b1 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -1,49 +1,49 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; - -public class padd implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 400) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - String baseCmd = "res"; - if (resadmin) - baseCmd = "resadmin"; - if (args.length == 2) { - if (!Residence.isPlayerExist(player, args[1], true)) - return false; - player.performCommand(baseCmd + " pset " + args[1] + " trusted true"); - return true; - } - if (args.length == 3) { - if (!Residence.isPlayerExist(player, args[2], true)) - return false; - player.performCommand(baseCmd + " pset " + args[1] + " " + args[2] + " trusted true"); - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - // Main command - c.get(path + "Description", "Add player to residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res padd [player]", "Adds essential flags for player")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; + +public class padd implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 400) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + String baseCmd = "res"; + if (resadmin) + baseCmd = "resadmin"; + if (args.length == 2) { + if (!plugin.isPlayerExist(player, args[1], true)) + return false; + player.performCommand(baseCmd + " pset " + args[1] + " trusted true"); + return true; + } + if (args.length == 3) { + if (!plugin.isPlayerExist(player, args[2], true)) + return false; + player.performCommand(baseCmd + " pset " + args[1] + " " + args[2] + " trusted true"); + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Add player to residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res padd [player]", "Adds essential flags for player")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index 13d94327e..bc85c3925 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -1,47 +1,47 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; - -public class pdel implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 500) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - String baseCmd = "res"; - if (resadmin) - baseCmd = "resadmin"; - if (args.length == 2) { - Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " trusted remove"); - return true; - } - if (args.length == 3) { - Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " " + args[2] + " trusted remove"); - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - // Main command - c.get(path + "Description", "Remove player from residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res pdel [player]", "Removes essential flags from player")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); - } - -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; + +public class pdel implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 500) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + String baseCmd = "res"; + if (resadmin) + baseCmd = "resadmin"; + if (args.length == 2) { + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " trusted remove"); + return true; + } + if (args.length == 3) { + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " " + args[2] + " trusted remove"); + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Remove player from residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res pdel [player]", "Removes essential flags from player")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 8a41d7487..204b0e3ab 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -19,84 +19,84 @@ public class pset implements cmd { @Override @CommandAnnotation(simple = true, priority = 800) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player) && args.length != 5 && args.length == 4 && !args[3].equalsIgnoreCase("removeall")) return false; if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { Player player = (Player) sender; - ClaimedResidence area = Residence.getResidenceManager().getByLoc(player.getLocation()); + ClaimedResidence area = plugin.getResidenceManager().getByLoc(player.getLocation()); if (area != null) { area.getPermissions().removeAllPlayerFlags(sender, args[1], resadmin); } else { - Residence.msg(sender, lm.Invalid_Residence); + plugin.msg(sender, lm.Invalid_Residence); } return true; } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); + ClaimedResidence area = plugin.getResidenceManager().getByName(args[1]); if (area != null) { area.getPermissions().removeAllPlayerFlags(sender, args[2], resadmin); } else { - Residence.msg(sender, lm.Invalid_Residence); + plugin.msg(sender, lm.Invalid_Residence); } return true; } else if (args.length == 4) { Player player = (Player) sender; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (!Residence.isPlayerExist(sender, args[1], true)) + if (!plugin.isPlayerExist(sender, args[1], true)) return false; if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); + plugin.msg(sender, lm.Invalid_Residence); return true; } if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { - Residence.msg(sender, lm.General_NoPermission); + plugin.msg(sender, lm.General_NoPermission); return true; } res.getPermissions().setPlayerFlag(sender, args[1], args[2], args[3], resadmin, true); return true; } else if (args.length == 5) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (!Residence.isPlayerExist(sender, args[2], true)) + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + if (!plugin.isPlayerExist(sender, args[2], true)) return false; if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); + plugin.msg(sender, lm.Invalid_Residence); return true; } if (!res.isOwner(sender) && !resadmin && !res.getPermissions().playerHas(sender, Flags.admin, false)) { - Residence.msg(sender, lm.General_NoPermission); + plugin.msg(sender, lm.General_NoPermission); return true; } res.getPermissions().setPlayerFlag(sender, args[2], args[3], args[4], resadmin, true); return true; - } else if ((args.length == 2 || args.length == 3) && Residence.getConfigManager().useFlagGUI()) { + } else if ((args.length == 2 || args.length == 3) && plugin.getConfigManager().useFlagGUI()) { Player player = (Player) sender; ClaimedResidence res = null; String targetPlayer = null; if (args.length == 2) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); targetPlayer = args[1]; } else { - res = Residence.getResidenceManager().getByName(args[1]); + res = plugin.getResidenceManager().getByName(args[1]); targetPlayer = args[2]; } if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); + plugin.msg(sender, lm.Invalid_Residence); return true; } - if (!Residence.isPlayerExist(player, targetPlayer, true)) + if (!plugin.isPlayerExist(player, targetPlayer, true)) return false; if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { - Residence.msg(sender, lm.General_NoPermission); + plugin.msg(sender, lm.General_NoPermission); return true; } SetFlag flag = new SetFlag(res.getName(), player, resadmin); diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index 8ee29e992..be6da75e8 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -20,88 +20,86 @@ public class rc implements cmd { @Override @CommandAnnotation(simple = true, priority = 1100) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return true; Player player = (Player) sender; String pname = player.getName(); - if (!Residence.getConfigManager().chatEnabled()) { - Residence.msg(player, lm.Residence_ChatDisabled); + if (!plugin.getConfigManager().chatEnabled()) { + plugin.msg(player, lm.Residence_ChatDisabled); return false; } if (args.length > 0) args = Arrays.copyOfRange(args, 1, args.length); if (args.length == 0) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + ChatChannel chat = plugin.getChatManager().getPlayerChannel(pname); if (chat != null) { - Residence.getChatManager().removeFromChannel(pname); - Residence.getPlayerListener().removePlayerResidenceChat(player); + plugin.getChatManager().removeFromChannel(pname); + plugin.getPlayerListener().removePlayerResidenceChat(player); return true; } - Residence.msg(player, lm.Residence_NotIn); + plugin.msg(player, lm.Residence_NotIn); return true; } - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + ChatChannel chat = plugin.getChatManager().getPlayerChannel(pname); if (chat != null && chat.getChannelName().equals(res.getName())) { - Residence.getChatManager().removeFromChannel(pname); - Residence.getPlayerListener().removePlayerResidenceChat(player); + plugin.getChatManager().removeFromChannel(pname); + plugin.getPlayerListener().removePlayerResidenceChat(player); return true; } - if (!res.getPermissions().playerHas(player.getName(), Flags.chat, true) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.chat, res.getName()); + if (!res.getPermissions().playerHas(player.getName(), Flags.chat, true) && !plugin.getPermissionManager().isResidenceAdmin(player)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.chat, res.getName()); return false; } - Residence.getPlayerListener().tooglePlayerResidenceChat(player, res.getName()); - Residence.getChatManager().setChannel(pname, res); + plugin.getPlayerListener().tooglePlayerResidenceChat(player, res.getName()); + plugin.getChatManager().setChannel(pname, res); return true; } else if (args.length == 1) { if (args[0].equalsIgnoreCase("l") || args[0].equalsIgnoreCase("leave")) { - Residence.getChatManager().removeFromChannel(pname); - Residence.getPlayerListener().removePlayerResidenceChat(player); + plugin.getChatManager().removeFromChannel(pname); + plugin.getPlayerListener().removePlayerResidenceChat(player); return true; } - ClaimedResidence res = Residence.getResidenceManager().getByName(args[0]); + ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); if (res == null) { - Residence.msg(player, lm.Chat_InvalidChannel); + plugin.msg(player, lm.Chat_InvalidChannel); return true; } - if (!res.getPermissions().playerHas(player.getName(), Flags.chat, true) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.chat.getName(), res.getName()); + if (!res.getPermissions().playerHas(player.getName(), Flags.chat, true) && !plugin.getPermissionManager().isResidenceAdmin(player)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.chat.getName(), res.getName()); return false; } - Residence.getPlayerListener().tooglePlayerResidenceChat(player, res.getName()); - Residence.getChatManager().setChannel(pname, res); + plugin.getPlayerListener().tooglePlayerResidenceChat(player, res.getName()); + plugin.getChatManager().setChannel(pname, res); return true; } else if (args.length == 2) { if (args[0].equalsIgnoreCase("setcolor")) { - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + ChatChannel chat = plugin.getChatManager().getPlayerChannel(pname); if (chat == null) { - Residence.msg(player, lm.Chat_JoinFirst); + plugin.msg(player, lm.Chat_JoinFirst); return true; } - ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); + ClaimedResidence res = plugin.getResidenceManager().getByName(chat.getChannelName()); if (res == null) return false; - if (!res.isOwner(player) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.msg(player, lm.General_NoPermission); + if (!res.isOwner(player) && !plugin.getPermissionManager().isResidenceAdmin(player)) { + plugin.msg(player, lm.General_NoPermission); return true; } - if (!player.hasPermission("residence.chatcolor")) { - Residence.msg(player, lm.General_NoPermission); + if (!plugin.hasPermission(player, "residence.chatcolor")) return true; - } String posibleColor = args[1]; @@ -109,82 +107,78 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command posibleColor = "&" + posibleColor; if (posibleColor.length() != 2 || ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', posibleColor)).length() != 0) { - Residence.msg(player, lm.Chat_InvalidColor); + plugin.msg(player, lm.Chat_InvalidColor); return true; } ChatColor color = ChatColor.getByChar(posibleColor.replace("&", "")); res.setChannelColor(color); chat.setChannelColor(color); - Residence.msg(player, lm.Chat_ChangedColor, color.name()); + plugin.msg(player, lm.Chat_ChangedColor, color.name()); return true; } else if (args[0].equalsIgnoreCase("setprefix")) { - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + ChatChannel chat = plugin.getChatManager().getPlayerChannel(pname); if (chat == null) { - Residence.msg(player, lm.Chat_JoinFirst); + plugin.msg(player, lm.Chat_JoinFirst); return true; } - ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); + ClaimedResidence res = plugin.getResidenceManager().getByName(chat.getChannelName()); if (res == null) return false; - if (!res.isOwner(player) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.msg(player, lm.General_NoPermission); + if (!res.isOwner(player) && !plugin.getPermissionManager().isResidenceAdmin(player)) { + plugin.msg(player, lm.General_NoPermission); return true; } - if (!player.hasPermission("residence.chatprefix")) { - Residence.msg(player, lm.General_NoPermission); + if (!plugin.hasPermission(player, "residence.chatprefix")) return true; - } String prefix = args[1]; - if (prefix.length() > Residence.getConfigManager().getChatPrefixLength()) { - Residence.msg(player, lm.Chat_InvalidPrefixLength, Residence.getConfigManager() + if (prefix.length() > plugin.getConfigManager().getChatPrefixLength()) { + plugin.msg(player, lm.Chat_InvalidPrefixLength, plugin.getConfigManager() .getChatPrefixLength()); return true; } res.setChatPrefix(prefix); chat.setChatPrefix(prefix); - Residence.msg(player, lm.Chat_ChangedPrefix, ChatColor.translateAlternateColorCodes('&', prefix)); + plugin.msg(player, lm.Chat_ChangedPrefix, ChatColor.translateAlternateColorCodes('&', prefix)); return true; } else if (args[0].equalsIgnoreCase("kick")) { - ChatChannel chat = Residence.getChatManager().getPlayerChannel(pname); + ChatChannel chat = plugin.getChatManager().getPlayerChannel(pname); if (chat == null) { - Residence.msg(player, lm.Chat_JoinFirst); + plugin.msg(player, lm.Chat_JoinFirst); return true; } - ClaimedResidence res = Residence.getResidenceManager().getByName(chat.getChannelName()); + ClaimedResidence res = plugin.getResidenceManager().getByName(chat.getChannelName()); if (res == null) return false; - if (!res.getOwner().equals(player.getName()) && !Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.msg(player, lm.General_NoPermission); + if (!res.getOwner().equals(player.getName()) && !plugin.getPermissionManager().isResidenceAdmin(player)) { + plugin.msg(player, lm.General_NoPermission); return true; } - if (!player.hasPermission("residence.chatkick")) { - Residence.msg(player, lm.General_NoPermission); + if (!plugin.hasPermission(player, "residence.chatkick")) return true; - } String targetName = args[1]; if (!chat.hasMember(targetName)) { - Residence.msg(player, lm.Chat_NotInChannel); + plugin.msg(player, lm.Chat_NotInChannel); return false; } chat.leave(targetName); - Residence.getPlayerListener().removePlayerResidenceChat(targetName); - Residence.msg(player, lm.Chat_Kicked, targetName, chat.getChannelName()); + plugin.getPlayerListener().removePlayerResidenceChat(targetName); + plugin.msg(player, lm.Chat_Kicked, targetName, chat.getChannelName()); return true; } } diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index c119455d8..a2e79ec49 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -1,101 +1,101 @@ -package com.bekvon.bukkit.residence.commands; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.itemlist.WorldItemManager; -import com.bekvon.bukkit.residence.permissions.PermissionManager; -import com.bekvon.bukkit.residence.protection.WorldFlagManager; -import com.bekvon.bukkit.residence.text.help.HelpEntry; - -public class reload implements cmd { - - @Override - @CommandAnnotation(simple = false, priority = 5800) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!resadmin && !sender.isOp()) { - Residence.msg(sender, lm.General_NoPermission); - return true; - } - - if (args.length != 2) { - return false; - } - - if (args[1].equalsIgnoreCase("lang")) { - Residence.getLM().LanguageReload(); - File langFile = new File(new File(Residence.dataFolder, "Language"), Residence.getConfigManager().getLanguage() + ".yml"); - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - if (langFile.isFile()) { - FileConfiguration langconfig = new YamlConfiguration(); - try { - langconfig.load(in); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - Residence.helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - } else { - System.out.println(Residence.prefix + " Language file does not exist..."); - } - sender.sendMessage(Residence.prefix + " Reloaded language file."); - if (in != null) - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - return true; - } else if (args[1].equalsIgnoreCase("config")) { - Residence.getConfigManager().UpdateConfigFile(); - sender.sendMessage(Residence.prefix + " Reloaded config file."); - return true; - } else if (args[1].equalsIgnoreCase("groups")) { - Residence.getConfigManager().loadGroups(); - Residence.gmanager = new PermissionManager(); - Residence.wmanager = new WorldFlagManager(); - sender.sendMessage(Residence.prefix + " Reloaded groups file."); - return true; - } else if (args[1].equalsIgnoreCase("flags")) { - Residence.getConfigManager().loadFlags(); - Residence.gmanager = new PermissionManager(); - Residence.imanager = new WorldItemManager(); - Residence.wmanager = new WorldFlagManager(); - sender.sendMessage(Residence.prefix + " Reloaded flags file."); - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "reload lanf or config files"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res reload [config/lang/groups/flags]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("config%%lang%%groups%%flags")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.itemlist.WorldItemManager; +import com.bekvon.bukkit.residence.permissions.PermissionManager; +import com.bekvon.bukkit.residence.protection.WorldFlagManager; +import com.bekvon.bukkit.residence.text.help.HelpEntry; + +public class reload implements cmd { + + @Override + @CommandAnnotation(simple = false, priority = 5800) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!resadmin && !sender.isOp()) { + plugin.msg(sender, lm.General_NoPermission); + return true; + } + + if (args.length != 2) { + return false; + } + + if (args[1].equalsIgnoreCase("lang")) { + plugin.getLM().LanguageReload(); + File langFile = new File(new File(plugin.dataFolder, "Language"), plugin.getConfigManager().getLanguage() + ".yml"); + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + if (langFile.isFile()) { + FileConfiguration langconfig = new YamlConfiguration(); + try { + langconfig.load(in); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + plugin.helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); + } else { + System.out.println(plugin.prefix + " Language file does not exist..."); + } + sender.sendMessage(plugin.prefix + " Reloaded language file."); + if (in != null) + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return true; + } else if (args[1].equalsIgnoreCase("config")) { + plugin.getConfigManager().UpdateConfigFile(); + sender.sendMessage(plugin.prefix + " Reloaded config file."); + return true; + } else if (args[1].equalsIgnoreCase("groups")) { + plugin.getConfigManager().loadGroups(); + plugin.gmanager = new PermissionManager(plugin); + plugin.wmanager = new WorldFlagManager(); + sender.sendMessage(plugin.prefix + " Reloaded groups file."); + return true; + } else if (args[1].equalsIgnoreCase("flags")) { + plugin.getConfigManager().loadFlags(); + plugin.gmanager = new PermissionManager(plugin); + plugin.imanager = new WorldItemManager(); + plugin.wmanager = new WorldFlagManager(); + sender.sendMessage(plugin.prefix + " Reloaded flags file."); + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "reload lanf or config files"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res reload [config/lang/groups/flags]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("config%%lang%%groups%%flags")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index c43ad8445..084d9a63c 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -1,106 +1,102 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; - -public class remove implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 2300) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - - ClaimedResidence res = null; - String senderName = sender.getName(); - if (args.length == 2) { - res = Residence.getResidenceManager().getByName(args[1]); - } else if (sender instanceof Player && args.length == 1) { - res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); - } - - if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); - return true; - } - - if (res.isSubzone() && !sender.hasPermission("residence.delete.subzone") && !resadmin) { - Residence.msg(sender, lm.Subzone_CantDelete); - return true; - } - - if (res.isSubzone() && - sender.hasPermission("residence.delete.subzone") && - !resadmin && - Residence.getConfigManager().isPreventSubZoneRemoval() && - !res.getParent().isOwner(sender) && - !res.getPermissions().playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue)) { - Residence.msg(sender, lm.Subzone_CantDeleteNotOwnerOfParent); - return true; - } - - if (!res.isSubzone() && - sender.hasPermission("residence.delete") && - !resadmin && - !res.isOwner(sender)) { - Residence.msg(sender, lm.Residence_CantDeleteResidence); - return true; - } - - if (!res.isSubzone() && !sender.hasPermission("residence.delete") && !resadmin) { - Residence.msg(sender, lm.Residence_CantDeleteResidence); - return true; - } - - if (Residence.deleteConfirm.containsKey(senderName)) - Residence.deleteConfirm.remove(senderName); - - String resname = res.getName(); - - if (!Residence.deleteConfirm.containsKey(senderName) || !resname.equalsIgnoreCase(Residence.deleteConfirm.get(senderName))) { - String cmd = "res"; - if (resadmin) - cmd = "resadmin"; - if (sender instanceof Player) { - String raw = ""; - if (res.isSubzone()) { - raw = Residence.getResidenceManager().convertToRaw(null, Residence.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()), - "Click to confirm", cmd + " confirm"); - } else { - raw = Residence.getResidenceManager().convertToRaw(null, Residence.msg(lm.Residence_DeleteConfirm, res.getResidenceName()), - "Click to confirm", cmd + " confirm"); - } - if (Residence.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()).length() > 0) - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); - } else { - if (res.isSubzone()) - Residence.msg(sender, lm.Subzone_DeleteConfirm, res.getResidenceName()); - else - Residence.msg(sender, lm.Residence_DeleteConfirm, res.getResidenceName()); - } - Residence.deleteConfirm.put(senderName, resname); - } else { - Residence.getResidenceManager().removeResidence(sender, resname, resadmin); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - // Main command - c.get(path + "Description", "Remove residences."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res remove ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + +public class remove implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 2300) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + + ClaimedResidence res = null; + String senderName = sender.getName(); + if (args.length == 2) { + res = plugin.getResidenceManager().getByName(args[1]); + } else if (sender instanceof Player && args.length == 1) { + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); + } + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; + } + + if (res.isSubzone() && !resadmin && !plugin.hasPermission(sender, "residence.delete.subzone", lm.Subzone_CantDelete)) { + return true; + } + + if (res.isSubzone() && + !resadmin && + plugin.getConfigManager().isPreventSubZoneRemoval() && + !res.getParent().isOwner(sender) && + !res.getPermissions().playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue) && + plugin.hasPermission(sender, "residence.delete.subzone", lm.Subzone_CantDeleteNotOwnerOfParent)) { + return true; + } + + if (!res.isSubzone() && + !resadmin && + !res.isOwner(sender) && + plugin.hasPermission(sender, "residence.delete", lm.Residence_CantDeleteResidence)) { + return true; + } + + if (!res.isSubzone() && !resadmin && !plugin.hasPermission(sender, "residence.delete", lm.Residence_CantDeleteResidence)) { + return true; + } + + if (plugin.deleteConfirm.containsKey(senderName)) + plugin.deleteConfirm.remove(senderName); + + String resname = res.getName(); + + if (!plugin.deleteConfirm.containsKey(senderName) || !resname.equalsIgnoreCase(plugin.deleteConfirm.get(senderName))) { + String cmd = "res"; + if (resadmin) + cmd = "resadmin"; + if (sender instanceof Player) { + String raw = ""; + if (res.isSubzone()) { + raw = plugin.getResidenceManager().convertToRaw(null, plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()), + "Click to confirm", cmd + " confirm"); + } else { + raw = plugin.getResidenceManager().convertToRaw(null, plugin.msg(lm.Residence_DeleteConfirm, res.getResidenceName()), + "Click to confirm", cmd + " confirm"); + } + if (plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()).length() > 0) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); + } else { + if (res.isSubzone()) + plugin.msg(sender, lm.Subzone_DeleteConfirm, res.getResidenceName()); + else + plugin.msg(sender, lm.Residence_DeleteConfirm, res.getResidenceName()); + } + plugin.deleteConfirm.put(senderName, resname); + } else { + plugin.getResidenceManager().removeResidence(sender, resname, resadmin); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Remove residences."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res remove ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/removeall.java b/src/com/bekvon/bukkit/residence/commands/removeall.java index 55db27f92..e71e324b3 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeall.java +++ b/src/com/bekvon/bukkit/residence/commands/removeall.java @@ -1,41 +1,41 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class removeall implements cmd { - - @Override - @CommandAnnotation(simple = false, priority = 5100) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (args.length != 2 && args.length != 1) { - return false; - } - - String target = args.length == 2 ? args[1] : sender.getName(); - - if (resadmin) { - Residence.getResidenceManager().removeAllByOwner(target); - Residence.msg(sender, lm.Residence_RemovePlayersResidences, target); - } else { - Residence.msg(sender, lm.General_NoPermission); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Remove all residences owned by a player."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeall [owner]", - "Removes all residences owned by a specific player.'", "Requires /resadmin if you use it on anyone besides yourself.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); - } - -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class removeall implements cmd { + + @Override + @CommandAnnotation(simple = false, priority = 5100) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (args.length != 2 && args.length != 1) { + return false; + } + + String target = args.length == 2 ? args[1] : sender.getName(); + + if (resadmin) { + plugin.getResidenceManager().removeAllByOwner(target); + plugin.msg(sender, lm.Residence_RemovePlayersResidences, target); + } else { + plugin.msg(sender, lm.General_NoPermission); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Remove all residences owned by a player."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeall [owner]", + "Removes all residences owned by a specific player.'", "Requires /resadmin if you use it on anyone besides yourself.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index 715c3151f..55e022c8f 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -1,38 +1,38 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; - -public class removeworld implements cmd { - - @Override - @CommandAnnotation(simple = false, priority = 5200) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - - if (args.length != 2) - return false; - - if (sender instanceof ConsoleCommandSender) { - Residence.getResidenceManager().removeAllFromWorld(sender, args[1]); - return true; - } - sender.sendMessage(ChatColor.RED + "MUST be run from console."); - - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Removes all residences from particular world"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeworld [worldName]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; + +public class removeworld implements cmd { + + @Override + @CommandAnnotation(simple = false, priority = 5200) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + + if (args.length != 2) + return false; + + if (sender instanceof ConsoleCommandSender) { + plugin.getResidenceManager().removeAllFromWorld(sender, args[1]); + return true; + } + sender.sendMessage(ChatColor.RED + "MUST be run from console."); + + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Removes all residences from particular world"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeworld [worldName]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/rename.java b/src/com/bekvon/bukkit/residence/commands/rename.java index 16f1c5155..f6312b8a2 100644 --- a/src/com/bekvon/bukkit/residence/commands/rename.java +++ b/src/com/bekvon/bukkit/residence/commands/rename.java @@ -1,37 +1,37 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; - -public class rename implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 2700) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (args.length == 3) { - Residence.getResidenceManager().renameResidence(player, args[1], args[2], resadmin); - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Renames a residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", - "The name must not already be taken by another residence.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; + +public class rename implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 2700) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length == 3) { + plugin.getResidenceManager().renameResidence(player, args[1], args[2], resadmin); + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Renames a residence."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", + "The name must not already be taken by another residence.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/renamearea.java b/src/com/bekvon/bukkit/residence/commands/renamearea.java index 448bb507a..3661b075a 100644 --- a/src/com/bekvon/bukkit/residence/commands/renamearea.java +++ b/src/com/bekvon/bukkit/residence/commands/renamearea.java @@ -1,42 +1,42 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class renamearea implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 2800) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (args.length != 4) - return false; - - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res == null) - Residence.msg(player, lm.Invalid_Residence); - else - res.renameArea(player, args[2], args[3], resadmin); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Rename area name for residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeworld [residence] [oldAreaName] [newAreaName]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class renamearea implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 2800) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 4) + return false; + + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) + plugin.msg(player, lm.Invalid_Residence); + else + res.renameArea(player, args[2], args[3], resadmin); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Rename area name for residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeworld [residence] [oldAreaName] [newAreaName]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/resadmin.java b/src/com/bekvon/bukkit/residence/commands/resadmin.java index cf93d12b3..e4cdf3fd8 100644 --- a/src/com/bekvon/bukkit/residence/commands/resadmin.java +++ b/src/com/bekvon/bukkit/residence/commands/resadmin.java @@ -1,42 +1,42 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class resadmin implements cmd { - - @Override - @CommandAnnotation(simple = false, priority = 5300) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - if (args.length != 2) - return true; - - Player player = (Player) sender; - if (args[1].equals("on")) { - Residence.resadminToggle.add(player.getName()); - Residence.msg(player, lm.General_AdminToggleTurnOn); - } else if (args[1].equals("off")) { - Residence.resadminToggle.remove(player.getName()); - Residence.msg(player, lm.General_AdminToggleTurnOff); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Enabled or disable residence admin"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res resadmin [on/off]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("on%%off")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class resadmin implements cmd { + + @Override + @CommandAnnotation(simple = false, priority = 5300) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + if (args.length != 2) + return true; + + Player player = (Player) sender; + if (args[1].equals("on")) { + plugin.resadminToggle.add(player.getName()); + plugin.msg(player, lm.General_AdminToggleTurnOn); + } else if (args[1].equals("off")) { + plugin.resadminToggle.remove(player.getName()); + plugin.msg(player, lm.General_AdminToggleTurnOff); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Enabled or disable residence admin"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res resadmin [on/off]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("on%%off")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/resbank.java b/src/com/bekvon/bukkit/residence/commands/resbank.java index cad28af71..4e9d4a415 100644 --- a/src/com/bekvon/bukkit/residence/commands/resbank.java +++ b/src/com/bekvon/bukkit/residence/commands/resbank.java @@ -1,67 +1,67 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class resbank implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 1800) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - - if (args.length != 3 && args.length != 4) { - return false; - } - ClaimedResidence res = null; - - if (args.length == 4) { - res = Residence.getResidenceManager().getByName(args[2]); - if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); - return true; - } - } else { - if (sender instanceof Player) - res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); - } - if (res == null) { - Residence.msg(sender, lm.Residence_NotIn); - return true; - } - int amount = 0; - try { - if (args.length == 3) - amount = Integer.parseInt(args[2]); - else - amount = Integer.parseInt(args[3]); - } catch (Exception ex) { - Residence.msg(sender, lm.Invalid_Amount); - return true; - } - if (args[1].equals("deposit")) { - res.getBank().deposit(sender, amount, resadmin); - } else if (args[1].equals("withdraw")) { - res.getBank().withdraw(sender, amount, resadmin); - } else { - return false; - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Deposit or widraw money from residence bank"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res resbank [deposit/withdraw] [amount]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw","1")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class resbank implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 1800) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + + if (args.length != 3 && args.length != 4) { + return false; + } + ClaimedResidence res = null; + + if (args.length == 4) { + res = plugin.getResidenceManager().getByName(args[2]); + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; + } + } else { + if (sender instanceof Player) + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); + } + if (res == null) { + plugin.msg(sender, lm.Residence_NotIn); + return true; + } + int amount = 0; + try { + if (args.length == 3) + amount = Integer.parseInt(args[2]); + else + amount = Integer.parseInt(args[3]); + } catch (Exception ex) { + plugin.msg(sender, lm.Invalid_Amount); + return true; + } + if (args[1].equals("deposit")) { + res.getBank().deposit(sender, amount, resadmin); + } else if (args[1].equals("withdraw")) { + res.getBank().withdraw(sender, amount, resadmin); + } else { + return false; + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Deposit or widraw money from residence bank"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res resbank [deposit/withdraw] [amount]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw","1")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index df85cd676..e7c5406a5 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -1,40 +1,40 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class reset implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 4400) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (args.length != 2) - return false; - - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - res.getPermissions().applyDefaultFlags(player, resadmin); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Reset residence to default flags."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res reset ", - "Resets the flags on a residence to their default. You must be the owner or an admin to do this.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class reset implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 4400) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 2) + return false; + + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + res.getPermissions().applyDefaultFlags(player, resadmin); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Reset residence to default flags."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res reset ", + "Resets the flags on a residence to their default. You must be the owner or an admin to do this.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 09642dbe2..82f2d387e 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -1,118 +1,116 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.RandomTeleport; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class rt implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 2500) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (args.length != 1 && args.length != 2 && args.length != 3) { - return false; - } - - if (!sender.hasPermission("residence.randomtp") && !resadmin) { - Residence.msg(sender, lm.General_NoPermission); - return true; - } - - String wname = null; - - Player tPlayer = null; - - if (args.length > 1) { - c: for (int i = 1; i < args.length; i++) { - for (RandomTeleport one : Residence.getConfigManager().getRandomTeleport()) { - if (!one.getWorld().equalsIgnoreCase(args[i])) - continue; - wname = one.getWorld(); - continue c; - } - Player p = Bukkit.getPlayer(args[i]); - if (p != null) - tPlayer = p; - } - } - - if (args.length > 1 && wname == null && tPlayer == null) { - Residence.msg(sender, lm.Invalid_World); - String worlds = ""; - for (RandomTeleport one : Residence.getConfigManager().getRandomTeleport()) { - worlds += one.getWorld() + " "; - break; - } - Residence.msg(sender, lm.RandomTeleport_WorldList, worlds); - return true; - } - - if (tPlayer == null && sender instanceof Player) - tPlayer = (Player) sender; - - if (wname == null && tPlayer != null) - wname = tPlayer.getLocation().getWorld().getName(); - - if (wname == null && tPlayer == null) { - Residence.msg(sender, lm.Invalid_World); - String worlds = ""; - for (RandomTeleport one : Residence.getConfigManager().getRandomTeleport()) { - worlds += one.getWorld() + " "; - break; - } - Residence.msg(sender, lm.RandomTeleport_WorldList, worlds); - return true; - } - - if (tPlayer == null) - return false; - - if (!sender.getName().equalsIgnoreCase(tPlayer.getName()) && !sender.hasPermission("residence.randomtp.admin")) - return false; - - int sec = Residence.getConfigManager().getrtCooldown(); - if (Residence.getRandomTeleportMap().containsKey(tPlayer.getName()) && !resadmin) { - if (Residence.getRandomTeleportMap().get(tPlayer.getName()) + (sec * 1000) > System.currentTimeMillis()) { - int left = (int) (sec - ((System.currentTimeMillis() - Residence.getRandomTeleportMap().get(tPlayer.getName())) / 1000)); - Residence.msg(tPlayer, lm.RandomTeleport_TpLimit, left); - return true; - } - } - - Location loc = Residence.getRandomTpManager().getRandomlocation(wname); - Residence.getRandomTeleportMap().put(tPlayer.getName(), System.currentTimeMillis()); - - if (loc == null) { - Residence.msg(sender, lm.RandomTeleport_IncorrectLocation, sec); - return true; - } - - if (Residence.getConfigManager().getTeleportDelay() > 0 && !resadmin) { - Residence.msg(tPlayer, lm.RandomTeleport_TeleportStarted, loc.getX(), loc.getY(), loc - .getZ(), Residence.getConfigManager().getTeleportDelay()); - Residence.getTeleportDelayMap().add(tPlayer.getName()); - Residence.getRandomTpManager().performDelaydTp(loc, tPlayer); - } else - Residence.getRandomTpManager().performInstantTp(loc, tPlayer); - - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Teleports to random location in world"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res rt (worldname) (playerName)", "Teleports you to random location in defined world.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]", "[playername]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.RandomTeleport; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class rt implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 2500) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (args.length != 1 && args.length != 2 && args.length != 3) { + return false; + } + + if (!resadmin && !plugin.hasPermission(sender, "residence.randomtp")) + return true; + + String wname = null; + + Player tPlayer = null; + + if (args.length > 1) { + c: for (int i = 1; i < args.length; i++) { + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + if (!one.getWorld().equalsIgnoreCase(args[i])) + continue; + wname = one.getWorld(); + continue c; + } + Player p = Bukkit.getPlayer(args[i]); + if (p != null) + tPlayer = p; + } + } + + if (args.length > 1 && wname == null && tPlayer == null) { + plugin.msg(sender, lm.Invalid_World); + String worlds = ""; + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + worlds += one.getWorld() + " "; + break; + } + plugin.msg(sender, lm.RandomTeleport_WorldList, worlds); + return true; + } + + if (tPlayer == null && sender instanceof Player) + tPlayer = (Player) sender; + + if (wname == null && tPlayer != null) + wname = tPlayer.getLocation().getWorld().getName(); + + if (wname == null && tPlayer == null) { + plugin.msg(sender, lm.Invalid_World); + String worlds = ""; + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + worlds += one.getWorld() + " "; + break; + } + plugin.msg(sender, lm.RandomTeleport_WorldList, worlds); + return true; + } + + if (tPlayer == null) + return false; + + if (!sender.getName().equalsIgnoreCase(tPlayer.getName()) && !plugin.hasPermission(sender, "residence.randomtp.admin")) + return false; + + int sec = plugin.getConfigManager().getrtCooldown(); + if (plugin.getRandomTeleportMap().containsKey(tPlayer.getName()) && !resadmin) { + if (plugin.getRandomTeleportMap().get(tPlayer.getName()) + (sec * 1000) > System.currentTimeMillis()) { + int left = (int) (sec - ((System.currentTimeMillis() - plugin.getRandomTeleportMap().get(tPlayer.getName())) / 1000)); + plugin.msg(tPlayer, lm.RandomTeleport_TpLimit, left); + return true; + } + } + + Location loc = plugin.getRandomTpManager().getRandomlocation(wname); + plugin.getRandomTeleportMap().put(tPlayer.getName(), System.currentTimeMillis()); + + if (loc == null) { + plugin.msg(sender, lm.RandomTeleport_IncorrectLocation, sec); + return true; + } + + if (plugin.getConfigManager().getTeleportDelay() > 0 && !resadmin) { + plugin.msg(tPlayer, lm.RandomTeleport_TeleportStarted, loc.getX(), loc.getY(), loc + .getZ(), plugin.getConfigManager().getTeleportDelay()); + plugin.getTeleportDelayMap().add(tPlayer.getName()); + plugin.getRandomTpManager().performDelaydTp(loc, tPlayer); + } else + plugin.getRandomTpManager().performInstantTp(loc, tPlayer); + + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Teleports to random location in world"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res rt (worldname) (playerName)", "Teleports you to random location in defined world.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]", "[playername]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 68df2872a..17b80da1a 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -1,228 +1,227 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; - -public class select implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 1300) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - - PermissionGroup group = rPlayer.getGroup(); - if (!group.selectCommandAccess() && !resadmin) { - Residence.msg(player, lm.Select_Disabled); - return true; - } - if (!group.canCreateResidences() && rPlayer.getMaxSubzones() <= 0 && !resadmin) { - Residence.msg(player, lm.Select_Disabled); - return true; - } - if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player - .isPermissionSet("residence.select")) && !resadmin) { - Residence.msg(player, lm.Select_Disabled); - return true; - } - if (args.length == 2) { - if (args[1].equals("size") || args[1].equals("cost")) { - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - try { - Residence.getSelectionManager().showSelectionInfo(player); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - return true; - } - } else if (Residence.getSelectionManager().worldEdit(player)) { - try { - Residence.getSelectionManager().showSelectionInfo(player); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - return true; - } - } - } else if (args[1].equals("vert")) { - Residence.getSelectionManager().vert(player, resadmin); - return true; - } else if (args[1].equals("sky")) { - Residence.getSelectionManager().sky(player, resadmin); - return true; - } else if (args[1].equals("bedrock")) { - Residence.getSelectionManager().bedrock(player, resadmin); - return true; - } else if (args[1].equals("coords")) { - Residence.msg(player, lm.General_Separator); - Location playerLoc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); - if (playerLoc1 != null) { - Residence.msg(player, lm.Select_Primary, Residence.msg(lm.General_CoordsTop, playerLoc1.getBlockX(), playerLoc1 - .getBlockY(), playerLoc1.getBlockZ())); - } - Location playerLoc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); - if (playerLoc2 != null) { - Residence.msg(player, lm.Select_Secondary, Residence.msg(lm.General_CoordsBottom, playerLoc2.getBlockX(), - playerLoc2 - .getBlockY(), playerLoc2.getBlockZ())); - } - Residence.msg(player, lm.General_Separator); - return true; - } else if (args[1].equals("chunk")) { - Residence.getSelectionManager().selectChunk(player); - return true; - } else if (args[1].equals("worldedit")) { - if (Residence.getSelectionManager().worldEdit(player)) { - Residence.msg(player, lm.Select_Success); - } - return true; - } - } else if (args.length == 3) { - if (args[1].equals("expand")) { - int amount; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Amount); - return true; - } - Residence.getSelectionManager().modify(player, false, amount); - return true; - } else if (args[1].equals("shift")) { - int amount; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - Residence.msg(player, lm.Invalid_Amount); - return true; - } - Residence.getSelectionManager().modify(player, true, amount); - return true; - } - } - if ((args.length == 2 || args.length == 3) && args[1].equals("auto")) { - Player target = player; - if (args.length == 3) { - if (!player.hasPermission("residence.select.auto.others")) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - target = Bukkit.getPlayer(args[2]); - if (target == null) { - Residence.msg(player, lm.General_NotOnline); - return true; - } - } - Residence.getAutoSelectionManager().switchAutoSelection(target); - return true; - } - if (args.length > 1 && args[1].equals("residence")) { - String resName; - String areaName; - ClaimedResidence res = null; - if (args.length > 2) { - res = Residence.getResidenceManager().getByName(args[2]); - } else { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - } - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - resName = res.getName(); - CuboidArea area = null; - if (args.length > 3) { - area = res.getArea(args[3]); - areaName = args[3]; - } else { - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - } - if (area != null) { - Residence.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); - Residence.getSelectionManager().placeLoc2(player, area.getLowLoc(), true); - Residence.msg(player, lm.Select_Area, areaName, resName); - } else { - Residence.msg(player, lm.Area_NonExist); - } - return true; - } - try { - Residence.getSelectionManager().selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); - return true; - } catch (Exception ex) { - Residence.msg(player, lm.Select_Fail); - return true; - } - } - - @Override - public void getLocale(ConfigReader c, String path) { - // Main command - c.get(path + "Description", "Selection Commands"); - c.get(path + "Info", Arrays.asList("This command selects areas for usage with residence.", - "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle.")); - - // Sub commands - path += "SubCommands."; - - c.get(path + "coords.Description", "Display selected coordinates"); - c.get(path + "coords.Info", Arrays.asList("&eUsage: &6/res select coords")); - - c.get(path + "size.Description", "Display selected size"); - c.get(path + "size.Info", Arrays.asList("&eUsage: &6/res select size")); - - c.get(path + "auto.Description", "Turns on auto selection tool"); - c.get(path + "auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "auto"), Arrays.asList("[playername]")); - - c.get(path + "cost.Description", "Display selection cost"); - c.get(path + "cost.Info", Arrays.asList("&eUsage: &6/res select cost")); - - c.get(path + "vert.Description", "Expand Selection Vertically"); - c.get(path + "vert.Info", Arrays.asList("&eUsage: &6/res select vert", "Will expand selection as high and as low as allowed.")); - - c.get(path + "sky.Description", "Expand Selection to Sky"); - c.get(path + "sky.Info", Arrays.asList("&eUsage: &6/res select sky", "Expands as high as your allowed to go.")); - - c.get(path + "bedrock.Description", "Expand Selection to Bedrock"); - c.get(path + "bedrock.Info", Arrays.asList("&eUsage: &6/res select bedrock", "Expands as low as your allowed to go.")); - - c.get(path + "expand.Description", "Expand selection in a direction."); - c.get(path + "expand.Info", Arrays.asList("&eUsage: &6/res select expand ", "Expands in the direction your looking.")); - - c.get(path + "shift.Description", "Shift selection in a direction"); - c.get(path + "shift.Info", Arrays.asList("&eUsage: &6/res select shift ", "Pushes your selection by in the direction your looking.")); - - c.get(path + "chunk.Description", "Select the chunk your currently in."); - c.get(path + "chunk.Info", Arrays.asList("&eUsage: &6/res select chunk", "Selects the chunk your currently standing in.")); - - c.get(path + "residence.Description", "Select a existing area in a residence."); - c.get(path + "residence.Info", Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "residence"), Arrays.asList("[residence]")); - - c.get(path + "worldedit.Description", "Set selection using the current WorldEdit selection."); - c.get(path + "worldedit.Info", Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection.")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; + +public class select implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 1300) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); + if (!group.selectCommandAccess() && !resadmin) { + plugin.msg(player, lm.Select_Disabled); + return true; + } + if (!group.canCreateResidences() && rPlayer.getMaxSubzones() <= 0 && !resadmin) { + plugin.msg(player, lm.Select_Disabled); + return true; + } + if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player + .isPermissionSet("residence.select")) && !resadmin) { + plugin.msg(player, lm.Select_Disabled); + return true; + } + if (args.length == 2) { + if (args[1].equals("size") || args[1].equals("cost")) { + if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + try { + plugin.getSelectionManager().showSelectionInfo(player); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + return true; + } + } else if (plugin.getSelectionManager().worldEdit(player)) { + try { + plugin.getSelectionManager().showSelectionInfo(player); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + return true; + } + } + } else if (args[1].equals("vert")) { + plugin.getSelectionManager().vert(player, resadmin); + return true; + } else if (args[1].equals("sky")) { + plugin.getSelectionManager().sky(player, resadmin); + return true; + } else if (args[1].equals("bedrock")) { + plugin.getSelectionManager().bedrock(player, resadmin); + return true; + } else if (args[1].equals("coords")) { + plugin.msg(player, lm.General_Separator); + Location playerLoc1 = plugin.getSelectionManager().getPlayerLoc1(player.getName()); + if (playerLoc1 != null) { + plugin.msg(player, lm.Select_Primary, plugin.msg(lm.General_CoordsTop, playerLoc1.getBlockX(), playerLoc1 + .getBlockY(), playerLoc1.getBlockZ())); + } + Location playerLoc2 = plugin.getSelectionManager().getPlayerLoc2(player.getName()); + if (playerLoc2 != null) { + plugin.msg(player, lm.Select_Secondary, plugin.msg(lm.General_CoordsBottom, playerLoc2.getBlockX(), + playerLoc2 + .getBlockY(), playerLoc2.getBlockZ())); + } + plugin.msg(player, lm.General_Separator); + return true; + } else if (args[1].equals("chunk")) { + plugin.getSelectionManager().selectChunk(player); + return true; + } else if (args[1].equals("worldedit")) { + if (plugin.getSelectionManager().worldEdit(player)) { + plugin.msg(player, lm.Select_Success); + } + return true; + } + } else if (args.length == 3) { + if (args[1].equals("expand")) { + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Amount); + return true; + } + plugin.getSelectionManager().modify(player, false, amount); + return true; + } else if (args[1].equals("shift")) { + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Amount); + return true; + } + plugin.getSelectionManager().modify(player, true, amount); + return true; + } + } + if ((args.length == 2 || args.length == 3) && args[1].equals("auto")) { + Player target = player; + if (args.length == 3) { + if (!plugin.hasPermission(player, "residence.select.auto.others")) { + return true; + } + target = Bukkit.getPlayer(args[2]); + if (target == null) { + plugin.msg(player, lm.General_NotOnline); + return true; + } + } + plugin.getAutoSelectionManager().switchAutoSelection(target); + return true; + } + if (args.length > 1 && args[1].equals("residence")) { + String resName; + String areaName; + ClaimedResidence res = null; + if (args.length > 2) { + res = plugin.getResidenceManager().getByName(args[2]); + } else { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + } + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + resName = res.getName(); + CuboidArea area = null; + if (args.length > 3) { + area = res.getArea(args[3]); + areaName = args[3]; + } else { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } + if (area != null) { + plugin.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); + plugin.getSelectionManager().placeLoc2(player, area.getLowLoc(), true); + plugin.msg(player, lm.Select_Area, areaName, resName); + } else { + plugin.msg(player, lm.Area_NonExist); + } + return true; + } + try { + plugin.getSelectionManager().selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); + return true; + } catch (Exception ex) { + plugin.msg(player, lm.Select_Fail); + return true; + } + } + + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Selection Commands"); + c.get(path + "Info", Arrays.asList("This command selects areas for usage with residence.", + "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle.")); + + // Sub commands + path += "SubCommands."; + + c.get(path + "coords.Description", "Display selected coordinates"); + c.get(path + "coords.Info", Arrays.asList("&eUsage: &6/res select coords")); + + c.get(path + "size.Description", "Display selected size"); + c.get(path + "size.Info", Arrays.asList("&eUsage: &6/res select size")); + + c.get(path + "auto.Description", "Turns on auto selection tool"); + c.get(path + "auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "auto"), Arrays.asList("[playername]")); + + c.get(path + "cost.Description", "Display selection cost"); + c.get(path + "cost.Info", Arrays.asList("&eUsage: &6/res select cost")); + + c.get(path + "vert.Description", "Expand Selection Vertically"); + c.get(path + "vert.Info", Arrays.asList("&eUsage: &6/res select vert", "Will expand selection as high and as low as allowed.")); + + c.get(path + "sky.Description", "Expand Selection to Sky"); + c.get(path + "sky.Info", Arrays.asList("&eUsage: &6/res select sky", "Expands as high as your allowed to go.")); + + c.get(path + "bedrock.Description", "Expand Selection to Bedrock"); + c.get(path + "bedrock.Info", Arrays.asList("&eUsage: &6/res select bedrock", "Expands as low as your allowed to go.")); + + c.get(path + "expand.Description", "Expand selection in a direction."); + c.get(path + "expand.Info", Arrays.asList("&eUsage: &6/res select expand ", "Expands in the direction your looking.")); + + c.get(path + "shift.Description", "Shift selection in a direction"); + c.get(path + "shift.Info", Arrays.asList("&eUsage: &6/res select shift ", "Pushes your selection by in the direction your looking.")); + + c.get(path + "chunk.Description", "Select the chunk your currently in."); + c.get(path + "chunk.Info", Arrays.asList("&eUsage: &6/res select chunk", "Selects the chunk your currently standing in.")); + + c.get(path + "residence.Description", "Select a existing area in a residence."); + c.get(path + "residence.Info", Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "residence"), Arrays.asList("[residence]")); + + c.get(path + "worldedit.Description", "Set selection using the current WorldEdit selection."); + c.get(path + "worldedit.Info", Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection.")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java index dcd099763..7e8f96113 100644 --- a/src/com/bekvon/bukkit/residence/commands/server.java +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -1,51 +1,51 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class server implements cmd { - - @Override - @CommandAnnotation(simple = false, priority = 5400) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (!resadmin) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - if (args.length == 2) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - res.getPermissions().setOwner(Residence.getServerLandname(), false); - Residence.msg(player, lm.Residence_OwnerChange, args[1], Residence.getServerLandname()); - return true; - } - Residence.msg(player, lm.Invalid_Residence); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - - c.get(path + "Description", "Make land server owned."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/resadmin server [residence]", "Make a residence server owned.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class server implements cmd { + + @Override + @CommandAnnotation(simple = false, priority = 5400) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (!resadmin) { + plugin.msg(player, lm.General_NoPermission); + return true; + } + if (args.length == 2) { + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + res.getPermissions().setOwner(plugin.getServerLandname(), false); + plugin.msg(player, lm.Residence_OwnerChange, args[1], plugin.getServerLandname()); + return true; + } + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + + c.get(path + "Description", "Make land server owned."); + c.get(path + "Info", Arrays.asList("&eUsage: &6/resadmin server [residence]", "Make a residence server owned.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 133807de8..9ddfc0a31 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -19,54 +19,54 @@ public class set implements cmd { @Override @CommandAnnotation(simple = true, priority = 700) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player) && args.length != 4) return false; if (args.length == 3) { Player player = (Player) sender; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); + plugin.msg(sender, lm.Invalid_Residence); return true; } if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { - Residence.msg(sender, lm.General_NoPermission); + plugin.msg(sender, lm.General_NoPermission); return true; } res.getPermissions().setFlag(sender, args[1], args[2], resadmin); return true; } else if (args.length == 4) { - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); + plugin.msg(sender, lm.Invalid_Residence); return true; } if (!res.isOwner(sender) && !resadmin && !res.getPermissions().playerHas(sender, Flags.admin, false)) { - Residence.msg(sender, lm.General_NoPermission); + plugin.msg(sender, lm.General_NoPermission); return true; } res.getPermissions().setFlag(sender, args[2], args[3], resadmin); return true; - } else if ((args.length == 1 || args.length == 2) && Residence.getConfigManager().useFlagGUI()) { + } else if ((args.length == 1 || args.length == 2) && plugin.getConfigManager().useFlagGUI()) { Player player = (Player) sender; ClaimedResidence res = null; if (args.length == 1) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); else - res = Residence.getResidenceManager().getByName(args[1]); + res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); + plugin.msg(sender, lm.Invalid_Residence); return true; } if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { - Residence.msg(sender, lm.General_NoPermission); + plugin.msg(sender, lm.General_NoPermission); return true; } SetFlag flag = new SetFlag(res.getName(), player, resadmin); flag.recalculateResidence(res); player.closeInventory(); - Residence.getPlayerListener().getGUImap().put(player.getName(), flag); + plugin.getPlayerListener().getGUImap().put(player.getName(), flag); player.openInventory(flag.getInventory()); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/setmain.java b/src/com/bekvon/bukkit/residence/commands/setmain.java index a63b16a38..d6186ed54 100644 --- a/src/com/bekvon/bukkit/residence/commands/setmain.java +++ b/src/com/bekvon/bukkit/residence/commands/setmain.java @@ -1,65 +1,65 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class setmain implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 2900) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (args.length != 1 && args.length != 2) { - return false; - } - - ClaimedResidence res = null; - - if (args.length == 1) - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - else - res = Residence.getResidenceManager().getByName(args[1]); - - if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); - return false; - } - - if (res.isOwner(player)) { - res.setMainResidence(res.isMainResidence() ? false : true); - } else if (Residence.getRentManager().isRented(res.getName()) && !Residence.getRentManager().getRentingPlayer(res.getName()).equalsIgnoreCase(player.getName())) { - Residence.msg(sender, lm.Invalid_Residence); - return false; - } - - Residence.msg(player, lm.Residence_ChangedMain, res.getTopParentName()); - - ResidencePlayer rplayer = Residence.getPlayerManager().getResidencePlayer(player); - if (rplayer != null) - rplayer.setMainResidence(res); - - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Sets defined residence as main to show up in chat as prefix"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res setmain (residence)", "Set defined residence as main.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class setmain implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 2900) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 1 && args.length != 2) { + return false; + } + + ClaimedResidence res = null; + + if (args.length == 1) + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + else + res = plugin.getResidenceManager().getByName(args[1]); + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return false; + } + + if (res.isOwner(player)) { + res.setMainResidence(res.isMainResidence() ? false : true); + } else if (plugin.getRentManager().isRented(res.getName()) && !plugin.getRentManager().getRentingPlayer(res.getName()).equalsIgnoreCase(player.getName())) { + plugin.msg(sender, lm.Invalid_Residence); + return false; + } + + plugin.msg(player, lm.Residence_ChangedMain, res.getTopParentName()); + + ResidencePlayer rplayer = plugin.getPlayerManager().getResidencePlayer(player); + if (rplayer != null) + rplayer.setMainResidence(res); + + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Sets defined residence as main to show up in chat as prefix"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res setmain (residence)", "Set defined residence as main.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index ea40ca187..9143a66ed 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -15,32 +15,32 @@ public class setowner implements cmd { @Override @CommandAnnotation(simple = false, priority = 5500) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { if (args.length < 3) return false; if (!resadmin) { - Residence.msg(sender, lm.General_NoPermission); + plugin.msg(sender, lm.General_NoPermission); return true; } - ClaimedResidence area = Residence.getResidenceManager().getByName(args[1]); + ClaimedResidence area = plugin.getResidenceManager().getByName(args[1]); if (area != null) { area.getPermissions().setOwner(args[2], true); - if (Residence.getRentManager().isForRent(area.getName())) - Residence.getRentManager().removeRentable(area.getName()); - if (Residence.getTransactionManager().isForSale(area.getName())) - Residence.getTransactionManager().removeFromSale(area.getName()); + if (plugin.getRentManager().isForRent(area.getName())) + plugin.getRentManager().removeRentable(area.getName()); + if (plugin.getTransactionManager().isForSale(area.getName())) + plugin.getTransactionManager().removeFromSale(area.getName()); area.getPermissions().applyDefaultFlags(); if (area.getParent() == null) { - Residence.msg(sender, lm.Residence_OwnerChange, args[1], args[2]); + plugin.msg(sender, lm.Residence_OwnerChange, args[1], args[2]); } else { - Residence.msg(sender, lm.Subzone_OwnerChange, args[1].split("\\.")[args[1].split("\\.").length - 1], args[2]); + plugin.msg(sender, lm.Subzone_OwnerChange, args[1].split("\\.")[args[1].split("\\.").length - 1], args[2]); } } else { - Residence.msg(sender, lm.Invalid_Residence); + plugin.msg(sender, lm.Invalid_Residence); } return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 69b7f0dd9..3b9538b58 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -30,7 +30,7 @@ public class shop implements cmd { @Override @CommandAnnotation(simple = true, priority = 1700) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -49,43 +49,43 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ClaimedResidence res = null; if (args.length == 2) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - Residence.msg(player, lm.Residence_NotIn); + plugin.msg(player, lm.Residence_NotIn); return true; } } else if (args.length == 3) { - res = Residence.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[2]); if (res == null) { try { VotePage = Integer.parseInt(args[2]); - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - Residence.msg(player, lm.Residence_NotIn); + plugin.msg(player, lm.Residence_NotIn); return true; } } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); + plugin.msg(player, lm.General_UseNumbers); return true; } } } else if (args.length == 4) { - res = Residence.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[2]); if (res == null) { - Residence.msg(player, lm.Residence_NotIn); + plugin.msg(player, lm.Residence_NotIn); return true; } try { VotePage = Integer.parseInt(args[3]); } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); + plugin.msg(player, lm.General_UseNumbers); return true; } } if (res == null) { - Residence.msg(player, lm.Residence_NotIn); + plugin.msg(player, lm.Residence_NotIn); return true; } @@ -98,11 +98,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } int pagecount = (int) Math.ceil((double) VoteList.size() / (double) 10); if (page > pagecount || page < 1) { - Residence.msg(sender, lm.Shop_NoVotes); + plugin.msg(sender, lm.Shop_NoVotes); return true; } - Residence.msg(player, lm.Shop_VotesTopLine, separator, res.getName(), VotePage, pagecount, separator); + plugin.msg(player, lm.Shop_VotesTopLine, separator, res.getName(), VotePage, pagecount, separator); int start = VotePage * 10 - 9; int end = VotePage * 10 + 1; @@ -119,10 +119,10 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Date dNow = new Date(one.getTime()); SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss"); - ft.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); + ft.setTimeZone(TimeZone.getTimeZone(plugin.getConfigManager().getTimeZone())); String timeString = ft.format(dNow); - String message = Residence.msg(lm.Shop_VotesList, i, one.getName(), (Residence.getConfigManager().isOnlyLike() + String message = plugin.msg(lm.Shop_VotesList, i, one.getName(), (plugin.getConfigManager().isOnlyLike() ? "" : one.getVote()), timeString); player.sendMessage(message); i++; @@ -137,11 +137,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Prevpage = page > 1 ? Prevpage : page; String prevCmd = "/res shop votes " + res.getName() + " " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + String prev = "[\"\",{\"text\":\"" + separator + " " + plugin.msg(lm.General_PrevInfoPage) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = "/res shop votes " + res.getName() + " " + NextPage; - String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + String next = " {\"text\":\"" + plugin.msg(lm.General_NextInfoPage) + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; @@ -157,12 +157,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command try { Shoppage = Integer.parseInt(args[2]); } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); + plugin.msg(player, lm.General_UseNumbers); return true; } } - Map ShopList = Residence.getShopSignUtilManager().getSortedShopList(); + Map ShopList = plugin.getShopSignUtilManager().getSortedShopList(); String separator = ChatColor.GOLD + ""; String simbol = "\u25AC"; @@ -171,11 +171,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command } int pagecount = (int) Math.ceil((double) ShopList.size() / (double) 10); if (page > pagecount || page < 1) { - Residence.msg(sender, lm.Shop_NoVotes); + plugin.msg(sender, lm.Shop_NoVotes); return true; } - Residence.msg(player, lm.Shop_ListTopLine, separator, Shoppage, pagecount, separator); + plugin.msg(player, lm.Shop_ListTopLine, separator, Shoppage, pagecount, separator); int start = Shoppage * 10 - 9; int end = Shoppage * 10 + 1; @@ -190,18 +190,18 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (position >= end) break; - Vote vote = Residence.getShopSignUtilManager().getAverageVote(one.getKey()); + Vote vote = plugin.getShopSignUtilManager().getAverageVote(one.getKey()); String votestat = ""; - if (Residence.getConfigManager().isOnlyLike()) { - votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListLiked, Residence.getShopSignUtilManager().getLikes(one.getKey())); + if (plugin.getConfigManager().isOnlyLike()) { + votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListLiked, plugin.getShopSignUtilManager().getLikes(one.getKey())); } else - votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListVoted, vote.getVote(), vote.getAmount()); - ClaimedResidence res = Residence.getResidenceManager().getByName(one.getKey()); - String owner = Residence.getResidenceManager().getByName(one.getKey()).getOwner(); - String message = Residence.msg(lm.Shop_List, i, one.getKey(), owner, votestat); + votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListVoted, vote.getVote(), vote.getAmount()); + ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); + String owner = plugin.getResidenceManager().getByName(one.getKey()).getOwner(); + String message = plugin.msg(lm.Shop_List, i, one.getKey(), owner, votestat); - String desc = res.getShopDesc() == null ? Residence.msg(lm.Shop_NoDesc) : Residence.msg( + String desc = res.getShopDesc() == null ? plugin.msg(lm.Shop_NoDesc) : plugin.msg( lm.Shop_Desc, ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); String prev = "[\"\",{\"text\":\"" + " " + message @@ -222,11 +222,11 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command Prevpage = page > 1 ? Prevpage : page; String prevCmd = "/res shop list " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + String prev = "[\"\",{\"text\":\"" + separator + " " + plugin.msg(lm.General_PrevInfoPage) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = "/res shop list " + NextPage; - String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + String next = " {\"text\":\"" + plugin.msg(lm.General_NextInfoPage) + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; @@ -238,12 +238,12 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (args.length == 2 && args[1].equalsIgnoreCase("DeleteBoard")) { if (!resadmin) { - Residence.msg(player, lm.General_AdminOnly); + plugin.msg(player, lm.General_AdminOnly); return true; } ShopListener.Delete.add(player.getName()); - Residence.msg(player, lm.Shop_DeleteBoard); + plugin.msg(player, lm.Shop_DeleteBoard); return true; } if (args.length > 2 && args[1].equalsIgnoreCase("setdesc")) { @@ -252,9 +252,9 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command String desc = ""; if (args.length >= 2) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - Residence.msg(player, lm.Residence_NotIn); + plugin.msg(player, lm.Residence_NotIn); return true; } for (int i = 2; i < args.length; i++) { @@ -268,23 +268,23 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command return true; if (!res.isOwner(player) && !resadmin) { - Residence.msg(player, lm.Residence_NonAdmin); + plugin.msg(player, lm.Residence_NonAdmin); return true; } res.setShopDesc(desc); - Residence.msg(player, lm.Shop_DescChange, ChatColor.translateAlternateColorCodes('&', desc)); + plugin.msg(player, lm.Shop_DescChange, ChatColor.translateAlternateColorCodes('&', desc)); return true; } if (args.length == 3 && args[1].equalsIgnoreCase("createboard")) { if (!resadmin) { - Residence.msg(player, lm.General_AdminOnly); + plugin.msg(player, lm.General_AdminOnly); return true; } - if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - Residence.msg(player, lm.Select_Points); + if (!plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + plugin.msg(player, lm.Select_Points); return true; } @@ -292,25 +292,30 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command try { place = Integer.parseInt(args[2]); } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); + plugin.msg(player, lm.General_UseNumbers); return true; } if (place < 1) place = 1; - CuboidArea cuboid = Residence.getSelectionManager().getSelectionCuboid(player); + CuboidArea cuboid = plugin.getSelectionManager().getSelectionCuboid(player); if (cuboid.getXSize() > 16 || cuboid.getYSize() > 16 || cuboid.getZSize() > 16) { - Residence.msg(player, lm.Shop_ToBigSelection); + plugin.msg(player, lm.Shop_ToBigSelection); return true; } - Location loc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); - Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); + if (cuboid.getXSize() != 1 || cuboid.getZSize() != 1) { + plugin.msg(player, lm.Shop_ToDeapSelection); + return true; + } + + Location loc1 = plugin.getSelectionManager().getPlayerLoc1(player.getName()); + Location loc2 = plugin.getSelectionManager().getPlayerLoc2(player.getName()); if (loc1.getBlockY() < loc2.getBlockY()) { - Residence.msg(player, lm.Shop_InvalidSelection); + plugin.msg(player, lm.Shop_InvalidSelection); return true; } @@ -319,16 +324,16 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command newTemp.setTopLoc(loc1); newTemp.setBottomLoc(loc2); - if (Residence.getShopSignUtilManager().exist(newTemp)) { - sender.sendMessage(Residence.msg(lm.Shop_BoardExist)); + if (plugin.getShopSignUtilManager().exist(newTemp)) { + sender.sendMessage(plugin.msg(lm.Shop_BoardExist)); return true; } - Residence.getShopSignUtilManager().addBoard(newTemp); - Residence.msg(player, lm.Shop_NewBoard); + plugin.getShopSignUtilManager().addBoard(newTemp); + plugin.msg(player, lm.Shop_NewBoard); - Residence.getShopSignUtilManager().BoardUpdate(); - Residence.getShopSignUtilManager().saveSigns(); + plugin.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().saveSigns(); return true; @@ -339,58 +344,58 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command ClaimedResidence res = null; if (args.length == 3) { - if (Residence.getConfigManager().isOnlyLike()) { + if (plugin.getConfigManager().isOnlyLike()) { - res = Residence.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[2]); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } - vote = Residence.getConfigManager().getVoteRangeTo(); + vote = plugin.getConfigManager().getVoteRangeTo(); } else { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - Residence.msg(player, lm.Residence_NotIn); + plugin.msg(player, lm.Residence_NotIn); return true; } try { vote = Integer.parseInt(args[2]); } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); + plugin.msg(player, lm.General_UseNumbers); return true; } } - } else if (args.length == 2 && Residence.getConfigManager().isOnlyLike()) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + } else if (args.length == 2 && plugin.getConfigManager().isOnlyLike()) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - Residence.msg(player, lm.Residence_NotIn); + plugin.msg(player, lm.Residence_NotIn); return true; } - vote = Residence.getConfigManager().getVoteRangeTo(); - } else if (args.length == 4 && !Residence.getConfigManager().isOnlyLike()) { - res = Residence.getResidenceManager().getByName(args[2]); + vote = plugin.getConfigManager().getVoteRangeTo(); + } else if (args.length == 4 && !plugin.getConfigManager().isOnlyLike()) { + res = plugin.getResidenceManager().getByName(args[2]); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } try { vote = Integer.parseInt(args[3]); } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); + plugin.msg(player, lm.General_UseNumbers); return true; } - } else if (args.length == 3 && !Residence.getConfigManager().isOnlyLike()) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); + } else if (args.length == 3 && !plugin.getConfigManager().isOnlyLike()) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } try { vote = Integer.parseInt(args[3]); } catch (Exception ex) { - Residence.msg(player, lm.General_UseNumbers); + plugin.msg(player, lm.General_UseNumbers); return true; } } else { @@ -400,28 +405,27 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command resName = res.getName(); if (!res.getPermissions().has("shop", false)) { - Residence.msg(player, lm.Shop_CantVote); + plugin.msg(player, lm.Shop_CantVote); return true; } - if (vote < Residence.getConfigManager().getVoteRangeFrom() || vote > Residence.getConfigManager().getVoteRangeTo()) { - Residence.msg(player, lm.Shop_VotedRange, Residence.getConfigManager().getVoteRangeFrom(), Residence - .getConfigManager().getVoteRangeTo()); + if (vote < plugin.getConfigManager().getVoteRangeFrom() || vote > plugin.getConfigManager().getVoteRangeTo()) { + plugin.msg(player, lm.Shop_VotedRange, plugin.getConfigManager().getVoteRangeFrom(), plugin.getConfigManager().getVoteRangeTo()); return true; } -// ConcurrentHashMap> VoteList = Residence.getShopSignUtilManager().GetAllVoteList(); +// ConcurrentHashMap> VoteList = plugin.getShopSignUtilManager().GetAllVoteList(); if (!res.GetShopVotes().isEmpty()) { List list = res.GetShopVotes(); boolean found = false; for (ShopVote OneVote : list) { if (OneVote.getName().equalsIgnoreCase(player.getName()) || OneVote.getUuid() != null && OneVote.getUuid() == player.getUniqueId()) { - if (Residence.getConfigManager().isOnlyLike()) { - Residence.msg(player, lm.Shop_AlreadyLiked, resName); + if (plugin.getConfigManager().isOnlyLike()) { + plugin.msg(player, lm.Shop_AlreadyLiked, resName); return true; } - Residence.msg(player, lm.Shop_VoteChanged, OneVote.getVote(), vote, resName); + plugin.msg(player, lm.Shop_VoteChanged, OneVote.getVote(), vote, resName); OneVote.setVote(vote); OneVote.setName(player.getName()); OneVote.setTime(System.currentTimeMillis()); @@ -432,21 +436,21 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command if (!found) { ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); list.add(newVote); - if (Residence.getConfigManager().isOnlyLike()) - Residence.msg(player, lm.Shop_Liked, resName); + if (plugin.getConfigManager().isOnlyLike()) + plugin.msg(player, lm.Shop_Liked, resName); else - Residence.msg(player, lm.Shop_Voted, vote, resName); + plugin.msg(player, lm.Shop_Voted, vote, resName); } } else { ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); res.addShopVote(newVote); - if (Residence.getConfigManager().isOnlyLike()) - Residence.msg(player, lm.Shop_Liked, resName); + if (plugin.getConfigManager().isOnlyLike()) + plugin.msg(player, lm.Shop_Liked, resName); else - Residence.msg(player, lm.Shop_Voted, vote, resName); + plugin.msg(player, lm.Shop_Voted, vote, resName); } - Residence.getShopSignUtilManager().saveShopVotes(); - Residence.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().saveShopVotes(); + plugin.getShopSignUtilManager().BoardUpdate(); return true; } return false; diff --git a/src/com/bekvon/bukkit/residence/commands/show.java b/src/com/bekvon/bukkit/residence/commands/show.java index 63f2d6810..dce1ecfab 100644 --- a/src/com/bekvon/bukkit/residence/commands/show.java +++ b/src/com/bekvon/bukkit/residence/commands/show.java @@ -1,53 +1,53 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.Visualizer; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class show implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 3300) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - ClaimedResidence res = null; - - if (args.length == 2) { - res = Residence.getResidenceManager().getByName(args[1]); - } else { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - } - - if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); - return true; - } - - Visualizer v = new Visualizer(player); - v.setAreas(res.getAreaArray()); - Residence.getSelectionManager().showBounds(player, v); - - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Show residence boundaries"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res show ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class show implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3300) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + ClaimedResidence res = null; + + if (args.length == 2) { + res = plugin.getResidenceManager().getByName(args[1]); + } else { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + } + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; + } + + Visualizer v = new Visualizer(player); + v.setAreas(res.getAreaArray()); + plugin.getSelectionManager().showBounds(player, v); + + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Show residence boundaries"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res show ")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/signconvert.java b/src/com/bekvon/bukkit/residence/commands/signconvert.java index d059a07ea..0ad22a340 100644 --- a/src/com/bekvon/bukkit/residence/commands/signconvert.java +++ b/src/com/bekvon/bukkit/residence/commands/signconvert.java @@ -1,41 +1,41 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class signconvert implements cmd { - - @Override - @CommandAnnotation(simple = false, priority = 5600) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - - if (args.length != 0) - return false; - - if (sender instanceof Player) { - Player player = (Player) sender; - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.getSignUtil().convertSigns(sender); - } else - Residence.msg(player, lm.General_NoPermission); - } else { - Residence.getSignUtil().convertSigns(sender); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Converts signs from ResidenceSign plugin"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res signconvert", "Will try to convert saved sign data from 3rd party plugin")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class signconvert implements cmd { + + @Override + @CommandAnnotation(simple = false, priority = 5600) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + + if (args.length != 0) + return false; + + if (sender instanceof Player) { + Player player = (Player) sender; + if (plugin.getPermissionManager().isResidenceAdmin(player)) { + plugin.getSignUtil().convertSigns(sender); + } else + plugin.msg(player, lm.General_NoPermission); + } else { + plugin.getSignUtil().convertSigns(sender); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Converts signs from ResidenceSign plugin"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res signconvert", "Will try to convert saved sign data from 3rd party plugin")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/signupdate.java b/src/com/bekvon/bukkit/residence/commands/signupdate.java index 20af35c5c..15e599308 100644 --- a/src/com/bekvon/bukkit/residence/commands/signupdate.java +++ b/src/com/bekvon/bukkit/residence/commands/signupdate.java @@ -1,35 +1,35 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class signupdate implements cmd { - - @Override - @CommandAnnotation(simple = false, priority = 5700) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (args.length == 1) { - if (!resadmin) { - Residence.msg(sender, lm.General_NoPermission); - return true; - } - int number = Residence.getSignUtil().updateAllSigns(); - Residence.msg(sender, lm.Sign_Updated, number); - return true; - } - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Updated residence signs"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res signupdate")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class signupdate implements cmd { + + @Override + @CommandAnnotation(simple = false, priority = 5700) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (args.length == 1) { + if (!resadmin) { + plugin.msg(sender, lm.General_NoPermission); + return true; + } + int number = plugin.getSignUtil().updateAllSigns(); + plugin.msg(sender, lm.Sign_Updated, number); + return true; + } + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Updated residence signs"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res signupdate")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java index 005d240dd..552e6d834 100644 --- a/src/com/bekvon/bukkit/residence/commands/sublist.java +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -1,56 +1,56 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class sublist implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 4100) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - if (args.length != 1 && args.length != 2 && args.length != 3) - return false; - - ClaimedResidence res; - if (args.length == 1) { - res = Residence.getResidenceManager().getByLoc(player.getLocation()); - } else { - res = Residence.getResidenceManager().getByName(args[1]); - } - if (res != null) { - res.printSubzoneList(player, page); - } else { - Residence.msg(player, lm.Invalid_Residence); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "List Residence Subzones"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res sublist ", "List subzones within a residence.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } - -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class sublist implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 4100) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + if (args.length != 1 && args.length != 2 && args.length != 3) + return false; + + ClaimedResidence res; + if (args.length == 1) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + } else { + res = plugin.getResidenceManager().getByName(args[1]); + } + if (res != null) { + res.printSubzoneList(player, page); + } else { + plugin.msg(player, lm.Invalid_Residence); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "List Residence Subzones"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res sublist ", "List subzones within a residence.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index 9a9482699..ef674c803 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -17,7 +17,7 @@ public class subzone implements cmd { @Override @CommandAnnotation(simple = true, priority = 2100) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { if (!(sender instanceof Player)) return false; @@ -28,34 +28,33 @@ public boolean perform(String[] args, boolean resadmin, Command command, Command String zname; String parent; if (args.length == 2) { - parent = Residence.getResidenceManager().getNameByLoc(player.getLocation()); + parent = plugin.getResidenceManager().getNameByLoc(player.getLocation()); zname = args[1]; } else { parent = args[1]; zname = args[2]; } - if (Residence.getWorldEdit() != null) { - if (Residence.getWorldEdit().getConfig().getInt("wand-item") == Residence.getConfigManager().getSelectionTooldID()) { - Residence.getSelectionManager().worldEdit(player); + if (plugin.getWorldEdit() != null) { + if (plugin.getWorldEdit().getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) { + plugin.getSelectionManager().worldEdit(player); } } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = Residence.getResidenceManager().getByName(parent); + if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + ClaimedResidence res = plugin.getResidenceManager().getByName(parent); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return true; } - if (!player.hasPermission("residence.create.subzone") && !resadmin) { - Residence.msg(player, lm.Subzone_CantCreate); - return false; + if (!resadmin && !plugin.hasPermission(player, "residence.create.subzone", lm.Subzone_CantCreate)) { + return true; } - res.addSubzone(player, Residence.getSelectionManager().getPlayerLoc1(player.getName()), Residence.getSelectionManager().getPlayerLoc2(player.getName()), + res.addSubzone(player, plugin.getSelectionManager().getPlayerLoc1(player.getName()), plugin.getSelectionManager().getPlayerLoc2(player.getName()), zname, resadmin); } else { - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); } return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index 75cdb861c..6b108f6cf 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -1,39 +1,39 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Material; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class tool implements cmd { - - @SuppressWarnings("deprecation") - @Override - @CommandAnnotation(simple = true, priority = 1600) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - Residence.msg(player, lm.General_Separator); - Residence.msg(player, lm.Select_Tool, Material.getMaterial(Residence.getConfigManager().getSelectionTooldID())); - Residence.msg(player, lm.General_InfoTool, Material.getMaterial(Residence.getConfigManager().getInfoToolID())); - Residence.msg(player, lm.General_Separator); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Shows residence selection and info tool names"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res tool")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class tool implements cmd { + + @SuppressWarnings("deprecation") + @Override + @CommandAnnotation(simple = true, priority = 1600) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + plugin.msg(player, lm.General_Separator); + plugin.msg(player, lm.Select_Tool, Material.getMaterial(plugin.getConfigManager().getSelectionTooldID())); + plugin.msg(player, lm.General_InfoTool, Material.getMaterial(plugin.getConfigManager().getInfoToolID())); + plugin.msg(player, lm.General_Separator); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Shows residence selection and info tool names"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res tool")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index 3228c5dcd..764458ed8 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -1,45 +1,45 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class tp implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 1400) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (args.length != 2) - return false; - - ClaimedResidence res = Residence.getResidenceManager().getByName(args[1]); - - if (res == null) { - Residence.msg(player, lm.Invalid_Residence); - return true; - } - res.tpToResidence(player, player, resadmin); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Teleport to a residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", - "Your permission group must also be allowed to teleport by the server admin.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class tp implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 1400) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 2) + return false; + + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + res.tpToResidence(player, player, resadmin); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Teleport to a residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", + "Your permission group must also be allowed to teleport by the server admin.")); + Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java index 4eba531f8..df56d490f 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java +++ b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java @@ -1,40 +1,40 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class tpconfirm implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 1500) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (args.length != 1) { - return false; - } - if (Residence.getTeleportMap().containsKey(player.getName())) { - Residence.getTeleportMap().get(player.getName()).tpToResidence(player, player, resadmin); - Residence.getTeleportMap().remove(player.getName()); - } else - Residence.msg(player, lm.General_NoTeleportConfirm); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Ignore unsafe teleportation warning"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res tpconfirm", "Teleports you to a residence, when teleportation is unsafe.")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class tpconfirm implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 1500) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + if (args.length != 1) { + return false; + } + if (plugin.getTeleportMap().containsKey(player.getName())) { + plugin.getTeleportMap().get(player.getName()).tpToResidence(player, player, resadmin); + plugin.getTeleportMap().remove(player.getName()); + } else + plugin.msg(player, lm.General_NoTeleportConfirm); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Ignore unsafe teleportation warning"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res tpconfirm", "Teleports you to a residence, when teleportation is unsafe.")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/tpset.java b/src/com/bekvon/bukkit/residence/commands/tpset.java index 801e39896..0bbe63604 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpset.java +++ b/src/com/bekvon/bukkit/residence/commands/tpset.java @@ -1,41 +1,41 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class tpset implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 200) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - res.setTpLoc(player, resadmin); - } else { - Residence.msg(player, lm.Invalid_Residence); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - // Main command - c.get(path + "Description", "Set the teleport location of a Residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res tpset", "This will set the teleport location for a residence to where your standing.", - "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence.")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class tpset implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 200) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) { + res.setTpLoc(player, resadmin); + } else { + plugin.msg(player, lm.Invalid_Residence); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + // Main command + c.get(path + "Description", "Set the teleport location of a Residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res tpset", "This will set the teleport location for a residence to where your standing.", + "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence.")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index a9725ae83..be7c41fd4 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -1,52 +1,52 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class unstuck implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 4000) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (args.length != 1) - return false; - - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (!group.hasUnstuckAccess()) { - Residence.msg(player, lm.General_NoPermission); - return true; - } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - Residence.msg(player, lm.Residence_NotIn); - } else { - Residence.msg(player, lm.General_Moved); - player.teleport(res.getOutsideFreeLoc(player.getLocation(), player)); - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Teleports outside of residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res unstuck")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class unstuck implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 4000) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 1) + return false; + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (!group.hasUnstuckAccess()) { + plugin.msg(player, lm.General_NoPermission); + return true; + } + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + plugin.msg(player, lm.Residence_NotIn); + } else { + plugin.msg(player, lm.General_Moved); + player.teleport(res.getOutsideFreeLoc(player.getLocation(), player)); + } + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Teleports outside of residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res unstuck")); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/version.java b/src/com/bekvon/bukkit/residence/commands/version.java index 107c151e5..a3afed688 100644 --- a/src/com/bekvon/bukkit/residence/commands/version.java +++ b/src/com/bekvon/bukkit/residence/commands/version.java @@ -1,45 +1,44 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; - -public class version implements cmd { - - @Override - @CommandAnnotation(simple = false, priority = 5900) - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender) { - sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + Residence - .getResidenceVersion()); - sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); - sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); - sender.sendMessage(ChatColor.GREEN + "Currently maintained by: " + ChatColor.YELLOW + "Zrips"); - String names = null; - for (String auth : Residence.getAuthors()) { - if (names == null) - names = auth; - else - names = names + ", " + auth; - } - sender.sendMessage(ChatColor.GREEN + "Authors: " + ChatColor.YELLOW + names); - sender.sendMessage(ChatColor.DARK_AQUA + "For a command list, and help, see the wiki:"); - sender.sendMessage(ChatColor.GREEN + "https://github.com/bekvon/Residence/wiki"); - sender.sendMessage(ChatColor.AQUA + "Visit the Spigot Resource page at:"); - sender.sendMessage(ChatColor.BLUE + "https://www.spigotmc.org/resources/residence.11480/"); - sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "how residence version"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res version")); - } -} +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; + +public class version implements cmd { + + @Override + @CommandAnnotation(simple = false, priority = 5900) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + sender.sendMessage(ChatColor.GRAY + "------------------------------------"); + sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + plugin.getResidenceVersion()); + sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); + sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); + sender.sendMessage(ChatColor.GREEN + "Currently maintained by: " + ChatColor.YELLOW + "Zrips"); + String names = null; + for (String auth : Residence.getAuthors()) { + if (names == null) + names = auth; + else + names = names + ", " + auth; + } + sender.sendMessage(ChatColor.GREEN + "Authors: " + ChatColor.YELLOW + names); + sender.sendMessage(ChatColor.DARK_AQUA + "For a command list, and help, see the wiki:"); + sender.sendMessage(ChatColor.GREEN + "https://github.com/bekvon/Residence/wiki"); + sender.sendMessage(ChatColor.AQUA + "Visit the Spigot Resource page at:"); + sender.sendMessage(ChatColor.BLUE + "https://www.spigotmc.org/resources/residence.11480/"); + sender.sendMessage(ChatColor.GRAY + "------------------------------------"); + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "how residence version"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res version")); + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index 3dd9ebf2e..3debeb99e 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -86,7 +86,7 @@ public void updateGroup(String world, boolean force) { } if (finalGroup == null || !Residence.getPermissionManager().getGroups().containsValue(finalGroup)) { - this.groups.put(world, Residence.getConfigManager().getDefaultGroup().toLowerCase()); + this.groups.put(world, Residence.getInstance().getConfigManager().getDefaultGroup().toLowerCase()); } else { this.groups.put(world, finalGroup.getGroupName()); } @@ -95,7 +95,7 @@ public void updateGroup(String world, boolean force) { private PermissionGroup getPermissionGroup() { if (this.player == null) this.player = Bukkit.getPlayer(playerName); - PermissionGroup group = Residence.getPermissionManager().getGroupByName(Residence.getConfigManager().getDefaultGroup()); + PermissionGroup group = Residence.getPermissionManager().getGroupByName(Residence.getInstance().getConfigManager().getDefaultGroup()); for (Entry one : Residence.getPermissionManager().getGroups().entrySet()) { if (player != null) { if (this.player.hasPermission("residence.group." + one.getKey())) @@ -103,7 +103,7 @@ private PermissionGroup getPermissionGroup() { } else { OfflinePlayer offlineP = Residence.getOfflinePlayer(playerName); if (offlineP != null) - if (ResidenceVaultAdapter.hasPermission(offlineP, "residence.group." + one.getKey(), Residence.getConfigManager().getDefaultWorld())) + if (ResidenceVaultAdapter.hasPermission(offlineP, "residence.group." + one.getKey(), Residence.getInstance().getConfigManager().getDefaultWorld())) group = one.getValue(); } } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 20ca64828..49ad961b2 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -65,8 +65,8 @@ public ClaimedResidence getMainResidence() { return mainResidence; } } - for (String one : Residence.getRentManager().getRentedLands(this.userName)) { - ClaimedResidence res = Residence.getResidenceManager().getByName(one); + for (String one : Residence.getInstance().getRentManager().getRentedLands(this.userName)) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByName(one); if (res != null) { mainResidence = res; return mainResidence; @@ -92,25 +92,25 @@ public void RecalculatePermissions() { public void recountMaxRes() { if (this.group != null) this.maxRes = this.group.getMaxZones(); - for (int i = 1; i <= Residence.getConfigManager().getMaxResCount(); i++) { + for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxResCount(); i++) { if (player != null && player.isOnline()) { if (this.player.hasPermission("residence.max.res." + i)) this.maxRes = i; } else if (ofPlayer != null) { - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res." + i, Residence.getConfigManager().getDefaultWorld())) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res." + i, Residence.getInstance().getConfigManager().getDefaultWorld())) this.maxRes = i; } } } public void recountMaxRents() { - for (int i = 1; i <= Residence.getConfigManager().getMaxRentCount(); i++) { + for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxRentCount(); i++) { if (player != null) { if (this.player.isPermissionSet("residence.max.rents." + i)) this.maxRents = i; } else { if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.rents." + i, Residence.getConfigManager().getDefaultWorld())) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.rents." + i, Residence.getInstance().getConfigManager().getDefaultWorld())) this.maxRents = i; } } @@ -126,13 +126,13 @@ public int getMaxRents() { } public void recountMaxSubzones() { - for (int i = 1; i <= Residence.getConfigManager().getMaxSubzonesCount(); i++) { + for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxSubzonesCount(); i++) { if (player != null) { if (this.player.isPermissionSet("residence.max.subzones." + i)) this.maxSubzones = i; } else { if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzones." + i, Residence.getConfigManager().getDefaultWorld())) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzones." + i, Residence.getInstance().getConfigManager().getDefaultWorld())) this.maxSubzones = i; } } @@ -148,13 +148,13 @@ public int getMaxSubzones() { } public void recountMaxSubzoneDepth() { - for (int i = 1; i <= Residence.getConfigManager().getMaxSubzoneDepthCount(); i++) { + for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxSubzoneDepthCount(); i++) { if (player != null) { if (this.player.isPermissionSet("residence.max.subzonedepth." + i)) this.maxSubzoneDepth = i; } else { if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzonedepth." + i, Residence.getConfigManager().getDefaultWorld())) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzonedepth." + i, Residence.getInstance().getConfigManager().getDefaultWorld())) this.maxSubzoneDepth = i; } } @@ -171,7 +171,7 @@ public int getMaxSubzoneDepth() { public int getMaxRes() { Residence.getPermissionManager().updateGroupNameForPlayer(this.userName, this.player != null && this.player.isOnline() ? this.player.getPlayer().getLocation() - .getWorld().getName() : Residence.getConfigManager().getDefaultWorld(), true); + .getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), true); recountMaxRes(); PermissionGroup g = getGroup(); if (this.maxRes < g.getMaxZones()) { @@ -181,7 +181,7 @@ public int getMaxRes() { } public PermissionGroup getGroup() { - return getGroup(this.player != null ? player.getWorld().getName() : Residence.getConfigManager().getDefaultWorld()); + return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld()); } public PermissionGroup getGroup(String world) { @@ -192,7 +192,7 @@ public PermissionGroup getGroup(String world) { public void recountRes() { if (this.userName != null) { - ResidenceManager m = Residence.getResidenceManager(); + ResidenceManager m = Residence.getInstance().getResidenceManager(); this.ResidenceList = m.getResidenceMapList(this.userName, true); } } diff --git a/src/com/bekvon/bukkit/residence/containers/cmd.java b/src/com/bekvon/bukkit/residence/containers/cmd.java index 24b20fb9e..d2e126d33 100644 --- a/src/com/bekvon/bukkit/residence/containers/cmd.java +++ b/src/com/bekvon/bukkit/residence/containers/cmd.java @@ -1,12 +1,14 @@ -package com.bekvon.bukkit.residence.containers; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -public interface cmd { - - public boolean perform(String[] args, boolean resadmin, Command command, CommandSender sender); - - public void getLocale(ConfigReader c, String path); - -} +package com.bekvon.bukkit.residence.containers; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.residence.Residence; + +public interface cmd { + + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender); + + public void getLocale(ConfigReader c, String path); + +} diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 3aa76f449..53bb44f16 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -332,6 +332,7 @@ public enum lm { Shop_IncorrectBoard("&cThis is not sign board, try performing command again and clicking correct sign"), Shop_InvalidSelection("&cLeft click with selection tool top left sign and then right click bottom right"), Shop_ToBigSelection("&cYour selection is too big, max allowed is 16 blocks"), + Shop_ToDeapSelection("&cYour selection is too deap, max allowed is 16x16x1 blocks"), Shop_VoteChanged("&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence"), Shop_Voted("&6You voted, and gave &e%1 &6votes to &e%2 &6residence"), Shop_Liked("&6You liked &e%1 &6residence"), diff --git a/src/com/bekvon/bukkit/residence/dynmap/AreaStyle.java b/src/com/bekvon/bukkit/residence/dynmap/AreaStyle.java index 2aafcd3a9..2b0a6b98b 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/AreaStyle.java +++ b/src/com/bekvon/bukkit/residence/dynmap/AreaStyle.java @@ -1,27 +1,27 @@ -package com.bekvon.bukkit.residence.dynmap; - -import com.bekvon.bukkit.residence.Residence; - -class AreaStyle { - String strokecolor; - String forrentstrokecolor; - String rentedstrokecolor; - String forsalestrokecolor; - double strokeopacity; - int strokeweight; - String fillcolor; - double fillopacity; - int y; - - AreaStyle() { - strokecolor = Residence.getConfigManager().DynMapBorderColor; - forrentstrokecolor = Residence.getConfigManager().DynMapFillForRent; - rentedstrokecolor = Residence.getConfigManager().DynMapFillRented; - forsalestrokecolor = Residence.getConfigManager().DynMapFillForSale; - strokeopacity = Residence.getConfigManager().DynMapBorderOpacity; - strokeweight = Residence.getConfigManager().DynMapBorderWeight; - fillcolor = Residence.getConfigManager().DynMapFillColor; - fillopacity = Residence.getConfigManager().DynMapFillOpacity; - y = 64; - } -} +package com.bekvon.bukkit.residence.dynmap; + +import com.bekvon.bukkit.residence.Residence; + +class AreaStyle { + String strokecolor; + String forrentstrokecolor; + String rentedstrokecolor; + String forsalestrokecolor; + double strokeopacity; + int strokeweight; + String fillcolor; + double fillopacity; + int y; + + AreaStyle() { + strokecolor = Residence.getInstance().getConfigManager().DynMapBorderColor; + forrentstrokecolor = Residence.getInstance().getConfigManager().DynMapFillForRent; + rentedstrokecolor = Residence.getInstance().getConfigManager().DynMapFillRented; + forsalestrokecolor = Residence.getInstance().getConfigManager().DynMapFillForSale; + strokeopacity = Residence.getInstance().getConfigManager().DynMapBorderOpacity; + strokeweight = Residence.getInstance().getConfigManager().DynMapBorderWeight; + fillcolor = Residence.getInstance().getConfigManager().DynMapFillColor; + fillopacity = Residence.getInstance().getConfigManager().DynMapFillOpacity; + y = 64; + } +} diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 2d9acc7f4..eb11344d7 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -1,323 +1,323 @@ -package com.bekvon.bukkit.residence.dynmap; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.ChatColor; -import org.dynmap.DynmapAPI; -import org.dynmap.markers.AreaMarker; -import org.dynmap.markers.MarkerAPI; -import org.dynmap.markers.MarkerSet; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.economy.TransactionManager; -import com.bekvon.bukkit.residence.economy.rent.RentManager; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.protection.ResidencePermissions; -import com.bekvon.bukkit.residence.utils.GetTime; - -public class DynMapManager { - Residence plugin; - - public DynmapAPI api; - MarkerAPI markerapi; - MarkerSet set; - private Map resareas = new HashMap(); - private int schedId = -1; - - public DynMapManager(Residence plugin) { - this.plugin = plugin; - } - - public MarkerSet getMarkerSet() { - return set; - } - - public void fireUpdateAdd(final ClaimedResidence res, final int deep) { - if (api == null || set == null) - return; - if (res == null) - return; - - if (schedId != -1) - Bukkit.getServer().getScheduler().cancelTask(schedId); - - schedId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { - @Override - public void run() { - schedId = -1; - - handleResidenceAdd(res.getName(), res, deep); - return; - } - }, 10L); - } - - public void fireUpdateRemove(final ClaimedResidence res, final int deep) { - if (api == null || set == null) - return; - if (res == null) - return; - - handleResidenceRemove(res.getName(), res, deep); - } - - private static String formatInfoWindow(String resid, ClaimedResidence res, String resName) { - if (res == null) - return null; - if (res.getName() == null) - return null; - if (res.getOwner() == null) - return null; - String v = - "
%regionname%
" - + ChatColor.stripColor(Residence.msg(lm.General_Owner, "")) + "%playerowners%
"; - - if (Residence.getConfigManager().DynMapShowFlags) - v += ChatColor.stripColor(Residence.msg(lm.General_ResidenceFlags, "")) + "
%flags%"; - v += "
"; - - if (Residence.getRentManager().isForRent(res.getName())) - v = "
" - + ChatColor.stripColor(Residence.msg(lm.Rentable_Land, "")) + "%regionname%
" - + ChatColor.stripColor(Residence.msg(lm.General_Owner, "")) + "%playerowners%
" - + ChatColor.stripColor(Residence.msg(lm.Residence_RentedBy, "")) + "%renter%
" - + ChatColor.stripColor(Residence.msg(lm.General_LandCost, "")) + "%rent%
" - + ChatColor.stripColor(Residence.msg(lm.Rent_Days, "")) + "%rentdays%
" - + ChatColor.stripColor(Residence.msg(lm.Rentable_AllowRenewing, "")) + "%renew%
" - + ChatColor.stripColor(Residence.msg(lm.Rent_Expire, "")) + "%expire%
"; - - if (Residence.getTransactionManager().isForSale(res.getName())) - v = "
" - + ChatColor.stripColor(Residence.msg(lm.Economy_LandForSale, " ")) - + "%regionname%
" - + ChatColor.stripColor(Residence.msg(lm.General_Owner, "")) + "%playerowners%
" - + ChatColor.stripColor(Residence.msg(lm.Economy_SellAmount, "")) + "%price%
"; - - v = v.replace("%regionname%", resName); - v = v.replace("%playerowners%", res.getOwner()); - String m = res.getEnterMessage(); - v = v.replace("%entermsg%", (m != null) ? m : ""); - m = res.getLeaveMessage(); - v = v.replace("%leavemsg%", (m != null) ? m : ""); - ResidencePermissions p = res.getPermissions(); - String flgs = ""; - - // remake - Map all = Residence.getPermissionManager().getAllFlags().getFlags(); - String[] FLAGS = new String[all.size()]; - int ii = 0; - for (Entry one : all.entrySet()) { - FLAGS[ii] = one.getKey(); - ii++; - } - - for (int i = 0; i < FLAGS.length; i++) { - if (p.isSet(FLAGS[i])) { - if (flgs.length() > 0) - flgs += "
"; - boolean f = p.has(FLAGS[i], false); - flgs += FLAGS[i] + ": " + f; - v = v.replace("%flag." + FLAGS[i] + "%", Boolean.toString(f)); - } else - v = v.replace("%flag." + FLAGS[i] + "%", ""); - } - v = v.replace("%flags%", flgs); - RentManager rentmgr = Residence.getRentManager(); - TransactionManager transmgr = Residence.getTransactionManager(); - - if (rentmgr.isForRent(res.getName())) { - boolean isrented = rentmgr.isRented(resid); - v = v.replace("%isrented%", Boolean.toString(isrented)); - String id = ""; - if (isrented) - id = rentmgr.getRentingPlayer(resid); - v = v.replace("%renter%", id); - - v = v.replace("%rent%", rentmgr.getCostOfRent(resid) + ""); - v = v.replace("%rentdays%", rentmgr.getRentDays(resid) + ""); - boolean renew = rentmgr.getRentableRepeatable(resid); - v = v.replace("%renew%", renew + ""); - String expire = ""; - if (isrented) { - long time = rentmgr.getRentedLand(resid).endTime; - if (time != 0L) - expire = GetTime.getTime(time); - } - v = v.replace("%expire%", expire); - } - - if (transmgr.isForSale(res.getName())) { - boolean forsale = transmgr.isForSale(resid); - v = v.replace("%isforsale%", Boolean.toString(transmgr.isForSale(resid))); - String price = ""; - if (forsale) - price = Integer.toString(transmgr.getSaleAmount(resid)); - v = v.replace("%price%", price); - } - - return v; - } - - private static boolean isVisible(String id, String worldname) { - List visible = Residence.getConfigManager().DynMapVisibleRegions; - List hidden = Residence.getConfigManager().DynMapHiddenRegions; - if (visible != null && visible.size() > 0) { - if ((visible.contains(id) == false) && (visible.contains("world:" + worldname) == false)) { - return false; - } - } - if (hidden != null && hidden.size() > 0) { - if (hidden.contains(id) || hidden.contains("world:" + worldname)) - return false; - } - return true; - } - - private static void addStyle(String resid, AreaMarker m) { - AreaStyle as = new AreaStyle(); - int sc = 0xFF0000; - int fc = 0xFF0000; - try { - sc = Integer.parseInt(as.strokecolor.substring(1), 16); - if (Residence.getRentManager().isForRent(resid) && !Residence.getRentManager().isRented(resid)) - fc = Integer.parseInt(as.forrentstrokecolor.substring(1), 16); - else if (Residence.getRentManager().isForRent(resid) && Residence.getRentManager().isRented(resid)) - fc = Integer.parseInt(as.rentedstrokecolor.substring(1), 16); - else if (Residence.getTransactionManager().isForSale(resid)) - fc = Integer.parseInt(as.forsalestrokecolor.substring(1), 16); - else - fc = Integer.parseInt(as.fillcolor.substring(1), 16); - } catch (NumberFormatException nfx) { - } - m.setLineStyle(as.strokeweight, as.strokeopacity, sc); - m.setFillStyle(as.fillopacity, fc); - m.setRangeY(as.y, as.y); - } - - private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { - - if (res == null) - return; - - boolean hidden = res.getPermissions().has("hidden", false); - if (hidden && Residence.getConfigManager().DynMapHideHidden) { - fireUpdateRemove(res, depth); - return; - } - - for (Entry oneArea : res.getAreaMap().entrySet()) { - - String id = oneArea.getKey() + "." + resid; - - String name = res.getName(); - double[] x = new double[2]; - double[] z = new double[2]; - - String resName = res.getName(); - - if (res.getAreaMap().size() > 1) { - resName = res.getName() + " (" + oneArea.getKey() + ")"; - } - - String desc = formatInfoWindow(resid, res, resName); - - if (!isVisible(resid, res.getWorld())) - return; - - Location l0 = oneArea.getValue().getLowLoc(); - Location l1 = oneArea.getValue().getHighLoc(); - - x[0] = l0.getX(); - z[0] = l0.getZ(); - x[1] = l1.getX() + 1.0; - z[1] = l1.getZ() + 1.0; - - AreaMarker marker = null; - - if (resareas.containsKey(id)) { - marker = resareas.get(id); - resareas.remove(id); - marker.deleteMarker(); - } - - marker = set.createAreaMarker(id, name, true, res.getWorld(), x, z, false); - if (marker == null) - return; - - if (Residence.getConfigManager().DynMapLayer3dRegions) - marker.setRangeY(Math.min(l0.getY(), l1.getY()), Math.max(l0.getY(), l1.getY())); - - marker.setDescription(desc); - addStyle(resid, marker); - resareas.put(id, marker); - - if (depth <= Residence.getConfigManager().DynMapLayerSubZoneDepth) { - List subids = res.getSubzones(); - for (ClaimedResidence one : subids) { - handleResidenceAdd(one.getName(), one, depth + 1); - } - } - } - } - - public void handleResidenceRemove(String resid, ClaimedResidence res, int depth) { - - if (resid == null) - return; - if (res == null) - return; - - for (Entry oneArea : res.getAreaMap().entrySet()) { - String id = oneArea.getKey() + "." + resid; - if (resareas.containsKey(id)) { - AreaMarker marker = resareas.remove(id); - marker.deleteMarker(); - } - if (depth <= Residence.getConfigManager().DynMapLayerSubZoneDepth + 1) { - List subids = res.getSubzones(); - for (ClaimedResidence one : subids) { - handleResidenceRemove(one.getName(), one, depth + 1); - } - } - } - } - - public void activate() { - markerapi = api.getMarkerAPI(); - if (markerapi == null) { - Bukkit.getConsoleSender().sendMessage("[Residence] Error loading dynmap marker API!"); - return; - } - - if (set != null) { - set.deleteMarkerSet(); - set = null; - } - set = markerapi.getMarkerSet("residence.markerset"); - if (set == null) - set = markerapi.createMarkerSet("residence.markerset", "Residence", null, false); - else - set.setMarkerSetLabel("Residence"); - - if (set == null) { - Bukkit.getConsoleSender().sendMessage("Error creating marker set"); - return; - } - set.setLayerPriority(1); - set.setHideByDefault(false); - - Bukkit.getConsoleSender().sendMessage("[Residence] DynMap residence activated!"); - - for (Entry one : Residence.getResidenceManager().getResidences().entrySet()) { - Residence.getDynManager().fireUpdateAdd(one.getValue(), one.getValue().getSubzoneDeep()); - handleResidenceAdd(one.getValue().getName(), one.getValue(), one.getValue().getSubzoneDeep()); - } - } -} +package com.bekvon.bukkit.residence.dynmap; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.ChatColor; +import org.dynmap.DynmapAPI; +import org.dynmap.markers.AreaMarker; +import org.dynmap.markers.MarkerAPI; +import org.dynmap.markers.MarkerSet; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.economy.TransactionManager; +import com.bekvon.bukkit.residence.economy.rent.RentManager; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.protection.ResidencePermissions; +import com.bekvon.bukkit.residence.utils.GetTime; + +public class DynMapManager { + Residence plugin; + + public DynmapAPI api; + MarkerAPI markerapi; + MarkerSet set; + private Map resareas = new HashMap(); + private int schedId = -1; + + public DynMapManager(Residence plugin) { + this.plugin = plugin; + } + + public MarkerSet getMarkerSet() { + return set; + } + + public void fireUpdateAdd(final ClaimedResidence res, final int deep) { + if (api == null || set == null) + return; + if (res == null) + return; + + if (schedId != -1) + Bukkit.getServer().getScheduler().cancelTask(schedId); + + schedId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + schedId = -1; + + handleResidenceAdd(res.getName(), res, deep); + return; + } + }, 10L); + } + + public void fireUpdateRemove(final ClaimedResidence res, final int deep) { + if (api == null || set == null) + return; + if (res == null) + return; + + handleResidenceRemove(res.getName(), res, deep); + } + + private String formatInfoWindow(String resid, ClaimedResidence res, String resName) { + if (res == null) + return null; + if (res.getName() == null) + return null; + if (res.getOwner() == null) + return null; + String v = + "
%regionname%
" + + ChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
"; + + if (plugin.getConfigManager().DynMapShowFlags) + v += ChatColor.stripColor(plugin.msg(lm.General_ResidenceFlags, "")) + "
%flags%"; + v += "
"; + + if (plugin.getRentManager().isForRent(res.getName())) + v = "
" + + ChatColor.stripColor(plugin.msg(lm.Rentable_Land, "")) + "%regionname%
" + + ChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" + + ChatColor.stripColor(plugin.msg(lm.Residence_RentedBy, "")) + "%renter%
" + + ChatColor.stripColor(plugin.msg(lm.General_LandCost, "")) + "%rent%
" + + ChatColor.stripColor(plugin.msg(lm.Rent_Days, "")) + "%rentdays%
" + + ChatColor.stripColor(plugin.msg(lm.Rentable_AllowRenewing, "")) + "%renew%
" + + ChatColor.stripColor(plugin.msg(lm.Rent_Expire, "")) + "%expire%
"; + + if (plugin.getTransactionManager().isForSale(res.getName())) + v = "
" + + ChatColor.stripColor(plugin.msg(lm.Economy_LandForSale, " ")) + + "%regionname%
" + + ChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" + + ChatColor.stripColor(plugin.msg(lm.Economy_SellAmount, "")) + "%price%
"; + + v = v.replace("%regionname%", resName); + v = v.replace("%playerowners%", res.getOwner()); + String m = res.getEnterMessage(); + v = v.replace("%entermsg%", (m != null) ? m : ""); + m = res.getLeaveMessage(); + v = v.replace("%leavemsg%", (m != null) ? m : ""); + ResidencePermissions p = res.getPermissions(); + String flgs = ""; + + // remake + Map all = plugin.getPermissionManager().getAllFlags().getFlags(); + String[] FLAGS = new String[all.size()]; + int ii = 0; + for (Entry one : all.entrySet()) { + FLAGS[ii] = one.getKey(); + ii++; + } + + for (int i = 0; i < FLAGS.length; i++) { + if (p.isSet(FLAGS[i])) { + if (flgs.length() > 0) + flgs += "
"; + boolean f = p.has(FLAGS[i], false); + flgs += FLAGS[i] + ": " + f; + v = v.replace("%flag." + FLAGS[i] + "%", Boolean.toString(f)); + } else + v = v.replace("%flag." + FLAGS[i] + "%", ""); + } + v = v.replace("%flags%", flgs); + RentManager rentmgr = plugin.getRentManager(); + TransactionManager transmgr = plugin.getTransactionManager(); + + if (rentmgr.isForRent(res.getName())) { + boolean isrented = rentmgr.isRented(resid); + v = v.replace("%isrented%", Boolean.toString(isrented)); + String id = ""; + if (isrented) + id = rentmgr.getRentingPlayer(resid); + v = v.replace("%renter%", id); + + v = v.replace("%rent%", rentmgr.getCostOfRent(resid) + ""); + v = v.replace("%rentdays%", rentmgr.getRentDays(resid) + ""); + boolean renew = rentmgr.getRentableRepeatable(resid); + v = v.replace("%renew%", renew + ""); + String expire = ""; + if (isrented) { + long time = rentmgr.getRentedLand(resid).endTime; + if (time != 0L) + expire = GetTime.getTime(time); + } + v = v.replace("%expire%", expire); + } + + if (transmgr.isForSale(res.getName())) { + boolean forsale = transmgr.isForSale(resid); + v = v.replace("%isforsale%", Boolean.toString(transmgr.isForSale(resid))); + String price = ""; + if (forsale) + price = Integer.toString(transmgr.getSaleAmount(resid)); + v = v.replace("%price%", price); + } + + return v; + } + + private boolean isVisible(String id, String worldname) { + List visible = plugin.getConfigManager().DynMapVisibleRegions; + List hidden = plugin.getConfigManager().DynMapHiddenRegions; + if (visible != null && visible.size() > 0) { + if ((visible.contains(id) == false) && (visible.contains("world:" + worldname) == false)) { + return false; + } + } + if (hidden != null && hidden.size() > 0) { + if (hidden.contains(id) || hidden.contains("world:" + worldname)) + return false; + } + return true; + } + + private void addStyle(String resid, AreaMarker m) { + AreaStyle as = new AreaStyle(); + int sc = 0xFF0000; + int fc = 0xFF0000; + try { + sc = Integer.parseInt(as.strokecolor.substring(1), 16); + if (plugin.getRentManager().isForRent(resid) && !plugin.getRentManager().isRented(resid)) + fc = Integer.parseInt(as.forrentstrokecolor.substring(1), 16); + else if (plugin.getRentManager().isForRent(resid) && plugin.getRentManager().isRented(resid)) + fc = Integer.parseInt(as.rentedstrokecolor.substring(1), 16); + else if (plugin.getTransactionManager().isForSale(resid)) + fc = Integer.parseInt(as.forsalestrokecolor.substring(1), 16); + else + fc = Integer.parseInt(as.fillcolor.substring(1), 16); + } catch (NumberFormatException nfx) { + } + m.setLineStyle(as.strokeweight, as.strokeopacity, sc); + m.setFillStyle(as.fillopacity, fc); + m.setRangeY(as.y, as.y); + } + + private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { + + if (res == null) + return; + + boolean hidden = res.getPermissions().has("hidden", false); + if (hidden && plugin.getConfigManager().DynMapHideHidden) { + fireUpdateRemove(res, depth); + return; + } + + for (Entry oneArea : res.getAreaMap().entrySet()) { + + String id = oneArea.getKey() + "." + resid; + + String name = res.getName(); + double[] x = new double[2]; + double[] z = new double[2]; + + String resName = res.getName(); + + if (res.getAreaMap().size() > 1) { + resName = res.getName() + " (" + oneArea.getKey() + ")"; + } + + String desc = formatInfoWindow(resid, res, resName); + + if (!isVisible(resid, res.getWorld())) + return; + + Location l0 = oneArea.getValue().getLowLoc(); + Location l1 = oneArea.getValue().getHighLoc(); + + x[0] = l0.getX(); + z[0] = l0.getZ(); + x[1] = l1.getX() + 1.0; + z[1] = l1.getZ() + 1.0; + + AreaMarker marker = null; + + if (resareas.containsKey(id)) { + marker = resareas.get(id); + resareas.remove(id); + marker.deleteMarker(); + } + + marker = set.createAreaMarker(id, name, true, res.getWorld(), x, z, false); + if (marker == null) + return; + + if (plugin.getConfigManager().DynMapLayer3dRegions) + marker.setRangeY(Math.min(l0.getY(), l1.getY()), Math.max(l0.getY(), l1.getY())); + + marker.setDescription(desc); + addStyle(resid, marker); + resareas.put(id, marker); + + if (depth <= plugin.getConfigManager().DynMapLayerSubZoneDepth) { + List subids = res.getSubzones(); + for (ClaimedResidence one : subids) { + handleResidenceAdd(one.getName(), one, depth + 1); + } + } + } + } + + public void handleResidenceRemove(String resid, ClaimedResidence res, int depth) { + + if (resid == null) + return; + if (res == null) + return; + + for (Entry oneArea : res.getAreaMap().entrySet()) { + String id = oneArea.getKey() + "." + resid; + if (resareas.containsKey(id)) { + AreaMarker marker = resareas.remove(id); + marker.deleteMarker(); + } + if (depth <= plugin.getConfigManager().DynMapLayerSubZoneDepth + 1) { + List subids = res.getSubzones(); + for (ClaimedResidence one : subids) { + handleResidenceRemove(one.getName(), one, depth + 1); + } + } + } + } + + public void activate() { + markerapi = api.getMarkerAPI(); + if (markerapi == null) { + Bukkit.getConsoleSender().sendMessage("[Residence] Error loading dynmap marker API!"); + return; + } + + if (set != null) { + set.deleteMarkerSet(); + set = null; + } + set = markerapi.getMarkerSet("residence.markerset"); + if (set == null) + set = markerapi.createMarkerSet("residence.markerset", "Residence", null, false); + else + set.setMarkerSetLabel("Residence"); + + if (set == null) { + Bukkit.getConsoleSender().sendMessage("Error creating marker set"); + return; + } + set.setLayerPriority(1); + set.setHideByDefault(false); + + Bukkit.getConsoleSender().sendMessage("[Residence] DynMap residence activated!"); + + for (Entry one : plugin.getResidenceManager().getResidences().entrySet()) { + plugin.getDynManager().fireUpdateAdd(one.getValue(), one.getValue().getSubzoneDeep()); + handleResidenceAdd(one.getValue().getName(), one.getValue(), one.getValue().getSubzoneDeep()); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index a4ac13074..69309746c 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -44,38 +44,38 @@ public void subtract(int amount) { } public void withdraw(CommandSender sender, int amount, boolean resadmin) { - if (!Residence.getConfigManager().enableEconomy()) { - Residence.msg(sender, lm.Economy_MarketDisabled); + if (!Residence.getInstance().getConfigManager().enableEconomy()) { + Residence.getInstance().msg(sender, lm.Economy_MarketDisabled); } if (!resadmin && !res.getPermissions().playerHas(sender.getName(), Flags.bank, FlagCombo.OnlyTrue)) { - Residence.msg(sender, lm.Bank_NoAccess); + Residence.getInstance().msg(sender, lm.Bank_NoAccess); return; } if (!hasEnough(amount)) { - Residence.msg(sender, lm.Bank_NoMoney); + Residence.getInstance().msg(sender, lm.Bank_NoMoney); return; } - if (sender instanceof Player && Residence.getEconomyManager().add(sender.getName(), amount) || !(sender instanceof Player)) { + if (sender instanceof Player && Residence.getInstance().getEconomyManager().add(sender.getName(), amount) || !(sender instanceof Player)) { this.subtract(amount); - Residence.msg(sender, lm.Bank_Withdraw, String.format("%d", amount)); + Residence.getInstance().msg(sender, lm.Bank_Withdraw, String.format("%d", amount)); } } public void deposit(CommandSender sender, int amount, boolean resadmin) { - if (!Residence.getConfigManager().enableEconomy()) { - Residence.msg(sender, lm.Economy_MarketDisabled); + if (!Residence.getInstance().getConfigManager().enableEconomy()) { + Residence.getInstance().msg(sender, lm.Economy_MarketDisabled); } if (!resadmin && !res.getPermissions().playerHas(sender.getName(), Flags.bank, FlagCombo.OnlyTrue)) { - Residence.msg(sender, lm.Bank_NoAccess); + Residence.getInstance().msg(sender, lm.Bank_NoAccess); return; } - if (sender instanceof Player && !Residence.getEconomyManager().canAfford(sender.getName(), amount)) { - Residence.msg(sender, lm.Economy_NotEnoughMoney); + if (sender instanceof Player && !Residence.getInstance().getEconomyManager().canAfford(sender.getName(), amount)) { + Residence.getInstance().msg(sender, lm.Economy_NotEnoughMoney); return; } - if (sender instanceof Player && Residence.getEconomyManager().subtract(sender.getName(), amount) || !(sender instanceof Player)) { + if (sender instanceof Player && Residence.getInstance().getEconomyManager().subtract(sender.getName(), amount) || !(sender instanceof Player)) { this.add(amount); - Residence.msg(sender, lm.Bank_Deposit, String.format("%d", amount)); + Residence.getInstance().msg(sender, lm.Bank_Deposit, String.format("%d", amount)); } } } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 896282c27..eb75a59db 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -24,116 +24,118 @@ public class TransactionManager implements MarketBuyInterface { private Set sellAmount; + private Residence plugin; - public TransactionManager() { + public TransactionManager(Residence plugin) { + this.plugin = plugin; sellAmount = new HashSet(); } - public static boolean chargeEconomyMoney(Player player, double chargeamount) { - EconomyInterface econ = Residence.getEconomyManager(); + public boolean chargeEconomyMoney(Player player, double chargeamount) { + EconomyInterface econ = plugin.getEconomyManager(); if (econ == null) { - Residence.msg(player, lm.Economy_MarketDisabled); + plugin.msg(player, lm.Economy_MarketDisabled); return false; } if (!econ.canAfford(player.getName(), chargeamount)) { - Residence.msg(player, lm.Economy_NotEnoughMoney); + plugin.msg(player, lm.Economy_NotEnoughMoney); return false; } econ.subtract(player.getName(), chargeamount); try { - Residence.msg(player, lm.Economy_MoneyCharged, chargeamount, econ.getName()); + plugin.msg(player, lm.Economy_MoneyCharged, chargeamount, econ.getName()); } catch (Exception e) { } return true; } - public static boolean giveEconomyMoney(Player player, int amount) { + public boolean giveEconomyMoney(Player player, int amount) { if (player == null) return false; if (amount == 0) return true; - EconomyInterface econ = Residence.getEconomyManager(); + EconomyInterface econ = plugin.getEconomyManager(); if (econ == null) { - Residence.msg(player, lm.Economy_MarketDisabled); + plugin.msg(player, lm.Economy_MarketDisabled); return false; } econ.add(player.getName(), amount); - Residence.msg(player, lm.Economy_MoneyAdded, String.format("%d", amount), econ.getName()); + plugin.msg(player, lm.Economy_MoneyAdded, String.format("%d", amount), econ.getName()); return true; } public void putForSale(String areaname, Player player, int amount, boolean resadmin) { - ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); putForSale(res, player, amount, resadmin); } public void putForSale(ClaimedResidence res, Player player, int amount, boolean resadmin) { if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } - if (Residence.getConfigManager().enabledRentSystem()) { + if (plugin.getConfigManager().enabledRentSystem()) { if (!resadmin) { if (res.isForRent()) { - Residence.msg(player, lm.Economy_RentSellFail); + plugin.msg(player, lm.Economy_RentSellFail); return; } if (res.isSubzoneForRent()) { - Residence.msg(player, lm.Economy_SubzoneRentSellFail); + plugin.msg(player, lm.Economy_SubzoneRentSellFail); return; } if (res.isParentForRent()) { - Residence.msg(player, lm.Economy_ParentRentSellFail); + plugin.msg(player, lm.Economy_ParentRentSellFail); return; } } } - if (!Residence.getConfigManager().isSellSubzone()) { + if (!plugin.getConfigManager().isSellSubzone()) { if (res.isSubzone()) { - Residence.msg(player, lm.Economy_SubzoneSellFail); + plugin.msg(player, lm.Economy_SubzoneSellFail); return; } } if (!resadmin) { - if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { - Residence.msg(player, lm.Economy_MarketDisabled); + if (!plugin.getConfigManager().enableEconomy() || plugin.getEconomyManager() == null) { + plugin.msg(player, lm.Economy_MarketDisabled); return; } - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - boolean cansell = rPlayer.getGroup().canSellLand() || player.hasPermission("residence.sell"); - if (!cansell && !resadmin) { - Residence.msg(player, lm.General_NoPermission); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + + if (!resadmin && !(rPlayer.getGroup().canSellLand() || player.hasPermission("residence.sell"))) { + plugin.msg(player, lm.General_NoPermission); return; } if (amount <= 0) { - Residence.msg(player, lm.Invalid_Amount); + plugin.msg(player, lm.Invalid_Amount); return; } } if (!res.isOwner(player) && !resadmin) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return; } if (sellAmount.contains(res)) { - Residence.msg(player, lm.Economy_AlreadySellFail); + plugin.msg(player, lm.Economy_AlreadySellFail); return; } res.setSellPrice(amount); sellAmount.add(res); - Residence.getSignUtil().CheckSign(res); - Residence.msg(player, lm.Residence_ForSale, res.getName(), amount); + plugin.getSignUtil().CheckSign(res); + plugin.msg(player, lm.Residence_ForSale, res.getName(), amount); } @Override public boolean putForSale(String areaname, int amount) { - ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); return putForSale(res, amount); } @@ -141,7 +143,7 @@ public boolean putForSale(ClaimedResidence res, int amount) { if (res == null) return false; - if (Residence.getConfigManager().enabledRentSystem() && (res.isForRent() || res.isSubzoneForRent() || res.isParentForRent())) + if (plugin.getConfigManager().enabledRentSystem() && (res.isForRent() || res.isSubzoneForRent() || res.isParentForRent())) return false; if (sellAmount.contains(res)) @@ -154,39 +156,39 @@ public boolean putForSale(ClaimedResidence res, int amount) { @Override public void buyPlot(String areaname, Player player, boolean resadmin) { - ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); buyPlot(res, player, resadmin); } public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { if (res == null || !res.isForSell()) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (!resadmin) { - if (!Residence.getConfigManager().enableEconomy() || Residence.getEconomyManager() == null) { - Residence.msg(player, lm.Economy_MarketDisabled); + if (!plugin.getConfigManager().enableEconomy() || plugin.getEconomyManager() == null) { + plugin.msg(player, lm.Economy_MarketDisabled); return; } boolean canbuy = group.canBuyLand() || player.hasPermission("residence.buy"); if (!canbuy && !resadmin) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return; } } if (res.getPermissions().getOwner().equals(player.getName())) { - Residence.msg(player, lm.Economy_OwnerBuyFail); + plugin.msg(player, lm.Economy_OwnerBuyFail); return; } - if (Residence.getResidenceManager().getOwnedZoneCount(player.getName()) >= rPlayer.getMaxRes() && !resadmin) { - Residence.msg(player, lm.Residence_TooMany); + if (plugin.getResidenceManager().getOwnedZoneCount(player.getName()) >= rPlayer.getMaxRes() && !resadmin) { + plugin.msg(player, lm.Residence_TooMany); return; } - Server serv = Residence.getServ(); + Server serv = plugin.getServ(); int amount = res.getSellPrice(); if (!resadmin && !group.buyLandIgnoreLimits()) { @@ -194,21 +196,21 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { for (CuboidArea thisarea : areas) { if (!res.isSubzone() && !res.isSmallerThanMax(player, thisarea, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(player, thisarea, resadmin)) { - Residence.msg(player, lm.Residence_BuyTooBig); + plugin.msg(player, lm.Residence_BuyTooBig); return; } } } - EconomyInterface econ = Residence.getEconomyManager(); + EconomyInterface econ = plugin.getEconomyManager(); if (econ == null) { - Residence.msg(player, lm.Economy_MarketDisabled); + plugin.msg(player, lm.Economy_MarketDisabled); return; } String buyerName = player.getName(); String sellerName = res.getPermissions().getOwner(); - Player sellerNameFix = Residence.getServ().getPlayer(sellerName); + Player sellerNameFix = plugin.getServ().getPlayer(sellerName); if (sellerNameFix != null) { sellerName = sellerNameFix.getName(); } @@ -222,55 +224,55 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { res.getPermissions().applyDefaultFlags(); removeFromSale(res); - if (Residence.getConfigManager().isRemoveLwcOnBuy()) - Residence.getResidenceManager().removeLwcFromResidence(player, res); + if (plugin.getConfigManager().isRemoveLwcOnBuy()) + plugin.getResidenceManager().removeLwcFromResidence(player, res); - Residence.getSignUtil().CheckSign(res); + plugin.getSignUtil().CheckSign(res); Visualizer v = new Visualizer(player); v.setAreas(res); - Residence.getSelectionManager().showBounds(player, v); + plugin.getSelectionManager().showBounds(player, v); - Residence.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); - Residence.msg(player, lm.Residence_Bought, res.getResidenceName()); + plugin.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); + plugin.msg(player, lm.Residence_Bought, res.getResidenceName()); Player seller = serv.getPlayer(sellerName); if (seller != null && seller.isOnline()) { - seller.sendMessage(Residence.msg(lm.Residence_Buy, player.getName(), res.getResidenceName())); - seller.sendMessage(Residence.msg(lm.Economy_MoneyCredit, String.format("%d", amount), econ.getName())); + seller.sendMessage(plugin.msg(lm.Residence_Buy, player.getName(), res.getResidenceName())); + seller.sendMessage(plugin.msg(lm.Economy_MoneyCredit, String.format("%d", amount), econ.getName())); } } else { - Residence.msg(player, lm.Economy_NotEnoughMoney); + plugin.msg(player, lm.Economy_NotEnoughMoney); } } public void removeFromSale(Player player, String areaname, boolean resadmin) { - ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); removeFromSale(player, res, resadmin); } public void removeFromSale(Player player, ClaimedResidence res, boolean resadmin) { if (res == null) { - Residence.msg(player, lm.Invalid_Area); + plugin.msg(player, lm.Invalid_Area); return; } if (!res.isForSell()) { - Residence.msg(player, lm.Residence_NotForSale); + plugin.msg(player, lm.Residence_NotForSale); return; } if (res.isOwner(player) || resadmin) { removeFromSale(res); - Residence.getSignUtil().CheckSign(res); - Residence.msg(player, lm.Residence_StopSelling); + plugin.getSignUtil().CheckSign(res); + plugin.msg(player, lm.Residence_StopSelling); } else { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); } } @Override public void removeFromSale(String areaname) { - ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); removeFromSale(res); } @@ -278,12 +280,12 @@ public void removeFromSale(ClaimedResidence res) { if (res == null) return; sellAmount.remove(res); - Residence.getSignUtil().removeSign(res); + plugin.getSignUtil().removeSign(res); } @Override public boolean isForSale(String areaname) { - ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); return isForSale(res); } @@ -294,7 +296,7 @@ public boolean isForSale(ClaimedResidence res) { } public boolean viewSaleInfo(String areaname, Player player) { - ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); return viewSaleInfo(res, player); } @@ -307,22 +309,22 @@ public boolean viewSaleInfo(ClaimedResidence res, Player player) { if (!sellAmount.contains(res)) return false; - Residence.msg(player, lm.General_Separator); - Residence.msg(player, lm.Area_Name, res.getName()); - Residence.msg(player, lm.Economy_SellAmount, res.getSellPrice()); - if (Residence.getConfigManager().useLeases()) { - String etime = Residence.getLeaseManager().getExpireTime(res.getName()); + plugin.msg(player, lm.General_Separator); + plugin.msg(player, lm.Area_Name, res.getName()); + plugin.msg(player, lm.Economy_SellAmount, res.getSellPrice()); + if (plugin.getConfigManager().useLeases()) { + String etime = plugin.getLeaseManager().getExpireTime(res.getName()); if (etime != null) { - Residence.msg(player, lm.Economy_LeaseExpire, etime); + plugin.msg(player, lm.Economy_LeaseExpire, etime); } } - Residence.msg(player, lm.General_Separator); + plugin.msg(player, lm.General_Separator); return true; } public void printForSaleResidences(Player player, int page) { List toRemove = new ArrayList(); - Residence.msg(player, lm.Economy_LandForSale); + plugin.msg(player, lm.Economy_LandForSale); StringBuilder sbuild = new StringBuilder(); sbuild.append(ChatColor.GREEN); @@ -346,7 +348,7 @@ public void printForSaleResidences(Player player, int page) { toRemove.add(res); continue; } - Residence.msg(player, lm.Economy_SellList, z, res.getName(), res.getSellPrice(), res.getOwner()); + plugin.msg(player, lm.Economy_SellList, z, res.getName(), res.getSellPrice(), res.getOwner()); } for (ClaimedResidence one : toRemove) { @@ -368,11 +370,11 @@ public void printForSaleResidences(Player player, int page) { Prevpage = page > 1 ? Prevpage : page; String prevCmd = "/res market list sell " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + String prev = "[\"\",{\"text\":\"" + separator + " " + plugin.msg(lm.General_PrevInfoPage) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = "/res market list sell " + NextPage; - String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + String next = " {\"text\":\"" + plugin.msg(lm.General_NextInfoPage) + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; @@ -391,7 +393,7 @@ public void clearSales() { @Override public int getSaleAmount(String areaname) { - ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); return getSaleAmount(res); } @@ -406,7 +408,7 @@ public void load(Map root) { return; for (Entry one : root.entrySet()) { - ClaimedResidence res = Residence.getResidenceManager().getByName(one.getKey()); + ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); if (res == null) continue; res.setSellPrice(one.getValue()); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index bb45ca67d..e576b9fa7 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -30,15 +30,17 @@ public class RentManager implements MarketRentInterface { private Set rentedLand; private Set rentableLand; + private Residence plugin; - public RentManager() { + public RentManager(Residence plugin) { + this.plugin = plugin; rentedLand = new HashSet(); rentableLand = new HashSet(); } @Override public RentedLand getRentedLand(String landName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); return getRentedLand(res); } @@ -76,8 +78,8 @@ public List getRentedLands(String playername, boolean onlyHidden) { if (onlyHidden && !hidden) continue; - rentedLands.add(Residence.msg(lm.Residence_List, "", res.getName(), world) - + Residence.msg(lm.Rent_Rented)); + rentedLands.add(plugin.msg(lm.Residence_List, "", res.getName(), world) + + plugin.msg(lm.Rent_Rented)); } return rentedLands; } @@ -162,17 +164,17 @@ public List getRentedLandsList(String playername) { @Override public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean resadmin) { - setForRent(player, landName, amount, days, AllowRenewing, Residence.getConfigManager().isRentStayInMarket(), resadmin); + setForRent(player, landName, amount, days, AllowRenewing, plugin.getConfigManager().isRentStayInMarket(), resadmin); } @Override public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean resadmin) { - setForRent(player, landName, amount, days, AllowRenewing, StayInMarket, Residence.getConfigManager().isRentAllowAutoPay(), resadmin); + setForRent(player, landName, amount, days, AllowRenewing, StayInMarket, plugin.getConfigManager().isRentAllowAutoPay(), resadmin); } @Override public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean AllowAutoPay, boolean resadmin) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); setForRent(player, res, amount, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); } @@ -180,41 +182,41 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days boolean resadmin) { if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } - if (!Residence.getConfigManager().enabledRentSystem()) { - Residence.msg(player, lm.Economy_MarketDisabled); + if (!plugin.getConfigManager().enabledRentSystem()) { + plugin.msg(player, lm.Economy_MarketDisabled); return; } if (res.isForSell() && !resadmin) { - Residence.msg(player, lm.Economy_SellRentFail); + plugin.msg(player, lm.Economy_SellRentFail); return; } if (res.isParentForSell() && !resadmin) { - Residence.msg(player, lm.Economy_ParentSellRentFail); + plugin.msg(player, lm.Economy_ParentSellRentFail); return; } if (!resadmin) { if (!res.getPermissions().hasResidencePermission(player, true)) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return; } - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { - Residence.msg(player, lm.Residence_MaxRent); + plugin.msg(player, lm.Residence_MaxRent); return; } } if (!rentableLand.contains(res)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENTABLE); - Residence.getServ().getPluginManager().callEvent(revent); + plugin.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) return; RentableLand newrent = new RentableLand(); @@ -225,42 +227,42 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days newrent.AllowAutoPay = AllowAutoPay; res.setRentable(newrent); rentableLand.add(res); - Residence.msg(player, lm.Residence_ForRentSuccess, res.getResidenceName(), amount, days); + plugin.msg(player, lm.Residence_ForRentSuccess, res.getResidenceName(), amount, days); } else { - Residence.msg(player, lm.Residence_AlreadyRent); + plugin.msg(player, lm.Residence_AlreadyRent); } } @Override public void rent(Player player, String landName, boolean AutoPay, boolean resadmin) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); rent(player, res, AutoPay, resadmin); } @SuppressWarnings("deprecation") public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean resadmin) { if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } - if (!Residence.getConfigManager().enabledRentSystem()) { - Residence.msg(player, lm.Rent_Disabled); + if (!plugin.getConfigManager().enabledRentSystem()) { + plugin.msg(player, lm.Rent_Disabled); return; } if (res.isOwner(player)) { - Residence.msg(player, lm.Economy_OwnerRentFail); + plugin.msg(player, lm.Economy_OwnerRentFail); return; } - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); if (!resadmin && this.getRentCount(player.getName()) >= rPlayer.getMaxRents()) { - Residence.msg(player, lm.Residence_MaxRent); + plugin.msg(player, lm.Residence_MaxRent); return; } if (!res.isForRent()) { - Residence.msg(player, lm.Residence_NotForRent); + plugin.msg(player, lm.Residence_NotForRent); return; } if (res.isRented()) { @@ -270,18 +272,18 @@ public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean r RentableLand land = res.getRentable(); - if (Residence.getEconomyManager().canAfford(player.getName(), land.cost)) { + if (plugin.getEconomyManager().canAfford(player.getName(), land.cost)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); - Residence.getServ().getPluginManager().callEvent(revent); + plugin.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) return; if (!land.AllowAutoPay && AutoPay) { - Residence.msg(player, lm.Residence_CantAutoPay); + plugin.msg(player, lm.Residence_CantAutoPay); AutoPay = false; } - if (Residence.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { + if (plugin.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { RentedLand newrent = new RentedLand(); newrent.player = player.getName(); newrent.startTime = System.currentTimeMillis(); @@ -290,54 +292,54 @@ public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean r res.setRented(newrent); rentedLand.add(res); - Residence.getSignUtil().CheckSign(res); + plugin.getSignUtil().CheckSign(res); Visualizer v = new Visualizer(player); v.setAreas(res); - Residence.getSelectionManager().showBounds(player, v); + plugin.getSelectionManager().showBounds(player, v); res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); - Residence.msg(player, lm.Residence_RentSuccess, res.getName(), land.days); + plugin.msg(player, lm.Residence_RentSuccess, res.getName(), land.days); - if (Residence.getSchematicManager() != null && - Residence.getConfigManager().RestoreAfterRentEnds && - !Residence.getConfigManager().SchematicsSaveOnFlagChange && + if (plugin.getSchematicManager() != null && + plugin.getConfigManager().RestoreAfterRentEnds && + !plugin.getConfigManager().SchematicsSaveOnFlagChange && res.getPermissions().has("backup", true)) { - Residence.getSchematicManager().save(res); + plugin.getSchematicManager().save(res); } } else { player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); } } else { - Residence.msg(player, lm.Economy_NotEnoughMoney); + plugin.msg(player, lm.Economy_NotEnoughMoney); } } public void payRent(Player player, String landName, boolean resadmin) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); payRent(player, res, resadmin); } public void payRent(Player player, ClaimedResidence res, boolean resadmin) { if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } - if (!Residence.getConfigManager().enabledRentSystem()) { - Residence.msg(player, lm.Rent_Disabled); + if (!plugin.getConfigManager().enabledRentSystem()) { + plugin.msg(player, lm.Rent_Disabled); return; } if (!res.isForRent()) { - Residence.msg(player, lm.Residence_NotForRent); + plugin.msg(player, lm.Residence_NotForRent); return; } if (res.isRented() && !getRentingPlayer(res).equals(player.getName()) && !resadmin) { - Residence.msg(player, lm.Rent_NotByYou); + plugin.msg(player, lm.Rent_NotByYou); return; } @@ -345,67 +347,67 @@ public void payRent(Player player, ClaimedResidence res, boolean resadmin) { RentedLand rentedLand = res.getRentedLand(); if (rentedLand == null) { - Residence.msg(player, lm.Residence_NotRented); + plugin.msg(player, lm.Residence_NotRented); return; } if (!land.AllowRenewing) { - Residence.msg(player, lm.Rent_OneTime); + plugin.msg(player, lm.Rent_OneTime); return; } - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (!resadmin && group.getMaxRentDays() != -1 && msToDays((rentedLand.endTime - System.currentTimeMillis()) + daysToMs(land.days)) >= group.getMaxRentDays()) { - Residence.msg(player, lm.Rent_MaxRentDays, group.getMaxRentDays()); + plugin.msg(player, lm.Rent_MaxRentDays, group.getMaxRentDays()); return; } - if (Residence.getEconomyManager().canAfford(player.getName(), land.cost)) { + if (plugin.getEconomyManager().canAfford(player.getName(), land.cost)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); - Residence.getServ().getPluginManager().callEvent(revent); + plugin.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) return; - if (Residence.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { + if (plugin.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { rentedLand.endTime = rentedLand.endTime + daysToMs(land.days); - Residence.getSignUtil().CheckSign(res); + plugin.getSignUtil().CheckSign(res); Visualizer v = new Visualizer(player); v.setAreas(res); - Residence.getSelectionManager().showBounds(player, v); + plugin.getSelectionManager().showBounds(player, v); - Residence.msg(player, lm.Rent_Extended, land.days, res.getName()); - Residence.msg(player, lm.Rent_Expire, GetTime.getTime(rentedLand.endTime)); + plugin.msg(player, lm.Rent_Extended, land.days, res.getName()); + plugin.msg(player, lm.Rent_Expire, GetTime.getTime(rentedLand.endTime)); } else { player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); } } else { - Residence.msg(player, lm.Economy_NotEnoughMoney); + plugin.msg(player, lm.Economy_NotEnoughMoney); } } @Override public void unrent(Player player, String landName, boolean resadmin) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); unrent(player, res, resadmin); } public void unrent(Player player, ClaimedResidence res, boolean resadmin) { if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } RentedLand rent = res.getRentedLand(); if (rent == null) { - Residence.msg(player, lm.Residence_NotRented); + plugin.msg(player, lm.Residence_NotRented); return; } if (resadmin || rent.player.equals(player.getName()) || res.isOwner(player) && player.hasPermission("residence.market.evict")) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENTABLE); - Residence.getServ().getPluginManager().callEvent(revent); + plugin.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) return; @@ -418,21 +420,21 @@ public void unrent(Player player, ClaimedResidence res, boolean resadmin) { boolean backup = res.getPermissions().has("backup", false); - if (Residence.getConfigManager().isRemoveLwcOnUnrent()) - Residence.getResidenceManager().removeLwcFromResidence(player, res); + if (plugin.getConfigManager().isRemoveLwcOnUnrent()) + plugin.getResidenceManager().removeLwcFromResidence(player, res); res.getPermissions().applyDefaultFlags(); - if (Residence.getSchematicManager() != null && Residence.getConfigManager().RestoreAfterRentEnds && backup) { - Residence.getSchematicManager().load(res); + if (plugin.getSchematicManager() != null && plugin.getConfigManager().RestoreAfterRentEnds && backup) { + plugin.getSchematicManager().load(res); // set true if its already exists res.getPermissions().setFlag("backup", FlagState.TRUE); } - Residence.getSignUtil().CheckSign(res); + plugin.getSignUtil().CheckSign(res); - Residence.msg(player, lm.Residence_Unrent, res.getName()); + plugin.msg(player, lm.Residence_Unrent, res.getName()); } else { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); } } @@ -447,39 +449,39 @@ private static int msToDays(long ms) { @Override public void removeFromForRent(Player player, String landName, boolean resadmin) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); removeFromForRent(player, res, resadmin); } public void removeFromForRent(Player player, ClaimedResidence res, boolean resadmin) { if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return; } if (rentableLand.contains(res)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENT); - Residence.getServ().getPluginManager().callEvent(revent); + plugin.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) return; rentableLand.remove(res); res.setRentable(null); res.getPermissions().applyDefaultFlags(); - Residence.getSignUtil().CheckSign(res); - Residence.msg(player, lm.Residence_RemoveRentable, res.getResidenceName()); + plugin.getSignUtil().CheckSign(res); + plugin.msg(player, lm.Residence_RemoveRentable, res.getResidenceName()); } else { - Residence.msg(player, lm.Residence_NotForRent); + plugin.msg(player, lm.Residence_NotForRent); } } @Override public void removeFromRent(String landName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); removeFromRent(res); } @@ -489,7 +491,7 @@ public void removeFromRent(ClaimedResidence res) { @Override public void removeRentable(String landName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); removeRentable(res); } @@ -498,12 +500,12 @@ public void removeRentable(ClaimedResidence res) { return; removeFromRent(res); rentableLand.remove(res); - Residence.getSignUtil().removeSign(res.getName()); + plugin.getSignUtil().removeSign(res.getName()); } @Override public boolean isForRent(String landName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); return isForRent(res); } @@ -514,7 +516,7 @@ public boolean isForRent(ClaimedResidence res) { } public RentableLand getRentableLand(String landName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); return getRentableLand(res); } @@ -528,7 +530,7 @@ public RentableLand getRentableLand(ClaimedResidence res) { @Override public boolean isRented(String landName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); return isRented(res); } @@ -540,7 +542,7 @@ public boolean isRented(ClaimedResidence res) { @Override public String getRentingPlayer(String landName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); return getRentingPlayer(res); } @@ -552,7 +554,7 @@ public String getRentingPlayer(ClaimedResidence res) { @Override public int getCostOfRent(String landName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); return getCostOfRent(res); } @@ -564,7 +566,7 @@ public int getCostOfRent(ClaimedResidence res) { @Override public boolean getRentableRepeatable(String landName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); return getRentableRepeatable(res); } @@ -576,7 +578,7 @@ public boolean getRentableRepeatable(ClaimedResidence res) { @Override public boolean getRentedAutoRepeats(String landName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); return getRentedAutoRepeats(res); } @@ -588,7 +590,7 @@ public boolean getRentedAutoRepeats(ClaimedResidence res) { @Override public int getRentDays(String landName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); return getRentDays(res); } @@ -614,11 +616,11 @@ public void checkCurrentRents() { if (land.endTime > System.currentTimeMillis()) continue; - if (Residence.getConfigManager().debugEnabled()) + if (plugin.getConfigManager().debugEnabled()) System.out.println("Rent Check: " + res.getName()); ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); - Residence.getServ().getPluginManager().callEvent(revent); + plugin.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) continue; @@ -631,11 +633,11 @@ public void checkCurrentRents() { rentedLand.remove(res); res.setRented(null); res.getPermissions().applyDefaultFlags(); - Residence.getSignUtil().CheckSign(res); + plugin.getSignUtil().CheckSign(res); continue; } if (land.AutoPay && rentable.AllowAutoPay) { - if (!Residence.getEconomyManager().canAfford(land.player, rentable.cost)) { + if (!plugin.getEconomyManager().canAfford(land.player, rentable.cost)) { if (!rentable.StayInMarket) { rentableLand.remove(res); res.setRentable(null); @@ -644,7 +646,7 @@ public void checkCurrentRents() { res.setRented(null); res.getPermissions().applyDefaultFlags(); } else { - if (!Residence.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { + if (!plugin.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { if (!rentable.StayInMarket) { rentableLand.remove(res); res.setRentable(null); @@ -657,7 +659,7 @@ public void checkCurrentRents() { } } - Residence.getSignUtil().CheckSign(res); + plugin.getSignUtil().CheckSign(res); continue; } if (!rentable.StayInMarket) { @@ -671,40 +673,40 @@ public void checkCurrentRents() { res.getPermissions().applyDefaultFlags(); - if (Residence.getSchematicManager() != null && Residence.getConfigManager().RestoreAfterRentEnds && backup) { - Residence.getSchematicManager().load(res); - Residence.getSignUtil().CheckSign(res); + if (plugin.getSchematicManager() != null && plugin.getConfigManager().RestoreAfterRentEnds && backup) { + plugin.getSchematicManager().load(res); + plugin.getSignUtil().CheckSign(res); // set true if its already exists res.getPermissions().setFlag("backup", FlagState.TRUE); // To avoid lag spikes on multiple residence restores at once, will limit to one residence at time break; } - Residence.getSignUtil().CheckSign(res); + plugin.getSignUtil().CheckSign(res); } } @Override public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); setRentRepeatable(player, res, value, resadmin); } public void setRentRepeatable(Player player, ClaimedResidence res, boolean value, boolean resadmin) { if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } RentableLand land = res.getRentable(); if (!res.isOwner(player) && !resadmin) { - Residence.msg(player, lm.Residence_NotOwner); + plugin.msg(player, lm.Residence_NotOwner); return; } if (land == null || !res.isOwner(player) && !resadmin) { - Residence.msg(player, lm.Residence_NotOwner); + plugin.msg(player, lm.Residence_NotOwner); return; } @@ -713,96 +715,96 @@ public void setRentRepeatable(Player player, ClaimedResidence res, boolean value res.getRentedLand().AutoPay = false; if (value) - Residence.msg(player, lm.Rentable_EnableRenew, res.getResidenceName()); + plugin.msg(player, lm.Rentable_EnableRenew, res.getResidenceName()); else - Residence.msg(player, lm.Rentable_DisableRenew, res.getResidenceName()); + plugin.msg(player, lm.Rentable_DisableRenew, res.getResidenceName()); } @Override public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); setRentedRepeatable(player, res, value, resadmin); } public void setRentedRepeatable(Player player, ClaimedResidence res, boolean value, boolean resadmin) { if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } RentedLand land = res.getRentedLand(); if (land == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } if (!res.getRentable().AllowAutoPay && value) { - Residence.msg(player, lm.Residence_CantAutoPay); + plugin.msg(player, lm.Residence_CantAutoPay); return; } if (!land.player.equals(player.getName()) && !resadmin) { - Residence.msg(player, lm.Residence_NotOwner); + plugin.msg(player, lm.Residence_NotOwner); return; } if (!land.player.equals(player.getName()) && !resadmin) { - Residence.msg(player, lm.Residence_NotOwner); + plugin.msg(player, lm.Residence_NotOwner); return; } land.AutoPay = value; if (value) - Residence.msg(player, lm.Rent_EnableRenew, res.getResidenceName()); + plugin.msg(player, lm.Rent_EnableRenew, res.getResidenceName()); else - Residence.msg(player, lm.Rent_DisableRenew, res.getResidenceName()); + plugin.msg(player, lm.Rent_DisableRenew, res.getResidenceName()); - Residence.getSignUtil().CheckSign(res); + plugin.getSignUtil().CheckSign(res); } public void printRentInfo(Player player, String landName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(landName); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); printRentInfo(player, res); } public void printRentInfo(Player player, ClaimedResidence res) { if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } RentableLand rentable = res.getRentable(); RentedLand rented = res.getRentedLand(); if (rentable != null) { - Residence.msg(player, lm.General_Separator); - Residence.msg(player, lm.General_Land, res.getName()); - Residence.msg(player, lm.General_Cost, rentable.cost, rentable.days); - Residence.msg(player, lm.Rentable_AllowRenewing, rentable.AllowRenewing); - Residence.msg(player, lm.Rentable_StayInMarket, rentable.StayInMarket); - Residence.msg(player, lm.Rentable_AllowAutoPay, rentable.AllowAutoPay); + plugin.msg(player, lm.General_Separator); + plugin.msg(player, lm.General_Land, res.getName()); + plugin.msg(player, lm.General_Cost, rentable.cost, rentable.days); + plugin.msg(player, lm.Rentable_AllowRenewing, rentable.AllowRenewing); + plugin.msg(player, lm.Rentable_StayInMarket, rentable.StayInMarket); + plugin.msg(player, lm.Rentable_AllowAutoPay, rentable.AllowAutoPay); if (rented != null) { - Residence.msg(player, lm.Residence_RentedBy, rented.player); + plugin.msg(player, lm.Residence_RentedBy, rented.player); - if (rented.player.equals(player.getName()) || res.isOwner(player) || Residence.isResAdminOn(player)) - player.sendMessage((rented.AutoPay ? Residence.msg(lm.Rent_AutoPayTurnedOn) : Residence.msg(lm.Rent_AutoPayTurnedOff)) + if (rented.player.equals(player.getName()) || res.isOwner(player) || plugin.isResAdminOn(player)) + player.sendMessage((rented.AutoPay ? plugin.msg(lm.Rent_AutoPayTurnedOn) : plugin.msg(lm.Rent_AutoPayTurnedOff)) + "\n"); - Residence.msg(player, lm.Rent_Expire, GetTime.getTime(rented.endTime)); + plugin.msg(player, lm.Rent_Expire, GetTime.getTime(rented.endTime)); } else { - Residence.msg(player, lm.General_Status, Residence.msg(lm.General_Available)); + plugin.msg(player, lm.General_Status, plugin.msg(lm.General_Available)); } - Residence.msg(player, lm.General_Separator); + plugin.msg(player, lm.General_Separator); } else { - Residence.msg(player, lm.General_Separator); - Residence.msg(player, lm.Residence_NotForRent); - Residence.msg(player, lm.General_Separator); + plugin.msg(player, lm.General_Separator); + plugin.msg(player, lm.Residence_NotForRent); + plugin.msg(player, lm.General_Separator); } } public void printRentableResidences(Player player, int page) { - Residence.msg(player, lm.Rentable_Land); + plugin.msg(player, lm.Rentable_Land); StringBuilder sbuild = new StringBuilder(); sbuild.append(ChatColor.GREEN); @@ -834,11 +836,11 @@ public void printRentableResidences(Player player, int page) { String hover = ""; if (rented) { RentedLand rent = res.getRentedLand(); - rentedBy = Residence.msg(lm.Residence_RentedBy, rent.player); + rentedBy = plugin.msg(lm.Residence_RentedBy, rent.player); hover = GetTime.getTime(rent.endTime); } - String msg = Residence.msg(lm.Rent_RentList, z, res.getName(), res.getRentable().cost, res.getRentable().days, res.getRentable().AllowRenewing, + String msg = plugin.msg(lm.Rent_RentList, z, res.getName(), res.getRentable().cost, res.getRentable().days, res.getRentable().AllowRenewing, res.getOwner(), rentedBy); if (!hover.equalsIgnoreCase("")) @@ -864,11 +866,11 @@ public void printRentableResidences(Player player, int page) { Prevpage = page > 1 ? Prevpage : page; String prevCmd = "/res market list rent " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + String prev = "[\"\",{\"text\":\"" + separator + " " + plugin.msg(lm.General_PrevInfoPage) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = "/res market list rent " + NextPage; - String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + String next = " {\"text\":\"" + plugin.msg(lm.General_NextInfoPage) + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; @@ -915,7 +917,7 @@ public void load(Map root) { Map rentables = (Map) root.get("Rentables"); for (Entry rent : rentables.entrySet()) { RentableLand one = loadRentable((Map) rent.getValue()); - ClaimedResidence res = Residence.getResidenceManager().getByName(rent.getKey()); + ClaimedResidence res = plugin.getResidenceManager().getByName(rent.getKey()); if (res != null) { res.setRentable(one); this.rentableLand.add(res); @@ -924,7 +926,7 @@ public void load(Map root) { Map rented = (Map) root.get("Rented"); for (Entry rent : rented.entrySet()) { RentedLand one = loadRented((Map) rent.getValue()); - ClaimedResidence res = Residence.getResidenceManager().getByName(rent.getKey()); + ClaimedResidence res = plugin.getResidenceManager().getByName(rent.getKey()); if (res != null) { res.setRented(one); this.rentedLand.add(res); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java b/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java index ce25bb519..24b2402f3 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentableLand.java @@ -9,9 +9,9 @@ public class RentableLand { public int days = 0; public int cost = Integer.MAX_VALUE; - public boolean AllowRenewing = Residence.getConfigManager().isRentAllowRenewing(); - public boolean StayInMarket = Residence.getConfigManager().isRentStayInMarket(); - public boolean AllowAutoPay = Residence.getConfigManager().isRentAllowAutoPay(); + public boolean AllowRenewing = Residence.getInstance().getConfigManager().isRentAllowRenewing(); + public boolean StayInMarket = Residence.getInstance().getConfigManager().isRentStayInMarket(); + public boolean AllowAutoPay = Residence.getInstance().getConfigManager().isRentAllowAutoPay(); public RentableLand() { } diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 45b4a9820..a6cfad858 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -1,426 +1,426 @@ -package com.bekvon.bukkit.residence.gui; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryAction; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; - -public class SetFlag { - - private String residence; - private Player player; - private String targetPlayer = null; - private Inventory inventory; - private LinkedHashMap permMap = new LinkedHashMap(); - private LinkedHashMap> description = new LinkedHashMap>(); - private boolean admin = false; - private int page = 1; - private int pageCount = 1; - - public SetFlag(String residence, Player player, boolean admin) { - this.residence = residence; - this.player = player; - this.admin = admin; - fillFlagDescriptions(); - } - - public void setAdmin(boolean state) { - this.admin = state; - } - - public boolean isAdmin() { - return this.admin; - } - - public void setTargetPlayer(String player) { - this.targetPlayer = player; - } - - public String getResidence() { - return this.residence; - } - - public Player getPlayer() { - return this.player; - } - - public Inventory getInventory() { - return this.inventory; - } - - public void toggleFlag(int slot, ClickType click, InventoryAction action) { - ItemStack item = this.inventory.getItem(slot); - if (item == null) - return; - String command = "true"; - if (click.isLeftClick() && action != InventoryAction.MOVE_TO_OTHER_INVENTORY) - command = "true"; - else if (click.isRightClick() && action != InventoryAction.MOVE_TO_OTHER_INVENTORY) - command = "false"; - else if (click.isLeftClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTORY) - command = "remove"; - else if (click.isRightClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTORY) - return; - - if (slot == 53) { - if (page < pageCount) - page++; - recalculateInv(); - return; - } else if (slot == 45) { - if (page > 1) - page--; - recalculateInv(); - return; - } - - String flag = ""; - int i = 0; - for (Entry one : permMap.entrySet()) { - flag = one.getKey(); - if (i == slot) { - break; - } - i++; - } - if (targetPlayer == null) { - if (admin) - Bukkit.dispatchCommand(player, "resadmin set " + residence + " " + flag + " " + command); - else - Bukkit.dispatchCommand(player, "res set " + residence + " " + flag + " " + command); - } else { - if (admin) - Bukkit.dispatchCommand(player, "resadmin pset " + residence + " " + targetPlayer + " " + flag + " " + command); - else - Bukkit.dispatchCommand(player, "res pset " + residence + " " + targetPlayer + " " + flag + " " + command); - } - } - - public void recalculateInv() { - if (targetPlayer == null) - recalculateResidence(Residence.getResidenceManager().getByName(residence)); - else - recalculatePlayer(Residence.getResidenceManager().getByName(residence)); - } - - private void fillFlagDescriptions() { - Set list = Residence.getLM().getKeyList("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands"); - for (String onelist : list) { - String onelisttemp = Residence.msg("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + onelist + ".Description"); - List lore = new ArrayList(); - int i = 0; - String sentence = ""; - for (String oneWord : onelisttemp.split(" ")) { - sentence += oneWord + " "; - if (i > 4) { - lore.add(ChatColor.YELLOW + sentence); - sentence = ""; - i = 0; - } - i++; - } - lore.add(ChatColor.YELLOW + sentence); - description.put(onelist, lore); - } - } - - @SuppressWarnings("incomplete-switch") - public void recalculateResidence(ClaimedResidence res) { - - List flags = res.getPermissions().getPosibleFlags(player, true, this.admin); - Map resFlags = new HashMap(); - Map TempPermMap = new LinkedHashMap(); - Map globalFlags = Residence.getPermissionManager().getAllFlags().getFlags(); - - for (Entry one : res.getPermissions().getFlags().entrySet()) { - if (flags.contains(one.getKey())) - resFlags.put(one.getKey(), one.getValue()); - } - - for (Entry one : globalFlags.entrySet()) { - if (!flags.contains(one.getKey())) - continue; - - if (resFlags.containsKey(one.getKey())) - TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? FlagState.TRUE : FlagState.FALSE); - else - TempPermMap.put(one.getKey(), FlagState.NEITHER); - } - - String title = ""; - if (targetPlayer == null) - title = Residence.msg(lm.Gui_Set_Title, res.getName()); - else - title = Residence.msg(lm.Gui_Pset_Title, targetPlayer, res.getName()); - - if (title.length() > 32) { - title = title.substring(0, Math.min(title.length(), 32)); - } - - Inventory GuiInv = Bukkit.createInventory(null, 54, title); - int i = 0; - - if (targetPlayer == null) - TempPermMap.remove("admin"); - - TempPermMap = Residence.getSortingManager().sortByKeyASC(TempPermMap); - - FlagData flagData = Residence.getFlagUtilManager().getFlagData(); - - pageCount = (int) Math.ceil((double) TempPermMap.size() / (double) 45); - - int start = page * 45 - 45; - int end = page * 45; - - int count = -1; - permMap.clear(); - for (Entry one : TempPermMap.entrySet()) { - count++; - if (count >= end) - break; - if (count < start) - continue; - permMap.put(one.getKey(), one.getValue()); - } - - for (Entry one : permMap.entrySet()) { - - ItemStack MiscInfo = Residence.getConfigManager().getGuiRemove(); - - switch ((FlagState) one.getValue()) { - case FALSE: - MiscInfo = Residence.getConfigManager().getGuiFalse(); - break; - case TRUE: - MiscInfo = Residence.getConfigManager().getGuiTrue(); - break; - } - - if (flagData.contains(one.getKey())) - MiscInfo = flagData.getItem(one.getKey()); - - if ((FlagState) one.getValue() == FlagState.TRUE) { - ItemMeta im = MiscInfo.getItemMeta(); - im.addEnchant(Enchantment.LUCK, 1, true); - MiscInfo.setItemMeta(im); - } else - MiscInfo.removeEnchantment(Enchantment.LUCK); - - ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); - MiscInfoMeta.setDisplayName(ChatColor.GREEN + one.getKey()); - - List lore = new ArrayList(); - - String variable = ""; - switch ((FlagState) one.getValue()) { - case FALSE: - variable = Residence.msg(lm.General_False); - break; - case TRUE: - variable = Residence.msg(lm.General_True); - break; - case NEITHER: - variable = Residence.msg(lm.General_Removed); - break; - } - lore.add(Residence.msg(lm.General_FlagState, variable)); - - if (description.containsKey(one.getKey())) - lore.addAll(description.get(one.getKey())); - - lore.addAll(Residence.msgL(lm.Gui_Actions)); - - MiscInfoMeta.setLore(lore); - - MiscInfo.setItemMeta(MiscInfoMeta); - GuiInv.setItem(i, MiscInfo); - i++; - if (i > 53) - break; - } - ItemStack Item = new ItemStack(Material.ARROW); - - ItemMeta meta = Item.getItemMeta(); - if (page > 1) { - meta.setDisplayName(Residence.msg(lm.General_PrevInfoPage)); - Item.setItemMeta(meta); - GuiInv.setItem(45, Item); - } - if (page < pageCount) { - meta.setDisplayName(Residence.msg(lm.General_NextInfoPage)); - Item.setItemMeta(meta); - GuiInv.setItem(53, Item); - } - - this.inventory = GuiInv; - } - - @SuppressWarnings("incomplete-switch") - public void recalculatePlayer(ClaimedResidence res) { - Map globalFlags = new HashMap(); - for (Flags oneFlag : Flags.values()) { - globalFlags.put(oneFlag.getName(), oneFlag.isEnabled()); - } - - List flags = res.getPermissions().getPosibleFlags(player, false, this.admin); - Map resFlags = new HashMap(); - - for (Entry one : res.getPermissions().getFlags().entrySet()) { - if (flags.contains(one.getKey())) - resFlags.put(one.getKey(), one.getValue()); - } - - if (targetPlayer != null) { - Set PosibleResPFlags = res.getPermissions().getposibleFlags(); - Map temp = new HashMap(); - for (String one : PosibleResPFlags) { - if (globalFlags.containsKey(one)) - temp.put(one, globalFlags.get(one)); - } - globalFlags = temp; - - Map pFlags = res.getPermissions().getPlayerFlags(targetPlayer); - - if (pFlags != null) - for (Entry one : pFlags.entrySet()) { - resFlags.put(one.getKey(), one.getValue()); - } - } - - LinkedHashMap TempPermMap = new LinkedHashMap(); - - for (Entry one : globalFlags.entrySet()) { - if (!flags.contains(one.getKey())) - continue; - - if (resFlags.containsKey(one.getKey())) - TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? FlagState.TRUE : FlagState.FALSE); - else - TempPermMap.put(one.getKey(), FlagState.NEITHER); - } - - String title = ""; - if (targetPlayer == null) - title = Residence.msg(lm.Gui_Set_Title, res.getName()); - else - title = Residence.msg(lm.Gui_Pset_Title, targetPlayer, res.getName()); - - if (title.length() > 32) { - title = title.substring(0, Math.min(title.length(), 32)); - } - - Inventory GuiInv = Bukkit.createInventory(null, 54, title); - int i = 0; - - TempPermMap = (LinkedHashMap) Residence.getSortingManager().sortByKeyASC(TempPermMap); - - FlagData flagData = Residence.getFlagUtilManager().getFlagData(); - - pageCount = (int) Math.ceil((double) TempPermMap.size() / (double) 45); - - int start = page * 45 - 45; - int end = page * 45; - - int count = -1; - permMap.clear(); - for (Entry one : TempPermMap.entrySet()) { - count++; - if (count >= end) - break; - if (count < start) - continue; - permMap.put(one.getKey(), one.getValue()); - } - - for (Entry one : permMap.entrySet()) { - - ItemStack MiscInfo = Residence.getConfigManager().getGuiRemove(); - - switch ((FlagState) one.getValue()) { - case FALSE: - MiscInfo = Residence.getConfigManager().getGuiFalse(); - break; - case TRUE: - MiscInfo = Residence.getConfigManager().getGuiTrue(); - break; - } - - if (flagData.contains(one.getKey())) - MiscInfo = flagData.getItem(one.getKey()); - - if ((FlagState) one.getValue() == FlagState.TRUE) { - ItemMeta im = MiscInfo.getItemMeta(); - im.addEnchant(Enchantment.LUCK, 1, true); - MiscInfo.setItemMeta(im); - } else - MiscInfo.removeEnchantment(Enchantment.LUCK); - - ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); - MiscInfoMeta.setDisplayName(ChatColor.GREEN + one.getKey()); - - List lore = new ArrayList(); - - String variable = ""; - switch ((FlagState) one.getValue()) { - case FALSE: - variable = Residence.msg(lm.General_False); - break; - case TRUE: - variable = Residence.msg(lm.General_True); - break; - case NEITHER: - variable = Residence.msg(lm.General_Removed); - break; - } - lore.add(Residence.msg(lm.General_FlagState, variable)); - - if (description.containsKey(one.getKey())) - lore.addAll(description.get(one.getKey())); - - lore.addAll(Residence.msgL(lm.Gui_Actions)); - - MiscInfoMeta.setLore(lore); - - MiscInfo.setItemMeta(MiscInfoMeta); - GuiInv.setItem(i, MiscInfo); - i++; - if (i > 53) - break; - } - ItemStack Item = new ItemStack(Material.ARROW); - - ItemMeta meta = Item.getItemMeta(); - if (page > 1) { - meta.setDisplayName(Residence.msg(lm.General_PrevInfoPage)); - Item.setItemMeta(meta); - GuiInv.setItem(45, Item); - } - if (page < pageCount) { - meta.setDisplayName(Residence.msg(lm.General_NextInfoPage)); - Item.setItemMeta(meta); - GuiInv.setItem(53, Item); - } - - this.inventory = GuiInv; - } -} +package com.bekvon.bukkit.residence.gui; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; + +public class SetFlag { + + private String residence; + private Player player; + private String targetPlayer = null; + private Inventory inventory; + private LinkedHashMap permMap = new LinkedHashMap(); + private LinkedHashMap> description = new LinkedHashMap>(); + private boolean admin = false; + private int page = 1; + private int pageCount = 1; + + public SetFlag(String residence, Player player, boolean admin) { + this.residence = residence; + this.player = player; + this.admin = admin; + fillFlagDescriptions(); + } + + public void setAdmin(boolean state) { + this.admin = state; + } + + public boolean isAdmin() { + return this.admin; + } + + public void setTargetPlayer(String player) { + this.targetPlayer = player; + } + + public String getResidence() { + return this.residence; + } + + public Player getPlayer() { + return this.player; + } + + public Inventory getInventory() { + return this.inventory; + } + + public void toggleFlag(int slot, ClickType click, InventoryAction action) { + ItemStack item = this.inventory.getItem(slot); + if (item == null) + return; + String command = "true"; + if (click.isLeftClick() && action != InventoryAction.MOVE_TO_OTHER_INVENTORY) + command = "true"; + else if (click.isRightClick() && action != InventoryAction.MOVE_TO_OTHER_INVENTORY) + command = "false"; + else if (click.isLeftClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTORY) + command = "remove"; + else if (click.isRightClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTORY) + return; + + if (slot == 53) { + if (page < pageCount) + page++; + recalculateInv(); + return; + } else if (slot == 45) { + if (page > 1) + page--; + recalculateInv(); + return; + } + + String flag = ""; + int i = 0; + for (Entry one : permMap.entrySet()) { + flag = one.getKey(); + if (i == slot) { + break; + } + i++; + } + if (targetPlayer == null) { + if (admin) + Bukkit.dispatchCommand(player, "resadmin set " + residence + " " + flag + " " + command); + else + Bukkit.dispatchCommand(player, "res set " + residence + " " + flag + " " + command); + } else { + if (admin) + Bukkit.dispatchCommand(player, "resadmin pset " + residence + " " + targetPlayer + " " + flag + " " + command); + else + Bukkit.dispatchCommand(player, "res pset " + residence + " " + targetPlayer + " " + flag + " " + command); + } + } + + public void recalculateInv() { + if (targetPlayer == null) + recalculateResidence(Residence.getInstance().getResidenceManager().getByName(residence)); + else + recalculatePlayer(Residence.getInstance().getResidenceManager().getByName(residence)); + } + + private void fillFlagDescriptions() { + Set list = Residence.getLM().getKeyList("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands"); + for (String onelist : list) { + String onelisttemp = Residence.msg("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + onelist + ".Description"); + List lore = new ArrayList(); + int i = 0; + String sentence = ""; + for (String oneWord : onelisttemp.split(" ")) { + sentence += oneWord + " "; + if (i > 4) { + lore.add(ChatColor.YELLOW + sentence); + sentence = ""; + i = 0; + } + i++; + } + lore.add(ChatColor.YELLOW + sentence); + description.put(onelist, lore); + } + } + + @SuppressWarnings("incomplete-switch") + public void recalculateResidence(ClaimedResidence res) { + + List flags = res.getPermissions().getPosibleFlags(player, true, this.admin); + Map resFlags = new HashMap(); + Map TempPermMap = new LinkedHashMap(); + Map globalFlags = Residence.getPermissionManager().getAllFlags().getFlags(); + + for (Entry one : res.getPermissions().getFlags().entrySet()) { + if (flags.contains(one.getKey())) + resFlags.put(one.getKey(), one.getValue()); + } + + for (Entry one : globalFlags.entrySet()) { + if (!flags.contains(one.getKey())) + continue; + + if (resFlags.containsKey(one.getKey())) + TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? FlagState.TRUE : FlagState.FALSE); + else + TempPermMap.put(one.getKey(), FlagState.NEITHER); + } + + String title = ""; + if (targetPlayer == null) + title = Residence.getInstance().msg(lm.Gui_Set_Title, res.getName()); + else + title = Residence.getInstance().msg(lm.Gui_Pset_Title, targetPlayer, res.getName()); + + if (title.length() > 32) { + title = title.substring(0, Math.min(title.length(), 32)); + } + + Inventory GuiInv = Bukkit.createInventory(null, 54, title); + int i = 0; + + if (targetPlayer == null) + TempPermMap.remove("admin"); + + TempPermMap = Residence.getSortingManager().sortByKeyASC(TempPermMap); + + FlagData flagData = Residence.getFlagUtilManager().getFlagData(); + + pageCount = (int) Math.ceil((double) TempPermMap.size() / (double) 45); + + int start = page * 45 - 45; + int end = page * 45; + + int count = -1; + permMap.clear(); + for (Entry one : TempPermMap.entrySet()) { + count++; + if (count >= end) + break; + if (count < start) + continue; + permMap.put(one.getKey(), one.getValue()); + } + + for (Entry one : permMap.entrySet()) { + + ItemStack MiscInfo = Residence.getInstance().getConfigManager().getGuiRemove(); + + switch ((FlagState) one.getValue()) { + case FALSE: + MiscInfo = Residence.getInstance().getConfigManager().getGuiFalse(); + break; + case TRUE: + MiscInfo = Residence.getInstance().getConfigManager().getGuiTrue(); + break; + } + + if (flagData.contains(one.getKey())) + MiscInfo = flagData.getItem(one.getKey()); + + if ((FlagState) one.getValue() == FlagState.TRUE) { + ItemMeta im = MiscInfo.getItemMeta(); + im.addEnchant(Enchantment.LUCK, 1, true); + MiscInfo.setItemMeta(im); + } else + MiscInfo.removeEnchantment(Enchantment.LUCK); + + ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); + MiscInfoMeta.setDisplayName(ChatColor.GREEN + one.getKey()); + + List lore = new ArrayList(); + + String variable = ""; + switch ((FlagState) one.getValue()) { + case FALSE: + variable = Residence.getInstance().msg(lm.General_False); + break; + case TRUE: + variable = Residence.getInstance().msg(lm.General_True); + break; + case NEITHER: + variable = Residence.getInstance().msg(lm.General_Removed); + break; + } + lore.add(Residence.getInstance().msg(lm.General_FlagState, variable)); + + if (description.containsKey(one.getKey())) + lore.addAll(description.get(one.getKey())); + + lore.addAll(Residence.msgL(lm.Gui_Actions)); + + MiscInfoMeta.setLore(lore); + + MiscInfo.setItemMeta(MiscInfoMeta); + GuiInv.setItem(i, MiscInfo); + i++; + if (i > 53) + break; + } + ItemStack Item = new ItemStack(Material.ARROW); + + ItemMeta meta = Item.getItemMeta(); + if (page > 1) { + meta.setDisplayName(Residence.getInstance().msg(lm.General_PrevInfoPage)); + Item.setItemMeta(meta); + GuiInv.setItem(45, Item); + } + if (page < pageCount) { + meta.setDisplayName(Residence.getInstance().msg(lm.General_NextInfoPage)); + Item.setItemMeta(meta); + GuiInv.setItem(53, Item); + } + + this.inventory = GuiInv; + } + + @SuppressWarnings("incomplete-switch") + public void recalculatePlayer(ClaimedResidence res) { + Map globalFlags = new HashMap(); + for (Flags oneFlag : Flags.values()) { + globalFlags.put(oneFlag.getName(), oneFlag.isEnabled()); + } + + List flags = res.getPermissions().getPosibleFlags(player, false, this.admin); + Map resFlags = new HashMap(); + + for (Entry one : res.getPermissions().getFlags().entrySet()) { + if (flags.contains(one.getKey())) + resFlags.put(one.getKey(), one.getValue()); + } + + if (targetPlayer != null) { + Set PosibleResPFlags = res.getPermissions().getposibleFlags(); + Map temp = new HashMap(); + for (String one : PosibleResPFlags) { + if (globalFlags.containsKey(one)) + temp.put(one, globalFlags.get(one)); + } + globalFlags = temp; + + Map pFlags = res.getPermissions().getPlayerFlags(targetPlayer); + + if (pFlags != null) + for (Entry one : pFlags.entrySet()) { + resFlags.put(one.getKey(), one.getValue()); + } + } + + LinkedHashMap TempPermMap = new LinkedHashMap(); + + for (Entry one : globalFlags.entrySet()) { + if (!flags.contains(one.getKey())) + continue; + + if (resFlags.containsKey(one.getKey())) + TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? FlagState.TRUE : FlagState.FALSE); + else + TempPermMap.put(one.getKey(), FlagState.NEITHER); + } + + String title = ""; + if (targetPlayer == null) + title = Residence.getInstance().msg(lm.Gui_Set_Title, res.getName()); + else + title = Residence.getInstance().msg(lm.Gui_Pset_Title, targetPlayer, res.getName()); + + if (title.length() > 32) { + title = title.substring(0, Math.min(title.length(), 32)); + } + + Inventory GuiInv = Bukkit.createInventory(null, 54, title); + int i = 0; + + TempPermMap = (LinkedHashMap) Residence.getSortingManager().sortByKeyASC(TempPermMap); + + FlagData flagData = Residence.getFlagUtilManager().getFlagData(); + + pageCount = (int) Math.ceil((double) TempPermMap.size() / (double) 45); + + int start = page * 45 - 45; + int end = page * 45; + + int count = -1; + permMap.clear(); + for (Entry one : TempPermMap.entrySet()) { + count++; + if (count >= end) + break; + if (count < start) + continue; + permMap.put(one.getKey(), one.getValue()); + } + + for (Entry one : permMap.entrySet()) { + + ItemStack MiscInfo = Residence.getInstance().getConfigManager().getGuiRemove(); + + switch ((FlagState) one.getValue()) { + case FALSE: + MiscInfo = Residence.getInstance().getConfigManager().getGuiFalse(); + break; + case TRUE: + MiscInfo = Residence.getInstance().getConfigManager().getGuiTrue(); + break; + } + + if (flagData.contains(one.getKey())) + MiscInfo = flagData.getItem(one.getKey()); + + if ((FlagState) one.getValue() == FlagState.TRUE) { + ItemMeta im = MiscInfo.getItemMeta(); + im.addEnchant(Enchantment.LUCK, 1, true); + MiscInfo.setItemMeta(im); + } else + MiscInfo.removeEnchantment(Enchantment.LUCK); + + ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); + MiscInfoMeta.setDisplayName(ChatColor.GREEN + one.getKey()); + + List lore = new ArrayList(); + + String variable = ""; + switch ((FlagState) one.getValue()) { + case FALSE: + variable = Residence.getInstance().msg(lm.General_False); + break; + case TRUE: + variable = Residence.getInstance().msg(lm.General_True); + break; + case NEITHER: + variable = Residence.getInstance().msg(lm.General_Removed); + break; + } + lore.add(Residence.getInstance().msg(lm.General_FlagState, variable)); + + if (description.containsKey(one.getKey())) + lore.addAll(description.get(one.getKey())); + + lore.addAll(Residence.msgL(lm.Gui_Actions)); + + MiscInfoMeta.setLore(lore); + + MiscInfo.setItemMeta(MiscInfoMeta); + GuiInv.setItem(i, MiscInfo); + i++; + if (i > 53) + break; + } + ItemStack Item = new ItemStack(Material.ARROW); + + ItemMeta meta = Item.getItemMeta(); + if (page > 1) { + meta.setDisplayName(Residence.getInstance().msg(lm.General_PrevInfoPage)); + Item.setItemMeta(meta); + GuiInv.setItem(45, Item); + } + if (page < pageCount) { + meta.setDisplayName(Residence.getInstance().msg(lm.General_NextInfoPage)); + Item.setItemMeta(meta); + GuiInv.setItem(53, Item); + } + + this.inventory = GuiInv; + } +} diff --git a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java index 8e5921332..0af80f09e 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java @@ -11,13 +11,15 @@ public class ResidenceItemList extends ItemList { ClaimedResidence res; + private Residence plugin; public ResidenceItemList(ClaimedResidence parent, ListType type) { super(type); res = parent; } - private ResidenceItemList() { + private ResidenceItemList(Residence plugin) { + this.plugin = plugin; } @@ -27,16 +29,16 @@ public void playerListChange(Player player, Material mat, boolean resadmin) { PermissionGroup group = rPlayer.getGroup(); if (resadmin || (res.getPermissions().hasResidencePermission(player, true) && group.itemListAccess())) { if (super.toggle(mat)) - Residence.msg(player, lm.General_ListMaterialAdd, mat.toString(), type.toString().toLowerCase()); + plugin.msg(player, lm.General_ListMaterialAdd, mat.toString(), type.toString().toLowerCase()); else - Residence.msg(player, lm.General_ListMaterialRemove, mat.toString(), type.toString().toLowerCase()); + plugin.msg(player, lm.General_ListMaterialRemove, mat.toString(), type.toString().toLowerCase()); } else { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); } } - public static ResidenceItemList load(ClaimedResidence parent, Map map) { - ResidenceItemList newlist = new ResidenceItemList(); + public static ResidenceItemList load(Residence plugin, ClaimedResidence parent, Map map) { + ResidenceItemList newlist = new ResidenceItemList(plugin); newlist.res = parent; return (ResidenceItemList) ItemList.load(map, newlist); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 4a803ffcb..0755e3726 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -59,9 +59,9 @@ public ResidenceBlockListener(Residence residence) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlantGrow(BlockGrowEvent event) { - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.grow, true)) { event.setCancelled(true); } @@ -71,9 +71,9 @@ public void onPlantGrow(BlockGrowEvent event) { public void onVineGrow(BlockSpreadEvent event) { if (event.getSource().getType() != Material.VINE) return; - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.grow, true)) { event.setCancelled(true); } @@ -81,9 +81,9 @@ public void onVineGrow(BlockSpreadEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onleaveDecay(LeavesDecayEvent event) { - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.decay, true)) { event.setCancelled(true); } @@ -91,9 +91,9 @@ public void onleaveDecay(LeavesDecayEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onTreeGrowt(StructureGrowEvent event) { - if (Residence.isDisabledWorldListener(event.getWorld())) + if (plugin.isDisabledWorldListener(event.getWorld())) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); if (!perms.has(Flags.grow, true)) { event.setCancelled(true); } @@ -102,14 +102,14 @@ public void onTreeGrowt(StructureGrowEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onTreeGrow(StructureGrowEvent event) { - if (Residence.isDisabledWorldListener(event.getWorld())) + if (plugin.isDisabledWorldListener(event.getWorld())) return; - ClaimedResidence startRes = Residence.getResidenceManager().getByLoc(event.getLocation()); + ClaimedResidence startRes = plugin.getResidenceManager().getByLoc(event.getLocation()); List blocks = event.getBlocks(); int i = 0; for (BlockState one : blocks) { - ClaimedResidence targetRes = Residence.getResidenceManager().getByLoc(one.getLocation()); + ClaimedResidence targetRes = plugin.getResidenceManager().getByLoc(one.getLocation()); if (startRes == null && targetRes != null || targetRes != null && startRes != null && !startRes.getName().equals(targetRes.getName()) && !startRes.isOwner(targetRes.getOwner())) { BlockState matas = blocks.get(i); @@ -123,30 +123,30 @@ public void onTreeGrow(StructureGrowEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { + if (plugin.isResAdminOn(player)) { return; } Block block = event.getBlock(); Material mat = block.getType(); String world = block.getWorld().getName(); - String group = Residence.getPermissionManager().getGroupNameByPlayer(player); - if (Residence.getItemManager().isIgnored(mat, group, world)) { + String group = plugin.getPermissionManager().getGroupNameByPlayer(player); + if (plugin.getItemManager().isIgnored(mat, group, world)) { return; } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); - if (Residence.getConfigManager().enabledRentSystem() && res != null) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (plugin.getConfigManager().enabledRentSystem() && res != null) { String resname = res.getName(); - if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { - Residence.msg(player, lm.Rent_ModifyDeny); + if (plugin.getConfigManager().preventRentModify() && plugin.getRentManager().isRented(resname)) { + plugin.msg(player, lm.Rent_ModifyDeny); event.setCancelled(true); return; } } - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); String pname = player.getName(); if (res != null && res.getItemIgnoreList().isListed(mat)) return; @@ -154,10 +154,10 @@ public void onBlockBreak(BlockBreakEvent event) { boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), Flags.destroy, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)); boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), Flags.container, true); if (!hasdestroy && !player.hasPermission("residence.bypass.destroy")) { - Residence.msg(player, lm.Flag_Deny, Flags.destroy); + plugin.msg(player, lm.Flag_Deny, Flags.destroy); event.setCancelled(true); } else if (!hasContainer && mat == Material.CHEST) { - Residence.msg(player, lm.Flag_Deny, Flags.container); + plugin.msg(player, lm.Flag_Deny, Flags.container); event.setCancelled(true); } } @@ -165,13 +165,13 @@ public void onBlockBreak(BlockBreakEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockForm(BlockFormEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; if (!(event instanceof EntityBlockFormEvent)) return; if (((EntityBlockFormEvent) event).getEntity() instanceof Snowman) { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.snowtrail, true)) { event.setCancelled(true); } @@ -181,7 +181,7 @@ public void onBlockForm(BlockFormEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onIceForm(BlockFormEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; Material ice = Material.getMaterial("FROSTED_ICE"); @@ -189,7 +189,7 @@ public void onIceForm(BlockFormEvent event) { if (event.getNewState().getType() != Material.SNOW && event.getNewState().getType() != Material.ICE && ice != null && ice != event.getNewState().getType()) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.iceform, true)) { event.setCancelled(true); } @@ -198,14 +198,14 @@ public void onIceForm(BlockFormEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onIceMelt(BlockFadeEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; if (event.getNewState().getType() != Material.STATIONARY_WATER && event.getBlock().getState().getType() != Material.SNOW && event.getBlock().getState() .getType() != Material.SNOW_BLOCK) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.icemelt, true)) { event.setCancelled(true); } @@ -219,12 +219,12 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { return; Entity ent = event.getEntity(); if (!ent.hasMetadata(SourceResidenceName)) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); String resName = res == null ? "NULL" : res.getName(); ent.setMetadata(SourceResidenceName, new FixedMetadataValue(plugin, resName)); } else { String saved = ent.getMetadata(SourceResidenceName).get(0).asString(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res != null && res.getPermissions().has(Flags.fallinprotection, FlagCombo.OnlyFalse)) return; @@ -240,9 +240,9 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockFall(EntityChangeBlockEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - if (!Residence.getConfigManager().isBlockFall()) + if (!plugin.getConfigManager().isBlockFall()) return; if ((event.getEntityType() != EntityType.FALLING_BLOCK)) @@ -256,18 +256,18 @@ public void onBlockFall(EntityChangeBlockEvent event) { if (block == null) return; - if (!Residence.getConfigManager().getBlockFallWorlds().contains(block.getLocation().getWorld().getName())) + if (!plugin.getConfigManager().getBlockFallWorlds().contains(block.getLocation().getWorld().getName())) return; - if (block.getY() <= Residence.getConfigManager().getBlockFallLevel()) + if (block.getY() <= plugin.getConfigManager().getBlockFallLevel()) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); Location loc = new Location(block.getLocation().getWorld(), block.getX(), block.getY(), block.getZ()); - for (int i = loc.getBlockY() - 1; i >= Residence.getConfigManager().getBlockFallLevel() - 1; i--) { + for (int i = loc.getBlockY() - 1; i >= plugin.getConfigManager().getBlockFallLevel() - 1; i--) { loc.setY(i); if (loc.getBlock().getType() != Material.AIR) { - ClaimedResidence targetRes = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence targetRes = plugin.getResidenceManager().getByLoc(loc); if (targetRes == null) continue; if (res != null && !res.getName().equals(targetRes.getName())) { @@ -284,26 +284,26 @@ public void onBlockFall(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestPlace(BlockPlaceEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - if (!Residence.getConfigManager().ShowNoobMessage()) + if (!plugin.getConfigManager().ShowNoobMessage()) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; Block block = event.getBlock(); if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) return; - ArrayList list = Residence.getPlayerManager().getResidenceList(player.getName()); + ArrayList list = plugin.getPlayerManager().getResidenceList(player.getName()); if (list.size() != 0) return; if (MessageInformed.contains(player.getName())) return; - Residence.msg(player, lm.General_NewPlayerInfo); + plugin.msg(player, lm.General_NewPlayerInfo); MessageInformed.add(player.getName()); } @@ -311,19 +311,19 @@ public void onChestPlace(BlockPlaceEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestPlaceCreateRes(BlockPlaceEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - if (!Residence.getConfigManager().isNewPlayerUse()) + if (!plugin.getConfigManager().isNewPlayerUse()) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; Block block = event.getBlock(); if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) return; - ArrayList list = Residence.getPlayerManager().getResidenceList(player.getName()); + ArrayList list = plugin.getPlayerManager().getResidenceList(player.getName()); if (list.size() != 0) return; @@ -332,13 +332,13 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), loc.getBlockX() - Residence.getConfigManager().getNewPlayerRangeX(), loc - .getBlockY() - Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() - Residence.getConfigManager().getNewPlayerRangeZ()), true); - Residence.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), loc.getBlockX() + Residence.getConfigManager().getNewPlayerRangeX(), loc - .getBlockY() + Residence.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() + Residence.getConfigManager().getNewPlayerRangeZ()), true); + plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), loc.getBlockX() - plugin.getConfigManager().getNewPlayerRangeX(), loc + .getBlockY() - plugin.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() - plugin.getConfigManager().getNewPlayerRangeZ()), true); + plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), loc.getBlockX() + plugin.getConfigManager().getNewPlayerRangeX(), loc + .getBlockY() + plugin.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() + plugin.getConfigManager().getNewPlayerRangeZ()), true); - boolean created = Residence.getResidenceManager().addResidence(player, player.getName(), Residence.getSelectionManager().getPlayerLoc1(player.getName()), - Residence.getSelectionManager().getPlayerLoc2(player.getName()), Residence.getConfigManager().isNewPlayerFree()); + boolean created = plugin.getResidenceManager().addResidence(player, player.getName(), plugin.getSelectionManager().getPlayerLoc1(player.getName()), + plugin.getSelectionManager().getPlayerLoc2(player.getName()), plugin.getConfigManager().isNewPlayerFree()); if (created) ResCreated.add(player.getName()); } @@ -346,39 +346,39 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) { + if (plugin.isResAdminOn(player)) { return; } Block block = event.getBlock(); Material mat = block.getType(); String world = block.getWorld().getName(); - String group = Residence.getPermissionManager().getGroupNameByPlayer(player); - if (Residence.getItemManager().isIgnored(mat, group, world)) { + String group = plugin.getPermissionManager().getGroupNameByPlayer(player); + if (plugin.getItemManager().isIgnored(mat, group, world)) { return; } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); - if (Residence.getConfigManager().enabledRentSystem() && res != null) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (plugin.getConfigManager().enabledRentSystem() && res != null) { String resname = res.getName(); - if (Residence.getConfigManager().preventRentModify() && Residence.getRentManager().isRented(resname)) { - Residence.msg(player, lm.Rent_ModifyDeny); + if (plugin.getConfigManager().preventRentModify() && plugin.getRentManager().isRented(resname)) { + plugin.msg(player, lm.Rent_ModifyDeny); event.setCancelled(true); return; } } String pname = player.getName(); if (res != null && !res.getItemBlacklist().isAllowed(mat)) { - Residence.msg(player, lm.General_ItemBlacklisted); + plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; } - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); boolean hasplace = perms.playerHas(pname, world, Flags.place, perms.playerHas(pname, world, Flags.build, true)); if (!hasplace && !player.hasPermission("residence.bypass.build")) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.place.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.place.getName()); return; } } @@ -386,10 +386,10 @@ public void onBlockPlace(BlockPlaceEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockSpread(BlockSpreadEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; Location loc = event.getBlock().getLocation(); - FlagPermissions perms = Residence.getPermsByLoc(loc); + FlagPermissions perms = plugin.getPermsByLoc(loc); if (!perms.has(Flags.spread, true)) { event.setCancelled(true); } @@ -398,24 +398,24 @@ public void onBlockSpread(BlockSpreadEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPistonRetract(BlockPistonRetractEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.piston, true)) { event.setCancelled(true); return; } - List blocks = Residence.getNms().getPistonRetractBlocks(event); + List blocks = plugin.getNms().getPistonRetractBlocks(event); if (!event.isSticky()) return; - ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + ClaimedResidence pistonRes = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); for (Block block : blocks) { Location locFrom = block.getLocation(); - ClaimedResidence blockFrom = Residence.getResidenceManager().getByLoc(locFrom); + ClaimedResidence blockFrom = plugin.getResidenceManager().getByLoc(locFrom); if (blockFrom == null) continue; if (blockFrom == pistonRes) @@ -432,22 +432,22 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPistonExtend(BlockPistonExtendEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.piston, true)) { event.setCancelled(true); return; } - ClaimedResidence pistonRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + ClaimedResidence pistonRes = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); BlockFace dir = event.getDirection(); for (Block block : event.getBlocks()) { Location locFrom = block.getLocation(); Location locTo = new Location(block.getWorld(), block.getX() + dir.getModX(), block.getY() + dir.getModY(), block.getZ() + dir.getModZ()); - ClaimedResidence blockFrom = Residence.getResidenceManager().getByLoc(locFrom); - ClaimedResidence blockTo = Residence.getResidenceManager().getByLoc(locTo); + ClaimedResidence blockFrom = plugin.getResidenceManager().getByLoc(locFrom); + ClaimedResidence blockTo = plugin.getResidenceManager().getByLoc(locTo); if (pistonRes == null && blockTo != null && blockTo.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue)) { event.setCancelled(true); @@ -468,13 +468,13 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockFromTo(BlockFromToEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - ClaimedResidence fromRes = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); - ClaimedResidence toRes = Residence.getResidenceManager().getByLoc(event.getToBlock().getLocation()); + ClaimedResidence fromRes = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); + ClaimedResidence toRes = plugin.getResidenceManager().getByLoc(event.getToBlock().getLocation()); - FlagPermissions perms = Residence.getPermsByLoc(event.getToBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getToBlock().getLocation()); boolean hasflow = perms.has(Flags.flow, FlagCombo.TrueOrNone); Material mat = event.getBlock().getType(); @@ -507,14 +507,14 @@ public void onBlockFromTo(BlockFromToEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLandDryFade(BlockFadeEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; Material mat = event.getBlock().getType(); if (mat != Material.SOIL) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getNewState().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getNewState().getLocation()); if (!perms.has(Flags.dryup, true)) { event.getBlock().setData((byte) 7); event.setCancelled(true); @@ -526,14 +526,14 @@ public void onLandDryFade(BlockFadeEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLandDryPhysics(BlockPhysicsEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; Material mat = event.getBlock().getType(); if (mat != Material.SOIL) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.dryup, true)) { event.getBlock().setData((byte) 7); event.setCancelled(true); @@ -544,32 +544,32 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onDispense(BlockDispenseEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; if (event.isCancelled()) return; Location location = new Location(event.getBlock().getWorld(), event.getVelocity().getBlockX(), event.getVelocity().getBlockY(), event.getVelocity().getBlockZ()); - ClaimedResidence targetres = Residence.getResidenceManager().getByLoc(location); + ClaimedResidence targetres = plugin.getResidenceManager().getByLoc(location); - if (targetres == null && location.getBlockY() >= Residence.getConfigManager().getPlaceLevel() && Residence.getConfigManager().getNoPlaceWorlds().contains(location + if (targetres == null && location.getBlockY() >= plugin.getConfigManager().getPlaceLevel() && plugin.getConfigManager().getNoPlaceWorlds().contains(location .getWorld().getName())) { ItemStack mat = event.getItem(); - if (Residence.getConfigManager().isNoLavaPlace()) + if (plugin.getConfigManager().isNoLavaPlace()) if (mat.getType() == Material.LAVA_BUCKET) { event.setCancelled(true); return; } - if (Residence.getConfigManager().isNoWaterPlace()) + if (plugin.getConfigManager().isNoWaterPlace()) if (mat.getType() == Material.WATER_BUCKET) { event.setCancelled(true); return; } } - ClaimedResidence sourceres = Residence.getResidenceManager().getByLoc(event.getBlock().getLocation()); + ClaimedResidence sourceres = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); if ((sourceres == null && targetres != null || sourceres != null && targetres == null || sourceres != null && targetres != null && !sourceres.getName().equals( targetres.getName())) && (event.getItem().getType() == Material.LAVA_BUCKET || event.getItem().getType() == Material.WATER_BUCKET)) { @@ -580,29 +580,29 @@ public void onDispense(BlockDispenseEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLavaWaterFlow(BlockFromToEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; Material mat = event.getBlock().getType(); Location location = event.getToBlock().getLocation(); - if (!Residence.getConfigManager().getNoFlowWorlds().contains(location.getWorld().getName())) + if (!plugin.getConfigManager().getNoFlowWorlds().contains(location.getWorld().getName())) return; - if (location.getBlockY() < Residence.getConfigManager().getFlowLevel()) + if (location.getBlockY() < plugin.getConfigManager().getFlowLevel()) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(location); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(location); if (res != null) return; - if (Residence.getConfigManager().isNoLava()) + if (plugin.getConfigManager().isNoLava()) if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { event.setCancelled(true); return; } - if (Residence.getConfigManager().isNoWater()) + if (plugin.getConfigManager().isNoWater()) if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { event.setCancelled(true); return; @@ -612,9 +612,9 @@ public void onLavaWaterFlow(BlockFromToEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBurn(BlockBurnEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.firespread, true)) event.setCancelled(true); } @@ -622,22 +622,22 @@ public void onBlockBurn(BlockBurnEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockIgnite(BlockIgniteEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; IgniteCause cause = event.getCause(); if (cause == IgniteCause.SPREAD) { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.firespread, true)) event.setCancelled(true); } else if (cause == IgniteCause.FLINT_AND_STEEL) { Player player = event.getPlayer(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlock().getLocation(), player); - if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), Flags.ignite, true) && !Residence.isResAdminOn(player)) { + FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlock().getLocation(), player); + if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), Flags.ignite, true) && !plugin.isResAdminOn(player)) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.ignite.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.ignite.getName()); } } else { - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.ignite, true)) { event.setCancelled(true); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 74c8f36c3..17d4d2843 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -74,7 +74,7 @@ public void onMinecartHopperItemMove(InventoryMoveItemEvent event) { return; HopperMinecart hopper = (HopperMinecart) event.getInitiator().getHolder(); // disabling event on world - if (Residence.isDisabledWorldListener(hopper.getWorld())) + if (plugin.isDisabledWorldListener(hopper.getWorld())) return; Block block = hopper.getLocation().getBlock(); switch (block.getType()) { @@ -90,11 +90,11 @@ public void onMinecartHopperItemMove(InventoryMoveItemEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEndermanChangeBlock(EntityChangeBlockEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getBlock().getWorld())) + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; if (event.getEntityType() != EntityType.ENDERMAN) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getBlock().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.destroy, true)) { event.setCancelled(true); } @@ -106,11 +106,11 @@ public void onEntityInteract(EntityInteractEvent event) { Block block = event.getBlock(); if (block == null) return; - if (Residence.isDisabledWorldListener(block.getWorld())) + if (plugin.isDisabledWorldListener(block.getWorld())) return; Material mat = block.getType(); Entity entity = event.getEntity(); - FlagPermissions perms = Residence.getPermsByLoc(block.getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(block.getLocation()); boolean hastrample = perms.has(Flags.trample, perms.has(Flags.build, true)); if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { event.setCancelled(true); @@ -131,9 +131,9 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { Entity entity = event.getEntity(); if (entity == null) return; - if (Residence.isDisabledWorldListener(entity.getWorld())) + if (plugin.isDisabledWorldListener(entity.getWorld())) return; - if (!Residence.getNms().isAnimal(entity)) + if (!plugin.getNms().isAnimal(entity)) return; Entity damager = event.getDamager(); @@ -155,16 +155,16 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { if (cause == null) return; - if (Residence.isResAdminOn(cause)) + if (plugin.isResAdminOn(cause)) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); if (res == null) return; if (res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { - Residence.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); + plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); event.setCancelled(true); } } @@ -172,7 +172,7 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (event.isCancelled()) return; @@ -180,10 +180,10 @@ public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { Entity entity = event.getEntity(); if (entity == null) return; - if (!Residence.getNms().isAnimal(entity)) + if (!plugin.getNms().isAnimal(entity)) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); if (res == null) return; @@ -207,11 +207,11 @@ public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { if (cause == null) return; - if (Residence.isResAdminOn(cause)) + if (plugin.isResAdminOn(cause)) return; if (res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, FlagCombo.OnlyFalse)) { - Residence.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); + plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); event.setCancelled(true); } } @@ -219,7 +219,7 @@ public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (event.isCancelled()) return; @@ -227,7 +227,7 @@ public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { Entity entity = event.getEntity(); if (entity == null) return; - if (!Residence.getNms().isAnimal(entity)) + if (!plugin.getNms().isAnimal(entity)) return; Entity damager = event.getDamager(); @@ -235,8 +235,8 @@ public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { if (damager instanceof Projectile && ((Projectile) damager).getShooter() instanceof Player || damager instanceof Player) return; - FlagPermissions perms = Residence.getPermsByLoc(entity.getLocation()); - FlagPermissions world = Residence.getWorldFlags().getPerms(entity.getWorld().getName()); + FlagPermissions perms = plugin.getPermsByLoc(entity.getLocation()); + FlagPermissions world = plugin.getWorldFlags().getPerms(entity.getWorld().getName()); if (!perms.has(Flags.animalkilling, world.has(Flags.animalkilling, true))) { event.setCancelled(true); return; @@ -249,12 +249,12 @@ public void OnEntityDeath(EntityDeathEvent event) { LivingEntity ent = event.getEntity(); if (ent == null) return; - if (Residence.isDisabledWorldListener(ent.getWorld())) + if (plugin.isDisabledWorldListener(ent.getWorld())) return; if (ent instanceof Player) return; Location loc = ent.getLocation(); - FlagPermissions perms = Residence.getPermsByLoc(loc); + FlagPermissions perms = plugin.getPermsByLoc(loc); if (!perms.has(Flags.mobitemdrop, true)) { event.getDrops().clear(); } @@ -270,7 +270,7 @@ public void VehicleDestroy(VehicleDestroyEvent event) { if (damager == null) return; - if (Residence.isDisabledWorldListener(damager.getWorld())) + if (plugin.isDisabledWorldListener(damager.getWorld())) return; Vehicle vehicle = event.getVehicle(); @@ -279,7 +279,7 @@ public void VehicleDestroy(VehicleDestroyEvent event) { return; if (damager instanceof Projectile && !(((Projectile) damager).getShooter() instanceof Player) || !(damager instanceof Player)) { - FlagPermissions perms = Residence.getPermsByLoc(vehicle.getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(vehicle.getLocation()); if (!perms.has(Flags.vehicledestroy, true)) { event.setCancelled(true); return; @@ -297,16 +297,16 @@ public void VehicleDestroy(VehicleDestroyEvent event) { if (cause == null) return; - if (Residence.isResAdminOn(cause)) + if (plugin.isResAdminOn(cause)) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(vehicle.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(vehicle.getLocation()); if (res == null) return; if (res.getPermissions().playerHas(cause.getName(), Flags.vehicledestroy, FlagCombo.OnlyFalse)) { - Residence.msg(cause, lm.Residence_FlagDeny, Flags.vehicledestroy.getName(), res.getName()); + plugin.msg(cause, lm.Residence_FlagDeny, Flags.vehicledestroy.getName(), res.getName()); event.setCancelled(true); } } @@ -317,7 +317,7 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { Entity entity = event.getEntity(); if (entity == null) return; - if (Residence.isDisabledWorldListener(entity.getWorld())) + if (plugin.isDisabledWorldListener(entity.getWorld())) return; if (!isMonster(entity)) return; @@ -341,16 +341,16 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { if (cause == null) return; - if (Residence.isResAdminOn(cause)) + if (plugin.isResAdminOn(cause)) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); if (res == null) return; if (res.getPermissions().playerHas(cause.getName(), Flags.mobkilling, FlagCombo.OnlyFalse)) { - Residence.msg(cause, lm.Residence_FlagDeny, Flags.mobkilling.getName(), res.getName()); + plugin.msg(cause, lm.Residence_FlagDeny, Flags.mobkilling.getName(), res.getName()); event.setCancelled(true); } } @@ -358,25 +358,25 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void AnimalLeash(PlayerLeashEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; Player player = event.getPlayer(); Entity entity = event.getEntity(); - if (!Residence.getNms().isAnimal(entity)) + if (!plugin.getNms().isAnimal(entity)) return; - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); if (res == null) return; if (res.getPermissions().playerHas(player.getName(), Flags.leash, FlagCombo.OnlyFalse)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); event.setCancelled(true); } } @@ -387,13 +387,13 @@ public void onWitherSpawn(CreatureSpawnEvent event) { Entity ent = event.getEntity(); if (ent == null) return; - if (Residence.isDisabledWorldListener(ent.getWorld())) + if (plugin.isDisabledWorldListener(ent.getWorld())) return; if (ent.getType() != EntityType.WITHER) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); if (perms.has(Flags.witherspawn, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; @@ -406,10 +406,10 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { Entity ent = event.getEntity(); if (ent == null) return; - if (Residence.isDisabledWorldListener(ent.getWorld())) + if (plugin.isDisabledWorldListener(ent.getWorld())) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getLocation()); - if (Residence.getNms().isAnimal(ent)) { + FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); + if (plugin.getNms().isAnimal(ent)) { if (!perms.has(Flags.animals, true)) { event.setCancelled(true); return; @@ -503,17 +503,17 @@ public void onHangingPlace(HangingPlaceEvent event) { Player player = event.getPlayer(); if (player == null) return; - if (Residence.isDisabledWorldListener(player.getWorld())) + if (plugin.isDisabledWorldListener(player.getWorld())) return; - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getEntity().getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getEntity().getLocation(), player); String pname = player.getName(); String world = player.getWorld().getName(); if (!perms.playerHas(pname, world, Flags.place, perms.playerHas(pname, world, Flags.build, true))) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.place); + plugin.msg(player, lm.Flag_Deny, Flags.place); } } @@ -523,25 +523,25 @@ public void onHangingBreak(HangingBreakByEntityEvent event) { Hanging ent = event.getEntity(); if (ent == null) return; - if (Residence.isDisabledWorldListener(ent.getWorld())) + if (plugin.isDisabledWorldListener(ent.getWorld())) return; if (!(event.getRemover() instanceof Player)) return; Player player = (Player) event.getRemover(); - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; - if (Residence.getResidenceManager().isOwnerOfLocation(player, ent.getLocation())) + if (plugin.getResidenceManager().isOwnerOfLocation(player, ent.getLocation())) return; String pname = player.getName(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player); String world = ent.getWorld().getName(); if (!perms.playerHas(pname, world, Flags.destroy, perms.playerHas(pname, world, Flags.build, true))) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.destroy); + plugin.msg(player, lm.Flag_Deny, Flags.destroy); } } @@ -551,13 +551,13 @@ public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { Hanging ent = event.getEntity(); if (ent == null) return; - if (Residence.isDisabledWorldListener(ent.getWorld())) + if (plugin.isDisabledWorldListener(ent.getWorld())) return; if (event.getRemover() instanceof Player) return; - FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); if (!perms.has(Flags.destroy, perms.has(Flags.build, true))) { event.setCancelled(true); } @@ -569,9 +569,9 @@ public void onEntityCombust(EntityCombustEvent event) { Entity ent = event.getEntity(); if (ent == null) return; - if (Residence.isDisabledWorldListener(ent.getWorld())) + if (plugin.isDisabledWorldListener(ent.getWorld())) return; - FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); if (!perms.has(Flags.burn, true)) { event.setCancelled(true); } @@ -583,20 +583,20 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { Entity ent = event.getEntity(); if (ent == null) return; - if (Residence.isDisabledWorldListener(ent.getWorld())) + if (plugin.isDisabledWorldListener(ent.getWorld())) return; EntityType entity = event.getEntityType(); - FlagPermissions perms = Residence.getPermsByLoc(ent.getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); switch (entity) { case CREEPER: if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) { - if (Residence.getConfigManager().isCreeperExplodeBelow()) { - if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) { + if (plugin.getConfigManager().isCreeperExplodeBelow()) { + if (ent.getLocation().getBlockY() >= plugin.getConfigManager().getCreeperExplodeBelowLevel()) { event.setCancelled(true); ent.remove(); } else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res != null) { event.setCancelled(true); ent.remove(); @@ -611,12 +611,12 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { case PRIMED_TNT: case MINECART_TNT: if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { - if (Residence.getConfigManager().isTNTExplodeBelow()) { - if (ent.getLocation().getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) { + if (plugin.getConfigManager().isTNTExplodeBelow()) { + if (ent.getLocation().getBlockY() >= plugin.getConfigManager().getTNTExplodeBelowLevel()) { event.setCancelled(true); ent.remove(); } else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res != null) { event.setCancelled(true); ent.remove(); @@ -637,7 +637,7 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { break; case WITHER: case WITHER_SKULL: - if (perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) { + if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) { event.setCancelled(true); ent.remove(); } @@ -655,7 +655,7 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { public void onEntityExplode(EntityExplodeEvent event) { // disabling event on world Location loc = event.getLocation(); - if (Residence.isDisabledWorldListener(loc.getWorld())) + if (plugin.isDisabledWorldListener(loc.getWorld())) return; if (event.isCancelled()) return; @@ -663,18 +663,18 @@ public void onEntityExplode(EntityExplodeEvent event) { Entity ent = event.getEntity(); Boolean cancel = false; - FlagPermissions perms = Residence.getPermsByLoc(loc); - FlagPermissions world = Residence.getWorldFlags().getPerms(loc.getWorld().getName()); + FlagPermissions perms = plugin.getPermsByLoc(loc); + FlagPermissions world = plugin.getWorldFlags().getPerms(loc.getWorld().getName()); if (ent != null) { switch (event.getEntityType()) { case CREEPER: if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) - if (Residence.getConfigManager().isCreeperExplodeBelow()) { - if (loc.getBlockY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) + if (plugin.getConfigManager().isCreeperExplodeBelow()) { + if (loc.getBlockY() >= plugin.getConfigManager().getCreeperExplodeBelowLevel()) cancel = true; else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null) cancel = true; } @@ -684,11 +684,11 @@ public void onEntityExplode(EntityExplodeEvent event) { case PRIMED_TNT: case MINECART_TNT: if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { - if (Residence.getConfigManager().isTNTExplodeBelow()) { - if (loc.getBlockY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) + if (plugin.getConfigManager().isTNTExplodeBelow()) { + if (loc.getBlockY() >= plugin.getConfigManager().getTNTExplodeBelowLevel()) cancel = true; else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null) cancel = true; } @@ -703,7 +703,7 @@ public void onEntityExplode(EntityExplodeEvent event) { break; case WITHER: case WITHER_SKULL: - if (perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) + if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) cancel = true; break; default: @@ -724,17 +724,17 @@ public void onEntityExplode(EntityExplodeEvent event) { List preserve = new ArrayList(); for (Block block : event.blockList()) { - FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); + FlagPermissions blockperms = plugin.getPermsByLoc(block.getLocation()); if (ent != null) { switch (event.getEntityType()) { case CREEPER: if (!blockperms.has(Flags.creeper, blockperms.has(Flags.explode, true))) - if (Residence.getConfigManager().isCreeperExplodeBelow()) { - if (block.getY() >= Residence.getConfigManager().getCreeperExplodeBelowLevel()) + if (plugin.getConfigManager().isCreeperExplodeBelow()) { + if (block.getY() >= plugin.getConfigManager().getCreeperExplodeBelowLevel()) preserve.add(block); else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); if (res != null) preserve.add(block); } @@ -744,11 +744,11 @@ public void onEntityExplode(EntityExplodeEvent event) { case PRIMED_TNT: case MINECART_TNT: if (!blockperms.has(Flags.tnt, blockperms.has(Flags.explode, true))) { - if (Residence.getConfigManager().isTNTExplodeBelow()) { - if (block.getY() >= Residence.getConfigManager().getTNTExplodeBelowLevel()) + if (plugin.getConfigManager().isTNTExplodeBelow()) { + if (block.getY() >= plugin.getConfigManager().getTNTExplodeBelowLevel()) preserve.add(block); else { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(block.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); if (res != null) preserve.add(block); } @@ -771,7 +771,7 @@ public void onEntityExplode(EntityExplodeEvent event) { continue; case WITHER: case WITHER_SKULL: - if (blockperms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) + if (blockperms.has(Flags.explode, FlagCombo.OnlyFalse) || blockperms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) preserve.add(block); break; default: @@ -794,7 +794,7 @@ public void onEntityExplode(EntityExplodeEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSplashPotion(EntityChangeBlockEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (event.isCancelled()) return; @@ -804,7 +804,7 @@ public void onSplashPotion(EntityChangeBlockEvent event) { if (ent.getType() != EntityType.WITHER) return; - if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.witherdestruction, FlagCombo.OnlyFalse)) + if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.witherdestruction, FlagCombo.OnlyFalse)) return; event.setCancelled(true); @@ -813,7 +813,7 @@ public void onSplashPotion(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSplashPotion(PotionSplashEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (event.isCancelled()) return; @@ -825,7 +825,7 @@ public void onSplashPotion(PotionSplashEvent event) { boolean harmfull = false; mein: for (PotionEffect one : event.getPotion().getEffects()) { - for (String oneHarm : Residence.getConfigManager().getNegativePotionEffects()) { + for (String oneHarm : plugin.getConfigManager().getNegativePotionEffects()) { if (oneHarm.equalsIgnoreCase(one.getType().getName())) { harmfull = true; break mein; @@ -836,13 +836,13 @@ public void onSplashPotion(PotionSplashEvent event) { return; Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + boolean srcpvp = plugin.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); Iterator it = event.getAffectedEntities().iterator(); while (it.hasNext()) { LivingEntity target = it.next(); if (target.getType() != EntityType.PLAYER) continue; - Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + Boolean tgtpvp = plugin.getPermsByLoc(target.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); if (!srcpvp || !tgtpvp) event.setIntensity(target, 0); } @@ -851,7 +851,7 @@ public void onSplashPotion(PotionSplashEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (event.isCancelled()) return; @@ -861,7 +861,7 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { if (!(entity instanceof Player)) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); if (res == null) return; @@ -885,11 +885,11 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { if (cause == null) return; - if (Residence.isResAdminOn(cause)) + if (plugin.isResAdminOn(cause)) return; - Boolean srcpvp = Residence.getPermsByLoc(cause.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); - Boolean tgtpvp = Residence.getPermsByLoc(entity.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + Boolean srcpvp = plugin.getPermsByLoc(cause.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + Boolean tgtpvp = plugin.getPermsByLoc(entity.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); if (!srcpvp || !tgtpvp) event.setCancelled(true); } @@ -897,7 +897,7 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { @EventHandler public void OnFallDamage(EntityDamageEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (event.isCancelled()) return; @@ -907,7 +907,7 @@ public void OnFallDamage(EntityDamageEvent event) { if (!(ent instanceof Player)) return; - if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.falldamage, FlagCombo.TrueOrNone)) { + if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.falldamage, FlagCombo.TrueOrNone)) { event.setCancelled(true); } } @@ -915,17 +915,17 @@ public void OnFallDamage(EntityDamageEvent event) { @EventHandler public void OnArmorStandFlameDamage(EntityDamageEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (event.isCancelled()) return; if (event.getCause() != DamageCause.FIRE_TICK) return; Entity ent = event.getEntity(); - if (!Residence.getNms().isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) + if (!plugin.getNms().isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) return; - if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { + if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { event.setCancelled(true); ent.setFireTicks(0); } @@ -934,13 +934,13 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockCatchingFire(ProjectileHitEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (!(event.getEntity() instanceof Arrow)) return; Arrow arrow = (Arrow) event.getEntity(); - FlagPermissions perms = Residence.getPermsByLoc(arrow.getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(arrow.getLocation()); if (!perms.has(Flags.pvp, FlagCombo.TrueOrNone)) arrow.setFireTicks(0); @@ -949,7 +949,7 @@ public void onBlockCatchingFire(ProjectileHitEvent event) { @EventHandler public void OnPlayerDamageByLightning(EntityDamageEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (event.isCancelled()) return; @@ -958,14 +958,14 @@ public void OnPlayerDamageByLightning(EntityDamageEvent event) { Entity ent = event.getEntity(); if (!(ent instanceof Player)) return; - if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone)) + if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone)) event.setCancelled(true); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByFireballEvent(EntityDamageByEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (event.isCancelled()) return; @@ -974,7 +974,7 @@ public void onEntityDamageByFireballEvent(EntityDamageByEntityEvent event) { if (dmgr.getType() != EntityType.SMALL_FIREBALL && dmgr.getType() != EntityType.FIREBALL) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); if (perms.has(Flags.fireball, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; @@ -984,7 +984,7 @@ public void onEntityDamageByFireballEvent(EntityDamageByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByWitherEvent(EntityDamageByEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (event.isCancelled()) return; @@ -993,7 +993,7 @@ public void onEntityDamageByWitherEvent(EntityDamageByEntityEvent event) { if (dmgr.getType() != EntityType.WITHER && dmgr.getType() != EntityType.WITHER_SKULL) return; - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); if (perms.has(Flags.witherdamage, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; @@ -1003,12 +1003,12 @@ public void onEntityDamageByWitherEvent(EntityDamageByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (event.isCancelled()) return; - if (event.getEntityType() != EntityType.ENDER_CRYSTAL && event.getEntityType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event + if (event.getEntityType() != EntityType.ENDER_CRYSTAL && event.getEntityType() != EntityType.ITEM_FRAME && !plugin.getNms().isArmorStandEntity(event .getEntityType())) return; @@ -1021,18 +1021,18 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { player = (Player) ((Projectile) dmgr).getShooter(); } else if ((dmgr instanceof Projectile) && (!(((Projectile) dmgr).getShooter() instanceof Player))) { Location loc = event.getEntity().getLocation(); - FlagPermissions perm = Residence.getPermsByLoc(loc); + FlagPermissions perm = plugin.getPermsByLoc(loc); if (perm.has(Flags.destroy, FlagCombo.OnlyFalse)) event.setCancelled(true); return; } else if (dmgr.getType() == EntityType.PRIMED_TNT || dmgr.getType() == EntityType.MINECART_TNT) { - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); if (perms.has(Flags.explode, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; } } else if (dmgr.getType() == EntityType.WITHER_SKULL || dmgr.getType() == EntityType.WITHER) { - FlagPermissions perms = Residence.getPermsByLoc(event.getEntity().getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); if (perms.has(Flags.witherdamage, FlagCombo.OnlyFalse)) { event.setCancelled(true); return; @@ -1040,7 +1040,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { } Location loc = event.getEntity().getLocation(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res == null) return; @@ -1052,17 +1052,17 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (player == null) return; - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; - FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(loc, player); if (event.getEntityType() == EntityType.ITEM_FRAME) { ItemFrame it = (ItemFrame) event.getEntity(); if (it.getItem() != null) { if (!perms.playerHas(player, Flags.container, true)) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.container); + plugin.msg(player, lm.Flag_Deny, Flags.container); } return; } @@ -1070,28 +1070,28 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (!perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true))) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.destroy.getName()); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamage(EntityDamageEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; Entity ent = event.getEntity(); if (ent.hasMetadata("NPC")) return; boolean tamedAnimal = isTamed(ent); - ClaimedResidence area = Residence.getResidenceManager().getByLoc(ent.getLocation()); + ClaimedResidence area = plugin.getResidenceManager().getByLoc(ent.getLocation()); /* Living Entities */ if (event instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; Entity damager = attackevent.getDamager(); if (area != null && ent instanceof Player && damager instanceof Player) { - if (area.getPermissions().has(Flags.overridepvp, false) || Residence.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, + if (area.getPermissions().has(Flags.overridepvp, false) || plugin.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, FlagCombo.OnlyFalse, false)) { Player player = (Player) event.getEntity(); Damageable damage = player; @@ -1104,7 +1104,7 @@ public void onEntityDamage(EntityDamageEvent event) { ClaimedResidence srcarea = null; if (damager != null) { - srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); + srcarea = plugin.getResidenceManager().getByLoc(damager.getLocation()); } boolean srcpvp = true; boolean allowSnowBall = false; @@ -1136,7 +1136,7 @@ public void onEntityDamage(EntityDamageEvent event) { if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { if (attacker != null) - Residence.msg(attacker, lm.General_NoPVPZone); + plugin.msg(attacker, lm.General_NoPVPZone); if (isOnFire) ent.setFireTicks(0); event.setCancelled(true); @@ -1147,9 +1147,9 @@ public void onEntityDamage(EntityDamageEvent event) { if (area == null) { /* World PvP */ if (damager != null) - if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, FlagCombo.TrueOrNone)) { + if (!plugin.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, FlagCombo.TrueOrNone)) { if (attacker != null) - Residence.msg(attacker, lm.General_WorldPVPDisabled); + plugin.msg(attacker, lm.General_WorldPVPDisabled); if (isOnFire) ent.setFireTicks(0); event.setCancelled(true); @@ -1158,9 +1158,9 @@ public void onEntityDamage(EntityDamageEvent event) { /* Attacking from safe zone */ if (attacker != null) { - FlagPermissions aPerm = Residence.getPermsByLoc(attacker.getLocation()); + FlagPermissions aPerm = plugin.getPermsByLoc(attacker.getLocation()); if (!aPerm.has(Flags.pvp, FlagCombo.TrueOrNone)) { - Residence.msg(attacker, lm.General_NoPVPZone); + plugin.msg(attacker, lm.General_NoPVPZone); if (isOnFire) ent.setFireTicks(0); event.setCancelled(true); @@ -1171,7 +1171,7 @@ public void onEntityDamage(EntityDamageEvent event) { /* Normal PvP */ if (!isSnowBall && !area.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone, false) || isSnowBall && !allowSnowBall) { if (attacker != null) - Residence.msg(attacker, lm.General_NoPVPZone); + plugin.msg(attacker, lm.General_NoPVPZone); if (isOnFire) ent.setFireTicks(0); event.setCancelled(true); @@ -1180,7 +1180,7 @@ public void onEntityDamage(EntityDamageEvent event) { } return; } else if ((ent instanceof Player || tamedAnimal) && (damager instanceof Creeper)) { - if (area == null && !Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.creeper, true)) { + if (area == null && !plugin.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.creeper, true)) { event.setCancelled(true); } else if (area != null && !area.getPermissions().has(Flags.creeper, true)) { event.setCancelled(true); @@ -1188,7 +1188,7 @@ public void onEntityDamage(EntityDamageEvent event) { } } if (area == null) { - if (!Residence.getWorldFlags().getPerms(ent.getWorld().getName()).has(Flags.damage, true) && (ent instanceof Player || tamedAnimal)) { + if (!plugin.getWorldFlags().getPerms(ent.getWorld().getName()).has(Flags.damage, true) && (ent instanceof Player || tamedAnimal)) { event.setCancelled(true); } } else { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java index 9b9bc9bb9..1da44b39a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java @@ -1,39 +1,39 @@ -package com.bekvon.bukkit.residence.listeners; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.residence.Residence; - -public class ResidenceFixesListener implements Listener { - - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onAnvilPlace(PlayerInteractEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - ItemStack iih = event.getItem(); - if (iih == null || iih.getType() == Material.AIR || iih.getType() != Material.ANVIL) - return; - BlockFace face = event.getBlockFace(); - Block bclicked = event.getClickedBlock(); - if (bclicked == null) - return; - Location loc = new Location(bclicked.getWorld(), bclicked.getX() + face.getModX(), bclicked.getY() + face.getModY(), - bclicked.getZ() + face.getModZ()); - Block block = loc.getBlock(); - if (block == null || block.getType() == Material.AIR || block.getType() != Material.SKULL && block.getType() != Material.FLOWER_POT) - return; - event.setCancelled(true); - } -} +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; + +public class ResidenceFixesListener implements Listener { + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onAnvilPlace(PlayerInteractEvent event) { + // disabling event on world + if (Residence.getInstance().isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + ItemStack iih = event.getItem(); + if (iih == null || iih.getType() == Material.AIR || iih.getType() != Material.ANVIL) + return; + BlockFace face = event.getBlockFace(); + Block bclicked = event.getClickedBlock(); + if (bclicked == null) + return; + Location loc = new Location(bclicked.getWorld(), bclicked.getX() + face.getModX(), bclicked.getY() + face.getModY(), + bclicked.getZ() + face.getModZ()); + Block block = loc.getBlock(); + if (block == null || block.getType() == Material.AIR || block.getType() != Material.SKULL && block.getType() != Material.FLOWER_POT) + return; + event.setCancelled(true); + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3e5d78dd9..82deb2e03 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -86,8 +86,8 @@ public ResidencePlayerListener(Residence plugin) { lastUpdate = new HashMap(); lastOutsideLoc = new HashMap(); playerToggleChat.clear(); - minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); - chatenabled = Residence.getConfigManager().chatEnabled(); + minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval(); + chatenabled = plugin.getConfigManager().chatEnabled(); for (Player player : Bukkit.getOnlinePlayers()) { lastUpdate.put(player.getName(), System.currentTimeMillis()); } @@ -103,8 +103,8 @@ public void reload() { lastUpdate = new HashMap(); lastOutsideLoc = new HashMap(); playerToggleChat.clear(); - minUpdateTime = Residence.getConfigManager().getMinMoveUpdateInterval(); - chatenabled = Residence.getConfigManager().chatEnabled(); + minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval(); + chatenabled = plugin.getConfigManager().chatEnabled(); for (Player player : Bukkit.getOnlinePlayers()) { lastUpdate.put(player.getName(), System.currentTimeMillis()); } @@ -119,7 +119,7 @@ public void onJump(PlayerMoveEvent event) { if (event.getTo().getY() - event.getFrom().getY() != 0.41999998688697815D) return; - FlagPermissions perms = Residence.getPermsByLoc(player.getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(player.getLocation()); if (perms.has(Flags.jump2, FlagCombo.OnlyTrue)) player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.3))); else if (perms.has(Flags.jump3, FlagCombo.OnlyTrue)) @@ -131,15 +131,15 @@ else if (perms.has(Flags.jump3, FlagCombo.OnlyTrue)) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerGlobalChat(AsyncPlayerChatEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; - if (!Residence.getConfigManager().isGlobalChatEnabled()) + if (!plugin.getConfigManager().isGlobalChatEnabled()) return; - if (!Residence.getConfigManager().isGlobalChatSelfModify()) + if (!plugin.getConfigManager().isGlobalChatSelfModify()) return; Player player = event.getPlayer(); - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); if (rPlayer == null) return; @@ -152,7 +152,7 @@ public void onPlayerGlobalChat(AsyncPlayerChatEvent event) { if (res == null) return; - String honorific = Residence.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); + String honorific = plugin.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); String format = event.getFormat(); format = format.replace("%1$s", honorific + "%1$s"); @@ -163,15 +163,15 @@ public void onPlayerGlobalChat(AsyncPlayerChatEvent event) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerChatGlobalLow(AsyncPlayerChatEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; - if (!Residence.getConfigManager().isGlobalChatEnabled()) + if (!plugin.getConfigManager().isGlobalChatEnabled()) return; - if (Residence.getConfigManager().isGlobalChatSelfModify()) + if (plugin.getConfigManager().isGlobalChatSelfModify()) return; Player player = event.getPlayer(); - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); if (rPlayer == null) return; @@ -184,7 +184,7 @@ public void onPlayerChatGlobalLow(AsyncPlayerChatEvent event) { if (res == null) return; - String honorific = Residence.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); + String honorific = plugin.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); if (honorific.equalsIgnoreCase(" ")) honorific = ""; String format = event.getFormat(); @@ -199,35 +199,35 @@ public void onResidenceBackup(ResidenceFlagChangeEvent event) { if (!event.getFlag().equalsIgnoreCase(Flags.backup.getName())) return; Player player = event.getPlayer(); - if (!Residence.getConfigManager().RestoreAfterRentEnds) + if (!plugin.getConfigManager().RestoreAfterRentEnds) return; - if (!Residence.getConfigManager().SchematicsSaveOnFlagChange) + if (!plugin.getConfigManager().SchematicsSaveOnFlagChange) return; - if (Residence.getSchematicManager() == null) + if (plugin.getSchematicManager() == null) return; if (player != null && !player.hasPermission("residence.backup")) event.setCancelled(true); else - Residence.getSchematicManager().save(event.getResidence()); + plugin.getSchematicManager().save(event.getResidence()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceBackupRename(ResidenceRenameEvent event) { - if (Residence.getSchematicManager() == null) + if (plugin.getSchematicManager() == null) return; - Residence.getSchematicManager().rename(event.getResidence(), event.getNewResidenceName()); + plugin.getSchematicManager().rename(event.getResidence(), event.getNewResidenceName()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceDelete(ResidenceDeleteEvent event) { - if (Residence.getSchematicManager() == null) + if (plugin.getSchematicManager() == null) return; - Residence.getSchematicManager().delete(event.getResidence()); + plugin.getSchematicManager().delete(event.getResidence()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerLogin(PlayerLoginEvent event) { - if (!Residence.getConfigManager().isRentInformOnEnding()) + if (!plugin.getConfigManager().isRentInformOnEnding()) return; final Player player = event.getPlayer(); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @@ -235,21 +235,21 @@ public void onPlayerLogin(PlayerLoginEvent event) { public void run() { if (!player.isOnline()) return; - List list = Residence.getRentManager().getRentedLandsList(player.getName()); + List list = plugin.getRentManager().getRentedLandsList(player.getName()); if (list.isEmpty()) return; for (String one : list) { - RentedLand rentedland = Residence.getRentManager().getRentedLand(one); + RentedLand rentedland = plugin.getRentManager().getRentedLand(one); if (rentedland == null) continue; if (rentedland.AutoPay) continue; - if (rentedland.endTime - System.currentTimeMillis() < Residence.getConfigManager().getRentInformBefore() * 60 * 24 * 7) { - Residence.msg(player, lm.Residence_EndingRent, one, GetTime.getTime(rentedland.endTime)); + if (rentedland.endTime - System.currentTimeMillis() < plugin.getConfigManager().getRentInformBefore() * 60 * 24 * 7) { + plugin.msg(player, lm.Residence_EndingRent, one, GetTime.getTime(rentedland.endTime)); } } } - }, Residence.getConfigManager().getRentInformDelay() * 20L); + }, plugin.getConfigManager().getRentInformDelay() * 20L); } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @@ -257,18 +257,18 @@ public void onFishingRodUse(PlayerFishEvent event) { if (event == null) return; // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); if (event.getCaught() == null) return; - if (Residence.getNms().isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { - FlagPermissions perm = Residence.getPermsByLoc(event.getCaught().getLocation()); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getCaught().getLocation()); + if (plugin.getNms().isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { + FlagPermissions perm = plugin.getPermsByLoc(event.getCaught().getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getCaught().getLocation()); if (perm.has(Flags.hook, FlagCombo.OnlyFalse)) { event.setCancelled(true); if (res != null) - Residence.msg(player, lm.Residence_FlagDeny, Flags.hook.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.hook.getName(), res.getName()); return; } } @@ -315,7 +315,7 @@ public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { switch (event.getNewState()) { case NEITHER: case FALSE: - if (Residence.getVersionChecker().GetVersion() > 1900 && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + if (plugin.getVersionChecker().GetVersion() > 1900 && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) for (Player one : event.getResidence().getPlayersInResidence()) one.setGlowing(false); break; @@ -323,7 +323,7 @@ public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { break; case TRUE: if (event.getFlag().equalsIgnoreCase(Flags.glow.getName())) - if (Residence.getVersionChecker().GetVersion() > 1900) + if (plugin.getVersionChecker().GetVersion() > 1900) for (Player one : event.getResidence().getPlayersInResidence()) one.setGlowing(true); break; @@ -352,12 +352,12 @@ public void onFlagChangeWSpeed(ResidenceFlagChangeEvent event) { case TRUE: if (event.getFlag().equalsIgnoreCase(Flags.wspeed1.getName())) { for (Player one : event.getResidence().getPlayersInResidence()) - one.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); + one.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); if (event.getResidence().getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) event.getResidence().getPermissions().setFlag(Flags.wspeed2.getName(), FlagState.NEITHER); } else if (event.getFlag().equalsIgnoreCase(Flags.wspeed2.getName())) { for (Player one : event.getResidence().getPlayersInResidence()) - one.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); + one.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); if (event.getResidence().getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) event.getResidence().getPermissions().setFlag(Flags.wspeed1.getName(), FlagState.NEITHER); } @@ -427,19 +427,19 @@ public void onFlagChangeSunRain(ResidenceFlagChangeEvent event) { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onCommand(PlayerCommandPreprocessEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); - String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + String resname = plugin.getPlayerListener().getCurrentResidenceName(player.getName()); if (resname == null) return; - ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + ClaimedResidence res = plugin.getResidenceManager().getByName(resname); if (res == null) return; if (!res.getPermissions().playerHas(player, Flags.command, FlagCombo.OnlyFalse)) return; - if (Residence.getPermissionManager().isResidenceAdmin(player)) + if (plugin.getPermissionManager().isResidenceAdmin(player)) return; if (player.hasPermission("residence.flag.command.bypass")) @@ -482,7 +482,7 @@ else if (white == 0) return; event.setCancelled(true); - Residence.msg(player, lm.Residence_FlagDeny, Flags.command.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.command.getName(), res.getName()); } @@ -525,7 +525,7 @@ public void onSignInteract(PlayerInteractEvent event) { if (event.getPlayer() == null) return; // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Block block = event.getClickedBlock(); @@ -540,7 +540,7 @@ public void onSignInteract(PlayerInteractEvent event) { Location loc = block.getLocation(); - for (Signs one : Residence.getSignUtil().getSigns().GetAllSigns()) { + for (Signs one : plugin.getSignUtil().getSigns().GetAllSigns()) { if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) continue; if (one.GetLocation().getBlockX() != loc.getBlockX()) @@ -573,8 +573,8 @@ public void onSignInteract(PlayerInteractEvent event) { break; } } else if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - if (ForRent && res.isRented() && Residence.getRentManager().getRentingPlayer(res).equals(player.getName())) { - Residence.getRentManager().payRent(player, res, false); + if (ForRent && res.isRented() && plugin.getRentManager().getRentingPlayer(res).equals(player.getName())) { + plugin.getRentManager().payRent(player, res, false); } } } @@ -583,7 +583,7 @@ public void onSignInteract(PlayerInteractEvent event) { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onSignCreate(SignChangeEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Block block = event.getBlock(); @@ -592,7 +592,7 @@ public void onSignCreate(SignChangeEvent event) { Sign sign = (Sign) block.getState(); - if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(Residence.msg(lm.Sign_TopLine))) + if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(plugin.msg(lm.Sign_TopLine))) return; Signs signInfo = new Signs(); @@ -612,46 +612,46 @@ public void onSignCreate(SignChangeEvent event) { if (!event.getLine(3).equalsIgnoreCase("")) resname += "." + event.getLine(3); - res = Residence.getResidenceManager().getByName(resname); + res = plugin.getResidenceManager().getByName(resname); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } landName = res.getName(); } else { - res = Residence.getResidenceManager().getByLoc(loc); - landName = Residence.getResidenceManager().getNameByLoc(loc); + res = plugin.getResidenceManager().getByLoc(loc); + landName = plugin.getResidenceManager().getNameByLoc(loc); } if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } final ClaimedResidence residence = res; - boolean ForSale = Residence.getTransactionManager().isForSale(landName); - boolean ForRent = Residence.getRentManager().isForRent(landName); + boolean ForSale = plugin.getTransactionManager().isForSale(landName); + boolean ForRent = plugin.getRentManager().isForRent(landName); int category = 1; - if (Residence.getSignUtil().getSigns().GetAllSigns().size() > 0) - category = Residence.getSignUtil().getSigns().GetAllSigns().get(Residence.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; + if (plugin.getSignUtil().getSigns().GetAllSigns().size() > 0) + category = plugin.getSignUtil().getSigns().GetAllSigns().get(plugin.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; if (ForSale || ForRent) { signInfo.setCategory(category); signInfo.setResidence(res); signInfo.setLocation(loc); // signInfo.updateLocation(); - Residence.getSignUtil().getSigns().addSign(signInfo); - Residence.getSignUtil().saveSigns(); + plugin.getSignUtil().getSigns().addSign(signInfo); + plugin.getSignUtil().saveSigns(); } Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { - Residence.getSignUtil().CheckSign(residence); + plugin.getSignUtil().CheckSign(residence); } }, 5L); } @@ -659,7 +659,7 @@ public void run() { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignDestroy(BlockBreakEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; if (event.isCancelled()) return; @@ -674,7 +674,7 @@ public void onSignDestroy(BlockBreakEvent event) { Location loc = block.getLocation(); - for (Signs one : Residence.getSignUtil().getSigns().GetAllSigns()) { + for (Signs one : plugin.getSignUtil().getSigns().GetAllSigns()) { if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) continue; @@ -685,8 +685,8 @@ public void onSignDestroy(BlockBreakEvent event) { if (one.GetLocation().getBlockZ() != loc.getBlockZ()) continue; - Residence.getSignUtil().getSigns().removeSign(one); - Residence.getSignUtil().saveSigns(); + plugin.getSignUtil().getSigns().removeSign(one); + plugin.getSignUtil().saveSigns(); break; } } @@ -697,27 +697,27 @@ public void onPlayerQuit(PlayerQuitEvent event) { currentRes.remove(pname); lastUpdate.remove(pname); lastOutsideLoc.remove(pname); - Residence.getChatManager().removeFromChannel(pname); - Residence.getPlayerListener().removePlayerResidenceChat(pname); - Residence.getOfflinePlayerMap().put(pname, event.getPlayer()); - if (Residence.getAutoSelectionManager().getList().containsKey(pname.toLowerCase())) - Residence.getAutoSelectionManager().getList().remove(pname); + plugin.getChatManager().removeFromChannel(pname); + plugin.getPlayerListener().removePlayerResidenceChat(pname); + plugin.getOfflinePlayerMap().put(pname, event.getPlayer()); + if (plugin.getAutoSelectionManager().getList().containsKey(pname.toLowerCase())) + plugin.getAutoSelectionManager().getList().remove(pname); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerJoin(PlayerChangedWorldEvent event) { Player player = event.getPlayer(); - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.turnResAdminOn(player); + if (plugin.getPermissionManager().isResidenceAdmin(player)) { + plugin.turnResAdminOn(player); } - Residence.getPermissionManager().updateGroupNameForPlayer(player, true); + plugin.getPermissionManager().updateGroupNameForPlayer(player, true); - FlagPermissions perms = Residence.getPermsByLocForPlayer(player.getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); - f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !Residence.isResAdminOn(player) && !player.hasPermission( + f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null && res.isOwner(player)) break f; @@ -730,18 +730,18 @@ public void onPlayerJoin(PlayerChangedWorldEvent event) { for (int i = 0; i < maxH; i++) { location.setY(from - i); Block block = location.getBlock(); - if (!Residence.getNms().isEmptyBlock(block)) { + if (!plugin.getNms().isEmptyBlock(block)) { location.setY(from - i + 1); break; } if (location.getBlockY() <= 0) { player.setFlying(false); player.setAllowFlight(false); - Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); return; } } - Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); player.teleport(location); player.setFlying(false); player.setAllowFlight(false); @@ -752,28 +752,28 @@ public void onPlayerJoin(PlayerChangedWorldEvent event) { public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); lastUpdate.put(player.getName(), 0L); - if (Residence.getPermissionManager().isResidenceAdmin(player)) { - Residence.turnResAdminOn(player); + if (plugin.getPermissionManager().isResidenceAdmin(player)) { + plugin.turnResAdminOn(player); } handleNewLocation(player, player.getLocation(), true); - Residence.getPlayerManager().playerJoin(player); - Residence.getPermissionManager().updateGroupNameForPlayer(player, true); + plugin.getPlayerManager().playerJoin(player); + plugin.getPermissionManager().updateGroupNameForPlayer(player, true); if (player.hasPermission("residence.versioncheck")) { - Residence.getVersionChecker().VersionCheck(player); + plugin.getVersionChecker().VersionCheck(player); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerSpawn(PlayerRespawnEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getRespawnLocation().getWorld())) + if (plugin.isDisabledWorldListener(event.getRespawnLocation().getWorld())) return; Location loc = event.getRespawnLocation(); Boolean bed = event.isBedSpawn(); Player player = event.getPlayer(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res == null) { return; } @@ -783,23 +783,23 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { if (bed) { loc = player.getWorld().getSpawnLocation(); } - res = Residence.getResidenceManager().getByLoc(loc); + res = plugin.getResidenceManager().getByLoc(loc); if (res != null && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse)) { loc = res.getOutsideFreeLoc(loc, player); } - Residence.msg(player, lm.General_NoSpawn); + plugin.msg(player, lm.General_NoSpawn); event.setRespawnLocation(loc); } @SuppressWarnings("deprecation") - private static boolean isContainer(Material mat, Block block) { + private boolean isContainer(Material mat, Block block) { return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container.getName()) - || Residence.getConfigManager().getCustomContainers().contains(block.getTypeId()); + || plugin.getConfigManager().getCustomContainers().contains(block.getTypeId()); } @SuppressWarnings("deprecation") - private static boolean isCanUseEntity_RClickOnly(Material mat, Block block) { + private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { switch (mat.name()) { case "ITEM_FRAME": @@ -823,12 +823,12 @@ private static boolean isCanUseEntity_RClickOnly(Material mat, Block block) { case "DAYLIGHT_DETECTOR_INVERTED": return true; default: - return Residence.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); + return plugin.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); } } - private static boolean isCanUseEntity(Material mat, Block block) { - return Residence.getNms().isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); + private boolean isCanUseEntity(Material mat, Block block) { + return plugin.getNms().isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -836,7 +836,7 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { if (event.getPlayer() == null) return; // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; if (event.getAction() != Action.LEFT_CLICK_BLOCK) return; @@ -852,13 +852,13 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { return; Player player = event.getPlayer(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); if (relativeBlock.getType() == Material.FIRE) { boolean hasplace = perms.playerHas(player.getName(), player.getWorld().getName(), Flags.place, perms.playerHas(player.getName(), player.getWorld().getName(), Flags.build, true)); if (!hasplace) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); return; } } @@ -869,7 +869,7 @@ public void onPlatePress(PlayerInteractEvent event) { if (event.getPlayer() == null) return; // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; if (event.getAction() != Action.PHYSICAL) return; @@ -878,13 +878,13 @@ public void onPlatePress(PlayerInteractEvent event) { return; Material mat = block.getType(); Player player = event.getPlayer(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); String world = player.getWorld().getName(); - boolean resadmin = Residence.isResAdminOn(player); + boolean resadmin = plugin.isResAdminOn(player); if (!resadmin) { boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); boolean haspressure = perms.playerHas(player.getName(), world, Flags.pressure, hasuse); - if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE || Residence.getNms().isPlate(mat))) { + if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE || plugin.getNms().isPlate(mat))) { event.setCancelled(true); return; } @@ -902,7 +902,7 @@ public void onSelection(PlayerInteractEvent event) { if (event.getPlayer() == null) return; // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; @@ -911,18 +911,18 @@ public void onSelection(PlayerInteractEvent event) { @SuppressWarnings("deprecation") int heldItemId = player.getItemInHand().getTypeId(); - if (heldItemId != Residence.getConfigManager().getSelectionTooldID()) + if (heldItemId != plugin.getConfigManager().getSelectionTooldID()) return; - if (Residence.getWepid() == Residence.getConfigManager().getSelectionTooldID()) + if (plugin.getWepid() == plugin.getConfigManager().getSelectionTooldID()) return; if (player.getGameMode() == GameMode.CREATIVE) event.setCancelled(true); - boolean resadmin = Residence.isResAdminOn(player); + boolean resadmin = plugin.isResAdminOn(player); - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group .canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { @@ -931,20 +931,20 @@ public void onSelection(PlayerInteractEvent event) { if (event.getAction() == Action.LEFT_CLICK_BLOCK) { Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc1(player, loc, true); - Residence.msg(player, lm.Select_PrimaryPoint, Residence.msg(lm.General_CoordsTop, loc.getBlockX(), loc.getBlockY(), + plugin.getSelectionManager().placeLoc1(player, loc, true); + plugin.msg(player, lm.Select_PrimaryPoint, plugin.msg(lm.General_CoordsTop, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); event.setCancelled(true); - } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && Residence.getNms().isMainHand(event)) { + } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && plugin.getNms().isMainHand(event)) { Location loc = block.getLocation(); - Residence.getSelectionManager().placeLoc2(player, loc, true); - Residence.msg(player, lm.Select_SecondaryPoint, Residence.msg(lm.General_CoordsBottom, loc.getBlockX(), loc + plugin.getSelectionManager().placeLoc2(player, loc, true); + plugin.msg(player, lm.Select_SecondaryPoint, plugin.msg(lm.General_CoordsBottom, loc.getBlockX(), loc .getBlockY(), loc.getBlockZ())); event.setCancelled(true); } - if (Residence.getSelectionManager().hasPlacedBoth(player.getName())) - Residence.getSelectionManager().showSelectionInfoInActionBar(player); + if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) + plugin.getSelectionManager().showSelectionInfoInActionBar(player); } return; } @@ -955,7 +955,7 @@ public void onInfoCheck(PlayerInteractEvent event) { if (event.getPlayer() == null) return; // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; if (event.getAction() != Action.LEFT_CLICK_BLOCK) return; @@ -970,15 +970,15 @@ public void onInfoCheck(PlayerInteractEvent event) { int heldItemId = item.getTypeId(); - if (heldItemId != Residence.getConfigManager().getInfoToolID()) + if (heldItemId != plugin.getConfigManager().getInfoToolID()) return; Location loc = block.getLocation(); - String res = Residence.getResidenceManager().getNameByLoc(loc); + String res = plugin.getResidenceManager().getNameByLoc(loc); if (res != null) - Residence.getResidenceManager().printAreaInfo(res, player, false); + plugin.getResidenceManager().printAreaInfo(res, player, false); else - Residence.msg(player, lm.Residence_NoResHere); + plugin.msg(player, lm.Residence_NoResHere); event.setCancelled(true); return; @@ -990,10 +990,10 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (event.getPlayer() == null) return; // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); - ItemStack iih = Residence.getNms().itemInMainHand(player); + ItemStack iih = plugin.getNms().itemInMainHand(player); Material heldItem = iih.getType(); int heldItemId = iih.getTypeId(); Block block = event.getClickedBlock(); @@ -1003,9 +1003,9 @@ public void onPlayerInteract(PlayerInteractEvent event) { Material mat = block.getType(); if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK - || Residence.getNms().isCanUseEntity_BothClick(mat, block))) { - if (heldItemId != Residence.getConfigManager().getSelectionTooldID() && heldItemId != Residence.getConfigManager().getInfoToolID() - && heldItem != Material.INK_SACK && !Residence.getNms().isArmorStandMaterial(heldItem) && !Residence.getNms().isBoat(heldItem)) { + || plugin.getNms().isCanUseEntity_BothClick(mat, block))) { + if (heldItemId != plugin.getConfigManager().getSelectionTooldID() && heldItemId != plugin.getConfigManager().getInfoToolID() + && heldItem != Material.INK_SACK && !plugin.getNms().isArmorStandMaterial(heldItem) && !plugin.getNms().isBoat(heldItem)) { return; } } @@ -1014,10 +1014,10 @@ public void onPlayerInteract(PlayerInteractEvent event) { return; String world = player.getWorld().getName(); - String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); - boolean resadmin = Residence.isResAdminOn(player); - if (!resadmin && !Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - Residence.msg(player, lm.General_ItemBlacklisted); + String permgroup = plugin.getPermissionManager().getGroupNameByPlayer(player); + boolean resadmin = plugin.isResAdminOn(player); + if (!resadmin && !plugin.getItemManager().isAllowed(heldItem, permgroup, world)) { + plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; } @@ -1026,23 +1026,23 @@ public void onPlayerInteract(PlayerInteractEvent event) { return; int blockId = block.getTypeId(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(block.getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); if (heldItem != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (heldItem == Material.INK_SACK) { - if (Residence.getNms().itemInMainHand(player).getData().getData() == 15 && block.getType() == Material.GRASS || iih.getData().getData() == 3 + if (plugin.getNms().itemInMainHand(player).getData().getData() == 15 && block.getType() == Material.GRASS || iih.getData().getData() == 3 && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { - perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player.getName(), world, Flags.build, true)) { - Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); event.setCancelled(true); return; } } } - if (Residence.getNms().isArmorStandMaterial(heldItem) || Residence.getNms().isBoat(heldItem)) { - perms = Residence.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (plugin.getNms().isArmorStandMaterial(heldItem) || plugin.getNms().isBoat(heldItem)) { + perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player.getName(), world, Flags.build, true)) { - Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); event.setCancelled(true); return; } @@ -1060,32 +1060,32 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (hasuse || checkMat.getValue().equals(Flags.container.getName())) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, checkMat.getValue()); + plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); return; } event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.use); + plugin.msg(player, lm.Flag_Deny, Flags.use); return; } - if (Residence.getConfigManager().getCustomContainers().contains(blockId)) { + if (plugin.getConfigManager().getCustomContainers().contains(blockId)) { if (!perms.playerHas(player.getName(), world, Flags.container, hasuse)) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.container.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.container.getName()); return; } } - if (Residence.getConfigManager().getCustomBothClick().contains(blockId)) { + if (plugin.getConfigManager().getCustomBothClick().contains(blockId)) { if (!hasuse) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.use.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.use.getName()); return; } } - if (Residence.getConfigManager().getCustomRightClick().contains(blockId) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (plugin.getConfigManager().getCustomRightClick().contains(blockId) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (!hasuse) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.use.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.use.getName()); return; } } @@ -1096,10 +1096,10 @@ public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; Entity ent = event.getRightClicked(); @@ -1107,10 +1107,10 @@ public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { if (ent.getType() != EntityType.VILLAGER) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res != null && res.getPermissions().playerHas(player, Flags.trade, FlagCombo.OnlyFalse)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.trade.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.trade.getName(), res.getName()); event.setCancelled(true); } } @@ -1118,10 +1118,10 @@ public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; Entity ent = event.getRightClicked(); @@ -1129,14 +1129,14 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { if (ent.getType() != EntityType.HORSE) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); event.setCancelled(true); } else if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.riding, FlagCombo.TrueOrNone)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); event.setCancelled(true); } } @@ -1144,10 +1144,10 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; Entity ent = event.getRightClicked(); @@ -1155,11 +1155,11 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) if (ent.getType() != EntityType.MINECART_CHEST && ent.getType() != EntityType.MINECART_HOPPER) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); event.setCancelled(true); } } @@ -1167,10 +1167,10 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; Entity ent = event.getRightClicked(); @@ -1178,11 +1178,11 @@ public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { if (ent.getType() != EntityType.MINECART && ent.getType() != EntityType.BOAT) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.riding, FlagCombo.OnlyFalse)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); event.setCancelled(true); } } @@ -1190,10 +1190,10 @@ public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; Entity ent = event.getRightClicked(); @@ -1201,11 +1201,11 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { if (ent.getType() != EntityType.SHEEP) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.dye, FlagCombo.OnlyFalse)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.dye.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.dye.getName(), res.getName()); event.setCancelled(true); } } @@ -1213,23 +1213,23 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerShearEntity(PlayerShearEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; if (event.isCancelled()) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; Entity ent = event.getEntity(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(ent.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.shear, FlagCombo.OnlyFalse)) { - Residence.msg(player, lm.Residence_FlagDeny, Flags.shear.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.shear.getName(), res.getName()); event.setCancelled(true); } @@ -1239,10 +1239,10 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; Entity ent = event.getRightClicked(); @@ -1256,38 +1256,38 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { return; } - Material heldItem = Residence.getNms().itemInMainHand(player).getType(); + Material heldItem = plugin.getNms().itemInMainHand(player).getType(); - FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player); String world = player.getWorld().getName(); - String permgroup = Residence.getPermissionManager().getGroupNameByPlayer(player); - if (!Residence.getItemManager().isAllowed(heldItem, permgroup, world)) { - Residence.msg(player, lm.General_ItemBlacklisted); + String permgroup = plugin.getPermissionManager().getGroupNameByPlayer(player); + if (!plugin.getItemManager().isAllowed(heldItem, permgroup, world)) { + plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; } if (!perms.playerHas(player.getName(), world, Flags.container, perms.playerHas(player.getName(), world, Flags.use, true))) { event.setCancelled(true); - Residence.msg(player, lm.Flag_Deny, Flags.container.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.container.getName()); } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; Location loc = event.getBlockClicked().getLocation(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null) { - if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { - if (Residence.getRentManager().isRented(res.getName())) { - Residence.msg(player, lm.Rent_ModifyDeny); + if (plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem()) { + if (plugin.getRentManager().isRented(res.getName())) { + plugin.msg(player, lm.Rent_ModifyDeny); event.setCancelled(true); return; } @@ -1295,39 +1295,39 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { Material mat = event.getBucket(); if ((res.getPermissions().playerHas(player, Flags.build, FlagCombo.OnlyFalse)) - && Residence.getConfigManager().getNoPlaceWorlds().contains(loc.getWorld().getName())) { + && plugin.getConfigManager().getNoPlaceWorlds().contains(loc.getWorld().getName())) { if (mat == Material.LAVA_BUCKET || mat == Material.WATER_BUCKET) { - Residence.msg(player, lm.Flag_Deny, Flags.build); + plugin.msg(player, lm.Flag_Deny, Flags.build); event.setCancelled(true); return; } } } - FlagPermissions perms = Residence.getPermsByLocForPlayer(loc, player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(loc, player); if (!perms.playerHas(player, Flags.build, true)) { - Residence.msg(player, lm.Flag_Deny, Flags.build.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); event.setCancelled(true); return; } Material mat = event.getBucket(); - int level = Residence.getConfigManager().getPlaceLevel(); - if (res == null && Residence.getConfigManager().isNoLavaPlace() && loc.getBlockY() >= level - 1 && Residence.getConfigManager() + int level = plugin.getConfigManager().getPlaceLevel(); + if (res == null && plugin.getConfigManager().isNoLavaPlace() && loc.getBlockY() >= level - 1 && plugin.getConfigManager() .getNoPlaceWorlds().contains(loc.getWorld().getName())) { if (mat == Material.LAVA_BUCKET) { - if (!Residence.msg(lm.General_CantPlaceLava).equalsIgnoreCase("")) - Residence.msg(player, lm.General_CantPlaceLava, level); + if (!plugin.msg(lm.General_CantPlaceLava).equalsIgnoreCase("")) + plugin.msg(player, lm.General_CantPlaceLava, level); event.setCancelled(true); return; } } - if (res == null && Residence.getConfigManager().isNoWaterPlace() && loc.getBlockY() >= level - 1 && Residence.getConfigManager() + if (res == null && plugin.getConfigManager().isNoWaterPlace() && loc.getBlockY() >= level - 1 && plugin.getConfigManager() .getNoPlaceWorlds().contains(loc.getWorld().getName())) if (mat == Material.WATER_BUCKET) { - if (!Residence.msg(lm.General_CantPlaceWater).equalsIgnoreCase("")) - Residence.msg(player, lm.General_CantPlaceWater, level); + if (!plugin.msg(lm.General_CantPlaceWater).equalsIgnoreCase("")) + plugin.msg(player, lm.General_CantPlaceWater, level); event.setCancelled(true); return; } @@ -1336,27 +1336,27 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBucketFill(PlayerBucketFillEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); if (res != null) { - if (Residence.getConfigManager().preventRentModify() && Residence.getConfigManager().enabledRentSystem()) { - if (Residence.getRentManager().isRented(res.getName())) { - Residence.msg(player, lm.Rent_ModifyDeny); + if (plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem()) { + if (plugin.getRentManager().isRented(res.getName())) { + plugin.msg(player, lm.Rent_ModifyDeny); event.setCancelled(true); return; } } } - FlagPermissions perms = Residence.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); if (!hasdestroy) { - Residence.msg(player, lm.Flag_Deny, Flags.destroy.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.destroy.getName()); event.setCancelled(true); } } @@ -1364,7 +1364,7 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerTeleport(PlayerTeleportEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); @@ -1373,39 +1373,39 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { Location loc = event.getTo(); - if (Residence.isResAdminOn(player)) { + if (plugin.isResAdminOn(player)) { handleNewLocation(player, loc, false); return; } - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res == null) return; if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player)) { event.setCancelled(true); - Residence.msg(player, lm.Residence_MoveDeny, res.getName()); + plugin.msg(player, lm.Residence_MoveDeny, res.getName()); return; } } else if (event.getCause() == TeleportCause.ENDER_PEARL) { if (res.getPermissions().playerHas(player, Flags.enderpearl, FlagCombo.OnlyFalse)) { event.setCancelled(true); - Residence.msg(player, lm.Residence_FlagDeny, Flags.enderpearl.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.enderpearl.getName(), res.getName()); return; } } - if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && Residence.getConfigManager().isBlockAnyTeleportation()) { + if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && plugin.getConfigManager().isBlockAnyTeleportation()) { if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { event.setCancelled(true); - Residence.msg(player, lm.General_TeleportDeny, res.getName()); + plugin.msg(player, lm.General_TeleportDeny, res.getName()); return; } } - if (Residence.getNms().isChorusTeleport(event.getCause())) { + if (plugin.getNms().isChorusTeleport(event.getCause())) { if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.chorustp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { event.setCancelled(true); - Residence.msg(player, lm.Residence_FlagDeny, Flags.chorustp.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.chorustp.getName(), res.getName()); return; } } @@ -1415,7 +1415,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerDeath(final PlayerDeathEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getEntity().getWorld())) + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; Player player = event.getEntity(); if (player == null) @@ -1423,7 +1423,7 @@ public void onPlayerDeath(final PlayerDeathEvent event) { if (player.hasMetadata("NPC")) return; Location loc = player.getLocation(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res == null) return; @@ -1464,12 +1464,12 @@ public void onResidenceChange(ResidenceChangedEvent event) { if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); - if (Residence.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + if (plugin.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(false); } if (res != null && ResOld != null && res != ResOld) { - if (Residence.getVersionChecker().GetVersion() > 1900) { + if (plugin.getVersionChecker().GetVersion() > 1900) { if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(true); else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) @@ -1487,12 +1487,12 @@ else if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) && !res.ge player.resetPlayerTime(); if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); + player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) player.setWalkSpeed(0.2F); if (res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) { - player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); + player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); } else if (ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) player.setWalkSpeed(0.2F); @@ -1508,7 +1508,7 @@ else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res. } if (res != null && ResOld == null) { - if (Residence.getVersionChecker().GetVersion() > 1900) { + if (plugin.getVersionChecker().GetVersion() > 1900) { if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(true); } @@ -1520,10 +1520,10 @@ else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res. player.setPlayerTime(14000L, false); if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed1().floatValue()); + player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); if (res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - player.setWalkSpeed(Residence.getConfigManager().getWalkSpeed2().floatValue()); + player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) player.setPlayerWeather(WeatherType.CLEAR); @@ -1536,7 +1536,7 @@ else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res. @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerMove(PlayerMoveEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); if (player == null) @@ -1558,25 +1558,25 @@ public void onPlayerMove(PlayerMoveEvent event) { Long last = lastUpdate.get(name); long now = System.currentTimeMillis(); if (last != null) - if (now - last < Residence.getConfigManager().getMinMoveUpdateInterval()) + if (now - last < plugin.getConfigManager().getMinMoveUpdateInterval()) return; this.lastUpdate.put(name, now); handleNewLocation(player, locto, true); - if (!Residence.getTeleportDelayMap().isEmpty() && Residence.getConfigManager().getTeleportDelay() > 0 && Residence.getTeleportDelayMap().contains(player + if (!plugin.getTeleportDelayMap().isEmpty() && plugin.getConfigManager().getTeleportDelay() > 0 && plugin.getTeleportDelayMap().contains(player .getName())) { - Residence.getTeleportDelayMap().remove(player.getName()); - Residence.msg(player, lm.General_TeleportCanceled); - if (Residence.getConfigManager().isTeleportTitleMessage()) - Residence.getAB().sendTitle(player, "", ""); + plugin.getTeleportDelayMap().remove(player.getName()); + plugin.msg(player, lm.General_TeleportCanceled); + if (plugin.getConfigManager().isTeleportTitleMessage()) + plugin.getAB().sendTitle(player, "", ""); } } public void handleNewLocation(final Player player, Location loc, boolean move) { String pname = player.getName(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); ClaimedResidence orres = res; String areaname = null; @@ -1592,13 +1592,13 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { ClaimedResidence ResOld = null; if (currentRes.containsKey(pname)) { - ResOld = Residence.getResidenceManager().getByName(currentRes.get(pname)); + ResOld = plugin.getResidenceManager().getByName(currentRes.get(pname)); if (ResOld == null) { currentRes.remove(pname); } else { if (res != null && ResOld.getName().equals(res.getName())) { - f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, FlagCombo.OnlyTrue) && !Residence.isResAdminOn(player) && !player.hasPermission( + f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { if (res.isOwner(player)) break f; @@ -1611,7 +1611,7 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { for (int i = 0; i < maxH; i++) { location.setY(from - i); Block block = location.getBlock(); - if (!Residence.getNms().isEmptyBlock(block)) { + if (!plugin.getNms().isEmptyBlock(block)) { location.setY(from - i + 1); break; } @@ -1621,11 +1621,11 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { player.teleport(lastLoc); else player.teleport(res.getOutsideFreeLoc(loc, player)); - Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); return; } } - Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); player.teleport(location); player.setFlying(false); player.setAllowFlight(false); @@ -1637,11 +1637,11 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { } } - if (!Residence.getAutoSelectionManager().getList().isEmpty()) { + if (!plugin.getAutoSelectionManager().getList().isEmpty()) { Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { - Residence.getAutoSelectionManager().UpdateSelection(player); + plugin.getAutoSelectionManager().UpdateSelection(player); return; } }); @@ -1654,14 +1654,14 @@ public void run() { // New ResidenceChangeEvent ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); - Residence.getServ().getPluginManager().callEvent(chgEvent); + plugin.getServ().getPluginManager().callEvent(chgEvent); if (leave != null && !leave.equals("")) { - if (Residence.getConfigManager().useActionBar()) { - Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) + if (plugin.getConfigManager().useActionBar()) { + plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) .toString()); } else { - Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); } } currentRes.remove(pname); @@ -1670,19 +1670,19 @@ public void run() { } if (move) { - if (res.getPermissions().playerHas(pname, Flags.move, FlagCombo.OnlyFalse) && !Residence.isResAdminOn(player) && !res.isOwner(player) && !player.hasPermission( + if (res.getPermissions().playerHas(pname, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !player.hasPermission( "residence.admin.move")) { Location lastLoc = lastOutsideLoc.get(pname); - if (Residence.getConfigManager().BounceAnimation()) { + if (plugin.getConfigManager().BounceAnimation()) { Visualizer v = new Visualizer(player); v.setErrorAreas(res); v.setOnce(true); - Residence.getSelectionManager().showBounds(player, v); + plugin.getSelectionManager().showBounds(player, v); } - ClaimedResidence preRes = Residence.getResidenceManager().getByLoc(lastLoc); + ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); if (preRes != null && preRes.getPermissions().playerHas(pname, Flags.tp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { Location newLoc = res.getOutsideFreeLoc(loc, player); @@ -1694,16 +1694,16 @@ public void run() { player.teleport(newLoc); } - if (Residence.getConfigManager().useActionBar()) { - Residence.getAB().send(player, Residence.msg(lm.Residence_MoveDeny, orres.getName())); + if (plugin.getConfigManager().useActionBar()) { + plugin.getAB().send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); } else { - Residence.msg(player, lm.Residence_MoveDeny, orres.getName()); + plugin.msg(player, lm.Residence_MoveDeny, orres.getName()); } return; } // Preventing fly in residence only when player has move permission - f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, FlagCombo.OnlyTrue) && !Residence.isResAdminOn(player) && !player.hasPermission( + f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { if (res.isOwner(player)) break f; @@ -1716,7 +1716,7 @@ public void run() { for (int i = 0; i < maxH; i++) { location.setY(from - i); Block block = location.getBlock(); - if (!Residence.getNms().isEmptyBlock(block)) { + if (!plugin.getNms().isEmptyBlock(block)) { location.setY(from - i + 1); break; } @@ -1727,11 +1727,11 @@ public void run() { else player.teleport(res.getOutsideFreeLoc(loc, player)); - Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); return; } } - Residence.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); player.teleport(location); player.setFlying(false); player.setAllowFlight(false); @@ -1749,11 +1749,11 @@ public void run() { String leave = ResOld.getLeaveMessage(); chgFrom = ResOld; if (leave != null && !leave.equals("") && ResOld != res.getParent()) { - if (Residence.getConfigManager().useActionBar()) { - Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) + if (plugin.getConfigManager().useActionBar()) { + plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) .toString()); } else { - Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); + plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); } } } @@ -1762,25 +1762,25 @@ public void run() { // New ResidenceChangedEvent ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); - Residence.getServ().getPluginManager().callEvent(chgEvent); + plugin.getServ().getPluginManager().callEvent(chgEvent); if (!(ResOld != null && res == ResOld.getParent())) { - if (Residence.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (Residence.getRentManager().isForRent(areaname) || Residence + if (plugin.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (plugin.getRentManager().isForRent(areaname) || Residence .getTransactionManager().isForSale(areaname))) { - if (Residence.getRentManager().isForRent(areaname) && !Residence.getRentManager().isRented(areaname)) { - RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); + if (plugin.getRentManager().isForRent(areaname) && !plugin.getRentManager().isRented(areaname)) { + RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); if (rentable != null) - Residence.getAB().send(player, Residence.msg(lm.Residence_CanBeRented, areaname, rentable.cost, rentable.days)); - } else if (Residence.getTransactionManager().isForSale(areaname) && !res.isOwner(player)) { - int sale = Residence.getTransactionManager().getSaleAmount(areaname); - Residence.getAB().send(player, Residence.msg(lm.Residence_CanBeBought, areaname, sale)); + plugin.getAB().send(player, plugin.msg(lm.Residence_CanBeRented, areaname, rentable.cost, rentable.days)); + } else if (plugin.getTransactionManager().isForSale(areaname) && !res.isOwner(player)) { + int sale = plugin.getTransactionManager().getSaleAmount(areaname); + plugin.getAB().send(player, plugin.msg(lm.Residence_CanBeBought, areaname, sale)); } } else if (enterMessage != null && !enterMessage.equals("")) { - if (Residence.getConfigManager().useActionBar()) { - Residence.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)) + if (plugin.getConfigManager().useActionBar()) { + plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)) .toString()); } else { - Residence.msg(player, ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); + plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); } } } @@ -1801,13 +1801,13 @@ public String insertMessages(Player player, String areaname, ClaimedResidence re public void doHeals() { try { for (Player player : Bukkit.getServer().getOnlinePlayers()) { - String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + String resname = plugin.getPlayerListener().getCurrentResidenceName(player.getName()); ClaimedResidence res = null; if (resname == null) continue; - res = Residence.getResidenceManager().getByName(resname); + res = plugin.getResidenceManager().getByName(resname); if (!res.getPermissions().has(Flags.healing, false)) continue; @@ -1825,12 +1825,12 @@ public void doHeals() { public void feed() { try { for (Player player : Bukkit.getServer().getOnlinePlayers()) { - String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + String resname = plugin.getPlayerListener().getCurrentResidenceName(player.getName()); if (resname == null) continue; - ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + ClaimedResidence res = plugin.getResidenceManager().getByName(resname); if (!res.getPermissions().has(Flags.feed, false)) continue; @@ -1847,13 +1847,13 @@ public void feed() { public void DespawnMobs() { try { for (Player player : Bukkit.getServer().getOnlinePlayers()) { - String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName()); + String resname = plugin.getPlayerListener().getCurrentResidenceName(player.getName()); if (resname == null) continue; ClaimedResidence res = null; - res = Residence.getResidenceManager().getByName(resname); + res = plugin.getResidenceManager().getByName(resname); if (!res.getPermissions().has(Flags.nomobs, false)) continue; @@ -1875,13 +1875,13 @@ public void DespawnMobs() { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerChat(AsyncPlayerChatEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; String pname = event.getPlayer().getName(); if (!chatenabled || !playerToggleChat.contains(pname)) return; - ChatChannel channel = Residence.getChatManager().getPlayerChannel(pname); + ChatChannel channel = plugin.getChatManager().getPlayerChannel(pname); if (channel != null) { channel.chat(pname, event.getMessage()); } @@ -1891,20 +1891,20 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { public void tooglePlayerResidenceChat(Player player, String residence) { String pname = player.getName(); playerToggleChat.add(pname); - Residence.msg(player, lm.Chat_ChatChannelChange, residence); + plugin.msg(player, lm.Chat_ChatChannelChange, residence); } public void removePlayerResidenceChat(String pname) { playerToggleChat.remove(pname); Player player = Bukkit.getPlayer(pname); if (player != null) - Residence.msg(player, lm.Chat_ChatChannelLeave); + plugin.msg(player, lm.Chat_ChatChannelLeave); } public void removePlayerResidenceChat(Player player) { String pname = player.getName(); playerToggleChat.remove(pname); - Residence.msg(player, lm.Chat_ChatChannelLeave); + plugin.msg(player, lm.Chat_ChatChannelLeave); } public String getCurrentResidenceName(String player) { diff --git a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java index 447a344de..03aa1928b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java @@ -1,36 +1,36 @@ -package com.bekvon.bukkit.residence.listeners; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerItemDamageEvent; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.protection.FlagPermissions; - -public class SpigotListener implements Listener { - @SuppressWarnings("deprecation") - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onItemDamage(PlayerItemDamageEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - Location loc = player.getLocation(); - FlagPermissions perms = Residence.getPermsByLoc(loc); - if (perms.has(Flags.nodurability, false)) { - ItemStack held = Residence.getNms().itemInMainHand(player); - if (held.getType() != Material.AIR) { - held.setDurability(held.getDurability()); - player.setItemInHand(held); - event.setDamage(0); - event.setCancelled(true); - } - } - } -} +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemDamageEvent; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.protection.FlagPermissions; + +public class SpigotListener implements Listener { + @SuppressWarnings("deprecation") + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onItemDamage(PlayerItemDamageEvent event) { + // disabling event on world + if (Residence.getInstance().isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + Location loc = player.getLocation(); + FlagPermissions perms = Residence.getInstance().getPermsByLoc(loc); + if (perms.has(Flags.nodurability, false)) { + ItemStack held = Residence.getInstance().getNms().itemInMainHand(player); + if (held.getType() != Material.AIR) { + held.setDurability(held.getDurability()); + player.setItemInHand(held); + event.setDamage(0); + event.setCancelled(true); + } + } + } +} diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index cc7f1fc72..07c000c66 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -416,35 +416,35 @@ public void printLimits(CommandSender player, OfflinePlayer target, boolean resa ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(target.getName()); PermissionGroup group = rPlayer.getGroup(); - Residence.msg(player, lm.General_Separator); - Residence.msg(player, lm.Limits_PGroup, Residence.getPermissionManager().getPermissionsGroup(target.getName(), - target.isOnline() ? Bukkit.getPlayer(target.getName()).getWorld().getName() : Residence.getConfigManager().getDefaultWorld())); - Residence.msg(player, lm.Limits_RGroup, group.getGroupName()); + Residence.getInstance().msg(player, lm.General_Separator); + Residence.getInstance().msg(player, lm.Limits_PGroup, Residence.getPermissionManager().getPermissionsGroup(target.getName(), + target.isOnline() ? Bukkit.getPlayer(target.getName()).getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld())); + Residence.getInstance().msg(player, lm.Limits_RGroup, group.getGroupName()); if (target.isOnline() && resadmin) - Residence.msg(player, lm.Limits_Admin, Residence.getPermissionManager().isResidenceAdmin(player)); - Residence.msg(player, lm.Limits_CanCreate, group.canCreateResidences()); - Residence.msg(player, lm.Limits_MaxRes, rPlayer.getMaxRes()); - Residence.msg(player, lm.Limits_NumberOwn, rPlayer.getResAmount()); - Residence.msg(player, lm.Limits_MaxEW, group.xmin + "-" + group.xmax); - Residence.msg(player, lm.Limits_MaxNS, group.zmin + "-" + group.zmax); - Residence.msg(player, lm.Limits_MaxUD, group.ymin + "-" + group.ymax); - Residence.msg(player, lm.Limits_MinMax, group.minHeight, group.maxHeight); - Residence.msg(player, lm.Limits_MaxSubzones, rPlayer.getMaxSubzones()); - Residence.msg(player, lm.Limits_MaxSubDepth, rPlayer.getMaxSubzoneDepth()); - Residence.msg(player, lm.Limits_MaxRents, rPlayer.getMaxRents() + (getMaxRentDays() != -1 ? Residence.msg(lm.Limits_MaxRentDays, getMaxRentDays()) + Residence.getInstance().msg(player, lm.Limits_Admin, Residence.getPermissionManager().isResidenceAdmin(player)); + Residence.getInstance().msg(player, lm.Limits_CanCreate, group.canCreateResidences()); + Residence.getInstance().msg(player, lm.Limits_MaxRes, rPlayer.getMaxRes()); + Residence.getInstance().msg(player, lm.Limits_NumberOwn, rPlayer.getResAmount()); + Residence.getInstance().msg(player, lm.Limits_MaxEW, group.xmin + "-" + group.xmax); + Residence.getInstance().msg(player, lm.Limits_MaxNS, group.zmin + "-" + group.zmax); + Residence.getInstance().msg(player, lm.Limits_MaxUD, group.ymin + "-" + group.ymax); + Residence.getInstance().msg(player, lm.Limits_MinMax, group.minHeight, group.maxHeight); + Residence.getInstance().msg(player, lm.Limits_MaxSubzones, rPlayer.getMaxSubzones()); + Residence.getInstance().msg(player, lm.Limits_MaxSubDepth, rPlayer.getMaxSubzoneDepth()); + Residence.getInstance().msg(player, lm.Limits_MaxRents, rPlayer.getMaxRents() + (getMaxRentDays() != -1 ? Residence.getInstance().msg(lm.Limits_MaxRentDays, getMaxRentDays()) : "")); - Residence.msg(player, lm.Limits_EnterLeave, group.messageperms); - if (Residence.getEconomyManager() != null) { - Residence.msg(player, lm.Limits_Cost, group.costperarea); - Residence.msg(player, lm.Limits_Sell, group.sellperarea); + Residence.getInstance().msg(player, lm.Limits_EnterLeave, group.messageperms); + if (Residence.getInstance().getEconomyManager() != null) { + Residence.getInstance().msg(player, lm.Limits_Cost, group.costperarea); + Residence.getInstance().msg(player, lm.Limits_Sell, group.sellperarea); } - Residence.msg(player, lm.Limits_Flag, group.flagPerms.listFlags()); - if (Residence.getConfigManager().useLeases()) { - Residence.msg(player, lm.Limits_MaxDays, group.maxLeaseTime); - Residence.msg(player, lm.Limits_LeaseTime, group.leaseGiveTime); - Residence.msg(player, lm.Limits_RenewCost, group.renewcostperarea); + Residence.getInstance().msg(player, lm.Limits_Flag, group.flagPerms.listFlags()); + if (Residence.getInstance().getConfigManager().useLeases()) { + Residence.getInstance().msg(player, lm.Limits_MaxDays, group.maxLeaseTime); + Residence.getInstance().msg(player, lm.Limits_LeaseTime, group.leaseGiveTime); + Residence.getInstance().msg(player, lm.Limits_RenewCost, group.renewcostperarea); } - Residence.msg(player, lm.General_Separator); + Residence.getInstance().msg(player, lm.General_Separator); } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 1d7279a50..231daeaa8 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -28,8 +28,10 @@ public class PermissionManager { protected FlagPermissions globalFlagPerms; protected HashMap groupsMap = new HashMap(); + private Residence plugin; - public PermissionManager() { + public PermissionManager(Residence plugin) { + this.plugin = plugin; try { groups = new LinkedHashMap(); playersGroup = Collections.synchronizedMap(new HashMap()); @@ -72,7 +74,7 @@ public Map getGroups() { public PermissionGroup getGroupByName(String group) { group = group.toLowerCase(); if (!groups.containsKey(group)) { - return groups.get(Residence.getConfigManager().getDefaultGroup()); + return groups.get(plugin.getConfigManager().getDefaultGroup()); } return groups.get(group); } @@ -87,7 +89,7 @@ public String getGroupNameByPlayer(Player player) { if (group != null) return group; } - return Residence.getConfigManager().getDefaultGroup().toLowerCase(); + return plugin.getConfigManager().getDefaultGroup().toLowerCase(); } public String getGroupNameByPlayer(String playerName, String world) { @@ -104,7 +106,7 @@ public String getGroupNameByPlayer(String playerName, String world) { if (group != null) return group; } - return Residence.getConfigManager().getDefaultGroup().toLowerCase(); + return plugin.getConfigManager().getDefaultGroup().toLowerCase(); } public String getPermissionsGroup(Player player) { @@ -113,11 +115,11 @@ public String getPermissionsGroup(Player player) { public String getPermissionsGroup(String player, String world) { if (perms == null) - return Residence.getConfigManager().getDefaultGroup().toLowerCase(); + return plugin.getConfigManager().getDefaultGroup().toLowerCase(); try { return perms.getPlayerGroup(player, world).toLowerCase(); } catch (Exception e) { - return Residence.getConfigManager().getDefaultGroup().toLowerCase(); + return plugin.getConfigManager().getDefaultGroup().toLowerCase(); } } @@ -142,10 +144,10 @@ public void updateGroupNameForPlayer(String playerName, String world, boolean fo } public boolean isResidenceAdmin(CommandSender sender) { - return (sender.hasPermission("residence.admin") || (sender.isOp() && Residence.getConfigManager().getOpsAreAdmins())); + return (sender.hasPermission("residence.admin") || (sender.isOp() && plugin.getConfigManager().getOpsAreAdmins())); } - private static void checkPermissions() { + private void checkPermissions() { Server server = Residence.getServ(); Plugin p = server.getPluginManager().getPlugin("Vault"); if (p != null) { @@ -171,7 +173,7 @@ private static void checkPermissions() { } p = server.getPluginManager().getPlugin("Permissions"); if (p != null) { - if (Residence.getConfigManager().useLegacyPermissions()) { + if (plugin.getConfigManager().useLegacyPermissions()) { perms = new LegacyPermissions(((Permissions) p).getHandler()); Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Permissions Plugin!"); Bukkit.getConsoleSender().sendMessage(Residence.prefix + "Permissions running in Legacy mode!"); @@ -189,7 +191,7 @@ private void readConfig() { FileConfiguration groupsFile = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "groups.yml")); FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "flags.yml")); - String defaultGroup = Residence.getConfigManager().getDefaultGroup().toLowerCase(); + String defaultGroup = plugin.getConfigManager().getDefaultGroup().toLowerCase(); globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", flags.getConfigurationSection("Global")); ConfigurationSection nodes = groupsFile.getConfigurationSection("Groups"); if (nodes != null) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e302955ae..878d89152 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -113,7 +113,7 @@ public boolean isForSell() { } public boolean isForRent() { - return Residence.getRentManager().isForRent(this); + return plugin.getRentManager().isForRent(this); } public boolean isSubzoneForRent() { @@ -159,7 +159,7 @@ public boolean isParentForSell() { } public boolean isRented() { - return Residence.getRentManager().isRented(this); + return plugin.getRentManager().isRented(this); } public void setRentable(RentableLand rl) { @@ -179,7 +179,7 @@ public RentedLand getRentedLand() { } public ClaimedResidence(String creationWorld, Residence plugin) { - this(Residence.getServerLandname(), creationWorld, plugin); + this(plugin.getServerLandname(), creationWorld, plugin); } public ClaimedResidence(String creator, String creationWorld, Residence plugin) { @@ -228,18 +228,18 @@ public int getSubzoneDeep(int deep) { public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) { if (resadmin) return true; - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (area.getXSize() < group.getMinX()) { - Residence.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); + plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); return false; } if (area.getYSize() < group.getMinY()) { - Residence.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); + plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); return false; } if (area.getZSize() < group.getMinZ()) { - Residence.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); + plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); return false; } return true; @@ -248,18 +248,18 @@ public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean resadmin) { if (resadmin) return true; - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (area.getXSize() < group.getSubzoneMinX()) { - Residence.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); + plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); return false; } if (area.getYSize() < group.getSubzoneMinY()) { - Residence.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); + plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); return false; } if (area.getZSize() < group.getSubzoneMinZ()) { - Residence.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); + plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); return false; } return true; @@ -268,18 +268,18 @@ public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean re public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin) { if (resadmin) return true; - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (area.getXSize() > group.getMaxX()) { - Residence.msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); + plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); return false; } if (area.getYSize() > group.getMaxY()) { - Residence.msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); + plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); return false; } if (area.getZSize() > group.getMaxZ()) { - Residence.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); + plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); return false; } return true; @@ -288,18 +288,18 @@ public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin public boolean isSmallerThanMaxSubzone(Player player, CuboidArea area, boolean resadmin) { if (resadmin) return true; - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (area.getXSize() > group.getSubzoneMaxX()) { - Residence.msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); + plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); return false; } if (area.getYSize() > group.getSubzoneMaxY()) { - Residence.msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); + plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); return false; } if (area.getZSize() > group.getSubzoneMaxZ()) { - Residence.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); + plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); return false; } return true; @@ -314,9 +314,9 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin, boolean chargeMoney) { - if (!Residence.validName(name)) { + if (!plugin.validName(name)) { if (player != null) { - Residence.msg(player, lm.Invalid_NameCharacters); + plugin.msg(player, lm.Invalid_NameCharacters); } return false; } @@ -326,7 +326,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa if (areas.containsKey(NName)) { if (player != null) { - Residence.msg(player, lm.Area_Exists); + plugin.msg(player, lm.Area_Exists); } return false; } @@ -334,7 +334,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa if (this.isSubzone() && !isBiggerThanMinSubzone(player, area, resadmin) || !this.isSubzone() && !isBiggerThanMin(player, area, resadmin)) return false; - if (!resadmin && Residence.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { + if (!resadmin && plugin.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { boolean inside = false; for (CuboidArea are : areas.values()) { if (are.isAreaWithinArea(area)) { @@ -347,20 +347,20 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { if (player != null) { - Residence.msg(player, lm.Area_DiffWorld); + plugin.msg(player, lm.Area_DiffWorld); } return false; } if (parent == null) { - String collideResidence = Residence.getResidenceManager().checkAreaCollision(area, this); - ClaimedResidence cRes = Residence.getResidenceManager().getByName(collideResidence); + String collideResidence = plugin.getResidenceManager().checkAreaCollision(area, this); + ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); if (cRes != null) { if (player != null) { - Residence.msg(player, lm.Area_Collision, cRes.getName()); + plugin.msg(player, lm.Area_Collision, cRes.getName()); Visualizer v = new Visualizer(player); v.setAreas(area); v.setErrorAreas(cRes); - Residence.getSelectionManager().showBounds(player, v); + plugin.getSelectionManager().showBounds(player, v); } return false; } @@ -371,7 +371,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa if (res != null && res != this) { if (res.checkCollision(area)) { if (player != null) { - Residence.msg(player, lm.Area_SubzoneCollision, sz); + plugin.msg(player, lm.Area_SubzoneCollision, sz); } return false; } @@ -380,61 +380,60 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return false; } if (parent != null) { if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { - Residence.msg(player, lm.Area_NotWithinParent); + plugin.msg(player, lm.Area_NotWithinParent); return false; } if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { - Residence.msg(player, lm.Residence_ParentNoPermission); + plugin.msg(player, lm.Residence_ParentNoPermission); return false; } } - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); - if (!this.isSubzone() && !group.canCreateResidences() && !player.hasPermission("residence.create") || - this.isSubzone() && !group.canCreateResidences() && !player.hasPermission("residence.create.subzone")) { - Residence.msg(player, lm.General_NoPermission); + if (!this.isSubzone() && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create") || + this.isSubzone() && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create.subzone")) { return false; } if (areas.size() >= group.getMaxPhysicalPerResidence()) { - Residence.msg(player, lm.Area_MaxPhysical); + plugin.msg(player, lm.Area_MaxPhysical); return false; } if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { - Residence.msg(player, lm.Area_SizeLimit); + plugin.msg(player, lm.Area_SizeLimit); return false; } if (group.getMinHeight() > area.getLowLoc().getBlockY()) { - Residence.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); + plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); return false; } if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { - Residence.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); + plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); return false; } - if (chargeMoney && parent == null && Residence.getConfigManager().enableEconomy() && !resadmin) { + if (chargeMoney && parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { int chargeamount = (int) Math.ceil(area.getSize() * group.getCostPerBlock()); - if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) { + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { return false; } } } ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, NName, this, area); - Residence.getServ().getPluginManager().callEvent(resevent); + plugin.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return false; - Residence.getResidenceManager().removeChunkList(getName()); + plugin.getResidenceManager().removeChunkList(getName()); areas.put(name, area); - Residence.getResidenceManager().calculateChunks(getName()); + plugin.getResidenceManager().calculateChunks(getName()); return true; } @@ -445,24 +444,24 @@ public boolean replaceArea(CuboidArea neware, String name) { public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { if (!areas.containsKey(name)) { if (player != null) - Residence.msg(player, lm.Area_NonExist); + plugin.msg(player, lm.Area_NonExist); return false; } CuboidArea oldarea = areas.get(name); if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { if (player != null) - Residence.msg(player, lm.Area_DiffWorld); + plugin.msg(player, lm.Area_DiffWorld); return false; } if (parent == null) { - String collideResidence = Residence.getResidenceManager().checkAreaCollision(newarea, this); - ClaimedResidence cRes = Residence.getResidenceManager().getByName(collideResidence); + String collideResidence = plugin.getResidenceManager().checkAreaCollision(newarea, this); + ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); if (cRes != null && player != null) { - Residence.msg(player, lm.Area_Collision, cRes.getName()); + plugin.msg(player, lm.Area_Collision, cRes.getName()); Visualizer v = new Visualizer(player); v.setAreas(this.getAreaArray()); v.setErrorAreas(cRes.getAreaArray()); - Residence.getSelectionManager().showBounds(player, v); + plugin.getSelectionManager().showBounds(player, v); return false; } } else { @@ -472,10 +471,10 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole if (res != null && res != this) { if (res.checkCollision(newarea)) { if (player != null) { - Residence.msg(player, lm.Area_SubzoneCollision, sz); + plugin.msg(player, lm.Area_SubzoneCollision, sz); Visualizer v = new Visualizer(player); v.setErrorAreas(res.getAreaArray()); - Residence.getSelectionManager().showBounds(player, v); + plugin.getSelectionManager().showBounds(player, v); } return false; } @@ -511,42 +510,42 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return false; } if (parent != null) { if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { - Residence.msg(player, lm.Area_NotWithinParent); + plugin.msg(player, lm.Area_NotWithinParent); return false; } if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { - Residence.msg(player, lm.Residence_ParentNoPermission); + plugin.msg(player, lm.Residence_ParentNoPermission); return false; } } - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); - if (!group.canCreateResidences() && !player.hasPermission("residence.resize")) { - Residence.msg(player, lm.General_NoPermission); + if (!group.canCreateResidences() && !plugin.hasPermission(player, "residence.resize")) { return false; } + if (oldarea.getSize() < newarea.getSize() && (!this.isSubzone() && !isSmallerThanMax(player, newarea, resadmin) || this.isSubzone() && !isSmallerThanMaxSubzone(player, newarea, resadmin))) { - Residence.msg(player, lm.Area_SizeLimit); + plugin.msg(player, lm.Area_SizeLimit); return false; } if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { - Residence.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); + plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); return false; } if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { - Residence.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); + plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); return false; } - if (parent == null && Residence.getConfigManager().enableEconomy() && !resadmin) { + if (parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); if (chargeamount > 0) { - if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) { + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { return false; } } @@ -554,16 +553,16 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } ResidenceSizeChangeEvent resevent = new ResidenceSizeChangeEvent(player, this, oldarea, newarea); - Residence.getServ().getPluginManager().callEvent(resevent); + plugin.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return false; - Residence.getResidenceManager().removeChunkList(getName()); + plugin.getResidenceManager().removeChunkList(getName()); areas.remove(name); areas.put(name, newarea); - Residence.getResidenceManager().calculateChunks(getName()); + plugin.getResidenceManager().calculateChunks(getName()); if (player != null) - Residence.msg(player, lm.Area_Update); + plugin.msg(player, lm.Area_Update); return true; } @@ -573,21 +572,21 @@ public boolean addSubzone(String name, Location loc1, Location loc2) { public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { if (player == null) { - return this.addSubzone(null, Residence.getServerLandname(), loc1, loc2, name, resadmin); + return this.addSubzone(null, plugin.getServerLandname(), loc1, loc2, name, resadmin); } return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); } public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { - if (!Residence.validName(name)) { + if (!plugin.validName(name)) { if (player != null) { - Residence.msg(player, lm.Invalid_NameCharacters); + plugin.msg(player, lm.Invalid_NameCharacters); } return false; } if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { if (player != null) { - Residence.msg(player, lm.Subzone_SelectInside); + plugin.msg(player, lm.Subzone_SelectInside); } return false; } @@ -597,25 +596,25 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l if (subzones.containsKey(name)) { if (player != null) { - Residence.msg(player, lm.Subzone_Exists, NName); + plugin.msg(player, lm.Subzone_Exists, NName); } return false; } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { if (!this.perms.playerHas(player.getName(), Flags.subzone, this.perms.playerHas(player, Flags.admin, false))) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return false; } } - if (this.getSubzoneList().length >= Residence.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { - Residence.msg(player, lm.Subzone_MaxAmount); + if (this.getSubzoneList().length >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { + plugin.msg(player, lm.Subzone_MaxAmount); return false; } - if (this.getZoneDepth() >= Residence.getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { - Residence.msg(player, lm.Subzone_MaxDepth); + if (this.getZoneDepth() >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { + plugin.msg(player, lm.Subzone_MaxDepth); return false; } } @@ -627,11 +626,11 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l ClaimedResidence res = resEntry.getValue(); if (res.checkCollision(newArea)) { if (player != null) { - Residence.msg(player, lm.Subzone_Collide, resEntry.getKey()); + plugin.msg(player, lm.Subzone_Collide, resEntry.getKey()); Visualizer v = new Visualizer(player); v.setAreas(newArea); v.setErrorAreas(res); - Residence.getSelectionManager().showBounds(player, v); + plugin.getSelectionManager().showBounds(player, v); } return false; } @@ -648,12 +647,12 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l if (newres.getAreaCount() != 0) { newres.getPermissions().applyDefaultFlags(); if (player != null) { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); newres.setEnterMessage(group.getDefaultEnterMessage()); newres.setLeaveMessage(group.getDefaultLeaveMessage()); } - if (Residence.getConfigManager().flagsInherit()) { + if (plugin.getConfigManager().flagsInherit()) { newres.getPermissions().setParent(perms); } @@ -662,19 +661,19 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l newres.setCreateTime(); ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, name, newres, newArea); - Residence.getServ().getPluginManager().callEvent(resevent); + plugin.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return false; subzones.put(name, newres); if (player != null) { - Residence.msg(player, lm.Area_Create, name); - Residence.msg(player, lm.Subzone_Create, name); + plugin.msg(player, lm.Area_Create, name); + plugin.msg(player, lm.Subzone_Create, name); } return true; } if (player != null) { - Residence.msg(player, lm.Subzone_CreateFail, name); + plugin.msg(player, lm.Subzone_CreateFail, name); } return false; } @@ -809,12 +808,12 @@ public boolean removeSubzone(Player player, String name, boolean resadmin) { name = name.toLowerCase(); ClaimedResidence res = subzones.get(name); if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return false; } subzones.remove(name); if (player != null) { - Residence.msg(player, lm.Subzone_Remove, name); + plugin.msg(player, lm.Subzone_Remove, name); } return true; } @@ -822,7 +821,7 @@ public boolean removeSubzone(Player player, String name, boolean resadmin) { public long getTotalSize() { Collection set = areas.values(); long size = 0; - if (!Residence.getConfigManager().isNoCostForYBlocks()) + if (!plugin.getConfigManager().isNoCostForYBlocks()) for (CuboidArea entry : set) { size = size + entry.getSize(); } @@ -886,9 +885,9 @@ public void setShopDesc(String message) { public void setEnterLeaveMessage(Player player, String message, boolean enter, boolean resadmin) { // if(message!=null && - // Residence.getConfigManager().getResidenceNameRegex() != null) { + // plugin.getConfigManager().getResidenceNameRegex() != null) { // Removed pending further action - // player.sendMessage(ChatColor.RED+Residence.getLanguage().getPhrase("InvalidCharacters")); + // player.sendMessage(ChatColor.RED+plugin.getLanguage().getPhrase("InvalidCharacters")); // return; // } if (message != null) { @@ -896,14 +895,14 @@ public void setEnterLeaveMessage(Player player, String message, boolean enter, b message = null; } } - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (!group.canSetEnterLeaveMessages() && !resadmin) { - Residence.msg(player, lm.Residence_OwnerNoPermission); + plugin.msg(player, lm.Residence_OwnerNoPermission); return; } if (!perms.hasResidencePermission(player, false) && !resadmin) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return; } if (enter) { @@ -911,7 +910,7 @@ public void setEnterLeaveMessage(Player player, String message, boolean enter, b } else { this.setLeaveMessage(message); } - Residence.msg(player, lm.Residence_MessageChange); + plugin.msg(player, lm.Residence_MessageChange); } public Location getMiddleFreeLoc(Location insideLoc, Player player) { @@ -939,7 +938,7 @@ public Location getMiddleFreeLoc(Location insideLoc, Player player) { Block block = newLoc.getBlock(); Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); - if (Residence.getNms().isEmptyBlock(block) && Residence.getNms().isEmptyBlock(block2) && !Residence.getNms().isEmptyBlock(block3)) { + if (plugin.getNms().isEmptyBlock(block) && plugin.getNms().isEmptyBlock(block2) && !plugin.getNms().isEmptyBlock(block3)) { found = true; break; } @@ -997,12 +996,12 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { Block block = loc.getBlock(); Block block2 = loc.clone().add(0, 1, 0).getBlock(); Block block3 = loc.clone().add(0, -1, 0).getBlock(); - if (!Residence.getNms().isEmptyBlock(block3) && Residence.getNms().isEmptyBlock(block) && Residence.getNms().isEmptyBlock(block2)) { + if (!plugin.getNms().isEmptyBlock(block3) && plugin.getNms().isEmptyBlock(block) && plugin.getNms().isEmptyBlock(block2)) { break; } } - if (!Residence.getNms().isEmptyBlock(loc.getBlock())) + if (!plugin.getNms().isEmptyBlock(loc.getBlock())) continue; if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA || loc.clone().add(0, -1, 0).getBlock().getState() @@ -1013,7 +1012,7 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { .getType() == Material.STATIONARY_WATER) continue; - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) && !player.hasPermission("residence.admin.tp")) continue; @@ -1023,8 +1022,8 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { break; } - if (!found && Residence.getConfigManager().getKickLocation() != null) - return Residence.getConfigManager().getKickLocation(); + if (!found && plugin.getConfigManager().getKickLocation() != null) + return plugin.getConfigManager().getKickLocation(); return loc; } @@ -1059,9 +1058,9 @@ public List getSubzones() { public void printSubzoneList(Player player, int page) { ArrayList temp = new ArrayList<>(); for (Entry sz : subzones.entrySet()) { - temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + Residence.msg(lm.General_Owner, sz.getValue().getOwner())); + temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + plugin.msg(lm.General_Owner, sz.getValue().getOwner())); } - Residence.getInfoPageManager().printInfo(player, Residence.msg(lm.General_Subzones), temp, page); + plugin.getInfoPageManager().printInfo(player, plugin.msg(lm.General_Subzones), temp, page); } public void printAreaList(Player player, int page) { @@ -1069,7 +1068,7 @@ public void printAreaList(Player player, int page) { for (String area : areas.keySet()) { temp.add(area); } - Residence.getInfoPageManager().printInfo(player, Residence.msg(lm.General_PhysicalAreas), temp, page); + plugin.getInfoPageManager().printInfo(player, plugin.msg(lm.General_PhysicalAreas), temp, page); } public void printAdvancedAreaList(Player player, int page) { @@ -1082,7 +1081,7 @@ public void printAdvancedAreaList(Player player, int page) { .getBlockX() + "," + h.getBlockY() + "," + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); } - Residence.getInfoPageManager().printInfo(player, Residence.msg(lm.General_PhysicalAreas), temp, page); + plugin.getInfoPageManager().printInfo(player, plugin.msg(lm.General_PhysicalAreas), temp, page); } public String[] getAreaList() { @@ -1107,15 +1106,15 @@ public int getZoneDepth() { public void setTpLoc(Player player, boolean resadmin) { if (!this.perms.hasResidencePermission(player, false) && !resadmin) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return; } if (!this.containsLoc(player.getLocation())) { - Residence.msg(player, lm.Residence_NotIn); + plugin.msg(player, lm.Residence_NotIn); return; } tpLoc = player.getLocation(); - Residence.msg(player, lm.Residence_SetTeleportLocation); + plugin.msg(player, lm.Residence_SetTeleportLocation); } public int isSafeTp(Player player) { @@ -1125,7 +1124,7 @@ public int isSafeTp(Player player) { if (player.getGameMode() == GameMode.CREATIVE) return 0; - if (Residence.getNms().isSpectator(player.getGameMode())) + if (plugin.getNms().isSpectator(player.getGameMode())) return 0; if (tpLoc == null) @@ -1139,7 +1138,7 @@ public int isSafeTp(Player player) { for (int i = 0; i < 255; i++) { tempLoc.setY(from - i); Block block = tempLoc.getBlock(); - if (Residence.getNms().isEmptyBlock(block)) { + if (plugin.getNms().isEmptyBlock(block)) { fallDistance++; } else { break; @@ -1149,46 +1148,46 @@ public int isSafeTp(Player player) { } public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { - boolean isAdmin = Residence.isResAdminOn(reqPlayer); + boolean isAdmin = plugin.isResAdminOn(reqPlayer); if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") && !this.isOwner(targetPlayer)) { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(reqPlayer); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); PermissionGroup group = rPlayer.getGroup(); if (!group.hasTpAccess()) { - Residence.msg(reqPlayer, lm.General_TeleportDeny); + plugin.msg(reqPlayer, lm.General_TeleportDeny); return; } if (!reqPlayer.equals(targetPlayer)) { - Residence.msg(reqPlayer, lm.General_NoPermission); + plugin.msg(reqPlayer, lm.General_NoPermission); return; } if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { - Residence.msg(reqPlayer, lm.Residence_TeleportNoFlag); + plugin.msg(reqPlayer, lm.Residence_TeleportNoFlag); return; } if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { - Residence.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); + plugin.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); return; } } - if (!Residence.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { + if (!plugin.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { int distance = isSafeTp(reqPlayer); if (distance > 6) { - Residence.msg(reqPlayer, lm.General_TeleportConfirm, distance); - Residence.getTeleportMap().put(reqPlayer.getName(), this); + plugin.msg(reqPlayer, lm.General_TeleportConfirm, distance); + plugin.getTeleportMap().put(reqPlayer.getName(), this); return; } } - if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin) { - Residence.msg(reqPlayer, lm.General_TeleportStarted, this.getName(), Residence.getConfigManager().getTeleportDelay()); - if (Residence.getConfigManager().isTeleportTitleMessage()) - TpTimer(reqPlayer, Residence.getConfigManager().getTeleportDelay()); - Residence.getTeleportDelayMap().add(reqPlayer.getName()); + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin) { + plugin.msg(reqPlayer, lm.General_TeleportStarted, this.getName(), plugin.getConfigManager().getTeleportDelay()); + if (plugin.getConfigManager().isTeleportTitleMessage()) + TpTimer(reqPlayer, plugin.getConfigManager().getTeleportDelay()); + plugin.getTeleportDelayMap().add(reqPlayer.getName()); } if (tpLoc != null) { - if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin) + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) performDelaydTp(tpLoc, targetPlayer, reqPlayer, true); else performInstantTp(tpLoc, targetPlayer, reqPlayer, true); @@ -1196,11 +1195,11 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r CuboidArea area = areas.values().iterator().next(); if (area == null) { reqPlayer.sendMessage(ChatColor.RED + "Could not find area to teleport to..."); - Residence.getTeleportDelayMap().remove(targetPlayer.getName()); + plugin.getTeleportDelayMap().remove(targetPlayer.getName()); return; } final Location targloc = this.getMiddleFreeLoc(area.getHighLoc(), targetPlayer); - if (Residence.getConfigManager().getTeleportDelay() > 0 && !isAdmin) + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) performDelaydTp(targloc, targetPlayer, reqPlayer, true); else performInstantTp(targloc, targetPlayer, reqPlayer, true); @@ -1208,11 +1207,11 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } public void TpTimer(final Player player, final int t) { - Residence.getAB().sendTitle(player, Residence.msg(lm.General_TeleportTitle), Residence.msg(lm.General_TeleportTitleTime, t)); + plugin.getAB().sendTitle(player, plugin.msg(lm.General_TeleportTitle), plugin.msg(lm.General_TeleportTitleTime, t)); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { - if (!Residence.getTeleportDelayMap().contains(player.getName())) + if (!plugin.getTeleportDelayMap().contains(player.getName())) return; if (t > 1) TpTimer(player, t - 1); @@ -1222,36 +1221,36 @@ public void run() { public void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - Residence.getServ().getPluginManager().callEvent(tpevent); + plugin.getServ().getPluginManager().callEvent(tpevent); if (tpevent.isCancelled()) return; Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { - if (!Residence.getTeleportDelayMap().contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) + if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) && plugin.getConfigManager().getTeleportDelay() > 0) return; - else if (Residence.getTeleportDelayMap().contains(targetPlayer.getName())) - Residence.getTeleportDelayMap().remove(targetPlayer.getName()); + else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) + plugin.getTeleportDelayMap().remove(targetPlayer.getName()); targetPlayer.teleport(targloc); if (near) - Residence.msg(targetPlayer, lm.Residence_TeleportNear); + plugin.msg(targetPlayer, lm.Residence_TeleportNear); else - Residence.msg(targetPlayer, lm.General_TeleportSuccess); + plugin.msg(targetPlayer, lm.General_TeleportSuccess); return; } - }, Residence.getConfigManager().getTeleportDelay() * 20L); + }, plugin.getConfigManager().getTeleportDelay() * 20L); } private void performInstantTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - Residence.getServ().getPluginManager().callEvent(tpevent); + plugin.getServ().getPluginManager().callEvent(tpevent); if (!tpevent.isCancelled()) { targetPlayer.teleport(targloc); if (near) - Residence.msg(targetPlayer, lm.Residence_TeleportNear); + plugin.msg(targetPlayer, lm.Residence_TeleportNear); else - Residence.msg(targetPlayer, lm.General_TeleportSuccess); + plugin.msg(targetPlayer, lm.General_TeleportSuccess); } } @@ -1273,33 +1272,33 @@ public CuboidArea getCuboidAreabyName(String name) { } public void removeArea(String id) { - Residence.getResidenceManager().removeChunkList(getName()); + plugin.getResidenceManager().removeChunkList(getName()); areas.remove(id); - Residence.getResidenceManager().calculateChunks(getName()); + plugin.getResidenceManager().calculateChunks(getName()); } public void removeArea(Player player, String id, boolean resadmin) { if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { if (!areas.containsKey(id)) { - Residence.msg(player, lm.Area_NonExist); + plugin.msg(player, lm.Area_NonExist); return; } - if (areas.size() == 1 && !Residence.getConfigManager().allowEmptyResidences()) { - Residence.msg(player, lm.Area_RemoveLast); + if (areas.size() == 1 && !plugin.getConfigManager().allowEmptyResidences()) { + plugin.msg(player, lm.Area_RemoveLast); return; } ResidenceAreaDeleteEvent resevent = new ResidenceAreaDeleteEvent(player, this, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - Residence.getServ().getPluginManager().callEvent(resevent); + plugin.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return; removeArea(id); if (player != null) - Residence.msg(player, lm.Area_Remove); + plugin.msg(player, lm.Area_Remove); } else { if (player != null) - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); } } @@ -1328,7 +1327,7 @@ public Map save() { if (!ChatPrefix.equals("")) root.put("ChatPrefix", ChatPrefix); - if (!ChannelColor.name().equals(Residence.getConfigManager().getChatColor().name()) && !ChannelColor.name().equals("WHITE")) { + if (!ChannelColor.name().equals(plugin.getConfigManager().getChatColor().name()) && !ChannelColor.name().equals("WHITE")) { root.put("ChannelColor", ChannelColor.name()); } @@ -1407,12 +1406,12 @@ public static ClaimedResidence load(String worldName, Map root, res.bank.setStoredMoney((Integer) root.get("StoredMoney")); if (root.containsKey("BlackList")) - res.blacklist = ResidenceItemList.load(res, (Map) root.get("BlackList")); + res.blacklist = ResidenceItemList.load(plugin, res, (Map) root.get("BlackList")); if (root.containsKey("IgnoreList")) - res.ignorelist = ResidenceItemList.load(res, (Map) root.get("IgnoreList")); + res.ignorelist = ResidenceItemList.load(plugin, res, (Map) root.get("IgnoreList")); Map areamap = (Map) root.get("Areas"); - + res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); if (res.getPermissions().ownerLastKnownName == null) @@ -1427,7 +1426,7 @@ public static ClaimedResidence load(String worldName, Map root, res.BlockSellPrice = 0D; } - World world = Residence.getServ().getWorld(res.perms.getWorld()); + World world = plugin.getServ().getWorld(res.perms.getWorld()); if (world == null) throw new Exception("Cant Find World: " + res.perms.getWorld()); for (Entry map : areamap.entrySet()) { @@ -1445,7 +1444,7 @@ public static ClaimedResidence load(String worldName, Map root, if (subres.getResidenceName() == null) subres.setName(map.getKey()); - if (Residence.getConfigManager().flagsInherit()) + if (plugin.getConfigManager().flagsInherit()) subres.getPermissions().setParent(res.getPermissions()); res.subzones.put(map.getKey().toLowerCase(), subres); @@ -1487,7 +1486,7 @@ public static ClaimedResidence load(String worldName, Map root, if (root.containsKey("ChannelColor")) res.ChannelColor = ChatColor.valueOf((String) root.get("ChannelColor")); else { - res.ChannelColor = Residence.getConfigManager().getChatColor(); + res.ChannelColor = plugin.getConfigManager().getChatColor(); } return res; @@ -1502,8 +1501,8 @@ public boolean renameSubzone(String oldName, String newName) { } public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { - if (!Residence.validName(newName)) { - Residence.msg(player, lm.Invalid_NameCharacters); + if (!plugin.validName(newName)) { + plugin.msg(player, lm.Invalid_NameCharacters); return false; } if (oldName == null) @@ -1517,23 +1516,23 @@ public boolean renameSubzone(Player player, String oldName, String newName, bool ClaimedResidence res = subzones.get(oldName); if (res == null) { if (player != null) - Residence.msg(player, lm.Invalid_Subzone); + plugin.msg(player, lm.Invalid_Subzone); return false; } if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return false; } if (subzones.containsKey(newName)) { if (player != null) - Residence.msg(player, lm.Subzone_Exists, newName); + plugin.msg(player, lm.Subzone_Exists, newName); return false; } res.setName(newN); subzones.put(newName, res); subzones.remove(oldName); if (player != null) - Residence.msg(player, lm.Subzone_Rename, oldName, newName); + plugin.msg(player, lm.Subzone_Rename, oldName, newName); return true; } @@ -1542,29 +1541,29 @@ public boolean renameArea(String oldName, String newName) { } public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { - if (!Residence.validName(newName)) { - Residence.msg(player, lm.Invalid_NameCharacters); + if (!plugin.validName(newName)) { + plugin.msg(player, lm.Invalid_NameCharacters); return false; } if (player == null || perms.hasResidencePermission(player, true) || resadmin) { if (areas.containsKey(newName)) { if (player != null) - Residence.msg(player, lm.Area_Exists); + plugin.msg(player, lm.Area_Exists); return false; } CuboidArea area = areas.get(oldName); if (area == null) { if (player != null) - Residence.msg(player, lm.Area_InvalidName); + plugin.msg(player, lm.Area_InvalidName); return false; } areas.put(newName, area); areas.remove(oldName); if (player != null) - Residence.msg(player, lm.Area_Rename, oldName, newName); + plugin.msg(player, lm.Area_Rename, oldName, newName); return true; } - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return false; } @@ -1573,14 +1572,14 @@ public CuboidArea getArea(String name) { } public String getName() { - return Residence.getResidenceManager().getNameByRes(this); + return plugin.getResidenceManager().getNameByRes(this); } public void remove() { String name = getName(); if (name != null) { - Residence.getResidenceManager().removeResidence(name); - Residence.getResidenceManager().removeChunkList(name); + plugin.getResidenceManager().removeResidence(name); + plugin.getResidenceManager().removeChunkList(name); } } @@ -1593,7 +1592,7 @@ public String getWorld() { } public ResidencePlayer getRPlayer() { - return Residence.getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); + return plugin.getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); } public PermissionGroup getOwnerGroup() { @@ -1612,13 +1611,13 @@ public boolean isOwner(String name) { } public boolean isOwner(Player p) { - if (Residence.getConfigManager().isOfflineMode()) + if (plugin.getConfigManager().isOfflineMode()) return perms.getOwner().equals(p.getName()); return perms.getOwnerUUID().equals(p.getUniqueId()); } public boolean isOwner(CommandSender sender) { - if (Residence.getConfigManager().isOfflineMode()) + if (plugin.getConfigManager().isOfflineMode()) return perms.getOwner().equals(sender.getName()); if (sender instanceof Player) return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); @@ -1638,7 +1637,7 @@ public void setChannelColor(ChatColor ChannelColor) { } public ChatChannel getChatChannel() { - return Residence.getChatManager().getChannel(this.getName()); + return plugin.getChatManager().getChannel(this.getName()); } public ChatColor getChannelColor() { diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index 9a9b3f55d..8e06164c1 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -19,9 +19,6 @@ public class CuboidArea { protected Location lowPoints; protected String worldName; - public CuboidArea() { - } - public CuboidArea(Location startLoc, Location endLoc) { int highx, highy, highz, lowx, lowy, lowz; if (startLoc.getBlockX() > endLoc.getBlockX()) { @@ -50,6 +47,9 @@ public CuboidArea(Location startLoc, Location endLoc) { worldName = startLoc.getWorld().getName(); } + public CuboidArea() { + } + public boolean isAreaWithinArea(CuboidArea area) { return (this.containsLoc(area.highPoints) && this.containsLoc(area.lowPoints)); } @@ -118,7 +118,7 @@ private static boolean advCuboidCheckCollision(Location A1High, Location A1Low, public long getSize() { int xsize = (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; int zsize = (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; - if (!Residence.getConfigManager().isNoCostForYBlocks()) { + if (!Residence.getInstance().getConfigManager().isNoCostForYBlocks()) { int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; return xsize * ysize * zsize; } @@ -159,7 +159,7 @@ public void save(DataOutputStream out) throws IOException { out.writeInt(lowPoints.getBlockZ()); } - public static CuboidArea load(DataInputStream in) throws IOException { + public CuboidArea load(DataInputStream in) throws IOException { CuboidArea newArea = new CuboidArea(); Server server = Residence.getServ(); World world = server.getWorld(in.readUTF()); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index ecd04da22..b25adc5e4 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -157,7 +157,7 @@ public static void initValidFlags() { } } - Residence.getConfigManager().UpdateGroupedFlagsFile(); + Residence.getInstance().getConfigManager().UpdateGroupedFlagsFile(); // All these flags are moved to flags.yml as of 2.9.11.0 version for option to customize them // addFlagToFlagGroup("redstone", "note"); @@ -192,7 +192,7 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.WORKBENCH, Flags.table); addMaterialToUseFlag(Material.WOODEN_DOOR, Flags.door); - Residence.getNms().addDefaultFlags(matUseFlagList); + Residence.getInstance().getNms().addDefaultFlags(matUseFlagList); addMaterialToUseFlag(Material.FENCE_GATE, Flags.door); addMaterialToUseFlag(Material.NETHER_FENCE, Flags.door); @@ -262,7 +262,7 @@ protected Map getPlayerFlags(String player, boolean allowCreate Map flags = null; - if (!Residence.getConfigManager().isOfflineMode()) { + if (!Residence.getInstance().getConfigManager().isOfflineMode()) { UUID uuid = null; if (player.length() == 36) { try { @@ -351,7 +351,7 @@ public boolean setPlayerFlag(String player, String flag, FlagState state) { public void removeAllPlayerFlags(String player) {//this function works with uuid in string format as well, instead of player name // player = player.toLowerCase(); - if (!Residence.getConfigManager().isOfflineMode()) { + if (!Residence.getInstance().getConfigManager().isOfflineMode()) { UUID uuid = Residence.getPlayerUUID(player); if (uuid == null) for (Entry entry : cachedPlayerNameUUIDs.entrySet()) @@ -606,7 +606,7 @@ protected static FlagPermissions load(Map root, FlagPermissions if (root.containsKey("AreaFlags")) { newperms.cuboidFlags = (Map) root.get("AreaFlags"); } else - newperms.cuboidFlags = Residence.getConfigManager().getGlobalResidenceDefaultFlags().getFlags(); + newperms.cuboidFlags = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags().getFlags(); String ownerName = null; String uuid = null; @@ -616,7 +616,7 @@ protected static FlagPermissions load(Map root, FlagPermissions uuid = (String) root.get("OwnerUUID"); } - if (Residence.getConfigManager().isOfflineMode()) + if (Residence.getInstance().getConfigManager().isOfflineMode()) newperms.convertFlagsUUIDsToPlayerNames(); else newperms.convertPlayerNamesToUUIDs(ownerName, uuid); @@ -821,7 +821,7 @@ public String listOtherPlayersFlags(String player) { while (it.hasNext()) { Entry> nextEnt = it.next(); String next = nextEnt.getKey(); - if (!Residence.getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getConfigManager().isOfflineMode() && !next + if (!Residence.getInstance().getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getInstance().getConfigManager().isOfflineMode() && !next .equals(player)) { String perms = printPlayerFlags(nextEnt.getValue()); if (next.length() == 36) { @@ -950,7 +950,7 @@ public String listOtherPlayersFlagsRaw(String text, String player) { while (it.hasNext()) { Entry> nextEnt = it.next(); String next = nextEnt.getKey(); - if (!Residence.getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getConfigManager().isOfflineMode() && !next + if (!Residence.getInstance().getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getInstance().getConfigManager().isOfflineMode() && !next .equals(player)) { String perms = printPlayerFlags(nextEnt.getValue()); if (next.length() == 36) { @@ -1063,10 +1063,10 @@ public void clearFlags() { } public void printFlags(Player player) { - Residence.msg(player, lm.General_ResidenceFlags, listFlags()); - Residence.msg(player, lm.General_PlayersFlags, listPlayerFlags(player.getName())); - Residence.msg(player, lm.General_GroupFlags, listGroupFlags()); - Residence.msg(player, lm.General_OthersFlags, listOtherPlayersFlags(player.getName())); + Residence.getInstance().msg(player, lm.General_ResidenceFlags, listFlags()); + Residence.getInstance().msg(player, lm.General_PlayersFlags, listPlayerFlags(player.getName())); + Residence.getInstance().msg(player, lm.General_GroupFlags, listGroupFlags()); + Residence.getInstance().msg(player, lm.General_OthersFlags, listOtherPlayersFlags(player.getName())); } public void copyUserPermissions(String fromUser, String toUser) { diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index 740a44693..6158881a0 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -23,7 +23,10 @@ public class LeaseManager { ResidenceManager manager; - public LeaseManager(ResidenceManager m) { + private Residence plugin; + + public LeaseManager(Residence plugin, ResidenceManager m) { + this.plugin = plugin; manager = m; leaseExpireTime = Collections.synchronizedMap(new HashMap()); } @@ -51,16 +54,16 @@ public void setExpireTime(Player player, String area, int days) { if (manager.getByName(area) != null) { leaseExpireTime.put(area, daysToMs(days) + System.currentTimeMillis()); if (player != null) - Residence.msg(player, lm.Economy_LeaseRenew, getExpireTime(area)); + plugin.msg(player, lm.Economy_LeaseRenew, getExpireTime(area)); } else { if (player != null) - Residence.msg(player, lm.Invalid_Area); + plugin.msg(player, lm.Invalid_Area); } } public void renewArea(String area, Player player) { if (!leaseExpires(area)) { - Residence.msg(player, lm.Economy_LeaseNotExpire); + plugin.msg(player, lm.Economy_LeaseNotExpire); return; } ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); @@ -68,7 +71,7 @@ public void renewArea(String area, Player player) { int max = group.getMaxLeaseTime(); int add = group.getLeaseGiveTime(); int rem = daysRemaining(area); - EconomyInterface econ = Residence.getEconomyManager(); + EconomyInterface econ = plugin.getEconomyManager(); if (econ != null) { double cost = group.getLeaseRenewCost(); ClaimedResidence res = manager.getByName(area); @@ -79,17 +82,17 @@ public void renewArea(String area, Player player) { if (econ.canAfford(player.getName(), amount)/*account.hasEnough(amount)*/) { econ.subtract(player.getName(), amount); econ.add("Lease Money", amount); - Residence.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); + plugin.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); } else { - Residence.msg(player, lm.Economy_NotEnoughMoney); + plugin.msg(player, lm.Economy_NotEnoughMoney); return; } } } if (rem + add > max) { setExpireTime(player, area, max); - Residence.msg(player, lm.Economy_LeaseRenewMax); - Residence.msg(player, lm.Economy_LeaseRenew, getExpireTime(area)); + plugin.msg(player, lm.Economy_LeaseRenewMax); + plugin.msg(player, lm.Economy_LeaseRenew, getExpireTime(area)); return; } Long get = leaseExpireTime.get(area); @@ -98,7 +101,7 @@ public void renewArea(String area, Player player) { leaseExpireTime.put(area, get); } else leaseExpireTime.put(area, daysToMs(add)); - Residence.msg(player, lm.Economy_LeaseRenew, getExpireTime(area)); + plugin.msg(player, lm.Economy_LeaseRenew, getExpireTime(area)); } public int getRenewCost(ClaimedResidence res) { @@ -129,7 +132,7 @@ public void doExpirations() { Entry next = it.next(); if (next.getValue() <= System.currentTimeMillis()) { String resname = next.getKey(); - ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + ClaimedResidence res = plugin.getResidenceManager().getByName(resname); if (res == null) { it.remove(); } else { @@ -140,41 +143,41 @@ public void doExpirations() { PermissionGroup group = res.getOwnerGroup(); int cost = this.getRenewCost(res); - if (Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().autoRenewLeases()) { + if (plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().autoRenewLeases()) { if (cost == 0) { renewed = true; } else if (res.getBank().hasEnough(cost)) { res.getBank().subtract(cost); renewed = true; - if (Residence.getConfigManager().debugEnabled()) + if (plugin.getConfigManager().debugEnabled()) System.out.println("Lease Renewed From Residence Bank: " + resname); - } else if (Residence.getEconomyManager().canAfford(owner, cost)) { - if (Residence.getEconomyManager().subtract(owner, cost)) { + } else if (plugin.getEconomyManager().canAfford(owner, cost)) { + if (plugin.getEconomyManager().subtract(owner, cost)) { renewed = true; - if (Residence.getConfigManager().debugEnabled()) + if (plugin.getConfigManager().debugEnabled()) System.out.println("Lease Renewed From Economy: " + resname); } } } if (!renewed) { - if (!Residence.getConfigManager().enabledRentSystem() || !Residence.getRentManager().isRented(resname)) { + if (!plugin.getConfigManager().enabledRentSystem() || !plugin.getRentManager().isRented(resname)) { ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(null, res, DeleteCause.LEASE_EXPIRE); Residence.getServ().getPluginManager().callEvent(resevent); if (!resevent.isCancelled()) { manager.removeResidence(next.getKey()); it.remove(); - if (Residence.getConfigManager().debugEnabled()) + if (plugin.getConfigManager().debugEnabled()) System.out.println("Lease NOT removed, Removing: " + resname); } } } else { - if (Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().enableLeaseMoneyAccount()) { - Residence.getEconomyManager().add("Lease Money", cost); + if (plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().enableLeaseMoneyAccount()) { + plugin.getEconomyManager().add("Lease Money", cost); } - if (Residence.getConfigManager().debugEnabled()) + if (plugin.getConfigManager().debugEnabled()) System.out.println("Lease Renew Old: " + next.getValue()); next.setValue(System.currentTimeMillis() + daysToMs(group.getLeaseGiveTime())); - if (Residence.getConfigManager().debugEnabled()) + if (plugin.getConfigManager().debugEnabled()) System.out.println("Lease Renew New: " + next.getValue()); } } @@ -187,7 +190,7 @@ public void resetLeases() { String[] list = manager.getResidenceList(); for (String item : list) { if (item != null) { - ClaimedResidence res = Residence.getResidenceManager().getByName(item); + ClaimedResidence res = plugin.getResidenceManager().getByName(item); if (res != null) this.setExpireTime(null, item, res.getOwnerGroup().getLeaseGiveTime()); } @@ -207,8 +210,8 @@ public void updateLeaseName(String oldName, String newName) { } @SuppressWarnings("unchecked") - public static LeaseManager load(@SuppressWarnings("rawtypes") Map root, ResidenceManager m) { - LeaseManager l = new LeaseManager(m); + public LeaseManager load(@SuppressWarnings("rawtypes") Map root, ResidenceManager m) { + LeaseManager l = new LeaseManager(plugin, m); if (root != null) { for (Object val : root.values()) { if (!(val instanceof Long)) { diff --git a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java index 1a619e688..582a10538 100644 --- a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java @@ -15,8 +15,10 @@ public class PermissionListManager { private final Map> lists; + private Residence plugin; - public PermissionListManager() { + public PermissionListManager(Residence residence) { + this.plugin = residence; lists = Collections.synchronizedMap(new HashMap>()); } @@ -38,36 +40,36 @@ public void makeList(Player player, String listname) { if (perms == null) { perms = new FlagPermissions(); get.put(listname, perms); - Residence.msg(player, lm.General_ListCreate, listname); + plugin.msg(player, lm.General_ListCreate, listname); } else { - Residence.msg(player,lm.General_ListExists); + plugin.msg(player,lm.General_ListExists); } } public void removeList(Player player, String listname) { Map get = lists.get(player.getName()); if (get == null) { - Residence.msg(player, lm.Invalid_List); + plugin.msg(player, lm.Invalid_List); return; } FlagPermissions list = get.get(listname); if (list == null) { - Residence.msg(player, lm.Invalid_List); + plugin.msg(player, lm.Invalid_List); return; } get.remove(listname); - Residence.msg(player, lm.General_ListRemoved); + plugin.msg(player, lm.General_ListRemoved); } public void applyListToResidence(Player player, String listname, String areaname, boolean resadmin) { FlagPermissions list = this.getList(player.getName(), listname); if (list == null) { - Residence.msg(player, lm.Invalid_List); + plugin.msg(player, lm.Invalid_List); return; } - ClaimedResidence res = Residence.getResidenceManager().getByName(areaname); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } res.getPermissions().applyTemplate(player, list, resadmin); @@ -76,11 +78,11 @@ public void applyListToResidence(Player player, String listname, String areaname public void printList(Player player, String listname) { FlagPermissions list = this.getList(player.getName(), listname); if (list == null) { - Residence.msg(player, lm.Invalid_List); + plugin.msg(player, lm.Invalid_List); return; } player.sendMessage(ChatColor.LIGHT_PURPLE + "------Permission Template------"); - Residence.msg(player, lm.General_Name, listname); + plugin.msg(player, lm.General_Name, listname); list.printFlags(player); } @@ -99,9 +101,9 @@ public Map save() { } @SuppressWarnings("unchecked") - public static PermissionListManager load(Map root) { + public PermissionListManager load(Map root) { - PermissionListManager p = new PermissionListManager(); + PermissionListManager p = new PermissionListManager(plugin); if (root != null) { for (Entry players : root.entrySet()) { try { @@ -122,7 +124,7 @@ public static PermissionListManager load(Map root) { public void printLists(Player player) { StringBuilder sbuild = new StringBuilder(); Map get = lists.get(player.getName()); - sbuild.append(Residence.msg(lm.General_Lists)); + sbuild.append(plugin.msg(lm.General_Lists)); if (get != null) { for (Entry thislist : get.entrySet()) { sbuild.append(thislist.getKey()).append(" "); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index a3fa36feb..fbe2b1c24 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -20,8 +20,10 @@ public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); + private Residence plugin; - public PlayerManager() { + public PlayerManager(Residence plugin) { + this.plugin = plugin; } public void playerJoin(Player player) { @@ -87,8 +89,8 @@ public ArrayList getResidenceList(String player, boolean showhidden, boo if (onlyHidden && !hidden) continue; - temp.add(Residence.msg(lm.Residence_List, "", one.getName(), one.getWorld()) + - (hidden ? Residence.msg(lm.Residence_Hidden) : "")); + temp.add(plugin.msg(lm.Residence_List, "", one.getName(), one.getWorld()) + + (hidden ? plugin.msg(lm.Residence_Hidden) : "")); } Collections.sort(temp, String.CASE_INSENSITIVE_ORDER); return temp; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index b98220055..4f2afbb5c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -206,27 +206,26 @@ public boolean addResidence(Player player, String name, Location loc1, Location } public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { - if (!Residence.validName(name)) { - Residence.msg(player, lm.Invalid_NameCharacters); + if (!plugin.validName(name)) { + plugin.msg(player, lm.Invalid_NameCharacters); return false; } if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); return false; } - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); -// PermissionGroup group = Residence.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); - boolean createpermission = group.canCreateResidences() && (player == null ? true : player.hasPermission("residence.create")); - if (!createpermission && !resadmin) { - Residence.msg(player, lm.General_NoPermission); +// PermissionGroup group = plugin.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); + if ( !resadmin && !(group.canCreateResidences() && (player == null ? true : plugin.hasPermission(player, "residence.create")))) { + plugin.msg(player, lm.General_NoPermission); return false; } if (rPlayer.getResAmount() >= rPlayer.getMaxRes() && !resadmin) { - Residence.msg(player, lm.Residence_TooMany); + plugin.msg(player, lm.Residence_TooMany); return false; } @@ -239,7 +238,7 @@ public boolean addResidence(Player player, String owner, String name, Location l newRes.setCreateTime(); if (residences.containsKey(name.toLowerCase())) { - Residence.msg(player, lm.Residence_AlreadyExists, residences.get(name.toLowerCase()).getResidenceName()); + plugin.msg(player, lm.Residence_AlreadyExists, residences.get(name.toLowerCase()).getResidenceName()); return false; } @@ -249,35 +248,35 @@ public boolean addResidence(Player player, String owner, String name, Location l return false; ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); - Residence.getServ().getPluginManager().callEvent(resevent); + plugin.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return false; - if (!newRes.isSubzone() && Residence.getConfigManager().enableEconomy() && !resadmin) { + if (!newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { double chargeamount = Math.ceil(newArea.getSize() * group.getCostPerBlock()); - if (!TransactionManager.chargeEconomyMoney(player, chargeamount)) + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) return false; } residences.put(name.toLowerCase(), newRes); calculateChunks(name); - Residence.getLeaseManager().removeExpireTime(name); - Residence.getPlayerManager().addResidence(newRes.getOwner(), newRes); + plugin.getLeaseManager().removeExpireTime(name); + plugin.getPlayerManager().addResidence(newRes.getOwner(), newRes); if (player != null) { Visualizer v = new Visualizer(player); v.setAreas(newArea); - Residence.getSelectionManager().showBounds(player, v); - Residence.getAutoSelectionManager().getList().remove(player.getName().toLowerCase()); - Residence.msg(player, lm.Area_Create, "main"); - Residence.msg(player, lm.Residence_Create, name); + plugin.getSelectionManager().showBounds(player, v); + plugin.getAutoSelectionManager().getList().remove(player.getName().toLowerCase()); + plugin.msg(player, lm.Area_Create, "main"); + plugin.msg(player, lm.Residence_Create, name); } - if (Residence.getConfigManager().useLeases()) { + if (plugin.getConfigManager().useLeases()) { if (player != null) { - Residence.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); + plugin.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); } else { - Residence.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); + plugin.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); } } return true; @@ -319,14 +318,14 @@ public void listResidences(CommandSender sender, String targetplayer, int page, public void listResidences(CommandSender sender, String targetplayer, int page, boolean showhidden, boolean onlyHidden, boolean resadmin, World world) { if (targetplayer == null) targetplayer = sender.getName(); - if (showhidden && !Residence.isResAdminOn(sender) && !sender.getName().equalsIgnoreCase(targetplayer)) { + if (showhidden && !plugin.isResAdminOn(sender) && !sender.getName().equalsIgnoreCase(targetplayer)) { showhidden = false; } else if (sender.getName().equalsIgnoreCase(targetplayer)) showhidden = true; boolean hidden = showhidden; - TreeMap ownedResidences = Residence.getPlayerManager().getResidencesMap(targetplayer, hidden, onlyHidden, world); - ownedResidences.putAll(Residence.getRentManager().getRentsMap(targetplayer, onlyHidden, world)); - Residence.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin); + TreeMap ownedResidences = plugin.getPlayerManager().getResidencesMap(targetplayer, hidden, onlyHidden, world); + ownedResidences.putAll(plugin.getRentManager().getRentsMap(targetplayer, onlyHidden, world)); + plugin.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin); } public void listAllResidences(CommandSender sender, int page) { @@ -335,7 +334,7 @@ public void listAllResidences(CommandSender sender, int page) { public void listAllResidences(CommandSender sender, int page, boolean showhidden, World world) { TreeMap list = getFromAllResidencesMap(showhidden, false, world); - Residence.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); + plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); } public void listAllResidences(CommandSender sender, int page, boolean showhidden) { @@ -344,7 +343,7 @@ public void listAllResidences(CommandSender sender, int page, boolean showhidden public void listAllResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { TreeMap list = getFromAllResidencesMap(showhidden, onlyHidden, null); - Residence.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); + plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); } public String[] getResidenceList() { @@ -424,8 +423,8 @@ private void getResidenceList(String targetplayer, boolean showhidden, boolean s if ((showhidden) || (!showhidden && !hidden)) { if (targetplayer == null || res.getPermissions().getOwner().equals(targetplayer)) { if (formattedOutput) { - list.add(Residence.msg(lm.Residence_List, parentzone, resname, res.getWorld()) + - (hidden ? Residence.msg(lm.Residence_Hidden) : "")); + list.add(plugin.msg(lm.Residence_List, parentzone, resname, res.getWorld()) + + (hidden ? plugin.msg(lm.Residence_Hidden) : "")); } else { list.add(parentzone + resname); } @@ -466,29 +465,29 @@ public void removeResidence(Player player, String name, boolean resadmin) { ClaimedResidence res = this.getByName(name); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return; } name = res.getName(); - if (Residence.getConfigManager().isRentPreventRemoval() && !resadmin) { + if (plugin.getConfigManager().isRentPreventRemoval() && !resadmin) { ClaimedResidence rented = res.getRentedSubzone(); if (rented != null) { - Residence.msg(player, lm.Residence_CantRemove, res.getName(), rented.getName(), rented.getRentedLand().player); + plugin.msg(player, lm.Residence_CantRemove, res.getName(), rented.getName(), rented.getRentedLand().player); return; } } if (player != null && !resadmin) { if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin && res.getParent() != null && !res.getParent().isOwner(player)) { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return; } } ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - Residence.getServ().getPluginManager().callEvent(resevent); + plugin.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return; @@ -498,16 +497,16 @@ public void removeResidence(Player player, String name, boolean resadmin) { residences.remove(name.toLowerCase()); - if (Residence.getConfigManager().isUseClean() && Residence.getConfigManager().getCleanWorlds().contains(res.getWorld())) { + if (plugin.getConfigManager().isUseClean() && plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) { for (CuboidArea area : res.getAreaArray()) { Location low = area.getLowLoc(); Location high = area.getHighLoc(); - if (high.getBlockY() > Residence.getConfigManager().getCleanLevel()) { + if (high.getBlockY() > plugin.getConfigManager().getCleanLevel()) { - if (low.getBlockY() < Residence.getConfigManager().getCleanLevel()) - low.setY(Residence.getConfigManager().getCleanLevel()); + if (low.getBlockY() < plugin.getConfigManager().getCleanLevel()) + low.setY(plugin.getConfigManager().getCleanLevel()); World world = low.getWorld(); @@ -519,7 +518,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { temploc.setY(y); for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { temploc.setZ(z); - if (Residence.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getTypeId())) { + if (plugin.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getTypeId())) { temploc.getBlock().setTypeId(0); } } @@ -529,10 +528,10 @@ public void removeResidence(Player player, String name, boolean resadmin) { } } - if (Residence.getConfigManager().isRemoveLwcOnDelete()) + if (plugin.getConfigManager().isRemoveLwcOnDelete()) removeLwcFromResidence(player, res); - Residence.msg(player, lm.Residence_Remove, name); + plugin.msg(player, lm.Residence_Remove, name); } else { String[] split = name.split("\\."); @@ -543,23 +542,23 @@ public void removeResidence(Player player, String name, boolean resadmin) { } } - // Residence.getLeaseManager().removeExpireTime(name); - causing + // plugin.getLeaseManager().removeExpireTime(name); - causing // concurrent modification exception in lease manager... worked // around for now for (String oneSub : res.getSubzoneList()) { - Residence.getPlayerManager().removeResFromPlayer(res.getOwner(), name + "." + oneSub); - Residence.getRentManager().removeRentable(name + "." + oneSub); - Residence.getTransactionManager().removeFromSale(name + "." + oneSub); + plugin.getPlayerManager().removeResFromPlayer(res.getOwner(), name + "." + oneSub); + plugin.getRentManager().removeRentable(name + "." + oneSub); + plugin.getTransactionManager().removeFromSale(name + "." + oneSub); } - Residence.getPlayerManager().removeResFromPlayer(res.getOwner(), name); - Residence.getRentManager().removeRentable(name); - Residence.getTransactionManager().removeFromSale(name); + plugin.getPlayerManager().removeResFromPlayer(res.getOwner(), name); + plugin.getRentManager().removeRentable(name); + plugin.getTransactionManager().removeFromSale(name); - if (parent == null && Residence.getConfigManager().enableEconomy() && Residence.getConfigManager().useResMoneyBack()) { + if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { int chargeamount = (int) Math.ceil(res.getAreaArray()[0].getSize() * res.getBlockSellPrice()); - TransactionManager.giveEconomyMoney(player, chargeamount); + plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); } } @@ -568,7 +567,7 @@ public void removeLwcFromResidence(final Player player, final ClaimedResidence r @Override public void run() { long time = System.currentTimeMillis(); - LWC lwc = Residence.getLwc(); + LWC lwc = plugin.getLwc(); if (lwc == null) return; if (res == null) @@ -577,7 +576,7 @@ public void run() { ProtectionCache cache = lwc.getProtectionCache(); - List list = Residence.getConfigManager().getLwcMatList(); + List list = plugin.getConfigManager().getLwcMatList(); try { for (CuboidArea area : res.getAreaArray()) { @@ -602,21 +601,21 @@ public void run() { } catch (Exception e) { } if (i > 0) - Residence.msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); + plugin.msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); return; } }); } public void removeAllByOwner(String owner) { - ArrayList list = Residence.getPlayerManager().getResidenceList(owner); + ArrayList list = plugin.getPlayerManager().getResidenceList(owner); for (String oneRes : list) { removeResidence(null, oneRes, true); } } public int getOwnedZoneCount(String player) { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); return rPlayer.getResAmount(); } @@ -631,45 +630,45 @@ public void printAreaInfo(String areaname, CommandSender sender) { public void printAreaInfo(String areaname, CommandSender sender, boolean resadmin) { ClaimedResidence res = this.getByName(areaname); if (res == null) { - Residence.msg(sender, lm.Invalid_Residence); + plugin.msg(sender, lm.Invalid_Residence); return; } areaname = res.getName(); - Residence.msg(sender, lm.General_Separator); + plugin.msg(sender, lm.General_Separator); ResidencePermissions perms = res.getPermissions(); - String resNameOwner = "&e" + Residence.msg(lm.Residence_Line, areaname); - resNameOwner += Residence.msg(lm.General_Owner, perms.getOwner()); - if (Residence.getConfigManager().enableEconomy()) { + String resNameOwner = "&e" + plugin.msg(lm.Residence_Line, areaname); + resNameOwner += plugin.msg(lm.General_Owner, perms.getOwner()); + if (plugin.getConfigManager().enableEconomy()) { if (res.isOwner(sender) || !(sender instanceof Player) || resadmin) - resNameOwner += Residence.msg(lm.Bank_Name, res.getBank().getStoredMoney()); + resNameOwner += plugin.msg(lm.Bank_Name, res.getBank().getStoredMoney()); } resNameOwner = ChatColor.translateAlternateColorCodes('&', resNameOwner); - String worldInfo = Residence.msg(lm.General_World, perms.getWorld()); + String worldInfo = plugin.msg(lm.General_World, perms.getWorld()); if (res.getPermissions().has("hidden", FlagCombo.FalseOrNone) && res.getPermissions().has("coords", FlagCombo.TrueOrNone) || resadmin) { worldInfo += "&6 (&3"; CuboidArea area = res.getAreaArray()[0]; - worldInfo += Residence.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); + worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); worldInfo += "&6; &3"; - worldInfo += Residence.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + worldInfo += plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); worldInfo += "&6)"; worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); } - worldInfo += "\n" + Residence.msg(lm.General_CreatedOn, GetTime.getTime(res.createTime)); + worldInfo += "\n" + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.createTime)); String ResFlagList = perms.listFlags(5); if (!(sender instanceof Player)) ResFlagList = perms.listFlags(); - String ResFlagMsg = Residence.msg(lm.General_ResidenceFlags, ResFlagList); + String ResFlagMsg = plugin.msg(lm.General_ResidenceFlags, ResFlagList); if (perms.getFlags().size() > 2 && sender instanceof Player) { - ResFlagMsg = Residence.msg(lm.General_ResidenceFlags, perms.listFlags(5, 3)) + "..."; + ResFlagMsg = plugin.msg(lm.General_ResidenceFlags, perms.listFlags(5, 3)) + "..."; } if (sender instanceof Player) { @@ -679,84 +678,84 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi raw = convertToRaw(null, ResFlagMsg, ResFlagList); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); } else { - Residence.msg(sender, resNameOwner); - Residence.msg(sender, worldInfo); - Residence.msg(sender, ResFlagMsg); + plugin.msg(sender, resNameOwner); + plugin.msg(sender, worldInfo); + plugin.msg(sender, ResFlagMsg); } - if (!Residence.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) - sender.sendMessage(Residence.msg(lm.General_PlayersFlags, perms.listPlayersFlags())); - else if (Residence.getConfigManager().isShortInfoUse() || sender instanceof Player) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + perms.listPlayersFlagsRaw(sender.getName(), Residence.msg( + if (!plugin.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) + sender.sendMessage(plugin.msg(lm.General_PlayersFlags, perms.listPlayersFlags())); + else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + perms.listPlayersFlagsRaw(sender.getName(), plugin.msg( lm.General_PlayersFlags, ""))); } String groupFlags = perms.listGroupFlags(); if (groupFlags.length() > 0) - Residence.msg(sender, lm.General_GroupFlags, groupFlags); + plugin.msg(sender, lm.General_GroupFlags, groupFlags); String msg = ""; - msg += Residence.msg(lm.General_TotalResSize, res.getTotalSize(), res.getXZSize()); + msg += plugin.msg(lm.General_TotalResSize, res.getTotalSize(), res.getXZSize()); - Residence.msg(sender, ChatColor.translateAlternateColorCodes('&', msg)); + plugin.msg(sender, ChatColor.translateAlternateColorCodes('&', msg)); - if (Residence.getEconomyManager() != null) { - Residence.msg(sender, lm.General_TotalWorth, (int) ((res.getTotalSize() * res.getOwnerGroup().getCostPerBlock()) + if (plugin.getEconomyManager() != null) { + plugin.msg(sender, lm.General_TotalWorth, (int) ((res.getTotalSize() * res.getOwnerGroup().getCostPerBlock()) * 100) / 100.0, (int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0); } - if (Residence.getConfigManager().useLeases() && Residence.getLeaseManager().leaseExpires(areaname)) { - String time = Residence.getLeaseManager().getExpireTime(areaname); + if (plugin.getConfigManager().useLeases() && plugin.getLeaseManager().leaseExpires(areaname)) { + String time = plugin.getLeaseManager().getExpireTime(areaname); if (time != null) - Residence.msg(sender, lm.Economy_LeaseExpire, time); + plugin.msg(sender, lm.Economy_LeaseExpire, time); } - if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isForRent(areaname) && !Residence.getRentManager().isRented(areaname)) { - String forRentMsg = Residence.msg(lm.Rent_isForRent); + if (plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isForRent(areaname) && !plugin.getRentManager().isRented(areaname)) { + String forRentMsg = plugin.msg(lm.Rent_isForRent); - RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); + RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); StringBuilder rentableString = new StringBuilder(); if (rentable != null) { - rentableString.append(Residence.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); - rentableString.append(Residence.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); - rentableString.append(Residence.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); - rentableString.append(Residence.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + rentableString.append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); } if (sender instanceof Player) Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, forRentMsg, rentableString.toString())); else - Residence.msg(sender, forRentMsg); - } else if (Residence.getConfigManager().enabledRentSystem() && Residence.getRentManager().isRented(areaname)) { - String RentedMsg = Residence.msg(lm.Residence_RentedBy, Residence.getRentManager().getRentingPlayer(areaname)); + plugin.msg(sender, forRentMsg); + } else if (plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isRented(areaname)) { + String RentedMsg = plugin.msg(lm.Residence_RentedBy, plugin.getRentManager().getRentingPlayer(areaname)); - RentableLand rentable = Residence.getRentManager().getRentableLand(areaname); - RentedLand rented = Residence.getRentManager().getRentedLand(areaname); + RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); + RentedLand rented = plugin.getRentManager().getRentedLand(areaname); StringBuilder rentableString = new StringBuilder(); if (rented != null) { - rentableString.append(Residence.msg(lm.Rent_Expire, GetTime.getTime(rented.endTime)) + "\n"); + rentableString.append(plugin.msg(lm.Rent_Expire, GetTime.getTime(rented.endTime)) + "\n"); if (rented.player.equals(sender.getName()) || resadmin || res.isOwner(sender)) - rentableString.append((rented.AutoPay ? Residence.msg(lm.Rent_AutoPayTurnedOn) : Residence.msg(lm.Rent_AutoPayTurnedOff)) + rentableString.append((rented.AutoPay ? plugin.msg(lm.Rent_AutoPayTurnedOn) : plugin.msg(lm.Rent_AutoPayTurnedOff)) + "\n"); } if (rentable != null) { - rentableString.append(Residence.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); - rentableString.append(Residence.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); - rentableString.append(Residence.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); - rentableString.append(Residence.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + rentableString.append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); } if (sender instanceof Player) Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, RentedMsg, rentableString.toString())); else - Residence.msg(sender, RentedMsg); - } else if (Residence.getTransactionManager().isForSale(areaname)) { - int amount = Residence.getTransactionManager().getSaleAmount(areaname); - String SellMsg = Residence.msg(lm.Economy_LandForSale) + " " + amount; - Residence.msg(sender, SellMsg); + plugin.msg(sender, RentedMsg); + } else if (plugin.getTransactionManager().isForSale(areaname)) { + int amount = plugin.getTransactionManager().getSaleAmount(areaname); + String SellMsg = plugin.msg(lm.Economy_LandForSale) + " " + amount; + plugin.msg(sender, SellMsg); } - Residence.msg(sender, lm.General_Separator); + plugin.msg(sender, lm.General_Separator); } public String convertToRaw(String preText, String text, String hover) { @@ -781,12 +780,12 @@ public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, ClaimedResidence reciever = this.getByName(targetArea); ClaimedResidence source = this.getByName(sourceArea); if (source == null || reciever == null) { - Residence.msg(reqPlayer, lm.Invalid_Residence); + plugin.msg(reqPlayer, lm.Invalid_Residence); return; } if (!resadmin) { if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { - Residence.msg(reqPlayer, lm.General_NoPermission); + plugin.msg(reqPlayer, lm.General_NoPermission); return; } } @@ -795,7 +794,7 @@ public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, public Map save() { Map worldmap = new LinkedHashMap<>(); - for (World world : Residence.getServ().getWorlds()) { + for (World world : plugin.getServ().getWorlds()) { Map resmap = new LinkedHashMap<>(); for (Entry res : residences.entrySet()) { if (!res.getValue().getWorld().equals(world.getName())) @@ -804,7 +803,7 @@ public Map save() { try { resmap.put(res.getValue().getResidenceName(), res.getValue().save()); } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + ChatColor.RED + " Failed to save residence (" + res.getKey() + ")!"); + Bukkit.getConsoleSender().sendMessage(plugin.prefix + ChatColor.RED + " Failed to save residence (" + res.getKey() + ")!"); Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); } } @@ -818,17 +817,17 @@ public ResidenceManager load(Map root) throws Exception { if (root == null) return resm; - for (World world : Residence.getServ().getWorlds()) { + for (World world : plugin.getServ().getWorlds()) { long time = System.currentTimeMillis(); @SuppressWarnings("unchecked") Map reslist = (Map) root.get(world.getName()); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loading " + world.getName() + " data into memory..."); + Bukkit.getConsoleSender().sendMessage(plugin.prefix + " Loading " + world.getName() + " data into memory..."); if (reslist != null) { try { resm.chunkResidences.put(world.getName(), loadMap(world.getName(), reslist, resm)); } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + ChatColor.RED + "Error in loading save file for world: " + world.getName()); - if (Residence.getConfigManager().stopOnSaveError()) + Bukkit.getConsoleSender().sendMessage(plugin.prefix + ChatColor.RED + "Error in loading save file for world: " + world.getName()); + if (plugin.getConfigManager().stopOnSaveError()) throw (ex); } } @@ -836,7 +835,7 @@ public ResidenceManager load(Map root) throws Exception { long pass = System.currentTimeMillis() - time; String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loaded " + world.getName() + " data into memory. (" + PastTime + ")"); + Bukkit.getConsoleSender().sendMessage(plugin.prefix + " Loaded " + world.getName() + " data into memory. (" + PastTime + ")"); } return resm; } @@ -849,8 +848,8 @@ public Map> loadMap(String worldName, Map int i = 0; int y = 0; for (Entry res : root.entrySet()) { - if (i == 100 & Residence.getConfigManager().isUUIDConvertion()) - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " " + worldName + " UUID conversion done: " + y + " of " + root.size()); + if (i == 100 & plugin.getConfigManager().isUUIDConvertion()) + Bukkit.getConsoleSender().sendMessage(plugin.prefix + " " + worldName + " UUID conversion done: " + y + " of " + root.size()); if (i >= 100) i = 0; i++; @@ -863,13 +862,13 @@ public Map> loadMap(String worldName, Map if (residence == null) continue; - if (residence.getPermissions().getOwnerUUID().toString().equals(Residence.getServerLandUUID()) && + if (residence.getPermissions().getOwnerUUID().toString().equals(plugin.getServerLandUUID()) && !residence.getOwner().equalsIgnoreCase("Server land") && - !residence.getOwner().equalsIgnoreCase(Residence.getServerLandname())) + !residence.getOwner().equalsIgnoreCase(plugin.getServerLandname())) continue; if (residence.getOwner().equalsIgnoreCase("Server land")) { - residence.getPermissions().setOwner(Residence.getServerLandname(), false); + residence.getPermissions().setOwner(plugin.getServerLandname(), false); } String resName = res.getKey().toLowerCase(); @@ -896,10 +895,10 @@ public Map> loadMap(String worldName, Map resm.residences.put(resName, residence); } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + ChatColor.RED + " Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + Bukkit.getConsoleSender().sendMessage(plugin.prefix + ChatColor.RED + " Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:"); Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); - if (Residence.getConfigManager().stopOnSaveError()) { + if (plugin.getConfigManager().stopOnSaveError()) { throw (ex); } } @@ -934,46 +933,45 @@ public boolean renameResidence(String oldName, String newName) { } public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { - if (!player.hasPermission("residence.rename")) { - Residence.msg(player, lm.General_NoPermission); + if (!plugin.hasPermission(player, "residence.rename")) { return false; } - if (!Residence.validName(newName)) { - Residence.msg(player, lm.Invalid_NameCharacters); + if (!plugin.validName(newName)) { + plugin.msg(player, lm.Invalid_NameCharacters); return false; } ClaimedResidence res = this.getByName(oldName); if (res == null) { - Residence.msg(player, lm.Invalid_Residence); + plugin.msg(player, lm.Invalid_Residence); return false; } oldName = res.getName(); if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { if (res.getParent() == null) { if (residences.containsKey(newName.toLowerCase())) { - Residence.msg(player, lm.Residence_AlreadyExists, newName); + plugin.msg(player, lm.Residence_AlreadyExists, newName); return false; } ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); - Residence.getServ().getPluginManager().callEvent(resevent); + plugin.getServ().getPluginManager().callEvent(resevent); removeChunkList(oldName); res.setName(newName); residences.put(newName.toLowerCase(), res); residences.remove(oldName.toLowerCase()); - Residence.getPlayerManager().renameResidence(player.getName(), oldName, newName); + plugin.getPlayerManager().renameResidence(player.getName(), oldName, newName); calculateChunks(newName); - if (Residence.getConfigManager().useLeases()) { - Residence.getLeaseManager().updateLeaseName(oldName, newName); + if (plugin.getConfigManager().useLeases()) { + plugin.getLeaseManager().updateLeaseName(oldName, newName); } - Residence.getSignUtil().updateSignResName(res); + plugin.getSignUtil().updateSignResName(res); - Residence.msg(player, lm.Residence_Rename, oldName, newName); + plugin.msg(player, lm.Residence_Rename, oldName, newName); return true; } @@ -982,12 +980,12 @@ public boolean renameResidence(Player player, String oldName, String newName, bo boolean feed = parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); - Residence.getSignUtil().updateSignResName(res); + plugin.getSignUtil().updateSignResName(res); return feed; } - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); return false; } @@ -995,51 +993,51 @@ public boolean renameResidence(Player player, String oldName, String newName, bo public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { ClaimedResidence res = getByName(residence); if (res == null) { - Residence.msg(reqPlayer, lm.Invalid_Residence); + plugin.msg(reqPlayer, lm.Invalid_Residence); return; } residence = res.getName(); if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { - Residence.msg(reqPlayer, lm.General_NoPermission); + plugin.msg(reqPlayer, lm.General_NoPermission); return; } - Player giveplayer = Residence.getServ().getPlayer(targPlayer); + Player giveplayer = plugin.getServ().getPlayer(targPlayer); if (giveplayer == null || !giveplayer.isOnline()) { - Residence.msg(reqPlayer, lm.General_NotOnline); + plugin.msg(reqPlayer, lm.General_NotOnline); return; } CuboidArea[] areas = res.getAreaArray(); - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(giveplayer); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(giveplayer); PermissionGroup group = rPlayer.getGroup(); if (areas.length > group.getMaxPhysicalPerResidence() && !resadmin) { - Residence.msg(reqPlayer, lm.Residence_GiveLimits); + plugin.msg(reqPlayer, lm.Residence_GiveLimits); return; } if (!hasMaxZones(giveplayer.getName(), rPlayer.getMaxRes()) && !resadmin) { - Residence.msg(reqPlayer, lm.Residence_GiveLimits); + plugin.msg(reqPlayer, lm.Residence_GiveLimits); return; } if (!resadmin) { for (CuboidArea area : areas) { if (!res.isSubzone() && !res.isSmallerThanMax(giveplayer, area, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(giveplayer, area, resadmin)) { - Residence.msg(reqPlayer, lm.Residence_GiveLimits); + plugin.msg(reqPlayer, lm.Residence_GiveLimits); return; } } } - Residence.getPlayerManager().removeResFromPlayer(reqPlayer, residence); - Residence.getPlayerManager().addResidence(targPlayer, res); + plugin.getPlayerManager().removeResFromPlayer(reqPlayer, residence); + plugin.getPlayerManager().addResidence(targPlayer, res); res.getPermissions().setOwner(giveplayer.getName(), true); // Fix phrases here - Residence.msg(reqPlayer, lm.Residence_Give, residence, giveplayer.getName()); - Residence.msg(giveplayer, lm.Residence_Recieve, residence, reqPlayer.getName()); + plugin.msg(reqPlayer, lm.Residence_Give, residence, giveplayer.getName()); + plugin.msg(giveplayer, lm.Residence_Recieve, residence, reqPlayer.getName()); } public void removeAllFromWorld(CommandSender sender, String world) { @@ -1060,7 +1058,7 @@ public void removeAllFromWorld(CommandSender sender, String world) { sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); } - Residence.getPlayerManager().fillList(); + plugin.getPlayerManager().fillList(); } public int getResidenceCount() { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 5beb7ef18..ba2c0daa8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -164,11 +164,11 @@ public boolean hasApplicableFlag(String player, String flag) { public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) { if (player != null) { if (!resadmin) { - if (!Residence.getConfigManager().isOfflineMode() && !player.getUniqueId().toString().equals(ownerUUID.toString())) { - Residence.msg(player, lm.General_NoPermission); + if (!Residence.getInstance().getConfigManager().isOfflineMode() && !player.getUniqueId().toString().equals(ownerUUID.toString())) { + Residence.getInstance().msg(player, lm.General_NoPermission); return; } else if (!player.getName().equals(ownerLastKnownName)) { - Residence.msg(player, lm.General_NoPermission); + Residence.getInstance().msg(player, lm.General_NoPermission); return; } } @@ -183,7 +183,7 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) this.cuboidFlags.put(flag.getKey(), flag.getValue()); } else { if (player != null) - Residence.msg(player, lm.Flag_SetDeny, flag.getKey()); + Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); } } for (Entry> plists : list.playerFlags.entrySet()) { @@ -193,7 +193,7 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) map.put(flag.getKey(), flag.getValue()); } else { if (player != null) - Residence.msg(player, lm.Flag_SetDeny, flag.getKey()); + Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); } } } @@ -205,12 +205,12 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue()); } else { if (player != null) - Residence.msg(player, lm.Flag_SetDeny, flag.getKey()); + Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); } } } if (player != null) - Residence.msg(player, lm.Residence_PermissionsApply); + Residence.getInstance().msg(player, lm.Residence_PermissionsApply); } public boolean hasResidencePermission(CommandSender sender, boolean requireOwner) { @@ -222,13 +222,13 @@ public boolean hasResidencePermission(CommandSender sender, boolean requireOwner if (par.getPermissions().playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue)) return true; - if (Residence.getConfigManager().enabledRentSystem()) { + if (Residence.getInstance().getConfigManager().enabledRentSystem()) { String resname = residence.getName(); - if (Residence.getRentManager().isRented(resname)) { + if (Residence.getInstance().getRentManager().isRented(resname)) { if (requireOwner) { return false; } - String renter = Residence.getRentManager().getRentingPlayer(resname); + String renter = Residence.getInstance().getRentManager().getRentingPlayer(resname); if (sender.getName().equals(renter)) { return true; } @@ -243,20 +243,20 @@ public boolean hasResidencePermission(CommandSender sender, boolean requireOwner private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState state, boolean globalflag, boolean resadmin) { if (!checkValidFlag(flag, globalflag)) { - Residence.msg(sender, lm.Invalid_Flag); + Residence.getInstance().msg(sender, lm.Invalid_Flag); return false; } if (state == FlagState.INVALID) { - Residence.msg(sender, lm.Invalid_FlagState); + Residence.getInstance().msg(sender, lm.Invalid_FlagState); return false; } if (!resadmin) { if (!this.hasResidencePermission(sender, false)) { - Residence.msg(sender, lm.General_NoPermission); + Residence.getInstance().msg(sender, lm.General_NoPermission); return false; } if (!hasFlagAccess(this.getOwner(), flag) && !sender.hasPermission("residence.flag." + flag.toLowerCase())) { - Residence.msg(sender, lm.Flag_SetFailed, flag); + Residence.getInstance().msg(sender, lm.Flag_SetFailed, flag); return false; } } @@ -287,7 +287,7 @@ public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String f return false; if (super.setPlayerFlag(targetPlayer, flag, state)) { if (Show) - Residence.msg(sender, lm.Flag_Set, flag, residence.getName(), flagstate); + Residence.getInstance().msg(sender, lm.Flag_Set, flag, residence.getName(), flagstate); return true; } } @@ -306,11 +306,11 @@ public boolean setGroupFlag(Player player, String group, String flag, String fla if (fc.isCancelled()) return false; if (super.setGroupFlag(group, flag, state)) { - Residence.msg(player, lm.Flag_Set, flag, residence.getName(), flagstate); + Residence.getInstance().msg(player, lm.Flag_Set, flag, residence.getName(), flagstate); return true; } } else { - Residence.msg(player, lm.Invalid_Group); + Residence.getInstance().msg(player, lm.Invalid_Group); return false; } } @@ -323,8 +323,8 @@ public boolean setFlag(CommandSender sender, String flag, String flagstate, bool FlagState state = FlagPermissions.stringToFlagState(flagstate); - if (Residence.getConfigManager().isPvPFlagPrevent()) { - for (String oneFlag : Residence.getConfigManager().getProtectedFlagsList()) { + if (Residence.getInstance().getConfigManager().isPvPFlagPrevent()) { + for (String oneFlag : Residence.getInstance().getConfigManager().getProtectedFlagsList()) { if (!flag.equalsIgnoreCase(oneFlag)) continue; @@ -335,7 +335,7 @@ public boolean setFlag(CommandSender sender, String flag, String flagstate, bool if (!one.getName().equals(this.getOwner())) size++; } - Residence.msg(sender, lm.Flag_ChangeDeny, flag, size); + Residence.getInstance().msg(sender, lm.Flag_ChangeDeny, flag, size); return false; } } @@ -348,7 +348,7 @@ public boolean setFlag(CommandSender sender, String flag, String flagstate, bool if (fc.isCancelled()) return false; if (super.setFlag(flag, state)) { - Residence.msg(sender, lm.Flag_Set, flag, this.residence.getName(), flagstate); + Residence.getInstance().msg(sender, lm.Flag_Set, flag, this.residence.getName(), flagstate); return true; } } @@ -364,7 +364,7 @@ public boolean removeAllPlayerFlags(CommandSender sender, String targetPlayer, b return false; } super.removeAllPlayerFlags(targetPlayer); - Residence.msg(sender, lm.Flag_RemovedAll, targetPlayer, this.residence.getName()); + Residence.getInstance().msg(sender, lm.Flag_RemovedAll, targetPlayer, this.residence.getName()); return true; } return false; @@ -378,7 +378,7 @@ public boolean removeAllGroupFlags(Player player, String group, boolean resadmin return false; } super.removeAllGroupFlags(group); - Residence.msg(player, lm.Flag_RemovedGroup, group, this.residence.getName()); + Residence.getInstance().msg(player, lm.Flag_RemovedGroup, group, this.residence.getName()); return true; } return false; @@ -414,9 +414,9 @@ public boolean setPlayerFlag(String player, String flag, FlagState state) { public void applyDefaultFlags(Player player, boolean resadmin) { if (this.hasResidencePermission(player, true) || resadmin) { this.applyDefaultFlags(); - Residence.msg(player, lm.Flag_Default); + Residence.getInstance().msg(player, lm.Flag_Default); } else - Residence.msg(player, lm.General_NoPermission); + Residence.getInstance().msg(player, lm.General_NoPermission); } public void applyDefaultFlags() { @@ -473,7 +473,7 @@ public void setOwner(String newOwner, boolean resetFlags) { } public String getOwner() { - if (Residence.getConfigManager().isOfflineMode()) + if (Residence.getInstance().getConfigManager().isOfflineMode()) return ownerLastKnownName; if (ownerUUID.toString().equals(Residence.getServerLandUUID())) //check for server land return Residence.getServerLandname(); @@ -549,9 +549,9 @@ public static ResidencePermissions load(String worldName, ClaimedResidence res, public void applyGlobalDefaults() { this.clearFlags(); - FlagPermissions gRD = Residence.getConfigManager().getGlobalResidenceDefaultFlags(); - FlagPermissions gCD = Residence.getConfigManager().getGlobalCreatorDefaultFlags(); - Map gGD = Residence.getConfigManager().getGlobalGroupDefaultFlags(); + FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); + FlagPermissions gCD = Residence.getInstance().getConfigManager().getGlobalCreatorDefaultFlags(); + Map gGD = Residence.getInstance().getConfigManager().getGlobalGroupDefaultFlags(); for (Entry entry : gRD.cuboidFlags.entrySet()) { if (entry.getValue()) this.setFlag(entry.getKey(), FlagState.TRUE); @@ -618,7 +618,7 @@ public boolean setFlagGroupOnPlayer(CommandSender sender, String target, String } } if (flagString.length() > 0) - Residence.msg(sender, lm.Flag_Set, flagString, target, state); + Residence.getInstance().msg(sender, lm.Flag_Set, flagString, target, state); return changed; } return false; diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index e574f0202..7d1b9ef99 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -1,124 +1,129 @@ -package com.bekvon.bukkit.residence.selection; - -import java.util.HashMap; -import org.bukkit.Location; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.AutoSelector; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.CuboidArea; - -public class AutoSelection { - - private HashMap list = new HashMap(); - - public void switchAutoSelection(Player player) { - if (!list.containsKey(player.getName().toLowerCase())) { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(player.getWorld().getName()); - list.put(player.getName().toLowerCase(), new AutoSelector(group, System.currentTimeMillis())); - Residence.msg(player, lm.Select_AutoEnabled); - } else { - list.remove(player.getName().toLowerCase()); - Residence.msg(player, lm.Select_AutoDisabled); - } - } - - public void UpdateSelection(Player player) { - - if (!getList().containsKey(player.getName().toLowerCase())) - return; - - AutoSelector AutoSelector = getList().get(player.getName().toLowerCase()); - - int Curenttime = (int) (System.currentTimeMillis() - AutoSelector.getTime()) / 1000; - - if (Curenttime > 270) { - list.remove(player.getName().toLowerCase()); - Residence.msg(player, lm.Select_AutoDisabled); - return; - } - - String name = player.getName(); - - Location cloc = player.getLocation(); - - Location loc1 = Residence.getSelectionManager().getPlayerLoc1(name); - Location loc2 = Residence.getSelectionManager().getPlayerLoc2(name); - - if (loc1 == null) { - Residence.getSelectionManager().placeLoc1(player, cloc, false); - loc1 = player.getLocation(); - return; - } - - if (loc2 == null) { - Residence.getSelectionManager().placeLoc2(player, cloc, true); - loc2 = player.getLocation(); - return; - } - - boolean changed = false; - - CuboidArea area = new CuboidArea(loc1, loc2); - Location hloc = area.getHighLoc(); - Location lloc = area.getLowLoc(); - - if (cloc.getBlockX() < lloc.getBlockX()) { - lloc.setX(cloc.getBlockX()); - changed = true; - } - - if (cloc.getBlockY() <= lloc.getBlockY()) { - lloc.setY(cloc.getBlockY() - 1); - changed = true; - } - - if (cloc.getBlockZ() < lloc.getBlockZ()) { - lloc.setZ(cloc.getBlockZ()); - changed = true; - } - - if (cloc.getBlockX() > hloc.getBlockX()) { - hloc.setX(cloc.getBlockX()); - changed = true; - } - - if (cloc.getBlockY() >= hloc.getBlockY()) { - hloc.setY(cloc.getBlockY() + 1); - changed = true; - } - - if (cloc.getBlockZ() > hloc.getBlockZ()) { - hloc.setZ(cloc.getBlockZ()); - changed = true; - } - - PermissionGroup group = AutoSelector.getGroup(); - - if (area.getXSize() > group.getMaxX()) { - return; - } - - if (area.getYSize() > group.getMaxY() && !Residence.getConfigManager().isSelectionIgnoreY()) { - return; - } - - if (area.getZSize() > group.getMaxZ()) { - return; - } - - if (changed) { - Residence.getSelectionManager().placeLoc1(player, hloc, false); - Residence.getSelectionManager().placeLoc2(player, lloc, true); - Residence.getSelectionManager().showSelectionInfoInActionBar(player); - } - } - - public HashMap getList() { - return list; - } -} +package com.bekvon.bukkit.residence.selection; + +import java.util.HashMap; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.AutoSelector; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.CuboidArea; + +public class AutoSelection { + + private HashMap list = new HashMap(); + private Residence plugin; + + public AutoSelection(Residence residence) { + this.plugin = residence; + } + + public void switchAutoSelection(Player player) { + if (!list.containsKey(player.getName().toLowerCase())) { + ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(player.getWorld().getName()); + list.put(player.getName().toLowerCase(), new AutoSelector(group, System.currentTimeMillis())); + plugin.msg(player, lm.Select_AutoEnabled); + } else { + list.remove(player.getName().toLowerCase()); + plugin.msg(player, lm.Select_AutoDisabled); + } + } + + public void UpdateSelection(Player player) { + + if (!getList().containsKey(player.getName().toLowerCase())) + return; + + AutoSelector AutoSelector = getList().get(player.getName().toLowerCase()); + + int Curenttime = (int) (System.currentTimeMillis() - AutoSelector.getTime()) / 1000; + + if (Curenttime > 270) { + list.remove(player.getName().toLowerCase()); + plugin.msg(player, lm.Select_AutoDisabled); + return; + } + + String name = player.getName(); + + Location cloc = player.getLocation(); + + Location loc1 = plugin.getSelectionManager().getPlayerLoc1(name); + Location loc2 = plugin.getSelectionManager().getPlayerLoc2(name); + + if (loc1 == null) { + plugin.getSelectionManager().placeLoc1(player, cloc, false); + loc1 = player.getLocation(); + return; + } + + if (loc2 == null) { + plugin.getSelectionManager().placeLoc2(player, cloc, true); + loc2 = player.getLocation(); + return; + } + + boolean changed = false; + + CuboidArea area = new CuboidArea(loc1, loc2); + Location hloc = area.getHighLoc(); + Location lloc = area.getLowLoc(); + + if (cloc.getBlockX() < lloc.getBlockX()) { + lloc.setX(cloc.getBlockX()); + changed = true; + } + + if (cloc.getBlockY() <= lloc.getBlockY()) { + lloc.setY(cloc.getBlockY() - 1); + changed = true; + } + + if (cloc.getBlockZ() < lloc.getBlockZ()) { + lloc.setZ(cloc.getBlockZ()); + changed = true; + } + + if (cloc.getBlockX() > hloc.getBlockX()) { + hloc.setX(cloc.getBlockX()); + changed = true; + } + + if (cloc.getBlockY() >= hloc.getBlockY()) { + hloc.setY(cloc.getBlockY() + 1); + changed = true; + } + + if (cloc.getBlockZ() > hloc.getBlockZ()) { + hloc.setZ(cloc.getBlockZ()); + changed = true; + } + + PermissionGroup group = AutoSelector.getGroup(); + + if (area.getXSize() > group.getMaxX()) { + return; + } + + if (area.getYSize() > group.getMaxY() && !plugin.getConfigManager().isSelectionIgnoreY()) { + return; + } + + if (area.getZSize() > group.getMaxZ()) { + return; + } + + if (changed) { + plugin.getSelectionManager().placeLoc1(player, hloc, false); + plugin.getSelectionManager().placeLoc2(player, lloc, true); + plugin.getSelectionManager().showSelectionInfoInActionBar(player); + } + } + + public HashMap getList() { + return list; + } +} diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index 5c73186cb..7d4654762 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -18,8 +18,15 @@ @SuppressWarnings("deprecation") public class SchematicsManager { + private Residence plugin; + + public SchematicsManager(Residence residence) { + this.plugin = residence; + // TODO Auto-generated constructor stub + } + public boolean save(ClaimedResidence res) { - if (Residence.getWorldEdit() == null) + if (plugin.getWorldEdit() == null) return false; if (res == null) return false; @@ -66,7 +73,7 @@ public boolean save(ClaimedResidence res) { public boolean load(ClaimedResidence res) { - if (Residence.getWorldEdit() == null) + if (plugin.getWorldEdit() == null) return false; if (res == null) @@ -96,8 +103,8 @@ public boolean load(ClaimedResidence res) { if (cc == null) return false; Vector or = cc.getOrigin(); - ClaimedResidence r1 = Residence.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX(), or.getBlockY(), or.getBlockZ())); - ClaimedResidence r2 = Residence.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX() + cc.getWidth() - 1, or.getBlockY() + cc.getHeight() - 1, or + ClaimedResidence r1 = plugin.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX(), or.getBlockY(), or.getBlockZ())); + ClaimedResidence r2 = plugin.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX() + cc.getWidth() - 1, or.getBlockY() + cc.getHeight() - 1, or .getBlockZ() + cc.getLength() - 1)); if (r1 == null || r2 == null) return false; @@ -117,7 +124,7 @@ public boolean load(ClaimedResidence res) { } public boolean delete(ClaimedResidence res) { - if (Residence.getWorldEdit() == null) + if (plugin.getWorldEdit() == null) return false; if (res == null) return false; @@ -130,7 +137,7 @@ public boolean delete(ClaimedResidence res) { } public boolean rename(ClaimedResidence res, String newName) { - if (Residence.getWorldEdit() == null) + if (plugin.getWorldEdit() == null) return false; if (res == null) return false; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 87ab42f20..4c9713acc 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -26,7 +26,7 @@ public class SelectionManager { protected Map playerLoc1; protected Map playerLoc2; protected Server server; - private Residence plugin; + protected Residence plugin; private HashMap vMap = new HashMap(); @@ -81,7 +81,7 @@ public void placeLoc2(Player player, Location loc, boolean show) { } private void updateForY(Player player) { - if (Residence.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName()) && !player.hasPermission(p)) { + if (plugin.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName()) && !player.hasPermission(p)) { this.qsky(player); this.qbedrock(player); } @@ -125,18 +125,18 @@ public boolean hasPlacedBoth(String player) { public void showSelectionInfoInActionBar(Player player) { - if (!Residence.getConfigManager().useActionBarOnSelection()) + if (!plugin.getConfigManager().useActionBarOnSelection()) return; String pname = player.getName(); CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); - String Message = Residence.msg(lm.Select_TotalSize, cuboidArea.getSize()); + String Message = plugin.msg(lm.Select_TotalSize, cuboidArea.getSize()); ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); - if (Residence.getConfigManager().enableEconomy()) - Message += " " + Residence.msg(lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); + if (plugin.getConfigManager().enableEconomy()) + Message += " " + plugin.msg(lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); Residence.getAB().send(player, Message); @@ -145,28 +145,28 @@ public void showSelectionInfoInActionBar(Player player) { public void showSelectionInfo(Player player) { String pname = player.getName(); if (hasPlacedBoth(pname)) { - Residence.msg(player, lm.General_Separator); + plugin.msg(player, lm.General_Separator); CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); - Residence.msg(player, lm.Select_TotalSize, cuboidArea.getSize()); + plugin.msg(player, lm.Select_TotalSize, cuboidArea.getSize()); ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); - if (Residence.getConfigManager().enableEconomy()) - Residence.msg(player, lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); - player.sendMessage(ChatColor.YELLOW + "X" + Residence.msg(lm.General_Size, cuboidArea.getXSize())); - player.sendMessage(ChatColor.YELLOW + "Y" + Residence.msg(lm.General_Size, cuboidArea.getYSize())); - player.sendMessage(ChatColor.YELLOW + "Z" + Residence.msg(lm.General_Size, cuboidArea.getZSize())); - Residence.msg(player, lm.General_Separator); + if (plugin.getConfigManager().enableEconomy()) + plugin.msg(player, lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); + player.sendMessage(ChatColor.YELLOW + "X" + plugin.msg(lm.General_Size, cuboidArea.getXSize())); + player.sendMessage(ChatColor.YELLOW + "Y" + plugin.msg(lm.General_Size, cuboidArea.getYSize())); + player.sendMessage(ChatColor.YELLOW + "Z" + plugin.msg(lm.General_Size, cuboidArea.getZSize())); + plugin.msg(player, lm.General_Separator); Visualizer v = new Visualizer(player); v.setAreas(this.getSelectionCuboid(player)); this.showBounds(player, v); } else - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); } public void showBounds(final Player player, final Visualizer v) { - if (!Residence.getConfigManager().useVisualizer()) + if (!plugin.getConfigManager().useVisualizer()) return; Visualizer tv = vMap.get(player.getName()); if (tv != null) { @@ -190,8 +190,8 @@ public void run() { public List getLocations(Location lowLoc, Location loc, Double TX, Double TY, Double TZ, Double Range, boolean StartFromZero) { - double eachCollumn = Residence.getConfigManager().getVisualizerRowSpacing(); - double eachRow = Residence.getConfigManager().getVisualizerCollumnSpacing(); + double eachCollumn = plugin.getConfigManager().getVisualizerRowSpacing(); + double eachRow = plugin.getConfigManager().getVisualizerCollumnSpacing(); if (TX == 0D) TX = eachCollumn + eachCollumn * 0.1; @@ -336,7 +336,7 @@ public boolean MakeBorders(final Player player, final boolean error) { areas = v.getErrorAreas(); Location loc = player.getLocation(); - int Range = Residence.getConfigManager().getVisualizerRange(); + int Range = plugin.getConfigManager().getVisualizerRange(); final List locList = new ArrayList(); final List locList2 = new ArrayList(); @@ -422,11 +422,11 @@ public void run() { int timesMore = 1; int errorTimesMore = 1; - if (size > Residence.getConfigManager().getVisualizerSidesCap() && !same) { - timesMore = size / Residence.getConfigManager().getVisualizerSidesCap() + 1; + if (size > plugin.getConfigManager().getVisualizerSidesCap() && !same) { + timesMore = size / plugin.getConfigManager().getVisualizerSidesCap() + 1; } - if (errorSize > Residence.getConfigManager().getVisualizerFrameCap() && !same) { - errorTimesMore = errorSize / Residence.getConfigManager().getVisualizerFrameCap() + 1; + if (errorSize > plugin.getConfigManager().getVisualizerFrameCap() && !same) { + errorTimesMore = errorSize / plugin.getConfigManager().getVisualizerFrameCap() + 1; } List trimed = new ArrayList(); @@ -439,14 +439,14 @@ public void run() { if (!error) for (int i = 0; i < locList.size(); i += timesMore) { Location l = locList.get(i); - player.spigot().playEffect(l, Residence.getConfigManager().getSelectedSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + player.spigot().playEffect(l, plugin.getConfigManager().getSelectedSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); if (!same) trimed.add(l); } else for (int i = 0; i < locList.size(); i += timesMore) { Location l = locList.get(i); - player.spigot().playEffect(l, Residence.getConfigManager().getOverlapSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + player.spigot().playEffect(l, plugin.getConfigManager().getOverlapSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); if (!same) trimed.add(l); } @@ -454,14 +454,14 @@ public void run() { if (!error) for (int i = 0; i < locList2.size(); i += errorTimesMore) { Location l = locList2.get(i); - player.spigot().playEffect(l, Residence.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + player.spigot().playEffect(l, plugin.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); if (!same) trimed2.add(l); } else for (int i = 0; i < locList2.size(); i += errorTimesMore) { Location l = locList2.get(i); - player.spigot().playEffect(l, Residence.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + player.spigot().playEffect(l, plugin.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); if (!same) trimed2.add(l); } @@ -469,28 +469,28 @@ public void run() { if (!error) for (int i = 0; i < locList.size(); i += timesMore) { Location l = locList.get(i); - Residence.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, l, player); + plugin.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, l, player); if (!same) trimed.add(l); } else for (int i = 0; i < locList.size(); i += timesMore) { Location l = locList.get(i); - Residence.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, l, player); + plugin.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, l, player); if (!same) trimed.add(l); } if (!error) for (int i = 0; i < locList2.size(); i += errorTimesMore) { Location l = locList2.get(i); - Residence.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); + plugin.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); if (!same) trimed2.add(l); } else for (int i = 0; i < locList2.size(); i += errorTimesMore) { Location l = locList2.get(i); - Residence.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); + plugin.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); if (!same) trimed2.add(l); } @@ -516,7 +516,7 @@ public void run() { if (v.isOnce()) return true; - if (v.getStart() + Residence.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) + if (v.getStart() + plugin.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) return false; int scid = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @@ -527,7 +527,7 @@ public void run() { } return; } - }, Residence.getConfigManager().getVisualizerUpdateInterval() * 1L); + }, plugin.getConfigManager().getVisualizerUpdateInterval() * 1L); if (!error) v.setId(scid); else @@ -541,7 +541,7 @@ public void vert(Player player, boolean resadmin) { this.sky(player, resadmin); this.bedrock(player, resadmin); } else { - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); } } @@ -591,9 +591,9 @@ public void sky(Player player, boolean resadmin) { } playerLoc2.get(player.getName()).setY(newy); } - Residence.msg(player, lm.Select_Sky); + plugin.msg(player, lm.Select_Sky); } else { - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); } } @@ -622,9 +622,9 @@ public void bedrock(Player player, boolean resadmin) { } playerLoc2.get(player.getName()).setY(newy); } - Residence.msg(player, lm.Select_Bedrock); + plugin.msg(player, lm.Select_Bedrock); } else { - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); } } @@ -643,16 +643,16 @@ public void selectChunk(Player player) { int ymax = player.getLocation().getWorld().getMaxHeight() - 1; playerLoc1.put(player.getName(), new Location(player.getWorld(), xcoord, ycoord, zcoord)); playerLoc2.put(player.getName(), new Location(player.getWorld(), xmax, ymax, zmax)); - Residence.msg(player, lm.Select_Success); + plugin.msg(player, lm.Select_Success); } public boolean worldEdit(Player player) { - Residence.msg(player, lm.General_WorldEditNotFound); + plugin.msg(player, lm.General_WorldEditNotFound); return false; } public boolean worldEditUpdate(Player player) { - Residence.msg(player, lm.General_WorldEditNotFound); + plugin.msg(player, lm.General_WorldEditNotFound); return false; } @@ -662,18 +662,18 @@ public void selectBySize(Player player, int xsize, int ysize, int zsize) { Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize); placeLoc1(player, loc1, false); placeLoc2(player, loc2, true); - Residence.msg(player, lm.Select_Success); + plugin.msg(player, lm.Select_Success); showSelectionInfo(player); } public void modify(Player player, boolean shift, double amount) { if (!hasPlacedBoth(player.getName())) { - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); return; } Direction d = getDirection(player); if (d == null) { - Residence.msg(player, lm.Invalid_Direction); + plugin.msg(player, lm.Invalid_Direction); return; } CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); @@ -682,7 +682,7 @@ public void modify(Player player, boolean shift, double amount) { double oldy = area.getLowLoc().getBlockY(); oldy = oldy - amount; if (oldy < MIN_HEIGHT) { - Residence.msg(player, lm.Select_TooLow); + plugin.msg(player, lm.Select_TooLow); oldy = MIN_HEIGHT; } area.getLowLoc().setY(oldy); @@ -690,9 +690,9 @@ public void modify(Player player, boolean shift, double amount) { double oldy2 = area.getHighLoc().getBlockY(); oldy2 = oldy2 - amount; area.getHighLoc().setY(oldy2); - Residence.msg(player, lm.Shifting_Down, amount); + plugin.msg(player, lm.Shifting_Down, amount); } else - Residence.msg(player, lm.Expanding_Down, amount); + plugin.msg(player, lm.Expanding_Down, amount); break; case MINUSX: double oldx = area.getLowLoc().getBlockX(); @@ -702,9 +702,9 @@ public void modify(Player player, boolean shift, double amount) { double oldx2 = area.getHighLoc().getBlockX(); oldx2 = oldx2 - amount; area.getHighLoc().setX(oldx2); - Residence.msg(player, lm.Shifting_West, amount); + plugin.msg(player, lm.Shifting_West, amount); } else - Residence.msg(player, lm.Expanding_West, amount); + plugin.msg(player, lm.Expanding_West, amount); break; case MINUSZ: double oldz = area.getLowLoc().getBlockZ(); @@ -714,9 +714,9 @@ public void modify(Player player, boolean shift, double amount) { double oldz2 = area.getHighLoc().getBlockZ(); oldz2 = oldz2 - amount; area.getHighLoc().setZ(oldz2); - Residence.msg(player, lm.Shifting_North, amount); + plugin.msg(player, lm.Shifting_North, amount); } else - Residence.msg(player, lm.Expanding_North, amount); + plugin.msg(player, lm.Expanding_North, amount); break; case PLUSX: oldx = area.getHighLoc().getBlockX(); @@ -726,9 +726,9 @@ public void modify(Player player, boolean shift, double amount) { double oldx2 = area.getLowLoc().getBlockX(); oldx2 = oldx2 + amount; area.getLowLoc().setX(oldx2); - Residence.msg(player, lm.Shifting_East, amount); + plugin.msg(player, lm.Shifting_East, amount); } else - Residence.msg(player, lm.Expanding_East, amount); + plugin.msg(player, lm.Expanding_East, amount); break; case PLUSZ: oldz = area.getHighLoc().getBlockZ(); @@ -738,15 +738,15 @@ public void modify(Player player, boolean shift, double amount) { double oldz2 = area.getLowLoc().getBlockZ(); oldz2 = oldz2 + amount; area.getLowLoc().setZ(oldz2); - Residence.msg(player, lm.Shifting_South, amount); + plugin.msg(player, lm.Shifting_South, amount); } else - Residence.msg(player, lm.Expanding_South, amount); + plugin.msg(player, lm.Expanding_South, amount); break; case UP: oldy = area.getHighLoc().getBlockY(); oldy = oldy + amount; if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { - Residence.msg(player, lm.Select_TooHigh); + plugin.msg(player, lm.Select_TooHigh); oldy = player.getLocation().getWorld().getMaxHeight() - 1; } area.getHighLoc().setY(oldy); @@ -754,9 +754,9 @@ public void modify(Player player, boolean shift, double amount) { double oldy2 = area.getLowLoc().getBlockY(); oldy2 = oldy2 + amount; area.getLowLoc().setY(oldy2); - Residence.msg(player, lm.Shifting_Up, amount); + plugin.msg(player, lm.Shifting_Up, amount); } else - Residence.msg(player, lm.Expanding_Up, amount); + plugin.msg(player, lm.Expanding_Up, amount); break; default: break; @@ -770,12 +770,12 @@ public boolean contract(Player player, double amount) { public boolean contract(Player player, double amount, @SuppressWarnings("unused") boolean resadmin) { if (!hasPlacedBoth(player.getName())) { - Residence.msg(player, lm.Select_Points); + plugin.msg(player, lm.Select_Points); return false; } Direction d = getDirection(player); if (d == null) { - Residence.msg(player, lm.Invalid_Direction); + plugin.msg(player, lm.Invalid_Direction); return false; } CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); @@ -784,45 +784,45 @@ public boolean contract(Player player, double amount, @SuppressWarnings("unused" double oldy = area.getHighLoc().getBlockY(); oldy = oldy - amount; if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { - Residence.msg(player, lm.Select_TooHigh); + plugin.msg(player, lm.Select_TooHigh); oldy = player.getLocation().getWorld().getMaxHeight() - 1; } area.getHighLoc().setY(oldy); - Residence.msg(player, lm.Contracting_Down, amount); + plugin.msg(player, lm.Contracting_Down, amount); break; case MINUSX: double oldx = area.getHighLoc().getBlockX(); oldx = oldx - amount; area.getHighLoc().setX(oldx); - Residence.msg(player, lm.Contracting_West, amount); + plugin.msg(player, lm.Contracting_West, amount); break; case MINUSZ: double oldz = area.getHighLoc().getBlockZ(); oldz = oldz - amount; area.getHighLoc().setZ(oldz); - Residence.msg(player, lm.Contracting_North, amount); + plugin.msg(player, lm.Contracting_North, amount); break; case PLUSX: oldx = area.getLowLoc().getBlockX(); oldx = oldx + amount; area.getLowLoc().setX(oldx); - Residence.msg(player, lm.Contracting_East, amount); + plugin.msg(player, lm.Contracting_East, amount); break; case PLUSZ: oldz = area.getLowLoc().getBlockZ(); oldz = oldz + amount; area.getLowLoc().setZ(oldz); - Residence.msg(player, lm.Contracting_South, amount); + plugin.msg(player, lm.Contracting_South, amount); break; case UP: oldy = area.getLowLoc().getBlockY(); oldy = oldy + amount; if (oldy < MIN_HEIGHT) { - Residence.msg(player, lm.Select_TooLow); + plugin.msg(player, lm.Select_TooLow); oldy = MIN_HEIGHT; } area.getLowLoc().setY(oldy); - Residence.msg(player, lm.Contracting_Up, amount); + plugin.msg(player, lm.Contracting_Up, amount); break; default: break; diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 99d5be2e5..6ce68fcce 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -43,7 +43,7 @@ public boolean worldEditUpdate(Player player) { if (!hasPlacedBoth(player.getName())) return false; CuboidSelection selection = new CuboidSelection(player.getWorld(), getPlayerLoc1(player.getName()), getPlayerLoc2(player.getName())); - Residence.getWorldEdit().setSelection(player, selection); + plugin.getWorldEdit().setSelection(player, selection); return true; } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java index 233170ef7..755b2465f 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -11,18 +11,24 @@ import com.sk89q.worldguard.protection.regions.ProtectedRegion; public class WorldGuardUtil { + private Residence plugin; + + public WorldGuardUtil(Residence residence) { + this.plugin = residence; + } + public ProtectedRegion isSelectionInRegion(Player player) { if (Residence.getWorldGuard() == null) return null; - if (Residence.getWorldEdit() == null) + if (plugin.getWorldEdit() == null) return null; - if (!Residence.getSelectionManager().hasPlacedBoth(player.getName())) + if (!plugin.getSelectionManager().hasPlacedBoth(player.getName())) return null; - Location loc1 = Residence.getSelectionManager().getPlayerLoc1(player.getName()); - Location loc2 = Residence.getSelectionManager().getPlayerLoc2(player.getName()); + Location loc1 = plugin.getSelectionManager().getPlayerLoc1(player.getName()); + Location loc2 = plugin.getSelectionManager().getPlayerLoc2(player.getName()); String id = "icp__tempregion"; try { diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index 46c9ab125..a89173c1c 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -1,185 +1,190 @@ -package com.bekvon.bukkit.residence.shopStuff; - -import java.util.ArrayList; -import java.util.List; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.Sign; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEvent; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; -import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; -import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; -import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; - -public class ShopListener implements Listener { - - public static List Delete = new ArrayList(); - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onSignInteract(PlayerInteractEvent event) { - // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - - Block block = event.getClickedBlock(); - - if (block == null) - return; - - if (!(block.getState() instanceof Sign)) - return; - - Player player = event.getPlayer(); - - Location loc = block.getLocation(); - - if (Delete.contains(player.getName())) { - Board Found = null; - for (Board one : Residence.getShopSignUtilManager().GetAllBoards()) { - for (Location location : one.GetLocations()) { - - if (!loc.getWorld().getName().equalsIgnoreCase(location.getWorld().getName())) - continue; - if (loc.getBlockX() != location.getBlockX()) - continue; - if (loc.getBlockY() != location.getBlockY()) - continue; - if (loc.getBlockZ() != location.getBlockZ()) - continue; - - Found = one; - break; - } - - if (Found != null) - break; - } - if (Found != null) { - Residence.getShopSignUtilManager().GetAllBoards().remove(Found); - Residence.getShopSignUtilManager().saveSigns(); - Residence.msg(player, lm.Shop_DeletedBoard); - } else { - Residence.msg(player, lm.Shop_IncorrectBoard); - } - Delete.remove(player.getName()); - return; - } - - String resName = null; - for (Board one : Residence.getShopSignUtilManager().GetAllBoards()) { - resName = one.getResNameByLoc(loc); - if (resName != null) - break; - } - - if (resName != null) - Bukkit.dispatchCommand(event.getPlayer(), "res tp " + resName); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onFlagChangeShop(ResidenceFlagChangeEvent event) { - - if (event.isCancelled()) - return; - - if (!event.getFlag().equalsIgnoreCase("shop")) - return; - - switch (event.getNewState()) { - case NEITHER: - case FALSE: - Residence.getResidenceManager().removeShop(event.getResidence()); - Residence.getShopSignUtilManager().BoardUpdate(); - Residence.getShopSignUtilManager().saveSigns(); - break; - case INVALID: - break; - case TRUE: - Residence.getResidenceManager().addShop(event.getResidence().getName()); - event.getResidence().getPermissions().setFlag("tp", FlagState.TRUE); - event.getResidence().getPermissions().setFlag("move", FlagState.TRUE); - event.getResidence().getPermissions().setFlag("pvp", FlagState.FALSE); - Residence.getShopSignUtilManager().BoardUpdate(); - Residence.getShopSignUtilManager().saveSigns(); - break; - default: - break; - } - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceRename(ResidenceRenameEvent event) { - if (!event.getResidence().GetShopVotes().isEmpty()) { - Residence.getResidenceManager().addShop(event.getResidence()); - Residence.getResidenceManager().removeShop(event.getOldResidenceName()); - Residence.getShopSignUtilManager().saveShopVotes(); - Residence.getShopSignUtilManager().BoardUpdateDelayed(); - Residence.getShopSignUtilManager().saveSigns(); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onFlagChange(ResidenceFlagChangeEvent event) { - if (event.isCancelled()) - return; - - if (event.getFlag().equalsIgnoreCase("tp") && event.getNewState() == FlagState.TRUE) - return; - - if (event.getFlag().equalsIgnoreCase("move") && event.getNewState() == FlagState.TRUE) - return; - - if (event.getFlag().equalsIgnoreCase("pvp") && event.getNewState() == FlagState.FALSE) - return; - - if (!event.getFlag().equalsIgnoreCase("move") && !event.getFlag().equalsIgnoreCase("tp") && !event.getFlag().equalsIgnoreCase("pvp")) - return; - - if (!event.getResidence().getPermissions().has("shop", false)) - return; - - event.setCancelled(true); - - Residence.msg(event.getPlayer(), ChatColor.YELLOW + "Can't change while shop flag is set to true"); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceCreate(ResidenceCreationEvent event) { - if (event.isCancelled()) - return; - - if (!event.getResidence().getPermissions().has("shop", false)) - return; - - Residence.getResidenceManager().addShop(event.getResidence().getName()); - - Residence.getShopSignUtilManager().BoardUpdate(); - Residence.getShopSignUtilManager().saveSigns(); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceRemove(ResidenceDeleteEvent event) { - if (event.isCancelled()) - return; - - if (!event.getResidence().getPermissions().has("shop", true)) - return; - - Residence.getResidenceManager().removeShop(event.getResidence()); - Residence.getShopSignUtilManager().BoardUpdate(); - Residence.getShopSignUtilManager().saveSigns(); - } -} +package com.bekvon.bukkit.residence.shopStuff; + +import java.util.ArrayList; +import java.util.List; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; + +public class ShopListener implements Listener { + + public static List Delete = new ArrayList(); + private Residence plugin; + + public ShopListener(Residence residence) { + this.plugin = residence; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onSignInteract(PlayerInteractEvent event) { + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + Block block = event.getClickedBlock(); + + if (block == null) + return; + + if (!(block.getState() instanceof Sign)) + return; + + Player player = event.getPlayer(); + + Location loc = block.getLocation(); + + if (Delete.contains(player.getName())) { + Board Found = null; + for (Board one : plugin.getShopSignUtilManager().GetAllBoards()) { + for (Location location : one.GetLocations()) { + + if (!loc.getWorld().getName().equalsIgnoreCase(location.getWorld().getName())) + continue; + if (loc.getBlockX() != location.getBlockX()) + continue; + if (loc.getBlockY() != location.getBlockY()) + continue; + if (loc.getBlockZ() != location.getBlockZ()) + continue; + + Found = one; + break; + } + + if (Found != null) + break; + } + if (Found != null) { + plugin.getShopSignUtilManager().GetAllBoards().remove(Found); + plugin.getShopSignUtilManager().saveSigns(); + plugin.msg(player, lm.Shop_DeletedBoard); + } else { + plugin.msg(player, lm.Shop_IncorrectBoard); + } + Delete.remove(player.getName()); + return; + } + + String resName = null; + for (Board one : plugin.getShopSignUtilManager().GetAllBoards()) { + resName = one.getResNameByLoc(loc); + if (resName != null) + break; + } + + if (resName != null) + Bukkit.dispatchCommand(event.getPlayer(), "res tp " + resName); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeShop(ResidenceFlagChangeEvent event) { + + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase("shop")) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + plugin.getResidenceManager().removeShop(event.getResidence()); + plugin.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().saveSigns(); + break; + case INVALID: + break; + case TRUE: + plugin.getResidenceManager().addShop(event.getResidence().getName()); + event.getResidence().getPermissions().setFlag("tp", FlagState.TRUE); + event.getResidence().getPermissions().setFlag("move", FlagState.TRUE); + event.getResidence().getPermissions().setFlag("pvp", FlagState.FALSE); + plugin.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().saveSigns(); + break; + default: + break; + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceRename(ResidenceRenameEvent event) { + if (!event.getResidence().GetShopVotes().isEmpty()) { + plugin.getResidenceManager().addShop(event.getResidence()); + plugin.getResidenceManager().removeShop(event.getOldResidenceName()); + plugin.getShopSignUtilManager().saveShopVotes(); + plugin.getShopSignUtilManager().BoardUpdateDelayed(); + plugin.getShopSignUtilManager().saveSigns(); + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onFlagChange(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + + if (event.getFlag().equalsIgnoreCase("tp") && event.getNewState() == FlagState.TRUE) + return; + + if (event.getFlag().equalsIgnoreCase("move") && event.getNewState() == FlagState.TRUE) + return; + + if (event.getFlag().equalsIgnoreCase("pvp") && event.getNewState() == FlagState.FALSE) + return; + + if (!event.getFlag().equalsIgnoreCase("move") && !event.getFlag().equalsIgnoreCase("tp") && !event.getFlag().equalsIgnoreCase("pvp")) + return; + + if (!event.getResidence().getPermissions().has("shop", false)) + return; + + event.setCancelled(true); + + Residence.msg(event.getPlayer(), ChatColor.YELLOW + "Can't change while shop flag is set to true"); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceCreate(ResidenceCreationEvent event) { + if (event.isCancelled()) + return; + + if (!event.getResidence().getPermissions().has("shop", false)) + return; + + plugin.getResidenceManager().addShop(event.getResidence().getName()); + + plugin.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().saveSigns(); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceRemove(ResidenceDeleteEvent event) { + if (event.isCancelled()) + return; + + if (!event.getResidence().getPermissions().has("shop", true)) + return; + + plugin.getResidenceManager().removeShop(event.getResidence()); + plugin.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().saveSigns(); + } +} diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index 0f40d7117..71db939ed 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -1,396 +1,396 @@ -package com.bekvon.bukkit.residence.shopStuff; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.Sign; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import com.bekvon.bukkit.residence.CommentedYamlConfiguration; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class ShopSignUtil { - - List AllBoards = new ArrayList(); - - private Residence plugin; - - public ShopSignUtil(Residence plugin) { - this.plugin = plugin; - } - - public void setAllSigns(List AllBoards) { - this.AllBoards = AllBoards; - } - - public List GetAllBoards() { - return AllBoards; - } - - public void removeBoard(Board Board) { - AllBoards.remove(Board); - } - - public void addBoard(Board Board) { - AllBoards.add(Board); - } - - public boolean exist(Board board) { - List loc2 = board.GetLocations(); - for (Board one : AllBoards) { - List loc1 = one.GetLocations(); - for (Location oneL : loc1) { - if (!loc2.contains(oneL)) - continue; - return true; - } - } - return false; - } - - // Res Shop vote file - public void LoadShopVotes() { - File file = new File(plugin.getDataFolder(), "ShopVotes.yml"); - YamlConfiguration f = YamlConfiguration.loadConfiguration(file); - - if (!file.exists()) { - try { - file.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - - if (!f.isConfigurationSection("ShopVotes")) - return; - - ConfigurationSection ConfCategory = f.getConfigurationSection("ShopVotes"); - ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); - if (categoriesList.size() == 0) - return; - - for (String category : categoriesList) { - List List = ConfCategory.getStringList(category); - List VoteList = new ArrayList(); - for (String oneEntry : List) { - if (!oneEntry.contains("%")) - continue; - - String name = oneEntry.split("%")[0]; - UUID uuid = null; - - if (name.contains(":")) { - try { - uuid = UUID.fromString(name.split(":")[1]); - } catch (Exception e) { - } - name = name.split(":")[0]; - } - - int vote = -1; - - try { - String voteString = oneEntry.split("%")[1]; - if (voteString.contains("!")) { - voteString = oneEntry.split("%")[1].split("!")[0]; - } - vote = Integer.parseInt(voteString); - } catch (Exception ex) { - continue; - } - if (vote < 0) - vote = 0; - else if (vote > 10) - vote = 10; - - long time = 0L; - - if (oneEntry.contains("!")) - try { - time = Long.parseLong(oneEntry.split("!")[1]); - } catch (Exception ex) { - time = System.currentTimeMillis(); - } - - VoteList.add(new ShopVote(name, uuid, vote, time)); - - } - - ClaimedResidence res = Residence.getResidenceManager().getByName(category.replace("_", ".")); - - if (res == null) - continue; - res.clearShopVotes(); - res.addShopVote(VoteList); - } - return; - } - - // Signs save file - public void saveShopVotes() { - File f = new File(plugin.getDataFolder(), "ShopVotes.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); - - writer.addComment("ShopVotes", "DO NOT EDIT THIS FILE BY HAND!"); - - if (!conf.isConfigurationSection("ShopVotes")) - conf.createSection("ShopVotes"); - - for (ClaimedResidence res : Residence.getResidenceManager().getShops()) { - - if (res == null || res.GetShopVotes().isEmpty()) - continue; - - String path = "ShopVotes." + res.getName().replace(".", "_"); - - List list = new ArrayList(); - - for (ShopVote oneVote : res.GetShopVotes()) { - list.add(oneVote.getName() + ":" + oneVote.getUuid().toString() + "%" + oneVote.getVote() + "!" + oneVote.getTime()); - } - writer.set(path, list); - } - - try { - writer.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - - // Res Shop vote file - public Vote getAverageVote(String resName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(resName); - return getAverageVote(res); - } - - public Vote getAverageVote(ClaimedResidence res) { - - if (res == null || res.GetShopVotes().isEmpty()) - return new Vote(Residence.getConfigManager().getVoteRangeTo() / 2, 0); - - List votes = res.GetShopVotes(); - - double total = 0; - for (ShopVote oneVote : votes) { - total += oneVote.getVote(); - } - - double vote = ((int) ((total / votes.size()) * 100)) / 100.0; - - return new Vote(vote, votes.size()); - } - - // Res Shop vote file - public int getLikes(String resName) { - ClaimedResidence res = Residence.getResidenceManager().getByName(resName); - return getLikes(res); - } - - public int getLikes(ClaimedResidence res) { - if (res == null || res.GetShopVotes().isEmpty()) - return 0; - - List votes = res.GetShopVotes(); - - int likes = 0; - for (ShopVote oneVote : votes) { - if (oneVote.getVote() >= Residence.getConfigManager().getVoteRangeTo() / 2) - likes++; - } - - return likes; - } - - public Map getSortedShopList() { - - Map allvotes = new HashMap(); - - List shops = Residence.getResidenceManager().getShops(); - - for (ClaimedResidence one : shops) { - if (Residence.getConfigManager().isOnlyLike()) - allvotes.put(one.getName(), (double) getLikes(one)); - else - allvotes.put(one.getName(), getAverageVote(one).getVote()); - } - - allvotes = sortByComparator(allvotes); - - return allvotes; - } - - private static Map sortByComparator(Map allvotes) { - - List> list = new LinkedList>(allvotes.entrySet()); - - Collections.sort(list, new Comparator>() { - @Override - public int compare(Map.Entry o1, Map.Entry o2) { - return (o2.getValue()).compareTo(o1.getValue()); - } - }); - Map sortedMap = new LinkedHashMap(); - for (Iterator> it = list.iterator(); it.hasNext();) { - Map.Entry entry = it.next(); - sortedMap.put(entry.getKey(), entry.getValue()); - } - return sortedMap; - } - - // Shop Sign file - public void LoadSigns() { - GetAllBoards().clear(); - File file = new File(plugin.getDataFolder(), "ShopSigns.yml"); - YamlConfiguration f = YamlConfiguration.loadConfiguration(file); - - if (!f.isConfigurationSection("ShopSigns")) - return; - - ConfigurationSection ConfCategory = f.getConfigurationSection("ShopSigns"); - ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); - if (categoriesList.size() == 0) - return; - for (String category : categoriesList) { - ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); - Board newTemp = new Board(); - newTemp.setStartPlace(NameSection.getInt("StartPlace")); - - World w = Bukkit.getWorld(NameSection.getString("World")); - - if (w == null) - continue; - - Location loc1 = new Location(w, NameSection.getInt("TX"), NameSection.getInt("TY"), NameSection.getInt("TZ")); - Location loc2 = new Location(w, NameSection.getInt("BX"), NameSection.getInt("BY"), NameSection.getInt("BZ")); - - newTemp.setTopLoc(loc1); - newTemp.setBottomLoc(loc2); - - addBoard(newTemp); - } - return; - } - - // Signs save file - public void saveSigns() { - File f = new File(plugin.getDataFolder(), "ShopSigns.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); - - writer.addComment("ShopSigns", "DO NOT EDIT THIS FILE BY HAND!"); - - if (!conf.isConfigurationSection("ShopSigns")) - conf.createSection("ShopSigns"); - - int cat = 0; - for (Board one : GetAllBoards()) { - cat++; - String path = "ShopSigns." + cat; - writer.set(path + ".StartPlace", one.GetStartPlace()); - writer.set(path + ".World", one.GetWorld()); - writer.set(path + ".TX", one.getTopLoc().getBlockX()); - writer.set(path + ".TY", one.getTopLoc().getBlockY()); - writer.set(path + ".TZ", one.getTopLoc().getBlockZ()); - writer.set(path + ".BX", one.getBottomLoc().getBlockX()); - writer.set(path + ".BY", one.getBottomLoc().getBlockY()); - writer.set(path + ".BZ", one.getBottomLoc().getBlockZ()); - } - - try { - writer.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - - public boolean BoardUpdateDelayed() { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - BoardUpdate(); - return; - } - }, 20L); - return true; - } - - public boolean BoardUpdate() { - for (Board board : GetAllBoards()) { - board.clearSignLoc(); - List SignsLocation = board.GetLocations(); - - ArrayList ShopNames = new ArrayList(getSortedShopList().keySet()); - - int Start = board.GetStartPlace(); - for (Location OneSignLoc : SignsLocation) { - - Block block = OneSignLoc.getBlock(); - - if (!(block.getState() instanceof Sign)) - continue; - - String Shop = ""; - if (ShopNames.size() > Start) - Shop = ShopNames.get(Start); - - ClaimedResidence res = Residence.getResidenceManager().getByName(Shop); - - Sign sign = (Sign) block.getState(); - - if (Shop.equalsIgnoreCase("")) { - sign.setLine(0, ""); - sign.setLine(1, ""); - sign.setLine(2, ""); - sign.setLine(3, ""); - sign.update(); - continue; - } - - Vote vote = null; - String votestat = ""; - if (Residence.getResidenceManager().getShops().size() >= Start) { - vote = getAverageVote(ShopNames.get(Start)); - - if (Residence.getConfigManager().isOnlyLike()) { - votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_ListLiked, getLikes(ShopNames.get(Start))); - } else - votestat = vote.getAmount() == 0 ? "" : Residence.msg(lm.Shop_SignLines_4, vote.getVote() , vote.getAmount()); - } - - sign.setLine(0, Residence.msg(lm.Shop_SignLines_1, Start + 1)); - sign.setLine(1, Residence.msg(lm.Shop_SignLines_2, res.getName())); - sign.setLine(2, Residence.msg(lm.Shop_SignLines_3, res.getOwner())); - sign.setLine(3, votestat); - sign.update(); - board.addSignLoc(res.getName(), sign.getLocation()); - - Start++; - } - } - return true; - } -} +package com.bekvon.bukkit.residence.shopStuff; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import com.bekvon.bukkit.residence.CommentedYamlConfiguration; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class ShopSignUtil { + + List AllBoards = new ArrayList(); + + private Residence plugin; + + public ShopSignUtil(Residence plugin) { + this.plugin = plugin; + } + + public void setAllSigns(List AllBoards) { + this.AllBoards = AllBoards; + } + + public List GetAllBoards() { + return AllBoards; + } + + public void removeBoard(Board Board) { + AllBoards.remove(Board); + } + + public void addBoard(Board Board) { + AllBoards.add(Board); + } + + public boolean exist(Board board) { + List loc2 = board.GetLocations(); + for (Board one : AllBoards) { + List loc1 = one.GetLocations(); + for (Location oneL : loc1) { + if (!loc2.contains(oneL)) + continue; + return true; + } + } + return false; + } + + // Res Shop vote file + public void LoadShopVotes() { + File file = new File(plugin.getDataFolder(), "ShopVotes.yml"); + YamlConfiguration f = YamlConfiguration.loadConfiguration(file); + + if (!file.exists()) { + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + + if (!f.isConfigurationSection("ShopVotes")) + return; + + ConfigurationSection ConfCategory = f.getConfigurationSection("ShopVotes"); + ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); + if (categoriesList.size() == 0) + return; + + for (String category : categoriesList) { + List List = ConfCategory.getStringList(category); + List VoteList = new ArrayList(); + for (String oneEntry : List) { + if (!oneEntry.contains("%")) + continue; + + String name = oneEntry.split("%")[0]; + UUID uuid = null; + + if (name.contains(":")) { + try { + uuid = UUID.fromString(name.split(":")[1]); + } catch (Exception e) { + } + name = name.split(":")[0]; + } + + int vote = -1; + + try { + String voteString = oneEntry.split("%")[1]; + if (voteString.contains("!")) { + voteString = oneEntry.split("%")[1].split("!")[0]; + } + vote = Integer.parseInt(voteString); + } catch (Exception ex) { + continue; + } + if (vote < 0) + vote = 0; + else if (vote > 10) + vote = 10; + + long time = 0L; + + if (oneEntry.contains("!")) + try { + time = Long.parseLong(oneEntry.split("!")[1]); + } catch (Exception ex) { + time = System.currentTimeMillis(); + } + + VoteList.add(new ShopVote(name, uuid, vote, time)); + + } + + ClaimedResidence res = plugin.getResidenceManager().getByName(category.replace("_", ".")); + + if (res == null) + continue; + res.clearShopVotes(); + res.addShopVote(VoteList); + } + return; + } + + // Signs save file + public void saveShopVotes() { + File f = new File(plugin.getDataFolder(), "ShopVotes.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + writer.addComment("ShopVotes", "DO NOT EDIT THIS FILE BY HAND!"); + + if (!conf.isConfigurationSection("ShopVotes")) + conf.createSection("ShopVotes"); + + for (ClaimedResidence res : plugin.getResidenceManager().getShops()) { + + if (res == null || res.GetShopVotes().isEmpty()) + continue; + + String path = "ShopVotes." + res.getName().replace(".", "_"); + + List list = new ArrayList(); + + for (ShopVote oneVote : res.GetShopVotes()) { + list.add(oneVote.getName() + ":" + oneVote.getUuid().toString() + "%" + oneVote.getVote() + "!" + oneVote.getTime()); + } + writer.set(path, list); + } + + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + + // Res Shop vote file + public Vote getAverageVote(String resName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(resName); + return getAverageVote(res); + } + + public Vote getAverageVote(ClaimedResidence res) { + + if (res == null || res.GetShopVotes().isEmpty()) + return new Vote(plugin.getConfigManager().getVoteRangeTo() / 2, 0); + + List votes = res.GetShopVotes(); + + double total = 0; + for (ShopVote oneVote : votes) { + total += oneVote.getVote(); + } + + double vote = ((int) ((total / votes.size()) * 100)) / 100.0; + + return new Vote(vote, votes.size()); + } + + // Res Shop vote file + public int getLikes(String resName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(resName); + return getLikes(res); + } + + public int getLikes(ClaimedResidence res) { + if (res == null || res.GetShopVotes().isEmpty()) + return 0; + + List votes = res.GetShopVotes(); + + int likes = 0; + for (ShopVote oneVote : votes) { + if (oneVote.getVote() >= plugin.getConfigManager().getVoteRangeTo() / 2) + likes++; + } + + return likes; + } + + public Map getSortedShopList() { + + Map allvotes = new HashMap(); + + List shops = plugin.getResidenceManager().getShops(); + + for (ClaimedResidence one : shops) { + if (plugin.getConfigManager().isOnlyLike()) + allvotes.put(one.getName(), (double) getLikes(one)); + else + allvotes.put(one.getName(), getAverageVote(one).getVote()); + } + + allvotes = sortByComparator(allvotes); + + return allvotes; + } + + private static Map sortByComparator(Map allvotes) { + + List> list = new LinkedList>(allvotes.entrySet()); + + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return (o2.getValue()).compareTo(o1.getValue()); + } + }); + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + // Shop Sign file + public void LoadSigns() { + GetAllBoards().clear(); + File file = new File(plugin.getDataFolder(), "ShopSigns.yml"); + YamlConfiguration f = YamlConfiguration.loadConfiguration(file); + + if (!f.isConfigurationSection("ShopSigns")) + return; + + ConfigurationSection ConfCategory = f.getConfigurationSection("ShopSigns"); + ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); + if (categoriesList.size() == 0) + return; + for (String category : categoriesList) { + ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); + Board newTemp = new Board(); + newTemp.setStartPlace(NameSection.getInt("StartPlace")); + + World w = Bukkit.getWorld(NameSection.getString("World")); + + if (w == null) + continue; + + Location loc1 = new Location(w, NameSection.getInt("TX"), NameSection.getInt("TY"), NameSection.getInt("TZ")); + Location loc2 = new Location(w, NameSection.getInt("BX"), NameSection.getInt("BY"), NameSection.getInt("BZ")); + + newTemp.setTopLoc(loc1); + newTemp.setBottomLoc(loc2); + + addBoard(newTemp); + } + return; + } + + // Signs save file + public void saveSigns() { + File f = new File(plugin.getDataFolder(), "ShopSigns.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + writer.addComment("ShopSigns", "DO NOT EDIT THIS FILE BY HAND!"); + + if (!conf.isConfigurationSection("ShopSigns")) + conf.createSection("ShopSigns"); + + int cat = 0; + for (Board one : GetAllBoards()) { + cat++; + String path = "ShopSigns." + cat; + writer.set(path + ".StartPlace", one.GetStartPlace()); + writer.set(path + ".World", one.GetWorld()); + writer.set(path + ".TX", one.getTopLoc().getBlockX()); + writer.set(path + ".TY", one.getTopLoc().getBlockY()); + writer.set(path + ".TZ", one.getTopLoc().getBlockZ()); + writer.set(path + ".BX", one.getBottomLoc().getBlockX()); + writer.set(path + ".BY", one.getBottomLoc().getBlockY()); + writer.set(path + ".BZ", one.getBottomLoc().getBlockZ()); + } + + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + + public boolean BoardUpdateDelayed() { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + BoardUpdate(); + return; + } + }, 20L); + return true; + } + + public boolean BoardUpdate() { + for (Board board : GetAllBoards()) { + board.clearSignLoc(); + List SignsLocation = board.GetLocations(); + + ArrayList ShopNames = new ArrayList(getSortedShopList().keySet()); + + int Start = board.GetStartPlace(); + for (Location OneSignLoc : SignsLocation) { + + Block block = OneSignLoc.getBlock(); + + if (!(block.getState() instanceof Sign)) + continue; + + String Shop = ""; + if (ShopNames.size() > Start) + Shop = ShopNames.get(Start); + + ClaimedResidence res = plugin.getResidenceManager().getByName(Shop); + + Sign sign = (Sign) block.getState(); + + if (Shop.equalsIgnoreCase("")) { + sign.setLine(0, ""); + sign.setLine(1, ""); + sign.setLine(2, ""); + sign.setLine(3, ""); + sign.update(); + continue; + } + + Vote vote = null; + String votestat = ""; + if (plugin.getResidenceManager().getShops().size() >= Start) { + vote = getAverageVote(ShopNames.get(Start)); + + if (plugin.getConfigManager().isOnlyLike()) { + votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListLiked, getLikes(ShopNames.get(Start))); + } else + votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_SignLines_4, vote.getVote() , vote.getAmount()); + } + + sign.setLine(0, plugin.msg(lm.Shop_SignLines_1, Start + 1)); + sign.setLine(1, plugin.msg(lm.Shop_SignLines_2, res.getName())); + sign.setLine(2, plugin.msg(lm.Shop_SignLines_3, res.getOwner())); + sign.setLine(3, votestat); + sign.update(); + board.addSignLoc(res.getName(), sign.getLocation()); + + Start++; + } + } + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 0f29314aa..171ac2b9d 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -68,7 +68,7 @@ public void LoadSigns() { Signs newTemp = new Signs(); newTemp.setCategory(Integer.valueOf(category)); - ClaimedResidence res = Residence.getResidenceManager().getByName(NameSection.getString("Residence")); + ClaimedResidence res = plugin.getResidenceManager().getByName(NameSection.getString("Residence")); if (res == null) continue; @@ -240,8 +240,8 @@ public boolean SignUpdate(Signs Sign) { if (rentedPlace != null) time = rentedPlace.endTime; - SimpleDateFormat formatter = new SimpleDateFormat(Residence.msg(lm.Sign_DateFormat)); - formatter.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); + SimpleDateFormat formatter = new SimpleDateFormat(plugin.msg(lm.Sign_DateFormat)); + formatter.setTimeZone(TimeZone.getTimeZone(plugin.getConfigManager().getTimeZone())); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(time); String timeString = formatter.format(calendar.getTime()); @@ -250,23 +250,23 @@ public boolean SignUpdate(Signs Sign) { if (time == 0L) endDate = "Unknown"; - if (Residence.getRentManager().getRentedAutoRepeats(res)) - endDate = Residence.msg(lm.Sign_RentedAutorenewTrue, endDate); + if (plugin.getRentManager().getRentedAutoRepeats(res)) + endDate = plugin.msg(lm.Sign_RentedAutorenewTrue, endDate); else - endDate = Residence.msg(lm.Sign_RentedAutorenewFalse, endDate); + endDate = plugin.msg(lm.Sign_RentedAutorenewFalse, endDate); - String TopLine = rented ? endDate : Residence.msg(lm.Sign_ForRentTopLine); + String TopLine = rented ? endDate : plugin.msg(lm.Sign_ForRentTopLine); sign.setLine(0, TopLine); - String infoLine = Residence.msg(lm.Sign_ForRentPriceLine, Residence.getRentManager().getCostOfRent(res), Residence - .getRentManager().getRentDays(res), Residence.getRentManager().getRentableRepeatable(res)); + String infoLine = plugin.msg(lm.Sign_ForRentPriceLine, plugin.getRentManager().getCostOfRent(res), plugin + .getRentManager().getRentDays(res), plugin.getRentManager().getRentableRepeatable(res)); sign.setLine(1, infoLine); String shortName = fixResName(landName); - sign.setLine(2, rented ? Residence.msg(lm.Sign_RentedResName, shortName) - : Residence.msg(lm.Sign_RentedResName, shortName)); - sign.setLine(3, rented ? Residence.msg(lm.Sign_RentedBottomLine, Residence.getRentManager().getRentingPlayer(landName)) - : Residence.msg(lm.Sign_ForRentBottomLine)); + sign.setLine(2, rented ? plugin.msg(lm.Sign_RentedResName, shortName) + : plugin.msg(lm.Sign_RentedResName, shortName)); + sign.setLine(3, rented ? plugin.msg(lm.Sign_RentedBottomLine, plugin.getRentManager().getRentingPlayer(landName)) + : plugin.msg(lm.Sign_ForRentBottomLine)); sign.update(); } @@ -279,15 +279,15 @@ public boolean SignUpdate(Signs Sign) { secondLine = lines[1]; } - sign.setLine(0, Residence.msg(lm.Sign_ForSaleTopLine)); - String infoLine = Residence.msg(lm.Sign_ForSalePriceLine, res.getSellPrice()); + sign.setLine(0, plugin.msg(lm.Sign_ForSaleTopLine)); + String infoLine = plugin.msg(lm.Sign_ForSalePriceLine, res.getSellPrice()); sign.setLine(1, infoLine); - sign.setLine(2, Residence.msg(lm.Sign_RentedResName, shortName)); + sign.setLine(2, plugin.msg(lm.Sign_RentedResName, shortName)); if (secondLine != null) - sign.setLine(3, Residence.msg(lm.Sign_RentedResName, secondLine)); + sign.setLine(3, plugin.msg(lm.Sign_RentedResName, secondLine)); else - sign.setLine(3, Residence.msg(lm.Sign_ForSaleBottomLine)); + sign.setLine(3, plugin.msg(lm.Sign_ForSaleBottomLine)); sign.update(); } @@ -322,7 +322,7 @@ public void convertSigns(CommandSender sender) { String resname = section.getString(one + ".resName"); signs.setCategory(category); - ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + ClaimedResidence res = plugin.getResidenceManager().getByName(resname); if (res == null) continue; diff --git a/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java b/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java index ace12086e..8bb3938eb 100644 --- a/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java +++ b/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java @@ -27,7 +27,7 @@ public ResidenceSpout(Residence plug) { } public void showResidenceFlagGUI(SpoutPlayer player, String resname, boolean resadmin) { - ClaimedResidence res = Residence.getResidenceManager().getByName(resname); + ClaimedResidence res = plugin.getResidenceManager().getByName(resname); if (res.getPermissions().hasResidencePermission(player, false)) { Color fieldcolor = new Color(0F, 0F, 0.3F, 1F); @@ -96,7 +96,7 @@ public void showResidenceFlagGUI(SpoutPlayer player, String resname, boolean res screens.put(player, popup); player.getMainScreen().attachPopupScreen(popup); } else { - Residence.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); } } } diff --git a/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java b/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java index aed8aec20..ce47a5a8a 100644 --- a/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java +++ b/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java @@ -18,11 +18,16 @@ public class ResidenceSpoutListener implements Listener { protected HashMap popups; + private Residence plugin; + + public ResidenceSpoutListener(Residence residence) { + this.plugin = residence; + } @EventHandler(priority = EventPriority.NORMAL) public void onButtonClick(ButtonClickEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player p = event.getPlayer(); if (event.getScreen() instanceof ResidencePopup) { @@ -52,7 +57,7 @@ public void onButtonClick(ButtonClickEvent event) { player = ((GenericTextField) popup.getWidget("PlayerName")).getText(); group = ((GenericTextField) popup.getWidget("GroupName")).getText(); flag = ((GenericTextField) popup.getWidget("FlagName")).getText(); - res = Residence.getResidenceManager().getByName(((GenericLabel) popup.getWidget("ResidenceName")).getText()); + res = plugin.getResidenceManager().getByName(((GenericLabel) popup.getWidget("ResidenceName")).getText()); if (res == null || flagval == null || flagval.equalsIgnoreCase("") || ((flag == null || flag.equalsIgnoreCase("")) && !flagval.equalsIgnoreCase( "removeall"))) return; diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index f74d9066a..abab40404 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -25,7 +25,7 @@ public Language(Residence plugin) { * Reloads the config */ public void LanguageReload() { - customlocale = new YmlMaker(plugin, "Language/" + Residence.getConfigManager().getLanguage() + ".yml").getConfig(); + customlocale = new YmlMaker(plugin, "Language/" + plugin.getConfigManager().getLanguage() + ".yml").getConfig(); enlocale = new YmlMaker(plugin, "Language/English.yml").getConfig(); if (customlocale == null) customlocale = enlocale; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index c21420c1c..b77a12a37 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -68,15 +68,15 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p path = "/" + path.replace(".", " ") + " "; int pagecount = (int) Math.ceil((double) helplines.size() / (double) linesPerPage); if (page > pagecount || page < 1) { - Residence.msg(sender, lm.Invalid_Help); + Residence.getInstance().msg(sender, lm.Invalid_Help); return; } - String separator = Residence.msg(lm.InformationPage_Separator); + String separator = Residence.getInstance().msg(lm.InformationPage_Separator); if (!(sender instanceof Player)) separator = "----------"; - sender.sendMessage(separator + " " + Residence.msg(lm.General_HelpPageHeader, path, page, pagecount) + " " + separator); + sender.sendMessage(separator + " " + Residence.getInstance().msg(lm.General_HelpPageHeader, path, page, pagecount) + " " + separator); int start = linesPerPage * (page - 1); int end = start + linesPerPage; for (int i = start; i < end; i++) { @@ -122,11 +122,11 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p String baseCmd = resadmin ? "resadmin" : "res"; String prevCmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " + Prevpage : "/" + baseCmd + " ? " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getInstance().msg(lm.General_PrevInfoPage) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " + NextPage : "/" + baseCmd + " ? " + NextPage; - String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + String next = " {\"text\":\"" + Residence.getInstance().msg(lm.General_NextInfoPage) + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; @@ -139,7 +139,7 @@ public void printHelp(CommandSender sender, int page, String path, boolean resad if (subEntry != null) { subEntry.printHelp(sender, page, resadmin, path); } else { - Residence.msg(sender, lm.Invalid_Help); + Residence.getInstance().msg(sender, lm.Invalid_Help); } } @@ -177,20 +177,20 @@ private List getHelpData(CommandSender sender, boolean resadmin) { switch (entry.getName().toLowerCase()) { case "wspeed1": - desc = desc.replace("%1", Residence.getConfigManager().getWalkSpeed1() + ""); + desc = desc.replace("%1", Residence.getInstance().getConfigManager().getWalkSpeed1() + ""); break; case "wspeed2": - desc = desc.replace("%1", Residence.getConfigManager().getWalkSpeed2() + ""); + desc = desc.replace("%1", Residence.getInstance().getConfigManager().getWalkSpeed2() + ""); break; } // adding flag name and description for later sorting - unsortMap.put(entry.getName(), Residence.msg(lm.InformationPage_FlagsList, entry.getName(), desc)); + unsortMap.put(entry.getName(), Residence.getInstance().msg(lm.InformationPage_FlagsList, entry.getName(), desc)); continue; } } - helplines.add(new HelpLines(entry.getName(), Residence.msg(lm.InformationPage_GeneralList, entry.getName(), entry.getDescription()))); + helplines.add(new HelpLines(entry.getName(), Residence.getInstance().msg(lm.InformationPage_GeneralList, entry.getName(), entry.getDescription()))); } if (!unsortMap.isEmpty()) { @@ -360,7 +360,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { break; case "[residence]": if (sender instanceof Player) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); if (res != null) { String resName = res.getName(); if (resName != null) @@ -371,14 +371,14 @@ public Set getSubCommands(CommandSender sender, String[] args) { subCommands.add(oneRes.getName()); } } else { - ArrayList resList = Residence.getResidenceManager().getResidenceList(Residence.getServerLandname(), true, false, false); + ArrayList resList = Residence.getInstance().getResidenceManager().getResidenceList(Residence.getServerLandname(), true, false, false); if (resList.size() > 0) subCommands.addAll(resList); } break; case "[cresidence]": if (sender instanceof Player) { - ClaimedResidence res = Residence.getResidenceManager().getByLoc(((Player) sender).getLocation()); + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); if (res != null) { String resName = res.getName(); if (resName != null) @@ -387,7 +387,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { } break; case "[residenceshop]": - for (ClaimedResidence one : Residence.getResidenceManager().getShops()) { + for (ClaimedResidence one : Residence.getInstance().getResidenceManager().getShops()) { subCommands.add(one.getName()); } break; diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index e25df450f..1cb9470bb 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -40,20 +40,20 @@ public void printInfo(CommandSender sender, String title, List lines, in if (pagecount == 0) pagecount = 1; if (page > pagecount) { - sender.sendMessage(ChatColor.RED + Residence.msg(lm.Invalid_Page)); + sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); return; } - Residence.msg(sender, lm.InformationPage_TopLine, title); - Residence.msg(sender, lm.InformationPage_Page, Residence.msg(lm.General_GenericPages, String.format("%d", page), + plugin.msg(sender, lm.InformationPage_TopLine, title); + plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), pagecount, lines.size())); for (int i = start; i < end; i++) { if (lines.size() > i) sender.sendMessage(ChatColor.GREEN + lines.get(i)); } if (pagecount > page) - Residence.msg(sender, lm.InformationPage_NextPage, Residence.msg(lm.General_NextPage)); + plugin.msg(sender, lm.InformationPage_NextPage, plugin.msg(lm.General_NextPage)); else - Residence.msg(sender, lm.InformationPage_NoNextPage); + plugin.msg(sender, lm.InformationPage_NoNextPage); } public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, int page, boolean resadmin) { @@ -75,12 +75,12 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap pagecount) { - sender.sendMessage(ChatColor.RED + Residence.msg(lm.Invalid_Page)); + sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); return; } if (targetPlayer != null) - Residence.msg(sender, lm.InformationPage_TopLine, Residence.msg(lm.General_Residences) + " - " + targetPlayer); - Residence.msg(sender, lm.InformationPage_Page, Residence.msg(lm.General_GenericPages, String.format("%d", page), + plugin.msg(sender, lm.InformationPage_TopLine, plugin.msg(lm.General_Residences) + " - " + targetPlayer); + plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), pagecount, ownedResidences.size())); String cmd = "res"; @@ -110,42 +110,42 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap 1 ? Prevpage : CurrentPage; String prevCmd = "/" + cmd + " " + Prevpage; - String prev = "\"\",{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + String prev = "\"\",{\"text\":\"" + separator + " " + plugin.msg(lm.General_PrevInfoPage) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; String nextCmd = "/" + cmd + " " + NextPage; - String next = " {\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + String next = " {\"text\":\"" + plugin.msg(lm.General_NextInfoPage) + " " + separator + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}"; if (CurrentPage >= pageCount) - next = "{\"text\":\"" + Residence.msg(lm.General_NextInfoPage) + " " + separator + "\"}"; + next = "{\"text\":\"" + plugin.msg(lm.General_NextInfoPage) + " " + separator + "\"}"; if (CurrentPage <= 1) - prev = "{\"text\":\"" + separator + " " + Residence.msg(lm.General_PrevInfoPage) + "\"}"; + prev = "{\"text\":\"" + separator + " " + plugin.msg(lm.General_PrevInfoPage) + "\"}"; Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + target + " [" + prev + "," + next + "]"); } diff --git a/src/com/bekvon/bukkit/residence/utils/CrackShot.java b/src/com/bekvon/bukkit/residence/utils/CrackShot.java index d912986a0..5efceefc5 100644 --- a/src/com/bekvon/bukkit/residence/utils/CrackShot.java +++ b/src/com/bekvon/bukkit/residence/utils/CrackShot.java @@ -18,13 +18,16 @@ import com.shampaggon.crackshot.events.WeaponDamageEntityEvent; public class CrackShot implements Listener { - public CrackShot() { + private Residence plugin; + + public CrackShot(Residence plugin) { + this.plugin = plugin; } @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(WeaponDamageEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Entity damager = event.getDamager(); @@ -54,11 +57,11 @@ public void AnimalKilling(WeaponDamageEntityEvent event) { return; Entity entity = event.getVictim(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(entity.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); - if (Residence.getNms().isAnimal(entity)) { + if (plugin.getNms().isAnimal(entity)) { if (res != null && res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { - cause.sendMessage(Residence.msg(lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName())); + cause.sendMessage(plugin.msg(lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName())); event.setCancelled(true); } } @@ -67,9 +70,9 @@ public void AnimalKilling(WeaponDamageEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; - if (event.getVictim().getType() != EntityType.ITEM_FRAME && !Residence.getNms().isArmorStandEntity(event.getVictim().getType())) + if (event.getVictim().getType() != EntityType.ITEM_FRAME && !plugin.getNms().isArmorStandEntity(event.getVictim().getType())) return; Entity dmgr = event.getDamager(); @@ -88,10 +91,10 @@ public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { // Note: Location of entity, not player; otherwise player could stand outside of res and still damage Location loc = event.getVictim().getLocation(); - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { event.setCancelled(true); - Residence.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); } } @@ -99,7 +102,7 @@ public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamage(WeaponDamageEntityEvent event) { // disabling event on world - if (Residence.isDisabledWorldListener(event.getPlayer().getWorld())) + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; if (!(event.getVictim() instanceof Player)) return; @@ -109,7 +112,7 @@ public void onEntityDamage(WeaponDamageEntityEvent event) { return; } - ClaimedResidence area = Residence.getResidenceManager().getByLoc(victim.getLocation()); + ClaimedResidence area = plugin.getResidenceManager().getByLoc(victim.getLocation()); /* Living Entities */ Player damager = event.getPlayer(); ClaimedResidence srcarea = null; @@ -117,7 +120,7 @@ public void onEntityDamage(WeaponDamageEntityEvent event) { if (damager == null) return; - srcarea = Residence.getResidenceManager().getByLoc(damager.getLocation()); + srcarea = plugin.getResidenceManager().getByLoc(damager.getLocation()); boolean srcpvp = true; if (srcarea != null) { @@ -125,21 +128,21 @@ public void onEntityDamage(WeaponDamageEntityEvent event) { } if (!srcpvp) { - damager.sendMessage(Residence.msg(lm.General_NoPVPZone)); + damager.sendMessage(plugin.msg(lm.General_NoPVPZone)); event.setCancelled(true); return; } /* Check for Player vs Player */ if (area == null) { /* World PvP */ - if (!Residence.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, true)) { - damager.sendMessage(Residence.msg(lm.General_WorldPVPDisabled)); + if (!plugin.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, true)) { + damager.sendMessage(plugin.msg(lm.General_WorldPVPDisabled)); event.setCancelled(true); } } else { /* Normal PvP */ if (!area.getPermissions().has(Flags.pvp, true)) { - damager.sendMessage(Residence.msg(lm.General_NoPVPZone)); + damager.sendMessage(plugin.msg(lm.General_NoPVPZone)); event.setCancelled(true); } } diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 89f2c8808..7f36532a1 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -1,64 +1,64 @@ -package com.bekvon.bukkit.residence.utils; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; - -public class FileCleanUp { - - public static void cleanFiles() { - - ArrayList resNameList = Residence.getResidenceManager().getResidenceList(false, false); - int i = 0; - - OfflinePlayer[] offplayer = Bukkit.getOfflinePlayers(); - - HashMap playermap = new HashMap(); - - for (OfflinePlayer one : offplayer) { - playermap.put(one.getUniqueId(), one); - } - - int interval = Residence.getConfigManager().getResidenceFileCleanDays(); - long time = System.currentTimeMillis(); - - for (String oneName : resNameList) { - ClaimedResidence res = Residence.getResidenceManager().getByName(oneName); - if (res == null) - continue; - - if (!playermap.containsKey(res.getOwnerUUID())) - continue; - - OfflinePlayer player = playermap.get(res.getOwnerUUID()); - - if (player == null) - continue; - - if (!Residence.getConfigManager().getCleanWorlds().contains(res.getWorld())) - continue; - - if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(Residence.getServerLandname())) - continue; - - long lastPlayed = player.getLastPlayed(); - int dif = (int) ((time - lastPlayed) / 1000 / 60 / 60 / 24); - if (dif < interval) - continue; - - if (ResidenceVaultAdapter.hasPermission(player, "residence.cleanbypass", res.getWorld())) - continue; - - Residence.getResidenceManager().removeResidence(oneName); - i++; - } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Auto CleanUp deleted " + i + " residences!"); - } -} +package com.bekvon.bukkit.residence.utils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; + +public class FileCleanUp { + + public static void cleanFiles() { + + ArrayList resNameList = Residence.getInstance().getResidenceManager().getResidenceList(false, false); + int i = 0; + + OfflinePlayer[] offplayer = Bukkit.getOfflinePlayers(); + + HashMap playermap = new HashMap(); + + for (OfflinePlayer one : offplayer) { + playermap.put(one.getUniqueId(), one); + } + + int interval = Residence.getInstance().getConfigManager().getResidenceFileCleanDays(); + long time = System.currentTimeMillis(); + + for (String oneName : resNameList) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByName(oneName); + if (res == null) + continue; + + if (!playermap.containsKey(res.getOwnerUUID())) + continue; + + OfflinePlayer player = playermap.get(res.getOwnerUUID()); + + if (player == null) + continue; + + if (!Residence.getInstance().getConfigManager().getCleanWorlds().contains(res.getWorld())) + continue; + + if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(Residence.getServerLandname())) + continue; + + long lastPlayed = player.getLastPlayed(); + int dif = (int) ((time - lastPlayed) / 1000 / 60 / 60 / 24); + if (dif < interval) + continue; + + if (ResidenceVaultAdapter.hasPermission(player, "residence.cleanbypass", res.getWorld())) + continue; + + Residence.getInstance().getResidenceManager().removeResidence(oneName); + i++; + } + Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Auto CleanUp deleted " + i + " residences!"); + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/GetTime.java b/src/com/bekvon/bukkit/residence/utils/GetTime.java index 07a89a9a3..8f32ecd1d 100644 --- a/src/com/bekvon/bukkit/residence/utils/GetTime.java +++ b/src/com/bekvon/bukkit/residence/utils/GetTime.java @@ -1,16 +1,16 @@ -package com.bekvon.bukkit.residence.utils; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.TimeZone; - -import com.bekvon.bukkit.residence.Residence; - -public class GetTime { - public static String getTime(Long time) { - Date dNow = new Date(time); - SimpleDateFormat ft = new SimpleDateFormat(Residence.getConfigManager().getDateFormat()); - ft.setTimeZone(TimeZone.getTimeZone(Residence.getConfigManager().getTimeZone())); - return ft.format(dNow); - } -} +package com.bekvon.bukkit.residence.utils; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.TimeZone; + +import com.bekvon.bukkit.residence.Residence; + +public class GetTime { + public static String getTime(Long time) { + Date dNow = new Date(time); + SimpleDateFormat ft = new SimpleDateFormat(Residence.getInstance().getConfigManager().getDateFormat()); + ft.setTimeZone(TimeZone.getTimeZone(Residence.getInstance().getConfigManager().getTimeZone())); + return ft.format(dNow); + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index dd3304832..d92616083 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -1,147 +1,147 @@ -package com.bekvon.bukkit.residence.utils; - -import java.util.Random; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.World.Environment; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.RandomTeleport; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class RandomTp { - - static int miny = 63; - - private Residence plugin; - - public RandomTp(Residence plugin) { - this.plugin = plugin; - } - - public Location getRandomlocation(String WorldName) { - - if (WorldName == null) - return null; - - Random random = new Random(System.currentTimeMillis()); - - boolean ok = false; - double x = 0; - double z = 0; - - int tries = 0; - - RandomTeleport rtloc = null; - - for (RandomTeleport one : Residence.getConfigManager().getRandomTeleport()) { - - if (!one.getWorld().equalsIgnoreCase(WorldName)) - continue; - - rtloc = one; - break; - } - - if (rtloc == null) - return null; - - World world = rtloc.getCenter().getWorld(); - - if (world == null) - return null; - - int inerrange = rtloc.getMinCord(); - int outerrange = rtloc.getMaxCord(); - int maxtries = Residence.getConfigManager().getrtMaxTries(); - - int centerX = rtloc.getCenter().getBlockX(); - int centerY = rtloc.getCenter().getBlockZ(); - - Location loc = null; - - c: while (!ok) { - tries++; - if (tries > maxtries) - return null; - - x = random.nextInt(outerrange * 2) - outerrange + 0.5 + centerX; - - if (x > inerrange * -1 && x < inerrange) - continue; - - z = random.nextInt(outerrange * 2) - outerrange + 0.5 + centerY; - if (z > inerrange * -1 && z < inerrange) - continue; - - loc = new Location(world, x, world.getMaxHeight(), z); - - int dir = random.nextInt(359); - - int max = loc.getWorld().getMaxHeight(); - max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; - - loc.setYaw(dir); - - for (int i = max; i > 0; i--) { - loc.setY(i); - Block block = loc.getBlock(); - Block block2 = loc.clone().add(0, 1, 0).getBlock(); - Block block3 = loc.clone().add(0, -1, 0).getBlock(); - if (!Residence.getNms().isEmptyBlock(block3) && Residence.getNms().isEmptyBlock(block) && Residence.getNms().isEmptyBlock(block2)) { - break; - } - if (i <= 3) { - loc = null; - continue c; - } - } - - if (!Residence.getNms().isEmptyBlock(loc.getBlock())) - continue; - - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA || loc.clone().add(0, -1, 0).getBlock().getState() - .getType() == Material.STATIONARY_LAVA) - continue; - - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER || loc.clone().add(0, -1, 0).getBlock().getState() - .getType() == Material.STATIONARY_WATER) - continue; - - ClaimedResidence res = Residence.getResidenceManager().getByLoc(loc); - - if (res != null) - continue; - - loc.setY(loc.getY() + 2); - break; - } - return loc; - } - - public void performDelaydTp(final Location loc, final Player targetPlayer) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (!Residence.getTeleportDelayMap().contains(targetPlayer.getName()) && Residence.getConfigManager().getTeleportDelay() > 0) - return; - else if (Residence.getTeleportDelayMap().contains(targetPlayer.getName())) - Residence.getTeleportDelayMap().remove(targetPlayer.getName()); - targetPlayer.teleport(loc); - Residence.msg(targetPlayer, lm.RandomTeleport_TeleportSuccess, loc.getX(), loc.getY(), loc.getZ()); - return; - } - }, Residence.getConfigManager().getTeleportDelay() * 20L); - } - - public void performInstantTp(Location loc, Player targetPlayer) { - targetPlayer.teleport(loc); - Residence.msg(targetPlayer, lm.RandomTeleport_TeleportSuccess, loc.getX(), loc.getY(), loc.getZ()); - } -} +package com.bekvon.bukkit.residence.utils; + +import java.util.Random; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.World.Environment; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.RandomTeleport; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class RandomTp { + + static int miny = 63; + + private Residence plugin; + + public RandomTp(Residence plugin) { + this.plugin = plugin; + } + + public Location getRandomlocation(String WorldName) { + + if (WorldName == null) + return null; + + Random random = new Random(System.currentTimeMillis()); + + boolean ok = false; + double x = 0; + double z = 0; + + int tries = 0; + + RandomTeleport rtloc = null; + + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + + if (!one.getWorld().equalsIgnoreCase(WorldName)) + continue; + + rtloc = one; + break; + } + + if (rtloc == null) + return null; + + World world = rtloc.getCenter().getWorld(); + + if (world == null) + return null; + + int inerrange = rtloc.getMinCord(); + int outerrange = rtloc.getMaxCord(); + int maxtries = plugin.getConfigManager().getrtMaxTries(); + + int centerX = rtloc.getCenter().getBlockX(); + int centerY = rtloc.getCenter().getBlockZ(); + + Location loc = null; + + c: while (!ok) { + tries++; + if (tries > maxtries) + return null; + + x = random.nextInt(outerrange * 2) - outerrange + 0.5 + centerX; + + if (x > inerrange * -1 && x < inerrange) + continue; + + z = random.nextInt(outerrange * 2) - outerrange + 0.5 + centerY; + if (z > inerrange * -1 && z < inerrange) + continue; + + loc = new Location(world, x, world.getMaxHeight(), z); + + int dir = random.nextInt(359); + + int max = loc.getWorld().getMaxHeight(); + max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; + + loc.setYaw(dir); + + for (int i = max; i > 0; i--) { + loc.setY(i); + Block block = loc.getBlock(); + Block block2 = loc.clone().add(0, 1, 0).getBlock(); + Block block3 = loc.clone().add(0, -1, 0).getBlock(); + if (!plugin.getNms().isEmptyBlock(block3) && plugin.getNms().isEmptyBlock(block) && plugin.getNms().isEmptyBlock(block2)) { + break; + } + if (i <= 3) { + loc = null; + continue c; + } + } + + if (!plugin.getNms().isEmptyBlock(loc.getBlock())) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA || loc.clone().add(0, -1, 0).getBlock().getState() + .getType() == Material.STATIONARY_LAVA) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER || loc.clone().add(0, -1, 0).getBlock().getState() + .getType() == Material.STATIONARY_WATER) + continue; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + + if (res != null) + continue; + + loc.setY(loc.getY() + 2); + break; + } + return loc; + } + + public void performDelaydTp(final Location loc, final Player targetPlayer) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) && plugin.getConfigManager().getTeleportDelay() > 0) + return; + else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) + plugin.getTeleportDelayMap().remove(targetPlayer.getName()); + targetPlayer.teleport(loc); + plugin.msg(targetPlayer, lm.RandomTeleport_TeleportSuccess, loc.getX(), loc.getY(), loc.getZ()); + return; + } + }, plugin.getConfigManager().getTeleportDelay() * 20L); + } + + public void performInstantTp(Location loc, Player targetPlayer) { + targetPlayer.teleport(loc); + plugin.msg(targetPlayer, lm.RandomTeleport_TeleportSuccess, loc.getX(), loc.getY(), loc.getZ()); + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 0f68789a2..39efcf30f 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -1,103 +1,103 @@ -package com.bekvon.bukkit.residence.utils; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.Arrays; -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; - -public class VersionChecker { - Residence plugin; - private int resource = 11480; - private int cleanVersion = 0; - - public VersionChecker(Residence plugin) { - this.plugin = plugin; - } - - public int GetVersion() { - if (cleanVersion == 0) { - String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); - String version = v[v.length - 1]; - // Translating version to integer for simpler use - try { - cleanVersion = Integer.parseInt(version.replace("v", "").replace("V", "").replace("_", "").replace("r", "").replace("R", "")); - cleanVersion *= 10; - } catch (NumberFormatException e) { - // Fail safe if it for some reason can't translate version to integer - if (version.contains("v1_4")) - cleanVersion = 1400; - if (version.contains("v1_5")) - cleanVersion = 1500; - if (version.contains("v1_6")) - cleanVersion = 1600; - if (version.contains("v1_7")) - cleanVersion = 1700; - if (version.contains("v1_8_R1")) - cleanVersion = 1810; - if (version.contains("v1_8_R2")) - cleanVersion = 1820; - if (version.contains("v1_8_R3")) - cleanVersion = 1830; - if (version.contains("v1_9_R1")) - cleanVersion = 1910; - if (version.contains("v1_9_R2")) - cleanVersion = 1920; - if (version.contains("v1_10_R1")) - cleanVersion = 11010; - } - - if (cleanVersion < 1400) - cleanVersion *= 10; - } - return cleanVersion; - } - - public void VersionCheck(final Player player) { - if (!Residence.getConfigManager().versionCheck()) - return; - - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - String currentVersion = plugin.getDescription().getVersion(); - String newVersion = getNewVersion(); - if (newVersion == null || newVersion.equalsIgnoreCase(currentVersion)) - return; - List msg = Arrays.asList( - ChatColor.GREEN + "*********************** " + plugin.getDescription().getName() + " **************************", - ChatColor.GREEN + "* " + newVersion + " is now available! Your version: " + currentVersion, - ChatColor.GREEN + "* " + ChatColor.DARK_GREEN + plugin.getDescription().getWebsite(), - ChatColor.GREEN + "************************************************************"); - for (String one : msg) - if (player != null) - player.sendMessage(one); - else - plugin.consoleMessage(one); - } - }); - } - - public String getNewVersion() { - try { - HttpURLConnection con = (HttpURLConnection) new URL("http://www.spigotmc.org/api/general.php").openConnection(); - con.setDoOutput(true); - con.setRequestMethod("POST"); - con.getOutputStream().write(("key=98BE0FE67F88AB82B4C197FAF1DC3B69206EFDCC4D3B80FC83A00037510B99B4&resource=" + resource).getBytes("UTF-8")); - String version = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine(); - if (version.length() <= 9) - return version; - } catch (Exception ex) { - plugin.consoleMessage(ChatColor.RED + "Failed to check for " + plugin.getDescription().getName() + " update on spigot web page."); - } - return null; - } - -} +package com.bekvon.bukkit.residence.utils; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Arrays; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; + +public class VersionChecker { + Residence plugin; + private int resource = 11480; + private int cleanVersion = 0; + + public VersionChecker(Residence plugin) { + this.plugin = plugin; + } + + public int GetVersion() { + if (cleanVersion == 0) { + String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); + String version = v[v.length - 1]; + // Translating version to integer for simpler use + try { + cleanVersion = Integer.parseInt(version.replace("v", "").replace("V", "").replace("_", "").replace("r", "").replace("R", "")); + cleanVersion *= 10; + } catch (NumberFormatException e) { + // Fail safe if it for some reason can't translate version to integer + if (version.contains("v1_4")) + cleanVersion = 1400; + if (version.contains("v1_5")) + cleanVersion = 1500; + if (version.contains("v1_6")) + cleanVersion = 1600; + if (version.contains("v1_7")) + cleanVersion = 1700; + if (version.contains("v1_8_R1")) + cleanVersion = 1810; + if (version.contains("v1_8_R2")) + cleanVersion = 1820; + if (version.contains("v1_8_R3")) + cleanVersion = 1830; + if (version.contains("v1_9_R1")) + cleanVersion = 1910; + if (version.contains("v1_9_R2")) + cleanVersion = 1920; + if (version.contains("v1_10_R1")) + cleanVersion = 11010; + } + + if (cleanVersion < 1400) + cleanVersion *= 10; + } + return cleanVersion; + } + + public void VersionCheck(final Player player) { + if (!plugin.getConfigManager().versionCheck()) + return; + + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + String currentVersion = plugin.getDescription().getVersion(); + String newVersion = getNewVersion(); + if (newVersion == null || newVersion.equalsIgnoreCase(currentVersion)) + return; + List msg = Arrays.asList( + ChatColor.GREEN + "*********************** " + plugin.getDescription().getName() + " **************************", + ChatColor.GREEN + "* " + newVersion + " is now available! Your version: " + currentVersion, + ChatColor.GREEN + "* " + ChatColor.DARK_GREEN + plugin.getDescription().getWebsite(), + ChatColor.GREEN + "************************************************************"); + for (String one : msg) + if (player != null) + player.sendMessage(one); + else + plugin.consoleMessage(one); + } + }); + } + + public String getNewVersion() { + try { + HttpURLConnection con = (HttpURLConnection) new URL("http://www.spigotmc.org/api/general.php").openConnection(); + con.setDoOutput(true); + con.setRequestMethod("POST"); + con.getOutputStream().write(("key=98BE0FE67F88AB82B4C197FAF1DC3B69206EFDCC4D3B80FC83A00037510B99B4&resource=" + resource).getBytes("UTF-8")); + String version = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine(); + if (version.length() <= 9) + return version; + } catch (Exception ex) { + plugin.consoleMessage(ChatColor.RED + "Failed to check for " + plugin.getDescription().getName() + " update on spigot web page."); + } + return null; + } + +} diff --git a/src/com/residence/zip/ZipLibrary.java b/src/com/residence/zip/ZipLibrary.java index bd3940ff1..934918232 100644 --- a/src/com/residence/zip/ZipLibrary.java +++ b/src/com/residence/zip/ZipLibrary.java @@ -18,9 +18,15 @@ public class ZipLibrary { private File BackupDir = new File(Residence.getDataLocation(), "Backup"); + private Residence plugin; + + public ZipLibrary(Residence residence) { + this.plugin = residence; + + } private void cleanFiles() { - int x = Residence.getConfigManager().BackupAutoCleanUpDays() * 60 * 1000 * 24 * 60; + int x = plugin.getConfigManager().BackupAutoCleanUpDays() * 60 * 1000 * 24 * 60; Long time = System.currentTimeMillis(); for (File file : BackupDir.listFiles()) { long diff = time - file.lastModified(); @@ -37,7 +43,7 @@ public void backup() throws IOException { e.printStackTrace(); return; } - if (Residence.getConfigManager().BackupAutoCleanUpUse()) + if (plugin.getConfigManager().BackupAutoCleanUpUse()) cleanFiles(); // Generate the proper date for the backup filename Date date = new Date(); @@ -55,7 +61,7 @@ public void backup() throws IOException { } File saveFile; - if (Residence.getConfigManager().BackupWorldFiles()) + if (plugin.getConfigManager().BackupWorldFiles()) for (World world : Residence.getServ().getWorlds()) { saveFile = new File(worldFolder, "res_" + world.getName() + ".yml"); if (saveFile.isFile()) { @@ -63,23 +69,23 @@ public void backup() throws IOException { } } - if (Residence.getConfigManager().BackupforsaleFile()) + if (plugin.getConfigManager().BackupforsaleFile()) sources.add(new File(saveFolder, "forsale.yml")); - if (Residence.getConfigManager().BackupleasesFile()) + if (plugin.getConfigManager().BackupleasesFile()) sources.add(new File(saveFolder, "leases.yml")); - if (Residence.getConfigManager().BackuppermlistsFile()) + if (plugin.getConfigManager().BackuppermlistsFile()) sources.add(new File(saveFolder, "permlists.yml")); - if (Residence.getConfigManager().BackuprentFile()) + if (plugin.getConfigManager().BackuprentFile()) sources.add(new File(saveFolder, "rent.yml")); - if (Residence.getConfigManager().BackupflagsFile()) + if (plugin.getConfigManager().BackupflagsFile()) sources.add(new File(Residence.getDataLocation(), "flags.yml")); - if (Residence.getConfigManager().BackupgroupsFile()) + if (plugin.getConfigManager().BackupgroupsFile()) sources.add(new File(Residence.getDataLocation(), "groups.yml")); - if (Residence.getConfigManager().BackupconfigFile()) + if (plugin.getConfigManager().BackupconfigFile()) sources.add(new File(Residence.getDataLocation(), "config.yml")); - if (Residence.getConfigManager().UseZipBackup()) + if (plugin.getConfigManager().UseZipBackup()) packZip(fileZip, sources); } diff --git a/src/plugin.yml b/src/plugin.yml index a79471019..3f5fa5576 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.12.2 +version: 4.5.13.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 4e316a23f1914ba7836d0b26685b48d9921159cf Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Dec 2016 18:28:43 +0200 Subject: [PATCH 0309/1142] Moved to non static variable environment --- .../bukkit/residence/CommandFiller.java | 284 ++++++------ .../bukkit/residence/ConfigManager.java | 12 +- .../bukkit/residence/LocaleManager.java | 325 +++++++------- .../bekvon/bukkit/residence/Residence.java | 410 +++++++++--------- .../residence/ResidenceCommandListener.java | 8 +- .../bukkit/residence/allNms/v1_10Events.java | 2 +- .../bukkit/residence/allNms/v1_8Events.java | 6 +- .../bukkit/residence/allNms/v1_9Events.java | 6 +- .../bukkit/residence/api/ResidenceApi.java | 52 +-- .../bukkit/residence/chat/ChatChannel.java | 6 +- .../bukkit/residence/chat/ChatManager.java | 2 +- .../bukkit/residence/commands/area.java | 10 +- .../bukkit/residence/commands/bank.java | 2 +- .../bukkit/residence/commands/check.java | 2 +- .../bukkit/residence/commands/clearflags.java | 2 +- .../bukkit/residence/commands/command.java | 2 +- .../bukkit/residence/commands/compass.java | 2 +- .../bukkit/residence/commands/contract.java | 2 +- .../bukkit/residence/commands/expand.java | 2 +- .../bukkit/residence/commands/flags.java | 4 +- .../bukkit/residence/commands/give.java | 2 +- .../bukkit/residence/commands/gset.java | 2 +- .../bukkit/residence/commands/info.java | 2 +- .../bukkit/residence/commands/kick.java | 4 +- .../bukkit/residence/commands/lease.java | 10 +- .../bukkit/residence/commands/limits.java | 2 +- .../bukkit/residence/commands/list.java | 2 +- .../bukkit/residence/commands/listall.java | 2 +- .../bukkit/residence/commands/listhidden.java | 2 +- .../bukkit/residence/commands/lset.java | 2 +- .../bukkit/residence/commands/market.java | 22 +- .../bukkit/residence/commands/material.java | 2 +- .../bukkit/residence/commands/message.java | 2 +- .../bukkit/residence/commands/mirror.java | 2 +- .../bukkit/residence/commands/padd.java | 2 +- .../bukkit/residence/commands/pdel.java | 2 +- .../bukkit/residence/commands/pset.java | 4 +- .../bekvon/bukkit/residence/commands/rc.java | 4 +- .../bukkit/residence/commands/reload.java | 18 +- .../bukkit/residence/commands/remove.java | 2 +- .../bukkit/residence/commands/removeall.java | 2 +- .../residence/commands/removeworld.java | 2 +- .../bukkit/residence/commands/rename.java | 2 +- .../bukkit/residence/commands/renamearea.java | 2 +- .../bukkit/residence/commands/resadmin.java | 2 +- .../bukkit/residence/commands/resbank.java | 2 +- .../bukkit/residence/commands/reset.java | 2 +- .../bekvon/bukkit/residence/commands/rt.java | 2 +- .../bukkit/residence/commands/select.java | 4 +- .../bukkit/residence/commands/server.java | 2 +- .../bekvon/bukkit/residence/commands/set.java | 2 +- .../bukkit/residence/commands/setmain.java | 2 +- .../bukkit/residence/commands/setowner.java | 2 +- .../bukkit/residence/commands/shop.java | 10 +- .../bukkit/residence/commands/show.java | 2 +- .../bukkit/residence/commands/sublist.java | 2 +- .../bukkit/residence/commands/subzone.java | 2 +- .../bekvon/bukkit/residence/commands/tp.java | 2 +- .../bukkit/residence/commands/version.java | 2 +- .../residence/containers/PlayerGroup.java | 21 +- .../residence/containers/ResidencePlayer.java | 12 +- .../residence/dynmap/DynMapListeners.java | 136 +++--- .../bukkit/residence/economy/BOSEAdapter.java | 2 +- .../economy/EssentialsEcoAdapter.java | 2 +- .../residence/event/ResidencePlayerEvent.java | 2 +- .../event/ResidencePlayerFlagEvent.java | 2 +- .../bekvon/bukkit/residence/gui/SetFlag.java | 18 +- .../residence/itemlist/ResidenceItemList.java | 2 +- .../residence/itemlist/WorldItemManager.java | 6 +- .../listeners/ResidenceBlockListener.java | 2 - .../listeners/ResidenceEntityListener.java | 2 - .../listeners/ResidencePlayerListener.java | 5 +- .../permissions/BPermissionsAdapter.java | 2 +- .../permissions/PermissionGroup.java | 6 +- .../permissions/PermissionManager.java | 24 +- .../permissions/PermissionsBukkitAdapter.java | 2 +- .../protection/ClaimedResidence.java | 5 +- .../residence/protection/CuboidArea.java | 2 +- .../residence/protection/FlagPermissions.java | 43 +- .../residence/protection/LeaseManager.java | 4 +- .../protection/ResidenceManager.java | 25 +- .../protection/ResidencePermissions.java | 78 ++-- .../protection/WorldFlagManager.java | 10 +- .../residence/selection/AutoSelection.java | 2 +- .../selection/SchematicsManager.java | 15 +- .../residence/selection/SelectionManager.java | 13 +- .../residence/selection/WorldGuardUtil.java | 4 +- .../residence/shopStuff/ShopListener.java | 2 +- .../bukkit/residence/text/help/HelpEntry.java | 14 +- .../bukkit/residence/utils/CrackShot.java | 4 +- .../bukkit/residence/utils/FileCleanUp.java | 22 +- .../bukkit/residence/utils/TabComplete.java | 54 +-- .../vaultinterface/ResidenceVaultAdapter.java | 1 - src/com/residence/zip/ZipLibrary.java | 15 +- 94 files changed, 924 insertions(+), 914 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/CommandFiller.java b/src/com/bekvon/bukkit/residence/CommandFiller.java index 40c3b297d..08783f50c 100644 --- a/src/com/bekvon/bukkit/residence/CommandFiller.java +++ b/src/com/bekvon/bukkit/residence/CommandFiller.java @@ -1,142 +1,142 @@ -package com.bekvon.bukkit.residence; - -import java.lang.reflect.Method; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; - -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.CommandStatus; - -public class CommandFiller { - - public final String packagePath = "com.bekvon.bukkit.residence.commands"; - public Map CommandList = new HashMap(); - - public List getCommands(Boolean simple) { - Map cmd = new HashMap(); - for (Entry one : CommandList.entrySet()) { - if (simple && !one.getValue().getSimple() || !simple && one.getValue().getSimple()) - continue; - cmd.put(one.getKey(), one.getValue().getPriority()); - } - cmd = Residence.getSortingManager().sortByValueASC(cmd); - List cmdList = new ArrayList(); - for (Entry one : cmd.entrySet()) { - cmdList.add(one.getKey()); - } - return cmdList; - } - - public List getCommands() { - Map cmd = new HashMap(); - for (Entry one : CommandList.entrySet()) { - cmd.put(one.getKey(), one.getValue().getPriority()); - } - cmd = Residence.getSortingManager().sortByValueASC(cmd); - List cmdList = new ArrayList(); - for (Entry one : cmd.entrySet()) { - cmdList.add(one.getKey()); - } - return cmdList; - } - - public Map fillCommands() { - List lm = new ArrayList(); - HashMap> classes = new HashMap>(); - try { - lm = getClassesFromPackage(packagePath); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - - for (String one : lm) { - Class newclass = getClass(one); - if (newclass != null) - classes.put(one, newclass); - } - - for (Entry> OneClass : classes.entrySet()) { - boolean found = false; - for (Method met : OneClass.getValue().getMethods()) { - if (!met.isAnnotationPresent(CommandAnnotation.class)) - continue; - - found = true; - Boolean simple = met.getAnnotation(CommandAnnotation.class).simple(); - int Priority = met.getAnnotation(CommandAnnotation.class).priority(); - - String cmd = OneClass.getKey(); - CommandList.put(cmd, new CommandStatus(simple, Priority)); - break; - } - if (!found) { - CommandList.put(OneClass.getKey(), new CommandStatus(true, 1000)); - } - } - return CommandList; - } - - public static List getClassesFromPackage(String pckgname) throws ClassNotFoundException { - List result = new ArrayList(); - try { - for (URL jarURL : ((URLClassLoader) Residence.class.getClassLoader()).getURLs()) { - try { - result.addAll(getClassesInSamePackageFromJar(pckgname, jarURL.toURI().getPath())); - } catch (URISyntaxException e) { - } - } - } catch (NullPointerException x) { - throw new ClassNotFoundException(pckgname + " does not appear to be a valid package (Null pointer exception)"); - } - - return result; - } - - private static List getClassesInSamePackageFromJar(String packageName, String jarPath) { - JarFile jarFile = null; - List listOfCommands = new ArrayList(); - try { - jarFile = new JarFile(jarPath); - Enumeration en = jarFile.entries(); - while (en.hasMoreElements()) { - JarEntry entry = en.nextElement(); - String entryName = entry.getName(); - packageName = packageName.replace(".", "/"); - if (entryName != null && entryName.endsWith(".class") && entryName.startsWith(packageName)) { - String name = entryName.replace(packageName, "").replace(".class", "").replace("/", ""); - if (name.contains("$")) - name = name.split("\\$")[0]; - listOfCommands.add(name); - } - } - } catch (Exception e) { - } finally { - if (jarFile != null) - try { - jarFile.close(); - } catch (Exception e) { - } - } - return listOfCommands; - } - - private Class getClass(String cmd) { - Class nmsClass = null; - try { - nmsClass = Class.forName(packagePath + "." + cmd.toLowerCase()); - } catch (ClassNotFoundException e) { - } catch (IllegalArgumentException e) { - } catch (SecurityException e) { - } - return nmsClass; - } -} +package com.bekvon.bukkit.residence; + +import java.lang.reflect.Method; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.CommandStatus; + +public class CommandFiller { + + public final String packagePath = "com.bekvon.bukkit.residence.commands"; + public Map CommandList = new HashMap(); + + public List getCommands(Boolean simple) { + Map cmd = new HashMap(); + for (Entry one : CommandList.entrySet()) { + if (simple && !one.getValue().getSimple() || !simple && one.getValue().getSimple()) + continue; + cmd.put(one.getKey(), one.getValue().getPriority()); + } + cmd = Residence.getInstance().getSortingManager().sortByValueASC(cmd); + List cmdList = new ArrayList(); + for (Entry one : cmd.entrySet()) { + cmdList.add(one.getKey()); + } + return cmdList; + } + + public List getCommands() { + Map cmd = new HashMap(); + for (Entry one : CommandList.entrySet()) { + cmd.put(one.getKey(), one.getValue().getPriority()); + } + cmd = Residence.getInstance().getSortingManager().sortByValueASC(cmd); + List cmdList = new ArrayList(); + for (Entry one : cmd.entrySet()) { + cmdList.add(one.getKey()); + } + return cmdList; + } + + public Map fillCommands() { + List lm = new ArrayList(); + HashMap> classes = new HashMap>(); + try { + lm = getClassesFromPackage(packagePath); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + for (String one : lm) { + Class newclass = getClass(one); + if (newclass != null) + classes.put(one, newclass); + } + + for (Entry> OneClass : classes.entrySet()) { + boolean found = false; + for (Method met : OneClass.getValue().getMethods()) { + if (!met.isAnnotationPresent(CommandAnnotation.class)) + continue; + + found = true; + Boolean simple = met.getAnnotation(CommandAnnotation.class).simple(); + int Priority = met.getAnnotation(CommandAnnotation.class).priority(); + + String cmd = OneClass.getKey(); + CommandList.put(cmd, new CommandStatus(simple, Priority)); + break; + } + if (!found) { + CommandList.put(OneClass.getKey(), new CommandStatus(true, 1000)); + } + } + return CommandList; + } + + public static List getClassesFromPackage(String pckgname) throws ClassNotFoundException { + List result = new ArrayList(); + try { + for (URL jarURL : ((URLClassLoader) Residence.class.getClassLoader()).getURLs()) { + try { + result.addAll(getClassesInSamePackageFromJar(pckgname, jarURL.toURI().getPath())); + } catch (URISyntaxException e) { + } + } + } catch (NullPointerException x) { + throw new ClassNotFoundException(pckgname + " does not appear to be a valid package (Null pointer exception)"); + } + + return result; + } + + private static List getClassesInSamePackageFromJar(String packageName, String jarPath) { + JarFile jarFile = null; + List listOfCommands = new ArrayList(); + try { + jarFile = new JarFile(jarPath); + Enumeration en = jarFile.entries(); + while (en.hasMoreElements()) { + JarEntry entry = en.nextElement(); + String entryName = entry.getName(); + packageName = packageName.replace(".", "/"); + if (entryName != null && entryName.endsWith(".class") && entryName.startsWith(packageName)) { + String name = entryName.replace(packageName, "").replace(".class", "").replace("/", ""); + if (name.contains("$")) + name = name.split("\\$")[0]; + listOfCommands.add(name); + } + } + } catch (Exception e) { + } finally { + if (jarFile != null) + try { + jarFile.close(); + } catch (Exception e) { + } + } + return listOfCommands; + } + + private Class getClass(String cmd) { + Class nmsClass = null; + try { + nmsClass = Class.forName(packagePath + "." + cmd.toLowerCase()); + } catch (ClassNotFoundException e) { + } catch (IllegalArgumentException e) { + } catch (SecurityException e) { + } + return nmsClass; + } +} diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 29ac3ae7d..f82ceeee0 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -875,7 +875,7 @@ public void UpdateConfigFile() { } } - if (Residence.isSpigot()) + if (plugin.isSpigot()) if (SelectedSpigotFrame == null) { SelectedSpigotFrame = Effect.getByName("HAPPY_VILLAGER"); if (SelectedSpigotFrame == null) @@ -898,7 +898,7 @@ public void UpdateConfigFile() { } } - if (Residence.isSpigot()) + if (plugin.isSpigot()) if (SelectedSpigotSides == null) { SelectedSpigotSides = Effect.getByName("COLOURED_DUST"); if (SelectedSpigotSides == null) @@ -922,7 +922,7 @@ public void UpdateConfigFile() { } } - if (Residence.isSpigot()) + if (plugin.isSpigot()) if (OverlapSpigotFrame == null) { OverlapSpigotFrame = Effect.getByName("FLAME"); if (OverlapSpigotFrame == null) @@ -944,7 +944,7 @@ public void UpdateConfigFile() { } } - if (Residence.isSpigot()) + if (plugin.isSpigot()) if (OverlapSpigotSides == null) { OverlapSpigotSides = Effect.getByName("FLAME"); if (OverlapSpigotSides == null) @@ -1048,13 +1048,13 @@ public void UpdateConfigFile() { } public void loadFlags() { - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "flags.yml")); + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", flags.getConfigurationSection("Global")); globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", flags.getConfigurationSection("Global")); } public void loadGroups() { - FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "groups.yml")); + FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); ConfigurationSection node = groups.getConfigurationSection("Global.GroupDefault"); if (node != null) { Set keys = node.getConfigurationSection(defaultGroup).getKeys(false); diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index cee7894b6..c2ea4f0d2 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -1,163 +1,162 @@ -package com.bekvon.bukkit.residence; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; -import java.lang.reflect.InvocationTargetException; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; - -import com.bekvon.bukkit.residence.containers.CommandStatus; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; - -public class LocaleManager { - - public static ArrayList FlagList = new ArrayList(); - public HashMap, List> CommandTab = new HashMap, List>(); - private Residence plugin; - - public String path = "CommandHelp.SubCommands.res.SubCommands."; - - public LocaleManager(Residence plugin) { - this.plugin = plugin; - } - - private static YamlConfiguration loadConfiguration(BufferedReader in, String language) { - Validate.notNull(in, "File cannot be null"); - YamlConfiguration config = new YamlConfiguration(); - try { - config.load(in); - } catch (FileNotFoundException ex) { - } catch (IOException ex) { - } catch (InvalidConfigurationException ex) { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[Residence] Your locale file for " + language - + " is incorect! Use http://yaml-online-parser.appspot.com/ to find issue."); - return null; - } - - return config; - } - - // Language file - public void LoadLang(String lang) { - - File f = new File(plugin.getDataFolder(), "Language" + File.separator + lang + ".yml"); - - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(f), StandardCharsets.UTF_8)); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - - if (in == null) - return; - - YamlConfiguration conf = loadConfiguration(in, lang); - - if (conf == null) { - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - ConfigReader c = new ConfigReader(conf, writer); - c.getC().options().copyDefaults(true); - - StringBuilder header = new StringBuilder(); - header.append(System.getProperty("line.separator")); - header.append("NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy"); - header.append(System.getProperty("line.separator")); - header.append("of this file and modify that instead. This file will be updated automatically by Residence"); - header.append(System.getProperty("line.separator")); - header.append("when a newer version is detected, and your changes will be overwritten. Once you "); - header.append(System.getProperty("line.separator")); - header.append("have a copy of this file, change the Language: option under the Residence config.yml"); - header.append(System.getProperty("line.separator")); - header.append("to whatever you named your copy."); - header.append(System.getProperty("line.separator")); - - c.getW().options().header(header.toString()); - - for (lm lm : lm.values()) { - if (lm.getText() instanceof String) - c.get(lm.getPath(), String.valueOf(lm.getText())); - else if (lm.getText() instanceof ArrayList) { - List result = new ArrayList(); - for (Object obj : (ArrayList) lm.getText()) { - if (obj instanceof String) { - result.add((String) obj); - } - } - c.get(lm.getPath(), result); - } - - if (lm.getComments() != null) - writer.addComment(lm.getPath(), lm.getComments()); - } - - writer.addComment("CommandHelp", ""); - - c.get("CommandHelp.Description", "Contains Help for Residence"); - c.get("CommandHelp.SubCommands.res.Description", "Main Residence Command"); - c.get("CommandHelp.SubCommands.res.Info", Arrays.asList("&2Use &6/res [command] ? &2to view more help Information.")); - - for (Entry cmo : Residence.getCommandFiller().CommandList.entrySet()) { - String path = Residence.getLocaleManager().path + cmo.getKey() + "."; - try { - Class cl = Class.forName(Residence.getCommandFiller().packagePath + "." + cmo.getKey()); - if (cmd.class.isAssignableFrom(cl)) { - cmd cm = (cmd) cl.getConstructor().newInstance(); - cm.getLocale(c, path); - } - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException - | NoSuchMethodException | SecurityException e) { - continue; - } - } - - // custom commands - - c.get("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence."); - c.get("CommandHelp.SubCommands.res.SubCommands.resreload.Info", - Arrays.asList("&eUsage: &6/resreload")); - - c.get("CommandHelp.SubCommands.res.SubCommands.resload.Description", "Load residence save file."); - c.get("CommandHelp.SubCommands.res.SubCommands.resload.Info", - Arrays.asList("&eUsage: &6/resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes.")); - - c.get("CommandHelp.SubCommands.res.SubCommands.removeworld.Description", "Remove all residences from world"); - c.get("CommandHelp.SubCommands.res.SubCommands.removeworld.Info", - Arrays.asList("&eUsage: &6/res removeworld [worldname]", "Can only be used from console")); - - // Write back config - try { - c.getW().save(f); - } catch (IOException e) { - e.printStackTrace(); - } - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } -} +package com.bekvon.bukkit.residence; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.lang.reflect.InvocationTargetException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; +import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; + +import com.bekvon.bukkit.residence.containers.CommandStatus; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +public class LocaleManager { + + public HashMap, List> CommandTab = new HashMap, List>(); + private Residence plugin; + + public String path = "CommandHelp.SubCommands.res.SubCommands."; + + public LocaleManager(Residence plugin) { + this.plugin = plugin; + } + + private static YamlConfiguration loadConfiguration(BufferedReader in, String language) { + Validate.notNull(in, "File cannot be null"); + YamlConfiguration config = new YamlConfiguration(); + try { + config.load(in); + } catch (FileNotFoundException ex) { + } catch (IOException ex) { + } catch (InvalidConfigurationException ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[Residence] Your locale file for " + language + + " is incorect! Use http://yaml-online-parser.appspot.com/ to find issue."); + return null; + } + + return config; + } + + // Language file + public void LoadLang(String lang) { + + File f = new File(plugin.getDataFolder(), "Language" + File.separator + lang + ".yml"); + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(f), StandardCharsets.UTF_8)); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + if (in == null) + return; + + YamlConfiguration conf = loadConfiguration(in, lang); + + if (conf == null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + ConfigReader c = new ConfigReader(conf, writer); + c.getC().options().copyDefaults(true); + + StringBuilder header = new StringBuilder(); + header.append(System.getProperty("line.separator")); + header.append("NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy"); + header.append(System.getProperty("line.separator")); + header.append("of this file and modify that instead. This file will be updated automatically by Residence"); + header.append(System.getProperty("line.separator")); + header.append("when a newer version is detected, and your changes will be overwritten. Once you "); + header.append(System.getProperty("line.separator")); + header.append("have a copy of this file, change the Language: option under the Residence config.yml"); + header.append(System.getProperty("line.separator")); + header.append("to whatever you named your copy."); + header.append(System.getProperty("line.separator")); + + c.getW().options().header(header.toString()); + + for (lm lm : lm.values()) { + if (lm.getText() instanceof String) + c.get(lm.getPath(), String.valueOf(lm.getText())); + else if (lm.getText() instanceof ArrayList) { + List result = new ArrayList(); + for (Object obj : (ArrayList) lm.getText()) { + if (obj instanceof String) { + result.add((String) obj); + } + } + c.get(lm.getPath(), result); + } + + if (lm.getComments() != null) + writer.addComment(lm.getPath(), lm.getComments()); + } + + writer.addComment("CommandHelp", ""); + + c.get("CommandHelp.Description", "Contains Help for Residence"); + c.get("CommandHelp.SubCommands.res.Description", "Main Residence Command"); + c.get("CommandHelp.SubCommands.res.Info", Arrays.asList("&2Use &6/res [command] ? &2to view more help Information.")); + + for (Entry cmo : plugin.getCommandFiller().CommandList.entrySet()) { + String path = plugin.getLocaleManager().path + cmo.getKey() + "."; + try { + Class cl = Class.forName(plugin.getCommandFiller().packagePath + "." + cmo.getKey()); + if (cmd.class.isAssignableFrom(cl)) { + cmd cm = (cmd) cl.getConstructor().newInstance(); + cm.getLocale(c, path); + } + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException + | NoSuchMethodException | SecurityException e) { + continue; + } + } + + // custom commands + + c.get("CommandHelp.SubCommands.res.SubCommands.resreload.Description", "Reload residence."); + c.get("CommandHelp.SubCommands.res.SubCommands.resreload.Info", + Arrays.asList("&eUsage: &6/resreload")); + + c.get("CommandHelp.SubCommands.res.SubCommands.resload.Description", "Load residence save file."); + c.get("CommandHelp.SubCommands.res.SubCommands.resload.Info", + Arrays.asList("&eUsage: &6/resload", "UNSAFE command, does not save residences first.", "Loads the residence save file after you have made changes.")); + + c.get("CommandHelp.SubCommands.res.SubCommands.removeworld.Description", "Remove all residences from world"); + c.get("CommandHelp.SubCommands.res.SubCommands.removeworld.Info", + Arrays.asList("&eUsage: &6/res removeworld [worldname]", "Can only be used from console")); + + // Write back config + try { + c.getW().save(f); + } catch (IOException e) { + e.printStackTrace(); + } + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index cf51b2b94..c7d8e3c99 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -128,97 +128,97 @@ public class Residence extends JavaPlugin { private static Residence instance; - protected static String ResidenceVersion; - protected static List authlist; - protected static ResidenceManager rmanager; - protected static SelectionManager smanager; - public static PermissionManager gmanager; - protected static ConfigManager cmanager; - - protected static boolean spigotPlatform = false; - - protected static SignUtil signmanager; - - protected static ResidenceBlockListener blistener; - protected static ResidencePlayerListener plistener; - protected static ResidenceEntityListener elistener; - protected static ResidenceSpoutListener slistener; - protected static ResidenceSpout spout; - - protected static ResidenceFixesListener flistener; - - protected static SpigotListener spigotlistener; - protected static ShopListener shlistener; - protected static TransactionManager tmanager; - protected static PermissionListManager pmanager; - protected static LeaseManager leasemanager; - public static WorldItemManager imanager; - public static WorldFlagManager wmanager; - protected static RentManager rentmanager; - protected static ChatManager chatmanager; - protected static Server server; - public static HelpEntry helppages; - protected static LocaleManager LocaleManager; - protected static Language NewLanguageManager; - protected static PlayerManager PlayerManager; - protected static FlagUtil FlagUtilManager; - protected static ShopSignUtil ShopSignUtilManager; - protected static RandomTp RandomTpManager; - protected static DynMapManager DynManager; - protected static Sorting SortingManager; - protected static ActionBar ABManager; - protected static AutoSelection AutoSelectionManager; - protected static SchematicsManager SchematicManager; - private static InformationPager InformationPagerManager; - private static WorldGuardUtil worldGuardUtil; - - protected static CommandFiller cmdFiller; - - protected static ZipLibrary zip; + protected String ResidenceVersion; + protected List authlist; + protected ResidenceManager rmanager; + protected SelectionManager smanager; + public PermissionManager gmanager; + protected ConfigManager cmanager; + + protected boolean spigotPlatform = false; + + protected SignUtil signmanager; + + protected ResidenceBlockListener blistener; + protected ResidencePlayerListener plistener; + protected ResidenceEntityListener elistener; + protected ResidenceSpoutListener slistener; + protected ResidenceSpout spout; + + protected ResidenceFixesListener flistener; + + protected SpigotListener spigotlistener; + protected ShopListener shlistener; + protected TransactionManager tmanager; + protected PermissionListManager pmanager; + protected LeaseManager leasemanager; + public WorldItemManager imanager; + public WorldFlagManager wmanager; + protected RentManager rentmanager; + protected ChatManager chatmanager; + protected Server server; + public HelpEntry helppages; + protected LocaleManager LocaleManager; + protected Language NewLanguageManager; + protected PlayerManager PlayerManager; + protected FlagUtil FlagUtilManager; + protected ShopSignUtil ShopSignUtilManager; + protected RandomTp RandomTpManager; + protected DynMapManager DynManager; + protected Sorting SortingManager; + protected ActionBar ABManager; + protected AutoSelection AutoSelectionManager; + protected SchematicsManager SchematicManager; + private InformationPager InformationPagerManager; + private WorldGuardUtil worldGuardUtil; + + protected CommandFiller cmdFiller; + + protected ZipLibrary zip; protected boolean firstenable = true; - protected static EconomyInterface economy; - private static int saveVersion = 1; - public static File dataFolder; - protected static int leaseBukkitId = -1; - protected static int rentBukkitId = -1; - protected static int healBukkitId = -1; - protected static int feedBukkitId = -1; - - protected static int DespawnMobsBukkitId = -1; - - protected static int autosaveBukkitId = -1; - protected static VersionChecker versionChecker; - protected static boolean initsuccess = false; + protected EconomyInterface economy; + private int saveVersion = 1; + public File dataFolder; + protected int leaseBukkitId = -1; + protected int rentBukkitId = -1; + protected int healBukkitId = -1; + protected int feedBukkitId = -1; + + protected int DespawnMobsBukkitId = -1; + + protected int autosaveBukkitId = -1; + protected VersionChecker versionChecker; + protected boolean initsuccess = false; public Map deleteConfirm; - public static Map UnrentConfirm = new HashMap(); - public static List resadminToggle; + public Map UnrentConfirm = new HashMap(); + public List resadminToggle; private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW" }; - private static ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); - private static Map cachedPlayerNameUUIDs = new HashMap(); - private static WorldEditPlugin wep = null; - private static WorldGuardPlugin wg = null; - private static int wepid; + private ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); + private Map cachedPlayerNameUUIDs = new HashMap(); + private WorldEditPlugin wep = null; + private WorldGuardPlugin wg = null; + private int wepid; - private static String ServerLandname = "Server_Land"; - private static String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; - private static String TempUserUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"; + private String ServerLandname = "Server_Land"; + private String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; + private String TempUserUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"; - private static ABInterface ab; - private static NMS nms; - static LWC lwc; + private ABInterface ab; + private NMS nms; + private LWC lwc; - public static HashMap rtMap = new HashMap(); - public static List teleportDelayMap = new ArrayList(); - public static HashMap teleportMap = new HashMap(); + public HashMap rtMap = new HashMap(); + public List teleportDelayMap = new ArrayList(); + public HashMap teleportMap = new HashMap(); - public static String prefix = ChatColor.GREEN + "[" + ChatColor.GOLD + "Residence" + ChatColor.GREEN + "]" + ChatColor.GRAY; + private String prefix = ChatColor.GREEN + "[" + ChatColor.GOLD + "Residence" + ChatColor.GREEN + "]" + ChatColor.GRAY; - public static boolean isSpigot() { + public boolean isSpigot() { return spigotPlatform; } - public static HashMap getTeleportMap() { + public HashMap getTeleportMap() { return teleportMap; } @@ -231,45 +231,45 @@ public HashMap getRandomTeleportMap() { } // API - private static ResidenceApi API = new ResidenceApi(); - private static MarketBuyInterface MarketBuyAPI = null; - private static MarketRentInterface MarketRentAPI = null; - private static ResidencePlayerInterface PlayerAPI = null; - private static ResidenceInterface ResidenceAPI = null; - private static ChatInterface ChatAPI = null; - - public static ResidencePlayerInterface getPlayerManagerAPI() { + private ResidenceApi API = new ResidenceApi(); + private MarketBuyInterface MarketBuyAPI = null; + private MarketRentInterface MarketRentAPI = null; + private ResidencePlayerInterface PlayerAPI = null; + private ResidenceInterface ResidenceAPI = null; + private ChatInterface ChatAPI = null; + + public ResidencePlayerInterface getPlayerManagerAPI() { if (PlayerAPI == null) PlayerAPI = PlayerManager; return PlayerAPI; } - public static ResidenceInterface getResidenceManagerAPI() { + public ResidenceInterface getResidenceManagerAPI() { if (ResidenceAPI == null) ResidenceAPI = rmanager; return ResidenceAPI; } - public static MarketRentInterface getMarketRentManagerAPI() { + public MarketRentInterface getMarketRentManagerAPI() { if (MarketRentAPI == null) MarketRentAPI = rentmanager; return MarketRentAPI; } - public static MarketBuyInterface getMarketBuyManagerAPI() { + public MarketBuyInterface getMarketBuyManagerAPI() { if (MarketBuyAPI == null) MarketBuyAPI = tmanager; return MarketBuyAPI; } - public static ChatInterface getResidenceChatAPI() { + public ChatInterface getResidenceChatAPI() { if (ChatAPI == null) ChatAPI = chatmanager; return ChatAPI; } - public static ResidenceApi getAPI() { + public ResidenceApi getAPI() { return API; } // API end @@ -278,7 +278,7 @@ public NMS getNms() { return nms; } - public static ABInterface getAB() { + public ABInterface getAB() { return ab; } @@ -308,7 +308,7 @@ public void run() { public void run() { rentmanager.checkCurrentRents(); if (cmanager.showIntervalMessages()) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - Rent Expirations checked!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Rent Expirations checked!"); } } }; @@ -317,7 +317,7 @@ public void run() { public void run() { leasemanager.doExpirations(); if (cmanager.showIntervalMessages()) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - Lease Expirations checked!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Lease Expirations checked!"); } } }; @@ -339,7 +339,7 @@ public void run() { }); } } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, Residence.prefix + " SEVERE SAVE ERROR", ex); + Logger.getLogger("Minecraft").log(Level.SEVERE, getPrefix() + " SEVERE SAVE ERROR", ex); } } }; @@ -390,7 +390,7 @@ public void onDisable() { // e.printStackTrace(); // } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Disabled!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Disabled!"); } } @@ -453,7 +453,7 @@ public void onEnable() { Plugin plugin = server.getPluginManager().getPlugin(multiworld); if (plugin != null) { if (!plugin.isEnabled()) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - Enabling multiworld plugin: " + multiworld); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Enabling multiworld plugin: " + multiworld); server.getPluginManager().enablePlugin(plugin); } } @@ -515,8 +515,8 @@ public void onEnable() { } gmanager = new PermissionManager(this); - imanager = new WorldItemManager(); - wmanager = new WorldFlagManager(); + imanager = new WorldItemManager(this); + wmanager = new WorldFlagManager(this); chatmanager = new ChatManager(); rentmanager = new RentManager(this); @@ -565,12 +565,12 @@ public void onEnable() { langconfig.load(in); helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Language file does not exist..."); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Language file does not exist..."); } if (in != null) in.close(); } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Failed to load language file: " + cmanager.getLanguage() + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Failed to load language file: " + cmanager.getLanguage() + ".yml setting to default - English"); File langFile = new File(new File(dataFolder, "Language"), "English.yml"); @@ -589,19 +589,19 @@ public void onEnable() { langconfig.load(in); helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Language file does not exist..."); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Language file does not exist..."); } if (in != null) in.close(); } economy = null; if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Scanning for economy systems..."); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Scanning for economy systems..."); if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); if (vault.economyOK()) { economy = vault; - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault using economy system: " + vault.getEconomyName()); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found Vault using economy system: " + vault.getEconomyName()); } } if (economy == null) { @@ -620,13 +620,13 @@ public void onEnable() { this.loadIConomy(); } if (economy == null) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Unable to find an economy system..."); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Unable to find an economy system..."); } } // Only fill if we need to convert player data if (getConfigManager().isUUIDConvertion()) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loading (" + Bukkit.getOfflinePlayers().length + ") player data"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading (" + Bukkit.getOfflinePlayers().length + ") player data"); for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { if (player == null) continue; @@ -636,7 +636,7 @@ public void onEnable() { getOfflinePlayerMap().put(name.toLowerCase(), player); getCachedPlayerNameUUIDs().put(player.getUniqueId(), player.getName()); } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Player data loaded: " + getOfflinePlayerMap().size()); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Player data loaded: " + getOfflinePlayerMap().size()); } else { Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { @Override @@ -679,7 +679,7 @@ public void run() { getSignUtil().LoadSigns(); if (getConfigManager().isUseResidenceFileClean()) - FileCleanUp.cleanFiles(); + (new FileCleanUp(this)).cleanFiles(); if (firstenable) { if (!this.isEnabled()) { @@ -750,7 +750,7 @@ public void run() { Plugin dynmap = Bukkit.getPluginManager().getPlugin("dynmap"); if (dynmap != null && getConfigManager().DynMapUse) { DynManager = new DynMapManager(this); - getServer().getPluginManager().registerEvents(new DynMapListeners(), this); + getServer().getPluginManager().registerEvents(new DynMapListeners(this), this); getDynManager().api = (DynmapAPI) dynmap; getDynManager().activate(); } @@ -784,7 +784,7 @@ public void run() { rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); } for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (Residence.getPermissionManager().isResidenceAdmin(player)) { + if (getPermissionManager().isResidenceAdmin(player)) { turnResAdminOn(player); } } @@ -794,7 +794,7 @@ public void run() { } catch (IOException e) { // Failed to submit the stats :-( } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Enabled! Version " + this.getDescription().getVersion() + " by Zrips"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Enabled! Version " + this.getDescription().getVersion() + " by Zrips"); initsuccess = true; PlayerManager.fillList(); @@ -802,7 +802,7 @@ public void run() { } catch (Exception ex) { initsuccess = false; getServer().getPluginManager().disablePlugin(this); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " - FAILED INITIALIZATION! DISABLED! ERROR:"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " - FAILED INITIALIZATION! DISABLED! ERROR:"); Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); Bukkit.getServer().shutdown(); } @@ -814,15 +814,15 @@ public void run() { } - public static SignUtil getSignUtil() { + public SignUtil getSignUtil() { return signmanager; } public void consoleMessage(String message) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " " + message); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " " + message); } - public static boolean validName(String name) { + public boolean validName(String name) { if (name.contains(":") || name.contains(".") || name.contains("|")) { return false; } @@ -842,14 +842,14 @@ private void setWorldEdit() { smanager = new WorldEditSelectionManager(server, this); this.wep = (WorldEditPlugin) plugin; wepid = this.getWorldEdit().getConfig().getInt("wand-item"); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found WorldEdit"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit"); } else { smanager = new SelectionManager(server, this); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " WorldEdit NOT found!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " WorldEdit NOT found!"); } } - private static void setWorldGuard() { + private void setWorldGuard() { Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); if (wgplugin != null) { try { @@ -859,12 +859,12 @@ private static void setWorldGuard() { Class.forName("com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion"); Class.forName("com.sk89q.worldguard.protection.regions.ProtectedRegion"); } catch (Exception e) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + ChatColor.RED + Bukkit.getConsoleSender().sendMessage(getPrefix() + ChatColor.RED + " Found WorldGuard, but its not supported by Residence plugin. Please update WorldGuard to latest version"); return; } wg = (WorldGuardPlugin) wgplugin; - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found WorldGuard"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldGuard"); } } @@ -872,15 +872,15 @@ public Residence getPlugin() { return this; } - public static VersionChecker getVersionChecker() { + public VersionChecker getVersionChecker() { return versionChecker; } - public static LWC getLwc() { + public LWC getLwc() { return lwc; } - public static File getDataLocation() { + public File getDataLocation() { return dataFolder; } @@ -888,15 +888,15 @@ public ShopSignUtil getShopSignUtilManager() { return ShopSignUtilManager; } - public static ResidenceSpout getSpout() { + public ResidenceSpout getSpout() { return spout; } - public static ResidenceSpoutListener getSpoutListener() { + public ResidenceSpoutListener getSpoutListener() { return slistener; } - public static CommandFiller getCommandFiller() { + public CommandFiller getCommandFiller() { if (cmdFiller == null) { cmdFiller = new CommandFiller(); cmdFiller.fillCommands(); @@ -912,19 +912,19 @@ public SelectionManager getSelectionManager() { return smanager; } - public static FlagUtil getFlagUtilManager() { + public FlagUtil getFlagUtilManager() { return FlagUtilManager; } - public static PermissionManager getPermissionManager() { + public PermissionManager getPermissionManager() { return gmanager; } - public static PermissionListManager getPermissionListManager() { + public PermissionListManager getPermissionListManager() { return pmanager; } - public static DynMapManager getDynManager() { + public DynMapManager getDynManager() { return DynManager; } @@ -936,7 +936,7 @@ public AutoSelection getAutoSelectionManager() { return AutoSelectionManager; } - public static Sorting getSortingManager() { + public Sorting getSortingManager() { return SortingManager; } @@ -948,23 +948,23 @@ public EconomyInterface getEconomyManager() { return economy; } - public static Server getServ() { + public Server getServ() { return server; } - public static LeaseManager getLeaseManager() { + public LeaseManager getLeaseManager() { return leasemanager; } - public static PlayerManager getPlayerManager() { + public PlayerManager getPlayerManager() { return PlayerManager; } - public static HelpEntry getHelpPages() { + public HelpEntry getHelpPages() { return helppages; } - public static void setConfigManager(ConfigManager cm) { + public void setConfigManager(ConfigManager cm) { cmanager = cm; } @@ -972,11 +972,11 @@ public ConfigManager getConfigManager() { return cmanager; } - public static TransactionManager getTransactionManager() { + public TransactionManager getTransactionManager() { return tmanager; } - public static WorldItemManager getItemManager() { + public WorldItemManager getItemManager() { return imanager; } @@ -988,27 +988,27 @@ public RentManager getRentManager() { return rentmanager; } - public static LocaleManager getLocaleManager() { + public LocaleManager getLocaleManager() { return LocaleManager; } - public static Language getLM() { + public Language getLM() { return NewLanguageManager; } - public static ResidencePlayerListener getPlayerListener() { + public ResidencePlayerListener getPlayerListener() { return plistener; } - public static ResidenceBlockListener getBlockListener() { + public ResidenceBlockListener getBlockListener() { return blistener; } - public static ResidenceEntityListener getEntityListener() { + public ResidenceEntityListener getEntityListener() { return elistener; } - public static ChatManager getChatManager() { + public ChatManager getChatManager() { return chatmanager; } @@ -1016,11 +1016,11 @@ public String getResidenceVersion() { return ResidenceVersion; } - public static List getAuthors() { + public List getAuthors() { return authlist; } - public static FlagPermissions getPermsByLoc(Location loc) { + public FlagPermissions getPermsByLoc(Location loc) { ClaimedResidence res = rmanager.getByLoc(loc); if (res != null) { return res.getPermissions(); @@ -1029,7 +1029,7 @@ public static FlagPermissions getPermsByLoc(Location loc) { } - public static FlagPermissions getPermsByLocForPlayer(Location loc, Player player) { + public FlagPermissions getPermsByLocForPlayer(Location loc, Player player) { ClaimedResidence res = rmanager.getByLoc(loc); if (res != null) { return res.getPermissions(); @@ -1048,12 +1048,12 @@ private void loadIConomy() { } else if (p.getDescription().getVersion().startsWith("5")) { economy = new IConomy5Adapter(); } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " UNKNOWN iConomy version!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " UNKNOWN iConomy version!"); return; } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with iConomy! Version: " + p.getDescription().getVersion()); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Successfully linked with iConomy! Version: " + p.getDescription().getVersion()); } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " iConomy NOT found!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " iConomy NOT found!"); } } @@ -1061,9 +1061,9 @@ private void loadBOSEconomy() { Plugin p = getServer().getPluginManager().getPlugin("BOSEconomy"); if (p != null) { economy = new BOSEAdapter((BOSEconomy) p); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with BOSEconomy!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Successfully linked with BOSEconomy!"); } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " BOSEconomy NOT found!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " BOSEconomy NOT found!"); } } @@ -1071,9 +1071,9 @@ private void loadEssentialsEconomy() { Plugin p = getServer().getPluginManager().getPlugin("Essentials"); if (p != null) { economy = new EssentialsEcoAdapter((Essentials) p); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with Essentials Economy!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Successfully linked with Essentials Economy!"); } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Essentials Economy NOT found!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Essentials Economy NOT found!"); } } @@ -1081,9 +1081,9 @@ private void loadRealEconomy() { Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); if (p != null) { economy = new RealShopEconomy(new RealEconomy((RealPlugin) p)); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Successfully linked with RealShop Economy!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Successfully linked with RealShop Economy!"); } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " RealShop Economy NOT found!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " RealShop Economy NOT found!"); } } @@ -1092,40 +1092,40 @@ private void loadVaultEconomy() { if (p != null) { ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); if (vault.economyOK()) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault using economy: " + vault.getEconomyName()); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found Vault using economy: " + vault.getEconomyName()); economy = vault; } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault, but Vault reported no usable economy system..."); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found Vault, but Vault reported no usable economy system..."); } } else { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Vault NOT found!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Vault NOT found!"); } } - public static boolean isResAdminOn(CommandSender sender) { + public boolean isResAdminOn(CommandSender sender) { if (sender instanceof Player) return isResAdminOn((Player) sender); return true; } - public static boolean isResAdminOn(Player player) { + public boolean isResAdminOn(Player player) { if (resadminToggle.contains(player.getName())) { return true; } return false; } - public static void turnResAdminOn(Player player) { + public void turnResAdminOn(Player player) { resadminToggle.add(player.getName()); } - public static boolean isResAdminOn(String player) { + public boolean isResAdminOn(String player) { if (resadminToggle.contains(player)) return true; return false; } - private static void saveYml() throws IOException { + private void saveYml() throws IOException { File saveFolder = new File(dataFolder, "Save"); File worldFolder = new File(saveFolder, "Worlds"); worldFolder.mkdirs(); @@ -1249,7 +1249,7 @@ protected boolean loadYml() throws Exception { loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); if (loadFile.isFile()) { time = System.currentTimeMillis(); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loading save data for world " + world.getName() + "..."); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading save data for world " + world.getName() + "..."); yml = new YMLSaveHelper(loadFile); yml.load(); @@ -1258,7 +1258,7 @@ protected boolean loadYml() throws Exception { int pass = (int) (System.currentTimeMillis() - time); String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Loaded " + world.getName() + " data. (" + PastTime + ")"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loaded " + world.getName() + " data. (" + PastTime + ")"); } } @@ -1302,7 +1302,7 @@ protected boolean loadYml() throws Exception { } for (Player one : Bukkit.getOnlinePlayers()) { - ResidencePlayer rplayer = Residence.getPlayerManager().getResidencePlayer(one); + ResidencePlayer rplayer = getPlayerManager().getResidencePlayer(one); if (rplayer != null) rplayer.recountRes(); } @@ -1545,7 +1545,7 @@ private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean } public boolean isPlayerExist(CommandSender sender, String name, boolean inform) { - if (Residence.getPlayerUUID(name) != null) + if (getPlayerUUID(name) != null) return true; if (inform) sender.sendMessage(msg(lm.Invalid_Player)); @@ -1559,10 +1559,10 @@ public boolean isPlayerExist(CommandSender sender, String name, boolean inform) } - public static UUID getPlayerUUID(String playername) { + public UUID getPlayerUUID(String playername) { // if (Residence.getConfigManager().isOfflineMode()) // return null; - Player p = Residence.getServ().getPlayer(playername); + Player p = getServ().getPlayer(playername); if (p == null) { if (getOfflinePlayerMap().containsKey(playername.toLowerCase())) return getOfflinePlayerMap().get(playername.toLowerCase()).getUniqueId(); @@ -1571,12 +1571,12 @@ public static UUID getPlayerUUID(String playername) { return null; } - public static ConcurrentHashMap getOfflinePlayerMap() { + public ConcurrentHashMap getOfflinePlayerMap() { return OfflinePlayerList; } @SuppressWarnings("deprecation") - public static OfflinePlayer getOfflinePlayer(String Name) { + public OfflinePlayer getOfflinePlayer(String Name) { if (getOfflinePlayerMap().containsKey(Name.toLowerCase())) { return getOfflinePlayerMap().get(Name.toLowerCase()); } @@ -1591,37 +1591,37 @@ public static OfflinePlayer getOfflinePlayer(String Name) { return offPlayer; } - public static String getPlayerUUIDString(String playername) { - UUID playerUUID = Residence.getPlayerUUID(playername); + public String getPlayerUUIDString(String playername) { + UUID playerUUID = getPlayerUUID(playername); if (playerUUID != null) return playerUUID.toString(); return null; } - public static String getPlayerName(String uuid) { + public String getPlayerName(String uuid) { try { - return Residence.getPlayerName(UUID.fromString(uuid)); + return getPlayerName(UUID.fromString(uuid)); } catch (IllegalArgumentException ex) { } return null; } - public static String getServerLandname() { + public String getServerLandname() { return ServerLandname; } - public static String getServerLandUUID() { + public String getServerLandUUID() { return ServerLandUUID; } - public static String getTempUserUUID() { + public String getTempUserUUID() { return TempUserUUID; } - public static String getPlayerName(UUID uuid) { - OfflinePlayer p = Residence.getServ().getPlayer(uuid); + public String getPlayerName(UUID uuid) { + OfflinePlayer p = getServ().getPlayer(uuid); if (p == null) - p = Residence.getServ().getOfflinePlayer(uuid); + p = getServ().getOfflinePlayer(uuid); if (p != null) return p.getName(); return null; @@ -1655,24 +1655,24 @@ public boolean isDisabledWorldCommand(String worldname) { // player.sendMessage(path); // } - public static String msg(String path) { - return Residence.getLM().getMessage(path); + public String msg(String path) { + return getLM().getMessage(path); } - public static void msg(CommandSender sender, String text) { + public void msg(CommandSender sender, String text) { if (sender != null && text.length() > 0) sender.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); } - public static void msg(Player player, String text) { + public void msg(Player player, String text) { if (player != null && text.length() > 0) player.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); } public void msg(CommandSender sender, lm lm, Object... variables) { if (sender != null) - if (Residence.getLM().containsKey(lm.getPath())) { - String msg = Residence.getLM().getMessage(lm, variables); + if (getLM().containsKey(lm.getPath())) { + String msg = getLM().getMessage(lm, variables); if (msg.length() > 0) sender.sendMessage(msg); } else { @@ -1682,27 +1682,27 @@ public void msg(CommandSender sender, lm lm, Object... variables) { } } - public static List msgL(lm lm) { - return Residence.getLM().getMessageList(lm); + public List msgL(lm lm) { + return getLM().getMessageList(lm); } public String msg(lm lm, Object... variables) { - return Residence.getLM().getMessage(lm, variables); + return getLM().getMessage(lm, variables); } - public static InformationPager getInfoPageManager() { + public InformationPager getInfoPageManager() { return InformationPagerManager; } - public static Map getCachedPlayerNameUUIDs() { + public Map getCachedPlayerNameUUIDs() { return cachedPlayerNameUUIDs; } - public static void addCachedPlayerNameUUIDs(UUID uuid, String name) { + public void addCachedPlayerNameUUIDs(UUID uuid, String name) { cachedPlayerNameUUIDs.put(uuid, name); } - public static void addCachedPlayerNameUUIDs(Map cachedPlayerNameUUIDs2) { + public void addCachedPlayerNameUUIDs(Map cachedPlayerNameUUIDs2) { cachedPlayerNameUUIDs.putAll(cachedPlayerNameUUIDs2); } @@ -1710,7 +1710,7 @@ public WorldEditPlugin getWorldEdit() { return wep; } - public static WorldGuardPlugin getWorldGuard() { + public WorldGuardPlugin getWorldGuard() { return wg; } @@ -1724,6 +1724,10 @@ public WorldGuardUtil getWorldGuardUtil() { return worldGuardUtil; } + public boolean hasPermission(CommandSender sender, String permision, boolean output) { + return hasPermission(sender, permision, output, null); + } + public boolean hasPermission(CommandSender sender, String permision) { return hasPermission(sender, permision, true, null); } @@ -1740,18 +1744,16 @@ public boolean hasPermission(CommandSender sender, String permision, Boolean out if (sender instanceof ConsoleCommandSender) { return true; } else if (sender instanceof Player) { - Player player = (Player) sender; - if (player.hasPermission(permision)) { + if (sender.hasPermission(permision)) return true; - } if (output) { String outMsg = getLM().getMessage(lm.General_NoPermission); if (message != null) outMsg = message; - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " {\"text\":\"\",\"extra\":[{\"text\":\"" + outMsg + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " {\"text\":\"\",\"extra\":[{\"text\":\"" + outMsg + "\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"§2" + permision + "\"}}]}"); ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); - console.sendMessage(getLM().getMessage(lm.General_NoPermission)); + console.sendMessage(ChatColor.RED + sender.getName() + " No permission -> " + permision); } } return false; @@ -1760,4 +1762,8 @@ public boolean hasPermission(CommandSender sender, String permision, Boolean out public static Residence getInstance() { return instance; } + + public String getPrefix() { + return prefix; + } } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 5abede4c1..434e940f5 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -21,7 +21,7 @@ public class ResidenceCommandListener extends Residence { public static List getAdminCommands() { if (AdminCommands.size() == 0) - AdminCommands = Residence.getCommandFiller().getCommands(false); + AdminCommands = Residence.getInstance().getCommandFiller().getCommands(false); return AdminCommands; } @@ -63,7 +63,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } catch (Exception ex) { sender.sendMessage(ChatColor.RED + "[Residence] Unable to reload the save file, exception occured!"); sender.sendMessage(ChatColor.RED + ex.getMessage()); - Logger.getLogger(this.getInstance().getClass().getName()).log(Level.SEVERE, null, ex); + Logger.getLogger(getInstance().getClass().getName()).log(Level.SEVERE, null, ex); } } else msg(sender, lm.General_NoPermission); @@ -74,7 +74,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St sendUsage(sender, command.getName()); return true; } - boolean respond = cmdClass.perform(this.getInstance(), args, false, command, sender); + boolean respond = cmdClass.perform(getInstance(), args, false, command, sender); if (!respond) sendUsage(sender, command.getName()); return true; @@ -140,7 +140,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St resadminToggle.remove(player.getName()); } } - boolean respond = cmdClass.perform(this.getInstance(), args, resadmin, command, sender); + boolean respond = cmdClass.perform(getInstance(), args, resadmin, command, sender); if (!respond) { String[] tempArray = new String[args.length + 1]; for (int i = 0; i < args.length; i++) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java index 02cb11b5e..d5ffc4a8c 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java @@ -22,7 +22,7 @@ public void onPlayerFireInteract(EntityDamageEvent event) { Entity ent = event.getEntity(); - if (!Residence.getPermsByLoc(ent.getLocation()).has(Flags.hotfloor, true)) { + if (!Residence.getInstance().getPermsByLoc(ent.getLocation()).has(Flags.hotfloor, true)) { event.setCancelled(true); return; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java index 45faf104e..a8ba21886 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java @@ -22,14 +22,14 @@ public class v1_8Events implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { Player player = event.getPlayer(); - if (Residence.isResAdminOn(player)) + if (Residence.getInstance().isResAdminOn(player)) return; Entity ent = event.getRightClicked(); if (!Residence.getInstance().getNms().isArmorStandEntity(ent.getType())) return; - FlagPermissions perms = Residence.getPermsByLocForPlayer(ent.getLocation(), player); + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); String world = player.getWorld().getName(); if (!perms.playerHas(player.getName(), world, Flags.container, perms.playerHas(player.getName(), world, Flags.use, true))) { @@ -50,7 +50,7 @@ public void onBlockExplodeEvent(BlockExplodeEvent event) { FlagPermissions world = Residence.getInstance().getWorldFlags().getPerms(loc.getWorld().getName()); List preserve = new ArrayList(); for (Block block : event.blockList()) { - FlagPermissions blockperms = Residence.getPermsByLoc(block.getLocation()); + FlagPermissions blockperms = Residence.getInstance().getPermsByLoc(block.getLocation()); if (!blockperms.has(Flags.explode, world.has(Flags.explode, true))) { preserve.add(block); } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index 314dec858..7e194a8be 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -38,7 +38,7 @@ public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { return; Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + boolean srcpvp = Residence.getInstance().getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); if (!srcpvp) event.setCancelled(true); } @@ -68,13 +68,13 @@ public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { return; Entity ent = event.getEntity(); - boolean srcpvp = Residence.getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); + boolean srcpvp = Residence.getInstance().getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); Iterator it = event.getAffectedEntities().iterator(); while (it.hasNext()) { LivingEntity target = it.next(); if (!(target instanceof Player)) continue; - Boolean tgtpvp = Residence.getPermsByLoc(target.getLocation()).has(Flags.pvp, true); + Boolean tgtpvp = Residence.getInstance().getPermsByLoc(target.getLocation()).has(Flags.pvp, true); if (!srcpvp || !tgtpvp) { event.getAffectedEntities().remove(target); event.getEntity().remove(); diff --git a/src/com/bekvon/bukkit/residence/api/ResidenceApi.java b/src/com/bekvon/bukkit/residence/api/ResidenceApi.java index 19fdf0ae1..f89e03990 100644 --- a/src/com/bekvon/bukkit/residence/api/ResidenceApi.java +++ b/src/com/bekvon/bukkit/residence/api/ResidenceApi.java @@ -1,26 +1,26 @@ -package com.bekvon.bukkit.residence.api; - -import com.bekvon.bukkit.residence.Residence; - -public class ResidenceApi { - - public static MarketBuyInterface getMarketBuyManager() { - return Residence.getMarketBuyManagerAPI(); - } - - public static MarketRentInterface getMarketRentManager() { - return Residence.getMarketRentManagerAPI(); - } - - public static ResidencePlayerInterface getPlayerManager() { - return Residence.getPlayerManagerAPI(); - } - - public static ChatInterface getChatManager() { - return Residence.getResidenceChatAPI(); - } - - public static ResidenceInterface getResidenceManager() { - return Residence.getResidenceManagerAPI(); - } -} +package com.bekvon.bukkit.residence.api; + +import com.bekvon.bukkit.residence.Residence; + +public class ResidenceApi { + + public static MarketBuyInterface getMarketBuyManager() { + return Residence.getInstance().getMarketBuyManagerAPI(); + } + + public static MarketRentInterface getMarketRentManager() { + return Residence.getInstance().getMarketRentManagerAPI(); + } + + public static ResidencePlayerInterface getPlayerManager() { + return Residence.getInstance().getPlayerManagerAPI(); + } + + public static ChatInterface getChatManager() { + return Residence.getInstance().getResidenceChatAPI(); + } + + public static ResidenceInterface getResidenceManager() { + return Residence.getInstance().getResidenceManagerAPI(); + } +} diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index 92962fc6a..8e64ce103 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -37,16 +37,16 @@ public void setChannelColor(ChatColor ChannelColor) { } public void chat(String sourcePlayer, String message) { - Server serv = Residence.getServ(); + Server serv = Residence.getInstance().getServ(); ResidenceChatEvent cevent = new ResidenceChatEvent(Residence.getInstance().getResidenceManager().getByName(channelName), serv.getPlayer(sourcePlayer), this.ChatPrefix, message, this.ChannelColor); - Residence.getServ().getPluginManager().callEvent(cevent); + Residence.getInstance().getServ().getPluginManager().callEvent(cevent); if (cevent.isCancelled()) return; for (String member : members) { Player player = serv.getPlayer(member); - Residence.msg(player, cevent.getChatprefix() + " " + Residence.getInstance().getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent + Residence.getInstance().msg(player, cevent.getChatprefix() + " " + Residence.getInstance().getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent .getChatMessage()); } Bukkit.getConsoleSender().sendMessage("ResidentialChat[" + channelName + "] - " + sourcePlayer + ": " + ChatColor.stripColor(cevent.getChatMessage())); diff --git a/src/com/bekvon/bukkit/residence/chat/ChatManager.java b/src/com/bekvon/bukkit/residence/chat/ChatManager.java index e4480ed6e..87bd8e82f 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatManager.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatManager.java @@ -13,7 +13,7 @@ public class ChatManager implements ChatInterface { protected Server server; public ChatManager() { - server = Residence.getServ(); + server = Residence.getInstance().getServ(); channelmap = new HashMap(); } diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index 4c9a02761..bd3b7b25b 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -103,24 +103,24 @@ public void getLocale(ConfigReader c, String path) { path += "SubCommands."; c.get(path + "list.Description", "List physical areas in a residence"); c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res area list [residence] ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("[residence]")); c.get(path + "listall.Description", "List coordinates and other Info for areas"); c.get(path + "listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "listall"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "listall"), Arrays.asList("[residence]")); c.get(path + "add.Description", "Add physical areas to a residence"); c.get(path + "add.Info", Arrays.asList("&eUsage: &6/res area add [residence] [areaID]", "You must first select two points first.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "add"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "add"), Arrays.asList("[residence]")); c.get(path + "remove.Description", "Remove physical areas from a residence"); c.get(path + "remove.Info", Arrays.asList("&eUsage: &6/res area remove [residence] [areaID]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "remove"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "remove"), Arrays.asList("[residence]")); c.get(path + "replace.Description", "Replace physical areas in a residence"); c.get(path + "replace.Info", Arrays.asList("&eUsage: &6/res area replace [residence] [areaID]", "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "replace"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "replace"), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 1894eb309..ff8e6a197 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -61,6 +61,6 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", "You must have the +bank flag.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw", "[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw", "[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index 5af859383..9167a6b5c 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -47,6 +47,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Check flag state for you"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res check [residence] [flag] (playername)")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[flag]" ,"[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[flag]" ,"[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/clearflags.java b/src/com/bekvon/bukkit/residence/commands/clearflags.java index d7e360698..27dd27a12 100644 --- a/src/com/bekvon/bukkit/residence/commands/clearflags.java +++ b/src/com/bekvon/bukkit/residence/commands/clearflags.java @@ -41,6 +41,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Remove all flags from residence"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res clearflags ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index f619baa38..9a6b305e1 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -89,7 +89,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Info", Arrays.asList("&eUsage: &6/res command ", "Shows list, adds or removes allowed or disabled commands in residence", "Use _ to include command with multiple variables")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%allow%%block%%list", + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%allow%%block%%list", "allow%%block%%list")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index edb1fe0d3..9dc44bafd 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -51,6 +51,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Set compass ponter to residence location"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res compass ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 2ef5e643e..da38acf95 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -98,7 +98,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Contracts residence in direction you looking"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res contract (residence) [amount]", "Contracts residence in direction you looking.", "Residence name is optional")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1", "1")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1", "1")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 392382da9..c3d1c26af 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -103,7 +103,7 @@ else if (args.length == 3) public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Expands residence in direction you looking"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1", "1")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1", "1")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index c2a00d1af..5a3c614e3 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -54,9 +54,9 @@ public void getLocale(ConfigReader c, String path) { c.get(pt + ".Info", Arrays.asList("&eUsage: &6/res " + forSet + " " + fl.getName() + " true/false/remove")); } - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "pset"), Arrays.asList("[residence]", "[flag]", + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "pset"), Arrays.asList("[residence]", "[flag]", "[true%%false%%remove]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]", "[flag]", + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]", "[flag]", "[true%%false%%remove]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index 06c775d67..024135607 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -32,6 +32,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Give residence to player."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res give [player]", "Gives your owned residence to target player")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/gset.java b/src/com/bekvon/bukkit/residence/commands/gset.java index b7911cde4..e9773b6f0 100644 --- a/src/com/bekvon/bukkit/residence/commands/gset.java +++ b/src/com/bekvon/bukkit/residence/commands/gset.java @@ -46,6 +46,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Set flags on a specific group for a Residence."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index cd7f9dca0..c4f801518 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -39,6 +39,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Show info on a residence."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 6cfaeeb7e..415a8a413 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -36,7 +36,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (!group.hasKickAccess() && !resadmin) { @@ -68,6 +68,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Kicks player from residence."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res kick ", "You must be the owner or an admin to do this.", "Player should be online.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index eb2dcd06e..50d5c61da 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -112,25 +112,25 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Manage residence leases"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("renew%%cost", "[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("renew%%cost", "[residence]")); // Sub commands path += "SubCommands."; c.get(path + "set.Description", "Set the lease time"); c.get(path + "set.Info", Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]")); c.get(path + "renew.Description", "Renew the lease time"); c.get(path + "renew.Info", Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "renew"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "renew"), Arrays.asList("[residence]")); c.get(path + "expires.Description", "Lease end date"); c.get(path + "expires.Info", Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "expires"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "expires"), Arrays.asList("[residence]")); c.get(path + "cost.Description", "Shows renew cost"); c.get(path + "cost.Info", Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "cost"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "cost"), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 30a144cfb..4cd859ffb 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -46,6 +46,6 @@ public void getLocale(ConfigReader c, String path) { // Main command c.get(path + "Description", "Show your limits."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res limits (playerName)", "Shows the limitations you have on creating and managing residences.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 7e9169ce2..c62866d73 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -53,6 +53,6 @@ public void getLocale(ConfigReader c, String path) { "Lists all the residences a player owns (except hidden ones).", "If listing your own residences, shows hidden ones as well.", "To list everyones residences, use /res listall.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]", "[worldname]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]", "[worldname]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index 7d58d7987..2509c417e 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -52,6 +52,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "List All Residences"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res listall <-a>", "Lists all residences")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/listhidden.java b/src/com/bekvon/bukkit/residence/commands/listhidden.java index 9ff6ca070..6d5c697a3 100644 --- a/src/com/bekvon/bukkit/residence/commands/listhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listhidden.java @@ -48,6 +48,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "List Hidden Residences"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res listhidden ", "Lists hidden residences for a player.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java index e203be290..adf3b166b 100644 --- a/src/com/bekvon/bukkit/residence/commands/lset.java +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -85,7 +85,7 @@ public void getLocale(ConfigReader c, String path) { "&eUsage: &6/res lset Info", "Blacklisting a material prevents it from being placed in the residence.", "Ignorelist causes a specific material to not be protected by Residence.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%blacklist%%ignorelist", "blacklist%%ignorelist%%[material]", "[material]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 76baa41c3..a9d21b913 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -421,11 +421,11 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Info.Description", "Get economy Info on residence"); c.get(path + "Info.Info", Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "Info"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "Info"), Arrays.asList("[residence]")); c.get(path + "list.Description", "Lists rentable and for sale residences."); c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res market list [rent/sell]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("rent%%sell")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("rent%%sell")); c.get(path + "list.SubCommands.rent.Description", "Lists rentable residences."); c.get(path + "list.SubCommands.rent.Info", Arrays.asList("&eUsage: &6/res market list rent")); @@ -436,24 +436,24 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "sell.Description", "Sell a residence"); c.get(path + "sell.Info", Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", "Another player can buy the residence with /res market buy")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sell"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sell"), Arrays.asList("[residence]")); c.get(path + "sign.Description", "Set market sign"); c.get(path + "sign.Info", Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sign"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sign"), Arrays.asList("[residence]")); c.get(path + "buy.Description", "Buy a residence"); c.get(path + "buy.Info", Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "buy"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "buy"), Arrays.asList("[residence]")); c.get(path + "unsell.Description", "Stops selling a residence"); c.get(path + "unsell.Info", Arrays.asList("&eUsage: &6/res market unsell [residence]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "unsell"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "unsell"), Arrays.asList("[residence]")); c.get(path + "rent.Description", "ent a residence"); c.get(path + "rent.Info", Arrays.asList("&eUsage: &6/res market rent [residence] ", "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rent"), Arrays.asList("[cresidence]", "true%%false")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rent"), Arrays.asList("[cresidence]", "true%%false")); c.get(path + "rentable.Description", "Make a residence rentable."); c.get(path + "rentable.Info", Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", @@ -461,16 +461,16 @@ public void getLocale(ConfigReader c, String path) { "If is true, the residence will be able to be rented again before rent expires.", "If is true, the residence will stay in market after last renter will be removed.", "If is true, money for rent will be automaticaly taken from players balance if he chosen that option when renting")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rentable"), Arrays.asList("[residence]", "1000", "7", "true", "true", + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rentable"), Arrays.asList("[residence]", "1000", "7", "true", "true", "true")); c.get(path + "autopay.Description", "Sets residence AutoPay to given value"); c.get(path + "autopay.Info", Arrays.asList("&eUsage: &6/res market autopay [true/false]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "autopay"), Arrays.asList("[residence]%%true%%false", "true%%false")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "autopay"), Arrays.asList("[residence]%%true%%false", "true%%false")); c.get(path + "payrent.Description", "Pays rent for defined residence"); c.get(path + "payrent.Info", Arrays.asList("&eUsage: &6/res market payrent ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "payrent"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "payrent"), Arrays.asList("[residence]")); c.get(path + "confirm.Description", "Confirms residence unrent/release action"); c.get(path + "confirm.Info", Arrays.asList("&eUsage: &6/res market confirm")); @@ -479,7 +479,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "release.Info", Arrays.asList("&eUsage: &6/res market release [residence]", "If you are the renter, this command releases the rent on the house for you.", "If you are the owner, this command makes the residence not for rent anymore.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "release"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "release"), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index a861f5649..1fc1f4913 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -38,6 +38,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Check if material exists by its id"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res material [material]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[materialId]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[materialId]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 220bbd915..f3f74ae75 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -105,6 +105,6 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Manage residence enter / leave messages"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%enter%%leave", "enter%%leave")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%enter%%leave", "enter%%leave")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/mirror.java b/src/com/bekvon/bukkit/residence/commands/mirror.java index 9b29d8eea..668223183 100644 --- a/src/com/bekvon/bukkit/residence/commands/mirror.java +++ b/src/com/bekvon/bukkit/residence/commands/mirror.java @@ -32,6 +32,6 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Mirrors Flags"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res mirror [Source Residence] [Target Residence]", "Mirrors flags from one residence to another. You must be owner of both or a admin to do this.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index 3f97243b1..5e36d4362 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -44,6 +44,6 @@ public void getLocale(ConfigReader c, String path) { // Main command c.get(path + "Description", "Add player to residence."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res padd [player]", "Adds essential flags for player")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index bc85c3925..1a5a04edf 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -41,7 +41,7 @@ public void getLocale(ConfigReader c, String path) { // Main command c.get(path + "Description", "Remove player from residence."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res pdel [player]", "Removes essential flags from player")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 204b0e3ab..8c09c6344 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -103,7 +103,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman flag.setTargetPlayer(targetPlayer); flag.recalculatePlayer(res); player.closeInventory(); - Residence.getPlayerListener().getGUImap().put(player.getName(), flag); + plugin.getPlayerListener().getGUImap().put(player.getName(), flag); player.openInventory(flag.getInventory()); return true; @@ -116,7 +116,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Set flags on a specific player for a Residence."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]%%[flag]", + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]%%[flag]", "[flag]%%true%%false%%remove", "true%%false%%remove")); } diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index be6da75e8..f005cef84 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -189,7 +189,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Joins current or defined residence chat channel"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res rc (residence)", "Join residence chat channel.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); path += "SubCommands."; c.get(path + "leave.Description", "Leaves current residence chat channel"); @@ -203,6 +203,6 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "kick.Description", "Kicks player from channel"); c.get(path + "kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", "Kicks player from channel")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "kick"), Arrays.asList("[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "kick"), Arrays.asList("[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index a2e79ec49..c912376cf 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -61,9 +61,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } plugin.helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); } else { - System.out.println(plugin.prefix + " Language file does not exist..."); + System.out.println(plugin.getPrefix() + " Language file does not exist..."); } - sender.sendMessage(plugin.prefix + " Reloaded language file."); + sender.sendMessage(plugin.getPrefix() + " Reloaded language file."); if (in != null) try { in.close(); @@ -73,20 +73,20 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } else if (args[1].equalsIgnoreCase("config")) { plugin.getConfigManager().UpdateConfigFile(); - sender.sendMessage(plugin.prefix + " Reloaded config file."); + sender.sendMessage(plugin.getPrefix() + " Reloaded config file."); return true; } else if (args[1].equalsIgnoreCase("groups")) { plugin.getConfigManager().loadGroups(); plugin.gmanager = new PermissionManager(plugin); - plugin.wmanager = new WorldFlagManager(); - sender.sendMessage(plugin.prefix + " Reloaded groups file."); + plugin.wmanager = new WorldFlagManager(plugin); + sender.sendMessage(plugin.getPrefix() + " Reloaded groups file."); return true; } else if (args[1].equalsIgnoreCase("flags")) { plugin.getConfigManager().loadFlags(); plugin.gmanager = new PermissionManager(plugin); - plugin.imanager = new WorldItemManager(); - plugin.wmanager = new WorldFlagManager(); - sender.sendMessage(plugin.prefix + " Reloaded flags file."); + plugin.imanager = new WorldItemManager(plugin); + plugin.wmanager = new WorldFlagManager(plugin); + sender.sendMessage(plugin.getPrefix() + " Reloaded flags file."); return true; } return false; @@ -96,6 +96,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "reload lanf or config files"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res reload [config/lang/groups/flags]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("config%%lang%%groups%%flags")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("config%%lang%%groups%%flags")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 084d9a63c..22ac2644e 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -97,6 +97,6 @@ public void getLocale(ConfigReader c, String path) { // Main command c.get(path + "Description", "Remove residences."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res remove ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/removeall.java b/src/com/bekvon/bukkit/residence/commands/removeall.java index e71e324b3..9711be86d 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeall.java +++ b/src/com/bekvon/bukkit/residence/commands/removeall.java @@ -35,7 +35,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Remove all residences owned by a player."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeall [owner]", "Removes all residences owned by a specific player.'", "Requires /resadmin if you use it on anyone besides yourself.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index 55e022c8f..966fcd812 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -33,6 +33,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Removes all residences from particular world"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeworld [worldName]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/rename.java b/src/com/bekvon/bukkit/residence/commands/rename.java index f6312b8a2..3c8e96f42 100644 --- a/src/com/bekvon/bukkit/residence/commands/rename.java +++ b/src/com/bekvon/bukkit/residence/commands/rename.java @@ -32,6 +32,6 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Renames a residence."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", "The name must not already be taken by another residence.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/renamearea.java b/src/com/bekvon/bukkit/residence/commands/renamearea.java index 3661b075a..cc21a6691 100644 --- a/src/com/bekvon/bukkit/residence/commands/renamearea.java +++ b/src/com/bekvon/bukkit/residence/commands/renamearea.java @@ -37,6 +37,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Rename area name for residence"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeworld [residence] [oldAreaName] [newAreaName]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/resadmin.java b/src/com/bekvon/bukkit/residence/commands/resadmin.java index e4cdf3fd8..073c9553f 100644 --- a/src/com/bekvon/bukkit/residence/commands/resadmin.java +++ b/src/com/bekvon/bukkit/residence/commands/resadmin.java @@ -37,6 +37,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Enabled or disable residence admin"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res resadmin [on/off]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("on%%off")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("on%%off")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/resbank.java b/src/com/bekvon/bukkit/residence/commands/resbank.java index 4e9d4a415..04d94cd5e 100644 --- a/src/com/bekvon/bukkit/residence/commands/resbank.java +++ b/src/com/bekvon/bukkit/residence/commands/resbank.java @@ -62,6 +62,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Deposit or widraw money from residence bank"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res resbank [deposit/withdraw] [amount]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw","1")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw","1")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index e7c5406a5..7738e78a9 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -35,6 +35,6 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Reset residence to default flags."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res reset ", "Resets the flags on a residence to their default. You must be the owner or an admin to do this.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 82f2d387e..1b12527ff 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -111,6 +111,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Teleports to random location in world"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res rt (worldname) (playerName)", "Teleports you to random location in defined world.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]", "[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 17b80da1a..4aa0e0f34 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -194,7 +194,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "auto.Description", "Turns on auto selection tool"); c.get(path + "auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "auto"), Arrays.asList("[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "auto"), Arrays.asList("[playername]")); c.get(path + "cost.Description", "Display selection cost"); c.get(path + "cost.Info", Arrays.asList("&eUsage: &6/res select cost")); @@ -219,7 +219,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "residence.Description", "Select a existing area in a residence."); c.get(path + "residence.Info", Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "residence"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "residence"), Arrays.asList("[residence]")); c.get(path + "worldedit.Description", "Set selection using the current WorldEdit selection."); c.get(path + "worldedit.Info", Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection.")); diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java index 7e8f96113..c6965d06c 100644 --- a/src/com/bekvon/bukkit/residence/commands/server.java +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -46,6 +46,6 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Make land server owned."); c.get(path + "Info", Arrays.asList("&eUsage: &6/resadmin server [residence]", "Make a residence server owned.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 9ddfc0a31..f5ea19948 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -78,7 +78,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Set general flags on a Residence"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res set [flag] [true/false/remove]", "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[flag]", "[flag]%%true%%false%%remove", + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[flag]", "[flag]%%true%%false%%remove", "true%%false%%remove")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/setmain.java b/src/com/bekvon/bukkit/residence/commands/setmain.java index d6186ed54..74e1c74ce 100644 --- a/src/com/bekvon/bukkit/residence/commands/setmain.java +++ b/src/com/bekvon/bukkit/residence/commands/setmain.java @@ -60,6 +60,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Sets defined residence as main to show up in chat as prefix"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res setmain (residence)", "Set defined residence as main.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index 9143a66ed..401530325 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -49,7 +49,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Change owner of a residence."); c.get(path + "Info", Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 3b9538b58..9371e319c 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -468,19 +468,19 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "vote.Description", "Vote for residence shop"); c.get(path + "vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", "Votes for current or defined residence")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "vote"), Arrays.asList("[residence]", "10")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "vote"), Arrays.asList("[residence]", "10")); c.get(path + "like.Description", "Give like for residence shop"); c.get(path + "like.Info", Arrays.asList("&eUsage: &6/res shop like ", "Gives like for residence shop")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "like"), Arrays.asList("[residenceshop]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "like"), Arrays.asList("[residenceshop]")); c.get(path + "votes.Description", "Shows res shop votes"); c.get(path + "votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", "Shows full vote list of current or defined residence shop")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "votes"), Arrays.asList("[residenceshop]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "votes"), Arrays.asList("[residenceshop]")); c.get(path + "likes.Description", "Shows res shop likes"); c.get(path + "likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", "Shows full like list of current or defined residence shop")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "likes"), Arrays.asList("[residenceshop]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "likes"), Arrays.asList("[residenceshop]")); c.get(path + "setdesc.Description", "Sets residence shop description"); c.get(path + "setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n")); @@ -488,7 +488,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "createboard.Description", "Create res shop board"); c.get(path + "createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", "Creates res shop board from selected area. Place - position from which to start filling board")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "createboard"), Arrays.asList("1")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "createboard"), Arrays.asList("1")); c.get(path + "deleteboard.Description", "Deletes res shop board"); c.get(path + "deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", "Deletes res shop board bi right clicking on one of signs")); diff --git a/src/com/bekvon/bukkit/residence/commands/show.java b/src/com/bekvon/bukkit/residence/commands/show.java index dce1ecfab..270a7fd96 100644 --- a/src/com/bekvon/bukkit/residence/commands/show.java +++ b/src/com/bekvon/bukkit/residence/commands/show.java @@ -48,6 +48,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Show residence boundaries"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res show ")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java index 552e6d834..d708b6a7d 100644 --- a/src/com/bekvon/bukkit/residence/commands/sublist.java +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -50,7 +50,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "List Residence Subzones"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res sublist ", "List subzones within a residence.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index ef674c803..2b490e8f8 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -64,7 +64,7 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Create subzones in residences."); c.get(path + "Info", Arrays.asList("&eUsage: &6/res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index 764458ed8..eac58d854 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -40,6 +40,6 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Teleport to a residence"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", "Your permission group must also be allowed to teleport by the server admin.")); - Residence.getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/version.java b/src/com/bekvon/bukkit/residence/commands/version.java index a3afed688..2a36d3ee7 100644 --- a/src/com/bekvon/bukkit/residence/commands/version.java +++ b/src/com/bekvon/bukkit/residence/commands/version.java @@ -21,7 +21,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); sender.sendMessage(ChatColor.GREEN + "Currently maintained by: " + ChatColor.YELLOW + "Zrips"); String names = null; - for (String auth : Residence.getAuthors()) { + for (String auth : plugin.getAuthors()) { if (names == null) names = auth; else diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index 3debeb99e..dc8a0e170 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -10,7 +10,6 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class PlayerGroup { @@ -50,12 +49,12 @@ public void updateGroup(String world, boolean force) { this.lastCheck = System.currentTimeMillis(); List posibleGroups = new ArrayList(); String group; - if (Residence.getPermissionManager().getPlayersGroups().containsKey(playerName.toLowerCase())) { - group = Residence.getPermissionManager().getPlayersGroups().get(playerName.toLowerCase()); + if (Residence.getInstance().getPermissionManager().getPlayersGroups().containsKey(playerName.toLowerCase())) { + group = Residence.getInstance().getPermissionManager().getPlayersGroups().get(playerName.toLowerCase()); if (group != null) { group = group.toLowerCase(); - if (group != null && Residence.getPermissionManager().getGroups().containsKey(group)) { - PermissionGroup g = Residence.getPermissionManager().getGroups().get(group); + if (group != null && Residence.getInstance().getPermissionManager().getGroups().containsKey(group)) { + PermissionGroup g = Residence.getInstance().getPermissionManager().getGroups().get(group); posibleGroups.add(g); this.groups.put(world, group); } @@ -64,9 +63,9 @@ public void updateGroup(String world, boolean force) { posibleGroups.add(getPermissionGroup()); - group = Residence.getPermissionManager().getPermissionsGroup(playerName, world); + group = Residence.getInstance().getPermissionManager().getPermissionsGroup(playerName, world); - PermissionGroup g = Residence.getPermissionManager().getGroupByName(group); + PermissionGroup g = Residence.getInstance().getPermissionManager().getGroupByName(group); if (g != null) posibleGroups.add(g); @@ -85,7 +84,7 @@ public void updateGroup(String world, boolean force) { finalGroup = posibleGroups.get(i); } - if (finalGroup == null || !Residence.getPermissionManager().getGroups().containsValue(finalGroup)) { + if (finalGroup == null || !Residence.getInstance().getPermissionManager().getGroups().containsValue(finalGroup)) { this.groups.put(world, Residence.getInstance().getConfigManager().getDefaultGroup().toLowerCase()); } else { this.groups.put(world, finalGroup.getGroupName()); @@ -95,13 +94,13 @@ public void updateGroup(String world, boolean force) { private PermissionGroup getPermissionGroup() { if (this.player == null) this.player = Bukkit.getPlayer(playerName); - PermissionGroup group = Residence.getPermissionManager().getGroupByName(Residence.getInstance().getConfigManager().getDefaultGroup()); - for (Entry one : Residence.getPermissionManager().getGroups().entrySet()) { + PermissionGroup group = Residence.getInstance().getPermissionManager().getGroupByName(Residence.getInstance().getConfigManager().getDefaultGroup()); + for (Entry one : Residence.getInstance().getPermissionManager().getGroups().entrySet()) { if (player != null) { if (this.player.hasPermission("residence.group." + one.getKey())) group = one.getValue(); } else { - OfflinePlayer offlineP = Residence.getOfflinePlayer(playerName); + OfflinePlayer offlineP = Residence.getInstance().getOfflinePlayer(playerName); if (offlineP != null) if (ResidenceVaultAdapter.hasPermission(offlineP, "residence.group." + one.getKey(), Residence.getInstance().getConfigManager().getDefaultWorld())) group = one.getValue(); diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 49ad961b2..30f1d47cf 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -37,8 +37,8 @@ public class ResidencePlayer { public ResidencePlayer(Player player) { if (player == null) return; - Residence.getOfflinePlayerMap().put(player.getName(), player); - Residence.addCachedPlayerNameUUIDs(player.getUniqueId(), player.getName()); + Residence.getInstance().getOfflinePlayerMap().put(player.getName(), player); + Residence.getInstance().addCachedPlayerNameUUIDs(player.getUniqueId(), player.getName()); this.updatePlayer(player); this.RecalculatePermissions(); } @@ -170,7 +170,7 @@ public int getMaxSubzoneDepth() { } public int getMaxRes() { - Residence.getPermissionManager().updateGroupNameForPlayer(this.userName, this.player != null && this.player.isOnline() ? this.player.getPlayer().getLocation() + Residence.getInstance().getPermissionManager().updateGroupNameForPlayer(this.userName, this.player != null && this.player.isOnline() ? this.player.getPlayer().getLocation() .getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), true); recountMaxRes(); PermissionGroup g = getGroup(); @@ -185,8 +185,8 @@ public PermissionGroup getGroup() { } public PermissionGroup getGroup(String world) { - String gp = Residence.getPermissionManager().getGroupNameByPlayer(this.userName, world); - this.group = Residence.getPermissionManager().getGroupByName(gp); + String gp = Residence.getInstance().getPermissionManager().getGroupNameByPlayer(this.userName, world); + this.group = Residence.getInstance().getPermissionManager().getGroupByName(gp); return this.group; } @@ -224,7 +224,7 @@ private void updatePlayer() { return; } if (this.player == null && ofPlayer == null) - ofPlayer = Residence.getOfflinePlayer(userName); + ofPlayer = Residence.getInstance().getOfflinePlayer(userName); if (ofPlayer != null) { this.userName = ofPlayer.getName(); this.uuid = ofPlayer.getUniqueId(); diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java index 2fff87448..363fc3bea 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java @@ -1,65 +1,71 @@ -package com.bekvon.bukkit.residence.dynmap; - -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; -import com.bekvon.bukkit.residence.event.ResidenceAreaDeleteEvent; -import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; -import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; -import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; -import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; -import com.bekvon.bukkit.residence.event.ResidenceRentEvent; -import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; -import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; - -public class DynMapListeners implements Listener { - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceAreaAdd(ResidenceAreaAddEvent event) { - Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceAreaDelete(ResidenceAreaDeleteEvent event) { - Residence.getDynManager().fireUpdateRemove(event.getResidence(), event.getResidence().getSubzoneDeep()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceSubZoneCreate(ResidenceSubzoneCreationEvent event) { - Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceFlagChange(ResidenceFlagChangeEvent event) { - Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceDelete(ResidenceDeleteEvent event) { - Residence.getDynManager().fireUpdateRemove(event.getResidence(), event.getResidence().getSubzoneDeep()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceOwnerChange(ResidenceOwnerChangeEvent event) { - Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceRename(ResidenceRenameEvent event) { - Residence.getDynManager().handleResidenceRemove(event.getOldResidenceName(), event.getResidence(), event.getResidence().getSubzoneDeep()); - Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceRent(ResidenceRentEvent event) { - Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onResidenceSizeChange(ResidenceSizeChangeEvent event) { - Residence.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); - } -} +package com.bekvon.bukkit.residence.dynmap; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; +import com.bekvon.bukkit.residence.event.ResidenceAreaDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; +import com.bekvon.bukkit.residence.event.ResidenceRentEvent; +import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; + +public class DynMapListeners implements Listener { + + private Residence plugin; + + public DynMapListeners(Residence plugin){ + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceAreaAdd(ResidenceAreaAddEvent event) { + plugin.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceAreaDelete(ResidenceAreaDeleteEvent event) { + plugin.getDynManager().fireUpdateRemove(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceSubZoneCreate(ResidenceSubzoneCreationEvent event) { + plugin.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceFlagChange(ResidenceFlagChangeEvent event) { + plugin.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceDelete(ResidenceDeleteEvent event) { + plugin.getDynManager().fireUpdateRemove(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceOwnerChange(ResidenceOwnerChangeEvent event) { + plugin.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceRename(ResidenceRenameEvent event) { + plugin.getDynManager().handleResidenceRemove(event.getOldResidenceName(), event.getResidence(), event.getResidence().getSubzoneDeep()); + plugin.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceRent(ResidenceRentEvent event) { + plugin.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceSizeChange(ResidenceSizeChangeEvent event) { + plugin.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java index f67fe7fea..09513b9a4 100644 --- a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java @@ -10,7 +10,7 @@ public class BOSEAdapter implements EconomyInterface { public BOSEAdapter(BOSEconomy p) { plugin = p; - String serverland = Residence.getServerLandname(); + String serverland = Residence.getInstance().getServerLandname(); if (!plugin.playerRegistered(serverland, false)) { plugin.registerPlayer(serverland); } diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index 01c9ca469..0959bc49a 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -12,7 +12,7 @@ public class EssentialsEcoAdapter implements EconomyInterface { public EssentialsEcoAdapter(Essentials p) { plugin = p; - String serverland = Residence.getServerLandname(); + String serverland = Residence.getInstance().getServerLandname(); if (!Economy.playerExists(serverland)) { Economy.createNPC(serverland); } diff --git a/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java b/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java index 1356dd4b7..4e94c4b67 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidencePlayerEvent.java @@ -22,7 +22,7 @@ public boolean isPlayer() { @Override public boolean isAdmin() { if (isPlayer()) { - return Residence.getPermissionManager().isResidenceAdmin(p); + return Residence.getInstance().getPermissionManager().isResidenceAdmin(p); } return true; } diff --git a/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java b/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java index 184c413c0..0574d4c51 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidencePlayerFlagEvent.java @@ -20,7 +20,7 @@ public boolean isPlayer() { @Override public boolean isAdmin() { if (isPlayer()) { - return Residence.getPermissionManager().isResidenceAdmin(p); + return Residence.getInstance().getPermissionManager().isResidenceAdmin(p); } return true; } diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index a6cfad858..1f5503335 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -124,9 +124,9 @@ public void recalculateInv() { } private void fillFlagDescriptions() { - Set list = Residence.getLM().getKeyList("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands"); + Set list = Residence.getInstance().getLM().getKeyList("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands"); for (String onelist : list) { - String onelisttemp = Residence.msg("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + onelist + ".Description"); + String onelisttemp = Residence.getInstance().msg("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + onelist + ".Description"); List lore = new ArrayList(); int i = 0; String sentence = ""; @@ -150,7 +150,7 @@ public void recalculateResidence(ClaimedResidence res) { List flags = res.getPermissions().getPosibleFlags(player, true, this.admin); Map resFlags = new HashMap(); Map TempPermMap = new LinkedHashMap(); - Map globalFlags = Residence.getPermissionManager().getAllFlags().getFlags(); + Map globalFlags = Residence.getInstance().getPermissionManager().getAllFlags().getFlags(); for (Entry one : res.getPermissions().getFlags().entrySet()) { if (flags.contains(one.getKey())) @@ -183,9 +183,9 @@ public void recalculateResidence(ClaimedResidence res) { if (targetPlayer == null) TempPermMap.remove("admin"); - TempPermMap = Residence.getSortingManager().sortByKeyASC(TempPermMap); + TempPermMap = Residence.getInstance().getSortingManager().sortByKeyASC(TempPermMap); - FlagData flagData = Residence.getFlagUtilManager().getFlagData(); + FlagData flagData = Residence.getInstance().getFlagUtilManager().getFlagData(); pageCount = (int) Math.ceil((double) TempPermMap.size() / (double) 45); @@ -248,7 +248,7 @@ public void recalculateResidence(ClaimedResidence res) { if (description.containsKey(one.getKey())) lore.addAll(description.get(one.getKey())); - lore.addAll(Residence.msgL(lm.Gui_Actions)); + lore.addAll(Residence.getInstance().msgL(lm.Gui_Actions)); MiscInfoMeta.setLore(lore); @@ -332,9 +332,9 @@ public void recalculatePlayer(ClaimedResidence res) { Inventory GuiInv = Bukkit.createInventory(null, 54, title); int i = 0; - TempPermMap = (LinkedHashMap) Residence.getSortingManager().sortByKeyASC(TempPermMap); + TempPermMap = (LinkedHashMap) Residence.getInstance().getSortingManager().sortByKeyASC(TempPermMap); - FlagData flagData = Residence.getFlagUtilManager().getFlagData(); + FlagData flagData = Residence.getInstance().getFlagUtilManager().getFlagData(); pageCount = (int) Math.ceil((double) TempPermMap.size() / (double) 45); @@ -397,7 +397,7 @@ public void recalculatePlayer(ClaimedResidence res) { if (description.containsKey(one.getKey())) lore.addAll(description.get(one.getKey())); - lore.addAll(Residence.msgL(lm.Gui_Actions)); + lore.addAll(Residence.getInstance().msgL(lm.Gui_Actions)); MiscInfoMeta.setLore(lore); diff --git a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java index 0af80f09e..0ba733e57 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java @@ -25,7 +25,7 @@ private ResidenceItemList(Residence plugin) { public void playerListChange(Player player, Material mat, boolean resadmin) { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (resadmin || (res.getPermissions().hasResidencePermission(player, true) && group.itemListAccess())) { if (super.toggle(mat)) diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java index 350eaf71f..62ff0d5ac 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java @@ -12,8 +12,10 @@ public class WorldItemManager { protected List lists; + private Residence plugin; - public WorldItemManager() { + public WorldItemManager(Residence plugin) { + this.plugin = plugin; lists = new ArrayList(); this.readLists(); } @@ -37,7 +39,7 @@ public boolean isIgnored(Material mat, String group, String world) { } private void readLists() { - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "flags.yml")); + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); Set keys = flags.getConfigurationSection("ItemList").getKeys(false); if (keys != null) { for (String key : keys) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 0755e3726..58a7f2c48 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -5,8 +5,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 17d4d2843..ba270271f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -8,8 +8,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 82deb2e03..1350bf01d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -77,7 +77,7 @@ public class ResidencePlayerListener implements Listener { protected boolean chatenabled; protected List playerToggleChat = new ArrayList(); - public static Map GUI = new HashMap(); + public Map GUI = new HashMap(); private Residence plugin; @@ -1765,7 +1765,7 @@ public void run() { plugin.getServ().getPluginManager().callEvent(chgEvent); if (!(ResOld != null && res == ResOld.getParent())) { - if (plugin.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (plugin.getRentManager().isForRent(areaname) || Residence + if (plugin.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (plugin.getRentManager().isForRent(areaname) || plugin .getTransactionManager().isForSale(areaname))) { if (plugin.getRentManager().isForRent(areaname) && !plugin.getRentManager().isRented(areaname)) { RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); @@ -1798,6 +1798,7 @@ public String insertMessages(Player player, String areaname, ClaimedResidence re return message; } + @SuppressWarnings("deprecation") public void doHeals() { try { for (Player player : Bukkit.getServer().getOnlinePlayers()) { diff --git a/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java b/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java index 801323174..9d3583f55 100644 --- a/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java +++ b/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java @@ -20,7 +20,7 @@ public String getPlayerGroup(Player player) { @Override public String getPlayerGroup(String player, String world) { String[] groups = ApiLayer.getGroups(world, CalculableType.USER, player); - PermissionManager pmanager = Residence.getPermissionManager(); + PermissionManager pmanager = Residence.getInstance().getPermissionManager(); for (String group : groups) { if (pmanager.hasGroup(group)) { return group.toLowerCase(); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 07c000c66..a915deb0e 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -413,15 +413,15 @@ public boolean itemListAccess() { public void printLimits(CommandSender player, OfflinePlayer target, boolean resadmin) { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(target.getName()); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(target.getName()); PermissionGroup group = rPlayer.getGroup(); Residence.getInstance().msg(player, lm.General_Separator); - Residence.getInstance().msg(player, lm.Limits_PGroup, Residence.getPermissionManager().getPermissionsGroup(target.getName(), + Residence.getInstance().msg(player, lm.Limits_PGroup, Residence.getInstance().getPermissionManager().getPermissionsGroup(target.getName(), target.isOnline() ? Bukkit.getPlayer(target.getName()).getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld())); Residence.getInstance().msg(player, lm.Limits_RGroup, group.getGroupName()); if (target.isOnline() && resadmin) - Residence.getInstance().msg(player, lm.Limits_Admin, Residence.getPermissionManager().isResidenceAdmin(player)); + Residence.getInstance().msg(player, lm.Limits_Admin, Residence.getInstance().getPermissionManager().isResidenceAdmin(player)); Residence.getInstance().msg(player, lm.Limits_CanCreate, group.canCreateResidences()); Residence.getInstance().msg(player, lm.Limits_MaxRes, rPlayer.getMaxRes()); Residence.getInstance().msg(player, lm.Limits_NumberOwn, rPlayer.getResAmount()); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 231daeaa8..52c617db3 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -148,48 +148,48 @@ public boolean isResidenceAdmin(CommandSender sender) { } private void checkPermissions() { - Server server = Residence.getServ(); + Server server = plugin.getServ(); Plugin p = server.getPluginManager().getPlugin("Vault"); if (p != null) { ResidenceVaultAdapter vault = new ResidenceVaultAdapter(server); if (vault.permissionsOK()) { perms = vault; - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault using permissions plugin:" + vault.getPermissionsName()); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Vault using permissions plugin:" + vault.getPermissionsName()); return; } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Vault, but Vault reported no usable permissions system..."); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Vault, but Vault reported no usable permissions system..."); } p = server.getPluginManager().getPlugin("PermissionsBukkit"); if (p != null) { perms = new PermissionsBukkitAdapter((PermissionsPlugin) p); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found PermissionsBukkit Plugin!"); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found PermissionsBukkit Plugin!"); return; } p = server.getPluginManager().getPlugin("bPermissions"); if (p != null) { perms = new BPermissionsAdapter(); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found bPermissions Plugin!"); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found bPermissions Plugin!"); return; } p = server.getPluginManager().getPlugin("Permissions"); if (p != null) { if (plugin.getConfigManager().useLegacyPermissions()) { perms = new LegacyPermissions(((Permissions) p).getHandler()); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Permissions Plugin!"); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + "Permissions running in Legacy mode!"); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Permissions Plugin!"); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + "Permissions running in Legacy mode!"); } else { perms = new OriginalPermissions(((Permissions) p).getHandler()); - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Found Permissions Plugin!"); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Permissions Plugin!"); } return; } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Permissions plugin NOT FOUND!"); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Permissions plugin NOT FOUND!"); } private void readConfig() { - FileConfiguration groupsFile = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "groups.yml")); - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "flags.yml")); + FileConfiguration groupsFile = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); String defaultGroup = plugin.getConfigManager().getDefaultGroup().toLowerCase(); globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", flags.getConfigurationSection("Global")); @@ -206,7 +206,7 @@ private void readConfig() { groups.put(group.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms)); } } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Error parsing group from config:" + key + " Exception:" + ex); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Error parsing group from config:" + key + " Exception:" + ex); } } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java b/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java index 47b10aee9..47022bae1 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java @@ -21,7 +21,7 @@ public String getPlayerGroup(Player player) { @Override public String getPlayerGroup(String player, String world) { - PermissionManager pmanager = Residence.getPermissionManager(); + PermissionManager pmanager = Residence.getInstance().getPermissionManager(); List groups = newperms.getGroups(player); for (Group group : groups) { String name = group.getName().toLowerCase(); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 878d89152..331ded9e9 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -11,7 +11,6 @@ import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.ResidenceBank; -import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; @@ -25,8 +24,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.shopStuff.ShopVote; -import com.bekvon.bukkit.residence.utils.Debug; - import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; @@ -109,7 +106,7 @@ public void setSellPrice(Integer amount) { } public boolean isForSell() { - return Residence.getTransactionManager().isForSale(this.getName()); + return plugin.getTransactionManager().isForSale(this.getName()); } public boolean isForRent() { diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index 8e06164c1..cbb427eb9 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -161,7 +161,7 @@ public void save(DataOutputStream out) throws IOException { public CuboidArea load(DataInputStream in) throws IOException { CuboidArea newArea = new CuboidArea(); - Server server = Residence.getServ(); + Server server = Residence.getInstance().getServ(); World world = server.getWorld(in.readUTF()); int highx = in.readInt(); int highy = in.readInt(); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index b25adc5e4..088f577b6 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -23,7 +23,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.utils.Debug; public class FlagPermissions { @@ -270,13 +269,13 @@ protected Map getPlayerFlags(String player, boolean allowCreate } catch (Exception e) { } - String resolvedName = Residence.getPlayerName(uuid); + String resolvedName = Residence.getInstance().getPlayerName(uuid); if (resolvedName != null) player = resolvedName; else if (cachedPlayerNameUUIDs.containsKey(uuid)) player = cachedPlayerNameUUIDs.get(uuid); } else - uuid = Residence.getPlayerUUID(player); + uuid = Residence.getInstance().getPlayerUUID(player); if (uuid == null) { Set> values = cachedPlayerNameUUIDs.entrySet(); @@ -352,7 +351,7 @@ public void removeAllPlayerFlags(String player) {//this function works with uuid // player = player.toLowerCase(); if (!Residence.getInstance().getConfigManager().isOfflineMode()) { - UUID uuid = Residence.getPlayerUUID(player); + UUID uuid = Residence.getInstance().getPlayerUUID(player); if (uuid == null) for (Entry entry : cachedPlayerNameUUIDs.entrySet()) if (entry.getValue().equals(player)) { @@ -432,7 +431,7 @@ public boolean playerHas(String player, String world, Flags flag, boolean def) { } public boolean playerHas(String player, String world, String flag, boolean def) { - String group = Residence.getPermissionManager().getGroupNameByPlayer(player, world); + String group = Residence.getInstance().getPermissionManager().getGroupNameByPlayer(player, world); return this.playerCheck(player, flag, this.groupCheck(group, flag, this.has(flag, def))); } @@ -561,7 +560,7 @@ public Map save() { // root.put("LastKnownPlayerNames", cachedPlayerNameUUIDs); // Putting uuid's to main cache for later save - Residence.addCachedPlayerNameUUIDs(cachedPlayerNameUUIDs); + Residence.getInstance().addCachedPlayerNameUUIDs(cachedPlayerNameUUIDs); root.put("PlayerFlags", playerFlags); if (!groupFlags.isEmpty()) @@ -592,7 +591,7 @@ protected static FlagPermissions load(Map root, FlagPermissions try { UUID uuid = UUID.fromString(one.getKey()); - String name = Residence.getCachedPlayerNameUUIDs().get(uuid); + String name = Residence.getInstance().getCachedPlayerNameUUIDs().get(uuid); newperms.cachedPlayerNameUUIDs.put(uuid, name); } catch (Exception e) { continue; @@ -629,10 +628,10 @@ private void convertFlagsUUIDsToPlayerNames() { for (String keyset : playerFlags.keySet()) { if (keyset.length() == 36) { String uuid = keyset; - if (uuid.equalsIgnoreCase(Residence.getServerLandUUID())) - converts.put(uuid, Residence.getServerLandname()); + if (uuid.equalsIgnoreCase(Residence.getInstance().getServerLandUUID())) + converts.put(uuid, Residence.getInstance().getServerLandname()); else { - String name = Residence.getPlayerName(uuid); + String name = Residence.getInstance().getPlayerName(uuid); if (name != null) converts.put(uuid, name); } @@ -657,10 +656,10 @@ private void convertPlayerNamesToUUIDs(String OwnerName, String owneruuid) { for (String keyset : playerFlags.keySet()) { if (keyset.length() != 36) { String uuid = null; - if (OwnerName != null && OwnerName.equals(keyset) && !owneruuid.equals(Residence.getTempUserUUID())) + if (OwnerName != null && OwnerName.equals(keyset) && !owneruuid.equals(Residence.getInstance().getTempUserUUID())) uuid = owneruuid; else - uuid = Residence.getPlayerUUIDString(keyset); + uuid = Residence.getInstance().getPlayerUUIDString(keyset); // if (OwnerName.equals(keyset)) { if (uuid != null) converts.put(keyset, uuid); @@ -668,7 +667,7 @@ else if (OwnerName != null && !OwnerName.equals(keyset)) Toremove.add(keyset); // } } else { - String pname = Residence.getPlayerName(keyset); + String pname = Residence.getInstance().getPlayerName(keyset); if (pname != null) { try { UUID uuid = UUID.fromString(keyset); @@ -762,7 +761,7 @@ public ArrayList getposibleAreaFlags() { public List getPosibleFlags(Player player, boolean residence, boolean resadmin) { List flags = new ArrayList(); - for (Entry one : Residence.getPermissionManager().getAllFlags().getFlags().entrySet()) { + for (Entry one : Residence.getInstance().getPermissionManager().getAllFlags().getFlags().entrySet()) { if (!one.getValue() && !resadmin && !player.hasPermission(new Permission("residence.flag." + one.getKey().toLowerCase(), PermissionDefault.FALSE))) continue; @@ -813,7 +812,7 @@ protected String printPlayerFlags(Map flags) { public String listOtherPlayersFlags(String player) { // player = player.toLowerCase(); - String uuids = Residence.getPlayerUUIDString(player); + String uuids = Residence.getInstance().getPlayerUUIDString(player); StringBuilder sbuild = new StringBuilder(); Set>> set = playerFlags.entrySet(); synchronized (set) { @@ -825,7 +824,7 @@ public String listOtherPlayersFlags(String player) { .equals(player)) { String perms = printPlayerFlags(nextEnt.getValue()); if (next.length() == 36) { - String resolvedName = Residence.getPlayerName(next); + String resolvedName = Residence.getInstance().getPlayerName(next); if (resolvedName != null) { try { UUID uuid = UUID.fromString(next); @@ -856,7 +855,7 @@ public String listPlayersFlags() { String perms = printPlayerFlags(nextEnt.getValue()); if (next.length() == 36) { - String resolvedName = Residence.getPlayerName(next); + String resolvedName = Residence.getInstance().getPlayerName(next); if (resolvedName != null) { try { UUID uuid = UUID.fromString(next); @@ -868,7 +867,7 @@ public String listPlayersFlags() { next = this.cachedPlayerNameUUIDs.get(next); } - if (next.equalsIgnoreCase(Residence.getServerLandname())) + if (next.equalsIgnoreCase(Residence.getInstance().getServerLandname())) continue; if (!perms.equals("none")) { @@ -895,7 +894,7 @@ public String listPlayersFlagsRaw(String player, String text) { String perms = printPlayerFlags(nextEnt.getValue()); if (next.length() == 36) { - String resolvedName = Residence.getPlayerName(next); + String resolvedName = Residence.getInstance().getPlayerName(next); if (resolvedName != null) { try { UUID uuid = UUID.fromString(next); @@ -907,7 +906,7 @@ public String listPlayersFlagsRaw(String player, String text) { next = this.cachedPlayerNameUUIDs.get(next); } - if (next.equalsIgnoreCase(Residence.getServerLandname())) + if (next.equalsIgnoreCase(Residence.getInstance().getServerLandname())) continue; if (!perms.equals("none")) { @@ -937,7 +936,7 @@ public String listPlayersFlagsRaw(String player, String text) { public String listOtherPlayersFlagsRaw(String text, String player) { // player = player.toLowerCase(); - String uuids = Residence.getPlayerUUIDString(player); + String uuids = Residence.getInstance().getPlayerUUIDString(player); StringBuilder sbuild = new StringBuilder(); sbuild.append("[\"\","); @@ -954,7 +953,7 @@ public String listOtherPlayersFlagsRaw(String text, String player) { .equals(player)) { String perms = printPlayerFlags(nextEnt.getValue()); if (next.length() == 36) { - String resolvedName = Residence.getPlayerName(next); + String resolvedName = Residence.getInstance().getPlayerName(next); if (resolvedName != null) { try { UUID uuid = UUID.fromString(next); diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index 6158881a0..b0dac8794 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -66,7 +66,7 @@ public void renewArea(String area, Player player) { plugin.msg(player, lm.Economy_LeaseNotExpire); return; } - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); int max = group.getMaxLeaseTime(); int add = group.getLeaseGiveTime(); @@ -162,7 +162,7 @@ public void doExpirations() { if (!renewed) { if (!plugin.getConfigManager().enabledRentSystem() || !plugin.getRentManager().isRented(resname)) { ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(null, res, DeleteCause.LEASE_EXPIRE); - Residence.getServ().getPluginManager().callEvent(resevent); + plugin.getServ().getPluginManager().callEvent(resevent); if (!resevent.isCancelled()) { manager.removeResidence(next.getKey()); it.remove(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 4f2afbb5c..d54ba4074 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -27,7 +27,6 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; @@ -36,7 +35,6 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; @@ -192,7 +190,7 @@ public List getShops() { @Override public boolean addResidence(String name, Location loc1, Location loc2) { - return this.addResidence(name, Residence.getServerLandname(), loc1, loc2); + return this.addResidence(name, plugin.getServerLandname(), loc1, loc2); } @Override @@ -219,11 +217,15 @@ public boolean addResidence(Player player, String owner, String name, Location l PermissionGroup group = rPlayer.getGroup(); // PermissionGroup group = plugin.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); - if ( !resadmin && !(group.canCreateResidences() && (player == null ? true : plugin.hasPermission(player, "residence.create")))) { + if (!resadmin && !group.canCreateResidences()) { plugin.msg(player, lm.General_NoPermission); return false; } + if (!resadmin && !(player == null ? true : plugin.hasPermission(player, "residence.create"))) { + return false; + } + if (rPlayer.getResAmount() >= rPlayer.getMaxRes() && !resadmin) { plugin.msg(player, lm.Residence_TooMany); return false; @@ -803,7 +805,7 @@ public Map save() { try { resmap.put(res.getValue().getResidenceName(), res.getValue().save()); } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(plugin.prefix + ChatColor.RED + " Failed to save residence (" + res.getKey() + ")!"); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + " Failed to save residence (" + res.getKey() + ")!"); Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); } } @@ -821,12 +823,12 @@ public ResidenceManager load(Map root) throws Exception { long time = System.currentTimeMillis(); @SuppressWarnings("unchecked") Map reslist = (Map) root.get(world.getName()); - Bukkit.getConsoleSender().sendMessage(plugin.prefix + " Loading " + world.getName() + " data into memory..."); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + world.getName() + " data into memory..."); if (reslist != null) { try { resm.chunkResidences.put(world.getName(), loadMap(world.getName(), reslist, resm)); } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(plugin.prefix + ChatColor.RED + "Error in loading save file for world: " + world.getName()); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + "Error in loading save file for world: " + world.getName()); if (plugin.getConfigManager().stopOnSaveError()) throw (ex); } @@ -835,7 +837,7 @@ public ResidenceManager load(Map root) throws Exception { long pass = System.currentTimeMillis() - time; String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - Bukkit.getConsoleSender().sendMessage(plugin.prefix + " Loaded " + world.getName() + " data into memory. (" + PastTime + ")"); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + world.getName() + " data into memory. (" + PastTime + ")"); } return resm; } @@ -849,7 +851,7 @@ public Map> loadMap(String worldName, Map int y = 0; for (Entry res : root.entrySet()) { if (i == 100 & plugin.getConfigManager().isUUIDConvertion()) - Bukkit.getConsoleSender().sendMessage(plugin.prefix + " " + worldName + " UUID conversion done: " + y + " of " + root.size()); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " " + worldName + " UUID conversion done: " + y + " of " + root.size()); if (i >= 100) i = 0; i++; @@ -858,7 +860,6 @@ public Map> loadMap(String worldName, Map @SuppressWarnings("unchecked") ClaimedResidence residence = ClaimedResidence.load(worldName, (Map) res.getValue(), null, plugin); - if (residence == null) continue; @@ -895,7 +896,7 @@ public Map> loadMap(String worldName, Map resm.residences.put(resName, residence); } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(plugin.prefix + ChatColor.RED + " Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + " Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + " Error Log:"); Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); if (plugin.getConfigManager().stopOnSaveError()) { @@ -946,7 +947,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo plugin.msg(player, lm.Invalid_Residence); return false; } - oldName = res.getName(); + oldName = res.getName(); if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { if (res.getParent() == null) { if (residences.containsKey(newName.toLowerCase())) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index ba2c0daa8..294534048 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -9,8 +9,6 @@ import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.utils.Debug; - import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -38,9 +36,9 @@ private ResidencePermissions(ClaimedResidence res) { public ResidencePermissions(ClaimedResidence res, String creator, String inworld) { this(res); - ownerUUID = Residence.getPlayerUUID(creator); + ownerUUID = Residence.getInstance().getPlayerUUID(creator); if (ownerUUID == null) - ownerUUID = UUID.fromString(Residence.getTempUserUUID()); + ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID()); this.ownerLastKnownName = creator; world = inworld; } @@ -93,7 +91,7 @@ public boolean playerHas(String player, Flags flag, FlagCombo f) { public boolean playerHas(String player, String world, String flag, boolean def) { ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER, player, def); - Residence.getServ().getPluginManager().callEvent(fc); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isOverriden()) return fc.getOverrideValue(); return super.playerHas(player, world, flag, def); @@ -102,7 +100,7 @@ public boolean playerHas(String player, String world, String flag, boolean def) @Override public boolean groupHas(String group, String flag, boolean def) { ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.GROUP, group, def); - Residence.getServ().getPluginManager().callEvent(fc); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isOverriden()) return fc.getOverrideValue(); return super.groupHas(group, flag, def); @@ -149,7 +147,7 @@ public boolean has(String flag, boolean def) { @Override public boolean has(String flag, boolean def, boolean checkParent) { ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def); - Residence.getServ().getPluginManager().callEvent(fc); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isOverriden()) return fc.getOverrideValue(); return super.has(flag, def, checkParent); @@ -157,7 +155,7 @@ public boolean has(String flag, boolean def, boolean checkParent) { public boolean hasApplicableFlag(String player, String flag) { return super.inheritanceIsPlayerSet(player, flag) || - super.inheritanceIsGroupSet(Residence.getPermissionManager().getGroupNameByPlayer(player, world), flag) || + super.inheritanceIsGroupSet(Residence.getInstance().getPermissionManager().getGroupNameByPlayer(player, world), flag) || super.inheritanceIsSet(flag); } @@ -175,7 +173,7 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) } else { resadmin = true; } - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(this.getOwner()); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(this.getOwner()); PermissionGroup group = rPlayer.getGroup(world); for (Entry flag : list.cuboidFlags.entrySet()) { @@ -264,14 +262,14 @@ private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState sta } private boolean hasFlagAccess(String player, String flag) { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(world); return group.hasFlagAccess(flag); } public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String flag, String flagstate, boolean resadmin, boolean Show) { - if (Residence.getPlayerUUID(targetPlayer) == null) { + if (Residence.getInstance().getPlayerUUID(targetPlayer) == null) { sender.sendMessage("no player by this name"); return false; } @@ -282,7 +280,7 @@ public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String f if (checkCanSetFlag(sender, flag, state, false, resadmin)) { ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, sender instanceof Player ? (Player) sender : null, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer); - Residence.getServ().getPluginManager().callEvent(fc); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; if (super.setPlayerFlag(targetPlayer, flag, state)) { @@ -300,9 +298,9 @@ public boolean setGroupFlag(Player player, String group, String flag, String fla return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin); FlagState state = FlagPermissions.stringToFlagState(flagstate); if (checkCanSetFlag(player, flag, state, false, resadmin)) { - if (Residence.getPermissionManager().hasGroup(group)) { + if (Residence.getInstance().getPermissionManager().hasGroup(group)) { ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); - Residence.getServ().getPluginManager().callEvent(fc); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; if (super.setGroupFlag(group, flag, state)) { @@ -344,7 +342,7 @@ public boolean setFlag(CommandSender sender, String flag, String flagstate, bool if (checkCanSetFlag(sender, flag, state, true, resadmin)) { ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(this.residence, sender instanceof Player ? (Player) sender : null, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); - Residence.getServ().getPluginManager().callEvent(fc); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; if (super.setFlag(flag, state)) { @@ -359,7 +357,7 @@ public boolean removeAllPlayerFlags(CommandSender sender, String targetPlayer, b if (this.hasResidencePermission(sender, false) || resadmin) { ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(this.residence, sender instanceof Player ? (Player) sender : null, "ALL", ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null); - Residence.getServ().getPluginManager().callEvent(fc); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) { return false; } @@ -373,7 +371,7 @@ public boolean removeAllPlayerFlags(CommandSender sender, String targetPlayer, b public boolean removeAllGroupFlags(Player player, String group, boolean resadmin) { if (this.hasResidencePermission(player, false) || resadmin) { ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null); - Residence.getServ().getPluginManager().callEvent(fc); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) { return false; } @@ -387,7 +385,7 @@ public boolean removeAllGroupFlags(Player player, String group, boolean resadmin @Override public boolean setFlag(String flag, FlagState state) { ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); - Residence.getServ().getPluginManager().callEvent(fc); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; return super.setFlag(flag, state); @@ -396,7 +394,7 @@ public boolean setFlag(String flag, FlagState state) { @Override public boolean setGroupFlag(String group, String flag, FlagState state) { ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); - Residence.getServ().getPluginManager().callEvent(fc); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; return super.setGroupFlag(group, flag, state); @@ -405,7 +403,7 @@ public boolean setGroupFlag(String group, String flag, FlagState state) { @Override public boolean setPlayerFlag(String player, String flag, FlagState state) { ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, player); - Residence.getServ().getPluginManager().callEvent(fc); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; return super.setPlayerFlag(player, flag, state); @@ -420,7 +418,7 @@ public void applyDefaultFlags(Player player, boolean resadmin) { } public void applyDefaultFlags() { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(this.getOwner()); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(this.getOwner()); PermissionGroup group = rPlayer.getGroup(world); Set> dflags = group.getDefaultResidenceFlags(); // Set> dcflags = group.getDefaultCreatorFlags(); @@ -452,21 +450,21 @@ public void applyDefaultFlags() { public void setOwner(String newOwner, boolean resetFlags) { ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); - Residence.getServ().getPluginManager().callEvent(ownerchange); + Residence.getInstance().getServ().getPluginManager().callEvent(ownerchange); - Residence.getPlayerManager().removeResFromPlayer(ownerLastKnownName, residence.getName()); - Residence.getPlayerManager().addResidence(newOwner, residence); + Residence.getInstance().getPlayerManager().removeResFromPlayer(ownerLastKnownName, residence.getName()); + Residence.getInstance().getPlayerManager().addResidence(newOwner, residence); ownerLastKnownName = newOwner; - if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase(Residence.getServerLandname())) { - ownerUUID = UUID.fromString(Residence.getServerLandUUID());// the UUID for server owned land + if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase(Residence.getInstance().getServerLandname())) { + ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());// the UUID for server owned land } else { - UUID playerUUID = Residence.getPlayerUUID(newOwner); + UUID playerUUID = Residence.getInstance().getPlayerUUID(newOwner); if (playerUUID != null) ownerUUID = playerUUID; else - ownerUUID = UUID.fromString(Residence.getTempUserUUID());//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it + ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it } if (resetFlags) this.applyDefaultFlags(); @@ -475,9 +473,9 @@ public void setOwner(String newOwner, boolean resetFlags) { public String getOwner() { if (Residence.getInstance().getConfigManager().isOfflineMode()) return ownerLastKnownName; - if (ownerUUID.toString().equals(Residence.getServerLandUUID())) //check for server land - return Residence.getServerLandname(); - String name = Residence.getPlayerName(ownerUUID);//try to find the owner's name + if (ownerUUID.toString().equals(Residence.getInstance().getServerLandUUID())) //check for server land + return Residence.getInstance().getServerLandname(); + String name = Residence.getInstance().getPlayerName(ownerUUID);//try to find the owner's name if (name == null) return ownerLastKnownName;//return last known if we cannot find it ownerLastKnownName = name;//update last known if we did find it @@ -519,12 +517,12 @@ public static ResidencePermissions load(String worldName, ClaimedResidence res, if (newperms.ownerLastKnownName == null) return newperms; - if (newperms.ownerLastKnownName.equalsIgnoreCase("Server land") || newperms.ownerLastKnownName.equalsIgnoreCase(Residence.getServerLandname())) { - newperms.ownerUUID = UUID.fromString(Residence.getServerLandUUID());//UUID for server land - newperms.ownerLastKnownName = Residence.getServerLandname(); - } else if (newperms.ownerUUID.toString().equals(Residence.getTempUserUUID())) //check for fake UUID + if (newperms.ownerLastKnownName.equalsIgnoreCase("Server land") || newperms.ownerLastKnownName.equalsIgnoreCase(Residence.getInstance().getServerLandname())) { + newperms.ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());//UUID for server land + newperms.ownerLastKnownName = Residence.getInstance().getServerLandname(); + } else if (newperms.ownerUUID.toString().equals(Residence.getInstance().getTempUserUUID())) //check for fake UUID { - UUID realUUID = Residence.getPlayerUUID(newperms.ownerLastKnownName);//try to find the real UUID of the player if possible now + UUID realUUID = Residence.getInstance().getPlayerUUID(newperms.ownerLastKnownName);//try to find the real UUID of the player if possible now if (realUUID != null) newperms.ownerUUID = realUUID; } @@ -532,12 +530,12 @@ public static ResidencePermissions load(String worldName, ClaimedResidence res, { String owner = (String) root.get("Owner"); newperms.ownerLastKnownName = owner; - newperms.ownerUUID = Residence.getPlayerUUID(owner); + newperms.ownerUUID = Residence.getInstance().getPlayerUUID(owner); if (newperms.ownerUUID == null) - newperms.ownerUUID = UUID.fromString(Residence.getTempUserUUID());//set fake UUID until we can find real one for last known player + newperms.ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//set fake UUID until we can find real one for last known player } else { - newperms.ownerUUID = UUID.fromString(Residence.getServerLandUUID());//cant determine owner name or UUID... setting zero UUID which is server land - newperms.ownerLastKnownName = Residence.getServerLandname(); + newperms.ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());//cant determine owner name or UUID... setting zero UUID which is server land + newperms.ownerLastKnownName = Residence.getInstance().getServerLandname(); } newperms.world = worldName; FlagPermissions.load(root, newperms); diff --git a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java index 5fdb7b6d5..3b9a4cfa3 100644 --- a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java +++ b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java @@ -20,8 +20,10 @@ public class WorldFlagManager { protected Map> groupperms; protected Map worldperms; protected FlagPermissions globaldefaults; + private Residence plugin; - public WorldFlagManager() { + public WorldFlagManager(Residence plugin) { + this.plugin = plugin; globaldefaults = new FlagPermissions(); worldperms = new HashMap<>(); groupperms = new HashMap<>(); @@ -29,7 +31,7 @@ public WorldFlagManager() { } public FlagPermissions getPerms(Player player) { - return this.getPerms(player.getWorld().getName(), Residence.getPermissionManager().getGroupNameByPlayer(player)); + return this.getPerms(player.getWorld().getName(), plugin.getPermissionManager().getGroupNameByPlayer(player)); } public FlagPermissions getPerms(String world, String group) { @@ -65,8 +67,8 @@ public FlagPermissions getPerms(String world) { public final void parsePerms() { try { - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "flags.yml")); - FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "groups.yml")); + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); + FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); Set keys = flags.getConfigurationSection("Global.Flags").getKeys(false); if (keys != null) { diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index 7d1b9ef99..5b4636678 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -22,7 +22,7 @@ public AutoSelection(Residence residence) { public void switchAutoSelection(Player player) { if (!list.containsKey(player.getName().toLowerCase())) { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(player.getWorld().getName()); list.put(player.getName().toLowerCase(), new AutoSelector(group, System.currentTimeMillis())); plugin.msg(player, lm.Select_AutoEnabled); diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index 7d4654762..21bd2c5ca 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -22,7 +22,6 @@ public class SchematicsManager { public SchematicsManager(Residence residence) { this.plugin = residence; - // TODO Auto-generated constructor stub } public boolean save(ClaimedResidence res) { @@ -48,20 +47,20 @@ public boolean save(ClaimedResidence res) { clipboard.setOrigin(origin); clipboard.copy(editSession); - File dir = new File(Residence.getDataLocation(), "Schematics"); + File dir = new File(plugin.getDataLocation(), "Schematics"); if (!dir.exists()) try { dir.mkdir(); } catch (SecurityException se) { } - dir = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld()); + dir = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld()); if (!dir.exists()) try { dir.mkdir(); } catch (SecurityException se) { } - File file = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + File file = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); try { SchematicFormat.MCEDIT.save(clipboard, file); } catch (com.sk89q.worldedit.world.DataException | IOException e) { @@ -85,7 +84,7 @@ public boolean load(ClaimedResidence res) { return false; EditSession es = new EditSession(new BukkitWorld(bworld), Integer.MAX_VALUE); - File file = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + File file = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); if (!file.exists()) return false; @@ -129,7 +128,7 @@ public boolean delete(ClaimedResidence res) { if (res == null) return false; - File file = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + File file = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); if (!file.exists()) return false; @@ -142,12 +141,12 @@ public boolean rename(ClaimedResidence res, String newName) { if (res == null) return false; - File oldFile = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + File oldFile = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); if (!oldFile.exists()) return false; - File newFile = new File(Residence.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + newName + ".schematic"); + File newFile = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + newName + ".schematic"); return oldFile.renameTo(newFile); } } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 4c9713acc..9ff12e6d5 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -133,12 +133,12 @@ public void showSelectionInfoInActionBar(Player player) { String Message = plugin.msg(lm.Select_TotalSize, cuboidArea.getSize()); - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (plugin.getConfigManager().enableEconomy()) Message += " " + plugin.msg(lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); - Residence.getAB().send(player, Message); + plugin.getAB().send(player, Message); } @@ -149,7 +149,7 @@ public void showSelectionInfo(Player player) { CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); plugin.msg(player, lm.Select_TotalSize, cuboidArea.getSize()); - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (plugin.getConfigManager().enableEconomy()) @@ -413,6 +413,7 @@ public boolean MakeBorders(final Player player, final boolean error) { } Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @SuppressWarnings("deprecation") @Override public void run() { @@ -433,7 +434,7 @@ public void run() { List trimed2 = new ArrayList(); try { - boolean spigot = Residence.isSpigot(); + boolean spigot = plugin.isSpigot(); if (spigot) { if (!error) @@ -569,7 +570,7 @@ public void qbedrock(Player player) { public void sky(Player player, boolean resadmin) { if (hasPlacedBoth(player.getName())) { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); int y1 = playerLoc1.get(player.getName()).getBlockY(); int y2 = playerLoc2.get(player.getName()).getBlockY(); @@ -599,7 +600,7 @@ public void sky(Player player, boolean resadmin) { public void bedrock(Player player, boolean resadmin) { if (hasPlacedBoth(player.getName())) { - ResidencePlayer rPlayer = Residence.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); int y1 = playerLoc1.get(player.getName()).getBlockY(); int y2 = playerLoc2.get(player.getName()).getBlockY(); diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java index 755b2465f..e707c937e 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -19,7 +19,7 @@ public WorldGuardUtil(Residence residence) { public ProtectedRegion isSelectionInRegion(Player player) { - if (Residence.getWorldGuard() == null) + if (plugin.getWorldGuard() == null) return null; if (plugin.getWorldEdit() == null) @@ -36,7 +36,7 @@ public ProtectedRegion isSelectionInRegion(Player player) { BlockVector max = new BlockVector(loc2.getX(), loc2.getY(), loc2.getZ()); ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); - RegionManager mgr = Residence.getWorldGuard().getRegionManager(loc1.getWorld()); + RegionManager mgr = plugin.getWorldGuard().getRegionManager(loc1.getWorld()); ApplicableRegionSet regions = mgr.getApplicableRegions(region); diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index a89173c1c..f7f939d67 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -158,7 +158,7 @@ public void onFlagChange(ResidenceFlagChangeEvent event) { event.setCancelled(true); - Residence.msg(event.getPlayer(), ChatColor.YELLOW + "Can't change while shop flag is set to true"); + plugin.msg(event.getPlayer(), ChatColor.YELLOW + "Can't change while shop flag is set to true"); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index b77a12a37..2cfddf78d 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -150,7 +150,7 @@ private List getHelpData(CommandSender sender, boolean resadmin) { helplines.add(new HelpLines(null, one)); } - FlagPermissions GlobalFlags = Residence.getPermissionManager().getAllFlags(); + FlagPermissions GlobalFlags = Residence.getInstance().getPermissionManager().getAllFlags(); Map unsortMap = new HashMap(); @@ -195,7 +195,7 @@ private List getHelpData(CommandSender sender, boolean resadmin) { if (!unsortMap.isEmpty()) { // Sorting flags help page by alphabet - unsortMap = Residence.getSortingManager().sortStringByKeyASC(unsortMap); + unsortMap = Residence.getInstance().getSortingManager().sortStringByKeyASC(unsortMap); // Converting HashMap to helplines for (Entry one : unsortMap.entrySet()) { helplines.add(new HelpLines(one.getKey(), one.getValue())); @@ -270,7 +270,7 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { Set subcommandkeys = node.getConfigurationSection(key + ".SubCommands").getKeys(false); if (key.equalsIgnoreCase("CommandHelp.SubCommands.res")) { subcommandkeys.clear(); - for (String one : Residence.getCommandFiller().getCommands()) { + for (String one : Residence.getInstance().getCommandFiller().getCommands()) { subcommandkeys.add(one); } } @@ -284,7 +284,7 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { @SuppressWarnings("deprecation") public Set getSubCommands(CommandSender sender, String[] args) { - File langFile = new File(new File(Residence.getDataLocation(), "Language"), "English.yml"); + File langFile = new File(new File(Residence.getInstance().getDataLocation(), "Language"), "English.yml"); Set subCommands = new HashSet(); if (langFile.isFile()) { @@ -331,7 +331,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { List ArgsList = new ArrayList(); int ii = 0; - for (Entry, List> one : Residence.getLocaleManager().CommandTab.entrySet()) { + for (Entry, List> one : Residence.getInstance().getLocaleManager().CommandTab.entrySet()) { List list = one.getKey(); if (list.size() > ii && args.length > ii && list.get(ii).equalsIgnoreCase(args[ii])) { ArgsList = one.getValue(); @@ -366,12 +366,12 @@ public Set getSubCommands(CommandSender sender, String[] args) { if (resName != null) subCommands.add(resName); } - List resList = Residence.getPlayerManager().getResidencePlayer(((Player) sender)).getResList(); + List resList = Residence.getInstance().getPlayerManager().getResidencePlayer(((Player) sender)).getResList(); for (ClaimedResidence oneRes : resList) { subCommands.add(oneRes.getName()); } } else { - ArrayList resList = Residence.getInstance().getResidenceManager().getResidenceList(Residence.getServerLandname(), true, false, false); + ArrayList resList = Residence.getInstance().getResidenceManager().getResidenceList(Residence.getInstance().getServerLandname(), true, false, false); if (resList.size() > 0) subCommands.addAll(resList); } diff --git a/src/com/bekvon/bukkit/residence/utils/CrackShot.java b/src/com/bekvon/bukkit/residence/utils/CrackShot.java index 5efceefc5..85e6d2d20 100644 --- a/src/com/bekvon/bukkit/residence/utils/CrackShot.java +++ b/src/com/bekvon/bukkit/residence/utils/CrackShot.java @@ -49,7 +49,7 @@ public void AnimalKilling(WeaponDamageEntityEvent event) { if (cause == null) return; - if (Residence.isResAdminOn(cause)) { + if (plugin.isResAdminOn(cause)) { return; } @@ -86,7 +86,7 @@ public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { return; } - if (Residence.isResAdminOn(player)) + if (plugin.isResAdminOn(player)) return; // Note: Location of entity, not player; otherwise player could stand outside of res and still damage diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 7f36532a1..3c50e13fb 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -13,9 +13,15 @@ public class FileCleanUp { - public static void cleanFiles() { + private Residence plugin; - ArrayList resNameList = Residence.getInstance().getResidenceManager().getResidenceList(false, false); + public FileCleanUp(Residence plugin) { + this.plugin = plugin; + } + + public void cleanFiles() { + + ArrayList resNameList = plugin.getResidenceManager().getResidenceList(false, false); int i = 0; OfflinePlayer[] offplayer = Bukkit.getOfflinePlayers(); @@ -26,11 +32,11 @@ public static void cleanFiles() { playermap.put(one.getUniqueId(), one); } - int interval = Residence.getInstance().getConfigManager().getResidenceFileCleanDays(); + int interval = plugin.getConfigManager().getResidenceFileCleanDays(); long time = System.currentTimeMillis(); for (String oneName : resNameList) { - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByName(oneName); + ClaimedResidence res = plugin.getResidenceManager().getByName(oneName); if (res == null) continue; @@ -42,10 +48,10 @@ public static void cleanFiles() { if (player == null) continue; - if (!Residence.getInstance().getConfigManager().getCleanWorlds().contains(res.getWorld())) + if (!plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) continue; - if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(Residence.getServerLandname())) + if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(plugin.getServerLandname())) continue; long lastPlayed = player.getLastPlayed(); @@ -56,9 +62,9 @@ public static void cleanFiles() { if (ResidenceVaultAdapter.hasPermission(player, "residence.cleanbypass", res.getWorld())) continue; - Residence.getInstance().getResidenceManager().removeResidence(oneName); + plugin.getResidenceManager().removeResidence(oneName); i++; } - Bukkit.getConsoleSender().sendMessage(Residence.prefix + " Auto CleanUp deleted " + i + " residences!"); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Auto CleanUp deleted " + i + " residences!"); } } diff --git a/src/com/bekvon/bukkit/residence/utils/TabComplete.java b/src/com/bekvon/bukkit/residence/utils/TabComplete.java index 229d73410..0dc7686ac 100644 --- a/src/com/bekvon/bukkit/residence/utils/TabComplete.java +++ b/src/com/bekvon/bukkit/residence/utils/TabComplete.java @@ -1,27 +1,27 @@ -package com.bekvon.bukkit.residence.utils; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabCompleter; -import org.bukkit.util.StringUtil; - -import com.bekvon.bukkit.residence.Residence; - -public class TabComplete implements TabCompleter { - - @Override - public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { - List completionList = new ArrayList<>(); - Set Commands = Residence.getHelpPages().getSubCommands(sender, args); - - String PartOfCommand = args[args.length - 1]; - StringUtil.copyPartialMatches(PartOfCommand, Commands, completionList); - Collections.sort(completionList); - return completionList; - } -} +package com.bekvon.bukkit.residence.utils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.util.StringUtil; + +import com.bekvon.bukkit.residence.Residence; + +public class TabComplete implements TabCompleter { + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + List completionList = new ArrayList<>(); + Set Commands = Residence.getInstance().getHelpPages().getSubCommands(sender, args); + + String PartOfCommand = args[args.length - 1]; + StringUtil.copyPartialMatches(PartOfCommand, Commands, completionList); + Collections.sort(completionList); + return completionList; + } +} diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 9aa232037..6a758b1ce 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -6,7 +6,6 @@ import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.permission.Permission; -import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.Server; import org.bukkit.entity.Player; diff --git a/src/com/residence/zip/ZipLibrary.java b/src/com/residence/zip/ZipLibrary.java index 934918232..5e63cc4bd 100644 --- a/src/com/residence/zip/ZipLibrary.java +++ b/src/com/residence/zip/ZipLibrary.java @@ -17,12 +17,11 @@ import com.bekvon.bukkit.residence.Residence; public class ZipLibrary { - private File BackupDir = new File(Residence.getDataLocation(), "Backup"); private Residence plugin; + private File BackupDir = new File(Residence.getInstance().getDataLocation(), "Backup"); public ZipLibrary(Residence residence) { - this.plugin = residence; - + this.plugin = residence; } private void cleanFiles() { @@ -53,7 +52,7 @@ public void backup() throws IOException { // Create the Source List, and add directories/etc to the file. List sources = new ArrayList(); - File saveFolder = new File(Residence.getDataLocation(), "Save"); + File saveFolder = new File(plugin.getDataLocation(), "Save"); File worldFolder = new File(saveFolder, "Worlds"); if (!saveFolder.isDirectory()) { @@ -62,7 +61,7 @@ public void backup() throws IOException { File saveFile; if (plugin.getConfigManager().BackupWorldFiles()) - for (World world : Residence.getServ().getWorlds()) { + for (World world : plugin.getServ().getWorlds()) { saveFile = new File(worldFolder, "res_" + world.getName() + ".yml"); if (saveFile.isFile()) { sources.add(saveFile); @@ -79,11 +78,11 @@ public void backup() throws IOException { sources.add(new File(saveFolder, "rent.yml")); if (plugin.getConfigManager().BackupflagsFile()) - sources.add(new File(Residence.getDataLocation(), "flags.yml")); + sources.add(new File(plugin.getDataLocation(), "flags.yml")); if (plugin.getConfigManager().BackupgroupsFile()) - sources.add(new File(Residence.getDataLocation(), "groups.yml")); + sources.add(new File(plugin.getDataLocation(), "groups.yml")); if (plugin.getConfigManager().BackupconfigFile()) - sources.add(new File(Residence.getDataLocation(), "config.yml")); + sources.add(new File(plugin.getDataLocation(), "config.yml")); if (plugin.getConfigManager().UseZipBackup()) packZip(fileZip, sources); From baf647d22cc352dffc4ac78f1c9485f4429f0e77 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 4 Jan 2017 13:38:05 +0200 Subject: [PATCH 0310/1142] check parent residence for pvp flag if current don't have it set --- src/com/bekvon/bukkit/residence/Residence.java | 2 ++ .../bukkit/residence/listeners/ResidenceEntityListener.java | 6 +++--- .../bukkit/residence/protection/ResidenceManager.java | 4 ++-- src/plugin.yml | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index c7d8e3c99..ff2b62404 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1741,6 +1741,8 @@ public boolean hasPermission(CommandSender sender, String permision, lm message) } public boolean hasPermission(CommandSender sender, String permision, Boolean output, String message) { + if (sender == null) + return false; if (sender instanceof ConsoleCommandSender) { return true; } else if (sender instanceof Player) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index ba270271f..5f12a8397 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1090,7 +1090,7 @@ public void onEntityDamage(EntityDamageEvent event) { if (area != null && ent instanceof Player && damager instanceof Player) { if (area.getPermissions().has(Flags.overridepvp, false) || plugin.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, - FlagCombo.OnlyFalse, false)) { + FlagCombo.OnlyFalse)) { Player player = (Player) event.getEntity(); Damageable damage = player; damage.damage(event.getDamage()); @@ -1109,7 +1109,7 @@ public void onEntityDamage(EntityDamageEvent event) { boolean isSnowBall = false; boolean isOnFire = false; if (srcarea != null) { - srcpvp = srcarea.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone, false); + srcpvp = srcarea.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone); } ent = attackevent.getEntity(); if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) @@ -1167,7 +1167,7 @@ public void onEntityDamage(EntityDamageEvent event) { } } else { /* Normal PvP */ - if (!isSnowBall && !area.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone, false) || isSnowBall && !allowSnowBall) { + if (!isSnowBall && !area.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone) || isSnowBall && !allowSnowBall) { if (attacker != null) plugin.msg(attacker, lm.General_NoPVPZone); if (isOnFire) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index d54ba4074..c10afb5c7 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -217,12 +217,12 @@ public boolean addResidence(Player player, String owner, String name, Location l PermissionGroup group = rPlayer.getGroup(); // PermissionGroup group = plugin.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); - if (!resadmin && !group.canCreateResidences()) { + if (!resadmin && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create", false)) { plugin.msg(player, lm.General_NoPermission); return false; } - if (!resadmin && !(player == null ? true : plugin.hasPermission(player, "residence.create"))) { + if (!resadmin && !plugin.hasPermission(player, "residence.create")) { return false; } diff --git a/src/plugin.yml b/src/plugin.yml index 3f5fa5576..80eb092d8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.13.0 +version: 4.5.13.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From abd8a1fad08c8f977f86879d5efebc160eeb8563 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 4 Jan 2017 13:57:51 +0200 Subject: [PATCH 0311/1142] French translation thanks to percyanak --- src/Language/French.yml | 1492 +++++++++++++++++ .../bekvon/bukkit/residence/Residence.java | 2 +- 2 files changed, 1493 insertions(+), 1 deletion(-) create mode 100644 src/Language/French.yml diff --git a/src/Language/French.yml b/src/Language/French.yml new file mode 100644 index 000000000..6946020f5 --- /dev/null +++ b/src/Language/French.yml @@ -0,0 +1,1492 @@ +# NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy +# of this file and modify that instead. This file will be updated automatically by Residence +# when a newer version is detected, and your changes will be overwritten. Once you +# have a copy of this file, change the Language: option under the Residence config.yml +# to whatever you named your copy. + +Language: + Invalid: + Player: '&cNom du joueur incorrect' + World: '&cInvalid world...' + Residence: '&cResidence incorrecte' + Subzone: '&cSous-zone incorrecte' + Direction: '&cDirection incorrecte' + Amount: '&cMontant incorrect' + Cost: '&cCout incorrect' + Days: '&cNombre de jours incorrect' + Material: '&cMateriau incorrect' + Boolean: '&cValeur incorrecte. Elle doit etre "true" ou "false"' + Area: '&cZone incorrecte' + Group: '&cGroupe incorrect' + MessageType: '&cLe message doit etre enter ou remove' + Flag: '&cFlag incorrect' + FlagState: '&cEtat du flag incorrect. Il doit etre &2true(t)&c, &cfalse(f)&c, ou &6remove(r)' + List: '&eListe inconnue. Elle doit etre &6interdite &eou &6ignoree.' + Page: '&ePage incorrecte' + Help: '&cPage d''aide incorrecte' + NameCharacters: '&cLe nom contient des caracteres interdits.' + Area: + Exists: '&cCette zone existe deja' + Create: '&eResidence creee avec succes, ID %1' + DiffWorld: '&cLa zone est dans un monde different du lieu de residence' + Collision: '&cLa zone entre en collision avec la residence %1' + SubzoneCollision: '&cLa zone entre en collision avec la sous-zone %1' + NonExist: '&cCette zone n''existe pas' + InvalidName: '&cNom de zone invalide...' + ToSmallX: '&cVotre &cselection en X longueur (&6%1&c) est trop petite. &eAutorise: &6%2 + &eet plus' + ToSmallY: '&cVotre &cselection en y hauteur et profondeur (&6%1&c) est trop petite. &eAutorise: &6%2 + &eet plus' + ToSmallZ: '&cVotre &cselection en Z largeur (&6%1&c) est trop petite. &eAutorise: &6%2 + &eet plus' + ToBigX: '&cVotre &cselection en X longueur (&6%1&c) est trop grande. &eAutorise: &6%2 + &eet plus' + ToBigY: '&cVotre &cselection en y hauteur et profondeur (&6%1&c) est trop grande. &eAutorise: &6%2 + &eet plus' + ToBigZ: '&cVotre &cselection en Z largeur (&6%1&c) est trop grande. &eAutorise: &6%2 + &eet plus' + Rename: 'Zone %1 renommee en %2' + Remove: 'Zone %1 supprimee...' + Name: '&eNom: &2%1' + RemoveLast: '&cImpossible de supprimer la derniere zone de la residence' + NotWithinParent: '&cLa zone n''est pas dans la zone mere' + Update: '&eZone mise à jour...' + MaxPhysical: '&eVous avez atteint le maximum de zones physiques autorise de cette residence' + SizeLimit: '&cLa taille de la zone depasse vos limites autorisees' + HighLimit: '&cVous ne pouvez pas proteger a cette hauteur, votre limite est %1' + LowLimit: 'Vous ne pouvez pas proteger a cette profondeur, votre limite est %1' + Select: + Points: '&eSelectionnez 2 points avant d''utiliser cette commande!' + Overlap: '&cLes points selectionnes chevauchent la region &6%1!' + WorldGuardOverlap: '&cLes points selectionnes chevauchent la region WorldGuard &6%1' + Success: '&eSelection reussie' + Fail: '&cLa selection est incorrecte.' + Bedrock: '&eSelection elargie jusqu''a votre limite inferieure autorisee' + Sky: '&eSelection elargie jusqu''a votre limite superieure autorisee' + Area: '&eZone %1 selectionnee de la residence %2' + Tool: '&e- Outil pour selectionner: &6%1' + PrimaryPoint: '&6Premier point de &eSelection : &5%1' + SecondaryPoint: '&6Second point de &eSelection : &5%1' + Primary: '&ePremière selection: &6%1' + Secondary: '&eSeconde selection: &6%1' + TooHigh: '&cAttention , la selection arrive au limite de hauteur.' + TooLow: '&cAttention , la selection arrive au limite de profondeur.' + TotalSize: '&eTaille totale de la selection: &6%1' + AutoEnabled: '&eMode auto selection &6ON&e. Pour desactiver, tapez &6/res + select auto' + AutoDisabled: '&eMode auto selection &6OFF&e. Pour reactiver, tapez + &6/res select auto' + Disabled: '&cVous n''avez pas acces aux commandes de selection' + Sign: + Updated: '&6%1 &epanneaux mis à jour!!' + TopLine: '[market]' + DateFormat: YY/MM/dd HH:mm + ForRentTopLine: '&8A Louer' + ForRentPriceLine: '&8%1&f/&8%2&f/&8%3' + ForRentResName: '&8%1' + ForRentBottomLine: '&9Disponible' + RentedAutorenewTrue: '&2%1' + RentedAutorenewFalse: '&c%1' + RentedTopLine: '%1' + RentedPriceLine: '&8%1&f/&8%2&f/&8%3' + RentedResName: '&8%1' + RentedBottomLine: '&1%1' + ForSaleTopLine: '&8A Vendre' + ForSalePriceLine: '&8%1' + ForSaleResName: '&8%1' + ForSaleBottomLine: '&5Disponible' + LookAt: '&cVous ne regardez pas le panneau' + Flag: + Set: '&eStatut du Flag (&6%1&e) defini de &6%2 &ea &6%3. (true = autorise,false = interdit)' + SetFailed: '&cVous n''avez pas acces au flag &6%1 &' + CheckTrue: '&eFlag &6%1 &eapplique pour le joueur &6%2 &edans la residence &6%3&e, valeur + = &6%4' + CheckFalse: '&eFlag &6%1 &enon applique pour le joueur &6%2 &edans la residence.' + Cleared: '&eFlags supprimes.' + RemovedAll: '&eTous les flags sont supprimes pour &6%1 &edans la residence &6%2.' + RemovedGroup: '&eTous les flags sont supprimes pour le groupe &6%1 dans la residence &6%2.' + Default: '&eFlags mis par defaut.' + Deny: '&cVous n''avez pas la &6%1 &cpermission ici.' + SetDeny: '&cLe proprietaire n''a pas acces au flag &6%1' + ChangeDeny: '&cVous ne pouvez pas changer le flag &6%1 tant que le joueur &6%2 &cplayer(s) + est dedans' + Bank: + NoAccess: '&cVous n''avez pas acces a la banque' + Name: ' &eBanque: &6%1' + NoMoney: '&cPas assez d''argent en banque' + Deposit: '&eVous venez de deposer &6%1 &edans votre banque de residence' + Withdraw: '&eVous venez de retirer &6%1 &ede votre banque de residence' + Subzone: + Rename: '&eSous-zone &6%1 renomee en &6%2' + Remove: '&eSous-zone &6%1 &esupprimee.' + Create: '&eSous-zone &6%1 &ecreee avec succes' + CreateFail: '&cImpossible de creer la Sous-zone &6%1' + Exists: '&cUne sous-zone &6%1 &cexiste deja.' + Collide: '&cSous-zone collides with subzone &6%1' + MaxAmount: '&cVous avez atteint votre limite maximum de sous zones pour cette residence' + MaxDepth: '&cVous avez atteint votre limite maximum de sous zones en profondeur.' + SelectInside: '&eVos points de selections doivent se trouver dans la residence.' + CantCreate: '&cVous n''avez pas la permission de creer de sous zones.' + CantDelete: '&cVous n''avez pas la permission de supprimer une sous zone.' + CantDeleteNotOwnerOfParent: '&cVous n''etes pas le proprietaire de la zone mere pour pouvoir supprimer cette sous zone.' + CantContract: '&cVous n''avez pas la permission de reduire la taille de la sous zone.' + CantExpand: '&cVous n''avez pas la permission d''etendre la taille de la sous zone.' + DeleteConfirm: '&eEtes vous certain de vouloir supprimer la sous zone &6%1&e, si oui utilisez &6/res confirm' + OwnerChange: '&6%2 est desormais le nouveau proprietaire de &6%1' + Residence: + Hidden: ' &e(&6Cachee&e)' + Bought: '&eVous venez d''acheter la residence &6%1' + Buy: '&6%1 &ea achete votre residence &6%2.' + BuyTooBig: '&cCette residence a des zones qui depassent vos limites autorisees.' + NotForSale: '&cCette residence n''est pas a vendre.' + ForSale: '&eLa residence &6%1 &eest maintenant en vente pour &6%2 $' + StopSelling: '&cLa Residence n''est plus en vente.' + TooMany: '&cVous avez deja atteint votre limite de residences autorisees.' + MaxRent: '&cVous avez deja atteint votre limite de residence en location.' + AlreadyRent: '&cResidence deja en location...' + NotForRent: '&cResidence n''est pas en vente...' + NotForRentOrSell: '&cResidence n''est pas en vente ou en location...' + NotRented: '&cResidence pas louee.' + Unrent: '&eResidence &6%1 &en''est plus a louer.' + RemoveRentable: '&eResidence &6%1 &en''est plus a louer desormais.' + ForRentSuccess: '&eResidence &6%1 &eest maintenant en location pour &6%2 &etous les &6%3 &ejours.' + RentSuccess: '&eVous avez mis en location la residence &6%1 &epour &6%2 &ejours.' + EndingRent: '&eLa location de &6%1 &ese termine &6%2' + AlreadyRented: '&eResidence &6%1 &eest deja en location pour &6%2' + CantAutoPay: '&eResidence n''accepte pas le paiement automatique!' + AlreadyExists: '&cUne residence existe deja sous le nom de &6%1' + Create: '&eVous venez de creer une zone protegee sous le nom &6%1&e!' + Rename: '&eResidence renomee de &6%1 &een &6%2' + Remove: '&eResidence &6%1 &esupprimee...' + CantRemove: '&cResidence &6%1 &cne peut pas etre supprimee tant que la sous zone &6%2 &csubzone est toujours loue par &6%3' + MoveDeny: '&cVous n''avez pas la permission de bouger dans la residence &6%1' + TeleportNoFlag: '&cVous n''avez pas la permission de vous teleporter dans la residence' + FlagDeny: '&cVous n''avez pas le flag &6%1 &cdans la Residence &6%2' + GiveLimits: '&cImpossible de donner la residence au joueur car il est en dehors des limites' + Give: '&eVous venez de nommer &6%2 en tant que nouveau proprietaire de la residence &6%1' + Recieve: '&eVous venez de recevoir la residence &6%1 &ede la part de &6%2' + ResList: ' &a%1. &e%2 &e- &6%3 %4&6%5' + List: ' &a%1%2 &e- &6Monde&e: &6%3' + TeleportNear: '&eTeleportation aupres de la residence la plus proche.' + SetTeleportLocation: '&ePoint de teleportation defini a cet endroit...' + PermissionsApply: '&ePermissions appliquees a cette residence.' + NotOwner: '&cVous n''etes pas le proprietaire' + RemovePlayersResidences: '&eSuppressions des permissions de toutes les residences pour le joueur &6%1' + NotIn: '&cVous n''etes pas dans une zone protegee par Residence' + PlayerNotIn: '&cLe joueur ne se situe pas dans une residence' + Kicked: '&eVous venez d''etre expulse de la residence.' + In: '&eVous vous situez dans la residence &6%1' + OwnerChange: '&eLe proprietaire de la residence &6%1 &eest maintenant &6%2' + NonAdmin: '&cVous n''etes pas admin d''une residence' + Line: '&eResidence: &6%1 ' + RentedBy: '&eLoue par: &6%1' + MessageChange: '&eMessage defini comme ...' + CantDeleteResidence: '&cVous n''avez pas la permission de supprimer la residence.' + CantExpandResidence: '&cVous n''avez pas la permission d''elargir la taille de la residence.' + CantContractResidence: '&cVous n''avez pas la permission de reduire la taille de la residence.' + NoResHere: '&cIl n''y a pas de residence ici.' + OwnerNoPermission: '&cLe proprietaire n''a pas la permission de faire ca.' + ParentNoPermission: '&cVous n''avez pas la permission de changer quoi que ce soit dans la zone mere.' + ChatDisabled: '&eChat de la Residence desactive..' + DeleteConfirm: '&eEtes vous certain de vouloir supprimer la residence &6%1&e, si oui utilisez &6/res confirm' + ChangedMain: '&eResidence principale definie &6%1' + LwcRemoved: '&eRemoved &6%1 &eLwc protections in &6%2ms' + CanBeRented: '&6%1&e peut etre loue pour &6%2 &eet &6%3 &ejours. &6/res market rent' + CanBeBought: '&6%1&e peut etre achete pour &6%2&e. &6/res market buy' + IsForRent: '&6(A louer)' + IsForSale: '&6(A vendre)' + IsRented: '&6(En location)' + Rent: + Disabled: '&cRent is disabled...' + DisableRenew: '&eResidence &6%1 &ewill now no longer re-rent upon expire.' + EnableRenew: '&eResidence &6%1 &ewill now automatically re-rent upon expire.' + NotByYou: '&cResidence is rented not by you.' + isForRent: '&2Residence available for renting.' + MaxRentDays: '&cYou cant rent for more than &6%1 &cdays at once.' + OneTime: '&cCan''t extend rent time for this residence.' + Extended: '&eRent extended for aditional &6%1 &edays for &6%2 &eresidence' + Expire: '&eRent Expire Time: &6%1' + AutoPayTurnedOn: '&eAutoPay is turned &2ON' + AutoPayTurnedOff: '&eAutoPay is turned &cOFF' + ModifyDeny: '&cCannot modify a rented residence.' + Days: '&eRent days: &6%1' + Rented: ' &6(Rented)' + RentList: ' &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7' + EvictConfirm: '&eWrite &6/res market confirm &eto evict renter from &6%1 &eresidence' + UnrentConfirm: '&eWrite &6/res market confirm &eto unrent &6%1 &eresidence' + ReleaseConfirm: '&eWrite &6/res market confirm &eto remove &6%1 &eresidence from + market' + command: + addedAllow: '&eAdded new allowed command for &6%1 &eresidence' + removedAllow: '&eRemoved allowed command for &6%1 &eresidence' + addedBlock: '&eAdded new blocked command for &6%1 &eresidence' + removedBlock: '&eRemoved blocked command for &6%1 &eresidence' + Blocked: '&eBlocked commands: &6%1' + Allowed: '&eAllowed commands: &6%1' + Rentable: + Land: '&eRentable Land: &6' + AllowRenewing: '&eCan Renew: &6%1' + StayInMarket: '&eRentable stay in market: &6%1' + AllowAutoPay: '&eRentable allows auto pay: &6%1' + DisableRenew: '&6%1 &ewill no longer renew rentable status upon expire.' + EnableRenew: '&6%1 &ewill now automatically renew rentable status upon expire.' + Economy: + LandForSale: '&eLand For Sale:' + NotEnoughMoney: '&cYou dont have enough money.' + MoneyCharged: '&eCharged &6%1 &eto your &6%2 &eaccount.' + MoneyAdded: '&eGot &6%1 &eto your &6%2 &eaccount.' + MoneyCredit: '&eCredited &6%1 &eto your &6%2 &eaccount.' + RentReleaseInvalid: '&eResidence &6%1 &eis not rented or for rent.' + RentSellFail: '&cCannot sell a Residence if it is for rent.' + SubzoneRentSellFail: '&cCannot sell a Residence if its subzone set for rent.' + ParentRentSellFail: '&cCannot sell a Residence if its parent zone is for rent.' + SubzoneSellFail: '&cCannot sell a subzone.' + SellRentFail: '&cCannot rent a Residence if it is for sale.' + ParentSellRentFail: '&cCannot rent a Residence if its parent zone is for sale.' + OwnerBuyFail: '&cCannot buy your own land!' + OwnerRentFail: '&cCannot rent your own land!' + AlreadySellFail: '&eResidence already for sale!' + LeaseRenew: '&eLease valid until &6%1' + LeaseRenewMax: '&eLease renewed to maximum allowed' + LeaseNotExpire: '&eNo such lease, or lease does not expire.' + LeaseRenewalCost: '&eRenewal cost for area &6%1 &eis &6%2' + LeaseInfinite: '&eLease time set to infinite...' + MarketDisabled: '&cEconomy Disabled!' + SellAmount: '&eSell Amount: &2%1' + SellList: ' &6%1&e. &6%2 &e(&6%3&e) - &6%4' + LeaseExpire: '&eLease Expire Time: &2%1' + Expanding: + North: '&eExpanding North &6%1 &eblocks' + West: '&eExpanding West &6%1 &eblocks' + South: '&eExpanding South &6%1 &eblocks' + East: '&eExpanding East &6%1 &eblocks' + Up: '&eExpanding Up &6%1 &eblocks' + Down: '&eExpanding Down &6%1 &eblocks' + Contracting: + North: '&eContracting North &6%1 &eblocks' + West: '&eContracting West &6%1 &eblocks' + South: '&eContracting South &6%1 &eblocks' + East: '&eContracting East &6%1 &eblocks' + Up: '&eContracting Up &6%1 &eblocks' + Down: '&eContracting Down &6%1 &eblocks' + Shifting: + North: '&eShifting North &6%1 &eblocks' + West: '&eShifting West &6%1 &eblocks' + South: '&eShifting South &6%1 &eblocks' + East: '&eShifting East &6%1 &eblocks' + Up: '&eShifting Up &6%1 &eblocks' + Down: '&eShifting Down &6%1 &eblocks' + Limits: + PGroup: '&7- &ePermissions Group:&3 %1' + RGroup: '&7- &eResidence Group:&3 %1' + Admin: '&7- &eResidence Admin:&3 %1' + CanCreate: '&7- &eCan Create Residences:&3 %1' + MaxRes: '&7- &eMax Residences:&3 %1' + MaxEW: '&7- &eMax East/West Size:&3 %1' + MaxNS: '&7- &eMax North/South Size:&3 %1' + MaxUD: '&7- &eMax Up/Down Size:&3 %1' + MinMax: '&7- &eMin/Max Protection Height:&3 %1 to %2' + MaxSubzones: '&7- &eMax Subzones:&3 %1' + MaxSubDepth: '&7- &eMax Subzone Depth:&3 %1' + MaxRents: '&7- &eMax Rents:&3 %1' + MaxRentDays: ' &eMax Rent days:&3 %1' + EnterLeave: '&7- &eCan Set Enter/Leave Messages:&3 %1' + NumberOwn: '&7- &eNumber of Residences you own:&3 %1' + Cost: '&7- &eResidence Cost Per Block:&3 %1' + Sell: '&7- &eResidence Sell Cost Per Block:&3 %1' + Flag: '&7- &eFlag Permissions:&3 %1' + MaxDays: '&7- &eMax Lease Days:&3 %1' + LeaseTime: '&7- &eLease Time Given on Renew:&3 %1' + RenewCost: '&7- &eRenew Cost Per Block:&3 %1' + Gui: + Set: + Title: '&6%1% flags' + Pset: + Title: '&6%1% %2% flags' + Actions: + - '&2Clic gauche pour activer' + - '&cClic droit pour desactiver' + - '&eShift + clic gauche pour supprimer' + InformationPage: + TopLine: '&e---< &a %1 &e >---' + Page: '&e-----< %1 >-----' + NextPage: '&e-----< %1 >-----' + NoNextPage: '&e-----------------------' + GeneralList: '&2 %1 &6- &e%2' + FlagsList: '&2 %1 &6- &e%2' + Separator: '&6▬▬▬▬▬▬▬▬▬▬' + Chat: + ChatChannelChange: Changed residence chat channel to %1 + ChatChannelLeave: Left residence chat + JoinFirst: '&4Join residence chat channel first...' + InvalidChannel: '&4Invalid Channel...' + InvalidColor: '&4Incorrect color code' + NotInChannel: '&4Player is not in channel' + Kicked: '&6%1 &ewas kicked from &6%2 &echannel' + InvalidPrefixLength: '&4Prefix is to long. Allowed length: %1' + ChangedColor: '&eResidence chat channel color changed to %1' + ChangedPrefix: '&eResidence chat channel prefix changed to %1' + Shop: + ListTopLine: '&6%1 &eListe des Shops - Page &6%2 &eof &6%3 %4' + List: ' &e%1. &6%2 &e(&6%3&e) %4' + ListVoted: '&e%1 (&6%2&e)' + ListLiked: '&eLikes: &0%1' + VotesTopLine: '&6%1 &e%2 Liste des meilleurs votes &6- &ePage &6%3 &eof &6%4 %5' + VotesList: ' &e%1. &6%2 &e%3 &7%4' + NoDesc: '&6Aucune description de shop' + Desc: |- + &6Description: + %1 + DescChange: '&6Description changee : %1' + NewBoard: '&6Successfully added new shop sign board' + BoardExist: '&cShop board already exists in this location' + DeleteBoard: '&6Right click sign of board you want to delete' + DeletedBoard: '&6Sign board removed' + IncorrectBoard: '&cThis is not sign board, try performing command again and clicking + correct sign' + InvalidSelection: '&cLeft click with selection tool top left sign and then right + click bottom right' + ToBigSelection: '&cYour selection is too big, max allowed is 16 blocks' + ToDeapSelection: '&cYour selection is too deap, max allowed is 16x16x1 blocks' + VoteChanged: '&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence' + Voted: '&6You voted, and gave &e%1 &6votes to &e%2 &6residence' + Liked: '&6You liked &e%1 &6residence' + AlreadyLiked: '&6You already liked &e%1 &6residence' + NoVotes: '&cThere is no registered votes for this residence' + CantVote: '&cResidence don''t have shop flag set to true' + VotedRange: '&6Vote range is from &e%1 &6to &e%2' + SignLines: + '1': '&e--== &8%1 &e==--' + '2': '&9%1' + '3': '&4%1' + '4': '&8%1&e (&8%2&e)' + Likes4: '&9Likes: &8%2' + RandomTeleport: + TpLimit: '&eYou can''t teleport so fast, please wait &6%1 &esec and try again' + TeleportSuccess: '&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation' + IncorrectLocation: '&6Could not find correct teleport location, please wait &e%1 + &6sec and try again.' + TeleportStarted: '&eTeleportation started, don''t move for next &6%4 &esec.' + WorldList: '&ePossible worlds: &6%1' + General: + DisabledWorld: '&cResidence plugin is disabled in this world' + UseNumbers: '&cPlease use numbers...' + # Replace all text with '' to disable this message + CantPlaceLava: '&cYou can''t place lava outside residence and higher than &6%1 + &cblock level' + # Replace all text with '' to disable this message + CantPlaceWater: '&cYou can''t place Water outside residence and higher than &6%1 + &cblock level' + NoPermission: '&cVous n''avez pas la permission. (residence)' + NoCmdPermission: '&cVous n''avez pas la permission de faire cette commande.' + DefaultUsage: '&eType &6/%1 ? &epour plus d''informations.' + MaterialGet: '&eThe material name for ID &6%1 &eis &6%2' + MarketList: '&e---- &6Market List &e----' + Separator: '&e----------------------------------------------------' + AdminOnly: '&cOnly admins have access to this command.' + InfoTool: '&e- Info Tool: &6%1' + ListMaterialAdd: '&6%1 &eadded to the residence &6%2' + ListMaterialRemove: '&6%1 &eremoved from the residence &6%2' + ItemBlacklisted: '&cYou are blacklisted from using this item here.' + WorldPVPDisabled: '&cWorld PVP is disabled.' + NoPVPZone: '&cNo PVP zone.' + InvalidHelp: '&cInvalid help page.' + TeleportDeny: '&cVous n''avez pas acces a la teleportation.' + TeleportSuccess: '&eTeleportation reussie!' + TeleportConfirm: '&cLa teleportation n''est pas securisee, vous allez tomber de &6%1 &cblocs. + Utilisez &6/res tpconfirm &cpour confirmer tout de meme la teleportation a vos risques.' + TeleportStarted: '&eTeleportation to &6%1 &estarted, don''t move for next &6%2 + &esec.' + TeleportTitle: '&eTeleportation !' + TeleportTitleTime: '&6%1' + TeleportCanceled: '&eTeleportation canceled!' + NoTeleportConfirm: '&eThere is no teleports waiting for confirmation!' + HelpPageHeader: '&eHelp Pages - &6%1 &e- Page <&6%2 &eof &6%3&e>' + ListExists: '&cList already exists...' + ListRemoved: '&eList removed...' + ListCreate: '&eCreated list &6%1' + PhysicalAreas: '&eZone physique' + CurrentArea: '&eZone actuelle: &6%1' + TotalResSize: '&eTaille Totale: &6%1m³ (%2m²)' + TotalWorth: '&eValeur totale de la zone: &6%1 &e(&6%2&e)' + NotOnline: '&eTarget player must be online.' + NextPage: '&ePage suivante' + NextInfoPage: '&2| &ePage suivante &2>>>' + PrevInfoPage: '&2<<< &ePage precedente &2|' + GenericPages: '&ePage &6%1 &esur &6%2 &e(&6%3&e)' + WorldEditNotFound: '&cWorldEdit was not detected.' + CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + AdminToggleTurnOn: '&eAutomatic resadmin toggle turned &6On' + AdminToggleTurnOff: '&eAutomatic resadmin toggle turned &6Off' + NoSpawn: '&eYou do not have &6move &epermissions at your spawn point. Relocating' + CompassTargetReset: '&eYour compass has been reset' + CompassTargetSet: '&eYour compass now points to &6%1' + Ignorelist: '&2Ignorelist:&6' + Blacklist: '&cBlacklist:&6' + LandCost: '&eLand cost: &6%1' + 'True': '&2Active (true)' + 'False': '&cDesactive (false)' + Removed: '&6Supprime (remove)' + FlagState: '&eEtat du flag: %1' + Land: '&eTerre: &6%1' + Cost: '&eCout: &6%1 &epour &6%2 &ejours' + Status: '&eStatut: %1' + Available: '&2Disponible' + Size: ' &eTaille: &6%1' + ResidenceFlags: '&eFlags actuels: &6%1' + PlayersFlags: '&ePermissions de joueurs: &6%1' + GroupFlags: '&eGroupes: &6%1' + OthersFlags: '&eAutres permissions: &6%1' + Moved: '&eMoved...' + Name: '&eNom: &6%1' + Lists: '&eListes: &6' + Residences: '&eResidences&6' + CreatedOn: '&eCreation le: &6%1' + Owner: '&eProprietaire: &6%1' + World: '&eMonde: &6%1' + Subzones: '&eSous-zones:' + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. + NewPlayerInfo: '&eIf you want to create protected area for your house, please + use wooden axe to select opposite sides of your home and execute command &2/res + create YourResidenceName' +CommandHelp: + Description: Contains Help for Residence + SubCommands: + res: + Description: Main Residence Command + Info: + - See the residence wiki for more help. + - 'Wiki: residencebukkitmod.wikispaces.com' + - Use /[command] ? to view more help information. + SubCommands: + auto: + Description: Create maximum allowed residence around you + Info: + - '&eUsage: &6/res auto (residence name) (radius)' + select: + Description: Selection Commands + Info: + - This command selects areas for usage with residence. + - /res select [x] [y] [z] - selects a radius of blocks, with you in the middle. + SubCommands: + coords: + Description: Display selected coordinates + Info: + - 'Usage: /res select coords' + size: + Description: Display selected size + Info: + - 'Usage: /res select size' + auto: + Description: Turns on auto selection tool + Info: + - 'Usage: /res select auto [playername]' + cost: + Description: Display selection cost + Info: + - 'Usage: /res select cost' + vert: + Description: Expand Selection Vertically + Info: + - 'Usage: /res select vert' + - Will expand selection as high and as low as allowed. + sky: + Description: Expand Selection to Sky + Info: + - 'Usage: /res select sky' + - Expands as high as your allowed to go. + bedrock: + Description: Expand Selection to Bedrock + Info: + - 'Usage: /res select bedrock' + - Expands as low as your allowed to go. + expand: + Description: Expand selection in a direction. + Info: + - 'Usage: /res select expand ' + - Expands in the direction your looking. + shift: + Description: Shift selection in a direction + Info: + - 'Usage: /res select shift ' + - Pushes your selection by in the direction your looking. + chunk: + Description: Select the chunk your currently in. + Info: + - 'Usage: /res select chunk' + - Selects the chunk your currently standing in. + residence: + Description: Select a existing area in a residence. + Info: + - Usage /res select + - Selects a existing area in a residence. + worldedit: + Description: Set selection using the current WorldEdit selection. + Info: + - Usage /res select worldedit + - Sets selection area using the current WorldEdit selection. + padd: + Description: Add player to residence. + Info: + - 'Usage: /res padd [player]' + - Adds essential flags for player + signconvert: + Description: Converts signs from ResidenceSign plugin + Info: + - '&eUsage: &6/res signconvert' + - Will try to convert saved sign data from 3rd party plugin + listallhidden: + Description: List All Hidden Residences (ADMIN ONLY) + Info: + - 'Usage: /res listhidden ' + - Lists all hidden residences on the server. + bank: + Description: Manage money in a Residence + Info: + - 'Usage: /res bank [deposit/withdraw] [amount]' + - You must be standing in a Residence + - You must have the +bank flag. + create: + Description: Create Residences + Info: + - 'Usage: /res create ' + listall: + Description: List All Residences + Info: + - 'Usage: /res listall ' + - Lists all residences on the server. (except hidden ones that you dont own) + info: + Description: Show info on a residence. + Info: + - 'Usage: /res info ' + - Leave off to display info for the residence your currently in. + area: + Description: Manage physical areas for a residence. + SubCommands: + list: + Description: List physical areas in a residence + Info: + - 'Usage: /res area list [residence] ' + listall: + Description: List coordinates and other info for areas + Info: + - 'Usage: /res area listall [residence] ' + add: + Description: Add physical areas to a residence + Info: + - 'Usage: /res area add [residence] [areaID]' + - You must first select two points first. + remove: + Description: Remove physical areas from a residence + Info: + - 'Usage: /res area remove [residence] [areaID]' + replace: + Description: Replace physical areas in a residence + Info: + - 'Usage: /res area replace [residence] [areaID]' + - You must first select two points first. + - Replacing a area will charge the difference in size if the new area is bigger. + give: + Description: Give residence to player. + Info: + - '&eUsage: &6/res give [player]' + - Gives your owned residence to target player + renamearea: + Description: Rename area name for residence + Info: + - '&eUsage: &6/res removeworld [residence] [oldAreaName] [newAreaName]' + contract: + Description: Contracts residence in direction you looking + Info: + - 'Usage: /res contract (residence [amount])' + - Contracts residence in direction you looking. + - Residence name is optional + check: + Description: Check flag state for you + Info: + - '&eUsage: &6/res check [residence] [flag] (playername)' + gset: + Description: Set flags on a specific group for a Residence. + Info: + - 'Usage: /res gset [group] [flag] [true/false/remove]' + - To see a list of flags, use /res flags ? + list: + Description: List Residences + Info: + - 'Usage: /res list ' + - Lists all the residences a player owns (except hidden ones). + - If listing your own residences, shows hidden ones as well. + - To list everyones residences, use /res listall. + version: + Description: Show residence version + Info: + - 'Usage: /res version' + tool: + Description: Shows residence selection and info tool names + Info: + - '&eUsage: &6/res tool' + pdel: + Description: Remove player from residence. + Info: + - 'Usage: /res pdel [player]' + - Removes essential flags from player + market: + Description: Buy, Sell, or Rent Residences + Info: + - '&eUsage: &6/res market ? for more Info' + SubCommands: + Info: + Description: Get economy Info on residence + Info: + - 'Usage: /res market Info [residence]' + - Shows if the Residence is for sale or for rent, and the cost. + list: + Description: Lists rentable and for sale residences. + Info: + - 'Usage: /res market list' + SubCommands: + rent: + Description: Lists rentable residences. + Info: + - '&eUsage: &6/res market list rent' + sell: + Description: Lists for sale residences. + Info: + - '&eUsage: &6/res market list sell' + sell: + Description: Sell a residence + Info: + - 'Usage: /res market sell [residence] [amount]' + - Puts a residence for sale for [amount] of money. + - Another player can buy the residence with /res market buy + sign: + Description: Set market sign + Info: + - 'Usage: /res market sign [residence]' + - Sets market sign you are looking at. + buy: + Description: Buy a residence + Info: + - 'Usage: /res market buy [residence]' + - Buys a Residence if its for sale. + unsell: + Description: Stops selling a residence + Info: + - 'Usage: /res market unsell [residence]' + rent: + Description: Rent a residence + Info: + - 'Usage: /res market rent [residence] ' + - Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it. + rentable: + Description: Make a residence rentable. + Info: + - 'Usage: /res market rentable [residence] [cost] [days] ' + - Makes a residence rentable for [cost] money for every [days] number of days. If is true, the residence will automatically be able to be rented again after the current rent expires. + autopay: + Description: Sets residence AutoPay to given value + Info: + - '&eUsage: &6/res market autopay [true/false]' + payrent: + Description: Pays rent for defined residence + Info: + - '&eUsage: &6/res market payrent ' + confirm: + Description: Confirms residence unrent/release action + Info: + - '&eUsage: &6/res market confirm' + release: + Description: Remove a residence from rent or rentable. + Info: + - 'Usage: /res market release [residence]' + - If you are the renter, this command releases the rent on the house for you. + - If you are the owner, this command makes the residence not for rent anymore. + rc: + Description: Joins current or defined residence chat chanel + Info: + - '&eUsage: &6/res rc (residence)' + - Teleports you to random location in defined world. + SubCommands: + leave: + Description: Leaves current residence chat chanel + Info: + - '&eUsage: &6/res rc leave' + - If you are in residence chat cnahel then you will leave it + setcolor: + Description: Sets residence chat chanel text color + Info: + - '&eUsage: &6/res rc setcolor [colorCode]' + - Sets residence chat chanel text color + setprefix: + Description: Sets residence chat chanel prefix + Info: + - '&eUsage: &6/res rc setprefix [newName]' + - Sets residence chat chanel prefix + kick: + Description: Kicks player from chanel + Info: + - '&eUsage: &6/res rc kick [player]' + - Kicks player from chanel + expand: + Description: Expands residence in direction you looking + Info: + - 'Usage: /res expand (residence) [amount]' + - Expands residence in direction you looking. + - Residence name is optional + compass: + Description: Set compass ponter to residence location + Info: + - '&eUsage: &6/res compass ' + lists: + Description: Predefined permission lists + Info: + - Predefined permissions that can be applied to a residence. + SubCommands: + add: + Description: Add a list + Info: + - 'Usage: /res lists add ' + remove: + Description: Remove a list + Info: + - 'Usage: /res lists remove ' + apply: + Description: Apply a list to a residence + Info: + - 'Usage: /res lists apply ' + set: + Description: Set a flag + Info: + - 'Usage: /res lists set ' + pset: + Description: Set a player flag + Info: + - 'Usage: /res lists pset ' + gset: + Description: Set a group flag + Info: + - 'Usage: /res lists gset ' + view: + Description: View a list. + Info: + - '&eUsage: &6/res lists view ' + reset: + Description: Reset residence to default flags. + Info: + - '&eUsage: &6/res reset ' + - Resets the flags on a residence to their default. You must be the owner or an admin to do this. + gui: + Description: Opens gui (Spout only) + Info: + - '&eUsage: &6/res gui ' + listhidden: + Description: List Hidden Residences (ADMIN ONLY) + Info: + - 'Usage: /res listhidden ' + - Lists hidden residences for a player. + resbank: + Description: Deposit or widraw money from residence bank + Info: + - '&eUsage: &6/res resbank [deposit/withdraw] [amount]' + setmain: + Description: Sets defined residence as main to show up in chat as prefix + Info: + - '&eUsage: &6/res setmain (residence)' + - Set defined residence as main. + server: + Description: Make land server owned (admin only). + Info: + - 'Usage: /resadmin server [residence]' + - Make a residence server owned. + rt: + Description: Teleports to random location in world + Info: + - 'Usage: /res rt' + - Teleports you to random location in defined world. + mirror: + Description: Mirrors Flags + Info: + - 'Usage: /res mirror [Source Residence] [Target Residence]' + - Mirrors flags from one residence to another. You must be owner of both or a admin to do this. + shop: + Description: Manage residence shop + Info: + - Manages residence shop feature + SubCommands: + list: + Description: Shows list of res shops + Info: + - 'Usage: /res shop list' + - Shows full list of all residences with shop flag + vote: + Description: Vote for residence shop + Info: + - 'Usage: /res shop vote [amount]' + - Votes for current or defined residence + like: + Description: Give like for residence shop + Info: + - 'Usage: /res shop like ' + - Gives like for residence shop + votes: + Description: Shows res shop votes + Info: + - 'Usage: /res shop votes ' + - Shows full vote list of current or defined residence shop + likes: + Description: Shows res shop likes + Info: + - 'Usage: /res shop likes ' + - Shows full like list of current or defined residence shop + setdesc: + Description: Sets residence shop description + Info: + - 'Usage: /res shop setdesc [text]' + - Sets residence shop description. Color code supported. For new line use /n + createboard: + Description: Create res shop board + Info: + - 'Usage: /res shop createboard [place]' + - Creates res shop board from selected area. Place - position from which to start filling board + deleteboard: + Description: Deletes res shop board + Info: + - 'Usage: /res shop deleteboard' + - Deletes res shop board bi right clicking on one of signs + lset: + Description: Change blacklist and ignorelist options + Info: + - 'Usage: /res lset [blacklist/ignorelist] [material]' + - 'Usage: /res lset info' + - Blacklisting a material prevents it from being placed in the residence. + - Ignorelist causes a specific material to not be protected by Residence. + pset: + Description: Set flags on a specific player for a Residence. + Info: + - 'Usage: /res pset [player] [flag] [true/false/remove]' + - 'Usage: /res pset [player] removeall' + - To see a list of flags, use /res flags ? + flags: + Description: List of flags + Info: + - '&aPour activer un flag : &2TRUE&r ; &cPour désactiver un falg : &4FALSE' + - ' ' + - '&ctrusted - &dDonne la permission de construire, utiliser, bouger, stocker et se teleporter a un joueur.' + - '&abuild - &7Autorise ou non la construction' + - '&ause - &7Autorise ou non l utilisation de portes, boutons, leviers etc...' + - '&amove - &7Autorise ou non le mouvement dans la residence.' + - '&acontainer - &7Autorise ou non l utilisation de fours, coffres, dispensers, etc...' + - '&aplace - &7Autorise ou non le placement de blocs. Ce flag prime sur le flag build.' + - '&adestroy - &7Autorise ou non la destruction de blocs. Ce flag prime sur le flag build.' + - '&apvp - &7Autorise ou non le pvp.' + - '&atp - &7Autorise ou non la teleportation a votre residence.' + - '&aadmin - &7Autorise ou non la possibilite de changer les flags de la residence NE PAS DONNER A N IMPORTE QUI.' + - '&asubzone - &7Autorise ou non un joueur a faire des sous zones.' + - '&amonsters - &7Autorise ou non le spawn de mobs.' + - '&aanimals - &7Autorise ou non le spawn d animaux.' + - '&ahealing - &7Si active, les joueurs seront soignes dans la residence.' + - '&atnt - &7Autorise ou non l explosion de TNT' + - '&acreeper - &7Autorise ou non l explosion de creeper' + - '&aignite - &7Autorise ou non la possibilite de mettre le feu.' + - '&afirespread - &7Autorise ou non la propagation du feu.' + - '&abucket - &7Autorise ou non l utilisation de seau.' + - '&aflow - &7Autorise ou non l ecoulement d eau ou de lave.' + - '&alavaflow - &7Autorise ou non l ecoulement de lave.' + - '&awaterflow - &7Autorise ou non l ecoulement d eau.' + - '&adamage - &7Autorise ou non les degats.' + - '&apiston - &7Autorise ou non l activation des pistons.' + - '&ahidden - &7Permet de cacher votre residence de la /res list.' + - '&acake - &7Autorise ou non un joueur a manger un gateau.' + - '&alever - &7Autorise ou non l utilisation de levier.' + - '&abutton - &7Autorise ou non l utilisation de bouttons.' + - '&adiode - &7Autorise ou non l utilisation de redstone repeaters.' + - '&adoor - &7Autorise ou non l utilisation de portes et trappes.' + - '&atable - &7Autorise ou non l utilisation de table de craft.' + - '&aenchant - &7Autorise ou non l utilisation de table d enchantement.' + - '&abrew - &7Autorise ou non l utilisation d alambic.' + - '&abed - &7Autorise ou non l utilisation d un lit.' + - '&apressure - &7Autorise ou non l utilisation de plaques de pressions.' + - '&anote - &7Autorise ou non l utilisation de blocs de musique.' + - '&aredstone - &7Donne les permissions d utilisation des leviers, diodes, bouttons, plaques et blocs de musiques.' + - '&acraft - &7Donne les permissions d utilisation des tables de craft, enchant et alambic.' + - '&aburn - &7allows or denys Mob combustion in residences' + SubCommands: + anvil: + Description: Autorise ou non l utilisation d une enclume. + Info: + - '&eUsage: &6/res set/pset anvil true/false/remove' + admin: + Description: Autorise ou non la possibilite de changer les flags de la residence NE PAS DONNER A N IMPORTE QUI. + Info: + - '&eUsage: &6/res pset [flag] true/false/remove' + animalkilling: + Description: Autorise ou non le meurtre d animaux. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + animals: + Description: Autorise ou non le spawn d animaux. + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + backup: + Description: Prevent riding a horse + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + bank: + Description: Autorise ou non le depot ou retrait d argent en banque. + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + bed: + Description: Autorise ou non l utilisation des lits. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + beacon: + Description: Autorise ou non l interaction avec une balise. + Info: + - '&eUsage: &6/res set/pset beacon true/false/remove' + brew: + Description: Autorise ou non l utilisation d un alambic + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + build: + Description: Autorise ou non la construction dans la residence. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + burn: + Description: allows or denys Mob combustion in residences + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + button: + Description: Autorise ou non l utilisation des bouttons. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + cake: + Description: Autorise ou non de manger un gateau + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + canimals: + Description: allows or denys custom animal spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + chorustp: + Description: Autorise ou non la teleportation avec un fruit de l end. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + chat: + Description: Autorise a rejoindre le chat + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + cmonsters: + Description: allows or denys custom monster spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + commandblock: + Description: Autorise ou non l interaction avec les commands blocks. + Info: + - '&eUsage: &6/res set/pset commandblock true/false/remove' + command: + Description: Autorise ou non l utilisation de commandes. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + container: + Description: &7Autorise ou non l utilisation de fours, coffres, dispensers, etc... + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + coords: + Description: Hides residence coordinates + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + craft: + Description: Donne les permissions d utilisation des tables de craft, enchant et alambic. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + creeper: + Description: Autorise ou non les explosions de creeper. + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + dragongrief: + Description: Prevents ender dragon block griefing + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + day: + Description: sets day time in residence + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + dye: + Description: Autorise ou non la tonte des moutons. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + damage: + Description: Autorise ou non les degats. + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + decay: + Description: Autorise ou non la chute de pousses d arbres. + Info: + - '&eUsage: &6/res set decay true/false/remove' + destroy: + Description: Autorise ou non la destruction de blocs. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + dryup: + Description: Prevents land from drying up + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + diode: + Description: allows or denys players to use redstone repeaters + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + door: + Description: allows or denys players to use doors and trapdoors + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + egg: + Description: Allows or denys interaction with dragon egg + Info: + - '&eUsage: &6/res set/pset egg true/false/remove' + enchant: + Description: allows or denys players to use enchanting tables + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + explode: + Description: Allows or denys explosions in residences + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + enderpearl: + Description: allow or disallow teleporting to the residence with enderpearl + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + fallinprotection: + Description: Protects from blocks falling into residence + Info: + - '&eUsage: &6/res set fallinprotection true/false/remove' + falldamage: + Description: Protects players from fall damage + Info: + - '&eUsage: &6/res set falldamage true/false/remove' + feed: + Description: setting to true makes the residence feed its occupants + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + fireball: + Description: Allows or denys fire balls in residences + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + firespread: + Description: allows or denys fire spread + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + flowinprotection: + Description: Allows or denys liquid flow into residence + Info: + - '&eUsage: &6/res set flowinprotection true/false/remove' + flow: + Description: allows or denys liquid flow + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + flowerpot: + Description: Allows or denys interaction with flower pot + Info: + - '&eUsage: &6/res set/pset flowerpot true/false/remove' + grow: + Description: Allows or denys plant growing + Info: + - '&eUsage: &6/res set grow true/false/remove' + glow: + Description: Players will start glowing when entering residence + Info: + - '&eUsage: &6/res set glow true/false/remove' + hotfloor: + Description: Prevent damage from magma blocks + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + hidden: + Description: Permet de cacher votre residence de la /res list + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + hook: + Description: allows or denys fishing rod hooking entities + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + healing: + Description: setting to true makes the residence heal its occupants + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + iceform: + Description: Prevents from ice forming + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + icemelt: + Description: Prevents ice from melting + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + ignite: + Description: allows or denys fire ignition + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + jump2: + Description: Allows to jump 2 blocks high + Info: + - '&eUsage: &6/res set jump2 true/false/remove' + jump3: + Description: Allows to jump 3 blocks high + Info: + - '&eUsage: &6/res set jump3 true/false/remove' + keepinv: + Description: Players keeps inventory after death + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + keepexp: + Description: Players keeps exp after death + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + lavaflow: + Description: allows or denys lava flow, overrides flow + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + leash: + Description: allows or denys aninal leash + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + lever: + Description: allows or denys players to use levers + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + mobexpdrop: + Description: Prevents mob droping exp on death + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + mobitemdrop: + Description: Prevents mob droping items on death + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + mobkilling: + Description: Autorise ou non le meurtre de mobs. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + monsters: + Description: Autorise ou non le spawn de monstres. + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + move: + Description: Autorise ou non le mouvement dans votre residence. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + nanimals: + Description: allows or denys natural animal spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + nmonsters: + Description: allows or denys natural monster spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + night: + Description: sets night time in residence + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + nofly: + Description: Autorise ou non le fly dans votre residence. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + nomobs: + Description: Prevents monsters from entering residence residence + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + note: + Description: allows or denys players to use note blocks + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + nodurability: + Description: Prevents item durability loss + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + overridepvp: + Description: Overrides any plugin pvp protection + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + pressure: + Description: allows or denys players to use pressure plates + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + piston: + Description: allow or deny pistons from pushing or pulling blocks in the residence + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + pistonprotection: + Description: Enables or disabled piston block move in or out of residence + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + place: + Description: Autorise ou non le placement de blocs. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + pvp: + Description: Autorise ou non le pvp. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + rain: + Description: Sets weather to rainny in residence + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + redstone: + Description: Gives lever, diode, button, pressure, note flags + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + respawn: + Description: Automaticaly respawns player + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + riding: + Description: Prevent riding a horse + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + sun: + Description: Sets weather to sunny in residence + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + shop: + Description: Ajoute votre residence a la liste des shops joueurs. + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + snowtrail: + Description: Prevents snowman snow trails + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + spread: + Description: Prevents block spreading + Info: + - '&eUsage: &6/res set spread true/false/remove' + snowball: + Description: Prevents snowball knockback + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + sanimals: + Description: allows or denys spawner or spawn egg animal spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + shear: + Description: allows or denys sheep shear + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + smonsters: + Description: allows or denys spawner or spawn egg monster spawns + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + subzone: + Description: allow a player to make subzones in the residence + Info: + - '&eUsage: &6/res pset [flag] true/false/remove' + table: + Description: allows or denys players to use workbenches + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + tnt: + Description: allow or deny tnt explosions + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + tp: + Description: Autorise ou non la teleportation a votre residence. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + trade: + Description: Allows or denys villager trading in residence + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + trample: + Description: Allows or denys crop trampling in residence + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + trusted: + Description: Donne la permission de construire, bouger, utiliser, se téléporter, stocker a un joueur + Info: + - '&eUsage: &6/res pset [flag] true/false/remove' + use: + Description: Autorise ou non l utilisation de portes, leviers, boutons etc... + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + vehicledestroy: + Description: Autorise ou non la destruction de vehicules comme le bateau. + Info: + - '&eUsage: &6/res set/pset [flag] true/false/remove' + witherspawn: + Description: Autorise ou non le spawn de wither. + Info: + - '&eUsage: &6/res set witherspawn true/false/remove' + witherdamage: + Description: Autorise ou non les degats infliges par le wither + Info: + - '&eUsage: &6/res set witherdamage true/false/remove' + witherdestruction: + Description: Autorise ou non la destruction inflige par le wither. + Info: + - '&eUsage: &6/res set witherdestruction true/false/remove' + waterflow: + Description: Autorise ou non l ecoulement de l eau. + Info: + - '&eUsage: &6/res set [flag] true/false/remove' + wspeed1: + Description: Change players walk speed in residence to %1 + Info: + - '&eUsage: &6/res set wspeed1 true/false/remove' + wspeed2: + Description: Change players walk speed in residence to %1 + Info: + - '&eUsage: &6/res set wspeed2 true/false/remove' + show: + Description: Show residence boundaries + Info: + - '&eUsage: &6/res show ' + remove: + Description: Remove residences. + Info: + - 'Usage: /res remove ' + signupdate: + Description: Updated residence signs (Admin only) + Info: + - 'Usage: /res signupdate' + current: + Description: Show residence your currently in. + Info: + - 'Usage: /res current' + reload: + Description: reload lanf or config files + Info: + - '&eUsage: &6/res reload [config/lang]' + setowner: + Description: Change owner of a residence (admin only). + Info: + - 'Usage: /resadmin setowner [residence] [player]' + unstuck: + Description: Teleports outside of residence + Info: + - '&eUsage: &6/res unstuck' + subzone: + Description: Create subzones in residences. + Info: + - 'Usage: /res subzone [subzone name]' + - If residence name is left off, will attempt to use residence your standing in. + removeworld: + Description: Remove all residences from world + Info: + - '&eUsage: &6/res removeworld [worldname]' + - Can only be used from console + limits: + Description: Show your limits. + Info: + - 'Usage: /res limits' + - Shows the limitations you have on creating and managing residences. + set: + Description: Set general flags on a Residence + Info: + - 'Usage: /res set [flag] [true/false/remove]' + - To see a list of flags, use /res flags ? + - These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?) + clearflags: + Description: Remove all flags from residence + Info: + - '&eUsage: &6/res clearflags ' + message: + Description: Manage residence enter / leave messages + Info: + - 'Usage: /res message [enter/leave] [message]' + - Set the enter or leave message of a residence. + - 'Usage: /res message remove [enter/leave]' + - Removes a enter or leave message. + command: + Description: Manages allowed or blocked commands in residence + Info: + - '&eUsage: &6/res command ' + - Shows list, adds or removes allowed or disabled commands in residence + - Use _ to include command with multiple variables + confirm: + Description: Confirms removal of a residence. + Info: + - 'Usage: /res confirm' + - Confirms removal of a residence. + resadmin: + Description: Enabled or disable residence admin + Info: + - '&eUsage: &6/res resadmin [on/off]' + tpset: + Description: Set the teleport location of a Residence + Info: + - 'Usage: /res tpset' + - This will set the teleport location for a residence to where your standing. + - You must be standing in the residence to use this command. + - You must also be the owner or have the +admin flag for the residence. + removeall: + Description: Remove all residences owned by a player. + Info: + - 'Usage: /res removeall [owner]' + - Removes all residences owned by a specific player. + - Requires /resadmin if you use it on anyone besides yourself. + tpconfirm: + Description: Ignore unsafe teleportation warning + Info: + - 'Usage: /res tpconfirm' + - Teleports you to a residence, when teleportation is unsafe. + material: + Description: Check if material exists by its id + Info: + - '&eUsage: &6/res material [material]' + kick: + Description: Kicks player from residence. + Info: + - 'Usage: /res kick ' + - You must be the owner or an admin to do this. + - Player should be online. + rename: + Description: Renames a residence. + Info: + - 'Usage: /res rename [OldName] [NewName]' + - You must be the owner or an admin to do this. + - The name must not already be taken by another residence. + sublist: + Description: List Residence Subzones + Info: + - 'Usage: /res sublist ' + - List subzones within a residence. + lease: + Description: Manage residence leases + Info: + - 'Usage: /res lease [renew/cost] [residence]' + - /res lease cost will show the cost of renewing a residence lease. + - /res lease renew will renew the residence provided you have enough money. + SubCommands: + set: + Description: Set the lease time (admin only) + Info: + - 'Usage: /resadmin lease set [residence] [#days/infinite]' + - Sets the lease time to a specified number of days, or infinite. + renew: + Description: Renew the lease time + Info: + - 'Usage: /resadmin lease renew ' + - Renews the lease time for current or specified residence. + expires: + Description: Lease end date + Info: + - 'Usage: /resadmin lease expires ' + - Shows when expires residence lease time. + cost: + Description: Shows renew cost + Info: + - 'Usage: /resadmin lease cost ' + - Shows how much money you need to renew residence lease. + tp: + Description: Teleport to a residence + Info: + - 'Usage: /res tp [residence]' + - Teleports you to a residence, you must have +tp flag access or be the owner. + - Your permission group must also be allowed to teleport by the server admin. + resreload: + Description: Reload residence (admin only). + Info: + - 'Usage: /resreload' + resload: + Description: Load residence save file (UNSAFE, admin only). + Info: + - 'Usage: /resload' + - UNSAFE command, does not save residences first. + - Loads the residence save file after you have made changes. \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index ff2b62404..1f04e1b51 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -193,7 +193,7 @@ public class Residence extends JavaPlugin { public Map deleteConfirm; public Map UnrentConfirm = new HashMap(); public List resadminToggle; - private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW" }; + private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW", "French" }; private ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); private Map cachedPlayerNameUUIDs = new HashMap(); private WorldEditPlugin wep = null; From df4771849f2ee43fc236212ba4f0f248a2af0eb8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 4 Jan 2017 16:15:17 +0200 Subject: [PATCH 0312/1142] Added fly flag to allow flying in residence when fly set to true --- .../bukkit/residence/ConfigManager.java | 33 +++++- .../bekvon/bukkit/residence/Residence.java | 23 ++++ .../residence/actionBarNMS/v1_10_R1.java | 4 + .../residence/actionBarNMS/v1_11_R1.java | 6 +- .../residence/actionBarNMS/v1_7_R4.java | 54 +++++---- .../residence/actionBarNMS/v1_8_R1.java | 110 +++++++++--------- .../residence/actionBarNMS/v1_8_R2.java | 110 +++++++++--------- .../residence/actionBarNMS/v1_8_R3.java | 110 +++++++++--------- .../residence/actionBarNMS/v1_9_R1.java | 110 +++++++++--------- .../residence/actionBarNMS/v1_9_R2.java | 110 +++++++++--------- .../bukkit/residence/containers/Flags.java | 1 + .../listeners/ResidencePlayerListener.java | 54 +++++++++ src/plugin.yml | 2 +- 13 files changed, 434 insertions(+), 293 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index f82ceeee0..c4cf9529f 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -154,6 +154,10 @@ public class ConfigManager { protected boolean useVisualizer; protected boolean DisableListeners; protected boolean DisableCommands; + +// protected boolean DisableNoFlagMessageUse; +// protected List DisableNoFlagMessageWorlds = new ArrayList(); + protected boolean TNTExplodeBelow; protected int TNTExplodeBelowLevel; protected boolean CreeperExplodeBelow; @@ -174,6 +178,7 @@ public class ConfigManager { private Double WalkSpeed2; protected Location KickLocation; + protected Location FlyLandLocation; protected List RTeleport = new ArrayList(); @@ -414,6 +419,12 @@ public void UpdateConfigFile() { c.getW().addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); DisableCommands = c.get("Global.Optimizations.DisabledWorlds.DisableCommands", true); +// c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", +// "You can bypass this with residence.checkbadflags permission node"); +// DisableNoFlagMessageUse = c.get("Global.Optimizations.DisabledNoFlagMessage.Use", false); +// c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Worlds", "List Of Worlds where player wont get error messages"); +// DisableNoFlagMessageWorlds = c.get("Global.Optimizations.DisabledNoFlagMessage.Worlds", Arrays.asList(Bukkit.getWorlds().get(0).getName())); + c.getW().addComment("Global.Optimizations.GlobalChat.Enabled", "Enables or disables chat modification by including players main residence name"); GlobalChatEnabled = c.get("Global.Optimizations.GlobalChat.Enabled", false); @@ -448,7 +459,7 @@ public void UpdateConfigFile() { c.getW().addComment("Global.Optimizations.KickLocation.Use", "By setting this to true, when player kicks another player from residence, he will be teleported to this location instead of getting outside residence"); Boolean UseKick = c.get("Global.Optimizations.KickLocation.Use", false); - String KickLocationWorld = c.get("Global.Optimizations.KickLocation.World", defaultWorldName, false); + String KickLocationWorld = c.get("Global.Optimizations.KickLocation.World", defaultWorldName); Double KickLocationX = c.get("Global.Optimizations.KickLocation.X", 0.5); Double KickLocationY = c.get("Global.Optimizations.KickLocation.Y", 63.0); Double KickLocationZ = c.get("Global.Optimizations.KickLocation.Z", 0.5); @@ -465,6 +476,22 @@ public void UpdateConfigFile() { } } + c.getW().addComment("Global.Optimizations.FlyLandLocation.World", "Used when players fly state is being turned to false because of fly flag and there is no solid land where to land for player"); + String FlyLocationWorld = c.get("Global.Optimizations.FlyLandLocation.World", defaultWorldName); + Double FlyLocationX = c.get("Global.Optimizations.FlyLandLocation.X", 0.5); + Double FlyLocationY = c.get("Global.Optimizations.FlyLandLocation.Y", 63.0); + Double FlyLocationZ = c.get("Global.Optimizations.FlyLandLocation.Z", 0.5); + c.getW().addComment("Global.Optimizations.FlyLandLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); + Double FlyPitch = c.get("Global.Optimizations.FlyLandLocation.Pitch", 0.0); + c.getW().addComment("Global.Optimizations.FlyLandLocation.Yaw", "Head position to left and right. Range from -180 to 180"); + Double FlyYaw = c.get("Global.Optimizations.FlyLandLocation.Yaw", 0.0); + World world = Bukkit.getWorld(FlyLocationWorld); + if (world != null) { + FlyLandLocation = new Location(world, FlyLocationX, FlyLocationY, FlyLocationZ); + FlyLandLocation.setPitch(FlyPitch.floatValue()); + FlyLandLocation.setYaw(FlyYaw.floatValue()); + } + c.getW().addComment("Global.Optimizations.ShortInfo.Use", "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); ShortInfoUse = c.get("Global.Optimizations.ShortInfo.Use", false); @@ -1648,6 +1675,10 @@ public Location getKickLocation() { return KickLocation; } + public Location getFlyLandLocation() { + return FlyLandLocation; + } + public int getrtMaxTries() { return rtMaxTries; } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 1f04e1b51..50ca7b4a9 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1669,7 +1669,30 @@ public void msg(Player player, String text) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); } +// private boolean isWorldOk(CommandSender sender) { +// if (!this.getConfigManager().DisableNoFlagMessageUse) +// return true; +// +// if (sender.hasPermission("residence.checkbadflags")) +// return true; +// +// if (!(sender instanceof Player)) +// return true; +// +// Player player = (Player) sender; +// String world = player.getWorld().getName(); +// +// for (String one : this.getConfigManager().DisableNoFlagMessageWorlds) { +// if (one.equalsIgnoreCase(world)) +// return false; +// } +// return true; +// } + public void msg(CommandSender sender, lm lm, Object... variables) { +// if (!isWorldOk(sender)) +// return; + if (sender != null) if (getLM().containsKey(lm.getPath())) { String msg = getLM().getMessage(lm, variables); diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java index 6bcdaba51..d76b64393 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java @@ -18,6 +18,8 @@ public class v1_10_R1 implements ABInterface { @Override public void send(CommandSender sender, String msg) { + if (msg.isEmpty()) + return; if (sender instanceof Player) send((Player) sender, msg); else @@ -26,6 +28,8 @@ public void send(CommandSender sender, String msg) { @Override public void send(Player player, String msg) { + if (msg.isEmpty()) + return; try { CraftPlayer p = (CraftPlayer) player; IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_11_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_11_R1.java index 21ef887f2..7448651d6 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_11_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_11_R1.java @@ -18,6 +18,8 @@ public class v1_11_R1 implements ABInterface { @Override public void send(CommandSender sender, String msg) { + if (msg.isEmpty()) + return; if (sender instanceof Player) send((Player) sender, msg); else @@ -26,6 +28,8 @@ public void send(CommandSender sender, String msg) { @Override public void send(Player player, String msg) { + if (msg.isEmpty()) + return; try { CraftPlayer p = (CraftPlayer) player; IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); @@ -35,7 +39,7 @@ public void send(Player player, String msg) { player.sendMessage(msg); } } - + @Override public void sendTitle(Player player, Object title, Object subtitle) { CraftPlayer Cplayer = (CraftPlayer) player; diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java index 291f92e55..250a60612 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java @@ -1,25 +1,29 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -public class v1_7_R4 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - return; - } -} +package com.bekvon.bukkit.residence.actionBarNMS; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.containers.ABInterface; + +public class v1_7_R4 implements ABInterface { + + @Override + public void send(CommandSender sender, String msg) { + if (msg.isEmpty()) + return; + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + } + + @Override + public void send(Player player, String msg) { + if (msg.isEmpty()) + return; + player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + } + + @Override + public void sendTitle(Player player, Object title, Object subtitle) { + return; + } +} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java index b77cf27ab..de437c521 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java @@ -1,53 +1,57 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_8_R1.util.CraftChatMessage; -import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_8_R1.PacketPlayOutTitle; -import net.minecraft.server.v1_8_R1.EnumTitleAction; -import net.minecraft.server.v1_8_R1.ChatSerializer; -import net.minecraft.server.v1_8_R1.IChatBaseComponent; -import net.minecraft.server.v1_8_R1.PacketPlayOutChat; - -public class v1_8_R1 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} +package com.bekvon.bukkit.residence.actionBarNMS; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_8_R1.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.containers.ABInterface; + +import net.minecraft.server.v1_8_R1.PacketPlayOutTitle; +import net.minecraft.server.v1_8_R1.EnumTitleAction; +import net.minecraft.server.v1_8_R1.ChatSerializer; +import net.minecraft.server.v1_8_R1.IChatBaseComponent; +import net.minecraft.server.v1_8_R1.PacketPlayOutChat; + +public class v1_8_R1 implements ABInterface { + + @Override + public void send(CommandSender sender, String msg) { + if (msg.isEmpty()) + return; + if (sender instanceof Player) + send((Player) sender, msg); + else + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + } + + @Override + public void send(Player player, String msg) { + if (msg.isEmpty()) + return; + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } + } + + @Override + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java index 16a2f149a..4eea63a2a 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java @@ -1,53 +1,57 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_8_R2.util.CraftChatMessage; -import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_8_R2.PacketPlayOutTitle; -import net.minecraft.server.v1_8_R2.PacketPlayOutTitle.EnumTitleAction; -import net.minecraft.server.v1_8_R2.IChatBaseComponent; -import net.minecraft.server.v1_8_R2.IChatBaseComponent.ChatSerializer; -import net.minecraft.server.v1_8_R2.PacketPlayOutChat; - -public class v1_8_R2 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (sender instanceof Player) - send((Player) sender, ChatColor.translateAlternateColorCodes('&', msg)); - else - sender.sendMessage(msg); - } - - @Override - public void send(Player player, String msg) { - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} +package com.bekvon.bukkit.residence.actionBarNMS; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_8_R2.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.containers.ABInterface; + +import net.minecraft.server.v1_8_R2.PacketPlayOutTitle; +import net.minecraft.server.v1_8_R2.PacketPlayOutTitle.EnumTitleAction; +import net.minecraft.server.v1_8_R2.IChatBaseComponent; +import net.minecraft.server.v1_8_R2.IChatBaseComponent.ChatSerializer; +import net.minecraft.server.v1_8_R2.PacketPlayOutChat; + +public class v1_8_R2 implements ABInterface { + + @Override + public void send(CommandSender sender, String msg) { + if (msg.isEmpty()) + return; + if (sender instanceof Player) + send((Player) sender, ChatColor.translateAlternateColorCodes('&', msg)); + else + sender.sendMessage(msg); + } + + @Override + public void send(Player player, String msg) { + if (msg.isEmpty()) + return; + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } + } + + @Override + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java index 06f07acd7..4fc218f16 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java @@ -1,53 +1,57 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_8_R3.util.CraftChatMessage; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_8_R3.PacketPlayOutTitle; -import net.minecraft.server.v1_8_R3.PacketPlayOutTitle.EnumTitleAction; -import net.minecraft.server.v1_8_R3.IChatBaseComponent; -import net.minecraft.server.v1_8_R3.IChatBaseComponent.ChatSerializer; -import net.minecraft.server.v1_8_R3.PacketPlayOutChat; - -public class v1_8_R3 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} +package com.bekvon.bukkit.residence.actionBarNMS; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_8_R3.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.containers.ABInterface; + +import net.minecraft.server.v1_8_R3.PacketPlayOutTitle; +import net.minecraft.server.v1_8_R3.PacketPlayOutTitle.EnumTitleAction; +import net.minecraft.server.v1_8_R3.IChatBaseComponent; +import net.minecraft.server.v1_8_R3.IChatBaseComponent.ChatSerializer; +import net.minecraft.server.v1_8_R3.PacketPlayOutChat; + +public class v1_8_R3 implements ABInterface { + + @Override + public void send(CommandSender sender, String msg) { + if (msg.isEmpty()) + return; + if (sender instanceof Player) + send((Player) sender, msg); + else + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + } + + @Override + public void send(Player player, String msg) { + if (msg.isEmpty()) + return; + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } + } + + @Override + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java index 2c9c1ea78..6c85e34f1 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java @@ -1,53 +1,57 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_9_R1.util.CraftChatMessage; -import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_9_R1.PacketPlayOutTitle; -import net.minecraft.server.v1_9_R1.PacketPlayOutTitle.EnumTitleAction; -import net.minecraft.server.v1_9_R1.IChatBaseComponent; -import net.minecraft.server.v1_9_R1.IChatBaseComponent.ChatSerializer; -import net.minecraft.server.v1_9_R1.PacketPlayOutChat; - -public class v1_9_R1 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} +package com.bekvon.bukkit.residence.actionBarNMS; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_9_R1.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.containers.ABInterface; + +import net.minecraft.server.v1_9_R1.PacketPlayOutTitle; +import net.minecraft.server.v1_9_R1.PacketPlayOutTitle.EnumTitleAction; +import net.minecraft.server.v1_9_R1.IChatBaseComponent; +import net.minecraft.server.v1_9_R1.IChatBaseComponent.ChatSerializer; +import net.minecraft.server.v1_9_R1.PacketPlayOutChat; + +public class v1_9_R1 implements ABInterface { + + @Override + public void send(CommandSender sender, String msg) { + if (msg.isEmpty()) + return; + if (sender instanceof Player) + send((Player) sender, msg); + else + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + } + + @Override + public void send(Player player, String msg) { + if (msg.isEmpty()) + return; + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } + } + + @Override + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java index a69fcacdb..792522923 100644 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java @@ -1,53 +1,57 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_9_R2.util.CraftChatMessage; -import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_9_R2.PacketPlayOutTitle; -import net.minecraft.server.v1_9_R2.PacketPlayOutTitle.EnumTitleAction; -import net.minecraft.server.v1_9_R2.IChatBaseComponent; -import net.minecraft.server.v1_9_R2.IChatBaseComponent.ChatSerializer; -import net.minecraft.server.v1_9_R2.PacketPlayOutChat; - -public class v1_9_R2 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} +package com.bekvon.bukkit.residence.actionBarNMS; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_9_R2.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.containers.ABInterface; + +import net.minecraft.server.v1_9_R2.PacketPlayOutTitle; +import net.minecraft.server.v1_9_R2.PacketPlayOutTitle.EnumTitleAction; +import net.minecraft.server.v1_9_R2.IChatBaseComponent; +import net.minecraft.server.v1_9_R2.IChatBaseComponent.ChatSerializer; +import net.minecraft.server.v1_9_R2.PacketPlayOutChat; + +public class v1_9_R2 implements ABInterface { + + @Override + public void send(CommandSender sender, String msg) { + if (msg.isEmpty()) + return; + if (sender instanceof Player) + send((Player) sender, msg); + else + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + } + + @Override + public void send(Player player, String msg) { + if (msg.isEmpty()) + return; + try { + CraftPlayer p = (CraftPlayer) player; + IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); + p.getHandle().playerConnection.sendPacket(ppoc); + } catch (Exception e) { + player.sendMessage(msg); + } + } + + @Override + public void sendTitle(Player player, Object title, Object subtitle) { + CraftPlayer Cplayer = (CraftPlayer) player; + if (title != null) { + PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String + .valueOf(title)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetTitle); + } + if (subtitle != null) { + PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', + String.valueOf(subtitle)))[0]); + Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 242eb140c..c6f7b023e 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -70,6 +70,7 @@ public enum Flags { nmonsters(383, 51, FlagMode.Residence, "Allows or denys natural monster spawns", true), night(35, 15, FlagMode.Residence, "Sets night time in residence", true), nofly(171, 1, FlagMode.Both, "Allows or denys fly in residence", false), + fly(171, 1, FlagMode.Both, "Toggles fly for players in residence", false), nomobs(166, 0, FlagMode.Residence, "Prevents monsters from entering residence", true), note(25, 0, FlagMode.Both, "Allows or denys players to use note blocks", true), nodurability(145, 0, FlagMode.Residence, "Prevents item durability loss", false), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 1350bf01d..fa4f3690a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1448,6 +1448,49 @@ public void run() { }, 1L); } + private static Location getSafeLocation(Location loc) { + + int curY = loc.getBlockY(); + + for (int i = 0; i <= curY; i++) { + Block block = loc.clone().add(0, -i, 0).getBlock(); + if (!block.isEmpty() && block.getLocation().clone().add(0, 1, 0).getBlock().isEmpty() && block.getLocation().clone().add(0, 2, 0).getBlock().isEmpty()) + return loc.clone().add(0, -i + 1, 0); + } + + for (int i = 0; i <= loc.getWorld().getMaxHeight() - curY; i++) { + Block block = loc.clone().add(0, i, 0).getBlock(); + if (!block.isEmpty() && block.getLocation().clone().add(0, 1, 0).getBlock().isEmpty() && block.getLocation().clone().add(0, 2, 0).getBlock().isEmpty()) + return loc.clone().add(0, i + 1, 0); + } + + return null; + } + + private void fly(Player player, boolean state) { + if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) + return; + if (player.hasPermission("residence.flybypass")) + return; + if (!state) { + player.setFlying(state); + player.setAllowFlight(state); + Location loc = getSafeLocation(player.getLocation()); + if (loc == null) { + // get defined land location in case no safe landing spot are found + loc = plugin.getConfigManager().getFlyLandLocation(); + if (loc == null) { + // get main world spawn location in case valid location is not found + loc = Bukkit.getWorlds().get(0).getSpawnLocation(); + } + } + if (loc != null) + player.teleport(loc); + } else { + player.setAllowFlight(state); + } + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceChange(ResidenceChangedEvent event) { ClaimedResidence res = event.getTo(); @@ -1464,6 +1507,9 @@ public void onResidenceChange(ResidenceChangedEvent event) { if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); + if (ResOld.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) + fly(player, false); + if (plugin.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(false); } @@ -1476,6 +1522,11 @@ else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.get player.setGlowing(false); } + if (res.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) + fly(player, true); + else if (ResOld.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) + fly(player, false); + if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.setPlayerTime(6000L, false); else if (ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) @@ -1513,6 +1564,9 @@ else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res. player.setGlowing(true); } + if (res.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) + fly(player, true); + if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.setPlayerTime(6000L, false); diff --git a/src/plugin.yml b/src/plugin.yml index 80eb092d8..991838ac7 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.13.1 +version: 4.5.13.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 12822e9d0ae06444f4b208a61011ee1a2e7feb6f Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 16 Jan 2017 12:40:20 +0200 Subject: [PATCH 0313/1142] min range for random tp should be more than 0 --- src/com/bekvon/bukkit/residence/utils/RandomTp.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index d92616083..4bd740633 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -59,6 +59,8 @@ public Location getRandomlocation(String WorldName) { int inerrange = rtloc.getMinCord(); int outerrange = rtloc.getMaxCord(); + if (outerrange < 1) + outerrange = 1; int maxtries = plugin.getConfigManager().getrtMaxTries(); int centerX = rtloc.getCenter().getBlockX(); From 2e140d7d6b3d2412f9ccd4c82c0abc085eeae607 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 16 Jan 2017 13:07:18 +0200 Subject: [PATCH 0314/1142] Check for location world is it not null --- .../bekvon/bukkit/residence/protection/ResidenceManager.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index c10afb5c7..e1eded7ff 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -63,6 +63,10 @@ public boolean isOwnerOfLocation(Player player, Location loc) { public ClaimedResidence getByLoc(Location loc) { if (loc == null) return null; + if (loc.getWorld() == null) + return null; + if (loc.getWorld().getName() == null) + return null; ClaimedResidence res = null; String world = loc.getWorld().getName(); ChunkRef chunk = new ChunkRef(loc); From d53b2c42afb682b4982c9641ea6165ef9c1e16e0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 16 Jan 2017 18:20:24 +0200 Subject: [PATCH 0315/1142] Need to check both sizes for signboard --- src/com/bekvon/bukkit/residence/commands/shop.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 9371e319c..f9ef5dcc5 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -25,6 +25,7 @@ import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.shopStuff.Vote; +import com.bekvon.bukkit.residence.utils.Debug; public class shop implements cmd { @@ -306,7 +307,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (cuboid.getXSize() != 1 || cuboid.getZSize() != 1) { + Debug.D(cuboid.getXSize() + " : " + cuboid.getZSize()); + + if (cuboid.getXSize() != 1 && cuboid.getZSize() != 1) { plugin.msg(player, lm.Shop_ToDeapSelection); return true; } From 3c1622bd6fba57603062ba3bbd9ea56304ff4852 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 23 Jan 2017 15:33:50 +0200 Subject: [PATCH 0316/1142] Use general exception catch to avoid missing libraries --- src/com/bekvon/bukkit/residence/commands/shop.java | 3 --- .../bukkit/residence/selection/SchematicsManager.java | 9 +++------ src/plugin.yml | 2 +- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index f9ef5dcc5..44b7bda03 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -25,7 +25,6 @@ import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.shopStuff.Vote; -import com.bekvon.bukkit.residence.utils.Debug; public class shop implements cmd { @@ -307,8 +306,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - Debug.D(cuboid.getXSize() + " : " + cuboid.getZSize()); - if (cuboid.getXSize() != 1 && cuboid.getZSize() != 1) { plugin.msg(player, lm.Shop_ToDeapSelection); return true; diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index 21bd2c5ca..a561b003d 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -1,8 +1,6 @@ package com.bekvon.bukkit.residence.selection; import java.io.File; -import java.io.IOException; - import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; @@ -63,9 +61,10 @@ public boolean save(ClaimedResidence res) { File file = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); try { SchematicFormat.MCEDIT.save(clipboard, file); - } catch (com.sk89q.worldedit.world.DataException | IOException e) { + } catch (Exception e) { return false; } + editSession.flushQueue(); return true; } @@ -92,9 +91,7 @@ public boolean load(ClaimedResidence res) { CuboidClipboard cc = null; try { cc = CuboidClipboard.loadSchematic(file); - } catch (com.sk89q.worldedit.world.DataException e1) { - e1.printStackTrace(); - } catch (IOException e1) { + } catch (Exception e1) { e1.printStackTrace(); return false; } diff --git a/src/plugin.yml b/src/plugin.yml index 991838ac7..6105e6380 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.13.2 +version: 4.5.13.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 2eabdfa3ab7f2dc74b92277ccf4188baa635beb3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 23 Jan 2017 16:47:54 +0200 Subject: [PATCH 0317/1142] We dont need this as this will cause issues with other lazy plugins --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index fa4f3690a..2a1351f17 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -707,9 +707,6 @@ public void onPlayerQuit(PlayerQuitEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerJoin(PlayerChangedWorldEvent event) { Player player = event.getPlayer(); - if (plugin.getPermissionManager().isResidenceAdmin(player)) { - plugin.turnResAdminOn(player); - } plugin.getPermissionManager().updateGroupNameForPlayer(player, true); FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); From 7b95b220c2547d1faf54751e8f0efa2f390d8034 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 28 Jan 2017 12:14:31 +0200 Subject: [PATCH 0318/1142] actualy get regions from object before looping throw them --- src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java index e707c937e..8930bc357 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -40,11 +40,11 @@ public ProtectedRegion isSelectionInRegion(Player player) { ApplicableRegionSet regions = mgr.getApplicableRegions(region); - for (ProtectedRegion one : regions) { + for (ProtectedRegion one : regions.getRegions()) { if (!player.hasPermission("residence.worldguard." + one.getId())) return one; } - } catch (Exception e) { + } catch (Exception | IncompatibleClassChangeError e) { } return null; } From 360ce7cb70516bbeda8aa35ae98d858d6458c56b Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 28 Jan 2017 15:54:04 +0200 Subject: [PATCH 0319/1142] Check for null shop name just in case --- .../residence/protection/ClaimedResidence.java | 2 +- .../protection/ResidencePermissions.java | 16 ++++++++++++---- .../bukkit/residence/shopStuff/ShopSignUtil.java | 2 +- .../bukkit/residence/utils/FileCleanUp.java | 2 ++ 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 331ded9e9..8250c5ba8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1411,7 +1411,7 @@ public static ClaimedResidence load(String worldName, Map root, res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); - if (res.getPermissions().ownerLastKnownName == null) + if (res.getPermissions().getOwnerLastKnownName() == null) return null; if (root.containsKey("MainResidence")) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 294534048..ff8327e51 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -24,10 +24,10 @@ public class ResidencePermissions extends FlagPermissions { - protected UUID ownerUUID; - protected String ownerLastKnownName; - protected String world; - protected ClaimedResidence residence; + private UUID ownerUUID; + private String ownerLastKnownName; + private String world; + private ClaimedResidence residence; private ResidencePermissions(ClaimedResidence res) { super(); @@ -621,4 +621,12 @@ public boolean setFlagGroupOnPlayer(CommandSender sender, String target, String } return false; } + + public String getOwnerLastKnownName() { + return ownerLastKnownName; + } + + public void setOwnerLastKnownName(String ownerLastKnownName) { + this.ownerLastKnownName = ownerLastKnownName; + } } diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index 71db939ed..28475a7a8 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -361,7 +361,7 @@ public boolean BoardUpdate() { Sign sign = (Sign) block.getState(); - if (Shop.equalsIgnoreCase("")) { + if (Shop == null || Shop.equalsIgnoreCase("")) { sign.setLine(0, ""); sign.setLine(1, ""); sign.setLine(2, ""); diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 3c50e13fb..9e3e197c4 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -21,6 +21,8 @@ public FileCleanUp(Residence plugin) { public void cleanFiles() { + Bukkit.getConsoleSender().sendMessage("starting cleanup"); + ArrayList resNameList = plugin.getResidenceManager().getResidenceList(false, false); int i = 0; From b2e574a9ff448fdfde27d0f670826d9204f1687d Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 28 Jan 2017 16:12:17 +0200 Subject: [PATCH 0320/1142] New flag to prevent projectile shooting in area --- .../bukkit/residence/containers/Flags.java | 1 + .../listeners/ResidenceEntityListener.java | 18 ++++++++++++++++++ .../bukkit/residence/utils/FileCleanUp.java | 2 -- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index c6f7b023e..e4b8302a8 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -84,6 +84,7 @@ public enum Flags { redstone(175, 0, FlagMode.Group, "Gives lever, diode, button, pressure, note flags", true), respawn(175, 0, FlagMode.Residence, "Automaticaly respawns player", false), riding(329, 0, FlagMode.Both, "Prevent riding a horse", true), + shoot(262, 0, FlagMode.Residence, "Allows or denys shooting projectile in area", true), sun(175, 0, FlagMode.Residence, "Sets weather to sunny in residence", true), shop(389, 0, FlagMode.Residence, "Adds residence to special residence shop list", true), snowtrail(78, 0, FlagMode.Residence, "Prevents snowman snow trails", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 5f12a8397..d3b7b415d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -24,6 +24,7 @@ import org.bukkit.event.entity.EntityInteractEvent; import org.bukkit.event.entity.PotionSplashEvent; import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -515,6 +516,23 @@ public void onHangingPlace(HangingPlaceEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onProjectileLaunch(ProjectileLaunchEvent event) { + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.getEntity().getShooter() instanceof Player) { + if (plugin.isResAdminOn((Player) event.getEntity().getShooter())) + return; + } + FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); + if (perms.has(Flags.shoot, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + if (event.getEntity().getShooter() instanceof Player) + plugin.msg((Player) event.getEntity().getShooter(), lm.Flag_Deny, Flags.shoot); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreak(HangingBreakByEntityEvent event) { // disabling event on world diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 9e3e197c4..3c50e13fb 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -21,8 +21,6 @@ public FileCleanUp(Residence plugin) { public void cleanFiles() { - Bukkit.getConsoleSender().sendMessage("starting cleanup"); - ArrayList resNameList = plugin.getResidenceManager().getResidenceList(false, false); int i = 0; From 36855f4e265e6f00474b15d0734a8cef23550b69 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 28 Jan 2017 16:28:41 +0200 Subject: [PATCH 0321/1142] its actually Long not int --- src/com/residence/zip/ZipLibrary.java | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/com/residence/zip/ZipLibrary.java b/src/com/residence/zip/ZipLibrary.java index 5e63cc4bd..281defef7 100644 --- a/src/com/residence/zip/ZipLibrary.java +++ b/src/com/residence/zip/ZipLibrary.java @@ -15,17 +15,18 @@ import org.bukkit.World; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.utils.Debug; public class ZipLibrary { private Residence plugin; private File BackupDir = new File(Residence.getInstance().getDataLocation(), "Backup"); public ZipLibrary(Residence residence) { - this.plugin = residence; + this.plugin = residence; } - private void cleanFiles() { - int x = plugin.getConfigManager().BackupAutoCleanUpDays() * 60 * 1000 * 24 * 60; + private void cleanFiles() { + Long x = plugin.getConfigManager().BackupAutoCleanUpDays() * 60L * 1000L * 24L * 60L; Long time = System.currentTimeMillis(); for (File file : BackupDir.listFiles()) { long diff = time - file.lastModified(); @@ -36,12 +37,13 @@ private void cleanFiles() { } public void backup() throws IOException { - try { - BackupDir.mkdir(); - } catch (Exception e) { - e.printStackTrace(); - return; - } + if (!BackupDir.isDirectory()) + try { + BackupDir.mkdir(); + } catch (Exception e) { + e.printStackTrace(); + return; + } if (plugin.getConfigManager().BackupAutoCleanUpUse()) cleanFiles(); // Generate the proper date for the backup filename @@ -89,6 +91,7 @@ public void backup() throws IOException { } private static void packZip(File output, List sources) throws IOException { + Debug.D("zipping"); ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(output)); zipOut.setLevel(Deflater.DEFAULT_COMPRESSION); From 4b6c8a03765e2ff19beeedc2193b8aa9035d5603 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 29 Jan 2017 13:52:34 +0200 Subject: [PATCH 0322/1142] Include residence subzone count if there is any when using /res info --- .../bukkit/residence/containers/lm.java | 1 + .../listeners/ResidencePlayerListener.java | 25 +++++++++++++++++++ .../protection/ClaimedResidence.java | 10 ++++++++ .../protection/ResidenceManager.java | 4 +++ src/plugin.yml | 2 +- 5 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 53bb44f16..3b1fbf62f 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -387,6 +387,7 @@ public enum lm { General_CurrentArea("&eCurrent Area: &6%1"), General_TotalResSize("&eTotal size: &6%1m\u00B3 (%2m\u00B2)"), General_TotalWorth("&eTotal worth of residence: &6%1 &e(&6%2&e)"), + General_TotalSubzones("&eSubzones in residence: &6%1 &e(&6%2&e)"), General_NotOnline("&eTarget player must be online."), General_NextPage("&eNext Page"), General_NextInfoPage("&2| &eNext Page &2>>>"), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 2a1351f17..6e98dd95b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -424,6 +424,31 @@ public void onFlagChangeSunRain(ResidenceFlagChangeEvent event) { } } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeFly(ResidenceFlagChangeEvent event) { + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.fly.getName())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + for (Player one : event.getResidence().getPlayersInResidence()) + fly(one, false); + break; + case INVALID: + break; + case TRUE: + for (Player one : event.getResidence().getPlayersInResidence()) + fly(one, true); + break; + default: + break; + } + } + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onCommand(PlayerCommandPreprocessEvent event) { // disabling event on world diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 8250c5ba8..82b8715bb 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1052,6 +1052,16 @@ public List getSubzones() { return list; } + public int getSubzonesAmount(Boolean includeChild) { + int i = 0; + for (Entry res : subzones.entrySet()) { + i++; + if (includeChild) + i += res.getValue().getSubzonesAmount(includeChild); + } + return i; + } + public void printSubzoneList(Player player, int page) { ArrayList temp = new ArrayList<>(); for (Entry sz : subzones.entrySet()) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index e1eded7ff..ef40442ca 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -709,6 +709,10 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) plugin.msg(sender, lm.General_TotalWorth, (int) ((res.getTotalSize() * res.getOwnerGroup().getCostPerBlock()) * 100) / 100.0, (int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0); } + + if (res.getSubzonesAmount(false) > 0) + plugin.msg(sender, lm.General_TotalSubzones, res.getSubzonesAmount(false), res.getSubzonesAmount(true)); + if (plugin.getConfigManager().useLeases() && plugin.getLeaseManager().leaseExpires(areaname)) { String time = plugin.getLeaseManager().getExpireTime(areaname); if (time != null) diff --git a/src/plugin.yml b/src/plugin.yml index 6105e6380..3c86973d5 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.13.4 +version: 4.5.13.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 45e61d436a4c9ee68fc90bdb5916473c430795d8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 29 Jan 2017 15:37:34 +0200 Subject: [PATCH 0323/1142] Use reflection instead of NMS just for simplicity sake Better way to check current version of the server --- .../bekvon/bukkit/residence/Residence.java | 36 +-- .../residence/actionBarNMS/v1_10_R1.java | 57 ---- .../residence/actionBarNMS/v1_11_R1.java | 57 ---- .../residence/actionBarNMS/v1_7_R4.java | 29 -- .../residence/actionBarNMS/v1_8_R1.java | 57 ---- .../residence/actionBarNMS/v1_8_R2.java | 57 ---- .../residence/actionBarNMS/v1_8_R3.java | 57 ---- .../residence/actionBarNMS/v1_9_R1.java | 57 ---- .../residence/actionBarNMS/v1_9_R2.java | 57 ---- .../listeners/ResidencePlayerListener.java | 11 +- .../bukkit/residence/utils/ActionBar.java | 298 ++++++++++-------- .../residence/utils/VersionChecker.java | 105 ++++-- 12 files changed, 258 insertions(+), 620 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/actionBarNMS/v1_11_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java delete mode 100644 src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java delete mode 100644 src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java delete mode 100644 src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 50ca7b4a9..eb818ed3b 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -101,6 +101,7 @@ import com.bekvon.bukkit.residence.utils.TabComplete; import com.bekvon.bukkit.residence.utils.VersionChecker; import com.bekvon.bukkit.residence.utils.YmlMaker; +import com.bekvon.bukkit.residence.utils.VersionChecker.Version; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.earth2me.essentials.Essentials; @@ -399,6 +400,7 @@ public void onEnable() { try { instance = this; initsuccess = false; + versionChecker = new VersionChecker(this); deleteConfirm = new HashMap(); resadminToggle = new ArrayList(); server = this.getServer(); @@ -470,9 +472,7 @@ public void onEnable() { } catch (Exception e) { } - String packageName = getServer().getClass().getPackage().getName(); - String[] packageSplit = packageName.split("\\."); - String version = packageSplit[packageSplit.length - 1].substring(0, packageSplit[packageSplit.length - 1].length() - 3); + String version = versionChecker.getVersion().getShortVersion(); try { Class nmsClass; if (getConfigManager().CouldronCompatability()) @@ -488,31 +488,13 @@ public void onEnable() { } } catch (SecurityException | NoSuchMethodException | InvocationTargetException | IllegalArgumentException | IllegalAccessException | InstantiationException | ClassNotFoundException e) { - System.out.println("Your server version is not compatible with this plugins version! Plugin will be disabled: " + version + " and server will shutdown"); + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Your server version is not compatible with this plugins version! Plugin will be disabled: " + version + " and server will shutdown"); this.setEnabled(false); Bukkit.shutdown(); return; } - ABManager = new ActionBar(); - version = packageSplit[packageSplit.length - 1]; - try { - Class nmsClass; - - nmsClass = Class.forName("com.bekvon.bukkit.residence.actionBarNMS." + version); - - if (ABInterface.class.isAssignableFrom(nmsClass)) { - ab = (ABInterface) nmsClass.getConstructor().newInstance(); - } else { - System.out.println("Something went wrong, please note down version and contact author v:" + version); - this.setEnabled(false); - Bukkit.shutdown(); - } - } catch (SecurityException | NoSuchMethodException | InvocationTargetException | IllegalArgumentException | IllegalAccessException | InstantiationException - | ClassNotFoundException e) { - ab = ABManager; - return; - } + ab = new ActionBar(this); gmanager = new PermissionManager(this); imanager = new WorldItemManager(this); @@ -531,8 +513,6 @@ public void onEnable() { zip = new ZipLibrary(this); - versionChecker = new VersionChecker(this); - Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); if (lwcp != null) lwc = ((LWCPlugin) lwcp).getLWC(); @@ -706,15 +686,15 @@ public void run() { pm.registerEvents(shlistener, this); // 1.8 event - if (getVersionChecker().GetVersion() >= 1800) + if (getVersionChecker().isHigherEquals(Version.v1_8_R1)) pm.registerEvents(new v1_8Events(), this); // 1.9 event - if (getVersionChecker().GetVersion() >= 1900) + if (getVersionChecker().isHigherEquals(Version.v1_9_R1)) pm.registerEvents(new v1_9Events(), this); // 1.10 event - if (getVersionChecker().GetVersion() >= 11000) + if (getVersionChecker().isHigherEquals(Version.v1_10_R1)) pm.registerEvents(new v1_10Events(), this); // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java deleted file mode 100644 index d76b64393..000000000 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_10_R1.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_10_R1.util.CraftChatMessage; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_10_R1.IChatBaseComponent; -import net.minecraft.server.v1_10_R1.IChatBaseComponent.ChatSerializer; -import net.minecraft.server.v1_10_R1.PacketPlayOutTitle.EnumTitleAction; -import net.minecraft.server.v1_10_R1.PacketPlayOutChat; -import net.minecraft.server.v1_10_R1.PacketPlayOutTitle; - -public class v1_10_R1 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (msg.isEmpty()) - return; - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - if (msg.isEmpty()) - return; - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_11_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_11_R1.java deleted file mode 100644 index 7448651d6..000000000 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_11_R1.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_11_R1.util.CraftChatMessage; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_11_R1.IChatBaseComponent; -import net.minecraft.server.v1_11_R1.IChatBaseComponent.ChatSerializer; -import net.minecraft.server.v1_11_R1.PacketPlayOutTitle.EnumTitleAction; -import net.minecraft.server.v1_11_R1.PacketPlayOutChat; -import net.minecraft.server.v1_11_R1.PacketPlayOutTitle; - -public class v1_11_R1 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (msg.isEmpty()) - return; - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - if (msg.isEmpty()) - return; - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java deleted file mode 100644 index 250a60612..000000000 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_7_R4.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -public class v1_7_R4 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (msg.isEmpty()) - return; - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - if (msg.isEmpty()) - return; - player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - return; - } -} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java deleted file mode 100644 index de437c521..000000000 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R1.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_8_R1.util.CraftChatMessage; -import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_8_R1.PacketPlayOutTitle; -import net.minecraft.server.v1_8_R1.EnumTitleAction; -import net.minecraft.server.v1_8_R1.ChatSerializer; -import net.minecraft.server.v1_8_R1.IChatBaseComponent; -import net.minecraft.server.v1_8_R1.PacketPlayOutChat; - -public class v1_8_R1 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (msg.isEmpty()) - return; - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - if (msg.isEmpty()) - return; - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java deleted file mode 100644 index 4eea63a2a..000000000 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R2.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_8_R2.util.CraftChatMessage; -import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_8_R2.PacketPlayOutTitle; -import net.minecraft.server.v1_8_R2.PacketPlayOutTitle.EnumTitleAction; -import net.minecraft.server.v1_8_R2.IChatBaseComponent; -import net.minecraft.server.v1_8_R2.IChatBaseComponent.ChatSerializer; -import net.minecraft.server.v1_8_R2.PacketPlayOutChat; - -public class v1_8_R2 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (msg.isEmpty()) - return; - if (sender instanceof Player) - send((Player) sender, ChatColor.translateAlternateColorCodes('&', msg)); - else - sender.sendMessage(msg); - } - - @Override - public void send(Player player, String msg) { - if (msg.isEmpty()) - return; - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java deleted file mode 100644 index 4fc218f16..000000000 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_8_R3.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_8_R3.util.CraftChatMessage; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_8_R3.PacketPlayOutTitle; -import net.minecraft.server.v1_8_R3.PacketPlayOutTitle.EnumTitleAction; -import net.minecraft.server.v1_8_R3.IChatBaseComponent; -import net.minecraft.server.v1_8_R3.IChatBaseComponent.ChatSerializer; -import net.minecraft.server.v1_8_R3.PacketPlayOutChat; - -public class v1_8_R3 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (msg.isEmpty()) - return; - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - if (msg.isEmpty()) - return; - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java deleted file mode 100644 index 6c85e34f1..000000000 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R1.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_9_R1.util.CraftChatMessage; -import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_9_R1.PacketPlayOutTitle; -import net.minecraft.server.v1_9_R1.PacketPlayOutTitle.EnumTitleAction; -import net.minecraft.server.v1_9_R1.IChatBaseComponent; -import net.minecraft.server.v1_9_R1.IChatBaseComponent.ChatSerializer; -import net.minecraft.server.v1_9_R1.PacketPlayOutChat; - -public class v1_9_R1 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (msg.isEmpty()) - return; - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - if (msg.isEmpty()) - return; - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} diff --git a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java b/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java deleted file mode 100644 index 792522923..000000000 --- a/src/com/bekvon/bukkit/residence/actionBarNMS/v1_9_R2.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.bekvon.bukkit.residence.actionBarNMS; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_9_R2.util.CraftChatMessage; -import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -import net.minecraft.server.v1_9_R2.PacketPlayOutTitle; -import net.minecraft.server.v1_9_R2.PacketPlayOutTitle.EnumTitleAction; -import net.minecraft.server.v1_9_R2.IChatBaseComponent; -import net.minecraft.server.v1_9_R2.IChatBaseComponent.ChatSerializer; -import net.minecraft.server.v1_9_R2.PacketPlayOutChat; - -public class v1_9_R2 implements ABInterface { - - @Override - public void send(CommandSender sender, String msg) { - if (msg.isEmpty()) - return; - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - @Override - public void send(Player player, String msg) { - if (msg.isEmpty()) - return; - try { - CraftPlayer p = (CraftPlayer) player; - IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2); - p.getHandle().playerConnection.sendPacket(ppoc); - } catch (Exception e) { - player.sendMessage(msg); - } - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - CraftPlayer Cplayer = (CraftPlayer) player; - if (title != null) { - PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', String - .valueOf(title)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetTitle); - } - if (subtitle != null) { - PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(ChatColor.translateAlternateColorCodes('&', - String.valueOf(subtitle)))[0]); - Cplayer.getHandle().playerConnection.sendPacket(packetSubtitle); - } - } -} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 6e98dd95b..92a7c633e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -67,6 +67,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.utils.GetTime; +import com.bekvon.bukkit.residence.utils.VersionChecker.Version; public class ResidencePlayerListener implements Listener { @@ -315,7 +316,7 @@ public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { switch (event.getNewState()) { case NEITHER: case FALSE: - if (plugin.getVersionChecker().GetVersion() > 1900 && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1) && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) for (Player one : event.getResidence().getPlayersInResidence()) one.setGlowing(false); break; @@ -323,7 +324,7 @@ public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { break; case TRUE: if (event.getFlag().equalsIgnoreCase(Flags.glow.getName())) - if (plugin.getVersionChecker().GetVersion() > 1900) + if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) for (Player one : event.getResidence().getPlayersInResidence()) one.setGlowing(true); break; @@ -1532,12 +1533,12 @@ public void onResidenceChange(ResidenceChangedEvent event) { if (ResOld.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) fly(player, false); - if (plugin.getVersionChecker().GetVersion() > 1900 && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1) && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(false); } if (res != null && ResOld != null && res != ResOld) { - if (plugin.getVersionChecker().GetVersion() > 1900) { + if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) { if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(true); else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) @@ -1581,7 +1582,7 @@ else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res. } if (res != null && ResOld == null) { - if (plugin.getVersionChecker().GetVersion() > 1900) { + if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) { if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(true); } diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index 9bf0e64e3..e6d7981dc 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -1,124 +1,174 @@ -package com.bekvon.bukkit.residence.utils; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.logging.Level; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.json.simple.JSONObject; - -import com.bekvon.bukkit.residence.containers.ABInterface; - -/** -* -* @author hamzaxx -*/ -public class ActionBar implements ABInterface { - private String version = ""; - private Object packet; - private Method getHandle; - private Method sendPacket; - private Field playerConnection; - private Class nmsChatSerializer; - private Class nmsIChatBaseComponent; - private Class packetType; - private Constructor constructor; - private boolean simpleMessages = false; - - public ActionBar() { - try { - String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); - version = v[v.length - 1]; -// version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; - packetType = Class.forName(getPacketPlayOutChat()); - Class typeCraftPlayer = Class.forName(getCraftPlayerClasspath()); - Class typeNMSPlayer = Class.forName(getNMSPlayerClasspath()); - Class typePlayerConnection = Class.forName(getPlayerConnectionClasspath()); - nmsChatSerializer = Class.forName(getChatSerializerClasspath()); - nmsIChatBaseComponent = Class.forName(getIChatBaseComponentClasspath()); - getHandle = typeCraftPlayer.getMethod("getHandle"); - playerConnection = typeNMSPlayer.getField("playerConnection"); - sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName(getPacketClasspath())); - if (!version.contains("1_7")) { - constructor = packetType.getConstructor(nmsIChatBaseComponent, byte.class); - } else { - constructor = packetType.getConstructor(nmsIChatBaseComponent, int.class); - } - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { - simpleMessages = true; - Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully suport action bar messages. They will be shown in chat instead."); - } - } - - @Override - public void send(CommandSender sender, String msg) { - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(msg); - } - - @Override - public void send(Player receivingPacket, String msg) { - if (simpleMessages) { - receivingPacket.sendMessage(msg); - return; - } - try { - Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, "{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', JSONObject - .escape(msg)) + "\"}"); - if (!version.contains("1_7")) { - packet = constructor.newInstance(serialized, (byte) 2); - } else { - packet = constructor.newInstance(serialized, 2); - } - Object player = getHandle.invoke(receivingPacket); - Object connection = playerConnection.get(player); - sendPacket.invoke(connection, packet); - } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException ex) { - simpleMessages = true; - Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully suport action bar messages. They will be shown in chat instead."); - } - } - - private String getCraftPlayerClasspath() { - return "org.bukkit.craftbukkit." + version + ".entity.CraftPlayer"; - } - - private String getPlayerConnectionClasspath() { - return "net.minecraft.server." + version + ".PlayerConnection"; - } - - private String getNMSPlayerClasspath() { - return "net.minecraft.server." + version + ".EntityPlayer"; - } - - private String getPacketClasspath() { - return "net.minecraft.server." + version + ".Packet"; - } - - private String getIChatBaseComponentClasspath() { - return "net.minecraft.server." + version + ".IChatBaseComponent"; - } - - private String getChatSerializerClasspath() { - if (version.equals("v1_8_R1") || version.contains("1_7")) { - return "net.minecraft.server." + version + ".ChatSerializer"; - } - return "net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent - } - - private String getPacketPlayOutChat() { - return "net.minecraft.server." + version + ".PacketPlayOutChat"; - } - - @Override - public void sendTitle(Player player, Object title, Object subtitle) { - return; - } -} +package com.bekvon.bukkit.residence.utils; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.logging.Level; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.json.simple.JSONObject; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ABInterface; +import com.bekvon.bukkit.residence.utils.VersionChecker.Version; + +public class ActionBar implements ABInterface { + private Version version = Version.v1_11_R1; + private Object packet; + private Method getHandle; + private Method sendPacket; + private Field playerConnection; + private Class nmsChatSerializer; + private Class nmsIChatBaseComponent; + private Class packetType; + private Constructor constructor; + private boolean simpleMessages = false; + private boolean simpleTitleMessages = false; + + private Constructor nmsPacketPlayOutTitle; + private Class enumTitleAction; + private Method fromString; + private Residence plugin; + + public ActionBar(Residence plugin) { + this.plugin = plugin; + version = this.plugin.getVersionChecker().getVersion(); + try { + packetType = Class.forName(getPacketPlayOutChat()); + Class typeCraftPlayer = Class.forName(getCraftPlayerClasspath()); + Class typeNMSPlayer = Class.forName(getNMSPlayerClasspath()); + Class typePlayerConnection = Class.forName(getPlayerConnectionClasspath()); + nmsChatSerializer = Class.forName(getChatSerializerClasspath()); + nmsIChatBaseComponent = Class.forName(getIChatBaseComponentClasspath()); + getHandle = typeCraftPlayer.getMethod("getHandle"); + playerConnection = typeNMSPlayer.getField("playerConnection"); + sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName(getPacketClasspath())); + if (plugin.getVersionChecker().isHigher(Version.v1_7_R4)) { + constructor = packetType.getConstructor(nmsIChatBaseComponent, byte.class); + } else { + constructor = packetType.getConstructor(nmsIChatBaseComponent, int.class); + } + + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { + simpleMessages = true; + Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully suport action bar messages. They will be shown in chat instead."); + } + // Title + try { + Class typePacketPlayOutTitle = Class.forName(getPacketPlayOutTitleClasspath()); + enumTitleAction = Class.forName(getEnumTitleActionClasspath()); + nmsPacketPlayOutTitle = typePacketPlayOutTitle.getConstructor(enumTitleAction, nmsIChatBaseComponent); + fromString = Class.forName(getClassMessageClasspath()).getMethod("fromString", String.class); + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) { + simpleTitleMessages = true; + Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully suport title messages. They will be shown in chat instead."); + } + } + + @Override + public void sendTitle(Player receivingPacket, Object title, Object subtitle) { + if (simpleTitleMessages) { + receivingPacket.sendMessage(ChatColor.translateAlternateColorCodes('&', String.valueOf(title))); + receivingPacket.sendMessage(ChatColor.translateAlternateColorCodes('&', String.valueOf(subtitle))); + return; + } + try { + if (title != null) { + Object packetTitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("TITLE").get(null), + ((Object[]) fromString.invoke(null, ChatColor.translateAlternateColorCodes('&', String.valueOf(title))))[0]); + sendPacket(receivingPacket, packetTitle); + } + if (subtitle != null) { + Object packetSubtitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("SUBTITLE").get(null), + ((Object[]) fromString.invoke(null, ChatColor.translateAlternateColorCodes('&', String.valueOf(subtitle))))[0]); + sendPacket(receivingPacket, packetSubtitle); + } + } catch (SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchFieldException ex) { + simpleTitleMessages = true; + Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully support title messages. They will be shown in chat instead."); + } + } + + private void sendPacket(Player player, Object packet) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { + Object handle = getHandle.invoke(player); + Object connection = playerConnection.get(handle); + sendPacket.invoke(connection, packet); + } + + @Override + public void send(CommandSender sender, String msg) { + if (sender instanceof Player) + send((Player) sender, msg); + else + sender.sendMessage(msg); + } + + @Override + public void send(Player receivingPacket, String msg) { + if (simpleMessages) { + receivingPacket.sendMessage(msg); + return; + } + try { + Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, "{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', JSONObject + .escape(msg)) + "\"}"); + if (plugin.getVersionChecker().isHigher(Version.v1_7_R4)) { + packet = constructor.newInstance(serialized, (byte) 2); + } else { + packet = constructor.newInstance(serialized, 2); + } + Object player = getHandle.invoke(receivingPacket); + Object connection = playerConnection.get(player); + sendPacket.invoke(connection, packet); + } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException ex) { + simpleMessages = true; + Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully suport action bar messages. They will be shown in chat instead."); + } + } + + private String getCraftPlayerClasspath() { + return "org.bukkit.craftbukkit." + version + ".entity.CraftPlayer"; + } + + private String getPlayerConnectionClasspath() { + return "net.minecraft.server." + version + ".PlayerConnection"; + } + + private String getNMSPlayerClasspath() { + return "net.minecraft.server." + version + ".EntityPlayer"; + } + + private String getPacketClasspath() { + return "net.minecraft.server." + version + ".Packet"; + } + + private String getIChatBaseComponentClasspath() { + return "net.minecraft.server." + version + ".IChatBaseComponent"; + } + + private String getChatSerializerClasspath() { + if (plugin.getVersionChecker().isLower(Version.v1_8_R2)) + return "net.minecraft.server." + version + ".ChatSerializer"; + return "net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent + } + + private String getPacketPlayOutChat() { + return "net.minecraft.server." + version + ".PacketPlayOutChat"; + } + + private String getPacketPlayOutTitleClasspath() { + return "net.minecraft.server." + version + ".PacketPlayOutTitle"; + } + + private String getEnumTitleActionClasspath() { + return getPacketPlayOutTitleClasspath() + "$EnumTitleAction"; + } + + private String getClassMessageClasspath() { + return "org.bukkit.craftbukkit." + version + ".util.CraftChatMessage"; + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 39efcf30f..b88f84dc7 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -16,48 +16,83 @@ public class VersionChecker { Residence plugin; private int resource = 11480; - private int cleanVersion = 0; public VersionChecker(Residence plugin) { this.plugin = plugin; + version = getCurrent(); } - public int GetVersion() { - if (cleanVersion == 0) { - String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); - String version = v[v.length - 1]; - // Translating version to integer for simpler use - try { - cleanVersion = Integer.parseInt(version.replace("v", "").replace("V", "").replace("_", "").replace("r", "").replace("R", "")); - cleanVersion *= 10; - } catch (NumberFormatException e) { - // Fail safe if it for some reason can't translate version to integer - if (version.contains("v1_4")) - cleanVersion = 1400; - if (version.contains("v1_5")) - cleanVersion = 1500; - if (version.contains("v1_6")) - cleanVersion = 1600; - if (version.contains("v1_7")) - cleanVersion = 1700; - if (version.contains("v1_8_R1")) - cleanVersion = 1810; - if (version.contains("v1_8_R2")) - cleanVersion = 1820; - if (version.contains("v1_8_R3")) - cleanVersion = 1830; - if (version.contains("v1_9_R1")) - cleanVersion = 1910; - if (version.contains("v1_9_R2")) - cleanVersion = 1920; - if (version.contains("v1_10_R1")) - cleanVersion = 11010; - } + private Version version = Version.v1_11_R1; + + public Version getVersion() { + return version; + } + + public enum Version { + v1_7_R1(), + v1_7_R2(), + v1_7_R3(), + v1_7_R4(), + v1_8_R1(), + v1_8_R2(), + v1_8_R3(), + v1_9_R1(), + v1_9_R2(), + v1_10_R1(), + v1_11_R1(), + v1_11_R2(), + v1_11_R3(), + v1_12_R1(), + v1_12_R2(), + v1_12_R3(), + v1_13_R1(), + v1_13_R2(), + v1_13_R3(); + + private Integer value = null; + private String shortVersion = null; + + public Integer getValue() { + if (value == null) + try { + value = Integer.valueOf(this.name().replaceAll("[^\\d.]", "")); + } catch (Exception e) { + } + return this.value; + } + + public String getShortVersion() { + if (shortVersion == null) + shortVersion = this.name().split("_R")[0]; + return shortVersion; + } + } - if (cleanVersion < 1400) - cleanVersion *= 10; + public static Version getCurrent() { + String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); + String vv = v[v.length - 1]; + for (Version one : Version.values()) { + if (one.name().equalsIgnoreCase(vv)) { + return one; + } } - return cleanVersion; + return null; + } + + public boolean isLower(Version version) { + return this.version.getValue() < version.getValue(); + } + + public boolean isLowerEquals(Version version) { + return this.version.getValue() <= version.getValue(); + } + + public boolean isHigher(Version version) { + return this.version.getValue() > version.getValue(); + } + + public boolean isHigherEquals(Version version) { + return this.version.getValue() >= version.getValue(); } public void VersionCheck(final Player player) { From 337bc42e6595117ada2b30b23c749098ff0d053a Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 2 Feb 2017 18:18:09 +0200 Subject: [PATCH 0324/1142] Cleanup --- .../residence/api/ResidenceInterface.java | 4 - .../bukkit/residence/commands/current.java | 5 +- .../bekvon/bukkit/residence/commands/gui.java | 5 +- .../bukkit/residence/commands/lease.java | 10 ++- .../bukkit/residence/commands/subzone.java | 20 ++--- .../listeners/ResidencePlayerListener.java | 7 +- .../protection/ClaimedResidence.java | 14 ++- .../protection/ResidenceManager.java | 88 +++++++------------ .../residence/selection/SelectionManager.java | 4 + src/plugin.yml | 2 +- 10 files changed, 75 insertions(+), 84 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java b/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java index bb0c33eed..7c5e177f3 100644 --- a/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java +++ b/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java @@ -12,10 +12,6 @@ public interface ResidenceInterface { public ClaimedResidence getByName(String name); - public String getNameByLoc(Location loc); - - public String getNameByRes(ClaimedResidence res); - public String getSubzoneNameByRes(ClaimedResidence res); public void addShop(ClaimedResidence res); diff --git a/src/com/bekvon/bukkit/residence/commands/current.java b/src/com/bekvon/bukkit/residence/commands/current.java index 8e3931b7c..e92a38b96 100644 --- a/src/com/bekvon/bukkit/residence/commands/current.java +++ b/src/com/bekvon/bukkit/residence/commands/current.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class current implements cmd { @@ -25,11 +26,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (args.length != 1) return false; - String res = plugin.getResidenceManager().getNameByLoc(player.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { plugin.msg(player, lm.Residence_NotIn); } else { - plugin.msg(player, lm.Residence_In, res); + plugin.msg(player, lm.Residence_In, res.getName()); } return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/gui.java b/src/com/bekvon/bukkit/residence/commands/gui.java index 3d54f9de3..3f3be41d0 100644 --- a/src/com/bekvon/bukkit/residence/commands/gui.java +++ b/src/com/bekvon/bukkit/residence/commands/gui.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class gui implements cmd { @@ -25,7 +26,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; if (args.length == 1) { - plugin.getSpout().showResidenceFlagGUI(SpoutManager.getPlayer(player), plugin.getResidenceManager().getNameByLoc(player.getLocation()), resadmin); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) + plugin.getSpout().showResidenceFlagGUI(SpoutManager.getPlayer(player), res.getName(), resadmin); } else if (args.length == 2) { plugin.getSpout().showResidenceFlagGUI(SpoutManager.getPlayer(player), args[1], resadmin); } diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index 50d5c61da..bb45f0e7f 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -49,7 +49,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (args.length == 3) { plugin.getLeaseManager().renewArea(args[2], player); } else { - plugin.getLeaseManager().renewArea(plugin.getResidenceManager().getNameByLoc(player.getLocation()), player); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) + plugin.getLeaseManager().renewArea(res.getName(), player); } return true; } else if (args[1].equals("cost")) { @@ -63,12 +65,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } return true; } - String area = plugin.getResidenceManager().getNameByLoc(player.getLocation()); - ClaimedResidence res = plugin.getResidenceManager().getByName(area); - if (area == null || res == null) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { plugin.msg(player, lm.Invalid_Area); return true; } + String area = res.getName(); if (plugin.getLeaseManager().leaseExpires(area)) { int cost = plugin.getLeaseManager().getRenewCost(res); plugin.msg(player, lm.Economy_LeaseRenewalCost, area, cost); diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index 2b490e8f8..61b6c47d8 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -26,30 +26,26 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return false; } String zname; - String parent; + ClaimedResidence res = null; if (args.length == 2) { - parent = plugin.getResidenceManager().getNameByLoc(player.getLocation()); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); zname = args[1]; } else { - parent = args[1]; + res = plugin.getResidenceManager().getByName(args[1]); zname = args[2]; } - + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } if (plugin.getWorldEdit() != null) { if (plugin.getWorldEdit().getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) { plugin.getSelectionManager().worldEdit(player); } } if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { - ClaimedResidence res = plugin.getResidenceManager().getByName(parent); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - - if (!resadmin && !plugin.hasPermission(player, "residence.create.subzone", lm.Subzone_CantCreate)) { + if (!resadmin && !plugin.hasPermission(player, "residence.create.subzone", lm.Subzone_CantCreate)) return true; - } res.addSubzone(player, plugin.getSelectionManager().getPlayerLoc1(player.getName()), plugin.getSelectionManager().getPlayerLoc2(player.getName()), zname, resadmin); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 92a7c633e..5193c2503 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -649,7 +649,8 @@ public void onSignCreate(SignChangeEvent event) { } else { res = plugin.getResidenceManager().getByLoc(loc); - landName = plugin.getResidenceManager().getNameByLoc(loc); + if (res != null) + landName = res.getName(); } if (res == null) { @@ -997,9 +998,9 @@ public void onInfoCheck(PlayerInteractEvent event) { return; Location loc = block.getLocation(); - String res = plugin.getResidenceManager().getNameByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null) - plugin.getResidenceManager().printAreaInfo(res, player, false); + plugin.getResidenceManager().printAreaInfo(res.getName(), player, false); else plugin.msg(player, lm.Residence_NoResHere); event.setCancelled(true); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 82b8715bb..d5507b365 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -574,6 +574,15 @@ public boolean addSubzone(Player player, Location loc1, Location loc2, String na return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); } + public boolean addSubzone(Player player, String name, boolean resadmin) { + if (Residence.getInstance().getSelectionManager().hasPlacedBoth(player)) { + Location loc1 = Residence.getInstance().getSelectionManager().getPlayerLoc1(player); + Location loc2 = Residence.getInstance().getSelectionManager().getPlayerLoc2(player); + return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); + } + return false; + } + public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { if (!plugin.validName(name)) { if (player != null) { @@ -1579,7 +1588,10 @@ public CuboidArea getArea(String name) { } public String getName() { - return plugin.getResidenceManager().getNameByRes(this); + String name = this.resName; + if (this.getParent() != null) + name = this.getParent().getName() + "." + name; + return name; } public void remove() { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index ef40442ca..451c8d5f3 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -35,6 +35,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; @@ -42,7 +43,7 @@ public class ResidenceManager implements ResidenceInterface { protected SortedMap residences; - protected Map>> chunkResidences; + protected Map>> chunkResidences; protected List shops = new ArrayList(); private Residence plugin; @@ -61,23 +62,24 @@ public boolean isOwnerOfLocation(Player player, Location loc) { @Override public ClaimedResidence getByLoc(Location loc) { + Long time = System.nanoTime(); if (loc == null) return null; - if (loc.getWorld() == null) + World world = loc.getWorld(); + if (world == null) return null; - if (loc.getWorld().getName() == null) + String worldName = world.getName(); + if (worldName == null) return null; ClaimedResidence res = null; - String world = loc.getWorld().getName(); ChunkRef chunk = new ChunkRef(loc); - if (!chunkResidences.containsKey(world)) + if (!chunkResidences.containsKey(worldName)) return null; - Map> ChunkMap = chunkResidences.get(world); + Map> ChunkMap = chunkResidences.get(worldName); if (ChunkMap.containsKey(chunk)) { - for (String key : ChunkMap.get(chunk)) { - ClaimedResidence entry = residences.get(key); + for (ClaimedResidence entry : ChunkMap.get(chunk)) { if (entry == null) continue; if (entry.containsLoc(loc)) { @@ -90,6 +92,8 @@ public ClaimedResidence getByLoc(Location loc) { if (res == null) return null; + Debug.D("Got res in " + (System.nanoTime() - time)); + ClaimedResidence subres = res.getSubzoneByLoc(loc); if (subres == null) return res; @@ -116,35 +120,6 @@ public ClaimedResidence getByName(String name) { return res; } - @Override - public String getNameByLoc(Location loc) { - ClaimedResidence res = this.getByLoc(loc); - if (res == null) - return null; - String name = res.getName(); - if (name == null) - return null; - String szname = res.getSubzoneNameByLoc(loc); - if (szname != null) - return name + "." + szname; - return name; - } - - @Override - public String getNameByRes(ClaimedResidence res) { - Set> set = residences.entrySet(); - for (Entry check : set) { - if (check.getValue() == res) { - return check.getValue().getResidenceName(); - } - String n = check.getValue().getSubzoneNameByRes(res); - if (n != null) { - return check.getValue().getResidenceName() + "." + n; - } - } - return null; - } - @Override public String getSubzoneNameByRes(ClaimedResidence res) { Set> set = residences.entrySet(); @@ -850,8 +825,8 @@ public ResidenceManager load(Map root) throws Exception { return resm; } - public Map> loadMap(String worldName, Map root, ResidenceManager resm) throws Exception { - Map> retRes = new HashMap<>(); + public Map> loadMap(String worldName, Map root, ResidenceManager resm) throws Exception { + Map> retRes = new HashMap<>(); if (root == null) return retRes; @@ -893,11 +868,11 @@ public Map> loadMap(String worldName, Map } for (ChunkRef chunk : getChunks(residence)) { - List ress = new ArrayList<>(); + List ress = new ArrayList<>(); if (retRes.containsKey(chunk)) { ress.addAll(retRes.get(chunk)); } - ress.add(resName); + ress.add(residence); retRes.put(chunk, ress); } @@ -1060,7 +1035,7 @@ public void removeAllFromWorld(CommandSender sender, String world) { } } chunkResidences.remove(world); - chunkResidences.put(world, new HashMap>()); + chunkResidences.put(world, new HashMap>()); if (count == 0) { sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW + world); } else { @@ -1088,11 +1063,11 @@ public void removeChunkList(String name) { String world = res.getWorld(); if (chunkResidences.get(world) != null) { for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList<>(); + List ress = new ArrayList<>(); if (chunkResidences.get(world).containsKey(chunk)) { ress.addAll(chunkResidences.get(world).get(chunk)); } - ress.remove(name); + ress.remove(res); chunkResidences.get(world).put(chunk, ress); } } @@ -1107,19 +1082,20 @@ public void calculateChunks(String name) { name = name.toLowerCase(); res = residences.get(name); - if (res != null) { - String world = res.getWorld(); - if (chunkResidences.get(world) == null) { - chunkResidences.put(world, new HashMap>()); - } - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList<>(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - ress.add(name); - chunkResidences.get(world).put(chunk, ress); + if (res == null) + return; + + String world = res.getWorld(); + if (chunkResidences.get(world) == null) { + chunkResidences.put(world, new HashMap>()); + } + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList<>(); + if (chunkResidences.get(world).containsKey(chunk)) { + ress.addAll(chunkResidences.get(world).get(chunk)); } + ress.add(res); + chunkResidences.get(world).put(chunk, ress); } } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 9ff12e6d5..923a676e7 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -119,6 +119,10 @@ public CuboidArea getSelectionCuboid(String player) { return new CuboidArea(getPlayerLoc1(player), getPlayerLoc2(player)); } + public boolean hasPlacedBoth(Player player) { + return hasPlacedBoth(player.getName()); + } + public boolean hasPlacedBoth(String player) { return playerLoc1.containsKey(player) && playerLoc2.containsKey(player); } diff --git a/src/plugin.yml b/src/plugin.yml index 3c86973d5..6f4b9bf52 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.13.5 +version: 4.5.13.6 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 4720b8e43e6107f5c7b9f87e66a76c735b38912d Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 3 Feb 2017 16:37:58 +0200 Subject: [PATCH 0325/1142] This should be null --- .../protection/ClaimedResidence.java | 25 +++---------------- .../protection/ResidenceManager.java | 10 +++----- .../residence/shopStuff/ShopSignUtil.java | 2 +- src/plugin.yml | 2 +- 4 files changed, 8 insertions(+), 31 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index d5507b365..f96bfe2d8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -48,7 +48,7 @@ public class ClaimedResidence { - private String resName; + private String resName = null; protected ClaimedResidence parent; protected Map areas; protected Map subzones; @@ -684,27 +684,6 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l return false; } - public String getSubzoneNameByLoc(Location loc) { - Set> set = subzones.entrySet(); - ClaimedResidence res = null; - String key = null; - for (Entry entry : set) { - if (entry.getValue().containsLoc(loc)) { - key = entry.getKey(); - res = entry.getValue(); - break; - } - } - if (key == null || res == null) - return null; - - String subname = res.getSubzoneNameByLoc(loc); - if (subname != null) { - return key + "." + subname; - } - return key; - } - public ClaimedResidence getSubzoneByLoc(Location loc) { Set> set = subzones.entrySet(); ClaimedResidence res = null; @@ -1591,6 +1570,8 @@ public String getName() { String name = this.resName; if (this.getParent() != null) name = this.getParent().getName() + "." + name; + if (name == null) + return "Unknown"; return name; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 451c8d5f3..0d2363a2a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -35,7 +35,6 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; @@ -62,7 +61,6 @@ public boolean isOwnerOfLocation(Player player, Location loc) { @Override public ClaimedResidence getByLoc(Location loc) { - Long time = System.nanoTime(); if (loc == null) return null; World world = loc.getWorld(); @@ -92,8 +90,6 @@ public ClaimedResidence getByLoc(Location loc) { if (res == null) return null; - Debug.D("Got res in " + (System.nanoTime() - time)); - ClaimedResidence subres = res.getSubzoneByLoc(loc); if (subres == null) return res; @@ -857,7 +853,7 @@ public Map> loadMap(String worldName, Map> loadMap(String worldName, Map Date: Sat, 4 Feb 2017 17:53:49 +0200 Subject: [PATCH 0326/1142] Dont create new ResidenceManager when we have it already --- src/com/bekvon/bukkit/residence/Residence.java | 4 ++-- .../residence/protection/ResidenceManager.java | 15 ++++++--------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index eb818ed3b..b6da56a69 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1242,8 +1242,8 @@ protected boolean loadYml() throws Exception { } } - rmanager = getResidenceManager().load(worlds); - + getResidenceManager().load(worlds); +//ss // Getting shop residences Map resList = rmanager.getResidences(); for (Entry one : resList.entrySet()) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 0d2363a2a..977a6ee56 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -793,10 +793,9 @@ public Map save() { return worldmap; } - public ResidenceManager load(Map root) throws Exception { - ResidenceManager resm = new ResidenceManager(plugin); + public void load(Map root) throws Exception { if (root == null) - return resm; + return; for (World world : plugin.getServ().getWorlds()) { long time = System.currentTimeMillis(); @@ -805,7 +804,7 @@ public ResidenceManager load(Map root) throws Exception { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + world.getName() + " data into memory..."); if (reslist != null) { try { - resm.chunkResidences.put(world.getName(), loadMap(world.getName(), reslist, resm)); + chunkResidences.put(world.getName(), loadMap(world.getName(), reslist)); } catch (Exception ex) { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + "Error in loading save file for world: " + world.getName()); if (plugin.getConfigManager().stopOnSaveError()) @@ -818,10 +817,9 @@ public ResidenceManager load(Map root) throws Exception { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + world.getName() + " data into memory. (" + PastTime + ")"); } - return resm; } - public Map> loadMap(String worldName, Map root, ResidenceManager resm) throws Exception { + public Map> loadMap(String worldName, Map root) throws Exception { Map> retRes = new HashMap<>(); if (root == null) return retRes; @@ -838,7 +836,6 @@ public Map> loadMap(String worldName, Map) res.getValue(), null, plugin); - if (residence == null) continue; @@ -872,7 +869,7 @@ public Map> loadMap(String worldName, Map Date: Sat, 4 Feb 2017 17:55:22 +0200 Subject: [PATCH 0327/1142] Correct version --- src/com/bekvon/bukkit/residence/Residence.java | 2 +- src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index b6da56a69..089272fc6 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1243,7 +1243,7 @@ protected boolean loadYml() throws Exception { } getResidenceManager().load(worlds); -//ss + // Getting shop residences Map resList = rmanager.getResidences(); for (Entry one : resList.entrySet()) { diff --git a/src/plugin.yml b/src/plugin.yml index 77c4ad4ac..b2c06b2c3 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.13.7 +version: 4.5.13.9 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From c34470eb955f8ffd097023a6dd836d218f7bb216 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 5 Feb 2017 15:45:43 +0200 Subject: [PATCH 0328/1142] better way to show raw messages --- .../bekvon/bukkit/residence/Residence.java | 7 +- .../bukkit/residence/commands/remove.java | 12 +- .../bukkit/residence/commands/shop.java | 39 +++--- .../bukkit/residence/commands/sublist.java | 11 +- .../residence/economy/TransactionManager.java | 19 ++- .../residence/economy/rent/RentManager.java | 24 ++-- .../protection/ClaimedResidence.java | 6 +- .../protection/ResidenceManager.java | 12 +- .../bukkit/residence/text/help/HelpEntry.java | 31 ++--- .../residence/text/help/InformationPager.java | 56 +++++---- .../bukkit/residence/utils/RawMessage.java | 117 ++++++++++++++++++ 11 files changed, 215 insertions(+), 119 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/utils/RawMessage.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 089272fc6..253308ee2 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -97,6 +97,7 @@ import com.bekvon.bukkit.residence.utils.CrackShot; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; +import com.bekvon.bukkit.residence.utils.RawMessage; import com.bekvon.bukkit.residence.utils.Sorting; import com.bekvon.bukkit.residence.utils.TabComplete; import com.bekvon.bukkit.residence.utils.VersionChecker; @@ -1755,8 +1756,10 @@ public boolean hasPermission(CommandSender sender, String permision, Boolean out String outMsg = getLM().getMessage(lm.General_NoPermission); if (message != null) outMsg = message; - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " {\"text\":\"\",\"extra\":[{\"text\":\"" + outMsg - + "\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"§2" + permision + "\"}}]}"); + + RawMessage rm = new RawMessage(); + rm.add(outMsg, "§2" + permision); + rm.show(sender); ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); console.sendMessage(ChatColor.RED + sender.getName() + " No permission -> " + permision); } diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 22ac2644e..ef3464750 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -15,6 +14,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.RawMessage; public class remove implements cmd { @@ -69,16 +69,14 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (resadmin) cmd = "resadmin"; if (sender instanceof Player) { - String raw = ""; + RawMessage rm = new RawMessage(); if (res.isSubzone()) { - raw = plugin.getResidenceManager().convertToRaw(null, plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()), - "Click to confirm", cmd + " confirm"); + rm.add(plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()), "Click to confirm", cmd + " confirm"); } else { - raw = plugin.getResidenceManager().convertToRaw(null, plugin.msg(lm.Residence_DeleteConfirm, res.getResidenceName()), - "Click to confirm", cmd + " confirm"); + rm.add(plugin.msg(lm.Residence_DeleteConfirm, res.getResidenceName()), "Click to confirm", cmd + " confirm"); } if (plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()).length() > 0) - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); + rm.show(sender); } else { if (res.isSubzone()) plugin.msg(sender, lm.Subzone_DeleteConfirm, res.getResidenceName()); diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 44b7bda03..1f728be51 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -7,7 +7,6 @@ import java.util.Map; import java.util.TimeZone; import java.util.Map.Entry; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.command.Command; @@ -25,6 +24,7 @@ import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.shopStuff.Vote; +import com.bekvon.bukkit.residence.utils.RawMessage; public class shop implements cmd { @@ -136,16 +136,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman int Prevpage = page - 1; Prevpage = page > 1 ? Prevpage : page; - String prevCmd = "/res shop votes " + res.getName() + " " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + plugin.msg(lm.General_PrevInfoPage) - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; - String nextCmd = "/res shop votes " + res.getName() + " " + NextPage; - String next = " {\"text\":\"" + plugin.msg(lm.General_NextInfoPage) + " " + separator - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + RawMessage rm = new RawMessage(); - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); + rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), page > 1 ? "<<<" : null, page > 1 ? "/res shop votes " + res.getName() + " " + Prevpage : null); + rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, page > 1 ? ">>>" : null, pagecount > page ? "/res shop votes " + res.getName() + " " + NextPage : null); + if (pagecount != 0) + rm.show(sender); return true; } @@ -204,11 +200,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman String desc = res.getShopDesc() == null ? plugin.msg(lm.Shop_NoDesc) : plugin.msg( lm.Shop_Desc, ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); - String prev = "[\"\",{\"text\":\"" + " " + message - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/res tp " + one.getKey() - + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; - - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev); + RawMessage rm = new RawMessage(); + rm.add(" " + message, desc, "/res tp " + one.getKey()); + rm.show(sender); i++; } @@ -221,16 +215,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman int Prevpage = page - 1; Prevpage = page > 1 ? Prevpage : page; - String prevCmd = "/res shop list " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + plugin.msg(lm.General_PrevInfoPage) - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; - String nextCmd = "/res shop list " + NextPage; - String next = " {\"text\":\"" + plugin.msg(lm.General_NextInfoPage) + " " + separator - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + nextCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; - - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); + RawMessage rm = new RawMessage(); + rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), page > 1 ? "<<<" : null, page > 1 ? "/res shop list " + Prevpage : null); + rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, page > 1 ? ">>>" : null, pagecount > page ? "/res shop list " + NextPage : null); + if (pagecount != 0) + rm.show(sender); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java index d708b6a7d..8fc4c90e3 100644 --- a/src/com/bekvon/bukkit/residence/commands/sublist.java +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -21,16 +21,17 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (!(sender instanceof Player)) return false; + if (args.length != 1 && args.length != 2 && args.length != 3) + return false; + Player player = (Player) sender; - int page = 1; + int page = 0; try { if (args.length > 0) { page = Integer.parseInt(args[args.length - 1]); } } catch (Exception ex) { } - if (args.length != 1 && args.length != 2 && args.length != 3) - return false; ClaimedResidence res; if (args.length == 1) { @@ -38,6 +39,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } else { res = plugin.getResidenceManager().getByName(args[1]); } + + if (page < 1) + page = 1; + if (res != null) { res.printSubzoneList(player, page); } else { diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index eb75a59db..69831050b 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -1,9 +1,9 @@ package com.bekvon.bukkit.residence.economy; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketBuyInterface; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -108,7 +108,7 @@ public void putForSale(ClaimedResidence res, Player player, int amount, boolean } ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - + if (!resadmin && !(rPlayer.getGroup().canSellLand() || player.hasPermission("residence.sell"))) { plugin.msg(player, lm.General_NoPermission); return; @@ -369,16 +369,11 @@ public void printForSaleResidences(Player player, int page) { int Prevpage = page - 1; Prevpage = page > 1 ? Prevpage : page; - String prevCmd = "/res market list sell " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + plugin.msg(lm.General_PrevInfoPage) - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; - String nextCmd = "/res market list sell " + NextPage; - String next = " {\"text\":\"" + plugin.msg(lm.General_NextInfoPage) + " " + separator - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" - + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; - - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + prev + "," + next); + RawMessage rm = new RawMessage(); + rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), page > 1 ? "<<<" : null, page > 1 ? "/res market list sell " + Prevpage : null); + rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, pagecount > page ? ">>>" : null, pagecount > page ? "/res market list sell " + NextPage : null); + if (pagecount != 0) + rm.show(player); } public void clearSales() { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index e576b9fa7..4312147ce 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -1,6 +1,5 @@ package com.bekvon.bukkit.residence.economy.rent; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.World; @@ -15,6 +14,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.utils.GetTime; +import com.bekvon.bukkit.residence.utils.RawMessage; import java.util.ArrayList; import java.util.HashMap; @@ -843,11 +843,13 @@ public void printRentableResidences(Player player, int page) { String msg = plugin.msg(lm.Rent_RentList, z, res.getName(), res.getRentable().cost, res.getRentable().days, res.getRentable().AllowRenewing, res.getOwner(), rentedBy); + RawMessage rm = new RawMessage(); + rm.add(msg, "§2" + hover); + if (!hover.equalsIgnoreCase("")) - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " {\"text\":\"\",\"extra\":[{\"text\":\"" + msg - + "\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"§2" + hover + "\"}}]}"); + rm.show(player); else - player.sendMessage(msg); + rm.showClean(player); } @@ -865,16 +867,12 @@ public void printRentableResidences(Player player, int page) { int Prevpage = page - 1; Prevpage = page > 1 ? Prevpage : page; - String prevCmd = "/res market list rent " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + plugin.msg(lm.General_PrevInfoPage) - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; - String nextCmd = "/res market list rent " + NextPage; - String next = " {\"text\":\"" + plugin.msg(lm.General_NextInfoPage) + " " + separator - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" - + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; + RawMessage rm = new RawMessage(); + rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), page > 1 ? "<<<" : null, page > 1 ? "/res market list rent " + Prevpage : null); + rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, pagecount > page ? ">>>" : null, pagecount > page ? "/res market list rent " + NextPage : null); + if (pagecount != 0) + rm.show(player); - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + prev + "," + next); } @Override diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index f96bfe2d8..2c399343e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1055,7 +1055,7 @@ public void printSubzoneList(Player player, int page) { for (Entry sz : subzones.entrySet()) { temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + plugin.msg(lm.General_Owner, sz.getValue().getOwner())); } - plugin.getInfoPageManager().printInfo(player, plugin.msg(lm.General_Subzones), temp, page); + plugin.getInfoPageManager().printInfo(player, "res sublist " + this.getName(), plugin.msg(lm.General_Subzones), temp, page); } public void printAreaList(Player player, int page) { @@ -1063,7 +1063,7 @@ public void printAreaList(Player player, int page) { for (String area : areas.keySet()) { temp.add(area); } - plugin.getInfoPageManager().printInfo(player, plugin.msg(lm.General_PhysicalAreas), temp, page); + plugin.getInfoPageManager().printInfo(player, "res area list " + this.getName(), plugin.msg(lm.General_PhysicalAreas), temp, page); } public void printAdvancedAreaList(Player player, int page) { @@ -1076,7 +1076,7 @@ public void printAdvancedAreaList(Player player, int page) { .getBlockX() + "," + h.getBlockY() + "," + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); } - plugin.getInfoPageManager().printInfo(player, plugin.msg(lm.General_PhysicalAreas), temp, page); + plugin.getInfoPageManager().printInfo(player, "res area listall " + this.getName(), plugin.msg(lm.General_PhysicalAreas), temp, page); } public String[] getAreaList() { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 977a6ee56..36131c0b6 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -36,6 +36,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.GetTime; +import com.bekvon.bukkit.residence.utils.RawMessage; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; import com.griefcraft.model.Protection; @@ -649,11 +650,14 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi } if (sender instanceof Player) { - String raw = convertToRaw(null, resNameOwner, worldInfo); - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); + RawMessage rm = new RawMessage(); + rm.add(resNameOwner, worldInfo); + rm.show(sender); - raw = convertToRaw(null, ResFlagMsg, ResFlagList); - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + raw); + rm.clear(); + + rm.add(ResFlagMsg, ResFlagList); + rm.show(sender); } else { plugin.msg(sender, resNameOwner); plugin.msg(sender, worldInfo); diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 2cfddf78d..0e46b3b73 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -12,6 +12,8 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.RawMessage; + import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -98,14 +100,9 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p if (resadmin) path = path.replace("/res ", "/resadmin "); - String msg = "[\"\",{\"text\":\"" + helplines.get(i).getDesc() - + "\",\"color\":\"gold\",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + path + helplines.get(i).getCommand() - + " \"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + desc + "\"}]}}}]"; - - if (sender instanceof Player) - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + msg); - else - sender.sendMessage(helplines.get(i).getDesc()); + RawMessage rm = new RawMessage(); + rm.add(helplines.get(i).getDesc(), desc, null, path + helplines.get(i).getCommand()); + rm.show(sender); } else sender.sendMessage(helplines.get(i).getDesc()); @@ -115,23 +112,9 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p if (pagecount == 1) return; - int NextPage = page + 1; - NextPage = page < pagecount ? NextPage : page; - int Prevpage = page - 1; - Prevpage = page > 1 ? Prevpage : page; - String baseCmd = resadmin ? "resadmin" : "res"; - String prevCmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " + Prevpage : "/" + baseCmd + " ? " + Prevpage; - String prev = "[\"\",{\"text\":\"" + separator + " " + Residence.getInstance().msg(lm.General_PrevInfoPage) - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; - String nextCmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " + NextPage : "/" + baseCmd + " ? " + NextPage; - String next = " {\"text\":\"" + Residence.getInstance().msg(lm.General_NextInfoPage) + " " + separator - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" - + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}]"; - - if (sender instanceof Player) - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + prev + "," + next); + String cmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " : "/" + baseCmd + " ? "; + Residence.getInstance().getInfoPageManager().ShowPagination(sender, pagecount, page, cmd); } public void printHelp(CommandSender sender, int page, String path, boolean resadmin) { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 1cb9470bb..629deed16 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.GetTime; +import com.bekvon.bukkit.residence.utils.RawMessage; import java.util.ArrayList; import java.util.Arrays; @@ -28,11 +29,11 @@ public InformationPager(Residence plugin) { this.plugin = plugin; } - public void printInfo(CommandSender sender, String title, String[] lines, int page) { - printInfo(sender, title, Arrays.asList(lines), page); + public void printInfo(CommandSender sender, String command, String title, String[] lines, int page) { + printInfo(sender, command, title, Arrays.asList(lines), page); } - public void printInfo(CommandSender sender, String title, List lines, int page) { + public void printInfo(CommandSender sender, String command, String title, List lines, int page) { int perPage = 6; int start = (page - 1) * perPage; int end = start + perPage; @@ -50,10 +51,24 @@ public void printInfo(CommandSender sender, String title, List lines, in if (lines.size() > i) sender.sendMessage(ChatColor.GREEN + lines.get(i)); } + + RawMessage rm = new RawMessage(); + if (page > 1) + rm.add(plugin.msg(lm.General_PrevInfoPage), plugin.msg(lm.General_PrevInfoPage), command + " " + (page - 1)); + else + rm.add(plugin.msg(lm.General_PrevInfoPage)); if (pagecount > page) - plugin.msg(sender, lm.InformationPage_NextPage, plugin.msg(lm.General_NextPage)); + rm.add(plugin.msg(lm.General_NextInfoPage), plugin.msg(lm.General_NextInfoPage), command + " " + (page + 1)); else - plugin.msg(sender, lm.InformationPage_NoNextPage); + rm.add(plugin.msg(lm.General_NextInfoPage)); + + if (pagecount != 1) + rm.show(sender); + +// if (pagecount > page) +// plugin.msg(sender, lm.InformationPage_NextPage, plugin.msg(lm.General_NextPage)); +// else +// plugin.msg(sender, lm.InformationPage_NoNextPage); } public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, int page, boolean resadmin) { @@ -166,9 +181,9 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, final int start, final boolean resadmin) { @@ -250,9 +265,9 @@ public void run() { } - public void ShowPagination(String target, int pageCount, int CurrentPage, String cmd) { - if (target.equalsIgnoreCase("console")) - return; + public void ShowPagination(CommandSender sender, int pageCount, int CurrentPage, String cmd) { + if (!cmd.startsWith("/")) + cmd = "/" + cmd; String separator = ChatColor.GOLD + ""; String simbol = "\u25AC"; for (int i = 0; i < 10; i++) { @@ -267,21 +282,10 @@ public void ShowPagination(String target, int pageCount, int CurrentPage, String int Prevpage = CurrentPage - 1; Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; - String prevCmd = "/" + cmd + " " + Prevpage; - String prev = "\"\",{\"text\":\"" + separator + " " + plugin.msg(lm.General_PrevInfoPage) - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + prevCmd - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + "<<<" + "\"}]}}}"; - String nextCmd = "/" + cmd + " " + NextPage; - String next = " {\"text\":\"" + plugin.msg(lm.General_NextInfoPage) + " " + separator - + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" - + nextCmd + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ">>>" + "\"}]}}}"; - - if (CurrentPage >= pageCount) - next = "{\"text\":\"" + plugin.msg(lm.General_NextInfoPage) + " " + separator + "\"}"; - - if (CurrentPage <= 1) - prev = "{\"text\":\"" + separator + " " + plugin.msg(lm.General_PrevInfoPage) + "\"}"; - - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + target + " [" + prev + "," + next + "]"); + RawMessage rm = new RawMessage(); + rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), CurrentPage > 1 ? "<<<" : null, CurrentPage > 1 ? cmd + " " + Prevpage : null); + rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, pageCount > CurrentPage ? ">>>" : null, pageCount > CurrentPage ? cmd + " " + NextPage : null); + if (pageCount != 0) + rm.show(sender); } } diff --git a/src/com/bekvon/bukkit/residence/utils/RawMessage.java b/src/com/bekvon/bukkit/residence/utils/RawMessage.java new file mode 100644 index 000000000..6639470a0 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/RawMessage.java @@ -0,0 +1,117 @@ +package com.bekvon.bukkit.residence.utils; + +import java.util.ArrayList; +import java.util.List; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class RawMessage { + + List parts = new ArrayList(); + List cleanParts = new ArrayList(); + String combined = ""; + String combinedClean = ""; + + public void clear() { + parts = new ArrayList(); + cleanParts = new ArrayList(); + combined = ""; + combinedClean = ""; + } + + public RawMessage add(String text) { + return add(text, null, null, null); + } + + public RawMessage add(String text, String hoverText) { + return add(text, hoverText, null, null); + } + + public RawMessage add(String text, String hoverText, String command) { + return add(text, hoverText, command, null); + } + + public RawMessage add(String text, String hoverText, String command, String suggestion) { + if (text == null) + return this; + String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', text) + "\""; + + String last = ChatColor.getLastColors(text); + if (last != null) { + ChatColor color = ChatColor.getByChar(last.replace("§", "")); + if (color != null) { + f += ",\"color\":\"" + color.name().toLowerCase() + "\""; + } + } + if (hoverText != null) + f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText) + "\"}]}}"; + if (suggestion != null) + f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + suggestion + "\"}"; + if (command != null) { + if (!command.startsWith("/")) + command = "/" + command; + f += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}"; + } + f += "}"; + parts.add(f); + cleanParts.add(ChatColor.translateAlternateColorCodes('&', text)); + return this; + } + + public RawMessage combine() { + String f = ""; + for (String part : parts) { + if (f.isEmpty()) + f = "[\"\","; + else + f += ","; + f += part; + } + if (!f.isEmpty()) + f += "]"; + combined = f; + return this; + } + + public RawMessage combineClean() { + String f = ""; + for (String part : cleanParts) { + f += part; + } + combinedClean = f; + return this; + } + + public RawMessage show(Player player) { + if (combined.isEmpty()) + combine(); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + combined); + return this; + } + + public RawMessage showClean(Player player) { + if (combinedClean.isEmpty()) + combineClean(); + player.sendMessage(combined); + return this; + } + + public RawMessage show(CommandSender sender) { + if (combined.isEmpty()) + combine(); + if (sender instanceof Player) + show((Player) sender); + else + sender.sendMessage(this.combineClean().combinedClean); + return this; + } + + public String getRaw() { + if (combined.isEmpty()) + combine(); + return combined; + } + +} From c5260bb1cec2b08909c81fe6d91d6dca5e5a5a35 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 6 Feb 2017 12:27:47 +0200 Subject: [PATCH 0329/1142] Better tellraw messages Include subzones into res list if parent and child is not same owner --- .../bekvon/bukkit/residence/Residence.java | 12 ++-- .../residence/containers/ResidencePlayer.java | 8 +-- .../protection/ClaimedResidence.java | 36 ++++++++++-- .../residence/protection/PlayerManager.java | 31 ++++++---- .../protection/ResidenceManager.java | 7 ++- .../protection/ResidencePermissions.java | 2 + .../residence/text/help/InformationPager.java | 20 +------ .../bukkit/residence/text/help/PageInfo.java | 57 +++++++++++++++++++ 8 files changed, 122 insertions(+), 51 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/text/help/PageInfo.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 253308ee2..305d95519 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -778,8 +778,6 @@ public void run() { Bukkit.getConsoleSender().sendMessage(getPrefix() + " Enabled! Version " + this.getDescription().getVersion() + " by Zrips"); initsuccess = true; - PlayerManager.fillList(); - } catch (Exception ex) { initsuccess = false; getServer().getPluginManager().disablePlugin(this); @@ -1282,11 +1280,11 @@ protected boolean loadYml() throws Exception { rentmanager.load((Map) yml.getRoot().get("RentSystem")); } - for (Player one : Bukkit.getOnlinePlayers()) { - ResidencePlayer rplayer = getPlayerManager().getResidencePlayer(one); - if (rplayer != null) - rplayer.recountRes(); - } +// for (Player one : Bukkit.getOnlinePlayers()) { +// ResidencePlayer rplayer = getPlayerManager().getResidencePlayer(one); +// if (rplayer != null) +// rplayer.recountRes(); +// } // System.out.print("[Residence] Loaded..."); return true; diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 30f1d47cf..f3f7ced0f 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -15,6 +15,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.ResidenceManager; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { @@ -190,13 +191,6 @@ public PermissionGroup getGroup(String world) { return this.group; } - public void recountRes() { - if (this.userName != null) { - ResidenceManager m = Residence.getInstance().getResidenceManager(); - this.ResidenceList = m.getResidenceMapList(this.userName, true); - } - } - public ResidencePlayer updatePlayer(Player player) { this.player = player; this.uuid = player.getUniqueId(); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 2c399343e..47a05c753 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -24,6 +24,10 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.shopStuff.ShopVote; +import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.utils.Debug; +import com.bekvon.bukkit.residence.utils.RawMessage; + import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; @@ -1050,12 +1054,30 @@ public int getSubzonesAmount(Boolean includeChild) { return i; } - public void printSubzoneList(Player player, int page) { - ArrayList temp = new ArrayList<>(); - for (Entry sz : subzones.entrySet()) { - temp.add(ChatColor.GREEN + sz.getKey() + ChatColor.YELLOW + " - " + plugin.msg(lm.General_Owner, sz.getValue().getOwner())); + public void printSubzoneList(CommandSender sender, int page) { + + PageInfo pi = new PageInfo(6, subzones.size(), page); + + if (!pi.isPageOk()) { + sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); + return; } - plugin.getInfoPageManager().printInfo(player, "res sublist " + this.getName(), plugin.msg(lm.General_Subzones), temp, page); + + plugin.msg(sender, lm.InformationPage_TopLine, plugin.msg(lm.General_Subzones)); + plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), pi.getTotalPages(), pi.getTotalEntries())); + RawMessage rm = new RawMessage(); + for (int i = pi.getStart(); i < pi.getEnd(); i++) { + if (subzones.size() <= i) + break; + ClaimedResidence res = getSubzones().get(i); + if (res == null) + continue; + rm.add(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " + plugin.msg(lm.General_Owner, res.getOwner()), "Teleport to " + res.getName(), "res tp " + res.getName()); + rm.show(sender); + rm.clear(); + } + + plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, "res sublist " + this.getName()); } public void printAreaList(Player player, int page) { @@ -1442,6 +1464,10 @@ public static ClaimedResidence load(String worldName, Map root, if (plugin.getConfigManager().flagsInherit()) subres.getPermissions().setParent(res.getPermissions()); + // Adding subzone owner into hies res list if parent zone owner is not same person + if (subres.getParent() != null && !subres.getOwnerUUID().equals(subres.getParent().getOwnerUUID())) + plugin.getPlayerManager().addResidence(subres.getOwner(), subres); + res.subzones.put(map.getKey().toLowerCase(), subres); } } diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index fbe2b1c24..a7f26ed6f 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -17,6 +17,7 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.utils.Debug; public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); @@ -26,36 +27,27 @@ public PlayerManager(Residence plugin) { this.plugin = plugin; } - public void playerJoin(Player player) { + public ResidencePlayer playerJoin(Player player) { ResidencePlayer resPlayer = players.get(player.getName().toLowerCase()); if (resPlayer == null) { resPlayer = new ResidencePlayer(player); - resPlayer.recountRes(); players.put(player.getName().toLowerCase(), resPlayer); } else { resPlayer.updatePlayer(player); resPlayer.RecalculatePermissions(); } - return; + return resPlayer; } public ResidencePlayer playerJoin(String player) { if (!players.containsKey(player.toLowerCase())) { ResidencePlayer resPlayer = new ResidencePlayer(player); - resPlayer.recountRes(); players.put(player.toLowerCase(), resPlayer); return resPlayer; } return null; } - public void fillList() { - players.clear(); - for (Player player : Bukkit.getOnlinePlayers()) { - playerJoin(player); - } - } - @Override public ArrayList getResidenceList(String player) { ArrayList temp = new ArrayList(); @@ -126,9 +118,11 @@ public ArrayList getResidences(String player, boolean showhidd public TreeMap getResidencesMap(String player, boolean showhidden, boolean onlyHidden, World world) { TreeMap temp = new TreeMap(); playerJoin(player); + ResidencePlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer == null) return temp; + for (Entry one : resPlayer.getResidenceMap().entrySet()) { boolean hidden = one.getValue().getPermissions().has(Flags.hidden, false); if (!showhidden && hidden) @@ -188,11 +182,24 @@ public int getMaxRents(String player) { } public ResidencePlayer getResidencePlayer(Player player) { - return getResidencePlayer(player.getName()); + ResidencePlayer resPlayer = null; + if (player == null) + return null; + if (players.containsKey(player.getName().toLowerCase())) { + resPlayer = players.get(player.getName().toLowerCase()); + resPlayer.updatePlayer(player); + } else { + resPlayer = playerJoin(player); + } + + return resPlayer; } @Override public ResidencePlayer getResidencePlayer(String player) { + Player p = Bukkit.getPlayer(player); + if (p != null) + return getResidencePlayer(p); ResidencePlayer resPlayer = null; if (players.containsKey(player.toLowerCase())) { resPlayer = players.get(player.toLowerCase()); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 36131c0b6..bc45c4a52 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -35,6 +35,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.RawMessage; import com.griefcraft.cache.ProtectionCache; @@ -657,7 +658,7 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi rm.clear(); rm.add(ResFlagMsg, ResFlagList); - rm.show(sender); + rm.show(sender); } else { plugin.msg(sender, resNameOwner); plugin.msg(sender, worldInfo); @@ -873,6 +874,8 @@ public Map> loadMap(String worldName, Map i) sender.sendMessage(ChatColor.GREEN + lines.get(i)); } - - RawMessage rm = new RawMessage(); - if (page > 1) - rm.add(plugin.msg(lm.General_PrevInfoPage), plugin.msg(lm.General_PrevInfoPage), command + " " + (page - 1)); - else - rm.add(plugin.msg(lm.General_PrevInfoPage)); - if (pagecount > page) - rm.add(plugin.msg(lm.General_NextInfoPage), plugin.msg(lm.General_NextInfoPage), command + " " + (page + 1)); - else - rm.add(plugin.msg(lm.General_NextInfoPage)); - - if (pagecount != 1) - rm.show(sender); - -// if (pagecount > page) -// plugin.msg(sender, lm.InformationPage_NextPage, plugin.msg(lm.General_NextPage)); -// else -// plugin.msg(sender, lm.InformationPage_NoNextPage); + + plugin.getInfoPageManager().ShowPagination(sender, pagecount, page, command); } public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, int page, boolean resadmin) { diff --git a/src/com/bekvon/bukkit/residence/text/help/PageInfo.java b/src/com/bekvon/bukkit/residence/text/help/PageInfo.java new file mode 100644 index 000000000..b2571392d --- /dev/null +++ b/src/com/bekvon/bukkit/residence/text/help/PageInfo.java @@ -0,0 +1,57 @@ +package com.bekvon.bukkit.residence.text.help; + +public class PageInfo { + + private int totalEntries = 0; + private int totalPages = 0; + private int start = 0; + private int end = 0; + private int currentPage = 0; + + private int perPage = 6; + + public PageInfo(int perPage, int totalEntries, int currentPage) { + this.perPage = perPage; + this.totalEntries = totalEntries; + this.currentPage = currentPage; + calculate(); + } + + private void calculate() { + this.start = (this.currentPage - 1) * this.perPage; + this.end = this.start + this.perPage; + this.totalPages = (int) Math.ceil((double) this.totalEntries / (double) this.perPage); + } + + public boolean isPageOk() { + return isPageOk(this.currentPage); + } + + public boolean isPageOk(int page) { + if (this.totalPages < page) + return false; + if (page < 1) + return false; + return true; + } + + public int getStart() { + return start; + } + + public int getEnd() { + return end; + } + + public int getTotalPages() { + return totalPages; + } + + public int getCurrentPage() { + return currentPage; + } + + public int getTotalEntries() { + return totalEntries; + } +} From 962b9a58f919ec8790810ef96eb59c171047c43b Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 6 Feb 2017 14:08:50 +0200 Subject: [PATCH 0330/1142] Visualizer fix select contract --- .../bukkit/residence/commands/select.java | 11 ++++++++ .../residence/containers/Visualizer.java | 26 ++++++++++++++++++- .../residence/selection/SelectionManager.java | 19 ++++++++------ .../selection/WorldEditSelectionManager.java | 5 ---- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 4aa0e0f34..9fa46f12b 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -109,6 +109,17 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } plugin.getSelectionManager().modify(player, false, amount); return true; + } + if (args[1].equals("contract")) { + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Amount); + return true; + } + plugin.getSelectionManager().modify(player, false, -amount); + return true; } else if (args[1].equals("shift")) { int amount; try { diff --git a/src/com/bekvon/bukkit/residence/containers/Visualizer.java b/src/com/bekvon/bukkit/residence/containers/Visualizer.java index 149e38f42..6830849d1 100644 --- a/src/com/bekvon/bukkit/residence/containers/Visualizer.java +++ b/src/com/bekvon/bukkit/residence/containers/Visualizer.java @@ -4,11 +4,13 @@ import java.util.Arrays; import java.util.List; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; public class Visualizer { private Player player; @@ -18,6 +20,7 @@ public class Visualizer { private int id = -1; private int errorId = -1; private boolean once = false; + private int starting = 0; private List locations = new ArrayList(); private List errorLocations = new ArrayList(); @@ -30,6 +33,17 @@ public Visualizer(Player player) { this.start = System.currentTimeMillis(); } + public void cancelAll() { + if (id != -1) { + Debug.D("canceling id " + id); + Bukkit.getScheduler().cancelTask(id); + } + if (errorId != -1) { + Debug.D("canceling errorId"); + Bukkit.getScheduler().cancelTask(errorId); + } + } + public boolean isSameLoc() { if (loc == null) return false; @@ -37,7 +51,7 @@ public boolean isSameLoc() { return false; if (!errorAreas.isEmpty() && errorLocations.isEmpty()) return false; - if (loc.distance(player.getLocation()) > 5) + if (loc.distance(player.getLocation()) > 1) return false; return true; @@ -77,6 +91,7 @@ public void setAreas(ArrayList areas) { } public void setAreas(CuboidArea area) { + areas.clear(); this.areas.add(area); } @@ -106,6 +121,7 @@ public int getId() { } public void setId(int id) { + Debug.D("set id " + id); this.id = id; } @@ -164,4 +180,12 @@ public Location getLoc() { public void setLoc(Location loc) { this.loc = loc; } + + public int getStarting() { + return starting; + } + + public void setStarting(int starting) { + this.starting = starting; + } } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 923a676e7..63bd7c042 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -7,7 +7,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; - import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -62,8 +61,9 @@ public void placeLoc1(Player player, Location loc, boolean show) { if (loc != null) { playerLoc1.put(player.getName(), loc); updateForY(player); - if (show) + if (show) { this.afterSelectionUpdate(player); + } } } @@ -75,8 +75,9 @@ public void placeLoc2(Player player, Location loc, boolean show) { if (loc != null) { playerLoc2.put(player.getName(), loc); updateForY(player); - if (show) + if (show) { this.afterSelectionUpdate(player); + } } } @@ -89,7 +90,12 @@ private void updateForY(Player player) { public void afterSelectionUpdate(Player player) { if (hasPlacedBoth(player.getName())) { - Visualizer v = new Visualizer(player); + Visualizer v = vMap.get(player.getName()); + if (v == null) { + v = new Visualizer(player); + } + v.setStart(System.currentTimeMillis()); + v.cancelAll(); v.setAreas(this.getSelectionCuboid(player)); this.showBounds(player, v); } @@ -174,10 +180,7 @@ public void showBounds(final Player player, final Visualizer v) { return; Visualizer tv = vMap.get(player.getName()); if (tv != null) { - if (tv.getId() != -1) - Bukkit.getScheduler().cancelTask(tv.getId()); - if (tv.getErrorId() != -1) - Bukkit.getScheduler().cancelTask(tv.getErrorId()); + tv.cancelAll(); } vMap.put(player.getName(), v); Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 6ce68fcce..607471716 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -32,7 +32,6 @@ public boolean worldEdit(Player player) { } this.playerLoc1.put(player.getName(), pos1); this.playerLoc2.put(player.getName(), pos2); - afterSelectionUpdate(player); return true; } return false; @@ -63,28 +62,24 @@ public void placeLoc2(Player player, Location loc, boolean show) { public void sky(Player player, boolean resadmin) { super.sky(player, resadmin); this.worldEditUpdate(player); - afterSelectionUpdate(player); } @Override public void bedrock(Player player, boolean resadmin) { super.bedrock(player, resadmin); this.worldEditUpdate(player); - afterSelectionUpdate(player); } @Override public void modify(Player player, boolean shift, double amount) { super.modify(player, shift, amount); this.worldEditUpdate(player); - afterSelectionUpdate(player); } @Override public void selectChunk(Player player) { super.selectChunk(player); this.worldEditUpdate(player); - afterSelectionUpdate(player); } @Override From 33418ede9c64d10f972dedf3e5ec8a5412574fde Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 6 Feb 2017 14:50:37 +0200 Subject: [PATCH 0331/1142] Update visualizer in real time when changing res size --- .../bukkit/residence/commands/contract.java | 5 ++-- .../bukkit/residence/commands/select.java | 2 +- .../residence/containers/Visualizer.java | 2 +- .../protection/ClaimedResidence.java | 10 +++++-- .../residence/selection/SelectionManager.java | 28 +++++++++++++------ 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index da38acf95..6920ea451 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -37,10 +37,9 @@ else if (args.length == 3) if (res.isSubzone() && !resadmin && !plugin.hasPermission(player, "residence.contract.subzone", lm.Subzone_CantContract)) return true; - - if (!res.isSubzone() && !resadmin && !plugin.hasPermission(player, "residence.contract", lm.Residence_CantContractResidence)) - return true; + if (!res.isSubzone() && !resadmin && !plugin.hasPermission(player, "residence.contract", lm.Residence_CantContractResidence)) + return true; String resName = res.getName(); CuboidArea area = null; diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 9fa46f12b..b7634af58 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -118,7 +118,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Invalid_Amount); return true; } - plugin.getSelectionManager().modify(player, false, -amount); + plugin.getSelectionManager().contract(player, amount); return true; } else if (args[1].equals("shift")) { int amount; diff --git a/src/com/bekvon/bukkit/residence/containers/Visualizer.java b/src/com/bekvon/bukkit/residence/containers/Visualizer.java index 6830849d1..d0a101e87 100644 --- a/src/com/bekvon/bukkit/residence/containers/Visualizer.java +++ b/src/com/bekvon/bukkit/residence/containers/Visualizer.java @@ -91,7 +91,7 @@ public void setAreas(ArrayList areas) { } public void setAreas(CuboidArea area) { - areas.clear(); + areas = new ArrayList(); this.areas.add(area); } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 47a05c753..1189fb05a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -500,15 +500,21 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } } if (!good) { - res.removeArea(area); + plugin.msg(player, lm.Area_Collision, res.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(this.getAreaArray()); + v.setErrorAreas(res.getAreaArray()); + plugin.getSelectionManager().showBounds(player, v); + return false; +// res.removeArea(area); } } if (res.getAreaArray().length == 0) { removeSubzone(sz); } - } + if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { plugin.msg(player, lm.General_NoPermission); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 63bd7c042..afb271ad1 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -45,11 +45,15 @@ public SelectionManager(Server server, Residence plugin) { } public void updateLocations(Player player, Location loc1, Location loc2) { + updateLocations(player, loc1, loc2, false); + } + + public void updateLocations(Player player, Location loc1, Location loc2, boolean force) { if (loc1 != null && loc2 != null) { playerLoc1.put(player.getName(), loc1); playerLoc2.put(player.getName(), loc2); updateForY(player); - this.afterSelectionUpdate(player); + this.afterSelectionUpdate(player, force); } } @@ -89,6 +93,10 @@ private void updateForY(Player player) { } public void afterSelectionUpdate(Player player) { + afterSelectionUpdate(player, false); + } + + public void afterSelectionUpdate(Player player, boolean force) { if (hasPlacedBoth(player.getName())) { Visualizer v = vMap.get(player.getName()); if (v == null) { @@ -96,6 +104,8 @@ public void afterSelectionUpdate(Player player) { } v.setStart(System.currentTimeMillis()); v.cancelAll(); + if (force) + v.setLoc(null); v.setAreas(this.getSelectionCuboid(player)); this.showBounds(player, v); } @@ -769,7 +779,7 @@ public void modify(Player player, boolean shift, double amount) { default: break; } - updateLocations(player, area.getHighLoc(), area.getLowLoc()); + updateLocations(player, area.getHighLoc(), area.getLowLoc(), true); } public boolean contract(Player player, double amount) { @@ -788,7 +798,7 @@ public boolean contract(Player player, double amount, @SuppressWarnings("unused" } CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); switch (d) { - case DOWN: + case UP: double oldy = area.getHighLoc().getBlockY(); oldy = oldy - amount; if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { @@ -798,31 +808,31 @@ public boolean contract(Player player, double amount, @SuppressWarnings("unused" area.getHighLoc().setY(oldy); plugin.msg(player, lm.Contracting_Down, amount); break; - case MINUSX: + case PLUSX: double oldx = area.getHighLoc().getBlockX(); oldx = oldx - amount; area.getHighLoc().setX(oldx); plugin.msg(player, lm.Contracting_West, amount); break; - case MINUSZ: + case PLUSZ: double oldz = area.getHighLoc().getBlockZ(); oldz = oldz - amount; area.getHighLoc().setZ(oldz); plugin.msg(player, lm.Contracting_North, amount); break; - case PLUSX: + case MINUSX: oldx = area.getLowLoc().getBlockX(); oldx = oldx + amount; area.getLowLoc().setX(oldx); plugin.msg(player, lm.Contracting_East, amount); break; - case PLUSZ: + case MINUSZ: oldz = area.getLowLoc().getBlockZ(); oldz = oldz + amount; area.getLowLoc().setZ(oldz); plugin.msg(player, lm.Contracting_South, amount); break; - case UP: + case DOWN: oldy = area.getLowLoc().getBlockY(); oldy = oldy + amount; if (oldy < MIN_HEIGHT) { @@ -839,7 +849,7 @@ public boolean contract(Player player, double amount, @SuppressWarnings("unused" // if (!ClaimedResidence.isBiggerThanMinSubzone(player, area, resadmin)) // return false; - updateLocations(player, area.getHighLoc(), area.getLowLoc()); + updateLocations(player, area.getHighLoc(), area.getLowLoc(), true); return true; } From 7657d6d9b15c35e7a7fb4da036804754a22c4dc7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 6 Feb 2017 14:53:47 +0200 Subject: [PATCH 0332/1142] Prevent subzone removal when contracting its size --- src/com/bekvon/bukkit/residence/containers/Visualizer.java | 3 --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 3 +-- src/com/residence/zip/ZipLibrary.java | 1 - 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Visualizer.java b/src/com/bekvon/bukkit/residence/containers/Visualizer.java index d0a101e87..ba55b9753 100644 --- a/src/com/bekvon/bukkit/residence/containers/Visualizer.java +++ b/src/com/bekvon/bukkit/residence/containers/Visualizer.java @@ -35,11 +35,9 @@ public Visualizer(Player player) { public void cancelAll() { if (id != -1) { - Debug.D("canceling id " + id); Bukkit.getScheduler().cancelTask(id); } if (errorId != -1) { - Debug.D("canceling errorId"); Bukkit.getScheduler().cancelTask(errorId); } } @@ -121,7 +119,6 @@ public int getId() { } public void setId(int id) { - Debug.D("set id " + id); this.id = id; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 1189fb05a..b7ede83e7 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -482,7 +482,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } } } - // Remove subzones that are not in the area anymore + // Don't remove subzones that are not in the area anymore, show colliding areas String[] szs = listSubzones(); for (String sz : szs) { ClaimedResidence res = getSubzone(sz); @@ -506,7 +506,6 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole v.setErrorAreas(res.getAreaArray()); plugin.getSelectionManager().showBounds(player, v); return false; -// res.removeArea(area); } } diff --git a/src/com/residence/zip/ZipLibrary.java b/src/com/residence/zip/ZipLibrary.java index 281defef7..8e05d7b5e 100644 --- a/src/com/residence/zip/ZipLibrary.java +++ b/src/com/residence/zip/ZipLibrary.java @@ -91,7 +91,6 @@ public void backup() throws IOException { } private static void packZip(File output, List sources) throws IOException { - Debug.D("zipping"); ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(output)); zipOut.setLevel(Deflater.DEFAULT_COMPRESSION); From 03c60719c7cfc67d590dc50508510ca3f3f824a5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 6 Feb 2017 16:27:49 +0200 Subject: [PATCH 0333/1142] Dont recalculate permissions if we don't need that --- .../bekvon/bukkit/residence/commands/limits.java | 2 +- .../residence/containers/ResidencePlayer.java | 13 +++++++++---- .../bukkit/residence/protection/PlayerManager.java | 14 +++++++++----- .../residence/protection/ResidenceManager.java | 2 ++ 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 4cd859ffb..08d928d7d 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -36,7 +36,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getPermissionManager().updateGroupNameForPlayer(target.getName(), target.isOnline() ? target.getPlayer().getLocation().getWorld().getName() : plugin .getConfigManager().getDefaultWorld(), true); - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(target.getName()); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(target.getName(), true); rPlayer.getGroup().printLimits(sender, target, rsadm); return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index f3f7ced0f..b101c8fb6 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -14,8 +14,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.ResidenceManager; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { @@ -44,10 +42,17 @@ public ResidencePlayer(Player player) { this.RecalculatePermissions(); } + public boolean isOnline() { + this.updatePlayer(); + if (this.player != null && this.player.isOnline()) + return true; + return false; + } + public ResidencePlayer(String userName) { this.userName = userName; - updatePlayer(); - RecalculatePermissions(); + if (this.isOnline()) + RecalculatePermissions(); } public void setMainResidence(ClaimedResidence res) { diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index a7f26ed6f..4daaea938 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -17,7 +17,6 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.utils.Debug; public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); @@ -51,7 +50,7 @@ public ResidencePlayer playerJoin(String player) { @Override public ArrayList getResidenceList(String player) { ArrayList temp = new ArrayList(); - playerJoin(player); +// playerJoin(player, false); ResidencePlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer != null) { for (ClaimedResidence one : resPlayer.getResList()) { @@ -69,7 +68,7 @@ public ArrayList getResidenceList(String player, boolean showhidden) { public ArrayList getResidenceList(String player, boolean showhidden, boolean onlyHidden) { ArrayList temp = new ArrayList(); - playerJoin(player); +// playerJoin(player, false); ResidencePlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer == null) return temp; @@ -98,7 +97,6 @@ public ArrayList getResidences(String player, boolean showhidd public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden, World world) { ArrayList temp = new ArrayList(); - playerJoin(player); ResidencePlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer == null) return temp; @@ -117,7 +115,6 @@ public ArrayList getResidences(String player, boolean showhidd public TreeMap getResidencesMap(String player, boolean showhidden, boolean onlyHidden, World world) { TreeMap temp = new TreeMap(); - playerJoin(player); ResidencePlayer resPlayer = players.get(player.toLowerCase()); if (resPlayer == null) @@ -188,6 +185,7 @@ public ResidencePlayer getResidencePlayer(Player player) { if (players.containsKey(player.getName().toLowerCase())) { resPlayer = players.get(player.getName().toLowerCase()); resPlayer.updatePlayer(player); + resPlayer.RecalculatePermissions(); } else { resPlayer = playerJoin(player); } @@ -197,12 +195,18 @@ public ResidencePlayer getResidencePlayer(Player player) { @Override public ResidencePlayer getResidencePlayer(String player) { + return getResidencePlayer(player, false); + } + + public ResidencePlayer getResidencePlayer(String player, boolean recalculate) { Player p = Bukkit.getPlayer(player); if (p != null) return getResidencePlayer(p); ResidencePlayer resPlayer = null; if (players.containsKey(player.toLowerCase())) { resPlayer = players.get(player.toLowerCase()); + if (recalculate || resPlayer.isOnline()) + resPlayer.RecalculatePermissions(); } else { resPlayer = playerJoin(player); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index bc45c4a52..0bc34cbaa 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -302,9 +302,11 @@ public void listResidences(CommandSender sender, String targetplayer, int page, } else if (sender.getName().equalsIgnoreCase(targetplayer)) showhidden = true; boolean hidden = showhidden; + long time = System.currentTimeMillis(); TreeMap ownedResidences = plugin.getPlayerManager().getResidencesMap(targetplayer, hidden, onlyHidden, world); ownedResidences.putAll(plugin.getRentManager().getRentsMap(targetplayer, onlyHidden, world)); plugin.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin); + Debug.D("List printed in: " + (System.currentTimeMillis() - time)); } public void listAllResidences(CommandSender sender, int page) { From 4f4f0851450ba6c60c73eff708396d8fdb188ec2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 6 Feb 2017 17:28:22 +0200 Subject: [PATCH 0334/1142] One more optimization for listing entries and pagination --- .../bukkit/residence/commands/shop.java | 79 ++++++------------- .../bukkit/residence/containers/lm.java | 1 - .../residence/economy/TransactionManager.java | 42 +++------- .../residence/economy/rent/RentManager.java | 42 +++------- .../protection/ClaimedResidence.java | 4 +- .../bukkit/residence/text/help/HelpEntry.java | 58 +++++++------- .../residence/text/help/InformationPager.java | 55 +++++-------- .../bukkit/residence/text/help/PageInfo.java | 14 +++- 8 files changed, 103 insertions(+), 192 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 1f728be51..75fa833f0 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -24,6 +24,7 @@ import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.shopStuff.Vote; +import com.bekvon.bukkit.residence.text.help.PageInfo; import com.bekvon.bukkit.residence.utils.RawMessage; public class shop implements cmd { @@ -96,52 +97,35 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman for (int i = 0; i < 5; i++) { separator += simbol; } - int pagecount = (int) Math.ceil((double) VoteList.size() / (double) 10); - if (page > pagecount || page < 1) { + + PageInfo pi = new PageInfo(10, VoteList.size(), page); + + if (!pi.isPageOk()) { plugin.msg(sender, lm.Shop_NoVotes); return true; } - plugin.msg(player, lm.Shop_VotesTopLine, separator, res.getName(), VotePage, pagecount, separator); + plugin.msg(player, lm.Shop_VotesTopLine, separator, res.getName(), VotePage, pi.getTotalPages(), separator); - int start = VotePage * 10 - 9; - int end = VotePage * 10 + 1; - int position = 0; - int i = start; + int position = -1; for (ShopVote one : VoteList) { position++; - - if (position < start) - continue; - - if (position >= end) + if (position > pi.getEnd()) break; + if (!pi.isInRange(position)) + continue; Date dNow = new Date(one.getTime()); SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss"); ft.setTimeZone(TimeZone.getTimeZone(plugin.getConfigManager().getTimeZone())); String timeString = ft.format(dNow); - String message = plugin.msg(lm.Shop_VotesList, i, one.getName(), (plugin.getConfigManager().isOnlyLike() + String message = plugin.msg(lm.Shop_VotesList, pi.getStart() + position + 1, one.getName(), (plugin.getConfigManager().isOnlyLike() ? "" : one.getVote()), timeString); player.sendMessage(message); - i++; } - if (pagecount == 1) - return true; - - int NextPage = page + 1; - NextPage = page < pagecount ? NextPage : page; - int Prevpage = page - 1; - Prevpage = page > 1 ? Prevpage : page; - - RawMessage rm = new RawMessage(); - - rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), page > 1 ? "<<<" : null, page > 1 ? "/res shop votes " + res.getName() + " " + Prevpage : null); - rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, page > 1 ? ">>>" : null, pagecount > page ? "/res shop votes " + res.getName() + " " + NextPage : null); - if (pagecount != 0) - rm.show(sender); + plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, "/res shop votes " + res.getName()); return true; } @@ -165,26 +149,23 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman for (int i = 0; i < 5; i++) { separator += simbol; } - int pagecount = (int) Math.ceil((double) ShopList.size() / (double) 10); - if (page > pagecount || page < 1) { + + PageInfo pi = new PageInfo(10, ShopList.size(), page); + + if (!pi.isPageOk()) { plugin.msg(sender, lm.Shop_NoVotes); return true; } - plugin.msg(player, lm.Shop_ListTopLine, separator, Shoppage, pagecount, separator); + plugin.msg(player, lm.Shop_ListTopLine, separator, Shoppage, pi.getTotalPages(), separator); - int start = Shoppage * 10 - 9; - int end = Shoppage * 10 + 1; - int position = 0; - int i = start; + int position = -1; for (Entry one : ShopList.entrySet()) { position++; - - if (position < start) - continue; - - if (position >= end) + if (position > pi.getEnd()) break; + if (!pi.isInRange(position)) + continue; Vote vote = plugin.getShopSignUtilManager().getAverageVote(one.getKey()); String votestat = ""; @@ -195,7 +176,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListVoted, vote.getVote(), vote.getAmount()); ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); String owner = plugin.getResidenceManager().getByName(one.getKey()).getOwner(); - String message = plugin.msg(lm.Shop_List, i, one.getKey(), owner, votestat); + String message = plugin.msg(lm.Shop_List, pi.getStart() + position + 1, one.getKey(), owner, votestat); String desc = res.getShopDesc() == null ? plugin.msg(lm.Shop_NoDesc) : plugin.msg( lm.Shop_Desc, ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); @@ -203,23 +184,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman RawMessage rm = new RawMessage(); rm.add(" " + message, desc, "/res tp " + one.getKey()); rm.show(sender); - - i++; } - if (pagecount == 1) - return true; - - int NextPage = page + 1; - NextPage = page < pagecount ? NextPage : page; - int Prevpage = page - 1; - Prevpage = page > 1 ? Prevpage : page; - - RawMessage rm = new RawMessage(); - rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), page > 1 ? "<<<" : null, page > 1 ? "/res shop list " + Prevpage : null); - rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, page > 1 ? ">>>" : null, pagecount > page ? "/res shop list " + NextPage : null); - if (pagecount != 0) - rm.show(sender); + plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, "/res shop list"); return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 3b1fbf62f..81a8e4dc5 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -389,7 +389,6 @@ public enum lm { General_TotalWorth("&eTotal worth of residence: &6%1 &e(&6%2&e)"), General_TotalSubzones("&eSubzones in residence: &6%1 &e(&6%2&e)"), General_NotOnline("&eTarget player must be online."), - General_NextPage("&eNext Page"), General_NextInfoPage("&2| &eNext Page &2>>>"), General_PrevInfoPage("&2<<< &ePrev Page &2|"), General_GenericPages("&ePage &6%1 &eof &6%2 &e(&6%3&e)"), diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 69831050b..05694fa33 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -3,6 +3,7 @@ import org.bukkit.ChatColor; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.text.help.PageInfo; import com.bekvon.bukkit.residence.utils.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketBuyInterface; @@ -328,52 +329,27 @@ public void printForSaleResidences(Player player, int page) { StringBuilder sbuild = new StringBuilder(); sbuild.append(ChatColor.GREEN); - int perpage = 10; + PageInfo pi = new PageInfo(10, sellAmount.size(), page); - int pagecount = (int) Math.ceil((double) sellAmount.size() / (double) perpage); - - if (page < 1) - page = 1; - - int z = 0; + int position = -1; for (ClaimedResidence res : sellAmount) { - z++; - if (z <= (page - 1) * perpage) - continue; - if (z > (page - 1) * perpage + perpage) + position++; + if (position > pi.getEnd()) break; + if (!pi.isInRange(position)) + continue; if (res == null) { - z--; toRemove.add(res); continue; } - plugin.msg(player, lm.Economy_SellList, z, res.getName(), res.getSellPrice(), res.getOwner()); + plugin.msg(player, lm.Economy_SellList, pi.getPositionForOutput(position), res.getName(), res.getSellPrice(), res.getOwner()); } for (ClaimedResidence one : toRemove) { sellAmount.remove(one); } - - String separator = ChatColor.GOLD + ""; - String simbol = "\u25AC"; - for (int i = 0; i < 10; i++) { - separator += simbol; - } - - if (pagecount == 1) - return; - - int NextPage = page + 1; - NextPage = page < pagecount ? NextPage : page; - int Prevpage = page - 1; - Prevpage = page > 1 ? Prevpage : page; - - RawMessage rm = new RawMessage(); - rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), page > 1 ? "<<<" : null, page > 1 ? "/res market list sell " + Prevpage : null); - rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, pagecount > page ? ">>>" : null, pagecount > page ? "/res market list sell " + NextPage : null); - if (pagecount != 0) - rm.show(player); + plugin.getInfoPageManager().ShowPagination(player, pi.getTotalPages(), page, "/res market list sell"); } public void clearSales() { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 4312147ce..c3172ec06 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -13,6 +13,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import com.bekvon.bukkit.residence.text.help.PageInfo; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.RawMessage; @@ -808,24 +809,19 @@ public void printRentableResidences(Player player, int page) { StringBuilder sbuild = new StringBuilder(); sbuild.append(ChatColor.GREEN); - int perpage = 10; - - int pagecount = (int) Math.ceil((double) rentableLand.size() / (double) perpage); - - if (page < 1) - page = 1; - - int z = 0; + PageInfo pi = new PageInfo(10, rentableLand.size(), page); + int position = -1; for (ClaimedResidence res : rentableLand) { if (res == null) continue; - z++; - if (z <= (page - 1) * perpage) - continue; - if (z > (page - 1) * perpage + perpage) + position++; + + if (position > pi.getEnd()) break; + if (!pi.isInRange(position)) + continue; boolean rented = res.isRented(); @@ -840,7 +836,7 @@ public void printRentableResidences(Player player, int page) { hover = GetTime.getTime(rent.endTime); } - String msg = plugin.msg(lm.Rent_RentList, z, res.getName(), res.getRentable().cost, res.getRentable().days, res.getRentable().AllowRenewing, + String msg = plugin.msg(lm.Rent_RentList, pi.getPositionForOutput(position), res.getName(), res.getRentable().cost, res.getRentable().days, res.getRentable().AllowRenewing, res.getOwner(), rentedBy); RawMessage rm = new RawMessage(); @@ -853,25 +849,7 @@ public void printRentableResidences(Player player, int page) { } - String separator = ChatColor.GOLD + ""; - String simbol = "\u25AC"; - for (int i = 0; i < 10; i++) { - separator += simbol; - } - - if (pagecount == 1) - return; - - int NextPage = page + 1; - NextPage = page < pagecount ? NextPage : page; - int Prevpage = page - 1; - Prevpage = page > 1 ? Prevpage : page; - - RawMessage rm = new RawMessage(); - rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), page > 1 ? "<<<" : null, page > 1 ? "/res market list rent " + Prevpage : null); - rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, pagecount > page ? ">>>" : null, pagecount > page ? "/res market list rent " + NextPage : null); - if (pagecount != 0) - rm.show(player); + plugin.getInfoPageManager().ShowPagination(player, pi.getTotalPages(), page, "/res market list rent"); } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index b7ede83e7..c5fd6fefc 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1071,9 +1071,7 @@ public void printSubzoneList(CommandSender sender, int page) { plugin.msg(sender, lm.InformationPage_TopLine, plugin.msg(lm.General_Subzones)); plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), pi.getTotalPages(), pi.getTotalEntries())); RawMessage rm = new RawMessage(); - for (int i = pi.getStart(); i < pi.getEnd(); i++) { - if (subzones.size() <= i) - break; + for (int i = pi.getStart(); i <= pi.getEnd(); i++) { ClaimedResidence res = getSubzones().get(i); if (res == null) continue; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 0e46b3b73..4211b00ca 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -68,8 +68,10 @@ public String getDescription() { public void printHelp(CommandSender sender, int page, boolean resadmin, String path) { List helplines = this.getHelpData(sender, resadmin); path = "/" + path.replace(".", " ") + " "; - int pagecount = (int) Math.ceil((double) helplines.size() / (double) linesPerPage); - if (page > pagecount || page < 1) { + + PageInfo pi = new PageInfo(linesPerPage, helplines.size(), page); + + if (!pi.isPageOk()) { Residence.getInstance().msg(sender, lm.Invalid_Help); return; } @@ -78,43 +80,37 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p if (!(sender instanceof Player)) separator = "----------"; - sender.sendMessage(separator + " " + Residence.getInstance().msg(lm.General_HelpPageHeader, path, page, pagecount) + " " + separator); - int start = linesPerPage * (page - 1); - int end = start + linesPerPage; - for (int i = start; i < end; i++) { - if (helplines.size() > i) { - - if (helplines.get(i).getCommand() != null) { - HelpEntry sub = this.getSubEntry(helplines.get(i).getCommand()); - - String desc = ""; - int y = 0; - for (String one : sub.lines) { - desc += one; - y++; - if (y < sub.lines.length) { - desc += "\n"; - } + sender.sendMessage(separator + " " + Residence.getInstance().msg(lm.General_HelpPageHeader, path, page, pi.getTotalPages()) + " " + separator); + + for (int i = pi.getStart(); i <= pi.getEnd(); i++) { + if (helplines.get(i).getCommand() != null) { + HelpEntry sub = this.getSubEntry(helplines.get(i).getCommand()); + + String desc = ""; + int y = 0; + for (String one : sub.lines) { + desc += one; + y++; + if (y < sub.lines.length) { + desc += "\n"; } + } - if (resadmin) - path = path.replace("/res ", "/resadmin "); + if (resadmin) + path = path.replace("/res ", "/resadmin "); - RawMessage rm = new RawMessage(); - rm.add(helplines.get(i).getDesc(), desc, null, path + helplines.get(i).getCommand()); - rm.show(sender); + RawMessage rm = new RawMessage(); + rm.add(helplines.get(i).getDesc(), desc, null, path + helplines.get(i).getCommand()); + rm.show(sender); - } else - sender.sendMessage(helplines.get(i).getDesc()); - } - } + } else + sender.sendMessage(helplines.get(i).getDesc()); - if (pagecount == 1) - return; + } String baseCmd = resadmin ? "resadmin" : "res"; String cmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " : "/" + baseCmd + " ? "; - Residence.getInstance().getInfoPageManager().ShowPagination(sender, pagecount, page, cmd); + Residence.getInstance().getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, cmd); } public void printHelp(CommandSender sender, int page, String path, boolean resadmin) { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 84337b757..a03fd498c 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -34,25 +34,23 @@ public void printInfo(CommandSender sender, String command, String title, String } public void printInfo(CommandSender sender, String command, String title, List lines, int page) { - int perPage = 6; - int start = (page - 1) * perPage; - int end = start + perPage; - int pagecount = (int) Math.ceil((double) lines.size() / (double) perPage); - if (pagecount == 0) - pagecount = 1; - if (page > pagecount) { + + + PageInfo pi = new PageInfo(6, lines.size(), page); + + if (!pi.isPageOk()) { sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); return; } plugin.msg(sender, lm.InformationPage_TopLine, title); plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), - pagecount, lines.size())); - for (int i = start; i < end; i++) { + pi.getTotalPages(), lines.size())); + for (int i = pi.getStart(); i <= pi.getEnd(); i++) { if (lines.size() > i) sender.sendMessage(ChatColor.GREEN + lines.get(i)); } - - plugin.getInfoPageManager().ShowPagination(sender, pagecount, page, command); + + plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, command); } public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, int page, boolean resadmin) { @@ -60,20 +58,13 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap pagecount) { + PageInfo pi = new PageInfo(perPage, ownedResidences.size(), page); + + int start = pi.getStart(); + int pagecount = pi.getTotalPages(); + + if (!pi.isPageOk()) { sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); return; } @@ -86,26 +77,20 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap linesForConsole = new ArrayList(); - int y = 0; - + int y = -1; + for (Entry resT : ownedResidences.entrySet()) { y++; - if (ownedResidences.size() < y) + if (y > pi.getEnd()) break; - - if (y <= start) + if (!pi.isInRange(y)) continue; - if (y > end) - break; ClaimedResidence res = resT.getValue(); StringBuilder StringB = new StringBuilder(); @@ -154,7 +139,7 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap this.totalEntries) + this.end = this.totalEntries - 1; this.totalPages = (int) Math.ceil((double) this.totalEntries / (double) this.perPage); } + public boolean isInRange(int place) { + if (place >= start && place <= end) + return true; + return false; + } + public boolean isPageOk() { return isPageOk(this.currentPage); } From 2cf6b4ea710b504ce67c549dc76dea084e1cd5c8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 6 Feb 2017 18:07:04 +0200 Subject: [PATCH 0335/1142] Version update --- .../bukkit/residence/protection/ResidenceManager.java | 2 -- .../bukkit/residence/text/help/InformationPager.java | 7 +++---- src/plugin.yml | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 0bc34cbaa..bc45c4a52 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -302,11 +302,9 @@ public void listResidences(CommandSender sender, String targetplayer, int page, } else if (sender.getName().equalsIgnoreCase(targetplayer)) showhidden = true; boolean hidden = showhidden; - long time = System.currentTimeMillis(); TreeMap ownedResidences = plugin.getPlayerManager().getResidencesMap(targetplayer, hidden, onlyHidden, world); ownedResidences.putAll(plugin.getRentManager().getRentsMap(targetplayer, onlyHidden, world)); plugin.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin); - Debug.D("List printed in: " + (System.currentTimeMillis() - time)); } public void listAllResidences(CommandSender sender, int page) { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index a03fd498c..5a568a6b6 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -34,10 +34,9 @@ public void printInfo(CommandSender sender, String command, String title, String } public void printInfo(CommandSender sender, String command, String title, List lines, int page) { - PageInfo pi = new PageInfo(6, lines.size(), page); - + if (!pi.isPageOk()) { sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); return; @@ -78,13 +77,13 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap linesForConsole = new ArrayList(); int y = -1; - + for (Entry resT : ownedResidences.entrySet()) { y++; if (y > pi.getEnd()) diff --git a/src/plugin.yml b/src/plugin.yml index b2c06b2c3..052002a47 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.5.13.9 +version: 4.6.0.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From b8c263cee4af3e966c37ad5ce8c830117c0bf96c Mon Sep 17 00:00:00 2001 From: Playhi <000902play@gmail.com> Date: Sun, 12 Feb 2017 16:21:12 +0800 Subject: [PATCH 0336/1142] Update Chinese.yml Update Chinese.yml --- src/Language/Chinese.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml index d4599b6df..585d43dc3 100644 --- a/src/Language/Chinese.yml +++ b/src/Language/Chinese.yml @@ -7,7 +7,7 @@ Language: Invalid: Player: '&c无效的玩家å...' - World: '&cInvalid world...' + World: '&c无效的世界...' Residence: '&c无效的领地...' Subzone: '&c无效的领地å­åŒºåŸŸ...' Direction: '&c无效的方å‘...' From b0030adc171bb1a27f70260cfee9bd4dd58241f7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 Feb 2017 10:47:13 +0200 Subject: [PATCH 0337/1142] Allow to get back money when contracting residence --- .../protection/ClaimedResidence.java | 3501 +++++++++-------- 1 file changed, 1754 insertions(+), 1747 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index c5fd6fefc..7b51960ee 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1,1747 +1,1754 @@ -package com.bekvon.bukkit.residence.protection; - -import org.bukkit.ChatColor; -import org.bukkit.GameMode; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.chat.ChatChannel; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.RandomLoc; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.Visualizer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.economy.ResidenceBank; -import com.bekvon.bukkit.residence.economy.rent.RentableLand; -import com.bekvon.bukkit.residence.economy.rent.RentedLand; -import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; -import com.bekvon.bukkit.residence.event.ResidenceAreaDeleteEvent; -import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; -import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; -import com.bekvon.bukkit.residence.event.ResidenceTPEvent; -import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; -import com.bekvon.bukkit.residence.itemlist.ItemList.ListType; -import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.shopStuff.ShopVote; -import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.Debug; -import com.bekvon.bukkit.residence.utils.RawMessage; - -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Random; -import java.util.Set; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.World.Environment; -import org.bukkit.block.Block; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ClaimedResidence { - - private String resName = null; - protected ClaimedResidence parent; - protected Map areas; - protected Map subzones; - protected ResidencePermissions perms; - protected ResidenceBank bank; - protected Double BlockSellPrice = 0.0; - protected Location tpLoc; - protected String enterMessage; - protected String leaveMessage; - protected String ShopDesc = null; - protected String ChatPrefix = ""; - protected ChatColor ChannelColor = ChatColor.WHITE; - protected ResidenceItemList ignorelist; - protected ResidenceItemList blacklist; - protected boolean mainRes = false; - protected long createTime = 0L; - - protected List cmdWhiteList = new ArrayList(); - protected List cmdBlackList = new ArrayList(); - - List ShopVoteList = new ArrayList(); - - protected RentableLand rentableland = null; - protected RentedLand rentedland = null; - - protected Integer sellPrice = -1; - - private Residence plugin; - - public String getResidenceName() { - return resName; - } - - public void setName(String name) { - if (name.contains(".")) - resName = name.split("\\.")[name.split("\\.").length - 1]; - else - resName = name; - } - - public void setCreateTime() { - createTime = System.currentTimeMillis(); - } - - public long getCreateTime() { - return createTime; - } - - public Integer getSellPrice() { - return sellPrice; - } - - public void setSellPrice(Integer amount) { - sellPrice = amount; - } - - public boolean isForSell() { - return plugin.getTransactionManager().isForSale(this.getName()); - } - - public boolean isForRent() { - return plugin.getRentManager().isForRent(this); - } - - public boolean isSubzoneForRent() { - for (Entry one : subzones.entrySet()) { - if (one.getValue().isForRent()) - return true; - if (one.getValue().isSubzoneForRent()) - return true; - } - return false; - } - - public boolean isSubzoneRented() { - for (Entry one : subzones.entrySet()) { - if (one.getValue().isRented()) - return true; - if (one.getValue().isSubzoneRented()) - return true; - } - return false; - } - - public ClaimedResidence getRentedSubzone() { - for (Entry one : subzones.entrySet()) { - if (one.getValue().isRented()) - return one.getValue(); - if (one.getValue().getRentedSubzone() != null) - return one.getValue().getRentedSubzone(); - } - return null; - } - - public boolean isParentForRent() { - if (this.getParent() != null) - return this.getParent().isForRent() ? true : this.getParent().isParentForRent(); - return false; - } - - public boolean isParentForSell() { - if (this.getParent() != null) - return this.getParent().isForSell() ? true : this.getParent().isParentForSell(); - return false; - } - - public boolean isRented() { - return plugin.getRentManager().isRented(this); - } - - public void setRentable(RentableLand rl) { - this.rentableland = rl; - } - - public RentableLand getRentable() { - return this.rentableland; - } - - public void setRented(RentedLand rl) { - this.rentedland = rl; - } - - public RentedLand getRentedLand() { - return this.rentedland; - } - - public ClaimedResidence(String creationWorld, Residence plugin) { - this(plugin.getServerLandname(), creationWorld, plugin); - } - - public ClaimedResidence(String creator, String creationWorld, Residence plugin) { - this(plugin); - perms = new ResidencePermissions(this, creator, creationWorld); - } - - public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence, Residence plugin) { - this(creator, creationWorld, plugin); - parent = parentResidence; - } - - public ClaimedResidence(Residence plugin) { - subzones = new HashMap<>(); - areas = new HashMap<>(); - bank = new ResidenceBank(this); - blacklist = new ResidenceItemList(this, ListType.BLACKLIST); - ignorelist = new ResidenceItemList(this, ListType.IGNORELIST); - this.plugin = plugin; - } - - public boolean isMainResidence() { - return mainRes; - } - - public void setMainResidence(boolean state) { - mainRes = state; - } - - public boolean isSubzone() { - return parent == null ? false : true; - } - - public int getSubzoneDeep() { - return getSubzoneDeep(0); - } - - public int getSubzoneDeep(int deep) { - deep++; - if (parent != null) { - return parent.getSubzoneDeep(deep); - } - return deep; - } - - public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() < group.getMinX()) { - plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); - return false; - } - if (area.getYSize() < group.getMinY()) { - plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); - return false; - } - if (area.getZSize() < group.getMinZ()) { - plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); - return false; - } - return true; - } - - public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() < group.getSubzoneMinX()) { - plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); - return false; - } - if (area.getYSize() < group.getSubzoneMinY()) { - plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); - return false; - } - if (area.getZSize() < group.getSubzoneMinZ()) { - plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); - return false; - } - return true; - } - - public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() > group.getMaxX()) { - plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); - return false; - } - if (area.getYSize() > group.getMaxY()) { - plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); - return false; - } - if (area.getZSize() > group.getMaxZ()) { - plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); - return false; - } - return true; - } - - public boolean isSmallerThanMaxSubzone(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() > group.getSubzoneMaxX()) { - plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); - return false; - } - if (area.getYSize() > group.getSubzoneMaxY()) { - plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); - return false; - } - if (area.getZSize() > group.getSubzoneMaxZ()) { - plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); - return false; - } - return true; - } - - public boolean addArea(CuboidArea area, String name) { - return addArea(null, area, name, true); - } - - public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin) { - return addArea(player, area, name, resadmin, true); - } - - public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin, boolean chargeMoney) { - if (!plugin.validName(name)) { - if (player != null) { - plugin.msg(player, lm.Invalid_NameCharacters); - } - return false; - } - - String NName = name; - name = name.toLowerCase(); - - if (areas.containsKey(NName)) { - if (player != null) { - plugin.msg(player, lm.Area_Exists); - } - return false; - } - - if (this.isSubzone() && !isBiggerThanMinSubzone(player, area, resadmin) || !this.isSubzone() && !isBiggerThanMin(player, area, resadmin)) - return false; - - if (!resadmin && plugin.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { - boolean inside = false; - for (CuboidArea are : areas.values()) { - if (are.isAreaWithinArea(area)) { - inside = true; - } - } - if (!inside) { - return false; - } - } - if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { - if (player != null) { - plugin.msg(player, lm.Area_DiffWorld); - } - return false; - } - if (parent == null) { - String collideResidence = plugin.getResidenceManager().checkAreaCollision(area, this); - ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); - if (cRes != null) { - if (player != null) { - plugin.msg(player, lm.Area_Collision, cRes.getName()); - Visualizer v = new Visualizer(player); - v.setAreas(area); - v.setErrorAreas(cRes); - plugin.getSelectionManager().showBounds(player, v); - } - return false; - } - } else { - String[] szs = parent.listSubzones(); - for (String sz : szs) { - ClaimedResidence res = parent.getSubzone(sz); - if (res != null && res != this) { - if (res.checkCollision(area)) { - if (player != null) { - plugin.msg(player, lm.Area_SubzoneCollision, sz); - } - return false; - } - } - } - } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - if (parent != null) { - if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { - plugin.msg(player, lm.Area_NotWithinParent); - return false; - } - if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { - plugin.msg(player, lm.Residence_ParentNoPermission); - return false; - } - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - - PermissionGroup group = rPlayer.getGroup(); - if (!this.isSubzone() && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create") || - this.isSubzone() && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create.subzone")) { - return false; - } - - if (areas.size() >= group.getMaxPhysicalPerResidence()) { - plugin.msg(player, lm.Area_MaxPhysical); - return false; - } - if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { - plugin.msg(player, lm.Area_SizeLimit); - return false; - } - if (group.getMinHeight() > area.getLowLoc().getBlockY()) { - plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); - return false; - } - if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { - plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); - return false; - } - if (chargeMoney && parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { - int chargeamount = (int) Math.ceil(area.getSize() * group.getCostPerBlock()); - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { - return false; - } - } - } - - ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, NName, this, area); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - plugin.getResidenceManager().removeChunkList(getName()); - areas.put(name, area); - plugin.getResidenceManager().calculateChunks(getName()); - return true; - } - - public boolean replaceArea(CuboidArea neware, String name) { - return this.replaceArea(null, neware, name, true); - } - - public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { - if (!areas.containsKey(name)) { - if (player != null) - plugin.msg(player, lm.Area_NonExist); - return false; - } - CuboidArea oldarea = areas.get(name); - if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { - if (player != null) - plugin.msg(player, lm.Area_DiffWorld); - return false; - } - if (parent == null) { - String collideResidence = plugin.getResidenceManager().checkAreaCollision(newarea, this); - ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); - if (cRes != null && player != null) { - plugin.msg(player, lm.Area_Collision, cRes.getName()); - Visualizer v = new Visualizer(player); - v.setAreas(this.getAreaArray()); - v.setErrorAreas(cRes.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); - return false; - } - } else { - String[] szs = parent.listSubzones(); - for (String sz : szs) { - ClaimedResidence res = parent.getSubzone(sz); - if (res != null && res != this) { - if (res.checkCollision(newarea)) { - if (player != null) { - plugin.msg(player, lm.Area_SubzoneCollision, sz); - Visualizer v = new Visualizer(player); - v.setErrorAreas(res.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); - } - return false; - } - } - } - } - // Don't remove subzones that are not in the area anymore, show colliding areas - String[] szs = listSubzones(); - for (String sz : szs) { - ClaimedResidence res = getSubzone(sz); - if (res == null || res == this) - continue; - String[] szareas = res.getAreaList(); - for (String area : szareas) { - if (newarea.isAreaWithinArea(res.getArea(area))) - continue; - - boolean good = false; - for (CuboidArea arae : getAreaArray()) { - if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { - good = true; - } - } - if (!good) { - plugin.msg(player, lm.Area_Collision, res.getName()); - Visualizer v = new Visualizer(player); - v.setAreas(this.getAreaArray()); - v.setErrorAreas(res.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); - return false; - } - - } - if (res.getAreaArray().length == 0) { - removeSubzone(sz); - } - } - - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - if (parent != null) { - if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { - plugin.msg(player, lm.Area_NotWithinParent); - return false; - } - if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { - plugin.msg(player, lm.Residence_ParentNoPermission); - return false; - } - } - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (!group.canCreateResidences() && !plugin.hasPermission(player, "residence.resize")) { - return false; - } - - if (oldarea.getSize() < newarea.getSize() && (!this.isSubzone() && !isSmallerThanMax(player, newarea, resadmin) || this.isSubzone() - && !isSmallerThanMaxSubzone(player, newarea, resadmin))) { - plugin.msg(player, lm.Area_SizeLimit); - return false; - } - if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { - plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); - return false; - } - if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { - plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); - return false; - } - if (parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { - int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); - if (chargeamount > 0) { - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { - return false; - } - } - } - } - - ResidenceSizeChangeEvent resevent = new ResidenceSizeChangeEvent(player, this, oldarea, newarea); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - plugin.getResidenceManager().removeChunkList(getName()); - areas.remove(name); - areas.put(name, newarea); - plugin.getResidenceManager().calculateChunks(getName()); - if (player != null) - plugin.msg(player, lm.Area_Update); - return true; - } - - public boolean addSubzone(String name, Location loc1, Location loc2) { - return this.addSubzone(null, loc1, loc2, name, true); - } - - public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { - if (player == null) { - return this.addSubzone(null, plugin.getServerLandname(), loc1, loc2, name, resadmin); - } - return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); - } - - public boolean addSubzone(Player player, String name, boolean resadmin) { - if (Residence.getInstance().getSelectionManager().hasPlacedBoth(player)) { - Location loc1 = Residence.getInstance().getSelectionManager().getPlayerLoc1(player); - Location loc2 = Residence.getInstance().getSelectionManager().getPlayerLoc2(player); - return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); - } - return false; - } - - public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { - if (!plugin.validName(name)) { - if (player != null) { - plugin.msg(player, lm.Invalid_NameCharacters); - } - return false; - } - if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { - if (player != null) { - plugin.msg(player, lm.Subzone_SelectInside); - } - return false; - } - - String NName = name; - name = name.toLowerCase(); - - if (subzones.containsKey(name)) { - if (player != null) { - plugin.msg(player, lm.Subzone_Exists, NName); - } - return false; - } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - if (!this.perms.playerHas(player.getName(), Flags.subzone, this.perms.playerHas(player, Flags.admin, false))) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - } - - if (this.getSubzoneList().length >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { - plugin.msg(player, lm.Subzone_MaxAmount); - return false; - } - - if (this.getZoneDepth() >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { - plugin.msg(player, lm.Subzone_MaxDepth); - return false; - } - } - - CuboidArea newArea = new CuboidArea(loc1, loc2); - - Set> set = subzones.entrySet(); - for (Entry resEntry : set) { - ClaimedResidence res = resEntry.getValue(); - if (res.checkCollision(newArea)) { - if (player != null) { - plugin.msg(player, lm.Subzone_Collide, resEntry.getKey()); - Visualizer v = new Visualizer(player); - v.setAreas(newArea); - v.setErrorAreas(res); - plugin.getSelectionManager().showBounds(player, v); - } - return false; - } - } - ClaimedResidence newres; - if (player != null) { - newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); - newres.addArea(player, newArea, NName, resadmin); - } else { - newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); - newres.addArea(newArea, NName); - } - - if (newres.getAreaCount() != 0) { - newres.getPermissions().applyDefaultFlags(); - if (player != null) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - newres.setEnterMessage(group.getDefaultEnterMessage()); - newres.setLeaveMessage(group.getDefaultLeaveMessage()); - } - if (plugin.getConfigManager().flagsInherit()) { - newres.getPermissions().setParent(perms); - } - - newres.resName = name; - - newres.setCreateTime(); - - ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, name, newres, newArea); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - subzones.put(name, newres); - if (player != null) { - plugin.msg(player, lm.Area_Create, name); - plugin.msg(player, lm.Subzone_Create, name); - } - return true; - } - if (player != null) { - plugin.msg(player, lm.Subzone_CreateFail, name); - } - return false; - } - - public ClaimedResidence getSubzoneByLoc(Location loc) { - Set> set = subzones.entrySet(); - ClaimedResidence res = null; - for (Entry entry : set) { - if (entry.getValue().containsLoc(loc)) { - res = entry.getValue(); - break; - } - } - if (res == null) - return null; - ClaimedResidence subrez = res.getSubzoneByLoc(loc); - if (subrez == null) { - return res; - } - return subrez; - } - - public ClaimedResidence getSubzone(String subzonename) { - subzonename = subzonename.toLowerCase(); - - if (!subzonename.contains(".")) { - return subzones.get(subzonename); - } - String split[] = subzonename.split("\\."); - ClaimedResidence get = subzones.get(split[0]); - for (int i = 1; i < split.length; i++) { - if (get == null) { - return null; - } - get = get.getSubzone(split[i]); - } - return get; - } - - public String getSubzoneNameByRes(ClaimedResidence res) { - Set> set = subzones.entrySet(); - for (Entry entry : set) { - if (entry.getValue() == res) { - return entry.getValue().getResidenceName(); - } - String n = entry.getValue().getSubzoneNameByRes(res); - if (n != null) { - return entry.getValue().getResidenceName() + "." + n; - } - } - return null; - } - - public String[] getSubzoneList() { - ArrayList zones = new ArrayList<>(); - Set set = subzones.keySet(); - for (String key : set) { - if (key != null) { - zones.add(key); - } - } - return zones.toArray(new String[zones.size()]); - } - - public boolean checkCollision(CuboidArea area) { - Set set = areas.keySet(); - for (String key : set) { - CuboidArea checkarea = areas.get(key); - if (checkarea != null) { - if (checkarea.checkCollision(area)) { - return true; - } - } - } - return false; - } - - public boolean containsLoc(Location loc) { - Collection keys = areas.values(); - for (CuboidArea key : keys) { - if (key.containsLoc(loc)) { - if (parent != null) - return parent.containsLoc(loc); - return true; - } - } - return false; - } - - public ClaimedResidence getParent() { - return parent; - } - - public String getTopParentName() { - return this.getTopParent().getName(); - } - - public ClaimedResidence getTopParent() { - if (parent == null) - return this; - return parent.getTopParent(); - } - - public boolean removeSubzone(String name) { - return this.removeSubzone(null, name, true); - } - - public boolean removeSubzone(Player player, String name, boolean resadmin) { - if (name == null) - return false; - name = name.toLowerCase(); - ClaimedResidence res = subzones.get(name); - if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - subzones.remove(name); - if (player != null) { - plugin.msg(player, lm.Subzone_Remove, name); - } - return true; - } - - public long getTotalSize() { - Collection set = areas.values(); - long size = 0; - if (!plugin.getConfigManager().isNoCostForYBlocks()) - for (CuboidArea entry : set) { - size = size + entry.getSize(); - } - else - for (CuboidArea entry : set) { - size = size + (entry.getXSize() * entry.getZSize()); - } - return size; - } - - public long getXZSize() { - Collection set = areas.values(); - long size = 0; - for (CuboidArea entry : set) { - size = size + (entry.getXSize() * entry.getZSize()); - } - return size; - } - - public CuboidArea[] getAreaArray() { - CuboidArea[] temp = new CuboidArea[areas.size()]; - int i = 0; - for (CuboidArea area : areas.values()) { - temp[i] = area; - i++; - } - return temp; - } - - public Map getAreaMap() { - return areas; - } - - public ResidencePermissions getPermissions() { - return perms; - } - - public String getEnterMessage() { - return enterMessage; - } - - public String getLeaveMessage() { - return leaveMessage; - } - - public String getShopDesc() { - return ShopDesc; - } - - public void setEnterMessage(String message) { - enterMessage = message; - } - - public void setLeaveMessage(String message) { - leaveMessage = message; - } - - public void setShopDesc(String message) { - ShopDesc = message; - } - - public void setEnterLeaveMessage(Player player, String message, boolean enter, boolean resadmin) { - // if(message!=null && - // plugin.getConfigManager().getResidenceNameRegex() != null) { - // Removed pending further action - // player.sendMessage(ChatColor.RED+plugin.getLanguage().getPhrase("InvalidCharacters")); - // return; - // } - if (message != null) { - if (message.equals("")) { - message = null; - } - } - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (!group.canSetEnterLeaveMessages() && !resadmin) { - plugin.msg(player, lm.Residence_OwnerNoPermission); - return; - } - if (!perms.hasResidencePermission(player, false) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return; - } - if (enter) { - this.setEnterMessage(message); - } else { - this.setLeaveMessage(message); - } - plugin.msg(player, lm.Residence_MessageChange); - } - - public Location getMiddleFreeLoc(Location insideLoc, Player player) { - CuboidArea area = this.getAreaByLoc(insideLoc); - if (area == null) { - return insideLoc; - } - - int y = area.getHighLoc().getBlockY(); - - int x = area.getLowLoc().getBlockX() + area.getXSize() / 2; - int z = area.getLowLoc().getBlockZ() + area.getZSize() / 2; - - Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); - boolean found = false; - int it = 0; - int maxIt = area.getWorld().getMaxHeight() - 63; - while (it < maxIt) { - it++; - newLoc.setY(newLoc.getY() - 1); - - if (newLoc.getBlockY() < 63) - break; - - Block block = newLoc.getBlock(); - Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); - Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); - if (plugin.getNms().isEmptyBlock(block) && plugin.getNms().isEmptyBlock(block2) && !plugin.getNms().isEmptyBlock(block3)) { - found = true; - break; - } - } - if (found) { - return newLoc; - } - return getOutsideFreeLoc(insideLoc, player); - } - - public Location getOutsideFreeLoc(Location insideLoc, Player player) { - CuboidArea area = this.getAreaByLoc(insideLoc); - if (area == null) { - return insideLoc; - } - - List randomLocList = new ArrayList(); - - for (int z = -1; z < area.getZSize() + 1; z++) { - randomLocList.add(new RandomLoc(area.getLowLoc().getX(), 0, area.getLowLoc().getZ() + z)); - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + area.getXSize(), 0, area.getLowLoc().getZ() + z)); - } - - for (int x = -1; x < area.getXSize() + 1; x++) { - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ())); - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ() + area.getZSize())); - } - - Location loc = insideLoc.clone(); - - boolean found = false; - int it = 0; - int maxIt = 30; - while (!found && it < maxIt) { - it++; - - Random ran = new Random(System.currentTimeMillis()); - if (randomLocList.isEmpty()) - break; - int check = ran.nextInt(randomLocList.size()); - RandomLoc place = randomLocList.get(check); - randomLocList.remove(check); - double x = place.getX(); - double z = place.getZ(); - - loc.setX(x); - loc.setZ(z); - loc.setY(area.getHighLoc().getBlockY()); - - int max = area.getHighLoc().getBlockY(); - max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; - - for (int i = max; i > area.getLowLoc().getY(); i--) { - loc.setY(i); - Block block = loc.getBlock(); - Block block2 = loc.clone().add(0, 1, 0).getBlock(); - Block block3 = loc.clone().add(0, -1, 0).getBlock(); - if (!plugin.getNms().isEmptyBlock(block3) && plugin.getNms().isEmptyBlock(block) && plugin.getNms().isEmptyBlock(block2)) { - break; - } - } - - if (!plugin.getNms().isEmptyBlock(loc.getBlock())) - continue; - - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA || loc.clone().add(0, -1, 0).getBlock().getState() - .getType() == Material.STATIONARY_LAVA) - continue; - - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER || loc.clone().add(0, -1, 0).getBlock().getState() - .getType() == Material.STATIONARY_WATER) - continue; - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) && !player.hasPermission("residence.admin.tp")) - continue; - - found = true; - loc.setY(loc.getY() + 2); - loc.add(0.5, 0, 0.5); - break; - } - - if (!found && plugin.getConfigManager().getKickLocation() != null) - return plugin.getConfigManager().getKickLocation(); - - return loc; - } - - public CuboidArea getAreaByLoc(Location loc) { - for (CuboidArea thisarea : areas.values()) { - if (thisarea.containsLoc(loc)) { - return thisarea; - } - } - return null; - } - - public String[] listSubzones() { - String list[] = new String[subzones.size()]; - int i = 0; - for (String res : subzones.keySet()) { - list[i] = res; - i++; - } - return list; - } - - public List getSubzones() { - List list = new ArrayList(); - for (Entry res : subzones.entrySet()) { - list.add(res.getValue()); - } - return list; - } - - public int getSubzonesAmount(Boolean includeChild) { - int i = 0; - for (Entry res : subzones.entrySet()) { - i++; - if (includeChild) - i += res.getValue().getSubzonesAmount(includeChild); - } - return i; - } - - public void printSubzoneList(CommandSender sender, int page) { - - PageInfo pi = new PageInfo(6, subzones.size(), page); - - if (!pi.isPageOk()) { - sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); - return; - } - - plugin.msg(sender, lm.InformationPage_TopLine, plugin.msg(lm.General_Subzones)); - plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), pi.getTotalPages(), pi.getTotalEntries())); - RawMessage rm = new RawMessage(); - for (int i = pi.getStart(); i <= pi.getEnd(); i++) { - ClaimedResidence res = getSubzones().get(i); - if (res == null) - continue; - rm.add(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " + plugin.msg(lm.General_Owner, res.getOwner()), "Teleport to " + res.getName(), "res tp " + res.getName()); - rm.show(sender); - rm.clear(); - } - - plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, "res sublist " + this.getName()); - } - - public void printAreaList(Player player, int page) { - ArrayList temp = new ArrayList<>(); - for (String area : areas.keySet()) { - temp.add(area); - } - plugin.getInfoPageManager().printInfo(player, "res area list " + this.getName(), plugin.msg(lm.General_PhysicalAreas), temp, page); - } - - public void printAdvancedAreaList(Player player, int page) { - ArrayList temp = new ArrayList<>(); - for (Entry entry : areas.entrySet()) { - CuboidArea a = entry.getValue(); - Location h = a.getHighLoc(); - Location l = a.getLowLoc(); - temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED + entry.getKey() + " " + ChatColor.YELLOW + "P1:" + ChatColor.RED + "(" + h - .getBlockX() + "," + h.getBlockY() + "," + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + l.getBlockY() - + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); - } - plugin.getInfoPageManager().printInfo(player, "res area listall " + this.getName(), plugin.msg(lm.General_PhysicalAreas), temp, page); - } - - public String[] getAreaList() { - String arealist[] = new String[areas.size()]; - int i = 0; - for (Entry entry : areas.entrySet()) { - arealist[i] = entry.getKey(); - i++; - } - return arealist; - } - - public int getZoneDepth() { - int count = 0; - ClaimedResidence res = parent; - while (res != null) { - count++; - res = res.getParent(); - } - return count; - } - - public void setTpLoc(Player player, boolean resadmin) { - if (!this.perms.hasResidencePermission(player, false) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return; - } - if (!this.containsLoc(player.getLocation())) { - plugin.msg(player, lm.Residence_NotIn); - return; - } - tpLoc = player.getLocation(); - plugin.msg(player, lm.Residence_SetTeleportLocation); - } - - public int isSafeTp(Player player) { - if (player.getAllowFlight()) - return 0; - - if (player.getGameMode() == GameMode.CREATIVE) - return 0; - - if (plugin.getNms().isSpectator(player.getGameMode())) - return 0; - - if (tpLoc == null) - return 0; - - Location tempLoc = new Location(tpLoc.getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()); - - int from = (int) tempLoc.getY(); - - int fallDistance = 0; - for (int i = 0; i < 255; i++) { - tempLoc.setY(from - i); - Block block = tempLoc.getBlock(); - if (plugin.getNms().isEmptyBlock(block)) { - fallDistance++; - } else { - break; - } - } - return fallDistance; - } - - public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { - boolean isAdmin = plugin.isResAdminOn(reqPlayer); - if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") && !this.isOwner(targetPlayer)) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); - PermissionGroup group = rPlayer.getGroup(); - if (!group.hasTpAccess()) { - plugin.msg(reqPlayer, lm.General_TeleportDeny); - return; - } - if (!reqPlayer.equals(targetPlayer)) { - plugin.msg(reqPlayer, lm.General_NoPermission); - return; - } - if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { - plugin.msg(reqPlayer, lm.Residence_TeleportNoFlag); - return; - } - if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { - plugin.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); - return; - } - } - - if (!plugin.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { - int distance = isSafeTp(reqPlayer); - if (distance > 6) { - plugin.msg(reqPlayer, lm.General_TeleportConfirm, distance); - plugin.getTeleportMap().put(reqPlayer.getName(), this); - return; - } - } - - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin) { - plugin.msg(reqPlayer, lm.General_TeleportStarted, this.getName(), plugin.getConfigManager().getTeleportDelay()); - if (plugin.getConfigManager().isTeleportTitleMessage()) - TpTimer(reqPlayer, plugin.getConfigManager().getTeleportDelay()); - plugin.getTeleportDelayMap().add(reqPlayer.getName()); - } - - if (tpLoc != null) { - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) - performDelaydTp(tpLoc, targetPlayer, reqPlayer, true); - else - performInstantTp(tpLoc, targetPlayer, reqPlayer, true); - } else { - CuboidArea area = areas.values().iterator().next(); - if (area == null) { - reqPlayer.sendMessage(ChatColor.RED + "Could not find area to teleport to..."); - plugin.getTeleportDelayMap().remove(targetPlayer.getName()); - return; - } - final Location targloc = this.getMiddleFreeLoc(area.getHighLoc(), targetPlayer); - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) - performDelaydTp(targloc, targetPlayer, reqPlayer, true); - else - performInstantTp(targloc, targetPlayer, reqPlayer, true); - } - } - - public void TpTimer(final Player player, final int t) { - plugin.getAB().sendTitle(player, plugin.msg(lm.General_TeleportTitle), plugin.msg(lm.General_TeleportTitleTime, t)); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (!plugin.getTeleportDelayMap().contains(player.getName())) - return; - if (t > 1) - TpTimer(player, t - 1); - } - }, 20L); - } - - public void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { - ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - plugin.getServ().getPluginManager().callEvent(tpevent); - if (tpevent.isCancelled()) - return; - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) && plugin.getConfigManager().getTeleportDelay() > 0) - return; - else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) - plugin.getTeleportDelayMap().remove(targetPlayer.getName()); - targetPlayer.teleport(targloc); - if (near) - plugin.msg(targetPlayer, lm.Residence_TeleportNear); - else - plugin.msg(targetPlayer, lm.General_TeleportSuccess); - return; - } - }, plugin.getConfigManager().getTeleportDelay() * 20L); - } - - private void performInstantTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { - ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - plugin.getServ().getPluginManager().callEvent(tpevent); - if (!tpevent.isCancelled()) { - targetPlayer.teleport(targloc); - if (near) - plugin.msg(targetPlayer, lm.Residence_TeleportNear); - else - plugin.msg(targetPlayer, lm.General_TeleportSuccess); - - } - } - - public String getAreaIDbyLoc(Location loc) { - for (Entry area : areas.entrySet()) { - if (area.getValue().containsLoc(loc)) - return area.getKey(); - } - return null; - } - - public CuboidArea getCuboidAreabyName(String name) { - for (Entry area : areas.entrySet()) { - if (area.getKey().equals(name)) - return area.getValue(); - } - return null; - } - - public void removeArea(String id) { - plugin.getResidenceManager().removeChunkList(getName()); - areas.remove(id); - plugin.getResidenceManager().calculateChunks(getName()); - } - - public void removeArea(Player player, String id, boolean resadmin) { - if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { - if (!areas.containsKey(id)) { - plugin.msg(player, lm.Area_NonExist); - return; - } - if (areas.size() == 1 && !plugin.getConfigManager().allowEmptyResidences()) { - plugin.msg(player, lm.Area_RemoveLast); - return; - } - - ResidenceAreaDeleteEvent resevent = new ResidenceAreaDeleteEvent(player, this, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return; - - removeArea(id); - if (player != null) - plugin.msg(player, lm.Area_Remove); - } else { - if (player != null) - plugin.msg(player, lm.General_NoPermission); - } - } - - public Map save() { - Map root = new HashMap<>(); - Map areamap = new HashMap<>(); - - root.put("CapitalizedName", resName); - if (mainRes) - root.put("MainResidence", mainRes); - if (createTime != 0L) - root.put("CreatedOn", createTime); - - if (enterMessage != null) - root.put("EnterMessage", enterMessage); - - if (leaveMessage != null) - root.put("LeaveMessage", leaveMessage); - - if (ShopDesc != null) - root.put("ShopDescription", ShopDesc); - if (bank.getStoredMoney() != 0) - root.put("StoredMoney", bank.getStoredMoney()); - if (BlockSellPrice != 0D) - root.put("BlockSellPrice", BlockSellPrice); - - if (!ChatPrefix.equals("")) - root.put("ChatPrefix", ChatPrefix); - if (!ChannelColor.name().equals(plugin.getConfigManager().getChatColor().name()) && !ChannelColor.name().equals("WHITE")) { - root.put("ChannelColor", ChannelColor.name()); - } - - Map map = blacklist.save(); - if (!map.isEmpty()) - root.put("BlackList", map); - map = ignorelist.save(); - if (!map.isEmpty()) - root.put("IgnoreList", map); - for (Entry entry : areas.entrySet()) { - areamap.put(entry.getKey(), entry.getValue().save()); - } - - root.put("Areas", areamap); - Map subzonemap = new HashMap<>(); - for (Entry sz : subzones.entrySet()) { - subzonemap.put(sz.getKey(), sz.getValue().save()); - } - if (!subzonemap.isEmpty()) - root.put("Subzones", subzonemap); - root.put("Permissions", perms.save()); - - if (!this.cmdBlackList.isEmpty()) - root.put("cmdBlackList", this.cmdBlackList); - if (!this.cmdWhiteList.isEmpty()) - root.put("cmdWhiteList", this.cmdWhiteList); - - if (tpLoc != null) { - Map tpmap = new HashMap<>(); - tpmap.put("X", convertDouble(tpLoc.getX())); - tpmap.put("Y", convertDouble(tpLoc.getY())); - tpmap.put("Z", convertDouble(tpLoc.getZ())); - tpmap.put("Pitch", convertDouble(tpLoc.getPitch())); - tpmap.put("Yaw", convertDouble(tpLoc.getYaw())); - root.put("TPLoc", tpmap); - } - return root; - } - - // Converting double with comman to dots format and striping to 2 numbers after dot - private static double convertDouble(double d) { - return convertDouble(String.valueOf(d)); - } - - private static double convertDouble(String dString) { - DecimalFormat formatter = new DecimalFormat("#0.00"); - formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); - dString = dString.replace(",", "."); - Double d = 0D; - try { - d = Double.valueOf(dString); - d = Double.valueOf(formatter.format(d)); - } catch (Exception e) { - } - return d; - } - - @SuppressWarnings("unchecked") - public static ClaimedResidence load(String worldName, Map root, ClaimedResidence parent, Residence plugin) throws Exception { - ClaimedResidence res = new ClaimedResidence(plugin); - if (root == null) - throw new Exception("Null residence!"); - - if (root.containsKey("CapitalizedName")) - res.resName = ((String) root.get("CapitalizedName")); - - if (root.containsKey("CreatedOn")) - res.createTime = ((Long) root.get("CreatedOn")); - else - res.createTime = System.currentTimeMillis(); - - if (root.containsKey("ShopDescription")) - res.setShopDesc((String) root.get("ShopDescription")); - - if (root.containsKey("StoredMoney")) - res.bank.setStoredMoney((Integer) root.get("StoredMoney")); - - if (root.containsKey("BlackList")) - res.blacklist = ResidenceItemList.load(plugin, res, (Map) root.get("BlackList")); - if (root.containsKey("IgnoreList")) - res.ignorelist = ResidenceItemList.load(plugin, res, (Map) root.get("IgnoreList")); - - Map areamap = (Map) root.get("Areas"); - - res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); - - if (res.getPermissions().getOwnerLastKnownName() == null) - return null; - - if (root.containsKey("MainResidence")) - res.mainRes = (Boolean) root.get("MainResidence"); - - if (root.containsKey("BlockSellPrice")) - res.BlockSellPrice = (Double) root.get("BlockSellPrice"); - else { - res.BlockSellPrice = 0D; - } - - World world = plugin.getServ().getWorld(res.perms.getWorld()); - if (world == null) - throw new Exception("Cant Find World: " + res.perms.getWorld()); - for (Entry map : areamap.entrySet()) { - res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); - } - - if (root.containsKey("Subzones")) { - Map subzonemap = (Map) root.get("Subzones"); - for (Entry map : subzonemap.entrySet()) { - ClaimedResidence subres = ClaimedResidence.load(worldName, (Map) map.getValue(), res, plugin); - - if (subres == null) - continue; - - if (subres.getResidenceName() == null) - subres.setName(map.getKey()); - - if (plugin.getConfigManager().flagsInherit()) - subres.getPermissions().setParent(res.getPermissions()); - - // Adding subzone owner into hies res list if parent zone owner is not same person - if (subres.getParent() != null && !subres.getOwnerUUID().equals(subres.getParent().getOwnerUUID())) - plugin.getPlayerManager().addResidence(subres.getOwner(), subres); - - res.subzones.put(map.getKey().toLowerCase(), subres); - } - } - - if (root.containsKey("EnterMessage")) - res.enterMessage = (String) root.get("EnterMessage"); - - if (root.containsKey("LeaveMessage")) - res.leaveMessage = (String) root.get("LeaveMessage"); - - res.parent = parent; - Map tploc = (Map) root.get("TPLoc"); - if (tploc != null) { - double pitch = 0.0; - double yaw = 0.0; - - if (tploc.containsKey("Yaw")) - yaw = convertDouble(tploc.get("Yaw").toString()); - - if (tploc.containsKey("Pitch")) - pitch = convertDouble(tploc.get("Pitch").toString()); - - res.tpLoc = new Location(world, convertDouble(tploc.get("X").toString()), convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z") - .toString())); - res.tpLoc.setPitch((float) pitch); - res.tpLoc.setYaw((float) yaw); - } - - if (root.containsKey("cmdBlackList")) - res.cmdBlackList = (List) root.get("cmdBlackList"); - if (root.containsKey("cmdWhiteList")) - res.cmdWhiteList = (List) root.get("cmdWhiteList"); - - if (root.containsKey("ChatPrefix")) - res.ChatPrefix = (String) root.get("ChatPrefix"); - - if (root.containsKey("ChannelColor")) - res.ChannelColor = ChatColor.valueOf((String) root.get("ChannelColor")); - else { - res.ChannelColor = plugin.getConfigManager().getChatColor(); - } - - return res; - } - - public int getAreaCount() { - return areas.size(); - } - - public boolean renameSubzone(String oldName, String newName) { - return this.renameSubzone(null, oldName, newName, true); - } - - public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { - if (!plugin.validName(newName)) { - plugin.msg(player, lm.Invalid_NameCharacters); - return false; - } - if (oldName == null) - return false; - if (newName == null) - return false; - String newN = newName; - oldName = oldName.toLowerCase(); - newName = newName.toLowerCase(); - - ClaimedResidence res = subzones.get(oldName); - if (res == null) { - if (player != null) - plugin.msg(player, lm.Invalid_Subzone); - return false; - } - if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - if (subzones.containsKey(newName)) { - if (player != null) - plugin.msg(player, lm.Subzone_Exists, newName); - return false; - } - res.setName(newN); - subzones.put(newName, res); - subzones.remove(oldName); - if (player != null) - plugin.msg(player, lm.Subzone_Rename, oldName, newName); - return true; - } - - public boolean renameArea(String oldName, String newName) { - return this.renameArea(null, oldName, newName, true); - } - - public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { - if (!plugin.validName(newName)) { - plugin.msg(player, lm.Invalid_NameCharacters); - return false; - } - if (player == null || perms.hasResidencePermission(player, true) || resadmin) { - if (areas.containsKey(newName)) { - if (player != null) - plugin.msg(player, lm.Area_Exists); - return false; - } - CuboidArea area = areas.get(oldName); - if (area == null) { - if (player != null) - plugin.msg(player, lm.Area_InvalidName); - return false; - } - areas.put(newName, area); - areas.remove(oldName); - if (player != null) - plugin.msg(player, lm.Area_Rename, oldName, newName); - return true; - } - plugin.msg(player, lm.General_NoPermission); - return false; - } - - public CuboidArea getArea(String name) { - return areas.get(name); - } - - public String getName() { - String name = this.resName; - if (this.getParent() != null) - name = this.getParent().getName() + "." + name; - if (name == null) - return "Unknown"; - return name; - } - - public void remove() { - String name = getName(); - if (name != null) { - plugin.getResidenceManager().removeResidence(name); - plugin.getResidenceManager().removeChunkList(name); - } - } - - public ResidenceBank getBank() { - return bank; - } - - public String getWorld() { - return perms.getWorld(); - } - - public ResidencePlayer getRPlayer() { - return plugin.getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); - } - - public PermissionGroup getOwnerGroup() { - return getRPlayer().getGroup(getPermissions().getWorld()); - } - - public String getOwner() { - return perms.getOwner(); - } - - public boolean isOwner(String name) { - Player player = Bukkit.getPlayer(name); - if (player != null) - return isOwner(player); - return perms.getOwner().equalsIgnoreCase(name); - } - - public boolean isOwner(Player p) { - if (plugin.getConfigManager().isOfflineMode()) - return perms.getOwner().equals(p.getName()); - return perms.getOwnerUUID().equals(p.getUniqueId()); - } - - public boolean isOwner(CommandSender sender) { - if (plugin.getConfigManager().isOfflineMode()) - return perms.getOwner().equals(sender.getName()); - if (sender instanceof Player) - return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); - return true; - } - - public void setChatPrefix(String ChatPrefix) { - this.ChatPrefix = ChatPrefix; - } - - public String getChatPrefix() { - return this.ChatPrefix == null ? "" : this.ChatPrefix; - } - - public void setChannelColor(ChatColor ChannelColor) { - this.ChannelColor = ChannelColor; - } - - public ChatChannel getChatChannel() { - return plugin.getChatManager().getChannel(this.getName()); - } - - public ChatColor getChannelColor() { - return ChannelColor; - } - - public UUID getOwnerUUID() { - return perms.getOwnerUUID(); - } - - public ResidenceItemList getItemBlacklist() { - return blacklist; - } - - public ResidenceItemList getItemIgnoreList() { - return ignorelist; - } - - public List getCmdBlackList() { - return this.cmdBlackList; - } - - public List getCmdWhiteList() { - return this.cmdWhiteList; - } - - public boolean addCmdBlackList(String cmd) { - if (cmd.contains("/")) - cmd = cmd.replace("/", ""); - if (!this.cmdBlackList.contains(cmd.toLowerCase())) { - this.cmdBlackList.add(cmd.toLowerCase()); - return true; - } - this.cmdBlackList.remove(cmd.toLowerCase()); - return false; - } - - public boolean addCmdWhiteList(String cmd) { - if (cmd.contains("/")) - cmd = cmd.replace("/", ""); - if (!this.cmdWhiteList.contains(cmd.toLowerCase())) { - this.cmdWhiteList.add(cmd.toLowerCase()); - return true; - } - this.cmdWhiteList.remove(cmd.toLowerCase()); - return false; - } - - public Double getBlockSellPrice() { - return BlockSellPrice; - } - - public ArrayList getPlayersInResidence() { - ArrayList within = new ArrayList<>(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (this.containsLoc(player.getLocation())) { - within.add(player); - } - } - return within; - } - - public List GetShopVotes() { - return ShopVoteList; - } - - public void clearShopVotes() { - ShopVoteList.clear(); - } - - public void addShopVote(List ShopVotes) { - ShopVoteList.addAll(ShopVotes); - } - - public void addShopVote(ShopVote ShopVote) { - ShopVoteList.add(ShopVote); - } -} +package com.bekvon.bukkit.residence.protection; + +import org.bukkit.ChatColor; +import org.bukkit.GameMode; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.RandomLoc; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.economy.ResidenceBank; +import com.bekvon.bukkit.residence.economy.rent.RentableLand; +import com.bekvon.bukkit.residence.economy.rent.RentedLand; +import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; +import com.bekvon.bukkit.residence.event.ResidenceAreaDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; +import com.bekvon.bukkit.residence.event.ResidenceTPEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; +import com.bekvon.bukkit.residence.itemlist.ItemList.ListType; +import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.shopStuff.ShopVote; +import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.utils.Debug; +import com.bekvon.bukkit.residence.utils.RawMessage; + +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.World.Environment; +import org.bukkit.block.Block; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ClaimedResidence { + + private String resName = null; + protected ClaimedResidence parent; + protected Map areas; + protected Map subzones; + protected ResidencePermissions perms; + protected ResidenceBank bank; + protected Double BlockSellPrice = 0.0; + protected Location tpLoc; + protected String enterMessage; + protected String leaveMessage; + protected String ShopDesc = null; + protected String ChatPrefix = ""; + protected ChatColor ChannelColor = ChatColor.WHITE; + protected ResidenceItemList ignorelist; + protected ResidenceItemList blacklist; + protected boolean mainRes = false; + protected long createTime = 0L; + + protected List cmdWhiteList = new ArrayList(); + protected List cmdBlackList = new ArrayList(); + + List ShopVoteList = new ArrayList(); + + protected RentableLand rentableland = null; + protected RentedLand rentedland = null; + + protected Integer sellPrice = -1; + + private Residence plugin; + + public String getResidenceName() { + return resName; + } + + public void setName(String name) { + if (name.contains(".")) + resName = name.split("\\.")[name.split("\\.").length - 1]; + else + resName = name; + } + + public void setCreateTime() { + createTime = System.currentTimeMillis(); + } + + public long getCreateTime() { + return createTime; + } + + public Integer getSellPrice() { + return sellPrice; + } + + public void setSellPrice(Integer amount) { + sellPrice = amount; + } + + public boolean isForSell() { + return plugin.getTransactionManager().isForSale(this.getName()); + } + + public boolean isForRent() { + return plugin.getRentManager().isForRent(this); + } + + public boolean isSubzoneForRent() { + for (Entry one : subzones.entrySet()) { + if (one.getValue().isForRent()) + return true; + if (one.getValue().isSubzoneForRent()) + return true; + } + return false; + } + + public boolean isSubzoneRented() { + for (Entry one : subzones.entrySet()) { + if (one.getValue().isRented()) + return true; + if (one.getValue().isSubzoneRented()) + return true; + } + return false; + } + + public ClaimedResidence getRentedSubzone() { + for (Entry one : subzones.entrySet()) { + if (one.getValue().isRented()) + return one.getValue(); + if (one.getValue().getRentedSubzone() != null) + return one.getValue().getRentedSubzone(); + } + return null; + } + + public boolean isParentForRent() { + if (this.getParent() != null) + return this.getParent().isForRent() ? true : this.getParent().isParentForRent(); + return false; + } + + public boolean isParentForSell() { + if (this.getParent() != null) + return this.getParent().isForSell() ? true : this.getParent().isParentForSell(); + return false; + } + + public boolean isRented() { + return plugin.getRentManager().isRented(this); + } + + public void setRentable(RentableLand rl) { + this.rentableland = rl; + } + + public RentableLand getRentable() { + return this.rentableland; + } + + public void setRented(RentedLand rl) { + this.rentedland = rl; + } + + public RentedLand getRentedLand() { + return this.rentedland; + } + + public ClaimedResidence(String creationWorld, Residence plugin) { + this(plugin.getServerLandname(), creationWorld, plugin); + } + + public ClaimedResidence(String creator, String creationWorld, Residence plugin) { + this(plugin); + perms = new ResidencePermissions(this, creator, creationWorld); + } + + public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence, Residence plugin) { + this(creator, creationWorld, plugin); + parent = parentResidence; + } + + public ClaimedResidence(Residence plugin) { + subzones = new HashMap<>(); + areas = new HashMap<>(); + bank = new ResidenceBank(this); + blacklist = new ResidenceItemList(this, ListType.BLACKLIST); + ignorelist = new ResidenceItemList(this, ListType.IGNORELIST); + this.plugin = plugin; + } + + public boolean isMainResidence() { + return mainRes; + } + + public void setMainResidence(boolean state) { + mainRes = state; + } + + public boolean isSubzone() { + return parent == null ? false : true; + } + + public int getSubzoneDeep() { + return getSubzoneDeep(0); + } + + public int getSubzoneDeep(int deep) { + deep++; + if (parent != null) { + return parent.getSubzoneDeep(deep); + } + return deep; + } + + public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() < group.getMinX()) { + plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); + return false; + } + if (area.getYSize() < group.getMinY()) { + plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); + return false; + } + if (area.getZSize() < group.getMinZ()) { + plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); + return false; + } + return true; + } + + public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() < group.getSubzoneMinX()) { + plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); + return false; + } + if (area.getYSize() < group.getSubzoneMinY()) { + plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); + return false; + } + if (area.getZSize() < group.getSubzoneMinZ()) { + plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); + return false; + } + return true; + } + + public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() > group.getMaxX()) { + plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); + return false; + } + if (area.getYSize() > group.getMaxY()) { + plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); + return false; + } + if (area.getZSize() > group.getMaxZ()) { + plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); + return false; + } + return true; + } + + public boolean isSmallerThanMaxSubzone(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() > group.getSubzoneMaxX()) { + plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); + return false; + } + if (area.getYSize() > group.getSubzoneMaxY()) { + plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); + return false; + } + if (area.getZSize() > group.getSubzoneMaxZ()) { + plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); + return false; + } + return true; + } + + public boolean addArea(CuboidArea area, String name) { + return addArea(null, area, name, true); + } + + public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin) { + return addArea(player, area, name, resadmin, true); + } + + public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin, boolean chargeMoney) { + if (!plugin.validName(name)) { + if (player != null) { + plugin.msg(player, lm.Invalid_NameCharacters); + } + return false; + } + + String NName = name; + name = name.toLowerCase(); + + if (areas.containsKey(NName)) { + if (player != null) { + plugin.msg(player, lm.Area_Exists); + } + return false; + } + + if (this.isSubzone() && !isBiggerThanMinSubzone(player, area, resadmin) || !this.isSubzone() && !isBiggerThanMin(player, area, resadmin)) + return false; + + if (!resadmin && plugin.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { + boolean inside = false; + for (CuboidArea are : areas.values()) { + if (are.isAreaWithinArea(area)) { + inside = true; + } + } + if (!inside) { + return false; + } + } + if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { + if (player != null) { + plugin.msg(player, lm.Area_DiffWorld); + } + return false; + } + if (parent == null) { + String collideResidence = plugin.getResidenceManager().checkAreaCollision(area, this); + ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); + if (cRes != null) { + if (player != null) { + plugin.msg(player, lm.Area_Collision, cRes.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(area); + v.setErrorAreas(cRes); + plugin.getSelectionManager().showBounds(player, v); + } + return false; + } + } else { + String[] szs = parent.listSubzones(); + for (String sz : szs) { + ClaimedResidence res = parent.getSubzone(sz); + if (res != null && res != this) { + if (res.checkCollision(area)) { + if (player != null) { + plugin.msg(player, lm.Area_SubzoneCollision, sz); + } + return false; + } + } + } + } + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + if (parent != null) { + if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { + plugin.msg(player, lm.Area_NotWithinParent); + return false; + } + if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { + plugin.msg(player, lm.Residence_ParentNoPermission); + return false; + } + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); + if (!this.isSubzone() && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create") || + this.isSubzone() && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create.subzone")) { + return false; + } + + if (areas.size() >= group.getMaxPhysicalPerResidence()) { + plugin.msg(player, lm.Area_MaxPhysical); + return false; + } + if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { + plugin.msg(player, lm.Area_SizeLimit); + return false; + } + if (group.getMinHeight() > area.getLowLoc().getBlockY()) { + plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); + return false; + } + if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { + plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); + return false; + } + if (chargeMoney && parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { + int chargeamount = (int) Math.ceil(area.getSize() * group.getCostPerBlock()); + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + return false; + } + } + } + + ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, NName, this, area); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + plugin.getResidenceManager().removeChunkList(getName()); + areas.put(name, area); + plugin.getResidenceManager().calculateChunks(getName()); + return true; + } + + public boolean replaceArea(CuboidArea neware, String name) { + return this.replaceArea(null, neware, name, true); + } + + public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { + if (!areas.containsKey(name)) { + if (player != null) + plugin.msg(player, lm.Area_NonExist); + return false; + } + CuboidArea oldarea = areas.get(name); + if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { + if (player != null) + plugin.msg(player, lm.Area_DiffWorld); + return false; + } + if (parent == null) { + String collideResidence = plugin.getResidenceManager().checkAreaCollision(newarea, this); + ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); + if (cRes != null && player != null) { + plugin.msg(player, lm.Area_Collision, cRes.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(this.getAreaArray()); + v.setErrorAreas(cRes.getAreaArray()); + plugin.getSelectionManager().showBounds(player, v); + return false; + } + } else { + String[] szs = parent.listSubzones(); + for (String sz : szs) { + ClaimedResidence res = parent.getSubzone(sz); + if (res != null && res != this) { + if (res.checkCollision(newarea)) { + if (player != null) { + plugin.msg(player, lm.Area_SubzoneCollision, sz); + Visualizer v = new Visualizer(player); + v.setErrorAreas(res.getAreaArray()); + plugin.getSelectionManager().showBounds(player, v); + } + return false; + } + } + } + } + // Don't remove subzones that are not in the area anymore, show colliding areas + String[] szs = listSubzones(); + for (String sz : szs) { + ClaimedResidence res = getSubzone(sz); + if (res == null || res == this) + continue; + String[] szareas = res.getAreaList(); + for (String area : szareas) { + if (newarea.isAreaWithinArea(res.getArea(area))) + continue; + + boolean good = false; + for (CuboidArea arae : getAreaArray()) { + if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { + good = true; + } + } + if (!good) { + plugin.msg(player, lm.Area_Collision, res.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(this.getAreaArray()); + v.setErrorAreas(res.getAreaArray()); + plugin.getSelectionManager().showBounds(player, v); + return false; + } + + } + if (res.getAreaArray().length == 0) { + removeSubzone(sz); + } + } + + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + if (parent != null) { + if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { + plugin.msg(player, lm.Area_NotWithinParent); + return false; + } + if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { + plugin.msg(player, lm.Residence_ParentNoPermission); + return false; + } + } + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (!group.canCreateResidences() && !plugin.hasPermission(player, "residence.resize")) { + return false; + } + + if (oldarea.getSize() < newarea.getSize() && (!this.isSubzone() && !isSmallerThanMax(player, newarea, resadmin) || this.isSubzone() + && !isSmallerThanMaxSubzone(player, newarea, resadmin))) { + plugin.msg(player, lm.Area_SizeLimit); + return false; + } + if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { + plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); + return false; + } + if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { + plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); + return false; + } + if (parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { + int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); + if (chargeamount > 0) { + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + return false; + } + } + } + } + + ResidenceSizeChangeEvent resevent = new ResidenceSizeChangeEvent(player, this, oldarea, newarea); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + if ((!resadmin) && (player != null)) { + int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * getBlockSellPrice().doubleValue()); + if ((chargeamount < 0) && (this.plugin.getConfigManager().useResMoneyBack())) { + this.plugin.getTransactionManager().giveEconomyMoney(player, -chargeamount); + } + } + + plugin.getResidenceManager().removeChunkList(getName()); + areas.remove(name); + areas.put(name, newarea); + plugin.getResidenceManager().calculateChunks(getName()); + if (player != null) + plugin.msg(player, lm.Area_Update); + return true; + } + + public boolean addSubzone(String name, Location loc1, Location loc2) { + return this.addSubzone(null, loc1, loc2, name, true); + } + + public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { + if (player == null) { + return this.addSubzone(null, plugin.getServerLandname(), loc1, loc2, name, resadmin); + } + return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); + } + + public boolean addSubzone(Player player, String name, boolean resadmin) { + if (Residence.getInstance().getSelectionManager().hasPlacedBoth(player)) { + Location loc1 = Residence.getInstance().getSelectionManager().getPlayerLoc1(player); + Location loc2 = Residence.getInstance().getSelectionManager().getPlayerLoc2(player); + return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); + } + return false; + } + + public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { + if (!plugin.validName(name)) { + if (player != null) { + plugin.msg(player, lm.Invalid_NameCharacters); + } + return false; + } + if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { + if (player != null) { + plugin.msg(player, lm.Subzone_SelectInside); + } + return false; + } + + String NName = name; + name = name.toLowerCase(); + + if (subzones.containsKey(name)) { + if (player != null) { + plugin.msg(player, lm.Subzone_Exists, NName); + } + return false; + } + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + if (!this.perms.playerHas(player.getName(), Flags.subzone, this.perms.playerHas(player, Flags.admin, false))) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + } + + if (this.getSubzoneList().length >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { + plugin.msg(player, lm.Subzone_MaxAmount); + return false; + } + + if (this.getZoneDepth() >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { + plugin.msg(player, lm.Subzone_MaxDepth); + return false; + } + } + + CuboidArea newArea = new CuboidArea(loc1, loc2); + + Set> set = subzones.entrySet(); + for (Entry resEntry : set) { + ClaimedResidence res = resEntry.getValue(); + if (res.checkCollision(newArea)) { + if (player != null) { + plugin.msg(player, lm.Subzone_Collide, resEntry.getKey()); + Visualizer v = new Visualizer(player); + v.setAreas(newArea); + v.setErrorAreas(res); + plugin.getSelectionManager().showBounds(player, v); + } + return false; + } + } + ClaimedResidence newres; + if (player != null) { + newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); + newres.addArea(player, newArea, NName, resadmin); + } else { + newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); + newres.addArea(newArea, NName); + } + + if (newres.getAreaCount() != 0) { + newres.getPermissions().applyDefaultFlags(); + if (player != null) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + newres.setEnterMessage(group.getDefaultEnterMessage()); + newres.setLeaveMessage(group.getDefaultLeaveMessage()); + } + if (plugin.getConfigManager().flagsInherit()) { + newres.getPermissions().setParent(perms); + } + + newres.resName = name; + + newres.setCreateTime(); + + ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, name, newres, newArea); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + subzones.put(name, newres); + if (player != null) { + plugin.msg(player, lm.Area_Create, name); + plugin.msg(player, lm.Subzone_Create, name); + } + return true; + } + if (player != null) { + plugin.msg(player, lm.Subzone_CreateFail, name); + } + return false; + } + + public ClaimedResidence getSubzoneByLoc(Location loc) { + Set> set = subzones.entrySet(); + ClaimedResidence res = null; + for (Entry entry : set) { + if (entry.getValue().containsLoc(loc)) { + res = entry.getValue(); + break; + } + } + if (res == null) + return null; + ClaimedResidence subrez = res.getSubzoneByLoc(loc); + if (subrez == null) { + return res; + } + return subrez; + } + + public ClaimedResidence getSubzone(String subzonename) { + subzonename = subzonename.toLowerCase(); + + if (!subzonename.contains(".")) { + return subzones.get(subzonename); + } + String split[] = subzonename.split("\\."); + ClaimedResidence get = subzones.get(split[0]); + for (int i = 1; i < split.length; i++) { + if (get == null) { + return null; + } + get = get.getSubzone(split[i]); + } + return get; + } + + public String getSubzoneNameByRes(ClaimedResidence res) { + Set> set = subzones.entrySet(); + for (Entry entry : set) { + if (entry.getValue() == res) { + return entry.getValue().getResidenceName(); + } + String n = entry.getValue().getSubzoneNameByRes(res); + if (n != null) { + return entry.getValue().getResidenceName() + "." + n; + } + } + return null; + } + + public String[] getSubzoneList() { + ArrayList zones = new ArrayList<>(); + Set set = subzones.keySet(); + for (String key : set) { + if (key != null) { + zones.add(key); + } + } + return zones.toArray(new String[zones.size()]); + } + + public boolean checkCollision(CuboidArea area) { + Set set = areas.keySet(); + for (String key : set) { + CuboidArea checkarea = areas.get(key); + if (checkarea != null) { + if (checkarea.checkCollision(area)) { + return true; + } + } + } + return false; + } + + public boolean containsLoc(Location loc) { + Collection keys = areas.values(); + for (CuboidArea key : keys) { + if (key.containsLoc(loc)) { + if (parent != null) + return parent.containsLoc(loc); + return true; + } + } + return false; + } + + public ClaimedResidence getParent() { + return parent; + } + + public String getTopParentName() { + return this.getTopParent().getName(); + } + + public ClaimedResidence getTopParent() { + if (parent == null) + return this; + return parent.getTopParent(); + } + + public boolean removeSubzone(String name) { + return this.removeSubzone(null, name, true); + } + + public boolean removeSubzone(Player player, String name, boolean resadmin) { + if (name == null) + return false; + name = name.toLowerCase(); + ClaimedResidence res = subzones.get(name); + if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + subzones.remove(name); + if (player != null) { + plugin.msg(player, lm.Subzone_Remove, name); + } + return true; + } + + public long getTotalSize() { + Collection set = areas.values(); + long size = 0; + if (!plugin.getConfigManager().isNoCostForYBlocks()) + for (CuboidArea entry : set) { + size = size + entry.getSize(); + } + else + for (CuboidArea entry : set) { + size = size + (entry.getXSize() * entry.getZSize()); + } + return size; + } + + public long getXZSize() { + Collection set = areas.values(); + long size = 0; + for (CuboidArea entry : set) { + size = size + (entry.getXSize() * entry.getZSize()); + } + return size; + } + + public CuboidArea[] getAreaArray() { + CuboidArea[] temp = new CuboidArea[areas.size()]; + int i = 0; + for (CuboidArea area : areas.values()) { + temp[i] = area; + i++; + } + return temp; + } + + public Map getAreaMap() { + return areas; + } + + public ResidencePermissions getPermissions() { + return perms; + } + + public String getEnterMessage() { + return enterMessage; + } + + public String getLeaveMessage() { + return leaveMessage; + } + + public String getShopDesc() { + return ShopDesc; + } + + public void setEnterMessage(String message) { + enterMessage = message; + } + + public void setLeaveMessage(String message) { + leaveMessage = message; + } + + public void setShopDesc(String message) { + ShopDesc = message; + } + + public void setEnterLeaveMessage(Player player, String message, boolean enter, boolean resadmin) { + // if(message!=null && + // plugin.getConfigManager().getResidenceNameRegex() != null) { + // Removed pending further action + // player.sendMessage(ChatColor.RED+plugin.getLanguage().getPhrase("InvalidCharacters")); + // return; + // } + if (message != null) { + if (message.equals("")) { + message = null; + } + } + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (!group.canSetEnterLeaveMessages() && !resadmin) { + plugin.msg(player, lm.Residence_OwnerNoPermission); + return; + } + if (!perms.hasResidencePermission(player, false) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return; + } + if (enter) { + this.setEnterMessage(message); + } else { + this.setLeaveMessage(message); + } + plugin.msg(player, lm.Residence_MessageChange); + } + + public Location getMiddleFreeLoc(Location insideLoc, Player player) { + CuboidArea area = this.getAreaByLoc(insideLoc); + if (area == null) { + return insideLoc; + } + + int y = area.getHighLoc().getBlockY(); + + int x = area.getLowLoc().getBlockX() + area.getXSize() / 2; + int z = area.getLowLoc().getBlockZ() + area.getZSize() / 2; + + Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); + boolean found = false; + int it = 0; + int maxIt = area.getWorld().getMaxHeight() - 63; + while (it < maxIt) { + it++; + newLoc.setY(newLoc.getY() - 1); + + if (newLoc.getBlockY() < 63) + break; + + Block block = newLoc.getBlock(); + Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); + Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); + if (plugin.getNms().isEmptyBlock(block) && plugin.getNms().isEmptyBlock(block2) && !plugin.getNms().isEmptyBlock(block3)) { + found = true; + break; + } + } + if (found) { + return newLoc; + } + return getOutsideFreeLoc(insideLoc, player); + } + + public Location getOutsideFreeLoc(Location insideLoc, Player player) { + CuboidArea area = this.getAreaByLoc(insideLoc); + if (area == null) { + return insideLoc; + } + + List randomLocList = new ArrayList(); + + for (int z = -1; z < area.getZSize() + 1; z++) { + randomLocList.add(new RandomLoc(area.getLowLoc().getX(), 0, area.getLowLoc().getZ() + z)); + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + area.getXSize(), 0, area.getLowLoc().getZ() + z)); + } + + for (int x = -1; x < area.getXSize() + 1; x++) { + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ())); + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ() + area.getZSize())); + } + + Location loc = insideLoc.clone(); + + boolean found = false; + int it = 0; + int maxIt = 30; + while (!found && it < maxIt) { + it++; + + Random ran = new Random(System.currentTimeMillis()); + if (randomLocList.isEmpty()) + break; + int check = ran.nextInt(randomLocList.size()); + RandomLoc place = randomLocList.get(check); + randomLocList.remove(check); + double x = place.getX(); + double z = place.getZ(); + + loc.setX(x); + loc.setZ(z); + loc.setY(area.getHighLoc().getBlockY()); + + int max = area.getHighLoc().getBlockY(); + max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; + + for (int i = max; i > area.getLowLoc().getY(); i--) { + loc.setY(i); + Block block = loc.getBlock(); + Block block2 = loc.clone().add(0, 1, 0).getBlock(); + Block block3 = loc.clone().add(0, -1, 0).getBlock(); + if (!plugin.getNms().isEmptyBlock(block3) && plugin.getNms().isEmptyBlock(block) && plugin.getNms().isEmptyBlock(block2)) { + break; + } + } + + if (!plugin.getNms().isEmptyBlock(loc.getBlock())) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA || loc.clone().add(0, -1, 0).getBlock().getState() + .getType() == Material.STATIONARY_LAVA) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER || loc.clone().add(0, -1, 0).getBlock().getState() + .getType() == Material.STATIONARY_WATER) + continue; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) && !player.hasPermission("residence.admin.tp")) + continue; + + found = true; + loc.setY(loc.getY() + 2); + loc.add(0.5, 0, 0.5); + break; + } + + if (!found && plugin.getConfigManager().getKickLocation() != null) + return plugin.getConfigManager().getKickLocation(); + + return loc; + } + + public CuboidArea getAreaByLoc(Location loc) { + for (CuboidArea thisarea : areas.values()) { + if (thisarea.containsLoc(loc)) { + return thisarea; + } + } + return null; + } + + public String[] listSubzones() { + String list[] = new String[subzones.size()]; + int i = 0; + for (String res : subzones.keySet()) { + list[i] = res; + i++; + } + return list; + } + + public List getSubzones() { + List list = new ArrayList(); + for (Entry res : subzones.entrySet()) { + list.add(res.getValue()); + } + return list; + } + + public int getSubzonesAmount(Boolean includeChild) { + int i = 0; + for (Entry res : subzones.entrySet()) { + i++; + if (includeChild) + i += res.getValue().getSubzonesAmount(includeChild); + } + return i; + } + + public void printSubzoneList(CommandSender sender, int page) { + + PageInfo pi = new PageInfo(6, subzones.size(), page); + + if (!pi.isPageOk()) { + sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); + return; + } + + plugin.msg(sender, lm.InformationPage_TopLine, plugin.msg(lm.General_Subzones)); + plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), pi.getTotalPages(), pi.getTotalEntries())); + RawMessage rm = new RawMessage(); + for (int i = pi.getStart(); i <= pi.getEnd(); i++) { + ClaimedResidence res = getSubzones().get(i); + if (res == null) + continue; + rm.add(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " + plugin.msg(lm.General_Owner, res.getOwner()), "Teleport to " + res.getName(), "res tp " + res.getName()); + rm.show(sender); + rm.clear(); + } + + plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, "res sublist " + this.getName()); + } + + public void printAreaList(Player player, int page) { + ArrayList temp = new ArrayList<>(); + for (String area : areas.keySet()) { + temp.add(area); + } + plugin.getInfoPageManager().printInfo(player, "res area list " + this.getName(), plugin.msg(lm.General_PhysicalAreas), temp, page); + } + + public void printAdvancedAreaList(Player player, int page) { + ArrayList temp = new ArrayList<>(); + for (Entry entry : areas.entrySet()) { + CuboidArea a = entry.getValue(); + Location h = a.getHighLoc(); + Location l = a.getLowLoc(); + temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED + entry.getKey() + " " + ChatColor.YELLOW + "P1:" + ChatColor.RED + "(" + h + .getBlockX() + "," + h.getBlockY() + "," + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + l.getBlockY() + + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); + } + plugin.getInfoPageManager().printInfo(player, "res area listall " + this.getName(), plugin.msg(lm.General_PhysicalAreas), temp, page); + } + + public String[] getAreaList() { + String arealist[] = new String[areas.size()]; + int i = 0; + for (Entry entry : areas.entrySet()) { + arealist[i] = entry.getKey(); + i++; + } + return arealist; + } + + public int getZoneDepth() { + int count = 0; + ClaimedResidence res = parent; + while (res != null) { + count++; + res = res.getParent(); + } + return count; + } + + public void setTpLoc(Player player, boolean resadmin) { + if (!this.perms.hasResidencePermission(player, false) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return; + } + if (!this.containsLoc(player.getLocation())) { + plugin.msg(player, lm.Residence_NotIn); + return; + } + tpLoc = player.getLocation(); + plugin.msg(player, lm.Residence_SetTeleportLocation); + } + + public int isSafeTp(Player player) { + if (player.getAllowFlight()) + return 0; + + if (player.getGameMode() == GameMode.CREATIVE) + return 0; + + if (plugin.getNms().isSpectator(player.getGameMode())) + return 0; + + if (tpLoc == null) + return 0; + + Location tempLoc = new Location(tpLoc.getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()); + + int from = (int) tempLoc.getY(); + + int fallDistance = 0; + for (int i = 0; i < 255; i++) { + tempLoc.setY(from - i); + Block block = tempLoc.getBlock(); + if (plugin.getNms().isEmptyBlock(block)) { + fallDistance++; + } else { + break; + } + } + return fallDistance; + } + + public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { + boolean isAdmin = plugin.isResAdminOn(reqPlayer); + if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") && !this.isOwner(targetPlayer)) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); + PermissionGroup group = rPlayer.getGroup(); + if (!group.hasTpAccess()) { + plugin.msg(reqPlayer, lm.General_TeleportDeny); + return; + } + if (!reqPlayer.equals(targetPlayer)) { + plugin.msg(reqPlayer, lm.General_NoPermission); + return; + } + if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { + plugin.msg(reqPlayer, lm.Residence_TeleportNoFlag); + return; + } + if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { + plugin.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); + return; + } + } + + if (!plugin.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { + int distance = isSafeTp(reqPlayer); + if (distance > 6) { + plugin.msg(reqPlayer, lm.General_TeleportConfirm, distance); + plugin.getTeleportMap().put(reqPlayer.getName(), this); + return; + } + } + + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin) { + plugin.msg(reqPlayer, lm.General_TeleportStarted, this.getName(), plugin.getConfigManager().getTeleportDelay()); + if (plugin.getConfigManager().isTeleportTitleMessage()) + TpTimer(reqPlayer, plugin.getConfigManager().getTeleportDelay()); + plugin.getTeleportDelayMap().add(reqPlayer.getName()); + } + + if (tpLoc != null) { + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) + performDelaydTp(tpLoc, targetPlayer, reqPlayer, true); + else + performInstantTp(tpLoc, targetPlayer, reqPlayer, true); + } else { + CuboidArea area = areas.values().iterator().next(); + if (area == null) { + reqPlayer.sendMessage(ChatColor.RED + "Could not find area to teleport to..."); + plugin.getTeleportDelayMap().remove(targetPlayer.getName()); + return; + } + final Location targloc = this.getMiddleFreeLoc(area.getHighLoc(), targetPlayer); + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) + performDelaydTp(targloc, targetPlayer, reqPlayer, true); + else + performInstantTp(targloc, targetPlayer, reqPlayer, true); + } + } + + public void TpTimer(final Player player, final int t) { + plugin.getAB().sendTitle(player, plugin.msg(lm.General_TeleportTitle), plugin.msg(lm.General_TeleportTitleTime, t)); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (!plugin.getTeleportDelayMap().contains(player.getName())) + return; + if (t > 1) + TpTimer(player, t - 1); + } + }, 20L); + } + + public void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { + ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); + plugin.getServ().getPluginManager().callEvent(tpevent); + if (tpevent.isCancelled()) + return; + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) && plugin.getConfigManager().getTeleportDelay() > 0) + return; + else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) + plugin.getTeleportDelayMap().remove(targetPlayer.getName()); + targetPlayer.teleport(targloc); + if (near) + plugin.msg(targetPlayer, lm.Residence_TeleportNear); + else + plugin.msg(targetPlayer, lm.General_TeleportSuccess); + return; + } + }, plugin.getConfigManager().getTeleportDelay() * 20L); + } + + private void performInstantTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { + ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); + plugin.getServ().getPluginManager().callEvent(tpevent); + if (!tpevent.isCancelled()) { + targetPlayer.teleport(targloc); + if (near) + plugin.msg(targetPlayer, lm.Residence_TeleportNear); + else + plugin.msg(targetPlayer, lm.General_TeleportSuccess); + + } + } + + public String getAreaIDbyLoc(Location loc) { + for (Entry area : areas.entrySet()) { + if (area.getValue().containsLoc(loc)) + return area.getKey(); + } + return null; + } + + public CuboidArea getCuboidAreabyName(String name) { + for (Entry area : areas.entrySet()) { + if (area.getKey().equals(name)) + return area.getValue(); + } + return null; + } + + public void removeArea(String id) { + plugin.getResidenceManager().removeChunkList(getName()); + areas.remove(id); + plugin.getResidenceManager().calculateChunks(getName()); + } + + public void removeArea(Player player, String id, boolean resadmin) { + if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { + if (!areas.containsKey(id)) { + plugin.msg(player, lm.Area_NonExist); + return; + } + if (areas.size() == 1 && !plugin.getConfigManager().allowEmptyResidences()) { + plugin.msg(player, lm.Area_RemoveLast); + return; + } + + ResidenceAreaDeleteEvent resevent = new ResidenceAreaDeleteEvent(player, this, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; + + removeArea(id); + if (player != null) + plugin.msg(player, lm.Area_Remove); + } else { + if (player != null) + plugin.msg(player, lm.General_NoPermission); + } + } + + public Map save() { + Map root = new HashMap<>(); + Map areamap = new HashMap<>(); + + root.put("CapitalizedName", resName); + if (mainRes) + root.put("MainResidence", mainRes); + if (createTime != 0L) + root.put("CreatedOn", createTime); + + if (enterMessage != null) + root.put("EnterMessage", enterMessage); + + if (leaveMessage != null) + root.put("LeaveMessage", leaveMessage); + + if (ShopDesc != null) + root.put("ShopDescription", ShopDesc); + if (bank.getStoredMoney() != 0) + root.put("StoredMoney", bank.getStoredMoney()); + if (BlockSellPrice != 0D) + root.put("BlockSellPrice", BlockSellPrice); + + if (!ChatPrefix.equals("")) + root.put("ChatPrefix", ChatPrefix); + if (!ChannelColor.name().equals(plugin.getConfigManager().getChatColor().name()) && !ChannelColor.name().equals("WHITE")) { + root.put("ChannelColor", ChannelColor.name()); + } + + Map map = blacklist.save(); + if (!map.isEmpty()) + root.put("BlackList", map); + map = ignorelist.save(); + if (!map.isEmpty()) + root.put("IgnoreList", map); + for (Entry entry : areas.entrySet()) { + areamap.put(entry.getKey(), entry.getValue().save()); + } + + root.put("Areas", areamap); + Map subzonemap = new HashMap<>(); + for (Entry sz : subzones.entrySet()) { + subzonemap.put(sz.getKey(), sz.getValue().save()); + } + if (!subzonemap.isEmpty()) + root.put("Subzones", subzonemap); + root.put("Permissions", perms.save()); + + if (!this.cmdBlackList.isEmpty()) + root.put("cmdBlackList", this.cmdBlackList); + if (!this.cmdWhiteList.isEmpty()) + root.put("cmdWhiteList", this.cmdWhiteList); + + if (tpLoc != null) { + Map tpmap = new HashMap<>(); + tpmap.put("X", convertDouble(tpLoc.getX())); + tpmap.put("Y", convertDouble(tpLoc.getY())); + tpmap.put("Z", convertDouble(tpLoc.getZ())); + tpmap.put("Pitch", convertDouble(tpLoc.getPitch())); + tpmap.put("Yaw", convertDouble(tpLoc.getYaw())); + root.put("TPLoc", tpmap); + } + return root; + } + + // Converting double with comman to dots format and striping to 2 numbers after dot + private static double convertDouble(double d) { + return convertDouble(String.valueOf(d)); + } + + private static double convertDouble(String dString) { + DecimalFormat formatter = new DecimalFormat("#0.00"); + formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); + dString = dString.replace(",", "."); + Double d = 0D; + try { + d = Double.valueOf(dString); + d = Double.valueOf(formatter.format(d)); + } catch (Exception e) { + } + return d; + } + + @SuppressWarnings("unchecked") + public static ClaimedResidence load(String worldName, Map root, ClaimedResidence parent, Residence plugin) throws Exception { + ClaimedResidence res = new ClaimedResidence(plugin); + if (root == null) + throw new Exception("Null residence!"); + + if (root.containsKey("CapitalizedName")) + res.resName = ((String) root.get("CapitalizedName")); + + if (root.containsKey("CreatedOn")) + res.createTime = ((Long) root.get("CreatedOn")); + else + res.createTime = System.currentTimeMillis(); + + if (root.containsKey("ShopDescription")) + res.setShopDesc((String) root.get("ShopDescription")); + + if (root.containsKey("StoredMoney")) + res.bank.setStoredMoney((Integer) root.get("StoredMoney")); + + if (root.containsKey("BlackList")) + res.blacklist = ResidenceItemList.load(plugin, res, (Map) root.get("BlackList")); + if (root.containsKey("IgnoreList")) + res.ignorelist = ResidenceItemList.load(plugin, res, (Map) root.get("IgnoreList")); + + Map areamap = (Map) root.get("Areas"); + + res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); + + if (res.getPermissions().getOwnerLastKnownName() == null) + return null; + + if (root.containsKey("MainResidence")) + res.mainRes = (Boolean) root.get("MainResidence"); + + if (root.containsKey("BlockSellPrice")) + res.BlockSellPrice = (Double) root.get("BlockSellPrice"); + else { + res.BlockSellPrice = 0D; + } + + World world = plugin.getServ().getWorld(res.perms.getWorld()); + if (world == null) + throw new Exception("Cant Find World: " + res.perms.getWorld()); + for (Entry map : areamap.entrySet()) { + res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); + } + + if (root.containsKey("Subzones")) { + Map subzonemap = (Map) root.get("Subzones"); + for (Entry map : subzonemap.entrySet()) { + ClaimedResidence subres = ClaimedResidence.load(worldName, (Map) map.getValue(), res, plugin); + + if (subres == null) + continue; + + if (subres.getResidenceName() == null) + subres.setName(map.getKey()); + + if (plugin.getConfigManager().flagsInherit()) + subres.getPermissions().setParent(res.getPermissions()); + + // Adding subzone owner into hies res list if parent zone owner is not same person + if (subres.getParent() != null && !subres.getOwnerUUID().equals(subres.getParent().getOwnerUUID())) + plugin.getPlayerManager().addResidence(subres.getOwner(), subres); + + res.subzones.put(map.getKey().toLowerCase(), subres); + } + } + + if (root.containsKey("EnterMessage")) + res.enterMessage = (String) root.get("EnterMessage"); + + if (root.containsKey("LeaveMessage")) + res.leaveMessage = (String) root.get("LeaveMessage"); + + res.parent = parent; + Map tploc = (Map) root.get("TPLoc"); + if (tploc != null) { + double pitch = 0.0; + double yaw = 0.0; + + if (tploc.containsKey("Yaw")) + yaw = convertDouble(tploc.get("Yaw").toString()); + + if (tploc.containsKey("Pitch")) + pitch = convertDouble(tploc.get("Pitch").toString()); + + res.tpLoc = new Location(world, convertDouble(tploc.get("X").toString()), convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z") + .toString())); + res.tpLoc.setPitch((float) pitch); + res.tpLoc.setYaw((float) yaw); + } + + if (root.containsKey("cmdBlackList")) + res.cmdBlackList = (List) root.get("cmdBlackList"); + if (root.containsKey("cmdWhiteList")) + res.cmdWhiteList = (List) root.get("cmdWhiteList"); + + if (root.containsKey("ChatPrefix")) + res.ChatPrefix = (String) root.get("ChatPrefix"); + + if (root.containsKey("ChannelColor")) + res.ChannelColor = ChatColor.valueOf((String) root.get("ChannelColor")); + else { + res.ChannelColor = plugin.getConfigManager().getChatColor(); + } + + return res; + } + + public int getAreaCount() { + return areas.size(); + } + + public boolean renameSubzone(String oldName, String newName) { + return this.renameSubzone(null, oldName, newName, true); + } + + public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { + if (!plugin.validName(newName)) { + plugin.msg(player, lm.Invalid_NameCharacters); + return false; + } + if (oldName == null) + return false; + if (newName == null) + return false; + String newN = newName; + oldName = oldName.toLowerCase(); + newName = newName.toLowerCase(); + + ClaimedResidence res = subzones.get(oldName); + if (res == null) { + if (player != null) + plugin.msg(player, lm.Invalid_Subzone); + return false; + } + if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + if (subzones.containsKey(newName)) { + if (player != null) + plugin.msg(player, lm.Subzone_Exists, newName); + return false; + } + res.setName(newN); + subzones.put(newName, res); + subzones.remove(oldName); + if (player != null) + plugin.msg(player, lm.Subzone_Rename, oldName, newName); + return true; + } + + public boolean renameArea(String oldName, String newName) { + return this.renameArea(null, oldName, newName, true); + } + + public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { + if (!plugin.validName(newName)) { + plugin.msg(player, lm.Invalid_NameCharacters); + return false; + } + if (player == null || perms.hasResidencePermission(player, true) || resadmin) { + if (areas.containsKey(newName)) { + if (player != null) + plugin.msg(player, lm.Area_Exists); + return false; + } + CuboidArea area = areas.get(oldName); + if (area == null) { + if (player != null) + plugin.msg(player, lm.Area_InvalidName); + return false; + } + areas.put(newName, area); + areas.remove(oldName); + if (player != null) + plugin.msg(player, lm.Area_Rename, oldName, newName); + return true; + } + plugin.msg(player, lm.General_NoPermission); + return false; + } + + public CuboidArea getArea(String name) { + return areas.get(name); + } + + public String getName() { + String name = this.resName; + if (this.getParent() != null) + name = this.getParent().getName() + "." + name; + if (name == null) + return "Unknown"; + return name; + } + + public void remove() { + String name = getName(); + if (name != null) { + plugin.getResidenceManager().removeResidence(name); + plugin.getResidenceManager().removeChunkList(name); + } + } + + public ResidenceBank getBank() { + return bank; + } + + public String getWorld() { + return perms.getWorld(); + } + + public ResidencePlayer getRPlayer() { + return plugin.getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); + } + + public PermissionGroup getOwnerGroup() { + return getRPlayer().getGroup(getPermissions().getWorld()); + } + + public String getOwner() { + return perms.getOwner(); + } + + public boolean isOwner(String name) { + Player player = Bukkit.getPlayer(name); + if (player != null) + return isOwner(player); + return perms.getOwner().equalsIgnoreCase(name); + } + + public boolean isOwner(Player p) { + if (plugin.getConfigManager().isOfflineMode()) + return perms.getOwner().equals(p.getName()); + return perms.getOwnerUUID().equals(p.getUniqueId()); + } + + public boolean isOwner(CommandSender sender) { + if (plugin.getConfigManager().isOfflineMode()) + return perms.getOwner().equals(sender.getName()); + if (sender instanceof Player) + return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); + return true; + } + + public void setChatPrefix(String ChatPrefix) { + this.ChatPrefix = ChatPrefix; + } + + public String getChatPrefix() { + return this.ChatPrefix == null ? "" : this.ChatPrefix; + } + + public void setChannelColor(ChatColor ChannelColor) { + this.ChannelColor = ChannelColor; + } + + public ChatChannel getChatChannel() { + return plugin.getChatManager().getChannel(this.getName()); + } + + public ChatColor getChannelColor() { + return ChannelColor; + } + + public UUID getOwnerUUID() { + return perms.getOwnerUUID(); + } + + public ResidenceItemList getItemBlacklist() { + return blacklist; + } + + public ResidenceItemList getItemIgnoreList() { + return ignorelist; + } + + public List getCmdBlackList() { + return this.cmdBlackList; + } + + public List getCmdWhiteList() { + return this.cmdWhiteList; + } + + public boolean addCmdBlackList(String cmd) { + if (cmd.contains("/")) + cmd = cmd.replace("/", ""); + if (!this.cmdBlackList.contains(cmd.toLowerCase())) { + this.cmdBlackList.add(cmd.toLowerCase()); + return true; + } + this.cmdBlackList.remove(cmd.toLowerCase()); + return false; + } + + public boolean addCmdWhiteList(String cmd) { + if (cmd.contains("/")) + cmd = cmd.replace("/", ""); + if (!this.cmdWhiteList.contains(cmd.toLowerCase())) { + this.cmdWhiteList.add(cmd.toLowerCase()); + return true; + } + this.cmdWhiteList.remove(cmd.toLowerCase()); + return false; + } + + public Double getBlockSellPrice() { + return BlockSellPrice; + } + + public ArrayList getPlayersInResidence() { + ArrayList within = new ArrayList<>(); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (this.containsLoc(player.getLocation())) { + within.add(player); + } + } + return within; + } + + public List GetShopVotes() { + return ShopVoteList; + } + + public void clearShopVotes() { + ShopVoteList.clear(); + } + + public void addShopVote(List ShopVotes) { + ShopVoteList.addAll(ShopVotes); + } + + public void addShopVote(ShopVote ShopVote) { + ShopVoteList.add(ShopVote); + } +} From f38444ed4547838158c656b3c57f32de623c9bfd Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 Feb 2017 10:57:44 +0200 Subject: [PATCH 0338/1142] Removing spoutCraft support --- .../bekvon/bukkit/residence/Residence.java | 67 ++---------- .../bekvon/bukkit/residence/commands/gui.java | 44 -------- .../residence/spout/ResidencePopup.java | 103 ------------------ .../residence/spout/ResidenceSpout.java | 102 ----------------- .../spout/ResidenceSpoutListener.java | 80 -------------- 5 files changed, 9 insertions(+), 387 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/commands/gui.java delete mode 100644 src/com/bekvon/bukkit/residence/spout/ResidencePopup.java delete mode 100644 src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java delete mode 100644 src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 305d95519..c09d49f24 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -42,26 +42,15 @@ import com.bekvon.bukkit.residence.containers.ABInterface; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.dynmap.DynMapListeners; import com.bekvon.bukkit.residence.dynmap.DynMapManager; -import com.bekvon.bukkit.residence.economy.BOSEAdapter; -import com.bekvon.bukkit.residence.economy.EconomyInterface; -import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter; -import com.bekvon.bukkit.residence.economy.IConomy5Adapter; -import com.bekvon.bukkit.residence.economy.IConomy6Adapter; -import com.bekvon.bukkit.residence.economy.RealShopEconomy; -import com.bekvon.bukkit.residence.economy.TransactionManager; +import com.bekvon.bukkit.residence.economy.*; import com.bekvon.bukkit.residence.economy.rent.RentManager; import com.bekvon.bukkit.residence.gui.FlagUtil; import com.bekvon.bukkit.residence.itemlist.WorldItemManager; -import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; -import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; -import com.bekvon.bukkit.residence.listeners.ResidenceFixesListener; -import com.bekvon.bukkit.residence.allNms.v1_10Events; -import com.bekvon.bukkit.residence.allNms.v1_8Events; -import com.bekvon.bukkit.residence.allNms.v1_9Events; +import com.bekvon.bukkit.residence.listeners.*; +import com.bekvon.bukkit.residence.allNms.*; import com.bekvon.bukkit.residence.api.ChatInterface; import com.bekvon.bukkit.residence.api.MarketBuyInterface; import com.bekvon.bukkit.residence.api.MarketRentInterface; @@ -72,36 +61,15 @@ import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.*; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.protection.LeaseManager; -import com.bekvon.bukkit.residence.protection.PermissionListManager; -import com.bekvon.bukkit.residence.protection.ResidenceManager; -import com.bekvon.bukkit.residence.protection.ResidencePermissions; -import com.bekvon.bukkit.residence.protection.PlayerManager; -import com.bekvon.bukkit.residence.protection.WorldFlagManager; -import com.bekvon.bukkit.residence.selection.AutoSelection; -import com.bekvon.bukkit.residence.selection.SchematicsManager; -import com.bekvon.bukkit.residence.selection.SelectionManager; -import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; -import com.bekvon.bukkit.residence.selection.WorldGuardUtil; +import com.bekvon.bukkit.residence.selection.*; import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; import com.bekvon.bukkit.residence.signsStuff.SignUtil; -import com.bekvon.bukkit.residence.spout.ResidenceSpout; -import com.bekvon.bukkit.residence.spout.ResidenceSpoutListener; import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.HelpEntry; -import com.bekvon.bukkit.residence.utils.ActionBar; -import com.bekvon.bukkit.residence.utils.CrackShot; -import com.bekvon.bukkit.residence.utils.FileCleanUp; -import com.bekvon.bukkit.residence.utils.RandomTp; -import com.bekvon.bukkit.residence.utils.RawMessage; -import com.bekvon.bukkit.residence.utils.Sorting; -import com.bekvon.bukkit.residence.utils.TabComplete; -import com.bekvon.bukkit.residence.utils.VersionChecker; -import com.bekvon.bukkit.residence.utils.YmlMaker; +import com.bekvon.bukkit.residence.utils.*; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; import com.bekvon.bukkit.residence.text.help.InformationPager; @@ -144,8 +112,6 @@ public class Residence extends JavaPlugin { protected ResidenceBlockListener blistener; protected ResidencePlayerListener plistener; protected ResidenceEntityListener elistener; - protected ResidenceSpoutListener slistener; - protected ResidenceSpout spout; protected ResidenceFixesListener flistener; @@ -698,13 +664,6 @@ public void run() { if (getVersionChecker().isHigherEquals(Version.v1_10_R1)) pm.registerEvents(new v1_10Events(), this); - // pm.registerEvent(Event.Type.WORLD_LOAD, wlistener, - // Priority.NORMAL, this); - if (cmanager.enableSpout()) { - slistener = new ResidenceSpoutListener(this); - pm.registerEvents(slistener, this); - spout = new ResidenceSpout(this); - } firstenable = false; } else { plistener.reload(); @@ -867,14 +826,6 @@ public ShopSignUtil getShopSignUtilManager() { return ShopSignUtilManager; } - public ResidenceSpout getSpout() { - return spout; - } - - public ResidenceSpoutListener getSpoutListener() { - return slistener; - } - public CommandFiller getCommandFiller() { if (cmdFiller == null) { cmdFiller = new CommandFiller(); @@ -1242,7 +1193,7 @@ protected boolean loadYml() throws Exception { } getResidenceManager().load(worlds); - + // Getting shop residences Map resList = rmanager.getResidences(); for (Entry one : resList.entrySet()) { @@ -1754,10 +1705,10 @@ public boolean hasPermission(CommandSender sender, String permision, Boolean out String outMsg = getLM().getMessage(lm.General_NoPermission); if (message != null) outMsg = message; - + RawMessage rm = new RawMessage(); rm.add(outMsg, "§2" + permision); - rm.show(sender); + rm.show(sender); ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); console.sendMessage(ChatColor.RED + sender.getName() + " No permission -> " + permision); } diff --git a/src/com/bekvon/bukkit/residence/commands/gui.java b/src/com/bekvon/bukkit/residence/commands/gui.java deleted file mode 100644 index 3f3be41d0..000000000 --- a/src/com/bekvon/bukkit/residence/commands/gui.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.getspout.spoutapi.SpoutManager; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class gui implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 4600) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (plugin.getSpoutListener() == null) - return true; - - if (args.length == 1) { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) - plugin.getSpout().showResidenceFlagGUI(SpoutManager.getPlayer(player), res.getName(), resadmin); - } else if (args.length == 2) { - plugin.getSpout().showResidenceFlagGUI(SpoutManager.getPlayer(player), args[1], resadmin); - } - - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Opens gui (Spout only)"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res gui ")); - } -} diff --git a/src/com/bekvon/bukkit/residence/spout/ResidencePopup.java b/src/com/bekvon/bukkit/residence/spout/ResidencePopup.java deleted file mode 100644 index dd0a7445b..000000000 --- a/src/com/bekvon/bukkit/residence/spout/ResidencePopup.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.bekvon.bukkit.residence.spout; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import org.bukkit.plugin.Plugin; -import org.getspout.spoutapi.gui.GenericPopup; -import org.getspout.spoutapi.gui.Screen; -import org.getspout.spoutapi.gui.Widget; - -public class ResidencePopup extends GenericPopup { - int xspacing; - int yspacing; - int xsize; - int ysize; - HashMap wigs = new HashMap(); - HashMap metaData = new HashMap(); - public String type; - - public enum PopupType { - GENERIC, FLAG_GUI, INFO_GUI - } - - public ResidencePopup(PopupType ptype) { - xspacing = 15; - yspacing = 5; - xsize = 70; - ysize = 15; - type = ptype.toString(); - } - - public HashMap getMetaData() { - return metaData; - } - - public void setPopupType(String t) { - type = t; - } - - public String getPopupType() { - return type; - } - - public Screen gridAttachWidget(Plugin plugin, Widget widget, int column, int row) { - return this.gridAttachWidget(null, plugin, widget, column, row); - } - - public Screen gridAttachWidget(String wID, Plugin plugin, Widget widget, int column, int row) { - widget.setX(xspacing + (column * xspacing) + (column * xsize)); - widget.setY(yspacing + (row * yspacing) + (row * ysize)); - widget.setWidth(xsize); - widget.setHeight(ysize); - if (wID != null) - wigs.put(wID, widget); - this.setDirty(true); - return super.attachWidget(plugin, widget); - } - - public Widget getWidget(String wID) { - return wigs.get(wID); - } - - public ArrayList getWidgetIDs() { - ArrayList ids = new ArrayList(); - for (String id : wigs.keySet()) { - ids.add(id); - } - return ids; - } - - @Override - public Screen removeWidget(Widget widget) { - wigs.values().remove(widget); - return super.removeWidget(widget); - } - - @Override - public Screen removeWidgets(Plugin p) { - Iterator it = wigs.values().iterator(); - while (it.hasNext()) { - Widget next = it.next(); - if (next.getPlugin() == p) - it.remove(); - } - return super.removeWidgets(p); - } - - public void setGridXSpacing(int xspace) { - xspacing = xspace; - } - - public void setGridYSpacing(int yspace) { - yspacing = yspace; - } - - public void setGridXSize(int xs) { - xsize = xs; - } - - public void setGridYSize(int ys) { - ysize = ys; - } -} diff --git a/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java b/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java deleted file mode 100644 index 8bb3938eb..000000000 --- a/src/com/bekvon/bukkit/residence/spout/ResidenceSpout.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - -package com.bekvon.bukkit.residence.spout; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.spout.ResidencePopup.PopupType; -import java.util.HashMap; -import org.bukkit.entity.Player; -import org.getspout.spoutapi.gui.Color; -import org.getspout.spoutapi.gui.GenericButton; -import org.getspout.spoutapi.gui.GenericLabel; -import org.getspout.spoutapi.gui.GenericTextField; -import org.getspout.spoutapi.gui.Widget; -import org.getspout.spoutapi.player.SpoutPlayer; - -public class ResidenceSpout { - protected static HashMap screens = new HashMap(); - Residence plugin; - - public ResidenceSpout(Residence plug) { - this.plugin = plug; - } - - public void showResidenceFlagGUI(SpoutPlayer player, String resname, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(resname); - if (res.getPermissions().hasResidencePermission(player, false)) { - - Color fieldcolor = new Color(0F, 0F, 0.3F, 1F); - Color textPrimaryColor = new Color(1F, 1F, 1F, 1F); - Color textSecondaryColor = new Color(1F, 1F, 0, 1F); - Color hoverColor = new Color(1F, 0, 0, 1F); - - ResidencePopup popup = new ResidencePopup(PopupType.FLAG_GUI); - - popup.getMetaData().put("admin", resadmin); - - popup.gridAttachWidget(plugin, new GenericLabel("Admin: ").setTextColor(textPrimaryColor), 3, 1); - popup.gridAttachWidget(plugin, new GenericLabel(Boolean.toString(resadmin)).setTextColor(textSecondaryColor), 4, 1); - popup.gridAttachWidget(plugin, new GenericLabel("Residence: ").setTextColor(textPrimaryColor), 0, 0); - popup.gridAttachWidget(plugin, new GenericLabel("Flag: ").setTextColor(textPrimaryColor), 0, 1); - popup.gridAttachWidget(plugin, new GenericLabel("Player: ").setTextColor(textPrimaryColor), 0, 2); - popup.gridAttachWidget(plugin, new GenericLabel("Group: ").setTextColor(textPrimaryColor), 0, 3); - popup.gridAttachWidget("ResidenceName", plugin, new GenericLabel(resname).setTextColor(textSecondaryColor), 1, 0); - popup.gridAttachWidget(plugin, new GenericLabel("Owner: ").setTextColor(textPrimaryColor), 0, 4); - popup.gridAttachWidget(plugin, new GenericLabel("World: ").setTextColor(textPrimaryColor), 0, 5); - popup.gridAttachWidget(plugin, new GenericLabel(res.getOwner()).setTextColor(textSecondaryColor), 1, 4); - popup.gridAttachWidget(plugin, new GenericLabel(res.getWorld()).setTextColor(textSecondaryColor), 1, 5); - - GenericTextField flag = new GenericTextField(); - flag.setTooltip("The name of the flag..."); - flag.setColor(textSecondaryColor); - flag.setFieldColor(fieldcolor); - popup.gridAttachWidget("FlagName", plugin, flag, 1, 1); - - GenericTextField playername = new GenericTextField(); - playername.setTooltip("The name of the player..."); - playername.setColor(textSecondaryColor); - playername.setFieldColor(fieldcolor); - popup.gridAttachWidget("PlayerName", plugin, playername, 1, 2); - - GenericTextField groupname = new GenericTextField(); - groupname.setTooltip("The name of the group..."); - groupname.setColor(textSecondaryColor); - groupname.setFieldColor(fieldcolor); - popup.gridAttachWidget("GroupName", plugin, groupname, 1, 3); - - GenericButton truebutton = new GenericButton("SetTrue"); - truebutton.setTooltip("Set the flag to true."); - truebutton.setColor(textSecondaryColor); - truebutton.setHoverColor(hoverColor); - popup.gridAttachWidget("TrueButton", plugin, truebutton, 2, 1); - - GenericButton falsebutton = new GenericButton("SetFalse"); - falsebutton.setTooltip("Set the flag to false."); - falsebutton.setColor(textSecondaryColor); - falsebutton.setHoverColor(hoverColor); - popup.gridAttachWidget("FalseButton", plugin, falsebutton, 2, 2); - - GenericButton removebutton = new GenericButton("Remove"); - removebutton.setTooltip("Remove the flag."); - removebutton.setColor(textSecondaryColor); - removebutton.setHoverColor(hoverColor); - popup.gridAttachWidget("RemoveButton", plugin, removebutton, 2, 3); - - GenericButton removeallbutton = new GenericButton("RemoveAll"); - removeallbutton.setTooltip("Remove all flags from the player or group..."); - removeallbutton.setColor(textSecondaryColor); - removeallbutton.setHoverColor(hoverColor); - popup.gridAttachWidget("RemoveAllButton", plugin, removeallbutton, 3, 3); - - screens.put(player, popup); - player.getMainScreen().attachPopupScreen(popup); - } else { - plugin.msg(player, lm.General_NoPermission); - } - } -} diff --git a/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java b/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java deleted file mode 100644 index ce47a5a8a..000000000 --- a/src/com/bekvon/bukkit/residence/spout/ResidenceSpoutListener.java +++ /dev/null @@ -1,80 +0,0 @@ - -package com.bekvon.bukkit.residence.spout; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.spout.ResidencePopup.PopupType; -import java.util.HashMap; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.getspout.spoutapi.event.screen.ButtonClickEvent; -import org.getspout.spoutapi.gui.Button; -import org.getspout.spoutapi.gui.GenericLabel; -import org.getspout.spoutapi.gui.GenericPopup; -import org.getspout.spoutapi.gui.GenericTextField; - -public class ResidenceSpoutListener implements Listener { - - protected HashMap popups; - private Residence plugin; - - public ResidenceSpoutListener(Residence residence) { - this.plugin = residence; - } - - @EventHandler(priority = EventPriority.NORMAL) - public void onButtonClick(ButtonClickEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player p = event.getPlayer(); - if (event.getScreen() instanceof ResidencePopup) { - ResidencePopup screen = (ResidencePopup) event.getScreen(); - PopupType type = PopupType.valueOf(screen.getPopupType()); - if (type == PopupType.FLAG_GUI) { - ResidencePopup popup = screen; - String flagval = null; - String flag = null; - String player = null; - ClaimedResidence res = null; - String group = null; - boolean resadmin = (Boolean) popup.getMetaData().get("admin"); - Button button = event.getButton(); - if (button.getText().equalsIgnoreCase("Close")) { - event.getPlayer().getMainScreen().removeWidget(screen); - return; - } else if (button.getText().equalsIgnoreCase("RemoveAll")) { - flagval = "removeall"; - } else if (button.getText().equalsIgnoreCase("SetTrue")) { - flagval = "true"; - } else if (button.getText().equalsIgnoreCase("SetFalse")) { - flagval = "false"; - } else if (button.getText().equalsIgnoreCase("Remove")) { - flagval = "remove"; - } - player = ((GenericTextField) popup.getWidget("PlayerName")).getText(); - group = ((GenericTextField) popup.getWidget("GroupName")).getText(); - flag = ((GenericTextField) popup.getWidget("FlagName")).getText(); - res = plugin.getResidenceManager().getByName(((GenericLabel) popup.getWidget("ResidenceName")).getText()); - if (res == null || flagval == null || flagval.equalsIgnoreCase("") || ((flag == null || flag.equalsIgnoreCase("")) && !flagval.equalsIgnoreCase( - "removeall"))) - return; - if ((player == null || player.equalsIgnoreCase("")) && (group == null || group.equalsIgnoreCase(""))) { - res.getPermissions().setFlag(p, flag, flagval, resadmin); - } else if (group != null && !group.equalsIgnoreCase("")) { - if (flagval.equalsIgnoreCase("removeall")) - res.getPermissions().removeAllGroupFlags(p, group, resadmin); - else - res.getPermissions().setGroupFlag(p, group, flag, flagval, resadmin); - } else if (player != null && !player.equalsIgnoreCase("")) { - if (flagval.equalsIgnoreCase("removeall")) - res.getPermissions().removeAllPlayerFlags(p, player, resadmin); - else - res.getPermissions().setPlayerFlag(p, player, flag, flagval, resadmin, true); - } - } - } - } -} From ebb82bbf94c3facab3b1ee17f4101becace2bc57 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 Feb 2017 13:48:22 +0200 Subject: [PATCH 0339/1142] Better approach for players group determination Some cleanup for deprecated methods --- .../bekvon/bukkit/residence/allNms/v1_10.java | 28 +- .../bekvon/bukkit/residence/allNms/v1_11.java | 60 +- .../bekvon/bukkit/residence/allNms/v1_7.java | 3 +- .../residence/allNms/v1_7_Couldron.java | 3 +- .../bekvon/bukkit/residence/allNms/v1_8.java | 27 +- .../bukkit/residence/allNms/v1_8Events.java | 3 +- .../bekvon/bukkit/residence/allNms/v1_9.java | 29 +- .../api/ResidencePlayerInterface.java | 51 +- .../bukkit/residence/commands/check.java | 6 +- .../bukkit/residence/commands/limits.java | 4 +- .../bukkit/residence/commands/remove.java | 10 +- .../bukkit/residence/containers/NMS.java | 92 +- .../residence/containers/PlayerGroup.java | 43 +- .../residence/containers/ResidencePlayer.java | 33 +- .../residence/containers/Visualizer.java | 375 ++- .../residence/economy/ResidenceBank.java | 168 +- .../residence/economy/TransactionManager.java | 807 +++--- .../residence/itemlist/WorldItemManager.java | 125 +- .../listeners/ResidenceBlockListener.java | 20 +- .../listeners/ResidenceEntityListener.java | 16 +- .../listeners/ResidencePlayerListener.java | 63 +- .../permissions/PermissionGroup.java | 6 + .../permissions/PermissionManager.java | 404 ++- .../protection/ClaimedResidence.java | 1 - .../residence/protection/FlagPermissions.java | 2217 ++++++++-------- .../residence/protection/PlayerManager.java | 80 +- .../protection/ResidenceManager.java | 2310 ++++++++--------- .../protection/ResidencePermissions.java | 1302 +++++----- .../protection/WorldFlagManager.java | 286 +- .../residence/text/help/InformationPager.java | 518 ++-- src/com/residence/zip/ZipLibrary.java | 303 ++- 31 files changed, 4746 insertions(+), 4647 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10.java b/src/com/bekvon/bukkit/residence/allNms/v1_10.java index d3c1b0128..72c4eec8e 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10.java @@ -130,22 +130,22 @@ public boolean isSpectator(GameMode mode) { } @Override - public void addDefaultFlags(Map matUseFlagList) { + public void addDefaultFlags(Map matUseFlagList) { /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door.getName()); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door.getName()); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door.getName()); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door.getName()); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door.getName()); - - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode.getName()); + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + + matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode); } @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11.java b/src/com/bekvon/bukkit/residence/allNms/v1_11.java index bb8223f85..0807be617 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11.java @@ -132,41 +132,41 @@ public boolean isSpectator(GameMode mode) { } @Override - public void addDefaultFlags(Map matUseFlagList) { + public void addDefaultFlags(Map matUseFlagList) { /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door.getName()); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door.getName()); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door.getName()); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door.getName()); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door.getName()); + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door.getName()); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door.getName()); - - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode.getName()); + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + + matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode); /* 1.11 Shulker Box */ - matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.BLUE_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.BROWN_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.CYAN_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.GRAY_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.GREEN_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.LIGHT_BLUE_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.LIME_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.MAGENTA_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.ORANGE_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.SILVER_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container.getName()); - matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container.getName()); + matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.BLUE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.BROWN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.CYAN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.GRAY_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.GREEN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.LIGHT_BLUE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.LIME_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.MAGENTA_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.ORANGE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.SILVER_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); } @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7.java index d7b631063..333cd3ab1 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7.java @@ -28,6 +28,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; public class v1_7 implements NMS { @@ -101,7 +102,7 @@ public boolean isSpectator(GameMode mode) { } @Override - public void addDefaultFlags(Map matUseFlagList) { + public void addDefaultFlags(Map matUseFlagList) { } @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 4fc1f6e27..b818e81e8 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -28,6 +28,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; public class v1_7_Couldron implements NMS { @@ -101,7 +102,7 @@ public boolean isSpectator(GameMode mode) { } @Override - public void addDefaultFlags(Map matUseFlagList) { + public void addDefaultFlags(Map matUseFlagList) { } @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java index 4032dc09c..44c586493 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8.java @@ -30,6 +30,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; public class v1_8 implements NMS { @@ -116,22 +117,22 @@ public boolean isSpectator(GameMode mode) { } @Override - public void addDefaultFlags(Map matUseFlagList) { + public void addDefaultFlags(Map matUseFlagList) { /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, "door"); - matUseFlagList.put(Material.BIRCH_DOOR, "door"); - matUseFlagList.put(Material.JUNGLE_DOOR, "door"); - matUseFlagList.put(Material.ACACIA_DOOR, "door"); - matUseFlagList.put(Material.DARK_OAK_DOOR, "door"); + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, "door"); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, "door"); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, "door"); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, "door"); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, "door"); - matUseFlagList.put(Material.IRON_TRAPDOOR, "door"); + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); /* 1.8 day light sensor */ - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, "diode"); + matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode); } @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java index a8ba21886..62f1b300d 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java @@ -30,9 +30,8 @@ public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { return; FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); - String world = player.getWorld().getName(); - if (!perms.playerHas(player.getName(), world, Flags.container, perms.playerHas(player.getName(), world, Flags.use, true))) { + if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { event.setCancelled(true); Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container.getName()); } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9.java b/src/com/bekvon/bukkit/residence/allNms/v1_9.java index b0cd171fc..1d63636d1 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9.java @@ -31,6 +31,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; public class v1_9 implements NMS { @@ -117,22 +118,22 @@ public boolean isSpectator(GameMode mode) { } @Override - public void addDefaultFlags(Map matUseFlagList) { + public void addDefaultFlags(Map matUseFlagList) { /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, "door"); - matUseFlagList.put(Material.BIRCH_DOOR, "door"); - matUseFlagList.put(Material.JUNGLE_DOOR, "door"); - matUseFlagList.put(Material.ACACIA_DOOR, "door"); - matUseFlagList.put(Material.DARK_OAK_DOOR, "door"); + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, "door"); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, "door"); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, "door"); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, "door"); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, "door"); - matUseFlagList.put(Material.IRON_TRAPDOOR, "door"); - - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, "diode"); + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + + matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode); } @Override diff --git a/src/com/bekvon/bukkit/residence/api/ResidencePlayerInterface.java b/src/com/bekvon/bukkit/residence/api/ResidencePlayerInterface.java index d90d129b7..268de9c5a 100644 --- a/src/com/bekvon/bukkit/residence/api/ResidencePlayerInterface.java +++ b/src/com/bekvon/bukkit/residence/api/ResidencePlayerInterface.java @@ -1,24 +1,27 @@ -package com.bekvon.bukkit.residence.api; - -import java.util.ArrayList; - -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; - -public interface ResidencePlayerInterface { - public ArrayList getResidenceList(String player); - - public ArrayList getResidenceList(String player, boolean showhidden); - - public PermissionGroup getGroup(String player); - - public int getMaxResidences(String player); - - public int getMaxSubzones(String player); - - public int getMaxRents(String player); - - public ResidencePlayer getResidencePlayer(String player); - - public int getMaxSubzoneDepth(String player); -} +package com.bekvon.bukkit.residence.api; + +import java.util.ArrayList; +import java.util.UUID; + +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; + +public interface ResidencePlayerInterface { + public ArrayList getResidenceList(String player); + + public ArrayList getResidenceList(String player, boolean showhidden); + + public PermissionGroup getGroup(String player); + + public int getMaxResidences(String player); + + public int getMaxSubzones(String player); + + public int getMaxRents(String player); + + public ResidencePlayer getResidencePlayer(String player); + + public int getMaxSubzoneDepth(String player); + + ArrayList getResidenceList(UUID uuid); +} diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index 9167a6b5c..bb681afca 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -37,8 +37,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { plugin.msg(player, lm.Flag_CheckFalse, args[2], pname, args[1]); } else { - plugin.msg(player, lm.Flag_CheckTrue, args[2], pname, args[1], (res.getPermissions().playerHas(pname, res.getPermissions() - .getWorld(), args[2], false) ? plugin.msg(lm.General_True) : plugin.msg(lm.General_False))); + plugin.msg(player, lm.Flag_CheckTrue, args[2], pname, args[1], (res.getPermissions().playerHas(player.getName(), res.getPermissions().getWorld(), args[2], false) ? plugin.msg(lm.General_True) + : plugin.msg(lm.General_False))); } return true; } @@ -47,6 +47,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Check flag state for you"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res check [residence] [flag] (playername)")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[flag]" ,"[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[flag]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 08d928d7d..bb2d1de65 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -33,8 +33,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman target = plugin.getOfflinePlayer(tempArgs[1]); if (target == null) return false; - plugin.getPermissionManager().updateGroupNameForPlayer(target.getName(), target.isOnline() ? target.getPlayer().getLocation().getWorld().getName() : plugin - .getConfigManager().getDefaultWorld(), true); +// plugin.getPermissionManager().updateGroupNameForPlayer(target.getName(), target.isOnline() ? target.getPlayer().getLocation().getWorld().getName() : plugin +// .getConfigManager().getDefaultWorld(), true); ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(target.getName(), true); rPlayer.getGroup().printLimits(sender, target, rsadm); diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index ef3464750..6ff4461a9 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -35,15 +35,19 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (res.isSubzone() && !resadmin && !plugin.hasPermission(sender, "residence.delete.subzone", lm.Subzone_CantDelete)) { + if (res.isSubzone() && !resadmin && !plugin.hasPermission(sender, "residence.delete.subzone", lm.Subzone_CantDelete)) { return true; } - if (res.isSubzone() && + Player player = null; + if (sender instanceof Player) + player = (Player) sender; + + if (player != null && res.isSubzone() && !resadmin && plugin.getConfigManager().isPreventSubZoneRemoval() && !res.getParent().isOwner(sender) && - !res.getPermissions().playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue) && + !res.getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue) && plugin.hasPermission(sender, "residence.delete.subzone", lm.Subzone_CantDeleteNotOwnerOfParent)) { return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/NMS.java b/src/com/bekvon/bukkit/residence/containers/NMS.java index 477c79612..ca195b1ef 100644 --- a/src/com/bekvon/bukkit/residence/containers/NMS.java +++ b/src/com/bekvon/bukkit/residence/containers/NMS.java @@ -1,46 +1,46 @@ -package com.bekvon.bukkit.residence.containers; - -import java.util.List; -import java.util.Map; - -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; - -public interface NMS { - - public List getPistonRetractBlocks(BlockPistonRetractEvent event); - - public boolean isAnimal(Entity ent); - - public boolean isArmorStandEntity(EntityType entityType); - - public boolean isArmorStandMaterial(Material material); - - public boolean isCanUseEntity_BothClick(Material mat, Block block); - - public boolean isEmptyBlock(Block block); - - public boolean isSpectator(GameMode mode); - - public void addDefaultFlags(Map matUseFlagList); - - public boolean isPlate(Material mat); - - public boolean isMainHand(PlayerInteractEvent event); - - public Block getTargetBlock(Player player, int range); - - public ItemStack itemInMainHand(Player player); - - public boolean isChorusTeleport(TeleportCause tpcause); - - public boolean isBoat(Material mat); -} +package com.bekvon.bukkit.residence.containers; + +import java.util.List; +import java.util.Map; + +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; + +public interface NMS { + + public List getPistonRetractBlocks(BlockPistonRetractEvent event); + + public boolean isAnimal(Entity ent); + + public boolean isArmorStandEntity(EntityType entityType); + + public boolean isArmorStandMaterial(Material material); + + public boolean isCanUseEntity_BothClick(Material mat, Block block); + + public boolean isEmptyBlock(Block block); + + public boolean isSpectator(GameMode mode); + + public void addDefaultFlags(Map matuseflaglist); + + public boolean isPlate(Material mat); + + public boolean isMainHand(PlayerInteractEvent event); + + public Block getTargetBlock(Player player, int range); + + public ItemStack itemInMainHand(Player player); + + public boolean isChorusTeleport(TeleportCause tpcause); + + public boolean isBoat(Material mat); +} diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index dc8a0e170..05b27ff13 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -5,7 +5,6 @@ import java.util.List; import java.util.Map.Entry; -import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; @@ -14,30 +13,26 @@ public class PlayerGroup { - String playerName = null; - Player player = null; + ResidencePlayer resPlayer; long lastCheck = 0L; - HashMap groups = new HashMap(); + HashMap groups = new HashMap(); - public PlayerGroup(String playerName) { - this.playerName = playerName; - this.player = Bukkit.getPlayer(playerName); - } - - public PlayerGroup(Player player) { - this.playerName = player.getName(); - this.player = player; + public PlayerGroup(ResidencePlayer resPlayer) { + this.resPlayer = resPlayer; + Player player = resPlayer.getPlayer(); + if (player != null) + updateGroup(player.getWorld().getName(), true); } public void setLastCkeck(Long time) { this.lastCheck = time; } - public void addGroup(String world, String group) { + public void addGroup(String world, PermissionGroup group) { groups.put(world, group); } - public String getGroup(String world) { + public PermissionGroup getGroup(String world) { updateGroup(world, false); return this.groups.get(world); } @@ -49,21 +44,21 @@ public void updateGroup(String world, boolean force) { this.lastCheck = System.currentTimeMillis(); List posibleGroups = new ArrayList(); String group; - if (Residence.getInstance().getPermissionManager().getPlayersGroups().containsKey(playerName.toLowerCase())) { - group = Residence.getInstance().getPermissionManager().getPlayersGroups().get(playerName.toLowerCase()); + if (Residence.getInstance().getPermissionManager().getPlayersGroups().containsKey(resPlayer.getPlayerName().toLowerCase())) { + group = Residence.getInstance().getPermissionManager().getPlayersGroups().get(resPlayer.getPlayerName().toLowerCase()); if (group != null) { group = group.toLowerCase(); if (group != null && Residence.getInstance().getPermissionManager().getGroups().containsKey(group)) { PermissionGroup g = Residence.getInstance().getPermissionManager().getGroups().get(group); posibleGroups.add(g); - this.groups.put(world, group); + this.groups.put(world, g); } } } posibleGroups.add(getPermissionGroup()); - group = Residence.getInstance().getPermissionManager().getPermissionsGroup(playerName, world); + group = Residence.getInstance().getPermissionManager().getPermissionsGroup(resPlayer.getPlayerName(), world); PermissionGroup g = Residence.getInstance().getPermissionManager().getGroupByName(group); @@ -85,22 +80,22 @@ public void updateGroup(String world, boolean force) { } if (finalGroup == null || !Residence.getInstance().getPermissionManager().getGroups().containsValue(finalGroup)) { - this.groups.put(world, Residence.getInstance().getConfigManager().getDefaultGroup().toLowerCase()); + this.groups.put(world, Residence.getInstance().getPermissionManager().getGroupByName(Residence.getInstance().getConfigManager().getDefaultGroup())); } else { - this.groups.put(world, finalGroup.getGroupName()); + this.groups.put(world, finalGroup); } } private PermissionGroup getPermissionGroup() { - if (this.player == null) - this.player = Bukkit.getPlayer(playerName); + Player player = resPlayer.getPlayer(); PermissionGroup group = Residence.getInstance().getPermissionManager().getGroupByName(Residence.getInstance().getConfigManager().getDefaultGroup()); for (Entry one : Residence.getInstance().getPermissionManager().getGroups().entrySet()) { if (player != null) { - if (this.player.hasPermission("residence.group." + one.getKey())) + if (player.hasPermission("residence.group." + one.getKey())) { group = one.getValue(); + } } else { - OfflinePlayer offlineP = Residence.getInstance().getOfflinePlayer(playerName); + OfflinePlayer offlineP = Residence.getInstance().getOfflinePlayer(resPlayer.getPlayerName()); if (offlineP != null) if (ResidenceVaultAdapter.hasPermission(offlineP, "residence.group." + one.getKey(), Residence.getInstance().getConfigManager().getDefaultWorld())) group = one.getValue(); diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index b101c8fb6..20b888df1 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -26,7 +26,7 @@ public class ResidencePlayer { private Map ResidenceList = new HashMap(); private ClaimedResidence mainResidence = null; - private PermissionGroup group = null; + private PlayerGroup groups = null; private int maxRes = -1; private int maxRents = -1; @@ -96,8 +96,8 @@ public void RecalculatePermissions() { } public void recountMaxRes() { - if (this.group != null) - this.maxRes = this.group.getMaxZones(); + if (this.getGroup() != null) + this.maxRes = this.getGroup().getMaxZones(); for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxResCount(); i++) { if (player != null && player.isOnline()) { if (this.player.hasPermission("residence.max.res." + i)) @@ -176,8 +176,6 @@ public int getMaxSubzoneDepth() { } public int getMaxRes() { - Residence.getInstance().getPermissionManager().updateGroupNameForPlayer(this.userName, this.player != null && this.player.isOnline() ? this.player.getPlayer().getLocation() - .getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), true); recountMaxRes(); PermissionGroup g = getGroup(); if (this.maxRes < g.getMaxZones()) { @@ -187,13 +185,16 @@ public int getMaxRes() { } public PermissionGroup getGroup() { + updatePlayer(); return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld()); } public PermissionGroup getGroup(String world) { - String gp = Residence.getInstance().getPermissionManager().getGroupNameByPlayer(this.userName, world); - this.group = Residence.getInstance().getPermissionManager().getGroupByName(gp); - return this.group; + if (groups == null) + groups = new PlayerGroup(this); + groups.updateGroup(world, false); + PermissionGroup group = groups.getGroup(world); + return group; } public ResidencePlayer updatePlayer(Player player) { @@ -205,6 +206,9 @@ public ResidencePlayer updatePlayer(Player player) { } private void updatePlayer() { + player = Bukkit.getPlayer(this.uuid); + if (player != null) + updatePlayer(player); if (player != null && player.isOnline()) return; if (this.uuid != null && Bukkit.getPlayer(this.uuid) != null) { @@ -274,4 +278,17 @@ public Map getResidenceMap() { return this.ResidenceList; } + public String getPlayerName() { + this.updatePlayer(); + return userName; + } + + public UUID getUuid() { + return uuid; + } + + public Player getPlayer() { + this.updatePlayer(); + return player; + } } diff --git a/src/com/bekvon/bukkit/residence/containers/Visualizer.java b/src/com/bekvon/bukkit/residence/containers/Visualizer.java index ba55b9753..bb7ab78e9 100644 --- a/src/com/bekvon/bukkit/residence/containers/Visualizer.java +++ b/src/com/bekvon/bukkit/residence/containers/Visualizer.java @@ -1,188 +1,187 @@ -package com.bekvon.bukkit.residence.containers; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; - -public class Visualizer { - private Player player; - private long start; - private List areas = new ArrayList(); - private List errorAreas = new ArrayList(); - private int id = -1; - private int errorId = -1; - private boolean once = false; - private int starting = 0; - - private List locations = new ArrayList(); - private List errorLocations = new ArrayList(); - private List locations2 = new ArrayList(); - private List errorLocations2 = new ArrayList(); - private Location loc = null; - - public Visualizer(Player player) { - this.player = player; - this.start = System.currentTimeMillis(); - } - - public void cancelAll() { - if (id != -1) { - Bukkit.getScheduler().cancelTask(id); - } - if (errorId != -1) { - Bukkit.getScheduler().cancelTask(errorId); - } - } - - public boolean isSameLoc() { - if (loc == null) - return false; - if (loc.getWorld() != player.getWorld()) - return false; - if (!errorAreas.isEmpty() && errorLocations.isEmpty()) - return false; - if (loc.distance(player.getLocation()) > 1) - return false; - - return true; - } - - public long getStart() { - return start; - } - - public void setStart(long start) { - this.start = start; - } - - public Player getPlayer() { - return player; - } - - public void setPlayer(Player player) { - this.player = player; - } - - public List getAreas() { - return areas; - } - - public void setAreas(ClaimedResidence res) { - if (res != null) - this.areas = Arrays.asList(res.getAreaArray()); - } - - public void setAreas(CuboidArea[] areas) { - this.areas = Arrays.asList(areas); - } - - public void setAreas(ArrayList areas) { - this.areas = areas; - } - - public void setAreas(CuboidArea area) { - areas = new ArrayList(); - this.areas.add(area); - } - - public List getErrorAreas() { - return errorAreas; - } - - public void setErrorAreas(ClaimedResidence res) { - if (res != null) - this.errorAreas = Arrays.asList(res.getAreaArray()); - } - - public void setErrorAreas(CuboidArea[] errorAreas) { - this.errorAreas = Arrays.asList(errorAreas); - } - - public void setErrorAreas(ArrayList errorAreas) { - this.errorAreas = errorAreas; - } - - public void setErrorAreas(CuboidArea errorArea) { - this.errorAreas.add(errorArea); - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public int getErrorId() { - return errorId; - } - - public void setErrorId(int errorId) { - this.errorId = errorId; - } - - public boolean isOnce() { - return once; - } - - public void setOnce(boolean once) { - this.once = once; - } - - public List getLocations() { - return locations; - } - - public void setLocations(List locations) { - this.locations = locations; - } - - public List getLocations2() { - return locations2; - } - - public void setLocations2(List locations) { - this.locations2 = locations; - } - - public List getErrorLocations() { - return errorLocations; - } - - public void setErrorLocations(List errorLocations) { - this.errorLocations = errorLocations; - } - - public List getErrorLocations2() { - return errorLocations2; - } - - public void setErrorLocations2(List errorLocations) { - this.errorLocations2 = errorLocations; - } - - public Location getLoc() { - return loc; - } - - public void setLoc(Location loc) { - this.loc = loc; - } - - public int getStarting() { - return starting; - } - - public void setStarting(int starting) { - this.starting = starting; - } -} +package com.bekvon.bukkit.residence.containers; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; + +public class Visualizer { + private Player player; + private long start; + private List areas = new ArrayList(); + private List errorAreas = new ArrayList(); + private int id = -1; + private int errorId = -1; + private boolean once = false; + private int starting = 0; + + private List locations = new ArrayList(); + private List errorLocations = new ArrayList(); + private List locations2 = new ArrayList(); + private List errorLocations2 = new ArrayList(); + private Location loc = null; + + public Visualizer(Player player) { + this.player = player; + this.start = System.currentTimeMillis(); + } + + public void cancelAll() { + if (id != -1) { + Bukkit.getScheduler().cancelTask(id); + } + if (errorId != -1) { + Bukkit.getScheduler().cancelTask(errorId); + } + } + + public boolean isSameLoc() { + if (loc == null) + return false; + if (loc.getWorld() != player.getWorld()) + return false; + if (!errorAreas.isEmpty() && errorLocations.isEmpty()) + return false; + if (loc.distance(player.getLocation()) > 1) + return false; + + return true; + } + + public long getStart() { + return start; + } + + public void setStart(long start) { + this.start = start; + } + + public Player getPlayer() { + return player; + } + + public void setPlayer(Player player) { + this.player = player; + } + + public List getAreas() { + return areas; + } + + public void setAreas(ClaimedResidence res) { + if (res != null) + this.areas = Arrays.asList(res.getAreaArray()); + } + + public void setAreas(CuboidArea[] areas) { + this.areas = Arrays.asList(areas); + } + + public void setAreas(ArrayList areas) { + this.areas = areas; + } + + public void setAreas(CuboidArea area) { + areas = new ArrayList(); + this.areas.add(area); + } + + public List getErrorAreas() { + return errorAreas; + } + + public void setErrorAreas(ClaimedResidence res) { + if (res != null) + this.errorAreas = Arrays.asList(res.getAreaArray()); + } + + public void setErrorAreas(CuboidArea[] errorAreas) { + this.errorAreas = Arrays.asList(errorAreas); + } + + public void setErrorAreas(ArrayList errorAreas) { + this.errorAreas = errorAreas; + } + + public void setErrorAreas(CuboidArea errorArea) { + this.errorAreas.add(errorArea); + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getErrorId() { + return errorId; + } + + public void setErrorId(int errorId) { + this.errorId = errorId; + } + + public boolean isOnce() { + return once; + } + + public void setOnce(boolean once) { + this.once = once; + } + + public List getLocations() { + return locations; + } + + public void setLocations(List locations) { + this.locations = locations; + } + + public List getLocations2() { + return locations2; + } + + public void setLocations2(List locations) { + this.locations2 = locations; + } + + public List getErrorLocations() { + return errorLocations; + } + + public void setErrorLocations(List errorLocations) { + this.errorLocations = errorLocations; + } + + public List getErrorLocations2() { + return errorLocations2; + } + + public void setErrorLocations2(List errorLocations) { + this.errorLocations2 = errorLocations; + } + + public Location getLoc() { + return loc; + } + + public void setLoc(Location loc) { + this.loc = loc; + } + + public int getStarting() { + return starting; + } + + public void setStarting(int starting) { + this.starting = starting; + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index 69309746c..3232fda92 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -1,81 +1,87 @@ -package com.bekvon.bukkit.residence.economy; - -import org.bukkit.command.CommandSender; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; - -import org.bukkit.entity.Player; - -public class ResidenceBank { - int storedMoney; - ClaimedResidence res; - - public ResidenceBank(ClaimedResidence parent) { - storedMoney = 0; - res = parent; - } - - public int getStoredMoney() { - return storedMoney; - } - - public void setStoredMoney(int amount) { - storedMoney = amount; - } - - public void add(int amount) { - storedMoney = storedMoney + amount; - } - - public boolean hasEnough(int amount) { - if (storedMoney >= amount) - return true; - return false; - } - - public void subtract(int amount) { - storedMoney = storedMoney - amount; - if (storedMoney < 0) - storedMoney = 0; - } - - public void withdraw(CommandSender sender, int amount, boolean resadmin) { - if (!Residence.getInstance().getConfigManager().enableEconomy()) { - Residence.getInstance().msg(sender, lm.Economy_MarketDisabled); - } - if (!resadmin && !res.getPermissions().playerHas(sender.getName(), Flags.bank, FlagCombo.OnlyTrue)) { - Residence.getInstance().msg(sender, lm.Bank_NoAccess); - return; - } - if (!hasEnough(amount)) { - Residence.getInstance().msg(sender, lm.Bank_NoMoney); - return; - } - if (sender instanceof Player && Residence.getInstance().getEconomyManager().add(sender.getName(), amount) || !(sender instanceof Player)) { - this.subtract(amount); - Residence.getInstance().msg(sender, lm.Bank_Withdraw, String.format("%d", amount)); - } - } - - public void deposit(CommandSender sender, int amount, boolean resadmin) { - if (!Residence.getInstance().getConfigManager().enableEconomy()) { - Residence.getInstance().msg(sender, lm.Economy_MarketDisabled); - } - if (!resadmin && !res.getPermissions().playerHas(sender.getName(), Flags.bank, FlagCombo.OnlyTrue)) { - Residence.getInstance().msg(sender, lm.Bank_NoAccess); - return; - } - if (sender instanceof Player && !Residence.getInstance().getEconomyManager().canAfford(sender.getName(), amount)) { - Residence.getInstance().msg(sender, lm.Economy_NotEnoughMoney); - return; - } - if (sender instanceof Player && Residence.getInstance().getEconomyManager().subtract(sender.getName(), amount) || !(sender instanceof Player)) { - this.add(amount); - Residence.getInstance().msg(sender, lm.Bank_Deposit, String.format("%d", amount)); - } - } -} +package com.bekvon.bukkit.residence.economy; + +import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + +import org.bukkit.entity.Player; + +public class ResidenceBank { + int storedMoney; + ClaimedResidence res; + + public ResidenceBank(ClaimedResidence parent) { + storedMoney = 0; + res = parent; + } + + public int getStoredMoney() { + return storedMoney; + } + + public void setStoredMoney(int amount) { + storedMoney = amount; + } + + public void add(int amount) { + storedMoney = storedMoney + amount; + } + + public boolean hasEnough(int amount) { + if (storedMoney >= amount) + return true; + return false; + } + + public void subtract(int amount) { + storedMoney = storedMoney - amount; + if (storedMoney < 0) + storedMoney = 0; + } + + public void withdraw(CommandSender sender, int amount, boolean resadmin) { + if (!(sender instanceof Player)) + return; + Player player = (Player) sender; + if (!Residence.getInstance().getConfigManager().enableEconomy()) { + Residence.getInstance().msg(sender, lm.Economy_MarketDisabled); + } + if (!resadmin && !res.getPermissions().playerHas(player, Flags.bank, FlagCombo.OnlyTrue)) { + Residence.getInstance().msg(sender, lm.Bank_NoAccess); + return; + } + if (!hasEnough(amount)) { + Residence.getInstance().msg(sender, lm.Bank_NoMoney); + return; + } + if (sender instanceof Player && Residence.getInstance().getEconomyManager().add(sender.getName(), amount) || !(sender instanceof Player)) { + this.subtract(amount); + Residence.getInstance().msg(sender, lm.Bank_Withdraw, String.format("%d", amount)); + } + } + + public void deposit(CommandSender sender, int amount, boolean resadmin) { + if (!(sender instanceof Player)) + return; + Player player = (Player) sender; + if (!Residence.getInstance().getConfigManager().enableEconomy()) { + Residence.getInstance().msg(sender, lm.Economy_MarketDisabled); + } + if (!resadmin && !res.getPermissions().playerHas(player, Flags.bank, FlagCombo.OnlyTrue)) { + Residence.getInstance().msg(sender, lm.Bank_NoAccess); + return; + } + if (sender instanceof Player && !Residence.getInstance().getEconomyManager().canAfford(sender.getName(), amount)) { + Residence.getInstance().msg(sender, lm.Economy_NotEnoughMoney); + return; + } + if (sender instanceof Player && Residence.getInstance().getEconomyManager().subtract(sender.getName(), amount) || !(sender instanceof Player)) { + this.add(amount); + Residence.getInstance().msg(sender, lm.Bank_Deposit, String.format("%d", amount)); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 05694fa33..b3a8323c2 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -1,404 +1,403 @@ -package com.bekvon.bukkit.residence.economy; - -import org.bukkit.ChatColor; - -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.RawMessage; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.api.MarketBuyInterface; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.Visualizer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import org.bukkit.Server; -import org.bukkit.entity.Player; - -public class TransactionManager implements MarketBuyInterface { - private Set sellAmount; - private Residence plugin; - - public TransactionManager(Residence plugin) { - this.plugin = plugin; - sellAmount = new HashSet(); - } - - public boolean chargeEconomyMoney(Player player, double chargeamount) { - EconomyInterface econ = plugin.getEconomyManager(); - if (econ == null) { - plugin.msg(player, lm.Economy_MarketDisabled); - return false; - } - if (!econ.canAfford(player.getName(), chargeamount)) { - plugin.msg(player, lm.Economy_NotEnoughMoney); - return false; - } - econ.subtract(player.getName(), chargeamount); - try { - plugin.msg(player, lm.Economy_MoneyCharged, chargeamount, econ.getName()); - } catch (Exception e) { - } - return true; - } - - public boolean giveEconomyMoney(Player player, int amount) { - if (player == null) - return false; - if (amount == 0) - return true; - EconomyInterface econ = plugin.getEconomyManager(); - if (econ == null) { - plugin.msg(player, lm.Economy_MarketDisabled); - return false; - } - - econ.add(player.getName(), amount); - plugin.msg(player, lm.Economy_MoneyAdded, String.format("%d", amount), econ.getName()); - return true; - } - - public void putForSale(String areaname, Player player, int amount, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - putForSale(res, player, amount, resadmin); - } - - public void putForSale(ClaimedResidence res, Player player, int amount, boolean resadmin) { - - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - if (plugin.getConfigManager().enabledRentSystem()) { - if (!resadmin) { - if (res.isForRent()) { - plugin.msg(player, lm.Economy_RentSellFail); - return; - } - if (res.isSubzoneForRent()) { - plugin.msg(player, lm.Economy_SubzoneRentSellFail); - return; - } - if (res.isParentForRent()) { - plugin.msg(player, lm.Economy_ParentRentSellFail); - return; - } - } - } - - if (!plugin.getConfigManager().isSellSubzone()) { - if (res.isSubzone()) { - plugin.msg(player, lm.Economy_SubzoneSellFail); - return; - } - } - - if (!resadmin) { - if (!plugin.getConfigManager().enableEconomy() || plugin.getEconomyManager() == null) { - plugin.msg(player, lm.Economy_MarketDisabled); - return; - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - - if (!resadmin && !(rPlayer.getGroup().canSellLand() || player.hasPermission("residence.sell"))) { - plugin.msg(player, lm.General_NoPermission); - return; - } - if (amount <= 0) { - plugin.msg(player, lm.Invalid_Amount); - return; - } - } - - if (!res.isOwner(player) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return; - } - if (sellAmount.contains(res)) { - plugin.msg(player, lm.Economy_AlreadySellFail); - return; - } - res.setSellPrice(amount); - sellAmount.add(res); - plugin.getSignUtil().CheckSign(res); - plugin.msg(player, lm.Residence_ForSale, res.getName(), amount); - } - - @Override - public boolean putForSale(String areaname, int amount) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - return putForSale(res, amount); - } - - public boolean putForSale(ClaimedResidence res, int amount) { - if (res == null) - return false; - - if (plugin.getConfigManager().enabledRentSystem() && (res.isForRent() || res.isSubzoneForRent() || res.isParentForRent())) - return false; - - if (sellAmount.contains(res)) - return false; - - res.setSellPrice(amount); - sellAmount.add(res); - return true; - } - - @Override - public void buyPlot(String areaname, Player player, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - buyPlot(res, player, resadmin); - } - - public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { - if (res == null || !res.isForSell()) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (!resadmin) { - if (!plugin.getConfigManager().enableEconomy() || plugin.getEconomyManager() == null) { - plugin.msg(player, lm.Economy_MarketDisabled); - return; - } - boolean canbuy = group.canBuyLand() || player.hasPermission("residence.buy"); - if (!canbuy && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return; - } - } - - if (res.getPermissions().getOwner().equals(player.getName())) { - plugin.msg(player, lm.Economy_OwnerBuyFail); - return; - } - if (plugin.getResidenceManager().getOwnedZoneCount(player.getName()) >= rPlayer.getMaxRes() && !resadmin) { - plugin.msg(player, lm.Residence_TooMany); - return; - } - Server serv = plugin.getServ(); - int amount = res.getSellPrice(); - - if (!resadmin && !group.buyLandIgnoreLimits()) { - CuboidArea[] areas = res.getAreaArray(); - for (CuboidArea thisarea : areas) { - if (!res.isSubzone() && !res.isSmallerThanMax(player, thisarea, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(player, thisarea, - resadmin)) { - plugin.msg(player, lm.Residence_BuyTooBig); - return; - } - } - } - - EconomyInterface econ = plugin.getEconomyManager(); - if (econ == null) { - plugin.msg(player, lm.Economy_MarketDisabled); - return; - } - - String buyerName = player.getName(); - String sellerName = res.getPermissions().getOwner(); - Player sellerNameFix = plugin.getServ().getPlayer(sellerName); - if (sellerNameFix != null) { - sellerName = sellerNameFix.getName(); - } - - if (econ.canAfford(buyerName, amount)) { - if (!econ.transfer(buyerName, sellerName, amount)) { - player.sendMessage(ChatColor.RED + "Error, could not transfer " + amount + " from " + buyerName + " to " + sellerName); - return; - } - res.getPermissions().setOwner(player.getName(), true); - res.getPermissions().applyDefaultFlags(); - removeFromSale(res); - - if (plugin.getConfigManager().isRemoveLwcOnBuy()) - plugin.getResidenceManager().removeLwcFromResidence(player, res); - - plugin.getSignUtil().CheckSign(res); - - Visualizer v = new Visualizer(player); - v.setAreas(res); - plugin.getSelectionManager().showBounds(player, v); - - plugin.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); - plugin.msg(player, lm.Residence_Bought, res.getResidenceName()); - Player seller = serv.getPlayer(sellerName); - if (seller != null && seller.isOnline()) { - seller.sendMessage(plugin.msg(lm.Residence_Buy, player.getName(), res.getResidenceName())); - seller.sendMessage(plugin.msg(lm.Economy_MoneyCredit, String.format("%d", amount), econ.getName())); - } - } else { - plugin.msg(player, lm.Economy_NotEnoughMoney); - } - - } - - public void removeFromSale(Player player, String areaname, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - removeFromSale(player, res, resadmin); - } - - public void removeFromSale(Player player, ClaimedResidence res, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Area); - return; - } - - if (!res.isForSell()) { - plugin.msg(player, lm.Residence_NotForSale); - return; - } - if (res.isOwner(player) || resadmin) { - removeFromSale(res); - plugin.getSignUtil().CheckSign(res); - plugin.msg(player, lm.Residence_StopSelling); - } else { - plugin.msg(player, lm.General_NoPermission); - } - } - - @Override - public void removeFromSale(String areaname) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - removeFromSale(res); - } - - public void removeFromSale(ClaimedResidence res) { - if (res == null) - return; - sellAmount.remove(res); - plugin.getSignUtil().removeSign(res); - } - - @Override - public boolean isForSale(String areaname) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - return isForSale(res); - } - - public boolean isForSale(ClaimedResidence res) { - if (res == null) - return false; - return sellAmount.contains(res); - } - - public boolean viewSaleInfo(String areaname, Player player) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - return viewSaleInfo(res, player); - } - - public boolean viewSaleInfo(ClaimedResidence res, Player player) { - - if (res == null || !res.isForSell()) { - return false; - } - - if (!sellAmount.contains(res)) - return false; - - plugin.msg(player, lm.General_Separator); - plugin.msg(player, lm.Area_Name, res.getName()); - plugin.msg(player, lm.Economy_SellAmount, res.getSellPrice()); - if (plugin.getConfigManager().useLeases()) { - String etime = plugin.getLeaseManager().getExpireTime(res.getName()); - if (etime != null) { - plugin.msg(player, lm.Economy_LeaseExpire, etime); - } - } - plugin.msg(player, lm.General_Separator); - return true; - } - - public void printForSaleResidences(Player player, int page) { - List toRemove = new ArrayList(); - plugin.msg(player, lm.Economy_LandForSale); - StringBuilder sbuild = new StringBuilder(); - sbuild.append(ChatColor.GREEN); - - PageInfo pi = new PageInfo(10, sellAmount.size(), page); - - int position = -1; - for (ClaimedResidence res : sellAmount) { - position++; - if (position > pi.getEnd()) - break; - if (!pi.isInRange(position)) - continue; - - if (res == null) { - toRemove.add(res); - continue; - } - plugin.msg(player, lm.Economy_SellList, pi.getPositionForOutput(position), res.getName(), res.getSellPrice(), res.getOwner()); - } - - for (ClaimedResidence one : toRemove) { - sellAmount.remove(one); - } - plugin.getInfoPageManager().ShowPagination(player, pi.getTotalPages(), page, "/res market list sell"); - } - - public void clearSales() { - for (ClaimedResidence res : sellAmount) { - if (res == null) - continue; - res.setSellPrice(-1); - } - sellAmount.clear(); - System.out.println("[Residence] - ReInit land selling."); - } - - @Override - public int getSaleAmount(String areaname) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - return getSaleAmount(res); - } - - public int getSaleAmount(ClaimedResidence res) { - if (res == null) - return -1; - return res.getSellPrice(); - } - - public void load(Map root) { - if (root == null) - return; - - for (Entry one : root.entrySet()) { - ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); - if (res == null) - continue; - res.setSellPrice(one.getValue()); - sellAmount.add(res); - } - } - - @Override - public Map getBuyableResidences() { - Map list = new HashMap(); - for (ClaimedResidence res : sellAmount) { - if (res == null) - continue; - list.put(res.getName(), res.getSellPrice()); - } - return list; - } - - public Map save() { - return getBuyableResidences(); - } -} +package com.bekvon.bukkit.residence.economy; + +import org.bukkit.ChatColor; + +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.MarketBuyInterface; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import org.bukkit.Server; +import org.bukkit.entity.Player; + +public class TransactionManager implements MarketBuyInterface { + private Set sellAmount; + private Residence plugin; + + public TransactionManager(Residence plugin) { + this.plugin = plugin; + sellAmount = new HashSet(); + } + + public boolean chargeEconomyMoney(Player player, double chargeamount) { + EconomyInterface econ = plugin.getEconomyManager(); + if (econ == null) { + plugin.msg(player, lm.Economy_MarketDisabled); + return false; + } + if (!econ.canAfford(player.getName(), chargeamount)) { + plugin.msg(player, lm.Economy_NotEnoughMoney); + return false; + } + econ.subtract(player.getName(), chargeamount); + try { + plugin.msg(player, lm.Economy_MoneyCharged, chargeamount, econ.getName()); + } catch (Exception e) { + } + return true; + } + + public boolean giveEconomyMoney(Player player, int amount) { + if (player == null) + return false; + if (amount == 0) + return true; + EconomyInterface econ = plugin.getEconomyManager(); + if (econ == null) { + plugin.msg(player, lm.Economy_MarketDisabled); + return false; + } + + econ.add(player.getName(), amount); + plugin.msg(player, lm.Economy_MoneyAdded, String.format("%d", amount), econ.getName()); + return true; + } + + public void putForSale(String areaname, Player player, int amount, boolean resadmin) { + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + putForSale(res, player, amount, resadmin); + } + + public void putForSale(ClaimedResidence res, Player player, int amount, boolean resadmin) { + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + if (plugin.getConfigManager().enabledRentSystem()) { + if (!resadmin) { + if (res.isForRent()) { + plugin.msg(player, lm.Economy_RentSellFail); + return; + } + if (res.isSubzoneForRent()) { + plugin.msg(player, lm.Economy_SubzoneRentSellFail); + return; + } + if (res.isParentForRent()) { + plugin.msg(player, lm.Economy_ParentRentSellFail); + return; + } + } + } + + if (!plugin.getConfigManager().isSellSubzone()) { + if (res.isSubzone()) { + plugin.msg(player, lm.Economy_SubzoneSellFail); + return; + } + } + + if (!resadmin) { + if (!plugin.getConfigManager().enableEconomy() || plugin.getEconomyManager() == null) { + plugin.msg(player, lm.Economy_MarketDisabled); + return; + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + + if (!resadmin && !(rPlayer.getGroup().canSellLand() || player.hasPermission("residence.sell"))) { + plugin.msg(player, lm.General_NoPermission); + return; + } + if (amount <= 0) { + plugin.msg(player, lm.Invalid_Amount); + return; + } + } + + if (!res.isOwner(player) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return; + } + if (sellAmount.contains(res)) { + plugin.msg(player, lm.Economy_AlreadySellFail); + return; + } + res.setSellPrice(amount); + sellAmount.add(res); + plugin.getSignUtil().CheckSign(res); + plugin.msg(player, lm.Residence_ForSale, res.getName(), amount); + } + + @Override + public boolean putForSale(String areaname, int amount) { + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + return putForSale(res, amount); + } + + public boolean putForSale(ClaimedResidence res, int amount) { + if (res == null) + return false; + + if (plugin.getConfigManager().enabledRentSystem() && (res.isForRent() || res.isSubzoneForRent() || res.isParentForRent())) + return false; + + if (sellAmount.contains(res)) + return false; + + res.setSellPrice(amount); + sellAmount.add(res); + return true; + } + + @Override + public void buyPlot(String areaname, Player player, boolean resadmin) { + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + buyPlot(res, player, resadmin); + } + + public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { + if (res == null || !res.isForSell()) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (!resadmin) { + if (!plugin.getConfigManager().enableEconomy() || plugin.getEconomyManager() == null) { + plugin.msg(player, lm.Economy_MarketDisabled); + return; + } + boolean canbuy = group.canBuyLand() || player.hasPermission("residence.buy"); + if (!canbuy && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return; + } + } + + if (res.getPermissions().getOwner().equals(player.getName())) { + plugin.msg(player, lm.Economy_OwnerBuyFail); + return; + } + if (plugin.getResidenceManager().getOwnedZoneCount(player.getName()) >= rPlayer.getMaxRes() && !resadmin) { + plugin.msg(player, lm.Residence_TooMany); + return; + } + Server serv = plugin.getServ(); + int amount = res.getSellPrice(); + + if (!resadmin && !group.buyLandIgnoreLimits()) { + CuboidArea[] areas = res.getAreaArray(); + for (CuboidArea thisarea : areas) { + if (!res.isSubzone() && !res.isSmallerThanMax(player, thisarea, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(player, thisarea, + resadmin)) { + plugin.msg(player, lm.Residence_BuyTooBig); + return; + } + } + } + + EconomyInterface econ = plugin.getEconomyManager(); + if (econ == null) { + plugin.msg(player, lm.Economy_MarketDisabled); + return; + } + + String buyerName = player.getName(); + String sellerName = res.getPermissions().getOwner(); + Player sellerNameFix = plugin.getServ().getPlayer(sellerName); + if (sellerNameFix != null) { + sellerName = sellerNameFix.getName(); + } + + if (econ.canAfford(buyerName, amount)) { + if (!econ.transfer(buyerName, sellerName, amount)) { + player.sendMessage(ChatColor.RED + "Error, could not transfer " + amount + " from " + buyerName + " to " + sellerName); + return; + } + res.getPermissions().setOwner(player.getName(), true); + res.getPermissions().applyDefaultFlags(); + removeFromSale(res); + + if (plugin.getConfigManager().isRemoveLwcOnBuy()) + plugin.getResidenceManager().removeLwcFromResidence(player, res); + + plugin.getSignUtil().CheckSign(res); + + Visualizer v = new Visualizer(player); + v.setAreas(res); + plugin.getSelectionManager().showBounds(player, v); + + plugin.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); + plugin.msg(player, lm.Residence_Bought, res.getResidenceName()); + Player seller = serv.getPlayer(sellerName); + if (seller != null && seller.isOnline()) { + seller.sendMessage(plugin.msg(lm.Residence_Buy, player.getName(), res.getResidenceName())); + seller.sendMessage(plugin.msg(lm.Economy_MoneyCredit, String.format("%d", amount), econ.getName())); + } + } else { + plugin.msg(player, lm.Economy_NotEnoughMoney); + } + + } + + public void removeFromSale(Player player, String areaname, boolean resadmin) { + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + removeFromSale(player, res, resadmin); + } + + public void removeFromSale(Player player, ClaimedResidence res, boolean resadmin) { + if (res == null) { + plugin.msg(player, lm.Invalid_Area); + return; + } + + if (!res.isForSell()) { + plugin.msg(player, lm.Residence_NotForSale); + return; + } + if (res.isOwner(player) || resadmin) { + removeFromSale(res); + plugin.getSignUtil().CheckSign(res); + plugin.msg(player, lm.Residence_StopSelling); + } else { + plugin.msg(player, lm.General_NoPermission); + } + } + + @Override + public void removeFromSale(String areaname) { + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + removeFromSale(res); + } + + public void removeFromSale(ClaimedResidence res) { + if (res == null) + return; + sellAmount.remove(res); + plugin.getSignUtil().removeSign(res); + } + + @Override + public boolean isForSale(String areaname) { + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + return isForSale(res); + } + + public boolean isForSale(ClaimedResidence res) { + if (res == null) + return false; + return sellAmount.contains(res); + } + + public boolean viewSaleInfo(String areaname, Player player) { + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + return viewSaleInfo(res, player); + } + + public boolean viewSaleInfo(ClaimedResidence res, Player player) { + + if (res == null || !res.isForSell()) { + return false; + } + + if (!sellAmount.contains(res)) + return false; + + plugin.msg(player, lm.General_Separator); + plugin.msg(player, lm.Area_Name, res.getName()); + plugin.msg(player, lm.Economy_SellAmount, res.getSellPrice()); + if (plugin.getConfigManager().useLeases()) { + String etime = plugin.getLeaseManager().getExpireTime(res.getName()); + if (etime != null) { + plugin.msg(player, lm.Economy_LeaseExpire, etime); + } + } + plugin.msg(player, lm.General_Separator); + return true; + } + + public void printForSaleResidences(Player player, int page) { + List toRemove = new ArrayList(); + plugin.msg(player, lm.Economy_LandForSale); + StringBuilder sbuild = new StringBuilder(); + sbuild.append(ChatColor.GREEN); + + PageInfo pi = new PageInfo(10, sellAmount.size(), page); + + int position = -1; + for (ClaimedResidence res : sellAmount) { + position++; + if (position > pi.getEnd()) + break; + if (!pi.isInRange(position)) + continue; + + if (res == null) { + toRemove.add(res); + continue; + } + plugin.msg(player, lm.Economy_SellList, pi.getPositionForOutput(position), res.getName(), res.getSellPrice(), res.getOwner()); + } + + for (ClaimedResidence one : toRemove) { + sellAmount.remove(one); + } + plugin.getInfoPageManager().ShowPagination(player, pi.getTotalPages(), page, "/res market list sell"); + } + + public void clearSales() { + for (ClaimedResidence res : sellAmount) { + if (res == null) + continue; + res.setSellPrice(-1); + } + sellAmount.clear(); + System.out.println("[Residence] - ReInit land selling."); + } + + @Override + public int getSaleAmount(String areaname) { + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + return getSaleAmount(res); + } + + public int getSaleAmount(ClaimedResidence res) { + if (res == null) + return -1; + return res.getSellPrice(); + } + + public void load(Map root) { + if (root == null) + return; + + for (Entry one : root.entrySet()) { + ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); + if (res == null) + continue; + res.setSellPrice(one.getValue()); + sellAmount.add(res); + } + } + + @Override + public Map getBuyableResidences() { + Map list = new HashMap(); + for (ClaimedResidence res : sellAmount) { + if (res == null) + continue; + list.put(res.getName(), res.getSellPrice()); + } + return list; + } + + public Map save() { + return getBuyableResidences(); + } +} diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java index 62ff0d5ac..3044dfb70 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java @@ -1,56 +1,69 @@ -package com.bekvon.bukkit.residence.itemlist; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import org.bukkit.Material; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; - -import com.bekvon.bukkit.residence.Residence; - -public class WorldItemManager { - protected List lists; - private Residence plugin; - - public WorldItemManager(Residence plugin) { - this.plugin = plugin; - lists = new ArrayList(); - this.readLists(); - } - - public boolean isAllowed(Material mat, String group, String world) { - for (WorldItemList list : lists) { - if (!list.isAllowed(mat, world, group)) { - return false; - } - } - return true; - } - - public boolean isIgnored(Material mat, String group, String world) { - for (WorldItemList list : lists) { - if (list.isIgnored(mat, world, group)) { - return true; - } - } - return false; - } - - private void readLists() { - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); - Set keys = flags.getConfigurationSection("ItemList").getKeys(false); - if (keys != null) { - for (String key : keys) { - try { - WorldItemList list = WorldItemList.readList(flags.getConfigurationSection("ItemList." + key)); - lists.add(list); - //System.out.println("Debug: read list " + key + " world: " + list.getWorld() + " group: " + list.getGroup() + " itemcount:" + list.getListSize()); - } catch (Exception ex) { - System.out.println("Failed to load item list:" + key); - } - } - } - } -} +package com.bekvon.bukkit.residence.itemlist; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import org.bukkit.Material; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; + +public class WorldItemManager { + protected List lists; + private Residence plugin; + + public WorldItemManager(Residence plugin) { + this.plugin = plugin; + lists = new ArrayList(); + this.readLists(); + } + + public boolean isAllowed(Material mat, PermissionGroup group, String world) { + if (group == null) + return true; + return isAllowed(mat, group.getGroupName(), world); + } + + public boolean isAllowed(Material mat, String group, String world) { + for (WorldItemList list : lists) { + if (!list.isAllowed(mat, world, group)) { + return false; + } + } + return true; + } + + public boolean isIgnored(Material mat, PermissionGroup group, String world) { + if (group == null) + return false; + return isIgnored(mat, group.getGroupName(), world); + } + + public boolean isIgnored(Material mat, String group, String world) { + for (WorldItemList list : lists) { + if (list.isIgnored(mat, world, group)) { + return true; + } + } + return false; + } + + private void readLists() { + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); + Set keys = flags.getConfigurationSection("ItemList").getKeys(false); + if (keys != null) { + for (String key : keys) { + try { + WorldItemList list = WorldItemList.readList(flags.getConfigurationSection("ItemList." + key)); + lists.add(list); + //System.out.println("Debug: read list " + key + " world: " + list.getWorld() + " group: " + list.getGroup() + " itemcount:" + list.getListSize()); + } catch (Exception ex) { + System.out.println("Failed to load item list:" + key); + } + } + } + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 58a7f2c48..7f03abffb 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -28,7 +28,9 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.Location; @@ -131,7 +133,9 @@ public void onBlockBreak(BlockBreakEvent event) { Block block = event.getBlock(); Material mat = block.getType(); String world = block.getWorld().getName(); - String group = plugin.getPermissionManager().getGroupNameByPlayer(player); + + ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(); if (plugin.getItemManager().isIgnored(mat, group, world)) { return; } @@ -145,12 +149,11 @@ public void onBlockBreak(BlockBreakEvent event) { } } FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - String pname = player.getName(); if (res != null && res.getItemIgnoreList().isListed(mat)) return; - boolean hasdestroy = perms.playerHas(pname, player.getWorld().getName(), Flags.destroy, perms.playerHas(pname, player.getWorld().getName(), Flags.build, true)); - boolean hasContainer = perms.playerHas(pname, player.getWorld().getName(), Flags.container, true); + boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); + boolean hasContainer = perms.playerHas(player, Flags.container, true); if (!hasdestroy && !player.hasPermission("residence.bypass.destroy")) { plugin.msg(player, lm.Flag_Deny, Flags.destroy); event.setCancelled(true); @@ -353,7 +356,9 @@ public void onBlockPlace(BlockPlaceEvent event) { Block block = event.getBlock(); Material mat = block.getType(); String world = block.getWorld().getName(); - String group = plugin.getPermissionManager().getGroupNameByPlayer(player); + + ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(); if (plugin.getItemManager().isIgnored(mat, group, world)) { return; } @@ -366,14 +371,13 @@ public void onBlockPlace(BlockPlaceEvent event) { return; } } - String pname = player.getName(); if (res != null && !res.getItemBlacklist().isAllowed(mat)) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; } FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - boolean hasplace = perms.playerHas(pname, world, Flags.place, perms.playerHas(pname, world, Flags.build, true)); + boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); if (!hasplace && !player.hasPermission("residence.bypass.build")) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place.getName()); @@ -630,7 +634,7 @@ public void onBlockIgnite(BlockIgniteEvent event) { } else if (cause == IgniteCause.FLINT_AND_STEEL) { Player player = event.getPlayer(); FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlock().getLocation(), player); - if (player != null && !perms.playerHas(player.getName(), player.getWorld().getName(), Flags.ignite, true) && !plugin.isResAdminOn(player)) { + if (player != null && !perms.playerHas(player, Flags.ignite, true) && !plugin.isResAdminOn(player)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.ignite.getName()); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index d3b7b415d..825eaf5f1 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -209,7 +209,7 @@ public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { if (plugin.isResAdminOn(cause)) return; - if (res.getPermissions().playerHas(cause.getName(), Flags.animalkilling, FlagCombo.OnlyFalse)) { + if (res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); event.setCancelled(true); } @@ -304,7 +304,7 @@ public void VehicleDestroy(VehicleDestroyEvent event) { if (res == null) return; - if (res.getPermissions().playerHas(cause.getName(), Flags.vehicledestroy, FlagCombo.OnlyFalse)) { + if (res.getPermissions().playerHas(cause, Flags.vehicledestroy, FlagCombo.OnlyFalse)) { plugin.msg(cause, lm.Residence_FlagDeny, Flags.vehicledestroy.getName(), res.getName()); event.setCancelled(true); } @@ -348,7 +348,7 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { if (res == null) return; - if (res.getPermissions().playerHas(cause.getName(), Flags.mobkilling, FlagCombo.OnlyFalse)) { + if (res.getPermissions().playerHas(cause, Flags.mobkilling, FlagCombo.OnlyFalse)) { plugin.msg(cause, lm.Residence_FlagDeny, Flags.mobkilling.getName(), res.getName()); event.setCancelled(true); } @@ -374,7 +374,7 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { if (res == null) return; - if (res.getPermissions().playerHas(player.getName(), Flags.leash, FlagCombo.OnlyFalse)) { + if (res.getPermissions().playerHas(player, Flags.leash, FlagCombo.OnlyFalse)) { plugin.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); event.setCancelled(true); } @@ -508,9 +508,7 @@ public void onHangingPlace(HangingPlaceEvent event) { return; FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getEntity().getLocation(), player); - String pname = player.getName(); - String world = player.getWorld().getName(); - if (!perms.playerHas(pname, world, Flags.place, perms.playerHas(pname, world, Flags.build, true))) { + if (!perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true))) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); } @@ -552,10 +550,8 @@ public void onHangingBreak(HangingBreakByEntityEvent event) { if (plugin.getResidenceManager().isOwnerOfLocation(player, ent.getLocation())) return; - String pname = player.getName(); FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player); - String world = ent.getWorld().getName(); - if (!perms.playerHas(pname, world, Flags.destroy, perms.playerHas(pname, world, Flags.build, true))) { + if (!perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true))) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.destroy); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 5193c2503..e416a963d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -66,6 +66,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; @@ -734,7 +735,6 @@ public void onPlayerQuit(PlayerQuitEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerJoin(PlayerChangedWorldEvent event) { Player player = event.getPlayer(); - plugin.getPermissionManager().updateGroupNameForPlayer(player, true); FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); @@ -782,7 +782,6 @@ public void onPlayerJoin(PlayerJoinEvent event) { handleNewLocation(player, player.getLocation(), true); plugin.getPlayerManager().playerJoin(player); - plugin.getPermissionManager().updateGroupNameForPlayer(player, true); if (player.hasPermission("residence.versioncheck")) { plugin.getVersionChecker().VersionCheck(player); @@ -818,7 +817,7 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { @SuppressWarnings("deprecation") private boolean isContainer(Material mat, Block block) { - return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container.getName()) + return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container) || plugin.getConfigManager().getCustomContainers().contains(block.getTypeId()); } @@ -878,8 +877,7 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); if (relativeBlock.getType() == Material.FIRE) { - boolean hasplace = perms.playerHas(player.getName(), player.getWorld().getName(), Flags.place, perms.playerHas(player.getName(), player.getWorld().getName(), - Flags.build, true)); + boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); if (!hasplace) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); @@ -903,17 +901,16 @@ public void onPlatePress(PlayerInteractEvent event) { Material mat = block.getType(); Player player = event.getPlayer(); FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - String world = player.getWorld().getName(); boolean resadmin = plugin.isResAdminOn(player); if (!resadmin) { - boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); - boolean haspressure = perms.playerHas(player.getName(), world, Flags.pressure, hasuse); + boolean hasuse = perms.playerHas(player, Flags.use, true); + boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE || plugin.getNms().isPlate(mat))) { event.setCancelled(true); return; } } - if (!perms.playerHas(player.getName(), world, Flags.trample, perms.playerHas(player.getName(), world, Flags.build, true)) && (mat == Material.SOIL + if (!perms.playerHas(player, Flags.trample, perms.playerHas(player, Flags.build, true)) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { event.setCancelled(true); return; @@ -1026,6 +1023,10 @@ public void onPlayerInteract(PlayerInteractEvent event) { Material mat = block.getType(); + Debug.D("container interact2 " + isContainer(mat, block)); + Debug.D("container interact22 " + (heldItemId != plugin.getConfigManager().getSelectionTooldID()) + " " + (heldItemId != plugin.getConfigManager().getInfoToolID()) + " " + + (heldItem != Material.INK_SACK) + " " + (!plugin.getNms().isArmorStandMaterial(heldItem)) + " " + (!plugin.getNms().isBoat(heldItem))); + if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || plugin.getNms().isCanUseEntity_BothClick(mat, block))) { if (heldItemId != plugin.getConfigManager().getSelectionTooldID() && heldItemId != plugin.getConfigManager().getInfoToolID() @@ -1034,18 +1035,23 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } + Debug.D("container interact3"); if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; String world = player.getWorld().getName(); - String permgroup = plugin.getPermissionManager().getGroupNameByPlayer(player); + + ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(); + boolean resadmin = plugin.isResAdminOn(player); - if (!resadmin && !plugin.getItemManager().isAllowed(heldItem, permgroup, world)) { + if (!resadmin && !plugin.getItemManager().isAllowed(heldItem, group, world)) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; } + Debug.D("container interact4"); if (resadmin) return; @@ -1056,7 +1062,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (plugin.getNms().itemInMainHand(player).getData().getData() == 15 && block.getType() == Material.GRASS || iih.getData().getData() == 3 && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, Flags.build, true)) { + if (!perms.playerHas(player, Flags.build, true)) { plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); event.setCancelled(true); return; @@ -1065,7 +1071,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (plugin.getNms().isArmorStandMaterial(heldItem) || plugin.getNms().isBoat(heldItem)) { perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player.getName(), world, Flags.build, true)) { + if (!perms.playerHas(player, Flags.build, true)) { plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); event.setCancelled(true); return; @@ -1073,16 +1079,18 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } + Debug.D("container interact5"); if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasuse = perms.playerHas(player.getName(), world, Flags.use, true); - for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { + boolean hasuse = perms.playerHas(player, Flags.use, true); + Debug.D("container interact6"); + for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { if (mat != checkMat.getKey()) continue; - if (perms.playerHas(player.getName(), world, checkMat.getValue(), hasuse)) + if (perms.playerHas(player, checkMat.getValue(), hasuse)) continue; - if (hasuse || checkMat.getValue().equals(Flags.container.getName())) { + if (hasuse || checkMat.getValue().equals(Flags.container)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); return; @@ -1093,7 +1101,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (plugin.getConfigManager().getCustomContainers().contains(blockId)) { - if (!perms.playerHas(player.getName(), world, Flags.container, hasuse)) { + if (!perms.playerHas(player, Flags.container, hasuse)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.container.getName()); return; @@ -1159,7 +1167,7 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { plugin.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); event.setCancelled(true); - } else if (!res.isOwner(player) && !res.getPermissions().playerHas(player.getName(), Flags.riding, FlagCombo.TrueOrNone)) { + } else if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.riding, FlagCombo.TrueOrNone)) { plugin.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); event.setCancelled(true); } @@ -1284,13 +1292,16 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player); String world = player.getWorld().getName(); - String permgroup = plugin.getPermissionManager().getGroupNameByPlayer(player); - if (!plugin.getItemManager().isAllowed(heldItem, permgroup, world)) { + + ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(); + + if (!plugin.getItemManager().isAllowed(heldItem, group, world)) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; } - if (!perms.playerHas(player.getName(), world, Flags.container, perms.playerHas(player.getName(), world, Flags.use, true))) { + if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.container.getName()); } @@ -1676,7 +1687,7 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { } else { if (res != null && ResOld.getName().equals(res.getName())) { - f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !player.hasPermission( + f: if (player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { if (res.isOwner(player)) break f; @@ -1748,7 +1759,7 @@ public void run() { } if (move) { - if (res.getPermissions().playerHas(pname, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !player.hasPermission( + if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !player.hasPermission( "residence.admin.move")) { Location lastLoc = lastOutsideLoc.get(pname); @@ -1762,7 +1773,7 @@ public void run() { ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); - if (preRes != null && preRes.getPermissions().playerHas(pname, Flags.tp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { + if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { Location newLoc = res.getOutsideFreeLoc(loc, player); player.teleport(newLoc); } else if (lastLoc != null) { @@ -1781,7 +1792,7 @@ public void run() { } // Preventing fly in residence only when player has move permission - f: if (player.isFlying() && res.getPermissions().playerHas(pname, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !player.hasPermission( + f: if (player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { if (res.isOwner(player)) break f; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index a915deb0e..15cc0dde8 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -5,6 +5,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; @@ -385,6 +386,11 @@ public boolean canCreateResidences() { return cancreate; } + public boolean hasFlagAccess(Flags flag) { + return flagPerms.has(flag, false); + } + + @Deprecated public boolean hasFlagAccess(String flag) { return flagPerms.has(flag, false); } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 52c617db3..7d09021ee 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -1,235 +1,169 @@ -package com.bekvon.bukkit.residence.permissions; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.PlayerGroup; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; -import com.nijikokun.bukkit.Permissions.Permissions; -import com.platymuus.bukkit.permissions.PermissionsPlugin; - -import java.io.File; -import java.util.*; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.bukkit.Bukkit; -import org.bukkit.Server; -import org.bukkit.command.CommandSender; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -public class PermissionManager { - protected static PermissionsInterface perms; - protected LinkedHashMap groups; - protected Map playersGroup; - protected FlagPermissions globalFlagPerms; - - protected HashMap groupsMap = new HashMap(); - private Residence plugin; - - public PermissionManager(Residence plugin) { - this.plugin = plugin; - try { - groups = new LinkedHashMap(); - playersGroup = Collections.synchronizedMap(new HashMap()); - globalFlagPerms = new FlagPermissions(); - this.readConfig(); - checkPermissions(); - } catch (Exception ex) { - Logger.getLogger(PermissionManager.class.getName()).log(Level.SEVERE, null, ex); - } - } - - public FlagPermissions getAllFlags() { - return this.globalFlagPerms; - } - - public Map getPlayersGroups() { - return playersGroup; - } - - public Map getGroups() { - return groups; - } - -// public PermissionGroup getGroup(Player player) { -// PermissionGroup group = Residence.getPlayerManager().getGroup(player.getName()); -// if (group != null) { -// return group; -// } -// return groups.get(this.getGroupNameByPlayer(player)); -// } -// -// public PermissionGroup getGroup(String player, String world) { -// PermissionGroup group = Residence.getPlayerManager().getGroup(player); -// if (group != null) { -// return group; -// } -// return groups.get(this.getGroupNameByPlayer(player, world)); -// } - - public PermissionGroup getGroupByName(String group) { - group = group.toLowerCase(); - if (!groups.containsKey(group)) { - return groups.get(plugin.getConfigManager().getDefaultGroup()); - } - return groups.get(group); - } - - public String getGroupNameByPlayer(Player player) { - if (!this.groupsMap.containsKey(player.getName())) { - updateGroupNameForPlayer(player); - } - PlayerGroup PGroup = this.groupsMap.get(player.getName()); - if (PGroup != null) { - String group = PGroup.getGroup(player.getWorld().getName()); - if (group != null) - return group; - } - return plugin.getConfigManager().getDefaultGroup().toLowerCase(); - } - - public String getGroupNameByPlayer(String playerName, String world) { - if (!this.groupsMap.containsKey(playerName)) { - Player player = Bukkit.getPlayer(playerName); - if (player != null) - updateGroupNameForPlayer(player); - else - updateGroupNameForPlayer(playerName, world, true); - } - PlayerGroup PGroup = this.groupsMap.get(playerName); - if (PGroup != null) { - String group = PGroup.getGroup(world); - if (group != null) - return group; - } - return plugin.getConfigManager().getDefaultGroup().toLowerCase(); - } - - public String getPermissionsGroup(Player player) { - return this.getPermissionsGroup(player.getName(), player.getWorld().getName()).toLowerCase(); - } - - public String getPermissionsGroup(String player, String world) { - if (perms == null) - return plugin.getConfigManager().getDefaultGroup().toLowerCase(); - try { - return perms.getPlayerGroup(player, world).toLowerCase(); - } catch (Exception e) { - return plugin.getConfigManager().getDefaultGroup().toLowerCase(); - } - } - - public void updateGroupNameForPlayer(Player player) { - updateGroupNameForPlayer(player, false); - } - - public void updateGroupNameForPlayer(Player player, boolean force) { - if (player == null) - return; - updateGroupNameForPlayer(player.getName(), player.getWorld().getName(), force); - } - - public void updateGroupNameForPlayer(String playerName, String world, boolean force) { - PlayerGroup GPlayer; - if (!groupsMap.containsKey(playerName)) { - GPlayer = new PlayerGroup(playerName); - groupsMap.put(playerName, GPlayer); - } else - GPlayer = groupsMap.get(playerName); - GPlayer.updateGroup(world, force); - } - - public boolean isResidenceAdmin(CommandSender sender) { - return (sender.hasPermission("residence.admin") || (sender.isOp() && plugin.getConfigManager().getOpsAreAdmins())); - } - - private void checkPermissions() { - Server server = plugin.getServ(); - Plugin p = server.getPluginManager().getPlugin("Vault"); - if (p != null) { - ResidenceVaultAdapter vault = new ResidenceVaultAdapter(server); - if (vault.permissionsOK()) { - perms = vault; - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Vault using permissions plugin:" + vault.getPermissionsName()); - return; - } - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Vault, but Vault reported no usable permissions system..."); - } - p = server.getPluginManager().getPlugin("PermissionsBukkit"); - if (p != null) { - perms = new PermissionsBukkitAdapter((PermissionsPlugin) p); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found PermissionsBukkit Plugin!"); - return; - } - p = server.getPluginManager().getPlugin("bPermissions"); - if (p != null) { - perms = new BPermissionsAdapter(); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found bPermissions Plugin!"); - return; - } - p = server.getPluginManager().getPlugin("Permissions"); - if (p != null) { - if (plugin.getConfigManager().useLegacyPermissions()) { - perms = new LegacyPermissions(((Permissions) p).getHandler()); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Permissions Plugin!"); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + "Permissions running in Legacy mode!"); - } else { - perms = new OriginalPermissions(((Permissions) p).getHandler()); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Permissions Plugin!"); - } - return; - } - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Permissions plugin NOT FOUND!"); - } - - private void readConfig() { - - FileConfiguration groupsFile = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); - - String defaultGroup = plugin.getConfigManager().getDefaultGroup().toLowerCase(); - globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", flags.getConfigurationSection("Global")); - ConfigurationSection nodes = groupsFile.getConfigurationSection("Groups"); - if (nodes != null) { - Set entrys = nodes.getKeys(false); - int i = 0; - for (String key : entrys) { - try { - i++; - groups.put(key.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms, i)); - List mirrors = nodes.getConfigurationSection(key).getStringList("Mirror"); - for (String group : mirrors) { - groups.put(group.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms)); - } - } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Error parsing group from config:" + key + " Exception:" + ex); - } - } - } - - if (!groups.containsKey(defaultGroup)) { - groups.put(defaultGroup, new PermissionGroup(defaultGroup)); - } - if (groupsFile.isConfigurationSection("GroupAssignments")) { - Set keys = groupsFile.getConfigurationSection("GroupAssignments").getKeys(false); - if (keys != null) { - for (String key : keys) { - playersGroup.put(key.toLowerCase(), groupsFile.getString("GroupAssignments." + key, defaultGroup).toLowerCase()); - } - } - } - } - - public boolean hasGroup(String group) { - group = group.toLowerCase(); - return groups.containsKey(group); - } - - public PermissionsInterface getPermissionsPlugin() { - return perms; - } -} +package com.bekvon.bukkit.residence.permissions; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.PlayerGroup; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; +import com.nijikokun.bukkit.Permissions.Permissions; +import com.platymuus.bukkit.permissions.PermissionsPlugin; + +import java.io.File; +import java.util.*; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; +import org.bukkit.Server; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +public class PermissionManager { + protected static PermissionsInterface perms; + protected LinkedHashMap groups; + protected Map playersGroup; + protected FlagPermissions globalFlagPerms; + + protected HashMap groupsMap = new HashMap(); + private Residence plugin; + + public PermissionManager(Residence plugin) { + this.plugin = plugin; + try { + groups = new LinkedHashMap(); + playersGroup = Collections.synchronizedMap(new HashMap()); + globalFlagPerms = new FlagPermissions(); + this.readConfig(); + checkPermissions(); + } catch (Exception ex) { + Logger.getLogger(PermissionManager.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public FlagPermissions getAllFlags() { + return this.globalFlagPerms; + } + + public Map getPlayersGroups() { + return playersGroup; + } + + public Map getGroups() { + return groups; + } + + public PermissionGroup getGroupByName(String group) { + group = group.toLowerCase(); + if (!groups.containsKey(group)) { + return groups.get(plugin.getConfigManager().getDefaultGroup()); + } + return groups.get(group); + } + + public String getPermissionsGroup(Player player) { + return this.getPermissionsGroup(player.getName(), player.getWorld().getName()).toLowerCase(); + } + + public String getPermissionsGroup(String player, String world) { + if (perms == null) + return plugin.getConfigManager().getDefaultGroup().toLowerCase(); + try { + return perms.getPlayerGroup(player, world).toLowerCase(); + } catch (Exception e) { + return plugin.getConfigManager().getDefaultGroup().toLowerCase(); + } + } + + public boolean isResidenceAdmin(CommandSender sender) { + return (sender.hasPermission("residence.admin") || (sender.isOp() && plugin.getConfigManager().getOpsAreAdmins())); + } + + private void checkPermissions() { + Server server = plugin.getServ(); + Plugin p = server.getPluginManager().getPlugin("Vault"); + if (p != null) { + ResidenceVaultAdapter vault = new ResidenceVaultAdapter(server); + if (vault.permissionsOK()) { + perms = vault; + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Vault using permissions plugin:" + vault.getPermissionsName()); + return; + } + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Vault, but Vault reported no usable permissions system..."); + } + p = server.getPluginManager().getPlugin("PermissionsBukkit"); + if (p != null) { + perms = new PermissionsBukkitAdapter((PermissionsPlugin) p); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found PermissionsBukkit Plugin!"); + return; + } + p = server.getPluginManager().getPlugin("bPermissions"); + if (p != null) { + perms = new BPermissionsAdapter(); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found bPermissions Plugin!"); + return; + } + p = server.getPluginManager().getPlugin("Permissions"); + if (p != null) { + if (plugin.getConfigManager().useLegacyPermissions()) { + perms = new LegacyPermissions(((Permissions) p).getHandler()); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Permissions Plugin!"); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + "Permissions running in Legacy mode!"); + } else { + perms = new OriginalPermissions(((Permissions) p).getHandler()); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Permissions Plugin!"); + } + return; + } + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Permissions plugin NOT FOUND!"); + } + + private void readConfig() { + + FileConfiguration groupsFile = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); + + String defaultGroup = plugin.getConfigManager().getDefaultGroup().toLowerCase(); + globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", flags.getConfigurationSection("Global")); + ConfigurationSection nodes = groupsFile.getConfigurationSection("Groups"); + if (nodes != null) { + Set entrys = nodes.getKeys(false); + int i = 0; + for (String key : entrys) { + try { + i++; + groups.put(key.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms, i)); + List mirrors = nodes.getConfigurationSection(key).getStringList("Mirror"); + for (String group : mirrors) { + groups.put(group.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms)); + } + } catch (Exception ex) { + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Error parsing group from config:" + key + " Exception:" + ex); + } + } + } + + if (!groups.containsKey(defaultGroup)) { + groups.put(defaultGroup, new PermissionGroup(defaultGroup)); + } + if (groupsFile.isConfigurationSection("GroupAssignments")) { + Set keys = groupsFile.getConfigurationSection("GroupAssignments").getKeys(false); + if (keys != null) { + for (String key : keys) { + playersGroup.put(key.toLowerCase(), groupsFile.getString("GroupAssignments." + key, defaultGroup).toLowerCase()); + } + } + } + } + + public boolean hasGroup(String group) { + group = group.toLowerCase(); + return groups.containsKey(group); + } + + public PermissionsInterface getPermissionsPlugin() { + return perms; + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 7b51960ee..af7459d32 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -25,7 +25,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.RawMessage; import java.text.DecimalFormat; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 088f577b6..070dbe251 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -1,1093 +1,1124 @@ -package com.bekvon.bukkit.residence.protection; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.EnumMap; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.UUID; - -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.entity.Player; -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.lm; - -public class FlagPermissions { - - protected static ArrayList validFlags = new ArrayList<>(); - protected static ArrayList validPlayerFlags = new ArrayList<>(); - protected static ArrayList validAreaFlags = new ArrayList<>(); - final static Map matUseFlagList = new EnumMap<>(Material.class); - protected Map cachedPlayerNameUUIDs = new HashMap(); - protected Map> playerFlags = new HashMap>(); - protected Map> groupFlags = new HashMap>(); - protected Map cuboidFlags = new HashMap(); - protected FlagPermissions parent; - protected static HashMap> validFlagGroups = new HashMap<>(); - - public FlagPermissions() { - cuboidFlags = Collections.synchronizedMap(new HashMap()); - playerFlags = Collections.synchronizedMap(new HashMap>()); - groupFlags = Collections.synchronizedMap(new HashMap>()); - cachedPlayerNameUUIDs = Collections.synchronizedMap(new HashMap()); - } - - public static enum FlagCombo { - OnlyTrue, OnlyFalse, TrueOrNone, FalseOrNone - } - - public static enum FlagState { - TRUE, FALSE, NEITHER, INVALID - } - - public static void addMaterialToUseFlag(Material mat, Flags flag) { - addMaterialToUseFlag(mat, flag.name()); - } - - public static void addMaterialToUseFlag(Material mat, String flag) { - matUseFlagList.put(mat, flag); - } - - public static void removeMaterialFromUseFlag(Material mat) { - matUseFlagList.remove(mat); - } - - public static EnumMap getMaterialUseFlagList() { - return (EnumMap) matUseFlagList; - } - - public static void addFlag(Flags flag) { - addFlag(flag.name()); - } - - public static void addFlag(String flag) { - flag = flag.toLowerCase(); - if (!validFlags.contains(flag)) { - validFlags.add(flag); - } - if (validFlagGroups.containsKey(flag)) { - validFlagGroups.remove(flag); - } - } - - public static void addPlayerOrGroupOnlyFlag(Flags flag) { - addPlayerOrGroupOnlyFlag(flag.name()); - } - - public static void addPlayerOrGroupOnlyFlag(String flag) { - flag = flag.toLowerCase(); - if (!validPlayerFlags.contains(flag)) { - validPlayerFlags.add(flag); - } - if (validFlagGroups.containsKey(flag)) { - validFlagGroups.remove(flag); - } - } - - public static void addResidenceOnlyFlag(Flags flag) { - addResidenceOnlyFlag(flag.name()); - } - - public static void addResidenceOnlyFlag(String flag) { - flag = flag.toLowerCase(); - if (!validAreaFlags.contains(flag)) { - validAreaFlags.add(flag); - } - if (validFlagGroups.containsKey(flag)) { - validFlagGroups.remove(flag); - } - } - - public static void addFlagToFlagGroup(String group, String flag) { - if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { - if (!validFlagGroups.containsKey(group)) { - validFlagGroups.put(group, new ArrayList()); - } - ArrayList flags = validFlagGroups.get(group); - flags.add(flag); - } - } - - public static void removeFlagFromFlagGroup(String group, String flag) { - if (validFlagGroups.containsKey(group)) { - ArrayList flags = validFlagGroups.get(group); - flags.remove(flag); - if (flags.isEmpty()) { - validFlagGroups.remove(group); - } - } - } - - public static boolean flagGroupExists(String group) { - return validFlagGroups.containsKey(group); - } - - public static void initValidFlags() { - validAreaFlags.clear(); - validPlayerFlags.clear(); - validFlags.clear(); - validFlagGroups.clear(); - - for (Flags flag : Flags.values()) { - switch (flag.getFlagMode()) { - case Both: - addFlag(flag); - break; - case Player: - addPlayerOrGroupOnlyFlag(flag); - break; - case Residence: - addResidenceOnlyFlag(flag); - break; - default: - break; - } - } - - Residence.getInstance().getConfigManager().UpdateGroupedFlagsFile(); - - // All these flags are moved to flags.yml as of 2.9.11.0 version for option to customize them -// addFlagToFlagGroup("redstone", "note"); -// addFlagToFlagGroup("redstone", "pressure"); -// addFlagToFlagGroup("redstone", "lever"); -// addFlagToFlagGroup("redstone", "button"); -// addFlagToFlagGroup("redstone", "diode"); -// addFlagToFlagGroup("craft", "brew"); -// addFlagToFlagGroup("craft", "table"); -// addFlagToFlagGroup("craft", "enchant"); -// addFlagToFlagGroup("trusted", "use"); -// addFlagToFlagGroup("trusted", "tp"); -// addFlagToFlagGroup("trusted", "build"); -// addFlagToFlagGroup("trusted", "container"); -// addFlagToFlagGroup("trusted", "bucket"); -// addFlagToFlagGroup("trusted", "move"); -// addFlagToFlagGroup("trusted", "leash"); -// addFlagToFlagGroup("trusted", "animalkilling"); -// addFlagToFlagGroup("trusted", "mobkilling"); -// addFlagToFlagGroup("trusted", "shear"); -// addFlagToFlagGroup("trusted", "chat"); -// addFlagToFlagGroup("fire", "ignite"); -// addFlagToFlagGroup("fire", "firespread"); - - addMaterialToUseFlag(Material.DIODE, Flags.diode); - addMaterialToUseFlag(Material.DIODE_BLOCK_OFF, Flags.diode); - addMaterialToUseFlag(Material.DIODE_BLOCK_ON, Flags.diode); - addMaterialToUseFlag(Material.REDSTONE_COMPARATOR, Flags.diode); - addMaterialToUseFlag(Material.REDSTONE_COMPARATOR_OFF, Flags.diode); - addMaterialToUseFlag(Material.REDSTONE_COMPARATOR_ON, Flags.diode); - addMaterialToUseFlag(Material.DAYLIGHT_DETECTOR, Flags.diode); - addMaterialToUseFlag(Material.WORKBENCH, Flags.table); - addMaterialToUseFlag(Material.WOODEN_DOOR, Flags.door); - - Residence.getInstance().getNms().addDefaultFlags(matUseFlagList); - - addMaterialToUseFlag(Material.FENCE_GATE, Flags.door); - addMaterialToUseFlag(Material.NETHER_FENCE, Flags.door); - addMaterialToUseFlag(Material.TRAP_DOOR, Flags.door); - addMaterialToUseFlag(Material.ENCHANTMENT_TABLE, Flags.enchant); - addMaterialToUseFlag(Material.STONE_BUTTON, Flags.button); - addMaterialToUseFlag(Material.LEVER, Flags.lever); - addMaterialToUseFlag(Material.BED_BLOCK, Flags.bed); - addMaterialToUseFlag(Material.BREWING_STAND, Flags.brew); - addMaterialToUseFlag(Material.CAKE, Flags.cake); - addMaterialToUseFlag(Material.NOTE_BLOCK, Flags.note); - addMaterialToUseFlag(Material.DRAGON_EGG, Flags.egg); - addMaterialToUseFlag(Material.COMMAND, Flags.commandblock); - addMaterialToUseFlag(Material.WOOD_BUTTON, Flags.button); - addMaterialToUseFlag(Material.ANVIL, Flags.anvil); - addMaterialToUseFlag(Material.FLOWER_POT, Flags.flowerpot); - addMaterialToUseFlag(Material.BEACON, Flags.beacon); - addMaterialToUseFlag(Material.JUKEBOX, Flags.container); - addMaterialToUseFlag(Material.CHEST, Flags.container); - addMaterialToUseFlag(Material.TRAPPED_CHEST, Flags.container); - addMaterialToUseFlag(Material.HOPPER, Flags.container); - addMaterialToUseFlag(Material.DROPPER, Flags.container); - addMaterialToUseFlag(Material.FURNACE, Flags.container); - addMaterialToUseFlag(Material.BURNING_FURNACE, Flags.container); - addMaterialToUseFlag(Material.DISPENSER, Flags.container); - addMaterialToUseFlag(Material.CAKE_BLOCK, Flags.cake); - } - - public static FlagPermissions parseFromConfigNode(String name, ConfigurationSection node) { - FlagPermissions list = new FlagPermissions(); - - if (!node.isConfigurationSection(name)) - return list; - - Set keys = node.getConfigurationSection(name).getKeys(false); - if (keys == null) - return list; - - for (String key : keys) { - boolean state = node.getBoolean(name + "." + key, false); - key = key.toLowerCase(); - Flags f = Flags.getFlag(key); - if (f != null) - f.setEnabled(state); - if (state) { - list.setFlag(key, FlagState.TRUE); - } else { - list.setFlag(key, FlagState.FALSE); - } - } - return list; - } - - public static FlagPermissions parseFromConfigNodeAsList(String node, String stage) { - FlagPermissions list = new FlagPermissions(); - if (node.equalsIgnoreCase("true")) { - list.setFlag(node, FlagState.valueOf(stage)); - } else { - list.setFlag(node, FlagState.FALSE); - } - - return list; - } - - protected Map getPlayerFlags(String player, boolean allowCreate)//this function works with uuid in string format as well, instead of player name - { - - Map flags = null; - - if (!Residence.getInstance().getConfigManager().isOfflineMode()) { - UUID uuid = null; - if (player.length() == 36) { - try { - uuid = UUID.fromString(player); - } catch (Exception e) { - - } - String resolvedName = Residence.getInstance().getPlayerName(uuid); - if (resolvedName != null) - player = resolvedName; - else if (cachedPlayerNameUUIDs.containsKey(uuid)) - player = cachedPlayerNameUUIDs.get(uuid); - } else - uuid = Residence.getInstance().getPlayerUUID(player); - - if (uuid == null) { - Set> values = cachedPlayerNameUUIDs.entrySet(); - for (Entry value : values) { - if (value.getValue().equals(player)) { - uuid = value.getKey(); - break; - } - } - } - - if (uuid != null) - flags = playerFlags.get(uuid.toString()); - if (flags == null) { - flags = playerFlags.get(player); - if (uuid != null && flags != null) { - flags = playerFlags.remove(player); - playerFlags.put(uuid.toString(), flags); - cachedPlayerNameUUIDs.put(uuid, player); - } - } else - cachedPlayerNameUUIDs.put(uuid, player); - - if (flags == null && allowCreate) { - if (uuid != null) { - flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(uuid.toString(), flags); - cachedPlayerNameUUIDs.put(uuid, player); - } else { - flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(player, flags); - } - } - } else { - for (Entry> one : playerFlags.entrySet()) { - if (!one.getKey().equalsIgnoreCase(player)) - continue; - // Updating players name to correct capitalization - if (!one.getKey().equals(player)) { - Map r = playerFlags.remove(one.getKey()); - playerFlags.put(player, r); - } - flags = one.getValue(); - break; - } - if (flags == null && allowCreate) { - flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(player, flags); - } - } - return flags; - } - - public boolean setPlayerFlag(String player, String flag, FlagState state) { - Map map = this.getPlayerFlags(player, state != FlagState.NEITHER); - if (map == null) - return true; - if (state == FlagState.FALSE) { - map.put(flag, false); - } else if (state == FlagState.TRUE) { - map.put(flag, true); - } else if (state == FlagState.NEITHER) { - if (map.containsKey(flag)) { - map.remove(flag); - } - } - if (map.isEmpty()) - this.removeAllPlayerFlags(player); - return true; - } - - public void removeAllPlayerFlags(String player) {//this function works with uuid in string format as well, instead of player name - // player = player.toLowerCase(); - - if (!Residence.getInstance().getConfigManager().isOfflineMode()) { - UUID uuid = Residence.getInstance().getPlayerUUID(player); - if (uuid == null) - for (Entry entry : cachedPlayerNameUUIDs.entrySet()) - if (entry.getValue().equals(player)) { - uuid = entry.getKey(); - break; - } - - if (uuid != null) { - playerFlags.remove(uuid.toString()); - cachedPlayerNameUUIDs.remove(uuid); - } - return; - } - playerFlags.remove(player); - cachedPlayerNameUUIDs.remove(player); - - } - - public void removeAllGroupFlags(String group) { - groupFlags.remove(group); - } - - public boolean setGroupFlag(String group, String flag, FlagState state) { - group = group.toLowerCase(); - if (!groupFlags.containsKey(group)) { - groupFlags.put(group, Collections.synchronizedMap(new HashMap())); - } - Map map = groupFlags.get(group); - if (state == FlagState.FALSE) { - map.put(flag, false); - } else if (state == FlagState.TRUE) { - map.put(flag, true); - } else if (state == FlagState.NEITHER) { - if (map.containsKey(flag)) { - map.remove(flag); - } - } - if (map.isEmpty()) { - groupFlags.remove(group); - } - return true; - } - - public boolean setFlag(String flag, FlagState state) { - if (state == FlagState.FALSE) { - cuboidFlags.put(flag, false); - } else if (state == FlagState.TRUE) { - cuboidFlags.put(flag, true); - } else if (state == FlagState.NEITHER) { - if (cuboidFlags.containsKey(flag)) { - cuboidFlags.remove(flag); - } - } - return true; - } - - public static FlagState stringToFlagState(String flagstate) { - if (flagstate.equalsIgnoreCase("true") || flagstate.equalsIgnoreCase("t")) { - return FlagState.TRUE; - } else if (flagstate.equalsIgnoreCase("false") || flagstate.equalsIgnoreCase("f")) { - return FlagState.FALSE; - } else if (flagstate.equalsIgnoreCase("remove") || flagstate.equalsIgnoreCase("r")) { - return FlagState.NEITHER; - } else { - return FlagState.INVALID; - } - } - - public boolean playerHas(Player player, Flags flag, boolean def) { - if (player == null) - return false; - return playerHas(player.getName(), player.getWorld().getName(), flag.getName(), def); - } - - public boolean playerHas(String player, String world, Flags flag, boolean def) { - return playerHas(player, world, flag.getName(), def); - } - - public boolean playerHas(String player, String world, String flag, boolean def) { - String group = Residence.getInstance().getPermissionManager().getGroupNameByPlayer(player, world); - return this.playerCheck(player, flag, this.groupCheck(group, flag, this.has(flag, def))); - } - - public boolean groupHas(String group, String flag, boolean def) { - return this.groupCheck(group, flag, this.has(flag, def)); - } - - private boolean playerCheck(String player, String flag, boolean def) { - Map pmap = this.getPlayerFlags(player, false); - if (pmap != null) { - if (pmap.containsKey(flag)) { - return pmap.get(flag); - } - } - if (parent != null) { - return parent.playerCheck(player, flag, def); - } - return def; - } - - private boolean groupCheck(String group, String flag, boolean def) { - if (groupFlags.containsKey(group)) { - Map gmap = groupFlags.get(group); - if (gmap.containsKey(flag)) { - return gmap.get(flag); - } - } - if (parent != null) { - return parent.groupCheck(group, flag, def); - } - return def; - } - - public boolean has(Flags flag, FlagCombo f) { - switch (f) { - case FalseOrNone: - return !has(flag, false); - case OnlyFalse: - return !has(flag, true); - case OnlyTrue: - return has(flag, false); - case TrueOrNone: - return has(flag, true); - default: - return false; - } - } - - public boolean has(Flags flag, boolean def) { - return has(flag.getName(), def); - } - - public boolean has(String flag, boolean def) { - return has(flag, def, true); - } - - public boolean has(String flag, boolean def, boolean checkParent) { - if (cuboidFlags.containsKey(flag)) { - return cuboidFlags.get(flag); - } - if (checkParent && parent != null) { - return parent.has(flag, def); - } - return def; - } - - public boolean isPlayerSet(String player, String flag) { - Map flags = this.getPlayerFlags(player, false); - if (flags == null) - return false; - return flags.containsKey(flag); - } - - public boolean inheritanceIsPlayerSet(String player, String flag) { - Map flags = this.getPlayerFlags(player, false); - if (flags == null) { - return parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); - } - return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); - } - - public boolean isGroupSet(String group, String flag) { - group = group.toLowerCase(); - Map flags = groupFlags.get(group); - if (flags == null) { - return false; - } - return flags.containsKey(flag); - } - - public boolean inheritanceIsGroupSet(String group, String flag) { - group = group.toLowerCase(); - Map flags = groupFlags.get(group); - if (flags == null) { - return parent == null ? false : parent.inheritanceIsGroupSet(group, flag); - } - return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsGroupSet(group, flag); - } - - public boolean isSet(String flag) { - return cuboidFlags.containsKey(flag); - } - - public boolean inheritanceIsSet(String flag) { - return cuboidFlags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsSet(flag); - } - - public boolean checkValidFlag(String flag, boolean globalflag) { - if (validFlags.contains(flag)) { - return true; - } - if (globalflag) { - if (validAreaFlags.contains(flag)) { - return true; - } - } else { - if (validPlayerFlags.contains(flag)) { - return true; - } - } - return false; - } - - public Map save() { - Map root = new LinkedHashMap<>(); -// root.put("LastKnownPlayerNames", cachedPlayerNameUUIDs); - - // Putting uuid's to main cache for later save - Residence.getInstance().addCachedPlayerNameUUIDs(cachedPlayerNameUUIDs); - - root.put("PlayerFlags", playerFlags); - if (!groupFlags.isEmpty()) - root.put("GroupFlags", groupFlags); - - // Cloning map to fix issue for yml anchors being created - root.put("AreaFlags", new HashMap(cuboidFlags)); - - return root; - } - - public static FlagPermissions load(Map root) throws Exception { - FlagPermissions newperms = new FlagPermissions(); - return FlagPermissions.load(root, newperms); - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - protected static FlagPermissions load(Map root, FlagPermissions newperms) throws Exception { - if (root.containsKey("LastKnownPlayerNames")) - newperms.cachedPlayerNameUUIDs = (Map) root.get("LastKnownPlayerNames"); - - if (root.containsKey("PlayerFlags")) - newperms.playerFlags = (Map) root.get("PlayerFlags"); - - for (Entry> one : newperms.playerFlags.entrySet()) { - if (one.getKey().length() != 32) - continue; - - try { - UUID uuid = UUID.fromString(one.getKey()); - String name = Residence.getInstance().getCachedPlayerNameUUIDs().get(uuid); - newperms.cachedPlayerNameUUIDs.put(uuid, name); - } catch (Exception e) { - continue; - } - - } - - if (root.containsKey("GroupFlags")) - newperms.groupFlags = (Map) root.get("GroupFlags"); - - if (root.containsKey("AreaFlags")) { - newperms.cuboidFlags = (Map) root.get("AreaFlags"); - } else - newperms.cuboidFlags = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags().getFlags(); - - String ownerName = null; - String uuid = null; - - if (root.containsKey("OwnerLastKnownName")) { - ownerName = (String) root.get("OwnerLastKnownName"); - uuid = (String) root.get("OwnerUUID"); - } - - if (Residence.getInstance().getConfigManager().isOfflineMode()) - newperms.convertFlagsUUIDsToPlayerNames(); - else - newperms.convertPlayerNamesToUUIDs(ownerName, uuid); - - return newperms; - } - - private void convertFlagsUUIDsToPlayerNames() { - HashMap converts = new HashMap<>(); - for (String keyset : playerFlags.keySet()) { - if (keyset.length() == 36) { - String uuid = keyset; - if (uuid.equalsIgnoreCase(Residence.getInstance().getServerLandUUID())) - converts.put(uuid, Residence.getInstance().getServerLandname()); - else { - String name = Residence.getInstance().getPlayerName(uuid); - if (name != null) - converts.put(uuid, name); - } - } - } - - for (Entry one : converts.entrySet()) { - if (playerFlags.containsKey(one.getKey())) { - Map replace = playerFlags.get(one.getKey()); - playerFlags.remove(one.getKey()); - playerFlags.put(one.getValue(), replace); - } - } - - } - - private void convertPlayerNamesToUUIDs(String OwnerName, String owneruuid) { - HashMap converts = new HashMap<>(); - - List Toremove = new ArrayList(); - - for (String keyset : playerFlags.keySet()) { - if (keyset.length() != 36) { - String uuid = null; - if (OwnerName != null && OwnerName.equals(keyset) && !owneruuid.equals(Residence.getInstance().getTempUserUUID())) - uuid = owneruuid; - else - uuid = Residence.getInstance().getPlayerUUIDString(keyset); - // if (OwnerName.equals(keyset)) { - if (uuid != null) - converts.put(keyset, uuid); - else if (OwnerName != null && !OwnerName.equals(keyset)) - Toremove.add(keyset); - // } - } else { - String pname = Residence.getInstance().getPlayerName(keyset); - if (pname != null) { - try { - UUID uuid = UUID.fromString(keyset); - this.cachedPlayerNameUUIDs.put(uuid, pname); - } catch (Exception e) { - } - } - } - } - for (String one : Toremove) { - playerFlags.remove(one); - } - for (Entry convert : converts.entrySet()) { - playerFlags.put(convert.getValue(), playerFlags.remove(convert.getKey())); - try { - UUID uuid = UUID.fromString(convert.getValue()); - cachedPlayerNameUUIDs.put(uuid, convert.getKey()); - } catch (Exception e) { - } - } - - } - - public String listFlags() { - return listFlags(0, 0); - } - - public String listFlags(Integer split) { - return listFlags(split, 0); - } - - public String listFlags(Integer split, Integer totalShow) { - StringBuilder sbuild = new StringBuilder(); - Set> set = cuboidFlags.entrySet(); - synchronized (set) { - Iterator> it = set.iterator(); - int i = -1; - int t = 0; - while (it.hasNext()) { - i++; - t++; - Entry next = it.next(); - - if (totalShow > 0 && t > totalShow) { - break; - } - - if (split > 0 && i >= split) { - i = 0; - sbuild.append("\n"); - } - - if (next.getValue()) { - sbuild.append("&2").append("+").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } else { - sbuild.append("&3").append("-").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } - - } - } - if (sbuild.length() == 0) { - sbuild.append("none"); - } - return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); - } - - public Map getFlags() { - return cuboidFlags; - } - - public Map getPlayerFlags(String player) { - return this.getPlayerFlags(player, false); - } - - public Set getposibleFlags() { - Set t = new HashSet(); - t.addAll(FlagPermissions.validFlags); - t.addAll(FlagPermissions.validPlayerFlags); - return t; - } - - public ArrayList getposibleAreaFlags() { - return FlagPermissions.validAreaFlags; - } - - public List getPosibleFlags(Player player, boolean residence, boolean resadmin) { - List flags = new ArrayList(); - for (Entry one : Residence.getInstance().getPermissionManager().getAllFlags().getFlags().entrySet()) { - if (!one.getValue() && !resadmin && !player.hasPermission(new Permission("residence.flag." + one.getKey().toLowerCase(), PermissionDefault.FALSE))) - continue; - - if (!residence && !getposibleFlags().contains(one.getKey())) - continue; - - flags.add(one.getKey()); - } - - return flags; - } - - public String listPlayerFlags(String player) { - Map flags = this.getPlayerFlags(player, false); - if (flags != null) { - return this.printPlayerFlags(flags); - } - return "none"; - } - - protected String printPlayerFlags(Map flags) { - StringBuilder sbuild = new StringBuilder(); - if (flags == null) - return "none"; - Set> set = flags.entrySet(); - synchronized (flags) { - Iterator> it = set.iterator(); - while (it.hasNext()) { - Entry next = it.next(); - if (next.getValue()) { - sbuild.append("&2").append("+").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } else { - sbuild.append("&3").append("-").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } - } - } - if (sbuild.length() == 0) { - sbuild.append("none"); - } - return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); - } - - public String listOtherPlayersFlags(String player) { -// player = player.toLowerCase(); - String uuids = Residence.getInstance().getPlayerUUIDString(player); - StringBuilder sbuild = new StringBuilder(); - Set>> set = playerFlags.entrySet(); - synchronized (set) { - Iterator>> it = set.iterator(); - while (it.hasNext()) { - Entry> nextEnt = it.next(); - String next = nextEnt.getKey(); - if (!Residence.getInstance().getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getInstance().getConfigManager().isOfflineMode() && !next - .equals(player)) { - String perms = printPlayerFlags(nextEnt.getValue()); - if (next.length() == 36) { - String resolvedName = Residence.getInstance().getPlayerName(next); - if (resolvedName != null) { - try { - UUID uuid = UUID.fromString(next); - this.cachedPlayerNameUUIDs.put(uuid, resolvedName); - } catch (Exception e) { - } - next = resolvedName; - } else if (this.cachedPlayerNameUUIDs.containsKey(next)) - next = this.cachedPlayerNameUUIDs.get(next); - } - if (!perms.equals("none")) { - sbuild.append(next).append(ChatColor.WHITE).append("[").append(perms).append(ChatColor.WHITE).append("] "); - } - } - } - } - return sbuild.toString(); - } - - public String listPlayersFlags() { - StringBuilder sbuild = new StringBuilder(); - Set>> set = playerFlags.entrySet(); - synchronized (set) { - Iterator>> it = set.iterator(); - while (it.hasNext()) { - Entry> nextEnt = it.next(); - String next = nextEnt.getKey(); - - String perms = printPlayerFlags(nextEnt.getValue()); - if (next.length() == 36) { - String resolvedName = Residence.getInstance().getPlayerName(next); - if (resolvedName != null) { - try { - UUID uuid = UUID.fromString(next); - this.cachedPlayerNameUUIDs.put(uuid, resolvedName); - } catch (Exception e) { - } - next = resolvedName; - } else if (this.cachedPlayerNameUUIDs.containsKey(next)) - next = this.cachedPlayerNameUUIDs.get(next); - } - - if (next.equalsIgnoreCase(Residence.getInstance().getServerLandname())) - continue; - - if (!perms.equals("none")) { - sbuild.append(next).append(ChatColor.WHITE).append("[").append(perms).append(ChatColor.WHITE).append("] "); - } - } - } - return sbuild.toString(); - } - - public String listPlayersFlagsRaw(String player, String text) { - StringBuilder sbuild = new StringBuilder(); - - sbuild.append("[\"\","); - sbuild.append("{\"text\":\"" + text + "\"}"); - - Set>> set = playerFlags.entrySet(); - synchronized (set) { - Iterator>> it = set.iterator(); - boolean random = true; - while (it.hasNext()) { - Entry> nextEnt = it.next(); - String next = nextEnt.getKey(); - - String perms = printPlayerFlags(nextEnt.getValue()); - if (next.length() == 36) { - String resolvedName = Residence.getInstance().getPlayerName(next); - if (resolvedName != null) { - try { - UUID uuid = UUID.fromString(next); - this.cachedPlayerNameUUIDs.put(uuid, resolvedName); - } catch (Exception e) { - } - next = resolvedName; - } else if (this.cachedPlayerNameUUIDs.containsKey(next)) - next = this.cachedPlayerNameUUIDs.get(next); - } - - if (next.equalsIgnoreCase(Residence.getInstance().getServerLandname())) - continue; - - if (!perms.equals("none")) { - sbuild.append(","); - - if (random) { - random = false; - if (player.equals(next)) - next = "&4" + next + "&r"; - else - next = "&2" + next + "&r"; - } else { - random = true; - if (player.equals(next)) - next = "&4" + next + "&r"; - else - next = "&3" + next + "&r"; - } - sbuild.append(ConvertToRaw(next, perms)); - } - } - } - - sbuild.append("]"); - return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); - } - - public String listOtherPlayersFlagsRaw(String text, String player) { -// player = player.toLowerCase(); - String uuids = Residence.getInstance().getPlayerUUIDString(player); - StringBuilder sbuild = new StringBuilder(); - - sbuild.append("[\"\","); - sbuild.append("{\"text\":\"" + text + "\"}"); - - Set>> set = playerFlags.entrySet(); - synchronized (set) { - Iterator>> it = set.iterator(); - boolean random = true; - while (it.hasNext()) { - Entry> nextEnt = it.next(); - String next = nextEnt.getKey(); - if (!Residence.getInstance().getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getInstance().getConfigManager().isOfflineMode() && !next - .equals(player)) { - String perms = printPlayerFlags(nextEnt.getValue()); - if (next.length() == 36) { - String resolvedName = Residence.getInstance().getPlayerName(next); - if (resolvedName != null) { - try { - UUID uuid = UUID.fromString(next); - this.cachedPlayerNameUUIDs.put(uuid, resolvedName); - } catch (Exception e) { - } - next = resolvedName; - } else if (this.cachedPlayerNameUUIDs.containsKey(next)) - next = this.cachedPlayerNameUUIDs.get(next); - } - if (!perms.equals("none")) { - sbuild.append(","); - - if (random) { - random = false; - next = "&2" + next + "&r"; - } else { - random = true; - next = "&3" + next + "&r"; - } - sbuild.append(ConvertToRaw(next, perms)); - } - } - } - } - - sbuild.append("]"); - return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); - } - - protected String ConvertToRaw(String playerName, String perms) { - if (perms.contains(" ")) { - String[] splited = perms.split(" "); - int i = 0; - perms = ""; - for (String one : splited) { - i++; - perms += one + " "; - if (i >= 5) { - i = 0; - perms += "\n"; - } - } - } - return "{\"text\":\"[" + playerName + "]\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + perms + "\"}]}}}"; - } - - public String listGroupFlags() { - StringBuilder sbuild = new StringBuilder(); - Set set = groupFlags.keySet(); - synchronized (set) { - Iterator it = set.iterator(); - while (it.hasNext()) { - String next = it.next(); - String perms = listGroupFlags(next); - if (!perms.equals("none")) { - sbuild - .append(next) - .append("[") - .append(ChatColor.DARK_AQUA) - .append(perms) - .append(ChatColor.RED) - .append("] "); - } - } - } - return sbuild.toString(); - } - - public String listGroupFlags(String group) { - group = group.toLowerCase(); - if (groupFlags.containsKey(group)) { - StringBuilder sbuild = new StringBuilder(); - Map get = groupFlags.get(group); - Set> set = get.entrySet(); - synchronized (get) { - Iterator> it = set.iterator(); - while (it.hasNext()) { - Entry next = it.next(); - if (next.getValue()) { - sbuild.append("&2").append("+").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } else { - sbuild.append("&3").append("-").append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } - } - } - if (sbuild.length() == 0) { - groupFlags.remove(group); - sbuild.append("none"); - } - return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); - } - return "none"; - } - - public void clearFlags() { - groupFlags.clear(); - playerFlags.clear(); - cuboidFlags.clear(); - } - - public void printFlags(Player player) { - Residence.getInstance().msg(player, lm.General_ResidenceFlags, listFlags()); - Residence.getInstance().msg(player, lm.General_PlayersFlags, listPlayerFlags(player.getName())); - Residence.getInstance().msg(player, lm.General_GroupFlags, listGroupFlags()); - Residence.getInstance().msg(player, lm.General_OthersFlags, listOtherPlayersFlags(player.getName())); - } - - public void copyUserPermissions(String fromUser, String toUser) { - Map get = this.getPlayerFlags(fromUser, false); - if (get != null) { - Map targ = this.getPlayerFlags(toUser, true); - for (Entry entry : get.entrySet()) { - targ.put(entry.getKey(), entry.getValue()); - } - } - } - - @Deprecated //Seemed to be a duplicate function of removeAllPlayerFlags()... deprecating - public void clearPlayersFlags(String user) { - this.removeAllPlayerFlags(user); - } - - public void setParent(FlagPermissions p) { - parent = p; - } - - public FlagPermissions getParent() { - return parent; - } -} +package com.bekvon.bukkit.residence.protection; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; + +public class FlagPermissions { + + protected static ArrayList validFlags = new ArrayList<>(); + protected static ArrayList validPlayerFlags = new ArrayList<>(); + protected static ArrayList validAreaFlags = new ArrayList<>(); + final static Map matUseFlagList = new EnumMap<>(Material.class); + protected Map cachedPlayerNameUUIDs = new HashMap(); + protected Map> playerFlags = new HashMap>(); + protected Map> groupFlags = new HashMap>(); + protected Map cuboidFlags = new HashMap(); + protected FlagPermissions parent; + protected static HashMap> validFlagGroups = new HashMap<>(); + + public FlagPermissions() { + cuboidFlags = Collections.synchronizedMap(new HashMap()); + playerFlags = Collections.synchronizedMap(new HashMap>()); + groupFlags = Collections.synchronizedMap(new HashMap>()); + cachedPlayerNameUUIDs = Collections.synchronizedMap(new HashMap()); + } + + public static enum FlagCombo { + OnlyTrue, OnlyFalse, TrueOrNone, FalseOrNone + } + + public static enum FlagState { + TRUE, FALSE, NEITHER, INVALID + } + + public static void addMaterialToUseFlag(Material mat, Flags flag) { + matUseFlagList.put(mat, flag); + } + + public static void removeMaterialFromUseFlag(Material mat) { + matUseFlagList.remove(mat); + } + + public static EnumMap getMaterialUseFlagList() { + return (EnumMap) matUseFlagList; + } + + public static void addFlag(Flags flag) { + addFlag(flag.name()); + } + + public static void addFlag(String flag) { + flag = flag.toLowerCase(); + if (!validFlags.contains(flag)) { + validFlags.add(flag); + } + if (validFlagGroups.containsKey(flag)) { + validFlagGroups.remove(flag); + } + } + + public static void addPlayerOrGroupOnlyFlag(Flags flag) { + addPlayerOrGroupOnlyFlag(flag.name()); + } + + public static void addPlayerOrGroupOnlyFlag(String flag) { + flag = flag.toLowerCase(); + if (!validPlayerFlags.contains(flag)) { + validPlayerFlags.add(flag); + } + if (validFlagGroups.containsKey(flag)) { + validFlagGroups.remove(flag); + } + } + + public static void addResidenceOnlyFlag(Flags flag) { + addResidenceOnlyFlag(flag.name()); + } + + public static void addResidenceOnlyFlag(String flag) { + flag = flag.toLowerCase(); + if (!validAreaFlags.contains(flag)) { + validAreaFlags.add(flag); + } + if (validFlagGroups.containsKey(flag)) { + validFlagGroups.remove(flag); + } + } + + public static void addFlagToFlagGroup(String group, String flag) { + if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { + if (!validFlagGroups.containsKey(group)) { + validFlagGroups.put(group, new ArrayList()); + } + ArrayList flags = validFlagGroups.get(group); + flags.add(flag); + } + } + + public static void removeFlagFromFlagGroup(String group, String flag) { + if (validFlagGroups.containsKey(group)) { + ArrayList flags = validFlagGroups.get(group); + flags.remove(flag); + if (flags.isEmpty()) { + validFlagGroups.remove(group); + } + } + } + + public static boolean flagGroupExists(String group) { + return validFlagGroups.containsKey(group); + } + + public static void initValidFlags() { + validAreaFlags.clear(); + validPlayerFlags.clear(); + validFlags.clear(); + validFlagGroups.clear(); + + for (Flags flag : Flags.values()) { + switch (flag.getFlagMode()) { + case Both: + addFlag(flag); + break; + case Player: + addPlayerOrGroupOnlyFlag(flag); + break; + case Residence: + addResidenceOnlyFlag(flag); + break; + default: + break; + } + } + + Residence.getInstance().getConfigManager().UpdateGroupedFlagsFile(); + + // All these flags are moved to flags.yml as of 2.9.11.0 version for option to customize them +// addFlagToFlagGroup("redstone", "note"); +// addFlagToFlagGroup("redstone", "pressure"); +// addFlagToFlagGroup("redstone", "lever"); +// addFlagToFlagGroup("redstone", "button"); +// addFlagToFlagGroup("redstone", "diode"); +// addFlagToFlagGroup("craft", "brew"); +// addFlagToFlagGroup("craft", "table"); +// addFlagToFlagGroup("craft", "enchant"); +// addFlagToFlagGroup("trusted", "use"); +// addFlagToFlagGroup("trusted", "tp"); +// addFlagToFlagGroup("trusted", "build"); +// addFlagToFlagGroup("trusted", "container"); +// addFlagToFlagGroup("trusted", "bucket"); +// addFlagToFlagGroup("trusted", "move"); +// addFlagToFlagGroup("trusted", "leash"); +// addFlagToFlagGroup("trusted", "animalkilling"); +// addFlagToFlagGroup("trusted", "mobkilling"); +// addFlagToFlagGroup("trusted", "shear"); +// addFlagToFlagGroup("trusted", "chat"); +// addFlagToFlagGroup("fire", "ignite"); +// addFlagToFlagGroup("fire", "firespread"); + + addMaterialToUseFlag(Material.DIODE, Flags.diode); + addMaterialToUseFlag(Material.DIODE_BLOCK_OFF, Flags.diode); + addMaterialToUseFlag(Material.DIODE_BLOCK_ON, Flags.diode); + addMaterialToUseFlag(Material.REDSTONE_COMPARATOR, Flags.diode); + addMaterialToUseFlag(Material.REDSTONE_COMPARATOR_OFF, Flags.diode); + addMaterialToUseFlag(Material.REDSTONE_COMPARATOR_ON, Flags.diode); + addMaterialToUseFlag(Material.DAYLIGHT_DETECTOR, Flags.diode); + addMaterialToUseFlag(Material.WORKBENCH, Flags.table); + addMaterialToUseFlag(Material.WOODEN_DOOR, Flags.door); + + Residence.getInstance().getNms().addDefaultFlags(matUseFlagList); + + addMaterialToUseFlag(Material.FENCE_GATE, Flags.door); + addMaterialToUseFlag(Material.NETHER_FENCE, Flags.door); + addMaterialToUseFlag(Material.TRAP_DOOR, Flags.door); + addMaterialToUseFlag(Material.ENCHANTMENT_TABLE, Flags.enchant); + addMaterialToUseFlag(Material.STONE_BUTTON, Flags.button); + addMaterialToUseFlag(Material.LEVER, Flags.lever); + addMaterialToUseFlag(Material.BED_BLOCK, Flags.bed); + addMaterialToUseFlag(Material.BREWING_STAND, Flags.brew); + addMaterialToUseFlag(Material.CAKE, Flags.cake); + addMaterialToUseFlag(Material.NOTE_BLOCK, Flags.note); + addMaterialToUseFlag(Material.DRAGON_EGG, Flags.egg); + addMaterialToUseFlag(Material.COMMAND, Flags.commandblock); + addMaterialToUseFlag(Material.WOOD_BUTTON, Flags.button); + addMaterialToUseFlag(Material.ANVIL, Flags.anvil); + addMaterialToUseFlag(Material.FLOWER_POT, Flags.flowerpot); + addMaterialToUseFlag(Material.BEACON, Flags.beacon); + addMaterialToUseFlag(Material.JUKEBOX, Flags.container); + addMaterialToUseFlag(Material.CHEST, Flags.container); + addMaterialToUseFlag(Material.TRAPPED_CHEST, Flags.container); + addMaterialToUseFlag(Material.HOPPER, Flags.container); + addMaterialToUseFlag(Material.DROPPER, Flags.container); + addMaterialToUseFlag(Material.FURNACE, Flags.container); + addMaterialToUseFlag(Material.BURNING_FURNACE, Flags.container); + addMaterialToUseFlag(Material.DISPENSER, Flags.container); + addMaterialToUseFlag(Material.CAKE_BLOCK, Flags.cake); + } + + public static FlagPermissions parseFromConfigNode(String name, ConfigurationSection node) { + FlagPermissions list = new FlagPermissions(); + + if (!node.isConfigurationSection(name)) + return list; + + Set keys = node.getConfigurationSection(name).getKeys(false); + if (keys == null) + return list; + + for (String key : keys) { + boolean state = node.getBoolean(name + "." + key, false); + key = key.toLowerCase(); + Flags f = Flags.getFlag(key); + if (f != null) + f.setEnabled(state); + if (state) { + list.setFlag(key, FlagState.TRUE); + } else { + list.setFlag(key, FlagState.FALSE); + } + } + return list; + } + + public static FlagPermissions parseFromConfigNodeAsList(String node, String stage) { + FlagPermissions list = new FlagPermissions(); + if (node.equalsIgnoreCase("true")) { + list.setFlag(node, FlagState.valueOf(stage)); + } else { + list.setFlag(node, FlagState.FALSE); + } + + return list; + } + + protected Map getPlayerFlags(String player, boolean allowCreate)//this function works with uuid in string format as well, instead of player name + { + + Map flags = null; + + if (!Residence.getInstance().getConfigManager().isOfflineMode()) { + UUID uuid = null; + if (player.length() == 36) { + try { + uuid = UUID.fromString(player); + } catch (Exception e) { + + } + String resolvedName = Residence.getInstance().getPlayerName(uuid); + if (resolvedName != null) + player = resolvedName; + else if (cachedPlayerNameUUIDs.containsKey(uuid)) + player = cachedPlayerNameUUIDs.get(uuid); + } else + uuid = Residence.getInstance().getPlayerUUID(player); + + if (uuid == null) { + Set> values = cachedPlayerNameUUIDs.entrySet(); + for (Entry value : values) { + if (value.getValue().equals(player)) { + uuid = value.getKey(); + break; + } + } + } + + if (uuid != null) + flags = playerFlags.get(uuid.toString()); + if (flags == null) { + flags = playerFlags.get(player); + if (uuid != null && flags != null) { + flags = playerFlags.remove(player); + playerFlags.put(uuid.toString(), flags); + cachedPlayerNameUUIDs.put(uuid, player); + } + } else + cachedPlayerNameUUIDs.put(uuid, player); + + if (flags == null && allowCreate) { + if (uuid != null) { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(uuid.toString(), flags); + cachedPlayerNameUUIDs.put(uuid, player); + } else { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(player, flags); + } + } + } else { + for (Entry> one : playerFlags.entrySet()) { + if (!one.getKey().equalsIgnoreCase(player)) + continue; + // Updating players name to correct capitalization + if (!one.getKey().equals(player)) { + Map r = playerFlags.remove(one.getKey()); + playerFlags.put(player, r); + } + flags = one.getValue(); + break; + } + if (flags == null && allowCreate) { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(player, flags); + } + } + return flags; + } + + public boolean setPlayerFlag(String player, String flag, FlagState state) { + Map map = this.getPlayerFlags(player, state != FlagState.NEITHER); + if (map == null) + return true; + if (state == FlagState.FALSE) { + map.put(flag, false); + } else if (state == FlagState.TRUE) { + map.put(flag, true); + } else if (state == FlagState.NEITHER) { + if (map.containsKey(flag)) { + map.remove(flag); + } + } + if (map.isEmpty()) + this.removeAllPlayerFlags(player); + return true; + } + + public void removeAllPlayerFlags(String player) {//this function works with uuid in string format as well, instead of player name + // player = player.toLowerCase(); + + if (!Residence.getInstance().getConfigManager().isOfflineMode()) { + UUID uuid = Residence.getInstance().getPlayerUUID(player); + if (uuid == null) + for (Entry entry : cachedPlayerNameUUIDs.entrySet()) + if (entry.getValue().equals(player)) { + uuid = entry.getKey(); + break; + } + + if (uuid != null) { + playerFlags.remove(uuid.toString()); + cachedPlayerNameUUIDs.remove(uuid); + } + return; + } + playerFlags.remove(player); + cachedPlayerNameUUIDs.remove(player); + + } + + public void removeAllGroupFlags(String group) { + groupFlags.remove(group); + } + + public boolean setGroupFlag(String group, String flag, FlagState state) { + group = group.toLowerCase(); + if (!groupFlags.containsKey(group)) { + groupFlags.put(group, Collections.synchronizedMap(new HashMap())); + } + Map map = groupFlags.get(group); + if (state == FlagState.FALSE) { + map.put(flag, false); + } else if (state == FlagState.TRUE) { + map.put(flag, true); + } else if (state == FlagState.NEITHER) { + if (map.containsKey(flag)) { + map.remove(flag); + } + } + if (map.isEmpty()) { + groupFlags.remove(group); + } + return true; + } + + public boolean setFlag(String flag, FlagState state) { + if (state == FlagState.FALSE) { + cuboidFlags.put(flag, false); + } else if (state == FlagState.TRUE) { + cuboidFlags.put(flag, true); + } else if (state == FlagState.NEITHER) { + if (cuboidFlags.containsKey(flag)) { + cuboidFlags.remove(flag); + } + } + return true; + } + + public static FlagState stringToFlagState(String flagstate) { + if (flagstate.equalsIgnoreCase("true") || flagstate.equalsIgnoreCase("t")) { + return FlagState.TRUE; + } else if (flagstate.equalsIgnoreCase("false") || flagstate.equalsIgnoreCase("f")) { + return FlagState.FALSE; + } else if (flagstate.equalsIgnoreCase("remove") || flagstate.equalsIgnoreCase("r")) { + return FlagState.NEITHER; + } else { + return FlagState.INVALID; + } + } + + public boolean playerHas(Player player, Flags flag, boolean def) { + if (player == null) + return false; + + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(); + return this.playerCheck(player.getName(), flag.getName(), this.groupCheck(group, flag.getName(), this.has(flag, def))); + } + + public boolean playerHas(Player player, String world, Flags flag, boolean def) { + if (player == null) + return false; + + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(world); + return this.playerCheck(player.getName(), flag.getName(), this.groupCheck(group, flag.getName(), this.has(flag, def))); + } + +// public boolean playerHas(String player, String world, Flags flag, boolean def) { +// return playerHas(player, world, flag.getName(), def); +// } + + @Deprecated + public boolean playerHas(String player, String world, String flag, boolean def) { + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(world); + return this.playerCheck(player, flag, this.groupCheck(group, flag, this.has(flag, def))); + } + + public boolean groupHas(String group, String flag, boolean def) { + return this.groupCheck(group, flag, this.has(flag, def)); + } + + private boolean playerCheck(String player, String flag, boolean def) { + Map pmap = this.getPlayerFlags(player, false); + if (pmap != null) { + if (pmap.containsKey(flag)) { + return pmap.get(flag); + } + } + if (parent != null) { + return parent.playerCheck(player, flag, def); + } + return def; + } + + private boolean groupCheck(PermissionGroup group, String flag, boolean def) { + if (group == null) + return def; + return groupCheck(group.getGroupName(), flag, def); + } + + private boolean groupCheck(String group, String flag, boolean def) { + if (groupFlags.containsKey(group)) { + Map gmap = groupFlags.get(group); + if (gmap.containsKey(flag)) { + return gmap.get(flag); + } + } + if (parent != null) { + return parent.groupCheck(group, flag, def); + } + return def; + } + + public boolean has(Flags flag, FlagCombo f) { + switch (f) { + case FalseOrNone: + return !has(flag, false); + case OnlyFalse: + return !has(flag, true); + case OnlyTrue: + return has(flag, false); + case TrueOrNone: + return has(flag, true); + default: + return false; + } + } + + public boolean has(Flags flag, boolean def) { + return has(flag, def, true); + } + + public boolean has(Flags flag, boolean def, boolean checkParent) { + if (cuboidFlags.containsKey(flag.getName())) { + return cuboidFlags.get(flag.getName()); + } + if (checkParent && parent != null) { + return parent.has(flag, def); + } + return def; + } + + @Deprecated + public boolean has(String flag, boolean def) { + return has(flag, def, true); + } + + @Deprecated + public boolean has(String flag, boolean def, boolean checkParent) { + if (cuboidFlags.containsKey(flag)) { + return cuboidFlags.get(flag); + } + if (checkParent && parent != null) { + return parent.has(flag, def); + } + return def; + } + + public boolean isPlayerSet(String player, String flag) { + Map flags = this.getPlayerFlags(player, false); + if (flags == null) + return false; + return flags.containsKey(flag); + } + + public boolean inheritanceIsPlayerSet(String player, String flag) { + Map flags = this.getPlayerFlags(player, false); + if (flags == null) { + return parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); + } + return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); + } + + public boolean isGroupSet(String group, String flag) { + group = group.toLowerCase(); + Map flags = groupFlags.get(group); + if (flags == null) { + return false; + } + return flags.containsKey(flag); + } + + public boolean inheritanceIsGroupSet(String group, String flag) { + group = group.toLowerCase(); + Map flags = groupFlags.get(group); + if (flags == null) { + return parent == null ? false : parent.inheritanceIsGroupSet(group, flag); + } + return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsGroupSet(group, flag); + } + + public boolean isSet(String flag) { + return cuboidFlags.containsKey(flag); + } + + public boolean inheritanceIsSet(String flag) { + return cuboidFlags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsSet(flag); + } + + public boolean checkValidFlag(String flag, boolean globalflag) { + if (validFlags.contains(flag)) { + return true; + } + if (globalflag) { + if (validAreaFlags.contains(flag)) { + return true; + } + } else { + if (validPlayerFlags.contains(flag)) { + return true; + } + } + return false; + } + + public Map save() { + Map root = new LinkedHashMap<>(); +// root.put("LastKnownPlayerNames", cachedPlayerNameUUIDs); + + // Putting uuid's to main cache for later save + Residence.getInstance().addCachedPlayerNameUUIDs(cachedPlayerNameUUIDs); + + root.put("PlayerFlags", playerFlags); + if (!groupFlags.isEmpty()) + root.put("GroupFlags", groupFlags); + + // Cloning map to fix issue for yml anchors being created + root.put("AreaFlags", new HashMap(cuboidFlags)); + + return root; + } + + public static FlagPermissions load(Map root) throws Exception { + FlagPermissions newperms = new FlagPermissions(); + return FlagPermissions.load(root, newperms); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + protected static FlagPermissions load(Map root, FlagPermissions newperms) throws Exception { + if (root.containsKey("LastKnownPlayerNames")) + newperms.cachedPlayerNameUUIDs = (Map) root.get("LastKnownPlayerNames"); + + if (root.containsKey("PlayerFlags")) + newperms.playerFlags = (Map) root.get("PlayerFlags"); + + for (Entry> one : newperms.playerFlags.entrySet()) { + if (one.getKey().length() != 32) + continue; + + try { + UUID uuid = UUID.fromString(one.getKey()); + String name = Residence.getInstance().getCachedPlayerNameUUIDs().get(uuid); + newperms.cachedPlayerNameUUIDs.put(uuid, name); + } catch (Exception e) { + continue; + } + + } + + if (root.containsKey("GroupFlags")) + newperms.groupFlags = (Map) root.get("GroupFlags"); + + if (root.containsKey("AreaFlags")) { + newperms.cuboidFlags = (Map) root.get("AreaFlags"); + } else + newperms.cuboidFlags = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags().getFlags(); + + String ownerName = null; + String uuid = null; + + if (root.containsKey("OwnerLastKnownName")) { + ownerName = (String) root.get("OwnerLastKnownName"); + uuid = (String) root.get("OwnerUUID"); + } + + if (Residence.getInstance().getConfigManager().isOfflineMode()) + newperms.convertFlagsUUIDsToPlayerNames(); + else + newperms.convertPlayerNamesToUUIDs(ownerName, uuid); + + return newperms; + } + + private void convertFlagsUUIDsToPlayerNames() { + HashMap converts = new HashMap<>(); + for (String keyset : playerFlags.keySet()) { + if (keyset.length() == 36) { + String uuid = keyset; + if (uuid.equalsIgnoreCase(Residence.getInstance().getServerLandUUID())) + converts.put(uuid, Residence.getInstance().getServerLandname()); + else { + String name = Residence.getInstance().getPlayerName(uuid); + if (name != null) + converts.put(uuid, name); + } + } + } + + for (Entry one : converts.entrySet()) { + if (playerFlags.containsKey(one.getKey())) { + Map replace = playerFlags.get(one.getKey()); + playerFlags.remove(one.getKey()); + playerFlags.put(one.getValue(), replace); + } + } + + } + + private void convertPlayerNamesToUUIDs(String OwnerName, String owneruuid) { + HashMap converts = new HashMap<>(); + + List Toremove = new ArrayList(); + + for (String keyset : playerFlags.keySet()) { + if (keyset.length() != 36) { + String uuid = null; + if (OwnerName != null && OwnerName.equals(keyset) && !owneruuid.equals(Residence.getInstance().getTempUserUUID())) + uuid = owneruuid; + else + uuid = Residence.getInstance().getPlayerUUIDString(keyset); + // if (OwnerName.equals(keyset)) { + if (uuid != null) + converts.put(keyset, uuid); + else if (OwnerName != null && !OwnerName.equals(keyset)) + Toremove.add(keyset); + // } + } else { + String pname = Residence.getInstance().getPlayerName(keyset); + if (pname != null) { + try { + UUID uuid = UUID.fromString(keyset); + this.cachedPlayerNameUUIDs.put(uuid, pname); + } catch (Exception e) { + } + } + } + } + for (String one : Toremove) { + playerFlags.remove(one); + } + for (Entry convert : converts.entrySet()) { + playerFlags.put(convert.getValue(), playerFlags.remove(convert.getKey())); + try { + UUID uuid = UUID.fromString(convert.getValue()); + cachedPlayerNameUUIDs.put(uuid, convert.getKey()); + } catch (Exception e) { + } + } + + } + + public String listFlags() { + return listFlags(0, 0); + } + + public String listFlags(Integer split) { + return listFlags(split, 0); + } + + public String listFlags(Integer split, Integer totalShow) { + StringBuilder sbuild = new StringBuilder(); + Set> set = cuboidFlags.entrySet(); + synchronized (set) { + Iterator> it = set.iterator(); + int i = -1; + int t = 0; + while (it.hasNext()) { + i++; + t++; + Entry next = it.next(); + + if (totalShow > 0 && t > totalShow) { + break; + } + + if (split > 0 && i >= split) { + i = 0; + sbuild.append("\n"); + } + + if (next.getValue()) { + sbuild.append("&2").append("+").append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } else { + sbuild.append("&3").append("-").append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } + + } + } + if (sbuild.length() == 0) { + sbuild.append("none"); + } + return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); + } + + public Map getFlags() { + return cuboidFlags; + } + + public Map getPlayerFlags(String player) { + return this.getPlayerFlags(player, false); + } + + public Set getposibleFlags() { + Set t = new HashSet(); + t.addAll(FlagPermissions.validFlags); + t.addAll(FlagPermissions.validPlayerFlags); + return t; + } + + public ArrayList getposibleAreaFlags() { + return FlagPermissions.validAreaFlags; + } + + public List getPosibleFlags(Player player, boolean residence, boolean resadmin) { + List flags = new ArrayList(); + for (Entry one : Residence.getInstance().getPermissionManager().getAllFlags().getFlags().entrySet()) { + if (!one.getValue() && !resadmin && !player.hasPermission(new Permission("residence.flag." + one.getKey().toLowerCase(), PermissionDefault.FALSE))) + continue; + + if (!residence && !getposibleFlags().contains(one.getKey())) + continue; + + flags.add(one.getKey()); + } + + return flags; + } + + public String listPlayerFlags(String player) { + Map flags = this.getPlayerFlags(player, false); + if (flags != null) { + return this.printPlayerFlags(flags); + } + return "none"; + } + + protected String printPlayerFlags(Map flags) { + StringBuilder sbuild = new StringBuilder(); + if (flags == null) + return "none"; + Set> set = flags.entrySet(); + synchronized (flags) { + Iterator> it = set.iterator(); + while (it.hasNext()) { + Entry next = it.next(); + if (next.getValue()) { + sbuild.append("&2").append("+").append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } else { + sbuild.append("&3").append("-").append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } + } + } + if (sbuild.length() == 0) { + sbuild.append("none"); + } + return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); + } + + public String listOtherPlayersFlags(String player) { +// player = player.toLowerCase(); + String uuids = Residence.getInstance().getPlayerUUIDString(player); + StringBuilder sbuild = new StringBuilder(); + Set>> set = playerFlags.entrySet(); + synchronized (set) { + Iterator>> it = set.iterator(); + while (it.hasNext()) { + Entry> nextEnt = it.next(); + String next = nextEnt.getKey(); + if (!Residence.getInstance().getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getInstance().getConfigManager().isOfflineMode() && !next + .equals(player)) { + String perms = printPlayerFlags(nextEnt.getValue()); + if (next.length() == 36) { + String resolvedName = Residence.getInstance().getPlayerName(next); + if (resolvedName != null) { + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { + } + next = resolvedName; + } else if (this.cachedPlayerNameUUIDs.containsKey(next)) + next = this.cachedPlayerNameUUIDs.get(next); + } + if (!perms.equals("none")) { + sbuild.append(next).append(ChatColor.WHITE).append("[").append(perms).append(ChatColor.WHITE).append("] "); + } + } + } + } + return sbuild.toString(); + } + + public String listPlayersFlags() { + StringBuilder sbuild = new StringBuilder(); + Set>> set = playerFlags.entrySet(); + synchronized (set) { + Iterator>> it = set.iterator(); + while (it.hasNext()) { + Entry> nextEnt = it.next(); + String next = nextEnt.getKey(); + + String perms = printPlayerFlags(nextEnt.getValue()); + if (next.length() == 36) { + String resolvedName = Residence.getInstance().getPlayerName(next); + if (resolvedName != null) { + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { + } + next = resolvedName; + } else if (this.cachedPlayerNameUUIDs.containsKey(next)) + next = this.cachedPlayerNameUUIDs.get(next); + } + + if (next.equalsIgnoreCase(Residence.getInstance().getServerLandname())) + continue; + + if (!perms.equals("none")) { + sbuild.append(next).append(ChatColor.WHITE).append("[").append(perms).append(ChatColor.WHITE).append("] "); + } + } + } + return sbuild.toString(); + } + + public String listPlayersFlagsRaw(String player, String text) { + StringBuilder sbuild = new StringBuilder(); + + sbuild.append("[\"\","); + sbuild.append("{\"text\":\"" + text + "\"}"); + + Set>> set = playerFlags.entrySet(); + synchronized (set) { + Iterator>> it = set.iterator(); + boolean random = true; + while (it.hasNext()) { + Entry> nextEnt = it.next(); + String next = nextEnt.getKey(); + + String perms = printPlayerFlags(nextEnt.getValue()); + if (next.length() == 36) { + String resolvedName = Residence.getInstance().getPlayerName(next); + if (resolvedName != null) { + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { + } + next = resolvedName; + } else if (this.cachedPlayerNameUUIDs.containsKey(next)) + next = this.cachedPlayerNameUUIDs.get(next); + } + + if (next.equalsIgnoreCase(Residence.getInstance().getServerLandname())) + continue; + + if (!perms.equals("none")) { + sbuild.append(","); + + if (random) { + random = false; + if (player.equals(next)) + next = "&4" + next + "&r"; + else + next = "&2" + next + "&r"; + } else { + random = true; + if (player.equals(next)) + next = "&4" + next + "&r"; + else + next = "&3" + next + "&r"; + } + sbuild.append(ConvertToRaw(next, perms)); + } + } + } + + sbuild.append("]"); + return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); + } + + public String listOtherPlayersFlagsRaw(String text, String player) { +// player = player.toLowerCase(); + String uuids = Residence.getInstance().getPlayerUUIDString(player); + StringBuilder sbuild = new StringBuilder(); + + sbuild.append("[\"\","); + sbuild.append("{\"text\":\"" + text + "\"}"); + + Set>> set = playerFlags.entrySet(); + synchronized (set) { + Iterator>> it = set.iterator(); + boolean random = true; + while (it.hasNext()) { + Entry> nextEnt = it.next(); + String next = nextEnt.getKey(); + if (!Residence.getInstance().getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getInstance().getConfigManager().isOfflineMode() && !next + .equals(player)) { + String perms = printPlayerFlags(nextEnt.getValue()); + if (next.length() == 36) { + String resolvedName = Residence.getInstance().getPlayerName(next); + if (resolvedName != null) { + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { + } + next = resolvedName; + } else if (this.cachedPlayerNameUUIDs.containsKey(next)) + next = this.cachedPlayerNameUUIDs.get(next); + } + if (!perms.equals("none")) { + sbuild.append(","); + + if (random) { + random = false; + next = "&2" + next + "&r"; + } else { + random = true; + next = "&3" + next + "&r"; + } + sbuild.append(ConvertToRaw(next, perms)); + } + } + } + } + + sbuild.append("]"); + return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); + } + + protected String ConvertToRaw(String playerName, String perms) { + if (perms.contains(" ")) { + String[] splited = perms.split(" "); + int i = 0; + perms = ""; + for (String one : splited) { + i++; + perms += one + " "; + if (i >= 5) { + i = 0; + perms += "\n"; + } + } + } + return "{\"text\":\"[" + playerName + "]\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + perms + "\"}]}}}"; + } + + public String listGroupFlags() { + StringBuilder sbuild = new StringBuilder(); + Set set = groupFlags.keySet(); + synchronized (set) { + Iterator it = set.iterator(); + while (it.hasNext()) { + String next = it.next(); + String perms = listGroupFlags(next); + if (!perms.equals("none")) { + sbuild + .append(next) + .append("[") + .append(ChatColor.DARK_AQUA) + .append(perms) + .append(ChatColor.RED) + .append("] "); + } + } + } + return sbuild.toString(); + } + + public String listGroupFlags(String group) { + group = group.toLowerCase(); + if (groupFlags.containsKey(group)) { + StringBuilder sbuild = new StringBuilder(); + Map get = groupFlags.get(group); + Set> set = get.entrySet(); + synchronized (get) { + Iterator> it = set.iterator(); + while (it.hasNext()) { + Entry next = it.next(); + if (next.getValue()) { + sbuild.append("&2").append("+").append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } else { + sbuild.append("&3").append("-").append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } + } + } + if (sbuild.length() == 0) { + groupFlags.remove(group); + sbuild.append("none"); + } + return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); + } + return "none"; + } + + public void clearFlags() { + groupFlags.clear(); + playerFlags.clear(); + cuboidFlags.clear(); + } + + public void printFlags(Player player) { + Residence.getInstance().msg(player, lm.General_ResidenceFlags, listFlags()); + Residence.getInstance().msg(player, lm.General_PlayersFlags, listPlayerFlags(player.getName())); + Residence.getInstance().msg(player, lm.General_GroupFlags, listGroupFlags()); + Residence.getInstance().msg(player, lm.General_OthersFlags, listOtherPlayersFlags(player.getName())); + } + + public void copyUserPermissions(String fromUser, String toUser) { + Map get = this.getPlayerFlags(fromUser, false); + if (get != null) { + Map targ = this.getPlayerFlags(toUser, true); + for (Entry entry : get.entrySet()) { + targ.put(entry.getKey(), entry.getValue()); + } + } + } + + @Deprecated //Seemed to be a duplicate function of removeAllPlayerFlags()... deprecating + public void clearPlayersFlags(String user) { + this.removeAllPlayerFlags(user); + } + + public void setParent(FlagPermissions p) { + parent = p; + } + + public FlagPermissions getParent() { + return parent; + } + +} diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 4daaea938..6a0238184 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.Map.Entry; import java.util.TreeMap; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; @@ -20,17 +21,37 @@ public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); + private ConcurrentHashMap playersUuid = new ConcurrentHashMap(); private Residence plugin; public PlayerManager(Residence plugin) { this.plugin = plugin; } + public void addPlayer(ResidencePlayer resPlayer) { + if (resPlayer == null) + return; + addPlayer(resPlayer.getPlayerName(), resPlayer.getUuid(), resPlayer); + } + + public void addPlayer(Player player, ResidencePlayer resPlayer) { + if (player == null) + return; + addPlayer(player.getName(), player.getUniqueId(), resPlayer); + } + + public void addPlayer(String name, UUID uuid, ResidencePlayer resPlayer) { + if (name != null) + players.put(name.toLowerCase(), resPlayer); + if (uuid != null) + playersUuid.put(uuid, resPlayer); + } + public ResidencePlayer playerJoin(Player player) { - ResidencePlayer resPlayer = players.get(player.getName().toLowerCase()); + ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId()); if (resPlayer == null) { resPlayer = new ResidencePlayer(player); - players.put(player.getName().toLowerCase(), resPlayer); + addPlayer(resPlayer); } else { resPlayer.updatePlayer(player); resPlayer.RecalculatePermissions(); @@ -38,20 +59,36 @@ public ResidencePlayer playerJoin(Player player) { return resPlayer; } - public ResidencePlayer playerJoin(String player) { - if (!players.containsKey(player.toLowerCase())) { - ResidencePlayer resPlayer = new ResidencePlayer(player); - players.put(player.toLowerCase(), resPlayer); - return resPlayer; +// public ResidencePlayer playerJoin(String player) { +// if (!players.containsKey(player.toLowerCase())) { +// ResidencePlayer resPlayer = new ResidencePlayer(player); +// players.put(player.toLowerCase(), resPlayer); +// return resPlayer; +// } +// return null; +// } + + @Override + public ArrayList getResidenceList(UUID uuid) { + ArrayList temp = new ArrayList(); +// playerJoin(player, false); + ResidencePlayer resPlayer = playersUuid.get(uuid); + if (resPlayer != null) { + for (ClaimedResidence one : resPlayer.getResList()) { + temp.add(one.getName()); + } + return temp; } - return null; + return temp; } @Override - public ArrayList getResidenceList(String player) { + public ArrayList getResidenceList(String name) { + Player player = Bukkit.getPlayer(name); + if (player != null) + return getResidenceList(player.getUniqueId()); ArrayList temp = new ArrayList(); -// playerJoin(player, false); - ResidencePlayer resPlayer = players.get(player.toLowerCase()); + ResidencePlayer resPlayer = players.get(name.toLowerCase()); if (resPlayer != null) { for (ClaimedResidence one : resPlayer.getResList()) { temp.add(one.getName()); @@ -182,14 +219,13 @@ public ResidencePlayer getResidencePlayer(Player player) { ResidencePlayer resPlayer = null; if (player == null) return null; - if (players.containsKey(player.getName().toLowerCase())) { - resPlayer = players.get(player.getName().toLowerCase()); + if (playersUuid.containsKey(player.getUniqueId())) { + resPlayer = playersUuid.get(player.getUniqueId()); resPlayer.updatePlayer(player); resPlayer.RecalculatePermissions(); } else { resPlayer = playerJoin(player); } - return resPlayer; } @@ -207,9 +243,10 @@ public ResidencePlayer getResidencePlayer(String player, boolean recalculate) { resPlayer = players.get(player.toLowerCase()); if (recalculate || resPlayer.isOnline()) resPlayer.RecalculatePermissions(); - } else { - resPlayer = playerJoin(player); } +// else { +// resPlayer = playerJoin(player); +// } return resPlayer; } @@ -230,11 +267,18 @@ public void addResidence(String player, ClaimedResidence residence) { } public void removeResFromPlayer(OfflinePlayer player, String residence) { - removeResFromPlayer(player.getName(), residence); + ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId()); + if (resPlayer != null) { + resPlayer.removeResidence(residence); + } } public void removeResFromPlayer(Player player, String residence) { - removeResFromPlayer(player.getName(), residence); + ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId()); + if (resPlayer != null) { + resPlayer.removeResidence(residence); + } + return; } public void removeResFromPlayer(String player, String residence) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index bc45c4a52..ece035942 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1,1155 +1,1155 @@ -package com.bekvon.bukkit.residence.protection; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.SortedMap; -import java.util.TreeMap; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.api.ResidenceInterface; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.Visualizer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.economy.rent.RentableLand; -import com.bekvon.bukkit.residence.economy.rent.RentedLand; -import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; -import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; -import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; -import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; -import com.bekvon.bukkit.residence.utils.GetTime; -import com.bekvon.bukkit.residence.utils.RawMessage; -import com.griefcraft.cache.ProtectionCache; -import com.griefcraft.lwc.LWC; -import com.griefcraft.model.Protection; - -public class ResidenceManager implements ResidenceInterface { - protected SortedMap residences; - protected Map>> chunkResidences; - protected List shops = new ArrayList(); - private Residence plugin; - - public ResidenceManager(Residence plugin) { - residences = new TreeMap<>(); - chunkResidences = new HashMap<>(); - this.plugin = plugin; - } - - public boolean isOwnerOfLocation(Player player, Location loc) { - ClaimedResidence res = getByLoc(loc); - if (res != null && res.isOwner(player)) - return true; - return false; - } - - @Override - public ClaimedResidence getByLoc(Location loc) { - if (loc == null) - return null; - World world = loc.getWorld(); - if (world == null) - return null; - String worldName = world.getName(); - if (worldName == null) - return null; - ClaimedResidence res = null; - ChunkRef chunk = new ChunkRef(loc); - if (!chunkResidences.containsKey(worldName)) - return null; - - Map> ChunkMap = chunkResidences.get(worldName); - - if (ChunkMap.containsKey(chunk)) { - for (ClaimedResidence entry : ChunkMap.get(chunk)) { - if (entry == null) - continue; - if (entry.containsLoc(loc)) { - res = entry; - break; - } - } - } - - if (res == null) - return null; - - ClaimedResidence subres = res.getSubzoneByLoc(loc); - if (subres == null) - return res; - return subres; - } - - @Override - public ClaimedResidence getByName(String name) { - if (name == null) { - return null; - } - String[] split = name.split("\\."); - if (split.length == 1) { - return residences.get(name.toLowerCase()); - } - ClaimedResidence res = residences.get(split[0].toLowerCase()); - for (int i = 1; i < split.length; i++) { - if (res != null) { - res = res.getSubzone(split[i].toLowerCase()); - } else { - return null; - } - } - return res; - } - - @Override - public String getSubzoneNameByRes(ClaimedResidence res) { - Set> set = residences.entrySet(); - for (Entry check : set) { - if (check.getValue() == res) { - return check.getKey(); - } - String n = check.getValue().getSubzoneNameByRes(res); - if (n != null) { - return n; - } - } - return null; - } - - @Override - public void addShop(String resName) { - ClaimedResidence res = getByName(resName); - if (res != null) - shops.add(res); - } - - @Override - public void addShop(ClaimedResidence res) { - shops.add(res); - } - - @Override - public void removeShop(ClaimedResidence res) { - shops.remove(res); - } - - @Override - public void removeShop(String resName) { - for (ClaimedResidence one : shops) { - if (one.getName().equalsIgnoreCase(resName)) { - shops.remove(one); - break; - } - } - } - - @Override - public List getShops() { - return shops; - } - - @Override - public boolean addResidence(String name, Location loc1, Location loc2) { - return this.addResidence(name, plugin.getServerLandname(), loc1, loc2); - } - - @Override - public boolean addResidence(String name, String owner, Location loc1, Location loc2) { - return this.addResidence(null, owner, name, loc1, loc2, true); - } - - @Override - public boolean addResidence(Player player, String name, Location loc1, Location loc2, boolean resadmin) { - return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin); - } - - public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { - if (!plugin.validName(name)) { - plugin.msg(player, lm.Invalid_NameCharacters); - return false; - } - if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { - plugin.msg(player, lm.Select_Points); - return false; - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - - PermissionGroup group = rPlayer.getGroup(); -// PermissionGroup group = plugin.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); - if (!resadmin && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create", false)) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - - if (!resadmin && !plugin.hasPermission(player, "residence.create")) { - return false; - } - - if (rPlayer.getResAmount() >= rPlayer.getMaxRes() && !resadmin) { - plugin.msg(player, lm.Residence_TooMany); - return false; - } - - CuboidArea newArea = new CuboidArea(loc1, loc2); - ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName(), plugin); - newRes.getPermissions().applyDefaultFlags(); - newRes.setEnterMessage(group.getDefaultEnterMessage()); - newRes.setLeaveMessage(group.getDefaultLeaveMessage()); - newRes.setName(name); - newRes.setCreateTime(); - - if (residences.containsKey(name.toLowerCase())) { - plugin.msg(player, lm.Residence_AlreadyExists, residences.get(name.toLowerCase()).getResidenceName()); - return false; - } - - newRes.BlockSellPrice = group.getSellPerBlock(); - - if (!newRes.addArea(player, newArea, "main", resadmin, false)) - return false; - - ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - if (!newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { - double chargeamount = Math.ceil(newArea.getSize() * group.getCostPerBlock()); - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) - return false; - } - - residences.put(name.toLowerCase(), newRes); - - calculateChunks(name); - plugin.getLeaseManager().removeExpireTime(name); - plugin.getPlayerManager().addResidence(newRes.getOwner(), newRes); - - if (player != null) { - Visualizer v = new Visualizer(player); - v.setAreas(newArea); - plugin.getSelectionManager().showBounds(player, v); - plugin.getAutoSelectionManager().getList().remove(player.getName().toLowerCase()); - plugin.msg(player, lm.Area_Create, "main"); - plugin.msg(player, lm.Residence_Create, name); - } - if (plugin.getConfigManager().useLeases()) { - if (player != null) { - plugin.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); - } else { - plugin.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); - } - } - return true; - - } - - public void listResidences(CommandSender sender) { - this.listResidences(sender, sender.getName(), 1); - } - - public void listResidences(CommandSender sender, boolean resadmin) { - this.listResidences(sender, sender.getName(), 1, false, false, resadmin); - } - - public void listResidences(CommandSender sender, String targetplayer, boolean showhidden) { - this.listResidences(sender, targetplayer, 1, showhidden, false, showhidden); - } - - public void listResidences(CommandSender sender, String targetplayer, int page) { - this.listResidences(sender, targetplayer, page, false, false, false); - } - - public void listResidences(CommandSender sender, int page, boolean showhidden) { - this.listResidences(sender, sender.getName(), page, showhidden, false, showhidden); - } - - public void listResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { - this.listResidences(sender, sender.getName(), page, showhidden, onlyHidden, showhidden); - } - - public void listResidences(CommandSender sender, String string, int page, boolean showhidden) { - this.listResidences(sender, string, page, showhidden, false, showhidden); - } - - public void listResidences(CommandSender sender, String targetplayer, int page, boolean showhidden, boolean onlyHidden, boolean resadmin) { - this.listResidences(sender, targetplayer, page, showhidden, onlyHidden, resadmin, null); - } - - public void listResidences(CommandSender sender, String targetplayer, int page, boolean showhidden, boolean onlyHidden, boolean resadmin, World world) { - if (targetplayer == null) - targetplayer = sender.getName(); - if (showhidden && !plugin.isResAdminOn(sender) && !sender.getName().equalsIgnoreCase(targetplayer)) { - showhidden = false; - } else if (sender.getName().equalsIgnoreCase(targetplayer)) - showhidden = true; - boolean hidden = showhidden; - TreeMap ownedResidences = plugin.getPlayerManager().getResidencesMap(targetplayer, hidden, onlyHidden, world); - ownedResidences.putAll(plugin.getRentManager().getRentsMap(targetplayer, onlyHidden, world)); - plugin.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin); - } - - public void listAllResidences(CommandSender sender, int page) { - this.listAllResidences(sender, page, false); - } - - public void listAllResidences(CommandSender sender, int page, boolean showhidden, World world) { - TreeMap list = getFromAllResidencesMap(showhidden, false, world); - plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); - } - - public void listAllResidences(CommandSender sender, int page, boolean showhidden) { - this.listAllResidences(sender, page, showhidden, false); - } - - public void listAllResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { - TreeMap list = getFromAllResidencesMap(showhidden, onlyHidden, null); - plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); - } - - public String[] getResidenceList() { - return this.getResidenceList(true, true).toArray(new String[0]); - } - - public Map getResidenceMapList(String targetplayer, boolean showhidden) { - Map temp = new HashMap(); - for (Entry res : residences.entrySet()) { - if (res.getValue().isOwner(targetplayer)) { - boolean hidden = res.getValue().getPermissions().has("hidden", false); - if ((showhidden) || (!showhidden && !hidden)) { - temp.put(res.getValue().getName().toLowerCase(), res.getValue()); - } - } - } - return temp; - } - - public ArrayList getResidenceList(boolean showhidden, boolean showsubzones) { - return this.getResidenceList(null, showhidden, showsubzones, false); - } - - public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones) { - return this.getResidenceList(targetplayer, showhidden, showsubzones, false, false); - } - - public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean onlyHidden) { - return this.getResidenceList(targetplayer, showhidden, showsubzones, false, onlyHidden); - } - - public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean formattedOutput, boolean onlyHidden) { - ArrayList list = new ArrayList<>(); - for (Entry res : residences.entrySet()) { - this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), res.getValue(), list, formattedOutput, onlyHidden); - } - return list; - } - - public ArrayList getFromAllResidences(boolean showhidden, boolean onlyHidden, World world) { - ArrayList list = new ArrayList<>(); - for (Entry res : residences.entrySet()) { - boolean hidden = res.getValue().getPermissions().has("hidden", false); - if (onlyHidden && !hidden) - continue; - if (world != null && !world.getName().equalsIgnoreCase(res.getValue().getWorld())) - continue; - if ((showhidden) || (!showhidden && !hidden)) { - list.add(res.getValue()); - } - } - return list; - } - - public TreeMap getFromAllResidencesMap(boolean showhidden, boolean onlyHidden, World world) { - TreeMap list = new TreeMap(); - for (Entry res : residences.entrySet()) { - boolean hidden = res.getValue().getPermissions().has("hidden", false); - if (onlyHidden && !hidden) - continue; - if (world != null && !world.getName().equalsIgnoreCase(res.getValue().getWorld())) - continue; - if ((showhidden) || (!showhidden && !hidden)) { - list.put(res.getKey(), res.getValue()); - } - } - return list; - } - - private void getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, String parentzone, String resname, ClaimedResidence res, - ArrayList list, boolean formattedOutput, boolean onlyHidden) { - boolean hidden = res.getPermissions().has("hidden", false); - - if (onlyHidden && !hidden) - return; - - if ((showhidden) || (!showhidden && !hidden)) { - if (targetplayer == null || res.getPermissions().getOwner().equals(targetplayer)) { - if (formattedOutput) { - list.add(plugin.msg(lm.Residence_List, parentzone, resname, res.getWorld()) + - (hidden ? plugin.msg(lm.Residence_Hidden) : "")); - } else { - list.add(parentzone + resname); - } - } - if (showsubzones) { - for (Entry sz : res.subzones.entrySet()) { - this.getResidenceList(targetplayer, showhidden, showsubzones, parentzone + resname + ".", sz.getKey(), sz.getValue(), list, formattedOutput, - onlyHidden); - } - } - } - } - - public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResidence) { - Set> set = residences.entrySet(); - for (Entry entry : set) { - ClaimedResidence check = entry.getValue(); - if (check != parentResidence && check.checkCollision(newarea)) { - return entry.getKey(); - } - } - return null; - } - - public void removeResidence(String name) { - this.removeResidence(null, name, true); - } - - public void removeResidence(CommandSender sender, String name, boolean resadmin) { - if (sender instanceof Player) - removeResidence((Player) sender, name, resadmin); - else - this.removeResidence(null, name, true); - } - - @SuppressWarnings("deprecation") - public void removeResidence(Player player, String name, boolean resadmin) { - - ClaimedResidence res = this.getByName(name); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - name = res.getName(); - - if (plugin.getConfigManager().isRentPreventRemoval() && !resadmin) { - ClaimedResidence rented = res.getRentedSubzone(); - if (rented != null) { - plugin.msg(player, lm.Residence_CantRemove, res.getName(), rented.getName(), rented.getRentedLand().player); - return; - } - } - - if (player != null && !resadmin) { - if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin && res.getParent() != null && !res.getParent().isOwner(player)) { - plugin.msg(player, lm.General_NoPermission); - return; - } - } - - ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return; - - ClaimedResidence parent = res.getParent(); - if (parent == null) { - removeChunkList(name); - - residences.remove(name.toLowerCase()); - - if (plugin.getConfigManager().isUseClean() && plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) { - for (CuboidArea area : res.getAreaArray()) { - - Location low = area.getLowLoc(); - Location high = area.getHighLoc(); - - if (high.getBlockY() > plugin.getConfigManager().getCleanLevel()) { - - if (low.getBlockY() < plugin.getConfigManager().getCleanLevel()) - low.setY(plugin.getConfigManager().getCleanLevel()); - - World world = low.getWorld(); - - Location temploc = new Location(world, low.getBlockX(), low.getBlockY(), low.getBlockZ()); - - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - temploc.setX(x); - for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { - temploc.setY(y); - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - temploc.setZ(z); - if (plugin.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getTypeId())) { - temploc.getBlock().setTypeId(0); - } - } - } - } - } - } - } - - if (plugin.getConfigManager().isRemoveLwcOnDelete()) - removeLwcFromResidence(player, res); - - plugin.msg(player, lm.Residence_Remove, name); - - } else { - String[] split = name.split("\\."); - if (player != null) { - parent.removeSubzone(player, split[split.length - 1], true); - } else { - parent.removeSubzone(split[split.length - 1]); - } - } - - // plugin.getLeaseManager().removeExpireTime(name); - causing - // concurrent modification exception in lease manager... worked - // around for now - - for (String oneSub : res.getSubzoneList()) { - plugin.getPlayerManager().removeResFromPlayer(res.getOwner(), name + "." + oneSub); - plugin.getRentManager().removeRentable(name + "." + oneSub); - plugin.getTransactionManager().removeFromSale(name + "." + oneSub); - } - - plugin.getPlayerManager().removeResFromPlayer(res.getOwner(), name); - plugin.getRentManager().removeRentable(name); - plugin.getTransactionManager().removeFromSale(name); - - if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { - int chargeamount = (int) Math.ceil(res.getAreaArray()[0].getSize() * res.getBlockSellPrice()); - plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); - } - } - - public void removeLwcFromResidence(final Player player, final ClaimedResidence res) { - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - long time = System.currentTimeMillis(); - LWC lwc = plugin.getLwc(); - if (lwc == null) - return; - if (res == null) - return; - int i = 0; - - ProtectionCache cache = lwc.getProtectionCache(); - - List list = plugin.getConfigManager().getLwcMatList(); - - try { - for (CuboidArea area : res.getAreaArray()) { - Location low = area.getLowLoc(); - Location high = area.getHighLoc(); - World world = low.getWorld(); - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - Block b = world.getBlockAt(x, y, z); - if (!list.contains(b.getType())) - continue; - Protection prot = cache.getProtection(b); - if (prot == null) - continue; - prot.remove(); - i++; - } - } - } - } - } catch (Exception e) { - } - if (i > 0) - plugin.msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); - return; - } - }); - } - - public void removeAllByOwner(String owner) { - ArrayList list = plugin.getPlayerManager().getResidenceList(owner); - for (String oneRes : list) { - removeResidence(null, oneRes, true); - } - } - - public int getOwnedZoneCount(String player) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - return rPlayer.getResAmount(); - } - - public boolean hasMaxZones(String player, int target) { - return getOwnedZoneCount(player) < target; - } - - public void printAreaInfo(String areaname, CommandSender sender) { - printAreaInfo(areaname, sender, false); - } - - public void printAreaInfo(String areaname, CommandSender sender, boolean resadmin) { - ClaimedResidence res = this.getByName(areaname); - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return; - } - - areaname = res.getName(); - - plugin.msg(sender, lm.General_Separator); - - ResidencePermissions perms = res.getPermissions(); - - String resNameOwner = "&e" + plugin.msg(lm.Residence_Line, areaname); - resNameOwner += plugin.msg(lm.General_Owner, perms.getOwner()); - if (plugin.getConfigManager().enableEconomy()) { - if (res.isOwner(sender) || !(sender instanceof Player) || resadmin) - resNameOwner += plugin.msg(lm.Bank_Name, res.getBank().getStoredMoney()); - } - resNameOwner = ChatColor.translateAlternateColorCodes('&', resNameOwner); - - String worldInfo = plugin.msg(lm.General_World, perms.getWorld()); - - if (res.getPermissions().has("hidden", FlagCombo.FalseOrNone) && res.getPermissions().has("coords", FlagCombo.TrueOrNone) || resadmin) { - worldInfo += "&6 (&3"; - CuboidArea area = res.getAreaArray()[0]; - worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); - worldInfo += "&6; &3"; - worldInfo += plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); - worldInfo += "&6)"; - worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); - } - - worldInfo += "\n" + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.createTime)); - - String ResFlagList = perms.listFlags(5); - if (!(sender instanceof Player)) - ResFlagList = perms.listFlags(); - String ResFlagMsg = plugin.msg(lm.General_ResidenceFlags, ResFlagList); - - if (perms.getFlags().size() > 2 && sender instanceof Player) { - ResFlagMsg = plugin.msg(lm.General_ResidenceFlags, perms.listFlags(5, 3)) + "..."; - } - - if (sender instanceof Player) { - RawMessage rm = new RawMessage(); - rm.add(resNameOwner, worldInfo); - rm.show(sender); - - rm.clear(); - - rm.add(ResFlagMsg, ResFlagList); - rm.show(sender); - } else { - plugin.msg(sender, resNameOwner); - plugin.msg(sender, worldInfo); - plugin.msg(sender, ResFlagMsg); - } - - if (!plugin.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) - sender.sendMessage(plugin.msg(lm.General_PlayersFlags, perms.listPlayersFlags())); - else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + perms.listPlayersFlagsRaw(sender.getName(), plugin.msg( - lm.General_PlayersFlags, ""))); - } - - String groupFlags = perms.listGroupFlags(); - if (groupFlags.length() > 0) - plugin.msg(sender, lm.General_GroupFlags, groupFlags); - - String msg = ""; - msg += plugin.msg(lm.General_TotalResSize, res.getTotalSize(), res.getXZSize()); - - plugin.msg(sender, ChatColor.translateAlternateColorCodes('&', msg)); - - if (plugin.getEconomyManager() != null) { - plugin.msg(sender, lm.General_TotalWorth, (int) ((res.getTotalSize() * res.getOwnerGroup().getCostPerBlock()) - * 100) / 100.0, (int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0); - } - - if (res.getSubzonesAmount(false) > 0) - plugin.msg(sender, lm.General_TotalSubzones, res.getSubzonesAmount(false), res.getSubzonesAmount(true)); - - if (plugin.getConfigManager().useLeases() && plugin.getLeaseManager().leaseExpires(areaname)) { - String time = plugin.getLeaseManager().getExpireTime(areaname); - if (time != null) - plugin.msg(sender, lm.Economy_LeaseExpire, time); - } - - if (plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isForRent(areaname) && !plugin.getRentManager().isRented(areaname)) { - String forRentMsg = plugin.msg(lm.Rent_isForRent); - - RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); - StringBuilder rentableString = new StringBuilder(); - if (rentable != null) { - rentableString.append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); - rentableString.append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); - rentableString.append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); - rentableString.append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); - } - if (sender instanceof Player) - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, forRentMsg, rentableString.toString())); - else - plugin.msg(sender, forRentMsg); - } else if (plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isRented(areaname)) { - String RentedMsg = plugin.msg(lm.Residence_RentedBy, plugin.getRentManager().getRentingPlayer(areaname)); - - RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); - RentedLand rented = plugin.getRentManager().getRentedLand(areaname); - - StringBuilder rentableString = new StringBuilder(); - if (rented != null) { - rentableString.append(plugin.msg(lm.Rent_Expire, GetTime.getTime(rented.endTime)) + "\n"); - if (rented.player.equals(sender.getName()) || resadmin || res.isOwner(sender)) - rentableString.append((rented.AutoPay ? plugin.msg(lm.Rent_AutoPayTurnedOn) : plugin.msg(lm.Rent_AutoPayTurnedOff)) - + "\n"); - } - - if (rentable != null) { - rentableString.append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); - rentableString.append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); - rentableString.append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); - rentableString.append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); - } - - if (sender instanceof Player) - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, RentedMsg, rentableString.toString())); - else - plugin.msg(sender, RentedMsg); - } else if (plugin.getTransactionManager().isForSale(areaname)) { - int amount = plugin.getTransactionManager().getSaleAmount(areaname); - String SellMsg = plugin.msg(lm.Economy_LandForSale) + " " + amount; - plugin.msg(sender, SellMsg); - } - - plugin.msg(sender, lm.General_Separator); - } - - public String convertToRaw(String preText, String text, String hover) { - return convertToRaw(preText, text, hover, null); - } - - public String convertToRaw(String preText, String text, String hover, String command) { - StringBuilder msg = new StringBuilder(); - String cmd = ""; - if (command != null) { - cmd = ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/" + command + "\"}"; - } - msg.append("[\"\","); - if (preText != null) - msg.append("{\"text\":\"" + preText + "\"}"); - msg.append("{\"text\":\"" + text + "\"" + cmd + ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + hover + "\"}]}}}"); - msg.append("]"); - return msg.toString(); - } - - public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { - ClaimedResidence reciever = this.getByName(targetArea); - ClaimedResidence source = this.getByName(sourceArea); - if (source == null || reciever == null) { - plugin.msg(reqPlayer, lm.Invalid_Residence); - return; - } - if (!resadmin) { - if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { - plugin.msg(reqPlayer, lm.General_NoPermission); - return; - } - } - reciever.getPermissions().applyTemplate(reqPlayer, source.getPermissions(), resadmin); - } - - public Map save() { - Map worldmap = new LinkedHashMap<>(); - for (World world : plugin.getServ().getWorlds()) { - Map resmap = new LinkedHashMap<>(); - for (Entry res : residences.entrySet()) { - if (!res.getValue().getWorld().equals(world.getName())) - continue; - - try { - resmap.put(res.getValue().getResidenceName(), res.getValue().save()); - } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + " Failed to save residence (" + res.getKey() + ")!"); - Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); - } - } - worldmap.put(world.getName(), resmap); - } - return worldmap; - } - - public void load(Map root) throws Exception { - if (root == null) - return; - - for (World world : plugin.getServ().getWorlds()) { - long time = System.currentTimeMillis(); - @SuppressWarnings("unchecked") - Map reslist = (Map) root.get(world.getName()); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + world.getName() + " data into memory..."); - if (reslist != null) { - try { - chunkResidences.put(world.getName(), loadMap(world.getName(), reslist)); - } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + "Error in loading save file for world: " + world.getName()); - if (plugin.getConfigManager().stopOnSaveError()) - throw (ex); - } - } - - long pass = System.currentTimeMillis() - time; - String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + world.getName() + " data into memory. (" + PastTime + ")"); - } - } - - public Map> loadMap(String worldName, Map root) throws Exception { - Map> retRes = new HashMap<>(); - if (root == null) - return retRes; - - int i = 0; - int y = 0; - for (Entry res : root.entrySet()) { - if (i == 100 & plugin.getConfigManager().isUUIDConvertion()) - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " " + worldName + " UUID conversion done: " + y + " of " + root.size()); - if (i >= 100) - i = 0; - i++; - y++; - try { - @SuppressWarnings("unchecked") - ClaimedResidence residence = ClaimedResidence.load(worldName, (Map) res.getValue(), null, plugin); - if (residence == null) - continue; - - if (residence.getPermissions().getOwnerUUID().toString().equals(plugin.getServerLandUUID()) && - !residence.getOwner().equalsIgnoreCase("Server land") && - !residence.getOwner().equalsIgnoreCase(plugin.getServerLandname())) - continue; - - if (residence.getOwner().equalsIgnoreCase("Server land")) { - residence.getPermissions().setOwner(plugin.getServerLandname(), false); - } - String resName = res.getKey().toLowerCase(); - - // Checking for duplicated residence names and renaming them - int increment = getNameIncrement(resName); - - if (residence.getResidenceName() == null) - residence.setName(res.getKey()); - - if (increment > 0) { - residence.setName(residence.getResidenceName() + increment); - resName += increment; - } - - for (ChunkRef chunk : getChunks(residence)) { - List ress = new ArrayList<>(); - if (retRes.containsKey(chunk)) { - ress.addAll(retRes.get(chunk)); - } - ress.add(residence); - retRes.put(chunk, ress); - } - - plugin.getPlayerManager().addResidence(residence.getOwner(), residence); - - residences.put(resName.toLowerCase(), residence); - - } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + " Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() - + " Error Log:"); - Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); - if (plugin.getConfigManager().stopOnSaveError()) { - throw (ex); - } - } - } - - return retRes; - } - - private int getNameIncrement(String name) { - String orName = name; - int i = 0; - while (i < 1000) { - if (residences.containsKey(name.toLowerCase())) { - i++; - name = orName + i; - } else - break; - } - return i; - } - - private static List getChunks(ClaimedResidence res) { - List chunks = new ArrayList<>(); - for (CuboidArea area : res.getAreaArray()) { - chunks.addAll(area.getChunks()); - } - return chunks; - } - - public boolean renameResidence(String oldName, String newName) { - return this.renameResidence(null, oldName, newName, true); - } - - public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { - if (!plugin.hasPermission(player, "residence.rename")) { - return false; - } - - if (!plugin.validName(newName)) { - plugin.msg(player, lm.Invalid_NameCharacters); - return false; - } - ClaimedResidence res = this.getByName(oldName); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return false; - } - oldName = res.getName(); - if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { - if (res.getParent() == null) { - if (residences.containsKey(newName.toLowerCase())) { - plugin.msg(player, lm.Residence_AlreadyExists, newName); - return false; - } - - ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); - plugin.getServ().getPluginManager().callEvent(resevent); - removeChunkList(oldName); - res.setName(newName); - - residences.put(newName.toLowerCase(), res); - residences.remove(oldName.toLowerCase()); - - plugin.getPlayerManager().renameResidence(player.getName(), oldName, newName); - - calculateChunks(newName); - if (plugin.getConfigManager().useLeases()) { - plugin.getLeaseManager().updateLeaseName(oldName, newName); - } - - plugin.getSignUtil().updateSignResName(res); - - plugin.msg(player, lm.Residence_Rename, oldName, newName); - - return true; - } - String[] oldname = oldName.split("\\."); - ClaimedResidence parent = res.getParent(); - - boolean feed = parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); - - plugin.getSignUtil().updateSignResName(res); - - return feed; - } - - plugin.msg(player, lm.General_NoPermission); - - return false; - } - - public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { - ClaimedResidence res = getByName(residence); - if (res == null) { - plugin.msg(reqPlayer, lm.Invalid_Residence); - return; - } - - residence = res.getName(); - - if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { - plugin.msg(reqPlayer, lm.General_NoPermission); - return; - } - Player giveplayer = plugin.getServ().getPlayer(targPlayer); - if (giveplayer == null || !giveplayer.isOnline()) { - plugin.msg(reqPlayer, lm.General_NotOnline); - return; - } - CuboidArea[] areas = res.getAreaArray(); - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(giveplayer); - PermissionGroup group = rPlayer.getGroup(); - - if (areas.length > group.getMaxPhysicalPerResidence() && !resadmin) { - plugin.msg(reqPlayer, lm.Residence_GiveLimits); - return; - } - if (!hasMaxZones(giveplayer.getName(), rPlayer.getMaxRes()) && !resadmin) { - plugin.msg(reqPlayer, lm.Residence_GiveLimits); - return; - } - if (!resadmin) { - for (CuboidArea area : areas) { - if (!res.isSubzone() && !res.isSmallerThanMax(giveplayer, area, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(giveplayer, area, - resadmin)) { - plugin.msg(reqPlayer, lm.Residence_GiveLimits); - return; - } - } - } - - plugin.getPlayerManager().removeResFromPlayer(reqPlayer, residence); - plugin.getPlayerManager().addResidence(targPlayer, res); - - res.getPermissions().setOwner(giveplayer.getName(), true); - // Fix phrases here - plugin.msg(reqPlayer, lm.Residence_Give, residence, giveplayer.getName()); - plugin.msg(giveplayer, lm.Residence_Recieve, residence, reqPlayer.getName()); - } - - public void removeAllFromWorld(CommandSender sender, String world) { - int count = 0; - Iterator it = residences.values().iterator(); - while (it.hasNext()) { - ClaimedResidence next = it.next(); - if (next.getWorld().equals(world)) { - it.remove(); - count++; - } - } - chunkResidences.remove(world); - chunkResidences.put(world, new HashMap>()); - if (count == 0) { - sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW + world); - } else { - sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); - } - -// plugin.getPlayerManager().fillList(); - } - - public int getResidenceCount() { - return residences.size(); - } - - public Map getResidences() { - return residences; - } - - public void removeChunkList(String name) { - if (name == null) - return; - - name = name.toLowerCase(); - ClaimedResidence res = residences.get(name); - if (res != null) { - String world = res.getWorld(); - if (chunkResidences.get(world) != null) { - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList<>(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - ress.remove(res); - chunkResidences.get(world).put(chunk, ress); - } - } - } - } - - public void calculateChunks(String name) { - ClaimedResidence res = null; - - if (name == null) - return; - name = name.toLowerCase(); - res = residences.get(name); - - if (res == null) - return; - - String world = res.getWorld(); - if (chunkResidences.get(world) == null) { - chunkResidences.put(world, new HashMap>()); - } - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList<>(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - ress.add(res); - chunkResidences.get(world).put(chunk, ress); - } - } - - public static final class ChunkRef { - - public static int getChunkCoord(final int val) { - // For more info, see CraftBukkit.CraftWorld.getChunkAt( Location ) - return val >> 4; - } - - private final int z; - private final int x; - - public ChunkRef(Location loc) { - this.x = getChunkCoord(loc.getBlockX()); - this.z = getChunkCoord(loc.getBlockZ()); - } - - public ChunkRef(int x, int z) { - this.x = x; - this.z = z; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - ChunkRef other = (ChunkRef) obj; - return this.x == other.x && this.z == other.z; - } - - @Override - public int hashCode() { - return x ^ z; - } - - /** - * Useful for debug - * - * @return - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("{ x: ").append(x).append(", z: ").append(z).append(" }"); - return sb.toString(); - } - } - -} +package com.bekvon.bukkit.residence.protection; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.SortedMap; +import java.util.TreeMap; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.ResidenceInterface; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.economy.rent.RentableLand; +import com.bekvon.bukkit.residence.economy.rent.RentedLand; +import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; +import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.GetTime; +import com.bekvon.bukkit.residence.utils.RawMessage; +import com.griefcraft.cache.ProtectionCache; +import com.griefcraft.lwc.LWC; +import com.griefcraft.model.Protection; + +public class ResidenceManager implements ResidenceInterface { + protected SortedMap residences; + protected Map>> chunkResidences; + protected List shops = new ArrayList(); + private Residence plugin; + + public ResidenceManager(Residence plugin) { + residences = new TreeMap<>(); + chunkResidences = new HashMap<>(); + this.plugin = plugin; + } + + public boolean isOwnerOfLocation(Player player, Location loc) { + ClaimedResidence res = getByLoc(loc); + if (res != null && res.isOwner(player)) + return true; + return false; + } + + @Override + public ClaimedResidence getByLoc(Location loc) { + if (loc == null) + return null; + World world = loc.getWorld(); + if (world == null) + return null; + String worldName = world.getName(); + if (worldName == null) + return null; + ClaimedResidence res = null; + ChunkRef chunk = new ChunkRef(loc); + if (!chunkResidences.containsKey(worldName)) + return null; + + Map> ChunkMap = chunkResidences.get(worldName); + + if (ChunkMap.containsKey(chunk)) { + for (ClaimedResidence entry : ChunkMap.get(chunk)) { + if (entry == null) + continue; + if (entry.containsLoc(loc)) { + res = entry; + break; + } + } + } + + if (res == null) + return null; + + ClaimedResidence subres = res.getSubzoneByLoc(loc); + if (subres == null) + return res; + return subres; + } + + @Override + public ClaimedResidence getByName(String name) { + if (name == null) { + return null; + } + String[] split = name.split("\\."); + if (split.length == 1) { + return residences.get(name.toLowerCase()); + } + ClaimedResidence res = residences.get(split[0].toLowerCase()); + for (int i = 1; i < split.length; i++) { + if (res != null) { + res = res.getSubzone(split[i].toLowerCase()); + } else { + return null; + } + } + return res; + } + + @Override + public String getSubzoneNameByRes(ClaimedResidence res) { + Set> set = residences.entrySet(); + for (Entry check : set) { + if (check.getValue() == res) { + return check.getKey(); + } + String n = check.getValue().getSubzoneNameByRes(res); + if (n != null) { + return n; + } + } + return null; + } + + @Override + public void addShop(String resName) { + ClaimedResidence res = getByName(resName); + if (res != null) + shops.add(res); + } + + @Override + public void addShop(ClaimedResidence res) { + shops.add(res); + } + + @Override + public void removeShop(ClaimedResidence res) { + shops.remove(res); + } + + @Override + public void removeShop(String resName) { + for (ClaimedResidence one : shops) { + if (one.getName().equalsIgnoreCase(resName)) { + shops.remove(one); + break; + } + } + } + + @Override + public List getShops() { + return shops; + } + + @Override + public boolean addResidence(String name, Location loc1, Location loc2) { + return this.addResidence(name, plugin.getServerLandname(), loc1, loc2); + } + + @Override + public boolean addResidence(String name, String owner, Location loc1, Location loc2) { + return this.addResidence(null, owner, name, loc1, loc2, true); + } + + @Override + public boolean addResidence(Player player, String name, Location loc1, Location loc2, boolean resadmin) { + return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin); + } + + public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { + if (!plugin.validName(name)) { + plugin.msg(player, lm.Invalid_NameCharacters); + return false; + } + if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { + plugin.msg(player, lm.Select_Points); + return false; + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); +// PermissionGroup group = plugin.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); + if (!resadmin && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create", false)) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + + if (!resadmin && !plugin.hasPermission(player, "residence.create")) { + return false; + } + + if (rPlayer.getResAmount() >= rPlayer.getMaxRes() && !resadmin) { + plugin.msg(player, lm.Residence_TooMany); + return false; + } + + CuboidArea newArea = new CuboidArea(loc1, loc2); + ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName(), plugin); + newRes.getPermissions().applyDefaultFlags(); + newRes.setEnterMessage(group.getDefaultEnterMessage()); + newRes.setLeaveMessage(group.getDefaultLeaveMessage()); + newRes.setName(name); + newRes.setCreateTime(); + + if (residences.containsKey(name.toLowerCase())) { + plugin.msg(player, lm.Residence_AlreadyExists, residences.get(name.toLowerCase()).getResidenceName()); + return false; + } + + newRes.BlockSellPrice = group.getSellPerBlock(); + + if (!newRes.addArea(player, newArea, "main", resadmin, false)) + return false; + + ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + if (!newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { + double chargeamount = Math.ceil(newArea.getSize() * group.getCostPerBlock()); + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) + return false; + } + + residences.put(name.toLowerCase(), newRes); + + calculateChunks(name); + plugin.getLeaseManager().removeExpireTime(name); + plugin.getPlayerManager().addResidence(newRes.getOwner(), newRes); + + if (player != null) { + Visualizer v = new Visualizer(player); + v.setAreas(newArea); + plugin.getSelectionManager().showBounds(player, v); + plugin.getAutoSelectionManager().getList().remove(player.getName().toLowerCase()); + plugin.msg(player, lm.Area_Create, "main"); + plugin.msg(player, lm.Residence_Create, name); + } + if (plugin.getConfigManager().useLeases()) { + if (player != null) { + plugin.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); + } else { + plugin.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); + } + } + return true; + + } + + public void listResidences(CommandSender sender) { + this.listResidences(sender, sender.getName(), 1); + } + + public void listResidences(CommandSender sender, boolean resadmin) { + this.listResidences(sender, sender.getName(), 1, false, false, resadmin); + } + + public void listResidences(CommandSender sender, String targetplayer, boolean showhidden) { + this.listResidences(sender, targetplayer, 1, showhidden, false, showhidden); + } + + public void listResidences(CommandSender sender, String targetplayer, int page) { + this.listResidences(sender, targetplayer, page, false, false, false); + } + + public void listResidences(CommandSender sender, int page, boolean showhidden) { + this.listResidences(sender, sender.getName(), page, showhidden, false, showhidden); + } + + public void listResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { + this.listResidences(sender, sender.getName(), page, showhidden, onlyHidden, showhidden); + } + + public void listResidences(CommandSender sender, String string, int page, boolean showhidden) { + this.listResidences(sender, string, page, showhidden, false, showhidden); + } + + public void listResidences(CommandSender sender, String targetplayer, int page, boolean showhidden, boolean onlyHidden, boolean resadmin) { + this.listResidences(sender, targetplayer, page, showhidden, onlyHidden, resadmin, null); + } + + public void listResidences(CommandSender sender, String targetplayer, int page, boolean showhidden, boolean onlyHidden, boolean resadmin, World world) { + if (targetplayer == null) + targetplayer = sender.getName(); + if (showhidden && !plugin.isResAdminOn(sender) && !sender.getName().equalsIgnoreCase(targetplayer)) { + showhidden = false; + } else if (sender.getName().equalsIgnoreCase(targetplayer)) + showhidden = true; + boolean hidden = showhidden; + TreeMap ownedResidences = plugin.getPlayerManager().getResidencesMap(targetplayer, hidden, onlyHidden, world); + ownedResidences.putAll(plugin.getRentManager().getRentsMap(targetplayer, onlyHidden, world)); + plugin.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin); + } + + public void listAllResidences(CommandSender sender, int page) { + this.listAllResidences(sender, page, false); + } + + public void listAllResidences(CommandSender sender, int page, boolean showhidden, World world) { + TreeMap list = getFromAllResidencesMap(showhidden, false, world); + plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); + } + + public void listAllResidences(CommandSender sender, int page, boolean showhidden) { + this.listAllResidences(sender, page, showhidden, false); + } + + public void listAllResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { + TreeMap list = getFromAllResidencesMap(showhidden, onlyHidden, null); + plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); + } + + public String[] getResidenceList() { + return this.getResidenceList(true, true).toArray(new String[0]); + } + + public Map getResidenceMapList(String targetplayer, boolean showhidden) { + Map temp = new HashMap(); + for (Entry res : residences.entrySet()) { + if (res.getValue().isOwner(targetplayer)) { + boolean hidden = res.getValue().getPermissions().has("hidden", false); + if ((showhidden) || (!showhidden && !hidden)) { + temp.put(res.getValue().getName().toLowerCase(), res.getValue()); + } + } + } + return temp; + } + + public ArrayList getResidenceList(boolean showhidden, boolean showsubzones) { + return this.getResidenceList(null, showhidden, showsubzones, false); + } + + public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones) { + return this.getResidenceList(targetplayer, showhidden, showsubzones, false, false); + } + + public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean onlyHidden) { + return this.getResidenceList(targetplayer, showhidden, showsubzones, false, onlyHidden); + } + + public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean formattedOutput, boolean onlyHidden) { + ArrayList list = new ArrayList<>(); + for (Entry res : residences.entrySet()) { + this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), res.getValue(), list, formattedOutput, onlyHidden); + } + return list; + } + + public ArrayList getFromAllResidences(boolean showhidden, boolean onlyHidden, World world) { + ArrayList list = new ArrayList<>(); + for (Entry res : residences.entrySet()) { + boolean hidden = res.getValue().getPermissions().has("hidden", false); + if (onlyHidden && !hidden) + continue; + if (world != null && !world.getName().equalsIgnoreCase(res.getValue().getWorld())) + continue; + if ((showhidden) || (!showhidden && !hidden)) { + list.add(res.getValue()); + } + } + return list; + } + + public TreeMap getFromAllResidencesMap(boolean showhidden, boolean onlyHidden, World world) { + TreeMap list = new TreeMap(); + for (Entry res : residences.entrySet()) { + boolean hidden = res.getValue().getPermissions().has("hidden", false); + if (onlyHidden && !hidden) + continue; + if (world != null && !world.getName().equalsIgnoreCase(res.getValue().getWorld())) + continue; + if ((showhidden) || (!showhidden && !hidden)) { + list.put(res.getKey(), res.getValue()); + } + } + return list; + } + + private void getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, String parentzone, String resname, ClaimedResidence res, + ArrayList list, boolean formattedOutput, boolean onlyHidden) { + boolean hidden = res.getPermissions().has("hidden", false); + + if (onlyHidden && !hidden) + return; + + if ((showhidden) || (!showhidden && !hidden)) { + if (targetplayer == null || res.getPermissions().getOwner().equals(targetplayer)) { + if (formattedOutput) { + list.add(plugin.msg(lm.Residence_List, parentzone, resname, res.getWorld()) + + (hidden ? plugin.msg(lm.Residence_Hidden) : "")); + } else { + list.add(parentzone + resname); + } + } + if (showsubzones) { + for (Entry sz : res.subzones.entrySet()) { + this.getResidenceList(targetplayer, showhidden, showsubzones, parentzone + resname + ".", sz.getKey(), sz.getValue(), list, formattedOutput, + onlyHidden); + } + } + } + } + + public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResidence) { + Set> set = residences.entrySet(); + for (Entry entry : set) { + ClaimedResidence check = entry.getValue(); + if (check != parentResidence && check.checkCollision(newarea)) { + return entry.getKey(); + } + } + return null; + } + + public void removeResidence(String name) { + this.removeResidence(null, name, true); + } + + public void removeResidence(CommandSender sender, String name, boolean resadmin) { + if (sender instanceof Player) + removeResidence((Player) sender, name, resadmin); + else + this.removeResidence(null, name, true); + } + + @SuppressWarnings("deprecation") + public void removeResidence(Player player, String name, boolean resadmin) { + + ClaimedResidence res = this.getByName(name); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + name = res.getName(); + + if (plugin.getConfigManager().isRentPreventRemoval() && !resadmin) { + ClaimedResidence rented = res.getRentedSubzone(); + if (rented != null) { + plugin.msg(player, lm.Residence_CantRemove, res.getName(), rented.getName(), rented.getRentedLand().player); + return; + } + } + + if (player != null && !resadmin) { + if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin && res.getParent() != null && !res.getParent().isOwner(player)) { + plugin.msg(player, lm.General_NoPermission); + return; + } + } + + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; + + ClaimedResidence parent = res.getParent(); + if (parent == null) { + removeChunkList(name); + + residences.remove(name.toLowerCase()); + + if (plugin.getConfigManager().isUseClean() && plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) { + for (CuboidArea area : res.getAreaArray()) { + + Location low = area.getLowLoc(); + Location high = area.getHighLoc(); + + if (high.getBlockY() > plugin.getConfigManager().getCleanLevel()) { + + if (low.getBlockY() < plugin.getConfigManager().getCleanLevel()) + low.setY(plugin.getConfigManager().getCleanLevel()); + + World world = low.getWorld(); + + Location temploc = new Location(world, low.getBlockX(), low.getBlockY(), low.getBlockZ()); + + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + temploc.setX(x); + for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { + temploc.setY(y); + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + temploc.setZ(z); + if (plugin.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getTypeId())) { + temploc.getBlock().setTypeId(0); + } + } + } + } + } + } + } + + if (plugin.getConfigManager().isRemoveLwcOnDelete()) + removeLwcFromResidence(player, res); + + plugin.msg(player, lm.Residence_Remove, name); + + } else { + String[] split = name.split("\\."); + if (player != null) { + parent.removeSubzone(player, split[split.length - 1], true); + } else { + parent.removeSubzone(split[split.length - 1]); + } + } + + // plugin.getLeaseManager().removeExpireTime(name); - causing + // concurrent modification exception in lease manager... worked + // around for now + + for (String oneSub : res.getSubzoneList()) { + plugin.getPlayerManager().removeResFromPlayer(res.getOwner(), name + "." + oneSub); + plugin.getRentManager().removeRentable(name + "." + oneSub); + plugin.getTransactionManager().removeFromSale(name + "." + oneSub); + } + + plugin.getPlayerManager().removeResFromPlayer(res.getOwner(), name); + plugin.getRentManager().removeRentable(name); + plugin.getTransactionManager().removeFromSale(name); + + if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { + int chargeamount = (int) Math.ceil(res.getAreaArray()[0].getSize() * res.getBlockSellPrice()); + plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); + } + } + + public void removeLwcFromResidence(final Player player, final ClaimedResidence res) { + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + long time = System.currentTimeMillis(); + LWC lwc = plugin.getLwc(); + if (lwc == null) + return; + if (res == null) + return; + int i = 0; + + ProtectionCache cache = lwc.getProtectionCache(); + + List list = plugin.getConfigManager().getLwcMatList(); + + try { + for (CuboidArea area : res.getAreaArray()) { + Location low = area.getLowLoc(); + Location high = area.getHighLoc(); + World world = low.getWorld(); + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + Block b = world.getBlockAt(x, y, z); + if (!list.contains(b.getType())) + continue; + Protection prot = cache.getProtection(b); + if (prot == null) + continue; + prot.remove(); + i++; + } + } + } + } + } catch (Exception e) { + } + if (i > 0) + plugin.msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); + return; + } + }); + } + + public void removeAllByOwner(String owner) { + ArrayList list = plugin.getPlayerManager().getResidenceList(owner); + for (String oneRes : list) { + removeResidence(null, oneRes, true); + } + } + + public int getOwnedZoneCount(String player) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + return rPlayer.getResAmount(); + } + + public boolean hasMaxZones(String player, int target) { + return getOwnedZoneCount(player) < target; + } + + public void printAreaInfo(String areaname, CommandSender sender) { + printAreaInfo(areaname, sender, false); + } + + public void printAreaInfo(String areaname, CommandSender sender, boolean resadmin) { + ClaimedResidence res = this.getByName(areaname); + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return; + } + + areaname = res.getName(); + + plugin.msg(sender, lm.General_Separator); + + ResidencePermissions perms = res.getPermissions(); + + String resNameOwner = "&e" + plugin.msg(lm.Residence_Line, areaname); + resNameOwner += plugin.msg(lm.General_Owner, perms.getOwner()); + if (plugin.getConfigManager().enableEconomy()) { + if (res.isOwner(sender) || !(sender instanceof Player) || resadmin) + resNameOwner += plugin.msg(lm.Bank_Name, res.getBank().getStoredMoney()); + } + resNameOwner = ChatColor.translateAlternateColorCodes('&', resNameOwner); + + String worldInfo = plugin.msg(lm.General_World, perms.getWorld()); + + if (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin) { + worldInfo += "&6 (&3"; + CuboidArea area = res.getAreaArray()[0]; + worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); + worldInfo += "&6; &3"; + worldInfo += plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + worldInfo += "&6)"; + worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + } + + worldInfo += "\n" + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.createTime)); + + String ResFlagList = perms.listFlags(5); + if (!(sender instanceof Player)) + ResFlagList = perms.listFlags(); + String ResFlagMsg = plugin.msg(lm.General_ResidenceFlags, ResFlagList); + + if (perms.getFlags().size() > 2 && sender instanceof Player) { + ResFlagMsg = plugin.msg(lm.General_ResidenceFlags, perms.listFlags(5, 3)) + "..."; + } + + if (sender instanceof Player) { + RawMessage rm = new RawMessage(); + rm.add(resNameOwner, worldInfo); + rm.show(sender); + + rm.clear(); + + rm.add(ResFlagMsg, ResFlagList); + rm.show(sender); + } else { + plugin.msg(sender, resNameOwner); + plugin.msg(sender, worldInfo); + plugin.msg(sender, ResFlagMsg); + } + + if (!plugin.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) + sender.sendMessage(plugin.msg(lm.General_PlayersFlags, perms.listPlayersFlags())); + else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + perms.listPlayersFlagsRaw(sender.getName(), plugin.msg( + lm.General_PlayersFlags, ""))); + } + + String groupFlags = perms.listGroupFlags(); + if (groupFlags.length() > 0) + plugin.msg(sender, lm.General_GroupFlags, groupFlags); + + String msg = ""; + msg += plugin.msg(lm.General_TotalResSize, res.getTotalSize(), res.getXZSize()); + + plugin.msg(sender, ChatColor.translateAlternateColorCodes('&', msg)); + + if (plugin.getEconomyManager() != null) { + plugin.msg(sender, lm.General_TotalWorth, (int) ((res.getTotalSize() * res.getOwnerGroup().getCostPerBlock()) + * 100) / 100.0, (int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0); + } + + if (res.getSubzonesAmount(false) > 0) + plugin.msg(sender, lm.General_TotalSubzones, res.getSubzonesAmount(false), res.getSubzonesAmount(true)); + + if (plugin.getConfigManager().useLeases() && plugin.getLeaseManager().leaseExpires(areaname)) { + String time = plugin.getLeaseManager().getExpireTime(areaname); + if (time != null) + plugin.msg(sender, lm.Economy_LeaseExpire, time); + } + + if (plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isForRent(areaname) && !plugin.getRentManager().isRented(areaname)) { + String forRentMsg = plugin.msg(lm.Rent_isForRent); + + RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); + StringBuilder rentableString = new StringBuilder(); + if (rentable != null) { + rentableString.append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + } + if (sender instanceof Player) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, forRentMsg, rentableString.toString())); + else + plugin.msg(sender, forRentMsg); + } else if (plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isRented(areaname)) { + String RentedMsg = plugin.msg(lm.Residence_RentedBy, plugin.getRentManager().getRentingPlayer(areaname)); + + RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); + RentedLand rented = plugin.getRentManager().getRentedLand(areaname); + + StringBuilder rentableString = new StringBuilder(); + if (rented != null) { + rentableString.append(plugin.msg(lm.Rent_Expire, GetTime.getTime(rented.endTime)) + "\n"); + if (rented.player.equals(sender.getName()) || resadmin || res.isOwner(sender)) + rentableString.append((rented.AutoPay ? plugin.msg(lm.Rent_AutoPayTurnedOn) : plugin.msg(lm.Rent_AutoPayTurnedOff)) + + "\n"); + } + + if (rentable != null) { + rentableString.append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + } + + if (sender instanceof Player) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, RentedMsg, rentableString.toString())); + else + plugin.msg(sender, RentedMsg); + } else if (plugin.getTransactionManager().isForSale(areaname)) { + int amount = plugin.getTransactionManager().getSaleAmount(areaname); + String SellMsg = plugin.msg(lm.Economy_LandForSale) + " " + amount; + plugin.msg(sender, SellMsg); + } + + plugin.msg(sender, lm.General_Separator); + } + + public String convertToRaw(String preText, String text, String hover) { + return convertToRaw(preText, text, hover, null); + } + + public String convertToRaw(String preText, String text, String hover, String command) { + StringBuilder msg = new StringBuilder(); + String cmd = ""; + if (command != null) { + cmd = ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/" + command + "\"}"; + } + msg.append("[\"\","); + if (preText != null) + msg.append("{\"text\":\"" + preText + "\"}"); + msg.append("{\"text\":\"" + text + "\"" + cmd + ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + hover + "\"}]}}}"); + msg.append("]"); + return msg.toString(); + } + + public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { + ClaimedResidence reciever = this.getByName(targetArea); + ClaimedResidence source = this.getByName(sourceArea); + if (source == null || reciever == null) { + plugin.msg(reqPlayer, lm.Invalid_Residence); + return; + } + if (!resadmin) { + if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { + plugin.msg(reqPlayer, lm.General_NoPermission); + return; + } + } + reciever.getPermissions().applyTemplate(reqPlayer, source.getPermissions(), resadmin); + } + + public Map save() { + Map worldmap = new LinkedHashMap<>(); + for (World world : plugin.getServ().getWorlds()) { + Map resmap = new LinkedHashMap<>(); + for (Entry res : residences.entrySet()) { + if (!res.getValue().getWorld().equals(world.getName())) + continue; + + try { + resmap.put(res.getValue().getResidenceName(), res.getValue().save()); + } catch (Exception ex) { + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + " Failed to save residence (" + res.getKey() + ")!"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); + } + } + worldmap.put(world.getName(), resmap); + } + return worldmap; + } + + public void load(Map root) throws Exception { + if (root == null) + return; + + for (World world : plugin.getServ().getWorlds()) { + long time = System.currentTimeMillis(); + @SuppressWarnings("unchecked") + Map reslist = (Map) root.get(world.getName()); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + world.getName() + " data into memory..."); + if (reslist != null) { + try { + chunkResidences.put(world.getName(), loadMap(world.getName(), reslist)); + } catch (Exception ex) { + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + "Error in loading save file for world: " + world.getName()); + if (plugin.getConfigManager().stopOnSaveError()) + throw (ex); + } + } + + long pass = System.currentTimeMillis() - time; + String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; + + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + world.getName() + " data into memory. (" + PastTime + ")"); + } + } + + public Map> loadMap(String worldName, Map root) throws Exception { + Map> retRes = new HashMap<>(); + if (root == null) + return retRes; + + int i = 0; + int y = 0; + for (Entry res : root.entrySet()) { + if (i == 100 & plugin.getConfigManager().isUUIDConvertion()) + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " " + worldName + " UUID conversion done: " + y + " of " + root.size()); + if (i >= 100) + i = 0; + i++; + y++; + try { + @SuppressWarnings("unchecked") + ClaimedResidence residence = ClaimedResidence.load(worldName, (Map) res.getValue(), null, plugin); + if (residence == null) + continue; + + if (residence.getPermissions().getOwnerUUID().toString().equals(plugin.getServerLandUUID()) && + !residence.getOwner().equalsIgnoreCase("Server land") && + !residence.getOwner().equalsIgnoreCase(plugin.getServerLandname())) + continue; + + if (residence.getOwner().equalsIgnoreCase("Server land")) { + residence.getPermissions().setOwner(plugin.getServerLandname(), false); + } + String resName = res.getKey().toLowerCase(); + + // Checking for duplicated residence names and renaming them + int increment = getNameIncrement(resName); + + if (residence.getResidenceName() == null) + residence.setName(res.getKey()); + + if (increment > 0) { + residence.setName(residence.getResidenceName() + increment); + resName += increment; + } + + for (ChunkRef chunk : getChunks(residence)) { + List ress = new ArrayList<>(); + if (retRes.containsKey(chunk)) { + ress.addAll(retRes.get(chunk)); + } + ress.add(residence); + retRes.put(chunk, ress); + } + + plugin.getPlayerManager().addResidence(residence.getOwner(), residence); + + residences.put(resName.toLowerCase(), residence); + + } catch (Exception ex) { + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + " Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + + " Error Log:"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); + if (plugin.getConfigManager().stopOnSaveError()) { + throw (ex); + } + } + } + + return retRes; + } + + private int getNameIncrement(String name) { + String orName = name; + int i = 0; + while (i < 1000) { + if (residences.containsKey(name.toLowerCase())) { + i++; + name = orName + i; + } else + break; + } + return i; + } + + private static List getChunks(ClaimedResidence res) { + List chunks = new ArrayList<>(); + for (CuboidArea area : res.getAreaArray()) { + chunks.addAll(area.getChunks()); + } + return chunks; + } + + public boolean renameResidence(String oldName, String newName) { + return this.renameResidence(null, oldName, newName, true); + } + + public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { + if (!plugin.hasPermission(player, "residence.rename")) { + return false; + } + + if (!plugin.validName(newName)) { + plugin.msg(player, lm.Invalid_NameCharacters); + return false; + } + ClaimedResidence res = this.getByName(oldName); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return false; + } + oldName = res.getName(); + if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { + if (res.getParent() == null) { + if (residences.containsKey(newName.toLowerCase())) { + plugin.msg(player, lm.Residence_AlreadyExists, newName); + return false; + } + + ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); + plugin.getServ().getPluginManager().callEvent(resevent); + removeChunkList(oldName); + res.setName(newName); + + residences.put(newName.toLowerCase(), res); + residences.remove(oldName.toLowerCase()); + + plugin.getPlayerManager().renameResidence(player.getName(), oldName, newName); + + calculateChunks(newName); + if (plugin.getConfigManager().useLeases()) { + plugin.getLeaseManager().updateLeaseName(oldName, newName); + } + + plugin.getSignUtil().updateSignResName(res); + + plugin.msg(player, lm.Residence_Rename, oldName, newName); + + return true; + } + String[] oldname = oldName.split("\\."); + ClaimedResidence parent = res.getParent(); + + boolean feed = parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); + + plugin.getSignUtil().updateSignResName(res); + + return feed; + } + + plugin.msg(player, lm.General_NoPermission); + + return false; + } + + public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { + ClaimedResidence res = getByName(residence); + if (res == null) { + plugin.msg(reqPlayer, lm.Invalid_Residence); + return; + } + + residence = res.getName(); + + if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { + plugin.msg(reqPlayer, lm.General_NoPermission); + return; + } + Player giveplayer = plugin.getServ().getPlayer(targPlayer); + if (giveplayer == null || !giveplayer.isOnline()) { + plugin.msg(reqPlayer, lm.General_NotOnline); + return; + } + CuboidArea[] areas = res.getAreaArray(); + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(giveplayer); + PermissionGroup group = rPlayer.getGroup(); + + if (areas.length > group.getMaxPhysicalPerResidence() && !resadmin) { + plugin.msg(reqPlayer, lm.Residence_GiveLimits); + return; + } + if (!hasMaxZones(giveplayer.getName(), rPlayer.getMaxRes()) && !resadmin) { + plugin.msg(reqPlayer, lm.Residence_GiveLimits); + return; + } + if (!resadmin) { + for (CuboidArea area : areas) { + if (!res.isSubzone() && !res.isSmallerThanMax(giveplayer, area, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(giveplayer, area, + resadmin)) { + plugin.msg(reqPlayer, lm.Residence_GiveLimits); + return; + } + } + } + + plugin.getPlayerManager().removeResFromPlayer(reqPlayer, residence); + plugin.getPlayerManager().addResidence(targPlayer, res); + + res.getPermissions().setOwner(giveplayer.getName(), true); + // Fix phrases here + plugin.msg(reqPlayer, lm.Residence_Give, residence, giveplayer.getName()); + plugin.msg(giveplayer, lm.Residence_Recieve, residence, reqPlayer.getName()); + } + + public void removeAllFromWorld(CommandSender sender, String world) { + int count = 0; + Iterator it = residences.values().iterator(); + while (it.hasNext()) { + ClaimedResidence next = it.next(); + if (next.getWorld().equals(world)) { + it.remove(); + count++; + } + } + chunkResidences.remove(world); + chunkResidences.put(world, new HashMap>()); + if (count == 0) { + sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW + world); + } else { + sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); + } + +// plugin.getPlayerManager().fillList(); + } + + public int getResidenceCount() { + return residences.size(); + } + + public Map getResidences() { + return residences; + } + + public void removeChunkList(String name) { + if (name == null) + return; + + name = name.toLowerCase(); + ClaimedResidence res = residences.get(name); + if (res != null) { + String world = res.getWorld(); + if (chunkResidences.get(world) != null) { + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList<>(); + if (chunkResidences.get(world).containsKey(chunk)) { + ress.addAll(chunkResidences.get(world).get(chunk)); + } + ress.remove(res); + chunkResidences.get(world).put(chunk, ress); + } + } + } + } + + public void calculateChunks(String name) { + ClaimedResidence res = null; + + if (name == null) + return; + name = name.toLowerCase(); + res = residences.get(name); + + if (res == null) + return; + + String world = res.getWorld(); + if (chunkResidences.get(world) == null) { + chunkResidences.put(world, new HashMap>()); + } + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList<>(); + if (chunkResidences.get(world).containsKey(chunk)) { + ress.addAll(chunkResidences.get(world).get(chunk)); + } + ress.add(res); + chunkResidences.get(world).put(chunk, ress); + } + } + + public static final class ChunkRef { + + public static int getChunkCoord(final int val) { + // For more info, see CraftBukkit.CraftWorld.getChunkAt( Location ) + return val >> 4; + } + + private final int z; + private final int x; + + public ChunkRef(Location loc) { + this.x = getChunkCoord(loc.getBlockX()); + this.z = getChunkCoord(loc.getBlockZ()); + } + + public ChunkRef(int x, int z) { + this.x = x; + this.z = z; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ChunkRef other = (ChunkRef) obj; + return this.x == other.x && this.z == other.z; + } + + @Override + public int hashCode() { + return x ^ z; + } + + /** + * Useful for debug + * + * @return + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{ x: ").append(x).append(", z: ").append(z).append(" }"); + return sb.toString(); + } + } + +} diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 44131af75..c675a80da 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -1,634 +1,668 @@ -package com.bekvon.bukkit.residence.protection; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; -import com.bekvon.bukkit.residence.event.ResidenceFlagCheckEvent; -import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; -import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.utils.Debug; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ResidencePermissions extends FlagPermissions { - - private UUID ownerUUID; - private String ownerLastKnownName; - private String world; - private ClaimedResidence residence; - - private ResidencePermissions(ClaimedResidence res) { - super(); - residence = res; - } - - public ResidencePermissions(ClaimedResidence res, String creator, String inworld) { - this(res); - ownerUUID = Residence.getInstance().getPlayerUUID(creator); - if (ownerUUID == null) - ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID()); - this.ownerLastKnownName = creator; - world = inworld; - } - - public boolean playerHas(CommandSender sender, Flags flag, boolean def) { - if (sender instanceof Player) - return playerHas((Player) sender, flag, def); - return true; - } - - @Override - public boolean playerHas(Player player, Flags flag, boolean def) { - return playerHas(player, flag.getName(), def); - } - - @Deprecated - public boolean playerHas(Player player, String flag, boolean def) { - return this.playerHas(player.getName(), world, flag, def); - } - - public boolean playerHas(String player, Flags flag, boolean def) { - return playerHas(player, flag.getName(), def); - } - - @Deprecated - public boolean playerHas(String player, String flag, boolean def) { - return this.playerHas(player, world, flag, def); - } - - public boolean playerHas(Player player, Flags flag, FlagCombo f) { - return playerHas(player.getName(), flag, f); - } - - public boolean playerHas(String player, Flags flag, FlagCombo f) { - switch (f) { - case FalseOrNone: - return !this.playerHas(player, world, flag, false); - case OnlyFalse: - return !this.playerHas(player, world, flag, true); - case OnlyTrue: - return this.playerHas(player, world, flag, false); - case TrueOrNone: - return this.playerHas(player, world, flag, true); - default: - return false; - } - } - - @Override - public boolean playerHas(String player, String world, String flag, boolean def) { - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER, player, def); - - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isOverriden()) - return fc.getOverrideValue(); - return super.playerHas(player, world, flag, def); - } - - @Override - public boolean groupHas(String group, String flag, boolean def) { - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.GROUP, group, def); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isOverriden()) - return fc.getOverrideValue(); - return super.groupHas(group, flag, def); - } - - @Override - public boolean has(Flags flag, FlagCombo f) { - return has(flag, f, true); - } - - public boolean has(Flags flag, FlagCombo f, boolean checkParent) { - return has(flag.getName(), f, checkParent); - } - - public boolean has(String flag, FlagCombo f) { - return has(flag, f, true); - } - - public boolean has(String flag, FlagCombo f, boolean checkParent) { - switch (f) { - case FalseOrNone: - return !has(flag, false, checkParent); - case OnlyFalse: - return !has(flag, true, checkParent); - case OnlyTrue: - return has(flag, false, checkParent); - case TrueOrNone: - return has(flag, true, checkParent); - default: - return false; - } - } - - @Override - public boolean has(Flags flag, boolean def) { - return has(flag.getName(), def); - } - - @Override - public boolean has(String flag, boolean def) { - return has(flag, def, true); - } - - @Override - public boolean has(String flag, boolean def, boolean checkParent) { - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isOverriden()) - return fc.getOverrideValue(); - return super.has(flag, def, checkParent); - } - - public boolean hasApplicableFlag(String player, String flag) { - return super.inheritanceIsPlayerSet(player, flag) || - super.inheritanceIsGroupSet(Residence.getInstance().getPermissionManager().getGroupNameByPlayer(player, world), flag) || - super.inheritanceIsSet(flag); - } - - public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) { - if (player != null) { - if (!resadmin) { - if (!Residence.getInstance().getConfigManager().isOfflineMode() && !player.getUniqueId().toString().equals(ownerUUID.toString())) { - Residence.getInstance().msg(player, lm.General_NoPermission); - return; - } else if (!player.getName().equals(ownerLastKnownName)) { - Residence.getInstance().msg(player, lm.General_NoPermission); - return; - } - } - } else { - resadmin = true; - } - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(this.getOwner()); - PermissionGroup group = rPlayer.getGroup(world); - - for (Entry flag : list.cuboidFlags.entrySet()) { - if (group.hasFlagAccess(flag.getKey()) || resadmin) { - this.cuboidFlags.put(flag.getKey(), flag.getValue()); - } else { - if (player != null) - Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); - } - } - for (Entry> plists : list.playerFlags.entrySet()) { - Map map = this.getPlayerFlags(plists.getKey(), true); - for (Entry flag : plists.getValue().entrySet()) { - if (group.hasFlagAccess(flag.getKey()) || resadmin) { - map.put(flag.getKey(), flag.getValue()); - } else { - if (player != null) - Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); - } - } - } - for (Entry> glists : list.groupFlags.entrySet()) { - for (Entry flag : glists.getValue().entrySet()) { - if (group.hasFlagAccess(flag.getKey()) || resadmin) { - if (!this.groupFlags.containsKey(glists.getKey())) - this.groupFlags.put(glists.getKey(), Collections.synchronizedMap(new HashMap())); - this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue()); - } else { - if (player != null) - Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); - } - } - } - if (player != null) - Residence.getInstance().msg(player, lm.Residence_PermissionsApply); - } - - public boolean hasResidencePermission(CommandSender sender, boolean requireOwner) { - if (!(sender instanceof Player)) - return true; - - ClaimedResidence par = this.residence.getParent(); - if (par != null) - if (par.getPermissions().playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue)) - return true; - - if (Residence.getInstance().getConfigManager().enabledRentSystem()) { - String resname = residence.getName(); - if (Residence.getInstance().getRentManager().isRented(resname)) { - if (requireOwner) { - return false; - } - String renter = Residence.getInstance().getRentManager().getRentingPlayer(resname); - if (sender.getName().equals(renter)) { - return true; - } - return (playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue)); - } - } - if (requireOwner) { - return (this.getOwner().equals(sender.getName())); - } - return (playerHas(sender.getName(), Flags.admin, FlagCombo.OnlyTrue) || this.getOwner().equals(sender.getName())); - } - - private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState state, boolean globalflag, boolean resadmin) { - if (!checkValidFlag(flag, globalflag)) { - Residence.getInstance().msg(sender, lm.Invalid_Flag); - return false; - } - if (state == FlagState.INVALID) { - Residence.getInstance().msg(sender, lm.Invalid_FlagState); - return false; - } - if (!resadmin) { - if (!this.hasResidencePermission(sender, false)) { - Residence.getInstance().msg(sender, lm.General_NoPermission); - return false; - } - if (!hasFlagAccess(this.getOwner(), flag) && !sender.hasPermission("residence.flag." + flag.toLowerCase())) { - Residence.getInstance().msg(sender, lm.Flag_SetFailed, flag); - return false; - } - } - return true; - } - - private boolean hasFlagAccess(String player, String flag) { - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(world); - return group.hasFlagAccess(flag); - } - - public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String flag, String flagstate, boolean resadmin, boolean Show) { - - if (Residence.getInstance().getPlayerUUID(targetPlayer) == null) { - sender.sendMessage("no player by this name"); - return false; - } - - if (validFlagGroups.containsKey(flag)) - return this.setFlagGroupOnPlayer(sender, targetPlayer, flag, flagstate, resadmin); - FlagState state = FlagPermissions.stringToFlagState(flagstate); - if (checkCanSetFlag(sender, flag, state, false, resadmin)) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, sender instanceof Player ? (Player) sender : null, flag, - ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - if (super.setPlayerFlag(targetPlayer, flag, state)) { - if (Show) - Residence.getInstance().msg(sender, lm.Flag_Set, flag, residence.getName(), flagstate); - return true; - } - } - return false; - } - - public boolean setGroupFlag(Player player, String group, String flag, String flagstate, boolean resadmin) { - group = group.toLowerCase(); - if (validFlagGroups.containsKey(flag)) - return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin); - FlagState state = FlagPermissions.stringToFlagState(flagstate); - if (checkCanSetFlag(player, flag, state, false, resadmin)) { - if (Residence.getInstance().getPermissionManager().hasGroup(group)) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - if (super.setGroupFlag(group, flag, state)) { - Residence.getInstance().msg(player, lm.Flag_Set, flag, residence.getName(), flagstate); - return true; - } - } else { - Residence.getInstance().msg(player, lm.Invalid_Group); - return false; - } - } - return false; - } - - public boolean setFlag(CommandSender sender, String flag, String flagstate, boolean resadmin) { - if (validFlagGroups.containsKey(flag)) - return this.setFlagGroup(sender, flag, flagstate, resadmin); - - FlagState state = FlagPermissions.stringToFlagState(flagstate); - - if (Residence.getInstance().getConfigManager().isPvPFlagPrevent()) { - for (String oneFlag : Residence.getInstance().getConfigManager().getProtectedFlagsList()) { - if (!flag.equalsIgnoreCase(oneFlag)) - continue; - - ArrayList players = this.residence.getPlayersInResidence(); - if (!resadmin && (players.size() > 1 || players.size() == 1 && !players.get(0).getName().equals(this.getOwner()))) { - int size = 0; - for (Player one : players) { - if (!one.getName().equals(this.getOwner())) - size++; - } - Residence.getInstance().msg(sender, lm.Flag_ChangeDeny, flag, size); - return false; - } - } - } - - if (checkCanSetFlag(sender, flag, state, true, resadmin)) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(this.residence, sender instanceof Player ? (Player) sender : null, flag, - ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - if (super.setFlag(flag, state)) { - Residence.getInstance().msg(sender, lm.Flag_Set, flag, this.residence.getName(), flagstate); - return true; - } - } - return false; - } - - public boolean removeAllPlayerFlags(CommandSender sender, String targetPlayer, boolean resadmin) { - if (this.hasResidencePermission(sender, false) || resadmin) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(this.residence, sender instanceof Player ? (Player) sender : null, "ALL", - ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) { - return false; - } - super.removeAllPlayerFlags(targetPlayer); - Residence.getInstance().msg(sender, lm.Flag_RemovedAll, targetPlayer, this.residence.getName()); - return true; - } - return false; - } - - public boolean removeAllGroupFlags(Player player, String group, boolean resadmin) { - if (this.hasResidencePermission(player, false) || resadmin) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) { - return false; - } - super.removeAllGroupFlags(group); - Residence.getInstance().msg(player, lm.Flag_RemovedGroup, group, this.residence.getName()); - return true; - } - return false; - } - - @Override - public boolean setFlag(String flag, FlagState state) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - return super.setFlag(flag, state); - } - - @Override - public boolean setGroupFlag(String group, String flag, FlagState state) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - return super.setGroupFlag(group, flag, state); - } - - @Override - public boolean setPlayerFlag(String player, String flag, FlagState state) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, player); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - return super.setPlayerFlag(player, flag, state); - } - - public void applyDefaultFlags(Player player, boolean resadmin) { - if (this.hasResidencePermission(player, true) || resadmin) { - this.applyDefaultFlags(); - Residence.getInstance().msg(player, lm.Flag_Default); - } else - Residence.getInstance().msg(player, lm.General_NoPermission); - } - - public void applyDefaultFlags() { - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(this.getOwner()); - PermissionGroup group = rPlayer.getGroup(world); - Set> dflags = group.getDefaultResidenceFlags(); -// Set> dcflags = group.getDefaultCreatorFlags(); - Set>> dgflags = group.getDefaultGroupFlags(); - this.applyGlobalDefaults(); - for (Entry next : dflags) { - if (this.checkValidFlag(next.getKey(), true)) { - this.setFlag(next.getKey(), next.getValue() ? FlagState.TRUE : FlagState.FALSE); - } - } - -// for (Entry next : dcflags) { -// if (this.checkValidFlag(next.getKey(), false)) { -// if (next.getValue()) { -// this.setPlayerFlag(this.getOwner(), next.getKey(), FlagState.TRUE); -// } else { -// this.setPlayerFlag(this.getOwner(), next.getKey(), FlagState.FALSE); -// } -// } -// } - for (Entry> entry : dgflags) { - Map value = entry.getValue(); - for (Entry flag : value.entrySet()) { - this.setGroupFlag(entry.getKey(), flag.getKey(), flag.getValue() ? FlagState.TRUE : FlagState.FALSE); - } - } - } - - public void setOwner(String newOwner, boolean resetFlags) { - - ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); - Residence.getInstance().getServ().getPluginManager().callEvent(ownerchange); - - Residence.getInstance().getPlayerManager().removeResFromPlayer(ownerLastKnownName, residence.getName()); - Residence.getInstance().getPlayerManager().addResidence(newOwner, residence); - - ownerLastKnownName = newOwner; - - if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase(Residence.getInstance().getServerLandname())) { - ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());// the UUID for server owned land - } else { - UUID playerUUID = Residence.getInstance().getPlayerUUID(newOwner); - if (playerUUID != null) - ownerUUID = playerUUID; - else - ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it - } - if (resetFlags) - this.applyDefaultFlags(); - } - - public String getOwner() { - if (Residence.getInstance().getConfigManager().isOfflineMode()) - return ownerLastKnownName; - if (ownerUUID.toString().equals(Residence.getInstance().getServerLandUUID())) //check for server land - return Residence.getInstance().getServerLandname(); - String name = Residence.getInstance().getPlayerName(ownerUUID);//try to find the owner's name - if (name == null) - return ownerLastKnownName;//return last known if we cannot find it - ownerLastKnownName = name;//update last known if we did find it - return name; - } - - public UUID getOwnerUUID() { - return ownerUUID; - } - - public String getWorld() { - return world; - } - - @Override - public Map save() { - Map root = super.save(); - root.put("OwnerUUID", ownerUUID.toString()); - root.put("OwnerLastKnownName", ownerLastKnownName); -// root.put("World", world); - return root; - } - - public static ResidencePermissions load(String worldName, ClaimedResidence res, Map root) throws Exception { - ResidencePermissions newperms = new ResidencePermissions(res); - //newperms.owner = (String) root.get("Owner"); - if (root.containsKey("OwnerUUID")) { - newperms.ownerUUID = UUID.fromString((String) root.get("OwnerUUID"));//get owner UUID - // String name = Residence.getPlayerName(newperms.ownerUUID); //try to find the current name of the owner - newperms.ownerLastKnownName = (String) root.get("OwnerLastKnownName");//otherwise load last known name from file - - OfflinePlayer p = null; - if (newperms.ownerLastKnownName == null) - p = Bukkit.getOfflinePlayer(newperms.ownerUUID); - - if (p != null) - newperms.ownerLastKnownName = p.getName(); - - if (newperms.ownerLastKnownName == null) - return newperms; - - if (newperms.ownerLastKnownName.equalsIgnoreCase("Server land") || newperms.ownerLastKnownName.equalsIgnoreCase(Residence.getInstance().getServerLandname())) { - newperms.ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());//UUID for server land - newperms.ownerLastKnownName = Residence.getInstance().getServerLandname(); - } else if (newperms.ownerUUID.toString().equals(Residence.getInstance().getTempUserUUID())) //check for fake UUID - { - UUID realUUID = Residence.getInstance().getPlayerUUID(newperms.ownerLastKnownName);//try to find the real UUID of the player if possible now - if (realUUID != null) - newperms.ownerUUID = realUUID; - } - } else if (root.containsKey("Owner")) //convert old owner name save format into uuid format - { - String owner = (String) root.get("Owner"); - newperms.ownerLastKnownName = owner; - newperms.ownerUUID = Residence.getInstance().getPlayerUUID(owner); - if (newperms.ownerUUID == null) - newperms.ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//set fake UUID until we can find real one for last known player - } else { - newperms.ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());//cant determine owner name or UUID... setting zero UUID which is server land - newperms.ownerLastKnownName = Residence.getInstance().getServerLandname(); - } - newperms.world = worldName; - FlagPermissions.load(root, newperms); - - if (newperms.getOwner() == null || newperms.world == null || newperms.playerFlags == null || newperms.groupFlags == null || newperms.cuboidFlags == null) - throw new Exception("Invalid Residence Permissions..."); - return newperms; - } - - public void applyGlobalDefaults() { - this.clearFlags(); - FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); - FlagPermissions gCD = Residence.getInstance().getConfigManager().getGlobalCreatorDefaultFlags(); - Map gGD = Residence.getInstance().getConfigManager().getGlobalGroupDefaultFlags(); - for (Entry entry : gRD.cuboidFlags.entrySet()) { - if (entry.getValue()) - this.setFlag(entry.getKey(), FlagState.TRUE); - else - this.setFlag(entry.getKey(), FlagState.FALSE); - } - for (Entry entry : gCD.cuboidFlags.entrySet()) { - if (entry.getValue()) - this.setPlayerFlag(this.getOwner(), entry.getKey(), FlagState.TRUE); - else - this.setPlayerFlag(this.getOwner(), entry.getKey(), FlagState.FALSE); - } - for (Entry entry : gGD.entrySet()) { - for (Entry flag : entry.getValue().cuboidFlags.entrySet()) { - if (flag.getValue()) - this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); - else - this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); - } - } - } - - public boolean setFlagGroup(CommandSender sender, String flaggroup, String state, boolean resadmin) { - if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { - ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); - boolean changed = false; - for (String flag : flags) { - if (this.setFlag(sender, flag, state, resadmin)) { - changed = true; - } - } - return changed; - } - return false; - } - - public boolean setFlagGroupOnGroup(Player player, String flaggroup, String group, String state, boolean resadmin) { - if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { - ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); - boolean changed = false; - for (String flag : flags) { - if (this.setGroupFlag(player, group, flag, state, resadmin)) { - changed = true; - } - } - return changed; - } - return false; - } - - public boolean setFlagGroupOnPlayer(CommandSender sender, String target, String flaggroup, String state, boolean resadmin) { - if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { - ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); - boolean changed = false; - String flagString = ""; - int i = 0; - for (String flag : flags) { - i++; - if (this.setPlayerFlag(sender, target, flag, state, resadmin, false)) { - changed = true; - flagString += flag; - if (i < flags.size() - 1) - flagString += ", "; - } - } - if (flagString.length() > 0) - Residence.getInstance().msg(sender, lm.Flag_Set, flagString, target, state); - return changed; - } - return false; - } - - public String getOwnerLastKnownName() { - return ownerLastKnownName; - } - - public void setOwnerLastKnownName(String ownerLastKnownName) { - this.ownerLastKnownName = ownerLastKnownName; - } -} +package com.bekvon.bukkit.residence.protection; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceFlagCheckEvent; +import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; +import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ResidencePermissions extends FlagPermissions { + + private UUID ownerUUID; + private String ownerLastKnownName; + private String world; + private ClaimedResidence residence; + + private ResidencePermissions(ClaimedResidence res) { + super(); + residence = res; + } + + public ResidencePermissions(ClaimedResidence res, String creator, String inworld) { + this(res); + ownerUUID = Residence.getInstance().getPlayerUUID(creator); + if (ownerUUID == null) + ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID()); + this.ownerLastKnownName = creator; + world = inworld; + } + + public boolean playerHas(CommandSender sender, Flags flag, boolean def) { + if (sender instanceof Player) + return playerHas((Player) sender, flag, def); + return true; + } + + @Override + public boolean playerHas(Player player, Flags flag, boolean def) { + return playerHas(player, flag.getName(), def); + } + + @Deprecated + public boolean playerHas(Player player, String flag, boolean def) { + return this.playerHas(player.getName(), world, flag, def); + } + + public boolean playerHas(String player, Flags flag, boolean def) { + return playerHas(player, flag.getName(), def); + } + + @Deprecated + public boolean playerHas(String player, String flag, boolean def) { + return this.playerHas(player, world, flag, def); + } + + public boolean playerHas(Player player, Flags flag, FlagCombo f) { + switch (f) { + case FalseOrNone: + return !this.playerHas(player, world, flag, false); + case OnlyFalse: + return !this.playerHas(player, world, flag, true); + case OnlyTrue: + return this.playerHas(player, world, flag, false); + case TrueOrNone: + return this.playerHas(player, world, flag, true); + default: + return false; + } + } + +// public boolean playerHas(String player, Flags flag, FlagCombo f) { +// switch (f) { +// case FalseOrNone: +// return !this.playerHas(player, world, flag, false); +// case OnlyFalse: +// return !this.playerHas(player, world, flag, true); +// case OnlyTrue: +// return this.playerHas(player, world, flag, false); +// case TrueOrNone: +// return this.playerHas(player, world, flag, true); +// default: +// return false; +// } +// } + + @Override + public boolean playerHas(Player player, String world, Flags flag, boolean def) { + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag.getName(), FlagType.PLAYER, player.getName(), def); + + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + return super.playerHas(player, world, flag, def); + } + + @Override + @Deprecated + public boolean playerHas(String player, String world, String flag, boolean def) { + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER, player, def); + + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + return super.playerHas(player, world, flag, def); + } + + @Override + public boolean groupHas(String group, String flag, boolean def) { + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.GROUP, group, def); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + return super.groupHas(group, flag, def); + } + + @Override + public boolean has(Flags flag, FlagCombo f) { + return has(flag, f, true); + } + + public boolean has(Flags flag, FlagCombo f, boolean checkParent) { + switch (f) { + case FalseOrNone: + return !has(flag, false, checkParent); + case OnlyFalse: + return !has(flag, true, checkParent); + case OnlyTrue: + return has(flag, false, checkParent); + case TrueOrNone: + return has(flag, true, checkParent); + default: + return false; + } + } + + @Deprecated + public boolean has(String flag, FlagCombo f) { + return has(flag, f, true); + } + + @Deprecated + public boolean has(String flag, FlagCombo f, boolean checkParent) { + switch (f) { + case FalseOrNone: + return !has(flag, false, checkParent); + case OnlyFalse: + return !has(flag, true, checkParent); + case OnlyTrue: + return has(flag, false, checkParent); + case TrueOrNone: + return has(flag, true, checkParent); + default: + return false; + } + } + + @Override + public boolean has(Flags flag, boolean def) { + return has(flag.getName(), def); + } + + @Override + public boolean has(String flag, boolean def) { + return has(flag, def, true); + } + + @Override + public boolean has(String flag, boolean def, boolean checkParent) { + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + return super.has(flag, def, checkParent); + } + + public boolean hasApplicableFlag(String player, String flag) { + return super.inheritanceIsPlayerSet(player, flag) || + super.inheritanceIsGroupSet(Residence.getInstance().getPlayerManager().getResidencePlayer(player).getGroup(world).getGroupName(), flag) || + super.inheritanceIsSet(flag); + } + + public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) { + if (player != null) { + if (!resadmin) { + if (!Residence.getInstance().getConfigManager().isOfflineMode() && !player.getUniqueId().toString().equals(ownerUUID.toString())) { + Residence.getInstance().msg(player, lm.General_NoPermission); + return; + } else if (!player.getName().equals(ownerLastKnownName)) { + Residence.getInstance().msg(player, lm.General_NoPermission); + return; + } + } + } else { + resadmin = true; + } + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(this.getOwner()); + PermissionGroup group = rPlayer.getGroup(world); + + for (Entry flag : list.cuboidFlags.entrySet()) { + if (group.hasFlagAccess(flag.getKey()) || resadmin) { + this.cuboidFlags.put(flag.getKey(), flag.getValue()); + } else { + if (player != null) + Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); + } + } + for (Entry> plists : list.playerFlags.entrySet()) { + Map map = this.getPlayerFlags(plists.getKey(), true); + for (Entry flag : plists.getValue().entrySet()) { + if (group.hasFlagAccess(flag.getKey()) || resadmin) { + map.put(flag.getKey(), flag.getValue()); + } else { + if (player != null) + Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); + } + } + } + for (Entry> glists : list.groupFlags.entrySet()) { + for (Entry flag : glists.getValue().entrySet()) { + if (group.hasFlagAccess(flag.getKey()) || resadmin) { + if (!this.groupFlags.containsKey(glists.getKey())) + this.groupFlags.put(glists.getKey(), Collections.synchronizedMap(new HashMap())); + this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue()); + } else { + if (player != null) + Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); + } + } + } + if (player != null) + Residence.getInstance().msg(player, lm.Residence_PermissionsApply); + } + + public boolean hasResidencePermission(CommandSender sender, boolean requireOwner) { + if (!(sender instanceof Player)) + return true; + + ClaimedResidence par = this.residence.getParent(); + Player player = (Player) sender; + if (par != null) + if (par.getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue)) + return true; + + if (Residence.getInstance().getConfigManager().enabledRentSystem()) { + String resname = residence.getName(); + if (Residence.getInstance().getRentManager().isRented(resname)) { + if (requireOwner) { + return false; + } + String renter = Residence.getInstance().getRentManager().getRentingPlayer(resname); + if (sender.getName().equals(renter)) { + return true; + } + return (playerHas(player, Flags.admin, FlagCombo.OnlyTrue)); + } + } + if (requireOwner) { + return (this.getOwner().equals(sender.getName())); + } + return (playerHas(player, Flags.admin, FlagCombo.OnlyTrue) || this.getOwner().equals(sender.getName())); + } + + private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState state, boolean globalflag, boolean resadmin) { + if (!checkValidFlag(flag, globalflag)) { + Residence.getInstance().msg(sender, lm.Invalid_Flag); + return false; + } + if (state == FlagState.INVALID) { + Residence.getInstance().msg(sender, lm.Invalid_FlagState); + return false; + } + if (!resadmin) { + if (!this.hasResidencePermission(sender, false)) { + Residence.getInstance().msg(sender, lm.General_NoPermission); + return false; + } + if (!hasFlagAccess(this.getOwner(), flag) && !sender.hasPermission("residence.flag." + flag.toLowerCase())) { + Residence.getInstance().msg(sender, lm.Flag_SetFailed, flag); + return false; + } + } + return true; + } + + private boolean hasFlagAccess(String player, String flag) { + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(world); + return group.hasFlagAccess(flag); + } + + public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String flag, String flagstate, boolean resadmin, boolean Show) { + + if (Residence.getInstance().getPlayerUUID(targetPlayer) == null) { + sender.sendMessage("no player by this name"); + return false; + } + + if (validFlagGroups.containsKey(flag)) + return this.setFlagGroupOnPlayer(sender, targetPlayer, flag, flagstate, resadmin); + FlagState state = FlagPermissions.stringToFlagState(flagstate); + if (checkCanSetFlag(sender, flag, state, false, resadmin)) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, sender instanceof Player ? (Player) sender : null, flag, + ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + if (super.setPlayerFlag(targetPlayer, flag, state)) { + if (Show) + Residence.getInstance().msg(sender, lm.Flag_Set, flag, residence.getName(), flagstate); + return true; + } + } + return false; + } + + public boolean setGroupFlag(Player player, String group, String flag, String flagstate, boolean resadmin) { + group = group.toLowerCase(); + if (validFlagGroups.containsKey(flag)) + return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin); + FlagState state = FlagPermissions.stringToFlagState(flagstate); + if (checkCanSetFlag(player, flag, state, false, resadmin)) { + if (Residence.getInstance().getPermissionManager().hasGroup(group)) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + if (super.setGroupFlag(group, flag, state)) { + Residence.getInstance().msg(player, lm.Flag_Set, flag, residence.getName(), flagstate); + return true; + } + } else { + Residence.getInstance().msg(player, lm.Invalid_Group); + return false; + } + } + return false; + } + + public boolean setFlag(CommandSender sender, String flag, String flagstate, boolean resadmin) { + if (validFlagGroups.containsKey(flag)) + return this.setFlagGroup(sender, flag, flagstate, resadmin); + + FlagState state = FlagPermissions.stringToFlagState(flagstate); + + if (Residence.getInstance().getConfigManager().isPvPFlagPrevent()) { + for (String oneFlag : Residence.getInstance().getConfigManager().getProtectedFlagsList()) { + if (!flag.equalsIgnoreCase(oneFlag)) + continue; + + ArrayList players = this.residence.getPlayersInResidence(); + if (!resadmin && (players.size() > 1 || players.size() == 1 && !players.get(0).getName().equals(this.getOwner()))) { + int size = 0; + for (Player one : players) { + if (!one.getName().equals(this.getOwner())) + size++; + } + Residence.getInstance().msg(sender, lm.Flag_ChangeDeny, flag, size); + return false; + } + } + } + + if (checkCanSetFlag(sender, flag, state, true, resadmin)) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(this.residence, sender instanceof Player ? (Player) sender : null, flag, + ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + if (super.setFlag(flag, state)) { + Residence.getInstance().msg(sender, lm.Flag_Set, flag, this.residence.getName(), flagstate); + return true; + } + } + return false; + } + + public boolean removeAllPlayerFlags(CommandSender sender, String targetPlayer, boolean resadmin) { + if (this.hasResidencePermission(sender, false) || resadmin) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(this.residence, sender instanceof Player ? (Player) sender : null, "ALL", + ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) { + return false; + } + super.removeAllPlayerFlags(targetPlayer); + Residence.getInstance().msg(sender, lm.Flag_RemovedAll, targetPlayer, this.residence.getName()); + return true; + } + return false; + } + + public boolean removeAllGroupFlags(Player player, String group, boolean resadmin) { + if (this.hasResidencePermission(player, false) || resadmin) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) { + return false; + } + super.removeAllGroupFlags(group); + Residence.getInstance().msg(player, lm.Flag_RemovedGroup, group, this.residence.getName()); + return true; + } + return false; + } + + @Override + public boolean setFlag(String flag, FlagState state) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + return super.setFlag(flag, state); + } + + @Override + public boolean setGroupFlag(String group, String flag, FlagState state) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + return super.setGroupFlag(group, flag, state); + } + + @Override + public boolean setPlayerFlag(String player, String flag, FlagState state) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, player); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + return super.setPlayerFlag(player, flag, state); + } + + public void applyDefaultFlags(Player player, boolean resadmin) { + if (this.hasResidencePermission(player, true) || resadmin) { + this.applyDefaultFlags(); + Residence.getInstance().msg(player, lm.Flag_Default); + } else + Residence.getInstance().msg(player, lm.General_NoPermission); + } + + public void applyDefaultFlags() { + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(this.getOwner()); + PermissionGroup group = rPlayer.getGroup(world); + Set> dflags = group.getDefaultResidenceFlags(); +// Set> dcflags = group.getDefaultCreatorFlags(); + Set>> dgflags = group.getDefaultGroupFlags(); + this.applyGlobalDefaults(); + for (Entry next : dflags) { + if (this.checkValidFlag(next.getKey(), true)) { + this.setFlag(next.getKey(), next.getValue() ? FlagState.TRUE : FlagState.FALSE); + } + } + +// for (Entry next : dcflags) { +// if (this.checkValidFlag(next.getKey(), false)) { +// if (next.getValue()) { +// this.setPlayerFlag(this.getOwner(), next.getKey(), FlagState.TRUE); +// } else { +// this.setPlayerFlag(this.getOwner(), next.getKey(), FlagState.FALSE); +// } +// } +// } + for (Entry> entry : dgflags) { + Map value = entry.getValue(); + for (Entry flag : value.entrySet()) { + this.setGroupFlag(entry.getKey(), flag.getKey(), flag.getValue() ? FlagState.TRUE : FlagState.FALSE); + } + } + } + + public void setOwner(String newOwner, boolean resetFlags) { + + ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); + Residence.getInstance().getServ().getPluginManager().callEvent(ownerchange); + + Residence.getInstance().getPlayerManager().removeResFromPlayer(ownerLastKnownName, residence.getName()); + Residence.getInstance().getPlayerManager().addResidence(newOwner, residence); + + ownerLastKnownName = newOwner; + + if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase(Residence.getInstance().getServerLandname())) { + ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());// the UUID for server owned land + } else { + UUID playerUUID = Residence.getInstance().getPlayerUUID(newOwner); + if (playerUUID != null) + ownerUUID = playerUUID; + else + ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it + } + if (resetFlags) + this.applyDefaultFlags(); + } + + public String getOwner() { + if (Residence.getInstance().getConfigManager().isOfflineMode()) + return ownerLastKnownName; + if (ownerUUID.toString().equals(Residence.getInstance().getServerLandUUID())) //check for server land + return Residence.getInstance().getServerLandname(); + String name = Residence.getInstance().getPlayerName(ownerUUID);//try to find the owner's name + if (name == null) + return ownerLastKnownName;//return last known if we cannot find it + ownerLastKnownName = name;//update last known if we did find it + return name; + } + + public UUID getOwnerUUID() { + return ownerUUID; + } + + public String getWorld() { + return world; + } + + @Override + public Map save() { + Map root = super.save(); + root.put("OwnerUUID", ownerUUID.toString()); + root.put("OwnerLastKnownName", ownerLastKnownName); +// root.put("World", world); + return root; + } + + public static ResidencePermissions load(String worldName, ClaimedResidence res, Map root) throws Exception { + ResidencePermissions newperms = new ResidencePermissions(res); + //newperms.owner = (String) root.get("Owner"); + if (root.containsKey("OwnerUUID")) { + newperms.ownerUUID = UUID.fromString((String) root.get("OwnerUUID"));//get owner UUID + // String name = Residence.getPlayerName(newperms.ownerUUID); //try to find the current name of the owner + newperms.ownerLastKnownName = (String) root.get("OwnerLastKnownName");//otherwise load last known name from file + + OfflinePlayer p = null; + if (newperms.ownerLastKnownName == null) + p = Bukkit.getOfflinePlayer(newperms.ownerUUID); + + if (p != null) + newperms.ownerLastKnownName = p.getName(); + + if (newperms.ownerLastKnownName == null) + return newperms; + + if (newperms.ownerLastKnownName.equalsIgnoreCase("Server land") || newperms.ownerLastKnownName.equalsIgnoreCase(Residence.getInstance().getServerLandname())) { + newperms.ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());//UUID for server land + newperms.ownerLastKnownName = Residence.getInstance().getServerLandname(); + } else if (newperms.ownerUUID.toString().equals(Residence.getInstance().getTempUserUUID())) //check for fake UUID + { + UUID realUUID = Residence.getInstance().getPlayerUUID(newperms.ownerLastKnownName);//try to find the real UUID of the player if possible now + if (realUUID != null) + newperms.ownerUUID = realUUID; + } + } else if (root.containsKey("Owner")) //convert old owner name save format into uuid format + { + String owner = (String) root.get("Owner"); + newperms.ownerLastKnownName = owner; + newperms.ownerUUID = Residence.getInstance().getPlayerUUID(owner); + if (newperms.ownerUUID == null) + newperms.ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//set fake UUID until we can find real one for last known player + } else { + newperms.ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());//cant determine owner name or UUID... setting zero UUID which is server land + newperms.ownerLastKnownName = Residence.getInstance().getServerLandname(); + } + newperms.world = worldName; + FlagPermissions.load(root, newperms); + + if (newperms.getOwner() == null || newperms.world == null || newperms.playerFlags == null || newperms.groupFlags == null || newperms.cuboidFlags == null) + throw new Exception("Invalid Residence Permissions..."); + return newperms; + } + + public void applyGlobalDefaults() { + this.clearFlags(); + FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); + FlagPermissions gCD = Residence.getInstance().getConfigManager().getGlobalCreatorDefaultFlags(); + Map gGD = Residence.getInstance().getConfigManager().getGlobalGroupDefaultFlags(); + for (Entry entry : gRD.cuboidFlags.entrySet()) { + if (entry.getValue()) + this.setFlag(entry.getKey(), FlagState.TRUE); + else + this.setFlag(entry.getKey(), FlagState.FALSE); + } + for (Entry entry : gCD.cuboidFlags.entrySet()) { + if (entry.getValue()) + this.setPlayerFlag(this.getOwner(), entry.getKey(), FlagState.TRUE); + else + this.setPlayerFlag(this.getOwner(), entry.getKey(), FlagState.FALSE); + } + for (Entry entry : gGD.entrySet()) { + for (Entry flag : entry.getValue().cuboidFlags.entrySet()) { + if (flag.getValue()) + this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); + else + this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); + } + } + } + + public boolean setFlagGroup(CommandSender sender, String flaggroup, String state, boolean resadmin) { + if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { + ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); + boolean changed = false; + for (String flag : flags) { + if (this.setFlag(sender, flag, state, resadmin)) { + changed = true; + } + } + return changed; + } + return false; + } + + public boolean setFlagGroupOnGroup(Player player, String flaggroup, String group, String state, boolean resadmin) { + if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { + ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); + boolean changed = false; + for (String flag : flags) { + if (this.setGroupFlag(player, group, flag, state, resadmin)) { + changed = true; + } + } + return changed; + } + return false; + } + + public boolean setFlagGroupOnPlayer(CommandSender sender, String target, String flaggroup, String state, boolean resadmin) { + if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { + ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); + boolean changed = false; + String flagString = ""; + int i = 0; + for (String flag : flags) { + i++; + if (this.setPlayerFlag(sender, target, flag, state, resadmin, false)) { + changed = true; + flagString += flag; + if (i < flags.size() - 1) + flagString += ", "; + } + } + if (flagString.length() > 0) + Residence.getInstance().msg(sender, lm.Flag_Set, flagString, target, state); + return changed; + } + return false; + } + + public String getOwnerLastKnownName() { + return ownerLastKnownName; + } + + public void setOwnerLastKnownName(String ownerLastKnownName) { + this.ownerLastKnownName = ownerLastKnownName; + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java index 3b9a4cfa3..93faf24ff 100644 --- a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java +++ b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java @@ -1,142 +1,144 @@ -package com.bekvon.bukkit.residence.protection; - -import com.bekvon.bukkit.residence.Residence; - -import java.io.File; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -public class WorldFlagManager { - protected Map> groupperms; - protected Map worldperms; - protected FlagPermissions globaldefaults; - private Residence plugin; - - public WorldFlagManager(Residence plugin) { - this.plugin = plugin; - globaldefaults = new FlagPermissions(); - worldperms = new HashMap<>(); - groupperms = new HashMap<>(); - this.parsePerms(); - } - - public FlagPermissions getPerms(Player player) { - return this.getPerms(player.getWorld().getName(), plugin.getPermissionManager().getGroupNameByPlayer(player)); - } - - public FlagPermissions getPerms(String world, String group) { - world = world.toLowerCase(); - group = group.toLowerCase(); - Map groupworldperms = groupperms.get(group); - if (groupworldperms == null) { - return this.getPerms(world); - } - FlagPermissions list = groupworldperms.get(world); - if (list == null) { - list = groupworldperms.get("global." + world); - if (list == null) { - list = groupworldperms.get("global"); - } - if (list == null) { - return this.getPerms(world); - } - } - return list; - } - - public FlagPermissions getPerms(String world) { - world = world.toLowerCase(); - FlagPermissions list = worldperms.get(world); - if (list == null) { - if (globaldefaults == null) - return new FlagPermissions(); - return globaldefaults; - } - return list; - } - - public final void parsePerms() { - try { - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); - FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); - - Set keys = flags.getConfigurationSection("Global.Flags").getKeys(false); - if (keys != null) { - for (String key : keys) { - if (key.equalsIgnoreCase("Global")) { - globaldefaults = FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags")); - } else { - worldperms.put(key.toLowerCase(), FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags"))); - } - } - } - for (Entry entry : worldperms.entrySet()) { - entry.getValue().setParent(globaldefaults); - } - - if (!groups.isConfigurationSection("Groups")) { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Your groups.yml file is incorrect!"); - return; - } - - keys = groups.getConfigurationSection("Groups").getKeys(false); - if (keys != null) { - for (String key : keys) { - if (!groups.contains("Groups." + key + ".Flags")) - continue; - if (!groups.contains("Groups." + key + ".Flags.World")) - continue; - if (key == null) - continue; - Set worldkeys = groups.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false); - - if (worldkeys == null) - continue; - - Map perms = new HashMap<>(); - for (String wkey : worldkeys) { - FlagPermissions list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); - if (wkey.equalsIgnoreCase("global")) { - list.setParent(globaldefaults); - perms.put(wkey.toLowerCase(), list); - for (Entry worldperm : worldperms.entrySet()) { - list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); - list.setParent(worldperm.getValue()); - perms.put("global." + worldperm.getKey().toLowerCase(), list); - } - } else { - perms.put(wkey.toLowerCase(), list); - } - } - for (Entry entry : perms.entrySet()) { - String wkey = entry.getKey(); - FlagPermissions list = entry.getValue(); - if (!wkey.startsWith("global.")) { - list.setParent(perms.get("global." + wkey)); - if (list.getParent() == null) { - list.setParent(worldperms.get(wkey)); - } - if (list.getParent() == null) { - list.setParent(globaldefaults); - } - } - } - groupperms.put(key.toLowerCase(), perms); - - } - } - } catch (Exception ex) { - Logger.getLogger(WorldFlagManager.class.getName()).log(Level.SEVERE, null, ex); - } - } -} +package com.bekvon.bukkit.residence.protection; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +public class WorldFlagManager { + protected Map> groupperms; + protected Map worldperms; + protected FlagPermissions globaldefaults; + private Residence plugin; + + public WorldFlagManager(Residence plugin) { + this.plugin = plugin; + globaldefaults = new FlagPermissions(); + worldperms = new HashMap<>(); + groupperms = new HashMap<>(); + this.parsePerms(); + } + + public FlagPermissions getPerms(Player player) { + ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + return this.getPerms(player.getWorld().getName(), resPlayer.getGroup().getGroupName()); + } + + public FlagPermissions getPerms(String world, String group) { + world = world.toLowerCase(); + group = group.toLowerCase(); + Map groupworldperms = groupperms.get(group); + if (groupworldperms == null) { + return this.getPerms(world); + } + FlagPermissions list = groupworldperms.get(world); + if (list == null) { + list = groupworldperms.get("global." + world); + if (list == null) { + list = groupworldperms.get("global"); + } + if (list == null) { + return this.getPerms(world); + } + } + return list; + } + + public FlagPermissions getPerms(String world) { + world = world.toLowerCase(); + FlagPermissions list = worldperms.get(world); + if (list == null) { + if (globaldefaults == null) + return new FlagPermissions(); + return globaldefaults; + } + return list; + } + + public final void parsePerms() { + try { + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); + FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); + + Set keys = flags.getConfigurationSection("Global.Flags").getKeys(false); + if (keys != null) { + for (String key : keys) { + if (key.equalsIgnoreCase("Global")) { + globaldefaults = FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags")); + } else { + worldperms.put(key.toLowerCase(), FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags"))); + } + } + } + for (Entry entry : worldperms.entrySet()) { + entry.getValue().setParent(globaldefaults); + } + + if (!groups.isConfigurationSection("Groups")) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Your groups.yml file is incorrect!"); + return; + } + + keys = groups.getConfigurationSection("Groups").getKeys(false); + if (keys != null) { + for (String key : keys) { + if (!groups.contains("Groups." + key + ".Flags")) + continue; + if (!groups.contains("Groups." + key + ".Flags.World")) + continue; + if (key == null) + continue; + Set worldkeys = groups.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false); + + if (worldkeys == null) + continue; + + Map perms = new HashMap<>(); + for (String wkey : worldkeys) { + FlagPermissions list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); + if (wkey.equalsIgnoreCase("global")) { + list.setParent(globaldefaults); + perms.put(wkey.toLowerCase(), list); + for (Entry worldperm : worldperms.entrySet()) { + list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); + list.setParent(worldperm.getValue()); + perms.put("global." + worldperm.getKey().toLowerCase(), list); + } + } else { + perms.put(wkey.toLowerCase(), list); + } + } + for (Entry entry : perms.entrySet()) { + String wkey = entry.getKey(); + FlagPermissions list = entry.getValue(); + if (!wkey.startsWith("global.")) { + list.setParent(perms.get("global." + wkey)); + if (list.getParent() == null) { + list.setParent(worldperms.get(wkey)); + } + if (list.getParent() == null) { + list.setParent(globaldefaults); + } + } + } + groupperms.put(key.toLowerCase(), perms); + + } + } + } catch (Exception ex) { + Logger.getLogger(WorldFlagManager.class.getName()).log(Level.SEVERE, null, ex); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 5a568a6b6..0e3cea262 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -1,259 +1,259 @@ -package com.bekvon.bukkit.residence.text.help; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.economy.rent.RentableLand; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.GetTime; -import com.bekvon.bukkit.residence.utils.RawMessage; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map.Entry; -import java.util.TreeMap; - -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class InformationPager { - Residence plugin; - - public InformationPager(Residence plugin) { - this.plugin = plugin; - } - - public void printInfo(CommandSender sender, String command, String title, String[] lines, int page) { - printInfo(sender, command, title, Arrays.asList(lines), page); - } - - public void printInfo(CommandSender sender, String command, String title, List lines, int page) { - - PageInfo pi = new PageInfo(6, lines.size(), page); - - if (!pi.isPageOk()) { - sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); - return; - } - plugin.msg(sender, lm.InformationPage_TopLine, title); - plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), - pi.getTotalPages(), lines.size())); - for (int i = pi.getStart(); i <= pi.getEnd(); i++) { - if (lines.size() > i) - sender.sendMessage(ChatColor.GREEN + lines.get(i)); - } - - plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, command); - } - - public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, int page, boolean resadmin) { - - int perPage = 20; - if (sender instanceof Player) - perPage = 6; - - PageInfo pi = new PageInfo(perPage, ownedResidences.size(), page); - - int start = pi.getStart(); - int pagecount = pi.getTotalPages(); - - if (!pi.isPageOk()) { - sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); - return; - } - if (targetPlayer != null) - plugin.msg(sender, lm.InformationPage_TopLine, plugin.msg(lm.General_Residences) + " - " + targetPlayer); - plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), - pagecount, ownedResidences.size())); - - String cmd = "res"; - if (resadmin) - cmd = "resadmin"; - - if (!(sender instanceof Player)) { - printListWithDelay(sender, ownedResidences, start - 1, resadmin); - return; - } - - List linesForConsole = new ArrayList(); - int y = -1; - - for (Entry resT : ownedResidences.entrySet()) { - y++; - if (y > pi.getEnd()) - break; - if (!pi.isInRange(y)) - continue; - - ClaimedResidence res = resT.getValue(); - StringBuilder StringB = new StringBuilder(); - StringB.append(" " + plugin.msg(lm.General_Owner, res.getOwner())); - String worldInfo = ""; - - if (res.getPermissions().has("hidden", FlagCombo.FalseOrNone) && res.getPermissions().has("coords", FlagCombo.TrueOrNone) || resadmin) { - worldInfo += "&6 (&3"; - CuboidArea area = res.getAreaArray()[0]; - worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() - .getBlockZ()); - worldInfo += "&6; &3"; - worldInfo += plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() - .getBlockZ()); - worldInfo += "&6)"; - worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); - StringB.append("\n" + worldInfo); - } - - StringB.append("\n " + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); - - String ExtraString = ""; - if (res.isForRent()) { - if (res.isRented()) { - ExtraString = " " + plugin.msg(lm.Residence_IsRented); - StringB.append("\n " + plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); - } else { - ExtraString = " " + plugin.msg(lm.Residence_IsForRent); - } - RentableLand rentable = res.getRentable(); - StringB.append("\n " + plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); - StringB.append("\n " + plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); - StringB.append("\n " + plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); - StringB.append("\n " + plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); - } - - if (res.isForSell()) { - ExtraString = " " + plugin.msg(lm.Residence_IsForSale); - StringB.append("\n " + plugin.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); - } - - String tpFlag = ""; - String moveFlag = ""; - if (sender instanceof Player && !res.isOwner(sender)) { - tpFlag = res.getPermissions().playerHas((Player) sender, Flags.tp, true) ? ChatColor.DARK_GREEN + "T" : ChatColor.DARK_RED + "T"; - moveFlag = res.getPermissions().playerHas(sender.getName(), Flags.move, true) ? ChatColor.DARK_GREEN + "M" : ChatColor.DARK_RED + "M"; - } - - String msg = plugin.msg(lm.Residence_ResList, y + 1, res.getName(), res.getWorld(), tpFlag + moveFlag, ExtraString); - - if (sender instanceof Player) - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + plugin.getResidenceManager().convertToRaw(null, msg, - StringB.toString(), cmd + " tp " + res.getName())); - else { - linesForConsole.add(msg + " " + StringB.toString().replace("\n", "")); - } - } - - if (targetPlayer != null) - ShowPagination(sender, pagecount, page, cmd + " list " + targetPlayer); - else - ShowPagination(sender, pagecount, page, cmd + " listall"); - } - - private void printListWithDelay(final CommandSender sender, final TreeMap ownedResidences, final int start, final boolean resadmin) { - - int i = start; - for (Entry resT : ownedResidences.entrySet()) { - i++; - if (i >= start + 100) - break; - if (ownedResidences.size() <= i) - break; - - ClaimedResidence res = resT.getValue(); - StringBuilder StringB = new StringBuilder(); - StringB.append(" " + plugin.msg(lm.General_Owner, res.getOwner())); - String worldInfo = ""; - - if (res.getPermissions().has("hidden", FlagCombo.FalseOrNone) && res.getPermissions().has("coords", FlagCombo.TrueOrNone) || resadmin) { - worldInfo += "&6 (&3"; - CuboidArea area = res.getAreaArray()[0]; - worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() - .getBlockZ()); - worldInfo += "&6; &3"; - worldInfo += plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() - .getBlockZ()); - worldInfo += "&6)"; - worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); - StringB.append("\n" + worldInfo); - } - - StringB.append("\n " + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); - - String ExtraString = ""; - if (res.isForRent()) { - if (res.isRented()) { - ExtraString = " " + plugin.msg(lm.Residence_IsRented); - StringB.append("\n " + plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); - } else { - ExtraString = " " + plugin.msg(lm.Residence_IsForRent); - } - RentableLand rentable = res.getRentable(); - StringB.append("\n " + plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); - StringB.append("\n " + plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); - StringB.append("\n " + plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); - StringB.append("\n " + plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); - } - - if (res.isForSell()) { - ExtraString = " " + plugin.msg(lm.Residence_IsForSale); - StringB.append("\n " + plugin.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); - } - - String msg = plugin.msg(lm.Residence_ResList, (i + 1), res.getName(), res.getWorld(), "", ExtraString); - - msg = ChatColor.stripColor(msg + " " + StringB.toString().replace("\n", "")); - msg = msg.replaceAll("\\s{2}", " "); - sender.sendMessage(msg); - } - -// if (ownedResidences.size() > 100) { -// i = 0; -// while (i < 100) { -// i++; -// ownedResidences.remove(ownedResidences.firstKey()); -// } -// } - - if (ownedResidences.isEmpty()) { - return; - } - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - printListWithDelay(sender, ownedResidences, start + 100, resadmin); - return; - } - }, 5L); - - } - - public void ShowPagination(CommandSender sender, int pageCount, int CurrentPage, String cmd) { - if (!cmd.startsWith("/")) - cmd = "/" + cmd; - String separator = ChatColor.GOLD + ""; - String simbol = "\u25AC"; - for (int i = 0; i < 10; i++) { - separator += simbol; - } - - if (pageCount == 1) - return; - - int NextPage = CurrentPage + 1; - NextPage = CurrentPage < pageCount ? NextPage : CurrentPage; - int Prevpage = CurrentPage - 1; - Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; - - RawMessage rm = new RawMessage(); - rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), CurrentPage > 1 ? "<<<" : null, CurrentPage > 1 ? cmd + " " + Prevpage : null); - rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, pageCount > CurrentPage ? ">>>" : null, pageCount > CurrentPage ? cmd + " " + NextPage : null); - if (pageCount != 0) - rm.show(sender); - } -} +package com.bekvon.bukkit.residence.text.help; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.economy.rent.RentableLand; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.GetTime; +import com.bekvon.bukkit.residence.utils.RawMessage; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map.Entry; +import java.util.TreeMap; + +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class InformationPager { + Residence plugin; + + public InformationPager(Residence plugin) { + this.plugin = plugin; + } + + public void printInfo(CommandSender sender, String command, String title, String[] lines, int page) { + printInfo(sender, command, title, Arrays.asList(lines), page); + } + + public void printInfo(CommandSender sender, String command, String title, List lines, int page) { + + PageInfo pi = new PageInfo(6, lines.size(), page); + + if (!pi.isPageOk()) { + sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); + return; + } + plugin.msg(sender, lm.InformationPage_TopLine, title); + plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), + pi.getTotalPages(), lines.size())); + for (int i = pi.getStart(); i <= pi.getEnd(); i++) { + if (lines.size() > i) + sender.sendMessage(ChatColor.GREEN + lines.get(i)); + } + + plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, command); + } + + public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, int page, boolean resadmin) { + + int perPage = 20; + if (sender instanceof Player) + perPage = 6; + + PageInfo pi = new PageInfo(perPage, ownedResidences.size(), page); + + int start = pi.getStart(); + int pagecount = pi.getTotalPages(); + + if (!pi.isPageOk()) { + sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); + return; + } + if (targetPlayer != null) + plugin.msg(sender, lm.InformationPage_TopLine, plugin.msg(lm.General_Residences) + " - " + targetPlayer); + plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), + pagecount, ownedResidences.size())); + + String cmd = "res"; + if (resadmin) + cmd = "resadmin"; + + if (!(sender instanceof Player)) { + printListWithDelay(sender, ownedResidences, start - 1, resadmin); + return; + } + + List linesForConsole = new ArrayList(); + int y = -1; + + for (Entry resT : ownedResidences.entrySet()) { + y++; + if (y > pi.getEnd()) + break; + if (!pi.isInRange(y)) + continue; + + ClaimedResidence res = resT.getValue(); + StringBuilder StringB = new StringBuilder(); + StringB.append(" " + plugin.msg(lm.General_Owner, res.getOwner())); + String worldInfo = ""; + + if (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin) { + worldInfo += "&6 (&3"; + CuboidArea area = res.getAreaArray()[0]; + worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() + .getBlockZ()); + worldInfo += "&6; &3"; + worldInfo += plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() + .getBlockZ()); + worldInfo += "&6)"; + worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + StringB.append("\n" + worldInfo); + } + + StringB.append("\n " + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); + + String ExtraString = ""; + if (res.isForRent()) { + if (res.isRented()) { + ExtraString = " " + plugin.msg(lm.Residence_IsRented); + StringB.append("\n " + plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); + } else { + ExtraString = " " + plugin.msg(lm.Residence_IsForRent); + } + RentableLand rentable = res.getRentable(); + StringB.append("\n " + plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); + StringB.append("\n " + plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); + StringB.append("\n " + plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); + StringB.append("\n " + plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + } + + if (res.isForSell()) { + ExtraString = " " + plugin.msg(lm.Residence_IsForSale); + StringB.append("\n " + plugin.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); + } + + String tpFlag = ""; + String moveFlag = ""; + if (sender instanceof Player && !res.isOwner(sender)) { + tpFlag = res.getPermissions().playerHas((Player) sender, Flags.tp, true) ? ChatColor.DARK_GREEN + "T" : ChatColor.DARK_RED + "T"; + moveFlag = res.getPermissions().playerHas(sender.getName(), Flags.move, true) ? ChatColor.DARK_GREEN + "M" : ChatColor.DARK_RED + "M"; + } + + String msg = plugin.msg(lm.Residence_ResList, y + 1, res.getName(), res.getWorld(), tpFlag + moveFlag, ExtraString); + + if (sender instanceof Player) + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + plugin.getResidenceManager().convertToRaw(null, msg, + StringB.toString(), cmd + " tp " + res.getName())); + else { + linesForConsole.add(msg + " " + StringB.toString().replace("\n", "")); + } + } + + if (targetPlayer != null) + ShowPagination(sender, pagecount, page, cmd + " list " + targetPlayer); + else + ShowPagination(sender, pagecount, page, cmd + " listall"); + } + + private void printListWithDelay(final CommandSender sender, final TreeMap ownedResidences, final int start, final boolean resadmin) { + + int i = start; + for (Entry resT : ownedResidences.entrySet()) { + i++; + if (i >= start + 100) + break; + if (ownedResidences.size() <= i) + break; + + ClaimedResidence res = resT.getValue(); + StringBuilder StringB = new StringBuilder(); + StringB.append(" " + plugin.msg(lm.General_Owner, res.getOwner())); + String worldInfo = ""; + + if (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin) { + worldInfo += "&6 (&3"; + CuboidArea area = res.getAreaArray()[0]; + worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() + .getBlockZ()); + worldInfo += "&6; &3"; + worldInfo += plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() + .getBlockZ()); + worldInfo += "&6)"; + worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + StringB.append("\n" + worldInfo); + } + + StringB.append("\n " + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); + + String ExtraString = ""; + if (res.isForRent()) { + if (res.isRented()) { + ExtraString = " " + plugin.msg(lm.Residence_IsRented); + StringB.append("\n " + plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); + } else { + ExtraString = " " + plugin.msg(lm.Residence_IsForRent); + } + RentableLand rentable = res.getRentable(); + StringB.append("\n " + plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); + StringB.append("\n " + plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); + StringB.append("\n " + plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); + StringB.append("\n " + plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + } + + if (res.isForSell()) { + ExtraString = " " + plugin.msg(lm.Residence_IsForSale); + StringB.append("\n " + plugin.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); + } + + String msg = plugin.msg(lm.Residence_ResList, (i + 1), res.getName(), res.getWorld(), "", ExtraString); + + msg = ChatColor.stripColor(msg + " " + StringB.toString().replace("\n", "")); + msg = msg.replaceAll("\\s{2}", " "); + sender.sendMessage(msg); + } + +// if (ownedResidences.size() > 100) { +// i = 0; +// while (i < 100) { +// i++; +// ownedResidences.remove(ownedResidences.firstKey()); +// } +// } + + if (ownedResidences.isEmpty()) { + return; + } + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + printListWithDelay(sender, ownedResidences, start + 100, resadmin); + return; + } + }, 5L); + + } + + public void ShowPagination(CommandSender sender, int pageCount, int CurrentPage, String cmd) { + if (!cmd.startsWith("/")) + cmd = "/" + cmd; + String separator = ChatColor.GOLD + ""; + String simbol = "\u25AC"; + for (int i = 0; i < 10; i++) { + separator += simbol; + } + + if (pageCount == 1) + return; + + int NextPage = CurrentPage + 1; + NextPage = CurrentPage < pageCount ? NextPage : CurrentPage; + int Prevpage = CurrentPage - 1; + Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; + + RawMessage rm = new RawMessage(); + rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), CurrentPage > 1 ? "<<<" : null, CurrentPage > 1 ? cmd + " " + Prevpage : null); + rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, pageCount > CurrentPage ? ">>>" : null, pageCount > CurrentPage ? cmd + " " + NextPage : null); + if (pageCount != 0) + rm.show(sender); + } +} diff --git a/src/com/residence/zip/ZipLibrary.java b/src/com/residence/zip/ZipLibrary.java index 8e05d7b5e..5b2173e57 100644 --- a/src/com/residence/zip/ZipLibrary.java +++ b/src/com/residence/zip/ZipLibrary.java @@ -1,152 +1,151 @@ -package com.residence.zip; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.zip.Deflater; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import org.bukkit.World; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.utils.Debug; - -public class ZipLibrary { - private Residence plugin; - private File BackupDir = new File(Residence.getInstance().getDataLocation(), "Backup"); - - public ZipLibrary(Residence residence) { - this.plugin = residence; - } - - private void cleanFiles() { - Long x = plugin.getConfigManager().BackupAutoCleanUpDays() * 60L * 1000L * 24L * 60L; - Long time = System.currentTimeMillis(); - for (File file : BackupDir.listFiles()) { - long diff = time - file.lastModified(); - if (diff > x) { - file.delete(); - } - } - } - - public void backup() throws IOException { - if (!BackupDir.isDirectory()) - try { - BackupDir.mkdir(); - } catch (Exception e) { - e.printStackTrace(); - return; - } - if (plugin.getConfigManager().BackupAutoCleanUpUse()) - cleanFiles(); - // Generate the proper date for the backup filename - Date date = new Date(); - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); - File fileZip = new File(BackupDir, dateFormat.format(date) + ".zip"); - - // Create the Source List, and add directories/etc to the file. - List sources = new ArrayList(); - - File saveFolder = new File(plugin.getDataLocation(), "Save"); - File worldFolder = new File(saveFolder, "Worlds"); - - if (!saveFolder.isDirectory()) { - return; - } - - File saveFile; - if (plugin.getConfigManager().BackupWorldFiles()) - for (World world : plugin.getServ().getWorlds()) { - saveFile = new File(worldFolder, "res_" + world.getName() + ".yml"); - if (saveFile.isFile()) { - sources.add(saveFile); - } - } - - if (plugin.getConfigManager().BackupforsaleFile()) - sources.add(new File(saveFolder, "forsale.yml")); - if (plugin.getConfigManager().BackupleasesFile()) - sources.add(new File(saveFolder, "leases.yml")); - if (plugin.getConfigManager().BackuppermlistsFile()) - sources.add(new File(saveFolder, "permlists.yml")); - if (plugin.getConfigManager().BackuprentFile()) - sources.add(new File(saveFolder, "rent.yml")); - - if (plugin.getConfigManager().BackupflagsFile()) - sources.add(new File(plugin.getDataLocation(), "flags.yml")); - if (plugin.getConfigManager().BackupgroupsFile()) - sources.add(new File(plugin.getDataLocation(), "groups.yml")); - if (plugin.getConfigManager().BackupconfigFile()) - sources.add(new File(plugin.getDataLocation(), "config.yml")); - - if (plugin.getConfigManager().UseZipBackup()) - packZip(fileZip, sources); - } - - private static void packZip(File output, List sources) throws IOException { - ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(output)); - zipOut.setLevel(Deflater.DEFAULT_COMPRESSION); - - for (File source : sources) { - if (source.isDirectory()) { - zipDir(zipOut, "", source); - } else { - zipFile(zipOut, "", source); - } - } - - zipOut.flush(); - zipOut.close(); - } - - private static String buildPath(String path, String file) { - if (path == null || path.isEmpty()) { - return file; - } - - return path + File.separator + file; - } - - private static void zipDir(ZipOutputStream zos, String path, File dir) throws IOException { - if (!dir.canRead()) { - return; - } - - File[] files = dir.listFiles(); - path = buildPath(path, dir.getName()); - - for (File source : files) { - if (source.isDirectory()) { - zipDir(zos, path, source); - } else { - zipFile(zos, path, source); - } - } - } - - private static void zipFile(ZipOutputStream zos, String path, File file) throws IOException { - if (!file.canRead()) { - return; - } - - zos.putNextEntry(new ZipEntry(buildPath(path, file.getName()))); - - FileInputStream fis = new FileInputStream(file); - byte[] buffer = new byte[4092]; - int byteCount = 0; - - while ((byteCount = fis.read(buffer)) != -1) { - zos.write(buffer, 0, byteCount); - } - - fis.close(); - zos.closeEntry(); - } -} +package com.residence.zip; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.zip.Deflater; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import org.bukkit.World; + +import com.bekvon.bukkit.residence.Residence; + +public class ZipLibrary { + private Residence plugin; + private File BackupDir = new File(Residence.getInstance().getDataLocation(), "Backup"); + + public ZipLibrary(Residence residence) { + this.plugin = residence; + } + + private void cleanFiles() { + Long x = plugin.getConfigManager().BackupAutoCleanUpDays() * 60L * 1000L * 24L * 60L; + Long time = System.currentTimeMillis(); + for (File file : BackupDir.listFiles()) { + long diff = time - file.lastModified(); + if (diff > x) { + file.delete(); + } + } + } + + public void backup() throws IOException { + if (!BackupDir.isDirectory()) + try { + BackupDir.mkdir(); + } catch (Exception e) { + e.printStackTrace(); + return; + } + if (plugin.getConfigManager().BackupAutoCleanUpUse()) + cleanFiles(); + // Generate the proper date for the backup filename + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); + File fileZip = new File(BackupDir, dateFormat.format(date) + ".zip"); + + // Create the Source List, and add directories/etc to the file. + List sources = new ArrayList(); + + File saveFolder = new File(plugin.getDataLocation(), "Save"); + File worldFolder = new File(saveFolder, "Worlds"); + + if (!saveFolder.isDirectory()) { + return; + } + + File saveFile; + if (plugin.getConfigManager().BackupWorldFiles()) + for (World world : plugin.getServ().getWorlds()) { + saveFile = new File(worldFolder, "res_" + world.getName() + ".yml"); + if (saveFile.isFile()) { + sources.add(saveFile); + } + } + + if (plugin.getConfigManager().BackupforsaleFile()) + sources.add(new File(saveFolder, "forsale.yml")); + if (plugin.getConfigManager().BackupleasesFile()) + sources.add(new File(saveFolder, "leases.yml")); + if (plugin.getConfigManager().BackuppermlistsFile()) + sources.add(new File(saveFolder, "permlists.yml")); + if (plugin.getConfigManager().BackuprentFile()) + sources.add(new File(saveFolder, "rent.yml")); + + if (plugin.getConfigManager().BackupflagsFile()) + sources.add(new File(plugin.getDataLocation(), "flags.yml")); + if (plugin.getConfigManager().BackupgroupsFile()) + sources.add(new File(plugin.getDataLocation(), "groups.yml")); + if (plugin.getConfigManager().BackupconfigFile()) + sources.add(new File(plugin.getDataLocation(), "config.yml")); + + if (plugin.getConfigManager().UseZipBackup()) + packZip(fileZip, sources); + } + + private static void packZip(File output, List sources) throws IOException { + ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(output)); + zipOut.setLevel(Deflater.DEFAULT_COMPRESSION); + + for (File source : sources) { + if (source.isDirectory()) { + zipDir(zipOut, "", source); + } else { + zipFile(zipOut, "", source); + } + } + + zipOut.flush(); + zipOut.close(); + } + + private static String buildPath(String path, String file) { + if (path == null || path.isEmpty()) { + return file; + } + + return path + File.separator + file; + } + + private static void zipDir(ZipOutputStream zos, String path, File dir) throws IOException { + if (!dir.canRead()) { + return; + } + + File[] files = dir.listFiles(); + path = buildPath(path, dir.getName()); + + for (File source : files) { + if (source.isDirectory()) { + zipDir(zos, path, source); + } else { + zipFile(zos, path, source); + } + } + } + + private static void zipFile(ZipOutputStream zos, String path, File file) throws IOException { + if (!file.canRead()) { + return; + } + + zos.putNextEntry(new ZipEntry(buildPath(path, file.getName()))); + + FileInputStream fis = new FileInputStream(file); + byte[] buffer = new byte[4092]; + int byteCount = 0; + + while ((byteCount = fis.read(buffer)) != -1) { + zos.write(buffer, 0, byteCount); + } + + fis.close(); + zos.closeEntry(); + } +} From 6c0d55723748b07d358224cb38c17de6706392e1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 Feb 2017 15:15:26 +0200 Subject: [PATCH 0340/1142] Prevent duplication on /resreload --- .../bekvon/bukkit/residence/Residence.java | 19 +- .../protection/ResidenceManager.java | 7 +- .../bukkit/residence/text/help/HelpEntry.java | 825 +++++++++--------- 3 files changed, 425 insertions(+), 426 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index c09d49f24..2689443b5 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -602,18 +602,13 @@ public void run() { }); } - if (rmanager == null) { - rmanager = new ResidenceManager(this); - } - if (leasemanager == null) { - leasemanager = new LeaseManager(this, rmanager); - } - if (tmanager == null) { - tmanager = new TransactionManager(this); - } - if (pmanager == null) { - pmanager = new PermissionListManager(this); - } + rmanager = new ResidenceManager(this); + + leasemanager = new LeaseManager(this, rmanager); + + tmanager = new TransactionManager(this); + + pmanager = new PermissionListManager(this); try { this.loadYml(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index ece035942..fccbeba3c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -49,8 +49,9 @@ public class ResidenceManager implements ResidenceInterface { private Residence plugin; public ResidenceManager(Residence plugin) { - residences = new TreeMap<>(); - chunkResidences = new HashMap<>(); + residences = new TreeMap(); + chunkResidences = new HashMap>>(); + shops = new ArrayList(); this.plugin = plugin; } @@ -801,7 +802,7 @@ public Map save() { public void load(Map root) throws Exception { if (root == null) return; - + residences.clear(); for (World world : plugin.getServ().getWorlds()) { long time = System.currentTimeMillis(); @SuppressWarnings("unchecked") diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 4211b00ca..7489183b3 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -1,411 +1,414 @@ -package com.bekvon.bukkit.residence.text.help; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.World; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.ResidenceCommandListener; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.HelpLines; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.RawMessage; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import org.bukkit.command.CommandSender; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -public class HelpEntry { - protected String name; - protected String desc; - protected String[] lines; - protected List subentrys; - protected static int linesPerPage = 8; - - public HelpEntry(String entryname) { - name = entryname; - subentrys = new ArrayList(); - lines = new String[0]; - } - - public String getName() { - if (name == null) - return ""; - return name; - } - - public void setName(String inname) { - name = inname; - } - - public void setDescription(String description) { - desc = description; - } - - public String getDescription() { - if (desc == null) - return ""; - return desc; - } - - public void printHelp(CommandSender sender, int page, boolean resadmin, String path) { - List helplines = this.getHelpData(sender, resadmin); - path = "/" + path.replace(".", " ") + " "; - - PageInfo pi = new PageInfo(linesPerPage, helplines.size(), page); - - if (!pi.isPageOk()) { - Residence.getInstance().msg(sender, lm.Invalid_Help); - return; - } - - String separator = Residence.getInstance().msg(lm.InformationPage_Separator); - if (!(sender instanceof Player)) - separator = "----------"; - - sender.sendMessage(separator + " " + Residence.getInstance().msg(lm.General_HelpPageHeader, path, page, pi.getTotalPages()) + " " + separator); - - for (int i = pi.getStart(); i <= pi.getEnd(); i++) { - if (helplines.get(i).getCommand() != null) { - HelpEntry sub = this.getSubEntry(helplines.get(i).getCommand()); - - String desc = ""; - int y = 0; - for (String one : sub.lines) { - desc += one; - y++; - if (y < sub.lines.length) { - desc += "\n"; - } - } - - if (resadmin) - path = path.replace("/res ", "/resadmin "); - - RawMessage rm = new RawMessage(); - rm.add(helplines.get(i).getDesc(), desc, null, path + helplines.get(i).getCommand()); - rm.show(sender); - - } else - sender.sendMessage(helplines.get(i).getDesc()); - - } - - String baseCmd = resadmin ? "resadmin" : "res"; - String cmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " : "/" + baseCmd + " ? "; - Residence.getInstance().getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, cmd); - } - - public void printHelp(CommandSender sender, int page, String path, boolean resadmin) { - HelpEntry subEntry = this.getSubEntry(path); - if (subEntry != null) { - subEntry.printHelp(sender, page, resadmin, path); - } else { - Residence.getInstance().msg(sender, lm.Invalid_Help); - } - } - - private List getHelpData(CommandSender sender, boolean resadmin) { - List helplines = new ArrayList(); - - for (String one : lines) { - helplines.add(new HelpLines(null, one)); - } - - FlagPermissions GlobalFlags = Residence.getInstance().getPermissionManager().getAllFlags(); - - Map unsortMap = new HashMap(); - - for (HelpEntry entry : subentrys) { - - if (!name.equalsIgnoreCase("flags")) { - if (ResidenceCommandListener.getAdminCommands().contains(entry.getName().toLowerCase()) && !resadmin) - continue; - - if (!ResidenceCommandListener.getAdminCommands().contains(entry.getName().toLowerCase()) && resadmin) - continue; - - if (!sender.hasPermission("residence.command." + entry.getName().toLowerCase())) - continue; - - } else { - if (GlobalFlags.getFlags().containsKey(entry.getName().toLowerCase())) { - Boolean state = GlobalFlags.getFlags().get(entry.getName().toLowerCase()); - if (!state && !resadmin && !sender.hasPermission("residence.flag." + entry.getName().toLowerCase())) { - continue; - } - - String desc = entry.getDescription(); - - switch (entry.getName().toLowerCase()) { - case "wspeed1": - desc = desc.replace("%1", Residence.getInstance().getConfigManager().getWalkSpeed1() + ""); - break; - case "wspeed2": - desc = desc.replace("%1", Residence.getInstance().getConfigManager().getWalkSpeed2() + ""); - break; - } - - // adding flag name and description for later sorting - unsortMap.put(entry.getName(), Residence.getInstance().msg(lm.InformationPage_FlagsList, entry.getName(), desc)); - continue; - } - } - - helplines.add(new HelpLines(entry.getName(), Residence.getInstance().msg(lm.InformationPage_GeneralList, entry.getName(), entry.getDescription()))); - } - - if (!unsortMap.isEmpty()) { - // Sorting flags help page by alphabet - unsortMap = Residence.getInstance().getSortingManager().sortStringByKeyASC(unsortMap); - // Converting HashMap to helplines - for (Entry one : unsortMap.entrySet()) { - helplines.add(new HelpLines(one.getKey(), one.getValue())); - } - } - - return helplines; - } - - public boolean containesEntry(String name) { - return this.getSubEntry(name) != null; - } - - public HelpEntry getSubEntry(String name) { - String[] split = name.split("\\."); - HelpEntry entry = this; - for (String entryname : split) { - entry = entry.findSubEntry(entryname); - if (entry == null) - return null; - } - return entry; - } - - private HelpEntry findSubEntry(String name) { - for (HelpEntry entry : subentrys) { - if (entry.getName().equalsIgnoreCase(name)) - return entry; - } - return null; - } - - public void addSubEntry(HelpEntry entry) { - if (!subentrys.contains(entry)) { - subentrys.add(entry); - } - } - - public void removeSubEntry(HelpEntry entry) { - if (subentrys.contains(entry)) { - subentrys.remove(entry); - } - } - - public int getSubEntryCount() { - return subentrys.size(); - } - - public static HelpEntry parseHelp(FileConfiguration node, String key) { - String split[] = key.split("\\."); - String thisname = split[split.length - 1]; - HelpEntry entry = new HelpEntry(thisname); - ConfigurationSection keysnode = node.getConfigurationSection(key); - - Set keys = null; - if (keysnode != null) - keys = keysnode.getKeys(false); - if (keys != null) { - if (keys.contains("Info")) { - List stringList = node.getStringList(key + ".Info"); - if (stringList != null) { - entry.lines = new String[stringList.size()]; - for (int i = 0; i < stringList.size(); i++) { - entry.lines[i] = ChatColor.translateAlternateColorCodes('&', stringList.get(i)); - } - } - } - if (keys.contains("Description")) { - entry.desc = node.getString(key + ".Description"); - } - if (keys.contains("SubCommands")) { - Set subcommandkeys = node.getConfigurationSection(key + ".SubCommands").getKeys(false); - if (key.equalsIgnoreCase("CommandHelp.SubCommands.res")) { - subcommandkeys.clear(); - for (String one : Residence.getInstance().getCommandFiller().getCommands()) { - subcommandkeys.add(one); - } - } - for (String subkey : subcommandkeys) { - entry.subentrys.add(HelpEntry.parseHelp(node, key + ".SubCommands." + subkey)); - } - } - } - return entry; - } - - @SuppressWarnings("deprecation") - public Set getSubCommands(CommandSender sender, String[] args) { - File langFile = new File(new File(Residence.getInstance().getDataLocation(), "Language"), "English.yml"); - Set subCommands = new HashSet(); - - if (langFile.isFile()) { - FileConfiguration node = new YamlConfiguration(); - try { - node.load(langFile); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - - ConfigurationSection meinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); - ConfigurationSection tempmeinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); - - if (args.length == 1) - return meinPath.getKeys(false); - - boolean ok = true; - int i = 0; - while (ok) { - - if (args[i].equalsIgnoreCase("")) - return tempmeinPath.getKeys(false); - - if (!tempmeinPath.isConfigurationSection(args[i] + ".SubCommands")) - break; - - tempmeinPath = tempmeinPath.getConfigurationSection(args[i] + ".SubCommands"); - - i++; - } - - int neededArgPlace = args.length - 2 - i; - - boolean subCommand = true; - if (tempmeinPath.isConfigurationSection(args[i])) { - subCommand = false; - tempmeinPath = tempmeinPath.getConfigurationSection(args[i]); - } - - List ArgsList = new ArrayList(); - - int ii = 0; - for (Entry, List> one : Residence.getInstance().getLocaleManager().CommandTab.entrySet()) { - List list = one.getKey(); - if (list.size() > ii && args.length > ii && list.get(ii).equalsIgnoreCase(args[ii])) { - ArgsList = one.getValue(); - } - i++; - } - - String NeededArg = null; - if (neededArgPlace < ArgsList.size() && neededArgPlace >= 0) - NeededArg = ArgsList.get(neededArgPlace); - - if (NeededArg != null) { - - List list = new ArrayList(); - - if (NeededArg.contains("%%")) { - list.addAll(Arrays.asList(NeededArg.split("%%"))); - } else - list.add(NeededArg); - - for (String oneArg : list) { - switch (oneArg) { - case "[playername]": - for (Player one : Bukkit.getOnlinePlayers()) - subCommands.add(one.getName()); - break; - case "[residence]": - if (sender instanceof Player) { - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); - if (res != null) { - String resName = res.getName(); - if (resName != null) - subCommands.add(resName); - } - List resList = Residence.getInstance().getPlayerManager().getResidencePlayer(((Player) sender)).getResList(); - for (ClaimedResidence oneRes : resList) { - subCommands.add(oneRes.getName()); - } - } else { - ArrayList resList = Residence.getInstance().getResidenceManager().getResidenceList(Residence.getInstance().getServerLandname(), true, false, false); - if (resList.size() > 0) - subCommands.addAll(resList); - } - break; - case "[cresidence]": - if (sender instanceof Player) { - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); - if (res != null) { - String resName = res.getName(); - if (resName != null) - subCommands.add(resName); - } - } - break; - case "[residenceshop]": - for (ClaimedResidence one : Residence.getInstance().getResidenceManager().getShops()) { - subCommands.add(one.getName()); - } - break; - case "[flag]": - for (Flags one : Flags.values()) { - subCommands.add(one.getName()); - } - break; - case "[material]": - for (Material one : Material.values()) { - subCommands.add(one.name().toLowerCase()); - } - break; - case "[materialId]": - for (Material one : Material.values()) { - subCommands.add(String.valueOf(one.getId())); - } - break; - case "[worldname]": - for (World one : Bukkit.getWorlds()) { - subCommands.add(one.getName()); - } - break; - default: - subCommands.add(oneArg); - break; - } - } - } - - String command = tempmeinPath.getCurrentPath().replace("CommandHelp.SubCommands.", "").replace(".SubCommands.", " "); - if (subCommands.size() > 0) { - return subCommands; - } - - if (subCommand) - return tempmeinPath.getKeys(false); - Bukkit.dispatchCommand(sender, command + " ?"); - } - return new HashSet(Arrays.asList("?")); - } -} +package com.bekvon.bukkit.residence.text.help; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.World; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.ResidenceCommandListener; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.HelpLines; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; +import com.bekvon.bukkit.residence.utils.RawMessage; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +public class HelpEntry { + protected String name; + protected String desc; + protected String[] lines; + protected List subentrys; + protected static int linesPerPage = 8; + + public HelpEntry(String entryname) { + name = entryname; + subentrys = new ArrayList(); + lines = new String[0]; + } + + public String getName() { + if (name == null) + return ""; + return name; + } + + public void setName(String inname) { + name = inname; + } + + public void setDescription(String description) { + desc = description; + } + + public String getDescription() { + if (desc == null) + return ""; + return desc; + } + + public void printHelp(CommandSender sender, int page, boolean resadmin, String path) { + List helplines = this.getHelpData(sender, resadmin); + path = "/" + path.replace(".", " ") + " "; + + PageInfo pi = new PageInfo(linesPerPage, helplines.size(), page); + + if (!pi.isPageOk()) { + Residence.getInstance().msg(sender, lm.Invalid_Help); + return; + } + + String separator = Residence.getInstance().msg(lm.InformationPage_Separator); + if (!(sender instanceof Player)) + separator = "----------"; + + sender.sendMessage(separator + " " + Residence.getInstance().msg(lm.General_HelpPageHeader, path, page, pi.getTotalPages()) + " " + separator); + Debug.D("here " + path + " " + page + " " + resadmin + " " + pi.getStart() + " " + pi.getEnd()); + for (int i = pi.getStart(); i <= pi.getEnd(); i++) { + if (helplines.get(i).getCommand() != null) { + HelpEntry sub = this.getSubEntry(helplines.get(i).getCommand()); + + String desc = ""; + int y = 0; + for (String one : sub.lines) { + desc += one; + y++; + if (y < sub.lines.length) { + desc += "\n"; + } + } + + if (resadmin) + path = path.replace("/res ", "/resadmin "); + + RawMessage rm = new RawMessage(); + rm.add(helplines.get(i).getDesc(), desc, null, path + helplines.get(i).getCommand()); + rm.show(sender); + + } else + sender.sendMessage(helplines.get(i).getDesc()); + + } + + String baseCmd = resadmin ? "resadmin" : "res"; + String cmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " : "/" + baseCmd + " ? "; + Residence.getInstance().getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, cmd); + } + + public void printHelp(CommandSender sender, int page, String path, boolean resadmin) { + HelpEntry subEntry = this.getSubEntry(path); + if (subEntry != null) { + subEntry.printHelp(sender, page, resadmin, path); + } else { + Residence.getInstance().msg(sender, lm.Invalid_Help); + } + } + + private List getHelpData(CommandSender sender, boolean resadmin) { + List helplines = new ArrayList(); + + for (String one : lines) { + helplines.add(new HelpLines(null, one)); + } + + FlagPermissions GlobalFlags = Residence.getInstance().getPermissionManager().getAllFlags(); + + Map unsortMap = new HashMap(); + + for (HelpEntry entry : subentrys) { + + if (!name.equalsIgnoreCase("flags")) { + if (ResidenceCommandListener.getAdminCommands().contains(entry.getName().toLowerCase()) && !resadmin) + continue; + + if (!ResidenceCommandListener.getAdminCommands().contains(entry.getName().toLowerCase()) && resadmin) + continue; + +// if (!sender.hasPermission("residence.command." + entry.getName().toLowerCase())){ +// Debug.D("no perm: " + entry.getName().toLowerCase()); +// continue; +// } + + } else { + if (GlobalFlags.getFlags().containsKey(entry.getName().toLowerCase())) { + Boolean state = GlobalFlags.getFlags().get(entry.getName().toLowerCase()); + if (!state && !resadmin && !sender.hasPermission("residence.flag." + entry.getName().toLowerCase())) { + continue; + } + + String desc = entry.getDescription(); + + switch (entry.getName().toLowerCase()) { + case "wspeed1": + desc = desc.replace("%1", Residence.getInstance().getConfigManager().getWalkSpeed1() + ""); + break; + case "wspeed2": + desc = desc.replace("%1", Residence.getInstance().getConfigManager().getWalkSpeed2() + ""); + break; + } + + // adding flag name and description for later sorting + unsortMap.put(entry.getName(), Residence.getInstance().msg(lm.InformationPage_FlagsList, entry.getName(), desc)); + continue; + } + } + + helplines.add(new HelpLines(entry.getName(), Residence.getInstance().msg(lm.InformationPage_GeneralList, entry.getName(), entry.getDescription()))); + } + + if (!unsortMap.isEmpty()) { + // Sorting flags help page by alphabet + unsortMap = Residence.getInstance().getSortingManager().sortStringByKeyASC(unsortMap); + // Converting HashMap to helplines + for (Entry one : unsortMap.entrySet()) { + helplines.add(new HelpLines(one.getKey(), one.getValue())); + } + } + + return helplines; + } + + public boolean containesEntry(String name) { + return this.getSubEntry(name) != null; + } + + public HelpEntry getSubEntry(String name) { + String[] split = name.split("\\."); + HelpEntry entry = this; + for (String entryname : split) { + entry = entry.findSubEntry(entryname); + if (entry == null) + return null; + } + return entry; + } + + private HelpEntry findSubEntry(String name) { + for (HelpEntry entry : subentrys) { + if (entry.getName().equalsIgnoreCase(name)) + return entry; + } + return null; + } + + public void addSubEntry(HelpEntry entry) { + if (!subentrys.contains(entry)) { + subentrys.add(entry); + } + } + + public void removeSubEntry(HelpEntry entry) { + if (subentrys.contains(entry)) { + subentrys.remove(entry); + } + } + + public int getSubEntryCount() { + return subentrys.size(); + } + + public static HelpEntry parseHelp(FileConfiguration node, String key) { + String split[] = key.split("\\."); + String thisname = split[split.length - 1]; + HelpEntry entry = new HelpEntry(thisname); + ConfigurationSection keysnode = node.getConfigurationSection(key); + + Set keys = null; + if (keysnode != null) + keys = keysnode.getKeys(false); + if (keys != null) { + if (keys.contains("Info")) { + List stringList = node.getStringList(key + ".Info"); + if (stringList != null) { + entry.lines = new String[stringList.size()]; + for (int i = 0; i < stringList.size(); i++) { + entry.lines[i] = ChatColor.translateAlternateColorCodes('&', stringList.get(i)); + } + } + } + if (keys.contains("Description")) { + entry.desc = node.getString(key + ".Description"); + } + if (keys.contains("SubCommands")) { + Set subcommandkeys = node.getConfigurationSection(key + ".SubCommands").getKeys(false); + if (key.equalsIgnoreCase("CommandHelp.SubCommands.res")) { + subcommandkeys.clear(); + for (String one : Residence.getInstance().getCommandFiller().getCommands()) { + subcommandkeys.add(one); + } + } + for (String subkey : subcommandkeys) { + entry.subentrys.add(HelpEntry.parseHelp(node, key + ".SubCommands." + subkey)); + } + } + } + return entry; + } + + @SuppressWarnings("deprecation") + public Set getSubCommands(CommandSender sender, String[] args) { + File langFile = new File(new File(Residence.getInstance().getDataLocation(), "Language"), "English.yml"); + Set subCommands = new HashSet(); + + if (langFile.isFile()) { + FileConfiguration node = new YamlConfiguration(); + try { + node.load(langFile); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + + ConfigurationSection meinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); + ConfigurationSection tempmeinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); + + if (args.length == 1) + return meinPath.getKeys(false); + + boolean ok = true; + int i = 0; + while (ok) { + + if (args[i].equalsIgnoreCase("")) + return tempmeinPath.getKeys(false); + + if (!tempmeinPath.isConfigurationSection(args[i] + ".SubCommands")) + break; + + tempmeinPath = tempmeinPath.getConfigurationSection(args[i] + ".SubCommands"); + + i++; + } + + int neededArgPlace = args.length - 2 - i; + + boolean subCommand = true; + if (tempmeinPath.isConfigurationSection(args[i])) { + subCommand = false; + tempmeinPath = tempmeinPath.getConfigurationSection(args[i]); + } + + List ArgsList = new ArrayList(); + + int ii = 0; + for (Entry, List> one : Residence.getInstance().getLocaleManager().CommandTab.entrySet()) { + List list = one.getKey(); + if (list.size() > ii && args.length > ii && list.get(ii).equalsIgnoreCase(args[ii])) { + ArgsList = one.getValue(); + } + i++; + } + + String NeededArg = null; + if (neededArgPlace < ArgsList.size() && neededArgPlace >= 0) + NeededArg = ArgsList.get(neededArgPlace); + + if (NeededArg != null) { + + List list = new ArrayList(); + + if (NeededArg.contains("%%")) { + list.addAll(Arrays.asList(NeededArg.split("%%"))); + } else + list.add(NeededArg); + + for (String oneArg : list) { + switch (oneArg) { + case "[playername]": + for (Player one : Bukkit.getOnlinePlayers()) + subCommands.add(one.getName()); + break; + case "[residence]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getName(); + if (resName != null) + subCommands.add(resName); + } + List resList = Residence.getInstance().getPlayerManager().getResidencePlayer(((Player) sender)).getResList(); + for (ClaimedResidence oneRes : resList) { + subCommands.add(oneRes.getName()); + } + } else { + ArrayList resList = Residence.getInstance().getResidenceManager().getResidenceList(Residence.getInstance().getServerLandname(), true, false, false); + if (resList.size() > 0) + subCommands.addAll(resList); + } + break; + case "[cresidence]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getName(); + if (resName != null) + subCommands.add(resName); + } + } + break; + case "[residenceshop]": + for (ClaimedResidence one : Residence.getInstance().getResidenceManager().getShops()) { + subCommands.add(one.getName()); + } + break; + case "[flag]": + for (Flags one : Flags.values()) { + subCommands.add(one.getName()); + } + break; + case "[material]": + for (Material one : Material.values()) { + subCommands.add(one.name().toLowerCase()); + } + break; + case "[materialId]": + for (Material one : Material.values()) { + subCommands.add(String.valueOf(one.getId())); + } + break; + case "[worldname]": + for (World one : Bukkit.getWorlds()) { + subCommands.add(one.getName()); + } + break; + default: + subCommands.add(oneArg); + break; + } + } + } + + String command = tempmeinPath.getCurrentPath().replace("CommandHelp.SubCommands.", "").replace(".SubCommands.", " "); + if (subCommands.size() > 0) { + return subCommands; + } + + if (subCommand) + return tempmeinPath.getKeys(false); + Bukkit.dispatchCommand(sender, command + " ?"); + } + return new HashSet(Arrays.asList("?")); + } +} From 39a4c37fe0ec3efb8e71c513cf29f803e60b89c1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 Feb 2017 16:10:08 +0200 Subject: [PATCH 0341/1142] Better way to get offline player info --- .../bekvon/bukkit/residence/Residence.java | 72 ++++++++++--------- .../residence/containers/ResidencePlayer.java | 3 +- .../listeners/ResidencePlayerListener.java | 2 +- .../residence/protection/FlagPermissions.java | 7 +- .../residence/protection/PlayerManager.java | 43 +++++++---- .../protection/ResidenceManager.java | 2 + .../protection/ResidencePermissions.java | 2 +- 7 files changed, 76 insertions(+), 55 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 2689443b5..5764e9f0e 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -163,7 +163,7 @@ public class Residence extends JavaPlugin { public List resadminToggle; private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW", "French" }; private ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); - private Map cachedPlayerNameUUIDs = new HashMap(); + private Map cachedPlayerNameUUIDs = new HashMap(); private WorldEditPlugin wep = null; private WorldGuardPlugin wg = null; private int wepid; @@ -579,11 +579,10 @@ public void onEnable() { continue; String name = player.getName(); if (name == null) - continue; - getOfflinePlayerMap().put(name.toLowerCase(), player); - getCachedPlayerNameUUIDs().put(player.getUniqueId(), player.getName()); + continue; + this.addOfflinePlayerToChache(player); } - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Player data loaded: " + getOfflinePlayerMap().size()); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Player data loaded: " + OfflinePlayerList.size()); } else { Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { @Override @@ -594,8 +593,7 @@ public void run() { String name = player.getName(); if (name == null) continue; - getOfflinePlayerMap().put(name.toLowerCase(), player); - getCachedPlayerNameUUIDs().put(player.getUniqueId(), player.getName()); + addOfflinePlayerToChache(player); } return; } @@ -1489,30 +1487,26 @@ public UUID getPlayerUUID(String playername) { // return null; Player p = getServ().getPlayer(playername); if (p == null) { - if (getOfflinePlayerMap().containsKey(playername.toLowerCase())) - return getOfflinePlayerMap().get(playername.toLowerCase()).getUniqueId(); + OfflinePlayer po = OfflinePlayerList.get(playername.toLowerCase()); + if (po != null) + return po.getUniqueId(); } else return p.getUniqueId(); return null; } - public ConcurrentHashMap getOfflinePlayerMap() { - return OfflinePlayerList; - } - - @SuppressWarnings("deprecation") public OfflinePlayer getOfflinePlayer(String Name) { - if (getOfflinePlayerMap().containsKey(Name.toLowerCase())) { - return getOfflinePlayerMap().get(Name.toLowerCase()); - } + OfflinePlayer offPlayer = OfflinePlayerList.get(Name.toLowerCase()); + if (offPlayer != null) + return offPlayer; + Player player = Bukkit.getPlayer(Name); - OfflinePlayer offPlayer = null; if (player != null) - offPlayer = player; - if (offPlayer == null) - offPlayer = Bukkit.getOfflinePlayer(Name); - if (offPlayer != null) - getOfflinePlayerMap().put(Name.toLowerCase(), offPlayer); + return player; + +// offPlayer = Bukkit.getOfflinePlayer(Name); +// if (offPlayer != null) +// addOfflinePlayerToChache(offPlayer); return offPlayer; } @@ -1523,6 +1517,26 @@ public String getPlayerUUIDString(String playername) { return null; } + public OfflinePlayer getOfflinePlayer(UUID uuid) { + OfflinePlayer offPlayer = cachedPlayerNameUUIDs.get(uuid); + if (offPlayer != null) + return offPlayer; + + Player player = Bukkit.getPlayer(uuid); + if (player != null) + return player; + +// offPlayer = Bukkit.getOfflinePlayer(uuid); +// if (offPlayer != null) +// addOfflinePlayerToChache(offPlayer); + return offPlayer; + } + + public void addOfflinePlayerToChache(OfflinePlayer player) { + OfflinePlayerList.put(player.getName().toLowerCase(), player); + cachedPlayerNameUUIDs.put(player.getUniqueId(), player); + } + public String getPlayerName(String uuid) { try { return getPlayerName(UUID.fromString(uuid)); @@ -1642,18 +1656,6 @@ public InformationPager getInfoPageManager() { return InformationPagerManager; } - public Map getCachedPlayerNameUUIDs() { - return cachedPlayerNameUUIDs; - } - - public void addCachedPlayerNameUUIDs(UUID uuid, String name) { - cachedPlayerNameUUIDs.put(uuid, name); - } - - public void addCachedPlayerNameUUIDs(Map cachedPlayerNameUUIDs2) { - cachedPlayerNameUUIDs.putAll(cachedPlayerNameUUIDs2); - } - public WorldEditPlugin getWorldEdit() { return wep; } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 20b888df1..837ace966 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -36,8 +36,7 @@ public class ResidencePlayer { public ResidencePlayer(Player player) { if (player == null) return; - Residence.getInstance().getOfflinePlayerMap().put(player.getName(), player); - Residence.getInstance().addCachedPlayerNameUUIDs(player.getUniqueId(), player.getName()); + Residence.getInstance().addOfflinePlayerToChache(player); this.updatePlayer(player); this.RecalculatePermissions(); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index e416a963d..abffbe4e3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -727,7 +727,7 @@ public void onPlayerQuit(PlayerQuitEvent event) { lastOutsideLoc.remove(pname); plugin.getChatManager().removeFromChannel(pname); plugin.getPlayerListener().removePlayerResidenceChat(pname); - plugin.getOfflinePlayerMap().put(pname, event.getPlayer()); + plugin.addOfflinePlayerToChache(event.getPlayer()); if (plugin.getAutoSelectionManager().getList().containsKey(pname.toLowerCase())) plugin.getAutoSelectionManager().getList().remove(pname); } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 070dbe251..efd0c39ac 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -15,6 +15,7 @@ import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.OfflinePlayer; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.permissions.Permission; @@ -590,7 +591,7 @@ public Map save() { // root.put("LastKnownPlayerNames", cachedPlayerNameUUIDs); // Putting uuid's to main cache for later save - Residence.getInstance().addCachedPlayerNameUUIDs(cachedPlayerNameUUIDs); +// Residence.getInstance().addCachedPlayerNameUUIDs(cachedPlayerNameUUIDs); root.put("PlayerFlags", playerFlags); if (!groupFlags.isEmpty()) @@ -621,8 +622,8 @@ protected static FlagPermissions load(Map root, FlagPermissions try { UUID uuid = UUID.fromString(one.getKey()); - String name = Residence.getInstance().getCachedPlayerNameUUIDs().get(uuid); - newperms.cachedPlayerNameUUIDs.put(uuid, name); + OfflinePlayer player = Residence.getInstance().getOfflinePlayer(uuid); + newperms.cachedPlayerNameUUIDs.put(uuid, player.getName()); } catch (Exception e) { continue; } diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 6a0238184..85c950556 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -18,6 +18,7 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.utils.Debug; public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); @@ -59,14 +60,14 @@ public ResidencePlayer playerJoin(Player player) { return resPlayer; } -// public ResidencePlayer playerJoin(String player) { -// if (!players.containsKey(player.toLowerCase())) { -// ResidencePlayer resPlayer = new ResidencePlayer(player); -// players.put(player.toLowerCase(), resPlayer); -// return resPlayer; -// } -// return null; -// } + public ResidencePlayer playerJoin(String player) { + if (!players.containsKey(player.toLowerCase())) { + ResidencePlayer resPlayer = new ResidencePlayer(player); + addPlayer(resPlayer); + return resPlayer; + } + return null; + } @Override public ArrayList getResidenceList(UUID uuid) { @@ -154,8 +155,11 @@ public TreeMap getResidencesMap(String player, boolean TreeMap temp = new TreeMap(); ResidencePlayer resPlayer = players.get(player.toLowerCase()); - if (resPlayer == null) + if (resPlayer == null) { + + Debug.D("no red player " + players.size()); return temp; + } for (Entry one : resPlayer.getResidenceMap().entrySet()) { boolean hidden = one.getValue().getPermissions().has(Flags.hidden, false); @@ -243,10 +247,22 @@ public ResidencePlayer getResidencePlayer(String player, boolean recalculate) { resPlayer = players.get(player.toLowerCase()); if (recalculate || resPlayer.isOnline()) resPlayer.RecalculatePermissions(); + } else { + resPlayer = playerJoin(player); + } + return resPlayer; + } + + public ResidencePlayer getResidencePlayer(String name, UUID uuid) { + Player p = Bukkit.getPlayer(uuid); + if (p != null) + return getResidencePlayer(p); + ResidencePlayer resPlayer = null; + if (playersUuid.containsKey(uuid)) { + resPlayer = playersUuid.get(uuid); + } else { + resPlayer = playerJoin(name); } -// else { -// resPlayer = playerJoin(player); -// } return resPlayer; } @@ -259,8 +275,9 @@ public void renameResidence(String player, String oldName, String newName) { } public void addResidence(String player, ClaimedResidence residence) { - ResidencePlayer resPlayer = getResidencePlayer(player); + ResidencePlayer resPlayer = getResidencePlayer(player, residence.getOwnerUUID()); if (resPlayer != null) { + Debug.D("add res to player " + resPlayer.getPlayerName()); resPlayer.addResidence(residence); } return; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index fccbeba3c..6249c1967 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -36,6 +36,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.RawMessage; import com.griefcraft.cache.ProtectionCache; @@ -875,6 +876,7 @@ public Map> loadMap(String worldName, Map Date: Sat, 18 Feb 2017 16:21:02 +0200 Subject: [PATCH 0342/1142] Fix for offline mode --- .../bukkit/residence/ConfigManager.java | 3418 ++++++++--------- .../residence/containers/ResidencePlayer.java | 7 + .../residence/protection/PlayerManager.java | 13 +- 3 files changed, 1727 insertions(+), 1711 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index c4cf9529f..8e6195e8c 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -1,1709 +1,1709 @@ -package com.bekvon.bukkit.residence; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Effect; -import org.bukkit.Location; - -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.RandomTeleport; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.ParticleEffects; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.inventory.ItemStack; - -public class ConfigManager { - protected String defaultGroup; - protected boolean useLeases; - protected boolean ResMoneyBack; - protected boolean enableEconomy; - protected boolean ExtraEnterMessage; - protected boolean adminsOnly; - protected boolean allowEmptyResidences; - protected boolean NoLava; - protected boolean NoWater; - protected boolean NoLavaPlace; - protected boolean useBlockFall; - protected boolean NoWaterPlace; - protected boolean AutoCleanUp; - protected boolean SellSubzone; - protected boolean LwcOnDelete; - protected boolean LwcOnBuy; - protected boolean LwcOnUnrent; - protected List LwcMatList = new ArrayList(); - protected boolean UseClean; - protected boolean PvPFlagPrevent; - protected boolean OverridePvp; - protected boolean BlockAnyTeleportation; - protected int infoToolId; - protected int AutoCleanUpDays; - protected int selectionToolId; - protected boolean adminOps; - protected boolean AdminFullAccess; - protected String multiworldPlugin; - protected boolean enableRentSystem; - protected boolean RentPreventRemoval; - protected boolean RentInformOnEnding; - protected boolean RentAllowRenewing; - protected boolean RentStayInMarket; - protected boolean RentAllowAutoPay; - protected boolean RentPlayerAutoPay; - protected boolean leaseAutoRenew; - protected boolean ShortInfoUse; - protected boolean OnlyLike; - protected int RentInformBefore; - protected int RentInformDelay; - protected int rentCheckInterval; - protected int chatPrefixLength; - protected int leaseCheckInterval; - protected int autoSaveInt; - - // Backup stuff - protected boolean BackupAutoCleanUpUse; - protected int BackupAutoCleanUpDays; - protected boolean UseZipBackup; - protected boolean BackupWorldFiles; - protected boolean BackupforsaleFile; - protected boolean BackupleasesFile; - protected boolean BackuppermlistsFile; - protected boolean BackuprentFile; - protected boolean BackupflagsFile; - protected boolean BackupgroupsFile; - protected boolean BackupconfigFile; - - protected int FlowLevel; - protected int PlaceLevel; - protected int BlockFallLevel; - protected int CleanLevel; - protected int NewPlayerRangeX; - protected int NewPlayerRangeY; - protected int NewPlayerRangeZ; - protected int VisualizerRange; - protected int VisualizerShowFor; - protected int VisualizerUpdateInterval; - protected int TeleportDelay; - protected boolean TeleportTitleMessage; - protected int VisualizerRowSpacing; - protected int VisualizerCollumnSpacing; - private int VisualizerFrameCap; - private int VisualizerSidesCap; - protected boolean flagsInherit; - protected ChatColor chatColor; - protected boolean chatEnable; - protected boolean actionBar; - protected boolean ActionBarOnSelection; - protected boolean visualizer; - protected int minMoveUpdate; - protected int MaxResCount; - protected int MaxRentCount; - protected int MaxSubzonesCount; - protected int MaxSubzoneDepthCount; - protected int VoteRangeFrom; - protected int HealInterval; - protected int FeedInterval; - protected int VoteRangeTo; - protected FlagPermissions globalCreatorDefaults; - protected FlagPermissions globalResidenceDefaults; - protected Map globalGroupDefaults; - protected String language; - protected String DefaultWorld; - protected String DateFormat; - protected String TimeZone; - protected boolean preventBuildInRent; - protected boolean PreventSubZoneRemoval; - protected boolean stopOnSaveError; - protected boolean legacyperms; - protected String namefix; - protected boolean showIntervalMessages; - protected boolean ShowNoobMessage; - protected boolean NewPlayerUse; - protected boolean NewPlayerFree; - protected boolean spoutEnable; - protected boolean AutoMobRemoval; - protected boolean BounceAnimation; - protected boolean useFlagGUI; - protected int AutoMobRemovalInterval; - protected boolean enableLeaseMoneyAccount; - protected boolean CouldronCompatability; - protected boolean enableDebug = false; - protected boolean versionCheck = true; - protected boolean UUIDConvertion = true; - protected boolean OfflineMode = false; - protected boolean SelectionIgnoreY = false; - protected boolean NoCostForYBlocks = false; - protected boolean useVisualizer; - protected boolean DisableListeners; - protected boolean DisableCommands; - -// protected boolean DisableNoFlagMessageUse; -// protected List DisableNoFlagMessageWorlds = new ArrayList(); - - protected boolean TNTExplodeBelow; - protected int TNTExplodeBelowLevel; - protected boolean CreeperExplodeBelow; - protected int CreeperExplodeBelowLevel; - protected List customContainers; - protected List customBothClick; - protected List customRightClick; - protected List CleanBlocks; - protected List NoFlowWorlds; - protected List AutoCleanUpWorlds; - protected List NoPlaceWorlds; - protected List BlockFallWorlds; - protected List CleanWorlds; - protected List FlagsList; - protected List NegativePotionEffects; - protected List NegativeLingeringPotionEffects; - private Double WalkSpeed1; - private Double WalkSpeed2; - - protected Location KickLocation; - protected Location FlyLandLocation; - - protected List RTeleport = new ArrayList(); - - protected List DisabledWorldsList = new ArrayList(); - - protected int rtCooldown; - protected int rtMaxTries; - - protected ItemStack GuiTrue; - protected ItemStack GuiFalse; - protected ItemStack GuiRemove; - - private boolean enforceAreaInsideArea; - - protected ParticleEffects SelectedFrame; - protected ParticleEffects SelectedSides; - - protected ParticleEffects OverlapFrame; - protected ParticleEffects OverlapSides; - - protected Effect SelectedSpigotFrame; - protected Effect SelectedSpigotSides; - - protected Effect OverlapSpigotFrame; - protected Effect OverlapSpigotSides; - - // DynMap - public boolean DynMapUse; - public boolean DynMapShowFlags; - public boolean DynMapHideHidden; - public boolean DynMapLayer3dRegions; - public int DynMapLayerSubZoneDepth; - public String DynMapBorderColor; - public double DynMapBorderOpacity; - public int DynMapBorderWeight; - public String DynMapFillColor; - public double DynMapFillOpacity; - public String DynMapFillForRent; - public String DynMapFillRented; - public String DynMapFillForSale; - public List DynMapVisibleRegions; - public List DynMapHiddenRegions; - // DynMap - - // Schematics - public boolean RestoreAfterRentEnds; - public boolean SchematicsSaveOnFlagChange; - // Schematics - - // Global chat - public boolean GlobalChatEnabled; - public boolean GlobalChatSelfModify; - public String GlobalChatFormat; - // Global chat - - private Residence plugin; - - public ConfigManager(Residence plugin) { -// FileConfiguration config = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "config.yml")); - this.plugin = plugin; - globalCreatorDefaults = new FlagPermissions(); - globalResidenceDefaults = new FlagPermissions(); - globalGroupDefaults = new HashMap(); - UpdateConfigFile(); - this.loadFlags(); - this.loadGroups(); - } - - public static String Colors(String text) { - return ChatColor.translateAlternateColorCodes('&', text); - } - - public void ChangeConfig(String path, Boolean stage) { - File f = new File(plugin.getDataFolder(), "config.yml"); - - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - - if (!conf.isBoolean(path)) - return; - - conf.set(path, stage); - - try { - conf.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - plugin.getConfigManager().UpdateConfigFile(); - } - - public static List ColorsArray(List text, Boolean colorize) { - List temp = new ArrayList(); - for (String part : text) { - if (colorize) - part = Colors(part); - temp.add(Colors(part)); - } - return temp; - } - - void UpdateFlagFile() { - - File f = new File(plugin.getDataFolder(), "flags.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - - for (Flags fl : Flags.values()) { - if (conf.isBoolean("Global.FlagPermission." + fl.getName())) - continue; - conf.createSection("Global.FlagPermission." + fl.getName()); - conf.set("Global.FlagPermission." + fl.getName(), fl.isEnabled()); - } - - if (!conf.isConfigurationSection("Global.FlagGui")) - conf.createSection("Global.FlagGui"); - - ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); - - for (Flags fl : Flags.values()) { - guiSection.set(fl.getName() + ".Id", fl.getId()); - guiSection.set(fl.getName() + ".Data", fl.getData()); - } - - try { - conf.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void UpdateGroupedFlagsFile() { - - File f = new File(plugin.getDataFolder(), "flags.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - - if (!conf.isConfigurationSection("Global.GroupedFlags")) { - conf.createSection("Global.GroupedFlags"); - conf.set("Global.GroupedFlags.redstone", Arrays.asList( - Flags.note.getName(), - Flags.pressure.getName(), - Flags.lever.getName(), - Flags.button.getName(), - Flags.diode.getName())); - conf.set("Global.GroupedFlags.craft", Arrays.asList( - Flags.brew.getName(), - Flags.table.getName(), - Flags.enchant.getName())); - conf.set("Global.GroupedFlags.trusted", Arrays.asList( - Flags.use.getName(), - Flags.tp.getName(), - Flags.build.getName(), - Flags.container.getName(), - Flags.move.getName(), - Flags.leash.getName(), - Flags.animalkilling.getName(), - Flags.mobkilling.getName(), - Flags.shear.getName(), - Flags.chat.getName())); - conf.set("Global.GroupedFlags.fire", Arrays.asList( - Flags.ignite.getName(), - Flags.firespread.getName())); - - try { - conf.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - } - - for (String oneGroup : conf.getConfigurationSection("Global.GroupedFlags").getKeys(false)) { - for (String OneFlag : conf.getStringList("Global.GroupedFlags." + oneGroup)) { - FlagPermissions.addFlagToFlagGroup(oneGroup, OneFlag); - } - } - } - - @SuppressWarnings("deprecation") - public void UpdateConfigFile() { - - File f = new File(plugin.getDataFolder(), "config.yml"); - - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - - if (in == null) - return; - - String defaultWorldName = Bukkit.getServer().getWorlds().size() > 0 ? Bukkit.getServer().getWorlds().get(0).getName() : "World"; - - YamlConfiguration conf = YamlConfiguration.loadConfiguration(in); - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); - ConfigReader c = new ConfigReader(conf, writer); - - c.getW().addComment("Global", "These are Global Settings for Residence."); - - c.getW().addComment("Global.UUIDConvertion", "Starts UUID conversion on plugin startup", "DONT change this if you are not sure what you doing"); - UUIDConvertion = c.get("Global.UUIDConvertion", true); - - c.getW().addComment("Global.OfflineMode", - "If you running offline server, better to check this as true. This will help to solve issues with changing players UUID."); - OfflineMode = c.get("Global.OfflineMode", false); - - c.getW().addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); - versionCheck = c.get("Global.versionCheck", true); - - c.getW().addComment("Global.Language", "This loads the .yml file in the Residence Language folder", - "All Residence text comes from this file. (NOT DONE YET)"); - language = c.get("Global.Language", "English", false); - - c.getW().addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", - "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); - selectionToolId = c.get("Global.SelectionToolId", Material.WOOD_HOE.getId()); - - c.getW().addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); - SelectionIgnoreY = c.get("Global.Selection.IgnoreY", false); - c.getW().addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", - "This will lower residence price by up to 256 times, so ajust block price BEFORE enabling this"); - NoCostForYBlocks = c.get("Global.Selection.NoCostForYBlocks", false); - - c.getW().addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", - "Simply equip this tool and hit a location inside the residence and it will display the info for it."); - infoToolId = c.get("Global.InfoToolId", Material.STRING.getId()); - - c.getW().addComment("Global.Optimizations.DefaultWorld", "Name of your main residence world. Usually normal starting world 'World'. Capitalization essential"); - DefaultWorld = c.get("Global.Optimizations.DefaultWorld", defaultWorldName, false); - - c.getW().addComment("Global.Optimizations.DisabledWorlds.List", "List Of Worlds where this plugin is disabled"); - DisabledWorldsList = c.get("Global.Optimizations.DisabledWorlds.List", new ArrayList()); - - c.getW().addComment("Global.Optimizations.DisabledWorlds.DisableListeners", "Disables all listeners in included worlds"); - DisableListeners = c.get("Global.Optimizations.DisabledWorlds.DisableListeners", true); - c.getW().addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); - DisableCommands = c.get("Global.Optimizations.DisabledWorlds.DisableCommands", true); - -// c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", -// "You can bypass this with residence.checkbadflags permission node"); -// DisableNoFlagMessageUse = c.get("Global.Optimizations.DisabledNoFlagMessage.Use", false); -// c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Worlds", "List Of Worlds where player wont get error messages"); -// DisableNoFlagMessageWorlds = c.get("Global.Optimizations.DisabledNoFlagMessage.Worlds", Arrays.asList(Bukkit.getWorlds().get(0).getName())); - - c.getW().addComment("Global.Optimizations.GlobalChat.Enabled", - "Enables or disables chat modification by including players main residence name"); - GlobalChatEnabled = c.get("Global.Optimizations.GlobalChat.Enabled", false); - c.getW().addComment("Global.Optimizations.GlobalChat.SelfModify", - "Modifys chat to add chat titles. If you're using a chat manager, you may add the tag {residence} to your chat format and disable this."); - GlobalChatSelfModify = c.get("Global.Optimizations.GlobalChat.SelfModify", true); - GlobalChatFormat = c.get("Global.Optimizations.GlobalChat.Format", "&c[&e%1&c]", true); - - c.getW().addComment("Global.Optimizations.BlockAnyTeleportation", - "When this set to true, any teleportation to residence where player dont have tp flag, action will be denyied", - "This can prevent from teleporting players to residence with 3rd party plugins like esentials /tpa"); - BlockAnyTeleportation = c.get("Global.Optimizations.BlockAnyTeleportation", true); - - c.getW().addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using", - "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxResCount = c.get("Global.Optimizations.MaxResCount", 30); - c.getW().addComment("Global.Optimizations.MaxRentCount", "Set this as low as posible depending of residence.max.rents.[number] permission you are using", - "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxRentCount = c.get("Global.Optimizations.MaxRentCount", 10); - c.getW().addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using", - "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxSubzonesCount = c.get("Global.Optimizations.MaxSubzoneCount", 5); - c.getW().addComment("Global.Optimizations.MaxSubzoneDepthCount", "Set this as low as posible depending of residence.max.subzonedepth.[number] permission you are using", - "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxSubzoneDepthCount = c.get("Global.Optimizations.MaxSubzoneDepthCount", 5); - - c.getW().addComment("Global.Optimizations.OverridePvp", "By setting this to true, regular pvp flag will be acting as overridepvp flag", - "Overridepvp flag tries to ignore any pvp protection in that residence by any other plugin"); - OverridePvp = c.get("Global.Optimizations.OverridePvp", false); - - // residence kick location - c.getW().addComment("Global.Optimizations.KickLocation.Use", - "By setting this to true, when player kicks another player from residence, he will be teleported to this location instead of getting outside residence"); - Boolean UseKick = c.get("Global.Optimizations.KickLocation.Use", false); - String KickLocationWorld = c.get("Global.Optimizations.KickLocation.World", defaultWorldName); - Double KickLocationX = c.get("Global.Optimizations.KickLocation.X", 0.5); - Double KickLocationY = c.get("Global.Optimizations.KickLocation.Y", 63.0); - Double KickLocationZ = c.get("Global.Optimizations.KickLocation.Z", 0.5); - c.getW().addComment("Global.Optimizations.KickLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); - Double KickPitch = c.get("Global.Optimizations.KickLocation.Pitch", 0.0); - c.getW().addComment("Global.Optimizations.KickLocation.Yaw", "Head position to left and right. Range from -180 to 180"); - Double KickYaw = c.get("Global.Optimizations.KickLocation.Yaw", 0.0); - if (UseKick) { - World world = Bukkit.getWorld(KickLocationWorld); - if (world != null) { - KickLocation = new Location(world, KickLocationX, KickLocationY, KickLocationZ); - KickLocation.setPitch(KickPitch.floatValue()); - KickLocation.setYaw(KickYaw.floatValue()); - } - } - - c.getW().addComment("Global.Optimizations.FlyLandLocation.World", "Used when players fly state is being turned to false because of fly flag and there is no solid land where to land for player"); - String FlyLocationWorld = c.get("Global.Optimizations.FlyLandLocation.World", defaultWorldName); - Double FlyLocationX = c.get("Global.Optimizations.FlyLandLocation.X", 0.5); - Double FlyLocationY = c.get("Global.Optimizations.FlyLandLocation.Y", 63.0); - Double FlyLocationZ = c.get("Global.Optimizations.FlyLandLocation.Z", 0.5); - c.getW().addComment("Global.Optimizations.FlyLandLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); - Double FlyPitch = c.get("Global.Optimizations.FlyLandLocation.Pitch", 0.0); - c.getW().addComment("Global.Optimizations.FlyLandLocation.Yaw", "Head position to left and right. Range from -180 to 180"); - Double FlyYaw = c.get("Global.Optimizations.FlyLandLocation.Yaw", 0.0); - World world = Bukkit.getWorld(FlyLocationWorld); - if (world != null) { - FlyLandLocation = new Location(world, FlyLocationX, FlyLocationY, FlyLocationZ); - FlyLandLocation.setPitch(FlyPitch.floatValue()); - FlyLandLocation.setYaw(FlyYaw.floatValue()); - } - - c.getW().addComment("Global.Optimizations.ShortInfo.Use", - "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); - ShortInfoUse = c.get("Global.Optimizations.ShortInfo.Use", false); - - // Vote range - c.getW().addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); - VoteRangeFrom = c.get("Global.Optimizations.Vote.RangeFrom", 0); - VoteRangeTo = c.get("Global.Optimizations.Vote.RangeTo", 10); - - c.getW().addComment("Global.Optimizations.Vote.OnlyLike", "If this true, players can onli give like for shop instead of point voting"); - OnlyLike = c.get("Global.Optimizations.Vote.OnlyLike", false); - - // Healing/Feed interval - c.getW().addComment("Global.Optimizations.Intervals.Heal", "How often in seconds to heal/feed players in residence with appropriate flag", - "Bigger numbers can save some resources"); - HealInterval = c.get("Global.Optimizations.Intervals.Heal", 1); - FeedInterval = c.get("Global.Optimizations.Intervals.Feed", 5); - - // negative potion effect list - c.getW().addComment("Global.Optimizations.NegativePotionEffects", - "Potions containing one of thos effects will be ignored if residence dont have pvp true flag set"); - NegativePotionEffects = c.get("Global.Optimizations.NegativePotionEffects", Arrays.asList("blindness", "confusion", "harm", "hunger", "poison", "slow", - "slow_digging", "weakness", "wither")); - - NegativeLingeringPotionEffects = c.get("Global.Optimizations.NegativeLingeringPotions", Arrays.asList("slowness", "instant_damage", "poison", - "slowness")); - - c.getW().addComment("Global.Optimizations.WalkSpeed", - "Defines speed for particular wspeed1 and wspeed2 flags. It can be from 0 up to 5"); - WalkSpeed1 = c.get("Global.Optimizations.WalkSpeed.1", 0.5D); - WalkSpeed1 = WalkSpeed1 < 0 ? 0 : WalkSpeed1; - WalkSpeed1 = WalkSpeed1 > 5 ? 5 : WalkSpeed1; - WalkSpeed1 = WalkSpeed1 / 5.0; - WalkSpeed2 = c.get("Global.Optimizations.WalkSpeed.2", 2D); - WalkSpeed2 = WalkSpeed2 < 0 ? 0 : WalkSpeed2; - WalkSpeed2 = WalkSpeed2 > 5 ? 5 : WalkSpeed2; - WalkSpeed2 = WalkSpeed2 / 5.0; - - c.getW().addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", - "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); - minMoveUpdate = c.get("Global.MoveCheckInterval", 500); - - c.getW().addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); - TeleportDelay = c.get("Global.Tp.TeleportDelay", 3); - c.getW().addComment("Global.Tp.TeleportTitleMessage", "Show aditional message in title message area when player is teleporting to residence"); - TeleportTitleMessage = c.get("Global.Tp.TeleportTitleMessage", true); - - if (conf.contains("Global.RandomTeleportation.WorldName")) { - - String path = "Global.RandomTeleportation."; - String WorldName = conf.getString(path + "WorldName", defaultWorldName); - - int MaxCoord = conf.getInt(path + "MaxCoord", 1000); - int MinCord = conf.getInt(path + "MinCord", 500); - int CenterX = conf.getInt(path + "CenterX", 0); - int CenterZ = conf.getInt(path + "CenterZ", 0); - - RTeleport.add(new RandomTeleport(WorldName, MaxCoord, MinCord, CenterX, CenterZ)); - - c.get("Global.RandomTeleportation." + WorldName + ".MaxCord", MaxCoord); - c.get("Global.RandomTeleportation." + WorldName + ".MinCord", MinCord); - c.get("Global.RandomTeleportation." + WorldName + ".CenterX", CenterX); - c.get("Global.RandomTeleportation." + WorldName + ".CenterZ", CenterZ); - } else { - if (conf.isConfigurationSection("Global.RandomTeleportation")) - for (String one : conf.getConfigurationSection("Global.RandomTeleportation").getKeys(false)) { - String path = "Global.RandomTeleportation." + one + "."; - - c.getW().addComment("Global.RandomTeleportation." + one, - "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); - - c.getW().addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); - int MaxCoord = c.get(path + "MaxCoord", 1000); - c.getW().addComment(path + "MinCord", - "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); - int MinCord = c.get(path + "MinCord", 500); - int CenterX = c.get(path + "CenterX", 0); - int CenterZ = c.get(path + "CenterZ", 0); - - RTeleport.add(new RandomTeleport(one, MaxCoord, MinCord, CenterX, CenterZ)); - } - else { - String path = "Global.RandomTeleportation." + defaultWorldName + "."; - - c.getW().addComment(path + "WorldName", "World to use this function, set main residence world"); - String WorldName = c.get(path + "WorldName", defaultWorldName, true); - - c.getW().addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); - int MaxCoord = c.get(path + "MaxCoord", 1000); - c.getW().addComment(path + "MinCord", - "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); - int MinCord = c.get(path + "MinCord", 500); - int CenterX = c.get(path + "CenterX", 0); - int CenterZ = c.get(path + "CenterZ", 0); - RTeleport.add(new RandomTeleport(WorldName, MaxCoord, MinCord, CenterX, CenterZ)); - } - } - - c.getW().addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); - rtCooldown = c.get("Global.RandomTeleportation.Cooldown", 5); - - c.getW().addComment("Global.RandomTeleportation.MaxTries", "How many times to try find correct location for teleportation.", - "Keep it at low number, as player always can try again after delay"); - rtMaxTries = c.get("Global.RandomTeleportation.MaxTries", 20); - - c.getW().addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); - autoSaveInt = c.get("Global.SaveInterval", 10); - - c.getW().addComment("Global.Backup.AutoCleanUp.Use", - "Do you want to automaticaly remove backup files from main backup folder if they are older than defined day amount"); - BackupAutoCleanUpUse = c.get("Global.Backup.AutoCleanUp.Use", false); - BackupAutoCleanUpDays = c.get("Global.Backup.AutoCleanUp.Days", 30); - - c.getW().addComment("Global.Backup.UseZip", "Do you want to backup files by creating zip files in main residence folder in backup folder", - "This wont have effect on regular backuped files made in save folder"); - UseZipBackup = c.get("Global.Backup.UseZip", true); - - BackupWorldFiles = c.get("Global.Backup.IncludeFiles.Worlds", true); - BackupforsaleFile = c.get("Global.Backup.IncludeFiles.forsale", true); - BackupleasesFile = c.get("Global.Backup.IncludeFiles.leases", true); - BackuppermlistsFile = c.get("Global.Backup.IncludeFiles.permlists", true); - BackuprentFile = c.get("Global.Backup.IncludeFiles.rent", true); - BackupflagsFile = c.get("Global.Backup.IncludeFiles.flags", true); - BackupgroupsFile = c.get("Global.Backup.IncludeFiles.groups", true); - BackupconfigFile = c.get("Global.Backup.IncludeFiles.config", true); - - // Auto remove old residences - c.getW().addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", - "Players can bypass this wih residence.cleanbypass permission node"); - AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); - c.getW().addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); - AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); - c.getW().addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); - AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); - - c.getW().addComment("Global.Lwc.OnDelete", "Removes lwc protection from all defined objects when removing residence"); - LwcOnDelete = c.get("Global.Lwc.OnDelete", true); - c.getW().addComment("Global.Lwc.OnBuy", "Removes lwc protection from all defined objects when buying residence"); - LwcOnBuy = c.get("Global.Lwc.OnBuy", true); - c.getW().addComment("Global.Lwc.OnUnrent", "Removes lwc protection from all defined objects when unrenting residence"); - LwcOnUnrent = c.get("Global.Lwc.OnUnrent", true); - - c.getW().addComment("Global.Lwc.MaterialList", "List of blocks you want to remove protection from"); - for (String oneName : c.get("Global.Lwc.MaterialList", Arrays.asList("CHEST", "TRAPPED_CHEST", "furnace", "dispenser"))) { - Material mat = Material.getMaterial(oneName.toUpperCase()); - if (mat != null) - LwcMatList.add(mat); - else - Bukkit.getConsoleSender().sendMessage("Incorrect Lwc material name for " + oneName); - } - - // TNT explosions below 63 - c.getW().addComment("Global.AntiGreef.TNT.ExplodeBelow", - "When set to true will allow tnt and minecart with tnt to explode below 62 (default) level outside of residence", - "This will allow mining with tnt and more vanilla play"); - TNTExplodeBelow = c.get("Global.AntiGreef.TNT.ExplodeBelow", false); - TNTExplodeBelowLevel = c.get("Global.AntiGreef.TNT.level", 62); - // Creeper explosions below 63 - c.getW().addComment("Global.AntiGreef.Creeper.ExplodeBelow", "When set to true will allow Creeper explode below 62 (default) level outside of residence", - "This will give more realistic game play"); - CreeperExplodeBelow = c.get("Global.AntiGreef.Creeper.ExplodeBelow", false); - CreeperExplodeBelowLevel = c.get("Global.AntiGreef.Creeper.level", 62); - // Flow - c.getW().addComment("Global.AntiGreef.Flow.Level", "Level from witch one to start lava and water flow blocking", "This dont have effect in residence area"); - FlowLevel = c.get("Global.AntiGreef.Flow.Level", 63); - c.getW().addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); - NoLava = c.get("Global.AntiGreef.Flow.NoLavaFlow", true); - c.getW().addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); - NoWater = c.get("Global.AntiGreef.Flow.NoWaterFlow", true); - NoFlowWorlds = c.get("Global.AntiGreef.Flow.Worlds", Arrays.asList(defaultWorldName)); - - // Place - c.getW().addComment("Global.AntiGreef.Place.Level", "Level from witch one to start block lava and water place", "This don't have effect in residence area"); - PlaceLevel = c.get("Global.AntiGreef.Place.Level", 63); - c.getW().addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); - NoLavaPlace = c.get("Global.AntiGreef.Place.NoLavaPlace", true); - c.getW().addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, playrs cant place water outside residence"); - NoWaterPlace = c.get("Global.AntiGreef.Place.NoWaterPlace", true); - NoPlaceWorlds = c.get("Global.AntiGreef.Place.Worlds", Arrays.asList(defaultWorldName)); - - // Sand fall - c.getW().addComment("Global.AntiGreef.BlockFall.Use", "With this set to true, falling blocks will be deleted if they will land in different area"); - useBlockFall = c.get("Global.AntiGreef.BlockFall.Use", true); - c.getW().addComment("Global.AntiGreef.BlockFall.Level", "Level from witch one to start block block's fall", - "This don't have effect in residence area or outside"); - BlockFallLevel = c.get("Global.AntiGreef.BlockFall.Level", 62); - BlockFallWorlds = c.get("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName)); - - // Res cleaning - c.getW().addComment("Global.AntiGreef.ResCleaning.Use", - "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", - "Effective way to prevent residence creating near greefing target and then remove it"); - UseClean = c.get("Global.AntiGreef.ResCleaning.Use", true); - c.getW().addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); - CleanLevel = c.get("Global.AntiGreef.ResCleaning.Level", 63); - c.getW().addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); - CleanBlocks = c.getIntList("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11)); - CleanWorlds = c.get("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName)); - - c.getW().addComment("Global.AntiGreef.Flags.Prevent", - "By setting this to true flags from list will be protected from change while there is some one inside residence besides owner", - "Protects in example from people inviting some one and changing pvp flag to true to kill them"); - PvPFlagPrevent = c.get("Global.AntiGreef.Flags.Prevent", true); - FlagsList = c.get("Global.AntiGreef.Flags.list", Arrays.asList("pvp")); - - c.getW().addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); - defaultGroup = c.get("Global.DefaultGroup", "default"); - - c.getW().addComment("Global.UseLeaseSystem", "Enable / Disable the Lease System."); - useLeases = c.get("Global.UseLeaseSystem", false); - - c.getW().addComment("Global.DateFormat", "Sets date format when shown in example lease or rent expire date", - "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); - DateFormat = c.get("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz"); - - c.getW().addComment("Global.TimeZone", "Sets time zone for showing date, usefull when server is in different country then main server player base", - "Full list of posible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); - TimeZone = c.get("Global.TimeZone", Calendar.getInstance().getTimeZone().getID()); - - c.getW().addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); - ResMoneyBack = c.get("Global.ResMoneyBack", false); - - c.getW().addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); - leaseCheckInterval = c.get("Global.LeaseCheckInterval", 10); - - c.getW().addComment("Global.LeaseAutoRenew", - "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); - leaseAutoRenew = c.get("Global.LeaseAutoRenew", true); - - c.getW().addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); - c.get("Global.EnablePermissions", true); - - c.getW().addComment("Global.LegacyPermissions", "Set to true if NOT using Permissions or PermissionsBukkit, or using a really old version of Permissions"); - legacyperms = c.get("Global.LegacyPermissions", false); - - c.getW().addComment("Global.EnableEconomy", - "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); - enableEconomy = c.get("Global.EnableEconomy", true); - - c.getW().addComment("Global.ExtraEnterMessage", - "When enabled extra message will apear in chat if residence is for rent or for sell to inform how he can rent/buy residence with basic information."); - ExtraEnterMessage = c.get("Global.ExtraEnterMessage", true); - - c.getW().addComment("Global.Sell.Subzone", "If set to true, this will allow to sell subzones. Its recommended to keep it false tho"); - SellSubzone = c.get("Global.Sell.Subzone", false); - - c.getW().addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); - enableRentSystem = c.get("Global.EnableRentSystem", true); - - c.getW().addComment("Global.Rent.PreventRemoval", "Prevents residence/subzone removal if its subzone is still rented by some one"); - RentPreventRemoval = c.get("Global.Rent.PreventRemoval", true); - c.getW().addComment("Global.Rent.Inform.OnEnding", "Informs players on rent time ending"); - RentInformOnEnding = c.get("Global.Rent.Inform.OnEnding", true); - c.getW().addComment("Global.Rent.Inform.Before", "Time range in minutes when to start informing about ending rent"); - RentInformBefore = c.get("Global.Rent.Inform.Before", 1440); - c.getW().addComment("Global.Rent.Inform.Delay", "Time range in seconds for how long to wait after player logs in to inform about ending rents"); - RentInformDelay = c.get("Global.Rent.Inform.Delay", 60); - - c.getW().addComment("Global.Rent.DefaultValues.AllowRenewing", "Default values used when putting residence for rent"); - RentAllowRenewing = c.get("Global.Rent.DefaultValues.AllowRenewing", true); - RentStayInMarket = c.get("Global.Rent.DefaultValues.StayInMarket", true); - RentAllowAutoPay = c.get("Global.Rent.DefaultValues.AllowAutoPay", true); - c.getW().addComment("Global.Rent.DefaultValues.PlayerAutoPay", "If set to true, when player is not defining auto pay on renting, then this value will be used"); - RentPlayerAutoPay = c.get("Global.Rent.DefaultValues.PlayerAutoPay", true); - - c.getW().addComment("Global.Rent.Schematics.RestoreAfterRentEnds", - "EXPERIMENTAL!!! If set to true, residence will be restored to state it was when backup flag was set to true", - "For securoty reassons only players with aditional residence.backup permission node can set backup flag"); - RestoreAfterRentEnds = c.get("Global.Rent.Schematics.RestoreAfterRentEnds", true); - c.getW().addComment("Global.Rent.Schematics.SaveOnFlagChange", - "When set to true, area state will be saved only when setting backup to true value", - "When set to false, area state will be saved before each renting to have always up to date area look", - "Keep in mind that when its set to false, there is slightly bigger server load as it has to save area each time when some one rents it"); - SchematicsSaveOnFlagChange = c.get("Global.Rent.Schematics.SaveOnFlagChange", true); - - c.getW().addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); - rentCheckInterval = c.get("Global.RentCheckInterval", 10); - - c.getW().addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); - chatEnable = c.get("Global.ResidenceChatEnable", true); - - c.getW().addComment("Global.ActionBar.General", "True for ActionBar - new component in 1.8", "False for old Messaging in chat enter/leave Residence messages"); - actionBar = c.get("Global.ActionBar.General", true); - ActionBarOnSelection = c.get("Global.ActionBar.ShowOnSelection", true); - - c.getW().addComment("Global.ResidenceChatColor", "Color of residence chat."); - try { - chatColor = ChatColor.valueOf(c.get("Global.ResidenceChatColor", "DARK_PURPLE", true)); - } catch (Exception ex) { - chatColor = ChatColor.DARK_PURPLE; - } - - c.getW().addComment("Global.ResidenceChatPrefixLenght", "Max lenght of residence chat prefix including color codes"); - chatPrefixLength = c.get("Global.ResidenceChatPrefixLength", 16); - - c.getW().addComment("Global.AdminOnlyCommands", - "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); - adminsOnly = c.get("Global.AdminOnlyCommands", false); - - c.getW().addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); - adminOps = c.get("Global.AdminOPs", true); - - c.getW().addComment("Global.AdminFullAccess", - "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); - AdminFullAccess = c.get("Global.AdminFullAccess", false); - - c.getW().addComment("Global.MultiWorldPlugin", - "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", - "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); - multiworldPlugin = c.get("Global.MultiWorldPlugin", "Multiverse-Core"); - - c.getW().addComment("Global.ResidenceFlagsInherit", "Setting this to true causes subzones to inherit flags from their parent zones."); - flagsInherit = c.get("Global.ResidenceFlagsInherit", true); - - c.getW().addComment("Global.PreventRentModify", "Setting this to false will allow rented residences to be modified by the renting player."); - preventBuildInRent = c.get("Global.PreventRentModify", true); - - c.getW().addComment("Global.PreventSubZoneRemoval", "Setting this to true will prevent subzone deletion when subzone owner is not same as parent zone owner."); - PreventSubZoneRemoval = c.get("Global.PreventSubZoneRemoval", true); - - c.getW().addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); - stopOnSaveError = c.get("Global.StopOnSaveFault", true); - - c.getW().addComment( - "This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); - namefix = c.get("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]"); - - c.getW().addComment("Global.ShowIntervalMessages", - "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); - showIntervalMessages = c.get("Global.ShowIntervalMessages", false); - - c.getW().addComment("Global.ShowNoobMessage", "Setting this to true sends a tutorial message to the new player when he places chest on ground."); - ShowNoobMessage = c.get("Global.ShowNoobMessage", true); - - c.getW().addComment("Global.NewPlayer", "Setting this to true creates residence around players placed chest if he don't have any.", - "Only once every server restart if he still don't have any residence"); - NewPlayerUse = c.get("Global.NewPlayer.Use", false); - c.getW().addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", - "By setting to false, money will be taken from player, if he has them"); - NewPlayerFree = c.get("Global.NewPlayer.Free", true); - c.getW().addComment("Global.NewPlayer.Range", "Range from placed chest o both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide"); - NewPlayerRangeX = c.get("Global.NewPlayer.Range.X", 5); - NewPlayerRangeY = c.get("Global.NewPlayer.Range.Y", 5); - NewPlayerRangeZ = c.get("Global.NewPlayer.Range.Z", 5); - - c.getW().addComment("Global.CustomContainers", - "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); - customContainers = c.getIntList("Global.CustomContainers", new ArrayList()); - customBothClick = c.getIntList("Global.CustomBothClick", new ArrayList()); - customRightClick = c.getIntList("Global.CustomRightClick", new ArrayList()); - - c.getW().addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundries"); - useVisualizer = c.get("Global.Visualizer.Use", true); - c.getW().addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", - "Keep it no more as 30, as player cant see more than 16 blocks"); - VisualizerRange = c.get("Global.Visualizer.Range", 16); - c.getW().addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); - VisualizerShowFor = c.get("Global.Visualizer.ShowFor", 5000); - c.getW().addComment("Global.Visualizer.updateInterval", "How often in miliseconds update particles for player"); - VisualizerUpdateInterval = c.get("Global.Visualizer.updateInterval", 20); - c.getW().addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); - VisualizerRowSpacing = c.get("Global.Visualizer.RowSpacing", 2); - if (VisualizerRowSpacing < 1) - VisualizerRowSpacing = 1; - c.getW().addComment("Global.Visualizer.CollumnSpacing", "Spacing in blocks between particle effects for collums"); - VisualizerCollumnSpacing = c.get("Global.Visualizer.CollumnSpacing", 2); - if (VisualizerCollumnSpacing < 1) - VisualizerCollumnSpacing = 1; - - c.getW().addComment("Global.Visualizer.FrameCap", "Maximum amount of frame particles to show for one player"); - VisualizerFrameCap = c.get("Global.Visualizer.FrameCap", 2000); - if (VisualizerFrameCap < 1) - VisualizerFrameCap = 1; - - c.getW().addComment("Global.Visualizer.SidesCap", "Maximum amount of sides particles to show for one player"); - VisualizerSidesCap = c.get("Global.Visualizer.SidesCap", 2000); - if (VisualizerSidesCap < 1) - VisualizerSidesCap = 1; - - String effectsList = ""; - for (Effect one : Effect.values()) { - if (one == null) - continue; - if (one.name() == null) - continue; - effectsList += one.name().toLowerCase() + ", "; - } - - c.getW().addComment("Global.Visualizer.Selected", - "Particle effect names. Posible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", - " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", - " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance", - "", - "If using spigot based server different particales can be used:", effectsList); - - // Frame - String efname = c.get("Global.Visualizer.Selected.Frame", "happyVillager"); - SelectedFrame = ParticleEffects.fromName(efname); - if (SelectedFrame == null) { - SelectedFrame = ParticleEffects.VILLAGER_HAPPY; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } - efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; - for (Effect one : Effect.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { - SelectedSpigotFrame = one; - break; - } - } - - if (plugin.isSpigot()) - if (SelectedSpigotFrame == null) { - SelectedSpigotFrame = Effect.getByName("HAPPY_VILLAGER"); - if (SelectedSpigotFrame == null) - SelectedSpigotFrame = Effect.values()[0]; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } - - // Sides - efname = c.get("Global.Visualizer.Selected.Sides", "reddust"); - SelectedSides = ParticleEffects.fromName(efname); - if (SelectedSides == null) { - SelectedSides = ParticleEffects.REDSTONE; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); - } - efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; - for (Effect one : Effect.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { - SelectedSpigotSides = one; - break; - } - } - - if (plugin.isSpigot()) - if (SelectedSpigotSides == null) { - SelectedSpigotSides = Effect.getByName("COLOURED_DUST"); - if (SelectedSpigotSides == null) - SelectedSpigotSides = Effect.values()[0]; - - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } - - efname = c.get("Global.Visualizer.Overlap.Frame", "FLAME"); - OverlapFrame = ParticleEffects.fromName(efname); - if (OverlapFrame == null) { - OverlapFrame = ParticleEffects.FLAME; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Overlap Frame with this name, it was set to default"); - } - - efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; - for (Effect one : Effect.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { - OverlapSpigotFrame = one; - break; - } - } - - if (plugin.isSpigot()) - if (OverlapSpigotFrame == null) { - OverlapSpigotFrame = Effect.getByName("FLAME"); - if (OverlapSpigotFrame == null) - OverlapSpigotFrame = Effect.values()[0]; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } - - efname = c.get("Global.Visualizer.Overlap.Sides", "FLAME"); - OverlapSides = ParticleEffects.fromName(efname); - if (OverlapSides == null) { - OverlapSides = ParticleEffects.FLAME; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); - } - efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; - for (Effect one : Effect.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { - OverlapSpigotSides = one; - break; - } - } - - if (plugin.isSpigot()) - if (OverlapSpigotSides == null) { - OverlapSpigotSides = Effect.getByName("FLAME"); - if (OverlapSpigotSides == null) - OverlapSpigotSides = Effect.values()[0]; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } - - c.getW().addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); - BounceAnimation = c.get("Global.BounceAnimation", true); - - c.getW().addComment("Global.GUI.Enabled", "Enable or disable flag GUI"); - useFlagGUI = c.get("Global.GUI.Enabled", true); - - c.getW().addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); - - int id = c.get("Global.GUI.setTrue.Id", 35); - int data = c.get("Global.GUI.setTrue.Data", 13); - - Material Mat = Material.getMaterial(id); - if (Mat == null) - Mat = Material.STONE; - GuiTrue = new ItemStack(Mat, 1, (short) data); - - c.getW().addComment("Global.GUI.setFalse", "Item id and data to use when flag is set to false"); - id = c.get("Global.GUI.setFalse.Id", 35); - data = c.get("Global.GUI.setFalse.Data", 14); - - Mat = Material.getMaterial(id); - if (Mat == null) - Mat = Material.STONE; - GuiFalse = new ItemStack(Mat, 1, (short) data); - - c.getW().addComment("Global.GUI.setRemove", "Item id and data to use when flag is set to remove"); - id = c.get("Global.GUI.setRemove.Id", 35); - data = c.get("Global.GUI.setRemove.Data", 8); - - Mat = Material.getMaterial(id); - if (Mat == null) - Mat = Material.STONE; - GuiRemove = new ItemStack(Mat, 1, (short) data); - - c.getW().addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", - "This is quite heavy on server side, so enable only if you really need this feature"); - AutoMobRemoval = c.get("Global.AutoMobRemoval.Use", false); - c.getW().addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); - AutoMobRemovalInterval = c.get("Global.AutoMobRemoval.Interval", 3); - - enforceAreaInsideArea = c.get("Global.EnforceAreaInsideArea", false); - spoutEnable = c.get("Global.EnableSpout", false); - enableLeaseMoneyAccount = c.get("Global.EnableLeaseMoneyAccount", true); - - c.getW().addComment("Global.CouldronCompatability", - "By setting this to true, partial compatability for kCouldron servers will be anabled. Action bar messages and selection visualizer will be disabled automaticaly as off incorrect compatability"); - CouldronCompatability = c.get("Global.CouldronCompatability", false); - if (CouldronCompatability) { - useVisualizer = false; - actionBar = false; - ActionBarOnSelection = false; - } - - c.getW().addComment("DynMap.Use", "Enables or disable DynMap Support"); - DynMapUse = c.get("DynMap.Use", false); - c.getW().addComment("DynMap.ShowFlags", "Shows or hides residence flags"); - DynMapShowFlags = c.get("DynMap.ShowFlags", true); - c.getW().addComment("DynMap.HideHidden", "If set true, residence with hidden flag set to true will be hidden from dynmap"); - DynMapHideHidden = c.get("DynMap.HideHidden", true); - - c.getW().addComment("DynMap.Layer.3dRegions", "Enables 3D zones"); - DynMapLayer3dRegions = c.get("DynMap.Layer.3dRegions", true); - c.getW().addComment("DynMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); - DynMapLayerSubZoneDepth = c.get("DynMap.Layer.SubZoneDepth", 2); - - c.getW().addComment("DynMap.Border.Color", "Color of border. Pick color from this page http://www.w3schools.com/colors/colors_picker.asp"); - DynMapBorderColor = c.get("DynMap.Border.Color", "#FF0000"); - c.getW().addComment("DynMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); - DynMapBorderOpacity = c.get("DynMap.Border.Opacity", 0.3); - c.getW().addComment("DynMap.Border.Weight", "Border thickness"); - DynMapBorderWeight = c.get("DynMap.Border.Weight", 3); - DynMapFillOpacity = c.get("DynMap.Fill.Opacity", 0.3); - DynMapFillColor = c.get("DynMap.Fill.Color", "#FFFF00"); - DynMapFillForRent = c.get("DynMap.Fill.ForRent", "#33cc33"); - DynMapFillRented = c.get("DynMap.Fill.Rented", "#99ff33"); - DynMapFillForSale = c.get("DynMap.Fill.ForSale", "#0066ff"); - - c.getW().addComment("DynMap.VisibleRegions", "Shows only regions on this list"); - DynMapVisibleRegions = c.get("DynMap.VisibleRegions", new ArrayList()); - c.getW().addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden ingame"); - DynMapHiddenRegions = c.get("DynMap.HiddenRegions", new ArrayList()); - - try { - c.getW().save(f); - } catch (IOException e) { - e.printStackTrace(); - } - - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void loadFlags() { - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); - globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", flags.getConfigurationSection("Global")); - globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", flags.getConfigurationSection("Global")); - } - - public void loadGroups() { - FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); - ConfigurationSection node = groups.getConfigurationSection("Global.GroupDefault"); - if (node != null) { - Set keys = node.getConfigurationSection(defaultGroup).getKeys(false); - if (keys != null) { - for (String key : keys) { - globalGroupDefaults.put(key, FlagPermissions.parseFromConfigNodeAsList(defaultGroup, "false")); - } - } - } - } - - public boolean isGlobalChatEnabled() { - return GlobalChatEnabled; - } - - public boolean isGlobalChatSelfModify() { - return GlobalChatSelfModify; - } - - public String getGlobalChatFormat() { - return GlobalChatFormat; - } - - public int getRentInformDelay() { - return RentInformDelay; - } - - public int getRentInformBefore() { - return RentInformBefore; - } - - public boolean isRentAllowAutoPay() { - return RentAllowAutoPay; - } - - public boolean isRentPlayerAutoPay() { - return RentPlayerAutoPay; - } - - public boolean isRentStayInMarket() { - return RentStayInMarket; - } - - public boolean isSellSubzone() { - return SellSubzone; - } - - public boolean isRentAllowRenewing() { - return RentAllowRenewing; - } - - public boolean isRentPreventRemoval() { - return RentPreventRemoval; - } - - public boolean isRentInformOnEnding() { - return RentInformOnEnding; - } - - public boolean isTNTExplodeBelow() { - return TNTExplodeBelow; - } - - public int getTNTExplodeBelowLevel() { - return TNTExplodeBelowLevel; - } - - public boolean isCreeperExplodeBelow() { - return CreeperExplodeBelow; - } - - public int getCreeperExplodeBelowLevel() { - return CreeperExplodeBelowLevel; - } - - public boolean useVisualizer() { - return useVisualizer; - } - - public int getVisualizerRange() { - return VisualizerRange; - } - - public int getVisualizerShowFor() { - return VisualizerShowFor; - } - - public int getNewPlayerRangeX() { - return NewPlayerRangeX; - } - - public int getNewPlayerRangeY() { - return NewPlayerRangeY; - } - - public int getNewPlayerRangeZ() { - return NewPlayerRangeZ; - } - - public int getVisualizerRowSpacing() { - return VisualizerRowSpacing; - } - - public int getVisualizerCollumnSpacing() { - return VisualizerCollumnSpacing; - } - - public int getVisualizerUpdateInterval() { - return VisualizerUpdateInterval; - } - - public ParticleEffects getSelectedFrame() { - return SelectedFrame; - } - - public ParticleEffects getSelectedSides() { - return SelectedSides; - } - - public ParticleEffects getOverlapFrame() { - return OverlapFrame; - } - - public ParticleEffects getOverlapSides() { - return OverlapSides; - } - - public Effect getSelectedSpigotFrame() { - return SelectedSpigotFrame; - } - - public Effect getSelectedSpigotSides() { - return SelectedSpigotSides; - } - - public Effect getOverlapSpigotFrame() { - return OverlapSpigotFrame; - } - - public Effect getOverlapSpigotSides() { - return OverlapSpigotSides; - } - - public int getTeleportDelay() { - return TeleportDelay; - } - - public boolean isTeleportTitleMessage() { - return TeleportTitleMessage; - } - - public boolean useLegacyPermissions() { - return legacyperms; - } - - public String getDefaultGroup() { - return defaultGroup; - } - - public String getResidenceNameRegex() { - return namefix; - } - - public boolean isExtraEnterMessage() { - return ExtraEnterMessage; - } - - public boolean enableEconomy() { - return enableEconomy && plugin.getEconomyManager() != null; - } - - public boolean enabledRentSystem() { - return enableRentSystem && enableEconomy(); - } - - public boolean useLeases() { - return useLeases; - } - - public boolean useResMoneyBack() { - return ResMoneyBack; - } - - public boolean allowAdminsOnly() { - return adminsOnly; - } - - public boolean allowEmptyResidences() { - return allowEmptyResidences; - } - - public boolean isNoLava() { - return NoLava; - } - - public boolean isNoWater() { - return NoWater; - } - - public boolean isNoLavaPlace() { - return NoLavaPlace; - } - - public boolean isBlockFall() { - return useBlockFall; - } - - public boolean isNoWaterPlace() { - return NoWaterPlace; - } - - public List getLwcMatList() { - return LwcMatList; - } - - public boolean isRemoveLwcOnUnrent() { - return LwcOnUnrent; - } - - public boolean isRemoveLwcOnBuy() { - return LwcOnBuy; - } - - public boolean isRemoveLwcOnDelete() { - return LwcOnDelete; - } - - public boolean isUseResidenceFileClean() { - return AutoCleanUp; - } - - public int getResidenceFileCleanDays() { - return AutoCleanUpDays; - } - - public boolean isUseClean() { - return UseClean; - } - - public boolean isPvPFlagPrevent() { - return PvPFlagPrevent; - } - - public boolean isOverridePvp() { - return OverridePvp; - } - - public boolean isBlockAnyTeleportation() { - return BlockAnyTeleportation; - } - - public int getInfoToolID() { - return infoToolId; - } - - public int getSelectionTooldID() { - return selectionToolId; - } - - public boolean getOpsAreAdmins() { - return adminOps; - } - - public boolean getAdminFullAccess() { - return AdminFullAccess; - } - - public String getMultiworldPlugin() { - return multiworldPlugin; - } - - public boolean autoRenewLeases() { - return leaseAutoRenew; - } - - public boolean isShortInfoUse() { - return ShortInfoUse; - } - - public boolean isOnlyLike() { - return OnlyLike; - } - - public int getRentCheckInterval() { - return rentCheckInterval; - } - - public int getChatPrefixLength() { - return chatPrefixLength; - } - - public int getLeaseCheckInterval() { - return leaseCheckInterval; - } - - public int getAutoSaveInterval() { - return autoSaveInt; - } - - // backup stuff - public boolean BackupAutoCleanUpUse() { - return BackupAutoCleanUpUse; - } - - public int BackupAutoCleanUpDays() { - return BackupAutoCleanUpDays; - } - - public boolean UseZipBackup() { - return UseZipBackup; - } - - public boolean BackupWorldFiles() { - return BackupWorldFiles; - } - - public boolean BackupforsaleFile() { - return BackupforsaleFile; - } - - public boolean BackupleasesFile() { - return BackupleasesFile; - } - - public boolean BackuppermlistsFile() { - return BackuppermlistsFile; - } - - public boolean BackuprentFile() { - return BackuprentFile; - } - - public boolean BackupflagsFile() { - return BackupflagsFile; - } - - public boolean BackupgroupsFile() { - return BackupgroupsFile; - } - - public boolean BackupconfigFile() { - return BackupconfigFile; - } - // backup stuff - - public int getFlowLevel() { - return FlowLevel; - } - - public int getPlaceLevel() { - return PlaceLevel; - } - - public int getBlockFallLevel() { - return BlockFallLevel; - } - - public int getCleanLevel() { - return CleanLevel; - } - - public boolean flagsInherit() { - return flagsInherit; - } - - public boolean chatEnabled() { - return chatEnable; - } - - public boolean useActionBar() { - return actionBar; - } - - public boolean useActionBarOnSelection() { - return ActionBarOnSelection; - } - - public ChatColor getChatColor() { - return chatColor; - } - - public int getMinMoveUpdateInterval() { - return minMoveUpdate; - } - - public int getMaxResCount() { - return MaxResCount; - } - - public int getMaxRentCount() { - return MaxRentCount; - } - - public int getMaxSubzonesCount() { - return MaxSubzonesCount; - } - - public int getMaxSubzoneDepthCount() { - return MaxSubzoneDepthCount; - } - - public int getVoteRangeFrom() { - return VoteRangeFrom; - } - - public int getHealInterval() { - return HealInterval; - } - - public int getFeedInterval() { - return FeedInterval; - } - - public int getVoteRangeTo() { - return VoteRangeTo; - } - - public FlagPermissions getGlobalCreatorDefaultFlags() { - return globalCreatorDefaults; - } - - public FlagPermissions getGlobalResidenceDefaultFlags() { - return globalResidenceDefaults; - } - - public Map getGlobalGroupDefaultFlags() { - return globalGroupDefaults; - } - - public String getLanguage() { - return language; - } - - public String getDefaultWorld() { - return DefaultWorld; - } - - public String getDateFormat() { - return DateFormat; - } - - public String getTimeZone() { - return TimeZone; - } - - public boolean preventRentModify() { - return preventBuildInRent; - } - - public boolean isPreventSubZoneRemoval() { - return PreventSubZoneRemoval; - } - - public boolean stopOnSaveError() { - return stopOnSaveError; - } - - public boolean showIntervalMessages() { - return showIntervalMessages; - } - - public boolean ShowNoobMessage() { - return ShowNoobMessage; - } - - public boolean isNewPlayerUse() { - return NewPlayerUse; - } - - public boolean isNewPlayerFree() { - return NewPlayerFree; - } - - public boolean enableSpout() { - return spoutEnable; - } - - public boolean AutoMobRemoval() { - return AutoMobRemoval; - } - - public int AutoMobRemovalInterval() { - return AutoMobRemovalInterval; - } - - public boolean enableLeaseMoneyAccount() { - return enableLeaseMoneyAccount; - } - - public boolean CouldronCompatability() { - return CouldronCompatability; - } - - public boolean debugEnabled() { - return enableDebug; - } - - public boolean isSelectionIgnoreY() { - return SelectionIgnoreY; - } - - public boolean isNoCostForYBlocks() { - return NoCostForYBlocks; - } - - public boolean versionCheck() { - return versionCheck; - } - - public boolean isUUIDConvertion() { - return UUIDConvertion; - } - - public boolean isOfflineMode() { - return OfflineMode; - } - - public List getCustomContainers() { - return customContainers; - } - - public List getCustomBothClick() { - return customBothClick; - } - - public List getCustomRightClick() { - return customRightClick; - } - - public List getCleanBlocks() { - return CleanBlocks; - } - - public List getNoFlowWorlds() { - return NoFlowWorlds; - } - - public List getAutoCleanUpWorlds() { - return AutoCleanUpWorlds; - } - - public List getNoPlaceWorlds() { - return NoPlaceWorlds; - } - - public List getBlockFallWorlds() { - return BlockFallWorlds; - } - - public List getNegativePotionEffects() { - return NegativePotionEffects; - } - - public List getNegativeLingeringPotionEffects() { - return NegativeLingeringPotionEffects; - } - - public List getCleanWorlds() { - return CleanWorlds; - } - - public List getProtectedFlagsList() { - return FlagsList; - } - - public boolean getEnforceAreaInsideArea() { - return enforceAreaInsideArea; - } - - public ItemStack getGuiTrue() { - return GuiTrue; - } - - public ItemStack getGuiFalse() { - return GuiFalse; - } - - public ItemStack getGuiRemove() { - return GuiRemove; - } - - public List getRandomTeleport() { - return RTeleport; - } - - public int getrtCooldown() { - return rtCooldown; - } - - public Location getKickLocation() { - return KickLocation; - } - - public Location getFlyLandLocation() { - return FlyLandLocation; - } - - public int getrtMaxTries() { - return rtMaxTries; - } - - public boolean useFlagGUI() { - return useFlagGUI; - } - - public boolean BounceAnimation() { - return BounceAnimation; - } - - public int getVisualizerFrameCap() { - return VisualizerFrameCap; - } - - public int getVisualizerSidesCap() { - return VisualizerSidesCap; - } - - public Double getWalkSpeed1() { - return WalkSpeed1; - } - - public Double getWalkSpeed2() { - return WalkSpeed2; - } -} +package com.bekvon.bukkit.residence; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Effect; +import org.bukkit.Location; + +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.RandomTeleport; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.ParticleEffects; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.inventory.ItemStack; + +public class ConfigManager { + protected String defaultGroup; + protected boolean useLeases; + protected boolean ResMoneyBack; + protected boolean enableEconomy; + protected boolean ExtraEnterMessage; + protected boolean adminsOnly; + protected boolean allowEmptyResidences; + protected boolean NoLava; + protected boolean NoWater; + protected boolean NoLavaPlace; + protected boolean useBlockFall; + protected boolean NoWaterPlace; + protected boolean AutoCleanUp; + protected boolean SellSubzone; + protected boolean LwcOnDelete; + protected boolean LwcOnBuy; + protected boolean LwcOnUnrent; + protected List LwcMatList = new ArrayList(); + protected boolean UseClean; + protected boolean PvPFlagPrevent; + protected boolean OverridePvp; + protected boolean BlockAnyTeleportation; + protected int infoToolId; + protected int AutoCleanUpDays; + protected int selectionToolId; + protected boolean adminOps; + protected boolean AdminFullAccess; + protected String multiworldPlugin; + protected boolean enableRentSystem; + protected boolean RentPreventRemoval; + protected boolean RentInformOnEnding; + protected boolean RentAllowRenewing; + protected boolean RentStayInMarket; + protected boolean RentAllowAutoPay; + protected boolean RentPlayerAutoPay; + protected boolean leaseAutoRenew; + protected boolean ShortInfoUse; + protected boolean OnlyLike; + protected int RentInformBefore; + protected int RentInformDelay; + protected int rentCheckInterval; + protected int chatPrefixLength; + protected int leaseCheckInterval; + protected int autoSaveInt; + + // Backup stuff + protected boolean BackupAutoCleanUpUse; + protected int BackupAutoCleanUpDays; + protected boolean UseZipBackup; + protected boolean BackupWorldFiles; + protected boolean BackupforsaleFile; + protected boolean BackupleasesFile; + protected boolean BackuppermlistsFile; + protected boolean BackuprentFile; + protected boolean BackupflagsFile; + protected boolean BackupgroupsFile; + protected boolean BackupconfigFile; + + protected int FlowLevel; + protected int PlaceLevel; + protected int BlockFallLevel; + protected int CleanLevel; + protected int NewPlayerRangeX; + protected int NewPlayerRangeY; + protected int NewPlayerRangeZ; + protected int VisualizerRange; + protected int VisualizerShowFor; + protected int VisualizerUpdateInterval; + protected int TeleportDelay; + protected boolean TeleportTitleMessage; + protected int VisualizerRowSpacing; + protected int VisualizerCollumnSpacing; + private int VisualizerFrameCap; + private int VisualizerSidesCap; + protected boolean flagsInherit; + protected ChatColor chatColor; + protected boolean chatEnable; + protected boolean actionBar; + protected boolean ActionBarOnSelection; + protected boolean visualizer; + protected int minMoveUpdate; + protected int MaxResCount; + protected int MaxRentCount; + protected int MaxSubzonesCount; + protected int MaxSubzoneDepthCount; + protected int VoteRangeFrom; + protected int HealInterval; + protected int FeedInterval; + protected int VoteRangeTo; + protected FlagPermissions globalCreatorDefaults; + protected FlagPermissions globalResidenceDefaults; + protected Map globalGroupDefaults; + protected String language; + protected String DefaultWorld; + protected String DateFormat; + protected String TimeZone; + protected boolean preventBuildInRent; + protected boolean PreventSubZoneRemoval; + protected boolean stopOnSaveError; + protected boolean legacyperms; + protected String namefix; + protected boolean showIntervalMessages; + protected boolean ShowNoobMessage; + protected boolean NewPlayerUse; + protected boolean NewPlayerFree; + protected boolean spoutEnable; + protected boolean AutoMobRemoval; + protected boolean BounceAnimation; + protected boolean useFlagGUI; + protected int AutoMobRemovalInterval; + protected boolean enableLeaseMoneyAccount; + protected boolean CouldronCompatability; + protected boolean enableDebug = false; + protected boolean versionCheck = true; + protected boolean UUIDConvertion = true; + protected boolean OfflineMode = false; + protected boolean SelectionIgnoreY = false; + protected boolean NoCostForYBlocks = false; + protected boolean useVisualizer; + protected boolean DisableListeners; + protected boolean DisableCommands; + +// protected boolean DisableNoFlagMessageUse; +// protected List DisableNoFlagMessageWorlds = new ArrayList(); + + protected boolean TNTExplodeBelow; + protected int TNTExplodeBelowLevel; + protected boolean CreeperExplodeBelow; + protected int CreeperExplodeBelowLevel; + protected List customContainers; + protected List customBothClick; + protected List customRightClick; + protected List CleanBlocks; + protected List NoFlowWorlds; + protected List AutoCleanUpWorlds; + protected List NoPlaceWorlds; + protected List BlockFallWorlds; + protected List CleanWorlds; + protected List FlagsList; + protected List NegativePotionEffects; + protected List NegativeLingeringPotionEffects; + private Double WalkSpeed1; + private Double WalkSpeed2; + + protected Location KickLocation; + protected Location FlyLandLocation; + + protected List RTeleport = new ArrayList(); + + protected List DisabledWorldsList = new ArrayList(); + + protected int rtCooldown; + protected int rtMaxTries; + + protected ItemStack GuiTrue; + protected ItemStack GuiFalse; + protected ItemStack GuiRemove; + + private boolean enforceAreaInsideArea; + + protected ParticleEffects SelectedFrame; + protected ParticleEffects SelectedSides; + + protected ParticleEffects OverlapFrame; + protected ParticleEffects OverlapSides; + + protected Effect SelectedSpigotFrame; + protected Effect SelectedSpigotSides; + + protected Effect OverlapSpigotFrame; + protected Effect OverlapSpigotSides; + + // DynMap + public boolean DynMapUse; + public boolean DynMapShowFlags; + public boolean DynMapHideHidden; + public boolean DynMapLayer3dRegions; + public int DynMapLayerSubZoneDepth; + public String DynMapBorderColor; + public double DynMapBorderOpacity; + public int DynMapBorderWeight; + public String DynMapFillColor; + public double DynMapFillOpacity; + public String DynMapFillForRent; + public String DynMapFillRented; + public String DynMapFillForSale; + public List DynMapVisibleRegions; + public List DynMapHiddenRegions; + // DynMap + + // Schematics + public boolean RestoreAfterRentEnds; + public boolean SchematicsSaveOnFlagChange; + // Schematics + + // Global chat + public boolean GlobalChatEnabled; + public boolean GlobalChatSelfModify; + public String GlobalChatFormat; + // Global chat + + private Residence plugin; + + public ConfigManager(Residence plugin) { +// FileConfiguration config = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "config.yml")); + this.plugin = plugin; + globalCreatorDefaults = new FlagPermissions(); + globalResidenceDefaults = new FlagPermissions(); + globalGroupDefaults = new HashMap(); + UpdateConfigFile(); + this.loadFlags(); + this.loadGroups(); + } + + public static String Colors(String text) { + return ChatColor.translateAlternateColorCodes('&', text); + } + + public void ChangeConfig(String path, Boolean stage) { + File f = new File(plugin.getDataFolder(), "config.yml"); + + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + if (!conf.isBoolean(path)) + return; + + conf.set(path, stage); + + try { + conf.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + plugin.getConfigManager().UpdateConfigFile(); + } + + public static List ColorsArray(List text, Boolean colorize) { + List temp = new ArrayList(); + for (String part : text) { + if (colorize) + part = Colors(part); + temp.add(Colors(part)); + } + return temp; + } + + void UpdateFlagFile() { + + File f = new File(plugin.getDataFolder(), "flags.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + for (Flags fl : Flags.values()) { + if (conf.isBoolean("Global.FlagPermission." + fl.getName())) + continue; + conf.createSection("Global.FlagPermission." + fl.getName()); + conf.set("Global.FlagPermission." + fl.getName(), fl.isEnabled()); + } + + if (!conf.isConfigurationSection("Global.FlagGui")) + conf.createSection("Global.FlagGui"); + + ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); + + for (Flags fl : Flags.values()) { + guiSection.set(fl.getName() + ".Id", fl.getId()); + guiSection.set(fl.getName() + ".Data", fl.getData()); + } + + try { + conf.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void UpdateGroupedFlagsFile() { + + File f = new File(plugin.getDataFolder(), "flags.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + if (!conf.isConfigurationSection("Global.GroupedFlags")) { + conf.createSection("Global.GroupedFlags"); + conf.set("Global.GroupedFlags.redstone", Arrays.asList( + Flags.note.getName(), + Flags.pressure.getName(), + Flags.lever.getName(), + Flags.button.getName(), + Flags.diode.getName())); + conf.set("Global.GroupedFlags.craft", Arrays.asList( + Flags.brew.getName(), + Flags.table.getName(), + Flags.enchant.getName())); + conf.set("Global.GroupedFlags.trusted", Arrays.asList( + Flags.use.getName(), + Flags.tp.getName(), + Flags.build.getName(), + Flags.container.getName(), + Flags.move.getName(), + Flags.leash.getName(), + Flags.animalkilling.getName(), + Flags.mobkilling.getName(), + Flags.shear.getName(), + Flags.chat.getName())); + conf.set("Global.GroupedFlags.fire", Arrays.asList( + Flags.ignite.getName(), + Flags.firespread.getName())); + + try { + conf.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + } + + for (String oneGroup : conf.getConfigurationSection("Global.GroupedFlags").getKeys(false)) { + for (String OneFlag : conf.getStringList("Global.GroupedFlags." + oneGroup)) { + FlagPermissions.addFlagToFlagGroup(oneGroup, OneFlag); + } + } + } + + @SuppressWarnings("deprecation") + public void UpdateConfigFile() { + + File f = new File(plugin.getDataFolder(), "config.yml"); + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + if (in == null) + return; + + String defaultWorldName = Bukkit.getServer().getWorlds().size() > 0 ? Bukkit.getServer().getWorlds().get(0).getName() : "World"; + + YamlConfiguration conf = YamlConfiguration.loadConfiguration(in); + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + ConfigReader c = new ConfigReader(conf, writer); + + c.getW().addComment("Global", "These are Global Settings for Residence."); + + c.getW().addComment("Global.UUIDConvertion", "Starts UUID conversion on plugin startup", "DONT change this if you are not sure what you doing"); + UUIDConvertion = c.get("Global.UUIDConvertion", true); + + c.getW().addComment("Global.OfflineMode", + "If you running offline server, better to check this as true. This will help to solve issues with changing players UUID."); + OfflineMode = c.get("Global.OfflineMode", false); + + c.getW().addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); + versionCheck = c.get("Global.versionCheck", true); + + c.getW().addComment("Global.Language", "This loads the .yml file in the Residence Language folder", + "All Residence text comes from this file. (NOT DONE YET)"); + language = c.get("Global.Language", "English", false); + + c.getW().addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", + "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); + selectionToolId = c.get("Global.SelectionToolId", Material.WOOD_HOE.getId()); + + c.getW().addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); + SelectionIgnoreY = c.get("Global.Selection.IgnoreY", false); + c.getW().addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", + "This will lower residence price by up to 256 times, so ajust block price BEFORE enabling this"); + NoCostForYBlocks = c.get("Global.Selection.NoCostForYBlocks", false); + + c.getW().addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", + "Simply equip this tool and hit a location inside the residence and it will display the info for it."); + infoToolId = c.get("Global.InfoToolId", Material.STRING.getId()); + + c.getW().addComment("Global.Optimizations.DefaultWorld", "Name of your main residence world. Usually normal starting world 'World'. Capitalization essential"); + DefaultWorld = c.get("Global.Optimizations.DefaultWorld", defaultWorldName, false); + + c.getW().addComment("Global.Optimizations.DisabledWorlds.List", "List Of Worlds where this plugin is disabled"); + DisabledWorldsList = c.get("Global.Optimizations.DisabledWorlds.List", new ArrayList()); + + c.getW().addComment("Global.Optimizations.DisabledWorlds.DisableListeners", "Disables all listeners in included worlds"); + DisableListeners = c.get("Global.Optimizations.DisabledWorlds.DisableListeners", true); + c.getW().addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); + DisableCommands = c.get("Global.Optimizations.DisabledWorlds.DisableCommands", true); + +// c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", +// "You can bypass this with residence.checkbadflags permission node"); +// DisableNoFlagMessageUse = c.get("Global.Optimizations.DisabledNoFlagMessage.Use", false); +// c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Worlds", "List Of Worlds where player wont get error messages"); +// DisableNoFlagMessageWorlds = c.get("Global.Optimizations.DisabledNoFlagMessage.Worlds", Arrays.asList(Bukkit.getWorlds().get(0).getName())); + + c.getW().addComment("Global.Optimizations.GlobalChat.Enabled", + "Enables or disables chat modification by including players main residence name"); + GlobalChatEnabled = c.get("Global.Optimizations.GlobalChat.Enabled", false); + c.getW().addComment("Global.Optimizations.GlobalChat.SelfModify", + "Modifys chat to add chat titles. If you're using a chat manager, you may add the tag {residence} to your chat format and disable this."); + GlobalChatSelfModify = c.get("Global.Optimizations.GlobalChat.SelfModify", true); + GlobalChatFormat = c.get("Global.Optimizations.GlobalChat.Format", "&c[&e%1&c]", true); + + c.getW().addComment("Global.Optimizations.BlockAnyTeleportation", + "When this set to true, any teleportation to residence where player dont have tp flag, action will be denyied", + "This can prevent from teleporting players to residence with 3rd party plugins like esentials /tpa"); + BlockAnyTeleportation = c.get("Global.Optimizations.BlockAnyTeleportation", true); + + c.getW().addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using", + "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); + MaxResCount = c.get("Global.Optimizations.MaxResCount", 30); + c.getW().addComment("Global.Optimizations.MaxRentCount", "Set this as low as posible depending of residence.max.rents.[number] permission you are using", + "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); + MaxRentCount = c.get("Global.Optimizations.MaxRentCount", 10); + c.getW().addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using", + "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); + MaxSubzonesCount = c.get("Global.Optimizations.MaxSubzoneCount", 5); + c.getW().addComment("Global.Optimizations.MaxSubzoneDepthCount", "Set this as low as posible depending of residence.max.subzonedepth.[number] permission you are using", + "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); + MaxSubzoneDepthCount = c.get("Global.Optimizations.MaxSubzoneDepthCount", 5); + + c.getW().addComment("Global.Optimizations.OverridePvp", "By setting this to true, regular pvp flag will be acting as overridepvp flag", + "Overridepvp flag tries to ignore any pvp protection in that residence by any other plugin"); + OverridePvp = c.get("Global.Optimizations.OverridePvp", false); + + // residence kick location + c.getW().addComment("Global.Optimizations.KickLocation.Use", + "By setting this to true, when player kicks another player from residence, he will be teleported to this location instead of getting outside residence"); + Boolean UseKick = c.get("Global.Optimizations.KickLocation.Use", false); + String KickLocationWorld = c.get("Global.Optimizations.KickLocation.World", defaultWorldName); + Double KickLocationX = c.get("Global.Optimizations.KickLocation.X", 0.5); + Double KickLocationY = c.get("Global.Optimizations.KickLocation.Y", 63.0); + Double KickLocationZ = c.get("Global.Optimizations.KickLocation.Z", 0.5); + c.getW().addComment("Global.Optimizations.KickLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); + Double KickPitch = c.get("Global.Optimizations.KickLocation.Pitch", 0.0); + c.getW().addComment("Global.Optimizations.KickLocation.Yaw", "Head position to left and right. Range from -180 to 180"); + Double KickYaw = c.get("Global.Optimizations.KickLocation.Yaw", 0.0); + if (UseKick) { + World world = Bukkit.getWorld(KickLocationWorld); + if (world != null) { + KickLocation = new Location(world, KickLocationX, KickLocationY, KickLocationZ); + KickLocation.setPitch(KickPitch.floatValue()); + KickLocation.setYaw(KickYaw.floatValue()); + } + } + + c.getW().addComment("Global.Optimizations.FlyLandLocation.World", "Used when players fly state is being turned to false because of fly flag and there is no solid land where to land for player"); + String FlyLocationWorld = c.get("Global.Optimizations.FlyLandLocation.World", defaultWorldName); + Double FlyLocationX = c.get("Global.Optimizations.FlyLandLocation.X", 0.5); + Double FlyLocationY = c.get("Global.Optimizations.FlyLandLocation.Y", 63.0); + Double FlyLocationZ = c.get("Global.Optimizations.FlyLandLocation.Z", 0.5); + c.getW().addComment("Global.Optimizations.FlyLandLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); + Double FlyPitch = c.get("Global.Optimizations.FlyLandLocation.Pitch", 0.0); + c.getW().addComment("Global.Optimizations.FlyLandLocation.Yaw", "Head position to left and right. Range from -180 to 180"); + Double FlyYaw = c.get("Global.Optimizations.FlyLandLocation.Yaw", 0.0); + World world = Bukkit.getWorld(FlyLocationWorld); + if (world != null) { + FlyLandLocation = new Location(world, FlyLocationX, FlyLocationY, FlyLocationZ); + FlyLandLocation.setPitch(FlyPitch.floatValue()); + FlyLandLocation.setYaw(FlyYaw.floatValue()); + } + + c.getW().addComment("Global.Optimizations.ShortInfo.Use", + "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); + ShortInfoUse = c.get("Global.Optimizations.ShortInfo.Use", false); + + // Vote range + c.getW().addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); + VoteRangeFrom = c.get("Global.Optimizations.Vote.RangeFrom", 0); + VoteRangeTo = c.get("Global.Optimizations.Vote.RangeTo", 10); + + c.getW().addComment("Global.Optimizations.Vote.OnlyLike", "If this true, players can onli give like for shop instead of point voting"); + OnlyLike = c.get("Global.Optimizations.Vote.OnlyLike", false); + + // Healing/Feed interval + c.getW().addComment("Global.Optimizations.Intervals.Heal", "How often in seconds to heal/feed players in residence with appropriate flag", + "Bigger numbers can save some resources"); + HealInterval = c.get("Global.Optimizations.Intervals.Heal", 1); + FeedInterval = c.get("Global.Optimizations.Intervals.Feed", 5); + + // negative potion effect list + c.getW().addComment("Global.Optimizations.NegativePotionEffects", + "Potions containing one of thos effects will be ignored if residence dont have pvp true flag set"); + NegativePotionEffects = c.get("Global.Optimizations.NegativePotionEffects", Arrays.asList("blindness", "confusion", "harm", "hunger", "poison", "slow", + "slow_digging", "weakness", "wither")); + + NegativeLingeringPotionEffects = c.get("Global.Optimizations.NegativeLingeringPotions", Arrays.asList("slowness", "instant_damage", "poison", + "slowness")); + + c.getW().addComment("Global.Optimizations.WalkSpeed", + "Defines speed for particular wspeed1 and wspeed2 flags. It can be from 0 up to 5"); + WalkSpeed1 = c.get("Global.Optimizations.WalkSpeed.1", 0.5D); + WalkSpeed1 = WalkSpeed1 < 0 ? 0 : WalkSpeed1; + WalkSpeed1 = WalkSpeed1 > 5 ? 5 : WalkSpeed1; + WalkSpeed1 = WalkSpeed1 / 5.0; + WalkSpeed2 = c.get("Global.Optimizations.WalkSpeed.2", 2D); + WalkSpeed2 = WalkSpeed2 < 0 ? 0 : WalkSpeed2; + WalkSpeed2 = WalkSpeed2 > 5 ? 5 : WalkSpeed2; + WalkSpeed2 = WalkSpeed2 / 5.0; + + c.getW().addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", + "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); + minMoveUpdate = c.get("Global.MoveCheckInterval", 500); + + c.getW().addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); + TeleportDelay = c.get("Global.Tp.TeleportDelay", 3); + c.getW().addComment("Global.Tp.TeleportTitleMessage", "Show aditional message in title message area when player is teleporting to residence"); + TeleportTitleMessage = c.get("Global.Tp.TeleportTitleMessage", true); + + if (conf.contains("Global.RandomTeleportation.WorldName")) { + + String path = "Global.RandomTeleportation."; + String WorldName = conf.getString(path + "WorldName", defaultWorldName); + + int MaxCoord = conf.getInt(path + "MaxCoord", 1000); + int MinCord = conf.getInt(path + "MinCord", 500); + int CenterX = conf.getInt(path + "CenterX", 0); + int CenterZ = conf.getInt(path + "CenterZ", 0); + + RTeleport.add(new RandomTeleport(WorldName, MaxCoord, MinCord, CenterX, CenterZ)); + + c.get("Global.RandomTeleportation." + WorldName + ".MaxCord", MaxCoord); + c.get("Global.RandomTeleportation." + WorldName + ".MinCord", MinCord); + c.get("Global.RandomTeleportation." + WorldName + ".CenterX", CenterX); + c.get("Global.RandomTeleportation." + WorldName + ".CenterZ", CenterZ); + } else { + if (conf.isConfigurationSection("Global.RandomTeleportation")) + for (String one : conf.getConfigurationSection("Global.RandomTeleportation").getKeys(false)) { + String path = "Global.RandomTeleportation." + one + "."; + + c.getW().addComment("Global.RandomTeleportation." + one, + "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); + + c.getW().addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); + int MaxCoord = c.get(path + "MaxCoord", 1000); + c.getW().addComment(path + "MinCord", + "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); + int MinCord = c.get(path + "MinCord", 500); + int CenterX = c.get(path + "CenterX", 0); + int CenterZ = c.get(path + "CenterZ", 0); + + RTeleport.add(new RandomTeleport(one, MaxCoord, MinCord, CenterX, CenterZ)); + } + else { + String path = "Global.RandomTeleportation." + defaultWorldName + "."; + + c.getW().addComment(path + "WorldName", "World to use this function, set main residence world"); + String WorldName = c.get(path + "WorldName", defaultWorldName, true); + + c.getW().addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); + int MaxCoord = c.get(path + "MaxCoord", 1000); + c.getW().addComment(path + "MinCord", + "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); + int MinCord = c.get(path + "MinCord", 500); + int CenterX = c.get(path + "CenterX", 0); + int CenterZ = c.get(path + "CenterZ", 0); + RTeleport.add(new RandomTeleport(WorldName, MaxCoord, MinCord, CenterX, CenterZ)); + } + } + + c.getW().addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); + rtCooldown = c.get("Global.RandomTeleportation.Cooldown", 5); + + c.getW().addComment("Global.RandomTeleportation.MaxTries", "How many times to try find correct location for teleportation.", + "Keep it at low number, as player always can try again after delay"); + rtMaxTries = c.get("Global.RandomTeleportation.MaxTries", 20); + + c.getW().addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); + autoSaveInt = c.get("Global.SaveInterval", 10); + + c.getW().addComment("Global.Backup.AutoCleanUp.Use", + "Do you want to automaticaly remove backup files from main backup folder if they are older than defined day amount"); + BackupAutoCleanUpUse = c.get("Global.Backup.AutoCleanUp.Use", false); + BackupAutoCleanUpDays = c.get("Global.Backup.AutoCleanUp.Days", 30); + + c.getW().addComment("Global.Backup.UseZip", "Do you want to backup files by creating zip files in main residence folder in backup folder", + "This wont have effect on regular backuped files made in save folder"); + UseZipBackup = c.get("Global.Backup.UseZip", true); + + BackupWorldFiles = c.get("Global.Backup.IncludeFiles.Worlds", true); + BackupforsaleFile = c.get("Global.Backup.IncludeFiles.forsale", true); + BackupleasesFile = c.get("Global.Backup.IncludeFiles.leases", true); + BackuppermlistsFile = c.get("Global.Backup.IncludeFiles.permlists", true); + BackuprentFile = c.get("Global.Backup.IncludeFiles.rent", true); + BackupflagsFile = c.get("Global.Backup.IncludeFiles.flags", true); + BackupgroupsFile = c.get("Global.Backup.IncludeFiles.groups", true); + BackupconfigFile = c.get("Global.Backup.IncludeFiles.config", true); + + // Auto remove old residences + c.getW().addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", + "Players can bypass this wih residence.cleanbypass permission node"); + AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); + c.getW().addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); + AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); + c.getW().addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); + AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); + + c.getW().addComment("Global.Lwc.OnDelete", "Removes lwc protection from all defined objects when removing residence"); + LwcOnDelete = c.get("Global.Lwc.OnDelete", true); + c.getW().addComment("Global.Lwc.OnBuy", "Removes lwc protection from all defined objects when buying residence"); + LwcOnBuy = c.get("Global.Lwc.OnBuy", true); + c.getW().addComment("Global.Lwc.OnUnrent", "Removes lwc protection from all defined objects when unrenting residence"); + LwcOnUnrent = c.get("Global.Lwc.OnUnrent", true); + + c.getW().addComment("Global.Lwc.MaterialList", "List of blocks you want to remove protection from"); + for (String oneName : c.get("Global.Lwc.MaterialList", Arrays.asList("CHEST", "TRAPPED_CHEST", "furnace", "dispenser"))) { + Material mat = Material.getMaterial(oneName.toUpperCase()); + if (mat != null) + LwcMatList.add(mat); + else + Bukkit.getConsoleSender().sendMessage("Incorrect Lwc material name for " + oneName); + } + + // TNT explosions below 63 + c.getW().addComment("Global.AntiGreef.TNT.ExplodeBelow", + "When set to true will allow tnt and minecart with tnt to explode below 62 (default) level outside of residence", + "This will allow mining with tnt and more vanilla play"); + TNTExplodeBelow = c.get("Global.AntiGreef.TNT.ExplodeBelow", false); + TNTExplodeBelowLevel = c.get("Global.AntiGreef.TNT.level", 62); + // Creeper explosions below 63 + c.getW().addComment("Global.AntiGreef.Creeper.ExplodeBelow", "When set to true will allow Creeper explode below 62 (default) level outside of residence", + "This will give more realistic game play"); + CreeperExplodeBelow = c.get("Global.AntiGreef.Creeper.ExplodeBelow", false); + CreeperExplodeBelowLevel = c.get("Global.AntiGreef.Creeper.level", 62); + // Flow + c.getW().addComment("Global.AntiGreef.Flow.Level", "Level from witch one to start lava and water flow blocking", "This dont have effect in residence area"); + FlowLevel = c.get("Global.AntiGreef.Flow.Level", 63); + c.getW().addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); + NoLava = c.get("Global.AntiGreef.Flow.NoLavaFlow", true); + c.getW().addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); + NoWater = c.get("Global.AntiGreef.Flow.NoWaterFlow", true); + NoFlowWorlds = c.get("Global.AntiGreef.Flow.Worlds", Arrays.asList(defaultWorldName)); + + // Place + c.getW().addComment("Global.AntiGreef.Place.Level", "Level from witch one to start block lava and water place", "This don't have effect in residence area"); + PlaceLevel = c.get("Global.AntiGreef.Place.Level", 63); + c.getW().addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); + NoLavaPlace = c.get("Global.AntiGreef.Place.NoLavaPlace", true); + c.getW().addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, playrs cant place water outside residence"); + NoWaterPlace = c.get("Global.AntiGreef.Place.NoWaterPlace", true); + NoPlaceWorlds = c.get("Global.AntiGreef.Place.Worlds", Arrays.asList(defaultWorldName)); + + // Sand fall + c.getW().addComment("Global.AntiGreef.BlockFall.Use", "With this set to true, falling blocks will be deleted if they will land in different area"); + useBlockFall = c.get("Global.AntiGreef.BlockFall.Use", true); + c.getW().addComment("Global.AntiGreef.BlockFall.Level", "Level from witch one to start block block's fall", + "This don't have effect in residence area or outside"); + BlockFallLevel = c.get("Global.AntiGreef.BlockFall.Level", 62); + BlockFallWorlds = c.get("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName)); + + // Res cleaning + c.getW().addComment("Global.AntiGreef.ResCleaning.Use", + "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", + "Effective way to prevent residence creating near greefing target and then remove it"); + UseClean = c.get("Global.AntiGreef.ResCleaning.Use", true); + c.getW().addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); + CleanLevel = c.get("Global.AntiGreef.ResCleaning.Level", 63); + c.getW().addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); + CleanBlocks = c.getIntList("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11)); + CleanWorlds = c.get("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName)); + + c.getW().addComment("Global.AntiGreef.Flags.Prevent", + "By setting this to true flags from list will be protected from change while there is some one inside residence besides owner", + "Protects in example from people inviting some one and changing pvp flag to true to kill them"); + PvPFlagPrevent = c.get("Global.AntiGreef.Flags.Prevent", true); + FlagsList = c.get("Global.AntiGreef.Flags.list", Arrays.asList("pvp")); + + c.getW().addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); + defaultGroup = c.get("Global.DefaultGroup", "default"); + + c.getW().addComment("Global.UseLeaseSystem", "Enable / Disable the Lease System."); + useLeases = c.get("Global.UseLeaseSystem", false); + + c.getW().addComment("Global.DateFormat", "Sets date format when shown in example lease or rent expire date", + "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); + DateFormat = c.get("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz"); + + c.getW().addComment("Global.TimeZone", "Sets time zone for showing date, usefull when server is in different country then main server player base", + "Full list of posible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); + TimeZone = c.get("Global.TimeZone", Calendar.getInstance().getTimeZone().getID()); + + c.getW().addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); + ResMoneyBack = c.get("Global.ResMoneyBack", false); + + c.getW().addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); + leaseCheckInterval = c.get("Global.LeaseCheckInterval", 10); + + c.getW().addComment("Global.LeaseAutoRenew", + "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); + leaseAutoRenew = c.get("Global.LeaseAutoRenew", true); + + c.getW().addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); + c.get("Global.EnablePermissions", true); + + c.getW().addComment("Global.LegacyPermissions", "Set to true if NOT using Permissions or PermissionsBukkit, or using a really old version of Permissions"); + legacyperms = c.get("Global.LegacyPermissions", false); + + c.getW().addComment("Global.EnableEconomy", + "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); + enableEconomy = c.get("Global.EnableEconomy", true); + + c.getW().addComment("Global.ExtraEnterMessage", + "When enabled extra message will apear in chat if residence is for rent or for sell to inform how he can rent/buy residence with basic information."); + ExtraEnterMessage = c.get("Global.ExtraEnterMessage", true); + + c.getW().addComment("Global.Sell.Subzone", "If set to true, this will allow to sell subzones. Its recommended to keep it false tho"); + SellSubzone = c.get("Global.Sell.Subzone", false); + + c.getW().addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); + enableRentSystem = c.get("Global.EnableRentSystem", true); + + c.getW().addComment("Global.Rent.PreventRemoval", "Prevents residence/subzone removal if its subzone is still rented by some one"); + RentPreventRemoval = c.get("Global.Rent.PreventRemoval", true); + c.getW().addComment("Global.Rent.Inform.OnEnding", "Informs players on rent time ending"); + RentInformOnEnding = c.get("Global.Rent.Inform.OnEnding", true); + c.getW().addComment("Global.Rent.Inform.Before", "Time range in minutes when to start informing about ending rent"); + RentInformBefore = c.get("Global.Rent.Inform.Before", 1440); + c.getW().addComment("Global.Rent.Inform.Delay", "Time range in seconds for how long to wait after player logs in to inform about ending rents"); + RentInformDelay = c.get("Global.Rent.Inform.Delay", 60); + + c.getW().addComment("Global.Rent.DefaultValues.AllowRenewing", "Default values used when putting residence for rent"); + RentAllowRenewing = c.get("Global.Rent.DefaultValues.AllowRenewing", true); + RentStayInMarket = c.get("Global.Rent.DefaultValues.StayInMarket", true); + RentAllowAutoPay = c.get("Global.Rent.DefaultValues.AllowAutoPay", true); + c.getW().addComment("Global.Rent.DefaultValues.PlayerAutoPay", "If set to true, when player is not defining auto pay on renting, then this value will be used"); + RentPlayerAutoPay = c.get("Global.Rent.DefaultValues.PlayerAutoPay", true); + + c.getW().addComment("Global.Rent.Schematics.RestoreAfterRentEnds", + "EXPERIMENTAL!!! If set to true, residence will be restored to state it was when backup flag was set to true", + "For securoty reassons only players with aditional residence.backup permission node can set backup flag"); + RestoreAfterRentEnds = c.get("Global.Rent.Schematics.RestoreAfterRentEnds", true); + c.getW().addComment("Global.Rent.Schematics.SaveOnFlagChange", + "When set to true, area state will be saved only when setting backup to true value", + "When set to false, area state will be saved before each renting to have always up to date area look", + "Keep in mind that when its set to false, there is slightly bigger server load as it has to save area each time when some one rents it"); + SchematicsSaveOnFlagChange = c.get("Global.Rent.Schematics.SaveOnFlagChange", true); + + c.getW().addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); + rentCheckInterval = c.get("Global.RentCheckInterval", 10); + + c.getW().addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); + chatEnable = c.get("Global.ResidenceChatEnable", true); + + c.getW().addComment("Global.ActionBar.General", "True for ActionBar - new component in 1.8", "False for old Messaging in chat enter/leave Residence messages"); + actionBar = c.get("Global.ActionBar.General", true); + ActionBarOnSelection = c.get("Global.ActionBar.ShowOnSelection", true); + + c.getW().addComment("Global.ResidenceChatColor", "Color of residence chat."); + try { + chatColor = ChatColor.valueOf(c.get("Global.ResidenceChatColor", "DARK_PURPLE", true)); + } catch (Exception ex) { + chatColor = ChatColor.DARK_PURPLE; + } + + c.getW().addComment("Global.ResidenceChatPrefixLenght", "Max lenght of residence chat prefix including color codes"); + chatPrefixLength = c.get("Global.ResidenceChatPrefixLength", 16); + + c.getW().addComment("Global.AdminOnlyCommands", + "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); + adminsOnly = c.get("Global.AdminOnlyCommands", false); + + c.getW().addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); + adminOps = c.get("Global.AdminOPs", true); + + c.getW().addComment("Global.AdminFullAccess", + "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); + AdminFullAccess = c.get("Global.AdminFullAccess", false); + + c.getW().addComment("Global.MultiWorldPlugin", + "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", + "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); + multiworldPlugin = c.get("Global.MultiWorldPlugin", "Multiverse-Core"); + + c.getW().addComment("Global.ResidenceFlagsInherit", "Setting this to true causes subzones to inherit flags from their parent zones."); + flagsInherit = c.get("Global.ResidenceFlagsInherit", true); + + c.getW().addComment("Global.PreventRentModify", "Setting this to false will allow rented residences to be modified by the renting player."); + preventBuildInRent = c.get("Global.PreventRentModify", true); + + c.getW().addComment("Global.PreventSubZoneRemoval", "Setting this to true will prevent subzone deletion when subzone owner is not same as parent zone owner."); + PreventSubZoneRemoval = c.get("Global.PreventSubZoneRemoval", true); + + c.getW().addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); + stopOnSaveError = c.get("Global.StopOnSaveFault", true); + + c.getW().addComment( + "This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); + namefix = c.get("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]"); + + c.getW().addComment("Global.ShowIntervalMessages", + "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); + showIntervalMessages = c.get("Global.ShowIntervalMessages", false); + + c.getW().addComment("Global.ShowNoobMessage", "Setting this to true sends a tutorial message to the new player when he places chest on ground."); + ShowNoobMessage = c.get("Global.ShowNoobMessage", true); + + c.getW().addComment("Global.NewPlayer", "Setting this to true creates residence around players placed chest if he don't have any.", + "Only once every server restart if he still don't have any residence"); + NewPlayerUse = c.get("Global.NewPlayer.Use", false); + c.getW().addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", + "By setting to false, money will be taken from player, if he has them"); + NewPlayerFree = c.get("Global.NewPlayer.Free", true); + c.getW().addComment("Global.NewPlayer.Range", "Range from placed chest o both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide"); + NewPlayerRangeX = c.get("Global.NewPlayer.Range.X", 5); + NewPlayerRangeY = c.get("Global.NewPlayer.Range.Y", 5); + NewPlayerRangeZ = c.get("Global.NewPlayer.Range.Z", 5); + + c.getW().addComment("Global.CustomContainers", + "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); + customContainers = c.getIntList("Global.CustomContainers", new ArrayList()); + customBothClick = c.getIntList("Global.CustomBothClick", new ArrayList()); + customRightClick = c.getIntList("Global.CustomRightClick", new ArrayList()); + + c.getW().addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundries"); + useVisualizer = c.get("Global.Visualizer.Use", true); + c.getW().addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", + "Keep it no more as 30, as player cant see more than 16 blocks"); + VisualizerRange = c.get("Global.Visualizer.Range", 16); + c.getW().addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); + VisualizerShowFor = c.get("Global.Visualizer.ShowFor", 5000); + c.getW().addComment("Global.Visualizer.updateInterval", "How often in miliseconds update particles for player"); + VisualizerUpdateInterval = c.get("Global.Visualizer.updateInterval", 20); + c.getW().addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); + VisualizerRowSpacing = c.get("Global.Visualizer.RowSpacing", 2); + if (VisualizerRowSpacing < 1) + VisualizerRowSpacing = 1; + c.getW().addComment("Global.Visualizer.CollumnSpacing", "Spacing in blocks between particle effects for collums"); + VisualizerCollumnSpacing = c.get("Global.Visualizer.CollumnSpacing", 2); + if (VisualizerCollumnSpacing < 1) + VisualizerCollumnSpacing = 1; + + c.getW().addComment("Global.Visualizer.FrameCap", "Maximum amount of frame particles to show for one player"); + VisualizerFrameCap = c.get("Global.Visualizer.FrameCap", 2000); + if (VisualizerFrameCap < 1) + VisualizerFrameCap = 1; + + c.getW().addComment("Global.Visualizer.SidesCap", "Maximum amount of sides particles to show for one player"); + VisualizerSidesCap = c.get("Global.Visualizer.SidesCap", 2000); + if (VisualizerSidesCap < 1) + VisualizerSidesCap = 1; + + String effectsList = ""; + for (Effect one : Effect.values()) { + if (one == null) + continue; + if (one.name() == null) + continue; + effectsList += one.name().toLowerCase() + ", "; + } + + c.getW().addComment("Global.Visualizer.Selected", + "Particle effect names. Posible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", + " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", + " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance", + "", + "If using spigot based server different particales can be used:", effectsList); + + // Frame + String efname = c.get("Global.Visualizer.Selected.Frame", "happyVillager"); + SelectedFrame = ParticleEffects.fromName(efname); + if (SelectedFrame == null) { + SelectedFrame = ParticleEffects.VILLAGER_HAPPY; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } + efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; + for (Effect one : Effect.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { + SelectedSpigotFrame = one; + break; + } + } + + if (plugin.isSpigot()) + if (SelectedSpigotFrame == null) { + SelectedSpigotFrame = Effect.getByName("HAPPY_VILLAGER"); + if (SelectedSpigotFrame == null) + SelectedSpigotFrame = Effect.values()[0]; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } + + // Sides + efname = c.get("Global.Visualizer.Selected.Sides", "reddust"); + SelectedSides = ParticleEffects.fromName(efname); + if (SelectedSides == null) { + SelectedSides = ParticleEffects.REDSTONE; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); + } + efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; + for (Effect one : Effect.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { + SelectedSpigotSides = one; + break; + } + } + + if (plugin.isSpigot()) + if (SelectedSpigotSides == null) { + SelectedSpigotSides = Effect.getByName("COLOURED_DUST"); + if (SelectedSpigotSides == null) + SelectedSpigotSides = Effect.values()[0]; + + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } + + efname = c.get("Global.Visualizer.Overlap.Frame", "FLAME"); + OverlapFrame = ParticleEffects.fromName(efname); + if (OverlapFrame == null) { + OverlapFrame = ParticleEffects.FLAME; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Overlap Frame with this name, it was set to default"); + } + + efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; + for (Effect one : Effect.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { + OverlapSpigotFrame = one; + break; + } + } + + if (plugin.isSpigot()) + if (OverlapSpigotFrame == null) { + OverlapSpigotFrame = Effect.getByName("FLAME"); + if (OverlapSpigotFrame == null) + OverlapSpigotFrame = Effect.values()[0]; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } + + efname = c.get("Global.Visualizer.Overlap.Sides", "FLAME"); + OverlapSides = ParticleEffects.fromName(efname); + if (OverlapSides == null) { + OverlapSides = ParticleEffects.FLAME; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); + } + efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; + for (Effect one : Effect.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { + OverlapSpigotSides = one; + break; + } + } + + if (plugin.isSpigot()) + if (OverlapSpigotSides == null) { + OverlapSpigotSides = Effect.getByName("FLAME"); + if (OverlapSpigotSides == null) + OverlapSpigotSides = Effect.values()[0]; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } + + c.getW().addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); + BounceAnimation = c.get("Global.BounceAnimation", true); + + c.getW().addComment("Global.GUI.Enabled", "Enable or disable flag GUI"); + useFlagGUI = c.get("Global.GUI.Enabled", true); + + c.getW().addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); + + int id = c.get("Global.GUI.setTrue.Id", 35); + int data = c.get("Global.GUI.setTrue.Data", 13); + + Material Mat = Material.getMaterial(id); + if (Mat == null) + Mat = Material.STONE; + GuiTrue = new ItemStack(Mat, 1, (short) data); + + c.getW().addComment("Global.GUI.setFalse", "Item id and data to use when flag is set to false"); + id = c.get("Global.GUI.setFalse.Id", 35); + data = c.get("Global.GUI.setFalse.Data", 14); + + Mat = Material.getMaterial(id); + if (Mat == null) + Mat = Material.STONE; + GuiFalse = new ItemStack(Mat, 1, (short) data); + + c.getW().addComment("Global.GUI.setRemove", "Item id and data to use when flag is set to remove"); + id = c.get("Global.GUI.setRemove.Id", 35); + data = c.get("Global.GUI.setRemove.Data", 8); + + Mat = Material.getMaterial(id); + if (Mat == null) + Mat = Material.STONE; + GuiRemove = new ItemStack(Mat, 1, (short) data); + + c.getW().addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", + "This is quite heavy on server side, so enable only if you really need this feature"); + AutoMobRemoval = c.get("Global.AutoMobRemoval.Use", false); + c.getW().addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); + AutoMobRemovalInterval = c.get("Global.AutoMobRemoval.Interval", 3); + + enforceAreaInsideArea = c.get("Global.EnforceAreaInsideArea", false); + spoutEnable = c.get("Global.EnableSpout", false); + enableLeaseMoneyAccount = c.get("Global.EnableLeaseMoneyAccount", true); + + c.getW().addComment("Global.CouldronCompatability", + "By setting this to true, partial compatability for kCouldron servers will be anabled. Action bar messages and selection visualizer will be disabled automaticaly as off incorrect compatability"); + CouldronCompatability = c.get("Global.CouldronCompatability", false); + if (CouldronCompatability) { + useVisualizer = false; + actionBar = false; + ActionBarOnSelection = false; + } + + c.getW().addComment("DynMap.Use", "Enables or disable DynMap Support"); + DynMapUse = c.get("DynMap.Use", false); + c.getW().addComment("DynMap.ShowFlags", "Shows or hides residence flags"); + DynMapShowFlags = c.get("DynMap.ShowFlags", true); + c.getW().addComment("DynMap.HideHidden", "If set true, residence with hidden flag set to true will be hidden from dynmap"); + DynMapHideHidden = c.get("DynMap.HideHidden", true); + + c.getW().addComment("DynMap.Layer.3dRegions", "Enables 3D zones"); + DynMapLayer3dRegions = c.get("DynMap.Layer.3dRegions", true); + c.getW().addComment("DynMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); + DynMapLayerSubZoneDepth = c.get("DynMap.Layer.SubZoneDepth", 2); + + c.getW().addComment("DynMap.Border.Color", "Color of border. Pick color from this page http://www.w3schools.com/colors/colors_picker.asp"); + DynMapBorderColor = c.get("DynMap.Border.Color", "#FF0000"); + c.getW().addComment("DynMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); + DynMapBorderOpacity = c.get("DynMap.Border.Opacity", 0.3); + c.getW().addComment("DynMap.Border.Weight", "Border thickness"); + DynMapBorderWeight = c.get("DynMap.Border.Weight", 3); + DynMapFillOpacity = c.get("DynMap.Fill.Opacity", 0.3); + DynMapFillColor = c.get("DynMap.Fill.Color", "#FFFF00"); + DynMapFillForRent = c.get("DynMap.Fill.ForRent", "#33cc33"); + DynMapFillRented = c.get("DynMap.Fill.Rented", "#99ff33"); + DynMapFillForSale = c.get("DynMap.Fill.ForSale", "#0066ff"); + + c.getW().addComment("DynMap.VisibleRegions", "Shows only regions on this list"); + DynMapVisibleRegions = c.get("DynMap.VisibleRegions", new ArrayList()); + c.getW().addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden ingame"); + DynMapHiddenRegions = c.get("DynMap.HiddenRegions", new ArrayList()); + + try { + c.getW().save(f); + } catch (IOException e) { + e.printStackTrace(); + } + + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void loadFlags() { + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); + globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", flags.getConfigurationSection("Global")); + globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", flags.getConfigurationSection("Global")); + } + + public void loadGroups() { + FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); + ConfigurationSection node = groups.getConfigurationSection("Global.GroupDefault"); + if (node != null) { + Set keys = node.getConfigurationSection(defaultGroup).getKeys(false); + if (keys != null) { + for (String key : keys) { + globalGroupDefaults.put(key, FlagPermissions.parseFromConfigNodeAsList(defaultGroup, "false")); + } + } + } + } + + public boolean isGlobalChatEnabled() { + return GlobalChatEnabled; + } + + public boolean isGlobalChatSelfModify() { + return GlobalChatSelfModify; + } + + public String getGlobalChatFormat() { + return GlobalChatFormat; + } + + public int getRentInformDelay() { + return RentInformDelay; + } + + public int getRentInformBefore() { + return RentInformBefore; + } + + public boolean isRentAllowAutoPay() { + return RentAllowAutoPay; + } + + public boolean isRentPlayerAutoPay() { + return RentPlayerAutoPay; + } + + public boolean isRentStayInMarket() { + return RentStayInMarket; + } + + public boolean isSellSubzone() { + return SellSubzone; + } + + public boolean isRentAllowRenewing() { + return RentAllowRenewing; + } + + public boolean isRentPreventRemoval() { + return RentPreventRemoval; + } + + public boolean isRentInformOnEnding() { + return RentInformOnEnding; + } + + public boolean isTNTExplodeBelow() { + return TNTExplodeBelow; + } + + public int getTNTExplodeBelowLevel() { + return TNTExplodeBelowLevel; + } + + public boolean isCreeperExplodeBelow() { + return CreeperExplodeBelow; + } + + public int getCreeperExplodeBelowLevel() { + return CreeperExplodeBelowLevel; + } + + public boolean useVisualizer() { + return useVisualizer; + } + + public int getVisualizerRange() { + return VisualizerRange; + } + + public int getVisualizerShowFor() { + return VisualizerShowFor; + } + + public int getNewPlayerRangeX() { + return NewPlayerRangeX; + } + + public int getNewPlayerRangeY() { + return NewPlayerRangeY; + } + + public int getNewPlayerRangeZ() { + return NewPlayerRangeZ; + } + + public int getVisualizerRowSpacing() { + return VisualizerRowSpacing; + } + + public int getVisualizerCollumnSpacing() { + return VisualizerCollumnSpacing; + } + + public int getVisualizerUpdateInterval() { + return VisualizerUpdateInterval; + } + + public ParticleEffects getSelectedFrame() { + return SelectedFrame; + } + + public ParticleEffects getSelectedSides() { + return SelectedSides; + } + + public ParticleEffects getOverlapFrame() { + return OverlapFrame; + } + + public ParticleEffects getOverlapSides() { + return OverlapSides; + } + + public Effect getSelectedSpigotFrame() { + return SelectedSpigotFrame; + } + + public Effect getSelectedSpigotSides() { + return SelectedSpigotSides; + } + + public Effect getOverlapSpigotFrame() { + return OverlapSpigotFrame; + } + + public Effect getOverlapSpigotSides() { + return OverlapSpigotSides; + } + + public int getTeleportDelay() { + return TeleportDelay; + } + + public boolean isTeleportTitleMessage() { + return TeleportTitleMessage; + } + + public boolean useLegacyPermissions() { + return legacyperms; + } + + public String getDefaultGroup() { + return defaultGroup; + } + + public String getResidenceNameRegex() { + return namefix; + } + + public boolean isExtraEnterMessage() { + return ExtraEnterMessage; + } + + public boolean enableEconomy() { + return enableEconomy && plugin.getEconomyManager() != null; + } + + public boolean enabledRentSystem() { + return enableRentSystem && enableEconomy(); + } + + public boolean useLeases() { + return useLeases; + } + + public boolean useResMoneyBack() { + return ResMoneyBack; + } + + public boolean allowAdminsOnly() { + return adminsOnly; + } + + public boolean allowEmptyResidences() { + return allowEmptyResidences; + } + + public boolean isNoLava() { + return NoLava; + } + + public boolean isNoWater() { + return NoWater; + } + + public boolean isNoLavaPlace() { + return NoLavaPlace; + } + + public boolean isBlockFall() { + return useBlockFall; + } + + public boolean isNoWaterPlace() { + return NoWaterPlace; + } + + public List getLwcMatList() { + return LwcMatList; + } + + public boolean isRemoveLwcOnUnrent() { + return LwcOnUnrent; + } + + public boolean isRemoveLwcOnBuy() { + return LwcOnBuy; + } + + public boolean isRemoveLwcOnDelete() { + return LwcOnDelete; + } + + public boolean isUseResidenceFileClean() { + return AutoCleanUp; + } + + public int getResidenceFileCleanDays() { + return AutoCleanUpDays; + } + + public boolean isUseClean() { + return UseClean; + } + + public boolean isPvPFlagPrevent() { + return PvPFlagPrevent; + } + + public boolean isOverridePvp() { + return OverridePvp; + } + + public boolean isBlockAnyTeleportation() { + return BlockAnyTeleportation; + } + + public int getInfoToolID() { + return infoToolId; + } + + public int getSelectionTooldID() { + return selectionToolId; + } + + public boolean getOpsAreAdmins() { + return adminOps; + } + + public boolean getAdminFullAccess() { + return AdminFullAccess; + } + + public String getMultiworldPlugin() { + return multiworldPlugin; + } + + public boolean autoRenewLeases() { + return leaseAutoRenew; + } + + public boolean isShortInfoUse() { + return ShortInfoUse; + } + + public boolean isOnlyLike() { + return OnlyLike; + } + + public int getRentCheckInterval() { + return rentCheckInterval; + } + + public int getChatPrefixLength() { + return chatPrefixLength; + } + + public int getLeaseCheckInterval() { + return leaseCheckInterval; + } + + public int getAutoSaveInterval() { + return autoSaveInt; + } + + // backup stuff + public boolean BackupAutoCleanUpUse() { + return BackupAutoCleanUpUse; + } + + public int BackupAutoCleanUpDays() { + return BackupAutoCleanUpDays; + } + + public boolean UseZipBackup() { + return UseZipBackup; + } + + public boolean BackupWorldFiles() { + return BackupWorldFiles; + } + + public boolean BackupforsaleFile() { + return BackupforsaleFile; + } + + public boolean BackupleasesFile() { + return BackupleasesFile; + } + + public boolean BackuppermlistsFile() { + return BackuppermlistsFile; + } + + public boolean BackuprentFile() { + return BackuprentFile; + } + + public boolean BackupflagsFile() { + return BackupflagsFile; + } + + public boolean BackupgroupsFile() { + return BackupgroupsFile; + } + + public boolean BackupconfigFile() { + return BackupconfigFile; + } + // backup stuff + + public int getFlowLevel() { + return FlowLevel; + } + + public int getPlaceLevel() { + return PlaceLevel; + } + + public int getBlockFallLevel() { + return BlockFallLevel; + } + + public int getCleanLevel() { + return CleanLevel; + } + + public boolean flagsInherit() { + return flagsInherit; + } + + public boolean chatEnabled() { + return chatEnable; + } + + public boolean useActionBar() { + return actionBar; + } + + public boolean useActionBarOnSelection() { + return ActionBarOnSelection; + } + + public ChatColor getChatColor() { + return chatColor; + } + + public int getMinMoveUpdateInterval() { + return minMoveUpdate; + } + + public int getMaxResCount() { + return MaxResCount; + } + + public int getMaxRentCount() { + return MaxRentCount; + } + + public int getMaxSubzonesCount() { + return MaxSubzonesCount; + } + + public int getMaxSubzoneDepthCount() { + return MaxSubzoneDepthCount; + } + + public int getVoteRangeFrom() { + return VoteRangeFrom; + } + + public int getHealInterval() { + return HealInterval; + } + + public int getFeedInterval() { + return FeedInterval; + } + + public int getVoteRangeTo() { + return VoteRangeTo; + } + + public FlagPermissions getGlobalCreatorDefaultFlags() { + return globalCreatorDefaults; + } + + public FlagPermissions getGlobalResidenceDefaultFlags() { + return globalResidenceDefaults; + } + + public Map getGlobalGroupDefaultFlags() { + return globalGroupDefaults; + } + + public String getLanguage() { + return language; + } + + public String getDefaultWorld() { + return DefaultWorld; + } + + public String getDateFormat() { + return DateFormat; + } + + public String getTimeZone() { + return TimeZone; + } + + public boolean preventRentModify() { + return preventBuildInRent; + } + + public boolean isPreventSubZoneRemoval() { + return PreventSubZoneRemoval; + } + + public boolean stopOnSaveError() { + return stopOnSaveError; + } + + public boolean showIntervalMessages() { + return showIntervalMessages; + } + + public boolean ShowNoobMessage() { + return ShowNoobMessage; + } + + public boolean isNewPlayerUse() { + return NewPlayerUse; + } + + public boolean isNewPlayerFree() { + return NewPlayerFree; + } + + public boolean enableSpout() { + return spoutEnable; + } + + public boolean AutoMobRemoval() { + return AutoMobRemoval; + } + + public int AutoMobRemovalInterval() { + return AutoMobRemovalInterval; + } + + public boolean enableLeaseMoneyAccount() { + return enableLeaseMoneyAccount; + } + + public boolean CouldronCompatability() { + return CouldronCompatability; + } + + public boolean debugEnabled() { + return enableDebug; + } + + public boolean isSelectionIgnoreY() { + return SelectionIgnoreY; + } + + public boolean isNoCostForYBlocks() { + return NoCostForYBlocks; + } + + public boolean versionCheck() { + return versionCheck; + } + + public boolean isUUIDConvertion() { + return UUIDConvertion; + } + + public boolean isOfflineMode() { + return OfflineMode; + } + + public List getCustomContainers() { + return customContainers; + } + + public List getCustomBothClick() { + return customBothClick; + } + + public List getCustomRightClick() { + return customRightClick; + } + + public List getCleanBlocks() { + return CleanBlocks; + } + + public List getNoFlowWorlds() { + return NoFlowWorlds; + } + + public List getAutoCleanUpWorlds() { + return AutoCleanUpWorlds; + } + + public List getNoPlaceWorlds() { + return NoPlaceWorlds; + } + + public List getBlockFallWorlds() { + return BlockFallWorlds; + } + + public List getNegativePotionEffects() { + return NegativePotionEffects; + } + + public List getNegativeLingeringPotionEffects() { + return NegativeLingeringPotionEffects; + } + + public List getCleanWorlds() { + return CleanWorlds; + } + + public List getProtectedFlagsList() { + return FlagsList; + } + + public boolean getEnforceAreaInsideArea() { + return enforceAreaInsideArea; + } + + public ItemStack getGuiTrue() { + return GuiTrue; + } + + public ItemStack getGuiFalse() { + return GuiFalse; + } + + public ItemStack getGuiRemove() { + return GuiRemove; + } + + public List getRandomTeleport() { + return RTeleport; + } + + public int getrtCooldown() { + return rtCooldown; + } + + public Location getKickLocation() { + return KickLocation; + } + + public Location getFlyLandLocation() { + return FlyLandLocation; + } + + public int getrtMaxTries() { + return rtMaxTries; + } + + public boolean useFlagGUI() { + return useFlagGUI; + } + + public boolean BounceAnimation() { + return BounceAnimation; + } + + public int getVisualizerFrameCap() { + return VisualizerFrameCap; + } + + public int getVisualizerSidesCap() { + return VisualizerSidesCap; + } + + public Double getWalkSpeed1() { + return WalkSpeed1; + } + + public Double getWalkSpeed2() { + return WalkSpeed2; + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 837ace966..c7c2c5f15 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -48,6 +48,13 @@ public boolean isOnline() { return false; } + public ResidencePlayer(String userName, UUID uuid) { + this.userName = userName; + this.uuid = uuid; + if (this.isOnline()) + RecalculatePermissions(); + } + public ResidencePlayer(String userName) { this.userName = userName; if (this.isOnline()) diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 85c950556..ab43ff167 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -68,6 +68,15 @@ public ResidencePlayer playerJoin(String player) { } return null; } + + public ResidencePlayer playerJoin(String player, UUID uuid) { + if (!players.containsKey(player.toLowerCase())) { + ResidencePlayer resPlayer = new ResidencePlayer(player, uuid); + addPlayer(resPlayer); + return resPlayer; + } + return null; + } @Override public ArrayList getResidenceList(UUID uuid) { @@ -261,7 +270,7 @@ public ResidencePlayer getResidencePlayer(String name, UUID uuid) { if (playersUuid.containsKey(uuid)) { resPlayer = playersUuid.get(uuid); } else { - resPlayer = playerJoin(name); + resPlayer = playerJoin(name, uuid); } return resPlayer; } @@ -277,7 +286,7 @@ public void renameResidence(String player, String oldName, String newName) { public void addResidence(String player, ClaimedResidence residence) { ResidencePlayer resPlayer = getResidencePlayer(player, residence.getOwnerUUID()); if (resPlayer != null) { - Debug.D("add res to player " + resPlayer.getPlayerName()); + Debug.D("add res to player " + resPlayer.getPlayerName() ); resPlayer.addResidence(residence); } return; From 21c92443d6e00b3c9ff93d7e5525d719620865d3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 Feb 2017 17:31:56 +0200 Subject: [PATCH 0343/1142] Support Kingdoms plugin to prevent overlaps (NOTE can be extensive on server side if check are done on HUGE area when using resadmin command) --- .../bekvon/bukkit/residence/Residence.java | 29 +- .../bukkit/residence/commands/create.java | 21 - .../bukkit/residence/containers/lm.java | 1 + .../listeners/ResidencePlayerListener.java | 8 - .../protection/ClaimedResidence.java | 17 + .../residence/protection/PlayerManager.java | 13 +- .../protection/ResidenceManager.java | 1 - .../residence/selection/KingdomsUtil.java | 73 + .../residence/selection/SelectionManager.java | 1770 +++++++++-------- .../residence/selection/WorldGuardUtil.java | 34 +- .../bukkit/residence/text/help/HelpEntry.java | 1 - src/plugin.yml | 2 +- 12 files changed, 1040 insertions(+), 930 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 5764e9f0e..bb6f0b480 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -37,6 +37,8 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.dynmap.DynmapAPI; +import org.kingdoms.main.Kingdoms; +import org.kingdoms.manager.game.GameManagement; import com.bekvon.bukkit.residence.chat.ChatManager; import com.bekvon.bukkit.residence.containers.ABInterface; @@ -139,6 +141,7 @@ public class Residence extends JavaPlugin { protected SchematicsManager SchematicManager; private InformationPager InformationPagerManager; private WorldGuardUtil worldGuardUtil; + private KingdomsUtil kingdomsUtil; protected CommandFiller cmdFiller; @@ -579,7 +582,7 @@ public void onEnable() { continue; String name = player.getName(); if (name == null) - continue; + continue; this.addOfflinePlayerToChache(player); } Bukkit.getConsoleSender().sendMessage(getPrefix() + " Player data loaded: " + OfflinePlayerList.size()); @@ -629,6 +632,8 @@ public void run() { setWorldEdit(); setWorldGuard(); + + setKingdoms(); blistener = new ResidenceBlockListener(this); plistener = new ResidencePlayerListener(this); @@ -780,6 +785,22 @@ private void setWorldEdit() { } } + private GameManagement kingdomsmanager = null; + + private void setKingdoms() { + if (Bukkit.getPluginManager().getPlugin("Kingdoms") != null) { + try { + kingdomsmanager = Kingdoms.getManagers(); + } catch (NoClassDefFoundError | Exception e) { + + } + } + } + + public GameManagement getKingdomsManager(){ + return kingdomsmanager; + } + private void setWorldGuard() { Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); if (wgplugin != null) { @@ -1673,6 +1694,12 @@ public WorldGuardUtil getWorldGuardUtil() { worldGuardUtil = new WorldGuardUtil(this); return worldGuardUtil; } + + public KingdomsUtil getKingdomsUtil() { + if (kingdomsUtil == null) + kingdomsUtil = new KingdomsUtil(this); + return kingdomsUtil; + } public boolean hasPermission(CommandSender sender, String permision, boolean output) { return hasPermission(sender, permision, output, null); diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index de95f5223..f468446f2 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -35,28 +35,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } } if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { - if (plugin.getWorldGuard() != null) { - if (plugin.getWorldGuardUtil().isSelectionInRegion(player) == null) { - plugin.getResidenceManager().addResidence(player, args[1], plugin.getSelectionManager().getPlayerLoc1(player.getName()), plugin - .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); - return true; - } - ProtectedRegion Region = plugin.getWorldGuardUtil().isSelectionInRegion(player); - plugin.msg(player, lm.Select_WorldGuardOverlap, Region.getId()); - Location lowLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), - Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); - - Location highLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), - Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); - - Visualizer v = new Visualizer(player); - v.setAreas(plugin.getSelectionManager().getSelectionCuboid(player)); - v.setErrorAreas(new CuboidArea(lowLoc, highLoc)); - - plugin.getSelectionManager().showBounds(player, v); - return true; - } plugin.getResidenceManager().addResidence(player, args[1], plugin.getSelectionManager().getPlayerLoc1(player.getName()), plugin .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); return true; diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 81a8e4dc5..21927cefb 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -52,6 +52,7 @@ public enum lm { Select_Points("&eSelect two points first before using this command!"), Select_Overlap("&cSelected points overlap with &6%1 &cregion!"), Select_WorldGuardOverlap("&cSelected points overlap with &6%1 &cWorldGuard region!"), + Select_KingdomsOverlap("&cSelected points overlap with &6%1 &cKingdoms land!"), Select_Success("&eSelection Successful!"), Select_Fail("&cInvalid select command..."), Select_Bedrock("&eSelection expanded to your lowest allowed limit."), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index abffbe4e3..d7b682ce0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1023,10 +1023,6 @@ public void onPlayerInteract(PlayerInteractEvent event) { Material mat = block.getType(); - Debug.D("container interact2 " + isContainer(mat, block)); - Debug.D("container interact22 " + (heldItemId != plugin.getConfigManager().getSelectionTooldID()) + " " + (heldItemId != plugin.getConfigManager().getInfoToolID()) + " " - + (heldItem != Material.INK_SACK) + " " + (!plugin.getNms().isArmorStandMaterial(heldItem)) + " " + (!plugin.getNms().isBoat(heldItem))); - if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || plugin.getNms().isCanUseEntity_BothClick(mat, block))) { if (heldItemId != plugin.getConfigManager().getSelectionTooldID() && heldItemId != plugin.getConfigManager().getInfoToolID() @@ -1035,7 +1031,6 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } - Debug.D("container interact3"); if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; @@ -1051,7 +1046,6 @@ public void onPlayerInteract(PlayerInteractEvent event) { return; } - Debug.D("container interact4"); if (resadmin) return; @@ -1079,10 +1073,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } - Debug.D("container interact5"); if (isContainer(mat, block) || isCanUseEntity(mat, block)) { boolean hasuse = perms.playerHas(player, Flags.use, true); - Debug.D("container interact6"); for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { if (mat != checkMat.getKey()) continue; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index af7459d32..0b72d568b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -418,6 +418,15 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); return false; } + + if (!resadmin) { + if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) + return true; + + if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) + return true; + } + if (chargeMoney && parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { int chargeamount = (int) Math.ceil(area.getSize() * group.getCostPerBlock()); if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { @@ -547,6 +556,14 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); return false; } + + if (!resadmin) { + if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) + return true; + if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) + return true; + } + if (parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); if (chargeamount > 0) { diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index ab43ff167..1dd833760 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -98,7 +98,7 @@ public ArrayList getResidenceList(String name) { if (player != null) return getResidenceList(player.getUniqueId()); ArrayList temp = new ArrayList(); - ResidencePlayer resPlayer = players.get(name.toLowerCase()); + ResidencePlayer resPlayer = this.getResidencePlayer(name.toLowerCase()); if (resPlayer != null) { for (ClaimedResidence one : resPlayer.getResList()) { temp.add(one.getName()); @@ -116,7 +116,7 @@ public ArrayList getResidenceList(String player, boolean showhidden) { public ArrayList getResidenceList(String player, boolean showhidden, boolean onlyHidden) { ArrayList temp = new ArrayList(); // playerJoin(player, false); - ResidencePlayer resPlayer = players.get(player.toLowerCase()); + ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); if (resPlayer == null) return temp; for (ClaimedResidence one : resPlayer.getResList()) { @@ -144,7 +144,7 @@ public ArrayList getResidences(String player, boolean showhidd public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden, World world) { ArrayList temp = new ArrayList(); - ResidencePlayer resPlayer = players.get(player.toLowerCase()); + ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); if (resPlayer == null) return temp; for (ClaimedResidence one : resPlayer.getResList()) { @@ -163,10 +163,8 @@ public ArrayList getResidences(String player, boolean showhidd public TreeMap getResidencesMap(String player, boolean showhidden, boolean onlyHidden, World world) { TreeMap temp = new TreeMap(); - ResidencePlayer resPlayer = players.get(player.toLowerCase()); + ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); if (resPlayer == null) { - - Debug.D("no red player " + players.size()); return temp; } @@ -286,7 +284,6 @@ public void renameResidence(String player, String oldName, String newName) { public void addResidence(String player, ClaimedResidence residence) { ResidencePlayer resPlayer = getResidencePlayer(player, residence.getOwnerUUID()); if (resPlayer != null) { - Debug.D("add res to player " + resPlayer.getPlayerName() ); resPlayer.addResidence(residence); } return; @@ -308,7 +305,7 @@ public void removeResFromPlayer(Player player, String residence) { } public void removeResFromPlayer(String player, String residence) { - ResidencePlayer resPlayer = players.get(player.toLowerCase()); + ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); if (resPlayer != null) { resPlayer.removeResidence(residence); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 6249c1967..e06d5925c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -876,7 +876,6 @@ public Map> loadMap(String worldName, Map playerLoc1; - protected Map playerLoc2; - protected Server server; - protected Residence plugin; - - private HashMap vMap = new HashMap(); - - public static final int MIN_HEIGHT = 0; - - Permission p = new Permission("residence.bypass.ignorey", PermissionDefault.FALSE); - - public enum Direction { - UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ - } - - public SelectionManager(Server server, Residence plugin) { - this.plugin = plugin; - this.server = server; - playerLoc1 = Collections.synchronizedMap(new HashMap()); - playerLoc2 = Collections.synchronizedMap(new HashMap()); - } - - public void updateLocations(Player player, Location loc1, Location loc2) { - updateLocations(player, loc1, loc2, false); - } - - public void updateLocations(Player player, Location loc1, Location loc2, boolean force) { - if (loc1 != null && loc2 != null) { - playerLoc1.put(player.getName(), loc1); - playerLoc2.put(player.getName(), loc2); - updateForY(player); - this.afterSelectionUpdate(player, force); - } - } - - public void placeLoc1(Player player, Location loc) { - placeLoc1(player, loc, false); - } - - public void placeLoc1(Player player, Location loc, boolean show) { - if (loc != null) { - playerLoc1.put(player.getName(), loc); - updateForY(player); - if (show) { - this.afterSelectionUpdate(player); - } - } - } - - public void placeLoc2(Player player, Location loc) { - placeLoc2(player, loc, false); - } - - public void placeLoc2(Player player, Location loc, boolean show) { - if (loc != null) { - playerLoc2.put(player.getName(), loc); - updateForY(player); - if (show) { - this.afterSelectionUpdate(player); - } - } - } - - private void updateForY(Player player) { - if (plugin.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName()) && !player.hasPermission(p)) { - this.qsky(player); - this.qbedrock(player); - } - } - - public void afterSelectionUpdate(Player player) { - afterSelectionUpdate(player, false); - } - - public void afterSelectionUpdate(Player player, boolean force) { - if (hasPlacedBoth(player.getName())) { - Visualizer v = vMap.get(player.getName()); - if (v == null) { - v = new Visualizer(player); - } - v.setStart(System.currentTimeMillis()); - v.cancelAll(); - if (force) - v.setLoc(null); - v.setAreas(this.getSelectionCuboid(player)); - this.showBounds(player, v); - } - } - - public Location getPlayerLoc1(Player player) { - return getPlayerLoc1(player.getName()); - } - - public Location getPlayerLoc1(String player) { - return playerLoc1.get(player); - } - - public Location getPlayerLoc2(Player player) { - return getPlayerLoc2(player.getName()); - } - - public Location getPlayerLoc2(String player) { - return playerLoc2.get(player); - } - - public CuboidArea getSelectionCuboid(Player player) { - return getSelectionCuboid(player.getName()); - } - - public CuboidArea getSelectionCuboid(String player) { - return new CuboidArea(getPlayerLoc1(player), getPlayerLoc2(player)); - } - - public boolean hasPlacedBoth(Player player) { - return hasPlacedBoth(player.getName()); - } - - public boolean hasPlacedBoth(String player) { - return playerLoc1.containsKey(player) && playerLoc2.containsKey(player); - } - - public void showSelectionInfoInActionBar(Player player) { - - if (!plugin.getConfigManager().useActionBarOnSelection()) - return; - - String pname = player.getName(); - CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); - - String Message = plugin.msg(lm.Select_TotalSize, cuboidArea.getSize()); - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (plugin.getConfigManager().enableEconomy()) - Message += " " + plugin.msg(lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); - - plugin.getAB().send(player, Message); - - } - - public void showSelectionInfo(Player player) { - String pname = player.getName(); - if (hasPlacedBoth(pname)) { - plugin.msg(player, lm.General_Separator); - CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); - plugin.msg(player, lm.Select_TotalSize, cuboidArea.getSize()); - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - - if (plugin.getConfigManager().enableEconomy()) - plugin.msg(player, lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); - player.sendMessage(ChatColor.YELLOW + "X" + plugin.msg(lm.General_Size, cuboidArea.getXSize())); - player.sendMessage(ChatColor.YELLOW + "Y" + plugin.msg(lm.General_Size, cuboidArea.getYSize())); - player.sendMessage(ChatColor.YELLOW + "Z" + plugin.msg(lm.General_Size, cuboidArea.getZSize())); - plugin.msg(player, lm.General_Separator); - Visualizer v = new Visualizer(player); - v.setAreas(this.getSelectionCuboid(player)); - this.showBounds(player, v); - } else - plugin.msg(player, lm.Select_Points); - } - - public void showBounds(final Player player, final Visualizer v) { - if (!plugin.getConfigManager().useVisualizer()) - return; - Visualizer tv = vMap.get(player.getName()); - if (tv != null) { - tv.cancelAll(); - } - vMap.put(player.getName(), v); - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - if (!v.getAreas().isEmpty()) - MakeBorders(player, false); - if (!v.getErrorAreas().isEmpty()) - MakeBorders(player, true); - return; - } - }); - } - - public List getLocations(Location lowLoc, Location loc, Double TX, Double TY, Double TZ, Double Range, boolean StartFromZero) { - - double eachCollumn = plugin.getConfigManager().getVisualizerRowSpacing(); - double eachRow = plugin.getConfigManager().getVisualizerCollumnSpacing(); - - if (TX == 0D) - TX = eachCollumn + eachCollumn * 0.1; - if (TY == 0D) - TY = eachRow + eachRow * 0.1; - if (TZ == 0D) - TZ = eachCollumn + eachCollumn * 0.1; - - double CollumnStart = eachCollumn; - double RowStart = eachRow; - - if (StartFromZero) { - CollumnStart = 0; - RowStart = 0; - } - - List locList = new ArrayList(); - - if (lowLoc.getWorld() != loc.getWorld()) - return locList; - - for (double x = CollumnStart; x < TX; x += eachCollumn) { - Location CurrentX = lowLoc.clone(); - if (TX > eachCollumn + eachCollumn * 0.1) - CurrentX.add(x, 0, 0); - for (double y = RowStart; y < TY; y += eachRow) { - Location CurrentY = CurrentX.clone(); - if (TY > eachRow + eachRow * 0.1) - CurrentY.add(0, y, 0); - for (double z = CollumnStart; z < TZ; z += eachCollumn) { - Location CurrentZ = CurrentY.clone(); - if (TZ > eachCollumn + eachCollumn * 0.1) - CurrentZ.add(0, 0, z); - double dist = loc.distance(CurrentZ); - if (dist < Range) - locList.add(CurrentZ.clone()); - } - } - } - - return locList; - } - - public List GetLocationsWallsByData(Location loc, Double TX, Double TY, Double TZ, Location lowLoc, SelectionSides Sides, - double Range) { - List locList = new ArrayList(); - - // North wall - if (Sides.ShowNorthSide()) - locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, TY, 0D, Range, false)); - - // South wall - if (Sides.ShowSouthSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), TX, TY, 0D, Range, false)); - - // West wall - if (Sides.ShowWestSide()) - locList.addAll(getLocations(lowLoc.clone(), loc.clone(), 0D, TY, TZ, Range, false)); - - // East wall - if (Sides.ShowEastSide()) - locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, TY, TZ, Range, false)); - - // Roof wall - if (Sides.ShowTopSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), TX, 0D, TZ, Range, false)); - - // Ground wall - if (Sides.ShowBottomSide()) - locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, 0D, TZ, Range, false)); - - return locList; - } - - public List GetLocationsCornersByData(Location loc, Double TX, Double TY, Double TZ, Location lowLoc, SelectionSides Sides, - double Range) { - List locList = new ArrayList(); - - // North bottom line - if (Sides.ShowBottomSide() && Sides.ShowNorthSide()) - locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, 0D, 0D, Range, true)); - - // North top line - if (Sides.ShowTopSide() && Sides.ShowNorthSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), TX, 0D, 0D, Range, true)); - - // South bottom line - if (Sides.ShowBottomSide() && Sides.ShowSouthSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), TX, 0D, 0D, Range, true)); - - // South top line - if (Sides.ShowTopSide() && Sides.ShowSouthSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, TY, TZ), loc.clone(), TX, 0D, 0D, Range, true)); - - // North - West corner - if (Sides.ShowWestSide() && Sides.ShowNorthSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, 0, 0), loc.clone(), 0D, TY, 0D, Range, true)); - - // North - East corner - if (Sides.ShowEastSide() && Sides.ShowNorthSide()) - locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, TY, 0D, Range, true)); - - // South - West corner - if (Sides.ShowSouthSide() && Sides.ShowWestSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), 0D, TY, 0D, Range, true)); - - // South - East corner - if (Sides.ShowSouthSide() && Sides.ShowEastSide()) - locList.addAll(getLocations(lowLoc.clone().add(TX, 0, TZ), loc.clone(), 0D, TY + 1, 0D, Range, true)); - - // West bottom corner - if (Sides.ShowWestSide() && Sides.ShowBottomSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, 0, 0), loc.clone(), 0D, 0D, TZ, Range, true)); - - // East bottom corner - if (Sides.ShowEastSide() && Sides.ShowBottomSide()) - locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, 0D, TZ, Range, true)); - - // West top corner - if (Sides.ShowWestSide() && Sides.ShowTopSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), 0D, 0D, TZ, Range, true)); - - // East top corner - if (Sides.ShowEastSide() && Sides.ShowTopSide()) - locList.addAll(getLocations(lowLoc.clone().add(TX, TY, 0), loc.clone(), 0D, 0D, TZ, Range, true)); - - return locList; - } - - public boolean MakeBorders(final Player player, final boolean error) { - - final Visualizer v = vMap.get(player.getName()); - - if (v == null) - return false; - - List areas = null; - - if (!error) - areas = v.getAreas(); - else - areas = v.getErrorAreas(); - - Location loc = player.getLocation(); - int Range = plugin.getConfigManager().getVisualizerRange(); - - final List locList = new ArrayList(); - final List locList2 = new ArrayList(); - - final boolean same = v.isSameLoc(); - if (!same) { - for (CuboidArea area : areas) { - if (area == null) - continue; - CuboidArea cuboidArea = new CuboidArea(area.getLowLoc(), area.getHighLoc()); - cuboidArea.getHighLoc().add(1, 1, 1); - - SelectionSides Sides = new SelectionSides(); - - double PLLX = loc.getBlockX() - Range; - double PLLZ = loc.getBlockZ() - Range; - double PLLY = loc.getBlockY() - Range; - double PLHX = loc.getBlockX() + Range; - double PLHZ = loc.getBlockZ() + Range; - double PLHY = loc.getBlockY() + Range; - - if (cuboidArea.getLowLoc().getBlockX() < PLLX) { - cuboidArea.getLowLoc().setX(PLLX); - Sides.setWestSide(false); - } - - if (cuboidArea.getHighLoc().getBlockX() > PLHX) { - cuboidArea.getHighLoc().setX(PLHX); - Sides.setEastSide(false); - } - - if (cuboidArea.getLowLoc().getBlockZ() < PLLZ) { - cuboidArea.getLowLoc().setZ(PLLZ); - Sides.setNorthSide(false); - } - - if (cuboidArea.getHighLoc().getBlockZ() > PLHZ) { - cuboidArea.getHighLoc().setZ(PLHZ); - Sides.setSouthSide(false); - } - - if (cuboidArea.getLowLoc().getBlockY() < PLLY) { - cuboidArea.getLowLoc().setY(PLLY); - Sides.setBottomSide(false); - } - - if (cuboidArea.getHighLoc().getBlockY() > PLHY) { - cuboidArea.getHighLoc().setY(PLHY); - Sides.setTopSide(false); - } - - double TX = cuboidArea.getXSize() - 1; - double TY = cuboidArea.getYSize() - 1; - double TZ = cuboidArea.getZSize() - 1; - - if (!error && v.getId() != -1) { - Bukkit.getScheduler().cancelTask(v.getId()); - } else if (error && v.getErrorId() != -1) { - Bukkit.getScheduler().cancelTask(v.getErrorId()); - } - - locList.addAll(GetLocationsWallsByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range)); - locList2.addAll(GetLocationsCornersByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range)); - } - v.setLoc(player.getLocation()); - } else { - if (error) { - locList.addAll(v.getErrorLocations()); - locList2.addAll(v.getErrorLocations2()); - } else { - locList.addAll(v.getLocations()); - locList2.addAll(v.getLocations2()); - } - } - - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - - int size = locList.size(); - int errorSize = locList2.size(); - - int timesMore = 1; - int errorTimesMore = 1; - - if (size > plugin.getConfigManager().getVisualizerSidesCap() && !same) { - timesMore = size / plugin.getConfigManager().getVisualizerSidesCap() + 1; - } - if (errorSize > plugin.getConfigManager().getVisualizerFrameCap() && !same) { - errorTimesMore = errorSize / plugin.getConfigManager().getVisualizerFrameCap() + 1; - } - - List trimed = new ArrayList(); - List trimed2 = new ArrayList(); - - try { - boolean spigot = plugin.isSpigot(); - - if (spigot) { - if (!error) - for (int i = 0; i < locList.size(); i += timesMore) { - Location l = locList.get(i); - player.spigot().playEffect(l, plugin.getConfigManager().getSelectedSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); - if (!same) - trimed.add(l); - } - else - for (int i = 0; i < locList.size(); i += timesMore) { - Location l = locList.get(i); - player.spigot().playEffect(l, plugin.getConfigManager().getOverlapSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); - if (!same) - trimed.add(l); - } - - if (!error) - for (int i = 0; i < locList2.size(); i += errorTimesMore) { - Location l = locList2.get(i); - player.spigot().playEffect(l, plugin.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); - if (!same) - trimed2.add(l); - } - else - for (int i = 0; i < locList2.size(); i += errorTimesMore) { - Location l = locList2.get(i); - player.spigot().playEffect(l, plugin.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); - if (!same) - trimed2.add(l); - } - } else { - if (!error) - for (int i = 0; i < locList.size(); i += timesMore) { - Location l = locList.get(i); - plugin.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, l, player); - if (!same) - trimed.add(l); - } - else - for (int i = 0; i < locList.size(); i += timesMore) { - Location l = locList.get(i); - plugin.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, l, player); - if (!same) - trimed.add(l); - } - if (!error) - for (int i = 0; i < locList2.size(); i += errorTimesMore) { - Location l = locList2.get(i); - plugin.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); - if (!same) - trimed2.add(l); - } - else - for (int i = 0; i < locList2.size(); i += errorTimesMore) { - Location l = locList2.get(i); - plugin.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); - if (!same) - trimed2.add(l); - } - } - } catch (Exception e) { - return; - } - - if (!same) { - if (error) { - v.setErrorLocations(trimed); - v.setErrorLocations2(trimed2); - } else { - v.setLocations(trimed); - v.setLocations2(trimed2); - } - } - - return; - } - }); - - if (v.isOnce()) - return true; - - if (v.getStart() + plugin.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) - return false; - - int scid = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (player.isOnline()) { - MakeBorders(player, error); - } - return; - } - }, plugin.getConfigManager().getVisualizerUpdateInterval() * 1L); - if (!error) - v.setId(scid); - else - v.setErrorId(scid); - - return true; - } - - public void vert(Player player, boolean resadmin) { - if (hasPlacedBoth(player.getName())) { - this.sky(player, resadmin); - this.bedrock(player, resadmin); - } else { - plugin.msg(player, lm.Select_Points); - } - } - - public void qsky(Player player) { - int y1 = playerLoc1.get(player.getName()).getBlockY(); - int y2 = playerLoc2.get(player.getName()).getBlockY(); - int newy = player.getLocation().getWorld().getMaxHeight() - 1; - if (y1 > y2) - playerLoc1.get(player.getName()).setY(newy); - else - playerLoc2.get(player.getName()).setY(newy); - } - - public void qbedrock(Player player) { - int y1 = playerLoc1.get(player.getName()).getBlockY(); - int y2 = playerLoc2.get(player.getName()).getBlockY(); - if (y1 < y2) { - int newy = MIN_HEIGHT; - playerLoc1.get(player.getName()).setY(newy); - } else { - int newy = MIN_HEIGHT; - playerLoc2.get(player.getName()).setY(newy); - } - } - - public void sky(Player player, boolean resadmin) { - if (hasPlacedBoth(player.getName())) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - int y1 = playerLoc1.get(player.getName()).getBlockY(); - int y2 = playerLoc2.get(player.getName()).getBlockY(); - int newy = player.getLocation().getWorld().getMaxHeight() - 1; - if (y1 > y2) { - if (!resadmin) { - if (group.getMaxHeight() < newy) - newy = group.getMaxHeight(); - if (newy - y2 > (group.getMaxY() - 1)) - newy = y2 + (group.getMaxY() - 1); - } - playerLoc1.get(player.getName()).setY(newy); - } else { - if (!resadmin) { - if (group.getMaxHeight() < newy) - newy = group.getMaxHeight(); - if (newy - y1 > (group.getMaxY() - 1)) - newy = y1 + (group.getMaxY() - 1); - } - playerLoc2.get(player.getName()).setY(newy); - } - plugin.msg(player, lm.Select_Sky); - } else { - plugin.msg(player, lm.Select_Points); - } - } - - public void bedrock(Player player, boolean resadmin) { - if (hasPlacedBoth(player.getName())) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - int y1 = playerLoc1.get(player.getName()).getBlockY(); - int y2 = playerLoc2.get(player.getName()).getBlockY(); - if (y1 < y2) { - int newy = MIN_HEIGHT; - if (!resadmin) { - if (newy < group.getMinHeight()) - newy = group.getMinHeight(); - if (y2 - newy > (group.getMaxY() - 1)) - newy = y2 - (group.getMaxY() - 1); - } - playerLoc1.get(player.getName()).setY(newy); - } else { - int newy = MIN_HEIGHT; - if (!resadmin) { - if (newy < group.getMinHeight()) - newy = group.getMinHeight(); - if (y1 - newy > (group.getMaxY() - 1)) - newy = y1 - (group.getMaxY() - 1); - } - playerLoc2.get(player.getName()).setY(newy); - } - plugin.msg(player, lm.Select_Bedrock); - } else { - plugin.msg(player, lm.Select_Points); - } - } - - public void clearSelection(Player player) { - playerLoc1.remove(player.getName()); - playerLoc2.remove(player.getName()); - } - - public void selectChunk(Player player) { - Chunk chunk = player.getWorld().getChunkAt(player.getLocation()); - int xcoord = chunk.getX() * 16; - int zcoord = chunk.getZ() * 16; - int ycoord = MIN_HEIGHT; - int xmax = xcoord + 15; - int zmax = zcoord + 15; - int ymax = player.getLocation().getWorld().getMaxHeight() - 1; - playerLoc1.put(player.getName(), new Location(player.getWorld(), xcoord, ycoord, zcoord)); - playerLoc2.put(player.getName(), new Location(player.getWorld(), xmax, ymax, zmax)); - plugin.msg(player, lm.Select_Success); - } - - public boolean worldEdit(Player player) { - plugin.msg(player, lm.General_WorldEditNotFound); - return false; - } - - public boolean worldEditUpdate(Player player) { - plugin.msg(player, lm.General_WorldEditNotFound); - return false; - } - - public void selectBySize(Player player, int xsize, int ysize, int zsize) { - Location myloc = player.getLocation(); - Location loc1 = new Location(myloc.getWorld(), myloc.getBlockX() + xsize, myloc.getBlockY() + ysize, myloc.getBlockZ() + zsize); - Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize); - placeLoc1(player, loc1, false); - placeLoc2(player, loc2, true); - plugin.msg(player, lm.Select_Success); - showSelectionInfo(player); - } - - public void modify(Player player, boolean shift, double amount) { - if (!hasPlacedBoth(player.getName())) { - plugin.msg(player, lm.Select_Points); - return; - } - Direction d = getDirection(player); - if (d == null) { - plugin.msg(player, lm.Invalid_Direction); - return; - } - CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); - switch (d) { - case DOWN: - double oldy = area.getLowLoc().getBlockY(); - oldy = oldy - amount; - if (oldy < MIN_HEIGHT) { - plugin.msg(player, lm.Select_TooLow); - oldy = MIN_HEIGHT; - } - area.getLowLoc().setY(oldy); - if (shift) { - double oldy2 = area.getHighLoc().getBlockY(); - oldy2 = oldy2 - amount; - area.getHighLoc().setY(oldy2); - plugin.msg(player, lm.Shifting_Down, amount); - } else - plugin.msg(player, lm.Expanding_Down, amount); - break; - case MINUSX: - double oldx = area.getLowLoc().getBlockX(); - oldx = oldx - amount; - area.getLowLoc().setX(oldx); - if (shift) { - double oldx2 = area.getHighLoc().getBlockX(); - oldx2 = oldx2 - amount; - area.getHighLoc().setX(oldx2); - plugin.msg(player, lm.Shifting_West, amount); - } else - plugin.msg(player, lm.Expanding_West, amount); - break; - case MINUSZ: - double oldz = area.getLowLoc().getBlockZ(); - oldz = oldz - amount; - area.getLowLoc().setZ(oldz); - if (shift) { - double oldz2 = area.getHighLoc().getBlockZ(); - oldz2 = oldz2 - amount; - area.getHighLoc().setZ(oldz2); - plugin.msg(player, lm.Shifting_North, amount); - } else - plugin.msg(player, lm.Expanding_North, amount); - break; - case PLUSX: - oldx = area.getHighLoc().getBlockX(); - oldx = oldx + amount; - area.getHighLoc().setX(oldx); - if (shift) { - double oldx2 = area.getLowLoc().getBlockX(); - oldx2 = oldx2 + amount; - area.getLowLoc().setX(oldx2); - plugin.msg(player, lm.Shifting_East, amount); - } else - plugin.msg(player, lm.Expanding_East, amount); - break; - case PLUSZ: - oldz = area.getHighLoc().getBlockZ(); - oldz = oldz + amount; - area.getHighLoc().setZ(oldz); - if (shift) { - double oldz2 = area.getLowLoc().getBlockZ(); - oldz2 = oldz2 + amount; - area.getLowLoc().setZ(oldz2); - plugin.msg(player, lm.Shifting_South, amount); - } else - plugin.msg(player, lm.Expanding_South, amount); - break; - case UP: - oldy = area.getHighLoc().getBlockY(); - oldy = oldy + amount; - if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { - plugin.msg(player, lm.Select_TooHigh); - oldy = player.getLocation().getWorld().getMaxHeight() - 1; - } - area.getHighLoc().setY(oldy); - if (shift) { - double oldy2 = area.getLowLoc().getBlockY(); - oldy2 = oldy2 + amount; - area.getLowLoc().setY(oldy2); - plugin.msg(player, lm.Shifting_Up, amount); - } else - plugin.msg(player, lm.Expanding_Up, amount); - break; - default: - break; - } - updateLocations(player, area.getHighLoc(), area.getLowLoc(), true); - } - - public boolean contract(Player player, double amount) { - return contract(player, amount, false); - } - - public boolean contract(Player player, double amount, @SuppressWarnings("unused") boolean resadmin) { - if (!hasPlacedBoth(player.getName())) { - plugin.msg(player, lm.Select_Points); - return false; - } - Direction d = getDirection(player); - if (d == null) { - plugin.msg(player, lm.Invalid_Direction); - return false; - } - CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); - switch (d) { - case UP: - double oldy = area.getHighLoc().getBlockY(); - oldy = oldy - amount; - if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { - plugin.msg(player, lm.Select_TooHigh); - oldy = player.getLocation().getWorld().getMaxHeight() - 1; - } - area.getHighLoc().setY(oldy); - plugin.msg(player, lm.Contracting_Down, amount); - break; - case PLUSX: - double oldx = area.getHighLoc().getBlockX(); - oldx = oldx - amount; - area.getHighLoc().setX(oldx); - plugin.msg(player, lm.Contracting_West, amount); - break; - case PLUSZ: - double oldz = area.getHighLoc().getBlockZ(); - oldz = oldz - amount; - area.getHighLoc().setZ(oldz); - plugin.msg(player, lm.Contracting_North, amount); - break; - case MINUSX: - oldx = area.getLowLoc().getBlockX(); - oldx = oldx + amount; - area.getLowLoc().setX(oldx); - plugin.msg(player, lm.Contracting_East, amount); - break; - case MINUSZ: - oldz = area.getLowLoc().getBlockZ(); - oldz = oldz + amount; - area.getLowLoc().setZ(oldz); - plugin.msg(player, lm.Contracting_South, amount); - break; - case DOWN: - oldy = area.getLowLoc().getBlockY(); - oldy = oldy + amount; - if (oldy < MIN_HEIGHT) { - plugin.msg(player, lm.Select_TooLow); - oldy = MIN_HEIGHT; - } - area.getLowLoc().setY(oldy); - plugin.msg(player, lm.Contracting_Up, amount); - break; - default: - break; - } - -// if (!ClaimedResidence.isBiggerThanMinSubzone(player, area, resadmin)) -// return false; - - updateLocations(player, area.getHighLoc(), area.getLowLoc(), true); - return true; - } - - private static Direction getDirection(Player player) { - - int yaw = (int) player.getLocation().getYaw(); - - if (yaw < 0) - yaw += 360; - - yaw += 45; - yaw %= 360; - - int facing = yaw / 90; - - float pitch = player.getLocation().getPitch(); - if (pitch < -50) - return Direction.UP; - if (pitch > 50) - return Direction.DOWN; - if (facing == 1) // east - return Direction.MINUSX; - if (facing == 3) // west - return Direction.PLUSX; - if (facing == 2) // north - return Direction.MINUSZ; - if (facing == 0) // south - return Direction.PLUSZ; - return null; - } - -} +package com.bekvon.bukkit.residence.selection; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.SelectionSides; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.Server; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; + +public class SelectionManager { + protected Map playerLoc1; + protected Map playerLoc2; + protected Server server; + protected Residence plugin; + + private HashMap vMap = new HashMap(); + + public static final int MIN_HEIGHT = 0; + + Permission p = new Permission("residence.bypass.ignorey", PermissionDefault.FALSE); + + public enum Direction { + UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ + } + + public SelectionManager(Server server, Residence plugin) { + this.plugin = plugin; + this.server = server; + playerLoc1 = Collections.synchronizedMap(new HashMap()); + playerLoc2 = Collections.synchronizedMap(new HashMap()); + } + + public void updateLocations(Player player, Location loc1, Location loc2) { + updateLocations(player, loc1, loc2, false); + } + + public void updateLocations(Player player, Location loc1, Location loc2, boolean force) { + if (loc1 != null && loc2 != null) { + playerLoc1.put(player.getName(), loc1); + playerLoc2.put(player.getName(), loc2); + updateForY(player); + this.afterSelectionUpdate(player, force); + } + } + + public void placeLoc1(Player player, Location loc) { + placeLoc1(player, loc, false); + } + + public void placeLoc1(Player player, Location loc, boolean show) { + if (loc != null) { + playerLoc1.put(player.getName(), loc); + updateForY(player); + if (show) { + this.afterSelectionUpdate(player); + } + } + } + + public void placeLoc2(Player player, Location loc) { + placeLoc2(player, loc, false); + } + + public void placeLoc2(Player player, Location loc, boolean show) { + if (loc != null) { + playerLoc2.put(player.getName(), loc); + updateForY(player); + if (show) { + this.afterSelectionUpdate(player); + } + } + } + + private void updateForY(Player player) { + if (plugin.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName()) && !player.hasPermission(p)) { + this.qsky(player); + this.qbedrock(player); + } + } + + public void afterSelectionUpdate(Player player) { + afterSelectionUpdate(player, false); + } + + public void afterSelectionUpdate(Player player, boolean force) { + if (hasPlacedBoth(player.getName())) { + Visualizer v = vMap.get(player.getName()); + if (v == null) { + v = new Visualizer(player); + } + v.setStart(System.currentTimeMillis()); + v.cancelAll(); + if (force) + v.setLoc(null); + v.setAreas(this.getSelectionCuboid(player)); + this.showBounds(player, v); + } + } + + public Location getPlayerLoc1(Player player) { + return getPlayerLoc1(player.getName()); + } + + public Location getPlayerLoc1(String player) { + return playerLoc1.get(player); + } + + public Location getPlayerLoc2(Player player) { + return getPlayerLoc2(player.getName()); + } + + public Location getPlayerLoc2(String player) { + return playerLoc2.get(player); + } + + public CuboidArea getSelectionCuboid(Player player) { + return getSelectionCuboid(player.getName()); + } + + public CuboidArea getSelectionCuboid(String player) { + if (!hasPlacedBoth(player)) + return null; + return new CuboidArea(getPlayerLoc1(player), getPlayerLoc2(player)); + } + + public boolean hasPlacedBoth(Player player) { + return hasPlacedBoth(player.getName()); + } + + public boolean hasPlacedBoth(String player) { + return playerLoc1.containsKey(player) && playerLoc2.containsKey(player); + } + + public void showSelectionInfoInActionBar(Player player) { + + if (!plugin.getConfigManager().useActionBarOnSelection()) + return; + + String pname = player.getName(); + CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); + + String Message = plugin.msg(lm.Select_TotalSize, cuboidArea.getSize()); + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (plugin.getConfigManager().enableEconomy()) + Message += " " + plugin.msg(lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); + + plugin.getAB().send(player, Message); + + } + + public void showSelectionInfo(Player player) { + String pname = player.getName(); + if (hasPlacedBoth(pname)) { + plugin.msg(player, lm.General_Separator); + CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); + plugin.msg(player, lm.Select_TotalSize, cuboidArea.getSize()); + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + + if (plugin.getConfigManager().enableEconomy()) + plugin.msg(player, lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); + player.sendMessage(ChatColor.YELLOW + "X" + plugin.msg(lm.General_Size, cuboidArea.getXSize())); + player.sendMessage(ChatColor.YELLOW + "Y" + plugin.msg(lm.General_Size, cuboidArea.getYSize())); + player.sendMessage(ChatColor.YELLOW + "Z" + plugin.msg(lm.General_Size, cuboidArea.getZSize())); + plugin.msg(player, lm.General_Separator); + Visualizer v = new Visualizer(player); + v.setAreas(this.getSelectionCuboid(player)); + this.showBounds(player, v); + } else + plugin.msg(player, lm.Select_Points); + } + + public void showBounds(final Player player, final Visualizer v) { + if (!plugin.getConfigManager().useVisualizer()) + return; + Visualizer tv = vMap.get(player.getName()); + if (tv != null) { + tv.cancelAll(); + } + vMap.put(player.getName(), v); + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + if (!v.getAreas().isEmpty()) + MakeBorders(player, false); + if (!v.getErrorAreas().isEmpty()) + MakeBorders(player, true); + return; + } + }); + } + + public List getLocations(Location lowLoc, Location loc, Double TX, Double TY, Double TZ, Double Range, boolean StartFromZero) { + + double eachCollumn = plugin.getConfigManager().getVisualizerRowSpacing(); + double eachRow = plugin.getConfigManager().getVisualizerCollumnSpacing(); + + if (TX == 0D) + TX = eachCollumn + eachCollumn * 0.1; + if (TY == 0D) + TY = eachRow + eachRow * 0.1; + if (TZ == 0D) + TZ = eachCollumn + eachCollumn * 0.1; + + double CollumnStart = eachCollumn; + double RowStart = eachRow; + + if (StartFromZero) { + CollumnStart = 0; + RowStart = 0; + } + + List locList = new ArrayList(); + + if (lowLoc.getWorld() != loc.getWorld()) + return locList; + + for (double x = CollumnStart; x < TX; x += eachCollumn) { + Location CurrentX = lowLoc.clone(); + if (TX > eachCollumn + eachCollumn * 0.1) + CurrentX.add(x, 0, 0); + for (double y = RowStart; y < TY; y += eachRow) { + Location CurrentY = CurrentX.clone(); + if (TY > eachRow + eachRow * 0.1) + CurrentY.add(0, y, 0); + for (double z = CollumnStart; z < TZ; z += eachCollumn) { + Location CurrentZ = CurrentY.clone(); + if (TZ > eachCollumn + eachCollumn * 0.1) + CurrentZ.add(0, 0, z); + double dist = loc.distance(CurrentZ); + if (dist < Range) + locList.add(CurrentZ.clone()); + } + } + } + + return locList; + } + + public List GetLocationsWallsByData(Location loc, Double TX, Double TY, Double TZ, Location lowLoc, SelectionSides Sides, + double Range) { + List locList = new ArrayList(); + + // North wall + if (Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, TY, 0D, Range, false)); + + // South wall + if (Sides.ShowSouthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), TX, TY, 0D, Range, false)); + + // West wall + if (Sides.ShowWestSide()) + locList.addAll(getLocations(lowLoc.clone(), loc.clone(), 0D, TY, TZ, Range, false)); + + // East wall + if (Sides.ShowEastSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, TY, TZ, Range, false)); + + // Roof wall + if (Sides.ShowTopSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), TX, 0D, TZ, Range, false)); + + // Ground wall + if (Sides.ShowBottomSide()) + locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, 0D, TZ, Range, false)); + + return locList; + } + + public List GetLocationsCornersByData(Location loc, Double TX, Double TY, Double TZ, Location lowLoc, SelectionSides Sides, + double Range) { + List locList = new ArrayList(); + + // North bottom line + if (Sides.ShowBottomSide() && Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, 0D, 0D, Range, true)); + + // North top line + if (Sides.ShowTopSide() && Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), TX, 0D, 0D, Range, true)); + + // South bottom line + if (Sides.ShowBottomSide() && Sides.ShowSouthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), TX, 0D, 0D, Range, true)); + + // South top line + if (Sides.ShowTopSide() && Sides.ShowSouthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, TY, TZ), loc.clone(), TX, 0D, 0D, Range, true)); + + // North - West corner + if (Sides.ShowWestSide() && Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, 0), loc.clone(), 0D, TY, 0D, Range, true)); + + // North - East corner + if (Sides.ShowEastSide() && Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, TY, 0D, Range, true)); + + // South - West corner + if (Sides.ShowSouthSide() && Sides.ShowWestSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), 0D, TY, 0D, Range, true)); + + // South - East corner + if (Sides.ShowSouthSide() && Sides.ShowEastSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, TZ), loc.clone(), 0D, TY + 1, 0D, Range, true)); + + // West bottom corner + if (Sides.ShowWestSide() && Sides.ShowBottomSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, 0), loc.clone(), 0D, 0D, TZ, Range, true)); + + // East bottom corner + if (Sides.ShowEastSide() && Sides.ShowBottomSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, 0D, TZ, Range, true)); + + // West top corner + if (Sides.ShowWestSide() && Sides.ShowTopSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), 0D, 0D, TZ, Range, true)); + + // East top corner + if (Sides.ShowEastSide() && Sides.ShowTopSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, TY, 0), loc.clone(), 0D, 0D, TZ, Range, true)); + + return locList; + } + + public boolean MakeBorders(final Player player, final boolean error) { + + final Visualizer v = vMap.get(player.getName()); + + if (v == null) + return false; + + List areas = null; + + if (!error) + areas = v.getAreas(); + else + areas = v.getErrorAreas(); + + Location loc = player.getLocation(); + int Range = plugin.getConfigManager().getVisualizerRange(); + + final List locList = new ArrayList(); + final List locList2 = new ArrayList(); + + final boolean same = v.isSameLoc(); + if (!same) { + for (CuboidArea area : areas) { + if (area == null) + continue; + CuboidArea cuboidArea = new CuboidArea(area.getLowLoc(), area.getHighLoc()); + cuboidArea.getHighLoc().add(1, 1, 1); + + SelectionSides Sides = new SelectionSides(); + + double PLLX = loc.getBlockX() - Range; + double PLLZ = loc.getBlockZ() - Range; + double PLLY = loc.getBlockY() - Range; + double PLHX = loc.getBlockX() + Range; + double PLHZ = loc.getBlockZ() + Range; + double PLHY = loc.getBlockY() + Range; + + if (cuboidArea.getLowLoc().getBlockX() < PLLX) { + cuboidArea.getLowLoc().setX(PLLX); + Sides.setWestSide(false); + } + + if (cuboidArea.getHighLoc().getBlockX() > PLHX) { + cuboidArea.getHighLoc().setX(PLHX); + Sides.setEastSide(false); + } + + if (cuboidArea.getLowLoc().getBlockZ() < PLLZ) { + cuboidArea.getLowLoc().setZ(PLLZ); + Sides.setNorthSide(false); + } + + if (cuboidArea.getHighLoc().getBlockZ() > PLHZ) { + cuboidArea.getHighLoc().setZ(PLHZ); + Sides.setSouthSide(false); + } + + if (cuboidArea.getLowLoc().getBlockY() < PLLY) { + cuboidArea.getLowLoc().setY(PLLY); + Sides.setBottomSide(false); + } + + if (cuboidArea.getHighLoc().getBlockY() > PLHY) { + cuboidArea.getHighLoc().setY(PLHY); + Sides.setTopSide(false); + } + + double TX = cuboidArea.getXSize() - 1; + double TY = cuboidArea.getYSize() - 1; + double TZ = cuboidArea.getZSize() - 1; + + if (!error && v.getId() != -1) { + Bukkit.getScheduler().cancelTask(v.getId()); + } else if (error && v.getErrorId() != -1) { + Bukkit.getScheduler().cancelTask(v.getErrorId()); + } + + locList.addAll(GetLocationsWallsByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range)); + locList2.addAll(GetLocationsCornersByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range)); + } + v.setLoc(player.getLocation()); + } else { + if (error) { + locList.addAll(v.getErrorLocations()); + locList2.addAll(v.getErrorLocations2()); + } else { + locList.addAll(v.getLocations()); + locList2.addAll(v.getLocations2()); + } + } + + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @SuppressWarnings("deprecation") + @Override + public void run() { + + int size = locList.size(); + int errorSize = locList2.size(); + + int timesMore = 1; + int errorTimesMore = 1; + + if (size > plugin.getConfigManager().getVisualizerSidesCap() && !same) { + timesMore = size / plugin.getConfigManager().getVisualizerSidesCap() + 1; + } + if (errorSize > plugin.getConfigManager().getVisualizerFrameCap() && !same) { + errorTimesMore = errorSize / plugin.getConfigManager().getVisualizerFrameCap() + 1; + } + + List trimed = new ArrayList(); + List trimed2 = new ArrayList(); + + try { + boolean spigot = plugin.isSpigot(); + + if (spigot) { + if (!error) + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + player.spigot().playEffect(l, plugin.getConfigManager().getSelectedSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + if (!same) + trimed.add(l); + } + else + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + player.spigot().playEffect(l, plugin.getConfigManager().getOverlapSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); + if (!same) + trimed.add(l); + } + + if (!error) + for (int i = 0; i < locList2.size(); i += errorTimesMore) { + Location l = locList2.get(i); + player.spigot().playEffect(l, plugin.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + if (!same) + trimed2.add(l); + } + else + for (int i = 0; i < locList2.size(); i += errorTimesMore) { + Location l = locList2.get(i); + player.spigot().playEffect(l, plugin.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); + if (!same) + trimed2.add(l); + } + } else { + if (!error) + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + plugin.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, l, player); + if (!same) + trimed.add(l); + } + else + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + plugin.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, l, player); + if (!same) + trimed.add(l); + } + if (!error) + for (int i = 0; i < locList2.size(); i += errorTimesMore) { + Location l = locList2.get(i); + plugin.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); + if (!same) + trimed2.add(l); + } + else + for (int i = 0; i < locList2.size(); i += errorTimesMore) { + Location l = locList2.get(i); + plugin.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); + if (!same) + trimed2.add(l); + } + } + } catch (Exception e) { + return; + } + + if (!same) { + if (error) { + v.setErrorLocations(trimed); + v.setErrorLocations2(trimed2); + } else { + v.setLocations(trimed); + v.setLocations2(trimed2); + } + } + + return; + } + }); + + if (v.isOnce()) + return true; + + if (v.getStart() + plugin.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) + return false; + + int scid = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (player.isOnline()) { + MakeBorders(player, error); + } + return; + } + }, plugin.getConfigManager().getVisualizerUpdateInterval() * 1L); + if (!error) + v.setId(scid); + else + v.setErrorId(scid); + + return true; + } + + public void vert(Player player, boolean resadmin) { + if (hasPlacedBoth(player.getName())) { + this.sky(player, resadmin); + this.bedrock(player, resadmin); + } else { + plugin.msg(player, lm.Select_Points); + } + } + + public void qsky(Player player) { + int y1 = playerLoc1.get(player.getName()).getBlockY(); + int y2 = playerLoc2.get(player.getName()).getBlockY(); + int newy = player.getLocation().getWorld().getMaxHeight() - 1; + if (y1 > y2) + playerLoc1.get(player.getName()).setY(newy); + else + playerLoc2.get(player.getName()).setY(newy); + } + + public void qbedrock(Player player) { + int y1 = playerLoc1.get(player.getName()).getBlockY(); + int y2 = playerLoc2.get(player.getName()).getBlockY(); + if (y1 < y2) { + int newy = MIN_HEIGHT; + playerLoc1.get(player.getName()).setY(newy); + } else { + int newy = MIN_HEIGHT; + playerLoc2.get(player.getName()).setY(newy); + } + } + + public void sky(Player player, boolean resadmin) { + if (hasPlacedBoth(player.getName())) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + int y1 = playerLoc1.get(player.getName()).getBlockY(); + int y2 = playerLoc2.get(player.getName()).getBlockY(); + int newy = player.getLocation().getWorld().getMaxHeight() - 1; + if (y1 > y2) { + if (!resadmin) { + if (group.getMaxHeight() < newy) + newy = group.getMaxHeight(); + if (newy - y2 > (group.getMaxY() - 1)) + newy = y2 + (group.getMaxY() - 1); + } + playerLoc1.get(player.getName()).setY(newy); + } else { + if (!resadmin) { + if (group.getMaxHeight() < newy) + newy = group.getMaxHeight(); + if (newy - y1 > (group.getMaxY() - 1)) + newy = y1 + (group.getMaxY() - 1); + } + playerLoc2.get(player.getName()).setY(newy); + } + plugin.msg(player, lm.Select_Sky); + } else { + plugin.msg(player, lm.Select_Points); + } + } + + public void bedrock(Player player, boolean resadmin) { + if (hasPlacedBoth(player.getName())) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + int y1 = playerLoc1.get(player.getName()).getBlockY(); + int y2 = playerLoc2.get(player.getName()).getBlockY(); + if (y1 < y2) { + int newy = MIN_HEIGHT; + if (!resadmin) { + if (newy < group.getMinHeight()) + newy = group.getMinHeight(); + if (y2 - newy > (group.getMaxY() - 1)) + newy = y2 - (group.getMaxY() - 1); + } + playerLoc1.get(player.getName()).setY(newy); + } else { + int newy = MIN_HEIGHT; + if (!resadmin) { + if (newy < group.getMinHeight()) + newy = group.getMinHeight(); + if (y1 - newy > (group.getMaxY() - 1)) + newy = y1 - (group.getMaxY() - 1); + } + playerLoc2.get(player.getName()).setY(newy); + } + plugin.msg(player, lm.Select_Bedrock); + } else { + plugin.msg(player, lm.Select_Points); + } + } + + public void clearSelection(Player player) { + playerLoc1.remove(player.getName()); + playerLoc2.remove(player.getName()); + } + + public void selectChunk(Player player) { + Chunk chunk = player.getWorld().getChunkAt(player.getLocation()); + int xcoord = chunk.getX() * 16; + int zcoord = chunk.getZ() * 16; + int ycoord = MIN_HEIGHT; + int xmax = xcoord + 15; + int zmax = zcoord + 15; + int ymax = player.getLocation().getWorld().getMaxHeight() - 1; + playerLoc1.put(player.getName(), new Location(player.getWorld(), xcoord, ycoord, zcoord)); + playerLoc2.put(player.getName(), new Location(player.getWorld(), xmax, ymax, zmax)); + plugin.msg(player, lm.Select_Success); + } + + public boolean worldEdit(Player player) { + plugin.msg(player, lm.General_WorldEditNotFound); + return false; + } + + public boolean worldEditUpdate(Player player) { + plugin.msg(player, lm.General_WorldEditNotFound); + return false; + } + + public void selectBySize(Player player, int xsize, int ysize, int zsize) { + Location myloc = player.getLocation(); + Location loc1 = new Location(myloc.getWorld(), myloc.getBlockX() + xsize, myloc.getBlockY() + ysize, myloc.getBlockZ() + zsize); + Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize); + placeLoc1(player, loc1, false); + placeLoc2(player, loc2, true); + plugin.msg(player, lm.Select_Success); + showSelectionInfo(player); + } + + public void modify(Player player, boolean shift, double amount) { + if (!hasPlacedBoth(player.getName())) { + plugin.msg(player, lm.Select_Points); + return; + } + Direction d = getDirection(player); + if (d == null) { + plugin.msg(player, lm.Invalid_Direction); + return; + } + CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); + switch (d) { + case DOWN: + double oldy = area.getLowLoc().getBlockY(); + oldy = oldy - amount; + if (oldy < MIN_HEIGHT) { + plugin.msg(player, lm.Select_TooLow); + oldy = MIN_HEIGHT; + } + area.getLowLoc().setY(oldy); + if (shift) { + double oldy2 = area.getHighLoc().getBlockY(); + oldy2 = oldy2 - amount; + area.getHighLoc().setY(oldy2); + plugin.msg(player, lm.Shifting_Down, amount); + } else + plugin.msg(player, lm.Expanding_Down, amount); + break; + case MINUSX: + double oldx = area.getLowLoc().getBlockX(); + oldx = oldx - amount; + area.getLowLoc().setX(oldx); + if (shift) { + double oldx2 = area.getHighLoc().getBlockX(); + oldx2 = oldx2 - amount; + area.getHighLoc().setX(oldx2); + plugin.msg(player, lm.Shifting_West, amount); + } else + plugin.msg(player, lm.Expanding_West, amount); + break; + case MINUSZ: + double oldz = area.getLowLoc().getBlockZ(); + oldz = oldz - amount; + area.getLowLoc().setZ(oldz); + if (shift) { + double oldz2 = area.getHighLoc().getBlockZ(); + oldz2 = oldz2 - amount; + area.getHighLoc().setZ(oldz2); + plugin.msg(player, lm.Shifting_North, amount); + } else + plugin.msg(player, lm.Expanding_North, amount); + break; + case PLUSX: + oldx = area.getHighLoc().getBlockX(); + oldx = oldx + amount; + area.getHighLoc().setX(oldx); + if (shift) { + double oldx2 = area.getLowLoc().getBlockX(); + oldx2 = oldx2 + amount; + area.getLowLoc().setX(oldx2); + plugin.msg(player, lm.Shifting_East, amount); + } else + plugin.msg(player, lm.Expanding_East, amount); + break; + case PLUSZ: + oldz = area.getHighLoc().getBlockZ(); + oldz = oldz + amount; + area.getHighLoc().setZ(oldz); + if (shift) { + double oldz2 = area.getLowLoc().getBlockZ(); + oldz2 = oldz2 + amount; + area.getLowLoc().setZ(oldz2); + plugin.msg(player, lm.Shifting_South, amount); + } else + plugin.msg(player, lm.Expanding_South, amount); + break; + case UP: + oldy = area.getHighLoc().getBlockY(); + oldy = oldy + amount; + if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { + plugin.msg(player, lm.Select_TooHigh); + oldy = player.getLocation().getWorld().getMaxHeight() - 1; + } + area.getHighLoc().setY(oldy); + if (shift) { + double oldy2 = area.getLowLoc().getBlockY(); + oldy2 = oldy2 + amount; + area.getLowLoc().setY(oldy2); + plugin.msg(player, lm.Shifting_Up, amount); + } else + plugin.msg(player, lm.Expanding_Up, amount); + break; + default: + break; + } + updateLocations(player, area.getHighLoc(), area.getLowLoc(), true); + } + + public boolean contract(Player player, double amount) { + return contract(player, amount, false); + } + + public boolean contract(Player player, double amount, @SuppressWarnings("unused") boolean resadmin) { + if (!hasPlacedBoth(player.getName())) { + plugin.msg(player, lm.Select_Points); + return false; + } + Direction d = getDirection(player); + if (d == null) { + plugin.msg(player, lm.Invalid_Direction); + return false; + } + CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); + switch (d) { + case UP: + double oldy = area.getHighLoc().getBlockY(); + oldy = oldy - amount; + if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { + plugin.msg(player, lm.Select_TooHigh); + oldy = player.getLocation().getWorld().getMaxHeight() - 1; + } + area.getHighLoc().setY(oldy); + plugin.msg(player, lm.Contracting_Down, amount); + break; + case PLUSX: + double oldx = area.getHighLoc().getBlockX(); + oldx = oldx - amount; + area.getHighLoc().setX(oldx); + plugin.msg(player, lm.Contracting_West, amount); + break; + case PLUSZ: + double oldz = area.getHighLoc().getBlockZ(); + oldz = oldz - amount; + area.getHighLoc().setZ(oldz); + plugin.msg(player, lm.Contracting_North, amount); + break; + case MINUSX: + oldx = area.getLowLoc().getBlockX(); + oldx = oldx + amount; + area.getLowLoc().setX(oldx); + plugin.msg(player, lm.Contracting_East, amount); + break; + case MINUSZ: + oldz = area.getLowLoc().getBlockZ(); + oldz = oldz + amount; + area.getLowLoc().setZ(oldz); + plugin.msg(player, lm.Contracting_South, amount); + break; + case DOWN: + oldy = area.getLowLoc().getBlockY(); + oldy = oldy + amount; + if (oldy < MIN_HEIGHT) { + plugin.msg(player, lm.Select_TooLow); + oldy = MIN_HEIGHT; + } + area.getLowLoc().setY(oldy); + plugin.msg(player, lm.Contracting_Up, amount); + break; + default: + break; + } + +// if (!ClaimedResidence.isBiggerThanMinSubzone(player, area, resadmin)) +// return false; + + updateLocations(player, area.getHighLoc(), area.getLowLoc(), true); + return true; + } + + private static Direction getDirection(Player player) { + + int yaw = (int) player.getLocation().getYaw(); + + if (yaw < 0) + yaw += 360; + + yaw += 45; + yaw %= 360; + + int facing = yaw / 90; + + float pitch = player.getLocation().getPitch(); + if (pitch < -50) + return Direction.UP; + if (pitch > 50) + return Direction.DOWN; + if (facing == 1) // east + return Direction.MINUSX; + if (facing == 3) // west + return Direction.PLUSX; + if (facing == 2) // north + return Direction.MINUSZ; + if (facing == 0) // south + return Direction.PLUSZ; + return null; + } + +} diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java index 8930bc357..1a31a2c14 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -4,6 +4,9 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.CuboidArea; import com.sk89q.worldedit.BlockVector; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.managers.RegionManager; @@ -17,7 +20,10 @@ public WorldGuardUtil(Residence residence) { this.plugin = residence; } - public ProtectedRegion isSelectionInRegion(Player player) { + public ProtectedRegion getRegion(Player player, CuboidArea area) { + + if (area == null) + return null; if (plugin.getWorldGuard() == null) return null; @@ -25,10 +31,8 @@ public ProtectedRegion isSelectionInRegion(Player player) { if (plugin.getWorldEdit() == null) return null; - if (!plugin.getSelectionManager().hasPlacedBoth(player.getName())) - return null; - Location loc1 = plugin.getSelectionManager().getPlayerLoc1(player.getName()); - Location loc2 = plugin.getSelectionManager().getPlayerLoc2(player.getName()); + Location loc1 = area.getLowLoc(); + Location loc2 = area.getHighLoc(); String id = "icp__tempregion"; try { @@ -48,4 +52,24 @@ public ProtectedRegion isSelectionInRegion(Player player) { } return null; } + + public boolean isSelectionInArea(Player player) { + if (plugin.getWorldGuard() == null) + return false; + + ProtectedRegion Region = getRegion(player, plugin.getSelectionManager().getSelectionCuboid(player)); + if (Region == null) + return false; + + plugin.msg(player, lm.Select_WorldGuardOverlap, Region.getId()); + Location lowLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), + Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); + Location highLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), + Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); + Visualizer v = new Visualizer(player); + v.setAreas(plugin.getSelectionManager().getSelectionCuboid(player)); + v.setErrorAreas(new CuboidArea(lowLoc, highLoc)); + plugin.getSelectionManager().showBounds(player, v); + return true; + } } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 7489183b3..4e2b8c41a 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -82,7 +82,6 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p separator = "----------"; sender.sendMessage(separator + " " + Residence.getInstance().msg(lm.General_HelpPageHeader, path, page, pi.getTotalPages()) + " " + separator); - Debug.D("here " + path + " " + page + " " + resadmin + " " + pi.getStart() + " " + pi.getEnd()); for (int i = pi.getStart(); i <= pi.getEnd(); i++) { if (helplines.get(i).getCommand() != null) { HelpEntry sub = this.getSubEntry(helplines.get(i).getCommand()); diff --git a/src/plugin.yml b/src/plugin.yml index 052002a47..227ed3f29 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -4,7 +4,7 @@ version: 4.6.0.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] -softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds,dynmap,LWC] +softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds,dynmap,LWC, Kingdoms] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: From 40455da28def2930ba7d9478ee5b8473c56e1751 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 Feb 2017 17:55:54 +0200 Subject: [PATCH 0344/1142] Check for empty color code for raw messages --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 3 +-- src/com/bekvon/bukkit/residence/utils/RawMessage.java | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index d7b682ce0..65f5ff8a4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -66,7 +66,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; @@ -733,7 +732,7 @@ public void onPlayerQuit(PlayerQuitEvent event) { } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerJoin(PlayerChangedWorldEvent event) { + public void onPlayerWorldChange(PlayerChangedWorldEvent event) { Player player = event.getPlayer(); FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); diff --git a/src/com/bekvon/bukkit/residence/utils/RawMessage.java b/src/com/bekvon/bukkit/residence/utils/RawMessage.java index 6639470a0..31e731b21 100644 --- a/src/com/bekvon/bukkit/residence/utils/RawMessage.java +++ b/src/com/bekvon/bukkit/residence/utils/RawMessage.java @@ -39,7 +39,7 @@ public RawMessage add(String text, String hoverText, String command, String sugg String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', text) + "\""; String last = ChatColor.getLastColors(text); - if (last != null) { + if (last != null && !last.isEmpty()) { ChatColor color = ChatColor.getByChar(last.replace("§", "")); if (color != null) { f += ",\"color\":\"" + color.name().toLowerCase() + "\""; From 1e9b2b3f85ff15ece2e316e6527035ac48cf47b2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 Feb 2017 18:24:45 +0200 Subject: [PATCH 0345/1142] Optimize res flag GUI --- .../bukkit/residence/commands/pset.java | 2 +- .../bekvon/bukkit/residence/commands/set.java | 4 +- .../bekvon/bukkit/residence/gui/SetFlag.java | 38 +++++++++++++------ 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 8c09c6344..6e92d7a97 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -99,7 +99,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(sender, lm.General_NoPermission); return true; } - SetFlag flag = new SetFlag(res.getName(), player, resadmin); + SetFlag flag = new SetFlag(res, player, resadmin); flag.setTargetPlayer(targetPlayer); flag.recalculatePlayer(res); player.closeInventory(); diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index f5ea19948..891caccea 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -14,6 +14,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; public class set implements cmd { @@ -63,7 +64,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(sender, lm.General_NoPermission); return true; } - SetFlag flag = new SetFlag(res.getName(), player, resadmin); + + SetFlag flag = new SetFlag(res, player, resadmin); flag.recalculateResidence(res); player.closeInventory(); plugin.getPlayerListener().getGUImap().put(player.getName(), flag); diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 1f5503335..f8aef4665 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -27,17 +27,18 @@ public class SetFlag { - private String residence; + private ClaimedResidence residence; private Player player; private String targetPlayer = null; private Inventory inventory; private LinkedHashMap permMap = new LinkedHashMap(); private LinkedHashMap> description = new LinkedHashMap>(); + private List flags = null; private boolean admin = false; private int page = 1; private int pageCount = 1; - public SetFlag(String residence, Player player, boolean admin) { + public SetFlag(ClaimedResidence residence, Player player, boolean admin) { this.residence = residence; this.player = player; this.admin = admin; @@ -56,7 +57,7 @@ public void setTargetPlayer(String player) { this.targetPlayer = player; } - public String getResidence() { + public ClaimedResidence getResidence() { return this.residence; } @@ -105,22 +106,23 @@ else if (click.isRightClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTO } if (targetPlayer == null) { if (admin) - Bukkit.dispatchCommand(player, "resadmin set " + residence + " " + flag + " " + command); + Bukkit.dispatchCommand(player, "resadmin set " + residence.getName() + " " + flag + " " + command); else - Bukkit.dispatchCommand(player, "res set " + residence + " " + flag + " " + command); + Bukkit.dispatchCommand(player, "res set " + residence.getName() + " " + flag + " " + command); } else { if (admin) - Bukkit.dispatchCommand(player, "resadmin pset " + residence + " " + targetPlayer + " " + flag + " " + command); + Bukkit.dispatchCommand(player, "resadmin pset " + residence.getName() + " " + targetPlayer + " " + flag + " " + command); else - Bukkit.dispatchCommand(player, "res pset " + residence + " " + targetPlayer + " " + flag + " " + command); + Bukkit.dispatchCommand(player, "res pset " + residence.getName() + " " + targetPlayer + " " + flag + " " + command); } + } public void recalculateInv() { if (targetPlayer == null) - recalculateResidence(Residence.getInstance().getResidenceManager().getByName(residence)); + recalculateResidence(residence); else - recalculatePlayer(Residence.getInstance().getResidenceManager().getByName(residence)); + recalculatePlayer(residence); } private void fillFlagDescriptions() { @@ -147,16 +149,20 @@ private void fillFlagDescriptions() { @SuppressWarnings("incomplete-switch") public void recalculateResidence(ClaimedResidence res) { - List flags = res.getPermissions().getPosibleFlags(player, true, this.admin); + + if (flags == null) + flags = res.getPermissions().getPosibleFlags(player, true, this.admin); + Map resFlags = new HashMap(); Map TempPermMap = new LinkedHashMap(); + Map globalFlags = Residence.getInstance().getPermissionManager().getAllFlags().getFlags(); for (Entry one : res.getPermissions().getFlags().entrySet()) { if (flags.contains(one.getKey())) resFlags.put(one.getKey(), one.getValue()); } - + for (Entry one : globalFlags.entrySet()) { if (!flags.contains(one.getKey())) continue; @@ -167,6 +173,7 @@ public void recalculateResidence(ClaimedResidence res) { TempPermMap.put(one.getKey(), FlagState.NEITHER); } + String title = ""; if (targetPlayer == null) title = Residence.getInstance().msg(lm.Gui_Set_Title, res.getName()); @@ -177,6 +184,7 @@ public void recalculateResidence(ClaimedResidence res) { title = title.substring(0, Math.min(title.length(), 32)); } + Inventory GuiInv = Bukkit.createInventory(null, 54, title); int i = 0; @@ -203,6 +211,7 @@ public void recalculateResidence(ClaimedResidence res) { permMap.put(one.getKey(), one.getValue()); } + for (Entry one : permMap.entrySet()) { ItemStack MiscInfo = Residence.getInstance().getConfigManager().getGuiRemove(); @@ -258,6 +267,8 @@ public void recalculateResidence(ClaimedResidence res) { if (i > 53) break; } + + ItemStack Item = new ItemStack(Material.ARROW); ItemMeta meta = Item.getItemMeta(); @@ -266,6 +277,8 @@ public void recalculateResidence(ClaimedResidence res) { Item.setItemMeta(meta); GuiInv.setItem(45, Item); } + + if (page < pageCount) { meta.setDisplayName(Residence.getInstance().msg(lm.General_NextInfoPage)); Item.setItemMeta(meta); @@ -282,7 +295,8 @@ public void recalculatePlayer(ClaimedResidence res) { globalFlags.put(oneFlag.getName(), oneFlag.isEnabled()); } - List flags = res.getPermissions().getPosibleFlags(player, false, this.admin); + if (flags == null) + flags = res.getPermissions().getPosibleFlags(player, false, this.admin); Map resFlags = new HashMap(); for (Entry one : res.getPermissions().getFlags().entrySet()) { From 8b30942946add0a514e828471b298753a7bf97c9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 Feb 2017 18:32:19 +0200 Subject: [PATCH 0346/1142] Prevent contract lower than minimum size --- .../bukkit/residence/protection/ClaimedResidence.java | 10 +++++++--- src/plugin.yml | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 0b72d568b..e46a8a5f3 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -25,6 +25,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.RawMessage; import java.text.DecimalFormat; @@ -426,7 +427,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) return true; } - + if (chargeMoney && parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { int chargeamount = (int) Math.ceil(area.getSize() * group.getCostPerBlock()); if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { @@ -556,14 +557,17 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); return false; } - + + if (!isBiggerThanMin(player, newarea, resadmin)) + return false; + if (!resadmin) { if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) return true; if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) return true; } - + if (parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); if (chargeamount > 0) { diff --git a/src/plugin.yml b/src/plugin.yml index 227ed3f29..d4e431f26 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.6.0.0 +version: 4.6.1.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 119dcfa7060845023a765a492fa14c22aaa60b58 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 19 Feb 2017 10:55:00 +0200 Subject: [PATCH 0347/1142] Use default group if none found --- src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index c7c2c5f15..98de44cea 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -200,6 +200,8 @@ public PermissionGroup getGroup(String world) { groups = new PlayerGroup(this); groups.updateGroup(world, false); PermissionGroup group = groups.getGroup(world); + if (group == null) + group = Residence.getInstance().getPermissionManager().getGroupByName(Residence.getInstance().getConfigManager().getDefaultGroup()); return group; } From 39c322d181889efa6de94b9354f639afeed2c48f Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 19 Feb 2017 11:04:27 +0200 Subject: [PATCH 0348/1142] This way better --- .../bekvon/bukkit/residence/containers/PlayerGroup.java | 4 ++-- .../bukkit/residence/containers/ResidencePlayer.java | 2 +- .../bukkit/residence/permissions/PermissionManager.java | 9 ++++++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index 05b27ff13..0962d1cd8 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -80,7 +80,7 @@ public void updateGroup(String world, boolean force) { } if (finalGroup == null || !Residence.getInstance().getPermissionManager().getGroups().containsValue(finalGroup)) { - this.groups.put(world, Residence.getInstance().getPermissionManager().getGroupByName(Residence.getInstance().getConfigManager().getDefaultGroup())); + this.groups.put(world, Residence.getInstance().getPermissionManager().getDefaultGroup()); } else { this.groups.put(world, finalGroup); } @@ -88,7 +88,7 @@ public void updateGroup(String world, boolean force) { private PermissionGroup getPermissionGroup() { Player player = resPlayer.getPlayer(); - PermissionGroup group = Residence.getInstance().getPermissionManager().getGroupByName(Residence.getInstance().getConfigManager().getDefaultGroup()); + PermissionGroup group = Residence.getInstance().getPermissionManager().getDefaultGroup(); for (Entry one : Residence.getInstance().getPermissionManager().getGroups().entrySet()) { if (player != null) { if (player.hasPermission("residence.group." + one.getKey())) { diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 98de44cea..1cfb77101 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -201,7 +201,7 @@ public PermissionGroup getGroup(String world) { groups.updateGroup(world, false); PermissionGroup group = groups.getGroup(world); if (group == null) - group = Residence.getInstance().getPermissionManager().getGroupByName(Residence.getInstance().getConfigManager().getDefaultGroup()); + group = Residence.getInstance().getPermissionManager().getDefaultGroup(); return group; } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 7d09021ee..a021ed6f3 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -28,6 +28,7 @@ public class PermissionManager { protected FlagPermissions globalFlagPerms; protected HashMap groupsMap = new HashMap(); + private PermissionGroup defaultGroup = null; private Residence plugin; public PermissionManager(Residence plugin) { @@ -55,10 +56,16 @@ public Map getGroups() { return groups; } + public PermissionGroup getDefaultGroup() { + if (defaultGroup == null) + defaultGroup = groups.get(Residence.getInstance().getConfigManager().getDefaultGroup()); + return defaultGroup; + } + public PermissionGroup getGroupByName(String group) { group = group.toLowerCase(); if (!groups.containsKey(group)) { - return groups.get(plugin.getConfigManager().getDefaultGroup()); + return getDefaultGroup(); } return groups.get(group); } From cedec2c0606bebb7361d1d16727aeabf2da7dd97 Mon Sep 17 00:00:00 2001 From: DoNotSpamPls Date: Sun, 19 Feb 2017 19:43:54 +0200 Subject: [PATCH 0349/1142] Updated README with new links --- README | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/README b/README index 58fb5dec3..91452facf 100644 --- a/README +++ b/README @@ -2,18 +2,15 @@ Residence - Self serve area protection system ============================================= Official links: -Wiki: http://residencebukkitmod.wikispaces.com/ +Wiki: https://github.com/Zrips/Residence/wiki IRC: irc://irc.esper.net/Residence -Spigot Resource page: http://www.spigotmc.org/resources/residence-reloaded-1-8.2697/ +Spigot Resource page: https://www.spigotmc.org/resources/residence-1-7-10-up-to-1-11.11480/ -Downloads: -Latest Development Snapshot: https://github.com/bekvon/Residence/raw/dist/dist/Residence.jar -Latest Config.yml: https://github.com/bekvon/Residence/raw/master/src/config.yml +Downdload the latest config.yml: https://github.com/Zrips/Residence/raw/master/src/config.yml -To build the source yourself, simply download the source: -https://github.com/bekvon/Residence/zipball/master +To build the source yourself, simply download the source, unzip and run ant: +https://github.com/Zrips/Residence/zipball/master -Unzip and run ant. Need Help?: @@ -23,12 +20,11 @@ To help us better assist you, please follow these simple guidelines when asking 1)Use a service such as http://pastebin.com when sharing errors or configurations. -2)Include the following version information: Craftbukkit, Residence, Vault. If you are unsure, type in the Minecraft console: "/version [plugin]" left blank will default to Craftbukkit. +2)Include the following version information: CraftBukkit/Spigot/PaperSpigot, Residence, Vault. If you are unsure, type in the Minecraft console: "/version [plugin]" left blank will default to Craftbukkit/Spigot/PaperSpigot. 3)Include a paste of your current config.yml from Residence and your permissions.yml from your respective permissions plugin. 4)Be as detailed as possible when describing your problem. How can we reproduce your problem? -If no one is available on the IRC channel, please make a post on the Residence BukkitDev page with the above information. - +If no one is available on the IRC channel, please make a post on the Residence Spigot thread with the above information. From 9e468a8e57ff16568879c3c06fbd43953057fceb Mon Sep 17 00:00:00 2001 From: DoNotSpamPls Date: Sun, 19 Feb 2017 19:46:56 +0200 Subject: [PATCH 0350/1142] Fixed a typo and added copyright info --- LICENCE.txt => LICENSE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename LICENCE.txt => LICENSE (97%) diff --git a/LICENCE.txt b/LICENSE similarity index 97% rename from LICENCE.txt rename to LICENSE index 818433ecc..fdebbcdf7 100644 --- a/LICENCE.txt +++ b/LICENSE @@ -631,8 +631,8 @@ to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - - Copyright (C) + Residence - Per player area protection plugin + Copyright (C) 2017 Zrips This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - Copyright (C) + Residence Copyright (C) 2017 Zrips This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. From f5da464b89fb69527d07b891444ee842b39c78cd Mon Sep 17 00:00:00 2001 From: DoNotSpamPls Date: Sun, 19 Feb 2017 19:50:24 +0200 Subject: [PATCH 0351/1142] Changed IRC link to use webchat.esper.net --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 91452facf..9fd377c8b 100644 --- a/README +++ b/README @@ -3,7 +3,7 @@ Residence - Self serve area protection system Official links: Wiki: https://github.com/Zrips/Residence/wiki -IRC: irc://irc.esper.net/Residence +IRC: http://webchat.esper.net/?channels=residence Spigot Resource page: https://www.spigotmc.org/resources/residence-1-7-10-up-to-1-11.11480/ Downdload the latest config.yml: https://github.com/Zrips/Residence/raw/master/src/config.yml From 9f58e2bbf2ecc3783c4c8f70db12131c2abb90ca Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 19 Feb 2017 20:14:33 +0200 Subject: [PATCH 0352/1142] Check for null when teleporting players --- .../bekvon/bukkit/residence/permissions/PermissionManager.java | 2 +- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 2 ++ src/plugin.yml | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index a021ed6f3..aa5caebe7 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -58,7 +58,7 @@ public Map getGroups() { public PermissionGroup getDefaultGroup() { if (defaultGroup == null) - defaultGroup = groups.get(Residence.getInstance().getConfigManager().getDefaultGroup()); + defaultGroup = groups.get(Residence.getInstance().getConfigManager().getDefaultGroup().toLowerCase()); return defaultGroup; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e46a8a5f3..13b35389b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1275,6 +1275,8 @@ public void performDelaydTp(final Location targloc, final Player targetPlayer, P Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { + if (targloc == null || targetPlayer == null || !targetPlayer.isOnline()) + return; if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) && plugin.getConfigManager().getTeleportDelay() > 0) return; else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) diff --git a/src/plugin.yml b/src/plugin.yml index d4e431f26..22ed7d812 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.6.1.0 +version: 4.6.1.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 118f61293b179066cc0965921a7b24ceecc5501f Mon Sep 17 00:00:00 2001 From: jiongjionger <17jiong@gmail.com> Date: Tue, 21 Feb 2017 12:35:33 +0800 Subject: [PATCH 0353/1142] Update Chinese.yml 100% translate language files --- src/Language/Chinese.yml | 1381 ++++++++++++++++++++++---------------- 1 file changed, 791 insertions(+), 590 deletions(-) diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml index 585d43dc3..4696badf3 100644 --- a/src/Language/Chinese.yml +++ b/src/Language/Chinese.yml @@ -33,10 +33,12 @@ Language: SubzoneCollision: '&c区域与领地å­åŒºåŸŸ &6%1 &c冲çª.' NonExist: '&c区域ä¸å­˜åœ¨.' InvalidName: '&c无效区域å...' - ToSmallTotal: '&cé€‰ä¸­çš„åŒºåŸŸè¿‡å° (&6%1&c)' ToSmallX: '&c选区 &6X &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' ToSmallY: '&c选区高度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' ToSmallZ: '&c选区 &6Z &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' + ToBigX: '&c你选择的 &6X &cåæ ‡ (&6%1&c) 太大了. &e请ä¿è¯é€‰æ‹©å¤§å°åœ¨ &6%2 &e之内' + ToBigY: '&c你选择的 &6Y &cåæ ‡ (&6%1&c) 太大了. &e请ä¿è¯é€‰æ‹©å¤§å°åœ¨ &6%2 &e之内' + ToBigZ: '&c你选择的 &6Z &cåæ ‡ (&6%1&c) 太大了. &e请ä¿è¯é€‰æ‹©å¤§å°åœ¨ &6%2 &e之内' Rename: '&e区域 &6%1 &e已被é‡å‘½å为 &6%2' Remove: '&e已删除区域 &6%1&e.' Name: '&eå称: &2%1' @@ -51,6 +53,7 @@ Language: Points: '&e执行命令å‰éœ€è¦å…ˆé€‰ä¸­ä¸¤ä¸ªé€‰å–点!' Overlap: '&c选å–点与区域 &6%1 &cé‡å !' WorldGuardOverlap: '&c选å–点与 WorldGuard 区域 &6%1 &cé‡å !' + KingdomsOverlap: '&c你选择的å标和 &6%1 &c王国的土地产生了冲çªï¼' Success: '&e选å–点æˆåŠŸ!' Fail: '&c无效的选择命令...' Bedrock: '&e将选区扩展到最大深度.' @@ -69,9 +72,9 @@ Language: Disabled: '&c你没有æƒé™ä½¿ç”¨é€‰æ‹©å‘½ä»¤.' Sign: Updated: '&6%1 &e木牌已更新!' - TopLine: '[market]' + TopLine: '[领地市场]' DateFormat: YY/MM/dd HH:mm - ForRentTopLine: '&8For Rent' + ForRentTopLine: '&8出租' ForRentPriceLine: '&8%1&f/&8%2&f/&8%3' ForRentResName: '&8%1' ForRentBottomLine: '&9å¯ç”¨' @@ -81,7 +84,7 @@ Language: RentedPriceLine: '&8%1&f/&8%2&f/&8%3' RentedResName: '&8%1' RentedBottomLine: '&1%1' - ForSaleTopLine: '&8For Sale' + ForSaleTopLine: '&8出售' ForSalePriceLine: '&8%1' ForSaleResName: '&8%1' ForSaleBottomLine: '&5å¯ç”¨' @@ -92,6 +95,8 @@ Language: CheckTrue: '&e玩家 &6%2 &e已在领地 &6%3 &e中将 &6%1 &eæƒé™è®¾ç½®ä¸º &6%4&e.' CheckFalse: '&e玩家 &6%2 &e没有在领地中设置 &6%1 &eæƒé™.' Cleared: '&eæƒé™å·²æ¸…除.' + RemovedAll: '&e玩家 &6%1 &e在 &6%2 &e领地内的所有æƒé™å‡å·²åˆ é™¤' + RemovedGroup: '&e用户组 &6%1 &e在 &6%2 &e领地内的所有æƒé™å‡å·²åˆ é™¤' Default: '&eæƒé™å·²æ¢å¤é»˜è®¤å€¼.' Deny: '&c你没有 &6%1 &cæƒé™.' SetDeny: '&c所有者ä¸èƒ½è®¾ç½® &6%1 &cæƒé™.' @@ -109,6 +114,7 @@ Language: CreateFail: '&c无法创建领地å­åŒºåŸŸ &6%1&c.' Exists: '&c领地å­åŒºåŸŸ &6%1 &c已存在.' Collide: '&c领地å­åŒºåŸŸä¸Ž &6%1 &c冲çª.' + MaxAmount: '&c已达到该å­é¢†åœ°çš„最大数é‡.' MaxDepth: '&c已达到领地å­åŒºåŸŸå…许的最大分区深度.' SelectInside: '&e两个选å–点必须都在åŒä¸€ä¸ªé¢†åœ°å†….' CantCreate: '&c你没有创建领地å­åŒºåŸŸçš„æƒé™.' @@ -119,6 +125,7 @@ Language: DeleteConfirm: '&e如果你确定è¦åˆ é™¤å­åŒºåŸŸ &6%1&e, 输入 &6/res confirm &eæ¥ç¡®è®¤æ“作.' OwnerChange: '&e已将å­åŒºåŸŸ &6%1 &e的所有者更改为 &6%2' Residence: + Hidden: ' &e(&6Hidden&e)' Bought: '&eæˆåŠŸè´­ä¹°é¢†åœ° &6%1' Buy: '&6%1 &e购买了你的 &6%2 &e领地.' BuyTooBig: '&c你无法购买尺寸这么大的领地.' @@ -135,17 +142,21 @@ Language: RemoveRentable: '&e领地 &6%1 &eä¸å†å¯å‡ºç§Ÿ.' ForRentSuccess: '&e领地 &6%1 &eå·²è¢«è®¾ç½®ä¸ºæ¯ &6%3 &e天以 &6%2 &e出租.' RentSuccess: '&e你租用了 &6%1 &e领地 &6%2 &e天.' + EndingRent: '&e租用时间已ç»è¿‡æœŸ &6%1 &eon &6%2' AlreadyRented: '&e领地 &6%1 &e已出租给 &6%2' + CantAutoPay: '&e领地ä¸å…许自动支付,已设置为 &6false' AlreadyExists: '&c已存在å称为 &6%1 &c的领地.' Create: '&e已创建领地 &6%1&e!' Rename: '&e领地 &6%1 &e已被é‡å‘½å为 &6%2' Remove: '&e领地 &6%1 &e已删除.' + CantRemove: '&c领地 &6%1 &c无法被删除,因为 &6%2 &cå­é¢†åœ°æ­£åœ¨è¢«å‡ºç§Ÿç»™çŽ©å®¶ &6%3' MoveDeny: '&c你没有领地 &6%1 &c的移动æƒé™.' TeleportNoFlag: '&c你没有该领地的传é€æƒé™.' FlagDeny: '&c你没有领地 &6%2 &cçš„ &6%1 &cæƒé™.' GiveLimits: '&c目标玩家超出é™åˆ¶, 无法给予领地.' Give: '&e你将领地 &6%1 &eé€ç»™äº† &6%2' Recieve: '&e你收到了 &6%2 &eé€ç»™ä½ çš„ &6%1 &e领地.' + ResList: ' &a%1. &e%2 &e- &6%3 %4&6%5' List: ' &a%1%2 &e- &6世界&e: &6%3' TeleportNear: '&e已传é€åˆ°é™„近的领地.' SetTeleportLocation: '&e设置传é€ä½ç½®.' @@ -169,17 +180,44 @@ Language: ParentNoPermission: '&c你没有æƒé™è®¾ç½®çˆ¶åŒºåŸŸ.' ChatDisabled: '&e领地内èŠå¤©å·²ç¦ç”¨.' DeleteConfirm: '&e如果你确定è¦åˆ é™¤é¢†åœ° &6%1&e, 输入 &6/res confirm &e以确认æ“作.' + ChangedMain: '&e已将主领地修改为 &6%1' + LwcRemoved: '&e已删除 &6%1 &eçš„LWCä¿æŠ¤ï¼Œè€—æ—¶ &6%2ms' + CanBeRented: '&6%1&e å¯ä»¥å‡ºç§Ÿç»™ &6%2 &eæ¯ &6%3 &e天. &6/res market rent' + CanBeBought: '&6%1&e å¯ä»¥å‡ºå”®ç»™ &6%2&e. &6/res market buy' + IsForRent: '&6(出租)' + IsForSale: '&6(出售)' + IsRented: '&6(已出租)' Rent: Disabled: '&c领地出租已ç¦ç”¨.' DisableRenew: '&e领地 &6%1 &eä¸ä¼šåœ¨ç§Ÿçº¦åˆ°æœŸæ—¶è‡ªåŠ¨ç»­æœŸ.' EnableRenew: '&e领地 &6%1 &e将会在租约到期时自动续期.' + NotByYou: '&c领地没有出租给你.' + isForRent: '&2这个领地å¯ä»¥è¢«ç§Ÿç”¨' + MaxRentDays: '&c你无法一次租用超过 &6%1 &c天' + OneTime: '&cä½ ç›®å‰æ— æ³•ç»­è´¹ç§Ÿç”¨æ—¶é•¿' + Extended: '&e租用时长增加了 &6%1 &e天给领地 &6%2' Expire: '&e租约到期时间: &6%1' + AutoPayTurnedOn: '&e自动支付设置为&2å¼€å¯' + AutoPayTurnedOff: '&e自动支付设置为 &c关闭' ModifyDeny: '&c无法修改租用的领地.' Days: '&e租用天数: &6%1' Rented: ' &6(已出租)' + RentList: ' &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7' + EvictConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤ç§Ÿç”¨é¢†åœ° &6%1' + UnrentConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤å–消租用领地 &6%1' + ReleaseConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤ä»Žå¸‚场内删除领地 &6%1' + command: + addedAllow: '&e增加了一个新的å…许的命令给 &6%1 &e领地' + removedAllow: '&e删除了一个å…许的命令给 &6%1 &e领地' + addedBlock: '&e增加了一个新的ç¦ç”¨çš„命令给 &6%1 &e领地' + removedBlock: '&e删除了一个ç¦ç”¨çš„命令给 &6%1 &e领地' + Blocked: '&eç¦ç”¨çš„命令: &6%1' + Allowed: '&eå…许的命令: &6%1' Rentable: Land: '&e出租领地: &6' - AutoRenew: '&e自动更新租用状æ€: &6%1' + AllowRenewing: '&eå¯ä»¥ç»­è´¹: &6%1' + StayInMarket: '&eå¯ä»¥å‡ºç§Ÿ: &6%1' + AllowAutoPay: '&eå¯ä»¥è‡ªåŠ¨æ”¯ä»˜: &6%1' DisableRenew: '&6%1 &eä¸ä¼šåœ¨åˆ°æœŸæ—¶è‡ªåŠ¨æ›´æ–°ç§Ÿç”¨çŠ¶æ€.' EnableRenew: '&6%1 &e将会在到期时自动更新租用状æ€.' Economy: @@ -190,7 +228,11 @@ Language: MoneyCredit: '&eä½ çš„ &6%2 &e账户收入了 &6%1 &eå…ƒ.' RentReleaseInvalid: '&e领地 &6%1 &e没有被租用或者出租.' RentSellFail: '&c无法出售正在出租的领地.' + SubzoneRentSellFail: '&c无法出售领地,因为其中一个å­é¢†åœ°æ­£åœ¨å‡ºç§Ÿ' + ParentRentSellFail: '&c无法出租领地,因为其中的一部分正在出售/出租' + SubzoneSellFail: '&c无法出售一个å­é¢†åœ°' SellRentFail: '&c无法出租正在出售的领地.' + ParentSellRentFail: '&c由于这个领地的一部分正在被出售,所以无法出租' OwnerBuyFail: '&cä¸èƒ½è´­ä¹°è‡ªå·±çš„领地!' OwnerRentFail: '&cä¸èƒ½ç§Ÿç”¨è‡ªå·±çš„领地!' AlreadySellFail: '&e领地已在出售中!' @@ -201,6 +243,7 @@ Language: LeaseInfinite: '&e出租时间已设置为无é™.' MarketDisabled: '&c领地ç»æµŽå·²ç¦ç”¨!' SellAmount: '&e出售数é‡: &2%1' + SellList: ' &6%1&e. &6%2 &e(&6%3&e) - &6%4' LeaseExpire: '&e租约到期时间: &2%1' Expanding: North: '&eå‘北方扩展 &6%1 &e个方å—' @@ -233,8 +276,10 @@ Language: MaxNS: '&7- &eå—北方å‘最大:&3 %1' MaxUD: '&7- &e上下方å‘最大:&3 %1' MinMax: '&7- &e最å°/最大高度:&3 %1 到 %2' - MaxSub: '&7- &e最大分区深度:&3 %1' + MaxSubzones: '&7- &e最大å­é¢†åœ°æ•°é‡:&3 %1' + MaxSubDepth: '&7- &e最大å­é¢†åœ°æ·±åº¦:&3 %1' MaxRents: '&7- &e最多租用:&3 %1' + MaxRentDays: ' &e最大出租天数:&3 %1' EnterLeave: '&7- &eå¯è®¾ç½®åŠ å…¥ç¦»å¼€ä¿¡æ¯:&3 %1' NumberOwn: '&7- &e拥有的领地数é‡:&3 %1' Cost: '&7- &e领地æ¯æ–¹å—花费:&3 %1' @@ -257,6 +302,9 @@ Language: Page: '&e-----< &6%1 &e>-----' NextPage: '&e-----< &6%1 &e>-----' NoNextPage: '&e-----------------------' + GeneralList: '&2 %1 &6- &e%2' + FlagsList: '&2 %1 &6- &e%2' + Separator: '&6▬▬▬▬▬▬▬▬▬▬' Chat: ChatChannelChange: '&e领地èŠå¤©é¢‘é“已更改为 &6%1!' ChatChannelLeave: '&e离开领地èŠå¤©' @@ -281,10 +329,13 @@ Language: %1 DescChange: '&6æ述已更改为: %1' NewBoard: '&6æˆåŠŸæ·»åŠ å•†åº—宣传æ¿' + BoardExist: '&c商店宣传æ¿å·²ç»å­˜åœ¨' DeleteBoard: '&6å³å‡»è¦åˆ é™¤çš„宣传æ¿' DeletedBoard: '&6宣传æ¿å·²ç§»é™¤' IncorrectBoard: '&c宣传æ¿ä¸æ­£ç¡®, 请é‡æ–°ç‚¹å‡»æ­£ç¡®çš„宣传æ¿' InvalidSelection: '&c使用选å–工具, 先点击左上角的告示牌, å†ç‚¹å‡»å³ä¸‹è§’的告示牌' + ToBigSelection: '&c你选择的范围太大了,最大å…许16æ ¼' + ToDeapSelection: '&c你选择的太深了,最大å…许16X1X16' VoteChanged: '&6领地 &e%3 &6的评分由 &e%1 &6更改为 &e%2&6.' Voted: '&6ä½ ç»™ &e%2 &6评了 &e%1 &6分.' Liked: '&6你赞了 &e%1 &6领地.' @@ -307,9 +358,12 @@ Language: General: DisabledWorld: '&c该世界已ç¦ç”¨é¢†åœ°.' UseNumbers: '&c请输入数字.' + # Replace all text with '' to disable this message CantPlaceLava: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置岩浆.' + # Replace all text with '' to disable this message CantPlaceWater: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置水.' NoPermission: '&c你没有执行此æ“作的æƒé™.' + NoCmdPermission: '&c你没有æƒé™è¿™ä¹ˆåš' DefaultUsage: '&e输入 &6/%1 ? &e查看帮助信æ¯' MaterialGet: '&eID &6%1 &eçš„ææ–™å称为 &6%2' MarketList: '&e---- &6市场列表 &e----' @@ -326,6 +380,8 @@ Language: TeleportSuccess: '&e已传é€!' TeleportConfirm: '&cä¼ é€ä¸å®‰å…¨, ä½ å°†æ‘”è½ &6%1 &c个方å—. 如果ä»è¦ä¼ é€, 输入 &6/res tpconfirm &c确认.' TeleportStarted: '&eå¼€å§‹å‘ &6%1 &eä¼ é€, 在 &6%2 &e秒内ä¸è¦ç§»åŠ¨.' + TeleportTitle: '&eä¼ é€ä¸­..' + TeleportTitleTime: '&6%1' TeleportCanceled: '&eä¼ é€è¢«å–消!' NoTeleportConfirm: '&e没有需è¦ç¡®è®¤çš„ä¼ é€è¯·æ±‚!' HelpPageHeader: '&e领地帮助 - &6%1 &e- é¡µé¢ <&6%2 &e/ &6%3&e>' @@ -334,13 +390,13 @@ Language: ListCreate: '&e已创建列表 &6%1' PhysicalAreas: '&e物ç†åŒºåŸŸ' CurrentArea: '&e当å‰åŒºåŸŸ: &6%1' - TotalSize: '&e总大å°: &6%1' + TotalResSize: '&e总大å°: &6%1m³ (%2m²)' TotalWorth: '&e总价值: &6%1 &e(&6%2&e)' + TotalSubzones: '&eå­é¢†åœ°æ•°é‡: &6%1 &e(&6%2&e)' NotOnline: '&e目标玩家ä¸åœ¨çº¿.' - NextPage: '&e下一页' NextInfoPage: '&2| &e下一页 &2>>>' PrevInfoPage: '&2<<< &e上一页 &2|' - GenericPage: '&e第 &6%1 &e页, å…± &6%2' + GenericPages: '&e页数 &6%1 &e/ &6%2 &e(&6%3&e)' WorldEditNotFound: '&c未检测到 WorldEdit.' CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' @@ -361,14 +417,15 @@ Language: Status: '&e状æ€: %1' Available: '&2å¯ç”¨' Size: ' &e大å°: &6%1' - Flags: '&eæƒé™: &6%1' - YourFlags: '&eä½ çš„æƒé™: &6%1' + ResidenceFlags: '&e领地公共æƒé™: &6%1' + PlayersFlags: '&e玩家æƒé™: &6%1' GroupFlags: '&e组æƒé™: &6%1' OthersFlags: '&e其他人æƒé™: &6%1' Moved: '&e已移动.' Name: '&eå称: &6%1' Lists: '&e列表: &6' Residences: '&e领地&6' + CreatedOn: '&e建造于: &6%1' Owner: '&e所有者: &6%1' World: '&e世界: &6%1' Subzones: '&eå­åŒºåŸŸ' @@ -383,6 +440,10 @@ CommandHelp: Info: - '&2输入 &6/res [命令] ? <页ç > &2查看更多信æ¯.' SubCommands: + auto: + Description: 自动在你站ç€çš„ä½ç½®ä¸ºä¸­å¿ƒï¼Œåˆ›å»ºä½ èƒ½åˆ›å»ºæœ€å¤§çš„领地 + Info: + - '&e用法: &6/res auto (领地åå­—) (范围)' select: Description: 选å–命令 Info: @@ -401,7 +462,6 @@ CommandHelp: Description: 打开自动选择工具 Info: - '&e用法: &6/res select auto [玩家]' - Args: '[playername]' cost: Description: 显示已选择区域的价格 Info: @@ -441,244 +501,475 @@ CommandHelp: Info: - '&e用法: &6/res select residence <领地>' - 选择 <领地> 中一个存在的区域 - Args: '[residence]' worldedit: Description: 采用 WorldEdit 的选区 Info: - '&e用法: &6/res select worldedit' - å°† WorldEdit ç›®å‰çš„选区作为领地选区 - create: - Description: 创建领地 - Info: - - '&e用法: &6/res create <领地å>' - remove: - Description: 删除领地 - Info: - - '&e用法: &6/res remove <领地å>' - Args: '[residence]' padd: Description: å‘领地添加玩家 Info: - '&e用法: &6/res padd <领地å> [玩家]' - 为玩家添加基本æƒé™ - Args: '[residence] [playername]' - pdel: - Description: 从领地删除玩家 + signconvert: + Description: å°† ResidenceSign 的告示牌转æ¢ä¸ºæ–°æ ¼å¼ Info: - - '&e用法: &6/res pdel <领地å> [玩家]' - - 删除玩家的基本æƒé™ - Args: '[residence] [playername]' - give: - Description: 给予一å玩家领地. + - '&e用法: &6/res signconvert' + - å°è¯•è½¬æ¢å·²æœ‰çš„ ResidenceSign 告示牌 + listallhidden: + Description: 显示所有éšè—领地 Info: - - '&e用法: &6/res give <领地å> [玩家]' - - 将你拥有的æŸä¸ªé¢†åœ°èµ ä¸ŽæŸçŽ©å®¶ - Args: '[residence] [playername]' + - '&e用法: &6/res listhidden <页ç >' + - 显示所有玩家的éšè—领地 + bank: + Description: 管ç†é¢†åœ°é“¶è¡Œ + Info: + - '&e用法: &6/res bank [deposit/withdraw] <领地> [æ•°é¢]' + - 你必须站在领地中或者指定领地åå­— + - 你必须拥有 +bank æƒé™ + create: + Description: 创建领地 + Info: + - '&e用法: &6/res create <领地å>' + listall: + Description: 显示所有领地 + Info: + - '&e用法: &6/res listall <页ç >' + - 显示所有玩家的领地 info: Description: æ˜¾ç¤ºä¸€ä¸ªé¢†åœ°çš„ä¿¡æ¯ Info: - '&e用法: &6/res info <领地>' - 留空 <领地> 表示显示你目å‰æ‰€åœ¨çš„é¢†åœ°ä¿¡æ¯ - Args: '[residence]' - set: - Description: 为领地设置默认æƒé™ + area: + Description: 管ç†é¢†åœ°ç‰©ç†åŒºåŸŸ + SubCommands: + list: + Description: 列出领地的物ç†åŒºåŸŸ + Info: + - '&e用法: &6/res area list [领地] <页ç >' + listall: + Description: 列出所有区域的åæ ‡å’Œè¯¦ç»†ä¿¡æ¯ + Info: + - '&e用法: &6/res area listall [领地] <页ç >' + add: + Description: 为领地添加物ç†åŒºåŸŸ + Info: + - '&e用法: &6/res area add [领地] [区域ID]' + - 你必须先选中两个选å–点 + remove: + Description: 移除领地的物ç†åŒºåŸŸ + Info: + - '&e用法: &6/res area remove [领地] [区域ID]' + replace: + Description: 替æ¢é¢†åœ°çš„物ç†åŒºåŸŸ + Info: + - '&e用法: &6/res area replace [领地] [区域ID]' + - 你必须先选中两个选å–点 + - 如果新的区域更大, 二者之间将会被充满 + give: + Description: 给予一å玩家领地. Info: - - '&e用法: &6/res set <领地> [æƒé™] [true/false/remove]' - - 输入 /res flags ? 查看æƒé™åˆ—表 - - 如果没有为æŸçŽ©å®¶æŒ‡å®šè¯¥é¢†åœ°çš„特定æƒé™, 那么这å玩家将会拥有这些默认æƒé™. (å‚è§ /res pset ?) - Args: '[residence] [flag] [true/false/remove]' - pset: - Description: 为æŸçŽ©å®¶è®¾å®šè¯¥é¢†åœ°çš„特定æƒé™ + - '&e用法: &6/res give <领地å> [玩家]' + - 将你拥有的æŸä¸ªé¢†åœ°èµ ä¸ŽæŸçŽ©å®¶ + renamearea: + Description: 修改领地åå­— Info: - - '&e用法: &6/res pset <领地> [玩家] [æƒé™] [true/false/remove]' - - '&e用法: &6/res pset <领地> [玩家] removeall' + - '&e用法: &6/res removeworld [领地] [æ—§åå­—] [æ–°åå­—]' + contract: + Description: 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ° + Info: + - '&e用法: &6/res contract (领地) [缩å°å•ä½]' + - 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ°è§„模 + - 领地å字是å¯é€‰çš„ + check: + Description: 检查æƒé™çŠ¶æ€ + Info: + - '&e用法: &6/res check [领地] [æƒé™] (玩家åå­—)' + gset: + Description: 为æŸä¸ªç»„设置领地的特定æƒé™ + Info: + - '&e用法: &6/res gset <领地> [组] [æƒé™] [true/false/remove]' - 输入 /res flags ? 查看æƒé™åˆ—表 - Args: '[residence] [playername] [flag] [true/false/remove]' - flags: - Description: 领地æƒé™åˆ—表 + list: + Description: 显示领地列表 Info: - - 对于大部分æƒé™æ¥è¯´, true 表示å…许, false 表示ç¦æ­¢è¿™ä¸€æ“作 + - '&e用法: &6/res list <玩家> <页ç >' + - 列出指定玩家拥有的所有领地 (除了éšè—领地) + - 如果显示自己的领地, éšè—领地也会被显示 + - è¦åˆ—出所有玩家的领地, 使用 /res listall 命令 + version: + Description: 显示 领地 的版本 + Info: + - '&e用法: &6/res version' + tool: + Description: 显示领地圈地和查看信æ¯çš„工具类型 + Info: + - '&e用法: &6/res tool' + pdel: + Description: 从领地删除玩家 + Info: + - '&e用法: &6/res pdel <领地å> [玩家]' + - 删除玩家的基本æƒé™ + market: + Description: è´­ä¹°, 出售和出租领地 + Info: + - '&e用法: &6/res market ? for more Info' SubCommands: - build: - Description: å…许或ç¦æ­¢å»ºé€  - Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - use: - Description: å…许或ç¦æ­¢ä½¿ç”¨é—¨, 拉æ†, 按钮等... + Info: + Description: 查看领地的ç»æµŽä¿¡æ¯ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - move: - Description: å…许或ç¦æ­¢ç§»åŠ¨ + - '&e用法: &6/res market Info [领地]' + - 显示领地是å¦æ­£åœ¨å‡ºç§Ÿæˆ–出售, 以åŠé¢†åœ°çš„花费 + list: + Description: 显示å¯å‡ºç§Ÿä¸Žå¯å‡ºå”®çš„领地 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - container: - Description: å…许或ç¦æ­¢ä½¿ç”¨ç†”炉, ç®±å­, å‘射器等... + - '&e用法: &6/res market list' + SubCommands: + rent: + Description: 列举å¯ä»¥ç§Ÿç”¨çš„领地 + Info: + - '&e用法: &6/res market list rent' + sell: + Description: 列举å¯ä»¥å‡ºå”®çš„领地 + Info: + - '&e用法: &6/res market list sell' + sell: + Description: 出售一个领地 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - trusted: - Description: 给予 build, use, move, container å’Œ tp æƒé™ + - '&e用法: &6/res market sell [领地] [售价]' + - 将领地以 [amount] 元的价格出售 + - 其他玩家å¯ä»¥æ‰§è¡Œ /res market buy 命令购买 + sign: + Description: 设置市场木牌 Info: - - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' - place: - Description: åªå…许或ç¦æ­¢æ”¾ç½®æ–¹å—, 该æƒé™è¦†ç›– build æƒé™ + - '&e用法: &6/res market sign [领地]' + - 将看å‘的木牌设置为领地市场木牌 + buy: + Description: 购买一个领地 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - destroy: - Description: åªå…许或ç¦æ­¢ç ´åæ–¹å—, 该æƒé™è¦†ç›– build æƒé™ + - '&e用法: &6/res market buy [领地]' + - 如果该领地正在出售, 则购买这个领地 + unsell: + Description: å–消出售领地 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - pvp: - Description: å…许或ç¦æ­¢é¢†åœ°å†… PVP + - '&e用法: &6/res market unsell [领地]' + rent: + Description: 租用一个领地 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - tp: - Description: å…许或ç¦æ­¢ä¼ é€è‡³æ­¤é¢†åœ° + - '&e用法: &6/res market rent [领地] <自动续租>' + - 租用一个领地. <自动续租> å¯ä»¥æ˜¯ true 或 false. 如果是 true, 并且领地所有者å…许, 领地将会在租约到期之å‰è‡ªåŠ¨ç»­ç§Ÿ + rentable: + Description: 将领地设置为å¯å‡ºç§Ÿ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - enderpearl: - Description: å…许或ç¦æ­¢ç”¨æœ«å½±çç ä¼ é€è‡³æ­¤é¢†åœ° + - '&e用法: &6/res market rentable [领地] [ä»·æ ¼] [天数] <周期>' + - 以 [ä»·æ ¼] 出租领地 [天数] 天. 如果 <周期> 为 true, 领地将会在租约结æŸåŽè‡ªåŠ¨å‡ºç§Ÿ. + autopay: + Description: 开关领地自动支付 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - admin: - Description: 玩家å¯ä»¥æ›´æ”¹é¢†åœ°æƒé™ + - '&e用法: &6/res market autopay <领地> [true/false]' + payrent: + Description: 支付租用的领地 Info: - - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' - subzone: - Description: å…许玩家建立领地å­åŒºåŸŸ + - '&e用法: &6/res market payrent <领地>' + confirm: + Description: 领地市场的确认æ“作 Info: - - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' - monsters: - Description: å…许或ç¦æ­¢æ€ªç‰©ç”Ÿæˆ + - '&e用法: &6/res market confirm' + release: + Description: å–消领地租èµçŠ¶æ€ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - cmonsters: - Description: å…许或ç¦æ­¢è‡ªå®šä¹‰æ€ªç‰©ç”Ÿæˆ + - '&e用法: &6/res market release [领地]' + - 如果你是租用者, 该命令将会退租领地 + - 如果你是所有者, 该命令将会收回领地 + rc: + Description: 加入当å‰æˆ–者指定的领地èŠå¤©é¢‘é“ + Info: + - '&e用法: &6/res rc (领地)' + - 加入当å‰é¢†åœ°æˆ–者指定领地的èŠå¤©é¢‘é“ + SubCommands: + leave: + Description: 离开当å‰é¢‘é“ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - smonsters: - Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼å’Œåˆ·æ€ªè›‹ç”Ÿæˆæ€ªç‰© + - '&e用法: &6/res rc leave' + - 如果你在一个领地频é“内, ä½ å°†ä¼šç¦»å¼€æ­¤é¢‘é“ + setcolor: + Description: 设置领地频é“文字颜色 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - nmonsters: - Description: å…许或ç¦æ­¢è‡ªç„¶ç”Ÿæˆæ€ªç‰© + - '&e用法: &6/res rc setcolor [颜色代ç ]' + - 设置领地频é“文字颜色 + setprefix: + Description: 设置领地频é“å‰ç¼€ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - animals: - Description: å…许或ç¦æ­¢åŠ¨ç‰©ç”Ÿæˆ + - '&e用法: &6/res rc setprefix [æ–°å‰ç¼€]' + - 设置领地频é“å‰ç¼€ + kick: + Description: 从频é“中踢出玩家 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - canimals: - Description: å…许或ç¦æ­¢è‡ªå®šä¹‰åŠ¨ç‰©ç”Ÿæˆ + - '&e用法: &6/res rc kick [玩家]' + - 从领地频é“中踢出æŸçŽ©å®¶ + expand: + Description: å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地 + Info: + - '&e用法: &6/res expand (领地) [扩展å•ä½]' + - å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地规模 + - 领地å字是å¯é€‰çš„ + compass: + Description: 设置指å—者指å‘领地 + Info: + - '&e用法: &6/res compass <领地åå­—>' + lists: + Description: 预定义æƒé™åˆ—表 + Info: + - 预定义的æƒé™åˆ—表å¯ä»¥åº”用到领地上 + SubCommands: + add: + Description: 添加一个列表 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - sanimals: - Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼å’Œåˆ·æ€ªè›‹ç”ŸæˆåŠ¨ç‰© + - '&e用法: &6/res lists add <列表å>' + remove: + Description: 删除一个列表 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - nanimals: - Description: å…许或ç¦æ­¢è‡ªç„¶ç”ŸæˆåŠ¨ç‰© + - '&e用法: &6/res lists remove <列表å>' + apply: + Description: 将列表应用于领地 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - animalkilling: - Description: å…许或ç¦æ­¢å‡»æ€åŠ¨ç‰© + - '&e用法: &6/res lists apply <列表å> <领地>' + set: + Description: 设置列表全局æƒé™ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - mobkilling: - Description: å…许或ç¦æ­¢å‡»æ€æ€ªç‰© + - '&e用法: &6/res lists set <列表å> <æƒé™> <值>' + pset: + Description: 设置列表玩家æƒé™ + Info: + - '&e用法: &6/res lists pset <列表å> <玩家> <æƒé™> <值>' + gset: + Description: 设置列表组æƒé™ + Info: + - '&e用法: &6/res lists view <列表å>' + view: + Description: 查看列表 + Info: + - '&eUsage: &6/res lists view <列表å>' + reset: + Description: 将领地设置还原为默认值 + Info: + - '&e用法: &6/res reset <领地>' + - 将领地的所有æƒé™é‡ç½®. 你必须是领地所有者或者管ç†å‘˜ + listhidden: + Description: 显示éšè—领地列表 + Info: + - '&e用法: &6/res listhidden <玩家> <页ç >' + - 列出指定玩家拥有的éšè—领地 + resbank: + Description: 从领地银行借贷 + Info: + - '&e用法: &6/res resbank [deposit/withdraw] [æ•°é‡]' + setmain: + Description: 设置主领地 + Info: + - '&e用法: &6/res setmain (领地åå­—)' + server: + Description: 创建æœåŠ¡å™¨é¢†åœ° + Info: + - '&e用法: &6/resadmin server [领地]' + - 创建一个属于æœåŠ¡å™¨æ‰€æœ‰çš„领地 + rt: + Description: ä¼ é€åˆ°ä¸–界上的éšæœºä½ç½® + Info: + - '&e用法: &6/res rt' + - 将你传é€åˆ°ä¸–界上的éšæœºä½ç½® + mirror: + Description: é•œåƒæƒé™ + Info: + - '&e查看 &6/res market ? 获å–帮助' + shop: + Description: 管ç†é¢†åœ°å•†åº— + Info: + - 管ç†é¢†åœ°çš„商店功能 + SubCommands: + list: + Description: 显示领地商店列表 + Info: + - '&e用法: &6/res shop list' + - 显示所有作为商店的领地 + vote: + Description: 为领地商店评分 + Info: + - '&e用法: &6/res shop vote <领地> [分数]' + - 为当å‰æˆ–指定领地商店评分 + like: + Description: 为领地商店点赞 + Info: + - '&e用法: &6/res shop like <领地>' + - 为领地商店点一个赞 + votes: + Description: 显示领地商店评分 + Info: + - '&e用法: &6/res shop votes <领地> <页ç >' + - 显示当å‰æˆ–指定领地商店的评分列表 + likes: + Description: 显示领地商店的赞 + Info: + - '&e用法: &6/res shop likes <领地> <页ç >' + - 显示当å‰æˆ–指定领地商店的赞列表 + setdesc: + Description: 设置领地商店æè¿° + Info: + - '&e用法: &6/res shop setdesc [æ述文字]' + - 设置领地商店æè¿°, 支æŒé¢œè‰²ä»£ç , 用 /n 表示æ¢è¡Œ + createboard: + Description: åˆ›å»ºå•†åº—å®£ä¼ æ¿ + Info: + - '&e用法: &6/res shop createboard [ä½ç½®]' + - 在选区ä½ç½®å»ºç«‹å•†åº—宣传æ¿. [ä½ç½®] 表示宣传æ¿çš„起始ä½ç½® + deleteboard: + Description: åˆ é™¤å•†åº—å®£ä¼ æ¿ + Info: + - '&e用法: &6/res shop deleteboard' + - å³å‡»å®£ä¼ æ¿çš„å‘Šç¤ºç‰Œä»¥åˆ é™¤å®£ä¼ æ¿ + lset: + Description: 更改黑åå•å’Œå¿½ç•¥åå•é€‰é¡¹ + Info: + - '&e用法: &6/res lset <领地> [blacklist/ignorelist] [ææ–™]' + - '&e用法: &6/res lset <领地> Info' + - å°†æŸç‰©å“加入黑åå•ä»¥é˜»æ­¢è¿™ç§ç‰©å“被放置在领地中 + - 忽略åå•ä¸­çš„物å“å°†ä¸ä¼šè¢«é¢†åœ°ä¿æŠ¤ + pset: + Description: 为æŸçŽ©å®¶è®¾å®šè¯¥é¢†åœ°çš„特定æƒé™ + Info: + - '&e用法: &6/res pset <领地> [玩家] [æƒé™] [true/false/remove]' + - '&e用法: &6/res pset <领地> [玩家] removeall' + - 输入 /res flags ? 查看æƒé™åˆ—表 + show: + Description: 显示领地的边界 + Info: + - '&e用法: &6/res show <领地>' + flags: + Description: 领地æƒé™åˆ—表 + Info: + - 对于大部分æƒé™æ¥è¯´, true 表示å…许, false 表示ç¦æ­¢è¿™ä¸€æ“作 + SubCommands: + anvil: + Description: å…许或ç¦æ­¢ä½¿ç”¨é“ç § + Info: + - '&e用法: &6/res set/pset <领地> anvil true/false/remove' + admin: + Description: 玩家å¯ä»¥æ›´æ”¹é¢†åœ°æƒé™ + Info: + - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' + animalkilling: + Description: å…许或ç¦æ­¢å‡»æ€åŠ¨ç‰© Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - nofly: - Description: å…许或ç¦æ­¢é£žè¡Œ + animals: + Description: å…许或ç¦æ­¢åŠ¨ç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + backup: + Description: 设置为Trueå¯ä»¥æ¢å¤åˆ°ä»¥å‰çš„备份 (需è¦WordEdit) + Info: + - '&e用法: &6/res set <领地> backup true/false/remove' + bank: + Description: å…许或ç¦æ­¢ä½¿ç”¨é¢†åœ°é“¶è¡Œ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + bed: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - vehicledestroy: - Description: å…许或ç¦æ­¢ç ´å载具 + beacon: + Description: å…许或者ç¦æ­¢çŽ©å®¶ä½¿ç”¨ä¿¡æ ‡ + Info: + - '&e用法: &6/res set/pset <领地> beacon true/false/remove' + brew: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é…¿é€ å° Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - shear: - Description: å…许或ç¦æ­¢å‰ªç¾Šæ¯› + build: + Description: å…许或ç¦æ­¢å»ºé€  Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - dye: - Description: å…许或ç¦æ­¢ä¸ºç¾Šæ¯›æŸ“色 + burn: + Description: å…许或ç¦æ­¢æ€ªç‰©ç‡ƒçƒ§ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + button: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰é’® Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - leash: - Description: å…许或ç¦æ­¢ç‰µå¼•åŠ¨ç‰© + cake: + Description: å…许或ç¦æ­¢çŽ©å®¶åƒè›‹ç³• Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - healing: - Description: 为领地内的玩家治疗 + canimals: + Description: å…许或ç¦æ­¢è‡ªå®šä¹‰åŠ¨ç‰©ç”Ÿæˆ Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - feed: - Description: 为领地内的玩家æ¢å¤é¥±é£Ÿ + chorustp: + Description: å…许或者ç¦æ­¢çŽ©å®¶ä½¿ç”¨ç´«å½±æžœ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - tnt: - Description: å…许或ç¦æ­¢ TNT 爆炸 + - '&e用法: &6/res set/pset <领地> chorustp true/false/remove' + chat: + Description: å…许加入领地èŠå¤©é¢‘é“ Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - creeper: - Description: å…许或ç¦æ­¢çˆ¬è¡Œè€…爆炸 + cmonsters: + Description: å…许或ç¦æ­¢è‡ªå®šä¹‰æ€ªç‰©ç”Ÿæˆ Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - ignite: - Description: å…许或ç¦æ­¢ç‚¹ç« - Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - firespread: - Description: å…许或ç¦æ­¢ç«ç„°è”“延 + commandblock: + Description: å…许或ç¦æ­¢ä½¿ç”¨å‘½ä»¤æ–¹å— Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - bucket: - Description: å…许或ç¦æ­¢ä½¿ç”¨æ¡¶ + - '&e用法: &6/res set/pset <领地> commandblock true/false/remove' + command: + Description: å…许或ç¦æ­¢æ‰§è¡Œå‘½ä»¤ Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - bucketfill: - Description: å…许或ç¦æ­¢ä½¿ç”¨æ¡¶ç››è£… + container: + Description: å…许或ç¦æ­¢ä½¿ç”¨ç†”炉, ç®±å­, å‘射器等... Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - bucketempty: - Description: å…许或ç¦æ­¢ä½¿ç”¨æ¡¶å€¾å€’ + coords: + Description: éšè—领地的åæ ‡ + Info: + - '&e用法: &6/res set <领地> coords true/false/remove' + craft: + Description: 给予 table, enchant å’Œ brew æƒé™ Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - flow: - Description: å…许或ç¦æ­¢æ¶²ä½“æµåŠ¨ + creeper: + Description: å…许或ç¦æ­¢çˆ¬è¡Œè€…爆炸 Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - lavaflow: - Description: å…许或ç¦æ­¢å²©æµ†æµåŠ¨, 该æƒé™è¦†ç›– flow æƒé™ + dragongrief: + Description: 防止末影龙破åæ–¹å— Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - waterflow: - Description: å…许或ç¦æ­¢æ°´æµåŠ¨, 该æƒé™è¦†ç›– flow æƒé™ + day: + Description: 领地ä¿æŒç™½å¤© Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + dye: + Description: å…许或ç¦æ­¢ä¸ºç¾Šæ¯›æŸ“色 + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' damage: Description: å…许或ç¦æ­¢æ‰€æœ‰å®žä½“伤害 Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - piston: - Description: å…许或ç¦æ­¢æ´»å¡žæŽ¨æ‹‰æ–¹å— - Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - hidden: - Description: 在 list 或 listall 命令中éšè—此领地 - Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - cake: - Description: å…许或ç¦æ­¢çŽ©å®¶åƒè›‹ç³• + decay: + Description: å…许或者ç¦æ­¢æ ‘å¶å‡‹æ• Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - lever: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æ‹‰æ† + - '&e用法: &6/res set <领地> decay true/false/remove' + destroy: + Description: åªå…许或ç¦æ­¢ç ´åæ–¹å—, 该æƒé™è¦†ç›– build æƒé™ Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - button: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰é’® + dryup: + Description: ä¿æŠ¤è€•åœ°å¤±åŽ»æ°´åˆ† Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e用法: &6/res set <领地> dryup true/false/remove' diode: Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨çº¢çŸ³ä¸­ç»§å™¨ Info: @@ -687,70 +978,98 @@ CommandHelp: Description: å…许或ç¦æ­¢çŽ©å®¶å¼€å…³é—¨å’Œæ´»æ¿é—¨ Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - table: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° + egg: + Description: å…许或ç¦æ­¢ç‚¹å‡»æœ«å½±é¾™è›‹ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e用法: &6/res set/pset <领地> egg true/false/remove' enchant: Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - brew: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é…¿é€ å° + explode: + Description: å…许或ç¦æ­¢çˆ†ç‚¸ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - bed: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + enderpearl: + Description: å…许或ç¦æ­¢ç”¨æœ«å½±çç ä¼ é€è‡³æ­¤é¢†åœ° Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - pressure: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åŽ‹åŠ›æ¿ + fallinprotection: + Description: 防止掉è½çš„æ–¹å—进入领地 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - note: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³ç¬¦ç›’ + - '&e用法: &6/res set <领地> fallinprotection true/false/remove' + falldamage: + Description: 开关玩家å è½ä¼¤å®³ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - redstone: - Description: 给予 lever, diode, button, pressure å’Œ note æƒé™ + - '&e用法: &6/res set <领地> falldamage true/false/remove' + feed: + Description: 为领地内的玩家æ¢å¤é¥±é£Ÿ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - craft: - Description: 给予 table, enchant å’Œ brew æƒé™ + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + fireball: + Description: å…许或ç¦æ­¢ç«ç„°å¼¹ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - trample: - Description: å…许或ç¦æ­¢è¸©å耕地 + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + firespread: + Description: å…许或ç¦æ­¢ç«ç„°è”“延 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - trade: - Description: å…许或ç¦æ­¢æ‘民交易 + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + flowinprotection: + Description: å…许或ç¦æ­¢æ¶²ä½“æµå…¥é¢†åœ° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - nomobs: - Description: å…许或ç¦æ­¢æ€ªç‰©è¿›å…¥é¢†åœ° + - '&e用法: &6/res set <领地> flowinprotection true/false/remove' + flow: + Description: å…许或ç¦æ­¢æ¶²ä½“æµåŠ¨ Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - explode: - Description: å…许或ç¦æ­¢çˆ†ç‚¸ + flowerpot: + Description: å…许或ç¦æ­¢ç‚¹å‡»èŠ±ç›† Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - witherdamage: - Description: ç¦æ­¢å‡‹çµé€ æˆä¼¤å®³ + - '&e用法: &6/res set/pset <领地> flowerpot true/false/remove' + grow: + Description: å…许或ç¦æ­¢ä½œç‰©ç”Ÿé•¿ + Info: + - '&e用法: &6/res set <领地> grow true/false/remove' + glow: + Description: 玩家进入领地会有å‘光效果 + Info: + - '&e用法: &6/res set <领地> glow true/false/remove' + hotfloor: + Description: 开关岩浆å—的伤害 + Info: + - '&e用法: &6/res set <领地> hotfloor true/false/remove' + hidden: + Description: 在 list 或 listall 命令中éšè—此领地 Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - fireball: - Description: å…许或ç¦æ­¢ç«ç„°å¼¹ + hook: + Description: å…许或ç¦æ­¢ä½¿ç”¨é±¼ç«¿æ”»å‡»å®žä½“ + Info: + - '&e用法: &6/res set/pset <领地> hook true/false/remove' + healing: + Description: 为领地内的玩家治疗 Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - command: - Description: å…许或ç¦æ­¢æ‰§è¡Œå‘½ä»¤ + iceform: + Description: 阻止冰霜行者魔咒å‘挥作用 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + icemelt: + Description: 开关冰的èžåŒ– + Info: + - '&e用法: &6/res set <领地> icemelt true/false/remove' + ignite: + Description: å…许或ç¦æ­¢ç‚¹ç« Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - overridepvp: - Description: 覆盖任何æ’件的 PVP ä¿æŠ¤ + jump2: + Description: å…许跳2格高 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e用法: &6/res set jump2 true/false/remove' + jump3: + Description: å…许跳3格高 + Info: + - '&e用法: &6/res set jump3 true/false/remove' keepinv: Description: 玩家死亡ä¸ä¼šæŽ‰è½ç‰©å“ Info: @@ -759,54 +1078,102 @@ CommandHelp: Description: 玩家死亡ä¸ä¼šæŸå¤±ç»éªŒ Info: - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - burn: - Description: å…许或ç¦æ­¢æ€ªç‰©ç‡ƒçƒ§ + lavaflow: + Description: å…许或ç¦æ­¢å²©æµ†æµåŠ¨, 该æƒé™è¦†ç›– flow æƒé™ Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - bank: - Description: å…许或ç¦æ­¢ä½¿ç”¨é¢†åœ°é“¶è¡Œ + leash: + Description: å…许或ç¦æ­¢ç‰µå¼•åŠ¨ç‰© + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + lever: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æ‹‰æ† + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + mobexpdrop: + Description: 怪物死亡ä¸ä¼šæŽ‰è½ç»éªŒ Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - shop: - Description: 将领地设置为商店 + mobitemdrop: + Description: 怪物死亡ä¸ä¼šæŽ‰è½ç‰©å“ Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - day: - Description: 领地ä¿æŒç™½å¤© + mobkilling: + Description: å…许或ç¦æ­¢å‡»æ€æ€ªç‰© + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + monsters: + Description: å…许或ç¦æ­¢æ€ªç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + move: + Description: å…许或ç¦æ­¢ç§»åŠ¨ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + nanimals: + Description: å…许或ç¦æ­¢è‡ªç„¶ç”ŸæˆåŠ¨ç‰© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + nmonsters: + Description: å…许或ç¦æ­¢è‡ªç„¶ç”Ÿæˆæ€ªç‰© Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' night: Description: 领地ä¿æŒå¤œé—´ Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - chat: - Description: å…许加入领地èŠå¤©é¢‘é“ + nofly: + Description: å…许或ç¦æ­¢é£žè¡Œ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + fly: + Description: è®¾ç½®é¢†åœ°å†…çš„çŽ©å®¶é£žè¡ŒçŠ¶æ€ + Info: + - '&e用法: &6/res set/pset <领地> fly true/false/remove' + nomobs: + Description: å…许或ç¦æ­¢æ€ªç‰©è¿›å…¥é¢†åœ° Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + note: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³ç¬¦ç›’ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' nodurability: Description: 物å“ä¸ä¼šæŸå¤±è€ä¹… Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - mobitemdrop: - Description: 怪物死亡ä¸ä¼šæŽ‰è½ç‰©å“ + overridepvp: + Description: 覆盖任何æ’件的 PVP ä¿æŠ¤ Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - mobexpdrop: - Description: 怪物死亡ä¸ä¼šæŽ‰è½ç»éªŒ + pressure: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åŽ‹åŠ›æ¿ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - dragongrief: - Description: 防止末影龙破åæ–¹å— + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + piston: + Description: å…许或ç¦æ­¢æ´»å¡žæŽ¨æ‹‰æ–¹å— Info: - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - snowtrail: - Description: 防止雪傀儡留下雪轨迹 + pistonprotection: + Description: å…许或者ç¦æ­¢æ´»å¡žä»Žé¢†åœ°å¤–æŽ¨åŠ¨é¢†åœ°å†…çš„æ–¹å— Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - iceform: - Description: 阻止冰霜行者魔咒å‘挥作用 + - '&e用法: &6/res set <领地> pistonprotection true/false/remove' + place: + Description: åªå…许或ç¦æ­¢æ”¾ç½®æ–¹å—, 该æƒé™è¦†ç›– build æƒé™ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + pvp: + Description: å…许或ç¦æ­¢é¢†åœ°å†… PVP + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + rain: + Description: 设置领地天气为下雨 + Info: + - '&e用法: &6/res set <领地> rain true/false/remove' + redstone: + Description: 给予 lever, diode, button, pressure å’Œ note æƒé™ Info: - - '&eUsage: &6/res set <领地> [æƒé™] true/false/remove' + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' respawn: Description: 自动é‡ç”ŸçŽ©å®¶ Info: @@ -814,12 +1181,173 @@ CommandHelp: riding: Description: 阻止骑乘马匹 Info: - - '&eUsage: &6/res set <领地> [æƒé™] true/false/remove' + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + shoot: + Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…射击 + Info: + - '&e用法: &6/res set <领地> shoot true/false/remove' + sun: + Description: 设置领地天气为晴天 + Info: + - '&e用法: &6/res set <领地> sun true/false/remove' + shop: + Description: 将领地设置为商店 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + snowtrail: + Description: 防止雪傀儡留下雪轨迹 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + spread: + Description: 防止方å—扩散 + Info: + - '&e用法: &6/res set <领地> spread true/false/remove' + snowball: + Description: 防止雪çƒå‡»é€€æ•ˆæžœ + Info: + - '&e用法: &6/res set <领地> snowball true/false/remove' + sanimals: + Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼å’Œåˆ·æ€ªè›‹ç”ŸæˆåŠ¨ç‰© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + shear: + Description: å…许或ç¦æ­¢å‰ªç¾Šæ¯› + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + smonsters: + Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼å’Œåˆ·æ€ªè›‹ç”Ÿæˆæ€ªç‰© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + subzone: + Description: å…许玩家建立领地å­åŒºåŸŸ + Info: + - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' + table: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + tnt: + Description: å…许或ç¦æ­¢ TNT 爆炸 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + tp: + Description: å…许或ç¦æ­¢ä¼ é€è‡³æ­¤é¢†åœ° + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + trade: + Description: å…许或ç¦æ­¢æ‘民交易 + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + trample: + Description: å…许或ç¦æ­¢è¸©å耕地 + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + trusted: + Description: 给予 build, use, move, container å’Œ tp æƒé™ + Info: + - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' + use: + Description: å…许或ç¦æ­¢ä½¿ç”¨é—¨, 拉æ†, 按钮等... + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + vehicledestroy: + Description: å…许或ç¦æ­¢ç ´å载具 + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + witherspawn: + Description: å…许或ç¦æ­¢å‡‹é›¶çš„ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> witherspawn true/false/remove' + witherdamage: + Description: ç¦æ­¢å‡‹çµé€ æˆä¼¤å®³ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + witherdestruction: + Description: å…许或ç¦æ­¢å‡‹é›¶ç ´åæ–¹å— + Info: + - '&e用法: &6/res set <领地> witherdestruction true/false/remove' + waterflow: + Description: å…许或ç¦æ­¢æ°´æµåŠ¨, 该æƒé™è¦†ç›– flow æƒé™ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + wspeed1: + Description: 设置领地内玩家的行走速度为 %1 + Info: + - '&e用法: &6/res set <领地> wspeed1 true/false/remove' + wspeed2: + Description: 设置领地内玩家的行走速度为 %1 + Info: + - '&e用法: &6/res set <领地> wspeed2 true/false/remove' + remove: + Description: 删除领地 + Info: + - '&e用法: &6/res remove <领地å>' + signupdate: + Description: 更新领地木牌 + Info: + - '&e用法: &6/res signupdate' + current: + Description: 显示你目å‰æ‰€åœ¨çš„领地 + Info: + - '&e用法: &6/res current' + reload: + Description: é‡è½½è¯­è¨€æˆ–é…置文件 + Info: + - '&e用法: &6/res reload [config/lang]' + setowner: + Description: 改å˜é¢†åœ°æ‰€æœ‰è€… + Info: + - '&e用法: &6/resadmin setowner [领地] [玩家]' + unstuck: + Description: ä¼ é€åˆ°é¢†åœ°å¤–é¢ + Info: + - '&e用法: &6/res unstuck' + subzone: + Description: 在领地中创建å­åŒºåŸŸ + Info: + - '&e用法: &6/res subzone <领地å> [å­åŒºåŸŸå]' + - 如果领地å留空, 将会å°è¯•åœ¨çŽ©å®¶æ‰€å¤„领地中建立å­åŒºåŸŸ + removeworld: + Description: 删除指定世界中的所有领地 + Info: + - '&e用法: &6/res removeworld [世界å]' + - åªèƒ½åœ¨æŽ§åˆ¶å°æ‰§è¡Œæ­¤å‘½ä»¤ limits: Description: 显示你的领地é™åˆ¶ Info: - '&e用法: &6/res limits' - 显示你在创建和管ç†é¢†åœ°æ–¹é¢çš„å„ç§é™åˆ¶ + set: + Description: 为领地设置默认æƒé™ + Info: + - '&e用法: &6/res set <领地> [æƒé™] [true/false/remove]' + - 输入 /res flags ? 查看æƒé™åˆ—表 + - 如果没有为æŸçŽ©å®¶æŒ‡å®šè¯¥é¢†åœ°çš„特定æƒé™, 那么这å玩家将会拥有这些默认æƒé™. (å‚è§ /res pset ?) + clearflags: + Description: 删除领地所有æƒé™ + Info: + - '&e用法: &6/res clearflags ' + message: + Description: 管ç†é¢†åœ°åŠ å…¥ / ç¦»å¼€æ¶ˆæ¯ + Info: + - '&e用法: &6/res message <领地> [enter/leave] [消æ¯]' + - 设置领地加入和离开的消æ¯æ–‡æœ¬ + - '&e用法: &6/res message <领地> remove [enter/leave]' + - 移除加入或离开的消æ¯æ–‡æœ¬ + command: + Description: 管ç†é¢†åœ°å…许或者ç¦æ­¢çš„命令 + Info: + - '&e用法: &6/res command <领地> ' + - 使用 _ æ¥è¡¨ç¤ºå¤šä¸ªå˜é‡ + confirm: + Description: 确认删除领地 + Info: + - '&e用法: &6/res confirm' + - 确认删除一个领地 + resadmin: + Description: 关闭或者开å¯é¢†åœ°ç®¡ç† + Info: + - '&e用法: &6/res resadmin [on/off]' tpset: Description: 设定领地的传é€ç‚¹ Info: @@ -827,384 +1355,71 @@ CommandHelp: - 该命令将会把你站的ä½ç½®è®¾ç½®ä¸ºé¢†åœ°çš„ä¼ é€ç‚¹ - 你必须站在一个领地里æ‰èƒ½ä½¿ç”¨è¿™ä¸ªå‘½ä»¤ - 你必须是领地的所有者或者拥有领地的 +admin æƒé™ - tp: - Description: ä¼ é€åˆ°ä¸€ä¸ªé¢†åœ° + tpconfirm: + Description: 忽略ä¸å®‰å…¨ä¼ é€è­¦å‘Š Info: - - '&e用法: &6/res tp [residence]' - - 将你传é€åˆ°ä¸€ä¸ªé¢†åœ°, 你必须是领地所有者或者拥有领地 +tp æƒé™ - - ä½ çš„æƒé™ç»„也必须在æœåŠ¡å™¨ä¸­æœ‰ä¼ é€æƒé™ - Args: '[residence]' - rt: - Description: ä¼ é€åˆ°ä¸–界上的éšæœºä½ç½® + - '&e用法: &6/res tpconfirm' + - 强制传é€åˆ°é¢†åœ°, 忽略传é€ä¸å®‰å…¨çš„警告 + removeall: + Description: 移除æŸçŽ©å®¶çš„所有领地 Info: - - '&e用法: &6/res rt' - - 将你传é€åˆ°ä¸–界上的éšæœºä½ç½® - rc: - Description: 加入当å‰æˆ–者指定的领地èŠå¤©é¢‘é“ + - '&e用法: &6/res removeall [所有者]' + - 移除特定玩家的所有领地 + - 如果是移除其他玩家的领地, 你必须有 /resadmin 命令æƒé™ + material: + Description: 检查æ质是å¦å­˜åœ¨å¯¹åº”çš„ID Info: - - '&e用法: &6/res rc (领地)' - - 加入当å‰é¢†åœ°æˆ–者指定领地的èŠå¤©é¢‘é“ - SubCommands: - leave: - Description: 离开当å‰é¢‘é“ - Info: - - '&e用法: &6/res rc leave' - - 如果你在一个领地频é“内, ä½ å°†ä¼šç¦»å¼€æ­¤é¢‘é“ - setcolor: - Description: 设置领地频é“文字颜色 - Info: - - '&e用法: &6/res rc setcolor [颜色代ç ]' - - 设置领地频é“文字颜色 - setprefix: - Description: 设置领地频é“å‰ç¼€ - Info: - - '&e用法: &6/res rc setprefix [æ–°å‰ç¼€]' - - 设置领地频é“å‰ç¼€ - kick: - Description: 从频é“中踢出玩家 - Info: - - '&e用法: &6/res rc kick [玩家]' - - 从领地频é“中踢出æŸçŽ©å®¶ - expand: - Description: å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地 - Info: - - '&e用法: &6/res expand (领地) [扩展å•ä½]' - - å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地规模 - - 领地å字是å¯é€‰çš„ - contract: - Description: 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ° - Info: - - '&e用法: &6/res contract (领地) [缩å°å•ä½]' - - 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ°è§„模 - - 领地å字是å¯é€‰çš„ - shop: - Description: 管ç†é¢†åœ°å•†åº— - Info: - - 管ç†é¢†åœ°çš„商店功能 - SubCommands: - list: - Description: 显示领地商店列表 - Info: - - '&e用法: &6/res shop list' - - 显示所有作为商店的领地 - vote: - Description: 为领地商店评分 - Info: - - '&e用法: &6/res shop vote <领地> [分数]' - - 为当å‰æˆ–指定领地商店评分 - Args: '[residence]' - like: - Description: 为领地商店点赞 - Info: - - '&e用法: &6/res shop like <领地>' - - 为领地商店点一个赞 - Args: '[residenceshop]' - votes: - Description: 显示领地商店评分 - Info: - - '&e用法: &6/res shop votes <领地> <页ç >' - - 显示当å‰æˆ–指定领地商店的评分列表 - Args: '[residenceshop]' - likes: - Description: 显示领地商店的赞 - Info: - - '&e用法: &6/res shop likes <领地> <页ç >' - - 显示当å‰æˆ–指定领地商店的赞列表 - Args: '[residenceshop]' - setdesc: - Description: 设置领地商店æè¿° - Info: - - '&e用法: &6/res shop setdesc [æ述文字]' - - 设置领地商店æè¿°, 支æŒé¢œè‰²ä»£ç , 用 /n 表示æ¢è¡Œ - createboard: - Description: åˆ›å»ºå•†åº—å®£ä¼ æ¿ - Info: - - '&e用法: &6/res shop createboard [ä½ç½®]' - - 在选区ä½ç½®å»ºç«‹å•†åº—宣传æ¿. [ä½ç½®] 表示宣传æ¿çš„起始ä½ç½® - deleteboard: - Description: åˆ é™¤å•†åº—å®£ä¼ æ¿ - Info: - - '&e用法: &6/res shop deleteboard' - - å³å‡»å®£ä¼ æ¿çš„å‘Šç¤ºç‰Œä»¥åˆ é™¤å®£ä¼ æ¿ - tpconfirm: - Description: 忽略ä¸å®‰å…¨ä¼ é€è­¦å‘Š + - '&e用法: &6/res material [material]' + kick: + Description: 将玩家踢出领地 Info: - - '&e用法: &6/res tpconfirm' - - 强制传é€åˆ°é¢†åœ°, 忽略传é€ä¸å®‰å…¨çš„警告 - subzone: - Description: 在领地中创建å­åŒºåŸŸ + - '&e用法: &6/res kick <玩家>' + - 你必须是领地所有者或者管ç†å‘˜ + - 玩家必须在线 + sublist: + Description: 列出所有领地å­åŒºåŸŸ Info: - - '&e用法: &6/res subzone <领地å> [å­åŒºåŸŸå]' - - 如果领地å留空, 将会å°è¯•åœ¨çŽ©å®¶æ‰€å¤„领地中建立å­åŒºåŸŸ - Args: '[residence]' - area: - Description: 管ç†é¢†åœ°ç‰©ç†åŒºåŸŸ - SubCommands: - list: - Description: 列出领地的物ç†åŒºåŸŸ - Info: - - '&e用法: &6/res area list [领地] <页ç >' - Args: '[residence]' - listall: - Description: 列出所有区域的åæ ‡å’Œè¯¦ç»†ä¿¡æ¯ - Info: - - '&e用法: &6/res area listall [领地] <页ç >' - Args: '[residence]' - add: - Description: 为领地添加物ç†åŒºåŸŸ - Info: - - '&e用法: &6/res area add [领地] [区域ID]' - - 你必须先选中两个选å–点 - Args: '[residence]' - remove: - Description: 移除领地的物ç†åŒºåŸŸ - Info: - - '&e用法: &6/res area remove [领地] [区域ID]' - Args: '[residence]' - replace: - Description: 替æ¢é¢†åœ°çš„物ç†åŒºåŸŸ - Info: - - '&e用法: &6/res area replace [领地] [区域ID]' - - 你必须先选中两个选å–点 - - 如果新的区域更大, 二者之间将会被充满 - Args: '[residence]' - message: - Description: 管ç†é¢†åœ°åŠ å…¥ / ç¦»å¼€æ¶ˆæ¯ + - '&e用法: &6/res sublist <领地> <页ç >' + - 列出所有领地å­åŒºåŸŸ + rename: + Description: é‡å‘½å领地 Info: - - '&e用法: &6/res message <领地> [enter/leave] [消æ¯]' - - 设置领地加入和离开的消æ¯æ–‡æœ¬ - - '&e用法: &6/res message <领地> remove [enter/leave]' - - 移除加入或离开的消æ¯æ–‡æœ¬ - Args: '[residence] [enter/leave]' + - '&e用法: &6/res rename [领地åå­—] [æ–°åå­—]' + - 你必须是领地所有者或者管ç†å‘˜ + - 新领地åå­—ä¸èƒ½ä¸Žå…¶ä»–领地é‡å¤ lease: Description: 管ç†é¢†åœ°ç§Ÿçº¦ Info: - '&e用法: &6/res lease [renew/cost] [领地]' - /res lease cost 显示续租领地的花费 - /res lease renew 将会续租指定的领地 - Args: '[renew/cost] [residence]' SubCommands: set: Description: 设置租约时间 Info: - '&e用法: &6/resadmin lease set [领地] [#days/infinite]' - 将租约时间设置为特定天数或者无é™åˆ¶ - Args: '[residence]' renew: Description: 续期租约时间 Info: - '&e用法: &6/resadmin lease renew <领地>' - 续期当å‰æˆ–指定的领地租约 - Args: '[residence]' expires: Description: 租约过期时间 Info: - '&e用法: &6/resadmin lease expires <领地>' - 显示领地租约过期的时间 - Args: '[residence]' cost: Description: 显示续租花费 Info: - '&e用法: &6/resadmin lease cost <领地>' - 显示续租领地所需的花费 - Args: '[residence]' - bank: - Description: 管ç†é¢†åœ°é“¶è¡Œ - Info: - - '&e用法: &6/res bank [deposit/withdraw] <领地> [æ•°é¢]' - - 你必须站在领地中或者指定领地åå­— - - 你必须拥有 +bank æƒé™ - Args: '[deposit/withdraw] [residence]' - confirm: - Description: 确认删除领地 - Info: - - '&e用法: &6/res confirm' - - 确认删除一个领地 - gset: - Description: 为æŸä¸ªç»„设置领地的特定æƒé™ - Info: - - '&e用法: &6/res gset <领地> [组] [æƒé™] [true/false/remove]' - - 输入 /res flags ? 查看æƒé™åˆ—表 - lset: - Description: 更改黑åå•å’Œå¿½ç•¥åå•é€‰é¡¹ - Info: - - '&e用法: &6/res lset <领地> [blacklist/ignorelist] [ææ–™]' - - '&e用法: &6/res lset <领地> Info' - - å°†æŸç‰©å“加入黑åå•ä»¥é˜»æ­¢è¿™ç§ç‰©å“被放置在领地中 - - 忽略åå•ä¸­çš„物å“å°†ä¸ä¼šè¢«é¢†åœ°ä¿æŠ¤ - Args: '[residence] [blacklist/ignorelist] [material]' - removeall: - Description: 移除æŸçŽ©å®¶çš„所有领地 - Info: - - '&e用法: &6/res removeall [所有者]' - - 移除特定玩家的所有领地 - - 如果是移除其他玩家的领地, 你必须有 /resadmin 命令æƒé™ - Args: '[playername]' - list: - Description: 显示领地列表 - Info: - - '&e用法: &6/res list <玩家> <页ç >' - - 列出指定玩家拥有的所有领地 (除了éšè—领地) - - 如果显示自己的领地, éšè—领地也会被显示 - - è¦åˆ—出所有玩家的领地, 使用 /res listall 命令 - Args: '[playername]' - listhidden: - Description: 显示éšè—领地列表 - Info: - - '&e用法: &6/res listhidden <玩家> <页ç >' - - 列出指定玩家拥有的éšè—领地 - Args: '[playername]' - listall: - Description: 显示所有领地 - Info: - - '&e用法: &6/res listall <页ç >' - - 显示所有玩家的领地 - listallhidden: - Description: 显示所有éšè—领地 - Info: - - '&e用法: &6/res listhidden <页ç >' - - 显示所有玩家的éšè—领地 - sublist: - Description: 列出所有领地å­åŒºåŸŸ - Info: - - '&e用法: &6/res sublist <领地> <页ç >' - - 列出所有领地å­åŒºåŸŸ - Args: '[residence]' - reset: - Description: 将领地设置还原为默认值 - Info: - - '&e用法: &6/res reset <领地>' - - 将领地的所有æƒé™é‡ç½®. 你必须是领地所有者或者管ç†å‘˜ - Args: '[residence]' - rename: - Description: é‡å‘½å领地 - Info: - - '&e用法: &6/res rename [领地åå­—] [æ–°åå­—]' - - 你必须是领地所有者或者管ç†å‘˜ - - 新领地åå­—ä¸èƒ½ä¸Žå…¶ä»–领地é‡å¤ - Args: '[residence]' - kick: - Description: 将玩家踢出领地 - Info: - - '&e用法: &6/res kick <玩家>' - - 你必须是领地所有者或者管ç†å‘˜ - - 玩家必须在线 - Args: '[playername]' - mirror: - Description: é•œåƒæƒé™ - Info: - - '&e查看 &6/res market ? 获å–帮助' - Args: '[residence] [residence]' - market: - Description: è´­ä¹°, 出售和出租领地 - SubCommands: - Info: - Description: 查看领地的ç»æµŽä¿¡æ¯ - Info: - - '&e用法: &6/res market Info [领地]' - - 显示领地是å¦æ­£åœ¨å‡ºç§Ÿæˆ–出售, 以åŠé¢†åœ°çš„花费 - Args: '[residence]' - list: - Description: 显示å¯å‡ºç§Ÿä¸Žå¯å‡ºå”®çš„领地 - Info: - - '&e用法: &6/res market list' - sell: - Description: 出售一个领地 - Info: - - '&e用法: &6/res market sell [领地] [售价]' - - 将领地以 [amount] 元的价格出售 - - 其他玩家å¯ä»¥æ‰§è¡Œ /res market buy 命令购买 - Args: '[residence]' - sign: - Description: 设置市场木牌 - Info: - - '&e用法: &6/res market sign [领地]' - - 将看å‘的木牌设置为领地市场木牌 - Args: '[residence]' - buy: - Description: 购买一个领地 - Info: - - '&e用法: &6/res market buy [领地]' - - 如果该领地正在出售, 则购买这个领地 - Args: '[residence]' - unsell: - Description: å–消出售领地 - Info: - - '&e用法: &6/res market unsell [领地]' - Args: '[residence]' - rent: - Description: 租用一个领地 - Info: - - '&e用法: &6/res market rent [领地] <自动续租>' - - 租用一个领地. <自动续租> å¯ä»¥æ˜¯ true 或 false. 如果是 true, 并且领地所有者å…许, 领地将会在租约到期之å‰è‡ªåŠ¨ç»­ç§Ÿ - Args: '[cresidence] [true/false]' - rentable: - Description: 将领地设置为å¯å‡ºç§Ÿ - Info: - - '&e用法: &6/res market rentable [领地] [ä»·æ ¼] [天数] <周期>' - - 以 [ä»·æ ¼] 出租领地 [天数] 天. 如果 <周期> 为 true, 领地将会在租约结æŸåŽè‡ªåŠ¨å‡ºç§Ÿ. - Args: '[residence]' - release: - Description: å–消领地租èµçŠ¶æ€ - Info: - - '&e用法: &6/res market release [领地]' - - 如果你是租用者, 该命令将会退租领地 - - 如果你是所有者, 该命令将会收回领地 - Args: '[residence]' - current: - Description: 显示你目å‰æ‰€åœ¨çš„领地 - Info: - - '&e用法: &6/res current' - signupdate: - Description: 更新领地木牌 - Info: - - '&e用法: &6/res signupdate' - reload: - Description: é‡è½½è¯­è¨€æˆ–é…置文件 - Info: - - '&eUsage: &6/res reload [config/lang]' - lists: - Description: 预定义æƒé™åˆ—表 - Info: - - 预定义的æƒé™åˆ—表å¯ä»¥åº”用到领地上 - SubCommands: - add: - Description: 添加一个列表 - Info: - - '&e用法: &6/res lists add <列表å>' - remove: - Description: 删除一个列表 - Info: - - '&e用法: &6/res lists remove <列表å>' - apply: - Description: 将列表应用于领地 - Info: - - '&e用法: &6/res lists apply <列表å> <领地>' - set: - Description: 设置列表全局æƒé™ - Info: - - '&e用法: &6/res lists set <列表å> <æƒé™> <值>' - pset: - Description: 设置列表玩家æƒé™ - Info: - - '&e用法: &6/res lists pset <列表å> <玩家> <æƒé™> <值>' - gset: - Description: 设置列表组æƒé™ - Info: - - '&e用法: &6/res lists view <列表å>' - view: - Description: 查看列表 - server: - Description: 创建æœåŠ¡å™¨é¢†åœ° - Info: - - '&e用法: &6/resadmin server [领地]' - - 创建一个属于æœåŠ¡å™¨æ‰€æœ‰çš„领地 - Args: '[cresidence]' - setowner: - Description: 改å˜é¢†åœ°æ‰€æœ‰è€… + tp: + Description: ä¼ é€åˆ°ä¸€ä¸ªé¢†åœ° Info: - - '&e用法: &6/resadmin setowner [领地] [玩家]' - Args: '[cresidence]' + - '&e用法: &6/res tp [residence]' + - 将你传é€åˆ°ä¸€ä¸ªé¢†åœ°, 你必须是领地所有者或者拥有领地 +tp æƒé™ + - ä½ çš„æƒé™ç»„也必须在æœåŠ¡å™¨ä¸­æœ‰ä¼ é€æƒé™ resreload: Description: é‡è½½ Residence. Info: @@ -1215,17 +1430,3 @@ CommandHelp: - '&e用法: &6/resload' - 该命令ä¸å®‰å…¨! 它ä¸ä¼šå…ˆä¿å­˜é¢†åœ°çŠ¶æ€. - 对领地åšå‡ºæ”¹å˜åŽé‡æ–°åŠ è½½å­˜æ¡£. - removeworld: - Description: 删除指定世界中的所有领地 - Info: - - '&e用法: &6/res removeworld [世界å]' - - åªèƒ½åœ¨æŽ§åˆ¶å°æ‰§è¡Œæ­¤å‘½ä»¤ - signconvert: - Description: å°† ResidenceSign 的告示牌转æ¢ä¸ºæ–°æ ¼å¼ - Info: - - '&e用法: &6/res signconvert' - - å°è¯•è½¬æ¢å·²æœ‰çš„ ResidenceSign 告示牌 - version: - Description: 显示 Residence 的版本 - Info: - - '&e用法: &6/res version' From b69ce534fa45210c85e46050bd42db17ad7d65af Mon Sep 17 00:00:00 2001 From: jiongjionger <17jiong@gmail.com> Date: Tue, 21 Feb 2017 12:43:18 +0800 Subject: [PATCH 0354/1142] Update Chinese.yml Fix --- src/Language/Chinese.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml index 4696badf3..9ed0d54e4 100644 --- a/src/Language/Chinese.yml +++ b/src/Language/Chinese.yml @@ -33,6 +33,7 @@ Language: SubzoneCollision: '&c区域与领地å­åŒºåŸŸ &6%1 &c冲çª.' NonExist: '&c区域ä¸å­˜åœ¨.' InvalidName: '&c无效区域å...' + ToSmallTotal: '&cé€‰ä¸­çš„åŒºåŸŸè¿‡å° (&6%1&c)' ToSmallX: '&c选区 &6X &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' ToSmallY: '&c选区高度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' ToSmallZ: '&c选区 &6Z &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' From 684c071e19c450131c168a2eb2146465ef85cdd1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 24 Feb 2017 14:08:30 +0200 Subject: [PATCH 0355/1142] Catch general exception to have better suport for other platforms like thermos --- src/com/bekvon/bukkit/residence/utils/ActionBar.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index e6d7981dc..05e0b6e43 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -63,7 +63,7 @@ public ActionBar(Residence plugin) { enumTitleAction = Class.forName(getEnumTitleActionClasspath()); nmsPacketPlayOutTitle = typePacketPlayOutTitle.getConstructor(enumTitleAction, nmsIChatBaseComponent); fromString = Class.forName(getClassMessageClasspath()).getMethod("fromString", String.class); - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) { + } catch (Exception ex) { simpleTitleMessages = true; Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully suport title messages. They will be shown in chat instead."); } @@ -87,7 +87,7 @@ public void sendTitle(Player receivingPacket, Object title, Object subtitle) { ((Object[]) fromString.invoke(null, ChatColor.translateAlternateColorCodes('&', String.valueOf(subtitle))))[0]); sendPacket(receivingPacket, packetSubtitle); } - } catch (SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchFieldException ex) { + } catch (Exception ex) { simpleTitleMessages = true; Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully support title messages. They will be shown in chat instead."); } From 8d357e3e194ecc48226660091d82c2f07cd8e8e1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 7 Mar 2017 12:37:28 +0200 Subject: [PATCH 0356/1142] Remove special effect on residence removal --- .../bukkit/residence/ConfigManager.java | 2 +- .../listeners/ResidencePlayerListener.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 8e6195e8c..3b1dd48d3 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -620,7 +620,7 @@ public void UpdateConfigFile() { // Auto remove old residences c.getW().addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", - "Players can bypass this wih residence.cleanbypass permission node"); + "Players can bypass this with residence.cleanbypass permission node"); AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); c.getW().addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 65f5ff8a4..ce828844f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -333,6 +333,29 @@ public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { } } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeWSpeed(ResidenceDeleteEvent event) { + if (event.isCancelled()) + return; + + ClaimedResidence res = event.getResidence(); + if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(0.2F); + + if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + for (Player one : event.getResidence().getPlayersInResidence()) + one.resetPlayerWeather(); + + if (res.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) + for (Player one : event.getResidence().getPlayersInResidence()) + fly(one, false); + + if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setGlowing(false); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeWSpeed(ResidenceFlagChangeEvent event) { if (event.isCancelled()) From feff53e9b7bf696941cb89710793459cb0f53d9e Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 7 Mar 2017 13:37:47 +0200 Subject: [PATCH 0357/1142] Check by players name if uuid can't find correct player --- src/com/bekvon/bukkit/residence/protection/PlayerManager.java | 4 +++- .../bekvon/bukkit/residence/text/help/InformationPager.java | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 1dd833760..0c42f776b 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -68,7 +68,7 @@ public ResidencePlayer playerJoin(String player) { } return null; } - + public ResidencePlayer playerJoin(String player, UUID uuid) { if (!players.containsKey(player.toLowerCase())) { ResidencePlayer resPlayer = new ResidencePlayer(player, uuid); @@ -267,6 +267,8 @@ public ResidencePlayer getResidencePlayer(String name, UUID uuid) { ResidencePlayer resPlayer = null; if (playersUuid.containsKey(uuid)) { resPlayer = playersUuid.get(uuid); + } else if (name != null && players.containsKey(name.toLowerCase())) { + resPlayer = players.get(name.toLowerCase()); } else { resPlayer = playerJoin(name, uuid); } diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 0e3cea262..476bc821e 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -67,6 +67,7 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap Date: Tue, 7 Mar 2017 15:45:45 +0200 Subject: [PATCH 0358/1142] get full list of residence and try to find player by its name if not possible by its uuid. --- .../protection/ResidenceManager.java | 4 ++++ .../bukkit/residence/utils/FileCleanUp.java | 24 ++++++++++++------- src/plugin.yml | 2 +- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index e06d5925c..81168cd6a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -430,6 +430,10 @@ public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResi return null; } + public void removeResidence(ClaimedResidence res) { + this.removeResidence(null, res.getName(), true); + } + public void removeResidence(String name) { this.removeResidence(null, name, true); } diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 3c50e13fb..26d76b5f3 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -2,6 +2,8 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; import java.util.UUID; import org.bukkit.Bukkit; @@ -21,29 +23,33 @@ public FileCleanUp(Residence plugin) { public void cleanFiles() { - ArrayList resNameList = plugin.getResidenceManager().getResidenceList(false, false); + Map resNameList = new HashMap(plugin.getResidenceManager().getResidences()); int i = 0; OfflinePlayer[] offplayer = Bukkit.getOfflinePlayers(); - HashMap playermap = new HashMap(); + HashMap playerMapUUID = new HashMap(); + HashMap playerMapNane = new HashMap(); for (OfflinePlayer one : offplayer) { - playermap.put(one.getUniqueId(), one); + playerMapUUID.put(one.getUniqueId(), one); + playerMapNane.put(one.getName(), one); } int interval = plugin.getConfigManager().getResidenceFileCleanDays(); long time = System.currentTimeMillis(); - for (String oneName : resNameList) { - ClaimedResidence res = plugin.getResidenceManager().getByName(oneName); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Starting auto CleanUp (" + playerMapUUID.size() + "/" + resNameList.size() + ")!"); + + for (Entry oneName : resNameList.entrySet()) { + ClaimedResidence res = oneName.getValue(); if (res == null) continue; - if (!playermap.containsKey(res.getOwnerUUID())) - continue; + OfflinePlayer player = playerMapUUID.get(res.getOwnerUUID()); - OfflinePlayer player = playermap.get(res.getOwnerUUID()); + if (player == null) + player = playerMapNane.get(res.getOwner()); if (player == null) continue; @@ -62,7 +68,7 @@ public void cleanFiles() { if (ResidenceVaultAdapter.hasPermission(player, "residence.cleanbypass", res.getWorld())) continue; - plugin.getResidenceManager().removeResidence(oneName); + plugin.getResidenceManager().removeResidence(oneName.getValue()); i++; } Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Auto CleanUp deleted " + i + " residences!"); diff --git a/src/plugin.yml b/src/plugin.yml index 22ed7d812..72949e80e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.6.1.3 +version: 4.6.1.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 275939b9654eff741f8bf276720cfa4048cb51f0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2017 12:05:25 +0300 Subject: [PATCH 0359/1142] Allow sublist command to be performed from console --- src/com/bekvon/bukkit/residence/commands/sublist.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java index 8fc4c90e3..a4294d25f 100644 --- a/src/com/bekvon/bukkit/residence/commands/sublist.java +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -18,13 +18,10 @@ public class sublist implements cmd { @Override @CommandAnnotation(simple = true, priority = 4100) public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; if (args.length != 1 && args.length != 2 && args.length != 3) return false; - Player player = (Player) sender; int page = 0; try { if (args.length > 0) { @@ -34,8 +31,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } ClaimedResidence res; - if (args.length == 1) { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (args.length == 1 && sender instanceof Player) { + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); } else { res = plugin.getResidenceManager().getByName(args[1]); } @@ -44,9 +41,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman page = 1; if (res != null) { - res.printSubzoneList(player, page); + res.printSubzoneList(sender, page); } else { - plugin.msg(player, lm.Invalid_Residence); + plugin.msg(sender, lm.Invalid_Residence); } return true; } From 7be94dd13eb61dadffc2b10ad4560bd99ee8e4e4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2017 13:09:01 +0300 Subject: [PATCH 0360/1142] Prevent players from hanging in mid air with move false flag --- .../residence/containers/StuckInfo.java | 44 +++++++++++++++++++ .../listeners/ResidencePlayerListener.java | 27 +++++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 src/com/bekvon/bukkit/residence/containers/StuckInfo.java diff --git a/src/com/bekvon/bukkit/residence/containers/StuckInfo.java b/src/com/bekvon/bukkit/residence/containers/StuckInfo.java new file mode 100644 index 000000000..3bdfd4609 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/StuckInfo.java @@ -0,0 +1,44 @@ +package com.bekvon.bukkit.residence.containers; + +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.utils.Debug; + +public class StuckInfo { + + private Player player; + private int times = 0; + private Long lastTp = 0L; + + public StuckInfo(Player player) { + this.player = player; + times++; + lastTp = System.currentTimeMillis(); + } + + public Player getPlayer() { + return player; + } + + public int getTimesTeleported() { + return times; + } + + public void addTimeTeleported() { + this.times++; + } + + public Long getLastTp() { + return lastTp; + } + + public void updateLastTp() { + if (System.currentTimeMillis() - this.lastTp > 1000){ + Debug.D("more than 1000"); + this.times = 0; + } + addTimeTeleported(); + this.lastTp = System.currentTimeMillis(); + } + +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ce828844f..4d9e27b29 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -54,6 +55,7 @@ import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.StuckInfo; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.rent.RentableLand; @@ -74,6 +76,7 @@ public class ResidencePlayerListener implements Listener { protected Map currentRes; protected Map lastUpdate; protected Map lastOutsideLoc; + protected Map stuckTeleportCounter; protected int minUpdateTime; protected boolean chatenabled; protected List playerToggleChat = new ArrayList(); @@ -86,6 +89,7 @@ public ResidencePlayerListener(Residence plugin) { currentRes = new HashMap(); lastUpdate = new HashMap(); lastOutsideLoc = new HashMap(); + stuckTeleportCounter = new HashMap(); playerToggleChat.clear(); minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval(); chatenabled = plugin.getConfigManager().chatEnabled(); @@ -103,6 +107,7 @@ public void reload() { currentRes = new HashMap(); lastUpdate = new HashMap(); lastOutsideLoc = new HashMap(); + stuckTeleportCounter = new HashMap(); playerToggleChat.clear(); minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval(); chatenabled = plugin.getConfigManager().chatEnabled(); @@ -1791,7 +1796,13 @@ public void run() { Location newLoc = res.getOutsideFreeLoc(loc, player); player.teleport(newLoc); } else if (lastLoc != null) { - player.teleport(lastLoc); + + StuckInfo info = updateStuckTeleport(player, loc); + if (info != null && info.getTimesTeleported() > 5) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.teleport(newLoc); + } else + player.teleport(lastLoc); } else { Location newLoc = res.getOutsideFreeLoc(loc, player); player.teleport(newLoc); @@ -1890,6 +1901,20 @@ public void run() { } } + private StuckInfo updateStuckTeleport(Player player, Location loc) { + + if (loc.getY() >= player.getLocation().getY()) + return null; + + StuckInfo info = stuckTeleportCounter.get(player.getUniqueId()); + if (info == null){ + info = new StuckInfo(player); + stuckTeleportCounter.put(player.getUniqueId(), info); + } + info.updateLastTp(); + return info; + } + public String insertMessages(Player player, String areaname, ClaimedResidence res, String message) { try { message = message.replaceAll("%player", player.getName()); From 2f48703ecafe5c37a9ebbe011182647a9f5ed9b2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2017 13:28:52 +0300 Subject: [PATCH 0361/1142] Check fly flag by player and not only by residence flags --- .../listeners/ResidencePlayerListener.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 4d9e27b29..79687f60d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -352,7 +352,7 @@ public void onFlagChangeWSpeed(ResidenceDeleteEvent event) { for (Player one : event.getResidence().getPlayersInResidence()) one.resetPlayerWeather(); - if (res.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) + if (res.getPermissions().playerHas(event.getPlayer(), Flags.fly, FlagCombo.OnlyTrue)) for (Player one : event.getResidence().getPlayersInResidence()) fly(one, false); @@ -1561,7 +1561,7 @@ public void onResidenceChange(ResidenceChangedEvent event) { if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); - if (ResOld.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) + if (ResOld.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, false); if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1) && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) @@ -1576,9 +1576,9 @@ else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.get player.setGlowing(false); } - if (res.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) + if (res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, true); - else if (ResOld.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) + else if (ResOld.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && !res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, false); if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) @@ -1618,7 +1618,7 @@ else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res. player.setGlowing(true); } - if (res.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) + if (res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, true); if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) @@ -1902,12 +1902,12 @@ public void run() { } private StuckInfo updateStuckTeleport(Player player, Location loc) { - + if (loc.getY() >= player.getLocation().getY()) - return null; - + return null; + StuckInfo info = stuckTeleportCounter.get(player.getUniqueId()); - if (info == null){ + if (info == null) { info = new StuckInfo(player); stuckTeleportCounter.put(player.getUniqueId(), info); } From 6b6594d41a23ffe57fca884bb31ea69c3827e111 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2017 13:44:24 +0300 Subject: [PATCH 0362/1142] Fix for res market not showing rentable lands in list --- .../residence/economy/rent/RentManager.java | 1904 ++++++++--------- .../bukkit/residence/utils/RawMessage.java | 1 + 2 files changed, 952 insertions(+), 953 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index c3172ec06..2a392c0d3 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -1,953 +1,951 @@ -package com.bekvon.bukkit.residence.economy.rent; - -import org.bukkit.ChatColor; -import org.bukkit.World; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.api.MarketRentInterface; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.Visualizer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.event.ResidenceRentEvent; -import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.GetTime; -import com.bekvon.bukkit.residence.utils.RawMessage; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.TreeMap; - -import org.bukkit.entity.Player; - -public class RentManager implements MarketRentInterface { - private Set rentedLand; - private Set rentableLand; - private Residence plugin; - - public RentManager(Residence plugin) { - this.plugin = plugin; - rentedLand = new HashSet(); - rentableLand = new HashSet(); - } - - @Override - public RentedLand getRentedLand(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getRentedLand(res); - } - - public RentedLand getRentedLand(ClaimedResidence res) { - if (res == null) - return null; - return res.isRented() ? res.getRentedLand() : null; - } - - @Override - public List getRentedLands(String playername) { - return getRentedLands(playername, false); - } - - public List getRentedLands(String playername, boolean onlyHidden) { - List rentedLands = new ArrayList(); - if (playername == null) - return rentedLands; - for (ClaimedResidence res : rentedLand) { - if (res == null) - continue; - - if (!res.isRented()) - continue; - - if (!res.getRentedLand().player.equals(playername)) - continue; - - String world = " "; - ClaimedResidence topres = res.getTopParent(); - world = topres.getWorld(); - - boolean hidden = topres.getPermissions().has("hidden", false); - - if (onlyHidden && !hidden) - continue; - - rentedLands.add(plugin.msg(lm.Residence_List, "", res.getName(), world) - + plugin.msg(lm.Rent_Rented)); - } - return rentedLands; - } - - public List getRents(String playername) { - return getRents(playername, false); - } - - public List getRents(String playername, boolean onlyHidden) { - return getRents(playername, onlyHidden, null); - } - - public List getRents(String playername, boolean onlyHidden, World world) { - List rentedLands = new ArrayList(); - for (ClaimedResidence res : rentedLand) { - if (res == null) - continue; - - if (!res.isRented()) - continue; - - if (!res.getRentedLand().player.equalsIgnoreCase(playername)) - continue; - - ClaimedResidence topres = res.getTopParent(); - - boolean hidden = topres.getPermissions().has("hidden", false); - - if (onlyHidden && !hidden) - continue; - - if (world != null && !world.getName().equalsIgnoreCase(res.getWorld())) - continue; - rentedLands.add(res); - } - return rentedLands; - } - - public TreeMap getRentsMap(String playername, boolean onlyHidden, World world) { - TreeMap rentedLands = new TreeMap(); - for (ClaimedResidence res : rentedLand) { - if (res == null) - continue; - - if (!res.isRented()) - continue; - - if (!res.getRentedLand().player.equalsIgnoreCase(playername)) - continue; - - ClaimedResidence topres = res.getTopParent(); - - boolean hidden = topres.getPermissions().has("hidden", false); - - if (onlyHidden && !hidden) - continue; - - if (world != null && !world.getName().equalsIgnoreCase(res.getWorld())) - continue; - rentedLands.put(res.getName(), res); - } - return rentedLands; - } - - public List getRentedLandsList(Player player) { - return getRentedLandsList(player.getName()); - } - - public List getRentedLandsList(String playername) { - List rentedLands = new ArrayList(); - for (ClaimedResidence res : rentedLand) { - if (res == null) - continue; - if (!res.isRented()) - continue; - if (!res.getRentedLand().player.equalsIgnoreCase(playername)) - continue; - rentedLands.add(res.getName()); - } - return rentedLands; - } - - @Override - public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean resadmin) { - setForRent(player, landName, amount, days, AllowRenewing, plugin.getConfigManager().isRentStayInMarket(), resadmin); - } - - @Override - public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean resadmin) { - setForRent(player, landName, amount, days, AllowRenewing, StayInMarket, plugin.getConfigManager().isRentAllowAutoPay(), resadmin); - } - - @Override - public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean AllowAutoPay, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - setForRent(player, res, amount, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); - } - - public void setForRent(Player player, ClaimedResidence res, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean AllowAutoPay, - boolean resadmin) { - - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - if (!plugin.getConfigManager().enabledRentSystem()) { - plugin.msg(player, lm.Economy_MarketDisabled); - return; - } - - if (res.isForSell() && !resadmin) { - plugin.msg(player, lm.Economy_SellRentFail); - return; - } - - if (res.isParentForSell() && !resadmin) { - plugin.msg(player, lm.Economy_ParentSellRentFail); - return; - } - - if (!resadmin) { - if (!res.getPermissions().hasResidencePermission(player, true)) { - plugin.msg(player, lm.General_NoPermission); - return; - } - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { - plugin.msg(player, lm.Residence_MaxRent); - return; - } - } - - if (!rentableLand.contains(res)) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENTABLE); - plugin.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - return; - RentableLand newrent = new RentableLand(); - newrent.days = days; - newrent.cost = amount; - newrent.AllowRenewing = AllowRenewing; - newrent.StayInMarket = StayInMarket; - newrent.AllowAutoPay = AllowAutoPay; - res.setRentable(newrent); - rentableLand.add(res); - plugin.msg(player, lm.Residence_ForRentSuccess, res.getResidenceName(), amount, days); - } else { - plugin.msg(player, lm.Residence_AlreadyRent); - } - } - - @Override - public void rent(Player player, String landName, boolean AutoPay, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - rent(player, res, AutoPay, resadmin); - } - - @SuppressWarnings("deprecation") - public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - if (!plugin.getConfigManager().enabledRentSystem()) { - plugin.msg(player, lm.Rent_Disabled); - return; - } - - if (res.isOwner(player)) { - plugin.msg(player, lm.Economy_OwnerRentFail); - return; - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - if (!resadmin && this.getRentCount(player.getName()) >= rPlayer.getMaxRents()) { - plugin.msg(player, lm.Residence_MaxRent); - return; - } - if (!res.isForRent()) { - plugin.msg(player, lm.Residence_NotForRent); - return; - } - if (res.isRented()) { - printRentInfo(player, res.getName()); - return; - } - - RentableLand land = res.getRentable(); - - if (plugin.getEconomyManager().canAfford(player.getName(), land.cost)) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); - plugin.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - return; - - if (!land.AllowAutoPay && AutoPay) { - plugin.msg(player, lm.Residence_CantAutoPay); - AutoPay = false; - } - - if (plugin.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { - RentedLand newrent = new RentedLand(); - newrent.player = player.getName(); - newrent.startTime = System.currentTimeMillis(); - newrent.endTime = System.currentTimeMillis() + daysToMs(land.days); - newrent.AutoPay = AutoPay; - res.setRented(newrent); - rentedLand.add(res); - - plugin.getSignUtil().CheckSign(res); - - Visualizer v = new Visualizer(player); - v.setAreas(res); - plugin.getSelectionManager().showBounds(player, v); - - res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); - res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); - res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); - plugin.msg(player, lm.Residence_RentSuccess, res.getName(), land.days); - - if (plugin.getSchematicManager() != null && - plugin.getConfigManager().RestoreAfterRentEnds && - !plugin.getConfigManager().SchematicsSaveOnFlagChange && - res.getPermissions().has("backup", true)) { - plugin.getSchematicManager().save(res); - } - - } else { - player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); - } - } else { - plugin.msg(player, lm.Economy_NotEnoughMoney); - } - } - - public void payRent(Player player, String landName, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - payRent(player, res, resadmin); - } - - public void payRent(Player player, ClaimedResidence res, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - if (!plugin.getConfigManager().enabledRentSystem()) { - plugin.msg(player, lm.Rent_Disabled); - return; - } - - if (!res.isForRent()) { - plugin.msg(player, lm.Residence_NotForRent); - return; - } - - if (res.isRented() && !getRentingPlayer(res).equals(player.getName()) && !resadmin) { - plugin.msg(player, lm.Rent_NotByYou); - return; - } - - RentableLand land = res.getRentable(); - RentedLand rentedLand = res.getRentedLand(); - - if (rentedLand == null) { - plugin.msg(player, lm.Residence_NotRented); - return; - } - - if (!land.AllowRenewing) { - plugin.msg(player, lm.Rent_OneTime); - return; - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (!resadmin && group.getMaxRentDays() != -1 && - msToDays((rentedLand.endTime - System.currentTimeMillis()) + daysToMs(land.days)) >= group.getMaxRentDays()) { - plugin.msg(player, lm.Rent_MaxRentDays, group.getMaxRentDays()); - return; - } - - if (plugin.getEconomyManager().canAfford(player.getName(), land.cost)) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); - plugin.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - return; - if (plugin.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { - rentedLand.endTime = rentedLand.endTime + daysToMs(land.days); - plugin.getSignUtil().CheckSign(res); - - Visualizer v = new Visualizer(player); - v.setAreas(res); - plugin.getSelectionManager().showBounds(player, v); - - plugin.msg(player, lm.Rent_Extended, land.days, res.getName()); - plugin.msg(player, lm.Rent_Expire, GetTime.getTime(rentedLand.endTime)); - } else { - player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); - } - } else { - plugin.msg(player, lm.Economy_NotEnoughMoney); - } - } - - @Override - public void unrent(Player player, String landName, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - unrent(player, res, resadmin); - } - - public void unrent(Player player, ClaimedResidence res, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - RentedLand rent = res.getRentedLand(); - if (rent == null) { - plugin.msg(player, lm.Residence_NotRented); - return; - } - - if (resadmin || rent.player.equals(player.getName()) || res.isOwner(player) && player.hasPermission("residence.market.evict")) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENTABLE); - plugin.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - return; - - rentedLand.remove(res); - res.setRented(null); - if (!res.getRentable().AllowRenewing && !res.getRentable().StayInMarket) { - rentableLand.remove(res); - res.setRentable(null); - } - - boolean backup = res.getPermissions().has("backup", false); - - if (plugin.getConfigManager().isRemoveLwcOnUnrent()) - plugin.getResidenceManager().removeLwcFromResidence(player, res); - - res.getPermissions().applyDefaultFlags(); - - if (plugin.getSchematicManager() != null && plugin.getConfigManager().RestoreAfterRentEnds && backup) { - plugin.getSchematicManager().load(res); - // set true if its already exists - res.getPermissions().setFlag("backup", FlagState.TRUE); - } - plugin.getSignUtil().CheckSign(res); - - plugin.msg(player, lm.Residence_Unrent, res.getName()); - } else { - plugin.msg(player, lm.General_NoPermission); - } - } - - private static long daysToMs(int days) { -// return (((long) days) * 1000L); - return ((days) * 24L * 60L * 60L * 1000L); - } - - private static int msToDays(long ms) { - return (int) Math.ceil((((ms / 1000D) / 60D) / 60D) / 24D); - } - - @Override - public void removeFromForRent(Player player, String landName, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - removeFromForRent(player, res, resadmin); - } - - public void removeFromForRent(Player player, ClaimedResidence res, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return; - } - - if (rentableLand.contains(res)) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENT); - plugin.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - return; - rentableLand.remove(res); - res.setRentable(null); - res.getPermissions().applyDefaultFlags(); - plugin.getSignUtil().CheckSign(res); - plugin.msg(player, lm.Residence_RemoveRentable, res.getResidenceName()); - } else { - plugin.msg(player, lm.Residence_NotForRent); - } - } - - @Override - public void removeFromRent(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - removeFromRent(res); - } - - public void removeFromRent(ClaimedResidence res) { - rentedLand.remove(res); - } - - @Override - public void removeRentable(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - removeRentable(res); - } - - public void removeRentable(ClaimedResidence res) { - if (res == null) - return; - removeFromRent(res); - rentableLand.remove(res); - plugin.getSignUtil().removeSign(res.getName()); - } - - @Override - public boolean isForRent(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return isForRent(res); - } - - public boolean isForRent(ClaimedResidence res) { - if (res == null) - return false; - return rentableLand.contains(res); - } - - public RentableLand getRentableLand(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getRentableLand(res); - } - - public RentableLand getRentableLand(ClaimedResidence res) { - if (res == null) - return null; - if (res.isForRent()) - return res.getRentable(); - return null; - } - - @Override - public boolean isRented(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return isRented(res); - } - - public boolean isRented(ClaimedResidence res) { - if (res == null) - return false; - return rentedLand.contains(res); - } - - @Override - public String getRentingPlayer(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getRentingPlayer(res); - } - - public String getRentingPlayer(ClaimedResidence res) { - if (res == null) - return null; - return res.isRented() ? res.getRentedLand().player : null; - } - - @Override - public int getCostOfRent(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getCostOfRent(res); - } - - public int getCostOfRent(ClaimedResidence res) { - if (res == null) - return 0; - return res.isForRent() ? res.getRentable().cost : 0; - } - - @Override - public boolean getRentableRepeatable(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getRentableRepeatable(res); - } - - public boolean getRentableRepeatable(ClaimedResidence res) { - if (res == null) - return false; - return res.isForRent() ? res.getRentable().AllowRenewing : false; - } - - @Override - public boolean getRentedAutoRepeats(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getRentedAutoRepeats(res); - } - - public boolean getRentedAutoRepeats(ClaimedResidence res) { - if (res == null) - return false; - return getRentableRepeatable(res) ? (rentedLand.contains(res) ? res.getRentedLand().AutoPay : false) : false; - } - - @Override - public int getRentDays(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getRentDays(res); - } - - public int getRentDays(ClaimedResidence res) { - if (res == null) - return 0; - return res.isForRent() ? res.getRentable().days : 0; - } - - @Override - public void checkCurrentRents() { - Set t = new HashSet(); - t.addAll(rentedLand); - for (ClaimedResidence res : t) { - - if (res == null) - continue; - - RentedLand land = res.getRentedLand(); - if (land == null) - continue; - - if (land.endTime > System.currentTimeMillis()) - continue; - - if (plugin.getConfigManager().debugEnabled()) - System.out.println("Rent Check: " + res.getName()); - - ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); - plugin.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - continue; - - RentableLand rentable = res.getRentable(); - if (!rentable.AllowRenewing) { - if (!rentable.StayInMarket) { - rentableLand.remove(res); - res.setRentable(null); - } - rentedLand.remove(res); - res.setRented(null); - res.getPermissions().applyDefaultFlags(); - plugin.getSignUtil().CheckSign(res); - continue; - } - if (land.AutoPay && rentable.AllowAutoPay) { - if (!plugin.getEconomyManager().canAfford(land.player, rentable.cost)) { - if (!rentable.StayInMarket) { - rentableLand.remove(res); - res.setRentable(null); - } - rentedLand.remove(res); - res.setRented(null); - res.getPermissions().applyDefaultFlags(); - } else { - if (!plugin.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { - if (!rentable.StayInMarket) { - rentableLand.remove(res); - res.setRentable(null); - } - rentedLand.remove(res); - res.setRented(null); - res.getPermissions().applyDefaultFlags(); - } else { - land.endTime = System.currentTimeMillis() + daysToMs(rentable.days); - } - } - - plugin.getSignUtil().CheckSign(res); - continue; - } - if (!rentable.StayInMarket) { - rentableLand.remove(res); - res.setRentable(null); - } - rentedLand.remove(res); - res.setRented(null); - - boolean backup = res.getPermissions().has("backup", false); - - res.getPermissions().applyDefaultFlags(); - - if (plugin.getSchematicManager() != null && plugin.getConfigManager().RestoreAfterRentEnds && backup) { - plugin.getSchematicManager().load(res); - plugin.getSignUtil().CheckSign(res); - // set true if its already exists - res.getPermissions().setFlag("backup", FlagState.TRUE); - // To avoid lag spikes on multiple residence restores at once, will limit to one residence at time - break; - } - plugin.getSignUtil().CheckSign(res); - } - } - - @Override - public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - setRentRepeatable(player, res, value, resadmin); - } - - public void setRentRepeatable(Player player, ClaimedResidence res, boolean value, boolean resadmin) { - - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - RentableLand land = res.getRentable(); - - if (!res.isOwner(player) && !resadmin) { - plugin.msg(player, lm.Residence_NotOwner); - return; - } - - if (land == null || !res.isOwner(player) && !resadmin) { - plugin.msg(player, lm.Residence_NotOwner); - return; - } - - land.AllowRenewing = value; - if (!value && this.isRented(res)) - res.getRentedLand().AutoPay = false; - - if (value) - plugin.msg(player, lm.Rentable_EnableRenew, res.getResidenceName()); - else - plugin.msg(player, lm.Rentable_DisableRenew, res.getResidenceName()); - - } - - @Override - public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - setRentedRepeatable(player, res, value, resadmin); - } - - public void setRentedRepeatable(Player player, ClaimedResidence res, boolean value, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - RentedLand land = res.getRentedLand(); - - if (land == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - if (!res.getRentable().AllowAutoPay && value) { - plugin.msg(player, lm.Residence_CantAutoPay); - return; - } - - if (!land.player.equals(player.getName()) && !resadmin) { - plugin.msg(player, lm.Residence_NotOwner); - return; - } - - if (!land.player.equals(player.getName()) && !resadmin) { - plugin.msg(player, lm.Residence_NotOwner); - return; - } - - land.AutoPay = value; - if (value) - plugin.msg(player, lm.Rent_EnableRenew, res.getResidenceName()); - else - plugin.msg(player, lm.Rent_DisableRenew, res.getResidenceName()); - - plugin.getSignUtil().CheckSign(res); - } - - public void printRentInfo(Player player, String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - printRentInfo(player, res); - } - - public void printRentInfo(Player player, ClaimedResidence res) { - - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - RentableLand rentable = res.getRentable(); - RentedLand rented = res.getRentedLand(); - if (rentable != null) { - plugin.msg(player, lm.General_Separator); - plugin.msg(player, lm.General_Land, res.getName()); - plugin.msg(player, lm.General_Cost, rentable.cost, rentable.days); - plugin.msg(player, lm.Rentable_AllowRenewing, rentable.AllowRenewing); - plugin.msg(player, lm.Rentable_StayInMarket, rentable.StayInMarket); - plugin.msg(player, lm.Rentable_AllowAutoPay, rentable.AllowAutoPay); - if (rented != null) { - plugin.msg(player, lm.Residence_RentedBy, rented.player); - - if (rented.player.equals(player.getName()) || res.isOwner(player) || plugin.isResAdminOn(player)) - player.sendMessage((rented.AutoPay ? plugin.msg(lm.Rent_AutoPayTurnedOn) : plugin.msg(lm.Rent_AutoPayTurnedOff)) - + "\n"); - plugin.msg(player, lm.Rent_Expire, GetTime.getTime(rented.endTime)); - } else { - plugin.msg(player, lm.General_Status, plugin.msg(lm.General_Available)); - } - plugin.msg(player, lm.General_Separator); - } else { - plugin.msg(player, lm.General_Separator); - plugin.msg(player, lm.Residence_NotForRent); - plugin.msg(player, lm.General_Separator); - } - } - - public void printRentableResidences(Player player, int page) { - plugin.msg(player, lm.Rentable_Land); - StringBuilder sbuild = new StringBuilder(); - sbuild.append(ChatColor.GREEN); - - PageInfo pi = new PageInfo(10, rentableLand.size(), page); - - int position = -1; - for (ClaimedResidence res : rentableLand) { - if (res == null) - continue; - - position++; - - if (position > pi.getEnd()) - break; - if (!pi.isInRange(position)) - continue; - - boolean rented = res.isRented(); - - if (!res.getRentable().AllowRenewing && rented) - continue; - - String rentedBy = ""; - String hover = ""; - if (rented) { - RentedLand rent = res.getRentedLand(); - rentedBy = plugin.msg(lm.Residence_RentedBy, rent.player); - hover = GetTime.getTime(rent.endTime); - } - - String msg = plugin.msg(lm.Rent_RentList, pi.getPositionForOutput(position), res.getName(), res.getRentable().cost, res.getRentable().days, res.getRentable().AllowRenewing, - res.getOwner(), rentedBy); - - RawMessage rm = new RawMessage(); - rm.add(msg, "§2" + hover); - - if (!hover.equalsIgnoreCase("")) - rm.show(player); - else - rm.showClean(player); - - } - - plugin.getInfoPageManager().ShowPagination(player, pi.getTotalPages(), page, "/res market list rent"); - - } - - @Override - public int getRentCount(String player) { - int count = 0; - for (ClaimedResidence res : rentedLand) { - if (res.getRentedLand().player.equalsIgnoreCase(player)) - count++; - } - return count; - } - - @Override - public int getRentableCount(String player) { - int count = 0; - for (ClaimedResidence res : rentableLand) { - if (res != null) - if (res.isOwner(player)) - count++; - } - return count; - } - - @Override - public Set getRentableResidences() { - return rentableLand; - } - - @Override - public Set getCurrentlyRentedResidences() { - return rentedLand; - } - - @SuppressWarnings("unchecked") - public void load(Map root) { - if (root == null) - return; - this.rentableLand.clear(); - - Map rentables = (Map) root.get("Rentables"); - for (Entry rent : rentables.entrySet()) { - RentableLand one = loadRentable((Map) rent.getValue()); - ClaimedResidence res = plugin.getResidenceManager().getByName(rent.getKey()); - if (res != null) { - res.setRentable(one); - this.rentableLand.add(res); - } - } - Map rented = (Map) root.get("Rented"); - for (Entry rent : rented.entrySet()) { - RentedLand one = loadRented((Map) rent.getValue()); - ClaimedResidence res = plugin.getResidenceManager().getByName(rent.getKey()); - if (res != null) { - res.setRented(one); - this.rentedLand.add(res); - } - } - } - - public Map save() { - Map root = new HashMap(); - Map rentables = new HashMap(); - for (ClaimedResidence res : rentableLand) { - if (res == null || res.getRentable() == null) - continue; - rentables.put(res.getName(), res.getRentable().save()); - } - Map rented = new HashMap(); - for (ClaimedResidence res : rentedLand) { - if (res == null || res.getRentedLand() == null) - continue; - rented.put(res.getName(), res.getRentedLand().save()); - } - root.put("Rentables", rentables); - root.put("Rented", rented); - return root; - } - - private static RentableLand loadRentable(Map map) { - RentableLand newland = new RentableLand(); - newland.cost = (Integer) map.get("Cost"); - newland.days = (Integer) map.get("Days"); - newland.AllowRenewing = (Boolean) map.get("Repeatable"); - if (map.containsKey("StayInMarket")) - newland.StayInMarket = (Boolean) map.get("StayInMarket"); - if (map.containsKey("AllowAutoPay")) - newland.AllowAutoPay = (Boolean) map.get("AllowAutoPay"); - return newland; - } - - private static RentedLand loadRented(Map map) { - RentedLand newland = new RentedLand(); - newland.player = (String) map.get("Player"); - newland.startTime = (Long) map.get("StartTime"); - newland.endTime = (Long) map.get("EndTime"); - newland.AutoPay = (Boolean) map.get("AutoRefresh"); - return newland; - } - -} +package com.bekvon.bukkit.residence.economy.rent; + +import org.bukkit.ChatColor; +import org.bukkit.World; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.MarketRentInterface; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.event.ResidenceRentEvent; +import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.utils.GetTime; +import com.bekvon.bukkit.residence.utils.RawMessage; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.TreeMap; + +import org.bukkit.entity.Player; + +public class RentManager implements MarketRentInterface { + private Set rentedLand; + private Set rentableLand; + private Residence plugin; + + public RentManager(Residence plugin) { + this.plugin = plugin; + rentedLand = new HashSet(); + rentableLand = new HashSet(); + } + + @Override + public RentedLand getRentedLand(String landName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getRentedLand(res); + } + + public RentedLand getRentedLand(ClaimedResidence res) { + if (res == null) + return null; + return res.isRented() ? res.getRentedLand() : null; + } + + @Override + public List getRentedLands(String playername) { + return getRentedLands(playername, false); + } + + public List getRentedLands(String playername, boolean onlyHidden) { + List rentedLands = new ArrayList(); + if (playername == null) + return rentedLands; + for (ClaimedResidence res : rentedLand) { + if (res == null) + continue; + + if (!res.isRented()) + continue; + + if (!res.getRentedLand().player.equals(playername)) + continue; + + String world = " "; + ClaimedResidence topres = res.getTopParent(); + world = topres.getWorld(); + + boolean hidden = topres.getPermissions().has("hidden", false); + + if (onlyHidden && !hidden) + continue; + + rentedLands.add(plugin.msg(lm.Residence_List, "", res.getName(), world) + + plugin.msg(lm.Rent_Rented)); + } + return rentedLands; + } + + public List getRents(String playername) { + return getRents(playername, false); + } + + public List getRents(String playername, boolean onlyHidden) { + return getRents(playername, onlyHidden, null); + } + + public List getRents(String playername, boolean onlyHidden, World world) { + List rentedLands = new ArrayList(); + for (ClaimedResidence res : rentedLand) { + if (res == null) + continue; + + if (!res.isRented()) + continue; + + if (!res.getRentedLand().player.equalsIgnoreCase(playername)) + continue; + + ClaimedResidence topres = res.getTopParent(); + + boolean hidden = topres.getPermissions().has("hidden", false); + + if (onlyHidden && !hidden) + continue; + + if (world != null && !world.getName().equalsIgnoreCase(res.getWorld())) + continue; + rentedLands.add(res); + } + return rentedLands; + } + + public TreeMap getRentsMap(String playername, boolean onlyHidden, World world) { + TreeMap rentedLands = new TreeMap(); + for (ClaimedResidence res : rentedLand) { + if (res == null) + continue; + + if (!res.isRented()) + continue; + + if (!res.getRentedLand().player.equalsIgnoreCase(playername)) + continue; + + ClaimedResidence topres = res.getTopParent(); + + boolean hidden = topres.getPermissions().has("hidden", false); + + if (onlyHidden && !hidden) + continue; + + if (world != null && !world.getName().equalsIgnoreCase(res.getWorld())) + continue; + rentedLands.put(res.getName(), res); + } + return rentedLands; + } + + public List getRentedLandsList(Player player) { + return getRentedLandsList(player.getName()); + } + + public List getRentedLandsList(String playername) { + List rentedLands = new ArrayList(); + for (ClaimedResidence res : rentedLand) { + if (res == null) + continue; + if (!res.isRented()) + continue; + if (!res.getRentedLand().player.equalsIgnoreCase(playername)) + continue; + rentedLands.add(res.getName()); + } + return rentedLands; + } + + @Override + public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean resadmin) { + setForRent(player, landName, amount, days, AllowRenewing, plugin.getConfigManager().isRentStayInMarket(), resadmin); + } + + @Override + public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean resadmin) { + setForRent(player, landName, amount, days, AllowRenewing, StayInMarket, plugin.getConfigManager().isRentAllowAutoPay(), resadmin); + } + + @Override + public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean AllowAutoPay, boolean resadmin) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + setForRent(player, res, amount, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); + } + + public void setForRent(Player player, ClaimedResidence res, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean AllowAutoPay, + boolean resadmin) { + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + if (!plugin.getConfigManager().enabledRentSystem()) { + plugin.msg(player, lm.Economy_MarketDisabled); + return; + } + + if (res.isForSell() && !resadmin) { + plugin.msg(player, lm.Economy_SellRentFail); + return; + } + + if (res.isParentForSell() && !resadmin) { + plugin.msg(player, lm.Economy_ParentSellRentFail); + return; + } + + if (!resadmin) { + if (!res.getPermissions().hasResidencePermission(player, true)) { + plugin.msg(player, lm.General_NoPermission); + return; + } + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { + plugin.msg(player, lm.Residence_MaxRent); + return; + } + } + + if (!rentableLand.contains(res)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENTABLE); + plugin.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + RentableLand newrent = new RentableLand(); + newrent.days = days; + newrent.cost = amount; + newrent.AllowRenewing = AllowRenewing; + newrent.StayInMarket = StayInMarket; + newrent.AllowAutoPay = AllowAutoPay; + res.setRentable(newrent); + rentableLand.add(res); + plugin.msg(player, lm.Residence_ForRentSuccess, res.getResidenceName(), amount, days); + } else { + plugin.msg(player, lm.Residence_AlreadyRent); + } + } + + @Override + public void rent(Player player, String landName, boolean AutoPay, boolean resadmin) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + rent(player, res, AutoPay, resadmin); + } + + @SuppressWarnings("deprecation") + public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean resadmin) { + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + if (!plugin.getConfigManager().enabledRentSystem()) { + plugin.msg(player, lm.Rent_Disabled); + return; + } + + if (res.isOwner(player)) { + plugin.msg(player, lm.Economy_OwnerRentFail); + return; + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + if (!resadmin && this.getRentCount(player.getName()) >= rPlayer.getMaxRents()) { + plugin.msg(player, lm.Residence_MaxRent); + return; + } + if (!res.isForRent()) { + plugin.msg(player, lm.Residence_NotForRent); + return; + } + if (res.isRented()) { + printRentInfo(player, res.getName()); + return; + } + + RentableLand land = res.getRentable(); + + if (plugin.getEconomyManager().canAfford(player.getName(), land.cost)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); + plugin.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + + if (!land.AllowAutoPay && AutoPay) { + plugin.msg(player, lm.Residence_CantAutoPay); + AutoPay = false; + } + + if (plugin.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { + RentedLand newrent = new RentedLand(); + newrent.player = player.getName(); + newrent.startTime = System.currentTimeMillis(); + newrent.endTime = System.currentTimeMillis() + daysToMs(land.days); + newrent.AutoPay = AutoPay; + res.setRented(newrent); + rentedLand.add(res); + + plugin.getSignUtil().CheckSign(res); + + Visualizer v = new Visualizer(player); + v.setAreas(res); + plugin.getSelectionManager().showBounds(player, v); + + res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); + res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); + res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); + plugin.msg(player, lm.Residence_RentSuccess, res.getName(), land.days); + + if (plugin.getSchematicManager() != null && + plugin.getConfigManager().RestoreAfterRentEnds && + !plugin.getConfigManager().SchematicsSaveOnFlagChange && + res.getPermissions().has("backup", true)) { + plugin.getSchematicManager().save(res); + } + + } else { + player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); + } + } else { + plugin.msg(player, lm.Economy_NotEnoughMoney); + } + } + + public void payRent(Player player, String landName, boolean resadmin) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + payRent(player, res, resadmin); + } + + public void payRent(Player player, ClaimedResidence res, boolean resadmin) { + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + if (!plugin.getConfigManager().enabledRentSystem()) { + plugin.msg(player, lm.Rent_Disabled); + return; + } + + if (!res.isForRent()) { + plugin.msg(player, lm.Residence_NotForRent); + return; + } + + if (res.isRented() && !getRentingPlayer(res).equals(player.getName()) && !resadmin) { + plugin.msg(player, lm.Rent_NotByYou); + return; + } + + RentableLand land = res.getRentable(); + RentedLand rentedLand = res.getRentedLand(); + + if (rentedLand == null) { + plugin.msg(player, lm.Residence_NotRented); + return; + } + + if (!land.AllowRenewing) { + plugin.msg(player, lm.Rent_OneTime); + return; + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (!resadmin && group.getMaxRentDays() != -1 && + msToDays((rentedLand.endTime - System.currentTimeMillis()) + daysToMs(land.days)) >= group.getMaxRentDays()) { + plugin.msg(player, lm.Rent_MaxRentDays, group.getMaxRentDays()); + return; + } + + if (plugin.getEconomyManager().canAfford(player.getName(), land.cost)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); + plugin.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + if (plugin.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { + rentedLand.endTime = rentedLand.endTime + daysToMs(land.days); + plugin.getSignUtil().CheckSign(res); + + Visualizer v = new Visualizer(player); + v.setAreas(res); + plugin.getSelectionManager().showBounds(player, v); + + plugin.msg(player, lm.Rent_Extended, land.days, res.getName()); + plugin.msg(player, lm.Rent_Expire, GetTime.getTime(rentedLand.endTime)); + } else { + player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); + } + } else { + plugin.msg(player, lm.Economy_NotEnoughMoney); + } + } + + @Override + public void unrent(Player player, String landName, boolean resadmin) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + unrent(player, res, resadmin); + } + + public void unrent(Player player, ClaimedResidence res, boolean resadmin) { + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + RentedLand rent = res.getRentedLand(); + if (rent == null) { + plugin.msg(player, lm.Residence_NotRented); + return; + } + + if (resadmin || rent.player.equals(player.getName()) || res.isOwner(player) && player.hasPermission("residence.market.evict")) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENTABLE); + plugin.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + + rentedLand.remove(res); + res.setRented(null); + if (!res.getRentable().AllowRenewing && !res.getRentable().StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + + boolean backup = res.getPermissions().has("backup", false); + + if (plugin.getConfigManager().isRemoveLwcOnUnrent()) + plugin.getResidenceManager().removeLwcFromResidence(player, res); + + res.getPermissions().applyDefaultFlags(); + + if (plugin.getSchematicManager() != null && plugin.getConfigManager().RestoreAfterRentEnds && backup) { + plugin.getSchematicManager().load(res); + // set true if its already exists + res.getPermissions().setFlag("backup", FlagState.TRUE); + } + plugin.getSignUtil().CheckSign(res); + + plugin.msg(player, lm.Residence_Unrent, res.getName()); + } else { + plugin.msg(player, lm.General_NoPermission); + } + } + + private static long daysToMs(int days) { +// return (((long) days) * 1000L); + return ((days) * 24L * 60L * 60L * 1000L); + } + + private static int msToDays(long ms) { + return (int) Math.ceil((((ms / 1000D) / 60D) / 60D) / 24D); + } + + @Override + public void removeFromForRent(Player player, String landName, boolean resadmin) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + removeFromForRent(player, res, resadmin); + } + + public void removeFromForRent(Player player, ClaimedResidence res, boolean resadmin) { + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return; + } + + if (rentableLand.contains(res)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENT); + plugin.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + rentableLand.remove(res); + res.setRentable(null); + res.getPermissions().applyDefaultFlags(); + plugin.getSignUtil().CheckSign(res); + plugin.msg(player, lm.Residence_RemoveRentable, res.getResidenceName()); + } else { + plugin.msg(player, lm.Residence_NotForRent); + } + } + + @Override + public void removeFromRent(String landName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + removeFromRent(res); + } + + public void removeFromRent(ClaimedResidence res) { + rentedLand.remove(res); + } + + @Override + public void removeRentable(String landName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + removeRentable(res); + } + + public void removeRentable(ClaimedResidence res) { + if (res == null) + return; + removeFromRent(res); + rentableLand.remove(res); + plugin.getSignUtil().removeSign(res.getName()); + } + + @Override + public boolean isForRent(String landName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return isForRent(res); + } + + public boolean isForRent(ClaimedResidence res) { + if (res == null) + return false; + return rentableLand.contains(res); + } + + public RentableLand getRentableLand(String landName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getRentableLand(res); + } + + public RentableLand getRentableLand(ClaimedResidence res) { + if (res == null) + return null; + if (res.isForRent()) + return res.getRentable(); + return null; + } + + @Override + public boolean isRented(String landName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return isRented(res); + } + + public boolean isRented(ClaimedResidence res) { + if (res == null) + return false; + return rentedLand.contains(res); + } + + @Override + public String getRentingPlayer(String landName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getRentingPlayer(res); + } + + public String getRentingPlayer(ClaimedResidence res) { + if (res == null) + return null; + return res.isRented() ? res.getRentedLand().player : null; + } + + @Override + public int getCostOfRent(String landName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getCostOfRent(res); + } + + public int getCostOfRent(ClaimedResidence res) { + if (res == null) + return 0; + return res.isForRent() ? res.getRentable().cost : 0; + } + + @Override + public boolean getRentableRepeatable(String landName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getRentableRepeatable(res); + } + + public boolean getRentableRepeatable(ClaimedResidence res) { + if (res == null) + return false; + return res.isForRent() ? res.getRentable().AllowRenewing : false; + } + + @Override + public boolean getRentedAutoRepeats(String landName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getRentedAutoRepeats(res); + } + + public boolean getRentedAutoRepeats(ClaimedResidence res) { + if (res == null) + return false; + return getRentableRepeatable(res) ? (rentedLand.contains(res) ? res.getRentedLand().AutoPay : false) : false; + } + + @Override + public int getRentDays(String landName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getRentDays(res); + } + + public int getRentDays(ClaimedResidence res) { + if (res == null) + return 0; + return res.isForRent() ? res.getRentable().days : 0; + } + + @Override + public void checkCurrentRents() { + Set t = new HashSet(); + t.addAll(rentedLand); + for (ClaimedResidence res : t) { + + if (res == null) + continue; + + RentedLand land = res.getRentedLand(); + if (land == null) + continue; + + if (land.endTime > System.currentTimeMillis()) + continue; + + if (plugin.getConfigManager().debugEnabled()) + System.out.println("Rent Check: " + res.getName()); + + ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); + plugin.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + continue; + + RentableLand rentable = res.getRentable(); + if (!rentable.AllowRenewing) { + if (!rentable.StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + rentedLand.remove(res); + res.setRented(null); + res.getPermissions().applyDefaultFlags(); + plugin.getSignUtil().CheckSign(res); + continue; + } + if (land.AutoPay && rentable.AllowAutoPay) { + if (!plugin.getEconomyManager().canAfford(land.player, rentable.cost)) { + if (!rentable.StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + rentedLand.remove(res); + res.setRented(null); + res.getPermissions().applyDefaultFlags(); + } else { + if (!plugin.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { + if (!rentable.StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + rentedLand.remove(res); + res.setRented(null); + res.getPermissions().applyDefaultFlags(); + } else { + land.endTime = System.currentTimeMillis() + daysToMs(rentable.days); + } + } + + plugin.getSignUtil().CheckSign(res); + continue; + } + if (!rentable.StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + rentedLand.remove(res); + res.setRented(null); + + boolean backup = res.getPermissions().has("backup", false); + + res.getPermissions().applyDefaultFlags(); + + if (plugin.getSchematicManager() != null && plugin.getConfigManager().RestoreAfterRentEnds && backup) { + plugin.getSchematicManager().load(res); + plugin.getSignUtil().CheckSign(res); + // set true if its already exists + res.getPermissions().setFlag("backup", FlagState.TRUE); + // To avoid lag spikes on multiple residence restores at once, will limit to one residence at time + break; + } + plugin.getSignUtil().CheckSign(res); + } + } + + @Override + public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + setRentRepeatable(player, res, value, resadmin); + } + + public void setRentRepeatable(Player player, ClaimedResidence res, boolean value, boolean resadmin) { + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + RentableLand land = res.getRentable(); + + if (!res.isOwner(player) && !resadmin) { + plugin.msg(player, lm.Residence_NotOwner); + return; + } + + if (land == null || !res.isOwner(player) && !resadmin) { + plugin.msg(player, lm.Residence_NotOwner); + return; + } + + land.AllowRenewing = value; + if (!value && this.isRented(res)) + res.getRentedLand().AutoPay = false; + + if (value) + plugin.msg(player, lm.Rentable_EnableRenew, res.getResidenceName()); + else + plugin.msg(player, lm.Rentable_DisableRenew, res.getResidenceName()); + + } + + @Override + public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + setRentedRepeatable(player, res, value, resadmin); + } + + public void setRentedRepeatable(Player player, ClaimedResidence res, boolean value, boolean resadmin) { + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + RentedLand land = res.getRentedLand(); + + if (land == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + if (!res.getRentable().AllowAutoPay && value) { + plugin.msg(player, lm.Residence_CantAutoPay); + return; + } + + if (!land.player.equals(player.getName()) && !resadmin) { + plugin.msg(player, lm.Residence_NotOwner); + return; + } + + if (!land.player.equals(player.getName()) && !resadmin) { + plugin.msg(player, lm.Residence_NotOwner); + return; + } + + land.AutoPay = value; + if (value) + plugin.msg(player, lm.Rent_EnableRenew, res.getResidenceName()); + else + plugin.msg(player, lm.Rent_DisableRenew, res.getResidenceName()); + + plugin.getSignUtil().CheckSign(res); + } + + public void printRentInfo(Player player, String landName) { + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + printRentInfo(player, res); + } + + public void printRentInfo(Player player, ClaimedResidence res) { + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + RentableLand rentable = res.getRentable(); + RentedLand rented = res.getRentedLand(); + if (rentable != null) { + plugin.msg(player, lm.General_Separator); + plugin.msg(player, lm.General_Land, res.getName()); + plugin.msg(player, lm.General_Cost, rentable.cost, rentable.days); + plugin.msg(player, lm.Rentable_AllowRenewing, rentable.AllowRenewing); + plugin.msg(player, lm.Rentable_StayInMarket, rentable.StayInMarket); + plugin.msg(player, lm.Rentable_AllowAutoPay, rentable.AllowAutoPay); + if (rented != null) { + plugin.msg(player, lm.Residence_RentedBy, rented.player); + + if (rented.player.equals(player.getName()) || res.isOwner(player) || plugin.isResAdminOn(player)) + player.sendMessage((rented.AutoPay ? plugin.msg(lm.Rent_AutoPayTurnedOn) : plugin.msg(lm.Rent_AutoPayTurnedOff)) + + "\n"); + plugin.msg(player, lm.Rent_Expire, GetTime.getTime(rented.endTime)); + } else { + plugin.msg(player, lm.General_Status, plugin.msg(lm.General_Available)); + } + plugin.msg(player, lm.General_Separator); + } else { + plugin.msg(player, lm.General_Separator); + plugin.msg(player, lm.Residence_NotForRent); + plugin.msg(player, lm.General_Separator); + } + } + + public void printRentableResidences(Player player, int page) { + plugin.msg(player, lm.Rentable_Land); + StringBuilder sbuild = new StringBuilder(); + sbuild.append(ChatColor.GREEN); + + PageInfo pi = new PageInfo(10, rentableLand.size(), page); + int position = -1; + for (ClaimedResidence res : rentableLand) { + if (res == null) + continue; + + position++; + + if (position > pi.getEnd()) + break; + if (!pi.isInRange(position)) + continue; + boolean rented = res.isRented(); + + if (!res.getRentable().AllowRenewing && rented) + continue; + + String rentedBy = ""; + String hover = ""; + if (rented) { + RentedLand rent = res.getRentedLand(); + rentedBy = plugin.msg(lm.Residence_RentedBy, rent.player); + hover = GetTime.getTime(rent.endTime); + } + + String msg = plugin.msg(lm.Rent_RentList, pi.getPositionForOutput(position), res.getName(), res.getRentable().cost, res.getRentable().days, res.getRentable().AllowRenewing, + res.getOwner(), rentedBy); + + RawMessage rm = new RawMessage(); + rm.add(msg, "§2" + hover); + + if (!hover.equalsIgnoreCase("")) { + rm.show(player); + } else { + player.sendMessage(msg); + } + } + + plugin.getInfoPageManager().ShowPagination(player, pi.getTotalPages(), page, "/res market list rent"); + + } + + @Override + public int getRentCount(String player) { + int count = 0; + for (ClaimedResidence res : rentedLand) { + if (res.getRentedLand().player.equalsIgnoreCase(player)) + count++; + } + return count; + } + + @Override + public int getRentableCount(String player) { + int count = 0; + for (ClaimedResidence res : rentableLand) { + if (res != null) + if (res.isOwner(player)) + count++; + } + return count; + } + + @Override + public Set getRentableResidences() { + return rentableLand; + } + + @Override + public Set getCurrentlyRentedResidences() { + return rentedLand; + } + + @SuppressWarnings("unchecked") + public void load(Map root) { + if (root == null) + return; + this.rentableLand.clear(); + + Map rentables = (Map) root.get("Rentables"); + for (Entry rent : rentables.entrySet()) { + RentableLand one = loadRentable((Map) rent.getValue()); + ClaimedResidence res = plugin.getResidenceManager().getByName(rent.getKey()); + if (res != null) { + res.setRentable(one); + this.rentableLand.add(res); + } + } + Map rented = (Map) root.get("Rented"); + for (Entry rent : rented.entrySet()) { + RentedLand one = loadRented((Map) rent.getValue()); + ClaimedResidence res = plugin.getResidenceManager().getByName(rent.getKey()); + if (res != null) { + res.setRented(one); + this.rentedLand.add(res); + } + } + } + + public Map save() { + Map root = new HashMap(); + Map rentables = new HashMap(); + for (ClaimedResidence res : rentableLand) { + if (res == null || res.getRentable() == null) + continue; + rentables.put(res.getName(), res.getRentable().save()); + } + Map rented = new HashMap(); + for (ClaimedResidence res : rentedLand) { + if (res == null || res.getRentedLand() == null) + continue; + rented.put(res.getName(), res.getRentedLand().save()); + } + root.put("Rentables", rentables); + root.put("Rented", rented); + return root; + } + + private static RentableLand loadRentable(Map map) { + RentableLand newland = new RentableLand(); + newland.cost = (Integer) map.get("Cost"); + newland.days = (Integer) map.get("Days"); + newland.AllowRenewing = (Boolean) map.get("Repeatable"); + if (map.containsKey("StayInMarket")) + newland.StayInMarket = (Boolean) map.get("StayInMarket"); + if (map.containsKey("AllowAutoPay")) + newland.AllowAutoPay = (Boolean) map.get("AllowAutoPay"); + return newland; + } + + private static RentedLand loadRented(Map map) { + RentedLand newland = new RentedLand(); + newland.player = (String) map.get("Player"); + newland.startTime = (Long) map.get("StartTime"); + newland.endTime = (Long) map.get("EndTime"); + newland.AutoPay = (Boolean) map.get("AutoRefresh"); + return newland; + } + +} diff --git a/src/com/bekvon/bukkit/residence/utils/RawMessage.java b/src/com/bekvon/bukkit/residence/utils/RawMessage.java index 31e731b21..4a8726464 100644 --- a/src/com/bekvon/bukkit/residence/utils/RawMessage.java +++ b/src/com/bekvon/bukkit/residence/utils/RawMessage.java @@ -94,6 +94,7 @@ public RawMessage show(Player player) { public RawMessage showClean(Player player) { if (combinedClean.isEmpty()) combineClean(); + Debug.D(combined); player.sendMessage(combined); return this; } From b6065a23f368c48bb8fbc531133f7733bc3cd849 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2017 13:56:07 +0300 Subject: [PATCH 0363/1142] Locale change for release command to unrent for simpler usage --- src/com/bekvon/bukkit/residence/commands/market.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index a9d21b913..831bcef59 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -475,11 +475,12 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "confirm.Description", "Confirms residence unrent/release action"); c.get(path + "confirm.Info", Arrays.asList("&eUsage: &6/res market confirm")); - c.get(path + "release.Description", "Remove a residence from rent or rentable."); - c.get(path + "release.Info", Arrays.asList("&eUsage: &6/res market release [residence]", + c.get(path + "unrent.Description", "Remove a residence from rent or rentable."); + c.get(path + "unrent.Info", Arrays.asList("&eUsage: &6/res market unrent [residence]", "If you are the renter, this command releases the rent on the house for you.", "If you are the owner, this command makes the residence not for rent anymore.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "release"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "unrent"), Arrays.asList("[residence]")); } } From 2229eefb307d012a9cde26f9288490903b1a1c26 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2017 14:18:22 +0300 Subject: [PATCH 0364/1142] Allow initial wither explosion when witherdesctruction is set to false --- .../bukkit/residence/listeners/ResidenceEntityListener.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 825eaf5f1..0157b916b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -647,7 +647,6 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { ent.remove(); } break; - case WITHER: case WITHER_SKULL: if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) { event.setCancelled(true); @@ -713,7 +712,6 @@ public void onEntityExplode(EntityExplodeEvent event) { if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) cancel = true; break; - case WITHER: case WITHER_SKULL: if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) cancel = true; From f99782d2720c3570b03182637be50dc04deadfd1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2017 15:32:48 +0300 Subject: [PATCH 0365/1142] Show message informing that there is nothing to show when player is not owning any residences --- src/com/bekvon/bukkit/residence/commands/lists.java | 6 +++--- src/com/bekvon/bukkit/residence/containers/lm.java | 1 + .../bekvon/bukkit/residence/text/help/InformationPager.java | 5 +++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/lists.java b/src/com/bekvon/bukkit/residence/commands/lists.java index 94cc0b192..94ea9b4c9 100644 --- a/src/com/bekvon/bukkit/residence/commands/lists.java +++ b/src/com/bekvon/bukkit/residence/commands/lists.java @@ -47,17 +47,17 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } else if (args.length == 5) { if (args[1].equals("set")) { plugin.getPermissionListManager().getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); - plugin.msg(player, lm.Flag_Set); + plugin.msg(player, lm.Flag_Set, args[3], args[2], FlagPermissions.stringToFlagState(args[4])); return true; } } else if (args.length == 6) { if (args[1].equals("gset")) { plugin.getPermissionListManager().getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - plugin.msg(player, lm.Flag_Set); + plugin.msg(player, lm.Flag_Set, args[3], args[2], FlagPermissions.stringToFlagState(args[4])); return true; } else if (args[1].equals("pset")) { plugin.getPermissionListManager().getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - plugin.msg(player, lm.Flag_Set); + plugin.msg(player, lm.Flag_Set, args[3], args[2], FlagPermissions.stringToFlagState(args[4])); return true; } } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 21927cefb..7f5a5154c 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -124,6 +124,7 @@ public enum lm { Subzone_DeleteConfirm("&eAre you sure you want to delete subzone &6%1&e, use &6/res confirm &eto confirm."), Subzone_OwnerChange("&eSubzone &6%1 &eowner changed to &6%2"), + Residence_DontOwn("&eNothing to show"), Residence_Hidden(" &e(&6Hidden&e)"), Residence_Bought("&eYou bought residence &6%1"), Residence_Buy("&6%1 &ehas bought residence &6%2 &efrom you."), diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 476bc821e..4eb7cc26c 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -57,6 +57,11 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap Date: Tue, 9 May 2017 15:58:20 +0300 Subject: [PATCH 0366/1142] Check for non existing area when trying to print info --- .../bukkit/residence/text/help/InformationPager.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 4eb7cc26c..199d52c89 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -57,8 +57,8 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { worldInfo += "&6 (&3"; + CuboidArea area = res.getAreaArray()[0]; worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() .getBlockZ()); @@ -175,7 +176,7 @@ private void printListWithDelay(final CommandSender sender, final TreeMap 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { worldInfo += "&6 (&3"; CuboidArea area = res.getAreaArray()[0]; worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() From f72fec0083708997edc39564e29d8b63784108dd Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2017 17:34:59 +0300 Subject: [PATCH 0367/1142] Updating build.xml with updated links --- build.xml | 48 ++++++++++++++---------------------------------- 1 file changed, 14 insertions(+), 34 deletions(-) diff --git a/build.xml b/build.xml index 02547deac..dd5a72588 100644 --- a/build.xml +++ b/build.xml @@ -1,7 +1,8 @@ - + + @@ -26,45 +27,24 @@ - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + Compiling - + @@ -79,7 +59,7 @@ Packaging JAR distribution - + From 58f27f6c38a78984f7562499873eb45182f1dab1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 May 2017 11:47:03 +0300 Subject: [PATCH 0368/1142] New flag (anvilbreak) to prevent anvil breaking on usage --- .../bukkit/residence/containers/Flags.java | 1 + .../listeners/ResidenceBlockListener.java | 26 +++++++++++++++++++ src/plugin.yml | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index e4b8302a8..646d3984b 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -5,6 +5,7 @@ public enum Flags { admin(7, 0, FlagMode.Player, "Gives a player permission to change flags on a residence", true), animalkilling(365, 0, FlagMode.Both, "Allows or denys animal killing", true), animals(383, 90, FlagMode.Residence, "Allows or denys animal spawns", true), + anvilbreak(145, 90, FlagMode.Residence, "Allows or denys anvil break in residence", true), backup(47, 0, FlagMode.Residence, "If set to true, restores previous look of area (WordEdit required)", false), bank(130, 0, FlagMode.Both, "Allows or denys deposit/withdraw money from res bank", true), bed(355, 0, FlagMode.Both, "Allows or denys players to use beds", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 7f03abffb..8bbf27557 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -42,7 +42,10 @@ import org.bukkit.event.block.EntityBlockFormEvent; import org.bukkit.event.block.LeavesDecayEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.world.StructureGrowEvent; +import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; @@ -57,6 +60,29 @@ public ResidenceBlockListener(Residence residence) { this.plugin = residence; } + @EventHandler(priority = EventPriority.LOWEST) + public void onAnvilInventoryClick(InventoryClickEvent e) { + Inventory inv = e.getInventory(); + if (inv == null || inv.getType() != InventoryType.ANVIL || e.getInventory().getLocation() == null) + return; + Block b = e.getInventory().getLocation().getBlock(); + if (b == null || b.getType() != Material.ANVIL) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(e.getInventory().getLocation()); + if (res == null) + return; + // Fix anvil only when item is picked up + if (e.getRawSlot() != 2) + return; + if (e.getCurrentItem() == null || e.getCurrentItem().getType() == Material.AIR) + return; + if (!res.getPermissions().has(Flags.anvilbreak, FlagCombo.OnlyFalse)) + return; + + b.setData((byte) 1); + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlantGrow(BlockGrowEvent event) { if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) diff --git a/src/plugin.yml b/src/plugin.yml index 72949e80e..29ac5616f 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.6.1.4 +version: 4.6.2.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From e5b06779ffcd4f6f7e8250322935e25a118a739c Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 May 2017 12:03:56 +0300 Subject: [PATCH 0369/1142] New flag (itempickup) to prevent item pickup in particular residence --- src/com/bekvon/bukkit/residence/ConfigManager.java | 9 +++++++++ .../bekvon/bukkit/residence/containers/Flags.java | 2 ++ .../listeners/ResidencePlayerListener.java | 14 ++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 3b1dd48d3..6efb1c011 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -77,6 +77,7 @@ public class ConfigManager { protected int chatPrefixLength; protected int leaseCheckInterval; protected int autoSaveInt; + private int ItemPickUpDelay; // Backup stuff protected boolean BackupAutoCleanUpUse; @@ -418,6 +419,10 @@ public void UpdateConfigFile() { DisableListeners = c.get("Global.Optimizations.DisabledWorlds.DisableListeners", true); c.getW().addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); DisableCommands = c.get("Global.Optimizations.DisabledWorlds.DisableCommands", true); + + + c.getW().addComment("Global.Optimizations.ItemPickUpDelay", "Delay in seconds between item pickups after residence flag prevents it","Keep it at arround 10 sec to lower unesecery checks"); + ItemPickUpDelay = c.get("Global.Optimizations.ItemPickUpDelay", 10); // c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", // "You can bypass this with residence.checkbadflags permission node"); @@ -1706,4 +1711,8 @@ public Double getWalkSpeed1() { public Double getWalkSpeed2() { return WalkSpeed2; } + + public int getItemPickUpDelay() { + return ItemPickUpDelay; + } } diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 646d3984b..68705c500 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -55,6 +55,8 @@ public enum Flags { iceform(79, 0, FlagMode.Residence, "Prevents from ice forming", true), icemelt(79, 0, FlagMode.Residence, "Prevents ice from melting", true), ignite(259, 0, FlagMode.Both, "Allows or denys fire ignition", true), + itemdrop(288, 0, FlagMode.Both, "Allows or denys item drop", true), + itempickup(289, 0, FlagMode.Both, "Allows or denys item pickup", true), jump2(165, 0, FlagMode.Residence, "Allows to jump 2 blocks high", false), jump3(165, 0, FlagMode.Residence, "Allows to jump 3 blocks high", false), keepinv(298, 0, FlagMode.Residence, "Players keeps inventory after death", false), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 79687f60d..460443859 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -34,6 +34,7 @@ import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerBucketFillEvent; @@ -45,6 +46,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerShearEntityEvent; @@ -68,6 +70,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; @@ -133,6 +136,17 @@ else if (perms.has(Flags.jump3, FlagCombo.OnlyTrue)) } + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getItem().getLocation()); + if (res == null) + return; + if (!res.getPermissions().has(Flags.itempickup, FlagCombo.OnlyFalse)) + return; + event.setCancelled(true); + event.getItem().setPickupDelay(plugin.getConfigManager().getItemPickUpDelay() * 20); + } + // Adding to chat prefix main residence name @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerGlobalChat(AsyncPlayerChatEvent event) { From 39876e7368d596cfa91dbc49733750ea6d7680a0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 May 2017 12:06:27 +0300 Subject: [PATCH 0370/1142] New flag (itemdrop) to prevent item drop in residence area --- .../residence/listeners/ResidencePlayerListener.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 460443859..fd1bdcd18 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -40,6 +40,7 @@ import org.bukkit.event.player.PlayerBucketFillEvent; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; @@ -146,6 +147,16 @@ public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { event.setCancelled(true); event.getItem().setPickupDelay(plugin.getConfigManager().getItemPickUpDelay() * 20); } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerDropItemEvent(PlayerDropItemEvent event) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation()); + if (res == null) + return; + if (!res.getPermissions().has(Flags.itemdrop, FlagCombo.OnlyFalse)) + return; + event.setCancelled(true); + } // Adding to chat prefix main residence name @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) From 2b20afc6380eea87aa4c653880eebfbc981b4998 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 May 2017 12:27:08 +0300 Subject: [PATCH 0371/1142] Additional support for -1 value in groups.yml for: Max residences Max rents Max subzones Max subzonedepth Aditional permissions: residence.max.res.unlimited residence.max.rents.unlimited residence.max.subzones.unlimited residence.max.subzonedepth.unlimited --- .../residence/containers/ResidencePlayer.java | 60 ++++++++++++++++++- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 1cfb77101..59ba3a555 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -14,6 +14,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { @@ -33,6 +34,8 @@ public class ResidencePlayer { private int maxSubzones = -1; private int maxSubzoneDepth = -1; + private int maxValue = 9999; + public ResidencePlayer(Player player) { if (player == null) return; @@ -104,9 +107,23 @@ public void RecalculatePermissions() { public void recountMaxRes() { if (this.getGroup() != null) this.maxRes = this.getGroup().getMaxZones(); + this.maxRes = this.maxRes == -1 ? maxValue : this.maxRes; + + if (player != null && player.isOnline()) { + if (this.player.isPermissionSet("residence.max.res.unlimited")) { + this.maxRes = maxValue; + return; + } + } else if (ofPlayer != null) { + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res.unlimited", Residence.getInstance().getConfigManager().getDefaultWorld())) { + this.maxRes = maxValue; + return; + } + } + for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxResCount(); i++) { if (player != null && player.isOnline()) { - if (this.player.hasPermission("residence.max.res." + i)) + if (this.player.isPermissionSet("residence.max.res." + i)) this.maxRes = i; } else if (ofPlayer != null) { if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res." + i, Residence.getInstance().getConfigManager().getDefaultWorld())) @@ -116,9 +133,21 @@ public void recountMaxRes() { } public void recountMaxRents() { + if (player != null) { + if (this.player.isPermissionSet("residence.max.rents.unlimited")) { + this.maxRents = maxValue; + return; + } + } else { + if (ofPlayer != null) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.rents.unlimited", Residence.getInstance().getConfigManager().getDefaultWorld())) { + this.maxRents = maxValue; + return; + } + } for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxRentCount(); i++) { if (player != null) { - if (this.player.isPermissionSet("residence.max.rents." + i)) + if (this.player.isPermissionSet("residence.max.rents.unlimited" + i)) this.maxRents = i; } else { if (ofPlayer != null) @@ -128,6 +157,7 @@ public void recountMaxRents() { } int m = this.getGroup().getMaxRents(); + m = m == -1 ? maxValue : m; if (this.maxRents < m) this.maxRents = m; } @@ -138,6 +168,18 @@ public int getMaxRents() { } public void recountMaxSubzones() { + if (player != null) { + if (this.player.isPermissionSet("residence.max.subzones.unlimited")) { + this.maxSubzones = maxValue; + return; + } + } else { + if (ofPlayer != null) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzones.unlimited", Residence.getInstance().getConfigManager().getDefaultWorld())) { + this.maxSubzones = maxValue; + return; + } + } for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxSubzonesCount(); i++) { if (player != null) { if (this.player.isPermissionSet("residence.max.subzones." + i)) @@ -150,6 +192,7 @@ public void recountMaxSubzones() { } int m = this.getGroup().getMaxSubzones(); + m = m == -1 ? maxValue : m; if (this.maxSubzones < m) this.maxSubzones = m; } @@ -160,6 +203,18 @@ public int getMaxSubzones() { } public void recountMaxSubzoneDepth() { + if (player != null) { + if (this.player.isPermissionSet("residence.max.subzonedepth.unlimited")) { + this.maxSubzoneDepth = maxValue; + return; + } + } else { + if (ofPlayer != null) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzonedepth.unlimited", Residence.getInstance().getConfigManager().getDefaultWorld())) { + this.maxSubzoneDepth = maxValue; + return; + } + } for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxSubzoneDepthCount(); i++) { if (player != null) { if (this.player.isPermissionSet("residence.max.subzonedepth." + i)) @@ -172,6 +227,7 @@ public void recountMaxSubzoneDepth() { } int m = this.getGroup().getMaxSubzoneDepth(); + m = m == -1 ? maxValue : m; if (this.maxSubzoneDepth < m) this.maxSubzoneDepth = m; } From cccde33e7d61271ebbf92383766c2991fde3a48b Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 May 2017 17:52:33 +0300 Subject: [PATCH 0372/1142] Better way to find main residence area and default tp location --- .../bukkit/residence/commands/compass.java | 28 +- .../residence/containers/ResidencePlayer.java | 1 - .../protection/ClaimedResidence.java | 51 +- .../residence/protection/CuboidArea.java | 452 +++++++++--------- 4 files changed, 284 insertions(+), 248 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index 9dc44bafd..56139f4ef 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -1,6 +1,9 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; import org.bukkit.Location; import org.bukkit.command.Command; @@ -12,6 +15,8 @@ import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; public class compass implements cmd { @@ -30,20 +35,25 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } if (!plugin.hasPermission(player, "residence.compass")) - return true; - - if (plugin.getResidenceManager().getByName(args[1]) != null) { - if (plugin.getResidenceManager().getByName(args[1]).getWorld().equalsIgnoreCase(player.getWorld().getName())) { - Location low = plugin.getResidenceManager().getByName(args[1]).getArea("main").getLowLoc(); - Location high = plugin.getResidenceManager().getByName(args[1]).getArea("main").getHighLoc(); - Location mid = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high - .getBlockZ()) / 2); - player.setCompassTarget(mid); + return true; + + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + + if (res != null) { + if (res.getWorld().equalsIgnoreCase(player.getWorld().getName())) { + CuboidArea area = res.getMainArea(); + if (area == null) + return false; + Location loc = res.getTeleportLocation(); + if (loc == null) + return false; + player.setCompassTarget(loc); plugin.msg(player, lm.General_CompassTargetSet, args[1]); } } else { plugin.msg(player, lm.Invalid_Residence); } + return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 59ba3a555..e95621d70 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -14,7 +14,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 13b35389b..6a6777ffc 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1049,6 +1049,13 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { return loc; } + public CuboidArea getMainArea() { + CuboidArea area = areas.get("main"); + if (area == null && !areas.isEmpty()) + area = areas.get(0); + return area; + } + public CuboidArea getAreaByLoc(Location loc) { for (CuboidArea thisarea : areas.values()) { if (thisarea.containsLoc(loc)) { @@ -1151,6 +1158,16 @@ public int getZoneDepth() { return count; } + public Location getTeleportLocation() { + if (tpLoc == null) { + Location low = this.getMainArea().getLowLoc(); + Location high = this.getMainArea().getHighLoc(); + Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); + tpLoc = this.getMiddleFreeLoc(t, null); + } + return tpLoc; + } + public void setTpLoc(Player player, boolean resadmin) { if (!this.perms.hasResidencePermission(player, false) && !resadmin) { plugin.msg(player, lm.General_NoPermission); @@ -1233,24 +1250,26 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r plugin.getTeleportDelayMap().add(reqPlayer.getName()); } - if (tpLoc != null) { + Location loc = this.getTeleportLocation(); + +// if (loc != null) { if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) - performDelaydTp(tpLoc, targetPlayer, reqPlayer, true); + performDelaydTp(loc, targetPlayer, reqPlayer, true); else - performInstantTp(tpLoc, targetPlayer, reqPlayer, true); - } else { - CuboidArea area = areas.values().iterator().next(); - if (area == null) { - reqPlayer.sendMessage(ChatColor.RED + "Could not find area to teleport to..."); - plugin.getTeleportDelayMap().remove(targetPlayer.getName()); - return; - } - final Location targloc = this.getMiddleFreeLoc(area.getHighLoc(), targetPlayer); - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) - performDelaydTp(targloc, targetPlayer, reqPlayer, true); - else - performInstantTp(targloc, targetPlayer, reqPlayer, true); - } + performInstantTp(loc, targetPlayer, reqPlayer, true); +// } else { +// CuboidArea area = this.getMainArea(); +// if (area == null) { +// reqPlayer.sendMessage(ChatColor.RED + "Could not find area to teleport to..."); +// plugin.getTeleportDelayMap().remove(targetPlayer.getName()); +// return; +// } +// Location targloc = this.getMiddleFreeLoc(area.getHighLoc(), targetPlayer); +// if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) +// performDelaydTp(targloc, targetPlayer, reqPlayer, true); +// else +// performInstantTp(targloc, targetPlayer, reqPlayer, true); +// } } public void TpTimer(final Player player, final int t) { diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index cbb427eb9..f75a5a353 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -1,222 +1,230 @@ -package com.bekvon.bukkit.residence.protection; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.protection.ResidenceManager.ChunkRef; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.World; - -public class CuboidArea { - protected Location highPoints; - protected Location lowPoints; - protected String worldName; - - public CuboidArea(Location startLoc, Location endLoc) { - int highx, highy, highz, lowx, lowy, lowz; - if (startLoc.getBlockX() > endLoc.getBlockX()) { - highx = startLoc.getBlockX(); - lowx = endLoc.getBlockX(); - } else { - highx = endLoc.getBlockX(); - lowx = startLoc.getBlockX(); - } - if (startLoc.getBlockY() > endLoc.getBlockY()) { - highy = startLoc.getBlockY(); - lowy = endLoc.getBlockY(); - } else { - highy = endLoc.getBlockY(); - lowy = startLoc.getBlockY(); - } - if (startLoc.getBlockZ() > endLoc.getBlockZ()) { - highz = startLoc.getBlockZ(); - lowz = endLoc.getBlockZ(); - } else { - highz = endLoc.getBlockZ(); - lowz = startLoc.getBlockZ(); - } - highPoints = new Location(startLoc.getWorld(), highx, highy, highz); - lowPoints = new Location(startLoc.getWorld(), lowx, lowy, lowz); - worldName = startLoc.getWorld().getName(); - } - - public CuboidArea() { - } - - public boolean isAreaWithinArea(CuboidArea area) { - return (this.containsLoc(area.highPoints) && this.containsLoc(area.lowPoints)); - } - - public boolean containsLoc(Location loc) { - if (loc == null) - return false; - - if (!loc.getWorld().getName().equals(worldName)) - return false; - - if (lowPoints.getBlockX() > loc.getBlockX()) - return false; - - if (highPoints.getBlockX() < loc.getBlockX()) - return false; - - if (lowPoints.getBlockZ() > loc.getBlockZ()) - return false; - - if (highPoints.getBlockZ() < loc.getBlockZ()) - return false; - - if (lowPoints.getBlockY() > loc.getBlockY()) - return false; - - if (highPoints.getBlockY() < loc.getBlockY()) - return false; - - return true; - } - - public boolean checkCollision(CuboidArea area) { - if (!area.getWorld().equals(this.getWorld())) { - return false; - } - if (area.containsLoc(lowPoints) || area.containsLoc(highPoints) || this.containsLoc(area.highPoints) || this.containsLoc(area.lowPoints)) { - return true; - } - return advCuboidCheckCollision(highPoints, lowPoints, area.highPoints, area.lowPoints); - } - - private static boolean advCuboidCheckCollision(Location A1High, Location A1Low, Location A2High, Location A2Low) { - int A1HX = A1High.getBlockX(); - int A1LX = A1Low.getBlockX(); - int A1HY = A1High.getBlockY(); - int A1LY = A1Low.getBlockY(); - int A1HZ = A1High.getBlockZ(); - int A1LZ = A1Low.getBlockZ(); - int A2HX = A2High.getBlockX(); - int A2LX = A2Low.getBlockX(); - int A2HY = A2High.getBlockY(); - int A2LY = A2Low.getBlockY(); - int A2HZ = A2High.getBlockZ(); - int A2LZ = A2Low.getBlockZ(); - if ((A1HX >= A2LX && A1HX <= A2HX) || (A1LX >= A2LX && A1LX <= A2HX) || (A2HX >= A1LX && A2HX <= A1HX) || (A2LX >= A1LX && A2LX <= A1HX)) { - if ((A1HY >= A2LY && A1HY <= A2HY) || (A1LY >= A2LY && A1LY <= A2HY) || (A2HY >= A1LY && A2HY <= A1HY) || (A2LY >= A1LY && A2LY <= A1HY)) { - if ((A1HZ >= A2LZ && A1HZ <= A2HZ) || (A1LZ >= A2LZ && A1LZ <= A2HZ) || (A2HZ >= A1LZ && A2HZ <= A1HZ) || (A2LZ >= A1LZ && A2LZ <= A1HZ)) { - return true; - } - } - } - return false; - } - - public long getSize() { - int xsize = (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; - int zsize = (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; - if (!Residence.getInstance().getConfigManager().isNoCostForYBlocks()) { - int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; - return xsize * ysize * zsize; - } - return xsize * zsize; - } - - public int getXSize() { - return (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; - } - - public int getYSize() { - return (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; - } - - public int getZSize() { - return (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; - } - - public Location getHighLoc() { - return highPoints; - } - - public Location getLowLoc() { - return lowPoints; - } - - public World getWorld() { - return highPoints.getWorld(); - } - - public void save(DataOutputStream out) throws IOException { - out.writeUTF(highPoints.getWorld().getName()); - out.writeInt(highPoints.getBlockX()); - out.writeInt(highPoints.getBlockY()); - out.writeInt(highPoints.getBlockZ()); - out.writeInt(lowPoints.getBlockX()); - out.writeInt(lowPoints.getBlockY()); - out.writeInt(lowPoints.getBlockZ()); - } - - public CuboidArea load(DataInputStream in) throws IOException { - CuboidArea newArea = new CuboidArea(); - Server server = Residence.getInstance().getServ(); - World world = server.getWorld(in.readUTF()); - int highx = in.readInt(); - int highy = in.readInt(); - int highz = in.readInt(); - int lowx = in.readInt(); - int lowy = in.readInt(); - int lowz = in.readInt(); - newArea.highPoints = new Location(world, highx, highy, highz); - newArea.lowPoints = new Location(world, lowx, lowy, lowz); - newArea.worldName = world.getName(); - return newArea; - } - - public Map save() { - Map root = new LinkedHashMap<>(); - root.put("X1", this.highPoints.getBlockX()); - root.put("Y1", this.highPoints.getBlockY()); - root.put("Z1", this.highPoints.getBlockZ()); - root.put("X2", this.lowPoints.getBlockX()); - root.put("Y2", this.lowPoints.getBlockY()); - root.put("Z2", this.lowPoints.getBlockZ()); - return root; - } - - public static CuboidArea load(Map root, World world) throws Exception { - if (root == null) { - throw new Exception("Invalid residence physical location..."); - } - CuboidArea newArea = new CuboidArea(); - int x1 = (Integer) root.get("X1"); - int y1 = (Integer) root.get("Y1"); - int z1 = (Integer) root.get("Z1"); - int x2 = (Integer) root.get("X2"); - int y2 = (Integer) root.get("Y2"); - int z2 = (Integer) root.get("Z2"); - newArea.highPoints = new Location(world, x1, y1, z1); - newArea.lowPoints = new Location(world, x2, y2, z2); - newArea.worldName = world.getName(); - return newArea; - } - - public List getChunks() { - List chunks = new ArrayList<>(); - Location high = this.highPoints; - Location low = this.lowPoints; - int lowX = ChunkRef.getChunkCoord(low.getBlockX()); - int lowZ = ChunkRef.getChunkCoord(low.getBlockZ()); - int highX = ChunkRef.getChunkCoord(high.getBlockX()); - int highZ = ChunkRef.getChunkCoord(high.getBlockZ()); - - for (int x = lowX; x <= highX; x++) { - for (int z = lowZ; z <= highZ; z++) { - chunks.add(new ChunkRef(x, z)); - } - } - return chunks; - } -} +package com.bekvon.bukkit.residence.protection; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ResidenceManager.ChunkRef; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.bukkit.Location; +import org.bukkit.Server; +import org.bukkit.World; + +public class CuboidArea { + private Location highPoints; + private Location lowPoints; + protected String worldName; + + public CuboidArea(Location startLoc, Location endLoc) { + int highx, highy, highz, lowx, lowy, lowz; + if (startLoc.getBlockX() > endLoc.getBlockX()) { + highx = startLoc.getBlockX(); + lowx = endLoc.getBlockX(); + } else { + highx = endLoc.getBlockX(); + lowx = startLoc.getBlockX(); + } + if (startLoc.getBlockY() > endLoc.getBlockY()) { + highy = startLoc.getBlockY(); + lowy = endLoc.getBlockY(); + } else { + highy = endLoc.getBlockY(); + lowy = startLoc.getBlockY(); + } + if (startLoc.getBlockZ() > endLoc.getBlockZ()) { + highz = startLoc.getBlockZ(); + lowz = endLoc.getBlockZ(); + } else { + highz = endLoc.getBlockZ(); + lowz = startLoc.getBlockZ(); + } + highPoints = new Location(startLoc.getWorld(), highx, highy, highz); + lowPoints = new Location(startLoc.getWorld(), lowx, lowy, lowz); + worldName = startLoc.getWorld().getName(); + } + + public CuboidArea() { + } + + public boolean isAreaWithinArea(CuboidArea area) { + return (this.containsLoc(area.highPoints) && this.containsLoc(area.lowPoints)); + } + + public boolean containsLoc(Location loc) { + if (loc == null) + return false; + + if (!loc.getWorld().getName().equals(worldName)) + return false; + + if (lowPoints.getBlockX() > loc.getBlockX()) + return false; + + if (highPoints.getBlockX() < loc.getBlockX()) + return false; + + if (lowPoints.getBlockZ() > loc.getBlockZ()) + return false; + + if (highPoints.getBlockZ() < loc.getBlockZ()) + return false; + + if (lowPoints.getBlockY() > loc.getBlockY()) + return false; + + if (highPoints.getBlockY() < loc.getBlockY()) + return false; + + return true; + } + + public boolean checkCollision(CuboidArea area) { + if (!area.getWorld().equals(this.getWorld())) { + return false; + } + if (area.containsLoc(lowPoints) || area.containsLoc(highPoints) || this.containsLoc(area.highPoints) || this.containsLoc(area.lowPoints)) { + return true; + } + return advCuboidCheckCollision(highPoints, lowPoints, area.highPoints, area.lowPoints); + } + + private static boolean advCuboidCheckCollision(Location A1High, Location A1Low, Location A2High, Location A2Low) { + int A1HX = A1High.getBlockX(); + int A1LX = A1Low.getBlockX(); + int A1HY = A1High.getBlockY(); + int A1LY = A1Low.getBlockY(); + int A1HZ = A1High.getBlockZ(); + int A1LZ = A1Low.getBlockZ(); + int A2HX = A2High.getBlockX(); + int A2LX = A2Low.getBlockX(); + int A2HY = A2High.getBlockY(); + int A2LY = A2Low.getBlockY(); + int A2HZ = A2High.getBlockZ(); + int A2LZ = A2Low.getBlockZ(); + if ((A1HX >= A2LX && A1HX <= A2HX) || (A1LX >= A2LX && A1LX <= A2HX) || (A2HX >= A1LX && A2HX <= A1HX) || (A2LX >= A1LX && A2LX <= A1HX)) { + if ((A1HY >= A2LY && A1HY <= A2HY) || (A1LY >= A2LY && A1LY <= A2HY) || (A2HY >= A1LY && A2HY <= A1HY) || (A2LY >= A1LY && A2LY <= A1HY)) { + if ((A1HZ >= A2LZ && A1HZ <= A2HZ) || (A1LZ >= A2LZ && A1LZ <= A2HZ) || (A2HZ >= A1LZ && A2HZ <= A1HZ) || (A2LZ >= A1LZ && A2LZ <= A1HZ)) { + return true; + } + } + } + return false; + } + + public long getSize() { + int xsize = (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; + int zsize = (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; + if (!Residence.getInstance().getConfigManager().isNoCostForYBlocks()) { + int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; + return xsize * ysize * zsize; + } + return xsize * zsize; + } + + public int getXSize() { + return (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; + } + + public int getYSize() { + return (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; + } + + public int getZSize() { + return (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; + } + + public Location getHighLoc() { + return highPoints; + } + + public Location getLowLoc() { + return lowPoints; + } + + public World getWorld() { + return highPoints.getWorld(); + } + + public void save(DataOutputStream out) throws IOException { + out.writeUTF(highPoints.getWorld().getName()); + out.writeInt(highPoints.getBlockX()); + out.writeInt(highPoints.getBlockY()); + out.writeInt(highPoints.getBlockZ()); + out.writeInt(lowPoints.getBlockX()); + out.writeInt(lowPoints.getBlockY()); + out.writeInt(lowPoints.getBlockZ()); + } + + public CuboidArea load(DataInputStream in) throws IOException { + CuboidArea newArea = new CuboidArea(); + Server server = Residence.getInstance().getServ(); + World world = server.getWorld(in.readUTF()); + int highx = in.readInt(); + int highy = in.readInt(); + int highz = in.readInt(); + int lowx = in.readInt(); + int lowy = in.readInt(); + int lowz = in.readInt(); + newArea.highPoints = new Location(world, highx, highy, highz); + newArea.lowPoints = new Location(world, lowx, lowy, lowz); + newArea.worldName = world.getName(); + return newArea; + } + + public Map save() { + Map root = new LinkedHashMap<>(); + root.put("X1", this.highPoints.getBlockX()); + root.put("Y1", this.highPoints.getBlockY()); + root.put("Z1", this.highPoints.getBlockZ()); + root.put("X2", this.lowPoints.getBlockX()); + root.put("Y2", this.lowPoints.getBlockY()); + root.put("Z2", this.lowPoints.getBlockZ()); + return root; + } + + public static CuboidArea load(Map root, World world) throws Exception { + if (root == null) { + throw new Exception("Invalid residence physical location..."); + } + CuboidArea newArea = new CuboidArea(); + int x1 = (Integer) root.get("X1"); + int y1 = (Integer) root.get("Y1"); + int z1 = (Integer) root.get("Z1"); + int x2 = (Integer) root.get("X2"); + int y2 = (Integer) root.get("Y2"); + int z2 = (Integer) root.get("Z2"); + newArea.highPoints = new Location(world, x1, y1, z1); + newArea.lowPoints = new Location(world, x2, y2, z2); + newArea.worldName = world.getName(); + return newArea; + } + + public List getChunks() { + List chunks = new ArrayList<>(); + Location high = this.highPoints; + Location low = this.lowPoints; + int lowX = ChunkRef.getChunkCoord(low.getBlockX()); + int lowZ = ChunkRef.getChunkCoord(low.getBlockZ()); + int highX = ChunkRef.getChunkCoord(high.getBlockX()); + int highZ = ChunkRef.getChunkCoord(high.getBlockZ()); + + for (int x = lowX; x <= highX; x++) { + for (int z = lowZ; z <= highZ; z++) { + chunks.add(new ChunkRef(x, z)); + } + } + return chunks; + } + + public void setHighLocation(Location highLocation) { + this.highPoints = highLocation; + } + + public void setLowLocation(Location lowLocation) { + this.lowPoints = lowLocation; + } +} From 43d41c35ca94ea893119074c2d317dd35736da42 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 May 2017 20:34:09 +0300 Subject: [PATCH 0373/1142] Better way to auto create residence --- .../bukkit/residence/ConfigManager.java | 13 +- .../bukkit/residence/commands/auto.java | 155 +++++++++++++++++- .../protection/ResidenceManager.java | 13 +- 3 files changed, 172 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 6efb1c011..241d26944 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -78,6 +78,7 @@ public class ConfigManager { protected int leaseCheckInterval; protected int autoSaveInt; private int ItemPickUpDelay; + private boolean AutomaticResidenceCreationCheckCollision; // Backup stuff protected boolean BackupAutoCleanUpUse; @@ -419,11 +420,15 @@ public void UpdateConfigFile() { DisableListeners = c.get("Global.Optimizations.DisabledWorlds.DisableListeners", true); c.getW().addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); DisableCommands = c.get("Global.Optimizations.DisabledWorlds.DisableCommands", true); - - c.getW().addComment("Global.Optimizations.ItemPickUpDelay", "Delay in seconds between item pickups after residence flag prevents it","Keep it at arround 10 sec to lower unesecery checks"); + c.getW().addComment("Global.Optimizations.ItemPickUpDelay", "Delay in seconds between item pickups after residence flag prevents it", "Keep it at arround 10 sec to lower unesecery checks"); ItemPickUpDelay = c.get("Global.Optimizations.ItemPickUpDelay", 10); + c.getW().addComment("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", + "When set to true /res auto command will check for new area collision with other residences to avoid overlapping.", + "Set it to false to gain some performace but new residence can often overlap with old ones"); + AutomaticResidenceCreationCheckCollision = c.get("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", true); + // c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", // "You can bypass this with residence.checkbadflags permission node"); // DisableNoFlagMessageUse = c.get("Global.Optimizations.DisabledNoFlagMessage.Use", false); @@ -1715,4 +1720,8 @@ public Double getWalkSpeed2() { public int getItemPickUpDelay() { return ItemPickUpDelay; } + + public boolean isAutomaticResidenceCreationCheckCollision() { + return AutomaticResidenceCreationCheckCollision; + } } diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 7c79208a1..ab32194dd 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -1,11 +1,14 @@ package com.bekvon.bukkit.residence.commands; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.util.Vector; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -13,6 +16,7 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.CuboidArea; public class auto implements cmd { @@ -48,14 +52,14 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Location loc = player.getLocation(); - int X = group.getMaxX(); - int Y = group.getMaxY(); - int Z = group.getMaxZ(); + int X = group.getMinX(); + int Y = group.getMinY(); + int Z = group.getMinZ(); if (lenght > 0) { - if (lenght < X) + if (lenght < group.getMaxX() && lenght > X) X = lenght; - if (lenght < Z) + if (lenght < group.getMaxZ() && lenght > Z) Z = lenght; } @@ -96,11 +100,150 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), minX, minY, minZ), false); plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), maxX, maxY, maxZ), false); - + resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player)); player.performCommand("res create " + resName); return true; } + private static void resize(Residence plugin, Player player, CuboidArea cuboid) { + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + + int cost = (int) Math.ceil(cuboid.getSize() * group.getCostPerBlock()); + + double balance = plugin.getEconomyManager().getBalance(player.getName()); + + direction dir = direction.Top; + + List locked = new ArrayList(); + + boolean checkCollision = plugin.getConfigManager().isAutomaticResidenceCreationCheckCollision(); + int skipped = 0; + int done = 0; + while (true) { + done++; + + if (skipped >= 6) { + break; + } + + // fail safe if loop keeps going on + if (done > 10000) + break; + + if (locked.contains(dir)) { + dir = dir.getNext(); + skipped++; + continue; + } + + CuboidArea c = new CuboidArea(); + c.setLowLocation(cuboid.getLowLoc().clone().add(-dir.getLow().getX(), -dir.getLow().getY(), -dir.getLow().getZ())); + c.setHighLocation(cuboid.getHighLoc().clone().add(dir.getHigh().getX(), dir.getHigh().getY(), dir.getHigh().getZ())); + + if (c.getLowLoc().getY() < 0) { + c.getLowLoc().setY(0); + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (c.getHighLoc().getY() >= c.getWorld().getMaxHeight()) { + c.getHighLoc().setY(c.getWorld().getMaxHeight() - 1); + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (checkCollision && plugin.getResidenceManager().collidesWithResidence(c) != null) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (c.getXSize() >= group.getMaxX() - group.getMinX()) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (c.getYSize() >= group.getMaxY() - group.getMinY()) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (c.getZSize() >= group.getMaxZ() - group.getMinZ()) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + skipped = 0; + + cost = (int) Math.ceil(c.getSize() * group.getCostPerBlock()); + + if (cost > balance) + break; + + cuboid.setLowLocation(c.getLowLoc()); + cuboid.setHighLocation(c.getHighLoc()); + + dir = dir.getNext(); + } + + plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLoc()); + plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLoc()); + } + + private enum direction { + Top(new Vector(0, 1, 0), new Vector(0, 0, 0)), + Bottom(new Vector(0, 0, 0), new Vector(0, 1, 0)), + East(new Vector(1, 0, 0), new Vector(0, 0, 0)), + West(new Vector(0, 0, 0), new Vector(1, 0, 0)), + North(new Vector(0, 0, 1), new Vector(0, 0, 0)), + South(new Vector(0, 0, 0), new Vector(0, 0, 1)); + + private Vector low; + private Vector high; + + direction(Vector low, Vector high) { + this.low = low; + this.high = high; + } + + public Vector getLow() { + return low; + } + + public Vector getHigh() { + return high; + } + + public direction getNext() { + boolean next = false; + direction dir = direction.Top; + for (direction one : direction.values()) { + if (next) { + dir = one; + next = false; + break; + } + if (this.equals(one)) { + next = true; + } + } + return dir; + } + } + @Override public void getLocale(ConfigReader c, String path) { // Main command diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 81168cd6a..c09eae8ad 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -430,10 +430,21 @@ public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResi return null; } + public ClaimedResidence collidesWithResidence(CuboidArea newarea) { + Set> set = residences.entrySet(); + for (Entry entry : set) { + ClaimedResidence check = entry.getValue(); + if (check.checkCollision(newarea)) { + return entry.getValue(); + } + } + return null; + } + public void removeResidence(ClaimedResidence res) { this.removeResidence(null, res.getName(), true); } - + public void removeResidence(String name) { this.removeResidence(null, name, true); } From cc9b136ce0028b9bb4702c6c382bbeb2af00cb61 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 May 2017 20:40:49 +0300 Subject: [PATCH 0374/1142] Just in case we need to bypass itempickup flag --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 4 +++- src/plugin.yml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index fd1bdcd18..55d1d91e6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -144,10 +144,12 @@ public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { return; if (!res.getPermissions().has(Flags.itempickup, FlagCombo.OnlyFalse)) return; + if (event.getPlayer().hasPermission("residence.flag.itempickup.bypass")) + return; event.setCancelled(true); event.getItem().setPickupDelay(plugin.getConfigManager().getItemPickUpDelay() * 20); } - + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerDropItemEvent(PlayerDropItemEvent event) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation()); diff --git a/src/plugin.yml b/src/plugin.yml index 29ac5616f..3e1445158 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.6.2.0 +version: 4.6.3.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From f912ac7c7251055f7da9a619374adf8753601d7b Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 16 May 2017 18:07:08 +0300 Subject: [PATCH 0375/1142] Initial 1.12 support --- .../bekvon/bukkit/residence/allNms/v1_12.java | 197 +++++++++++++ .../bukkit/residence/utils/ActionBar.java | 26 +- .../residence/utils/VersionChecker.java | 8 + .../bukkit/residence/utils/YmlMaker.java | 273 +++++++++--------- 4 files changed, 359 insertions(+), 145 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_12.java diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12.java b/src/com/bekvon/bukkit/residence/allNms/v1_12.java new file mode 100644 index 000000000..1c6c56916 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_12.java @@ -0,0 +1,197 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.*; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; +import com.bekvon.bukkit.residence.Residence; + +public class v1_12 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof Llama || + ent instanceof PolarBear || + ent instanceof Parrot); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + switch (mat) { + case LEVER: + case STONE_BUTTON: + case WOOD_BUTTON: + case WOODEN_DOOR: + case SPRUCE_DOOR: + case BIRCH_DOOR: + case JUNGLE_DOOR: + case ACACIA_DOOR: + case DARK_OAK_DOOR: + case SPRUCE_FENCE_GATE: + case BIRCH_FENCE_GATE: + case JUNGLE_FENCE_GATE: + case ACACIA_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case TRAP_DOOR: + case IRON_TRAPDOOR: + case FENCE_GATE: + case PISTON_BASE: + case PISTON_STICKY_BASE: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (block.getType()) { + case AIR: + case WEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case SAPLING: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case STONE_BUTTON: + case WOOD_BUTTON: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + + matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode); + + + /* 1.11 Shulker Box */ + matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.BLUE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.BROWN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.CYAN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.GRAY_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.GREEN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.LIGHT_BLUE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.LIME_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.MAGENTA_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.ORANGE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.SILVER_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); + } + + @Override + public boolean isPlate(Material mat) { + return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public Block getTargetBlock(Player player, int range) { + return player.getTargetBlock((Set) null, range); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @SuppressWarnings("incomplete-switch") + @Override + public boolean isBoat(Material mat) { + switch (mat) { + case BOAT: + case BOAT_ACACIA: + case BOAT_BIRCH: + case BOAT_DARK_OAK: + case BOAT_JUNGLE: + case BOAT_SPRUCE: + return true; + } + return false; + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index 05e0b6e43..e205ce43e 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -25,7 +25,6 @@ public class ActionBar implements ABInterface { private Class nmsChatSerializer; private Class nmsIChatBaseComponent; private Class packetType; - private Constructor constructor; private boolean simpleMessages = false; private boolean simpleTitleMessages = false; @@ -34,6 +33,10 @@ public class ActionBar implements ABInterface { private Method fromString; private Residence plugin; + private Class ChatMessageclz; + private Class sub; + private Object[] consts; + public ActionBar(Residence plugin) { this.plugin = plugin; version = this.plugin.getVersionChecker().getVersion(); @@ -47,10 +50,11 @@ public ActionBar(Residence plugin) { getHandle = typeCraftPlayer.getMethod("getHandle"); playerConnection = typeNMSPlayer.getField("playerConnection"); sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName(getPacketClasspath())); - if (plugin.getVersionChecker().isHigher(Version.v1_7_R4)) { - constructor = packetType.getConstructor(nmsIChatBaseComponent, byte.class); - } else { - constructor = packetType.getConstructor(nmsIChatBaseComponent, int.class); + + if (plugin.getVersionChecker().getVersion().isHigher(Version.v1_11_R1)) { + ChatMessageclz = Class.forName(getChatMessageTypeClasspath()); + consts = ChatMessageclz.getEnumConstants(); + sub = consts[2].getClass(); } } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { @@ -116,10 +120,12 @@ public void send(Player receivingPacket, String msg) { try { Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, "{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', JSONObject .escape(msg)) + "\"}"); - if (plugin.getVersionChecker().isHigher(Version.v1_7_R4)) { - packet = constructor.newInstance(serialized, (byte) 2); + if (plugin.getVersionChecker().getVersion().isHigher(Version.v1_11_R1)) + packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[2]); + else if (version.isHigher(Version.v1_7_R4)) { + packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 2); } else { - packet = constructor.newInstance(serialized, 2); + packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 2); } Object player = getHandle.invoke(receivingPacket); Object connection = playerConnection.get(player); @@ -171,4 +177,8 @@ private String getEnumTitleActionClasspath() { private String getClassMessageClasspath() { return "org.bukkit.craftbukkit." + version + ".util.CraftChatMessage"; } + + private String getChatMessageTypeClasspath() { + return "net.minecraft.server." + version + ".ChatMessageType"; + } } diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index b88f84dc7..f6851324a 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -66,6 +66,14 @@ public String getShortVersion() { shortVersion = this.name().split("_R")[0]; return shortVersion; } + + public boolean isHigher(Version version) { + return getValue() > version.getValue(); + } + + public boolean isLower(Version version) { + return getValue() < version.getValue(); + } } public static Version getCurrent() { diff --git a/src/com/bekvon/bukkit/residence/utils/YmlMaker.java b/src/com/bekvon/bukkit/residence/utils/YmlMaker.java index 0a97a0b3b..783fe8862 100644 --- a/src/com/bekvon/bukkit/residence/utils/YmlMaker.java +++ b/src/com/bekvon/bukkit/residence/utils/YmlMaker.java @@ -1,137 +1,136 @@ -package com.bekvon.bukkit.residence.utils; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.util.logging.Level; - -import org.apache.commons.lang.Validate; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.plugin.java.JavaPlugin; - -import com.bekvon.bukkit.residence.Residence; - -public class YmlMaker { - Residence Plugin; - public String fileName; - private JavaPlugin plugin; - public File ConfigFile; - private FileConfiguration Configuration; - - public YmlMaker(Residence Plugin) { - this.Plugin = Plugin; - } - - public YmlMaker(JavaPlugin plugin, String fileName) { - if (plugin == null) { - throw new IllegalArgumentException("plugin cannot be null"); - } - this.plugin = plugin; - this.fileName = fileName; - File dataFolder = plugin.getDataFolder(); - if (dataFolder == null) { - throw new IllegalStateException(); - } - this.ConfigFile = new File(dataFolder.toString() + File.separatorChar + this.fileName); - } - - private static YamlConfiguration loadConfiguration(InputStreamReader inputStreamReader) { - Validate.notNull(inputStreamReader, "File cannot be null"); - YamlConfiguration config = new YamlConfiguration(); - try { - config.load(inputStreamReader); - } catch (FileNotFoundException ex) { - } catch (IOException ex) { - } catch (InvalidConfigurationException ex) { - return null; - } - return config; - } - - @SuppressWarnings("deprecation") - private static YamlConfiguration loadConfiguration(InputStream defConfigStream) { - Validate.notNull(defConfigStream, "File cannot be null"); - YamlConfiguration config = new YamlConfiguration(); - try { - config.load(defConfigStream); - } catch (FileNotFoundException ex) { - } catch (IOException ex) { - } catch (InvalidConfigurationException ex) { - return null; - } - return config; - } - - public void reloadConfig() { - InputStreamReader f = null; - try { - f = new InputStreamReader(new FileInputStream(this.ConfigFile), "UTF-8"); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - - if (f != null) - this.Configuration = loadConfiguration(f); - - if (Configuration == null) { - if (f != null) - try { - f.close(); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - - InputStream defConfigStream = this.plugin.getResource(this.fileName); - if (defConfigStream != null) { - YamlConfiguration defConfig = loadConfiguration(defConfigStream); - if (defConfig != null) - this.Configuration.setDefaults(defConfig); - } - if (defConfigStream != null) - try { - defConfigStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - if (f != null) - try { - f.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public FileConfiguration getConfig() { - if (this.Configuration == null) { - reloadConfig(); - } - return this.Configuration; - } - - public void saveConfig() { - if ((this.Configuration == null) || (this.ConfigFile == null)) { - return; - } - try { - getConfig().save(this.ConfigFile); - } catch (IOException ex) { - this.plugin.getLogger().log(Level.SEVERE, "Could not save config to " + this.ConfigFile, ex); - } - } - - public void saveDefaultConfig() { - if (!this.ConfigFile.exists()) { - this.plugin.saveResource(this.fileName, false); - } - } -} +package com.bekvon.bukkit.residence.utils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.util.logging.Level; + +import org.apache.commons.lang.Validate; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +import com.bekvon.bukkit.residence.Residence; + +public class YmlMaker { + Residence Plugin; + public String fileName; + private JavaPlugin plugin; + public File ConfigFile; + private FileConfiguration Configuration; + + public YmlMaker(Residence Plugin) { + this.Plugin = Plugin; + } + + public YmlMaker(JavaPlugin plugin, String fileName) { + if (plugin == null) { + throw new IllegalArgumentException("plugin cannot be null"); + } + this.plugin = plugin; + this.fileName = fileName; + File dataFolder = plugin.getDataFolder(); + if (dataFolder == null) { + throw new IllegalStateException(); + } + this.ConfigFile = new File(dataFolder.toString() + File.separatorChar + this.fileName); + } + + private static YamlConfiguration loadConfiguration(InputStreamReader inputStreamReader) { + Validate.notNull(inputStreamReader, "File cannot be null"); + YamlConfiguration config = new YamlConfiguration(); + try { + config.load(inputStreamReader); + } catch (FileNotFoundException ex) { + } catch (IOException ex) { + } catch (InvalidConfigurationException ex) { + return null; + } + return config; + } + + private YamlConfiguration loadConfiguration(InputStream defConfigStream) { + Validate.notNull(defConfigStream, "File cannot be null"); + YamlConfiguration config = new YamlConfiguration(); + try { + config.load(ConfigFile); + } catch (FileNotFoundException ex) { + } catch (IOException ex) { + } catch (InvalidConfigurationException ex) { + return null; + } + return config; + } + + public void reloadConfig() { + InputStreamReader f = null; + try { + f = new InputStreamReader(new FileInputStream(this.ConfigFile), "UTF-8"); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + if (f != null) + this.Configuration = loadConfiguration(f); + + if (Configuration == null) { + if (f != null) + try { + f.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + + InputStream defConfigStream = this.plugin.getResource(this.fileName); + if (defConfigStream != null) { + YamlConfiguration defConfig = loadConfiguration(defConfigStream); + if (defConfig != null) + this.Configuration.setDefaults(defConfig); + } + if (defConfigStream != null) + try { + defConfigStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + if (f != null) + try { + f.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public FileConfiguration getConfig() { + if (this.Configuration == null) { + reloadConfig(); + } + return this.Configuration; + } + + public void saveConfig() { + if ((this.Configuration == null) || (this.ConfigFile == null)) { + return; + } + try { + getConfig().save(this.ConfigFile); + } catch (IOException ex) { + this.plugin.getLogger().log(Level.SEVERE, "Could not save config to " + this.ConfigFile, ex); + } + } + + public void saveDefaultConfig() { + if (!this.ConfigFile.exists()) { + this.plugin.saveResource(this.fileName, false); + } + } +} From 12eff9f97bc880dd52d0a396bc382d415a8253be Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 31 May 2017 12:15:35 +0300 Subject: [PATCH 0376/1142] Check for null economy --- src/com/bekvon/bukkit/residence/commands/auto.java | 5 +++-- src/plugin.yml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index ab32194dd..e153ef6ff 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -112,7 +112,9 @@ private static void resize(Residence plugin, Player player, CuboidArea cuboid) { int cost = (int) Math.ceil(cuboid.getSize() * group.getCostPerBlock()); - double balance = plugin.getEconomyManager().getBalance(player.getName()); + double balance = 0; + if (plugin.getEconomyManager() != null) + balance = plugin.getEconomyManager().getBalance(player.getName()); direction dir = direction.Top; @@ -189,7 +191,6 @@ private static void resize(Residence plugin, Player player, CuboidArea cuboid) { skipped = 0; cost = (int) Math.ceil(c.getSize() * group.getCostPerBlock()); - if (cost > balance) break; diff --git a/src/plugin.yml b/src/plugin.yml index 3e1445158..846b0e312 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.6.3.0 +version: 4.6.3.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From abaf8c9cf06e32eb8a1280f776e7e865ffa3475e Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Jun 2017 16:45:26 +0300 Subject: [PATCH 0377/1142] Save file compression to minimize size for faster load/save --- .../bekvon/bukkit/residence/Residence.java | 36 +++++- .../residence/containers/MinimizeFlags.java | 44 +++++++ .../containers/MinimizeMessages.java | 47 +++++++ .../residence/persistance/YMLSaveHelper.java | 118 +++++++++--------- .../protection/ClaimedResidence.java | 104 ++++++++++----- .../residence/protection/CuboidArea.java | 27 ++++ .../residence/protection/FlagPermissions.java | 109 ++++++++++++++-- .../protection/ResidenceManager.java | 114 +++++++++++++++++ .../protection/ResidencePermissions.java | 44 ++++--- 9 files changed, 518 insertions(+), 125 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/containers/MinimizeFlags.java create mode 100644 src/com/bekvon/bukkit/residence/containers/MinimizeMessages.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index bb6f0b480..23b18c6cf 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -43,6 +43,8 @@ import com.bekvon.bukkit.residence.chat.ChatManager; import com.bekvon.bukkit.residence.containers.ABInterface; import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.MinimizeFlags; +import com.bekvon.bukkit.residence.containers.MinimizeMessages; import com.bekvon.bukkit.residence.containers.NMS; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.dynmap.DynMapListeners; @@ -80,6 +82,7 @@ import com.griefcraft.lwc.LWCPlugin; import com.residence.mcstats.Metrics; import com.residence.zip.ZipLibrary; +import com.sk89q.util.yaml.YAMLNode; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; @@ -632,7 +635,7 @@ public void run() { setWorldEdit(); setWorldGuard(); - + setKingdoms(); blistener = new ResidenceBlockListener(this); @@ -797,7 +800,7 @@ private void setKingdoms() { } } - public GameManagement getKingdomsManager(){ + public GameManagement getKingdomsManager() { return kingdomsmanager; } @@ -1083,6 +1086,8 @@ private void saveYml() throws IOException { World world = server.getWorld(entry.getKey()); if (world != null) yml.getRoot().put("Seed", world.getSeed()); + yml.getRoot().put("LeaveMessage", this.getResidenceManager().getMessageCatch()); + yml.getRoot().put("Flags", this.getResidenceManager().getFlagsCatch()); yml.getRoot().put("Residences", entry.getValue()); yml.save(); if (ymlSaveLoc.isFile()) { @@ -1194,9 +1199,34 @@ protected boolean loadYml() throws Exception { if (loadFile.isFile()) { time = System.currentTimeMillis(); Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading save data for world " + world.getName() + "..."); + yml = new YMLSaveHelper(loadFile); yml.load(); + if (yml.getRoot().containsKey("LeaveMessage")) { + HashMap c = getResidenceManager().getCacheMessages().get(world.getName()); + if (c == null) + c = new HashMap(); + Map ms = (Map) yml.getRoot().get("LeaveMessage"); + for (Entry one : ms.entrySet()) { + Map msgs = (Map) one.getValue(); + c.put(one.getKey(), new MinimizeMessages(one.getKey(), msgs.get("LeaveMessage"), msgs.get("EnterMessage"))); + } + getResidenceManager().getCacheMessages().put(world.getName(), c); + } + + if (yml.getRoot().containsKey("Flags")) { + HashMap c = getResidenceManager().getCacheFlags().get(world.getName()); + if (c == null) + c = new HashMap(); + Map ms = (Map) yml.getRoot().get("Flags"); + for (Entry one : ms.entrySet()) { + HashMap msgs = (HashMap) one.getValue(); + c.put(one.getKey(), new MinimizeFlags(one.getKey(), msgs)); + } + getResidenceManager().getCacheFlags().put(world.getName(), c); + } + worlds.put(world.getName(), yml.getRoot().get("Residences")); int pass = (int) (System.currentTimeMillis() - time); @@ -1694,7 +1724,7 @@ public WorldGuardUtil getWorldGuardUtil() { worldGuardUtil = new WorldGuardUtil(this); return worldGuardUtil; } - + public KingdomsUtil getKingdomsUtil() { if (kingdomsUtil == null) kingdomsUtil = new KingdomsUtil(this); diff --git a/src/com/bekvon/bukkit/residence/containers/MinimizeFlags.java b/src/com/bekvon/bukkit/residence/containers/MinimizeFlags.java new file mode 100644 index 000000000..d237f8bca --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/MinimizeFlags.java @@ -0,0 +1,44 @@ +package com.bekvon.bukkit.residence.containers; + +import java.util.HashMap; +import java.util.Map.Entry; + +public class MinimizeFlags { + + private HashMap flags = new HashMap(); + + private int id = 0; + + public MinimizeFlags(int id, HashMap flags) { + this.id = id; + this.flags = flags; + } + + public boolean same(HashMap flags) { + if (flags.size() != this.flags.size()) + return false; + for (Entry one : flags.entrySet()) { + if (!this.flags.containsKey(one.getKey())) + return false; + if (this.flags.get(one.getKey()) != one.getValue()) + return false; + } + return true; + } + + public boolean add(HashMap flags) { + if (!same(flags)) + return false; + this.flags = flags; + return true; + } + + public int getId() { + return id; + } + + public HashMap getFlags() { + return flags; + } + +} diff --git a/src/com/bekvon/bukkit/residence/containers/MinimizeMessages.java b/src/com/bekvon/bukkit/residence/containers/MinimizeMessages.java new file mode 100644 index 000000000..be3c3f7a3 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/MinimizeMessages.java @@ -0,0 +1,47 @@ +package com.bekvon.bukkit.residence.containers; + +public class MinimizeMessages { + + private String enter = ""; + private String leave = ""; + +// private int repeat = 0; + private int id = 0; + + public MinimizeMessages(int id, String enter, String leave) { + this.id = id; + this.enter = enter; + this.leave = leave; +// repeat++; + } + + public boolean same(String enter, String leave) { + return this.enter.equals(enter) && this.leave.equals(leave); + } + + public boolean add(String enter, String leave) { + if (!same(enter, leave)) + return false; + this.enter = enter; + this.leave = leave; +// repeat++; + return true; + } + +// public int getRepeat() { +// return repeat; +// } + + public int getId() { + return id; + } + + public String getEnter() { + return enter; + } + + public String getLeave() { + return leave; + } + +} diff --git a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java index 1f3d0e23c..3a5962b6f 100644 --- a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java +++ b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java @@ -1,60 +1,58 @@ -package com.bekvon.bukkit.residence.persistance; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.util.LinkedHashMap; -import java.util.Map; - -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.DumperOptions.FlowStyle; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.reader.ReaderException; - -public class YMLSaveHelper { - - File f; - Yaml yml; - Map root; - - public YMLSaveHelper(File ymlfile) throws IOException { - DumperOptions options = new DumperOptions(); - options.setDefaultFlowStyle(FlowStyle.BLOCK); - options.setAllowUnicode(true); - yml = new Yaml(options); - - root = new LinkedHashMap(); - if (ymlfile == null) - throw new IOException("YMLSaveHelper: null file..."); - f = ymlfile; - } - - public void save() throws IOException { - if (f.isFile()) - f.delete(); - FileOutputStream fout = new FileOutputStream(f); - OutputStreamWriter osw = new OutputStreamWriter(fout, "UTF8"); - yml.dump(root, osw); - osw.close(); - } - - @SuppressWarnings("unchecked") - public void load() throws IOException { - FileInputStream fis = new FileInputStream(f); - InputStreamReader isr = new InputStreamReader(fis, "UTF8"); - try { - root = (Map) yml.load(isr); - } catch (ReaderException e) { - System.out.println("[Residence] - Failed to load " + yml.getName() + " file!"); - } - isr.close(); - } - - public Map getRoot() { - return root; - } - -} +package com.bekvon.bukkit.residence.persistance; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStreamWriter; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.DumperOptions.FlowStyle; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.reader.ReaderException; + +public class YMLSaveHelper { + + File f; + Yaml yml; + Map root; + + public YMLSaveHelper(File ymlfile) throws IOException { + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(FlowStyle.BLOCK); + options.setAllowUnicode(true); + yml = new Yaml(options); + + root = new LinkedHashMap(); + if (ymlfile == null) + throw new IOException("YMLSaveHelper: null file..."); + f = ymlfile; + } + + public void save() throws IOException { + if (f.isFile()) + f.delete(); + FileOutputStream fout = new FileOutputStream(f); + OutputStreamWriter osw = new OutputStreamWriter(fout, "UTF8"); + yml.dump(root, osw); + osw.close(); + } + + @SuppressWarnings("unchecked") + public void load() throws IOException { + InputStream fis = new FileInputStream(f); + try { + root = (Map) yml.load(fis); + } catch (ReaderException e) { + System.out.println("[Residence] - Failed to load " + yml.getName() + " file!"); + } + fis.close(); + } + + public Map getRoot() { + return root; + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 6a6777ffc..f318e325f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -6,6 +6,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.MinimizeMessages; import com.bekvon.bukkit.residence.containers.RandomLoc; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.Visualizer; @@ -1251,12 +1252,12 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } Location loc = this.getTeleportLocation(); - + // if (loc != null) { - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) - performDelaydTp(loc, targetPlayer, reqPlayer, true); - else - performInstantTp(loc, targetPlayer, reqPlayer, true); + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) + performDelaydTp(loc, targetPlayer, reqPlayer, true); + else + performInstantTp(loc, targetPlayer, reqPlayer, true); // } else { // CuboidArea area = this.getMainArea(); // if (area == null) { @@ -1374,17 +1375,30 @@ public Map save() { Map root = new HashMap<>(); Map areamap = new HashMap<>(); - root.put("CapitalizedName", resName); +// root.put("CapitalizedName", resName); if (mainRes) root.put("MainResidence", mainRes); if (createTime != 0L) root.put("CreatedOn", createTime); - if (enterMessage != null) - root.put("EnterMessage", enterMessage); + if (enterMessage != null && leaveMessage != null) { + MinimizeMessages min = plugin.getResidenceManager().addMessageToTempCache(enterMessage, leaveMessage); + if (min == null) { + root.put("EnterMessage", enterMessage); + root.put("LeaveMessage", leaveMessage); + } else { + root.put("Messages", min.getId()); + } + } - if (leaveMessage != null) - root.put("LeaveMessage", leaveMessage); +// if (enterMessage != null) +// root.put("EnterMessage", enterMessage); +// +// if (leaveMessage != null) { +// ResidenceManager mng = plugin.getResidenceManager(); +// Integer id = mng.addLeaveMessageToTempCache(leaveMessage); +// root.put("LeaveMessage", id); +// } if (ShopDesc != null) root.put("ShopDescription", ShopDesc); @@ -1405,8 +1419,9 @@ public Map save() { map = ignorelist.save(); if (!map.isEmpty()) root.put("IgnoreList", map); + for (Entry entry : areas.entrySet()) { - areamap.put(entry.getKey(), entry.getValue().save()); + areamap.put(entry.getKey(), entry.getValue().newSave()); } root.put("Areas", areamap); @@ -1424,13 +1439,8 @@ public Map save() { root.put("cmdWhiteList", this.cmdWhiteList); if (tpLoc != null) { - Map tpmap = new HashMap<>(); - tpmap.put("X", convertDouble(tpLoc.getX())); - tpmap.put("Y", convertDouble(tpLoc.getY())); - tpmap.put("Z", convertDouble(tpLoc.getZ())); - tpmap.put("Pitch", convertDouble(tpLoc.getPitch())); - tpmap.put("Yaw", convertDouble(tpLoc.getYaw())); - root.put("TPLoc", tpmap); + root.put("TPLoc", convertDouble(tpLoc.getX()) + ":" + convertDouble(tpLoc.getY()) + ":" + convertDouble(tpLoc.getZ()) + ":" + convertDouble(tpLoc.getPitch()) + ":" + convertDouble(tpLoc + .getYaw())); } return root; } @@ -1498,7 +1508,13 @@ public static ClaimedResidence load(String worldName, Map root, if (world == null) throw new Exception("Cant Find World: " + res.perms.getWorld()); for (Entry map : areamap.entrySet()) { - res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); + if (map.getValue() instanceof String) { + // loading new same format + res.areas.put(map.getKey(), CuboidArea.newLoad((String) map.getValue(), world)); + } else { + // loading old format + res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); + } } if (root.containsKey("Subzones")) { @@ -1523,28 +1539,54 @@ public static ClaimedResidence load(String worldName, Map root, } } - if (root.containsKey("EnterMessage")) + if (root.containsKey("EnterMessage") && root.get("EnterMessage") instanceof String) res.enterMessage = (String) root.get("EnterMessage"); - - if (root.containsKey("LeaveMessage")) + if (root.containsKey("LeaveMessage") && root.get("LeaveMessage") instanceof String) res.leaveMessage = (String) root.get("LeaveMessage"); + if (root.containsKey("Messages") && root.get("Messages") instanceof Integer){ + res.enterMessage = plugin.getResidenceManager().getChacheMessageEnter(worldName, (Integer) root.get("Messages")); + res.leaveMessage = plugin.getResidenceManager().getChacheMessageLeave(worldName, (Integer) root.get("Messages")); + } + res.parent = parent; - Map tploc = (Map) root.get("TPLoc"); - if (tploc != null) { + + if (root.get("TPLoc") instanceof String) { + String tpLoc = (String) root.get("TPLoc"); + double pitch = 0.0; double yaw = 0.0; - if (tploc.containsKey("Yaw")) - yaw = convertDouble(tploc.get("Yaw").toString()); - - if (tploc.containsKey("Pitch")) - pitch = convertDouble(tploc.get("Pitch").toString()); + try { + String[] split = tpLoc.split(":"); + if (split.length > 3) + yaw = convertDouble(split[3]); + if (split.length > 4) + pitch = convertDouble(split[4]); + res.tpLoc = new Location(world, convertDouble(split[0]), convertDouble(split[1]), convertDouble(split[2])); + } catch (Exception e) { + } - res.tpLoc = new Location(world, convertDouble(tploc.get("X").toString()), convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z") - .toString())); res.tpLoc.setPitch((float) pitch); res.tpLoc.setYaw((float) yaw); + + } else { + Map tploc = (Map) root.get("TPLoc"); + if (tploc != null) { + double pitch = 0.0; + double yaw = 0.0; + + if (tploc.containsKey("Yaw")) + yaw = convertDouble(tploc.get("Yaw").toString()); + + if (tploc.containsKey("Pitch")) + pitch = convertDouble(tploc.get("Pitch").toString()); + + res.tpLoc = new Location(world, convertDouble(tploc.get("X").toString()), convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z") + .toString())); + res.tpLoc.setPitch((float) pitch); + res.tpLoc.setYaw((float) yaw); + } } if (root.containsKey("cmdBlackList")) diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index f75a5a353..f6468c894 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -186,6 +186,33 @@ public Map save() { return root; } + public String newSave() { + return lowPoints.getBlockX() + ":" + lowPoints.getBlockY() + ":" + lowPoints.getBlockZ() + ":" + highPoints.getBlockX() + ":" + highPoints.getBlockY() + ":" + highPoints.getBlockZ(); + } + + public static CuboidArea newLoad(String root, World world) throws Exception { + if (root == null || !root.contains(":")) { + throw new Exception("Invalid residence physical location..."); + } + CuboidArea newArea = new CuboidArea(); + String[] split = root.split(":"); + try { + int x1 = Integer.parseInt(split[0]); + int y1 = Integer.parseInt(split[1]); + int z1 = Integer.parseInt(split[2]); + int x2 = Integer.parseInt(split[3]); + int y2 = Integer.parseInt(split[4]); + int z2 = Integer.parseInt(split[5]); + newArea.lowPoints = new Location(world, x1, y1, z1); + newArea.highPoints = new Location(world, x2, y2, z2); + newArea.worldName = world.getName(); + } catch (Exception e) { + throw new Exception("Invalid residence physical location..."); + } + + return newArea; + } + public static CuboidArea load(Map root, World world) throws Exception { if (root == null) { throw new Exception("Invalid residence physical location..."); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index efd0c39ac..0f9284665 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -13,6 +13,7 @@ import java.util.Set; import java.util.UUID; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.OfflinePlayer; @@ -23,6 +24,8 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.MinimizeFlags; +import com.bekvon.bukkit.residence.containers.MinimizeMessages; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -593,12 +596,32 @@ public Map save() { // Putting uuid's to main cache for later save // Residence.getInstance().addCachedPlayerNameUUIDs(cachedPlayerNameUUIDs); - root.put("PlayerFlags", playerFlags); - if (!groupFlags.isEmpty()) - root.put("GroupFlags", groupFlags); + Map playerFlagsClone = new HashMap(); + for (Entry> one : playerFlags.entrySet()) { + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache((HashMap) one.getValue()); + playerFlagsClone.put(one.getKey(), min.getId()); + } + root.put("PlayerFlags", playerFlagsClone); + +// root.put("PlayerFlags", playerFlags); + if (!groupFlags.isEmpty()) { + Map GroupFlagsClone = new HashMap(); + for (Entry> one : groupFlags.entrySet()) { + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache((HashMap) one.getValue()); + GroupFlagsClone.put(one.getKey(), min.getId()); + } + root.put("GroupFlags", GroupFlagsClone); + } + + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(new HashMap(cuboidFlags)); + if (min == null) { + // Cloning map to fix issue for yml anchors being created + root.put("AreaFlags", new HashMap(cuboidFlags)); + } else { + root.put("AreaFlags", min.getId()); + } - // Cloning map to fix issue for yml anchors being created - root.put("AreaFlags", new HashMap(cuboidFlags)); +// root.put("AreaFlags", new HashMap(cuboidFlags)); return root; } @@ -613,8 +636,30 @@ protected static FlagPermissions load(Map root, FlagPermissions if (root.containsKey("LastKnownPlayerNames")) newperms.cachedPlayerNameUUIDs = (Map) root.get("LastKnownPlayerNames"); - if (root.containsKey("PlayerFlags")) - newperms.playerFlags = (Map) root.get("PlayerFlags"); + if (root.containsKey("PlayerFlags")) { + boolean old = true; + for (Entry one : ((HashMap) root.get("PlayerFlags")).entrySet()) { + if (one.getValue() instanceof Integer) + old = false; + break; + } + if (old) + newperms.playerFlags = (Map) root.get("PlayerFlags"); + else { + if (newperms instanceof ResidencePermissions) { + Map> t = new HashMap>(); + Map ft = new HashMap(); + for (Entry one : ((HashMap) root.get("PlayerFlags")).entrySet()) { + ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), one.getValue()); + if (ft != null && !ft.isEmpty()) + t.put(one.getKey(), ft); + } + if (!t.isEmpty()) + newperms.playerFlags = t; + } + + } + } for (Entry> one : newperms.playerFlags.entrySet()) { if (one.getKey().length() != 32) @@ -630,11 +675,50 @@ protected static FlagPermissions load(Map root, FlagPermissions } - if (root.containsKey("GroupFlags")) - newperms.groupFlags = (Map) root.get("GroupFlags"); + if (root.containsKey("GroupFlags")) { + boolean old = true; + for (Entry one : ((HashMap) root.get("GroupFlags")).entrySet()) { + if (one.getValue() instanceof Integer) + old = false; + break; + } + if (old) + newperms.groupFlags = (Map) root.get("GroupFlags"); + else { + if (newperms instanceof ResidencePermissions) { + Map> t = new HashMap>(); + Map ft = new HashMap(); + for (Entry one : ((HashMap) root.get("GroupFlags")).entrySet()) { + ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), one.getValue()); + if (ft != null && !ft.isEmpty()) + t.put(one.getKey(), ft); + } + if (!t.isEmpty()) { + newperms.groupFlags = t; + } + } + } + } + +// if (root.containsKey("GroupFlags")) +// newperms.groupFlags = (Map) root.get("GroupFlags"); if (root.containsKey("AreaFlags")) { - newperms.cuboidFlags = (Map) root.get("AreaFlags"); + boolean old = true; + if (root.get("AreaFlags") instanceof Integer) + old = false; + if (old) + newperms.cuboidFlags = (Map) root.get("AreaFlags"); + else { + if (newperms instanceof ResidencePermissions) { + Map ft = new HashMap(); + ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), (Integer) root.get("AreaFlags")); + if (ft != null && !ft.isEmpty()) + newperms.cuboidFlags = ft; + } + } + +// newperms.cuboidFlags = (Map) root.get("AreaFlags"); } else newperms.cuboidFlags = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags().getFlags(); @@ -643,7 +727,10 @@ protected static FlagPermissions load(Map root, FlagPermissions if (root.containsKey("OwnerLastKnownName")) { ownerName = (String) root.get("OwnerLastKnownName"); - uuid = (String) root.get("OwnerUUID"); + if (root.containsKey("OwnerUUID")) + uuid = (String) root.get("OwnerUUID"); + else + uuid = Residence.getInstance().getTempUserUUID(); } if (Residence.getInstance().getConfigManager().isOfflineMode()) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index c09eae8ad..363f018e7 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -25,6 +25,8 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.MinimizeFlags; +import com.bekvon.bukkit.residence.containers.MinimizeMessages; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; @@ -796,6 +798,7 @@ public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, } public Map save() { + clearSaveChache(); Map worldmap = new LinkedHashMap<>(); for (World world : plugin.getServ().getWorlds()) { Map resmap = new LinkedHashMap<>(); @@ -810,17 +813,126 @@ public Map save() { Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); } } + worldmap.put(world.getName(), resmap); } return worldmap; } + private void clearSaveChache() { + optimizeMessages.clear(); + optimizeFlags.clear(); + lastMinimmizeMessageId = 1; + lastMinimmizeFlagsId = 1; + } + + // Optimizing save file + List optimizeMessages = new ArrayList(); + List optimizeFlags = new ArrayList(); +// List optimizePlayerFlags = new ArrayList(); + int lastMinimmizeMessageId = 1; + int lastMinimmizeFlagsId = 1; +// int lastMinimmizePlayerFlagsId = 1; + + public MinimizeMessages addMessageToTempCache(String enter, String leave) { + for (MinimizeMessages one : optimizeMessages) { + if (!one.add(enter, leave)) + continue; +// if (one.getRepeat() < 2) +// return null; + return one; + } + MinimizeMessages m = new MinimizeMessages(lastMinimmizeMessageId, enter, leave); + optimizeMessages.add(m); + lastMinimmizeMessageId++; + return m; + } + + public HashMap getMessageCatch() { + HashMap t = new HashMap(); + for (MinimizeMessages one : optimizeMessages) { +// if (one.getRepeat() == 1) +// continue; + Map root = new HashMap<>(); + root.put("EnterMessage", one.getEnter()); + root.put("LeaveMessage", one.getLeave()); + t.put(one.getId(), root); + } + return t; + } + + public MinimizeFlags addFlagsTempCache(HashMap flags) { + for (MinimizeFlags one : optimizeFlags) { + if (!one.add(flags)) + continue; + return one; + } + MinimizeFlags m = new MinimizeFlags(lastMinimmizeFlagsId, flags); + optimizeFlags.add(m); + lastMinimmizeFlagsId++; + return m; + } + + public HashMap getFlagsCatch() { + HashMap t = new HashMap(); + for (MinimizeFlags one : optimizeFlags) { + t.put(one.getId(), one.getFlags()); + } + return t; + } + + private void clearLoadChache() { + cacheMessages.clear(); + cacheFlags.clear(); + } + HashMap> cacheMessages = new HashMap>(); + HashMap> cacheFlags = new HashMap>(); + + public HashMap> getCacheMessages() { + return cacheMessages; + } + + public HashMap> getCacheFlags() { + return cacheFlags; + } + + public String getChacheMessageEnter(String world, int id) { + HashMap c = cacheMessages.get(world); + if (c == null) + return null; + MinimizeMessages m = c.get(id); + if (m == null) + return null; + return m.getEnter(); + } + + public String getChacheMessageLeave(String world, int id) { + HashMap c = cacheMessages.get(world); + if (c == null) + return null; + MinimizeMessages m = c.get(id); + if (m == null) + return null; + return m.getLeave(); + } + + public HashMap getChacheFlags(String world, int id) { + HashMap c = cacheFlags.get(world); + if (c == null) + return null; + MinimizeFlags m = c.get(id); + if (m == null) + return null; + return m.getFlags(); + } + public void load(Map root) throws Exception { if (root == null) return; residences.clear(); for (World world : plugin.getServ().getWorlds()) { long time = System.currentTimeMillis(); + @SuppressWarnings("unchecked") Map reslist = (Map) root.get(world.getName()); Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + world.getName() + " data into memory..."); @@ -839,6 +951,8 @@ public void load(Map root) throws Exception { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + world.getName() + " data into memory. (" + PastTime + ")"); } + + clearLoadChache(); } public Map> loadMap(String worldName, Map root) throws Exception { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index d80b68173..235d790a2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -97,7 +97,7 @@ public boolean playerHas(Player player, Flags flag, FlagCombo f) { // return false; // } // } - + @Override public boolean playerHas(Player player, String world, Flags flag, boolean def) { ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag.getName(), FlagType.PLAYER, player.getName(), def); @@ -132,22 +132,22 @@ public boolean groupHas(String group, String flag, boolean def) { public boolean has(Flags flag, FlagCombo f) { return has(flag, f, true); } - + public boolean has(Flags flag, FlagCombo f, boolean checkParent) { - switch (f) { - case FalseOrNone: - return !has(flag, false, checkParent); - case OnlyFalse: - return !has(flag, true, checkParent); - case OnlyTrue: - return has(flag, false, checkParent); - case TrueOrNone: - return has(flag, true, checkParent); - default: - return false; - } - } - + switch (f) { + case FalseOrNone: + return !has(flag, false, checkParent); + case OnlyFalse: + return !has(flag, true, checkParent); + case OnlyTrue: + return has(flag, false, checkParent); + case TrueOrNone: + return has(flag, true, checkParent); + default: + return false; + } + } + @Deprecated public boolean has(String flag, FlagCombo f) { return has(flag, f, true); @@ -529,7 +529,8 @@ public String getWorld() { @Override public Map save() { Map root = super.save(); - root.put("OwnerUUID", ownerUUID.toString()); + if (!ownerUUID.toString().equals(Residence.getInstance().getTempUserUUID())) + root.put("OwnerUUID", ownerUUID.toString()); root.put("OwnerLastKnownName", ownerLastKnownName); // root.put("World", world); return root; @@ -538,9 +539,12 @@ public Map save() { public static ResidencePermissions load(String worldName, ClaimedResidence res, Map root) throws Exception { ResidencePermissions newperms = new ResidencePermissions(res); //newperms.owner = (String) root.get("Owner"); - if (root.containsKey("OwnerUUID")) { - newperms.ownerUUID = UUID.fromString((String) root.get("OwnerUUID"));//get owner UUID - // String name = Residence.getPlayerName(newperms.ownerUUID); //try to find the current name of the owner + if (root.containsKey("OwnerUUID") || root.containsKey("OwnerLastKnownName")) { + if (!root.containsKey("OwnerUUID")) + newperms.ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//get empty owner UUID + else + newperms.ownerUUID = UUID.fromString((String) root.get("OwnerUUID"));//get owner UUID + // String name = Residence.getPlayerName(newperms.ownerUUID); //try to find the current name of the owner newperms.ownerLastKnownName = (String) root.get("OwnerLastKnownName");//otherwise load last known name from file OfflinePlayer p = null; From 64423ce55b7617cf32ae8e6793bba9be91a7039c Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Jun 2017 16:57:26 +0300 Subject: [PATCH 0378/1142] Properly print full residence list for console --- .../residence/text/help/InformationPager.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 199d52c89..58450761e 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -82,12 +82,12 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap linesForConsole = new ArrayList(); +// List linesForConsole = new ArrayList(); int y = -1; for (Entry resT : ownedResidences.entrySet()) { @@ -147,12 +147,13 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, final int start, final boolean resadmin) { int i = start; + int y = 0; for (Entry resT : ownedResidences.entrySet()) { + y++; + if (y < i) + continue; i++; if (i >= start + 100) break; @@ -260,7 +265,7 @@ public void ShowPagination(CommandSender sender, int pageCount, int CurrentPage, RawMessage rm = new RawMessage(); rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), CurrentPage > 1 ? "<<<" : null, CurrentPage > 1 ? cmd + " " + Prevpage : null); rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, pageCount > CurrentPage ? ">>>" : null, pageCount > CurrentPage ? cmd + " " + NextPage : null); - if (pageCount != 0) + if (pageCount != 0 && sender instanceof Player) rm.show(sender); } } From 6d327c2b66a6f4fcf6809c96a8e2adea920ab21b Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Jun 2017 17:00:23 +0300 Subject: [PATCH 0379/1142] In case of DynMap load fail --- src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index eb11344d7..d3b8af9a0 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -290,7 +290,10 @@ public void handleResidenceRemove(String resid, ClaimedResidence res, int depth) } public void activate() { - markerapi = api.getMarkerAPI(); + try { + markerapi = api.getMarkerAPI(); + } catch (Exception e) { + } if (markerapi == null) { Bukkit.getConsoleSender().sendMessage("[Residence] Error loading dynmap marker API!"); return; From 008b4af63be0b990c444af38db122e5566c2ed79 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Jun 2017 19:08:28 +0300 Subject: [PATCH 0380/1142] res lease list --- .../bekvon/bukkit/residence/Residence.java | 26 +- .../bukkit/residence/commands/lease.java | 124 +++-- .../residence/containers/MinimizeFlags.java | 11 +- .../bukkit/residence/containers/lm.java | 1 + .../residence/economy/TransactionManager.java | 2 +- .../protection/ClaimedResidence.java | 10 + .../residence/protection/FlagPermissions.java | 8 +- .../residence/protection/LeaseManager.java | 504 ++++++++++-------- .../protection/ResidenceManager.java | 27 +- .../bukkit/residence/text/help/PageInfo.java | 21 +- 10 files changed, 434 insertions(+), 300 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 23b18c6cf..d9b4e545e 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -608,7 +608,7 @@ public void run() { rmanager = new ResidenceManager(this); - leasemanager = new LeaseManager(this, rmanager); + leasemanager = new LeaseManager(this); tmanager = new TransactionManager(this); @@ -1259,7 +1259,7 @@ protected boolean loadYml() throws Exception { if (loadFile.isFile()) { yml = new YMLSaveHelper(loadFile); yml.load(); - leasemanager = getLeaseManager().load((Map) yml.getRoot().get("Leases"), rmanager); + leasemanager = getLeaseManager().load((Map) yml.getRoot().get("Leases")); } loadFile = new File(saveFolder, "permlists.yml"); if (loadFile.isFile()) { @@ -1683,16 +1683,18 @@ public void msg(CommandSender sender, lm lm, Object... variables) { // if (!isWorldOk(sender)) // return; - if (sender != null) - if (getLM().containsKey(lm.getPath())) { - String msg = getLM().getMessage(lm, variables); - if (msg.length() > 0) - sender.sendMessage(msg); - } else { - String msg = lm.getPath(); - if (msg.length() > 0) - sender.sendMessage(lm.getPath()); - } + if (sender == null) + return; + + if (getLM().containsKey(lm.getPath())) { + String msg = getLM().getMessage(lm, variables); + if (msg.length() > 0) + sender.sendMessage(msg); + } else { + String msg = lm.getPath(); + if (msg.length() > 0) + sender.sendMessage(lm.getPath()); + } } public List msgL(lm lm) { diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index bb45f0e7f..0ff6bfdd1 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -1,6 +1,8 @@ package com.bekvon.bukkit.residence.commands; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -12,6 +14,7 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.text.help.PageInfo; public class lease implements cmd { @@ -23,7 +26,32 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Player player = (Player) sender; - if (args.length == 2 || args.length == 3) { + if (args.length == 2 || args.length == 3 || args.length == 4) { + + if (args[1].equals("set")) { + if (!resadmin) { + plugin.msg(player, lm.General_NoPermission); + return true; + } + if (args[3].equals("infinite")) { + if (plugin.getLeaseManager().isLeased(plugin.getResidenceManager().getByName(args[2]))) { + plugin.getLeaseManager().removeExpireTime(plugin.getResidenceManager().getByName(args[2])); + plugin.msg(player, lm.Economy_LeaseInfinite); + } else { + plugin.msg(player, lm.Economy_LeaseNotExpire); + } + return true; + } + int days; + try { + days = Integer.parseInt(args[3]); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Days); + return true; + } + plugin.getLeaseManager().setExpireTime(player, plugin.getResidenceManager().getByName(args[2]), days); + return true; + } if (args[1].equals("expires")) { ClaimedResidence res = null; if (args.length == 2) { @@ -40,24 +68,76 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } } - String until = plugin.getLeaseManager().getExpireTime(res.getName()); + String until = plugin.getLeaseManager().getExpireTime(res); if (until != null) plugin.msg(player, lm.Economy_LeaseRenew, until); return true; } if (args[1].equals("renew")) { if (args.length == 3) { - plugin.getLeaseManager().renewArea(args[2], player); + plugin.getLeaseManager().renewArea(plugin.getResidenceManager().getByName(args[2]), player); } else { ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null) - plugin.getLeaseManager().renewArea(res.getName(), player); + plugin.getLeaseManager().renewArea(res, player); + else + return false; + } + return true; + } + if (args[1].equals("list")) { + ClaimedResidence res = null; + int page = -1; + if (args.length > 2) + try { + page = Integer.parseInt(args[2]); + } catch (Exception e) { + res = plugin.getResidenceManager().getByName(args[2]); + } + if (args.length > 3 && page == -1) + try { + page = Integer.parseInt(args[3]); + } catch (Exception e) { + res = plugin.getResidenceManager().getByName(args[3]); + } + + if (res == null) + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + + if (res == null) + return false; + + List list = new ArrayList(); + + if (plugin.getLeaseManager().isLeased(res)) + list.add(res); + + for (ClaimedResidence one : res.getSubzones()) { + if (plugin.getLeaseManager().isLeased(one)) + list.add(one); + } + + PageInfo pi = new PageInfo(3, list.size(), page); + + plugin.msg(player, lm.General_Separator); + for (ClaimedResidence one : list) { + if (!pi.isInRange()) + continue; + + if (res.isOwner(player)) + plugin.msg(player, lm.Economy_LeaseList, pi.getPositionForOutput(), one.getName(), plugin.getLeaseManager().getExpireTime(one), one.getOwner()); + else + plugin.msg(player, lm.Economy_LeaseList, pi.getPositionForOutput(), one.getName(), "", ""); } + + plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), pi.getCurrentPage(), "res lease list " + res.getName()); + return true; - } else if (args[1].equals("cost")) { + } + if (args[1].equals("cost")) { if (args.length == 3) { ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); - if (res == null || plugin.getLeaseManager().leaseExpires(args[2])) { + if (res == null || plugin.getLeaseManager().isLeased(res)) { int cost = plugin.getLeaseManager().getRenewCost(res); plugin.msg(player, lm.Economy_LeaseRenewalCost, args[2], cost); } else { @@ -71,39 +151,13 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } String area = res.getName(); - if (plugin.getLeaseManager().leaseExpires(area)) { + if (plugin.getLeaseManager().isLeased(res)) { int cost = plugin.getLeaseManager().getRenewCost(res); plugin.msg(player, lm.Economy_LeaseRenewalCost, area, cost); } else { plugin.msg(player, lm.Economy_LeaseNotExpire); } return true; - - } - } else if (args.length == 4) { - if (args[1].equals("set")) { - if (!resadmin) { - plugin.msg(player, lm.General_NoPermission); - return true; - } - if (args[3].equals("infinite")) { - if (plugin.getLeaseManager().leaseExpires(args[2])) { - plugin.getLeaseManager().removeExpireTime(args[2]); - plugin.msg(player, lm.Economy_LeaseInfinite); - } else { - plugin.msg(player, lm.Economy_LeaseNotExpire); - } - return true; - } - int days; - try { - days = Integer.parseInt(args[3]); - } catch (Exception ex) { - plugin.msg(player, lm.Invalid_Days); - return true; - } - plugin.getLeaseManager().setExpireTime(player, args[2], days); - return true; } } return false; @@ -127,6 +181,10 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "renew.Info", Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "renew"), Arrays.asList("[residence]")); + c.get(path + "list.Description", "Show lease list of current residence"); + c.get(path + "list.Info", Arrays.asList("&eUsage: &6/resadmin lease list ", "Prints out all subzones lease times")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("[residence]")); + c.get(path + "expires.Description", "Lease end date"); c.get(path + "expires.Info", Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "expires"), Arrays.asList("[residence]")); diff --git a/src/com/bekvon/bukkit/residence/containers/MinimizeFlags.java b/src/com/bekvon/bukkit/residence/containers/MinimizeFlags.java index d237f8bca..4f0a3cd89 100644 --- a/src/com/bekvon/bukkit/residence/containers/MinimizeFlags.java +++ b/src/com/bekvon/bukkit/residence/containers/MinimizeFlags.java @@ -1,20 +1,21 @@ package com.bekvon.bukkit.residence.containers; import java.util.HashMap; +import java.util.Map; import java.util.Map.Entry; public class MinimizeFlags { - private HashMap flags = new HashMap(); + private Map flags = new HashMap(); private int id = 0; - public MinimizeFlags(int id, HashMap flags) { + public MinimizeFlags(int id, Map flags) { this.id = id; this.flags = flags; } - public boolean same(HashMap flags) { + public boolean same(Map flags) { if (flags.size() != this.flags.size()) return false; for (Entry one : flags.entrySet()) { @@ -26,7 +27,7 @@ public boolean same(HashMap flags) { return true; } - public boolean add(HashMap flags) { + public boolean add(Map flags) { if (!same(flags)) return false; this.flags = flags; @@ -37,7 +38,7 @@ public int getId() { return id; } - public HashMap getFlags() { + public Map getFlags() { return flags; } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 7f5a5154c..b7c287ea7 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -248,6 +248,7 @@ public enum lm { Economy_SellAmount("&eSell Amount: &2%1"), Economy_SellList(" &6%1&e. &6%2 &e(&6%3&e) - &6%4"), Economy_LeaseExpire("&eLease Expire Time: &2%1"), + Economy_LeaseList("&6%1. &e%2 &2%3 &e%4"), Expanding_North("&eExpanding North &6%1 &eblocks"), Expanding_West("&eExpanding West &6%1 &eblocks"), diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index b3a8323c2..85641ff72 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -313,7 +313,7 @@ public boolean viewSaleInfo(ClaimedResidence res, Player player) { plugin.msg(player, lm.Area_Name, res.getName()); plugin.msg(player, lm.Economy_SellAmount, res.getSellPrice()); if (plugin.getConfigManager().useLeases()) { - String etime = plugin.getLeaseManager().getExpireTime(res.getName()); + String etime = plugin.getLeaseManager().getExpireTime(res); if (etime != null) { plugin.msg(player, lm.Economy_LeaseExpire, etime); } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index f318e325f..d1137b6c1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -70,6 +70,8 @@ public class ClaimedResidence { protected ResidenceItemList blacklist; protected boolean mainRes = false; protected long createTime = 0L; + + private Long leaseExpireTime = null; protected List cmdWhiteList = new ArrayList(); protected List cmdBlackList = new ArrayList(); @@ -1834,4 +1836,12 @@ public void addShopVote(List ShopVotes) { public void addShopVote(ShopVote ShopVote) { ShopVoteList.add(ShopVote); } + + public Long getLeaseExpireTime() { + return leaseExpireTime; + } + + public void setLeaseExpireTime(Long leaseExpireTime) { + this.leaseExpireTime = leaseExpireTime; + } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 0f9284665..8e1dacbe5 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -13,7 +13,6 @@ import java.util.Set; import java.util.UUID; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.OfflinePlayer; @@ -25,7 +24,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeFlags; -import com.bekvon.bukkit.residence.containers.MinimizeMessages; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -598,7 +596,7 @@ public Map save() { Map playerFlagsClone = new HashMap(); for (Entry> one : playerFlags.entrySet()) { - MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache((HashMap) one.getValue()); + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(one.getValue()); playerFlagsClone.put(one.getKey(), min.getId()); } root.put("PlayerFlags", playerFlagsClone); @@ -607,13 +605,13 @@ public Map save() { if (!groupFlags.isEmpty()) { Map GroupFlagsClone = new HashMap(); for (Entry> one : groupFlags.entrySet()) { - MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache((HashMap) one.getValue()); + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(one.getValue()); GroupFlagsClone.put(one.getKey(), min.getId()); } root.put("GroupFlags", GroupFlagsClone); } - MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(new HashMap(cuboidFlags)); + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(cuboidFlags); if (min == null) { // Cloning map to fix issue for yml anchors being created root.put("AreaFlags", new HashMap(cuboidFlags)); diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index b0dac8794..f34732d5a 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -1,225 +1,279 @@ -package com.bekvon.bukkit.residence.protection; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.economy.EconomyInterface; -import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; -import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.utils.GetTime; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import org.bukkit.entity.Player; - -public class LeaseManager { - - private Map leaseExpireTime; - - ResidenceManager manager; - - private Residence plugin; - - public LeaseManager(Residence plugin, ResidenceManager m) { - this.plugin = plugin; - manager = m; - leaseExpireTime = Collections.synchronizedMap(new HashMap()); - } - - public boolean leaseExpires(String area) { - return leaseExpireTime.containsKey(area); - } - - public String getExpireTime(String area) { - if (leaseExpireTime.containsKey(area)) { - return GetTime.getTime(leaseExpireTime.get(area)); - } - return null; - } - - public void removeExpireTime(String area) { - leaseExpireTime.remove(area); - } - - public void setExpireTime(String area, int days) { - this.setExpireTime(null, area, days); - } - - public void setExpireTime(Player player, String area, int days) { - if (manager.getByName(area) != null) { - leaseExpireTime.put(area, daysToMs(days) + System.currentTimeMillis()); - if (player != null) - plugin.msg(player, lm.Economy_LeaseRenew, getExpireTime(area)); - } else { - if (player != null) - plugin.msg(player, lm.Invalid_Area); - } - } - - public void renewArea(String area, Player player) { - if (!leaseExpires(area)) { - plugin.msg(player, lm.Economy_LeaseNotExpire); - return; - } - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - int max = group.getMaxLeaseTime(); - int add = group.getLeaseGiveTime(); - int rem = daysRemaining(area); - EconomyInterface econ = plugin.getEconomyManager(); - if (econ != null) { - double cost = group.getLeaseRenewCost(); - ClaimedResidence res = manager.getByName(area); - area = res.getName(); - int amount = (int) Math.ceil(res.getTotalSize() * cost); - if (cost != 0D) { - //Account account = iConomy.getBank().getAccount(player.getName()); - if (econ.canAfford(player.getName(), amount)/*account.hasEnough(amount)*/) { - econ.subtract(player.getName(), amount); - econ.add("Lease Money", amount); - plugin.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); - } else { - plugin.msg(player, lm.Economy_NotEnoughMoney); - return; - } - } - } - if (rem + add > max) { - setExpireTime(player, area, max); - plugin.msg(player, lm.Economy_LeaseRenewMax); - plugin.msg(player, lm.Economy_LeaseRenew, getExpireTime(area)); - return; - } - Long get = leaseExpireTime.get(area); - if (get != null) { - get = get + daysToMs(add); - leaseExpireTime.put(area, get); - } else - leaseExpireTime.put(area, daysToMs(add)); - plugin.msg(player, lm.Economy_LeaseRenew, getExpireTime(area)); - } - - public int getRenewCost(ClaimedResidence res) { - double cost = res.getOwnerGroup().getLeaseRenewCost(); - int amount = (int) Math.ceil(res.getTotalSize() * cost); - return amount; - } - - private static long daysToMs(int days) { - return ((days) * 24L * 60L * 60L * 1000L); - } - - private static int msToDays(long ms) { - return (int) Math.ceil((((ms / 1000D) / 60D) / 60D) / 24D); - } - - private int daysRemaining(String area) { - Long get = leaseExpireTime.get(area); - if (get <= System.currentTimeMillis()) - return 0; - return msToDays((int) (get - System.currentTimeMillis())); - } - - public void doExpirations() { - Set> set = leaseExpireTime.entrySet(); - Iterator> it = set.iterator(); - while (it.hasNext()) { - Entry next = it.next(); - if (next.getValue() <= System.currentTimeMillis()) { - String resname = next.getKey(); - ClaimedResidence res = plugin.getResidenceManager().getByName(resname); - if (res == null) { - it.remove(); - } else { - resname = res.getName(); - boolean renewed = false; - String owner = res.getPermissions().getOwner(); - - PermissionGroup group = res.getOwnerGroup(); - - int cost = this.getRenewCost(res); - if (plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().autoRenewLeases()) { - if (cost == 0) { - renewed = true; - } else if (res.getBank().hasEnough(cost)) { - res.getBank().subtract(cost); - renewed = true; - if (plugin.getConfigManager().debugEnabled()) - System.out.println("Lease Renewed From Residence Bank: " + resname); - } else if (plugin.getEconomyManager().canAfford(owner, cost)) { - if (plugin.getEconomyManager().subtract(owner, cost)) { - renewed = true; - if (plugin.getConfigManager().debugEnabled()) - System.out.println("Lease Renewed From Economy: " + resname); - } - } - } - if (!renewed) { - if (!plugin.getConfigManager().enabledRentSystem() || !plugin.getRentManager().isRented(resname)) { - ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(null, res, DeleteCause.LEASE_EXPIRE); - plugin.getServ().getPluginManager().callEvent(resevent); - if (!resevent.isCancelled()) { - manager.removeResidence(next.getKey()); - it.remove(); - if (plugin.getConfigManager().debugEnabled()) - System.out.println("Lease NOT removed, Removing: " + resname); - } - } - } else { - if (plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().enableLeaseMoneyAccount()) { - plugin.getEconomyManager().add("Lease Money", cost); - } - if (plugin.getConfigManager().debugEnabled()) - System.out.println("Lease Renew Old: " + next.getValue()); - next.setValue(System.currentTimeMillis() + daysToMs(group.getLeaseGiveTime())); - if (plugin.getConfigManager().debugEnabled()) - System.out.println("Lease Renew New: " + next.getValue()); - } - } - } - } - } - - public void resetLeases() { - leaseExpireTime.clear(); - String[] list = manager.getResidenceList(); - for (String item : list) { - if (item != null) { - ClaimedResidence res = plugin.getResidenceManager().getByName(item); - if (res != null) - this.setExpireTime(null, item, res.getOwnerGroup().getLeaseGiveTime()); - } - } - System.out.println("[Residence] - Set default leases."); - } - - public Map save() { - return leaseExpireTime; - } - - public void updateLeaseName(String oldName, String newName) { - if (leaseExpireTime.containsKey(oldName)) { - leaseExpireTime.put(newName, leaseExpireTime.get(oldName)); - leaseExpireTime.remove(oldName); - } - } - - @SuppressWarnings("unchecked") - public LeaseManager load(@SuppressWarnings("rawtypes") Map root, ResidenceManager m) { - LeaseManager l = new LeaseManager(plugin, m); - if (root != null) { - for (Object val : root.values()) { - if (!(val instanceof Long)) { - root.remove(val); - } - } - l.leaseExpireTime = Collections.synchronizedMap(root); - } - return l; - } -} +package com.bekvon.bukkit.residence.protection; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.economy.EconomyInterface; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.utils.GetTime; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import org.bukkit.entity.Player; + +public class LeaseManager { + + private Set leaseExpireTime; + + ResidenceManager manager; + + private Residence plugin; + + public LeaseManager(Residence plugin) { + this.plugin = plugin; + manager = plugin.getResidenceManager(); + leaseExpireTime = new HashSet(); + } + + @Deprecated + public boolean leaseExpires(ClaimedResidence res) { + return isLeased(res); + } + + public boolean isLeased(ClaimedResidence res) { + if (res == null) + return false; + return res.getLeaseExpireTime() != null; + } + + @Deprecated + public boolean leaseExpires(String area) { + return isLeased(plugin.getResidenceManager().getByName(area)); + } + + public String getExpireTime(ClaimedResidence res) { + if (res == null) + return null; + Long time = res.getLeaseExpireTime(); + if (time != null) { + return GetTime.getTime(time); + } + return null; + } + + @Deprecated + public String getExpireTime(String area) { + return getExpireTime(plugin.getResidenceManager().getByName(area)); + } + + public void removeExpireTime(ClaimedResidence res) { + if (res == null) + return; + leaseExpireTime.remove(res); + } + + @Deprecated + public void removeExpireTime(String area) { + removeExpireTime(plugin.getResidenceManager().getByName(area)); + } + + public void setExpireTime(Player player, ClaimedResidence res, int days) { + if (res == null) { + if (player != null) + plugin.msg(player, lm.Invalid_Area); + return; + } + + res.setLeaseExpireTime(daysToMs(days) + System.currentTimeMillis()); + leaseExpireTime.add(res); + if (player != null) + plugin.msg(player, lm.Economy_LeaseRenew, getExpireTime(res)); + } + + @Deprecated + public void setExpireTime(String area, int days) { + this.setExpireTime(null, area, days); + } + + @Deprecated + public void setExpireTime(Player player, String area, int days) { + setExpireTime(player, plugin.getResidenceManager().getByName(area), days); + } + + @Deprecated + public void renewArea(String area, Player player) { + renewArea(plugin.getResidenceManager().getByName(area), player); + } + + public void renewArea(ClaimedResidence res, Player player) { + if (res == null) + return; + if (!isLeased(res)) { + plugin.msg(player, lm.Economy_LeaseNotExpire); + return; + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + int max = group.getMaxLeaseTime(); + int add = group.getLeaseGiveTime(); + int rem = daysRemaining(res); + EconomyInterface econ = plugin.getEconomyManager(); + if (econ != null) { + double cost = group.getLeaseRenewCost(); + int amount = (int) Math.ceil(res.getTotalSize() * cost); + if (cost != 0D) { + //Account account = iConomy.getBank().getAccount(player.getName()); + if (econ.canAfford(player.getName(), amount)/*account.hasEnough(amount)*/) { + econ.subtract(player.getName(), amount); + econ.add("Lease Money", amount); + plugin.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); + } else { + plugin.msg(player, lm.Economy_NotEnoughMoney); + return; + } + } + } + if (rem + add > max) { + setExpireTime(player, res, max); + plugin.msg(player, lm.Economy_LeaseRenewMax); + return; + } + Long get = res.getLeaseExpireTime(); + if (get != null) { + get = get + daysToMs(add); + res.setLeaseExpireTime(get); + + leaseExpireTime.add(res); + } else { + res.setLeaseExpireTime(daysToMs(add)); + leaseExpireTime.add(res); + } + plugin.msg(player, lm.Economy_LeaseRenew, getExpireTime(res)); + } + + public int getRenewCost(ClaimedResidence res) { + double cost = res.getOwnerGroup().getLeaseRenewCost(); + int amount = (int) Math.ceil(res.getTotalSize() * cost); + return amount; + } + + private static long daysToMs(int days) { + return ((days) * 24L * 60L * 60L * 1000L); + } + + private static int msToDays(long ms) { + return (int) Math.ceil((((ms / 1000D) / 60D) / 60D) / 24D); + } + + private static int daysRemaining(ClaimedResidence res) { + if (res == null) + return 999; + Long get = res.getLeaseExpireTime(); + if (get <= System.currentTimeMillis()) + return 0; + return msToDays((int) (get - System.currentTimeMillis())); + } + + public void doExpirations() { + + Set t = new HashSet(leaseExpireTime); + + for (ClaimedResidence res : t) { + if (res == null) { + leaseExpireTime.remove(res); + continue; + } + if (res.getLeaseExpireTime() > System.currentTimeMillis()) + continue; + + String resname = res.getName(); + boolean renewed = false; + String owner = res.getPermissions().getOwner(); + + PermissionGroup group = res.getOwnerGroup(); + + int cost = this.getRenewCost(res); + if (plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().autoRenewLeases()) { + if (cost == 0) { + renewed = true; + } else if (res.getBank().hasEnough(cost)) { + res.getBank().subtract(cost); + renewed = true; + if (plugin.getConfigManager().debugEnabled()) + System.out.println("Lease Renewed From Residence Bank: " + resname); + } else if (plugin.getEconomyManager().canAfford(owner, cost)) { + if (plugin.getEconomyManager().subtract(owner, cost)) { + renewed = true; + if (plugin.getConfigManager().debugEnabled()) + System.out.println("Lease Renewed From Economy: " + resname); + } + } + } + if (!renewed) { + if (!plugin.getConfigManager().enabledRentSystem() || !plugin.getRentManager().isRented(resname)) { + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(null, res, DeleteCause.LEASE_EXPIRE); + plugin.getServ().getPluginManager().callEvent(resevent); + if (!resevent.isCancelled()) { + manager.removeResidence(res); + leaseExpireTime.remove(res); + if (plugin.getConfigManager().debugEnabled()) + System.out.println("Lease NOT removed, Removing: " + resname); + } + } + } else { + if (plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().enableLeaseMoneyAccount()) { + plugin.getEconomyManager().add("Lease Money", cost); + } + if (plugin.getConfigManager().debugEnabled()) + System.out.println("Lease Renew Old: " + res.getName()); + res.setLeaseExpireTime(System.currentTimeMillis() + daysToMs(group.getLeaseGiveTime())); + if (plugin.getConfigManager().debugEnabled()) + System.out.println("Lease Renew New: " + res.getName()); + } + + } + } + + public void resetLeases() { + leaseExpireTime.clear(); + String[] list = manager.getResidenceList(); + for (String item : list) { + if (item == null) + continue; + ClaimedResidence res = plugin.getResidenceManager().getByName(item); + if (res != null) + setExpireTime(null, res, res.getOwnerGroup().getLeaseGiveTime()); + + } + System.out.println("[Residence] - Set default leases."); + } + + public Map save() { + Map m = new HashMap(); + for (ClaimedResidence one : leaseExpireTime) { + m.put(one.getName(), one.getLeaseExpireTime()); + } + return m; + } + + @SuppressWarnings("unchecked") + public LeaseManager load(@SuppressWarnings("rawtypes") Map root) { + LeaseManager l = new LeaseManager(plugin); + if (root == null) + return l; + + for (Object val : root.values()) { + if (!(val instanceof Long)) { + root.remove(val); + } + } + + Map m = root; + + for (Entry one : m.entrySet()) { + ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); + if (res == null) + continue; + res.setLeaseExpireTime(one.getValue()); + l.leaseExpireTime.add(res); + } + + return l; + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 363f018e7..6703e1673 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -244,7 +244,7 @@ public boolean addResidence(Player player, String owner, String name, Location l residences.put(name.toLowerCase(), newRes); calculateChunks(name); - plugin.getLeaseManager().removeExpireTime(name); + plugin.getLeaseManager().removeExpireTime(newRes); plugin.getPlayerManager().addResidence(newRes.getOwner(), newRes); if (player != null) { @@ -256,11 +256,7 @@ public boolean addResidence(Player player, String owner, String name, Location l plugin.msg(player, lm.Residence_Create, name); } if (plugin.getConfigManager().useLeases()) { - if (player != null) { - plugin.getLeaseManager().setExpireTime(player, name, group.getLeaseGiveTime()); - } else { - plugin.getLeaseManager().setExpireTime(name, group.getLeaseGiveTime()); - } + plugin.getLeaseManager().setExpireTime(player, newRes, group.getLeaseGiveTime()); } return true; @@ -540,9 +536,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { } } - // plugin.getLeaseManager().removeExpireTime(name); - causing - // concurrent modification exception in lease manager... worked - // around for now + plugin.getLeaseManager().removeExpireTime(res); for (String oneSub : res.getSubzoneList()) { plugin.getPlayerManager().removeResFromPlayer(res.getOwner(), name + "." + oneSub); @@ -708,8 +702,8 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) if (res.getSubzonesAmount(false) > 0) plugin.msg(sender, lm.General_TotalSubzones, res.getSubzonesAmount(false), res.getSubzonesAmount(true)); - if (plugin.getConfigManager().useLeases() && plugin.getLeaseManager().leaseExpires(areaname)) { - String time = plugin.getLeaseManager().getExpireTime(areaname); + if (plugin.getConfigManager().useLeases() && plugin.getLeaseManager().leaseExpires(res)) { + String time = plugin.getLeaseManager().getExpireTime(res); if (time != null) plugin.msg(sender, lm.Economy_LeaseExpire, time); } @@ -861,13 +855,13 @@ public HashMap getMessageCatch() { return t; } - public MinimizeFlags addFlagsTempCache(HashMap flags) { + public MinimizeFlags addFlagsTempCache(Map map) { for (MinimizeFlags one : optimizeFlags) { - if (!one.add(flags)) + if (!one.add(map)) continue; return one; } - MinimizeFlags m = new MinimizeFlags(lastMinimmizeFlagsId, flags); + MinimizeFlags m = new MinimizeFlags(lastMinimmizeFlagsId, map); optimizeFlags.add(m); lastMinimmizeFlagsId++; return m; @@ -916,7 +910,7 @@ public String getChacheMessageLeave(String world, int id) { return m.getLeave(); } - public HashMap getChacheFlags(String world, int id) { + public Map getChacheFlags(String world, int id) { HashMap c = cacheFlags.get(world); if (c == null) return null; @@ -1080,9 +1074,6 @@ public boolean renameResidence(Player player, String oldName, String newName, bo plugin.getPlayerManager().renameResidence(player.getName(), oldName, newName); calculateChunks(newName); - if (plugin.getConfigManager().useLeases()) { - plugin.getLeaseManager().updateLeaseName(oldName, newName); - } plugin.getSignUtil().updateSignResName(res); diff --git a/src/com/bekvon/bukkit/residence/text/help/PageInfo.java b/src/com/bekvon/bukkit/residence/text/help/PageInfo.java index c029f308d..cdea738d8 100644 --- a/src/com/bekvon/bukkit/residence/text/help/PageInfo.java +++ b/src/com/bekvon/bukkit/residence/text/help/PageInfo.java @@ -8,6 +8,8 @@ public class PageInfo { private int end = 0; private int currentPage = 0; + private int currentPlace = -1; + private int perPage = 6; public PageInfo(int perPage, int totalEntries, int currentPage) { @@ -20,7 +22,11 @@ public PageInfo(int perPage, int totalEntries, int currentPage) { public int getPositionForOutput(int place) { return this.start + place + 1; } - + + public int getPositionForOutput() { + return currentPlace + 1; + } + private void calculate() { this.start = (this.currentPage - 1) * this.perPage; this.end = this.start + this.perPage - 1; @@ -35,6 +41,11 @@ public boolean isInRange(int place) { return false; } + public boolean isInRange() { + currentPlace++; + return isInRange(currentPlace); + } + public boolean isPageOk() { return isPageOk(this.currentPage); } @@ -66,4 +77,12 @@ public int getCurrentPage() { public int getTotalEntries() { return totalEntries; } + + public int getCurrentPlace() { + return currentPlace; + } + + public void setCurrentPlace(int currentPlace) { + this.currentPlace = currentPlace; + } } From 534c55f2cc3d2a743948badc955f4343801212a1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Jun 2017 19:23:26 +0300 Subject: [PATCH 0381/1142] Fix for custom locale not being updated --- src/com/bekvon/bukkit/residence/Residence.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index d9b4e545e..8af0f95cd 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -14,10 +14,13 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.logging.Level; @@ -167,7 +170,7 @@ public class Residence extends JavaPlugin { public Map deleteConfirm; public Map UnrentConfirm = new HashMap(); public List resadminToggle; - private final static String[] validLanguages = { "English", "Czech", "Chinese", "ChineseTW", "French" }; + private final static Set validLanguages = new HashSet(Arrays.asList("English", "Czech", "Chinese", "ChineseTW", "French")); private ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); private Map cachedPlayerNameUUIDs = new HashMap(); private WorldEditPlugin wep = null; @@ -494,6 +497,7 @@ public void onEnable() { YmlMaker langFile = new YmlMaker(this, "Language" + File.separator + lang + ".yml"); langFile.saveDefaultConfig(); } + validLanguages.add(getConfigManager().getLanguage()); for (String lang : validLanguages) { getLocaleManager().LoadLang(lang); From aa273c9d2e3966ce6d70398d8b4ded46cd9b6716 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Jun 2017 19:31:55 +0300 Subject: [PATCH 0382/1142] Dont show residence info when using string on container --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 55d1d91e6..d0d4cd4ab 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1047,6 +1047,9 @@ public void onInfoCheck(PlayerInteractEvent event) { if (heldItemId != plugin.getConfigManager().getInfoToolID()) return; + + if (this.isContainer(block.getType(), block)) + return; Location loc = block.getLocation(); ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); From 71f9ff65ced03dc4c70ee9b8123b628d20ec1edb Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Jun 2017 19:49:42 +0300 Subject: [PATCH 0383/1142] Change for default colors for "likes" line --- src/com/bekvon/bukkit/residence/Residence.java | 2 +- src/com/bekvon/bukkit/residence/containers/lm.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 8af0f95cd..8c4122772 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -85,7 +85,6 @@ import com.griefcraft.lwc.LWCPlugin; import com.residence.mcstats.Metrics; import com.residence.zip.ZipLibrary; -import com.sk89q.util.yaml.YAMLNode; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; @@ -1028,6 +1027,7 @@ private void loadEssentialsEconomy() { } } + private void loadRealEconomy() { Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); if (p != null) { diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index b7c287ea7..d26852a0a 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -320,7 +320,7 @@ public enum lm { Shop_ListTopLine("&6%1 &eShop list - Page &6%2 &eof &6%3 %4"), Shop_List(" &e%1. &6%2 &e(&6%3&e) %4"), Shop_ListVoted("&e%1 (&6%2&e)"), - Shop_ListLiked("&eLikes: &0%1"), + Shop_ListLiked("&7Likes: &7%1"), Shop_VotesTopLine("&6%1 &e%2 residence vote list &6- &ePage &6%3 &eof &6%4 %5"), Shop_VotesList(" &e%1. &6%2 &e%3 &7%4"), From 60638ef84e2f93c664133b271bd81f2858c87088 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Jun 2017 20:17:04 +0300 Subject: [PATCH 0384/1142] Incorrect anvil data --- src/com/bekvon/bukkit/residence/containers/Flags.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 68705c500..f8724ca63 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -5,7 +5,7 @@ public enum Flags { admin(7, 0, FlagMode.Player, "Gives a player permission to change flags on a residence", true), animalkilling(365, 0, FlagMode.Both, "Allows or denys animal killing", true), animals(383, 90, FlagMode.Residence, "Allows or denys animal spawns", true), - anvilbreak(145, 90, FlagMode.Residence, "Allows or denys anvil break in residence", true), + anvilbreak(145, 0, FlagMode.Residence, "Allows or denys anvil break in residence", true), backup(47, 0, FlagMode.Residence, "If set to true, restores previous look of area (WordEdit required)", false), bank(130, 0, FlagMode.Both, "Allows or denys deposit/withdraw money from res bank", true), bed(355, 0, FlagMode.Both, "Allows or denys players to use beds", true), From b8b373a8356668cefd8ad0e3d7ddc92780f99d06 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Jun 2017 20:54:34 +0300 Subject: [PATCH 0385/1142] Correct messages on enter/leave action --- .../bukkit/residence/ConfigManager.java | 9 ++ .../residence/containers/ABInterface.java | 2 + .../listeners/ResidencePlayerListener.java | 122 ++++++++++++------ .../bukkit/residence/utils/ActionBar.java | 11 ++ 4 files changed, 101 insertions(+), 43 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 241d26944..07686f397 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -113,6 +113,7 @@ public class ConfigManager { protected ChatColor chatColor; protected boolean chatEnable; protected boolean actionBar; + protected boolean titleMessage; protected boolean ActionBarOnSelection; protected boolean visualizer; protected int minMoveUpdate; @@ -785,6 +786,9 @@ public void UpdateConfigFile() { c.getW().addComment("Global.ActionBar.General", "True for ActionBar - new component in 1.8", "False for old Messaging in chat enter/leave Residence messages"); actionBar = c.get("Global.ActionBar.General", true); + c.getW().addComment("Global.TitleBar.EnterLeave", "When set to true enter/leave messages will be shown in title/subtitle slots", + "Subtitle can be defined with %subtitle% while setting enter/leave messages"); + titleMessage = c.get("Global.TitleBar.EnterLeave", false); ActionBarOnSelection = c.get("Global.ActionBar.ShowOnSelection", true); c.getW().addComment("Global.ResidenceChatColor", "Color of residence chat."); @@ -1039,6 +1043,7 @@ public void UpdateConfigFile() { if (CouldronCompatability) { useVisualizer = false; actionBar = false; + titleMessage = false; ActionBarOnSelection = false; } @@ -1465,6 +1470,10 @@ public boolean useActionBar() { return actionBar; } + public boolean useTitleMessage() { + return titleMessage; + } + public boolean useActionBarOnSelection() { return ActionBarOnSelection; } diff --git a/src/com/bekvon/bukkit/residence/containers/ABInterface.java b/src/com/bekvon/bukkit/residence/containers/ABInterface.java index 4d4cd6be7..d845e9053 100644 --- a/src/com/bekvon/bukkit/residence/containers/ABInterface.java +++ b/src/com/bekvon/bukkit/residence/containers/ABInterface.java @@ -10,4 +10,6 @@ public interface ABInterface { public void send(Player player, String msg); public void sendTitle(Player player, Object title, Object subtitle); + + void sendTitle(Player receivingPacket, Object title); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index d0d4cd4ab..e85e43be2 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1047,7 +1047,7 @@ public void onInfoCheck(PlayerInteractEvent event) { if (heldItemId != plugin.getConfigManager().getInfoToolID()) return; - + if (this.isContainer(block.getType(), block)) return; @@ -1788,20 +1788,23 @@ public void run() { if (res == null) { lastOutsideLoc.put(pname, loc); if (ResOld != null) { - String leave = ResOld.getLeaveMessage(); // New ResidenceChangeEvent ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); plugin.getServ().getPluginManager().callEvent(chgEvent); - if (leave != null && !leave.equals("")) { - if (plugin.getConfigManager().useActionBar()) { - plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) - .toString()); - } else { - plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); - } - } +// String leave = ResOld.getLeaveMessage(); +// if (leave != null && !leave.equals("")) { +// if (plugin.getConfigManager().useTitleMessage()) { +// plugin.getAB().sendTitle(player, ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); +// } +// if (plugin.getConfigManager().useActionBar()) { +// plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) +// .toString()); +// } else { +// plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); +// } +// } currentRes.remove(pname); } return; @@ -1837,7 +1840,6 @@ public void run() { Location newLoc = res.getOutsideFreeLoc(loc, player); player.teleport(newLoc); } - if (plugin.getConfigManager().useActionBar()) { plugin.getAB().send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); } else { @@ -1889,46 +1891,80 @@ public void run() { // "from" residence for ResidenceChangedEvent ClaimedResidence chgFrom = null; - if (ResOld != res && ResOld != null) { - String leave = ResOld.getLeaveMessage(); - chgFrom = ResOld; - if (leave != null && !leave.equals("") && ResOld != res.getParent()) { - if (plugin.getConfigManager().useActionBar()) { - plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) - .toString()); - } else { - plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); - } - } - } - - String enterMessage = res.getEnterMessage(); +// if (ResOld != res && ResOld != null) { +// String leave = ResOld.getLeaveMessage(); +// chgFrom = ResOld; +// if (leave != null && !leave.equals("") && ResOld != res.getParent()) { +// if (plugin.getConfigManager().useTitleMessage()) { +// plugin.getAB().sendTitle(player, ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); +// } +// if (plugin.getConfigManager().useActionBar()) { +// plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) +// .toString()); +// } else { +// plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); +// } +// } +// } // New ResidenceChangedEvent ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); plugin.getServ().getPluginManager().callEvent(chgEvent); - if (!(ResOld != null && res == ResOld.getParent())) { - if (plugin.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (plugin.getRentManager().isForRent(areaname) || plugin - .getTransactionManager().isForSale(areaname))) { - if (plugin.getRentManager().isForRent(areaname) && !plugin.getRentManager().isRented(areaname)) { - RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); - if (rentable != null) - plugin.getAB().send(player, plugin.msg(lm.Residence_CanBeRented, areaname, rentable.cost, rentable.days)); - } else if (plugin.getTransactionManager().isForSale(areaname) && !res.isOwner(player)) { - int sale = plugin.getTransactionManager().getSaleAmount(areaname); - plugin.getAB().send(player, plugin.msg(lm.Residence_CanBeBought, areaname, sale)); - } - } else if (enterMessage != null && !enterMessage.equals("")) { - if (plugin.getConfigManager().useActionBar()) { - plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, areaname, res, enterMessage)) - .toString()); - } else { - plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, areaname, res, enterMessage)); - } + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { + + ClaimedResidence from = event.getFrom(); + ClaimedResidence to = event.getTo(); + String message = null; + + ClaimedResidence res = from == null ? to : from; + + if (from == null && to != null) { + message = to.getEnterMessage(); + res = to; + } + + if (from != null && to == null) { + message = from.getLeaveMessage(); + res = from; + } + + if (from != null && to != null) { + message = to.getEnterMessage(); + res = to; + } + + Player player = event.getPlayer(); + + if (message != null) { + if (plugin.getConfigManager().useTitleMessage()) { + plugin.getAB().sendTitle(player, ChatColor.YELLOW + insertMessages(player, res.getName(), res, message)); + } + if (plugin.getConfigManager().useActionBar()) { + plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res.getName(), res, message)) + .toString()); + } else { + plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res.getName(), res, message)); + } + } + if (!(from != null && res == from.getParent())) { + if (plugin.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (plugin.getRentManager().isForRent(from) || plugin + .getTransactionManager().isForSale(from))) { + if (plugin.getRentManager().isForRent(from) && !plugin.getRentManager().isRented(from)) { + RentableLand rentable = plugin.getRentManager().getRentableLand(from); + if (rentable != null) + plugin.getAB().send(player, plugin.msg(lm.Residence_CanBeRented, from, rentable.cost, rentable.days)); + } else if (plugin.getTransactionManager().isForSale(from) && !res.isOwner(player)) { + int sale = plugin.getTransactionManager().getSaleAmount(from); + plugin.getAB().send(player, plugin.msg(lm.Residence_CanBeBought, from, sale)); } } } + } private StuckInfo updateStuckTeleport(Player player, Location loc) { diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index e205ce43e..3713133dc 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -73,6 +73,15 @@ public ActionBar(Residence plugin) { } } + @Override + public void sendTitle(Player receivingPacket, Object title) { + String t = (String) title; + if (t.contains("%subtitle%")) + sendTitle(receivingPacket, t.split("%subtitle%")[0], t.split("%subtitle%")[1]); + else + sendTitle(receivingPacket, t, ""); + } + @Override public void sendTitle(Player receivingPacket, Object title, Object subtitle) { if (simpleTitleMessages) { @@ -113,6 +122,8 @@ public void send(CommandSender sender, String msg) { @Override public void send(Player receivingPacket, String msg) { + if (msg != null) + msg = msg.replace("%subtitle%", ""); if (simpleMessages) { receivingPacket.sendMessage(msg); return; From 5054760f39e8d09d415590c9eb92988f71ffcdc4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 18 Jun 2017 20:57:15 +0300 Subject: [PATCH 0386/1142] Spanish locale by WyRe --- src/Language/Spanish.yml | 621 ++++++++++++++++++ .../bekvon/bukkit/residence/Residence.java | 2 +- 2 files changed, 622 insertions(+), 1 deletion(-) create mode 100644 src/Language/Spanish.yml diff --git a/src/Language/Spanish.yml b/src/Language/Spanish.yml new file mode 100644 index 000000000..039464a82 --- /dev/null +++ b/src/Language/Spanish.yml @@ -0,0 +1,621 @@ +#Spanish Translation by cloud_strife_91spain and lemon42 +# NOTE: If you want to modify this file, it is HIGHLY recommended that you make a copy +# of this file and modify that instead. This file will be updated automatically by Residence +# when a newer version is detected, and your changes will be overwritten. Once you +# have a copy of this file, change the Language: option under the Residence config.yml +# to whatever you named your copy. +Version: 20 +FieldsVersion: 22 +Language: + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. + #Version 1 Fields + InvalidResidence: Residencia inválida... + InvalidSubzone: Subzona inválida... + InvalidDirection: Dirección inválida... + InvalidChannel: Canal inválido... + InvalidAmount: Cantidad inválida... + InvalidCost: Coste inválido... + InvalidDays: Numero de días inválido... + InvalidMaterial: Material inválido... + InvalidBoolean: Valor inválido, debe ser true(t) o false(f) + InvalidArea: Area inválida... + InvalidGroup: Grupo inválido... + InvalidMessageType: El tipo de mensaje debe ser enter o remove + InvalidList: Lista inválida... + InvalidFlag: Flag inválido... + InvalidFlagState: Estado de flag inválido, debe ser true(t), false(f), o remove(r) + AreaExists: El nombre de área ya existe. + AreaCreate: 'Area de residencia creada, ID %1' + AreaDiffWorld: El área está en un mundo diferente que la residencia. + AreaCollision: 'Area colisiona con la residencia %1' + AreaSubzoneCollision: 'Area colisiona con la subzona %1' + AreaNonExist: No existe tal zona. + AreaInvalidName: Nombre de área inválido... + AreaRename: 'Area renombrada de %1 a %2' + AreaRemove: 'Area eliminada %1 ...' + AreaRemoveLast: No se puede eliminar el último área de una residencia. + AreaNotWithinParent: El area no está dentro del área principal. + AreaUpdate: Area actualizada... + AreaMaxPhysical: Has alcanzado el máximo de áreas físicas para tu residencia. + AreaSizeLimit: El espacio del área no se encuentra dentro de los límites permitidos. + AreaHighLimit: 'No puedes hacer una protección tan alta, tu límite es %1' + AreaLowLimit: 'No puedes hacer una protección tan profunda, tu límite es %1' + NotInResidence: No estás en una residencia. + InResidence: 'Actualmente te encuentras en la residencia %1' + ResidenceOwnerChange: 'La residencia propiedad de %1 ahora es del jugador %2' + NonAdmin: No eres un administrador de residencias. + AdminOnly: Sólo los administradores tienen acceso a este comando. + ChatDisabled: Chat de residencia desactivado... + SubzoneRename: 'Subzona renombrada de %1 a %2' + SubzoneRemove: 'Subzona %1 eliminada.' + SubzoneCreate: 'Subzona %1 creada' + SubzoneCreateFail: 'No se puede crear la subzona %1' + SubzoneExists: 'La subzona %1 ya existe.' + SubzoneCollide: 'La subzona colisiona con otra subzona llamada %1' + SubzoneMaxDepth: Has llegado a la profundidad máxima permitida en una subzona. + SubzoneSelectInside: Los dos puntos de selección han de estar dentro de la residencia. + SelectPoints: Selecciona los dos puntos antes de usar este comando! + SelectionSuccess: Selección realizada! + SelectionFail: Comando de selección inválido... + SelectionBedrock: Selección expandida al máximo límite inferior permitido. + SelectionSky: Selección expandida al máximo límite superior permitido. + SelectionArea: 'Seleccionado el area %1 de la residencia %2' + SelectDiabled: No tienes acceso a los comandos de selección. + NoPermission: No tienes permisos para hacer esto. + OwnerNoPermission: El propietario no tiene permiso para esto. + ParentNoPermission: No tienes permisos para realizar cambios en la zona principal. + MessageChange: Mensaje cambiado... + FlagSet: Flag establecido... + FlagCheckTrue: 'Flag %1 aplicado al jugador %2 para la residencia %3, valor = %4' + FlagCheckFalse: 'Flag %1 no aplicado al jugador %2 para la residencia.' + FlagsCleared: Flags borrados. + FlagsDefault: Flags establecidos por defecto. + Usage: Uso del comando + InvalidHelp: Página de ayuda inválida... + SubCommands: Subcomandos + InvalidList: Tipo de lista desconocida, debe ser blacklist o ignorelist. + MaterialGet: 'El nombre del material para el ID %1 es %2' + MarketDisabled: Economía desactivada! + MarketList: Lista del mercado + SelectionTool: Herramienta de selección + InfoTool: Información de la herramienta + NoBankAccess: No tienes acceso al banco. + NotEnoughMoney: No tienes suficiente dinero. + BankNoMoney: No tienes suficiente dinero en el banco. + BankDeposit: 'Has depositado %1 en el banco de la residencia.' + BankWithdraw: 'Has retirado %1 del banco de la residencia.' + MoneyCharged: 'Cargo de %1 en tu cuenta %2.' + MoneyCredit: 'Crédito de %1 en tu cuenta %2.' + RentDisabled: Sistema de alquiler desactivado. + RentReleaseInvalid: 'La residencia %1 no está en alquiler.' + RentSellFail: No se puede vender una residencia si está en alquiler. + SellRentFail: No se puede alquilar una residencia si está a la venta. + OwnerBuyFail: No puedes comprar tu propia tierra! + OwnerRentFail: No puedes alquilar tu propia tierra! + AlreadySellFail: Residencia ya a la venta! + ResidenceBought: 'Has comprado la residencia %1' + ResidenceBuy: '%1 ha comprado la residencia %2' + ResidenceBuyTooBig: Esta residencia tiene areas más grandes de lo que tu tienes permitido. + ResidenceNotForSale: La residencia no está a la venta. + ResidenceForSale: 'Residencia %1 está a la venta por %2' + ResidenceStopSelling: La residencia ya no está a la venta + ResidenceTooMany: Ya has alcanzado el número máximo de residencias permitidas. + ResidenceMaxRent: Ya estás alquilando el número máximo de residencias permitidas. + ResidenceAlreadyRent: La residencia ya está en alquiler... + ResidenceNotForRent: La residencia no está en alquiler... + ResidenceNotRented: Residencia no alquilada. + ResidenceUnrent: 'La residencia %1 ha dejado de estar en alquiler.' + ResidenceRemoveRentable: 'La residencia %1 ya ha dejado de alquilarse.' + ResidenceForRentSuccess: 'La residencia %1 está ahora en alquiler %2 cada %3 días.' + ResidenceRentSuccess: 'Has alquilado la residencia %1 por %2 días.' + ResidenceAlreadyRented: 'La residencia %1 ha sido alquilada a %2' + ResidenceAlreadyExists: 'La residencia llamada %1 ya existe.' + ResidenceCreate: 'Has creado la residencia %1!' + ResidenceRename: 'Residencia renombrada de %1 a %2' + ResidenceRemove: 'La residencia %1 ha sido eliminada...' + RentDisabled: Alquiler desactivado... + RentDisableRenew: 'La residencia %1 no volverá a realquilarse cuando expire.' + RentEnableRenew: 'La residencia %1 automáticamente volverá a alquilarse cuando expire.' + RentableDisableRenew: '%1 ya no renovará su estado cuando expire.' + RentableEnableRenew: '%1 automáticamente renovará su estado cuando expire.' + LandForSale: Tierra a la venta + SellAmount: Cantidad de venta + LeaseExpire: Tiempo de caducidad de arrendamiento + RentExpire: Tiempo de caducidad de venta + RentableAutoRenew: Autorenovamiento de arrendamiento + RentAutoRenew: Autorenovación de alquiler + RentableLand: Tierra en alquiler + ListMaterialAdd: '%1 incorporado a la residencia %2' + ListMaterialRemove: '%1 eliminado de la residencia %2' + ItemBlacklisted: El uso de este item aquí no está permitido. + RentedModifyDeny: No puedes modificar una residencia alquilada. + WorldPVPDisabled: PVP del mundo desactivado. + NoPVPZone: Zona no PVP. + FlagDeny: 'No tienes el permiso de %1 aquí.' + FlagSetDeny: 'El propietario no tiene acceso al flag %1' + SelectPoint: 'Punto de selección %1 situado' + ResidenceChat: 'Chat residencia activado %1' + ResidenceMoveDeny: 'No tienes permiso de movimiento para la residencia %1' + TeleportDeny: No tienes acceso al teletransporte. + TeleportSuccess: 'Teletransportado!' + TeleportNear: Teletransportado a la residencia más cercana. + TeleportNoFlag: No tienes acceso al teletransporte de esta residencia. + SetTeleportLocation: Localización de teletransporte establecida... + HelpPageHeader: 'Páginas de ayuda - %1 - Página <%2 de %3>' + ListExists: La lista ya existe... + ListRemoved: Lista eliminada... + ListCreate: 'Lista creada %1' + LeaseRenew: 'Contrato de arrendamiento válido hasta el %1' + LeaseRenewMax: Contrato de renovación al máximo permitdo + LeaseNotExpire: No hay tal arrendamiento, o no tiene fecha de expiración. + LeaseRenewalCost: 'El coste de renovación para el área %1 es de %2' + LeaseInfinite: Tiempo de arrendamiento establecido en infinito... + PermissionsApply: Permisos aplicados a la residencia. + PhysicalAreas: Areas físicas + CurrentArea: Area actual + LeaseExpire: Caducidad de arrendamiento + NotOnline: El jugador objetivo ha de estar online + ResidenceGiveLimits: No puedes darle la residencia al jugador objetivo porque esta fuera de los limites del jugador. + ResidenceGive: 'Residencia %1 dada al jugador %2' + ResidenceRecieve: 'Has recibido la residencia %1 del jugador %2' + #Version 4 New Fields + #ResidenceListAll: 'Residences - ' - removed, use GenericPage now + ResidenceListAllEmpty: No hay residencias existentes en el servidor... + InvalidPage: Página inválida... + NextPage: Página siguiente + #Version 10 New Fields + RemovePlayersResidences: 'Se eliminaron todas las residencias que pertenecen al jugador %1' + GenericPage: 'Página %1 de %2' + #Version 11 New Fields + ResidenceRentedBy: 'En alquiler por %1' + #Version 14 New Fields + InvalidCharacters: Caracteres no válidos detectados... + InvalidNameCharacters: El nombre contiene caracteres no permitidos... + #Version 15 New Fields + DeleteConfirm: 'Si estás seguro que deseas eliminar la residencia %1, usa "/res confirm" para confirmarlo.' + #Version 18 New Fields + SelectTooHigh: La selección está por encima de la parte superior de los límites del mapa. + SelectTooLow: La selección está por debajo de la parte inferior de los límites del mapa. + WorldEditNotFound: WorldEdit no fue detectado. + #Version 19 New Fields + NoResHere: No hay ninguna residencia aquí. + DeleteSubzoneConfirm: 'Si estás seguro que deseas eliminar la subzona %1, usa "/res confirm" para confirmarlo.' + #Version 20 New Fields + SubzoneOwnerChange: 'La subzona propiedad de %1 ahora es del jugador %2' + CoordsTop: 'X:%1 Y:%2 Z:%3' + CoordsBottom: 'X:%1 Y:%2 Z:%3' + #Version 21 New Fields + AdminToggle: 'Automatic resadmin toggle turned %1' + #Version 22 New Fields + NoSpawn: 'You do not have move permissions at your spawn point. Relocating' + CompassTargetReset: 'Your compass has been reset' + CompassTargetSet: 'Your compass now points to %1' + + #The below lines are mostly a word bank for various uses. + #Version 1 Fields + Description: Descripción + Land: Tierra + Cost: Coste + Selection: Selección + Total: Total + Size: Tamaño + Expanding: Expandiendo + Shifting: Moviendo + Up: Arriba + Down: Abajo + Error: Error + Flags: Flags + Your: Tu/tus + Group: Grupo + Others: Otros + Primary: Primaria + Secondary: Secondaria + Moved: Movido + Status: Estado + Available: Disponible + On: On + Off: Off + Name: Nombre + Lists: Listas + Residences: Residencias + Residence: Residencia + Count: Número + Owner: Propietario + #Version 4 Fields + World: Mundo + #Version 12 Fields + Subzones: Subzonas + #Version 20 Fields + CoordsT: coordenadas superiores + CoordsB: menores coordenadas + #Version 22 Fields + TurnOn: 'on' + TurnOff: 'off' + +# This is the help / usage messages for each command. +# It follows this format: +# +# Description: +# Info: +# SubCommands: +# - these follow the same format, and each sub command can have its own subcommands +# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that +# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later). +# Add a page number after the ? mark to see that page. +HelpLinesPerPage: 7 +CommandHelp: #this is just a holder node, that holds the entire help + Description: Contains Help for Residence + SubCommands: #this is the actual beginning of all commands + res: #main residence command + Description: Comando principal + Info: + - 'Ver el wiki para más información.' + - 'Wiki: residencebukkitmod.wikispaces.com' + - 'Utiliza /[comando] ? para ver más información.' + SubCommands: + select: #selection commands + Description: Comandos de selección + Info: + - 'Este comando selecciona áreas para hacer residencias.' + - '/res select [x] [y] [z] - selecciona un número de bloques alrededor de tí.' + SubCommands: + coords: + Description: Mostrar coordinadas de la selección + Info: + - 'Uso: /res select coords' + size: + Description: Mostrar tamaño de la selección + Info: + - 'Uso: /res select size' + cost: + Description: Mostrar el coste de la selección + Info: + - 'Uso: /res select cost' + vert: + Description: Expandir selección verticalmente + Info: + - 'Uso: /res select vert' + - 'Expande tanto como estas autorizado (por arriba y por abajo).' + sky: + Description: Expandir selección al cielo. + Info: + - 'Uso: /res select sky' + - 'Expande tan alto como estas autorizado.' + bedrock: + Description: Expandir selección al bedrock. + Info: + - 'Uso: /res select bedrock' + - 'Expande tan bajo como estas autorizado.' + expand: + Description: Expandir selección en una dirección. + Info: + - 'Uso: /res select expand ' + - 'Expande en la dirección en la que estás mirando.' + shift: + Description: Mover selección en una dirección. + Info: + - 'Uso: /res select shift ' + - 'Mueve la selección de en la dirección en la que estás mirando.' + chunk: + Description: Seleccionar el chunk en el cual estás ahora. + Info: + - 'Uso: /res select chunk' + - 'Selecciona el chunk en el cual estás ahora.' + residence: + Description: Seleccionar un área existente en una residencia. + Info: + - 'Uso: /res select ' + - 'Selecciona un área existente en una residencia.' + create: #creation command + Description: Crear residencias + Info: + - 'Uso: /res create ' + remove: #remove command + Description: Eliminar residencias + Info: + - 'Uso: /res remove ' + removeall: + Description: Eliminar todas las residencias de un jugador. + Info: + - 'Uso: /res removeall [jugador]' + - 'Elimina todas las residencias de un jugador.' + - 'Necesita /resadmin si lo utilizas en alguien otro que tí.' + confirm: + - 'Uso: /res confirm' + - 'Confirma la eliminación de una residencia.' + subzone: + Description: Crear subzonas en residencias. + Info: + - 'Uso: /res subzone [nombre subzona]' + - 'Si el nombre de residencia no se especifica, intentará utilizar la residencia en la cual estás.' + area: + Description: Gestiona áreas físicas de una residencia. + SubCommands: + list: + Description: Listear las áreas físicas de una residencia. + Info: + - 'Uso: /res area list [residencia] ' + listall: + Description: Listear coordinadas y otras informaciones. + Info: + - 'Uso: /res area listall [residencia] ' + add: + Description: Añadir áreas físicas a una residencia. + Info: + - 'Uso: /res area add [residencia] [IDdelArea]' + - 'Tienes que seleccionar dos puntos primero.' + remove: + Description: Eliminar áreas físicas de una residencia + Info: + - 'Uso: /res area remove [residencia] [IDdelArea]' + replace: + Description: Reemplazar áreas físicas en una residencia + Info: + - 'Uso: /res area replace [residencia] [IDdelArea]' + - 'Tienes que seleccionar dos puntos primero.' + - 'El reemplazamiento de un área cobrará la diferencia de tamaño si la nueva és más grande.' + info: + Description: Mostrar información de una residencia. + Info: + - 'Uso: /res info ' + - 'Si no especifica se mostrará la información de la residencia en la que estás.' + limits: + Description: Mostrar límites. + Info: + - 'Uso: /res limits' + - 'Muestra tus límites de creación y gestionamiento de residencias.' + message: + Description: Gestionar mensajes de residencia + Info: + - 'Uso: /res message [enter/leave] [mensaje]' + - 'Poner el mensaje de entrada (enter) o de salida (leave) de una residencia.' + - 'Usage: /res message remove [enter/leave]' + - 'Eliminar el mensaje de entrada (enter) o de salida (leave).' + lease: + Description: Gestionar arrendamientos de residencias + Info: + - 'Uso: /res lease [renew/cost] [residencia]' + - '/res lease cost mostrará el coste de renovación de un arrendamiento.' + - '/res lease renew renovará el arrendamiento de una residencia si tienes suficiente dinero.' + SubCommands: + set: + Description: Poner el tiempo de arrendamiento (sólo admins) + Info: + - 'Uso: /resadmin lease set [residencia] [#días/infinite]' + - 'Pone el tiempo de arrendamiento de [residencia] a un número de días, o infinito (infinite)' + bank: + Description: Gestionar el dinero en una residencia + Info: + - 'Uso: /res bank [deposit/withdraw] [cantidad]' + - 'Depositar (deposit) o cobrar (withdraw) dinero.' + - 'Tienes que estar en la residencia.' + - 'Tienes que tener el flag +bank.' + tp: + Description: Teletransportar a una residencia + Info: + - 'Uso: /res tp [residencia]' + - 'Teletransportate a una residencia. Tienes que tener el flag +tp o ser admin.' + - 'Tu grupo tambien tiene que ser autorizado a teletransportarse.' + tpset: + Description: Establecer el punto de teletransporte de una residencia + Info: + - 'Uso: /res tpset' + - 'Establecerá el punto de teletransporte de una residencia al punto en el que estás.' + - 'Tienes que estar en la residencia para usar este comando.' + - 'Tambien tienes que ser el propietario o tener el flag +admin.' + set: + Description: Establecer flags generales para una residencia + Info: + - 'Uso: /res set [flag] [true/false/remove]' + - 'Para ver una lista de flags, utiliza /res flags ?' + - 'Los flags se aplican a cualquier jugador que no tiene flags especificos (ver /res pset ?).' + pset: + Description: Establecer flags especificos para una residencia + Info: + - 'Uso: /res pset [jugador] [flag] [true/false/remove]' + - 'Uso: /res pset [jugador] removeall' + - 'Para ver una lista de flags, utiliza /res flags ?' + gset: + Description: Establecer flags especificos para un grupo en una residencia + Info: + - 'Uso: /res gset [grupo] [flag] [true/false/remove]' + - 'Para ver una lista de flags, utiliza /res flags ?' + lset: + Description: Cambiar opciones de blacklist y ignorelist + Info: + - 'Uso: /res lset [blacklist/ignorelist] [material]' + - 'Uso: /res lset info' + - 'Blacklistear un material evita que sea puesto en una residencia.' + - 'Ignorelist hace que un material no sea protegido por la residencia.' + flags: + Description: List of flags + Info: + - 'Para estos flags, normalmente, true autoriza la acción y false la denega.' + - 'build - autoriza o denega construcción' + - 'use - autoriza o denega el uso de puertas, botones, palancas, etc.' + - 'move - autoriza o denega movimiento' + - 'container - autoriza o denega el uso de cofres, hornos, dispensadores, etc.' + - 'trusted - Gives build, use, move, container and tp flags' + - 'place - autoriza o denega plazamiento de bloques, anula el flag build' + - 'destroy - autoriza o denega destrucción de bloques, anula el flag build' + - 'pvp - autoriza o denega PvP (combate jugador contra jugador)' + - 'tp - autoriza o denega teletransportación' + - 'admin - autoriza o denega el cambio de flags para un jugador' + - 'subzone - autoriza o denega a un jugador a crear subzonas' + - 'monsters - autoriza o denega apariciones de monstruos' + - 'animals - autoriza o denega apariciones de animales' + - 'healing - establecer esto a true dara vida a los jugadores en la residencia' + - 'tnt - autoriza o denega explosiones de TNT' + - 'creeper - autoriza o denega explosiones de creepers' + - 'ignite - autoriza o denega encender fuegos' + - 'firespread - autoriza o denega la propagación del fuego' + - 'bucket - autoriza o denega el uso de cubos' + - 'flow - autoriza o denega corriente de líquidos' + - 'lavaflow - autoriza o denega corriente de lava, anula el flag flow' + - 'waterflow - autoriza o denega corriente de aguam, anula el flag flow' + - 'damage - autoriza o denega el daño de entidades' + - 'piston - autoriza o denega empujamiento y retracción de bloques por pistones' + - 'hidden - oculta la residencia de listas' + - 'cake - allows or denys players to eat cake' + - 'lever - allows or denys players to use levers' + - 'button - allows or denys players to use buttons' + - 'diode - allows or denys players to use redstone repeaters' + - 'door - allows or denys players to use doors and trapdoors' + - 'table - allows or denys players to use workbenches' + - 'enchant - allows or denys players to use enchanting tables' + - 'brew - allows or denys players to use brewing stands' + - 'bed - allows or denys players to use beds' + - 'button - allows or denys players to use buttons' + - 'pressure - allows or denys players to use pressure plates' + - 'note - allows or denys players to use note blocks' + - 'redstone - Gives lever, diode, button, pressure, note flags' + - 'craft - Gives table, enchant, brew flags' + list: + Description: Listear residencias + Info: + - 'Uso: /res list ' + - 'Listea todas la residencias de un jugador (salvo las que están ocultas).' + - 'Si listeas tus propias residencias, verás las residencias ocultas.' + - 'Para listear las residencias de todos, utiliza /res listall.' + listhidden: + Description: Listear residencias ocultas (sólo admins) + Info: + - 'Uso: /res listhidden ' + - 'Listea las residencias ocultas de un jugador.' + listall: + Description: Listear TODAS las residencias + Info: + - 'Uso: /res listall ' + - 'Listea todas las residencias en el servidor (salvo ocultas que tu no tienes)' + listallhidden: + Description: Listear TODAS las residencias ocultas (sólo admins) + Info: + - 'Uso: /res listhidden ' + - 'Listea todas las residencias ocultas en el servidor.' + sublist: + Description: Listear subzonas de la residencia + Info: + - 'Uso: /res sublist ' + - 'Listea las subzonas de una residencia.' + default: + Description: Establecer los flags por defecto + Info: + - 'Uso: /res default ' + - 'Establecer los flags por defecto a una residencia. Tienes que ser el propietario o admin para esto.' + rename: + Description: Renombrar una residencia. + Info: + - 'Uso: /res rename [nombre] [nuevoNombre]' + - 'Tienes que ser el propietario o admin para esto.' + - 'El nombre no debe estar usado por otra residencia.' + mirror: + Description: Copiar los flags de una residencia. + Info: + - 'Uso: /res mirror [residencia fuente] [residencia objetiva]' + - 'Copia los flags de una residencia a otra. Tienes que ser el propietario de las dos residencias o admin para esto.' + market: + Description: Comprar, vender o alquilar residencias + Info: + - 'Uso: /res market ? para más información' + SubCommands: + info: + Description: Información sobre la economía de una residencia + Info: + - 'Uso: /res market info [residencia]' + - 'Muestra si una residencia está a la venta o en alquiler, y a qué precio.' + list: + Description: Listea residencias alquilables y a la venta. + Info: + - 'Uso: /res market list' + sell: + Description: Poner en venta a una residencia + Info: + - 'Uso: /res market sell [residencia] [cantidad]' + - 'Pone a la venta la residencia para [cantidad] de dinero.' + - 'Otro jugador puede comprarla con /res market buy' + buy: + Description: Comprar una residencia + Info: + - 'Uso: /res market buy [residencia]' + - 'Compra la residencia si está a la venta.' + unsell: + Description: Quita la residencia del mercado. + Info: + - 'Uso: /res market unsell [residencia]' + rent: + Description: Alquilar a una residencia + Info: + - 'Uso: /res market rent [residencia] ' + - 'A;quilar a una residencia. Renovacion auto puede ser true (si) o false (no).' + rentable: + Description: Poner en alquiler a una residencia. + Info: + - 'Uso: /res market rentable [residencia] [coste] [días] ' + - 'Pone una residencia en alquiler por [coste] dinero y para cada [días] días. Si es true, el comprador puede renovar automaticámente.' + release: + Description: Quita una residencia del mercado del alquiler. + Info: + - 'Uso: /res market release [residencia]' + - 'Si eres el comprador, paras de alquilar a esa residencia.' + - 'Si eres el propietario, los demás no podrán alquilar la residencia.' + current: + Description: Mostrar la residencia en la cual estás ahora. + Info: + - 'Uso: /res current' + lists: + Description: Listas de permisiones predeterminadas + Info: + - 'Permisiones predeterminadas que puedes ser puestas sobre residencias' + SubCommands: + add: + Description: Añadir una lista + Info: + - 'Uso: /res lists add ' + remove: + Description: Quitar una lista + Info: + - 'Uso: /res lists remove ' + apply: + Description: Aplicar una lista sobre una residencia + Info: + - 'Uso: /res lists apply ' + set: + Description: Establecer un flag + Info: + - 'Uso: /res lists set ' + pset: + Description: Establecer un flag para un jugador + Info: + - 'Uso: /res lists pset ' + gset: + Description: Establecer un flagp para un grupo + Info: + - 'Uso: /res lists gset ' + view: + Description: Ver una lista + Info: + - 'Uso: /res lists view ' + server: + Description: Poner la residencia como apropiada por el servidor (sólo admins) + Info: + - 'Uso: /resadmin server [residencia]' + - 'Poner una residencia apropiada por el servidor.' + setowner: + Description: Cambiar el propietario de una residencia (sólo admins). + Info: + - 'Uso: /resadmin setowner [residencia] [jugador]' + resreload: + Description: Recargar residencias (sólo admins). + Info: + - 'Uso: /resreload' + resload: + Description: Cargar el fichero de residencias (INSEGURO, sólo admins). + Info: + - 'Uso: /resload' + - 'INSEGURO: no guarda las residencias antes.' + - 'Carga las residencias del fichero despues de haber hecho cambios en el fichero.' + version: + Description: Ver la versíon de Residence + Info: + - 'Uso: /res version' \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 8c4122772..afce75ef5 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -169,7 +169,7 @@ public class Residence extends JavaPlugin { public Map deleteConfirm; public Map UnrentConfirm = new HashMap(); public List resadminToggle; - private final static Set validLanguages = new HashSet(Arrays.asList("English", "Czech", "Chinese", "ChineseTW", "French")); + private final static Set validLanguages = new HashSet(Arrays.asList("English", "Czech", "Chinese", "ChineseTW", "French", "Spanish")); private ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); private Map cachedPlayerNameUUIDs = new HashMap(); private WorldEditPlugin wep = null; From cd551303e0faffecde1e44ba354764caf8f39443 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jun 2017 09:39:05 +0300 Subject: [PATCH 0387/1142] Dont remove ender dragon on block break event --- .../bukkit/residence/allNms/v1_9Events.java | 1 + .../bukkit/residence/containers/StuckInfo.java | 1 - .../listeners/ResidenceBlockListener.java | 2 ++ .../listeners/ResidenceEntityListener.java | 15 ++++++++++++--- .../bukkit/residence/text/help/HelpEntry.java | 5 ----- .../bekvon/bukkit/residence/utils/RawMessage.java | 1 - 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index 7e194a8be..a44424f01 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -14,6 +14,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; public class v1_9Events implements Listener { diff --git a/src/com/bekvon/bukkit/residence/containers/StuckInfo.java b/src/com/bekvon/bukkit/residence/containers/StuckInfo.java index 3bdfd4609..bbd9bc45c 100644 --- a/src/com/bekvon/bukkit/residence/containers/StuckInfo.java +++ b/src/com/bekvon/bukkit/residence/containers/StuckInfo.java @@ -34,7 +34,6 @@ public Long getLastTp() { public void updateLastTp() { if (System.currentTimeMillis() - this.lastTp > 1000){ - Debug.D("more than 1000"); this.times = 0; } addTimeTeleported(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 8bbf27557..aa728dc95 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -5,6 +5,8 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 0157b916b..738bb1443 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -8,6 +8,8 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -674,6 +676,7 @@ public void onEntityExplode(EntityExplodeEvent event) { Entity ent = event.getEntity(); Boolean cancel = false; + Boolean remove = true; FlagPermissions perms = plugin.getPermsByLoc(loc); FlagPermissions world = plugin.getWorldFlags().getPerms(loc.getWorld().getName()); @@ -716,9 +719,14 @@ public void onEntityExplode(EntityExplodeEvent event) { if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) cancel = true; break; + case ENDER_DRAGON: + remove = false; + break; default: - if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) + if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) { cancel = true; + remove = false; + } break; } } else if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) { @@ -727,8 +735,9 @@ public void onEntityExplode(EntityExplodeEvent event) { if (cancel) { event.setCancelled(true); - if (ent != null) + if (ent != null && remove) { ent.remove(); + } return; } @@ -767,7 +776,7 @@ public void onEntityExplode(EntityExplodeEvent event) { } continue; case ENDER_DRAGON: - if (!blockperms.has(Flags.dragongrief, false)) + if (blockperms.has(Flags.dragongrief, FlagCombo.OnlyFalse)) preserve.add(block); break; case ENDER_CRYSTAL: diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 4e2b8c41a..999ea84d7 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -142,11 +142,6 @@ private List getHelpData(CommandSender sender, boolean resadmin) { if (!ResidenceCommandListener.getAdminCommands().contains(entry.getName().toLowerCase()) && resadmin) continue; -// if (!sender.hasPermission("residence.command." + entry.getName().toLowerCase())){ -// Debug.D("no perm: " + entry.getName().toLowerCase()); -// continue; -// } - } else { if (GlobalFlags.getFlags().containsKey(entry.getName().toLowerCase())) { Boolean state = GlobalFlags.getFlags().get(entry.getName().toLowerCase()); diff --git a/src/com/bekvon/bukkit/residence/utils/RawMessage.java b/src/com/bekvon/bukkit/residence/utils/RawMessage.java index 4a8726464..31e731b21 100644 --- a/src/com/bekvon/bukkit/residence/utils/RawMessage.java +++ b/src/com/bekvon/bukkit/residence/utils/RawMessage.java @@ -94,7 +94,6 @@ public RawMessage show(Player player) { public RawMessage showClean(Player player) { if (combinedClean.isEmpty()) combineClean(); - Debug.D(combined); player.sendMessage(combined); return this; } From ea04fef23eea1e96e18aa836682133f188bceae9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jun 2017 14:36:18 +0300 Subject: [PATCH 0388/1142] Removing bucket flag from default flags.yml --- src/flags.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/flags.yml b/src/flags.yml index 9eb41ac19..e2b8a4899 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -25,7 +25,6 @@ Global: tp: true ignite: true firespread: true - bucket: true flow: true lavaflow: true waterflow: true @@ -81,9 +80,6 @@ Global: brew: Id: 379 Data: 0 - bucket: - Id: 325 - Data: 0 build: Id: 45 Data: 0 @@ -275,7 +271,6 @@ Global: - tp - build - container - - bucket - move - leash - animalkilling From 087141087293956337dff9a4e536c8bc3de76cb2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jun 2017 18:12:47 +0300 Subject: [PATCH 0389/1142] Fix for residence staying in resl ist after giving to another player General method cleaning and remaking to check by uuid/player insteand of name --- .../bukkit/residence/allNms/v1_9Events.java | 1 - .../bukkit/residence/commands/compass.java | 4 - .../bukkit/residence/commands/create.java | 4 - .../bekvon/bukkit/residence/commands/set.java | 1 - .../residence/containers/ResidencePlayer.java | 71 ++++++++-------- .../residence/containers/StuckInfo.java | 2 - .../residence/economy/TransactionManager.java | 2 +- .../listeners/ResidenceBlockListener.java | 3 +- .../listeners/ResidenceEntityListener.java | 16 +--- .../listeners/ResidencePlayerListener.java | 2 - .../protection/ClaimedResidence.java | 24 +++--- .../residence/protection/PlayerManager.java | 74 ++++++++++++---- .../protection/ResidenceManager.java | 84 +++++++++---------- .../protection/ResidencePermissions.java | 17 +++- .../bukkit/residence/text/help/HelpEntry.java | 1 - .../residence/text/help/InformationPager.java | 1 - .../bukkit/residence/utils/FileCleanUp.java | 1 - 17 files changed, 164 insertions(+), 144 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index a44424f01..7e194a8be 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -14,7 +14,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; public class v1_9Events implements Listener { diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index 56139f4ef..d324cc306 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -1,10 +1,6 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; - import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index f468446f2..7a2171fc1 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -10,11 +9,8 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; public class create implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 891caccea..231cb62fb 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -14,7 +14,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; public class set implements cmd { diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index e95621d70..48d232202 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -1,10 +1,7 @@ package com.bekvon.bukkit.residence.containers; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.UUID; import org.bukkit.Bukkit; @@ -14,6 +11,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { @@ -23,7 +21,7 @@ public class ResidencePlayer { private OfflinePlayer ofPlayer = null; private UUID uuid = null; - private Map ResidenceList = new HashMap(); + private List ResidenceList = new ArrayList(); private ClaimedResidence mainResidence = null; private PlayerGroup groups = null; @@ -71,11 +69,11 @@ public void setMainResidence(ClaimedResidence res) { public ClaimedResidence getMainResidence() { if (mainResidence == null) { - for (Entry one : ResidenceList.entrySet()) { - if (one.getValue() == null) + for (ClaimedResidence one : ResidenceList) { + if (one == null) continue; - if (one.getValue().isMainResidence()) { - mainResidence = one.getValue(); + if (one.isMainResidence()) { + mainResidence = one; return mainResidence; } } @@ -86,10 +84,10 @@ public ClaimedResidence getMainResidence() { return mainResidence; } } - for (Entry one : ResidenceList.entrySet()) { - if (one.getValue() == null) + for (ClaimedResidence one : ResidenceList) { + if (one == null) continue; - mainResidence = one.getValue(); + mainResidence = one; return mainResidence; } } @@ -301,45 +299,48 @@ private void updatePlayer() { public void addResidence(ClaimedResidence residence) { if (residence == null) return; - this.ResidenceList.put(residence.getName().toLowerCase(), residence); + this.ResidenceList.add(residence); } + @Deprecated public void removeResidence(String residence) { - if (residence == null) - return; - residence = residence.toLowerCase(); - this.ResidenceList.remove(residence); + removeResidence(Residence.getInstance().getResidenceManager().getByName(residence)); } - public void renameResidence(String oldResidence, String newResidence) { - if (oldResidence == null) - return; - if (newResidence == null) + public void removeResidence(ClaimedResidence residence) { + if (residence == null) return; - oldResidence = oldResidence.toLowerCase(); - - ClaimedResidence res = ResidenceList.get(oldResidence); - if (res != null) { - removeResidence(oldResidence); - ResidenceList.put(newResidence.toLowerCase(), res); - } + Debug.D("size " + ResidenceList.size()); + boolean s = this.ResidenceList.remove(residence); + Debug.D("size " + ResidenceList.size()); + Debug.D("removing res from " + this.getPlayerName() + " " + residence + " " + s); } +// public void renameResidence(String oldResidence, String newResidence) { +// if (oldResidence == null) +// return; +// if (newResidence == null) +// return; +// oldResidence = oldResidence.toLowerCase(); +// +// ClaimedResidence res = ResidenceList.get(oldResidence); +// if (res != null) { +// removeResidence(oldResidence); +// ResidenceList.put(newResidence.toLowerCase(), res); +// } +// } + public int getResAmount() { return ResidenceList.size(); } public List getResList() { - List temp = new ArrayList(); - for (Entry one : this.ResidenceList.entrySet()) { - temp.add(one.getValue()); - } - return temp; + return ResidenceList; } - public Map getResidenceMap() { - return this.ResidenceList; - } +// public Map getResidenceMap() { +// return this.ResidenceList; +// } public String getPlayerName() { this.updatePlayer(); diff --git a/src/com/bekvon/bukkit/residence/containers/StuckInfo.java b/src/com/bekvon/bukkit/residence/containers/StuckInfo.java index bbd9bc45c..136234f23 100644 --- a/src/com/bekvon/bukkit/residence/containers/StuckInfo.java +++ b/src/com/bekvon/bukkit/residence/containers/StuckInfo.java @@ -2,8 +2,6 @@ import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.utils.Debug; - public class StuckInfo { private Player player; diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 85641ff72..ed514b102 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -220,7 +220,7 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { player.sendMessage(ChatColor.RED + "Error, could not transfer " + amount + " from " + buyerName + " to " + sellerName); return; } - res.getPermissions().setOwner(player.getName(), true); + res.getPermissions().setOwner(player, true); res.getPermissions().applyDefaultFlags(); removeFromSale(res); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index aa728dc95..3bbe286f1 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -5,8 +5,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -62,6 +60,7 @@ public ResidenceBlockListener(Residence residence) { this.plugin = residence; } + @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST) public void onAnvilInventoryClick(InventoryClickEvent e) { Inventory inv = e.getInventory(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 738bb1443..18b265dd8 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -8,8 +8,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; - import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -34,20 +32,8 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.Material; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Creeper; -import org.bukkit.entity.Damageable; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Monster; -import org.bukkit.entity.Projectile; -import org.bukkit.entity.Tameable; -import org.bukkit.entity.Vehicle; -import org.bukkit.entity.Witch; +import org.bukkit.entity.*; import org.bukkit.entity.minecart.HopperMinecart; -import org.bukkit.entity.Slime; -import org.bukkit.entity.Ghast; -import org.bukkit.entity.Hanging; -import org.bukkit.entity.ItemFrame; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index e85e43be2..1ebe5da66 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -34,7 +34,6 @@ import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerBucketFillEvent; @@ -71,7 +70,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index d1137b6c1..4ceff3c28 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -70,7 +70,7 @@ public class ClaimedResidence { protected ResidenceItemList blacklist; protected boolean mainRes = false; protected long createTime = 0L; - + private Long leaseExpireTime = null; protected List cmdWhiteList = new ArrayList(); @@ -444,9 +444,9 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa if (resevent.isCancelled()) return false; - plugin.getResidenceManager().removeChunkList(getName()); + plugin.getResidenceManager().removeChunkList(this); areas.put(name, area); - plugin.getResidenceManager().calculateChunks(getName()); + plugin.getResidenceManager().calculateChunks(this); return true; } @@ -593,10 +593,10 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } } - plugin.getResidenceManager().removeChunkList(getName()); + plugin.getResidenceManager().removeChunkList(this); areas.remove(name); areas.put(name, newarea); - plugin.getResidenceManager().calculateChunks(getName()); + plugin.getResidenceManager().calculateChunks(this); if (player != null) plugin.msg(player, lm.Area_Update); return true; @@ -1343,9 +1343,9 @@ public CuboidArea getCuboidAreabyName(String name) { } public void removeArea(String id) { - plugin.getResidenceManager().removeChunkList(getName()); + plugin.getResidenceManager().removeChunkList(this); areas.remove(id); - plugin.getResidenceManager().calculateChunks(getName()); + plugin.getResidenceManager().calculateChunks(this); } public void removeArea(Player player, String id, boolean resadmin) { @@ -1546,7 +1546,7 @@ public static ClaimedResidence load(String worldName, Map root, if (root.containsKey("LeaveMessage") && root.get("LeaveMessage") instanceof String) res.leaveMessage = (String) root.get("LeaveMessage"); - if (root.containsKey("Messages") && root.get("Messages") instanceof Integer){ + if (root.containsKey("Messages") && root.get("Messages") instanceof Integer) { res.enterMessage = plugin.getResidenceManager().getChacheMessageEnter(worldName, (Integer) root.get("Messages")); res.leaveMessage = plugin.getResidenceManager().getChacheMessageLeave(worldName, (Integer) root.get("Messages")); } @@ -1697,11 +1697,9 @@ public String getName() { } public void remove() { - String name = getName(); - if (name != null) { - plugin.getResidenceManager().removeResidence(name); - plugin.getResidenceManager().removeChunkList(name); - } + plugin.getResidenceManager().removeResidence(this); + plugin.getResidenceManager().removeChunkList(this); + plugin.getPlayerManager().removeResFromPlayer(this); } public ResidenceBank getBank() { diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 0c42f776b..876fa1e8f 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.Collections; -import java.util.Map.Entry; import java.util.TreeMap; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -18,7 +17,6 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.utils.Debug; public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); @@ -60,6 +58,14 @@ public ResidencePlayer playerJoin(Player player) { return resPlayer; } + public ResidencePlayer playerJoin(UUID uuid) { + ResidencePlayer resPlayer = playersUuid.get(uuid); + if (resPlayer != null) { + resPlayer.RecalculatePermissions(); + } + return resPlayer; + } + public ResidencePlayer playerJoin(String player) { if (!players.containsKey(player.toLowerCase())) { ResidencePlayer resPlayer = new ResidencePlayer(player); @@ -168,15 +174,15 @@ public TreeMap getResidencesMap(String player, boolean return temp; } - for (Entry one : resPlayer.getResidenceMap().entrySet()) { - boolean hidden = one.getValue().getPermissions().has(Flags.hidden, false); + for (ClaimedResidence one : resPlayer.getResList()) { + boolean hidden = one.getPermissions().has(Flags.hidden, false); if (!showhidden && hidden) continue; if (onlyHidden && !hidden) continue; - if (world != null && !world.getName().equalsIgnoreCase(one.getValue().getWorld())) + if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) continue; - temp.put(one.getKey(), one.getValue()); + temp.put(one.getName(), one); } return temp; } @@ -260,52 +266,86 @@ public ResidencePlayer getResidencePlayer(String player, boolean recalculate) { return resPlayer; } - public ResidencePlayer getResidencePlayer(String name, UUID uuid) { + public ResidencePlayer getResidencePlayer(UUID uuid) { Player p = Bukkit.getPlayer(uuid); if (p != null) return getResidencePlayer(p); ResidencePlayer resPlayer = null; if (playersUuid.containsKey(uuid)) { resPlayer = playersUuid.get(uuid); - } else if (name != null && players.containsKey(name.toLowerCase())) { - resPlayer = players.get(name.toLowerCase()); } else { - resPlayer = playerJoin(name, uuid); + resPlayer = playerJoin(uuid); } return resPlayer; } - public void renameResidence(String player, String oldName, String newName) { - ResidencePlayer resPlayer = getResidencePlayer(player); + public void addResidence(UUID uuid, ClaimedResidence residence) { + ResidencePlayer resPlayer = getResidencePlayer(uuid); if (resPlayer != null) { - resPlayer.renameResidence(oldName, newName); + resPlayer.addResidence(residence); } return; } + public void addResidence(Player player, ClaimedResidence residence) { + addResidence(player.getUniqueId(), residence); + } + public void addResidence(String player, ClaimedResidence residence) { - ResidencePlayer resPlayer = getResidencePlayer(player, residence.getOwnerUUID()); + ResidencePlayer resPlayer = getResidencePlayer(player); if (resPlayer != null) { resPlayer.addResidence(residence); } return; } - public void removeResFromPlayer(OfflinePlayer player, String residence) { - ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId()); + public void removeResFromPlayer(ClaimedResidence residence) { + if (residence == null) + return; + removeResFromPlayer(residence.getOwnerUUID(), residence); + } + + public void removeResFromPlayer(UUID uuid, ClaimedResidence residence) { + ResidencePlayer resPlayer = playersUuid.get(uuid); if (resPlayer != null) { resPlayer.removeResidence(residence); } } + public void removeResFromPlayer(UUID uuid, String residence) { + ResidencePlayer resPlayer = playersUuid.get(uuid); + if (resPlayer != null) { + resPlayer.removeResidence(plugin.getResidenceManager().getByName(residence)); + } + } + + public void removeResFromPlayer(OfflinePlayer player, ClaimedResidence residence) { + removeResFromPlayer(player.getUniqueId(), residence); + } + + @Deprecated + public void removeResFromPlayer(OfflinePlayer player, String residence) { + removeResFromPlayer(player.getUniqueId(), residence); + } + + public void removeResFromPlayer(Player player, ClaimedResidence residence) { + removeResFromPlayer(player.getUniqueId(), residence); + } + + @Deprecated public void removeResFromPlayer(Player player, String residence) { - ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId()); + removeResFromPlayer(player.getUniqueId(), residence); + } + + public void removeResFromPlayer(String player, ClaimedResidence residence) { + ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); if (resPlayer != null) { resPlayer.removeResidence(residence); } return; } + @Deprecated public void removeResFromPlayer(String player, String residence) { ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); if (resPlayer != null) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 6703e1673..a6ed9fd74 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -38,7 +38,6 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.RawMessage; import com.griefcraft.cache.ProtectionCache; @@ -256,7 +255,7 @@ public boolean addResidence(Player player, String owner, String name, Location l plugin.msg(player, lm.Residence_Create, name); } if (plugin.getConfigManager().useLeases()) { - plugin.getLeaseManager().setExpireTime(player, newRes, group.getLeaseGiveTime()); + plugin.getLeaseManager().setExpireTime(player, newRes, group.getLeaseGiveTime()); } return true; @@ -536,15 +535,15 @@ public void removeResidence(Player player, String name, boolean resadmin) { } } - plugin.getLeaseManager().removeExpireTime(res); + plugin.getLeaseManager().removeExpireTime(res); for (String oneSub : res.getSubzoneList()) { - plugin.getPlayerManager().removeResFromPlayer(res.getOwner(), name + "." + oneSub); + plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), name + "." + oneSub); plugin.getRentManager().removeRentable(name + "." + oneSub); plugin.getTransactionManager().removeFromSale(name + "." + oneSub); } - plugin.getPlayerManager().removeResFromPlayer(res.getOwner(), name); + plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), name); plugin.getRentManager().removeRentable(name); plugin.getTransactionManager().removeFromSale(name); @@ -702,7 +701,7 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) if (res.getSubzonesAmount(false) > 0) plugin.msg(sender, lm.General_TotalSubzones, res.getSubzonesAmount(false), res.getSubzonesAmount(true)); - if (plugin.getConfigManager().useLeases() && plugin.getLeaseManager().leaseExpires(res)) { + if (plugin.getConfigManager().useLeases() && plugin.getLeaseManager().isLeased(res)) { String time = plugin.getLeaseManager().getExpireTime(res); if (time != null) plugin.msg(sender, lm.Economy_LeaseExpire, time); @@ -874,11 +873,12 @@ public HashMap getFlagsCatch() { } return t; } - + private void clearLoadChache() { cacheMessages.clear(); cacheFlags.clear(); - } + } + HashMap> cacheMessages = new HashMap>(); HashMap> cacheFlags = new HashMap>(); @@ -999,7 +999,7 @@ public Map> loadMap(String worldName, Map getResidences() { return residences; } + @Deprecated public void removeChunkList(String name) { if (name == null) return; - name = name.toLowerCase(); - ClaimedResidence res = residences.get(name); - if (res != null) { - String world = res.getWorld(); - if (chunkResidences.get(world) != null) { - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList<>(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - ress.remove(res); - chunkResidences.get(world).put(chunk, ress); - } - } - } + removeChunkList(residences.get(name)); } - public void calculateChunks(String name) { - ClaimedResidence res = null; - - if (name == null) - return; - name = name.toLowerCase(); - res = residences.get(name); - + public void removeChunkList(ClaimedResidence res) { if (res == null) return; - String world = res.getWorld(); - if (chunkResidences.get(world) == null) { - chunkResidences.put(world, new HashMap>()); - } + if (chunkResidences.get(world) == null) + return; for (ChunkRef chunk : getChunks(res)) { List ress = new ArrayList<>(); if (chunkResidences.get(world).containsKey(chunk)) { ress.addAll(chunkResidences.get(world).get(chunk)); } - ress.add(res); + ress.remove(res); chunkResidences.get(world).put(chunk, ress); } + + } + public void calculateChunks(ClaimedResidence res) { + if (res == null) + return; + String world = res.getWorld(); + if (chunkResidences.get(world) == null) { + chunkResidences.put(world, new HashMap>()); + } + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList<>(); + if (chunkResidences.get(world).containsKey(chunk)) { + ress.addAll(chunkResidences.get(world).get(chunk)); + } + ress.add(res); + chunkResidences.get(world).put(chunk, ress); + } + } + + @Deprecated + public void calculateChunks(String name) { + if (name == null) + return; + name = name.toLowerCase(); + calculateChunks(residences.get(name)); } public static final class ChunkRef { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 235d790a2..4c534f4b0 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -483,12 +483,27 @@ public void applyDefaultFlags() { } } + public void setOwner(Player player, boolean resetFlags) { + + ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, player.getName()); + Residence.getInstance().getServ().getPluginManager().callEvent(ownerchange); + + Residence.getInstance().getPlayerManager().removeResFromPlayer(residence.getOwnerUUID(), residence); + Residence.getInstance().getPlayerManager().addResidence(player, residence); + + ownerLastKnownName = player.getName(); + ownerUUID = player.getUniqueId(); + + if (resetFlags) + this.applyDefaultFlags(); + } + public void setOwner(String newOwner, boolean resetFlags) { ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); Residence.getInstance().getServ().getPluginManager().callEvent(ownerchange); - Residence.getInstance().getPlayerManager().removeResFromPlayer(ownerLastKnownName, residence.getName()); + Residence.getInstance().getPlayerManager().removeResFromPlayer(residence.getOwnerUUID(), residence); Residence.getInstance().getPlayerManager().addResidence(newOwner, residence); ownerLastKnownName = newOwner; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 999ea84d7..aa324bb28 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -12,7 +12,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.RawMessage; import java.io.File; diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 58450761e..dc3560fc3 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -13,7 +13,6 @@ import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.RawMessage; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map.Entry; diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 26d76b5f3..45fe06630 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -1,6 +1,5 @@ package com.bekvon.bukkit.residence.utils; -import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; From 68a7a2339c54f5dba172f3beca179853db4ce7b4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jun 2017 20:24:55 +0300 Subject: [PATCH 0390/1142] Bug fix --- .../bekvon/bukkit/residence/Residence.java | 11 +++++-- .../residence/containers/ResidencePlayer.java | 33 +++++++------------ .../residence/protection/PlayerManager.java | 26 +++++++++++++-- .../protection/ResidenceManager.java | 2 +- .../protection/ResidencePermissions.java | 4 ++- 5 files changed, 47 insertions(+), 29 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index afce75ef5..785344173 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1027,7 +1027,6 @@ private void loadEssentialsEconomy() { } } - private void loadRealEconomy() { Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); if (p != null) { @@ -1551,6 +1550,8 @@ public UUID getPlayerUUID(String playername) { } public OfflinePlayer getOfflinePlayer(String Name) { + if (Name == null) + return null; OfflinePlayer offPlayer = OfflinePlayerList.get(Name.toLowerCase()); if (offPlayer != null) return offPlayer; @@ -1588,8 +1589,12 @@ public OfflinePlayer getOfflinePlayer(UUID uuid) { } public void addOfflinePlayerToChache(OfflinePlayer player) { - OfflinePlayerList.put(player.getName().toLowerCase(), player); - cachedPlayerNameUUIDs.put(player.getUniqueId(), player); + if (player == null) + return; + if (player.getName() != null) + OfflinePlayerList.put(player.getName().toLowerCase(), player); + if (player.getUniqueId() != null) + cachedPlayerNameUUIDs.put(player.getUniqueId(), player); } public String getPlayerName(String uuid) { diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 48d232202..ada34bd18 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -33,6 +33,16 @@ public class ResidencePlayer { private int maxValue = 9999; + public ResidencePlayer(OfflinePlayer off) { + if (off == null) + return; + this.uuid = off.getUniqueId(); + this.userName = off.getName(); + Residence.getInstance().addOfflinePlayerToChache(off); + this.updatePlayer(); + this.RecalculatePermissions(); + } + public ResidencePlayer(Player player) { if (player == null) return; @@ -310,26 +320,9 @@ public void removeResidence(String residence) { public void removeResidence(ClaimedResidence residence) { if (residence == null) return; - Debug.D("size " + ResidenceList.size()); - boolean s = this.ResidenceList.remove(residence); - Debug.D("size " + ResidenceList.size()); - Debug.D("removing res from " + this.getPlayerName() + " " + residence + " " + s); + this.ResidenceList.remove(residence); } -// public void renameResidence(String oldResidence, String newResidence) { -// if (oldResidence == null) -// return; -// if (newResidence == null) -// return; -// oldResidence = oldResidence.toLowerCase(); -// -// ClaimedResidence res = ResidenceList.get(oldResidence); -// if (res != null) { -// removeResidence(oldResidence); -// ResidenceList.put(newResidence.toLowerCase(), res); -// } -// } - public int getResAmount() { return ResidenceList.size(); } @@ -338,10 +331,6 @@ public List getResList() { return ResidenceList; } -// public Map getResidenceMap() { -// return this.ResidenceList; -// } - public String getPlayerName() { this.updatePlayer(); return userName; diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 876fa1e8f..81d6a75b3 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -17,6 +17,7 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.utils.Debug; public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); @@ -62,6 +63,12 @@ public ResidencePlayer playerJoin(UUID uuid) { ResidencePlayer resPlayer = playersUuid.get(uuid); if (resPlayer != null) { resPlayer.RecalculatePermissions(); + } else { + OfflinePlayer off = Bukkit.getOfflinePlayer(uuid); + if (off != null) { + resPlayer = new ResidencePlayer(off); + addPlayer(resPlayer); + } } return resPlayer; } @@ -279,6 +286,22 @@ public ResidencePlayer getResidencePlayer(UUID uuid) { return resPlayer; } + public ResidencePlayer getResidencePlayer(String name, UUID uuid) { + Player p = Bukkit.getPlayer(uuid); + if (p != null) { + return getResidencePlayer(p); + } + ResidencePlayer resPlayer = null; + if (this.playersUuid.containsKey(uuid)) { + resPlayer = this.playersUuid.get(uuid); + } else if ((name != null) && (this.players.containsKey(name.toLowerCase()))) { + resPlayer = this.players.get(name.toLowerCase()); + } else { + resPlayer = playerJoin(name, uuid); + } + return resPlayer; + } + public void addResidence(UUID uuid, ClaimedResidence residence) { ResidencePlayer resPlayer = getResidencePlayer(uuid); if (resPlayer != null) { @@ -292,11 +315,10 @@ public void addResidence(Player player, ClaimedResidence residence) { } public void addResidence(String player, ClaimedResidence residence) { - ResidencePlayer resPlayer = getResidencePlayer(player); + ResidencePlayer resPlayer = getResidencePlayer(player, residence.getOwnerUUID()); if (resPlayer != null) { resPlayer.addResidence(residence); } - return; } public void removeResFromPlayer(ClaimedResidence residence) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index a6ed9fd74..8b375edbf 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -999,7 +999,7 @@ public Map> loadMap(String worldName, Map Date: Tue, 20 Jun 2017 10:44:35 +0300 Subject: [PATCH 0391/1142] Better file save optimization --- .../bekvon/bukkit/residence/Residence.java | 4 +- .../protection/ClaimedResidence.java | 4 +- .../residence/protection/FlagPermissions.java | 13 +- .../protection/PermissionListManager.java | 270 +++++++++--------- .../protection/ResidenceManager.java | 93 +++--- .../protection/ResidencePermissions.java | 4 +- src/plugin.yml | 2 +- 7 files changed, 195 insertions(+), 195 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 785344173..402e4b4a4 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1089,8 +1089,8 @@ private void saveYml() throws IOException { World world = server.getWorld(entry.getKey()); if (world != null) yml.getRoot().put("Seed", world.getSeed()); - yml.getRoot().put("LeaveMessage", this.getResidenceManager().getMessageCatch()); - yml.getRoot().put("Flags", this.getResidenceManager().getFlagsCatch()); + yml.getRoot().put("LeaveMessage", this.getResidenceManager().getMessageCatch(entry.getKey())); + yml.getRoot().put("Flags", this.getResidenceManager().getFlagsCatch(entry.getKey())); yml.getRoot().put("Residences", entry.getValue()); yml.save(); if (ymlSaveLoc.isFile()) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 4ceff3c28..e2bea7a0e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1384,7 +1384,7 @@ public Map save() { root.put("CreatedOn", createTime); if (enterMessage != null && leaveMessage != null) { - MinimizeMessages min = plugin.getResidenceManager().addMessageToTempCache(enterMessage, leaveMessage); + MinimizeMessages min = plugin.getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, leaveMessage); if (min == null) { root.put("EnterMessage", enterMessage); root.put("LeaveMessage", leaveMessage); @@ -1433,7 +1433,7 @@ public Map save() { } if (!subzonemap.isEmpty()) root.put("Subzones", subzonemap); - root.put("Permissions", perms.save()); + root.put("Permissions", perms.save(this.getWorld())); if (!this.cmdBlackList.isEmpty()) root.put("cmdBlackList", this.cmdBlackList); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 8e1dacbe5..1c3e4fa31 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -587,31 +587,28 @@ public boolean checkValidFlag(String flag, boolean globalflag) { return false; } - public Map save() { + public Map save(String world) { Map root = new LinkedHashMap<>(); -// root.put("LastKnownPlayerNames", cachedPlayerNameUUIDs); // Putting uuid's to main cache for later save -// Residence.getInstance().addCachedPlayerNameUUIDs(cachedPlayerNameUUIDs); Map playerFlagsClone = new HashMap(); for (Entry> one : playerFlags.entrySet()) { - MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(one.getValue()); + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, one.getValue()); playerFlagsClone.put(one.getKey(), min.getId()); } root.put("PlayerFlags", playerFlagsClone); -// root.put("PlayerFlags", playerFlags); if (!groupFlags.isEmpty()) { Map GroupFlagsClone = new HashMap(); for (Entry> one : groupFlags.entrySet()) { - MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(one.getValue()); + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, one.getValue()); GroupFlagsClone.put(one.getKey(), min.getId()); } root.put("GroupFlags", GroupFlagsClone); } - MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(cuboidFlags); + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, cuboidFlags); if (min == null) { // Cloning map to fix issue for yml anchors being created root.put("AreaFlags", new HashMap(cuboidFlags)); @@ -619,8 +616,6 @@ public Map save() { root.put("AreaFlags", min.getId()); } -// root.put("AreaFlags", new HashMap(cuboidFlags)); - return root; } diff --git a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java index 582a10538..5a9a16356 100644 --- a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java @@ -1,135 +1,135 @@ -package com.bekvon.bukkit.residence.protection; - -import org.bukkit.ChatColor; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.lm; - -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Map.Entry; -import org.bukkit.entity.Player; - -public class PermissionListManager { - - private final Map> lists; - private Residence plugin; - - public PermissionListManager(Residence residence) { - this.plugin = residence; - lists = Collections.synchronizedMap(new HashMap>()); - } - - public FlagPermissions getList(String player, String listname) { - Map get = lists.get(player); - if (get == null) { - return null; - } - return get.get(listname); - } - - public void makeList(Player player, String listname) { - Map get = lists.get(player.getName()); - if (get == null) { - get = new HashMap<>(); - lists.put(player.getName(), get); - } - FlagPermissions perms = get.get(listname); - if (perms == null) { - perms = new FlagPermissions(); - get.put(listname, perms); - plugin.msg(player, lm.General_ListCreate, listname); - } else { - plugin.msg(player,lm.General_ListExists); - } - } - - public void removeList(Player player, String listname) { - Map get = lists.get(player.getName()); - if (get == null) { - plugin.msg(player, lm.Invalid_List); - return; - } - FlagPermissions list = get.get(listname); - if (list == null) { - plugin.msg(player, lm.Invalid_List); - return; - } - get.remove(listname); - plugin.msg(player, lm.General_ListRemoved); - } - - public void applyListToResidence(Player player, String listname, String areaname, boolean resadmin) { - FlagPermissions list = this.getList(player.getName(), listname); - if (list == null) { - plugin.msg(player, lm.Invalid_List); - return; - } - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - res.getPermissions().applyTemplate(player, list, resadmin); - } - - public void printList(Player player, String listname) { - FlagPermissions list = this.getList(player.getName(), listname); - if (list == null) { - plugin.msg(player, lm.Invalid_List); - return; - } - player.sendMessage(ChatColor.LIGHT_PURPLE + "------Permission Template------"); - plugin.msg(player, lm.General_Name, listname); - list.printFlags(player); - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - public Map save() { - Map root = new LinkedHashMap<>(); - for (Entry> players : lists.entrySet()) { - Map saveMap = new LinkedHashMap<>(); - Map map = players.getValue(); - for (Entry list : map.entrySet()) { - saveMap.put(list.getKey(), list.getValue().save()); - } - root.put(players.getKey(), saveMap); - } - return root; - } - - @SuppressWarnings("unchecked") - public PermissionListManager load(Map root) { - - PermissionListManager p = new PermissionListManager(plugin); - if (root != null) { - for (Entry players : root.entrySet()) { - try { - Map value = (Map) players.getValue(); - Map loadedMap = Collections.synchronizedMap(new HashMap()); - for (Entry list : value.entrySet()) { - loadedMap.put(list.getKey(), FlagPermissions.load((Map) list.getValue())); - } - p.lists.put(players.getKey(), loadedMap); - } catch (Exception ex) { - System.out.println("[Residence] - Failed to load permission lists for player: " + players.getKey()); - } - } - } - return p; - } - - public void printLists(Player player) { - StringBuilder sbuild = new StringBuilder(); - Map get = lists.get(player.getName()); - sbuild.append(plugin.msg(lm.General_Lists)); - if (get != null) { - for (Entry thislist : get.entrySet()) { - sbuild.append(thislist.getKey()).append(" "); - } - } - player.sendMessage(sbuild.toString()); - } -} +package com.bekvon.bukkit.residence.protection; + +import org.bukkit.ChatColor; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; + +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; +import org.bukkit.entity.Player; + +public class PermissionListManager { + + private final Map> lists; + private Residence plugin; + + public PermissionListManager(Residence residence) { + this.plugin = residence; + lists = Collections.synchronizedMap(new HashMap>()); + } + + public FlagPermissions getList(String player, String listname) { + Map get = lists.get(player); + if (get == null) { + return null; + } + return get.get(listname); + } + + public void makeList(Player player, String listname) { + Map get = lists.get(player.getName()); + if (get == null) { + get = new HashMap<>(); + lists.put(player.getName(), get); + } + FlagPermissions perms = get.get(listname); + if (perms == null) { + perms = new FlagPermissions(); + get.put(listname, perms); + plugin.msg(player, lm.General_ListCreate, listname); + } else { + plugin.msg(player,lm.General_ListExists); + } + } + + public void removeList(Player player, String listname) { + Map get = lists.get(player.getName()); + if (get == null) { + plugin.msg(player, lm.Invalid_List); + return; + } + FlagPermissions list = get.get(listname); + if (list == null) { + plugin.msg(player, lm.Invalid_List); + return; + } + get.remove(listname); + plugin.msg(player, lm.General_ListRemoved); + } + + public void applyListToResidence(Player player, String listname, String areaname, boolean resadmin) { + FlagPermissions list = this.getList(player.getName(), listname); + if (list == null) { + plugin.msg(player, lm.Invalid_List); + return; + } + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + res.getPermissions().applyTemplate(player, list, resadmin); + } + + public void printList(Player player, String listname) { + FlagPermissions list = this.getList(player.getName(), listname); + if (list == null) { + plugin.msg(player, lm.Invalid_List); + return; + } + player.sendMessage(ChatColor.LIGHT_PURPLE + "------Permission Template------"); + plugin.msg(player, lm.General_Name, listname); + list.printFlags(player); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public Map save() { + Map root = new LinkedHashMap<>(); + for (Entry> players : lists.entrySet()) { + Map saveMap = new LinkedHashMap<>(); + Map map = players.getValue(); + for (Entry list : map.entrySet()) { + saveMap.put(list.getKey(), list.getValue().save(null)); + } + root.put(players.getKey(), saveMap); + } + return root; + } + + @SuppressWarnings("unchecked") + public PermissionListManager load(Map root) { + + PermissionListManager p = new PermissionListManager(plugin); + if (root != null) { + for (Entry players : root.entrySet()) { + try { + Map value = (Map) players.getValue(); + Map loadedMap = Collections.synchronizedMap(new HashMap()); + for (Entry list : value.entrySet()) { + loadedMap.put(list.getKey(), FlagPermissions.load((Map) list.getValue())); + } + p.lists.put(players.getKey(), loadedMap); + } catch (Exception ex) { + System.out.println("[Residence] - Failed to load permission lists for player: " + players.getKey()); + } + } + } + return p; + } + + public void printLists(Player player) { + StringBuilder sbuild = new StringBuilder(); + Map get = lists.get(player.getName()); + sbuild.append(plugin.msg(lm.General_Lists)); + if (get != null) { + for (Entry thislist : get.entrySet()) { + sbuild.append(thislist.getKey()).append(" "); + } + } + player.sendMessage(sbuild.toString()); + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 8b375edbf..93f447b31 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -815,37 +815,33 @@ public Map save() { private void clearSaveChache() { optimizeMessages.clear(); optimizeFlags.clear(); - lastMinimmizeMessageId = 1; - lastMinimmizeFlagsId = 1; } // Optimizing save file - List optimizeMessages = new ArrayList(); - List optimizeFlags = new ArrayList(); -// List optimizePlayerFlags = new ArrayList(); - int lastMinimmizeMessageId = 1; - int lastMinimmizeFlagsId = 1; -// int lastMinimmizePlayerFlagsId = 1; - - public MinimizeMessages addMessageToTempCache(String enter, String leave) { - for (MinimizeMessages one : optimizeMessages) { + HashMap> optimizeMessages = new HashMap>(); + HashMap> optimizeFlags = new HashMap>(); + + public MinimizeMessages addMessageToTempCache(String world, String enter, String leave) { + List ls = optimizeMessages.get(world); + if (ls == null) + ls = new ArrayList(); + for (MinimizeMessages one : ls) { if (!one.add(enter, leave)) continue; -// if (one.getRepeat() < 2) -// return null; return one; } - MinimizeMessages m = new MinimizeMessages(lastMinimmizeMessageId, enter, leave); - optimizeMessages.add(m); - lastMinimmizeMessageId++; + MinimizeMessages m = new MinimizeMessages(ls.size() + 1, enter, leave); + ls.add(m); + optimizeMessages.put(world, ls); return m; } - public HashMap getMessageCatch() { + public HashMap getMessageCatch(String world) { HashMap t = new HashMap(); - for (MinimizeMessages one : optimizeMessages) { -// if (one.getRepeat() == 1) -// continue; + List ls = optimizeMessages.get(world); + if (ls == null) + return t; + for (MinimizeMessages one : ls) { Map root = new HashMap<>(); root.put("EnterMessage", one.getEnter()); root.put("LeaveMessage", one.getLeave()); @@ -854,21 +850,29 @@ public HashMap getMessageCatch() { return t; } - public MinimizeFlags addFlagsTempCache(Map map) { - for (MinimizeFlags one : optimizeFlags) { + public MinimizeFlags addFlagsTempCache(String world, Map map) { + if (world == null) + return null; + List ls = optimizeFlags.get(world); + if (ls == null) + ls = new ArrayList(); + for (MinimizeFlags one : ls) { if (!one.add(map)) continue; return one; } - MinimizeFlags m = new MinimizeFlags(lastMinimmizeFlagsId, map); - optimizeFlags.add(m); - lastMinimmizeFlagsId++; + MinimizeFlags m = new MinimizeFlags(ls.size() + 1, map); + ls.add(m); + optimizeFlags.put(world, ls); return m; } - public HashMap getFlagsCatch() { + public HashMap getFlagsCatch(String world) { HashMap t = new HashMap(); - for (MinimizeFlags one : optimizeFlags) { + List ls = optimizeFlags.get(world); + if (ls == null) + return t; + for (MinimizeFlags one : ls) { t.put(one.getId(), one.getFlags()); } return t; @@ -1183,7 +1187,7 @@ public void removeChunkList(ClaimedResidence res) { return; String world = res.getWorld(); if (chunkResidences.get(world) == null) - return; + return; for (ChunkRef chunk : getChunks(res)) { List ress = new ArrayList<>(); if (chunkResidences.get(world).containsKey(chunk)) { @@ -1194,23 +1198,24 @@ public void removeChunkList(ClaimedResidence res) { } } + public void calculateChunks(ClaimedResidence res) { - if (res == null) - return; - String world = res.getWorld(); - if (chunkResidences.get(world) == null) { - chunkResidences.put(world, new HashMap>()); - } - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList<>(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - ress.add(res); - chunkResidences.get(world).put(chunk, ress); - } - } - + if (res == null) + return; + String world = res.getWorld(); + if (chunkResidences.get(world) == null) { + chunkResidences.put(world, new HashMap>()); + } + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList<>(); + if (chunkResidences.get(world).containsKey(chunk)) { + ress.addAll(chunkResidences.get(world).get(chunk)); + } + ress.add(res); + chunkResidences.get(world).put(chunk, ress); + } + } + @Deprecated public void calculateChunks(String name) { if (name == null) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index c9fcd63f3..51adfe7bc 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -544,8 +544,8 @@ public String getWorld() { } @Override - public Map save() { - Map root = super.save(); + public Map save(String world) { + Map root = super.save(this.world); if (!ownerUUID.toString().equals(Residence.getInstance().getTempUserUUID())) root.put("OwnerUUID", ownerUUID.toString()); root.put("OwnerLastKnownName", ownerLastKnownName); diff --git a/src/plugin.yml b/src/plugin.yml index 846b0e312..ad97ba578 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.6.3.1 +version: 4.7.0.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 40ff5991ed31bc746509cc8100e29e98d7cefeb0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2017 10:52:39 +0300 Subject: [PATCH 0392/1142] Correct way to get main area --- .../bukkit/residence/protection/ClaimedResidence.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e2bea7a0e..69b46f06a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1053,9 +1053,12 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { } public CuboidArea getMainArea() { - CuboidArea area = areas.get("main"); + CuboidArea area = areas.get(this.isSubzone() ? this.getResidenceName() : "main"); if (area == null && !areas.isEmpty()) - area = areas.get(0); + for (Entry one : areas.entrySet()) { + area = one.getValue(); + break; + } return area; } From ac09be0c3d884e1ac24b7025d6c4ecef43f2c89d Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2017 11:07:07 +0300 Subject: [PATCH 0393/1142] yaw and pich is backwards --- .../bukkit/residence/protection/ClaimedResidence.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 69b46f06a..8b9238f99 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1564,10 +1564,10 @@ public static ClaimedResidence load(String worldName, Map root, try { String[] split = tpLoc.split(":"); - if (split.length > 3) - yaw = convertDouble(split[3]); if (split.length > 4) - pitch = convertDouble(split[4]); + yaw = convertDouble(split[4]); + if (split.length > 3) + pitch = convertDouble(split[3]); res.tpLoc = new Location(world, convertDouble(split[0]), convertDouble(split[1]), convertDouble(split[2])); } catch (Exception e) { } From f03c0900ece061aff43c149c36faec5731cebc8f Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2017 11:54:54 +0300 Subject: [PATCH 0394/1142] Make new save mechanic optional --- .../bukkit/residence/ConfigManager.java | 7 +++ .../bekvon/bukkit/residence/Residence.java | 30 ++++++---- .../protection/ClaimedResidence.java | 48 ++++++++++++---- .../residence/protection/FlagPermissions.java | 55 +++++++++++++------ .../protection/ResidenceManager.java | 4 +- 5 files changed, 102 insertions(+), 42 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 07686f397..bfce1ae84 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -77,6 +77,7 @@ public class ConfigManager { protected int chatPrefixLength; protected int leaseCheckInterval; protected int autoSaveInt; + protected boolean NewSaveMechanic; private int ItemPickUpDelay; private boolean AutomaticResidenceCreationCheckCollision; @@ -610,6 +611,8 @@ public void UpdateConfigFile() { c.getW().addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); autoSaveInt = c.get("Global.SaveInterval", 10); + c.getW().addComment("Global.NewSaveMechanic", "New save mechanic can minimize save file couple times and speedup save/load time in general", "Bigger files have bigger impact"); + NewSaveMechanic = c.get("Global.NewSaveMechanic", false); c.getW().addComment("Global.Backup.AutoCleanUp.Use", "Do you want to automaticaly remove backup files from main backup folder if they are older than defined day amount"); @@ -1396,6 +1399,10 @@ public int getAutoSaveInterval() { return autoSaveInt; } + public boolean isNewSaveMechanic() { + return NewSaveMechanic; + } + // backup stuff public boolean BackupAutoCleanUpUse() { return BackupAutoCleanUpUse; diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 402e4b4a4..c5ba6328f 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1089,8 +1089,10 @@ private void saveYml() throws IOException { World world = server.getWorld(entry.getKey()); if (world != null) yml.getRoot().put("Seed", world.getSeed()); - yml.getRoot().put("LeaveMessage", this.getResidenceManager().getMessageCatch(entry.getKey())); - yml.getRoot().put("Flags", this.getResidenceManager().getFlagsCatch(entry.getKey())); + if (this.getResidenceManager().getMessageCatch(entry.getKey()) != null) + yml.getRoot().put("Messages", this.getResidenceManager().getMessageCatch(entry.getKey())); + if (this.getResidenceManager().getFlagsCatch(entry.getKey()) != null) + yml.getRoot().put("Flags", this.getResidenceManager().getFlagsCatch(entry.getKey())); yml.getRoot().put("Residences", entry.getValue()); yml.save(); if (ymlSaveLoc.isFile()) { @@ -1206,16 +1208,18 @@ protected boolean loadYml() throws Exception { yml = new YMLSaveHelper(loadFile); yml.load(); - if (yml.getRoot().containsKey("LeaveMessage")) { + if (yml.getRoot().containsKey("Messages")) { HashMap c = getResidenceManager().getCacheMessages().get(world.getName()); if (c == null) c = new HashMap(); - Map ms = (Map) yml.getRoot().get("LeaveMessage"); - for (Entry one : ms.entrySet()) { - Map msgs = (Map) one.getValue(); - c.put(one.getKey(), new MinimizeMessages(one.getKey(), msgs.get("LeaveMessage"), msgs.get("EnterMessage"))); + Map ms = (Map) yml.getRoot().get("Messages"); + if (ms != null) { + for (Entry one : ms.entrySet()) { + Map msgs = (Map) one.getValue(); + c.put(one.getKey(), new MinimizeMessages(one.getKey(), msgs.get("LeaveMessage"), msgs.get("EnterMessage"))); + } + getResidenceManager().getCacheMessages().put(world.getName(), c); } - getResidenceManager().getCacheMessages().put(world.getName(), c); } if (yml.getRoot().containsKey("Flags")) { @@ -1223,11 +1227,13 @@ protected boolean loadYml() throws Exception { if (c == null) c = new HashMap(); Map ms = (Map) yml.getRoot().get("Flags"); - for (Entry one : ms.entrySet()) { - HashMap msgs = (HashMap) one.getValue(); - c.put(one.getKey(), new MinimizeFlags(one.getKey(), msgs)); + if (ms != null) { + for (Entry one : ms.entrySet()) { + HashMap msgs = (HashMap) one.getValue(); + c.put(one.getKey(), new MinimizeFlags(one.getKey(), msgs)); + } + getResidenceManager().getCacheFlags().put(world.getName(), c); } - getResidenceManager().getCacheFlags().put(world.getName(), c); } worlds.put(world.getName(), yml.getRoot().get("Residences")); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 8b9238f99..4f88da696 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1386,14 +1386,23 @@ public Map save() { if (createTime != 0L) root.put("CreatedOn", createTime); - if (enterMessage != null && leaveMessage != null) { - MinimizeMessages min = plugin.getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, leaveMessage); - if (min == null) { + if (plugin.getConfigManager().isNewSaveMechanic()) { + if (enterMessage != null && leaveMessage != null) { + MinimizeMessages min = plugin.getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, leaveMessage); + if (min == null) { + if (enterMessage != null) + root.put("EnterMessage", enterMessage); + if (leaveMessage != null) + root.put("LeaveMessage", leaveMessage); + } else { + root.put("Messages", min.getId()); + } + } + } else { + if (enterMessage != null) root.put("EnterMessage", enterMessage); + if (leaveMessage != null) root.put("LeaveMessage", leaveMessage); - } else { - root.put("Messages", min.getId()); - } } // if (enterMessage != null) @@ -1425,8 +1434,14 @@ public Map save() { if (!map.isEmpty()) root.put("IgnoreList", map); - for (Entry entry : areas.entrySet()) { - areamap.put(entry.getKey(), entry.getValue().newSave()); + if (plugin.getConfigManager().isNewSaveMechanic()) { + for (Entry entry : areas.entrySet()) { + areamap.put(entry.getKey(), entry.getValue().newSave()); + } + } else { + for (Entry entry : areas.entrySet()) { + areamap.put(entry.getKey(), entry.getValue().save()); + } } root.put("Areas", areamap); @@ -1444,8 +1459,21 @@ public Map save() { root.put("cmdWhiteList", this.cmdWhiteList); if (tpLoc != null) { - root.put("TPLoc", convertDouble(tpLoc.getX()) + ":" + convertDouble(tpLoc.getY()) + ":" + convertDouble(tpLoc.getZ()) + ":" + convertDouble(tpLoc.getPitch()) + ":" + convertDouble(tpLoc - .getYaw())); + if (plugin.getConfigManager().isNewSaveMechanic()) { + root.put("TPLoc", convertDouble(tpLoc.getX()) + ":" + + convertDouble(tpLoc.getY()) + ":" + + convertDouble(tpLoc.getZ()) + ":" + + convertDouble(tpLoc.getPitch()) + ":" + + convertDouble(tpLoc.getYaw())); + } else { + Map tpmap = new HashMap(); + tpmap.put("X", convertDouble(this.tpLoc.getX())); + tpmap.put("Y", convertDouble(this.tpLoc.getY())); + tpmap.put("Z", convertDouble(this.tpLoc.getZ())); + tpmap.put("Pitch", convertDouble(this.tpLoc.getPitch())); + tpmap.put("Yaw", convertDouble(this.tpLoc.getYaw())); + root.put("TPLoc", tpmap); + } } return root; } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 1c3e4fa31..e6fd1f6dc 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -592,33 +592,52 @@ public Map save(String world) { // Putting uuid's to main cache for later save - Map playerFlagsClone = new HashMap(); - for (Entry> one : playerFlags.entrySet()) { - MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, one.getValue()); - playerFlagsClone.put(one.getKey(), min.getId()); - } - root.put("PlayerFlags", playerFlagsClone); - - if (!groupFlags.isEmpty()) { - Map GroupFlagsClone = new HashMap(); - for (Entry> one : groupFlags.entrySet()) { + if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { + Map playerFlagsClone = new HashMap(); + for (Entry> one : playerFlags.entrySet()) { MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, one.getValue()); - GroupFlagsClone.put(one.getKey(), min.getId()); + playerFlagsClone.put(one.getKey(), min.getId()); + } + root.put("PlayerFlags", playerFlagsClone); + + if (!groupFlags.isEmpty()) { + Map GroupFlagsClone = new HashMap(); + for (Entry> one : groupFlags.entrySet()) { + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, one.getValue()); + GroupFlagsClone.put(one.getKey(), min.getId()); + } + root.put("GroupFlags", GroupFlagsClone); + } + + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, cuboidFlags); + if (min == null) { + // Cloning map to fix issue for yml anchors being created + root.put("AreaFlags", new HashMap(cuboidFlags)); + } else { + root.put("AreaFlags", min.getId()); } - root.put("GroupFlags", GroupFlagsClone); - } - MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, cuboidFlags); - if (min == null) { - // Cloning map to fix issue for yml anchors being created - root.put("AreaFlags", new HashMap(cuboidFlags)); } else { - root.put("AreaFlags", min.getId()); + root.put("PlayerFlags", clone(playerFlags)); + if (!groupFlags.isEmpty()) { + root.put("GroupFlags", clone(this.groupFlags)); + } + + // Cloning map to fix issue for yml anchors being created + root.put("AreaFlags", new HashMap(cuboidFlags)); } return root; } + private HashMap> clone(Map> map) { + HashMap> nm = new HashMap>(); + for (Entry> one : map.entrySet()) { + nm.put(one.getKey(), new HashMap(one.getValue())); + } + return nm; + } + public static FlagPermissions load(Map root) throws Exception { FlagPermissions newperms = new FlagPermissions(); return FlagPermissions.load(root, newperms); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 93f447b31..3bb4f02d3 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -840,7 +840,7 @@ public HashMap getMessageCatch(String world) { HashMap t = new HashMap(); List ls = optimizeMessages.get(world); if (ls == null) - return t; + return null; for (MinimizeMessages one : ls) { Map root = new HashMap<>(); root.put("EnterMessage", one.getEnter()); @@ -871,7 +871,7 @@ public HashMap getFlagsCatch(String world) { HashMap t = new HashMap(); List ls = optimizeFlags.get(world); if (ls == null) - return t; + return null; for (MinimizeFlags one : ls) { t.put(one.getId(), one.getFlags()); } From dec3dcc3fecc8bcb2373e0416bd386ac7093f285 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Jun 2017 13:30:17 +0300 Subject: [PATCH 0395/1142] Print all residences when used -a variable --- .../residence/text/help/InformationPager.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index dc3560fc3..9fde9f31d 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -10,6 +10,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.RawMessage; @@ -67,6 +68,12 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap linesForConsole = new ArrayList(); int y = -1; @@ -172,7 +175,7 @@ private void printListWithDelay(final CommandSender sender, final TreeMap= start + 100) break; - if (ownedResidences.size() <= i) + if (ownedResidences.size() < i) break; ClaimedResidence res = resT.getValue(); @@ -215,7 +218,7 @@ private void printListWithDelay(final CommandSender sender, final TreeMap Date: Wed, 21 Jun 2017 14:03:36 +0300 Subject: [PATCH 0396/1142] Allow to print out full residence list into file --- .../bukkit/residence/commands/listall.java | 8 +- .../residence/text/help/InformationPager.java | 93 ++++++++++++++++++- 2 files changed, 96 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index 2509c417e..165877448 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -22,7 +22,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman int page = 1; World world = null; - c : for (int i = 1; i < args.length; i++) { + c: for (int i = 1; i < args.length; i++) { try { page = Integer.parseInt(args[i]); if (page < 1) @@ -35,6 +35,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman page = -1; continue; } + if (args[i].equalsIgnoreCase("-f") && !(sender instanceof Player)) { + page = -2; + continue; + } for (World w : Bukkit.getWorlds()) { if (w.getName().equalsIgnoreCase(args[i])) { @@ -51,7 +55,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman @Override public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "List All Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res listall <-a>", "Lists all residences")); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res listall <-a/-f>", "Lists all residences")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); } } diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 9fde9f31d..5af8e1163 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence.text.help; +import org.apache.commons.io.FileUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -14,7 +15,11 @@ import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.RawMessage; +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Date; import java.util.List; import java.util.Map.Entry; import java.util.TreeMap; @@ -73,7 +78,11 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap linesForConsole = new ArrayList(); int y = -1; for (Entry resT : ownedResidences.entrySet()) { @@ -247,6 +254,86 @@ public void run() { } + private void printListToFile(final TreeMap ownedResidences, final boolean resadmin) { + + Bukkit.getConsoleSender().sendMessage("Saving"); + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + int y = 0; + final StringBuilder sb = new StringBuilder(); + for (Entry resT : ownedResidences.entrySet()) { + y++; + if (ownedResidences.size() < y) + break; + + ClaimedResidence res = resT.getValue(); + StringBuilder StringB = new StringBuilder(); + StringB.append(" " + plugin.msg(lm.General_Owner, res.getOwner())); + String worldInfo = ""; + + if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { + worldInfo += "&6 (&3"; + CuboidArea area = res.getAreaArray()[0]; + worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() + .getBlockZ()); + worldInfo += "&6; &3"; + worldInfo += plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() + .getBlockZ()); + worldInfo += "&6)"; + worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + StringB.append("\n" + worldInfo); + } + + StringB.append("\n " + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); + + String ExtraString = ""; + if (res.isForRent()) { + if (res.isRented()) { + ExtraString = " " + plugin.msg(lm.Residence_IsRented); + StringB.append("\n " + plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); + } else { + ExtraString = " " + plugin.msg(lm.Residence_IsForRent); + } + RentableLand rentable = res.getRentable(); + StringB.append("\n " + plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); + StringB.append("\n " + plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); + StringB.append("\n " + plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); + StringB.append("\n " + plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + } + + if (res.isForSell()) { + ExtraString = " " + plugin.msg(lm.Residence_IsForSale); + StringB.append("\n " + plugin.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); + } + + String msg = plugin.msg(lm.Residence_ResList, y, res.getName(), res.getWorld(), "", ExtraString); + + msg = ChatColor.stripColor(msg + " " + StringB.toString().replace("\n", "")); + msg = msg.replaceAll("\\s{2}", " "); + + sb.append(msg); + sb.append(" \n"); +// sender.sendMessage(msg); + } + + File BackupDir = new File(Residence.getInstance().getDataLocation(), "FullLists"); + if (!BackupDir.isDirectory()) + BackupDir.mkdir(); + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); + File file = new File(BackupDir, dateFormat.format(date) + ".txt"); + try { + FileUtils.writeStringToFile(file, sb.toString(), "UTF-8"); + } catch (IOException e) { + e.printStackTrace(); + } + Bukkit.getConsoleSender().sendMessage("Saved file to FullLists folder with " + file.getName() + " name"); + return; + } + }); + } + public void ShowPagination(CommandSender sender, int pageCount, int CurrentPage, String cmd) { if (!cmd.startsWith("/")) cmd = "/" + cmd; From 5afe906b62e8583974cb641405134740945cfa93 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Jun 2017 14:17:25 +0300 Subject: [PATCH 0397/1142] Version update, small cleanup --- .../bekvon/bukkit/residence/text/help/InformationPager.java | 5 +---- src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 5af8e1163..e9bf2edc5 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -11,7 +11,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.RawMessage; @@ -70,10 +69,8 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, final boolean resadmin) { - + Bukkit.getConsoleSender().sendMessage("Saving"); Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override diff --git a/src/plugin.yml b/src/plugin.yml index ad97ba578..4ad532189 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.0.0 +version: 4.7.0.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From b91237dcdb37fb751e81a390c0302d309710463f Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 23 Jun 2017 17:58:35 +0300 Subject: [PATCH 0398/1142] Remove residence from player residence list by residence object, not name --- .../residence/protection/PlayerManager.java | 26 ------------------- .../protection/ResidenceManager.java | 12 ++++----- 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 81d6a75b3..35ac14418 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -334,31 +334,14 @@ public void removeResFromPlayer(UUID uuid, ClaimedResidence residence) { } } - public void removeResFromPlayer(UUID uuid, String residence) { - ResidencePlayer resPlayer = playersUuid.get(uuid); - if (resPlayer != null) { - resPlayer.removeResidence(plugin.getResidenceManager().getByName(residence)); - } - } - public void removeResFromPlayer(OfflinePlayer player, ClaimedResidence residence) { removeResFromPlayer(player.getUniqueId(), residence); } - @Deprecated - public void removeResFromPlayer(OfflinePlayer player, String residence) { - removeResFromPlayer(player.getUniqueId(), residence); - } - public void removeResFromPlayer(Player player, ClaimedResidence residence) { removeResFromPlayer(player.getUniqueId(), residence); } - @Deprecated - public void removeResFromPlayer(Player player, String residence) { - removeResFromPlayer(player.getUniqueId(), residence); - } - public void removeResFromPlayer(String player, ClaimedResidence residence) { ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); if (resPlayer != null) { @@ -366,13 +349,4 @@ public void removeResFromPlayer(String player, ClaimedResidence residence) { } return; } - - @Deprecated - public void removeResFromPlayer(String player, String residence) { - ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); - if (resPlayer != null) { - resPlayer.removeResidence(residence); - } - return; - } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 3bb4f02d3..da88bc942 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -450,7 +450,7 @@ public void removeResidence(CommandSender sender, String name, boolean resadmin) if (sender instanceof Player) removeResidence((Player) sender, name, resadmin); else - this.removeResidence(null, name, true); + removeResidence(null, name, true); } @SuppressWarnings("deprecation") @@ -537,13 +537,13 @@ public void removeResidence(Player player, String name, boolean resadmin) { plugin.getLeaseManager().removeExpireTime(res); - for (String oneSub : res.getSubzoneList()) { - plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), name + "." + oneSub); - plugin.getRentManager().removeRentable(name + "." + oneSub); - plugin.getTransactionManager().removeFromSale(name + "." + oneSub); + for (ClaimedResidence oneSub : res.getSubzones()) { + plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), oneSub); + plugin.getRentManager().removeRentable(name + "." + oneSub.getResidenceName()); + plugin.getTransactionManager().removeFromSale(name + "." + oneSub.getResidenceName()); } - plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), name); + plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), res); plugin.getRentManager().removeRentable(name); plugin.getTransactionManager().removeFromSale(name); From a3b70128eca3db97023b30bfde9e657bc519d012 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 23 Jun 2017 18:14:33 +0300 Subject: [PATCH 0399/1142] Initialize blacklist class with residence object --- .../residence/containers/ResidencePlayer.java | 6 -- .../residence/itemlist/ResidenceItemList.java | 90 +++++++++---------- .../protection/ClaimedResidence.java | 4 +- 3 files changed, 47 insertions(+), 53 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index ada34bd18..3a71f1f74 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -11,7 +11,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { @@ -312,11 +311,6 @@ public void addResidence(ClaimedResidence residence) { this.ResidenceList.add(residence); } - @Deprecated - public void removeResidence(String residence) { - removeResidence(Residence.getInstance().getResidenceManager().getByName(residence)); - } - public void removeResidence(ClaimedResidence residence) { if (residence == null) return; diff --git a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java index 0ba733e57..198eac12d 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ResidenceItemList.java @@ -1,45 +1,45 @@ -package com.bekvon.bukkit.residence.itemlist; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import java.util.Map; -import org.bukkit.Material; -import org.bukkit.entity.Player; - -public class ResidenceItemList extends ItemList { - ClaimedResidence res; - private Residence plugin; - - public ResidenceItemList(ClaimedResidence parent, ListType type) { - super(type); - res = parent; - } - - private ResidenceItemList(Residence plugin) { - this.plugin = plugin; - - } - - public void playerListChange(Player player, Material mat, boolean resadmin) { - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (resadmin || (res.getPermissions().hasResidencePermission(player, true) && group.itemListAccess())) { - if (super.toggle(mat)) - plugin.msg(player, lm.General_ListMaterialAdd, mat.toString(), type.toString().toLowerCase()); - else - plugin.msg(player, lm.General_ListMaterialRemove, mat.toString(), type.toString().toLowerCase()); - } else { - plugin.msg(player, lm.General_NoPermission); - } - } - - public static ResidenceItemList load(Residence plugin, ClaimedResidence parent, Map map) { - ResidenceItemList newlist = new ResidenceItemList(plugin); - newlist.res = parent; - return (ResidenceItemList) ItemList.load(map, newlist); - } -} +package com.bekvon.bukkit.residence.itemlist; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import java.util.Map; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +public class ResidenceItemList extends ItemList { + ClaimedResidence res; + private Residence plugin; + + public ResidenceItemList(Residence plugin, ClaimedResidence parent, ListType type) { + super(type); + this.plugin = plugin; + res = parent; + } + + private ResidenceItemList(Residence plugin) { + this.plugin = plugin; + } + + public void playerListChange(Player player, Material mat, boolean resadmin) { + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (resadmin || (res.getPermissions().hasResidencePermission(player, true) && group.itemListAccess())) { + if (super.toggle(mat)) + plugin.msg(player, lm.General_ListMaterialAdd, mat.toString(), type.toString().toLowerCase()); + else + plugin.msg(player, lm.General_ListMaterialRemove, mat.toString(), type.toString().toLowerCase()); + } else { + plugin.msg(player, lm.General_NoPermission); + } + } + + public static ResidenceItemList load(Residence plugin, ClaimedResidence parent, Map map) { + ResidenceItemList newlist = new ResidenceItemList(plugin); + newlist.res = parent; + return (ResidenceItemList) ItemList.load(map, newlist); + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 4f88da696..a50789ab3 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -200,8 +200,8 @@ public ClaimedResidence(Residence plugin) { subzones = new HashMap<>(); areas = new HashMap<>(); bank = new ResidenceBank(this); - blacklist = new ResidenceItemList(this, ListType.BLACKLIST); - ignorelist = new ResidenceItemList(this, ListType.IGNORELIST); + blacklist = new ResidenceItemList(plugin, this, ListType.BLACKLIST); + ignorelist = new ResidenceItemList(plugin, this, ListType.IGNORELIST); this.plugin = plugin; } From b1644f7b3ba2281cfd2ea35e52aa41121c3280c5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 23 Jun 2017 19:55:07 +0300 Subject: [PATCH 0400/1142] Missing destroy flag in default CreatorDefault section --- .../bukkit/residence/protection/ResidencePermissions.java | 3 --- src/flags.yml | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 51adfe7bc..447cf7e0d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -9,8 +9,6 @@ import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.utils.Debug; - import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -19,7 +17,6 @@ import java.util.Set; import java.util.UUID; -import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/flags.yml b/src/flags.yml index e2b8a4899..aab86bec7 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -240,6 +240,7 @@ Global: # These are default flags applied to the residence creator of any group. CreatorDefault: build: true + destroy: true move: true use: true ignite: true From cb2cdab5b4843e8a1290ccbdbfb58ed04b770301 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 24 Jun 2017 09:36:04 +0300 Subject: [PATCH 0401/1142] Version increment --- src/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugin.yml b/src/plugin.yml index 4ad532189..df814dc47 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.0.1 +version: 4.7.0.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From ea6c0063529a1cd507649095bf49d49ec82ff0a4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 25 Jun 2017 11:21:59 +0300 Subject: [PATCH 0402/1142] Remove area if residence creation failed due to money insufficiency --- .../bekvon/bukkit/residence/Residence.java | 7 ++++ .../protection/ClaimedResidence.java | 35 ++++++++++++++++++- .../protection/ResidenceManager.java | 8 ++++- 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index c5ba6328f..55df13b62 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -80,6 +80,7 @@ import com.bekvon.bukkit.residence.utils.VersionChecker.Version; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; import com.bekvon.bukkit.residence.text.help.InformationPager; +//import com.bekvon.bukkit.residence.towns.TownManager; import com.earth2me.essentials.Essentials; import com.griefcraft.lwc.LWC; import com.griefcraft.lwc.LWCPlugin; @@ -138,6 +139,7 @@ public class Residence extends JavaPlugin { protected PlayerManager PlayerManager; protected FlagUtil FlagUtilManager; protected ShopSignUtil ShopSignUtilManager; +// private TownManager townManager; protected RandomTp RandomTpManager; protected DynMapManager DynManager; protected Sorting SortingManager; @@ -483,6 +485,7 @@ public void onEnable() { PlayerManager = new PlayerManager(this); ShopSignUtilManager = new ShopSignUtil(this); RandomTpManager = new RandomTp(this); +// townManager = new TownManager(this); InformationPagerManager = new InformationPager(this); @@ -1794,4 +1797,8 @@ public static Residence getInstance() { public String getPrefix() { return prefix; } + +// public TownManager getTownManager() { +// return townManager; +// } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index a50789ab3..638e9b78d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -26,6 +26,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.towns.Town; import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.RawMessage; @@ -71,6 +72,8 @@ public class ClaimedResidence { protected boolean mainRes = false; protected long createTime = 0L; + private Town town = null; + private Long leaseExpireTime = null; protected List cmdWhiteList = new ArrayList(); @@ -1380,12 +1383,18 @@ public Map save() { Map root = new HashMap<>(); Map areamap = new HashMap<>(); -// root.put("CapitalizedName", resName); if (mainRes) root.put("MainResidence", mainRes); if (createTime != 0L) root.put("CreatedOn", createTime); + if (this.getTown() != null && !this.isSubzone()) { + if (this.getTown().getMainResidence().equals(this)) + root.put("TownCap", this.getTown().getTownName()); + else + root.put("Town", this.getTown().getTownName()); + } + if (plugin.getConfigManager().isNewSaveMechanic()) { if (enterMessage != null && leaveMessage != null) { MinimizeMessages min = plugin.getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, leaveMessage); @@ -1528,6 +1537,22 @@ public static ClaimedResidence load(String worldName, Map root, if (res.getPermissions().getOwnerLastKnownName() == null) return null; +// if (root.containsKey("TownCap")) { +// String townName = (String) root.get("TownCap"); +// Town t = plugin.getTownManager().getTown(townName); +// if (t == null) +// t = plugin.getTownManager().addTown(townName, res); +// else +// t.setMainResidence(res); +// res.setTown(t); +// } else if (root.containsKey("Town")) { +// String townName = (String) root.get("Town"); +// Town t = plugin.getTownManager().getTown(townName); +// if (t == null) +// t = plugin.getTownManager().addTown(townName); +// res.setTown(t); +// } + if (root.containsKey("MainResidence")) res.mainRes = (Boolean) root.get("MainResidence"); @@ -1873,4 +1898,12 @@ public Long getLeaseExpireTime() { public void setLeaseExpireTime(Long leaseExpireTime) { this.leaseExpireTime = leaseExpireTime; } + + public Town getTown() { + return town; + } + + public void setTown(Town town) { + this.town = town; + } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index da88bc942..7f74bb16b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; @@ -38,6 +39,8 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.towns.Town; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.RawMessage; import com.griefcraft.cache.ProtectionCache; @@ -236,8 +239,11 @@ public boolean addResidence(Player player, String owner, String name, Location l if (!newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { double chargeamount = Math.ceil(newArea.getSize() * group.getCostPerBlock()); - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)){ + // Need to remove area if we can't create residence + newRes.removeArea("main"); return false; + } } residences.put(name.toLowerCase(), newRes); From d1abf14dcf6a45457b659c8f777156c7abdf35c1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 25 Jun 2017 11:23:20 +0300 Subject: [PATCH 0403/1142] Version increment --- src/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugin.yml b/src/plugin.yml index df814dc47..699dd6ad7 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.0.2 +version: 4.7.0.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 826ce35323cf66c42d421a69df637cafdbd42603 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 25 Jun 2017 12:11:47 +0300 Subject: [PATCH 0404/1142] Prevent issues with older versions on paperspigot --- .../bukkit/residence/listeners/ResidenceBlockListener.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 3bbe286f1..94c984a8c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -64,8 +64,13 @@ public ResidenceBlockListener(Residence residence) { @EventHandler(priority = EventPriority.LOWEST) public void onAnvilInventoryClick(InventoryClickEvent e) { Inventory inv = e.getInventory(); - if (inv == null || inv.getType() != InventoryType.ANVIL || e.getInventory().getLocation() == null) + + try { + if (inv == null || inv.getType() != InventoryType.ANVIL || e.getInventory().getLocation() == null) + return; + } catch (Exception | NoSuchMethodError ex) { return; + } Block b = e.getInventory().getLocation().getBlock(); if (b == null || b.getType() != Material.ANVIL) return; From c097299fc1bfd738989312fd394abbef01520485 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 25 Jun 2017 13:41:34 +0300 Subject: [PATCH 0405/1142] Back to names --- .../bukkit/residence/ConfigManager.java | 18 ++++++++++++ .../bukkit/residence/commands/check.java | 2 ++ .../bukkit/residence/commands/info.java | 6 ++++ .../listeners/ResidencePlayerListener.java | 2 +- .../protection/ClaimedResidence.java | 14 ++++----- .../protection/ResidenceManager.java | 29 +++++++++---------- 6 files changed, 48 insertions(+), 23 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index bfce1ae84..5809921e7 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -159,6 +159,10 @@ public class ConfigManager { protected boolean DisableListeners; protected boolean DisableCommands; + //Town +// private boolean TownEnabled = false; +// private int TownMinRange = 0; + // protected boolean DisableNoFlagMessageUse; // protected List DisableNoFlagMessageWorlds = new ArrayList(); @@ -755,6 +759,12 @@ public void UpdateConfigFile() { c.getW().addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); enableRentSystem = c.get("Global.EnableRentSystem", true); +// TownEnabled = c.get("Global.Town.Enabled", true); +// c.getW().addComment("Global.Town.MinRange", "Range between residences","Protects from building residence near another residence if owner not belonging to same town"); +// TownMinRange = c.get("Global.Town.MinRange", 16); + + + c.getW().addComment("Global.Rent.PreventRemoval", "Prevents residence/subzone removal if its subzone is still rented by some one"); RentPreventRemoval = c.get("Global.Rent.PreventRemoval", true); c.getW().addComment("Global.Rent.Inform.OnEnding", "Informs players on rent time ending"); @@ -1740,4 +1750,12 @@ public int getItemPickUpDelay() { public boolean isAutomaticResidenceCreationCheckCollision() { return AutomaticResidenceCreationCheckCollision; } + +// public int getTownMinRange() { +// return TownMinRange; +// } +// +// public boolean isTownEnabled() { +// return TownEnabled; +// } } diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index bb681afca..03aebe9f3 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -12,6 +12,7 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; public class check implements cmd { @@ -34,6 +35,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Invalid_Residence); return true; } + if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { plugin.msg(player, lm.Flag_CheckFalse, args[2], pname, args[1]); } else { diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index c4f801518..d39139b70 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -12,6 +12,7 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; public class info implements cmd { @@ -24,6 +25,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { plugin.getResidenceManager().printAreaInfo(res.getName(), sender, resadmin); + + + Debug.D("cleaning"); + + plugin.getResidenceManager().removeResidence(res); } else { plugin.msg(sender, lm.Invalid_Residence); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 1ebe5da66..033ed77b5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -377,7 +377,7 @@ public void onFlagChangeWSpeed(ResidenceDeleteEvent event) { for (Player one : event.getResidence().getPlayersInResidence()) one.resetPlayerWeather(); - if (res.getPermissions().playerHas(event.getPlayer(), Flags.fly, FlagCombo.OnlyTrue)) + if (event.getPlayer() != null && res.getPermissions().playerHas(event.getPlayer(), Flags.fly, FlagCombo.OnlyTrue)) for (Player one : event.getResidence().getPlayersInResidence()) fly(one, false); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 638e9b78d..739b842b1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -447,9 +447,9 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa if (resevent.isCancelled()) return false; - plugin.getResidenceManager().removeChunkList(this); + plugin.getResidenceManager().removeChunkList(this.getName()); areas.put(name, area); - plugin.getResidenceManager().calculateChunks(this); + plugin.getResidenceManager().calculateChunks(this.getName()); return true; } @@ -596,10 +596,10 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } } - plugin.getResidenceManager().removeChunkList(this); + plugin.getResidenceManager().removeChunkList(this.getName()); areas.remove(name); areas.put(name, newarea); - plugin.getResidenceManager().calculateChunks(this); + plugin.getResidenceManager().calculateChunks(this.getName()); if (player != null) plugin.msg(player, lm.Area_Update); return true; @@ -1349,9 +1349,9 @@ public CuboidArea getCuboidAreabyName(String name) { } public void removeArea(String id) { - plugin.getResidenceManager().removeChunkList(this); + plugin.getResidenceManager().removeChunkList(this.getName()); areas.remove(id); - plugin.getResidenceManager().calculateChunks(this); + plugin.getResidenceManager().calculateChunks(this.getName()); } public void removeArea(Player player, String id, boolean resadmin) { @@ -1754,7 +1754,7 @@ public String getName() { public void remove() { plugin.getResidenceManager().removeResidence(this); - plugin.getResidenceManager().removeChunkList(this); + plugin.getResidenceManager().removeChunkList(this.getName()); plugin.getPlayerManager().removeResFromPlayer(this); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 7f74bb16b..a8e3980ce 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -239,7 +239,7 @@ public boolean addResidence(Player player, String owner, String name, Location l if (!newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { double chargeamount = Math.ceil(newArea.getSize() * group.getCostPerBlock()); - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)){ + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { // Need to remove area if we can't create residence newRes.removeArea("main"); return false; @@ -462,6 +462,7 @@ public void removeResidence(CommandSender sender, String name, boolean resadmin) @SuppressWarnings("deprecation") public void removeResidence(Player player, String name, boolean resadmin) { + Debug.D("removing " + name); ClaimedResidence res = this.getByName(name); if (res == null) { plugin.msg(player, lm.Invalid_Residence); @@ -1180,32 +1181,38 @@ public Map getResidences() { return residences; } - @Deprecated public void removeChunkList(String name) { if (name == null) return; name = name.toLowerCase(); - removeChunkList(residences.get(name)); - } - - public void removeChunkList(ClaimedResidence res) { + ClaimedResidence res = residences.get(name); if (res == null) return; String world = res.getWorld(); if (chunkResidences.get(world) == null) return; + Debug.D("removing chunks " + res.getName() + " " + chunkResidences.get(world).size()); for (ChunkRef chunk : getChunks(res)) { List ress = new ArrayList<>(); if (chunkResidences.get(world).containsKey(chunk)) { + Debug.D("Contains chunk"); ress.addAll(chunkResidences.get(world).get(chunk)); } + + Debug.D("r " + ress.size()); ress.remove(res); + Debug.D("z " + ress.size()); chunkResidences.get(world).put(chunk, ress); } + Debug.D("removing chunks " + res.getName() + " " + chunkResidences.get(world).size()); } - public void calculateChunks(ClaimedResidence res) { + public void calculateChunks(String name) { + if (name == null) + return; + name = name.toLowerCase(); + ClaimedResidence res = residences.get(name); if (res == null) return; String world = res.getWorld(); @@ -1222,14 +1229,6 @@ public void calculateChunks(ClaimedResidence res) { } } - @Deprecated - public void calculateChunks(String name) { - if (name == null) - return; - name = name.toLowerCase(); - calculateChunks(residences.get(name)); - } - public static final class ChunkRef { public static int getChunkCoord(final int val) { From 61474220365e14958a2bd8e30466bbe8c73ccecc Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 26 Jun 2017 11:34:46 +0300 Subject: [PATCH 0406/1142] Allow to give residence including subzones with -s variable Check for NPE --- .../bukkit/residence/commands/check.java | 2 -- .../bukkit/residence/commands/give.java | 13 +++++++--- .../bukkit/residence/commands/info.java | 6 ----- .../residence/containers/ResidencePlayer.java | 8 +++++- .../protection/ResidenceManager.java | 26 +++++++++++-------- .../protection/ResidencePermissions.java | 3 ++- 6 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index 03aebe9f3..bb681afca 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -12,7 +12,6 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; public class check implements cmd { @@ -35,7 +34,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Invalid_Residence); return true; } - if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { plugin.msg(player, lm.Flag_CheckFalse, args[2], pname, args[1]); } else { diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index 024135607..a46359a3f 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -21,17 +21,24 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Player player = (Player) sender; - if (args.length != 3) + boolean includeSubzones = false; + + if (args.length != 3 && args.length != 4) return false; - plugin.getResidenceManager().giveResidence(player, args[2], args[1], resadmin); + for (String one : args) { + if (one.equalsIgnoreCase("-s")) + includeSubzones = true; + } + + plugin.getResidenceManager().giveResidence(player, args[2], args[1], resadmin, includeSubzones); return true; } @Override public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Give residence to player."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res give [player]", "Gives your owned residence to target player")); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res give [player] <-s>", "Gives your owned residence to target player")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index d39139b70..c4f801518 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -12,7 +12,6 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; public class info implements cmd { @@ -25,11 +24,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { plugin.getResidenceManager().printAreaInfo(res.getName(), sender, resadmin); - - - Debug.D("cleaning"); - - plugin.getResidenceManager().removeResidence(res); } else { plugin.msg(sender, lm.Invalid_Residence); } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 3a71f1f74..c5a74b1f9 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -318,7 +318,13 @@ public void removeResidence(ClaimedResidence residence) { } public int getResAmount() { - return ResidenceList.size(); + int i = 0; + for (ClaimedResidence one : ResidenceList) { + if (one.isSubzone()) + continue; + i++; + } + return i; } public List getResList() { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index a8e3980ce..4fad5dc4c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; @@ -39,8 +38,6 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.towns.Town; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.RawMessage; import com.griefcraft.cache.ProtectionCache; @@ -462,7 +459,6 @@ public void removeResidence(CommandSender sender, String name, boolean resadmin) @SuppressWarnings("deprecation") public void removeResidence(Player player, String name, boolean resadmin) { - Debug.D("removing " + name); ClaimedResidence res = this.getByName(name); if (res == null) { plugin.msg(player, lm.Invalid_Residence); @@ -1106,13 +1102,21 @@ public boolean renameResidence(Player player, String oldName, String newName, bo } public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { - ClaimedResidence res = getByName(residence); + giveResidence(reqPlayer, targPlayer, residence, resadmin, false); + } + + public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin, boolean includeSubzones) { + giveResidence(reqPlayer, targPlayer, getByName(residence), resadmin, includeSubzones); + } + + public void giveResidence(Player reqPlayer, String targPlayer, ClaimedResidence res, boolean resadmin, boolean includeSubzones) { + if (res == null) { plugin.msg(reqPlayer, lm.Invalid_Residence); return; } - residence = res.getName(); + String residence = res.getName(); if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { plugin.msg(reqPlayer, lm.General_NoPermission); @@ -1150,6 +1154,11 @@ public void giveResidence(Player reqPlayer, String targPlayer, String residence, // Fix phrases here plugin.msg(reqPlayer, lm.Residence_Give, residence, giveplayer.getName()); plugin.msg(giveplayer, lm.Residence_Recieve, residence, reqPlayer.getName()); + + if (includeSubzones) + for (ClaimedResidence one : res.getSubzones()) { + giveResidence(reqPlayer, targPlayer, one, resadmin, includeSubzones); + } } public void removeAllFromWorld(CommandSender sender, String world) { @@ -1191,20 +1200,15 @@ public void removeChunkList(String name) { String world = res.getWorld(); if (chunkResidences.get(world) == null) return; - Debug.D("removing chunks " + res.getName() + " " + chunkResidences.get(world).size()); for (ChunkRef chunk : getChunks(res)) { List ress = new ArrayList<>(); if (chunkResidences.get(world).containsKey(chunk)) { - Debug.D("Contains chunk"); ress.addAll(chunkResidences.get(world).get(chunk)); } - Debug.D("r " + ress.size()); ress.remove(res); - Debug.D("z " + ress.size()); chunkResidences.get(world).put(chunk, ress); } - Debug.D("removing chunks " + res.getName() + " " + chunkResidences.get(world).size()); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 447cf7e0d..3fde5bb52 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -99,8 +99,9 @@ public boolean playerHas(Player player, Flags flag, FlagCombo f) { @Override public boolean playerHas(Player player, String world, Flags flag, boolean def) { + if (player == null) + return false; ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag.getName(), FlagType.PLAYER, player.getName(), def); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isOverriden()) return fc.getOverrideValue(); From 2744c1d627ab73bb50dc85f7e77b3047f01fbe16 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 26 Jun 2017 11:42:36 +0300 Subject: [PATCH 0407/1142] Exclude subzones when addind residence to list version increment --- src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java | 2 ++ src/plugin.yml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index c5a74b1f9..0990cf55e 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -308,6 +308,8 @@ private void updatePlayer() { public void addResidence(ClaimedResidence residence) { if (residence == null) return; + if (residence.isSubzone()) + return; this.ResidenceList.add(residence); } diff --git a/src/plugin.yml b/src/plugin.yml index 699dd6ad7..6c62e49b3 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.0.3 +version: 4.7.0.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From e0866a2f6b845f784a7cf09a4d06c0f470abc582 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 4 Jul 2017 18:15:27 +0300 Subject: [PATCH 0408/1142] Reload grouped flags on /res reload flags command --- src/com/bekvon/bukkit/residence/ConfigManager.java | 2 +- src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 5809921e7..b8cb5b7e1 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -252,7 +252,6 @@ public ConfigManager(Residence plugin) { globalGroupDefaults = new HashMap(); UpdateConfigFile(); this.loadFlags(); - this.loadGroups(); } public static String Colors(String text) { @@ -1106,6 +1105,7 @@ public void loadFlags() { FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", flags.getConfigurationSection("Global")); globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", flags.getConfigurationSection("Global")); + loadGroups(); } public void loadGroups() { diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 0990cf55e..7a0571812 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -308,6 +308,7 @@ private void updatePlayer() { public void addResidence(ClaimedResidence residence) { if (residence == null) return; + // Exclude subzones if (residence.isSubzone()) return; this.ResidenceList.add(residence); From dd17fc7a689988a38109d0f1d6421a503f01eb43 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 4 Jul 2017 18:23:13 +0300 Subject: [PATCH 0409/1142] Disable flags on quit event to prevent left over states --- .../listeners/ResidencePlayerListener.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 033ed77b5..e0c3da5a0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -364,7 +364,7 @@ public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onFlagChangeWSpeed(ResidenceDeleteEvent event) { + public void onResidenceDeleteEvent(ResidenceDeleteEvent event) { if (event.isCancelled()) return; @@ -386,6 +386,28 @@ public void onFlagChangeWSpeed(ResidenceDeleteEvent event) { one.setGlowing(false); } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerQuitEvent(PlayerQuitEvent event) { + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation()); + + if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + for (Player one : res.getPlayersInResidence()) + one.setWalkSpeed(0.2F); + + if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + for (Player one : res.getPlayersInResidence()) + one.resetPlayerWeather(); + + if (event.getPlayer() != null && res.getPermissions().playerHas(event.getPlayer(), Flags.fly, FlagCombo.OnlyTrue)) + for (Player one : res.getPlayersInResidence()) + fly(one, false); + + if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) + for (Player one : res.getPlayersInResidence()) + one.setGlowing(false); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeWSpeed(ResidenceFlagChangeEvent event) { if (event.isCancelled()) From da8c6d10cace13b2ada5aa39d2b671ad1d5f5cdf Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 4 Jul 2017 18:24:27 +0300 Subject: [PATCH 0410/1142] One player, not all of them... --- .../listeners/ResidencePlayerListener.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index e0c3da5a0..c2b5e5c3e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -389,23 +389,20 @@ public void onResidenceDeleteEvent(ResidenceDeleteEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerQuitEvent(PlayerQuitEvent event) { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation()); + Player player = event.getPlayer(); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - for (Player one : res.getPlayersInResidence()) - one.setWalkSpeed(0.2F); + player.setWalkSpeed(0.2F); if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) - for (Player one : res.getPlayersInResidence()) - one.resetPlayerWeather(); + player.resetPlayerWeather(); if (event.getPlayer() != null && res.getPermissions().playerHas(event.getPlayer(), Flags.fly, FlagCombo.OnlyTrue)) - for (Player one : res.getPlayersInResidence()) - fly(one, false); + fly(player, false); if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) - for (Player one : res.getPlayersInResidence()) - one.setGlowing(false); + player.setGlowing(false); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) From f936f167a3788602362d98238963bd019782b747 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 7 Jul 2017 18:01:40 +0300 Subject: [PATCH 0411/1142] Misspell fix --- src/com/bekvon/bukkit/residence/ConfigManager.java | 2 +- src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index b8cb5b7e1..ddbe8b29b 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -408,7 +408,7 @@ public void UpdateConfigFile() { c.getW().addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); SelectionIgnoreY = c.get("Global.Selection.IgnoreY", false); c.getW().addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", - "This will lower residence price by up to 256 times, so ajust block price BEFORE enabling this"); + "This will lower residence price by up to 256 times, so adjust block price BEFORE enabling this"); NoCostForYBlocks = c.get("Global.Selection.NoCostForYBlocks", false); c.getW().addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java index 3044dfb70..20a314a13 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java @@ -53,6 +53,8 @@ public boolean isIgnored(Material mat, String group, String world) { private void readLists() { FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); + if (!flags.isConfigurationSection("ItemList")) + return; Set keys = flags.getConfigurationSection("ItemList").getKeys(false); if (keys != null) { for (String key : keys) { From 546ab61ce437809bea322833fe61f77a97d67b47 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 7 Jul 2017 18:36:13 +0300 Subject: [PATCH 0412/1142] fire residence change on teleportation --- .../listeners/ResidencePlayerListener.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c2b5e5c3e..17ef19649 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -70,6 +70,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; @@ -392,6 +393,9 @@ public void onPlayerQuitEvent(PlayerQuitEvent event) { Player player = event.getPlayer(); ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) + return; + if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) player.setWalkSpeed(0.2F); @@ -1851,8 +1855,9 @@ public void run() { if (info != null && info.getTimesTeleported() > 5) { Location newLoc = res.getOutsideFreeLoc(loc, player); player.teleport(newLoc); - } else + } else { player.teleport(lastLoc); + } } else { Location newLoc = res.getOutsideFreeLoc(loc, player); player.teleport(newLoc); @@ -1931,6 +1936,22 @@ public void run() { } } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerTeleportEvent(PlayerTeleportEvent event) { + + Location from = event.getFrom(); + Location to = event.getTo(); + + ClaimedResidence fromRes = plugin.getResidenceManager().getByLoc(from); + ClaimedResidence toRes = plugin.getResidenceManager().getByLoc(to); + + if (fromRes != null && toRes != null && fromRes.equals(toRes)) + return; + + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(fromRes, toRes, event.getPlayer()); + plugin.getServ().getPluginManager().callEvent(chgEvent); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { @@ -1968,7 +1989,11 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res.getName(), res, message)); } } - if (!(from != null && res == from.getParent())) { + + if (from == null || res == null) + return; + + if (!(res == from.getParent())) { if (plugin.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (plugin.getRentManager().isForRent(from) || plugin .getTransactionManager().isForSale(from))) { if (plugin.getRentManager().isForRent(from) && !plugin.getRentManager().isRented(from)) { From 6ce21627dcd42aa8699e02533c213177c40cf85b Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 7 Jul 2017 18:44:28 +0300 Subject: [PATCH 0413/1142] Count in blocked command capitalization --- .../listeners/ResidencePlayerListener.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 17ef19649..ab09984dd 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -547,24 +547,26 @@ public void onCommand(PlayerCommandPreprocessEvent event) { if (player.hasPermission("residence.flag.command.bypass")) return; - String msg = event.getMessage().replace(" ", "_"); + String msg = event.getMessage().replace(" ", "_").toLowerCase(); int white = 0; int black = 0; for (String oneWhite : res.getCmdWhiteList()) { - if (msg.startsWith("/" + oneWhite)) { - if (oneWhite.contains("_") && oneWhite.split("_").length > white) - white = oneWhite.split("_").length; + String t = oneWhite.toLowerCase(); + if (msg.startsWith("/" + t)) { + if (t.contains("_") && t.split("_").length > white) + white = t.split("_").length; else if (white == 0) white = 1; } } for (String oneBlack : res.getCmdBlackList()) { - if (msg.startsWith("/" + oneBlack)) { + String t = oneBlack.toLowerCase(); + if (msg.startsWith("/" + t)) { if (msg.contains("_")) - black = oneBlack.split("_").length; + black = t.split("_").length; else black = 1; break; @@ -573,7 +575,8 @@ else if (white == 0) if (black == 0) for (String oneBlack : res.getCmdBlackList()) { - if (oneBlack.equalsIgnoreCase("*")) { + String t = oneBlack.toLowerCase(); + if (t.equalsIgnoreCase("*")) { if (msg.contains("_")) black = msg.split("_").length; break; @@ -1989,10 +1992,10 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res.getName(), res, message)); } } - + if (from == null || res == null) return; - + if (!(res == from.getParent())) { if (plugin.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (plugin.getRentManager().isForRent(from) || plugin .getTransactionManager().isForSale(from))) { From aca0b0974c907c351bc7ca52ee05fc1992cfd9b2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 7 Jul 2017 19:06:23 +0300 Subject: [PATCH 0414/1142] Enter leave messages backwards on new save system... --- .../bekvon/bukkit/residence/Residence.java | 2 +- .../listeners/ResidencePlayerListener.java | 30 ++++++++++--------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 55df13b62..2e18d80f5 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1219,7 +1219,7 @@ protected boolean loadYml() throws Exception { if (ms != null) { for (Entry one : ms.entrySet()) { Map msgs = (Map) one.getValue(); - c.put(one.getKey(), new MinimizeMessages(one.getKey(), msgs.get("LeaveMessage"), msgs.get("EnterMessage"))); + c.put(one.getKey(), new MinimizeMessages(one.getKey(), msgs.get("EnterMessage"), msgs.get("LeaveMessage"))); } getResidenceManager().getCacheMessages().put(world.getName(), c); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ab09984dd..477a63e30 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1581,19 +1581,22 @@ private void fly(Player player, boolean state) { if (player.hasPermission("residence.flybypass")) return; if (!state) { + boolean land = player.isFlying(); player.setFlying(state); player.setAllowFlight(state); - Location loc = getSafeLocation(player.getLocation()); - if (loc == null) { - // get defined land location in case no safe landing spot are found - loc = plugin.getConfigManager().getFlyLandLocation(); + if (land) { + Location loc = getSafeLocation(player.getLocation()); if (loc == null) { - // get main world spawn location in case valid location is not found - loc = Bukkit.getWorlds().get(0).getSpawnLocation(); + // get defined land location in case no safe landing spot are found + loc = plugin.getConfigManager().getFlyLandLocation(); + if (loc == null) { + // get main world spawn location in case valid location is not found + loc = Bukkit.getWorlds().get(0).getSpawnLocation(); + } } + if (loc != null) + player.teleport(loc); } - if (loc != null) - player.teleport(loc); } else { player.setAllowFlight(state); } @@ -1978,18 +1981,17 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { message = to.getEnterMessage(); res = to; } - Player player = event.getPlayer(); if (message != null) { if (plugin.getConfigManager().useTitleMessage()) { - plugin.getAB().sendTitle(player, ChatColor.YELLOW + insertMessages(player, res.getName(), res, message)); + plugin.getAB().sendTitle(player, ChatColor.YELLOW + insertMessages(player, res, message)); } if (plugin.getConfigManager().useActionBar()) { - plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res.getName(), res, message)) + plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) .toString()); } else { - plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res.getName(), res, message)); + plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res, message)); } } @@ -2026,11 +2028,11 @@ private StuckInfo updateStuckTeleport(Player player, Location loc) { return info; } - public String insertMessages(Player player, String areaname, ClaimedResidence res, String message) { + public String insertMessages(Player player, ClaimedResidence res, String message) { try { message = message.replaceAll("%player", player.getName()); message = message.replaceAll("%owner", res.getPermissions().getOwner()); - message = message.replaceAll("%residence", areaname); + message = message.replaceAll("%residence", res.getName()); } catch (Exception ex) { return ""; } From f609dfdebfdbb5b5c99252d97ccbb160738054b4 Mon Sep 17 00:00:00 2001 From: Hector Romero Date: Fri, 7 Jul 2017 18:12:07 -0300 Subject: [PATCH 0415/1142] Fix for permission groups mirror not working: it was just adding new instances of the mirrored group instead of the intended one --- .../bekvon/bukkit/residence/permissions/PermissionManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index aa5caebe7..0de9fec84 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -144,7 +144,7 @@ private void readConfig() { groups.put(key.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms, i)); List mirrors = nodes.getConfigurationSection(key).getStringList("Mirror"); for (String group : mirrors) { - groups.put(group.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms)); + groups.put(group.toLowerCase(), new PermissionGroup(group.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms, i)); } } catch (Exception ex) { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Error parsing group from config:" + key + " Exception:" + ex); From 245814fead7fac972559e3dc463188bf783dd33e Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 26 Jul 2017 10:48:15 +0300 Subject: [PATCH 0416/1142] ResidenceOwnerChangeEvent cancelable and possible uuid grabber on event --- .../event/ResidenceOwnerChangeEvent.java | 92 +++++++++++++------ .../protection/ResidencePermissions.java | 12 ++- src/plugin.yml | 2 +- 3 files changed, 74 insertions(+), 32 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceOwnerChangeEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceOwnerChangeEvent.java index d660a1a69..699806b1f 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceOwnerChangeEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceOwnerChangeEvent.java @@ -1,29 +1,63 @@ -package com.bekvon.bukkit.residence.event; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import org.bukkit.event.HandlerList; - -public class ResidenceOwnerChangeEvent extends ResidenceEvent { - - private static final HandlerList handlers = new HandlerList(); - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - protected String newowner; - - public ResidenceOwnerChangeEvent(ClaimedResidence resref, String newOwner) - { - super("RESIDENCE_OWNER_CHANGE",resref); - newowner = newOwner; - } - - public String getNewOwner() - { - return newowner; - } -} +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +import java.util.UUID; + +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; + +public class ResidenceOwnerChangeEvent extends ResidenceEvent implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + protected String newowner; + private UUID uuid; + protected boolean cancelled; + + @Deprecated + public ResidenceOwnerChangeEvent(ClaimedResidence resref, String newOwner) { + super("RESIDENCE_OWNER_CHANGE", resref); + this.newowner = newOwner; + } + + public ResidenceOwnerChangeEvent(ClaimedResidence resref, String newOwner, UUID uuid) { + super("RESIDENCE_OWNER_CHANGE", resref); + this.newowner = newOwner; + this.uuid = uuid; + } + + public ResidenceOwnerChangeEvent(ClaimedResidence resref, Player player) { + super("RESIDENCE_OWNER_CHANGE", resref); + this.newowner = player.getName(); + this.uuid = player.getUniqueId(); + } + + public String getNewOwner() { + return newowner; + } + + public UUID getNewOwnerUuid() { + return uuid; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean bln) { + cancelled = bln; + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 3fde5bb52..5f0e143a8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -485,9 +485,13 @@ public void applyDefaultFlags() { public void setOwner(Player player, boolean resetFlags) { - ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, player.getName()); + ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, player); Residence.getInstance().getServ().getPluginManager().callEvent(ownerchange); + // Dont change owner if event is canceled + if (ownerchange.isCancelled()) + return; + Residence.getInstance().getPlayerManager().removeResFromPlayer(residence.getOwnerUUID(), residence); Residence.getInstance().getPlayerManager().addResidence(player, residence); @@ -503,6 +507,10 @@ public void setOwner(String newOwner, boolean resetFlags) { ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); Residence.getInstance().getServ().getPluginManager().callEvent(ownerchange); + // Dont change owner if event is canceled + if (ownerchange.isCancelled()) + return; + Residence.getInstance().getPlayerManager().removeResFromPlayer(residence.getOwnerUUID(), residence); Residence.getInstance().getPlayerManager().addResidence(newOwner, residence); @@ -561,7 +569,7 @@ public static ResidencePermissions load(String worldName, ClaimedResidence res, newperms.ownerUUID = UUID.fromString((String) root.get("OwnerUUID"));//get owner UUID // String name = Residence.getPlayerName(newperms.ownerUUID); //try to find the current name of the owner newperms.ownerLastKnownName = (String) root.get("OwnerLastKnownName");//otherwise load last known name from file - + OfflinePlayer p = null; if (newperms.ownerLastKnownName == null) p = Residence.getInstance().getOfflinePlayer(newperms.ownerUUID); diff --git a/src/plugin.yml b/src/plugin.yml index 6c62e49b3..2fac40bfd 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.0.4 +version: 4.7.0.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From ae278aa7443ce1932757c1411dc938a0950e7dad Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 26 Jul 2017 11:11:27 +0300 Subject: [PATCH 0417/1142] Add destroy flag to trusted grouped flags Add all worlds for random tp on first run. --- .../bukkit/residence/ConfigManager.java | 29 +++++++++---------- src/flags.yml | 1 + 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index ddbe8b29b..48935e92b 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -555,21 +555,22 @@ public void UpdateConfigFile() { TeleportTitleMessage = c.get("Global.Tp.TeleportTitleMessage", true); if (conf.contains("Global.RandomTeleportation.WorldName")) { + for (World one : Bukkit.getWorlds()) { + String path = "Global.RandomTeleportation."; + String WorldName = conf.getString(path + "WorldName", one.getName()); - String path = "Global.RandomTeleportation."; - String WorldName = conf.getString(path + "WorldName", defaultWorldName); + int MaxCoord = conf.getInt(path + "MaxCoord", 1000); + int MinCord = conf.getInt(path + "MinCord", 500); + int CenterX = conf.getInt(path + "CenterX", 0); + int CenterZ = conf.getInt(path + "CenterZ", 0); - int MaxCoord = conf.getInt(path + "MaxCoord", 1000); - int MinCord = conf.getInt(path + "MinCord", 500); - int CenterX = conf.getInt(path + "CenterX", 0); - int CenterZ = conf.getInt(path + "CenterZ", 0); - - RTeleport.add(new RandomTeleport(WorldName, MaxCoord, MinCord, CenterX, CenterZ)); + RTeleport.add(new RandomTeleport(WorldName, MaxCoord, MinCord, CenterX, CenterZ)); - c.get("Global.RandomTeleportation." + WorldName + ".MaxCord", MaxCoord); - c.get("Global.RandomTeleportation." + WorldName + ".MinCord", MinCord); - c.get("Global.RandomTeleportation." + WorldName + ".CenterX", CenterX); - c.get("Global.RandomTeleportation." + WorldName + ".CenterZ", CenterZ); + c.get("Global.RandomTeleportation." + WorldName + ".MaxCord", MaxCoord); + c.get("Global.RandomTeleportation." + WorldName + ".MinCord", MinCord); + c.get("Global.RandomTeleportation." + WorldName + ".CenterX", CenterX); + c.get("Global.RandomTeleportation." + WorldName + ".CenterZ", CenterZ); + } } else { if (conf.isConfigurationSection("Global.RandomTeleportation")) for (String one : conf.getConfigurationSection("Global.RandomTeleportation").getKeys(false)) { @@ -761,9 +762,7 @@ public void UpdateConfigFile() { // TownEnabled = c.get("Global.Town.Enabled", true); // c.getW().addComment("Global.Town.MinRange", "Range between residences","Protects from building residence near another residence if owner not belonging to same town"); // TownMinRange = c.get("Global.Town.MinRange", 16); - - - + c.getW().addComment("Global.Rent.PreventRemoval", "Prevents residence/subzone removal if its subzone is still rented by some one"); RentPreventRemoval = c.get("Global.Rent.PreventRemoval", true); c.getW().addComment("Global.Rent.Inform.OnEnding", "Informs players on rent time ending"); diff --git a/src/flags.yml b/src/flags.yml index aab86bec7..20929234b 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -271,6 +271,7 @@ Global: - use - tp - build + - destroy - container - move - leash From e22135ae390d8497e0cab19a8166debdf172064d Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 26 Jul 2017 11:35:10 +0300 Subject: [PATCH 0418/1142] Better way to handle random teleports --- .../bukkit/residence/ConfigManager.java | 85 ++++++++++--------- .../bekvon/bukkit/residence/commands/rt.java | 17 ++-- .../residence/containers/RandomTeleport.java | 78 ++++++----------- .../bukkit/residence/utils/RandomTp.java | 11 +-- 4 files changed, 88 insertions(+), 103 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 48935e92b..3e7b00051 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -22,6 +22,7 @@ import java.util.Arrays; import java.util.Calendar; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -554,57 +555,54 @@ public void UpdateConfigFile() { c.getW().addComment("Global.Tp.TeleportTitleMessage", "Show aditional message in title message area when player is teleporting to residence"); TeleportTitleMessage = c.get("Global.Tp.TeleportTitleMessage", true); - if (conf.contains("Global.RandomTeleportation.WorldName")) { - for (World one : Bukkit.getWorlds()) { - String path = "Global.RandomTeleportation."; - String WorldName = conf.getString(path + "WorldName", one.getName()); + Set worlds = new HashSet(); + worlds.addAll(Bukkit.getWorlds()); - int MaxCoord = conf.getInt(path + "MaxCoord", 1000); - int MinCord = conf.getInt(path + "MinCord", 500); - int CenterX = conf.getInt(path + "CenterX", 0); - int CenterZ = conf.getInt(path + "CenterZ", 0); + boolean commented = false; + if (conf.isConfigurationSection("Global.RandomTeleportation")) { + for (String one : conf.getConfigurationSection("Global.RandomTeleportation.Worlds").getKeys(false)) { + String path = "Global.RandomTeleportation.Worlds." + one + "."; - RTeleport.add(new RandomTeleport(WorldName, MaxCoord, MinCord, CenterX, CenterZ)); - - c.get("Global.RandomTeleportation." + WorldName + ".MaxCord", MaxCoord); - c.get("Global.RandomTeleportation." + WorldName + ".MinCord", MinCord); - c.get("Global.RandomTeleportation." + WorldName + ".CenterX", CenterX); - c.get("Global.RandomTeleportation." + WorldName + ".CenterZ", CenterZ); - } - } else { - if (conf.isConfigurationSection("Global.RandomTeleportation")) - for (String one : conf.getConfigurationSection("Global.RandomTeleportation").getKeys(false)) { - String path = "Global.RandomTeleportation." + one + "."; - - c.getW().addComment("Global.RandomTeleportation." + one, + if (!commented) + c.getW().addComment("Global.RandomTeleportation.Worlds." + one, "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); + if (!commented) c.getW().addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); - int MaxCoord = c.get(path + "MaxCoord", 1000); + int MaxCoord = c.get(path + "MaxCoord", 1000); + + if (!commented) c.getW().addComment(path + "MinCord", "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); - int MinCord = c.get(path + "MinCord", 500); - int CenterX = c.get(path + "CenterX", 0); - int CenterZ = c.get(path + "CenterZ", 0); - - RTeleport.add(new RandomTeleport(one, MaxCoord, MinCord, CenterX, CenterZ)); - } - else { - String path = "Global.RandomTeleportation." + defaultWorldName + "."; - - c.getW().addComment(path + "WorldName", "World to use this function, set main residence world"); - String WorldName = c.get(path + "WorldName", defaultWorldName, true); - - c.getW().addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); - int MaxCoord = c.get(path + "MaxCoord", 1000); - c.getW().addComment(path + "MinCord", - "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); int MinCord = c.get(path + "MinCord", 500); int CenterX = c.get(path + "CenterX", 0); int CenterZ = c.get(path + "CenterZ", 0); - RTeleport.add(new RandomTeleport(WorldName, MaxCoord, MinCord, CenterX, CenterZ)); + + World w = getWorld(one); + + if (w == null) { + plugin.consoleMessage("&cCan't find world with (" + one + ") name"); + continue; + } + + commented = true; + worlds.remove(w); + RTeleport.add(new RandomTeleport(w, MaxCoord, MinCord, CenterX, CenterZ)); } } + for (World one : worlds) { + String name = one.getName(); + name = name.replace(".", "_"); + + String path = "Global.RandomTeleportation.Worlds." + name + "."; + + int MaxCoord = c.get(path + "MaxCoord", 1000); + int MinCord = c.get(path + "MinCord", 500); + int CenterX = c.get(path + "CenterX", 0); + int CenterZ = c.get(path + "CenterZ", 0); + + RTeleport.add(new RandomTeleport(one, MaxCoord, MinCord, CenterX, CenterZ)); + } c.getW().addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); rtCooldown = c.get("Global.RandomTeleportation.Cooldown", 5); @@ -1120,6 +1118,15 @@ public void loadGroups() { } } + public World getWorld(String name ){ + name = name.replace("_", "").replace(".", ""); + for (World one : Bukkit.getWorlds()){ + if (one.getName().replace("_", "").replace(".", "").equalsIgnoreCase(name)) + return one; + } + return null; + } + public boolean isGlobalChatEnabled() { return GlobalChatEnabled; } diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 1b12527ff..074602974 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -4,6 +4,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -27,16 +28,16 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (!resadmin && !plugin.hasPermission(sender, "residence.randomtp")) return true; - String wname = null; + World wname = null; Player tPlayer = null; if (args.length > 1) { c: for (int i = 1; i < args.length; i++) { for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { - if (!one.getWorld().equalsIgnoreCase(args[i])) + if (!one.getCenter().getWorld().getName().equalsIgnoreCase(args[i])) continue; - wname = one.getWorld(); + wname = one.getCenter().getWorld(); continue c; } Player p = Bukkit.getPlayer(args[i]); @@ -49,7 +50,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(sender, lm.Invalid_World); String worlds = ""; for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { - worlds += one.getWorld() + " "; + if (!worlds.isEmpty()) + worlds += ", "; + worlds += one.getCenter().getWorld().getName(); break; } plugin.msg(sender, lm.RandomTeleport_WorldList, worlds); @@ -60,13 +63,15 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman tPlayer = (Player) sender; if (wname == null && tPlayer != null) - wname = tPlayer.getLocation().getWorld().getName(); + wname = tPlayer.getLocation().getWorld(); if (wname == null && tPlayer == null) { plugin.msg(sender, lm.Invalid_World); String worlds = ""; for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { - worlds += one.getWorld() + " "; + if (!worlds.isEmpty()) + worlds += ", "; + worlds += one.getCenter().getWorld().getName(); break; } plugin.msg(sender, lm.RandomTeleport_WorldList, worlds); diff --git a/src/com/bekvon/bukkit/residence/containers/RandomTeleport.java b/src/com/bekvon/bukkit/residence/containers/RandomTeleport.java index 49757cd0f..0d18aaac6 100644 --- a/src/com/bekvon/bukkit/residence/containers/RandomTeleport.java +++ b/src/com/bekvon/bukkit/residence/containers/RandomTeleport.java @@ -1,50 +1,28 @@ -package com.bekvon.bukkit.residence.containers; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; - -public class RandomTeleport { - String WorldName; - int MaxCord; - int MinCord; - int centerX; - int centerZ; - Location loc; - - public RandomTeleport(String WorldName, int MaxCord, int MinCord, int centerX, int centerZ) { - this.WorldName = WorldName; - this.MaxCord = MaxCord; - this.MinCord = MinCord; - this.centerX = centerX; - this.centerZ = centerZ; - } - - public Location getCenter() { - if (loc == null) { - World w = Bukkit.getWorld(WorldName); - this.loc = new Location(w, centerX, 63, centerZ); - } - return this.loc; - } - - public String getWorld() { - return this.WorldName; - } - - public int getMaxCord() { - return this.MaxCord; - } - - public int getMinCord() { - return this.MinCord; - } - - public int getCenterX() { - return this.centerX; - } - - public int getCenterZ() { - return this.centerZ; - } -} +package com.bekvon.bukkit.residence.containers; + +import org.bukkit.Location; +import org.bukkit.World; + +public class RandomTeleport { + int MaxCord; + int MinCord; + Location loc; + + public RandomTeleport(World world, int MaxCord, int MinCord, int centerX, int centerZ) { + this.loc = new Location(world, centerX, world.getMaxHeight() / 2, centerZ); + this.MaxCord = MaxCord; + this.MinCord = MinCord; + } + + public Location getCenter() { + return this.loc; + } + + public int getMaxCord() { + return this.MaxCord; + } + + public int getMinCord() { + return this.MinCord; + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 4bd740633..9a6c32c25 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -25,9 +25,9 @@ public RandomTp(Residence plugin) { this.plugin = plugin; } - public Location getRandomlocation(String WorldName) { + public Location getRandomlocation(World world) { - if (WorldName == null) + if (world == null) return null; Random random = new Random(System.currentTimeMillis()); @@ -42,7 +42,7 @@ public Location getRandomlocation(String WorldName) { for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { - if (!one.getWorld().equalsIgnoreCase(WorldName)) + if (!one.getCenter().getWorld().equals(world)) continue; rtloc = one; @@ -52,11 +52,6 @@ public Location getRandomlocation(String WorldName) { if (rtloc == null) return null; - World world = rtloc.getCenter().getWorld(); - - if (world == null) - return null; - int inerrange = rtloc.getMinCord(); int outerrange = rtloc.getMaxCord(); if (outerrange < 1) From e02eb508dcac312e91f79b12f4d6290146ce0383 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 26 Jul 2017 11:37:33 +0300 Subject: [PATCH 0419/1142] Check for null area when getting teleport location --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 739b842b1..bd2831097 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1169,6 +1169,8 @@ public int getZoneDepth() { public Location getTeleportLocation() { if (tpLoc == null) { + if (this.getMainArea() == null) + return null; Location low = this.getMainArea().getLowLoc(); Location high = this.getMainArea().getHighLoc(); Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); From e014dd2eb1f46bbda153599cbfd0fa3782285252 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 26 Jul 2017 12:13:05 +0300 Subject: [PATCH 0420/1142] Option to disable random tp in world --- src/com/bekvon/bukkit/residence/ConfigManager.java | 13 ++++++++++--- src/com/bekvon/bukkit/residence/commands/rt.java | 4 ++++ src/com/bekvon/bukkit/residence/containers/lm.java | 1 + src/com/bekvon/bukkit/residence/utils/RandomTp.java | 9 +++++++++ src/plugin.yml | 2 +- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 3e7b00051..6826051e6 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -563,6 +563,8 @@ public void UpdateConfigFile() { for (String one : conf.getConfigurationSection("Global.RandomTeleportation.Worlds").getKeys(false)) { String path = "Global.RandomTeleportation.Worlds." + one + "."; + boolean enabled = c.get(path + "Enabled", true); + if (!commented) c.getW().addComment("Global.RandomTeleportation.Worlds." + one, "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); @@ -587,6 +589,9 @@ public void UpdateConfigFile() { commented = true; worlds.remove(w); + + if (!enabled) + continue; RTeleport.add(new RandomTeleport(w, MaxCoord, MinCord, CenterX, CenterZ)); } } @@ -595,12 +600,14 @@ public void UpdateConfigFile() { name = name.replace(".", "_"); String path = "Global.RandomTeleportation.Worlds." + name + "."; - + boolean enabled = c.get(path + "Enabled", true); int MaxCoord = c.get(path + "MaxCoord", 1000); int MinCord = c.get(path + "MinCord", 500); int CenterX = c.get(path + "CenterX", 0); int CenterZ = c.get(path + "CenterZ", 0); + if (!enabled) + continue; RTeleport.add(new RandomTeleport(one, MaxCoord, MinCord, CenterX, CenterZ)); } @@ -1118,9 +1125,9 @@ public void loadGroups() { } } - public World getWorld(String name ){ + public World getWorld(String name) { name = name.replace("_", "").replace(".", ""); - for (World one : Bukkit.getWorlds()){ + for (World one : Bukkit.getWorlds()) { if (one.getName().replace("_", "").replace(".", "").equalsIgnoreCase(name)) return one; } diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 074602974..f6eb0695c 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -92,6 +92,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } } + if (!plugin.getRandomTpManager().isDefinedRnadomTp(wname)) { + plugin.msg(sender, lm.RandomTeleport_Disabled); + return true; + } Location loc = plugin.getRandomTpManager().getRandomlocation(wname); plugin.getRandomTeleportMap().put(tPlayer.getName(), System.currentTimeMillis()); diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index d26852a0a..bc6d8101b 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -352,6 +352,7 @@ public enum lm { RandomTeleport_TpLimit("&eYou can't teleport so fast, please wait &6%1 &esec and try again"), RandomTeleport_TeleportSuccess("&eTeleported to X:&6%1&e, Y:&6%2&e, Z:&6%3 &elocation"), RandomTeleport_IncorrectLocation("&6Could not find correct teleport location, please wait &e%1 &6sec and try again."), + RandomTeleport_Disabled("&cRandom teleportation is disabled in this world"), RandomTeleport_TeleportStarted("&eTeleportation started, don't move for next &6%4 &esec."), RandomTeleport_WorldList("&ePossible worlds: &6%1"), diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 9a6c32c25..4845ed958 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -25,6 +25,15 @@ public RandomTp(Residence plugin) { this.plugin = plugin; } + public boolean isDefinedRnadomTp(World world) { + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + if (!one.getCenter().getWorld().equals(world)) + continue; + return true; + } + return false; + } + public Location getRandomlocation(World world) { if (world == null) diff --git a/src/plugin.yml b/src/plugin.yml index 2fac40bfd..80d5bfab8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.0.5 +version: 4.7.1.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 919f0ce1b9689af1cde802ed3c1ca321dd9edae7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 26 Jul 2017 12:25:24 +0300 Subject: [PATCH 0421/1142] No need to recalculate permissions on login. --- .../residence/listeners/ResidencePlayerListener.java | 2 +- .../bekvon/bukkit/residence/protection/PlayerManager.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 477a63e30..3ac76b15a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -859,7 +859,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { } handleNewLocation(player, player.getLocation(), true); - plugin.getPlayerManager().playerJoin(player); + plugin.getPlayerManager().playerJoin(player, false); if (player.hasPermission("residence.versioncheck")) { plugin.getVersionChecker().VersionCheck(player); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 35ac14418..dd93cb010 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -48,13 +48,18 @@ public void addPlayer(String name, UUID uuid, ResidencePlayer resPlayer) { } public ResidencePlayer playerJoin(Player player) { + return playerJoin(player, true); + } + + public ResidencePlayer playerJoin(Player player, boolean recalculate) { ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId()); if (resPlayer == null) { resPlayer = new ResidencePlayer(player); addPlayer(resPlayer); } else { resPlayer.updatePlayer(player); - resPlayer.RecalculatePermissions(); + if (recalculate) + resPlayer.RecalculatePermissions(); } return resPlayer; } From 94a47fca557bff9ec562abc040a59b2d8526d78a Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 27 Jul 2017 16:16:24 +0300 Subject: [PATCH 0422/1142] This is how it should check existing config section... --- .../residence/CommentedYamlConfiguration.java | 406 +++++++++--------- .../bukkit/residence/ConfigManager.java | 70 +-- .../bekvon/bukkit/residence/allNms/v1_11.java | 1 - .../bekvon/bukkit/residence/allNms/v1_12.java | 1 - .../bukkit/residence/commands/resbank.java | 2 +- .../bukkit/residence/commands/signupdate.java | 2 +- .../bukkit/residence/containers/NMS.java | 4 +- .../residence/containers/StuckInfo.java | 2 +- .../bukkit/residence/containers/cmd.java | 2 +- .../residence/dynmap/DynMapListeners.java | 6 +- .../residence/economy/EconomyInterface.java | 25 +- .../residence/economy/IConomy5Adapter.java | 118 ++--- .../residence/economy/RealShopEconomy.java | 122 +++--- .../residence/economy/rent/RentManager.java | 2 +- .../event/ResidenceChangedEvent.java | 22 +- .../residence/event/ResidenceChatEvent.java | 109 ++--- .../event/ResidenceCommandEvent.java | 115 +++-- .../event/ResidenceFlagCheckEvent.java | 93 ++-- .../event/ResidenceOwnerChangeEvent.java | 4 +- .../residence/event/ResidenceRentEvent.java | 72 ++-- .../bekvon/bukkit/residence/gui/SetFlag.java | 8 +- .../residence/itemlist/WorldItemList.java | 140 +++--- .../residence/protection/LeaseManager.java | 2 +- .../protection/PermissionListManager.java | 2 +- .../residence/selection/KingdomsUtil.java | 2 +- .../selection/SchematicsManager.java | 4 +- .../residence/selection/WorldGuardUtil.java | 2 +- .../residence/shopStuff/ShopSignUtil.java | 2 +- .../residence/utils/VersionChecker.java | 2 +- src/plugin.yml | 2 +- 30 files changed, 663 insertions(+), 681 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java b/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java index 8c650b986..da2f72761 100644 --- a/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java +++ b/src/com/bekvon/bukkit/residence/CommentedYamlConfiguration.java @@ -1,203 +1,203 @@ -package com.bekvon.bukkit.residence; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; - -import org.apache.commons.lang.StringEscapeUtils; -import org.bukkit.configuration.file.YamlConfiguration; - -import com.google.common.io.Files; - -/* - * Based on CommentedYamlConfiguration by dumptruckman - * https://github.com/dumptruckman/PluginBase/blob/master/bukkit/src/main/java/com/dumptruckman/minecraft/pluginbase/config/CommentedYamlConfiguration.java - */ - -public class CommentedYamlConfiguration extends YamlConfiguration { - private HashMap comments; - - public CommentedYamlConfiguration() { - super(); - comments = new HashMap(); - } - - @Override - public void save(String file) throws IOException { - if (file == null) { - throw new IllegalArgumentException("File cannot be null"); - } - - save(new File(file)); - } - - @Override - public void save(File file) throws IOException { - if (file == null) { - throw new IllegalArgumentException("File cannot be null"); - } - - Files.createParentDirs(file); - - String data = insertComments(saveToString()); - data = data.replace("\\x", "\\u00"); - data = StringEscapeUtils.unescapeJava(data); - - Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8)); - - try { - writer.write(data); - } finally { - writer.close(); - } - } - - private String insertComments(String yaml) { - // if there's comments to add, we need to add comments - if (!comments.isEmpty()) { - // String array of each line in the config file - String[] yamlContents = yaml.split("[" + System.getProperty("line.separator") + "]"); - - // This will hold the entire newly formatted config - StringBuilder newContents = new StringBuilder(); - // This holds the current path the lines are at in the config - StringBuilder currentPath = new StringBuilder(); - // This tells if the specified path has already been commented - boolean commentedPath = false; - // This flags if the line is a node or unknown text. - boolean node = false; - // The depth of the path. (number of words separated by periods - 1) - int depth = 0; - - // This will cause the first line to be ignored. - boolean firstLine = true; - // Loop through the config lines - for (final String line : yamlContents) { - if (firstLine) { - firstLine = false; - if (line.startsWith("#")) { - continue; - } - } - // If the line is a node (and not something like a list value) - if (line.contains(": ") || (line.length() > 1 && line.charAt(line.length() - 1) == ':')) { - // This is a new node so we need to mark it for commenting (if there are comments) - commentedPath = false; - // This is a node so flag it as one - node = true; - - // Grab the index of the end of the node name - int index = 0; - index = line.indexOf(": "); - if (index < 0) { - index = line.length() - 1; - } - // If currentPath is empty, store the node name as the currentPath. (this is only on the first iteration, i think) - if (currentPath.toString().isEmpty()) { - currentPath = new StringBuilder(line.substring(0, index)); - } else { - // Calculate the whitespace preceding the node name - int whiteSpace = 0; - for (int n = 0; n < line.length(); n++) { - if (line.charAt(n) == ' ') { - whiteSpace++; - } else { - break; - } - } - // Find out if the current depth (whitespace * 2) is greater/lesser/equal to the previous depth - if (whiteSpace / 2 > depth) { - // Path is deeper. Add a . and the node name - currentPath.append(".").append(line.substring(whiteSpace, index)); - depth++; - } else if (whiteSpace / 2 < depth) { - // Path is shallower, calculate current depth from whitespace (whitespace / 2) and subtract that many levels from the currentPath - int newDepth = whiteSpace / 2; - for (int i = 0; i < depth - newDepth; i++) { - currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), ""); - } - // Grab the index of the final period - int lastIndex = currentPath.lastIndexOf("."); - if (lastIndex < 0) { - // if there isn't a final period, set the current path to nothing because we're at root - currentPath = new StringBuilder(); - } else { - // If there is a final period, replace everything after it with nothing - currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); - } - // Add the new node name to the path - currentPath.append(line.substring(whiteSpace, index)); - // Reset the depth - depth = newDepth; - } else { - // Path is same depth, replace the last path node name to the current node name - int lastIndex = currentPath.lastIndexOf("."); - if (lastIndex < 0) { - // if there isn't a final period, set the current path to nothing because we're at root - currentPath = new StringBuilder(); - } else { - // If there is a final period, replace everything after it with nothing - currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); - } - //currentPath = currentPath.replace(currentPath.substring(currentPath.lastIndexOf(".")), ""); - currentPath.append(line.substring(whiteSpace, index)); - } - } - } else { - node = false; - } - StringBuilder newLine = new StringBuilder(line); - if (node) { - String comment = null; - if (!commentedPath) { - // If there's a comment for the current path, retrieve it and flag that path as already commented - comment = comments.get(currentPath.toString()); - } - if (comment != null && !comment.isEmpty()) { - // Add the comment to the beginning of the current line - newLine.insert(0, System.getProperty("line.separator")).insert(0, comment); - comment = null; - commentedPath = true; - } - } - newLine.append(System.getProperty("line.separator")); - // Add the (modified) line to the total config String - newContents.append(newLine.toString()); - } - - return newContents.toString(); - } - return yaml; - } - - /** - * Adds a comment just before the specified path. The comment can be multiple lines. An empty string will indicate a blank line. - * - * @param path Configuration path to add comment. - * @param commentLines Comments to add. One String per line. - */ - public void addComment(String path, String... commentLines) { - StringBuilder commentstring = new StringBuilder(); - String leadingSpaces = ""; - for (int n = 0; n < path.length(); n++) { - if (path.charAt(n) == '.') { - leadingSpaces += " "; - } - } - for (String line : commentLines) { - if (!line.isEmpty()) { - line = leadingSpaces + "# " + line; - } - if (commentstring.length() > 0) { - commentstring.append(System.getProperty("line.separator")); - } - commentstring.append(line); - } - comments.put(path, commentstring.toString()); - } -} +package com.bekvon.bukkit.residence; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; + +import org.apache.commons.lang.StringEscapeUtils; +import org.bukkit.configuration.file.YamlConfiguration; + +import com.google.common.io.Files; + +/* + * Based on CommentedYamlConfiguration by dumptruckman + * https://github.com/dumptruckman/PluginBase/blob/master/bukkit/src/main/java/com/dumptruckman/minecraft/pluginbase/config/CommentedYamlConfiguration.java + */ + +public class CommentedYamlConfiguration extends YamlConfiguration { + private HashMap comments; + + public CommentedYamlConfiguration() { + super(); + comments = new HashMap(); + } + + @Override + public void save(String file) throws IOException { + if (file == null) { + throw new IllegalArgumentException("File cannot be null"); + } + + save(new File(file)); + } + + @Override + public void save(File file) throws IOException { + if (file == null) { + throw new IllegalArgumentException("File cannot be null"); + } + + Files.createParentDirs(file); + + String data = insertComments(saveToString()); + data = data.replace("\\x", "\\u00"); + data = StringEscapeUtils.unescapeJava(data); + + Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8)); + + try { + writer.write(data); + } finally { + writer.close(); + } + } + + private String insertComments(String yaml) { + // if there's comments to add, we need to add comments + if (!comments.isEmpty()) { + // String array of each line in the config file + String[] yamlContents = yaml.split("[" + System.getProperty("line.separator") + "]"); + + // This will hold the entire newly formatted config + StringBuilder newContents = new StringBuilder(); + // This holds the current path the lines are at in the config + StringBuilder currentPath = new StringBuilder(); + // This tells if the specified path has already been commented + boolean commentedPath = false; + // This flags if the line is a node or unknown text. + boolean node = false; + // The depth of the path. (number of words separated by periods - 1) + int depth = 0; + + // This will cause the first line to be ignored. + boolean firstLine = true; + // Loop through the config lines + for (final String line : yamlContents) { + if (firstLine) { + firstLine = false; + if (line.startsWith("#")) { + continue; + } + } + // If the line is a node (and not something like a list value) + if (line.contains(": ") || (line.length() > 1 && line.charAt(line.length() - 1) == ':')) { + // This is a new node so we need to mark it for commenting (if there are comments) + commentedPath = false; + // This is a node so flag it as one + node = true; + + // Grab the index of the end of the node name + int index = 0; + index = line.indexOf(": "); + if (index < 0) { + index = line.length() - 1; + } + // If currentPath is empty, store the node name as the currentPath. (this is only on the first iteration, i think) + if (currentPath.toString().isEmpty()) { + currentPath = new StringBuilder(line.substring(0, index)); + } else { + // Calculate the whitespace preceding the node name + int whiteSpace = 0; + for (int n = 0; n < line.length(); n++) { + if (line.charAt(n) == ' ') { + whiteSpace++; + } else { + break; + } + } + // Find out if the current depth (whitespace * 2) is greater/lesser/equal to the previous depth + if (whiteSpace / 2 > depth) { + // Path is deeper. Add a . and the node name + currentPath.append(".").append(line.substring(whiteSpace, index)); + depth++; + } else if (whiteSpace / 2 < depth) { + // Path is shallower, calculate current depth from whitespace (whitespace / 2) and subtract that many levels from the currentPath + int newDepth = whiteSpace / 2; + for (int i = 0; i < depth - newDepth; i++) { + currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), ""); + } + // Grab the index of the final period + int lastIndex = currentPath.lastIndexOf("."); + if (lastIndex < 0) { + // if there isn't a final period, set the current path to nothing because we're at root + currentPath = new StringBuilder(); + } else { + // If there is a final period, replace everything after it with nothing + currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); + } + // Add the new node name to the path + currentPath.append(line.substring(whiteSpace, index)); + // Reset the depth + depth = newDepth; + } else { + // Path is same depth, replace the last path node name to the current node name + int lastIndex = currentPath.lastIndexOf("."); + if (lastIndex < 0) { + // if there isn't a final period, set the current path to nothing because we're at root + currentPath = new StringBuilder(); + } else { + // If there is a final period, replace everything after it with nothing + currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); + } + //currentPath = currentPath.replace(currentPath.substring(currentPath.lastIndexOf(".")), ""); + currentPath.append(line.substring(whiteSpace, index)); + } + } + } else { + node = false; + } + StringBuilder newLine = new StringBuilder(line); + if (node) { + String comment = null; + if (!commentedPath) { + // If there's a comment for the current path, retrieve it and flag that path as already commented + comment = comments.get(currentPath.toString()); + } + if (comment != null && !comment.isEmpty()) { + // Add the comment to the beginning of the current line + newLine.insert(0, System.getProperty("line.separator")).insert(0, comment); + comment = null; + commentedPath = true; + } + } + newLine.append(System.getProperty("line.separator")); + // Add the (modified) line to the total config String + newContents.append(newLine.toString()); + } + + return newContents.toString(); + } + return yaml; + } + + /** + * Adds a comment just before the specified path. The comment can be multiple lines. An empty string will indicate a blank line. + * + * @param path Configuration path to add comment. + * @param commentLines Comments to add. One String per line. + */ + public void addComment(String path, String... commentLines) { + StringBuilder commentstring = new StringBuilder(); + String leadingSpaces = ""; + for (int n = 0; n < path.length(); n++) { + if (path.charAt(n) == '.') { + leadingSpaces += " "; + } + } + for (String line : commentLines) { + if (!line.isEmpty()) { + line = leadingSpaces + "# " + line; + } + if (commentstring.length() > 0) { + commentstring.append(System.getProperty("line.separator")); + } + commentstring.append(line); + } + comments.put(path, commentstring.toString()); + } +} diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 6826051e6..6696cf406 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -559,41 +559,43 @@ public void UpdateConfigFile() { worlds.addAll(Bukkit.getWorlds()); boolean commented = false; - if (conf.isConfigurationSection("Global.RandomTeleportation")) { - for (String one : conf.getConfigurationSection("Global.RandomTeleportation.Worlds").getKeys(false)) { - String path = "Global.RandomTeleportation.Worlds." + one + "."; - - boolean enabled = c.get(path + "Enabled", true); - - if (!commented) - c.getW().addComment("Global.RandomTeleportation.Worlds." + one, - "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); - - if (!commented) - c.getW().addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); - int MaxCoord = c.get(path + "MaxCoord", 1000); - - if (!commented) - c.getW().addComment(path + "MinCord", - "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); - int MinCord = c.get(path + "MinCord", 500); - int CenterX = c.get(path + "CenterX", 0); - int CenterZ = c.get(path + "CenterZ", 0); - - World w = getWorld(one); - - if (w == null) { - plugin.consoleMessage("&cCan't find world with (" + one + ") name"); - continue; + if (c.getC().isConfigurationSection("Global.RandomTeleportation.Worlds")) { + ConfigurationSection sec = c.getC().getConfigurationSection("Global.RandomTeleportation.Worlds"); + if (sec != null) + for (String one : sec.getKeys(false)) { + String path = "Global.RandomTeleportation.Worlds." + one + "."; + + boolean enabled = c.get(path + "Enabled", true); + + if (!commented) + c.getW().addComment("Global.RandomTeleportation.Worlds." + one, + "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); + + if (!commented) + c.getW().addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); + int MaxCoord = c.get(path + "MaxCoord", 1000); + + if (!commented) + c.getW().addComment(path + "MinCord", + "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); + int MinCord = c.get(path + "MinCord", 500); + int CenterX = c.get(path + "CenterX", 0); + int CenterZ = c.get(path + "CenterZ", 0); + + World w = getWorld(one); + + if (w == null) { + plugin.consoleMessage("&cCan't find world with (" + one + ") name"); + continue; + } + + commented = true; + worlds.remove(w); + + if (!enabled) + continue; + RTeleport.add(new RandomTeleport(w, MaxCoord, MinCord, CenterX, CenterZ)); } - - commented = true; - worlds.remove(w); - - if (!enabled) - continue; - RTeleport.add(new RandomTeleport(w, MaxCoord, MinCord, CenterX, CenterZ)); - } } for (World one : worlds) { String name = one.getName(); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11.java b/src/com/bekvon/bukkit/residence/allNms/v1_11.java index 0807be617..1212be943 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11.java @@ -148,7 +148,6 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode); - /* 1.11 Shulker Box */ matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12.java b/src/com/bekvon/bukkit/residence/allNms/v1_12.java index 1c6c56916..63a8f0139 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_12.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_12.java @@ -132,7 +132,6 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode); - /* 1.11 Shulker Box */ matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); diff --git a/src/com/bekvon/bukkit/residence/commands/resbank.java b/src/com/bekvon/bukkit/residence/commands/resbank.java index 04d94cd5e..6b6b60802 100644 --- a/src/com/bekvon/bukkit/residence/commands/resbank.java +++ b/src/com/bekvon/bukkit/residence/commands/resbank.java @@ -62,6 +62,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Deposit or widraw money from residence bank"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res resbank [deposit/withdraw] [amount]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw","1")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw", "1")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/signupdate.java b/src/com/bekvon/bukkit/residence/commands/signupdate.java index 15e599308..77c3f4e8a 100644 --- a/src/com/bekvon/bukkit/residence/commands/signupdate.java +++ b/src/com/bekvon/bukkit/residence/commands/signupdate.java @@ -11,7 +11,7 @@ import com.bekvon.bukkit.residence.containers.lm; public class signupdate implements cmd { - + @Override @CommandAnnotation(simple = false, priority = 5700) public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { diff --git a/src/com/bekvon/bukkit/residence/containers/NMS.java b/src/com/bekvon/bukkit/residence/containers/NMS.java index ca195b1ef..94824a774 100644 --- a/src/com/bekvon/bukkit/residence/containers/NMS.java +++ b/src/com/bekvon/bukkit/residence/containers/NMS.java @@ -39,8 +39,8 @@ public interface NMS { public Block getTargetBlock(Player player, int range); public ItemStack itemInMainHand(Player player); - + public boolean isChorusTeleport(TeleportCause tpcause); - + public boolean isBoat(Material mat); } diff --git a/src/com/bekvon/bukkit/residence/containers/StuckInfo.java b/src/com/bekvon/bukkit/residence/containers/StuckInfo.java index 136234f23..424529bee 100644 --- a/src/com/bekvon/bukkit/residence/containers/StuckInfo.java +++ b/src/com/bekvon/bukkit/residence/containers/StuckInfo.java @@ -31,7 +31,7 @@ public Long getLastTp() { } public void updateLastTp() { - if (System.currentTimeMillis() - this.lastTp > 1000){ + if (System.currentTimeMillis() - this.lastTp > 1000) { this.times = 0; } addTimeTeleported(); diff --git a/src/com/bekvon/bukkit/residence/containers/cmd.java b/src/com/bekvon/bukkit/residence/containers/cmd.java index d2e126d33..bab55fcd1 100644 --- a/src/com/bekvon/bukkit/residence/containers/cmd.java +++ b/src/com/bekvon/bukkit/residence/containers/cmd.java @@ -6,7 +6,7 @@ import com.bekvon.bukkit.residence.Residence; public interface cmd { - + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender); public void getLocale(ConfigReader c, String path); diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java index 363fc3bea..850e8e2b3 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapListeners.java @@ -19,10 +19,10 @@ public class DynMapListeners implements Listener { private Residence plugin; - public DynMapListeners(Residence plugin){ - this.plugin = plugin; + public DynMapListeners(Residence plugin) { + this.plugin = plugin; } - + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceAreaAdd(ResidenceAreaAddEvent event) { plugin.getDynManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); diff --git a/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java b/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java index 9f4a61bf1..4485144bb 100644 --- a/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java +++ b/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java @@ -1,10 +1,15 @@ -package com.bekvon.bukkit.residence.economy; - -public interface EconomyInterface { - public double getBalance(String playerName); - public boolean canAfford(String playerName, double amount); - public boolean add(String playerName, double amount); - public boolean subtract(String playerName, double amount); - public boolean transfer(String playerFrom, String playerTo, double amount); - public String getName(); -} +package com.bekvon.bukkit.residence.economy; + +public interface EconomyInterface { + public double getBalance(String playerName); + + public boolean canAfford(String playerName, double amount); + + public boolean add(String playerName, double amount); + + public boolean subtract(String playerName, double amount); + + public boolean transfer(String playerFrom, String playerTo, double amount); + + public String getName(); +} diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java index 0aed4b611..4044aee4b 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java @@ -1,59 +1,59 @@ -package com.bekvon.bukkit.residence.economy; - -import com.iConomy.iConomy; -import com.iConomy.system.Account; - -public class IConomy5Adapter implements EconomyInterface { - - @Override - public double getBalance(String playerName) { - Account acc = iConomy.getAccount(playerName); - return (acc == null) ? 0 : acc.getHoldings().balance(); - } - - @Override - public boolean canAfford(String playerName, double amount) { - if (amount == 0) { - return true; - } - Account acc = iConomy.getAccount(playerName); - return (acc == null) ? false : acc.getHoldings().hasEnough(amount); - } - - @Override - public boolean add(String playerName, double amount) { - Account acc = iConomy.getAccount(playerName); - if (acc != null) { - acc.getHoldings().add(amount); - return true; - } - return false; - } - - @Override - public boolean subtract(String playerName, double amount) { - Account acc = iConomy.getAccount(playerName); - if (acc != null) { - acc.getHoldings().subtract(amount); - return true; - } - return false; - } - - @Override - public boolean transfer(String playerFrom, String playerTo, double amount) { - Account accFrom = iConomy.getAccount(playerFrom); - Account accTo = iConomy.getAccount(playerTo); - if (accFrom != null && accTo != null) { - accFrom.getHoldings().subtract(amount); - accTo.getHoldings().add(amount); - return true; - } - return false; - } - - @Override - public String getName() { - return "iConomy"; - } -} +package com.bekvon.bukkit.residence.economy; + +import com.iConomy.iConomy; +import com.iConomy.system.Account; + +public class IConomy5Adapter implements EconomyInterface { + + @Override + public double getBalance(String playerName) { + Account acc = iConomy.getAccount(playerName); + return (acc == null) ? 0 : acc.getHoldings().balance(); + } + + @Override + public boolean canAfford(String playerName, double amount) { + if (amount == 0) { + return true; + } + Account acc = iConomy.getAccount(playerName); + return (acc == null) ? false : acc.getHoldings().hasEnough(amount); + } + + @Override + public boolean add(String playerName, double amount) { + Account acc = iConomy.getAccount(playerName); + if (acc != null) { + acc.getHoldings().add(amount); + return true; + } + return false; + } + + @Override + public boolean subtract(String playerName, double amount) { + Account acc = iConomy.getAccount(playerName); + if (acc != null) { + acc.getHoldings().subtract(amount); + return true; + } + return false; + } + + @Override + public boolean transfer(String playerFrom, String playerTo, double amount) { + Account accFrom = iConomy.getAccount(playerFrom); + Account accTo = iConomy.getAccount(playerTo); + if (accFrom != null && accTo != null) { + accFrom.getHoldings().subtract(amount); + accTo.getHoldings().add(amount); + return true; + } + return false; + } + + @Override + public String getName() { + return "iConomy"; + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java index 60af62fe0..9b23cf6ce 100644 --- a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java @@ -1,61 +1,61 @@ -package com.bekvon.bukkit.residence.economy; - -import fr.crafter.tickleman.realeconomy.RealEconomy; - -public class RealShopEconomy implements EconomyInterface { - - RealEconomy plugin; - - public RealShopEconomy(RealEconomy e) { - plugin = e; - } - - @Override - public double getBalance(String playerName) { - return plugin.getBalance(playerName); - } - - @Override - public boolean canAfford(String playerName, double amount) { - if (plugin.getBalance(playerName) >= amount) { - return true; - } - return false; - } - - @Override - public boolean add(String playerName, double amount) { - plugin.setBalance(playerName, plugin.getBalance(playerName) + amount); - return true; - } - - @Override - public boolean subtract(String playerName, double amount) { - if (!canAfford(playerName, amount)) { - return false; - } - plugin.setBalance(playerName, plugin.getBalance(playerName) - amount); - return true; - } - - @Override - public boolean transfer(String playerFrom, String playerTo, double amount) { - if (!canAfford(playerFrom, amount)) { - return false; - } - if (subtract(playerFrom, amount)) { - if (!add(playerTo, amount)) { - add(playerFrom, amount); - return false; - } - return true; - } - return false; - } - - @Override - public String getName() { - return "RealShopEconomy"; - } - -} +package com.bekvon.bukkit.residence.economy; + +import fr.crafter.tickleman.realeconomy.RealEconomy; + +public class RealShopEconomy implements EconomyInterface { + + RealEconomy plugin; + + public RealShopEconomy(RealEconomy e) { + plugin = e; + } + + @Override + public double getBalance(String playerName) { + return plugin.getBalance(playerName); + } + + @Override + public boolean canAfford(String playerName, double amount) { + if (plugin.getBalance(playerName) >= amount) { + return true; + } + return false; + } + + @Override + public boolean add(String playerName, double amount) { + plugin.setBalance(playerName, plugin.getBalance(playerName) + amount); + return true; + } + + @Override + public boolean subtract(String playerName, double amount) { + if (!canAfford(playerName, amount)) { + return false; + } + plugin.setBalance(playerName, plugin.getBalance(playerName) - amount); + return true; + } + + @Override + public boolean transfer(String playerFrom, String playerTo, double amount) { + if (!canAfford(playerFrom, amount)) { + return false; + } + if (subtract(playerFrom, amount)) { + if (!add(playerTo, amount)) { + add(playerFrom, amount); + return false; + } + return true; + } + return false; + } + + @Override + public String getName() { + return "RealShopEconomy"; + } + +} diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 2a392c0d3..1e8687e66 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -843,7 +843,7 @@ public void printRentableResidences(Player player, int page) { if (!hover.equalsIgnoreCase("")) { rm.show(player); } else { - player.sendMessage(msg); + player.sendMessage(msg); } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceChangedEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceChangedEvent.java index c5dd801cc..c21db7f6a 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceChangedEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceChangedEvent.java @@ -29,7 +29,7 @@ */ public class ResidenceChangedEvent extends ResidencePlayerEvent { private static final HandlerList handlers = new HandlerList(); - + private ClaimedResidence from = null; private ClaimedResidence to = null; @@ -44,11 +44,11 @@ public class ResidenceChangedEvent extends ResidencePlayerEvent { * @param player player involved in the transition */ public ResidenceChangedEvent(ClaimedResidence from, ClaimedResidence to, Player player) { - super("RESIDENCE_CHANGE", null, player); - this.from = from; - this.to = to; + super("RESIDENCE_CHANGE", null, player); + this.from = from; + this.to = to; } - + /** * Returns the residence from which player came. * @@ -56,9 +56,9 @@ public ResidenceChangedEvent(ClaimedResidence from, ClaimedResidence to, Player * unprotected area */ public ClaimedResidence getFrom() { - return from; + return from; } - + /** * Returns the residence that player has entered. * @@ -66,15 +66,15 @@ public ClaimedResidence getFrom() { * unprotected area */ public ClaimedResidence getTo() { - return to; + return to; } - + @Override public HandlerList getHandlers() { - return handlers; + return handlers; } public static HandlerList getHandlerList() { - return handlers; + return handlers; } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java index 68af98399..58f062384 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java @@ -1,54 +1,55 @@ -package com.bekvon.bukkit.residence.event; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -public class ResidenceChatEvent extends CancellableResidencePlayerEvent { - - private static final HandlerList handlers = new HandlerList(); - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - protected String message; - ChatColor color = ChatColor.WHITE; - private String prefix = ""; - - public ResidenceChatEvent(ClaimedResidence resref, Player player, String prefix, String message, ChatColor color) { - super("RESIDENCE_CHAT_EVENT", resref, player); - this.message = message; - this.prefix = prefix; - this.color = color; - } - - public String getChatMessage() { - return message; - } - - public String getChatprefix() { - return ChatColor.translateAlternateColorCodes('&', prefix); - } - - public void setChatprefix(String prefix) { - this.prefix = prefix; - } - - public void setChatMessage(String newmessage) { - message = newmessage; - } - - public ChatColor getColor() { - return color; - } - - public void setColor(ChatColor c) { - color = c; - } -} +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class ResidenceChatEvent extends CancellableResidencePlayerEvent { + + private static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + protected String message; + ChatColor color = ChatColor.WHITE; + private String prefix = ""; + + public ResidenceChatEvent(ClaimedResidence resref, Player player, String prefix, String message, ChatColor color) { + super("RESIDENCE_CHAT_EVENT", resref, player); + this.message = message; + this.prefix = prefix; + this.color = color; + } + + public String getChatMessage() { + return message; + } + + public String getChatprefix() { + return ChatColor.translateAlternateColorCodes('&', prefix); + } + + public void setChatprefix(String prefix) { + this.prefix = prefix; + } + + public void setChatMessage(String newmessage) { + message = newmessage; + } + + public ChatColor getColor() { + return color; + } + + public void setColor(ChatColor c) { + color = c; + } +} diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java index 29db54550..c67005d5e 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceCommandEvent.java @@ -1,59 +1,56 @@ -package com.bekvon.bukkit.residence.event; - -import org.bukkit.command.CommandSender; -import org.bukkit.event.Cancellable; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -public class ResidenceCommandEvent extends Event implements Cancellable { - - private static final HandlerList handlers = new HandlerList(); - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - protected boolean cancelled; - protected String cmd; - protected String arglist[]; - CommandSender commandsender; - - public ResidenceCommandEvent(String command, String args[], CommandSender sender) - { - super(); - cancelled = false; - arglist = args; - cmd = command; - commandsender = sender; - } - - @Override - public boolean isCancelled() { - return cancelled; - } - - @Override - public void setCancelled(boolean bln) { - cancelled = bln; - } - - public String getCommand() - { - return cmd; - } - - public String[] getArgs() - { - return arglist; - } - - public CommandSender getSender() - { - return commandsender; - } - -} +package com.bekvon.bukkit.residence.event; + +import org.bukkit.command.CommandSender; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class ResidenceCommandEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + protected boolean cancelled; + protected String cmd; + protected String arglist[]; + CommandSender commandsender; + + public ResidenceCommandEvent(String command, String args[], CommandSender sender) { + super(); + cancelled = false; + arglist = args; + cmd = command; + commandsender = sender; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean bln) { + cancelled = bln; + } + + public String getCommand() { + return cmd; + } + + public String[] getArgs() { + return arglist; + } + + public CommandSender getSender() { + return commandsender; + } + +} diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java index a37696b4a..9b4406645 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java @@ -1,49 +1,44 @@ -package com.bekvon.bukkit.residence.event; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import org.bukkit.event.HandlerList; - -public class ResidenceFlagCheckEvent extends ResidenceFlagEvent { -private static final HandlerList handlers = new HandlerList(); - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - private boolean override; - private boolean overridevalue; - boolean defaultvalue; - - public ResidenceFlagCheckEvent(ClaimedResidence resref, String flag, FlagType type, String target, boolean defaultValue) - { - super("RESIDENCE_FLAG_CHECK", resref, flag, type, target); - defaultvalue = defaultValue; - override = false; - } - - public boolean isOverriden() - { - return override; - } - - public void overrideCheck(boolean flagval) - { - overridevalue = flagval; - override=true; - } - - public boolean getOverrideValue() - { - return overridevalue; - } - - public boolean getDefaultValue() - { - return defaultvalue; - } -} +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import org.bukkit.event.HandlerList; + +public class ResidenceFlagCheckEvent extends ResidenceFlagEvent { + private static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + private boolean override; + private boolean overridevalue; + boolean defaultvalue; + + public ResidenceFlagCheckEvent(ClaimedResidence resref, String flag, FlagType type, String target, boolean defaultValue) { + super("RESIDENCE_FLAG_CHECK", resref, flag, type, target); + defaultvalue = defaultValue; + override = false; + } + + public boolean isOverriden() { + return override; + } + + public void overrideCheck(boolean flagval) { + overridevalue = flagval; + override = true; + } + + public boolean getOverrideValue() { + return overridevalue; + } + + public boolean getDefaultValue() { + return defaultvalue; + } +} diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceOwnerChangeEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceOwnerChangeEvent.java index 699806b1f..68924e521 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceOwnerChangeEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceOwnerChangeEvent.java @@ -36,13 +36,13 @@ public ResidenceOwnerChangeEvent(ClaimedResidence resref, String newOwner, UUID this.newowner = newOwner; this.uuid = uuid; } - + public ResidenceOwnerChangeEvent(ClaimedResidence resref, Player player) { super("RESIDENCE_OWNER_CHANGE", resref); this.newowner = player.getName(); this.uuid = player.getUniqueId(); } - + public String getNewOwner() { return newowner; } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceRentEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceRentEvent.java index 465805ff9..0525b2fee 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceRentEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceRentEvent.java @@ -1,37 +1,35 @@ -package com.bekvon.bukkit.residence.event; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -public class ResidenceRentEvent extends CancellableResidencePlayerEvent { - - private static final HandlerList handlers = new HandlerList(); - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - RentEventType eventtype; - - public enum RentEventType - { - RENT, UNRENT, RENTABLE, UNRENTABLE, RENT_EXPIRE - } - - public ResidenceRentEvent(ClaimedResidence resref, Player player, RentEventType type) - { - super("RESIDENCE_RENT_EVENT", resref, player); - eventtype = type; - } - - public RentEventType getCause() - { - return eventtype; - } - -} +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class ResidenceRentEvent extends CancellableResidencePlayerEvent { + + private static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + RentEventType eventtype; + + public enum RentEventType { + RENT, UNRENT, RENTABLE, UNRENTABLE, RENT_EXPIRE + } + + public ResidenceRentEvent(ClaimedResidence resref, Player player, RentEventType type) { + super("RESIDENCE_RENT_EVENT", resref, player); + eventtype = type; + } + + public RentEventType getCause() { + return eventtype; + } + +} diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index f8aef4665..79acef296 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -149,7 +149,6 @@ private void fillFlagDescriptions() { @SuppressWarnings("incomplete-switch") public void recalculateResidence(ClaimedResidence res) { - if (flags == null) flags = res.getPermissions().getPosibleFlags(player, true, this.admin); @@ -162,7 +161,7 @@ public void recalculateResidence(ClaimedResidence res) { if (flags.contains(one.getKey())) resFlags.put(one.getKey(), one.getValue()); } - + for (Entry one : globalFlags.entrySet()) { if (!flags.contains(one.getKey())) continue; @@ -173,7 +172,6 @@ public void recalculateResidence(ClaimedResidence res) { TempPermMap.put(one.getKey(), FlagState.NEITHER); } - String title = ""; if (targetPlayer == null) title = Residence.getInstance().msg(lm.Gui_Set_Title, res.getName()); @@ -184,7 +182,6 @@ public void recalculateResidence(ClaimedResidence res) { title = title.substring(0, Math.min(title.length(), 32)); } - Inventory GuiInv = Bukkit.createInventory(null, 54, title); int i = 0; @@ -211,7 +208,6 @@ public void recalculateResidence(ClaimedResidence res) { permMap.put(one.getKey(), one.getValue()); } - for (Entry one : permMap.entrySet()) { ItemStack MiscInfo = Residence.getInstance().getConfigManager().getGuiRemove(); @@ -268,7 +264,6 @@ public void recalculateResidence(ClaimedResidence res) { break; } - ItemStack Item = new ItemStack(Material.ARROW); ItemMeta meta = Item.getItemMeta(); @@ -278,7 +273,6 @@ public void recalculateResidence(ClaimedResidence res) { GuiInv.setItem(45, Item); } - if (page < pageCount) { meta.setDisplayName(Residence.getInstance().msg(lm.General_NextInfoPage)); Item.setItemMeta(meta); diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java index a61995d59..c41cb770b 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java @@ -1,74 +1,66 @@ -package com.bekvon.bukkit.residence.itemlist; - -import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; - -public class WorldItemList extends ItemList { - - protected String world; - protected String group; - - public WorldItemList(ListType listType) - { - super(listType); - } - - protected WorldItemList() - { - - } - - public String getWorld() - { - return world; - } - - public String getGroup() - { - return group; - } - - public boolean isAllowed(Material mat, String inworld, String ingroup) { - if(!listApplicable(inworld,ingroup)) - return true; - return super.isAllowed(mat); - } - - public boolean isIgnored(Material mat, String inworld, String ingroup) - { - if(!listApplicable(inworld,ingroup)) - return false; - return super.isIgnored(mat); - } - - public boolean isListed(Material mat, String inworld, String ingroup) - { - if(!listApplicable(inworld,ingroup)) - return false; - return super.isListed(mat); - } - - public boolean listApplicable(String inworld, String ingroup) - { - if (world != null) { - if (!world.equals(inworld)) { - return false; - } - } - if (group != null) { - if (!group.equals(ingroup)) { - return false; - } - } - return true; - } - - public static WorldItemList readList(ConfigurationSection node) - { - WorldItemList list = new WorldItemList(); - ItemList.readList(node, list); - list.world = node.getString("World",null); - list.group = node.getString("Group",null); - return list; - } -} +package com.bekvon.bukkit.residence.itemlist; + +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; + +public class WorldItemList extends ItemList { + + protected String world; + protected String group; + + public WorldItemList(ListType listType) { + super(listType); + } + + protected WorldItemList() { + + } + + public String getWorld() { + return world; + } + + public String getGroup() { + return group; + } + + public boolean isAllowed(Material mat, String inworld, String ingroup) { + if (!listApplicable(inworld, ingroup)) + return true; + return super.isAllowed(mat); + } + + public boolean isIgnored(Material mat, String inworld, String ingroup) { + if (!listApplicable(inworld, ingroup)) + return false; + return super.isIgnored(mat); + } + + public boolean isListed(Material mat, String inworld, String ingroup) { + if (!listApplicable(inworld, ingroup)) + return false; + return super.isListed(mat); + } + + public boolean listApplicable(String inworld, String ingroup) { + if (world != null) { + if (!world.equals(inworld)) { + return false; + } + } + if (group != null) { + if (!group.equals(ingroup)) { + return false; + } + } + return true; + } + + public static WorldItemList readList(ConfigurationSection node) { + WorldItemList list = new WorldItemList(); + ItemList.readList(node, list); + list.world = node.getString("World", null); + list.group = node.getString("Group", null); + return list; + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index f34732d5a..a6926ef30 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -34,7 +34,7 @@ public LeaseManager(Residence plugin) { public boolean leaseExpires(ClaimedResidence res) { return isLeased(res); } - + public boolean isLeased(ClaimedResidence res) { if (res == null) return false; diff --git a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java index 5a9a16356..0c6f84879 100644 --- a/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PermissionListManager.java @@ -42,7 +42,7 @@ public void makeList(Player player, String listname) { get.put(listname, perms); plugin.msg(player, lm.General_ListCreate, listname); } else { - plugin.msg(player,lm.General_ListExists); + plugin.msg(player, lm.General_ListExists); } } diff --git a/src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java b/src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java index 28994b1f4..1b7ba841f 100644 --- a/src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java @@ -25,7 +25,7 @@ public Land getRegion(CuboidArea area) { if (plugin.getKingdomsManager() == null) return null; - + if (area == null) return null; diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index a561b003d..3a25c2f89 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -57,14 +57,14 @@ public boolean save(ClaimedResidence res) { dir.mkdir(); } catch (SecurityException se) { } - + File file = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); try { SchematicFormat.MCEDIT.save(clipboard, file); } catch (Exception e) { return false; } - + editSession.flushQueue(); return true; } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java index 1a31a2c14..e1498e77f 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -60,7 +60,7 @@ public boolean isSelectionInArea(Player player) { ProtectedRegion Region = getRegion(player, plugin.getSelectionManager().getSelectionCuboid(player)); if (Region == null) return false; - + plugin.msg(player, lm.Select_WorldGuardOverlap, Region.getId()); Location lowLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index 98af09cc7..a8b39fa38 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -378,7 +378,7 @@ public boolean BoardUpdate() { if (plugin.getConfigManager().isOnlyLike()) { votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListLiked, getLikes(ShopNames.get(Start))); } else - votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_SignLines_4, vote.getVote() , vote.getAmount()); + votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_SignLines_4, vote.getVote(), vote.getAmount()); } sign.setLine(0, plugin.msg(lm.Shop_SignLines_1, Start + 1)); diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index f6851324a..d4021636f 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -70,7 +70,7 @@ public String getShortVersion() { public boolean isHigher(Version version) { return getValue() > version.getValue(); } - + public boolean isLower(Version version) { return getValue() < version.getValue(); } diff --git a/src/plugin.yml b/src/plugin.yml index 80d5bfab8..7ad7ffb6a 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.1.0 +version: 4.7.1.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 7d73d34bf8102fdf668d9a3de6d40520a5483702 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 27 Jul 2017 16:38:17 +0300 Subject: [PATCH 0423/1142] Enter message for rentable residence should take name not residence object --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3ac76b15a..f3ce378a8 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2004,10 +2004,10 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { if (plugin.getRentManager().isForRent(from) && !plugin.getRentManager().isRented(from)) { RentableLand rentable = plugin.getRentManager().getRentableLand(from); if (rentable != null) - plugin.getAB().send(player, plugin.msg(lm.Residence_CanBeRented, from, rentable.cost, rentable.days)); + plugin.getAB().send(player, plugin.msg(lm.Residence_CanBeRented, from.getName(), rentable.cost, rentable.days)); } else if (plugin.getTransactionManager().isForSale(from) && !res.isOwner(player)) { int sale = plugin.getTransactionManager().getSaleAmount(from); - plugin.getAB().send(player, plugin.msg(lm.Residence_CanBeBought, from, sale)); + plugin.getAB().send(player, plugin.msg(lm.Residence_CanBeBought, from.getName(), sale)); } } } From 8d75e65495e1abc5c66f81c240e9530ead3f094b Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 8 Sep 2017 18:47:25 +0300 Subject: [PATCH 0424/1142] Get correct old residence on residence change --- .../residence/listeners/ResidencePlayerListener.java | 9 ++++++--- .../bukkit/residence/protection/ClaimedResidence.java | 1 - 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index f3ce378a8..deae9b878 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1624,8 +1624,10 @@ public void onResidenceChange(ResidenceChangedEvent event) { if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1) && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(false); } + Debug.D("old res null: " +(ResOld == null)); + Debug.D("new res null: " +(res == null)); - if (res != null && ResOld != null && res != ResOld) { + if (res != null && ResOld != null && !res.equals(ResOld)) { if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) { if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(true); @@ -1633,6 +1635,7 @@ else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.get player.setGlowing(false); } + Debug.D("here"); if (res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, true); else if (ResOld.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && !res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) @@ -1918,7 +1921,7 @@ public void run() { currentRes.put(pname, areaname); // "from" residence for ResidenceChangedEvent - ClaimedResidence chgFrom = null; +// ClaimedResidence chgFrom = null; // if (ResOld != res && ResOld != null) { // String leave = ResOld.getLeaveMessage(); // chgFrom = ResOld; @@ -1936,7 +1939,7 @@ public void run() { // } // New ResidenceChangedEvent - ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(chgFrom, res, player); + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, res, player); plugin.getServ().getPluginManager().callEvent(chgEvent); } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index bd2831097..5cbdf0a21 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -27,7 +27,6 @@ import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.text.help.PageInfo; import com.bekvon.bukkit.residence.towns.Town; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.RawMessage; import java.text.DecimalFormat; From 4c52c619775480285b0c2842ecd8f0bfaabac13b Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 8 Sep 2017 19:06:11 +0300 Subject: [PATCH 0425/1142] Allow name increment on res auto --- src/com/bekvon/bukkit/residence/ConfigManager.java | 9 +++++++++ src/com/bekvon/bukkit/residence/commands/auto.java | 11 +++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 6696cf406..45637fe59 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -81,6 +81,7 @@ public class ConfigManager { protected boolean NewSaveMechanic; private int ItemPickUpDelay; private boolean AutomaticResidenceCreationCheckCollision; + private String AutomaticResidenceCreationIncrementFormat; // Backup stuff protected boolean BackupAutoCleanUpUse; @@ -434,6 +435,10 @@ public void UpdateConfigFile() { "When set to true /res auto command will check for new area collision with other residences to avoid overlapping.", "Set it to false to gain some performace but new residence can often overlap with old ones"); AutomaticResidenceCreationCheckCollision = c.get("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", true); + + c.getW().addComment("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", + "Defines new residence name increment when using autoamtic residence creation command if residence with that name already exist"); + AutomaticResidenceCreationIncrementFormat= c.get("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "_[number]"); // c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", // "You can bypass this with residence.checkbadflags permission node"); @@ -1766,6 +1771,10 @@ public boolean isAutomaticResidenceCreationCheckCollision() { return AutomaticResidenceCreationCheckCollision; } + public String AutomaticResidenceCreationIncrementFormat() { + return AutomaticResidenceCreationIncrementFormat; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index e153ef6ff..764b33741 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -101,6 +101,17 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), minX, minY, minZ), false); plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), maxX, maxY, maxZ), false); resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player)); + + if (plugin.getResidenceManager().getByName(resName) != null) { + for (int i = 1; i < 50; i++) { + String tempName = resName + plugin.getConfigManager().AutomaticResidenceCreationIncrementFormat().replace("[number]", i + ""); + if (plugin.getResidenceManager().getByName(tempName) == null) { + resName = tempName; + break; + } + } + } + player.performCommand("res create " + resName); return true; } From 0e840394d4747f483fd4fa7288b0445b21c89e17 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 8 Sep 2017 19:10:33 +0300 Subject: [PATCH 0426/1142] Cloning residences hashmap to avoid issues when saving in async --- .../bekvon/bukkit/residence/protection/ResidenceManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 4fad5dc4c..305faa92f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -798,7 +798,7 @@ public Map save() { Map worldmap = new LinkedHashMap<>(); for (World world : plugin.getServ().getWorlds()) { Map resmap = new LinkedHashMap<>(); - for (Entry res : residences.entrySet()) { + for (Entry res : (new TreeMap(residences)).entrySet()) { if (!res.getValue().getWorld().equals(world.getName())) continue; From 1fc4ae9f000912777b0954febb7404450eb1b5b9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 8 Sep 2017 19:29:51 +0300 Subject: [PATCH 0427/1142] better riding and container check on entities --- .../listeners/ResidencePlayerListener.java | 48 +++++++++++++++++-- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index deae9b878..29ae27f1d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1220,6 +1220,27 @@ public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { } } + private static boolean canRide(EntityType type) { + switch (type.name().toLowerCase()) { + case "horse": + case "donkey": + case "llama": + case "pig": + return true; + } + return false; + } + + private static boolean canHaveContainer(EntityType type) { + switch (type.name().toLowerCase()) { + case "horse": + case "donkey": + case "llama": + return true; + } + return false; + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { // disabling event on world @@ -1231,7 +1252,7 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { Entity ent = event.getRightClicked(); - if (ent.getType() != EntityType.HORSE) + if (!canHaveContainer(ent.getType() )) return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); @@ -1240,7 +1261,27 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { plugin.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); event.setCancelled(true); - } else if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.riding, FlagCombo.TrueOrNone)) { + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractWithRidable(PlayerInteractEntityEvent event) { + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + + if (!canRide(ent.getType() )) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.riding, FlagCombo.TrueOrNone)) { plugin.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); event.setCancelled(true); } @@ -1624,8 +1665,6 @@ public void onResidenceChange(ResidenceChangedEvent event) { if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1) && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(false); } - Debug.D("old res null: " +(ResOld == null)); - Debug.D("new res null: " +(res == null)); if (res != null && ResOld != null && !res.equals(ResOld)) { if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) { @@ -1635,7 +1674,6 @@ else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.get player.setGlowing(false); } - Debug.D("here"); if (res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, true); else if (ResOld.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && !res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) From b05f24abc5f31c529d7ff92f9259b1f207944365 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 9 Sep 2017 11:37:48 +0300 Subject: [PATCH 0428/1142] Small NPE check for sign interaction --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 29ae27f1d..9b6a3fd67 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -635,7 +635,7 @@ public void onSignInteract(PlayerInteractEvent event) { Block block = event.getClickedBlock(); - if (block == null) + if (block == null || block.getState() == null) return; if (!(block.getState() instanceof Sign)) From c6ee7378f9da194e982a77fab2b144f238fb88d4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 9 Sep 2017 11:46:40 +0300 Subject: [PATCH 0429/1142] res check informs about invalid flag name --- src/com/bekvon/bukkit/residence/commands/check.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index bb681afca..d166188b7 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -9,6 +9,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -34,10 +35,18 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Invalid_Residence); return true; } + + Flags flag = Flags.getFlag(args[2]); + + if (flag == null) { + plugin.msg(player, lm.Invalid_Flag); + return true; + } + if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { - plugin.msg(player, lm.Flag_CheckFalse, args[2], pname, args[1]); + plugin.msg(player, lm.Flag_CheckFalse, flag, pname, args[1]); } else { - plugin.msg(player, lm.Flag_CheckTrue, args[2], pname, args[1], (res.getPermissions().playerHas(player.getName(), res.getPermissions().getWorld(), args[2], false) ? plugin.msg(lm.General_True) + plugin.msg(player, lm.Flag_CheckTrue, flag, pname, args[1], (res.getPermissions().playerHas(player, res.getPermissions().getWorld(), flag, false) ? plugin.msg(lm.General_True) : plugin.msg(lm.General_False))); } return true; From 7a0d781b233d1ac0ef9c7e9f6a360895d0635002 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 9 Sep 2017 11:56:10 +0300 Subject: [PATCH 0430/1142] Exclude vanished players from tab complete --- .../bekvon/bukkit/residence/text/help/HelpEntry.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index aa324bb28..cc221f588 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -318,6 +318,10 @@ public Set getSubCommands(CommandSender sender, String[] args) { if (neededArgPlace < ArgsList.size() && neededArgPlace >= 0) NeededArg = ArgsList.get(neededArgPlace); + Player playerSender = null; + if (sender instanceof Player) + playerSender = (Player) sender; + if (NeededArg != null) { List list = new ArrayList(); @@ -330,8 +334,10 @@ public Set getSubCommands(CommandSender sender, String[] args) { for (String oneArg : list) { switch (oneArg) { case "[playername]": - for (Player one : Bukkit.getOnlinePlayers()) - subCommands.add(one.getName()); + for (Player one : Bukkit.getOnlinePlayers()) { + if (playerSender == null || one.canSee(playerSender)) + subCommands.add(one.getName()); + } break; case "[residence]": if (sender instanceof Player) { From 98055e6db747df81ac137a1f266898ae5721215d Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 9 Sep 2017 12:00:14 +0300 Subject: [PATCH 0431/1142] Include Donkey as animal as of 1.11 version its separate from horse --- src/com/bekvon/bukkit/residence/allNms/v1_11.java | 4 +++- src/com/bekvon/bukkit/residence/allNms/v1_12.java | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11.java b/src/com/bekvon/bukkit/residence/allNms/v1_11.java index 1212be943..d7ac9c36f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11.java @@ -11,6 +11,7 @@ import org.bukkit.entity.Bat; import org.bukkit.entity.Chicken; import org.bukkit.entity.Cow; +import org.bukkit.entity.Donkey; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Horse; @@ -60,7 +61,8 @@ public boolean isAnimal(Entity ent) { ent instanceof Villager || ent instanceof Rabbit || ent instanceof Llama || - ent instanceof PolarBear); + ent instanceof PolarBear|| + ent instanceof Donkey); } @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12.java b/src/com/bekvon/bukkit/residence/allNms/v1_12.java index 63a8f0139..7041defee 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_12.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_12.java @@ -44,7 +44,8 @@ public boolean isAnimal(Entity ent) { ent instanceof Rabbit || ent instanceof Llama || ent instanceof PolarBear || - ent instanceof Parrot); + ent instanceof Parrot|| + ent instanceof Donkey); } @Override From c7538524cf0d4e9dcc246fbd93fcacd8310a1e67 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 9 Sep 2017 12:12:45 +0300 Subject: [PATCH 0432/1142] Allow fire arrows to ignite animals in residence if animalkilling is set to true --- .../residence/listeners/ResidenceEntityListener.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 18b265dd8..1d710193a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -8,6 +8,8 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; + import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -937,12 +939,16 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockCatchingFire(ProjectileHitEvent event) { + public void onBlockCatchingFire(ProjectileHitEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (!(event.getEntity() instanceof Arrow)) return; + + if (event.getHitEntity() == null || !(event.getHitEntity() instanceof Player)) + return; + Arrow arrow = (Arrow) event.getEntity(); FlagPermissions perms = plugin.getPermsByLoc(arrow.getLocation()); From 90c8e8ac3f09320373ed66494dc7cee359add294 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 10 Sep 2017 12:03:52 +0300 Subject: [PATCH 0433/1142] option to get x nad z from chunkRef --- .../bukkit/residence/chat/ChatManager.java | 123 +++++++++--------- .../protection/ResidenceManager.java | 8 ++ src/plugin.yml | 2 +- 3 files changed, 71 insertions(+), 62 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/chat/ChatManager.java b/src/com/bekvon/bukkit/residence/chat/ChatManager.java index 87bd8e82f..913bd1631 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatManager.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatManager.java @@ -1,61 +1,62 @@ -package com.bekvon.bukkit.residence.chat; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.api.ChatInterface; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import java.util.HashMap; -import java.util.Map; -import org.bukkit.Server; - -public class ChatManager implements ChatInterface { - - protected Map channelmap; - protected Server server; - - public ChatManager() { - server = Residence.getInstance().getServ(); - channelmap = new HashMap(); - } - - @Override - public boolean setChannel(String player, String resName) { - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByName(resName); - if (res == null) - return false; - return setChannel(player, res); - } - - @Override - public boolean setChannel(String player, ClaimedResidence res) { - this.removeFromChannel(player); - if (!channelmap.containsKey(res.getName())) - channelmap.put(res.getName(), new ChatChannel(res.getName(), res.getChatPrefix(), res.getChannelColor())); - channelmap.get(res.getName()).join(player); - return true; - } - - @Override - public boolean removeFromChannel(String player) { - for (ChatChannel chan : channelmap.values()) { - if (chan.hasMember(player)) { - chan.leave(player); - return true; - } - } - return false; - } - - @Override - public ChatChannel getChannel(String channel) { - return channelmap.get(channel); - } - - @Override - public ChatChannel getPlayerChannel(String player) { - for (ChatChannel chan : channelmap.values()) { - if (chan.hasMember(player)) - return chan; - } - return null; - } -} +package com.bekvon.bukkit.residence.chat; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.ChatInterface; +import com.bekvon.bukkit.residence.api.ResidenceApi; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import java.util.HashMap; +import java.util.Map; +import org.bukkit.Server; + +public class ChatManager implements ChatInterface { + + protected Map channelmap; + protected Server server; + + public ChatManager() { + server = Residence.getInstance().getServ(); + channelmap = new HashMap(); + } + + @Override + public boolean setChannel(String player, String resName) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByName(resName); + if (res == null) + return false; + return setChannel(player, res); + } + + @Override + public boolean setChannel(String player, ClaimedResidence res) { + this.removeFromChannel(player); + if (!channelmap.containsKey(res.getName())) + channelmap.put(res.getName(), new ChatChannel(res.getName(), res.getChatPrefix(), res.getChannelColor())); + channelmap.get(res.getName()).join(player); + return true; + } + + @Override + public boolean removeFromChannel(String player) { + for (ChatChannel chan : channelmap.values()) { + if (chan.hasMember(player)) { + chan.leave(player); + return true; + } + } + return false; + } + + @Override + public ChatChannel getChannel(String channel) { + return channelmap.get(channel); + } + + @Override + public ChatChannel getPlayerChannel(String player) { + for (ChatChannel chan : channelmap.values()) { + if (chan.hasMember(player)) + return chan; + } + return null; + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 305faa92f..1dc23eff2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1284,6 +1284,14 @@ public String toString() { sb.append("{ x: ").append(x).append(", z: ").append(z).append(" }"); return sb.toString(); } + + public int getZ() { + return z; + } + + public int getX() { + return x; + } } } diff --git a/src/plugin.yml b/src/plugin.yml index 7ad7ffb6a..39a85a9a8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.1.2 +version: 4.7.2.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From adb30c965bca64bb50a9f2b9d2976dc1bd6998f4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 10 Sep 2017 12:14:02 +0300 Subject: [PATCH 0434/1142] Changing event type when detecting flaming arrows in none pvp zone --- .../residence/listeners/ResidenceEntityListener.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 1d710193a..ce64411d9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -939,17 +939,17 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onBlockCatchingFire(ProjectileHitEvent event) { + public void onEntityCatchingFire(EntityDamageByEntityEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; - if (!(event.getEntity() instanceof Arrow)) + if (!(event.getDamager() instanceof Arrow)) return; - - if (event.getHitEntity() == null || !(event.getHitEntity() instanceof Player)) + + if (event.getEntity() == null || !(event.getEntity() instanceof Player)) return; - Arrow arrow = (Arrow) event.getEntity(); + Arrow arrow = (Arrow) event.getDamager(); FlagPermissions perms = plugin.getPermsByLoc(arrow.getLocation()); From 3d1500e81f24e14e932c4e9d74761db27d212964 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 25 Sep 2017 17:20:34 +0300 Subject: [PATCH 0435/1142] Option to bypass tp delay with residence.tpdelaybypass --- .../residence/protection/ClaimedResidence.java | 17 ++--------------- src/plugin.yml | 2 +- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 5cbdf0a21..9ef511204 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1223,6 +1223,7 @@ public int isSafeTp(Player player) { public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { boolean isAdmin = plugin.isResAdminOn(reqPlayer); + boolean bypassDelay = targetPlayer.hasPermission("residence.tpdelaybypass"); if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") && !this.isOwner(targetPlayer)) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); PermissionGroup group = rPlayer.getGroup(); @@ -1262,24 +1263,10 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r Location loc = this.getTeleportLocation(); -// if (loc != null) { - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) performDelaydTp(loc, targetPlayer, reqPlayer, true); else performInstantTp(loc, targetPlayer, reqPlayer, true); -// } else { -// CuboidArea area = this.getMainArea(); -// if (area == null) { -// reqPlayer.sendMessage(ChatColor.RED + "Could not find area to teleport to..."); -// plugin.getTeleportDelayMap().remove(targetPlayer.getName()); -// return; -// } -// Location targloc = this.getMiddleFreeLoc(area.getHighLoc(), targetPlayer); -// if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin) -// performDelaydTp(targloc, targetPlayer, reqPlayer, true); -// else -// performInstantTp(targloc, targetPlayer, reqPlayer, true); -// } } public void TpTimer(final Player player, final int t) { diff --git a/src/plugin.yml b/src/plugin.yml index 39a85a9a8..08fde6932 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.2.0 +version: 4.7.2.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From a9a28949858e79228ef32d9807e40dd65943e571 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 25 Sep 2017 17:24:09 +0300 Subject: [PATCH 0436/1142] Small typo fix --- src/com/bekvon/bukkit/residence/ConfigManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 45637fe59..e81d01e73 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -437,7 +437,7 @@ public void UpdateConfigFile() { AutomaticResidenceCreationCheckCollision = c.get("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", true); c.getW().addComment("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", - "Defines new residence name increment when using autoamtic residence creation command if residence with that name already exist"); + "Defines new residence name increment when using automatic residence creation command if residence with that name already exist"); AutomaticResidenceCreationIncrementFormat= c.get("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "_[number]"); // c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", From 12cb8f6396106280ebdddf99bc9e31cf188c876b Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 25 Sep 2017 17:24:34 +0300 Subject: [PATCH 0437/1142] One more typo fix --- src/com/bekvon/bukkit/residence/ConfigManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index e81d01e73..3fd89efa5 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -522,7 +522,7 @@ public void UpdateConfigFile() { VoteRangeFrom = c.get("Global.Optimizations.Vote.RangeFrom", 0); VoteRangeTo = c.get("Global.Optimizations.Vote.RangeTo", 10); - c.getW().addComment("Global.Optimizations.Vote.OnlyLike", "If this true, players can onli give like for shop instead of point voting"); + c.getW().addComment("Global.Optimizations.Vote.OnlyLike", "If this true, players can only give like for shop instead of point voting"); OnlyLike = c.get("Global.Optimizations.Vote.OnlyLike", false); // Healing/Feed interval From 7668bc8189148dc8d8f7a4feadabe092501c1e55 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 25 Sep 2017 17:25:35 +0300 Subject: [PATCH 0438/1142] And one more --- src/com/bekvon/bukkit/residence/ConfigManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 3fd89efa5..57681a154 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -685,7 +685,7 @@ public void UpdateConfigFile() { CreeperExplodeBelow = c.get("Global.AntiGreef.Creeper.ExplodeBelow", false); CreeperExplodeBelowLevel = c.get("Global.AntiGreef.Creeper.level", 62); // Flow - c.getW().addComment("Global.AntiGreef.Flow.Level", "Level from witch one to start lava and water flow blocking", "This dont have effect in residence area"); + c.getW().addComment("Global.AntiGreef.Flow.Level", "Level from which one to start lava and water flow blocking", "This dont have effect in residence area"); FlowLevel = c.get("Global.AntiGreef.Flow.Level", 63); c.getW().addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); NoLava = c.get("Global.AntiGreef.Flow.NoLavaFlow", true); @@ -694,7 +694,7 @@ public void UpdateConfigFile() { NoFlowWorlds = c.get("Global.AntiGreef.Flow.Worlds", Arrays.asList(defaultWorldName)); // Place - c.getW().addComment("Global.AntiGreef.Place.Level", "Level from witch one to start block lava and water place", "This don't have effect in residence area"); + c.getW().addComment("Global.AntiGreef.Place.Level", "Level from which one to start block lava and water place", "This don't have effect in residence area"); PlaceLevel = c.get("Global.AntiGreef.Place.Level", 63); c.getW().addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); NoLavaPlace = c.get("Global.AntiGreef.Place.NoLavaPlace", true); @@ -705,7 +705,7 @@ public void UpdateConfigFile() { // Sand fall c.getW().addComment("Global.AntiGreef.BlockFall.Use", "With this set to true, falling blocks will be deleted if they will land in different area"); useBlockFall = c.get("Global.AntiGreef.BlockFall.Use", true); - c.getW().addComment("Global.AntiGreef.BlockFall.Level", "Level from witch one to start block block's fall", + c.getW().addComment("Global.AntiGreef.BlockFall.Level", "Level from which one to start block block's fall", "This don't have effect in residence area or outside"); BlockFallLevel = c.get("Global.AntiGreef.BlockFall.Level", 62); BlockFallWorlds = c.get("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName)); From e1b561df5affc0e2848a5300bf67b834389cfa4f Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 25 Sep 2017 17:58:11 +0300 Subject: [PATCH 0439/1142] Better cleaner way in editing res messages --- .../bekvon/bukkit/residence/Residence.java | 5 + .../bukkit/residence/commands/message.java | 117 +++++++----------- .../protection/ClaimedResidence.java | 30 ++--- 3 files changed, 63 insertions(+), 89 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 2e18d80f5..0032c21d6 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1798,6 +1798,11 @@ public String getPrefix() { return prefix; } + public String[] reduceArgs(String[] args) { + if (args.length <= 1) + return new String[0]; + return Arrays.copyOfRange(args, 1, args.length); + } // public TownManager getTownManager() { // return townManager; // } diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index f3f74ae75..2cf4da6ee 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -18,85 +18,58 @@ public class message implements cmd { @Override @CommandAnnotation(simple = true, priority = 1000) public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - ClaimedResidence res = null; - int start = 0; - boolean enter = false; - if (args.length < 2) { - return false; - } - if (args[1].equals("enter")) { - enter = true; - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - start = 2; - } else if (args[1].equals("leave")) { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - start = 2; - } else if (args[1].equals("remove")) { - if (args.length > 2 && args[2].equals("enter")) { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - res.setEnterLeaveMessage(player, null, true, resadmin); - } else { - plugin.msg(player, lm.Invalid_Residence); - } - return true; - } else if (args.length > 2 && args[2].equals("leave")) { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) { - res.setEnterLeaveMessage(player, null, false, resadmin); - } else { - plugin.msg(player, lm.Invalid_Residence); - } - return true; - } - plugin.msg(player, lm.Invalid_MessageType); - return true; - } else if (args.length > 2 && args[2].equals("enter")) { - enter = true; - res = plugin.getResidenceManager().getByName(args[1]); - start = 3; - } else if (args.length > 2 && args[2].equals("leave")) { - res = plugin.getResidenceManager().getByName(args[1]); - start = 3; - } else if (args.length > 2 && args[2].equals("remove")) { - res = plugin.getResidenceManager().getByName(args[1]); - if (args.length != 4) { - return false; - } - if (args[3].equals("enter")) { - if (res != null) { - res.setEnterLeaveMessage(player, null, true, resadmin); - } - return true; - } else if (args[3].equals("leave")) { - if (res != null) { - res.setEnterLeaveMessage(player, null, false, resadmin); + String message = null; + Boolean enter = null; + + c: for (String one : plugin.reduceArgs(args)) { + if (message == null) + switch (one.toLowerCase()) { + case "enter": + if (enter == null) { + enter = true; + continue; + } + break; + case "leave": + if (enter == null) { + enter = false; + continue; + } + break; + case "remove": + break c; } - return true; + + if (res == null && enter == null) { + res = plugin.getResidenceManager().getByName(one); + if (res != null) + continue; } - plugin.msg(player, lm.Invalid_MessageType); - return true; - } else { - plugin.msg(player, lm.Invalid_MessageType); - return true; + + if (message == null) + message = ""; + if (!message.isEmpty()) + message += " "; + message += one; } - if (start == 0) { - return false; + + if (res == null && sender instanceof Player) { + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); } - String message = ""; - for (int i = start; i < args.length; i++) { - message = message + args[i] + " "; + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; } - if (res != null) { - res.setEnterLeaveMessage(player, message, enter, resadmin); - } else { - plugin.msg(player, lm.Invalid_Residence); + + if (enter == null) { + plugin.msg(sender, lm.Invalid_MessageType); + return true; } + + res.setEnterLeaveMessage(sender, message, enter, resadmin); + return true; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 9ef511204..c8ba03319 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -909,34 +909,30 @@ public void setShopDesc(String message) { ShopDesc = message; } - public void setEnterLeaveMessage(Player player, String message, boolean enter, boolean resadmin) { - // if(message!=null && - // plugin.getConfigManager().getResidenceNameRegex() != null) { - // Removed pending further action - // player.sendMessage(ChatColor.RED+plugin.getLanguage().getPhrase("InvalidCharacters")); - // return; - // } + public void setEnterLeaveMessage(CommandSender sender, String message, boolean enter, boolean resadmin) { if (message != null) { if (message.equals("")) { message = null; } } - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (!group.canSetEnterLeaveMessages() && !resadmin) { - plugin.msg(player, lm.Residence_OwnerNoPermission); - return; - } - if (!perms.hasResidencePermission(player, false) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return; + if (sender instanceof Player) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer((Player) sender); + PermissionGroup group = rPlayer.getGroup(); + if (!group.canSetEnterLeaveMessages() && !resadmin) { + plugin.msg(sender, lm.Residence_OwnerNoPermission); + return; + } + if (!perms.hasResidencePermission(sender, false) && !resadmin) { + plugin.msg(sender, lm.General_NoPermission); + return; + } } if (enter) { this.setEnterMessage(message); } else { this.setLeaveMessage(message); } - plugin.msg(player, lm.Residence_MessageChange); + plugin.msg(sender, lm.Residence_MessageChange); } public Location getMiddleFreeLoc(Location insideLoc, Player player) { From 05b2b291b1bc538548ef5da6b67b3b800b0e02ec Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 25 Sep 2017 18:04:13 +0300 Subject: [PATCH 0440/1142] Separate permission for residence message editing --- .../bukkit/residence/commands/message.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 2cf4da6ee..4be978da2 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -68,6 +68,22 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } + if (enter && !plugin.hasPermission(sender, "residence.command.message.enter", true)) { + return true; + } + + if (!enter && !plugin.hasPermission(sender, "residence.command.message.leave", true)) { + return true; + } + + if (message == null && enter && !plugin.hasPermission(sender, "residence.command.message.enter.remove", true)) { + return true; + } + + if (message == null && !enter && !plugin.hasPermission(sender, "residence.command.message.leave.remove", true)) { + return true; + } + res.setEnterLeaveMessage(sender, message, enter, resadmin); return true; From 455ed0eb0cb1a103468031d9133be0fe20d629d7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 25 Sep 2017 18:04:48 +0300 Subject: [PATCH 0441/1142] Plugin default permissions --- src/plugin.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/plugin.yml b/src/plugin.yml index 08fde6932..54a743b02 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -191,6 +191,18 @@ permissions: residence.command.message: description: Allows to access particular command default: true + residence.command.message.enter: + description: Allows to access particular command + default: true + residence.command.message.enter.remove: + description: Allows to access particular command + default: true + residence.command.message.leave: + description: Allows to access particular command + default: true + residence.command.message.leave.remove: + description: Allows to access particular command + default: true residence.command.mirror: description: Allows to access particular command default: true From 73b8399e2b23b3a84fdff96213e20a5920df0182 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 25 Sep 2017 18:07:51 +0300 Subject: [PATCH 0442/1142] Dont create residence for new guy if permission is missing --- .../bukkit/residence/listeners/ResidenceBlockListener.java | 3 +++ src/plugin.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 94c984a8c..a99d87753 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -329,6 +329,9 @@ public void onChestPlace(BlockPlaceEvent event) { if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) return; + if (!player.hasPermission("residence.newguyresidence")) + return; + ArrayList list = plugin.getPlayerManager().getResidenceList(player.getName()); if (list.size() != 0) return; diff --git a/src/plugin.yml b/src/plugin.yml index 54a743b02..3743a982f 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -203,6 +203,9 @@ permissions: residence.command.message.leave.remove: description: Allows to access particular command default: true + residence.newguyresidence: + description: Allows for auto residence creation on chest place + default: true residence.command.mirror: description: Allows to access particular command default: true From 0e98b320c7e7223eadbcf8c21fb0d54cafd050a7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 25 Sep 2017 18:25:06 +0300 Subject: [PATCH 0443/1142] Log GUI clicks in console if needed --- .../bukkit/residence/ConfigManager.java | 13 ++++++++++-- .../bekvon/bukkit/residence/gui/SetFlag.java | 20 +++++++++---------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 57681a154..da31af1d7 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -83,6 +83,8 @@ public class ConfigManager { private boolean AutomaticResidenceCreationCheckCollision; private String AutomaticResidenceCreationIncrementFormat; + private boolean ConsoleLogsShowFlagChanges = true; + // Backup stuff protected boolean BackupAutoCleanUpUse; protected int BackupAutoCleanUpDays; @@ -435,10 +437,10 @@ public void UpdateConfigFile() { "When set to true /res auto command will check for new area collision with other residences to avoid overlapping.", "Set it to false to gain some performace but new residence can often overlap with old ones"); AutomaticResidenceCreationCheckCollision = c.get("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", true); - + c.getW().addComment("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "Defines new residence name increment when using automatic residence creation command if residence with that name already exist"); - AutomaticResidenceCreationIncrementFormat= c.get("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "_[number]"); + AutomaticResidenceCreationIncrementFormat = c.get("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "_[number]"); // c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", // "You can bypass this with residence.checkbadflags permission node"); @@ -525,6 +527,9 @@ public void UpdateConfigFile() { c.getW().addComment("Global.Optimizations.Vote.OnlyLike", "If this true, players can only give like for shop instead of point voting"); OnlyLike = c.get("Global.Optimizations.Vote.OnlyLike", false); + c.getW().addComment("Global.Optimizations.ConsoleLogs.ShowFlagChanges", "If this true, flag changes throw GUI will be recorded in console"); + ConsoleLogsShowFlagChanges = c.get("Global.Optimizations.ConsoleLogs.ShowFlagChanges", true); + // Healing/Feed interval c.getW().addComment("Global.Optimizations.Intervals.Heal", "How often in seconds to heal/feed players in residence with appropriate flag", "Bigger numbers can save some resources"); @@ -1775,6 +1780,10 @@ public String AutomaticResidenceCreationIncrementFormat() { return AutomaticResidenceCreationIncrementFormat; } + public boolean isConsoleLogsShowFlagChanges() { + return ConsoleLogsShowFlagChanges; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 79acef296..7c5726b53 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -104,17 +104,15 @@ else if (click.isRightClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTO } i++; } - if (targetPlayer == null) { - if (admin) - Bukkit.dispatchCommand(player, "resadmin set " + residence.getName() + " " + flag + " " + command); - else - Bukkit.dispatchCommand(player, "res set " + residence.getName() + " " + flag + " " + command); - } else { - if (admin) - Bukkit.dispatchCommand(player, "resadmin pset " + residence.getName() + " " + targetPlayer + " " + flag + " " + command); - else - Bukkit.dispatchCommand(player, "res pset " + residence.getName() + " " + targetPlayer + " " + flag + " " + command); - } + + String targetPlayerName = targetPlayer == null ? "" : " " + targetPlayer; + String actionType = targetPlayer == null ? "set" : "pset"; + String cmdPrefix = admin ? "resadmin" : "res"; + + Bukkit.dispatchCommand(player, cmdPrefix + " " + actionType + " " + residence.getName() + targetPlayerName + " " + flag + " " + command); + if (Residence.getInstance().getConfigManager().isConsoleLogsShowFlagChanges()) + Residence.getInstance().consoleMessage(player.getName() + " issued server command: /" + cmdPrefix + " " + actionType + " " + residence.getName() + targetPlayerName + " " + flag + " " + + command); } From 043c833de9332c1b38285cf8f23de4a58ee60c20 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 26 Sep 2017 18:12:06 +0300 Subject: [PATCH 0444/1142] Fix for issue with setowner --- .../bukkit/residence/containers/ResidencePlayer.java | 8 +++++++- .../residence/protection/ResidencePermissions.java | 10 +++++++++- src/plugin.yml | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 7a0571812..2915a7832 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { @@ -311,13 +312,18 @@ public void addResidence(ClaimedResidence residence) { // Exclude subzones if (residence.isSubzone()) return; + residence.getPermissions().setOwnerUUID(uuid); this.ResidenceList.add(residence); } public void removeResidence(ClaimedResidence residence) { if (residence == null) return; - this.ResidenceList.remove(residence); + + residence = Residence.getInstance().getResidenceManager().getByName(residence.getName()); + if (residence == null) + return; + boolean rem = this.ResidenceList.remove(residence); } public int getResAmount() { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 5f0e143a8..2a5c0df09 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -512,9 +512,13 @@ public void setOwner(String newOwner, boolean resetFlags) { return; Residence.getInstance().getPlayerManager().removeResFromPlayer(residence.getOwnerUUID(), residence); - Residence.getInstance().getPlayerManager().addResidence(newOwner, residence); ownerLastKnownName = newOwner; + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(newOwner); + if (rPlayer != null) + this.ownerUUID = rPlayer.getUuid(); + + Residence.getInstance().getPlayerManager().addResidence(newOwner, residence); if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase(Residence.getInstance().getServerLandname())) { ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());// the UUID for server owned land @@ -545,6 +549,10 @@ public UUID getOwnerUUID() { return ownerUUID; } + public void setOwnerUUID(UUID ownerUUID) { + this.ownerUUID = ownerUUID; + } + public String getWorld() { return world; } diff --git a/src/plugin.yml b/src/plugin.yml index 3743a982f..667574b5b 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.2.1 +version: 4.7.2.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From ecc841f4b7108f5530be61de1aa507111e94bc09 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Oct 2017 14:19:02 +0300 Subject: [PATCH 0445/1142] We dont need timer when bypassing tp delay --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 2 +- src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index c8ba03319..578ea9d1b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1250,7 +1250,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } } - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin) { + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin && !bypassDelay) { plugin.msg(reqPlayer, lm.General_TeleportStarted, this.getName(), plugin.getConfigManager().getTeleportDelay()); if (plugin.getConfigManager().isTeleportTitleMessage()) TpTimer(reqPlayer, plugin.getConfigManager().getTeleportDelay()); diff --git a/src/plugin.yml b/src/plugin.yml index 667574b5b..bd47e2ddf 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.2.2 +version: 4.7.2.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 9cbb827a579db25b73d2aff3582619fb02305ccc Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 16 Oct 2017 14:57:31 +0300 Subject: [PATCH 0446/1142] Option to customize pagination symbol --- src/com/bekvon/bukkit/residence/containers/lm.java | 1 + .../bekvon/bukkit/residence/text/help/InformationPager.java | 6 +----- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index bc6d8101b..772acd6f9 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -395,6 +395,7 @@ public enum lm { General_NotOnline("&eTarget player must be online."), General_NextInfoPage("&2| &eNext Page &2>>>"), General_PrevInfoPage("&2<<< &ePrev Page &2|"), + General_fliperSimbols("&e----------"), General_GenericPages("&ePage &6%1 &eof &6%2 &e(&6%3&e)"), General_WorldEditNotFound("&cWorldEdit was not detected."), General_CoordsTop("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index e9bf2edc5..e38423c63 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -334,11 +334,7 @@ public void run() { public void ShowPagination(CommandSender sender, int pageCount, int CurrentPage, String cmd) { if (!cmd.startsWith("/")) cmd = "/" + cmd; - String separator = ChatColor.GOLD + ""; - String simbol = "\u25AC"; - for (int i = 0; i < 10; i++) { - separator += simbol; - } + String separator = plugin.msg(lm.General_fliperSimbols); if (pageCount == 1) return; From bf613ee06262a444996a1a2d4d820b92eba12f47 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 16 Oct 2017 15:42:48 +0300 Subject: [PATCH 0447/1142] Unified spliter locale line --- src/com/bekvon/bukkit/residence/commands/shop.java | 12 ++---------- src/com/bekvon/bukkit/residence/containers/lm.java | 3 +-- .../bekvon/bukkit/residence/text/help/HelpEntry.java | 4 +--- .../bukkit/residence/text/help/InformationPager.java | 2 +- 4 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 75fa833f0..70c0f3f10 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -92,11 +92,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman List VoteList = res.GetShopVotes(); - String separator = ChatColor.GOLD + ""; - String simbol = "\u25AC"; - for (int i = 0; i < 5; i++) { - separator += simbol; - } + String separator = plugin.msg(lm.InformationPage_SmallSeparator); PageInfo pi = new PageInfo(10, VoteList.size(), page); @@ -144,11 +140,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Map ShopList = plugin.getShopSignUtilManager().getSortedShopList(); - String separator = ChatColor.GOLD + ""; - String simbol = "\u25AC"; - for (int i = 0; i < 5; i++) { - separator += simbol; - } + String separator = plugin.msg(lm.InformationPage_SmallSeparator); PageInfo pi = new PageInfo(10, ShopList.size(), page); diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 772acd6f9..fe779c518 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -303,7 +303,7 @@ public enum lm { InformationPage_NoNextPage("&e-----------------------"), InformationPage_GeneralList("&2 %1 &6- &e%2"), InformationPage_FlagsList("&2 %1 &6- &e%2"), - InformationPage_Separator("&6\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC"), + InformationPage_SmallSeparator("&6------"), Chat_ChatChannelChange("&eChanged residence chat channel to &6%1!"), Chat_ChatChannelLeave("&eLeft residence chat"), @@ -395,7 +395,6 @@ public enum lm { General_NotOnline("&eTarget player must be online."), General_NextInfoPage("&2| &eNext Page &2>>>"), General_PrevInfoPage("&2<<< &ePrev Page &2|"), - General_fliperSimbols("&e----------"), General_GenericPages("&ePage &6%1 &eof &6%2 &e(&6%3&e)"), General_WorldEditNotFound("&cWorldEdit was not detected."), General_CoordsTop("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index cc221f588..51b5a49bf 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -76,9 +76,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p return; } - String separator = Residence.getInstance().msg(lm.InformationPage_Separator); - if (!(sender instanceof Player)) - separator = "----------"; + String separator = Residence.getInstance().msg(lm.InformationPage_SmallSeparator); sender.sendMessage(separator + " " + Residence.getInstance().msg(lm.General_HelpPageHeader, path, page, pi.getTotalPages()) + " " + separator); for (int i = pi.getStart(); i <= pi.getEnd(); i++) { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index e38423c63..2df4834c6 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -334,7 +334,7 @@ public void run() { public void ShowPagination(CommandSender sender, int pageCount, int CurrentPage, String cmd) { if (!cmd.startsWith("/")) cmd = "/" + cmd; - String separator = plugin.msg(lm.General_fliperSimbols); + String separator = plugin.msg(lm.InformationPage_SmallSeparator); if (pageCount == 1) return; From c29d3896b8731255a4756fa5889931f75fd6a896 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 16 Oct 2017 15:56:09 +0300 Subject: [PATCH 0448/1142] Better way in removing residence from player --- .../residence/containers/ResidencePlayer.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 2915a7832..281699d8b 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -1,7 +1,10 @@ package com.bekvon.bukkit.residence.containers; import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; +import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; @@ -11,7 +14,6 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { @@ -21,7 +23,7 @@ public class ResidencePlayer { private OfflinePlayer ofPlayer = null; private UUID uuid = null; - private List ResidenceList = new ArrayList(); + private Set ResidenceList = new HashSet(); private ClaimedResidence mainResidence = null; private PlayerGroup groups = null; @@ -313,17 +315,26 @@ public void addResidence(ClaimedResidence residence) { if (residence.isSubzone()) return; residence.getPermissions().setOwnerUUID(uuid); + if (this.userName != null) + residence.getPermissions().setOwnerLastKnownName(userName); this.ResidenceList.add(residence); } public void removeResidence(ClaimedResidence residence) { - if (residence == null) - return; - - residence = Residence.getInstance().getResidenceManager().getByName(residence.getName()); if (residence == null) return; boolean rem = this.ResidenceList.remove(residence); + // in case its fails to remove, double check by name + if (rem == false) { + Iterator iter = this.ResidenceList.iterator(); + while (iter.hasNext()) { + ClaimedResidence one = iter.next(); + if (one.getName().equalsIgnoreCase(residence.getName())) { + iter.remove(); + break; + } + } + } } public int getResAmount() { @@ -337,7 +348,9 @@ public int getResAmount() { } public List getResList() { - return ResidenceList; + List ls = new ArrayList(); + ls.addAll(ResidenceList); + return ls; } public String getPlayerName() { From 35d702e8d90e9b15c58091fc67fb8f64aaced2a9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 23 Nov 2017 11:55:28 +0200 Subject: [PATCH 0449/1142] Bypass random tp delay with permission node --- src/com/bekvon/bukkit/residence/commands/rt.java | 2 +- .../bekvon/bukkit/residence/protection/FlagPermissions.java | 2 +- .../bukkit/residence/protection/ResidenceManager.java | 3 ++- .../bukkit/residence/protection/ResidencePermissions.java | 6 ++++-- src/plugin.yml | 2 +- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index f6eb0695c..de3bc4881 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -105,7 +105,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (plugin.getConfigManager().getTeleportDelay() > 0 && !resadmin) { + if (plugin.getConfigManager().getTeleportDelay() > 0 && !resadmin && !plugin.hasPermission(sender, "residence.randomtp.delaybypass")) { plugin.msg(tPlayer, lm.RandomTeleport_TeleportStarted, loc.getX(), loc.getY(), loc .getZ(), plugin.getConfigManager().getTeleportDelay()); plugin.getTeleportDelayMap().add(tPlayer.getName()); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index e6fd1f6dc..7fb62e0eb 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -630,7 +630,7 @@ public Map save(String world) { return root; } - private HashMap> clone(Map> map) { + private static HashMap> clone(Map> map) { HashMap> nm = new HashMap>(); for (Entry> one : map.entrySet()) { nm.put(one.getKey(), new HashMap(one.getValue())); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1dc23eff2..8043917f0 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1150,7 +1150,8 @@ public void giveResidence(Player reqPlayer, String targPlayer, ClaimedResidence } } - res.getPermissions().setOwner(giveplayer, true); + if (!res.getPermissions().setOwner(giveplayer, true)) + return; // Fix phrases here plugin.msg(reqPlayer, lm.Residence_Give, residence, giveplayer.getName()); plugin.msg(giveplayer, lm.Residence_Recieve, residence, reqPlayer.getName()); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 2a5c0df09..7f95a6709 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -483,14 +483,14 @@ public void applyDefaultFlags() { } } - public void setOwner(Player player, boolean resetFlags) { + public boolean setOwner(Player player, boolean resetFlags) { ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, player); Residence.getInstance().getServ().getPluginManager().callEvent(ownerchange); // Dont change owner if event is canceled if (ownerchange.isCancelled()) - return; + return false; Residence.getInstance().getPlayerManager().removeResFromPlayer(residence.getOwnerUUID(), residence); Residence.getInstance().getPlayerManager().addResidence(player, residence); @@ -500,6 +500,8 @@ public void setOwner(Player player, boolean resetFlags) { if (resetFlags) this.applyDefaultFlags(); + + return true; } public void setOwner(String newOwner, boolean resetFlags) { diff --git a/src/plugin.yml b/src/plugin.yml index bd47e2ddf..70cdd3b0e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.2.3 +version: 4.7.2.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From b8220ad8cc4f28a90d38f2135c3111af117c1cec Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 23 Nov 2017 12:17:51 +0200 Subject: [PATCH 0450/1142] Formated bank money value --- .../bekvon/bukkit/residence/Residence.java | 16 +- .../bukkit/residence/economy/BOSEAdapter.java | 134 ++++---- .../residence/economy/EconomyInterface.java | 3 + .../economy/EssentialsEcoAdapter.java | 210 ++++++------ .../residence/economy/IConomy5Adapter.java | 5 + .../residence/economy/IConomy6Adapter.java | 154 +++++---- .../residence/economy/RealShopEconomy.java | 4 + .../residence/economy/ResidenceBank.java | 8 + .../protection/ResidenceManager.java | 2 +- .../vaultinterface/ResidenceVaultAdapter.java | 317 +++++++++--------- 10 files changed, 452 insertions(+), 401 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 0032c21d6..1b97eaac6 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1218,8 +1218,12 @@ protected boolean loadYml() throws Exception { Map ms = (Map) yml.getRoot().get("Messages"); if (ms != null) { for (Entry one : ms.entrySet()) { - Map msgs = (Map) one.getValue(); - c.put(one.getKey(), new MinimizeMessages(one.getKey(), msgs.get("EnterMessage"), msgs.get("LeaveMessage"))); + try { + Map msgs = (Map) one.getValue(); + c.put(one.getKey(), new MinimizeMessages(one.getKey(), msgs.get("EnterMessage"), msgs.get("LeaveMessage"))); + } catch (Exception e) { + + } } getResidenceManager().getCacheMessages().put(world.getName(), c); } @@ -1232,8 +1236,12 @@ protected boolean loadYml() throws Exception { Map ms = (Map) yml.getRoot().get("Flags"); if (ms != null) { for (Entry one : ms.entrySet()) { - HashMap msgs = (HashMap) one.getValue(); - c.put(one.getKey(), new MinimizeFlags(one.getKey(), msgs)); + try { + HashMap msgs = (HashMap) one.getValue(); + c.put(one.getKey(), new MinimizeFlags(one.getKey(), msgs)); + } catch (Exception e) { + + } } getResidenceManager().getCacheFlags().put(world.getName(), c); } diff --git a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java index 09513b9a4..b171671e7 100644 --- a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java @@ -1,65 +1,71 @@ -package com.bekvon.bukkit.residence.economy; - -import com.bekvon.bukkit.residence.Residence; - -import cosine.boseconomy.BOSEconomy; - -public class BOSEAdapter implements EconomyInterface { - - BOSEconomy plugin; - - public BOSEAdapter(BOSEconomy p) { - plugin = p; - String serverland = Residence.getInstance().getServerLandname(); - if (!plugin.playerRegistered(serverland, false)) { - plugin.registerPlayer(serverland); - } - } - - @Override - public double getBalance(String playerName) { - return plugin.getPlayerMoneyDouble(playerName); - } - - @Override - public boolean canAfford(String playerName, double amount) { - double balance = plugin.getPlayerMoneyDouble(playerName); - if (balance >= amount) { - return true; - } - return false; - } - - @Override - public boolean add(String playerName, double amount) { - return plugin.setPlayerMoney(playerName, plugin.getPlayerMoneyDouble(playerName) + amount, false); - } - - @Override - public boolean subtract(String playerName, double amount) { - if (canAfford(playerName, amount)) { - return plugin.setPlayerMoney(playerName, plugin.getPlayerMoneyDouble(playerName) - amount, false); - } - return false; - } - - @Override - public boolean transfer(String playerFrom, String playerTo, double amount) { - if (canAfford(playerFrom, amount)) { - if (!subtract(playerFrom, amount)) { - return false; - } - if (!add(playerTo, amount)) { - add(playerFrom, amount); - return false; - } - return true; - } - return false; - } - - @Override - public String getName() { - return "BOSEconomy"; - } +package com.bekvon.bukkit.residence.economy; + +import com.bekvon.bukkit.residence.Residence; + +import cosine.boseconomy.BOSEconomy; + +public class BOSEAdapter implements EconomyInterface { + + BOSEconomy plugin; + + public BOSEAdapter(BOSEconomy p) { + plugin = p; + String serverland = Residence.getInstance().getServerLandname(); + if (!plugin.playerRegistered(serverland, false)) { + plugin.registerPlayer(serverland); + } + } + + @Override + public double getBalance(String playerName) { + return plugin.getPlayerMoneyDouble(playerName); + } + + @Override + public boolean canAfford(String playerName, double amount) { + double balance = plugin.getPlayerMoneyDouble(playerName); + if (balance >= amount) { + return true; + } + return false; + } + + @Override + public boolean add(String playerName, double amount) { + return plugin.setPlayerMoney(playerName, plugin.getPlayerMoneyDouble(playerName) + amount, false); + } + + @Override + public boolean subtract(String playerName, double amount) { + if (canAfford(playerName, amount)) { + return plugin.setPlayerMoney(playerName, plugin.getPlayerMoneyDouble(playerName) - amount, false); + } + return false; + } + + @Override + public boolean transfer(String playerFrom, String playerTo, double amount) { + if (canAfford(playerFrom, amount)) { + if (!subtract(playerFrom, amount)) { + return false; + } + if (!add(playerTo, amount)) { + add(playerFrom, amount); + return false; + } + return true; + } + return false; + } + + @Override + public String getName() { + return "BOSEconomy"; + } + + @Override + public String format(double amount) { + return plugin.getMoneyFormatted(amount); + } + } \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java b/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java index 4485144bb..e9911ce87 100644 --- a/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java +++ b/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java @@ -12,4 +12,7 @@ public interface EconomyInterface { public boolean transfer(String playerFrom, String playerTo, double amount); public String getName(); + + public String format(double amount); + } diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index 0959bc49a..7de5b7c73 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -1,103 +1,107 @@ -package com.bekvon.bukkit.residence.economy; - -import com.bekvon.bukkit.residence.Residence; -import com.earth2me.essentials.Essentials; -import com.earth2me.essentials.api.Economy; -import com.earth2me.essentials.api.NoLoanPermittedException; -import com.earth2me.essentials.api.UserDoesNotExistException; - -public class EssentialsEcoAdapter implements EconomyInterface { - - Essentials plugin; - - public EssentialsEcoAdapter(Essentials p) { - plugin = p; - String serverland = Residence.getInstance().getServerLandname(); - if (!Economy.playerExists(serverland)) { - Economy.createNPC(serverland); - } - } - - @SuppressWarnings("deprecation") - @Override - public double getBalance(String playerName) { - try { - if (Economy.playerExists(playerName)) { - return Economy.getMoney(playerName); - } - return 0; - } catch (UserDoesNotExistException ex) { - return 0; - } - } - - @SuppressWarnings("deprecation") - @Override - public boolean canAfford(String playerName, double amount) { - try { - if (Economy.playerExists(playerName)) { - return Economy.hasEnough(playerName, amount); - } - return false; - } catch (UserDoesNotExistException ex) { - return false; - } - } - - @SuppressWarnings("deprecation") - @Override - public boolean add(String playerName, double amount) { - if (Economy.playerExists(playerName)) { - try { - Economy.add(playerName, amount); - return true; - } catch (UserDoesNotExistException ex) { - return false; - } catch (NoLoanPermittedException ex) { - return false; - } - } - return false; - } - - @SuppressWarnings("deprecation") - @Override - public boolean subtract(String playerName, double amount) { - if (Economy.playerExists(playerName)) { - try { - Economy.subtract(playerName, amount); - return true; - } catch (UserDoesNotExistException ex) { - return false; - } catch (NoLoanPermittedException ex) { - return false; - } - } - return false; - } - - @SuppressWarnings("deprecation") - @Override - public boolean transfer(String playerFrom, String playerTo, double amount) { - try { - if (Economy.playerExists(playerFrom) && Economy.playerExists(playerTo) && Economy.hasEnough(playerFrom, amount)) { - if (!subtract(playerFrom, amount)) - return false; - if (!add(playerTo, amount)) { - add(playerFrom, amount); - return false; - } - return true; - } - } catch (UserDoesNotExistException ex) { - return false; - } - return false; - } - - @Override - public String getName() { - return "EssentialsEconomy"; - } - -} +package com.bekvon.bukkit.residence.economy; + +import com.bekvon.bukkit.residence.Residence; +import com.earth2me.essentials.Essentials; +import com.earth2me.essentials.api.Economy; +import com.earth2me.essentials.api.NoLoanPermittedException; +import com.earth2me.essentials.api.UserDoesNotExistException; + +public class EssentialsEcoAdapter implements EconomyInterface { + + Essentials plugin; + + public EssentialsEcoAdapter(Essentials p) { + plugin = p; + String serverland = Residence.getInstance().getServerLandname(); + if (!Economy.playerExists(serverland)) { + Economy.createNPC(serverland); + } + } + + @SuppressWarnings("deprecation") + @Override + public double getBalance(String playerName) { + try { + if (Economy.playerExists(playerName)) { + return Economy.getMoney(playerName); + } + return 0; + } catch (UserDoesNotExistException ex) { + return 0; + } + } + + @SuppressWarnings("deprecation") + @Override + public boolean canAfford(String playerName, double amount) { + try { + if (Economy.playerExists(playerName)) { + return Economy.hasEnough(playerName, amount); + } + return false; + } catch (UserDoesNotExistException ex) { + return false; + } + } + + @SuppressWarnings("deprecation") + @Override + public boolean add(String playerName, double amount) { + if (Economy.playerExists(playerName)) { + try { + Economy.add(playerName, amount); + return true; + } catch (UserDoesNotExistException ex) { + return false; + } catch (NoLoanPermittedException ex) { + return false; + } + } + return false; + } + + @SuppressWarnings("deprecation") + @Override + public boolean subtract(String playerName, double amount) { + if (Economy.playerExists(playerName)) { + try { + Economy.subtract(playerName, amount); + return true; + } catch (UserDoesNotExistException ex) { + return false; + } catch (NoLoanPermittedException ex) { + return false; + } + } + return false; + } + + @SuppressWarnings("deprecation") + @Override + public boolean transfer(String playerFrom, String playerTo, double amount) { + try { + if (Economy.playerExists(playerFrom) && Economy.playerExists(playerTo) && Economy.hasEnough(playerFrom, amount)) { + if (!subtract(playerFrom, amount)) + return false; + if (!add(playerTo, amount)) { + add(playerFrom, amount); + return false; + } + return true; + } + } catch (UserDoesNotExistException ex) { + return false; + } + return false; + } + + @Override + public String getName() { + return "EssentialsEconomy"; + } + + @Override + public String format(double amount) { + return Economy.format(amount); + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java index 4044aee4b..cff7302e1 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java @@ -56,4 +56,9 @@ public boolean transfer(String playerFrom, String playerTo, double amount) { public String getName() { return "iConomy"; } + + @Override + public String format(double amount) { + return iConomy.format(amount); + } } diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java index 64f0975b4..4c8315c65 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java @@ -1,74 +1,80 @@ -package com.bekvon.bukkit.residence.economy; - -import com.iCo6.iConomy; -import com.iCo6.system.Account; -import com.iCo6.system.Accounts; - -public class IConomy6Adapter implements EconomyInterface { - - iConomy icon; - - public IConomy6Adapter(iConomy iconomy) { - icon = iconomy; - } - - @Override - public double getBalance(String playerName) { - checkExist(playerName); - return new Accounts().get(playerName).getHoldings().getBalance(); - } - - @Override - public boolean canAfford(String playerName, double amount) { - checkExist(playerName); - double holdings = this.getBalance(playerName); - if (holdings >= amount) { - return true; - } - return false; - } - - @Override - public boolean add(String playerName, double amount) { - checkExist(playerName); - new Accounts().get(playerName).getHoldings().add(amount); - return true; - } - - @Override - public boolean subtract(String playerName, double amount) { - checkExist(playerName); - if (this.canAfford(playerName, amount)) { - new Accounts().get(playerName).getHoldings().subtract(amount); - return true; - } - return false; - } - - @Override - public boolean transfer(String playerFrom, String playerTo, double amount) { - checkExist(playerTo); - checkExist(playerFrom); - if (this.canAfford(playerFrom, amount)) { - Account p1 = new Accounts().get(playerFrom); - Account p2 = new Accounts().get(playerTo); - p1.getHoldings().subtract(amount); - p2.getHoldings().add(amount); - return true; - } - return false; - } - - private static void checkExist(String playerName) { - Accounts acc = new Accounts(); - if (!acc.exists(playerName)) { - acc.create(playerName); - } - } - - @Override - public String getName() { - return "iConomy"; - } - -} +package com.bekvon.bukkit.residence.economy; + +import com.iCo6.iConomy; +import com.iCo6.system.Account; +import com.iCo6.system.Accounts; + +public class IConomy6Adapter implements EconomyInterface { + + iConomy icon; + + public IConomy6Adapter(iConomy iconomy) { + icon = iconomy; + } + + @Override + public double getBalance(String playerName) { + checkExist(playerName); + return new Accounts().get(playerName).getHoldings().getBalance(); + } + + @Override + public boolean canAfford(String playerName, double amount) { + checkExist(playerName); + double holdings = this.getBalance(playerName); + if (holdings >= amount) { + return true; + } + return false; + } + + @Override + public boolean add(String playerName, double amount) { + checkExist(playerName); + new Accounts().get(playerName).getHoldings().add(amount); + return true; + } + + @Override + public boolean subtract(String playerName, double amount) { + checkExist(playerName); + if (this.canAfford(playerName, amount)) { + new Accounts().get(playerName).getHoldings().subtract(amount); + return true; + } + return false; + } + + @Override + public boolean transfer(String playerFrom, String playerTo, double amount) { + checkExist(playerTo); + checkExist(playerFrom); + if (this.canAfford(playerFrom, amount)) { + Account p1 = new Accounts().get(playerFrom); + Account p2 = new Accounts().get(playerTo); + p1.getHoldings().subtract(amount); + p2.getHoldings().add(amount); + return true; + } + return false; + } + + private static void checkExist(String playerName) { + Accounts acc = new Accounts(); + if (!acc.exists(playerName)) { + acc.create(playerName); + } + } + + @Override + public String getName() { + return "iConomy"; + } + + + @Override + public String format(double amount) { + return iConomy.format(amount); + } + +} diff --git a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java index 9b23cf6ce..b648cfb8f 100644 --- a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java @@ -58,4 +58,8 @@ public String getName() { return "RealShopEconomy"; } + @Override + public String format(double amount) { + return plugin.format(amount); + } } diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index 3232fda92..fa7cc7f8a 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -23,6 +23,14 @@ public int getStoredMoney() { return storedMoney; } + public String getStoredMoneyFormated() { + try{ + return Residence.getInstance().getEconomyManager().format(storedMoney); + }catch(Exception e){ + return String.valueOf(this.storedMoney); + } + } + public void setStoredMoney(int amount) { storedMoney = amount; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 8043917f0..7af4c136a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -638,7 +638,7 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi resNameOwner += plugin.msg(lm.General_Owner, perms.getOwner()); if (plugin.getConfigManager().enableEconomy()) { if (res.isOwner(sender) || !(sender instanceof Player) || resadmin) - resNameOwner += plugin.msg(lm.Bank_Name, res.getBank().getStoredMoney()); + resNameOwner += plugin.msg(lm.Bank_Name, res.getBank().getStoredMoneyFormated()); } resNameOwner = ChatColor.translateAlternateColorCodes('&', resNameOwner); diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 6a758b1ce..3aad7ab2c 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -1,156 +1,163 @@ -package com.bekvon.bukkit.residence.vaultinterface; - -import com.bekvon.bukkit.residence.economy.EconomyInterface; -import com.bekvon.bukkit.residence.permissions.PermissionsInterface; -import net.milkbowl.vault.chat.Chat; -import net.milkbowl.vault.economy.Economy; -import net.milkbowl.vault.permission.Permission; - -import org.bukkit.OfflinePlayer; -import org.bukkit.Server; -import org.bukkit.entity.Player; -import org.bukkit.plugin.RegisteredServiceProvider; - -public class ResidenceVaultAdapter implements EconomyInterface, PermissionsInterface { - - public static Permission permissions = null; - public static Economy economy = null; - public static Chat chat = null; - - public boolean permissionsOK() { - if (permissions != null && !permissions.getName().equalsIgnoreCase("SuperPerms")) { - return true; - } - return false; - } - - public boolean economyOK() { - return economy != null; - } - - public boolean chatOK() { - return chat != null; - } - - public ResidenceVaultAdapter(Server s) { - setupPermissions(s); - setupEconomy(s); - setupChat(s); - } - - private static boolean setupPermissions(Server s) { - RegisteredServiceProvider permissionProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); - if (permissionProvider != null) { - permissions = permissionProvider.getProvider(); - } - return (permissions != null); - } - - private static boolean setupChat(Server s) { - RegisteredServiceProvider chatProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); - if (chatProvider != null) { - chat = chatProvider.getProvider(); - } - return (chat != null); - } - - private static boolean setupEconomy(Server s) { - RegisteredServiceProvider economyProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); - if (economyProvider != null) { - economy = economyProvider.getProvider(); - } - return (economy != null); - } - - @Override - public String getPlayerGroup(Player player) { - String group = permissions.getPrimaryGroup(player).toLowerCase(); - if (group == null) { - return group; - } - return group.toLowerCase(); - } - - @Override - public String getPlayerGroup(String player, String world) { - @SuppressWarnings("deprecation") - String group = permissions.getPrimaryGroup(world, player); - if (group == null) { - return group; - } - return group.toLowerCase(); - } - - public static boolean hasPermission(OfflinePlayer player, String perm, String world) { - if (permissions == null) - return false; - try { - return permissions.playerHas(world, player, perm); - } catch (Exception e) { - return false; - } - } - - @SuppressWarnings("deprecation") - @Override - public double getBalance(String playerName) { - return economy.getBalance(playerName); - } - - @SuppressWarnings("deprecation") - @Override - public boolean canAfford(String playerName, double amount) { - return economy.has(playerName, amount); - } - - @SuppressWarnings("deprecation") - @Override - public boolean add(String playerName, double amount) { - return economy.depositPlayer(playerName, amount).transactionSuccess(); - } - - @SuppressWarnings("deprecation") - @Override - public boolean subtract(String playerName, double amount) { - return economy.withdrawPlayer(playerName, amount).transactionSuccess(); - } - - @SuppressWarnings("deprecation") - @Override - public boolean transfer(String playerFrom, String playerTo, double amount) { - if (economy.withdrawPlayer(playerFrom, amount).transactionSuccess()) { - if (economy.depositPlayer(playerTo, amount).transactionSuccess()) { - return true; - } - economy.depositPlayer(playerFrom, amount); - return false; - } - return false; - } - - public String getEconomyName() { - if (economy != null) { - return economy.getName(); - } - return ""; - } - - public String getPermissionsName() { - if (permissions != null) { - return permissions.getName(); - } - return ""; - } - - public String getChatName() { - if (chat != null) { - return chat.getName(); - } - return ""; - } - - @Override - public String getName() { - return "Vault"; - } +package com.bekvon.bukkit.residence.vaultinterface; + +import com.bekvon.bukkit.residence.economy.EconomyInterface; +import com.bekvon.bukkit.residence.permissions.PermissionsInterface; +import net.milkbowl.vault.chat.Chat; +import net.milkbowl.vault.economy.Economy; +import net.milkbowl.vault.permission.Permission; + +import org.bukkit.OfflinePlayer; +import org.bukkit.Server; +import org.bukkit.entity.Player; +import org.bukkit.plugin.RegisteredServiceProvider; + +public class ResidenceVaultAdapter implements EconomyInterface, PermissionsInterface { + + public static Permission permissions = null; + public static Economy economy = null; + public static Chat chat = null; + + public boolean permissionsOK() { + if (permissions != null && !permissions.getName().equalsIgnoreCase("SuperPerms")) { + return true; + } + return false; + } + + public boolean economyOK() { + return economy != null; + } + + public boolean chatOK() { + return chat != null; + } + + public ResidenceVaultAdapter(Server s) { + setupPermissions(s); + setupEconomy(s); + setupChat(s); + } + + private static boolean setupPermissions(Server s) { + RegisteredServiceProvider permissionProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); + if (permissionProvider != null) { + permissions = permissionProvider.getProvider(); + } + return (permissions != null); + } + + private static boolean setupChat(Server s) { + RegisteredServiceProvider chatProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); + if (chatProvider != null) { + chat = chatProvider.getProvider(); + } + return (chat != null); + } + + private static boolean setupEconomy(Server s) { + RegisteredServiceProvider economyProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); + if (economyProvider != null) { + economy = economyProvider.getProvider(); + } + return (economy != null); + } + + @Override + public String getPlayerGroup(Player player) { + String group = permissions.getPrimaryGroup(player).toLowerCase(); + if (group == null) { + return group; + } + return group.toLowerCase(); + } + + @Override + public String getPlayerGroup(String player, String world) { + @SuppressWarnings("deprecation") + String group = permissions.getPrimaryGroup(world, player); + if (group == null) { + return group; + } + return group.toLowerCase(); + } + + public static boolean hasPermission(OfflinePlayer player, String perm, String world) { + if (permissions == null) + return false; + try { + return permissions.playerHas(world, player, perm); + } catch (Exception e) { + return false; + } + } + + @SuppressWarnings("deprecation") + @Override + public double getBalance(String playerName) { + return economy.getBalance(playerName); + } + + @SuppressWarnings("deprecation") + @Override + public boolean canAfford(String playerName, double amount) { + return economy.has(playerName, amount); + } + + @SuppressWarnings("deprecation") + @Override + public boolean add(String playerName, double amount) { + return economy.depositPlayer(playerName, amount).transactionSuccess(); + } + + @SuppressWarnings("deprecation") + @Override + public boolean subtract(String playerName, double amount) { + return economy.withdrawPlayer(playerName, amount).transactionSuccess(); + } + + @SuppressWarnings("deprecation") + @Override + public boolean transfer(String playerFrom, String playerTo, double amount) { + if (economy.withdrawPlayer(playerFrom, amount).transactionSuccess()) { + if (economy.depositPlayer(playerTo, amount).transactionSuccess()) { + return true; + } + economy.depositPlayer(playerFrom, amount); + return false; + } + return false; + } + + public String getEconomyName() { + if (economy != null) { + return economy.getName(); + } + return ""; + } + + public String getPermissionsName() { + if (permissions != null) { + return permissions.getName(); + } + return ""; + } + + public String getChatName() { + if (chat != null) { + return chat.getName(); + } + return ""; + } + + @Override + public String getName() { + return "Vault"; + } + + @Override + public String format(double amount) { + return economy.format(amount); + } + + } \ No newline at end of file From 7ca2bdb13d3121d6ea689d13337c3fe7d304762d Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 23 Nov 2017 12:45:23 +0200 Subject: [PATCH 0451/1142] BlackHoleEconomy in case there is none Allow double format amounts for bank --- .../bekvon/bukkit/residence/Residence.java | 1 + .../bukkit/residence/commands/bank.java | 6 +-- .../bukkit/residence/commands/lease.java | 8 ++-- .../bukkit/residence/commands/resbank.java | 6 +-- .../residence/economy/BlackHoleEconomy.java | 43 +++++++++++++++++++ .../residence/economy/ResidenceBank.java | 39 +++++++++++------ .../residence/economy/TransactionManager.java | 6 +-- .../protection/ClaimedResidence.java | 12 ++++-- .../residence/protection/LeaseManager.java | 16 +++++-- 9 files changed, 104 insertions(+), 33 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/economy/BlackHoleEconomy.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 1b97eaac6..23c258903 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -580,6 +580,7 @@ public void onEnable() { } if (economy == null) { Bukkit.getConsoleSender().sendMessage(getPrefix() + " Unable to find an economy system..."); + economy = new BlackHoleEconomy(); } } diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index ff8e6a197..7d22e63b8 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -35,12 +35,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(sender, lm.Residence_NotIn); return true; } - int amount = 0; + double amount = 0D; try { if (args.length == 3) - amount = Integer.parseInt(args[2]); + amount = Double.parseDouble(args[2]); else - amount = Integer.parseInt(args[3]); + amount = Double.parseDouble(args[3]); } catch (Exception ex) { plugin.msg(sender, lm.Invalid_Amount); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index 0ff6bfdd1..0a8c62437 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -138,8 +138,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (args.length == 3) { ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); if (res == null || plugin.getLeaseManager().isLeased(res)) { - int cost = plugin.getLeaseManager().getRenewCost(res); - plugin.msg(player, lm.Economy_LeaseRenewalCost, args[2], cost); + double cost = plugin.getLeaseManager().getRenewCostD(res); + plugin.msg(player, lm.Economy_LeaseRenewalCost, args[2], plugin.getEconomyManager().format(cost)); } else { plugin.msg(player, lm.Economy_LeaseNotExpire); } @@ -152,8 +152,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } String area = res.getName(); if (plugin.getLeaseManager().isLeased(res)) { - int cost = plugin.getLeaseManager().getRenewCost(res); - plugin.msg(player, lm.Economy_LeaseRenewalCost, area, cost); + double cost = plugin.getLeaseManager().getRenewCostD(res); + plugin.msg(player, lm.Economy_LeaseRenewalCost, area, plugin.getEconomyManager().format(cost)); } else { plugin.msg(player, lm.Economy_LeaseNotExpire); } diff --git a/src/com/bekvon/bukkit/residence/commands/resbank.java b/src/com/bekvon/bukkit/residence/commands/resbank.java index 6b6b60802..6faa2ffad 100644 --- a/src/com/bekvon/bukkit/residence/commands/resbank.java +++ b/src/com/bekvon/bukkit/residence/commands/resbank.java @@ -38,12 +38,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(sender, lm.Residence_NotIn); return true; } - int amount = 0; + double amount = 0D; try { if (args.length == 3) - amount = Integer.parseInt(args[2]); + amount = Double.parseDouble(args[2]); else - amount = Integer.parseInt(args[3]); + amount = Double.parseDouble(args[3]); } catch (Exception ex) { plugin.msg(sender, lm.Invalid_Amount); return true; diff --git a/src/com/bekvon/bukkit/residence/economy/BlackHoleEconomy.java b/src/com/bekvon/bukkit/residence/economy/BlackHoleEconomy.java new file mode 100644 index 000000000..965529a2e --- /dev/null +++ b/src/com/bekvon/bukkit/residence/economy/BlackHoleEconomy.java @@ -0,0 +1,43 @@ +package com.bekvon.bukkit.residence.economy; + +public class BlackHoleEconomy implements EconomyInterface { + + public BlackHoleEconomy() { + } + + @Override + public double getBalance(String playerName) { + return 0D; + } + + @Override + public boolean canAfford(String playerName, double amount) { + return false; + } + + @Override + public boolean add(String playerName, double amount) { + return false; + } + + @Override + public boolean subtract(String playerName, double amount) { + return false; + } + + @Override + public boolean transfer(String playerFrom, String playerTo, double amount) { + return false; + } + + @Override + public String getName() { + return "BlackHoleEconomy"; + } + + @Override + public String format(double amount) { + return String.valueOf(Math.round(amount * 100) / 100D); + } + +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index fa7cc7f8a..4c8c825a3 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -11,47 +11,57 @@ import org.bukkit.entity.Player; public class ResidenceBank { - int storedMoney; + Double storedMoney; ClaimedResidence res; public ResidenceBank(ClaimedResidence parent) { - storedMoney = 0; + storedMoney = 0D; res = parent; } + @Deprecated public int getStoredMoney() { + return storedMoney.intValue(); + } + + public Double getStoredMoneyD() { return storedMoney; } - public String getStoredMoneyFormated() { - try{ - return Residence.getInstance().getEconomyManager().format(storedMoney); - }catch(Exception e){ + public String getStoredMoneyFormated() { + try { + return Residence.getInstance().getEconomyManager().format(storedMoney); + } catch (Exception e) { return String.valueOf(this.storedMoney); } } - public void setStoredMoney(int amount) { + public void setStoredMoney(double amount) { storedMoney = amount; } - public void add(int amount) { + public void add(double amount) { storedMoney = storedMoney + amount; } - public boolean hasEnough(int amount) { + public boolean hasEnough(double amount) { if (storedMoney >= amount) return true; return false; } - public void subtract(int amount) { + public void subtract(double amount) { storedMoney = storedMoney - amount; if (storedMoney < 0) - storedMoney = 0; + storedMoney = 0D; } + @Deprecated public void withdraw(CommandSender sender, int amount, boolean resadmin) { + withdraw(sender, (double) amount, resadmin); + } + + public void withdraw(CommandSender sender, double amount, boolean resadmin) { if (!(sender instanceof Player)) return; Player player = (Player) sender; @@ -72,7 +82,12 @@ public void withdraw(CommandSender sender, int amount, boolean resadmin) { } } + @Deprecated public void deposit(CommandSender sender, int amount, boolean resadmin) { + deposit(sender, (double) amount, resadmin); + } + + public void deposit(CommandSender sender, double amount, boolean resadmin) { if (!(sender instanceof Player)) return; Player player = (Player) sender; @@ -89,7 +104,7 @@ public void deposit(CommandSender sender, int amount, boolean resadmin) { } if (sender instanceof Player && Residence.getInstance().getEconomyManager().subtract(sender.getName(), amount) || !(sender instanceof Player)) { this.add(amount); - Residence.getInstance().msg(sender, lm.Bank_Deposit, String.format("%d", amount)); + Residence.getInstance().msg(sender, lm.Bank_Deposit, Residence.getInstance().getEconomyManager().format(amount)); } } } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index ed514b102..20057b8b3 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -61,7 +61,7 @@ public boolean giveEconomyMoney(Player player, int amount) { } econ.add(player.getName(), amount); - plugin.msg(player, lm.Economy_MoneyAdded, String.format("%d", amount), econ.getName()); + plugin.msg(player, lm.Economy_MoneyAdded, plugin.getEconomyManager().format(amount), econ.getName()); return true; } @@ -233,12 +233,12 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { v.setAreas(res); plugin.getSelectionManager().showBounds(player, v); - plugin.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); + plugin.msg(player, lm.Economy_MoneyCharged, plugin.getEconomyManager().format(amount), econ.getName()); plugin.msg(player, lm.Residence_Bought, res.getResidenceName()); Player seller = serv.getPlayer(sellerName); if (seller != null && seller.isOnline()) { seller.sendMessage(plugin.msg(lm.Residence_Buy, player.getName(), res.getResidenceName())); - seller.sendMessage(plugin.msg(lm.Economy_MoneyCredit, String.format("%d", amount), econ.getName())); + seller.sendMessage(plugin.msg(lm.Economy_MoneyCredit, plugin.getEconomyManager().format(amount), econ.getName())); } } else { plugin.msg(player, lm.Economy_NotEnoughMoney); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 578ea9d1b..6f950369c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1409,8 +1409,8 @@ public Map save() { if (ShopDesc != null) root.put("ShopDescription", ShopDesc); - if (bank.getStoredMoney() != 0) - root.put("StoredMoney", bank.getStoredMoney()); + if (bank.getStoredMoneyD() != 0) + root.put("StoredMoney", bank.getStoredMoneyD()); if (BlockSellPrice != 0D) root.put("BlockSellPrice", BlockSellPrice); @@ -1506,8 +1506,12 @@ public static ClaimedResidence load(String worldName, Map root, if (root.containsKey("ShopDescription")) res.setShopDesc((String) root.get("ShopDescription")); - if (root.containsKey("StoredMoney")) - res.bank.setStoredMoney((Integer) root.get("StoredMoney")); + if (root.containsKey("StoredMoney")) { + if (root.get("StoredMoney") instanceof Double) + res.bank.setStoredMoney((Double) root.get("StoredMoney")); + else + res.bank.setStoredMoney((Integer) root.get("StoredMoney")); + } if (root.containsKey("BlackList")) res.blacklist = ResidenceItemList.load(plugin, res, (Map) root.get("BlackList")); diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index a6926ef30..a0035129a 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -122,7 +122,7 @@ public void renewArea(ClaimedResidence res, Player player) { if (econ.canAfford(player.getName(), amount)/*account.hasEnough(amount)*/) { econ.subtract(player.getName(), amount); econ.add("Lease Money", amount); - plugin.msg(player, lm.Economy_MoneyCharged, String.format("%d", amount), econ.getName()); + plugin.msg(player, lm.Economy_MoneyCharged, plugin.getEconomyManager().format(amount), econ.getName()); } else { plugin.msg(player, lm.Economy_NotEnoughMoney); return; @@ -147,9 +147,17 @@ public void renewArea(ClaimedResidence res, Player player) { plugin.msg(player, lm.Economy_LeaseRenew, getExpireTime(res)); } - public int getRenewCost(ClaimedResidence res) { +// @Deprecated +// public int getRenewCost(ClaimedResidence res) { +// double cost = res.getOwnerGroup().getLeaseRenewCost(); +// int amount = (int) Math.ceil(res.getTotalSize() * cost); +// return amount; +// } + + public double getRenewCostD(ClaimedResidence res) { double cost = res.getOwnerGroup().getLeaseRenewCost(); - int amount = (int) Math.ceil(res.getTotalSize() * cost); + double amount = res.getTotalSize() * cost; + amount = Math.round(amount * 100) / 100D; return amount; } @@ -188,7 +196,7 @@ public void doExpirations() { PermissionGroup group = res.getOwnerGroup(); - int cost = this.getRenewCost(res); + double cost = this.getRenewCostD(res); if (plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().autoRenewLeases()) { if (cost == 0) { renewed = true; From 085e648631a19864fc536aaf8aa54e84d2659cc7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 23 Nov 2017 13:10:58 +0200 Subject: [PATCH 0452/1142] itemdrop and itempickup flags should be checked by player --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9b6a3fd67..edcee857e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -141,7 +141,7 @@ public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getItem().getLocation()); if (res == null) return; - if (!res.getPermissions().has(Flags.itempickup, FlagCombo.OnlyFalse)) + if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itempickup, FlagCombo.OnlyFalse)) return; if (event.getPlayer().hasPermission("residence.flag.itempickup.bypass")) return; @@ -154,7 +154,7 @@ public void onPlayerDropItemEvent(PlayerDropItemEvent event) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation()); if (res == null) return; - if (!res.getPermissions().has(Flags.itemdrop, FlagCombo.OnlyFalse)) + if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itemdrop, FlagCombo.OnlyFalse)) return; event.setCancelled(true); } From 8753ad832c01020009148c6d7ccbc29d58a9058e Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 23 Nov 2017 13:28:12 +0200 Subject: [PATCH 0453/1142] money back by total area not only main one --- .../bekvon/bukkit/residence/economy/TransactionManager.java | 2 +- .../bekvon/bukkit/residence/protection/ResidenceManager.java | 4 ++-- src/plugin.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 20057b8b3..044099772 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -49,7 +49,7 @@ public boolean chargeEconomyMoney(Player player, double chargeamount) { return true; } - public boolean giveEconomyMoney(Player player, int amount) { + public boolean giveEconomyMoney(Player player, double amount) { if (player == null) return false; if (amount == 0) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 7af4c136a..d3fae4053 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -550,8 +550,8 @@ public void removeResidence(Player player, String name, boolean resadmin) { plugin.getRentManager().removeRentable(name); plugin.getTransactionManager().removeFromSale(name); - if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { - int chargeamount = (int) Math.ceil(res.getAreaArray()[0].getSize() * res.getBlockSellPrice()); + if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { + double chargeamount = Math.ceil(res.getTotalSize() * res.getBlockSellPrice()); plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); } } diff --git a/src/plugin.yml b/src/plugin.yml index 70cdd3b0e..65969de92 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -4,7 +4,7 @@ version: 4.7.2.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] -softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds,dynmap,LWC, Kingdoms] +softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds,dynmap,LWC,Kingdoms] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: From 0a6092e634f888bcf99986e011de1f425610f487 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 23 Nov 2017 13:47:20 +0200 Subject: [PATCH 0454/1142] Prevent minecart spawn in residence area --- build.xml | 2 +- .../listeners/ResidencePlayerListener.java | 24 +++++++++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/build.xml b/build.xml index dd5a72588..f6c2d3886 100644 --- a/build.xml +++ b/build.xml @@ -29,7 +29,7 @@ - + diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index edcee857e..e93c1c2e3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1086,6 +1086,12 @@ public void onInfoCheck(PlayerInteractEvent event) { } + private boolean placingMinecart(Block block, ItemStack item) { + if (block.getType().name().contains("RAIL") && item.getType().name().contains("MINECART")) + return true; + return false; + } + @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { @@ -1107,7 +1113,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || plugin.getNms().isCanUseEntity_BothClick(mat, block))) { if (heldItemId != plugin.getConfigManager().getSelectionTooldID() && heldItemId != plugin.getConfigManager().getInfoToolID() - && heldItem != Material.INK_SACK && !plugin.getNms().isArmorStandMaterial(heldItem) && !plugin.getNms().isBoat(heldItem)) { + && heldItem != Material.INK_SACK && !plugin.getNms().isArmorStandMaterial(heldItem) && !plugin.getNms().isBoat(heldItem) && !placingMinecart(block, iih)) { return; } } @@ -1152,6 +1158,14 @@ public void onPlayerInteract(PlayerInteractEvent event) { return; } } + if (placingMinecart(block, iih)) { + perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + if (!perms.playerHas(player, Flags.build, true)) { + plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); + event.setCancelled(true); + return; + } + } } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { @@ -1230,7 +1244,7 @@ private static boolean canRide(EntityType type) { } return false; } - + private static boolean canHaveContainer(EntityType type) { switch (type.name().toLowerCase()) { case "horse": @@ -1252,7 +1266,7 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { Entity ent = event.getRightClicked(); - if (!canHaveContainer(ent.getType() )) + if (!canHaveContainer(ent.getType())) return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); @@ -1263,7 +1277,7 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { event.setCancelled(true); } } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractWithRidable(PlayerInteractEntityEvent event) { // disabling event on world @@ -1275,7 +1289,7 @@ public void onPlayerInteractWithRidable(PlayerInteractEntityEvent event) { Entity ent = event.getRightClicked(); - if (!canRide(ent.getType() )) + if (!canRide(ent.getType())) return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); From c1a2d838d130b0a0549a3bac0e84f5853be86f1e Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 23 Nov 2017 13:53:37 +0200 Subject: [PATCH 0455/1142] Fix for wg and Kingdoms area checks (prozhong) --- .../bukkit/residence/protection/ClaimedResidence.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 6f950369c..1145ebdca 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -427,10 +427,10 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa if (!resadmin) { if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) - return true; + return false; if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) - return true; + return false; } if (chargeMoney && parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { @@ -568,9 +568,9 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole if (!resadmin) { if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) - return true; + return false; if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) - return true; + return false; } if (parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { From f608cece1ee0ef117f7c678384494602124a6199 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 23 Nov 2017 14:16:49 +0200 Subject: [PATCH 0456/1142] Fix for issue with GUI exploit --- src/com/bekvon/bukkit/residence/Residence.java | 2 +- .../bekvon/bukkit/residence/commands/kick.java | 1 + .../listeners/ResidencePlayerListener.java | 17 ++++++++++++++++- .../residence/protection/ClaimedResidence.java | 2 ++ .../bekvon/bukkit/residence/utils/RandomTp.java | 2 ++ 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 23c258903..50ff690f3 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -765,7 +765,7 @@ public SignUtil getSignUtil() { } public void consoleMessage(String message) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " " + message); + Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', getPrefix() + " " + message)); } public boolean validName(String name) { diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 415a8a413..a0c84de64 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -55,6 +55,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (res.getPlayersInResidence().contains(targetplayer)) { Location loc = plugin.getConfigManager().getKickLocation(); + targetplayer.closeInventory(); if (loc != null) targetplayer.teleport(loc); else diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index e93c1c2e3..7e81ebf70 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -34,6 +34,7 @@ import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerBucketFillEvent; @@ -612,6 +613,10 @@ public void onFlagGuiClick(InventoryClickEvent event) { InventoryAction action = event.getAction(); setFlag.toggleFlag(slot, click, action); setFlag.recalculateInv(); + + if (!player.getOpenInventory().getTopInventory().getType().equals(InventoryType.CHEST)) + return; + player.getOpenInventory().getTopInventory().setContents(setFlag.getInventory().getContents()); } @@ -844,6 +849,7 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { } } plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); + player.closeInventory(); player.teleport(location); player.setFlying(false); player.setAllowFlight(false); @@ -1649,8 +1655,10 @@ private void fly(Player player, boolean state) { loc = Bukkit.getWorlds().get(0).getSpawnLocation(); } } - if (loc != null) + if (loc != null) { + player.closeInventory(); player.teleport(loc); + } } } else { player.setAllowFlight(state); @@ -1837,6 +1845,7 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { } if (location.getBlockY() <= 0) { Location lastLoc = lastOutsideLoc.get(pname); + player.closeInventory(); if (lastLoc != null) player.teleport(lastLoc); else @@ -1846,6 +1855,7 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { } } plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + player.closeInventory(); player.teleport(location); player.setFlying(false); player.setAllowFlight(false); @@ -1909,10 +1919,12 @@ public void run() { if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); player.teleport(newLoc); } else if (lastLoc != null) { StuckInfo info = updateStuckTeleport(player, loc); + player.closeInventory(); if (info != null && info.getTimesTeleported() > 5) { Location newLoc = res.getOutsideFreeLoc(loc, player); player.teleport(newLoc); @@ -1921,6 +1933,7 @@ public void run() { } } else { Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); player.teleport(newLoc); } if (plugin.getConfigManager().useActionBar()) { @@ -1951,6 +1964,7 @@ public void run() { } if (location.getBlockY() <= 0) { Location lastLoc = lastOutsideLoc.get(pname); + player.closeInventory(); if (lastLoc != null) player.teleport(lastLoc); else @@ -1961,6 +1975,7 @@ public void run() { } } plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + player.closeInventory(); player.teleport(location); player.setFlying(false); player.setAllowFlight(false); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 1145ebdca..e5d689dac 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1293,6 +1293,7 @@ public void run() { return; else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) plugin.getTeleportDelayMap().remove(targetPlayer.getName()); + targetPlayer.closeInventory(); targetPlayer.teleport(targloc); if (near) plugin.msg(targetPlayer, lm.Residence_TeleportNear); @@ -1307,6 +1308,7 @@ private void performInstantTp(final Location targloc, final Player targetPlayer, ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); plugin.getServ().getPluginManager().callEvent(tpevent); if (!tpevent.isCancelled()) { + targetPlayer.closeInventory(); targetPlayer.teleport(targloc); if (near) plugin.msg(targetPlayer, lm.Residence_TeleportNear); diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 4845ed958..58b32454c 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -139,6 +139,7 @@ public void run() { return; else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) plugin.getTeleportDelayMap().remove(targetPlayer.getName()); + targetPlayer.closeInventory(); targetPlayer.teleport(loc); plugin.msg(targetPlayer, lm.RandomTeleport_TeleportSuccess, loc.getX(), loc.getY(), loc.getZ()); return; @@ -147,6 +148,7 @@ else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) } public void performInstantTp(Location loc, Player targetPlayer) { + targetPlayer.closeInventory(); targetPlayer.teleport(loc); plugin.msg(targetPlayer, lm.RandomTeleport_TeleportSuccess, loc.getX(), loc.getY(), loc.getZ()); } From f5f9f6607dfb39fcabe28a9c8b3777b60faf68b2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 18 Dec 2017 13:21:59 +0200 Subject: [PATCH 0457/1142] Better handling for player moving into residence and 3rd party plugin blocking teleporting out bounce --- .../listeners/ResidencePlayerListener.java | 63 +++++++++++++------ src/plugin.yml | 2 +- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 7e81ebf70..f4fdee28a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1791,7 +1791,10 @@ public void onPlayerMove(PlayerMoveEvent event) { this.lastUpdate.put(name, now); - handleNewLocation(player, locto, true); + boolean handled = handleNewLocation(player, locto, true); + if (!handled) + event.setCancelled(true); + if (!plugin.getTeleportDelayMap().isEmpty() && plugin.getConfigManager().getTeleportDelay() > 0 && plugin.getTeleportDelayMap().contains(player .getName())) { plugin.getTeleportDelayMap().remove(player.getName()); @@ -1801,7 +1804,21 @@ public void onPlayerMove(PlayerMoveEvent event) { } } - public void handleNewLocation(final Player player, Location loc, boolean move) { + private static boolean teleport(Player player, Location loc) { + if (player == null || !player.isOnline() || loc == null) + return false; + +// PlayerTeleportEvent ev = new PlayerTeleportEvent(player, player.getLocation(), loc); +// Bukkit.getServer().getPluginManager().callEvent(ev); +// Debug.D("teleporting " + !ev.isCancelled()); + if (!player.teleport(loc)) + return false; + +// Debug.D("tp " + player.teleport(loc)); + return true; + } + + public boolean handleNewLocation(final Player player, Location loc, boolean move) { String pname = player.getName(); ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); @@ -1846,23 +1863,28 @@ public void handleNewLocation(final Player player, Location loc, boolean move) { if (location.getBlockY() <= 0) { Location lastLoc = lastOutsideLoc.get(pname); player.closeInventory(); + boolean teleported = false; if (lastLoc != null) - player.teleport(lastLoc); + teleported = teleport(player, lastLoc); else - player.teleport(res.getOutsideFreeLoc(loc, player)); + teleported = teleport(player, res.getOutsideFreeLoc(loc, player)); plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); - return; + if (!teleported) + return false; + return true; } } plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); player.closeInventory(); - player.teleport(location); + boolean teleported = teleport(player, location); + if (!teleported) + return false; player.setFlying(false); player.setAllowFlight(false); } lastOutsideLoc.put(pname, loc); - return; + return true; } } } @@ -1899,7 +1921,7 @@ public void run() { // } currentRes.remove(pname); } - return; + return true; } if (move) { @@ -1916,32 +1938,32 @@ public void run() { } ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); - + boolean teleported = false; if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { Location newLoc = res.getOutsideFreeLoc(loc, player); player.closeInventory(); - player.teleport(newLoc); + teleported = teleport(player, newLoc); } else if (lastLoc != null) { StuckInfo info = updateStuckTeleport(player, loc); player.closeInventory(); if (info != null && info.getTimesTeleported() > 5) { Location newLoc = res.getOutsideFreeLoc(loc, player); - player.teleport(newLoc); + teleported = teleport(player, newLoc); } else { - player.teleport(lastLoc); + teleported = teleport(player, lastLoc); } } else { Location newLoc = res.getOutsideFreeLoc(loc, player); player.closeInventory(); - player.teleport(newLoc); + teleported = teleport(player, newLoc); } if (plugin.getConfigManager().useActionBar()) { plugin.getAB().send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); } else { plugin.msg(player, lm.Residence_MoveDeny, orres.getName()); } - return; + return teleported; } // Preventing fly in residence only when player has move permission @@ -1955,6 +1977,8 @@ public void run() { location.setYaw(lc.getYaw()); int from = location.getBlockY(); int maxH = location.getWorld().getMaxHeight() - 1; + boolean teleported = false; + for (int i = 0; i < maxH; i++) { location.setY(from - i); Block block = location.getBlock(); @@ -1966,17 +1990,19 @@ public void run() { Location lastLoc = lastOutsideLoc.get(pname); player.closeInventory(); if (lastLoc != null) - player.teleport(lastLoc); + teleported = teleport(player, lastLoc); else - player.teleport(res.getOutsideFreeLoc(loc, player)); + teleported = teleport(player, res.getOutsideFreeLoc(loc, player)); plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); - return; + return teleported; } } plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); player.closeInventory(); - player.teleport(location); + teleported = teleport(player, location); + if (!teleported) + return false; player.setFlying(false); player.setAllowFlight(false); } @@ -2010,6 +2036,7 @@ public void run() { plugin.getServ().getPluginManager().callEvent(chgEvent); } + return true; } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) diff --git a/src/plugin.yml b/src/plugin.yml index 65969de92..aa793e654 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.2.4 +version: 4.7.3.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From b3ef1d52adef6105098433ad30cb30ae58b23a5d Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 18 Dec 2017 14:38:54 +0200 Subject: [PATCH 0458/1142] Allow withers to explode when destroy is set false, but witherdestruction is set to true --- .../bukkit/residence/listeners/ResidenceEntityListener.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index ce64411d9..8b89bed0e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -643,6 +643,8 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { ent.remove(); } break; + case WITHER: + break; default: if (perms.has(Flags.destroy, FlagCombo.OnlyFalse)) { event.setCancelled(true); @@ -703,6 +705,7 @@ public void onEntityExplode(EntityExplodeEvent event) { if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) cancel = true; break; + case WITHER: case WITHER_SKULL: if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) cancel = true; From e8eae810b2722b5c3007c0609cf139bb37d4d753 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 18 Dec 2017 15:12:06 +0200 Subject: [PATCH 0459/1142] Fix for setting residence owner as server land --- .../bekvon/bukkit/residence/protection/PlayerManager.java | 2 ++ .../bukkit/residence/protection/ResidencePermissions.java | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index dd93cb010..81822911c 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -292,6 +292,8 @@ public ResidencePlayer getResidencePlayer(UUID uuid) { } public ResidencePlayer getResidencePlayer(String name, UUID uuid) { + if (uuid.toString().equals(plugin.getServerLandUUID())) + return null; Player p = Bukkit.getPlayer(uuid); if (p != null) { return getResidencePlayer(p); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 7f95a6709..3b1bd1596 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -9,6 +9,8 @@ import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.utils.Debug; + import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -500,7 +502,7 @@ public boolean setOwner(Player player, boolean resetFlags) { if (resetFlags) this.applyDefaultFlags(); - + return true; } @@ -519,8 +521,6 @@ public void setOwner(String newOwner, boolean resetFlags) { ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(newOwner); if (rPlayer != null) this.ownerUUID = rPlayer.getUuid(); - - Residence.getInstance().getPlayerManager().addResidence(newOwner, residence); if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase(Residence.getInstance().getServerLandname())) { ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());// the UUID for server owned land @@ -531,6 +531,7 @@ public void setOwner(String newOwner, boolean resetFlags) { else ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it } + Residence.getInstance().getPlayerManager().addResidence(newOwner, residence); if (resetFlags) this.applyDefaultFlags(); } From 780544286a2305bc99e989d4138972860d42c63e Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Jan 2018 14:14:27 +0200 Subject: [PATCH 0460/1142] Support for LuckPerms plugin --- .../permissions/LuckPerms4Adapter.java | 37 +++++++++++++++++++ .../permissions/PermissionManager.java | 8 ++++ src/plugin.yml | 2 +- 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/com/bekvon/bukkit/residence/permissions/LuckPerms4Adapter.java diff --git a/src/com/bekvon/bukkit/residence/permissions/LuckPerms4Adapter.java b/src/com/bekvon/bukkit/residence/permissions/LuckPerms4Adapter.java new file mode 100644 index 000000000..da548de8c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/permissions/LuckPerms4Adapter.java @@ -0,0 +1,37 @@ +package com.bekvon.bukkit.residence.permissions; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.ServicesManager; + +import me.lucko.luckperms.api.LuckPermsApi; +import me.lucko.luckperms.api.User; + +public class LuckPerms4Adapter implements PermissionsInterface { + + LuckPermsApi api = null; + + public LuckPerms4Adapter() { + ServicesManager manager = Bukkit.getServicesManager(); + if (manager.isProvidedFor(LuckPermsApi.class)) { + api = manager.getRegistration(LuckPermsApi.class).getProvider(); + } + } + + @Override + public String getPlayerGroup(Player player) { + User user = api.getUser(player.getUniqueId()); + if (user == null) + return ""; + return user.getPrimaryGroup(); + } + + @Override + public String getPlayerGroup(String player, String world) { + User user = api.getUser(player); + if (user == null) + return ""; + return user.getPrimaryGroup(); + } + +} diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 0de9fec84..9715c0090 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -106,6 +106,14 @@ private void checkPermissions() { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found PermissionsBukkit Plugin!"); return; } + + p = server.getPluginManager().getPlugin("LuckPerms"); + if (p != null) { + perms = new LuckPerms4Adapter(); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found LuckPerms Plugin!"); + return; + } + p = server.getPluginManager().getPlugin("bPermissions"); if (p != null) { perms = new BPermissionsAdapter(); diff --git a/src/plugin.yml b/src/plugin.yml index aa793e654..52c730dfc 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.3.0 +version: 4.7.3.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From f8f275cae6da51e574e2298f9d7e33f08722f15f Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Jan 2018 15:13:05 +0200 Subject: [PATCH 0461/1142] Take into consideration cost of res auto only when economy is enabled --- src/com/bekvon/bukkit/residence/commands/auto.java | 10 ++++++---- .../residence/listeners/ResidencePlayerListener.java | 5 +++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 764b33741..2f9d1f1cf 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -201,10 +201,12 @@ private static void resize(Residence plugin, Player player, CuboidArea cuboid) { skipped = 0; - cost = (int) Math.ceil(c.getSize() * group.getCostPerBlock()); - if (cost > balance) - break; - + if (plugin.getConfigManager().enableEconomy()) { + cost = (int) Math.ceil(c.getSize() * group.getCostPerBlock()); + if (cost > balance) + break; + } + cuboid.setLowLocation(c.getLowLoc()); cuboid.setHighLocation(c.getHighLoc()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index f4fdee28a..7e31bf8d3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1098,6 +1098,11 @@ private boolean placingMinecart(Block block, ItemStack item) { return false; } + @SuppressWarnings("deprecation") + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerInteracts(PlayerInteractEvent event) { + Debug.D("event canceled " + event.isCancelled()); + } @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { From 42db8a08b2e279f6c13375720aba77aaade5b38a Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Jan 2018 15:17:17 +0200 Subject: [PATCH 0462/1142] Don't show rt command missing permission for delay bypass --- src/com/bekvon/bukkit/residence/commands/rt.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index de3bc4881..ff889d4e2 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -105,7 +105,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (plugin.getConfigManager().getTeleportDelay() > 0 && !resadmin && !plugin.hasPermission(sender, "residence.randomtp.delaybypass")) { + if (plugin.getConfigManager().getTeleportDelay() > 0 && !resadmin && !plugin.hasPermission(sender, "residence.randomtp.delaybypass", false)) { plugin.msg(tPlayer, lm.RandomTeleport_TeleportStarted, loc.getX(), loc.getY(), loc .getZ(), plugin.getConfigManager().getTeleportDelay()); plugin.getTeleportDelayMap().add(tPlayer.getName()); From 2fe02cb7462f4103f763a7ce32fae90d74db8f6e Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 16 Jan 2018 13:03:36 +0200 Subject: [PATCH 0463/1142] Better selection area handling --- .../bukkit/residence/ConfigManager.java | 11 + .../bukkit/residence/commands/select.java | 12 +- .../residence/containers/Visualizer.java | 12 + .../listeners/ResidencePlayerListener.java | 18 +- .../residence/selection/SelectionManager.java | 602 +++++++++++------- .../selection/WorldEditSelectionManager.java | 179 +++--- 6 files changed, 515 insertions(+), 319 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index da31af1d7..b80d92fe4 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -158,6 +158,7 @@ public class ConfigManager { protected boolean UUIDConvertion = true; protected boolean OfflineMode = false; protected boolean SelectionIgnoreY = false; + protected boolean SelectionIgnoreYInSubzone = false; protected boolean NoCostForYBlocks = false; protected boolean useVisualizer; protected boolean DisableListeners; @@ -411,6 +412,12 @@ public void UpdateConfigFile() { c.getW().addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); SelectionIgnoreY = c.get("Global.Selection.IgnoreY", false); + + c.getW().addComment("Global.Selection.IgnoreYInSubzone", + "When this set to true, selections inside existing residence will be from bottom to top of that residence", + "When this set to false, selections inside existing residence will be exactly as they are"); + SelectionIgnoreYInSubzone = c.get("Global.Selection.IgnoreYInSubzone", false); + c.getW().addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", "This will lower residence price by up to 256 times, so adjust block price BEFORE enabling this"); NoCostForYBlocks = c.get("Global.Selection.NoCostForYBlocks", false); @@ -1644,6 +1651,10 @@ public boolean isSelectionIgnoreY() { return SelectionIgnoreY; } + public boolean isSelectionIgnoreYInSubzone() { + return SelectionIgnoreYInSubzone; + } + public boolean isNoCostForYBlocks() { return NoCostForYBlocks; } diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index b7634af58..b79b67dd9 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -67,34 +67,41 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } } else if (args[1].equals("vert")) { plugin.getSelectionManager().vert(player, resadmin); + + plugin.getSelectionManager().afterSelectionUpdate(player, false); return true; } else if (args[1].equals("sky")) { plugin.getSelectionManager().sky(player, resadmin); + plugin.getSelectionManager().afterSelectionUpdate(player, false); return true; } else if (args[1].equals("bedrock")) { plugin.getSelectionManager().bedrock(player, resadmin); + plugin.getSelectionManager().afterSelectionUpdate(player, false); return true; } else if (args[1].equals("coords")) { plugin.msg(player, lm.General_Separator); - Location playerLoc1 = plugin.getSelectionManager().getPlayerLoc1(player.getName()); + Location playerLoc1 = plugin.getSelectionManager().getPlayerLoc1(player); if (playerLoc1 != null) { plugin.msg(player, lm.Select_Primary, plugin.msg(lm.General_CoordsTop, playerLoc1.getBlockX(), playerLoc1 .getBlockY(), playerLoc1.getBlockZ())); } - Location playerLoc2 = plugin.getSelectionManager().getPlayerLoc2(player.getName()); + Location playerLoc2 = plugin.getSelectionManager().getPlayerLoc2(player); if (playerLoc2 != null) { plugin.msg(player, lm.Select_Secondary, plugin.msg(lm.General_CoordsBottom, playerLoc2.getBlockX(), playerLoc2 .getBlockY(), playerLoc2.getBlockZ())); } plugin.msg(player, lm.General_Separator); + plugin.getSelectionManager().afterSelectionUpdate(player, false); return true; } else if (args[1].equals("chunk")) { plugin.getSelectionManager().selectChunk(player); + plugin.getSelectionManager().afterSelectionUpdate(player, false); return true; } else if (args[1].equals("worldedit")) { if (plugin.getSelectionManager().worldEdit(player)) { plugin.msg(player, lm.Select_Success); + plugin.getSelectionManager().afterSelectionUpdate(player, false); } return true; } @@ -144,6 +151,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } } + plugin.getSelectionManager().clearSelection(target); plugin.getAutoSelectionManager().switchAutoSelection(target); return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/Visualizer.java b/src/com/bekvon/bukkit/residence/containers/Visualizer.java index bb7ab78e9..d2c460b1c 100644 --- a/src/com/bekvon/bukkit/residence/containers/Visualizer.java +++ b/src/com/bekvon/bukkit/residence/containers/Visualizer.java @@ -18,6 +18,7 @@ public class Visualizer { private List errorAreas = new ArrayList(); private int id = -1; private int errorId = -1; + private int baseShedId = -1; private boolean once = false; private int starting = 0; @@ -39,6 +40,9 @@ public void cancelAll() { if (errorId != -1) { Bukkit.getScheduler().cancelTask(errorId); } + if (baseShedId != -1) { + Bukkit.getScheduler().cancelTask(baseShedId); + } } public boolean isSameLoc() { @@ -184,4 +188,12 @@ public int getStarting() { public void setStarting(int starting) { this.starting = starting; } + + public int getBaseShedId() { + return baseShedId; + } + + public void setBaseShedId(int baseShedId) { + this.baseShedId = baseShedId; + } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 7e31bf8d3..91e8af799 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -54,6 +54,7 @@ import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.Flags; @@ -63,7 +64,10 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.economy.rent.RentedLand; -import com.bekvon.bukkit.residence.event.*; +import com.bekvon.bukkit.residence.event.ResidenceChangedEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -71,7 +75,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; @@ -1048,8 +1051,10 @@ public void onSelection(PlayerInteractEvent event) { event.setCancelled(true); } - if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) + if (plugin.getSelectionManager().hasPlacedBoth(player)) { plugin.getSelectionManager().showSelectionInfoInActionBar(player); + plugin.getSelectionManager().updateLocations(player); + } } return; } @@ -1092,17 +1097,12 @@ public void onInfoCheck(PlayerInteractEvent event) { } - private boolean placingMinecart(Block block, ItemStack item) { + private static boolean placingMinecart(Block block, ItemStack item) { if (block.getType().name().contains("RAIL") && item.getType().name().contains("MINECART")) return true; return false; } - @SuppressWarnings("deprecation") - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerInteracts(PlayerInteractEvent event) { - Debug.D("event canceled " + event.isCancelled()); - } @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index e8dcfc47d..de129221c 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -1,37 +1,264 @@ package com.bekvon.bukkit.residence.selection; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.SelectionSides; -import com.bekvon.bukkit.residence.containers.Visualizer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.CuboidArea; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; +import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Server; +import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.SelectionSides; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; + public class SelectionManager { - protected Map playerLoc1; - protected Map playerLoc2; + protected Map selections; protected Server server; protected Residence plugin; - private HashMap vMap = new HashMap(); + private HashMap vMap = new HashMap(); public static final int MIN_HEIGHT = 0; - Permission p = new Permission("residence.bypass.ignorey", PermissionDefault.FALSE); + Permission ignoreyPermission = new Permission("residence.bypass.ignorey", PermissionDefault.FALSE); + Permission ignoreyinsubzonePermission = new Permission("residence.bypass.ignoreyinsubzone", PermissionDefault.FALSE); + + public enum selectionType { + noLimits, ignoreY, residenceBounds; + } + + public class Selection { + private Player player; + private Location loc1; + private Location loc2; + + public Selection(Player player) { + this.player = player; + } + + public Location getBaseLoc1() { + return loc1 == null ? null : loc1.clone(); + } + + public void setBaseLoc1(Location loc1) { + this.loc1 = loc1.clone(); + } + + public World getWorld() { + if (loc1 != null) + return loc1.getWorld(); + if (loc2 != null) + return loc2.getWorld(); + return player.getWorld(); + } + + public Location getBaseLoc2() { + return loc2 == null ? null : loc2.clone(); + } + + public void setBaseLoc2(Location loc2) { + this.loc2 = loc2.clone(); + } + + public selectionType getSelectionRestrictions() { + if (inSameResidence()) { + if (plugin.getConfigManager().isSelectionIgnoreYInSubzone()) { + if (hasPlacedBoth() && !player.hasPermission(ignoreyinsubzonePermission)) { + return selectionType.residenceBounds; + } + } + } else { + if (plugin.getConfigManager().isSelectionIgnoreY()) { + if (hasPlacedBoth() && !player.hasPermission(ignoreyPermission)) { + return selectionType.ignoreY; + } + } + } + return selectionType.noLimits; + } + + public int getMaxYAllowed() { + switch (getSelectionRestrictions()) { + case ignoreY: + case noLimits: + default: + return getWorld().getMaxHeight() - 1; + case residenceBounds: + ClaimedResidence res1 = plugin.getResidenceManager().getByLoc(this.getBaseLoc2()); + if (res1 != null) { + CuboidArea area = res1.getAreaByLoc(this.getBaseLoc2()); + if (area != null) { + return area.getHighLoc().getBlockY(); + } + } + break; + } + return getWorld().getMaxHeight() - 1; + } + + public int getMinYAllowed() { + switch (getSelectionRestrictions()) { + case ignoreY: + case noLimits: + default: + return 0; + case residenceBounds: + ClaimedResidence res1 = plugin.getResidenceManager().getByLoc(this.getBaseLoc1()); + if (res1 != null) { + CuboidArea area = res1.getAreaByLoc(getBaseLoc1()); + if (area != null) + return area.getLowLoc().getBlockY(); + } + break; + } + return 0; + } + + private boolean inSameResidence() { + if (!hasPlacedBoth()) + return false; + + ClaimedResidence res1 = plugin.getResidenceManager().getByLoc(this.getBaseLoc1()); + + if (res1 == null) + return false; + + ClaimedResidence res2 = plugin.getResidenceManager().getByLoc(this.getBaseLoc2()); + + if (res2 == null) + return false; + return res1.getName().equals(res2.getName()); + } + + public void vert(boolean resadmin) { + if (hasPlacedBoth()) { + sky(resadmin); + bedrock(resadmin); + } else { + plugin.msg(player, lm.Select_Points); + } + } + + private void shadowSky(CuboidArea area) { + if (!hasPlacedBoth()) + return; + area.setHighLocation(this.getBaseArea().getHighLoc()); + area.getHighLoc().setY(this.getMaxYAllowed()); + } + + private void shadowBedrock(CuboidArea area) { + if (!hasPlacedBoth()) + return; + area.setLowLocation(this.getBaseArea().getLowLoc()); + area.getLowLoc().setY(this.getMinYAllowed()); + } + + public void sky(boolean resadmin) { + if (hasPlacedBoth()) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(this.getPlayer()); + PermissionGroup group = rPlayer.getGroup(); + int y1 = this.getBaseLoc1().getBlockY(); + + int newy = this.getMaxYAllowed(); + + if (!resadmin) { + if (group.getMaxHeight() < newy) + newy = group.getMaxHeight(); + if (newy - y1 > (group.getMaxY() - 1)) + newy = y1 + (group.getMaxY() - 1); + } + this.getBaseLoc2().setY(newy); + + plugin.msg(player, lm.Select_Sky); + } else { + plugin.msg(player, lm.Select_Points); + } + } + + public void bedrock(boolean resadmin) { + if (hasPlacedBoth()) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(this.getPlayer()); + PermissionGroup group = rPlayer.getGroup(); + + int y2 = this.getBaseLoc2().getBlockY(); + + int newy = this.getMinYAllowed(); + if (!resadmin) { + if (newy < group.getMinHeight()) + newy = group.getMinHeight(); + if (y2 - newy > (group.getMaxY() - 1)) + newy = y2 - (group.getMaxY() - 1); + } + this.getBaseLoc1().setY(newy); + plugin.msg(player, lm.Select_Bedrock); + } else { + plugin.msg(player, lm.Select_Points); + } + } + + public void selectChunk() { + Chunk chunk = player.getWorld().getChunkAt(player.getLocation()); + int xcoord = chunk.getX() * 16; + int zcoord = chunk.getZ() * 16; + int xmax = xcoord + 15; + int zmax = zcoord + 15; + this.setBaseLoc1(new Location(player.getWorld(), xcoord, player.getLocation().getBlockY(), zcoord)); + this.setBaseLoc2(new Location(player.getWorld(), xmax, player.getLocation().getBlockY(), zmax)); + plugin.msg(player, lm.Select_Success); + } + + public boolean hasPlacedBoth() { + return this.getBaseLoc1() != null && this.getBaseLoc2() != null; + } + + public Player getPlayer() { + return player; + } + + public void setPlayer(Player player) { + this.player = player; + } + + public CuboidArea getBaseArea() { + if (!this.hasPlacedBoth()) + return null; + return new CuboidArea(this.loc1, this.loc2); + } + + public CuboidArea getResizedArea() { + + CuboidArea area = this.getBaseArea(); + switch (getSelectionRestrictions()) { + case noLimits: + break; + case residenceBounds: + case ignoreY: + shadowSky(area); + shadowBedrock(area); + break; + default: + break; + } + + return area; + } + } public enum Direction { UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ @@ -40,8 +267,23 @@ public enum Direction { public SelectionManager(Server server, Residence plugin) { this.plugin = plugin; this.server = server; - playerLoc1 = Collections.synchronizedMap(new HashMap()); - playerLoc2 = Collections.synchronizedMap(new HashMap()); + selections = Collections.synchronizedMap(new HashMap()); + } + + public Selection getSelection(Player player) { + Selection s = selections.get(player.getUniqueId()); + if (s == null) { + s = new Selection(player); + selections.put(player.getUniqueId(), s); + } + return s; + } + + public void updateLocations(Player player) { + Selection s = selections.get(player.getUniqueId()); + if (s != null) { + updateLocations(player, this.getSelection(player).getBaseLoc1(), this.getSelection(player).getBaseLoc2(), true); + } } public void updateLocations(Player player, Location loc1, Location loc2) { @@ -50,9 +292,9 @@ public void updateLocations(Player player, Location loc1, Location loc2) { public void updateLocations(Player player, Location loc1, Location loc2, boolean force) { if (loc1 != null && loc2 != null) { - playerLoc1.put(player.getName(), loc1); - playerLoc2.put(player.getName(), loc2); - updateForY(player); + Selection selection = getSelection(player); + selection.setBaseLoc1(loc1); + selection.setBaseLoc2(loc2); this.afterSelectionUpdate(player, force); } } @@ -63,8 +305,7 @@ public void placeLoc1(Player player, Location loc) { public void placeLoc1(Player player, Location loc, boolean show) { if (loc != null) { - playerLoc1.put(player.getName(), loc); - updateForY(player); + getSelection(player).setBaseLoc1(loc); if (show) { this.afterSelectionUpdate(player); } @@ -77,72 +318,78 @@ public void placeLoc2(Player player, Location loc) { public void placeLoc2(Player player, Location loc, boolean show) { if (loc != null) { - playerLoc2.put(player.getName(), loc); - updateForY(player); + getSelection(player).setBaseLoc2(loc); if (show) { this.afterSelectionUpdate(player); } } } - private void updateForY(Player player) { - if (plugin.getConfigManager().isSelectionIgnoreY() && hasPlacedBoth(player.getName()) && !player.hasPermission(p)) { - this.qsky(player); - this.qbedrock(player); - } - } - public void afterSelectionUpdate(Player player) { afterSelectionUpdate(player, false); } public void afterSelectionUpdate(Player player, boolean force) { - if (hasPlacedBoth(player.getName())) { - Visualizer v = vMap.get(player.getName()); - if (v == null) { - v = new Visualizer(player); - } - v.setStart(System.currentTimeMillis()); - v.cancelAll(); - if (force) - v.setLoc(null); - v.setAreas(this.getSelectionCuboid(player)); - this.showBounds(player, v); + if (!hasPlacedBoth(player)) + return; + + Visualizer v = vMap.get(player.getUniqueId()); + if (v == null) { + v = new Visualizer(player); + vMap.put(player.getUniqueId(), v); } + v.setStart(System.currentTimeMillis()); + v.cancelAll(); + if (force) + v.setLoc(null); + v.setAreas(this.getSelectionCuboid(player)); + this.showBounds(player, v); } public Location getPlayerLoc1(Player player) { - return getPlayerLoc1(player.getName()); + if (player == null) + return null; + return getSelection(player).getBaseLoc1(); } + @Deprecated public Location getPlayerLoc1(String player) { - return playerLoc1.get(player); + return getPlayerLoc1(Bukkit.getPlayer(player)); } public Location getPlayerLoc2(Player player) { - return getPlayerLoc2(player.getName()); + if (player == null) + return null; + return getSelection(player).getBaseLoc2(); } + @Deprecated public Location getPlayerLoc2(String player) { - return playerLoc2.get(player); + return getPlayerLoc2(Bukkit.getPlayer(player)); } public CuboidArea getSelectionCuboid(Player player) { - return getSelectionCuboid(player.getName()); + if (player == null) + return null; + return getSelection(player).getResizedArea(); } + @Deprecated public CuboidArea getSelectionCuboid(String player) { if (!hasPlacedBoth(player)) return null; - return new CuboidArea(getPlayerLoc1(player), getPlayerLoc2(player)); + return getSelectionCuboid(Bukkit.getPlayer(player)); } public boolean hasPlacedBoth(Player player) { - return hasPlacedBoth(player.getName()); + if (player == null) + return false; + return getSelection(player).hasPlacedBoth(); } + @Deprecated public boolean hasPlacedBoth(String player) { - return playerLoc1.containsKey(player) && playerLoc2.containsKey(player); + return hasPlacedBoth(Bukkit.getPlayer(player)); } public void showSelectionInfoInActionBar(Player player) { @@ -150,8 +397,7 @@ public void showSelectionInfoInActionBar(Player player) { if (!plugin.getConfigManager().useActionBarOnSelection()) return; - String pname = player.getName(); - CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); + CuboidArea cuboidArea = this.getSelectionCuboid(player); String Message = plugin.msg(lm.Select_TotalSize, cuboidArea.getSize()); @@ -165,10 +411,9 @@ public void showSelectionInfoInActionBar(Player player) { } public void showSelectionInfo(Player player) { - String pname = player.getName(); - if (hasPlacedBoth(pname)) { + if (hasPlacedBoth(player)) { plugin.msg(player, lm.General_Separator); - CuboidArea cuboidArea = new CuboidArea(getPlayerLoc1(pname), getPlayerLoc2(pname)); + CuboidArea cuboidArea = this.getSelectionCuboid(player); plugin.msg(player, lm.Select_TotalSize, cuboidArea.getSize()); ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); @@ -190,12 +435,13 @@ public void showSelectionInfo(Player player) { public void showBounds(final Player player, final Visualizer v) { if (!plugin.getConfigManager().useVisualizer()) return; - Visualizer tv = vMap.get(player.getName()); + Visualizer tv = vMap.get(player.getUniqueId()); if (tv != null) { tv.cancelAll(); } - vMap.put(player.getName(), v); - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + + vMap.put(player.getUniqueId(), v); + v.setBaseShedId(Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { if (!v.getAreas().isEmpty()) @@ -204,7 +450,7 @@ public void run() { MakeBorders(player, true); return; } - }); + }).getTaskId()); } public List getLocations(Location lowLoc, Location loc, Double TX, Double TY, Double TZ, Double Range, boolean StartFromZero) { @@ -342,7 +588,7 @@ public List GetLocationsCornersByData(Location loc, Double TX, Double public boolean MakeBorders(final Player player, final boolean error) { - final Visualizer v = vMap.get(player.getName()); + final Visualizer v = vMap.get(player.getUniqueId()); if (v == null) return false; @@ -358,7 +604,7 @@ public boolean MakeBorders(final Player player, final boolean error) { int Range = plugin.getConfigManager().getVisualizerRange(); final List locList = new ArrayList(); - final List locList2 = new ArrayList(); + final List errorLocList = new ArrayList(); final boolean same = v.isSameLoc(); if (!same) { @@ -418,26 +664,25 @@ public boolean MakeBorders(final Player player, final boolean error) { } locList.addAll(GetLocationsWallsByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range)); - locList2.addAll(GetLocationsCornersByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range)); + errorLocList.addAll(GetLocationsCornersByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range)); } v.setLoc(player.getLocation()); } else { if (error) { locList.addAll(v.getErrorLocations()); - locList2.addAll(v.getErrorLocations2()); + errorLocList.addAll(v.getErrorLocations2()); } else { locList.addAll(v.getLocations()); - locList2.addAll(v.getLocations2()); + errorLocList.addAll(v.getLocations2()); } } Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @SuppressWarnings("deprecation") @Override public void run() { int size = locList.size(); - int errorSize = locList2.size(); + int errorSize = errorLocList.size(); int timesMore = 1; int errorTimesMore = 1; @@ -453,68 +698,8 @@ public void run() { List trimed2 = new ArrayList(); try { - boolean spigot = plugin.isSpigot(); - - if (spigot) { - if (!error) - for (int i = 0; i < locList.size(); i += timesMore) { - Location l = locList.get(i); - player.spigot().playEffect(l, plugin.getConfigManager().getSelectedSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); - if (!same) - trimed.add(l); - } - else - for (int i = 0; i < locList.size(); i += timesMore) { - Location l = locList.get(i); - player.spigot().playEffect(l, plugin.getConfigManager().getOverlapSpigotSides(), 0, 0, 0, 0, 0, 0, 1, 128); - if (!same) - trimed.add(l); - } - - if (!error) - for (int i = 0; i < locList2.size(); i += errorTimesMore) { - Location l = locList2.get(i); - player.spigot().playEffect(l, plugin.getConfigManager().getSelectedSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); - if (!same) - trimed2.add(l); - } - else - for (int i = 0; i < locList2.size(); i += errorTimesMore) { - Location l = locList2.get(i); - player.spigot().playEffect(l, plugin.getConfigManager().getOverlapSpigotFrame(), 0, 0, 0, 0, 0, 0, 1, 128); - if (!same) - trimed2.add(l); - } - } else { - if (!error) - for (int i = 0; i < locList.size(); i += timesMore) { - Location l = locList.get(i); - plugin.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, l, player); - if (!same) - trimed.add(l); - } - else - for (int i = 0; i < locList.size(); i += timesMore) { - Location l = locList.get(i); - plugin.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, l, player); - if (!same) - trimed.add(l); - } - if (!error) - for (int i = 0; i < locList2.size(); i += errorTimesMore) { - Location l = locList2.get(i); - plugin.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); - if (!same) - trimed2.add(l); - } - else - for (int i = 0; i < locList2.size(); i += errorTimesMore) { - Location l = locList2.get(i); - plugin.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); - if (!same) - trimed2.add(l); - } - } + showParticles(locList, player, timesMore, same, trimed, error, true); + showParticles(errorLocList, player, errorTimesMore, same, trimed2, error, false); } catch (Exception e) { return; } @@ -554,10 +739,41 @@ public void run() { v.setErrorId(scid); return true; + + } + + private void showParticles(List locList, Player player, int timesMore, boolean sameLocation, List trimed, boolean error, boolean sides) { + for (int i = 0; i < locList.size(); i += timesMore) { + Location l = locList.get(i); + if (plugin.isSpigot()) { + Effect effect = null; + if (sides) { + effect = error ? plugin.getConfigManager().getOverlapSpigotSides() : plugin.getConfigManager().getSelectedSpigotSides(); + } else { + effect = error ? plugin.getConfigManager().getOverlapSpigotFrame() : plugin.getConfigManager().getSelectedSpigotFrame(); + } + player.spigot().playEffect(l, effect, 0, 0, 0, 0, 0, 0, 1, 128); + } else { + if (error) { + if (sides) + plugin.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, l, player); + else + plugin.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); + } else { + if (sides) + plugin.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, l, player); + else + plugin.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); + } + } + + if (!sameLocation) + trimed.add(l); + } } public void vert(Player player, boolean resadmin) { - if (hasPlacedBoth(player.getName())) { + if (hasPlacedBoth(player)) { this.sky(player, resadmin); this.bedrock(player, resadmin); } else { @@ -565,105 +781,36 @@ public void vert(Player player, boolean resadmin) { } } - public void qsky(Player player) { - int y1 = playerLoc1.get(player.getName()).getBlockY(); - int y2 = playerLoc2.get(player.getName()).getBlockY(); - int newy = player.getLocation().getWorld().getMaxHeight() - 1; - if (y1 > y2) - playerLoc1.get(player.getName()).setY(newy); - else - playerLoc2.get(player.getName()).setY(newy); - } - - public void qbedrock(Player player) { - int y1 = playerLoc1.get(player.getName()).getBlockY(); - int y2 = playerLoc2.get(player.getName()).getBlockY(); - if (y1 < y2) { - int newy = MIN_HEIGHT; - playerLoc1.get(player.getName()).setY(newy); - } else { - int newy = MIN_HEIGHT; - playerLoc2.get(player.getName()).setY(newy); - } - } +// @Deprecated +// public void qsky(Player player) { +// Selection selection = this.getSelection(player); +// selection.shadowSky(); +// } +// +// @Deprecated +// public void qbedrock(Player player) { +// Selection selection = this.getSelection(player); +// selection.shadowBedrock(); +// } public void sky(Player player, boolean resadmin) { - if (hasPlacedBoth(player.getName())) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - int y1 = playerLoc1.get(player.getName()).getBlockY(); - int y2 = playerLoc2.get(player.getName()).getBlockY(); - int newy = player.getLocation().getWorld().getMaxHeight() - 1; - if (y1 > y2) { - if (!resadmin) { - if (group.getMaxHeight() < newy) - newy = group.getMaxHeight(); - if (newy - y2 > (group.getMaxY() - 1)) - newy = y2 + (group.getMaxY() - 1); - } - playerLoc1.get(player.getName()).setY(newy); - } else { - if (!resadmin) { - if (group.getMaxHeight() < newy) - newy = group.getMaxHeight(); - if (newy - y1 > (group.getMaxY() - 1)) - newy = y1 + (group.getMaxY() - 1); - } - playerLoc2.get(player.getName()).setY(newy); - } - plugin.msg(player, lm.Select_Sky); - } else { - plugin.msg(player, lm.Select_Points); - } + Selection selection = this.getSelection(player); + selection.sky(resadmin); } public void bedrock(Player player, boolean resadmin) { - if (hasPlacedBoth(player.getName())) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - int y1 = playerLoc1.get(player.getName()).getBlockY(); - int y2 = playerLoc2.get(player.getName()).getBlockY(); - if (y1 < y2) { - int newy = MIN_HEIGHT; - if (!resadmin) { - if (newy < group.getMinHeight()) - newy = group.getMinHeight(); - if (y2 - newy > (group.getMaxY() - 1)) - newy = y2 - (group.getMaxY() - 1); - } - playerLoc1.get(player.getName()).setY(newy); - } else { - int newy = MIN_HEIGHT; - if (!resadmin) { - if (newy < group.getMinHeight()) - newy = group.getMinHeight(); - if (y1 - newy > (group.getMaxY() - 1)) - newy = y1 - (group.getMaxY() - 1); - } - playerLoc2.get(player.getName()).setY(newy); - } - plugin.msg(player, lm.Select_Bedrock); - } else { - plugin.msg(player, lm.Select_Points); - } + Selection selection = this.getSelection(player); + selection.bedrock(resadmin); } public void clearSelection(Player player) { - playerLoc1.remove(player.getName()); - playerLoc2.remove(player.getName()); + selections.remove(player.getUniqueId()); } + @Deprecated public void selectChunk(Player player) { - Chunk chunk = player.getWorld().getChunkAt(player.getLocation()); - int xcoord = chunk.getX() * 16; - int zcoord = chunk.getZ() * 16; - int ycoord = MIN_HEIGHT; - int xmax = xcoord + 15; - int zmax = zcoord + 15; - int ymax = player.getLocation().getWorld().getMaxHeight() - 1; - playerLoc1.put(player.getName(), new Location(player.getWorld(), xcoord, ycoord, zcoord)); - playerLoc2.put(player.getName(), new Location(player.getWorld(), xmax, ymax, zmax)); - plugin.msg(player, lm.Select_Success); + Selection selection = this.getSelection(player); + selection.selectChunk(); } public boolean worldEdit(Player player) { @@ -680,14 +827,33 @@ public void selectBySize(Player player, int xsize, int ysize, int zsize) { Location myloc = player.getLocation(); Location loc1 = new Location(myloc.getWorld(), myloc.getBlockX() + xsize, myloc.getBlockY() + ysize, myloc.getBlockZ() + zsize); Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize); + + CuboidArea area = new CuboidArea(loc1, loc2); + +// area.getlo + placeLoc1(player, loc1, false); - placeLoc2(player, loc2, true); + placeLoc2(player, loc2, false); + + Selection selection = this.getSelection(player); + + if (selection.getMaxYAllowed() < area.getHighLoc().getBlockY()) + selection.getBaseLoc2().setY(selection.getMaxYAllowed()); + + if (selection.getMinYAllowed() > area.getLowLoc().getBlockY()) + selection.getBaseLoc1().setY(selection.getMinYAllowed()); + +// selection.updateBaseArea(); +// selection.updateShadowLocations(); +// selection.updateShadowArea(); + + this.afterSelectionUpdate(player); plugin.msg(player, lm.Select_Success); showSelectionInfo(player); } public void modify(Player player, boolean shift, double amount) { - if (!hasPlacedBoth(player.getName())) { + if (!hasPlacedBoth(player)) { plugin.msg(player, lm.Select_Points); return; } @@ -696,7 +862,7 @@ public void modify(Player player, boolean shift, double amount) { plugin.msg(player, lm.Invalid_Direction); return; } - CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); + CuboidArea area = this.getSelectionCuboid(player); switch (d) { case DOWN: double oldy = area.getLowLoc().getBlockY(); @@ -789,7 +955,7 @@ public boolean contract(Player player, double amount) { } public boolean contract(Player player, double amount, @SuppressWarnings("unused") boolean resadmin) { - if (!hasPlacedBoth(player.getName())) { + if (!hasPlacedBoth(player)) { plugin.msg(player, lm.Select_Points); return false; } @@ -798,7 +964,7 @@ public boolean contract(Player player, double amount, @SuppressWarnings("unused" plugin.msg(player, lm.Invalid_Direction); return false; } - CuboidArea area = new CuboidArea(playerLoc1.get(player.getName()), playerLoc2.get(player.getName())); + CuboidArea area = this.getSelectionCuboid(player); switch (d) { case UP: double oldy = area.getHighLoc().getBlockY(); diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 607471716..1c98aadfe 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -1,90 +1,89 @@ -package com.bekvon.bukkit.residence.selection; - -import com.bekvon.bukkit.residence.Residence; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldedit.bukkit.selections.CuboidSelection; -import com.sk89q.worldedit.bukkit.selections.Selection; -import com.sk89q.worldedit.regions.CuboidRegion; - -import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.entity.Player; - -public class WorldEditSelectionManager extends SelectionManager { - - public WorldEditSelectionManager(Server serv, Residence plugin) { - super(serv, plugin); - } - - @Override - public boolean worldEdit(Player player) { - WorldEditPlugin wep = (WorldEditPlugin) this.server.getPluginManager().getPlugin("WorldEdit"); - Selection sel = wep.getSelection(player); - - if (sel != null) { - Location pos1 = sel.getMinimumPoint(); - Location pos2 = sel.getMaximumPoint(); - try { - CuboidRegion region = (CuboidRegion) sel.getRegionSelector().getRegion(); - pos1 = new Location(player.getWorld(), region.getPos1().getX(), region.getPos1().getY(), region.getPos1().getZ()); - pos2 = new Location(player.getWorld(), region.getPos2().getX(), region.getPos2().getY(), region.getPos2().getZ()); - } catch (Exception e) { - } - this.playerLoc1.put(player.getName(), pos1); - this.playerLoc2.put(player.getName(), pos2); - return true; - } - return false; - } - - @Override - public boolean worldEditUpdate(Player player) { - if (!hasPlacedBoth(player.getName())) - return false; - CuboidSelection selection = new CuboidSelection(player.getWorld(), getPlayerLoc1(player.getName()), getPlayerLoc2(player.getName())); - plugin.getWorldEdit().setSelection(player, selection); - return true; - } - - @Override - public void placeLoc1(Player player, Location loc, boolean show) { - super.placeLoc1(player, loc, show); - this.worldEditUpdate(player); - } - - @Override - public void placeLoc2(Player player, Location loc, boolean show) { - super.placeLoc2(player, loc, show); - this.worldEditUpdate(player); - } - - @Override - public void sky(Player player, boolean resadmin) { - super.sky(player, resadmin); - this.worldEditUpdate(player); - } - - @Override - public void bedrock(Player player, boolean resadmin) { - super.bedrock(player, resadmin); - this.worldEditUpdate(player); - } - - @Override - public void modify(Player player, boolean shift, double amount) { - super.modify(player, shift, amount); - this.worldEditUpdate(player); - } - - @Override - public void selectChunk(Player player) { - super.selectChunk(player); - this.worldEditUpdate(player); - } - - @Override - public void showSelectionInfo(Player player) { - super.showSelectionInfo(player); - this.worldEditUpdate(player); - } -} +package com.bekvon.bukkit.residence.selection; + +import com.bekvon.bukkit.residence.Residence; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldedit.bukkit.selections.CuboidSelection; +import com.sk89q.worldedit.bukkit.selections.Selection; +import com.sk89q.worldedit.regions.CuboidRegion; + +import org.bukkit.Location; +import org.bukkit.Server; +import org.bukkit.entity.Player; + +public class WorldEditSelectionManager extends SelectionManager { + + public WorldEditSelectionManager(Server serv, Residence plugin) { + super(serv, plugin); + } + + @Override + public boolean worldEdit(Player player) { + WorldEditPlugin wep = (WorldEditPlugin) this.server.getPluginManager().getPlugin("WorldEdit"); + com.sk89q.worldedit.bukkit.selections.Selection sel = wep.getSelection(player); + + if (sel != null) { + Location pos1 = sel.getMinimumPoint(); + Location pos2 = sel.getMaximumPoint(); + try { + CuboidRegion region = (CuboidRegion) sel.getRegionSelector().getRegion(); + pos1 = new Location(player.getWorld(), region.getPos1().getX(), region.getPos1().getY(), region.getPos1().getZ()); + pos2 = new Location(player.getWorld(), region.getPos2().getX(), region.getPos2().getY(), region.getPos2().getZ()); + } catch (Exception e) { + } + this.updateLocations(player, pos1, pos2); + return true; + } + return false; + } + + @Override + public boolean worldEditUpdate(Player player) { + if (!hasPlacedBoth(player)) + return false; + CuboidSelection selection = new CuboidSelection(player.getWorld(), getPlayerLoc1(player), getPlayerLoc2(player)); + plugin.getWorldEdit().setSelection(player, selection); + return true; + } + + @Override + public void placeLoc1(Player player, Location loc, boolean show) { + super.placeLoc1(player, loc, show); + this.worldEditUpdate(player); + } + + @Override + public void placeLoc2(Player player, Location loc, boolean show) { + super.placeLoc2(player, loc, show); + this.worldEditUpdate(player); + } + + @Override + public void sky(Player player, boolean resadmin) { + super.sky(player, resadmin); + this.worldEditUpdate(player); + } + + @Override + public void bedrock(Player player, boolean resadmin) { + super.bedrock(player, resadmin); + this.worldEditUpdate(player); + } + + @Override + public void modify(Player player, boolean shift, double amount) { + super.modify(player, shift, amount); + this.worldEditUpdate(player); + } + + @Override + public void selectChunk(Player player) { + super.selectChunk(player); + this.worldEditUpdate(player); + } + + @Override + public void showSelectionInfo(Player player) { + super.showSelectionInfo(player); + this.worldEditUpdate(player); + } +} From 4a6e30341363db7bdc57840e4b4951d387d81c59 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 16 Jan 2018 13:49:01 +0200 Subject: [PATCH 0464/1142] Don't remove wither on explosion event --- .../listeners/ResidenceEntityListener.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 8b89bed0e..ed16b7a25 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -556,8 +556,8 @@ public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { if (plugin.isDisabledWorldListener(ent.getWorld())) return; - if (event.getRemover() instanceof Player) - return; +// if (event.getRemover() instanceof Player) +// return; FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); if (!perms.has(Flags.destroy, perms.has(Flags.build, true))) { @@ -727,7 +727,8 @@ public void onEntityExplode(EntityExplodeEvent event) { if (cancel) { event.setCancelled(true); if (ent != null && remove) { - ent.remove(); + if (!event.getEntityType().equals(EntityType.WITHER)) + ent.remove(); } return; } @@ -942,16 +943,16 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityCatchingFire(EntityDamageByEntityEvent event) { + public void onEntityCatchingFire(EntityDamageByEntityEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; if (!(event.getDamager() instanceof Arrow)) return; - + if (event.getEntity() == null || !(event.getEntity() instanceof Player)) return; - + Arrow arrow = (Arrow) event.getDamager(); FlagPermissions perms = plugin.getPermsByLoc(arrow.getLocation()); From c32f6e8e04d5bc9469f2c7b640ac062bafd07bf6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 16 Jan 2018 13:59:45 +0200 Subject: [PATCH 0465/1142] Prevent itemframe breaking by boats or similar physical action --- .../listeners/ResidenceEntityListener.java | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index ed16b7a25..85eb17719 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -42,6 +42,8 @@ import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.PlayerLeashEntityEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent; +import org.bukkit.event.hanging.HangingBreakEvent; +import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; @@ -547,6 +549,27 @@ public void onHangingBreak(HangingBreakByEntityEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onHangingBreakEvent(HangingBreakEvent event) { + // disabling event on world + Hanging ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + + if (!event.getEntity().getType().equals(EntityType.ITEM_FRAME)) + return; + + if (!event.getCause().equals(RemoveCause.PHYSICS)) + return; + + FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); + if (!perms.has(Flags.destroy, perms.has(Flags.build, true))) { + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { // disabling event on world @@ -556,8 +579,8 @@ public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { if (plugin.isDisabledWorldListener(ent.getWorld())) return; -// if (event.getRemover() instanceof Player) -// return; + if (event.getRemover() instanceof Player) + return; FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); if (!perms.has(Flags.destroy, perms.has(Flags.build, true))) { From 36df82d81642d07a7110a8a35aa0e6acf08f31aa Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 16 Jan 2018 14:53:45 +0200 Subject: [PATCH 0466/1142] Less is more --- .../bukkit/residence/ConfigManager.java | 19 +++++-- .../residence/containers/Visualizer.java | 13 +++++ .../listeners/ResidenceEntityListener.java | 49 +++++++++++-------- .../residence/selection/SelectionManager.java | 44 ++++++++++------- src/plugin.yml | 2 +- 5 files changed, 85 insertions(+), 42 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index b80d92fe4..512041161 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -112,6 +112,7 @@ public class ConfigManager { protected boolean TeleportTitleMessage; protected int VisualizerRowSpacing; protected int VisualizerCollumnSpacing; + protected int VisualizerSkipBy; private int VisualizerFrameCap; private int VisualizerSidesCap; protected boolean flagsInherit; @@ -899,8 +900,8 @@ public void UpdateConfigFile() { VisualizerRange = c.get("Global.Visualizer.Range", 16); c.getW().addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); VisualizerShowFor = c.get("Global.Visualizer.ShowFor", 5000); - c.getW().addComment("Global.Visualizer.updateInterval", "How often in miliseconds update particles for player"); - VisualizerUpdateInterval = c.get("Global.Visualizer.updateInterval", 20); + c.getW().addComment("Global.Visualizer.updateInterval", "How often in ticks to update particles for player"); + VisualizerUpdateInterval = c.get("Global.Visualizer.updateInterval", 5); c.getW().addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); VisualizerRowSpacing = c.get("Global.Visualizer.RowSpacing", 2); if (VisualizerRowSpacing < 1) @@ -910,8 +911,16 @@ public void UpdateConfigFile() { if (VisualizerCollumnSpacing < 1) VisualizerCollumnSpacing = 1; + c.getW().addComment("Global.Visualizer.SkipBy", + "Defines by how many particles we need to skip", + "This will create moving particle effect and will improve overall look of selection", + "By increasing this number, you can decrease update interval"); + VisualizerSkipBy = c.get("Global.Visualizer.SkipBy", 5); + if (VisualizerSkipBy < 1) + VisualizerSkipBy = 1; + c.getW().addComment("Global.Visualizer.FrameCap", "Maximum amount of frame particles to show for one player"); - VisualizerFrameCap = c.get("Global.Visualizer.FrameCap", 2000); + VisualizerFrameCap = c.get("Global.Visualizer.FrameCap", 500); if (VisualizerFrameCap < 1) VisualizerFrameCap = 1; @@ -1249,6 +1258,10 @@ public int getVisualizerCollumnSpacing() { return VisualizerCollumnSpacing; } + public int getVisualizerSkipBy() { + return VisualizerSkipBy; + } + public int getVisualizerUpdateInterval() { return VisualizerUpdateInterval; } diff --git a/src/com/bekvon/bukkit/residence/containers/Visualizer.java b/src/com/bekvon/bukkit/residence/containers/Visualizer.java index d2c460b1c..d1237f465 100644 --- a/src/com/bekvon/bukkit/residence/containers/Visualizer.java +++ b/src/com/bekvon/bukkit/residence/containers/Visualizer.java @@ -21,6 +21,7 @@ public class Visualizer { private int baseShedId = -1; private boolean once = false; private int starting = 0; + private int currentSkip = 0; private List locations = new ArrayList(); private List errorLocations = new ArrayList(); @@ -196,4 +197,16 @@ public int getBaseShedId() { public void setBaseShedId(int baseShedId) { this.baseShedId = baseShedId; } + + public int getCurrentSkip() { + return currentSkip; + } + + public void setCurrentSkip(int currentSkip) { + this.currentSkip = currentSkip; + } + + public void addCurrentSkip() { + this.currentSkip++; + } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 85eb17719..9fdd4cc55 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1,19 +1,32 @@ package com.bekvon.bukkit.residence.listeners; -import org.bukkit.Location; - import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; - +import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Creeper; +import org.bukkit.entity.Damageable; import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Ghast; +import org.bukkit.entity.Hanging; +import org.bukkit.entity.ItemFrame; import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Monster; import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.Slime; +import org.bukkit.entity.Tameable; +import org.bukkit.entity.Vehicle; +import org.bukkit.entity.Witch; +import org.bukkit.entity.minecart.HopperMinecart; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityCombustByEntityEvent; @@ -24,23 +37,10 @@ import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityInteractEvent; -import org.bukkit.event.entity.PotionSplashEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.entity.ProjectileLaunchEvent; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -import org.bukkit.Material; -import org.bukkit.entity.*; -import org.bukkit.entity.minecart.HopperMinecart; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.PlayerLeashEntityEvent; +import org.bukkit.event.entity.PotionSplashEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; @@ -50,6 +50,13 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + public class ResidenceEntityListener implements Listener { Residence plugin; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index de129221c..3c0802b19 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -26,6 +26,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; public class SelectionManager { protected Map selections; @@ -687,31 +688,30 @@ public void run() { int timesMore = 1; int errorTimesMore = 1; - if (size > plugin.getConfigManager().getVisualizerSidesCap() && !same) { + if (size > plugin.getConfigManager().getVisualizerSidesCap()) { timesMore = size / plugin.getConfigManager().getVisualizerSidesCap() + 1; } - if (errorSize > plugin.getConfigManager().getVisualizerFrameCap() && !same) { + if (errorSize > plugin.getConfigManager().getVisualizerFrameCap()) { errorTimesMore = errorSize / plugin.getConfigManager().getVisualizerFrameCap() + 1; } - List trimed = new ArrayList(); - List trimed2 = new ArrayList(); + v.addCurrentSkip(); + if (v.getCurrentSkip() > plugin.getConfigManager().getVisualizerSkipBy()) + v.setCurrentSkip(1); try { - showParticles(locList, player, timesMore, same, trimed, error, true); - showParticles(errorLocList, player, errorTimesMore, same, trimed2, error, false); + showParticles(locList, player, timesMore, error, true, v.getCurrentSkip()); + showParticles(errorLocList, player, errorTimesMore, error, false, v.getCurrentSkip()); } catch (Exception e) { return; } - if (!same) { - if (error) { - v.setErrorLocations(trimed); - v.setErrorLocations2(trimed2); - } else { - v.setLocations(trimed); - v.setLocations2(trimed2); - } + if (error) { + v.setErrorLocations(locList); + v.setErrorLocations2(errorLocList); + } else { + v.setLocations(locList); + v.setLocations2(errorLocList); } return; @@ -742,8 +742,18 @@ public void run() { } - private void showParticles(List locList, Player player, int timesMore, boolean sameLocation, List trimed, boolean error, boolean sides) { + private void showParticles(List locList, Player player, int timesMore, boolean error, boolean sides, int currentSkipBy) { + int s = 0; + for (int i = 0; i < locList.size(); i += timesMore) { + s++; + + if (s > plugin.getConfigManager().getVisualizerSkipBy()) + s = 1; + + if (s != currentSkipBy) + continue; + Location l = locList.get(i); if (plugin.isSpigot()) { Effect effect = null; @@ -767,8 +777,8 @@ private void showParticles(List locList, Player player, int timesMore, } } - if (!sameLocation) - trimed.add(l); +// if (!sameLocation) +// trimed.add(l); } } diff --git a/src/plugin.yml b/src/plugin.yml index 52c730dfc..7d1c3c603 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.3.1 +version: 4.7.4.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 72f5566054d75aac6353d730d490ba0610ac3441 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 16 Jan 2018 15:06:21 +0200 Subject: [PATCH 0467/1142] Small adjustment for selection --- src/com/bekvon/bukkit/residence/commands/create.java | 4 ++-- .../bekvon/bukkit/residence/selection/SelectionManager.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 7a2171fc1..95da5816e 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -32,8 +32,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { - plugin.getResidenceManager().addResidence(player, args[1], plugin.getSelectionManager().getPlayerLoc1(player.getName()), plugin - .getSelectionManager().getPlayerLoc2(player.getName()), resadmin); + plugin.getResidenceManager().addResidence(player, args[1], plugin.getSelectionManager().getPlayerLoc1(player), plugin + .getSelectionManager().getPlayerLoc2(player), resadmin); return true; } plugin.msg(player, lm.Select_Points); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 3c0802b19..12dd8a0e8 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -350,7 +350,7 @@ public void afterSelectionUpdate(Player player, boolean force) { public Location getPlayerLoc1(Player player) { if (player == null) return null; - return getSelection(player).getBaseLoc1(); + return getSelection(player).getResizedArea().getLowLoc(); } @Deprecated @@ -361,7 +361,7 @@ public Location getPlayerLoc1(String player) { public Location getPlayerLoc2(Player player) { if (player == null) return null; - return getSelection(player).getBaseLoc2(); + return getSelection(player).getResizedArea().getHighLoc(); } @Deprecated From 35626bbca7b058efeb1786c66f634de294c48b4f Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Feb 2018 13:00:07 +0200 Subject: [PATCH 0468/1142] Fix for selection preset issue --- .../bukkit/residence/commands/create.java | 3 +-- .../bukkit/residence/commands/select.java | 12 ++++------ .../residence/selection/SelectionManager.java | 24 ++++++++++++++----- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 95da5816e..3ddeb9f9c 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -30,8 +30,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getSelectionManager().worldEdit(player); } } - if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { - + if (plugin.getSelectionManager().hasPlacedBoth(player)) { plugin.getResidenceManager().addResidence(player, args[1], plugin.getSelectionManager().getPlayerLoc1(player), plugin .getSelectionManager().getPlayerLoc2(player), resadmin); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index b79b67dd9..f459bf56d 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -67,16 +67,15 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } } else if (args[1].equals("vert")) { plugin.getSelectionManager().vert(player, resadmin); - - plugin.getSelectionManager().afterSelectionUpdate(player, false); + plugin.getSelectionManager().afterSelectionUpdate(player, true); return true; } else if (args[1].equals("sky")) { plugin.getSelectionManager().sky(player, resadmin); - plugin.getSelectionManager().afterSelectionUpdate(player, false); + plugin.getSelectionManager().afterSelectionUpdate(player, true); return true; } else if (args[1].equals("bedrock")) { plugin.getSelectionManager().bedrock(player, resadmin); - plugin.getSelectionManager().afterSelectionUpdate(player, false); + plugin.getSelectionManager().afterSelectionUpdate(player, true); return true; } else if (args[1].equals("coords")) { plugin.msg(player, lm.General_Separator); @@ -88,15 +87,14 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Location playerLoc2 = plugin.getSelectionManager().getPlayerLoc2(player); if (playerLoc2 != null) { plugin.msg(player, lm.Select_Secondary, plugin.msg(lm.General_CoordsBottom, playerLoc2.getBlockX(), - playerLoc2 - .getBlockY(), playerLoc2.getBlockZ())); + playerLoc2.getBlockY(), playerLoc2.getBlockZ())); } plugin.msg(player, lm.General_Separator); plugin.getSelectionManager().afterSelectionUpdate(player, false); return true; } else if (args[1].equals("chunk")) { plugin.getSelectionManager().selectChunk(player); - plugin.getSelectionManager().afterSelectionUpdate(player, false); + plugin.getSelectionManager().afterSelectionUpdate(player, true); return true; } else if (args[1].equals("worldedit")) { if (plugin.getSelectionManager().worldEdit(player)) { diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 12dd8a0e8..315e24451 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -174,7 +174,10 @@ public void sky(boolean resadmin) { if (hasPlacedBoth()) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(this.getPlayer()); PermissionGroup group = rPlayer.getGroup(); - int y1 = this.getBaseLoc1().getBlockY(); + + CuboidArea base = this.getBaseArea(); + + int y1 = base.getLowLoc().getBlockY(); int newy = this.getMaxYAllowed(); @@ -184,7 +187,10 @@ public void sky(boolean resadmin) { if (newy - y1 > (group.getMaxY() - 1)) newy = y1 + (group.getMaxY() - 1); } - this.getBaseLoc2().setY(newy); + + loc1 = base.getLowLoc(); + loc2 = base.getHighLoc(); + loc2.setY(newy); plugin.msg(player, lm.Select_Sky); } else { @@ -197,7 +203,9 @@ public void bedrock(boolean resadmin) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(this.getPlayer()); PermissionGroup group = rPlayer.getGroup(); - int y2 = this.getBaseLoc2().getBlockY(); + CuboidArea base = this.getBaseArea(); + + int y2 = base.getHighLoc().getBlockY(); int newy = this.getMinYAllowed(); if (!resadmin) { @@ -206,7 +214,11 @@ public void bedrock(boolean resadmin) { if (y2 - newy > (group.getMaxY() - 1)) newy = y2 - (group.getMaxY() - 1); } - this.getBaseLoc1().setY(newy); + + loc1 = base.getLowLoc(); + loc2 = base.getHighLoc(); + loc1.setY(newy); + plugin.msg(player, lm.Select_Bedrock); } else { plugin.msg(player, lm.Select_Points); @@ -219,8 +231,8 @@ public void selectChunk() { int zcoord = chunk.getZ() * 16; int xmax = xcoord + 15; int zmax = zcoord + 15; - this.setBaseLoc1(new Location(player.getWorld(), xcoord, player.getLocation().getBlockY(), zcoord)); - this.setBaseLoc2(new Location(player.getWorld(), xmax, player.getLocation().getBlockY(), zmax)); + this.setBaseLoc1(new Location(player.getWorld(), xcoord, this.getMinYAllowed(), zcoord)); + this.setBaseLoc2(new Location(player.getWorld(), xmax, this.getMaxYAllowed(), zmax)); plugin.msg(player, lm.Select_Success); } From 178540611bcd1e35e926e9a1004f4676c4e75190 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Feb 2018 14:41:46 +0200 Subject: [PATCH 0469/1142] Ignore material interact check if player is owner --- .../listeners/ResidencePlayerListener.java | 24 ++++++++++--------- .../protection/ResidenceManager.java | 6 ++++- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 91e8af799..abc19be95 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1181,23 +1181,25 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (isContainer(mat, block) || isCanUseEntity(mat, block)) { boolean hasuse = perms.playerHas(player, Flags.use, true); - for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { - if (mat != checkMat.getKey()) - continue; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null || !res.isOwner(player)) + for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { + if (mat != checkMat.getKey()) + continue; - if (perms.playerHas(player, checkMat.getValue(), hasuse)) - continue; + if (perms.playerHas(player, checkMat.getValue(), hasuse)) + continue; - if (hasuse || checkMat.getValue().equals(Flags.container)) { + if (hasuse || checkMat.getValue().equals(Flags.container)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); + return; + } event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); + plugin.msg(player, lm.Flag_Deny, Flags.use); return; } - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use); - return; - } if (plugin.getConfigManager().getCustomContainers().contains(blockId)) { if (!perms.playerHas(player, Flags.container, hasuse)) { event.setCancelled(true); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index d3fae4053..dda07b022 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -64,6 +64,10 @@ public boolean isOwnerOfLocation(Player player, Location loc) { return false; } + public ClaimedResidence getByLoc(Player player) { + return getByLoc(player.getLocation()); + } + @Override public ClaimedResidence getByLoc(Location loc) { if (loc == null) @@ -550,7 +554,7 @@ public void removeResidence(Player player, String name, boolean resadmin) { plugin.getRentManager().removeRentable(name); plugin.getTransactionManager().removeFromSale(name); - if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { + if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { double chargeamount = Math.ceil(res.getTotalSize() * res.getBlockSellPrice()); plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); } From 4bdc8e15a268457a40dc2405462e4dd8d4226444 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Feb 2018 15:09:16 +0200 Subject: [PATCH 0470/1142] Only cancel use on material type if its right mouse click --- .../residence/listeners/ResidencePlayerListener.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index abc19be95..3b529811f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1195,8 +1195,11 @@ public void onPlayerInteract(PlayerInteractEvent event) { plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); return; } - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use); + + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.use); + } return; } From e5abf0397642373620d7ceafb6cf73a2dcc40e4b Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Feb 2018 15:24:54 +0200 Subject: [PATCH 0471/1142] output help page on failed select command usage --- src/com/bekvon/bukkit/residence/commands/select.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index f459bf56d..cdd672af0 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -46,6 +46,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Select_Disabled); return true; } + if (args.length == 2) { if (args[1].equals("size") || args[1].equals("cost")) { if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { @@ -188,8 +189,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getSelectionManager().selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); return true; } catch (Exception ex) { - plugin.msg(player, lm.Select_Fail); - return true; +// plugin.msg(player, lm.Select_Fail); + return false; } } From 1f2a23371d034f2df3b98b17d3f2992c11a748ca Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 8 Feb 2018 13:12:12 +0200 Subject: [PATCH 0472/1142] Option to disable flag checks completely more compact flgas GUI icon data in flags.yml --- .../bukkit/residence/ConfigManager.java | 33 ++++- .../bekvon/bukkit/residence/Residence.java | 4 +- .../bukkit/residence/containers/Flags.java | 11 +- .../bekvon/bukkit/residence/gui/FlagUtil.java | 130 +++++++++-------- .../bekvon/bukkit/residence/gui/SetFlag.java | 8 ++ .../listeners/ResidenceBlockListener.java | 67 +++++++++ .../listeners/ResidenceEntityListener.java | 131 ++++++++++++++++-- .../listeners/ResidencePlayerListener.java | 55 +++++++- .../residence/protection/FlagPermissions.java | 20 ++- .../bukkit/residence/text/help/HelpEntry.java | 2 + src/plugin.yml | 2 +- 11 files changed, 378 insertions(+), 85 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 512041161..fda5e0645 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -297,6 +297,12 @@ void UpdateFlagFile() { File f = new File(plugin.getDataFolder(), "flags.yml"); YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); +// if (!conf.isConfigurationSection("Global.CompleteDisable")) +// conf.crea.createSection("Global.CompleteDisable"); + + if (!conf.isList("Global.TotalFlagDisabling")) + conf.set("Global.TotalFlagDisabling", Arrays.asList("Completely", "Disabled", "Particular", "Flags")); + for (Flags fl : Flags.values()) { if (conf.isBoolean("Global.FlagPermission." + fl.getName())) continue; @@ -310,8 +316,19 @@ void UpdateFlagFile() { ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); for (Flags fl : Flags.values()) { - guiSection.set(fl.getName() + ".Id", fl.getId()); - guiSection.set(fl.getName() + ".Data", fl.getData()); + if (guiSection.isInt(fl.getName() + ".Id") && guiSection.isInt(fl.getName() + ".Data")) { + + String data = ""; + if (guiSection.getInt(fl.getName() + ".Data") != 0) + data = "-" + guiSection.getInt(fl.getName() + ".Data"); + + guiSection.set(fl.getName(), guiSection.getInt(fl.getName() + ".Id") + data); + } else { + String data = ""; + if (fl.getData() != 0) + data = "-" + guiSection.getInt(fl.getName() + ".Data"); + guiSection.set(fl.getName(), fl.getId() + data); + } } try { @@ -1135,6 +1152,18 @@ public void UpdateConfigFile() { public void loadFlags() { FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); + + if (flags.isList("Global.TotalFlagDisabling")) { + List globalDisable = flags.getStringList("Global.TotalFlagDisabling"); + + for (String fl : globalDisable) { + Flags flag = Flags.getFlag(fl); + if (flag == null) + continue; + flag.setGlobalyEnabled(false); + } + } + globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", flags.getConfigurationSection("Global")); globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", flags.getConfigurationSection("Global")); loadGroups(); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 50ff690f3..00becea8b 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -437,6 +437,9 @@ public void onEnable() { } } } + + getConfigManager().UpdateFlagFile(); + FlagUtilManager = new FlagUtil(this); getFlagUtilManager().load(); @@ -505,7 +508,6 @@ public void onEnable() { getLocaleManager().LoadLang(lang); } - getConfigManager().UpdateFlagFile(); try { File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index f8724ca63..449549377 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -117,6 +117,7 @@ public enum Flags { private FlagMode flagMode; private String desc; private boolean enabled; + private boolean globalyEnabled = true; public static enum FlagMode { Player, Residence, Both, Group @@ -155,7 +156,7 @@ public void setDesc(String desc) { } public boolean isEnabled() { - return enabled; + return globalyEnabled ? enabled : false; } public void setEnabled(boolean enabled) { @@ -169,4 +170,12 @@ public static Flags getFlag(String flag) { } return null; } + + public boolean isGlobalyEnabled() { + return globalyEnabled; + } + + public void setGlobalyEnabled(boolean globalyEnabled) { + this.globalyEnabled = globalyEnabled; + } } diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 08e198c81..f72301903 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -1,61 +1,69 @@ -package com.bekvon.bukkit.residence.gui; - -import java.io.File; -import java.util.Set; - -import org.bukkit.Material; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.residence.CommentedYamlConfiguration; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.ConfigReader; - -public class FlagUtil { - - private FlagData flagData = new FlagData(); - private Residence plugin; - - public FlagUtil(Residence plugin) { - this.plugin = plugin; - } - - public void load() { - File f = new File(plugin.getDataFolder(), "flags.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); - - ConfigReader c = new ConfigReader(conf, writer); - - if (!conf.isConfigurationSection("Global.FlagPermission")) - return; - - Set allFlags = conf.getConfigurationSection("Global.FlagPermission").getKeys(false); - - for (String oneFlag : allFlags) { - if (!c.getC().contains("Global.FlagGui." + oneFlag)) - continue; - - if (!c.getC().contains("Global.FlagGui." + oneFlag + ".Id")) - continue; - - if (!c.getC().contains("Global.FlagGui." + oneFlag + ".Data")) - continue; - - int id = c.get("Global.FlagGui." + oneFlag + ".Id", 35); - int data = c.get("Global.FlagGui." + oneFlag + ".Data", 0); - - @SuppressWarnings("deprecation") - Material Mat = Material.getMaterial(id); - if (Mat == null) - Mat = Material.STONE; - ItemStack item = new ItemStack(Mat, 1, (short) data); - flagData.addFlagButton(oneFlag.toLowerCase(), item); - } - } - - public FlagData getFlagData() { - return flagData; - } -} +package com.bekvon.bukkit.residence.gui; + +import java.io.File; +import java.util.Set; + +import org.bukkit.Material; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.CommentedYamlConfiguration; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ConfigReader; + +public class FlagUtil { + + private FlagData flagData = new FlagData(); + private Residence plugin; + + public FlagUtil(Residence plugin) { + this.plugin = plugin; + } + + public void load() { + File f = new File(plugin.getDataFolder(), "flags.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + ConfigReader c = new ConfigReader(conf, writer); + + if (!conf.isConfigurationSection("Global.FlagPermission")) + return; + + Set allFlags = conf.getConfigurationSection("Global.FlagPermission").getKeys(false); + + for (String oneFlag : allFlags) { + if (!c.getC().contains("Global.FlagGui." + oneFlag)) + continue; + + int id = 35; + int data = 0; + + String value = c.get("Global.FlagGui." + oneFlag, "35-0"); + + try { + if (value.contains("-")) { + id = Integer.parseInt(value.split("-")[0]); + data = Integer.parseInt(value.split("-")[1]); + } else + id = Integer.parseInt(value); + } catch (Exception e) { + } + + + @SuppressWarnings("deprecation") + Material Mat = Material.getMaterial(id); + if (Mat == null) + Mat = Material.STONE; + ItemStack item = new ItemStack(Mat, 1, (short) data); + flagData.addFlagButton(oneFlag.toLowerCase(), item); + } + + + } + + public FlagData getFlagData() { + return flagData; + } +} diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 7c5726b53..9e63c3723 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -161,6 +161,14 @@ public void recalculateResidence(ClaimedResidence res) { } for (Entry one : globalFlags.entrySet()) { + + String fname = one.getKey(); + + Flags flag = Flags.getFlag(fname); + + if (flag != null && !flag.isGlobalyEnabled()) + continue; + if (!flags.contains(one.getKey())) continue; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index a99d87753..8b1cd3d0e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -63,6 +63,9 @@ public ResidenceBlockListener(Residence residence) { @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST) public void onAnvilInventoryClick(InventoryClickEvent e) { + // Disabling listener if flag disabled globally + if (!Flags.anvilbreak.isGlobalyEnabled()) + return; Inventory inv = e.getInventory(); try { @@ -91,6 +94,9 @@ public void onAnvilInventoryClick(InventoryClickEvent e) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlantGrow(BlockGrowEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.grow.isGlobalyEnabled()) + return; if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); @@ -101,6 +107,9 @@ public void onPlantGrow(BlockGrowEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onVineGrow(BlockSpreadEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.grow.isGlobalyEnabled()) + return; if (event.getSource().getType() != Material.VINE) return; if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) @@ -113,6 +122,9 @@ public void onVineGrow(BlockSpreadEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onleaveDecay(LeavesDecayEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.decay.isGlobalyEnabled()) + return; if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); @@ -123,6 +135,9 @@ public void onleaveDecay(LeavesDecayEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onTreeGrowt(StructureGrowEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.grow.isGlobalyEnabled()) + return; if (plugin.isDisabledWorldListener(event.getWorld())) return; FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); @@ -197,6 +212,9 @@ public void onBlockBreak(BlockBreakEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockForm(BlockFormEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.snowtrail.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -213,6 +231,9 @@ public void onBlockForm(BlockFormEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onIceForm(BlockFormEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.iceform.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -230,6 +251,9 @@ public void onIceForm(BlockFormEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onIceMelt(BlockFadeEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.icemelt.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -248,6 +272,9 @@ public void onIceMelt(BlockFadeEvent event) { @EventHandler public void onEntityChangeBlock(EntityChangeBlockEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.fallinprotection.isGlobalyEnabled()) + return; if (event.getEntityType() != EntityType.FALLING_BLOCK) return; Entity ent = event.getEntity(); @@ -272,6 +299,9 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockFall(EntityChangeBlockEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.fallinprotection.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -422,6 +452,9 @@ public void onBlockPlace(BlockPlaceEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockSpread(BlockSpreadEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.spread.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -437,12 +470,21 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; + + // Disabling listener if flag disabled globally + if (!Flags.piston.isGlobalyEnabled()) + return; + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.piston, true)) { event.setCancelled(true); return; } + // Disabling listener if flag disabled globally + if (!Flags.pistonprotection.isGlobalyEnabled()) + return; + List blocks = plugin.getNms().getPistonRetractBlocks(event); if (!event.isSticky()) @@ -471,12 +513,19 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; + + // Disabling listener if flag disabled globally + if (!Flags.piston.isGlobalyEnabled()) + return; FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.piston, true)) { event.setCancelled(true); return; } + // Disabling listener if flag disabled globally + if (!Flags.pistonprotection.isGlobalyEnabled()) + return; ClaimedResidence pistonRes = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); BlockFace dir = event.getDirection(); @@ -543,6 +592,9 @@ public void onBlockFromTo(BlockFromToEvent event) { @SuppressWarnings({ "deprecation" }) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLandDryFade(BlockFadeEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.dryup.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -562,6 +614,9 @@ public void onLandDryFade(BlockFadeEvent event) { @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLandDryPhysics(BlockPhysicsEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.dryup.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -648,6 +703,9 @@ public void onLavaWaterFlow(BlockFromToEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBurn(BlockBurnEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.firespread.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -663,10 +721,16 @@ public void onBlockIgnite(BlockIgniteEvent event) { return; IgniteCause cause = event.getCause(); if (cause == IgniteCause.SPREAD) { + // Disabling listener if flag disabled globally + if (!Flags.firespread.isGlobalyEnabled()) + return; FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.firespread, true)) event.setCancelled(true); } else if (cause == IgniteCause.FLINT_AND_STEEL) { + // Disabling listener if flag disabled globally + if (!Flags.ignite.isGlobalyEnabled()) + return; Player player = event.getPlayer(); FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlock().getLocation(), player); if (player != null && !perms.playerHas(player, Flags.ignite, true) && !plugin.isResAdminOn(player)) { @@ -674,6 +738,9 @@ public void onBlockIgnite(BlockIgniteEvent event) { plugin.msg(player, lm.Flag_Deny, Flags.ignite.getName()); } } else { + // Disabling listener if flag disabled globally + if (!Flags.ignite.isGlobalyEnabled()) + return; FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.ignite, true)) { event.setCancelled(true); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 9fdd4cc55..3e5396089 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -100,6 +100,9 @@ public void onEndermanChangeBlock(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void onEntityInteract(EntityInteractEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.trample.isGlobalyEnabled()) + return; // disabling event on world Block block = event.getBlock(); if (block == null) @@ -125,6 +128,9 @@ private static boolean isTamed(Entity ent) { @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(EntityDamageByEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.animalkilling.isGlobalyEnabled()) + return; // disabling event on world Entity entity = event.getEntity(); if (entity == null) @@ -169,6 +175,9 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.animalkilling.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -216,6 +225,9 @@ public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.animalkilling.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -243,6 +255,9 @@ public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void OnEntityDeath(EntityDeathEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.mobitemdrop.isGlobalyEnabled() && !Flags.mobexpdrop.isGlobalyEnabled()) + return; // disabling event on world LivingEntity ent = event.getEntity(); if (ent == null) @@ -263,6 +278,9 @@ public void OnEntityDeath(EntityDeathEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void VehicleDestroy(VehicleDestroyEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.vehicledestroy.isGlobalyEnabled()) + return; // disabling event on world Entity damager = event.getAttacker(); if (damager == null) @@ -311,6 +329,9 @@ public void VehicleDestroy(VehicleDestroyEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void MonsterKilling(EntityDamageByEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.mobkilling.isGlobalyEnabled()) + return; // disabling event on world Entity entity = event.getEntity(); if (entity == null) @@ -355,6 +376,9 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void AnimalLeash(PlayerLeashEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.leash.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -381,6 +405,9 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onWitherSpawn(CreatureSpawnEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.witherspawn.isGlobalyEnabled()) + return; // disabling event on world Entity ent = event.getEntity(); if (ent == null) @@ -515,6 +542,9 @@ public void onHangingPlace(HangingPlaceEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onProjectileLaunch(ProjectileLaunchEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.shoot.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -564,10 +594,10 @@ public void onHangingBreakEvent(HangingBreakEvent event) { return; if (plugin.isDisabledWorldListener(ent.getWorld())) return; - + if (!event.getEntity().getType().equals(EntityType.ITEM_FRAME)) return; - + if (!event.getCause().equals(RemoveCause.PHYSICS)) return; @@ -576,7 +606,7 @@ public void onHangingBreakEvent(HangingBreakEvent event) { event.setCancelled(true); } } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { // disabling event on world @@ -597,6 +627,9 @@ public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityCombust(EntityCombustEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.burn.isGlobalyEnabled()) + return; // disabling event on world Entity ent = event.getEntity(); if (ent == null) @@ -622,6 +655,10 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { switch (entity) { case CREEPER: + + // Disabling listener if flag disabled globally + if (!Flags.creeper.isGlobalyEnabled()) + break; if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) { if (plugin.getConfigManager().isCreeperExplodeBelow()) { if (ent.getLocation().getBlockY() >= plugin.getConfigManager().getCreeperExplodeBelowLevel()) { @@ -642,6 +679,10 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { break; case PRIMED_TNT: case MINECART_TNT: + + // Disabling listener if flag disabled globally + if (!Flags.tnt.isGlobalyEnabled()) + break; if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { if (plugin.getConfigManager().isTNTExplodeBelow()) { if (ent.getLocation().getBlockY() >= plugin.getConfigManager().getTNTExplodeBelowLevel()) { @@ -662,12 +703,18 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { break; case SMALL_FIREBALL: case FIREBALL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + break; if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) { event.setCancelled(true); ent.remove(); } break; case WITHER_SKULL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + break; if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) { event.setCancelled(true); ent.remove(); @@ -703,6 +750,9 @@ public void onEntityExplode(EntityExplodeEvent event) { if (ent != null) { switch (event.getEntityType()) { case CREEPER: + // Disabling listener if flag disabled globally + if (!Flags.creeper.isGlobalyEnabled()) + break; if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) if (plugin.getConfigManager().isCreeperExplodeBelow()) { if (loc.getBlockY() >= plugin.getConfigManager().getCreeperExplodeBelowLevel()) @@ -717,6 +767,9 @@ public void onEntityExplode(EntityExplodeEvent event) { break; case PRIMED_TNT: case MINECART_TNT: + // Disabling listener if flag disabled globally + if (!Flags.tnt.isGlobalyEnabled()) + break; if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { if (plugin.getConfigManager().isTNTExplodeBelow()) { if (loc.getBlockY() >= plugin.getConfigManager().getTNTExplodeBelowLevel()) @@ -732,11 +785,17 @@ public void onEntityExplode(EntityExplodeEvent event) { break; case SMALL_FIREBALL: case FIREBALL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + return; if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) cancel = true; break; case WITHER: case WITHER_SKULL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + break; if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) cancel = true; break; @@ -770,6 +829,9 @@ public void onEntityExplode(EntityExplodeEvent event) { if (ent != null) { switch (event.getEntityType()) { case CREEPER: + // Disabling listener if flag disabled globally + if (!Flags.creeper.isGlobalyEnabled()) + continue; if (!blockperms.has(Flags.creeper, blockperms.has(Flags.explode, true))) if (plugin.getConfigManager().isCreeperExplodeBelow()) { if (block.getY() >= plugin.getConfigManager().getCreeperExplodeBelowLevel()) @@ -784,6 +846,9 @@ public void onEntityExplode(EntityExplodeEvent event) { continue; case PRIMED_TNT: case MINECART_TNT: + // Disabling listener if flag disabled globally + if (!Flags.tnt.isGlobalyEnabled()) + continue; if (!blockperms.has(Flags.tnt, blockperms.has(Flags.explode, true))) { if (plugin.getConfigManager().isTNTExplodeBelow()) { if (block.getY() >= plugin.getConfigManager().getTNTExplodeBelowLevel()) @@ -798,20 +863,32 @@ public void onEntityExplode(EntityExplodeEvent event) { } continue; case ENDER_DRAGON: + // Disabling listener if flag disabled globally + if (!Flags.dragongrief.isGlobalyEnabled()) + break; if (blockperms.has(Flags.dragongrief, FlagCombo.OnlyFalse)) preserve.add(block); break; case ENDER_CRYSTAL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + continue; if (blockperms.has(Flags.explode, FlagCombo.OnlyFalse)) preserve.add(block); continue; case SMALL_FIREBALL: case FIREBALL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + continue; if (blockperms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) preserve.add(block); continue; case WITHER: case WITHER_SKULL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + break; if (blockperms.has(Flags.explode, FlagCombo.OnlyFalse) || blockperms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) preserve.add(block); break; @@ -834,6 +911,9 @@ public void onEntityExplode(EntityExplodeEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSplashPotion(EntityChangeBlockEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.witherdestruction.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -853,6 +933,9 @@ public void onSplashPotion(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSplashPotion(PotionSplashEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.pvp.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -891,6 +974,9 @@ public void onSplashPotion(PotionSplashEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.pvp.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -937,6 +1023,9 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { @EventHandler public void OnFallDamage(EntityDamageEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.falldamage.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -974,6 +1063,9 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityCatchingFire(EntityDamageByEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.pvp.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -993,6 +1085,9 @@ public void onEntityCatchingFire(EntityDamageByEntityEvent event) { @EventHandler public void OnPlayerDamageByLightning(EntityDamageEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.pvp.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -1009,6 +1104,9 @@ public void OnPlayerDamageByLightning(EntityDamageEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByFireballEvent(EntityDamageByEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.fireball.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -1028,6 +1126,9 @@ public void onEntityDamageByFireballEvent(EntityDamageByEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByWitherEvent(EntityDamageByEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.witherdamage.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; @@ -1071,16 +1172,24 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { event.setCancelled(true); return; } else if (dmgr.getType() == EntityType.PRIMED_TNT || dmgr.getType() == EntityType.MINECART_TNT) { - FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); - if (perms.has(Flags.explode, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; + + // Disabling listener if flag disabled globally + if (Flags.explode.isGlobalyEnabled()) { + FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); + if (perms.has(Flags.explode, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } } } else if (dmgr.getType() == EntityType.WITHER_SKULL || dmgr.getType() == EntityType.WITHER) { - FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); - if (perms.has(Flags.witherdamage, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; + + // Disabling listener if flag disabled globally + if (Flags.witherdamage.isGlobalyEnabled()) { + FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); + if (perms.has(Flags.witherdamage, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3b529811f..5edaa95e2 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -125,6 +125,10 @@ public void reload() { @EventHandler public void onJump(PlayerMoveEvent event) { + + if (!Flags.jump3.isGlobalyEnabled() && !Flags.jump2.isGlobalyEnabled()) + return; + Player player = event.getPlayer(); if (player.isFlying()) return; @@ -133,15 +137,17 @@ public void onJump(PlayerMoveEvent event) { return; FlagPermissions perms = plugin.getPermsByLoc(player.getLocation()); - if (perms.has(Flags.jump2, FlagCombo.OnlyTrue)) + if (Flags.jump2.isGlobalyEnabled() && perms.has(Flags.jump2, FlagCombo.OnlyTrue)) player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.3))); - else if (perms.has(Flags.jump3, FlagCombo.OnlyTrue)) + else if (Flags.jump3.isGlobalyEnabled() && perms.has(Flags.jump3, FlagCombo.OnlyTrue)) player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.6))); } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { + if (!Flags.itempickup.isGlobalyEnabled()) + return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getItem().getLocation()); if (res == null) return; @@ -155,6 +161,8 @@ public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerDropItemEvent(PlayerDropItemEvent event) { + if (!Flags.itemdrop.isGlobalyEnabled()) + return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation()); if (res == null) return; @@ -290,6 +298,9 @@ public void run() { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onFishingRodUse(PlayerFishEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.hook.isGlobalyEnabled()) + return; if (event == null) return; // disabling event on world @@ -532,6 +543,9 @@ public void onFlagChangeFly(ResidenceFlagChangeEvent event) { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onCommand(PlayerCommandPreprocessEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.command.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -820,6 +834,9 @@ public void onPlayerQuit(PlayerQuitEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerWorldChange(PlayerChangedWorldEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.nofly.isGlobalyEnabled()) + return; Player player = event.getPlayer(); FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); @@ -1276,6 +1293,9 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; + // Disabling listener if flag disabled globally + if (!Flags.container.isGlobalyEnabled()) + return; Player player = event.getPlayer(); if (plugin.isResAdminOn(player)) return; @@ -1296,6 +1316,9 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractWithRidable(PlayerInteractEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.riding.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -1319,6 +1342,9 @@ public void onPlayerInteractWithRidable(PlayerInteractEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.container.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -1342,6 +1368,9 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.riding.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -1365,6 +1394,9 @@ public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.dye.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -1388,6 +1420,9 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerShearEntity(PlayerShearEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.shear.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -1413,6 +1448,9 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.container.isGlobalyEnabled()) + return; // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) @@ -1853,8 +1891,9 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move } else { if (res != null && ResOld.getName().equals(res.getName())) { - f: if (player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !player.hasPermission( - "residence.nofly.bypass")) { + f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !player + .hasPermission( + "residence.nofly.bypass")) { if (res.isOwner(player)) break f; Location lc = player.getLocation(); @@ -1977,7 +2016,7 @@ public void run() { } // Preventing fly in residence only when player has move permission - f: if (player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !player.hasPermission( + f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !player.hasPermission( "residence.nofly.bypass")) { if (res.isOwner(player)) break f; @@ -2148,6 +2187,8 @@ public String insertMessages(Player player, ClaimedResidence res, String message @SuppressWarnings("deprecation") public void doHeals() { + if (!Flags.healing.isGlobalyEnabled()) + return; try { for (Player player : Bukkit.getServer().getOnlinePlayers()) { String resname = plugin.getPlayerListener().getCurrentResidenceName(player.getName()); @@ -2172,6 +2213,8 @@ public void doHeals() { } public void feed() { + if (!Flags.feed.isGlobalyEnabled()) + return; try { for (Player player : Bukkit.getServer().getOnlinePlayers()) { String resname = plugin.getPlayerListener().getCurrentResidenceName(player.getName()); @@ -2194,6 +2237,8 @@ public void feed() { } public void DespawnMobs() { + if (!Flags.nomobs.isGlobalyEnabled()) + return; try { for (Player player : Bukkit.getServer().getOnlinePlayers()) { String resname = plugin.getPlayerListener().getCurrentResidenceName(player.getName()); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 7fb62e0eb..85f45dc1e 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -837,9 +837,16 @@ public String listFlags(Integer split, Integer totalShow) { int i = -1; int t = 0; while (it.hasNext()) { + Entry next = it.next(); + String fname = next.getKey(); + + Flags flag = Flags.getFlag(fname); + + if (flag != null && !flag.isGlobalyEnabled()) + continue; + i++; t++; - Entry next = it.next(); if (totalShow > 0 && t > totalShow) { break; @@ -851,12 +858,12 @@ public String listFlags(Integer split, Integer totalShow) { } if (next.getValue()) { - sbuild.append("&2").append("+").append(next.getKey()); + sbuild.append("&2").append("+").append(flag); if (it.hasNext()) { sbuild.append(" "); } } else { - sbuild.append("&3").append("-").append(next.getKey()); + sbuild.append("&3").append("-").append(flag); if (it.hasNext()) { sbuild.append(" "); } @@ -898,6 +905,13 @@ public List getPosibleFlags(Player player, boolean residence, boolean re if (!residence && !getposibleFlags().contains(one.getKey())) continue; + String fname = one.getKey(); + + Flags flag = Flags.getFlag(fname); + + if (flag != null && !flag.isGlobalyEnabled()) + continue; + flags.add(one.getKey()); } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 51b5a49bf..2dee6a58e 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -372,6 +372,8 @@ public Set getSubCommands(CommandSender sender, String[] args) { break; case "[flag]": for (Flags one : Flags.values()) { + if (!one.isGlobalyEnabled()) + continue; subCommands.add(one.getName()); } break; diff --git a/src/plugin.yml b/src/plugin.yml index 7d1c3c603..a237296e8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.4.0 +version: 4.7.4.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From a1a17da124f276af2c9f0a97ce18e2491995e81a Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 8 Feb 2018 13:22:44 +0200 Subject: [PATCH 0473/1142] prevent arrow damage when shooter is admin too --- .../bukkit/residence/listeners/ResidenceEntityListener.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 3e5396089..02fcd9a91 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -56,6 +56,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceEntityListener implements Listener { @@ -1012,9 +1013,6 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { if (cause == null) return; - if (plugin.isResAdminOn(cause)) - return; - Boolean srcpvp = plugin.getPermsByLoc(cause.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); Boolean tgtpvp = plugin.getPermsByLoc(entity.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); if (!srcpvp || !tgtpvp) From ffa380702a46e8c27e8aefb3da053bd610d25065 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 9 Feb 2018 14:30:33 +0200 Subject: [PATCH 0474/1142] Don't inform if teleportation failed --- .../listeners/ResidencePlayerListener.java | 1 + .../residence/protection/ClaimedResidence.java | 14 +++++++++----- src/plugin.yml | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 5edaa95e2..8cc3af0b9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -75,6 +75,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e5d689dac..a40b463da 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -27,6 +27,7 @@ import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.text.help.PageInfo; import com.bekvon.bukkit.residence.towns.Town; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.RawMessage; import java.text.DecimalFormat; @@ -1220,6 +1221,7 @@ public int isSafeTp(Player player) { public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { boolean isAdmin = plugin.isResAdminOn(reqPlayer); boolean bypassDelay = targetPlayer.hasPermission("residence.tpdelaybypass"); + if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") && !this.isOwner(targetPlayer)) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); PermissionGroup group = rPlayer.getGroup(); @@ -1309,12 +1311,14 @@ private void performInstantTp(final Location targloc, final Player targetPlayer, plugin.getServ().getPluginManager().callEvent(tpevent); if (!tpevent.isCancelled()) { targetPlayer.closeInventory(); - targetPlayer.teleport(targloc); - if (near) - plugin.msg(targetPlayer, lm.Residence_TeleportNear); - else - plugin.msg(targetPlayer, lm.General_TeleportSuccess); + boolean teleported = targetPlayer.teleport(targloc); + if (teleported) { + if (near) + plugin.msg(targetPlayer, lm.Residence_TeleportNear); + else + plugin.msg(targetPlayer, lm.General_TeleportSuccess); + } } } diff --git a/src/plugin.yml b/src/plugin.yml index a237296e8..412c807c0 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.4.1 +version: 4.7.5.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From f2ccfdcd582ae13f0d914ceed5ed7094756fde4b Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Feb 2018 11:36:38 +0200 Subject: [PATCH 0475/1142] New permission residence.randomtp.cooldownbypass --- src/com/bekvon/bukkit/residence/commands/rt.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index ff889d4e2..64ce19443 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -85,7 +85,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return false; int sec = plugin.getConfigManager().getrtCooldown(); - if (plugin.getRandomTeleportMap().containsKey(tPlayer.getName()) && !resadmin) { + if (plugin.getRandomTeleportMap().containsKey(tPlayer.getName()) && !resadmin && !plugin.hasPermission(sender, "residence.randomtp.cooldownbypass", false)) { if (plugin.getRandomTeleportMap().get(tPlayer.getName()) + (sec * 1000) > System.currentTimeMillis()) { int left = (int) (sec - ((System.currentTimeMillis() - plugin.getRandomTeleportMap().get(tPlayer.getName())) / 1000)); plugin.msg(tPlayer, lm.RandomTeleport_TpLimit, left); From 061715cf5f3f46b9f19cb4436f14039067dddcbe Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Feb 2018 11:54:49 +0200 Subject: [PATCH 0476/1142] Moving set and pset gui flag calculation into async mode --- .../bukkit/residence/commands/pset.java | 70 +++++++++++-------- .../bekvon/bukkit/residence/commands/set.java | 57 +++++++++------ 2 files changed, 78 insertions(+), 49 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 6e92d7a97..db99bad96 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -2,6 +2,7 @@ import java.util.Arrays; +import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -19,7 +20,7 @@ public class pset implements cmd { @Override @CommandAnnotation(simple = true, priority = 800) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(final Residence plugin, final String[] args, final boolean resadmin, Command command, final CommandSender sender) { if (!(sender instanceof Player) && args.length != 5 && args.length == 4 && !args[3].equalsIgnoreCase("removeall")) return false; @@ -77,34 +78,45 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman res.getPermissions().setPlayerFlag(sender, args[2], args[3], args[4], resadmin, true); return true; } else if ((args.length == 2 || args.length == 3) && plugin.getConfigManager().useFlagGUI()) { - Player player = (Player) sender; - ClaimedResidence res = null; - String targetPlayer = null; - if (args.length == 2) { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - targetPlayer = args[1]; - } else { - res = plugin.getResidenceManager().getByName(args[1]); - targetPlayer = args[2]; - } - - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return true; - } - - if (!plugin.isPlayerExist(player, targetPlayer, true)) - return false; - if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { - plugin.msg(sender, lm.General_NoPermission); - return true; - } - SetFlag flag = new SetFlag(res, player, resadmin); - flag.setTargetPlayer(targetPlayer); - flag.recalculatePlayer(res); - player.closeInventory(); - plugin.getPlayerListener().getGUImap().put(player.getName(), flag); - player.openInventory(flag.getInventory()); + + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + + Player player = (Player) sender; + ClaimedResidence res = null; + String targetPlayer = null; + if (args.length == 2) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + targetPlayer = args[1]; + } else { + res = plugin.getResidenceManager().getByName(args[1]); + targetPlayer = args[2]; + } + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return ; + } + + if (!plugin.isPlayerExist(player, targetPlayer, true)){ + plugin.msg(sender, lm.Invalid_Player); + return; + } + if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { + plugin.msg(sender, lm.General_NoPermission); + return ; + } + SetFlag flag = new SetFlag(res, player, resadmin); + flag.setTargetPlayer(targetPlayer); + flag.recalculatePlayer(res); + player.closeInventory(); + plugin.getPlayerListener().getGUImap().put(player.getName(), flag); + player.openInventory(flag.getInventory()); + return; + } + }); + return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 231cb62fb..f7fc9f1f4 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -1,7 +1,13 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; +import java.util.List; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -14,12 +20,17 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; +import com.griefcraft.cache.ProtectionCache; +import com.griefcraft.lwc.LWC; +import com.griefcraft.model.Protection; public class set implements cmd { @Override @CommandAnnotation(simple = true, priority = 700) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(final Residence plugin, final String[] args, final boolean resadmin, Command command, final CommandSender sender) { if (!(sender instanceof Player) && args.length != 4) return false; @@ -49,26 +60,32 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman res.getPermissions().setFlag(sender, args[2], args[3], resadmin); return true; } else if ((args.length == 1 || args.length == 2) && plugin.getConfigManager().useFlagGUI()) { - Player player = (Player) sender; - ClaimedResidence res = null; - if (args.length == 1) - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else - res = plugin.getResidenceManager().getByName(args[1]); - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return true; - } - if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { - plugin.msg(sender, lm.General_NoPermission); - return true; - } + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + Player player = (Player) sender; + ClaimedResidence res = null; + if (args.length == 1) + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + else + res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return; + } + if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { + plugin.msg(sender, lm.General_NoPermission); + return; + } - SetFlag flag = new SetFlag(res, player, resadmin); - flag.recalculateResidence(res); - player.closeInventory(); - plugin.getPlayerListener().getGUImap().put(player.getName(), flag); - player.openInventory(flag.getInventory()); + SetFlag flag = new SetFlag(res, player, resadmin); + flag.recalculateResidence(res); + player.closeInventory(); + plugin.getPlayerListener().getGUImap().put(player.getName(), flag); + player.openInventory(flag.getInventory()); + return; + } + }); return true; } return false; From fc5b241670815997e951e44d2129c79f0d51e1c3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Feb 2018 12:50:04 +0200 Subject: [PATCH 0477/1142] Fix for double format and withdraw from bank --- src/com/bekvon/bukkit/residence/containers/lm.java | 2 +- src/com/bekvon/bukkit/residence/economy/ResidenceBank.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index fe779c518..a3fb2c4f2 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -105,7 +105,7 @@ public enum lm { Bank_Name(" &eBank: &6%1"), Bank_NoMoney("&cNot enough money in the bank."), Bank_Deposit("&eYou deposit &6%1 &einto the residence bank."), - Bank_Withdraw("&eYou withdraw &6%1 from the residence bank."), + Bank_Withdraw("&eYou withdraw &6%1 &efrom the residence bank."), Subzone_Rename("&eRenamed subzone &6%1 &eto &6%2"), Subzone_Remove("&eSubzone &6%1 &eremoved."), diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index 4c8c825a3..be00252be 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import org.bukkit.entity.Player; @@ -78,7 +79,7 @@ public void withdraw(CommandSender sender, double amount, boolean resadmin) { } if (sender instanceof Player && Residence.getInstance().getEconomyManager().add(sender.getName(), amount) || !(sender instanceof Player)) { this.subtract(amount); - Residence.getInstance().msg(sender, lm.Bank_Withdraw, String.format("%d", amount)); + Residence.getInstance().msg(sender, lm.Bank_Withdraw, String.format("%.2f", amount)); } } From 09cd7568c03dd64e5d3fc5ee98d8e55585a61417 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Feb 2018 12:57:18 +0200 Subject: [PATCH 0478/1142] Allow exp bottles to be thrown in residence with shoot false flag --- src/com/bekvon/bukkit/residence/economy/ResidenceBank.java | 1 - .../bukkit/residence/listeners/ResidenceEntityListener.java | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index be00252be..b48bdaad2 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -7,7 +7,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import org.bukkit.entity.Player; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 02fcd9a91..cfa82d3ab 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -549,6 +549,10 @@ public void onProjectileLaunch(ProjectileLaunchEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; + + if (event.getEntityType().equals(EntityType.THROWN_EXP_BOTTLE)) + return; + if (event.getEntity().getShooter() instanceof Player) { if (plugin.isResAdminOn((Player) event.getEntity().getShooter())) return; From a9fe0c2a25fa75d4502a22ce2535c5dfb89a5090 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Feb 2018 13:05:23 +0200 Subject: [PATCH 0479/1142] Extra checks for possible NPC players --- .../listeners/ResidencePlayerListener.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 8cc3af0b9..00a733ade 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -136,6 +136,9 @@ public void onJump(PlayerMoveEvent event) { if (event.getTo().getY() - event.getFrom().getY() != 0.41999998688697815D) return; + + if (player.hasMetadata("NPC")) + return; FlagPermissions perms = plugin.getPermsByLoc(player.getLocation()); if (Flags.jump2.isGlobalyEnabled() && perms.has(Flags.jump2, FlagCombo.OnlyTrue)) @@ -152,6 +155,8 @@ public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getItem().getLocation()); if (res == null) return; + if (event.getPlayer().hasMetadata("NPC")) + return; if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itempickup, FlagCombo.OnlyFalse)) return; if (event.getPlayer().hasPermission("residence.flag.itempickup.bypass")) @@ -167,6 +172,8 @@ public void onPlayerDropItemEvent(PlayerDropItemEvent event) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation()); if (res == null) return; + if (event.getPlayer().hasMetadata("NPC")) + return; if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itemdrop, FlagCombo.OnlyFalse)) return; event.setCancelled(true); @@ -665,7 +672,8 @@ public void onSignInteract(PlayerInteractEvent event) { return; Player player = event.getPlayer(); - + if (player.hasMetadata("NPC")) + return; Location loc = block.getLocation(); for (Signs one : plugin.getSignUtil().getSigns().GetAllSigns()) { @@ -730,7 +738,8 @@ public void onSignCreate(SignChangeEvent event) { String landName = null; Player player = event.getPlayer(); - + if (player.hasMetadata("NPC")) + return; ClaimedResidence res = null; if (!event.getLine(1).equalsIgnoreCase("")) { @@ -802,7 +811,8 @@ public void onSignDestroy(BlockBreakEvent event) { return; Location loc = block.getLocation(); - + if (event.getPlayer().hasMetadata("NPC")) + return; for (Signs one : plugin.getSignUtil().getSigns().GetAllSigns()) { if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) @@ -839,7 +849,8 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { if (!Flags.nofly.isGlobalyEnabled()) return; Player player = event.getPlayer(); - + if (player.hasMetadata("NPC")) + return; FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) && !player.hasPermission( @@ -901,6 +912,8 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { Location loc = event.getRespawnLocation(); Boolean bed = event.isBedSpawn(); Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res == null) { return; @@ -980,6 +993,9 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { return; Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); if (relativeBlock.getType() == Material.FIRE) { boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); From 67320103cec19564447369702f76d2f5e05772ac Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Feb 2018 13:05:40 +0200 Subject: [PATCH 0480/1142] One more for NPC checks --- .../listeners/ResidencePlayerListener.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 00a733ade..ad9cd3f42 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1021,6 +1021,8 @@ public void onPlatePress(PlayerInteractEvent event) { return; Material mat = block.getType(); Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); boolean resadmin = plugin.isResAdminOn(player); if (!resadmin) { @@ -1063,7 +1065,8 @@ public void onSelection(PlayerInteractEvent event) { event.setCancelled(true); boolean resadmin = plugin.isResAdminOn(player); - + if (player.hasMetadata("NPC")) + return; ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group @@ -1119,7 +1122,8 @@ public void onInfoCheck(PlayerInteractEvent event) { if (this.isContainer(block.getType(), block)) return; - + if (player.hasMetadata("NPC")) + return; Location loc = block.getLocation(); ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null) @@ -2116,7 +2120,8 @@ public void onPlayerTeleportEvent(PlayerTeleportEvent event) { if (fromRes != null && toRes != null && fromRes.equals(toRes)) return; - + if (event.getPlayer().hasMetadata("NPC")) + return; ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(fromRes, toRes, event.getPlayer()); plugin.getServ().getPluginManager().callEvent(chgEvent); } @@ -2145,7 +2150,8 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { res = to; } Player player = event.getPlayer(); - + if (player.hasMetadata("NPC")) + return; if (message != null) { if (plugin.getConfigManager().useTitleMessage()) { plugin.getAB().sendTitle(player, ChatColor.YELLOW + insertMessages(player, res, message)); From a3bc6441fa0ed02c4def48551557f2f11a6cf92b Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Feb 2018 14:21:54 +0200 Subject: [PATCH 0481/1142] Option to change flag on all residences --- .../bekvon/bukkit/residence/commands/set.java | 10 -------- .../bukkit/residence/containers/lm.java | 1 + .../residence/protection/FlagPermissions.java | 7 ++++-- .../protection/ResidencePermissions.java | 25 +++++++++++++++---- .../bukkit/residence/text/help/HelpEntry.java | 2 +- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index f7fc9f1f4..06ec17f5b 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -1,13 +1,8 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; -import java.util.List; import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -20,11 +15,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; -import com.griefcraft.cache.ProtectionCache; -import com.griefcraft.lwc.LWC; -import com.griefcraft.model.Protection; public class set implements cmd { diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index a3fb2c4f2..b042a4940 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -100,6 +100,7 @@ public enum lm { Flag_Deny("&cYou dont have &6%1 &cpermission here."), Flag_SetDeny("&cOwner does not have access to flag &6%1"), Flag_ChangeDeny("&cYou cant change &6%1 &cflag state while there is &6%2 &cplayer(s) inside."), + Flag_ChangedFor("&eChanged &6%1 &eflags from &6%2 &eresidences checked"), Bank_NoAccess("&cYou dont have bank access."), Bank_Name(" &eBank: &6%1"), diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 85f45dc1e..8838e1813 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -53,7 +53,10 @@ public static enum FlagCombo { } public static enum FlagState { - TRUE, FALSE, NEITHER, INVALID + TRUE, FALSE, NEITHER, INVALID; + public String getName() { + return name().toLowerCase(); + } } public static void addMaterialToUseFlag(Material mat, Flags flag) { @@ -911,7 +914,7 @@ public List getPosibleFlags(Player player, boolean residence, boolean re if (flag != null && !flag.isGlobalyEnabled()) continue; - + flags.add(one.getKey()); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 3b1bd1596..fdc7aba2b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -9,6 +9,7 @@ import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.utils.Debug; import java.util.ArrayList; @@ -353,11 +354,18 @@ public boolean setGroupFlag(Player player, String group, String flag, String fla return false; } + @Deprecated public boolean setFlag(CommandSender sender, String flag, String flagstate, boolean resadmin) { - if (validFlagGroups.containsKey(flag)) - return this.setFlagGroup(sender, flag, flagstate, resadmin); + return setFlag(sender, flag, FlagPermissions.stringToFlagState(flagstate), resadmin); + } - FlagState state = FlagPermissions.stringToFlagState(flagstate); + public boolean setFlag(CommandSender sender, String flag, FlagState state, boolean resadmin) { + return setFlag(sender, flag, state, resadmin, true); + } + + public boolean setFlag(CommandSender sender, String flag, FlagState state, boolean resadmin, boolean inform) { + if (validFlagGroups.containsKey(flag)) + return this.setFlagGroup(sender, flag, state, resadmin); if (Residence.getInstance().getConfigManager().isPvPFlagPrevent()) { for (String oneFlag : Residence.getInstance().getConfigManager().getProtectedFlagsList()) { @@ -371,7 +379,8 @@ public boolean setFlag(CommandSender sender, String flag, String flagstate, bool if (!one.getName().equals(this.getOwner())) size++; } - Residence.getInstance().msg(sender, lm.Flag_ChangeDeny, flag, size); + if (inform) + Residence.getInstance().msg(sender, lm.Flag_ChangeDeny, flag, size); return false; } } @@ -384,7 +393,8 @@ public boolean setFlag(CommandSender sender, String flag, String flagstate, bool if (fc.isCancelled()) return false; if (super.setFlag(flag, state)) { - Residence.getInstance().msg(sender, lm.Flag_Set, flag, this.residence.getName(), flagstate); + if (inform) + Residence.getInstance().msg(sender, lm.Flag_Set, flag, this.residence.getName(), state.name()); return true; } } @@ -646,7 +656,12 @@ public void applyGlobalDefaults() { } } + @Deprecated public boolean setFlagGroup(CommandSender sender, String flaggroup, String state, boolean resadmin) { + return setFlagGroup(sender, flaggroup, FlagPermissions.stringToFlagState(state), resadmin); + } + + public boolean setFlagGroup(CommandSender sender, String flaggroup, FlagState state, boolean resadmin) { if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); boolean changed = false; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 2dee6a58e..9fc2d390b 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -127,7 +127,7 @@ private List getHelpData(CommandSender sender, boolean resadmin) { } FlagPermissions GlobalFlags = Residence.getInstance().getPermissionManager().getAllFlags(); - + Map unsortMap = new HashMap(); for (HelpEntry entry : subentrys) { From e31994a3ea3300bfbf4ee76a2a01ca702c84b3d8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Feb 2018 14:54:17 +0200 Subject: [PATCH 0482/1142] S for screaming in dark --- src/com/bekvon/bukkit/residence/utils/VersionChecker.java | 2 +- src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index d4021636f..efa870f91 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -130,7 +130,7 @@ public void run() { public String getNewVersion() { try { - HttpURLConnection con = (HttpURLConnection) new URL("http://www.spigotmc.org/api/general.php").openConnection(); + HttpURLConnection con = (HttpURLConnection) new URL("https://www.spigotmc.org/api/general.php").openConnection(); con.setDoOutput(true); con.setRequestMethod("POST"); con.getOutputStream().write(("key=98BE0FE67F88AB82B4C197FAF1DC3B69206EFDCC4D3B80FC83A00037510B99B4&resource=" + resource).getBytes("UTF-8")); diff --git a/src/plugin.yml b/src/plugin.yml index 412c807c0..65591eac8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.5.0 +version: 4.7.6.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 46473dbae50329db93149fd3737089f561a29180 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Mar 2018 14:14:50 +0200 Subject: [PATCH 0483/1142] PlaceHOlderAPI support and new placeholders --- .../residence/Placeholders/Placeholder.java | 180 ++++++++++++++++++ .../Placeholders/PlaceholderAPIHook.java | 28 +++ .../bekvon/bukkit/residence/Residence.java | 96 ++++++++-- .../bukkit/residence/commands/setall.java | 61 ++++++ .../listeners/ResidenceBlockListener.java | 4 +- .../permissions/PermissionGroup.java | 66 +++++-- .../protection/ResidencePermissions.java | 22 +-- .../residence/utils/VersionChecker.java | 2 +- src/plugin.yml | 2 +- 9 files changed, 408 insertions(+), 53 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java create mode 100644 src/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java create mode 100644 src/com/bekvon/bukkit/residence/commands/setall.java diff --git a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java new file mode 100644 index 000000000..f4016d91d --- /dev/null +++ b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java @@ -0,0 +1,180 @@ +package com.bekvon.bukkit.residence.Placeholders; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +import me.clip.placeholderapi.PlaceholderAPI; + +public class Placeholder { + + private Residence plugin; + + public Placeholder(Residence plugin) { + this.plugin = plugin; + } + + public enum CMIPlaceHolders { + residence_user_amount, + residence_user_group, + residence_user_admin, + residence_user_cancreate, + residence_user_maxres, + residence_user_maxew, + residence_user_maxns, + residence_user_maxud, + residence_user_maxsub, + residence_user_maxsubdepth, + residence_user_maxrents, + residence_user_maxrentdays, + residence_user_blockcost, + residence_user_blocksell, + residence_user_currentres, + ; + + public static CMIPlaceHolders getByName(String name) { + name = name.replace("_", ""); + for (CMIPlaceHolders one : CMIPlaceHolders.values()) { + String n = one.name().replace("_", ""); + if (n.equalsIgnoreCase(name)) { + return one; + } + } + name = "residence" + name; + for (CMIPlaceHolders one : CMIPlaceHolders.values()) { + String n = one.name().replace("_", ""); + if (n.equalsIgnoreCase(name)) { + return one; + } + } + return null; + } + + public static CMIPlaceHolders getByNameExact(String name) { + name = name.toLowerCase(); + for (CMIPlaceHolders one : CMIPlaceHolders.values()) { + String n = one.name(); + if (n.equals(name)) + return one; + } + return null; + } + + public String getFull() { + return "%" + this.name() + "%"; + } + } + + public List updatePlaceHolders(Player player, List messages) { + List ms = new ArrayList(messages); + for (int i = 0, l = messages.size(); i < l; ++i) { + ms.set(i, updatePlaceHolders(player, messages.get(i))); + } + return ms; + } + + public String updatePlaceHolders(Player player, String message) { + if (message == null) + return null; + if (message.contains("%")) + message = translateOwnPlaceHolder(player, message); + if (!plugin.isPlaceholderAPIEnabled()) + return message; + if (message.contains("%")) + message = PlaceholderAPI.setPlaceholders(player, message); + return message; + } + + Pattern placeholderPatern = Pattern.compile("(%)([^\"^%]*)(%)"); + + private String translateOwnPlaceHolder(Player player, String message) { + if (message == null) + return null; + + if (message.contains("%")) { + Matcher match = placeholderPatern.matcher(message); + while (match.find()) { + String cmd = match.group(2); + if (!message.contains("%")) + break; + CMIPlaceHolders place = CMIPlaceHolders.getByNameExact(cmd); + String with = this.getValue(player, place); + if (with == null) + continue; + message = message.replace(place.getFull(), with); + } + } + + return message; + } + + public String getValue(Player player, CMIPlaceHolders placeHolder) { + ResidencePlayer user = plugin.getPlayerManager().getResidencePlayer(player); + if (placeHolder == null) + return null; + if (user != null) { + PermissionGroup group = user.getGroup(); + switch (placeHolder) { + case residence_user_admin: + return variable(Residence.getInstance().getPermissionManager().isResidenceAdmin(player)); + case residence_user_amount: + return String.valueOf(user.getResAmount()); + case residence_user_blockcost: + if (Residence.getInstance().getEconomyManager() != null) { + return String.valueOf(group.getCostperarea()); + } + break; + case residence_user_blocksell: + if (Residence.getInstance().getEconomyManager() != null) { + return String.valueOf(group.getSellperarea()); + } + break; + case residence_user_cancreate: + return variable(group.canCreateResidences()); + case residence_user_group: + return group.getGroupName(); + case residence_user_maxew: + return group.getXmin() + "-" + group.getXmax(); + case residence_user_maxns: + return group.getZmin() + "-" + group.getZmax(); + case residence_user_maxrentdays: + return String.valueOf(group.getMaxRentDays()); + case residence_user_maxrents: + return String.valueOf(user.getMaxRents()); + case residence_user_maxres: + return String.valueOf(user.getMaxRes()); + case residence_user_maxsub: + return String.valueOf(user.getMaxSubzones()); + case residence_user_maxsubdepth: + return String.valueOf(user.getMaxSubzoneDepth()); + case residence_user_maxud: + return group.getYmin() + "-" + group.getYmax(); + case residence_user_currentres: + ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null ? "" : res.getName(); + default: + break; + } + } + + switch (placeHolder) { + default: + break; + } + + return null; + } + + private String variable(Boolean state) { + return state ? plugin.getLM().getMessage(lm.General_True) : plugin.getLM().getMessage(lm.General_False); + } +} diff --git a/src/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java b/src/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java new file mode 100644 index 000000000..cb704cf75 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java @@ -0,0 +1,28 @@ +package com.bekvon.bukkit.residence.Placeholders; + +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.Placeholders.Placeholder.CMIPlaceHolders; + +import me.clip.placeholderapi.external.EZPlaceholderHook; + +public class PlaceholderAPIHook extends EZPlaceholderHook { + + private Residence plugin; + + public PlaceholderAPIHook(Residence plugin) { + super(plugin, "residence"); + this.plugin = plugin; + } + + @Override + public String onPlaceholderRequest(Player player, String identifier) { + CMIPlaceHolders placeHolder = CMIPlaceHolders.getByName(identifier); + if (placeHolder == null) { + return null; + } + return plugin.getPlaceholderAPIManager().getValue(player, placeHolder); + } + +} diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 00becea8b..3eac6e4c4 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -21,6 +21,8 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.logging.Level; @@ -29,6 +31,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; +import org.bukkit.OfflinePlayer; import org.bukkit.Server; import org.bukkit.World; import org.bukkit.command.CommandSender; @@ -43,6 +46,17 @@ import org.kingdoms.main.Kingdoms; import org.kingdoms.manager.game.GameManagement; +import com.bekvon.bukkit.residence.Placeholders.Placeholder; +import com.bekvon.bukkit.residence.Placeholders.PlaceholderAPIHook; +import com.bekvon.bukkit.residence.allNms.v1_10Events; +import com.bekvon.bukkit.residence.allNms.v1_8Events; +import com.bekvon.bukkit.residence.allNms.v1_9Events; +import com.bekvon.bukkit.residence.api.ChatInterface; +import com.bekvon.bukkit.residence.api.MarketBuyInterface; +import com.bekvon.bukkit.residence.api.MarketRentInterface; +import com.bekvon.bukkit.residence.api.ResidenceApi; +import com.bekvon.bukkit.residence.api.ResidenceInterface; +import com.bekvon.bukkit.residence.api.ResidencePlayerInterface; import com.bekvon.bukkit.residence.chat.ChatManager; import com.bekvon.bukkit.residence.containers.ABInterface; import com.bekvon.bukkit.residence.containers.Flags; @@ -52,34 +66,56 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.dynmap.DynMapListeners; import com.bekvon.bukkit.residence.dynmap.DynMapManager; -import com.bekvon.bukkit.residence.economy.*; +import com.bekvon.bukkit.residence.economy.BOSEAdapter; +import com.bekvon.bukkit.residence.economy.BlackHoleEconomy; +import com.bekvon.bukkit.residence.economy.EconomyInterface; +import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter; +import com.bekvon.bukkit.residence.economy.IConomy5Adapter; +import com.bekvon.bukkit.residence.economy.IConomy6Adapter; +import com.bekvon.bukkit.residence.economy.RealShopEconomy; +import com.bekvon.bukkit.residence.economy.TransactionManager; import com.bekvon.bukkit.residence.economy.rent.RentManager; import com.bekvon.bukkit.residence.gui.FlagUtil; import com.bekvon.bukkit.residence.itemlist.WorldItemManager; -import com.bekvon.bukkit.residence.listeners.*; -import com.bekvon.bukkit.residence.allNms.*; -import com.bekvon.bukkit.residence.api.ChatInterface; -import com.bekvon.bukkit.residence.api.MarketBuyInterface; -import com.bekvon.bukkit.residence.api.MarketRentInterface; -import com.bekvon.bukkit.residence.api.ResidenceApi; -import com.bekvon.bukkit.residence.api.ResidenceInterface; -import com.bekvon.bukkit.residence.api.ResidencePlayerInterface; +import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; +import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; +import com.bekvon.bukkit.residence.listeners.ResidenceFixesListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; -import com.bekvon.bukkit.residence.protection.*; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.selection.*; +import com.bekvon.bukkit.residence.protection.LeaseManager; +import com.bekvon.bukkit.residence.protection.PermissionListManager; +import com.bekvon.bukkit.residence.protection.PlayerManager; +import com.bekvon.bukkit.residence.protection.ResidenceManager; +import com.bekvon.bukkit.residence.protection.ResidencePermissions; +import com.bekvon.bukkit.residence.protection.WorldFlagManager; +import com.bekvon.bukkit.residence.selection.AutoSelection; +import com.bekvon.bukkit.residence.selection.KingdomsUtil; +import com.bekvon.bukkit.residence.selection.SchematicsManager; +import com.bekvon.bukkit.residence.selection.SelectionManager; +import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; +import com.bekvon.bukkit.residence.selection.WorldGuardUtil; import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; import com.bekvon.bukkit.residence.signsStuff.SignUtil; import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.HelpEntry; -import com.bekvon.bukkit.residence.utils.*; +import com.bekvon.bukkit.residence.text.help.InformationPager; +import com.bekvon.bukkit.residence.utils.ActionBar; +import com.bekvon.bukkit.residence.utils.CrackShot; +import com.bekvon.bukkit.residence.utils.FileCleanUp; +import com.bekvon.bukkit.residence.utils.RandomTp; +import com.bekvon.bukkit.residence.utils.RawMessage; +import com.bekvon.bukkit.residence.utils.Sorting; +import com.bekvon.bukkit.residence.utils.TabComplete; +import com.bekvon.bukkit.residence.utils.VersionChecker; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; +import com.bekvon.bukkit.residence.utils.YmlMaker; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; -import com.bekvon.bukkit.residence.text.help.InformationPager; //import com.bekvon.bukkit.residence.towns.TownManager; import com.earth2me.essentials.Essentials; import com.griefcraft.lwc.LWC; @@ -93,11 +129,6 @@ import fr.crafter.tickleman.realeconomy.RealEconomy; import fr.crafter.tickleman.realplugin.RealPlugin; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -import org.bukkit.OfflinePlayer; - /** * * @author Gary Smoak - bekvon @@ -190,6 +221,9 @@ public class Residence extends JavaPlugin { public List teleportDelayMap = new ArrayList(); public HashMap teleportMap = new HashMap(); + private Placeholder Placeholder; + private boolean PlaceholderAPIEnabled = false; + private String prefix = ChatColor.GREEN + "[" + ChatColor.GOLD + "Residence" + ChatColor.GREEN + "]" + ChatColor.GRAY; public boolean isSpigot() { @@ -228,6 +262,16 @@ public ResidenceInterface getResidenceManagerAPI() { return ResidenceAPI; } + public Placeholder getPlaceholderAPIManager() { + if (Placeholder == null) + Placeholder = new Placeholder(this); + return Placeholder; + } + + public boolean isPlaceholderAPIEnabled() { + return PlaceholderAPIEnabled; + } + public MarketRentInterface getMarketRentManagerAPI() { if (MarketRentAPI == null) MarketRentAPI = rentmanager; @@ -439,7 +483,7 @@ public void onEnable() { } getConfigManager().UpdateFlagFile(); - + FlagUtilManager = new FlagUtil(this); getFlagUtilManager().load(); @@ -508,7 +552,6 @@ public void onEnable() { getLocaleManager().LoadLang(lang); } - try { File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); @@ -693,6 +736,11 @@ public void run() { } catch (Exception e) { } + if (setupPlaceHolderAPI()) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " PlaceholderAPI was found - Enabling capabilities."); + PlaceholderAPIEnabled = true; + } + if (getServer().getPluginManager().getPlugin("CrackShot") != null) getServer().getPluginManager().registerEvents(new CrackShot(this), this); @@ -762,6 +810,14 @@ public void run() { } + private boolean setupPlaceHolderAPI() { + if (!getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) + return false; + if ((new PlaceholderAPIHook(this)).hook()) + Bukkit.getConsoleSender().sendMessage(this.getPrefix() + " PlaceholderAPI hooked."); + return true; + } + public SignUtil getSignUtil() { return signmanager; } diff --git a/src/com/bekvon/bukkit/residence/commands/setall.java b/src/com/bekvon/bukkit/residence/commands/setall.java new file mode 100644 index 000000000..95c748bd3 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/setall.java @@ -0,0 +1,61 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; + +public class setall implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 700) + public boolean perform(final Residence plugin, final String[] args, final boolean resadmin, Command command, final CommandSender sender) { + if (args.length != 3) + return false; + + String flag = args[1]; + FlagState state = FlagPermissions.stringToFlagState(args[2]); + FlagPermissions GlobalFlags = Residence.getInstance().getPermissionManager().getAllFlags(); + + if (flag == null || !GlobalFlags.checkValidFlag(flag.toLowerCase(), true)) { + plugin.msg(sender, lm.Invalid_Flag); + return true; + } + + if (state.equals(FlagState.INVALID)) { + plugin.msg(sender, lm.Invalid_FlagState); + return true; + } + + int count = 0; + int count2 = 0; + for (World oneW : Bukkit.getWorlds()) { + for (ClaimedResidence one : plugin.getResidenceManager().getFromAllResidences(true, false, oneW)) { + count2++; + if (one.getPermissions().setFlag(sender, flag, state, true, false)) + count++; + } + } + plugin.msg(sender, lm.Flag_ChangedFor, count, count2); + + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Set general flags on all residences"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res setall [flag] [true/false/remove]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[flag]", "true%%false%%remove")); + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 8b1cd3d0e..0d2c1edc0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -200,11 +200,11 @@ public void onBlockBreak(BlockBreakEvent event) { return; boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); - boolean hasContainer = perms.playerHas(player, Flags.container, true); + if (!hasdestroy && !player.hasPermission("residence.bypass.destroy")) { plugin.msg(player, lm.Flag_Deny, Flags.destroy); event.setCancelled(true); - } else if (!hasContainer && mat == Material.CHEST) { + } else if (mat == Material.CHEST && !perms.playerHas(player, Flags.container, true)) { plugin.msg(player, lm.Flag_Deny, Flags.container); event.setCancelled(true); } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 15cc0dde8..31fc5b7a4 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -18,13 +18,13 @@ import org.bukkit.configuration.ConfigurationSection; public class PermissionGroup { - protected int xmax; - protected int ymax; - protected int zmax; + private int xmax; + private int ymax; + private int zmax; - protected int xmin; - protected int ymin; - protected int zmin; + private int xmin; + private int ymin; + private int zmin; protected int Subzonexmax; protected int Subzoneymax; @@ -35,8 +35,8 @@ public class PermissionGroup { protected int Subzonezmin; protected int resmax; - protected double costperarea; - protected double sellperarea = 0; + private double costperarea; + private double sellperarea = 0; protected boolean tpaccess; protected int subzonedepth; protected int maxSubzones; @@ -47,8 +47,8 @@ public class PermissionGroup { protected boolean messageperms; protected String defaultEnterMessage; protected String defaultLeaveMessage; - protected int maxLeaseTime; - protected int leaseGiveTime; + private int maxLeaseTime; + private int leaseGiveTime; protected double renewcostperarea; protected boolean canBuy; protected boolean canSell; @@ -107,9 +107,9 @@ private void parseGroup(ConfigurationSection limits) { resmax = limits.getInt("Residence.MaxResidences", 0); maxPhysical = limits.getInt("Residence.MaxAreasPerResidence", 2); - xmax = limits.getInt("Residence.MaxEastWest", 0); - xmin = limits.getInt("Residence.MinEastWest", 0); - xmin = xmin > xmax ? xmax : xmin; + xmax = (limits.getInt("Residence.MaxEastWest", 0)); + xmin = (limits.getInt("Residence.MinEastWest", 0)); + xmin = (getXmin() > getXmax() ? getXmax() : getXmin()); ymax = limits.getInt("Residence.MaxUpDown", 0); ymin = limits.getInt("Residence.MinUpDown", 0); @@ -127,8 +127,8 @@ private void parseGroup(ConfigurationSection limits) { subzonedepth = limits.getInt("Residence.SubzoneDepth", 0); - Subzonexmax = limits.getInt("Residence.SubzoneMaxEastWest", xmax); - Subzonexmax = xmax < Subzonexmax ? xmax : Subzonexmax; + Subzonexmax = limits.getInt("Residence.SubzoneMaxEastWest", getXmax()); + Subzonexmax = getXmax() < Subzonexmax ? getXmax() : Subzonexmax; Subzonexmin = limits.getInt("Residence.SubzoneMinEastWest", 0); Subzonexmin = Subzonexmin > Subzonexmax ? Subzonexmax : Subzonexmin; @@ -231,7 +231,7 @@ public String getGroupName() { } public int getMaxX() { - return xmax; + return getXmax(); } public int getMaxY() { @@ -243,7 +243,7 @@ public int getMaxZ() { } public int getMinX() { - return xmin; + return getXmin(); } public int getMinY() { @@ -453,4 +453,36 @@ public void printLimits(CommandSender player, OfflinePlayer target, boolean resa Residence.getInstance().msg(player, lm.General_Separator); } + public double getCostperarea() { + return costperarea; + } + + public double getSellperarea() { + return sellperarea; + } + + public int getXmin() { + return xmin; + } + + public int getXmax() { + return xmax; + } + + public int getZmin() { + return zmin; + } + + public int getYmin() { + return ymin; + } + + public int getYmax() { + return ymax; + } + + public int getZmax() { + return zmax; + } + } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index fdc7aba2b..53dd52c6c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -1,17 +1,5 @@ package com.bekvon.bukkit.residence.protection; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; -import com.bekvon.bukkit.residence.event.ResidenceFlagCheckEvent; -import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; -import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import com.bekvon.bukkit.residence.utils.Debug; - import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -24,6 +12,16 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceFlagCheckEvent; +import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; +import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; + public class ResidencePermissions extends FlagPermissions { private UUID ownerUUID; diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index efa870f91..6765dd0d7 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -22,7 +22,7 @@ public VersionChecker(Residence plugin) { version = getCurrent(); } - private Version version = Version.v1_11_R1; + private Version version = Version.v1_12_R1; public Version getVersion() { return version; diff --git a/src/plugin.yml b/src/plugin.yml index 65591eac8..37afd7165 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -4,7 +4,7 @@ version: 4.7.6.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] -softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds,dynmap,LWC,Kingdoms] +softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds,dynmap,LWC,Kingdoms,PlaceholderAPI] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: From 71c25803505b7ae68a0e8e3d63a486cb21028052 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Mar 2018 17:03:27 +0200 Subject: [PATCH 0484/1142] More placaholders --- .../bukkit/residence/ConfigManager.java | 9 ++++ .../residence/Placeholders/Placeholder.java | 46 ++++++++++++++++++- .../bukkit/residence/containers/lm.java | 2 +- .../residence/economy/TransactionManager.java | 14 ++++++ .../protection/ResidenceManager.java | 35 +++++++++++--- .../bukkit/residence/signsStuff/SignUtil.java | 2 +- .../bukkit/residence/utils/GetTime.java | 6 ++- 7 files changed, 102 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index fda5e0645..48259f59b 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -137,6 +137,7 @@ public class ConfigManager { protected String language; protected String DefaultWorld; protected String DateFormat; + protected String DateFormatShort; protected String TimeZone; protected boolean preventBuildInRent; protected boolean PreventSubZoneRemoval; @@ -767,6 +768,10 @@ public void UpdateConfigFile() { "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); DateFormat = c.get("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz"); + c.getW().addComment("Global.DateFormatShort", "Sets date format when shown in example lease or rent expire date", + "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); + DateFormatShort = c.get("Global.DateFormatShort", "MM.dd hh:mm"); + c.getW().addComment("Global.TimeZone", "Sets time zone for showing date, usefull when server is in different country then main server player base", "Full list of posible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); TimeZone = c.get("Global.TimeZone", Calendar.getInstance().getTimeZone().getID()); @@ -1633,6 +1638,10 @@ public String getDateFormat() { return DateFormat; } + public String getDateFormatShort() { + return DateFormatShort; + } + public String getTimeZone() { return TimeZone; } diff --git a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java index f4016d91d..27ac567dc 100644 --- a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java +++ b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java @@ -8,10 +8,12 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.ResidenceApi; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.GetTime; import me.clip.placeholderapi.PlaceholderAPI; @@ -38,7 +40,17 @@ public enum CMIPlaceHolders { residence_user_maxrentdays, residence_user_blockcost, residence_user_blocksell, - residence_user_currentres, + residence_user_current_res, + residence_user_current_bank, + residence_user_current_qsize, + residence_user_current_ssize, + residence_user_current_forsale, + residence_user_current_saleprice, + residence_user_current_forrent, + residence_user_current_rentprice, + residence_user_current_rentedby, + residence_user_current_rentdays, + residence_user_current_rentends, ; public static CMIPlaceHolders getByName(String name) { @@ -158,9 +170,39 @@ public String getValue(Player player, CMIPlaceHolders placeHolder) { return String.valueOf(user.getMaxSubzoneDepth()); case residence_user_maxud: return group.getYmin() + "-" + group.getYmax(); - case residence_user_currentres: + case residence_user_current_res: ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); return res == null ? "" : res.getName(); + case residence_user_current_bank: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null ? "0" : res.getBank().getStoredMoneyFormated(); + case residence_user_current_qsize: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null ? "0" : String.valueOf(res.getTotalSize()); + case residence_user_current_ssize: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null ? "0" : String.valueOf(res.getXZSize()); + case residence_user_current_forsale: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null ? "" : String.valueOf(res.isForSell()); + case residence_user_current_saleprice: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null || !res.isForSell() ? "" : String.valueOf(res.getSellPrice()); + case residence_user_current_rentprice: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().cost); + case residence_user_current_rentdays: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().days); + case residence_user_current_rentedby: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : res.getRentedLand().player; + case residence_user_current_rentends: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : GetTime.getTime(res.getRentedLand().endTime, true); + case residence_user_current_forrent: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null ? "" : String.valueOf(res.isForRent()); default: break; } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index b042a4940..336abebf1 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -86,7 +86,7 @@ public enum lm { Sign_ForSaleTopLine("&8For Sale"), Sign_ForSalePriceLine("&8%1"), Sign_ForSaleResName("&8%1"), - Sign_ForSaleBottomLine("&5Available"), + Sign_ForSaleBottom("&5%1m\u00B3"), Sign_LookAt("&cYou are not looking at sign"), Flag_Set("&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"), diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 044099772..973348c40 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -65,6 +65,20 @@ public boolean giveEconomyMoney(Player player, double amount) { return true; } + @Deprecated + public boolean giveEconomyMoney(String playerName, double amount) { + if (playerName == null) + return false; + if (amount == 0) + return true; + EconomyInterface econ = plugin.getEconomyManager(); + if (econ == null) { + return false; + } + econ.add(playerName, amount); + return true; + } + public void putForSale(String areaname, Player player, int amount, boolean resadmin) { ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); putForSale(res, player, amount, resadmin); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index dda07b022..f619195af 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -460,16 +460,34 @@ public void removeResidence(CommandSender sender, String name, boolean resadmin) removeResidence(null, name, true); } - @SuppressWarnings("deprecation") + @Deprecated public void removeResidence(Player player, String name, boolean resadmin) { - ClaimedResidence res = this.getByName(name); if (res == null) { plugin.msg(player, lm.Invalid_Residence); return; } + removeResidence(player, res, resadmin); + } + + @Deprecated + public void removeResidence(Player player, ClaimedResidence res, boolean resadmin) { + removeResidence(plugin.getPlayerManager().getResidencePlayer(player), res, resadmin); + } + + @SuppressWarnings("deprecation") + public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boolean resadmin) { + + Player player = null; + if (rPlayer != null) + player = rPlayer.getPlayer(); + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } - name = res.getName(); + String name = res.getName(); if (plugin.getConfigManager().isRentPreventRemoval() && !resadmin) { ClaimedResidence rented = res.getRentedSubzone(); @@ -556,7 +574,10 @@ public void removeResidence(Player player, String name, boolean resadmin) { if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { double chargeamount = Math.ceil(res.getTotalSize() * res.getBlockSellPrice()); - plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); + if (player != null) + plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); + else if (rPlayer != null) + plugin.getTransactionManager().giveEconomyMoney(rPlayer.getPlayerName(), chargeamount); } } @@ -606,9 +627,9 @@ public void run() { } public void removeAllByOwner(String owner) { - ArrayList list = plugin.getPlayerManager().getResidenceList(owner); - for (String oneRes : list) { - removeResidence(null, oneRes, true); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(owner); + for (ClaimedResidence oneRes : rPlayer.getResList()) { + removeResidence(rPlayer, oneRes, true); } } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 171ac2b9d..11e06f083 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -287,7 +287,7 @@ public boolean SignUpdate(Signs Sign) { if (secondLine != null) sign.setLine(3, plugin.msg(lm.Sign_RentedResName, secondLine)); else - sign.setLine(3, plugin.msg(lm.Sign_ForSaleBottomLine)); + sign.setLine(3, plugin.msg(lm.Sign_ForSaleBottom, res.getTotalSize())); sign.update(); } diff --git a/src/com/bekvon/bukkit/residence/utils/GetTime.java b/src/com/bekvon/bukkit/residence/utils/GetTime.java index 8f32ecd1d..103b044a7 100644 --- a/src/com/bekvon/bukkit/residence/utils/GetTime.java +++ b/src/com/bekvon/bukkit/residence/utils/GetTime.java @@ -8,8 +8,12 @@ public class GetTime { public static String getTime(Long time) { + return getTime(time, false); + } + + public static String getTime(Long time, boolean shortFormat) { Date dNow = new Date(time); - SimpleDateFormat ft = new SimpleDateFormat(Residence.getInstance().getConfigManager().getDateFormat()); + SimpleDateFormat ft = new SimpleDateFormat(!shortFormat ? Residence.getInstance().getConfigManager().getDateFormat() : Residence.getInstance().getConfigManager().getDateFormatShort()); ft.setTimeZone(TimeZone.getTimeZone(Residence.getInstance().getConfigManager().getTimeZone())); return ft.format(dNow); } From 52d7b7b7263a6be0a078ca0d460573e1ceb27c8d Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Mar 2018 17:18:04 +0200 Subject: [PATCH 0485/1142] Revert "More placaholders" This reverts commit 71c25803505b7ae68a0e8e3d63a486cb21028052. --- .../bukkit/residence/ConfigManager.java | 9 ---- .../residence/Placeholders/Placeholder.java | 46 +------------------ .../bukkit/residence/containers/lm.java | 2 +- .../residence/economy/TransactionManager.java | 14 ------ .../protection/ResidenceManager.java | 35 +++----------- .../bukkit/residence/signsStuff/SignUtil.java | 2 +- .../bukkit/residence/utils/GetTime.java | 6 +-- 7 files changed, 12 insertions(+), 102 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 48259f59b..fda5e0645 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -137,7 +137,6 @@ public class ConfigManager { protected String language; protected String DefaultWorld; protected String DateFormat; - protected String DateFormatShort; protected String TimeZone; protected boolean preventBuildInRent; protected boolean PreventSubZoneRemoval; @@ -768,10 +767,6 @@ public void UpdateConfigFile() { "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); DateFormat = c.get("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz"); - c.getW().addComment("Global.DateFormatShort", "Sets date format when shown in example lease or rent expire date", - "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); - DateFormatShort = c.get("Global.DateFormatShort", "MM.dd hh:mm"); - c.getW().addComment("Global.TimeZone", "Sets time zone for showing date, usefull when server is in different country then main server player base", "Full list of posible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); TimeZone = c.get("Global.TimeZone", Calendar.getInstance().getTimeZone().getID()); @@ -1638,10 +1633,6 @@ public String getDateFormat() { return DateFormat; } - public String getDateFormatShort() { - return DateFormatShort; - } - public String getTimeZone() { return TimeZone; } diff --git a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java index 27ac567dc..f4016d91d 100644 --- a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java +++ b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java @@ -8,12 +8,10 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.api.ResidenceApi; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.GetTime; import me.clip.placeholderapi.PlaceholderAPI; @@ -40,17 +38,7 @@ public enum CMIPlaceHolders { residence_user_maxrentdays, residence_user_blockcost, residence_user_blocksell, - residence_user_current_res, - residence_user_current_bank, - residence_user_current_qsize, - residence_user_current_ssize, - residence_user_current_forsale, - residence_user_current_saleprice, - residence_user_current_forrent, - residence_user_current_rentprice, - residence_user_current_rentedby, - residence_user_current_rentdays, - residence_user_current_rentends, + residence_user_currentres, ; public static CMIPlaceHolders getByName(String name) { @@ -170,39 +158,9 @@ public String getValue(Player player, CMIPlaceHolders placeHolder) { return String.valueOf(user.getMaxSubzoneDepth()); case residence_user_maxud: return group.getYmin() + "-" + group.getYmax(); - case residence_user_current_res: + case residence_user_currentres: ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); return res == null ? "" : res.getName(); - case residence_user_current_bank: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null ? "0" : res.getBank().getStoredMoneyFormated(); - case residence_user_current_qsize: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null ? "0" : String.valueOf(res.getTotalSize()); - case residence_user_current_ssize: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null ? "0" : String.valueOf(res.getXZSize()); - case residence_user_current_forsale: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null ? "" : String.valueOf(res.isForSell()); - case residence_user_current_saleprice: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null || !res.isForSell() ? "" : String.valueOf(res.getSellPrice()); - case residence_user_current_rentprice: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().cost); - case residence_user_current_rentdays: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().days); - case residence_user_current_rentedby: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : res.getRentedLand().player; - case residence_user_current_rentends: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : GetTime.getTime(res.getRentedLand().endTime, true); - case residence_user_current_forrent: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null ? "" : String.valueOf(res.isForRent()); default: break; } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 336abebf1..b042a4940 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -86,7 +86,7 @@ public enum lm { Sign_ForSaleTopLine("&8For Sale"), Sign_ForSalePriceLine("&8%1"), Sign_ForSaleResName("&8%1"), - Sign_ForSaleBottom("&5%1m\u00B3"), + Sign_ForSaleBottomLine("&5Available"), Sign_LookAt("&cYou are not looking at sign"), Flag_Set("&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"), diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 973348c40..044099772 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -65,20 +65,6 @@ public boolean giveEconomyMoney(Player player, double amount) { return true; } - @Deprecated - public boolean giveEconomyMoney(String playerName, double amount) { - if (playerName == null) - return false; - if (amount == 0) - return true; - EconomyInterface econ = plugin.getEconomyManager(); - if (econ == null) { - return false; - } - econ.add(playerName, amount); - return true; - } - public void putForSale(String areaname, Player player, int amount, boolean resadmin) { ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); putForSale(res, player, amount, resadmin); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index f619195af..dda07b022 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -460,34 +460,16 @@ public void removeResidence(CommandSender sender, String name, boolean resadmin) removeResidence(null, name, true); } - @Deprecated - public void removeResidence(Player player, String name, boolean resadmin) { - ClaimedResidence res = this.getByName(name); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - removeResidence(player, res, resadmin); - } - - @Deprecated - public void removeResidence(Player player, ClaimedResidence res, boolean resadmin) { - removeResidence(plugin.getPlayerManager().getResidencePlayer(player), res, resadmin); - } - @SuppressWarnings("deprecation") - public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boolean resadmin) { - - Player player = null; - if (rPlayer != null) - player = rPlayer.getPlayer(); + public void removeResidence(Player player, String name, boolean resadmin) { + ClaimedResidence res = this.getByName(name); if (res == null) { plugin.msg(player, lm.Invalid_Residence); return; } - String name = res.getName(); + name = res.getName(); if (plugin.getConfigManager().isRentPreventRemoval() && !resadmin) { ClaimedResidence rented = res.getRentedSubzone(); @@ -574,10 +556,7 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { double chargeamount = Math.ceil(res.getTotalSize() * res.getBlockSellPrice()); - if (player != null) - plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); - else if (rPlayer != null) - plugin.getTransactionManager().giveEconomyMoney(rPlayer.getPlayerName(), chargeamount); + plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); } } @@ -627,9 +606,9 @@ public void run() { } public void removeAllByOwner(String owner) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(owner); - for (ClaimedResidence oneRes : rPlayer.getResList()) { - removeResidence(rPlayer, oneRes, true); + ArrayList list = plugin.getPlayerManager().getResidenceList(owner); + for (String oneRes : list) { + removeResidence(null, oneRes, true); } } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 11e06f083..171ac2b9d 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -287,7 +287,7 @@ public boolean SignUpdate(Signs Sign) { if (secondLine != null) sign.setLine(3, plugin.msg(lm.Sign_RentedResName, secondLine)); else - sign.setLine(3, plugin.msg(lm.Sign_ForSaleBottom, res.getTotalSize())); + sign.setLine(3, plugin.msg(lm.Sign_ForSaleBottomLine)); sign.update(); } diff --git a/src/com/bekvon/bukkit/residence/utils/GetTime.java b/src/com/bekvon/bukkit/residence/utils/GetTime.java index 103b044a7..8f32ecd1d 100644 --- a/src/com/bekvon/bukkit/residence/utils/GetTime.java +++ b/src/com/bekvon/bukkit/residence/utils/GetTime.java @@ -8,12 +8,8 @@ public class GetTime { public static String getTime(Long time) { - return getTime(time, false); - } - - public static String getTime(Long time, boolean shortFormat) { Date dNow = new Date(time); - SimpleDateFormat ft = new SimpleDateFormat(!shortFormat ? Residence.getInstance().getConfigManager().getDateFormat() : Residence.getInstance().getConfigManager().getDateFormatShort()); + SimpleDateFormat ft = new SimpleDateFormat(Residence.getInstance().getConfigManager().getDateFormat()); ft.setTimeZone(TimeZone.getTimeZone(Residence.getInstance().getConfigManager().getTimeZone())); return ft.format(dNow); } From 3721e8bc70a62c84029afd91de44ff429d64f533 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Mar 2018 18:04:47 +0200 Subject: [PATCH 0486/1142] Sell sign with residence size Return money on removeall command --- .../bukkit/residence/ConfigManager.java | 11 ++++- .../residence/Placeholders/Placeholder.java | 48 +++++++++++++++++-- .../bukkit/residence/containers/lm.java | 4 +- .../residence/economy/TransactionManager.java | 16 ++++++- .../protection/ClaimedResidence.java | 29 +++++------ .../protection/ResidenceManager.java | 37 ++++++++++---- .../bukkit/residence/signsStuff/SignUtil.java | 4 +- .../bukkit/residence/utils/GetTime.java | 8 +++- 8 files changed, 122 insertions(+), 35 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index fda5e0645..7f4fe3110 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -137,6 +137,7 @@ public class ConfigManager { protected String language; protected String DefaultWorld; protected String DateFormat; + protected String DateFormatShort; protected String TimeZone; protected boolean preventBuildInRent; protected boolean PreventSubZoneRemoval; @@ -767,6 +768,10 @@ public void UpdateConfigFile() { "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); DateFormat = c.get("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz"); + c.getW().addComment("Global.DateFormatShort", "Sets date format when shown in example lease or rent expire date", + "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); + DateFormatShort = c.get("Global.DateFormatShort", "MM.dd hh:mm"); + c.getW().addComment("Global.TimeZone", "Sets time zone for showing date, usefull when server is in different country then main server player base", "Full list of posible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); TimeZone = c.get("Global.TimeZone", Calendar.getInstance().getTimeZone().getID()); @@ -1633,6 +1638,10 @@ public String getDateFormat() { return DateFormat; } + public String getDateFormatShort() { + return DateFormatShort; + } + public String getTimeZone() { return TimeZone; } @@ -1844,4 +1853,4 @@ public boolean isConsoleLogsShowFlagChanges() { // public boolean isTownEnabled() { // return TownEnabled; // } -} +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java index f4016d91d..d617dd786 100644 --- a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java +++ b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java @@ -8,10 +8,12 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.ResidenceApi; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.GetTime; import me.clip.placeholderapi.PlaceholderAPI; @@ -38,7 +40,17 @@ public enum CMIPlaceHolders { residence_user_maxrentdays, residence_user_blockcost, residence_user_blocksell, - residence_user_currentres, + residence_user_current_res, + residence_user_current_bank, + residence_user_current_qsize, + residence_user_current_ssize, + residence_user_current_forsale, + residence_user_current_saleprice, + residence_user_current_forrent, + residence_user_current_rentprice, + residence_user_current_rentedby, + residence_user_current_rentdays, + residence_user_current_rentends, ; public static CMIPlaceHolders getByName(String name) { @@ -158,9 +170,39 @@ public String getValue(Player player, CMIPlaceHolders placeHolder) { return String.valueOf(user.getMaxSubzoneDepth()); case residence_user_maxud: return group.getYmin() + "-" + group.getYmax(); - case residence_user_currentres: + case residence_user_current_res: ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); return res == null ? "" : res.getName(); + case residence_user_current_bank: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null ? "0" : res.getBank().getStoredMoneyFormated(); + case residence_user_current_qsize: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null ? "0" : String.valueOf(res.getTotalSize()); + case residence_user_current_ssize: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null ? "0" : String.valueOf(res.getXZSize()); + case residence_user_current_forsale: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null ? "" : String.valueOf(res.isForSell()); + case residence_user_current_saleprice: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null || !res.isForSell() ? "" : String.valueOf(res.getSellPrice()); + case residence_user_current_rentprice: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().cost); + case residence_user_current_rentdays: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().days); + case residence_user_current_rentedby: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : res.getRentedLand().player; + case residence_user_current_rentends: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : GetTime.getTime(res.getRentedLand().endTime, true); + case residence_user_current_forrent: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null ? "" : String.valueOf(res.isForRent()); default: break; } @@ -177,4 +219,4 @@ public String getValue(Player player, CMIPlaceHolders placeHolder) { private String variable(Boolean state) { return state ? plugin.getLM().getMessage(lm.General_True) : plugin.getLM().getMessage(lm.General_False); } -} +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index b042a4940..a9ac1a3f1 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -86,7 +86,7 @@ public enum lm { Sign_ForSaleTopLine("&8For Sale"), Sign_ForSalePriceLine("&8%1"), Sign_ForSaleResName("&8%1"), - Sign_ForSaleBottomLine("&5Available"), + Sign_ForSaleBottom("&5%1m\u00B3"), Sign_LookAt("&cYou are not looking at sign"), Flag_Set("&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"), @@ -456,4 +456,4 @@ public String getPath() { path = "Language." + this.name(); return path.replace("_", "."); } -} +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 044099772..a8430176d 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -65,6 +65,20 @@ public boolean giveEconomyMoney(Player player, double amount) { return true; } + @Deprecated + public boolean giveEconomyMoney(String playerName, double amount) { + if (playerName == null) + return false; + if (amount == 0) + return true; + EconomyInterface econ = plugin.getEconomyManager(); + if (econ == null) { + return false; + } + econ.add(playerName, amount); + return true; + } + public void putForSale(String areaname, Player player, int amount, boolean resadmin) { ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); putForSale(res, player, amount, resadmin); @@ -400,4 +414,4 @@ public Map getBuyableResidences() { public Map save() { return getBuyableResidences(); } -} +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index a40b463da..bfc0c9540 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -26,7 +26,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.towns.Town; import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.RawMessage; @@ -72,8 +71,6 @@ public class ClaimedResidence { protected boolean mainRes = false; protected long createTime = 0L; - private Town town = null; - private Long leaseExpireTime = null; protected List cmdWhiteList = new ArrayList(); @@ -1378,12 +1375,12 @@ public Map save() { if (createTime != 0L) root.put("CreatedOn", createTime); - if (this.getTown() != null && !this.isSubzone()) { - if (this.getTown().getMainResidence().equals(this)) - root.put("TownCap", this.getTown().getTownName()); - else - root.put("Town", this.getTown().getTownName()); - } +// if (this.getTown() != null && !this.isSubzone()) { +// if (this.getTown().getMainResidence().equals(this)) +// root.put("TownCap", this.getTown().getTownName()); +// else +// root.put("Town", this.getTown().getTownName()); +// } if (plugin.getConfigManager().isNewSaveMechanic()) { if (enterMessage != null && leaveMessage != null) { @@ -1893,11 +1890,11 @@ public void setLeaseExpireTime(Long leaseExpireTime) { this.leaseExpireTime = leaseExpireTime; } - public Town getTown() { - return town; - } - - public void setTown(Town town) { - this.town = town; - } +// public Town getTown() { +// return town; +// } +// +// public void setTown(Town town) { +// this.town = town; +// } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index dda07b022..327df3186 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -460,16 +460,34 @@ public void removeResidence(CommandSender sender, String name, boolean resadmin) removeResidence(null, name, true); } - @SuppressWarnings("deprecation") + @Deprecated public void removeResidence(Player player, String name, boolean resadmin) { - ClaimedResidence res = this.getByName(name); if (res == null) { plugin.msg(player, lm.Invalid_Residence); return; } + removeResidence(player, res, resadmin); + } + + @Deprecated + public void removeResidence(Player player, ClaimedResidence res, boolean resadmin) { + removeResidence(plugin.getPlayerManager().getResidencePlayer(player), res, resadmin); + } + + @SuppressWarnings("deprecation") + public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boolean resadmin) { + + Player player = null; + if (rPlayer != null) + player = rPlayer.getPlayer(); + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } - name = res.getName(); + String name = res.getName(); if (plugin.getConfigManager().isRentPreventRemoval() && !resadmin) { ClaimedResidence rented = res.getRentedSubzone(); @@ -556,7 +574,10 @@ public void removeResidence(Player player, String name, boolean resadmin) { if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { double chargeamount = Math.ceil(res.getTotalSize() * res.getBlockSellPrice()); - plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); + if (player != null) + plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); + else if (rPlayer != null) + plugin.getTransactionManager().giveEconomyMoney(rPlayer.getPlayerName(), chargeamount); } } @@ -606,9 +627,9 @@ public void run() { } public void removeAllByOwner(String owner) { - ArrayList list = plugin.getPlayerManager().getResidenceList(owner); - for (String oneRes : list) { - removeResidence(null, oneRes, true); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(owner); + for (ClaimedResidence oneRes : rPlayer.getResList()) { + removeResidence(rPlayer, oneRes, true); } } @@ -1299,4 +1320,4 @@ public int getX() { } } -} +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 171ac2b9d..1840a4d87 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -287,7 +287,7 @@ public boolean SignUpdate(Signs Sign) { if (secondLine != null) sign.setLine(3, plugin.msg(lm.Sign_RentedResName, secondLine)); else - sign.setLine(3, plugin.msg(lm.Sign_ForSaleBottomLine)); + sign.setLine(3, plugin.msg(lm.Sign_ForSaleBottom, res.getTotalSize())); sign.update(); } @@ -424,4 +424,4 @@ else if (FirstLine.length() > 15 && FirstLine.contains(".")) { lines[1] = SecondLine; return lines; } -} +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/utils/GetTime.java b/src/com/bekvon/bukkit/residence/utils/GetTime.java index 8f32ecd1d..8feee04aa 100644 --- a/src/com/bekvon/bukkit/residence/utils/GetTime.java +++ b/src/com/bekvon/bukkit/residence/utils/GetTime.java @@ -8,9 +8,13 @@ public class GetTime { public static String getTime(Long time) { + return getTime(time, false); + } + + public static String getTime(Long time, boolean shortFormat) { Date dNow = new Date(time); - SimpleDateFormat ft = new SimpleDateFormat(Residence.getInstance().getConfigManager().getDateFormat()); + SimpleDateFormat ft = new SimpleDateFormat(!shortFormat ? Residence.getInstance().getConfigManager().getDateFormat() : Residence.getInstance().getConfigManager().getDateFormatShort()); ft.setTimeZone(TimeZone.getTimeZone(Residence.getInstance().getConfigManager().getTimeZone())); return ft.format(dNow); } -} +} \ No newline at end of file From b9c0b5b363f14c13004ca61b0b3fccf81c2b2cde Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 17 Mar 2018 12:24:12 +0200 Subject: [PATCH 0487/1142] Option to regenerate residence area on cleanup method --- .../bekvon/bukkit/residence/ConfigManager.java | 7 +++++++ .../residence/protection/ResidenceManager.java | 13 +++++++++++-- .../residence/selection/SelectionManager.java | 2 ++ .../selection/WorldEditSelectionManager.java | 15 +++++++++++++++ .../bukkit/residence/utils/FileCleanUp.java | 5 ++++- src/plugin.yml | 2 +- 6 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 7f4fe3110..75b5cafe2 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -58,6 +58,7 @@ public class ConfigManager { protected boolean BlockAnyTeleportation; protected int infoToolId; protected int AutoCleanUpDays; + protected boolean AutoCleanUpRegenerate; protected int selectionToolId; protected boolean adminOps; protected boolean AdminFullAccess; @@ -685,6 +686,8 @@ public void UpdateConfigFile() { AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); c.getW().addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); + c.getW().addComment("Global.AutoCleanUp.Regenerate", "Do you want to regenetate old residence area", "This requires world edit to be present"); + AutoCleanUpRegenerate = c.get("Global.AutoCleanUp.Regenerate", false); c.getW().addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); @@ -1424,6 +1427,10 @@ public int getResidenceFileCleanDays() { return AutoCleanUpDays; } + public boolean isAutoCleanUpRegenerate() { + return AutoCleanUpRegenerate; + } + public boolean isUseClean() { return UseClean; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 327df3186..8a28e3ebd 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -38,6 +38,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.RawMessage; import com.griefcraft.cache.ProtectionCache; @@ -475,8 +476,12 @@ public void removeResidence(Player player, ClaimedResidence res, boolean resadmi removeResidence(plugin.getPlayerManager().getResidencePlayer(player), res, resadmin); } - @SuppressWarnings("deprecation") public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boolean resadmin) { + removeResidence(rPlayer, res, resadmin, false); + } + + @SuppressWarnings("deprecation") + public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boolean resadmin, boolean regenerate) { Player player = null; if (rPlayer != null) @@ -548,9 +553,13 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole if (plugin.getConfigManager().isRemoveLwcOnDelete()) removeLwcFromResidence(player, res); + if (regenerate) { + for (CuboidArea one : res.getAreaArray()) { + plugin.getSelectionManager().regenerate(one); + } + } plugin.msg(player, lm.Residence_Remove, name); - } else { String[] split = name.split("\\."); if (player != null) { diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 315e24451..24e35710b 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -1071,4 +1071,6 @@ private static Direction getDirection(Player player) { return null; } + public void regenerate(CuboidArea area) { + } } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 1c98aadfe..53c8fc1fb 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -1,10 +1,14 @@ package com.bekvon.bukkit.residence.selection; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.sk89q.worldedit.IncompleteRegionException; +import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.bukkit.selections.CuboidSelection; import com.sk89q.worldedit.bukkit.selections.Selection; import com.sk89q.worldedit.regions.CuboidRegion; +import com.sk89q.worldedit.regions.Region; import org.bukkit.Location; import org.bukkit.Server; @@ -86,4 +90,15 @@ public void showSelectionInfo(Player player) { super.showSelectionInfo(player); this.worldEditUpdate(player); } + + + @Override + public void regenerate(CuboidArea area) { + CuboidSelection selection = new CuboidSelection(area.getWorld(), area.getLowLoc(), area.getHighLoc()); + try { + Region region = selection.getRegionSelector().getRegion(); + region.getWorld().regenerate(region, WorldEdit.getInstance().getEditSessionFactory().getEditSession(region.getWorld(), -1)); + } catch (IncompleteRegionException e) { + } + } } diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 45fe06630..c151c2459 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -9,6 +9,7 @@ import org.bukkit.OfflinePlayer; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; @@ -67,7 +68,9 @@ public void cleanFiles() { if (ResidenceVaultAdapter.hasPermission(player, "residence.cleanbypass", res.getWorld())) continue; - plugin.getResidenceManager().removeResidence(oneName.getValue()); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getUniqueId()); + + plugin.getResidenceManager().removeResidence(rPlayer, oneName.getValue(), true, plugin.getConfigManager().isAutoCleanUpRegenerate()); i++; } Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Auto CleanUp deleted " + i + " residences!"); diff --git a/src/plugin.yml b/src/plugin.yml index 37afd7165..277787902 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.6.0 +version: 4.7.7.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From c9cdfbc8991a8592644fe94ed00b766517463034 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 17 Mar 2018 12:44:20 +0200 Subject: [PATCH 0488/1142] Correct numbering of list --- .../bukkit/residence/commands/lease.java | 5 +++- .../bukkit/residence/commands/shop.java | 10 +++---- .../bukkit/residence/text/help/PageInfo.java | 28 ++++++++----------- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index 0a8c62437..dc229d0c4 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -121,9 +121,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.General_Separator); for (ClaimedResidence one : list) { - if (!pi.isInRange()) + if (!pi.isEntryOk()) continue; + if (pi.isBreak()) + break; + if (res.isOwner(player)) plugin.msg(player, lm.Economy_LeaseList, pi.getPositionForOutput(), one.getName(), plugin.getLeaseManager().getExpireTime(one), one.getOwner()); else diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 70c0f3f10..8aefaf8ea 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -151,13 +151,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Shop_ListTopLine, separator, Shoppage, pi.getTotalPages(), separator); - int position = -1; for (Entry one : ShopList.entrySet()) { - position++; - if (position > pi.getEnd()) - break; - if (!pi.isInRange(position)) + if (!pi.isEntryOk()) continue; + if (pi.isBreak()) + break; Vote vote = plugin.getShopSignUtilManager().getAverageVote(one.getKey()); String votestat = ""; @@ -168,7 +166,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListVoted, vote.getVote(), vote.getAmount()); ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); String owner = plugin.getResidenceManager().getByName(one.getKey()).getOwner(); - String message = plugin.msg(lm.Shop_List, pi.getStart() + position + 1, one.getKey(), owner, votestat); + String message = plugin.msg(lm.Shop_List, pi.getPositionForOutput(), one.getKey(), owner, votestat); String desc = res.getShopDesc() == null ? plugin.msg(lm.Shop_NoDesc) : plugin.msg( lm.Shop_Desc, ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); diff --git a/src/com/bekvon/bukkit/residence/text/help/PageInfo.java b/src/com/bekvon/bukkit/residence/text/help/PageInfo.java index cdea738d8..c8df587c6 100644 --- a/src/com/bekvon/bukkit/residence/text/help/PageInfo.java +++ b/src/com/bekvon/bukkit/residence/text/help/PageInfo.java @@ -8,7 +8,7 @@ public class PageInfo { private int end = 0; private int currentPage = 0; - private int currentPlace = -1; + private int currentEntry = 0; private int perPage = 6; @@ -19,12 +19,12 @@ public PageInfo(int perPage, int totalEntries, int currentPage) { calculate(); } - public int getPositionForOutput(int place) { - return this.start + place + 1; + public int getPositionForOutput() { + return currentEntry; } - public int getPositionForOutput() { - return currentPlace + 1; + public int getPositionForOutput(int place) { + return this.start + place + 1; } private void calculate() { @@ -41,9 +41,13 @@ public boolean isInRange(int place) { return false; } - public boolean isInRange() { - currentPlace++; - return isInRange(currentPlace); + public boolean isEntryOk() { + currentEntry++; + return currentEntry - 1 >= start && currentEntry - 1 <= end; + } + + public boolean isBreak() { + return currentEntry - 1 > end; } public boolean isPageOk() { @@ -77,12 +81,4 @@ public int getCurrentPage() { public int getTotalEntries() { return totalEntries; } - - public int getCurrentPlace() { - return currentPlace; - } - - public void setCurrentPlace(int currentPlace) { - this.currentPlace = currentPlace; - } } From 2f0efa0306745479ced8ac1e26b4813622e125a6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 17 Mar 2018 13:31:15 +0200 Subject: [PATCH 0489/1142] New command setdefaultflags to reset residence flags, option to do so on all residences --- .../residence/commands/setdefaultflags.java | 74 +++++++++++++++++++ .../bukkit/residence/containers/lm.java | 2 + src/plugin.yml | 3 + 3 files changed, 79 insertions(+) create mode 100644 src/com/bekvon/bukkit/residence/commands/setdefaultflags.java diff --git a/src/com/bekvon/bukkit/residence/commands/setdefaultflags.java b/src/com/bekvon/bukkit/residence/commands/setdefaultflags.java new file mode 100644 index 000000000..8479c9dfa --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/setdefaultflags.java @@ -0,0 +1,74 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class setdefaultflags implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 700) + public boolean perform(final Residence plugin, final String[] args, final boolean resadmin, Command command, final CommandSender sender) { + if (args.length != 2 && args.length != 1) + return false; + + String residenceName = null; + if (args.length == 2) + residenceName = args[1]; + + ClaimedResidence res = null; + if (residenceName != null && !residenceName.equalsIgnoreCase("all")) + res = plugin.getResidenceManager().getByName(residenceName); + if (args.length == 1 && sender instanceof Player) + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); + + if (residenceName != null && !residenceName.equalsIgnoreCase("all") && res == null || args.length == 1 && res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; + } + + if (res != null) { + if (!resadmin && !res.isOwner(sender)) { + plugin.msg(sender, lm.Residence_NotOwner); + return true; + } + res.getPermissions().applyDefaultFlags(); + plugin.msg(sender, lm.Flag_reset, res.getName()); + return true; + } + + if (!resadmin) { + plugin.msg(sender, lm.General_AdminOnly); + return true; + } + + int count = 0; + for (World oneW : Bukkit.getWorlds()) { + for (ClaimedResidence one : plugin.getResidenceManager().getFromAllResidences(true, false, oneW)) { + one.getPermissions().applyDefaultFlags(); + count++; + } + } + plugin.msg(sender, lm.Flag_resetAll, count); + + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Set default flags for residence or all of them"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res setdefaultflags [residenceName/all]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("")); + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index a9ac1a3f1..ef6fcc08e 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -101,6 +101,8 @@ public enum lm { Flag_SetDeny("&cOwner does not have access to flag &6%1"), Flag_ChangeDeny("&cYou cant change &6%1 &cflag state while there is &6%2 &cplayer(s) inside."), Flag_ChangedFor("&eChanged &6%1 &eflags from &6%2 &eresidences checked"), + Flag_reset("&eReset flags for &6%1 &eresidence"), + Flag_resetAll("&eReset flags for &6%1 &eresidences"), Bank_NoAccess("&cYou dont have bank access."), Bank_Name(" &eBank: &6%1"), diff --git a/src/plugin.yml b/src/plugin.yml index 277787902..d44f69990 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -170,6 +170,9 @@ permissions: residence.command.listall: description: Allows to access particular command default: true + residence.command.setdefaultflags: + description: Allows to access particular command + default: true residence.command.listallhidden: description: Allows to access particular command default: op From 870280f154e63c0620df10743d55644f4d64ecf4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 17 Mar 2018 13:41:18 +0200 Subject: [PATCH 0490/1142] Small fix for reset command --- src/com/bekvon/bukkit/residence/commands/reset.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index 7738e78a9..78ddc7cb9 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -10,6 +10,7 @@ import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class reset implements cmd { @@ -26,6 +27,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return false; ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; + } + res.getPermissions().applyDefaultFlags(player, resadmin); return true; } From f839d324a1137c8890c1bb1a8223e5f346329e78 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 17 Mar 2018 13:52:48 +0200 Subject: [PATCH 0491/1142] Prevent hanging break by explosion --- .../listeners/ResidenceEntityListener.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index cfa82d3ab..9cb33b82f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -591,6 +591,24 @@ public void onHangingBreak(HangingBreakByEntityEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onHangingBreakEventByExplosion(HangingBreakEvent event) { + // disabling event on world + Hanging ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + + if (!event.getCause().equals(RemoveCause.EXPLOSION)) + return; + + FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); + if (perms.has(Flags.explode, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreakEvent(HangingBreakEvent event) { // disabling event on world From 81b1cc707e4ec348f84b7421d2faec101ce0650d Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 17 Mar 2018 13:57:20 +0200 Subject: [PATCH 0492/1142] Fix for select coords command --- src/com/bekvon/bukkit/residence/commands/select.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index cdd672af0..55fdfe1ab 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -46,7 +46,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Select_Disabled); return true; } - + if (args.length == 2) { if (args[1].equals("size") || args[1].equals("cost")) { if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { @@ -80,6 +80,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } else if (args[1].equals("coords")) { plugin.msg(player, lm.General_Separator); + + if (!plugin.getSelectionManager().hasPlacedBoth(player)) { + plugin.msg(player, lm.Select_Points); + return true; + } + Location playerLoc1 = plugin.getSelectionManager().getPlayerLoc1(player); if (playerLoc1 != null) { plugin.msg(player, lm.Select_Primary, plugin.msg(lm.General_CoordsTop, playerLoc1.getBlockX(), playerLoc1 From 1a27b879bf2dd03c9a7504826a91438a48566fff Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 17 Mar 2018 14:25:56 +0200 Subject: [PATCH 0493/1142] We already have this command, so improving old one. --- .../bukkit/residence/commands/reset.java | 48 +++++++++--- .../residence/commands/setdefaultflags.java | 74 ------------------- src/plugin.yml | 2 +- 3 files changed, 39 insertions(+), 85 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/commands/setdefaultflags.java diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index 78ddc7cb9..80a45862d 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -2,6 +2,8 @@ import java.util.Arrays; +import org.bukkit.Bukkit; +import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -18,29 +20,55 @@ public class reset implements cmd { @Override @CommandAnnotation(simple = true, priority = 4400) public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) + if (args.length != 2 && args.length != 1) return false; - Player player = (Player) sender; + String residenceName = null; + if (args.length == 2) + residenceName = args[1]; - if (args.length != 2) - return false; + ClaimedResidence res = null; + if (residenceName != null && !residenceName.equalsIgnoreCase("all")) + res = plugin.getResidenceManager().getByName(residenceName); + if (args.length == 1 && sender instanceof Player) + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); - - if (res == null) { + if (residenceName != null && !residenceName.equalsIgnoreCase("all") && res == null || args.length == 1 && res == null) { plugin.msg(sender, lm.Invalid_Residence); return true; } - - res.getPermissions().applyDefaultFlags(player, resadmin); + + if (res != null) { + if (!resadmin && !res.isOwner(sender)) { + plugin.msg(sender, lm.Residence_NotOwner); + return true; + } + res.getPermissions().applyDefaultFlags(); + plugin.msg(sender, lm.Flag_reset, res.getName()); + return true; + } + + if (!resadmin) { + plugin.msg(sender, lm.General_AdminOnly); + return true; + } + + int count = 0; + for (World oneW : Bukkit.getWorlds()) { + for (ClaimedResidence one : plugin.getResidenceManager().getFromAllResidences(true, false, oneW)) { + one.getPermissions().applyDefaultFlags(); + count++; + } + } + plugin.msg(sender, lm.Flag_resetAll, count); + return true; } @Override public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "Reset residence to default flags."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res reset ", + c.get(path + "Info", Arrays.asList("&eUsage: &6/res reset ", "Resets the flags on a residence to their default. You must be the owner or an admin to do this.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/setdefaultflags.java b/src/com/bekvon/bukkit/residence/commands/setdefaultflags.java deleted file mode 100644 index 8479c9dfa..000000000 --- a/src/com/bekvon/bukkit/residence/commands/setdefaultflags.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class setdefaultflags implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 700) - public boolean perform(final Residence plugin, final String[] args, final boolean resadmin, Command command, final CommandSender sender) { - if (args.length != 2 && args.length != 1) - return false; - - String residenceName = null; - if (args.length == 2) - residenceName = args[1]; - - ClaimedResidence res = null; - if (residenceName != null && !residenceName.equalsIgnoreCase("all")) - res = plugin.getResidenceManager().getByName(residenceName); - if (args.length == 1 && sender instanceof Player) - res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); - - if (residenceName != null && !residenceName.equalsIgnoreCase("all") && res == null || args.length == 1 && res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return true; - } - - if (res != null) { - if (!resadmin && !res.isOwner(sender)) { - plugin.msg(sender, lm.Residence_NotOwner); - return true; - } - res.getPermissions().applyDefaultFlags(); - plugin.msg(sender, lm.Flag_reset, res.getName()); - return true; - } - - if (!resadmin) { - plugin.msg(sender, lm.General_AdminOnly); - return true; - } - - int count = 0; - for (World oneW : Bukkit.getWorlds()) { - for (ClaimedResidence one : plugin.getResidenceManager().getFromAllResidences(true, false, oneW)) { - one.getPermissions().applyDefaultFlags(); - count++; - } - } - plugin.msg(sender, lm.Flag_resetAll, count); - - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Set default flags for residence or all of them"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res setdefaultflags [residenceName/all]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("")); - } -} diff --git a/src/plugin.yml b/src/plugin.yml index d44f69990..c2473fab8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.7.0 +version: 4.7.8.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 0c819788e154a1229f10fa2c9e75092456c8d113 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 10 Apr 2018 16:23:04 +0300 Subject: [PATCH 0494/1142] Don't show charge money message if amount is 0 --- .../bekvon/bukkit/residence/economy/TransactionManager.java | 3 ++- src/com/bekvon/bukkit/residence/protection/LeaseManager.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index a8430176d..17399e0da 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -43,7 +43,8 @@ public boolean chargeEconomyMoney(Player player, double chargeamount) { } econ.subtract(player.getName(), chargeamount); try { - plugin.msg(player, lm.Economy_MoneyCharged, chargeamount, econ.getName()); + if (chargeamount != 0D) + plugin.msg(player, lm.Economy_MoneyCharged, chargeamount, econ.getName()); } catch (Exception e) { } return true; diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index a0035129a..ceb8cf3d4 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -122,7 +122,8 @@ public void renewArea(ClaimedResidence res, Player player) { if (econ.canAfford(player.getName(), amount)/*account.hasEnough(amount)*/) { econ.subtract(player.getName(), amount); econ.add("Lease Money", amount); - plugin.msg(player, lm.Economy_MoneyCharged, plugin.getEconomyManager().format(amount), econ.getName()); + if (amount != 0D) + plugin.msg(player, lm.Economy_MoneyCharged, plugin.getEconomyManager().format(amount), econ.getName()); } else { plugin.msg(player, lm.Economy_NotEnoughMoney); return; From 14d3ee6241587a994f0c67274cce07a6c71fb5c8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 10 Apr 2018 16:41:56 +0300 Subject: [PATCH 0495/1142] Protect armor stands from firework explosions --- .../listeners/ResidenceEntityListener.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 9cb33b82f..b6dac6037 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -601,8 +601,8 @@ public void onHangingBreakEventByExplosion(HangingBreakEvent event) { return; if (!event.getCause().equals(RemoveCause.EXPLOSION)) - return; - + return; + FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); if (perms.has(Flags.explode, FlagCombo.OnlyFalse)) { event.setCancelled(true); @@ -1069,6 +1069,7 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { return; if (event.isCancelled()) return; + if (event.getCause() != DamageCause.FIRE_TICK) return; Entity ent = event.getEntity(); @@ -1081,6 +1082,26 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { } } + @EventHandler + public void OnArmorStandExplosion(EntityDamageEvent event) { + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + if (event.getCause() != DamageCause.BLOCK_EXPLOSION && event.getCause() != DamageCause.ENTITY_EXPLOSION) + return; + Entity ent = event.getEntity(); + if (!plugin.getNms().isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) + return; + + if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { + event.setCancelled(true); + ent.setFireTicks(0); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityCatchingFire(EntityDamageByEntityEvent event) { // Disabling listener if flag disabled globally From fa78ea417e0f979f9ab6cb28d235cd723b937d77 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 10 Apr 2018 17:36:29 +0300 Subject: [PATCH 0496/1142] New player residence on chest place resizing by considering nearby residences Don't create new player residences for old players. --- .../bukkit/residence/commands/auto.java | 18 +-- .../listeners/ResidenceBlockListener.java | 135 ++++++++++++++++-- .../listeners/ResidenceEntityListener.java | 2 + .../listeners/ResidencePlayerListener.java | 12 +- 4 files changed, 148 insertions(+), 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 2f9d1f1cf..65c66ae78 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -100,7 +100,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), minX, minY, minZ), false); plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), maxX, maxY, maxZ), false); - resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player)); + resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true); if (plugin.getResidenceManager().getByName(resName) != null) { for (int i = 1; i < 50; i++) { @@ -116,7 +116,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - private static void resize(Residence plugin, Player player, CuboidArea cuboid) { + public static void resize(Residence plugin, Player player, CuboidArea cuboid, boolean checkBalance) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); @@ -201,12 +201,14 @@ private static void resize(Residence plugin, Player player, CuboidArea cuboid) { skipped = 0; - if (plugin.getConfigManager().enableEconomy()) { - cost = (int) Math.ceil(c.getSize() * group.getCostPerBlock()); - if (cost > balance) - break; + if (checkBalance) { + if (plugin.getConfigManager().enableEconomy()) { + cost = (int) Math.ceil(c.getSize() * group.getCostPerBlock()); + if (cost > balance) + break; + } } - + cuboid.setLowLocation(c.getLowLoc()); cuboid.setHighLocation(c.getHighLoc()); @@ -217,7 +219,7 @@ private static void resize(Residence plugin, Player player, CuboidArea cuboid) { plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLoc()); } - private enum direction { + public enum direction { Top(new Vector(0, 1, 0), new Vector(0, 0, 0)), Bottom(new Vector(0, 0, 0), new Vector(0, 1, 0)), East(new Vector(1, 0, 0), new Vector(0, 0, 0)), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 0d2c1edc0..b90ab8667 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -1,7 +1,10 @@ package com.bekvon.bukkit.residence.listeners; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.UUID; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; @@ -27,11 +30,14 @@ import org.bukkit.event.block.BlockPlaceEvent; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.commands.auto; +import com.bekvon.bukkit.residence.commands.auto.direction; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; import org.bukkit.Location; import org.bukkit.Material; @@ -52,7 +58,9 @@ public class ResidenceBlockListener implements Listener { private List MessageInformed = new ArrayList(); - private List ResCreated = new ArrayList(); + + private Set ResCreated = new HashSet(); + public static Set newPlayers = new HashSet(); private Residence plugin; @@ -393,20 +401,131 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { if (list.size() != 0) return; - if (ResCreated.contains(player.getName())) + if (ResCreated.contains(player.getUniqueId())) + return; + + if (!newPlayers.contains(player.getUniqueId())) return; Location loc = block.getLocation(); - plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), loc.getBlockX() - plugin.getConfigManager().getNewPlayerRangeX(), loc - .getBlockY() - plugin.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() - plugin.getConfigManager().getNewPlayerRangeZ()), true); - plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), loc.getBlockX() + plugin.getConfigManager().getNewPlayerRangeX(), loc - .getBlockY() + plugin.getConfigManager().getNewPlayerRangeY(), loc.getBlockZ() + plugin.getConfigManager().getNewPlayerRangeZ()), true); + plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), loc.getBlockX() - 1, loc.getBlockY() - 1, loc.getBlockZ() - 1), true); + plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), loc.getBlockX() + 1, loc.getBlockY() + 1, loc.getBlockZ() + 1), true); + + resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), !plugin.getConfigManager().isNewPlayerFree(), + plugin.getConfigManager().getNewPlayerRangeX() * 2, + plugin.getConfigManager().getNewPlayerRangeY() * 2, + plugin.getConfigManager().getNewPlayerRangeZ() * 2); boolean created = plugin.getResidenceManager().addResidence(player, player.getName(), plugin.getSelectionManager().getPlayerLoc1(player.getName()), plugin.getSelectionManager().getPlayerLoc2(player.getName()), plugin.getConfigManager().isNewPlayerFree()); - if (created) - ResCreated.add(player.getName()); + if (created){ + ResCreated.add(player.getUniqueId()); + newPlayers.remove(player.getUniqueId()); + } + } + + public static void resize(Residence plugin, Player player, CuboidArea cuboid, boolean checkBalance, int maxX, int maxY, int maxZ) { + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + + int cost = (int) Math.ceil(cuboid.getSize() * group.getCostPerBlock()); + + double balance = 0; + if (plugin.getEconomyManager() != null) + balance = plugin.getEconomyManager().getBalance(player.getName()); + + direction dir = direction.Top; + + List locked = new ArrayList(); + + boolean checkCollision = plugin.getConfigManager().isAutomaticResidenceCreationCheckCollision(); + int skipped = 0; + int done = 0; + while (true) { + done++; + + if (skipped >= 6) { + break; + } + + // fail safe if loop keeps going on + if (done > 10000) + break; + + if (locked.contains(dir)) { + dir = dir.getNext(); + skipped++; + continue; + } + + CuboidArea c = new CuboidArea(); + c.setLowLocation(cuboid.getLowLoc().clone().add(-dir.getLow().getX(), -dir.getLow().getY(), -dir.getLow().getZ())); + c.setHighLocation(cuboid.getHighLoc().clone().add(dir.getHigh().getX(), dir.getHigh().getY(), dir.getHigh().getZ())); + + if (c.getLowLoc().getY() < 0) { + c.getLowLoc().setY(0); + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (c.getHighLoc().getY() >= c.getWorld().getMaxHeight()) { + c.getHighLoc().setY(c.getWorld().getMaxHeight() - 1); + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (checkCollision && plugin.getResidenceManager().collidesWithResidence(c) != null) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (c.getXSize() >= maxX - group.getMinX()) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (c.getYSize() >= maxY - group.getMinY()) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (c.getZSize() >= maxZ - group.getMinZ()) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + skipped = 0; + + if (checkBalance) { + if (plugin.getConfigManager().enableEconomy()) { + cost = (int) Math.ceil(c.getSize() * group.getCostPerBlock()); + if (cost > balance) + break; + } + } + + cuboid.setLowLocation(c.getLowLoc()); + cuboid.setHighLocation(c.getHighLoc()); + + dir = dir.getNext(); + } + + plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLoc()); + plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLoc()); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index b6dac6037..182bc528a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -47,6 +47,7 @@ import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; + import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; @@ -1072,6 +1073,7 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { if (event.getCause() != DamageCause.FIRE_TICK) return; + Entity ent = event.getEntity(); if (!plugin.getNms().isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ad9cd3f42..c1fca3b81 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -75,7 +75,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; @@ -136,7 +135,7 @@ public void onJump(PlayerMoveEvent event) { if (event.getTo().getY() - event.getFrom().getY() != 0.41999998688697815D) return; - + if (player.hasMetadata("NPC")) return; @@ -277,6 +276,13 @@ public void onResidenceDelete(ResidenceDeleteEvent event) { plugin.getSchematicManager().delete(event.getResidence()); } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerFirstLogin(PlayerLoginEvent event) { + Player player = event.getPlayer() ; + if (!player.hasPlayedBefore()) + ResidenceBlockListener.newPlayers.add(player.getUniqueId()); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerLogin(PlayerLoginEvent event) { if (!plugin.getConfigManager().isRentInformOnEnding()) @@ -995,7 +1001,7 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); if (player.hasMetadata("NPC")) return; - + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); if (relativeBlock.getType() == Material.FIRE) { boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); From e7c48b38b31da8be2a096348c2ff7733b4ef2827 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 11 Apr 2018 16:13:13 +0300 Subject: [PATCH 0497/1142] lets take into consideration world max height --- .../residence/selection/SelectionManager.java | 29 ++++++++++++++----- src/plugin.yml | 2 +- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 24e35710b..23d524442 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -26,7 +26,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; public class SelectionManager { protected Map selections; @@ -99,7 +98,7 @@ public int getMaxYAllowed() { case ignoreY: case noLimits: default: - return getWorld().getMaxHeight() - 1; + return getMaxWorldHeight(getWorld()) - 1; case residenceBounds: ClaimedResidence res1 = plugin.getResidenceManager().getByLoc(this.getBaseLoc2()); if (res1 != null) { @@ -110,7 +109,7 @@ public int getMaxYAllowed() { } break; } - return getWorld().getMaxHeight() - 1; + return getMaxWorldHeight(getWorld()) - 1; } public int getMinYAllowed() { @@ -273,6 +272,22 @@ public CuboidArea getResizedArea() { } } + private int getMaxWorldHeight(World world) { + if (world == null) + return 256; + switch (world.getEnvironment()) { + case NETHER: + return 128; + case NORMAL: + case THE_END: + return 256; + default: + break; + } + + return 256; + } + public enum Direction { UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ } @@ -953,9 +968,9 @@ public void modify(Player player, boolean shift, double amount) { case UP: oldy = area.getHighLoc().getBlockY(); oldy = oldy + amount; - if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { + if (oldy > getMaxWorldHeight(player.getLocation().getWorld()) - 1) { plugin.msg(player, lm.Select_TooHigh); - oldy = player.getLocation().getWorld().getMaxHeight() - 1; + oldy = getMaxWorldHeight(player.getLocation().getWorld()) - 1; } area.getHighLoc().setY(oldy); if (shift) { @@ -991,9 +1006,9 @@ public boolean contract(Player player, double amount, @SuppressWarnings("unused" case UP: double oldy = area.getHighLoc().getBlockY(); oldy = oldy - amount; - if (oldy > player.getLocation().getWorld().getMaxHeight() - 1) { + if (oldy > getMaxWorldHeight(player.getLocation().getWorld()) - 1) { plugin.msg(player, lm.Select_TooHigh); - oldy = player.getLocation().getWorld().getMaxHeight() - 1; + oldy = getMaxWorldHeight(player.getLocation().getWorld()) - 1; } area.getHighLoc().setY(oldy); plugin.msg(player, lm.Contracting_Down, amount); diff --git a/src/plugin.yml b/src/plugin.yml index c2473fab8..1d0e9332d 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.8.0 +version: 4.7.8.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin authors: [bekvon,nate302,t00thpick1] From 0e42038540b0f4d9eafaa5141131621d7e340276 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 17 May 2018 16:22:45 +0300 Subject: [PATCH 0498/1142] New friendlyfire flag --- .../residence/Placeholders/Placeholder.java | 1 - .../bukkit/residence/containers/Flags.java | 1 + .../bukkit/residence/containers/lm.java | 1 + .../listeners/ResidenceEntityListener.java | 35 +++++++++++++++++-- .../bukkit/residence/utils/ActionBar.java | 6 ++-- 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java index d617dd786..872585833 100644 --- a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java +++ b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java @@ -8,7 +8,6 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.api.ResidenceApi; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 449549377..5f7b6197c 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -41,6 +41,7 @@ public enum Flags { fallinprotection(12, 0, FlagMode.Residence, "Protects from blocks falling into residence", true), falldamage(301, 0, FlagMode.Residence, "Protects players from fall damage", true), feed(364, 0, FlagMode.Residence, "Setting to true makes the residence feed its occupants", true), + friendlyfire(175, 0, FlagMode.Player, "Allow or disallow friendly fire", false), fireball(385, 0, FlagMode.Residence, "Allows or denys fire balls in residences", true), firespread(377, 0, FlagMode.Residence, "Allows or denys fire spread", true), flowinprotection(333, 0, FlagMode.Residence, "Allows or denys liquid flow into residence", true), diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index ef6fcc08e..7d53814ab 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -376,6 +376,7 @@ public enum lm { General_ItemBlacklisted("&cYou are blacklisted from using this item here."), General_WorldPVPDisabled("&cWorld PVP is disabled."), General_NoPVPZone("&cNo PVP zone."), + General_NoFriendlyFire("&cNo friendly fire"), General_InvalidHelp("&cInvalid help page."), General_TeleportDeny("&cYou dont have teleport access."), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 182bc528a..9d5bd742e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -991,8 +991,29 @@ public void onSplashPotion(PotionSplashEvent event) { if (target.getType() != EntityType.PLAYER) continue; Boolean tgtpvp = plugin.getPermsByLoc(target.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); - if (!srcpvp || !tgtpvp) + if (!srcpvp || !tgtpvp) { event.setIntensity(target, 0); + continue; + } + + ClaimedResidence area = plugin.getResidenceManager().getByLoc(target.getLocation()); + + if ((target instanceof Player) && (shooter instanceof Player)) { + Player attacker = null; + if (shooter instanceof Player) { + attacker = (Player) shooter; + } + if (attacker != null) { + if (!(target instanceof Player)) + return; + ClaimedResidence srcarea = plugin.getResidenceManager().getByLoc(attacker.getLocation()); + if (srcarea != null && area != null && srcarea.equals(area) && srcarea.getPermissions().playerHas((Player) target, Flags.friendlyfire, FlagCombo.OnlyFalse) && + srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { + plugin.getAB().send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); + event.setIntensity(target, 0); + } + } + } } } @@ -1070,7 +1091,7 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { return; if (event.isCancelled()) return; - + if (event.getCause() != DamageCause.FIRE_TICK) return; @@ -1331,6 +1352,16 @@ public void onEntityDamage(EntityDamageEvent event) { if (!(ent instanceof Player)) return; + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && + srcarea.getPermissions().playerHas((Player) ent, Flags.friendlyfire, FlagCombo.OnlyFalse) && + srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { + + plugin.getAB().send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); + if (isOnFire) + ent.setFireTicks(0); + event.setCancelled(true); + } + if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { if (attacker != null) plugin.msg(attacker, lm.General_NoPVPZone); diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java index 3713133dc..8b1cd2692 100644 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ b/src/com/bekvon/bukkit/residence/utils/ActionBar.java @@ -122,8 +122,10 @@ public void send(CommandSender sender, String msg) { @Override public void send(Player receivingPacket, String msg) { - if (msg != null) - msg = msg.replace("%subtitle%", ""); + if (msg == null || msg.isEmpty()) + return; + + msg = msg.replace("%subtitle%", ""); if (simpleMessages) { receivingPacket.sendMessage(msg); return; From f289a281eefe965f97dd53ef056058a64a14e20c Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 17 May 2018 16:24:40 +0300 Subject: [PATCH 0499/1142] New placeholder for current residence owner name %residence_user_current_owner% --- .../bekvon/bukkit/residence/Placeholders/Placeholder.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java index 872585833..446ffccc0 100644 --- a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java +++ b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java @@ -39,6 +39,7 @@ public enum CMIPlaceHolders { residence_user_maxrentdays, residence_user_blockcost, residence_user_blocksell, + residence_user_current_owner, residence_user_current_res, residence_user_current_bank, residence_user_current_qsize, @@ -169,8 +170,11 @@ public String getValue(Player player, CMIPlaceHolders placeHolder) { return String.valueOf(user.getMaxSubzoneDepth()); case residence_user_maxud: return group.getYmin() + "-" + group.getYmax(); - case residence_user_current_res: + case residence_user_current_owner: ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + return res == null ? "" : res.getOwner(); + case residence_user_current_res: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); return res == null ? "" : res.getName(); case residence_user_current_bank: res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); From 4ac6fec40584ac81cca3758dd45837402866d47e Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 17 May 2018 16:34:16 +0300 Subject: [PATCH 0500/1142] New command setallfor to set particular flag on all residences owned by particular player --- .../bukkit/residence/commands/setallfor.java | 62 +++++++++++++++++++ .../bukkit/residence/containers/lm.java | 1 + 2 files changed, 63 insertions(+) create mode 100644 src/com/bekvon/bukkit/residence/commands/setallfor.java diff --git a/src/com/bekvon/bukkit/residence/commands/setallfor.java b/src/com/bekvon/bukkit/residence/commands/setallfor.java new file mode 100644 index 000000000..f23fafd7f --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/setallfor.java @@ -0,0 +1,62 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; + +public class setallfor implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 700) + public boolean perform(final Residence plugin, final String[] args, final boolean resadmin, Command command, final CommandSender sender) { + if (args.length != 4) + return false; + + String playerName = args[1]; + String flag = args[2]; + FlagState state = FlagPermissions.stringToFlagState(args[3]); + ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(playerName); + if (resPlayer == null) + return false; + FlagPermissions GlobalFlags = Residence.getInstance().getPermissionManager().getAllFlags(); + + if (flag == null || !GlobalFlags.checkValidFlag(flag.toLowerCase(), true)) { + plugin.msg(sender, lm.Invalid_Flag); + return true; + } + + if (state.equals(FlagState.INVALID)) { + plugin.msg(sender, lm.Invalid_FlagState); + return true; + } + + int count = 0; + + for (ClaimedResidence one : resPlayer.getResList()) { + if (one.getPermissions().setFlag(sender, flag, state, true, false)) + count++; + } + + plugin.msg(sender, lm.Flag_ChangedForOne, count, resPlayer.getPlayerName()); + + return true; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Set general flags on all residences owned by particular player"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res setallfor [playerName] [flag] [true/false/remove]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]", "[flag]", "true%%false%%remove")); + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 7d53814ab..6f556580f 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -100,6 +100,7 @@ public enum lm { Flag_Deny("&cYou dont have &6%1 &cpermission here."), Flag_SetDeny("&cOwner does not have access to flag &6%1"), Flag_ChangeDeny("&cYou cant change &6%1 &cflag state while there is &6%2 &cplayer(s) inside."), + Flag_ChangedForOne("&eChanged &6%1 &eflags for &6%2 &eresidences"), Flag_ChangedFor("&eChanged &6%1 &eflags from &6%2 &eresidences checked"), Flag_reset("&eReset flags for &6%1 &eresidence"), Flag_resetAll("&eReset flags for &6%1 &eresidences"), From 75d1c00914347544b1b8b0209f19856699339517 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 27 Jul 2018 16:55:35 +0300 Subject: [PATCH 0501/1142] 1.13 update --- .../bukkit/residence/BossBar/BossBarInfo.java | 205 ++ .../residence/BossBar/BossBarManager.java | 156 + .../bukkit/residence/CMILib/CMIEffect.java | 84 + .../residence/CMILib/CMIEffectManager.java | 433 +++ .../bukkit/residence/CMILib/CMIItemStack.java | 344 ++ .../bukkit/residence/CMILib/ItemManager.java | 2277 ++++++++++++ .../residence/CMILib/ItemReflection.java | 163 + .../bukkit/residence/ConfigManager.java | 143 +- .../bekvon/bukkit/residence/Residence.java | 45 +- .../residence/ResidenceCommandListener.java | 75 +- .../residence/Siege/ResidenceSiege.java | 94 + .../Siege/ResidenceSiegeListener.java | 99 + .../Siege/ResidenceSiegeManager.java | 9 + .../bekvon/bukkit/residence/allNms/v1_10.java | 192 - .../bukkit/residence/allNms/v1_10_R1.java | 252 ++ .../allNms/{v1_11.java => v1_11_R1.java} | 167 +- .../bekvon/bukkit/residence/allNms/v1_12.java | 197 - .../bukkit/residence/allNms/v1_12_R1.java | 275 ++ .../bukkit/residence/allNms/v1_13_R1.java | 257 ++ .../residence/allNms/v1_7_Couldron.java | 80 +- .../allNms/{v1_7.java => v1_7_R4.java} | 82 +- .../bekvon/bukkit/residence/allNms/v1_8.java | 173 - .../bukkit/residence/allNms/v1_8_R1.java | 238 ++ .../bukkit/residence/allNms/v1_8_R2.java | 238 ++ .../bukkit/residence/allNms/v1_8_R3.java | 238 ++ .../bekvon/bukkit/residence/allNms/v1_9.java | 180 - .../bukkit/residence/allNms/v1_9_R1.java | 240 ++ .../bukkit/residence/allNms/v1_9_R2.java | 240 ++ .../bukkit/residence/commands/expand.java | 4 +- .../bukkit/residence/commands/market.java | 3 +- .../bukkit/residence/commands/material.java | 4 +- .../bukkit/residence/commands/siege.java | 105 + .../bukkit/residence/commands/tool.java | 6 +- .../bukkit/residence/containers/NMS.java | 9 +- .../residence/containers/ResidencePlayer.java | 78 + .../bukkit/residence/containers/lm.java | 14 + .../event/ResidenceSiegeEndEvent.java | 42 + .../event/ResidenceSiegePreStartEvent.java | 49 + .../event/ResidenceSiegeStartEvent.java | 49 + .../bekvon/bukkit/residence/gui/FlagUtil.java | 13 +- .../bukkit/residence/itemlist/ItemList.java | 352 +- .../listeners/ResidenceBlockListener.java | 104 +- .../listeners/ResidenceEntityListener.java | 12 +- .../listeners/ResidenceFixesListener.java | 4 +- .../listeners/ResidencePlayerListener.java | 51 +- .../protection/ClaimedResidence.java | 64 +- .../residence/protection/FlagPermissions.java | 35 +- .../protection/ResidenceManager.java | 4 +- .../protection/ResidencePermissions.java | 1 + .../residence/selection/SelectionManager.java | 45 +- .../bukkit/residence/text/help/HelpEntry.java | 7 +- .../residence/utils/ParticleEffects.java | 3199 +++++++++-------- .../bukkit/residence/utils/RandomTp.java | 6 +- .../bukkit/residence/utils/RawMessage.java | 5 +- .../bukkit/residence/utils/TabComplete.java | 10 +- .../bekvon/bukkit/residence/utils/Utils.java | 101 + .../residence/utils/VersionChecker.java | 82 +- src/plugin.yml | 8 +- 58 files changed, 8718 insertions(+), 2924 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java create mode 100644 src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java create mode 100644 src/com/bekvon/bukkit/residence/CMILib/CMIEffect.java create mode 100644 src/com/bekvon/bukkit/residence/CMILib/CMIEffectManager.java create mode 100644 src/com/bekvon/bukkit/residence/CMILib/CMIItemStack.java create mode 100644 src/com/bekvon/bukkit/residence/CMILib/ItemManager.java create mode 100644 src/com/bekvon/bukkit/residence/CMILib/ItemReflection.java create mode 100644 src/com/bekvon/bukkit/residence/Siege/ResidenceSiege.java create mode 100644 src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeListener.java create mode 100644 src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeManager.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_10.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java rename src/com/bekvon/bukkit/residence/allNms/{v1_11.java => v1_11_R1.java} (54%) delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_12.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java rename src/com/bekvon/bukkit/residence/allNms/{v1_7.java => v1_7_R4.java} (62%) delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_8.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_9.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java create mode 100644 src/com/bekvon/bukkit/residence/commands/siege.java create mode 100644 src/com/bekvon/bukkit/residence/event/ResidenceSiegeEndEvent.java create mode 100644 src/com/bekvon/bukkit/residence/event/ResidenceSiegePreStartEvent.java create mode 100644 src/com/bekvon/bukkit/residence/event/ResidenceSiegeStartEvent.java create mode 100644 src/com/bekvon/bukkit/residence/utils/Utils.java diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java new file mode 100644 index 000000000..a8be47f7c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java @@ -0,0 +1,205 @@ +package com.bekvon.bukkit.residence.BossBar; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.utils.Utils; + +public class BossBarInfo { + private ResidencePlayer user; + private Double percentage = null; + private Double adjustPerc = null; + private Integer keepFor = 60; + private Integer auto = null; + private BossBar bar; + private BarColor startingColor = null; + private BarStyle style = null; + private Integer autoId = null; + private Integer id = null; + private String nameOfBar; + private String titleOfBar = "Title"; + private List cmds = null; + + public BossBarInfo(ResidencePlayer user, String nameOfBar) { + this.user = user; + this.nameOfBar = nameOfBar; + } + + public BossBarInfo(ResidencePlayer user, String nameOfBar, BossBar bar) { + this.user = user; + this.nameOfBar = nameOfBar; + this.bar = bar; + } + + public void setId(Integer id) { +// cancelHideScheduler(); + this.id = id; + } + + public void cancelAutoScheduler() { + if (autoId != null) { + Bukkit.getScheduler().cancelTask(this.autoId); + autoId = null; + } + } + + public void cancelHideScheduler() { + if (id != null) { + Bukkit.getScheduler().cancelTask(this.id); + id = null; + } + } + + public void remove() { + cancelAutoScheduler(); + cancelHideScheduler(); + if (bar != null) + bar.setVisible(false); + user.removeBossBar(this); + } + + public ResidencePlayer getUser() { + return this.user; + } + + public BossBar getBar() { + return this.bar; + } + + public Double getPercentage() { + return percentage; + } + + public void setPercentage(Double max, Double current) { + current = current * 100 / max / 100D; + setPercentage(current); + } + + public void setPercentage(Double percentage) { + if (percentage != null) { + if (percentage < 0) + percentage = 0D; + if (percentage > 1) + percentage = 1D; + } + this.percentage = percentage; + } + + public String getNameOfBar() { + if (nameOfBar == null) + nameOfBar = "CmiBossbar" + (new Random().nextInt(100)); + return nameOfBar; + } + + public void setNameOfBar(String nameOfBar) { + this.nameOfBar = nameOfBar; + } + + public Integer getKeepFor() { + return keepFor; + } + + public void setKeepForTicks(Integer keepFor) { + if (keepFor != null) + this.keepFor = keepFor; + } + + public String getTitleOfBar() { + if (titleOfBar != null && titleOfBar.contains("[autoTimeLeft]")) { + if (this.percentage != null && this.adjustPerc != null && this.auto != null) { + double leftTicks = this.percentage / (this.adjustPerc < 0 ? -this.adjustPerc : this.adjustPerc); + Long totalTicks = (long) (leftTicks * (this.auto < 0 ? -this.auto : this.auto)); + Long mili = totalTicks * 50; + return titleOfBar.replace("[autoTimeLeft]", Utils.to24hourShort(mili + 1000)); + } + } + return titleOfBar == null ? "" : titleOfBar; + } + + public void setTitleOfBar(String titleOfBar) { + if (titleOfBar == null || titleOfBar.isEmpty()) + this.titleOfBar = null; + else + this.titleOfBar = ChatColor.translateAlternateColorCodes('&', titleOfBar); + } + + public void setBar(BossBar bar) { + this.bar = bar; + } + + public BarColor getColor() { + return startingColor; + } + + public void setColor(BarColor startingColor) { +// if (startingColor == null) +// startingColor = BarColor.GREEN; + this.startingColor = startingColor; + } + + public Double getAdjustPerc() { + return adjustPerc; + } + + public void setAdjustPerc(Double adjustPerc) { + this.adjustPerc = adjustPerc; + } + + public BarStyle getStyle() { + return style; + } + + public void setStyle(BarStyle style) { +// if (style == null) +// style = BarStyle.SEGMENTED_10; + this.style = style; + } + + public void setUser(ResidencePlayer user) { + this.user = user; + } + + public Integer getId() { + return id; + } + + public Integer getAuto() { + return auto; + } + + public void setAuto(Integer auto) { + this.auto = auto; + } + + public Integer getAutoId() { + return autoId; + } + + public void setAutoId(Integer autoId) { + this.autoId = autoId; + } + +// public List getCommands() { +// return cmds; +// } +// +// public List getCommands(Player player) { +// Snd snd = new Snd(); +// snd.setSender(player); +// snd.setTarget(player); +// return CMI.getInstance().getLM().updateSnd(snd, new ArrayList(cmds)); +// } + +// public void setCmds(List cmds) { +// this.cmds = cmds; +// } +} diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java new file mode 100644 index 000000000..d3da8c9ac --- /dev/null +++ b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java @@ -0,0 +1,156 @@ + +package com.bekvon.bukkit.residence.BossBar; + +import java.util.HashMap; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.utils.VersionChecker.Version; + +public class BossBarManager { + + Residence plugin; + + public BossBarManager(Residence plugin) { + this.plugin = plugin; + } + + public synchronized void updateBossBars(ResidencePlayer player) { + if (plugin.getVersionChecker().getVersion().isLower(Version.v1_9_R1)) + return; + if (player == null) + return; + HashMap temp = new HashMap(player.getBossBarInfo()); + for (Entry one : temp.entrySet()) { + Show(one.getValue()); + } + } + + public synchronized void Show(final BossBarInfo barInfo) { + if (plugin.getVersionChecker().getVersion().isLower(Version.v1_9_R1)) + return; + final ResidencePlayer user = barInfo.getUser(); + + if (user == null || !user.isOnline()) + return; + + BossBar bar = barInfo.getBar(); + + String name = barInfo.getTitleOfBar(); + + boolean isNew = true; + if (bar == null) { + BarColor color = barInfo.getColor(); + if (color == null) + switch (user.getBossBarInfo().size()) { + case 1: + color = BarColor.GREEN; + break; + case 2: + color = BarColor.RED; + break; + case 3: + color = BarColor.WHITE; + break; + case 4: + color = BarColor.YELLOW; + break; + case 5: + color = BarColor.PINK; + break; + case 6: + color = BarColor.PURPLE; + break; + default: + color = BarColor.BLUE; + break; + } + bar = Bukkit.createBossBar(name, color, barInfo.getStyle() != null ? barInfo.getStyle() : BarStyle.SEGMENTED_10); + } else { + bar.setTitle(name); + if (barInfo.getStyle() != null) + bar.setStyle(barInfo.getStyle()); + if (barInfo.getColor() != null) + bar.setColor(barInfo.getColor()); + isNew = false; + } + + Double percentage = barInfo.getPercentage(); + if (percentage == null) + percentage = 1D; + + if (barInfo.getAdjustPerc() != null) { + Double curP = barInfo.getPercentage(); + if (curP != null && curP <= 0 && barInfo.getAdjustPerc() < 0) { + barInfo.cancelAutoScheduler(); +// if (barInfo.getCommands() != null) { +// plugin.getSpecializedCommandManager().processCmds(barInfo.getCommands(user.getPlayer()), user.getPlayer()); +// } + return; + } + if (curP != null && curP >= 1 && barInfo.getAdjustPerc() > 0) { + barInfo.cancelAutoScheduler(); +// if (barInfo.getCommands() != null) { +// plugin.getSpecializedCommandManager().processCmds(barInfo.getCommands(user.getPlayer()), user.getPlayer()); +// } + return; + } + if (curP == null) + if (barInfo.getAdjustPerc() > 0) + curP = 0D; + else + curP = 1D; + curP += barInfo.getAdjustPerc(); + barInfo.setPercentage(curP); + } else + barInfo.setPercentage(percentage); + + try { + bar.setProgress(barInfo.getPercentage()); + if (isNew) { + Player target = user.getPlayer(); + if (target == null) + return; + bar.addPlayer(target); + bar.setVisible(true); + } + } catch (NoSuchMethodError e) { + e.printStackTrace(); + } + barInfo.setBar(bar); + + barInfo.cancelHideScheduler(); + barInfo.cancelAutoScheduler(); + + if (barInfo.getAuto() != null && barInfo.getAuto() > 0) { + barInfo.setAutoId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + + Show(barInfo); + + return; + } + }, barInfo.getAuto())); + } + if (barInfo.getKeepFor() > 0) { + + barInfo.setId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + barInfo.getBar().setVisible(false); + barInfo.remove(); + return; + } + }, barInfo.getKeepFor())); + } + } + +} diff --git a/src/com/bekvon/bukkit/residence/CMILib/CMIEffect.java b/src/com/bekvon/bukkit/residence/CMILib/CMIEffect.java new file mode 100644 index 000000000..e418dc988 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/CMILib/CMIEffect.java @@ -0,0 +1,84 @@ +package com.bekvon.bukkit.residence.CMILib; + +import java.lang.reflect.Method; + +import org.bukkit.Color; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import com.bekvon.bukkit.residence.CMILib.CMIEffectManager.CMIParticle; + +public class CMIEffect { + + private CMIParticle particle; + private Color color = Color.fromBGR(0, 0, 200); + private Vector offset = new Vector(); + private int size = 1; + private int amount = 1; + private float speed = 0; + private Location loc; + + public CMIEffect(CMIParticle particle) { + this.particle = particle; + } + + public CMIParticle getParticle() { + if (particle == null) + particle = CMIParticle.COLOURED_DUST; + return particle; + } + + public void setParticle(CMIParticle particle) { + this.particle = particle; + } + + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + public Vector getOffset() { + return offset; + } + + public void setOffset(Vector offset) { + this.offset = offset; + } + + public int getAmount() { + return amount; + } + + public void setAmount(int amount) { + this.amount = amount; + } + + public float getSpeed() { + return speed; + } + + public void setSpeed(float speed) { + this.speed = speed; + } + + public int getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + + public Location getLoc() { + return loc; + } + + public void setLoc(Location loc) { + this.loc = loc; + } + +} diff --git a/src/com/bekvon/bukkit/residence/CMILib/CMIEffectManager.java b/src/com/bekvon/bukkit/residence/CMILib/CMIEffectManager.java new file mode 100644 index 000000000..47d109a42 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/CMILib/CMIEffectManager.java @@ -0,0 +1,433 @@ +package com.bekvon.bukkit.residence.CMILib; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Effect; +import org.bukkit.Effect.Type; +import org.bukkit.Material; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.utils.VersionChecker.Version; + +public class CMIEffectManager { + + public enum CMIParticleType { + SOUND, VISUAL, PARTICLE, NONE; + } + + public enum CMIParticleDataType { + Void, DustOptions, ItemStack, BlockData, MaterialData; + } + + public enum CMIParticle { + CLICK2("null", 0, CMIParticleType.SOUND, null), + CLICK1("null", 1, CMIParticleType.SOUND, null), + BOW_FIRE("null", 2, CMIParticleType.SOUND, null), + DOOR_TOGGLE("null", 3, CMIParticleType.SOUND, null), + IRON_DOOR_TOGGLE("null", 4, CMIParticleType.SOUND, null), + TRAPDOOR_TOGGLE("null", 5, CMIParticleType.SOUND, null), + IRON_TRAPDOOR_TOGGLE("null", 6, CMIParticleType.SOUND, null), + FENCE_GATE_TOGGLE("null", 7, CMIParticleType.SOUND, null), + DOOR_CLOSE("null", 8, CMIParticleType.SOUND, null), + IRON_DOOR_CLOSE("null", 9, CMIParticleType.SOUND, null), + TRAPDOOR_CLOSE("null", 10, CMIParticleType.SOUND, null), + IRON_TRAPDOOR_CLOSE("null", 11, CMIParticleType.SOUND, null), + FENCE_GATE_CLOSE("null", 12, CMIParticleType.SOUND, null), + EXTINGUISH("null", 13, CMIParticleType.SOUND, null), + RECORD_PLAY("null", 14, CMIParticleType.SOUND, null), + GHAST_SHRIEK("null", 15, CMIParticleType.SOUND, null), + GHAST_SHOOT("null", 16, CMIParticleType.SOUND, null), + BLAZE_SHOOT("null", 17, CMIParticleType.SOUND, null), + ZOMBIE_CHEW_WOODEN_DOOR("null", 18, CMIParticleType.SOUND, null), + ZOMBIE_CHEW_IRON_DOOR("null", 19, CMIParticleType.SOUND, null), + ZOMBIE_DESTROY_DOOR("null", 20, CMIParticleType.SOUND, null), + SMOKE("null", 21, CMIParticleType.VISUAL, null), + STEP_SOUND("null", 22, CMIParticleType.SOUND, null), + POTION_BREAK("null", 23, CMIParticleType.VISUAL, null), + ENDER_SIGNAL("null", 24, CMIParticleType.VISUAL, null), + MOBSPAWNER_FLAMES("null", 25, CMIParticleType.VISUAL, null), + BREWING_STAND_BREW("null", 26, CMIParticleType.SOUND, null), + CHORUS_FLOWER_GROW("null", 27, CMIParticleType.SOUND, null), + CHORUS_FLOWER_DEATH("null", 28, CMIParticleType.SOUND, null), + PORTAL_TRAVEL("null", 29, CMIParticleType.SOUND, null), + ENDEREYE_LAUNCH("null", 30, CMIParticleType.SOUND, null), + FIREWORK_SHOOT("null", 31, CMIParticleType.SOUND, null), + VILLAGER_PLANT_GROW("null", 32, CMIParticleType.VISUAL, null), + DRAGON_BREATH("null", 33, CMIParticleType.VISUAL, null), + ANVIL_BREAK("null", 34, CMIParticleType.SOUND, null), + ANVIL_USE("null", 35, CMIParticleType.SOUND, null), + ANVIL_LAND("null", 36, CMIParticleType.SOUND, null), + ENDERDRAGON_SHOOT("null", 37, CMIParticleType.SOUND, null), + WITHER_BREAK_BLOCK("null", 38, CMIParticleType.SOUND, null), + WITHER_SHOOT("null", 39, CMIParticleType.SOUND, null), + ZOMBIE_INFECT("null", 40, CMIParticleType.SOUND, null), + ZOMBIE_CONVERTED_VILLAGER("null", 41, CMIParticleType.SOUND, null), + BAT_TAKEOFF("null", 42, CMIParticleType.SOUND, null), + END_GATEWAY_SPAWN("null", 43, CMIParticleType.VISUAL, null), + ENDERDRAGON_GROWL("null", 44, CMIParticleType.SOUND, null), + FIREWORKS_SPARK("fireworksSpark", 45, CMIParticleType.PARTICLE, CMIMaterial.FIRE_CHARGE.getMaterial()), + CRIT("crit", 46, CMIParticleType.PARTICLE, Material.IRON_SWORD), + MAGIC_CRIT("CRIT_MAGIC", 47, CMIParticleType.PARTICLE, Material.POTION), + POTION_SWIRL("mobSpell", "SPELL_MOB", 48, CMIParticleType.PARTICLE, Material.BLAZE_ROD), + POTION_SWIRL_TRANSPARENT("mobSpellAmbient", "SPELL_MOB_AMBIENT", 49, CMIParticleType.PARTICLE, Material.BLAZE_POWDER), + SPELL("spell", 50, CMIParticleType.PARTICLE, Material.MILK_BUCKET), + INSTANT_SPELL("instantSpell", "SPELL_INSTANT", 51, CMIParticleType.PARTICLE, Material.GLASS_BOTTLE), + WITCH_MAGIC("witchMagic", "SPELL_WITCH", 52, CMIParticleType.PARTICLE, Material.SPIDER_EYE), + NOTE("note", 53, CMIParticleType.PARTICLE, Material.NOTE_BLOCK), + PORTAL("portal", 54, CMIParticleType.PARTICLE, Material.OBSIDIAN), + FLYING_GLYPH("enchantmenttable", 55, CMIParticleType.PARTICLE, CMIMaterial.ENCHANTING_TABLE.getMaterial()), + FLAME("flame", 56, CMIParticleType.PARTICLE, CMIMaterial.FIRE_CHARGE.getMaterial()), + LAVA_POP("lava", 57, CMIParticleType.PARTICLE, Material.FLINT_AND_STEEL), + FOOTSTEP("footstep", 58, CMIParticleType.PARTICLE, Material.IRON_BOOTS), + SPLASH("splash", "water splash", 59, CMIParticleType.PARTICLE, Material.STICK), + PARTICLE_SMOKE("smoke", "SMOKE_NORMAL", 60, CMIParticleType.PARTICLE, Material.ANVIL), + EXPLOSION_HUGE("hugeexplosion", 61, CMIParticleType.PARTICLE, Material.FURNACE), + EXPLOSION_LARGE("largeexplode", 62, CMIParticleType.PARTICLE, Material.FURNACE), + EXPLOSION("explode", "EXPLOSION_NORMAL", 63, CMIParticleType.PARTICLE, Material.TNT), + VOID_FOG("depthsuspend", "SUSPENDED_DEPTH", 64, CMIParticleType.PARTICLE, CMIMaterial.SALMON.getMaterial()), + SMALL_SMOKE("townaura", 65, CMIParticleType.PARTICLE, CMIMaterial.MYCELIUM.getMaterial()), + CLOUD("cloud", 66, CMIParticleType.PARTICLE, CMIMaterial.COBWEB.getMaterial()), + COLOURED_DUST("reddust", "redstone", 67, CMIParticleType.PARTICLE, Material.REDSTONE, CMIParticleDataType.DustOptions), + SNOWBALL_BREAK("snowballpoof", "SNOWBALL", 68, CMIParticleType.PARTICLE, CMIMaterial.SNOWBALL.getMaterial()), + WATERDRIP("dripWater", "WATER_DROP", 69, CMIParticleType.PARTICLE, Material.WATER_BUCKET), + LAVADRIP("dripLava", 70, CMIParticleType.PARTICLE, Material.LAVA_BUCKET), + SNOW_SHOVEL("snowshovel", 71, CMIParticleType.PARTICLE, CMIMaterial.DIAMOND_SHOVEL.getMaterial()), + SLIME("slime", 72, CMIParticleType.PARTICLE, Material.SLIME_BALL), + HEART("heart", 73, CMIParticleType.PARTICLE, CMIMaterial.ROSE_RED.getMaterial()), + VILLAGER_THUNDERCLOUD("angryVillager", "VILLAGER_ANGRY", 74, CMIParticleType.PARTICLE, Material.EMERALD), + HAPPY_VILLAGER("VILLAGER_HAPPY", 75, CMIParticleType.PARTICLE, Material.BOOK), + LARGE_SMOKE("largesmoke", "SMOKE_LARGE", 76, CMIParticleType.PARTICLE, Material.FURNACE), + ITEM_BREAK("iconcrack", 77, CMIParticleType.NONE, Material.DIAMOND_BOOTS), +// TILE_BREAK("blockcrack", 78, CMIParticleType.PARTICLE, CMIMaterial.MELON.getMaterial(), CMIParticleDataType.MaterialData), +// TILE_DUST("blockdust", 79, CMIParticleType.PARTICLE, CMIMaterial.MELON.getMaterial(), CMIParticleDataType.MaterialData), + + // 1.13 + + WATER_BUBBLE("WATER_BUBBLE", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + WATER_WAKE("WATER_WAKE", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + SUSPENDED("SUSPENDED", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + BARRIER("BARRIER", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), +// ITEM_CRACK("ITEM_CRACK", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.ItemStack), + MOB_APPEARANCE("MOB_APPEARANCE", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + END_ROD("END_ROD", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + DAMAGE_INDICATOR("DAMAGE_INDICATOR", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + SWEEP_ATTACK("SWEEP_ATTACK", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), +// FALLING_DUST("FALLING_DUST", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.BlockData), + TOTEM("TOTEM", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + SPIT("SPIT", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + SQUID_INK("SQUID_INK", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + BUBBLE_POP("BUBBLE_POP", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + CURRENT_DOWN("CURRENT_DOWN", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + BUBBLE_COLUMN_UP("BUBBLE_COLUMN_UP", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + NAUTILUS("NAUTILUS", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), + DOLPHIN("DOLPHIN", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void); + + private String name; + private String secondaryName = ""; + private int id; + private CMIParticleType type; + private Material icon; + private Object particle; + private Effect effect; + private Object EnumParticle; + private int[] extra; + private CMIParticleDataType dataType = CMIParticleDataType.Void; + + CMIParticle(String name, int id, CMIParticleType type) { + this(name, null, id, type, null); + } + + CMIParticle(String name, int id, CMIParticleType type, Material icon) { + this(name, null, id, type, icon); + } + + CMIParticle(String name, String secondaryName, int id, CMIParticleType type, Material icon) { + this(name, secondaryName, id, type, icon, CMIParticleDataType.Void); + } + + CMIParticle(String name, int id, CMIParticleType type, Material icon, CMIParticleDataType dataType) { + this(name, null, id, type, icon, dataType); + } + + CMIParticle(String name, String secondaryName, int id, CMIParticleType type, Material icon, CMIParticleDataType dataType) { + this.name = name; + this.secondaryName = secondaryName; + this.id = id; + this.type = type; + this.icon = icon; + this.dataType = dataType; + } + + public String getName() { + return name; + } + + public int getId() { + return id; + } + + public CMIParticleType getType() { + return type; + } + + public boolean isParticle() { + return type == CMIParticleType.PARTICLE; + } + + public boolean isColored() { + return this.equals(COLOURED_DUST) || this.equals(NOTE); + } + + public static boolean isParticle(Effect effect) { + if (effect == null) + return false; + CMIParticle cmiEffect = getCMIParticle(effect.toString()); + if (cmiEffect == null) + return false; + return cmiEffect.isParticle(); + } + + public static Material getSafeIcon(Effect effect) { + CMIParticle cmiEffect = getCMIParticle(effect.toString()); + if (cmiEffect == null) + return Material.STONE; + return cmiEffect.getIcon() == null ? Material.STONE : cmiEffect.getIcon(); + } + + public Material getSafeIcon() { + return getIcon() == null ? Material.STONE : getIcon(); + } + + public static CMIParticle getCMIParticle(String name) { + CMIParticle cmiEffect = null; + if (name == null) + return null; + name = name.replace("_", "").toLowerCase(); + for (CMIParticle one : CMIParticle.values()) { + if (one.getName() != null && one.getName().equalsIgnoreCase(name)) { + cmiEffect = one; + break; + } + if (!one.getSecondaryName().isEmpty() && one.getSecondaryName().replace("_", "").equalsIgnoreCase(name)) { + cmiEffect = one; + break; + } + if (one.name().replace("_", "").equalsIgnoreCase(name)) { + cmiEffect = one; + break; + } + } + if (cmiEffect != null && Residence.getInstance().getVersionChecker().getVersion().isEqualOrHigher(Version.v1_9_R1) && cmiEffect.getParticle() == null) + return null; + if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_13_R1) && cmiEffect != null && cmiEffect.getEffect() == null) + return null; + return cmiEffect; + } + +// public static Effect getEffect(String name) { +// CMIParticle cmiEffect = getCMIParticle(name); +//// Bukkit.getConsoleSender().sendMessage("1 "+name); +//// Bukkit.getConsoleSender().sendMessage("2 "+cmiEffect); +// +// if (cmiEffect != null) { +// if (!cmiEffect.getType().equals(CMIParticleType.PARTICLE)) +// return null; +// for (Effect one : Effect.values()) { +// if (one.toString().equalsIgnoreCase(cmiEffect.name())) +// return one; +// if (one.toString().equalsIgnoreCase(cmiEffect.getName())) +// return one; +// } +// } else { +// for (Effect one : Effect.values()) { +// if (one.toString().replace("_", "").equalsIgnoreCase(name)) { +// try { +// if (one.getType() != Type.VISUAL) +// return null; +// } catch (Exception | NoSuchMethodError e) { +// return null; +// } +// return one; +// } +// } +// } +// return null; +// } + + public Effect getEffect() { + if (effect != null) + return effect; + if (!isParticle()) + return null; + for (Effect one : Effect.values()) { + if (one.toString().replace("_", "").equalsIgnoreCase(name().replace("_", ""))) { + effect = one; + return one; + } + if (one.toString().replace("_", "").equalsIgnoreCase(getName())) { + effect = one; + return one; + } + } + + for (Effect one : Effect.values()) { + if (one.toString().replace("_", "").equalsIgnoreCase(name.replace("_", ""))) { + try { + if (one.getType() != Type.VISUAL) + return null; + } catch (Exception | NoSuchMethodError e) { + return null; + } + effect = one; + return one; + } + } + return null; + } + + public Material getIcon() { + return icon; + } + + public static List getParticleList() { + List ls = new ArrayList(); + for (CMIParticle one : CMIParticle.values()) { + if (!one.isParticle()) + continue; + if (Residence.getInstance().getVersionChecker().getVersion().isEqualOrHigher(Version.v1_9_R1) && one.getParticle() == null) + continue; + if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_13_R1) && one.getEffect() == null) + continue; + ls.add(one); + } + return ls; + } + + public CMIParticle getNextPartcileEffect() { + + List ls = getParticleList(); + for (int i = 0; i < ls.size(); i++) { + CMIParticle next = ls.get(i); + if (next == null) + continue; + + if (!next.isParticle()) + continue; + if (Residence.getInstance().getVersionChecker().getVersion().isEqualOrHigher(Version.v1_9_R1) && next.getParticle() == null) + continue; + + if (next.equals(this)) { + if (i == ls.size() - 1) + return ls.get(0); + return ls.get(i + 1); + } + } + return this; + } + + public CMIParticle getPrevParticleEffect() { + List ls = getParticleList(); + for (int i = 0; i < ls.size(); i++) { + CMIParticle next = ls.get(i); + + if (next == null) + continue; + + if (Residence.getInstance().getVersionChecker().getVersion().isEqualOrHigher(Version.v1_9_R1) && next.getParticle() == null) + continue; + + if (!next.isParticle()) + continue; + if (next.equals(this)) { + if (i == 0) + return ls.get(ls.size() - 1); + return ls.get(i - 1); + } + } + return this; + } + + public String getSecondaryName() { + return secondaryName == null ? "" : secondaryName; + } + + public void setSecondaryName(String secondaryName) { + this.secondaryName = secondaryName; + } + + public org.bukkit.Particle getParticle() { + if (Residence.getInstance().getVersionChecker().getVersion().isEqualOrLower(Version.v1_8_R3)) + return null; + if (particle == null) { + String n = this.toString().replace("_", "").toLowerCase(); + for (org.bukkit.Particle one : org.bukkit.Particle.values()) { + String name = one.toString().toLowerCase().replace("_", ""); + if (name.equalsIgnoreCase(n)) { + particle = one; + break; + } + } + } + if (particle == null) { + String n = name().replace("_", "").toLowerCase(); + for (org.bukkit.Particle one : org.bukkit.Particle.values()) { + String name = one.toString().toLowerCase().replace("_", ""); + if (name.equalsIgnoreCase(n)) { + particle = one; + break; + } + } + } + if (particle == null) { + String n = getName().replace("_", "").toLowerCase(); + for (org.bukkit.Particle one : org.bukkit.Particle.values()) { + String name = one.toString().toLowerCase().replace("_", ""); + if (name.equalsIgnoreCase(n)) { + particle = one; + break; + } + } + } + if (particle == null) { + String n = getSecondaryName().replace("_", "").toLowerCase(); + if (!n.isEmpty()) { + for (org.bukkit.Particle one : org.bukkit.Particle.values()) { + String name = one.toString().toLowerCase().replace("_", ""); + if (name.equalsIgnoreCase(n)) { + particle = one; + break; + } + } + + if (particle == null) + for (org.bukkit.Particle one : org.bukkit.Particle.values()) { + String name = one.toString().toLowerCase().replace("_", ""); + if (name.contains(n)) { + particle = one; + break; + } + } + } + } + return particle == null ? null : (org.bukkit.Particle) particle; + } + + public Object getEnumParticle() { + return EnumParticle; + } + + public void setEnumParticle(Object enumParticle) { + EnumParticle = enumParticle; + } + + public int[] getExtra() { + return extra; + } + + public void setExtra(int[] extra) { + this.extra = extra; + } + } +} diff --git a/src/com/bekvon/bukkit/residence/CMILib/CMIItemStack.java b/src/com/bekvon/bukkit/residence/CMILib/CMIItemStack.java new file mode 100644 index 000000000..459a0c455 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/CMILib/CMIItemStack.java @@ -0,0 +1,344 @@ +package com.bekvon.bukkit.residence.CMILib; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.utils.VersionChecker.Version; + +public class CMIItemStack { + + private int id = 0; + private short data = 0; + private short durability = 0; + private int amount = 0; + + private String bukkitName = null; + private String mojangName = null; + private CMIMaterial material = null; + private ItemStack item; + + public CMIItemStack(Material material) { + this.material = CMIMaterial.get(material); + } + + public CMIItemStack(CMIMaterial material) { + this.material = material; + } + + public CMIItemStack(ItemStack item) { + this.setItemStack(item); + } + + @Override + public CMIItemStack clone() { + CMIItemStack cm = new CMIItemStack(material); + cm.setId(id); + cm.setData(data); + cm.setAmount(amount); + cm.setDurability(durability); + cm.setBukkitName(bukkitName); + cm.setMojangName(mojangName); + cm.setCMIMaterial(material); + cm.setItemStack(this.item != null ? this.item.clone() : null); + return cm; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public short getData() { + return data; + } + + public boolean isTool() { + return getMaxDurability() > 0; + } + + public short getDurability() { + return this.getItemStack().getDurability(); + } + + public short getMaxDurability() { + return this.material.getMaxDurability(); + } + + public void setData(short data) { + this.data = data; + } + + public CMIItemStack setDisplayName(String name) { + ItemMeta meta = this.getItemStack().getItemMeta(); + if (meta != null) { + if (name == null) { + meta.setDisplayName(null); + } else + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); + } + this.getItemStack().setItemMeta(meta); + return this; + } + + public String getDisplayName() { + ItemMeta meta = this.getItemStack().getItemMeta(); + return meta == null || meta.getDisplayName() == null || meta.getDisplayName().isEmpty() ? this.material.getName() : meta.getDisplayName(); + } + + public CMIItemStack addLore(String string) { + if (string == null) + return this; + ItemMeta meta = this.getItemStack().getItemMeta(); + List lore = meta.getLore(); + if (lore == null) + lore = new ArrayList(); + lore.add(ChatColor.translateAlternateColorCodes('&', string)); + meta.setLore(lore); + this.getItemStack().setItemMeta(meta); + return this; + } + + public CMIItemStack clearLore() { + ItemMeta meta = this.getItemStack().getItemMeta(); + List t = new ArrayList(); + meta.setLore(t); + this.getItemStack().setItemMeta(meta); + return this; + } + + public CMIItemStack setLore(List lore) { + if (lore == null || lore.isEmpty()) + return this; + ItemMeta meta = this.getItemStack().getItemMeta(); + List t = new ArrayList(); + for (String one : lore) { + t.add(ChatColor.translateAlternateColorCodes('&', one)); + } + meta.setLore(t); + this.getItemStack().setItemMeta(meta); + return this; + } + + public CMIItemStack addEnchant(Enchantment enchant, Integer level) { + if (enchant == null) + return this; + ItemMeta meta = this.getItemStack().getItemMeta(); + meta.addEnchant(enchant, level, true); + this.getItemStack().setItemMeta(meta); + return this; + } + + public CMIItemStack addEnchant(HashMap enchants) { + if (enchants == null || enchants.isEmpty()) + return this; + for (Entry oneEnch : enchants.entrySet()) { + this.addEnchant(oneEnch.getKey(), oneEnch.getValue()); + } + return this; + } + + public CMIItemStack clearEnchants() { + ItemMeta meta = this.getItemStack().getItemMeta(); + meta.getEnchants().clear(); + this.getItemStack().setItemMeta(meta); + return this; + } + + public List getLore() { + ItemMeta meta = this.getItemStack().getItemMeta(); + if (meta != null) { + List lore = meta.getLore(); + if (lore == null) { + lore = new ArrayList(); + meta.setLore(lore); + } + + return meta.getLore() == null ? new ArrayList() : meta.getLore(); + } + return new ArrayList(); + } + + public String getRealName() { + + return this.material.getName(); + } + + public String getBukkitName() { + return bukkitName == null || bukkitName.isEmpty() ? null : bukkitName; + } + + public void setBukkitName(String bukkitName) { + this.bukkitName = bukkitName; + } + + public String getMojangName() { + return mojangName == null || mojangName.isEmpty() ? null : mojangName; + } + + public void setMojangName(String mojangName) { + if (mojangName != null) + this.mojangName = mojangName.replace("minecraft:", ""); + } + + public Material getType() { + if (material == null) + return null; + return material.getMaterial(); + } + + public CMIMaterial getCMIType() { + return material; + } + + @Deprecated + public Material getMaterial() { + return getType(); + } + + public void setMaterial(Material material) { + this.material = CMIMaterial.get(material); + } + + public void setCMIMaterial(CMIMaterial material) { + this.material = material; + } + + @SuppressWarnings("deprecation") + public ItemStack getItemStack() { + if (item == null) { + if (Residence.getInstance().getVersionChecker().getVersion().isEqualOrHigher(Version.v1_13_R1)) { + this.item = new ItemStack(material.getMaterial(), this.amount == 0 ? 1 : this.amount); + } else { + this.item = new ItemStack(material.getMaterial(), this.amount == 0 ? 1 : this.amount, data); + } + + if (this.item.getType() == Material.POTION || item.getType().name().contains("SPLASH_POTION") || item.getType().name().contains("TIPPED_ARROW")) { + PotionMeta potion = (PotionMeta) item.getItemMeta(); + PotionEffectType effect = PotionEffectType.getById(data); + if (effect != null) { + potion.addCustomEffect(new PotionEffect(PotionEffectType.getById(data), 60, 0), true); + } + item.setItemMeta(potion); + item.setDurability((short) 0); + + potion = (PotionMeta) item.getItemMeta(); + potion.setDisplayName(this.getRealName()); + item.setItemMeta(potion); + } + } + return item; + } + + @SuppressWarnings("deprecation") + public CMIItemStack setItemStack(ItemStack item) { + this.item = item; + if (item != null) { + this.id = item.getType().getId(); + this.amount = item.getAmount(); + this.material = CMIMaterial.get(item); + if ((material.isBlock() || material.isSolid())) { + data = item.getData().getData(); + } + if (item.getType().getMaxDurability() - item.getDurability() < 0) { + data = item.getData().getData(); + } + + if (item.getType().getMaxDurability() > 15) { + data = (short) 0; + } + + if (item.getType() == Material.POTION || item.getType().name().contains("SPLASH_POTION") || item.getType().name().contains("TIPPED_ARROW")) { + PotionMeta potion = (PotionMeta) item.getItemMeta(); + try { + if (potion != null && potion.getBasePotionData() != null && potion.getBasePotionData().getType() != null && potion.getBasePotionData().getType().getEffectType() != null) { + data = (short) potion.getBasePotionData().getType().getEffectType().getId(); + } + } catch (NoSuchMethodError e) { + } + } + } + return this; + } + + public int getAmount() { + return amount; + } + + public void setAmount(int amount) { + this.amount = amount; + } + + public boolean isSimilar(ItemStack item) { + return isSimilar(ItemManager.getItem(item)); + } + + public boolean isSimilar(CMIItemStack item) { + if (item == null) + return false; + return this.material.equals(item.material) && this.getData() == item.getData(); + } + +// public boolean hasNbtTag() { +// return CMI.getInstance().getRef().hasNbt(this.getItemStack()); +// } + +// public List getRecipesFor() { +// ItemStack i = getItemStack().clone(); +// i.getData().setData((byte) data); +// if (i.getType().getMaxDurability() > 15) +// i.setDurability((short) 0); +// return Bukkit.getRecipesFor(i); +// } +// +// public List getRecipesFrom() { +// ItemStack i = getItemStack().clone(); +// i.getData().setData((byte) data); +// if (i.getType().getMaxDurability() > 15) +// i.setDurability((short) 0); +// Iterator it = Bukkit.recipeIterator(); +// List recipes = new ArrayList(); +// while (it.hasNext()) { +// Recipe rec = it.next(); +// for (ItemStack one : CMI.getInstance().getRecipeManager().getIngredientsList(rec)) { +// if (one.isSimilar(i)) { +// recipes.add(rec); +// break; +// } +// } +// } +// +// return recipes; +// } + + public void setDurability(short durability) { + this.durability = durability; + } + +// public Set getValidEnchants() { +// Set enchants = new HashSet(); +// for (Enchantment one : CMIEnchantment.values()) { +// if (!CMIEnchantment.isEnabled(one)) +// continue; +// if (one.canEnchantItem(this.getItemStack())) +// enchants.add(one); +// } +// return enchants; +// } + +} diff --git a/src/com/bekvon/bukkit/residence/CMILib/ItemManager.java b/src/com/bekvon/bukkit/residence/CMILib/ItemManager.java new file mode 100644 index 000000000..a7566a0da --- /dev/null +++ b/src/com/bekvon/bukkit/residence/CMILib/ItemManager.java @@ -0,0 +1,2277 @@ +package com.bekvon.bukkit.residence.CMILib; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.block.Block; +import org.bukkit.entity.EntityType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; +import org.bukkit.inventory.meta.SkullMeta; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.utils.VersionChecker.Version; + +public class ItemManager { + + static HashMap byId = new HashMap(); + static HashMap byBukkitName = new HashMap(); + static HashMap byMojangName = new HashMap(); + static HashMap byMaterial = new HashMap(); + static Version version; + + public static void load() { + version = Residence.getInstance().getVersionChecker().getVersion(); + for (CMIMaterial one : CMIMaterial.values()) { + if (one == null) + continue; + one.updateMaterial(); + Material mat = one.getMaterial(); + + if (mat == null) { + continue; + } + + int id = one.getId(); + int data = one.getLegacyData(); + int legacyId = one.getLegacyId(); + + String bukkitName = one.name(); + String mojangName = one.name(); + try { + mojangName = ItemReflection.getItemMinecraftName(new ItemStack(mat)); + } catch (Exception e) { + } + CMIItemStack cm = new CMIItemStack(one); + + cm.setId(id); + cm.setData((short) (data > 0 ? data : 0)); + + cm.setBukkitName(bukkitName); + cm.setMojangName(mojangName); + + byBukkitName.put(id + ":" + cm.getData(), cm); + byBukkitName.put(legacyId + ":" + cm.getData(), cm); + if (!one.getLegacyName().isEmpty()) { + byBukkitName.put(one.getLegacyName().toLowerCase().replace("_", "").replace(" ", ""), cm); + } + byBukkitName.put(one.name().toLowerCase().replace("_", "").replace(" ", ""), cm); + + String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); + + if (!byMojangName.containsKey(n)) + byMojangName.put(n, cm); + byMaterial.put(one, cm); + if (!byId.containsKey(id)) + byId.put(id, cm); + if (!byId.containsKey(one.getLegacyId())) + byId.put(one.getLegacyId(), cm); + } + + for (Material one : Material.class.getEnumConstants()) { + CMIMaterial mat = CMIMaterial.get(one); + if (mat == null && !one.toString().startsWith("LEGACY_")) { + CMIItemStack cm = new CMIItemStack(new ItemStack(one)); + cm.setId(one.getId()); + cm.setBukkitName(one.name()); + byBukkitName.put(one.getId() + ":" + cm.getData(), cm); + byBukkitName.put(one.name().toLowerCase().replace("_", "").replace(" ", ""), cm); + String mojangName = one.name(); + try { + mojangName = ItemReflection.getItemMinecraftName(new ItemStack(one)); + } catch (Exception e) { + } + cm.setMojangName(mojangName); + String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); + if (!byMojangName.containsKey(n)) + byMojangName.put(n, cm); + if (!byId.containsKey(one.getId())) + byId.put(one.getId(), cm); + } + } + + } + + @Deprecated + public static CMIItemStack getItem(Material mat) { + CMIItemStack cm = byMaterial.get(CMIMaterial.get(mat)); + return cm.clone(); + } + + public static CMIItemStack getItem(CMIMaterial mat) { + CMIItemStack cm = byMaterial.get(mat); + return cm.clone(); + } + + public static CMIItemStack getItem(ItemStack item) { + if (item == null) + item = new ItemStack(Material.AIR); + CMIItemStack cm = getItem(CMIMaterial.get(item)); + cm.setItemStack(item); + return cm; + } + + static HashMap headCache = new HashMap(); + + public static CMIItemStack getItem(String name) { + if (byBukkitName.isEmpty()) + load(); + CMIItemStack cm = null; + name = name.toLowerCase().replace("_", "").replace("minecraft:", ""); + String original = name; + Integer amount = null; + if (name.contains("-")) { + String a = name.split("-")[1]; + try { + amount = Integer.parseInt(a); + } catch (Exception e) { + } + name = name.split("-")[0]; + } + + short data = -999; + + if (name.contains(":")) { + try { + data = (short) Integer.parseInt(name.split(":")[1]); + } catch (Exception e) { + } + try { + CMIEntityType e = CMIEntityType.getByName(name.split(":")[1]); + if (e != null) + data = e.getType().getTypeId(); + } catch (Exception e) { + } + name = name.split(":")[0]; + } + + switch (name.toLowerCase()) { + case "skull": + cm = byMaterial.get(CMIMaterial.SKELETON_SKULL); + break; + case "door": + cm = byMaterial.get(CMIMaterial.SPRUCE_DOOR); + break; + case "head": + cm = byMaterial.get(CMIMaterial.PLAYER_HEAD); + data = 3; + + main: if (original.contains(":")) { + + ItemStack old = headCache.get(original); + if (old != null) { + cm.setItemStack(old); + } else { + String d = original.split(":")[1]; + ItemStack skull = new ItemStack(CMIMaterial.PLAYER_HEAD.getMaterial(), 1, (byte) 3); + SkullMeta skullMeta = (SkullMeta) skull.getItemMeta(); + if (d.length() == 36) { + try { + OfflinePlayer offPlayer = Bukkit.getOfflinePlayer(UUID.fromString(d)); + skullMeta.setOwningPlayer(offPlayer); + } catch (Exception e) { + break main; + } + skull.setItemMeta(skullMeta); + } else { + skullMeta.setOwner(d); + skull.setItemMeta(skullMeta); + } + headCache.put(original, skull); + cm.setItemStack(skull); + } + } + + break; + } + + if (cm == null) { + cm = byBukkitName.get(name); + if (cm == null) { + try { + cm = byId.get(Integer.parseInt(name)); + } catch (Exception e) { + } + + if (cm == null) { + cm = byMojangName.get(name); + if (cm == null) { + for (Material one : Material.class.getEnumConstants()) { + if (one.name().replace("_", "").equalsIgnoreCase(name)) { + cm = byMaterial.get(CMIMaterial.get(one)); + break; + } + } + if (cm == null) { + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getName().replace(" ", "").equalsIgnoreCase(name)) { + cm = byMaterial.get(one); + if (cm != null && data == -999) { + data = one.getData(); + } + break; + } + } + if (cm == null) { + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getName().replace(" ", "").toLowerCase().startsWith(name)) { + cm = byMaterial.get(one); + if (cm != null && data == -999) { + data = one.getData(); + } + break; + } + } + } + if (cm == null) { + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getName().replace(" ", "").toLowerCase().contains(name)) { + cm = byMaterial.get(one); + if (cm != null && data == -999) { + data = one.getData(); + } + break; + } + } + } + if (cm == null) { + for (Entry one : byMojangName.entrySet()) { + if (one.getKey().contains(name)) { + cm = one.getValue(); + if (cm != null && data == -999) { + data = one.getValue().getData(); + } + break; + } + } + } + } + } + } + } + } + + CMIItemStack ncm = null; + if (cm != null) + ncm = cm.clone(); + + if (ncm != null && data != -999) { + if (ncm.getMaxDurability() > 15) + ncm.setData((short) 0); + else { + ncm.setData(data); + } + } + if (ncm != null && amount != null) + ncm.setAmount(amount); + return ncm; + } + + static public List getAllRecipes() { + List results = new ArrayList(); + Iterator iter = Bukkit.recipeIterator(); + while (iter.hasNext()) { + Recipe recipe = iter.next(); + results.add(recipe); + } + return results; + } + + static public List getRecipesFor(ItemStack result) { + + List results = new ArrayList(); + Iterator iter = Bukkit.recipeIterator(); + while (iter.hasNext()) { + Recipe recipe = iter.next(); + ItemStack stack = recipe.getResult(); + if (stack.getType() != result.getType()) { + continue; + } + if (result.getDurability() == -1 || result.getDurability() == stack.getDurability()) { + results.add(recipe); + } + } + return results; + } + + static public Material getMaterial(String name) { + CMIItemStack cm = getItem(name); + if (cm == null) + return Material.AIR; + return cm.getMaterial(); + } + + public enum colorNames { + White(0, "White"), + Orange(1, "Orange"), + Magenta(2, "Magenta"), + Light(3, "Light Blue"), + Yellow(4, "Yellow"), + Lime(5, "Lime"), + Pink(6, "Pink"), + Gray(7, "Gray"), + Light_Gray(8, "Light Gray"), + Cyan(9, "Cyan"), + Purple(10, "Purple"), + Blue(11, "Blue"), + Brown(12, "Brown"), + Green(13, "Green"), + Red(14, "Red"), + Black(15, "Black"); + + private int id; + private String name; + + colorNames(int id, String name) { + this.id = id; + this.name = name; + } + + public int getId() { + return id; + } + + public String getName() { + return name; + } + + public static colorNames getById(int id) { + for (colorNames one : colorNames.values()) { + if (one.getId() == id) + return one; + } + return colorNames.White; + } + } + + public enum CMIEntityType { + + DROPPED_ITEM(1, "Item"), + EXPERIENCE_ORB(2, "Experience Orb"), + AREA_EFFECT_CLOUD(3, "Area Effect Cloud"), + ELDER_GUARDIAN(4, "Elder Guardian"), + WITHER_SKELETON(5, "Wither Skeleton"), + STRAY(6, "Stray"), + EGG(7, "Thrown Egg"), + LEASH_HITCH(8, "Leash Knot"), + PAINTING(9, "Painting"), + ARROW(10, "Arrow"), + SNOWBALL(11, "Snowball"), + FIREBALL(12, "Fireball"), + SMALL_FIREBALL(13, "Small Fireball"), + ENDER_PEARL(14, "Thrown Ender Pearl"), + ENDER_SIGNAL(15, "End Signal"), + SPLASH_POTION(16, "Splash Potion"), + THROWN_EXP_BOTTLE(17, "Thrown Bottle o' Enchanting"), + ITEM_FRAME(18, "Item Frame"), + WITHER_SKULL(19, "Wither Skull"), + PRIMED_TNT(20, "Primed TNT"), + FALLING_BLOCK(21, "Falling Block"), + FIREWORK(22, "Firework Rocket"), + HUSK(23, "Husk"), + SPECTRAL_ARROW(24, "Spectral Arrow"), + SHULKER_BULLET(25, "Shulker Bullet"), + DRAGON_FIREBALL(26, "Dragon Fireball"), + ZOMBIE_VILLAGER(27, "Zombie Villager"), + SKELETON_HORSE(28, "Skeleton Horse"), + ZOMBIE_HORSE(29, "Zombie Horse"), + ARMOR_STAND(30, "Armor Stand"), + DONKEY(31, "Donkey"), + MULE(32, "Mule"), + EVOKER_FANGS(33, "Evoker Fangs"), + EVOKER(34, "Evoker"), + VEX(35, "Vex"), + VINDICATOR(36, "Vindicator"), + ILLUSIONER(37, "Illusioner"), + MINECART_COMMAND(40, "Minecart with Command Block"), + BOAT(41, "Boat"), + MINECART(42, "Minecart"), + MINECART_CHEST(43, "Minecart with Chest"), + MINECART_FURNACE(44, "Minecart with Furnace"), + MINECART_TNT(45, "Minecart with TNT"), + MINECART_HOPPER(46, "Minecart with Hopper"), + MINECART_MOB_SPAWNER(47, "Minecart with Spawner"), + CREEPER(50, "Creeper"), + SKELETON(51, "Skeleton"), + SPIDER(52, "Spider"), + GIANT(53, "Giant"), + ZOMBIE(54, "Zombie"), + SLIME(55, "Slime"), + GHAST(56, "Ghast"), + PIG_ZOMBIE(57, "Zombie Pigman"), + ENDERMAN(58, "Enderman"), + CAVE_SPIDER(59, "Cave Spider"), + SILVERFISH(60, "Silverfish"), + BLAZE(61, "Blaze"), + MAGMA_CUBE(62, "Magma Cube"), + ENDER_DRAGON(63, "Ender Dragon"), + WITHER(64, "Wither"), + BAT(65, "Bat"), + WITCH(66, "Witch"), + ENDERMITE(67, "Endermite"), + GUARDIAN(68, "Guardian"), + SHULKER(69, "Shulker"), + PIG(90, "Pig"), + SHEEP(91, "Sheep"), + COW(92, "Cow"), + CHICKEN(93, "Chicken"), + SQUID(94, "Squid"), + WOLF(95, "Wolf"), + MUSHROOM_COW(96, "Mushroom Cow"), + SNOWMAN(97, "Snowman"), + OCELOT(98, "Ocelot"), + IRON_GOLEM(99, "Iron Golem"), + HORSE(100, "Horse"), + RABBIT(101, "Rabbit"), + POLAR_BEAR(102, "Polar Bear"), + LLAMA(103, "Llama"), + LLAMA_SPIT(104, "Llama Spit"), + PARROT(105, "Parrot"), + VILLAGER(120, "Villager"), + ENDER_CRYSTAL(200, "End Crystal"), + TURTLE(-1, "Turtle"), + PHANTOM(-1, "Phantom"), + TRIDENT(-1, "Trident"), + COD(-1, "Cod"), + SALMON(-1, "Salmon"), + PUFFERFISH(-1, "Pufferfish"), + TROPICAL_FISH(-1, "Tropical Fish"), + DROWNED(-1, "Drowned"), + DOLPHIN(-1, "Dolphin"), + LINGERING_POTION(-1, "Lingering Potion"), + FISHING_HOOK(-1, "Fishing Hook"), + LIGHTNING(-1, "Lightning Bolt"), + WEATHER(-1, "Weather"), + PLAYER(-1, "Player"), + COMPLEX_PART(-1, "Complex Part"), + TIPPED_ARROW(-1, "Tipped Arrow"), + UNKNOWN(-1, "Unknown"); + + private int id; + private String name; + EntityType type = null; + + CMIEntityType(int id, String name) { + this.id = id; + this.name = name; + } + + public int getId() { + return id; + } + + public String getName() { + return name; + } + + public static CMIEntityType getById(int id) { + for (CMIEntityType one : CMIEntityType.values()) { + if (one.getId() == id) + return one; + } + return CMIEntityType.PIG; + } + + public static CMIEntityType getByType(EntityType entity) { + return getByName(entity.toString()); + } + + public static CMIEntityType getByName(String name) { + String main = name; + String sub = null; + + if (name.contains("_")) { + main = name.split("_")[0]; + sub = name.split("_")[1]; + } + if (name.contains(":")) { + main = name.split(":")[0]; + sub = name.split(":")[1]; + } + + String updated = (main + (sub == null ? "" : sub)).toLowerCase(); + String reverse = ((sub == null ? "" : sub) + main).toLowerCase(); + + CMIEntityType type = null; + + Integer id = null; + try { + id = Integer.parseInt(main); + } catch (Exception e) { + } + + for (CMIEntityType one : CMIEntityType.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(updated) || one.name.replace(" ", "").equalsIgnoreCase(updated)) { + type = one; + break; + } + } + if (type == null) + for (CMIEntityType one : CMIEntityType.values()) { + if (one.name.replace("_", "").contains(updated)) { + type = one; + break; + } + } + + if (sub != null) { + if (type == null) + for (CMIEntityType one : CMIEntityType.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(reverse) || one.name.replace(" ", "").equalsIgnoreCase(reverse)) { + type = one; + break; + } + } + if (type == null) + for (CMIEntityType one : CMIEntityType.values()) { + if (one.name.replace("_", "").contains(reverse)) { + type = one; + break; + } + } + } + + if (id != null) { + if (type == null) + for (CMIEntityType one : CMIEntityType.values()) { + if (one.getId() == id) { + type = one; + break; + } + } + } + + if (type == null) + for (CMIEntityType one : CMIEntityType.values()) { + if (one.name.contains("_")) + continue; + if (one.name.equalsIgnoreCase(main)) { + type = one; + break; + } + } + + return type; + } + + public EntityType getType() { + if (type != null) + return type; + for (EntityType one : EntityType.values()) { + if (one.toString().equalsIgnoreCase(this.name())) { + type = one; + break; + } + } + return type; + } + + public boolean isAlive() { + return getType().isAlive(); + } + + public boolean isSpawnable() { + return getType().isSpawnable(); + } + + public static String getRealNameByType(EntityType type) { + if (type == null) + return null; + CMIEntityType ctype = CMIEntityType.getByType(type); + if (ctype != null) + return ctype.getName(); + String name = type.name(); + + name = name.toLowerCase().replace("_", " "); + name = name.substring(0, 1).toUpperCase() + name.substring(1); + return name; + } + } + + public enum CMIMaterial { + NONE(-1, -1, -1, "None"), + AIR(0, 0, 9648, "Unknown", "Air"), + STONE(1, 0, 22948, "Stone"), + GRANITE(1, 1, 21091, "Granite"), + POLISHED_GRANITE(1, 2, 5477, "Polished Granite"), + DIORITE(1, 3, 24688, "Diorite"), + POLISHED_DIORITE(1, 4, 31615, "Polished Diorite"), + ANDESITE(1, 5, 25975, "Andesite"), + POLISHED_ANDESITE(1, 6, 8335, "Polished Andesite"), + GRASS_BLOCK(2, 0, 28346, "Grass", "Grass Block"), + DIRT(3, 0, 10580, "Dirt"), + COARSE_DIRT(3, 1, 15411, "Coarse Dirt"), + PODZOL(3, 2, 24068, "Podzol"), + COBBLESTONE(4, 0, 32147, "Cobblestone"), + OAK_PLANKS(5, 0, 14905, "Oak Wood Plank", "Oak Planks"), + SPRUCE_PLANKS(5, 1, 14593, "Spruce Wood Plank", "Spruce Planks"), + BIRCH_PLANKS(5, 2, 29322, "Birch Wood Plank", "Birch Planks"), + JUNGLE_PLANKS(5, 3, 26445, "Jungle Wood Plank", "Jungle Planks"), + ACACIA_PLANKS(5, 4, 31312, "Acacia Wood Plank", "Acacia Planks"), + DARK_OAK_PLANKS(5, 5, 20869, "Dark Oak Wood Plank", "Dark Oak Planks"), + OAK_SAPLING(6, 0, 9636, "Oak Sapling"), + SPRUCE_SAPLING(6, 1, 19874, "Spruce Sapling"), + BIRCH_SAPLING(6, 2, 31533, "Birch Sapling"), + JUNGLE_SAPLING(6, 3, 17951, "Jungle Sapling"), + ACACIA_SAPLING(6, 4, 20806, "Acacia Sapling"), + ACACIA_SLAB(126, 4, 23730, "Acacia Wood Slab", "Acacia Slab"), + DARK_OAK_SLAB(126, 5, 28852, "Dark Oak Wood Slab", "Dark Oak Slab"), + COCOA(127, 0, 29709, "Cocoa"), + SANDSTONE_STAIRS(128, 0, 18474, "Sandstone Stairs"), + EMERALD_ORE(129, 0, 16630, "Emerald Ore"), + ENDER_CHEST(130, 0, 32349, "Ender Chest"), + TRIPWIRE_HOOK(131, 0, 8130, "Tripwire Hook"), + TRIPWIRE(132, 0, 8810, "Tripwire"), + EMERALD_BLOCK(133, 0, 9914, "Emerald Block", "Block of Emerald"), + SPRUCE_STAIRS(134, 0, 11192, "Spruce Wood Stairs", "Spruce Stairs"), + BIRCH_STAIRS(135, 0, 7657, "Birch Wood Stairs", "Birch Stairs"), + JUNGLE_STAIRS(136, 0, 20636, "Jungle Wood Stairs", "Jungle Stairs"), + CHAINMAIL_BOOTS(305, 0, 17953, "Chainmail Boots"), + IRON_HELMET(306, 0, 12025, "Iron Helmet"), + IRON_CHESTPLATE(307, 0, 28112, "Iron Chestplate"), + IRON_LEGGINGS(308, 0, 18951, "Iron Leggings"), + IRON_BOOTS(309, 0, 8531, "Iron Boots"), + DIAMOND_HELMET(310, 0, 10755, "Diamond Helmet"), + DIAMOND_CHESTPLATE(311, 0, 32099, "Diamond Chestplate"), + DIAMOND_LEGGINGS(312, 0, 11202, "Diamond Leggings"), + DIAMOND_BOOTS(313, 0, 16522, "Diamond Boots"), + GOLDEN_HELMET(314, 0, 7945, "Golden Helmet"), + GOLDEN_CHESTPLATE(315, 0, 4507, "Golden Chestplate"), + GOLDEN_LEGGINGS(316, 0, 21002, "Golden Leggings"), + GOLDEN_BOOTS(317, 0, 7859, "Golden Boots"), + FLINT(318, 0, 23596, "Flint"), + PORKCHOP(319, 0, 30896, "Raw Porkchop"), + COOKED_PORKCHOP(320, 0, 27231, "Cooked Porkchop", "grilledpork"), + PAINTING(321, 0, 23945, "Painting"), + GOLDEN_APPLE(322, 0, 27732, "Golden Apple"), + ENCHANTED_GOLDEN_APPLE(322, 1, 8280, "Enchanted Golden Apple"), + SIGN(323, 0, 16918, "Sign"), + OAK_DOOR(324, 0, 20341, "Wooden Door", "wooddoor"), + BUCKET(325, 0, 15215, "Bucket"), + WATER_BUCKET(326, 0, 8802, "Water Bucket"), + LAVA_BUCKET(327, 0, 9228, "Lava Bucket"), + MINECART(328, 0, 14352, "Minecart"), + SADDLE(329, 0, 30206, "Saddle"), + IRON_DOOR(330, 0, 4788, "Iron Door"), + REDSTONE(331, 0, 11233, "Redstone", "Redstone Dust"), + SNOWBALL(332, 0, 19487, "Snowball"), + OAK_BOAT(333, 0, 17570, "Boat", "Oak Boat"), + LEATHER(334, 0, 16414, "Leather"), + MILK_BUCKET(335, 0, 9680, "Milk Bucket"), + BRICK(336, 0, 6820, "Brick", "claybrick"), + CLAY_BALL(337, 0, 24603, "Clay Ball", "Clay"), + SUGAR_CANE(338, 0, 7726, "Sugar Canes", "Sugar Cane"), + PAPER(339, 0, 9923, "Paper"), + BOOK(340, 0, 23097, "Book"), + SLIME_BALL(341, 0, 5242, "Slimeball"), + CHEST_MINECART(342, 0, 4497, "Minecart with Chest", "Storageminecart"), + FURNACE_MINECART(343, 0, 14196, "Minecart with Furnace", "POWERED_MINECART"), + EGG(344, 0, 21603, "Egg"), + COMPASS(345, 0, 24139, "Compass"), + FISHING_ROD(346, 0, 4167, "Fishing Rod"), + CLOCK(347, 0, 14980, "Clock", "watch"), + GLOWSTONE_DUST(348, 0, 6665, "Glowstone Dust"), + RAW_FISH(349, 0, 24691, "Raw Fish", "RAW_FISH"), + SALMON(349, 1, 18516, "Raw Salmon"), + CLOWN_FISH(349, 2, 12795, "Clownfish"), + PUFFERFISH(349, 3, 8115, "Pufferfish"), + COOKED_FISH(350, 0, 9681, "Cooked Fish", "COOKED_FISH"), + COOKED_SALMON(350, 1, 5615, "Cooked Salmon"), + INK_SAC(351, 0, 7184, "Ink Sack", "Ink Sac"), + ROSE_RED(351, 1, 15694, "Rose Red"), + CACTUS_GREEN(351, 2, 17296, "Cactus Green"), + COCOA_BEANS(351, 3, 27381, "Coco Beans", "INK_SACK"), + LAPIS_LAZULI(351, 4, 11075, "Lapis Lazuli"), + PURPLE_DYE(351, 5, 6347, "Purple Dye"), + CYAN_DYE(351, 6, 8043, "Cyan Dye"), + LIGHT_GRAY_DYE(351, 7, 27643, "Light Gray Dye"), + GRAY_DYE(351, 8, 9184, "Gray Dye"), + PINK_DYE(351, 9, 31151, "Pink Dye"), + LIME_DYE(351, 10, 6147, "Lime Dye"), + DANDELION_YELLOW(351, 11, 21789, "Dandelion Yellow"), + LIGHT_BLUE_DYE(351, 12, 28738, "Light Blue Dye"), + MAGENTA_DYE(351, 13, 11788, "Magenta Dye"), + ORANGE_DYE(351, 14, 13866, "Orange Dye"), + BONE_MEAL(351, 15, 32458, "Bone Meal"), + BONE(352, 0, 5686, "Bone"), + SUGAR(353, 0, 30638, "Sugar"), + CAKE(354, 0, 27048, "Cake"), + WHITE_BED(355, 0, 8185, "White Bed", "Bed"), + ORANGE_BED(355, 1, 11194, "Orange Bed", "Orange Bed"), + MAGENTA_BED(355, 2, 20061, "Magenta Bed", "Magenta Bed"), + LIGHT_BLUE_BED(355, 3, 20957, "Light Blue Bed", "Light Blue Bed"), + YELLOW_BED(355, 4, 30410, "Yellow Bed", "Yellow Bed"), + LIME_BED(355, 5, 27860, "Lime Bed", "Lime Bed"), + PINK_BED(355, 6, 13795, "Pink Bed", "Pink Bed"), + GRAY_BED(355, 7, 15745, "Gray Bed", "Gray Bed"), + LIGHT_GRAY_BED(355, 8, 5090, "Light Gray Bed", "Light Gray Bed"), + CYAN_BED(355, 9, 16746, "Cyan Bed", "Cyan Bed"), + PURPLE_BED(355, 10, 29755, "Purple Bed", "Purple Bed"), + BLUE_BED(355, 11, 12714, "Blue Bed", "Blue Bed"), + BROWN_BED(355, 12, 25624, "Brown Bed", "Brown Bed"), + GREEN_BED(355, 13, 13797, "Green Bed", "Green Bed"), + RED_BED(355, 14, 30910, "Red Bed", "Red Bed"), + BLACK_BED(355, 15, 20490, "Black Bed", "Black Bed"), + REPEATER(356, 0, 28823, "Redstone Repeater", "Diode"), + COOKIE(357, 0, 27431, "Cookie"), + FILLED_MAP(358, 0, 23504, "Map"), + SHEARS(359, 0, 27971, "Shears"), + MELON_SLICE(360, 0, 5347, "Melon", "Melon Slice"), + PUMPKIN_SEEDS(361, 0, 28985, "Pumpkin Seeds"), + MELON_SEEDS(362, 0, 18340, "Melon Seeds"), + BEEF(363, 0, 4803, "Raw Beef"), + COOKED_BEEF(364, 0, 21595, "Steak"), + CHICKEN(365, 0, 17281, "Raw Chicken"), + COOKED_CHICKEN(366, 0, 20780, "Cooked Chicken"), + ROTTEN_FLESH(367, 0, 21591, "Rotten Flesh"), + ENDER_PEARL(368, 0, 5259, "Ender Pearl"), + BLAZE_ROD(369, 0, 8289, "Blaze Rod"), + GHAST_TEAR(370, 0, 18222, "Ghast Tear"), + GOLD_NUGGET(371, 0, 28814, "Gold Nugget"), + NETHER_STALK(372, 0, 29227, "Nether Wart", "NETHER_STALK"), + POTION(373, 0, 24020, "Potion"), + GLASS_BOTTLE(374, 0, 6116, "Glass Bottle"), + SPIDER_EYE(375, 0, 9318, "Spider Eye"), + FERMENTED_SPIDER_EYE(376, 0, 19386, "Fermented Spider Eye"), + BLAZE_POWDER(377, 0, 18941, "Blaze Powder"), + MAGMA_CREAM(378, 0, 25097, "Magma Cream"), + BREWING_STAND_ITEM(379, 0, 14539, "Brewing Stand", "BREWING_STAND_ITEM"), + CAULDRON_ITEM(380, 0, 26531, "Cauldron", "CAULDRON_ITEM"), + ENDER_EYE(381, 0, 24860, "Eye of Ender"), + GLISTERING_MELON_SLICE(382, 0, 20158, "Glistering Melon", "speckledmelon"), + ELDER_GUARDIAN_SPAWN_EGG(383, 4, 11418, "Spawn Elder Guardian", "Elder Guardian Spawn Egg"), + WITHER_SKELETON_SPAWN_EGG(383, 5, 10073, "Spawn Wither Skeleton", "Wither Skeleton Spawn Egg"), + STRAY_SPAWN_EGG(383, 6, 30153, "Spawn Stray", "Stray Spawn Egg"), + HUSK_SPAWN_EGG(383, 23, 20178, "Spawn Husk", "Husk Spawn Egg"), + ZOMBIE_VILLAGER_SPAWN_EGG(383, 27, 10311, "Spawn Zombie Villager", "Zombie Villager Spawn Egg"), + SKELETON_HORSE_SPAWN_EGG(383, 28, 21356, "Spawn Skeleton Horse", "Skeleton Horse Spawn Egg"), + ZOMBIE_HORSE_SPAWN_EGG(383, 29, 4275, "Spawn Zombie Horse", "Zombie Horse Spawn Egg"), + ARMOR_STAND_SPAWN_EGG(383, 30, -1, "Spawn Armor Stand", "MONSTER_EGG"), + DONKEY_SPAWN_EGG(383, 31, 14513, "Spawn Donkey", "Donkey Spawn Egg"), + MULE_SPAWN_EGG(383, 32, 11229, "Spawn Mule", "Mule Spawn Egg"), + EVOKER_SPAWN_EGG(383, 34, 19365, "Spawn Evoker", "Evoker Spawn Egg"), + VEX_SPAWN_EGG(383, 35, 27751, "Spawn Vex", "Vex Spawn Egg"), + VINDICATOR_SPAWN_EGG(383, 36, 21672, "Spawn Vindicator", "Vindicator Spawn Egg"), + ILLUSIONER_SPAWN_EGG(383, 37, -1, "Spawn Illusioner", "MONSTER_EGG"), + CREEPER_SPAWN_EGG(383, 50, 9653, "Spawn Creeper", "Creeper Spawn Egg"), + SKELETON_SPAWN_EGG(383, 51, 15261, "Spawn Skeleton", "Skeleton Spawn Egg"), + SPIDER_SPAWN_EGG(383, 52, 14984, "Spawn Spider", "Spider Spawn Egg"), + GIANT_SPAWN_EGG(383, 53, -1, "Spawn Giant", "MONSTER_EGG"), + ZOMBIE_SPAWN_EGG(383, 54, 5814, "Spawn Zombie", "Zombie Spawn Egg"), + SLIME_SPAWN_EGG(383, 55, 6550, "Spawn Slime", "Slime Spawn Egg"), + GHAST_SPAWN_EGG(383, 56, 9970, "Spawn Ghast", "Ghast Spawn Egg"), + ZOMBIE_PIGMAN_SPAWN_EGG(383, 57, 11531, "Spawn Zombie Pigman", "Zombie Pigman Spawn Egg"), + ENDERMAN_SPAWN_EGG(383, 58, 29488, "Spawn Enderman", "Enderman Spawn Egg"), + CAVE_SPIDER_SPAWN_EGG(383, 59, 23341, "Spawn Cave Spider", "Cave Spider Spawn Egg"), + SILVERFISH_SPAWN_EGG(383, 60, 14537, "Spawn Silverfish", "Silverfish Spawn Egg"), + BLAZE_SPAWN_EGG(383, 61, 4759, "Spawn Blaze", "Blaze Spawn Egg"), + MAGMA_CUBE_SPAWN_EGG(383, 62, 26638, "Spawn Magma Cube", "Magma Cube Spawn Egg"), + ENDER_DRAGON_SPAWN_EGG(383, 63, -1, "Spawn Ender Dragon", "MONSTER_EGG"), + WITHER_SPAWN_EGG(383, 64, -1, "Spawn Wither", "MONSTER_EGG"), + BAT_SPAWN_EGG(383, 65, 14607, "Spawn Bat", "Bat Spawn Egg"), + WITCH_SPAWN_EGG(383, 66, 11837, "Spawn Witch", "Witch Spawn Egg"), + ENDERMITE_SPAWN_EGG(383, 67, 16617, "Spawn Endermite", "Endermite Spawn Egg"), + GUARDIAN_SPAWN_EGG(383, 68, 20113, "Spawn Guardian", "Guardian Spawn Egg"), + SHULKER_SPAWN_EGG(383, 69, 31848, "Spawn Shulker", "Shulker Spawn Egg"), + PIG_SPAWN_EGG(383, 90, 22584, "Spawn Pig", "Pig Spawn Egg"), + SHEEP_SPAWN_EGG(383, 91, 24488, "Spawn Sheep", "Sheep Spawn Egg"), + COW_SPAWN_EGG(383, 92, 14761, "Spawn Cow", "Cow Spawn Egg"), + CHICKEN_SPAWN_EGG(383, 93, 5462, "Spawn Chicken", "Chicken Spawn Egg"), + SQUID_SPAWN_EGG(383, 94, 10682, "Spawn Squid", "Squid Spawn Egg"), + WOLF_SPAWN_EGG(383, 95, 21692, "Spawn Wolf", "Wolf Spawn Egg"), + MOOSHROOM_SPAWN_EGG(383, 96, 22125, "Spawn Mushroom Cow", "Mooshroom Spawn Egg"), + SNOWMAN_SPAWN_EGG(383, 97, -1, "Spawn Snowman", "MONSTER_EGG"), + OCELOT_SPAWN_EGG(383, 98, 30080, "Spawn Ocelot", "Ocelot Spawn Egg"), + IRON_GOLEM_SPAWN_EGG(383, 99, -1, "Spawn Iron Golem", "MONSTER_EGG"), + HORSE_SPAWN_EGG(383, 100, 25981, "Spawn Horse", "Horse Spawn Egg"), + RABBIT_SPAWN_EGG(383, 101, 26496, "Spawn Rabbit", "Rabbit Spawn Egg"), + POLAR_BEAR_SPAWN_EGG(383, 102, 17015, "Spawn Polar Bear", "Polar Bear Spawn Egg"), + LLAMA_SPAWN_EGG(383, 103, 23640, "Spawn Llama", "Llama Spawn Egg"), + PARROT_SPAWN_EGG(383, 105, 23614, "Spawn Parrot", "Parrot Spawn Egg"), + VILLAGER_SPAWN_EGG(383, 120, 30348, "Spawn Villager", "Villager Spawn Egg"), + EXPERIENCE_BOTTLE(384, 0, 12858, "Bottle o' Enchanting", "expbottle"), + FIRE_CHARGE(385, 0, 4842, "Fire Charge", "Fireball"), + WRITABLE_BOOK(386, 0, 13393, "Book and Quill"), + WRITTEN_BOOK(387, 0, 24164, "Written Book"), + EMERALD(388, 0, 5654, "Emerald"), + ITEM_FRAME(389, 0, 27318, "Item Frame"), + FLOWER_POT_ITEM(390, 0, 30567, "Flower Pot", "FLOWER_POT_ITEM"), + CARROT(391, 0, 22824, "Carrot", "Carrotitem"), + POTATO(392, 0, 21088, "Potato", "Potatoitem"), + BAKED_POTATO(393, 0, 14624, "Baked Potato"), + POISONOUS_POTATO(394, 0, 32640, "Poisonous Potato"), + EMPTY_MAP(395, 0, 21655, "Empty Map", "EMPTY_MAP"), + GOLDEN_CARROT(396, 0, 5300, "Golden Carrot"), + SKELETON_SKULL(397, 0, 13270, "Mob Head (Skeleton)", "Skeleton Skull"), + WITHER_SKELETON_SKULL(397, 1, 31487, "Mob Head (Wither Skeleton)", "Wither Skeleton Skull"), + ZOMBIE_HEAD(397, 2, 9304, "Mob Head (Zombie)", "Zombie Head"), + PLAYER_HEAD(397, 3, 21174, "Mob Head (Human)", "Player Head"), + CREEPER_HEAD(397, 4, 29146, "Mob Head (Creeper)", "Creeper Head"), + CARROT_ON_A_STICK(398, 0, 27809, "Carrot on a Stick", "carrotstick"), + NETHER_STAR(399, 0, 12469, "Nether Star"), + PUMPKIN_PIE(400, 0, 28725, "Pumpkin Pie"), + FIREWORK_ROCKET(401, 0, 23841, "Firework Rocket"), + FIREWORK_STAR(402, 0, 12190, "Firework Star", "FIREWORK_CHARGE"), + ENCHANTED_BOOK(403, 0, 11741, "Enchanted Book"), + COMPARATOR(404, 0, 18911, "Redstone Comparator"), + NETHER_BRICKS(405, 0, 27802, "Nether Brick", "Nether Bricks"), + QUARTZ(406, 0, 23608, "Nether Quartz"), + TNT_MINECART(407, 0, 4277, "Minecart with TNT", "explosiveminecart"), + HOPPER_MINECART(408, 0, 19024, "Minecart with Hopper"), + PRISMARINE_SHARD(409, 0, 10993, "Prismarine Shard"), + PRISMARINE_CRYSTALS(410, 0, 31546, "Prismarine Crystals"), + RABBIT(411, 0, 23068, "Raw Rabbit"), + COOKED_RABBIT(412, 0, 4454, "Cooked Rabbit"), + RABBIT_STEW(413, 0, 10611, "Rabbit Stew"), + RABBIT_FOOT(414, 0, 13864, "Rabbit's Foot"), + RABBIT_HIDE(415, 0, 12467, "Rabbit Hide"), + ARMOR_STAND(416, 0, 12852, "Armor Stand"), + IRON_HORSE_ARMOR(417, 0, 30108, "Iron Horse Armor", "Iron_barding"), + GOLDEN_HORSE_ARMOR(418, 0, 7996, "Golden Horse Armor", "gold_barding"), + DIAMOND_HORSE_ARMOR(419, 0, 10321, "Diamond Horse Armor", "Diamond_barding"), + LEAD(420, 0, 29539, "Lead", "Leash"), + NAME_TAG(421, 0, 30731, "Name Tag"), + COMMAND_BLOCK_MINECART(422, 0, 7992, "Minecart with Command Block"), + MUTTON(423, 0, 4792, "Raw Mutton"), + COOKED_MUTTON(424, 0, 31447, "Cooked Mutton"), + BLACK_BANNER(425, 0, 9365, "Banner", "Black Banner"), + END_CRYSTAL(426, 0, 19090, "End Crystal"), + SPRUCE_DOOR_ITEM(427, 0, 10642, "Spruce Door", "SPRUCE_DOOR_ITEM"), + BIRCH_DOOR_ITEM(428, 0, 14759, "Birch Door", "BIRCH_DOOR_ITEM"), + JUNGLE_DOOR_ITEM(429, 0, 28163, "Jungle Door", "JUNGLE_DOOR_ITEM"), + ACACIA_DOOR_ITEM(430, 0, 23797, "Acacia Door", "ACACIA_DOOR_ITEM"), + DARK_OAK_DOOR_ITEM(431, 0, 10669, "Dark Oak Door", "DARK_OAK_DOOR_ITEM"), + CHORUS_FRUIT(432, 0, 7652, "Chorus Fruit"), + POPPED_CHORUS_FRUIT(433, 0, 16880, "Popped Chorus Fruit"), + BEETROOT(434, 0, 23305, "Beetroot"), + BEETROOT_SEEDS(435, 0, 21282, "Beetroot Seeds"), + BEETROOT_SOUP(436, 0, 16036, "Beetroot Soup"), + DRAGON_BREATH(437, 0, 20154, "Dragon's Breath"), + SPECTRAL_ARROW(439, 0, 4568, "Spectral Arrow"), + TIPPED_ARROW(440, 0, 25164, "Tipped Arrow"), + LINGERING_POTION(441, 0, 25857, "Lingering Potion"), + SHIELD(442, 0, 29943, "Shield"), + ELYTRA(443, 0, 23829, "Elytra"), + TOTEM_OF_UNDYING(449, 0, 10139, "Totem Of Undying"), + MUSIC_DISC_13(2256, 0, 16359, "13 Disc", "GOLD_RECORD"), + MUSIC_DISC_CAT(2257, 0, 16246, "Cat Disc", "GREEN_RECORD"), + MUSIC_DISC_BLOCKS(2258, 0, 26667, "Blocks Disc", "RECORD_3"), + MUSIC_DISC_CHIRP(2259, 0, 19436, "Chirp Disc", "RECORD_4"), + MUSIC_DISC_FAR(2260, 0, 13823, "Far Disc", "RECORD_5"), + MUSIC_DISC_MALL(2261, 0, 11517, "Mall Disc", "RECORD_6"), + MUSIC_DISC_MELLOHI(2262, 0, 26117, "Mellohi Disc", "RECORD_7"), + MUSIC_DISC_STAL(2263, 0, 14989, "Stal Disc", "RECORD_8"), + MUSIC_DISC_STRAD(2264, 0, 16785, "Strad Disc", "RECORD_9"), + MUSIC_DISC_WARD(2265, 0, 24026, "Ward Disc", "RECORD_10"), + MUSIC_DISC_11(2266, 0, 27426, "11 Disc", "RECORD_11"), + MUSIC_DISC_WAIT(2267, 0, 26499, "Wait Disc", "RECORD_12"), + PISTON_MOVING_PIECE(36, 0, 13831, "Piston Moving Piece"), + CROPS(59, 0, 27709, "Crops"), + BURNING_FURNACE(62, 0, 8133, "Burning Furnace"), + SIGN_POST(63, 0, 16918, "Sign Post"), + WOODEN_DOOR(64, 0, 20341, "Wooden Door"), + GLOWING_REDSTONE_ORE(74, 0, 10887, "Glowing Redstone Ore"), + SUGAR_CANE_BLOCK(83, 0, -1, "Sugar Cane Block"), + DIODE_BLOCK_OFF(93, 0, -1, "Diode Block Off"), + DIODE_BLOCK_ON(94, 0, -1, "Diode Block On"), + REDSTONE_LAMP_ON(124, 0, -1, "Redstone Lamp On"), + WOOD_DOUBLE_STEP(125, 0, -1, "Wood Step Double"), + SKULL(144, 0, -1, "Skull", "SKULL"), + REDSTONE_COMPARATOR_OFF(149, 0, -1, "Redstone Comparator Off"), + REDSTONE_COMPARATOR_ON(150, 0, -1, "Redstone Comparator Off"), + STANDING_BANNER(176, 0, -1, "Standing Banner"), + WALL_BANNER(177, 0, -1, "Wall Banner"), + DAYLIGHT_DETECTOR_INVERTED(178, 0, 8864, "Daylight Detector Inverted"), + DOUBLE_STONE_SLAB2(181, 0, -1, "Double Stone Slab2"), + PURPUR_DOUBLE_SLAB(204, 0, -1, "Purpur Ddouble Slab"), + COMMAND_REPEATING(210, 0, -1, "Repeating Command Block"), + COMMAND_CHAIN(211, 0, -1, "Chain Command Block"), + + // 1.13 + + ACACIA_BOAT(447, 0, 27326, "Acacia Boat", "BOAT_ACACIA"), + ACACIA_BUTTON(-1, -1, 13993, "Acacia Button", ""), + ACACIA_DOOR(196, 0, 23797, "Acacia Door", "ACACIA_DOOR"), + ACACIA_FENCE(192, 0, 4569, "Acacia Fence", "ACACIA_FENCE"), + ACACIA_FENCE_GATE(187, 0, 14145, "Acacia Fence Gate", "ACACIA_FENCE_GATE"), + ACACIA_LEAVES(161, 0, 16606, "Acacia Leaves", "LEAVES_2"), + ACACIA_LOG(162, 0, 8385, "Acacia Log", "LOG_2"), + ACACIA_PRESSURE_PLATE(72, 0, 17586, "Acacia Pressure Plate", ""), + ACACIA_STAIRS(163, 0, 17453, "Acacia Stairs", "ACACIA_STAIRS"), + ACACIA_TRAPDOOR(96, 0, 18343, "Acacia Trapdoor", ""), + ACACIA_WOOD(162, 0, 21861, "Acacia Wood", ""), + ACTIVATOR_RAIL(157, 0, 5834, "Activator Rail", "ACTIVATOR_RAIL"), + ALLIUM(38, 2, 6871, "Allium", "RED_ROSE"), + ANVIL(145, 0, 18718, "Anvil", "ANVIL"), + APPLE(260, 0, 7720, "Apple", "APPLE"), + ARROW(262, 0, 31091, "Arrow", "ARROW"), + ATTACHED_MELON_STEM(-1, -1, 30882, "Attached Melon Stem", ""), + ATTACHED_PUMPKIN_STEM(-1, -1, 12724, "Attached Pumpkin Stem", ""), + AZURE_BLUET(38, 3, 17608, "Azure Bluet", ""), + BARRIER(166, 0, 26453, "Barrier", "BARRIER"), + BEACON(138, 0, 6608, "Beacon", "BEACON"), + BED_BLOCK(26, 0, 23130, "Bed Block"), + BEDROCK(7, 0, 23130, "Bedrock", "BEDROCK"), + BEETROOTS(207, 0, 22075, "Beetroots", "BEETROOT_BLOCK"), + BIRCH_BOAT(445, 0, 28104, "Birch Boat", "BOAT_BIRCH"), + BIRCH_BUTTON(-1, -1, 26934, "Birch Button", ""), + BIRCH_DOOR(194, 0, 14759, "Birch Door", "BIRCH_DOOR"), + BIRCH_FENCE(189, 0, 17347, "Birch Fence", "BIRCH_FENCE"), + BIRCH_FENCE_GATE(184, 0, 6322, "Birch Fence Gate", "BIRCH_FENCE_GATE"), + BIRCH_LEAVES(18, 2, 12601, "Birch Leaves", "LEAVES"), + BIRCH_LOG(17, 2, 26727, "Birch Log", "LOG"), + BIRCH_PRESSURE_PLATE(72, 0, 9664, "Birch Pressure Plate", ""), + BIRCH_SLAB(126, 2, 13807, "Birch Slab", ""), + BIRCH_TRAPDOOR(96, 0, 32585, "Birch Trapdoor", ""), + BIRCH_WOOD(17, 2, 7924, "Birch Wood", ""), + BLACK_CARPET(171, 15, 6056, "Black Carpet", "CARPET"), + BLACK_CONCRETE(251, 15, 13338, "Black Concrete", "CONCRETE"), + BLACK_CONCRETE_POWDER(252, 15, 16150, "Black Concrete Powder", "CONCRETE_POWDER"), + BLACK_GLAZED_TERRACOTTA(250, 0, 29678, "Black Glazed Terracotta", "BLACK_GLAZED_TERRACOTTA"), + BLACK_SHULKER_BOX(234, 0, 24076, "Black Shulker Box", "BLACK_SHULKER_BOX"), + BLACK_STAINED_GLASS(95, 15, 13941, "Black Stained Glass", "STAINED_GLASS"), + BLACK_STAINED_GLASS_PANE(160, 15, 13201, "Black Stained Glass Pane", "STAINED_GLASS_PANE"), + BLACK_TERRACOTTA(159, 15, 26691, "Black Terracotta", "STAINED_CLAY"), + BLACK_WALL_BANNER(425, -1, 4919, "Black Banner", ""), + BLACK_WOOL(35, 15, 16693, "Black Wool", ""), + BLUE_BANNER(245, 4, 18481, "Blue Banner", "PURPLE_GLAZED_TERRACOTTA"), + BLUE_CARPET(171, 11, 13292, "Blue Carpet", ""), + BLUE_CONCRETE(251, 11, 18756, "Blue Concrete", ""), + BLUE_CONCRETE_POWDER(252, 11, 17773, "Blue Concrete Powder", ""), + BLUE_GLAZED_TERRACOTTA(246, 0, 23823, "Blue Glazed Terracotta", "BLUE_GLAZED_TERRACOTTA"), + BLUE_ICE(-1, -1, 22449, "Blue Ice", ""), + BLUE_ORCHID(38, 1, 13432, "Blue Orchid", ""), + BLUE_SHULKER_BOX(230, 0, 11476, "Blue Shulker Box", "BLUE_SHULKER_BOX"), + BLUE_STAINED_GLASS(95, 11, 7107, "Blue Stained Glass", ""), + BLUE_STAINED_GLASS_PANE(160, 11, 28484, "Blue Stained Glass Pane", ""), + BLUE_TERRACOTTA(159, 11, 5236, "Blue Terracotta", ""), + BLUE_WALL_BANNER(425, -1, 17757, "Blue Banner", ""), + BLUE_WOOL(35, 11, 15738, "Blue Wool", ""), + BONE_BLOCK(216, 0, 17312, "Bone Block", "BONE_BLOCK"), + BOOKSHELF(47, 0, 10069, "Bookshelf", "BOOKSHELF"), + BOW(261, 0, 8745, "Bow", "BOW"), + BOWL(281, 0, 32661, "Bowl", "BOWL"), + BRAIN_CORAL(-1, -1, 31316, "Brain Coral", ""), + BRAIN_CORAL_BLOCK(-1, -1, 30618, "Brain Coral Block", ""), + BRAIN_CORAL_FAN(-1, -1, 13849, "Brain Coral Fan", ""), + BREAD(297, 0, 32049, "Bread", "BREAD"), + BREWING_STAND(117, 0, 14539, "Brewing Stand", "BREWING_STAND"), + BRICKS(45, 0, 14165, "Bricks", "BRICK"), + BRICK_SLAB(44, 4, 26333, "Brick Slab", "STEP"), + BRICK_STAIRS(108, 0, 21534, "Brick Stairs", "BRICK_STAIRS"), + BROWN_BANNER(425, 3, 11481, "Brown Banner", ""), + BROWN_CARPET(171, 12, 23352, "Brown Carpet", ""), + BROWN_CONCRETE(251, 12, 19006, "Brown Concrete", ""), + BROWN_CONCRETE_POWDER(252, 12, 21485, "Brown Concrete Powder", ""), + BROWN_GLAZED_TERRACOTTA(247, 0, 5655, "Brown Glazed Terracotta", "BROWN_GLAZED_TERRACOTTA"), + BROWN_MUSHROOM(39, 0, 9665, "Brown Mushroom", "BROWN_MUSHROOM"), + BROWN_MUSHROOM_BLOCK(99, 0, 6291, "Brown Mushroom Block", "HUGE_MUSHROOM_1"), + BROWN_SHULKER_BOX(231, 0, 24230, "Brown Shulker Box", "BROWN_SHULKER_BOX"), + BROWN_STAINED_GLASS(95, 12, 20945, "Brown Stained Glass", ""), + BROWN_STAINED_GLASS_PANE(160, 12, 17557, "Brown Stained Glass Pane", ""), + BROWN_TERRACOTTA(159, 12, 23664, "Brown Terracotta", ""), + BROWN_WALL_BANNER(425, -1, 14731, "Brown Banner", ""), + BROWN_WOOL(35, 12, 32638, "Brown Wool", ""), + BUBBLE_COLUMN(-1, -1, 13758, "Bubble Column", ""), + BUBBLE_CORAL(-1, -1, 12464, "Bubble Coral", ""), + BUBBLE_CORAL_BLOCK(-1, -1, 15437, "Bubble Coral Block", ""), + BUBBLE_CORAL_FAN(-1, -1, 10795, "Bubble Coral Fan", ""), + CACTUS(81, 0, 12191, "Cactus", "CACTUS"), + CAKE_BLOCK(92, 0, 27048, "Cake block", "CAKE_BLOCK"), + CARROTS(141, 0, 17258, "Carrots", "CARROT"), + CARVED_PUMPKIN(-1, -1, 25833, "Carved Pumpkin", ""), + CAULDRON(118, 0, 26531, "Cauldron", "CAULDRON"), + CAVE_AIR(0, 0, 17422, "Air", ""), + CHAINMAIL_CHESTPLATE(303, 0, 23602, "Chainmail Chestplate", "CHAINMAIL_CHESTPLATE"), + CHAINMAIL_HELMET(302, 0, 26114, "Chainmail Helmet", "CHAINMAIL_HELMET"), + CHAINMAIL_LEGGINGS(304, 0, 19087, "Chainmail Leggings", "CHAINMAIL_LEGGINGS"), + CHAIN_COMMAND_BLOCK(-1, -1, 26798, "Chain Command Block", ""), + CHARCOAL(263, 1, 5390, "Charcoal", "COAL"), + CHEST(54, 0, 22969, "Chest", "CHEST"), + CHIPPED_ANVIL(145, 1, 10623, "Chipped Anvil", ""), + CHISELED_QUARTZ_BLOCK(155, 1, 30964, "Chiseled Quartz Block", "QUARTZ_BLOCK"), + CHISELED_RED_SANDSTONE(179, 1, 15529, "Chiseled Red Sandstone", "RED_SANDSTONE"), + CHISELED_SANDSTONE(24, 1, 31763, "Chiseled Sandstone", "SANDSTONE"), + CHISELED_STONE_BRICKS(98, 3, 9087, "Chiseled Stone Bricks", "SMOOTH_BRICK"), + CHORUS_FLOWER(200, 0, 28542, "Chorus Flower", "CHORUS_FLOWER"), + CHORUS_PLANT(199, 0, 28243, "Chorus Plant", "CHORUS_PLANT"), + CLAY(82, 0, 27880, "Clay", "CLAY"), + COAL(263, 0, 29067, "Coal", ""), + COAL_BLOCK(173, 0, 27968, "Block of Coal", "COAL_BLOCK"), + COAL_ORE(16, 0, 30965, "Coal Ore", "COAL_ORE"), + COBBLESTONE_SLAB(44, 3, 6340, "Cobblestone Slab", ""), + COBBLESTONE_STAIRS(67, 0, 24715, "Cobblestone Stairs", "COBBLESTONE_STAIRS"), + COBBLESTONE_WALL(139, 0, 12616, "Cobblestone Wall", "COBBLE_WALL"), + COBWEB(30, 0, 9469, "Cobweb", "WEB"), + COD(-1, -1, 24691, "Raw Cod", "rawfish"), + COD_BUCKET(-1, -1, 28601, "Bucket of Cod", ""), + COD_SPAWN_EGG(-1, -1, 27248, "Cod Spawn Egg", ""), + COMMAND_BLOCK(137, 0, 4355, "Command Block", "COMMAND"), + CONDUIT(-1, -1, 5148, "Conduit", ""), + COOKED_COD(350, 0, 9681, "Cooked Cod", "COOKED_FISH"), + CRACKED_STONE_BRICKS(98, 2, 27869, "Cracked Stone Bricks", ""), + CRAFTING_TABLE(58, 0, 20706, "Crafting Table", "WORKBENCH"), + CREEPER_WALL_HEAD(397, -1, 30123, "Creeper Wall Head", ""), + CUT_RED_SANDSTONE(-1, -1, 26842, "Cut Red Sandstone", ""), + CUT_SANDSTONE(-1, -1, 6118, "Cut Sandstone", ""), + CYAN_BANNER(425, 6, 9839, "Cyan Banner", ""), + CYAN_CARPET(171, 9, 31495, "Cyan Carpet", ""), + CYAN_CONCRETE(251, 9, 26522, "Cyan Concrete", ""), + CYAN_CONCRETE_POWDER(252, 9, 15734, "Cyan Concrete Powder", ""), + CYAN_GLAZED_TERRACOTTA(244, 0, 9550, "Cyan Glazed Terracotta", "CYAN_GLAZED_TERRACOTTA"), + CYAN_SHULKER_BOX(228, 0, 28123, "Cyan Shulker Box", "CYAN_SHULKER_BOX"), + CYAN_STAINED_GLASS(95, 9, 30604, "Cyan Stained Glass", ""), + CYAN_STAINED_GLASS_PANE(160, 9, 11784, "Cyan Stained Glass Pane", ""), + CYAN_TERRACOTTA(159, 9, 25940, "Cyan Terracotta", ""), + CYAN_WALL_BANNER(425, -1, 10889, "Cyan Banner", ""), + CYAN_WOOL(35, 9, 12221, "Cyan Wool", ""), + DAMAGED_ANVIL(145, 2, 10274, "Damaged Anvil", ""), + DANDELION(37, 0, 30558, "Dandelion", "YELLOW_FLOWER"), + DARK_OAK_BOAT(448, 0, 28618, "Dark Oak Boat", "BOAT_DARK_OAK"), + DARK_OAK_BUTTON(-1, -1, 6214, "Dark Oak Button", ""), + DARK_OAK_DOOR(197, 0, 10669, "Dark Oak Door", "DARK_OAK_DOOR"), + DARK_OAK_FENCE(191, 0, 21767, "Dark Oak Fence", "DARK_OAK_FENCE"), + DARK_OAK_FENCE_GATE(186, 0, 10679, "Dark Oak Fence Gate", "DARK_OAK_FENCE_GATE"), + DARK_OAK_LEAVES(161, 1, 22254, "Dark Oak Leaves", ""), + DARK_OAK_LOG(162, 1, 14831, "Dark Oak Log", ""), + DARK_OAK_PRESSURE_PLATE(72, 0, 31375, "Dark Oak Pressure Plate", ""), + DARK_OAK_SAPLING(6, 5, 14933, "Dark Oak Sapling", ""), + DARK_OAK_STAIRS(164, 0, 22921, "Dark Oak Stairs", "DARK_OAK_STAIRS"), + DARK_OAK_TRAPDOOR(96, 0, 10355, "Dark Oak Trapdoor", ""), + DARK_OAK_WOOD(162, 1, 7871, "Dark Oak Wood", ""), + DARK_PRISMARINE(168, 2, 19940, "Dark Prismarine", "PRISMARINE"), + DARK_PRISMARINE_SLAB(-1, -1, 7577, "Dark Prismarine Slab", ""), + DARK_PRISMARINE_STAIRS(-1, -1, 26511, "Dark Prismarine Stairs", ""), + DAYLIGHT_DETECTOR(151, 0, 8864, "Daylight Detector", "DAYLIGHT_DETECTOR"), + DEAD_BRAIN_CORAL_BLOCK(-1, -1, 12979, "Dead Brain Coral Block", ""), + DEAD_BUBBLE_CORAL_BLOCK(-1, -1, 28220, "Dead Bubble Coral Block", ""), + DEAD_BUSH(32, 0, 22888, "Dead Bush", "DEAD_BUSH"), + DEAD_FIRE_CORAL_BLOCK(-1, -1, 5307, "Dead Fire Coral Block", ""), + DEAD_HORN_CORAL_BLOCK(-1, -1, 15103, "Dead Horn Coral Block", ""), + DEAD_TUBE_CORAL_BLOCK(-1, -1, 28350, "Dead Tube Coral Block", ""), + DEBUG_STICK(-1, -1, 24562, "Debug Stick", ""), + DETECTOR_RAIL(28, 0, 13475, "Detector Rail", "DETECTOR_RAIL"), + DIAMOND(264, 0, 20865, "Diamond", "DIAMOND"), + DIAMOND_AXE(279, 0, 27277, "Diamond Axe", "DIAMOND_AXE"), + DIAMOND_BLOCK(57, 0, 5944, "Block of Diamond", "DIAMOND_BLOCK"), + DIAMOND_HOE(293, 0, 24050, "Diamond Hoe", "DIAMOND_HOE"), + DIAMOND_ORE(56, 0, 9292, "Diamond Ore", "DIAMOND_ORE"), + DIAMOND_PICKAXE(278, 0, 24291, "Diamond Pickaxe", "DIAMOND_PICKAXE"), + DIAMOND_SHOVEL(277, 0, 25415, "Diamond Shovel", "DIAMOND_SPADE"), + DIAMOND_SWORD(276, 0, 27707, "Diamond Sword", "DIAMOND_SWORD"), + DISPENSER(23, 0, 20871, "Dispenser", "DISPENSER"), + DOLPHIN_SPAWN_EGG(-1, -1, 20787, "Dolphin Spawn Egg", ""), + DRAGON_EGG(122, 0, 29946, "Dragon Egg", "DRAGON_EGG"), + DRAGON_HEAD(397, 5, 20084, "Dragon Head", ""), + DRAGON_WALL_HEAD(-1, -1, 19818, "Dragon Wall Head", ""), + DRIED_KELP(-1, -1, 21042, "Dried Kelp", ""), + DRIED_KELP_BLOCK(-1, -1, 12966, "Dried Kelp Block", ""), + DROPPER(158, 0, 31273, "Dropper", "DROPPER"), + DROWNED_SPAWN_EGG(-1, -1, 19368, "Drowned Spawn Egg", ""), + DOUBLE_STONE_SLAB(43, 0, 19117, "Double Stone Slab"), + DOUBLE_SANDSTONE_SLAB(43, 1, 19117, "Double Sandstone Slab"), + DOUBLE_WOODEN_SLAB(43, 2, 19117, "Double Wooden Slab"), + DOUBLE_COBBLESTONE_SLAB(43, 3, 19117, "Double Cobblestone Slab"), + DOUBLE_BRICK_SLAB(43, 4, 19117, "Double Brick Slab"), + DOUBLE_STONE_BRICK_SLAB(43, 5, 19117, "Double Stone Brick Slab"), + DOUBLE_NETHER_BRICK_SLAB(43, 6, 19117, "Double Nether Brick Slab"), + DOUBLE_QUARTZ_SLAB(43, 7, 19117, "Double Quartz Slab"), + ENCHANTING_TABLE(116, 0, 16255, "Enchanting Table", "ENCHANTMENT_TABLE"), + END_GATEWAY(209, 0, 26605, "End Gateway", "END_GATEWAY"), + END_PORTAL(119, 0, 16782, "End Portal", "ENDER_PORTAL"), + END_PORTAL_FRAME(120, 0, 15480, "End Portal Frame", "ENDER_PORTAL_FRAME"), + END_ROD(198, 0, 24832, "End Rod", "END_ROD"), + END_STONE(121, 0, 29686, "End Stone", "ENDER_STONE"), + END_STONE_BRICKS(206, 0, 20314, "End Stone Bricks", "END_BRICKS"), + FARMLAND(60, 0, 31166, "Farmland", "SOIL"), + FEATHER(288, 0, 30548, "Feather", "FEATHER"), + FERN(31, 2, 15794, "Fern", "LONG_GRASS"), + FIRE(51, 0, 16396, "Fire", "FIRE"), + FIRE_CORAL(-1, -1, 29151, "Fire Coral", ""), + FIRE_CORAL_BLOCK(-1, -1, 12119, "Fire Coral Block", ""), + FIRE_CORAL_FAN(-1, -1, 11112, "Fire Coral Fan", ""), + FLINT_AND_STEEL(259, 0, 28620, "Flint and Steel", "FLINT_AND_STEEL"), + FLOWER_POT(140, 0, 30567, "Flower Pot", "FLOWER_POT"), + FROSTED_ICE(212, 0, 21814, "Frosted Ice", "FROSTED_ICE"), + FURNACE(61, 0, 8133, "Furnace", "FURNACE"), + GLASS(20, 0, 6195, "Glass", "GLASS"), + GLASS_PANE(102, 0, 5709, "Glass Pane", "THIN_GLASS"), + GLOWSTONE(89, 0, 32713, "Glowstone", "GLOWSTONE"), + GOLDEN_AXE(286, 0, 4878, "Golden Axe", "GOLD_AXE"), + GOLDEN_HOE(294, 0, 19337, "Golden Hoe", "GOLD_HOE"), + GOLDEN_PICKAXE(285, 0, 10901, "Golden Pickaxe", "GOLD_PICKAXE"), + GOLDEN_SHOVEL(284, 0, 15597, "Golden Shovel", "GOLD_SPADE"), + GOLDEN_SWORD(283, 0, 10505, "Golden Sword", "GOLD_SWORD"), + GOLD_BLOCK(41, 0, 27392, "Block of Gold", "GOLD_BLOCK"), + GOLD_INGOT(266, 0, 28927, "Gold Ingot", "GOLD_INGOT"), + GOLD_ORE(14, 0, 32625, "Gold Ore", "GOLD_ORE"), + GRASS(31, 1, 6155, "Grass", ""), + GRASS_PATH(208, 0, 8604, "Grass Path", "GRASS_PATH"), + GRAVEL(13, 0, 7804, "Gravel", "GRAVEL"), + GRAY_BANNER(425, 8, 12053, "Gray Banner", ""), + GRAY_CARPET(171, 7, 26991, "Gray Carpet", ""), + GRAY_CONCRETE(251, 7, 13959, "Gray Concrete", ""), + GRAY_CONCRETE_POWDER(252, 7, 13031, "Gray Concrete Powder", ""), + GRAY_GLAZED_TERRACOTTA(242, 0, 6256, "Gray Glazed Terracotta", "GRAY_GLAZED_TERRACOTTA"), + GRAY_SHULKER_BOX(226, 0, 12754, "Gray Shulker Box", "GRAY_SHULKER_BOX"), + GRAY_STAINED_GLASS(95, 7, 29979, "Gray Stained Glass", ""), + GRAY_STAINED_GLASS_PANE(160, 7, 25272, "Gray Stained Glass Pane", ""), + GRAY_TERRACOTTA(159, 7, 18004, "Gray Terracotta", ""), + GRAY_WALL_BANNER(425, -1, 24275, "Gray Banner", ""), + GRAY_WOOL(35, 7, 27209, "Gray Wool", ""), + GREEN_BANNER(425, 2, 10698, "Green Banner", ""), + GREEN_CARPET(171, 13, 7780, "Green Carpet", ""), + GREEN_CONCRETE(251, 13, 17949, "Green Concrete", ""), + GREEN_CONCRETE_POWDER(252, 13, 6904, "Green Concrete Powder", ""), + GREEN_GLAZED_TERRACOTTA(248, 0, 6958, "Green Glazed Terracotta", "GREEN_GLAZED_TERRACOTTA"), + GREEN_SHULKER_BOX(232, 0, 9377, "Green Shulker Box", "GREEN_SHULKER_BOX"), + GREEN_STAINED_GLASS(95, 13, 22503, "Green Stained Glass", ""), + GREEN_STAINED_GLASS_PANE(160, 13, 4767, "Green Stained Glass Pane", ""), + GREEN_TERRACOTTA(159, 13, 4105, "Green Terracotta", ""), + GREEN_WALL_BANNER(425, -1, 15046, "Green Banner", ""), + GREEN_WOOL(35, 13, 25085, "Green Wool", ""), + GUNPOWDER(289, 0, 29974, "Gunpowder", "SULPHUR"), + HAY_BLOCK(170, 0, 17461, "Hay Bale", "HAY_BLOCK"), + HEART_OF_THE_SEA(-1, -1, 11807, "Heart of the Sea", ""), + HEAVY_WEIGHTED_PRESSURE_PLATE(148, 0, 16970, "Heavy Weighted Pressure Plate", "IRON_PLATE"), + HOPPER(154, 0, 31974, "Hopper", "HOPPER"), + HORN_CORAL(-1, -1, 19511, "Horn Coral", ""), + HORN_CORAL_BLOCK(-1, -1, 19958, "Horn Coral Block", ""), + HORN_CORAL_FAN(-1, -1, 13610, "Horn Coral Fan", ""), + ICE(79, 0, 30428, "Ice", "ICE"), + INFESTED_CHISELED_STONE_BRICKS(97, 5, 4728, "Infested Chiseled Stone Bricks", "MONSTER_EGGS"), + INFESTED_COBBLESTONE(97, 1, 28798, "Infested Cobblestone", ""), + INFESTED_CRACKED_STONE_BRICKS(97, 4, 7476, "Infested Cracked Stone Bricks", ""), + INFESTED_MOSSY_STONE_BRICKS(97, 3, 9850, "Infested Mossy Stone Bricks", ""), + INFESTED_STONE(97, 0, 18440, "Infested Stone", ""), + INFESTED_STONE_BRICKS(97, 2, 19749, "Infested Stone Bricks", ""), + IRON_AXE(258, 0, 15894, "Iron Axe", "IRON_AXE"), + IRON_BARS(101, 0, 9378, "Iron Bars", "IRON_FENCE"), + IRON_BLOCK(42, 0, 24754, "Block of Iron", "IRON_BLOCK"), + IRON_DOOR_BLOCK(71, 0, 4788, "Iron Door Block", "IRON_DOOR_BLOCK"), + IRON_HOE(292, 0, 11339, "Iron Hoe", "IRON_HOE"), + IRON_INGOT(265, 0, 24895, "Iron Ingot", "IRON_INGOT"), + IRON_NUGGET(452, 0, 13715, "Iron Nugget", ""), + IRON_ORE(15, 0, 19834, "Iron Ore", "IRON_ORE"), + IRON_PICKAXE(257, 0, 8842, "Iron Pickaxe", "IRON_PICKAXE"), + IRON_SHOVEL(256, 0, 30045, "Iron Shovel", "IRON_SPADE"), + IRON_SWORD(267, 0, 10904, "Iron Sword", "IRON_SWORD"), + IRON_TRAPDOOR(167, 0, 17095, "Iron Trapdoor", "IRON_TRAPDOOR"), + JACK_O_LANTERN(91, 0, 31612, "Jack o'Lantern", "JACK_O_LANTERN"), + JUKEBOX(84, 0, 19264, "Jukebox", "JUKEBOX"), + JUNGLE_BOAT(446, 0, 4495, "Jungle Boat", "BOAT_JUNGLE"), + JUNGLE_BUTTON(-1, -1, 25317, "Jungle Button", ""), + JUNGLE_DOOR(195, 0, 28163, "Jungle Door", "JUNGLE_DOOR"), + JUNGLE_FENCE(190, 0, 14358, "Jungle Fence", "JUNGLE_FENCE"), + JUNGLE_FENCE_GATE(185, 0, 21360, "Jungle Fence Gate", "JUNGLE_FENCE_GATE"), + JUNGLE_LEAVES(18, 3, 5133, "Jungle Leaves", ""), + JUNGLE_LOG(17, 3, 20721, "Jungle Log", ""), + JUNGLE_PRESSURE_PLATE(-1, -1, 11376, "Jungle Pressure Plate", ""), + JUNGLE_SLAB(126, 3, 19117, "Jungle Slab", ""), + JUNGLE_TRAPDOOR(96, 0, 8626, "Jungle Trapdoor", ""), + JUNGLE_WOOD(17, 3, 30228, "Jungle Wood", ""), + KELP(-1, -1, 21916, "Kelp", ""), + KELP_PLANT(-1, -1, 29697, "Kelp Plant", ""), + KNOWLEDGE_BOOK(453, 0, 12646, "Knowledge Book", ""), + LADDER(65, 0, 23599, "Ladder", "LADDER"), + LAPIS_BLOCK(22, 0, 14485, "Lapis Lazuli Block", "LAPIS_BLOCK"), + LAPIS_ORE(21, 0, 22934, "Lapis Lazuli Ore", "LAPIS_ORE"), + LARGE_FERN(175, 3, 30177, "Large Fern", "DOUBLE_PLANT"), + FLOWING_LAVA(10, 0, 8415, "Flowing Lava", "FLOWING_LAVA"), + LAVA(11, 0, 8415, "Lava", "STATIONARY_LAVA"), + LEATHER_BOOTS(301, 0, 15282, "Leather Boots", "LEATHER_BOOTS"), + LEATHER_CHESTPLATE(299, 0, 29275, "Leather Tunic", "LEATHER_CHESTPLATE"), + LEATHER_HELMET(298, 0, 11624, "Leather Cap", "LEATHER_HELMET"), + LEATHER_LEGGINGS(300, 0, 28210, "Leather Pants", "LEATHER_LEGGINGS"), + LEVER(69, 0, 15319, "Lever", "LEVER"), + LIGHT_BLUE_BANNER(425, 12, 18060, "Light Blue Banner", ""), + LIGHT_BLUE_CARPET(171, 3, 21194, "Light Blue Carpet", ""), + LIGHT_BLUE_CONCRETE(251, 3, 29481, "Light Blue Concrete", ""), + LIGHT_BLUE_CONCRETE_POWDER(252, 3, 31206, "Light Blue Concrete Powder", ""), + LIGHT_BLUE_GLAZED_TERRACOTTA(238, 0, 4336, "Light Blue Glazed Terracotta", "LIGHT_BLUE_GLAZED_TERRACOTTA"), + LIGHT_BLUE_SHULKER_BOX(222, 0, 18226, "Light Blue Shulker Box", "LIGHT_BLUE_SHULKER_BOX"), + LIGHT_BLUE_STAINED_GLASS(95, 3, 17162, "Light Blue Stained Glass", ""), + LIGHT_BLUE_STAINED_GLASS_PANE(160, 3, 18721, "Light Blue Stained Glass Pane", ""), + LIGHT_BLUE_TERRACOTTA(159, 3, 31779, "Light Blue Terracotta", ""), + LIGHT_BLUE_WALL_BANNER(425, -1, 12011, "Light Blue Banner", ""), + LIGHT_BLUE_WOOL(35, 3, 21073, "Light Blue Wool", ""), + LIGHT_GRAY_BANNER(425, -1, 11417, "Light Gray Banner", ""), + LIGHT_GRAY_CARPET(171, 8, 11317, "Light Gray Carpet", ""), + LIGHT_GRAY_CONCRETE(251, 8, 14453, "Light Gray Concrete", ""), + LIGHT_GRAY_CONCRETE_POWDER(252, 8, 21589, "Light Gray Concrete Powder", ""), + LIGHT_GRAY_GLAZED_TERRACOTTA(243, 0, 10707, "Light Gray Glazed Terracotta", "SILVER_GLAZED_TERRACOTTA"), + LIGHT_GRAY_SHULKER_BOX(227, 0, 21345, "Light Gray Shulker Box", "SILVER_SHULKER_BOX"), + LIGHT_GRAY_STAINED_GLASS(95, 8, 5843, "Light Gray Stained Glass", ""), + LIGHT_GRAY_STAINED_GLASS_PANE(160, 8, 19008, "Light Gray Stained Glass Pane", ""), + LIGHT_GRAY_TERRACOTTA(159, 8, 26388, "Light Gray Terracotta", ""), + LIGHT_GRAY_WALL_BANNER(425, -1, 31088, "Light Gray Banner", ""), + LIGHT_GRAY_WOOL(35, 8, 22936, "Light Gray Wool", ""), + LIGHT_WEIGHTED_PRESSURE_PLATE(147, 0, 14875, "Light Weighted Pressure Plate", "GOLD_PLATE"), + LILAC(175, 1, 22837, "Lilac", ""), + LILY_PAD(111, 0, 19271, "Lily Pad", "WATER_LILY"), + LIME_BANNER(425, 10, 18887, "Lime Banner", ""), + LIME_CARPET(171, 5, 15443, "Lime Carpet", ""), + LIME_CONCRETE(251, 5, 5863, "Lime Concrete", ""), + LIME_CONCRETE_POWDER(252, 5, 28859, "Lime Concrete Powder", ""), + LIME_GLAZED_TERRACOTTA(240, 0, 13861, "Lime Glazed Terracotta", "LIME_GLAZED_TERRACOTTA"), + LIME_SHULKER_BOX(224, 0, 28360, "Lime Shulker Box", "LIME_SHULKER_BOX"), + LIME_STAINED_GLASS(95, 5, 24266, "Lime Stained Glass", ""), + LIME_STAINED_GLASS_PANE(160, 5, 10610, "Lime Stained Glass Pane", ""), + LIME_TERRACOTTA(159, 5, 24013, "Lime Terracotta", ""), + LIME_WALL_BANNER(425, -1, 21422, "Lime Banner", ""), + LIME_WOOL(35, 5, 10443, "Lime Wool", ""), + MAGENTA_BANNER(425, 13, 15591, "Magenta Banner", ""), + MAGENTA_CARPET(171, 2, 6180, "Magenta Carpet", ""), + MAGENTA_CONCRETE(251, 2, 20591, "Magenta Concrete", ""), + MAGENTA_CONCRETE_POWDER(252, 2, 8272, "Magenta Concrete Powder", ""), + MAGENTA_GLAZED_TERRACOTTA(237, 0, 8067, "Magenta Glazed Terracotta", "MAGENTA_GLAZED_TERRACOTTA"), + MAGENTA_SHULKER_BOX(221, 0, 21566, "Magenta Shulker Box", "MAGENTA_SHULKER_BOX"), + MAGENTA_STAINED_GLASS(95, 2, 26814, "Magenta Stained Glass", ""), + MAGENTA_STAINED_GLASS_PANE(160, 2, 14082, "Magenta Stained Glass Pane", ""), + MAGENTA_TERRACOTTA(159, 2, 25900, "Magenta Terracotta", ""), + MAGENTA_WALL_BANNER(425, -1, 23291, "Magenta Banner", ""), + MAGENTA_WOOL(35, 2, 11853, "Magenta Wool", ""), + MAGMA_BLOCK(213, 0, 25927, "Magma Block", "MAGMA"), + MAP(358, 0, 21655, "Empty Map"), + MELON(103, 0, 25172, "Melon", "Melon_Block"), + MELON_STEM(105, 0, 8247, "Melon Stem", "MELON_STEM"), + MOSSY_COBBLESTONE(48, 0, 21900, "Mossy Cobblestone", "MOSSY_COBBLESTONE"), + MOSSY_COBBLESTONE_WALL(139, 1, 11536, "Mossy Cobblestone Wall", ""), + MOSSY_STONE_BRICKS(98, 1, 16415, "Mossy Stone Bricks", ""), + MOVING_PISTON(-1, -1, 13831, "Moving Piston", ""), + MUSHROOM_STEM(-1, -1, 16543, "Mushroom Stem", ""), + MUSHROOM_STEW(282, 0, 16336, "Mushroom Stew", "MUSHROOM_SOUP"), + MYCELIUM(110, 0, 9913, "Mycelium", "MYCEL"), + NAUTILUS_SHELL(-1, -1, 19989, "Nautilus Shell", ""), + NETHERRACK(87, 0, 23425, "Netherrack", "NETHERRACK"), + NETHER_BRICK(112, 0, 19996, "Nether Brick", "NETHER_BRICK"), + NETHER_BRICK_FENCE(113, 0, 5286, "Nether Brick Fence", "NETHER_FENCE"), + NETHER_BRICK_SLAB(44, 6, 26586, "Nether Brick Slab", ""), + NETHER_BRICK_STAIRS(114, 0, 12085, "Nether Brick Stairs", "NETHER_BRICK_STAIRS"), + NETHER_PORTAL(90, 0, 19085, "Nether Portal", "PORTAL"), + NETHER_QUARTZ_ORE(153, 0, 4807, "Nether Quartz Ore", "QUARTZ_ORE"), + NETHER_WART(115, 0, 29227, "Nether Wart", "NETHER_WARTS"), + NETHER_WART_BLOCK(214, 0, 15486, "Nether Wart Block", "NETHER_WART_BLOCK"), + NOTE_BLOCK(25, 0, 20979, "Note Block", "NOTE_BLOCK"), + OAK_BUTTON(143, 0, 13510, "Oak Button", "Wooden_button"), + OAK_FENCE(85, 0, 6442, "Oak Fence", "FENCE"), + OAK_FENCE_GATE(107, 0, 16689, "Oak Fence Gate", "FENCE_GATE"), + OAK_LEAVES(18, 0, 4385, "Oak Leaves", ""), + OAK_LOG(17, 0, 26723, "Oak Log", ""), + OAK_PRESSURE_PLATE(72, 0, 20108, "Oak Pressure Plate", "Wooden_Presure_Plate"), + OAK_SLAB(126, 0, 12002, "Oak Slab", "Wood step"), + OAK_STAIRS(53, 0, 5449, "Oak Stairs", "WOOD_STAIRS"), + OAK_TRAPDOOR(96, 0, 16927, "Oak Trapdoor", "Trapdoor"), + OAK_WOOD(17, 0, 23286, "Oak Wood", ""), + OBSERVER(218, 0, 10726, "Observer", "OBSERVER"), + OBSIDIAN(49, 0, 32723, "Obsidian", "OBSIDIAN"), + ORANGE_BANNER(425, 14, 4839, "Orange Banner", ""), + ORANGE_CARPET(171, 1, 24752, "Orange Carpet", ""), + ORANGE_CONCRETE(251, 1, 19914, "Orange Concrete", ""), + ORANGE_CONCRETE_POWDER(252, 1, 30159, "Orange Concrete Powder", ""), + ORANGE_GLAZED_TERRACOTTA(236, 0, 27451, "Orange Glazed Terracotta", "ORANGE_GLAZED_TERRACOTTA"), + ORANGE_SHULKER_BOX(220, 0, 21673, "Orange Shulker Box", "ORANGE_SHULKER_BOX"), + ORANGE_STAINED_GLASS(95, 1, 25142, "Orange Stained Glass", ""), + ORANGE_STAINED_GLASS_PANE(160, 1, 21089, "Orange Stained Glass Pane", ""), + ORANGE_TERRACOTTA(159, 1, 18684, "Orange Terracotta", ""), + ORANGE_TULIP(38, 5, 26038, "Orange Tulip", ""), + ORANGE_WALL_BANNER(425, -1, 9936, "Orange Banner", ""), + ORANGE_WOOL(35, 1, 23957, "Orange Wool", ""), + OXEYE_DAISY(38, 8, 11709, "Oxeye Daisy", ""), + PACKED_ICE(174, 0, 28993, "Packed Ice", "PACKED_ICE"), + PEONY(175, 5, 21155, "Peony", ""), + PETRIFIED_OAK_SLAB(-1, -1, 18658, "Petrified Oak Slab", ""), + PHANTOM_MEMBRANE(-1, -1, 18398, "Phantom Membrane", ""), + PHANTOM_SPAWN_EGG(-1, -1, 24648, "Phantom Spawn Egg", ""), + PINK_BANNER(425, 9, 19439, "Pink Banner", ""), + PINK_CARPET(171, 6, 30186, "Pink Carpet", ""), + PINK_CONCRETE(251, 6, 5227, "Pink Concrete", ""), + PINK_CONCRETE_POWDER(252, 6, 6421, "Pink Concrete Powder", ""), + PINK_GLAZED_TERRACOTTA(241, 0, 10260, "Pink Glazed Terracotta", "PINK_GLAZED_TERRACOTTA"), + PINK_SHULKER_BOX(225, 0, 24968, "Pink Shulker Box", "PINK_SHULKER_BOX"), + PINK_STAINED_GLASS(95, 6, 16164, "Pink Stained Glass", ""), + PINK_STAINED_GLASS_PANE(160, 6, 24637, "Pink Stained Glass Pane", ""), + PINK_TERRACOTTA(159, 6, 23727, "Pink Terracotta", ""), + PINK_TULIP(38, 7, 27319, "Pink Tulip", ""), + PINK_WALL_BANNER(425, -1, 9421, "Pink Banner", ""), + PINK_WOOL(35, 6, 7611, "Pink Wool", ""), + PISTON(33, 0, 21130, "Piston", "PISTON_BASE"), + PISTON_HEAD(34, 0, 30226, "Piston Head", "PISTON_EXTENSION"), + PLAYER_WALL_HEAD(-1, -1, 13164, "Player Wall Head", ""), + POPPY(38, 0, 12851, "Poppy", ""), + POTATOES(142, 0, 10879, "Potatoes", "POTATO"), + POTTED_ACACIA_SAPLING(-1, -1, 14096, "Potted Acacia Sapling", ""), + POTTED_ALLIUM(-1, -1, 13184, "Potted Allium", ""), + POTTED_AZURE_BLUET(-1, -1, 8754, "Potted Azure Bluet", ""), + POTTED_BIRCH_SAPLING(-1, -1, 32484, "Potted Birch Sapling", ""), + POTTED_BLUE_ORCHID(-1, -1, 6599, "Potted Blue Orchid", ""), + POTTED_BROWN_MUSHROOM(-1, -1, 14481, "Potted Brown Mushroom", ""), + POTTED_CACTUS(-1, -1, 8777, "Potted Cactus", ""), + POTTED_DANDELION(-1, -1, 9727, "Potted Dandelion", ""), + POTTED_DARK_OAK_SAPLING(-1, -1, 6486, "Potted Dark Oak Sapling", ""), + POTTED_DEAD_BUSH(-1, -1, 13020, "Potted Dead Bush", ""), + POTTED_FERN(-1, -1, 23315, "Potted Fern", ""), + POTTED_JUNGLE_SAPLING(-1, -1, 7525, "Potted Jungle Sapling", ""), + POTTED_OAK_SAPLING(-1, -1, 11905, "Potted Oak Sapling", ""), + POTTED_ORANGE_TULIP(-1, -1, 28807, "Potted Orange Tulip", ""), + POTTED_OXEYE_DAISY(-1, -1, 19707, "Potted Oxeye Daisy", ""), + POTTED_PINK_TULIP(-1, -1, 10089, "Potted Pink Tulip", ""), + POTTED_POPPY(-1, -1, 7457, "Potted Poppy", ""), + POTTED_RED_MUSHROOM(-1, -1, 22881, "Potted Red Mushroom", ""), + POTTED_RED_TULIP(-1, -1, 28594, "Potted Red Tulip", ""), + POTTED_SPRUCE_SAPLING(-1, -1, 29498, "Potted Spruce Sapling", ""), + POTTED_WHITE_TULIP(-1, -1, 24330, "Potted White Tulip", ""), + POWERED_RAIL(27, 0, 11064, "Powered Rail", "POWERED_RAIL"), + PRISMARINE(168, 0, 7539, "Prismarine", ""), + PRISMARINE_BRICKS(168, 1, 29118, "Prismarine Bricks", ""), + PRISMARINE_BRICK_SLAB(-1, -1, 26672, "Prismarine Brick Slab", ""), + PRISMARINE_BRICK_STAIRS(-1, -1, 15445, "Prismarine Brick Stairs", ""), + PRISMARINE_SLAB(-1, -1, 31323, "Prismarine Slab", ""), + PRISMARINE_STAIRS(-1, -1, 19217, "Prismarine Stairs", ""), + PUFFERFISH_BUCKET(-1, -1, 8861, "Bucket of Pufferfish", ""), + PUFFERFISH_SPAWN_EGG(-1, -1, 24573, "Pufferfish Spawn Egg", ""), + PUMPKIN(86, 0, 19170, "Pumpkin", "PUMPKIN"), + PUMPKIN_STEM(104, 0, 19021, "Pumpkin Stem", "PUMPKIN_STEM"), + PURPLE_BANNER(425, 5, 29027, "Purple Banner", ""), + PURPLE_CARPET(171, 10, 5574, "Purple Carpet", ""), + PURPLE_CONCRETE(251, 10, 20623, "Purple Concrete", ""), + PURPLE_CONCRETE_POWDER(252, 10, 26808, "Purple Concrete Powder", ""), + PURPLE_GLAZED_TERRACOTTA(245, 0, 4818, "Purple Glazed Terracotta", ""), + PURPLE_SHULKER_BOX(229, 0, 10373, "Purple Shulker Box", "PURPLE_SHULKER_BOX"), + PURPLE_STAINED_GLASS(95, 10, 21845, "Purple Stained Glass", ""), + PURPLE_STAINED_GLASS_PANE(160, 10, 10948, "Purple Stained Glass Pane", ""), + PURPLE_TERRACOTTA(159, 10, 10387, "Purple Terracotta", ""), + PURPLE_WALL_BANNER(425, -1, 14298, "Purple Banner", ""), + PURPLE_WOOL(35, 10, 11922, "Purple Wool", ""), + PURPUR_BLOCK(201, 0, 7538, "Purpur Block", "PURPUR_BLOCK"), + PURPUR_PILLAR(202, 0, 26718, "Purpur Pillar", "PURPUR_PILLAR"), + PURPUR_SLAB(205, 0, 11487, "Purpur Slab", "PURPUR_SLAB"), + PURPUR_STAIRS(203, 0, 8921, "Purpur Stairs", "PURPUR_STAIRS"), + QUARTZ_BLOCK(155, 0, 11987, "Block of Quartz", ""), + QUARTZ_PILLAR(155, 2, 16452, "Quartz Pillar", ""), + QUARTZ_SLAB(44, 7, 4423, "Quartz Slab", ""), + QUARTZ_STAIRS(156, 0, 24079, "Quartz Stairs", "QUARTZ_STAIRS"), + RAIL(66, 0, 13285, "Rail", "RAILS"), + REDSTONE_BLOCK(152, 0, 19496, "Block of Redstone", "REDSTONE_BLOCK"), + REDSTONE_LAMP(123, 0, 8217, "Redstone Lamp", "REDSTONE_LAMP_OFF"), + REDSTONE_ORE(73, 0, 10887, "Redstone Ore", "REDSTONE_ORE"), + REDSTONE_TORCH(76, 0, 22547, "Redstone Torch(on)", "REDSTONE_TORCH_ON"), + UNLIT_REDSTONE_TORCH(75, 0, 22547, "Redstone Torch(off)", "REDSTONE_TORCH_ON"), + REDSTONE_WALL_TORCH(76, -1, 7595, "Redstone Wall Torch", ""), + REDSTONE_WIRE(55, 0, 25984, "Redstone Dust", "REDSTONE_WIRE"), + RED_BANNER(425, 1, 26961, "Red Banner", ""), + RED_CARPET(171, 14, 5424, "Red Carpet", ""), + RED_CONCRETE(251, 14, 8032, "Red Concrete", ""), + RED_CONCRETE_POWDER(252, 14, 13286, "Red Concrete Powder", ""), + RED_GLAZED_TERRACOTTA(249, 0, 24989, "Red Glazed Terracotta", "RED_GLAZED_TERRACOTTA"), + RED_MUSHROOM(40, 0, 19728, "Red Mushroom", "RED_MUSHROOM"), + RED_MUSHROOM_BLOCK(100, 0, 20766, "Red Mushroom Block", "HUGE_MUSHROOM_2"), + RED_NETHER_BRICKS(215, 0, 18056, "Red Nether Bricks", "RED_NETHER_BRICK"), + RED_SAND(12, 1, 16279, "Red Sand", "SAND"), + RED_SANDSTONE(179, 0, 9092, "Red Sandstone", ""), + RED_SANDSTONE_SLAB(182, 0, 17550, "Red Sandstone Slab", "STONE_SLAB2"), + RED_SANDSTONE_STAIRS(180, 0, 25466, "Red Sandstone Stairs", "RED_SANDSTONE_STAIRS"), + RED_SHULKER_BOX(233, 0, 32448, "Red Shulker Box", "RED_SHULKER_BOX"), + RED_STAINED_GLASS(95, 14, 9717, "Red Stained Glass", ""), + RED_STAINED_GLASS_PANE(160, 14, 8630, "Red Stained Glass Pane", ""), + RED_TERRACOTTA(159, 14, 5086, "Red Terracotta", ""), + RED_TULIP(38, 4, 16781, "Red Tulip", ""), + RED_WALL_BANNER(425, -1, 4378, "Red Banner", ""), + RED_WOOL(35, 14, 11621, "Red Wool", ""), + REPEATING_COMMAND_BLOCK(-1, -1, 12405, "Repeating Command Block", ""), + ROSE_BUSH(175, 4, 6080, "Rose Bush", ""), + SALMON_BUCKET(-1, -1, 31427, "Bucket of Salmon", ""), + SALMON_SPAWN_EGG(-1, -1, 18739, "Salmon Spawn Egg", ""), + SAND(12, 0, 11542, "Sand", ""), + SANDSTONE(24, 0, 13141, "Sandstone", ""), + SANDSTONE_SLAB(44, 1, 29830, "Sandstone Slab", ""), + SCUTE(-1, -1, 11914, "Scute", ""), + SEAGRASS(-1, -1, 23942, "Seagrass", ""), + SEA_LANTERN(169, 0, 16984, "Sea Lantern", "SEA_LANTERN"), + SEA_PICKLE(-1, -1, 19562, "Sea Pickle", ""), + SHULKER_BOX(229, 0, 7776, "Shulker Box", ""), + SHULKER_SHELL(450, 0, 27848, "Shulker Shell", "SHULKER_SHELL"), + SKELETON_WALL_SKULL(397, -1, 31650, "Skeleton Wall Skull", ""), + SLIME_BLOCK(165, 0, 31892, "Slime Block", "SLIME_BLOCK"), + SMOOTH_QUARTZ(-1, -1, 14415, "Smooth Quartz", ""), + SMOOTH_RED_SANDSTONE(179, 2, 25180, "Smooth Red Sandstone", ""), + SMOOTH_SANDSTONE(24, 2, 30039, "Smooth Sandstone", ""), + SMOOTH_STONE(-1, -1, 21910, "Smooth Stone", ""), + SNOW(78, 0, 14146, "Snow", "SNOW"), + SNOW_BLOCK(80, 0, 19913, "Snow Block", "SNOW_BLOCK"), + SOUL_SAND(88, 0, 16841, "Soul Sand", "SOUL_SAND"), + SPAWNER(52, 90, 25500, "Spawner", "MOB_SPAWNER"), + SPLASH_POTION(438, 0, 30248, "Splash Potion", "SPLASH_POTION"), + SPONGE(19, 0, 15860, "Sponge", "SPONGE"), + SPRUCE_BOAT(444, 0, 9606, "Spruce Boat", "BOAT_SPRUCE"), + SPRUCE_BUTTON(-1, -1, 23281, "Spruce Button", ""), + SPRUCE_DOOR(193, 0, 10642, "Spruce Door", "SPRUCE_DOOR"), + SPRUCE_FENCE(188, 0, 25416, "Spruce Fence", "SPRUCE_FENCE"), + SPRUCE_FENCE_GATE(183, 0, 26423, "Spruce Fence Gate", "SPRUCE_FENCE_GATE"), + SPRUCE_LEAVES(18, 1, 20039, "Spruce Leaves", ""), + SPRUCE_LOG(17, 1, 9726, "Spruce Log", ""), + SPRUCE_PRESSURE_PLATE(72, 0, 15932, "Spruce Pressure Plate", ""), + SPRUCE_SLAB(126, 1, 4348, "Spruce Slab", ""), + SPRUCE_TRAPDOOR(96, 0, 10289, "Spruce Trapdoor", ""), + SPRUCE_WOOD(17, 1, 22538, "Spruce Wood", ""), + STICK(280, 0, 9773, "Stick", "STICK"), + STICKY_PISTON(29, 0, 18127, "Sticky Piston", "PISTON_STICKY_BASE"), + STONE_AXE(275, 0, 6338, "Stone Axe", "STONE_AXE"), + STONE_BRICKS(98, 0, 6962, "Stone Bricks", ""), + STONE_BRICK_SLAB(44, 5, 19676, "Stone Brick Slab", ""), + STONE_BRICK_STAIRS(109, 0, 27032, "Stone Brick Stairs", "SMOOTH_STAIRS"), + STONE_BUTTON(77, 0, 12279, "Stone Button", "STONE_BUTTON"), + STONE_HOE(291, 0, 22855, "Stone Hoe", "STONE_HOE"), + STONE_PICKAXE(274, 0, 14611, "Stone Pickaxe", "STONE_PICKAXE"), + STONE_PRESSURE_PLATE(70, 0, 22591, "Stone Pressure Plate", "STONE_PLATE"), + STONE_SHOVEL(273, 0, 9520, "Stone Shovel", "STONE_SPADE"), + STONE_SLAB(44, 0, 19838, "Stone Slab", ""), + STONE_SWORD(272, 0, 25084, "Stone Sword", "STONE_SWORD"), + STRING(287, 0, 12806, "String", "STRING"), + STRIPPED_ACACIA_LOG(17, 4, 18167, "Acacia Log", "Oak Log"), + STRIPPED_ACACIA_WOOD(5, 4, 17579, "Acacia Wood", "Oak Planks"), + STRIPPED_BIRCH_LOG(17, 2, 8838, "Birch Log", "Spruce Log"), + STRIPPED_BIRCH_WOOD(5, 2, 30740, "Birch Wood", "Spruce Planks"), + STRIPPED_DARK_OAK_LOG(17, 5, 6492, "Dark Oak Log", "Birch Log"), + STRIPPED_DARK_OAK_WOOD(5, 5, 6606, "Dark Oak Wood", "Birch Planks"), + STRIPPED_JUNGLE_LOG(17, 3, 15476, "Jungle Log", "Jungle Log"), + STRIPPED_JUNGLE_WOOD(5, 3, 5072, "Jungle Wood", "Jungle Planks"), + STRIPPED_OAK_LOG(17, 0, 20523, "Oak Log", "Acacia Log"), + STRIPPED_OAK_WOOD(5, 0, 4514, "Oak Wood", "Acacia Planks"), + STRIPPED_SPRUCE_LOG(17, 1, 6140, "Spruce Log", "Dark Oak Log"), + STRIPPED_SPRUCE_WOOD(5, 1, 15634, "Spruce Wood", "Dark Oak Planks"), + STRUCTURE_BLOCK(255, 0, 26831, "Structure Block", "STRUCTURE_BLOCK"), + STRUCTURE_VOID(217, 0, 30806, "Structure Void", "STRUCTURE_VOID"), + SUNFLOWER(175, 0, 7408, "Sunflower", ""), + TALL_GRASS(31, 0, 21559, "Tall Grass", ""), + TALL_SEAGRASS(-1, -1, 27189, "Tall Seagrass", ""), + TERRACOTTA(172, 0, 16544, "Terracotta", "HARD_CLAY"), + TNT(46, 0, 7896, "TNT", "TNT"), + TORCH(50, 0, 6063, "Torch", "TORCH"), + TRAPPED_CHEST(146, 0, 18970, "Trapped Chest", "TRAPPED_CHEST"), + TRIDENT(-1, -1, 7534, "Trident", ""), + TROPICAL_FISH(-1, -1, 12795, "Tropical Fish", ""), + TROPICAL_FISH_BUCKET(-1, -1, 30390, "Bucket of Tropical Fish", ""), + TROPICAL_FISH_SPAWN_EGG(-1, -1, 19713, "Tropical Fish Spawn Egg", ""), + TUBE_CORAL(-1, -1, 23048, "Tube Coral", ""), + TUBE_CORAL_BLOCK(-1, -1, 23723, "Tube Coral Block", ""), + TUBE_CORAL_FAN(-1, -1, 19929, "Tube Coral Fan", ""), + TURTLE_EGG(-1, -1, 32101, "Turtle Egg", ""), + TURTLE_HELMET(-1, -1, 30120, "Turtle Shell", ""), + TURTLE_SPAWN_EGG(-1, -1, 17324, "Turtle Spawn Egg", ""), + VINE(106, 0, 14564, "Vines", "VINE"), + VOID_AIR(0, 0, 13668, "Air", ""), + WALL_SIGN(68, 0, 10644, "Wall Sign", "WALL_SIGN"), + WALL_TORCH(50, -1, 25890, "Wall Torch", ""), + FLOWING_WATER(8, 0, 24998, "Flowing Water", "FLOWING_WATER"), + WATER(9, 0, 24998, "Water", "STATIONARY_WATER"), + WET_SPONGE(19, 1, 9043, "Wet Sponge", ""), + WHEAT(296, 0, 27709, "Wheat", "CROPS"), + WHEAT_SEEDS(295, 0, 28742, "Wheat Seeds", "SEEDS"), + WHITE_BANNER(425, 15, 17562, "White Banner", ""), + WHITE_CARPET(171, 0, 15117, "White Carpet", ""), + WHITE_CONCRETE(251, 0, 6281, "White Concrete", ""), + WHITE_CONCRETE_POWDER(252, 0, 10363, "White Concrete Powder", ""), + WHITE_GLAZED_TERRACOTTA(235, 0, 11326, "White Glazed Terracotta", "WHITE_GLAZED_TERRACOTTA"), + WHITE_SHULKER_BOX(219, 0, 31750, "White Shulker Box", "WHITE_SHULKER_BOX"), + WHITE_STAINED_GLASS(95, 0, 31190, "White Stained Glass", ""), + WHITE_STAINED_GLASS_PANE(160, 0, 10557, "White Stained Glass Pane", ""), + WHITE_TERRACOTTA(159, 0, 20975, "White Terracotta", ""), + WHITE_TULIP(38, 6, 9742, "White Tulip", ""), + WHITE_WALL_BANNER(425, 15, 15967, "White Banner", ""), + WHITE_WOOL(35, 0, 8624, "White Wool", "Wool"), + WITHER_SKELETON_WALL_SKULL(397, 1, 9326, "Wither Skeleton Wall Skull", ""), + WOODEN_AXE(271, 0, 6292, "Wooden Axe", "WOOD_AXE"), + WOODEN_HOE(290, 0, 16043, "Wooden Hoe", "WOOD_HOE"), + WOODEN_PICKAXE(270, 0, 12792, "Wooden Pickaxe", "WOOD_PICKAXE"), + WOODEN_SHOVEL(269, 0, 28432, "Wooden Shovel", "WOOD_SPADE"), + WOODEN_SWORD(268, 0, 7175, "Wooden Sword", "WOOD_SWORD"), + YELLOW_BANNER(425, 11, 30382, "Yellow Banner", ""), + YELLOW_CARPET(171, 4, 18149, "Yellow Carpet", ""), + YELLOW_CONCRETE(251, 4, 15722, "Yellow Concrete", ""), + YELLOW_CONCRETE_POWDER(252, 4, 10655, "Yellow Concrete Powder", ""), + YELLOW_GLAZED_TERRACOTTA(239, 0, 10914, "Yellow Glazed Terracotta", "YELLOW_GLAZED_TERRACOTTA"), + YELLOW_SHULKER_BOX(223, 0, 28700, "Yellow Shulker Box", "YELLOW_SHULKER_BOX"), + YELLOW_STAINED_GLASS(95, 4, 12182, "Yellow Stained Glass", ""), + YELLOW_STAINED_GLASS_PANE(160, 4, 20298, "Yellow Stained Glass Pane", ""), + YELLOW_TERRACOTTA(159, 4, 32129, "Yellow Terracotta", ""), + YELLOW_WALL_BANNER(425, 11, 32004, "Yellow Banner", ""), + YELLOW_WOOL(35, 4, 29507, "Yellow Wool", ""), + ZOMBIE_WALL_HEAD(397, 2, 16296, "Zombie Wall Head", ""), + + BRAIN_CORAL_WALL_FAN(-1, -1, 22685, "Brain Coral Wall Fan"), + BUBBLE_CORAL_WALL_FAN(-1, -1, 20382, "Bubble Coral Wall Fan"), + DEAD_BRAIN_CORAL_FAN(-1, -1, 26150, "Dead Brain Coral Fan"), + DEAD_BRAIN_CORAL_WALL_FAN(-1, -1, 23718, "Dead Brain Coral Wall Fan"), + DEAD_BUBBLE_CORAL_FAN(-1, -1, 17322, "Dead Bubble Coral Fan"), + DEAD_BUBBLE_CORAL_WALL_FAN(-1, -1, 18453, "Dead Bubble Coral Wall Fan"), + DEAD_FIRE_CORAL_FAN(-1, -1, 27073, "Dead Fire Coral Fan"), + DEAD_FIRE_CORAL_WALL_FAN(-1, -1, 23375, "Dead Fire Coral Wall Fan"), + DEAD_HORN_CORAL_FAN(-1, -1, 11387, "Dead Horn Coral Fan"), + DEAD_HORN_CORAL_WALL_FAN(-1, -1, 27550, "Dead Horn Coral Wall Fan"), + DEAD_TUBE_CORAL_FAN(-1, -1, 17628, "Dead Tube Coral Fan"), + DEAD_TUBE_CORAL_WALL_FAN(-1, -1, 5128, "Dead Tube Coral Wall Fan"), + FIRE_CORAL_WALL_FAN(-1, -1, 20100, "Fire Coral Wall Fan"), + HORN_CORAL_WALL_FAN(-1, -1, 28883, "Horn Coral Wall Fan"), + TUBE_CORAL_WALL_FAN(-1, -1, 25282, "Tube Coral Wall Fan"); + + private int legacyId; + private int legacyData; + private int id; + private String name; + private String legacyName; + private String bukkitName; + private String mojangName; + Material mat; + + CMIMaterial(int legacyId, int legacyData, int id, String name) { + this(legacyId, legacyData, id, name, null); + } + + CMIMaterial(int legacyId, int legacyData, int id, String name, String legacyName) { + this.legacyId = legacyId; + this.legacyData = legacyData; + this.id = id; + this.name = name; + this.legacyName = legacyName; + } + + public String getName() { + return name; + } + + public int getLegacyId() { + return this.legacyId; + } + + public int getId() { + if (version.isEqualOrHigher(Version.v1_13_R1)) { + return this.id; + } + return getLegacyId(); + } + + public Material getMaterial() { + return mat == null ? null : mat; + } + + public void updateMaterial() { + if (mat == null) { + for (Material one : Material.class.getEnumConstants()) { + if (one.getId() != this.getId()) + continue; + mat = one; + break; + } + } + if (mat == null) { + for (Material one : Material.class.getEnumConstants()) { + if (!one.name().equalsIgnoreCase(this.name())) + continue; + mat = one; + break; + } + } + if (mat == null) { + for (Material one : Material.class.getEnumConstants()) { + if (!one.name().replace("_", "").equalsIgnoreCase(this.getName().replace(" ", ""))) + continue; + mat = one; + break; + } + } + if (mat == null) { + for (Material one : Material.class.getEnumConstants()) { + if (!one.name().replace("_", "").equalsIgnoreCase(this.getLegacyName().replace(" ", "").replace("_", ""))) + continue; + mat = one; + break; + } + } + } + + public ItemStack newItemStack() { + if (mat == null) { + for (Material one : Material.class.getEnumConstants()) { + if (one.getId() != this.getId()) + continue; + mat = one; + break; + } + } + if (version.isEqualOrHigher(Version.v1_13_R1)) { + return new ItemStack(mat == null ? Material.STONE : mat); + } + return new ItemStack(mat == null ? Material.STONE : mat, 1, (short) this.getLegacyData()); + } + + @Deprecated + public short getData() { + if (version.isEqualOrHigher(Version.v1_13_R1)) { + return 0; + } + return (short) legacyData; + } + + public int getLegacyData() { + return legacyData; + } + + public static CMIMaterial getRandom(CMIMaterial mat) { + + List ls = new ArrayList(); + + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getLegacyId() == -1) + continue; + if (one.getLegacyId() != mat.getLegacyId()) + continue; + ls.add(one); + } + + if (ls.isEmpty() || ls.size() == 1) { + String part = mat.name; + if (part.contains("_")) + part = part.split("_")[part.split("[_]").length - 1]; + for (CMIMaterial one : CMIMaterial.values()) { + if (!one.name().endsWith(part)) + continue; + ls.add(one); + } + } + + Collections.shuffle(ls); + + return ls.isEmpty() ? CMIMaterial.NONE : ls.get(0); + } + + public static CMIMaterial get(String id) { + Integer ids = null; + Integer data = null; + try { + ids = Integer.parseInt(id); + } catch (Exception e) { + if (id.contains(":")) { + try { + ids = Integer.parseInt(id.split(":")[0]); + data = Integer.parseInt(id.split(":")[1]); + id = id.split(":")[0]; + } catch (Exception ex) { + } + } + } + + CMIMaterial mat = null; + + CMIItemStack ci = byBukkitName.get(id); + if (ci != null) + mat = ci.getCMIType(); + if (mat != null) + return mat; + + ci = byMojangName.get(id); + if (ci != null) + mat = ci.getCMIType(); + + if (mat != null) + return mat; + + if (ids != null) { + if (data == null) + mat = get(ids); + else + mat = get(ids, data); + } + + if (mat != null) + return mat; + for (CMIMaterial one : CMIMaterial.values()) { + if (ids != null && data == null && one.getId() == ids) + return one; + if (ids != null && data != null && one.getId() == ids && one.getLegacyData() == data) + return one; + } + + id = id.replace("_", "").toLowerCase(); + for (CMIMaterial one : CMIMaterial.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(id)) + return one; + if (one.getName().replace("_", "").replace(" ", "").equalsIgnoreCase(id)) + return one; + } + return CMIMaterial.NONE; + } + + public static CMIMaterial get(Material mat) { + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getMaterial() == null) + continue; + if (one.getMaterial().getId() == mat.getId()) { + return one; + } + } + return CMIMaterial.NONE; + } + + public static CMIMaterial get(int id) { + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getMaterial() == null) + continue; + if (one.getMaterial().getId() == id) { + return one; + } + } + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getLegacyId() == id) { + return one; + } + } + return CMIMaterial.NONE; + } + + public static CMIMaterial get(ItemStack item) { +// if (CMIMaterial.isMonsterEgg(item.getType())) { +// int tid = CMI.getInstance().getNMS().getEggId(item); +// return get(item.getType().getId(), tid); +// } + CMIMaterial m = get(item.getType().getId(), item.getData().getData()); + + if (m == null) { + CMIItemStack cm = byBukkitName.get(item.getType().toString()); + if (cm != null) + m = cm.getCMIType(); + } + + return m == null ? CMIMaterial.NONE : m; + } + + public static CMIMaterial get(Block block) { + CMIMaterial m = get(block.getType().getId(), block.getData()); + if (m == null) { + CMIItemStack cm = byBukkitName.get(block.getType().toString().replace("_", "").toLowerCase()); + if (cm != null) + m = cm.getCMIType(); + } + if (m == null) { + CMIItemStack cm = byBukkitName.get(block.getType().name().toString().replace("_", "").toLowerCase()); + if (cm != null) + m = cm.getCMIType(); + } + return m == null ? CMIMaterial.NONE : m; + } + + public static CMIMaterial get(int id, int data) { + CMIMaterial mat = null; + + CMIItemStack cm = byBukkitName.get(id + ":" + data); + if (cm != null) + mat = cm.getCMIType(); + + cm = byId.get(id); + if (cm != null) + mat = cm.getCMIType(); + + if (mat == null) { + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getId() == id) { + mat = one; + break; + } + } + } + if (mat != null) { + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getId() == mat.getId()) { + if (one.getLegacyData() == data) { + mat = one; + break; + } + } + } + } + return mat == null ? CMIMaterial.NONE : mat; + } + + public static CMIMaterial getLegacy(int id) { + CMIItemStack cm = byId.get(id); + if (cm != null) + return cm.getCMIType(); + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getLegacyId() == id) { + return one; + } + } + return CMIMaterial.NONE; + } + + public short getMaxDurability() { + return this.getMaterial() == null ? 0 : this.getMaterial().getMaxDurability(); + } + + public boolean isBlock() { + return this.getMaterial() == null ? false : this.getMaterial().isBlock(); + } + + public boolean isSolid() { + return this.getMaterial() == null ? false : this.getMaterial().isSolid(); + } + + public static boolean isMonsterEgg(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isMonsterEgg(); + } + + public boolean isMonsterEgg() { + switch (this) { + case ELDER_GUARDIAN_SPAWN_EGG: + case WITHER_SKELETON_SPAWN_EGG: + case STRAY_SPAWN_EGG: + case HUSK_SPAWN_EGG: + case ZOMBIE_VILLAGER_SPAWN_EGG: + case SKELETON_HORSE_SPAWN_EGG: + case ZOMBIE_HORSE_SPAWN_EGG: + case ARMOR_STAND_SPAWN_EGG: + case DONKEY_SPAWN_EGG: + case MULE_SPAWN_EGG: + case EVOKER_SPAWN_EGG: + case VEX_SPAWN_EGG: + case VINDICATOR_SPAWN_EGG: + case ILLUSIONER_SPAWN_EGG: + case CREEPER_SPAWN_EGG: + case SKELETON_SPAWN_EGG: + case SPIDER_SPAWN_EGG: + case GIANT_SPAWN_EGG: + case ZOMBIE_SPAWN_EGG: + case SLIME_SPAWN_EGG: + case GHAST_SPAWN_EGG: + case ZOMBIE_PIGMAN_SPAWN_EGG: + case ENDERMAN_SPAWN_EGG: + case CAVE_SPIDER_SPAWN_EGG: + case SILVERFISH_SPAWN_EGG: + case BLAZE_SPAWN_EGG: + case MAGMA_CUBE_SPAWN_EGG: + case ENDER_DRAGON_SPAWN_EGG: + case WITHER_SPAWN_EGG: + case BAT_SPAWN_EGG: + case WITCH_SPAWN_EGG: + case ENDERMITE_SPAWN_EGG: + case GUARDIAN_SPAWN_EGG: + case SHULKER_SPAWN_EGG: + case PIG_SPAWN_EGG: + case SHEEP_SPAWN_EGG: + case COW_SPAWN_EGG: + case CHICKEN_SPAWN_EGG: + case SQUID_SPAWN_EGG: + case WOLF_SPAWN_EGG: + case MOOSHROOM_SPAWN_EGG: + case SNOWMAN_SPAWN_EGG: + case OCELOT_SPAWN_EGG: + case IRON_GOLEM_SPAWN_EGG: + case HORSE_SPAWN_EGG: + case RABBIT_SPAWN_EGG: + case POLAR_BEAR_SPAWN_EGG: + case LLAMA_SPAWN_EGG: + case PARROT_SPAWN_EGG: + case VILLAGER_SPAWN_EGG: + case COD_SPAWN_EGG: + case DOLPHIN_SPAWN_EGG: + case DRAGON_EGG: + case DROWNED_SPAWN_EGG: + case PHANTOM_SPAWN_EGG: + case PUFFERFISH_SPAWN_EGG: + case SALMON_SPAWN_EGG: + case TROPICAL_FISH_SPAWN_EGG: + case TURTLE_EGG: + case TURTLE_SPAWN_EGG: + return true; + default: + break; + } + return false; + } + + public static boolean isBed(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isBed(); + } + + public boolean isBed() { + switch (this) { + case WHITE_BED: + case ORANGE_BED: + case MAGENTA_BED: + case LIGHT_BLUE_BED: + case YELLOW_BED: + case LIME_BED: + case PINK_BED: + case GRAY_BED: + case LIGHT_GRAY_BED: + case CYAN_BED: + case PURPLE_BED: + case BLUE_BED: + case BROWN_BED: + case GREEN_BED: + case RED_BED: + case BLACK_BED: + return true; + default: + break; + } + return false; + } + + public static boolean isBoat(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isBoat(); + } + + public boolean isBoat() { + switch (this) { + case OAK_BOAT: + case ACACIA_BOAT: + case BIRCH_BOAT: + case DARK_OAK_BOAT: + case JUNGLE_BOAT: + case SPRUCE_BOAT: + return true; + default: + break; + } + return false; + } + + public static boolean isSapling(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isSapling(); + } + + public boolean isSapling() { + switch (this) { + case OAK_SAPLING: + case SPRUCE_SAPLING: + case BIRCH_SAPLING: + case JUNGLE_SAPLING: + case ACACIA_SAPLING: + case DARK_OAK_SAPLING: + case POTTED_ACACIA_SAPLING: + case POTTED_BIRCH_SAPLING: + case POTTED_DARK_OAK_SAPLING: + case POTTED_JUNGLE_SAPLING: + case POTTED_OAK_SAPLING: + case POTTED_SPRUCE_SAPLING: + return true; + default: + break; + } + return false; + } + + public static boolean isButton(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isButton(); + } + + public boolean isButton() { + switch (this) { + case ACACIA_BUTTON: + case BIRCH_BUTTON: + case DARK_OAK_BUTTON: + case JUNGLE_BUTTON: + case OAK_BUTTON: + case SPRUCE_BUTTON: + case STONE_BUTTON: + return true; + default: + break; + } + return false; + } + + public static boolean isPlate(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isPlate(); + } + + public boolean isPlate() { + switch (this) { + case ACACIA_PRESSURE_PLATE: + case BIRCH_PRESSURE_PLATE: + case DARK_OAK_PRESSURE_PLATE: + case HEAVY_WEIGHTED_PRESSURE_PLATE: + case JUNGLE_PRESSURE_PLATE: + case LIGHT_WEIGHTED_PRESSURE_PLATE: + case OAK_PRESSURE_PLATE: + case SPRUCE_PRESSURE_PLATE: + case STONE_PRESSURE_PLATE: + return true; + default: + break; + } + return false; + } + + public static boolean isWool(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isWool(); + } + + public boolean isWool() { + switch (this) { + case BLACK_WOOL: + case BLUE_WOOL: + case BROWN_WOOL: + case CYAN_WOOL: + case GRAY_WOOL: + case GREEN_WOOL: + case LIGHT_BLUE_WOOL: + case LIGHT_GRAY_WOOL: + case LIME_WOOL: + case MAGENTA_WOOL: + case ORANGE_WOOL: + case PINK_WOOL: + case PURPLE_WOOL: + case RED_WOOL: + case WHITE_WOOL: + case YELLOW_WOOL: + return true; + default: + break; + } + return false; + } + + public static boolean isShulkerBox(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isShulkerBox(); + } + + public boolean isShulkerBox() { + switch (this) { + case BLACK_SHULKER_BOX: + case BLUE_SHULKER_BOX: + case BROWN_SHULKER_BOX: + case CYAN_SHULKER_BOX: + case GRAY_SHULKER_BOX: + case GREEN_SHULKER_BOX: + case LIGHT_BLUE_SHULKER_BOX: + case LIGHT_GRAY_SHULKER_BOX: + case LIME_SHULKER_BOX: + case MAGENTA_SHULKER_BOX: + case ORANGE_SHULKER_BOX: + case PINK_SHULKER_BOX: + case PURPLE_SHULKER_BOX: + case RED_SHULKER_BOX: + case WHITE_SHULKER_BOX: + case YELLOW_SHULKER_BOX: + return true; + default: + break; + } + return false; + } + + public static boolean isAir(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isAir(); + } + + public boolean isAir() { + switch (this) { + case AIR: + case CAVE_AIR: + case VOID_AIR: + return true; + default: + break; + } + return false; + } + + public static boolean isDoor(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isDoor(); + } + + public boolean isDoor() { + switch (this) { + case OAK_DOOR: + case IRON_DOOR: + case SPRUCE_DOOR_ITEM: + case BIRCH_DOOR_ITEM: + case JUNGLE_DOOR_ITEM: + case ACACIA_DOOR_ITEM: + case DARK_OAK_DOOR_ITEM: + case ACACIA_DOOR: + case BIRCH_DOOR: + case DARK_OAK_DOOR: + case IRON_DOOR_BLOCK: + case JUNGLE_DOOR: + case SPRUCE_DOOR: + return true; + default: + break; + } + return false; + } + + public static boolean isGate(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isGate(); + } + + public boolean isGate() { + switch (this) { + case ACACIA_FENCE_GATE: + case BIRCH_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case END_GATEWAY: + case JUNGLE_FENCE_GATE: + case OAK_FENCE_GATE: + case SPRUCE_FENCE_GATE: + return true; + default: + break; + } + return false; + } + + public static boolean isTrapDoor(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isTrapDoor(); + } + + public boolean isTrapDoor() { + switch (this) { + case ACACIA_TRAPDOOR: + case BIRCH_TRAPDOOR: + case DARK_OAK_TRAPDOOR: + case IRON_TRAPDOOR: + case JUNGLE_TRAPDOOR: + case OAK_TRAPDOOR: + case SPRUCE_TRAPDOOR: + return true; + default: + break; + } + return false; + } + + public static boolean isSkull(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isSkull(); + } + + public boolean isSkull() { + switch (this) { + case SKELETON_SKULL: + case WITHER_SKELETON_SKULL: + case SKELETON_WALL_SKULL: + case WITHER_SKELETON_WALL_SKULL: + return true; + default: + break; + } + return false; + } + + public static boolean isDye(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isDye(); + } + + public boolean isDye() { + switch (this) { + case INK_SAC: + case ROSE_RED: + case CACTUS_GREEN: + case COCOA_BEANS: + case LAPIS_LAZULI: + case PURPLE_DYE: + case CYAN_DYE: + case LIGHT_GRAY_DYE: + case GRAY_DYE: + case PINK_DYE: + case LIME_DYE: + case DANDELION_YELLOW: + case LIGHT_BLUE_DYE: + case MAGENTA_DYE: + case ORANGE_DYE: + case BONE_MEAL: + return true; + default: + break; + } + return false; + } + + public boolean equals(Material mat) { + if (getMaterial() == null) + return false; + return this.getMaterial().equals(mat); + } + + public String getLegacyName() { + return legacyName == null ? "" : legacyName; + } + + public void setLegacyName(String legacyName) { + this.legacyName = legacyName; + } + + public String getBukkitName() { + if (bukkitName == null) + bukkitName = getMaterial().name(); + return bukkitName; + } + + public void setBukkitName(String bukkitName) { + this.bukkitName = bukkitName; + } + + public String getMojangName() { + if (mojangName == null) + mojangName = ItemReflection.getItemMinecraftName(this.newItemStack()); + return mojangName; + } + + public void setMojangName(String mojangName) { + this.mojangName = mojangName; + } + } +} diff --git a/src/com/bekvon/bukkit/residence/CMILib/ItemReflection.java b/src/com/bekvon/bukkit/residence/CMILib/ItemReflection.java new file mode 100644 index 000000000..cdbefc947 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/CMILib/ItemReflection.java @@ -0,0 +1,163 @@ +/** + * Copyright (C) 2017 Zrips + */ + +package com.bekvon.bukkit.residence.CMILib; + +import java.lang.reflect.Method; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.utils.VersionChecker.Version; + + +public class ItemReflection { + + private static Class CraftServerClass; + private static Object CraftServer; + private static Class CraftItemStack; + private static Class Item; + private static Class IStack; + + static { + initialize(); + } + +// public ItemReflection() { +// initialize(); +// } + + private static void initialize() { + try { + CraftServerClass = getBukkitClass("CraftServer"); + } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) { + e.printStackTrace(); + } + try { + CraftServer = CraftServerClass.cast(Bukkit.getServer()); + } catch (SecurityException | IllegalArgumentException e) { + e.printStackTrace(); + } + try { + CraftItemStack = getBukkitClass("inventory.CraftItemStack"); + } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) { + e.printStackTrace(); + } + try { + Item = getMinecraftClass("Item"); + } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) { + e.printStackTrace(); + } + try { + IStack = getMinecraftClass("ItemStack"); + } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) { + e.printStackTrace(); + } + } + + private static Class getBukkitClass(String nmsClassString) throws ClassNotFoundException { + return Class.forName("org.bukkit.craftbukkit." + Residence.getInstance().getVersionChecker().getVersion() + "." + nmsClassString); + } + + public static Class getMinecraftClass(String nmsClassString) throws ClassNotFoundException { + return Class.forName("net.minecraft.server." + Residence.getInstance().getVersionChecker().getVersion() + "." + nmsClassString); + } + + public static String getItemMinecraftName(ItemStack item) { + try { + Object nmsStack = asNMSCopy(item); + Method itemMeth = Item.getMethod("getById", int.class); + Object res = itemMeth.invoke(Item, item.getType().getId()); + + String ff = "b"; + switch (Residence.getInstance().getVersionChecker().getVersion()) { + case v1_10_R1: + case v1_9_R1: + case v1_9_R2: + case v1_8_R1: + case v1_8_R3: + case v1_8_R2: + ff = "a"; + break; + case v1_11_R1: + case v1_11_R2: + case v1_12_R1: + case v1_12_R2: + ff = "b"; + break; + case v1_13_R2: + case v1_13_R1: + case v1_14_R2: + case v1_14_R1: + case v1_15_R2: + case v1_15_R1: + ff = "h"; + break; + case v1_7_R1: + case v1_7_R2: + case v1_7_R3: + case v1_7_R4: + ff = "n"; + break; + default: + break; + } + + Method meth2 = res.getClass().getMethod(ff, IStack); + Object name = meth2.invoke(res, nmsStack); + return name.toString(); + } catch (Exception e) { + return item != null ? item.getType().name() : ""; + } + } + + public String getItemMinecraftNamePath(ItemStack item) { + try { + Object nmsStack = asNMSCopy(item); + Method itemMeth = Item.getMethod("getById", int.class); + Object res = itemMeth.invoke(Item, item.getType().getId()); + Method nameThingy = Item.getMethod("j", IStack); + Object resThingy = nameThingy.invoke(res, nmsStack); + return resThingy.toString(); + } catch (Exception e) { + return null; + } + } + + public static Object asNMSCopy(ItemStack item) { + try { + Method meth = CraftItemStack.getMethod("asNMSCopy", ItemStack.class); + return meth.invoke(CraftItemStack, item); + } catch (Exception e) { + return null; + } + } + + public Object asBukkitCopy(Object item) { + try { + Method meth = CraftItemStack.getMethod("asBukkitCopy", IStack); + return meth.invoke(CraftItemStack, item); + } catch (Exception e) { + return null; + } + } + + public Object getCraftServer() { + return CraftServer; + } + + public ItemStack getItemInOffHand(Player player) { + if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_9_R1)) + return null; + return player.getInventory().getItemInOffHand(); + } + + public void setEndermiteActive(Entity ent, boolean state) { + + } + +} diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 75b5cafe2..66a11d9d1 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -1,16 +1,5 @@ package com.bekvon.bukkit.residence; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Effect; -import org.bukkit.Location; - -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.ConfigReader; -import com.bekvon.bukkit.residence.containers.RandomTeleport; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.ParticleEffects; - import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; @@ -26,6 +15,11 @@ import java.util.List; import java.util.Map; import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Effect; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.configuration.ConfigurationSection; @@ -33,6 +27,14 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.residence.CMILib.CMIEffectManager.CMIParticle; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.RandomTeleport; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; + public class ConfigManager { protected String defaultGroup; protected boolean useLeases; @@ -56,10 +58,10 @@ public class ConfigManager { protected boolean PvPFlagPrevent; protected boolean OverridePvp; protected boolean BlockAnyTeleportation; - protected int infoToolId; + protected CMIMaterial infoTool; protected int AutoCleanUpDays; protected boolean AutoCleanUpRegenerate; - protected int selectionToolId; + protected CMIMaterial selectionTool; protected boolean adminOps; protected boolean AdminFullAccess; protected String multiworldPlugin; @@ -209,17 +211,17 @@ public class ConfigManager { private boolean enforceAreaInsideArea; - protected ParticleEffects SelectedFrame; - protected ParticleEffects SelectedSides; + protected CMIParticle SelectedFrame; + protected CMIParticle SelectedSides; - protected ParticleEffects OverlapFrame; - protected ParticleEffects OverlapSides; + protected CMIParticle OverlapFrame; + protected CMIParticle OverlapSides; - protected Effect SelectedSpigotFrame; - protected Effect SelectedSpigotSides; + protected CMIParticle SelectedSpigotFrame; + protected CMIParticle SelectedSpigotSides; - protected Effect OverlapSpigotFrame; - protected Effect OverlapSpigotSides; + protected CMIParticle OverlapSpigotFrame; + protected CMIParticle OverlapSpigotSides; // DynMap public boolean DynMapUse; @@ -428,7 +430,7 @@ public void UpdateConfigFile() { c.getW().addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); - selectionToolId = c.get("Global.SelectionToolId", Material.WOOD_HOE.getId()); + selectionTool = CMIMaterial.get(c.get("Global.SelectionToolId", CMIMaterial.WOODEN_HOE.name())); c.getW().addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); SelectionIgnoreY = c.get("Global.Selection.IgnoreY", false); @@ -444,7 +446,7 @@ public void UpdateConfigFile() { c.getW().addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", "Simply equip this tool and hit a location inside the residence and it will display the info for it."); - infoToolId = c.get("Global.InfoToolId", Material.STRING.getId()); + infoTool = CMIMaterial.get(c.get("Global.InfoToolId", Material.STRING.toString())); c.getW().addComment("Global.Optimizations.DefaultWorld", "Name of your main residence world. Usually normal starting world 'World'. Capitalization essential"); DefaultWorld = c.get("Global.Optimizations.DefaultWorld", defaultWorldName, false); @@ -926,7 +928,7 @@ public void UpdateConfigFile() { c.getW().addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); VisualizerShowFor = c.get("Global.Visualizer.ShowFor", 5000); c.getW().addComment("Global.Visualizer.updateInterval", "How often in ticks to update particles for player"); - VisualizerUpdateInterval = c.get("Global.Visualizer.updateInterval", 5); + VisualizerUpdateInterval = c.get("Global.Visualizer.updateInterval", 20); c.getW().addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); VisualizerRowSpacing = c.get("Global.Visualizer.RowSpacing", 2); if (VisualizerRowSpacing < 1) @@ -972,93 +974,84 @@ public void UpdateConfigFile() { // Frame String efname = c.get("Global.Visualizer.Selected.Frame", "happyVillager"); - SelectedFrame = ParticleEffects.fromName(efname); + SelectedFrame = CMIParticle.getCMIParticle(efname); if (SelectedFrame == null) { - SelectedFrame = ParticleEffects.VILLAGER_HAPPY; + SelectedFrame = CMIParticle.HAPPY_VILLAGER; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; for (Effect one : Effect.values()) { if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { - SelectedSpigotFrame = one; + SelectedSpigotFrame = CMIParticle.getCMIParticle(one.toString()); break; } } - if (plugin.isSpigot()) - if (SelectedSpigotFrame == null) { - SelectedSpigotFrame = Effect.getByName("HAPPY_VILLAGER"); - if (SelectedSpigotFrame == null) - SelectedSpigotFrame = Effect.values()[0]; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } + if (SelectedSpigotFrame == null) { + SelectedSpigotFrame = CMIParticle.HAPPY_VILLAGER; + if (SelectedSpigotFrame == null) + SelectedSpigotFrame = CMIParticle.COLOURED_DUST; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } // Sides efname = c.get("Global.Visualizer.Selected.Sides", "reddust"); - SelectedSides = ParticleEffects.fromName(efname); + SelectedSides = CMIParticle.getCMIParticle(efname); if (SelectedSides == null) { - SelectedSides = ParticleEffects.REDSTONE; + SelectedSides = CMIParticle.COLOURED_DUST; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; for (Effect one : Effect.values()) { if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { - SelectedSpigotSides = one; + SelectedSpigotSides = CMIParticle.getCMIParticle(one.toString()); break; } } - if (plugin.isSpigot()) - if (SelectedSpigotSides == null) { - SelectedSpigotSides = Effect.getByName("COLOURED_DUST"); - if (SelectedSpigotSides == null) - SelectedSpigotSides = Effect.values()[0]; - - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } + if (SelectedSpigotSides == null) { + SelectedSpigotSides = CMIParticle.COLOURED_DUST; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } efname = c.get("Global.Visualizer.Overlap.Frame", "FLAME"); - OverlapFrame = ParticleEffects.fromName(efname); + OverlapFrame = CMIParticle.getCMIParticle(efname); if (OverlapFrame == null) { - OverlapFrame = ParticleEffects.FLAME; + OverlapFrame = CMIParticle.FLAME; Bukkit.getConsoleSender().sendMessage("Can't find effect for Overlap Frame with this name, it was set to default"); } efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; for (Effect one : Effect.values()) { if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { - OverlapSpigotFrame = one; + OverlapSpigotFrame = CMIParticle.getCMIParticle(one.toString()); break; } } if (plugin.isSpigot()) if (OverlapSpigotFrame == null) { - OverlapSpigotFrame = Effect.getByName("FLAME"); - if (OverlapSpigotFrame == null) - OverlapSpigotFrame = Effect.values()[0]; + OverlapSpigotFrame = CMIParticle.FLAME; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } efname = c.get("Global.Visualizer.Overlap.Sides", "FLAME"); - OverlapSides = ParticleEffects.fromName(efname); + OverlapSides = CMIParticle.getCMIParticle(efname); if (OverlapSides == null) { - OverlapSides = ParticleEffects.FLAME; + OverlapSides = CMIParticle.FLAME; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; for (Effect one : Effect.values()) { if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { - OverlapSpigotSides = one; + OverlapSpigotSides = CMIParticle.getCMIParticle(one.toString()); break; } } if (plugin.isSpigot()) if (OverlapSpigotSides == null) { - OverlapSpigotSides = Effect.getByName("FLAME"); - if (OverlapSpigotSides == null) - OverlapSpigotSides = Effect.values()[0]; + OverlapSpigotSides = CMIParticle.FLAME; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } @@ -1073,7 +1066,7 @@ public void UpdateConfigFile() { int id = c.get("Global.GUI.setTrue.Id", 35); int data = c.get("Global.GUI.setTrue.Data", 13); - Material Mat = Material.getMaterial(id); + Material Mat = CMIMaterial.get(id).getMaterial(); if (Mat == null) Mat = Material.STONE; GuiTrue = new ItemStack(Mat, 1, (short) data); @@ -1082,7 +1075,7 @@ public void UpdateConfigFile() { id = c.get("Global.GUI.setFalse.Id", 35); data = c.get("Global.GUI.setFalse.Data", 14); - Mat = Material.getMaterial(id); + Mat = CMIMaterial.get(id).getMaterial(); if (Mat == null) Mat = Material.STONE; GuiFalse = new ItemStack(Mat, 1, (short) data); @@ -1091,7 +1084,7 @@ public void UpdateConfigFile() { id = c.get("Global.GUI.setRemove.Id", 35); data = c.get("Global.GUI.setRemove.Data", 8); - Mat = Material.getMaterial(id); + Mat = CMIMaterial.get(id).getMaterial(); if (Mat == null) Mat = Material.STONE; GuiRemove = new ItemStack(Mat, 1, (short) data); @@ -1303,35 +1296,35 @@ public int getVisualizerUpdateInterval() { return VisualizerUpdateInterval; } - public ParticleEffects getSelectedFrame() { + public CMIParticle getSelectedFrame() { return SelectedFrame; } - public ParticleEffects getSelectedSides() { + public CMIParticle getSelectedSides() { return SelectedSides; } - public ParticleEffects getOverlapFrame() { + public CMIParticle getOverlapFrame() { return OverlapFrame; } - public ParticleEffects getOverlapSides() { + public CMIParticle getOverlapSides() { return OverlapSides; } - public Effect getSelectedSpigotFrame() { + public CMIParticle getSelectedSpigotFrame() { return SelectedSpigotFrame; } - public Effect getSelectedSpigotSides() { + public CMIParticle getSelectedSpigotSides() { return SelectedSpigotSides; } - public Effect getOverlapSpigotFrame() { + public CMIParticle getOverlapSpigotFrame() { return OverlapSpigotFrame; } - public Effect getOverlapSpigotSides() { + public CMIParticle getOverlapSpigotSides() { return OverlapSpigotSides; } @@ -1447,12 +1440,22 @@ public boolean isBlockAnyTeleportation() { return BlockAnyTeleportation; } + @Deprecated public int getInfoToolID() { - return infoToolId; + return infoTool.getId(); + } + + public CMIMaterial getInfoTool() { + return infoTool; + } + + public CMIMaterial getSelectionTool() { + return selectionTool; } + @Deprecated public int getSelectionTooldID() { - return selectionToolId; + return selectionTool.getId(); } public boolean getOpsAreAdmins() { diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 3eac6e4c4..8943d5494 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -46,8 +46,12 @@ import org.kingdoms.main.Kingdoms; import org.kingdoms.manager.game.GameManagement; +import com.bekvon.bukkit.residence.BossBar.BossBarManager; +import com.bekvon.bukkit.residence.CMILib.ItemManager; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.Placeholders.Placeholder; import com.bekvon.bukkit.residence.Placeholders.PlaceholderAPIHook; +import com.bekvon.bukkit.residence.Siege.ResidenceSiegeListener; import com.bekvon.bukkit.residence.allNms.v1_10Events; import com.bekvon.bukkit.residence.allNms.v1_8Events; import com.bekvon.bukkit.residence.allNms.v1_9Events; @@ -153,6 +157,11 @@ public class Residence extends JavaPlugin { protected ResidenceEntityListener elistener; protected ResidenceFixesListener flistener; + protected ResidenceSiegeListener slistener; + + protected ResidenceCommandListener cManager; + + protected BossBarManager BossBarManager; protected SpigotListener spigotlistener; protected ShopListener shlistener; @@ -207,7 +216,7 @@ public class Residence extends JavaPlugin { private Map cachedPlayerNameUUIDs = new HashMap(); private WorldEditPlugin wep = null; private WorldGuardPlugin wg = null; - private int wepid; + private CMIMaterial wepid; private String ServerLandname = "Server_Land"; private String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; @@ -285,12 +294,24 @@ public MarketBuyInterface getMarketBuyManagerAPI() { } + public BossBarManager getBossBarManager() { + if (BossBarManager == null) + BossBarManager = new BossBarManager(this); + return BossBarManager; + } + public ChatInterface getResidenceChatAPI() { if (ChatAPI == null) ChatAPI = chatmanager; return ChatAPI; } + public ResidenceCommandListener getCommandManager() { + if (cManager == null) + cManager = new ResidenceCommandListener(this); + return cManager; + } + public ResidenceApi getAPI() { return API; } @@ -422,6 +443,7 @@ public void onEnable() { instance = this; initsuccess = false; versionChecker = new VersionChecker(this); + ItemManager.load(); deleteConfirm = new HashMap(); resadminToggle = new ArrayList(); server = this.getServer(); @@ -458,9 +480,14 @@ public void onEnable() { if (!new File(dataFolder, "groups.yml").isFile()) { this.writeDefaultGroupsFromJar(); } + + this.getCommand("res").setExecutor(getCommandManager()); +// this.getCommand("resadmin").setExecutor(getCommandManager()); +// this.getCommand("residence").setExecutor(getCommandManager()); + this.getCommand("res").setTabCompleter(new TabComplete()); - this.getCommand("resadmin").setTabCompleter(new TabComplete()); - this.getCommand("residence").setTabCompleter(new TabComplete()); +// this.getCommand("resadmin").setTabCompleter(new TabComplete()); +// this.getCommand("residence").setTabCompleter(new TabComplete()); // Residence.getConfigManager().UpdateConfigFile(); @@ -502,11 +529,11 @@ public void onEnable() { if (getConfigManager().CouldronCompatability()) nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms.v1_7_Couldron"); else - nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms." + version); + nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms." + versionChecker.getVersion()); if (NMS.class.isAssignableFrom(nmsClass)) { nms = (NMS) nmsClass.getConstructor().newInstance(); } else { - System.out.println("Something went wrong, please note down version and contact author v:" + version); + System.out.println("Something went wrong, please note down version and contact author v:" + versionChecker.getVersion()); this.setEnabled(false); Bukkit.shutdown(); } @@ -694,6 +721,7 @@ public void run() { plistener = new ResidencePlayerListener(this); elistener = new ResidenceEntityListener(this); flistener = new ResidenceFixesListener(); +// slistener = new ResidenceSiegeListener(); shlistener = new ShopListener(this); spigotlistener = new SpigotListener(); @@ -704,6 +732,7 @@ public void run() { pm.registerEvents(elistener, this); pm.registerEvents(flistener, this); pm.registerEvents(shlistener, this); +// pm.registerEvents(slistener, this); // 1.8 event if (getVersionChecker().isHigherEquals(Version.v1_8_R1)) @@ -845,7 +874,7 @@ private void setWorldEdit() { if (plugin != null) { smanager = new WorldEditSelectionManager(server, this); this.wep = (WorldEditPlugin) plugin; - wepid = this.getWorldEdit().getConfig().getInt("wand-item"); + wepid = CMIMaterial.get(this.getWorldEdit().getConfig().getInt("wand-item")); Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit"); } else { smanager = new SelectionManager(server, this); @@ -1802,7 +1831,9 @@ public WorldGuardPlugin getWorldGuard() { return wg; } - public int getWepid() { + public CMIMaterial getWorldEditTool() { + if (wepid == null) + wepid = CMIMaterial.NONE; return wepid; } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 434e940f5..fd78cb67a 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -6,16 +6,20 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; + +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; +import com.bekvon.bukkit.residence.utils.Debug; -public class ResidenceCommandListener extends Residence { +public class ResidenceCommandListener implements CommandExecutor { private static List AdminCommands = new ArrayList(); @@ -25,48 +29,59 @@ public static List getAdminCommands() { return AdminCommands; } + private Residence plugin; + + public ResidenceCommandListener(Residence plugin) { + this.plugin = plugin; + } + @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + Debug.D(command.getName() + " " + args.length); + +// if (args.length < 3) +// return true; + ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); - getServ().getPluginManager().callEvent(cevent); + Bukkit.getPluginManager().callEvent(cevent); if (cevent.isCancelled()) { return true; } - if (sender instanceof Player && !getPermissionManager().isResidenceAdmin(sender) && isDisabledWorldCommand(((Player) sender) + if (sender instanceof Player && !plugin.getPermissionManager().isResidenceAdmin(sender) && plugin.isDisabledWorldCommand(((Player) sender) .getWorld())) { - this.msg(sender, lm.General_DisabledWorld); + plugin.msg(sender, lm.General_DisabledWorld); return true; } if (command.getName().equals("resreload") && args.length == 0) { if (sender instanceof Player) { Player player = (Player) sender; - if (getPermissionManager().isResidenceAdmin(player) && player.hasPermission("residence.topadmin")) { - this.reloadPlugin(); + if (plugin.getPermissionManager().isResidenceAdmin(player) && player.hasPermission("residence.topadmin")) { + plugin.reloadPlugin(); sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); System.out.println("[Residence] Reloaded by " + player.getName() + "."); } else - this.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); } else { - this.reloadPlugin(); + plugin.reloadPlugin(); System.out.println("[Residence] Reloaded by console."); } return true; } if (command.getName().equals("resload")) { - if (!(sender instanceof Player) || sender instanceof Player && getPermissionManager().isResidenceAdmin(sender) && ((Player) sender).hasPermission( + if (!(sender instanceof Player) || sender instanceof Player && plugin.getPermissionManager().isResidenceAdmin(sender) && ((Player) sender).hasPermission( "residence.topadmin")) { try { - this.loadYml(); + plugin.loadYml(); sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); } catch (Exception ex) { sender.sendMessage(ChatColor.RED + "[Residence] Unable to reload the save file, exception occured!"); sender.sendMessage(ChatColor.RED + ex.getMessage()); - Logger.getLogger(getInstance().getClass().getName()).log(Level.SEVERE, null, ex); + Logger.getLogger(Residence.getInstance().getClass().getName()).log(Level.SEVERE, null, ex); } } else - msg(sender, lm.General_NoPermission); + plugin.msg(sender, lm.General_NoPermission); return true; } else if (command.getName().equals("rc")) { cmd cmdClass = getCmdClass(new String[] { "rc" }); @@ -74,21 +89,21 @@ public boolean onCommand(CommandSender sender, Command command, String label, St sendUsage(sender, command.getName()); return true; } - boolean respond = cmdClass.perform(getInstance(), args, false, command, sender); + boolean respond = cmdClass.perform(Residence.getInstance(), args, false, command, sender); if (!respond) sendUsage(sender, command.getName()); return true; } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { boolean resadmin = false; if (sender instanceof Player) { - if (command.getName().equals("resadmin") && getPermissionManager().isResidenceAdmin(sender)) { + if (command.getName().equals("resadmin") && plugin.getPermissionManager().isResidenceAdmin(sender)) { resadmin = true; } - if (command.getName().equals("resadmin") && !getPermissionManager().isResidenceAdmin(sender)) { - ((Player) sender).sendMessage(msg(lm.Residence_NonAdmin)); + if (command.getName().equals("resadmin") && !plugin.getPermissionManager().isResidenceAdmin(sender)) { + ((Player) sender).sendMessage(plugin.msg(lm.Residence_NonAdmin)); return true; } - if (command.getName().equals("res") && getPermissionManager().isResidenceAdmin(sender) && getConfigManager().getAdminFullAccess()) { + if (command.getName().equals("res") && plugin.getPermissionManager().isResidenceAdmin(sender) && plugin.getConfigManager().getAdminFullAccess()) { resadmin = true; } } else { @@ -105,9 +120,9 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } else { resadmin = true; } - if (getConfigManager().allowAdminsOnly()) { + if (plugin.getConfigManager().allowAdminsOnly()) { if (!resadmin && player != null) { - msg(player, lm.General_AdminOnly); + plugin.msg(player, lm.General_AdminOnly); return true; } } @@ -132,15 +147,15 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return commandHelp(new String[] { "?" }, resadmin, sender, command); } - if (!resadmin && !this.hasPermission(sender, "residence.command." + args[0].toLowerCase())) + if (!resadmin && !plugin.hasPermission(sender, "residence.command." + args[0].toLowerCase())) return true; - if (!resadmin && player != null && resadminToggle.contains(player.getName())) { - if (!getPermissionManager().isResidenceAdmin(player)) { - resadminToggle.remove(player.getName()); + if (!resadmin && player != null && plugin.resadminToggle.contains(player.getName())) { + if (!plugin.getPermissionManager().isResidenceAdmin(player)) { + plugin.resadminToggle.remove(player.getName()); } } - boolean respond = cmdClass.perform(getInstance(), args, resadmin, command, sender); + boolean respond = cmdClass.perform(Residence.getInstance(), args, resadmin, command, sender); if (!respond) { String[] tempArray = new String[args.length + 1]; for (int i = 0; i < args.length; i++) { @@ -171,11 +186,11 @@ private static cmd getCmdClass(String[] args) { } public void sendUsage(CommandSender sender, String command) { - msg(sender, lm.General_DefaultUsage, command); + plugin.msg(sender, lm.General_DefaultUsage, command); } private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender, Command command) { - if (getHelpPages() == null) + if (plugin.getHelpPages() == null) return false; String helppath = getHelpPath(args); @@ -185,14 +200,14 @@ private boolean commandHelp(String[] args, boolean resadmin, CommandSender sende try { page = Integer.parseInt(args[args.length - 1]); } catch (Exception ex) { - msg(sender, lm.General_InvalidHelp); + plugin.msg(sender, lm.General_InvalidHelp); } } if (command.getName().equalsIgnoreCase("res")) resadmin = false; - if (getHelpPages().containesEntry(helppath)) - getHelpPages().printHelp(sender, page, helppath, resadmin); + if (plugin.getHelpPages().containesEntry(helppath)) + plugin.getHelpPages().printHelp(sender, page, helppath, resadmin); return true; } @@ -204,7 +219,7 @@ private String getHelpPath(String[] args) { } helppath = helppath + "." + args[i]; } - if (!getHelpPages().containesEntry(helppath) && args.length > 0) + if (!plugin.getHelpPages().containesEntry(helppath) && args.length > 0) return getHelpPath(Arrays.copyOf(args, args.length - 1)); return helppath; } diff --git a/src/com/bekvon/bukkit/residence/Siege/ResidenceSiege.java b/src/com/bekvon/bukkit/residence/Siege/ResidenceSiege.java new file mode 100644 index 000000000..197f51813 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/Siege/ResidenceSiege.java @@ -0,0 +1,94 @@ +package com.bekvon.bukkit.residence.Siege; + +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class ResidenceSiege { + + private ClaimedResidence res; + private Long startsAt = 0L; + private Long endsAt = 0L; +// private Long lastSiegeEnded = 0L; + private Set attackers = new HashSet(); + private Set defenders = new HashSet(); + + private int schedId = -1; + + int siegeCooldown = 5; + + public ResidenceSiege() { + } + + public Long getEndsAt() { + return endsAt; + } + + public Long getCooldownEnd() { + return endsAt + (siegeCooldown * 1000); + } + + public void setEndsAt(Long endsAt) { + this.endsAt = endsAt; + } + +// public Long getLastSiegeEnded() { +// return lastSiegeEnded; +// } +// +// public void setLastSiegeEnded(Long lastSiegeEnded) { +// this.lastSiegeEnded = lastSiegeEnded; +// } + + public ClaimedResidence getRes() { + return res; + } + + public void setRes(ClaimedResidence res) { + this.res = res; + } + + public Set getDefenders() { + return defenders; + } + + public void addDefender(Player defender) { + this.defenders.add(defender); + } + + public void removeDefenders(Player defender) { + this.defenders.remove(defender); + } + + public Set getAttackers() { + return attackers; + } + + public void addAttacker(Player attacker) { + this.attackers.add(attacker); + } + + public void removeAttacker(Player attacker) { + this.attackers.remove(attacker); + } + + public Long getStartsAt() { + return startsAt; + } + + public void setStartsAt(Long startsAt) { + this.startsAt = startsAt; + } + + public int getSchedId() { + return schedId; + } + + public void setSchedId(int schedId) { + this.schedId = schedId; + } + +} diff --git a/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeListener.java b/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeListener.java new file mode 100644 index 000000000..e3ad30496 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeListener.java @@ -0,0 +1,99 @@ +package com.bekvon.bukkit.residence.Siege; + +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.BossBar.BossBarInfo; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; + +public class ResidenceSiegeListener implements Listener { + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void ResidenceSiegePreStartEvent(com.bekvon.bukkit.residence.event.ResidenceSiegePreStartEvent event) { + Debug.D("ResidenceSiegePreStartEvent"); + ClaimedResidence res = event.getRes(); + Player player = event.getAttacker(); + + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + Residence.getInstance().msg(player, lm.Siege_Started); + BossBarInfo barInfo = new BossBarInfo(rPlayer, "ResidenceSiege"); + Double secLeft = (res.getSiege().getStartsAt() - System.currentTimeMillis()) / 1000D; + barInfo.setKeepForTicks(22); + barInfo.setColor(BarColor.GREEN); + barInfo.setTitleOfBar("&7Siege starts in: [autoTimeLeft]"); + barInfo.setAdjustPerc(-(1D / secLeft)); + barInfo.setPercentage(secLeft, secLeft); + barInfo.setStyle(BarStyle.SEGMENTED_20); + rPlayer.removeBossBar(rPlayer.getBossBar("ResidenceSiege")); + barInfo.setAuto(20); + + rPlayer.addBossBar(barInfo); + + ResidencePlayer rOwner = Residence.getInstance().getPlayerManager().getResidencePlayer(res.getOwnerUUID()); + Residence.getInstance().msg(rOwner.getPlayer(), lm.Siege_Started); + barInfo = new BossBarInfo(rOwner, "ResidenceSiege"); + secLeft = (res.getSiege().getStartsAt() - System.currentTimeMillis()) / 1000D; + barInfo.setKeepForTicks(22); + barInfo.setColor(BarColor.GREEN); + barInfo.setTitleOfBar("&7Siege starts in: [autoTimeLeft]"); + barInfo.setAdjustPerc(-(1D / secLeft)); + barInfo.setPercentage(secLeft, secLeft); + barInfo.setStyle(BarStyle.SEGMENTED_20); + barInfo.setAuto(20); + rOwner.removeBossBar(rOwner.getBossBar("ResidenceSiege")); + rOwner.addBossBar(barInfo); + + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void ResidenceSiegeStartEvent(com.bekvon.bukkit.residence.event.ResidenceSiegeStartEvent event) { + + ClaimedResidence res = event.getRes(); + Player player = event.getAttacker(); + + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + BossBarInfo barInfo = new BossBarInfo(rPlayer, "ResidenceSiege"); + Double secLeft = (res.getSiege().getEndsAt() - System.currentTimeMillis()) / 1000D - 1; + barInfo.setKeepForTicks(22); + barInfo.setColor(BarColor.RED); + barInfo.setTitleOfBar("&cSiege ends in: [autoTimeLeft]"); + barInfo.setAdjustPerc(-(1D / secLeft)); + barInfo.setPercentage(secLeft, secLeft); + barInfo.setStyle(BarStyle.SEGMENTED_20); + barInfo.setAuto(20); + rPlayer.removeBossBar(rPlayer.getBossBar("ResidenceSiege")); + rPlayer.addBossBar(barInfo); + + ResidencePlayer rOwner = Residence.getInstance().getPlayerManager().getResidencePlayer(res.getOwnerUUID()); + barInfo = new BossBarInfo(rOwner, "ResidenceSiege"); + secLeft = (res.getSiege().getEndsAt() - System.currentTimeMillis()) / 1000D - 1; + barInfo.setKeepForTicks(22); + barInfo.setColor(BarColor.RED); + barInfo.setTitleOfBar("&cSiege ends in: [autoTimeLeft]"); + barInfo.setAdjustPerc(-(1D / secLeft)); + barInfo.setPercentage(secLeft, secLeft); + barInfo.setStyle(BarStyle.SEGMENTED_20); + barInfo.setAuto(20); + rOwner.removeBossBar(rOwner.getBossBar("ResidenceSiege")); + rOwner.addBossBar(barInfo); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void ResidenceSiegeEndEvent(com.bekvon.bukkit.residence.event.ResidenceSiegeEndEvent event) { + Debug.D("ResidenceSiegeEndEvent"); + event.getRes().endSiege(); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void ResidenceFlagCheckEvent(com.bekvon.bukkit.residence.event.ResidenceFlagCheckEvent event) { + + } +} diff --git a/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeManager.java b/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeManager.java new file mode 100644 index 000000000..9ab35ad83 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeManager.java @@ -0,0 +1,9 @@ +package com.bekvon.bukkit.residence.Siege; + +public class ResidenceSiegeManager { + + public ResidenceSiegeManager() { + + } + +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10.java b/src/com/bekvon/bukkit/residence/allNms/v1_10.java deleted file mode 100644 index 72c4eec8e..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; -import org.bukkit.entity.Player; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.entity.PolarBear; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.NMS; -import com.bekvon.bukkit.residence.Residence; - -public class v1_10 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof PolarBear); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { - case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case SPRUCE_DOOR: - case BIRCH_DOOR: - case JUNGLE_DOOR: - case ACACIA_DOOR: - case DARK_OAK_DOOR: - case SPRUCE_FENCE_GATE: - case BIRCH_FENCE_GATE: - case JUNGLE_FENCE_GATE: - case ACACIA_FENCE_GATE: - case DARK_OAK_FENCE_GATE: - case TRAP_DOOR: - case IRON_TRAPDOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: - case STRING: - case WALL_BANNER: - case WALL_SIGN: - case SAPLING: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - return false; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode); - } - - @Override - public boolean isPlate(Material mat) { - return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public Block getTargetBlock(Player player, int range) { - return player.getTargetBlock((Set) null, range); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } - - @SuppressWarnings("incomplete-switch") - @Override - public boolean isBoat(Material mat) { - switch (mat) { - case BOAT: - case BOAT_ACACIA: - case BOAT_BIRCH: - case BOAT_DARK_OAK: - case BOAT_JUNGLE: - case BOAT_SPRUCE: - return true; - } - return false; - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java new file mode 100644 index 000000000..68007edd4 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java @@ -0,0 +1,252 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.PolarBear; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_10_R1.EnumParticle; +import net.minecraft.server.v1_10_R1.Packet; +import net.minecraft.server.v1_10_R1.PacketPlayOutWorldParticles; + +public class v1_10_R1 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof PolarBear); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { + case LEVER: + case PISTON: + case STICKY_PISTON: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (CMIMaterial.get(block)) { + case COBWEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; + + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + Packet packet = null; + if (ef.getParticle().getEffect() == null) + return; + if (!ef.getParticle().isParticle()) { +// int packetData = effect.getId(); +// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); + } else { + Particle effect = ef.getParticle().getParticle(); + + EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); + int[] extra = ef.getParticle().getExtra(); + if (particle == null) { + for (EnumParticle p : EnumParticle.values()) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + } + if (extra == null) { + extra = new int[0]; + } + } + + if (particle == null) + return; + + if (ef.getParticle().getEnumParticle() == null) { + ef.getParticle().setEnumParticle(particle); + ef.getParticle().setExtra(extra); + } + + packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), + (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); + } + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + if (packet == null) + return; + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11.java b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java similarity index 54% rename from src/com/bekvon/bukkit/residence/allNms/v1_11.java rename to src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java index d7ac9c36f..3e9211d36 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java @@ -3,11 +3,13 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Set; import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Particle; import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer; import org.bukkit.entity.Bat; import org.bukkit.entity.Chicken; import org.bukkit.entity.Cow; @@ -20,24 +22,30 @@ import org.bukkit.entity.Ocelot; import org.bukkit.entity.Pig; import org.bukkit.entity.Player; +import org.bukkit.entity.PolarBear; import org.bukkit.entity.Rabbit; import org.bukkit.entity.Sheep; import org.bukkit.entity.Snowman; import org.bukkit.entity.Squid; import org.bukkit.entity.Villager; import org.bukkit.entity.Wolf; -import org.bukkit.entity.PolarBear; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; -import com.bekvon.bukkit.residence.Residence; -public class v1_11 implements NMS { +import net.minecraft.server.v1_11_R1.EnumParticle; +import net.minecraft.server.v1_11_R1.Packet; +import net.minecraft.server.v1_11_R1.PacketPlayOutWorldParticles; + +public class v1_11_R1 implements NMS { @Override public List getPistonRetractBlocks(BlockPistonRetractEvent event) { List blocks = new ArrayList(); @@ -61,7 +69,7 @@ public boolean isAnimal(Entity ent) { ent instanceof Villager || ent instanceof Rabbit || ent instanceof Llama || - ent instanceof PolarBear|| + ent instanceof PolarBear || ent instanceof Donkey); } @@ -78,53 +86,50 @@ public boolean isArmorStandMaterial(Material material) { @SuppressWarnings("deprecation") @Override public boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case SPRUCE_DOOR: - case BIRCH_DOOR: - case JUNGLE_DOOR: - case ACACIA_DOOR: - case DARK_OAK_DOOR: - case SPRUCE_FENCE_GATE: - case BIRCH_FENCE_GATE: - case JUNGLE_FENCE_GATE: - case ACACIA_FENCE_GATE: - case DARK_OAK_FENCE_GATE: - case TRAP_DOOR: - case IRON_TRAPDOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: + case PISTON: + case STICKY_PISTON: case DRAGON_EGG: return true; default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); } } @Override public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: + switch (CMIMaterial.get(block)) { + case COBWEB: case STRING: case WALL_BANNER: case WALL_SIGN: - case SAPLING: case VINE: case TRIPWIRE_HOOK: case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: case PAINTING: case ITEM_FRAME: return true; default: break; } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; return false; } @@ -149,7 +154,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode); + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); /* 1.11 Shulker Box */ matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); @@ -165,16 +170,11 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container); matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container); matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.SILVER_SHULKER_BOX, Flags.container); + matUseFlagList.put(CMIMaterial.LIGHT_GRAY_SHULKER_BOX.getMaterial(), Flags.container); matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); } - @Override - public boolean isPlate(Material mat) { - return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return event.getHand() == EquipmentSlot.HAND ? true : false; @@ -185,11 +185,6 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInMainHand(); } - @Override - public Block getTargetBlock(Player player, int range) { - return player.getTargetBlock((Set) null, range); - } - @Override public boolean isChorusTeleport(TeleportCause tpcause) { if (tpcause == TeleportCause.CHORUS_FRUIT) @@ -197,18 +192,82 @@ public boolean isChorusTeleport(TeleportCause tpcause) { return false; } - @SuppressWarnings("incomplete-switch") @Override - public boolean isBoat(Material mat) { - switch (mat) { - case BOAT: - case BOAT_ACACIA: - case BOAT_BIRCH: - case BOAT_DARK_OAK: - case BOAT_JUNGLE: - case BOAT_SPRUCE: - return true; + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + Packet packet = null; + if (ef.getParticle().getEffect() == null) + return; + if (!ef.getParticle().isParticle()) { +// int packetData = effect.getId(); +// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); + } else { + Particle effect = ef.getParticle().getParticle(); + + EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); + int[] extra = ef.getParticle().getExtra(); + if (particle == null) { + for (EnumParticle p : EnumParticle.values()) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + } + if (extra == null) { + extra = new int[0]; + } + } + + if (particle == null) + return; + + if (ef.getParticle().getEnumParticle() == null) { + ef.getParticle().setEnumParticle(particle); + ef.getParticle().setExtra(extra); + } + + packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), + (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); } - return false; + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + if (packet == null) + return; + cPlayer.getHandle().playerConnection.sendPacket(packet); } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12.java b/src/com/bekvon/bukkit/residence/allNms/v1_12.java deleted file mode 100644 index 7041defee..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_12.java +++ /dev/null @@ -1,197 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.*; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.NMS; -import com.bekvon.bukkit.residence.Residence; - -public class v1_12 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof Llama || - ent instanceof PolarBear || - ent instanceof Parrot|| - ent instanceof Donkey); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { - case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case SPRUCE_DOOR: - case BIRCH_DOOR: - case JUNGLE_DOOR: - case ACACIA_DOOR: - case DARK_OAK_DOOR: - case SPRUCE_FENCE_GATE: - case BIRCH_FENCE_GATE: - case JUNGLE_FENCE_GATE: - case ACACIA_FENCE_GATE: - case DARK_OAK_FENCE_GATE: - case TRAP_DOOR: - case IRON_TRAPDOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: - case STRING: - case WALL_BANNER: - case WALL_SIGN: - case SAPLING: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - return false; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode); - - /* 1.11 Shulker Box */ - matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.BLUE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.BROWN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.CYAN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.GRAY_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.GREEN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.LIGHT_BLUE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.LIME_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.MAGENTA_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.ORANGE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.SILVER_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); - } - - @Override - public boolean isPlate(Material mat) { - return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public Block getTargetBlock(Player player, int range) { - return player.getTargetBlock((Set) null, range); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } - - @SuppressWarnings("incomplete-switch") - @Override - public boolean isBoat(Material mat) { - switch (mat) { - case BOAT: - case BOAT_ACACIA: - case BOAT_BIRCH: - case BOAT_DARK_OAK: - case BOAT_JUNGLE: - case BOAT_SPRUCE: - return true; - } - return false; - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java new file mode 100644 index 000000000..1d33d04ad --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java @@ -0,0 +1,275 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Donkey; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Llama; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Parrot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.PolarBear; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_12_R1.EnumParticle; +import net.minecraft.server.v1_12_R1.Packet; +import net.minecraft.server.v1_12_R1.PacketPlayOutWorldParticles; + +public class v1_12_R1 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof Llama || + ent instanceof PolarBear || + ent instanceof Parrot || + ent instanceof Donkey); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { + case LEVER: + case PISTON: + case STICKY_PISTON: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (CMIMaterial.get(block)) { + case COBWEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + + /* 1.11 Shulker Box */ + matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.BLUE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.BROWN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.CYAN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.GRAY_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.GREEN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.LIGHT_BLUE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.LIME_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.MAGENTA_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.ORANGE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container); + matUseFlagList.put(CMIMaterial.LIGHT_GRAY_SHULKER_BOX.getMaterial(), Flags.container); + matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + Packet packet = null; + if (ef.getParticle().getEffect() == null) + return; + if (!ef.getParticle().isParticle()) { +// int packetData = effect.getId(); +// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); + } else { + Particle effect = ef.getParticle().getParticle(); + + EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); + int[] extra = ef.getParticle().getExtra(); + if (particle == null) { + for (EnumParticle p : EnumParticle.values()) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + } + if (extra == null) { + extra = new int[0]; + } + } + + if (particle == null) + return; + + if (ef.getParticle().getEnumParticle() == null) { + ef.getParticle().setEnumParticle(particle); + ef.getParticle().setExtra(extra); + } + + packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), + (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); + } + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + if (packet == null) + return; + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java new file mode 100644 index 000000000..8bb9cf254 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java @@ -0,0 +1,257 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle.DustOptions; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_13_R1.CraftParticle; +import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cod; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Dolphin; +import org.bukkit.entity.Donkey; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Llama; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Parrot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.PolarBear; +import org.bukkit.entity.PufferFish; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Salmon; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.TropicalFish; +import org.bukkit.entity.Turtle; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import com.bekvon.bukkit.residence.CMILib.CMIEffectManager.CMIParticle; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_13_R1.Packet; +import net.minecraft.server.v1_13_R1.PacketPlayOutWorldParticles; + +public class v1_13_R1 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof Llama || + ent instanceof PolarBear || + ent instanceof Parrot || + ent instanceof Donkey || + ent instanceof Cod || + ent instanceof Salmon || + ent instanceof PufferFish || + ent instanceof TropicalFish || + ent instanceof Turtle || + ent instanceof Dolphin); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { + case LEVER: + case PISTON: + case STICKY_PISTON: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (CMIMaterial.get(block)) { + case COBWEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); + + /* 1.11 Shulker Box */ + matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.BLUE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.BROWN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.CYAN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.GRAY_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.GREEN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.LIGHT_BLUE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.LIME_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.MAGENTA_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.ORANGE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container); + matUseFlagList.put(CMIMaterial.LIGHT_GRAY_SHULKER_BOX.getMaterial(), Flags.container); + matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); + + /* 1.13 Shulker Box */ + + matUseFlagList.put(CMIMaterial.OAK_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.IRON_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.SPRUCE_DOOR_ITEM.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.BIRCH_DOOR_ITEM.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.JUNGLE_DOOR_ITEM.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.ACACIA_DOOR_ITEM.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.DARK_OAK_DOOR_ITEM.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.OAK_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.ACACIA_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.BIRCH_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.DARK_OAK_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.IRON_DOOR_BLOCK.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.JUNGLE_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.SPRUCE_DOOR.getMaterial(), Flags.door); + + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + + CMIParticle effect = ef.getParticle(); + if (effect == null) + return; + if (!effect.isParticle()) { + return; + } + + org.bukkit.Particle particle = effect.getParticle(); + + if (particle == null) + return; + +// CMI.getInstance().d(particle, effect.name()); + + DustOptions dd = null; + if (particle.equals(org.bukkit.Particle.REDSTONE)) + dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); + + Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), + (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); + + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index b818e81e8..0d5d17869 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -1,12 +1,15 @@ package com.bekvon.bukkit.residence.allNms; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Map; + +import org.bukkit.Effect; import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.entity.Bat; import org.bukkit.entity.Chicken; import org.bukkit.entity.Cow; @@ -28,9 +31,13 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; +import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; + public class v1_7_Couldron implements NMS { @Override public List getPistonRetractBlocks(BlockPistonRetractEvent event) { @@ -58,41 +65,51 @@ public boolean isArmorStandMaterial(Material material) { @SuppressWarnings("deprecation") @Override public boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case TRAP_DOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: + case PISTON: + case STICKY_PISTON: case DRAGON_EGG: return true; default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); } } @Override public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: + switch (CMIMaterial.get(block)) { + case COBWEB: case STRING: + case WALL_BANNER: case WALL_SIGN: - case SAPLING: case VINE: case TRIPWIRE_HOOK: case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: case PAINTING: case ITEM_FRAME: return true; default: break; } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; + return false; } @@ -105,11 +122,6 @@ public boolean isSpectator(GameMode mode) { public void addDefaultFlags(Map matUseFlagList) { } - @Override - public boolean isPlate(Material mat) { - return false; - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return true; @@ -121,24 +133,24 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInHand(); } - @SuppressWarnings("deprecation") - @Override - public Block getTargetBlock(Player player, int range) { - return player.getTargetBlock((HashSet) null, range); - } - @Override public boolean isChorusTeleport(TeleportCause tpcause) { return false; } - @SuppressWarnings("incomplete-switch") @Override - public boolean isBoat(Material mat) { - switch (mat) { - case BOAT: - return true; - } - return false; + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + Effect effect = ef.getParticle().getEffect(); + if (effect == null) + return; + PacketPlayOutWorldParticles packet = new PacketPlayOutWorldParticles(effect.name(), (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), + (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); + cPlayer.getHandle().playerConnection.sendPacket(packet); } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java similarity index 62% rename from src/com/bekvon/bukkit/residence/allNms/v1_7.java rename to src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java index 333cd3ab1..2c6f8f46b 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java @@ -1,12 +1,15 @@ package com.bekvon.bukkit.residence.allNms; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Map; + +import org.bukkit.Effect; import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.entity.Bat; import org.bukkit.entity.Chicken; import org.bukkit.entity.Cow; @@ -28,10 +31,14 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; -public class v1_7 implements NMS { +import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; + +public class v1_7_R4 implements NMS { @Override public List getPistonRetractBlocks(BlockPistonRetractEvent event) { List blocks = new ArrayList(); @@ -58,41 +65,51 @@ public boolean isArmorStandMaterial(Material material) { @SuppressWarnings("deprecation") @Override public boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case TRAP_DOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: + case PISTON: + case STICKY_PISTON: case DRAGON_EGG: return true; default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); } } @Override public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: + switch (CMIMaterial.get(block)) { + case COBWEB: case STRING: + case WALL_BANNER: case WALL_SIGN: - case SAPLING: case VINE: case TRIPWIRE_HOOK: case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: case PAINTING: case ITEM_FRAME: return true; default: break; } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; + return false; } @@ -105,11 +122,6 @@ public boolean isSpectator(GameMode mode) { public void addDefaultFlags(Map matUseFlagList) { } - @Override - public boolean isPlate(Material mat) { - return false; - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return true; @@ -121,24 +133,24 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInHand(); } - @SuppressWarnings("deprecation") - @Override - public Block getTargetBlock(Player player, int range) { - return player.getTargetBlock((HashSet) null, range); - } - @Override public boolean isChorusTeleport(TeleportCause tpcause) { return false; } - @SuppressWarnings("incomplete-switch") @Override - public boolean isBoat(Material mat) { - switch (mat) { - case BOAT: - return true; - } - return false; + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + Effect effect = ef.getParticle().getEffect(); + if (effect == null) + return; + PacketPlayOutWorldParticles packet = new PacketPlayOutWorldParticles(effect.name(), (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), + (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); + cPlayer.getHandle().playerConnection.sendPacket(packet); } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8.java b/src/com/bekvon/bukkit/residence/allNms/v1_8.java deleted file mode 100644 index 44c586493..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8.java +++ /dev/null @@ -1,173 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; -import org.bukkit.entity.Player; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.NMS; - -public class v1_8 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager - || ent instanceof Rabbit); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { - case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case SPRUCE_DOOR: - case BIRCH_DOOR: - case JUNGLE_DOOR: - case ACACIA_DOOR: - case DARK_OAK_DOOR: - case SPRUCE_FENCE_GATE: - case BIRCH_FENCE_GATE: - case JUNGLE_FENCE_GATE: - case ACACIA_FENCE_GATE: - case DARK_OAK_FENCE_GATE: - case TRAP_DOOR: - case IRON_TRAPDOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: - case STRING: - case WALL_BANNER: - case WALL_SIGN: - case SAPLING: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - return false; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - /* 1.8 day light sensor */ - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode); - } - - @Override - public boolean isPlate(Material mat) { - return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return true; - } - - @SuppressWarnings("deprecation") - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInHand(); - } - - @Override - public Block getTargetBlock(Player player, int range) { - return player.getTargetBlock((Set) null, range); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - return false; - } - - @SuppressWarnings("incomplete-switch") - @Override - public boolean isBoat(Material mat) { - switch (mat) { - case BOAT: - return true; - } - return false; - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java new file mode 100644 index 000000000..881223f66 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java @@ -0,0 +1,238 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_8_R1.EnumParticle; +import net.minecraft.server.v1_8_R1.Packet; +import net.minecraft.server.v1_8_R1.PacketPlayOutWorldParticles; + +public class v1_8_R1 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager + || ent instanceof Rabbit); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { + case LEVER: + case PISTON: + case STICKY_PISTON: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (CMIMaterial.get(block)) { + case COBWEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; + + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + /* 1.8 day light sensor */ + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return true; + } + + @SuppressWarnings("deprecation") + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + Packet packet = null; + if (ef.getParticle().getEffect() == null) + return; + if (!ef.getParticle().isParticle()) { +// int packetData = effect.getId(); +// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); + } else { + Effect effect = ef.getParticle().getEffect(); + + EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); + int[] extra = ef.getParticle().getExtra(); + if (particle == null) { + for (EnumParticle p : EnumParticle.values()) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + } + if (extra == null) { + extra = new int[0]; + } + } + + if (particle == null) + return; + + if (ef.getParticle().getEnumParticle() == null) { + ef.getParticle().setEnumParticle(particle); + ef.getParticle().setExtra(extra); + } + + packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), + (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); + } + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + if (packet == null) + return; + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java new file mode 100644 index 000000000..18b6ecdb4 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java @@ -0,0 +1,238 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_8_R2.EnumParticle; +import net.minecraft.server.v1_8_R2.Packet; +import net.minecraft.server.v1_8_R2.PacketPlayOutWorldParticles; + +public class v1_8_R2 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager + || ent instanceof Rabbit); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { + case LEVER: + case PISTON: + case STICKY_PISTON: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (CMIMaterial.get(block)) { + case COBWEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; + + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + /* 1.8 day light sensor */ + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return true; + } + + @SuppressWarnings("deprecation") + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + Packet packet = null; + if (ef.getParticle().getEffect() == null) + return; + if (!ef.getParticle().isParticle()) { +// int packetData = effect.getId(); +// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); + } else { + Effect effect = ef.getParticle().getEffect(); + + EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); + int[] extra = ef.getParticle().getExtra(); + if (particle == null) { + for (EnumParticle p : EnumParticle.values()) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + } + if (extra == null) { + extra = new int[0]; + } + } + + if (particle == null) + return; + + if (ef.getParticle().getEnumParticle() == null) { + ef.getParticle().setEnumParticle(particle); + ef.getParticle().setExtra(extra); + } + + packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), + (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); + } + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + if (packet == null) + return; + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java new file mode 100644 index 000000000..1890c522b --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java @@ -0,0 +1,238 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_8_R3.EnumParticle; +import net.minecraft.server.v1_8_R3.Packet; +import net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles; + +public class v1_8_R3 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager + || ent instanceof Rabbit); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { + case LEVER: + case PISTON: + case STICKY_PISTON: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (CMIMaterial.get(block)) { + case COBWEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; + + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + /* 1.8 day light sensor */ + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return true; + } + + @SuppressWarnings("deprecation") + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + Packet packet = null; + if (ef.getParticle().getEffect() == null) + return; + if (!ef.getParticle().isParticle()) { +// int packetData = effect.getId(); +// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); + } else { + Effect effect = ef.getParticle().getEffect(); + + EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); + int[] extra = ef.getParticle().getExtra(); + if (particle == null) { + for (EnumParticle p : EnumParticle.values()) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + } + if (extra == null) { + extra = new int[0]; + } + } + + if (particle == null) + return; + + if (ef.getParticle().getEnumParticle() == null) { + ef.getParticle().setEnumParticle(particle); + ef.getParticle().setExtra(extra); + } + + packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), + (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); + } + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + if (packet == null) + return; + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9.java b/src/com/bekvon/bukkit/residence/allNms/v1_9.java deleted file mode 100644 index 1d63636d1..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; -import org.bukkit.entity.Player; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.NMS; - -public class v1_9 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager - || ent instanceof Rabbit); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - switch (mat) { - case LEVER: - case STONE_BUTTON: - case WOOD_BUTTON: - case WOODEN_DOOR: - case SPRUCE_DOOR: - case BIRCH_DOOR: - case JUNGLE_DOOR: - case ACACIA_DOOR: - case DARK_OAK_DOOR: - case SPRUCE_FENCE_GATE: - case BIRCH_FENCE_GATE: - case JUNGLE_FENCE_GATE: - case ACACIA_FENCE_GATE: - case DARK_OAK_FENCE_GATE: - case TRAP_DOOR: - case IRON_TRAPDOOR: - case FENCE_GATE: - case PISTON_BASE: - case PISTON_STICKY_BASE: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (block.getType()) { - case AIR: - case WEB: - case STRING: - case WALL_BANNER: - case WALL_SIGN: - case SAPLING: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case STONE_BUTTON: - case WOOD_BUTTON: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - return false; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - - matUseFlagList.put(Material.DAYLIGHT_DETECTOR_INVERTED, Flags.diode); - } - - @Override - public boolean isPlate(Material mat) { - return mat == Material.GOLD_PLATE || mat == Material.IRON_PLATE; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public Block getTargetBlock(Player player, int range) { - return player.getTargetBlock((Set) null, range); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } - - @SuppressWarnings("incomplete-switch") - @Override - public boolean isBoat(Material mat) { - switch (mat) { - case BOAT: - case BOAT_ACACIA: - case BOAT_BIRCH: - case BOAT_DARK_OAK: - case BOAT_JUNGLE: - case BOAT_SPRUCE: - return true; - } - return false; - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java new file mode 100644 index 000000000..e16f7f5ea --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java @@ -0,0 +1,240 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_9_R1.EnumParticle; +import net.minecraft.server.v1_9_R1.Packet; +import net.minecraft.server.v1_9_R1.PacketPlayOutWorldParticles; + +public class v1_9_R1 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager + || ent instanceof Rabbit); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { + case LEVER: + case PISTON: + case STICKY_PISTON: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (CMIMaterial.get(block)) { + case COBWEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; + + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + Packet packet = null; + if (ef.getParticle().getEffect() == null) + return; + if (!ef.getParticle().isParticle()) { +// int packetData = effect.getId(); +// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); + } else { + Particle effect = ef.getParticle().getParticle(); + + EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); + int[] extra = ef.getParticle().getExtra(); + if (particle == null) { + for (EnumParticle p : EnumParticle.values()) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + } + if (extra == null) { + extra = new int[0]; + } + } + + if (particle == null) + return; + + if (ef.getParticle().getEnumParticle() == null) { + ef.getParticle().setEnumParticle(particle); + ef.getParticle().setExtra(extra); + } + + packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), + (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); + } + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + if (packet == null) + return; + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java new file mode 100644 index 000000000..c5ddf9194 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java @@ -0,0 +1,240 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_9_R2.EnumParticle; +import net.minecraft.server.v1_9_R2.Packet; +import net.minecraft.server.v1_9_R2.PacketPlayOutWorldParticles; + +public class v1_9_R2 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig + || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager + || ent instanceof Rabbit); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { + case LEVER: + case PISTON: + case STICKY_PISTON: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (CMIMaterial.get(block)) { + case COBWEB: + case STRING: + case WALL_BANNER: + case WALL_SIGN: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; + + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Doors */ + matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); + matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); + matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); + matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); + matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + Packet packet = null; + if (ef.getParticle().getEffect() == null) + return; + if (!ef.getParticle().isParticle()) { +// int packetData = effect.getId(); +// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); + } else { + Particle effect = ef.getParticle().getParticle(); + + EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); + int[] extra = ef.getParticle().getExtra(); + if (particle == null) { + for (EnumParticle p : EnumParticle.values()) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { + extra = new int[] { 0 }; + } else { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + } + break; + } + } + if (extra == null) { + extra = new int[0]; + } + } + + if (particle == null) + return; + + if (ef.getParticle().getEnumParticle() == null) { + ef.getParticle().setEnumParticle(particle); + ef.getParticle().setExtra(extra); + } + + packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), + (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); + } + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + if (packet == null) + return; + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index c3d1c26af..7b8fbca2d 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -84,9 +84,9 @@ else if (args.length == 3) plugin.getSelectionManager().modify(player, false, amount); - if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + if (plugin.getSelectionManager().hasPlacedBoth(player)) { if (plugin.getWorldEdit() != null) { - if (plugin.getWepid() == plugin.getConfigManager().getSelectionTooldID()) { + if (plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { plugin.getSelectionManager().worldEdit(player); } } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 831bcef59..68922a625 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -18,6 +18,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Utils; public class market implements cmd { Residence plugin; @@ -113,7 +114,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (args.length != 3) { return false; } - Block block = plugin.getNms().getTargetBlock(player, 10); + Block block = Utils.getTargetBlock(player, 10); if (!(block.getState() instanceof Sign)) { plugin.msg(player, lm.Sign_LookAt); diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index 1fc1f4913..f7434ce50 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -2,12 +2,12 @@ import java.util.Arrays; -import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; @@ -27,7 +27,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return false; } try { - plugin.msg(player, lm.General_MaterialGet, args[1], Material.getMaterial(Integer.parseInt(args[1])).name()); + plugin.msg(player, lm.General_MaterialGet, args[1], CMIMaterial.get(Integer.parseInt(args[1])).getName()); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Material); } diff --git a/src/com/bekvon/bukkit/residence/commands/siege.java b/src/com/bekvon/bukkit/residence/commands/siege.java new file mode 100644 index 000000000..80c9cd5f9 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/siege.java @@ -0,0 +1,105 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.event.ResidenceSiegeEndEvent; +import com.bekvon.bukkit.residence.event.ResidenceSiegePreStartEvent; +import com.bekvon.bukkit.residence.event.ResidenceSiegeStartEvent; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Utils; + +public class siege implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3100) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + final Player player = (Player) sender; + + if (args.length != 1 && args.length != 2) + return false; + + ClaimedResidence res = null; + if (args.length == 2) + res = plugin.getResidenceManager().getByName(args[1]); + else + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + if (res.isOwner(player)) { + plugin.msg(player, lm.Siege_noSelf); + return true; + } + + final ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(res.getOwnerUUID()); + if (!rPlayer.isOnline()) { + plugin.msg(player, lm.Siege_isOffline); + return true; + } + + if (res.isUnderSiegeCooldown()) { + plugin.msg(player, lm.Siege_cooldown, Utils.to24hourShort(res.getSiege().getCooldownEnd() - System.currentTimeMillis() + 1000)); + return true; + } + + boolean started = res.startSiege(player); + + ResidenceSiegePreStartEvent pre = new ResidenceSiegePreStartEvent(res, player); + + Bukkit.getPluginManager().callEvent(pre); + if (pre.isCancelled()) { + res.endSiege(); + return true; + } + + final ClaimedResidence r = res; + if (started) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + ResidenceSiegeStartEvent start = new ResidenceSiegeStartEvent(r, player); + Bukkit.getPluginManager().callEvent(start); + } + }, ((res.getSiege().getStartsAt() - System.currentTimeMillis()) / 50)); + + res.getSiege().setSchedId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (r.getSiege().getSchedId() > 0) { + ResidenceSiegeEndEvent End = new ResidenceSiegeEndEvent(r); + Bukkit.getPluginManager().callEvent(End); + } + } + }, ((res.getSiege().getEndsAt() - System.currentTimeMillis()) / 50))); + + return true; + } + plugin.msg(player, "Cant start siege"); + + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Start siege on residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res siege [resName]")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index 6b108f6cf..6c2cd3088 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -2,12 +2,12 @@ import java.util.Arrays; -import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; @@ -25,8 +25,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Player player = (Player) sender; plugin.msg(player, lm.General_Separator); - plugin.msg(player, lm.Select_Tool, Material.getMaterial(plugin.getConfigManager().getSelectionTooldID())); - plugin.msg(player, lm.General_InfoTool, Material.getMaterial(plugin.getConfigManager().getInfoToolID())); + plugin.msg(player, lm.Select_Tool, CMIMaterial.get(plugin.getConfigManager().getSelectionTooldID()).getName()); + plugin.msg(player, lm.General_InfoTool, CMIMaterial.get(plugin.getConfigManager().getInfoToolID()).getName()); plugin.msg(player, lm.General_Separator); return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/NMS.java b/src/com/bekvon/bukkit/residence/containers/NMS.java index 94824a774..029ca6358 100644 --- a/src/com/bekvon/bukkit/residence/containers/NMS.java +++ b/src/com/bekvon/bukkit/residence/containers/NMS.java @@ -4,6 +4,7 @@ import java.util.Map; import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Entity; @@ -14,6 +15,8 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; + public interface NMS { public List getPistonRetractBlocks(BlockPistonRetractEvent event); @@ -32,15 +35,11 @@ public interface NMS { public void addDefaultFlags(Map matuseflaglist); - public boolean isPlate(Material mat); - public boolean isMainHand(PlayerInteractEvent event); - public Block getTargetBlock(Player player, int range); - public ItemStack itemInMainHand(Player player); public boolean isChorusTeleport(TeleportCause tpcause); - public boolean isBoat(Material mat); + void playEffect(Player player, Location location, CMIEffect ef); } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 281699d8b..4bec8444e 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -1,17 +1,20 @@ package com.bekvon.bukkit.residence.containers; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.UUID; +import java.util.Map.Entry; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.BossBar.BossBarInfo; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; @@ -366,4 +369,79 @@ public Player getPlayer() { this.updatePlayer(); return player; } + + HashMap barMap = new HashMap(); + + public void removeBossBar(BossBarInfo bossBar) { + if (bossBar == null) + return; + if (bossBar.getBar() != null) + bossBar.getBar().setVisible(false); + bossBar.cancelAutoScheduler(); + bossBar.cancelHideScheduler(); + barMap.remove(bossBar.getNameOfBar().toLowerCase()); + } + + public void addBossBar(BossBarInfo barInfo) { + if (!barMap.containsKey(barInfo.getNameOfBar().toLowerCase())) { + barMap.put(barInfo.getNameOfBar().toLowerCase(), barInfo); + Residence.getInstance().getBossBarManager().Show(barInfo); + } else { + BossBarInfo old = getBossBar(barInfo.getNameOfBar().toLowerCase()); + if (old != null) { + + if (barInfo.getColor() != null) + old.setColor(barInfo.getColor()); + + if (barInfo.getKeepFor() != null) + old.setKeepForTicks(barInfo.getKeepFor()); + + if (barInfo.getPercentage() != null) + old.setPercentage(barInfo.getPercentage()); + + if (barInfo.getUser() != null) + old.setUser(barInfo.getUser()); + + if (barInfo.getAdjustPerc() != null) + old.setAdjustPerc(barInfo.getAdjustPerc()); + + if (barInfo.getStyle() != null) + old.setStyle(barInfo.getStyle()); + + if (!barInfo.getTitleOfBar().isEmpty()) + old.setTitleOfBar(barInfo.getTitleOfBar()); + + if (barInfo.getBar() != null) + old.setBar(barInfo.getBar()); + + if (barInfo.getId() != null) + old.setId(barInfo.getId()); + + if (barInfo.getAuto() != null) + old.setAuto(barInfo.getAuto()); + } + Residence.getInstance().getBossBarManager().Show(old); + } + } + + public BossBarInfo getBossBar(String name) { + return barMap.get(name.toLowerCase()); + } + + public synchronized HashMap getBossBarInfo() { + return this.barMap; + } + + public synchronized void hideBossBars() { + for (Entry one : this.barMap.entrySet()) { + one.getValue().getBar().setVisible(false); + } + } + + public void clearBossMaps() { + for (Entry one : barMap.entrySet()) { + one.getValue().cancelHideScheduler(); + } + barMap.clear(); + } } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 6f556580f..9f095d175 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -89,6 +89,20 @@ public enum lm { Sign_ForSaleBottom("&5%1m\u00B3"), Sign_LookAt("&cYou are not looking at sign"), + Siege_Started("&7Siege started!"), + Siege_noSelf("&cCan't siege your own residence!"), + Siege_isOffline("&cCan't siege while owner is offline!"), + Siege_cooldown("&cToo soon for another siege on this residence! Wait %1"), + + info_years("&e%1 &6years "), + info_oneYear("&e%1 &6year "), + info_day("&e%1 &6days "), + info_oneDay("&e%1 &6day "), + info_hour("&e%1 &6hours "), + info_oneHour("&e%1 &6hour "), + info_min("&e%1 &6min "), + info_sec("&e%1 &6sec "), + Flag_Set("&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"), Flag_SetFailed("&cYou dont have access to &6%1 &cflag"), Flag_CheckTrue("&eFlag &6%1 &eapplies to player &6%2 &efor residence &6%3&e, value = &6%4"), diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceSiegeEndEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceSiegeEndEvent.java new file mode 100644 index 000000000..42aa82d75 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/event/ResidenceSiegeEndEvent.java @@ -0,0 +1,42 @@ +package com.bekvon.bukkit.residence.event; + +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class ResidenceSiegeEndEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + private ClaimedResidence res; + protected boolean cancelled; + + public ResidenceSiegeEndEvent(ClaimedResidence res) { + this.res = res; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean bln) { + cancelled = bln; + } + + public ClaimedResidence getRes() { + return res; + } +} diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceSiegePreStartEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceSiegePreStartEvent.java new file mode 100644 index 000000000..a9193deef --- /dev/null +++ b/src/com/bekvon/bukkit/residence/event/ResidenceSiegePreStartEvent.java @@ -0,0 +1,49 @@ +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class ResidenceSiegePreStartEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + private ClaimedResidence res; + private Player attacker; + protected boolean cancelled; + + public ResidenceSiegePreStartEvent(ClaimedResidence res, Player attacker) { + this.res = res; + this.attacker = attacker; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean bln) { + cancelled = bln; + } + + public ClaimedResidence getRes() { + return res; + } + + public Player getAttacker() { + return attacker; + } +} diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceSiegeStartEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceSiegeStartEvent.java new file mode 100644 index 000000000..ac795ce47 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/event/ResidenceSiegeStartEvent.java @@ -0,0 +1,49 @@ +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class ResidenceSiegeStartEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + private ClaimedResidence res; + private Player attacker; + protected boolean cancelled; + + public ResidenceSiegeStartEvent(ClaimedResidence res, Player attacker) { + this.res = res; + this.attacker = attacker; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean bln) { + cancelled = bln; + } + + public ClaimedResidence getRes() { + return res; + } + + public Player getAttacker() { + return attacker; + } +} diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index f72301903..a058a7f0d 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -3,12 +3,12 @@ import java.io.File; import java.util.Set; -import org.bukkit.Material; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.CommentedYamlConfiguration; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.ConfigReader; public class FlagUtil { @@ -50,17 +50,14 @@ public void load() { id = Integer.parseInt(value); } catch (Exception e) { } - - @SuppressWarnings("deprecation") - Material Mat = Material.getMaterial(id); + CMIMaterial Mat = CMIMaterial.get(id, data); if (Mat == null) - Mat = Material.STONE; - ItemStack item = new ItemStack(Mat, 1, (short) data); + Mat = CMIMaterial.STONE; + ItemStack item = Mat.newItemStack(); flagData.addFlagButton(oneFlag.toLowerCase(), item); } - - + } public FlagData getFlagData() { diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index 02d1aa64b..4fc612682 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -1,175 +1,177 @@ -package com.bekvon.bukkit.residence.itemlist; - -import org.bukkit.ChatColor; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.entity.Player; - -public class ItemList { - - protected List list; - protected ListType type; - - public ItemList(ListType listType) { - this(); - type = listType; - } - - protected ItemList() { - list = new ArrayList(); - } - - public static enum ListType { - BLACKLIST, WHITELIST, IGNORELIST, OTHER - } - - public ListType getType() { - return type; - } - - public boolean contains(Material mat) { - return list.contains(mat); - } - - public void add(Material mat) { - if (!list.contains(mat)) - list.add(mat); - } - - public boolean toggle(Material mat) { - if (list.contains(mat)) { - list.remove(mat); - return false; - } - list.add(mat); - return true; - } - - public void remove(Material mat) { - list.remove(mat); - } - - public boolean isAllowed(Material mat) { - if (type == ListType.BLACKLIST) { - if (list.contains(mat)) { - return false; - } - return true; - } else if (type == ListType.WHITELIST) { - if (list.contains(mat)) { - return true; - } - return false; - } - return true; - } - - public boolean isIgnored(Material mat) { - if (type == ListType.IGNORELIST) { - if (list.contains(mat)) { - return true; - } - } - return false; - } - - public boolean isListed(Material mat) { - return this.contains(mat); - } - - public int getListSize() { - return list.size(); - } - - public static ItemList readList(ConfigurationSection node) { - return ItemList.readList(node, new ItemList()); - } - - @SuppressWarnings("deprecation") - protected static ItemList readList(ConfigurationSection node, ItemList list) { - ListType type = ListType.valueOf(node.getString("Type", "").toUpperCase()); - list.type = type; - List items = node.getStringList("Items"); - if (items != null) { - for (String item : items) { - int parse = -1; - try { - parse = Integer.parseInt(item); - } catch (Exception ex) { - } - if (parse == -1) { - try { - list.add(Material.valueOf(item.toUpperCase())); - } catch (Exception ex) { - } - } else { - try { - list.add(Material.getMaterial(parse)); - } catch (Exception ex) { - } - } - } - } - return list; - } - - public void printList(Player player) { - StringBuilder builder = new StringBuilder(); - boolean first = true; - for (Material mat : list) { - if (!first) - builder.append(", "); - else - builder.append(ChatColor.YELLOW); - builder.append(mat); - first = false; - } - player.sendMessage(builder.toString()); - } - - public Material[] toArray() { - Material mats[] = new Material[list.size()]; - int i = 0; - for (Material mat : list) { - mats[i] = mat; - i++; - } - return mats; - } - - public Map save() { - Map saveMap = new LinkedHashMap(); - if (list.isEmpty()) - return saveMap; - saveMap.put("Type", type.toString()); - List saveList = new ArrayList(); - for (Material mat : list) { - saveList.add(mat.toString()); - } - saveMap.put("ItemList", saveList); - return saveMap; - } - - public static ItemList load(Map map) { - ItemList newlist = new ItemList(); - return load(map, newlist); - } - - protected static ItemList load(Map map, ItemList newlist) { - try { - newlist.type = ListType.valueOf((String) map.get("Type")); - @SuppressWarnings("unchecked") - List list = (List) map.get("ItemList"); - for (String item : list) { - newlist.add(Material.valueOf(item)); - } - } catch (Exception ex) { - } - return newlist; - } -} +package com.bekvon.bukkit.residence.itemlist; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; + +public class ItemList { + + protected List list; + protected ListType type; + + public ItemList(ListType listType) { + this(); + type = listType; + } + + protected ItemList() { + list = new ArrayList(); + } + + public static enum ListType { + BLACKLIST, WHITELIST, IGNORELIST, OTHER + } + + public ListType getType() { + return type; + } + + public boolean contains(Material mat) { + return list.contains(mat); + } + + public void add(Material mat) { + if (!list.contains(mat)) + list.add(mat); + } + + public boolean toggle(Material mat) { + if (list.contains(mat)) { + list.remove(mat); + return false; + } + list.add(mat); + return true; + } + + public void remove(Material mat) { + list.remove(mat); + } + + public boolean isAllowed(Material mat) { + if (type == ListType.BLACKLIST) { + if (list.contains(mat)) { + return false; + } + return true; + } else if (type == ListType.WHITELIST) { + if (list.contains(mat)) { + return true; + } + return false; + } + return true; + } + + public boolean isIgnored(Material mat) { + if (type == ListType.IGNORELIST) { + if (list.contains(mat)) { + return true; + } + } + return false; + } + + public boolean isListed(Material mat) { + return this.contains(mat); + } + + public int getListSize() { + return list.size(); + } + + public static ItemList readList(ConfigurationSection node) { + return ItemList.readList(node, new ItemList()); + } + + @SuppressWarnings("deprecation") + protected static ItemList readList(ConfigurationSection node, ItemList list) { + ListType type = ListType.valueOf(node.getString("Type", "").toUpperCase()); + list.type = type; + List items = node.getStringList("Items"); + if (items != null) { + for (String item : items) { + int parse = -1; + try { + parse = Integer.parseInt(item); + } catch (Exception ex) { + } + if (parse == -1) { + try { + list.add(CMIMaterial.get(item.toUpperCase()).getMaterial()); + } catch (Exception ex) { + } + } else { + try { + list.add(CMIMaterial.get(parse).getMaterial()); + } catch (Exception ex) { + } + } + } + } + return list; + } + + public void printList(Player player) { + StringBuilder builder = new StringBuilder(); + boolean first = true; + for (Material mat : list) { + if (!first) + builder.append(", "); + else + builder.append(ChatColor.YELLOW); + builder.append(mat); + first = false; + } + player.sendMessage(builder.toString()); + } + + public Material[] toArray() { + Material mats[] = new Material[list.size()]; + int i = 0; + for (Material mat : list) { + mats[i] = mat; + i++; + } + return mats; + } + + public Map save() { + Map saveMap = new LinkedHashMap(); + if (list.isEmpty()) + return saveMap; + saveMap.put("Type", type.toString()); + List saveList = new ArrayList(); + for (Material mat : list) { + saveList.add(mat.toString()); + } + saveMap.put("ItemList", saveList); + return saveMap; + } + + public static ItemList load(Map map) { + ItemList newlist = new ItemList(); + return load(map, newlist); + } + + protected static ItemList load(Map map, ItemList newlist) { + try { + newlist.type = ListType.valueOf((String) map.get("Type")); + @SuppressWarnings("unchecked") + List list = (List) map.get("ItemList"); + for (String item : list) { + newlist.add(Material.valueOf(item)); + } + } catch (Exception ex) { + } + return newlist; + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index b90ab8667..fb225db45 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -1,20 +1,24 @@ package com.bekvon.bukkit.residence.listeners; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Snowman; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.BlockState; +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.BlockBurnEvent; import org.bukkit.event.block.BlockDispenseEvent; @@ -28,22 +32,6 @@ import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPlaceEvent; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.commands.auto; -import com.bekvon.bukkit.residence.commands.auto.direction; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; import org.bukkit.event.block.BlockSpreadEvent; import org.bukkit.event.block.EntityBlockFormEvent; import org.bukkit.event.block.LeavesDecayEvent; @@ -55,10 +43,24 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.commands.auto.direction; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; +import com.bekvon.bukkit.residence.utils.VersionChecker.Version; + public class ResidenceBlockListener implements Listener { private List MessageInformed = new ArrayList(); - + private Set ResCreated = new HashSet(); public static Set newPlayers = new HashSet(); @@ -97,7 +99,17 @@ public void onAnvilInventoryClick(InventoryClickEvent e) { if (!res.getPermissions().has(Flags.anvilbreak, FlagCombo.OnlyFalse)) return; - b.setData((byte) 1); + if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_13_R1)) { + try { + b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 1); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { + e1.printStackTrace(); + } + } else { + // Waiting for 1.13+ fix + + } + } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -266,7 +278,7 @@ public void onIceMelt(BlockFadeEvent event) { if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - if (event.getNewState().getType() != Material.STATIONARY_WATER && event.getBlock().getState().getType() != Material.SNOW && event.getBlock().getState() + if (!CMIMaterial.get(event.getNewState().getType()).equals(CMIMaterial.WATER) && event.getBlock().getState().getType() != Material.SNOW && event.getBlock().getState() .getType() != Material.SNOW_BLOCK) return; @@ -403,7 +415,7 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { if (ResCreated.contains(player.getUniqueId())) return; - + if (!newPlayers.contains(player.getUniqueId())) return; @@ -419,7 +431,7 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { boolean created = plugin.getResidenceManager().addResidence(player, player.getName(), plugin.getSelectionManager().getPlayerLoc1(player.getName()), plugin.getSelectionManager().getPlayerLoc2(player.getName()), plugin.getConfigManager().isNewPlayerFree()); - if (created){ + if (created) { ResCreated.add(player.getUniqueId()); newPlayers.remove(player.getUniqueId()); } @@ -694,13 +706,13 @@ public void onBlockFromTo(BlockFromToEvent event) { return; } - if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { + if (mat == Material.LAVA) { if (!perms.has(Flags.lavaflow, hasflow)) { event.setCancelled(true); } return; } - if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { + if (mat == Material.WATER) { if (!perms.has(Flags.waterflow, hasflow)) { event.setCancelled(true); } @@ -718,13 +730,23 @@ public void onLandDryFade(BlockFadeEvent event) { if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - Material mat = event.getBlock().getType(); - if (mat != Material.SOIL) + CMIMaterial mat = CMIMaterial.get(event.getBlock()); + if (!mat.equals(CMIMaterial.FARMLAND)) return; FlagPermissions perms = plugin.getPermsByLoc(event.getNewState().getLocation()); if (!perms.has(Flags.dryup, true)) { - event.getBlock().setData((byte) 7); + Block b = event.getBlock(); + if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_13_R1)) { + try { + b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { + e1.printStackTrace(); + } + } else { + // Waiting for 1.13+ fix + + } event.setCancelled(true); return; } @@ -740,13 +762,23 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - Material mat = event.getBlock().getType(); - if (mat != Material.SOIL) + CMIMaterial mat = CMIMaterial.get(event.getBlock()); + if (!mat.equals(CMIMaterial.FARMLAND)) return; FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (!perms.has(Flags.dryup, true)) { - event.getBlock().setData((byte) 7); + Block b = event.getBlock(); + if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_13_R1)) { + try { + b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { + e1.printStackTrace(); + } + } else { + // Waiting for 1.13+ fix + + } event.setCancelled(true); return; } @@ -808,13 +840,13 @@ public void onLavaWaterFlow(BlockFromToEvent event) { return; if (plugin.getConfigManager().isNoLava()) - if (mat == Material.LAVA || mat == Material.STATIONARY_LAVA) { + if (mat == Material.LAVA) { event.setCancelled(true); return; } if (plugin.getConfigManager().isNoWater()) - if (mat == Material.WATER || mat == Material.STATIONARY_WATER) { + if (mat == Material.WATER) { event.setCancelled(true); return; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 9d5bd742e..eac6509c9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -5,7 +5,6 @@ import java.util.List; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Arrow; import org.bukkit.entity.Creeper; @@ -47,17 +46,16 @@ import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; - import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceEntityListener implements Listener { @@ -77,11 +75,11 @@ public void onMinecartHopperItemMove(InventoryMoveItemEvent event) { if (plugin.isDisabledWorldListener(hopper.getWorld())) return; Block block = hopper.getLocation().getBlock(); - switch (block.getType()) { + switch (CMIMaterial.get(block)) { case ACTIVATOR_RAIL: case DETECTOR_RAIL: case POWERED_RAIL: - case RAILS: + case RAIL: return; } event.setCancelled(true); @@ -111,11 +109,11 @@ public void onEntityInteract(EntityInteractEvent event) { return; if (plugin.isDisabledWorldListener(block.getWorld())) return; - Material mat = block.getType(); + CMIMaterial mat = CMIMaterial.get(block); Entity entity = event.getEntity(); FlagPermissions perms = plugin.getPermsByLoc(block.getLocation()); boolean hastrample = perms.has(Flags.trample, perms.has(Flags.build, true)); - if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat == Material.SOIL || mat == Material.SOUL_SAND)) { + if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat.equals(CMIMaterial.FARMLAND) || mat.equals(CMIMaterial.SOUL_SAND))) { event.setCancelled(true); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java index 1da44b39a..285d8170d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java @@ -12,6 +12,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; public class ResidenceFixesListener implements Listener { @@ -32,7 +33,8 @@ public void onAnvilPlace(PlayerInteractEvent event) { Location loc = new Location(bclicked.getWorld(), bclicked.getX() + face.getModX(), bclicked.getY() + face.getModY(), bclicked.getZ() + face.getModZ()); Block block = loc.getBlock(); - if (block == null || block.getType() == Material.AIR || block.getType() != Material.SKULL && block.getType() != Material.FLOWER_POT) + CMIMaterial mat = CMIMaterial.get(block); + if (block == null || block.getType() == Material.AIR || !mat.isSkull() && block.getType() != Material.FLOWER_POT) return; event.setCancelled(true); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c1fca3b81..d653e21a2 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -56,6 +56,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -278,7 +279,7 @@ public void onResidenceDelete(ResidenceDeleteEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerFirstLogin(PlayerLoginEvent event) { - Player player = event.getPlayer() ; + Player player = event.getPlayer(); if (!player.hasPlayedBefore()) ResidenceBlockListener.newPlayers.add(player.getUniqueId()); } @@ -942,7 +943,7 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { @SuppressWarnings("deprecation") private boolean isContainer(Material mat, Block block) { return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container) - || plugin.getConfigManager().getCustomContainers().contains(block.getTypeId()); + || plugin.getConfigManager().getCustomContainers().contains(block.getType().getId()); } @SuppressWarnings("deprecation") @@ -970,7 +971,7 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { case "DAYLIGHT_DETECTOR_INVERTED": return true; default: - return plugin.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getTypeId())); + return plugin.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getType().getId())); } } @@ -1025,7 +1026,7 @@ public void onPlatePress(PlayerInteractEvent event) { Block block = event.getClickedBlock(); if (block == null) return; - Material mat = block.getType(); + CMIMaterial mat = CMIMaterial.get(block); Player player = event.getPlayer(); if (player.hasMetadata("NPC")) return; @@ -1034,13 +1035,12 @@ public void onPlatePress(PlayerInteractEvent event) { if (!resadmin) { boolean hasuse = perms.playerHas(player, Flags.use, true); boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); - if ((!hasuse && !haspressure || !haspressure) && (mat == Material.STONE_PLATE || mat == Material.WOOD_PLATE || plugin.getNms().isPlate(mat))) { + if ((!hasuse && !haspressure || !haspressure) && mat.isPlate()) { event.setCancelled(true); return; } } - if (!perms.playerHas(player, Flags.trample, perms.playerHas(player, Flags.build, true)) && (mat == Material.SOIL - || mat == Material.SOUL_SAND)) { + if (!perms.playerHas(player, Flags.trample, perms.playerHas(player, Flags.build, true)) && (mat.equals(CMIMaterial.FARMLAND) || mat.equals(CMIMaterial.SOUL_SAND))) { event.setCancelled(true); return; } @@ -1059,12 +1059,12 @@ public void onSelection(PlayerInteractEvent event) { Player player = event.getPlayer(); @SuppressWarnings("deprecation") - int heldItemId = player.getItemInHand().getTypeId(); + CMIMaterial heldItem = CMIMaterial.get(player.getItemInHand()); - if (heldItemId != plugin.getConfigManager().getSelectionTooldID()) + if (!heldItem.equals(plugin.getConfigManager().getSelectionTool())) return; - if (plugin.getWepid() == plugin.getConfigManager().getSelectionTooldID()) + if (plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) return; if (player.getGameMode() == GameMode.CREATIVE) @@ -1121,9 +1121,9 @@ public void onInfoCheck(PlayerInteractEvent event) { if (item == null) return; - int heldItemId = item.getTypeId(); + CMIMaterial heldItem = CMIMaterial.get(item); - if (heldItemId != plugin.getConfigManager().getInfoToolID()) + if (!heldItem.equals(plugin.getConfigManager().getInfoTool())) return; if (this.isContainer(block.getType(), block)) @@ -1136,6 +1136,7 @@ public void onInfoCheck(PlayerInteractEvent event) { plugin.getResidenceManager().printAreaInfo(res.getName(), player, false); else plugin.msg(player, lm.Residence_NoResHere); + event.setCancelled(true); return; @@ -1157,8 +1158,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { return; Player player = event.getPlayer(); ItemStack iih = plugin.getNms().itemInMainHand(player); - Material heldItem = iih.getType(); - int heldItemId = iih.getTypeId(); + CMIMaterial heldItem = CMIMaterial.get(iih); + Block block = event.getClickedBlock(); if (block == null) return; @@ -1167,8 +1168,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || plugin.getNms().isCanUseEntity_BothClick(mat, block))) { - if (heldItemId != plugin.getConfigManager().getSelectionTooldID() && heldItemId != plugin.getConfigManager().getInfoToolID() - && heldItem != Material.INK_SACK && !plugin.getNms().isArmorStandMaterial(heldItem) && !plugin.getNms().isBoat(heldItem) && !placingMinecart(block, iih)) { + if (!heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) + && !heldItem.isDye() && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { return; } } @@ -1182,7 +1183,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { PermissionGroup group = resPlayer.getGroup(); boolean resadmin = plugin.isResAdminOn(player); - if (!resadmin && !plugin.getItemManager().isAllowed(heldItem, group, world)) { + if (!resadmin && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), group, world)) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; @@ -1191,12 +1192,12 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (resadmin) return; - int blockId = block.getTypeId(); + CMIMaterial blockM = CMIMaterial.get(block); + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); if (heldItem != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (heldItem == Material.INK_SACK) { - if (plugin.getNms().itemInMainHand(player).getData().getData() == 15 && block.getType() == Material.GRASS || iih.getData().getData() == 3 - && blockId == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { + if (heldItem.isDye()) { + if (heldItem.equals(CMIMaterial.BONE_MEAL) && block.getType() == Material.GRASS || heldItem.equals(CMIMaterial.COCOA_BEANS) && blockM.equals(CMIMaterial.JUNGLE_WOOD)) { perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player, Flags.build, true)) { plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); @@ -1205,7 +1206,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } } - if (plugin.getNms().isArmorStandMaterial(heldItem) || plugin.getNms().isBoat(heldItem)) { + if (heldItem.equals(CMIMaterial.ARMOR_STAND) || heldItem.isBoat()) { perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player, Flags.build, true)) { plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); @@ -1247,21 +1248,21 @@ public void onPlayerInteract(PlayerInteractEvent event) { return; } - if (plugin.getConfigManager().getCustomContainers().contains(blockId)) { + if (plugin.getConfigManager().getCustomContainers().contains(blockM.getId())) { if (!perms.playerHas(player, Flags.container, hasuse)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.container.getName()); return; } } - if (plugin.getConfigManager().getCustomBothClick().contains(blockId)) { + if (plugin.getConfigManager().getCustomBothClick().contains(blockM.getId())) { if (!hasuse) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.use.getName()); return; } } - if (plugin.getConfigManager().getCustomRightClick().contains(blockId) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (plugin.getConfigManager().getCustomRightClick().contains(blockM.getId()) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (!hasuse) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.use.getName()); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index bfc0c9540..31ffa67d3 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -4,6 +4,7 @@ import org.bukkit.GameMode; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.Siege.ResidenceSiege; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeMessages; @@ -85,6 +86,8 @@ public class ClaimedResidence { private Residence plugin; + private ResidenceSiege siege; + public String getResidenceName() { return resName; } @@ -1024,12 +1027,10 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { if (!plugin.getNms().isEmptyBlock(loc.getBlock())) continue; - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA || loc.clone().add(0, -1, 0).getBlock().getState() - .getType() == Material.STATIONARY_LAVA) + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA) continue; - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER || loc.clone().add(0, -1, 0).getBlock().getState() - .getType() == Material.STATIONARY_WATER) + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER) continue; ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); @@ -1897,4 +1898,59 @@ public void setLeaseExpireTime(Long leaseExpireTime) { // public void setTown(Town town) { // this.town = town; // } + + public boolean isUnderSiege() { + return getSiege().getEndsAt() > System.currentTimeMillis() && getSiege().getStartsAt() < System.currentTimeMillis(); + } + + public boolean canSiege() { + return !isUnderSiege() && this.getSiege().getCooldownEnd() < System.currentTimeMillis(); + } + + public ResidenceSiege getSiege() { + if (siege == null) + siege = new ResidenceSiege(); + return siege; + } + + public boolean isUnderSiegeCooldown() { + return this.getSiege().getCooldownEnd() > System.currentTimeMillis(); + } + + int preSiegeDuration = 5; + int siegeDuration = 5; + + public boolean startSiege(Player attacker) { + + if (isUnderSiege()) + return false; + + if (this.getSiege().getCooldownEnd() > System.currentTimeMillis()) + return false; + + getSiege().addAttacker(attacker); + getSiege().addDefender(this.getRPlayer().getPlayer()); + getSiege().setStartsAt(System.currentTimeMillis() + (preSiegeDuration * 1000)); + getSiege().setEndsAt(getSiege().getStartsAt() + (siegeDuration * 1000)); + + return true; + } + + public void endSiege() { + getSiege().setEndsAt(System.currentTimeMillis()); + if (getSiege().getSchedId() > 0) { + Bukkit.getScheduler().cancelTask(getSiege().getSchedId()); + getSiege().setSchedId(-1); + } + + getSiege().setStartsAt(0L); + + for (Player one : this.getSiege().getAttackers()) { + Location outside = this.getOutsideFreeLoc(one.getLocation(), one); + if (outside != null) + one.teleport(outside); + } + this.getSiege().getAttackers().clear(); + this.getSiege().getDefenders().clear(); + } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 8838e1813..f30e2e92b 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -22,6 +22,7 @@ import org.bukkit.permissions.PermissionDefault; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeFlags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -184,31 +185,31 @@ public static void initValidFlags() { // addFlagToFlagGroup("fire", "ignite"); // addFlagToFlagGroup("fire", "firespread"); - addMaterialToUseFlag(Material.DIODE, Flags.diode); - addMaterialToUseFlag(Material.DIODE_BLOCK_OFF, Flags.diode); - addMaterialToUseFlag(Material.DIODE_BLOCK_ON, Flags.diode); - addMaterialToUseFlag(Material.REDSTONE_COMPARATOR, Flags.diode); - addMaterialToUseFlag(Material.REDSTONE_COMPARATOR_OFF, Flags.diode); - addMaterialToUseFlag(Material.REDSTONE_COMPARATOR_ON, Flags.diode); + addMaterialToUseFlag(CMIMaterial.REPEATER.getMaterial(), Flags.diode); +// addMaterialToUseFlag(CMIMaterial.DIODE_BLOCK_OFF.getMaterial(), Flags.diode); +// addMaterialToUseFlag(CMIMaterial.DIODE_BLOCK_ON.getMaterial(), Flags.diode); + addMaterialToUseFlag(CMIMaterial.COMPARATOR.getMaterial(), Flags.diode); +// addMaterialToUseFlag(CMIMaterial.REDSTONE_COMPARATOR_OFF.getMaterial(), Flags.diode); +// addMaterialToUseFlag(CMIMaterial.REDSTONE_COMPARATOR_ON.getMaterial(), Flags.diode); addMaterialToUseFlag(Material.DAYLIGHT_DETECTOR, Flags.diode); - addMaterialToUseFlag(Material.WORKBENCH, Flags.table); - addMaterialToUseFlag(Material.WOODEN_DOOR, Flags.door); + addMaterialToUseFlag(CMIMaterial.CRAFTING_TABLE.getMaterial(), Flags.table); + addMaterialToUseFlag(CMIMaterial.OAK_DOOR.getMaterial(), Flags.door); Residence.getInstance().getNms().addDefaultFlags(matUseFlagList); - addMaterialToUseFlag(Material.FENCE_GATE, Flags.door); - addMaterialToUseFlag(Material.NETHER_FENCE, Flags.door); - addMaterialToUseFlag(Material.TRAP_DOOR, Flags.door); - addMaterialToUseFlag(Material.ENCHANTMENT_TABLE, Flags.enchant); +// addMaterialToUseFlag(CMIMaterial.FENCE_GATE, Flags.door); +// addMaterialToUseFlag(Material.NETHER_FENCE, Flags.door); +// addMaterialToUseFlag(Material.TRAP_DOOR, Flags.door); + addMaterialToUseFlag(CMIMaterial.ENCHANTING_TABLE.getMaterial(), Flags.enchant); addMaterialToUseFlag(Material.STONE_BUTTON, Flags.button); addMaterialToUseFlag(Material.LEVER, Flags.lever); - addMaterialToUseFlag(Material.BED_BLOCK, Flags.bed); + addMaterialToUseFlag(CMIMaterial.BED_BLOCK.getMaterial(), Flags.bed); addMaterialToUseFlag(Material.BREWING_STAND, Flags.brew); addMaterialToUseFlag(Material.CAKE, Flags.cake); addMaterialToUseFlag(Material.NOTE_BLOCK, Flags.note); addMaterialToUseFlag(Material.DRAGON_EGG, Flags.egg); - addMaterialToUseFlag(Material.COMMAND, Flags.commandblock); - addMaterialToUseFlag(Material.WOOD_BUTTON, Flags.button); + addMaterialToUseFlag(CMIMaterial.COMMAND_BLOCK.getMaterial(), Flags.commandblock); + addMaterialToUseFlag(CMIMaterial.OAK_BUTTON.getMaterial(), Flags.button); addMaterialToUseFlag(Material.ANVIL, Flags.anvil); addMaterialToUseFlag(Material.FLOWER_POT, Flags.flowerpot); addMaterialToUseFlag(Material.BEACON, Flags.beacon); @@ -218,9 +219,9 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.HOPPER, Flags.container); addMaterialToUseFlag(Material.DROPPER, Flags.container); addMaterialToUseFlag(Material.FURNACE, Flags.container); - addMaterialToUseFlag(Material.BURNING_FURNACE, Flags.container); + addMaterialToUseFlag(CMIMaterial.BURNING_FURNACE.getMaterial(), Flags.container); addMaterialToUseFlag(Material.DISPENSER, Flags.container); - addMaterialToUseFlag(Material.CAKE_BLOCK, Flags.cake); + addMaterialToUseFlag(CMIMaterial.CAKE_BLOCK.getMaterial(), Flags.cake); } public static FlagPermissions parseFromConfigNode(String name, ConfigurationSection node) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 8a28e3ebd..b2c5549a2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -541,8 +541,8 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole temploc.setY(y); for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { temploc.setZ(z); - if (plugin.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getTypeId())) { - temploc.getBlock().setTypeId(0); + if (plugin.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getType().getId())) { + temploc.getBlock().setType(Material.AIR); } } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 53dd52c6c..bf8047ccf 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -13,6 +13,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.Siege.ResidenceSiege; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 23d524442..53830fbe0 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -19,6 +19,8 @@ import org.bukkit.permissions.PermissionDefault; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import com.bekvon.bukkit.residence.CMILib.CMIEffectManager.CMIParticle; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.SelectionSides; import com.bekvon.bukkit.residence.containers.Visualizer; @@ -782,28 +784,33 @@ private void showParticles(List locList, Player player, int timesMore, continue; Location l = locList.get(i); - if (plugin.isSpigot()) { - Effect effect = null; - if (sides) { - effect = error ? plugin.getConfigManager().getOverlapSpigotSides() : plugin.getConfigManager().getSelectedSpigotSides(); - } else { - effect = error ? plugin.getConfigManager().getOverlapSpigotFrame() : plugin.getConfigManager().getSelectedSpigotFrame(); - } - player.spigot().playEffect(l, effect, 0, 0, 0, 0, 0, 0, 1, 128); +// if (plugin.isSpigot()) { + CMIParticle effect = null; + if (sides) { + effect = error ? plugin.getConfigManager().getOverlapSpigotSides() : plugin.getConfigManager().getSelectedSpigotSides(); } else { - if (error) { - if (sides) - plugin.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, l, player); - else - plugin.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); - } else { - if (sides) - plugin.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, l, player); - else - plugin.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); - } + effect = error ? plugin.getConfigManager().getOverlapSpigotFrame() : plugin.getConfigManager().getSelectedSpigotFrame(); } + CMIEffect ef = new CMIEffect(effect); + + Residence.getInstance().getNms().playEffect(player, l, ef); + +// player.spigot().playEffect(l, effect, 0, 0, 0, 0, 0, 0, 1, 128); +// } else { +// if (error) { +// if (sides) +// plugin.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, l, player); +// else +// plugin.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); +// } else { +// if (sides) +// plugin.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, l, player); +// else +// plugin.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); +// } +// } + // if (!sameLocation) // trimed.add(l); } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 9fc2d390b..f17b168d7 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -127,7 +127,7 @@ private List getHelpData(CommandSender sender, boolean resadmin) { } FlagPermissions GlobalFlags = Residence.getInstance().getPermissionManager().getAllFlags(); - + Map unsortMap = new HashMap(); for (HelpEntry entry : subentrys) { @@ -255,9 +255,10 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { return entry; } + File langFile = new File(new File(Residence.getInstance().getDataLocation(), "Language"), "English.yml"); + @SuppressWarnings("deprecation") public Set getSubCommands(CommandSender sender, String[] args) { - File langFile = new File(new File(Residence.getInstance().getDataLocation(), "Language"), "English.yml"); Set subCommands = new HashSet(); if (langFile.isFile()) { @@ -406,7 +407,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { if (subCommand) return tempmeinPath.getKeys(false); - Bukkit.dispatchCommand(sender, command + " ?"); +// Bukkit.dispatchCommand(sender, command + " ?"); } return new HashSet(Arrays.asList("?")); } diff --git a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java index ac0ca4cba..75a8c5a07 100644 --- a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java +++ b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java @@ -1,1600 +1,1601 @@ -package com.bekvon.bukkit.residence.utils; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - -import com.bekvon.bukkit.residence.utils.ReflectionUtils.PackageType; - -/** - * ParticleEffect Library - *

- * This library was created by @DarkBlade12 and allows you to display all Minecraft particle effects on a Bukkit server - *

- * You are welcome to use it, modify it and redistribute it under the following conditions: - *

    - *
  • Don't claim this class as your own - *
  • Don't remove this disclaimer - *
- *

- * Special thanks: - *

    - *
  • @microgeek (original idea, names and packet parameters) - *
  • @ShadyPotato (1.8 names, ids and packet parameters) - *
  • @RingOfStorms (particle behavior) - *
  • @Cybermaxke (particle behavior) - *
- *

- * It would be nice if you provide credit to me if you use this class in a published project - * - * @author DarkBlade12 - * @version 1.7 - */ -public enum ParticleEffects { - /** - * A particle effect which is displayed by exploding tnt and creepers: - *

    - *
  • It looks like a white cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - EXPLOSION_NORMAL("explode", 0, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by exploding ghast fireballs and wither skulls: - *
    - *
  • It looks like a gray ball which is fading away - *
  • The speed value slightly influences the size of this particle effect - *
- */ - EXPLOSION_LARGE("largeexplode", 1, -1), - /** - * A particle effect which is displayed by exploding tnt and creepers: - *
    - *
  • It looks like a crowd of gray balls which are fading away - *
  • The speed value has no influence on this particle effect - *
- */ - EXPLOSION_HUGE("hugeexplosion", 2, -1), - /** - * A particle effect which is displayed by launching fireworks: - *
    - *
  • It looks like a white star which is sparkling - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - FIREWORKS_SPARK("fireworksSpark", 3, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by swimming entities and arrows in water: - *
    - *
  • It looks like a bubble - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - WATER_BUBBLE("bubble", 4, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_WATER), - /** - * A particle effect which is displayed by swimming entities and shaking wolves: - *
    - *
  • It looks like a blue drop - *
  • The speed value has no influence on this particle effect - *
- */ - WATER_SPLASH("splash", 5, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed on water when fishing: - *
    - *
  • It looks like a blue droplet - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - WATER_WAKE("wake", 6, 7, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by water: - *
    - *
  • It looks like a tiny blue square - *
  • The speed value has no influence on this particle effect - *
- */ - SUSPENDED("suspended", 7, -1, ParticleProperty.REQUIRES_WATER), - /** - * A particle effect which is displayed by air when close to bedrock and the in the void: - *
    - *
  • It looks like a tiny gray square - *
  • The speed value has no influence on this particle effect - *
- */ - SUSPENDED_DEPTH("depthSuspend", 8, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed when landing a critical hit and by arrows: - *
    - *
  • It looks like a light brown cross - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - CRIT("crit", 9, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed when landing a hit with an enchanted weapon: - *
    - *
  • It looks like a cyan star - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - CRIT_MAGIC("magicCrit", 10, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by primed tnt, torches, droppers, dispensers, end portals, brewing stands and monster spawners: - *
    - *
  • It looks like a little gray cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - SMOKE_NORMAL("smoke", 11, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by fire, minecarts with furnace and blazes: - *
    - *
  • It looks like a large gray cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - SMOKE_LARGE("largesmoke", 12, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed when splash potions or bottles o' enchanting hit something: - *
    - *
  • It looks like a white swirl - *
  • The speed value causes the particle to only move upwards when set to 0 - *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 - *
- */ - SPELL("spell", 13, -1), - /** - * A particle effect which is displayed when instant splash potions hit something: - *
    - *
  • It looks like a white cross - *
  • The speed value causes the particle to only move upwards when set to 0 - *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 - *
- */ - SPELL_INSTANT("instantSpell", 14, -1), - /** - * A particle effect which is displayed by entities with active potion effects: - *
    - *
  • It looks like a colored swirl - *
  • The speed value causes the particle to be colored black when set to 0 - *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed - *
- */ - SPELL_MOB("mobSpell", 15, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed by entities with active potion effects applied through a beacon: - *
    - *
  • It looks like a transparent colored swirl - *
  • The speed value causes the particle to be always colored black when set to 0 - *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed - *
- */ - SPELL_MOB_AMBIENT("mobSpellAmbient", 16, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed by witches: - *
    - *
  • It looks like a purple cross - *
  • The speed value causes the particle to only move upwards when set to 0 - *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 - *
- */ - SPELL_WITCH("witchMagic", 17, -1), - /** - * A particle effect which is displayed by blocks beneath a water source: - *
    - *
  • It looks like a blue drip - *
  • The speed value has no influence on this particle effect - *
- */ - DRIP_WATER("dripWater", 18, -1), - /** - * A particle effect which is displayed by blocks beneath a lava source: - *
    - *
  • It looks like an orange drip - *
  • The speed value has no influence on this particle effect - *
- */ - DRIP_LAVA("dripLava", 19, -1), - /** - * A particle effect which is displayed when attacking a villager in a village: - *
    - *
  • It looks like a cracked gray heart - *
  • The speed value has no influence on this particle effect - *
- */ - VILLAGER_ANGRY("angryVillager", 20, -1), - /** - * A particle effect which is displayed when using bone meal and trading with a villager in a village: - *
    - *
  • It looks like a green star - *
  • The speed value has no influence on this particle effect - *
- */ - VILLAGER_HAPPY("happyVillager", 21, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by mycelium: - *
    - *
  • It looks like a tiny gray square - *
  • The speed value has no influence on this particle effect - *
- */ - TOWN_AURA("townaura", 22, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by note blocks: - *
    - *
  • It looks like a colored note - *
  • The speed value causes the particle to be colored green when set to 0 - *
- */ - NOTE("note", 23, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed by nether portals, endermen, ender pearls, eyes of ender, ender chests and dragon eggs: - *
    - *
  • It looks like a purple cloud - *
  • The speed value influences the spread of this particle effect - *
- */ - PORTAL("portal", 24, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by enchantment tables which are nearby bookshelves: - *
    - *
  • It looks like a cryptic white letter - *
  • The speed value influences the spread of this particle effect - *
- */ - ENCHANTMENT_TABLE("enchantmenttable", 25, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by torches, active furnaces, magma cubes and monster spawners: - *
    - *
  • It looks like a tiny flame - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - FLAME("flame", 26, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by lava: - *
    - *
  • It looks like a spark - *
  • The speed value has no influence on this particle effect - *
- */ - LAVA("lava", 27, -1), - /** - * A particle effect which is currently unused: - *
    - *
  • It looks like a transparent gray square - *
  • The speed value has no influence on this particle effect - *
- */ - FOOTSTEP("footstep", 28, -1), - /** - * A particle effect which is displayed when a mob dies: - *
    - *
  • It looks like a large white cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - CLOUD("cloud", 29, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by redstone ore, powered redstone, redstone torches and redstone repeaters: - *
    - *
  • It looks like a tiny colored cloud - *
  • The speed value causes the particle to be colored red when set to 0 - *
- */ - REDSTONE("reddust", 30, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed when snowballs hit a block: - *
    - *
  • It looks like a little piece with the snowball texture - *
  • The speed value has no influence on this particle effect - *
- */ - SNOWBALL("snowballpoof", 31, -1), - /** - * A particle effect which is currently unused: - *
    - *
  • It looks like a tiny white cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - SNOW_SHOVEL("snowshovel", 32, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by slimes: - *
    - *
  • It looks like a tiny part of the slimeball icon - *
  • The speed value has no influence on this particle effect - *
- */ - SLIME("slime", 33, -1), - /** - * A particle effect which is displayed when breeding and taming animals: - *
    - *
  • It looks like a red heart - *
  • The speed value has no influence on this particle effect - *
- */ - HEART("heart", 34, -1), - /** - * A particle effect which is displayed by barriers: - *
    - *
  • It looks like a red box with a slash through it - *
  • The speed value has no influence on this particle effect - *
- */ - BARRIER("barrier", 35, 8), - /** - * A particle effect which is displayed when breaking a tool or eggs hit a block: - *
    - *
  • It looks like a little piece with an item texture - *
- */ - ITEM_CRACK("iconcrack", 36, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), - /** - * A particle effect which is displayed when breaking blocks or sprinting: - *
    - *
  • It looks like a little piece with a block texture - *
  • The speed value has no influence on this particle effect - *
- */ - BLOCK_CRACK("blockcrack", 37, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), - /** - * A particle effect which is displayed when falling: - *
    - *
  • It looks like a little piece with a block texture - *
- */ - BLOCK_DUST("blockdust", 38, 7, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), - /** - * A particle effect which is displayed when rain hits the ground: - *
    - *
  • It looks like a blue droplet - *
  • The speed value has no influence on this particle effect - *
- */ - WATER_DROP("droplet", 39, 8), - /** - * A particle effect which is currently unused: - *
    - *
  • It has no visual effect - *
- */ - ITEM_TAKE("take", 40, 8), - /** - * A particle effect which is displayed by elder guardians: - *
    - *
  • It looks like the shape of the elder guardian - *
  • The speed value has no influence on this particle effect - *
  • The offset values have no influence on this particle effect - *
- */ - MOB_APPEARANCE("mobappearance", 41, 8); - - private static final Map NAME_MAP = new HashMap(); - private static final Map ID_MAP = new HashMap(); - private final String name; - private final int id; - private final int requiredVersion; - private final List properties; - - // Initialize map for quick name and id lookup - static { - for (ParticleEffects effect : values()) { - NAME_MAP.put(effect.name, effect); - ID_MAP.put(effect.id, effect); - } - } - - /** - * Construct a new particle effect - * - * @param name Name of this particle effect - * @param id Id of this particle effect - * @param requiredVersion Version which is required (1.x) - * @param properties Properties of this particle effect - */ - private ParticleEffects(String name, int id, int requiredVersion, ParticleProperty... properties) { - this.name = name; - this.id = id; - this.requiredVersion = requiredVersion; - this.properties = Arrays.asList(properties); - } - - /** - * Returns the name of this particle effect - * - * @return The name - */ - public String getName() { - return name; - } - - /** - * Returns the id of this particle effect - * - * @return The id - */ - public int getId() { - return id; - } - - /** - * Returns the required version for this particle effect (1.x) - * - * @return The required version - */ - public int getRequiredVersion() { - return requiredVersion; - } - - /** - * Determine if this particle effect has a specific property - * - * @return Whether it has the property or not - */ - public boolean hasProperty(ParticleProperty property) { - return properties.contains(property); - } - - /** - * Determine if this particle effect is supported by your current server version - * - * @return Whether the particle effect is supported or not - */ - public boolean isSupported() { - if (requiredVersion == -1) { - return true; - } - return ParticlePacket.getVersion() >= requiredVersion; - } - - /** - * Returns the particle effect with the given name - * - * @param name Name of the particle effect - * @return The particle effect - */ - public static ParticleEffects fromName(String name) { - for (Entry entry : NAME_MAP.entrySet()) { - if (!entry.getKey().equalsIgnoreCase(name)) { - continue; - } - return entry.getValue(); - } - return null; - } - - /** - * Returns the particle effect with the given id - * - * @param id Id of the particle effect - * @return The particle effect - */ - public static ParticleEffects fromId(int id) { - for (Entry entry : ID_MAP.entrySet()) { - if (entry.getKey() != id) { - continue; - } - return entry.getValue(); - } - return null; - } - - /** - * Determine if water is at a certain location - * - * @param location Location to check - * @return Whether water is at this location or not - */ - private static boolean isWater(Location location) { - Material material = location.getBlock().getType(); - return material == Material.WATER || material == Material.STATIONARY_WATER; - } - - /** - * Determine if the distance between @param location and one of the players exceeds 256 - * - * @param location Location to check - * @return Whether the distance exceeds 256 or not - */ - private static boolean isLongDistance(Location location, List players) { - for (Player player : players) { - if (player.getLocation().distanceSquared(location) < 65536) { - continue; - } - return true; - } - return false; - } - - /** - * Determine if the data type for a particle effect is correct - * - * @param effect Particle effect - * @param data Particle data - * @return Whether the data type is correct or not - */ - private static boolean isDataCorrect(ParticleEffects effect, ParticleData data) { - return ((effect == BLOCK_CRACK || effect == BLOCK_DUST) && data instanceof BlockData) || (effect == ITEM_CRACK && data instanceof ItemData); - } - - /** - * Determine if the color type for a particle effect is correct - * - * @param effect Particle effect - * @param color Particle color - * @return Whether the color type is correct or not - */ - private static boolean isColorCorrect(ParticleEffects effect, ParticleColor color) { - return ((effect == SPELL_MOB || effect == SPELL_MOB_AMBIENT || effect == REDSTONE) && color instanceof OrdinaryColor) || (effect == NOTE - && color instanceof NoteColor); - } - - /** - * Displays a particle effect which is only visible for all players within a certain range in the world of @param center - * - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect requires water and none is at the center location - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) throws ParticleVersionException, - ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, null).sendTo(center, range); - } - - /** - * Displays a particle effect which is only visible for the specified players - * - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect requires water and none is at the center location - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) throws ParticleVersionException, - ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), null).sendTo(center, players); - } - - /** - * Displays a particle effect which is only visible for the specified players - * - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect requires water and none is at the center location - * @see #display(float, float, float, float, int, Location, List) - */ - public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) throws ParticleVersionException, - ParticleDataException, IllegalArgumentException { - display(offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); - } - - /** - * Displays a single particle which flies into a determined direction and is only visible for all players within a certain range in the world of @param center - * - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location - * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (!hasProperty(ParticleProperty.DIRECTIONAL)) { - throw new IllegalArgumentException("This particle effect is not directional"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, direction, speed, range > 256, null).sendTo(center, range); - } - - /** - * Displays a single particle which flies into a determined direction and is only visible for the specified players - * - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location - * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException, - IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (!hasProperty(ParticleProperty.DIRECTIONAL)) { - throw new IllegalArgumentException("This particle effect is not directional"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, direction, speed, isLongDistance(center, players), null).sendTo(center, players); - } - - /** - * Displays a single particle which flies into a determined direction and is only visible for the specified players - * - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location - * @see #display(Vector, float, Location, List) - */ - public void display(Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException, - IllegalArgumentException { - display(direction, speed, center, Arrays.asList(players)); - } - - /** - * Displays a single particle which is colored and only visible for all players within a certain range in the world of @param center - * - * @param color Color of the particle - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect - * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(ParticleColor color, Location center, double range) throws ParticleVersionException, ParticleColorException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.COLORABLE)) { - throw new ParticleColorException("This particle effect is not colorable"); - } - if (!isColorCorrect(this, color)) { - throw new ParticleColorException("The particle color type is incorrect"); - } - new ParticlePacket(this, color, range > 256).sendTo(center, range); - } - - /** - * Displays a single particle which is colored and only visible for the specified players - * - * @param color Color of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect - * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(ParticleColor color, Location center, List players) throws ParticleVersionException, ParticleColorException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.COLORABLE)) { - throw new ParticleColorException("This particle effect is not colorable"); - } - if (!isColorCorrect(this, color)) { - throw new ParticleColorException("The particle color type is incorrect"); - } - new ParticlePacket(this, color, isLongDistance(center, players)).sendTo(center, players); - } - - /** - * Displays a single particle which is colored and only visible for the specified players - * - * @param color Color of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect - * @see #display(ParticleColor, Location, List) - */ - public void display(ParticleColor color, Location center, Player... players) throws ParticleVersionException, ParticleColorException { - display(color, center, Arrays.asList(players)); - } - - /** - * Displays a particle effect which requires additional data and is only visible for all players within a certain range in the world of @param center - * - * @param data Data of the effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) - throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, data).sendTo(center, range); - } - - /** - * Displays a particle effect which requires additional data and is only visible for the specified players - * - * @param data Data of the effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) - throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), data).sendTo(center, players); - } - - /** - * Displays a particle effect which requires additional data and is only visible for the specified players - * - * @param data Data of the effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see #display(ParticleData, float, float, float, float, int, Location, List) - */ - public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) - throws ParticleVersionException, ParticleDataException { - display(data, offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); - } - - /** - * Displays a single particle which requires additional data that flies into a determined direction and is only visible for all players within a certain range in the world of @param center - * - * @param data Data of the effect - * @param direction Direction of the particle - * @param speed Display speed of the particles - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(ParticleData data, Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, direction, speed, range > 256, data).sendTo(center, range); - } - - /** - * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players - * - * @param data Data of the effect - * @param direction Direction of the particle - * @param speed Display speed of the particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(ParticleData data, Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, direction, speed, isLongDistance(center, players), data).sendTo(center, players); - } - - /** - * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players - * - * @param data Data of the effect - * @param direction Direction of the particle - * @param speed Display speed of the particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see #display(ParticleData, Vector, float, Location, List) - */ - public void display(ParticleData data, Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException { - display(data, direction, speed, center, Arrays.asList(players)); - } - - /** - * Represents the property of a particle effect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - public static enum ParticleProperty { - /** - * The particle effect requires water to be displayed - */ - REQUIRES_WATER, - /** - * The particle effect requires block or item data to be displayed - */ - REQUIRES_DATA, - /** - * The particle effect uses the offsets as direction values - */ - DIRECTIONAL, - /** - * The particle effect uses the offsets as color values - */ - COLORABLE; - } - - /** - * Represents the particle data for effects like {@link ParticleEffects#ITEM_CRACK}, {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - public static abstract class ParticleData { - private final Material material; - private final byte data; - private final int[] packetData; - - /** - * Construct a new particle data - * - * @param material Material of the item/block - * @param data Data value of the item/block - */ - @SuppressWarnings("deprecation") - public ParticleData(Material material, byte data) { - this.material = material; - this.data = data; - this.packetData = new int[] { material.getId(), data }; - } - - /** - * Returns the material of this data - * - * @return The material - */ - public Material getMaterial() { - return material; - } - - /** - * Returns the data value of this data - * - * @return The data value - */ - public byte getData() { - return data; - } - - /** - * Returns the data as an int array for packet construction - * - * @return The data for the packet - */ - public int[] getPacketData() { - return packetData; - } - - /** - * Returns the data as a string for pre 1.8 versions - * - * @return The data string for the packet - */ - public String getPacketDataString() { - return "_" + packetData[0] + "_" + packetData[1]; - } - } - - /** - * Represents the item data for the {@link ParticleEffects#ITEM_CRACK} effect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - public static final class ItemData extends ParticleData { - /** - * Construct a new item data - * - * @param material Material of the item - * @param data Data value of the item - * @see ParticleData#ParticleData(Material, byte) - */ - public ItemData(Material material, byte data) { - super(material, data); - } - } - - /** - * Represents the block data for the {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} effects - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - public static final class BlockData extends ParticleData { - /** - * Construct a new block data - * - * @param material Material of the block - * @param data Data value of the block - * @throws IllegalArgumentException If the material is not a block - * @see ParticleData#ParticleData(Material, byte) - */ - public BlockData(Material material, byte data) throws IllegalArgumentException { - super(material, data); - if (!material.isBlock()) { - throw new IllegalArgumentException("The material is not a block"); - } - } - } - - /** - * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT}, {@link ParticleEffects#REDSTONE} and {@link ParticleEffects#NOTE} - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - public static abstract class ParticleColor { - /** - * Returns the value for the offsetX field - * - * @return The offsetX value - */ - public abstract float getValueX(); - - /** - * Returns the value for the offsetY field - * - * @return The offsetY value - */ - public abstract float getValueY(); - - /** - * Returns the value for the offsetZ field - * - * @return The offsetZ value - */ - public abstract float getValueZ(); - } - - /** - * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT} and {@link ParticleEffects#NOTE} - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - public static final class OrdinaryColor extends ParticleColor { - private final int red; - private final int green; - private final int blue; - - /** - * Construct a new ordinary color - * - * @param red Red value of the RGB format - * @param green Green value of the RGB format - * @param blue Blue value of the RGB format - * @throws IllegalArgumentException If one of the values is lower than 0 or higher than 255 - */ - public OrdinaryColor(int red, int green, int blue) throws IllegalArgumentException { - if (red < 0) { - throw new IllegalArgumentException("The red value is lower than 0"); - } - if (red > 255) { - throw new IllegalArgumentException("The red value is higher than 255"); - } - this.red = red; - if (green < 0) { - throw new IllegalArgumentException("The green value is lower than 0"); - } - if (green > 255) { - throw new IllegalArgumentException("The green value is higher than 255"); - } - this.green = green; - if (blue < 0) { - throw new IllegalArgumentException("The blue value is lower than 0"); - } - if (blue > 255) { - throw new IllegalArgumentException("The blue value is higher than 255"); - } - this.blue = blue; - } - - /** - * Returns the red value of the RGB format - * - * @return The red value - */ - public int getRed() { - return red; - } - - /** - * Returns the green value of the RGB format - * - * @return The green value - */ - public int getGreen() { - return green; - } - - /** - * Returns the blue value of the RGB format - * - * @return The blue value - */ - public int getBlue() { - return blue; - } - - /** - * Returns the red value divided by 255 - * - * @return The offsetX value - */ - @Override - public float getValueX() { - return red / 255F; - } - - /** - * Returns the green value divided by 255 - * - * @return The offsetY value - */ - @Override - public float getValueY() { - return green / 255F; - } - - /** - * Returns the blue value divided by 255 - * - * @return The offsetZ value - */ - @Override - public float getValueZ() { - return blue / 255F; - } - } - - /** - * Represents the color for the {@link ParticleEffects#NOTE} effect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - public static final class NoteColor extends ParticleColor { - private final int note; - - /** - * Construct a new note color - * - * @param note Note id which determines color - * @throws IllegalArgumentException If the note value is lower than 0 or higher than 255 - */ - public NoteColor(int note) throws IllegalArgumentException { - if (note < 0) { - throw new IllegalArgumentException("The note value is lower than 0"); - } - if (note > 24) { - throw new IllegalArgumentException("The note value is higher than 24"); - } - this.note = note; - } - - /** - * Returns the note value divided by 24 - * - * @return The offsetX value - */ - @Override - public float getValueX() { - return note / 24F; - } - - /** - * Returns zero because the offsetY value is unused - * - * @return zero - */ - @Override - public float getValueY() { - return 0; - } - - /** - * Returns zero because the offsetZ value is unused - * - * @return zero - */ - @Override - public float getValueZ() { - return 0; - } - - } - - /** - * Represents a runtime exception that is thrown either if the displayed particle effect requires data and has none or vice-versa or if the data type is incorrect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - private static final class ParticleDataException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new particle data exception - * - * @param message Message that will be logged - */ - public ParticleDataException(String message) { - super(message); - } - } - - /** - * Represents a runtime exception that is thrown either if the displayed particle effect is not colorable or if the particle color type is incorrect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - private static final class ParticleColorException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new particle color exception - * - * @param message Message that will be logged - */ - public ParticleColorException(String message) { - super(message); - } - } - - /** - * Represents a runtime exception that is thrown if the displayed particle effect requires a newer version - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - private static final class ParticleVersionException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new particle version exception - * - * @param message Message that will be logged - */ - public ParticleVersionException(String message) { - super(message); - } - } - - /** - * Represents a particle effect packet with all attributes which is used for sending packets to the players - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.5 - */ - public static final class ParticlePacket { - private static int version = 7; - private static Class enumParticle; - private static Constructor packetConstructor; - private static Method getHandle; - private static Field playerConnection; - private static Method sendPacket; - private static boolean initialized; - private final ParticleEffects effect; - private final float offsetX; - private final float offsetY; - private final float offsetZ; - private final float speed; - private final int amount; - private final boolean longDistance; - private final ParticleData data; - private Object packet; - - /** - * Construct a new particle packet - * - * @param effect Particle effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 - * @param data Data of the effect - * @throws IllegalArgumentException If the speed or amount is lower than 0 - * @see #initialize() - */ - public ParticlePacket(ParticleEffects effect, float offsetX, float offsetY, float offsetZ, float speed, int amount, boolean longDistance, ParticleData data) - throws IllegalArgumentException { - initialize(); - if (speed < 0) { - throw new IllegalArgumentException("The speed is lower than 0"); - } - if (amount < 0) { - throw new IllegalArgumentException("The amount is lower than 0"); - } - this.effect = effect; - this.offsetX = offsetX; - this.offsetY = offsetY; - this.offsetZ = offsetZ; - this.speed = speed; - this.amount = amount; - this.longDistance = longDistance; - this.data = data; - } - - /** - * Construct a new particle packet of a single particle flying into a determined direction - * - * @param effect Particle effect - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 - * @param data Data of the effect - * @throws IllegalArgumentException If the speed is lower than 0 - * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) - */ - public ParticlePacket(ParticleEffects effect, Vector direction, float speed, boolean longDistance, ParticleData data) throws IllegalArgumentException { - this(effect, (float) direction.getX(), (float) direction.getY(), (float) direction.getZ(), speed, 0, longDistance, data); - } - - /** - * Construct a new particle packet of a single colored particle - * - * @param effect Particle effect - * @param color Color of the particle - * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 - * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) - */ - public ParticlePacket(ParticleEffects effect, ParticleColor color, boolean longDistance) { - this(effect, color.getValueX(), color.getValueY(), color.getValueZ(), 1, 0, longDistance, null); - } - - /** - * Initializes {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} and sets {@link #initialized} to true if it succeeds - *

- * Note: These fields only have to be initialized once, so it will return if {@link #initialized} is already set to true - * - * @throws VersionIncompatibleException if your bukkit version is not supported by this library - */ - public static void initialize() throws VersionIncompatibleException { - if (initialized) { - return; - } - try { - version = Integer.parseInt(ReflectionUtils.PackageType.getServerVersion().split("_")[1]); - } catch (Exception exception) { - throw new VersionIncompatibleException("Your current bukkit version seems to be incompatible with this library", exception); - } - try { - if (version > 7) { - enumParticle = PackageType.MINECRAFT_SERVER.getClass("EnumParticle"); - } - Class packetClass = PackageType.MINECRAFT_SERVER.getClass(version < 7 ? "Packet63WorldParticles" : "PacketPlayOutWorldParticles"); - packetConstructor = ReflectionUtils.getConstructor(packetClass); - getHandle = ReflectionUtils.getMethod("CraftPlayer", PackageType.CRAFTBUKKIT_ENTITY, "getHandle"); - playerConnection = ReflectionUtils.getField("EntityPlayer", PackageType.MINECRAFT_SERVER, false, "playerConnection"); - sendPacket = ReflectionUtils.getMethod(playerConnection.getType(), "sendPacket", PackageType.MINECRAFT_SERVER.getClass("Packet")); - } catch (Exception exception) { - throw new VersionIncompatibleException("Your current bukkit version seems to be incompatible with this library", exception); - } - initialized = true; - } - - /** - * Returns the version of your server (1.x) - * - * @return The version number - */ - public static int getVersion() { - return version; - } - - /** - * Determine if {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} are initialized - * - * @return Whether these fields are initialized or not - * @see #initialize() - */ - public static boolean isInitialized() { - return initialized; - } - - /** - * Initializes {@link #packet} with all set values - * - * @param center Center location of the effect - * @throws PacketInstantiationException If instantion fails due to an unknown error - */ - private void initializePacket(Location center) throws PacketInstantiationException { - if (packet != null) { - return; - } - try { - packet = packetConstructor.newInstance(); - if (version < 8) { - String name = effect.getName(); - if (data != null) { - name += data.getPacketDataString(); - } - ReflectionUtils.setValue(packet, true, "a", name); - } else { - ReflectionUtils.setValue(packet, true, "a", enumParticle.getEnumConstants()[effect.getId()]); - ReflectionUtils.setValue(packet, true, "j", longDistance); - if (data != null) { - ReflectionUtils.setValue(packet, true, "k", data.getPacketData()); - } - } - ReflectionUtils.setValue(packet, true, "b", (float) center.getX()); - ReflectionUtils.setValue(packet, true, "c", (float) center.getY()); - ReflectionUtils.setValue(packet, true, "d", (float) center.getZ()); - ReflectionUtils.setValue(packet, true, "e", offsetX); - ReflectionUtils.setValue(packet, true, "f", offsetY); - ReflectionUtils.setValue(packet, true, "g", offsetZ); - ReflectionUtils.setValue(packet, true, "h", speed); - ReflectionUtils.setValue(packet, true, "i", amount); - } catch (Exception exception) { - throw new PacketInstantiationException("Packet instantiation failed", exception); - } - } - - /** - * Sends the packet to a single player and caches it - * - * @param center Center location of the effect - * @param player Receiver of the packet - * @throws PacketInstantiationException If instantion fails due to an unknown error - * @throws PacketSendingException If sending fails due to an unknown error - * @see #initializePacket(Location) - */ - public void sendTo(Location center, Player player) throws PacketInstantiationException, PacketSendingException { - initializePacket(center); - try { - sendPacket.invoke(playerConnection.get(getHandle.invoke(player)), packet); - } catch (Exception exception) { - throw new PacketSendingException("Failed to send the packet to player '" + player.getName() + "'", exception); - } - } - - /** - * Sends the packet to all players in the list - * - * @param center Center location of the effect - * @param players Receivers of the packet - * @throws IllegalArgumentException If the player list is empty - * @see #sendTo(Location center, Player player) - */ - public void sendTo(Location center, List players) throws IllegalArgumentException { - if (players.isEmpty()) { - throw new IllegalArgumentException("The player list is empty"); - } - for (Player player : players) { - sendTo(center, player); - } - } - - /** - * Sends the packet to all players in a certain range - * - * @param center Center location of the effect - * @param range Range in which players will receive the packet (Maximum range for particles is usually 16, but it can differ for some types) - * @throws IllegalArgumentException If the range is lower than 1 - * @see #sendTo(Location center, Player player) - */ - public void sendTo(Location center, double range) throws IllegalArgumentException { - if (range < 1) { - throw new IllegalArgumentException("The range is lower than 1"); - } - String worldName = center.getWorld().getName(); - double squared = range * range; - for (Player player : Bukkit.getOnlinePlayers()) { - if (!player.getWorld().getName().equals(worldName) || player.getLocation().distanceSquared(center) > squared) { - continue; - } - sendTo(center, player); - } - } - - /** - * Represents a runtime exception that is thrown if a bukkit version is not compatible with this library - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.5 - */ - private static final class VersionIncompatibleException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new version incompatible exception - * - * @param message Message that will be logged - * @param cause Cause of the exception - */ - public VersionIncompatibleException(String message, Throwable cause) { - super(message, cause); - } - } - - /** - * Represents a runtime exception that is thrown if packet instantiation fails - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.4 - */ - private static final class PacketInstantiationException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new packet instantiation exception - * - * @param message Message that will be logged - * @param cause Cause of the exception - */ - public PacketInstantiationException(String message, Throwable cause) { - super(message, cause); - } - } - - /** - * Represents a runtime exception that is thrown if packet sending fails - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.4 - */ - private static final class PacketSendingException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new packet sending exception - * - * @param message Message that will be logged - * @param cause Cause of the exception - */ - public PacketSendingException(String message, Throwable cause) { - super(message, cause); - } - } - } +package com.bekvon.bukkit.residence.utils; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.utils.ReflectionUtils.PackageType; + +/** + * ParticleEffect Library + *

+ * This library was created by @DarkBlade12 and allows you to display all Minecraft particle effects on a Bukkit server + *

+ * You are welcome to use it, modify it and redistribute it under the following conditions: + *

    + *
  • Don't claim this class as your own + *
  • Don't remove this disclaimer + *
+ *

+ * Special thanks: + *

    + *
  • @microgeek (original idea, names and packet parameters) + *
  • @ShadyPotato (1.8 names, ids and packet parameters) + *
  • @RingOfStorms (particle behavior) + *
  • @Cybermaxke (particle behavior) + *
+ *

+ * It would be nice if you provide credit to me if you use this class in a published project + * + * @author DarkBlade12 + * @version 1.7 + */ +public enum ParticleEffects { + /** + * A particle effect which is displayed by exploding tnt and creepers: + *

    + *
  • It looks like a white cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + EXPLOSION_NORMAL("explode", 0, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by exploding ghast fireballs and wither skulls: + *
    + *
  • It looks like a gray ball which is fading away + *
  • The speed value slightly influences the size of this particle effect + *
+ */ + EXPLOSION_LARGE("largeexplode", 1, -1), + /** + * A particle effect which is displayed by exploding tnt and creepers: + *
    + *
  • It looks like a crowd of gray balls which are fading away + *
  • The speed value has no influence on this particle effect + *
+ */ + EXPLOSION_HUGE("hugeexplosion", 2, -1), + /** + * A particle effect which is displayed by launching fireworks: + *
    + *
  • It looks like a white star which is sparkling + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + FIREWORKS_SPARK("fireworksSpark", 3, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by swimming entities and arrows in water: + *
    + *
  • It looks like a bubble + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + WATER_BUBBLE("bubble", 4, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_WATER), + /** + * A particle effect which is displayed by swimming entities and shaking wolves: + *
    + *
  • It looks like a blue drop + *
  • The speed value has no influence on this particle effect + *
+ */ + WATER_SPLASH("splash", 5, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed on water when fishing: + *
    + *
  • It looks like a blue droplet + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + WATER_WAKE("wake", 6, 7, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by water: + *
    + *
  • It looks like a tiny blue square + *
  • The speed value has no influence on this particle effect + *
+ */ + SUSPENDED("suspended", 7, -1, ParticleProperty.REQUIRES_WATER), + /** + * A particle effect which is displayed by air when close to bedrock and the in the void: + *
    + *
  • It looks like a tiny gray square + *
  • The speed value has no influence on this particle effect + *
+ */ + SUSPENDED_DEPTH("depthSuspend", 8, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed when landing a critical hit and by arrows: + *
    + *
  • It looks like a light brown cross + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + CRIT("crit", 9, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed when landing a hit with an enchanted weapon: + *
    + *
  • It looks like a cyan star + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + CRIT_MAGIC("magicCrit", 10, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by primed tnt, torches, droppers, dispensers, end portals, brewing stands and monster spawners: + *
    + *
  • It looks like a little gray cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + SMOKE_NORMAL("smoke", 11, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by fire, minecarts with furnace and blazes: + *
    + *
  • It looks like a large gray cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + SMOKE_LARGE("largesmoke", 12, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed when splash potions or bottles o' enchanting hit something: + *
    + *
  • It looks like a white swirl + *
  • The speed value causes the particle to only move upwards when set to 0 + *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 + *
+ */ + SPELL("spell", 13, -1), + /** + * A particle effect which is displayed when instant splash potions hit something: + *
    + *
  • It looks like a white cross + *
  • The speed value causes the particle to only move upwards when set to 0 + *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 + *
+ */ + SPELL_INSTANT("instantSpell", 14, -1), + /** + * A particle effect which is displayed by entities with active potion effects: + *
    + *
  • It looks like a colored swirl + *
  • The speed value causes the particle to be colored black when set to 0 + *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed + *
+ */ + SPELL_MOB("mobSpell", 15, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed by entities with active potion effects applied through a beacon: + *
    + *
  • It looks like a transparent colored swirl + *
  • The speed value causes the particle to be always colored black when set to 0 + *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed + *
+ */ + SPELL_MOB_AMBIENT("mobSpellAmbient", 16, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed by witches: + *
    + *
  • It looks like a purple cross + *
  • The speed value causes the particle to only move upwards when set to 0 + *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 + *
+ */ + SPELL_WITCH("witchMagic", 17, -1), + /** + * A particle effect which is displayed by blocks beneath a water source: + *
    + *
  • It looks like a blue drip + *
  • The speed value has no influence on this particle effect + *
+ */ + DRIP_WATER("dripWater", 18, -1), + /** + * A particle effect which is displayed by blocks beneath a lava source: + *
    + *
  • It looks like an orange drip + *
  • The speed value has no influence on this particle effect + *
+ */ + DRIP_LAVA("dripLava", 19, -1), + /** + * A particle effect which is displayed when attacking a villager in a village: + *
    + *
  • It looks like a cracked gray heart + *
  • The speed value has no influence on this particle effect + *
+ */ + VILLAGER_ANGRY("angryVillager", 20, -1), + /** + * A particle effect which is displayed when using bone meal and trading with a villager in a village: + *
    + *
  • It looks like a green star + *
  • The speed value has no influence on this particle effect + *
+ */ + VILLAGER_HAPPY("happyVillager", 21, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by mycelium: + *
    + *
  • It looks like a tiny gray square + *
  • The speed value has no influence on this particle effect + *
+ */ + TOWN_AURA("townaura", 22, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by note blocks: + *
    + *
  • It looks like a colored note + *
  • The speed value causes the particle to be colored green when set to 0 + *
+ */ + NOTE("note", 23, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed by nether portals, endermen, ender pearls, eyes of ender, ender chests and dragon eggs: + *
    + *
  • It looks like a purple cloud + *
  • The speed value influences the spread of this particle effect + *
+ */ + PORTAL("portal", 24, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by enchantment tables which are nearby bookshelves: + *
    + *
  • It looks like a cryptic white letter + *
  • The speed value influences the spread of this particle effect + *
+ */ + ENCHANTMENT_TABLE("enchantmenttable", 25, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by torches, active furnaces, magma cubes and monster spawners: + *
    + *
  • It looks like a tiny flame + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + FLAME("flame", 26, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by lava: + *
    + *
  • It looks like a spark + *
  • The speed value has no influence on this particle effect + *
+ */ + LAVA("lava", 27, -1), + /** + * A particle effect which is currently unused: + *
    + *
  • It looks like a transparent gray square + *
  • The speed value has no influence on this particle effect + *
+ */ + FOOTSTEP("footstep", 28, -1), + /** + * A particle effect which is displayed when a mob dies: + *
    + *
  • It looks like a large white cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + CLOUD("cloud", 29, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by redstone ore, powered redstone, redstone torches and redstone repeaters: + *
    + *
  • It looks like a tiny colored cloud + *
  • The speed value causes the particle to be colored red when set to 0 + *
+ */ + REDSTONE("reddust", 30, -1, ParticleProperty.COLORABLE), + /** + * A particle effect which is displayed when snowballs hit a block: + *
    + *
  • It looks like a little piece with the snowball texture + *
  • The speed value has no influence on this particle effect + *
+ */ + SNOWBALL("snowballpoof", 31, -1), + /** + * A particle effect which is currently unused: + *
    + *
  • It looks like a tiny white cloud + *
  • The speed value influences the velocity at which the particle flies off + *
+ */ + SNOW_SHOVEL("snowshovel", 32, -1, ParticleProperty.DIRECTIONAL), + /** + * A particle effect which is displayed by slimes: + *
    + *
  • It looks like a tiny part of the slimeball icon + *
  • The speed value has no influence on this particle effect + *
+ */ + SLIME("slime", 33, -1), + /** + * A particle effect which is displayed when breeding and taming animals: + *
    + *
  • It looks like a red heart + *
  • The speed value has no influence on this particle effect + *
+ */ + HEART("heart", 34, -1), + /** + * A particle effect which is displayed by barriers: + *
    + *
  • It looks like a red box with a slash through it + *
  • The speed value has no influence on this particle effect + *
+ */ + BARRIER("barrier", 35, 8), + /** + * A particle effect which is displayed when breaking a tool or eggs hit a block: + *
    + *
  • It looks like a little piece with an item texture + *
+ */ + ITEM_CRACK("iconcrack", 36, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), + /** + * A particle effect which is displayed when breaking blocks or sprinting: + *
    + *
  • It looks like a little piece with a block texture + *
  • The speed value has no influence on this particle effect + *
+ */ + BLOCK_CRACK("blockcrack", 37, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), + /** + * A particle effect which is displayed when falling: + *
    + *
  • It looks like a little piece with a block texture + *
+ */ + BLOCK_DUST("blockdust", 38, 7, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), + /** + * A particle effect which is displayed when rain hits the ground: + *
    + *
  • It looks like a blue droplet + *
  • The speed value has no influence on this particle effect + *
+ */ + WATER_DROP("droplet", 39, 8), + /** + * A particle effect which is currently unused: + *
    + *
  • It has no visual effect + *
+ */ + ITEM_TAKE("take", 40, 8), + /** + * A particle effect which is displayed by elder guardians: + *
    + *
  • It looks like the shape of the elder guardian + *
  • The speed value has no influence on this particle effect + *
  • The offset values have no influence on this particle effect + *
+ */ + MOB_APPEARANCE("mobappearance", 41, 8); + + private static final Map NAME_MAP = new HashMap(); + private static final Map ID_MAP = new HashMap(); + private final String name; + private final int id; + private final int requiredVersion; + private final List properties; + + // Initialize map for quick name and id lookup + static { + for (ParticleEffects effect : values()) { + NAME_MAP.put(effect.name, effect); + ID_MAP.put(effect.id, effect); + } + } + + /** + * Construct a new particle effect + * + * @param name Name of this particle effect + * @param id Id of this particle effect + * @param requiredVersion Version which is required (1.x) + * @param properties Properties of this particle effect + */ + private ParticleEffects(String name, int id, int requiredVersion, ParticleProperty... properties) { + this.name = name; + this.id = id; + this.requiredVersion = requiredVersion; + this.properties = Arrays.asList(properties); + } + + /** + * Returns the name of this particle effect + * + * @return The name + */ + public String getName() { + return name; + } + + /** + * Returns the id of this particle effect + * + * @return The id + */ + public int getId() { + return id; + } + + /** + * Returns the required version for this particle effect (1.x) + * + * @return The required version + */ + public int getRequiredVersion() { + return requiredVersion; + } + + /** + * Determine if this particle effect has a specific property + * + * @return Whether it has the property or not + */ + public boolean hasProperty(ParticleProperty property) { + return properties.contains(property); + } + + /** + * Determine if this particle effect is supported by your current server version + * + * @return Whether the particle effect is supported or not + */ + public boolean isSupported() { + if (requiredVersion == -1) { + return true; + } + return ParticlePacket.getVersion() >= requiredVersion; + } + + /** + * Returns the particle effect with the given name + * + * @param name Name of the particle effect + * @return The particle effect + */ + public static ParticleEffects fromName(String name) { + for (Entry entry : NAME_MAP.entrySet()) { + if (!entry.getKey().equalsIgnoreCase(name)) { + continue; + } + return entry.getValue(); + } + return null; + } + + /** + * Returns the particle effect with the given id + * + * @param id Id of the particle effect + * @return The particle effect + */ + public static ParticleEffects fromId(int id) { + for (Entry entry : ID_MAP.entrySet()) { + if (entry.getKey() != id) { + continue; + } + return entry.getValue(); + } + return null; + } + + /** + * Determine if water is at a certain location + * + * @param location Location to check + * @return Whether water is at this location or not + */ + private static boolean isWater(Location location) { + CMIMaterial material = CMIMaterial.get(location.getBlock()); + return material.equals(CMIMaterial.WATER) || material.equals(CMIMaterial.FLOWING_WATER); + } + + /** + * Determine if the distance between @param location and one of the players exceeds 256 + * + * @param location Location to check + * @return Whether the distance exceeds 256 or not + */ + private static boolean isLongDistance(Location location, List players) { + for (Player player : players) { + if (player.getLocation().distanceSquared(location) < 65536) { + continue; + } + return true; + } + return false; + } + + /** + * Determine if the data type for a particle effect is correct + * + * @param effect Particle effect + * @param data Particle data + * @return Whether the data type is correct or not + */ + private static boolean isDataCorrect(ParticleEffects effect, ParticleData data) { + return ((effect == BLOCK_CRACK || effect == BLOCK_DUST) && data instanceof BlockData) || (effect == ITEM_CRACK && data instanceof ItemData); + } + + /** + * Determine if the color type for a particle effect is correct + * + * @param effect Particle effect + * @param color Particle color + * @return Whether the color type is correct or not + */ + private static boolean isColorCorrect(ParticleEffects effect, ParticleColor color) { + return ((effect == SPELL_MOB || effect == SPELL_MOB_AMBIENT || effect == REDSTONE) && color instanceof OrdinaryColor) || (effect == NOTE + && color instanceof NoteColor); + } + + /** + * Displays a particle effect which is only visible for all players within a certain range in the world of @param center + * + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect requires water and none is at the center location + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) throws ParticleVersionException, + ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, null).sendTo(center, range); + } + + /** + * Displays a particle effect which is only visible for the specified players + * + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect requires water and none is at the center location + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) throws ParticleVersionException, + ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), null).sendTo(center, players); + } + + /** + * Displays a particle effect which is only visible for the specified players + * + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect requires water and none is at the center location + * @see #display(float, float, float, float, int, Location, List) + */ + public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) throws ParticleVersionException, + ParticleDataException, IllegalArgumentException { + display(offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); + } + + /** + * Displays a single particle which flies into a determined direction and is only visible for all players within a certain range in the world of @param center + * + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location + * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (!hasProperty(ParticleProperty.DIRECTIONAL)) { + throw new IllegalArgumentException("This particle effect is not directional"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, direction, speed, range > 256, null).sendTo(center, range); + } + + /** + * Displays a single particle which flies into a determined direction and is only visible for the specified players + * + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location + * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException, + IllegalArgumentException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect requires additional data"); + } + if (!hasProperty(ParticleProperty.DIRECTIONAL)) { + throw new IllegalArgumentException("This particle effect is not directional"); + } + if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { + throw new IllegalArgumentException("There is no water at the center location"); + } + new ParticlePacket(this, direction, speed, isLongDistance(center, players), null).sendTo(center, players); + } + + /** + * Displays a single particle which flies into a determined direction and is only visible for the specified players + * + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect requires additional data + * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location + * @see #display(Vector, float, Location, List) + */ + public void display(Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException, + IllegalArgumentException { + display(direction, speed, center, Arrays.asList(players)); + } + + /** + * Displays a single particle which is colored and only visible for all players within a certain range in the world of @param center + * + * @param color Color of the particle + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect + * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(ParticleColor color, Location center, double range) throws ParticleVersionException, ParticleColorException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.COLORABLE)) { + throw new ParticleColorException("This particle effect is not colorable"); + } + if (!isColorCorrect(this, color)) { + throw new ParticleColorException("The particle color type is incorrect"); + } + new ParticlePacket(this, color, range > 256).sendTo(center, range); + } + + /** + * Displays a single particle which is colored and only visible for the specified players + * + * @param color Color of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect + * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(ParticleColor color, Location center, List players) throws ParticleVersionException, ParticleColorException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.COLORABLE)) { + throw new ParticleColorException("This particle effect is not colorable"); + } + if (!isColorCorrect(this, color)) { + throw new ParticleColorException("The particle color type is incorrect"); + } + new ParticlePacket(this, color, isLongDistance(center, players)).sendTo(center, players); + } + + /** + * Displays a single particle which is colored and only visible for the specified players + * + * @param color Color of the particle + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect + * @see #display(ParticleColor, Location, List) + */ + public void display(ParticleColor color, Location center, Player... players) throws ParticleVersionException, ParticleColorException { + display(color, center, Arrays.asList(players)); + } + + /** + * Displays a particle effect which requires additional data and is only visible for all players within a certain range in the world of @param center + * + * @param data Data of the effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) + throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, data).sendTo(center, range); + } + + /** + * Displays a particle effect which requires additional data and is only visible for the specified players + * + * @param data Data of the effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) + throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), data).sendTo(center, players); + } + + /** + * Displays a particle effect which requires additional data and is only visible for the specified players + * + * @param data Data of the effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see #display(ParticleData, float, float, float, float, int, Location, List) + */ + public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) + throws ParticleVersionException, ParticleDataException { + display(data, offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); + } + + /** + * Displays a single particle which requires additional data that flies into a determined direction and is only visible for all players within a certain range in the world of @param center + * + * @param data Data of the effect + * @param direction Direction of the particle + * @param speed Display speed of the particles + * @param center Center location of the effect + * @param range Range of the visibility + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, double) + */ + public void display(ParticleData data, Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, direction, speed, range > 256, data).sendTo(center, range); + } + + /** + * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players + * + * @param data Data of the effect + * @param direction Direction of the particle + * @param speed Display speed of the particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see ParticlePacket + * @see ParticlePacket#sendTo(Location, List) + */ + public void display(ParticleData data, Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException { + if (!isSupported()) { + throw new ParticleVersionException("This particle effect is not supported by your server version"); + } + if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { + throw new ParticleDataException("This particle effect does not require additional data"); + } + if (!isDataCorrect(this, data)) { + throw new ParticleDataException("The particle data type is incorrect"); + } + new ParticlePacket(this, direction, speed, isLongDistance(center, players), data).sendTo(center, players); + } + + /** + * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players + * + * @param data Data of the effect + * @param direction Direction of the particle + * @param speed Display speed of the particles + * @param center Center location of the effect + * @param players Receivers of the effect + * @throws ParticleVersionException If the particle effect is not supported by the server version + * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect + * @see #display(ParticleData, Vector, float, Location, List) + */ + public void display(ParticleData data, Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException { + display(data, direction, speed, center, Arrays.asList(players)); + } + + /** + * Represents the property of a particle effect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static enum ParticleProperty { + /** + * The particle effect requires water to be displayed + */ + REQUIRES_WATER, + /** + * The particle effect requires block or item data to be displayed + */ + REQUIRES_DATA, + /** + * The particle effect uses the offsets as direction values + */ + DIRECTIONAL, + /** + * The particle effect uses the offsets as color values + */ + COLORABLE; + } + + /** + * Represents the particle data for effects like {@link ParticleEffects#ITEM_CRACK}, {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + public static abstract class ParticleData { + private final Material material; + private final byte data; + private final int[] packetData; + + /** + * Construct a new particle data + * + * @param material Material of the item/block + * @param data Data value of the item/block + */ + @SuppressWarnings("deprecation") + public ParticleData(Material material, byte data) { + this.material = material; + this.data = data; + this.packetData = new int[] { material.getId(), data }; + } + + /** + * Returns the material of this data + * + * @return The material + */ + public Material getMaterial() { + return material; + } + + /** + * Returns the data value of this data + * + * @return The data value + */ + public byte getData() { + return data; + } + + /** + * Returns the data as an int array for packet construction + * + * @return The data for the packet + */ + public int[] getPacketData() { + return packetData; + } + + /** + * Returns the data as a string for pre 1.8 versions + * + * @return The data string for the packet + */ + public String getPacketDataString() { + return "_" + packetData[0] + "_" + packetData[1]; + } + } + + /** + * Represents the item data for the {@link ParticleEffects#ITEM_CRACK} effect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + public static final class ItemData extends ParticleData { + /** + * Construct a new item data + * + * @param material Material of the item + * @param data Data value of the item + * @see ParticleData#ParticleData(Material, byte) + */ + public ItemData(Material material, byte data) { + super(material, data); + } + } + + /** + * Represents the block data for the {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} effects + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + public static final class BlockData extends ParticleData { + /** + * Construct a new block data + * + * @param material Material of the block + * @param data Data value of the block + * @throws IllegalArgumentException If the material is not a block + * @see ParticleData#ParticleData(Material, byte) + */ + public BlockData(Material material, byte data) throws IllegalArgumentException { + super(material, data); + if (!material.isBlock()) { + throw new IllegalArgumentException("The material is not a block"); + } + } + } + + /** + * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT}, {@link ParticleEffects#REDSTONE} and {@link ParticleEffects#NOTE} + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static abstract class ParticleColor { + /** + * Returns the value for the offsetX field + * + * @return The offsetX value + */ + public abstract float getValueX(); + + /** + * Returns the value for the offsetY field + * + * @return The offsetY value + */ + public abstract float getValueY(); + + /** + * Returns the value for the offsetZ field + * + * @return The offsetZ value + */ + public abstract float getValueZ(); + } + + /** + * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT} and {@link ParticleEffects#NOTE} + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static final class OrdinaryColor extends ParticleColor { + private final int red; + private final int green; + private final int blue; + + /** + * Construct a new ordinary color + * + * @param red Red value of the RGB format + * @param green Green value of the RGB format + * @param blue Blue value of the RGB format + * @throws IllegalArgumentException If one of the values is lower than 0 or higher than 255 + */ + public OrdinaryColor(int red, int green, int blue) throws IllegalArgumentException { + if (red < 0) { + throw new IllegalArgumentException("The red value is lower than 0"); + } + if (red > 255) { + throw new IllegalArgumentException("The red value is higher than 255"); + } + this.red = red; + if (green < 0) { + throw new IllegalArgumentException("The green value is lower than 0"); + } + if (green > 255) { + throw new IllegalArgumentException("The green value is higher than 255"); + } + this.green = green; + if (blue < 0) { + throw new IllegalArgumentException("The blue value is lower than 0"); + } + if (blue > 255) { + throw new IllegalArgumentException("The blue value is higher than 255"); + } + this.blue = blue; + } + + /** + * Returns the red value of the RGB format + * + * @return The red value + */ + public int getRed() { + return red; + } + + /** + * Returns the green value of the RGB format + * + * @return The green value + */ + public int getGreen() { + return green; + } + + /** + * Returns the blue value of the RGB format + * + * @return The blue value + */ + public int getBlue() { + return blue; + } + + /** + * Returns the red value divided by 255 + * + * @return The offsetX value + */ + @Override + public float getValueX() { + return red / 255F; + } + + /** + * Returns the green value divided by 255 + * + * @return The offsetY value + */ + @Override + public float getValueY() { + return green / 255F; + } + + /** + * Returns the blue value divided by 255 + * + * @return The offsetZ value + */ + @Override + public float getValueZ() { + return blue / 255F; + } + } + + /** + * Represents the color for the {@link ParticleEffects#NOTE} effect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + public static final class NoteColor extends ParticleColor { + private final int note; + + /** + * Construct a new note color + * + * @param note Note id which determines color + * @throws IllegalArgumentException If the note value is lower than 0 or higher than 255 + */ + public NoteColor(int note) throws IllegalArgumentException { + if (note < 0) { + throw new IllegalArgumentException("The note value is lower than 0"); + } + if (note > 24) { + throw new IllegalArgumentException("The note value is higher than 24"); + } + this.note = note; + } + + /** + * Returns the note value divided by 24 + * + * @return The offsetX value + */ + @Override + public float getValueX() { + return note / 24F; + } + + /** + * Returns zero because the offsetY value is unused + * + * @return zero + */ + @Override + public float getValueY() { + return 0; + } + + /** + * Returns zero because the offsetZ value is unused + * + * @return zero + */ + @Override + public float getValueZ() { + return 0; + } + + } + + /** + * Represents a runtime exception that is thrown either if the displayed particle effect requires data and has none or vice-versa or if the data type is incorrect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + private static final class ParticleDataException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new particle data exception + * + * @param message Message that will be logged + */ + public ParticleDataException(String message) { + super(message); + } + } + + /** + * Represents a runtime exception that is thrown either if the displayed particle effect is not colorable or if the particle color type is incorrect + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.7 + */ + private static final class ParticleColorException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new particle color exception + * + * @param message Message that will be logged + */ + public ParticleColorException(String message) { + super(message); + } + } + + /** + * Represents a runtime exception that is thrown if the displayed particle effect requires a newer version + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.6 + */ + private static final class ParticleVersionException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new particle version exception + * + * @param message Message that will be logged + */ + public ParticleVersionException(String message) { + super(message); + } + } + + /** + * Represents a particle effect packet with all attributes which is used for sending packets to the players + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.5 + */ + public static final class ParticlePacket { + private static int version = 7; + private static Class enumParticle; + private static Constructor packetConstructor; + private static Method getHandle; + private static Field playerConnection; + private static Method sendPacket; + private static boolean initialized; + private final ParticleEffects effect; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final float speed; + private final int amount; + private final boolean longDistance; + private final ParticleData data; + private Object packet; + + /** + * Construct a new particle packet + * + * @param effect Particle effect + * @param offsetX Maximum distance particles can fly away from the center on the x-axis + * @param offsetY Maximum distance particles can fly away from the center on the y-axis + * @param offsetZ Maximum distance particles can fly away from the center on the z-axis + * @param speed Display speed of the particles + * @param amount Amount of particles + * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 + * @param data Data of the effect + * @throws IllegalArgumentException If the speed or amount is lower than 0 + * @see #initialize() + */ + public ParticlePacket(ParticleEffects effect, float offsetX, float offsetY, float offsetZ, float speed, int amount, boolean longDistance, ParticleData data) + throws IllegalArgumentException { + initialize(); + if (speed < 0) { + throw new IllegalArgumentException("The speed is lower than 0"); + } + if (amount < 0) { + throw new IllegalArgumentException("The amount is lower than 0"); + } + this.effect = effect; + this.offsetX = offsetX; + this.offsetY = offsetY; + this.offsetZ = offsetZ; + this.speed = speed; + this.amount = amount; + this.longDistance = longDistance; + this.data = data; + } + + /** + * Construct a new particle packet of a single particle flying into a determined direction + * + * @param effect Particle effect + * @param direction Direction of the particle + * @param speed Display speed of the particle + * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 + * @param data Data of the effect + * @throws IllegalArgumentException If the speed is lower than 0 + * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) + */ + public ParticlePacket(ParticleEffects effect, Vector direction, float speed, boolean longDistance, ParticleData data) throws IllegalArgumentException { + this(effect, (float) direction.getX(), (float) direction.getY(), (float) direction.getZ(), speed, 0, longDistance, data); + } + + /** + * Construct a new particle packet of a single colored particle + * + * @param effect Particle effect + * @param color Color of the particle + * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 + * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) + */ + public ParticlePacket(ParticleEffects effect, ParticleColor color, boolean longDistance) { + this(effect, color.getValueX(), color.getValueY(), color.getValueZ(), 1, 0, longDistance, null); + } + + /** + * Initializes {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} and sets {@link #initialized} to true if it succeeds + *

+ * Note: These fields only have to be initialized once, so it will return if {@link #initialized} is already set to true + * + * @throws VersionIncompatibleException if your bukkit version is not supported by this library + */ + public static void initialize() throws VersionIncompatibleException { + if (initialized) { + return; + } + try { + version = Integer.parseInt(ReflectionUtils.PackageType.getServerVersion().split("_")[1]); + } catch (Exception exception) { + throw new VersionIncompatibleException("Your current bukkit version seems to be incompatible with this library", exception); + } + try { + if (version > 7) { + enumParticle = PackageType.MINECRAFT_SERVER.getClass("EnumParticle"); + } + Class packetClass = PackageType.MINECRAFT_SERVER.getClass(version < 7 ? "Packet63WorldParticles" : "PacketPlayOutWorldParticles"); + packetConstructor = ReflectionUtils.getConstructor(packetClass); + getHandle = ReflectionUtils.getMethod("CraftPlayer", PackageType.CRAFTBUKKIT_ENTITY, "getHandle"); + playerConnection = ReflectionUtils.getField("EntityPlayer", PackageType.MINECRAFT_SERVER, false, "playerConnection"); + sendPacket = ReflectionUtils.getMethod(playerConnection.getType(), "sendPacket", PackageType.MINECRAFT_SERVER.getClass("Packet")); + } catch (Exception exception) { + throw new VersionIncompatibleException("Your current bukkit version seems to be incompatible with this library", exception); + } + initialized = true; + } + + /** + * Returns the version of your server (1.x) + * + * @return The version number + */ + public static int getVersion() { + return version; + } + + /** + * Determine if {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} are initialized + * + * @return Whether these fields are initialized or not + * @see #initialize() + */ + public static boolean isInitialized() { + return initialized; + } + + /** + * Initializes {@link #packet} with all set values + * + * @param center Center location of the effect + * @throws PacketInstantiationException If instantion fails due to an unknown error + */ + private void initializePacket(Location center) throws PacketInstantiationException { + if (packet != null) { + return; + } + try { + packet = packetConstructor.newInstance(); + if (version < 8) { + String name = effect.getName(); + if (data != null) { + name += data.getPacketDataString(); + } + ReflectionUtils.setValue(packet, true, "a", name); + } else { + ReflectionUtils.setValue(packet, true, "a", enumParticle.getEnumConstants()[effect.getId()]); + ReflectionUtils.setValue(packet, true, "j", longDistance); + if (data != null) { + ReflectionUtils.setValue(packet, true, "k", data.getPacketData()); + } + } + ReflectionUtils.setValue(packet, true, "b", (float) center.getX()); + ReflectionUtils.setValue(packet, true, "c", (float) center.getY()); + ReflectionUtils.setValue(packet, true, "d", (float) center.getZ()); + ReflectionUtils.setValue(packet, true, "e", offsetX); + ReflectionUtils.setValue(packet, true, "f", offsetY); + ReflectionUtils.setValue(packet, true, "g", offsetZ); + ReflectionUtils.setValue(packet, true, "h", speed); + ReflectionUtils.setValue(packet, true, "i", amount); + } catch (Exception exception) { + throw new PacketInstantiationException("Packet instantiation failed", exception); + } + } + + /** + * Sends the packet to a single player and caches it + * + * @param center Center location of the effect + * @param player Receiver of the packet + * @throws PacketInstantiationException If instantion fails due to an unknown error + * @throws PacketSendingException If sending fails due to an unknown error + * @see #initializePacket(Location) + */ + public void sendTo(Location center, Player player) throws PacketInstantiationException, PacketSendingException { + initializePacket(center); + try { + sendPacket.invoke(playerConnection.get(getHandle.invoke(player)), packet); + } catch (Exception exception) { + throw new PacketSendingException("Failed to send the packet to player '" + player.getName() + "'", exception); + } + } + + /** + * Sends the packet to all players in the list + * + * @param center Center location of the effect + * @param players Receivers of the packet + * @throws IllegalArgumentException If the player list is empty + * @see #sendTo(Location center, Player player) + */ + public void sendTo(Location center, List players) throws IllegalArgumentException { + if (players.isEmpty()) { + throw new IllegalArgumentException("The player list is empty"); + } + for (Player player : players) { + sendTo(center, player); + } + } + + /** + * Sends the packet to all players in a certain range + * + * @param center Center location of the effect + * @param range Range in which players will receive the packet (Maximum range for particles is usually 16, but it can differ for some types) + * @throws IllegalArgumentException If the range is lower than 1 + * @see #sendTo(Location center, Player player) + */ + public void sendTo(Location center, double range) throws IllegalArgumentException { + if (range < 1) { + throw new IllegalArgumentException("The range is lower than 1"); + } + String worldName = center.getWorld().getName(); + double squared = range * range; + for (Player player : Bukkit.getOnlinePlayers()) { + if (!player.getWorld().getName().equals(worldName) || player.getLocation().distanceSquared(center) > squared) { + continue; + } + sendTo(center, player); + } + } + + /** + * Represents a runtime exception that is thrown if a bukkit version is not compatible with this library + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.5 + */ + private static final class VersionIncompatibleException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new version incompatible exception + * + * @param message Message that will be logged + * @param cause Cause of the exception + */ + public VersionIncompatibleException(String message, Throwable cause) { + super(message, cause); + } + } + + /** + * Represents a runtime exception that is thrown if packet instantiation fails + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.4 + */ + private static final class PacketInstantiationException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new packet instantiation exception + * + * @param message Message that will be logged + * @param cause Cause of the exception + */ + public PacketInstantiationException(String message, Throwable cause) { + super(message, cause); + } + } + + /** + * Represents a runtime exception that is thrown if packet sending fails + *

+ * This class is part of the ParticleEffect Library and follows the same usage conditions + * + * @author DarkBlade12 + * @since 1.4 + */ + private static final class PacketSendingException extends RuntimeException { + private static final long serialVersionUID = 3203085387160737484L; + + /** + * Construct a new packet sending exception + * + * @param message Message that will be logged + * @param cause Cause of the exception + */ + public PacketSendingException(String message, Throwable cause) { + super(message, cause); + } + } + } } \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 58b32454c..0c52f51b9 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -112,12 +112,10 @@ public Location getRandomlocation(World world) { if (!plugin.getNms().isEmptyBlock(loc.getBlock())) continue; - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA || loc.clone().add(0, -1, 0).getBlock().getState() - .getType() == Material.STATIONARY_LAVA) + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA) continue; - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER || loc.clone().add(0, -1, 0).getBlock().getState() - .getType() == Material.STATIONARY_WATER) + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER) continue; ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); diff --git a/src/com/bekvon/bukkit/residence/utils/RawMessage.java b/src/com/bekvon/bukkit/residence/utils/RawMessage.java index 31e731b21..2a827ebad 100644 --- a/src/com/bekvon/bukkit/residence/utils/RawMessage.java +++ b/src/com/bekvon/bukkit/residence/utils/RawMessage.java @@ -45,8 +45,11 @@ public RawMessage add(String text, String hoverText, String command, String sugg f += ",\"color\":\"" + color.name().toLowerCase() + "\""; } } - if (hoverText != null) + if (hoverText != null && !hoverText.isEmpty()) { + hoverText = hoverText.replace("\n", "\\n"); + hoverText = hoverText.replace(" \n", " \\n"); f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText) + "\"}]}}"; + } if (suggestion != null) f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + suggestion + "\"}"; if (command != null) { diff --git a/src/com/bekvon/bukkit/residence/utils/TabComplete.java b/src/com/bekvon/bukkit/residence/utils/TabComplete.java index 0dc7686ac..00a5a7299 100644 --- a/src/com/bekvon/bukkit/residence/utils/TabComplete.java +++ b/src/com/bekvon/bukkit/residence/utils/TabComplete.java @@ -17,11 +17,13 @@ public class TabComplete implements TabCompleter { @Override public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { List completionList = new ArrayList<>(); - Set Commands = Residence.getInstance().getHelpPages().getSubCommands(sender, args); - String PartOfCommand = args[args.length - 1]; - StringUtil.copyPartialMatches(PartOfCommand, Commands, completionList); - Collections.sort(completionList); +// if (args.length > 1) { + Set Commands = Residence.getInstance().getHelpPages().getSubCommands(sender, args); + String PartOfCommand = args[args.length - 1]; + StringUtil.copyPartialMatches(PartOfCommand, Commands, completionList); + Collections.sort(completionList); +// } return completionList; } } diff --git a/src/com/bekvon/bukkit/residence/utils/Utils.java b/src/com/bekvon/bukkit/residence/utils/Utils.java new file mode 100644 index 000000000..fcb61c9bf --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/Utils.java @@ -0,0 +1,101 @@ +package com.bekvon.bukkit.residence.utils; + +import java.util.ArrayList; +import java.util.Iterator; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.util.BlockIterator; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.residence.containers.lm; + +public class Utils { + + public Utils() { + } + + public static String to24hourShort(Long ticks) { + long years = ticks / 1000 / 60 / 60 / 24 / 365; + ticks = ticks - (years * 1000 * 60 * 60 * 24 * 365); + + long days = ticks / 1000 / 60 / 60 / 24; + ticks = ticks - (days * 1000 * 60 * 60 * 24); + + long hours = ticks / 1000 / 60 / 60; + ticks = ticks - (hours * 1000 * 60 * 60); + + long minutes = ticks / 1000 / 60; + ticks = ticks - (minutes * 1000 * 60); + + long sec = ticks / 1000; + ticks = ticks - (sec * 1000); + + String time = ""; + + if (years > 0) + time += years == 1 ? Residence.getInstance().getLM().getMessage(lm.info_oneYear, years) : Residence.getInstance().getLM().getMessage(lm.info_years, years); + + if (days > 0) + time += days == 1 ? Residence.getInstance().getLM().getMessage(lm.info_oneDay, days) : Residence.getInstance().getLM().getMessage(lm.info_day, days); + + if (hours > 0) + time += hours == 1 ? Residence.getInstance().getLM().getMessage(lm.info_oneHour, hours) : Residence.getInstance().getLM().getMessage(lm.info_hour, hours); + + if (minutes > 0) + time += Residence.getInstance().getLM().getMessage(lm.info_min, minutes); + + if (sec > 0) + time += Residence.getInstance().getLM().getMessage(lm.info_sec, sec); + + if (time.isEmpty()) + time += Residence.getInstance().getLM().getMessage(lm.info_sec, 0); + + return time; + } + + public static Block getTargetBlock(Player player, int distance, boolean ignoreNoneSolids) { + return getTargetBlock(player, null, distance, ignoreNoneSolids); + } + + public static Block getTargetBlock(Player player, int distance) { + return getTargetBlock(player, null, distance, false); + } + + public static Block getTargetBlock(Player player, Material lookingFor, int distance) { + return getTargetBlock(player, lookingFor, distance, false); + } + + public static Block getTargetBlock(Player player, Material lookingFor, int distance, boolean ignoreNoneSolids) { + if (distance > 15 * 16) + distance = 15 * 16; + if (distance < 1) + distance = 1; + ArrayList blocks = new ArrayList(); + Iterator itr = new BlockIterator(player, distance); + while (itr.hasNext()) { + Block block = itr.next(); + blocks.add(block); + if (distance != 0 && blocks.size() > distance) { + blocks.remove(0); + } + Material material = block.getType(); + + if (ignoreNoneSolids && !block.getType().isSolid()) + continue; + + if (lookingFor == null) { + if (!CMIMaterial.AIR.equals(material) && !CMIMaterial.CAVE_AIR.equals(material) && !CMIMaterial.VOID_AIR.equals(material)) { + break; + } + } else { + if (lookingFor.equals(material)) { + return block; + } + } + } + return !blocks.isEmpty() ? blocks.get(blocks.size() - 1) : null; + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 6765dd0d7..18ff6b850 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -28,52 +28,70 @@ public Version getVersion() { return version; } + public enum Version { - v1_7_R1(), - v1_7_R2(), - v1_7_R3(), - v1_7_R4(), - v1_8_R1(), - v1_8_R2(), - v1_8_R3(), - v1_9_R1(), - v1_9_R2(), - v1_10_R1(), - v1_11_R1(), - v1_11_R2(), - v1_11_R3(), - v1_12_R1(), - v1_12_R2(), - v1_12_R3(), - v1_13_R1(), - v1_13_R2(), - v1_13_R3(); - - private Integer value = null; - private String shortVersion = null; + v1_7_R1(171, "v1_7"), + v1_7_R2(172, "v1_7"), + v1_7_R3(173, "v1_7"), + v1_7_R4(174, "v1_7"), + v1_8_R1(181, "v1_8"), + v1_8_R2(182, "v1_8"), + v1_8_R3(183, "v1_8"), + v1_9_R1(191, "v1_9"), + v1_9_R2(192, "v1_9"), + v1_10_R1(1101, "v1_10"), + v1_11_R1(1111, "v1_11"), + v1_11_R2(1112, "v1_11"), + v1_12_R1(1121, "v1_12"), + v1_12_R2(1122, "v1_12"), + v1_13_R1(1131, "v1_13"), + v1_13_R2(1132, "v1_13"), + v1_14_R1(1141, "v1_14"), + v1_14_R2(1142, "v1_14"), + v1_15_R1(1151, "v1_15"), + v1_15_R2(1152, "v1_15"); + + private Integer value; + private String shortVersion; + + Version(Integer value, String ShortVersion) { + this.value = value; + shortVersion = ShortVersion; + } public Integer getValue() { - if (value == null) - try { - value = Integer.valueOf(this.name().replaceAll("[^\\d.]", "")); - } catch (Exception e) { - } - return this.value; + return value; } public String getShortVersion() { - if (shortVersion == null) - shortVersion = this.name().split("_R")[0]; return shortVersion; } - public boolean isHigher(Version version) { - return getValue() > version.getValue(); + public static Version getCurrent() { + String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); + String vv = v[v.length - 1]; + for (Version one : values()) { + if (one.name().equalsIgnoreCase(vv)) + return one; + } + return null; } public boolean isLower(Version version) { return getValue() < version.getValue(); } + + public boolean isHigher(Version version) { + return getValue() > version.getValue(); + } + + public boolean isEqualOrLower(Version version) { + return getValue() <= version.getValue(); + } + + public boolean isEqualOrHigher(Version version) { + return getValue() >= version.getValue(); + } } public static Version getCurrent() { diff --git a/src/plugin.yml b/src/plugin.yml index 1d0e9332d..875f8534a 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,8 +1,9 @@ name: Residence -main: com.bekvon.bukkit.residence.ResidenceCommandListener -version: 4.7.8.1 +main: com.bekvon.bukkit.residence.Residence +version: 4.7.8.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin +api-version: 1.13 authors: [bekvon,nate302,t00thpick1] softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds,dynmap,LWC,Kingdoms,PlaceholderAPI] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] @@ -302,3 +303,6 @@ permissions: residence.command.version: description: Allows to access particular command default: true + residence.command.siege: + description: Allows to access particular command + default: true From 346c43da93b85150cfdff58175fb73efe933c381 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 30 Jul 2018 12:03:25 +0300 Subject: [PATCH 0502/1142] This doesn't belong here --- src/com/bekvon/bukkit/residence/commands/pset.java | 3 +-- .../residence/{commands => commandsInProgress}/siege.java | 2 +- src/plugin.yml | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) rename src/com/bekvon/bukkit/residence/{commands => commandsInProgress}/siege.java (95%) diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index db99bad96..7e6ea8e05 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -77,8 +77,7 @@ public boolean perform(final Residence plugin, final String[] args, final boolea res.getPermissions().setPlayerFlag(sender, args[2], args[3], args[4], resadmin, true); return true; - } else if ((args.length == 2 || args.length == 3) && plugin.getConfigManager().useFlagGUI()) { - + } else if ((args.length == 2 || args.length == 3) && plugin.getConfigManager().useFlagGUI()) { Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { diff --git a/src/com/bekvon/bukkit/residence/commands/siege.java b/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java similarity index 95% rename from src/com/bekvon/bukkit/residence/commands/siege.java rename to src/com/bekvon/bukkit/residence/commandsInProgress/siege.java index 80c9cd5f9..8f2f94107 100644 --- a/src/com/bekvon/bukkit/residence/commands/siege.java +++ b/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java @@ -1,4 +1,4 @@ -package com.bekvon.bukkit.residence.commands; +package com.bekvon.bukkit.residence.commandsInProgress; import java.util.Arrays; diff --git a/src/plugin.yml b/src/plugin.yml index 875f8534a..782b9175f 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.7.8.2 +version: 4.8.0.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 7c84e4b497605ec2c4fb22bf33962df90f022c61 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 31 Jul 2018 14:29:51 +0300 Subject: [PATCH 0503/1142] partial support for new WorldEdit API --- .../bekvon/bukkit/residence/Residence.java | 15 +- .../bukkit/residence/commands/info.java | 1 + .../selection/Schematics7Manager.java | 154 ++++++++++++++++++ .../selection/SchematicsManager.java | 128 +++++++++------ .../selection/WESchematicManager.java | 15 ++ .../selection/WorldEdit7SelectionManager.java | 125 ++++++++++++++ .../selection/WorldEditSelectionManager.java | 38 +++-- 7 files changed, 404 insertions(+), 72 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/selection/Schematics7Manager.java create mode 100644 src/com/bekvon/bukkit/residence/selection/WESchematicManager.java create mode 100644 src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 8943d5494..78005977a 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -101,6 +101,7 @@ import com.bekvon.bukkit.residence.selection.KingdomsUtil; import com.bekvon.bukkit.residence.selection.SchematicsManager; import com.bekvon.bukkit.residence.selection.SelectionManager; +import com.bekvon.bukkit.residence.selection.WorldEdit7SelectionManager; import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; import com.bekvon.bukkit.residence.selection.WorldGuardUtil; import com.bekvon.bukkit.residence.shopStuff.ShopListener; @@ -756,9 +757,6 @@ public void run() { AutoSelectionManager = new AutoSelection(this); - if (wep != null) - SchematicManager = new SchematicsManager(this); - try { Class.forName("org.bukkit.event.player.PlayerItemDamageEvent"); getServer().getPluginManager().registerEvents(spigotlistener, this); @@ -872,8 +870,17 @@ public boolean validName(String name) { private void setWorldEdit() { Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); if (plugin != null) { - smanager = new WorldEditSelectionManager(server, this); this.wep = (WorldEditPlugin) plugin; + try { + Class.forName("com.sk89q.worldedit.bukkit.selections.Selection"); + smanager = new WorldEditSelectionManager(server, this); + if (wep != null) + SchematicManager = new SchematicsManager(this); + } catch (ClassNotFoundException e) { + smanager = new WorldEdit7SelectionManager(server, this); + if (wep != null) + SchematicManager = new SchematicsManager(this); + } wepid = CMIMaterial.get(this.getWorldEdit().getConfig().getInt("wand-item")); Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit"); } else { diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index c4f801518..6ba81f25c 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -23,6 +23,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Player player = (Player) sender; ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { + Residence.getInstance().getSchematicManager().save(res); plugin.getResidenceManager().printAreaInfo(res.getName(), sender, resadmin); } else { plugin.msg(sender, lm.Invalid_Residence); diff --git a/src/com/bekvon/bukkit/residence/selection/Schematics7Manager.java b/src/com/bekvon/bukkit/residence/selection/Schematics7Manager.java new file mode 100644 index 000000000..a6e4a2ce0 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/selection/Schematics7Manager.java @@ -0,0 +1,154 @@ +package com.bekvon.bukkit.residence.selection; + +import java.io.File; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.VersionChecker.Version; +import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.MaxChangedBlocksException; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.bukkit.BukkitWorld; + +@SuppressWarnings("deprecation") +public class Schematics7Manager implements WESchematicManager { + private Residence plugin; + + public Schematics7Manager(Residence residence) { + this.plugin = residence; + } + + @Override + public boolean save(ClaimedResidence res) { +// if (plugin.getWorldEdit() == null) +// return false; +// if (res == null) +// return false; +// +// CuboidArea area = res.getAreaArray()[0]; +// +// Vector bvmin = new Vector(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); +// Vector bvmax = new Vector(area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); +// Vector origin = new Vector(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); +// +// World bworld = Bukkit.getWorld(res.getWorld()); +// +// if (bworld == null) +// return false; +// +// EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(BukkitAdapter.adapt(bworld), -1); +// editSession.enableQueue(); +// +// Clipboard clipboard = new Clipboard(bvmax.subtract(bvmin).add(new Vector(1, 1, 1)), origin); +// clipboard.setOrigin(origin); +// clipboard.copy(editSession); +// +// File dir = new File(plugin.getDataLocation(), "Schematics"); +// if (!dir.exists()) +// try { +// dir.mkdir(); +// } catch (SecurityException se) { +// } +// dir = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld()); +// if (!dir.exists()) +// try { +// dir.mkdir(); +// } catch (SecurityException se) { +// } +// +// File file = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); +// try { +// com.sk89q.worldedit.schematic.SchematicFormat.MCEDIT.save(clipboard, file); +// } catch (Exception e) { +// return false; +// } +// +// editSession.flushQueue(); + return true; + } + + @Override + public boolean load(ClaimedResidence res) { +// if (plugin.getWorldEdit() == null) +// return false; +// +// if (res == null) +// return false; +// +// World bworld = Bukkit.getWorld(res.getWorld()); +// +// if (bworld == null) +// return false; +// +// EditSession es = WorldEdit.getInstance().getEditSessionFactory().getEditSession(BukkitAdapter.adapt(bworld), -1); +// File file = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); +// +// if (!file.exists()) +// return false; +// +// com.sk89q.worldedit.CuboidClipboard cc = null; +// try { +// cc = CuboidClipboard.loadSchematic(file); +// } catch (Exception e1) { +// e1.printStackTrace(); +// return false; +// } +// +// if (cc == null) +// return false; +// Vector or = cc.getOrigin(); +// ClaimedResidence r1 = plugin.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX(), or.getBlockY(), or.getBlockZ())); +// ClaimedResidence r2 = plugin.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX() + cc.getWidth() - 1, or.getBlockY() + cc.getHeight() - 1, or +// .getBlockZ() + cc.getLength() - 1)); +// if (r1 == null || r2 == null) +// return false; +// +// if (!r1.getName().equalsIgnoreCase(r2.getName())) +// return false; +// +//// int totalBlocks = cc.getHeight() * cc.getLength() * cc.getWidth(); +// +// try { +// cc.paste(es, cc.getOrigin(), false); +// } catch (MaxChangedBlocksException e) { +// e.printStackTrace(); +// return false; +// } + return true; + } + + @Override + public boolean delete(ClaimedResidence res) { + if (plugin.getWorldEdit() == null) + return false; + if (res == null) + return false; + + File file = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + if (!file.exists()) + return false; + + return file.delete(); + } + + @Override + public boolean rename(ClaimedResidence res, String newName) { + if (plugin.getWorldEdit() == null) + return false; + if (res == null) + return false; + + File oldFile = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + + if (!oldFile.exists()) + return false; + + File newFile = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + newName + ".schematic"); + return oldFile.renameTo(newFile); + } +} diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index 3a25c2f89..7b7a07452 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -1,28 +1,33 @@ package com.bekvon.bukkit.residence.selection; import java.io.File; +import java.lang.reflect.InvocationTargetException; + import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.VersionChecker.Version; import com.sk89q.worldedit.CuboidClipboard; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.MaxChangedBlocksException; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.bukkit.BukkitWorld; -import com.sk89q.worldedit.schematic.SchematicFormat; @SuppressWarnings("deprecation") -public class SchematicsManager { +public class SchematicsManager implements WESchematicManager { private Residence plugin; public SchematicsManager(Residence residence) { this.plugin = residence; } + @Override public boolean save(ClaimedResidence res) { + if (plugin.getVersionChecker().getVersion().isEqualOrHigher(Version.v1_13_R1)) + return false; if (plugin.getWorldEdit() == null) return false; if (res == null) @@ -38,39 +43,47 @@ public boolean save(ClaimedResidence res) { if (bworld == null) return false; - - EditSession editSession = new EditSession(new BukkitWorld(bworld), Integer.MAX_VALUE); - editSession.enableQueue(); - CuboidClipboard clipboard = new CuboidClipboard(bvmax.subtract(bvmin).add(new Vector(1, 1, 1)), origin); - clipboard.setOrigin(origin); - clipboard.copy(editSession); - - File dir = new File(plugin.getDataLocation(), "Schematics"); - if (!dir.exists()) - try { - dir.mkdir(); - } catch (SecurityException se) { - } - dir = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld()); - if (!dir.exists()) + try { + EditSession editSession = EditSession.class.getConstructor(BukkitWorld.class, Integer.class).newInstance(new BukkitWorld(bworld), Integer.MAX_VALUE); +// EditSession editSession = new EditSession(new BukkitWorld(bworld), Integer.MAX_VALUE); + editSession.enableQueue(); + com.sk89q.worldedit.CuboidClipboard clipboard = new com.sk89q.worldedit.CuboidClipboard(bvmax.subtract(bvmin).add(new Vector(1, 1, 1)), origin); + clipboard.setOrigin(origin); + clipboard.copy(editSession); + + File dir = new File(plugin.getDataLocation(), "Schematics"); + if (!dir.exists()) + try { + dir.mkdir(); + } catch (SecurityException se) { + } + dir = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld()); + if (!dir.exists()) + try { + dir.mkdir(); + } catch (SecurityException se) { + } + + File file = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); try { - dir.mkdir(); - } catch (SecurityException se) { + com.sk89q.worldedit.schematic.SchematicFormat.MCEDIT.save(clipboard, file); + } catch (Exception e) { + return false; } - File file = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); - try { - SchematicFormat.MCEDIT.save(clipboard, file); - } catch (Exception e) { - return false; + editSession.flushQueue(); + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { + e1.printStackTrace(); } - - editSession.flushQueue(); +// return true; } + @Override public boolean load(ClaimedResidence res) { + if (plugin.getVersionChecker().getVersion().isEqualOrHigher(Version.v1_13_R1)) + return false; if (plugin.getWorldEdit() == null) return false; @@ -81,44 +94,50 @@ public boolean load(ClaimedResidence res) { if (bworld == null) return false; + try { + EditSession es = EditSession.class.getConstructor(BukkitWorld.class, Integer.class).newInstance(new BukkitWorld(bworld), Integer.MAX_VALUE); +// EditSession es = new EditSession(new BukkitWorld(bworld), Integer.MAX_VALUE); + File file = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); - EditSession es = new EditSession(new BukkitWorld(bworld), Integer.MAX_VALUE); - File file = new File(plugin.getDataLocation(), "Schematics" + File.separator + res.getWorld() + File.separator + res.getName() + ".schematic"); + if (!file.exists()) + return false; - if (!file.exists()) - return false; - - CuboidClipboard cc = null; - try { - cc = CuboidClipboard.loadSchematic(file); - } catch (Exception e1) { - e1.printStackTrace(); - return false; - } + com.sk89q.worldedit.CuboidClipboard cc = null; + try { + cc = CuboidClipboard.loadSchematic(file); + } catch (Exception e1) { + e1.printStackTrace(); + return false; + } - if (cc == null) - return false; - Vector or = cc.getOrigin(); - ClaimedResidence r1 = plugin.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX(), or.getBlockY(), or.getBlockZ())); - ClaimedResidence r2 = plugin.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX() + cc.getWidth() - 1, or.getBlockY() + cc.getHeight() - 1, or - .getBlockZ() + cc.getLength() - 1)); - if (r1 == null || r2 == null) - return false; + if (cc == null) + return false; + Vector or = cc.getOrigin(); + ClaimedResidence r1 = plugin.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX(), or.getBlockY(), or.getBlockZ())); + ClaimedResidence r2 = plugin.getResidenceManager().getByLoc(new Location(bworld, or.getBlockX() + cc.getWidth() - 1, or.getBlockY() + cc.getHeight() - 1, or + .getBlockZ() + cc.getLength() - 1)); + if (r1 == null || r2 == null) + return false; - if (!r1.getName().equalsIgnoreCase(r2.getName())) - return false; + if (!r1.getName().equalsIgnoreCase(r2.getName())) + return false; -// int totalBlocks = cc.getHeight() * cc.getLength() * cc.getWidth(); +// int totalBlocks = cc.getHeight() * cc.getLength() * cc.getWidth(); - try { - cc.paste(es, cc.getOrigin(), false); - } catch (MaxChangedBlocksException e) { - e.printStackTrace(); - return false; + try { + cc.paste(es, cc.getOrigin(), false); + } catch (MaxChangedBlocksException e) { + e.printStackTrace(); + return false; + } + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { + e1.printStackTrace(); } + return true; } + @Override public boolean delete(ClaimedResidence res) { if (plugin.getWorldEdit() == null) return false; @@ -132,6 +151,7 @@ public boolean delete(ClaimedResidence res) { return file.delete(); } + @Override public boolean rename(ClaimedResidence res, String newName) { if (plugin.getWorldEdit() == null) return false; diff --git a/src/com/bekvon/bukkit/residence/selection/WESchematicManager.java b/src/com/bekvon/bukkit/residence/selection/WESchematicManager.java new file mode 100644 index 000000000..db11f3255 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/selection/WESchematicManager.java @@ -0,0 +1,15 @@ +package com.bekvon.bukkit.residence.selection; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public interface WESchematicManager { + + boolean save(ClaimedResidence res); + + boolean load(ClaimedResidence res); + + boolean rename(ClaimedResidence res, String newName); + + boolean delete(ClaimedResidence res); + +} diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java new file mode 100644 index 000000000..03cf5b1d9 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java @@ -0,0 +1,125 @@ +package com.bekvon.bukkit.residence.selection; + +import org.bukkit.Location; +import org.bukkit.Server; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.sk89q.worldedit.IncompleteRegionException; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +//import com.sk89q.worldedit.bukkit.selections.CuboidSelection; +//import com.sk89q.worldedit.bukkit.selections.Selection; +import com.sk89q.worldedit.regions.CuboidRegion; +import com.sk89q.worldedit.regions.Region; +import com.sk89q.worldedit.regions.selector.CuboidRegionSelector; +import com.sk89q.worldedit.regions.selector.limit.PermissiveSelectorLimits; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldguard.bukkit.BukkitUtil; + +public class WorldEdit7SelectionManager extends SelectionManager { + + public WorldEdit7SelectionManager(Server serv, Residence plugin) { + super(serv, plugin); + } + + @Override + public boolean worldEdit(Player player) { + WorldEditPlugin wep = (WorldEditPlugin) this.server.getPluginManager().getPlugin("WorldEdit"); + Region sel; + try { + sel = wep.getSession(player).getSelection(wep.getSession(player).getSelectionWorld()); + if (sel != null) { + try { + Location pos1 = new Location(player.getWorld(), sel.getMinimumPoint().getX(), sel.getMinimumPoint().getY(), sel.getMinimumPoint().getZ()); + Location pos2 = new Location(player.getWorld(), sel.getMaximumPoint().getX(), sel.getMaximumPoint().getY(), sel.getMaximumPoint().getZ()); + this.updateLocations(player, pos1, pos2); + } catch (Exception e) { + } + return true; + } + } catch (IncompleteRegionException e1) { + e1.printStackTrace(); + } + return false; + } + + @Override + public boolean worldEditUpdate(Player player) { + if (!hasPlacedBoth(player)) + return false; + + World w = BukkitAdapter.adapt(player.getWorld()); + + plugin.getWorldEdit().getSession(player).getRegionSelector(w).selectPrimary(new Vector(getPlayerLoc1(player).getBlockX(), getPlayerLoc1(player).getBlockY(), getPlayerLoc1(player).getBlockZ()), + PermissiveSelectorLimits.getInstance()); + plugin.getWorldEdit().getSession(player).getRegionSelector(w).selectSecondary(new Vector(getPlayerLoc2(player).getBlockX(), getPlayerLoc2(player).getBlockY(), getPlayerLoc2(player).getBlockZ()), + PermissiveSelectorLimits.getInstance()); + +// CuboidSelection selection = new CuboidSelection(player.getWorld(), getPlayerLoc1(player), getPlayerLoc2(player)); + +// plugin.getWorldEdit().getSession(player).setRegionSelector(plugin.getWorldEdit().getSession(player).getSelectionWorld(), selection.getRegionSelector()); + return true; + } + + @Override + public void placeLoc1(Player player, Location loc, boolean show) { + super.placeLoc1(player, loc, show); + this.worldEditUpdate(player); + } + + @Override + public void placeLoc2(Player player, Location loc, boolean show) { + super.placeLoc2(player, loc, show); + this.worldEditUpdate(player); + } + + @Override + public void sky(Player player, boolean resadmin) { + super.sky(player, resadmin); + this.worldEditUpdate(player); + } + + @Override + public void bedrock(Player player, boolean resadmin) { + super.bedrock(player, resadmin); + this.worldEditUpdate(player); + } + + @Override + public void modify(Player player, boolean shift, double amount) { + super.modify(player, shift, amount); + this.worldEditUpdate(player); + } + + @Override + public void selectChunk(Player player) { + super.selectChunk(player); + this.worldEditUpdate(player); + } + + @Override + public void showSelectionInfo(Player player) { + super.showSelectionInfo(player); + this.worldEditUpdate(player); + } + + @Override + public void regenerate(CuboidArea area) { + // Create new selector + CuboidRegionSelector sellection = new CuboidRegionSelector(BukkitAdapter.adapt(area.getWorld())); + + // set up selector + sellection.selectPrimary(new Vector(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()), PermissiveSelectorLimits.getInstance()); + sellection.selectSecondary(new Vector(area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()), PermissiveSelectorLimits.getInstance()); + + // set up CuboidSelection + CuboidRegion cuboid = sellection.getIncompleteRegion(); + +// Region region = selection..getRegionSelector().getRegion(); + cuboid.getWorld().regenerate(cuboid, WorldEdit.getInstance().getEditSessionFactory().getEditSession(cuboid.getWorld(), -1)); + } +} diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 53c8fc1fb..46f3c2b09 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -10,6 +10,8 @@ import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; +import java.lang.reflect.InvocationTargetException; + import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.entity.Player; @@ -23,19 +25,22 @@ public WorldEditSelectionManager(Server serv, Residence plugin) { @Override public boolean worldEdit(Player player) { WorldEditPlugin wep = (WorldEditPlugin) this.server.getPluginManager().getPlugin("WorldEdit"); - com.sk89q.worldedit.bukkit.selections.Selection sel = wep.getSelection(player); - - if (sel != null) { - Location pos1 = sel.getMinimumPoint(); - Location pos2 = sel.getMaximumPoint(); - try { - CuboidRegion region = (CuboidRegion) sel.getRegionSelector().getRegion(); - pos1 = new Location(player.getWorld(), region.getPos1().getX(), region.getPos1().getY(), region.getPos1().getZ()); - pos2 = new Location(player.getWorld(), region.getPos2().getX(), region.getPos2().getY(), region.getPos2().getZ()); - } catch (Exception e) { + try { + com.sk89q.worldedit.bukkit.selections.Selection sel = (com.sk89q.worldedit.bukkit.selections.Selection) wep.getClass().getMethod("getSelection", Player.class).invoke(wep, player); + if (sel != null) { + Location pos1 = sel.getMinimumPoint(); + Location pos2 = sel.getMaximumPoint(); + try { + CuboidRegion region = (CuboidRegion) sel.getRegionSelector().getRegion(); + pos1 = new Location(player.getWorld(), region.getPos1().getX(), region.getPos1().getY(), region.getPos1().getZ()); + pos2 = new Location(player.getWorld(), region.getPos2().getX(), region.getPos2().getY(), region.getPos2().getZ()); + } catch (Exception e) { + } + this.updateLocations(player, pos1, pos2); + return true; } - this.updateLocations(player, pos1, pos2); - return true; + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { + e1.printStackTrace(); } return false; } @@ -45,7 +50,13 @@ public boolean worldEditUpdate(Player player) { if (!hasPlacedBoth(player)) return false; CuboidSelection selection = new CuboidSelection(player.getWorld(), getPlayerLoc1(player), getPlayerLoc2(player)); - plugin.getWorldEdit().setSelection(player, selection); + try { + plugin.getWorldEdit().getClass().getMethod("setSelection", Player.class, com.sk89q.worldedit.bukkit.selections.Selection.class).invoke(plugin.getWorldEdit(), player, selection); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { + e.printStackTrace(); + } + +// plugin.getWorldEdit().setSelection(player, selection); return true; } @@ -91,7 +102,6 @@ public void showSelectionInfo(Player player) { this.worldEditUpdate(player); } - @Override public void regenerate(CuboidArea area) { CuboidSelection selection = new CuboidSelection(area.getWorld(), area.getLowLoc(), area.getHighLoc()); From 60ad4496b1008ea8e1b7176b2faaa548990981af Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 1 Aug 2018 10:51:49 +0300 Subject: [PATCH 0504/1142] Lets default selection manager if WE fails --- src/com/bekvon/bukkit/residence/Residence.java | 10 +++++++--- src/plugin.yml | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 78005977a..d482387fa 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -99,8 +99,10 @@ import com.bekvon.bukkit.residence.protection.WorldFlagManager; import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.selection.KingdomsUtil; +import com.bekvon.bukkit.residence.selection.Schematics7Manager; import com.bekvon.bukkit.residence.selection.SchematicsManager; import com.bekvon.bukkit.residence.selection.SelectionManager; +import com.bekvon.bukkit.residence.selection.WESchematicManager; import com.bekvon.bukkit.residence.selection.WorldEdit7SelectionManager; import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; import com.bekvon.bukkit.residence.selection.WorldGuardUtil; @@ -186,7 +188,7 @@ public class Residence extends JavaPlugin { protected Sorting SortingManager; protected ActionBar ABManager; protected AutoSelection AutoSelectionManager; - protected SchematicsManager SchematicManager; + protected WESchematicManager SchematicManager; private InformationPager InformationPagerManager; private WorldGuardUtil worldGuardUtil; private KingdomsUtil kingdomsUtil; @@ -879,8 +881,10 @@ private void setWorldEdit() { } catch (ClassNotFoundException e) { smanager = new WorldEdit7SelectionManager(server, this); if (wep != null) - SchematicManager = new SchematicsManager(this); + SchematicManager = new Schematics7Manager(this); } + if (smanager == null) + smanager = new SelectionManager(server, this); wepid = CMIMaterial.get(this.getWorldEdit().getConfig().getInt("wand-item")); Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit"); } else { @@ -976,7 +980,7 @@ public DynMapManager getDynManager() { return DynManager; } - public SchematicsManager getSchematicManager() { + public WESchematicManager getSchematicManager() { return SchematicManager; } diff --git a/src/plugin.yml b/src/plugin.yml index 782b9175f..5a2f680fa 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.0.0 +version: 4.8.0.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 4ba06153fe5b38f6b1ea36119d9e84a3a4d6abdc Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 1 Aug 2018 10:52:29 +0300 Subject: [PATCH 0505/1142] resadmin should be back --- src/com/bekvon/bukkit/residence/Residence.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index d482387fa..3060d7b0c 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -485,12 +485,12 @@ public void onEnable() { } this.getCommand("res").setExecutor(getCommandManager()); -// this.getCommand("resadmin").setExecutor(getCommandManager()); -// this.getCommand("residence").setExecutor(getCommandManager()); + this.getCommand("resadmin").setExecutor(getCommandManager()); + this.getCommand("residence").setExecutor(getCommandManager()); this.getCommand("res").setTabCompleter(new TabComplete()); -// this.getCommand("resadmin").setTabCompleter(new TabComplete()); -// this.getCommand("residence").setTabCompleter(new TabComplete()); + this.getCommand("resadmin").setTabCompleter(new TabComplete()); + this.getCommand("residence").setTabCompleter(new TabComplete()); // Residence.getConfigManager().UpdateConfigFile(); From d7cdacbb97857ed83b1841be961c4bf39d0a47e7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 3 Sep 2018 18:04:49 +0300 Subject: [PATCH 0506/1142] Lets support 1.13.1 --- .../bukkit/residence/CMILib/CMIEffect.java | 16 +- .../residence/CMILib/CMIEffectManager.java | 22 +- .../bukkit/residence/CMILib/CMIItemStack.java | 15 +- .../bukkit/residence/CMILib/ItemManager.java | 1073 ++++++++++------- .../residence/CMILib/ItemReflection.java | 37 +- .../bukkit/residence/allNms/v1_10_R1.java | 12 +- .../bukkit/residence/allNms/v1_11_R1.java | 3 +- .../bukkit/residence/allNms/v1_12_R1.java | 3 +- .../bukkit/residence/allNms/v1_13_R1.java | 7 - .../residence/allNms/v1_7_Couldron.java | 1 - .../bukkit/residence/allNms/v1_7_R4.java | 1 - .../bukkit/residence/allNms/v1_8_R1.java | 3 +- .../bukkit/residence/allNms/v1_8_R2.java | 3 +- .../bukkit/residence/allNms/v1_8_R3.java | 3 +- .../bukkit/residence/allNms/v1_9_R1.java | 3 +- .../bukkit/residence/allNms/v1_9_R2.java | 3 +- .../residence/economy/TransactionManager.java | 1 + .../residence/protection/FlagPermissions.java | 12 +- .../residence/utils/ParticleEffects.java | 2 +- .../residence/utils/VersionChecker.java | 16 +- src/plugin.yml | 2 +- 21 files changed, 708 insertions(+), 530 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/CMILib/CMIEffect.java b/src/com/bekvon/bukkit/residence/CMILib/CMIEffect.java index e418dc988..ef9fd47ad 100644 --- a/src/com/bekvon/bukkit/residence/CMILib/CMIEffect.java +++ b/src/com/bekvon/bukkit/residence/CMILib/CMIEffect.java @@ -1,10 +1,9 @@ +/** + * Copyright (C) 2017 Zrips + */ package com.bekvon.bukkit.residence.CMILib; -import java.lang.reflect.Method; - import org.bukkit.Color; -import org.bukkit.Location; -import org.bukkit.entity.Player; import org.bukkit.util.Vector; import com.bekvon.bukkit.residence.CMILib.CMIEffectManager.CMIParticle; @@ -17,7 +16,6 @@ public class CMIEffect { private int size = 1; private int amount = 1; private float speed = 0; - private Location loc; public CMIEffect(CMIParticle particle) { this.particle = particle; @@ -73,12 +71,4 @@ public void setSize(int size) { this.size = size; } - public Location getLoc() { - return loc; - } - - public void setLoc(Location loc) { - this.loc = loc; - } - } diff --git a/src/com/bekvon/bukkit/residence/CMILib/CMIEffectManager.java b/src/com/bekvon/bukkit/residence/CMILib/CMIEffectManager.java index 47d109a42..d8afe7b38 100644 --- a/src/com/bekvon/bukkit/residence/CMILib/CMIEffectManager.java +++ b/src/com/bekvon/bukkit/residence/CMILib/CMIEffectManager.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2017 Zrips + */ package com.bekvon.bukkit.residence.CMILib; import java.util.ArrayList; @@ -7,12 +10,11 @@ import org.bukkit.Effect.Type; import org.bukkit.Material; -import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; -public class CMIEffectManager { +public class CMIEffectManager { public enum CMIParticleType { SOUND, VISUAL, PARTICLE, NONE; } @@ -219,9 +221,9 @@ public static CMIParticle getCMIParticle(String name) { break; } } - if (cmiEffect != null && Residence.getInstance().getVersionChecker().getVersion().isEqualOrHigher(Version.v1_9_R1) && cmiEffect.getParticle() == null) + if (cmiEffect != null && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && cmiEffect.getParticle() == null) return null; - if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_13_R1) && cmiEffect != null && cmiEffect.getEffect() == null) + if (Version.isCurrentLower(Version.v1_13_R1) && cmiEffect != null && cmiEffect.getEffect() == null) return null; return cmiEffect; } @@ -292,13 +294,13 @@ public Material getIcon() { } public static List getParticleList() { - List ls = new ArrayList(); + List ls = new ArrayList<>(); for (CMIParticle one : CMIParticle.values()) { if (!one.isParticle()) continue; - if (Residence.getInstance().getVersionChecker().getVersion().isEqualOrHigher(Version.v1_9_R1) && one.getParticle() == null) + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && one.getParticle() == null) continue; - if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_13_R1) && one.getEffect() == null) + if (Version.isCurrentLower(Version.v1_13_R1) && one.getEffect() == null) continue; ls.add(one); } @@ -315,7 +317,7 @@ public CMIParticle getNextPartcileEffect() { if (!next.isParticle()) continue; - if (Residence.getInstance().getVersionChecker().getVersion().isEqualOrHigher(Version.v1_9_R1) && next.getParticle() == null) + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && next.getParticle() == null) continue; if (next.equals(this)) { @@ -335,7 +337,7 @@ public CMIParticle getPrevParticleEffect() { if (next == null) continue; - if (Residence.getInstance().getVersionChecker().getVersion().isEqualOrHigher(Version.v1_9_R1) && next.getParticle() == null) + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && next.getParticle() == null) continue; if (!next.isParticle()) @@ -358,7 +360,7 @@ public void setSecondaryName(String secondaryName) { } public org.bukkit.Particle getParticle() { - if (Residence.getInstance().getVersionChecker().getVersion().isEqualOrLower(Version.v1_8_R3)) + if (Version.isCurrentEqualOrLower(Version.v1_8_R3)) return null; if (particle == null) { String n = this.toString().replace("_", "").toLowerCase(); diff --git a/src/com/bekvon/bukkit/residence/CMILib/CMIItemStack.java b/src/com/bekvon/bukkit/residence/CMILib/CMIItemStack.java index 459a0c455..ce56c3e88 100644 --- a/src/com/bekvon/bukkit/residence/CMILib/CMIItemStack.java +++ b/src/com/bekvon/bukkit/residence/CMILib/CMIItemStack.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2017 Zrips + */ package com.bekvon.bukkit.residence.CMILib; import java.util.ArrayList; @@ -14,10 +17,10 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; + public class CMIItemStack { private int id = 0; @@ -107,7 +110,7 @@ public CMIItemStack addLore(String string) { ItemMeta meta = this.getItemStack().getItemMeta(); List lore = meta.getLore(); if (lore == null) - lore = new ArrayList(); + lore = new ArrayList<>(); lore.add(ChatColor.translateAlternateColorCodes('&', string)); meta.setLore(lore); this.getItemStack().setItemMeta(meta); @@ -116,7 +119,7 @@ public CMIItemStack addLore(String string) { public CMIItemStack clearLore() { ItemMeta meta = this.getItemStack().getItemMeta(); - List t = new ArrayList(); + List t = new ArrayList<>(); meta.setLore(t); this.getItemStack().setItemMeta(meta); return this; @@ -126,7 +129,7 @@ public CMIItemStack setLore(List lore) { if (lore == null || lore.isEmpty()) return this; ItemMeta meta = this.getItemStack().getItemMeta(); - List t = new ArrayList(); + List t = new ArrayList<>(); for (String one : lore) { t.add(ChatColor.translateAlternateColorCodes('&', one)); } @@ -165,7 +168,7 @@ public List getLore() { if (meta != null) { List lore = meta.getLore(); if (lore == null) { - lore = new ArrayList(); + lore = new ArrayList<>(); meta.setLore(lore); } @@ -222,7 +225,7 @@ public void setCMIMaterial(CMIMaterial material) { @SuppressWarnings("deprecation") public ItemStack getItemStack() { if (item == null) { - if (Residence.getInstance().getVersionChecker().getVersion().isEqualOrHigher(Version.v1_13_R1)) { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { this.item = new ItemStack(material.getMaterial(), this.amount == 0 ? 1 : this.amount); } else { this.item = new ItemStack(material.getMaterial(), this.amount == 0 ? 1 : this.amount, data); diff --git a/src/com/bekvon/bukkit/residence/CMILib/ItemManager.java b/src/com/bekvon/bukkit/residence/CMILib/ItemManager.java index a7566a0da..9bf1d8553 100644 --- a/src/com/bekvon/bukkit/residence/CMILib/ItemManager.java +++ b/src/com/bekvon/bukkit/residence/CMILib/ItemManager.java @@ -1,3 +1,6 @@ +/** + * Copyright (C) 2017 Zrips + */ package com.bekvon.bukkit.residence.CMILib; import java.util.ArrayList; @@ -17,19 +20,19 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.meta.SkullMeta; -import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; + public class ItemManager { - static HashMap byId = new HashMap(); - static HashMap byBukkitName = new HashMap(); - static HashMap byMojangName = new HashMap(); - static HashMap byMaterial = new HashMap(); - static Version version; + static HashMap byId = new HashMap<>(); + static HashMap byBukkitName = new HashMap<>(); + static HashMap byMojangName = new HashMap<>(); + static HashMap byMaterial = new HashMap<>(); + static final Version version = Version.getCurrent(); public static void load() { - version = Residence.getInstance().getVersionChecker().getVersion(); + for (CMIMaterial one : CMIMaterial.values()) { if (one == null) continue; @@ -58,17 +61,19 @@ public static void load() { cm.setBukkitName(bukkitName); cm.setMojangName(mojangName); - byBukkitName.put(id + ":" + cm.getData(), cm); - byBukkitName.put(legacyId + ":" + cm.getData(), cm); + byBukkitName.put(id + ":" + one.getData(), cm); + byBukkitName.put(legacyId + ":" + one.getLegacyData(), cm); if (!one.getLegacyName().isEmpty()) { byBukkitName.put(one.getLegacyName().toLowerCase().replace("_", "").replace(" ", ""), cm); } byBukkitName.put(one.name().toLowerCase().replace("_", "").replace(" ", ""), cm); - String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); + if (mojangName != null) { + String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); + if (!byMojangName.containsKey(n)) + byMojangName.put(n, cm); + } - if (!byMojangName.containsKey(n)) - byMojangName.put(n, cm); byMaterial.put(one, cm); if (!byId.containsKey(id)) byId.put(id, cm); @@ -119,7 +124,7 @@ public static CMIItemStack getItem(ItemStack item) { return cm; } - static HashMap headCache = new HashMap(); + static HashMap headCache = new HashMap<>(); public static CMIItemStack getItem(String name) { if (byBukkitName.isEmpty()) @@ -276,7 +281,7 @@ public static CMIItemStack getItem(String name) { } static public List getAllRecipes() { - List results = new ArrayList(); + List results = new ArrayList<>(); Iterator iter = Bukkit.recipeIterator(); while (iter.hasNext()) { Recipe recipe = iter.next(); @@ -287,7 +292,7 @@ static public List getAllRecipes() { static public List getRecipesFor(ItemStack result) { - List results = new ArrayList(); + List results = new ArrayList<>(); Iterator iter = Bukkit.recipeIterator(); while (iter.hasNext()) { Recipe recipe = iter.next(); @@ -596,342 +601,59 @@ public static String getRealNameByType(EntityType type) { } } - public enum CMIMaterial { + public static enum CMIMaterial { NONE(-1, -1, -1, "None"), - AIR(0, 0, 9648, "Unknown", "Air"), - STONE(1, 0, 22948, "Stone"), - GRANITE(1, 1, 21091, "Granite"), - POLISHED_GRANITE(1, 2, 5477, "Polished Granite"), - DIORITE(1, 3, 24688, "Diorite"), - POLISHED_DIORITE(1, 4, 31615, "Polished Diorite"), - ANDESITE(1, 5, 25975, "Andesite"), - POLISHED_ANDESITE(1, 6, 8335, "Polished Andesite"), - GRASS_BLOCK(2, 0, 28346, "Grass", "Grass Block"), - DIRT(3, 0, 10580, "Dirt"), - COARSE_DIRT(3, 1, 15411, "Coarse Dirt"), - PODZOL(3, 2, 24068, "Podzol"), - COBBLESTONE(4, 0, 32147, "Cobblestone"), - OAK_PLANKS(5, 0, 14905, "Oak Wood Plank", "Oak Planks"), - SPRUCE_PLANKS(5, 1, 14593, "Spruce Wood Plank", "Spruce Planks"), - BIRCH_PLANKS(5, 2, 29322, "Birch Wood Plank", "Birch Planks"), - JUNGLE_PLANKS(5, 3, 26445, "Jungle Wood Plank", "Jungle Planks"), - ACACIA_PLANKS(5, 4, 31312, "Acacia Wood Plank", "Acacia Planks"), - DARK_OAK_PLANKS(5, 5, 20869, "Dark Oak Wood Plank", "Dark Oak Planks"), - OAK_SAPLING(6, 0, 9636, "Oak Sapling"), - SPRUCE_SAPLING(6, 1, 19874, "Spruce Sapling"), - BIRCH_SAPLING(6, 2, 31533, "Birch Sapling"), - JUNGLE_SAPLING(6, 3, 17951, "Jungle Sapling"), - ACACIA_SAPLING(6, 4, 20806, "Acacia Sapling"), - ACACIA_SLAB(126, 4, 23730, "Acacia Wood Slab", "Acacia Slab"), - DARK_OAK_SLAB(126, 5, 28852, "Dark Oak Wood Slab", "Dark Oak Slab"), - COCOA(127, 0, 29709, "Cocoa"), - SANDSTONE_STAIRS(128, 0, 18474, "Sandstone Stairs"), - EMERALD_ORE(129, 0, 16630, "Emerald Ore"), - ENDER_CHEST(130, 0, 32349, "Ender Chest"), - TRIPWIRE_HOOK(131, 0, 8130, "Tripwire Hook"), - TRIPWIRE(132, 0, 8810, "Tripwire"), - EMERALD_BLOCK(133, 0, 9914, "Emerald Block", "Block of Emerald"), - SPRUCE_STAIRS(134, 0, 11192, "Spruce Wood Stairs", "Spruce Stairs"), - BIRCH_STAIRS(135, 0, 7657, "Birch Wood Stairs", "Birch Stairs"), - JUNGLE_STAIRS(136, 0, 20636, "Jungle Wood Stairs", "Jungle Stairs"), - CHAINMAIL_BOOTS(305, 0, 17953, "Chainmail Boots"), - IRON_HELMET(306, 0, 12025, "Iron Helmet"), - IRON_CHESTPLATE(307, 0, 28112, "Iron Chestplate"), - IRON_LEGGINGS(308, 0, 18951, "Iron Leggings"), - IRON_BOOTS(309, 0, 8531, "Iron Boots"), - DIAMOND_HELMET(310, 0, 10755, "Diamond Helmet"), - DIAMOND_CHESTPLATE(311, 0, 32099, "Diamond Chestplate"), - DIAMOND_LEGGINGS(312, 0, 11202, "Diamond Leggings"), - DIAMOND_BOOTS(313, 0, 16522, "Diamond Boots"), - GOLDEN_HELMET(314, 0, 7945, "Golden Helmet"), - GOLDEN_CHESTPLATE(315, 0, 4507, "Golden Chestplate"), - GOLDEN_LEGGINGS(316, 0, 21002, "Golden Leggings"), - GOLDEN_BOOTS(317, 0, 7859, "Golden Boots"), - FLINT(318, 0, 23596, "Flint"), - PORKCHOP(319, 0, 30896, "Raw Porkchop"), - COOKED_PORKCHOP(320, 0, 27231, "Cooked Porkchop", "grilledpork"), - PAINTING(321, 0, 23945, "Painting"), - GOLDEN_APPLE(322, 0, 27732, "Golden Apple"), - ENCHANTED_GOLDEN_APPLE(322, 1, 8280, "Enchanted Golden Apple"), - SIGN(323, 0, 16918, "Sign"), - OAK_DOOR(324, 0, 20341, "Wooden Door", "wooddoor"), - BUCKET(325, 0, 15215, "Bucket"), - WATER_BUCKET(326, 0, 8802, "Water Bucket"), - LAVA_BUCKET(327, 0, 9228, "Lava Bucket"), - MINECART(328, 0, 14352, "Minecart"), - SADDLE(329, 0, 30206, "Saddle"), - IRON_DOOR(330, 0, 4788, "Iron Door"), - REDSTONE(331, 0, 11233, "Redstone", "Redstone Dust"), - SNOWBALL(332, 0, 19487, "Snowball"), - OAK_BOAT(333, 0, 17570, "Boat", "Oak Boat"), - LEATHER(334, 0, 16414, "Leather"), - MILK_BUCKET(335, 0, 9680, "Milk Bucket"), - BRICK(336, 0, 6820, "Brick", "claybrick"), - CLAY_BALL(337, 0, 24603, "Clay Ball", "Clay"), - SUGAR_CANE(338, 0, 7726, "Sugar Canes", "Sugar Cane"), - PAPER(339, 0, 9923, "Paper"), - BOOK(340, 0, 23097, "Book"), - SLIME_BALL(341, 0, 5242, "Slimeball"), - CHEST_MINECART(342, 0, 4497, "Minecart with Chest", "Storageminecart"), - FURNACE_MINECART(343, 0, 14196, "Minecart with Furnace", "POWERED_MINECART"), - EGG(344, 0, 21603, "Egg"), - COMPASS(345, 0, 24139, "Compass"), - FISHING_ROD(346, 0, 4167, "Fishing Rod"), - CLOCK(347, 0, 14980, "Clock", "watch"), - GLOWSTONE_DUST(348, 0, 6665, "Glowstone Dust"), - RAW_FISH(349, 0, 24691, "Raw Fish", "RAW_FISH"), - SALMON(349, 1, 18516, "Raw Salmon"), - CLOWN_FISH(349, 2, 12795, "Clownfish"), - PUFFERFISH(349, 3, 8115, "Pufferfish"), - COOKED_FISH(350, 0, 9681, "Cooked Fish", "COOKED_FISH"), - COOKED_SALMON(350, 1, 5615, "Cooked Salmon"), - INK_SAC(351, 0, 7184, "Ink Sack", "Ink Sac"), - ROSE_RED(351, 1, 15694, "Rose Red"), - CACTUS_GREEN(351, 2, 17296, "Cactus Green"), - COCOA_BEANS(351, 3, 27381, "Coco Beans", "INK_SACK"), - LAPIS_LAZULI(351, 4, 11075, "Lapis Lazuli"), - PURPLE_DYE(351, 5, 6347, "Purple Dye"), - CYAN_DYE(351, 6, 8043, "Cyan Dye"), - LIGHT_GRAY_DYE(351, 7, 27643, "Light Gray Dye"), - GRAY_DYE(351, 8, 9184, "Gray Dye"), - PINK_DYE(351, 9, 31151, "Pink Dye"), - LIME_DYE(351, 10, 6147, "Lime Dye"), - DANDELION_YELLOW(351, 11, 21789, "Dandelion Yellow"), - LIGHT_BLUE_DYE(351, 12, 28738, "Light Blue Dye"), - MAGENTA_DYE(351, 13, 11788, "Magenta Dye"), - ORANGE_DYE(351, 14, 13866, "Orange Dye"), - BONE_MEAL(351, 15, 32458, "Bone Meal"), - BONE(352, 0, 5686, "Bone"), - SUGAR(353, 0, 30638, "Sugar"), - CAKE(354, 0, 27048, "Cake"), - WHITE_BED(355, 0, 8185, "White Bed", "Bed"), - ORANGE_BED(355, 1, 11194, "Orange Bed", "Orange Bed"), - MAGENTA_BED(355, 2, 20061, "Magenta Bed", "Magenta Bed"), - LIGHT_BLUE_BED(355, 3, 20957, "Light Blue Bed", "Light Blue Bed"), - YELLOW_BED(355, 4, 30410, "Yellow Bed", "Yellow Bed"), - LIME_BED(355, 5, 27860, "Lime Bed", "Lime Bed"), - PINK_BED(355, 6, 13795, "Pink Bed", "Pink Bed"), - GRAY_BED(355, 7, 15745, "Gray Bed", "Gray Bed"), - LIGHT_GRAY_BED(355, 8, 5090, "Light Gray Bed", "Light Gray Bed"), - CYAN_BED(355, 9, 16746, "Cyan Bed", "Cyan Bed"), - PURPLE_BED(355, 10, 29755, "Purple Bed", "Purple Bed"), - BLUE_BED(355, 11, 12714, "Blue Bed", "Blue Bed"), - BROWN_BED(355, 12, 25624, "Brown Bed", "Brown Bed"), - GREEN_BED(355, 13, 13797, "Green Bed", "Green Bed"), - RED_BED(355, 14, 30910, "Red Bed", "Red Bed"), - BLACK_BED(355, 15, 20490, "Black Bed", "Black Bed"), - REPEATER(356, 0, 28823, "Redstone Repeater", "Diode"), - COOKIE(357, 0, 27431, "Cookie"), - FILLED_MAP(358, 0, 23504, "Map"), - SHEARS(359, 0, 27971, "Shears"), - MELON_SLICE(360, 0, 5347, "Melon", "Melon Slice"), - PUMPKIN_SEEDS(361, 0, 28985, "Pumpkin Seeds"), - MELON_SEEDS(362, 0, 18340, "Melon Seeds"), - BEEF(363, 0, 4803, "Raw Beef"), - COOKED_BEEF(364, 0, 21595, "Steak"), - CHICKEN(365, 0, 17281, "Raw Chicken"), - COOKED_CHICKEN(366, 0, 20780, "Cooked Chicken"), - ROTTEN_FLESH(367, 0, 21591, "Rotten Flesh"), - ENDER_PEARL(368, 0, 5259, "Ender Pearl"), - BLAZE_ROD(369, 0, 8289, "Blaze Rod"), - GHAST_TEAR(370, 0, 18222, "Ghast Tear"), - GOLD_NUGGET(371, 0, 28814, "Gold Nugget"), - NETHER_STALK(372, 0, 29227, "Nether Wart", "NETHER_STALK"), - POTION(373, 0, 24020, "Potion"), - GLASS_BOTTLE(374, 0, 6116, "Glass Bottle"), - SPIDER_EYE(375, 0, 9318, "Spider Eye"), - FERMENTED_SPIDER_EYE(376, 0, 19386, "Fermented Spider Eye"), - BLAZE_POWDER(377, 0, 18941, "Blaze Powder"), - MAGMA_CREAM(378, 0, 25097, "Magma Cream"), - BREWING_STAND_ITEM(379, 0, 14539, "Brewing Stand", "BREWING_STAND_ITEM"), - CAULDRON_ITEM(380, 0, 26531, "Cauldron", "CAULDRON_ITEM"), - ENDER_EYE(381, 0, 24860, "Eye of Ender"), - GLISTERING_MELON_SLICE(382, 0, 20158, "Glistering Melon", "speckledmelon"), - ELDER_GUARDIAN_SPAWN_EGG(383, 4, 11418, "Spawn Elder Guardian", "Elder Guardian Spawn Egg"), - WITHER_SKELETON_SPAWN_EGG(383, 5, 10073, "Spawn Wither Skeleton", "Wither Skeleton Spawn Egg"), - STRAY_SPAWN_EGG(383, 6, 30153, "Spawn Stray", "Stray Spawn Egg"), - HUSK_SPAWN_EGG(383, 23, 20178, "Spawn Husk", "Husk Spawn Egg"), - ZOMBIE_VILLAGER_SPAWN_EGG(383, 27, 10311, "Spawn Zombie Villager", "Zombie Villager Spawn Egg"), - SKELETON_HORSE_SPAWN_EGG(383, 28, 21356, "Spawn Skeleton Horse", "Skeleton Horse Spawn Egg"), - ZOMBIE_HORSE_SPAWN_EGG(383, 29, 4275, "Spawn Zombie Horse", "Zombie Horse Spawn Egg"), - ARMOR_STAND_SPAWN_EGG(383, 30, -1, "Spawn Armor Stand", "MONSTER_EGG"), - DONKEY_SPAWN_EGG(383, 31, 14513, "Spawn Donkey", "Donkey Spawn Egg"), - MULE_SPAWN_EGG(383, 32, 11229, "Spawn Mule", "Mule Spawn Egg"), - EVOKER_SPAWN_EGG(383, 34, 19365, "Spawn Evoker", "Evoker Spawn Egg"), - VEX_SPAWN_EGG(383, 35, 27751, "Spawn Vex", "Vex Spawn Egg"), - VINDICATOR_SPAWN_EGG(383, 36, 21672, "Spawn Vindicator", "Vindicator Spawn Egg"), - ILLUSIONER_SPAWN_EGG(383, 37, -1, "Spawn Illusioner", "MONSTER_EGG"), - CREEPER_SPAWN_EGG(383, 50, 9653, "Spawn Creeper", "Creeper Spawn Egg"), - SKELETON_SPAWN_EGG(383, 51, 15261, "Spawn Skeleton", "Skeleton Spawn Egg"), - SPIDER_SPAWN_EGG(383, 52, 14984, "Spawn Spider", "Spider Spawn Egg"), - GIANT_SPAWN_EGG(383, 53, -1, "Spawn Giant", "MONSTER_EGG"), - ZOMBIE_SPAWN_EGG(383, 54, 5814, "Spawn Zombie", "Zombie Spawn Egg"), - SLIME_SPAWN_EGG(383, 55, 6550, "Spawn Slime", "Slime Spawn Egg"), - GHAST_SPAWN_EGG(383, 56, 9970, "Spawn Ghast", "Ghast Spawn Egg"), - ZOMBIE_PIGMAN_SPAWN_EGG(383, 57, 11531, "Spawn Zombie Pigman", "Zombie Pigman Spawn Egg"), - ENDERMAN_SPAWN_EGG(383, 58, 29488, "Spawn Enderman", "Enderman Spawn Egg"), - CAVE_SPIDER_SPAWN_EGG(383, 59, 23341, "Spawn Cave Spider", "Cave Spider Spawn Egg"), - SILVERFISH_SPAWN_EGG(383, 60, 14537, "Spawn Silverfish", "Silverfish Spawn Egg"), - BLAZE_SPAWN_EGG(383, 61, 4759, "Spawn Blaze", "Blaze Spawn Egg"), - MAGMA_CUBE_SPAWN_EGG(383, 62, 26638, "Spawn Magma Cube", "Magma Cube Spawn Egg"), - ENDER_DRAGON_SPAWN_EGG(383, 63, -1, "Spawn Ender Dragon", "MONSTER_EGG"), - WITHER_SPAWN_EGG(383, 64, -1, "Spawn Wither", "MONSTER_EGG"), - BAT_SPAWN_EGG(383, 65, 14607, "Spawn Bat", "Bat Spawn Egg"), - WITCH_SPAWN_EGG(383, 66, 11837, "Spawn Witch", "Witch Spawn Egg"), - ENDERMITE_SPAWN_EGG(383, 67, 16617, "Spawn Endermite", "Endermite Spawn Egg"), - GUARDIAN_SPAWN_EGG(383, 68, 20113, "Spawn Guardian", "Guardian Spawn Egg"), - SHULKER_SPAWN_EGG(383, 69, 31848, "Spawn Shulker", "Shulker Spawn Egg"), - PIG_SPAWN_EGG(383, 90, 22584, "Spawn Pig", "Pig Spawn Egg"), - SHEEP_SPAWN_EGG(383, 91, 24488, "Spawn Sheep", "Sheep Spawn Egg"), - COW_SPAWN_EGG(383, 92, 14761, "Spawn Cow", "Cow Spawn Egg"), - CHICKEN_SPAWN_EGG(383, 93, 5462, "Spawn Chicken", "Chicken Spawn Egg"), - SQUID_SPAWN_EGG(383, 94, 10682, "Spawn Squid", "Squid Spawn Egg"), - WOLF_SPAWN_EGG(383, 95, 21692, "Spawn Wolf", "Wolf Spawn Egg"), - MOOSHROOM_SPAWN_EGG(383, 96, 22125, "Spawn Mushroom Cow", "Mooshroom Spawn Egg"), - SNOWMAN_SPAWN_EGG(383, 97, -1, "Spawn Snowman", "MONSTER_EGG"), - OCELOT_SPAWN_EGG(383, 98, 30080, "Spawn Ocelot", "Ocelot Spawn Egg"), - IRON_GOLEM_SPAWN_EGG(383, 99, -1, "Spawn Iron Golem", "MONSTER_EGG"), - HORSE_SPAWN_EGG(383, 100, 25981, "Spawn Horse", "Horse Spawn Egg"), - RABBIT_SPAWN_EGG(383, 101, 26496, "Spawn Rabbit", "Rabbit Spawn Egg"), - POLAR_BEAR_SPAWN_EGG(383, 102, 17015, "Spawn Polar Bear", "Polar Bear Spawn Egg"), - LLAMA_SPAWN_EGG(383, 103, 23640, "Spawn Llama", "Llama Spawn Egg"), - PARROT_SPAWN_EGG(383, 105, 23614, "Spawn Parrot", "Parrot Spawn Egg"), - VILLAGER_SPAWN_EGG(383, 120, 30348, "Spawn Villager", "Villager Spawn Egg"), - EXPERIENCE_BOTTLE(384, 0, 12858, "Bottle o' Enchanting", "expbottle"), - FIRE_CHARGE(385, 0, 4842, "Fire Charge", "Fireball"), - WRITABLE_BOOK(386, 0, 13393, "Book and Quill"), - WRITTEN_BOOK(387, 0, 24164, "Written Book"), - EMERALD(388, 0, 5654, "Emerald"), - ITEM_FRAME(389, 0, 27318, "Item Frame"), - FLOWER_POT_ITEM(390, 0, 30567, "Flower Pot", "FLOWER_POT_ITEM"), - CARROT(391, 0, 22824, "Carrot", "Carrotitem"), - POTATO(392, 0, 21088, "Potato", "Potatoitem"), - BAKED_POTATO(393, 0, 14624, "Baked Potato"), - POISONOUS_POTATO(394, 0, 32640, "Poisonous Potato"), - EMPTY_MAP(395, 0, 21655, "Empty Map", "EMPTY_MAP"), - GOLDEN_CARROT(396, 0, 5300, "Golden Carrot"), - SKELETON_SKULL(397, 0, 13270, "Mob Head (Skeleton)", "Skeleton Skull"), - WITHER_SKELETON_SKULL(397, 1, 31487, "Mob Head (Wither Skeleton)", "Wither Skeleton Skull"), - ZOMBIE_HEAD(397, 2, 9304, "Mob Head (Zombie)", "Zombie Head"), - PLAYER_HEAD(397, 3, 21174, "Mob Head (Human)", "Player Head"), - CREEPER_HEAD(397, 4, 29146, "Mob Head (Creeper)", "Creeper Head"), - CARROT_ON_A_STICK(398, 0, 27809, "Carrot on a Stick", "carrotstick"), - NETHER_STAR(399, 0, 12469, "Nether Star"), - PUMPKIN_PIE(400, 0, 28725, "Pumpkin Pie"), - FIREWORK_ROCKET(401, 0, 23841, "Firework Rocket"), - FIREWORK_STAR(402, 0, 12190, "Firework Star", "FIREWORK_CHARGE"), - ENCHANTED_BOOK(403, 0, 11741, "Enchanted Book"), - COMPARATOR(404, 0, 18911, "Redstone Comparator"), - NETHER_BRICKS(405, 0, 27802, "Nether Brick", "Nether Bricks"), - QUARTZ(406, 0, 23608, "Nether Quartz"), - TNT_MINECART(407, 0, 4277, "Minecart with TNT", "explosiveminecart"), - HOPPER_MINECART(408, 0, 19024, "Minecart with Hopper"), - PRISMARINE_SHARD(409, 0, 10993, "Prismarine Shard"), - PRISMARINE_CRYSTALS(410, 0, 31546, "Prismarine Crystals"), - RABBIT(411, 0, 23068, "Raw Rabbit"), - COOKED_RABBIT(412, 0, 4454, "Cooked Rabbit"), - RABBIT_STEW(413, 0, 10611, "Rabbit Stew"), - RABBIT_FOOT(414, 0, 13864, "Rabbit's Foot"), - RABBIT_HIDE(415, 0, 12467, "Rabbit Hide"), - ARMOR_STAND(416, 0, 12852, "Armor Stand"), - IRON_HORSE_ARMOR(417, 0, 30108, "Iron Horse Armor", "Iron_barding"), - GOLDEN_HORSE_ARMOR(418, 0, 7996, "Golden Horse Armor", "gold_barding"), - DIAMOND_HORSE_ARMOR(419, 0, 10321, "Diamond Horse Armor", "Diamond_barding"), - LEAD(420, 0, 29539, "Lead", "Leash"), - NAME_TAG(421, 0, 30731, "Name Tag"), - COMMAND_BLOCK_MINECART(422, 0, 7992, "Minecart with Command Block"), - MUTTON(423, 0, 4792, "Raw Mutton"), - COOKED_MUTTON(424, 0, 31447, "Cooked Mutton"), - BLACK_BANNER(425, 0, 9365, "Banner", "Black Banner"), - END_CRYSTAL(426, 0, 19090, "End Crystal"), - SPRUCE_DOOR_ITEM(427, 0, 10642, "Spruce Door", "SPRUCE_DOOR_ITEM"), - BIRCH_DOOR_ITEM(428, 0, 14759, "Birch Door", "BIRCH_DOOR_ITEM"), - JUNGLE_DOOR_ITEM(429, 0, 28163, "Jungle Door", "JUNGLE_DOOR_ITEM"), - ACACIA_DOOR_ITEM(430, 0, 23797, "Acacia Door", "ACACIA_DOOR_ITEM"), - DARK_OAK_DOOR_ITEM(431, 0, 10669, "Dark Oak Door", "DARK_OAK_DOOR_ITEM"), - CHORUS_FRUIT(432, 0, 7652, "Chorus Fruit"), - POPPED_CHORUS_FRUIT(433, 0, 16880, "Popped Chorus Fruit"), - BEETROOT(434, 0, 23305, "Beetroot"), - BEETROOT_SEEDS(435, 0, 21282, "Beetroot Seeds"), - BEETROOT_SOUP(436, 0, 16036, "Beetroot Soup"), - DRAGON_BREATH(437, 0, 20154, "Dragon's Breath"), - SPECTRAL_ARROW(439, 0, 4568, "Spectral Arrow"), - TIPPED_ARROW(440, 0, 25164, "Tipped Arrow"), - LINGERING_POTION(441, 0, 25857, "Lingering Potion"), - SHIELD(442, 0, 29943, "Shield"), - ELYTRA(443, 0, 23829, "Elytra"), - TOTEM_OF_UNDYING(449, 0, 10139, "Totem Of Undying"), - MUSIC_DISC_13(2256, 0, 16359, "13 Disc", "GOLD_RECORD"), - MUSIC_DISC_CAT(2257, 0, 16246, "Cat Disc", "GREEN_RECORD"), - MUSIC_DISC_BLOCKS(2258, 0, 26667, "Blocks Disc", "RECORD_3"), - MUSIC_DISC_CHIRP(2259, 0, 19436, "Chirp Disc", "RECORD_4"), - MUSIC_DISC_FAR(2260, 0, 13823, "Far Disc", "RECORD_5"), - MUSIC_DISC_MALL(2261, 0, 11517, "Mall Disc", "RECORD_6"), - MUSIC_DISC_MELLOHI(2262, 0, 26117, "Mellohi Disc", "RECORD_7"), - MUSIC_DISC_STAL(2263, 0, 14989, "Stal Disc", "RECORD_8"), - MUSIC_DISC_STRAD(2264, 0, 16785, "Strad Disc", "RECORD_9"), - MUSIC_DISC_WARD(2265, 0, 24026, "Ward Disc", "RECORD_10"), - MUSIC_DISC_11(2266, 0, 27426, "11 Disc", "RECORD_11"), - MUSIC_DISC_WAIT(2267, 0, 26499, "Wait Disc", "RECORD_12"), - PISTON_MOVING_PIECE(36, 0, 13831, "Piston Moving Piece"), - CROPS(59, 0, 27709, "Crops"), - BURNING_FURNACE(62, 0, 8133, "Burning Furnace"), - SIGN_POST(63, 0, 16918, "Sign Post"), - WOODEN_DOOR(64, 0, 20341, "Wooden Door"), - GLOWING_REDSTONE_ORE(74, 0, 10887, "Glowing Redstone Ore"), - SUGAR_CANE_BLOCK(83, 0, -1, "Sugar Cane Block"), - DIODE_BLOCK_OFF(93, 0, -1, "Diode Block Off"), - DIODE_BLOCK_ON(94, 0, -1, "Diode Block On"), - REDSTONE_LAMP_ON(124, 0, -1, "Redstone Lamp On"), - WOOD_DOUBLE_STEP(125, 0, -1, "Wood Step Double"), - SKULL(144, 0, -1, "Skull", "SKULL"), - REDSTONE_COMPARATOR_OFF(149, 0, -1, "Redstone Comparator Off"), - REDSTONE_COMPARATOR_ON(150, 0, -1, "Redstone Comparator Off"), - STANDING_BANNER(176, 0, -1, "Standing Banner"), - WALL_BANNER(177, 0, -1, "Wall Banner"), - DAYLIGHT_DETECTOR_INVERTED(178, 0, 8864, "Daylight Detector Inverted"), - DOUBLE_STONE_SLAB2(181, 0, -1, "Double Stone Slab2"), - PURPUR_DOUBLE_SLAB(204, 0, -1, "Purpur Ddouble Slab"), - COMMAND_REPEATING(210, 0, -1, "Repeating Command Block"), - COMMAND_CHAIN(211, 0, -1, "Chain Command Block"), - - // 1.13 - ACACIA_BOAT(447, 0, 27326, "Acacia Boat", "BOAT_ACACIA"), ACACIA_BUTTON(-1, -1, 13993, "Acacia Button", ""), - ACACIA_DOOR(196, 0, 23797, "Acacia Door", "ACACIA_DOOR"), + ACACIA_DOOR(430, 0, 23797, "Acacia Door", "ACACIA_DOOR_ITEM"), ACACIA_FENCE(192, 0, 4569, "Acacia Fence", "ACACIA_FENCE"), ACACIA_FENCE_GATE(187, 0, 14145, "Acacia Fence Gate", "ACACIA_FENCE_GATE"), ACACIA_LEAVES(161, 0, 16606, "Acacia Leaves", "LEAVES_2"), ACACIA_LOG(162, 0, 8385, "Acacia Log", "LOG_2"), - ACACIA_PRESSURE_PLATE(72, 0, 17586, "Acacia Pressure Plate", ""), + ACACIA_PLANKS(5, 4, 31312, "Acacia Wood Plank", "Acacia Planks"), + ACACIA_PRESSURE_PLATE(-1, -1, 17586, "Acacia Pressure Plate", ""), + ACACIA_SAPLING(6, 4, 20806, "Acacia Sapling", ""), + ACACIA_SLAB(126, 4, 23730, "Acacia Wood Slab", "Acacia Slab"), ACACIA_STAIRS(163, 0, 17453, "Acacia Stairs", "ACACIA_STAIRS"), - ACACIA_TRAPDOOR(96, 0, 18343, "Acacia Trapdoor", ""), - ACACIA_WOOD(162, 0, 21861, "Acacia Wood", ""), + ACACIA_TRAPDOOR(-1, -1, 18343, "Acacia Trapdoor", ""), + ACACIA_WOOD(-1, -1, 21861, "Acacia Wood", "Acacia Log"), ACTIVATOR_RAIL(157, 0, 5834, "Activator Rail", "ACTIVATOR_RAIL"), + AIR(0, 0, 9648, "Unknown", "Air"), ALLIUM(38, 2, 6871, "Allium", "RED_ROSE"), + ANDESITE(1, 5, 25975, "Andesite", ""), ANVIL(145, 0, 18718, "Anvil", "ANVIL"), APPLE(260, 0, 7720, "Apple", "APPLE"), + ARMOR_STAND(416, 0, 12852, "Armor Stand", ""), ARROW(262, 0, 31091, "Arrow", "ARROW"), ATTACHED_MELON_STEM(-1, -1, 30882, "Attached Melon Stem", ""), ATTACHED_PUMPKIN_STEM(-1, -1, 12724, "Attached Pumpkin Stem", ""), AZURE_BLUET(38, 3, 17608, "Azure Bluet", ""), + BAKED_POTATO(393, 0, 14624, "Baked Potato", ""), BARRIER(166, 0, 26453, "Barrier", "BARRIER"), + BAT_SPAWN_EGG(383, 65, 14607, "Spawn Bat", "Bat Spawn Egg"), BEACON(138, 0, 6608, "Beacon", "BEACON"), - BED_BLOCK(26, 0, 23130, "Bed Block"), - BEDROCK(7, 0, 23130, "Bedrock", "BEDROCK"), + BEDROCK(7, 0, 23130, "Bedrock", ""), + BEEF(363, 0, 4803, "Raw Beef", ""), + BEETROOT(434, 0, 23305, "Beetroot", ""), BEETROOTS(207, 0, 22075, "Beetroots", "BEETROOT_BLOCK"), + BEETROOT_SEEDS(435, 0, 21282, "Beetroot Seeds", ""), + BEETROOT_SOUP(436, 0, 16036, "Beetroot Soup", ""), BIRCH_BOAT(445, 0, 28104, "Birch Boat", "BOAT_BIRCH"), BIRCH_BUTTON(-1, -1, 26934, "Birch Button", ""), - BIRCH_DOOR(194, 0, 14759, "Birch Door", "BIRCH_DOOR"), + BIRCH_DOOR(428, 0, 14759, "Birch Door", "BIRCH_DOOR_ITEM"), BIRCH_FENCE(189, 0, 17347, "Birch Fence", "BIRCH_FENCE"), BIRCH_FENCE_GATE(184, 0, 6322, "Birch Fence Gate", "BIRCH_FENCE_GATE"), BIRCH_LEAVES(18, 2, 12601, "Birch Leaves", "LEAVES"), BIRCH_LOG(17, 2, 26727, "Birch Log", "LOG"), - BIRCH_PRESSURE_PLATE(72, 0, 9664, "Birch Pressure Plate", ""), + BIRCH_PLANKS(5, 2, 29322, "Birch Wood Plank", "Birch Planks"), + BIRCH_PRESSURE_PLATE(-1, -1, 9664, "Birch Pressure Plate", ""), + BIRCH_SAPLING(6, 2, 31533, "Birch Sapling", ""), BIRCH_SLAB(126, 2, 13807, "Birch Slab", ""), - BIRCH_TRAPDOOR(96, 0, 32585, "Birch Trapdoor", ""), - BIRCH_WOOD(17, 2, 7924, "Birch Wood", ""), + BIRCH_STAIRS(135, 0, 7657, "Birch Wood Stairs", "Birch Stairs"), + BIRCH_TRAPDOOR(-1, -1, 32585, "Birch Trapdoor", ""), + BIRCH_WOOD(-1, -1, 20913, "Birch Wood", ""), + BLACK_BANNER(425, 0, 9365, "Banner", "Black Banner"), + BLACK_BED(355, 15, 20490, "Black Bed", "Black Bed"), BLACK_CARPET(171, 15, 6056, "Black Carpet", "CARPET"), BLACK_CONCRETE(251, 15, 13338, "Black Concrete", "CONCRETE"), BLACK_CONCRETE_POWDER(252, 15, 16150, "Black Concrete Powder", "CONCRETE_POWDER"), @@ -940,9 +662,13 @@ public enum CMIMaterial { BLACK_STAINED_GLASS(95, 15, 13941, "Black Stained Glass", "STAINED_GLASS"), BLACK_STAINED_GLASS_PANE(160, 15, 13201, "Black Stained Glass Pane", "STAINED_GLASS_PANE"), BLACK_TERRACOTTA(159, 15, 26691, "Black Terracotta", "STAINED_CLAY"), - BLACK_WALL_BANNER(425, -1, 4919, "Black Banner", ""), + BLACK_WALL_BANNER(117, 0, 4919, "Black Banner", ""), BLACK_WOOL(35, 15, 16693, "Black Wool", ""), + BLAZE_POWDER(377, 0, 18941, "Blaze Powder", ""), + BLAZE_ROD(369, 0, 8289, "Blaze Rod", ""), + BLAZE_SPAWN_EGG(383, 61, 4759, "Spawn Blaze", "Blaze Spawn Egg"), BLUE_BANNER(245, 4, 18481, "Blue Banner", "PURPLE_GLAZED_TERRACOTTA"), + BLUE_BED(355, 11, 12714, "Blue Bed", "Blue Bed"), BLUE_CARPET(171, 11, 13292, "Blue Carpet", ""), BLUE_CONCRETE(251, 11, 18756, "Blue Concrete", ""), BLUE_CONCRETE_POWDER(252, 11, 17773, "Blue Concrete Powder", ""), @@ -953,21 +679,27 @@ public enum CMIMaterial { BLUE_STAINED_GLASS(95, 11, 7107, "Blue Stained Glass", ""), BLUE_STAINED_GLASS_PANE(160, 11, 28484, "Blue Stained Glass Pane", ""), BLUE_TERRACOTTA(159, 11, 5236, "Blue Terracotta", ""), - BLUE_WALL_BANNER(425, -1, 17757, "Blue Banner", ""), + BLUE_WALL_BANNER(117, 4, 17757, "Blue Banner", ""), BLUE_WOOL(35, 11, 15738, "Blue Wool", ""), + BONE(352, 0, 5686, "Bone", ""), BONE_BLOCK(216, 0, 17312, "Bone Block", "BONE_BLOCK"), + BONE_MEAL(351, 15, 32458, "Bone Meal", ""), + BOOK(340, 0, 23097, "Book", ""), BOOKSHELF(47, 0, 10069, "Bookshelf", "BOOKSHELF"), BOW(261, 0, 8745, "Bow", "BOW"), BOWL(281, 0, 32661, "Bowl", "BOWL"), BRAIN_CORAL(-1, -1, 31316, "Brain Coral", ""), BRAIN_CORAL_BLOCK(-1, -1, 30618, "Brain Coral Block", ""), BRAIN_CORAL_FAN(-1, -1, 13849, "Brain Coral Fan", ""), + BRAIN_CORAL_WALL_FAN(-1, -1, 22685, "Brain Coral Wall Fan", ""), BREAD(297, 0, 32049, "Bread", "BREAD"), - BREWING_STAND(117, 0, 14539, "Brewing Stand", "BREWING_STAND"), - BRICKS(45, 0, 14165, "Bricks", "BRICK"), + BREWING_STAND(379, 0, 14539, "Brewing Stand", "BREWING_STAND_ITEM"), + BRICK(336, 0, 6820, "Brick", "claybrick"), + BRICKS(45, 0, 14165, "Bricks", ""), BRICK_SLAB(44, 4, 26333, "Brick Slab", "STEP"), BRICK_STAIRS(108, 0, 21534, "Brick Stairs", "BRICK_STAIRS"), BROWN_BANNER(425, 3, 11481, "Brown Banner", ""), + BROWN_BED(355, 12, 25624, "Brown Bed", "Brown Bed"), BROWN_CARPET(171, 12, 23352, "Brown Carpet", ""), BROWN_CONCRETE(251, 12, 19006, "Brown Concrete", ""), BROWN_CONCRETE_POWDER(252, 12, 21485, "Brown Concrete Powder", ""), @@ -978,156 +710,250 @@ public enum CMIMaterial { BROWN_STAINED_GLASS(95, 12, 20945, "Brown Stained Glass", ""), BROWN_STAINED_GLASS_PANE(160, 12, 17557, "Brown Stained Glass Pane", ""), BROWN_TERRACOTTA(159, 12, 23664, "Brown Terracotta", ""), - BROWN_WALL_BANNER(425, -1, 14731, "Brown Banner", ""), + BROWN_WALL_BANNER(117, 3, 14731, "Brown Banner", ""), BROWN_WOOL(35, 12, 32638, "Brown Wool", ""), BUBBLE_COLUMN(-1, -1, 13758, "Bubble Column", ""), BUBBLE_CORAL(-1, -1, 12464, "Bubble Coral", ""), BUBBLE_CORAL_BLOCK(-1, -1, 15437, "Bubble Coral Block", ""), BUBBLE_CORAL_FAN(-1, -1, 10795, "Bubble Coral Fan", ""), + BUBBLE_CORAL_WALL_FAN(-1, -1, 20382, "Bubble Coral Wall Fan", ""), + BUCKET(325, 0, 15215, "Bucket", ""), CACTUS(81, 0, 12191, "Cactus", "CACTUS"), - CAKE_BLOCK(92, 0, 27048, "Cake block", "CAKE_BLOCK"), + CACTUS_GREEN(351, 2, 17296, "Cactus Green", ""), + CAKE(354, 0, 27048, "Cake", ""), + CARROT(391, 0, 22824, "Carrot", "Carrotitem"), CARROTS(141, 0, 17258, "Carrots", "CARROT"), + CARROT_ON_A_STICK(398, 0, 27809, "Carrot on a Stick", "carrotstick"), CARVED_PUMPKIN(-1, -1, 25833, "Carved Pumpkin", ""), - CAULDRON(118, 0, 26531, "Cauldron", "CAULDRON"), - CAVE_AIR(0, 0, 17422, "Air", ""), + CAULDRON(380, 0, 26531, "Cauldron", "CAULDRON_ITEM"), + CAVE_AIR(-1, -1, 17422, "Air", ""), + CAVE_SPIDER_SPAWN_EGG(383, 59, 23341, "Spawn Cave Spider", "Cave Spider Spawn Egg"), + CHAINMAIL_BOOTS(305, 0, 17953, "Chainmail Boots", ""), CHAINMAIL_CHESTPLATE(303, 0, 23602, "Chainmail Chestplate", "CHAINMAIL_CHESTPLATE"), CHAINMAIL_HELMET(302, 0, 26114, "Chainmail Helmet", "CHAINMAIL_HELMET"), CHAINMAIL_LEGGINGS(304, 0, 19087, "Chainmail Leggings", "CHAINMAIL_LEGGINGS"), CHAIN_COMMAND_BLOCK(-1, -1, 26798, "Chain Command Block", ""), CHARCOAL(263, 1, 5390, "Charcoal", "COAL"), CHEST(54, 0, 22969, "Chest", "CHEST"), + CHEST_MINECART(342, 0, 4497, "Minecart with Chest", "Storageminecart"), + CHICKEN(365, 0, 17281, "Raw Chicken", ""), + CHICKEN_SPAWN_EGG(383, 93, 5462, "Spawn Chicken", "Chicken Spawn Egg"), CHIPPED_ANVIL(145, 1, 10623, "Chipped Anvil", ""), CHISELED_QUARTZ_BLOCK(155, 1, 30964, "Chiseled Quartz Block", "QUARTZ_BLOCK"), CHISELED_RED_SANDSTONE(179, 1, 15529, "Chiseled Red Sandstone", "RED_SANDSTONE"), CHISELED_SANDSTONE(24, 1, 31763, "Chiseled Sandstone", "SANDSTONE"), CHISELED_STONE_BRICKS(98, 3, 9087, "Chiseled Stone Bricks", "SMOOTH_BRICK"), CHORUS_FLOWER(200, 0, 28542, "Chorus Flower", "CHORUS_FLOWER"), + CHORUS_FRUIT(432, 0, 7652, "Chorus Fruit", ""), CHORUS_PLANT(199, 0, 28243, "Chorus Plant", "CHORUS_PLANT"), - CLAY(82, 0, 27880, "Clay", "CLAY"), + CLAY(82, 0, 27880, "Clay", "Clay Block"), + CLAY_BALL(337, 0, 24603, "Clay Ball"), + CLOCK(347, 0, 14980, "Clock", "watch"), COAL(263, 0, 29067, "Coal", ""), COAL_BLOCK(173, 0, 27968, "Block of Coal", "COAL_BLOCK"), COAL_ORE(16, 0, 30965, "Coal Ore", "COAL_ORE"), + COARSE_DIRT(3, 1, 15411, "Coarse Dirt", ""), + COBBLESTONE(4, 0, 32147, "Cobblestone", ""), COBBLESTONE_SLAB(44, 3, 6340, "Cobblestone Slab", ""), COBBLESTONE_STAIRS(67, 0, 24715, "Cobblestone Stairs", "COBBLESTONE_STAIRS"), COBBLESTONE_WALL(139, 0, 12616, "Cobblestone Wall", "COBBLE_WALL"), COBWEB(30, 0, 9469, "Cobweb", "WEB"), - COD(-1, -1, 24691, "Raw Cod", "rawfish"), + COCOA(127, 0, 29709, "Cocoa", ""), + COCOA_BEANS(351, 3, 27381, "Coco Beans", "INK_SACK"), + COD(349, 0, 24691, "Raw Cod", "RAW_FISH"), COD_BUCKET(-1, -1, 28601, "Bucket of Cod", ""), COD_SPAWN_EGG(-1, -1, 27248, "Cod Spawn Egg", ""), COMMAND_BLOCK(137, 0, 4355, "Command Block", "COMMAND"), + COMMAND_BLOCK_MINECART(422, 0, 7992, "Minecart with Command Block", ""), + COMPARATOR(404, 0, 18911, "Redstone Comparator", ""), + COMPASS(345, 0, 24139, "Compass", ""), CONDUIT(-1, -1, 5148, "Conduit", ""), - COOKED_COD(350, 0, 9681, "Cooked Cod", "COOKED_FISH"), + COOKED_BEEF(364, 0, 21595, "Steak", ""), + COOKED_CHICKEN(366, 0, 20780, "Cooked Chicken", ""), + COOKED_COD(350, 0, 9681, "Cooked Fish", "COOKED_FISH"), + COOKED_MUTTON(424, 0, 31447, "Cooked Mutton", ""), + COOKED_PORKCHOP(320, 0, 27231, "Cooked Porkchop", "grilledpork"), + COOKED_RABBIT(412, 0, 4454, "Cooked Rabbit", ""), + COOKED_SALMON(350, 1, 5615, "Cooked Salmon", ""), + COOKIE(357, 0, 27431, "Cookie", ""), + COW_SPAWN_EGG(383, 92, 14761, "Spawn Cow", "Cow Spawn Egg"), CRACKED_STONE_BRICKS(98, 2, 27869, "Cracked Stone Bricks", ""), CRAFTING_TABLE(58, 0, 20706, "Crafting Table", "WORKBENCH"), - CREEPER_WALL_HEAD(397, -1, 30123, "Creeper Wall Head", ""), + CREEPER_HEAD(397, 4, 29146, "Mob Head (Creeper)", "Creeper Head"), + CREEPER_SPAWN_EGG(383, 50, 9653, "Spawn Creeper", "Creeper Spawn Egg"), + CREEPER_WALL_HEAD(144, 4, 30123, "Creeper Wall Head", ""), CUT_RED_SANDSTONE(-1, -1, 26842, "Cut Red Sandstone", ""), CUT_SANDSTONE(-1, -1, 6118, "Cut Sandstone", ""), CYAN_BANNER(425, 6, 9839, "Cyan Banner", ""), + CYAN_BED(355, 9, 16746, "Cyan Bed", "Cyan Bed"), CYAN_CARPET(171, 9, 31495, "Cyan Carpet", ""), CYAN_CONCRETE(251, 9, 26522, "Cyan Concrete", ""), CYAN_CONCRETE_POWDER(252, 9, 15734, "Cyan Concrete Powder", ""), + CYAN_DYE(351, 6, 8043, "Cyan Dye", ""), CYAN_GLAZED_TERRACOTTA(244, 0, 9550, "Cyan Glazed Terracotta", "CYAN_GLAZED_TERRACOTTA"), CYAN_SHULKER_BOX(228, 0, 28123, "Cyan Shulker Box", "CYAN_SHULKER_BOX"), CYAN_STAINED_GLASS(95, 9, 30604, "Cyan Stained Glass", ""), CYAN_STAINED_GLASS_PANE(160, 9, 11784, "Cyan Stained Glass Pane", ""), CYAN_TERRACOTTA(159, 9, 25940, "Cyan Terracotta", ""), - CYAN_WALL_BANNER(425, -1, 10889, "Cyan Banner", ""), + CYAN_WALL_BANNER(117, 6, 10889, "Cyan Banner", ""), CYAN_WOOL(35, 9, 12221, "Cyan Wool", ""), DAMAGED_ANVIL(145, 2, 10274, "Damaged Anvil", ""), DANDELION(37, 0, 30558, "Dandelion", "YELLOW_FLOWER"), + DANDELION_YELLOW(351, 11, 21789, "Dandelion Yellow", ""), DARK_OAK_BOAT(448, 0, 28618, "Dark Oak Boat", "BOAT_DARK_OAK"), DARK_OAK_BUTTON(-1, -1, 6214, "Dark Oak Button", ""), - DARK_OAK_DOOR(197, 0, 10669, "Dark Oak Door", "DARK_OAK_DOOR"), + DARK_OAK_DOOR(431, 0, 10669, "Dark Oak Door", "DARK_OAK_DOOR_ITEM"), DARK_OAK_FENCE(191, 0, 21767, "Dark Oak Fence", "DARK_OAK_FENCE"), DARK_OAK_FENCE_GATE(186, 0, 10679, "Dark Oak Fence Gate", "DARK_OAK_FENCE_GATE"), DARK_OAK_LEAVES(161, 1, 22254, "Dark Oak Leaves", ""), DARK_OAK_LOG(162, 1, 14831, "Dark Oak Log", ""), - DARK_OAK_PRESSURE_PLATE(72, 0, 31375, "Dark Oak Pressure Plate", ""), + DARK_OAK_PLANKS(5, 5, 20869, "Dark Oak Wood Plank", "Dark Oak Planks"), + DARK_OAK_PRESSURE_PLATE(-1, -1, 31375, "Dark Oak Pressure Plate", ""), DARK_OAK_SAPLING(6, 5, 14933, "Dark Oak Sapling", ""), + DARK_OAK_SLAB(126, 5, 28852, "Dark Oak Wood Slab", "Dark Oak Slab"), DARK_OAK_STAIRS(164, 0, 22921, "Dark Oak Stairs", "DARK_OAK_STAIRS"), - DARK_OAK_TRAPDOOR(96, 0, 10355, "Dark Oak Trapdoor", ""), - DARK_OAK_WOOD(162, 1, 7871, "Dark Oak Wood", ""), + DARK_OAK_TRAPDOOR(-1, -1, 10355, "Dark Oak Trapdoor", ""), + DARK_OAK_WOOD(-1, -1, 16995, "Dark Oak Wood", ""), DARK_PRISMARINE(168, 2, 19940, "Dark Prismarine", "PRISMARINE"), DARK_PRISMARINE_SLAB(-1, -1, 7577, "Dark Prismarine Slab", ""), DARK_PRISMARINE_STAIRS(-1, -1, 26511, "Dark Prismarine Stairs", ""), DAYLIGHT_DETECTOR(151, 0, 8864, "Daylight Detector", "DAYLIGHT_DETECTOR"), + DEAD_BRAIN_CORAL(-1, -1, 9116, "Dead Brain Coral", ""), DEAD_BRAIN_CORAL_BLOCK(-1, -1, 12979, "Dead Brain Coral Block", ""), + DEAD_BRAIN_CORAL_FAN(-1, -1, 26150, "Dead Brain Coral Fan", ""), + DEAD_BRAIN_CORAL_WALL_FAN(-1, -1, 23718, "Dead Brain Coral Wall Fan", ""), + DEAD_BUBBLE_CORAL(-1, -1, 30583, "Dead Bubble Coral", ""), DEAD_BUBBLE_CORAL_BLOCK(-1, -1, 28220, "Dead Bubble Coral Block", ""), + DEAD_BUBBLE_CORAL_FAN(-1, -1, 17322, "Dead Bubble Coral Fan", ""), + DEAD_BUBBLE_CORAL_WALL_FAN(-1, -1, 18453, "Dead Bubble Coral Wall Fan", ""), DEAD_BUSH(32, 0, 22888, "Dead Bush", "DEAD_BUSH"), + DEAD_FIRE_CORAL(-1, -1, 8365, "Dead Fire Coral", ""), DEAD_FIRE_CORAL_BLOCK(-1, -1, 5307, "Dead Fire Coral Block", ""), + DEAD_FIRE_CORAL_FAN(-1, -1, 27073, "Dead Fire Coral Fan", ""), + DEAD_FIRE_CORAL_WALL_FAN(-1, -1, 23375, "Dead Fire Coral Wall Fan", ""), + DEAD_HORN_CORAL(-1, -1, 5755, "Dead Horn Coral"), DEAD_HORN_CORAL_BLOCK(-1, -1, 15103, "Dead Horn Coral Block", ""), + DEAD_HORN_CORAL_FAN(-1, -1, 11387, "Dead Horn Coral Fan", ""), + DEAD_HORN_CORAL_WALL_FAN(-1, -1, 27550, "Dead Horn Coral Wall Fan", ""), + DEAD_TUBE_CORAL(-1, -1, 18028, "Dead Tube Coral", ""), DEAD_TUBE_CORAL_BLOCK(-1, -1, 28350, "Dead Tube Coral Block", ""), + DEAD_TUBE_CORAL_FAN(-1, -1, 17628, "Dead Tube Coral Fan", ""), + DEAD_TUBE_CORAL_WALL_FAN(-1, -1, 5128, "Dead Tube Coral Wall Fan", ""), DEBUG_STICK(-1, -1, 24562, "Debug Stick", ""), DETECTOR_RAIL(28, 0, 13475, "Detector Rail", "DETECTOR_RAIL"), DIAMOND(264, 0, 20865, "Diamond", "DIAMOND"), DIAMOND_AXE(279, 0, 27277, "Diamond Axe", "DIAMOND_AXE"), DIAMOND_BLOCK(57, 0, 5944, "Block of Diamond", "DIAMOND_BLOCK"), + DIAMOND_BOOTS(313, 0, 16522, "Diamond Boots", ""), + DIAMOND_CHESTPLATE(311, 0, 32099, "Diamond Chestplate", ""), + DIAMOND_HELMET(310, 0, 10755, "Diamond Helmet", ""), DIAMOND_HOE(293, 0, 24050, "Diamond Hoe", "DIAMOND_HOE"), + DIAMOND_HORSE_ARMOR(419, 0, 10321, "Diamond Horse Armor", "Diamond_barding"), + DIAMOND_LEGGINGS(312, 0, 11202, "Diamond Leggings", ""), DIAMOND_ORE(56, 0, 9292, "Diamond Ore", "DIAMOND_ORE"), DIAMOND_PICKAXE(278, 0, 24291, "Diamond Pickaxe", "DIAMOND_PICKAXE"), DIAMOND_SHOVEL(277, 0, 25415, "Diamond Shovel", "DIAMOND_SPADE"), DIAMOND_SWORD(276, 0, 27707, "Diamond Sword", "DIAMOND_SWORD"), + DIORITE(1, 3, 24688, "Diorite", ""), + DIRT(3, 0, 10580, "Dirt", ""), DISPENSER(23, 0, 20871, "Dispenser", "DISPENSER"), DOLPHIN_SPAWN_EGG(-1, -1, 20787, "Dolphin Spawn Egg", ""), + DONKEY_SPAWN_EGG(383, 31, 14513, "Spawn Donkey", "Donkey Spawn Egg"), + DRAGON_BREATH(437, 0, 20154, "Dragon's Breath", ""), DRAGON_EGG(122, 0, 29946, "Dragon Egg", "DRAGON_EGG"), DRAGON_HEAD(397, 5, 20084, "Dragon Head", ""), - DRAGON_WALL_HEAD(-1, -1, 19818, "Dragon Wall Head", ""), + DRAGON_WALL_HEAD(144, 5, 19818, "Dragon Wall Head", ""), DRIED_KELP(-1, -1, 21042, "Dried Kelp", ""), DRIED_KELP_BLOCK(-1, -1, 12966, "Dried Kelp Block", ""), DROPPER(158, 0, 31273, "Dropper", "DROPPER"), DROWNED_SPAWN_EGG(-1, -1, 19368, "Drowned Spawn Egg", ""), - DOUBLE_STONE_SLAB(43, 0, 19117, "Double Stone Slab"), - DOUBLE_SANDSTONE_SLAB(43, 1, 19117, "Double Sandstone Slab"), - DOUBLE_WOODEN_SLAB(43, 2, 19117, "Double Wooden Slab"), - DOUBLE_COBBLESTONE_SLAB(43, 3, 19117, "Double Cobblestone Slab"), - DOUBLE_BRICK_SLAB(43, 4, 19117, "Double Brick Slab"), - DOUBLE_STONE_BRICK_SLAB(43, 5, 19117, "Double Stone Brick Slab"), - DOUBLE_NETHER_BRICK_SLAB(43, 6, 19117, "Double Nether Brick Slab"), - DOUBLE_QUARTZ_SLAB(43, 7, 19117, "Double Quartz Slab"), + EGG(344, 0, 21603, "Egg", ""), + ELDER_GUARDIAN_SPAWN_EGG(383, 4, 11418, "Spawn Elder Guardian", "Elder Guardian Spawn Egg"), + ELYTRA(443, 0, 23829, "Elytra", ""), + EMERALD(388, 0, 5654, "Emerald", ""), + EMERALD_BLOCK(133, 0, 9914, "Emerald Block", "Block of Emerald"), + EMERALD_ORE(129, 0, 16630, "Emerald Ore", ""), + ENCHANTED_BOOK(403, 0, 11741, "Enchanted Book", ""), + ENCHANTED_GOLDEN_APPLE(322, 1, 8280, "Enchanted Golden Apple", ""), ENCHANTING_TABLE(116, 0, 16255, "Enchanting Table", "ENCHANTMENT_TABLE"), + ENDERMAN_SPAWN_EGG(383, 58, 29488, "Spawn Enderman", "Enderman Spawn Egg"), + ENDERMITE_SPAWN_EGG(383, 67, 16617, "Spawn Endermite", "Endermite Spawn Egg"), + ENDER_CHEST(130, 0, 32349, "Ender Chest", ""), + ENDER_EYE(381, 0, 24860, "Eye of Ender", ""), + ENDER_PEARL(368, 0, 5259, "Ender Pearl", ""), + END_CRYSTAL(426, 0, 19090, "End Crystal", ""), END_GATEWAY(209, 0, 26605, "End Gateway", "END_GATEWAY"), END_PORTAL(119, 0, 16782, "End Portal", "ENDER_PORTAL"), END_PORTAL_FRAME(120, 0, 15480, "End Portal Frame", "ENDER_PORTAL_FRAME"), END_ROD(198, 0, 24832, "End Rod", "END_ROD"), END_STONE(121, 0, 29686, "End Stone", "ENDER_STONE"), END_STONE_BRICKS(206, 0, 20314, "End Stone Bricks", "END_BRICKS"), + EVOKER_SPAWN_EGG(383, 34, 21271, "Spawn Evoker", "Evoker Spawn Egg"), + EXPERIENCE_BOTTLE(384, 0, 12858, "Bottle o' Enchanting", "expbottle"), FARMLAND(60, 0, 31166, "Farmland", "SOIL"), FEATHER(288, 0, 30548, "Feather", "FEATHER"), + FERMENTED_SPIDER_EYE(376, 0, 19386, "Fermented Spider Eye", ""), FERN(31, 2, 15794, "Fern", "LONG_GRASS"), + FILLED_MAP(358, 0, 23504, "Map", ""), FIRE(51, 0, 16396, "Fire", "FIRE"), + FIREWORK_ROCKET(401, 0, 23841, "Firework Rocket", ""), + FIREWORK_STAR(402, 0, 12190, "Firework Star", "FIREWORK_CHARGE"), + FIRE_CHARGE(385, 0, 4842, "Fire Charge", "Fireball"), FIRE_CORAL(-1, -1, 29151, "Fire Coral", ""), FIRE_CORAL_BLOCK(-1, -1, 12119, "Fire Coral Block", ""), FIRE_CORAL_FAN(-1, -1, 11112, "Fire Coral Fan", ""), + FIRE_CORAL_WALL_FAN(-1, -1, 20100, "Fire Coral Wall Fan", ""), + FISHING_ROD(346, 0, 4167, "Fishing Rod", ""), + FLINT(318, 0, 23596, "Flint", ""), FLINT_AND_STEEL(259, 0, 28620, "Flint and Steel", "FLINT_AND_STEEL"), - FLOWER_POT(140, 0, 30567, "Flower Pot", "FLOWER_POT"), + FLOWER_POT(390, 0, 30567, "Flower Pot", "FLOWER_POT_ITEM"), FROSTED_ICE(212, 0, 21814, "Frosted Ice", "FROSTED_ICE"), - FURNACE(61, 0, 8133, "Furnace", "FURNACE"), + FURNACE(61, 0, 8133, "Furnace", ""), + FURNACE_MINECART(343, 0, 14196, "Minecart with Furnace", "POWERED_MINECART"), + GHAST_SPAWN_EGG(383, 56, 9970, "Spawn Ghast", "Ghast Spawn Egg"), + GHAST_TEAR(370, 0, 18222, "Ghast Tear", ""), GLASS(20, 0, 6195, "Glass", "GLASS"), + GLASS_BOTTLE(374, 0, 6116, "Glass Bottle", ""), GLASS_PANE(102, 0, 5709, "Glass Pane", "THIN_GLASS"), + GLISTERING_MELON_SLICE(382, 0, 20158, "Glistering Melon", "speckledmelon"), GLOWSTONE(89, 0, 32713, "Glowstone", "GLOWSTONE"), - GOLDEN_AXE(286, 0, 4878, "Golden Axe", "GOLD_AXE"), - GOLDEN_HOE(294, 0, 19337, "Golden Hoe", "GOLD_HOE"), + GLOWSTONE_DUST(348, 0, 6665, "Glowstone Dust", ""), + GOLDEN_APPLE(322, 0, 27732, "Golden Apple", "Gold apple"), + GOLDEN_AXE(286, 0, 4878, "Golden Axe", "Gold Axe"), + GOLDEN_BOOTS(317, 0, 7859, "Golden Boots", "Gold Boots"), + GOLDEN_CARROT(396, 0, 5300, "Golden Carrot", "Gold Carrot"), + GOLDEN_CHESTPLATE(315, 0, 4507, "Golden Chestplate", "Gold Chestplate"), + GOLDEN_HELMET(314, 0, 7945, "Golden Helmet", "Gold Helmet"), + GOLDEN_HOE(294, 0, 19337, "Golden Hoe", "Gold Hoe"), + GOLDEN_HORSE_ARMOR(418, 0, 7996, "Golden Horse Armor", "Gold Barding"), + GOLDEN_LEGGINGS(316, 0, 21002, "Golden Leggings", "Gold Leggings"), GOLDEN_PICKAXE(285, 0, 10901, "Golden Pickaxe", "GOLD_PICKAXE"), GOLDEN_SHOVEL(284, 0, 15597, "Golden Shovel", "GOLD_SPADE"), GOLDEN_SWORD(283, 0, 10505, "Golden Sword", "GOLD_SWORD"), GOLD_BLOCK(41, 0, 27392, "Block of Gold", "GOLD_BLOCK"), GOLD_INGOT(266, 0, 28927, "Gold Ingot", "GOLD_INGOT"), + GOLD_NUGGET(371, 0, 28814, "Gold Nugget", ""), GOLD_ORE(14, 0, 32625, "Gold Ore", "GOLD_ORE"), + GRANITE(1, 1, 21091, "Granite", ""), GRASS(31, 1, 6155, "Grass", ""), + GRASS_BLOCK(2, 0, 28346, "Grass", "Grass Block"), GRASS_PATH(208, 0, 8604, "Grass Path", "GRASS_PATH"), GRAVEL(13, 0, 7804, "Gravel", "GRAVEL"), GRAY_BANNER(425, 8, 12053, "Gray Banner", ""), + GRAY_BED(355, 7, 15745, "Gray Bed", "Gray Bed"), GRAY_CARPET(171, 7, 26991, "Gray Carpet", ""), GRAY_CONCRETE(251, 7, 13959, "Gray Concrete", ""), GRAY_CONCRETE_POWDER(252, 7, 13031, "Gray Concrete Powder", ""), + GRAY_DYE(351, 8, 9184, "Gray Dye", ""), GRAY_GLAZED_TERRACOTTA(242, 0, 6256, "Gray Glazed Terracotta", "GRAY_GLAZED_TERRACOTTA"), GRAY_SHULKER_BOX(226, 0, 12754, "Gray Shulker Box", "GRAY_SHULKER_BOX"), GRAY_STAINED_GLASS(95, 7, 29979, "Gray Stained Glass", ""), GRAY_STAINED_GLASS_PANE(160, 7, 25272, "Gray Stained Glass Pane", ""), GRAY_TERRACOTTA(159, 7, 18004, "Gray Terracotta", ""), - GRAY_WALL_BANNER(425, -1, 24275, "Gray Banner", ""), + GRAY_WALL_BANNER(117, 8, 24275, "Gray Banner", ""), GRAY_WOOL(35, 7, 27209, "Gray Wool", ""), GREEN_BANNER(425, 2, 10698, "Green Banner", ""), + GREEN_BED(355, 13, 13797, "Green Bed", "Green Bed"), GREEN_CARPET(171, 13, 7780, "Green Carpet", ""), GREEN_CONCRETE(251, 13, 17949, "Green Concrete", ""), GREEN_CONCRETE_POWDER(252, 13, 6904, "Green Concrete Powder", ""), @@ -1136,16 +962,21 @@ public enum CMIMaterial { GREEN_STAINED_GLASS(95, 13, 22503, "Green Stained Glass", ""), GREEN_STAINED_GLASS_PANE(160, 13, 4767, "Green Stained Glass Pane", ""), GREEN_TERRACOTTA(159, 13, 4105, "Green Terracotta", ""), - GREEN_WALL_BANNER(425, -1, 15046, "Green Banner", ""), + GREEN_WALL_BANNER(117, 2, 15046, "Green Banner", ""), GREEN_WOOL(35, 13, 25085, "Green Wool", ""), + GUARDIAN_SPAWN_EGG(383, 68, 20113, "Spawn Guardian", "Guardian Spawn Egg"), GUNPOWDER(289, 0, 29974, "Gunpowder", "SULPHUR"), HAY_BLOCK(170, 0, 17461, "Hay Bale", "HAY_BLOCK"), HEART_OF_THE_SEA(-1, -1, 11807, "Heart of the Sea", ""), HEAVY_WEIGHTED_PRESSURE_PLATE(148, 0, 16970, "Heavy Weighted Pressure Plate", "IRON_PLATE"), HOPPER(154, 0, 31974, "Hopper", "HOPPER"), + HOPPER_MINECART(408, 0, 19024, "Minecart with Hopper", ""), HORN_CORAL(-1, -1, 19511, "Horn Coral", ""), HORN_CORAL_BLOCK(-1, -1, 19958, "Horn Coral Block", ""), HORN_CORAL_FAN(-1, -1, 13610, "Horn Coral Fan", ""), + HORN_CORAL_WALL_FAN(-1, -1, 28883, "Horn Coral Wall Fan", ""), + HORSE_SPAWN_EGG(383, 100, 25981, "Spawn Horse", "Horse Spawn Egg"), + HUSK_SPAWN_EGG(383, 23, 20178, "Spawn Husk", "Husk Spawn Egg"), ICE(79, 0, 30428, "Ice", "ICE"), INFESTED_CHISELED_STONE_BRICKS(97, 5, 4728, "Infested Chiseled Stone Bricks", "MONSTER_EGGS"), INFESTED_COBBLESTONE(97, 1, 28798, "Infested Cobblestone", ""), @@ -1153,161 +984,272 @@ public enum CMIMaterial { INFESTED_MOSSY_STONE_BRICKS(97, 3, 9850, "Infested Mossy Stone Bricks", ""), INFESTED_STONE(97, 0, 18440, "Infested Stone", ""), INFESTED_STONE_BRICKS(97, 2, 19749, "Infested Stone Bricks", ""), + INK_SAC(351, 0, 7184, "Ink Sack", "Ink Sac"), IRON_AXE(258, 0, 15894, "Iron Axe", "IRON_AXE"), IRON_BARS(101, 0, 9378, "Iron Bars", "IRON_FENCE"), IRON_BLOCK(42, 0, 24754, "Block of Iron", "IRON_BLOCK"), - IRON_DOOR_BLOCK(71, 0, 4788, "Iron Door Block", "IRON_DOOR_BLOCK"), + IRON_BOOTS(309, 0, 8531, "Iron Boots", ""), + IRON_CHESTPLATE(307, 0, 28112, "Iron Chestplate", ""), + IRON_DOOR(330, 0, 4788, "Iron Door", ""), + IRON_HELMET(306, 0, 12025, "Iron Helmet", ""), IRON_HOE(292, 0, 11339, "Iron Hoe", "IRON_HOE"), + IRON_HORSE_ARMOR(417, 0, 30108, "Iron Horse Armor", "Iron_barding"), IRON_INGOT(265, 0, 24895, "Iron Ingot", "IRON_INGOT"), + IRON_LEGGINGS(308, 0, 18951, "Iron Leggings", ""), IRON_NUGGET(452, 0, 13715, "Iron Nugget", ""), IRON_ORE(15, 0, 19834, "Iron Ore", "IRON_ORE"), IRON_PICKAXE(257, 0, 8842, "Iron Pickaxe", "IRON_PICKAXE"), IRON_SHOVEL(256, 0, 30045, "Iron Shovel", "IRON_SPADE"), IRON_SWORD(267, 0, 10904, "Iron Sword", "IRON_SWORD"), IRON_TRAPDOOR(167, 0, 17095, "Iron Trapdoor", "IRON_TRAPDOOR"), + ITEM_FRAME(389, 0, 27318, "Item Frame", ""), JACK_O_LANTERN(91, 0, 31612, "Jack o'Lantern", "JACK_O_LANTERN"), JUKEBOX(84, 0, 19264, "Jukebox", "JUKEBOX"), JUNGLE_BOAT(446, 0, 4495, "Jungle Boat", "BOAT_JUNGLE"), JUNGLE_BUTTON(-1, -1, 25317, "Jungle Button", ""), - JUNGLE_DOOR(195, 0, 28163, "Jungle Door", "JUNGLE_DOOR"), + JUNGLE_DOOR(429, 0, 28163, "Jungle Door", "JUNGLE_DOOR_ITEM"), JUNGLE_FENCE(190, 0, 14358, "Jungle Fence", "JUNGLE_FENCE"), JUNGLE_FENCE_GATE(185, 0, 21360, "Jungle Fence Gate", "JUNGLE_FENCE_GATE"), JUNGLE_LEAVES(18, 3, 5133, "Jungle Leaves", ""), JUNGLE_LOG(17, 3, 20721, "Jungle Log", ""), + JUNGLE_PLANKS(5, 3, 26445, "Jungle Wood Plank", "Jungle Planks"), JUNGLE_PRESSURE_PLATE(-1, -1, 11376, "Jungle Pressure Plate", ""), - JUNGLE_SLAB(126, 3, 19117, "Jungle Slab", ""), - JUNGLE_TRAPDOOR(96, 0, 8626, "Jungle Trapdoor", ""), - JUNGLE_WOOD(17, 3, 30228, "Jungle Wood", ""), + JUNGLE_SAPLING(6, 3, 17951, "Jungle Sapling", ""), + JUNGLE_SLAB(43, 0, 19117, "Double Stone Slab", ""), + JUNGLE_STAIRS(136, 0, 20636, "Jungle Wood Stairs", "Jungle Stairs"), + JUNGLE_TRAPDOOR(-1, -1, 8626, "Jungle Trapdoor", ""), + JUNGLE_WOOD(-1, -1, 10341, "Jungle Wood", ""), KELP(-1, -1, 21916, "Kelp", ""), KELP_PLANT(-1, -1, 29697, "Kelp Plant", ""), KNOWLEDGE_BOOK(453, 0, 12646, "Knowledge Book", ""), LADDER(65, 0, 23599, "Ladder", "LADDER"), LAPIS_BLOCK(22, 0, 14485, "Lapis Lazuli Block", "LAPIS_BLOCK"), + LAPIS_LAZULI(351, 4, 11075, "Lapis Lazuli", ""), LAPIS_ORE(21, 0, 22934, "Lapis Lazuli Ore", "LAPIS_ORE"), LARGE_FERN(175, 3, 30177, "Large Fern", "DOUBLE_PLANT"), - FLOWING_LAVA(10, 0, 8415, "Flowing Lava", "FLOWING_LAVA"), - LAVA(11, 0, 8415, "Lava", "STATIONARY_LAVA"), + LAVA(10, 0, 8415, "Flowing Lava", "FLOWING_LAVA"), + LAVA_BUCKET(327, 0, 9228, "Lava Bucket", ""), + LEAD(420, 0, 29539, "Lead", "Leash"), + LEATHER(334, 0, 16414, "Leather", ""), LEATHER_BOOTS(301, 0, 15282, "Leather Boots", "LEATHER_BOOTS"), LEATHER_CHESTPLATE(299, 0, 29275, "Leather Tunic", "LEATHER_CHESTPLATE"), LEATHER_HELMET(298, 0, 11624, "Leather Cap", "LEATHER_HELMET"), LEATHER_LEGGINGS(300, 0, 28210, "Leather Pants", "LEATHER_LEGGINGS"), LEVER(69, 0, 15319, "Lever", "LEVER"), LIGHT_BLUE_BANNER(425, 12, 18060, "Light Blue Banner", ""), + LIGHT_BLUE_BED(355, 3, 20957, "Light Blue Bed", "Light Blue Bed"), LIGHT_BLUE_CARPET(171, 3, 21194, "Light Blue Carpet", ""), LIGHT_BLUE_CONCRETE(251, 3, 29481, "Light Blue Concrete", ""), LIGHT_BLUE_CONCRETE_POWDER(252, 3, 31206, "Light Blue Concrete Powder", ""), + LIGHT_BLUE_DYE(351, 12, 28738, "Light Blue Dye", ""), LIGHT_BLUE_GLAZED_TERRACOTTA(238, 0, 4336, "Light Blue Glazed Terracotta", "LIGHT_BLUE_GLAZED_TERRACOTTA"), LIGHT_BLUE_SHULKER_BOX(222, 0, 18226, "Light Blue Shulker Box", "LIGHT_BLUE_SHULKER_BOX"), LIGHT_BLUE_STAINED_GLASS(95, 3, 17162, "Light Blue Stained Glass", ""), LIGHT_BLUE_STAINED_GLASS_PANE(160, 3, 18721, "Light Blue Stained Glass Pane", ""), LIGHT_BLUE_TERRACOTTA(159, 3, 31779, "Light Blue Terracotta", ""), - LIGHT_BLUE_WALL_BANNER(425, -1, 12011, "Light Blue Banner", ""), + LIGHT_BLUE_WALL_BANNER(117, 12, 12011, "Light Blue Banner", ""), LIGHT_BLUE_WOOL(35, 3, 21073, "Light Blue Wool", ""), - LIGHT_GRAY_BANNER(425, -1, 11417, "Light Gray Banner", ""), + LIGHT_GRAY_BANNER(425, 7, 11417, "Light Gray Banner", ""), + LIGHT_GRAY_BED(355, 8, 5090, "Light Gray Bed", "Light Gray Bed"), LIGHT_GRAY_CARPET(171, 8, 11317, "Light Gray Carpet", ""), LIGHT_GRAY_CONCRETE(251, 8, 14453, "Light Gray Concrete", ""), LIGHT_GRAY_CONCRETE_POWDER(252, 8, 21589, "Light Gray Concrete Powder", ""), + LIGHT_GRAY_DYE(351, 7, 27643, "Light Gray Dye", ""), LIGHT_GRAY_GLAZED_TERRACOTTA(243, 0, 10707, "Light Gray Glazed Terracotta", "SILVER_GLAZED_TERRACOTTA"), LIGHT_GRAY_SHULKER_BOX(227, 0, 21345, "Light Gray Shulker Box", "SILVER_SHULKER_BOX"), LIGHT_GRAY_STAINED_GLASS(95, 8, 5843, "Light Gray Stained Glass", ""), LIGHT_GRAY_STAINED_GLASS_PANE(160, 8, 19008, "Light Gray Stained Glass Pane", ""), LIGHT_GRAY_TERRACOTTA(159, 8, 26388, "Light Gray Terracotta", ""), - LIGHT_GRAY_WALL_BANNER(425, -1, 31088, "Light Gray Banner", ""), + LIGHT_GRAY_WALL_BANNER(117, 7, 31088, "Light Gray Banner", ""), LIGHT_GRAY_WOOL(35, 8, 22936, "Light Gray Wool", ""), LIGHT_WEIGHTED_PRESSURE_PLATE(147, 0, 14875, "Light Weighted Pressure Plate", "GOLD_PLATE"), LILAC(175, 1, 22837, "Lilac", ""), LILY_PAD(111, 0, 19271, "Lily Pad", "WATER_LILY"), LIME_BANNER(425, 10, 18887, "Lime Banner", ""), + LIME_BED(355, 5, 27860, "Lime Bed", "Lime Bed"), LIME_CARPET(171, 5, 15443, "Lime Carpet", ""), LIME_CONCRETE(251, 5, 5863, "Lime Concrete", ""), LIME_CONCRETE_POWDER(252, 5, 28859, "Lime Concrete Powder", ""), + LIME_DYE(351, 10, 6147, "Lime Dye", ""), LIME_GLAZED_TERRACOTTA(240, 0, 13861, "Lime Glazed Terracotta", "LIME_GLAZED_TERRACOTTA"), LIME_SHULKER_BOX(224, 0, 28360, "Lime Shulker Box", "LIME_SHULKER_BOX"), LIME_STAINED_GLASS(95, 5, 24266, "Lime Stained Glass", ""), LIME_STAINED_GLASS_PANE(160, 5, 10610, "Lime Stained Glass Pane", ""), LIME_TERRACOTTA(159, 5, 24013, "Lime Terracotta", ""), - LIME_WALL_BANNER(425, -1, 21422, "Lime Banner", ""), + LIME_WALL_BANNER(117, 10, 21422, "Lime Banner", ""), LIME_WOOL(35, 5, 10443, "Lime Wool", ""), + LINGERING_POTION(441, 0, 25857, "Lingering Potion", ""), + LLAMA_SPAWN_EGG(383, 103, 23640, "Spawn Llama", "Llama Spawn Egg"), MAGENTA_BANNER(425, 13, 15591, "Magenta Banner", ""), + MAGENTA_BED(355, 2, 20061, "Magenta Bed", "Magenta Bed"), MAGENTA_CARPET(171, 2, 6180, "Magenta Carpet", ""), MAGENTA_CONCRETE(251, 2, 20591, "Magenta Concrete", ""), MAGENTA_CONCRETE_POWDER(252, 2, 8272, "Magenta Concrete Powder", ""), + MAGENTA_DYE(351, 13, 11788, "Magenta Dye", ""), MAGENTA_GLAZED_TERRACOTTA(237, 0, 8067, "Magenta Glazed Terracotta", "MAGENTA_GLAZED_TERRACOTTA"), MAGENTA_SHULKER_BOX(221, 0, 21566, "Magenta Shulker Box", "MAGENTA_SHULKER_BOX"), MAGENTA_STAINED_GLASS(95, 2, 26814, "Magenta Stained Glass", ""), MAGENTA_STAINED_GLASS_PANE(160, 2, 14082, "Magenta Stained Glass Pane", ""), MAGENTA_TERRACOTTA(159, 2, 25900, "Magenta Terracotta", ""), - MAGENTA_WALL_BANNER(425, -1, 23291, "Magenta Banner", ""), + MAGENTA_WALL_BANNER(117, 13, 23291, "Magenta Banner", ""), MAGENTA_WOOL(35, 2, 11853, "Magenta Wool", ""), MAGMA_BLOCK(213, 0, 25927, "Magma Block", "MAGMA"), - MAP(358, 0, 21655, "Empty Map"), + MAGMA_CREAM(378, 0, 25097, "Magma Cream", ""), + MAGMA_CUBE_SPAWN_EGG(383, 62, 26638, "Spawn Magma Cube", "Magma Cube Spawn Egg"), + MAP(395, 0, 21655, "Empty Map", "EMPTY_MAP"), MELON(103, 0, 25172, "Melon", "Melon_Block"), + MELON_SEEDS(362, 0, 18340, "Melon Seeds", ""), + MELON_SLICE(360, 0, 5347, "Melon Slice", ""), MELON_STEM(105, 0, 8247, "Melon Stem", "MELON_STEM"), + MILK_BUCKET(335, 0, 9680, "Milk Bucket", ""), + MINECART(328, 0, 14352, "Minecart", ""), + MOOSHROOM_SPAWN_EGG(383, 96, 22125, "Spawn Mushroom Cow", "Mooshroom Spawn Egg"), MOSSY_COBBLESTONE(48, 0, 21900, "Mossy Cobblestone", "MOSSY_COBBLESTONE"), MOSSY_COBBLESTONE_WALL(139, 1, 11536, "Mossy Cobblestone Wall", ""), MOSSY_STONE_BRICKS(98, 1, 16415, "Mossy Stone Bricks", ""), - MOVING_PISTON(-1, -1, 13831, "Moving Piston", ""), + MOVING_PISTON(36, 0, 13831, "Piston Moving Piece", ""), + MULE_SPAWN_EGG(383, 32, 11229, "Spawn Mule", "Mule Spawn Egg"), MUSHROOM_STEM(-1, -1, 16543, "Mushroom Stem", ""), MUSHROOM_STEW(282, 0, 16336, "Mushroom Stew", "MUSHROOM_SOUP"), + MUSIC_DISC_11(2266, 0, 27426, "11 Disc", "RECORD_11"), + MUSIC_DISC_13(2256, 0, 16359, "13 Disc", "GOLD_RECORD"), + MUSIC_DISC_BLOCKS(2258, 0, 26667, "Blocks Disc", "RECORD_3"), + MUSIC_DISC_CAT(2257, 0, 16246, "Cat Disc", "GREEN_RECORD"), + MUSIC_DISC_CHIRP(2259, 0, 19436, "Chirp Disc", "RECORD_4"), + MUSIC_DISC_FAR(2260, 0, 13823, "Far Disc", "RECORD_5"), + MUSIC_DISC_MALL(2261, 0, 11517, "Mall Disc", "RECORD_6"), + MUSIC_DISC_MELLOHI(2262, 0, 26117, "Mellohi Disc", "RECORD_7"), + MUSIC_DISC_STAL(2263, 0, 14989, "Stal Disc", "RECORD_8"), + MUSIC_DISC_STRAD(2264, 0, 16785, "Strad Disc", "RECORD_9"), + MUSIC_DISC_WAIT(2267, 0, 26499, "Wait Disc", "RECORD_12"), + MUSIC_DISC_WARD(2265, 0, 24026, "Ward Disc", "RECORD_10"), + MUTTON(423, 0, 4792, "Raw Mutton", ""), MYCELIUM(110, 0, 9913, "Mycelium", "MYCEL"), + NAME_TAG(421, 0, 30731, "Name Tag", ""), NAUTILUS_SHELL(-1, -1, 19989, "Nautilus Shell", ""), NETHERRACK(87, 0, 23425, "Netherrack", "NETHERRACK"), - NETHER_BRICK(112, 0, 19996, "Nether Brick", "NETHER_BRICK"), + NETHER_BRICK(405, 0, 19996, "Nether Brick"), + NETHER_BRICKS(112, 0, 27802, "Nether Bricks"), NETHER_BRICK_FENCE(113, 0, 5286, "Nether Brick Fence", "NETHER_FENCE"), NETHER_BRICK_SLAB(44, 6, 26586, "Nether Brick Slab", ""), NETHER_BRICK_STAIRS(114, 0, 12085, "Nether Brick Stairs", "NETHER_BRICK_STAIRS"), - NETHER_PORTAL(90, 0, 19085, "Nether Portal", "PORTAL"), + NETHER_PORTAL(90, 0, 19469, "Nether Portal", "PORTAL"), NETHER_QUARTZ_ORE(153, 0, 4807, "Nether Quartz Ore", "QUARTZ_ORE"), - NETHER_WART(115, 0, 29227, "Nether Wart", "NETHER_WARTS"), + NETHER_STAR(399, 0, 12469, "Nether Star", ""), + NETHER_WART(372, 0, 29227, "Nether Wart", "NETHER_STALK"), NETHER_WART_BLOCK(214, 0, 15486, "Nether Wart Block", "NETHER_WART_BLOCK"), NOTE_BLOCK(25, 0, 20979, "Note Block", "NOTE_BLOCK"), + OAK_BOAT(333, 0, 17570, "Boat", "Oak Boat"), OAK_BUTTON(143, 0, 13510, "Oak Button", "Wooden_button"), + OAK_DOOR(324, 0, 20341, "Wooden Door", "Wood Door"), OAK_FENCE(85, 0, 6442, "Oak Fence", "FENCE"), OAK_FENCE_GATE(107, 0, 16689, "Oak Fence Gate", "FENCE_GATE"), OAK_LEAVES(18, 0, 4385, "Oak Leaves", ""), OAK_LOG(17, 0, 26723, "Oak Log", ""), + OAK_PLANKS(5, 0, 14905, "Oak Wood Plank", "Oak Planks"), OAK_PRESSURE_PLATE(72, 0, 20108, "Oak Pressure Plate", "Wooden_Presure_Plate"), + OAK_SAPLING(6, 0, 9636, "Oak Sapling", ""), OAK_SLAB(126, 0, 12002, "Oak Slab", "Wood step"), OAK_STAIRS(53, 0, 5449, "Oak Stairs", "WOOD_STAIRS"), OAK_TRAPDOOR(96, 0, 16927, "Oak Trapdoor", "Trapdoor"), - OAK_WOOD(17, 0, 23286, "Oak Wood", ""), + OAK_WOOD(-1, -1, 7378, "Oak Wood", ""), OBSERVER(218, 0, 10726, "Observer", "OBSERVER"), OBSIDIAN(49, 0, 32723, "Obsidian", "OBSIDIAN"), + OCELOT_SPAWN_EGG(383, 98, 30080, "Spawn Ocelot", "Ocelot Spawn Egg"), ORANGE_BANNER(425, 14, 4839, "Orange Banner", ""), + ORANGE_BED(355, 1, 11194, "Orange Bed", "Orange Bed"), ORANGE_CARPET(171, 1, 24752, "Orange Carpet", ""), ORANGE_CONCRETE(251, 1, 19914, "Orange Concrete", ""), ORANGE_CONCRETE_POWDER(252, 1, 30159, "Orange Concrete Powder", ""), + ORANGE_DYE(351, 14, 13866, "Orange Dye", ""), ORANGE_GLAZED_TERRACOTTA(236, 0, 27451, "Orange Glazed Terracotta", "ORANGE_GLAZED_TERRACOTTA"), ORANGE_SHULKER_BOX(220, 0, 21673, "Orange Shulker Box", "ORANGE_SHULKER_BOX"), ORANGE_STAINED_GLASS(95, 1, 25142, "Orange Stained Glass", ""), ORANGE_STAINED_GLASS_PANE(160, 1, 21089, "Orange Stained Glass Pane", ""), ORANGE_TERRACOTTA(159, 1, 18684, "Orange Terracotta", ""), ORANGE_TULIP(38, 5, 26038, "Orange Tulip", ""), - ORANGE_WALL_BANNER(425, -1, 9936, "Orange Banner", ""), + ORANGE_WALL_BANNER(117, 114, 9936, "Orange Banner", ""), ORANGE_WOOL(35, 1, 23957, "Orange Wool", ""), OXEYE_DAISY(38, 8, 11709, "Oxeye Daisy", ""), PACKED_ICE(174, 0, 28993, "Packed Ice", "PACKED_ICE"), + PAINTING(321, 0, 23945, "Painting", ""), + PAPER(339, 0, 9923, "Paper", ""), + PARROT_SPAWN_EGG(383, 105, 23614, "Spawn Parrot", "Parrot Spawn Egg"), PEONY(175, 5, 21155, "Peony", ""), PETRIFIED_OAK_SLAB(-1, -1, 18658, "Petrified Oak Slab", ""), PHANTOM_MEMBRANE(-1, -1, 18398, "Phantom Membrane", ""), PHANTOM_SPAWN_EGG(-1, -1, 24648, "Phantom Spawn Egg", ""), + PIG_SPAWN_EGG(383, 90, 22584, "Spawn Pig", "Pig Spawn Egg"), PINK_BANNER(425, 9, 19439, "Pink Banner", ""), + PINK_BED(355, 6, 13795, "Pink Bed", "Pink Bed"), PINK_CARPET(171, 6, 30186, "Pink Carpet", ""), PINK_CONCRETE(251, 6, 5227, "Pink Concrete", ""), PINK_CONCRETE_POWDER(252, 6, 6421, "Pink Concrete Powder", ""), + PINK_DYE(351, 9, 31151, "Pink Dye", ""), PINK_GLAZED_TERRACOTTA(241, 0, 10260, "Pink Glazed Terracotta", "PINK_GLAZED_TERRACOTTA"), PINK_SHULKER_BOX(225, 0, 24968, "Pink Shulker Box", "PINK_SHULKER_BOX"), PINK_STAINED_GLASS(95, 6, 16164, "Pink Stained Glass", ""), PINK_STAINED_GLASS_PANE(160, 6, 24637, "Pink Stained Glass Pane", ""), PINK_TERRACOTTA(159, 6, 23727, "Pink Terracotta", ""), PINK_TULIP(38, 7, 27319, "Pink Tulip", ""), - PINK_WALL_BANNER(425, -1, 9421, "Pink Banner", ""), + PINK_WALL_BANNER(117, 9, 9421, "Pink Banner", ""), PINK_WOOL(35, 6, 7611, "Pink Wool", ""), PISTON(33, 0, 21130, "Piston", "PISTON_BASE"), PISTON_HEAD(34, 0, 30226, "Piston Head", "PISTON_EXTENSION"), - PLAYER_WALL_HEAD(-1, -1, 13164, "Player Wall Head", ""), + PLAYER_HEAD(397, 3, 21174, "Mob Head (Human)", "Player Head"), + PLAYER_WALL_HEAD(144, 3, 13164, "Player Wall Head", ""), + PODZOL(3, 2, 24068, "Podzol", ""), + POISONOUS_POTATO(394, 0, 32640, "Poisonous Potato", ""), + POLAR_BEAR_SPAWN_EGG(383, 102, 17015, "Spawn Polar Bear", "Polar Bear Spawn Egg"), + POLISHED_ANDESITE(1, 6, 8335, "Polished Andesite", ""), + POLISHED_DIORITE(1, 4, 31615, "Polished Diorite", ""), + POLISHED_GRANITE(1, 2, 5477, "Polished Granite", ""), + POPPED_CHORUS_FRUIT(433, 0, 27844, "Popped Chorus Fruit", ""), POPPY(38, 0, 12851, "Poppy", ""), + PORKCHOP(319, 0, 30896, "Raw Porkchop", ""), + POTATO(392, 0, 21088, "Potato", "Potatoitem"), POTATOES(142, 0, 10879, "Potatoes", "POTATO"), + + // Potions + POTION(373, 0, 24020, "Potion", ""), + AWKWARD_POTION(373, 16, 24020, "Potion", ""), + THICK_POTION(373, 32, 24020, "Potion", ""), + MUNDANE_POTION(373, 64, 24020, "Potion", ""), + REGENERATION_POTION(373, 8193, 24020, "Potion", ""), + SWIFTNESS_POTION(373, 8194, 24020, "Potion", ""), + FIRE_RESISTANCE_POTION(373, 8195, 24020, "Potion", ""), + POISON_POTION(373, 8196, 24020, "Potion", ""), + HEALING_POTION(373, 8197, 24020, "Potion", ""), + NIGHT_VISION_POTION(373, 8198, 24020, "Potion", ""), + WEAKNESS_POTION(373, 8200, 24020, "Potion", ""), + STRENGTH_POTION(373, 8201, 24020, "Potion", ""), + SLOWNESS_POTION(373, 8202, 24020, "Potion", ""), + HARMING_POTION(373, 8204, 24020, "Potion", ""), + WATER_BREATHING_POTION(373, 8205, 24020, "Potion", ""), + INVISIBILITY_POTION(373, 8206, 24020, "Potion", ""), + REGENERATION_POTION2(373, 8225, 24020, "Potion", ""), + SWIFTNESS_POTION2(373, 8226, 24020, "Potion", ""), + POISON_POTION2(373, 8228, 24020, "Potion", ""), + HEALING_POTION2(373, 8229, 24020, "Potion", ""), + STRENGTH_POTION2(373, 8233, 24020, "Potion", ""), + LEAPING_POTION2(373, 8235, 24020, "Potion", ""), + HARMING_POTION2(373, 8236, 24020, "Potion", ""), + REGENERATION_POTION3(373, 8257, 24020, "Potion", ""), + SWIFTNESS_POTION3(373, 8258, 24020, "Potion", ""), + FIRE_RESISTANCE_POTION3(373, 8259, 24020, "Potion", ""), + POISON_POTION3(373, 8260, 24020, "Potion", ""), + NIGHT_VISION_POTION2(373, 8262, 24020, "Potion", ""), + WEAKNESS_POTION2(373, 8264, 24020, "Potion", ""), + STRENGTH_POTION3(373, 8265, 24020, "Potion", ""), + SLOWNESS_POTION2(373, 8266, 24020, "Potion", ""), + LEAPING_POTION3(373, 8267, 24020, "Potion", ""), + WATER_BREATHING_POTION2(373, 8269, 24020, "Potion", ""), + INVISIBILITY_POTION2(373, 8270, 24020, "Potion", ""), + REGENERATION_POTION4(373, 8289, 24020, "Potion", ""), + SWIFTNESS_POTION4(373, 8290, 24020, "Potion", ""), + POISON_POTION4(373, 8292, 24020, "Potion", ""), + STRENGTH_POTION4(373, 8297, 24020, "Potion", ""), + POTTED_ACACIA_SAPLING(-1, -1, 14096, "Potted Acacia Sapling", ""), POTTED_ALLIUM(-1, -1, 13184, "Potted Allium", ""), POTTED_AZURE_BLUET(-1, -1, 8754, "Potted Azure Bluet", ""), @@ -1334,40 +1276,54 @@ public enum CMIMaterial { PRISMARINE_BRICKS(168, 1, 29118, "Prismarine Bricks", ""), PRISMARINE_BRICK_SLAB(-1, -1, 26672, "Prismarine Brick Slab", ""), PRISMARINE_BRICK_STAIRS(-1, -1, 15445, "Prismarine Brick Stairs", ""), + PRISMARINE_CRYSTALS(410, 0, 31546, "Prismarine Crystals", ""), + PRISMARINE_SHARD(409, 0, 10993, "Prismarine Shard", ""), PRISMARINE_SLAB(-1, -1, 31323, "Prismarine Slab", ""), PRISMARINE_STAIRS(-1, -1, 19217, "Prismarine Stairs", ""), + PUFFERFISH(349, 3, 8115, "Pufferfish", ""), PUFFERFISH_BUCKET(-1, -1, 8861, "Bucket of Pufferfish", ""), PUFFERFISH_SPAWN_EGG(-1, -1, 24573, "Pufferfish Spawn Egg", ""), PUMPKIN(86, 0, 19170, "Pumpkin", "PUMPKIN"), + PUMPKIN_PIE(400, 0, 28725, "Pumpkin Pie", ""), + PUMPKIN_SEEDS(361, 0, 28985, "Pumpkin Seeds", ""), PUMPKIN_STEM(104, 0, 19021, "Pumpkin Stem", "PUMPKIN_STEM"), PURPLE_BANNER(425, 5, 29027, "Purple Banner", ""), + PURPLE_BED(355, 10, 29755, "Purple Bed", "Purple Bed"), PURPLE_CARPET(171, 10, 5574, "Purple Carpet", ""), PURPLE_CONCRETE(251, 10, 20623, "Purple Concrete", ""), PURPLE_CONCRETE_POWDER(252, 10, 26808, "Purple Concrete Powder", ""), + PURPLE_DYE(351, 5, 6347, "Purple Dye", ""), PURPLE_GLAZED_TERRACOTTA(245, 0, 4818, "Purple Glazed Terracotta", ""), PURPLE_SHULKER_BOX(229, 0, 10373, "Purple Shulker Box", "PURPLE_SHULKER_BOX"), PURPLE_STAINED_GLASS(95, 10, 21845, "Purple Stained Glass", ""), PURPLE_STAINED_GLASS_PANE(160, 10, 10948, "Purple Stained Glass Pane", ""), PURPLE_TERRACOTTA(159, 10, 10387, "Purple Terracotta", ""), - PURPLE_WALL_BANNER(425, -1, 14298, "Purple Banner", ""), + PURPLE_WALL_BANNER(117, 5, 14298, "Purple Banner", ""), PURPLE_WOOL(35, 10, 11922, "Purple Wool", ""), PURPUR_BLOCK(201, 0, 7538, "Purpur Block", "PURPUR_BLOCK"), PURPUR_PILLAR(202, 0, 26718, "Purpur Pillar", "PURPUR_PILLAR"), PURPUR_SLAB(205, 0, 11487, "Purpur Slab", "PURPUR_SLAB"), PURPUR_STAIRS(203, 0, 8921, "Purpur Stairs", "PURPUR_STAIRS"), + QUARTZ(406, 0, 23608, "Nether Quartz", ""), QUARTZ_BLOCK(155, 0, 11987, "Block of Quartz", ""), QUARTZ_PILLAR(155, 2, 16452, "Quartz Pillar", ""), QUARTZ_SLAB(44, 7, 4423, "Quartz Slab", ""), QUARTZ_STAIRS(156, 0, 24079, "Quartz Stairs", "QUARTZ_STAIRS"), + RABBIT(411, 0, 23068, "Raw Rabbit", ""), + RABBIT_FOOT(414, 0, 13864, "Rabbit's Foot", ""), + RABBIT_HIDE(415, 0, 12467, "Rabbit Hide", ""), + RABBIT_SPAWN_EGG(383, 101, 26496, "Spawn Rabbit", "Rabbit Spawn Egg"), + RABBIT_STEW(413, 0, 10611, "Rabbit Stew", ""), RAIL(66, 0, 13285, "Rail", "RAILS"), + REDSTONE(331, 0, 11233, "Redstone", "Redstone Dust"), REDSTONE_BLOCK(152, 0, 19496, "Block of Redstone", "REDSTONE_BLOCK"), REDSTONE_LAMP(123, 0, 8217, "Redstone Lamp", "REDSTONE_LAMP_OFF"), - REDSTONE_ORE(73, 0, 10887, "Redstone Ore", "REDSTONE_ORE"), + REDSTONE_ORE(73, 0, 10887, "Redstone Ore"), REDSTONE_TORCH(76, 0, 22547, "Redstone Torch(on)", "REDSTONE_TORCH_ON"), - UNLIT_REDSTONE_TORCH(75, 0, 22547, "Redstone Torch(off)", "REDSTONE_TORCH_ON"), - REDSTONE_WALL_TORCH(76, -1, 7595, "Redstone Wall Torch", ""), + REDSTONE_WALL_TORCH(76, 0, 7595, "Redstone Wall Torch", ""), REDSTONE_WIRE(55, 0, 25984, "Redstone Dust", "REDSTONE_WIRE"), RED_BANNER(425, 1, 26961, "Red Banner", ""), + RED_BED(355, 14, 30910, "Red Bed", "Red Bed"), RED_CARPET(171, 14, 5424, "Red Carpet", ""), RED_CONCRETE(251, 14, 8032, "Red Concrete", ""), RED_CONCRETE_POWDER(252, 14, 13286, "Red Concrete Powder", ""), @@ -1384,46 +1340,72 @@ public enum CMIMaterial { RED_STAINED_GLASS_PANE(160, 14, 8630, "Red Stained Glass Pane", ""), RED_TERRACOTTA(159, 14, 5086, "Red Terracotta", ""), RED_TULIP(38, 4, 16781, "Red Tulip", ""), - RED_WALL_BANNER(425, -1, 4378, "Red Banner", ""), + RED_WALL_BANNER(117, 1, 4378, "Red Banner", ""), RED_WOOL(35, 14, 11621, "Red Wool", ""), + REPEATER(356, 0, 28823, "Redstone Repeater", "Diode"), REPEATING_COMMAND_BLOCK(-1, -1, 12405, "Repeating Command Block", ""), ROSE_BUSH(175, 4, 6080, "Rose Bush", ""), + ROSE_RED(351, 1, 15694, "Rose Red", ""), + ROTTEN_FLESH(367, 0, 21591, "Rotten Flesh", ""), + SADDLE(329, 0, 30206, "Saddle", ""), + SALMON(349, 1, 18516, "Raw Salmon", ""), SALMON_BUCKET(-1, -1, 31427, "Bucket of Salmon", ""), SALMON_SPAWN_EGG(-1, -1, 18739, "Salmon Spawn Egg", ""), SAND(12, 0, 11542, "Sand", ""), SANDSTONE(24, 0, 13141, "Sandstone", ""), SANDSTONE_SLAB(44, 1, 29830, "Sandstone Slab", ""), + SANDSTONE_STAIRS(128, 0, 18474, "Sandstone Stairs", ""), SCUTE(-1, -1, 11914, "Scute", ""), SEAGRASS(-1, -1, 23942, "Seagrass", ""), SEA_LANTERN(169, 0, 16984, "Sea Lantern", "SEA_LANTERN"), SEA_PICKLE(-1, -1, 19562, "Sea Pickle", ""), + SHEARS(359, 0, 27971, "Shears", ""), + SHEEP_SPAWN_EGG(383, 91, 24488, "Spawn Sheep", "Sheep Spawn Egg"), + SHIELD(442, 0, 29943, "Shield", ""), SHULKER_BOX(229, 0, 7776, "Shulker Box", ""), SHULKER_SHELL(450, 0, 27848, "Shulker Shell", "SHULKER_SHELL"), - SKELETON_WALL_SKULL(397, -1, 31650, "Skeleton Wall Skull", ""), + SHULKER_SPAWN_EGG(383, 69, 31848, "Spawn Shulker", "Shulker Spawn Egg"), + SIGN(323, 0, 16918, "Sign", ""), + SILVERFISH_SPAWN_EGG(383, 60, 14537, "Spawn Silverfish", "Silverfish Spawn Egg"), + SKELETON_HORSE_SPAWN_EGG(383, 28, 21356, "Spawn Skeleton Horse", "Skeleton Horse Spawn Egg"), + SKELETON_SKULL(397, 0, 13270, "Mob Head (Skeleton)", "Skeleton Skull"), + SKELETON_SPAWN_EGG(383, 51, 15261, "Spawn Skeleton", "Skeleton Spawn Egg"), + SKELETON_WALL_SKULL(144, 0, 31650, "Skeleton Wall Skull", ""), + SLIME_BALL(341, 0, 5242, "Slimeball", ""), SLIME_BLOCK(165, 0, 31892, "Slime Block", "SLIME_BLOCK"), + SLIME_SPAWN_EGG(383, 55, 6550, "Spawn Slime", "Slime Spawn Egg"), SMOOTH_QUARTZ(-1, -1, 14415, "Smooth Quartz", ""), SMOOTH_RED_SANDSTONE(179, 2, 25180, "Smooth Red Sandstone", ""), SMOOTH_SANDSTONE(24, 2, 30039, "Smooth Sandstone", ""), SMOOTH_STONE(-1, -1, 21910, "Smooth Stone", ""), SNOW(78, 0, 14146, "Snow", "SNOW"), + SNOWBALL(332, 0, 19487, "Snowball", ""), SNOW_BLOCK(80, 0, 19913, "Snow Block", "SNOW_BLOCK"), SOUL_SAND(88, 0, 16841, "Soul Sand", "SOUL_SAND"), - SPAWNER(52, 90, 25500, "Spawner", "MOB_SPAWNER"), + SPAWNER(52, 90, 7018, "Spawner", "MOB_SPAWNER"), + SPECTRAL_ARROW(439, 0, 4568, "Spectral Arrow", ""), + SPIDER_EYE(375, 0, 9318, "Spider Eye", ""), + SPIDER_SPAWN_EGG(383, 52, 14984, "Spawn Spider", "Spider Spawn Egg"), SPLASH_POTION(438, 0, 30248, "Splash Potion", "SPLASH_POTION"), SPONGE(19, 0, 15860, "Sponge", "SPONGE"), SPRUCE_BOAT(444, 0, 9606, "Spruce Boat", "BOAT_SPRUCE"), SPRUCE_BUTTON(-1, -1, 23281, "Spruce Button", ""), - SPRUCE_DOOR(193, 0, 10642, "Spruce Door", "SPRUCE_DOOR"), + SPRUCE_DOOR(427, 0, 10642, "Spruce Door", "SPRUCE_DOOR_ITEM"), SPRUCE_FENCE(188, 0, 25416, "Spruce Fence", "SPRUCE_FENCE"), SPRUCE_FENCE_GATE(183, 0, 26423, "Spruce Fence Gate", "SPRUCE_FENCE_GATE"), SPRUCE_LEAVES(18, 1, 20039, "Spruce Leaves", ""), SPRUCE_LOG(17, 1, 9726, "Spruce Log", ""), - SPRUCE_PRESSURE_PLATE(72, 0, 15932, "Spruce Pressure Plate", ""), + SPRUCE_PLANKS(5, 1, 14593, "Spruce Wood Plank", "Spruce Planks"), + SPRUCE_PRESSURE_PLATE(-1, -1, 15932, "Spruce Pressure Plate", ""), + SPRUCE_SAPLING(6, 1, 19874, "Spruce Sapling", ""), SPRUCE_SLAB(126, 1, 4348, "Spruce Slab", ""), - SPRUCE_TRAPDOOR(96, 0, 10289, "Spruce Trapdoor", ""), - SPRUCE_WOOD(17, 1, 22538, "Spruce Wood", ""), + SPRUCE_STAIRS(134, 0, 11192, "Spruce Wood Stairs", "Spruce Stairs"), + SPRUCE_TRAPDOOR(-1, -1, 10289, "Spruce Trapdoor", ""), + SPRUCE_WOOD(-1, -1, 32328, "Spruce Wood", ""), + SQUID_SPAWN_EGG(383, 94, 10682, "Spawn Squid", "Squid Spawn Egg"), STICK(280, 0, 9773, "Stick", "STICK"), STICKY_PISTON(29, 0, 18127, "Sticky Piston", "PISTON_STICKY_BASE"), + STONE(1, 0, 22948, "Stone", ""), STONE_AXE(275, 0, 6338, "Stone Axe", "STONE_AXE"), STONE_BRICKS(98, 0, 6962, "Stone Bricks", ""), STONE_BRICK_SLAB(44, 5, 19676, "Stone Brick Slab", ""), @@ -1435,48 +1417,61 @@ public enum CMIMaterial { STONE_SHOVEL(273, 0, 9520, "Stone Shovel", "STONE_SPADE"), STONE_SLAB(44, 0, 19838, "Stone Slab", ""), STONE_SWORD(272, 0, 25084, "Stone Sword", "STONE_SWORD"), + STRAY_SPAWN_EGG(383, 6, 30153, "Spawn Stray", "Stray Spawn Egg"), STRING(287, 0, 12806, "String", "STRING"), - STRIPPED_ACACIA_LOG(17, 4, 18167, "Acacia Log", "Oak Log"), - STRIPPED_ACACIA_WOOD(5, 4, 17579, "Acacia Wood", "Oak Planks"), - STRIPPED_BIRCH_LOG(17, 2, 8838, "Birch Log", "Spruce Log"), - STRIPPED_BIRCH_WOOD(5, 2, 30740, "Birch Wood", "Spruce Planks"), - STRIPPED_DARK_OAK_LOG(17, 5, 6492, "Dark Oak Log", "Birch Log"), - STRIPPED_DARK_OAK_WOOD(5, 5, 6606, "Dark Oak Wood", "Birch Planks"), - STRIPPED_JUNGLE_LOG(17, 3, 15476, "Jungle Log", "Jungle Log"), - STRIPPED_JUNGLE_WOOD(5, 3, 5072, "Jungle Wood", "Jungle Planks"), - STRIPPED_OAK_LOG(17, 0, 20523, "Oak Log", "Acacia Log"), - STRIPPED_OAK_WOOD(5, 0, 4514, "Oak Wood", "Acacia Planks"), - STRIPPED_SPRUCE_LOG(17, 1, 6140, "Spruce Log", "Dark Oak Log"), - STRIPPED_SPRUCE_WOOD(5, 1, 15634, "Spruce Wood", "Dark Oak Planks"), + STRIPPED_ACACIA_LOG(-1, -1, 18167, "Stripped Acacia Log", "Oak Log"), + STRIPPED_ACACIA_WOOD(-1, -1, 27193, "Stripped Acacia Wood", "Oak Planks"), + STRIPPED_BIRCH_LOG(-1, -1, 8838, "Stripped Birch Log", "Spruce Log"), + STRIPPED_BIRCH_WOOD(-1, -1, 22350, "Stripped Birch Wood", "Spruce Planks"), + STRIPPED_DARK_OAK_LOG(-1, -1, 6492, "Stripped Dark Oak Log", "Birch Log"), + STRIPPED_DARK_OAK_WOOD(-1, -1, 16000, "Stripped Dark Oak Wood", "Birch Planks"), + STRIPPED_JUNGLE_LOG(-1, -1, 15476, "Stripped Jungle Log", "Jungle Log"), + STRIPPED_JUNGLE_WOOD(-1, -1, 30315, "Stripped Jungle Wood", "Jungle Planks"), + STRIPPED_OAK_LOG(-1, -1, 20523, "Stripped Oak Log", "Acacia Log"), + STRIPPED_OAK_WOOD(-1, -1, 31455, "Stripped Oak Wood", "Acacia Planks"), + STRIPPED_SPRUCE_LOG(-1, -1, 6140, "Stripped Spruce Log", "Dark Oak Log"), + STRIPPED_SPRUCE_WOOD(-1, -1, 6467, "Stripped Spruce Wood", "Dark Oak Planks"), STRUCTURE_BLOCK(255, 0, 26831, "Structure Block", "STRUCTURE_BLOCK"), STRUCTURE_VOID(217, 0, 30806, "Structure Void", "STRUCTURE_VOID"), + SUGAR(353, 0, 30638, "Sugar", ""), + SUGAR_CANE(338, 0, 7726, "Sugar Canes", "Sugar Cane"), SUNFLOWER(175, 0, 7408, "Sunflower", ""), TALL_GRASS(31, 0, 21559, "Tall Grass", ""), TALL_SEAGRASS(-1, -1, 27189, "Tall Seagrass", ""), TERRACOTTA(172, 0, 16544, "Terracotta", "HARD_CLAY"), + TIPPED_ARROW(440, 0, 25164, "Tipped Arrow", ""), TNT(46, 0, 7896, "TNT", "TNT"), + TNT_MINECART(407, 0, 4277, "Minecart with TNT", "explosiveminecart"), TORCH(50, 0, 6063, "Torch", "TORCH"), + TOTEM_OF_UNDYING(449, 0, 10139, "Totem Of Undying", ""), TRAPPED_CHEST(146, 0, 18970, "Trapped Chest", "TRAPPED_CHEST"), TRIDENT(-1, -1, 7534, "Trident", ""), - TROPICAL_FISH(-1, -1, 12795, "Tropical Fish", ""), - TROPICAL_FISH_BUCKET(-1, -1, 30390, "Bucket of Tropical Fish", ""), + TRIPWIRE(132, 0, 8810, "Tripwire", ""), + TRIPWIRE_HOOK(131, 0, 8130, "Tripwire Hook", ""), + TROPICAL_FISH(349, 2, 24879, "Tropical Fish", ""), + TROPICAL_FISH_BUCKET(-1, -1, 29995, "Bucket of Tropical Fish", ""), TROPICAL_FISH_SPAWN_EGG(-1, -1, 19713, "Tropical Fish Spawn Egg", ""), TUBE_CORAL(-1, -1, 23048, "Tube Coral", ""), TUBE_CORAL_BLOCK(-1, -1, 23723, "Tube Coral Block", ""), TUBE_CORAL_FAN(-1, -1, 19929, "Tube Coral Fan", ""), + TUBE_CORAL_WALL_FAN(-1, -1, 25282, "Tube Coral Wall Fan", ""), TURTLE_EGG(-1, -1, 32101, "Turtle Egg", ""), TURTLE_HELMET(-1, -1, 30120, "Turtle Shell", ""), TURTLE_SPAWN_EGG(-1, -1, 17324, "Turtle Spawn Egg", ""), + VEX_SPAWN_EGG(383, 35, 27751, "Spawn Vex", "Vex Spawn Egg"), + VILLAGER_SPAWN_EGG(383, 120, 30348, "Spawn Villager", "Villager Spawn Egg"), + VINDICATOR_SPAWN_EGG(383, 36, 25324, "Spawn Vindicator", "Vindicator Spawn Egg"), VINE(106, 0, 14564, "Vines", "VINE"), - VOID_AIR(0, 0, 13668, "Air", ""), + VOID_AIR(-1, -1, 13668, "Void Air", ""), WALL_SIGN(68, 0, 10644, "Wall Sign", "WALL_SIGN"), - WALL_TORCH(50, -1, 25890, "Wall Torch", ""), - FLOWING_WATER(8, 0, 24998, "Flowing Water", "FLOWING_WATER"), - WATER(9, 0, 24998, "Water", "STATIONARY_WATER"), + WALL_TORCH(50, 0, 25890, "Wall Torch", ""), + WATER(8, 0, 24998, "Flowing Water", "FLOWING_WATER"), + WATER_BUCKET(326, 0, 8802, "Water Bucket", ""), WET_SPONGE(19, 1, 9043, "Wet Sponge", ""), - WHEAT(296, 0, 27709, "Wheat", "CROPS"), + WHEAT(59, 0, 27709, "Crops", ""), WHEAT_SEEDS(295, 0, 28742, "Wheat Seeds", "SEEDS"), WHITE_BANNER(425, 15, 17562, "White Banner", ""), + WHITE_BED(355, 0, 8185, "White Bed", "Bed"), WHITE_CARPET(171, 0, 15117, "White Carpet", ""), WHITE_CONCRETE(251, 0, 6281, "White Concrete", ""), WHITE_CONCRETE_POWDER(252, 0, 10363, "White Concrete Powder", ""), @@ -1488,13 +1483,20 @@ public enum CMIMaterial { WHITE_TULIP(38, 6, 9742, "White Tulip", ""), WHITE_WALL_BANNER(425, 15, 15967, "White Banner", ""), WHITE_WOOL(35, 0, 8624, "White Wool", "Wool"), - WITHER_SKELETON_WALL_SKULL(397, 1, 9326, "Wither Skeleton Wall Skull", ""), - WOODEN_AXE(271, 0, 6292, "Wooden Axe", "WOOD_AXE"), - WOODEN_HOE(290, 0, 16043, "Wooden Hoe", "WOOD_HOE"), + WITCH_SPAWN_EGG(383, 66, 11837, "Spawn Witch", "Witch Spawn Egg"), + WITHER_SKELETON_SKULL(397, 1, 31487, "Mob Head (Wither Skeleton)", "Wither Skeleton Skull"), + WITHER_SKELETON_SPAWN_EGG(383, 5, 10073, "Spawn Wither Skeleton", "Wither Skeleton Spawn Egg"), + WITHER_SKELETON_WALL_SKULL(144, 1, 9326, "Wither Skeleton Wall Skull", ""), + WOLF_SPAWN_EGG(383, 95, 21692, "Spawn Wolf", "Wolf Spawn Egg"), + WOODEN_AXE(271, 0, 6292, "Wooden Axe", "Wood Axe"), + WOODEN_HOE(290, 0, 16043, "Wooden Hoe", "Wood Hoe"), WOODEN_PICKAXE(270, 0, 12792, "Wooden Pickaxe", "WOOD_PICKAXE"), WOODEN_SHOVEL(269, 0, 28432, "Wooden Shovel", "WOOD_SPADE"), WOODEN_SWORD(268, 0, 7175, "Wooden Sword", "WOOD_SWORD"), + WRITABLE_BOOK(386, 0, 13393, "Book and Quill", ""), + WRITTEN_BOOK(387, 0, 24164, "Written Book", ""), YELLOW_BANNER(425, 11, 30382, "Yellow Banner", ""), + YELLOW_BED(355, 4, 30410, "Yellow Bed", "Yellow Bed"), YELLOW_CARPET(171, 4, 18149, "Yellow Carpet", ""), YELLOW_CONCRETE(251, 4, 15722, "Yellow Concrete", ""), YELLOW_CONCRETE_POWDER(252, 4, 10655, "Yellow Concrete Powder", ""), @@ -1505,23 +1507,24 @@ public enum CMIMaterial { YELLOW_TERRACOTTA(159, 4, 32129, "Yellow Terracotta", ""), YELLOW_WALL_BANNER(425, 11, 32004, "Yellow Banner", ""), YELLOW_WOOL(35, 4, 29507, "Yellow Wool", ""), - ZOMBIE_WALL_HEAD(397, 2, 16296, "Zombie Wall Head", ""), - - BRAIN_CORAL_WALL_FAN(-1, -1, 22685, "Brain Coral Wall Fan"), - BUBBLE_CORAL_WALL_FAN(-1, -1, 20382, "Bubble Coral Wall Fan"), - DEAD_BRAIN_CORAL_FAN(-1, -1, 26150, "Dead Brain Coral Fan"), - DEAD_BRAIN_CORAL_WALL_FAN(-1, -1, 23718, "Dead Brain Coral Wall Fan"), - DEAD_BUBBLE_CORAL_FAN(-1, -1, 17322, "Dead Bubble Coral Fan"), - DEAD_BUBBLE_CORAL_WALL_FAN(-1, -1, 18453, "Dead Bubble Coral Wall Fan"), - DEAD_FIRE_CORAL_FAN(-1, -1, 27073, "Dead Fire Coral Fan"), - DEAD_FIRE_CORAL_WALL_FAN(-1, -1, 23375, "Dead Fire Coral Wall Fan"), - DEAD_HORN_CORAL_FAN(-1, -1, 11387, "Dead Horn Coral Fan"), - DEAD_HORN_CORAL_WALL_FAN(-1, -1, 27550, "Dead Horn Coral Wall Fan"), - DEAD_TUBE_CORAL_FAN(-1, -1, 17628, "Dead Tube Coral Fan"), - DEAD_TUBE_CORAL_WALL_FAN(-1, -1, 5128, "Dead Tube Coral Wall Fan"), - FIRE_CORAL_WALL_FAN(-1, -1, 20100, "Fire Coral Wall Fan"), - HORN_CORAL_WALL_FAN(-1, -1, 28883, "Horn Coral Wall Fan"), - TUBE_CORAL_WALL_FAN(-1, -1, 25282, "Tube Coral Wall Fan"); + ZOMBIE_HEAD(397, 2, 9304, "Mob Head (Zombie)", "Zombie Head"), + ZOMBIE_HORSE_SPAWN_EGG(383, 29, 4275, "Spawn Zombie Horse", "Zombie Horse Spawn Egg"), + ZOMBIE_PIGMAN_SPAWN_EGG(383, 57, 11531, "Spawn Zombie Pigman", "Zombie Pigman Spawn Egg"), + ZOMBIE_SPAWN_EGG(383, 54, 5814, "Spawn Zombie", "Zombie Spawn Egg"), + ZOMBIE_VILLAGER_SPAWN_EGG(383, 27, 10311, "Spawn Zombie Villager", "Zombie Villager Spawn Egg"), + ZOMBIE_WALL_HEAD(144, 2, 16296, "Zombie Wall Head", ""), + + // Legacy + LEGACY_STATIONARY_WATER(9, 0, -1, "Stationary Water", ""), + LEGACY_STATIONARY_LAVA(11, 0, -1, "Stationary Lava", ""), + LEGACY_BURNING_FURNACE(62, 0, -1, "Burning Furnace", ""), + LEGACY_WOODEN_DOOR_BLOCK(64, 0, -1, "Wooden Door Block", ""), + LEGACY_NETHER_WARTS(115, -1, -1, "Nether Warts", ""), + LEGACY_IRON_DOOR_BLOCK(71, 0, -1, "Iron Door Block", ""), + LEGACY_GLOWING_REDSTON_ORE(74, 0, -1, "Glowing Redstone Ore", ""), + LEGACY_SUGAR_CANE_BLOCK(83, -1, -1, "Sugar Cane Block", ""), + LEGACY_RAW_FISH(349, 0, -1, "Raw Fish", ""), + LEGACY_SKULL(144, 0, -1, "Skull", ""); private int legacyId; private int legacyData; @@ -1553,7 +1556,7 @@ public int getLegacyId() { } public int getId() { - if (version.isEqualOrHigher(Version.v1_13_R1)) { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { return this.id; } return getLegacyId(); @@ -1574,25 +1577,39 @@ public void updateMaterial() { } if (mat == null) { for (Material one : Material.class.getEnumConstants()) { - if (!one.name().equalsIgnoreCase(this.name())) + try { + String n1 = one.name().replace("LEGACY_", "").replace("_", ""); + String n2 = this.name().replace("_", ""); + if (!n1.equalsIgnoreCase(n2)) + continue; + mat = one; + } catch (StringIndexOutOfBoundsException e) { continue; - mat = one; + } break; } } if (mat == null) { for (Material one : Material.class.getEnumConstants()) { - if (!one.name().replace("_", "").equalsIgnoreCase(this.getName().replace(" ", ""))) + try { + if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.getName().replace(" ", ""))) + continue; + mat = one; + } catch (StringIndexOutOfBoundsException e) { continue; - mat = one; + } break; } } - if (mat == null) { + if (mat == null && !this.getLegacyName().isEmpty()) { for (Material one : Material.class.getEnumConstants()) { - if (!one.name().replace("_", "").equalsIgnoreCase(this.getLegacyName().replace(" ", "").replace("_", ""))) + try { + if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.getLegacyName().replace(" ", "").replace("_", ""))) + continue; + mat = one; + } catch (StringIndexOutOfBoundsException e) { continue; - mat = one; + } break; } } @@ -1607,15 +1624,16 @@ public ItemStack newItemStack() { break; } } - if (version.isEqualOrHigher(Version.v1_13_R1)) { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { return new ItemStack(mat == null ? Material.STONE : mat); } return new ItemStack(mat == null ? Material.STONE : mat, 1, (short) this.getLegacyData()); + } @Deprecated public short getData() { - if (version.isEqualOrHigher(Version.v1_13_R1)) { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { return 0; } return (short) legacyData; @@ -1627,7 +1645,7 @@ public int getLegacyData() { public static CMIMaterial getRandom(CMIMaterial mat) { - List ls = new ArrayList(); + List ls = new ArrayList<>(); for (CMIMaterial one : CMIMaterial.values()) { if (one.getLegacyId() == -1) @@ -1656,12 +1674,19 @@ public static CMIMaterial getRandom(CMIMaterial mat) { public static CMIMaterial get(String id) { Integer ids = null; Integer data = null; + id = id.replace("_", "").replace(" ", "").toLowerCase(); try { ids = Integer.parseInt(id); } catch (Exception e) { if (id.contains(":")) { try { ids = Integer.parseInt(id.split(":")[0]); + data = Integer.parseInt(id.split(":")[1]); + return get(ids, data); + } catch (Exception ex) { + } + + try { data = Integer.parseInt(id.split(":")[1]); id = id.split(":")[0]; } catch (Exception ex) { @@ -1674,15 +1699,37 @@ public static CMIMaterial get(String id) { CMIItemStack ci = byBukkitName.get(id); if (ci != null) mat = ci.getCMIType(); - if (mat != null) + if (mat != null) { + if (data != null) { + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getLegacyId() == mat.getLegacyId()) { + if (one.getLegacyData() == data) { + mat = one; + break; + } + } + } + } return mat; + } ci = byMojangName.get(id); if (ci != null) mat = ci.getCMIType(); - if (mat != null) + if (mat != null) { + if (data != null) { + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getLegacyId() == mat.getLegacyId()) { + if (one.getLegacyData() == data) { + mat = one; + break; + } + } + } + } return mat; + } if (ids != null) { if (data == null) @@ -1745,7 +1792,7 @@ public static CMIMaterial get(ItemStack item) { CMIMaterial m = get(item.getType().getId(), item.getData().getData()); if (m == null) { - CMIItemStack cm = byBukkitName.get(item.getType().toString()); + CMIItemStack cm = byBukkitName.get(item.getType().toString().toLowerCase().replace("_", "")); if (cm != null) m = cm.getCMIType(); } @@ -1775,9 +1822,11 @@ public static CMIMaterial get(int id, int data) { if (cm != null) mat = cm.getCMIType(); - cm = byId.get(id); - if (cm != null) - mat = cm.getCMIType(); + if (mat == null) { + cm = byId.get(id); + if (cm != null) + mat = cm.getCMIType(); + } if (mat == null) { for (CMIMaterial one : CMIMaterial.values()) { @@ -1787,9 +1836,17 @@ public static CMIMaterial get(int id, int data) { } } } + if (mat == null) { + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getLegacyId() == id) { + mat = one; + break; + } + } + } if (mat != null) { for (CMIMaterial one : CMIMaterial.values()) { - if (one.getId() == mat.getId()) { + if (one.getLegacyId() == mat.getLegacyId()) { if (one.getLegacyData() == data) { mat = one; break; @@ -1840,17 +1897,14 @@ public boolean isMonsterEgg() { case ZOMBIE_VILLAGER_SPAWN_EGG: case SKELETON_HORSE_SPAWN_EGG: case ZOMBIE_HORSE_SPAWN_EGG: - case ARMOR_STAND_SPAWN_EGG: case DONKEY_SPAWN_EGG: case MULE_SPAWN_EGG: case EVOKER_SPAWN_EGG: case VEX_SPAWN_EGG: case VINDICATOR_SPAWN_EGG: - case ILLUSIONER_SPAWN_EGG: case CREEPER_SPAWN_EGG: case SKELETON_SPAWN_EGG: case SPIDER_SPAWN_EGG: - case GIANT_SPAWN_EGG: case ZOMBIE_SPAWN_EGG: case SLIME_SPAWN_EGG: case GHAST_SPAWN_EGG: @@ -1860,8 +1914,6 @@ public boolean isMonsterEgg() { case SILVERFISH_SPAWN_EGG: case BLAZE_SPAWN_EGG: case MAGMA_CUBE_SPAWN_EGG: - case ENDER_DRAGON_SPAWN_EGG: - case WITHER_SPAWN_EGG: case BAT_SPAWN_EGG: case WITCH_SPAWN_EGG: case ENDERMITE_SPAWN_EGG: @@ -1874,9 +1926,7 @@ public boolean isMonsterEgg() { case SQUID_SPAWN_EGG: case WOLF_SPAWN_EGG: case MOOSHROOM_SPAWN_EGG: - case SNOWMAN_SPAWN_EGG: case OCELOT_SPAWN_EGG: - case IRON_GOLEM_SPAWN_EGG: case HORSE_SPAWN_EGG: case RABBIT_SPAWN_EGG: case POLAR_BEAR_SPAWN_EGG: @@ -2124,15 +2174,9 @@ public boolean isDoor() { switch (this) { case OAK_DOOR: case IRON_DOOR: - case SPRUCE_DOOR_ITEM: - case BIRCH_DOOR_ITEM: - case JUNGLE_DOOR_ITEM: - case ACACIA_DOOR_ITEM: - case DARK_OAK_DOOR_ITEM: case ACACIA_DOOR: case BIRCH_DOOR: case DARK_OAK_DOOR: - case IRON_DOOR_BLOCK: case JUNGLE_DOOR: case SPRUCE_DOOR: return true; @@ -2240,6 +2284,45 @@ public boolean isDye() { return false; } + public static boolean isSlab(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isSlab(); + } + + public boolean isSlab() { + switch (this) { + case ACACIA_SLAB: + case DARK_OAK_SLAB: + case BIRCH_SLAB: + case BRICK_SLAB: + case COBBLESTONE_SLAB: + case DARK_PRISMARINE_SLAB: + case JUNGLE_SLAB: + case NETHER_BRICK_SLAB: + case OAK_SLAB: + case PETRIFIED_OAK_SLAB: + case PRISMARINE_BRICK_SLAB: + case PRISMARINE_SLAB: + case PURPUR_SLAB: + case QUARTZ_SLAB: + case RED_SANDSTONE_SLAB: + case SANDSTONE_SLAB: + case SPRUCE_SLAB: + case STONE_BRICK_SLAB: + case STONE_SLAB: + return true; + default: + break; + } + return false; + } + + public static SlabType getSlabType(Block block) { + return checkSlab(block); + } + public boolean equals(Material mat) { if (getMaterial() == null) return false; @@ -2274,4 +2357,76 @@ public void setMojangName(String mojangName) { this.mojangName = mojangName; } } + + private static SlabType checkSlab(Block block) { + if (!CMIMaterial.isSlab(block.getType())) + return SlabType.NOTSLAB; + + if (version.isEqualOrHigher(Version.v1_13_R1)) { + if (block.getBlockData() instanceof org.bukkit.block.data.type.Slab) { + org.bukkit.block.data.type.Slab slab = (org.bukkit.block.data.type.Slab) block.getBlockData(); + org.bukkit.block.data.type.Slab.Type t = slab.getType(); + if (t.equals(org.bukkit.block.data.type.Slab.Type.TOP)) + return SlabType.TOP; + if (t.equals(org.bukkit.block.data.type.Slab.Type.BOTTOM)) + return SlabType.BOTTOM; + if (t.equals(org.bukkit.block.data.type.Slab.Type.DOUBLE)) + return SlabType.DOUBLE; + } + return SlabType.NOTSLAB; + } + if (block.getType().name().contains("STEP")) { + switch (CMIMaterial.get(block).getLegacyId()) { + case 44: + switch (block.getData()) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + return SlabType.BOTTOM; + default: + return SlabType.DOUBLE; + } + case 126: + switch (block.getData()) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + return SlabType.BOTTOM; + default: + return SlabType.DOUBLE; + } + case 182: + switch (block.getData()) { + case 0: + return SlabType.BOTTOM; + default: + return SlabType.DOUBLE; + } + case 205: + switch (block.getData()) { + case 0: + return SlabType.BOTTOM; + default: + return SlabType.DOUBLE; + } + } + } + + return SlabType.NOTSLAB; + } + + public enum SlabType { + TOP, + BOTTOM, + DOUBLE, + NOTSLAB; + } } diff --git a/src/com/bekvon/bukkit/residence/CMILib/ItemReflection.java b/src/com/bekvon/bukkit/residence/CMILib/ItemReflection.java index cdbefc947..237b8371c 100644 --- a/src/com/bekvon/bukkit/residence/CMILib/ItemReflection.java +++ b/src/com/bekvon/bukkit/residence/CMILib/ItemReflection.java @@ -4,6 +4,7 @@ package com.bekvon.bukkit.residence.CMILib; +import java.lang.reflect.Field; import java.lang.reflect.Method; import org.bukkit.Bukkit; @@ -11,10 +12,8 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.utils.VersionChecker.Version; - public class ItemReflection { private static Class CraftServerClass; @@ -60,21 +59,47 @@ private static void initialize() { } private static Class getBukkitClass(String nmsClassString) throws ClassNotFoundException { - return Class.forName("org.bukkit.craftbukkit." + Residence.getInstance().getVersionChecker().getVersion() + "." + nmsClassString); + return Class.forName("org.bukkit.craftbukkit." + Version.getCurrent() + "." + nmsClassString); } public static Class getMinecraftClass(String nmsClassString) throws ClassNotFoundException { - return Class.forName("net.minecraft.server." + Residence.getInstance().getVersionChecker().getVersion() + "." + nmsClassString); + return Class.forName("net.minecraft.server." + Version.getCurrent() + "." + nmsClassString); } public static String getItemMinecraftName(ItemStack item) { + try { + + Object nmsStack = asNMSCopy(item); + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + Object pre = nmsStack.getClass().getMethod("getItem").invoke(nmsStack); + Object n = pre.getClass().getMethod("getName").invoke(pre); + Class ll = Class.forName("net.minecraft.server." + Version.getCurrent() + ".LocaleLanguage"); + Object lla = ll.getMethod("a").invoke(ll); + return (String) lla.getClass().getMethod("a", String.class).invoke(lla, (String) n); + } + + Field field = Item.getField("REGISTRY"); + Object reg = field.get(field); + Method meth = reg.getClass().getMethod("b", Object.class); + meth.setAccessible(true); + Method secmeth = nmsStack.getClass().getMethod("getItem"); + Object res2 = secmeth.invoke(nmsStack); + Object res = meth.invoke(reg, res2); + return res.toString(); + } catch (Exception e) { + return null; + } + } + + public static String getItemRealName(ItemStack item) { try { Object nmsStack = asNMSCopy(item); Method itemMeth = Item.getMethod("getById", int.class); Object res = itemMeth.invoke(Item, item.getType().getId()); String ff = "b"; - switch (Residence.getInstance().getVersionChecker().getVersion()) { + switch (Version.getCurrent()) { case v1_10_R1: case v1_9_R1: case v1_9_R2: @@ -151,7 +176,7 @@ public Object getCraftServer() { } public ItemStack getItemInOffHand(Player player) { - if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_9_R1)) + if (Version.getCurrent().isLower(Version.v1_9_R1)) return null; return player.getInventory().getItemInOffHand(); } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java index 68007edd4..b3e27f424 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java @@ -105,10 +105,10 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { @Override public boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { + CMIMaterial cm = CMIMaterial.get(block); + switch (cm) { case COBWEB: case STRING: - case WALL_BANNER: case WALL_SIGN: case VINE: case TRIPWIRE_HOOK: @@ -151,7 +151,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); } @Override @@ -170,7 +170,7 @@ public boolean isChorusTeleport(TeleportCause tpcause) { return true; return false; } - + @Override public void playEffect(Player player, Location location, CMIEffect ef) { if (location == null || ef == null || location.getWorld() == null) @@ -190,7 +190,7 @@ public void playEffect(Player player, Location location, CMIEffect ef) { for (EnumParticle p : EnumParticle.values()) { if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { particle = p; - if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().getData() != null) { if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { extra = new int[] { 0 }; } else { @@ -226,7 +226,7 @@ public void playEffect(Player player, Location location, CMIEffect ef) { extra = new int[0]; } } - + if (particle == null) return; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java index 3e9211d36..c28160e7f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java @@ -112,7 +112,6 @@ public boolean isEmptyBlock(Block block) { switch (CMIMaterial.get(block)) { case COBWEB: case STRING: - case WALL_BANNER: case WALL_SIGN: case VINE: case TRIPWIRE_HOOK: @@ -154,7 +153,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); /* 1.11 Shulker Box */ matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java index 1d33d04ad..d190473d9 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java @@ -114,7 +114,6 @@ public boolean isEmptyBlock(Block block) { switch (CMIMaterial.get(block)) { case COBWEB: case STRING: - case WALL_BANNER: case WALL_SIGN: case VINE: case TRIPWIRE_HOOK: @@ -156,7 +155,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); /* 1.11 Shulker Box */ matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java index 8bb9cf254..339da4491 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java @@ -127,7 +127,6 @@ public boolean isEmptyBlock(Block block) { switch (CMIMaterial.get(block)) { case COBWEB: case STRING: - case WALL_BANNER: case WALL_SIGN: case VINE: case TRIPWIRE_HOOK: @@ -187,16 +186,10 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(CMIMaterial.OAK_DOOR.getMaterial(), Flags.door); matUseFlagList.put(CMIMaterial.IRON_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.SPRUCE_DOOR_ITEM.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.BIRCH_DOOR_ITEM.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.JUNGLE_DOOR_ITEM.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.ACACIA_DOOR_ITEM.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.DARK_OAK_DOOR_ITEM.getMaterial(), Flags.door); matUseFlagList.put(CMIMaterial.OAK_DOOR.getMaterial(), Flags.door); matUseFlagList.put(CMIMaterial.ACACIA_DOOR.getMaterial(), Flags.door); matUseFlagList.put(CMIMaterial.BIRCH_DOOR.getMaterial(), Flags.door); matUseFlagList.put(CMIMaterial.DARK_OAK_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.IRON_DOOR_BLOCK.getMaterial(), Flags.door); matUseFlagList.put(CMIMaterial.JUNGLE_DOOR.getMaterial(), Flags.door); matUseFlagList.put(CMIMaterial.SPRUCE_DOOR.getMaterial(), Flags.door); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 0d5d17869..2d3ecc291 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -91,7 +91,6 @@ public boolean isEmptyBlock(Block block) { switch (CMIMaterial.get(block)) { case COBWEB: case STRING: - case WALL_BANNER: case WALL_SIGN: case VINE: case TRIPWIRE_HOOK: diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java index 2c6f8f46b..518e171c1 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java @@ -91,7 +91,6 @@ public boolean isEmptyBlock(Block block) { switch (CMIMaterial.get(block)) { case COBWEB: case STRING: - case WALL_BANNER: case WALL_SIGN: case VINE: case TRIPWIRE_HOOK: diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java index 881223f66..5eef13ae4 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java @@ -95,7 +95,6 @@ public boolean isEmptyBlock(Block block) { switch (CMIMaterial.get(block)) { case COBWEB: case STRING: - case WALL_BANNER: case WALL_SIGN: case VINE: case TRIPWIRE_HOOK: @@ -138,7 +137,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); /* 1.8 day light sensor */ - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); } @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java index 18b6ecdb4..34fbff079 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java @@ -95,7 +95,6 @@ public boolean isEmptyBlock(Block block) { switch (CMIMaterial.get(block)) { case COBWEB: case STRING: - case WALL_BANNER: case WALL_SIGN: case VINE: case TRIPWIRE_HOOK: @@ -138,7 +137,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); /* 1.8 day light sensor */ - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); } @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java index 1890c522b..c47d68915 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java @@ -95,7 +95,6 @@ public boolean isEmptyBlock(Block block) { switch (CMIMaterial.get(block)) { case COBWEB: case STRING: - case WALL_BANNER: case WALL_SIGN: case VINE: case TRIPWIRE_HOOK: @@ -138,7 +137,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); /* 1.8 day light sensor */ - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); } @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java index e16f7f5ea..18cd4d6b7 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java @@ -96,7 +96,6 @@ public boolean isEmptyBlock(Block block) { switch (CMIMaterial.get(block)) { case COBWEB: case STRING: - case WALL_BANNER: case WALL_SIGN: case VINE: case TRIPWIRE_HOOK: @@ -139,7 +138,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); } @Override diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java index c5ddf9194..e3895b56d 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java @@ -96,7 +96,6 @@ public boolean isEmptyBlock(Block block) { switch (CMIMaterial.get(block)) { case COBWEB: case STRING: - case WALL_BANNER: case WALL_SIGN: case VINE: case TRIPWIRE_HOOK: @@ -139,7 +138,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR_INVERTED.getMaterial(), Flags.diode); + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); } @Override diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 17399e0da..e16d59749 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -4,6 +4,7 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketBuyInterface; import com.bekvon.bukkit.residence.containers.ResidencePlayer; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index f30e2e92b..f070ffdaf 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -203,7 +203,13 @@ public static void initValidFlags() { addMaterialToUseFlag(CMIMaterial.ENCHANTING_TABLE.getMaterial(), Flags.enchant); addMaterialToUseFlag(Material.STONE_BUTTON, Flags.button); addMaterialToUseFlag(Material.LEVER, Flags.lever); - addMaterialToUseFlag(CMIMaterial.BED_BLOCK.getMaterial(), Flags.bed); + + for (CMIMaterial one : CMIMaterial.values()) { + if (!one.isBed()) + continue; + addMaterialToUseFlag(one.getMaterial(), Flags.bed); + } + addMaterialToUseFlag(Material.BREWING_STAND, Flags.brew); addMaterialToUseFlag(Material.CAKE, Flags.cake); addMaterialToUseFlag(Material.NOTE_BLOCK, Flags.note); @@ -219,9 +225,9 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.HOPPER, Flags.container); addMaterialToUseFlag(Material.DROPPER, Flags.container); addMaterialToUseFlag(Material.FURNACE, Flags.container); - addMaterialToUseFlag(CMIMaterial.BURNING_FURNACE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.FURNACE.getMaterial(), Flags.container); addMaterialToUseFlag(Material.DISPENSER, Flags.container); - addMaterialToUseFlag(CMIMaterial.CAKE_BLOCK.getMaterial(), Flags.cake); + addMaterialToUseFlag(CMIMaterial.CAKE.getMaterial(), Flags.cake); } public static FlagPermissions parseFromConfigNode(String name, ConfigurationSection node) { diff --git a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java index 75a8c5a07..0e944954b 100644 --- a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java +++ b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java @@ -501,7 +501,7 @@ public static ParticleEffects fromId(int id) { */ private static boolean isWater(Location location) { CMIMaterial material = CMIMaterial.get(location.getBlock()); - return material.equals(CMIMaterial.WATER) || material.equals(CMIMaterial.FLOWING_WATER); + return material.equals(CMIMaterial.WATER); } /** diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 18ff6b850..826eb0a10 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -22,13 +22,12 @@ public VersionChecker(Residence plugin) { version = getCurrent(); } - private Version version = Version.v1_12_R1; + private static Version version = Version.v1_12_R1; public Version getVersion() { return version; } - public enum Version { v1_7_R1(171, "v1_7"), v1_7_R2(172, "v1_7"), @@ -46,6 +45,7 @@ public enum Version { v1_12_R2(1122, "v1_12"), v1_13_R1(1131, "v1_13"), v1_13_R2(1132, "v1_13"), + v1_13_R3(1133, "v1_13"), v1_14_R1(1141, "v1_14"), v1_14_R2(1142, "v1_14"), v1_15_R1(1151, "v1_15"), @@ -92,6 +92,18 @@ public boolean isEqualOrLower(Version version) { public boolean isEqualOrHigher(Version version) { return getValue() >= version.getValue(); } + + public static boolean isCurrentEqualOrHigher(Version v) { + return version.getValue() >= v.getValue(); + } + + public static boolean isCurrentLower(Version v) { + return version.getValue() < v.getValue(); + } + + public static boolean isCurrentEqualOrLower(Version v) { + return version.getValue() <= v.getValue(); + } } public static Version getCurrent() { diff --git a/src/plugin.yml b/src/plugin.yml index 5a2f680fa..3b4145a42 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.0.1 +version: 4.8.0.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From b065ae04cf25d63d3796727157ca4584a7bdf175 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Oct 2018 12:40:24 +0300 Subject: [PATCH 0507/1142] Lets update libraries --- src/cmiLib/ActionBarTitleMessages.java | 239 +++++++ src/cmiLib/CMIChatColor.java | 154 +++++ .../CMILib => cmiLib}/CMIEffect.java | 4 +- .../CMILib => cmiLib}/CMIEffectManager.java | 8 +- .../CMILib => cmiLib}/CMIItemStack.java | 6 +- src/cmiLib/ConfigReader.java | 347 +++++++++++ .../CMILib => cmiLib}/ItemManager.java | 418 ++++++++----- .../CMILib => cmiLib}/ItemReflection.java | 7 +- src/cmiLib/RawMessage.java | 589 ++++++++++++++++++ .../utils => cmiLib}/VersionChecker.java | 136 ++-- .../residence/BossBar/BossBarManager.java | 7 +- .../bukkit/residence/ConfigManager.java | 6 +- .../bekvon/bukkit/residence/Residence.java | 29 +- .../Siege/ResidenceSiegeListener.java | 3 - .../bukkit/residence/allNms/v1_10_R1.java | 4 +- .../bukkit/residence/allNms/v1_11_R1.java | 4 +- .../bukkit/residence/allNms/v1_12_R1.java | 4 +- .../bukkit/residence/allNms/v1_13_R1.java | 6 +- .../bukkit/residence/allNms/v1_13_R2.java | 250 ++++++++ .../residence/allNms/v1_7_Couldron.java | 4 +- .../bukkit/residence/allNms/v1_7_R4.java | 4 +- .../bukkit/residence/allNms/v1_8_R1.java | 4 +- .../bukkit/residence/allNms/v1_8_R2.java | 4 +- .../bukkit/residence/allNms/v1_8_R3.java | 4 +- .../bukkit/residence/allNms/v1_9_R1.java | 4 +- .../bukkit/residence/allNms/v1_9_R2.java | 4 +- .../bukkit/residence/commands/material.java | 3 +- .../bukkit/residence/commands/remove.java | 3 +- .../bukkit/residence/commands/shop.java | 3 +- .../bukkit/residence/commands/tool.java | 3 +- .../bukkit/residence/containers/NMS.java | 2 +- .../residence/economy/rent/RentManager.java | 3 +- .../bekvon/bukkit/residence/gui/FlagUtil.java | 3 +- .../bukkit/residence/itemlist/ItemList.java | 2 +- .../listeners/ResidenceBlockListener.java | 7 +- .../listeners/ResidenceEntityListener.java | 8 +- .../listeners/ResidenceFixesListener.java | 3 +- .../listeners/ResidencePlayerListener.java | 32 +- .../protection/ClaimedResidence.java | 50 +- .../residence/protection/FlagPermissions.java | 3 +- .../protection/ResidenceManager.java | 3 +- .../selection/Schematics7Manager.java | 12 +- .../selection/SchematicsManager.java | 7 +- .../residence/selection/SelectionManager.java | 8 +- .../bukkit/residence/text/help/HelpEntry.java | 3 +- .../residence/text/help/InformationPager.java | 3 +- .../bukkit/residence/utils/ActionBar.java | 197 ------ .../residence/utils/ParticleEffects.java | 3 +- .../bukkit/residence/utils/RawMessage.java | 120 ---- .../bekvon/bukkit/residence/utils/Utils.java | 3 +- src/plugin.yml | 2 +- 51 files changed, 2073 insertions(+), 662 deletions(-) create mode 100644 src/cmiLib/ActionBarTitleMessages.java create mode 100644 src/cmiLib/CMIChatColor.java rename src/{com/bekvon/bukkit/residence/CMILib => cmiLib}/CMIEffect.java (86%) rename src/{com/bekvon/bukkit/residence/CMILib => cmiLib}/CMIEffectManager.java (96%) rename src/{com/bekvon/bukkit/residence/CMILib => cmiLib}/CMIItemStack.java (94%) create mode 100644 src/cmiLib/ConfigReader.java rename src/{com/bekvon/bukkit/residence/CMILib => cmiLib}/ItemManager.java (88%) rename src/{com/bekvon/bukkit/residence/CMILib => cmiLib}/ItemReflection.java (93%) create mode 100644 src/cmiLib/RawMessage.java rename src/{com/bekvon/bukkit/residence/utils => cmiLib}/VersionChecker.java (61%) create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java delete mode 100644 src/com/bekvon/bukkit/residence/utils/ActionBar.java delete mode 100644 src/com/bekvon/bukkit/residence/utils/RawMessage.java diff --git a/src/cmiLib/ActionBarTitleMessages.java b/src/cmiLib/ActionBarTitleMessages.java new file mode 100644 index 000000000..ce2dba671 --- /dev/null +++ b/src/cmiLib/ActionBarTitleMessages.java @@ -0,0 +1,239 @@ +package cmiLib; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.logging.Level; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; + +import cmiLib.VersionChecker.Version; + +public class ActionBarTitleMessages { + private static Object packet; + private static Method getHandle; + private static Method sendPacket; + private static Field playerConnection; + private static Class nmsChatSerializer; + private static Class nmsIChatBaseComponent; + private static Class packetType; + + private static Constructor nmsPacketPlayOutTitle; + private static Class enumTitleAction; + private static Method fromString; + private static boolean simpleTitleMessages = false; + + private static Class ChatMessageclz; + private static Class sub; + private static Object[] consts; + + static { + if (Version.getCurrent().isHigher(Version.v1_7_R4)) { + try { + packetType = Class.forName(getPacketPlayOutChat()); + Class typeCraftPlayer = Class.forName(getCraftPlayerClasspath()); + Class typeNMSPlayer = Class.forName(getNMSPlayerClasspath()); + Class typePlayerConnection = Class.forName(getPlayerConnectionClasspath()); + nmsChatSerializer = Class.forName(getChatSerializerClasspath()); + nmsIChatBaseComponent = Class.forName(getIChatBaseComponentClasspath()); + getHandle = typeCraftPlayer.getMethod("getHandle"); + playerConnection = typeNMSPlayer.getField("playerConnection"); + sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName(getPacketClasspath())); + + if (Version.isCurrentHigher(Version.v1_11_R1)) { + ChatMessageclz = Class.forName(getChatMessageTypeClasspath()); + consts = ChatMessageclz.getEnumConstants(); + sub = consts[2].getClass(); + } + + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { + Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); + } + // Title + try { + Class typePacketPlayOutTitle = Class.forName(getPacketPlayOutTitleClasspath()); + enumTitleAction = Class.forName(getEnumTitleActionClasspath()); + nmsPacketPlayOutTitle = typePacketPlayOutTitle.getConstructor(enumTitleAction, nmsIChatBaseComponent); + fromString = Class.forName(getClassMessageClasspath()).getMethod("fromString", String.class); + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) { + simpleTitleMessages = true; + } + } + } + + public static void send(CommandSender receivingPacket, String msg) { + if (receivingPacket instanceof Player) + send((Player) receivingPacket, msg); + else + receivingPacket.sendMessage(msg); + } + + public static void send(Player receivingPacket, String msg) { + if (receivingPacket == null) + return; + if (!receivingPacket.isOnline()) + return; + if (msg == null) + return; + try { + if (!Version.getCurrent().isHigher(Version.v1_7_R4) || nmsChatSerializer == null) { + receivingPacket.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + return; + } + + Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, "{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); + if (Version.isCurrentHigher(Version.v1_11_R1)) + packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[2]); + else if (Version.isCurrentHigher(Version.v1_7_R4)) { + packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 2); + } else { + packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 2); + } + Object player = getHandle.invoke(receivingPacket); + Object connection = playerConnection.get(player); + sendPacket.invoke(connection, packet); + } catch (Exception ex) { +// Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); + } + + try { + Object player = getHandle.invoke(receivingPacket); + Object connection = playerConnection.get(player); + sendPacket.invoke(connection, packet); + } catch (Exception ex) { +// Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); + } + } + + public static void sendTitle(final Player receivingPacket, final Object title) { + sendTitle(receivingPacket, title, null, 0, 20, 20); + } + + public static void sendTitle(final Player receivingPacket, final Object title, final Object subtitle) { + sendTitle(receivingPacket, title, subtitle, 0, 20, 20); + } + + public static void sendTitle(final Player receivingPacket, final Object title, final Object subtitle, final int fadeIn, final int keep, final int fadeOut) { + Bukkit.getScheduler().runTaskAsynchronously(Residence.getInstance(), new Runnable() { + @Override + public void run() { + + String t = title == null ? null : CMIChatColor.translateAlternateColorCodes((String) title); + String s = subtitle == null ? null : CMIChatColor.translateAlternateColorCodes((String) subtitle); + + if (simpleTitleMessages) { + receivingPacket.sendMessage(t); + receivingPacket.sendMessage(s); + return; + } + try { + switch (Version.getCurrent()) { + case v1_9_R1: + case v1_9_R2: + case v1_10_R1: + case v1_11_R1: + receivingPacket.sendTitle(t, s); + break; + case v1_12_R1: + case v1_13_R1: + case v1_13_R2: + case v1_14_R1: + case v1_14_R2: + case v1_15_R1: + case v1_15_R2: + receivingPacket.sendTitle(t, s, fadeIn, keep, fadeOut); + break; + case v1_7_R1: + case v1_7_R2: + case v1_7_R3: + case v1_7_R4: + case v1_8_R1: + case v1_8_R2: + case v1_8_R3: + if (title != null) { + Object packetTitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("TITLE").get(null), + ((Object[]) fromString.invoke(null, t))[0]); + sendPacket(receivingPacket, packetTitle); + } + if (subtitle != null) { + if (title == null) { + Object packetTitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("TITLE").get(null), ((Object[]) fromString.invoke(null, ""))[0]); + sendPacket(receivingPacket, packetTitle); + } + Object packetSubtitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("SUBTITLE").get(null), + ((Object[]) fromString.invoke(null, s))[0]); + sendPacket(receivingPacket, packetSubtitle); + } + + break; + default: + break; + } + + } catch (SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchFieldException ex) { + simpleTitleMessages = true; + Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully support title messages. They will be shown in chat instead."); + } + return; + } + }); + } + + private static void sendPacket(Player player, Object packet) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { + Object handle = getHandle.invoke(player); + Object connection = playerConnection.get(handle); + sendPacket.invoke(connection, packet); + } + + private static String getCraftPlayerClasspath() { + return "org.bukkit.craftbukkit." + Version.getCurrent() + ".entity.CraftPlayer"; + } + + private static String getPlayerConnectionClasspath() { + return "net.minecraft.server." + Version.getCurrent() + ".PlayerConnection"; + } + + private static String getNMSPlayerClasspath() { + return "net.minecraft.server." + Version.getCurrent() + ".EntityPlayer"; + } + + private static String getPacketClasspath() { + return "net.minecraft.server." + Version.getCurrent() + ".Packet"; + } + + private static String getIChatBaseComponentClasspath() { + return "net.minecraft.server." + Version.getCurrent() + ".IChatBaseComponent"; + } + + private static String getChatSerializerClasspath() { + if (!Version.isCurrentHigher(Version.v1_8_R2)) + return "net.minecraft.server." + Version.getCurrent() + ".ChatSerializer"; + return "net.minecraft.server." + Version.getCurrent() + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent + } + + private static String getPacketPlayOutChat() { + return "net.minecraft.server." + Version.getCurrent() + ".PacketPlayOutChat"; + } + + private static String getPacketPlayOutTitleClasspath() { + return "net.minecraft.server." + Version.getCurrent() + ".PacketPlayOutTitle"; + } + + private static String getEnumTitleActionClasspath() { + return getPacketPlayOutTitleClasspath() + "$EnumTitleAction"; + } + + private static String getClassMessageClasspath() { + return "org.bukkit.craftbukkit." + Version.getCurrent() + ".util.CraftChatMessage"; + } + + private static String getChatMessageTypeClasspath() { + return "net.minecraft.server." + Version.getCurrent() + ".ChatMessageType"; + } +} diff --git a/src/cmiLib/CMIChatColor.java b/src/cmiLib/CMIChatColor.java new file mode 100644 index 000000000..855988cbb --- /dev/null +++ b/src/cmiLib/CMIChatColor.java @@ -0,0 +1,154 @@ +package cmiLib; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.regex.Pattern; + +import org.bukkit.ChatColor; + +public enum CMIChatColor { + BLACK('0'), + DARK_BLUE('1'), + DARK_GREEN('2'), + DARK_AQUA('3'), + DARK_RED('4'), + DARK_PURPLE('5'), + GOLD('6'), + GRAY('7'), + DARK_GRAY('8'), + BLUE('9'), + GREEN('a'), + AQUA('b'), + RED('c'), + LIGHT_PURPLE('d'), + YELLOW('e'), + WHITE('f'), + MAGIC('k', false), + BOLD('l', false), + STRIKETHROUGH('m', false), + UNDERLINE('n', false), + ITALIC('o', false), + RESET('r', false, true); + + private char c; + private Boolean color = true; + private Boolean reset = false; + private Pattern pattern = null; + + CMIChatColor(char c) { + this(c, true); + } + + CMIChatColor(char c, Boolean color) { + this(c, color, false); + } + + CMIChatColor(char c, Boolean color, Boolean reset) { + this.c = c; + this.color = color; + this.reset = reset; + this.pattern = Pattern.compile("(?i)(&[" + c + "])"); + } + + public static String translateAlternateColorCodes(String text) { + return ChatColor.translateAlternateColorCodes('&', text); + } + + public static String colorize(String text) { + if (text == null) + return null; + return ChatColor.translateAlternateColorCodes('&', text); + } + + public static String deColorize(String text) { + if (text == null) + return null; + return text.replace("§", "&"); + } + + public static String stripColor(String text) { + if (text == null) + return null; + text = ChatColor.translateAlternateColorCodes('&', text); + return ChatColor.stripColor(text); + } + + public static String getLastColors(String text) { + if (text == null) + return null; + text = CMIChatColor.translateAlternateColorCodes(text); + return ChatColor.getLastColors(text); + } + + public String getColorCode() { + return "&" + c; + } + + public String getBukkitColorCode() { + return "§" + c; + } + + public char getChar() { + return c; + } + + public void setChar(char c) { + this.c = c; + } + + public Boolean isColor() { + return color; + } + + public Boolean isFormat() { + return !color && !reset; + } + + public Boolean isReset() { + return reset; + } + + public ChatColor getColor() { + return ChatColor.getByChar(this.getChar()); + } + + public static CMIChatColor getColor(String text) { + String or = CMIChatColor.deColorize(text); + text = CMIChatColor.deColorize(text).replace("&", ""); + + if (text.length() > 1) { + String formated = text.toLowerCase().replace("_", ""); + for (CMIChatColor one : CMIChatColor.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(formated)) + return one; + } + } + + if (or.length() > 1 && String.valueOf(or.charAt(or.length() - 2)).equalsIgnoreCase("&")) { + text = text.substring(text.length() - 1, text.length()); + + for (CMIChatColor one : CMIChatColor.values()) { + if (String.valueOf(one.getChar()).equalsIgnoreCase(text)) + return one; + } + } + + return null; + } + + public static CMIChatColor getRandomColor() { + List ls = new ArrayList(); + for (CMIChatColor one : CMIChatColor.values()) { + if (!one.isColor()) + continue; + ls.add(one); + } + Collections.shuffle(ls); + return ls.get(0); + } + + public Pattern getPattern() { + return pattern; + } +} diff --git a/src/com/bekvon/bukkit/residence/CMILib/CMIEffect.java b/src/cmiLib/CMIEffect.java similarity index 86% rename from src/com/bekvon/bukkit/residence/CMILib/CMIEffect.java rename to src/cmiLib/CMIEffect.java index ef9fd47ad..f0ceea927 100644 --- a/src/com/bekvon/bukkit/residence/CMILib/CMIEffect.java +++ b/src/cmiLib/CMIEffect.java @@ -1,12 +1,12 @@ /** * Copyright (C) 2017 Zrips */ -package com.bekvon.bukkit.residence.CMILib; +package cmiLib; import org.bukkit.Color; import org.bukkit.util.Vector; -import com.bekvon.bukkit.residence.CMILib.CMIEffectManager.CMIParticle; +import cmiLib.CMIEffectManager.CMIParticle; public class CMIEffect { diff --git a/src/com/bekvon/bukkit/residence/CMILib/CMIEffectManager.java b/src/cmiLib/CMIEffectManager.java similarity index 96% rename from src/com/bekvon/bukkit/residence/CMILib/CMIEffectManager.java rename to src/cmiLib/CMIEffectManager.java index d8afe7b38..081927ebb 100644 --- a/src/com/bekvon/bukkit/residence/CMILib/CMIEffectManager.java +++ b/src/cmiLib/CMIEffectManager.java @@ -1,18 +1,18 @@ /** * Copyright (C) 2017 Zrips */ -package com.bekvon.bukkit.residence.CMILib; +package cmiLib; import java.util.ArrayList; import java.util.List; import org.bukkit.Effect; import org.bukkit.Effect.Type; -import org.bukkit.Material; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; -import com.bekvon.bukkit.residence.utils.VersionChecker.Version; +import cmiLib.ItemManager.CMIMaterial; +import cmiLib.VersionChecker.Version; +import org.bukkit.Material; public class CMIEffectManager { public enum CMIParticleType { diff --git a/src/com/bekvon/bukkit/residence/CMILib/CMIItemStack.java b/src/cmiLib/CMIItemStack.java similarity index 94% rename from src/com/bekvon/bukkit/residence/CMILib/CMIItemStack.java rename to src/cmiLib/CMIItemStack.java index ce56c3e88..14aec3e42 100644 --- a/src/com/bekvon/bukkit/residence/CMILib/CMIItemStack.java +++ b/src/cmiLib/CMIItemStack.java @@ -1,7 +1,7 @@ /** * Copyright (C) 2017 Zrips */ -package com.bekvon.bukkit.residence.CMILib; +package cmiLib; import java.util.ArrayList; import java.util.HashMap; @@ -17,8 +17,8 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; -import com.bekvon.bukkit.residence.utils.VersionChecker.Version; +import cmiLib.ItemManager.CMIMaterial; +import cmiLib.VersionChecker.Version; public class CMIItemStack { diff --git a/src/cmiLib/ConfigReader.java b/src/cmiLib/ConfigReader.java new file mode 100644 index 000000000..c6fd07622 --- /dev/null +++ b/src/cmiLib/ConfigReader.java @@ -0,0 +1,347 @@ +package cmiLib; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.nio.charset.Charset; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; + +import com.bekvon.bukkit.residence.Residence; +import com.google.common.io.Files; + +/* + * Made by Zrips + */ + +public class ConfigReader extends YamlConfiguration { + private HashMap comments; + YamlConfiguration config; + private String p = null; + private File file = null; + + public ConfigReader(String fileName) throws Exception { + this(new File(Residence.getInstance().getDataFolder(), fileName)); + } + + public ConfigReader(File file) throws Exception { + super(); + comments = new HashMap(); + this.file = file; + this.config = getyml(file); + } + + @Override + public void save(String file) throws IOException { + if (file == null) { + throw new IllegalArgumentException("File cannot be null"); + } + + save(new File(file)); + } + + @Override + public void save(File file) throws IOException { + if (file == null) { + throw new IllegalArgumentException("File cannot be null"); + } + Files.createParentDirs(file); + String data = insertComments(saveToString()); + PrintWriter writer = new PrintWriter(file, "UTF-8"); + try { + writer.write(data); + } finally { + writer.close(); + } + } + + private String insertComments(String yaml) { + if (!comments.isEmpty()) { + String[] yamlContents = yaml.split("[" + System.getProperty("line.separator") + "]"); + StringBuilder newContents = new StringBuilder(); + StringBuilder currentPath = new StringBuilder(); + boolean commentedPath = false; + boolean node = false; + int depth = 0; + + boolean firstLine = true; + for (final String line : yamlContents) { + if (firstLine) { + firstLine = false; + if (line.startsWith("#")) { + continue; + } + } + + boolean keyOk = true; + if (line.contains(": ")) { + int index = 0; + index = line.indexOf(": "); + if (index < 0) { + index = line.length() - 1; + } + int whiteSpace = 0; + for (int n = 0; n < line.length(); n++) { + if (line.charAt(n) == ' ') { + whiteSpace++; + } else { + break; + } + } + String key = line.substring(whiteSpace, index); + if (key.contains(" ")) + keyOk = false; + else if (key.contains("&")) + keyOk = false; + else if (key.contains(".")) + keyOk = false; + else if (key.contains("'")) + keyOk = false; + else if (key.contains("\"")) + keyOk = false; + } + + if (line.contains(": ") && keyOk || (line.length() > 1 && line.charAt(line.length() - 1) == ':')) { + commentedPath = false; + node = true; + + int index = 0; + index = line.indexOf(": "); + if (index < 0) { + index = line.length() - 1; + } + if (currentPath.toString().isEmpty()) { + currentPath = new StringBuilder(line.substring(0, index)); + } else { + int whiteSpace = 0; + for (int n = 0; n < line.length(); n++) { + if (line.charAt(n) == ' ') { + whiteSpace++; + } else { + break; + } + } + if (whiteSpace / 2 > depth) { + currentPath.append(".").append(line.substring(whiteSpace, index)); + depth++; + } else if (whiteSpace / 2 < depth) { + int newDepth = whiteSpace / 2; + for (int i = 0; i < depth - newDepth; i++) { + currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), ""); + } + int lastIndex = currentPath.lastIndexOf("."); + if (lastIndex < 0) { + currentPath = new StringBuilder(); + } else { + currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); + } + currentPath.append(line.substring(whiteSpace, index)); + depth = newDepth; + } else { + int lastIndex = currentPath.lastIndexOf("."); + if (lastIndex < 0) { + currentPath = new StringBuilder(); + } else { + currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); + } + currentPath.append(line.substring(whiteSpace, index)); + } + } + } else { + node = false; + } + StringBuilder newLine = new StringBuilder(line); + if (node) { + String comment = null; + if (!commentedPath) { + comment = comments.get(currentPath.toString()); + } + if (comment != null && !comment.isEmpty()) { + newLine.insert(0, System.getProperty("line.separator")).insert(0, comment); + comment = null; + commentedPath = true; + } + } + newLine.append(System.getProperty("line.separator")); + newContents.append(newLine.toString()); + } + + return newContents.toString(); + } + return yaml; + } + + public void addComment(String path, String... commentLines) { + StringBuilder commentstring = new StringBuilder(); + String leadingSpaces = ""; + for (int n = 0; n < path.length(); n++) { + if (path.charAt(n) == '.') { + leadingSpaces += " "; + } + } + for (String line : commentLines) { + if (!line.isEmpty()) { + line = leadingSpaces + "# " + line; + } + if (commentstring.length() > 0) { + commentstring.append(System.getProperty("line.separator")); + } + commentstring.append(line); + } + comments.put(path, commentstring.toString()); + } + + public YamlConfiguration getyml(File file) throws Exception { + YamlConfiguration config = new YamlConfiguration(); + FileInputStream fileinputstream = null; + + try { + fileinputstream = new FileInputStream(file); + InputStreamReader str = new InputStreamReader(fileinputstream, Charset.forName("UTF-8")); + config.load(str); + str.close(); + } catch (FileNotFoundException e) { + } catch (InvalidConfigurationException | IOException e) { + e.printStackTrace(); + saveToBackup(); + throw e; + } finally { + if (fileinputstream != null) + try { + fileinputstream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + return config; + } + + public void saveToBackup() { + File cc = new File(Residence.getInstance().getDataFolder(), "FileBackups"); + if (!cc.isDirectory()) + cc.mkdir(); + + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss "); + String newFileName = dateFormat.format(date) + file.getName(); + + Residence.getInstance().consoleMessage("&cFailed to load " + file.getName() + "! Backup have been saved into " + Residence.getInstance().getDataFolder().getPath() + File.separator + "FileBackups" + + File.separator + newFileName); + + File f = new File(Residence.getInstance().getDataFolder(), "FileBackups" + File.separator + newFileName); +// file.renameTo(f); + try { + Files.copy(file, f); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void save() { + try { + save(file); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static void newLn(StringBuilder header) { + header.append(System.lineSeparator()); + } + + private static StringBuilder formStringBuilder(List list) { + StringBuilder header = new StringBuilder(); + for (String one : list) { + header.append(one); + newLn(header); + } + return header; + } + + public void header(List list) { + options().header(formStringBuilder(list).toString()); + } + + String[] waitingComment = null; + + private void checkWaitingComment(String path) { + if (waitingComment == null) + return; + addComment(path, waitingComment); + waitingComment = null; + } + + public YamlConfiguration getC() { + return config; + } + + public void copyDefaults(boolean value) { + getC().options().copyDefaults(value); + } + + private String process(String path, Object value) { + if (this.p != null) + path = this.p + path; + checkWaitingComment(path); + config.addDefault(path, value); + copySetting(path); + return path; + } + + public Boolean get(String path, Boolean boo) { + path = process(path, boo); + return config.getBoolean(path); + } + + public Object get(String path, Location boo) { + path = process(path, boo); + return config.get(path); + } + + public int get(String path, int boo) { + path = process(path, boo); + return config.getInt(path); + } + + public List getIntList(String path, List list) { + path = process(path, list); + return config.getIntegerList(path); + } + + public List get(String path, List list) { + path = process(path, list); + return config.getStringList(path); + } + + public String get(String path, String boo) { + path = process(path, boo); + return config.getString(path); + } + + public Double get(String path, Double boo) { + path = process(path, boo); + return config.getDouble(path); + } + + private synchronized void copySetting(String path) { + set(path, config.get(path)); + } + + public void resetP() { + p = null; + } + + public void setP(String cmd) { + this.p = "command." + cmd + ".info."; + } +} diff --git a/src/com/bekvon/bukkit/residence/CMILib/ItemManager.java b/src/cmiLib/ItemManager.java similarity index 88% rename from src/com/bekvon/bukkit/residence/CMILib/ItemManager.java rename to src/cmiLib/ItemManager.java index 9bf1d8553..2b0732441 100644 --- a/src/com/bekvon/bukkit/residence/CMILib/ItemManager.java +++ b/src/cmiLib/ItemManager.java @@ -1,7 +1,7 @@ /** * Copyright (C) 2017 Zrips */ -package com.bekvon.bukkit.residence.CMILib; +package cmiLib; import java.util.ArrayList; import java.util.Collections; @@ -15,13 +15,15 @@ import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.block.Block; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.block.Skull; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; +import org.bukkit.inventory.meta.BlockStateMeta; import org.bukkit.inventory.meta.SkullMeta; -import com.bekvon.bukkit.residence.utils.VersionChecker.Version; - +import cmiLib.VersionChecker.Version; public class ItemManager { @@ -442,23 +444,23 @@ public enum CMIEntityType { PARROT(105, "Parrot"), VILLAGER(120, "Villager"), ENDER_CRYSTAL(200, "End Crystal"), - TURTLE(-1, "Turtle"), - PHANTOM(-1, "Phantom"), - TRIDENT(-1, "Trident"), - COD(-1, "Cod"), - SALMON(-1, "Salmon"), - PUFFERFISH(-1, "Pufferfish"), - TROPICAL_FISH(-1, "Tropical Fish"), - DROWNED(-1, "Drowned"), - DOLPHIN(-1, "Dolphin"), - LINGERING_POTION(-1, "Lingering Potion"), - FISHING_HOOK(-1, "Fishing Hook"), - LIGHTNING(-1, "Lightning Bolt"), - WEATHER(-1, "Weather"), - PLAYER(-1, "Player"), - COMPLEX_PART(-1, "Complex Part"), - TIPPED_ARROW(-1, "Tipped Arrow"), - UNKNOWN(-1, "Unknown"); + TURTLE(901, "Turtle"), + PHANTOM(902, "Phantom"), + TRIDENT(903, "Trident"), + COD(904, "Cod"), + SALMON(905, "Salmon"), + PUFFERFISH(906, "Pufferfish"), + TROPICAL_FISH(907, "Tropical Fish"), + DROWNED(908, "Drowned"), + DOLPHIN(909, "Dolphin"), + LINGERING_POTION(910, "Lingering Potion"), + FISHING_HOOK(911, "Fishing Hook"), + LIGHTNING(912, "Lightning Bolt"), + WEATHER(913, "Weather"), + PLAYER(914, "Player"), + COMPLEX_PART(915, "Complex Part"), + TIPPED_ARROW(916, "Tipped Arrow"), + UNKNOWN(999, "Unknown"); private int id; private String name; @@ -489,6 +491,27 @@ public static CMIEntityType getByType(EntityType entity) { return getByName(entity.toString()); } + public static CMIEntityType getByItem(ItemStack item) { + if (item == null) + return null; + + if (CMIMaterial.isMonsterEgg(item.getType())) { + String name = item.getType().toString().replace("_SPAWN_EGG", ""); + return getByName(name); + } + + if (CMIMaterial.SPAWNER.equals(item.getType())) { + if (item.getItemMeta() instanceof BlockStateMeta) { + BlockStateMeta bsm = (BlockStateMeta) item.getItemMeta(); + if (bsm.getBlockState() instanceof CreatureSpawner) { + CreatureSpawner bs = (CreatureSpawner) bsm.getBlockState(); + return CMIEntityType.getByType(bs.getSpawnedType()); + } + } + } + return null; + } + public static CMIEntityType getByName(String name) { String main = name; String sub = null; @@ -601,7 +624,7 @@ public static String getRealNameByType(EntityType type) { } } - public static enum CMIMaterial { + public enum CMIMaterial { NONE(-1, -1, -1, "None"), ACACIA_BOAT(447, 0, 27326, "Acacia Boat", "BOAT_ACACIA"), ACACIA_BUTTON(-1, -1, 13993, "Acacia Button", ""), @@ -1403,7 +1426,7 @@ public static enum CMIMaterial { SPRUCE_TRAPDOOR(-1, -1, 10289, "Spruce Trapdoor", ""), SPRUCE_WOOD(-1, -1, 32328, "Spruce Wood", ""), SQUID_SPAWN_EGG(383, 94, 10682, "Spawn Squid", "Squid Spawn Egg"), - STICK(280, 0, 9773, "Stick", "STICK"), + STICK(280, 0, 9773, "Stick"), STICKY_PISTON(29, 0, 18127, "Sticky Piston", "PISTON_STICKY_BASE"), STONE(1, 0, 22948, "Stone", ""), STONE_AXE(275, 0, 6338, "Stone Axe", "STONE_AXE"), @@ -1419,18 +1442,18 @@ public static enum CMIMaterial { STONE_SWORD(272, 0, 25084, "Stone Sword", "STONE_SWORD"), STRAY_SPAWN_EGG(383, 6, 30153, "Spawn Stray", "Stray Spawn Egg"), STRING(287, 0, 12806, "String", "STRING"), - STRIPPED_ACACIA_LOG(-1, -1, 18167, "Stripped Acacia Log", "Oak Log"), - STRIPPED_ACACIA_WOOD(-1, -1, 27193, "Stripped Acacia Wood", "Oak Planks"), - STRIPPED_BIRCH_LOG(-1, -1, 8838, "Stripped Birch Log", "Spruce Log"), - STRIPPED_BIRCH_WOOD(-1, -1, 22350, "Stripped Birch Wood", "Spruce Planks"), - STRIPPED_DARK_OAK_LOG(-1, -1, 6492, "Stripped Dark Oak Log", "Birch Log"), - STRIPPED_DARK_OAK_WOOD(-1, -1, 16000, "Stripped Dark Oak Wood", "Birch Planks"), - STRIPPED_JUNGLE_LOG(-1, -1, 15476, "Stripped Jungle Log", "Jungle Log"), - STRIPPED_JUNGLE_WOOD(-1, -1, 30315, "Stripped Jungle Wood", "Jungle Planks"), - STRIPPED_OAK_LOG(-1, -1, 20523, "Stripped Oak Log", "Acacia Log"), - STRIPPED_OAK_WOOD(-1, -1, 31455, "Stripped Oak Wood", "Acacia Planks"), - STRIPPED_SPRUCE_LOG(-1, -1, 6140, "Stripped Spruce Log", "Dark Oak Log"), - STRIPPED_SPRUCE_WOOD(-1, -1, 6467, "Stripped Spruce Wood", "Dark Oak Planks"), + STRIPPED_ACACIA_LOG(-1, -1, 18167, "Stripped Acacia Log"), + STRIPPED_ACACIA_WOOD(-1, -1, 27193, "Stripped Acacia Wood"), + STRIPPED_BIRCH_LOG(-1, -1, 8838, "Stripped Birch Log"), + STRIPPED_BIRCH_WOOD(-1, -1, 22350, "Stripped Birch Wood"), + STRIPPED_DARK_OAK_LOG(-1, -1, 6492, "Stripped Dark Oak Log"), + STRIPPED_DARK_OAK_WOOD(-1, -1, 16000, "Stripped Dark Oak Wood"), + STRIPPED_JUNGLE_LOG(-1, -1, 15476, "Stripped Jungle Log"), + STRIPPED_JUNGLE_WOOD(-1, -1, 30315, "Stripped Jungle Wood"), + STRIPPED_OAK_LOG(-1, -1, 20523, "Stripped Oak Log"), + STRIPPED_OAK_WOOD(-1, -1, 31455, "Stripped Oak Wood"), + STRIPPED_SPRUCE_LOG(-1, -1, 6140, "Stripped Spruce Log"), + STRIPPED_SPRUCE_WOOD(-1, -1, 6467, "Stripped Spruce Wood"), STRUCTURE_BLOCK(255, 0, 26831, "Structure Block", "STRUCTURE_BLOCK"), STRUCTURE_VOID(217, 0, 30806, "Structure Void", "STRUCTURE_VOID"), SUGAR(353, 0, 30638, "Sugar", ""), @@ -1468,7 +1491,7 @@ public static enum CMIMaterial { WATER(8, 0, 24998, "Flowing Water", "FLOWING_WATER"), WATER_BUCKET(326, 0, 8802, "Water Bucket", ""), WET_SPONGE(19, 1, 9043, "Wet Sponge", ""), - WHEAT(59, 0, 27709, "Crops", ""), + WHEAT(296, 0, 27709, "Wheat", ""), WHEAT_SEEDS(295, 0, 28742, "Wheat Seeds", "SEEDS"), WHITE_BANNER(425, 15, 17562, "White Banner", ""), WHITE_BED(355, 0, 8185, "White Bed", "Bed"), @@ -1524,7 +1547,33 @@ public static enum CMIMaterial { LEGACY_GLOWING_REDSTON_ORE(74, 0, -1, "Glowing Redstone Ore", ""), LEGACY_SUGAR_CANE_BLOCK(83, -1, -1, "Sugar Cane Block", ""), LEGACY_RAW_FISH(349, 0, -1, "Raw Fish", ""), - LEGACY_SKULL(144, 0, -1, "Skull", ""); + LEGACY_SKULL(144, 0, -1, "Skull", ""), + +// LEGACY_SIGN_POST(63, -1, -1, "Sign Post", ""), +// LEGACY_REDSTONE_TORCH_OFF(75, -1, -1, "LEGACY_REDSTONE_TORCH_OFF", ""), +// LEGACY_CAKE_BLOCK(92, -1, -1, "LEGACY_CAKE_BLOCK", ""), +// LEGACY_DIODE_BLOCK_OFF(93, -1, -1, "LEGACY_DIODE_BLOCK_OFF", ""), +// LEGACY_DIODE_BLOCK_ON(94, -1, -1, "LEGACY_DIODE_BLOCK_ON", ""), +// LEGACY_BREWING_STAND(117, -1, -1, "LEGACY_BREWING_STAND", ""), +// LEGACY_CAULDRON(118, -1, -1, "LEGACY_CAULDRON", ""), +// LEGACY_REDSTONE_LAMP_ON(124, -1, -1, "LEGACY_REDSTONE_LAMP_ON", ""), +// LEGACY_WOOD_DOUBLE_STEP(125, -1, -1, "LEGACY_WOOD_DOUBLE_STEP", ""), +// LEGACY_FLOWER_POT(140, -1, -1, "LEGACY_FLOWER_POT", ""), +// LEGACY_REDSTONE_COMPARATOR_OFF(149, -1, -1, "LEGACY_REDSTONE_COMPARATOR_OFF", ""), +// LEGACY_REDSTONE_COMPARATOR_ON(150, -1, -1, "LEGACY_REDSTONE_COMPARATOR_ON", ""), +// LEGACY_STANDING_BANNER(176, -1, -1, "LEGACY_STANDING_BANNER", ""), +// LEGACY_WALL_BANNER(177, -1, -1, "LEGACY_WALL_BANNER", ""), +// LEGACY_DAYLIGHT_DETECTOR_INVERTED(178, -1, -1, "LEGACY_DAYLIGHT_DETECTOR_INVERTED", ""), +// LEGACY_DOUBLE_STONE_SLAB2(181, -1, -1, "LEGACY_DOUBLE_STONE_SLAB2", ""), +// LEGACY_SPRUCE_DOOR(193, -1, -1, "LEGACY_SPRUCE_DOOR", ""), +// LEGACY_BIRCH_DOOR(194, -1, -1, "LEGACY_BIRCH_DOOR", ""), +// LEGACY_JUNGLE_DOOR(195, -1, -1, "LEGACY_JUNGLE_DOOR", ""), +// LEGACY_ACACIA_DOOR(196, -1, -1, "LEGACY_ACACIA_DOOR", ""), +// LEGACY_DARK_OAK_DOOR(197, -1, -1, "LEGACY_DARK_OAK_DOOR", ""), +// LEGACY_PURPUR_DOUBLE_SLAB(204, -1, -1, "LEGACY_PURPUR_DOUBLE_SLAB", ""), +// LEGACY_COMMAND_REPEATING(210, -1, -1, "LEGACY_COMMAND_REPEATING", ""), +// LEGACY_COMMAND_CHAIN(211, -1, -1, "LEGACY_COMMAND_CHAIN", ""), + LEGACY_WHEAT(59, -1, -1, "Wheat Block", ""); private int legacyId; private int legacyData; @@ -1577,45 +1626,35 @@ public void updateMaterial() { } if (mat == null) { for (Material one : Material.class.getEnumConstants()) { - try { - String n1 = one.name().replace("LEGACY_", "").replace("_", ""); - String n2 = this.name().replace("_", ""); - if (!n1.equalsIgnoreCase(n2)) - continue; - mat = one; - } catch (StringIndexOutOfBoundsException e) { + if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.name().replace("_", ""))) continue; - } + mat = one; break; } } if (mat == null) { for (Material one : Material.class.getEnumConstants()) { - try { - if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.getName().replace(" ", ""))) - continue; - mat = one; - } catch (StringIndexOutOfBoundsException e) { + if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.getName().replace(" ", ""))) continue; - } + mat = one; break; } } if (mat == null && !this.getLegacyName().isEmpty()) { for (Material one : Material.class.getEnumConstants()) { - try { - if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.getLegacyName().replace(" ", "").replace("_", ""))) - continue; - mat = one; - } catch (StringIndexOutOfBoundsException e) { + if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.getLegacyName().replace(" ", "").replace("_", ""))) continue; - } + mat = one; break; } } } public ItemStack newItemStack() { + return newItemStack(1); + } + + public ItemStack newItemStack(int amount) { if (mat == null) { for (Material one : Material.class.getEnumConstants()) { if (one.getId() != this.getId()) @@ -1625,10 +1664,13 @@ public ItemStack newItemStack() { } } if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - return new ItemStack(mat == null ? Material.STONE : mat); + ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat); + stack.setAmount(amount); + return stack; } - return new ItemStack(mat == null ? Material.STONE : mat, 1, (short) this.getLegacyData()); - + ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat, 1, (short) this.getLegacyData()); + stack.setAmount(amount); + return stack; } @Deprecated @@ -1645,7 +1687,7 @@ public int getLegacyData() { public static CMIMaterial getRandom(CMIMaterial mat) { - List ls = new ArrayList<>(); + List ls = new ArrayList(); for (CMIMaterial one : CMIMaterial.values()) { if (one.getLegacyId() == -1) @@ -1801,7 +1843,14 @@ public static CMIMaterial get(ItemStack item) { } public static CMIMaterial get(Block block) { - CMIMaterial m = get(block.getType().getId(), block.getData()); + + byte data = block.getData(); + if (block.getState() instanceof Skull) { + Skull skull = (Skull) block.getState(); + data = (byte) skull.getSkullType().ordinal(); + } + + CMIMaterial m = get(block.getType().getId(), data); if (m == null) { CMIItemStack cm = byBukkitName.get(block.getType().toString().replace("_", "").toLowerCase()); if (cm != null) @@ -1822,11 +1871,9 @@ public static CMIMaterial get(int id, int data) { if (cm != null) mat = cm.getCMIType(); - if (mat == null) { - cm = byId.get(id); - if (cm != null) - mat = cm.getCMIType(); - } + cm = byId.get(id); + if (cm != null) + mat = cm.getCMIType(); if (mat == null) { for (CMIMaterial one : CMIMaterial.values()) { @@ -1836,14 +1883,6 @@ public static CMIMaterial get(int id, int data) { } } } - if (mat == null) { - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getLegacyId() == id) { - mat = one; - break; - } - } - } if (mat != null) { for (CMIMaterial one : CMIMaterial.values()) { if (one.getLegacyId() == mat.getLegacyId()) { @@ -1982,6 +2021,60 @@ public boolean isBed() { return false; } + public static boolean isPotion(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isPotion(); + } + + public boolean isPotion() { + switch (this) { + case POTION: + case AWKWARD_POTION: + case THICK_POTION: + case MUNDANE_POTION: + case REGENERATION_POTION: + case SWIFTNESS_POTION: + case FIRE_RESISTANCE_POTION: + case POISON_POTION: + case HEALING_POTION: + case NIGHT_VISION_POTION: + case WEAKNESS_POTION: + case STRENGTH_POTION: + case SLOWNESS_POTION: + case HARMING_POTION: + case WATER_BREATHING_POTION: + case INVISIBILITY_POTION: + case REGENERATION_POTION2: + case SWIFTNESS_POTION2: + case POISON_POTION2: + case HEALING_POTION2: + case STRENGTH_POTION2: + case LEAPING_POTION2: + case HARMING_POTION2: + case REGENERATION_POTION3: + case SWIFTNESS_POTION3: + case FIRE_RESISTANCE_POTION3: + case POISON_POTION3: + case NIGHT_VISION_POTION2: + case WEAKNESS_POTION2: + case STRENGTH_POTION3: + case SLOWNESS_POTION2: + case LEAPING_POTION3: + case WATER_BREATHING_POTION2: + case INVISIBILITY_POTION2: + case REGENERATION_POTION4: + case SWIFTNESS_POTION4: + case POISON_POTION4: + case STRENGTH_POTION4: + return true; + default: + break; + } + return false; + } + public static boolean isBoat(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2137,6 +2230,27 @@ public boolean isShulkerBox() { case RED_SHULKER_BOX: case WHITE_SHULKER_BOX: case YELLOW_SHULKER_BOX: + case SHULKER_BOX: + return true; + default: + break; + } + return false; + } + + public static boolean isLeatherArmor(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isLeatherArmor(); + } + + public boolean isLeatherArmor() { + switch (this) { + case LEATHER_BOOTS: + case LEATHER_CHESTPLATE: + case LEATHER_HELMET: + case LEATHER_LEGGINGS: return true; default: break; @@ -2174,9 +2288,16 @@ public boolean isDoor() { switch (this) { case OAK_DOOR: case IRON_DOOR: +// case SPRUCE_DOOR_ITEM: +// case BIRCH_DOOR_ITEM: +// case JUNGLE_DOOR_ITEM: +// case ACACIA_DOOR_ITEM: +// case DARK_OAK_DOOR_ITEM: +// case WOODEN_DOOR: case ACACIA_DOOR: case BIRCH_DOOR: case DARK_OAK_DOOR: +// case IRON_DOOR_BLOCK: case JUNGLE_DOOR: case SPRUCE_DOOR: return true; @@ -2245,6 +2366,10 @@ public boolean isSkull() { case WITHER_SKELETON_SKULL: case SKELETON_WALL_SKULL: case WITHER_SKELETON_WALL_SKULL: + case PLAYER_HEAD: + case CREEPER_HEAD: + case DRAGON_HEAD: + case ZOMBIE_HEAD: return true; default: break; @@ -2295,10 +2420,20 @@ public boolean isSlab() { switch (this) { case ACACIA_SLAB: case DARK_OAK_SLAB: +// case DOUBLE_STONE_SLAB2: +// case PURPUR_DOUBLE_SLAB: case BIRCH_SLAB: case BRICK_SLAB: case COBBLESTONE_SLAB: case DARK_PRISMARINE_SLAB: +// case DOUBLE_STONE_SLAB: +// case DOUBLE_SANDSTONE_SLAB: +// case DOUBLE_WOODEN_SLAB: +// case DOUBLE_COBBLESTONE_SLAB: +// case DOUBLE_BRICK_SLAB: +// case DOUBLE_STONE_BRICK_SLAB: +// case DOUBLE_NETHER_BRICK_SLAB: +// case DOUBLE_QUARTZ_SLAB: case JUNGLE_SLAB: case NETHER_BRICK_SLAB: case OAK_SLAB: @@ -2320,12 +2455,76 @@ public boolean isSlab() { } public static SlabType getSlabType(Block block) { - return checkSlab(block); + if (!isSlab(block.getType())) + return SlabType.NOTSLAB; + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + if (block.getBlockData() instanceof org.bukkit.block.data.type.Slab) { + org.bukkit.block.data.type.Slab slab = (org.bukkit.block.data.type.Slab) block.getBlockData(); + switch (slab.getType()) { + case TOP: + return SlabType.TOP; + case BOTTOM: + return SlabType.BOTTOM; + case DOUBLE: + return SlabType.DOUBLE; + } + + } + return SlabType.NOTSLAB; + } + if (block.getType().name().contains("STEP")) { + switch (CMIMaterial.get(block).getLegacyId()) { + case 44: + switch (block.getData()) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + return SlabType.BOTTOM; + default: + return SlabType.DOUBLE; + } + case 126: + switch (block.getData()) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + return SlabType.BOTTOM; + default: + return SlabType.DOUBLE; + } + case 182: + switch (block.getData()) { + case 0: + return SlabType.BOTTOM; + default: + return SlabType.DOUBLE; + } + case 205: + switch (block.getData()) { + case 0: + return SlabType.BOTTOM; + default: + return SlabType.DOUBLE; + } + } + } + + return SlabType.NOTSLAB; } public boolean equals(Material mat) { - if (getMaterial() == null) + if (getMaterial() == null) { return false; + } return this.getMaterial().equals(mat); } @@ -2339,7 +2538,7 @@ public void setLegacyName(String legacyName) { public String getBukkitName() { if (bukkitName == null) - bukkitName = getMaterial().name(); + bukkitName = getMaterial() == null ? "N/A" : getMaterial().name(); return bukkitName; } @@ -2358,71 +2557,6 @@ public void setMojangName(String mojangName) { } } - private static SlabType checkSlab(Block block) { - if (!CMIMaterial.isSlab(block.getType())) - return SlabType.NOTSLAB; - - if (version.isEqualOrHigher(Version.v1_13_R1)) { - if (block.getBlockData() instanceof org.bukkit.block.data.type.Slab) { - org.bukkit.block.data.type.Slab slab = (org.bukkit.block.data.type.Slab) block.getBlockData(); - org.bukkit.block.data.type.Slab.Type t = slab.getType(); - if (t.equals(org.bukkit.block.data.type.Slab.Type.TOP)) - return SlabType.TOP; - if (t.equals(org.bukkit.block.data.type.Slab.Type.BOTTOM)) - return SlabType.BOTTOM; - if (t.equals(org.bukkit.block.data.type.Slab.Type.DOUBLE)) - return SlabType.DOUBLE; - } - return SlabType.NOTSLAB; - } - if (block.getType().name().contains("STEP")) { - switch (CMIMaterial.get(block).getLegacyId()) { - case 44: - switch (block.getData()) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - return SlabType.BOTTOM; - default: - return SlabType.DOUBLE; - } - case 126: - switch (block.getData()) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - return SlabType.BOTTOM; - default: - return SlabType.DOUBLE; - } - case 182: - switch (block.getData()) { - case 0: - return SlabType.BOTTOM; - default: - return SlabType.DOUBLE; - } - case 205: - switch (block.getData()) { - case 0: - return SlabType.BOTTOM; - default: - return SlabType.DOUBLE; - } - } - } - - return SlabType.NOTSLAB; - } - public enum SlabType { TOP, BOTTOM, diff --git a/src/com/bekvon/bukkit/residence/CMILib/ItemReflection.java b/src/cmiLib/ItemReflection.java similarity index 93% rename from src/com/bekvon/bukkit/residence/CMILib/ItemReflection.java rename to src/cmiLib/ItemReflection.java index 237b8371c..080027848 100644 --- a/src/com/bekvon/bukkit/residence/CMILib/ItemReflection.java +++ b/src/cmiLib/ItemReflection.java @@ -2,7 +2,7 @@ * Copyright (C) 2017 Zrips */ -package com.bekvon.bukkit.residence.CMILib; +package cmiLib; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -12,7 +12,8 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.utils.VersionChecker.Version; +import cmiLib.VersionChecker.Version; + public class ItemReflection { @@ -109,9 +110,7 @@ public static String getItemRealName(ItemStack item) { ff = "a"; break; case v1_11_R1: - case v1_11_R2: case v1_12_R1: - case v1_12_R2: ff = "b"; break; case v1_13_R2: diff --git a/src/cmiLib/RawMessage.java b/src/cmiLib/RawMessage.java new file mode 100644 index 000000000..499cda0d1 --- /dev/null +++ b/src/cmiLib/RawMessage.java @@ -0,0 +1,589 @@ +package cmiLib; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map.Entry; +import java.util.Random; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; + +import cmiLib.VersionChecker.Version; + + +public class RawMessage { + + List parts = new ArrayList(); + List cleanParts = new ArrayList(); + String colorReplacerPlaceholder = "%#%"; + + private String unfinished = ""; + private String unfinishedClean = ""; + + private String combined = ""; + String combinedClean = ""; + private boolean breakLine = true; + +// private boolean colorizeEntireWithLast = true; + + public void clear() { + parts = new ArrayList(); + cleanParts = new ArrayList(); + combined = ""; + combinedClean = ""; + } + + public RawMessage add(String text) { + return add(text, null, null, null, null); + } + + public RawMessage add(String text, String hoverText) { + return add(text, hoverText, null, null, null); + } + + public RawMessage add(String text, List hoverText) { + + String hover = ""; + if (hoverText != null) + for (String one : hoverText) { + if (!hover.isEmpty()) + hover += "\n"; + hover += one; + } + + return add(text, hover.isEmpty() ? null : hover, null, null, null); + } + + public RawMessage add(String text, String hoverText, String command) { + return add(text, hoverText, command, null, null); + } + + public RawMessage add(String text, String hoverText, String command, String suggestion) { + return add(text, hoverText, command, suggestion, null); + } + + Set formats = new HashSet(); + CMIChatColor lastColor = null; + + Set savedFormats = new HashSet(); + CMIChatColor savedLastColor = null; + + CMIChatColor firstBlockColor = null; + + private String makeMessyText(String text) { + text = CMIChatColor.deColorize(text); + List splited = new ArrayList(); + + if (text.contains(" ")) { + for (String one : text.split(" ")) { + if (this.isBreakLine() && one.contains("\\n")) { + String[] split = one.split("\\\\n"); + for (int i = 0; i < split.length; i++) { + if (i < split.length - 1) { + splited.add(split[i] + "\n"); + } else { + splited.add(split[i]); + } + } + } else { + splited.add(one); + } + splited.add(" "); + } + if (text.length() > 1 && text.endsWith(" ")) + splited.add(" "); + if (text.startsWith(" ")) + splited.add(" "); + + if (!splited.isEmpty()) + splited.remove(splited.size() - 1); + } else + splited.add(text); + + String newText = ""; + + for (String one : splited) { + + String colorString = ""; + if (lastColor != null) + colorString += lastColor.getColorCode(); + for (CMIChatColor oneC : formats) { + colorString = colorString + oneC.getColorCode(); + } + + if (one.contains("&")) { + Pattern pattern = Pattern.compile("(&[0123456789abcdefklmnor])"); + Matcher match = pattern.matcher(one); + while (match.find()) { + String color = CMIChatColor.getLastColors(match.group(0)); + CMIChatColor c = CMIChatColor.getColor(color); + if (c != null) { + if (c.isFormat()) { + formats.add(c); + } else if (c.isReset()) { + formats.clear(); + lastColor = null; + firstBlockColor = null; + } else if (c.isColor()) { + lastColor = c; + formats.clear(); + firstBlockColor = c; + } + + if (c.isFormat()) { + } else if (c.isReset()) { + } else if (c.isColor()) { + String form = ""; + for (CMIChatColor oneC : formats) { + form += oneC.getColorCode(); + } + one = one.replace(c.getColorCode(), c.getColorCode() + form); + } + + } + } + } + + newText += colorString + one; + } + return newText; + } + + public RawMessage addText(String text) { + if (text == null) + return this; + if (breakLine) { + Random rand = new Random(); + String breakLine = rand.nextDouble() + "breakLine"; + text = text.replace("\\n", breakLine); + text = text.replace("\\", "\\\\"); + text = text.replace(breakLine, "\\n"); + } + + text = text.replace("\n", "\\n"); + unfinishedClean = text; + unfinished += "\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(colorReplacerPlaceholder, "&") + "\""; + return this; + } + + public RawMessage addHoverText(List hoverText) { + String hover = ""; + if (hoverText != null) + for (String one : hoverText) { + if (!hover.isEmpty()) + hover += "\n"; + hover += one; + } + return addHoverText(hover); + } + + public RawMessage addHoverText(String hoverText) { + if (hoverText != null && !hoverText.isEmpty()) { + hoverText = hoverText.replace(" \n", " \\n"); + hoverText = hoverText.replace("\n", "\\n"); + unfinished += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText) + "\"}]}}"; + } + return this; + } + + public RawMessage addCommand(String command) { + if (command != null) { + if (!command.startsWith("/")) + command = "/" + command; + unfinished += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}"; + } + return this; + } + + public RawMessage addSuggestion(String suggestion) { + if (suggestion != null) + unfinished += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}"; + return this; + } + + public RawMessage addUrl(String url) { + if (url != null) { + if (!url.toLowerCase().startsWith("http://") || !url.toLowerCase().startsWith("https://")) + url = "http://" + url; + unfinished += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}"; + } + return this; + } + + public RawMessage build() { + if (unfinished.isEmpty()) + return this; + unfinished = unfinished.startsWith("{") ? unfinished : "{" + unfinished + "}"; + parts.add(unfinished); + cleanParts.add(ChatColor.translateAlternateColorCodes('&', unfinishedClean)); + + unfinished = ""; + unfinishedClean = ""; + + return this; + } + + public RawMessage add(String text, String hoverText, String command, String suggestion, String url) { + + if (text == null) + return this; + + if (breakLine) { + Random rand = new Random(); + String breakLine = rand.nextDouble() + "breakLine"; + text = text.replace("\\n", breakLine); + text = text.replace("\\", "\\\\"); + text = text.replace(breakLine, "\\n"); + } + + text = text.replace("\"", "\\\""); + + String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(colorReplacerPlaceholder, "&") + "\""; + +// if (firstBlockColor != null) { +// f += ",\"color\":\"" + firstBlockColor.name().toLowerCase() + "\""; +// } + + if (hoverText != null && !hoverText.isEmpty()) { + hoverText = hoverText.replace(" \n", " \\n"); + hoverText = hoverText.replace("\n", "\\n"); + f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText) + "\"}]}}"; + } + +// if (suggestion != null && command != null) { +// f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"\"}"; +// +// } else { + + if (suggestion != null) + f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}"; + if (url != null) { + if (!url.toLowerCase().startsWith("http://") || !url.toLowerCase().startsWith("https://")) + url = "http://" + url; + f += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}"; + } + + if (command != null) { + if (!command.startsWith("/")) + command = "/" + command; + f += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}"; + } +// } + + f += "}"; + + parts.add(f); + cleanParts.add(ChatColor.translateAlternateColorCodes('&', text)); +// firstBlockColor = null; + return this; + } + + public RawMessage addUrl(String text, String url) { + return addUrl(text, url, null); + } + + public RawMessage addUrl(String text, String url, String hoverText) { + if (text == null) + return this; + + text = text.replace("\\", "\\\\"); + text = text.replace("\"", "\\\""); + String f = "{\"text\":\"" + CMIChatColor.colorize(text).replace(colorReplacerPlaceholder, "&") + "\""; + if (firstBlockColor != null) { + f += ",\"color\":\"" + firstBlockColor.name().toLowerCase() + "\""; + } + if (hoverText != null && !hoverText.isEmpty()) { + hoverText = hoverText.startsWith(" ") ? hoverText.substring(1) : hoverText; + f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText).replace( + colorReplacerPlaceholder, "&") + "\"}]}}"; + } + + url = url.endsWith(" ") ? url.substring(0, url.length() - 1) : url; + url = url.startsWith(" ") ? url.substring(1) : url; + + if (url != null && !url.isEmpty()) { + if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://")) + url = "http://" + url; + f += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}"; + } + f += "}"; + parts.add(f); + cleanParts.add(ChatColor.translateAlternateColorCodes('&', text)); +// firstBlockColor = null; + + return this; + } + + public RawMessage addItem(String text, ItemStack item, List extraLore, String command, String suggestion) { + if (text == null) + return this; + if (item == null) + return this; + + item = item.clone(); + + text = makeMessyText(text); + + String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', text) + "\""; + + CMIItemStack cm = ItemManager.getItem(item); + + String ItemDisplayName = "&r&f" + cm.getDisplayName(); + String Enchants = getItemEnchants(item); + + if (!Enchants.isEmpty()) { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + Enchants = ",Enchantments:" + Enchants; + } else { + Enchants = ",ench:" + Enchants; + } + } + + List Lore = new ArrayList(); + +// if (CMIMaterial.isShulkerBox(item.getType())) { +// List items = CMI.getInstance().getShulkerBoxManager().getShulkerBoxContents(item); +// for (ItemStack one : items) { +// if (one == null) +// continue; +// CMIItemStack cim = ItemManager.getItem(one); +// if (cim == null) +// continue; +// Lore.add(CMIChatColor.translateAlternateColorCodes("&7" + cim.getRealName() + " x" + cim.getAmount())); +// } +// } + + if (item.hasItemMeta() && item.getItemMeta().hasLore()) + Lore.addAll(item.getItemMeta().getLore()); + if (extraLore != null) + Lore.addAll(extraLore); + + String itemName = cm.getBukkitName(); + + if (cm.getMojangName() != null) + itemName = cm.getMojangName(); + + if (itemName.equalsIgnoreCase("Air")) { + itemName = "Stone"; + ItemDisplayName = "Hand"; + } + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + itemName = org.bukkit.NamespacedKey.minecraft(cm.getType().name().toLowerCase()).getKey(); + } + + String loreS = convertLore(Lore); + if (!Lore.isEmpty()) { + loreS = ",Lore:[" + loreS + "]"; + } + f += ",\"hoverEvent\":{\"action\":\"show_item\",\"value\":\"{id:" + itemName + ",Count:1b,tag:{display:{Name:\\\"" + CMIChatColor.translateAlternateColorCodes(ItemDisplayName) + "\\\"" + loreS + "}" + + Enchants + "}}\"}"; + + if (suggestion != null) + f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + suggestion + "\"}"; + if (command != null) { + if (!command.startsWith("/")) + command = "/" + command; + f += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}"; + } + f += "}"; + parts.add(f); + return this; + } + + private static String getItemEnchants(ItemStack item) { + String Enchants = ""; + if (item.getEnchantments().isEmpty()) + return Enchants; + + Enchants = ""; + for (Entry one : item.getEnchantments().entrySet()) { + if (!Enchants.isEmpty()) + Enchants += ","; + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + Enchants += "{id:" + one.getKey().getKey().getKey() + ",lvl:" + one.getValue() + "s}"; + else { + try { + Enchants += "{id:" + String.valueOf(one.getKey().getClass().getMethod("getId").invoke(one.getKey())) + ",lvl:" + one.getValue() + "}"; + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { + e.printStackTrace(); + } + } + } + if (!Enchants.isEmpty()) { + Enchants = "[" + Enchants; + Enchants += "]"; + } + return Enchants; + } + + private static String convertLore(List lore) { + String lr = ""; + for (String one : lore) { + if (!lr.isEmpty()) + lr += ","; + lr += "\\\"" + one + "\\\""; + } + return lr; + } + + public List softCombine() { + List ls = new ArrayList(); + String f = ""; + for (String part : parts) { + if (f.isEmpty()) + f = "[\"\","; + else { + if (f.length() > 30000) { + ls.add(f + "]"); + f = "[\"\"," + part; + continue; + } + f += ","; + } + f += part; + } + if (!f.isEmpty()) + f += "]"; + ls.add(f); + return ls; + } + + public RawMessage combine() { + String f = ""; + for (String part : parts) { + if (f.isEmpty()) + f = "[\"\","; + else + f += ","; + f += part; + } + if (!f.isEmpty()) + f += "]"; + combined = f; + return this; + } + + public RawMessage combineClean() { + String f = ""; + for (String part : cleanParts) { + f += part.replace("\\\"", "\""); + } + combinedClean = f; + return this; + } + + public RawMessage show(Player player) { + return show(player, true); + } + + public RawMessage show(Player player, boolean softCombined) { + if (player == null) + return this; + if (combined.isEmpty()) + combine(); + + if (!player.isOnline()) + return this; + +// CMI.getInstance().d("|" + combined + "|"); + + if (softCombined) { + for (String one : softCombine()) { + if (one.isEmpty()) + continue; +// CMI.getInstance().d("=" + one + "="); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + one); + } + } else { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + combined); + } + + return this; + } + + public int getFinalLenght() { + String f = ""; + for (String part : parts) { + if (f.isEmpty()) + f = "[\"\","; + else + f += ","; + f += part; + } + if (!f.isEmpty()) + f += "]"; + return f.length(); + } + + public RawMessage show(CommandSender sender) { + if (combined.isEmpty()) + combine(); + if (sender instanceof Player) + show((Player) sender); + else + sender.sendMessage(this.combineClean().combinedClean); + return this; + } + + public String getRaw() { + if (combined.isEmpty()) + combine(); + return combined; + } + + public String getShortRaw() { + String f = ""; + for (String part : parts) { + if (!f.isEmpty()) + f += ","; + f += part; + } + return f; + } + + public boolean isBreakLine() { + return breakLine; + } + + public void setBreakLine(boolean breakLine) { + this.breakLine = breakLine; + } + + public void setCombined(String combined) { + this.combined = combined; + } + +// Set formats = new HashSet(); +// CMIChatColor lastColor = null; +// +// Set savedFormats = new HashSet(); +// CMIChatColor savedLastColor = null; + public void resetColorFormats() { + formats.clear(); + lastColor = null; + } + + public void saveColorFormats() { + savedFormats.clear(); + savedFormats.addAll(formats); + savedLastColor = lastColor; + } + + public void loadColorFormats() { + formats.clear(); + formats.addAll(savedFormats); + lastColor = savedLastColor; + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/cmiLib/VersionChecker.java similarity index 61% rename from src/com/bekvon/bukkit/residence/utils/VersionChecker.java rename to src/cmiLib/VersionChecker.java index 826eb0a10..9202433db 100644 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ b/src/cmiLib/VersionChecker.java @@ -1,4 +1,4 @@ -package com.bekvon.bukkit.residence.utils; +package cmiLib; import java.io.BufferedReader; import java.io.InputStreamReader; @@ -15,48 +15,81 @@ public class VersionChecker { Residence plugin; - private int resource = 11480; + private static int resource = 11480; public VersionChecker(Residence plugin) { this.plugin = plugin; - version = getCurrent(); + version = Version.getCurrent(); } - private static Version version = Version.v1_12_R1; + private static Version version = Version.v1_11_R1; public Version getVersion() { + return Version.getCurrent(); + } + + public Integer convertVersion(String v) { + v = v.replaceAll("[^\\d.]", ""); + Integer version = 0; + if (v.contains(".")) { + String lVersion = ""; + for (String one : v.split("\\.")) { + String s = one; + if (s.length() == 1) + s = "0" + s; + lVersion += s; + } + + try { + version = Integer.parseInt(lVersion); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + try { + version = Integer.parseInt(v); + } catch (Exception e) { + e.printStackTrace(); + } + } return version; } public enum Version { - v1_7_R1(171, "v1_7"), - v1_7_R2(172, "v1_7"), - v1_7_R3(173, "v1_7"), - v1_7_R4(174, "v1_7"), - v1_8_R1(181, "v1_8"), - v1_8_R2(182, "v1_8"), - v1_8_R3(183, "v1_8"), - v1_9_R1(191, "v1_9"), - v1_9_R2(192, "v1_9"), - v1_10_R1(1101, "v1_10"), - v1_11_R1(1111, "v1_11"), - v1_11_R2(1112, "v1_11"), - v1_12_R1(1121, "v1_12"), - v1_12_R2(1122, "v1_12"), - v1_13_R1(1131, "v1_13"), - v1_13_R2(1132, "v1_13"), - v1_13_R3(1133, "v1_13"), - v1_14_R1(1141, "v1_14"), - v1_14_R2(1142, "v1_14"), - v1_15_R1(1151, "v1_15"), - v1_15_R2(1152, "v1_15"); + v1_7_R1, + v1_7_R2, + v1_7_R3, + v1_7_R4, + v1_8_R1, + v1_8_R2, + v1_8_R3, + v1_9_R1, + v1_9_R2, + v1_10_R1, + v1_11_R1, + v1_12_R1, + v1_13_R1, + v1_13_R2, + v1_13_R3, + v1_14_R1, + v1_14_R2, + v1_15_R1, + v1_15_R2, + v1_16_R1, + v1_16_R2, + v1_17_R1, + v1_17_R2; private Integer value; private String shortVersion; + private static Version current = null; - Version(Integer value, String ShortVersion) { - this.value = value; - shortVersion = ShortVersion; + Version() { + try { + this.value = Integer.valueOf(this.name().replaceAll("[^\\d.]", "")); + } catch (Exception e) { + } + shortVersion = this.name().substring(0, this.name().length() - 3); } public Integer getValue() { @@ -68,13 +101,17 @@ public String getShortVersion() { } public static Version getCurrent() { + if (current != null) + return current; String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); String vv = v[v.length - 1]; for (Version one : values()) { - if (one.name().equalsIgnoreCase(vv)) - return one; + if (one.name().equalsIgnoreCase(vv)) { + current = one; + break; + } } - return null; + return current; } public boolean isLower(Version version) { @@ -97,6 +134,10 @@ public static boolean isCurrentEqualOrHigher(Version v) { return version.getValue() >= v.getValue(); } + public static boolean isCurrentHigher(Version v) { + return version.getValue() > v.getValue(); + } + public static boolean isCurrentLower(Version v) { return version.getValue() < v.getValue(); } @@ -106,33 +147,6 @@ public static boolean isCurrentEqualOrLower(Version v) { } } - public static Version getCurrent() { - String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); - String vv = v[v.length - 1]; - for (Version one : Version.values()) { - if (one.name().equalsIgnoreCase(vv)) { - return one; - } - } - return null; - } - - public boolean isLower(Version version) { - return this.version.getValue() < version.getValue(); - } - - public boolean isLowerEquals(Version version) { - return this.version.getValue() <= version.getValue(); - } - - public boolean isHigher(Version version) { - return this.version.getValue() > version.getValue(); - } - - public boolean isHigherEquals(Version version) { - return this.version.getValue() >= version.getValue(); - } - public void VersionCheck(final Player player) { if (!plugin.getConfigManager().versionCheck()) return; @@ -153,7 +167,7 @@ public void run() { if (player != null) player.sendMessage(one); else - plugin.consoleMessage(one); + Bukkit.getConsoleSender().sendMessage(one); } }); } @@ -165,10 +179,10 @@ public String getNewVersion() { con.setRequestMethod("POST"); con.getOutputStream().write(("key=98BE0FE67F88AB82B4C197FAF1DC3B69206EFDCC4D3B80FC83A00037510B99B4&resource=" + resource).getBytes("UTF-8")); String version = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine(); - if (version.length() <= 9) + if (version.length() <= 7) return version; } catch (Exception ex) { - plugin.consoleMessage(ChatColor.RED + "Failed to check for " + plugin.getDescription().getName() + " update on spigot web page."); + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Failed to check for " + plugin.getDescription().getName() + " update on spigot web page."); } return null; } diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java index d3da8c9ac..321df4e09 100644 --- a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java +++ b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java @@ -12,7 +12,8 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.utils.VersionChecker.Version; + +import cmiLib.VersionChecker.Version; public class BossBarManager { @@ -23,7 +24,7 @@ public BossBarManager(Residence plugin) { } public synchronized void updateBossBars(ResidencePlayer player) { - if (plugin.getVersionChecker().getVersion().isLower(Version.v1_9_R1)) + if (Version.isCurrentLower(Version.v1_9_R1)) return; if (player == null) return; @@ -34,7 +35,7 @@ public synchronized void updateBossBars(ResidencePlayer player) { } public synchronized void Show(final BossBarInfo barInfo) { - if (plugin.getVersionChecker().getVersion().isLower(Version.v1_9_R1)) + if (Version.isCurrentLower(Version.v1_9_R1)) return; final ResidencePlayer user = barInfo.getUser(); diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 66a11d9d1..825b5952b 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -27,13 +27,13 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.CMILib.CMIEffectManager.CMIParticle; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; + +import cmiLib.CMIEffectManager.CMIParticle; +import cmiLib.ItemManager.CMIMaterial; public class ConfigManager { protected String defaultGroup; diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 3060d7b0c..c96c64995 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -47,8 +47,6 @@ import org.kingdoms.manager.game.GameManagement; import com.bekvon.bukkit.residence.BossBar.BossBarManager; -import com.bekvon.bukkit.residence.CMILib.ItemManager; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.Placeholders.Placeholder; import com.bekvon.bukkit.residence.Placeholders.PlaceholderAPIHook; import com.bekvon.bukkit.residence.Siege.ResidenceSiegeListener; @@ -112,15 +110,11 @@ import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; -import com.bekvon.bukkit.residence.utils.ActionBar; import com.bekvon.bukkit.residence.utils.CrackShot; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; -import com.bekvon.bukkit.residence.utils.RawMessage; import com.bekvon.bukkit.residence.utils.Sorting; import com.bekvon.bukkit.residence.utils.TabComplete; -import com.bekvon.bukkit.residence.utils.VersionChecker; -import com.bekvon.bukkit.residence.utils.VersionChecker.Version; import com.bekvon.bukkit.residence.utils.YmlMaker; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; //import com.bekvon.bukkit.residence.towns.TownManager; @@ -132,6 +126,12 @@ import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import cmiLib.ActionBarTitleMessages; +import cmiLib.ItemManager; +import cmiLib.RawMessage; +import cmiLib.VersionChecker; +import cmiLib.ItemManager.CMIMaterial; +import cmiLib.VersionChecker.Version; import cosine.boseconomy.BOSEconomy; import fr.crafter.tickleman.realeconomy.RealEconomy; import fr.crafter.tickleman.realplugin.RealPlugin; @@ -186,7 +186,7 @@ public class Residence extends JavaPlugin { protected RandomTp RandomTpManager; protected DynMapManager DynManager; protected Sorting SortingManager; - protected ActionBar ABManager; + protected ActionBarTitleMessages ABManager; protected AutoSelection AutoSelectionManager; protected WESchematicManager SchematicManager; private InformationPager InformationPagerManager; @@ -225,7 +225,6 @@ public class Residence extends JavaPlugin { private String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; private String TempUserUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"; - private ABInterface ab; private NMS nms; private LWC lwc; @@ -324,10 +323,6 @@ public NMS getNms() { return nms; } - public ABInterface getAB() { - return ab; - } - private Runnable doHeals = new Runnable() { @Override public void run() { @@ -548,8 +543,6 @@ public void onEnable() { return; } - ab = new ActionBar(this); - gmanager = new PermissionManager(this); imanager = new WorldItemManager(this); wmanager = new WorldFlagManager(this); @@ -738,15 +731,15 @@ public void run() { // pm.registerEvents(slistener, this); // 1.8 event - if (getVersionChecker().isHigherEquals(Version.v1_8_R1)) + if (Version.isCurrentEqualOrHigher(Version.v1_8_R1)) pm.registerEvents(new v1_8Events(), this); // 1.9 event - if (getVersionChecker().isHigherEquals(Version.v1_9_R1)) + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) pm.registerEvents(new v1_9Events(), this); // 1.10 event - if (getVersionChecker().isHigherEquals(Version.v1_10_R1)) + if (Version.isCurrentEqualOrHigher(Version.v1_10_R1)) pm.registerEvents(new v1_10Events(), this); firstenable = false; @@ -884,7 +877,7 @@ private void setWorldEdit() { SchematicManager = new Schematics7Manager(this); } if (smanager == null) - smanager = new SelectionManager(server, this); + smanager = new SelectionManager(server, this); wepid = CMIMaterial.get(this.getWorldEdit().getConfig().getInt("wand-item")); Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit"); } else { diff --git a/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeListener.java b/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeListener.java index e3ad30496..c718a6cdb 100644 --- a/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeListener.java +++ b/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeListener.java @@ -12,13 +12,11 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceSiegeListener implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void ResidenceSiegePreStartEvent(com.bekvon.bukkit.residence.event.ResidenceSiegePreStartEvent event) { - Debug.D("ResidenceSiegePreStartEvent"); ClaimedResidence res = event.getRes(); Player player = event.getAttacker(); @@ -88,7 +86,6 @@ public void ResidenceSiegeStartEvent(com.bekvon.bukkit.residence.event.Residence @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void ResidenceSiegeEndEvent(com.bekvon.bukkit.residence.event.ResidenceSiegeEndEvent event) { - Debug.D("ResidenceSiegeEndEvent"); event.getRes().endSiege(); } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java index b3e27f424..d60622269 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java @@ -34,11 +34,11 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; +import cmiLib.CMIEffect; +import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_10_R1.EnumParticle; import net.minecraft.server.v1_10_R1.Packet; import net.minecraft.server.v1_10_R1.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java index c28160e7f..43342ee16 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java @@ -36,11 +36,11 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; +import cmiLib.CMIEffect; +import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_11_R1.EnumParticle; import net.minecraft.server.v1_11_R1.Packet; import net.minecraft.server.v1_11_R1.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java index d190473d9..5a3a697ab 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java @@ -37,11 +37,11 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; +import cmiLib.CMIEffect; +import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_12_R1.EnumParticle; import net.minecraft.server.v1_12_R1.Packet; import net.minecraft.server.v1_12_R1.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java index 339da4491..999b7163d 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java @@ -44,12 +44,12 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; -import com.bekvon.bukkit.residence.CMILib.CMIEffectManager.CMIParticle; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; +import cmiLib.CMIEffect; +import cmiLib.CMIEffectManager.CMIParticle; +import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_13_R1.Packet; import net.minecraft.server.v1_13_R1.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java new file mode 100644 index 000000000..ea7747527 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java @@ -0,0 +1,250 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle.DustOptions; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_13_R2.CraftParticle; +import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cod; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Dolphin; +import org.bukkit.entity.Donkey; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Llama; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Parrot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.PolarBear; +import org.bukkit.entity.PufferFish; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Salmon; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.TropicalFish; +import org.bukkit.entity.Turtle; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.NMS; + +import cmiLib.CMIEffect; +import cmiLib.CMIEffectManager.CMIParticle; +import cmiLib.ItemManager.CMIMaterial; +import net.minecraft.server.v1_13_R2.Packet; +import net.minecraft.server.v1_13_R2.PacketPlayOutWorldParticles; + +public class v1_13_R2 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof Llama || + ent instanceof PolarBear || + ent instanceof Parrot || + ent instanceof Donkey || + ent instanceof Cod || + ent instanceof Salmon || + ent instanceof PufferFish || + ent instanceof TropicalFish || + ent instanceof Turtle || + ent instanceof Dolphin); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isArmorStandMaterial(Material material) { + return material == Material.ARMOR_STAND; + } + + @SuppressWarnings("deprecation") + @Override + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { + case LEVER: + case PISTON: + case STICKY_PISTON: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); + } + } + + @Override + public boolean isEmptyBlock(Block block) { + switch (CMIMaterial.get(block)) { + case COBWEB: + case STRING: + case WALL_SIGN: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; + return false; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public void addDefaultFlags(Map matUseFlagList) { + /* 1.8 Fence Gates */ + matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); + matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); + + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); + + /* 1.11 Shulker Box */ + matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.BLUE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.BROWN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.CYAN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.GRAY_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.GREEN_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.LIGHT_BLUE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.LIME_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.MAGENTA_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.ORANGE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container); + matUseFlagList.put(CMIMaterial.LIGHT_GRAY_SHULKER_BOX.getMaterial(), Flags.container); + matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); + + /* 1.13 Shulker Box */ + + matUseFlagList.put(CMIMaterial.OAK_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.IRON_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.OAK_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.ACACIA_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.BIRCH_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.DARK_OAK_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.JUNGLE_DOOR.getMaterial(), Flags.door); + matUseFlagList.put(CMIMaterial.SPRUCE_DOOR.getMaterial(), Flags.door); + + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + + CMIParticle effect = ef.getParticle(); + if (effect == null) + return; + if (!effect.isParticle()) { + return; + } + + org.bukkit.Particle particle = effect.getParticle(); + + if (particle == null) + return; + +// CMI.getInstance().d(particle, effect.name()); + + DustOptions dd = null; + if (particle.equals(org.bukkit.Particle.REDSTONE)) + dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); + + Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), + (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); + + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 2d3ecc291..41f0f56cb 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -31,11 +31,11 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; +import cmiLib.CMIEffect; +import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; public class v1_7_Couldron implements NMS { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java index 518e171c1..6076837f3 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java @@ -31,11 +31,11 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; +import cmiLib.CMIEffect; +import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; public class v1_7_R4 implements NMS { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java index 5eef13ae4..114eb09b2 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java @@ -32,11 +32,11 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; +import cmiLib.CMIEffect; +import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_8_R1.EnumParticle; import net.minecraft.server.v1_8_R1.Packet; import net.minecraft.server.v1_8_R1.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java index 34fbff079..51becccfe 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java @@ -32,11 +32,11 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; +import cmiLib.CMIEffect; +import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_8_R2.EnumParticle; import net.minecraft.server.v1_8_R2.Packet; import net.minecraft.server.v1_8_R2.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java index c47d68915..6c4dbf210 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java @@ -32,11 +32,11 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; +import cmiLib.CMIEffect; +import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_8_R3.EnumParticle; import net.minecraft.server.v1_8_R3.Packet; import net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java index 18cd4d6b7..5d4c2902a 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java @@ -33,11 +33,11 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; +import cmiLib.CMIEffect; +import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_9_R1.EnumParticle; import net.minecraft.server.v1_9_R1.Packet; import net.minecraft.server.v1_9_R1.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java index e3895b56d..150a4c2ef 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java @@ -33,11 +33,11 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; +import cmiLib.CMIEffect; +import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_9_R2.EnumParticle; import net.minecraft.server.v1_9_R2.Packet; import net.minecraft.server.v1_9_R2.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index f7434ce50..a8164b055 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -7,12 +7,13 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import cmiLib.ItemManager.CMIMaterial; + public class material implements cmd { @SuppressWarnings("deprecation") diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 6ff4461a9..4ff623266 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -14,7 +14,8 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.RawMessage; + +import cmiLib.RawMessage; public class remove implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 8aefaf8ea..b14c81e6e 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -25,7 +25,8 @@ import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.shopStuff.Vote; import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.RawMessage; + +import cmiLib.RawMessage; public class shop implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index 6c2cd3088..943395a17 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -7,12 +7,13 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import cmiLib.ItemManager.CMIMaterial; + public class tool implements cmd { @SuppressWarnings("deprecation") diff --git a/src/com/bekvon/bukkit/residence/containers/NMS.java b/src/com/bekvon/bukkit/residence/containers/NMS.java index 029ca6358..c39fc7540 100644 --- a/src/com/bekvon/bukkit/residence/containers/NMS.java +++ b/src/com/bekvon/bukkit/residence/containers/NMS.java @@ -15,7 +15,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; +import cmiLib.CMIEffect; public interface NMS { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 1e8687e66..5314b58a8 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -15,7 +15,8 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.text.help.PageInfo; import com.bekvon.bukkit.residence.utils.GetTime; -import com.bekvon.bukkit.residence.utils.RawMessage; + +import cmiLib.RawMessage; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index a058a7f0d..6262de7f3 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -8,9 +8,10 @@ import com.bekvon.bukkit.residence.CommentedYamlConfiguration; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ItemManager.CMIMaterial; + public class FlagUtil { private FlagData flagData = new FlagData(); diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index 4fc612682..d148a5a70 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -10,7 +10,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; +import cmiLib.ItemManager.CMIMaterial; public class ItemList { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index fb225db45..b70961664 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -44,7 +44,6 @@ import org.bukkit.metadata.FixedMetadataValue; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.commands.auto.direction; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -55,7 +54,9 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.Debug; -import com.bekvon.bukkit.residence.utils.VersionChecker.Version; + +import cmiLib.ItemManager.CMIMaterial; +import cmiLib.VersionChecker.Version; public class ResidenceBlockListener implements Listener { @@ -99,7 +100,7 @@ public void onAnvilInventoryClick(InventoryClickEvent e) { if (!res.getPermissions().has(Flags.anvilbreak, FlagCombo.OnlyFalse)) return; - if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_13_R1)) { + if (Version.isCurrentLower(Version.v1_13_R1)) { try { b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 1); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index eac6509c9..35f8cab33 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -50,13 +50,15 @@ import org.bukkit.projectiles.ProjectileSource; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import cmiLib.ActionBarTitleMessages; +import cmiLib.ItemManager.CMIMaterial; + public class ResidenceEntityListener implements Listener { Residence plugin; @@ -1007,7 +1009,7 @@ public void onSplashPotion(PotionSplashEvent event) { ClaimedResidence srcarea = plugin.getResidenceManager().getByLoc(attacker.getLocation()); if (srcarea != null && area != null && srcarea.equals(area) && srcarea.getPermissions().playerHas((Player) target, Flags.friendlyfire, FlagCombo.OnlyFalse) && srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { - plugin.getAB().send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); + ActionBarTitleMessages.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); event.setIntensity(target, 0); } } @@ -1354,7 +1356,7 @@ public void onEntityDamage(EntityDamageEvent event) { srcarea.getPermissions().playerHas((Player) ent, Flags.friendlyfire, FlagCombo.OnlyFalse) && srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { - plugin.getAB().send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); + ActionBarTitleMessages.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); if (isOnFire) ent.setFireTicks(0); event.setCancelled(true); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java index 285d8170d..e133c5b3c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java @@ -12,7 +12,8 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; + +import cmiLib.ItemManager.CMIMaterial; public class ResidenceFixesListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index d653e21a2..edfeb98ae 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -56,7 +56,6 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -77,7 +76,10 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.utils.GetTime; -import com.bekvon.bukkit.residence.utils.VersionChecker.Version; + +import cmiLib.ActionBarTitleMessages; +import cmiLib.ItemManager.CMIMaterial; +import cmiLib.VersionChecker.Version; public class ResidencePlayerListener implements Listener { @@ -377,7 +379,7 @@ public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { switch (event.getNewState()) { case NEITHER: case FALSE: - if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1) && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) for (Player one : event.getResidence().getPlayersInResidence()) one.setGlowing(false); break; @@ -385,7 +387,7 @@ public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { break; case TRUE: if (event.getFlag().equalsIgnoreCase(Flags.glow.getName())) - if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) for (Player one : event.getResidence().getPlayersInResidence()) one.setGlowing(true); break; @@ -412,7 +414,7 @@ public void onResidenceDeleteEvent(ResidenceDeleteEvent event) { for (Player one : event.getResidence().getPlayersInResidence()) fly(one, false); - if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) + if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) for (Player one : event.getResidence().getPlayersInResidence()) one.setGlowing(false); } @@ -435,7 +437,7 @@ public void onPlayerQuitEvent(PlayerQuitEvent event) { if (event.getPlayer() != null && res.getPermissions().playerHas(event.getPlayer(), Flags.fly, FlagCombo.OnlyTrue)) fly(player, false); - if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) + if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) player.setGlowing(false); } @@ -1760,12 +1762,12 @@ public void onResidenceChange(ResidenceChangedEvent event) { if (ResOld.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, false); - if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1) && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(false); } if (res != null && ResOld != null && !res.equals(ResOld)) { - if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) { + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) { if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(true); else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) @@ -1809,7 +1811,7 @@ else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res. } if (res != null && ResOld == null) { - if (plugin.getVersionChecker().isHigherEquals(Version.v1_9_R1)) { + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) { if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(true); } @@ -1876,7 +1878,7 @@ public void onPlayerMove(PlayerMoveEvent event) { plugin.getTeleportDelayMap().remove(player.getName()); plugin.msg(player, lm.General_TeleportCanceled); if (plugin.getConfigManager().isTeleportTitleMessage()) - plugin.getAB().sendTitle(player, "", ""); + ActionBarTitleMessages.sendTitle(player, "", ""); } } @@ -2036,7 +2038,7 @@ public void run() { teleported = teleport(player, newLoc); } if (plugin.getConfigManager().useActionBar()) { - plugin.getAB().send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); + ActionBarTitleMessages.send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); } else { plugin.msg(player, lm.Residence_MoveDeny, orres.getName()); } @@ -2161,10 +2163,10 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { return; if (message != null) { if (plugin.getConfigManager().useTitleMessage()) { - plugin.getAB().sendTitle(player, ChatColor.YELLOW + insertMessages(player, res, message)); + ActionBarTitleMessages.sendTitle(player, ChatColor.YELLOW + insertMessages(player, res, message)); } if (plugin.getConfigManager().useActionBar()) { - plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) + ActionBarTitleMessages.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) .toString()); } else { plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res, message)); @@ -2180,10 +2182,10 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { if (plugin.getRentManager().isForRent(from) && !plugin.getRentManager().isRented(from)) { RentableLand rentable = plugin.getRentManager().getRentableLand(from); if (rentable != null) - plugin.getAB().send(player, plugin.msg(lm.Residence_CanBeRented, from.getName(), rentable.cost, rentable.days)); + ActionBarTitleMessages.send(player, plugin.msg(lm.Residence_CanBeRented, from.getName(), rentable.cost, rentable.days)); } else if (plugin.getTransactionManager().isForSale(from) && !res.isOwner(player)) { int sale = plugin.getTransactionManager().getSaleAmount(from); - plugin.getAB().send(player, plugin.msg(lm.Residence_CanBeBought, from.getName(), sale)); + ActionBarTitleMessages.send(player, plugin.msg(lm.Residence_CanBeBought, from.getName(), sale)); } } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 31ffa67d3..4152140ed 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1,7 +1,28 @@ package com.bekvon.bukkit.residence.protection; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.World.Environment; +import org.bukkit.block.Block; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.Siege.ResidenceSiege; @@ -17,40 +38,19 @@ import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; import com.bekvon.bukkit.residence.event.ResidenceAreaDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceTPEvent; -import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.itemlist.ItemList.ListType; import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.Debug; -import com.bekvon.bukkit.residence.utils.RawMessage; - -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Random; -import java.util.Set; -import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.World.Environment; -import org.bukkit.block.Block; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; +import cmiLib.ActionBarTitleMessages; +import cmiLib.RawMessage; public class ClaimedResidence { @@ -1266,7 +1266,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } public void TpTimer(final Player player, final int t) { - plugin.getAB().sendTitle(player, plugin.msg(lm.General_TeleportTitle), plugin.msg(lm.General_TeleportTitleTime, t)); + ActionBarTitleMessages.sendTitle(player, plugin.msg(lm.General_TeleportTitle), plugin.msg(lm.General_TeleportTitleTime, t)); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index f070ffdaf..2f1e00fcc 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -22,13 +22,14 @@ import org.bukkit.permissions.PermissionDefault; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeFlags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import cmiLib.ItemManager.CMIMaterial; + public class FlagPermissions { protected static ArrayList validFlags = new ArrayList<>(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index b2c5549a2..f448772da 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -40,11 +40,12 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; -import com.bekvon.bukkit.residence.utils.RawMessage; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; import com.griefcraft.model.Protection; +import cmiLib.RawMessage; + public class ResidenceManager implements ResidenceInterface { protected SortedMap residences; protected Map>> chunkResidences; diff --git a/src/com/bekvon/bukkit/residence/selection/Schematics7Manager.java b/src/com/bekvon/bukkit/residence/selection/Schematics7Manager.java index a6e4a2ce0..97d6ee6b4 100644 --- a/src/com/bekvon/bukkit/residence/selection/Schematics7Manager.java +++ b/src/com/bekvon/bukkit/residence/selection/Schematics7Manager.java @@ -1,19 +1,9 @@ package com.bekvon.bukkit.residence.selection; import java.io.File; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.VersionChecker.Version; -import com.sk89q.worldedit.EditSession; -import com.sk89q.worldedit.MaxChangedBlocksException; -import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.WorldEdit; -import com.sk89q.worldedit.bukkit.BukkitAdapter; -import com.sk89q.worldedit.bukkit.BukkitWorld; @SuppressWarnings("deprecation") public class Schematics7Manager implements WESchematicManager { diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index 7b7a07452..0e1fde38a 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -9,13 +9,14 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.VersionChecker.Version; import com.sk89q.worldedit.CuboidClipboard; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.MaxChangedBlocksException; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.bukkit.BukkitWorld; +import cmiLib.VersionChecker.Version; + @SuppressWarnings("deprecation") public class SchematicsManager implements WESchematicManager { private Residence plugin; @@ -26,7 +27,7 @@ public SchematicsManager(Residence residence) { @Override public boolean save(ClaimedResidence res) { - if (plugin.getVersionChecker().getVersion().isEqualOrHigher(Version.v1_13_R1)) + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) return false; if (plugin.getWorldEdit() == null) return false; @@ -82,7 +83,7 @@ public boolean save(ClaimedResidence res) { @Override public boolean load(ClaimedResidence res) { - if (plugin.getVersionChecker().getVersion().isEqualOrHigher(Version.v1_13_R1)) + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) return false; if (plugin.getWorldEdit() == null) return false; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 53830fbe0..c52bcc91d 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -19,8 +19,6 @@ import org.bukkit.permissions.PermissionDefault; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.CMIEffect; -import com.bekvon.bukkit.residence.CMILib.CMIEffectManager.CMIParticle; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.SelectionSides; import com.bekvon.bukkit.residence.containers.Visualizer; @@ -29,6 +27,10 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import cmiLib.ActionBarTitleMessages; +import cmiLib.CMIEffect; +import cmiLib.CMIEffectManager.CMIParticle; + public class SelectionManager { protected Map selections; protected Server server; @@ -436,7 +438,7 @@ public void showSelectionInfoInActionBar(Player player) { if (plugin.getConfigManager().enableEconomy()) Message += " " + plugin.msg(lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); - plugin.getAB().send(player, Message); + ActionBarTitleMessages.send(player, Message); } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index f17b168d7..2cc2219dc 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -12,7 +12,8 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.RawMessage; + +import cmiLib.RawMessage; import java.io.File; import java.io.FileNotFoundException; diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 2df4834c6..9a89a3cf2 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -12,7 +12,8 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.GetTime; -import com.bekvon.bukkit.residence.utils.RawMessage; + +import cmiLib.RawMessage; import java.io.File; import java.io.IOException; diff --git a/src/com/bekvon/bukkit/residence/utils/ActionBar.java b/src/com/bekvon/bukkit/residence/utils/ActionBar.java deleted file mode 100644 index 8b1cd2692..000000000 --- a/src/com/bekvon/bukkit/residence/utils/ActionBar.java +++ /dev/null @@ -1,197 +0,0 @@ -package com.bekvon.bukkit.residence.utils; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.logging.Level; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.json.simple.JSONObject; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.ABInterface; -import com.bekvon.bukkit.residence.utils.VersionChecker.Version; - -public class ActionBar implements ABInterface { - private Version version = Version.v1_11_R1; - private Object packet; - private Method getHandle; - private Method sendPacket; - private Field playerConnection; - private Class nmsChatSerializer; - private Class nmsIChatBaseComponent; - private Class packetType; - private boolean simpleMessages = false; - private boolean simpleTitleMessages = false; - - private Constructor nmsPacketPlayOutTitle; - private Class enumTitleAction; - private Method fromString; - private Residence plugin; - - private Class ChatMessageclz; - private Class sub; - private Object[] consts; - - public ActionBar(Residence plugin) { - this.plugin = plugin; - version = this.plugin.getVersionChecker().getVersion(); - try { - packetType = Class.forName(getPacketPlayOutChat()); - Class typeCraftPlayer = Class.forName(getCraftPlayerClasspath()); - Class typeNMSPlayer = Class.forName(getNMSPlayerClasspath()); - Class typePlayerConnection = Class.forName(getPlayerConnectionClasspath()); - nmsChatSerializer = Class.forName(getChatSerializerClasspath()); - nmsIChatBaseComponent = Class.forName(getIChatBaseComponentClasspath()); - getHandle = typeCraftPlayer.getMethod("getHandle"); - playerConnection = typeNMSPlayer.getField("playerConnection"); - sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName(getPacketClasspath())); - - if (plugin.getVersionChecker().getVersion().isHigher(Version.v1_11_R1)) { - ChatMessageclz = Class.forName(getChatMessageTypeClasspath()); - consts = ChatMessageclz.getEnumConstants(); - sub = consts[2].getClass(); - } - - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { - simpleMessages = true; - Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully suport action bar messages. They will be shown in chat instead."); - } - // Title - try { - Class typePacketPlayOutTitle = Class.forName(getPacketPlayOutTitleClasspath()); - enumTitleAction = Class.forName(getEnumTitleActionClasspath()); - nmsPacketPlayOutTitle = typePacketPlayOutTitle.getConstructor(enumTitleAction, nmsIChatBaseComponent); - fromString = Class.forName(getClassMessageClasspath()).getMethod("fromString", String.class); - } catch (Exception ex) { - simpleTitleMessages = true; - Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully suport title messages. They will be shown in chat instead."); - } - } - - @Override - public void sendTitle(Player receivingPacket, Object title) { - String t = (String) title; - if (t.contains("%subtitle%")) - sendTitle(receivingPacket, t.split("%subtitle%")[0], t.split("%subtitle%")[1]); - else - sendTitle(receivingPacket, t, ""); - } - - @Override - public void sendTitle(Player receivingPacket, Object title, Object subtitle) { - if (simpleTitleMessages) { - receivingPacket.sendMessage(ChatColor.translateAlternateColorCodes('&', String.valueOf(title))); - receivingPacket.sendMessage(ChatColor.translateAlternateColorCodes('&', String.valueOf(subtitle))); - return; - } - try { - if (title != null) { - Object packetTitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("TITLE").get(null), - ((Object[]) fromString.invoke(null, ChatColor.translateAlternateColorCodes('&', String.valueOf(title))))[0]); - sendPacket(receivingPacket, packetTitle); - } - if (subtitle != null) { - Object packetSubtitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("SUBTITLE").get(null), - ((Object[]) fromString.invoke(null, ChatColor.translateAlternateColorCodes('&', String.valueOf(subtitle))))[0]); - sendPacket(receivingPacket, packetSubtitle); - } - } catch (Exception ex) { - simpleTitleMessages = true; - Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully support title messages. They will be shown in chat instead."); - } - } - - private void sendPacket(Player player, Object packet) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { - Object handle = getHandle.invoke(player); - Object connection = playerConnection.get(handle); - sendPacket.invoke(connection, packet); - } - - @Override - public void send(CommandSender sender, String msg) { - if (sender instanceof Player) - send((Player) sender, msg); - else - sender.sendMessage(msg); - } - - @Override - public void send(Player receivingPacket, String msg) { - if (msg == null || msg.isEmpty()) - return; - - msg = msg.replace("%subtitle%", ""); - if (simpleMessages) { - receivingPacket.sendMessage(msg); - return; - } - try { - Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, "{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', JSONObject - .escape(msg)) + "\"}"); - if (plugin.getVersionChecker().getVersion().isHigher(Version.v1_11_R1)) - packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[2]); - else if (version.isHigher(Version.v1_7_R4)) { - packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 2); - } else { - packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 2); - } - Object player = getHandle.invoke(receivingPacket); - Object connection = playerConnection.get(player); - sendPacket.invoke(connection, packet); - } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException ex) { - simpleMessages = true; - Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully suport action bar messages. They will be shown in chat instead."); - } - } - - private String getCraftPlayerClasspath() { - return "org.bukkit.craftbukkit." + version + ".entity.CraftPlayer"; - } - - private String getPlayerConnectionClasspath() { - return "net.minecraft.server." + version + ".PlayerConnection"; - } - - private String getNMSPlayerClasspath() { - return "net.minecraft.server." + version + ".EntityPlayer"; - } - - private String getPacketClasspath() { - return "net.minecraft.server." + version + ".Packet"; - } - - private String getIChatBaseComponentClasspath() { - return "net.minecraft.server." + version + ".IChatBaseComponent"; - } - - private String getChatSerializerClasspath() { - if (plugin.getVersionChecker().isLower(Version.v1_8_R2)) - return "net.minecraft.server." + version + ".ChatSerializer"; - return "net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent - } - - private String getPacketPlayOutChat() { - return "net.minecraft.server." + version + ".PacketPlayOutChat"; - } - - private String getPacketPlayOutTitleClasspath() { - return "net.minecraft.server." + version + ".PacketPlayOutTitle"; - } - - private String getEnumTitleActionClasspath() { - return getPacketPlayOutTitleClasspath() + "$EnumTitleAction"; - } - - private String getClassMessageClasspath() { - return "org.bukkit.craftbukkit." + version + ".util.CraftChatMessage"; - } - - private String getChatMessageTypeClasspath() { - return "net.minecraft.server." + version + ".ChatMessageType"; - } -} diff --git a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java index 0e944954b..ea7f6838d 100644 --- a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java +++ b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java @@ -15,9 +15,10 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.utils.ReflectionUtils.PackageType; +import cmiLib.ItemManager.CMIMaterial; + /** * ParticleEffect Library *

diff --git a/src/com/bekvon/bukkit/residence/utils/RawMessage.java b/src/com/bekvon/bukkit/residence/utils/RawMessage.java deleted file mode 100644 index 2a827ebad..000000000 --- a/src/com/bekvon/bukkit/residence/utils/RawMessage.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.bekvon.bukkit.residence.utils; - -import java.util.ArrayList; -import java.util.List; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class RawMessage { - - List parts = new ArrayList(); - List cleanParts = new ArrayList(); - String combined = ""; - String combinedClean = ""; - - public void clear() { - parts = new ArrayList(); - cleanParts = new ArrayList(); - combined = ""; - combinedClean = ""; - } - - public RawMessage add(String text) { - return add(text, null, null, null); - } - - public RawMessage add(String text, String hoverText) { - return add(text, hoverText, null, null); - } - - public RawMessage add(String text, String hoverText, String command) { - return add(text, hoverText, command, null); - } - - public RawMessage add(String text, String hoverText, String command, String suggestion) { - if (text == null) - return this; - String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', text) + "\""; - - String last = ChatColor.getLastColors(text); - if (last != null && !last.isEmpty()) { - ChatColor color = ChatColor.getByChar(last.replace("§", "")); - if (color != null) { - f += ",\"color\":\"" + color.name().toLowerCase() + "\""; - } - } - if (hoverText != null && !hoverText.isEmpty()) { - hoverText = hoverText.replace("\n", "\\n"); - hoverText = hoverText.replace(" \n", " \\n"); - f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText) + "\"}]}}"; - } - if (suggestion != null) - f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + suggestion + "\"}"; - if (command != null) { - if (!command.startsWith("/")) - command = "/" + command; - f += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}"; - } - f += "}"; - parts.add(f); - cleanParts.add(ChatColor.translateAlternateColorCodes('&', text)); - return this; - } - - public RawMessage combine() { - String f = ""; - for (String part : parts) { - if (f.isEmpty()) - f = "[\"\","; - else - f += ","; - f += part; - } - if (!f.isEmpty()) - f += "]"; - combined = f; - return this; - } - - public RawMessage combineClean() { - String f = ""; - for (String part : cleanParts) { - f += part; - } - combinedClean = f; - return this; - } - - public RawMessage show(Player player) { - if (combined.isEmpty()) - combine(); - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + combined); - return this; - } - - public RawMessage showClean(Player player) { - if (combinedClean.isEmpty()) - combineClean(); - player.sendMessage(combined); - return this; - } - - public RawMessage show(CommandSender sender) { - if (combined.isEmpty()) - combine(); - if (sender instanceof Player) - show((Player) sender); - else - sender.sendMessage(this.combineClean().combinedClean); - return this; - } - - public String getRaw() { - if (combined.isEmpty()) - combine(); - return combined; - } - -} diff --git a/src/com/bekvon/bukkit/residence/utils/Utils.java b/src/com/bekvon/bukkit/residence/utils/Utils.java index fcb61c9bf..ab3d82ad5 100644 --- a/src/com/bekvon/bukkit/residence/utils/Utils.java +++ b/src/com/bekvon/bukkit/residence/utils/Utils.java @@ -9,9 +9,10 @@ import org.bukkit.util.BlockIterator; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.CMILib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.lm; +import cmiLib.ItemManager.CMIMaterial; + public class Utils { public Utils() { diff --git a/src/plugin.yml b/src/plugin.yml index 3b4145a42..6bb1a59bb 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.0.2 +version: 4.8.1.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 5173041e01259a0b092d1ef9c571adc3d02da0db Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Oct 2018 13:14:19 +0300 Subject: [PATCH 0508/1142] Lets prevent chest placing near another residence --- .../bukkit/residence/containers/lm.java | 1 + .../listeners/ResidenceBlockListener.java | 52 +++++++++++++++++++ .../protection/ClaimedResidence.java | 7 +++ 3 files changed, 60 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 9f095d175..69e9a6371 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -378,6 +378,7 @@ public enum lm { General_UseNumbers("&cPlease use numbers..."), General_CantPlaceLava("&cYou can't place lava outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), General_CantPlaceWater("&cYou can't place Water outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), + General_CantPlaceChest("&cYou can't place chest at this place"), General_NoPermission("&cYou dont have permission for this."), General_NoCmdPermission("&cYou dont have permission for this command."), General_DefaultUsage("&eType &6/%1 ? &efor more info"), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index b70961664..42fac45a8 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -55,6 +55,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.Debug; +import cmiLib.ActionBarTitleMessages; import cmiLib.ItemManager.CMIMaterial; import cmiLib.VersionChecker.Version; @@ -395,6 +396,57 @@ public void onChestPlace(BlockPlaceEvent event) { MessageInformed.add(player.getName()); } + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onChestPlaceNearResidence(BlockPlaceEvent event) { + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; + + Block block = event.getBlock(); + if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) + return; + + ClaimedResidence orRes = plugin.getResidenceManager().getByLoc(block.getLocation()); + + boolean cancel = false; + + ClaimedResidence res = null; + Block b = block.getLocation().clone().add(0, 0, -1).getBlock(); + if (b.getType() == block.getType()) { + res = plugin.getResidenceManager().getByLoc(b.getLocation()); + if (res != null && !res.equals(orRes)) + cancel = true; + } + b = block.getLocation().clone().add(0, 0, 1).getBlock(); + if (b.getType() == block.getType()) { + res = plugin.getResidenceManager().getByLoc(b.getLocation()); + if (res != null && !res.equals(orRes)) + cancel = true; + } + b = block.getLocation().clone().add(1, 0, 0).getBlock(); + if (b.getType() == block.getType()) { + res = plugin.getResidenceManager().getByLoc(b.getLocation()); + if (res != null && !res.equals(orRes)) + cancel = true; + } + b = block.getLocation().clone().add(-1, 0, 0).getBlock(); + if (b.getType() == block.getType()) { + res = plugin.getResidenceManager().getByLoc(b.getLocation()); + if (res != null && !res.equals(orRes)) + cancel = true; + } + + if (cancel) { + ActionBarTitleMessages.send(player, plugin.msg(lm.General_CantPlaceChest)); + event.setCancelled(true); + } + + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestPlaceCreateRes(BlockPlaceEvent event) { // disabling event on world diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 4152140ed..8044dcf58 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1953,4 +1953,11 @@ public void endSiege() { this.getSiege().getAttackers().clear(); this.getSiege().getDefenders().clear(); } + + @Override + public boolean equals(Object obj) { + if (obj == null) + return false; + return this == obj; + } } From 24aa0effc09ff8c065d582ba3717a1ae4a12e2e0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Oct 2018 15:09:43 +0300 Subject: [PATCH 0509/1142] Lets check for null selection world for WE selection --- .../residence/selection/WorldEdit7SelectionManager.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java index 03cf5b1d9..eec3f77e3 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java @@ -18,7 +18,6 @@ import com.sk89q.worldedit.regions.selector.CuboidRegionSelector; import com.sk89q.worldedit.regions.selector.limit.PermissiveSelectorLimits; import com.sk89q.worldedit.world.World; -import com.sk89q.worldguard.bukkit.BukkitUtil; public class WorldEdit7SelectionManager extends SelectionManager { @@ -29,9 +28,11 @@ public WorldEdit7SelectionManager(Server serv, Residence plugin) { @Override public boolean worldEdit(Player player) { WorldEditPlugin wep = (WorldEditPlugin) this.server.getPluginManager().getPlugin("WorldEdit"); - Region sel; + Region sel = null; try { - sel = wep.getSession(player).getSelection(wep.getSession(player).getSelectionWorld()); + World w = wep.getSession(player).getSelectionWorld(); + if (w != null) + sel = wep.getSession(player).getSelection(w); if (sel != null) { try { Location pos1 = new Location(player.getWorld(), sel.getMinimumPoint().getX(), sel.getMinimumPoint().getY(), sel.getMinimumPoint().getZ()); From 02df33d0ccc025945bdeb802a11036b2e97fd0b5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Oct 2018 15:14:00 +0300 Subject: [PATCH 0510/1142] We should not save schematic on info... --- src/com/bekvon/bukkit/residence/commands/info.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 6ba81f25c..c4f801518 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -23,7 +23,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Player player = (Player) sender; ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { - Residence.getInstance().getSchematicManager().save(res); plugin.getResidenceManager().printAreaInfo(res.getName(), sender, resadmin); } else { plugin.msg(sender, lm.Invalid_Residence); From 8f14ecc71474c20c54d4baf59cc00d4483ed3cfc Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Oct 2018 15:17:54 +0300 Subject: [PATCH 0511/1142] Fix for info rentable line and tellraw message --- .../protection/ResidenceManager.java | 36 +++++++------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index f448772da..fb80a9ca8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -756,9 +756,12 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) rentableString.append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); rentableString.append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); } - if (sender instanceof Player) - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, forRentMsg, rentableString.toString())); - else + if (sender instanceof Player) { + + RawMessage rm = new RawMessage(); + rm.add(forRentMsg, rentableString.toString()); + rm.show(sender); + } else plugin.msg(sender, forRentMsg); } else if (plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isRented(areaname)) { String RentedMsg = plugin.msg(lm.Residence_RentedBy, plugin.getRentManager().getRentingPlayer(areaname)); @@ -781,9 +784,12 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) rentableString.append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); } - if (sender instanceof Player) - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + convertToRaw(null, RentedMsg, rentableString.toString())); - else + if (sender instanceof Player) { + + RawMessage rm = new RawMessage(); + rm.add(RentedMsg, rentableString.toString()); + rm.show(sender); + } else plugin.msg(sender, RentedMsg); } else if (plugin.getTransactionManager().isForSale(areaname)) { int amount = plugin.getTransactionManager().getSaleAmount(areaname); @@ -794,24 +800,6 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) plugin.msg(sender, lm.General_Separator); } - public String convertToRaw(String preText, String text, String hover) { - return convertToRaw(preText, text, hover, null); - } - - public String convertToRaw(String preText, String text, String hover, String command) { - StringBuilder msg = new StringBuilder(); - String cmd = ""; - if (command != null) { - cmd = ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/" + command + "\"}"; - } - msg.append("[\"\","); - if (preText != null) - msg.append("{\"text\":\"" + preText + "\"}"); - msg.append("{\"text\":\"" + text + "\"" + cmd + ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + hover + "\"}]}}}"); - msg.append("]"); - return msg.toString(); - } - public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { ClaimedResidence reciever = this.getByName(targetArea); ClaimedResidence source = this.getByName(sourceArea); From 9a935350699a21c1f94fb9ec62041388303c9b52 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Oct 2018 17:03:46 +0300 Subject: [PATCH 0512/1142] Lets fix tabcomplete issue --- src/com/bekvon/bukkit/residence/text/help/HelpEntry.java | 5 ++++- src/com/bekvon/bukkit/residence/utils/TabComplete.java | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 2cc2219dc..cc649f64d 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -284,6 +284,9 @@ public Set getSubCommands(CommandSender sender, String[] args) { int i = 0; while (ok) { + if (i >= args.length) + break; + if (args[i].equalsIgnoreCase("")) return tempmeinPath.getKeys(false); @@ -298,7 +301,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { int neededArgPlace = args.length - 2 - i; boolean subCommand = true; - if (tempmeinPath.isConfigurationSection(args[i])) { + if (i < args.length && tempmeinPath.isConfigurationSection(args[i])) { subCommand = false; tempmeinPath = tempmeinPath.getConfigurationSection(args[i]); } diff --git a/src/com/bekvon/bukkit/residence/utils/TabComplete.java b/src/com/bekvon/bukkit/residence/utils/TabComplete.java index 00a5a7299..608ecfcb3 100644 --- a/src/com/bekvon/bukkit/residence/utils/TabComplete.java +++ b/src/com/bekvon/bukkit/residence/utils/TabComplete.java @@ -18,12 +18,12 @@ public class TabComplete implements TabCompleter { public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { List completionList = new ArrayList<>(); -// if (args.length > 1) { + if (args.length > 1) { Set Commands = Residence.getInstance().getHelpPages().getSubCommands(sender, args); String PartOfCommand = args[args.length - 1]; StringUtil.copyPartialMatches(PartOfCommand, Commands, completionList); Collections.sort(completionList); -// } + } return completionList; } } From 9ffcb0b0de55e0cb4b6427e3902120e736852c95 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Oct 2018 17:48:50 +0300 Subject: [PATCH 0513/1142] lets use same money format for money charged and money added --- .../residence/dynmap/DynMapManager.java | 20 ++++++++++++++----- .../residence/economy/TransactionManager.java | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index d3b8af9a0..608b42e28 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -20,6 +20,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.ResidencePermissions; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class DynMapManager { @@ -217,8 +218,8 @@ private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { String id = oneArea.getKey() + "." + resid; String name = res.getName(); - double[] x = new double[2]; - double[] z = new double[2]; + double[] x = new double[4]; + double[] z = new double[4]; String resName = res.getName(); @@ -234,10 +235,19 @@ private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { Location l0 = oneArea.getValue().getLowLoc(); Location l1 = oneArea.getValue().getHighLoc(); +// x[0] = l0.getX(); +// z[0] = l0.getZ(); +// x[1] = l1.getX() + 1.0; +// z[1] = l1.getZ() + 1.0; + x[0] = l0.getX(); z[0] = l0.getZ(); - x[1] = l1.getX() + 1.0; + x[1] = l0.getX(); z[1] = l1.getZ() + 1.0; + x[2] = l1.getX() + 1.0; + z[2] = l1.getZ() + 1.0; + x[3] = l1.getX() + 1.0; + z[3] = l0.getZ(); AreaMarker marker = null; @@ -247,12 +257,12 @@ private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { marker.deleteMarker(); } - marker = set.createAreaMarker(id, name, true, res.getWorld(), x, z, false); + marker = set.createAreaMarker(id, name, true, res.getWorld(), x, z, true); if (marker == null) return; if (plugin.getConfigManager().DynMapLayer3dRegions) - marker.setRangeY(Math.min(l0.getY(), l1.getY()), Math.max(l0.getY(), l1.getY())); + marker.setRangeY(l1.getY(), l0.getY()); marker.setDescription(desc); addStyle(resid, marker); diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index e16d59749..8b29fd29d 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -45,7 +45,7 @@ public boolean chargeEconomyMoney(Player player, double chargeamount) { econ.subtract(player.getName(), chargeamount); try { if (chargeamount != 0D) - plugin.msg(player, lm.Economy_MoneyCharged, chargeamount, econ.getName()); + plugin.msg(player, lm.Economy_MoneyCharged, plugin.getEconomyManager().format(chargeamount), econ.getName()); } catch (Exception e) { } return true; From cf1311b61b0fcb2e060319f93191ac0e674b4e14 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Oct 2018 18:06:43 +0300 Subject: [PATCH 0514/1142] Lets add potted flower to flowerpot flag --- src/cmiLib/ItemManager.java | 37 +++++++++++++++++++ .../listeners/ResidencePlayerListener.java | 14 ++++++- .../residence/protection/FlagPermissions.java | 13 ++++++- 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/src/cmiLib/ItemManager.java b/src/cmiLib/ItemManager.java index 2b0732441..e144e3d81 100644 --- a/src/cmiLib/ItemManager.java +++ b/src/cmiLib/ItemManager.java @@ -2075,6 +2075,43 @@ public boolean isPotion() { return false; } + public static boolean isPottedFlower(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isPottedFlower(); + } + + public boolean isPottedFlower() { + switch (this) { + case POTTED_ACACIA_SAPLING: + case POTTED_ALLIUM: + case POTTED_AZURE_BLUET: + case POTTED_BIRCH_SAPLING: + case POTTED_BLUE_ORCHID: + case POTTED_BROWN_MUSHROOM: + case POTTED_CACTUS: + case POTTED_DANDELION: + case POTTED_DARK_OAK_SAPLING: + case POTTED_DEAD_BUSH: + case POTTED_FERN: + case POTTED_JUNGLE_SAPLING: + case POTTED_OAK_SAPLING: + case POTTED_ORANGE_TULIP: + case POTTED_OXEYE_DAISY: + case POTTED_PINK_TULIP: + case POTTED_POPPY: + case POTTED_RED_MUSHROOM: + case POTTED_RED_TULIP: + case POTTED_SPRUCE_SAPLING: + case POTTED_WHITE_TULIP: + return true; + default: + break; + } + return false; + } + public static boolean isBoat(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index edfeb98ae..9c9fe51bb 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -75,6 +75,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import cmiLib.ActionBarTitleMessages; @@ -973,8 +974,17 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { case "DAYLIGHT_DETECTOR_INVERTED": return true; default: - return plugin.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getType().getId())); + break; + } + + CMIMaterial cmat = CMIMaterial.get(mat); + if (cmat != null) { + if (cmat.isPottedFlower()) { + return true; + } } + + return plugin.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getType().getId())); } private boolean isCanUseEntity(Material mat, Block block) { @@ -1176,6 +1186,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } + Debug.D("check pot? "+ isCanUseEntity(mat, block) + " " + mat); + if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 2f1e00fcc..2a2ef97c9 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -29,6 +29,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import cmiLib.ItemManager.CMIMaterial; +import cmiLib.VersionChecker.Version; public class FlagPermissions { @@ -210,7 +211,7 @@ public static void initValidFlags() { continue; addMaterialToUseFlag(one.getMaterial(), Flags.bed); } - + addMaterialToUseFlag(Material.BREWING_STAND, Flags.brew); addMaterialToUseFlag(Material.CAKE, Flags.cake); addMaterialToUseFlag(Material.NOTE_BLOCK, Flags.note); @@ -219,6 +220,16 @@ public static void initValidFlags() { addMaterialToUseFlag(CMIMaterial.OAK_BUTTON.getMaterial(), Flags.button); addMaterialToUseFlag(Material.ANVIL, Flags.anvil); addMaterialToUseFlag(Material.FLOWER_POT, Flags.flowerpot); + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + for (CMIMaterial one : CMIMaterial.values()) { + if (!one.isPottedFlower()) + continue; + if (one.getMaterial() == null) + continue; + addMaterialToUseFlag(one.getMaterial(), Flags.flowerpot); + } + addMaterialToUseFlag(Material.BEACON, Flags.beacon); addMaterialToUseFlag(Material.JUKEBOX, Flags.container); addMaterialToUseFlag(Material.CHEST, Flags.container); From dc6fb6aa41d321d367a764b0b34cf3520a14b1ce Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Oct 2018 11:50:10 +0300 Subject: [PATCH 0515/1142] Lets bypass move false flag while teleporting into residence while you have tpbypass permission node. --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 +- src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9c9fe51bb..c9b4ebf2f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1642,7 +1642,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { return; if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { - if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player)) { + if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) && !player.hasPermission("residence.tpbypass")) { event.setCancelled(true); plugin.msg(player, lm.Residence_MoveDeny, res.getName()); return; diff --git a/src/plugin.yml b/src/plugin.yml index 6bb1a59bb..c186263c5 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.1.0 +version: 4.8.2.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 34b26aaaf6b4768e66c077cf8dcd44c36350e650 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Oct 2018 13:56:55 +0300 Subject: [PATCH 0516/1142] Lets keep market sign even after its been purchased and update it --- .../bukkit/residence/containers/lm.java | 2 + .../residence/economy/rent/RentManager.java | 3 + .../listeners/ResidencePlayerListener.java | 21 ++--- .../protection/ClaimedResidence.java | 12 +++ .../bukkit/residence/signsStuff/SignInfo.java | 56 ++++++------- .../bukkit/residence/signsStuff/SignUtil.java | 36 ++++++-- .../bukkit/residence/signsStuff/Signs.java | 84 ++++++++++--------- 7 files changed, 124 insertions(+), 90 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 69e9a6371..021839a7c 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -88,6 +88,8 @@ public enum lm { Sign_ForSaleResName("&8%1"), Sign_ForSaleBottom("&5%1m\u00B3"), Sign_LookAt("&cYou are not looking at sign"), + Sign_ResName("&8%1"), + Sign_Owner("&5%1"), Siege_Started("&7Siege started!"), Siege_noSelf("&cCan't siege your own residence!"), diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 5314b58a8..f20280f3f 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -229,6 +229,9 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days newrent.AllowAutoPay = AllowAutoPay; res.setRentable(newrent); rentableLand.add(res); + + plugin.getSignUtil().CheckSign(res); + plugin.msg(player, lm.Residence_ForRentSuccess, res.getResidenceName(), amount, days); } else { plugin.msg(player, lm.Residence_AlreadyRent); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c9b4ebf2f..539ca32b3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -781,21 +781,16 @@ public void onSignCreate(SignChangeEvent event) { final ClaimedResidence residence = res; - boolean ForSale = plugin.getTransactionManager().isForSale(landName); - boolean ForRent = plugin.getRentManager().isForRent(landName); - int category = 1; if (plugin.getSignUtil().getSigns().GetAllSigns().size() > 0) category = plugin.getSignUtil().getSigns().GetAllSigns().get(plugin.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; - if (ForSale || ForRent) { - signInfo.setCategory(category); - signInfo.setResidence(res); - signInfo.setLocation(loc); -// signInfo.updateLocation(); - plugin.getSignUtil().getSigns().addSign(signInfo); - plugin.getSignUtil().saveSigns(); - } + signInfo.setCategory(category); + signInfo.setResidence(res); + signInfo.setLocation(loc); + plugin.getSignUtil().getSigns().addSign(signInfo); + plugin.getSignUtil().saveSigns(); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { @@ -835,6 +830,8 @@ public void onSignDestroy(BlockBreakEvent event) { continue; plugin.getSignUtil().getSigns().removeSign(one); + if (one.GetResidence() != null) + one.GetResidence().getSignsInResidence().remove(one); plugin.getSignUtil().saveSigns(); break; } @@ -1186,7 +1183,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } - Debug.D("check pot? "+ isCanUseEntity(mat, block) + " " + mat); + Debug.D("check pot? " + isCanUseEntity(mat, block) + " " + mat); if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 8044dcf58..4d904f8a4 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; @@ -47,6 +48,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.shopStuff.ShopVote; +import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.text.help.PageInfo; import cmiLib.ActionBarTitleMessages; @@ -87,6 +89,8 @@ public class ClaimedResidence { private Residence plugin; private ResidenceSiege siege; + + private Set signsInResidence = new HashSet(); public String getResidenceName() { return resName; @@ -1960,4 +1964,12 @@ public boolean equals(Object obj) { return false; return this == obj; } + + public Set getSignsInResidence() { + return signsInResidence; + } + + public void setSignsInResidence(Set signsInResidence) { + this.signsInResidence = signsInResidence; + } } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java b/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java index 318ce2dbd..eceabd9b0 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java @@ -1,28 +1,28 @@ -package com.bekvon.bukkit.residence.signsStuff; - -import java.util.ArrayList; -import java.util.List; - -public class SignInfo { - - List AllSigns = new ArrayList(); - - public SignInfo() { - } - - public void setAllSigns(List AllSigns) { - this.AllSigns = AllSigns; - } - - public List GetAllSigns() { - return this.AllSigns; - } - - public void removeSign(Signs sign) { - this.AllSigns.remove(sign); - } - - public void addSign(Signs sign) { - this.AllSigns.add(sign); - } -} +package com.bekvon.bukkit.residence.signsStuff; + +import java.util.ArrayList; +import java.util.List; + +public class SignInfo { + + List AllSigns = new ArrayList(); + + public SignInfo() { + } + + public void setAllSigns(List AllSigns) { + this.AllSigns = AllSigns; + } + + public List GetAllSigns() { + return this.AllSigns; + } + + public void removeSign(Signs sign) { + this.AllSigns.remove(sign); + } + + public void addSign(Signs sign) { + this.AllSigns.add(sign); + } +} diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 1840a4d87..f99e02c99 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -167,12 +167,13 @@ public void CheckSign(ClaimedResidence res) { saveSigns(); } - public void removeSign(ClaimedResidence res) { + @Deprecated + public void removeSign(String res) { if (res != null) - removeSign(res.getName()); + removeSign(plugin.getResidenceManager().getByName(res)); } - public void removeSign(String res) { + public void removeSign(ClaimedResidence res) { List signList = new ArrayList(); signList.addAll(this.getSigns().GetAllSigns()); @@ -185,7 +186,7 @@ public void removeSign(String res) { public void updateSignResName(ClaimedResidence res) { for (Signs one : this.getSigns().GetAllSigns()) { - if (res != one.GetResidence()) + if (!res.equals(one.GetResidence())) continue; this.SignUpdate(one); saveSigns(); @@ -207,6 +208,7 @@ public boolean SignUpdate(Signs Sign) { if (nloc == null) { Signs.removeSign(Sign); + res.getSignsInResidence().remove(Sign); return false; } @@ -214,6 +216,7 @@ public boolean SignUpdate(Signs Sign) { if (block.getType() == Material.AIR) { Signs.removeSign(Sign); + res.getSignsInResidence().remove(Sign); return false; } @@ -222,15 +225,30 @@ public boolean SignUpdate(Signs Sign) { Sign sign = (Sign) block.getState(); + String landName = res.getName(); + if (landName == null) + return false; if (!ForRent && !ForSale) { - block.breakNaturally(); - Signs.removeSign(Sign); + String shortName = fixResName(landName); + String secondLine = null; + if (shortName.contains("~")) { + String[] lines = fixDoubleResName(landName); + shortName = lines[0]; + secondLine = lines[1]; + } + sign.setLine(0, plugin.msg(lm.Sign_ResName, shortName)); + if (secondLine != null) + sign.setLine(1, plugin.msg(lm.Sign_ResName, secondLine)); + sign.setLine(2, ""); + sign.setLine(3, ""); + sign.setLine(secondLine == null ? 1 : 2, plugin.msg(lm.Sign_Owner, res.getOwner())); + sign.update(); + +// block.breakNaturally(); +// Signs.removeSign(Sign); return true; } - String landName = res.getName(); - if (landName == null) - return false; if (ForRent) { boolean rented = res.isRented(); diff --git a/src/com/bekvon/bukkit/residence/signsStuff/Signs.java b/src/com/bekvon/bukkit/residence/signsStuff/Signs.java index 1e66238ca..2760ac2c6 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/Signs.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/Signs.java @@ -1,41 +1,43 @@ -package com.bekvon.bukkit.residence.signsStuff; - -import org.bukkit.Location; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class Signs { - - int Category = 0; - ClaimedResidence Residence = null; - - Location loc = null; - - public Signs() { - } - - public void setLocation(Location loc) { - this.loc = loc; - } - - public Location GetLocation() { - return this.loc; - } - - public void setCategory(int Category) { - this.Category = Category; - } - - public int GetCategory() { - return this.Category; - } - - public void setResidence(ClaimedResidence Residence) { - this.Residence = Residence; - } - - public ClaimedResidence GetResidence() { - return this.Residence; - } - -} +package com.bekvon.bukkit.residence.signsStuff; + +import org.bukkit.Location; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class Signs { + + int Category = 0; + ClaimedResidence Residence = null; + + Location loc = null; + + public Signs() { + } + + public void setLocation(Location loc) { + this.loc = loc; + } + + public Location GetLocation() { + return this.loc; + } + + public void setCategory(int Category) { + this.Category = Category; + } + + public int GetCategory() { + return this.Category; + } + + public void setResidence(ClaimedResidence Residence) { + this.Residence = Residence; + if (Residence != null) + Residence.getSignsInResidence().add(this); + } + + public ClaimedResidence GetResidence() { + return this.Residence; + } + +} From f298c45d764bac8c7feffccdebb3a1c3619c13f1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Oct 2018 15:19:36 +0300 Subject: [PATCH 0517/1142] Lets move player listener maps to UUID based ones --- .../bukkit/residence/chat/ChatManager.java | 9 +- .../bukkit/residence/commands/pset.java | 2 +- .../bekvon/bukkit/residence/commands/set.java | 2 +- .../listeners/ResidencePlayerListener.java | 145 +++++++++--------- 4 files changed, 80 insertions(+), 78 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/chat/ChatManager.java b/src/com/bekvon/bukkit/residence/chat/ChatManager.java index 913bd1631..e2205c72e 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatManager.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatManager.java @@ -1,13 +1,14 @@ package com.bekvon.bukkit.residence.chat; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.api.ChatInterface; -import com.bekvon.bukkit.residence.api.ResidenceApi; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; import java.util.HashMap; import java.util.Map; + import org.bukkit.Server; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.ChatInterface; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + public class ChatManager implements ChatInterface { protected Map channelmap; diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 7e6ea8e05..5b01044e9 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -110,7 +110,7 @@ public void run() { flag.setTargetPlayer(targetPlayer); flag.recalculatePlayer(res); player.closeInventory(); - plugin.getPlayerListener().getGUImap().put(player.getName(), flag); + plugin.getPlayerListener().getGUImap().put(player.getUniqueId(), flag); player.openInventory(flag.getInventory()); return; } diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 06ec17f5b..d854fd130 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -71,7 +71,7 @@ public void run() { SetFlag flag = new SetFlag(res, player, resadmin); flag.recalculateResidence(res); player.closeInventory(); - plugin.getPlayerListener().getGUImap().put(player.getName(), flag); + plugin.getPlayerListener().getGUImap().put(player.getUniqueId(), flag); player.openInventory(flag.getInventory()); return; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 539ca32b3..fc3fa26f9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1,10 +1,11 @@ package com.bekvon.bukkit.residence.listeners; -import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; @@ -84,46 +85,46 @@ public class ResidencePlayerListener implements Listener { - protected Map currentRes; - protected Map lastUpdate; - protected Map lastOutsideLoc; + protected Map currentRes; + protected Map lastUpdate; + protected Map lastOutsideLoc; protected Map stuckTeleportCounter; protected int minUpdateTime; protected boolean chatenabled; - protected List playerToggleChat = new ArrayList(); + protected Set playerToggleChat = new HashSet(); - public Map GUI = new HashMap(); + public Map GUI = new HashMap(); private Residence plugin; public ResidencePlayerListener(Residence plugin) { - currentRes = new HashMap(); - lastUpdate = new HashMap(); - lastOutsideLoc = new HashMap(); + currentRes = new HashMap(); + lastUpdate = new HashMap(); + lastOutsideLoc = new HashMap(); stuckTeleportCounter = new HashMap(); playerToggleChat.clear(); minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval(); chatenabled = plugin.getConfigManager().chatEnabled(); for (Player player : Bukkit.getOnlinePlayers()) { - lastUpdate.put(player.getName(), System.currentTimeMillis()); + lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); } this.plugin = plugin; } - public Map getGUImap() { + public Map getGUImap() { return GUI; } public void reload() { - currentRes = new HashMap(); - lastUpdate = new HashMap(); - lastOutsideLoc = new HashMap(); + currentRes = new HashMap(); + lastUpdate = new HashMap(); + lastOutsideLoc = new HashMap(); stuckTeleportCounter = new HashMap(); playerToggleChat.clear(); minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval(); chatenabled = plugin.getConfigManager().chatEnabled(); for (Player player : Bukkit.getOnlinePlayers()) { - lastUpdate.put(player.getName(), System.currentTimeMillis()); + lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); } } @@ -568,12 +569,12 @@ public void onCommand(PlayerCommandPreprocessEvent event) { if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); - String resname = plugin.getPlayerListener().getCurrentResidenceName(player.getName()); - if (resname == null) - return; - ClaimedResidence res = plugin.getResidenceManager().getByName(resname); + + ClaimedResidence res = getCurrentResidence(player.getUniqueId()); + if (res == null) return; + if (!res.getPermissions().playerHas(player, Flags.command, FlagCombo.OnlyFalse)) return; @@ -629,12 +630,12 @@ else if (white == 0) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onFlagGuiClick(InventoryClickEvent event) { - if (this.getGUImap().size() == 0) + if (this.getGUImap().isEmpty()) return; Player player = (Player) event.getWhoClicked(); - if (!this.getGUImap().containsKey(player.getName())) + if (!this.getGUImap().containsKey(player.getUniqueId())) return; event.setCancelled(true); @@ -643,7 +644,7 @@ public void onFlagGuiClick(InventoryClickEvent event) { if (slot > 53 || slot < 0) return; - SetFlag setFlag = this.getGUImap().get(player.getName()); + SetFlag setFlag = this.getGUImap().get(player.getUniqueId()); ClickType click = event.getClick(); InventoryAction action = event.getAction(); setFlag.toggleFlag(slot, click, action); @@ -660,9 +661,7 @@ public void onFlagGuiClose(InventoryCloseEvent event) { if (this.getGUImap().isEmpty()) return; HumanEntity player = event.getPlayer(); - if (!this.getGUImap().containsKey(player.getName())) - return; - this.getGUImap().remove(player.getName()); + this.getGUImap().remove(player.getUniqueId()); } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @@ -840,14 +839,15 @@ public void onSignDestroy(BlockBreakEvent event) { @EventHandler(priority = EventPriority.MONITOR) public void onPlayerQuit(PlayerQuitEvent event) { String pname = event.getPlayer().getName(); - currentRes.remove(pname); - lastUpdate.remove(pname); - lastOutsideLoc.remove(pname); + currentRes.remove(event.getPlayer().getUniqueId()); + lastUpdate.remove(event.getPlayer().getUniqueId()); + lastOutsideLoc.remove(event.getPlayer().getUniqueId()); + plugin.getChatManager().removeFromChannel(pname); - plugin.getPlayerListener().removePlayerResidenceChat(pname); + plugin.getPlayerListener().removePlayerResidenceChat(event.getPlayer()); plugin.addOfflinePlayerToChache(event.getPlayer()); - if (plugin.getAutoSelectionManager().getList().containsKey(pname.toLowerCase())) - plugin.getAutoSelectionManager().getList().remove(pname); + + plugin.getAutoSelectionManager().getList().remove(pname.toLowerCase()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -898,7 +898,7 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); - lastUpdate.put(player.getName(), 0L); + lastUpdate.put(player.getUniqueId(), 0L); if (plugin.getPermissionManager().isResidenceAdmin(player)) { plugin.turnResAdminOn(player); } @@ -1870,13 +1870,13 @@ public void onPlayerMove(PlayerMoveEvent event) { if (name == null) return; - Long last = lastUpdate.get(name); + Long last = lastUpdate.get(player.getUniqueId()); long now = System.currentTimeMillis(); if (last != null) if (now - last < plugin.getConfigManager().getMinMoveUpdateInterval()) return; - this.lastUpdate.put(name, now); + this.lastUpdate.put(player.getUniqueId(), now); boolean handled = handleNewLocation(player, locto, true); if (!handled) @@ -1907,7 +1907,6 @@ private static boolean teleport(Player player, Location loc) { public boolean handleNewLocation(final Player player, Location loc, boolean move) { - String pname = player.getName(); ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); ClaimedResidence orres = res; @@ -1922,11 +1921,13 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move } } + UUID uuid = player.getUniqueId(); + ClaimedResidence ResOld = null; - if (currentRes.containsKey(pname)) { - ResOld = plugin.getResidenceManager().getByName(currentRes.get(pname)); + if (currentRes.containsKey(uuid)) { + ResOld = currentRes.get(uuid); if (ResOld == null) { - currentRes.remove(pname); + currentRes.remove(uuid); } else { if (res != null && ResOld.getName().equals(res.getName())) { @@ -1949,7 +1950,7 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move break; } if (location.getBlockY() <= 0) { - Location lastLoc = lastOutsideLoc.get(pname); + Location lastLoc = lastOutsideLoc.get(uuid); player.closeInventory(); boolean teleported = false; if (lastLoc != null) @@ -1971,7 +1972,7 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move player.setAllowFlight(false); } - lastOutsideLoc.put(pname, loc); + lastOutsideLoc.put(uuid, loc); return true; } } @@ -1988,7 +1989,7 @@ public void run() { } if (res == null) { - lastOutsideLoc.put(pname, loc); + lastOutsideLoc.put(uuid, loc); if (ResOld != null) { // New ResidenceChangeEvent @@ -2007,7 +2008,7 @@ public void run() { // plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); // } // } - currentRes.remove(pname); + currentRes.remove(uuid); } return true; } @@ -2016,7 +2017,7 @@ public void run() { if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !player.hasPermission( "residence.admin.move")) { - Location lastLoc = lastOutsideLoc.get(pname); + Location lastLoc = lastOutsideLoc.get(uuid); if (plugin.getConfigManager().BounceAnimation()) { Visualizer v = new Visualizer(player); @@ -2075,7 +2076,7 @@ public void run() { break; } if (location.getBlockY() <= 0) { - Location lastLoc = lastOutsideLoc.get(pname); + Location lastLoc = lastOutsideLoc.get(uuid); player.closeInventory(); if (lastLoc != null) teleported = teleport(player, lastLoc); @@ -2096,10 +2097,10 @@ public void run() { } } - lastOutsideLoc.put(pname, loc); + lastOutsideLoc.put(uuid, loc); - if (!currentRes.containsKey(pname) || ResOld != res) { - currentRes.put(pname, areaname); + if (!currentRes.containsKey(uuid) || ResOld != res) { + currentRes.put(uuid, res); // "from" residence for ResidenceChangedEvent // ClaimedResidence chgFrom = null; @@ -2232,13 +2233,11 @@ public void doHeals() { return; try { for (Player player : Bukkit.getServer().getOnlinePlayers()) { - String resname = plugin.getPlayerListener().getCurrentResidenceName(player.getName()); - ClaimedResidence res = null; - if (resname == null) - continue; + ClaimedResidence res = getCurrentResidence(player.getUniqueId()); - res = plugin.getResidenceManager().getByName(resname); + if (res == null) + continue; if (!res.getPermissions().has(Flags.healing, false)) continue; @@ -2258,12 +2257,11 @@ public void feed() { return; try { for (Player player : Bukkit.getServer().getOnlinePlayers()) { - String resname = plugin.getPlayerListener().getCurrentResidenceName(player.getName()); - if (resname == null) - continue; + ClaimedResidence res = getCurrentResidence(player.getUniqueId()); - ClaimedResidence res = plugin.getResidenceManager().getByName(resname); + if (res == null) + continue; if (!res.getPermissions().has(Flags.feed, false)) continue; @@ -2282,14 +2280,11 @@ public void DespawnMobs() { return; try { for (Player player : Bukkit.getServer().getOnlinePlayers()) { - String resname = plugin.getPlayerListener().getCurrentResidenceName(player.getName()); + ClaimedResidence res = getCurrentResidence(player.getUniqueId()); - if (resname == null) + if (res == null) continue; - ClaimedResidence res = null; - res = plugin.getResidenceManager().getByName(resname); - if (!res.getPermissions().has(Flags.nomobs, false)) continue; @@ -2313,7 +2308,7 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; String pname = event.getPlayer().getName(); - if (!chatenabled || !playerToggleChat.contains(pname)) + if (!chatenabled || !playerToggleChat.contains(event.getPlayer().getUniqueId())) return; ChatChannel channel = plugin.getChatManager().getPlayerChannel(pname); @@ -2324,25 +2319,31 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { } public void tooglePlayerResidenceChat(Player player, String residence) { - String pname = player.getName(); - playerToggleChat.add(pname); + playerToggleChat.add(player.getUniqueId()); plugin.msg(player, lm.Chat_ChatChannelChange, residence); } + @Deprecated public void removePlayerResidenceChat(String pname) { - playerToggleChat.remove(pname); - Player player = Bukkit.getPlayer(pname); - if (player != null) - plugin.msg(player, lm.Chat_ChatChannelLeave); + removePlayerResidenceChat(Bukkit.getPlayer(pname)); } public void removePlayerResidenceChat(Player player) { - String pname = player.getName(); - playerToggleChat.remove(pname); + if (player == null) + return; + playerToggleChat.remove(player.getUniqueId()); plugin.msg(player, lm.Chat_ChatChannelLeave); } - public String getCurrentResidenceName(String player) { - return currentRes.get(player); +// @Deprecated +// public String getCurrentResidenceName(UUID uuid) { +// ClaimedResidence r = currentRes.get(uuid); +// if (r == null) +// return null; +// return r.getName(); +// } + + public ClaimedResidence getCurrentResidence(UUID uuid) { + return currentRes.get(uuid); } } From 557c438a99fde531ab5620f34f40bc6dcf1b1a2e Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Oct 2018 15:52:04 +0300 Subject: [PATCH 0518/1142] Lets make copy of map when recovering from cached flags --- .../bekvon/bukkit/residence/ResidenceCommandListener.java | 1 - .../bukkit/residence/listeners/ResidencePlayerListener.java | 4 ---- .../bekvon/bukkit/residence/protection/FlagPermissions.java | 6 +++--- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index fd78cb67a..b44a89f38 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -37,7 +37,6 @@ public ResidenceCommandListener(Residence plugin) { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - Debug.D(command.getName() + " " + args.length); // if (args.length < 3) // return true; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index fc3fa26f9..2db04f5db 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1183,8 +1183,6 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } - Debug.D("check pot? " + isCanUseEntity(mat, block) + " " + mat); - if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; @@ -1897,11 +1895,9 @@ private static boolean teleport(Player player, Location loc) { // PlayerTeleportEvent ev = new PlayerTeleportEvent(player, player.getLocation(), loc); // Bukkit.getServer().getPluginManager().callEvent(ev); -// Debug.D("teleporting " + !ev.isCancelled()); if (!player.teleport(loc)) return false; -// Debug.D("tp " + player.teleport(loc)); return true; } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 2a2ef97c9..5392c7d26 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -686,7 +686,7 @@ protected static FlagPermissions load(Map root, FlagPermissions for (Entry one : ((HashMap) root.get("PlayerFlags")).entrySet()) { ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), one.getValue()); if (ft != null && !ft.isEmpty()) - t.put(one.getKey(), ft); + t.put(one.getKey(), new HashMap(ft)); } if (!t.isEmpty()) newperms.playerFlags = t; @@ -725,7 +725,7 @@ protected static FlagPermissions load(Map root, FlagPermissions for (Entry one : ((HashMap) root.get("GroupFlags")).entrySet()) { ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), one.getValue()); if (ft != null && !ft.isEmpty()) - t.put(one.getKey(), ft); + t.put(one.getKey(), new HashMap(ft)); } if (!t.isEmpty()) { newperms.groupFlags = t; @@ -748,7 +748,7 @@ protected static FlagPermissions load(Map root, FlagPermissions Map ft = new HashMap(); ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), (Integer) root.get("AreaFlags")); if (ft != null && !ft.isEmpty()) - newperms.cuboidFlags = ft; + newperms.cuboidFlags = new HashMap(ft); } } From 4b2c49112980b583331c1023c8927e44a9c3bc90 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Oct 2018 16:13:56 +0300 Subject: [PATCH 0519/1142] Lets protect basic shulker box block in residence --- src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java | 1 + src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java | 1 + src/com/bekvon/bukkit/residence/commands/setowner.java | 2 ++ 3 files changed, 4 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java index 999b7163d..1bbea15b1 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java @@ -181,6 +181,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(CMIMaterial.LIGHT_GRAY_SHULKER_BOX.getMaterial(), Flags.container); matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.SHULKER_BOX, Flags.container); /* 1.13 Shulker Box */ diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java index ea7747527..5631e0c7c 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java @@ -181,6 +181,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(CMIMaterial.LIGHT_GRAY_SHULKER_BOX.getMaterial(), Flags.container); matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); + matUseFlagList.put(Material.SHULKER_BOX, Flags.container); /* 1.13 Shulker Box */ diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index 401530325..d4d31465f 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -34,6 +34,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getTransactionManager().removeFromSale(area.getName()); area.getPermissions().applyDefaultFlags(); + plugin.getSignUtil().updateSignResName(area); + if (area.getParent() == null) { plugin.msg(sender, lm.Residence_OwnerChange, args[1], args[2]); } else { From 513209bf311b523daeee2a781472673edc434928 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Oct 2018 16:26:12 +0300 Subject: [PATCH 0520/1142] Lets check container permissions by block location, not by players... --- src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java | 1 + .../bukkit/residence/listeners/ResidencePlayerListener.java | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java index 5a3a697ab..94aaad3d0 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java @@ -174,6 +174,7 @@ public void addDefaultFlags(Map matUseFlagList) { matUseFlagList.put(CMIMaterial.LIGHT_GRAY_SHULKER_BOX.getMaterial(), Flags.container); matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); + } @Override diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 2db04f5db..2ef8f1632 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1235,8 +1235,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (isContainer(mat, block) || isCanUseEntity(mat, block)) { boolean hasuse = perms.playerHas(player, Flags.use, true); - ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res == null || !res.isOwner(player)) + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (res == null || !res.isOwner(player)){ for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { if (mat != checkMat.getKey()) continue; @@ -1256,7 +1256,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } return; } - + } if (plugin.getConfigManager().getCustomContainers().contains(blockM.getId())) { if (!perms.playerHas(player, Flags.container, hasuse)) { event.setCancelled(true); From d6ede1db1e4c097fba10393f923c4a08a975db55 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Oct 2018 17:31:30 +0300 Subject: [PATCH 0521/1142] Fixing WorldGuard 7 support issue --- src/com/bekvon/bukkit/residence/Residence.java | 17 +++++++++++++---- .../residence/selection/SelectionManager.java | 1 - .../residence/selection/WorldGuardUtil.java | 12 ++++++++++-- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index c96c64995..fdced5731 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -103,6 +103,8 @@ import com.bekvon.bukkit.residence.selection.WESchematicManager; import com.bekvon.bukkit.residence.selection.WorldEdit7SelectionManager; import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager; +import com.bekvon.bukkit.residence.selection.WorldGuard7Util; +import com.bekvon.bukkit.residence.selection.WorldGuardInterface; import com.bekvon.bukkit.residence.selection.WorldGuardUtil; import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; @@ -190,7 +192,7 @@ public class Residence extends JavaPlugin { protected AutoSelection AutoSelectionManager; protected WESchematicManager SchematicManager; private InformationPager InformationPagerManager; - private WorldGuardUtil worldGuardUtil; + private WorldGuardInterface worldGuardUtil; private KingdomsUtil kingdomsUtil; protected CommandFiller cmdFiller; @@ -1841,9 +1843,16 @@ public CMIMaterial getWorldEditTool() { return wepid; } - public WorldGuardUtil getWorldGuardUtil() { - if (worldGuardUtil == null) - worldGuardUtil = new WorldGuardUtil(this); + public WorldGuardInterface getWorldGuardUtil() { + if (worldGuardUtil == null) { + try { + Class.forName("com.sk89q.worldguard.WorldGuard"); + this.consoleMessage("WorldGuard7"); + worldGuardUtil = new WorldGuard7Util(this); + } catch (Exception e) { + worldGuardUtil = new WorldGuardUtil(this); + } + } return worldGuardUtil; } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index c52bcc91d..0e53031dd 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -10,7 +10,6 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; -import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.World; diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java index e1498e77f..41131ac1f 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -1,5 +1,7 @@ package com.bekvon.bukkit.residence.selection; +import java.lang.reflect.Method; + import org.bukkit.Location; import org.bukkit.entity.Player; @@ -13,13 +15,14 @@ import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion; -public class WorldGuardUtil { +public class WorldGuardUtil implements WorldGuardInterface { private Residence plugin; public WorldGuardUtil(Residence residence) { this.plugin = residence; } + @Override public ProtectedRegion getRegion(Player player, CuboidArea area) { if (area == null) @@ -40,7 +43,11 @@ public ProtectedRegion getRegion(Player player, CuboidArea area) { BlockVector max = new BlockVector(loc2.getX(), loc2.getY(), loc2.getZ()); ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); - RegionManager mgr = plugin.getWorldGuard().getRegionManager(loc1.getWorld()); + Method methd = plugin.getWorldGuard().getClass().getMethod("getRegionManager", loc1.getWorld().getClass()); + + RegionManager mgr = (RegionManager) methd.invoke(plugin.getWorldGuard(), loc1.getWorld()); + +// RegionManager mgr = plugin.getWorldGuard().getRegionManager(loc1.getWorld()); ApplicableRegionSet regions = mgr.getApplicableRegions(region); @@ -53,6 +60,7 @@ public ProtectedRegion getRegion(Player player, CuboidArea area) { return null; } + @Override public boolean isSelectionInArea(Player player) { if (plugin.getWorldGuard() == null) return false; From 21a05e79d4ce261d479ba50c2a6a965de7a70a10 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Nov 2018 11:57:35 +0200 Subject: [PATCH 0522/1142] Lets allow to use direct access to economy engines if needed --- .../bukkit/residence/ConfigManager.java | 16 +++ .../bekvon/bukkit/residence/Residence.java | 110 +++++++++++++----- .../residence/containers/EconomyType.java | 24 ++++ .../bukkit/residence/economy/CMIEconomy.java | 69 +++++++++++ .../residence/economy/TransactionManager.java | 25 ++-- .../residence/selection/WorldGuard7Util.java | 80 +++++++++++++ .../selection/WorldGuardInterface.java | 14 +++ src/plugin.yml | 2 +- 8 files changed, 297 insertions(+), 43 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/containers/EconomyType.java create mode 100644 src/com/bekvon/bukkit/residence/economy/CMIEconomy.java create mode 100644 src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java create mode 100644 src/com/bekvon/bukkit/residence/selection/WorldGuardInterface.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 825b5952b..ef4886f1e 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -28,6 +28,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.EconomyType; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; @@ -40,6 +41,7 @@ public class ConfigManager { protected boolean useLeases; protected boolean ResMoneyBack; protected boolean enableEconomy; + private EconomyType VaultEconomy; protected boolean ExtraEnterMessage; protected boolean adminsOnly; protected boolean allowEmptyResidences; @@ -801,6 +803,16 @@ public void UpdateConfigFile() { "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); enableEconomy = c.get("Global.EnableEconomy", true); + c.getW().addComment("Global.Type", + "Defaults to None which will start by looking to default economy engine throw vault API and if it fails to any supported economy engine", + "Custom economy engines can be defined to access economy directly", "Supported variables: " + EconomyType.toStringLine()); + VaultEconomy = EconomyType.getByName(c.get("Global.Type", "None")); + if (VaultEconomy == null) { + plugin.consoleMessage("&cCould not determine economy from " + c.get("Global.Type", "Vault")); + plugin.consoleMessage("&cTrying to find suitable economy system"); + VaultEconomy = EconomyType.None; + } + c.getW().addComment("Global.ExtraEnterMessage", "When enabled extra message will apear in chat if residence is for rent or for sell to inform how he can rent/buy residence with basic information."); ExtraEnterMessage = c.get("Global.ExtraEnterMessage", true); @@ -1856,6 +1868,10 @@ public boolean isConsoleLogsShowFlagChanges() { return ConsoleLogsShowFlagChanges; } + public EconomyType getEconomyType() { + return VaultEconomy; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index fdced5731..6fa457c48 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -70,6 +70,7 @@ import com.bekvon.bukkit.residence.dynmap.DynMapManager; import com.bekvon.bukkit.residence.economy.BOSEAdapter; import com.bekvon.bukkit.residence.economy.BlackHoleEconomy; +import com.bekvon.bukkit.residence.economy.CMIEconomy; import com.bekvon.bukkit.residence.economy.EconomyInterface; import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter; import com.bekvon.bukkit.residence.economy.IConomy5Adapter; @@ -623,31 +624,71 @@ public void onEnable() { if (in != null) in.close(); } + economy = null; if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { Bukkit.getConsoleSender().sendMessage(getPrefix() + " Scanning for economy systems..."); - if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { - ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); - if (vault.economyOK()) { - economy = vault; - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found Vault using economy system: " + vault.getEconomyName()); - } - } - if (economy == null) { - this.loadVaultEconomy(); - } - if (economy == null) { + switch (this.getConfigManager().getEconomyType()) { + case BOSEconomy: this.loadBOSEconomy(); - } - if (economy == null) { + break; + case CMIEconomy: + this.loadCMIEconomy(); + break; + case Essentials: this.loadEssentialsEconomy(); - } - if (economy == null) { + break; + case MineConomy: + break; + case None: + if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { + ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); + if (vault.economyOK()) { + economy = vault; + consoleMessage("Found Vault using economy system: &5" + vault.getEconomyName()); + } + } + if (economy == null) { + this.loadVaultEconomy(); + } + if (economy == null) { + this.loadCMIEconomy(); + } + if (economy == null) { + this.loadBOSEconomy(); + } + if (economy == null) { + this.loadEssentialsEconomy(); + } + if (economy == null) { + this.loadRealEconomy(); + } + if (economy == null) { + this.loadIConomy(); + } + break; + case RealEconomy: this.loadRealEconomy(); - } - if (economy == null) { + break; + case Vault: + if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { + ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); + if (vault.economyOK()) { + economy = vault; + consoleMessage("Found Vault using economy system: &5" + vault.getEconomyName()); + } + } + if (economy == null) { + this.loadVaultEconomy(); + } + break; + case iConomy: this.loadIConomy(); + break; + default: + break; } + if (economy == null) { Bukkit.getConsoleSender().sendMessage(getPrefix() + " Unable to find an economy system..."); economy = new BlackHoleEconomy(); @@ -1095,12 +1136,13 @@ private void loadIConomy() { } else if (p.getDescription().getVersion().startsWith("5")) { economy = new IConomy5Adapter(); } else { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " UNKNOWN iConomy version!"); + consoleMessage("UNKNOWN iConomy version!"); return; } - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Successfully linked with iConomy! Version: " + p.getDescription().getVersion()); + consoleMessage("Successfully linked with &5iConomy"); + consoleMessage("Version: " + p.getDescription().getVersion()); } else { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " iConomy NOT found!"); + consoleMessage("iConomy NOT found!"); } } @@ -1108,9 +1150,9 @@ private void loadBOSEconomy() { Plugin p = getServer().getPluginManager().getPlugin("BOSEconomy"); if (p != null) { economy = new BOSEAdapter((BOSEconomy) p); - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Successfully linked with BOSEconomy!"); + consoleMessage("Successfully linked with &5BOSEconomy"); } else { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " BOSEconomy NOT found!"); + consoleMessage("BOSEconomy NOT found!"); } } @@ -1118,9 +1160,19 @@ private void loadEssentialsEconomy() { Plugin p = getServer().getPluginManager().getPlugin("Essentials"); if (p != null) { economy = new EssentialsEcoAdapter((Essentials) p); - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Successfully linked with Essentials Economy!"); + consoleMessage("Successfully linked with &5Essentials Economy"); + } else { + consoleMessage("Essentials Economy NOT found!"); + } + } + + private void loadCMIEconomy() { + Plugin p = getServer().getPluginManager().getPlugin("CMI"); + if (p != null) { + economy = new CMIEconomy(); + consoleMessage("Successfully linked with &5CMIEconomy"); } else { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Essentials Economy NOT found!"); + consoleMessage("CMIEconomy NOT found!"); } } @@ -1128,9 +1180,9 @@ private void loadRealEconomy() { Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); if (p != null) { economy = new RealShopEconomy(new RealEconomy((RealPlugin) p)); - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Successfully linked with RealShop Economy!"); + consoleMessage("Successfully linked with &5RealShop Economy"); } else { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " RealShop Economy NOT found!"); + consoleMessage("RealShop Economy NOT found!"); } } @@ -1139,13 +1191,13 @@ private void loadVaultEconomy() { if (p != null) { ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); if (vault.economyOK()) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found Vault using economy: " + vault.getEconomyName()); + consoleMessage("Found Vault using economy: &5" + vault.getEconomyName()); economy = vault; } else { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found Vault, but Vault reported no usable economy system..."); + consoleMessage("Found Vault, but Vault reported no usable economy system..."); } } else { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Vault NOT found!"); + consoleMessage("Vault NOT found!"); } } diff --git a/src/com/bekvon/bukkit/residence/containers/EconomyType.java b/src/com/bekvon/bukkit/residence/containers/EconomyType.java new file mode 100644 index 000000000..a600283d9 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/EconomyType.java @@ -0,0 +1,24 @@ +package com.bekvon.bukkit.residence.containers; + +public enum EconomyType { + + Vault, iConomy, MineConomy, Essentials, BOSEconomy, RealEconomy, CMIEconomy, None; + + public static EconomyType getByName(String string) { + for (EconomyType one : EconomyType.values()) { + if (one.toString().equalsIgnoreCase(string)) + return one; + } + return null; + } + + public static String toStringLine() { + String l = ""; + for (EconomyType one : EconomyType.values()) { + if (!l.isEmpty()) + l += ", "; + l += one.toString(); + } + return l; + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java b/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java new file mode 100644 index 000000000..30a8a37ec --- /dev/null +++ b/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java @@ -0,0 +1,69 @@ +package com.bekvon.bukkit.residence.economy; + +import com.Zrips.CMI.CMI; +import com.Zrips.CMI.Containers.CMIUser; + +public class CMIEconomy implements EconomyInterface { + + public CMIEconomy() { + } + + @Override + public double getBalance(String playerName) { + CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); + return user == null ? 0D : user.getBalance(); + } + + @Override + public boolean canAfford(String playerName, double amount) { + CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); + if (user != null && user.getBalance() >= amount) { + return true; + } + return false; + } + + @Override + public boolean add(String playerName, double amount) { + CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); + if (user != null) + user.deposit(amount); + return true; + } + + @Override + public boolean subtract(String playerName, double amount) { + if (!canAfford(playerName, amount)) { + return false; + } + CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); + if (user != null) + user.withdraw(amount); + return true; + } + + @Override + public boolean transfer(String playerFrom, String playerTo, double amount) { + if (!canAfford(playerFrom, amount)) { + return false; + } + if (subtract(playerFrom, amount)) { + if (!add(playerTo, amount)) { + add(playerFrom, amount); + return false; + } + return true; + } + return false; + } + + @Override + public String getName() { + return "CMIEconomy"; + } + + @Override + public String format(double amount) { + return CMI.getInstance().getEconomyManager().format(amount); + } +} diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 8b29fd29d..aee1a840f 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -1,18 +1,5 @@ package com.bekvon.bukkit.residence.economy; -import org.bukkit.ChatColor; - -import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.Debug; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.api.MarketBuyInterface; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.Visualizer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -20,9 +7,21 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; + +import org.bukkit.ChatColor; import org.bukkit.Server; import org.bukkit.entity.Player; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.api.MarketBuyInterface; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.text.help.PageInfo; + public class TransactionManager implements MarketBuyInterface { private Set sellAmount; private Residence plugin; diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java b/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java new file mode 100644 index 000000000..15ddc2a9a --- /dev/null +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java @@ -0,0 +1,80 @@ +package com.bekvon.bukkit.residence.selection; + +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Visualizer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.managers.RegionManager; +import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; + +public class WorldGuard7Util implements WorldGuardInterface { + private Residence plugin; + + public WorldGuard7Util(Residence residence) { + this.plugin = residence; + } + + @Override + public ProtectedRegion getRegion(Player player, CuboidArea area) { + + if (area == null) + return null; + + if (plugin.getWorldGuard() == null) + return null; + + if (plugin.getWorldEdit() == null) + return null; + + Location loc1 = area.getLowLoc(); + Location loc2 = area.getHighLoc(); + + String id = "icp__tempregion"; + try { + BlockVector min = new BlockVector(loc1.getX(), loc1.getY(), loc1.getZ()); + BlockVector max = new BlockVector(loc2.getX(), loc2.getY(), loc2.getZ()); + ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); + + World w = WorldGuard.getInstance().getPlatform().getWorldByName(loc1.getWorld().getName()); + RegionManager mgr = WorldGuard.getInstance().getPlatform().getRegionContainer().get(w); + + ApplicableRegionSet regions = mgr.getApplicableRegions(region); + + for (ProtectedRegion one : regions.getRegions()) { + if (!player.hasPermission("residence.worldguard." + one.getId())) + return one; + } + } catch (Exception | IncompatibleClassChangeError e) { + } + return null; + } + + @Override + public boolean isSelectionInArea(Player player) { + if (plugin.getWorldGuard() == null) + return false; + + ProtectedRegion Region = getRegion(player, plugin.getSelectionManager().getSelectionCuboid(player)); + if (Region == null) + return false; + + plugin.msg(player, lm.Select_WorldGuardOverlap, Region.getId()); + Location lowLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), + Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); + Location highLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), + Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); + Visualizer v = new Visualizer(player); + v.setAreas(plugin.getSelectionManager().getSelectionCuboid(player)); + v.setErrorAreas(new CuboidArea(lowLoc, highLoc)); + plugin.getSelectionManager().showBounds(player, v); + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardInterface.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardInterface.java new file mode 100644 index 000000000..33f119f64 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardInterface.java @@ -0,0 +1,14 @@ +package com.bekvon.bukkit.residence.selection; + +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; + +public interface WorldGuardInterface { + + ProtectedRegion getRegion(Player player, CuboidArea area); + + boolean isSelectionInArea(Player player); + +} diff --git a/src/plugin.yml b/src/plugin.yml index c186263c5..7b0bcea09 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.2.0 +version: 4.8.3.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From b6fdcedabf51ce655f419044f34e5167b10ffd0c Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Nov 2018 12:59:49 +0200 Subject: [PATCH 0523/1142] Note block should be left and right clickable --- .../bukkit/residence/allNms/v1_10_R1.java | 1 + .../bukkit/residence/allNms/v1_11_R1.java | 1 + .../bukkit/residence/allNms/v1_12_R1.java | 1 + .../bukkit/residence/allNms/v1_13_R1.java | 1 + .../bukkit/residence/allNms/v1_13_R2.java | 1 + .../bukkit/residence/allNms/v1_7_R4.java | 1 + .../bukkit/residence/allNms/v1_8_R1.java | 1 + .../bukkit/residence/allNms/v1_8_R2.java | 1 + .../bukkit/residence/allNms/v1_8_R3.java | 1 + .../bukkit/residence/allNms/v1_9_R1.java | 1 + .../bukkit/residence/allNms/v1_9_R2.java | 1 + .../listeners/ResidencePlayerListener.java | 18 ++++++++++++++---- 12 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java index d60622269..b7f9e3bef 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java @@ -95,6 +95,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { switch (CMIMaterial.get(mat)) { case LEVER: case PISTON: + case NOTE_BLOCK: case STICKY_PISTON: case DRAGON_EGG: return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java index 43342ee16..8d65fca5f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java @@ -99,6 +99,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { switch (CMIMaterial.get(mat)) { case LEVER: case PISTON: + case NOTE_BLOCK: case STICKY_PISTON: case DRAGON_EGG: return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java index 94aaad3d0..556f18ad6 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java @@ -101,6 +101,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { switch (CMIMaterial.get(mat)) { case LEVER: case PISTON: + case NOTE_BLOCK: case STICKY_PISTON: case DRAGON_EGG: return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java index 1bbea15b1..b19ae896f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java @@ -114,6 +114,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { switch (CMIMaterial.get(mat)) { case LEVER: case PISTON: + case NOTE_BLOCK: case STICKY_PISTON: case DRAGON_EGG: return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java index 5631e0c7c..fb24d8b29 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java @@ -115,6 +115,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { case LEVER: case PISTON: case STICKY_PISTON: + case NOTE_BLOCK: case DRAGON_EGG: return true; default: diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java index 6076837f3..ed1d7d79e 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java @@ -78,6 +78,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { switch (CMIMaterial.get(mat)) { case LEVER: case PISTON: + case NOTE_BLOCK: case STICKY_PISTON: case DRAGON_EGG: return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java index 114eb09b2..f45443db9 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java @@ -82,6 +82,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { switch (CMIMaterial.get(mat)) { case LEVER: case PISTON: + case NOTE_BLOCK: case STICKY_PISTON: case DRAGON_EGG: return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java index 51becccfe..748a451ef 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java @@ -82,6 +82,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { switch (CMIMaterial.get(mat)) { case LEVER: case PISTON: + case NOTE_BLOCK: case STICKY_PISTON: case DRAGON_EGG: return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java index 6c4dbf210..2197aa17d 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java @@ -82,6 +82,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { switch (CMIMaterial.get(mat)) { case LEVER: case PISTON: + case NOTE_BLOCK: case STICKY_PISTON: case DRAGON_EGG: return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java index 5d4c2902a..401d4fd49 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java @@ -83,6 +83,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { switch (CMIMaterial.get(mat)) { case LEVER: case PISTON: + case NOTE_BLOCK: case STICKY_PISTON: case DRAGON_EGG: return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java index 150a4c2ef..8a541afca 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java @@ -83,6 +83,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { switch (CMIMaterial.get(mat)) { case LEVER: case PISTON: + case NOTE_BLOCK: case STICKY_PISTON: case DRAGON_EGG: return true; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 2ef8f1632..72bb41866 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -76,7 +76,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import cmiLib.ActionBarTitleMessages; @@ -956,7 +955,6 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { case "COMMAND": case "ANVIL": case "CAKE_BLOCK": - case "NOTE_BLOCK": case "DIODE": case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": @@ -1082,6 +1080,7 @@ public void onSelection(PlayerInteractEvent event) { boolean resadmin = plugin.isResAdminOn(player); if (player.hasMetadata("NPC")) return; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group @@ -1166,6 +1165,10 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); + + if (!plugin.getNms().isMainHand(event)) + return; + ItemStack iih = plugin.getNms().itemInMainHand(player); CMIMaterial heldItem = CMIMaterial.get(iih); @@ -1236,7 +1239,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (isContainer(mat, block) || isCanUseEntity(mat, block)) { boolean hasuse = perms.playerHas(player, Flags.use, true); ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - if (res == null || !res.isOwner(player)){ + if (res == null || !res.isOwner(player)) { for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { if (mat != checkMat.getKey()) continue; @@ -1252,8 +1255,15 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use); + plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); + return; } + + if (plugin.getNms().isCanUseEntity_BothClick(mat, block)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); + } + return; } } From 8cc5c7a108a11b76ced4f08e4ea3bb54652cb871 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Nov 2018 13:04:58 +0200 Subject: [PATCH 0524/1142] We don't need to get blockstate here. --- src/com/bekvon/bukkit/residence/utils/RandomTp.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 0c52f51b9..a61635773 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -112,10 +112,10 @@ public Location getRandomlocation(World world) { if (!plugin.getNms().isEmptyBlock(loc.getBlock())) continue; - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA) + if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.LAVA)) continue; - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER) + if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.WATER)) continue; ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); From 203f4724b353ba77918825f9de03cf9154d2797a Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Nov 2018 14:26:10 +0200 Subject: [PATCH 0525/1142] Slight optimization for random tp --- src/com/bekvon/bukkit/residence/commands/rt.java | 4 +++- src/com/bekvon/bukkit/residence/utils/RandomTp.java | 12 +++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 64ce19443..38899e0de 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -15,6 +15,7 @@ import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.utils.Debug; public class rt implements cmd { @@ -96,8 +97,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(sender, lm.RandomTeleport_Disabled); return true; } - + Long time = System.currentTimeMillis(); Location loc = plugin.getRandomTpManager().getRandomlocation(wname); + Debug.D(System.currentTimeMillis() - time); plugin.getRandomTeleportMap().put(tPlayer.getName(), System.currentTimeMillis()); if (loc == null) { diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index a61635773..2beaf00d7 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -88,12 +88,8 @@ public Location getRandomlocation(World world) { loc = new Location(world, x, world.getMaxHeight(), z); - int dir = random.nextInt(359); - int max = loc.getWorld().getMaxHeight(); - max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; - - loc.setYaw(dir); + max = loc.getWorld().getEnvironment().equals(Environment.NETHER) ? 100 : world.getHighestBlockAt(loc).getY() + 1; for (int i = max; i > 0; i--) { loc.setY(i); @@ -126,6 +122,12 @@ public Location getRandomlocation(World world) { loc.setY(loc.getY() + 2); break; } + + if (loc != null) { + int dir = random.nextInt(359); + loc.setYaw(dir); + } + return loc; } From ffe8247893a2c1686db198d79d24b45fab026112 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Nov 2018 15:13:42 +0200 Subject: [PATCH 0526/1142] Lets properly calculate auto command when ignoring Y --- .../bukkit/residence/commands/auto.java | 29 +++++++++++++------ .../bukkit/residence/economy/BOSEAdapter.java | 7 +++++ .../residence/economy/BlackHoleEconomy.java | 7 +++++ .../bukkit/residence/economy/CMIEconomy.java | 8 +++++ .../residence/economy/EconomyInterface.java | 4 +++ .../economy/EssentialsEcoAdapter.java | 14 +++++++++ .../residence/economy/IConomy5Adapter.java | 8 +++++ .../residence/economy/IConomy6Adapter.java | 7 +++++ .../residence/economy/RealShopEconomy.java | 7 +++++ .../vaultinterface/ResidenceVaultAdapter.java | 10 +++++-- 10 files changed, 89 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 65c66ae78..8e22bd019 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -17,6 +17,7 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; public class auto implements cmd { @@ -135,6 +136,12 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo int skipped = 0; int done = 0; while (true) { + if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { + if (dir.equals(direction.Top) || dir.equals(direction.Bottom)) { + dir = dir.getNext(); + continue; + } + } done++; if (skipped >= 6) { @@ -142,8 +149,9 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo } // fail safe if loop keeps going on - if (done > 10000) + if (done > 100000) { break; + } if (locked.contains(dir)) { dir = dir.getNext(); @@ -159,7 +167,8 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo c.getLowLoc().setY(0); locked.add(dir); dir = dir.getNext(); - skipped++; + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) + skipped++; continue; } @@ -167,7 +176,8 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo c.getHighLoc().setY(c.getWorld().getMaxHeight() - 1); locked.add(dir); dir = dir.getNext(); - skipped++; + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) + skipped++; continue; } @@ -185,12 +195,13 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo continue; } - if (c.getYSize() >= group.getMaxY() - group.getMinY()) { - locked.add(dir); - dir = dir.getNext(); - skipped++; - continue; - } + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) + if (c.getYSize() >= group.getMaxY() - group.getMinY()) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } if (c.getZSize() >= group.getMaxZ() - group.getMinZ()) { locked.add(dir); diff --git a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java index b171671e7..13065690b 100644 --- a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java @@ -1,5 +1,7 @@ package com.bekvon.bukkit.residence.economy; +import org.bukkit.entity.Player; + import com.bekvon.bukkit.residence.Residence; import cosine.boseconomy.BOSEconomy; @@ -16,6 +18,11 @@ public BOSEAdapter(BOSEconomy p) { } } + @Override + public double getBalance(Player player) { + return plugin.getPlayerMoneyDouble(player.getName()); + } + @Override public double getBalance(String playerName) { return plugin.getPlayerMoneyDouble(playerName); diff --git a/src/com/bekvon/bukkit/residence/economy/BlackHoleEconomy.java b/src/com/bekvon/bukkit/residence/economy/BlackHoleEconomy.java index 965529a2e..6d18840d4 100644 --- a/src/com/bekvon/bukkit/residence/economy/BlackHoleEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/BlackHoleEconomy.java @@ -1,10 +1,17 @@ package com.bekvon.bukkit.residence.economy; +import org.bukkit.entity.Player; + public class BlackHoleEconomy implements EconomyInterface { public BlackHoleEconomy() { } + @Override + public double getBalance(Player player) { + return 0D; + } + @Override public double getBalance(String playerName) { return 0D; diff --git a/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java b/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java index 30a8a37ec..4ff69c437 100644 --- a/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java @@ -1,5 +1,7 @@ package com.bekvon.bukkit.residence.economy; +import org.bukkit.entity.Player; + import com.Zrips.CMI.CMI; import com.Zrips.CMI.Containers.CMIUser; @@ -8,6 +10,12 @@ public class CMIEconomy implements EconomyInterface { public CMIEconomy() { } + @Override + public double getBalance(Player player) { + CMIUser user = CMI.getInstance().getPlayerManager().getUser(player); + return user == null ? 0D : user.getBalance(); + } + @Override public double getBalance(String playerName) { CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); diff --git a/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java b/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java index e9911ce87..d9264d65b 100644 --- a/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java +++ b/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java @@ -1,6 +1,10 @@ package com.bekvon.bukkit.residence.economy; +import org.bukkit.entity.Player; + public interface EconomyInterface { + public double getBalance(Player player); + public double getBalance(String playerName); public boolean canAfford(String playerName, double amount); diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index 7de5b7c73..180e81911 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -1,5 +1,7 @@ package com.bekvon.bukkit.residence.economy; +import org.bukkit.entity.Player; + import com.bekvon.bukkit.residence.Residence; import com.earth2me.essentials.Essentials; import com.earth2me.essentials.api.Economy; @@ -18,6 +20,18 @@ public EssentialsEcoAdapter(Essentials p) { } } + @Override + public double getBalance(Player player) { + try { + if (Economy.playerExists(player.getName())) { + return Economy.getMoney(player.getName()); + } + return 0; + } catch (UserDoesNotExistException ex) { + return 0; + } + } + @SuppressWarnings("deprecation") @Override public double getBalance(String playerName) { diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java index cff7302e1..a46872dc4 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java @@ -1,10 +1,18 @@ package com.bekvon.bukkit.residence.economy; +import org.bukkit.entity.Player; + import com.iConomy.iConomy; import com.iConomy.system.Account; public class IConomy5Adapter implements EconomyInterface { + @Override + public double getBalance(Player player) { + Account acc = iConomy.getAccount(player.getName()); + return (acc == null) ? 0 : acc.getHoldings().balance(); + } + @Override public double getBalance(String playerName) { Account acc = iConomy.getAccount(playerName); diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java index 4c8315c65..a4b8f97f9 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java @@ -1,5 +1,7 @@ package com.bekvon.bukkit.residence.economy; +import org.bukkit.entity.Player; + import com.iCo6.iConomy; import com.iCo6.system.Account; import com.iCo6.system.Accounts; @@ -12,6 +14,11 @@ public IConomy6Adapter(iConomy iconomy) { icon = iconomy; } + @Override + public double getBalance(Player player) { + checkExist(player.getName()); + return new Accounts().get(player.getName()).getHoldings().getBalance(); + } @Override public double getBalance(String playerName) { checkExist(playerName); diff --git a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java index b648cfb8f..c2960fe85 100644 --- a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java @@ -1,5 +1,7 @@ package com.bekvon.bukkit.residence.economy; +import org.bukkit.entity.Player; + import fr.crafter.tickleman.realeconomy.RealEconomy; public class RealShopEconomy implements EconomyInterface { @@ -10,6 +12,11 @@ public RealShopEconomy(RealEconomy e) { plugin = e; } + @Override + public double getBalance(Player player) { + return plugin.getBalance(player.getName()); + } + @Override public double getBalance(String playerName) { return plugin.getBalance(playerName); diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 3aad7ab2c..b6d36a974 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -91,6 +91,11 @@ public static boolean hasPermission(OfflinePlayer player, String perm, String wo } } + @Override + public double getBalance(Player player) { + return economy.getBalance(player); + } + @SuppressWarnings("deprecation") @Override public double getBalance(String playerName) { @@ -155,9 +160,8 @@ public String getName() { } @Override - public String format(double amount) { + public String format(double amount) { return economy.format(amount); } - - + } \ No newline at end of file From aba6a3798dadf32eff200ed14b313b09810b770a Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Nov 2018 16:03:33 +0200 Subject: [PATCH 0527/1142] Lets unify material definition for flags by CMIMaterial values Some NMS cleanup as its deprecated now --- src/cmiLib/ItemManager.java | 24 ++-- src/cmiLib/RawMessage.java | 2 - .../bekvon/bukkit/residence/Residence.java | 3 +- .../residence/ResidenceCommandListener.java | 5 +- .../bukkit/residence/allNms/v1_10_R1.java | 81 -------------- .../bukkit/residence/allNms/v1_11_R1.java | 97 ---------------- .../bukkit/residence/allNms/v1_12_R1.java | 98 ----------------- .../bukkit/residence/allNms/v1_13_R1.java | 104 ------------------ .../bukkit/residence/allNms/v1_13_R2.java | 104 ------------------ .../residence/allNms/v1_7_Couldron.java | 64 ----------- .../bukkit/residence/allNms/v1_7_R4.java | 64 ----------- .../bukkit/residence/allNms/v1_8_R1.java | 86 +-------------- .../bukkit/residence/allNms/v1_8_R2.java | 80 -------------- .../bukkit/residence/allNms/v1_8_R3.java | 80 -------------- .../bukkit/residence/allNms/v1_9_R1.java | 80 -------------- .../bukkit/residence/allNms/v1_9_R2.java | 80 -------------- .../bukkit/residence/containers/NMS.java | 10 -- .../listeners/ResidencePlayerListener.java | 59 +++++++++- .../protection/ClaimedResidence.java | 9 +- .../residence/protection/FlagPermissions.java | 60 ++++------ .../residence/protection/PlayerManager.java | 1 - .../protection/ResidenceManager.java | 1 - .../protection/ResidencePermissions.java | 1 - .../bukkit/residence/utils/RandomTp.java | 5 +- 24 files changed, 107 insertions(+), 1091 deletions(-) diff --git a/src/cmiLib/ItemManager.java b/src/cmiLib/ItemManager.java index e144e3d81..c41caf763 100644 --- a/src/cmiLib/ItemManager.java +++ b/src/cmiLib/ItemManager.java @@ -1541,9 +1541,7 @@ public enum CMIMaterial { LEGACY_STATIONARY_WATER(9, 0, -1, "Stationary Water", ""), LEGACY_STATIONARY_LAVA(11, 0, -1, "Stationary Lava", ""), LEGACY_BURNING_FURNACE(62, 0, -1, "Burning Furnace", ""), - LEGACY_WOODEN_DOOR_BLOCK(64, 0, -1, "Wooden Door Block", ""), LEGACY_NETHER_WARTS(115, -1, -1, "Nether Warts", ""), - LEGACY_IRON_DOOR_BLOCK(71, 0, -1, "Iron Door Block", ""), LEGACY_GLOWING_REDSTON_ORE(74, 0, -1, "Glowing Redstone Ore", ""), LEGACY_SUGAR_CANE_BLOCK(83, -1, -1, "Sugar Cane Block", ""), LEGACY_RAW_FISH(349, 0, -1, "Raw Fish", ""), @@ -1565,11 +1563,13 @@ public enum CMIMaterial { // LEGACY_WALL_BANNER(177, -1, -1, "LEGACY_WALL_BANNER", ""), // LEGACY_DAYLIGHT_DETECTOR_INVERTED(178, -1, -1, "LEGACY_DAYLIGHT_DETECTOR_INVERTED", ""), // LEGACY_DOUBLE_STONE_SLAB2(181, -1, -1, "LEGACY_DOUBLE_STONE_SLAB2", ""), -// LEGACY_SPRUCE_DOOR(193, -1, -1, "LEGACY_SPRUCE_DOOR", ""), -// LEGACY_BIRCH_DOOR(194, -1, -1, "LEGACY_BIRCH_DOOR", ""), -// LEGACY_JUNGLE_DOOR(195, -1, -1, "LEGACY_JUNGLE_DOOR", ""), -// LEGACY_ACACIA_DOOR(196, -1, -1, "LEGACY_ACACIA_DOOR", ""), -// LEGACY_DARK_OAK_DOOR(197, -1, -1, "LEGACY_DARK_OAK_DOOR", ""), + LEGACY_IRON_DOOR_BLOCK(71, 0, -1, "Iron Door Block"), + LEGACY_WOODEN_DOOR(64, 0, -1, "Wooden Door Block"), + LEGACY_SPRUCE_DOOR(193, 0, -1, "Spruce Door Block"), + LEGACY_BIRCH_DOOR(194, 0, -1, "Birch Door Block"), + LEGACY_JUNGLE_DOOR(195, 0, -1, "Jungle Door Block"), + LEGACY_ACACIA_DOOR(196, 0, -1, "Acacia Door Block"), + LEGACY_DARK_OAK_DOOR(197, 0, -1, "Dark Oak Door Block"), // LEGACY_PURPUR_DOUBLE_SLAB(204, -1, -1, "LEGACY_PURPUR_DOUBLE_SLAB", ""), // LEGACY_COMMAND_REPEATING(210, -1, -1, "LEGACY_COMMAND_REPEATING", ""), // LEGACY_COMMAND_CHAIN(211, -1, -1, "LEGACY_COMMAND_CHAIN", ""), @@ -2242,6 +2242,7 @@ public boolean isWool() { return false; } + public static boolean isShulkerBox(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2325,6 +2326,15 @@ public boolean isDoor() { switch (this) { case OAK_DOOR: case IRON_DOOR: + + case LEGACY_SPRUCE_DOOR: + case LEGACY_BIRCH_DOOR: + case LEGACY_JUNGLE_DOOR: + case LEGACY_ACACIA_DOOR: + case LEGACY_DARK_OAK_DOOR: + case LEGACY_WOODEN_DOOR: + case LEGACY_IRON_DOOR_BLOCK: + // case SPRUCE_DOOR_ITEM: // case BIRCH_DOOR_ITEM: // case JUNGLE_DOOR_ITEM: diff --git a/src/cmiLib/RawMessage.java b/src/cmiLib/RawMessage.java index 499cda0d1..8fdba1fde 100644 --- a/src/cmiLib/RawMessage.java +++ b/src/cmiLib/RawMessage.java @@ -17,8 +17,6 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; - import cmiLib.VersionChecker.Version; diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 6fa457c48..9171afaf4 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -60,7 +60,6 @@ import com.bekvon.bukkit.residence.api.ResidenceInterface; import com.bekvon.bukkit.residence.api.ResidencePlayerInterface; import com.bekvon.bukkit.residence.chat.ChatManager; -import com.bekvon.bukkit.residence.containers.ABInterface; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeFlags; import com.bekvon.bukkit.residence.containers.MinimizeMessages; @@ -131,9 +130,9 @@ import cmiLib.ActionBarTitleMessages; import cmiLib.ItemManager; +import cmiLib.ItemManager.CMIMaterial; import cmiLib.RawMessage; import cmiLib.VersionChecker; -import cmiLib.ItemManager.CMIMaterial; import cmiLib.VersionChecker.Version; import cosine.boseconomy.BOSEconomy; import fr.crafter.tickleman.realeconomy.RealEconomy; diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index b44a89f38..be66eac50 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1,11 +1,11 @@ package com.bekvon.bukkit.residence; -import java.util.logging.Level; -import java.util.logging.Logger; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -17,7 +17,6 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceCommandListener implements CommandExecutor { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java index b7f9e3bef..b0e28bda4 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java @@ -2,11 +2,9 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; @@ -33,12 +31,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import cmiLib.CMIEffect; -import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_10_R1.EnumParticle; import net.minecraft.server.v1_10_R1.Packet; import net.minecraft.server.v1_10_R1.PacketPlayOutWorldParticles; @@ -74,87 +69,11 @@ public boolean isArmorStandEntity(EntityType ent) { return ent == EntityType.ARMOR_STAND; } - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (CMIMaterial.get(mat)) { - case LEVER: - case PISTON: - case NOTE_BLOCK: - case STICKY_PISTON: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - CMIMaterial cm = CMIMaterial.get(block); - switch (cm) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - if (CMIMaterial.get(block).isSapling()) - return true; - if (CMIMaterial.get(block).isAir()) - return true; - if (CMIMaterial.get(block).isButton()) - return true; - - return false; - } - @Override public boolean isSpectator(GameMode mode) { return mode == GameMode.SPECTATOR; } - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return event.getHand() == EquipmentSlot.HAND ? true : false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java index 8d65fca5f..11f52c2e3 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java @@ -2,11 +2,9 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer; @@ -35,12 +33,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import cmiLib.CMIEffect; -import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_11_R1.EnumParticle; import net.minecraft.server.v1_11_R1.Packet; import net.minecraft.server.v1_11_R1.PacketPlayOutWorldParticles; @@ -78,103 +73,11 @@ public boolean isArmorStandEntity(EntityType ent) { return ent == EntityType.ARMOR_STAND; } - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (CMIMaterial.get(mat)) { - case LEVER: - case PISTON: - case NOTE_BLOCK: - case STICKY_PISTON: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - if (CMIMaterial.get(block).isSapling()) - return true; - if (CMIMaterial.get(block).isAir()) - return true; - if (CMIMaterial.get(block).isButton()) - return true; - return false; - } - @Override public boolean isSpectator(GameMode mode) { return mode == GameMode.SPECTATOR; } - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); - - /* 1.11 Shulker Box */ - matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.BLUE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.BROWN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.CYAN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.GRAY_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.GREEN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.LIGHT_BLUE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.LIME_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.MAGENTA_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.ORANGE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container); - matUseFlagList.put(CMIMaterial.LIGHT_GRAY_SHULKER_BOX.getMaterial(), Flags.container); - matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return event.getHand() == EquipmentSlot.HAND ? true : false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java index 556f18ad6..0564a6232 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java @@ -2,11 +2,9 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; @@ -36,12 +34,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import cmiLib.CMIEffect; -import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_12_R1.EnumParticle; import net.minecraft.server.v1_12_R1.Packet; import net.minecraft.server.v1_12_R1.PacketPlayOutWorldParticles; @@ -80,104 +75,11 @@ public boolean isArmorStandEntity(EntityType ent) { return ent == EntityType.ARMOR_STAND; } - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (CMIMaterial.get(mat)) { - case LEVER: - case PISTON: - case NOTE_BLOCK: - case STICKY_PISTON: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - if (CMIMaterial.get(block).isSapling()) - return true; - if (CMIMaterial.get(block).isAir()) - return true; - if (CMIMaterial.get(block).isButton()) - return true; - return false; - } - @Override public boolean isSpectator(GameMode mode) { return mode == GameMode.SPECTATOR; } - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); - - /* 1.11 Shulker Box */ - matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.BLUE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.BROWN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.CYAN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.GRAY_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.GREEN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.LIGHT_BLUE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.LIME_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.MAGENTA_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.ORANGE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container); - matUseFlagList.put(CMIMaterial.LIGHT_GRAY_SHULKER_BOX.getMaterial(), Flags.container); - matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); - - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return event.getHand() == EquipmentSlot.HAND ? true : false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java index b19ae896f..2a2852bb7 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java @@ -2,11 +2,9 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.Particle.DustOptions; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_13_R1.CraftParticle; @@ -43,13 +41,10 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import cmiLib.CMIEffect; import cmiLib.CMIEffectManager.CMIParticle; -import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_13_R1.Packet; import net.minecraft.server.v1_13_R1.PacketPlayOutWorldParticles; @@ -93,110 +88,11 @@ public boolean isArmorStandEntity(EntityType ent) { return ent == EntityType.ARMOR_STAND; } - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (CMIMaterial.get(mat)) { - case LEVER: - case PISTON: - case NOTE_BLOCK: - case STICKY_PISTON: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - if (CMIMaterial.get(block).isSapling()) - return true; - if (CMIMaterial.get(block).isAir()) - return true; - if (CMIMaterial.get(block).isButton()) - return true; - return false; - } - @Override public boolean isSpectator(GameMode mode) { return mode == GameMode.SPECTATOR; } - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); - - /* 1.11 Shulker Box */ - matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.BLUE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.BROWN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.CYAN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.GRAY_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.GREEN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.LIGHT_BLUE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.LIME_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.MAGENTA_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.ORANGE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container); - matUseFlagList.put(CMIMaterial.LIGHT_GRAY_SHULKER_BOX.getMaterial(), Flags.container); - matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.SHULKER_BOX, Flags.container); - - /* 1.13 Shulker Box */ - - matUseFlagList.put(CMIMaterial.OAK_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.IRON_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.OAK_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.ACACIA_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.BIRCH_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.DARK_OAK_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.JUNGLE_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.SPRUCE_DOOR.getMaterial(), Flags.door); - - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return event.getHand() == EquipmentSlot.HAND ? true : false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java index fb24d8b29..af00a6a2f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java @@ -2,11 +2,9 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.Particle.DustOptions; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_13_R2.CraftParticle; @@ -43,13 +41,10 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import cmiLib.CMIEffect; import cmiLib.CMIEffectManager.CMIParticle; -import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_13_R2.Packet; import net.minecraft.server.v1_13_R2.PacketPlayOutWorldParticles; @@ -93,110 +88,11 @@ public boolean isArmorStandEntity(EntityType ent) { return ent == EntityType.ARMOR_STAND; } - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (CMIMaterial.get(mat)) { - case LEVER: - case PISTON: - case STICKY_PISTON: - case NOTE_BLOCK: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - if (CMIMaterial.get(block).isSapling()) - return true; - if (CMIMaterial.get(block).isAir()) - return true; - if (CMIMaterial.get(block).isButton()) - return true; - return false; - } - @Override public boolean isSpectator(GameMode mode) { return mode == GameMode.SPECTATOR; } - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); - - /* 1.11 Shulker Box */ - matUseFlagList.put(Material.BLACK_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.BLUE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.BROWN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.CYAN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.GRAY_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.GREEN_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.LIGHT_BLUE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.LIME_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.MAGENTA_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.ORANGE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.PINK_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.PURPLE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.RED_SHULKER_BOX, Flags.container); - matUseFlagList.put(CMIMaterial.LIGHT_GRAY_SHULKER_BOX.getMaterial(), Flags.container); - matUseFlagList.put(Material.WHITE_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.YELLOW_SHULKER_BOX, Flags.container); - matUseFlagList.put(Material.SHULKER_BOX, Flags.container); - - /* 1.13 Shulker Box */ - - matUseFlagList.put(CMIMaterial.OAK_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.IRON_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.OAK_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.ACACIA_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.BIRCH_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.DARK_OAK_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.JUNGLE_DOOR.getMaterial(), Flags.door); - matUseFlagList.put(CMIMaterial.SPRUCE_DOOR.getMaterial(), Flags.door); - - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return event.getHand() == EquipmentSlot.HAND ? true : false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 41f0f56cb..861cb8b47 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -2,12 +2,10 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.entity.Bat; @@ -30,12 +28,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import cmiLib.CMIEffect; -import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; public class v1_7_Couldron implements NMS { @@ -57,70 +52,11 @@ public boolean isArmorStandEntity(EntityType ent) { return false; } - @Override - public boolean isArmorStandMaterial(Material material) { - return false; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (CMIMaterial.get(mat)) { - case LEVER: - case PISTON: - case STICKY_PISTON: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - if (CMIMaterial.get(block).isSapling()) - return true; - if (CMIMaterial.get(block).isAir()) - return true; - if (CMIMaterial.get(block).isButton()) - return true; - - return false; - } - @Override public boolean isSpectator(GameMode mode) { return false; } - @Override - public void addDefaultFlags(Map matUseFlagList) { - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java index ed1d7d79e..2dcf0984b 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java @@ -2,12 +2,10 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.entity.Bat; @@ -30,12 +28,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import cmiLib.CMIEffect; -import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; public class v1_7_R4 implements NMS { @@ -57,71 +52,12 @@ public boolean isArmorStandEntity(EntityType ent) { return false; } - @Override - public boolean isArmorStandMaterial(Material material) { - return false; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (CMIMaterial.get(mat)) { - case LEVER: - case PISTON: - case NOTE_BLOCK: - case STICKY_PISTON: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - if (CMIMaterial.get(block).isSapling()) - return true; - if (CMIMaterial.get(block).isAir()) - return true; - if (CMIMaterial.get(block).isButton()) - return true; - - return false; - } @Override public boolean isSpectator(GameMode mode) { return false; } - @Override - public void addDefaultFlags(Map matUseFlagList) { - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java index f45443db9..7309600d3 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java @@ -2,12 +2,10 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; import org.bukkit.entity.Bat; @@ -31,12 +29,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import cmiLib.CMIEffect; -import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_8_R1.EnumParticle; import net.minecraft.server.v1_8_R1.Packet; import net.minecraft.server.v1_8_R1.PacketPlayOutWorldParticles; @@ -60,87 +55,12 @@ public boolean isAnimal(Entity ent) { public boolean isArmorStandEntity(EntityType ent) { return ent == EntityType.ARMOR_STAND; } - - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (CMIMaterial.get(mat)) { - case LEVER: - case PISTON: - case NOTE_BLOCK: - case STICKY_PISTON: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - if (CMIMaterial.get(block).isSapling()) - return true; - if (CMIMaterial.get(block).isAir()) - return true; - if (CMIMaterial.get(block).isButton()) - return true; - - return false; - } - + @Override public boolean isSpectator(GameMode mode) { return mode == GameMode.SPECTATOR; } - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - /* 1.8 day light sensor */ - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return true; @@ -176,7 +96,7 @@ public void playEffect(Player player, Location location, CMIEffect ef) { for (EnumParticle p : EnumParticle.values()) { if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { particle = p; - if (ef.getParticle().getEffect().getData() != null) { + if (ef.getParticle().getEffect().getData() != null) { if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { extra = new int[] { 0 }; } else { @@ -212,7 +132,7 @@ public void playEffect(Player player, Location location, CMIEffect ef) { extra = new int[0]; } } - + if (particle == null) return; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java index 748a451ef..1e76f3413 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java @@ -2,12 +2,10 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; import org.bukkit.entity.Bat; @@ -31,12 +29,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import cmiLib.CMIEffect; -import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_8_R2.EnumParticle; import net.minecraft.server.v1_8_R2.Packet; import net.minecraft.server.v1_8_R2.PacketPlayOutWorldParticles; @@ -61,86 +56,11 @@ public boolean isArmorStandEntity(EntityType ent) { return ent == EntityType.ARMOR_STAND; } - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (CMIMaterial.get(mat)) { - case LEVER: - case PISTON: - case NOTE_BLOCK: - case STICKY_PISTON: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - if (CMIMaterial.get(block).isSapling()) - return true; - if (CMIMaterial.get(block).isAir()) - return true; - if (CMIMaterial.get(block).isButton()) - return true; - - return false; - } - @Override public boolean isSpectator(GameMode mode) { return mode == GameMode.SPECTATOR; } - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - /* 1.8 day light sensor */ - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java index 2197aa17d..cf8ed2be0 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java @@ -2,12 +2,10 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.Bat; @@ -31,12 +29,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import cmiLib.CMIEffect; -import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_8_R3.EnumParticle; import net.minecraft.server.v1_8_R3.Packet; import net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles; @@ -61,86 +56,11 @@ public boolean isArmorStandEntity(EntityType ent) { return ent == EntityType.ARMOR_STAND; } - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (CMIMaterial.get(mat)) { - case LEVER: - case PISTON: - case NOTE_BLOCK: - case STICKY_PISTON: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - if (CMIMaterial.get(block).isSapling()) - return true; - if (CMIMaterial.get(block).isAir()) - return true; - if (CMIMaterial.get(block).isButton()) - return true; - - return false; - } - @Override public boolean isSpectator(GameMode mode) { return mode == GameMode.SPECTATOR; } - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - /* 1.8 day light sensor */ - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return true; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java index 401d4fd49..1fd6ab8ec 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java @@ -2,11 +2,9 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; @@ -32,12 +30,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import cmiLib.CMIEffect; -import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_9_R1.EnumParticle; import net.minecraft.server.v1_9_R1.Packet; import net.minecraft.server.v1_9_R1.PacketPlayOutWorldParticles; @@ -62,86 +57,11 @@ public boolean isArmorStandEntity(EntityType ent) { return ent == EntityType.ARMOR_STAND; } - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (CMIMaterial.get(mat)) { - case LEVER: - case PISTON: - case NOTE_BLOCK: - case STICKY_PISTON: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - if (CMIMaterial.get(block).isSapling()) - return true; - if (CMIMaterial.get(block).isAir()) - return true; - if (CMIMaterial.get(block).isButton()) - return true; - - return false; - } - @Override public boolean isSpectator(GameMode mode) { return mode == GameMode.SPECTATOR; } - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return event.getHand() == EquipmentSlot.HAND ? true : false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java index 8a541afca..0e95d710f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java @@ -2,11 +2,9 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; @@ -32,12 +30,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.NMS; import cmiLib.CMIEffect; -import cmiLib.ItemManager.CMIMaterial; import net.minecraft.server.v1_9_R2.EnumParticle; import net.minecraft.server.v1_9_R2.Packet; import net.minecraft.server.v1_9_R2.PacketPlayOutWorldParticles; @@ -62,86 +57,11 @@ public boolean isArmorStandEntity(EntityType ent) { return ent == EntityType.ARMOR_STAND; } - @Override - public boolean isArmorStandMaterial(Material material) { - return material == Material.ARMOR_STAND; - } - - @SuppressWarnings("deprecation") - @Override - public boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (CMIMaterial.get(mat)) { - case LEVER: - case PISTON: - case NOTE_BLOCK: - case STICKY_PISTON: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); - } - } - - @Override - public boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - return true; - default: - break; - } - - if (CMIMaterial.get(block).isSapling()) - return true; - if (CMIMaterial.get(block).isAir()) - return true; - if (CMIMaterial.get(block).isButton()) - return true; - - return false; - } - @Override public boolean isSpectator(GameMode mode) { return mode == GameMode.SPECTATOR; } - @Override - public void addDefaultFlags(Map matUseFlagList) { - /* 1.8 Doors */ - matUseFlagList.put(Material.SPRUCE_DOOR, Flags.door); - matUseFlagList.put(Material.BIRCH_DOOR, Flags.door); - matUseFlagList.put(Material.JUNGLE_DOOR, Flags.door); - matUseFlagList.put(Material.ACACIA_DOOR, Flags.door); - matUseFlagList.put(Material.DARK_OAK_DOOR, Flags.door); - /* 1.8 Fence Gates */ - matUseFlagList.put(Material.SPRUCE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.BIRCH_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.JUNGLE_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.ACACIA_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.DARK_OAK_FENCE_GATE, Flags.door); - matUseFlagList.put(Material.IRON_TRAPDOOR, Flags.door); - - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); - } - @Override public boolean isMainHand(PlayerInteractEvent event) { return event.getHand() == EquipmentSlot.HAND ? true : false; diff --git a/src/com/bekvon/bukkit/residence/containers/NMS.java b/src/com/bekvon/bukkit/residence/containers/NMS.java index c39fc7540..fa16f85f1 100644 --- a/src/com/bekvon/bukkit/residence/containers/NMS.java +++ b/src/com/bekvon/bukkit/residence/containers/NMS.java @@ -1,11 +1,9 @@ package com.bekvon.bukkit.residence.containers; import java.util.List; -import java.util.Map; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; @@ -25,16 +23,8 @@ public interface NMS { public boolean isArmorStandEntity(EntityType entityType); - public boolean isArmorStandMaterial(Material material); - - public boolean isCanUseEntity_BothClick(Material mat, Block block); - - public boolean isEmptyBlock(Block block); - public boolean isSpectator(GameMode mode); - public void addDefaultFlags(Map matuseflaglist); - public boolean isMainHand(PlayerInteractEvent event); public ItemStack itemInMainHand(Player player); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 72bb41866..f83247fbb 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -875,7 +875,7 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { for (int i = 0; i < maxH; i++) { location.setY(from - i); Block block = location.getBlock(); - if (!plugin.getNms().isEmptyBlock(block)) { + if (!isEmptyBlock(block)) { location.setY(from - i + 1); break; } @@ -982,8 +982,55 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { return plugin.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getType().getId())); } + public boolean isCanUseEntity_BothClick(Material mat, Block block) { + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (CMIMaterial.get(mat)) { + case LEVER: + case PISTON: + case STICKY_PISTON: + case NOTE_BLOCK: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); + } + } + + public static boolean isEmptyBlock(Block block) { + switch (CMIMaterial.get(block)) { + case COBWEB: + case STRING: + case WALL_SIGN: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case PAINTING: + case ITEM_FRAME: + return true; + default: + break; + } + + if (CMIMaterial.get(block).isSapling()) + return true; + if (CMIMaterial.get(block).isAir()) + return true; + if (CMIMaterial.get(block).isButton()) + return true; + return false; + } + private boolean isCanUseEntity(Material mat, Block block) { - return plugin.getNms().isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); + return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1179,7 +1226,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { Material mat = block.getType(); if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK - || plugin.getNms().isCanUseEntity_BothClick(mat, block))) { + || isCanUseEntity_BothClick(mat, block))) { if (!heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) && !heldItem.isDye() && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { return; @@ -1259,7 +1306,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { return; } - if (plugin.getNms().isCanUseEntity_BothClick(mat, block)) { + if (isCanUseEntity_BothClick(mat, block)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); } @@ -1951,7 +1998,7 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move for (int i = 0; i < maxH; i++) { location.setY(from - i); Block block = location.getBlock(); - if (!plugin.getNms().isEmptyBlock(block)) { + if (!isEmptyBlock(block)) { location.setY(from - i + 1); break; } @@ -2077,7 +2124,7 @@ public void run() { for (int i = 0; i < maxH; i++) { location.setY(from - i); Block block = location.getBlock(); - if (!plugin.getNms().isEmptyBlock(block)) { + if (!isEmptyBlock(block)) { location.setY(from - i + 1); break; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 4d904f8a4..ba8b567f2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -45,6 +45,7 @@ import com.bekvon.bukkit.residence.event.ResidenceTPEvent; import com.bekvon.bukkit.residence.itemlist.ItemList.ListType; import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.shopStuff.ShopVote; @@ -965,7 +966,7 @@ public Location getMiddleFreeLoc(Location insideLoc, Player player) { Block block = newLoc.getBlock(); Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); - if (plugin.getNms().isEmptyBlock(block) && plugin.getNms().isEmptyBlock(block2) && !plugin.getNms().isEmptyBlock(block3)) { + if (ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2) && !ResidencePlayerListener.isEmptyBlock(block3)) { found = true; break; } @@ -1023,12 +1024,12 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { Block block = loc.getBlock(); Block block2 = loc.clone().add(0, 1, 0).getBlock(); Block block3 = loc.clone().add(0, -1, 0).getBlock(); - if (!plugin.getNms().isEmptyBlock(block3) && plugin.getNms().isEmptyBlock(block) && plugin.getNms().isEmptyBlock(block2)) { + if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2)) { break; } } - if (!plugin.getNms().isEmptyBlock(loc.getBlock())) + if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) continue; if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA) @@ -1211,7 +1212,7 @@ public int isSafeTp(Player player) { for (int i = 0; i < 255; i++) { tempLoc.setY(from - i); Block block = tempLoc.getBlock(); - if (plugin.getNms().isEmptyBlock(block)) { + if (ResidencePlayerListener.isEmptyBlock(block)) { fallDistance++; } else { break; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 5392c7d26..c5b1b7850 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -164,50 +164,37 @@ public static void initValidFlags() { Residence.getInstance().getConfigManager().UpdateGroupedFlagsFile(); - // All these flags are moved to flags.yml as of 2.9.11.0 version for option to customize them -// addFlagToFlagGroup("redstone", "note"); -// addFlagToFlagGroup("redstone", "pressure"); -// addFlagToFlagGroup("redstone", "lever"); -// addFlagToFlagGroup("redstone", "button"); -// addFlagToFlagGroup("redstone", "diode"); -// addFlagToFlagGroup("craft", "brew"); -// addFlagToFlagGroup("craft", "table"); -// addFlagToFlagGroup("craft", "enchant"); -// addFlagToFlagGroup("trusted", "use"); -// addFlagToFlagGroup("trusted", "tp"); -// addFlagToFlagGroup("trusted", "build"); -// addFlagToFlagGroup("trusted", "container"); -// addFlagToFlagGroup("trusted", "bucket"); -// addFlagToFlagGroup("trusted", "move"); -// addFlagToFlagGroup("trusted", "leash"); -// addFlagToFlagGroup("trusted", "animalkilling"); -// addFlagToFlagGroup("trusted", "mobkilling"); -// addFlagToFlagGroup("trusted", "shear"); -// addFlagToFlagGroup("trusted", "chat"); -// addFlagToFlagGroup("fire", "ignite"); -// addFlagToFlagGroup("fire", "firespread"); - addMaterialToUseFlag(CMIMaterial.REPEATER.getMaterial(), Flags.diode); -// addMaterialToUseFlag(CMIMaterial.DIODE_BLOCK_OFF.getMaterial(), Flags.diode); -// addMaterialToUseFlag(CMIMaterial.DIODE_BLOCK_ON.getMaterial(), Flags.diode); addMaterialToUseFlag(CMIMaterial.COMPARATOR.getMaterial(), Flags.diode); -// addMaterialToUseFlag(CMIMaterial.REDSTONE_COMPARATOR_OFF.getMaterial(), Flags.diode); -// addMaterialToUseFlag(CMIMaterial.REDSTONE_COMPARATOR_ON.getMaterial(), Flags.diode); - addMaterialToUseFlag(Material.DAYLIGHT_DETECTOR, Flags.diode); + addMaterialToUseFlag(CMIMaterial.CRAFTING_TABLE.getMaterial(), Flags.table); - addMaterialToUseFlag(CMIMaterial.OAK_DOOR.getMaterial(), Flags.door); - Residence.getInstance().getNms().addDefaultFlags(matUseFlagList); + for (CMIMaterial one : CMIMaterial.values()) { + if (one.isDoor() && one.getMaterial() != null) + matUseFlagList.put(one.getMaterial(), Flags.door); + + if (one.isGate() && one.getMaterial() != null) + matUseFlagList.put(one.getMaterial(), Flags.door); + + if (one.isTrapDoor() && one.getMaterial() != null) + matUseFlagList.put(one.getMaterial(), Flags.door); + + if (one.isShulkerBox() && one.getMaterial() != null) + matUseFlagList.put(one.getMaterial(), Flags.container); + + if (one.isButton() && one.getMaterial() != null) + matUseFlagList.put(one.getMaterial(), Flags.button); + } + + if (CMIMaterial.DAYLIGHT_DETECTOR.getMaterial() != null) + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); -// addMaterialToUseFlag(CMIMaterial.FENCE_GATE, Flags.door); -// addMaterialToUseFlag(Material.NETHER_FENCE, Flags.door); -// addMaterialToUseFlag(Material.TRAP_DOOR, Flags.door); - addMaterialToUseFlag(CMIMaterial.ENCHANTING_TABLE.getMaterial(), Flags.enchant); - addMaterialToUseFlag(Material.STONE_BUTTON, Flags.button); + if (CMIMaterial.ENCHANTING_TABLE.getMaterial() != null) + addMaterialToUseFlag(CMIMaterial.ENCHANTING_TABLE.getMaterial(), Flags.enchant); addMaterialToUseFlag(Material.LEVER, Flags.lever); for (CMIMaterial one : CMIMaterial.values()) { - if (!one.isBed()) + if (!one.isBed() || one.getMaterial() == null) continue; addMaterialToUseFlag(one.getMaterial(), Flags.bed); } @@ -217,7 +204,6 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.NOTE_BLOCK, Flags.note); addMaterialToUseFlag(Material.DRAGON_EGG, Flags.egg); addMaterialToUseFlag(CMIMaterial.COMMAND_BLOCK.getMaterial(), Flags.commandblock); - addMaterialToUseFlag(CMIMaterial.OAK_BUTTON.getMaterial(), Flags.button); addMaterialToUseFlag(Material.ANVIL, Flags.anvil); addMaterialToUseFlag(Material.FLOWER_POT, Flags.flowerpot); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 81822911c..1e8544853 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -17,7 +17,6 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.utils.Debug; public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index fb80a9ca8..23b54c96e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -38,7 +38,6 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index bf8047ccf..53dd52c6c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -13,7 +13,6 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.Siege.ResidenceSiege; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 2beaf00d7..a2f5133dc 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -13,6 +13,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class RandomTp { @@ -96,7 +97,7 @@ public Location getRandomlocation(World world) { Block block = loc.getBlock(); Block block2 = loc.clone().add(0, 1, 0).getBlock(); Block block3 = loc.clone().add(0, -1, 0).getBlock(); - if (!plugin.getNms().isEmptyBlock(block3) && plugin.getNms().isEmptyBlock(block) && plugin.getNms().isEmptyBlock(block2)) { + if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2)) { break; } if (i <= 3) { @@ -105,7 +106,7 @@ public Location getRandomlocation(World world) { } } - if (!plugin.getNms().isEmptyBlock(loc.getBlock())) + if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) continue; if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.LAVA)) From e3ae045798a07a1851b66b63d65b9099079f2603 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Nov 2018 17:08:42 +0200 Subject: [PATCH 0528/1142] Lets check farmland block by type, to avoid possible issues with world generating plugins --- .../listeners/ResidenceBlockListener.java | 2 +- .../residence/protection/FlagPermissions.java | 24 ++++++------------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 42fac45a8..d31832fd0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -815,7 +815,7 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - CMIMaterial mat = CMIMaterial.get(event.getBlock()); + CMIMaterial mat = CMIMaterial.get(event.getBlock().getType()); if (!mat.equals(CMIMaterial.FARMLAND)) return; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index c5b1b7850..29b2c4473 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -184,6 +184,12 @@ public static void initValidFlags() { if (one.isButton() && one.getMaterial() != null) matUseFlagList.put(one.getMaterial(), Flags.button); + + if (one.isBed() && one.getMaterial() != null) + matUseFlagList.put(one.getMaterial(), Flags.bed); + + if (one.isPottedFlower() && one.getMaterial() != null) + matUseFlagList.put(one.getMaterial(), Flags.flowerpot); } if (CMIMaterial.DAYLIGHT_DETECTOR.getMaterial() != null) @@ -191,14 +197,8 @@ public static void initValidFlags() { if (CMIMaterial.ENCHANTING_TABLE.getMaterial() != null) addMaterialToUseFlag(CMIMaterial.ENCHANTING_TABLE.getMaterial(), Flags.enchant); - addMaterialToUseFlag(Material.LEVER, Flags.lever); - - for (CMIMaterial one : CMIMaterial.values()) { - if (!one.isBed() || one.getMaterial() == null) - continue; - addMaterialToUseFlag(one.getMaterial(), Flags.bed); - } + addMaterialToUseFlag(Material.LEVER, Flags.lever); addMaterialToUseFlag(Material.BREWING_STAND, Flags.brew); addMaterialToUseFlag(Material.CAKE, Flags.cake); addMaterialToUseFlag(Material.NOTE_BLOCK, Flags.note); @@ -206,16 +206,6 @@ public static void initValidFlags() { addMaterialToUseFlag(CMIMaterial.COMMAND_BLOCK.getMaterial(), Flags.commandblock); addMaterialToUseFlag(Material.ANVIL, Flags.anvil); addMaterialToUseFlag(Material.FLOWER_POT, Flags.flowerpot); - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) - for (CMIMaterial one : CMIMaterial.values()) { - if (!one.isPottedFlower()) - continue; - if (one.getMaterial() == null) - continue; - addMaterialToUseFlag(one.getMaterial(), Flags.flowerpot); - } - addMaterialToUseFlag(Material.BEACON, Flags.beacon); addMaterialToUseFlag(Material.JUKEBOX, Flags.container); addMaterialToUseFlag(Material.CHEST, Flags.container); From bcc52e36f7a4ed933826b79de11145e16568edcf Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 6 Jan 2019 18:00:42 +0200 Subject: [PATCH 0529/1142] Initial settup for new WE API --- .../residence/listeners/ResidenceBlockListener.java | 2 +- .../selection/WorldEdit7SelectionManager.java | 13 +++++++++---- .../bukkit/residence/selection/WorldGuard7Util.java | 9 +++++---- src/plugin.yml | 2 +- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index d31832fd0..5a24d619e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -805,7 +805,7 @@ public void onLandDryFade(BlockFadeEvent event) { } } - @SuppressWarnings("deprecation") + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLandDryPhysics(BlockPhysicsEvent event) { // Disabling listener if flag disabled globally diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java index eec3f77e3..5697cf222 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java @@ -11,12 +11,16 @@ import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldedit.extension.platform.permission.ActorSelectorLimits; +import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.math.Vector3; //import com.sk89q.worldedit.bukkit.selections.CuboidSelection; //import com.sk89q.worldedit.bukkit.selections.Selection; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.selector.CuboidRegionSelector; import com.sk89q.worldedit.regions.selector.limit.PermissiveSelectorLimits; +import com.sk89q.worldedit.regions.selector.limit.SelectorLimits; import com.sk89q.worldedit.world.World; public class WorldEdit7SelectionManager extends SelectionManager { @@ -55,9 +59,9 @@ public boolean worldEditUpdate(Player player) { World w = BukkitAdapter.adapt(player.getWorld()); - plugin.getWorldEdit().getSession(player).getRegionSelector(w).selectPrimary(new Vector(getPlayerLoc1(player).getBlockX(), getPlayerLoc1(player).getBlockY(), getPlayerLoc1(player).getBlockZ()), + plugin.getWorldEdit().getSession(player).getRegionSelector(w).selectPrimary(BlockVector3.at(getPlayerLoc1(player).getBlockX(), getPlayerLoc1(player).getBlockY(), getPlayerLoc1(player).getBlockZ()), PermissiveSelectorLimits.getInstance()); - plugin.getWorldEdit().getSession(player).getRegionSelector(w).selectSecondary(new Vector(getPlayerLoc2(player).getBlockX(), getPlayerLoc2(player).getBlockY(), getPlayerLoc2(player).getBlockZ()), + plugin.getWorldEdit().getSession(player).getRegionSelector(w).selectSecondary(BlockVector3.at(getPlayerLoc2(player).getBlockX(), getPlayerLoc2(player).getBlockY(), getPlayerLoc2(player).getBlockZ()), PermissiveSelectorLimits.getInstance()); // CuboidSelection selection = new CuboidSelection(player.getWorld(), getPlayerLoc1(player), getPlayerLoc2(player)); @@ -114,8 +118,9 @@ public void regenerate(CuboidArea area) { CuboidRegionSelector sellection = new CuboidRegionSelector(BukkitAdapter.adapt(area.getWorld())); // set up selector - sellection.selectPrimary(new Vector(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()), PermissiveSelectorLimits.getInstance()); - sellection.selectSecondary(new Vector(area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()), PermissiveSelectorLimits.getInstance()); + + sellection.selectPrimary(BlockVector3.at(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()), PermissiveSelectorLimits.getInstance()); + sellection.selectSecondary(BlockVector3.at(area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()), PermissiveSelectorLimits.getInstance()); // set up CuboidSelection CuboidRegion cuboid = sellection.getIncompleteRegion(); diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java b/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java index 15ddc2a9a..8b40145ec 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java @@ -8,6 +8,8 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.world.World; import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.ApplicableRegionSet; @@ -39,12 +41,11 @@ public ProtectedRegion getRegion(Player player, CuboidArea area) { String id = "icp__tempregion"; try { - BlockVector min = new BlockVector(loc1.getX(), loc1.getY(), loc1.getZ()); - BlockVector max = new BlockVector(loc2.getX(), loc2.getY(), loc2.getZ()); + BlockVector3 min = BlockVector3.at(loc1.getX(), loc1.getY(), loc1.getZ()); + BlockVector3 max = BlockVector3.at(loc2.getX(), loc2.getY(), loc2.getZ()); ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); - World w = WorldGuard.getInstance().getPlatform().getWorldByName(loc1.getWorld().getName()); - RegionManager mgr = WorldGuard.getInstance().getPlatform().getRegionContainer().get(w); + RegionManager mgr = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(loc1.getWorld())); ApplicableRegionSet regions = mgr.getApplicableRegions(region); diff --git a/src/plugin.yml b/src/plugin.yml index 7b0bcea09..622922570 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.3.0 +version: 4.8.3.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From c7a53cf56d17b14aa1dfe14f18a6c0d175691fe8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 7 Jan 2019 12:07:51 +0200 Subject: [PATCH 0530/1142] Better WorldEdit support --- .../bekvon/bukkit/residence/Residence.java | 38 ++++++++++++------- .../residence/selection/AutoSelection.java | 30 ++++++++------- .../selection/SchematicsManager.java | 12 +++++- .../residence/selection/WorldGuardUtil.java | 11 ++++-- 4 files changed, 60 insertions(+), 31 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 9171afaf4..df7880466 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -193,6 +193,7 @@ public class Residence extends JavaPlugin { protected WESchematicManager SchematicManager; private InformationPager InformationPagerManager; private WorldGuardInterface worldGuardUtil; + private int wepVersion = 6; private KingdomsUtil kingdomsUtil; protected CommandFiller cmdFiller; @@ -947,17 +948,17 @@ public GameManagement getKingdomsManager() { private void setWorldGuard() { Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); if (wgplugin != null) { - try { - Class.forName("com.sk89q.worldedit.BlockVector"); - Class.forName("com.sk89q.worldguard.protection.ApplicableRegionSet"); - Class.forName("com.sk89q.worldguard.protection.managers.RegionManager"); - Class.forName("com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion"); - Class.forName("com.sk89q.worldguard.protection.regions.ProtectedRegion"); - } catch (Exception e) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + ChatColor.RED - + " Found WorldGuard, but its not supported by Residence plugin. Please update WorldGuard to latest version"); - return; - } +// try { +// Class.forName("com.sk89q.worldedit.BlockVector"); +// Class.forName("com.sk89q.worldguard.protection.ApplicableRegionSet"); +// Class.forName("com.sk89q.worldguard.protection.managers.RegionManager"); +// Class.forName("com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion"); +// Class.forName("com.sk89q.worldguard.protection.regions.ProtectedRegion"); +// } catch (Exception e) { +// Bukkit.getConsoleSender().sendMessage(getPrefix() + ChatColor.RED +// + " Found WorldGuard, but its not supported by Residence plugin. Please update WorldGuard to latest version"); +// return; +// } wg = (WorldGuardPlugin) wgplugin; Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldGuard"); } @@ -1896,11 +1897,16 @@ public CMIMaterial getWorldEditTool() { public WorldGuardInterface getWorldGuardUtil() { if (worldGuardUtil == null) { + + int version = 6; try { - Class.forName("com.sk89q.worldguard.WorldGuard"); - this.consoleMessage("WorldGuard7"); - worldGuardUtil = new WorldGuard7Util(this); + version = Integer.parseInt(wep.getDescription().getVersion().substring(0, 1)); } catch (Exception e) { + } + if (version >= 7) { + wepVersion = version; + worldGuardUtil = new WorldGuard7Util(this); + } else { worldGuardUtil = new WorldGuardUtil(this); } } @@ -1968,4 +1974,8 @@ public String[] reduceArgs(String[] args) { // public TownManager getTownManager() { // return townManager; // } + + public int getWorldGuardVersion() { + return wepVersion; + } } diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index 5b4636678..2e2378ce1 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -1,6 +1,8 @@ package com.bekvon.bukkit.residence.selection; import java.util.HashMap; +import java.util.UUID; + import org.bukkit.Location; import org.bukkit.entity.Player; @@ -13,7 +15,7 @@ public class AutoSelection { - private HashMap list = new HashMap(); + private HashMap list = new HashMap(); private Residence plugin; public AutoSelection(Residence residence) { @@ -21,38 +23,40 @@ public AutoSelection(Residence residence) { } public void switchAutoSelection(Player player) { - if (!list.containsKey(player.getName().toLowerCase())) { + if (!list.containsKey(player.getUniqueId())) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(player.getWorld().getName()); - list.put(player.getName().toLowerCase(), new AutoSelector(group, System.currentTimeMillis())); + list.put(player.getUniqueId(), new AutoSelector(group, System.currentTimeMillis())); plugin.msg(player, lm.Select_AutoEnabled); } else { - list.remove(player.getName().toLowerCase()); + list.remove(player.getUniqueId()); plugin.msg(player, lm.Select_AutoDisabled); } } public void UpdateSelection(Player player) { + UpdateSelection(player, player.getLocation()); + } - if (!getList().containsKey(player.getName().toLowerCase())) + public void UpdateSelection(Player player, Location targetLoc) { + + if (!list.containsKey(player.getUniqueId())) return; - AutoSelector AutoSelector = getList().get(player.getName().toLowerCase()); + AutoSelector AutoSelector = list.get(player.getUniqueId()); int Curenttime = (int) (System.currentTimeMillis() - AutoSelector.getTime()) / 1000; if (Curenttime > 270) { - list.remove(player.getName().toLowerCase()); + list.remove(player.getUniqueId()); plugin.msg(player, lm.Select_AutoDisabled); return; } - String name = player.getName(); - - Location cloc = player.getLocation(); + Location cloc = targetLoc.clone(); - Location loc1 = plugin.getSelectionManager().getPlayerLoc1(name); - Location loc2 = plugin.getSelectionManager().getPlayerLoc2(name); + Location loc1 = plugin.getSelectionManager().getPlayerLoc1(player); + Location loc2 = plugin.getSelectionManager().getPlayerLoc2(player); if (loc1 == null) { plugin.getSelectionManager().placeLoc1(player, cloc, false); @@ -123,7 +127,7 @@ public void UpdateSelection(Player player) { } } - public HashMap getList() { + public HashMap getList() { return list; } } diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index 0e1fde38a..2a85b2cb2 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -69,10 +69,20 @@ public boolean save(ClaimedResidence res) { try { com.sk89q.worldedit.schematic.SchematicFormat.MCEDIT.save(clipboard, file); } catch (Exception e) { + + if (plugin.getWorldGuardVersion() >= 7) { + editSession.flushSession(); + } else { + editSession.getClass().getMethod("flushQueue").invoke(editSession); + } return false; } + if (plugin.getWorldGuardVersion() >= 7) { + editSession.flushSession(); + } else { + editSession.getClass().getMethod("flushQueue").invoke(editSession); + } - editSession.flushQueue(); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { e1.printStackTrace(); } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java index 41131ac1f..2f965375c 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.selection; import java.lang.reflect.Method; +import java.util.Iterator; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -10,6 +11,11 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.regions.CuboidRegion; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; @@ -39,16 +45,15 @@ public ProtectedRegion getRegion(Player player, CuboidArea area) { String id = "icp__tempregion"; try { + BlockVector min = new BlockVector(loc1.getX(), loc1.getY(), loc1.getZ()); BlockVector max = new BlockVector(loc2.getX(), loc2.getY(), loc2.getZ()); - ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); + ProtectedRegion region = ProtectedCuboidRegion.class.getConstructor(String.class, BlockVector.class, BlockVector.class).newInstance(id, min, max); Method methd = plugin.getWorldGuard().getClass().getMethod("getRegionManager", loc1.getWorld().getClass()); RegionManager mgr = (RegionManager) methd.invoke(plugin.getWorldGuard(), loc1.getWorld()); -// RegionManager mgr = plugin.getWorldGuard().getRegionManager(loc1.getWorld()); - ApplicableRegionSet regions = mgr.getApplicableRegions(region); for (ProtectedRegion one : regions.getRegions()) { From a691eaa32e1ef15150433b99894ca59a7875e6fa Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 7 Jan 2019 12:21:28 +0200 Subject: [PATCH 0531/1142] New permission nodes to bypass flags: residence.use.bypass, residence.container.bypass --- .../listeners/ResidenceEntityListener.java | 11 +- .../listeners/ResidencePlayerListener.java | 127 +++++++++++------- 2 files changed, 82 insertions(+), 56 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 35f8cab33..dad5f1a84 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1278,10 +1278,13 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (event.getEntityType() == EntityType.ITEM_FRAME) { ItemFrame it = (ItemFrame) event.getEntity(); if (it.getItem() != null) { - if (!perms.playerHas(player, Flags.container, true)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container); - } + + boolean hasContainerBypass = player.hasPermission("residence.container.bypass"); + if (!hasContainerBypass) + if (!perms.playerHas(player, Flags.container, true)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.container); + } return; } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index f83247fbb..cfa18e017 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1087,12 +1087,16 @@ public void onPlatePress(PlayerInteractEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); boolean resadmin = plugin.isResAdminOn(player); if (!resadmin) { + + boolean hasUseBypass = player.hasPermission("residence.use.bypass"); + boolean hasuse = perms.playerHas(player, Flags.use, true); boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); - if ((!hasuse && !haspressure || !haspressure) && mat.isPlate()) { - event.setCancelled(true); - return; - } + if (!hasUseBypass) + if ((!hasuse && !haspressure || !haspressure) && mat.isPlate()) { + event.setCancelled(true); + return; + } } if (!perms.playerHas(player, Flags.trample, perms.playerHas(player, Flags.build, true)) && (mat.equals(CMIMaterial.FARMLAND) || mat.equals(CMIMaterial.SOUL_SAND))) { event.setCancelled(true); @@ -1157,7 +1161,6 @@ public void onSelection(PlayerInteractEvent event) { return; } - @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onInfoCheck(PlayerInteractEvent event) { if (event.getPlayer() == null) @@ -1284,55 +1287,63 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasuse = perms.playerHas(player, Flags.use, true); + boolean hasUseBypass = player.hasPermission("residence.use.bypass"); + boolean hasContainerBypass = player.hasPermission("residence.container.bypass"); + boolean hasuse = perms.playerHas(player, Flags.use, true) || hasUseBypass; ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); if (res == null || !res.isOwner(player)) { - for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { - if (mat != checkMat.getKey()) - continue; + if (!hasContainerBypass) + for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { + if (mat != checkMat.getKey()) + continue; + + if (perms.playerHas(player, checkMat.getValue(), hasuse)) + continue; + + if (hasuse || checkMat.getValue().equals(Flags.container)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); + return; + } - if (perms.playerHas(player, checkMat.getValue(), hasuse)) - continue; + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); + return; + } + + if (isCanUseEntity_BothClick(mat, block)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); + } - if (hasuse || checkMat.getValue().equals(Flags.container)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); return; } + } - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (!hasContainerBypass) + if (plugin.getConfigManager().getCustomContainers().contains(blockM.getId())) { + if (!perms.playerHas(player, Flags.container, hasuse)) { event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); + plugin.msg(player, lm.Flag_Deny, Flags.container.getName()); return; } + } - if (isCanUseEntity_BothClick(mat, block)) { + if (!hasUseBypass) { + if (plugin.getConfigManager().getCustomBothClick().contains(blockM.getId())) { + if (!hasuse) { event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); + plugin.msg(player, lm.Flag_Deny, Flags.use.getName()); + return; } - - return; - } - } - if (plugin.getConfigManager().getCustomContainers().contains(blockM.getId())) { - if (!perms.playerHas(player, Flags.container, hasuse)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container.getName()); - return; - } - } - if (plugin.getConfigManager().getCustomBothClick().contains(blockM.getId())) { - if (!hasuse) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use.getName()); - return; } - } - if (plugin.getConfigManager().getCustomRightClick().contains(blockM.getId()) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (!hasuse) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use.getName()); - return; + if (plugin.getConfigManager().getCustomRightClick().contains(blockM.getId()) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (!hasuse) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.use.getName()); + return; + } } } } @@ -1402,10 +1413,14 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); - event.setCancelled(true); - } + + boolean hasContainerBypass = player.hasPermission("residence.container.bypass"); + + if (!hasContainerBypass) + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1454,10 +1469,14 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res == null) return; - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); - event.setCancelled(true); - } + + boolean hasContainerBypass = player.hasPermission("residence.container.bypass"); + + if (!hasContainerBypass) + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1577,10 +1596,14 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { event.setCancelled(true); return; } - if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container.getName()); - } + + boolean hasContainerBypass = player.hasPermission("residence.container.bypass"); + + if (!hasContainerBypass) + if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.container.getName()); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) From 0583c96eb57d98ba2ff8787e1f7fafb691e93599 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 7 Jan 2019 12:27:20 +0200 Subject: [PATCH 0532/1142] Lets make it backwards --- .../residence/listeners/ResidenceEntityListener.java | 2 +- .../residence/listeners/ResidencePlayerListener.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index dad5f1a84..dd053b897 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1279,7 +1279,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { ItemFrame it = (ItemFrame) event.getEntity(); if (it.getItem() != null) { - boolean hasContainerBypass = player.hasPermission("residence.container.bypass"); + boolean hasContainerBypass = player.hasPermission("residence.bypass.container"); if (!hasContainerBypass) if (!perms.playerHas(player, Flags.container, true)) { event.setCancelled(true); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index cfa18e017..2523b3749 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1088,7 +1088,7 @@ public void onPlatePress(PlayerInteractEvent event) { boolean resadmin = plugin.isResAdminOn(player); if (!resadmin) { - boolean hasUseBypass = player.hasPermission("residence.use.bypass"); + boolean hasUseBypass = player.hasPermission("residence.bypass.use"); boolean hasuse = perms.playerHas(player, Flags.use, true); boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); @@ -1287,8 +1287,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasUseBypass = player.hasPermission("residence.use.bypass"); - boolean hasContainerBypass = player.hasPermission("residence.container.bypass"); + boolean hasUseBypass = player.hasPermission("residence.bypass.use"); + boolean hasContainerBypass = player.hasPermission("residence.bypass.container"); boolean hasuse = perms.playerHas(player, Flags.use, true) || hasUseBypass; ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); if (res == null || !res.isOwner(player)) { @@ -1414,7 +1414,7 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { if (res == null) return; - boolean hasContainerBypass = player.hasPermission("residence.container.bypass"); + boolean hasContainerBypass = player.hasPermission("residence.bypass.container"); if (!hasContainerBypass) if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { @@ -1470,7 +1470,7 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) if (res == null) return; - boolean hasContainerBypass = player.hasPermission("residence.container.bypass"); + boolean hasContainerBypass = player.hasPermission("residence.bypass.container"); if (!hasContainerBypass) if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { @@ -1597,7 +1597,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { return; } - boolean hasContainerBypass = player.hasPermission("residence.container.bypass"); + boolean hasContainerBypass = player.hasPermission("residence.bypass.container"); if (!hasContainerBypass) if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { From 2939a335f77a8f85a16abd58ddff27aef8a44022 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 7 Jan 2019 12:58:55 +0200 Subject: [PATCH 0533/1142] Lets set miny maxy for a group to 0 and 256 is y selection should be ignored --- src/com/bekvon/bukkit/residence/commands/select.java | 2 +- .../bukkit/residence/permissions/PermissionGroup.java | 8 +++++++- .../bukkit/residence/protection/ClaimedResidence.java | 7 ++++++- .../bukkit/residence/selection/SelectionManager.java | 8 ++++---- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 55fdfe1ab..f6b69a80a 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -49,7 +49,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (args.length == 2) { if (args[1].equals("size") || args[1].equals("cost")) { - if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + if (plugin.getSelectionManager().hasPlacedBoth(player)) { try { plugin.getSelectionManager().showSelectionInfo(player); return true; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 31fc5b7a4..46e4d983d 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -114,7 +114,13 @@ private void parseGroup(ConfigurationSection limits) { ymax = limits.getInt("Residence.MaxUpDown", 0); ymin = limits.getInt("Residence.MinUpDown", 0); ymin = ymin > ymax ? ymax : ymin; - + + if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()){ + ymin = 0; + ymax = 255; + } + + zmax = limits.getInt("Residence.MaxNorthSouth", 0); zmin = limits.getInt("Residence.MinNorthSouth", 0); zmin = zmin > zmax ? zmax : zmin; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index ba8b567f2..38c991120 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -51,6 +51,7 @@ import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.utils.Debug; import cmiLib.ActionBarTitleMessages; import cmiLib.RawMessage; @@ -90,7 +91,7 @@ public class ClaimedResidence { private Residence plugin; private ResidenceSiege siege; - + private Set signsInResidence = new HashSet(); public String getResidenceName() { @@ -406,6 +407,8 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } } + Debug.D(area.getHighLoc().getBlockY()); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); @@ -422,10 +425,12 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa plugin.msg(player, lm.Area_SizeLimit); return false; } + if (group.getMinHeight() > area.getLowLoc().getBlockY()) { plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); return false; } + if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); return false; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 0e53031dd..88c8ed132 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -277,18 +277,18 @@ public CuboidArea getResizedArea() { private int getMaxWorldHeight(World world) { if (world == null) - return 256; + return 255; switch (world.getEnvironment()) { case NETHER: return 128; case NORMAL: case THE_END: - return 256; + return 255; default: break; } - return 256; + return 255; } public enum Direction { @@ -451,7 +451,7 @@ public void showSelectionInfo(Player player) { PermissionGroup group = rPlayer.getGroup(); if (plugin.getConfigManager().enableEconomy()) - plugin.msg(player, lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); + plugin.msg(player, lm.General_LandCost, (int) (cuboidArea.getSize() * group.getCostPerBlock() * 100) / 100D); player.sendMessage(ChatColor.YELLOW + "X" + plugin.msg(lm.General_Size, cuboidArea.getXSize())); player.sendMessage(ChatColor.YELLOW + "Y" + plugin.msg(lm.General_Size, cuboidArea.getYSize())); player.sendMessage(ChatColor.YELLOW + "Z" + plugin.msg(lm.General_Size, cuboidArea.getZSize())); From 7a8db79aa67d664553b54a8f3ce20e65f985badd Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 7 Jan 2019 13:14:12 +0200 Subject: [PATCH 0534/1142] Double power for getting cost --- src/com/bekvon/bukkit/residence/commands/auto.java | 4 ++-- src/com/bekvon/bukkit/residence/commands/create.java | 2 +- .../residence/listeners/ResidenceBlockListener.java | 5 ++--- .../residence/protection/ClaimedResidence.java | 12 ++++++++++-- .../bukkit/residence/protection/CuboidArea.java | 5 +++++ .../residence/protection/ResidenceManager.java | 5 ++--- .../bukkit/residence/selection/SelectionManager.java | 4 ++-- 7 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 8e22bd019..02e339413 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -122,7 +122,7 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); - int cost = (int) Math.ceil(cuboid.getSize() * group.getCostPerBlock()); + double cost = cuboid.getCost(group); double balance = 0; if (plugin.getEconomyManager() != null) @@ -214,7 +214,7 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo if (checkBalance) { if (plugin.getConfigManager().enableEconomy()) { - cost = (int) Math.ceil(c.getSize() * group.getCostPerBlock()); + cost = c.getCost(group); if (cost > balance) break; } diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 3ddeb9f9c..e84262033 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -26,7 +26,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } if (plugin.getWorldEdit() != null) { - if (plugin.getWorldEdit().getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) { + if (plugin.getWorldEdit().getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTool().getId()) { plugin.getSelectionManager().worldEdit(player); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 5a24d619e..61c65d0fe 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -495,7 +495,7 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); - int cost = (int) Math.ceil(cuboid.getSize() * group.getCostPerBlock()); + double cost = cuboid.getCost(group); double balance = 0; if (plugin.getEconomyManager() != null) @@ -577,7 +577,7 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo if (checkBalance) { if (plugin.getConfigManager().enableEconomy()) { - cost = (int) Math.ceil(c.getSize() * group.getCostPerBlock()); + cost = c.getCost(group); if (cost > balance) break; } @@ -805,7 +805,6 @@ public void onLandDryFade(BlockFadeEvent event) { } } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLandDryPhysics(BlockPhysicsEvent event) { // Disabling listener if flag disabled globally diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 38c991120..ef93f107d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -445,7 +445,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } if (chargeMoney && parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { - int chargeamount = (int) Math.ceil(area.getSize() * group.getCostPerBlock()); + double chargeamount = area.getCost(group); if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { return false; } @@ -585,7 +585,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } if (parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { - int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * group.getCostPerBlock()); + double chargeamount = newarea.getCost(group) - oldarea.getCost(group); if (chargeamount > 0) { if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { return false; @@ -1978,4 +1978,12 @@ public Set getSignsInResidence() { public void setSignsInResidence(Set signsInResidence) { this.signsInResidence = signsInResidence; } + + public double getWorthByOwner() { + return (int) ((getTotalSize() * getOwnerGroup().getCostPerBlock()) * 100) / 100D; + } + + public double getWorth() { + return (int) ((getTotalSize() * getBlockSellPrice()) * 100) / 100.0; + } } diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index f6468c894..c27c45ecd 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.protection; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ResidenceManager.ChunkRef; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -254,4 +255,8 @@ public void setHighLocation(Location highLocation) { public void setLowLocation(Location lowLocation) { this.lowPoints = lowLocation; } + + public double getCost(PermissionGroup group) { + return (int) (getSize() * group.getCostPerBlock() * 100) / 100D; + } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 23b54c96e..812301acd 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -240,7 +240,7 @@ public boolean addResidence(Player player, String owner, String name, Location l return false; if (!newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { - double chargeamount = Math.ceil(newArea.getSize() * group.getCostPerBlock()); + double chargeamount = newArea.getCost(group); if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { // Need to remove area if we can't create residence newRes.removeArea("main"); @@ -731,8 +731,7 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) plugin.msg(sender, ChatColor.translateAlternateColorCodes('&', msg)); if (plugin.getEconomyManager() != null) { - plugin.msg(sender, lm.General_TotalWorth, (int) ((res.getTotalSize() * res.getOwnerGroup().getCostPerBlock()) - * 100) / 100.0, (int) ((res.getTotalSize() * res.getBlockSellPrice()) * 100) / 100.0); + plugin.msg(sender, lm.General_TotalWorth, res.getWorthByOwner(), res.getWorth()); } if (res.getSubzonesAmount(false) > 0) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 88c8ed132..f21e28295 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -435,7 +435,7 @@ public void showSelectionInfoInActionBar(Player player) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (plugin.getConfigManager().enableEconomy()) - Message += " " + plugin.msg(lm.General_LandCost, ((int) Math.ceil(cuboidArea.getSize() * group.getCostPerBlock()))); + Message += " " + plugin.msg(lm.General_LandCost, cuboidArea.getCost(group)); ActionBarTitleMessages.send(player, Message); @@ -451,7 +451,7 @@ public void showSelectionInfo(Player player) { PermissionGroup group = rPlayer.getGroup(); if (plugin.getConfigManager().enableEconomy()) - plugin.msg(player, lm.General_LandCost, (int) (cuboidArea.getSize() * group.getCostPerBlock() * 100) / 100D); + plugin.msg(player, lm.General_LandCost, cuboidArea.getCost(group)); player.sendMessage(ChatColor.YELLOW + "X" + plugin.msg(lm.General_Size, cuboidArea.getXSize())); player.sendMessage(ChatColor.YELLOW + "Y" + plugin.msg(lm.General_Size, cuboidArea.getYSize())); player.sendMessage(ChatColor.YELLOW + "Z" + plugin.msg(lm.General_Size, cuboidArea.getZSize())); From 599bf3946af452853ede6cd3dd24679b895ecd4b Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 10:35:32 +0200 Subject: [PATCH 0535/1142] Lets allow flag translation and lets use translated flag description --- .../bukkit/residence/ConfigManager.java | 2 +- .../bukkit/residence/LocaleManager.java | 10 +++ .../bekvon/bukkit/residence/Residence.java | 3 +- .../bukkit/residence/commands/flags.java | 6 +- .../bukkit/residence/commands/reload.java | 42 +------------ .../bekvon/bukkit/residence/commands/rt.java | 1 - .../bukkit/residence/containers/Flags.java | 44 ++++++++++--- .../bekvon/bukkit/residence/gui/FlagUtil.java | 62 +++++++++---------- .../protection/ClaimedResidence.java | 2 - .../residence/protection/FlagPermissions.java | 21 ++++--- .../protection/ResidencePermissions.java | 5 ++ .../bukkit/residence/text/help/HelpEntry.java | 7 ++- 12 files changed, 111 insertions(+), 94 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index ef4886f1e..44fac3762 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -1163,7 +1163,7 @@ public void UpdateConfigFile() { } } - public void loadFlags() { + public void loadFlags() { FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); if (flags.isList("Global.TotalFlagDisabling")) { diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index c2ea4f0d2..5c2ecf248 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -21,8 +21,10 @@ import com.bekvon.bukkit.residence.containers.CommandStatus; import com.bekvon.bukkit.residence.containers.ConfigReader; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.utils.Debug; public class LocaleManager { @@ -132,6 +134,14 @@ else if (lm.getText() instanceof ArrayList) { continue; } } + + if (lang.equalsIgnoreCase(plugin.getConfigManager().getLanguage())) { + for (Flags one : Flags.values()) { + String pt = plugin.getLocaleManager().path + "flags.SubCommands." + one.toString(); + one.setTranslated(c.getC().getString(pt + ".Translated")); + one.setDesc(c.getC().getString(pt + ".Description")); + } + } // custom commands diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index df7880466..e30c3561c 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -512,7 +512,6 @@ public void onEnable() { getConfigManager().UpdateFlagFile(); - FlagUtilManager = new FlagUtil(this); getFlagUtilManager().load(); try { @@ -1001,6 +1000,8 @@ public SelectionManager getSelectionManager() { } public FlagUtil getFlagUtilManager() { + if (FlagUtilManager == null) + FlagUtilManager = new FlagUtil(this); return FlagUtilManager; } diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index 5a3c614e3..d9be35559 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; + import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -34,9 +35,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "List of flags"); c.get(path + "Info", Arrays.asList("For flag values, usually true allows the action, and false denys the action.")); - for (Flags fl : Flags.values()) { - String pt = path + "SubCommands." + fl.getName(); + String pt = path + "SubCommands." + fl.toString(); + c.get(pt + ".Translated", fl.toString()); c.get(pt + ".Description", fl.getDesc()); String forSet = "set/pset"; switch (fl.getFlagMode()) { @@ -51,6 +52,7 @@ public void getLocale(ConfigReader c, String path) { default: break; } + c.get(pt + ".Info", Arrays.asList("&eUsage: &6/res " + forSet + " " + fl.getName() + " true/false/remove")); } diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index c912376cf..a98aa5cb2 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -1,19 +1,9 @@ package com.bekvon.bukkit.residence.commands; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; import java.util.Arrays; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -23,7 +13,6 @@ import com.bekvon.bukkit.residence.itemlist.WorldItemManager; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.protection.WorldFlagManager; -import com.bekvon.bukkit.residence.text.help.HelpEntry; public class reload implements cmd { @@ -40,36 +29,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } if (args[1].equalsIgnoreCase("lang")) { - plugin.getLM().LanguageReload(); - File langFile = new File(new File(plugin.dataFolder, "Language"), plugin.getConfigManager().getLanguage() + ".yml"); - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - if (langFile.isFile()) { - FileConfiguration langconfig = new YamlConfiguration(); - try { - langconfig.load(in); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } - plugin.helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - } else { - System.out.println(plugin.getPrefix() + " Language file does not exist..."); - } + plugin.getLM().LanguageReload(); + plugin.getLocaleManager().LoadLang(plugin.getConfigManager().getLanguage()); sender.sendMessage(plugin.getPrefix() + " Reloaded language file."); - if (in != null) - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } return true; } else if (args[1].equalsIgnoreCase("config")) { plugin.getConfigManager().UpdateConfigFile(); diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 38899e0de..df5587335 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -99,7 +99,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } Long time = System.currentTimeMillis(); Location loc = plugin.getRandomTpManager().getRandomlocation(wname); - Debug.D(System.currentTimeMillis() - time); plugin.getRandomTeleportMap().put(tPlayer.getName(), System.currentTimeMillis()); if (loc == null) { diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 5f7b6197c..bfa39f618 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -1,5 +1,9 @@ package com.bekvon.bukkit.residence.containers; +import com.bekvon.bukkit.residence.utils.Debug; + +import cmiLib.ItemManager.CMIMaterial; + public enum Flags { anvil(145, 0, FlagMode.Both, "Allows or denys interaction with anvil", true), admin(7, 0, FlagMode.Player, "Gives a player permission to change flags on a residence", true), @@ -113,8 +117,8 @@ public enum Flags { wspeed1(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true), wspeed2(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true); - private int id; - private int data; + private String translated = null; + private CMIMaterial icon; private FlagMode flagMode; private String desc; private boolean enabled; @@ -124,24 +128,30 @@ public static enum FlagMode { Player, Residence, Both, Group } + @Deprecated private Flags(int id, int data, FlagMode flagMode, String desc, boolean enabled) { - this.id = id; - this.data = data; + this(CMIMaterial.get(id, data), flagMode, desc, enabled); + } + + private Flags(CMIMaterial icon, FlagMode flagMode, String desc, boolean enabled) { + this.icon = icon; this.flagMode = flagMode; this.desc = desc; this.enabled = enabled; } + @Deprecated public int getId() { - return id; + return icon.getId(); } + @Deprecated public int getData() { - return data; + return icon.getData(); } public String getName() { - return this.name(); + return getTranslated() == null ? this.name() : getTranslated(); } public FlagMode getFlagMode() { @@ -166,7 +176,9 @@ public void setEnabled(boolean enabled) { public static Flags getFlag(String flag) { for (Flags f : Flags.values()) { - if (f.getName().equalsIgnoreCase(flag)) + if (f.toString().equalsIgnoreCase(flag)) + return f; + if (f.getTranslated() != null && f.getTranslated().equalsIgnoreCase(flag)) return f; } return null; @@ -179,4 +191,20 @@ public boolean isGlobalyEnabled() { public void setGlobalyEnabled(boolean globalyEnabled) { this.globalyEnabled = globalyEnabled; } + + public String getTranslated() { + return translated; + } + + public void setTranslated(String translated) { + this.translated = translated; + } + + public CMIMaterial getIcon() { + return icon; + } + + public void setIcon(CMIMaterial icon) { + this.icon = icon; + } } diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 6262de7f3..75e56f30f 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -1,15 +1,12 @@ package com.bekvon.bukkit.residence.gui; -import java.io.File; import java.util.Set; -import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.CommentedYamlConfiguration; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import cmiLib.ItemManager.CMIMaterial; public class FlagUtil { @@ -21,42 +18,45 @@ public FlagUtil(Residence plugin) { this.plugin = plugin; } + public void load() { - File f = new File(plugin.getDataFolder(), "flags.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); + ConfigReader c = null; + try { + c = new ConfigReader("flags.yml"); + } catch (Exception e1) { + e1.printStackTrace(); + } - ConfigReader c = new ConfigReader(conf, writer); + if (c != null) { + if (!c.isConfigurationSection("Global.FlagPermission")) + return; - if (!conf.isConfigurationSection("Global.FlagPermission")) - return; + Set allFlags = c.getConfigurationSection("Global.FlagPermission").getKeys(false); - Set allFlags = conf.getConfigurationSection("Global.FlagPermission").getKeys(false); + for (String oneFlag : allFlags) { + if (!c.getC().contains("Global.FlagGui." + oneFlag)) + continue; - for (String oneFlag : allFlags) { - if (!c.getC().contains("Global.FlagGui." + oneFlag)) - continue; + int id = 35; + int data = 0; - int id = 35; - int data = 0; + String value = c.get("Global.FlagGui." + oneFlag, "35-0"); - String value = c.get("Global.FlagGui." + oneFlag, "35-0"); + try { + if (value.contains("-")) { + id = Integer.parseInt(value.split("-")[0]); + data = Integer.parseInt(value.split("-")[1]); + } else + id = Integer.parseInt(value); + } catch (Exception e) { + } - try { - if (value.contains("-")) { - id = Integer.parseInt(value.split("-")[0]); - data = Integer.parseInt(value.split("-")[1]); - } else - id = Integer.parseInt(value); - } catch (Exception e) { + CMIMaterial Mat = CMIMaterial.get(id, data); + if (Mat == null) + Mat = CMIMaterial.STONE; + ItemStack item = Mat.newItemStack(); + flagData.addFlagButton(oneFlag.toLowerCase(), item); } - - CMIMaterial Mat = CMIMaterial.get(id, data); - if (Mat == null) - Mat = CMIMaterial.STONE; - ItemStack item = Mat.newItemStack(); - flagData.addFlagButton(oneFlag.toLowerCase(), item); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index ef93f107d..4992662f8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -407,8 +407,6 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } } - Debug.D(area.getHighLoc().getBlockY()); - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 29b2c4473..19f3c24a9 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -27,6 +27,7 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.utils.Debug; import cmiLib.ItemManager.CMIMaterial; import cmiLib.VersionChecker.Version; @@ -842,7 +843,8 @@ public String listFlags(Integer split, Integer totalShow) { if (flag != null && !flag.isGlobalyEnabled()) continue; - + if (flag == null) + continue; i++; t++; @@ -856,12 +858,12 @@ public String listFlags(Integer split, Integer totalShow) { } if (next.getValue()) { - sbuild.append("&2").append("+").append(flag); + sbuild.append("&2").append("").append(flag.getName()); if (it.hasNext()) { sbuild.append(" "); } } else { - sbuild.append("&3").append("-").append(flag); + sbuild.append("&8").append("").append(flag.getName()); if (it.hasNext()) { sbuild.append(" "); } @@ -933,13 +935,18 @@ protected String printPlayerFlags(Map flags) { Iterator> it = set.iterator(); while (it.hasNext()) { Entry next = it.next(); + + Flags flag = Flags.getFlag(next.getKey()); + if (flag == null) + continue; + if (next.getValue()) { - sbuild.append("&2").append("+").append(next.getKey()); + sbuild.append("&2").append("").append(flag.getName()); if (it.hasNext()) { sbuild.append(" "); } } else { - sbuild.append("&3").append("-").append(next.getKey()); + sbuild.append("&8").append("").append(flag.getName()); if (it.hasNext()) { sbuild.append(" "); } @@ -1176,12 +1183,12 @@ public String listGroupFlags(String group) { while (it.hasNext()) { Entry next = it.next(); if (next.getValue()) { - sbuild.append("&2").append("+").append(next.getKey()); + sbuild.append("&2").append("").append(next.getKey()); if (it.hasNext()) { sbuild.append(" "); } } else { - sbuild.append("&3").append("-").append(next.getKey()); + sbuild.append("&8").append("").append(next.getKey()); if (it.hasNext()) { sbuild.append(" "); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 53dd52c6c..c4c8f8c35 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -362,6 +362,11 @@ public boolean setFlag(CommandSender sender, String flag, FlagState state, boole } public boolean setFlag(CommandSender sender, String flag, FlagState state, boolean resadmin, boolean inform) { + + Flags f = Flags.getFlag(flag); + if (f != null) + flag = f.toString(); + if (validFlagGroups.containsKey(flag)) return this.setFlagGroup(sender, flag, state, resadmin); diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index cc649f64d..5a706b8bf 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -147,6 +147,11 @@ private List getHelpData(CommandSender sender, boolean resadmin) { continue; } + String flagName = entry.getName(); + Flags flag = Flags.getFlag(entry.getName()); + if (flag != null) + flagName = flag.getName(); + String desc = entry.getDescription(); switch (entry.getName().toLowerCase()) { @@ -159,7 +164,7 @@ private List getHelpData(CommandSender sender, boolean resadmin) { } // adding flag name and description for later sorting - unsortMap.put(entry.getName(), Residence.getInstance().msg(lm.InformationPage_FlagsList, entry.getName(), desc)); + unsortMap.put(entry.getName(), Residence.getInstance().msg(lm.InformationPage_FlagsList, flagName, desc)); continue; } } From 3462c375f9f483aaa1cde7e7509d54e7e351f8bd Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 10:45:20 +0200 Subject: [PATCH 0536/1142] Lets use material names instead of id and data for gui icons --- .../bukkit/residence/ConfigManager.java | 27 +++++++------------ .../bekvon/bukkit/residence/gui/SetFlag.java | 10 +++---- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 44fac3762..49ae89568 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -1075,31 +1075,22 @@ public void UpdateConfigFile() { c.getW().addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); - int id = c.get("Global.GUI.setTrue.Id", 35); - int data = c.get("Global.GUI.setTrue.Data", 13); - - Material Mat = CMIMaterial.get(id).getMaterial(); + CMIMaterial Mat = CMIMaterial.get(c.get("Global.GUI.setTrue", "GREEN_WOOL")); if (Mat == null) - Mat = Material.STONE; - GuiTrue = new ItemStack(Mat, 1, (short) data); + Mat = CMIMaterial.GREEN_WOOL; + GuiTrue = Mat.newItemStack(); c.getW().addComment("Global.GUI.setFalse", "Item id and data to use when flag is set to false"); - id = c.get("Global.GUI.setFalse.Id", 35); - data = c.get("Global.GUI.setFalse.Data", 14); - - Mat = CMIMaterial.get(id).getMaterial(); + Mat = CMIMaterial.get(c.get("Global.GUI.setFalse", "RED_WOOL")); if (Mat == null) - Mat = Material.STONE; - GuiFalse = new ItemStack(Mat, 1, (short) data); + Mat = CMIMaterial.RED_WOOL; + GuiFalse = Mat.newItemStack(); c.getW().addComment("Global.GUI.setRemove", "Item id and data to use when flag is set to remove"); - id = c.get("Global.GUI.setRemove.Id", 35); - data = c.get("Global.GUI.setRemove.Data", 8); - - Mat = CMIMaterial.get(id).getMaterial(); + Mat = CMIMaterial.get(c.get("Global.GUI.setRemove", "LIGHT_GRAY_WOOL")); if (Mat == null) - Mat = Material.STONE; - GuiRemove = new ItemStack(Mat, 1, (short) data); + Mat = CMIMaterial.LIGHT_GRAY_WOOL; + GuiRemove = Mat.newItemStack(); c.getW().addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", "This is quite heavy on server side, so enable only if you really need this feature"); diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 9e63c3723..331f806d2 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -32,7 +32,7 @@ public class SetFlag { private String targetPlayer = null; private Inventory inventory; private LinkedHashMap permMap = new LinkedHashMap(); - private LinkedHashMap> description = new LinkedHashMap>(); + private LinkedHashMap> description = new LinkedHashMap>(); private List flags = null; private boolean admin = false; private int page = 1; @@ -124,13 +124,11 @@ public void recalculateInv() { } private void fillFlagDescriptions() { - Set list = Residence.getInstance().getLM().getKeyList("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands"); - for (String onelist : list) { - String onelisttemp = Residence.getInstance().msg("CommandHelp.SubCommands.res.SubCommands.flags.SubCommands." + onelist + ".Description"); + for (Flags flag : Flags.values()) { List lore = new ArrayList(); int i = 0; String sentence = ""; - for (String oneWord : onelisttemp.split(" ")) { + for (String oneWord : flag.getDesc().split(" ")) { sentence += oneWord + " "; if (i > 4) { lore.add(ChatColor.YELLOW + sentence); @@ -140,7 +138,7 @@ private void fillFlagDescriptions() { i++; } lore.add(ChatColor.YELLOW + sentence); - description.put(onelist, lore); + description.put(flag, lore); } } From a165aad1f38754c7be7163bf8cb11e1bec83a907 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 12:07:10 +0200 Subject: [PATCH 0537/1142] Lets use centralized libraries --- .../bukkit/residence/ConfigManager.java | 407 ++++++++---------- .../bukkit/residence/LocaleManager.java | 63 ++- .../bukkit/residence/allNms/v1_8Events.java | 2 +- .../bukkit/residence/commands/area.java | 2 +- .../bukkit/residence/commands/auto.java | 2 +- .../bukkit/residence/commands/bank.java | 2 +- .../bukkit/residence/commands/check.java | 2 +- .../bukkit/residence/commands/clearflags.java | 2 +- .../bukkit/residence/commands/command.java | 2 +- .../bukkit/residence/commands/compass.java | 2 +- .../bukkit/residence/commands/confirm.java | 2 +- .../bukkit/residence/commands/contract.java | 2 +- .../bukkit/residence/commands/create.java | 2 +- .../bukkit/residence/commands/current.java | 2 +- .../bukkit/residence/commands/expand.java | 2 +- .../bukkit/residence/commands/flags.java | 2 +- .../bukkit/residence/commands/give.java | 2 +- .../bukkit/residence/commands/gset.java | 2 +- .../bukkit/residence/commands/info.java | 2 +- .../bukkit/residence/commands/kick.java | 2 +- .../bukkit/residence/commands/lease.java | 2 +- .../bukkit/residence/commands/limits.java | 2 +- .../bukkit/residence/commands/list.java | 2 +- .../bukkit/residence/commands/listall.java | 2 +- .../residence/commands/listallhidden.java | 2 +- .../bukkit/residence/commands/listhidden.java | 2 +- .../bukkit/residence/commands/lists.java | 2 +- .../bukkit/residence/commands/lset.java | 2 +- .../bukkit/residence/commands/market.java | 2 +- .../bukkit/residence/commands/material.java | 2 +- .../bukkit/residence/commands/message.java | 2 +- .../bukkit/residence/commands/mirror.java | 2 +- .../bukkit/residence/commands/padd.java | 2 +- .../bukkit/residence/commands/pdel.java | 2 +- .../bukkit/residence/commands/pset.java | 2 +- .../bekvon/bukkit/residence/commands/rc.java | 4 +- .../bukkit/residence/commands/reload.java | 2 +- .../bukkit/residence/commands/remove.java | 2 +- .../bukkit/residence/commands/removeall.java | 2 +- .../residence/commands/removeworld.java | 2 +- .../bukkit/residence/commands/rename.java | 2 +- .../bukkit/residence/commands/renamearea.java | 2 +- .../bukkit/residence/commands/resadmin.java | 2 +- .../bukkit/residence/commands/resbank.java | 2 +- .../bukkit/residence/commands/reset.java | 2 +- .../bekvon/bukkit/residence/commands/rt.java | 2 +- .../bukkit/residence/commands/select.java | 2 +- .../bukkit/residence/commands/server.java | 2 +- .../bekvon/bukkit/residence/commands/set.java | 2 +- .../bukkit/residence/commands/setall.java | 2 +- .../bukkit/residence/commands/setallfor.java | 2 +- .../bukkit/residence/commands/setmain.java | 2 +- .../bukkit/residence/commands/setowner.java | 2 +- .../bukkit/residence/commands/shop.java | 2 +- .../bukkit/residence/commands/show.java | 2 +- .../residence/commands/signconvert.java | 2 +- .../bukkit/residence/commands/signupdate.java | 2 +- .../bukkit/residence/commands/sublist.java | 2 +- .../bukkit/residence/commands/subzone.java | 2 +- .../bukkit/residence/commands/tool.java | 2 +- .../bekvon/bukkit/residence/commands/tp.java | 2 +- .../bukkit/residence/commands/tpconfirm.java | 2 +- .../bukkit/residence/commands/tpset.java | 2 +- .../bukkit/residence/commands/unstuck.java | 2 +- .../bukkit/residence/commands/version.java | 2 +- .../residence/commandsInProgress/siege.java | 2 +- .../bukkit/residence/containers/Flags.java | 224 +++++----- .../bukkit/residence/containers/cmd.java | 2 + .../bekvon/bukkit/residence/gui/FlagUtil.java | 29 +- .../bekvon/bukkit/residence/gui/SetFlag.java | 14 +- .../listeners/ResidenceBlockListener.java | 4 +- .../listeners/ResidenceEntityListener.java | 10 +- .../listeners/ResidencePlayerListener.java | 109 +++-- .../residence/protection/FlagPermissions.java | 8 +- .../protection/ResidencePermissions.java | 8 +- .../bukkit/residence/utils/CrackShot.java | 4 +- 76 files changed, 478 insertions(+), 534 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 49ae89568..b421cad1a 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -1,12 +1,7 @@ package com.bekvon.bukkit.residence; -import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -27,13 +22,13 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.containers.ConfigReader; import com.bekvon.bukkit.residence.containers.EconomyType; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; import cmiLib.CMIEffectManager.CMIParticle; +import cmiLib.ConfigReader; import cmiLib.ItemManager.CMIMaterial; public class ConfigManager { @@ -310,10 +305,10 @@ void UpdateFlagFile() { conf.set("Global.TotalFlagDisabling", Arrays.asList("Completely", "Disabled", "Particular", "Flags")); for (Flags fl : Flags.values()) { - if (conf.isBoolean("Global.FlagPermission." + fl.getName())) + if (conf.isBoolean("Global.FlagPermission." + fl)) continue; - conf.createSection("Global.FlagPermission." + fl.getName()); - conf.set("Global.FlagPermission." + fl.getName(), fl.isEnabled()); + conf.createSection("Global.FlagPermission." + fl); + conf.set("Global.FlagPermission." + fl, fl.isEnabled()); } if (!conf.isConfigurationSection("Global.FlagGui")) @@ -321,20 +316,8 @@ void UpdateFlagFile() { ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); - for (Flags fl : Flags.values()) { - if (guiSection.isInt(fl.getName() + ".Id") && guiSection.isInt(fl.getName() + ".Data")) { - - String data = ""; - if (guiSection.getInt(fl.getName() + ".Data") != 0) - data = "-" + guiSection.getInt(fl.getName() + ".Data"); - - guiSection.set(fl.getName(), guiSection.getInt(fl.getName() + ".Id") + data); - } else { - String data = ""; - if (fl.getData() != 0) - data = "-" + guiSection.getInt(fl.getName() + ".Data"); - guiSection.set(fl.getName(), fl.getId() + data); - } + for (Flags fl : Flags.values()) { + guiSection.set(fl.toString(), fl.getIcon().toString()); } try { @@ -352,29 +335,29 @@ public void UpdateGroupedFlagsFile() { if (!conf.isConfigurationSection("Global.GroupedFlags")) { conf.createSection("Global.GroupedFlags"); conf.set("Global.GroupedFlags.redstone", Arrays.asList( - Flags.note.getName(), - Flags.pressure.getName(), - Flags.lever.getName(), - Flags.button.getName(), - Flags.diode.getName())); + Flags.note.toString(), + Flags.pressure.toString(), + Flags.lever.toString(), + Flags.button.toString(), + Flags.diode.toString())); conf.set("Global.GroupedFlags.craft", Arrays.asList( - Flags.brew.getName(), - Flags.table.getName(), - Flags.enchant.getName())); + Flags.brew.toString(), + Flags.table.toString(), + Flags.enchant.toString())); conf.set("Global.GroupedFlags.trusted", Arrays.asList( - Flags.use.getName(), - Flags.tp.getName(), - Flags.build.getName(), - Flags.container.getName(), - Flags.move.getName(), - Flags.leash.getName(), - Flags.animalkilling.getName(), - Flags.mobkilling.getName(), - Flags.shear.getName(), - Flags.chat.getName())); + Flags.use.toString(), + Flags.tp.toString(), + Flags.build.toString(), + Flags.container.toString(), + Flags.move.toString(), + Flags.leash.toString(), + Flags.animalkilling.toString(), + Flags.mobkilling.toString(), + Flags.shear.toString(), + Flags.chat.toString())); conf.set("Global.GroupedFlags.fire", Arrays.asList( - Flags.ignite.getName(), - Flags.firespread.getName())); + Flags.ignite.toString(), + Flags.firespread.toString())); try { conf.save(f); @@ -390,136 +373,128 @@ public void UpdateGroupedFlagsFile() { } } - @SuppressWarnings("deprecation") public void UpdateConfigFile() { - File f = new File(plugin.getDataFolder(), "config.yml"); + String defaultWorldName = Bukkit.getServer().getWorlds().size() > 0 ? Bukkit.getServer().getWorlds().get(0).getName() : "World"; - BufferedReader in = null; + ConfigReader c = null; try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); + c = new ConfigReader("config.yml"); + } catch (Exception e) { + e.printStackTrace(); } - if (in == null) + if (c == null) return; - String defaultWorldName = Bukkit.getServer().getWorlds().size() > 0 ? Bukkit.getServer().getWorlds().get(0).getName() : "World"; - - YamlConfiguration conf = YamlConfiguration.loadConfiguration(in); - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); - ConfigReader c = new ConfigReader(conf, writer); + c.copyDefaults(true); - c.getW().addComment("Global", "These are Global Settings for Residence."); + c.addComment("Global", "These are Global Settings for Residence."); - c.getW().addComment("Global.UUIDConvertion", "Starts UUID conversion on plugin startup", "DONT change this if you are not sure what you doing"); + c.addComment("Global.UUIDConvertion", "Starts UUID conversion on plugin startup", "DONT change this if you are not sure what you doing"); UUIDConvertion = c.get("Global.UUIDConvertion", true); - c.getW().addComment("Global.OfflineMode", + c.addComment("Global.OfflineMode", "If you running offline server, better to check this as true. This will help to solve issues with changing players UUID."); OfflineMode = c.get("Global.OfflineMode", false); - c.getW().addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); + c.addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); versionCheck = c.get("Global.versionCheck", true); - c.getW().addComment("Global.Language", "This loads the .yml file in the Residence Language folder", + c.addComment("Global.Language", "This loads the .yml file in the Residence Language folder", "All Residence text comes from this file. (NOT DONE YET)"); - language = c.get("Global.Language", "English", false); + language = c.get("Global.Language", "English"); - c.getW().addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", + c.addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); selectionTool = CMIMaterial.get(c.get("Global.SelectionToolId", CMIMaterial.WOODEN_HOE.name())); - c.getW().addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); + c.addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); SelectionIgnoreY = c.get("Global.Selection.IgnoreY", false); - c.getW().addComment("Global.Selection.IgnoreYInSubzone", + c.addComment("Global.Selection.IgnoreYInSubzone", "When this set to true, selections inside existing residence will be from bottom to top of that residence", "When this set to false, selections inside existing residence will be exactly as they are"); SelectionIgnoreYInSubzone = c.get("Global.Selection.IgnoreYInSubzone", false); - c.getW().addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", + c.addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", "This will lower residence price by up to 256 times, so adjust block price BEFORE enabling this"); NoCostForYBlocks = c.get("Global.Selection.NoCostForYBlocks", false); - c.getW().addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", + c.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", "Simply equip this tool and hit a location inside the residence and it will display the info for it."); infoTool = CMIMaterial.get(c.get("Global.InfoToolId", Material.STRING.toString())); - c.getW().addComment("Global.Optimizations.DefaultWorld", "Name of your main residence world. Usually normal starting world 'World'. Capitalization essential"); - DefaultWorld = c.get("Global.Optimizations.DefaultWorld", defaultWorldName, false); + c.addComment("Global.Optimizations.DefaultWorld", "Name of your main residence world. Usually normal starting world 'World'. Capitalization essential"); + DefaultWorld = c.get("Global.Optimizations.DefaultWorld", defaultWorldName); - c.getW().addComment("Global.Optimizations.DisabledWorlds.List", "List Of Worlds where this plugin is disabled"); + c.addComment("Global.Optimizations.DisabledWorlds.List", "List Of Worlds where this plugin is disabled"); DisabledWorldsList = c.get("Global.Optimizations.DisabledWorlds.List", new ArrayList()); - c.getW().addComment("Global.Optimizations.DisabledWorlds.DisableListeners", "Disables all listeners in included worlds"); + c.addComment("Global.Optimizations.DisabledWorlds.DisableListeners", "Disables all listeners in included worlds"); DisableListeners = c.get("Global.Optimizations.DisabledWorlds.DisableListeners", true); - c.getW().addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); + c.addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); DisableCommands = c.get("Global.Optimizations.DisabledWorlds.DisableCommands", true); - c.getW().addComment("Global.Optimizations.ItemPickUpDelay", "Delay in seconds between item pickups after residence flag prevents it", "Keep it at arround 10 sec to lower unesecery checks"); + c.addComment("Global.Optimizations.ItemPickUpDelay", "Delay in seconds between item pickups after residence flag prevents it", "Keep it at arround 10 sec to lower unesecery checks"); ItemPickUpDelay = c.get("Global.Optimizations.ItemPickUpDelay", 10); - c.getW().addComment("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", + c.addComment("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", "When set to true /res auto command will check for new area collision with other residences to avoid overlapping.", "Set it to false to gain some performace but new residence can often overlap with old ones"); AutomaticResidenceCreationCheckCollision = c.get("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", true); - c.getW().addComment("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", + c.addComment("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "Defines new residence name increment when using automatic residence creation command if residence with that name already exist"); AutomaticResidenceCreationIncrementFormat = c.get("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "_[number]"); -// c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", +// c.addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", // "You can bypass this with residence.checkbadflags permission node"); // DisableNoFlagMessageUse = c.get("Global.Optimizations.DisabledNoFlagMessage.Use", false); -// c.getW().addComment("Global.Optimizations.DisabledNoFlagMessage.Worlds", "List Of Worlds where player wont get error messages"); +// c.addComment("Global.Optimizations.DisabledNoFlagMessage.Worlds", "List Of Worlds where player wont get error messages"); // DisableNoFlagMessageWorlds = c.get("Global.Optimizations.DisabledNoFlagMessage.Worlds", Arrays.asList(Bukkit.getWorlds().get(0).getName())); - c.getW().addComment("Global.Optimizations.GlobalChat.Enabled", + c.addComment("Global.Optimizations.GlobalChat.Enabled", "Enables or disables chat modification by including players main residence name"); GlobalChatEnabled = c.get("Global.Optimizations.GlobalChat.Enabled", false); - c.getW().addComment("Global.Optimizations.GlobalChat.SelfModify", + c.addComment("Global.Optimizations.GlobalChat.SelfModify", "Modifys chat to add chat titles. If you're using a chat manager, you may add the tag {residence} to your chat format and disable this."); GlobalChatSelfModify = c.get("Global.Optimizations.GlobalChat.SelfModify", true); - GlobalChatFormat = c.get("Global.Optimizations.GlobalChat.Format", "&c[&e%1&c]", true); + GlobalChatFormat = c.get("Global.Optimizations.GlobalChat.Format", "&c[&e%1&c]"); - c.getW().addComment("Global.Optimizations.BlockAnyTeleportation", + c.addComment("Global.Optimizations.BlockAnyTeleportation", "When this set to true, any teleportation to residence where player dont have tp flag, action will be denyied", "This can prevent from teleporting players to residence with 3rd party plugins like esentials /tpa"); BlockAnyTeleportation = c.get("Global.Optimizations.BlockAnyTeleportation", true); - c.getW().addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using", + c.addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxResCount = c.get("Global.Optimizations.MaxResCount", 30); - c.getW().addComment("Global.Optimizations.MaxRentCount", "Set this as low as posible depending of residence.max.rents.[number] permission you are using", + c.addComment("Global.Optimizations.MaxRentCount", "Set this as low as posible depending of residence.max.rents.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxRentCount = c.get("Global.Optimizations.MaxRentCount", 10); - c.getW().addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using", + c.addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxSubzonesCount = c.get("Global.Optimizations.MaxSubzoneCount", 5); - c.getW().addComment("Global.Optimizations.MaxSubzoneDepthCount", "Set this as low as posible depending of residence.max.subzonedepth.[number] permission you are using", + c.addComment("Global.Optimizations.MaxSubzoneDepthCount", "Set this as low as posible depending of residence.max.subzonedepth.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxSubzoneDepthCount = c.get("Global.Optimizations.MaxSubzoneDepthCount", 5); - c.getW().addComment("Global.Optimizations.OverridePvp", "By setting this to true, regular pvp flag will be acting as overridepvp flag", + c.addComment("Global.Optimizations.OverridePvp", "By setting this to true, regular pvp flag will be acting as overridepvp flag", "Overridepvp flag tries to ignore any pvp protection in that residence by any other plugin"); OverridePvp = c.get("Global.Optimizations.OverridePvp", false); // residence kick location - c.getW().addComment("Global.Optimizations.KickLocation.Use", + c.addComment("Global.Optimizations.KickLocation.Use", "By setting this to true, when player kicks another player from residence, he will be teleported to this location instead of getting outside residence"); Boolean UseKick = c.get("Global.Optimizations.KickLocation.Use", false); String KickLocationWorld = c.get("Global.Optimizations.KickLocation.World", defaultWorldName); Double KickLocationX = c.get("Global.Optimizations.KickLocation.X", 0.5); Double KickLocationY = c.get("Global.Optimizations.KickLocation.Y", 63.0); Double KickLocationZ = c.get("Global.Optimizations.KickLocation.Z", 0.5); - c.getW().addComment("Global.Optimizations.KickLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); + c.addComment("Global.Optimizations.KickLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); Double KickPitch = c.get("Global.Optimizations.KickLocation.Pitch", 0.0); - c.getW().addComment("Global.Optimizations.KickLocation.Yaw", "Head position to left and right. Range from -180 to 180"); + c.addComment("Global.Optimizations.KickLocation.Yaw", "Head position to left and right. Range from -180 to 180"); Double KickYaw = c.get("Global.Optimizations.KickLocation.Yaw", 0.0); if (UseKick) { World world = Bukkit.getWorld(KickLocationWorld); @@ -530,14 +505,14 @@ public void UpdateConfigFile() { } } - c.getW().addComment("Global.Optimizations.FlyLandLocation.World", "Used when players fly state is being turned to false because of fly flag and there is no solid land where to land for player"); + c.addComment("Global.Optimizations.FlyLandLocation.World", "Used when players fly state is being turned to false because of fly flag and there is no solid land where to land for player"); String FlyLocationWorld = c.get("Global.Optimizations.FlyLandLocation.World", defaultWorldName); Double FlyLocationX = c.get("Global.Optimizations.FlyLandLocation.X", 0.5); Double FlyLocationY = c.get("Global.Optimizations.FlyLandLocation.Y", 63.0); Double FlyLocationZ = c.get("Global.Optimizations.FlyLandLocation.Z", 0.5); - c.getW().addComment("Global.Optimizations.FlyLandLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); + c.addComment("Global.Optimizations.FlyLandLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); Double FlyPitch = c.get("Global.Optimizations.FlyLandLocation.Pitch", 0.0); - c.getW().addComment("Global.Optimizations.FlyLandLocation.Yaw", "Head position to left and right. Range from -180 to 180"); + c.addComment("Global.Optimizations.FlyLandLocation.Yaw", "Head position to left and right. Range from -180 to 180"); Double FlyYaw = c.get("Global.Optimizations.FlyLandLocation.Yaw", 0.0); World world = Bukkit.getWorld(FlyLocationWorld); if (world != null) { @@ -546,29 +521,29 @@ public void UpdateConfigFile() { FlyLandLocation.setYaw(FlyYaw.floatValue()); } - c.getW().addComment("Global.Optimizations.ShortInfo.Use", + c.addComment("Global.Optimizations.ShortInfo.Use", "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); ShortInfoUse = c.get("Global.Optimizations.ShortInfo.Use", false); // Vote range - c.getW().addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); + c.addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); VoteRangeFrom = c.get("Global.Optimizations.Vote.RangeFrom", 0); VoteRangeTo = c.get("Global.Optimizations.Vote.RangeTo", 10); - c.getW().addComment("Global.Optimizations.Vote.OnlyLike", "If this true, players can only give like for shop instead of point voting"); + c.addComment("Global.Optimizations.Vote.OnlyLike", "If this true, players can only give like for shop instead of point voting"); OnlyLike = c.get("Global.Optimizations.Vote.OnlyLike", false); - c.getW().addComment("Global.Optimizations.ConsoleLogs.ShowFlagChanges", "If this true, flag changes throw GUI will be recorded in console"); + c.addComment("Global.Optimizations.ConsoleLogs.ShowFlagChanges", "If this true, flag changes throw GUI will be recorded in console"); ConsoleLogsShowFlagChanges = c.get("Global.Optimizations.ConsoleLogs.ShowFlagChanges", true); // Healing/Feed interval - c.getW().addComment("Global.Optimizations.Intervals.Heal", "How often in seconds to heal/feed players in residence with appropriate flag", + c.addComment("Global.Optimizations.Intervals.Heal", "How often in seconds to heal/feed players in residence with appropriate flag", "Bigger numbers can save some resources"); HealInterval = c.get("Global.Optimizations.Intervals.Heal", 1); FeedInterval = c.get("Global.Optimizations.Intervals.Feed", 5); // negative potion effect list - c.getW().addComment("Global.Optimizations.NegativePotionEffects", + c.addComment("Global.Optimizations.NegativePotionEffects", "Potions containing one of thos effects will be ignored if residence dont have pvp true flag set"); NegativePotionEffects = c.get("Global.Optimizations.NegativePotionEffects", Arrays.asList("blindness", "confusion", "harm", "hunger", "poison", "slow", "slow_digging", "weakness", "wither")); @@ -576,7 +551,7 @@ public void UpdateConfigFile() { NegativeLingeringPotionEffects = c.get("Global.Optimizations.NegativeLingeringPotions", Arrays.asList("slowness", "instant_damage", "poison", "slowness")); - c.getW().addComment("Global.Optimizations.WalkSpeed", + c.addComment("Global.Optimizations.WalkSpeed", "Defines speed for particular wspeed1 and wspeed2 flags. It can be from 0 up to 5"); WalkSpeed1 = c.get("Global.Optimizations.WalkSpeed.1", 0.5D); WalkSpeed1 = WalkSpeed1 < 0 ? 0 : WalkSpeed1; @@ -587,13 +562,13 @@ public void UpdateConfigFile() { WalkSpeed2 = WalkSpeed2 > 5 ? 5 : WalkSpeed2; WalkSpeed2 = WalkSpeed2 / 5.0; - c.getW().addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", + c.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); minMoveUpdate = c.get("Global.MoveCheckInterval", 500); - c.getW().addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); + c.addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); TeleportDelay = c.get("Global.Tp.TeleportDelay", 3); - c.getW().addComment("Global.Tp.TeleportTitleMessage", "Show aditional message in title message area when player is teleporting to residence"); + c.addComment("Global.Tp.TeleportTitleMessage", "Show aditional message in title message area when player is teleporting to residence"); TeleportTitleMessage = c.get("Global.Tp.TeleportTitleMessage", true); Set worlds = new HashSet(); @@ -609,15 +584,15 @@ public void UpdateConfigFile() { boolean enabled = c.get(path + "Enabled", true); if (!commented) - c.getW().addComment("Global.RandomTeleportation.Worlds." + one, + c.addComment("Global.RandomTeleportation.Worlds." + one, "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); if (!commented) - c.getW().addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); + c.addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); int MaxCoord = c.get(path + "MaxCoord", 1000); if (!commented) - c.getW().addComment(path + "MinCord", + c.addComment(path + "MinCord", "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); int MinCord = c.get(path + "MinCord", 500); int CenterX = c.get(path + "CenterX", 0); @@ -654,24 +629,24 @@ public void UpdateConfigFile() { RTeleport.add(new RandomTeleport(one, MaxCoord, MinCord, CenterX, CenterZ)); } - c.getW().addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); + c.addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); rtCooldown = c.get("Global.RandomTeleportation.Cooldown", 5); - c.getW().addComment("Global.RandomTeleportation.MaxTries", "How many times to try find correct location for teleportation.", + c.addComment("Global.RandomTeleportation.MaxTries", "How many times to try find correct location for teleportation.", "Keep it at low number, as player always can try again after delay"); rtMaxTries = c.get("Global.RandomTeleportation.MaxTries", 20); - c.getW().addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); + c.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); autoSaveInt = c.get("Global.SaveInterval", 10); - c.getW().addComment("Global.NewSaveMechanic", "New save mechanic can minimize save file couple times and speedup save/load time in general", "Bigger files have bigger impact"); + c.addComment("Global.NewSaveMechanic", "New save mechanic can minimize save file couple times and speedup save/load time in general", "Bigger files have bigger impact"); NewSaveMechanic = c.get("Global.NewSaveMechanic", false); - c.getW().addComment("Global.Backup.AutoCleanUp.Use", + c.addComment("Global.Backup.AutoCleanUp.Use", "Do you want to automaticaly remove backup files from main backup folder if they are older than defined day amount"); BackupAutoCleanUpUse = c.get("Global.Backup.AutoCleanUp.Use", false); BackupAutoCleanUpDays = c.get("Global.Backup.AutoCleanUp.Days", 30); - c.getW().addComment("Global.Backup.UseZip", "Do you want to backup files by creating zip files in main residence folder in backup folder", + c.addComment("Global.Backup.UseZip", "Do you want to backup files by creating zip files in main residence folder in backup folder", "This wont have effect on regular backuped files made in save folder"); UseZipBackup = c.get("Global.Backup.UseZip", true); @@ -685,24 +660,24 @@ public void UpdateConfigFile() { BackupconfigFile = c.get("Global.Backup.IncludeFiles.config", true); // Auto remove old residences - c.getW().addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", + c.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", "Players can bypass this with residence.cleanbypass permission node"); AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); - c.getW().addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); + c.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); - c.getW().addComment("Global.AutoCleanUp.Regenerate", "Do you want to regenetate old residence area", "This requires world edit to be present"); + c.addComment("Global.AutoCleanUp.Regenerate", "Do you want to regenetate old residence area", "This requires world edit to be present"); AutoCleanUpRegenerate = c.get("Global.AutoCleanUp.Regenerate", false); - c.getW().addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); + c.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); - c.getW().addComment("Global.Lwc.OnDelete", "Removes lwc protection from all defined objects when removing residence"); + c.addComment("Global.Lwc.OnDelete", "Removes lwc protection from all defined objects when removing residence"); LwcOnDelete = c.get("Global.Lwc.OnDelete", true); - c.getW().addComment("Global.Lwc.OnBuy", "Removes lwc protection from all defined objects when buying residence"); + c.addComment("Global.Lwc.OnBuy", "Removes lwc protection from all defined objects when buying residence"); LwcOnBuy = c.get("Global.Lwc.OnBuy", true); - c.getW().addComment("Global.Lwc.OnUnrent", "Removes lwc protection from all defined objects when unrenting residence"); + c.addComment("Global.Lwc.OnUnrent", "Removes lwc protection from all defined objects when unrenting residence"); LwcOnUnrent = c.get("Global.Lwc.OnUnrent", true); - c.getW().addComment("Global.Lwc.MaterialList", "List of blocks you want to remove protection from"); + c.addComment("Global.Lwc.MaterialList", "List of blocks you want to remove protection from"); for (String oneName : c.get("Global.Lwc.MaterialList", Arrays.asList("CHEST", "TRAPPED_CHEST", "furnace", "dispenser"))) { Material mat = Material.getMaterial(oneName.toUpperCase()); if (mat != null) @@ -712,98 +687,98 @@ public void UpdateConfigFile() { } // TNT explosions below 63 - c.getW().addComment("Global.AntiGreef.TNT.ExplodeBelow", + c.addComment("Global.AntiGreef.TNT.ExplodeBelow", "When set to true will allow tnt and minecart with tnt to explode below 62 (default) level outside of residence", "This will allow mining with tnt and more vanilla play"); TNTExplodeBelow = c.get("Global.AntiGreef.TNT.ExplodeBelow", false); TNTExplodeBelowLevel = c.get("Global.AntiGreef.TNT.level", 62); // Creeper explosions below 63 - c.getW().addComment("Global.AntiGreef.Creeper.ExplodeBelow", "When set to true will allow Creeper explode below 62 (default) level outside of residence", + c.addComment("Global.AntiGreef.Creeper.ExplodeBelow", "When set to true will allow Creeper explode below 62 (default) level outside of residence", "This will give more realistic game play"); CreeperExplodeBelow = c.get("Global.AntiGreef.Creeper.ExplodeBelow", false); CreeperExplodeBelowLevel = c.get("Global.AntiGreef.Creeper.level", 62); // Flow - c.getW().addComment("Global.AntiGreef.Flow.Level", "Level from which one to start lava and water flow blocking", "This dont have effect in residence area"); + c.addComment("Global.AntiGreef.Flow.Level", "Level from which one to start lava and water flow blocking", "This dont have effect in residence area"); FlowLevel = c.get("Global.AntiGreef.Flow.Level", 63); - c.getW().addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); + c.addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); NoLava = c.get("Global.AntiGreef.Flow.NoLavaFlow", true); - c.getW().addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); + c.addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); NoWater = c.get("Global.AntiGreef.Flow.NoWaterFlow", true); NoFlowWorlds = c.get("Global.AntiGreef.Flow.Worlds", Arrays.asList(defaultWorldName)); // Place - c.getW().addComment("Global.AntiGreef.Place.Level", "Level from which one to start block lava and water place", "This don't have effect in residence area"); + c.addComment("Global.AntiGreef.Place.Level", "Level from which one to start block lava and water place", "This don't have effect in residence area"); PlaceLevel = c.get("Global.AntiGreef.Place.Level", 63); - c.getW().addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); + c.addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); NoLavaPlace = c.get("Global.AntiGreef.Place.NoLavaPlace", true); - c.getW().addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, playrs cant place water outside residence"); + c.addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, playrs cant place water outside residence"); NoWaterPlace = c.get("Global.AntiGreef.Place.NoWaterPlace", true); NoPlaceWorlds = c.get("Global.AntiGreef.Place.Worlds", Arrays.asList(defaultWorldName)); // Sand fall - c.getW().addComment("Global.AntiGreef.BlockFall.Use", "With this set to true, falling blocks will be deleted if they will land in different area"); + c.addComment("Global.AntiGreef.BlockFall.Use", "With this set to true, falling blocks will be deleted if they will land in different area"); useBlockFall = c.get("Global.AntiGreef.BlockFall.Use", true); - c.getW().addComment("Global.AntiGreef.BlockFall.Level", "Level from which one to start block block's fall", + c.addComment("Global.AntiGreef.BlockFall.Level", "Level from which one to start block block's fall", "This don't have effect in residence area or outside"); BlockFallLevel = c.get("Global.AntiGreef.BlockFall.Level", 62); BlockFallWorlds = c.get("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName)); // Res cleaning - c.getW().addComment("Global.AntiGreef.ResCleaning.Use", + c.addComment("Global.AntiGreef.ResCleaning.Use", "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", "Effective way to prevent residence creating near greefing target and then remove it"); UseClean = c.get("Global.AntiGreef.ResCleaning.Use", true); - c.getW().addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); + c.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); CleanLevel = c.get("Global.AntiGreef.ResCleaning.Level", 63); - c.getW().addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); + c.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); CleanBlocks = c.getIntList("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11)); CleanWorlds = c.get("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName)); - c.getW().addComment("Global.AntiGreef.Flags.Prevent", + c.addComment("Global.AntiGreef.Flags.Prevent", "By setting this to true flags from list will be protected from change while there is some one inside residence besides owner", "Protects in example from people inviting some one and changing pvp flag to true to kill them"); PvPFlagPrevent = c.get("Global.AntiGreef.Flags.Prevent", true); FlagsList = c.get("Global.AntiGreef.Flags.list", Arrays.asList("pvp")); - c.getW().addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); + c.addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); defaultGroup = c.get("Global.DefaultGroup", "default"); - c.getW().addComment("Global.UseLeaseSystem", "Enable / Disable the Lease System."); + c.addComment("Global.UseLeaseSystem", "Enable / Disable the Lease System."); useLeases = c.get("Global.UseLeaseSystem", false); - c.getW().addComment("Global.DateFormat", "Sets date format when shown in example lease or rent expire date", + c.addComment("Global.DateFormat", "Sets date format when shown in example lease or rent expire date", "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); DateFormat = c.get("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz"); - c.getW().addComment("Global.DateFormatShort", "Sets date format when shown in example lease or rent expire date", + c.addComment("Global.DateFormatShort", "Sets date format when shown in example lease or rent expire date", "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); DateFormatShort = c.get("Global.DateFormatShort", "MM.dd hh:mm"); - c.getW().addComment("Global.TimeZone", "Sets time zone for showing date, usefull when server is in different country then main server player base", + c.addComment("Global.TimeZone", "Sets time zone for showing date, usefull when server is in different country then main server player base", "Full list of posible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); TimeZone = c.get("Global.TimeZone", Calendar.getInstance().getTimeZone().getID()); - c.getW().addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); + c.addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); ResMoneyBack = c.get("Global.ResMoneyBack", false); - c.getW().addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); + c.addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); leaseCheckInterval = c.get("Global.LeaseCheckInterval", 10); - c.getW().addComment("Global.LeaseAutoRenew", + c.addComment("Global.LeaseAutoRenew", "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); leaseAutoRenew = c.get("Global.LeaseAutoRenew", true); - c.getW().addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); + c.addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); c.get("Global.EnablePermissions", true); - c.getW().addComment("Global.LegacyPermissions", "Set to true if NOT using Permissions or PermissionsBukkit, or using a really old version of Permissions"); + c.addComment("Global.LegacyPermissions", "Set to true if NOT using Permissions or PermissionsBukkit, or using a really old version of Permissions"); legacyperms = c.get("Global.LegacyPermissions", false); - c.getW().addComment("Global.EnableEconomy", + c.addComment("Global.EnableEconomy", "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); enableEconomy = c.get("Global.EnableEconomy", true); - c.getW().addComment("Global.Type", + c.addComment("Global.Type", "Defaults to None which will start by looking to default economy engine throw vault API and if it fails to any supported economy engine", "Custom economy engines can be defined to access economy directly", "Supported variables: " + EconomyType.toStringLine()); VaultEconomy = EconomyType.getByName(c.get("Global.Type", "None")); @@ -813,144 +788,144 @@ public void UpdateConfigFile() { VaultEconomy = EconomyType.None; } - c.getW().addComment("Global.ExtraEnterMessage", + c.addComment("Global.ExtraEnterMessage", "When enabled extra message will apear in chat if residence is for rent or for sell to inform how he can rent/buy residence with basic information."); ExtraEnterMessage = c.get("Global.ExtraEnterMessage", true); - c.getW().addComment("Global.Sell.Subzone", "If set to true, this will allow to sell subzones. Its recommended to keep it false tho"); + c.addComment("Global.Sell.Subzone", "If set to true, this will allow to sell subzones. Its recommended to keep it false tho"); SellSubzone = c.get("Global.Sell.Subzone", false); - c.getW().addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); + c.addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); enableRentSystem = c.get("Global.EnableRentSystem", true); // TownEnabled = c.get("Global.Town.Enabled", true); -// c.getW().addComment("Global.Town.MinRange", "Range between residences","Protects from building residence near another residence if owner not belonging to same town"); +// c.addComment("Global.Town.MinRange", "Range between residences","Protects from building residence near another residence if owner not belonging to same town"); // TownMinRange = c.get("Global.Town.MinRange", 16); - c.getW().addComment("Global.Rent.PreventRemoval", "Prevents residence/subzone removal if its subzone is still rented by some one"); + c.addComment("Global.Rent.PreventRemoval", "Prevents residence/subzone removal if its subzone is still rented by some one"); RentPreventRemoval = c.get("Global.Rent.PreventRemoval", true); - c.getW().addComment("Global.Rent.Inform.OnEnding", "Informs players on rent time ending"); + c.addComment("Global.Rent.Inform.OnEnding", "Informs players on rent time ending"); RentInformOnEnding = c.get("Global.Rent.Inform.OnEnding", true); - c.getW().addComment("Global.Rent.Inform.Before", "Time range in minutes when to start informing about ending rent"); + c.addComment("Global.Rent.Inform.Before", "Time range in minutes when to start informing about ending rent"); RentInformBefore = c.get("Global.Rent.Inform.Before", 1440); - c.getW().addComment("Global.Rent.Inform.Delay", "Time range in seconds for how long to wait after player logs in to inform about ending rents"); + c.addComment("Global.Rent.Inform.Delay", "Time range in seconds for how long to wait after player logs in to inform about ending rents"); RentInformDelay = c.get("Global.Rent.Inform.Delay", 60); - c.getW().addComment("Global.Rent.DefaultValues.AllowRenewing", "Default values used when putting residence for rent"); + c.addComment("Global.Rent.DefaultValues.AllowRenewing", "Default values used when putting residence for rent"); RentAllowRenewing = c.get("Global.Rent.DefaultValues.AllowRenewing", true); RentStayInMarket = c.get("Global.Rent.DefaultValues.StayInMarket", true); RentAllowAutoPay = c.get("Global.Rent.DefaultValues.AllowAutoPay", true); - c.getW().addComment("Global.Rent.DefaultValues.PlayerAutoPay", "If set to true, when player is not defining auto pay on renting, then this value will be used"); + c.addComment("Global.Rent.DefaultValues.PlayerAutoPay", "If set to true, when player is not defining auto pay on renting, then this value will be used"); RentPlayerAutoPay = c.get("Global.Rent.DefaultValues.PlayerAutoPay", true); - c.getW().addComment("Global.Rent.Schematics.RestoreAfterRentEnds", + c.addComment("Global.Rent.Schematics.RestoreAfterRentEnds", "EXPERIMENTAL!!! If set to true, residence will be restored to state it was when backup flag was set to true", "For securoty reassons only players with aditional residence.backup permission node can set backup flag"); RestoreAfterRentEnds = c.get("Global.Rent.Schematics.RestoreAfterRentEnds", true); - c.getW().addComment("Global.Rent.Schematics.SaveOnFlagChange", + c.addComment("Global.Rent.Schematics.SaveOnFlagChange", "When set to true, area state will be saved only when setting backup to true value", "When set to false, area state will be saved before each renting to have always up to date area look", "Keep in mind that when its set to false, there is slightly bigger server load as it has to save area each time when some one rents it"); SchematicsSaveOnFlagChange = c.get("Global.Rent.Schematics.SaveOnFlagChange", true); - c.getW().addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); + c.addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); rentCheckInterval = c.get("Global.RentCheckInterval", 10); - c.getW().addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); + c.addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); chatEnable = c.get("Global.ResidenceChatEnable", true); - c.getW().addComment("Global.ActionBar.General", "True for ActionBar - new component in 1.8", "False for old Messaging in chat enter/leave Residence messages"); + c.addComment("Global.ActionBar.General", "True for ActionBar - new component in 1.8", "False for old Messaging in chat enter/leave Residence messages"); actionBar = c.get("Global.ActionBar.General", true); - c.getW().addComment("Global.TitleBar.EnterLeave", "When set to true enter/leave messages will be shown in title/subtitle slots", + c.addComment("Global.TitleBar.EnterLeave", "When set to true enter/leave messages will be shown in title/subtitle slots", "Subtitle can be defined with %subtitle% while setting enter/leave messages"); titleMessage = c.get("Global.TitleBar.EnterLeave", false); ActionBarOnSelection = c.get("Global.ActionBar.ShowOnSelection", true); - c.getW().addComment("Global.ResidenceChatColor", "Color of residence chat."); + c.addComment("Global.ResidenceChatColor", "Color of residence chat."); try { - chatColor = ChatColor.valueOf(c.get("Global.ResidenceChatColor", "DARK_PURPLE", true)); + chatColor = ChatColor.valueOf(c.get("Global.ResidenceChatColor", "DARK_PURPLE")); } catch (Exception ex) { chatColor = ChatColor.DARK_PURPLE; } - c.getW().addComment("Global.ResidenceChatPrefixLenght", "Max lenght of residence chat prefix including color codes"); + c.addComment("Global.ResidenceChatPrefixLenght", "Max lenght of residence chat prefix including color codes"); chatPrefixLength = c.get("Global.ResidenceChatPrefixLength", 16); - c.getW().addComment("Global.AdminOnlyCommands", + c.addComment("Global.AdminOnlyCommands", "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); adminsOnly = c.get("Global.AdminOnlyCommands", false); - c.getW().addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); + c.addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); adminOps = c.get("Global.AdminOPs", true); - c.getW().addComment("Global.AdminFullAccess", + c.addComment("Global.AdminFullAccess", "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); AdminFullAccess = c.get("Global.AdminFullAccess", false); - c.getW().addComment("Global.MultiWorldPlugin", + c.addComment("Global.MultiWorldPlugin", "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); multiworldPlugin = c.get("Global.MultiWorldPlugin", "Multiverse-Core"); - c.getW().addComment("Global.ResidenceFlagsInherit", "Setting this to true causes subzones to inherit flags from their parent zones."); + c.addComment("Global.ResidenceFlagsInherit", "Setting this to true causes subzones to inherit flags from their parent zones."); flagsInherit = c.get("Global.ResidenceFlagsInherit", true); - c.getW().addComment("Global.PreventRentModify", "Setting this to false will allow rented residences to be modified by the renting player."); + c.addComment("Global.PreventRentModify", "Setting this to false will allow rented residences to be modified by the renting player."); preventBuildInRent = c.get("Global.PreventRentModify", true); - c.getW().addComment("Global.PreventSubZoneRemoval", "Setting this to true will prevent subzone deletion when subzone owner is not same as parent zone owner."); + c.addComment("Global.PreventSubZoneRemoval", "Setting this to true will prevent subzone deletion when subzone owner is not same as parent zone owner."); PreventSubZoneRemoval = c.get("Global.PreventSubZoneRemoval", true); - c.getW().addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); + c.addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); stopOnSaveError = c.get("Global.StopOnSaveFault", true); - c.getW().addComment( + c.addComment( "This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); namefix = c.get("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]"); - c.getW().addComment("Global.ShowIntervalMessages", + c.addComment("Global.ShowIntervalMessages", "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); showIntervalMessages = c.get("Global.ShowIntervalMessages", false); - c.getW().addComment("Global.ShowNoobMessage", "Setting this to true sends a tutorial message to the new player when he places chest on ground."); + c.addComment("Global.ShowNoobMessage", "Setting this to true sends a tutorial message to the new player when he places chest on ground."); ShowNoobMessage = c.get("Global.ShowNoobMessage", true); - c.getW().addComment("Global.NewPlayer", "Setting this to true creates residence around players placed chest if he don't have any.", + c.addComment("Global.NewPlayer", "Setting this to true creates residence around players placed chest if he don't have any.", "Only once every server restart if he still don't have any residence"); NewPlayerUse = c.get("Global.NewPlayer.Use", false); - c.getW().addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", + c.addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", "By setting to false, money will be taken from player, if he has them"); NewPlayerFree = c.get("Global.NewPlayer.Free", true); - c.getW().addComment("Global.NewPlayer.Range", "Range from placed chest o both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide"); + c.addComment("Global.NewPlayer.Range", "Range from placed chest o both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide"); NewPlayerRangeX = c.get("Global.NewPlayer.Range.X", 5); NewPlayerRangeY = c.get("Global.NewPlayer.Range.Y", 5); NewPlayerRangeZ = c.get("Global.NewPlayer.Range.Z", 5); - c.getW().addComment("Global.CustomContainers", + c.addComment("Global.CustomContainers", "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); customContainers = c.getIntList("Global.CustomContainers", new ArrayList()); customBothClick = c.getIntList("Global.CustomBothClick", new ArrayList()); customRightClick = c.getIntList("Global.CustomRightClick", new ArrayList()); - c.getW().addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundries"); + c.addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundries"); useVisualizer = c.get("Global.Visualizer.Use", true); - c.getW().addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", + c.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", "Keep it no more as 30, as player cant see more than 16 blocks"); VisualizerRange = c.get("Global.Visualizer.Range", 16); - c.getW().addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); + c.addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); VisualizerShowFor = c.get("Global.Visualizer.ShowFor", 5000); - c.getW().addComment("Global.Visualizer.updateInterval", "How often in ticks to update particles for player"); + c.addComment("Global.Visualizer.updateInterval", "How often in ticks to update particles for player"); VisualizerUpdateInterval = c.get("Global.Visualizer.updateInterval", 20); - c.getW().addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); + c.addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); VisualizerRowSpacing = c.get("Global.Visualizer.RowSpacing", 2); if (VisualizerRowSpacing < 1) VisualizerRowSpacing = 1; - c.getW().addComment("Global.Visualizer.CollumnSpacing", "Spacing in blocks between particle effects for collums"); + c.addComment("Global.Visualizer.CollumnSpacing", "Spacing in blocks between particle effects for collums"); VisualizerCollumnSpacing = c.get("Global.Visualizer.CollumnSpacing", 2); if (VisualizerCollumnSpacing < 1) VisualizerCollumnSpacing = 1; - c.getW().addComment("Global.Visualizer.SkipBy", + c.addComment("Global.Visualizer.SkipBy", "Defines by how many particles we need to skip", "This will create moving particle effect and will improve overall look of selection", "By increasing this number, you can decrease update interval"); @@ -958,12 +933,12 @@ public void UpdateConfigFile() { if (VisualizerSkipBy < 1) VisualizerSkipBy = 1; - c.getW().addComment("Global.Visualizer.FrameCap", "Maximum amount of frame particles to show for one player"); + c.addComment("Global.Visualizer.FrameCap", "Maximum amount of frame particles to show for one player"); VisualizerFrameCap = c.get("Global.Visualizer.FrameCap", 500); if (VisualizerFrameCap < 1) VisualizerFrameCap = 1; - c.getW().addComment("Global.Visualizer.SidesCap", "Maximum amount of sides particles to show for one player"); + c.addComment("Global.Visualizer.SidesCap", "Maximum amount of sides particles to show for one player"); VisualizerSidesCap = c.get("Global.Visualizer.SidesCap", 2000); if (VisualizerSidesCap < 1) VisualizerSidesCap = 1; @@ -977,7 +952,7 @@ public void UpdateConfigFile() { effectsList += one.name().toLowerCase() + ", "; } - c.getW().addComment("Global.Visualizer.Selected", + c.addComment("Global.Visualizer.Selected", "Particle effect names. Posible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance", @@ -1067,42 +1042,42 @@ public void UpdateConfigFile() { Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } - c.getW().addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); + c.addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); BounceAnimation = c.get("Global.BounceAnimation", true); - c.getW().addComment("Global.GUI.Enabled", "Enable or disable flag GUI"); + c.addComment("Global.GUI.Enabled", "Enable or disable flag GUI"); useFlagGUI = c.get("Global.GUI.Enabled", true); - c.getW().addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); + c.addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); CMIMaterial Mat = CMIMaterial.get(c.get("Global.GUI.setTrue", "GREEN_WOOL")); if (Mat == null) Mat = CMIMaterial.GREEN_WOOL; GuiTrue = Mat.newItemStack(); - c.getW().addComment("Global.GUI.setFalse", "Item id and data to use when flag is set to false"); + c.addComment("Global.GUI.setFalse", "Item id and data to use when flag is set to false"); Mat = CMIMaterial.get(c.get("Global.GUI.setFalse", "RED_WOOL")); if (Mat == null) Mat = CMIMaterial.RED_WOOL; GuiFalse = Mat.newItemStack(); - c.getW().addComment("Global.GUI.setRemove", "Item id and data to use when flag is set to remove"); + c.addComment("Global.GUI.setRemove", "Item id and data to use when flag is set to remove"); Mat = CMIMaterial.get(c.get("Global.GUI.setRemove", "LIGHT_GRAY_WOOL")); if (Mat == null) Mat = CMIMaterial.LIGHT_GRAY_WOOL; GuiRemove = Mat.newItemStack(); - c.getW().addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", + c.addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", "This is quite heavy on server side, so enable only if you really need this feature"); AutoMobRemoval = c.get("Global.AutoMobRemoval.Use", false); - c.getW().addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); + c.addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); AutoMobRemovalInterval = c.get("Global.AutoMobRemoval.Interval", 3); enforceAreaInsideArea = c.get("Global.EnforceAreaInsideArea", false); spoutEnable = c.get("Global.EnableSpout", false); enableLeaseMoneyAccount = c.get("Global.EnableLeaseMoneyAccount", true); - c.getW().addComment("Global.CouldronCompatability", + c.addComment("Global.CouldronCompatability", "By setting this to true, partial compatability for kCouldron servers will be anabled. Action bar messages and selection visualizer will be disabled automaticaly as off incorrect compatability"); CouldronCompatability = c.get("Global.CouldronCompatability", false); if (CouldronCompatability) { @@ -1112,23 +1087,23 @@ public void UpdateConfigFile() { ActionBarOnSelection = false; } - c.getW().addComment("DynMap.Use", "Enables or disable DynMap Support"); + c.addComment("DynMap.Use", "Enables or disable DynMap Support"); DynMapUse = c.get("DynMap.Use", false); - c.getW().addComment("DynMap.ShowFlags", "Shows or hides residence flags"); + c.addComment("DynMap.ShowFlags", "Shows or hides residence flags"); DynMapShowFlags = c.get("DynMap.ShowFlags", true); - c.getW().addComment("DynMap.HideHidden", "If set true, residence with hidden flag set to true will be hidden from dynmap"); + c.addComment("DynMap.HideHidden", "If set true, residence with hidden flag set to true will be hidden from dynmap"); DynMapHideHidden = c.get("DynMap.HideHidden", true); - c.getW().addComment("DynMap.Layer.3dRegions", "Enables 3D zones"); + c.addComment("DynMap.Layer.3dRegions", "Enables 3D zones"); DynMapLayer3dRegions = c.get("DynMap.Layer.3dRegions", true); - c.getW().addComment("DynMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); + c.addComment("DynMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); DynMapLayerSubZoneDepth = c.get("DynMap.Layer.SubZoneDepth", 2); - c.getW().addComment("DynMap.Border.Color", "Color of border. Pick color from this page http://www.w3schools.com/colors/colors_picker.asp"); + c.addComment("DynMap.Border.Color", "Color of border. Pick color from this page http://www.w3schools.com/colors/colors_picker.asp"); DynMapBorderColor = c.get("DynMap.Border.Color", "#FF0000"); - c.getW().addComment("DynMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); + c.addComment("DynMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); DynMapBorderOpacity = c.get("DynMap.Border.Opacity", 0.3); - c.getW().addComment("DynMap.Border.Weight", "Border thickness"); + c.addComment("DynMap.Border.Weight", "Border thickness"); DynMapBorderWeight = c.get("DynMap.Border.Weight", 3); DynMapFillOpacity = c.get("DynMap.Fill.Opacity", 0.3); DynMapFillColor = c.get("DynMap.Fill.Color", "#FFFF00"); @@ -1136,25 +1111,15 @@ public void UpdateConfigFile() { DynMapFillRented = c.get("DynMap.Fill.Rented", "#99ff33"); DynMapFillForSale = c.get("DynMap.Fill.ForSale", "#0066ff"); - c.getW().addComment("DynMap.VisibleRegions", "Shows only regions on this list"); + c.addComment("DynMap.VisibleRegions", "Shows only regions on this list"); DynMapVisibleRegions = c.get("DynMap.VisibleRegions", new ArrayList()); - c.getW().addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden ingame"); + c.addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden ingame"); DynMapHiddenRegions = c.get("DynMap.HiddenRegions", new ArrayList()); - try { - c.getW().save(f); - } catch (IOException e) { - e.printStackTrace(); - } - - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } + c.save(); } - public void loadFlags() { + public void loadFlags() { FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); if (flags.isList("Global.TotalFlagDisabling")) { diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 5c2ecf248..0d9f02e13 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -20,11 +20,12 @@ import org.bukkit.configuration.file.YamlConfiguration; import com.bekvon.bukkit.residence.containers.CommandStatus; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.utils.Debug; +import com.google.common.util.concurrent.ListenableFutureTask; public class LocaleManager { @@ -57,19 +58,15 @@ private static YamlConfiguration loadConfiguration(BufferedReader in, String lan public void LoadLang(String lang) { File f = new File(plugin.getDataFolder(), "Language" + File.separator + lang + ".yml"); - BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(new FileInputStream(f), StandardCharsets.UTF_8)); } catch (FileNotFoundException e1) { e1.printStackTrace(); } - if (in == null) return; - YamlConfiguration conf = loadConfiguration(in, lang); - if (conf == null) { try { in.close(); @@ -78,25 +75,28 @@ public void LoadLang(String lang) { } return; } + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + + ConfigReader c = null; + try { + c = new ConfigReader("Language" + File.separator + lang + ".yml"); + } catch (Exception e1) { + e1.printStackTrace(); + } + if (c == null) + return; + c.copyDefaults(true); - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - ConfigReader c = new ConfigReader(conf, writer); - c.getC().options().copyDefaults(true); - - StringBuilder header = new StringBuilder(); - header.append(System.getProperty("line.separator")); - header.append("NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy"); - header.append(System.getProperty("line.separator")); - header.append("of this file and modify that instead. This file will be updated automatically by Residence"); - header.append(System.getProperty("line.separator")); - header.append("when a newer version is detected, and your changes will be overwritten. Once you "); - header.append(System.getProperty("line.separator")); - header.append("have a copy of this file, change the Language: option under the Residence config.yml"); - header.append(System.getProperty("line.separator")); - header.append("to whatever you named your copy."); - header.append(System.getProperty("line.separator")); - - c.getW().options().header(header.toString()); + c.header(Arrays.asList("NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy", + "of this file and modify that instead. This file will be updated automatically by Residence", + "when a newer version is detected, and your changes will be overwritten. Once you ", + "have a copy of this file, change the Language: option under the Residence config.yml", + "to whatever you named your copy.")); for (lm lm : lm.values()) { if (lm.getText() instanceof String) @@ -112,10 +112,10 @@ else if (lm.getText() instanceof ArrayList) { } if (lm.getComments() != null) - writer.addComment(lm.getPath(), lm.getComments()); + c.addComment(lm.getPath(), lm.getComments()); } - writer.addComment("CommandHelp", ""); + c.addComment("CommandHelp", ""); c.get("CommandHelp.Description", "Contains Help for Residence"); c.get("CommandHelp.SubCommands.res.Description", "Main Residence Command"); @@ -134,7 +134,7 @@ else if (lm.getText() instanceof ArrayList) { continue; } } - + if (lang.equalsIgnoreCase(plugin.getConfigManager().getLanguage())) { for (Flags one : Flags.values()) { String pt = plugin.getLocaleManager().path + "flags.SubCommands." + one.toString(); @@ -158,15 +158,6 @@ else if (lm.getText() instanceof ArrayList) { Arrays.asList("&eUsage: &6/res removeworld [worldname]", "Can only be used from console")); // Write back config - try { - c.getW().save(f); - } catch (IOException e) { - e.printStackTrace(); - } - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } + c.save(); } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java index 62f1b300d..cfd4fdfc1 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java @@ -33,7 +33,7 @@ public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { event.setCancelled(true); - Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container.getName()); + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container); } } diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index bd3b7b25b..f51e4d35b 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 02e339413..a541aaa70 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -12,7 +12,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionGroup; diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 7d22e63b8..1f8006340 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index d166188b7..0b7493619 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/clearflags.java b/src/com/bekvon/bukkit/residence/commands/clearflags.java index 27dd27a12..a4f742673 100644 --- a/src/com/bekvon/bukkit/residence/commands/clearflags.java +++ b/src/com/bekvon/bukkit/residence/commands/clearflags.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index 9a6b305e1..ab51946c1 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index d324cc306..1f0edd3c6 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/confirm.java b/src/com/bekvon/bukkit/residence/commands/confirm.java index 38b82f7a0..8b0d37895 100644 --- a/src/com/bekvon/bukkit/residence/commands/confirm.java +++ b/src/com/bekvon/bukkit/residence/commands/confirm.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 6920ea451..95ca57e22 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index e84262033..5cb567574 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/current.java b/src/com/bekvon/bukkit/residence/commands/current.java index e92a38b96..f1087f08e 100644 --- a/src/com/bekvon/bukkit/residence/commands/current.java +++ b/src/com/bekvon/bukkit/residence/commands/current.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 7b8fbca2d..b285484f6 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index d9be35559..ceaee2c41 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index a46359a3f..3fb9d7c3e 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class give implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/gset.java b/src/com/bekvon/bukkit/residence/commands/gset.java index e9773b6f0..02f653a06 100644 --- a/src/com/bekvon/bukkit/residence/commands/gset.java +++ b/src/com/bekvon/bukkit/residence/commands/gset.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index c4f801518..320634844 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index a0c84de64..788f94566 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -10,7 +10,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index dc229d0c4..d0a88d38c 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -10,7 +10,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index bb2d1de65..6d4f0b10d 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -9,7 +9,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index c62866d73..bf457b40a 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -8,7 +8,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class list implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index 165877448..1d0a75df9 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -10,7 +10,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class listall implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/listallhidden.java b/src/com/bekvon/bukkit/residence/commands/listallhidden.java index df9e13bd6..edb2a5f1c 100644 --- a/src/com/bekvon/bukkit/residence/commands/listallhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listallhidden.java @@ -6,7 +6,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/listhidden.java b/src/com/bekvon/bukkit/residence/commands/listhidden.java index 6d5c697a3..5eea41dfd 100644 --- a/src/com/bekvon/bukkit/residence/commands/listhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listhidden.java @@ -6,7 +6,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/lists.java b/src/com/bekvon/bukkit/residence/commands/lists.java index 94ea9b4c9..fe7a36c39 100644 --- a/src/com/bekvon/bukkit/residence/commands/lists.java +++ b/src/com/bekvon/bukkit/residence/commands/lists.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java index adf3b166b..b2f3a1741 100644 --- a/src/com/bekvon/bukkit/residence/commands/lset.java +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -9,7 +9,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 68922a625..8de3ebdba 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -12,7 +12,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index a8164b055..fcd52cd2d 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 4be978da2..a9fdc57b9 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/mirror.java b/src/com/bekvon/bukkit/residence/commands/mirror.java index 668223183..2ba9c8fc7 100644 --- a/src/com/bekvon/bukkit/residence/commands/mirror.java +++ b/src/com/bekvon/bukkit/residence/commands/mirror.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class mirror implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index 5e36d4362..ca14e8ef2 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class padd implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index 1a5a04edf..057671ed1 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -9,7 +9,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class pdel implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 5b01044e9..f6c19bba1 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -9,7 +9,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index f005cef84..8c9b27ceb 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -10,7 +10,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; @@ -71,7 +71,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } if (!res.getPermissions().playerHas(player.getName(), Flags.chat, true) && !plugin.getPermissionManager().isResidenceAdmin(player)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.chat.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.chat, res.getName()); return false; } plugin.getPlayerListener().tooglePlayerResidenceChat(player, res.getName()); diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index a98aa5cb2..ffaa1417e 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -7,7 +7,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.itemlist.WorldItemManager; diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 4ff623266..a54be2ced 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/removeall.java b/src/com/bekvon/bukkit/residence/commands/removeall.java index 9711be86d..0e935d24d 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeall.java +++ b/src/com/bekvon/bukkit/residence/commands/removeall.java @@ -6,7 +6,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index 966fcd812..c769b1a2a 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -8,7 +8,7 @@ import org.bukkit.command.ConsoleCommandSender; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class removeworld implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/rename.java b/src/com/bekvon/bukkit/residence/commands/rename.java index 3c8e96f42..d87ef4565 100644 --- a/src/com/bekvon/bukkit/residence/commands/rename.java +++ b/src/com/bekvon/bukkit/residence/commands/rename.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class rename implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/renamearea.java b/src/com/bekvon/bukkit/residence/commands/renamearea.java index cc21a6691..708e83ec2 100644 --- a/src/com/bekvon/bukkit/residence/commands/renamearea.java +++ b/src/com/bekvon/bukkit/residence/commands/renamearea.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/resadmin.java b/src/com/bekvon/bukkit/residence/commands/resadmin.java index 073c9553f..bf3745ab3 100644 --- a/src/com/bekvon/bukkit/residence/commands/resadmin.java +++ b/src/com/bekvon/bukkit/residence/commands/resadmin.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/resbank.java b/src/com/bekvon/bukkit/residence/commands/resbank.java index 6faa2ffad..73b2a3172 100644 --- a/src/com/bekvon/bukkit/residence/commands/resbank.java +++ b/src/com/bekvon/bukkit/residence/commands/resbank.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index 80a45862d..ffadb71bc 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -10,7 +10,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index df5587335..3ca32c2c7 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -11,7 +11,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index f6b69a80a..90459b74a 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -12,7 +12,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java index c6965d06c..07440fcf4 100644 --- a/src/com/bekvon/bukkit/residence/commands/server.java +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index d854fd130..302696056 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -9,7 +9,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/setall.java b/src/com/bekvon/bukkit/residence/commands/setall.java index 95c748bd3..ab2e2ce82 100644 --- a/src/com/bekvon/bukkit/residence/commands/setall.java +++ b/src/com/bekvon/bukkit/residence/commands/setall.java @@ -9,7 +9,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/setallfor.java b/src/com/bekvon/bukkit/residence/commands/setallfor.java index f23fafd7f..630cb5f4f 100644 --- a/src/com/bekvon/bukkit/residence/commands/setallfor.java +++ b/src/com/bekvon/bukkit/residence/commands/setallfor.java @@ -7,7 +7,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/setmain.java b/src/com/bekvon/bukkit/residence/commands/setmain.java index 74e1c74ce..3e7e77b26 100644 --- a/src/com/bekvon/bukkit/residence/commands/setmain.java +++ b/src/com/bekvon/bukkit/residence/commands/setmain.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index d4d31465f..fb57f31ef 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -6,7 +6,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index b14c81e6e..ec66892d4 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -15,7 +15,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/show.java b/src/com/bekvon/bukkit/residence/commands/show.java index 270a7fd96..eccaff88c 100644 --- a/src/com/bekvon/bukkit/residence/commands/show.java +++ b/src/com/bekvon/bukkit/residence/commands/show.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/signconvert.java b/src/com/bekvon/bukkit/residence/commands/signconvert.java index 0ad22a340..8d00c2adf 100644 --- a/src/com/bekvon/bukkit/residence/commands/signconvert.java +++ b/src/com/bekvon/bukkit/residence/commands/signconvert.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/signupdate.java b/src/com/bekvon/bukkit/residence/commands/signupdate.java index 77c3f4e8a..86efa8700 100644 --- a/src/com/bekvon/bukkit/residence/commands/signupdate.java +++ b/src/com/bekvon/bukkit/residence/commands/signupdate.java @@ -6,7 +6,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java index a4294d25f..ce0414c91 100644 --- a/src/com/bekvon/bukkit/residence/commands/sublist.java +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index 61b6c47d8..07c6d5ed6 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index 943395a17..18f657894 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index eac58d854..66b8d8d55 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java index df56d490f..909bfb0b4 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java +++ b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/tpset.java b/src/com/bekvon/bukkit/residence/commands/tpset.java index 0bbe63604..8320c199a 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpset.java +++ b/src/com/bekvon/bukkit/residence/commands/tpset.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index be7c41fd4..9f8a89865 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -8,7 +8,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/version.java b/src/com/bekvon/bukkit/residence/commands/version.java index 2a36d3ee7..926ce0a23 100644 --- a/src/com/bekvon/bukkit/residence/commands/version.java +++ b/src/com/bekvon/bukkit/residence/commands/version.java @@ -7,7 +7,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class version implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java b/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java index 8f2f94107..7ce33e728 100644 --- a/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java +++ b/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java @@ -9,7 +9,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ConfigReader; +import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index bfa39f618..9a2307a03 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -1,121 +1,119 @@ package com.bekvon.bukkit.residence.containers; -import com.bekvon.bukkit.residence.utils.Debug; - import cmiLib.ItemManager.CMIMaterial; public enum Flags { - anvil(145, 0, FlagMode.Both, "Allows or denys interaction with anvil", true), - admin(7, 0, FlagMode.Player, "Gives a player permission to change flags on a residence", true), - animalkilling(365, 0, FlagMode.Both, "Allows or denys animal killing", true), - animals(383, 90, FlagMode.Residence, "Allows or denys animal spawns", true), - anvilbreak(145, 0, FlagMode.Residence, "Allows or denys anvil break in residence", true), - backup(47, 0, FlagMode.Residence, "If set to true, restores previous look of area (WordEdit required)", false), - bank(130, 0, FlagMode.Both, "Allows or denys deposit/withdraw money from res bank", true), - bed(355, 0, FlagMode.Both, "Allows or denys players to use beds", true), - beacon(138, 0, FlagMode.Both, "Allows or denys interaction with beacon", true), - brew(379, 0, FlagMode.Both, "Allows or denys players to use brewing stands", true), - build(45, 0, FlagMode.Both, "Allows or denys building", true), - burn(50, 0, FlagMode.Residence, "Allows or denys Mob combustion in residences", true), - button(143, 0, FlagMode.Both, "Allows or denys players to use buttons", true), - cake(354, 0, FlagMode.Both, "Allows or denys players to eat cake", true), - canimals(383, 91, FlagMode.Residence, "Allows or denys custom animal spawns", true), - chorustp(432, 0, FlagMode.Both, "Allow or disallow teleporting to the residence with chorus fruit", true), - chat(386, 0, FlagMode.Both, "Allows to join residence chat room", true), - cmonsters(383, 50, FlagMode.Residence, "Allows or denys custom monster spawns", true), - commandblock(137, 0, FlagMode.Both, "Allows or denys command block interaction", false), - command(137, 0, FlagMode.Both, "Allows or denys comamnd use in residences", false), - container(342, 0, FlagMode.Both, "Allows or denys use of furnaces, chests, dispensers, etc...", true), - coords(345, 0, FlagMode.Residence, "Hides residence coordinates", true), - craft(1, 0, FlagMode.Residence, "Gives table, enchant, brew flags", true), - creeper(383, 50, FlagMode.Residence, "Allow or deny creeper explosions", true), - dragongrief(3, 0, FlagMode.Residence, "Prevents ender dragon block griefing", true), - day(37, 0, FlagMode.Residence, "Sets day time in residence", true), - dye(351, 14, FlagMode.Both, "Allows or denys sheep dyeing", true), - damage(283, 0, FlagMode.Residence, "Allows or denys all entity damage within the residence", false), - decay(18, 0, FlagMode.Residence, "Allows or denys leave decay in the residence", true), - destroy(121, 0, FlagMode.Both, "Allows or denys only destruction of blocks, overrides the build flag", true), - dryup(160, 11, FlagMode.Residence, "Prevents land from drying up", true), - diode(356, 0, FlagMode.Both, "Allows or denys players to use redstone repeaters", true), - door(324, 0, FlagMode.Both, "Allows or denys players to use doors and trapdoors", true), - egg(344, 0, FlagMode.Both, "Allows or denys interaction with dragon egg", true), - enchant(116, 0, FlagMode.Both, "Allows or denys players to use enchanting tables", true), - explode(407, 0, FlagMode.Residence, "Allows or denys explosions in residences", true), - enderpearl(368, 0, FlagMode.Both, "Allow or disallow teleporting to the residence with enderpearl", true), - fallinprotection(12, 0, FlagMode.Residence, "Protects from blocks falling into residence", true), - falldamage(301, 0, FlagMode.Residence, "Protects players from fall damage", true), - feed(364, 0, FlagMode.Residence, "Setting to true makes the residence feed its occupants", true), - friendlyfire(175, 0, FlagMode.Player, "Allow or disallow friendly fire", false), - fireball(385, 0, FlagMode.Residence, "Allows or denys fire balls in residences", true), - firespread(377, 0, FlagMode.Residence, "Allows or denys fire spread", true), - flowinprotection(333, 0, FlagMode.Residence, "Allows or denys liquid flow into residence", true), - flow(111, 0, FlagMode.Residence, "Allows or denys liquid flow", true), - flowerpot(390, 0, FlagMode.Both, "Allows or denys interaction with flower pot", true), - grow(295, 0, FlagMode.Residence, "Allows or denys plant growing", true), - glow(169, 0, FlagMode.Residence, "Players will start glowing when entering residence", true), - hotfloor(213, 0, FlagMode.Residence, "Prevent damage from magma blocks", true), - hidden(102, 0, FlagMode.Residence, "Hides residence from list or listall commands", false), - hook(346, 0, FlagMode.Both, "Allows or denys fishing rod hooking entities", true), - healing(373, 0, FlagMode.Residence, "Setting to true makes the residence heal its occupants", true), - iceform(79, 0, FlagMode.Residence, "Prevents from ice forming", true), - icemelt(79, 0, FlagMode.Residence, "Prevents ice from melting", true), - ignite(259, 0, FlagMode.Both, "Allows or denys fire ignition", true), - itemdrop(288, 0, FlagMode.Both, "Allows or denys item drop", true), - itempickup(289, 0, FlagMode.Both, "Allows or denys item pickup", true), - jump2(165, 0, FlagMode.Residence, "Allows to jump 2 blocks high", false), - jump3(165, 0, FlagMode.Residence, "Allows to jump 3 blocks high", false), - keepinv(298, 0, FlagMode.Residence, "Players keeps inventory after death", false), - keepexp(322, 0, FlagMode.Residence, "Players keeps exp after death", false), - lavaflow(327, 0, FlagMode.Residence, "Allows or denys lava flow, overrides flow", true), - leash(420, 0, FlagMode.Both, "Allows or denys aninal leash", true), - lever(69, 0, FlagMode.Both, "Allows or denys players to use levers", true), - mobexpdrop(362, 0, FlagMode.Residence, "Prevents mob droping exp on death", true), - mobitemdrop(351, 3, FlagMode.Residence, "Prevents mob droping items on death", true), - mobkilling(367, 0, FlagMode.Both, "Allows or denys mob killing", true), - monsters(52, 0, FlagMode.Residence, "Allows or denys monster spawns", true), - move(301, 0, FlagMode.Both, "Allows or denys movement in the residence", true), - nanimals(383, 92, FlagMode.Residence, "Allows or denys natural animal spawns", true), - nmonsters(383, 51, FlagMode.Residence, "Allows or denys natural monster spawns", true), - night(35, 15, FlagMode.Residence, "Sets night time in residence", true), - nofly(171, 1, FlagMode.Both, "Allows or denys fly in residence", false), - fly(171, 1, FlagMode.Both, "Toggles fly for players in residence", false), - nomobs(166, 0, FlagMode.Residence, "Prevents monsters from entering residence", true), - note(25, 0, FlagMode.Both, "Allows or denys players to use note blocks", true), - nodurability(145, 0, FlagMode.Residence, "Prevents item durability loss", false), - overridepvp(267, 0, FlagMode.Residence, "Overrides any plugin pvp protection", false), - pressure(147, 0, FlagMode.Both, "Allows or denys players to use pressure plates", true), - piston(33, 0, FlagMode.Residence, "Allow or deny pistons from pushing or pulling blocks in the residence", true), - pistonprotection(29, 0, FlagMode.Residence, "Enables or disabled piston block move in or out of residence", true), - place(169, 0, FlagMode.Both, "Allows or denys only placement of blocks, overrides the build flag", true), - pvp(268, 0, FlagMode.Residence, "Allow or deny pvp in the residence", true), - rain(38, 1, FlagMode.Residence, "Sets weather to rainny in residence", true), - redstone(175, 0, FlagMode.Group, "Gives lever, diode, button, pressure, note flags", true), - respawn(175, 0, FlagMode.Residence, "Automaticaly respawns player", false), - riding(329, 0, FlagMode.Both, "Prevent riding a horse", true), - shoot(262, 0, FlagMode.Residence, "Allows or denys shooting projectile in area", true), - sun(175, 0, FlagMode.Residence, "Sets weather to sunny in residence", true), - shop(389, 0, FlagMode.Residence, "Adds residence to special residence shop list", true), - snowtrail(78, 0, FlagMode.Residence, "Prevents snowman snow trails", true), - spread(332, 0, FlagMode.Residence, "Prevents block spreading", true), - snowball(332, 0, FlagMode.Residence, "Prevents snowball knockback", true), - sanimals(383, 101, FlagMode.Residence, "Allows or denys spawner or spawn egg animal spawns", true), - shear(359, 0, FlagMode.Both, "Allows or denys sheep shear", true), - smonsters(383, 54, FlagMode.Residence, "Allows or denys spawner or spawn egg monster spawns", true), - subzone(160, 7, FlagMode.Both, "Allow a player to make subzones in the residence", true), - table(58, 0, FlagMode.Both, "Allows or denys players to use workbenches", true), - tnt(46, 0, FlagMode.Residence, "Allow or deny tnt explosions", true), - tp(120, 0, FlagMode.Both, "Allow or disallow teleporting to the residence", true), - trade(388, 0, FlagMode.Both, "Allows or denys villager trading in residence", true), - trample(3, 0, FlagMode.Residence, "Allows or denys crop trampling in residence", true), - trusted(1, 0, FlagMode.Group, "Gives build, use, move, container and tp flags", true), - use(70, 0, FlagMode.Both, "Allows or denys use of doors, lever, buttons, etc...", true), - vehicledestroy(328, 0, FlagMode.Both, "Allows or denys vehicle destroy", true), - witherspawn(397, 1, FlagMode.Residence, "Allows or denys wither spawning", true), - witherdamage(397, 1, FlagMode.Residence, "Allows or denys wither damage", true), - witherdestruction(397, 1, FlagMode.Residence, "Allows or denys wither block damage", true), - waterflow(326, 0, FlagMode.Residence, "Allows or denys water flow, overrides flow", true), - wspeed1(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true), - wspeed2(373, 0, FlagMode.Residence, "Change players walk speed in residence to %1", true); + anvil(CMIMaterial.ANVIL, FlagMode.Both, "Allows or denys interaction with anvil", true), + admin(CMIMaterial.BEDROCK, FlagMode.Player, "Gives a player permission to change flags on a residence", true), + animalkilling(CMIMaterial.CHICKEN, FlagMode.Both, "Allows or denys animal killing", false), + animals(CMIMaterial.PIG_SPAWN_EGG, FlagMode.Residence, "Allows or denys animal spawns", true), + anvilbreak(CMIMaterial.ANVIL, FlagMode.Residence, "Allows or denys anvil break in residence", true), + backup(CMIMaterial.BOOKSHELF, FlagMode.Residence, "If set to true, restores previous look of area (WordEdit required)", false), + bank(CMIMaterial.ENDER_CHEST, FlagMode.Both, "Allows or denys deposit/withdraw money from res bank", true), + bed(CMIMaterial.WHITE_BED, FlagMode.Both, "Allows or denys players to use beds", true), + beacon(CMIMaterial.BEACON, FlagMode.Both, "Allows or denys interaction with beacon", true), + brew(CMIMaterial.BREWING_STAND, FlagMode.Both, "Allows or denys players to use brewing stands", true), + build(CMIMaterial.BRICKS, FlagMode.Both, "Allows or denys building", false), + burn(CMIMaterial.TORCH, FlagMode.Residence, "Allows or denys Mob combustion in residences", true), + button(CMIMaterial.OAK_BUTTON, FlagMode.Both, "Allows or denys players to use buttons", true), + cake(CMIMaterial.CAKE, FlagMode.Both, "Allows or denys players to eat cake", true), + canimals(CMIMaterial.SHEEP_SPAWN_EGG, FlagMode.Residence, "Allows or denys custom animal spawns", true), + chorustp(CMIMaterial.CHORUS_FRUIT, FlagMode.Both, "Allow or disallow teleporting to the residence with chorus fruit", true), + chat(CMIMaterial.WRITABLE_BOOK, FlagMode.Both, "Allows to join residence chat room", true), + cmonsters(CMIMaterial.CREEPER_SPAWN_EGG, FlagMode.Residence, "Allows or denys custom monster spawns", true), + commandblock(CMIMaterial.COMMAND_BLOCK, FlagMode.Both, "Allows or denys command block interaction", false), + command(CMIMaterial.COMMAND_BLOCK, FlagMode.Both, "Allows or denys comamnd use in residences", false), + container(CMIMaterial.CHEST_MINECART, FlagMode.Both, "Allows or denys use of furnaces, chests, dispensers, etc...", false), + coords(CMIMaterial.COMPASS, FlagMode.Residence, "Hides residence coordinates", true), + craft(CMIMaterial.STONE, FlagMode.Residence, "Gives table, enchant, brew flags", true), + creeper(CMIMaterial.CREEPER_SPAWN_EGG, FlagMode.Residence, "Allow or deny creeper explosions", false), + dragongrief(CMIMaterial.DIRT, FlagMode.Residence, "Prevents ender dragon block griefing", true), + day(CMIMaterial.DANDELION, FlagMode.Residence, "Sets day time in residence", true), + dye(CMIMaterial.ORANGE_DYE, FlagMode.Both, "Allows or denys sheep dyeing", true), + damage(CMIMaterial.GOLDEN_SWORD, FlagMode.Residence, "Allows or denys all entity damage within the residence", false), + decay(CMIMaterial.OAK_LEAVES, FlagMode.Residence, "Allows or denys leave decay in the residence", true), + destroy(CMIMaterial.END_STONE, FlagMode.Both, "Allows or denys only destruction of blocks, overrides the build flag", false), + dryup(CMIMaterial.BLUE_STAINED_GLASS_PANE, FlagMode.Residence, "Prevents land from drying up", true), + diode(CMIMaterial.REPEATER, FlagMode.Both, "Allows or denys players to use redstone repeaters", true), + door(CMIMaterial.OAK_DOOR, FlagMode.Both, "Allows or denys players to use doors and trapdoors", true), + egg(CMIMaterial.EGG, FlagMode.Both, "Allows or denys interaction with dragon egg", true), + enchant(CMIMaterial.ENCHANTING_TABLE, FlagMode.Both, "Allows or denys players to use enchanting tables", true), + explode(CMIMaterial.TNT_MINECART, FlagMode.Residence, "Allows or denys explosions in residences", false), + enderpearl(CMIMaterial.ENDER_PEARL, FlagMode.Both, "Allow or disallow teleporting to the residence with enderpearl", true), + fallinprotection(CMIMaterial.SAND, FlagMode.Residence, "Protects from blocks falling into residence", true), + falldamage(CMIMaterial.LEATHER_BOOTS, FlagMode.Residence, "Protects players from fall damage", true), + feed(CMIMaterial.COOKED_BEEF, FlagMode.Residence, "Setting to true makes the residence feed its occupants", true), + friendlyfire(CMIMaterial.SUNFLOWER, FlagMode.Player, "Allow or disallow friendly fire", false), + fireball(CMIMaterial.FIRE_CHARGE, FlagMode.Residence, "Allows or denys fire balls in residences", true), + firespread(CMIMaterial.BLAZE_POWDER, FlagMode.Residence, "Allows or denys fire spread", false), + flowinprotection(CMIMaterial.OAK_BOAT, FlagMode.Residence, "Allows or denys liquid flow into residence", true), + flow(CMIMaterial.LILY_PAD, FlagMode.Residence, "Allows or denys liquid flow", true), + flowerpot(CMIMaterial.FLOWER_POT, FlagMode.Both, "Allows or denys interaction with flower pot", true), + grow(CMIMaterial.WHEAT_SEEDS, FlagMode.Residence, "Allows or denys plant growing", true), + glow(CMIMaterial.SEA_LANTERN, FlagMode.Residence, "Players will start glowing when entering residence", true), + hotfloor(CMIMaterial.MAGMA_BLOCK, FlagMode.Residence, "Prevent damage from magma blocks", true), + hidden(CMIMaterial.GLASS_PANE, FlagMode.Residence, "Hides residence from list or listall commands", false), + hook(CMIMaterial.FISHING_ROD, FlagMode.Both, "Allows or denys fishing rod hooking entities", false), + healing(CMIMaterial.POTION, FlagMode.Residence, "Setting to true makes the residence heal its occupants", true), + iceform(CMIMaterial.ICE, FlagMode.Residence, "Prevents from ice forming", true), + icemelt(CMIMaterial.ICE, FlagMode.Residence, "Prevents ice from melting", true), + ignite(CMIMaterial.FLINT_AND_STEEL, FlagMode.Both, "Allows or denys fire ignition", false), + itemdrop(CMIMaterial.FEATHER, FlagMode.Both, "Allows or denys item drop", true), + itempickup(CMIMaterial.GUNPOWDER, FlagMode.Both, "Allows or denys item pickup", true), + jump2(CMIMaterial.SLIME_BLOCK, FlagMode.Residence, "Allows to jump 2 blocks high", false), + jump3(CMIMaterial.SLIME_BLOCK, FlagMode.Residence, "Allows to jump 3 blocks high", false), + keepinv(CMIMaterial.LEATHER_HELMET, FlagMode.Residence, "Players keeps inventory after death", false), + keepexp(CMIMaterial.GOLDEN_APPLE, FlagMode.Residence, "Players keeps exp after death", false), + lavaflow(CMIMaterial.LAVA_BUCKET, FlagMode.Residence, "Allows or denys lava flow, overrides flow", true), + leash(CMIMaterial.LEAD, FlagMode.Both, "Allows or denys aninal leash", false), + lever(CMIMaterial.LEVER, FlagMode.Both, "Allows or denys players to use levers", true), + mobexpdrop(CMIMaterial.MELON_SEEDS, FlagMode.Residence, "Prevents mob droping exp on death", true), + mobitemdrop(CMIMaterial.COCOA_BEANS, FlagMode.Residence, "Prevents mob droping items on death", true), + mobkilling(CMIMaterial.ROTTEN_FLESH, FlagMode.Both, "Allows or denys mob killing", true), + monsters(CMIMaterial.SPAWNER, FlagMode.Residence, "Allows or denys monster spawns", true), + move(CMIMaterial.LEATHER_BOOTS, FlagMode.Both, "Allows or denys movement in the residence", true), + nanimals(CMIMaterial.COW_SPAWN_EGG, FlagMode.Residence, "Allows or denys natural animal spawns", true), + nmonsters(CMIMaterial.SKELETON_SPAWN_EGG, FlagMode.Residence, "Allows or denys natural monster spawns", true), + night(CMIMaterial.BLACK_WOOL, FlagMode.Residence, "Sets night time in residence", true), + nofly(CMIMaterial.ORANGE_CARPET, FlagMode.Both, "Allows or denys fly in residence", false), + fly(CMIMaterial.ORANGE_CARPET, FlagMode.Both, "Toggles fly for players in residence", false), + nomobs(CMIMaterial.BARRIER, FlagMode.Residence, "Prevents monsters from entering residence", true), + note(CMIMaterial.NOTE_BLOCK, FlagMode.Both, "Allows or denys players to use note blocks", true), + nodurability(CMIMaterial.ANVIL, FlagMode.Residence, "Prevents item durability loss", false), + overridepvp(CMIMaterial.IRON_SWORD, FlagMode.Residence, "Overrides any plugin pvp protection", false), + pressure(CMIMaterial.LIGHT_WEIGHTED_PRESSURE_PLATE, FlagMode.Both, "Allows or denys players to use pressure plates", true), + piston(CMIMaterial.PISTON, FlagMode.Residence, "Allow or deny pistons from pushing or pulling blocks in the residence", true), + pistonprotection(CMIMaterial.STICKY_PISTON, FlagMode.Residence, "Enables or disabled piston block move in or out of residence", true), + place(CMIMaterial.SEA_LANTERN, FlagMode.Both, "Allows or denys only placement of blocks, overrides the build flag", true), + pvp(CMIMaterial.WOODEN_SWORD, FlagMode.Residence, "Allow or deny pvp in the residence", false), + rain(CMIMaterial.BLUE_ORCHID, FlagMode.Residence, "Sets weather to rainny in residence", true), + redstone(CMIMaterial.SUNFLOWER, FlagMode.Group, "Gives lever, diode, button, pressure, note flags", true), + respawn(CMIMaterial.SUNFLOWER, FlagMode.Residence, "Automaticaly respawns player", false), + riding(CMIMaterial.SADDLE, FlagMode.Both, "Prevent riding a horse", true), + shoot(CMIMaterial.ARROW, FlagMode.Residence, "Allows or denys shooting projectile in area", true), + sun(CMIMaterial.SUNFLOWER, FlagMode.Residence, "Sets weather to sunny in residence", true), + shop(CMIMaterial.ITEM_FRAME, FlagMode.Residence, "Adds residence to special residence shop list", true), + snowtrail(CMIMaterial.SNOW, FlagMode.Residence, "Prevents snowman snow trails", true), + spread(CMIMaterial.SNOWBALL, FlagMode.Residence, "Prevents block spreading", true), + snowball(CMIMaterial.SNOWBALL, FlagMode.Residence, "Prevents snowball knockback", true), + sanimals(CMIMaterial.RABBIT_SPAWN_EGG, FlagMode.Residence, "Allows or denys spawner or spawn egg animal spawns", true), + shear(CMIMaterial.SHEARS, FlagMode.Both, "Allows or denys sheep shear", false), + smonsters(CMIMaterial.ZOMBIE_SPAWN_EGG, FlagMode.Residence, "Allows or denys spawner or spawn egg monster spawns", true), + subzone(CMIMaterial.GRAY_STAINED_GLASS_PANE, FlagMode.Both, "Allow a player to make subzones in the residence", true), + table(CMIMaterial.CRAFTING_TABLE, FlagMode.Both, "Allows or denys players to use workbenches", true), + tnt(CMIMaterial.TNT, FlagMode.Residence, "Allow or deny tnt explosions", false), + tp(CMIMaterial.END_PORTAL_FRAME, FlagMode.Both, "Allow or disallow teleporting to the residence", true), + trade(CMIMaterial.EMERALD, FlagMode.Both, "Allows or denys villager trading in residence", true), + trample(CMIMaterial.DIRT, FlagMode.Residence, "Allows or denys crop trampling in residence", true), + trusted(CMIMaterial.STONE, FlagMode.Group, "Gives build, use, move, container and tp flags", true), + use(CMIMaterial.STONE_PRESSURE_PLATE, FlagMode.Both, "Allows or denys use of doors, lever, buttons, etc...", false), + vehicledestroy(CMIMaterial.MINECART, FlagMode.Both, "Allows or denys vehicle destroy", false), + witherspawn(CMIMaterial.WITHER_SKELETON_SKULL, FlagMode.Residence, "Allows or denys wither spawning", true), + witherdamage(CMIMaterial.WITHER_SKELETON_SKULL, FlagMode.Residence, "Allows or denys wither damage", true), + witherdestruction(CMIMaterial.WITHER_SKELETON_SKULL, FlagMode.Residence, "Allows or denys wither block damage", true), + waterflow(CMIMaterial.WATER_BUCKET, FlagMode.Residence, "Allows or denys water flow, overrides flow", true), + wspeed1(CMIMaterial.POTION, FlagMode.Residence, "Change players walk speed in residence to %1", true), + wspeed2(CMIMaterial.POTION, FlagMode.Residence, "Change players walk speed in residence to %1", true); private String translated = null; private CMIMaterial icon; diff --git a/src/com/bekvon/bukkit/residence/containers/cmd.java b/src/com/bekvon/bukkit/residence/containers/cmd.java index bab55fcd1..99f836d22 100644 --- a/src/com/bekvon/bukkit/residence/containers/cmd.java +++ b/src/com/bekvon/bukkit/residence/containers/cmd.java @@ -5,6 +5,8 @@ import com.bekvon.bukkit.residence.Residence; +import cmiLib.ConfigReader; + public interface cmd { public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender); diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 75e56f30f..4bc70c53f 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -18,7 +18,6 @@ public FlagUtil(Residence plugin) { this.plugin = plugin; } - public void load() { ConfigReader c = null; try { @@ -28,37 +27,25 @@ public void load() { } if (c != null) { - if (!c.isConfigurationSection("Global.FlagPermission")) + if (!c.getC().isConfigurationSection("Global.FlagPermission")) return; - Set allFlags = c.getConfigurationSection("Global.FlagPermission").getKeys(false); + Set allFlags = c.getC().getConfigurationSection("Global.FlagPermission").getKeys(false); for (String oneFlag : allFlags) { if (!c.getC().contains("Global.FlagGui." + oneFlag)) continue; - - int id = 35; - int data = 0; - - String value = c.get("Global.FlagGui." + oneFlag, "35-0"); - - try { - if (value.contains("-")) { - id = Integer.parseInt(value.split("-")[0]); - data = Integer.parseInt(value.split("-")[1]); - } else - id = Integer.parseInt(value); - } catch (Exception e) { - } - - CMIMaterial Mat = CMIMaterial.get(id, data); - if (Mat == null) + String value = c.get("Global.FlagGui." + oneFlag, "WHITE_WOOL"); + value = value.replace("-", ":"); + CMIMaterial Mat = CMIMaterial.get(value); + if (Mat == null) { + Residence.getInstance().consoleMessage(value); Mat = CMIMaterial.STONE; + } ItemStack item = Mat.newItemStack(); flagData.addFlagButton(oneFlag.toLowerCase(), item); } } - } public FlagData getFlagData() { diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 331f806d2..c662c1ed8 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -236,7 +236,11 @@ public void recalculateResidence(ClaimedResidence res) { MiscInfo.removeEnchantment(Enchantment.LUCK); ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); - MiscInfoMeta.setDisplayName(ChatColor.GREEN + one.getKey()); + String flagName = one.getKey(); + Flags flag = Flags.getFlag(flagName); + if (flag != null) + flagName = flag.getName(); + MiscInfoMeta.setDisplayName(ChatColor.GREEN + flagName); List lore = new ArrayList(); @@ -290,7 +294,7 @@ public void recalculateResidence(ClaimedResidence res) { public void recalculatePlayer(ClaimedResidence res) { Map globalFlags = new HashMap(); for (Flags oneFlag : Flags.values()) { - globalFlags.put(oneFlag.getName(), oneFlag.isEnabled()); + globalFlags.put(oneFlag.toString(), oneFlag.isEnabled()); } if (flags == null) @@ -388,7 +392,11 @@ public void recalculatePlayer(ClaimedResidence res) { MiscInfo.removeEnchantment(Enchantment.LUCK); ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); - MiscInfoMeta.setDisplayName(ChatColor.GREEN + one.getKey()); + String flagName = one.getKey(); + Flags flag = Flags.getFlag(flagName); + if (flag != null) + flagName = flag.getName(); + MiscInfoMeta.setDisplayName(ChatColor.GREEN + flagName); List lore = new ArrayList(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 61c65d0fe..bdb38728a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -629,7 +629,7 @@ public void onBlockPlace(BlockPlaceEvent event) { boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); if (!hasplace && !player.hasPermission("residence.bypass.build")) { event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.place.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.place); return; } } @@ -938,7 +938,7 @@ public void onBlockIgnite(BlockIgniteEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlock().getLocation(), player); if (player != null && !perms.playerHas(player, Flags.ignite, true) && !plugin.isResAdminOn(player)) { event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.ignite.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.ignite); } } else { // Disabling listener if flag disabled globally diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index dd053b897..de57c05f4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -170,7 +170,7 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { return; if (res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { - plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); + plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling, res.getName()); event.setCancelled(true); } } @@ -220,7 +220,7 @@ public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { return; if (res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { - plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName()); + plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling, res.getName()); event.setCancelled(true); } } @@ -324,7 +324,7 @@ public void VehicleDestroy(VehicleDestroyEvent event) { return; if (res.getPermissions().playerHas(cause, Flags.vehicledestroy, FlagCombo.OnlyFalse)) { - plugin.msg(cause, lm.Residence_FlagDeny, Flags.vehicledestroy.getName(), res.getName()); + plugin.msg(cause, lm.Residence_FlagDeny, Flags.vehicledestroy, res.getName()); event.setCancelled(true); } } @@ -371,7 +371,7 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { return; if (res.getPermissions().playerHas(cause, Flags.mobkilling, FlagCombo.OnlyFalse)) { - plugin.msg(cause, lm.Residence_FlagDeny, Flags.mobkilling.getName(), res.getName()); + plugin.msg(cause, lm.Residence_FlagDeny, Flags.mobkilling, res.getName()); event.setCancelled(true); } } @@ -1291,7 +1291,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (!perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true))) { event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.destroy.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.destroy); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 2523b3749..06a8253b0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -251,7 +251,7 @@ public void onPlayerChatGlobalLow(AsyncPlayerChatEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceBackup(ResidenceFlagChangeEvent event) { - if (!event.getFlag().equalsIgnoreCase(Flags.backup.getName())) + if (!event.getFlag().equalsIgnoreCase(Flags.backup.toString())) return; Player player = event.getPlayer(); if (!plugin.getConfigManager().RestoreAfterRentEnds) @@ -333,7 +333,7 @@ public void onFishingRodUse(PlayerFishEvent event) { if (perm.has(Flags.hook, FlagCombo.OnlyFalse)) { event.setCancelled(true); if (res != null) - plugin.msg(player, lm.Residence_FlagDeny, Flags.hook.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.hook, res.getName()); return; } } @@ -344,8 +344,8 @@ public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { if (event.isCancelled()) return; - if (!event.getFlag().equalsIgnoreCase(Flags.day.getName()) && - !event.getFlag().equalsIgnoreCase(Flags.night.getName())) + if (!event.getFlag().equalsIgnoreCase(Flags.day.toString()) && + !event.getFlag().equalsIgnoreCase(Flags.night.toString())) return; switch (event.getNewState()) { @@ -357,10 +357,10 @@ public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { case INVALID: break; case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.day.getName())) + if (event.getFlag().equalsIgnoreCase(Flags.day.toString())) for (Player one : event.getResidence().getPlayersInResidence()) one.setPlayerTime(6000L, false); - if (event.getFlag().equalsIgnoreCase(Flags.night.getName())) + if (event.getFlag().equalsIgnoreCase(Flags.night.toString())) for (Player one : event.getResidence().getPlayersInResidence()) one.setPlayerTime(14000L, false); break; @@ -374,20 +374,20 @@ public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { if (event.isCancelled()) return; - if (!event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + if (!event.getFlag().equalsIgnoreCase(Flags.glow.toString())) return; switch (event.getNewState()) { case NEITHER: case FALSE: - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && event.getFlag().equalsIgnoreCase(Flags.glow.toString())) for (Player one : event.getResidence().getPlayersInResidence()) one.setGlowing(false); break; case INVALID: break; case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.glow.getName())) + if (event.getFlag().equalsIgnoreCase(Flags.glow.toString())) if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) for (Player one : event.getResidence().getPlayersInResidence()) one.setGlowing(true); @@ -447,8 +447,8 @@ public void onFlagChangeWSpeed(ResidenceFlagChangeEvent event) { if (event.isCancelled()) return; - if (!event.getFlag().equalsIgnoreCase(Flags.wspeed1.getName()) && - !event.getFlag().equalsIgnoreCase(Flags.wspeed2.getName())) + if (!event.getFlag().equalsIgnoreCase(Flags.wspeed1.toString()) && + !event.getFlag().equalsIgnoreCase(Flags.wspeed2.toString())) return; switch (event.getNewState()) { @@ -460,16 +460,16 @@ public void onFlagChangeWSpeed(ResidenceFlagChangeEvent event) { case INVALID: break; case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.wspeed1.getName())) { + if (event.getFlag().equalsIgnoreCase(Flags.wspeed1.toString())) { for (Player one : event.getResidence().getPlayersInResidence()) one.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); if (event.getResidence().getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - event.getResidence().getPermissions().setFlag(Flags.wspeed2.getName(), FlagState.NEITHER); - } else if (event.getFlag().equalsIgnoreCase(Flags.wspeed2.getName())) { + event.getResidence().getPermissions().setFlag(Flags.wspeed2.toString(), FlagState.NEITHER); + } else if (event.getFlag().equalsIgnoreCase(Flags.wspeed2.toString())) { for (Player one : event.getResidence().getPlayersInResidence()) one.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); if (event.getResidence().getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - event.getResidence().getPermissions().setFlag(Flags.wspeed1.getName(), FlagState.NEITHER); + event.getResidence().getPermissions().setFlag(Flags.wspeed1.toString(), FlagState.NEITHER); } break; default: @@ -482,8 +482,8 @@ public void onFlagChangeJump(ResidenceFlagChangeEvent event) { if (event.isCancelled()) return; - if (!event.getFlag().equalsIgnoreCase(Flags.jump2.getName()) && - !event.getFlag().equalsIgnoreCase(Flags.jump3.getName())) + if (!event.getFlag().equalsIgnoreCase(Flags.jump2.toString()) && + !event.getFlag().equalsIgnoreCase(Flags.jump3.toString())) return; switch (event.getNewState()) { @@ -492,12 +492,12 @@ public void onFlagChangeJump(ResidenceFlagChangeEvent event) { case INVALID: break; case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.jump2.getName())) { + if (event.getFlag().equalsIgnoreCase(Flags.jump2.toString())) { if (event.getResidence().getPermissions().has(Flags.jump3, FlagCombo.OnlyTrue)) - event.getResidence().getPermissions().setFlag(Flags.jump3.getName(), FlagState.NEITHER); - } else if (event.getFlag().equalsIgnoreCase(Flags.jump3.getName())) { + event.getResidence().getPermissions().setFlag(Flags.jump3.toString(), FlagState.NEITHER); + } else if (event.getFlag().equalsIgnoreCase(Flags.jump3.toString())) { if (event.getResidence().getPermissions().has(Flags.jump2, FlagCombo.OnlyTrue)) - event.getResidence().getPermissions().setFlag(Flags.jump2.getName(), FlagState.NEITHER); + event.getResidence().getPermissions().setFlag(Flags.jump2.toString(), FlagState.NEITHER); } break; default: @@ -510,7 +510,7 @@ public void onFlagChangeSunRain(ResidenceFlagChangeEvent event) { if (event.isCancelled()) return; - if (!event.getFlag().equalsIgnoreCase(Flags.sun.getName()) && !event.getFlag().equalsIgnoreCase(Flags.rain.getName())) + if (!event.getFlag().equalsIgnoreCase(Flags.sun.toString()) && !event.getFlag().equalsIgnoreCase(Flags.rain.toString())) return; switch (event.getNewState()) { @@ -522,10 +522,10 @@ public void onFlagChangeSunRain(ResidenceFlagChangeEvent event) { case INVALID: break; case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.sun.getName())) + if (event.getFlag().equalsIgnoreCase(Flags.sun.toString())) for (Player one : event.getResidence().getPlayersInResidence()) one.setPlayerWeather(WeatherType.CLEAR); - if (event.getFlag().equalsIgnoreCase(Flags.rain.getName())) + if (event.getFlag().equalsIgnoreCase(Flags.rain.toString())) for (Player one : event.getResidence().getPlayersInResidence()) one.setPlayerWeather(WeatherType.DOWNFALL); break; @@ -539,7 +539,7 @@ public void onFlagChangeFly(ResidenceFlagChangeEvent event) { if (event.isCancelled()) return; - if (!event.getFlag().equalsIgnoreCase(Flags.fly.getName())) + if (!event.getFlag().equalsIgnoreCase(Flags.fly.toString())) return; switch (event.getNewState()) { @@ -623,7 +623,7 @@ else if (white == 0) return; event.setCancelled(true); - plugin.msg(player, lm.Residence_FlagDeny, Flags.command.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.command, res.getName()); } @@ -743,8 +743,6 @@ public void onSignCreate(SignChangeEvent event) { Location loc = sign.getLocation(); - String landName = null; - Player player = event.getPlayer(); if (player.hasMetadata("NPC")) return; @@ -763,13 +761,8 @@ public void onSignCreate(SignChangeEvent event) { plugin.msg(player, lm.Invalid_Residence); return; } - - landName = res.getName(); - } else { res = plugin.getResidenceManager().getByLoc(loc); - if (res != null) - landName = res.getName(); } if (res == null) { @@ -882,11 +875,11 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { if (location.getBlockY() <= 0) { player.setFlying(false); player.setAllowFlight(false); - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, location.getWorld().getName()); return; } } - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), location.getWorld().getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, location.getWorld().getName()); player.closeInventory(); player.teleport(location); player.setFlying(false); @@ -1062,7 +1055,7 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); if (!hasplace) { event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.build); return; } } @@ -1262,7 +1255,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (heldItem.equals(CMIMaterial.BONE_MEAL) && block.getType() == Material.GRASS || heldItem.equals(CMIMaterial.COCOA_BEANS) && blockM.equals(CMIMaterial.JUNGLE_WOOD)) { perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player, Flags.build, true)) { - plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.build); event.setCancelled(true); return; } @@ -1271,7 +1264,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (heldItem.equals(CMIMaterial.ARMOR_STAND) || heldItem.isBoat()) { perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player, Flags.build, true)) { - plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.build); event.setCancelled(true); return; } @@ -1279,7 +1272,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (placingMinecart(block, iih)) { perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); if (!perms.playerHas(player, Flags.build, true)) { - plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.build); event.setCancelled(true); return; } @@ -1325,7 +1318,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (plugin.getConfigManager().getCustomContainers().contains(blockM.getId())) { if (!perms.playerHas(player, Flags.container, hasuse)) { event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.container); return; } } @@ -1334,14 +1327,14 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (plugin.getConfigManager().getCustomBothClick().contains(blockM.getId())) { if (!hasuse) { event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.use); return; } } if (plugin.getConfigManager().getCustomRightClick().contains(blockM.getId()) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (!hasuse) { event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.use); return; } } @@ -1367,7 +1360,7 @@ public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res != null && res.getPermissions().playerHas(player, Flags.trade, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.trade.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.trade, res.getName()); event.setCancelled(true); } } @@ -1418,7 +1411,7 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { if (!hasContainerBypass) if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); event.setCancelled(true); } } @@ -1444,7 +1437,7 @@ public void onPlayerInteractWithRidable(PlayerInteractEntityEvent event) { if (res == null) return; if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.riding, FlagCombo.TrueOrNone)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.riding, res.getName()); event.setCancelled(true); } } @@ -1474,7 +1467,7 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) if (!hasContainerBypass) if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); event.setCancelled(true); } } @@ -1500,7 +1493,7 @@ public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { if (res == null) return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.riding, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.riding.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.riding, res.getName()); event.setCancelled(true); } } @@ -1526,7 +1519,7 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { if (res == null) return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.dye, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.dye.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.dye, res.getName()); event.setCancelled(true); } } @@ -1553,7 +1546,7 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.shear, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.shear.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.shear, res.getName()); event.setCancelled(true); } @@ -1602,7 +1595,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { if (!hasContainerBypass) if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.container); } } @@ -1640,7 +1633,7 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(loc, player); if (!perms.playerHas(player, Flags.build, true)) { - plugin.msg(player, lm.Flag_Deny, Flags.build.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.build); event.setCancelled(true); return; } @@ -1690,7 +1683,7 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); if (!hasdestroy) { - plugin.msg(player, lm.Flag_Deny, Flags.destroy.getName()); + plugin.msg(player, lm.Flag_Deny, Flags.destroy); event.setCancelled(true); } } @@ -1725,7 +1718,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { } else if (event.getCause() == TeleportCause.ENDER_PEARL) { if (res.getPermissions().playerHas(player, Flags.enderpearl, FlagCombo.OnlyFalse)) { event.setCancelled(true); - plugin.msg(player, lm.Residence_FlagDeny, Flags.enderpearl.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.enderpearl, res.getName()); return; } } @@ -1739,7 +1732,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { if (plugin.getNms().isChorusTeleport(event.getCause())) { if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.chorustp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { event.setCancelled(true); - plugin.msg(player, lm.Residence_FlagDeny, Flags.chorustp.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.chorustp, res.getName()); return; } } @@ -2033,13 +2026,13 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move teleported = teleport(player, lastLoc); else teleported = teleport(player, res.getOutsideFreeLoc(loc, player)); - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); if (!teleported) return false; return true; } } - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); player.closeInventory(); boolean teleported = teleport(player, location); if (!teleported) @@ -2159,11 +2152,11 @@ public void run() { else teleported = teleport(player, res.getOutsideFreeLoc(loc, player)); - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); return teleported; } } - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly.getName(), orres.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); player.closeInventory(); teleported = teleport(player, location); if (!teleported) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 19f3c24a9..313635623 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -425,7 +425,7 @@ public boolean playerHas(Player player, Flags flag, boolean def) { ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = resPlayer.getGroup(); - return this.playerCheck(player.getName(), flag.getName(), this.groupCheck(group, flag.getName(), this.has(flag, def))); + return this.playerCheck(player.getName(), flag.toString(), this.groupCheck(group, flag.toString(), this.has(flag, def))); } public boolean playerHas(Player player, String world, Flags flag, boolean def) { @@ -434,7 +434,7 @@ public boolean playerHas(Player player, String world, Flags flag, boolean def) { ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = resPlayer.getGroup(world); - return this.playerCheck(player.getName(), flag.getName(), this.groupCheck(group, flag.getName(), this.has(flag, def))); + return this.playerCheck(player.getName(), flag.toString(), this.groupCheck(group, flag.toString(), this.has(flag, def))); } // public boolean playerHas(String player, String world, Flags flag, boolean def) { @@ -504,8 +504,8 @@ public boolean has(Flags flag, boolean def) { } public boolean has(Flags flag, boolean def, boolean checkParent) { - if (cuboidFlags.containsKey(flag.getName())) { - return cuboidFlags.get(flag.getName()); + if (cuboidFlags.containsKey(flag.toString())) { + return cuboidFlags.get(flag.toString()); } if (checkParent && parent != null) { return parent.has(flag, def); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index c4c8f8c35..d57a2ec30 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -51,7 +51,7 @@ public boolean playerHas(CommandSender sender, Flags flag, boolean def) { @Override public boolean playerHas(Player player, Flags flag, boolean def) { - return playerHas(player, flag.getName(), def); + return playerHas(player, flag.toString(), def); } @Deprecated @@ -60,7 +60,7 @@ public boolean playerHas(Player player, String flag, boolean def) { } public boolean playerHas(String player, Flags flag, boolean def) { - return playerHas(player, flag.getName(), def); + return playerHas(player, flag.toString(), def); } @Deprecated @@ -102,7 +102,7 @@ public boolean playerHas(Player player, Flags flag, FlagCombo f) { public boolean playerHas(Player player, String world, Flags flag, boolean def) { if (player == null) return false; - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag.getName(), FlagType.PLAYER, player.getName(), def); + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag.toString(), FlagType.PLAYER, player.getName(), def); Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isOverriden()) return fc.getOverrideValue(); @@ -172,7 +172,7 @@ public boolean has(String flag, FlagCombo f, boolean checkParent) { @Override public boolean has(Flags flag, boolean def) { - return has(flag.getName(), def); + return has(flag.toString(), def); } @Override diff --git a/src/com/bekvon/bukkit/residence/utils/CrackShot.java b/src/com/bekvon/bukkit/residence/utils/CrackShot.java index 85e6d2d20..39fc90e42 100644 --- a/src/com/bekvon/bukkit/residence/utils/CrackShot.java +++ b/src/com/bekvon/bukkit/residence/utils/CrackShot.java @@ -61,7 +61,7 @@ public void AnimalKilling(WeaponDamageEntityEvent event) { if (plugin.getNms().isAnimal(entity)) { if (res != null && res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { - cause.sendMessage(plugin.msg(lm.Residence_FlagDeny, Flags.animalkilling.getName(), res.getName())); + cause.sendMessage(plugin.msg(lm.Residence_FlagDeny, Flags.animalkilling, res.getName())); event.setCancelled(true); } } @@ -94,7 +94,7 @@ public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { event.setCancelled(true); - plugin.msg(player, lm.Residence_FlagDeny, Flags.container.getName(), res.getName()); + plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); } } From 62f99587357d0346cd0c3d066684ed2f4345ba3d Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 13:03:56 +0200 Subject: [PATCH 0538/1142] res info colorization --- src/cmiLib/RawMessage.java | 114 ++++++----- .../bukkit/residence/containers/Flags.java | 2 +- .../bukkit/residence/containers/lm.java | 9 +- .../residence/protection/FlagPermissions.java | 193 +++++++++++------- .../protection/ResidenceManager.java | 5 +- .../protection/ResidencePermissions.java | 16 +- 6 files changed, 210 insertions(+), 129 deletions(-) diff --git a/src/cmiLib/RawMessage.java b/src/cmiLib/RawMessage.java index 8fdba1fde..8d4d8669d 100644 --- a/src/cmiLib/RawMessage.java +++ b/src/cmiLib/RawMessage.java @@ -17,8 +17,10 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import cmiLib.VersionChecker.Version; +import com.Zrips.CMI.Modules.ChatFormat.ChatFormatManager; +import com.Zrips.CMI.utils.Util.CMIChatColor; +import cmiLib.VersionChecker.Version; public class RawMessage { @@ -31,7 +33,7 @@ public class RawMessage { private String combined = ""; String combinedClean = ""; - private boolean breakLine = true; + private boolean dontBreakLine = false; // private boolean colorizeEntireWithLast = true; @@ -80,23 +82,25 @@ public RawMessage add(String text, String hoverText, String command, String sugg CMIChatColor firstBlockColor = null; private String makeMessyText(String text) { + if (text.equalsIgnoreCase(" ")) + return text; text = CMIChatColor.deColorize(text); List splited = new ArrayList(); if (text.contains(" ")) { for (String one : text.split(" ")) { - if (this.isBreakLine() && one.contains("\\n")) { - String[] split = one.split("\\\\n"); - for (int i = 0; i < split.length; i++) { - if (i < split.length - 1) { - splited.add(split[i] + "\n"); - } else { - splited.add(split[i]); - } - } - } else { - splited.add(one); - } +// if (this.isBreakLine() && one.contains("\\n")) { +// String[] split = one.split("\\\\n"); +// for (int i = 0; i < split.length; i++) { +// if (i < split.length - 1) { +// splited.add(split[i] + "\n"); +// } else { +// splited.add(split[i]); +// } +// } +// } else { + splited.add(one); +// } splited.add(" "); } if (text.length() > 1 && text.endsWith(" ")) @@ -116,6 +120,8 @@ private String makeMessyText(String text) { String colorString = ""; if (lastColor != null) colorString += lastColor.getColorCode(); + else + colorString += CMIChatColor.WHITE.getColorCode(); for (CMIChatColor oneC : formats) { colorString = colorString + oneC.getColorCode(); } @@ -161,17 +167,13 @@ private String makeMessyText(String text) { public RawMessage addText(String text) { if (text == null) return this; - if (breakLine) { - Random rand = new Random(); - String breakLine = rand.nextDouble() + "breakLine"; - text = text.replace("\\n", breakLine); - text = text.replace("\\", "\\\\"); - text = text.replace(breakLine, "\\n"); + text = provessText(text); + if (dontBreakLine) { + text = text.replace("\\\\\\n", "\\\\n"); } - text = text.replace("\n", "\\n"); unfinishedClean = text; - unfinished += "\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(colorReplacerPlaceholder, "&") + "\""; + unfinished += "\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(ChatFormatManager.colorReplacerPlaceholder, "&") + "\""; return this; } @@ -232,41 +234,59 @@ public RawMessage build() { return this; } - public RawMessage add(String text, String hoverText, String command, String suggestion, String url) { + private String provessText(String text) { + Random rand = new Random(); + + String breakLine0 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); + text = text.replace("\\n", breakLine0); + + String breakLine3 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); + text = text.replace("\\", breakLine3); + + String breakLine2 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); + text = text.replace("\\\"", breakLine2); + + String breakLine1 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); + text = text.replace("\"", breakLine1); + + text = text.replace(breakLine3, "\\\\"); + text = text.replace(breakLine0, "\\n"); + text = text.replace(breakLine1, "\\\""); + text = text.replace(breakLine2, "\\\""); + return text; + } + + public RawMessage add(String text, String hoverText, String command, String suggestion, String url) { if (text == null) return this; + text = provessText(text); - if (breakLine) { - Random rand = new Random(); - String breakLine = rand.nextDouble() + "breakLine"; - text = text.replace("\\n", breakLine); - text = text.replace("\\", "\\\\"); - text = text.replace(breakLine, "\\n"); + if (dontBreakLine) { + text = text.replace("\\\\\\n", "\\\\n"); } - text = text.replace("\"", "\\\""); - - String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(colorReplacerPlaceholder, "&") + "\""; - -// if (firstBlockColor != null) { -// f += ",\"color\":\"" + firstBlockColor.name().toLowerCase() + "\""; -// } + String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(ChatFormatManager.colorReplacerPlaceholder, "&") + "\""; if (hoverText != null && !hoverText.isEmpty()) { + hoverText = provessText(hoverText); hoverText = hoverText.replace(" \n", " \\n"); hoverText = hoverText.replace("\n", "\\n"); f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText) + "\"}]}}"; } -// if (suggestion != null && command != null) { -// f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"\"}"; -// -// } else { + if (suggestion != null) { + + suggestion = provessText(suggestion); + + suggestion = suggestion.replace("\\n", "\\\\n"); + suggestion = suggestion.replace(" \\n", " \\\\n"); + suggestion = suggestion.replace(" \n", " \\\\n"); - if (suggestion != null) f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}"; + } if (url != null) { + url = provessText(url); if (!url.toLowerCase().startsWith("http://") || !url.toLowerCase().startsWith("https://")) url = "http://" + url; f += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}"; @@ -275,6 +295,7 @@ public RawMessage add(String text, String hoverText, String command, String sugg if (command != null) { if (!command.startsWith("/")) command = "/" + command; + command = provessText(command); f += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}"; } // } @@ -385,7 +406,8 @@ public RawMessage addItem(String text, ItemStack item, List extraLore, S if (!Lore.isEmpty()) { loreS = ",Lore:[" + loreS + "]"; } - f += ",\"hoverEvent\":{\"action\":\"show_item\",\"value\":\"{id:" + itemName + ",Count:1b,tag:{display:{Name:\\\"" + CMIChatColor.translateAlternateColorCodes(ItemDisplayName) + "\\\"" + loreS + "}" + f += ",\"hoverEvent\":{\"action\":\"show_item\",\"value\":\"{id:" + itemName + ",Count:1b,tag:{display:{Name:\\\"" + CMIChatColor.translateAlternateColorCodes(ItemDisplayName) + "\\\"" + loreS + + "}" + Enchants + "}}\"}"; if (suggestion != null) @@ -551,12 +573,12 @@ public String getShortRaw() { return f; } - public boolean isBreakLine() { - return breakLine; + public boolean isDontBreakLine() { + return dontBreakLine; } - public void setBreakLine(boolean breakLine) { - this.breakLine = breakLine; + public void setDontBreakLine(boolean dontBreakLine) { + this.dontBreakLine = dontBreakLine; } public void setCombined(String combined) { diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 9a2307a03..42a37b3e8 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -195,7 +195,7 @@ public String getTranslated() { } public void setTranslated(String translated) { - this.translated = translated; + this.translated = translated == null ? null : translated.replace(" ", ""); } public CMIMaterial getIcon() { diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 021839a7c..d44047a1c 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -104,7 +104,14 @@ public enum lm { info_oneHour("&e%1 &6hour "), info_min("&e%1 &6min "), info_sec("&e%1 &6sec "), - + + Flag_ownColor("&4"), + Flag_p1Color("&2"), + Flag_p2Color("&a"), + Flag_haveColor("&2"), + Flag_havePrefix(""), + Flag_denyColor("&4"), + Flag_denyPrefix(""), Flag_Set("&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"), Flag_SetFailed("&cYou dont have access to &6%1 &cflag"), Flag_CheckTrue("&eFlag &6%1 &eapplies to player &6%2 &efor residence &6%3&e, value = &6%4"), diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 313635623..c69aa8081 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -30,6 +30,7 @@ import com.bekvon.bukkit.residence.utils.Debug; import cmiLib.ItemManager.CMIMaterial; +import cmiLib.RawMessage; import cmiLib.VersionChecker.Version; public class FlagPermissions { @@ -835,6 +836,12 @@ public String listFlags(Integer split, Integer totalShow) { Iterator> it = set.iterator(); int i = -1; int t = 0; + + String haveColor = Residence.getInstance().getLM().getMessage(lm.Flag_haveColor); + String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_denyColor); + String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); + String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); + while (it.hasNext()) { Entry next = it.next(); String fname = next.getKey(); @@ -858,12 +865,12 @@ public String listFlags(Integer split, Integer totalShow) { } if (next.getValue()) { - sbuild.append("&2").append("").append(flag.getName()); + sbuild.append(haveColor).append(havePrefix).append(flag.getName()); if (it.hasNext()) { sbuild.append(" "); } } else { - sbuild.append("&8").append("").append(flag.getName()); + sbuild.append(denyColor).append(denyPrefix).append(flag.getName()); if (it.hasNext()) { sbuild.append(" "); } @@ -931,22 +938,28 @@ protected String printPlayerFlags(Map flags) { if (flags == null) return "none"; Set> set = flags.entrySet(); + + String haveColor = Residence.getInstance().getLM().getMessage(lm.Flag_haveColor); + String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_denyColor); + String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); + String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); + synchronized (flags) { Iterator> it = set.iterator(); while (it.hasNext()) { Entry next = it.next(); - + Flags flag = Flags.getFlag(next.getKey()); if (flag == null) continue; - + if (next.getValue()) { - sbuild.append("&2").append("").append(flag.getName()); + sbuild.append(haveColor).append(havePrefix).append(flag.getName()); if (it.hasNext()) { sbuild.append(" "); } } else { - sbuild.append("&8").append("").append(flag.getName()); + sbuild.append(denyColor).append(denyPrefix).append(flag.getName()); if (it.hasNext()) { sbuild.append(" "); } @@ -1027,16 +1040,19 @@ public String listPlayersFlags() { return sbuild.toString(); } - public String listPlayersFlagsRaw(String player, String text) { - StringBuilder sbuild = new StringBuilder(); - - sbuild.append("[\"\","); - sbuild.append("{\"text\":\"" + text + "\"}"); - + public RawMessage listPlayersFlagsRaw(String player, String text) { + RawMessage rm = new RawMessage(); + rm.add(text); Set>> set = playerFlags.entrySet(); + synchronized (set) { Iterator>> it = set.iterator(); boolean random = true; + + String ownColor = Residence.getInstance().getLM().getMessage(lm.Flag_ownColor); + String p1Color = Residence.getInstance().getLM().getMessage(lm.Flag_p1Color); + String p2Color = Residence.getInstance().getLM().getMessage(lm.Flag_p2Color); + while (it.hasNext()) { Entry> nextEnt = it.next(); String next = nextEnt.getKey(); @@ -1059,81 +1075,31 @@ public String listPlayersFlagsRaw(String player, String text) { continue; if (!perms.equals("none")) { - sbuild.append(","); - if (random) { random = false; if (player.equals(next)) - next = "&4" + next + "&r"; + next = ownColor + next + "&r"; else - next = "&2" + next + "&r"; + next = p2Color + next + "&r"; } else { random = true; if (player.equals(next)) - next = "&4" + next + "&r"; + next = ownColor + next + "&r"; else - next = "&3" + next + "&r"; - } - sbuild.append(ConvertToRaw(next, perms)); - } - } - } - - sbuild.append("]"); - return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); - } - - public String listOtherPlayersFlagsRaw(String text, String player) { -// player = player.toLowerCase(); - String uuids = Residence.getInstance().getPlayerUUIDString(player); - StringBuilder sbuild = new StringBuilder(); - - sbuild.append("[\"\","); - sbuild.append("{\"text\":\"" + text + "\"}"); - - Set>> set = playerFlags.entrySet(); - synchronized (set) { - Iterator>> it = set.iterator(); - boolean random = true; - while (it.hasNext()) { - Entry> nextEnt = it.next(); - String next = nextEnt.getKey(); - if (!Residence.getInstance().getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getInstance().getConfigManager().isOfflineMode() && !next - .equals(player)) { - String perms = printPlayerFlags(nextEnt.getValue()); - if (next.length() == 36) { - String resolvedName = Residence.getInstance().getPlayerName(next); - if (resolvedName != null) { - try { - UUID uuid = UUID.fromString(next); - this.cachedPlayerNameUUIDs.put(uuid, resolvedName); - } catch (Exception e) { - } - next = resolvedName; - } else if (this.cachedPlayerNameUUIDs.containsKey(next)) - next = this.cachedPlayerNameUUIDs.get(next); - } - if (!perms.equals("none")) { - sbuild.append(","); - - if (random) { - random = false; - next = "&2" + next + "&r"; - } else { - random = true; - next = "&3" + next + "&r"; - } - sbuild.append(ConvertToRaw(next, perms)); + next = p1Color + next + "&r"; } + rm.add(next, splitBy(5, perms)); + rm.add(" "); } } } - sbuild.append("]"); - return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); + return rm; +// sbuild.append("]"); +// return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); } - protected String ConvertToRaw(String playerName, String perms) { + protected String splitBy(int by, String perms) { if (perms.contains(" ")) { String[] splited = perms.split(" "); int i = 0; @@ -1141,14 +1107,81 @@ protected String ConvertToRaw(String playerName, String perms) { for (String one : splited) { i++; perms += one + " "; - if (i >= 5) { + if (i >= by) { i = 0; perms += "\n"; } } } - return "{\"text\":\"[" + playerName + "]\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + perms + "\"}]}}}"; - } + return perms; + } + +// public String listOtherPlayersFlagsRaw(String text, String player) { +//// player = player.toLowerCase(); +// String uuids = Residence.getInstance().getPlayerUUIDString(player); +// StringBuilder sbuild = new StringBuilder(); +// +// sbuild.append("[\"\","); +// sbuild.append("{\"text\":\"" + text + "\"}"); +// +// Set>> set = playerFlags.entrySet(); +// synchronized (set) { +// Iterator>> it = set.iterator(); +// boolean random = true; +// while (it.hasNext()) { +// Entry> nextEnt = it.next(); +// String next = nextEnt.getKey(); +// if (!Residence.getInstance().getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getInstance().getConfigManager().isOfflineMode() && !next +// .equals(player)) { +// String perms = printPlayerFlags(nextEnt.getValue()); +// if (next.length() == 36) { +// String resolvedName = Residence.getInstance().getPlayerName(next); +// if (resolvedName != null) { +// try { +// UUID uuid = UUID.fromString(next); +// this.cachedPlayerNameUUIDs.put(uuid, resolvedName); +// } catch (Exception e) { +// } +// next = resolvedName; +// } else if (this.cachedPlayerNameUUIDs.containsKey(next)) +// next = this.cachedPlayerNameUUIDs.get(next); +// } +// if (!perms.equals("none")) { +// sbuild.append(","); +// +// if (random) { +// random = false; +// next = "&2" + next + "&r"; +// } else { +// random = true; +// next = "&3" + next + "&r"; +// } +// sbuild.append(ConvertToRaw(next, perms)); +// } +// } +// } +// } +// +// sbuild.append("]"); +// return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); +// } +// +// protected String ConvertToRaw(String playerName, String perms) { +// if (perms.contains(" ")) { +// String[] splited = perms.split(" "); +// int i = 0; +// perms = ""; +// for (String one : splited) { +// i++; +// perms += one + " "; +// if (i >= 5) { +// i = 0; +// perms += "\n"; +// } +// } +// } +// return "{\"text\":\"[" + playerName + "]\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + perms + "\"}]}}}"; +// } public String listGroupFlags() { StringBuilder sbuild = new StringBuilder(); @@ -1178,17 +1211,23 @@ public String listGroupFlags(String group) { StringBuilder sbuild = new StringBuilder(); Map get = groupFlags.get(group); Set> set = get.entrySet(); + + String haveColor = Residence.getInstance().getLM().getMessage(lm.Flag_haveColor); + String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_denyColor); + String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); + String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); + synchronized (get) { Iterator> it = set.iterator(); while (it.hasNext()) { Entry next = it.next(); if (next.getValue()) { - sbuild.append("&2").append("").append(next.getKey()); + sbuild.append(haveColor).append(havePrefix).append(next.getKey()); if (it.hasNext()) { sbuild.append(" "); } } else { - sbuild.append("&8").append("").append(next.getKey()); + sbuild.append(denyColor).append(denyPrefix).append(next.getKey()); if (it.hasNext()) { sbuild.append(" "); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 812301acd..f9bc17a54 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -717,8 +717,9 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi if (!plugin.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) sender.sendMessage(plugin.msg(lm.General_PlayersFlags, perms.listPlayersFlags())); else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + perms.listPlayersFlagsRaw(sender.getName(), plugin.msg( - lm.General_PlayersFlags, ""))); + + RawMessage rm = perms.listPlayersFlagsRaw(sender.getName(), plugin.msg(lm.General_PlayersFlags, "")); + rm.show(sender); } String groupFlags = perms.listGroupFlags(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index d57a2ec30..fd5bb07b1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -277,6 +277,9 @@ public boolean hasResidencePermission(CommandSender sender, boolean requireOwner } private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState state, boolean globalflag, boolean resadmin) { + Flags f = Flags.getFlag(flag); + if (f != null) + flag = f.toString(); if (!checkValidFlag(flag, globalflag)) { Residence.getInstance().msg(sender, lm.Invalid_Flag); return false; @@ -311,6 +314,10 @@ public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String f return false; } + Flags f = Flags.getFlag(flag); + if (f != null) + flag = f.toString(); + if (validFlagGroups.containsKey(flag)) return this.setFlagGroupOnPlayer(sender, targetPlayer, flag, flagstate, resadmin); FlagState state = FlagPermissions.stringToFlagState(flagstate); @@ -330,6 +337,11 @@ public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String f } public boolean setGroupFlag(Player player, String group, String flag, String flagstate, boolean resadmin) { + + Flags f = Flags.getFlag(flag); + if (f != null) + flag = f.toString(); + group = group.toLowerCase(); if (validFlagGroups.containsKey(flag)) return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin); @@ -362,11 +374,11 @@ public boolean setFlag(CommandSender sender, String flag, FlagState state, boole } public boolean setFlag(CommandSender sender, String flag, FlagState state, boolean resadmin, boolean inform) { - + Flags f = Flags.getFlag(flag); if (f != null) flag = f.toString(); - + if (validFlagGroups.containsKey(flag)) return this.setFlagGroup(sender, flag, state, resadmin); From 9f80c7d6811da4d514f8dbc1a5cddd7f5f025cca Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 14:53:05 +0200 Subject: [PATCH 0539/1142] Lets include custom flags into UI and flags command --- .../bekvon/bukkit/residence/Residence.java | 2 + .../bukkit/residence/commands/flags.java | 13 ++ .../bukkit/residence/commands/setall.java | 7 ++ .../bukkit/residence/commands/setallfor.java | 7 ++ .../bukkit/residence/commands/tool.java | 8 +- .../residence/containers/ConfigReader.java | 96 -------------- .../bekvon/bukkit/residence/gui/SetFlag.java | 12 +- .../residence/protection/FlagPermissions.java | 117 ++++++------------ .../protection/ResidenceManager.java | 1 + .../bukkit/residence/text/help/HelpEntry.java | 20 ++- 10 files changed, 92 insertions(+), 191 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/containers/ConfigReader.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index e30c3561c..93e609e1a 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -871,6 +871,8 @@ public void run() { getShopSignUtilManager().LoadSigns(); getShopSignUtilManager().BoardUpdate(); getVersionChecker().VersionCheck(null); + + FlagPermissions.addFlag("testing"); } diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index ceaee2c41..948dd3e4c 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; +import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.command.Command; @@ -11,6 +12,7 @@ import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.utils.Debug; public class flags implements cmd { @@ -35,6 +37,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "List of flags"); c.get(path + "Info", Arrays.asList("For flag values, usually true allows the action, and false denys the action.")); + + Set keys = c.getC().getConfigurationSection(path + "SubCommands").getKeys(false); + for (Flags fl : Flags.values()) { String pt = path + "SubCommands." + fl.toString(); c.get(pt + ".Translated", fl.toString()); @@ -54,6 +59,14 @@ public void getLocale(ConfigReader c, String path) { } c.get(pt + ".Info", Arrays.asList("&eUsage: &6/res " + forSet + " " + fl.getName() + " true/false/remove")); + keys.remove(fl.toString()); + } + + for (String fl : keys) { + String pt = path + "SubCommands." + fl; + c.get(pt + ".Translated", c.getC().getString(pt + ".Translated")); + c.get(pt + ".Description", c.getC().getString(pt + ".Description")); + c.get(pt + ".Info", c.getC().getStringList(pt + ".Info")); } Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "pset"), Arrays.asList("[residence]", "[flag]", diff --git a/src/com/bekvon/bukkit/residence/commands/setall.java b/src/com/bekvon/bukkit/residence/commands/setall.java index ab2e2ce82..4268dcd7c 100644 --- a/src/com/bekvon/bukkit/residence/commands/setall.java +++ b/src/com/bekvon/bukkit/residence/commands/setall.java @@ -9,6 +9,8 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.Flags; + import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; @@ -25,6 +27,11 @@ public boolean perform(final Residence plugin, final String[] args, final boolea return false; String flag = args[1]; + + Flags f = Flags.getFlag(flag); + if (f != null) + flag = f.toString(); + FlagState state = FlagPermissions.stringToFlagState(args[2]); FlagPermissions GlobalFlags = Residence.getInstance().getPermissionManager().getAllFlags(); diff --git a/src/com/bekvon/bukkit/residence/commands/setallfor.java b/src/com/bekvon/bukkit/residence/commands/setallfor.java index 630cb5f4f..d5647daa5 100644 --- a/src/com/bekvon/bukkit/residence/commands/setallfor.java +++ b/src/com/bekvon/bukkit/residence/commands/setallfor.java @@ -7,6 +7,8 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.Flags; + import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; @@ -25,6 +27,11 @@ public boolean perform(final Residence plugin, final String[] args, final boolea String playerName = args[1]; String flag = args[2]; + + Flags f = Flags.getFlag(flag); + if (f != null) + flag = f.toString(); + FlagState state = FlagPermissions.stringToFlagState(args[3]); ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(playerName); if (resPlayer == null) diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index 18f657894..b0cf8ce1f 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -8,15 +8,13 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; -import cmiLib.ItemManager.CMIMaterial; +import cmiLib.ConfigReader; public class tool implements cmd { - @SuppressWarnings("deprecation") @Override @CommandAnnotation(simple = true, priority = 1600) public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { @@ -26,8 +24,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Player player = (Player) sender; plugin.msg(player, lm.General_Separator); - plugin.msg(player, lm.Select_Tool, CMIMaterial.get(plugin.getConfigManager().getSelectionTooldID()).getName()); - plugin.msg(player, lm.General_InfoTool, CMIMaterial.get(plugin.getConfigManager().getInfoToolID()).getName()); + plugin.msg(player, lm.Select_Tool, plugin.getConfigManager().getSelectionTool().getName()); + plugin.msg(player, lm.General_InfoTool, plugin.getConfigManager().getSelectionTool().getName()); plugin.msg(player, lm.General_Separator); return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/ConfigReader.java b/src/com/bekvon/bukkit/residence/containers/ConfigReader.java deleted file mode 100644 index 544b6283d..000000000 --- a/src/com/bekvon/bukkit/residence/containers/ConfigReader.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.bekvon.bukkit.residence.containers; - -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.configuration.file.YamlConfiguration; - -import com.bekvon.bukkit.residence.CommentedYamlConfiguration; - -import org.bukkit.ChatColor; - -public class ConfigReader { - YamlConfiguration config; - CommentedYamlConfiguration writer; - - public ConfigReader(YamlConfiguration config, CommentedYamlConfiguration writer) { - this.config = config; - this.writer = writer; - } - - public CommentedYamlConfiguration getW() { - return writer; - } - - public YamlConfiguration getC() { - return config; - } - - public Boolean get(String path, Boolean boo) { - config.addDefault(path, boo); - copySetting(path); - return config.getBoolean(path); - } - - public int get(String path, int boo) { - config.addDefault(path, boo); - copySetting(path); - return config.getInt(path); - } - - public List getIntList(String path, List list) { - config.addDefault(path, list); - copySetting(path); - return config.getIntegerList(path); - } - - public List get(String path, List list, boolean colorize) { - config.addDefault(path, list); - copySetting(path); - if (colorize) - return ColorsArray(config.getStringList(path)); - return config.getStringList(path); - } - - public List get(String path, List list) { - config.addDefault(path, list); - copySetting(path); - return config.getStringList(path); - } - - public String get(String path, String boo) { - config.addDefault(path, boo); - copySetting(path); - return get(path, boo, true); - } - - public String get(String path, String boo, boolean colorize) { - config.addDefault(path, boo); - copySetting(path); - if (colorize) - return ChatColor.translateAlternateColorCodes('&', config.getString(path)); - return config.getString(path); - } - - public Double get(String path, Double boo) { - config.addDefault(path, boo); - copySetting(path); - return config.getDouble(path); - } - - public synchronized void copySetting(String path) { - writer.set(path, config.get(path)); - } - - private static List ColorsArray(List text) { - List temp = new ArrayList(); - for (String part : text) { - temp.add(Colors(part)); - } - return temp; - } - - private static String Colors(String text) { - return ChatColor.translateAlternateColorCodes('&', text); - } -} diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index c662c1ed8..0e4d69a39 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -23,7 +23,9 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import com.bekvon.bukkit.residence.utils.Debug; public class SetFlag { @@ -154,12 +156,12 @@ public void recalculateResidence(ClaimedResidence res) { Map globalFlags = Residence.getInstance().getPermissionManager().getAllFlags().getFlags(); for (Entry one : res.getPermissions().getFlags().entrySet()) { - if (flags.contains(one.getKey())) + if (flags.contains(one.getKey())) { resFlags.put(one.getKey(), one.getValue()); + } } for (Entry one : globalFlags.entrySet()) { - String fname = one.getKey(); Flags flag = Flags.getFlag(fname); @@ -167,8 +169,10 @@ public void recalculateResidence(ClaimedResidence res) { if (flag != null && !flag.isGlobalyEnabled()) continue; - if (!flags.contains(one.getKey())) + if (!flags.contains(one.getKey())) { + Debug.D("not contain " + one.getKey()); continue; + } if (resFlags.containsKey(one.getKey())) TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? FlagState.TRUE : FlagState.FALSE); @@ -176,6 +180,8 @@ public void recalculateResidence(ClaimedResidence res) { TempPermMap.put(one.getKey(), FlagState.NEITHER); } + Debug.D(TempPermMap.containsKey("testing")); + String title = ""; if (targetPlayer == null) title = Residence.getInstance().msg(lm.Gui_Set_Title, res.getName()); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index c69aa8081..7c2e7b7f3 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -27,11 +27,9 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.utils.Debug; import cmiLib.ItemManager.CMIMaterial; import cmiLib.RawMessage; -import cmiLib.VersionChecker.Version; public class FlagPermissions { @@ -88,6 +86,12 @@ public static void addFlag(String flag) { if (validFlagGroups.containsKey(flag)) { validFlagGroups.remove(flag); } + + // Checking custom flag + Flags f = Flags.getFlag(flag); + if (f == null) { + Residence.getInstance().getPermissionManager().getAllFlags().setFlag(flag, FlagState.TRUE); + } } public static void addPlayerOrGroupOnlyFlag(Flags flag) { @@ -102,6 +106,12 @@ public static void addPlayerOrGroupOnlyFlag(String flag) { if (validFlagGroups.containsKey(flag)) { validFlagGroups.remove(flag); } + + // Checking custom flag + Flags f = Flags.getFlag(flag); + if (f == null) { + Residence.getInstance().getPermissionManager().getAllFlags().setFlag(flag, FlagState.TRUE); + } } public static void addResidenceOnlyFlag(Flags flag) { @@ -116,6 +126,11 @@ public static void addResidenceOnlyFlag(String flag) { if (validFlagGroups.containsKey(flag)) { validFlagGroups.remove(flag); } + // Checking custom flag + Flags f = Flags.getFlag(flag); + if (f == null) { + Residence.getInstance().getPermissionManager().getAllFlags().setFlag(flag, FlagState.TRUE); + } } public static void addFlagToFlagGroup(String group, String flag) { @@ -850,8 +865,8 @@ public String listFlags(Integer split, Integer totalShow) { if (flag != null && !flag.isGlobalyEnabled()) continue; - if (flag == null) - continue; + if (flag != null) + fname = flag.getName(); i++; t++; @@ -865,12 +880,12 @@ public String listFlags(Integer split, Integer totalShow) { } if (next.getValue()) { - sbuild.append(haveColor).append(havePrefix).append(flag.getName()); + sbuild.append(haveColor).append(havePrefix).append(fname); if (it.hasNext()) { sbuild.append(" "); } } else { - sbuild.append(denyColor).append(denyPrefix).append(flag.getName()); + sbuild.append(denyColor).append(denyPrefix).append(fname); if (it.hasNext()) { sbuild.append(" "); } @@ -892,7 +907,12 @@ public Map getPlayerFlags(String player) { return this.getPlayerFlags(player, false); } + @Deprecated public Set getposibleFlags() { + return getAllPosibleFlags(); + } + + public static Set getAllPosibleFlags() { Set t = new HashSet(); t.addAll(FlagPermissions.validFlags); t.addAll(FlagPermissions.validPlayerFlags); @@ -904,12 +924,12 @@ public ArrayList getposibleAreaFlags() { } public List getPosibleFlags(Player player, boolean residence, boolean resadmin) { - List flags = new ArrayList(); + Set flags = new HashSet(); for (Entry one : Residence.getInstance().getPermissionManager().getAllFlags().getFlags().entrySet()) { if (!one.getValue() && !resadmin && !player.hasPermission(new Permission("residence.flag." + one.getKey().toLowerCase(), PermissionDefault.FALSE))) continue; - if (!residence && !getposibleFlags().contains(one.getKey())) + if (!residence && !getAllPosibleFlags().contains(one.getKey())) continue; String fname = one.getKey(); @@ -922,7 +942,7 @@ public List getPosibleFlags(Player player, boolean residence, boolean re flags.add(one.getKey()); } - return flags; + return new ArrayList(flags); } public String listPlayerFlags(String player) { @@ -949,17 +969,21 @@ protected String printPlayerFlags(Map flags) { while (it.hasNext()) { Entry next = it.next(); + String fname = next.getKey(); + Flags flag = Flags.getFlag(next.getKey()); - if (flag == null) + if (flag != null && !flag.isGlobalyEnabled()) continue; + if (flag != null) + fname = flag.getName(); if (next.getValue()) { - sbuild.append(haveColor).append(havePrefix).append(flag.getName()); + sbuild.append(haveColor).append(havePrefix).append(fname); if (it.hasNext()) { sbuild.append(" "); } } else { - sbuild.append(denyColor).append(denyPrefix).append(flag.getName()); + sbuild.append(denyColor).append(denyPrefix).append(fname); if (it.hasNext()) { sbuild.append(" "); } @@ -1095,8 +1119,6 @@ public RawMessage listPlayersFlagsRaw(String player, String text) { } return rm; -// sbuild.append("]"); -// return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); } protected String splitBy(int by, String perms) { @@ -1116,73 +1138,6 @@ protected String splitBy(int by, String perms) { return perms; } -// public String listOtherPlayersFlagsRaw(String text, String player) { -//// player = player.toLowerCase(); -// String uuids = Residence.getInstance().getPlayerUUIDString(player); -// StringBuilder sbuild = new StringBuilder(); -// -// sbuild.append("[\"\","); -// sbuild.append("{\"text\":\"" + text + "\"}"); -// -// Set>> set = playerFlags.entrySet(); -// synchronized (set) { -// Iterator>> it = set.iterator(); -// boolean random = true; -// while (it.hasNext()) { -// Entry> nextEnt = it.next(); -// String next = nextEnt.getKey(); -// if (!Residence.getInstance().getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getInstance().getConfigManager().isOfflineMode() && !next -// .equals(player)) { -// String perms = printPlayerFlags(nextEnt.getValue()); -// if (next.length() == 36) { -// String resolvedName = Residence.getInstance().getPlayerName(next); -// if (resolvedName != null) { -// try { -// UUID uuid = UUID.fromString(next); -// this.cachedPlayerNameUUIDs.put(uuid, resolvedName); -// } catch (Exception e) { -// } -// next = resolvedName; -// } else if (this.cachedPlayerNameUUIDs.containsKey(next)) -// next = this.cachedPlayerNameUUIDs.get(next); -// } -// if (!perms.equals("none")) { -// sbuild.append(","); -// -// if (random) { -// random = false; -// next = "&2" + next + "&r"; -// } else { -// random = true; -// next = "&3" + next + "&r"; -// } -// sbuild.append(ConvertToRaw(next, perms)); -// } -// } -// } -// } -// -// sbuild.append("]"); -// return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); -// } -// -// protected String ConvertToRaw(String playerName, String perms) { -// if (perms.contains(" ")) { -// String[] splited = perms.split(" "); -// int i = 0; -// perms = ""; -// for (String one : splited) { -// i++; -// perms += one + " "; -// if (i >= 5) { -// i = 0; -// perms += "\n"; -// } -// } -// } -// return "{\"text\":\"[" + playerName + "]\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + perms + "\"}]}}}"; -// } - public String listGroupFlags() { StringBuilder sbuild = new StringBuilder(); Set set = groupFlags.keySet(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index f9bc17a54..3eaff686f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -38,6 +38,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 5a706b8bf..cce0e2cda 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -151,7 +151,7 @@ private List getHelpData(CommandSender sender, boolean resadmin) { Flags flag = Flags.getFlag(entry.getName()); if (flag != null) flagName = flag.getName(); - + String desc = entry.getDescription(); switch (entry.getName().toLowerCase()) { @@ -381,10 +381,18 @@ public Set getSubCommands(CommandSender sender, String[] args) { } break; case "[flag]": - for (Flags one : Flags.values()) { - if (!one.isGlobalyEnabled()) - continue; - subCommands.add(one.getName()); + + for (String one : Residence.getInstance().getPermissionManager().getAllFlags().getAllPosibleFlags()) { + + Flags f = Flags.getFlag(one); + + if (f != null) { + if (!f.isGlobalyEnabled()) + continue; + subCommands.add(f.getName()); + } + subCommands.add(one); + } break; case "[material]": @@ -409,7 +417,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { } } - String command = tempmeinPath.getCurrentPath().replace("CommandHelp.SubCommands.", "").replace(".SubCommands.", " "); +// String command = tempmeinPath.getCurrentPath().replace("CommandHelp.SubCommands.", "").replace(".SubCommands.", " "); if (subCommands.size() > 0) { return subCommands; } From 8c6a848eb5b467165033e0c362d27ab62be25c13 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 15:29:02 +0200 Subject: [PATCH 0540/1142] Lets process chat prefix in 2 levels --- .../bekvon/bukkit/residence/commands/flags.java | 3 ++- .../listeners/ResidencePlayerListener.java | 14 +++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index 948dd3e4c..dafcbb389 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -64,7 +64,8 @@ public void getLocale(ConfigReader c, String path) { for (String fl : keys) { String pt = path + "SubCommands." + fl; - c.get(pt + ".Translated", c.getC().getString(pt + ".Translated")); +// No translation for custom flags for now +// c.get(pt + ".Translated", c.getC().getString(pt + ".Translated")); c.get(pt + ".Description", c.getC().getString(pt + ".Description")); c.get(pt + ".Info", c.getC().getStringList(pt + ".Info")); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 06a8253b0..9a5263544 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -76,6 +76,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import cmiLib.ActionBarTitleMessages; @@ -214,9 +215,19 @@ public void onPlayerGlobalChat(AsyncPlayerChatEvent event) { event.setFormat(format); } - // Changing chat prefix variable to job name + // Changing chat prefix variable to residence name @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerChatGlobalLow(AsyncPlayerChatEvent event) { + processEvent(event); + } + + // Changing chat prefix variable to residence name + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onPlayerChatGlobalHigh(AsyncPlayerChatEvent event) { + processEvent(event); + } + + private void processEvent(AsyncPlayerChatEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -224,6 +235,7 @@ public void onPlayerChatGlobalLow(AsyncPlayerChatEvent event) { return; if (plugin.getConfigManager().isGlobalChatSelfModify()) return; + Player player = event.getPlayer(); ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); From 7677d254bb94a5363e94591cc013791c84fc4757 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 16:37:10 +0200 Subject: [PATCH 0541/1142] New flag to prevent phantom spawning for 1.13+ servers --- .../bukkit/residence/containers/Flags.java | 1 + .../listeners/ResidenceEntityListener.java | 25 +++++++++++++++++++ src/plugin.yml | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 42a37b3e8..fb3372588 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -109,6 +109,7 @@ public enum Flags { use(CMIMaterial.STONE_PRESSURE_PLATE, FlagMode.Both, "Allows or denys use of doors, lever, buttons, etc...", false), vehicledestroy(CMIMaterial.MINECART, FlagMode.Both, "Allows or denys vehicle destroy", false), witherspawn(CMIMaterial.WITHER_SKELETON_SKULL, FlagMode.Residence, "Allows or denys wither spawning", true), + phantomspawn(CMIMaterial.BROWN_WOOL, FlagMode.Residence, "Allows or denys phantom spawning", true), witherdamage(CMIMaterial.WITHER_SKELETON_SKULL, FlagMode.Residence, "Allows or denys wither damage", true), witherdestruction(CMIMaterial.WITHER_SKELETON_SKULL, FlagMode.Residence, "Allows or denys wither block damage", true), waterflow(CMIMaterial.WATER_BUCKET, FlagMode.Residence, "Allows or denys water flow, overrides flow", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index de57c05f4..606442920 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -58,6 +58,7 @@ import cmiLib.ActionBarTitleMessages; import cmiLib.ItemManager.CMIMaterial; +import cmiLib.VersionChecker.Version; public class ResidenceEntityListener implements Listener { @@ -427,6 +428,30 @@ public void onWitherSpawn(CreatureSpawnEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPhantomSpawn(CreatureSpawnEvent event) { + if (Version.isCurrentLower(Version.v1_13_R1)) + return; + // Disabling listener if flag disabled globally + if (!Flags.phantomspawn.isGlobalyEnabled()) + return; + // disabling event on world + Entity ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + + if (ent.getType() != EntityType.PHANTOM) + return; + + FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); + if (perms.has(Flags.phantomspawn, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onCreatureSpawn(CreatureSpawnEvent event) { // disabling event on world diff --git a/src/plugin.yml b/src/plugin.yml index 622922570..130f07d6c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.3.1 +version: 4.8.4.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 58a9adec97378d52ab51ea4652b8009d9d8ad021 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 16:58:12 +0200 Subject: [PATCH 0542/1142] Lets fix dryup flag for 1.13 servers Extra check for dryup flag which could cause errors in console. --- .../residence/listeners/ResidenceBlockListener.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index bdb38728a..a10ac7b5a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -805,7 +805,7 @@ public void onLandDryFade(BlockFadeEvent event) { } } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onLandDryPhysics(BlockPhysicsEvent event) { // Disabling listener if flag disabled globally if (!Flags.dryup.isGlobalyEnabled()) @@ -814,12 +814,15 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; + if (!event.getBlock().getChunk().isLoaded()) + return; + CMIMaterial mat = CMIMaterial.get(event.getBlock().getType()); if (!mat.equals(CMIMaterial.FARMLAND)) return; FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.dryup, true)) { + if (perms.has(Flags.dryup, FlagCombo.OnlyFalse)) { Block b = event.getBlock(); if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_13_R1)) { try { @@ -828,8 +831,9 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { e1.printStackTrace(); } } else { - // Waiting for 1.13+ fix - + org.bukkit.block.data.type.Farmland farm = (org.bukkit.block.data.type.Farmland) event.getBlock().getBlockData(); + farm.setMoisture(7); + event.getBlock().setBlockData(farm); } event.setCancelled(true); return; From 8866fbb797f5c88b1aacb39b6ad2071a25071cd6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 17:11:06 +0200 Subject: [PATCH 0543/1142] Fix for 1.13+ servers and anvilbreak flag --- src/cmiLib/ItemManager.java | 1227 +++++++++-------- .../listeners/ResidenceBlockListener.java | 9 +- 2 files changed, 622 insertions(+), 614 deletions(-) diff --git a/src/cmiLib/ItemManager.java b/src/cmiLib/ItemManager.java index c41caf763..f60e70727 100644 --- a/src/cmiLib/ItemManager.java +++ b/src/cmiLib/ItemManager.java @@ -627,56 +627,56 @@ public static String getRealNameByType(EntityType type) { public enum CMIMaterial { NONE(-1, -1, -1, "None"), ACACIA_BOAT(447, 0, 27326, "Acacia Boat", "BOAT_ACACIA"), - ACACIA_BUTTON(-1, -1, 13993, "Acacia Button", ""), + ACACIA_BUTTON(-1, -1, 13993, "Acacia Button"), ACACIA_DOOR(430, 0, 23797, "Acacia Door", "ACACIA_DOOR_ITEM"), - ACACIA_FENCE(192, 0, 4569, "Acacia Fence", "ACACIA_FENCE"), - ACACIA_FENCE_GATE(187, 0, 14145, "Acacia Fence Gate", "ACACIA_FENCE_GATE"), + ACACIA_FENCE(192, 0, 4569, "Acacia Fence"), + ACACIA_FENCE_GATE(187, 0, 14145, "Acacia Fence Gate"), ACACIA_LEAVES(161, 0, 16606, "Acacia Leaves", "LEAVES_2"), ACACIA_LOG(162, 0, 8385, "Acacia Log", "LOG_2"), ACACIA_PLANKS(5, 4, 31312, "Acacia Wood Plank", "Acacia Planks"), - ACACIA_PRESSURE_PLATE(-1, -1, 17586, "Acacia Pressure Plate", ""), - ACACIA_SAPLING(6, 4, 20806, "Acacia Sapling", ""), + ACACIA_PRESSURE_PLATE(-1, -1, 17586, "Acacia Pressure Plate"), + ACACIA_SAPLING(6, 4, 20806, "Acacia Sapling"), ACACIA_SLAB(126, 4, 23730, "Acacia Wood Slab", "Acacia Slab"), - ACACIA_STAIRS(163, 0, 17453, "Acacia Stairs", "ACACIA_STAIRS"), - ACACIA_TRAPDOOR(-1, -1, 18343, "Acacia Trapdoor", ""), - ACACIA_WOOD(-1, -1, 21861, "Acacia Wood", "Acacia Log"), - ACTIVATOR_RAIL(157, 0, 5834, "Activator Rail", "ACTIVATOR_RAIL"), - AIR(0, 0, 9648, "Unknown", "Air"), + ACACIA_STAIRS(163, 0, 17453, "Acacia Stairs"), + ACACIA_TRAPDOOR(-1, -1, 18343, "Acacia Trapdoor"), + ACACIA_WOOD(-1, -1, 21861, "Acacia Wood"), + ACTIVATOR_RAIL(157, 0, 5834, "Activator Rail"), + AIR(0, 0, 9648, "Air"), ALLIUM(38, 2, 6871, "Allium", "RED_ROSE"), - ANDESITE(1, 5, 25975, "Andesite", ""), - ANVIL(145, 0, 18718, "Anvil", "ANVIL"), - APPLE(260, 0, 7720, "Apple", "APPLE"), - ARMOR_STAND(416, 0, 12852, "Armor Stand", ""), + ANDESITE(1, 5, 25975, "Andesite"), + ANVIL(145, 0, 18718, "Anvil"), + APPLE(260, 0, 7720, "Apple"), + ARMOR_STAND(416, 0, 12852, "Armor Stand"), ARROW(262, 0, 31091, "Arrow", "ARROW"), - ATTACHED_MELON_STEM(-1, -1, 30882, "Attached Melon Stem", ""), - ATTACHED_PUMPKIN_STEM(-1, -1, 12724, "Attached Pumpkin Stem", ""), - AZURE_BLUET(38, 3, 17608, "Azure Bluet", ""), - BAKED_POTATO(393, 0, 14624, "Baked Potato", ""), - BARRIER(166, 0, 26453, "Barrier", "BARRIER"), + ATTACHED_MELON_STEM(-1, -1, 30882, "Attached Melon Stem"), + ATTACHED_PUMPKIN_STEM(-1, -1, 12724, "Attached Pumpkin Stem"), + AZURE_BLUET(38, 3, 17608, "Azure Bluet"), + BAKED_POTATO(393, 0, 14624, "Baked Potato"), + BARRIER(166, 0, 26453, "Barrier"), BAT_SPAWN_EGG(383, 65, 14607, "Spawn Bat", "Bat Spawn Egg"), - BEACON(138, 0, 6608, "Beacon", "BEACON"), - BEDROCK(7, 0, 23130, "Bedrock", ""), - BEEF(363, 0, 4803, "Raw Beef", ""), - BEETROOT(434, 0, 23305, "Beetroot", ""), + BEACON(138, 0, 6608, "Beacon"), + BEDROCK(7, 0, 23130, "Bedrock"), + BEEF(363, 0, 4803, "Raw Beef"), + BEETROOT(434, 0, 23305, "Beetroot"), BEETROOTS(207, 0, 22075, "Beetroots", "BEETROOT_BLOCK"), - BEETROOT_SEEDS(435, 0, 21282, "Beetroot Seeds", ""), - BEETROOT_SOUP(436, 0, 16036, "Beetroot Soup", ""), + BEETROOT_SEEDS(435, 0, 21282, "Beetroot Seeds"), + BEETROOT_SOUP(436, 0, 16036, "Beetroot Soup"), BIRCH_BOAT(445, 0, 28104, "Birch Boat", "BOAT_BIRCH"), - BIRCH_BUTTON(-1, -1, 26934, "Birch Button", ""), + BIRCH_BUTTON(-1, -1, 26934, "Birch Button"), BIRCH_DOOR(428, 0, 14759, "Birch Door", "BIRCH_DOOR_ITEM"), BIRCH_FENCE(189, 0, 17347, "Birch Fence", "BIRCH_FENCE"), BIRCH_FENCE_GATE(184, 0, 6322, "Birch Fence Gate", "BIRCH_FENCE_GATE"), BIRCH_LEAVES(18, 2, 12601, "Birch Leaves", "LEAVES"), BIRCH_LOG(17, 2, 26727, "Birch Log", "LOG"), BIRCH_PLANKS(5, 2, 29322, "Birch Wood Plank", "Birch Planks"), - BIRCH_PRESSURE_PLATE(-1, -1, 9664, "Birch Pressure Plate", ""), - BIRCH_SAPLING(6, 2, 31533, "Birch Sapling", ""), - BIRCH_SLAB(126, 2, 13807, "Birch Slab", ""), + BIRCH_PRESSURE_PLATE(-1, -1, 9664, "Birch Pressure Plate"), + BIRCH_SAPLING(6, 2, 31533, "Birch Sapling"), + BIRCH_SLAB(126, 2, 13807, "Birch Slab"), BIRCH_STAIRS(135, 0, 7657, "Birch Wood Stairs", "Birch Stairs"), - BIRCH_TRAPDOOR(-1, -1, 32585, "Birch Trapdoor", ""), - BIRCH_WOOD(-1, -1, 20913, "Birch Wood", ""), + BIRCH_TRAPDOOR(-1, -1, 32585, "Birch Trapdoor"), + BIRCH_WOOD(-1, -1, 20913, "Birch Wood"), BLACK_BANNER(425, 0, 9365, "Banner", "Black Banner"), - BLACK_BED(355, 15, 20490, "Black Bed", "Black Bed"), + BLACK_BED(355, 15, 20490, "Black Bed"), BLACK_CARPET(171, 15, 6056, "Black Carpet", "CARPET"), BLACK_CONCRETE(251, 15, 13338, "Black Concrete", "CONCRETE"), BLACK_CONCRETE_POWDER(252, 15, 16150, "Black Concrete Powder", "CONCRETE_POWDER"), @@ -685,262 +685,262 @@ public enum CMIMaterial { BLACK_STAINED_GLASS(95, 15, 13941, "Black Stained Glass", "STAINED_GLASS"), BLACK_STAINED_GLASS_PANE(160, 15, 13201, "Black Stained Glass Pane", "STAINED_GLASS_PANE"), BLACK_TERRACOTTA(159, 15, 26691, "Black Terracotta", "STAINED_CLAY"), - BLACK_WALL_BANNER(117, 0, 4919, "Black Banner", ""), - BLACK_WOOL(35, 15, 16693, "Black Wool", ""), - BLAZE_POWDER(377, 0, 18941, "Blaze Powder", ""), - BLAZE_ROD(369, 0, 8289, "Blaze Rod", ""), + BLACK_WALL_BANNER(117, 0, 4919, "Black Banner"), + BLACK_WOOL(35, 15, 16693, "Black Wool"), + BLAZE_POWDER(377, 0, 18941, "Blaze Powder"), + BLAZE_ROD(369, 0, 8289, "Blaze Rod"), BLAZE_SPAWN_EGG(383, 61, 4759, "Spawn Blaze", "Blaze Spawn Egg"), BLUE_BANNER(245, 4, 18481, "Blue Banner", "PURPLE_GLAZED_TERRACOTTA"), - BLUE_BED(355, 11, 12714, "Blue Bed", "Blue Bed"), - BLUE_CARPET(171, 11, 13292, "Blue Carpet", ""), - BLUE_CONCRETE(251, 11, 18756, "Blue Concrete", ""), - BLUE_CONCRETE_POWDER(252, 11, 17773, "Blue Concrete Powder", ""), - BLUE_GLAZED_TERRACOTTA(246, 0, 23823, "Blue Glazed Terracotta", "BLUE_GLAZED_TERRACOTTA"), - BLUE_ICE(-1, -1, 22449, "Blue Ice", ""), - BLUE_ORCHID(38, 1, 13432, "Blue Orchid", ""), - BLUE_SHULKER_BOX(230, 0, 11476, "Blue Shulker Box", "BLUE_SHULKER_BOX"), - BLUE_STAINED_GLASS(95, 11, 7107, "Blue Stained Glass", ""), - BLUE_STAINED_GLASS_PANE(160, 11, 28484, "Blue Stained Glass Pane", ""), - BLUE_TERRACOTTA(159, 11, 5236, "Blue Terracotta", ""), - BLUE_WALL_BANNER(117, 4, 17757, "Blue Banner", ""), - BLUE_WOOL(35, 11, 15738, "Blue Wool", ""), - BONE(352, 0, 5686, "Bone", ""), - BONE_BLOCK(216, 0, 17312, "Bone Block", "BONE_BLOCK"), - BONE_MEAL(351, 15, 32458, "Bone Meal", ""), - BOOK(340, 0, 23097, "Book", ""), - BOOKSHELF(47, 0, 10069, "Bookshelf", "BOOKSHELF"), - BOW(261, 0, 8745, "Bow", "BOW"), - BOWL(281, 0, 32661, "Bowl", "BOWL"), - BRAIN_CORAL(-1, -1, 31316, "Brain Coral", ""), - BRAIN_CORAL_BLOCK(-1, -1, 30618, "Brain Coral Block", ""), - BRAIN_CORAL_FAN(-1, -1, 13849, "Brain Coral Fan", ""), - BRAIN_CORAL_WALL_FAN(-1, -1, 22685, "Brain Coral Wall Fan", ""), - BREAD(297, 0, 32049, "Bread", "BREAD"), + BLUE_BED(355, 11, 12714, "Blue Bed"), + BLUE_CARPET(171, 11, 13292, "Blue Carpet"), + BLUE_CONCRETE(251, 11, 18756, "Blue Concrete"), + BLUE_CONCRETE_POWDER(252, 11, 17773, "Blue Concrete Powder"), + BLUE_GLAZED_TERRACOTTA(246, 0, 23823, "Blue Glazed Terracotta"), + BLUE_ICE(-1, -1, 22449, "Blue Ice"), + BLUE_ORCHID(38, 1, 13432, "Blue Orchid"), + BLUE_SHULKER_BOX(230, 0, 11476, "Blue Shulker Box"), + BLUE_STAINED_GLASS(95, 11, 7107, "Blue Stained Glass"), + BLUE_STAINED_GLASS_PANE(160, 11, 28484, "Blue Stained Glass Pane"), + BLUE_TERRACOTTA(159, 11, 5236, "Blue Terracotta"), + BLUE_WALL_BANNER(117, 4, 17757, "Blue Banner"), + BLUE_WOOL(35, 11, 15738, "Blue Wool"), + BONE(352, 0, 5686, "Bone"), + BONE_BLOCK(216, 0, 17312, "Bone Block"), + BONE_MEAL(351, 15, 32458, "Bone Meal"), + BOOK(340, 0, 23097, "Book"), + BOOKSHELF(47, 0, 10069, "Bookshelf"), + BOW(261, 0, 8745, "Bow"), + BOWL(281, 0, 32661, "Bowl"), + BRAIN_CORAL(-1, -1, 31316, "Brain Coral"), + BRAIN_CORAL_BLOCK(-1, -1, 30618, "Brain Coral Block"), + BRAIN_CORAL_FAN(-1, -1, 13849, "Brain Coral Fan"), + BRAIN_CORAL_WALL_FAN(-1, -1, 22685, "Brain Coral Wall Fan"), + BREAD(297, 0, 32049, "Bread"), BREWING_STAND(379, 0, 14539, "Brewing Stand", "BREWING_STAND_ITEM"), BRICK(336, 0, 6820, "Brick", "claybrick"), - BRICKS(45, 0, 14165, "Bricks", ""), + BRICKS(45, 0, 14165, "Bricks"), BRICK_SLAB(44, 4, 26333, "Brick Slab", "STEP"), - BRICK_STAIRS(108, 0, 21534, "Brick Stairs", "BRICK_STAIRS"), - BROWN_BANNER(425, 3, 11481, "Brown Banner", ""), - BROWN_BED(355, 12, 25624, "Brown Bed", "Brown Bed"), - BROWN_CARPET(171, 12, 23352, "Brown Carpet", ""), - BROWN_CONCRETE(251, 12, 19006, "Brown Concrete", ""), - BROWN_CONCRETE_POWDER(252, 12, 21485, "Brown Concrete Powder", ""), - BROWN_GLAZED_TERRACOTTA(247, 0, 5655, "Brown Glazed Terracotta", "BROWN_GLAZED_TERRACOTTA"), - BROWN_MUSHROOM(39, 0, 9665, "Brown Mushroom", "BROWN_MUSHROOM"), + BRICK_STAIRS(108, 0, 21534, "Brick Stairs"), + BROWN_BANNER(425, 3, 11481, "Brown Banner"), + BROWN_BED(355, 12, 25624, "Brown Bed"), + BROWN_CARPET(171, 12, 23352, "Brown Carpet"), + BROWN_CONCRETE(251, 12, 19006, "Brown Concrete"), + BROWN_CONCRETE_POWDER(252, 12, 21485, "Brown Concrete Powder"), + BROWN_GLAZED_TERRACOTTA(247, 0, 5655, "Brown Glazed Terracotta"), + BROWN_MUSHROOM(39, 0, 9665, "Brown Mushroom"), BROWN_MUSHROOM_BLOCK(99, 0, 6291, "Brown Mushroom Block", "HUGE_MUSHROOM_1"), - BROWN_SHULKER_BOX(231, 0, 24230, "Brown Shulker Box", "BROWN_SHULKER_BOX"), - BROWN_STAINED_GLASS(95, 12, 20945, "Brown Stained Glass", ""), - BROWN_STAINED_GLASS_PANE(160, 12, 17557, "Brown Stained Glass Pane", ""), - BROWN_TERRACOTTA(159, 12, 23664, "Brown Terracotta", ""), - BROWN_WALL_BANNER(117, 3, 14731, "Brown Banner", ""), - BROWN_WOOL(35, 12, 32638, "Brown Wool", ""), - BUBBLE_COLUMN(-1, -1, 13758, "Bubble Column", ""), - BUBBLE_CORAL(-1, -1, 12464, "Bubble Coral", ""), - BUBBLE_CORAL_BLOCK(-1, -1, 15437, "Bubble Coral Block", ""), - BUBBLE_CORAL_FAN(-1, -1, 10795, "Bubble Coral Fan", ""), - BUBBLE_CORAL_WALL_FAN(-1, -1, 20382, "Bubble Coral Wall Fan", ""), - BUCKET(325, 0, 15215, "Bucket", ""), - CACTUS(81, 0, 12191, "Cactus", "CACTUS"), - CACTUS_GREEN(351, 2, 17296, "Cactus Green", ""), - CAKE(354, 0, 27048, "Cake", ""), + BROWN_SHULKER_BOX(231, 0, 24230, "Brown Shulker Box"), + BROWN_STAINED_GLASS(95, 12, 20945, "Brown Stained Glass"), + BROWN_STAINED_GLASS_PANE(160, 12, 17557, "Brown Stained Glass Pane"), + BROWN_TERRACOTTA(159, 12, 23664, "Brown Terracotta"), + BROWN_WALL_BANNER(117, 3, 14731, "Brown Banner"), + BROWN_WOOL(35, 12, 32638, "Brown Wool"), + BUBBLE_COLUMN(-1, -1, 13758, "Bubble Column"), + BUBBLE_CORAL(-1, -1, 12464, "Bubble Coral"), + BUBBLE_CORAL_BLOCK(-1, -1, 15437, "Bubble Coral Block"), + BUBBLE_CORAL_FAN(-1, -1, 10795, "Bubble Coral Fan"), + BUBBLE_CORAL_WALL_FAN(-1, -1, 20382, "Bubble Coral Wall Fan"), + BUCKET(325, 0, 15215, "Bucket"), + CACTUS(81, 0, 12191, "Cactus"), + CACTUS_GREEN(351, 2, 17296, "Cactus Green"), + CAKE(354, 0, 27048, "Cake"), CARROT(391, 0, 22824, "Carrot", "Carrotitem"), - CARROTS(141, 0, 17258, "Carrots", "CARROT"), + CARROTS(141, 0, 17258, "Carrots"), CARROT_ON_A_STICK(398, 0, 27809, "Carrot on a Stick", "carrotstick"), - CARVED_PUMPKIN(-1, -1, 25833, "Carved Pumpkin", ""), + CARVED_PUMPKIN(-1, -1, 25833, "Carved Pumpkin"), CAULDRON(380, 0, 26531, "Cauldron", "CAULDRON_ITEM"), - CAVE_AIR(-1, -1, 17422, "Air", ""), + CAVE_AIR(-1, -1, 17422, "Cave Air"), CAVE_SPIDER_SPAWN_EGG(383, 59, 23341, "Spawn Cave Spider", "Cave Spider Spawn Egg"), - CHAINMAIL_BOOTS(305, 0, 17953, "Chainmail Boots", ""), - CHAINMAIL_CHESTPLATE(303, 0, 23602, "Chainmail Chestplate", "CHAINMAIL_CHESTPLATE"), - CHAINMAIL_HELMET(302, 0, 26114, "Chainmail Helmet", "CHAINMAIL_HELMET"), - CHAINMAIL_LEGGINGS(304, 0, 19087, "Chainmail Leggings", "CHAINMAIL_LEGGINGS"), - CHAIN_COMMAND_BLOCK(-1, -1, 26798, "Chain Command Block", ""), - CHARCOAL(263, 1, 5390, "Charcoal", "COAL"), - CHEST(54, 0, 22969, "Chest", "CHEST"), + CHAINMAIL_BOOTS(305, 0, 17953, "Chainmail Boots"), + CHAINMAIL_CHESTPLATE(303, 0, 23602, "Chainmail Chestplate"), + CHAINMAIL_HELMET(302, 0, 26114, "Chainmail Helmet"), + CHAINMAIL_LEGGINGS(304, 0, 19087, "Chainmail Leggings"), + CHAIN_COMMAND_BLOCK(-1, -1, 26798, "Chain Command Block"), + CHARCOAL(263, 1, 5390, "Charcoal"), + CHEST(54, 0, 22969, "Chest"), CHEST_MINECART(342, 0, 4497, "Minecart with Chest", "Storageminecart"), - CHICKEN(365, 0, 17281, "Raw Chicken", ""), + CHICKEN(365, 0, 17281, "Raw Chicken"), CHICKEN_SPAWN_EGG(383, 93, 5462, "Spawn Chicken", "Chicken Spawn Egg"), - CHIPPED_ANVIL(145, 1, 10623, "Chipped Anvil", ""), + CHIPPED_ANVIL(145, 1, 10623, "Chipped Anvil"), CHISELED_QUARTZ_BLOCK(155, 1, 30964, "Chiseled Quartz Block", "QUARTZ_BLOCK"), CHISELED_RED_SANDSTONE(179, 1, 15529, "Chiseled Red Sandstone", "RED_SANDSTONE"), CHISELED_SANDSTONE(24, 1, 31763, "Chiseled Sandstone", "SANDSTONE"), CHISELED_STONE_BRICKS(98, 3, 9087, "Chiseled Stone Bricks", "SMOOTH_BRICK"), CHORUS_FLOWER(200, 0, 28542, "Chorus Flower", "CHORUS_FLOWER"), - CHORUS_FRUIT(432, 0, 7652, "Chorus Fruit", ""), + CHORUS_FRUIT(432, 0, 7652, "Chorus Fruit"), CHORUS_PLANT(199, 0, 28243, "Chorus Plant", "CHORUS_PLANT"), CLAY(82, 0, 27880, "Clay", "Clay Block"), CLAY_BALL(337, 0, 24603, "Clay Ball"), CLOCK(347, 0, 14980, "Clock", "watch"), - COAL(263, 0, 29067, "Coal", ""), + COAL(263, 0, 29067, "Coal"), COAL_BLOCK(173, 0, 27968, "Block of Coal", "COAL_BLOCK"), - COAL_ORE(16, 0, 30965, "Coal Ore", "COAL_ORE"), - COARSE_DIRT(3, 1, 15411, "Coarse Dirt", ""), - COBBLESTONE(4, 0, 32147, "Cobblestone", ""), - COBBLESTONE_SLAB(44, 3, 6340, "Cobblestone Slab", ""), - COBBLESTONE_STAIRS(67, 0, 24715, "Cobblestone Stairs", "COBBLESTONE_STAIRS"), + COAL_ORE(16, 0, 30965, "Coal Ore"), + COARSE_DIRT(3, 1, 15411, "Coarse Dirt"), + COBBLESTONE(4, 0, 32147, "Cobblestone"), + COBBLESTONE_SLAB(44, 3, 6340, "Cobblestone Slab"), + COBBLESTONE_STAIRS(67, 0, 24715, "Cobblestone Stairs"), COBBLESTONE_WALL(139, 0, 12616, "Cobblestone Wall", "COBBLE_WALL"), COBWEB(30, 0, 9469, "Cobweb", "WEB"), - COCOA(127, 0, 29709, "Cocoa", ""), - COCOA_BEANS(351, 3, 27381, "Coco Beans", "INK_SACK"), - COD(349, 0, 24691, "Raw Cod", "RAW_FISH"), - COD_BUCKET(-1, -1, 28601, "Bucket of Cod", ""), - COD_SPAWN_EGG(-1, -1, 27248, "Cod Spawn Egg", ""), + COCOA(127, 0, 29709, "Cocoa"), + COCOA_BEANS(351, 3, 27381, "Coco Beans"), + COD(-1, -1, 24691, "Raw Cod"), + COD_BUCKET(-1, -1, 28601, "Bucket of Cod"), + COD_SPAWN_EGG(-1, -1, 27248, "Cod Spawn Egg"), COMMAND_BLOCK(137, 0, 4355, "Command Block", "COMMAND"), - COMMAND_BLOCK_MINECART(422, 0, 7992, "Minecart with Command Block", ""), - COMPARATOR(404, 0, 18911, "Redstone Comparator", ""), - COMPASS(345, 0, 24139, "Compass", ""), - CONDUIT(-1, -1, 5148, "Conduit", ""), - COOKED_BEEF(364, 0, 21595, "Steak", ""), - COOKED_CHICKEN(366, 0, 20780, "Cooked Chicken", ""), - COOKED_COD(350, 0, 9681, "Cooked Fish", "COOKED_FISH"), - COOKED_MUTTON(424, 0, 31447, "Cooked Mutton", ""), + COMMAND_BLOCK_MINECART(422, 0, 7992, "Minecart with Command Block"), + COMPARATOR(404, 0, 18911, "Redstone Comparator"), + COMPASS(345, 0, 24139, "Compass"), + CONDUIT(-1, -1, 5148, "Conduit"), + COOKED_BEEF(364, 0, 21595, "Steak"), + COOKED_CHICKEN(366, 0, 20780, "Cooked Chicken"), + COOKED_COD(350, 0, 9681, "Cooked Fish"), + COOKED_MUTTON(424, 0, 31447, "Cooked Mutton"), COOKED_PORKCHOP(320, 0, 27231, "Cooked Porkchop", "grilledpork"), - COOKED_RABBIT(412, 0, 4454, "Cooked Rabbit", ""), - COOKED_SALMON(350, 1, 5615, "Cooked Salmon", ""), - COOKIE(357, 0, 27431, "Cookie", ""), + COOKED_RABBIT(412, 0, 4454, "Cooked Rabbit"), + COOKED_SALMON(350, 1, 5615, "Cooked Salmon"), + COOKIE(357, 0, 27431, "Cookie"), COW_SPAWN_EGG(383, 92, 14761, "Spawn Cow", "Cow Spawn Egg"), - CRACKED_STONE_BRICKS(98, 2, 27869, "Cracked Stone Bricks", ""), + CRACKED_STONE_BRICKS(98, 2, 27869, "Cracked Stone Bricks"), CRAFTING_TABLE(58, 0, 20706, "Crafting Table", "WORKBENCH"), CREEPER_HEAD(397, 4, 29146, "Mob Head (Creeper)", "Creeper Head"), CREEPER_SPAWN_EGG(383, 50, 9653, "Spawn Creeper", "Creeper Spawn Egg"), - CREEPER_WALL_HEAD(144, 4, 30123, "Creeper Wall Head", ""), - CUT_RED_SANDSTONE(-1, -1, 26842, "Cut Red Sandstone", ""), - CUT_SANDSTONE(-1, -1, 6118, "Cut Sandstone", ""), - CYAN_BANNER(425, 6, 9839, "Cyan Banner", ""), + CREEPER_WALL_HEAD(144, 4, 30123, "Creeper Wall Head"), + CUT_RED_SANDSTONE(-1, -1, 26842, "Cut Red Sandstone"), + CUT_SANDSTONE(-1, -1, 6118, "Cut Sandstone"), + CYAN_BANNER(425, 6, 9839, "Cyan Banner"), CYAN_BED(355, 9, 16746, "Cyan Bed", "Cyan Bed"), - CYAN_CARPET(171, 9, 31495, "Cyan Carpet", ""), - CYAN_CONCRETE(251, 9, 26522, "Cyan Concrete", ""), - CYAN_CONCRETE_POWDER(252, 9, 15734, "Cyan Concrete Powder", ""), - CYAN_DYE(351, 6, 8043, "Cyan Dye", ""), + CYAN_CARPET(171, 9, 31495, "Cyan Carpet"), + CYAN_CONCRETE(251, 9, 26522, "Cyan Concrete"), + CYAN_CONCRETE_POWDER(252, 9, 15734, "Cyan Concrete Powder"), + CYAN_DYE(351, 6, 8043, "Cyan Dye"), CYAN_GLAZED_TERRACOTTA(244, 0, 9550, "Cyan Glazed Terracotta", "CYAN_GLAZED_TERRACOTTA"), CYAN_SHULKER_BOX(228, 0, 28123, "Cyan Shulker Box", "CYAN_SHULKER_BOX"), - CYAN_STAINED_GLASS(95, 9, 30604, "Cyan Stained Glass", ""), - CYAN_STAINED_GLASS_PANE(160, 9, 11784, "Cyan Stained Glass Pane", ""), - CYAN_TERRACOTTA(159, 9, 25940, "Cyan Terracotta", ""), - CYAN_WALL_BANNER(117, 6, 10889, "Cyan Banner", ""), - CYAN_WOOL(35, 9, 12221, "Cyan Wool", ""), - DAMAGED_ANVIL(145, 2, 10274, "Damaged Anvil", ""), + CYAN_STAINED_GLASS(95, 9, 30604, "Cyan Stained Glass"), + CYAN_STAINED_GLASS_PANE(160, 9, 11784, "Cyan Stained Glass Pane"), + CYAN_TERRACOTTA(159, 9, 25940, "Cyan Terracotta"), + CYAN_WALL_BANNER(117, 6, 10889, "Cyan Banner"), + CYAN_WOOL(35, 9, 12221, "Cyan Wool"), + DAMAGED_ANVIL(145, 2, 10274, "Damaged Anvil"), DANDELION(37, 0, 30558, "Dandelion", "YELLOW_FLOWER"), - DANDELION_YELLOW(351, 11, 21789, "Dandelion Yellow", ""), + DANDELION_YELLOW(351, 11, 21789, "Dandelion Yellow"), DARK_OAK_BOAT(448, 0, 28618, "Dark Oak Boat", "BOAT_DARK_OAK"), - DARK_OAK_BUTTON(-1, -1, 6214, "Dark Oak Button", ""), + DARK_OAK_BUTTON(-1, -1, 6214, "Dark Oak Button"), DARK_OAK_DOOR(431, 0, 10669, "Dark Oak Door", "DARK_OAK_DOOR_ITEM"), DARK_OAK_FENCE(191, 0, 21767, "Dark Oak Fence", "DARK_OAK_FENCE"), DARK_OAK_FENCE_GATE(186, 0, 10679, "Dark Oak Fence Gate", "DARK_OAK_FENCE_GATE"), - DARK_OAK_LEAVES(161, 1, 22254, "Dark Oak Leaves", ""), - DARK_OAK_LOG(162, 1, 14831, "Dark Oak Log", ""), + DARK_OAK_LEAVES(161, 1, 22254, "Dark Oak Leaves"), + DARK_OAK_LOG(162, 1, 14831, "Dark Oak Log"), DARK_OAK_PLANKS(5, 5, 20869, "Dark Oak Wood Plank", "Dark Oak Planks"), - DARK_OAK_PRESSURE_PLATE(-1, -1, 31375, "Dark Oak Pressure Plate", ""), - DARK_OAK_SAPLING(6, 5, 14933, "Dark Oak Sapling", ""), + DARK_OAK_PRESSURE_PLATE(-1, -1, 31375, "Dark Oak Pressure Plate"), + DARK_OAK_SAPLING(6, 5, 14933, "Dark Oak Sapling"), DARK_OAK_SLAB(126, 5, 28852, "Dark Oak Wood Slab", "Dark Oak Slab"), DARK_OAK_STAIRS(164, 0, 22921, "Dark Oak Stairs", "DARK_OAK_STAIRS"), - DARK_OAK_TRAPDOOR(-1, -1, 10355, "Dark Oak Trapdoor", ""), - DARK_OAK_WOOD(-1, -1, 16995, "Dark Oak Wood", ""), - DARK_PRISMARINE(168, 2, 19940, "Dark Prismarine", "PRISMARINE"), - DARK_PRISMARINE_SLAB(-1, -1, 7577, "Dark Prismarine Slab", ""), - DARK_PRISMARINE_STAIRS(-1, -1, 26511, "Dark Prismarine Stairs", ""), - DAYLIGHT_DETECTOR(151, 0, 8864, "Daylight Detector", "DAYLIGHT_DETECTOR"), - DEAD_BRAIN_CORAL(-1, -1, 9116, "Dead Brain Coral", ""), - DEAD_BRAIN_CORAL_BLOCK(-1, -1, 12979, "Dead Brain Coral Block", ""), - DEAD_BRAIN_CORAL_FAN(-1, -1, 26150, "Dead Brain Coral Fan", ""), - DEAD_BRAIN_CORAL_WALL_FAN(-1, -1, 23718, "Dead Brain Coral Wall Fan", ""), - DEAD_BUBBLE_CORAL(-1, -1, 30583, "Dead Bubble Coral", ""), - DEAD_BUBBLE_CORAL_BLOCK(-1, -1, 28220, "Dead Bubble Coral Block", ""), - DEAD_BUBBLE_CORAL_FAN(-1, -1, 17322, "Dead Bubble Coral Fan", ""), - DEAD_BUBBLE_CORAL_WALL_FAN(-1, -1, 18453, "Dead Bubble Coral Wall Fan", ""), - DEAD_BUSH(32, 0, 22888, "Dead Bush", "DEAD_BUSH"), - DEAD_FIRE_CORAL(-1, -1, 8365, "Dead Fire Coral", ""), - DEAD_FIRE_CORAL_BLOCK(-1, -1, 5307, "Dead Fire Coral Block", ""), - DEAD_FIRE_CORAL_FAN(-1, -1, 27073, "Dead Fire Coral Fan", ""), - DEAD_FIRE_CORAL_WALL_FAN(-1, -1, 23375, "Dead Fire Coral Wall Fan", ""), + DARK_OAK_TRAPDOOR(-1, -1, 10355, "Dark Oak Trapdoor"), + DARK_OAK_WOOD(-1, -1, 16995, "Dark Oak Wood"), + DARK_PRISMARINE(168, 2, 19940, "Dark Prismarine"), + DARK_PRISMARINE_SLAB(-1, -1, 7577, "Dark Prismarine Slab"), + DARK_PRISMARINE_STAIRS(-1, -1, 26511, "Dark Prismarine Stairs"), + DAYLIGHT_DETECTOR(151, 0, 8864, "Daylight Detector"), + DEAD_BRAIN_CORAL(-1, -1, 9116, "Dead Brain Coral"), + DEAD_BRAIN_CORAL_BLOCK(-1, -1, 12979, "Dead Brain Coral Block"), + DEAD_BRAIN_CORAL_FAN(-1, -1, 26150, "Dead Brain Coral Fan"), + DEAD_BRAIN_CORAL_WALL_FAN(-1, -1, 23718, "Dead Brain Coral Wall Fan"), + DEAD_BUBBLE_CORAL(-1, -1, 30583, "Dead Bubble Coral"), + DEAD_BUBBLE_CORAL_BLOCK(-1, -1, 28220, "Dead Bubble Coral Block"), + DEAD_BUBBLE_CORAL_FAN(-1, -1, 17322, "Dead Bubble Coral Fan"), + DEAD_BUBBLE_CORAL_WALL_FAN(-1, -1, 18453, "Dead Bubble Coral Wall Fan"), + DEAD_BUSH(32, 0, 22888, "Dead Bush"), + DEAD_FIRE_CORAL(-1, -1, 8365, "Dead Fire Coral"), + DEAD_FIRE_CORAL_BLOCK(-1, -1, 5307, "Dead Fire Coral Block"), + DEAD_FIRE_CORAL_FAN(-1, -1, 27073, "Dead Fire Coral Fan"), + DEAD_FIRE_CORAL_WALL_FAN(-1, -1, 23375, "Dead Fire Coral Wall Fan"), DEAD_HORN_CORAL(-1, -1, 5755, "Dead Horn Coral"), - DEAD_HORN_CORAL_BLOCK(-1, -1, 15103, "Dead Horn Coral Block", ""), - DEAD_HORN_CORAL_FAN(-1, -1, 11387, "Dead Horn Coral Fan", ""), - DEAD_HORN_CORAL_WALL_FAN(-1, -1, 27550, "Dead Horn Coral Wall Fan", ""), - DEAD_TUBE_CORAL(-1, -1, 18028, "Dead Tube Coral", ""), - DEAD_TUBE_CORAL_BLOCK(-1, -1, 28350, "Dead Tube Coral Block", ""), - DEAD_TUBE_CORAL_FAN(-1, -1, 17628, "Dead Tube Coral Fan", ""), - DEAD_TUBE_CORAL_WALL_FAN(-1, -1, 5128, "Dead Tube Coral Wall Fan", ""), - DEBUG_STICK(-1, -1, 24562, "Debug Stick", ""), + DEAD_HORN_CORAL_BLOCK(-1, -1, 15103, "Dead Horn Coral Block"), + DEAD_HORN_CORAL_FAN(-1, -1, 11387, "Dead Horn Coral Fan"), + DEAD_HORN_CORAL_WALL_FAN(-1, -1, 27550, "Dead Horn Coral Wall Fan"), + DEAD_TUBE_CORAL(-1, -1, 18028, "Dead Tube Coral"), + DEAD_TUBE_CORAL_BLOCK(-1, -1, 28350, "Dead Tube Coral Block"), + DEAD_TUBE_CORAL_FAN(-1, -1, 17628, "Dead Tube Coral Fan"), + DEAD_TUBE_CORAL_WALL_FAN(-1, -1, 5128, "Dead Tube Coral Wall Fan"), + DEBUG_STICK(-1, -1, 24562, "Debug Stick"), DETECTOR_RAIL(28, 0, 13475, "Detector Rail", "DETECTOR_RAIL"), - DIAMOND(264, 0, 20865, "Diamond", "DIAMOND"), - DIAMOND_AXE(279, 0, 27277, "Diamond Axe", "DIAMOND_AXE"), + DIAMOND(264, 0, 20865, "Diamond"), + DIAMOND_AXE(279, 0, 27277, "Diamond Axe"), DIAMOND_BLOCK(57, 0, 5944, "Block of Diamond", "DIAMOND_BLOCK"), - DIAMOND_BOOTS(313, 0, 16522, "Diamond Boots", ""), - DIAMOND_CHESTPLATE(311, 0, 32099, "Diamond Chestplate", ""), - DIAMOND_HELMET(310, 0, 10755, "Diamond Helmet", ""), - DIAMOND_HOE(293, 0, 24050, "Diamond Hoe", "DIAMOND_HOE"), + DIAMOND_BOOTS(313, 0, 16522, "Diamond Boots"), + DIAMOND_CHESTPLATE(311, 0, 32099, "Diamond Chestplate"), + DIAMOND_HELMET(310, 0, 10755, "Diamond Helmet"), + DIAMOND_HOE(293, 0, 24050, "Diamond Hoe"), DIAMOND_HORSE_ARMOR(419, 0, 10321, "Diamond Horse Armor", "Diamond_barding"), - DIAMOND_LEGGINGS(312, 0, 11202, "Diamond Leggings", ""), - DIAMOND_ORE(56, 0, 9292, "Diamond Ore", "DIAMOND_ORE"), - DIAMOND_PICKAXE(278, 0, 24291, "Diamond Pickaxe", "DIAMOND_PICKAXE"), + DIAMOND_LEGGINGS(312, 0, 11202, "Diamond Leggings"), + DIAMOND_ORE(56, 0, 9292, "Diamond Ore"), + DIAMOND_PICKAXE(278, 0, 24291, "Diamond Pickaxe"), DIAMOND_SHOVEL(277, 0, 25415, "Diamond Shovel", "DIAMOND_SPADE"), - DIAMOND_SWORD(276, 0, 27707, "Diamond Sword", "DIAMOND_SWORD"), - DIORITE(1, 3, 24688, "Diorite", ""), - DIRT(3, 0, 10580, "Dirt", ""), + DIAMOND_SWORD(276, 0, 27707, "Diamond Sword"), + DIORITE(1, 3, 24688, "Diorite"), + DIRT(3, 0, 10580, "Dirt"), DISPENSER(23, 0, 20871, "Dispenser", "DISPENSER"), - DOLPHIN_SPAWN_EGG(-1, -1, 20787, "Dolphin Spawn Egg", ""), + DOLPHIN_SPAWN_EGG(-1, -1, 20787, "Dolphin Spawn Egg"), DONKEY_SPAWN_EGG(383, 31, 14513, "Spawn Donkey", "Donkey Spawn Egg"), - DRAGON_BREATH(437, 0, 20154, "Dragon's Breath", ""), + DRAGON_BREATH(437, 0, 20154, "Dragon's Breath"), DRAGON_EGG(122, 0, 29946, "Dragon Egg", "DRAGON_EGG"), - DRAGON_HEAD(397, 5, 20084, "Dragon Head", ""), - DRAGON_WALL_HEAD(144, 5, 19818, "Dragon Wall Head", ""), - DRIED_KELP(-1, -1, 21042, "Dried Kelp", ""), - DRIED_KELP_BLOCK(-1, -1, 12966, "Dried Kelp Block", ""), + DRAGON_HEAD(397, 5, 20084, "Dragon Head"), + DRAGON_WALL_HEAD(144, 5, 19818, "Dragon Wall Head"), + DRIED_KELP(-1, -1, 21042, "Dried Kelp"), + DRIED_KELP_BLOCK(-1, -1, 12966, "Dried Kelp Block"), DROPPER(158, 0, 31273, "Dropper", "DROPPER"), - DROWNED_SPAWN_EGG(-1, -1, 19368, "Drowned Spawn Egg", ""), - EGG(344, 0, 21603, "Egg", ""), + DROWNED_SPAWN_EGG(-1, -1, 19368, "Drowned Spawn Egg"), + EGG(344, 0, 21603, "Egg"), ELDER_GUARDIAN_SPAWN_EGG(383, 4, 11418, "Spawn Elder Guardian", "Elder Guardian Spawn Egg"), - ELYTRA(443, 0, 23829, "Elytra", ""), - EMERALD(388, 0, 5654, "Emerald", ""), + ELYTRA(443, 0, 23829, "Elytra"), + EMERALD(388, 0, 5654, "Emerald"), EMERALD_BLOCK(133, 0, 9914, "Emerald Block", "Block of Emerald"), - EMERALD_ORE(129, 0, 16630, "Emerald Ore", ""), - ENCHANTED_BOOK(403, 0, 11741, "Enchanted Book", ""), - ENCHANTED_GOLDEN_APPLE(322, 1, 8280, "Enchanted Golden Apple", ""), + EMERALD_ORE(129, 0, 16630, "Emerald Ore"), + ENCHANTED_BOOK(403, 0, 11741, "Enchanted Book"), + ENCHANTED_GOLDEN_APPLE(322, 1, 8280, "Enchanted Golden Apple"), ENCHANTING_TABLE(116, 0, 16255, "Enchanting Table", "ENCHANTMENT_TABLE"), ENDERMAN_SPAWN_EGG(383, 58, 29488, "Spawn Enderman", "Enderman Spawn Egg"), ENDERMITE_SPAWN_EGG(383, 67, 16617, "Spawn Endermite", "Endermite Spawn Egg"), - ENDER_CHEST(130, 0, 32349, "Ender Chest", ""), - ENDER_EYE(381, 0, 24860, "Eye of Ender", ""), - ENDER_PEARL(368, 0, 5259, "Ender Pearl", ""), - END_CRYSTAL(426, 0, 19090, "End Crystal", ""), - END_GATEWAY(209, 0, 26605, "End Gateway", "END_GATEWAY"), - END_PORTAL(119, 0, 16782, "End Portal", "ENDER_PORTAL"), + ENDER_CHEST(130, 0, 32349, "Ender Chest"), + ENDER_EYE(381, 0, 24860, "Eye of Ender"), + ENDER_PEARL(368, 0, 5259, "Ender Pearl"), + END_CRYSTAL(426, 0, 19090, "End Crystal"), + END_GATEWAY(209, 0, 26605, "End Gateway"), + END_PORTAL(119, 0, 16782, "End Portal"), END_PORTAL_FRAME(120, 0, 15480, "End Portal Frame", "ENDER_PORTAL_FRAME"), - END_ROD(198, 0, 24832, "End Rod", "END_ROD"), + END_ROD(198, 0, 24832, "End Rod"), END_STONE(121, 0, 29686, "End Stone", "ENDER_STONE"), END_STONE_BRICKS(206, 0, 20314, "End Stone Bricks", "END_BRICKS"), EVOKER_SPAWN_EGG(383, 34, 21271, "Spawn Evoker", "Evoker Spawn Egg"), EXPERIENCE_BOTTLE(384, 0, 12858, "Bottle o' Enchanting", "expbottle"), FARMLAND(60, 0, 31166, "Farmland", "SOIL"), - FEATHER(288, 0, 30548, "Feather", "FEATHER"), - FERMENTED_SPIDER_EYE(376, 0, 19386, "Fermented Spider Eye", ""), + FEATHER(288, 0, 30548, "Feather"), + FERMENTED_SPIDER_EYE(376, 0, 19386, "Fermented Spider Eye"), FERN(31, 2, 15794, "Fern", "LONG_GRASS"), - FILLED_MAP(358, 0, 23504, "Map", ""), - FIRE(51, 0, 16396, "Fire", "FIRE"), - FIREWORK_ROCKET(401, 0, 23841, "Firework Rocket", ""), + FILLED_MAP(358, 0, 23504, "Map"), + FIRE(51, 0, 16396, "Fire"), + FIREWORK_ROCKET(401, 0, 23841, "Firework Rocket"), FIREWORK_STAR(402, 0, 12190, "Firework Star", "FIREWORK_CHARGE"), FIRE_CHARGE(385, 0, 4842, "Fire Charge", "Fireball"), - FIRE_CORAL(-1, -1, 29151, "Fire Coral", ""), - FIRE_CORAL_BLOCK(-1, -1, 12119, "Fire Coral Block", ""), - FIRE_CORAL_FAN(-1, -1, 11112, "Fire Coral Fan", ""), - FIRE_CORAL_WALL_FAN(-1, -1, 20100, "Fire Coral Wall Fan", ""), - FISHING_ROD(346, 0, 4167, "Fishing Rod", ""), - FLINT(318, 0, 23596, "Flint", ""), - FLINT_AND_STEEL(259, 0, 28620, "Flint and Steel", "FLINT_AND_STEEL"), + FIRE_CORAL(-1, -1, 29151, "Fire Coral"), + FIRE_CORAL_BLOCK(-1, -1, 12119, "Fire Coral Block"), + FIRE_CORAL_FAN(-1, -1, 11112, "Fire Coral Fan"), + FIRE_CORAL_WALL_FAN(-1, -1, 20100, "Fire Coral Wall Fan"), + FISHING_ROD(346, 0, 4167, "Fishing Rod"), + FLINT(318, 0, 23596, "Flint"), + FLINT_AND_STEEL(259, 0, 28620, "Flint and Steel"), FLOWER_POT(390, 0, 30567, "Flower Pot", "FLOWER_POT_ITEM"), FROSTED_ICE(212, 0, 21814, "Frosted Ice", "FROSTED_ICE"), - FURNACE(61, 0, 8133, "Furnace", ""), + FURNACE(61, 0, 8133, "Furnace"), FURNACE_MINECART(343, 0, 14196, "Minecart with Furnace", "POWERED_MINECART"), GHAST_SPAWN_EGG(383, 56, 9970, "Spawn Ghast", "Ghast Spawn Egg"), - GHAST_TEAR(370, 0, 18222, "Ghast Tear", ""), + GHAST_TEAR(370, 0, 18222, "Ghast Tear"), GLASS(20, 0, 6195, "Glass", "GLASS"), - GLASS_BOTTLE(374, 0, 6116, "Glass Bottle", ""), + GLASS_BOTTLE(374, 0, 6116, "Glass Bottle"), GLASS_PANE(102, 0, 5709, "Glass Pane", "THIN_GLASS"), GLISTERING_MELON_SLICE(382, 0, 20158, "Glistering Melon", "speckledmelon"), - GLOWSTONE(89, 0, 32713, "Glowstone", "GLOWSTONE"), - GLOWSTONE_DUST(348, 0, 6665, "Glowstone Dust", ""), + GLOWSTONE(89, 0, 32713, "Glowstone"), + GLOWSTONE_DUST(348, 0, 6665, "Glowstone Dust"), GOLDEN_APPLE(322, 0, 27732, "Golden Apple", "Gold apple"), GOLDEN_AXE(286, 0, 4878, "Golden Axe", "Gold Axe"), GOLDEN_BOOTS(317, 0, 7859, "Golden Boots", "Gold Boots"), @@ -955,184 +955,184 @@ public enum CMIMaterial { GOLDEN_SWORD(283, 0, 10505, "Golden Sword", "GOLD_SWORD"), GOLD_BLOCK(41, 0, 27392, "Block of Gold", "GOLD_BLOCK"), GOLD_INGOT(266, 0, 28927, "Gold Ingot", "GOLD_INGOT"), - GOLD_NUGGET(371, 0, 28814, "Gold Nugget", ""), - GOLD_ORE(14, 0, 32625, "Gold Ore", "GOLD_ORE"), - GRANITE(1, 1, 21091, "Granite", ""), - GRASS(31, 1, 6155, "Grass", ""), - GRASS_BLOCK(2, 0, 28346, "Grass", "Grass Block"), - GRASS_PATH(208, 0, 8604, "Grass Path", "GRASS_PATH"), - GRAVEL(13, 0, 7804, "Gravel", "GRAVEL"), - GRAY_BANNER(425, 8, 12053, "Gray Banner", ""), - GRAY_BED(355, 7, 15745, "Gray Bed", "Gray Bed"), - GRAY_CARPET(171, 7, 26991, "Gray Carpet", ""), - GRAY_CONCRETE(251, 7, 13959, "Gray Concrete", ""), - GRAY_CONCRETE_POWDER(252, 7, 13031, "Gray Concrete Powder", ""), - GRAY_DYE(351, 8, 9184, "Gray Dye", ""), + GOLD_NUGGET(371, 0, 28814, "Gold Nugget"), + GOLD_ORE(14, 0, 32625, "Gold Ore"), + GRANITE(1, 1, 21091, "Granite"), + GRASS(31, 1, 6155, "Grass"), + GRASS_BLOCK(2, 0, 28346, "Grass Block"), + GRASS_PATH(208, 0, 8604, "Grass Path"), + GRAVEL(13, 0, 7804, "Gravel"), + GRAY_BANNER(425, 8, 12053, "Gray Banner"), + GRAY_BED(355, 7, 15745, "Gray Bed"), + GRAY_CARPET(171, 7, 26991, "Gray Carpet"), + GRAY_CONCRETE(251, 7, 13959, "Gray Concrete"), + GRAY_CONCRETE_POWDER(252, 7, 13031, "Gray Concrete Powder"), + GRAY_DYE(351, 8, 9184, "Gray Dye"), GRAY_GLAZED_TERRACOTTA(242, 0, 6256, "Gray Glazed Terracotta", "GRAY_GLAZED_TERRACOTTA"), GRAY_SHULKER_BOX(226, 0, 12754, "Gray Shulker Box", "GRAY_SHULKER_BOX"), - GRAY_STAINED_GLASS(95, 7, 29979, "Gray Stained Glass", ""), - GRAY_STAINED_GLASS_PANE(160, 7, 25272, "Gray Stained Glass Pane", ""), - GRAY_TERRACOTTA(159, 7, 18004, "Gray Terracotta", ""), - GRAY_WALL_BANNER(117, 8, 24275, "Gray Banner", ""), - GRAY_WOOL(35, 7, 27209, "Gray Wool", ""), - GREEN_BANNER(425, 2, 10698, "Green Banner", ""), - GREEN_BED(355, 13, 13797, "Green Bed", "Green Bed"), - GREEN_CARPET(171, 13, 7780, "Green Carpet", ""), - GREEN_CONCRETE(251, 13, 17949, "Green Concrete", ""), - GREEN_CONCRETE_POWDER(252, 13, 6904, "Green Concrete Powder", ""), + GRAY_STAINED_GLASS(95, 7, 29979, "Gray Stained Glass"), + GRAY_STAINED_GLASS_PANE(160, 7, 25272, "Gray Stained Glass Pane"), + GRAY_TERRACOTTA(159, 7, 18004, "Gray Terracotta"), + GRAY_WALL_BANNER(117, 8, 24275, "Gray Banner"), + GRAY_WOOL(35, 7, 27209, "Gray Wool"), + GREEN_BANNER(425, 2, 10698, "Green Banner"), + GREEN_BED(355, 13, 13797, "Green Bed"), + GREEN_CARPET(171, 13, 7780, "Green Carpet"), + GREEN_CONCRETE(251, 13, 17949, "Green Concrete"), + GREEN_CONCRETE_POWDER(252, 13, 6904, "Green Concrete Powder"), GREEN_GLAZED_TERRACOTTA(248, 0, 6958, "Green Glazed Terracotta", "GREEN_GLAZED_TERRACOTTA"), GREEN_SHULKER_BOX(232, 0, 9377, "Green Shulker Box", "GREEN_SHULKER_BOX"), - GREEN_STAINED_GLASS(95, 13, 22503, "Green Stained Glass", ""), - GREEN_STAINED_GLASS_PANE(160, 13, 4767, "Green Stained Glass Pane", ""), - GREEN_TERRACOTTA(159, 13, 4105, "Green Terracotta", ""), - GREEN_WALL_BANNER(117, 2, 15046, "Green Banner", ""), - GREEN_WOOL(35, 13, 25085, "Green Wool", ""), + GREEN_STAINED_GLASS(95, 13, 22503, "Green Stained Glass"), + GREEN_STAINED_GLASS_PANE(160, 13, 4767, "Green Stained Glass Pane"), + GREEN_TERRACOTTA(159, 13, 4105, "Green Terracotta"), + GREEN_WALL_BANNER(117, 2, 15046, "Green Banner"), + GREEN_WOOL(35, 13, 25085, "Green Wool"), GUARDIAN_SPAWN_EGG(383, 68, 20113, "Spawn Guardian", "Guardian Spawn Egg"), GUNPOWDER(289, 0, 29974, "Gunpowder", "SULPHUR"), HAY_BLOCK(170, 0, 17461, "Hay Bale", "HAY_BLOCK"), - HEART_OF_THE_SEA(-1, -1, 11807, "Heart of the Sea", ""), + HEART_OF_THE_SEA(-1, -1, 11807, "Heart of the Sea"), HEAVY_WEIGHTED_PRESSURE_PLATE(148, 0, 16970, "Heavy Weighted Pressure Plate", "IRON_PLATE"), - HOPPER(154, 0, 31974, "Hopper", "HOPPER"), - HOPPER_MINECART(408, 0, 19024, "Minecart with Hopper", ""), - HORN_CORAL(-1, -1, 19511, "Horn Coral", ""), - HORN_CORAL_BLOCK(-1, -1, 19958, "Horn Coral Block", ""), - HORN_CORAL_FAN(-1, -1, 13610, "Horn Coral Fan", ""), - HORN_CORAL_WALL_FAN(-1, -1, 28883, "Horn Coral Wall Fan", ""), + HOPPER(154, 0, 31974, "Hopper"), + HOPPER_MINECART(408, 0, 19024, "Minecart with Hopper"), + HORN_CORAL(-1, -1, 19511, "Horn Coral"), + HORN_CORAL_BLOCK(-1, -1, 19958, "Horn Coral Block"), + HORN_CORAL_FAN(-1, -1, 13610, "Horn Coral Fan"), + HORN_CORAL_WALL_FAN(-1, -1, 28883, "Horn Coral Wall Fan"), HORSE_SPAWN_EGG(383, 100, 25981, "Spawn Horse", "Horse Spawn Egg"), HUSK_SPAWN_EGG(383, 23, 20178, "Spawn Husk", "Husk Spawn Egg"), ICE(79, 0, 30428, "Ice", "ICE"), INFESTED_CHISELED_STONE_BRICKS(97, 5, 4728, "Infested Chiseled Stone Bricks", "MONSTER_EGGS"), - INFESTED_COBBLESTONE(97, 1, 28798, "Infested Cobblestone", ""), - INFESTED_CRACKED_STONE_BRICKS(97, 4, 7476, "Infested Cracked Stone Bricks", ""), - INFESTED_MOSSY_STONE_BRICKS(97, 3, 9850, "Infested Mossy Stone Bricks", ""), - INFESTED_STONE(97, 0, 18440, "Infested Stone", ""), - INFESTED_STONE_BRICKS(97, 2, 19749, "Infested Stone Bricks", ""), - INK_SAC(351, 0, 7184, "Ink Sack", "Ink Sac"), - IRON_AXE(258, 0, 15894, "Iron Axe", "IRON_AXE"), + INFESTED_COBBLESTONE(97, 1, 28798, "Infested Cobblestone"), + INFESTED_CRACKED_STONE_BRICKS(97, 4, 7476, "Infested Cracked Stone Bricks"), + INFESTED_MOSSY_STONE_BRICKS(97, 3, 9850, "Infested Mossy Stone Bricks"), + INFESTED_STONE(97, 0, 18440, "Infested Stone"), + INFESTED_STONE_BRICKS(97, 2, 19749, "Infested Stone Bricks"), + INK_SAC(351, 0, 7184, "Ink Sac", "Ink Sack"), + IRON_AXE(258, 0, 15894, "Iron Axe"), IRON_BARS(101, 0, 9378, "Iron Bars", "IRON_FENCE"), IRON_BLOCK(42, 0, 24754, "Block of Iron", "IRON_BLOCK"), - IRON_BOOTS(309, 0, 8531, "Iron Boots", ""), - IRON_CHESTPLATE(307, 0, 28112, "Iron Chestplate", ""), - IRON_DOOR(330, 0, 4788, "Iron Door", ""), - IRON_HELMET(306, 0, 12025, "Iron Helmet", ""), - IRON_HOE(292, 0, 11339, "Iron Hoe", "IRON_HOE"), + IRON_BOOTS(309, 0, 8531, "Iron Boots"), + IRON_CHESTPLATE(307, 0, 28112, "Iron Chestplate"), + IRON_DOOR(330, 0, 4788, "Iron Door"), + IRON_HELMET(306, 0, 12025, "Iron Helmet"), + IRON_HOE(292, 0, 11339, "Iron Hoe"), IRON_HORSE_ARMOR(417, 0, 30108, "Iron Horse Armor", "Iron_barding"), - IRON_INGOT(265, 0, 24895, "Iron Ingot", "IRON_INGOT"), - IRON_LEGGINGS(308, 0, 18951, "Iron Leggings", ""), - IRON_NUGGET(452, 0, 13715, "Iron Nugget", ""), + IRON_INGOT(265, 0, 24895, "Iron Ingot"), + IRON_LEGGINGS(308, 0, 18951, "Iron Leggings"), + IRON_NUGGET(452, 0, 13715, "Iron Nugget"), IRON_ORE(15, 0, 19834, "Iron Ore", "IRON_ORE"), - IRON_PICKAXE(257, 0, 8842, "Iron Pickaxe", "IRON_PICKAXE"), + IRON_PICKAXE(257, 0, 8842, "Iron Pickaxe"), IRON_SHOVEL(256, 0, 30045, "Iron Shovel", "IRON_SPADE"), - IRON_SWORD(267, 0, 10904, "Iron Sword", "IRON_SWORD"), + IRON_SWORD(267, 0, 10904, "Iron Sword"), IRON_TRAPDOOR(167, 0, 17095, "Iron Trapdoor", "IRON_TRAPDOOR"), - ITEM_FRAME(389, 0, 27318, "Item Frame", ""), + ITEM_FRAME(389, 0, 27318, "Item Frame"), JACK_O_LANTERN(91, 0, 31612, "Jack o'Lantern", "JACK_O_LANTERN"), JUKEBOX(84, 0, 19264, "Jukebox", "JUKEBOX"), JUNGLE_BOAT(446, 0, 4495, "Jungle Boat", "BOAT_JUNGLE"), - JUNGLE_BUTTON(-1, -1, 25317, "Jungle Button", ""), + JUNGLE_BUTTON(-1, -1, 25317, "Jungle Button"), JUNGLE_DOOR(429, 0, 28163, "Jungle Door", "JUNGLE_DOOR_ITEM"), JUNGLE_FENCE(190, 0, 14358, "Jungle Fence", "JUNGLE_FENCE"), JUNGLE_FENCE_GATE(185, 0, 21360, "Jungle Fence Gate", "JUNGLE_FENCE_GATE"), - JUNGLE_LEAVES(18, 3, 5133, "Jungle Leaves", ""), - JUNGLE_LOG(17, 3, 20721, "Jungle Log", ""), + JUNGLE_LEAVES(18, 3, 5133, "Jungle Leaves"), + JUNGLE_LOG(17, 3, 20721, "Jungle Log"), JUNGLE_PLANKS(5, 3, 26445, "Jungle Wood Plank", "Jungle Planks"), - JUNGLE_PRESSURE_PLATE(-1, -1, 11376, "Jungle Pressure Plate", ""), - JUNGLE_SAPLING(6, 3, 17951, "Jungle Sapling", ""), - JUNGLE_SLAB(43, 0, 19117, "Double Stone Slab", ""), + JUNGLE_PRESSURE_PLATE(-1, -1, 11376, "Jungle Pressure Plate"), + JUNGLE_SAPLING(6, 3, 17951, "Jungle Sapling"), + JUNGLE_SLAB(43, 0, 19117, "Double Stone Slab"), JUNGLE_STAIRS(136, 0, 20636, "Jungle Wood Stairs", "Jungle Stairs"), - JUNGLE_TRAPDOOR(-1, -1, 8626, "Jungle Trapdoor", ""), - JUNGLE_WOOD(-1, -1, 10341, "Jungle Wood", ""), - KELP(-1, -1, 21916, "Kelp", ""), - KELP_PLANT(-1, -1, 29697, "Kelp Plant", ""), - KNOWLEDGE_BOOK(453, 0, 12646, "Knowledge Book", ""), + JUNGLE_TRAPDOOR(-1, -1, 8626, "Jungle Trapdoor"), + JUNGLE_WOOD(-1, -1, 10341, "Jungle Wood"), + KELP(-1, -1, 21916, "Kelp"), + KELP_PLANT(-1, -1, 29697, "Kelp Plant"), + KNOWLEDGE_BOOK(453, 0, 12646, "Knowledge Book"), LADDER(65, 0, 23599, "Ladder", "LADDER"), LAPIS_BLOCK(22, 0, 14485, "Lapis Lazuli Block", "LAPIS_BLOCK"), - LAPIS_LAZULI(351, 4, 11075, "Lapis Lazuli", ""), + LAPIS_LAZULI(351, 4, 11075, "Lapis Lazuli"), LAPIS_ORE(21, 0, 22934, "Lapis Lazuli Ore", "LAPIS_ORE"), LARGE_FERN(175, 3, 30177, "Large Fern", "DOUBLE_PLANT"), - LAVA(10, 0, 8415, "Flowing Lava", "FLOWING_LAVA"), - LAVA_BUCKET(327, 0, 9228, "Lava Bucket", ""), + LAVA(10, 0, 8415, "Flowing Lava"), + LAVA_BUCKET(327, 0, 9228, "Lava Bucket"), LEAD(420, 0, 29539, "Lead", "Leash"), - LEATHER(334, 0, 16414, "Leather", ""), + LEATHER(334, 0, 16414, "Leather"), LEATHER_BOOTS(301, 0, 15282, "Leather Boots", "LEATHER_BOOTS"), LEATHER_CHESTPLATE(299, 0, 29275, "Leather Tunic", "LEATHER_CHESTPLATE"), LEATHER_HELMET(298, 0, 11624, "Leather Cap", "LEATHER_HELMET"), LEATHER_LEGGINGS(300, 0, 28210, "Leather Pants", "LEATHER_LEGGINGS"), LEVER(69, 0, 15319, "Lever", "LEVER"), - LIGHT_BLUE_BANNER(425, 12, 18060, "Light Blue Banner", ""), + LIGHT_BLUE_BANNER(425, 12, 18060, "Light Blue Banner"), LIGHT_BLUE_BED(355, 3, 20957, "Light Blue Bed", "Light Blue Bed"), - LIGHT_BLUE_CARPET(171, 3, 21194, "Light Blue Carpet", ""), - LIGHT_BLUE_CONCRETE(251, 3, 29481, "Light Blue Concrete", ""), - LIGHT_BLUE_CONCRETE_POWDER(252, 3, 31206, "Light Blue Concrete Powder", ""), - LIGHT_BLUE_DYE(351, 12, 28738, "Light Blue Dye", ""), + LIGHT_BLUE_CARPET(171, 3, 21194, "Light Blue Carpet"), + LIGHT_BLUE_CONCRETE(251, 3, 29481, "Light Blue Concrete"), + LIGHT_BLUE_CONCRETE_POWDER(252, 3, 31206, "Light Blue Concrete Powder"), + LIGHT_BLUE_DYE(351, 12, 28738, "Light Blue Dye"), LIGHT_BLUE_GLAZED_TERRACOTTA(238, 0, 4336, "Light Blue Glazed Terracotta", "LIGHT_BLUE_GLAZED_TERRACOTTA"), LIGHT_BLUE_SHULKER_BOX(222, 0, 18226, "Light Blue Shulker Box", "LIGHT_BLUE_SHULKER_BOX"), - LIGHT_BLUE_STAINED_GLASS(95, 3, 17162, "Light Blue Stained Glass", ""), - LIGHT_BLUE_STAINED_GLASS_PANE(160, 3, 18721, "Light Blue Stained Glass Pane", ""), - LIGHT_BLUE_TERRACOTTA(159, 3, 31779, "Light Blue Terracotta", ""), - LIGHT_BLUE_WALL_BANNER(117, 12, 12011, "Light Blue Banner", ""), - LIGHT_BLUE_WOOL(35, 3, 21073, "Light Blue Wool", ""), - LIGHT_GRAY_BANNER(425, 7, 11417, "Light Gray Banner", ""), + LIGHT_BLUE_STAINED_GLASS(95, 3, 17162, "Light Blue Stained Glass"), + LIGHT_BLUE_STAINED_GLASS_PANE(160, 3, 18721, "Light Blue Stained Glass Pane"), + LIGHT_BLUE_TERRACOTTA(159, 3, 31779, "Light Blue Terracotta"), + LIGHT_BLUE_WALL_BANNER(117, 12, 12011, "Light Blue Banner"), + LIGHT_BLUE_WOOL(35, 3, 21073, "Light Blue Wool"), + LIGHT_GRAY_BANNER(425, 7, 11417, "Light Gray Banner"), LIGHT_GRAY_BED(355, 8, 5090, "Light Gray Bed", "Light Gray Bed"), - LIGHT_GRAY_CARPET(171, 8, 11317, "Light Gray Carpet", ""), - LIGHT_GRAY_CONCRETE(251, 8, 14453, "Light Gray Concrete", ""), - LIGHT_GRAY_CONCRETE_POWDER(252, 8, 21589, "Light Gray Concrete Powder", ""), - LIGHT_GRAY_DYE(351, 7, 27643, "Light Gray Dye", ""), + LIGHT_GRAY_CARPET(171, 8, 11317, "Light Gray Carpet"), + LIGHT_GRAY_CONCRETE(251, 8, 14453, "Light Gray Concrete"), + LIGHT_GRAY_CONCRETE_POWDER(252, 8, 21589, "Light Gray Concrete Powder"), + LIGHT_GRAY_DYE(351, 7, 27643, "Light Gray Dye"), LIGHT_GRAY_GLAZED_TERRACOTTA(243, 0, 10707, "Light Gray Glazed Terracotta", "SILVER_GLAZED_TERRACOTTA"), LIGHT_GRAY_SHULKER_BOX(227, 0, 21345, "Light Gray Shulker Box", "SILVER_SHULKER_BOX"), - LIGHT_GRAY_STAINED_GLASS(95, 8, 5843, "Light Gray Stained Glass", ""), - LIGHT_GRAY_STAINED_GLASS_PANE(160, 8, 19008, "Light Gray Stained Glass Pane", ""), - LIGHT_GRAY_TERRACOTTA(159, 8, 26388, "Light Gray Terracotta", ""), - LIGHT_GRAY_WALL_BANNER(117, 7, 31088, "Light Gray Banner", ""), - LIGHT_GRAY_WOOL(35, 8, 22936, "Light Gray Wool", ""), + LIGHT_GRAY_STAINED_GLASS(95, 8, 5843, "Light Gray Stained Glass"), + LIGHT_GRAY_STAINED_GLASS_PANE(160, 8, 19008, "Light Gray Stained Glass Pane"), + LIGHT_GRAY_TERRACOTTA(159, 8, 26388, "Light Gray Terracotta"), + LIGHT_GRAY_WALL_BANNER(117, 7, 31088, "Light Gray Banner"), + LIGHT_GRAY_WOOL(35, 8, 22936, "Light Gray Wool"), LIGHT_WEIGHTED_PRESSURE_PLATE(147, 0, 14875, "Light Weighted Pressure Plate", "GOLD_PLATE"), - LILAC(175, 1, 22837, "Lilac", ""), + LILAC(175, 1, 22837, "Lilac"), LILY_PAD(111, 0, 19271, "Lily Pad", "WATER_LILY"), - LIME_BANNER(425, 10, 18887, "Lime Banner", ""), - LIME_BED(355, 5, 27860, "Lime Bed", "Lime Bed"), - LIME_CARPET(171, 5, 15443, "Lime Carpet", ""), - LIME_CONCRETE(251, 5, 5863, "Lime Concrete", ""), - LIME_CONCRETE_POWDER(252, 5, 28859, "Lime Concrete Powder", ""), - LIME_DYE(351, 10, 6147, "Lime Dye", ""), + LIME_BANNER(425, 10, 18887, "Lime Banner"), + LIME_BED(355, 5, 27860, "Lime Bed"), + LIME_CARPET(171, 5, 15443, "Lime Carpet"), + LIME_CONCRETE(251, 5, 5863, "Lime Concrete"), + LIME_CONCRETE_POWDER(252, 5, 28859, "Lime Concrete Powder"), + LIME_DYE(351, 10, 6147, "Lime Dye"), LIME_GLAZED_TERRACOTTA(240, 0, 13861, "Lime Glazed Terracotta", "LIME_GLAZED_TERRACOTTA"), LIME_SHULKER_BOX(224, 0, 28360, "Lime Shulker Box", "LIME_SHULKER_BOX"), - LIME_STAINED_GLASS(95, 5, 24266, "Lime Stained Glass", ""), - LIME_STAINED_GLASS_PANE(160, 5, 10610, "Lime Stained Glass Pane", ""), - LIME_TERRACOTTA(159, 5, 24013, "Lime Terracotta", ""), - LIME_WALL_BANNER(117, 10, 21422, "Lime Banner", ""), - LIME_WOOL(35, 5, 10443, "Lime Wool", ""), - LINGERING_POTION(441, 0, 25857, "Lingering Potion", ""), + LIME_STAINED_GLASS(95, 5, 24266, "Lime Stained Glass"), + LIME_STAINED_GLASS_PANE(160, 5, 10610, "Lime Stained Glass Pane"), + LIME_TERRACOTTA(159, 5, 24013, "Lime Terracotta"), + LIME_WALL_BANNER(117, 10, 21422, "Lime Banner"), + LIME_WOOL(35, 5, 10443, "Lime Wool"), + LINGERING_POTION(441, 0, 25857, "Lingering Potion"), LLAMA_SPAWN_EGG(383, 103, 23640, "Spawn Llama", "Llama Spawn Egg"), - MAGENTA_BANNER(425, 13, 15591, "Magenta Banner", ""), - MAGENTA_BED(355, 2, 20061, "Magenta Bed", "Magenta Bed"), - MAGENTA_CARPET(171, 2, 6180, "Magenta Carpet", ""), - MAGENTA_CONCRETE(251, 2, 20591, "Magenta Concrete", ""), - MAGENTA_CONCRETE_POWDER(252, 2, 8272, "Magenta Concrete Powder", ""), - MAGENTA_DYE(351, 13, 11788, "Magenta Dye", ""), + MAGENTA_BANNER(425, 13, 15591, "Magenta Banner"), + MAGENTA_BED(355, 2, 20061, "Magenta Bed"), + MAGENTA_CARPET(171, 2, 6180, "Magenta Carpet"), + MAGENTA_CONCRETE(251, 2, 20591, "Magenta Concrete"), + MAGENTA_CONCRETE_POWDER(252, 2, 8272, "Magenta Concrete Powder"), + MAGENTA_DYE(351, 13, 11788, "Magenta Dye"), MAGENTA_GLAZED_TERRACOTTA(237, 0, 8067, "Magenta Glazed Terracotta", "MAGENTA_GLAZED_TERRACOTTA"), MAGENTA_SHULKER_BOX(221, 0, 21566, "Magenta Shulker Box", "MAGENTA_SHULKER_BOX"), - MAGENTA_STAINED_GLASS(95, 2, 26814, "Magenta Stained Glass", ""), - MAGENTA_STAINED_GLASS_PANE(160, 2, 14082, "Magenta Stained Glass Pane", ""), - MAGENTA_TERRACOTTA(159, 2, 25900, "Magenta Terracotta", ""), - MAGENTA_WALL_BANNER(117, 13, 23291, "Magenta Banner", ""), - MAGENTA_WOOL(35, 2, 11853, "Magenta Wool", ""), + MAGENTA_STAINED_GLASS(95, 2, 26814, "Magenta Stained Glass"), + MAGENTA_STAINED_GLASS_PANE(160, 2, 14082, "Magenta Stained Glass Pane"), + MAGENTA_TERRACOTTA(159, 2, 25900, "Magenta Terracotta"), + MAGENTA_WALL_BANNER(117, 13, 23291, "Magenta Banner"), + MAGENTA_WOOL(35, 2, 11853, "Magenta Wool"), MAGMA_BLOCK(213, 0, 25927, "Magma Block", "MAGMA"), - MAGMA_CREAM(378, 0, 25097, "Magma Cream", ""), + MAGMA_CREAM(378, 0, 25097, "Magma Cream"), MAGMA_CUBE_SPAWN_EGG(383, 62, 26638, "Spawn Magma Cube", "Magma Cube Spawn Egg"), MAP(395, 0, 21655, "Empty Map", "EMPTY_MAP"), MELON(103, 0, 25172, "Melon", "Melon_Block"), - MELON_SEEDS(362, 0, 18340, "Melon Seeds", ""), - MELON_SLICE(360, 0, 5347, "Melon Slice", ""), + MELON_SEEDS(362, 0, 18340, "Melon Seeds"), + MELON_SLICE(360, 0, 5347, "Melon Slice"), MELON_STEM(105, 0, 8247, "Melon Stem", "MELON_STEM"), - MILK_BUCKET(335, 0, 9680, "Milk Bucket", ""), - MINECART(328, 0, 14352, "Minecart", ""), + MILK_BUCKET(335, 0, 9680, "Milk Bucket"), + MINECART(328, 0, 14352, "Minecart"), MOOSHROOM_SPAWN_EGG(383, 96, 22125, "Spawn Mushroom Cow", "Mooshroom Spawn Egg"), MOSSY_COBBLESTONE(48, 0, 21900, "Mossy Cobblestone", "MOSSY_COBBLESTONE"), - MOSSY_COBBLESTONE_WALL(139, 1, 11536, "Mossy Cobblestone Wall", ""), - MOSSY_STONE_BRICKS(98, 1, 16415, "Mossy Stone Bricks", ""), - MOVING_PISTON(36, 0, 13831, "Piston Moving Piece", ""), + MOSSY_COBBLESTONE_WALL(139, 1, 11536, "Mossy Cobblestone Wall"), + MOSSY_STONE_BRICKS(98, 1, 16415, "Mossy Stone Bricks"), + MOVING_PISTON(36, 0, 13831, "Piston Moving Piece"), MULE_SPAWN_EGG(383, 32, 11229, "Spawn Mule", "Mule Spawn Egg"), - MUSHROOM_STEM(-1, -1, 16543, "Mushroom Stem", ""), + MUSHROOM_STEM(-1, -1, 16543, "Mushroom Stem"), MUSHROOM_STEW(282, 0, 16336, "Mushroom Stew", "MUSHROOM_SOUP"), MUSIC_DISC_11(2266, 0, 27426, "11 Disc", "RECORD_11"), MUSIC_DISC_13(2256, 0, 16359, "13 Disc", "GOLD_RECORD"), @@ -1146,19 +1146,19 @@ public enum CMIMaterial { MUSIC_DISC_STRAD(2264, 0, 16785, "Strad Disc", "RECORD_9"), MUSIC_DISC_WAIT(2267, 0, 26499, "Wait Disc", "RECORD_12"), MUSIC_DISC_WARD(2265, 0, 24026, "Ward Disc", "RECORD_10"), - MUTTON(423, 0, 4792, "Raw Mutton", ""), + MUTTON(423, 0, 4792, "Raw Mutton"), MYCELIUM(110, 0, 9913, "Mycelium", "MYCEL"), - NAME_TAG(421, 0, 30731, "Name Tag", ""), - NAUTILUS_SHELL(-1, -1, 19989, "Nautilus Shell", ""), + NAME_TAG(421, 0, 30731, "Name Tag"), + NAUTILUS_SHELL(-1, -1, 19989, "Nautilus Shell"), NETHERRACK(87, 0, 23425, "Netherrack", "NETHERRACK"), NETHER_BRICK(405, 0, 19996, "Nether Brick"), NETHER_BRICKS(112, 0, 27802, "Nether Bricks"), NETHER_BRICK_FENCE(113, 0, 5286, "Nether Brick Fence", "NETHER_FENCE"), - NETHER_BRICK_SLAB(44, 6, 26586, "Nether Brick Slab", ""), + NETHER_BRICK_SLAB(44, 6, 26586, "Nether Brick Slab"), NETHER_BRICK_STAIRS(114, 0, 12085, "Nether Brick Stairs", "NETHER_BRICK_STAIRS"), NETHER_PORTAL(90, 0, 19469, "Nether Portal", "PORTAL"), NETHER_QUARTZ_ORE(153, 0, 4807, "Nether Quartz Ore", "QUARTZ_ORE"), - NETHER_STAR(399, 0, 12469, "Nether Star", ""), + NETHER_STAR(399, 0, 12469, "Nether Star"), NETHER_WART(372, 0, 29227, "Nether Wart", "NETHER_STALK"), NETHER_WART_BLOCK(214, 0, 15486, "Nether Wart Block", "NETHER_WART_BLOCK"), NOTE_BLOCK(25, 0, 20979, "Note Block", "NOTE_BLOCK"), @@ -1167,278 +1167,278 @@ public enum CMIMaterial { OAK_DOOR(324, 0, 20341, "Wooden Door", "Wood Door"), OAK_FENCE(85, 0, 6442, "Oak Fence", "FENCE"), OAK_FENCE_GATE(107, 0, 16689, "Oak Fence Gate", "FENCE_GATE"), - OAK_LEAVES(18, 0, 4385, "Oak Leaves", ""), - OAK_LOG(17, 0, 26723, "Oak Log", ""), + OAK_LEAVES(18, 0, 4385, "Oak Leaves"), + OAK_LOG(17, 0, 26723, "Oak Log"), OAK_PLANKS(5, 0, 14905, "Oak Wood Plank", "Oak Planks"), OAK_PRESSURE_PLATE(72, 0, 20108, "Oak Pressure Plate", "Wooden_Presure_Plate"), - OAK_SAPLING(6, 0, 9636, "Oak Sapling", ""), + OAK_SAPLING(6, 0, 9636, "Oak Sapling"), OAK_SLAB(126, 0, 12002, "Oak Slab", "Wood step"), OAK_STAIRS(53, 0, 5449, "Oak Stairs", "WOOD_STAIRS"), OAK_TRAPDOOR(96, 0, 16927, "Oak Trapdoor", "Trapdoor"), - OAK_WOOD(-1, -1, 7378, "Oak Wood", ""), + OAK_WOOD(-1, -1, 7378, "Oak Wood"), OBSERVER(218, 0, 10726, "Observer", "OBSERVER"), OBSIDIAN(49, 0, 32723, "Obsidian", "OBSIDIAN"), OCELOT_SPAWN_EGG(383, 98, 30080, "Spawn Ocelot", "Ocelot Spawn Egg"), - ORANGE_BANNER(425, 14, 4839, "Orange Banner", ""), + ORANGE_BANNER(425, 14, 4839, "Orange Banner"), ORANGE_BED(355, 1, 11194, "Orange Bed", "Orange Bed"), - ORANGE_CARPET(171, 1, 24752, "Orange Carpet", ""), - ORANGE_CONCRETE(251, 1, 19914, "Orange Concrete", ""), - ORANGE_CONCRETE_POWDER(252, 1, 30159, "Orange Concrete Powder", ""), - ORANGE_DYE(351, 14, 13866, "Orange Dye", ""), + ORANGE_CARPET(171, 1, 24752, "Orange Carpet"), + ORANGE_CONCRETE(251, 1, 19914, "Orange Concrete"), + ORANGE_CONCRETE_POWDER(252, 1, 30159, "Orange Concrete Powder"), + ORANGE_DYE(351, 14, 13866, "Orange Dye"), ORANGE_GLAZED_TERRACOTTA(236, 0, 27451, "Orange Glazed Terracotta", "ORANGE_GLAZED_TERRACOTTA"), ORANGE_SHULKER_BOX(220, 0, 21673, "Orange Shulker Box", "ORANGE_SHULKER_BOX"), - ORANGE_STAINED_GLASS(95, 1, 25142, "Orange Stained Glass", ""), - ORANGE_STAINED_GLASS_PANE(160, 1, 21089, "Orange Stained Glass Pane", ""), - ORANGE_TERRACOTTA(159, 1, 18684, "Orange Terracotta", ""), - ORANGE_TULIP(38, 5, 26038, "Orange Tulip", ""), - ORANGE_WALL_BANNER(117, 114, 9936, "Orange Banner", ""), - ORANGE_WOOL(35, 1, 23957, "Orange Wool", ""), - OXEYE_DAISY(38, 8, 11709, "Oxeye Daisy", ""), + ORANGE_STAINED_GLASS(95, 1, 25142, "Orange Stained Glass"), + ORANGE_STAINED_GLASS_PANE(160, 1, 21089, "Orange Stained Glass Pane"), + ORANGE_TERRACOTTA(159, 1, 18684, "Orange Terracotta"), + ORANGE_TULIP(38, 5, 26038, "Orange Tulip"), + ORANGE_WALL_BANNER(117, 114, 9936, "Orange Banner"), + ORANGE_WOOL(35, 1, 23957, "Orange Wool"), + OXEYE_DAISY(38, 8, 11709, "Oxeye Daisy"), PACKED_ICE(174, 0, 28993, "Packed Ice", "PACKED_ICE"), - PAINTING(321, 0, 23945, "Painting", ""), - PAPER(339, 0, 9923, "Paper", ""), + PAINTING(321, 0, 23945, "Painting"), + PAPER(339, 0, 9923, "Paper"), PARROT_SPAWN_EGG(383, 105, 23614, "Spawn Parrot", "Parrot Spawn Egg"), - PEONY(175, 5, 21155, "Peony", ""), - PETRIFIED_OAK_SLAB(-1, -1, 18658, "Petrified Oak Slab", ""), - PHANTOM_MEMBRANE(-1, -1, 18398, "Phantom Membrane", ""), - PHANTOM_SPAWN_EGG(-1, -1, 24648, "Phantom Spawn Egg", ""), + PEONY(175, 5, 21155, "Peony"), + PETRIFIED_OAK_SLAB(-1, -1, 18658, "Petrified Oak Slab"), + PHANTOM_MEMBRANE(-1, -1, 18398, "Phantom Membrane"), + PHANTOM_SPAWN_EGG(-1, -1, 24648, "Phantom Spawn Egg"), PIG_SPAWN_EGG(383, 90, 22584, "Spawn Pig", "Pig Spawn Egg"), - PINK_BANNER(425, 9, 19439, "Pink Banner", ""), + PINK_BANNER(425, 9, 19439, "Pink Banner"), PINK_BED(355, 6, 13795, "Pink Bed", "Pink Bed"), - PINK_CARPET(171, 6, 30186, "Pink Carpet", ""), - PINK_CONCRETE(251, 6, 5227, "Pink Concrete", ""), - PINK_CONCRETE_POWDER(252, 6, 6421, "Pink Concrete Powder", ""), - PINK_DYE(351, 9, 31151, "Pink Dye", ""), + PINK_CARPET(171, 6, 30186, "Pink Carpet"), + PINK_CONCRETE(251, 6, 5227, "Pink Concrete"), + PINK_CONCRETE_POWDER(252, 6, 6421, "Pink Concrete Powder"), + PINK_DYE(351, 9, 31151, "Pink Dye"), PINK_GLAZED_TERRACOTTA(241, 0, 10260, "Pink Glazed Terracotta", "PINK_GLAZED_TERRACOTTA"), PINK_SHULKER_BOX(225, 0, 24968, "Pink Shulker Box", "PINK_SHULKER_BOX"), - PINK_STAINED_GLASS(95, 6, 16164, "Pink Stained Glass", ""), - PINK_STAINED_GLASS_PANE(160, 6, 24637, "Pink Stained Glass Pane", ""), - PINK_TERRACOTTA(159, 6, 23727, "Pink Terracotta", ""), - PINK_TULIP(38, 7, 27319, "Pink Tulip", ""), - PINK_WALL_BANNER(117, 9, 9421, "Pink Banner", ""), - PINK_WOOL(35, 6, 7611, "Pink Wool", ""), + PINK_STAINED_GLASS(95, 6, 16164, "Pink Stained Glass"), + PINK_STAINED_GLASS_PANE(160, 6, 24637, "Pink Stained Glass Pane"), + PINK_TERRACOTTA(159, 6, 23727, "Pink Terracotta"), + PINK_TULIP(38, 7, 27319, "Pink Tulip"), + PINK_WALL_BANNER(117, 9, 9421, "Pink Banner"), + PINK_WOOL(35, 6, 7611, "Pink Wool"), PISTON(33, 0, 21130, "Piston", "PISTON_BASE"), PISTON_HEAD(34, 0, 30226, "Piston Head", "PISTON_EXTENSION"), PLAYER_HEAD(397, 3, 21174, "Mob Head (Human)", "Player Head"), - PLAYER_WALL_HEAD(144, 3, 13164, "Player Wall Head", ""), - PODZOL(3, 2, 24068, "Podzol", ""), - POISONOUS_POTATO(394, 0, 32640, "Poisonous Potato", ""), + PLAYER_WALL_HEAD(144, 3, 13164, "Player Wall Head"), + PODZOL(3, 2, 24068, "Podzol"), + POISONOUS_POTATO(394, 0, 32640, "Poisonous Potato"), POLAR_BEAR_SPAWN_EGG(383, 102, 17015, "Spawn Polar Bear", "Polar Bear Spawn Egg"), - POLISHED_ANDESITE(1, 6, 8335, "Polished Andesite", ""), - POLISHED_DIORITE(1, 4, 31615, "Polished Diorite", ""), - POLISHED_GRANITE(1, 2, 5477, "Polished Granite", ""), - POPPED_CHORUS_FRUIT(433, 0, 27844, "Popped Chorus Fruit", ""), - POPPY(38, 0, 12851, "Poppy", ""), - PORKCHOP(319, 0, 30896, "Raw Porkchop", ""), + POLISHED_ANDESITE(1, 6, 8335, "Polished Andesite"), + POLISHED_DIORITE(1, 4, 31615, "Polished Diorite"), + POLISHED_GRANITE(1, 2, 5477, "Polished Granite"), + POPPED_CHORUS_FRUIT(433, 0, 27844, "Popped Chorus Fruit"), + POPPY(38, 0, 12851, "Poppy"), + PORKCHOP(319, 0, 30896, "Raw Porkchop"), POTATO(392, 0, 21088, "Potato", "Potatoitem"), - POTATOES(142, 0, 10879, "Potatoes", "POTATO"), + POTATOES(142, 0, 10879, "Potatoes"), // Potions - POTION(373, 0, 24020, "Potion", ""), - AWKWARD_POTION(373, 16, 24020, "Potion", ""), - THICK_POTION(373, 32, 24020, "Potion", ""), - MUNDANE_POTION(373, 64, 24020, "Potion", ""), - REGENERATION_POTION(373, 8193, 24020, "Potion", ""), - SWIFTNESS_POTION(373, 8194, 24020, "Potion", ""), - FIRE_RESISTANCE_POTION(373, 8195, 24020, "Potion", ""), - POISON_POTION(373, 8196, 24020, "Potion", ""), - HEALING_POTION(373, 8197, 24020, "Potion", ""), - NIGHT_VISION_POTION(373, 8198, 24020, "Potion", ""), - WEAKNESS_POTION(373, 8200, 24020, "Potion", ""), - STRENGTH_POTION(373, 8201, 24020, "Potion", ""), - SLOWNESS_POTION(373, 8202, 24020, "Potion", ""), - HARMING_POTION(373, 8204, 24020, "Potion", ""), - WATER_BREATHING_POTION(373, 8205, 24020, "Potion", ""), - INVISIBILITY_POTION(373, 8206, 24020, "Potion", ""), - REGENERATION_POTION2(373, 8225, 24020, "Potion", ""), - SWIFTNESS_POTION2(373, 8226, 24020, "Potion", ""), - POISON_POTION2(373, 8228, 24020, "Potion", ""), - HEALING_POTION2(373, 8229, 24020, "Potion", ""), - STRENGTH_POTION2(373, 8233, 24020, "Potion", ""), - LEAPING_POTION2(373, 8235, 24020, "Potion", ""), - HARMING_POTION2(373, 8236, 24020, "Potion", ""), - REGENERATION_POTION3(373, 8257, 24020, "Potion", ""), - SWIFTNESS_POTION3(373, 8258, 24020, "Potion", ""), - FIRE_RESISTANCE_POTION3(373, 8259, 24020, "Potion", ""), - POISON_POTION3(373, 8260, 24020, "Potion", ""), - NIGHT_VISION_POTION2(373, 8262, 24020, "Potion", ""), - WEAKNESS_POTION2(373, 8264, 24020, "Potion", ""), - STRENGTH_POTION3(373, 8265, 24020, "Potion", ""), - SLOWNESS_POTION2(373, 8266, 24020, "Potion", ""), - LEAPING_POTION3(373, 8267, 24020, "Potion", ""), - WATER_BREATHING_POTION2(373, 8269, 24020, "Potion", ""), - INVISIBILITY_POTION2(373, 8270, 24020, "Potion", ""), - REGENERATION_POTION4(373, 8289, 24020, "Potion", ""), - SWIFTNESS_POTION4(373, 8290, 24020, "Potion", ""), - POISON_POTION4(373, 8292, 24020, "Potion", ""), - STRENGTH_POTION4(373, 8297, 24020, "Potion", ""), - - POTTED_ACACIA_SAPLING(-1, -1, 14096, "Potted Acacia Sapling", ""), - POTTED_ALLIUM(-1, -1, 13184, "Potted Allium", ""), - POTTED_AZURE_BLUET(-1, -1, 8754, "Potted Azure Bluet", ""), - POTTED_BIRCH_SAPLING(-1, -1, 32484, "Potted Birch Sapling", ""), - POTTED_BLUE_ORCHID(-1, -1, 6599, "Potted Blue Orchid", ""), - POTTED_BROWN_MUSHROOM(-1, -1, 14481, "Potted Brown Mushroom", ""), - POTTED_CACTUS(-1, -1, 8777, "Potted Cactus", ""), - POTTED_DANDELION(-1, -1, 9727, "Potted Dandelion", ""), - POTTED_DARK_OAK_SAPLING(-1, -1, 6486, "Potted Dark Oak Sapling", ""), - POTTED_DEAD_BUSH(-1, -1, 13020, "Potted Dead Bush", ""), - POTTED_FERN(-1, -1, 23315, "Potted Fern", ""), - POTTED_JUNGLE_SAPLING(-1, -1, 7525, "Potted Jungle Sapling", ""), - POTTED_OAK_SAPLING(-1, -1, 11905, "Potted Oak Sapling", ""), - POTTED_ORANGE_TULIP(-1, -1, 28807, "Potted Orange Tulip", ""), - POTTED_OXEYE_DAISY(-1, -1, 19707, "Potted Oxeye Daisy", ""), - POTTED_PINK_TULIP(-1, -1, 10089, "Potted Pink Tulip", ""), - POTTED_POPPY(-1, -1, 7457, "Potted Poppy", ""), - POTTED_RED_MUSHROOM(-1, -1, 22881, "Potted Red Mushroom", ""), - POTTED_RED_TULIP(-1, -1, 28594, "Potted Red Tulip", ""), - POTTED_SPRUCE_SAPLING(-1, -1, 29498, "Potted Spruce Sapling", ""), - POTTED_WHITE_TULIP(-1, -1, 24330, "Potted White Tulip", ""), + POTION(373, 0, 24020, "Potion"), + AWKWARD_POTION(373, 16, 24020, "Awkard Potion"), + THICK_POTION(373, 32, 24020, "Thick Potion"), + MUNDANE_POTION(373, 64, 24020, "Mundane Potion"), + REGENERATION_POTION(373, 8193, 24020, "Regeneration Potion"), + SWIFTNESS_POTION(373, 8194, 24020, "Swiftness Potion"), + FIRE_RESISTANCE_POTION(373, 8195, 24020, "Fire Resistance Potion"), + POISON_POTION(373, 8196, 24020, "Poison Potion"), + HEALING_POTION(373, 8197, 24020, "Healing Potion"), + NIGHT_VISION_POTION(373, 8198, 24020, "Night Vision Potion"), + WEAKNESS_POTION(373, 8200, 24020, "Weakness Potion"), + STRENGTH_POTION(373, 8201, 24020, "Strenght Potion"), + SLOWNESS_POTION(373, 8202, 24020, "Slowness Potion"), + HARMING_POTION(373, 8204, 24020, "Harming Potion"), + WATER_BREATHING_POTION(373, 8205, 24020, "Water Breathing Potion"), + INVISIBILITY_POTION(373, 8206, 24020, "Invisibility Potion"), + REGENERATION_POTION2(373, 8225, 24020, "Regeneration Potion"), + SWIFTNESS_POTION2(373, 8226, 24020, "Swiftness Potion2"), + POISON_POTION2(373, 8228, 24020, "Poison Potion2"), + HEALING_POTION2(373, 8229, 24020, "Healing Potion2"), + STRENGTH_POTION2(373, 8233, 24020, "Strength Potion2"), + LEAPING_POTION2(373, 8235, 24020, "Leaping Potion2"), + HARMING_POTION2(373, 8236, 24020, "Harming Potion2"), + REGENERATION_POTION3(373, 8257, 24020, "Regeneration Potion3"), + SWIFTNESS_POTION3(373, 8258, 24020, "Swiftness Potion3"), + FIRE_RESISTANCE_POTION3(373, 8259, 24020, "Fire Resistance potion3"), + POISON_POTION3(373, 8260, 24020, "Poison Potion3"), + NIGHT_VISION_POTION2(373, 8262, 24020, "Night Vision Potion2"), + WEAKNESS_POTION2(373, 8264, 24020, "Weakness Potion2"), + STRENGTH_POTION3(373, 8265, 24020, "Strength Potion3"), + SLOWNESS_POTION2(373, 8266, 24020, "Slowness Potion2"), + LEAPING_POTION3(373, 8267, 24020, "Leaping Potion3"), + WATER_BREATHING_POTION2(373, 8269, 24020, "Water Breathing Potion2"), + INVISIBILITY_POTION2(373, 8270, 24020, "Invisibility Potion2"), + REGENERATION_POTION4(373, 8289, 24020, "Regeneration Potion4"), + SWIFTNESS_POTION4(373, 8290, 24020, "Swiftness Potion4"), + POISON_POTION4(373, 8292, 24020, "Poison Potion4"), + STRENGTH_POTION4(373, 8297, 24020, "Strength Potion4"), + + POTTED_ACACIA_SAPLING(-1, -1, 14096, "Potted Acacia Sapling"), + POTTED_ALLIUM(-1, -1, 13184, "Potted Allium"), + POTTED_AZURE_BLUET(-1, -1, 8754, "Potted Azure Bluet"), + POTTED_BIRCH_SAPLING(-1, -1, 32484, "Potted Birch Sapling"), + POTTED_BLUE_ORCHID(-1, -1, 6599, "Potted Blue Orchid"), + POTTED_BROWN_MUSHROOM(-1, -1, 14481, "Potted Brown Mushroom"), + POTTED_CACTUS(-1, -1, 8777, "Potted Cactus"), + POTTED_DANDELION(-1, -1, 9727, "Potted Dandelion"), + POTTED_DARK_OAK_SAPLING(-1, -1, 6486, "Potted Dark Oak Sapling"), + POTTED_DEAD_BUSH(-1, -1, 13020, "Potted Dead Bush"), + POTTED_FERN(-1, -1, 23315, "Potted Fern"), + POTTED_JUNGLE_SAPLING(-1, -1, 7525, "Potted Jungle Sapling"), + POTTED_OAK_SAPLING(-1, -1, 11905, "Potted Oak Sapling"), + POTTED_ORANGE_TULIP(-1, -1, 28807, "Potted Orange Tulip"), + POTTED_OXEYE_DAISY(-1, -1, 19707, "Potted Oxeye Daisy"), + POTTED_PINK_TULIP(-1, -1, 10089, "Potted Pink Tulip"), + POTTED_POPPY(-1, -1, 7457, "Potted Poppy"), + POTTED_RED_MUSHROOM(-1, -1, 22881, "Potted Red Mushroom"), + POTTED_RED_TULIP(-1, -1, 28594, "Potted Red Tulip"), + POTTED_SPRUCE_SAPLING(-1, -1, 29498, "Potted Spruce Sapling"), + POTTED_WHITE_TULIP(-1, -1, 24330, "Potted White Tulip"), POWERED_RAIL(27, 0, 11064, "Powered Rail", "POWERED_RAIL"), - PRISMARINE(168, 0, 7539, "Prismarine", ""), - PRISMARINE_BRICKS(168, 1, 29118, "Prismarine Bricks", ""), - PRISMARINE_BRICK_SLAB(-1, -1, 26672, "Prismarine Brick Slab", ""), - PRISMARINE_BRICK_STAIRS(-1, -1, 15445, "Prismarine Brick Stairs", ""), - PRISMARINE_CRYSTALS(410, 0, 31546, "Prismarine Crystals", ""), - PRISMARINE_SHARD(409, 0, 10993, "Prismarine Shard", ""), - PRISMARINE_SLAB(-1, -1, 31323, "Prismarine Slab", ""), - PRISMARINE_STAIRS(-1, -1, 19217, "Prismarine Stairs", ""), - PUFFERFISH(349, 3, 8115, "Pufferfish", ""), - PUFFERFISH_BUCKET(-1, -1, 8861, "Bucket of Pufferfish", ""), - PUFFERFISH_SPAWN_EGG(-1, -1, 24573, "Pufferfish Spawn Egg", ""), + PRISMARINE(168, 0, 7539, "Prismarine"), + PRISMARINE_BRICKS(168, 1, 29118, "Prismarine Bricks"), + PRISMARINE_BRICK_SLAB(-1, -1, 26672, "Prismarine Brick Slab"), + PRISMARINE_BRICK_STAIRS(-1, -1, 15445, "Prismarine Brick Stairs"), + PRISMARINE_CRYSTALS(410, 0, 31546, "Prismarine Crystals"), + PRISMARINE_SHARD(409, 0, 10993, "Prismarine Shard"), + PRISMARINE_SLAB(-1, -1, 31323, "Prismarine Slab"), + PRISMARINE_STAIRS(-1, -1, 19217, "Prismarine Stairs"), + PUFFERFISH(349, 3, 8115, "Pufferfish"), + PUFFERFISH_BUCKET(-1, -1, 8861, "Bucket of Pufferfish"), + PUFFERFISH_SPAWN_EGG(-1, -1, 24573, "Pufferfish Spawn Egg"), PUMPKIN(86, 0, 19170, "Pumpkin", "PUMPKIN"), - PUMPKIN_PIE(400, 0, 28725, "Pumpkin Pie", ""), - PUMPKIN_SEEDS(361, 0, 28985, "Pumpkin Seeds", ""), + PUMPKIN_PIE(400, 0, 28725, "Pumpkin Pie"), + PUMPKIN_SEEDS(361, 0, 28985, "Pumpkin Seeds"), PUMPKIN_STEM(104, 0, 19021, "Pumpkin Stem", "PUMPKIN_STEM"), - PURPLE_BANNER(425, 5, 29027, "Purple Banner", ""), + PURPLE_BANNER(425, 5, 29027, "Purple Banner"), PURPLE_BED(355, 10, 29755, "Purple Bed", "Purple Bed"), - PURPLE_CARPET(171, 10, 5574, "Purple Carpet", ""), - PURPLE_CONCRETE(251, 10, 20623, "Purple Concrete", ""), - PURPLE_CONCRETE_POWDER(252, 10, 26808, "Purple Concrete Powder", ""), - PURPLE_DYE(351, 5, 6347, "Purple Dye", ""), - PURPLE_GLAZED_TERRACOTTA(245, 0, 4818, "Purple Glazed Terracotta", ""), + PURPLE_CARPET(171, 10, 5574, "Purple Carpet"), + PURPLE_CONCRETE(251, 10, 20623, "Purple Concrete"), + PURPLE_CONCRETE_POWDER(252, 10, 26808, "Purple Concrete Powder"), + PURPLE_DYE(351, 5, 6347, "Purple Dye"), + PURPLE_GLAZED_TERRACOTTA(245, 0, 4818, "Purple Glazed Terracotta"), PURPLE_SHULKER_BOX(229, 0, 10373, "Purple Shulker Box", "PURPLE_SHULKER_BOX"), - PURPLE_STAINED_GLASS(95, 10, 21845, "Purple Stained Glass", ""), - PURPLE_STAINED_GLASS_PANE(160, 10, 10948, "Purple Stained Glass Pane", ""), - PURPLE_TERRACOTTA(159, 10, 10387, "Purple Terracotta", ""), - PURPLE_WALL_BANNER(117, 5, 14298, "Purple Banner", ""), - PURPLE_WOOL(35, 10, 11922, "Purple Wool", ""), + PURPLE_STAINED_GLASS(95, 10, 21845, "Purple Stained Glass"), + PURPLE_STAINED_GLASS_PANE(160, 10, 10948, "Purple Stained Glass Pane"), + PURPLE_TERRACOTTA(159, 10, 10387, "Purple Terracotta"), + PURPLE_WALL_BANNER(117, 5, 14298, "Purple Banner"), + PURPLE_WOOL(35, 10, 11922, "Purple Wool"), PURPUR_BLOCK(201, 0, 7538, "Purpur Block", "PURPUR_BLOCK"), PURPUR_PILLAR(202, 0, 26718, "Purpur Pillar", "PURPUR_PILLAR"), PURPUR_SLAB(205, 0, 11487, "Purpur Slab", "PURPUR_SLAB"), PURPUR_STAIRS(203, 0, 8921, "Purpur Stairs", "PURPUR_STAIRS"), - QUARTZ(406, 0, 23608, "Nether Quartz", ""), - QUARTZ_BLOCK(155, 0, 11987, "Block of Quartz", ""), - QUARTZ_PILLAR(155, 2, 16452, "Quartz Pillar", ""), - QUARTZ_SLAB(44, 7, 4423, "Quartz Slab", ""), + QUARTZ(406, 0, 23608, "Nether Quartz"), + QUARTZ_BLOCK(155, 0, 11987, "Block of Quartz"), + QUARTZ_PILLAR(155, 2, 16452, "Quartz Pillar"), + QUARTZ_SLAB(44, 7, 4423, "Quartz Slab"), QUARTZ_STAIRS(156, 0, 24079, "Quartz Stairs", "QUARTZ_STAIRS"), - RABBIT(411, 0, 23068, "Raw Rabbit", ""), - RABBIT_FOOT(414, 0, 13864, "Rabbit's Foot", ""), - RABBIT_HIDE(415, 0, 12467, "Rabbit Hide", ""), + RABBIT(411, 0, 23068, "Raw Rabbit"), + RABBIT_FOOT(414, 0, 13864, "Rabbit's Foot"), + RABBIT_HIDE(415, 0, 12467, "Rabbit Hide"), RABBIT_SPAWN_EGG(383, 101, 26496, "Spawn Rabbit", "Rabbit Spawn Egg"), - RABBIT_STEW(413, 0, 10611, "Rabbit Stew", ""), + RABBIT_STEW(413, 0, 10611, "Rabbit Stew"), RAIL(66, 0, 13285, "Rail", "RAILS"), REDSTONE(331, 0, 11233, "Redstone", "Redstone Dust"), REDSTONE_BLOCK(152, 0, 19496, "Block of Redstone", "REDSTONE_BLOCK"), REDSTONE_LAMP(123, 0, 8217, "Redstone Lamp", "REDSTONE_LAMP_OFF"), REDSTONE_ORE(73, 0, 10887, "Redstone Ore"), REDSTONE_TORCH(76, 0, 22547, "Redstone Torch(on)", "REDSTONE_TORCH_ON"), - REDSTONE_WALL_TORCH(76, 0, 7595, "Redstone Wall Torch", ""), + REDSTONE_WALL_TORCH(76, 0, 7595, "Redstone Wall Torch"), REDSTONE_WIRE(55, 0, 25984, "Redstone Dust", "REDSTONE_WIRE"), - RED_BANNER(425, 1, 26961, "Red Banner", ""), + RED_BANNER(425, 1, 26961, "Red Banner"), RED_BED(355, 14, 30910, "Red Bed", "Red Bed"), - RED_CARPET(171, 14, 5424, "Red Carpet", ""), - RED_CONCRETE(251, 14, 8032, "Red Concrete", ""), - RED_CONCRETE_POWDER(252, 14, 13286, "Red Concrete Powder", ""), + RED_CARPET(171, 14, 5424, "Red Carpet"), + RED_CONCRETE(251, 14, 8032, "Red Concrete"), + RED_CONCRETE_POWDER(252, 14, 13286, "Red Concrete Powder"), RED_GLAZED_TERRACOTTA(249, 0, 24989, "Red Glazed Terracotta", "RED_GLAZED_TERRACOTTA"), RED_MUSHROOM(40, 0, 19728, "Red Mushroom", "RED_MUSHROOM"), RED_MUSHROOM_BLOCK(100, 0, 20766, "Red Mushroom Block", "HUGE_MUSHROOM_2"), RED_NETHER_BRICKS(215, 0, 18056, "Red Nether Bricks", "RED_NETHER_BRICK"), RED_SAND(12, 1, 16279, "Red Sand", "SAND"), - RED_SANDSTONE(179, 0, 9092, "Red Sandstone", ""), + RED_SANDSTONE(179, 0, 9092, "Red Sandstone"), RED_SANDSTONE_SLAB(182, 0, 17550, "Red Sandstone Slab", "STONE_SLAB2"), RED_SANDSTONE_STAIRS(180, 0, 25466, "Red Sandstone Stairs", "RED_SANDSTONE_STAIRS"), RED_SHULKER_BOX(233, 0, 32448, "Red Shulker Box", "RED_SHULKER_BOX"), - RED_STAINED_GLASS(95, 14, 9717, "Red Stained Glass", ""), - RED_STAINED_GLASS_PANE(160, 14, 8630, "Red Stained Glass Pane", ""), - RED_TERRACOTTA(159, 14, 5086, "Red Terracotta", ""), - RED_TULIP(38, 4, 16781, "Red Tulip", ""), - RED_WALL_BANNER(117, 1, 4378, "Red Banner", ""), - RED_WOOL(35, 14, 11621, "Red Wool", ""), + RED_STAINED_GLASS(95, 14, 9717, "Red Stained Glass"), + RED_STAINED_GLASS_PANE(160, 14, 8630, "Red Stained Glass Pane"), + RED_TERRACOTTA(159, 14, 5086, "Red Terracotta"), + RED_TULIP(38, 4, 16781, "Red Tulip"), + RED_WALL_BANNER(117, 1, 4378, "Red Banner"), + RED_WOOL(35, 14, 11621, "Red Wool"), REPEATER(356, 0, 28823, "Redstone Repeater", "Diode"), - REPEATING_COMMAND_BLOCK(-1, -1, 12405, "Repeating Command Block", ""), - ROSE_BUSH(175, 4, 6080, "Rose Bush", ""), - ROSE_RED(351, 1, 15694, "Rose Red", ""), - ROTTEN_FLESH(367, 0, 21591, "Rotten Flesh", ""), - SADDLE(329, 0, 30206, "Saddle", ""), - SALMON(349, 1, 18516, "Raw Salmon", ""), - SALMON_BUCKET(-1, -1, 31427, "Bucket of Salmon", ""), - SALMON_SPAWN_EGG(-1, -1, 18739, "Salmon Spawn Egg", ""), - SAND(12, 0, 11542, "Sand", ""), - SANDSTONE(24, 0, 13141, "Sandstone", ""), - SANDSTONE_SLAB(44, 1, 29830, "Sandstone Slab", ""), - SANDSTONE_STAIRS(128, 0, 18474, "Sandstone Stairs", ""), - SCUTE(-1, -1, 11914, "Scute", ""), - SEAGRASS(-1, -1, 23942, "Seagrass", ""), + REPEATING_COMMAND_BLOCK(-1, -1, 12405, "Repeating Command Block"), + ROSE_BUSH(175, 4, 6080, "Rose Bush"), + ROSE_RED(351, 1, 15694, "Rose Red"), + ROTTEN_FLESH(367, 0, 21591, "Rotten Flesh"), + SADDLE(329, 0, 30206, "Saddle"), + SALMON(349, 1, 18516, "Raw Salmon"), + SALMON_BUCKET(-1, -1, 31427, "Bucket of Salmon"), + SALMON_SPAWN_EGG(-1, -1, 18739, "Salmon Spawn Egg"), + SAND(12, 0, 11542, "Sand"), + SANDSTONE(24, 0, 13141, "Sandstone"), + SANDSTONE_SLAB(44, 1, 29830, "Sandstone Slab"), + SANDSTONE_STAIRS(128, 0, 18474, "Sandstone Stairs"), + SCUTE(-1, -1, 11914, "Scute"), + SEAGRASS(-1, -1, 23942, "Seagrass"), SEA_LANTERN(169, 0, 16984, "Sea Lantern", "SEA_LANTERN"), - SEA_PICKLE(-1, -1, 19562, "Sea Pickle", ""), - SHEARS(359, 0, 27971, "Shears", ""), + SEA_PICKLE(-1, -1, 19562, "Sea Pickle"), + SHEARS(359, 0, 27971, "Shears"), SHEEP_SPAWN_EGG(383, 91, 24488, "Spawn Sheep", "Sheep Spawn Egg"), - SHIELD(442, 0, 29943, "Shield", ""), - SHULKER_BOX(229, 0, 7776, "Shulker Box", ""), + SHIELD(442, 0, 29943, "Shield"), + SHULKER_BOX(229, 0, 7776, "Shulker Box"), SHULKER_SHELL(450, 0, 27848, "Shulker Shell", "SHULKER_SHELL"), SHULKER_SPAWN_EGG(383, 69, 31848, "Spawn Shulker", "Shulker Spawn Egg"), - SIGN(323, 0, 16918, "Sign", ""), + SIGN(323, 0, 16918, "Sign"), SILVERFISH_SPAWN_EGG(383, 60, 14537, "Spawn Silverfish", "Silverfish Spawn Egg"), SKELETON_HORSE_SPAWN_EGG(383, 28, 21356, "Spawn Skeleton Horse", "Skeleton Horse Spawn Egg"), SKELETON_SKULL(397, 0, 13270, "Mob Head (Skeleton)", "Skeleton Skull"), SKELETON_SPAWN_EGG(383, 51, 15261, "Spawn Skeleton", "Skeleton Spawn Egg"), - SKELETON_WALL_SKULL(144, 0, 31650, "Skeleton Wall Skull", ""), - SLIME_BALL(341, 0, 5242, "Slimeball", ""), + SKELETON_WALL_SKULL(144, 0, 31650, "Skeleton Wall Skull"), + SLIME_BALL(341, 0, 5242, "Slimeball"), SLIME_BLOCK(165, 0, 31892, "Slime Block", "SLIME_BLOCK"), SLIME_SPAWN_EGG(383, 55, 6550, "Spawn Slime", "Slime Spawn Egg"), - SMOOTH_QUARTZ(-1, -1, 14415, "Smooth Quartz", ""), - SMOOTH_RED_SANDSTONE(179, 2, 25180, "Smooth Red Sandstone", ""), - SMOOTH_SANDSTONE(24, 2, 30039, "Smooth Sandstone", ""), - SMOOTH_STONE(-1, -1, 21910, "Smooth Stone", ""), - SNOW(78, 0, 14146, "Snow", "SNOW"), - SNOWBALL(332, 0, 19487, "Snowball", ""), + SMOOTH_QUARTZ(-1, -1, 14415, "Smooth Quartz"), + SMOOTH_RED_SANDSTONE(179, 2, 25180, "Smooth Red Sandstone"), + SMOOTH_SANDSTONE(24, 2, 30039, "Smooth Sandstone"), + SMOOTH_STONE(-1, -1, 21910, "Smooth Stone"), + SNOW(78, 0, 14146, "Snow"), + SNOWBALL(332, 0, 19487, "Snowball"), SNOW_BLOCK(80, 0, 19913, "Snow Block", "SNOW_BLOCK"), SOUL_SAND(88, 0, 16841, "Soul Sand", "SOUL_SAND"), SPAWNER(52, 90, 7018, "Spawner", "MOB_SPAWNER"), - SPECTRAL_ARROW(439, 0, 4568, "Spectral Arrow", ""), - SPIDER_EYE(375, 0, 9318, "Spider Eye", ""), + SPECTRAL_ARROW(439, 0, 4568, "Spectral Arrow"), + SPIDER_EYE(375, 0, 9318, "Spider Eye"), SPIDER_SPAWN_EGG(383, 52, 14984, "Spawn Spider", "Spider Spawn Egg"), SPLASH_POTION(438, 0, 30248, "Splash Potion", "SPLASH_POTION"), SPONGE(19, 0, 15860, "Sponge", "SPONGE"), SPRUCE_BOAT(444, 0, 9606, "Spruce Boat", "BOAT_SPRUCE"), - SPRUCE_BUTTON(-1, -1, 23281, "Spruce Button", ""), + SPRUCE_BUTTON(-1, -1, 23281, "Spruce Button"), SPRUCE_DOOR(427, 0, 10642, "Spruce Door", "SPRUCE_DOOR_ITEM"), SPRUCE_FENCE(188, 0, 25416, "Spruce Fence", "SPRUCE_FENCE"), SPRUCE_FENCE_GATE(183, 0, 26423, "Spruce Fence Gate", "SPRUCE_FENCE_GATE"), - SPRUCE_LEAVES(18, 1, 20039, "Spruce Leaves", ""), - SPRUCE_LOG(17, 1, 9726, "Spruce Log", ""), + SPRUCE_LEAVES(18, 1, 20039, "Spruce Leaves"), + SPRUCE_LOG(17, 1, 9726, "Spruce Log"), SPRUCE_PLANKS(5, 1, 14593, "Spruce Wood Plank", "Spruce Planks"), - SPRUCE_PRESSURE_PLATE(-1, -1, 15932, "Spruce Pressure Plate", ""), - SPRUCE_SAPLING(6, 1, 19874, "Spruce Sapling", ""), - SPRUCE_SLAB(126, 1, 4348, "Spruce Slab", ""), + SPRUCE_PRESSURE_PLATE(-1, -1, 15932, "Spruce Pressure Plate"), + SPRUCE_SAPLING(6, 1, 19874, "Spruce Sapling"), + SPRUCE_SLAB(126, 1, 4348, "Spruce Slab"), SPRUCE_STAIRS(134, 0, 11192, "Spruce Wood Stairs", "Spruce Stairs"), - SPRUCE_TRAPDOOR(-1, -1, 10289, "Spruce Trapdoor", ""), - SPRUCE_WOOD(-1, -1, 32328, "Spruce Wood", ""), + SPRUCE_TRAPDOOR(-1, -1, 10289, "Spruce Trapdoor"), + SPRUCE_WOOD(-1, -1, 32328, "Spruce Wood"), SQUID_SPAWN_EGG(383, 94, 10682, "Spawn Squid", "Squid Spawn Egg"), STICK(280, 0, 9773, "Stick"), STICKY_PISTON(29, 0, 18127, "Sticky Piston", "PISTON_STICKY_BASE"), - STONE(1, 0, 22948, "Stone", ""), + STONE(1, 0, 22948, "Stone"), STONE_AXE(275, 0, 6338, "Stone Axe", "STONE_AXE"), - STONE_BRICKS(98, 0, 6962, "Stone Bricks", ""), - STONE_BRICK_SLAB(44, 5, 19676, "Stone Brick Slab", ""), + STONE_BRICKS(98, 0, 6962, "Stone Bricks"), + STONE_BRICK_SLAB(44, 5, 19676, "Stone Brick Slab"), STONE_BRICK_STAIRS(109, 0, 27032, "Stone Brick Stairs", "SMOOTH_STAIRS"), STONE_BUTTON(77, 0, 12279, "Stone Button", "STONE_BUTTON"), STONE_HOE(291, 0, 22855, "Stone Hoe", "STONE_HOE"), STONE_PICKAXE(274, 0, 14611, "Stone Pickaxe", "STONE_PICKAXE"), STONE_PRESSURE_PLATE(70, 0, 22591, "Stone Pressure Plate", "STONE_PLATE"), STONE_SHOVEL(273, 0, 9520, "Stone Shovel", "STONE_SPADE"), - STONE_SLAB(44, 0, 19838, "Stone Slab", ""), + STONE_SLAB(44, 0, 19838, "Stone Slab"), STONE_SWORD(272, 0, 25084, "Stone Sword", "STONE_SWORD"), STRAY_SPAWN_EGG(383, 6, 30153, "Spawn Stray", "Stray Spawn Egg"), STRING(287, 0, 12806, "String", "STRING"), @@ -1456,115 +1456,116 @@ public enum CMIMaterial { STRIPPED_SPRUCE_WOOD(-1, -1, 6467, "Stripped Spruce Wood"), STRUCTURE_BLOCK(255, 0, 26831, "Structure Block", "STRUCTURE_BLOCK"), STRUCTURE_VOID(217, 0, 30806, "Structure Void", "STRUCTURE_VOID"), - SUGAR(353, 0, 30638, "Sugar", ""), + SUGAR(353, 0, 30638, "Sugar"), SUGAR_CANE(338, 0, 7726, "Sugar Canes", "Sugar Cane"), - SUNFLOWER(175, 0, 7408, "Sunflower", ""), - TALL_GRASS(31, 0, 21559, "Tall Grass", ""), - TALL_SEAGRASS(-1, -1, 27189, "Tall Seagrass", ""), + SUNFLOWER(175, 0, 7408, "Sunflower"), + TALL_GRASS(31, 0, 21559, "Tall Grass"), + TALL_SEAGRASS(-1, -1, 27189, "Tall Seagrass"), TERRACOTTA(172, 0, 16544, "Terracotta", "HARD_CLAY"), - TIPPED_ARROW(440, 0, 25164, "Tipped Arrow", ""), + TIPPED_ARROW(440, 0, 25164, "Tipped Arrow"), TNT(46, 0, 7896, "TNT", "TNT"), TNT_MINECART(407, 0, 4277, "Minecart with TNT", "explosiveminecart"), TORCH(50, 0, 6063, "Torch", "TORCH"), - TOTEM_OF_UNDYING(449, 0, 10139, "Totem Of Undying", ""), + TOTEM_OF_UNDYING(449, 0, 10139, "Totem Of Undying"), TRAPPED_CHEST(146, 0, 18970, "Trapped Chest", "TRAPPED_CHEST"), - TRIDENT(-1, -1, 7534, "Trident", ""), - TRIPWIRE(132, 0, 8810, "Tripwire", ""), - TRIPWIRE_HOOK(131, 0, 8130, "Tripwire Hook", ""), - TROPICAL_FISH(349, 2, 24879, "Tropical Fish", ""), - TROPICAL_FISH_BUCKET(-1, -1, 29995, "Bucket of Tropical Fish", ""), - TROPICAL_FISH_SPAWN_EGG(-1, -1, 19713, "Tropical Fish Spawn Egg", ""), - TUBE_CORAL(-1, -1, 23048, "Tube Coral", ""), - TUBE_CORAL_BLOCK(-1, -1, 23723, "Tube Coral Block", ""), - TUBE_CORAL_FAN(-1, -1, 19929, "Tube Coral Fan", ""), - TUBE_CORAL_WALL_FAN(-1, -1, 25282, "Tube Coral Wall Fan", ""), - TURTLE_EGG(-1, -1, 32101, "Turtle Egg", ""), - TURTLE_HELMET(-1, -1, 30120, "Turtle Shell", ""), - TURTLE_SPAWN_EGG(-1, -1, 17324, "Turtle Spawn Egg", ""), + TRIDENT(-1, -1, 7534, "Trident"), + TRIPWIRE(132, 0, 8810, "Tripwire"), + TRIPWIRE_HOOK(131, 0, 8130, "Tripwire Hook"), + TROPICAL_FISH(349, 2, 24879, "Tropical Fish"), + TROPICAL_FISH_BUCKET(-1, -1, 29995, "Bucket of Tropical Fish"), + TROPICAL_FISH_SPAWN_EGG(-1, -1, 19713, "Tropical Fish Spawn Egg"), + TUBE_CORAL(-1, -1, 23048, "Tube Coral"), + TUBE_CORAL_BLOCK(-1, -1, 23723, "Tube Coral Block"), + TUBE_CORAL_FAN(-1, -1, 19929, "Tube Coral Fan"), + TUBE_CORAL_WALL_FAN(-1, -1, 25282, "Tube Coral Wall Fan"), + TURTLE_EGG(-1, -1, 32101, "Turtle Egg"), + TURTLE_HELMET(-1, -1, 30120, "Turtle Shell"), + TURTLE_SPAWN_EGG(-1, -1, 17324, "Turtle Spawn Egg"), VEX_SPAWN_EGG(383, 35, 27751, "Spawn Vex", "Vex Spawn Egg"), VILLAGER_SPAWN_EGG(383, 120, 30348, "Spawn Villager", "Villager Spawn Egg"), VINDICATOR_SPAWN_EGG(383, 36, 25324, "Spawn Vindicator", "Vindicator Spawn Egg"), VINE(106, 0, 14564, "Vines", "VINE"), - VOID_AIR(-1, -1, 13668, "Void Air", ""), + VOID_AIR(-1, -1, 13668, "Void Air"), WALL_SIGN(68, 0, 10644, "Wall Sign", "WALL_SIGN"), - WALL_TORCH(50, 0, 25890, "Wall Torch", ""), + WALL_TORCH(50, 0, 25890, "Wall Torch"), WATER(8, 0, 24998, "Flowing Water", "FLOWING_WATER"), - WATER_BUCKET(326, 0, 8802, "Water Bucket", ""), - WET_SPONGE(19, 1, 9043, "Wet Sponge", ""), - WHEAT(296, 0, 27709, "Wheat", ""), + WATER_BUCKET(326, 0, 8802, "Water Bucket"), + WET_SPONGE(19, 1, 9043, "Wet Sponge"), + WHEAT(296, 0, 27709, "Wheat"), WHEAT_SEEDS(295, 0, 28742, "Wheat Seeds", "SEEDS"), - WHITE_BANNER(425, 15, 17562, "White Banner", ""), + WHITE_BANNER(425, 15, 17562, "White Banner"), WHITE_BED(355, 0, 8185, "White Bed", "Bed"), - WHITE_CARPET(171, 0, 15117, "White Carpet", ""), - WHITE_CONCRETE(251, 0, 6281, "White Concrete", ""), - WHITE_CONCRETE_POWDER(252, 0, 10363, "White Concrete Powder", ""), + WHITE_CARPET(171, 0, 15117, "White Carpet"), + WHITE_CONCRETE(251, 0, 6281, "White Concrete"), + WHITE_CONCRETE_POWDER(252, 0, 10363, "White Concrete Powder"), WHITE_GLAZED_TERRACOTTA(235, 0, 11326, "White Glazed Terracotta", "WHITE_GLAZED_TERRACOTTA"), WHITE_SHULKER_BOX(219, 0, 31750, "White Shulker Box", "WHITE_SHULKER_BOX"), - WHITE_STAINED_GLASS(95, 0, 31190, "White Stained Glass", ""), - WHITE_STAINED_GLASS_PANE(160, 0, 10557, "White Stained Glass Pane", ""), - WHITE_TERRACOTTA(159, 0, 20975, "White Terracotta", ""), - WHITE_TULIP(38, 6, 9742, "White Tulip", ""), - WHITE_WALL_BANNER(425, 15, 15967, "White Banner", ""), + WHITE_STAINED_GLASS(95, 0, 31190, "White Stained Glass"), + WHITE_STAINED_GLASS_PANE(160, 0, 10557, "White Stained Glass Pane"), + WHITE_TERRACOTTA(159, 0, 20975, "White Terracotta"), + WHITE_TULIP(38, 6, 9742, "White Tulip"), + WHITE_WALL_BANNER(425, 15, 15967, "White Banner"), WHITE_WOOL(35, 0, 8624, "White Wool", "Wool"), WITCH_SPAWN_EGG(383, 66, 11837, "Spawn Witch", "Witch Spawn Egg"), WITHER_SKELETON_SKULL(397, 1, 31487, "Mob Head (Wither Skeleton)", "Wither Skeleton Skull"), WITHER_SKELETON_SPAWN_EGG(383, 5, 10073, "Spawn Wither Skeleton", "Wither Skeleton Spawn Egg"), - WITHER_SKELETON_WALL_SKULL(144, 1, 9326, "Wither Skeleton Wall Skull", ""), + WITHER_SKELETON_WALL_SKULL(144, 1, 9326, "Wither Skeleton Wall Skull"), WOLF_SPAWN_EGG(383, 95, 21692, "Spawn Wolf", "Wolf Spawn Egg"), WOODEN_AXE(271, 0, 6292, "Wooden Axe", "Wood Axe"), WOODEN_HOE(290, 0, 16043, "Wooden Hoe", "Wood Hoe"), WOODEN_PICKAXE(270, 0, 12792, "Wooden Pickaxe", "WOOD_PICKAXE"), WOODEN_SHOVEL(269, 0, 28432, "Wooden Shovel", "WOOD_SPADE"), WOODEN_SWORD(268, 0, 7175, "Wooden Sword", "WOOD_SWORD"), - WRITABLE_BOOK(386, 0, 13393, "Book and Quill", ""), - WRITTEN_BOOK(387, 0, 24164, "Written Book", ""), - YELLOW_BANNER(425, 11, 30382, "Yellow Banner", ""), + WRITABLE_BOOK(386, 0, 13393, "Book and Quill"), + WRITTEN_BOOK(387, 0, 24164, "Written Book"), + YELLOW_BANNER(425, 11, 30382, "Yellow Banner"), YELLOW_BED(355, 4, 30410, "Yellow Bed", "Yellow Bed"), - YELLOW_CARPET(171, 4, 18149, "Yellow Carpet", ""), - YELLOW_CONCRETE(251, 4, 15722, "Yellow Concrete", ""), - YELLOW_CONCRETE_POWDER(252, 4, 10655, "Yellow Concrete Powder", ""), + YELLOW_CARPET(171, 4, 18149, "Yellow Carpet"), + YELLOW_CONCRETE(251, 4, 15722, "Yellow Concrete"), + YELLOW_CONCRETE_POWDER(252, 4, 10655, "Yellow Concrete Powder"), YELLOW_GLAZED_TERRACOTTA(239, 0, 10914, "Yellow Glazed Terracotta", "YELLOW_GLAZED_TERRACOTTA"), YELLOW_SHULKER_BOX(223, 0, 28700, "Yellow Shulker Box", "YELLOW_SHULKER_BOX"), - YELLOW_STAINED_GLASS(95, 4, 12182, "Yellow Stained Glass", ""), - YELLOW_STAINED_GLASS_PANE(160, 4, 20298, "Yellow Stained Glass Pane", ""), - YELLOW_TERRACOTTA(159, 4, 32129, "Yellow Terracotta", ""), - YELLOW_WALL_BANNER(425, 11, 32004, "Yellow Banner", ""), - YELLOW_WOOL(35, 4, 29507, "Yellow Wool", ""), + YELLOW_STAINED_GLASS(95, 4, 12182, "Yellow Stained Glass"), + YELLOW_STAINED_GLASS_PANE(160, 4, 20298, "Yellow Stained Glass Pane"), + YELLOW_TERRACOTTA(159, 4, 32129, "Yellow Terracotta"), + YELLOW_WALL_BANNER(425, 11, 32004, "Yellow Banner"), + YELLOW_WOOL(35, 4, 29507, "Yellow Wool"), ZOMBIE_HEAD(397, 2, 9304, "Mob Head (Zombie)", "Zombie Head"), ZOMBIE_HORSE_SPAWN_EGG(383, 29, 4275, "Spawn Zombie Horse", "Zombie Horse Spawn Egg"), ZOMBIE_PIGMAN_SPAWN_EGG(383, 57, 11531, "Spawn Zombie Pigman", "Zombie Pigman Spawn Egg"), ZOMBIE_SPAWN_EGG(383, 54, 5814, "Spawn Zombie", "Zombie Spawn Egg"), ZOMBIE_VILLAGER_SPAWN_EGG(383, 27, 10311, "Spawn Zombie Villager", "Zombie Villager Spawn Egg"), - ZOMBIE_WALL_HEAD(144, 2, 16296, "Zombie Wall Head", ""), + ZOMBIE_WALL_HEAD(144, 2, 16296, "Zombie Wall Head"), // Legacy - LEGACY_STATIONARY_WATER(9, 0, -1, "Stationary Water", ""), - LEGACY_STATIONARY_LAVA(11, 0, -1, "Stationary Lava", ""), - LEGACY_BURNING_FURNACE(62, 0, -1, "Burning Furnace", ""), - LEGACY_NETHER_WARTS(115, -1, -1, "Nether Warts", ""), - LEGACY_GLOWING_REDSTON_ORE(74, 0, -1, "Glowing Redstone Ore", ""), - LEGACY_SUGAR_CANE_BLOCK(83, -1, -1, "Sugar Cane Block", ""), - LEGACY_RAW_FISH(349, 0, -1, "Raw Fish", ""), - LEGACY_SKULL(144, 0, -1, "Skull", ""), - -// LEGACY_SIGN_POST(63, -1, -1, "Sign Post", ""), -// LEGACY_REDSTONE_TORCH_OFF(75, -1, -1, "LEGACY_REDSTONE_TORCH_OFF", ""), -// LEGACY_CAKE_BLOCK(92, -1, -1, "LEGACY_CAKE_BLOCK", ""), -// LEGACY_DIODE_BLOCK_OFF(93, -1, -1, "LEGACY_DIODE_BLOCK_OFF", ""), -// LEGACY_DIODE_BLOCK_ON(94, -1, -1, "LEGACY_DIODE_BLOCK_ON", ""), + LEGACY_STATIONARY_WATER(9, 0, -1, "Stationary Water"), + LEGACY_STATIONARY_LAVA(11, 0, -1, "Stationary Lava"), + LEGACY_BURNING_FURNACE(62, 0, -1, "Burning Furnace"), + LEGACY_NETHER_WARTS(115, 0, -1, "Nether Warts"), + LEGACY_IRON_DOOR_BLOCK(71, 0, -1, "Iron Door Block"), + LEGACY_GLOWING_REDSTON_ORE(74, 0, -1, "Glowing Redstone Ore"), + LEGACY_SUGAR_CANE_BLOCK(83, 0, -1, "Sugar Cane Block"), + LEGACY_RAW_FISH(349, 0, -1, "Raw Fish"), + LEGACY_SKULL(144, 0, -1, "Skull"), + LEGACY_SIGN_POST(63, 0, -1, "Sign Post"), + LEGACY_BED_BLOCK(26, 0, -1, "Bed Block"), + LEGACY_REDSTONE_TORCH_OFF(75, 0, -1, "Redstone Torch Off"), + LEGACY_REDSTONE_TORCH_ON(76, 0, -1, "Redstone Torch On"), + LEGACY_CAKE_BLOCK(92, 0, -1, "Cake Block"), + LEGACY_DIODE_BLOCK_OFF(93, 0, -1, "Diode Block Off"), + LEGACY_DIODE_BLOCK_ON(94, 0, -1, "Diode Block On"), // LEGACY_BREWING_STAND(117, -1, -1, "LEGACY_BREWING_STAND", ""), -// LEGACY_CAULDRON(118, -1, -1, "LEGACY_CAULDRON", ""), +// LEGACY_CAULDRON(118, 0, -1, "LEGACY_CAULDRON", ""), // LEGACY_REDSTONE_LAMP_ON(124, -1, -1, "LEGACY_REDSTONE_LAMP_ON", ""), // LEGACY_WOOD_DOUBLE_STEP(125, -1, -1, "LEGACY_WOOD_DOUBLE_STEP", ""), // LEGACY_FLOWER_POT(140, -1, -1, "LEGACY_FLOWER_POT", ""), -// LEGACY_REDSTONE_COMPARATOR_OFF(149, -1, -1, "LEGACY_REDSTONE_COMPARATOR_OFF", ""), -// LEGACY_REDSTONE_COMPARATOR_ON(150, -1, -1, "LEGACY_REDSTONE_COMPARATOR_ON", ""), + LEGACY_REDSTONE_COMPARATOR_OFF(149, 0, -1, "Redstone Comparator Off", ""), + LEGACY_REDSTONE_COMPARATOR_ON(150, 0, -1, "Redstone Comparator On", ""), // LEGACY_STANDING_BANNER(176, -1, -1, "LEGACY_STANDING_BANNER", ""), // LEGACY_WALL_BANNER(177, -1, -1, "LEGACY_WALL_BANNER", ""), // LEGACY_DAYLIGHT_DETECTOR_INVERTED(178, -1, -1, "LEGACY_DAYLIGHT_DETECTOR_INVERTED", ""), // LEGACY_DOUBLE_STONE_SLAB2(181, -1, -1, "LEGACY_DOUBLE_STONE_SLAB2", ""), - LEGACY_IRON_DOOR_BLOCK(71, 0, -1, "Iron Door Block"), - LEGACY_WOODEN_DOOR(64, 0, -1, "Wooden Door Block"), + LEGACY_WOODEN_DOOR_BLOCK(64, 0, -1, "Wooden Door Block"), LEGACY_SPRUCE_DOOR(193, 0, -1, "Spruce Door Block"), LEGACY_BIRCH_DOOR(194, 0, -1, "Birch Door Block"), LEGACY_JUNGLE_DOOR(195, 0, -1, "Jungle Door Block"), @@ -1573,7 +1574,7 @@ public enum CMIMaterial { // LEGACY_PURPUR_DOUBLE_SLAB(204, -1, -1, "LEGACY_PURPUR_DOUBLE_SLAB", ""), // LEGACY_COMMAND_REPEATING(210, -1, -1, "LEGACY_COMMAND_REPEATING", ""), // LEGACY_COMMAND_CHAIN(211, -1, -1, "LEGACY_COMMAND_CHAIN", ""), - LEGACY_WHEAT(59, -1, -1, "Wheat Block", ""); + LEGACY_WHEAT(59, 0, -1, "Wheat Block"); private int legacyId; private int legacyData; @@ -2134,6 +2135,25 @@ public boolean isBoat() { return false; } + public static boolean isAnvil(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isAnvil(); + } + + public boolean isAnvil() { + switch (this) { + case ANVIL: + case CHIPPED_ANVIL: + case DAMAGED_ANVIL: + return true; + default: + break; + } + return false; + } + public static boolean isSapling(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2242,7 +2262,6 @@ public boolean isWool() { return false; } - public static boolean isShulkerBox(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2326,25 +2345,15 @@ public boolean isDoor() { switch (this) { case OAK_DOOR: case IRON_DOOR: - case LEGACY_SPRUCE_DOOR: case LEGACY_BIRCH_DOOR: case LEGACY_JUNGLE_DOOR: case LEGACY_ACACIA_DOOR: case LEGACY_DARK_OAK_DOOR: - case LEGACY_WOODEN_DOOR: - case LEGACY_IRON_DOOR_BLOCK: - -// case SPRUCE_DOOR_ITEM: -// case BIRCH_DOOR_ITEM: -// case JUNGLE_DOOR_ITEM: -// case ACACIA_DOOR_ITEM: -// case DARK_OAK_DOOR_ITEM: -// case WOODEN_DOOR: + case LEGACY_WOODEN_DOOR_BLOCK: case ACACIA_DOOR: case BIRCH_DOOR: case DARK_OAK_DOOR: -// case IRON_DOOR_BLOCK: case JUNGLE_DOOR: case SPRUCE_DOOR: return true; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index a10ac7b5a..40c0053e4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -12,6 +12,7 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; +import org.bukkit.block.data.BlockData; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -72,14 +73,12 @@ public ResidenceBlockListener(Residence residence) { this.plugin = residence; } - @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST) public void onAnvilInventoryClick(InventoryClickEvent e) { // Disabling listener if flag disabled globally if (!Flags.anvilbreak.isGlobalyEnabled()) return; Inventory inv = e.getInventory(); - try { if (inv == null || inv.getType() != InventoryType.ANVIL || e.getInventory().getLocation() == null) return; @@ -87,7 +86,7 @@ public void onAnvilInventoryClick(InventoryClickEvent e) { return; } Block b = e.getInventory().getLocation().getBlock(); - if (b == null || b.getType() != Material.ANVIL) + if (b == null || !CMIMaterial.isAnvil(b.getType())) return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(e.getInventory().getLocation()); @@ -108,8 +107,8 @@ public void onAnvilInventoryClick(InventoryClickEvent e) { e1.printStackTrace(); } } else { - // Waiting for 1.13+ fix - + // Need to fix roTation issue + b.setType(CMIMaterial.ANVIL.getMaterial()); } } From 43530e8b2893172ff5a8e5b374df895a02ce53e5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 17:24:57 +0200 Subject: [PATCH 0544/1142] Shear and dye flags, lets check actual items player is holding --- src/cmiLib/ItemReflection.java | 2 +- .../listeners/ResidencePlayerListener.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/cmiLib/ItemReflection.java b/src/cmiLib/ItemReflection.java index 080027848..d10180b68 100644 --- a/src/cmiLib/ItemReflection.java +++ b/src/cmiLib/ItemReflection.java @@ -174,7 +174,7 @@ public Object getCraftServer() { return CraftServer; } - public ItemStack getItemInOffHand(Player player) { + public static ItemStack getItemInOffHand(Player player) { if (Version.getCurrent().isLower(Version.v1_9_R1)) return null; return player.getInventory().getItemInOffHand(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9a5263544..70df74892 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -81,6 +81,7 @@ import cmiLib.ActionBarTitleMessages; import cmiLib.ItemManager.CMIMaterial; +import cmiLib.ItemReflection; import cmiLib.VersionChecker.Version; public class ResidencePlayerListener implements Listener { @@ -1531,6 +1532,13 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { if (res == null) return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.dye, FlagCombo.OnlyFalse)) { + ItemStack iih = plugin.getNms().itemInMainHand(player); + ItemStack iiho = ItemReflection.getItemInOffHand(player); + if (iih == null && iiho == null) + return; + if (iih != null && !CMIMaterial.isDye(iih.getType()) && iiho != null && !CMIMaterial.isDye(iiho.getType())) + return; + plugin.msg(player, lm.Residence_FlagDeny, Flags.dye, res.getName()); event.setCancelled(true); } @@ -1558,6 +1566,12 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.shear, FlagCombo.OnlyFalse)) { + ItemStack iih = plugin.getNms().itemInMainHand(player); + ItemStack iiho = ItemReflection.getItemInOffHand(player); + if (iih == null && iiho == null) + return; + if (iih != null && !CMIMaterial.SHEARS.equals(iih.getType()) && iiho != null && !CMIMaterial.SHEARS.equals(iiho.getType())) + return; plugin.msg(player, lm.Residence_FlagDeny, Flags.shear, res.getName()); event.setCancelled(true); } From 97c13738e8f22efaee89061c0ed5ac95e63ce10a Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 17:34:42 +0200 Subject: [PATCH 0545/1142] Lets create correct size for /res auto --- src/com/bekvon/bukkit/residence/commands/auto.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index a541aaa70..5ca846cf8 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -188,7 +188,7 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo continue; } - if (c.getXSize() >= group.getMaxX() - group.getMinX()) { + if (c.getXSize() > group.getMaxX() - group.getMinX()) { locked.add(dir); dir = dir.getNext(); skipped++; @@ -196,14 +196,14 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo } if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) - if (c.getYSize() >= group.getMaxY() - group.getMinY()) { + if (c.getYSize() > group.getMaxY() - group.getMinY()) { locked.add(dir); dir = dir.getNext(); skipped++; continue; } - if (c.getZSize() >= group.getMaxZ() - group.getMinZ()) { + if (c.getZSize() > group.getMaxZ() - group.getMinZ()) { locked.add(dir); dir = dir.getNext(); skipped++; From b7a10180fd22e6e192000971ac541fc8c77a061e Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 17:55:06 +0200 Subject: [PATCH 0546/1142] Cleanup --- src/com/bekvon/bukkit/residence/Residence.java | 3 --- src/com/bekvon/bukkit/residence/gui/SetFlag.java | 3 --- .../bukkit/residence/listeners/ResidenceBlockListener.java | 5 +++-- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 93e609e1a..9de106b3f 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -871,9 +871,6 @@ public void run() { getShopSignUtilManager().LoadSigns(); getShopSignUtilManager().BoardUpdate(); getVersionChecker().VersionCheck(null); - - FlagPermissions.addFlag("testing"); - } private boolean setupPlaceHolderAPI() { diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 0e4d69a39..9c41347ca 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -23,7 +23,6 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.utils.Debug; @@ -180,8 +179,6 @@ public void recalculateResidence(ClaimedResidence res) { TempPermMap.put(one.getKey(), FlagState.NEITHER); } - Debug.D(TempPermMap.containsKey("testing")); - String title = ""; if (targetPlayer == null) title = Residence.getInstance().msg(lm.Gui_Set_Title, res.getName()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 40c0053e4..be655603d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -772,7 +772,6 @@ public void onBlockFromTo(BlockFromToEvent event) { } } - @SuppressWarnings({ "deprecation" }) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLandDryFade(BlockFadeEvent event) { // Disabling listener if flag disabled globally @@ -796,7 +795,9 @@ public void onLandDryFade(BlockFadeEvent event) { e1.printStackTrace(); } } else { - // Waiting for 1.13+ fix + org.bukkit.block.data.type.Farmland farm = (org.bukkit.block.data.type.Farmland) event.getBlock().getBlockData(); + farm.setMoisture(7); + event.getBlock().setBlockData(farm); } event.setCancelled(true); From dd31790b16c3d8785b904f3783173026e4618969 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 20:45:57 +0200 Subject: [PATCH 0547/1142] Lets check for none existing saction in locale --- src/com/bekvon/bukkit/residence/commands/flags.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index dafcbb389..e028ed51d 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; +import java.util.HashSet; import java.util.Set; import org.bukkit.Bukkit; @@ -9,10 +10,10 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.utils.Debug; + +import cmiLib.ConfigReader; public class flags implements cmd { @@ -38,7 +39,10 @@ public void getLocale(ConfigReader c, String path) { c.get(path + "Description", "List of flags"); c.get(path + "Info", Arrays.asList("For flag values, usually true allows the action, and false denys the action.")); - Set keys = c.getC().getConfigurationSection(path + "SubCommands").getKeys(false); + Set keys = new HashSet(); + if (c.getC().isConfigurationSection(path + "SubCommands")){ + keys = c.getC().getConfigurationSection(path + "SubCommands").getKeys(false); + } for (Flags fl : Flags.values()) { String pt = path + "SubCommands." + fl.toString(); From 523647f73d094d3700e29e1f069519f971345329 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Jan 2019 21:53:01 +0200 Subject: [PATCH 0548/1142] This should not be here --- src/cmiLib/RawMessage.java | 8 ++------ src/plugin.yml | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/cmiLib/RawMessage.java b/src/cmiLib/RawMessage.java index 8d4d8669d..9484ce09e 100644 --- a/src/cmiLib/RawMessage.java +++ b/src/cmiLib/RawMessage.java @@ -16,10 +16,6 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; - -import com.Zrips.CMI.Modules.ChatFormat.ChatFormatManager; -import com.Zrips.CMI.utils.Util.CMIChatColor; - import cmiLib.VersionChecker.Version; public class RawMessage { @@ -173,7 +169,7 @@ public RawMessage addText(String text) { } unfinishedClean = text; - unfinished += "\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(ChatFormatManager.colorReplacerPlaceholder, "&") + "\""; + unfinished += "\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(colorReplacerPlaceholder, "&") + "\""; return this; } @@ -266,7 +262,7 @@ public RawMessage add(String text, String hoverText, String command, String sugg text = text.replace("\\\\\\n", "\\\\n"); } - String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(ChatFormatManager.colorReplacerPlaceholder, "&") + "\""; + String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(colorReplacerPlaceholder, "&") + "\""; if (hoverText != null && !hoverText.isEmpty()) { hoverText = provessText(hoverText); diff --git a/src/plugin.yml b/src/plugin.yml index 130f07d6c..ababdcc59 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.4.0 +version: 4.8.4.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From a37d3ea37ec78ccff3254dad093b640ddf19ee53 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Jan 2019 22:43:56 +0200 Subject: [PATCH 0549/1142] Import cleanup --- .../bukkit/residence/listeners/ResidenceBlockListener.java | 2 -- src/plugin.yml | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index be655603d..98ca2b328 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -12,7 +12,6 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; -import org.bukkit.block.data.BlockData; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -54,7 +53,6 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import cmiLib.ActionBarTitleMessages; import cmiLib.ItemManager.CMIMaterial; diff --git a/src/plugin.yml b/src/plugin.yml index ababdcc59..a688d1661 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.4.2 +version: 4.8.4.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From fbaa5cbcbbb743a3a70b14851d0a6e38d3cd4b5a Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 10 Jan 2019 11:40:07 +0200 Subject: [PATCH 0550/1142] Lets move library to more stable package Lets move dryup to separate listener for 1.13 due to missing method issue --- .../cmiLib/ActionBarTitleMessages.java | 5 +- .../bekvon/bukkit}/cmiLib/CMIChatColor.java | 2 +- .../bekvon/bukkit}/cmiLib/CMIEffect.java | 4 +- .../bukkit}/cmiLib/CMIEffectManager.java | 6 +- .../bekvon/bukkit}/cmiLib/CMIItemStack.java | 6 +- .../bekvon/bukkit}/cmiLib/ConfigReader.java | 2 +- .../bekvon/bukkit}/cmiLib/ItemManager.java | 4 +- .../bekvon/bukkit}/cmiLib/ItemReflection.java | 4 +- .../bekvon/bukkit}/cmiLib/RawMessage.java | 5 +- .../bekvon/bukkit}/cmiLib/VersionChecker.java | 2 +- .../residence/BossBar/BossBarManager.java | 3 +- .../bukkit/residence/ConfigManager.java | 7 +- .../bukkit/residence/LocaleManager.java | 2 +- .../bekvon/bukkit/residence/Residence.java | 17 ++-- .../bukkit/residence/allNms/v1_10_R1.java | 2 +- .../bukkit/residence/allNms/v1_11_R1.java | 2 +- .../bukkit/residence/allNms/v1_12_R1.java | 2 +- .../bukkit/residence/allNms/v1_13Events.java | 89 +++++++++++++++++++ .../bukkit/residence/allNms/v1_13_R1.java | 4 +- .../bukkit/residence/allNms/v1_13_R2.java | 4 +- .../residence/allNms/v1_7_Couldron.java | 2 +- .../bukkit/residence/allNms/v1_7_R4.java | 2 +- .../bukkit/residence/allNms/v1_8_R1.java | 2 +- .../bukkit/residence/allNms/v1_8_R2.java | 2 +- .../bukkit/residence/allNms/v1_8_R3.java | 2 +- .../bukkit/residence/allNms/v1_9_R1.java | 2 +- .../bukkit/residence/allNms/v1_9_R2.java | 2 +- .../bukkit/residence/commands/area.java | 2 +- .../bukkit/residence/commands/auto.java | 2 +- .../bukkit/residence/commands/bank.java | 2 +- .../bukkit/residence/commands/check.java | 2 +- .../bukkit/residence/commands/clearflags.java | 2 +- .../bukkit/residence/commands/command.java | 2 +- .../bukkit/residence/commands/compass.java | 2 +- .../bukkit/residence/commands/confirm.java | 2 +- .../bukkit/residence/commands/contract.java | 2 +- .../bukkit/residence/commands/create.java | 2 +- .../bukkit/residence/commands/current.java | 2 +- .../bukkit/residence/commands/expand.java | 2 +- .../bukkit/residence/commands/flags.java | 3 +- .../bukkit/residence/commands/give.java | 2 +- .../bukkit/residence/commands/gset.java | 2 +- .../bukkit/residence/commands/info.java | 2 +- .../bukkit/residence/commands/kick.java | 2 +- .../bukkit/residence/commands/lease.java | 2 +- .../bukkit/residence/commands/limits.java | 2 +- .../bukkit/residence/commands/list.java | 3 +- .../bukkit/residence/commands/listall.java | 2 +- .../residence/commands/listallhidden.java | 3 +- .../bukkit/residence/commands/listhidden.java | 3 +- .../bukkit/residence/commands/lists.java | 2 +- .../bukkit/residence/commands/lset.java | 2 +- .../bukkit/residence/commands/market.java | 2 +- .../bukkit/residence/commands/material.java | 5 +- .../bukkit/residence/commands/message.java | 2 +- .../bukkit/residence/commands/mirror.java | 2 +- .../bukkit/residence/commands/padd.java | 2 +- .../bukkit/residence/commands/pdel.java | 2 +- .../bukkit/residence/commands/pset.java | 2 +- .../bekvon/bukkit/residence/commands/rc.java | 2 +- .../bukkit/residence/commands/reload.java | 2 +- .../bukkit/residence/commands/remove.java | 5 +- .../bukkit/residence/commands/removeall.java | 3 +- .../residence/commands/removeworld.java | 3 +- .../bukkit/residence/commands/rename.java | 2 +- .../bukkit/residence/commands/renamearea.java | 2 +- .../bukkit/residence/commands/resadmin.java | 2 +- .../bukkit/residence/commands/resbank.java | 2 +- .../bukkit/residence/commands/reset.java | 2 +- .../bekvon/bukkit/residence/commands/rt.java | 2 +- .../bukkit/residence/commands/select.java | 2 +- .../bukkit/residence/commands/server.java | 2 +- .../bekvon/bukkit/residence/commands/set.java | 2 +- .../bukkit/residence/commands/setall.java | 3 +- .../bukkit/residence/commands/setallfor.java | 3 +- .../bukkit/residence/commands/setmain.java | 2 +- .../bukkit/residence/commands/setowner.java | 3 +- .../bukkit/residence/commands/shop.java | 5 +- .../bukkit/residence/commands/show.java | 2 +- .../residence/commands/signconvert.java | 2 +- .../bukkit/residence/commands/signupdate.java | 3 +- .../bukkit/residence/commands/sublist.java | 2 +- .../bukkit/residence/commands/subzone.java | 2 +- .../bukkit/residence/commands/tool.java | 3 +- .../bekvon/bukkit/residence/commands/tp.java | 2 +- .../bukkit/residence/commands/tpconfirm.java | 2 +- .../bukkit/residence/commands/tpset.java | 2 +- .../bukkit/residence/commands/unstuck.java | 2 +- .../bukkit/residence/commands/version.java | 3 +- .../residence/commandsInProgress/siege.java | 2 +- .../bukkit/residence/containers/Flags.java | 2 +- .../bukkit/residence/containers/NMS.java | 2 +- .../bukkit/residence/containers/cmd.java | 3 +- .../residence/economy/rent/RentManager.java | 3 +- .../bekvon/bukkit/residence/gui/FlagUtil.java | 5 +- .../bukkit/residence/itemlist/ItemList.java | 2 +- .../listeners/ResidenceBlockListener.java | 42 ++++----- .../listeners/ResidenceEntityListener.java | 7 +- .../listeners/ResidenceFixesListener.java | 3 +- .../listeners/ResidencePlayerListener.java | 9 +- .../protection/ClaimedResidence.java | 5 +- .../residence/protection/FlagPermissions.java | 5 +- .../protection/ResidenceManager.java | 3 +- .../selection/SchematicsManager.java | 4 +- .../residence/selection/SelectionManager.java | 7 +- .../bukkit/residence/text/help/HelpEntry.java | 3 +- .../residence/text/help/InformationPager.java | 3 +- .../residence/utils/ParticleEffects.java | 3 +- .../bekvon/bukkit/residence/utils/Utils.java | 3 +- 109 files changed, 259 insertions(+), 188 deletions(-) rename src/{ => com/bekvon/bukkit}/cmiLib/ActionBarTitleMessages.java (96%) rename src/{ => com/bekvon/bukkit}/cmiLib/CMIChatColor.java (94%) rename src/{ => com/bekvon/bukkit}/cmiLib/CMIEffect.java (87%) rename src/{ => com/bekvon/bukkit}/cmiLib/CMIEffectManager.java (96%) rename src/{ => com/bekvon/bukkit}/cmiLib/CMIItemStack.java (94%) rename src/{ => com/bekvon/bukkit}/cmiLib/ConfigReader.java (95%) rename src/{ => com/bekvon/bukkit}/cmiLib/ItemManager.java (97%) rename src/{ => com/bekvon/bukkit}/cmiLib/ItemReflection.java (94%) rename src/{ => com/bekvon/bukkit}/cmiLib/RawMessage.java (95%) rename src/{ => com/bekvon/bukkit}/cmiLib/VersionChecker.java (95%) create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_13Events.java diff --git a/src/cmiLib/ActionBarTitleMessages.java b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java similarity index 96% rename from src/cmiLib/ActionBarTitleMessages.java rename to src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java index ce2dba671..4e8cf325c 100644 --- a/src/cmiLib/ActionBarTitleMessages.java +++ b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java @@ -1,4 +1,4 @@ -package cmiLib; +package com.bekvon.bukkit.cmiLib; import java.lang.reflect.Constructor; import java.lang.reflect.Field; @@ -11,10 +11,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; -import cmiLib.VersionChecker.Version; - public class ActionBarTitleMessages { private static Object packet; private static Method getHandle; diff --git a/src/cmiLib/CMIChatColor.java b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java similarity index 94% rename from src/cmiLib/CMIChatColor.java rename to src/com/bekvon/bukkit/cmiLib/CMIChatColor.java index 855988cbb..7fbb0891e 100644 --- a/src/cmiLib/CMIChatColor.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java @@ -1,4 +1,4 @@ -package cmiLib; +package com.bekvon.bukkit.cmiLib; import java.util.ArrayList; import java.util.Collections; diff --git a/src/cmiLib/CMIEffect.java b/src/com/bekvon/bukkit/cmiLib/CMIEffect.java similarity index 87% rename from src/cmiLib/CMIEffect.java rename to src/com/bekvon/bukkit/cmiLib/CMIEffect.java index f0ceea927..5b3dd80e6 100644 --- a/src/cmiLib/CMIEffect.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIEffect.java @@ -1,12 +1,12 @@ /** * Copyright (C) 2017 Zrips */ -package cmiLib; +package com.bekvon.bukkit.cmiLib; import org.bukkit.Color; import org.bukkit.util.Vector; -import cmiLib.CMIEffectManager.CMIParticle; +import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; public class CMIEffect { diff --git a/src/cmiLib/CMIEffectManager.java b/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java similarity index 96% rename from src/cmiLib/CMIEffectManager.java rename to src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java index 081927ebb..b1cad05c6 100644 --- a/src/cmiLib/CMIEffectManager.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java @@ -1,7 +1,7 @@ /** * Copyright (C) 2017 Zrips */ -package cmiLib; +package com.bekvon.bukkit.cmiLib; import java.util.ArrayList; import java.util.List; @@ -9,8 +9,8 @@ import org.bukkit.Effect; import org.bukkit.Effect.Type; -import cmiLib.ItemManager.CMIMaterial; -import cmiLib.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import org.bukkit.Material; diff --git a/src/cmiLib/CMIItemStack.java b/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java similarity index 94% rename from src/cmiLib/CMIItemStack.java rename to src/com/bekvon/bukkit/cmiLib/CMIItemStack.java index 14aec3e42..aad2cd6b5 100644 --- a/src/cmiLib/CMIItemStack.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java @@ -1,7 +1,7 @@ /** * Copyright (C) 2017 Zrips */ -package cmiLib; +package com.bekvon.bukkit.cmiLib; import java.util.ArrayList; import java.util.HashMap; @@ -17,8 +17,8 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import cmiLib.ItemManager.CMIMaterial; -import cmiLib.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; public class CMIItemStack { diff --git a/src/cmiLib/ConfigReader.java b/src/com/bekvon/bukkit/cmiLib/ConfigReader.java similarity index 95% rename from src/cmiLib/ConfigReader.java rename to src/com/bekvon/bukkit/cmiLib/ConfigReader.java index c6fd07622..020ceb07b 100644 --- a/src/cmiLib/ConfigReader.java +++ b/src/com/bekvon/bukkit/cmiLib/ConfigReader.java @@ -1,4 +1,4 @@ -package cmiLib; +package com.bekvon.bukkit.cmiLib; import java.io.File; import java.io.FileInputStream; diff --git a/src/cmiLib/ItemManager.java b/src/com/bekvon/bukkit/cmiLib/ItemManager.java similarity index 97% rename from src/cmiLib/ItemManager.java rename to src/com/bekvon/bukkit/cmiLib/ItemManager.java index f60e70727..70fd43c44 100644 --- a/src/cmiLib/ItemManager.java +++ b/src/com/bekvon/bukkit/cmiLib/ItemManager.java @@ -1,7 +1,7 @@ /** * Copyright (C) 2017 Zrips */ -package cmiLib; +package com.bekvon.bukkit.cmiLib; import java.util.ArrayList; import java.util.Collections; @@ -23,7 +23,7 @@ import org.bukkit.inventory.meta.BlockStateMeta; import org.bukkit.inventory.meta.SkullMeta; -import cmiLib.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; public class ItemManager { diff --git a/src/cmiLib/ItemReflection.java b/src/com/bekvon/bukkit/cmiLib/ItemReflection.java similarity index 94% rename from src/cmiLib/ItemReflection.java rename to src/com/bekvon/bukkit/cmiLib/ItemReflection.java index d10180b68..b189ab801 100644 --- a/src/cmiLib/ItemReflection.java +++ b/src/com/bekvon/bukkit/cmiLib/ItemReflection.java @@ -2,7 +2,7 @@ * Copyright (C) 2017 Zrips */ -package cmiLib; +package com.bekvon.bukkit.cmiLib; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -12,7 +12,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import cmiLib.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; public class ItemReflection { diff --git a/src/cmiLib/RawMessage.java b/src/com/bekvon/bukkit/cmiLib/RawMessage.java similarity index 95% rename from src/cmiLib/RawMessage.java rename to src/com/bekvon/bukkit/cmiLib/RawMessage.java index 9484ce09e..987e5cb57 100644 --- a/src/cmiLib/RawMessage.java +++ b/src/com/bekvon/bukkit/cmiLib/RawMessage.java @@ -1,4 +1,4 @@ -package cmiLib; +package com.bekvon.bukkit.cmiLib; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; @@ -16,7 +16,8 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import cmiLib.VersionChecker.Version; + +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; public class RawMessage { diff --git a/src/cmiLib/VersionChecker.java b/src/com/bekvon/bukkit/cmiLib/VersionChecker.java similarity index 95% rename from src/cmiLib/VersionChecker.java rename to src/com/bekvon/bukkit/cmiLib/VersionChecker.java index 9202433db..006a031f0 100644 --- a/src/cmiLib/VersionChecker.java +++ b/src/com/bekvon/bukkit/cmiLib/VersionChecker.java @@ -1,4 +1,4 @@ -package cmiLib; +package com.bekvon.bukkit.cmiLib; import java.io.BufferedReader; import java.io.InputStreamReader; diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java index 321df4e09..0058a5b71 100644 --- a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java +++ b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java @@ -10,11 +10,10 @@ import org.bukkit.boss.BossBar; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import cmiLib.VersionChecker.Version; - public class BossBarManager { Residence plugin; diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index b421cad1a..245cd6da9 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -22,15 +22,14 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.containers.EconomyType; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import cmiLib.CMIEffectManager.CMIParticle; -import cmiLib.ConfigReader; -import cmiLib.ItemManager.CMIMaterial; - public class ConfigManager { protected String defaultGroup; protected boolean useLeases; diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 0d9f02e13..9dff96a2a 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -19,8 +19,8 @@ import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.CommandStatus; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 9de106b3f..14dce7360 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -46,10 +46,17 @@ import org.kingdoms.main.Kingdoms; import org.kingdoms.manager.game.GameManagement; +import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; +import com.bekvon.bukkit.cmiLib.ItemManager; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.cmiLib.VersionChecker; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.BossBar.BossBarManager; import com.bekvon.bukkit.residence.Placeholders.Placeholder; import com.bekvon.bukkit.residence.Placeholders.PlaceholderAPIHook; import com.bekvon.bukkit.residence.Siege.ResidenceSiegeListener; +import com.bekvon.bukkit.residence.allNms.v1_13Events; import com.bekvon.bukkit.residence.allNms.v1_10Events; import com.bekvon.bukkit.residence.allNms.v1_8Events; import com.bekvon.bukkit.residence.allNms.v1_9Events; @@ -128,12 +135,6 @@ import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import cmiLib.ActionBarTitleMessages; -import cmiLib.ItemManager; -import cmiLib.ItemManager.CMIMaterial; -import cmiLib.RawMessage; -import cmiLib.VersionChecker; -import cmiLib.VersionChecker.Version; import cosine.boseconomy.BOSEconomy; import fr.crafter.tickleman.realeconomy.RealEconomy; import fr.crafter.tickleman.realplugin.RealPlugin; @@ -784,6 +785,10 @@ public void run() { if (Version.isCurrentEqualOrHigher(Version.v1_10_R1)) pm.registerEvents(new v1_10Events(), this); + // 1.13 event + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + pm.registerEvents(new v1_13Events(this), this); + firstenable = false; } else { plistener.reload(); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java index b0e28bda4..115de20f6 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java @@ -31,9 +31,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; -import cmiLib.CMIEffect; import net.minecraft.server.v1_10_R1.EnumParticle; import net.minecraft.server.v1_10_R1.Packet; import net.minecraft.server.v1_10_R1.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java index 11f52c2e3..b6700a245 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java @@ -33,9 +33,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; -import cmiLib.CMIEffect; import net.minecraft.server.v1_11_R1.EnumParticle; import net.minecraft.server.v1_11_R1.Packet; import net.minecraft.server.v1_11_R1.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java index 0564a6232..a8854151c 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java @@ -34,9 +34,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; -import cmiLib.CMIEffect; import net.minecraft.server.v1_12_R1.EnumParticle; import net.minecraft.server.v1_12_R1.Packet; import net.minecraft.server.v1_12_R1.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java new file mode 100644 index 000000000..72a0e2a87 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java @@ -0,0 +1,89 @@ +package com.bekvon.bukkit.residence.allNms; + +import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.type.Farmland; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockFadeEvent; +import org.bukkit.event.block.BlockPhysicsEvent; + +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + +public class v1_13Events implements Listener { + + Residence plugin; + + public v1_13Events(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onLandDryFade(BlockFadeEvent event) { + if (Version.isCurrentLower(Version.v1_13_R1)) + return; + // Disabling listener if flag disabled globally + if (!Flags.dryup.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + CMIMaterial mat = CMIMaterial.get(event.getBlock()); + if (!mat.equals(CMIMaterial.FARMLAND)) + return; + + FlagPermissions perms = plugin.getPermsByLoc(event.getNewState().getLocation()); + if (perms.has(Flags.dryup, FlagCombo.OnlyFalse)) { + Block b = event.getBlock(); + try { + BlockData data = b.getBlockData(); + Farmland farm = (Farmland) data; + farm.setMoisture(7); + b.setBlockData(farm); + } catch (NoClassDefFoundError e) { + } + event.setCancelled(true); + return; + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onLandDryPhysics(BlockPhysicsEvent event) { + if (Version.isCurrentLower(Version.v1_13_R1)) + return; + // Disabling listener if flag disabled globally + if (!Flags.dryup.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + if (!event.getBlock().getChunk().isLoaded()) + return; + + CMIMaterial mat = CMIMaterial.get(event.getBlock().getType()); + if (!mat.equals(CMIMaterial.FARMLAND)) + return; + + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (perms.has(Flags.dryup, FlagCombo.OnlyFalse)) { + Block b = event.getBlock(); + try { + BlockData data = b.getBlockData(); + Farmland farm = (Farmland) data; + farm.setMoisture(7); + b.setBlockData(farm); + } catch (NoClassDefFoundError e) { + } + event.setCancelled(true); + return; + } + } +} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java index 2a2852bb7..1e2bbb549 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java @@ -41,10 +41,10 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIEffect; +import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; import com.bekvon.bukkit.residence.containers.NMS; -import cmiLib.CMIEffect; -import cmiLib.CMIEffectManager.CMIParticle; import net.minecraft.server.v1_13_R1.Packet; import net.minecraft.server.v1_13_R1.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java index af00a6a2f..8969d64ab 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java @@ -41,10 +41,10 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIEffect; +import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; import com.bekvon.bukkit.residence.containers.NMS; -import cmiLib.CMIEffect; -import cmiLib.CMIEffectManager.CMIParticle; import net.minecraft.server.v1_13_R2.Packet; import net.minecraft.server.v1_13_R2.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 861cb8b47..0d48d1d74 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -28,9 +28,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; -import cmiLib.CMIEffect; import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; public class v1_7_Couldron implements NMS { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java index 2dcf0984b..50e89ff58 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java @@ -28,9 +28,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; -import cmiLib.CMIEffect; import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; public class v1_7_R4 implements NMS { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java index 7309600d3..f5d67bd7c 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java @@ -29,9 +29,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; -import cmiLib.CMIEffect; import net.minecraft.server.v1_8_R1.EnumParticle; import net.minecraft.server.v1_8_R1.Packet; import net.minecraft.server.v1_8_R1.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java index 1e76f3413..83cc42cb9 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java @@ -29,9 +29,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; -import cmiLib.CMIEffect; import net.minecraft.server.v1_8_R2.EnumParticle; import net.minecraft.server.v1_8_R2.Packet; import net.minecraft.server.v1_8_R2.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java index cf8ed2be0..3e307c42b 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java @@ -29,9 +29,9 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; -import cmiLib.CMIEffect; import net.minecraft.server.v1_8_R3.EnumParticle; import net.minecraft.server.v1_8_R3.Packet; import net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java index 1fd6ab8ec..dbbbe63f0 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java @@ -30,9 +30,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; -import cmiLib.CMIEffect; import net.minecraft.server.v1_9_R1.EnumParticle; import net.minecraft.server.v1_9_R1.Packet; import net.minecraft.server.v1_9_R1.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java index 0e95d710f..b0b47c2ea 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java @@ -30,9 +30,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; -import cmiLib.CMIEffect; import net.minecraft.server.v1_9_R2.EnumParticle; import net.minecraft.server.v1_9_R2.Packet; import net.minecraft.server.v1_9_R2.PacketPlayOutWorldParticles; diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index f51e4d35b..4979a93e1 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 5ca846cf8..391887815 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -10,9 +10,9 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionGroup; diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 1f8006340..5967d3258 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index 0b7493619..a13ee71b7 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/clearflags.java b/src/com/bekvon/bukkit/residence/commands/clearflags.java index a4f742673..9cbb3e62d 100644 --- a/src/com/bekvon/bukkit/residence/commands/clearflags.java +++ b/src/com/bekvon/bukkit/residence/commands/clearflags.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index ab51946c1..7d38a36c7 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index 1f0edd3c6..fe2252435 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/confirm.java b/src/com/bekvon/bukkit/residence/commands/confirm.java index 8b0d37895..f68835266 100644 --- a/src/com/bekvon/bukkit/residence/commands/confirm.java +++ b/src/com/bekvon/bukkit/residence/commands/confirm.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 95ca57e22..4370c8a13 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 5cb567574..7b1451122 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/current.java b/src/com/bekvon/bukkit/residence/commands/current.java index f1087f08e..e26feecc3 100644 --- a/src/com/bekvon/bukkit/residence/commands/current.java +++ b/src/com/bekvon/bukkit/residence/commands/current.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index b285484f6..5b27a00eb 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index e028ed51d..c9ff2fff0 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -8,13 +8,12 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; -import cmiLib.ConfigReader; - public class flags implements cmd { @Override diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index 3fb9d7c3e..320d8c5ac 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class give implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/gset.java b/src/com/bekvon/bukkit/residence/commands/gset.java index 02f653a06..570835a2b 100644 --- a/src/com/bekvon/bukkit/residence/commands/gset.java +++ b/src/com/bekvon/bukkit/residence/commands/gset.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 320634844..ff3d36a49 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 788f94566..185d14407 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -8,9 +8,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index d0a88d38c..94b0352ff 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -8,9 +8,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 6d4f0b10d..110669154 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -7,9 +7,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index bf457b40a..c70754763 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -6,9 +6,10 @@ import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class list implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index 1d0a75df9..f1bd6c622 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -8,9 +8,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class listall implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/listallhidden.java b/src/com/bekvon/bukkit/residence/commands/listallhidden.java index edb2a5f1c..eb370b562 100644 --- a/src/com/bekvon/bukkit/residence/commands/listallhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listallhidden.java @@ -4,9 +4,10 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/listhidden.java b/src/com/bekvon/bukkit/residence/commands/listhidden.java index 5eea41dfd..0cd21cbb7 100644 --- a/src/com/bekvon/bukkit/residence/commands/listhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listhidden.java @@ -4,9 +4,10 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/lists.java b/src/com/bekvon/bukkit/residence/commands/lists.java index fe7a36c39..8fb322642 100644 --- a/src/com/bekvon/bukkit/residence/commands/lists.java +++ b/src/com/bekvon/bukkit/residence/commands/lists.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java index b2f3a1741..1cffdcb54 100644 --- a/src/com/bekvon/bukkit/residence/commands/lset.java +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -7,9 +7,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 8de3ebdba..b7650d36d 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -10,9 +10,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index fcd52cd2d..6d59b9832 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -6,14 +6,13 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; -import cmiLib.ItemManager.CMIMaterial; - public class material implements cmd { @SuppressWarnings("deprecation") diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index a9fdc57b9..4f38af6b7 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/mirror.java b/src/com/bekvon/bukkit/residence/commands/mirror.java index 2ba9c8fc7..9288b6c6d 100644 --- a/src/com/bekvon/bukkit/residence/commands/mirror.java +++ b/src/com/bekvon/bukkit/residence/commands/mirror.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class mirror implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index ca14e8ef2..27bfbfce6 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class padd implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index 057671ed1..befc5d1c6 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -7,9 +7,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class pdel implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index f6c19bba1..96da8e7f4 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -7,9 +7,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index 8c9b27ceb..33443e81a 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -7,10 +7,10 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index ffaa1417e..e3784923a 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -5,9 +5,9 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.itemlist.WorldItemManager; diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index a54be2ced..9b86c6578 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -6,17 +6,16 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import cmiLib.RawMessage; - public class remove implements cmd { @Override diff --git a/src/com/bekvon/bukkit/residence/commands/removeall.java b/src/com/bekvon/bukkit/residence/commands/removeall.java index 0e935d24d..1962ae0eb 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeall.java +++ b/src/com/bekvon/bukkit/residence/commands/removeall.java @@ -4,9 +4,10 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index c769b1a2a..eb63dee1d 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -6,9 +6,10 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; + +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class removeworld implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/rename.java b/src/com/bekvon/bukkit/residence/commands/rename.java index d87ef4565..4e9ef4387 100644 --- a/src/com/bekvon/bukkit/residence/commands/rename.java +++ b/src/com/bekvon/bukkit/residence/commands/rename.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class rename implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/renamearea.java b/src/com/bekvon/bukkit/residence/commands/renamearea.java index 708e83ec2..ecd03644d 100644 --- a/src/com/bekvon/bukkit/residence/commands/renamearea.java +++ b/src/com/bekvon/bukkit/residence/commands/renamearea.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/resadmin.java b/src/com/bekvon/bukkit/residence/commands/resadmin.java index bf3745ab3..32f64f04b 100644 --- a/src/com/bekvon/bukkit/residence/commands/resadmin.java +++ b/src/com/bekvon/bukkit/residence/commands/resadmin.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/resbank.java b/src/com/bekvon/bukkit/residence/commands/resbank.java index 73b2a3172..f60d2da9b 100644 --- a/src/com/bekvon/bukkit/residence/commands/resbank.java +++ b/src/com/bekvon/bukkit/residence/commands/resbank.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index ffadb71bc..f39c27b29 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -8,9 +8,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 3ca32c2c7..9c9dd0188 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -9,9 +9,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 90459b74a..6a5c6d3c5 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -10,9 +10,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java index 07440fcf4..ec28df808 100644 --- a/src/com/bekvon/bukkit/residence/commands/server.java +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 302696056..eb4efe3e5 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -7,9 +7,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/setall.java b/src/com/bekvon/bukkit/residence/commands/setall.java index 4268dcd7c..0d5267133 100644 --- a/src/com/bekvon/bukkit/residence/commands/setall.java +++ b/src/com/bekvon/bukkit/residence/commands/setall.java @@ -7,11 +7,10 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; - -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/setallfor.java b/src/com/bekvon/bukkit/residence/commands/setallfor.java index d5647daa5..0c9d1439c 100644 --- a/src/com/bekvon/bukkit/residence/commands/setallfor.java +++ b/src/com/bekvon/bukkit/residence/commands/setallfor.java @@ -5,11 +5,10 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; - -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/setmain.java b/src/com/bekvon/bukkit/residence/commands/setmain.java index 3e7e77b26..cfb9517a8 100644 --- a/src/com/bekvon/bukkit/residence/commands/setmain.java +++ b/src/com/bekvon/bukkit/residence/commands/setmain.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index fb57f31ef..a07d10b78 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -4,9 +4,10 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index ec66892d4..91b1ea8ea 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -13,9 +13,10 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -26,8 +27,6 @@ import com.bekvon.bukkit.residence.shopStuff.Vote; import com.bekvon.bukkit.residence.text.help.PageInfo; -import cmiLib.RawMessage; - public class shop implements cmd { @Override diff --git a/src/com/bekvon/bukkit/residence/commands/show.java b/src/com/bekvon/bukkit/residence/commands/show.java index eccaff88c..6333c83f8 100644 --- a/src/com/bekvon/bukkit/residence/commands/show.java +++ b/src/com/bekvon/bukkit/residence/commands/show.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/signconvert.java b/src/com/bekvon/bukkit/residence/commands/signconvert.java index 8d00c2adf..8ba961be5 100644 --- a/src/com/bekvon/bukkit/residence/commands/signconvert.java +++ b/src/com/bekvon/bukkit/residence/commands/signconvert.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/signupdate.java b/src/com/bekvon/bukkit/residence/commands/signupdate.java index 86efa8700..f1f39aae3 100644 --- a/src/com/bekvon/bukkit/residence/commands/signupdate.java +++ b/src/com/bekvon/bukkit/residence/commands/signupdate.java @@ -4,9 +4,10 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java index ce0414c91..dff0c93f2 100644 --- a/src/com/bekvon/bukkit/residence/commands/sublist.java +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index 07c6d5ed6..27655397f 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index b0cf8ce1f..5a5c8f986 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -6,13 +6,12 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; -import cmiLib.ConfigReader; - public class tool implements cmd { @Override diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index 66b8d8d55..8b23eef79 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java index 909bfb0b4..83a88f0be 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java +++ b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/tpset.java b/src/com/bekvon/bukkit/residence/commands/tpset.java index 8320c199a..5115931bb 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpset.java +++ b/src/com/bekvon/bukkit/residence/commands/tpset.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index 9f8a89865..e24af4317 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -6,9 +6,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/version.java b/src/com/bekvon/bukkit/residence/commands/version.java index 926ce0a23..df306ceba 100644 --- a/src/com/bekvon/bukkit/residence/commands/version.java +++ b/src/com/bekvon/bukkit/residence/commands/version.java @@ -5,9 +5,10 @@ import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; + +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.cmd; public class version implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java b/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java index 7ce33e728..49b034091 100644 --- a/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java +++ b/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java @@ -7,9 +7,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index fb3372588..13331584c 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -1,6 +1,6 @@ package com.bekvon.bukkit.residence.containers; -import cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; public enum Flags { anvil(CMIMaterial.ANVIL, FlagMode.Both, "Allows or denys interaction with anvil", true), diff --git a/src/com/bekvon/bukkit/residence/containers/NMS.java b/src/com/bekvon/bukkit/residence/containers/NMS.java index fa16f85f1..290152aa4 100644 --- a/src/com/bekvon/bukkit/residence/containers/NMS.java +++ b/src/com/bekvon/bukkit/residence/containers/NMS.java @@ -13,7 +13,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import cmiLib.CMIEffect; +import com.bekvon.bukkit.cmiLib.CMIEffect; public interface NMS { diff --git a/src/com/bekvon/bukkit/residence/containers/cmd.java b/src/com/bekvon/bukkit/residence/containers/cmd.java index 99f836d22..af6d551b1 100644 --- a/src/com/bekvon/bukkit/residence/containers/cmd.java +++ b/src/com/bekvon/bukkit/residence/containers/cmd.java @@ -3,10 +3,9 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; -import cmiLib.ConfigReader; - public interface cmd { public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index f20280f3f..a8b7fac91 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -3,6 +3,7 @@ import org.bukkit.ChatColor; import org.bukkit.World; +import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketRentInterface; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -16,8 +17,6 @@ import com.bekvon.bukkit.residence.text.help.PageInfo; import com.bekvon.bukkit.residence.utils.GetTime; -import cmiLib.RawMessage; - import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 4bc70c53f..7938c86aa 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -4,11 +4,10 @@ import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.Residence; -import cmiLib.ConfigReader; -import cmiLib.ItemManager.CMIMaterial; - public class FlagUtil { private FlagData flagData = new FlagData(); diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index d148a5a70..201416e3c 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -10,7 +10,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -import cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; public class ItemList { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 98ca2b328..258e355f0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -43,6 +43,9 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; +import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.commands.auto.direction; import com.bekvon.bukkit.residence.containers.Flags; @@ -54,10 +57,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import cmiLib.ActionBarTitleMessages; -import cmiLib.ItemManager.CMIMaterial; -import cmiLib.VersionChecker.Version; - public class ResidenceBlockListener implements Listener { private List MessageInformed = new ArrayList(); @@ -772,6 +771,9 @@ public void onBlockFromTo(BlockFromToEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLandDryFade(BlockFadeEvent event) { + // Moved to separate class + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + return; // Disabling listener if flag disabled globally if (!Flags.dryup.isGlobalyEnabled()) return; @@ -786,17 +788,10 @@ public void onLandDryFade(BlockFadeEvent event) { FlagPermissions perms = plugin.getPermsByLoc(event.getNewState().getLocation()); if (!perms.has(Flags.dryup, true)) { Block b = event.getBlock(); - if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_13_R1)) { - try { - b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { - e1.printStackTrace(); - } - } else { - org.bukkit.block.data.type.Farmland farm = (org.bukkit.block.data.type.Farmland) event.getBlock().getBlockData(); - farm.setMoisture(7); - event.getBlock().setBlockData(farm); - + try { + b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { + e1.printStackTrace(); } event.setCancelled(true); return; @@ -805,6 +800,9 @@ public void onLandDryFade(BlockFadeEvent event) { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onLandDryPhysics(BlockPhysicsEvent event) { + // Moved to separate class + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + return; // Disabling listener if flag disabled globally if (!Flags.dryup.isGlobalyEnabled()) return; @@ -822,16 +820,10 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); if (perms.has(Flags.dryup, FlagCombo.OnlyFalse)) { Block b = event.getBlock(); - if (Residence.getInstance().getVersionChecker().getVersion().isLower(Version.v1_13_R1)) { - try { - b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { - e1.printStackTrace(); - } - } else { - org.bukkit.block.data.type.Farmland farm = (org.bukkit.block.data.type.Farmland) event.getBlock().getBlockData(); - farm.setMoisture(7); - event.getBlock().setBlockData(farm); + try { + b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { + e1.printStackTrace(); } event.setCancelled(true); return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 606442920..6faebf434 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -49,6 +49,9 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; +import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; @@ -56,10 +59,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import cmiLib.ActionBarTitleMessages; -import cmiLib.ItemManager.CMIMaterial; -import cmiLib.VersionChecker.Version; - public class ResidenceEntityListener implements Listener { Residence plugin; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java index e133c5b3c..ea7675167 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java @@ -11,10 +11,9 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.Residence; -import cmiLib.ItemManager.CMIMaterial; - public class ResidenceFixesListener implements Listener { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 70df74892..8271c2105 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -56,6 +56,10 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; +import com.bekvon.bukkit.cmiLib.ItemReflection; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.Flags; @@ -79,11 +83,6 @@ import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; -import cmiLib.ActionBarTitleMessages; -import cmiLib.ItemManager.CMIMaterial; -import cmiLib.ItemReflection; -import cmiLib.VersionChecker.Version; - public class ResidencePlayerListener implements Listener { protected Map currentRes; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 4992662f8..1bb1ffc14 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -25,6 +25,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; +import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.Siege.ResidenceSiege; import com.bekvon.bukkit.residence.chat.ChatChannel; @@ -53,9 +55,6 @@ import com.bekvon.bukkit.residence.text.help.PageInfo; import com.bekvon.bukkit.residence.utils.Debug; -import cmiLib.ActionBarTitleMessages; -import cmiLib.RawMessage; - public class ClaimedResidence { private String resName = null; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 7c2e7b7f3..d3760ae94 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -21,6 +21,8 @@ import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; +import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeFlags; @@ -28,9 +30,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import cmiLib.ItemManager.CMIMaterial; -import cmiLib.RawMessage; - public class FlagPermissions { protected static ArrayList validFlags = new ArrayList<>(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 3eaff686f..19859d9a7 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -22,6 +22,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; import com.bekvon.bukkit.residence.containers.Flags; @@ -44,8 +45,6 @@ import com.griefcraft.lwc.LWC; import com.griefcraft.model.Protection; -import cmiLib.RawMessage; - public class ResidenceManager implements ResidenceInterface { protected SortedMap residences; protected Map>> chunkResidences; diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index 2a85b2cb2..7bfe30072 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -6,6 +6,8 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; + +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -15,8 +17,6 @@ import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.bukkit.BukkitWorld; -import cmiLib.VersionChecker.Version; - @SuppressWarnings("deprecation") public class SchematicsManager implements WESchematicManager { private Residence plugin; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index f21e28295..87df1f256 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -17,6 +17,9 @@ import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; +import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; +import com.bekvon.bukkit.cmiLib.CMIEffect; +import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.SelectionSides; @@ -26,10 +29,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; -import cmiLib.ActionBarTitleMessages; -import cmiLib.CMIEffect; -import cmiLib.CMIEffectManager.CMIParticle; - public class SelectionManager { protected Map selections; protected Server server; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index cce0e2cda..2ec8752f4 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -5,6 +5,7 @@ import org.bukkit.Material; import org.bukkit.World; +import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.containers.Flags; @@ -13,8 +14,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import cmiLib.RawMessage; - import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 9a89a3cf2..ceb27b49d 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -4,6 +4,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; @@ -13,8 +14,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.GetTime; -import cmiLib.RawMessage; - import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; diff --git a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java index ea7f6838d..b0690afae 100644 --- a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java +++ b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java @@ -15,10 +15,9 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.utils.ReflectionUtils.PackageType; -import cmiLib.ItemManager.CMIMaterial; - /** * ParticleEffect Library *

diff --git a/src/com/bekvon/bukkit/residence/utils/Utils.java b/src/com/bekvon/bukkit/residence/utils/Utils.java index ab3d82ad5..5c5127771 100644 --- a/src/com/bekvon/bukkit/residence/utils/Utils.java +++ b/src/com/bekvon/bukkit/residence/utils/Utils.java @@ -8,11 +8,10 @@ import org.bukkit.entity.Player; import org.bukkit.util.BlockIterator; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; -import cmiLib.ItemManager.CMIMaterial; - public class Utils { public Utils() { From be8d2d5f4e47aa836432196192ba1e0336fabb6c Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 21 Jan 2019 13:22:29 +0200 Subject: [PATCH 0551/1142] Lets add " for groups messages, just in case --- src/groups.yml | 8 ++++---- src/plugin.yml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/groups.yml b/src/groups.yml index 5145ec666..832388a67 100644 --- a/src/groups.yml +++ b/src/groups.yml @@ -63,10 +63,10 @@ Groups: CanChange: true # The default enter message to apply to new Residences created by players in this group. # Leaving the message blank will disable it. - DefaultEnter: Welcome %player to %residence, owned by %owner. + DefaultEnter: "Welcome %player to %residence, owned by %owner." # The default leave message to apply to new Residences created by players in this group. # Leaving the message blank will disable it. - DefaultLeave: Now leaving %residence. + DefaultLeave: "Now leaving %residence." # Options relating to the Lease system. Lease: # The maximum number of days to allow leases. @@ -141,8 +141,8 @@ Groups: ItemListAccess: true Messaging: CanChange: true - DefaultEnter: Welcome %player to %residence, owned by %owner. - DefaultLeave: Now leaving %residence. + DefaultEnter: "Welcome %player to %residence, owned by %owner." + DefaultLeave: "Now leaving %residence." Lease: MaxDays: 16 RenewIncrement: 14 diff --git a/src/plugin.yml b/src/plugin.yml index a688d1661..7df576787 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.4.3 +version: 4.8.4.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From edbe73185429a66b0d3bdfbb472f7d3f84f6512e Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 28 Jan 2019 17:41:14 +0200 Subject: [PATCH 0552/1142] Lets prevent teleportation to residence owner by group settup if needed --- src/com/bekvon/bukkit/residence/ConfigManager.java | 13 ++++++++++++- .../residence/protection/ClaimedResidence.java | 3 ++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 245cd6da9..b51f94ca4 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -57,6 +57,7 @@ public class ConfigManager { protected CMIMaterial infoTool; protected int AutoCleanUpDays; protected boolean AutoCleanUpRegenerate; + protected boolean CanTeleportIncludeOwner; protected CMIMaterial selectionTool; protected boolean adminOps; protected boolean AdminFullAccess; @@ -315,7 +316,7 @@ void UpdateFlagFile() { ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); - for (Flags fl : Flags.values()) { + for (Flags fl : Flags.values()) { guiSection.set(fl.toString(), fl.getIcon().toString()); } @@ -424,6 +425,12 @@ public void UpdateConfigFile() { "Simply equip this tool and hit a location inside the residence and it will display the info for it."); infoTool = CMIMaterial.get(c.get("Global.InfoToolId", Material.STRING.toString())); + c.addComment("Global.Optimizations.CanTeleportIncludeOwner", "This will slightly change behavior of groups file CanTeleport section which will include server owner into check", + "When this is set to false and CanTeleport set to false, players will not have option to teleport to other player residences, only to their own", + "When this is set to true and CanTeleport set to false, players will not have option to teleport to residences in general", + "Keep in mind that this only applies for commands like /res tp"); + CanTeleportIncludeOwner = c.get("Global.Optimizations.CanTeleportIncludeOwner", false); + c.addComment("Global.Optimizations.DefaultWorld", "Name of your main residence world. Usually normal starting world 'World'. Capitalization essential"); DefaultWorld = c.get("Global.Optimizations.DefaultWorld", defaultWorldName); @@ -1827,6 +1834,10 @@ public EconomyType getEconomyType() { return VaultEconomy; } + public boolean isCanTeleportIncludeOwner() { + return CanTeleportIncludeOwner; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 1bb1ffc14..f913f1be1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1227,7 +1227,8 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r boolean isAdmin = plugin.isResAdminOn(reqPlayer); boolean bypassDelay = targetPlayer.hasPermission("residence.tpdelaybypass"); - if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") && !this.isOwner(targetPlayer)) { + if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) && Residence.getInstance().getConfigManager() + .isCanTeleportIncludeOwner())) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); PermissionGroup group = rPlayer.getGroup(); if (!group.hasTpAccess()) { From 22cc745f1f6bb8ae5ebb025886ba178dd0b0bff7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Feb 2019 22:04:12 +0200 Subject: [PATCH 0553/1142] Lets increase resspawn delay for respawn flag --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 8271c2105..412db948f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1797,7 +1797,7 @@ public void run() { } return; } - }, 1L); + }, 20L); } private static Location getSafeLocation(Location loc) { From e5219694ffbffa2219626b4a5b1ef1b88bd9888a Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 12:19:40 +0300 Subject: [PATCH 0554/1142] Lets force /res auto command to take max size if its provided --- src/com/bekvon/bukkit/residence/commands/auto.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 391887815..bb634b249 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -17,7 +17,6 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; public class auto implements cmd { @@ -58,9 +57,13 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman int Z = group.getMinZ(); if (lenght > 0) { - if (lenght < group.getMaxX() && lenght > X) + if (lenght > group.getMaxX()) + X = group.getMaxX(); + else X = lenght; - if (lenght < group.getMaxZ() && lenght > Z) + if (lenght > group.getMaxZ()) + Z = group.getMaxZ(); + else Z = lenght; } From 40ef9a0876cc3b6d74896b320eeec6f76c8096fe Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 12:43:37 +0300 Subject: [PATCH 0555/1142] Lets correctly recognize new worldedit selection tool id format --- src/com/bekvon/bukkit/cmiLib/ItemManager.java | 2 +- src/com/bekvon/bukkit/residence/Residence.java | 5 ++++- .../residence/listeners/ResidencePlayerListener.java | 10 +++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/ItemManager.java b/src/com/bekvon/bukkit/cmiLib/ItemManager.java index 70fd43c44..71ae10895 100644 --- a/src/com/bekvon/bukkit/cmiLib/ItemManager.java +++ b/src/com/bekvon/bukkit/cmiLib/ItemManager.java @@ -1717,7 +1717,7 @@ public static CMIMaterial getRandom(CMIMaterial mat) { public static CMIMaterial get(String id) { Integer ids = null; Integer data = null; - id = id.replace("_", "").replace(" ", "").toLowerCase(); + id = id.replace("_", "").replace(" ", "").replace("minecraft:", "").toLowerCase(); try { ids = Integer.parseInt(id); } catch (Exception e) { diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 14dce7360..313f5eeae 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -120,6 +120,7 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.CrackShot; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.Sorting; @@ -924,7 +925,9 @@ private void setWorldEdit() { } if (smanager == null) smanager = new SelectionManager(server, this); - wepid = CMIMaterial.get(this.getWorldEdit().getConfig().getInt("wand-item")); + + wepid = CMIMaterial.get((String) this.getWorldEdit().getConfig().get("wand-item")); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit"); } else { smanager = new SelectionManager(server, this); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 412db948f..b6de2598e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1124,10 +1124,10 @@ public void onSelection(PlayerInteractEvent event) { @SuppressWarnings("deprecation") CMIMaterial heldItem = CMIMaterial.get(player.getItemInHand()); - if (!heldItem.equals(plugin.getConfigManager().getSelectionTool())) + if (heldItem != plugin.getConfigManager().getSelectionTool()) return; - if (plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) + if (plugin.getWorldEditTool() == plugin.getConfigManager().getSelectionTool()) return; if (player.getGameMode() == GameMode.CREATIVE) @@ -1536,8 +1536,8 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { if (iih == null && iiho == null) return; if (iih != null && !CMIMaterial.isDye(iih.getType()) && iiho != null && !CMIMaterial.isDye(iiho.getType())) - return; - + return; + plugin.msg(player, lm.Residence_FlagDeny, Flags.dye, res.getName()); event.setCancelled(true); } @@ -1570,7 +1570,7 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { if (iih == null && iiho == null) return; if (iih != null && !CMIMaterial.SHEARS.equals(iih.getType()) && iiho != null && !CMIMaterial.SHEARS.equals(iiho.getType())) - return; + return; plugin.msg(player, lm.Residence_FlagDeny, Flags.shear, res.getName()); event.setCancelled(true); } From 122bee92cef0b1e8dd16e26b3bd11a2f26a892ad Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 13:19:45 +0300 Subject: [PATCH 0556/1142] Lets check for NPE --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b6de2598e..873eab19c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1853,7 +1853,8 @@ public void onResidenceChange(ResidenceChangedEvent event) { ClaimedResidence res = event.getTo(); ClaimedResidence ResOld = event.getFrom(); Player player = event.getPlayer(); - + if (player == null) + return; if (res == null && ResOld != null) { if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.resetPlayerTime(); From 4c34d1f9426a3752510a6f5311a679da6445c761 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 14:08:16 +0300 Subject: [PATCH 0557/1142] Lets allow to change server_land name --- .../bekvon/bukkit/residence/LocaleManager.java | 2 +- src/com/bekvon/bukkit/residence/Residence.java | 18 ++++++++++++------ .../bukkit/residence/commands/server.java | 4 ++-- .../bekvon/bukkit/residence/containers/lm.java | 2 ++ .../bukkit/residence/economy/BOSEAdapter.java | 2 +- .../economy/EssentialsEcoAdapter.java | 2 +- .../residence/protection/ClaimedResidence.java | 4 ++-- .../residence/protection/FlagPermissions.java | 6 +++--- .../residence/protection/ResidenceManager.java | 6 +++--- .../protection/ResidencePermissions.java | 10 +++++----- .../bukkit/residence/text/help/HelpEntry.java | 2 +- .../bukkit/residence/utils/FileCleanUp.java | 2 +- 12 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 9dff96a2a..c94d8921a 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -114,7 +114,7 @@ else if (lm.getText() instanceof ArrayList) { if (lm.getComments() != null) c.addComment(lm.getPath(), lm.getComments()); } - + c.addComment("CommandHelp", ""); c.get("CommandHelp.Description", "Contains Help for Residence"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 313f5eeae..7f2583076 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -226,7 +226,7 @@ public class Residence extends JavaPlugin { private WorldGuardPlugin wg = null; private CMIMaterial wepid; - private String ServerLandname = "Server_Land"; +// private String ServerLandname = "Server_Land"; private String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; private String TempUserUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"; @@ -733,9 +733,12 @@ public void run() { pmanager = new PermissionListManager(this); + NewLanguageManager = new Language(this); + getLM().LanguageReload(); + try { this.loadYml(); - } catch (Exception e) { + } catch (Exception e) { this.getLogger().log(Level.SEVERE, "Unable to load save file", e); throw e; } @@ -795,9 +798,6 @@ public void run() { plistener.reload(); } - NewLanguageManager = new Language(this); - getLM().LanguageReload(); - AutoSelectionManager = new AutoSelection(this); try { @@ -1776,8 +1776,13 @@ public String getPlayerName(String uuid) { return null; } + @Deprecated public String getServerLandname() { - return ServerLandname; + return this.getLM().getMessage(lm.server_land); + } + + public String getServerLandName() { + return this.getLM().getMessage(lm.server_land); } public String getServerLandUUID() { @@ -1986,4 +1991,5 @@ public String[] reduceArgs(String[] args) { public int getWorldGuardVersion() { return wepVersion; } + } diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java index ec28df808..94faa4a9c 100644 --- a/src/com/bekvon/bukkit/residence/commands/server.java +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -33,8 +33,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Invalid_Residence); return true; } - res.getPermissions().setOwner(plugin.getServerLandname(), false); - plugin.msg(player, lm.Residence_OwnerChange, args[1], plugin.getServerLandname()); + res.getPermissions().setOwner(plugin.getServerLandName(), false); + plugin.msg(player, lm.Residence_OwnerChange, args[1], plugin.getServerLandName()); return true; } plugin.msg(player, lm.Invalid_Residence); diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index d44047a1c..14420704c 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -105,6 +105,8 @@ public enum lm { info_min("&e%1 &6min "), info_sec("&e%1 &6sec "), + server_land("Server_Land"), + Flag_ownColor("&4"), Flag_p1Color("&2"), Flag_p2Color("&a"), diff --git a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java index 13065690b..1240eb8f9 100644 --- a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java @@ -12,7 +12,7 @@ public class BOSEAdapter implements EconomyInterface { public BOSEAdapter(BOSEconomy p) { plugin = p; - String serverland = Residence.getInstance().getServerLandname(); + String serverland = Residence.getInstance().getServerLandName(); if (!plugin.playerRegistered(serverland, false)) { plugin.registerPlayer(serverland); } diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index 180e81911..b9caee05e 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -14,7 +14,7 @@ public class EssentialsEcoAdapter implements EconomyInterface { public EssentialsEcoAdapter(Essentials p) { plugin = p; - String serverland = Residence.getInstance().getServerLandname(); + String serverland = Residence.getInstance().getServerLandName(); if (!Economy.playerExists(serverland)) { Economy.createNPC(serverland); } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index f913f1be1..0c3b3c295 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -191,7 +191,7 @@ public RentedLand getRentedLand() { } public ClaimedResidence(String creationWorld, Residence plugin) { - this(plugin.getServerLandname(), creationWorld, plugin); + this(plugin.getServerLandName(), creationWorld, plugin); } public ClaimedResidence(String creator, String creationWorld, Residence plugin) { @@ -618,7 +618,7 @@ public boolean addSubzone(String name, Location loc1, Location loc2) { public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { if (player == null) { - return this.addSubzone(null, plugin.getServerLandname(), loc1, loc2, name, resadmin); + return this.addSubzone(null, plugin.getServerLandName(), loc1, loc2, name, resadmin); } return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index d3760ae94..082861a0e 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -773,7 +773,7 @@ private void convertFlagsUUIDsToPlayerNames() { if (keyset.length() == 36) { String uuid = keyset; if (uuid.equalsIgnoreCase(Residence.getInstance().getServerLandUUID())) - converts.put(uuid, Residence.getInstance().getServerLandname()); + converts.put(uuid, Residence.getInstance().getServerLandName()); else { String name = Residence.getInstance().getPlayerName(uuid); if (name != null) @@ -1052,7 +1052,7 @@ public String listPlayersFlags() { next = this.cachedPlayerNameUUIDs.get(next); } - if (next.equalsIgnoreCase(Residence.getInstance().getServerLandname())) + if (next.equalsIgnoreCase(Residence.getInstance().getServerLandName())) continue; if (!perms.equals("none")) { @@ -1094,7 +1094,7 @@ public RawMessage listPlayersFlagsRaw(String player, String text) { next = this.cachedPlayerNameUUIDs.get(next); } - if (next.equalsIgnoreCase(Residence.getInstance().getServerLandname())) + if (next.equalsIgnoreCase(Residence.getInstance().getServerLandName())) continue; if (!perms.equals("none")) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 19859d9a7..46d907a27 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -175,7 +175,7 @@ public List getShops() { @Override public boolean addResidence(String name, Location loc1, Location loc2) { - return this.addResidence(name, plugin.getServerLandname(), loc1, loc2); + return this.addResidence(name, plugin.getServerLandName(), loc1, loc2); } @Override @@ -1000,11 +1000,11 @@ public Map> loadMap(String worldName, Map getSubCommands(CommandSender sender, String[] args) { subCommands.add(oneRes.getName()); } } else { - ArrayList resList = Residence.getInstance().getResidenceManager().getResidenceList(Residence.getInstance().getServerLandname(), true, false, false); + ArrayList resList = Residence.getInstance().getResidenceManager().getResidenceList(Residence.getInstance().getServerLandName(), true, false, false); if (resList.size() > 0) subCommands.addAll(resList); } diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index c151c2459..292da1d1e 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -57,7 +57,7 @@ public void cleanFiles() { if (!plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) continue; - if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(plugin.getServerLandname())) + if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(plugin.getServerLandName())) continue; long lastPlayed = player.getLastPlayed(); From 4feff0a883544b5361562221a35e0d5a659987fd Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 14:32:45 +0300 Subject: [PATCH 0558/1142] Lets keep subzone capitalization --- .../bekvon/bukkit/residence/commands/subzone.java | 6 +++--- src/com/bekvon/bukkit/residence/gui/SetFlag.java | 1 - .../residence/protection/ClaimedResidence.java | 12 ++++++------ 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index 27655397f..07ad990ec 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -39,15 +39,15 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } if (plugin.getWorldEdit() != null) { - if (plugin.getWorldEdit().getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) { + if (plugin.getWorldEditTool() == plugin.getConfigManager().getSelectionTool()) { plugin.getSelectionManager().worldEdit(player); } } - if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + if (plugin.getSelectionManager().hasPlacedBoth(player)) { if (!resadmin && !plugin.hasPermission(player, "residence.create.subzone", lm.Subzone_CantCreate)) return true; - res.addSubzone(player, plugin.getSelectionManager().getPlayerLoc1(player.getName()), plugin.getSelectionManager().getPlayerLoc2(player.getName()), + res.addSubzone(player, plugin.getSelectionManager().getPlayerLoc1(player), plugin.getSelectionManager().getPlayerLoc2(player), zname, resadmin); } else { plugin.msg(player, lm.Select_Points); diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 9c41347ca..6211b3b24 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -169,7 +169,6 @@ public void recalculateResidence(ClaimedResidence res) { continue; if (!flags.contains(one.getKey())) { - Debug.D("not contain " + one.getKey()); continue; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 0c3b3c295..ecbebfe33 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -711,24 +711,24 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l newres.getPermissions().setParent(perms); } - newres.resName = name; + newres.resName = NName; newres.setCreateTime(); - ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, name, newres, newArea); + ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, NName, newres, newArea); plugin.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return false; subzones.put(name, newres); if (player != null) { - plugin.msg(player, lm.Area_Create, name); - plugin.msg(player, lm.Subzone_Create, name); + plugin.msg(player, lm.Area_Create, NName); + plugin.msg(player, lm.Subzone_Create, NName); } return true; } if (player != null) { - plugin.msg(player, lm.Subzone_CreateFail, name); + plugin.msg(player, lm.Subzone_CreateFail, NName); } return false; } @@ -1452,7 +1452,7 @@ public Map save() { root.put("Areas", areamap); Map subzonemap = new HashMap<>(); for (Entry sz : subzones.entrySet()) { - subzonemap.put(sz.getKey(), sz.getValue().save()); + subzonemap.put(sz.getValue().getResidenceName(), sz.getValue().save()); } if (!subzonemap.isEmpty()) root.put("Subzones", subzonemap); From 258dd504a03d3075c658e28c3caf034104caeabf Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 14:38:02 +0300 Subject: [PATCH 0559/1142] Error catcher for issue with WorldEdit missing methods as of new API --- .../residence/selection/SelectionManager.java | 34 +------------------ .../selection/WorldEdit7SelectionManager.java | 23 ++++++++----- 2 files changed, 15 insertions(+), 42 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 87df1f256..41cae4c4e 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -784,7 +784,7 @@ private void showParticles(List locList, Player player, int timesMore, continue; Location l = locList.get(i); -// if (plugin.isSpigot()) { + CMIParticle effect = null; if (sides) { effect = error ? plugin.getConfigManager().getOverlapSpigotSides() : plugin.getConfigManager().getSelectedSpigotSides(); @@ -795,24 +795,6 @@ private void showParticles(List locList, Player player, int timesMore, CMIEffect ef = new CMIEffect(effect); Residence.getInstance().getNms().playEffect(player, l, ef); - -// player.spigot().playEffect(l, effect, 0, 0, 0, 0, 0, 0, 1, 128); -// } else { -// if (error) { -// if (sides) -// plugin.getConfigManager().getOverlapSides().display(0, 0, 0, 0, 1, l, player); -// else -// plugin.getConfigManager().getOverlapFrame().display(0, 0, 0, 0, 1, l, player); -// } else { -// if (sides) -// plugin.getConfigManager().getSelectedSides().display(0, 0, 0, 0, 1, l, player); -// else -// plugin.getConfigManager().getSelectedFrame().display(0, 0, 0, 0, 1, l, player); -// } -// } - -// if (!sameLocation) -// trimed.add(l); } } @@ -825,18 +807,6 @@ public void vert(Player player, boolean resadmin) { } } -// @Deprecated -// public void qsky(Player player) { -// Selection selection = this.getSelection(player); -// selection.shadowSky(); -// } -// -// @Deprecated -// public void qbedrock(Player player) { -// Selection selection = this.getSelection(player); -// selection.shadowBedrock(); -// } - public void sky(Player player, boolean resadmin) { Selection selection = this.getSelection(player); selection.sky(resadmin); @@ -874,8 +844,6 @@ public void selectBySize(Player player, int xsize, int ysize, int zsize) { CuboidArea area = new CuboidArea(loc1, loc2); -// area.getlo - placeLoc1(player, loc1, false); placeLoc2(player, loc2, false); diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java index 5697cf222..59ddb7812 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java @@ -59,11 +59,14 @@ public boolean worldEditUpdate(Player player) { World w = BukkitAdapter.adapt(player.getWorld()); - plugin.getWorldEdit().getSession(player).getRegionSelector(w).selectPrimary(BlockVector3.at(getPlayerLoc1(player).getBlockX(), getPlayerLoc1(player).getBlockY(), getPlayerLoc1(player).getBlockZ()), - PermissiveSelectorLimits.getInstance()); - plugin.getWorldEdit().getSession(player).getRegionSelector(w).selectSecondary(BlockVector3.at(getPlayerLoc2(player).getBlockX(), getPlayerLoc2(player).getBlockY(), getPlayerLoc2(player).getBlockZ()), - PermissiveSelectorLimits.getInstance()); - + try { + plugin.getWorldEdit().getSession(player).getRegionSelector(w).selectPrimary(BlockVector3.at(getPlayerLoc1(player).getBlockX(), getPlayerLoc1(player).getBlockY(), getPlayerLoc1(player) + .getBlockZ()), PermissiveSelectorLimits.getInstance()); + plugin.getWorldEdit().getSession(player).getRegionSelector(w).selectSecondary(BlockVector3.at(getPlayerLoc2(player).getBlockX(), getPlayerLoc2(player).getBlockY(), getPlayerLoc2(player) + .getBlockZ()), PermissiveSelectorLimits.getInstance()); + } catch (Exception | Error e) { + return false; + } // CuboidSelection selection = new CuboidSelection(player.getWorld(), getPlayerLoc1(player), getPlayerLoc2(player)); // plugin.getWorldEdit().getSession(player).setRegionSelector(plugin.getWorldEdit().getSession(player).getSelectionWorld(), selection.getRegionSelector()); @@ -118,10 +121,12 @@ public void regenerate(CuboidArea area) { CuboidRegionSelector sellection = new CuboidRegionSelector(BukkitAdapter.adapt(area.getWorld())); // set up selector - - sellection.selectPrimary(BlockVector3.at(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()), PermissiveSelectorLimits.getInstance()); - sellection.selectSecondary(BlockVector3.at(area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()), PermissiveSelectorLimits.getInstance()); - + try { + sellection.selectPrimary(BlockVector3.at(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()), PermissiveSelectorLimits.getInstance()); + sellection.selectSecondary(BlockVector3.at(area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()), PermissiveSelectorLimits.getInstance()); + } catch (Exception | Error e) { + return; + } // set up CuboidSelection CuboidRegion cuboid = sellection.getIncompleteRegion(); From fb5768b3d95cbec86416709a885d8d46fb08fda3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 15:19:59 +0300 Subject: [PATCH 0560/1142] Fix for flag description not showing up in a set gui --- src/com/bekvon/bukkit/residence/gui/SetFlag.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 6211b3b24..1a8afaa01 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -260,8 +260,8 @@ public void recalculateResidence(ClaimedResidence res) { } lore.add(Residence.getInstance().msg(lm.General_FlagState, variable)); - if (description.containsKey(one.getKey())) - lore.addAll(description.get(one.getKey())); + if (description.containsKey(flag)) + lore.addAll(description.get(flag)); lore.addAll(Residence.getInstance().msgL(lm.Gui_Actions)); @@ -416,8 +416,8 @@ public void recalculatePlayer(ClaimedResidence res) { } lore.add(Residence.getInstance().msg(lm.General_FlagState, variable)); - if (description.containsKey(one.getKey())) - lore.addAll(description.get(one.getKey())); + if (description.containsKey(flag)) + lore.addAll(description.get(flag)); lore.addAll(Residence.getInstance().msgL(lm.Gui_Actions)); From c88a3c6e7d1851c023d7f1b608bb70cc109298c1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 16:29:28 +0300 Subject: [PATCH 0561/1142] Fix for FAWE made for 1.13 servers and worldguard issue --- src/com/bekvon/bukkit/residence/Residence.java | 12 +++++++----- .../residence/protection/ResidenceManager.java | 2 ++ .../selection/WorldEdit7SelectionManager.java | 10 +--------- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 7f2583076..a84aa6763 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -738,7 +738,7 @@ public void run() { try { this.loadYml(); - } catch (Exception e) { + } catch (Exception e) { this.getLogger().log(Level.SEVERE, "Unable to load save file", e); throw e; } @@ -916,8 +916,9 @@ private void setWorldEdit() { try { Class.forName("com.sk89q.worldedit.bukkit.selections.Selection"); smanager = new WorldEditSelectionManager(server, this); - if (wep != null) + if (wep != null) { SchematicManager = new SchematicsManager(this); + } } catch (ClassNotFoundException e) { smanager = new WorldEdit7SelectionManager(server, this); if (wep != null) @@ -966,7 +967,7 @@ private void setWorldGuard() { // return; // } wg = (WorldGuardPlugin) wgplugin; - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldGuard"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldGuard " + wgplugin.getDescription().getVersion()); } } @@ -1913,8 +1914,9 @@ public WorldGuardInterface getWorldGuardUtil() { int version = 6; try { - version = Integer.parseInt(wep.getDescription().getVersion().substring(0, 1)); - } catch (Exception e) { + version = Integer.parseInt(wg.getDescription().getVersion().substring(0, 1)); + Debug.D(version); + } catch (Exception | Error e) { } if (version >= 7) { wepVersion = version; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 46d907a27..f4cac91dd 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -541,6 +541,8 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole temploc.setY(y); for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { temploc.setZ(z); + if (!temploc.getChunk().isLoaded()) + temploc.getChunk().load(); if (plugin.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getType().getId())) { temploc.getBlock().setType(Material.AIR); } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java index 59ddb7812..13e8d14f0 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java @@ -7,20 +7,14 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.sk89q.worldedit.IncompleteRegionException; -import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldedit.extension.platform.permission.ActorSelectorLimits; import com.sk89q.worldedit.math.BlockVector3; -import com.sk89q.worldedit.math.Vector3; -//import com.sk89q.worldedit.bukkit.selections.CuboidSelection; -//import com.sk89q.worldedit.bukkit.selections.Selection; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.selector.CuboidRegionSelector; import com.sk89q.worldedit.regions.selector.limit.PermissiveSelectorLimits; -import com.sk89q.worldedit.regions.selector.limit.SelectorLimits; import com.sk89q.worldedit.world.World; public class WorldEdit7SelectionManager extends SelectionManager { @@ -67,9 +61,7 @@ public boolean worldEditUpdate(Player player) { } catch (Exception | Error e) { return false; } -// CuboidSelection selection = new CuboidSelection(player.getWorld(), getPlayerLoc1(player), getPlayerLoc2(player)); - -// plugin.getWorldEdit().getSession(player).setRegionSelector(plugin.getWorldEdit().getSession(player).getSelectionWorld(), selection.getRegionSelector()); + return true; } From acec4fecf39b45e3fd8093079d59f012d05eff8a Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 16:30:00 +0300 Subject: [PATCH 0562/1142] Revert "Fix for FAWE made for 1.13 servers and worldguard issue" This reverts commit c88a3c6e7d1851c023d7f1b608bb70cc109298c1. --- src/com/bekvon/bukkit/residence/Residence.java | 12 +++++------- .../residence/protection/ResidenceManager.java | 2 -- .../selection/WorldEdit7SelectionManager.java | 10 +++++++++- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index a84aa6763..7f2583076 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -738,7 +738,7 @@ public void run() { try { this.loadYml(); - } catch (Exception e) { + } catch (Exception e) { this.getLogger().log(Level.SEVERE, "Unable to load save file", e); throw e; } @@ -916,9 +916,8 @@ private void setWorldEdit() { try { Class.forName("com.sk89q.worldedit.bukkit.selections.Selection"); smanager = new WorldEditSelectionManager(server, this); - if (wep != null) { + if (wep != null) SchematicManager = new SchematicsManager(this); - } } catch (ClassNotFoundException e) { smanager = new WorldEdit7SelectionManager(server, this); if (wep != null) @@ -967,7 +966,7 @@ private void setWorldGuard() { // return; // } wg = (WorldGuardPlugin) wgplugin; - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldGuard " + wgplugin.getDescription().getVersion()); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldGuard"); } } @@ -1914,9 +1913,8 @@ public WorldGuardInterface getWorldGuardUtil() { int version = 6; try { - version = Integer.parseInt(wg.getDescription().getVersion().substring(0, 1)); - Debug.D(version); - } catch (Exception | Error e) { + version = Integer.parseInt(wep.getDescription().getVersion().substring(0, 1)); + } catch (Exception e) { } if (version >= 7) { wepVersion = version; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index f4cac91dd..46d907a27 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -541,8 +541,6 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole temploc.setY(y); for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { temploc.setZ(z); - if (!temploc.getChunk().isLoaded()) - temploc.getChunk().load(); if (plugin.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getType().getId())) { temploc.getBlock().setType(Material.AIR); } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java index 13e8d14f0..59ddb7812 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java @@ -7,14 +7,20 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.sk89q.worldedit.IncompleteRegionException; +import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldedit.extension.platform.permission.ActorSelectorLimits; import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.math.Vector3; +//import com.sk89q.worldedit.bukkit.selections.CuboidSelection; +//import com.sk89q.worldedit.bukkit.selections.Selection; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.selector.CuboidRegionSelector; import com.sk89q.worldedit.regions.selector.limit.PermissiveSelectorLimits; +import com.sk89q.worldedit.regions.selector.limit.SelectorLimits; import com.sk89q.worldedit.world.World; public class WorldEdit7SelectionManager extends SelectionManager { @@ -61,7 +67,9 @@ public boolean worldEditUpdate(Player player) { } catch (Exception | Error e) { return false; } - +// CuboidSelection selection = new CuboidSelection(player.getWorld(), getPlayerLoc1(player), getPlayerLoc2(player)); + +// plugin.getWorldEdit().getSession(player).setRegionSelector(plugin.getWorldEdit().getSession(player).getSelectionWorld(), selection.getRegionSelector()); return true; } From 12da97f4ecd792f5a77ae0b0ce71f655472c042a Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 16:38:22 +0300 Subject: [PATCH 0563/1142] Lets load chunks if they are not loaded when cleaning residence area. --- src/com/bekvon/bukkit/residence/Residence.java | 12 ++++++------ .../residence/protection/ResidenceManager.java | 2 ++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 7f2583076..f2e7d04fa 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -738,7 +738,7 @@ public void run() { try { this.loadYml(); - } catch (Exception e) { + } catch (Exception e) { this.getLogger().log(Level.SEVERE, "Unable to load save file", e); throw e; } @@ -928,7 +928,7 @@ private void setWorldEdit() { wepid = CMIMaterial.get((String) this.getWorldEdit().getConfig().get("wand-item")); - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit " + this.getWorldEdit().getDescription().getVersion()); } else { smanager = new SelectionManager(server, this); Bukkit.getConsoleSender().sendMessage(getPrefix() + " WorldEdit NOT found!"); @@ -966,7 +966,7 @@ private void setWorldGuard() { // return; // } wg = (WorldGuardPlugin) wgplugin; - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldGuard"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldGuard " + wg.getDescription().getVersion()); } } @@ -1913,8 +1913,8 @@ public WorldGuardInterface getWorldGuardUtil() { int version = 6; try { - version = Integer.parseInt(wep.getDescription().getVersion().substring(0, 1)); - } catch (Exception e) { + version = Integer.parseInt(wg.getDescription().getVersion().substring(0, 1)); + } catch (Exception | Error e) { } if (version >= 7) { wepVersion = version; @@ -1962,7 +1962,7 @@ public boolean hasPermission(CommandSender sender, String permision, Boolean out outMsg = message; RawMessage rm = new RawMessage(); - rm.add(outMsg, "§2" + permision); + rm.add(outMsg, "§2" + permision); rm.show(sender); ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); console.sendMessage(ChatColor.RED + sender.getName() + " No permission -> " + permision); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 46d907a27..f4cac91dd 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -541,6 +541,8 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole temploc.setY(y); for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { temploc.setZ(z); + if (!temploc.getChunk().isLoaded()) + temploc.getChunk().load(); if (plugin.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getType().getId())) { temploc.getBlock().setType(Material.AIR); } From a03d65dc145aca87dbb48445cb5327a9d5cd79e6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 16:41:45 +0300 Subject: [PATCH 0564/1142] Lets have some multiverse plugins as softdepend --- src/com/bekvon/bukkit/residence/Residence.java | 11 ----------- src/plugin.yml | 2 +- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f2e7d04fa..66e54d29a 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -954,17 +954,6 @@ public GameManagement getKingdomsManager() { private void setWorldGuard() { Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); if (wgplugin != null) { -// try { -// Class.forName("com.sk89q.worldedit.BlockVector"); -// Class.forName("com.sk89q.worldguard.protection.ApplicableRegionSet"); -// Class.forName("com.sk89q.worldguard.protection.managers.RegionManager"); -// Class.forName("com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion"); -// Class.forName("com.sk89q.worldguard.protection.regions.ProtectedRegion"); -// } catch (Exception e) { -// Bukkit.getConsoleSender().sendMessage(getPrefix() + ChatColor.RED -// + " Found WorldGuard, but its not supported by Residence plugin. Please update WorldGuard to latest version"); -// return; -// } wg = (WorldGuardPlugin) wgplugin; Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldGuard " + wg.getDescription().getVersion()); } diff --git a/src/plugin.yml b/src/plugin.yml index 7df576787..d87eaee4b 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -5,7 +5,7 @@ website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 authors: [bekvon,nate302,t00thpick1] -softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,My Worlds,dynmap,LWC,Kingdoms,PlaceholderAPI] +softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: From 9c7aea5b42ba78d389bab2b1f34c7638fec2173c Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 16:47:54 +0300 Subject: [PATCH 0565/1142] Lets check if residence is still existing for res shop list --- src/com/bekvon/bukkit/residence/commands/shop.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 91b1ea8ea..558876fff 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -154,9 +154,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman for (Entry one : ShopList.entrySet()) { if (!pi.isEntryOk()) continue; - if (pi.isBreak()) + if (pi.isBreak()) break; - + ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); + if (res == null) + continue; + Vote vote = plugin.getShopSignUtilManager().getAverageVote(one.getKey()); String votestat = ""; @@ -164,8 +167,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListLiked, plugin.getShopSignUtilManager().getLikes(one.getKey())); } else votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListVoted, vote.getVote(), vote.getAmount()); - ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); - String owner = plugin.getResidenceManager().getByName(one.getKey()).getOwner(); + + String owner = res.getOwner(); String message = plugin.msg(lm.Shop_List, pi.getPositionForOutput(), one.getKey(), owner, votestat); String desc = res.getShopDesc() == null ? plugin.msg(lm.Shop_NoDesc) : plugin.msg( From f47342792000031c430604ba417b5d3a937f9e27 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 17:04:16 +0300 Subject: [PATCH 0566/1142] Lets catch land dry event exceptions if they happen --- .../bukkit/residence/allNms/v1_13Events.java | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java index 72a0e2a87..9cdfebe24 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java @@ -15,6 +15,7 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; public class v1_13Events implements Listener { @@ -64,26 +65,26 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; + try { + CMIMaterial mat = CMIMaterial.get(event.getChangedType()); + if (mat != CMIMaterial.FARMLAND) + return; - if (!event.getBlock().getChunk().isLoaded()) - return; - - CMIMaterial mat = CMIMaterial.get(event.getBlock().getType()); - if (!mat.equals(CMIMaterial.FARMLAND)) - return; - - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (perms.has(Flags.dryup, FlagCombo.OnlyFalse)) { - Block b = event.getBlock(); - try { - BlockData data = b.getBlockData(); - Farmland farm = (Farmland) data; - farm.setMoisture(7); - b.setBlockData(farm); - } catch (NoClassDefFoundError e) { + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (perms.has(Flags.dryup, FlagCombo.OnlyFalse)) { + Block b = event.getBlock(); + try { + BlockData data = b.getBlockData(); + Farmland farm = (Farmland) data; + farm.setMoisture(7); + b.setBlockData(farm); + } catch (NoClassDefFoundError e) { + } + event.setCancelled(true); + return; } - event.setCancelled(true); - return; + } catch (Exception | Error e) { + } } } From fd3609c09abfd0cfd7241356424881a8d45e4d07 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 18:13:33 +0300 Subject: [PATCH 0567/1142] Lets allow to define default rented area flags --- .../bukkit/residence/ConfigManager.java | 17 +- .../residence/economy/rent/RentManager.java | 2 +- .../permissions/PermissionGroup.java | 34 ++- .../protection/ResidencePermissions.java | 14 + src/flags.yml | 278 ++++++++---------- 5 files changed, 188 insertions(+), 157 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index b51f94ca4..4d58a9a3c 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -9,6 +9,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import org.bukkit.Bukkit; @@ -132,6 +133,7 @@ public class ConfigManager { protected int FeedInterval; protected int VoteRangeTo; protected FlagPermissions globalCreatorDefaults; + protected FlagPermissions globalRentedDefaults; protected FlagPermissions globalResidenceDefaults; protected Map globalGroupDefaults; protected String language; @@ -255,6 +257,7 @@ public ConfigManager(Residence plugin) { // FileConfiguration config = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "config.yml")); this.plugin = plugin; globalCreatorDefaults = new FlagPermissions(); + globalRentedDefaults = new FlagPermissions(); globalResidenceDefaults = new FlagPermissions(); globalGroupDefaults = new HashMap(); UpdateConfigFile(); @@ -314,6 +317,13 @@ void UpdateFlagFile() { if (!conf.isConfigurationSection("Global.FlagGui")) conf.createSection("Global.FlagGui"); + if (!conf.isConfigurationSection("Global.RentedDefault")) { + for (Entry one : this.getGlobalCreatorDefaultFlags().getFlags().entrySet()) { + conf.set("Global.RentedDefault." + one.getKey(), one.getValue()); + } + conf.set("Global.RentedDefault.admin", true); + } + ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); for (Flags fl : Flags.values()) { @@ -427,7 +437,7 @@ public void UpdateConfigFile() { c.addComment("Global.Optimizations.CanTeleportIncludeOwner", "This will slightly change behavior of groups file CanTeleport section which will include server owner into check", "When this is set to false and CanTeleport set to false, players will not have option to teleport to other player residences, only to their own", - "When this is set to true and CanTeleport set to false, players will not have option to teleport to residences in general", + "When this is set to true and CanTeleport set to false, players will not have option to teleport to residences in general", "Keep in mind that this only applies for commands like /res tp"); CanTeleportIncludeOwner = c.get("Global.Optimizations.CanTeleportIncludeOwner", false); @@ -1140,6 +1150,7 @@ public void loadFlags() { } globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", flags.getConfigurationSection("Global")); + globalRentedDefaults = FlagPermissions.parseFromConfigNode("RentedDefault", flags.getConfigurationSection("Global")); globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", flags.getConfigurationSection("Global")); loadGroups(); } @@ -1602,6 +1613,10 @@ public FlagPermissions getGlobalCreatorDefaultFlags() { return globalCreatorDefaults; } + public FlagPermissions getGlobalRentedDefaultFlags() { + return globalRentedDefaults; + } + public FlagPermissions getGlobalResidenceDefaultFlags() { return globalResidenceDefaults; } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index a8b7fac91..f5370ed21 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -304,7 +304,7 @@ public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean r res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); - res.getPermissions().setPlayerFlag(player.getName(), "admin", FlagState.TRUE); + res.getPermissions().applyDefaultRentedFlags(); plugin.msg(player, lm.Residence_RentSuccess, res.getName(), land.days); if (plugin.getSchematicManager() != null && diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 46e4d983d..8ba252823 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -42,6 +42,7 @@ public class PermissionGroup { protected int maxSubzones; protected FlagPermissions flagPerms; protected Map creatorDefaultFlags; +// protected Map rentedDefaultFlags; protected Map> groupDefaultFlags; protected Map residenceDefaultFlags; protected boolean messageperms; @@ -70,6 +71,7 @@ public class PermissionGroup { public PermissionGroup(String name) { flagPerms = new FlagPermissions(); creatorDefaultFlags = new HashMap(); +// rentedDefaultFlags = new HashMap(); residenceDefaultFlags = new HashMap(); groupDefaultFlags = new HashMap>(); groupname = name; @@ -114,13 +116,12 @@ private void parseGroup(ConfigurationSection limits) { ymax = limits.getInt("Residence.MaxUpDown", 0); ymin = limits.getInt("Residence.MinUpDown", 0); ymin = ymin > ymax ? ymax : ymin; - - if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()){ + + if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { ymin = 0; ymax = 255; } - - + zmax = limits.getInt("Residence.MaxNorthSouth", 0); zmin = limits.getInt("Residence.MinNorthSouth", 0); zmin = zmin > zmax ? zmax : zmin; @@ -196,8 +197,27 @@ private void parseGroup(ConfigurationSection limits) { boolean access = limits.getBoolean("Flags.CreatorDefault." + flagname, false); creatorDefaultFlags.put(flagname, access); } - } + +// node = limits.getConfigurationSection("Flags.RentedDefault"); +// if (node == null) { +// Object defaultRented = limits.get("Flags.CreatorDefault"); +// if (defaultRented != null) { +// limits.set("Flags.RentedDefault", defaultRented); +// } +// node = limits.getConfigurationSection("Flags.RentedDefault"); +// } +// if (node != null) { +// flags = node.getKeys(false); +// if (flags != null) { +// Iterator flagit = flags.iterator(); +// while (flagit.hasNext()) { +// String flagname = flagit.next(); +// rentedDefaultFlags.put(flagname, limits.getBoolean("Flags.RentedDefault." + flagname, false)); +// } +// } +// } + node = limits.getConfigurationSection("Flags.Default"); if (node != null) { flags = node.getKeys(false); @@ -384,6 +404,10 @@ public Set> getDefaultCreatorFlags() { return creatorDefaultFlags.entrySet(); } +// public Set> getDefaultRentedFlags() { +// return rentedDefaultFlags.entrySet(); +// } + public Set>> getDefaultGroupFlags() { return groupDefaultFlags.entrySet(); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 15808417a..372e355c9 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -510,6 +510,20 @@ public void applyDefaultFlags() { } } + public void applyDefaultRentedFlags() { + if (!this.residence.isRented()) + return; + FlagPermissions dflags = Residence.getInstance().getConfigManager().getGlobalRentedDefaultFlags(); + Map dgflags = dflags.getFlags(); + if (this.residence.rentedland == null || this.residence.rentedland.player == null) + return; + this.removeAllPlayerFlags(this.residence.rentedland.player); + String player = this.residence.rentedland.player; + for (Entry entry : dgflags.entrySet()) { + this.setPlayerFlag(player, entry.getKey(), entry.getValue() ? FlagState.TRUE : FlagState.FALSE); + } + } + public boolean setOwner(Player player, boolean resetFlags) { ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, player); diff --git a/src/flags.yml b/src/flags.yml index 20929234b..b4f4ab949 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -68,156 +68,119 @@ Global: bank: false # This sets GUI items to represent each flag, if not given, then gray wool will be used FlagGui: - animalkilling: - Id: 365 - Data: 0 - animals: - Id: 383 - Data: 90 - bed: - Id: 355 - Data: 0 - brew: - Id: 379 - Data: 0 - build: - Id: 45 - Data: 0 - burn: - Id: 50 - Data: 0 - button: - Id: 143 - Data: 0 - cake: - Id: 354 - Data: 0 - canimals: - Id: 383 - Data: 91 - chat: - Id: 386 - Data: 0 - cmonsters: - Id: 383 - Data: 50 - command: - Id: 137 - Data: 0 - container: - Id: 342 - Data: 0 - creeper: - Id: 383 - Data: 50 - destroy: - Id: 121 - Data: 0 - diode: - Id: 356 - Data: 0 - door: - Id: 324 - Data: 0 - enchant: - Id: 116 - Data: 0 - explode: - Id: 407 - Data: 0 - fireball: - Id: 385 - Data: 0 - firespread: - Id: 377 - Data: 0 - flow: - Id: 111 - Data: 0 - healing: - Id: 373 - Data: 0 - ignite: - Id: 259 - Data: 0 - lavaflow: - Id: 327 - Data: 0 - leash: - Id: 420 - Data: 0 - lever: - Id: 69 - Data: 0 - mobkilling: - Id: 367 - Data: 0 - monsters: - Id: 52 - Data: 0 - move: - Id: 301 - Data: 0 - nanimals: - Id: 383 - Data: 92 - nmonsters: - Id: 383 - Data: 51 - nofly: - Id: 171 - Data: 1 - nomobs: - Id: 166 - Data: 0 - note: - Id: 25 - Data: 0 - piston: - Id: 33 - Data: 0 - place: - Id: 169 - Data: 0 - pvp: - Id: 268 - Data: 0 - sanimals: - Id: 383 - Data: 101 - shear: - Id: 359 - Data: 0 - smonsters: - Id: 383 - Data: 54 - subzone: - Id: 160 - Data: 7 - table: - Id: 58 - Data: 0 - tnt: - Id: 46 - Data: 0 - tp: - Id: 120 - Data: 0 - trade: - Id: 388 - Data: 0 - trample: - Id: 3 - Data: 0 - use: - Id: 70 - Data: 0 - vehicledestroy: - Id: 328 - Data: 0 - waterflow: - Id: 326 - Data: 0 + animalkilling: CHICKEN + animals: PIG_SPAWN_EGG + bed: WHITE_BED + brew: BREWING_STAND + build: BRICKS + burn: TORCH + button: OAK_BUTTON + cake: CAKE + canimals: SHEEP_SPAWN_EGG + chat: WRITABLE_BOOK + cmonsters: CREEPER_SPAWN_EGG + command: COMMAND_BLOCK + container: CHEST_MINECART + creeper: CREEPER_SPAWN_EGG + destroy: END_STONE + diode: REPEATER + door: OAK_DOOR + enchant: ENCHANTING_TABLE + explode: TNT_MINECART + fireball: FIRE_CHARGE + firespread: BLAZE_POWDER + flow: LILY_PAD + healing: POTION + ignite: FLINT_AND_STEEL + lavaflow: LAVA_BUCKET + leash: LEAD + lever: LEVER + mobkilling: ROTTEN_FLESH + monsters: SPAWNER + move: LEATHER_BOOTS + nanimals: COW_SPAWN_EGG + nmonsters: SKELETON_SPAWN_EGG + nofly: ORANGE_CARPET + nomobs: BARRIER + note: NOTE_BLOCK + piston: PISTON + place: SEA_LANTERN + pvp: WOODEN_SWORD + sanimals: RABBIT_SPAWN_EGG + shear: SHEARS + smonsters: ZOMBIE_SPAWN_EGG + subzone: GRAY_STAINED_GLASS_PANE + table: CRAFTING_TABLE + tnt: TNT + tp: END_PORTAL_FRAME + trade: EMERALD + trample: DIRT + use: STONE_PRESSURE_PLATE + vehicledestroy: MINECART + waterflow: WATER_BUCKET + anvil: ANVIL + admin: BEDROCK + anvilbreak: ANVIL + backup: BOOKSHELF + bank: ENDER_CHEST + beacon: BEACON + chorustp: CHORUS_FRUIT + commandblock: COMMAND_BLOCK + coords: COMPASS + craft: STONE + dragongrief: DIRT + day: DANDELION + dye: ORANGE_DYE + damage: GOLDEN_SWORD + decay: OAK_LEAVES + dryup: BLUE_STAINED_GLASS_PANE + egg: EGG + enderpearl: ENDER_PEARL + fallinprotection: SAND + falldamage: LEATHER_BOOTS + feed: COOKED_BEEF + friendlyfire: SUNFLOWER + flowinprotection: OAK_BOAT + flowerpot: FLOWER_POT + grow: WHEAT_SEEDS + glow: SEA_LANTERN + hotfloor: MAGMA_BLOCK + hidden: GLASS_PANE + hook: FISHING_ROD + iceform: ICE + icemelt: ICE + itemdrop: FEATHER + itempickup: GUNPOWDER + jump2: SLIME_BLOCK + jump3: SLIME_BLOCK + keepinv: LEATHER_HELMET + keepexp: GOLDEN_APPLE + mobexpdrop: MELON_SEEDS + mobitemdrop: COCOA_BEANS + night: BLACK_WOOL + fly: ORANGE_CARPET + nodurability: ANVIL + overridepvp: IRON_SWORD + pressure: LIGHT_WEIGHTED_PRESSURE_PLATE + pistonprotection: STICKY_PISTON + rain: BLUE_ORCHID + redstone: SUNFLOWER + respawn: SUNFLOWER + riding: SADDLE + shoot: ARROW + sun: SUNFLOWER + shop: ITEM_FRAME + snowtrail: SNOW + spread: SNOWBALL + snowball: SNOWBALL + trusted: STONE + witherspawn: WITHER_SKELETON_SKULL + witherdamage: WITHER_SKELETON_SKULL + witherdestruction: WITHER_SKELETON_SKULL + wspeed1: POTION + wspeed2: POTION + testing: WHITE_WOOL + phantomspawn: BROWN_WOOL # These are default flags applied to all residences from any user group. ResidenceDefault: build: false @@ -251,6 +214,21 @@ Global: trade: true shear: true leash: true + # These are default flags applied to the residence renter of any group. + RentedDefault: + container: true + ignite: true + move: true + trade: true + mobkilling: true + shear: true + build: true + use: true + destroy: true + vehicledestroy: true + leash: true + animalkilling: true + admin: true # These are default group flags applied to a residence made by a user of any group. GroupDefault: #default: #group name From 1a5e069008ecac9d045321d4da85a153fd7df2d6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Apr 2019 20:22:32 +0300 Subject: [PATCH 0568/1142] Lets check for old WE wand id format --- .../bekvon/bukkit/residence/Residence.java | 48 +++++++++++-------- src/plugin.yml | 2 +- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 66e54d29a..f3d0e0337 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -910,28 +910,34 @@ public boolean validName(String name) { } private void setWorldEdit() { - Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); - if (plugin != null) { - this.wep = (WorldEditPlugin) plugin; - try { - Class.forName("com.sk89q.worldedit.bukkit.selections.Selection"); - smanager = new WorldEditSelectionManager(server, this); - if (wep != null) - SchematicManager = new SchematicsManager(this); - } catch (ClassNotFoundException e) { - smanager = new WorldEdit7SelectionManager(server, this); - if (wep != null) - SchematicManager = new Schematics7Manager(this); - } - if (smanager == null) - smanager = new SelectionManager(server, this); - - wepid = CMIMaterial.get((String) this.getWorldEdit().getConfig().get("wand-item")); + try { + Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); + if (plugin != null) { + this.wep = (WorldEditPlugin) plugin; + try { + Class.forName("com.sk89q.worldedit.bukkit.selections.Selection"); + smanager = new WorldEditSelectionManager(server, this); + if (wep != null) + SchematicManager = new SchematicsManager(this); + } catch (ClassNotFoundException e) { + smanager = new WorldEdit7SelectionManager(server, this); + if (wep != null) + SchematicManager = new Schematics7Manager(this); + } + if (smanager == null) + smanager = new SelectionManager(server, this); + if (this.getWorldEdit().getConfig().isInt("wand-item")) + wepid = CMIMaterial.get(this.getWorldEdit().getConfig().getInt("wand-item")); + else + wepid = CMIMaterial.get((String) this.getWorldEdit().getConfig().get("wand-item")); - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit " + this.getWorldEdit().getDescription().getVersion()); - } else { - smanager = new SelectionManager(server, this); - Bukkit.getConsoleSender().sendMessage(getPrefix() + " WorldEdit NOT found!"); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit " + this.getWorldEdit().getDescription().getVersion()); + } else { + smanager = new SelectionManager(server, this); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " WorldEdit NOT found!"); + } + } catch (Exception | Error e) { + e.printStackTrace(); } } diff --git a/src/plugin.yml b/src/plugin.yml index d87eaee4b..76303c8dc 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.4.4 +version: 4.8.4.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 893276d1a5826ed8a5e4fdd637e1341354c15daa Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 17 Apr 2019 11:18:08 +0300 Subject: [PATCH 0569/1142] Fix for bone meal usage on grass blocks, grass and saplings --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 4 +++- src/plugin.yml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 873eab19c..1dd5259af 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1264,7 +1264,9 @@ public void onPlayerInteract(PlayerInteractEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); if (heldItem != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (heldItem.isDye()) { - if (heldItem.equals(CMIMaterial.BONE_MEAL) && block.getType() == Material.GRASS || heldItem.equals(CMIMaterial.COCOA_BEANS) && blockM.equals(CMIMaterial.JUNGLE_WOOD)) { + CMIMaterial btype = CMIMaterial.get(block); + if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || btype == CMIMaterial.GRASS || btype.isSapling()) || + heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD) { perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player, Flags.build, true)) { plugin.msg(player, lm.Flag_Deny, Flags.build); diff --git a/src/plugin.yml b/src/plugin.yml index 76303c8dc..e8af3de3e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.4.5 +version: 4.8.4.6 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From cef15587b475d721aae69c4927a37ca42ef72c0c Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 17 Apr 2019 11:41:07 +0300 Subject: [PATCH 0570/1142] Only check if its player or commandblock, everything else is fine --- .../bukkit/residence/commands/removeworld.java | 12 ++++++------ .../residence/protection/ResidenceManager.java | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index eb63dee1d..60f0bec2f 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -3,9 +3,10 @@ import java.util.Arrays; import org.bukkit.ChatColor; +import org.bukkit.command.BlockCommandSender; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; @@ -20,12 +21,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (args.length != 2) return false; - - if (sender instanceof ConsoleCommandSender) { - plugin.getResidenceManager().removeAllFromWorld(sender, args[1]); - return true; + if (sender instanceof Player || sender instanceof BlockCommandSender) { + sender.sendMessage(ChatColor.RED + "MUST be run from console."); + return false; } - sender.sendMessage(ChatColor.RED + "MUST be run from console."); + plugin.getResidenceManager().removeAllFromWorld(sender, args[1]); return true; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index f4cac91dd..515067c59 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -584,7 +584,7 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole plugin.getTransactionManager().removeFromSale(name); if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { - double chargeamount = Math.ceil(res.getTotalSize() * res.getBlockSellPrice()); + double chargeamount = res.getWorth(); if (player != null) plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); else if (rPlayer != null) From b58e2e80efabd22a35ed592b5e74531b80e74d9f Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 17 Apr 2019 11:47:14 +0300 Subject: [PATCH 0571/1142] Fix for wrong formating in flags.yml file --- src/flags.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/flags.yml b/src/flags.yml index b4f4ab949..c1ffeafec 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -215,7 +215,7 @@ Global: shear: true leash: true # These are default flags applied to the residence renter of any group. - RentedDefault: + RentedDefault: container: true ignite: true move: true From 892cd29c44be15f3e1f48e35debc79fdd640fc4f Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 17 Apr 2019 15:01:10 +0300 Subject: [PATCH 0572/1142] Fix for rented signs top 2 lines --- src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index f99e02c99..7cff99c22 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -273,10 +273,10 @@ public boolean SignUpdate(Signs Sign) { else endDate = plugin.msg(lm.Sign_RentedAutorenewFalse, endDate); - String TopLine = rented ? endDate : plugin.msg(lm.Sign_ForRentTopLine); + String TopLine = rented ? plugin.msg(lm.Sign_RentedTopLine, endDate) : plugin.msg(lm.Sign_ForRentTopLine); sign.setLine(0, TopLine); - String infoLine = plugin.msg(lm.Sign_ForRentPriceLine, plugin.getRentManager().getCostOfRent(res), plugin + String infoLine = plugin.msg(rented ? lm.Sign_RentedPriceLine : lm.Sign_ForRentPriceLine, plugin.getRentManager().getCostOfRent(res), plugin .getRentManager().getRentDays(res), plugin.getRentManager().getRentableRepeatable(res)); sign.setLine(1, infoLine); From e18ce56053be6b7c8aea1262fc750e341c406264 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 10:17:38 +0300 Subject: [PATCH 0573/1142] Lets fix tabcomplete --- src/com/bekvon/bukkit/residence/Residence.java | 8 ++++---- .../residence/selection/SelectionManager.java | 10 +++++----- .../selection/WorldEditSelectionManager.java | 13 ++++++------- .../bekvon/bukkit/residence/utils/TabComplete.java | 3 +-- src/plugin.yml | 2 +- 5 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f3d0e0337..bcb5eb66e 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -487,10 +487,10 @@ public void onEnable() { this.getCommand("res").setExecutor(getCommandManager()); this.getCommand("resadmin").setExecutor(getCommandManager()); this.getCommand("residence").setExecutor(getCommandManager()); - - this.getCommand("res").setTabCompleter(new TabComplete()); - this.getCommand("resadmin").setTabCompleter(new TabComplete()); - this.getCommand("residence").setTabCompleter(new TabComplete()); + TabComplete tab = new TabComplete(); + this.getCommand("res").setTabCompleter(tab); + this.getCommand("resadmin").setTabCompleter(tab); + this.getCommand("residence").setTabCompleter(tab); // Residence.getConfigManager().UpdateConfigFile(); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 41cae4c4e..293be509d 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -321,12 +321,12 @@ public void updateLocations(Player player, Location loc1, Location loc2) { } public void updateLocations(Player player, Location loc1, Location loc2, boolean force) { - if (loc1 != null && loc2 != null) { - Selection selection = getSelection(player); + Selection selection = getSelection(player); + if (loc1 != null) selection.setBaseLoc1(loc1); + if (loc2 != null) selection.setBaseLoc2(loc2); - this.afterSelectionUpdate(player, force); - } + this.afterSelectionUpdate(player, force); } public void placeLoc1(Player player, Location loc) { @@ -360,7 +360,7 @@ public void afterSelectionUpdate(Player player) { } public void afterSelectionUpdate(Player player, boolean force) { - if (!hasPlacedBoth(player)) + if (!this.hasPlacedBoth(player)) return; Visualizer v = vMap.get(player.getUniqueId()); diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 46f3c2b09..1cf7758eb 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -1,21 +1,20 @@ package com.bekvon.bukkit.residence.selection; +import java.lang.reflect.InvocationTargetException; + +import org.bukkit.Location; +import org.bukkit.Server; +import org.bukkit.entity.Player; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.sk89q.worldedit.IncompleteRegionException; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.bukkit.selections.CuboidSelection; -import com.sk89q.worldedit.bukkit.selections.Selection; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; -import java.lang.reflect.InvocationTargetException; - -import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.entity.Player; - public class WorldEditSelectionManager extends SelectionManager { public WorldEditSelectionManager(Server serv, Residence plugin) { diff --git a/src/com/bekvon/bukkit/residence/utils/TabComplete.java b/src/com/bekvon/bukkit/residence/utils/TabComplete.java index 608ecfcb3..4230ec1a9 100644 --- a/src/com/bekvon/bukkit/residence/utils/TabComplete.java +++ b/src/com/bekvon/bukkit/residence/utils/TabComplete.java @@ -17,8 +17,7 @@ public class TabComplete implements TabCompleter { @Override public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { List completionList = new ArrayList<>(); - - if (args.length > 1) { + if (args.length >= 1) { Set Commands = Residence.getInstance().getHelpPages().getSubCommands(sender, args); String PartOfCommand = args[args.length - 1]; StringUtil.copyPartialMatches(PartOfCommand, Commands, completionList); diff --git a/src/plugin.yml b/src/plugin.yml index e8af3de3e..2883f095e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.4.6 +version: 4.8.4.7 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From bf4c1427475296ff6f70c331016fb054c79c5a01 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 10:20:27 +0300 Subject: [PATCH 0574/1142] Lets set default command description color in case its not present --- src/com/bekvon/bukkit/residence/text/help/HelpEntry.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 0d27bac99..6395f31ae 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -13,6 +13,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; import java.io.File; import java.io.FileNotFoundException; @@ -79,11 +80,12 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p String separator = Residence.getInstance().msg(lm.InformationPage_SmallSeparator); sender.sendMessage(separator + " " + Residence.getInstance().msg(lm.General_HelpPageHeader, path, page, pi.getTotalPages()) + " " + separator); + for (int i = pi.getStart(); i <= pi.getEnd(); i++) { if (helplines.get(i).getCommand() != null) { HelpEntry sub = this.getSubEntry(helplines.get(i).getCommand()); - String desc = ""; + String desc = "&6"; int y = 0; for (String one : sub.lines) { desc += one; From c5e7e704602f05043232bf2ea618adf0fea9d0db Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 10:23:25 +0300 Subject: [PATCH 0575/1142] We don't need config.yml inside plugin --- .../bekvon/bukkit/residence/Residence.java | 4 -- src/config.yml | 65 ------------------- 2 files changed, 69 deletions(-) delete mode 100644 src/config.yml diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index bcb5eb66e..461541dd1 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -468,10 +468,6 @@ public void onEnable() { this.ConvertFile(); } - if (!new File(dataFolder, "config.yml").isFile()) { - this.writeDefaultConfigFromJar(); - } - if (!new File(dataFolder, "uuids.yml").isFile()) { File file = new File(this.getDataFolder(), "uuids.yml"); file.createNewFile(); diff --git a/src/config.yml b/src/config.yml deleted file mode 100644 index 0b6e35aa0..000000000 --- a/src/config.yml +++ /dev/null @@ -1,65 +0,0 @@ -#These are Global Settings for Residence. -Global: - # This loads the .yml file in the Residence Language folder - # All Residence text comes from this file. (NOT DONE YET) - Language: English - # Stick is the default selection tool for Residence. - # You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values - SelectionToolId: 280 - # This determins which tool you can use to see info on residences, default is String. - # Simply equip this tool and hit a location inside the residence and it will display the info for it. - InfoToolId: 287 - # The interval, in milliseconds, between movement checks. - # Reducing this will increase the load on the server. - # Increasing this will allow players to move further in movement restricted zones before they are teleported out. - MoveCheckInterval: 500 - # The interval, in minutes, between residence saves. - SaveInterval: 10 - # The default group to use if Permissions fails to attach or your not using Permissions. - DefaultGroup: default - # Enable / Disable the Lease System. - UseLeaseSystem: false - # The interval, in minutes, between residence lease checks (if leases are enabled). - LeaseCheckInterval: 10 - # Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing. - LeaseAutoRenew: true - # Whether or not to use the Permissions system in conjunction with this config. - EnablePermissions: true - # Set to true if NOT using Permissions or PermissionsBukkit, or using a really old version of Permissions - LegacyPermissions: false - # Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported). - EnableEconomy: true - # Enables or disables the Rent System - EnableRentSystem: false - # The interval, in minutes, between residence rent expiration checks (if the rent system is enabled). - RentCheckInterval: 10 - # Enable or disable residence chat channels. - ResidenceChatEnable: true - # True for ActionBar - new component in 1.8 - # False for old Messaging in chat enter/leave Residence messages - UseActionBar: true - # Color of residence chat. - ResidenceChatColor: DARK_PURPLE - # Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences. - AdminOnlyCommands: false - # Setting this to true makes server OPs admins. - AdminOPs: true - # This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this. - # The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds. - MultiWorldPlugin: Multiverse-Core - # Setting this to true causes subzones to inherit flags from their parent zones. - ResidenceFlagsInherit: true - # Setting this to false will allow rented residences to be modified by the renting player. - PreventRentModify: true - # Setting this to false will cause residence to continue to load even if a error is detected in the save file. - StopOnSaveFault: true - # This is the residence name filter, that filters out invalid characters. Google "Java RegEx" or "Java Regular Expressions" for more info on how they work. - ResidenceNameRegex: '[^a-zA-Z0-9\\-\\_]' - # Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check. - ShowIntervalMessages: false - # Check for new version when server start and connect OP. - VersionCheck: true - # Experimental - The following settings are lists of block IDs to be used as part of the checks for the "container" and "use" flags when using mods. - CustomContainers: [] - CustomBothClick: [] - CustomRightClick: [] From f930b6a62d3f6f2f5df0fe84f07c47849d5fc992 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 10:30:39 +0300 Subject: [PATCH 0576/1142] Typo fix --- .../bukkit/residence/ConfigManager.java | 40 +++++++++---------- .../bekvon/bukkit/residence/Residence.java | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 4d58a9a3c..668891d18 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -156,7 +156,7 @@ public class ConfigManager { protected boolean useFlagGUI; protected int AutoMobRemovalInterval; protected boolean enableLeaseMoneyAccount; - protected boolean CouldronCompatability; + protected boolean Couldroncompatibility; protected boolean enableDebug = false; protected boolean versionCheck = true; protected boolean UUIDConvertion = true; @@ -483,16 +483,16 @@ public void UpdateConfigFile() { "This can prevent from teleporting players to residence with 3rd party plugins like esentials /tpa"); BlockAnyTeleportation = c.get("Global.Optimizations.BlockAnyTeleportation", true); - c.addComment("Global.Optimizations.MaxResCount", "Set this as low as posible depending of residence.max.res.[number] permission you are using", + c.addComment("Global.Optimizations.MaxResCount", "Set this as low as possible depending of residence.max.res.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxResCount = c.get("Global.Optimizations.MaxResCount", 30); - c.addComment("Global.Optimizations.MaxRentCount", "Set this as low as posible depending of residence.max.rents.[number] permission you are using", + c.addComment("Global.Optimizations.MaxRentCount", "Set this as low as possible depending of residence.max.rents.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxRentCount = c.get("Global.Optimizations.MaxRentCount", 10); - c.addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as posible depending of residence.max.subzones.[number] permission you are using", + c.addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as possible depending of residence.max.subzones.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxSubzonesCount = c.get("Global.Optimizations.MaxSubzoneCount", 5); - c.addComment("Global.Optimizations.MaxSubzoneDepthCount", "Set this as low as posible depending of residence.max.subzonedepth.[number] permission you are using", + c.addComment("Global.Optimizations.MaxSubzoneDepthCount", "Set this as low as possible depending of residence.max.subzonedepth.[number] permission you are using", "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); MaxSubzoneDepthCount = c.get("Global.Optimizations.MaxSubzoneDepthCount", 5); @@ -658,7 +658,7 @@ public void UpdateConfigFile() { NewSaveMechanic = c.get("Global.NewSaveMechanic", false); c.addComment("Global.Backup.AutoCleanUp.Use", - "Do you want to automaticaly remove backup files from main backup folder if they are older than defined day amount"); + "Do you want to automatically remove backup files from main backup folder if they are older than defined day amount"); BackupAutoCleanUpUse = c.get("Global.Backup.AutoCleanUp.Use", false); BackupAutoCleanUpDays = c.get("Global.Backup.AutoCleanUp.Days", 30); @@ -681,7 +681,7 @@ public void UpdateConfigFile() { AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); c.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); - c.addComment("Global.AutoCleanUp.Regenerate", "Do you want to regenetate old residence area", "This requires world edit to be present"); + c.addComment("Global.AutoCleanUp.Regenerate", "Do you want to regenerate old residence area", "This requires world edit to be present"); AutoCleanUpRegenerate = c.get("Global.AutoCleanUp.Regenerate", false); c.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); @@ -770,8 +770,8 @@ public void UpdateConfigFile() { "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); DateFormatShort = c.get("Global.DateFormatShort", "MM.dd hh:mm"); - c.addComment("Global.TimeZone", "Sets time zone for showing date, usefull when server is in different country then main server player base", - "Full list of posible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); + c.addComment("Global.TimeZone", "Sets time zone for showing date, useful when server is in different country then main server player base", + "Full list of possible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); TimeZone = c.get("Global.TimeZone", Calendar.getInstance().getTimeZone().getID()); c.addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); @@ -805,7 +805,7 @@ public void UpdateConfigFile() { } c.addComment("Global.ExtraEnterMessage", - "When enabled extra message will apear in chat if residence is for rent or for sell to inform how he can rent/buy residence with basic information."); + "When enabled extra message will appear in chat if residence is for rent or for sell to inform how he can rent/buy residence with basic information."); ExtraEnterMessage = c.get("Global.ExtraEnterMessage", true); c.addComment("Global.Sell.Subzone", "If set to true, this will allow to sell subzones. Its recommended to keep it false tho"); @@ -923,7 +923,7 @@ public void UpdateConfigFile() { customBothClick = c.getIntList("Global.CustomBothClick", new ArrayList()); customRightClick = c.getIntList("Global.CustomRightClick", new ArrayList()); - c.addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundries"); + c.addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundaries"); useVisualizer = c.get("Global.Visualizer.Use", true); c.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", "Keep it no more as 30, as player cant see more than 16 blocks"); @@ -969,11 +969,11 @@ public void UpdateConfigFile() { } c.addComment("Global.Visualizer.Selected", - "Particle effect names. Posible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", + "Particle effect names. possible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance", "", - "If using spigot based server different particales can be used:", effectsList); + "If using spigot based server different particles can be used:", effectsList); // Frame String efname = c.get("Global.Visualizer.Selected.Frame", "happyVillager"); @@ -1093,10 +1093,10 @@ public void UpdateConfigFile() { spoutEnable = c.get("Global.EnableSpout", false); enableLeaseMoneyAccount = c.get("Global.EnableLeaseMoneyAccount", true); - c.addComment("Global.CouldronCompatability", - "By setting this to true, partial compatability for kCouldron servers will be anabled. Action bar messages and selection visualizer will be disabled automaticaly as off incorrect compatability"); - CouldronCompatability = c.get("Global.CouldronCompatability", false); - if (CouldronCompatability) { + c.addComment("Global.Couldroncompatibility", + "By setting this to true, partial compatibility for kCouldron servers will be enabled. Action bar messages and selection visualizer will be disabled automatically as off incorrect compatibility"); + Couldroncompatibility = c.get("Global.Couldroncompatibility", false); + if (Couldroncompatibility) { useVisualizer = false; actionBar = false; titleMessage = false; @@ -1129,7 +1129,7 @@ public void UpdateConfigFile() { c.addComment("DynMap.VisibleRegions", "Shows only regions on this list"); DynMapVisibleRegions = c.get("DynMap.VisibleRegions", new ArrayList()); - c.addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden ingame"); + c.addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden in game"); DynMapHiddenRegions = c.get("DynMap.HiddenRegions", new ArrayList()); c.save(); @@ -1689,8 +1689,8 @@ public boolean enableLeaseMoneyAccount() { return enableLeaseMoneyAccount; } - public boolean CouldronCompatability() { - return CouldronCompatability; + public boolean CouldronCompatibility() { + return Couldroncompatibility; } public boolean debugEnabled() { diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 461541dd1..f0104602a 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -524,7 +524,7 @@ public void onEnable() { String version = versionChecker.getVersion().getShortVersion(); try { Class nmsClass; - if (getConfigManager().CouldronCompatability()) + if (getConfigManager().CouldronCompatibility()) nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms.v1_7_Couldron"); else nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms." + versionChecker.getVersion()); From c6b36a598e1944e80d379a64d771cc0863bd5d7b Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 10:36:56 +0300 Subject: [PATCH 0577/1142] Fix for trident duplication by nodurability flag --- .../residence/listeners/SpigotListener.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java index 03aa1928b..41df83942 100644 --- a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java @@ -23,14 +23,16 @@ public void onItemDamage(PlayerItemDamageEvent event) { Player player = event.getPlayer(); Location loc = player.getLocation(); FlagPermissions perms = Residence.getInstance().getPermsByLoc(loc); - if (perms.has(Flags.nodurability, false)) { - ItemStack held = Residence.getInstance().getNms().itemInMainHand(player); - if (held.getType() != Material.AIR) { - held.setDurability(held.getDurability()); - player.setItemInHand(held); - event.setDamage(0); - event.setCancelled(true); - } - } + if (!perms.has(Flags.nodurability, false)) + return; + + ItemStack held = Residence.getInstance().getNms().itemInMainHand(player); + if (held.getType() == Material.AIR || held.getDurability() <= 0) + return; + + held.setDurability(held.getDurability()); + player.setItemInHand(held); + event.setDamage(0); + event.setCancelled(true); } } From 45a73eb85ef87f808cfc8126dc9ed7cec4646416 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 10:42:20 +0300 Subject: [PATCH 0578/1142] Lets move lwc clear from async to sync mode to avoid some issues --- .../residence/protection/ResidenceManager.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 515067c59..63dcaa724 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -593,9 +593,9 @@ else if (rPlayer != null) } public void removeLwcFromResidence(final Player player, final ClaimedResidence res) { - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { +// Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { +// @Override +// public void run() { long time = System.currentTimeMillis(); LWC lwc = plugin.getLwc(); if (lwc == null) @@ -617,6 +617,8 @@ public void run() { for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { Block b = world.getBlockAt(x, y, z); + if (!b.getChunk().isLoaded()) + b.getChunk().load(); if (!list.contains(b.getType())) continue; Protection prot = cache.getProtection(b); @@ -633,8 +635,8 @@ public void run() { if (i > 0) plugin.msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); return; - } - }); +// } +// }); } public void removeAllByOwner(String owner) { From 5b5fd8a972bd353b525cfe012bc79eb60dc20bea Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 10:50:52 +0300 Subject: [PATCH 0579/1142] Minecart hopper issue fix while minecart is not on rails --- .../listeners/ResidenceEntityListener.java | 21 +------------------ 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 6faebf434..ffb1d595f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -58,6 +58,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceEntityListener implements Listener { @@ -67,26 +68,6 @@ public ResidenceEntityListener(Residence plugin) { this.plugin = plugin; } - @SuppressWarnings("incomplete-switch") - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onMinecartHopperItemMove(InventoryMoveItemEvent event) { - if (!(event.getInitiator().getHolder() instanceof HopperMinecart)) - return; - HopperMinecart hopper = (HopperMinecart) event.getInitiator().getHolder(); - // disabling event on world - if (plugin.isDisabledWorldListener(hopper.getWorld())) - return; - Block block = hopper.getLocation().getBlock(); - switch (CMIMaterial.get(block)) { - case ACTIVATOR_RAIL: - case DETECTOR_RAIL: - case POWERED_RAIL: - case RAIL: - return; - } - event.setCancelled(true); - } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEndermanChangeBlock(EntityChangeBlockEvent event) { // disabling event on world From 84b9c13bf46d2f5d2a75f05156c72c5da2dd374e Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 11:18:11 +0300 Subject: [PATCH 0580/1142] No more moneyback from server land and money goes to land owner instead of player who removed residence --- .../listeners/ResidenceEntityListener.java | 3 - .../protection/ClaimedResidence.java | 9 +- .../protection/ResidenceManager.java | 89 ++++++++++--------- 3 files changed, 55 insertions(+), 46 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index ffb1d595f..882804b5e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -22,7 +22,6 @@ import org.bukkit.entity.Tameable; import org.bukkit.entity.Vehicle; import org.bukkit.entity.Witch; -import org.bukkit.entity.minecart.HopperMinecart; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -44,7 +43,6 @@ import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; import org.bukkit.event.hanging.HangingPlaceEvent; -import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; @@ -58,7 +56,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceEntityListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index ecbebfe33..edb7ec8ef 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -599,7 +599,8 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole if ((!resadmin) && (player != null)) { int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * getBlockSellPrice().doubleValue()); if ((chargeamount < 0) && (this.plugin.getConfigManager().useResMoneyBack())) { - this.plugin.getTransactionManager().giveEconomyMoney(player, -chargeamount); + if (!this.isServerLand()) + this.plugin.getTransactionManager().giveEconomyMoney(player, -chargeamount); } } @@ -623,6 +624,10 @@ public boolean addSubzone(Player player, Location loc1, Location loc2, String na return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); } + public boolean isServerLand() { + return this.getOwnerUUID().toString() == Residence.getInstance().getServerLandUUID(); + } + public boolean addSubzone(Player player, String name, boolean resadmin) { if (Residence.getInstance().getSelectionManager().hasPlacedBoth(player)) { Location loc1 = Residence.getInstance().getSelectionManager().getPlayerLoc1(player); @@ -1786,6 +1791,8 @@ public boolean isOwner(String name) { } public boolean isOwner(Player p) { + if (p == null) + return false; if (plugin.getConfigManager().isOfflineMode()) return perms.getOwner().equals(p.getName()); return perms.getOwnerUUID().equals(p.getUniqueId()); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 63dcaa724..8eb9b0143 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -583,58 +583,63 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole plugin.getRentManager().removeRentable(name); plugin.getTransactionManager().removeFromSale(name); - if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { - double chargeamount = res.getWorth(); - if (player != null) - plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); - else if (rPlayer != null) - plugin.getTransactionManager().giveEconomyMoney(rPlayer.getPlayerName(), chargeamount); - } + if (!res.isServerLand()) + if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { + double chargeamount = res.getWorth(); + if (!res.isOwner(player)) { + plugin.getTransactionManager().giveEconomyMoney(res.getOwner(), chargeamount); + } else { + if (player != null) + plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); + else if (rPlayer != null) + plugin.getTransactionManager().giveEconomyMoney(rPlayer.getPlayerName(), chargeamount); + } + } } public void removeLwcFromResidence(final Player player, final ClaimedResidence res) { // Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { // @Override // public void run() { - long time = System.currentTimeMillis(); - LWC lwc = plugin.getLwc(); - if (lwc == null) - return; - if (res == null) - return; - int i = 0; - - ProtectionCache cache = lwc.getProtectionCache(); - - List list = plugin.getConfigManager().getLwcMatList(); + long time = System.currentTimeMillis(); + LWC lwc = plugin.getLwc(); + if (lwc == null) + return; + if (res == null) + return; + int i = 0; - try { - for (CuboidArea area : res.getAreaArray()) { - Location low = area.getLowLoc(); - Location high = area.getHighLoc(); - World world = low.getWorld(); - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - Block b = world.getBlockAt(x, y, z); - if (!b.getChunk().isLoaded()) - b.getChunk().load(); - if (!list.contains(b.getType())) - continue; - Protection prot = cache.getProtection(b); - if (prot == null) - continue; - prot.remove(); - i++; - } - } + ProtectionCache cache = lwc.getProtectionCache(); + + List list = plugin.getConfigManager().getLwcMatList(); + + try { + for (CuboidArea area : res.getAreaArray()) { + Location low = area.getLowLoc(); + Location high = area.getHighLoc(); + World world = low.getWorld(); + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + Block b = world.getBlockAt(x, y, z); + if (!b.getChunk().isLoaded()) + b.getChunk().load(); + if (!list.contains(b.getType())) + continue; + Protection prot = cache.getProtection(b); + if (prot == null) + continue; + prot.remove(); + i++; } } - } catch (Exception e) { } - if (i > 0) - plugin.msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); - return; + } + } catch (Exception e) { + } + if (i > 0) + plugin.msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); + return; // } // }); } From ca2bff763a9cc65c7984889f52caf38135678343 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 11:27:38 +0300 Subject: [PATCH 0581/1142] Lets colorize help page 2.0 --- src/com/bekvon/bukkit/residence/text/help/HelpEntry.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 6395f31ae..02f4db26d 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -5,6 +5,7 @@ import org.bukkit.Material; import org.bukkit.World; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; @@ -99,11 +100,11 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p path = path.replace("/res ", "/resadmin "); RawMessage rm = new RawMessage(); - rm.add(helplines.get(i).getDesc(), desc, null, path + helplines.get(i).getCommand()); + rm.add(CMIChatColor.translateAlternateColorCodes("&6" + helplines.get(i).getDesc()), desc, null, path + helplines.get(i).getCommand()); rm.show(sender); } else - sender.sendMessage(helplines.get(i).getDesc()); + sender.sendMessage(CMIChatColor.translateAlternateColorCodes("&6" + helplines.get(i).getDesc())); } From 21d22a3ad89de5eaad344ba300c0ce508381b9a8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 11:38:05 +0300 Subject: [PATCH 0582/1142] Lets add confirmation for /res give command --- .../bukkit/residence/commands/give.java | 24 ++++++++++++++++++- .../bukkit/residence/containers/lm.java | 3 +++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index 320d8c5ac..e6ec5a168 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -7,9 +7,12 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class give implements cmd { @@ -22,15 +25,34 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Player player = (Player) sender; boolean includeSubzones = false; + boolean confirmed = false; - if (args.length != 3 && args.length != 4) + if (args.length != 3 && args.length != 4 && args.length != 5) return false; for (String one : args) { if (one.equalsIgnoreCase("-s")) includeSubzones = true; + if (one.equalsIgnoreCase("-confirmed")) + confirmed = true; } + if (!confirmed) { + RawMessage rm = new RawMessage(); + + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return false; + } + + rm.add(plugin.getLM().getMessage(lm.Residence_GiveConfirm, args[1], res.getOwner(), args[2]), plugin.getLM().getMessage(lm.info_click), (resadmin ? "resadmin" : "res") + " give " + args[1] + + " " + args[2] + (includeSubzones ? " -s" : "") + " -confirmed"); + rm.show(sender); + + return true; + } plugin.getResidenceManager().giveResidence(player, args[2], args[1], resadmin, includeSubzones); return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 14420704c..0063190ae 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -105,6 +105,8 @@ public enum lm { info_min("&e%1 &6min "), info_sec("&e%1 &6sec "), + info_click("&7Click"), + server_land("Server_Land"), Flag_ownColor("&4"), @@ -183,6 +185,7 @@ public enum lm { Residence_TeleportNoFlag("&cYou dont have teleport access for that residence."), Residence_FlagDeny("&cYou dont have &6%1 &cpermission for Residence &6%2"), Residence_GiveLimits("&cCannot give residence to target player, because it is outside the target players limits."), + Residence_GiveConfirm("&7Click to confirm &6%1 &7residence transfer from &6%2 &7to &6%3"), Residence_Give("&eYou give residence &6%1 &eto player &6%2"), Residence_Recieve("&eYou have recieved residence &6%1 &efrom player &6%2"), Residence_ResList(" &a%1. &e%2 &e- &6%3 %4&6%5"), From e80f929d0454febc68f71aab38fc5bfe60906599 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 11:55:15 +0300 Subject: [PATCH 0583/1142] Fix for duplicated welcome message when teleporting into residence with messages being printed into chat --- .../listeners/ResidencePlayerListener.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 1dd5259af..4a0dd765c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1265,7 +1265,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (heldItem != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (heldItem.isDye()) { CMIMaterial btype = CMIMaterial.get(block); - if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || btype == CMIMaterial.GRASS || btype.isSapling()) || + if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || btype == CMIMaterial.GRASS || btype.isSapling()) || heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD) { perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player, Flags.build, true)) { @@ -2003,7 +2003,6 @@ private static boolean teleport(Player player, Location loc) { } public boolean handleNewLocation(final Player player, Location loc, boolean move) { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); ClaimedResidence orres = res; @@ -2242,6 +2241,8 @@ public void onPlayerTeleportEvent(PlayerTeleportEvent event) { plugin.getServ().getPluginManager().callEvent(chgEvent); } + HashMap informar = new HashMap(); + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { @@ -2272,11 +2273,16 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { if (plugin.getConfigManager().useTitleMessage()) { ActionBarTitleMessages.sendTitle(player, ChatColor.YELLOW + insertMessages(player, res, message)); } - if (plugin.getConfigManager().useActionBar()) { - ActionBarTitleMessages.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) - .toString()); - } else { - plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res, message)); + Long time = informar.get(player.getUniqueId()); + if (time == null || time + 100L < System.currentTimeMillis()) { + if (plugin.getConfigManager().useActionBar()) { + ActionBarTitleMessages.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) + .toString()); + + } else { + plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res, message)); + } + informar.put(player.getUniqueId(), System.currentTimeMillis()); } } From 3a5758579411ef4f452597461ef7e4f79d391f8a Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 12:39:24 +0300 Subject: [PATCH 0584/1142] Optimizing blockbreakevent --- .../residence/containers/ResidencePlayer.java | 15 ++++++++++++++- .../listeners/ResidenceBlockListener.java | 4 ++++ .../residence/protection/PlayerManager.java | 4 ++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 4bec8444e..ff9756df8 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -17,6 +17,7 @@ import com.bekvon.bukkit.residence.BossBar.BossBarInfo; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { @@ -36,6 +37,9 @@ public class ResidencePlayer { private int maxSubzones = -1; private int maxSubzoneDepth = -1; + private boolean updated = false; + private Long lastRecalculation = 0L; + private int maxValue = 9999; public ResidencePlayer(OfflinePlayer off) { @@ -110,6 +114,10 @@ public ClaimedResidence getMainResidence() { } public void RecalculatePermissions() { + if (lastRecalculation + 5000L > System.currentTimeMillis()) + return; + lastRecalculation = System.currentTimeMillis(); + getGroup(); recountMaxRes(); recountMaxRents(); @@ -274,14 +282,19 @@ public PermissionGroup getGroup(String world) { } public ResidencePlayer updatePlayer(Player player) { + if (updated) + return this; this.player = player; this.uuid = player.getUniqueId(); this.userName = player.getName(); this.ofPlayer = player; + updated = true; return this; } private void updatePlayer() { + if (updated) + return; player = Bukkit.getPlayer(this.uuid); if (player != null) updatePlayer(player); @@ -369,7 +382,7 @@ public Player getPlayer() { this.updatePlayer(); return player; } - + HashMap barMap = new HashMap(); public void removeBossBar(BossBarInfo bossBar) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 258e355f0..5e9c47517 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -56,6 +56,7 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceBlockListener implements Listener { @@ -204,6 +205,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (plugin.getItemManager().isIgnored(mat, group, world)) { return; } + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); if (plugin.getConfigManager().enabledRentSystem() && res != null) { String resname = res.getName(); @@ -213,6 +215,7 @@ public void onBlockBreak(BlockBreakEvent event) { return; } } + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); if (res != null && res.getItemIgnoreList().isListed(mat)) return; @@ -226,6 +229,7 @@ public void onBlockBreak(BlockBreakEvent event) { plugin.msg(player, lm.Flag_Deny, Flags.container); event.setCancelled(true); } + } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 1e8544853..09726ad21 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -247,8 +247,8 @@ public ResidencePlayer getResidencePlayer(Player player) { ResidencePlayer resPlayer = null; if (player == null) return null; - if (playersUuid.containsKey(player.getUniqueId())) { - resPlayer = playersUuid.get(player.getUniqueId()); + resPlayer = playersUuid.get(player.getUniqueId()); + if (resPlayer != null) { resPlayer.updatePlayer(player); resPlayer.RecalculatePermissions(); } else { From 6afbae4ebc5d8f45727a21d639f954b3b2fd126a Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 12:52:41 +0300 Subject: [PATCH 0585/1142] Fixinf fly bug --- .../listeners/ResidencePlayerListener.java | 23 +++++++++++++++++++ .../protection/ResidenceManager.java | 1 + 2 files changed, 24 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 4a0dd765c..6dc0b6711 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -72,6 +72,7 @@ import com.bekvon.bukkit.residence.event.ResidenceChangedEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -488,6 +489,28 @@ public void onFlagChangeWSpeed(ResidenceFlagChangeEvent event) { break; } } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFlagChangeWSpeed(ResidenceOwnerChangeEvent event) { + if (event.isCancelled()) + return; + + ClaimedResidence res = event.getResidence(); + if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(0.2F); + + if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + for (Player one : event.getResidence().getPlayersInResidence()) + one.resetPlayerWeather(); + + if (res.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) + for (Player one : event.getResidence().getPlayersInResidence()) + fly(one, false); + + if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setGlowing(false); + } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeJump(ResidenceFlagChangeEvent event) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 8eb9b0143..6653d8900 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -33,6 +33,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.economy.rent.RentedLand; +import com.bekvon.bukkit.residence.event.ResidenceChangedEvent; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; From a295e0f5098694dc11d1adc3f3e94c8365db784c Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 13:09:23 +0300 Subject: [PATCH 0586/1142] Extra event priorities for chat {residence} variable translations --- .../listeners/ResidencePlayerListener.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 6dc0b6711..c57afe1c5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -219,16 +219,25 @@ public void onPlayerGlobalChat(AsyncPlayerChatEvent event) { // Changing chat prefix variable to residence name @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerChatGlobalLow(AsyncPlayerChatEvent event) { - processEvent(event); + procEvent(event); + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + private void processNEvent(AsyncPlayerChatEvent event) { + procEvent(event); } - // Changing chat prefix variable to residence name @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public void onPlayerChatGlobalHigh(AsyncPlayerChatEvent event) { - processEvent(event); + private void processHEvent(AsyncPlayerChatEvent event) { + procEvent(event); } - private void processEvent(AsyncPlayerChatEvent event) { + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + private void processHHEvent(AsyncPlayerChatEvent event) { + procEvent(event); + } + + private void procEvent(AsyncPlayerChatEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -489,6 +498,7 @@ public void onFlagChangeWSpeed(ResidenceFlagChangeEvent event) { break; } } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeWSpeed(ResidenceOwnerChangeEvent event) { if (event.isCancelled()) From 2ed76ad1eed98edcc571ea2f102099f21ec87efd Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 13:14:23 +0300 Subject: [PATCH 0587/1142] Lets translate {residence} even if player doesnt have one --- .../listeners/ResidencePlayerListener.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c57afe1c5..840a659ec 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -246,6 +246,10 @@ private void procEvent(AsyncPlayerChatEvent event) { if (plugin.getConfigManager().isGlobalChatSelfModify()) return; + String format = event.getFormat(); + if (!format.contains("{residence}")) + return; + Player player = event.getPlayer(); ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); @@ -258,15 +262,10 @@ private void procEvent(AsyncPlayerChatEvent event) { ClaimedResidence res = rPlayer.getMainResidence(); - if (res == null) - return; - - String honorific = plugin.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); + String honorific = plugin.getConfigManager().getGlobalChatFormat().replace("%1", res == null ? "" : res.getTopParentName()); if (honorific.equalsIgnoreCase(" ")) honorific = ""; - String format = event.getFormat(); - if (!format.contains("{residence}")) - return; + format = format.replace("{residence}", honorific); event.setFormat(format); } From 7f8ec29d0f5d99e6e4c5214f926f4a7aa8786c26 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 13:24:59 +0300 Subject: [PATCH 0588/1142] Lets correctly update main residence when giving it out to some one --- .../bukkit/residence/containers/ResidencePlayer.java | 2 +- .../residence/listeners/ResidencePlayerListener.java | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index ff9756df8..04d191b8e 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -87,7 +87,7 @@ public void setMainResidence(ClaimedResidence res) { } public ClaimedResidence getMainResidence() { - if (mainResidence == null) { + if (mainResidence == null || !mainResidence.isOwner(this.getPlayerName())) { for (ClaimedResidence one : ResidenceList) { if (one == null) continue; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 840a659ec..43ee0503e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -249,7 +249,7 @@ private void procEvent(AsyncPlayerChatEvent event) { String format = event.getFormat(); if (!format.contains("{residence}")) return; - + Player player = event.getPlayer(); ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); @@ -257,15 +257,12 @@ private void procEvent(AsyncPlayerChatEvent event) { if (rPlayer == null) return; - if (rPlayer.getResList().size() == 0) - return; - ClaimedResidence res = rPlayer.getMainResidence(); String honorific = plugin.getConfigManager().getGlobalChatFormat().replace("%1", res == null ? "" : res.getTopParentName()); if (honorific.equalsIgnoreCase(" ")) honorific = ""; - + format = format.replace("{residence}", honorific); event.setFormat(format); } From bd96748432869e1a9aeb71f09076f29f77156864 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 13:38:01 +0300 Subject: [PATCH 0589/1142] Ant is broken, so lets remove it. --- build.xml | 75 ------------------------------------------------------- 1 file changed, 75 deletions(-) delete mode 100644 build.xml diff --git a/build.xml b/build.xml deleted file mode 100644 index f6c2d3886..000000000 --- a/build.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - Building the .jar file. - - - - - Cleaning - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Compiling - - - - - - - - - - - - - Packaging JAR distribution - - - - - - - - - - - - Cleaning up - - - - From 5480fb0dd5e8f4f58e0ef71be29df873e9a7bd1d Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 17:20:25 +0300 Subject: [PATCH 0590/1142] Lets centralize enter/leave/deny move message place --- .../bukkit/residence/ConfigManager.java | 35 ++++++++++--------- .../listeners/ResidencePlayerListener.java | 30 +++++++++++----- 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 668891d18..9e7dfce3b 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -26,6 +26,8 @@ import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; +import com.bekvon.bukkit.residence.containers.ELMessageType; import com.bekvon.bukkit.residence.containers.EconomyType; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomTeleport; @@ -119,8 +121,9 @@ public class ConfigManager { protected boolean flagsInherit; protected ChatColor chatColor; protected boolean chatEnable; - protected boolean actionBar; - protected boolean titleMessage; + private ELMessageType EnterLeaveMessageType; +// protected boolean actionBar; +// protected boolean titleMessage; protected boolean ActionBarOnSelection; protected boolean visualizer; protected int minMoveUpdate; @@ -850,11 +853,14 @@ public void UpdateConfigFile() { c.addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); chatEnable = c.get("Global.ResidenceChatEnable", true); - c.addComment("Global.ActionBar.General", "True for ActionBar - new component in 1.8", "False for old Messaging in chat enter/leave Residence messages"); - actionBar = c.get("Global.ActionBar.General", true); - c.addComment("Global.TitleBar.EnterLeave", "When set to true enter/leave messages will be shown in title/subtitle slots", - "Subtitle can be defined with %subtitle% while setting enter/leave messages"); - titleMessage = c.get("Global.TitleBar.EnterLeave", false); + ELMessageType old = c.getC().isBoolean("Global.ActionBar.General") && c.getC().getBoolean("Global.ActionBar.General") ? ELMessageType.ActionBar : ELMessageType.ChatBox; + old = c.getC().isBoolean("Global.TitleBar.EnterLeave") && c.getC().getBoolean("Global.TitleBar.EnterLeave") ? ELMessageType.TitleBar : old; + + c.addComment("Global.Messages.GeneralMessages", "Defines where you want to send residence enter/leave/deny move and similar messages. Possible options: " + ELMessageType.getAllValuesAsString()); + EnterLeaveMessageType = ELMessageType.getByName(c.get("Global.Messages.GeneralMessages", old.toString())); + if (EnterLeaveMessageType == null || Version.isCurrentEqualOrLower(Version.v1_7_R4)) + EnterLeaveMessageType = ELMessageType.ChatBox; + ActionBarOnSelection = c.get("Global.ActionBar.ShowOnSelection", true); c.addComment("Global.ResidenceChatColor", "Color of residence chat."); @@ -1098,8 +1104,7 @@ public void UpdateConfigFile() { Couldroncompatibility = c.get("Global.Couldroncompatibility", false); if (Couldroncompatibility) { useVisualizer = false; - actionBar = false; - titleMessage = false; + EnterLeaveMessageType = ELMessageType.ChatBox; ActionBarOnSelection = false; } @@ -1557,14 +1562,6 @@ public boolean chatEnabled() { return chatEnable; } - public boolean useActionBar() { - return actionBar; - } - - public boolean useTitleMessage() { - return titleMessage; - } - public boolean useActionBarOnSelection() { return ActionBarOnSelection; } @@ -1853,6 +1850,10 @@ public boolean isCanTeleportIncludeOwner() { return CanTeleportIncludeOwner; } + public ELMessageType getEnterLeaveMessageType() { + return EnterLeaveMessageType; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 43ee0503e..40bb5fe26 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -62,6 +62,7 @@ import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.containers.ELMessageType; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.StuckInfo; @@ -2172,10 +2173,17 @@ public void run() { player.closeInventory(); teleported = teleport(player, newLoc); } - if (plugin.getConfigManager().useActionBar()) { + + switch (plugin.getConfigManager().getEnterLeaveMessageType()) { + case ActionBar: + case TitleBar: ActionBarTitleMessages.send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); - } else { + break; + case ChatBox: plugin.msg(player, lm.Residence_MoveDeny, orres.getName()); + break; + default: + break; } return teleported; } @@ -2299,17 +2307,23 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { if (player.hasMetadata("NPC")) return; if (message != null) { - if (plugin.getConfigManager().useTitleMessage()) { - ActionBarTitleMessages.sendTitle(player, ChatColor.YELLOW + insertMessages(player, res, message)); - } + Long time = informar.get(player.getUniqueId()); if (time == null || time + 100L < System.currentTimeMillis()) { - if (plugin.getConfigManager().useActionBar()) { + + switch (plugin.getConfigManager().getEnterLeaveMessageType()) { + case ActionBar: ActionBarTitleMessages.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) .toString()); - - } else { + break; + case ChatBox: plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res, message)); + break; + case TitleBar: + ActionBarTitleMessages.sendTitle(player, ChatColor.YELLOW + insertMessages(player, res, message)); + break; + default: + break; } informar.put(player.getUniqueId(), System.currentTimeMillis()); } From a0eecb5deeeeb06021583fbacb6033eaa0787a8d Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 17:30:06 +0300 Subject: [PATCH 0591/1142] Hard limit on res select shift command, to max of 100 blocks at a time --- src/com/bekvon/bukkit/residence/commands/select.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 6a5c6d3c5..134e00ad2 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -140,6 +140,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Invalid_Amount); return true; } + if (amount > 100) + amount = 100; + if (amount < -100) + amount = -100; plugin.getSelectionManager().modify(player, true, amount); return true; } From 5de78a6be7c187b8deca48fac392c36618449f3f Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Apr 2019 18:00:55 +0300 Subject: [PATCH 0592/1142] Version increment --- src/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugin.yml b/src/plugin.yml index 2883f095e..7e0ed9208 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.4.7 +version: 4.8.5.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 8a7ca61b06b7079300d7404018870e7963fb5c8e Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 1 May 2019 10:01:06 +0300 Subject: [PATCH 0593/1142] Fix for issue when trying to get selection area when player has not selected it --- .../residence/selection/SelectionManager.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 293be509d..3f9c5dce6 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -379,7 +379,13 @@ public void afterSelectionUpdate(Player player, boolean force) { public Location getPlayerLoc1(Player player) { if (player == null) return null; - return getSelection(player).getResizedArea().getLowLoc(); + Selection sel = getSelection(player); + if (sel == null) + return null; + CuboidArea area = sel.getResizedArea(); + if (area == null) + return null; + return area.getLowLoc(); } @Deprecated @@ -390,7 +396,13 @@ public Location getPlayerLoc1(String player) { public Location getPlayerLoc2(Player player) { if (player == null) return null; - return getSelection(player).getResizedArea().getHighLoc(); + Selection sel = getSelection(player); + if (sel == null) + return null; + CuboidArea area = sel.getResizedArea(); + if (area == null) + return null; + return area.getHighLoc(); } @Deprecated From 3f7ea41f6cc1089ed89adcd2a6de11bad13416fd Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 1 May 2019 10:01:35 +0300 Subject: [PATCH 0594/1142] Initial 1.14 support --- .../bukkit/residence/allNms/v1_14_R1.java | 152 ++++++++++++++++++ .../residence/containers/ELMessageType.java | 23 +++ 2 files changed, 175 insertions(+) create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java create mode 100644 src/com/bekvon/bukkit/residence/containers/ELMessageType.java diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java new file mode 100644 index 000000000..6f4406e86 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java @@ -0,0 +1,152 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Particle.DustOptions; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_14_R1.CraftParticle; +import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cod; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Dolphin; +import org.bukkit.entity.Donkey; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Fox; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Llama; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Panda; +import org.bukkit.entity.Parrot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.PolarBear; +import org.bukkit.entity.PufferFish; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Salmon; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.TropicalFish; +import org.bukkit.entity.Turtle; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.cmiLib.CMIEffect; +import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_14_R1.Packet; +import net.minecraft.server.v1_14_R1.PacketPlayOutWorldParticles; + +public class v1_14_R1 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof Llama || + ent instanceof PolarBear || + ent instanceof Parrot || + ent instanceof Donkey || + ent instanceof Cod || + ent instanceof Salmon || + ent instanceof PufferFish || + ent instanceof TropicalFish || + ent instanceof Turtle || + ent instanceof Dolphin || + ent instanceof Fox || + ent instanceof Panda); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + + CMIParticle effect = ef.getParticle(); + if (effect == null) + return; + if (!effect.isParticle()) { + return; + } + + org.bukkit.Particle particle = effect.getParticle(); + + if (particle == null) + return; + +// CMI.getInstance().d(particle, effect.name()); + + DustOptions dd = null; + if (particle.equals(org.bukkit.Particle.REDSTONE)) + dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); + + Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), + (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); + + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/ELMessageType.java b/src/com/bekvon/bukkit/residence/containers/ELMessageType.java new file mode 100644 index 000000000..de7cf7185 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/ELMessageType.java @@ -0,0 +1,23 @@ +package com.bekvon.bukkit.residence.containers; + +public enum ELMessageType { + ActionBar, TitleBar, ChatBox; + + public static ELMessageType getByName(String name) { + for (ELMessageType one : ELMessageType.values()) { + if (one.toString().equalsIgnoreCase(name)) + return one; + } + return null; + } + + public static String getAllValuesAsString() { + String v = ""; + for (ELMessageType one : ELMessageType.values()) { + if (!v.isEmpty()) + v += ", "; + v += one.toString(); + } + return v; + } +} From 28f8e59605ae249e216d6f9a763e5905490cf342 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 1 May 2019 10:26:09 +0300 Subject: [PATCH 0595/1142] Secondary 1.14 support --- .../bekvon/bukkit/cmiLib/CMIItemStack.java | 274 ++- src/com/bekvon/bukkit/cmiLib/ItemManager.java | 1728 ++++++++++++----- .../listeners/ResidencePlayerListener.java | 6 +- .../residence/protection/FlagPermissions.java | 2 +- 4 files changed, 1464 insertions(+), 546 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java b/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java index aad2cd6b5..600818d0b 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java @@ -1,26 +1,33 @@ -/** - * Copyright (C) 2017 Zrips - */ package com.bekvon.bukkit.cmiLib; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map.Entry; +import java.util.Set; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.block.CreatureSpawner; import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; +import org.bukkit.inventory.meta.EnchantmentStorageMeta; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.material.SpawnEgg; +import org.bukkit.potion.PotionData; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIEntityType; import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; - public class CMIItemStack { private int id = 0; @@ -30,15 +37,19 @@ public class CMIItemStack { private String bukkitName = null; private String mojangName = null; - private CMIMaterial material = null; + private CMIMaterial cmiMaterial = null; + private Material material = null; private ItemStack item; public CMIItemStack(Material material) { - this.material = CMIMaterial.get(material); + this.material = material; + this.cmiMaterial = CMIMaterial.get(material); } - public CMIItemStack(CMIMaterial material) { - this.material = material; + public CMIItemStack(CMIMaterial cmiMaterial) { + this.cmiMaterial = cmiMaterial; + if (cmiMaterial != null) + this.material = cmiMaterial.getMaterial(); } public CMIItemStack(ItemStack item) { @@ -54,7 +65,8 @@ public CMIItemStack clone() { cm.setDurability(durability); cm.setBukkitName(bukkitName); cm.setMojangName(mojangName); - cm.setCMIMaterial(material); + cm.setCMIMaterial(cmiMaterial); + cm.setMaterial(material); cm.setItemStack(this.item != null ? this.item.clone() : null); return cm; } @@ -63,7 +75,7 @@ public int getId() { return id; } - public void setId(int id) { + public void setId(Integer id) { this.id = id; } @@ -84,6 +96,8 @@ public short getMaxDurability() { } public void setData(short data) { +// CMIMaterial got = CMIMaterial.get(id, data); +// if (got != null && got.getLegacyData() == data) this.data = data; } @@ -101,7 +115,7 @@ public CMIItemStack setDisplayName(String name) { public String getDisplayName() { ItemMeta meta = this.getItemStack().getItemMeta(); - return meta == null || meta.getDisplayName() == null || meta.getDisplayName().isEmpty() ? this.material.getName() : meta.getDisplayName(); + return meta == null || meta.getDisplayName() == null || meta.getDisplayName().isEmpty() ? getRealName() : meta.getDisplayName(); } public CMIItemStack addLore(String string) { @@ -110,7 +124,7 @@ public CMIItemStack addLore(String string) { ItemMeta meta = this.getItemStack().getItemMeta(); List lore = meta.getLore(); if (lore == null) - lore = new ArrayList<>(); + lore = new ArrayList(); lore.add(ChatColor.translateAlternateColorCodes('&', string)); meta.setLore(lore); this.getItemStack().setItemMeta(meta); @@ -119,7 +133,7 @@ public CMIItemStack addLore(String string) { public CMIItemStack clearLore() { ItemMeta meta = this.getItemStack().getItemMeta(); - List t = new ArrayList<>(); + List t = new ArrayList(); meta.setLore(t); this.getItemStack().setItemMeta(meta); return this; @@ -129,7 +143,7 @@ public CMIItemStack setLore(List lore) { if (lore == null || lore.isEmpty()) return this; ItemMeta meta = this.getItemStack().getItemMeta(); - List t = new ArrayList<>(); + List t = new ArrayList(); for (String one : lore) { t.add(ChatColor.translateAlternateColorCodes('&', one)); } @@ -165,11 +179,13 @@ public CMIItemStack clearEnchants() { public List getLore() { ItemMeta meta = this.getItemStack().getItemMeta(); +// List lore = null; if (meta != null) { List lore = meta.getLore(); if (lore == null) { - lore = new ArrayList<>(); + lore = new ArrayList(); meta.setLore(lore); +// this.getItemStack().setItemMeta(meta); } return meta.getLore() == null ? new ArrayList() : meta.getLore(); @@ -178,8 +194,18 @@ public List getLore() { } public String getRealName() { - - return this.material.getName(); + return this.getCMIType() == null || this.getCMIType() == CMIMaterial.NONE ? this.getType().name() : this.getCMIType().getName(); +// if (this.getItemStack() != null) { +// +//// String translated = CMI.getInstance().getItemManager().getTranslatedName(this.getItemStack()); +//// if (translated != null) +//// return translated; +// try { +// return CMI.getInstance().getRef().getItemMinecraftName(this.getItemStack()); +// } catch (Exception e) { +// } +// } +// return CMI.getInstance().getItemManager().getRealName(this, true).getName(); } public String getBukkitName() { @@ -191,7 +217,14 @@ public void setBukkitName(String bukkitName) { } public String getMojangName() { - return mojangName == null || mojangName.isEmpty() ? null : mojangName; +// if (getCMIType().isSkull() && !Version.isCurrentEqualOrHigher(Version.v1_13_R1)) +// mojangName = "skull"; +// try { +// mojangName = CMI.getInstance().getRef().getItemMinecraftName(getItemStack()).replace("minecraft:", ""); +// } catch (Exception e) { +// +// } + return mojangName == null || mojangName.isEmpty() ? this.getCMIType().getMaterial().name() : mojangName; } public void setMojangName(String mojangName) { @@ -200,13 +233,13 @@ public void setMojangName(String mojangName) { } public Material getType() { - if (material == null) - return null; - return material.getMaterial(); + if (material == null && cmiMaterial != null) + return cmiMaterial.getMaterial(); + return material; } public CMIMaterial getCMIType() { - return material; + return cmiMaterial == null ? CMIMaterial.get(material) : cmiMaterial; } @Deprecated @@ -215,31 +248,42 @@ public Material getMaterial() { } public void setMaterial(Material material) { - this.material = CMIMaterial.get(material); + this.cmiMaterial = CMIMaterial.get(material); + this.material = material; } public void setCMIMaterial(CMIMaterial material) { - this.material = material; + this.cmiMaterial = material; + this.material = material == null ? null : material.getMaterial(); } @SuppressWarnings("deprecation") public ItemStack getItemStack() { if (item == null) { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - this.item = new ItemStack(material.getMaterial(), this.amount == 0 ? 1 : this.amount); + if (cmiMaterial.isMonsterEgg()) { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + this.item = new ItemStack(this.getType()); + this.item.setAmount(this.getAmount()); + } else + this.item = new ItemStack(this.getType(), this.amount == 0 ? 1 : this.amount, data == 0 ? (short) 90 : data); + CMIEntityType type = CMIEntityType.getById(data); } else { - this.item = new ItemStack(material.getMaterial(), this.amount == 0 ? 1 : this.amount, data); + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + this.item = new ItemStack(this.getType()); + this.item.setAmount(this.getAmount()); + } else { + this.item = new ItemStack(this.getType(), this.amount == 0 ? 1 : this.amount, data); + } } - if (this.item.getType() == Material.POTION || item.getType().name().contains("SPLASH_POTION") || item.getType().name().contains("TIPPED_ARROW")) { + if (this.getCMIType().isPotion() || item.getType().name().contains("SPLASH_POTION") || item.getType().name().contains("TIPPED_ARROW")) { PotionMeta potion = (PotionMeta) item.getItemMeta(); PotionEffectType effect = PotionEffectType.getById(data); if (effect != null) { - potion.addCustomEffect(new PotionEffect(PotionEffectType.getById(data), 60, 0), true); + potion.addCustomEffect(new PotionEffect(effect, 60, 0), true); } item.setItemMeta(potion); item.setDurability((short) 0); - potion = (PotionMeta) item.getItemMeta(); potion.setDisplayName(this.getRealName()); item.setItemMeta(potion); @@ -250,12 +294,17 @@ public ItemStack getItemStack() { @SuppressWarnings("deprecation") public CMIItemStack setItemStack(ItemStack item) { - this.item = item; + this.item = item == null ? null : item; if (item != null) { - this.id = item.getType().getId(); this.amount = item.getAmount(); - this.material = CMIMaterial.get(item); - if ((material.isBlock() || material.isSolid())) { + this.material = item.getType(); + this.cmiMaterial = CMIMaterial.get(this.material); + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) + this.id = item.getType().getId(); + else if (cmiMaterial != null) { + this.id = cmiMaterial.getId(); + } + if ((this.getType().isBlock() || this.getType().isSolid())) { data = item.getData().getData(); } if (item.getType().getMaxDurability() - item.getDurability() < 0) { @@ -266,7 +315,9 @@ public CMIItemStack setItemStack(ItemStack item) { data = (short) 0; } - if (item.getType() == Material.POTION || item.getType().name().contains("SPLASH_POTION") || item.getType().name().contains("TIPPED_ARROW")) { + if (CMIMaterial.SPAWNER.equals(item.getType())) { + data = getEntityType().getTypeId(); + } else if (item.getType() == Material.POTION || item.getType().name().contains("SPLASH_POTION") || item.getType().name().contains("TIPPED_ARROW")) { PotionMeta potion = (PotionMeta) item.getItemMeta(); try { if (potion != null && potion.getBasePotionData() != null && potion.getBasePotionData().getType() != null && potion.getBasePotionData().getType().getEffectType() != null) { @@ -280,11 +331,13 @@ public CMIItemStack setItemStack(ItemStack item) { } public int getAmount() { - return amount; + return amount <= 0 ? 1 : amount; } public void setAmount(int amount) { this.amount = amount; + if (item != null) + this.item.setAmount(this.amount == 0 ? item.getAmount() : this.amount); } public boolean isSimilar(ItemStack item) { @@ -292,56 +345,123 @@ public boolean isSimilar(ItemStack item) { } public boolean isSimilar(CMIItemStack item) { + if (item == null) return false; - return this.material.equals(item.material) && this.getData() == item.getData(); + + try { + if ((item.getCMIType().isPotion() || item.getCMIType().equals(CMIMaterial.TIPPED_ARROW)) && + (this.getCMIType().isPotion() || this.getCMIType().equals(CMIMaterial.TIPPED_ARROW)) && + this.getType().equals(item.getType())) { + PotionMeta potion = (PotionMeta) item.getItemStack().getItemMeta(); + PotionMeta potion2 = (PotionMeta) this.getItemStack().getItemMeta(); + try { + if (potion != null && potion.getBasePotionData() != null) { + PotionData base1 = potion.getBasePotionData(); + if (base1.getType() != null) { + if (potion2 != null && potion2.getBasePotionData() != null) { + PotionData base2 = potion2.getBasePotionData(); + if (base2.getType() != null) { + if (base1.getType().equals(base2.getType()) && base1.isExtended() == base2.isExtended() && base1.isUpgraded() == base2.isUpgraded()) + return true; + } + } + } + } + return false; + } catch (NoSuchMethodError e) { + } + } + } catch (Exception e) { + e.printStackTrace(); + } + try { + if (this.getItemStack().getItemMeta() instanceof EnchantmentStorageMeta && item.getItemStack().getItemMeta() instanceof EnchantmentStorageMeta) { + + EnchantmentStorageMeta meta1 = (EnchantmentStorageMeta) this.getItemStack().getItemMeta(); + EnchantmentStorageMeta meta2 = (EnchantmentStorageMeta) item.getItemStack().getItemMeta(); + + for (Entry one : meta1.getEnchants().entrySet()) { + if (!meta2.getEnchants().containsKey(one.getKey()) || meta2.getEnchants().get(one.getKey()) != one.getValue()) + return false; + } + + for (Entry one : meta1.getStoredEnchants().entrySet()) { + if (!meta2.getStoredEnchants().containsKey(one.getKey()) || meta2.getStoredEnchants().get(one.getKey()) != one.getValue()) + return false; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + if ((item.getCMIType() == CMIMaterial.SPAWNER || item.getCMIType().isMonsterEgg()) && (getCMIType() == CMIMaterial.SPAWNER || getCMIType().isMonsterEgg())) { + if (this.cmiMaterial != item.cmiMaterial) + return false; + if (getEntityType() != item.getEntityType()) + return false; + return true; + } + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + return this.cmiMaterial == item.cmiMaterial; + return this.cmiMaterial == item.cmiMaterial && this.getData() == item.getData(); } -// public boolean hasNbtTag() { -// return CMI.getInstance().getRef().hasNbt(this.getItemStack()); -// } + public EntityType getEntityType() { + if (this.getItemStack() == null) + return null; + ItemStack is = this.getItemStack().clone(); + if (is.getItemMeta() instanceof org.bukkit.inventory.meta.BlockStateMeta) { + org.bukkit.inventory.meta.BlockStateMeta bsm = (org.bukkit.inventory.meta.BlockStateMeta) is.getItemMeta(); + if (bsm.getBlockState() instanceof CreatureSpawner) { + CreatureSpawner bs = (CreatureSpawner) bsm.getBlockState(); + return bs.getSpawnedType(); + } + } -// public List getRecipesFor() { -// ItemStack i = getItemStack().clone(); -// i.getData().setData((byte) data); -// if (i.getType().getMaxDurability() > 15) -// i.setDurability((short) 0); -// return Bukkit.getRecipesFor(i); -// } -// -// public List getRecipesFrom() { -// ItemStack i = getItemStack().clone(); -// i.getData().setData((byte) data); -// if (i.getType().getMaxDurability() > 15) -// i.setDurability((short) 0); -// Iterator it = Bukkit.recipeIterator(); -// List recipes = new ArrayList(); -// while (it.hasNext()) { -// Recipe rec = it.next(); -// for (ItemStack one : CMI.getInstance().getRecipeManager().getIngredientsList(rec)) { -// if (one.isSimilar(i)) { -// recipes.add(rec); -// break; -// } -// } -// } -// -// return recipes; -// } + return EntityType.fromId(is.getData().getData()); + } public void setDurability(short durability) { this.durability = durability; } -// public Set getValidEnchants() { -// Set enchants = new HashSet(); -// for (Enchantment one : CMIEnchantment.values()) { -// if (!CMIEnchantment.isEnabled(one)) -// continue; -// if (one.canEnchantItem(this.getItemStack())) -// enchants.add(one); -// } -// return enchants; -// } + public String toOneLiner() { + + String liner = this.getType().toString(); + if (this.getCMIType().isPotion() || this.getType().name().contains("TIPPED_ARROW")) { + PotionMeta potion = (PotionMeta) item.getItemMeta(); + try { + if (potion != null && potion.getBasePotionData() != null && potion.getBasePotionData().getType() != null && potion.getBasePotionData().getType().getEffectType() != null) { + liner += ":" + potion.getBasePotionData().getType().getEffectType().getName() + "-" + potion.getBasePotionData().isUpgraded() + "-" + potion.getBasePotionData().isExtended(); + } + } catch (NoSuchMethodError e) { + } + } else { + if (Version.isCurrentLower(Version.v1_13_R1)) + liner += ":" + this.getData(); + } + if (this.getItemStack().getItemMeta() instanceof EnchantmentStorageMeta) { + EnchantmentStorageMeta meta = (EnchantmentStorageMeta) this.getItemStack().getItemMeta(); + String s = ""; + for (Entry one : meta.getStoredEnchants().entrySet()) { + if (!s.isEmpty()) + s += ";"; + s += one.getKey().getName() + "x" + one.getValue(); + } + + for (Entry one : meta.getEnchants().entrySet()) { + if (!s.isEmpty()) + s += ";"; + s += one.getKey().getName() + "x" + one.getValue(); + } + if (!s.isEmpty()) { + liner += ":" + s; + } + } + + return liner; + } } diff --git a/src/com/bekvon/bukkit/cmiLib/ItemManager.java b/src/com/bekvon/bukkit/cmiLib/ItemManager.java index 71ae10895..468bb17e8 100644 --- a/src/com/bekvon/bukkit/cmiLib/ItemManager.java +++ b/src/com/bekvon/bukkit/cmiLib/ItemManager.java @@ -3,6 +3,7 @@ */ package com.bekvon.bukkit.cmiLib; +import java.awt.Color; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -21,20 +22,41 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.meta.BlockStateMeta; +import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.potion.PotionData; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.potion.PotionType; +import com.Zrips.CMI.Modules.CmiItems.ItemManager.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; +import com.bekvon.bukkit.residence.Residence; public class ItemManager { - static HashMap byId = new HashMap<>(); - static HashMap byBukkitName = new HashMap<>(); - static HashMap byMojangName = new HashMap<>(); - static HashMap byMaterial = new HashMap<>(); - static final Version version = Version.getCurrent(); + private Residence plugin; - public static void load() { + static HashMap byId = new HashMap(); + static HashMap byBukkitName = new HashMap(); + static HashMap byMojangName = new HashMap(); + static HashMap byMaterial = new HashMap(); + static HashMap byRealMaterial = new HashMap(); +// HashMap customNamesEn = new HashMap(); +// HashMap customNames = new HashMap(); + + public ItemManager(Residence plugin) { + this.plugin = plugin; + } + + public HashMap idMap() { + return byId; + } + + public HashMap byBukkitNameMap() { + return byBukkitName; + } + public static void load() { for (CMIMaterial one : CMIMaterial.values()) { if (one == null) continue; @@ -45,96 +67,119 @@ public static void load() { continue; } - int id = one.getId(); - int data = one.getLegacyData(); - int legacyId = one.getLegacyId(); + Integer id = one.getId(); + short data = one.getLegacyData(); + Integer legacyId = one.getLegacyId(); String bukkitName = one.name(); String mojangName = one.name(); + ; try { mojangName = ItemReflection.getItemMinecraftName(new ItemStack(mat)); } catch (Exception e) { + e.printStackTrace(); } + + mojangName = mojangName == null ? mat.toString() : mojangName; CMIItemStack cm = new CMIItemStack(one); cm.setId(id); - cm.setData((short) (data > 0 ? data : 0)); + cm.setData(data > 0 ? data : 0); cm.setBukkitName(bukkitName); cm.setMojangName(mojangName); - byBukkitName.put(id + ":" + one.getData(), cm); - byBukkitName.put(legacyId + ":" + one.getLegacyData(), cm); + byBukkitName.put(bukkitName + ":" + cm.getData(), cm); + byBukkitName.put(id + ":" + cm.getData(), cm); + byBukkitName.put(legacyId + ":" + cm.getData(), cm); if (!one.getLegacyName().isEmpty()) { byBukkitName.put(one.getLegacyName().toLowerCase().replace("_", "").replace(" ", ""), cm); } byBukkitName.put(one.name().toLowerCase().replace("_", "").replace(" ", ""), cm); - if (mojangName != null) { - String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); - if (!byMojangName.containsKey(n)) - byMojangName.put(n, cm); - } + String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); + if (!byMojangName.containsKey(n)) + byMojangName.put(n, cm); byMaterial.put(one, cm); if (!byId.containsKey(id)) byId.put(id, cm); if (!byId.containsKey(one.getLegacyId())) byId.put(one.getLegacyId(), cm); + if (one.getLegacyData() == 0) + byId.put(one.getLegacyId(), cm); + byRealMaterial.put(mat, one); } for (Material one : Material.class.getEnumConstants()) { CMIMaterial mat = CMIMaterial.get(one); - if (mat == null && !one.toString().startsWith("LEGACY_")) { + if (mat == CMIMaterial.NONE && !one.toString().startsWith("LEGACY_")) { CMIItemStack cm = new CMIItemStack(new ItemStack(one)); - cm.setId(one.getId()); + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) + cm.setId(one.getId()); cm.setBukkitName(one.name()); - byBukkitName.put(one.getId() + ":" + cm.getData(), cm); + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) + byBukkitName.put(one.getId() + ":" + cm.getData(), cm); byBukkitName.put(one.name().toLowerCase().replace("_", "").replace(" ", ""), cm); String mojangName = one.name(); try { mojangName = ItemReflection.getItemMinecraftName(new ItemStack(one)); } catch (Exception e) { } + mojangName = mojangName == null ? mat.toString() : mojangName; cm.setMojangName(mojangName); String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); if (!byMojangName.containsKey(n)) byMojangName.put(n, cm); - if (!byId.containsKey(one.getId())) - byId.put(one.getId(), cm); + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) + if (!byId.containsKey(one.getId())) + byId.put(one.getId(), cm); + byRealMaterial.put(one, mat); } } } @Deprecated - public static CMIItemStack getItem(Material mat) { + public CMIItemStack getItem(Material mat) { CMIItemStack cm = byMaterial.get(CMIMaterial.get(mat)); return cm.clone(); } public static CMIItemStack getItem(CMIMaterial mat) { CMIItemStack cm = byMaterial.get(mat); - return cm.clone(); + return cm == null ? null : cm.clone(); } public static CMIItemStack getItem(ItemStack item) { if (item == null) item = new ItemStack(Material.AIR); CMIItemStack cm = getItem(CMIMaterial.get(item)); + if (cm == null) + return new CMIItemStack(Material.AIR); cm.setItemStack(item); return cm; } - static HashMap headCache = new HashMap<>(); + HashMap headCache = new HashMap(); - public static CMIItemStack getItem(String name) { - if (byBukkitName.isEmpty()) - load(); + public CMIItemStack getItem(String name) { +// if (byBukkitName.isEmpty()) +// load(); CMIItemStack cm = null; - name = name.toLowerCase().replace("_", "").replace("minecraft:", ""); + name = name.toLowerCase().replace("minecraft:", ""); String original = name; + name = name.replace("_", ""); Integer amount = null; + + String subdata = null; + if (name.contains(":")) { + CMIItemStack mat = byBukkitName.get(name); + if (mat != null) + return mat; + subdata = name.split(":")[1]; + } + if (name.contains("-")) { String a = name.split("-")[1]; try { @@ -154,7 +199,7 @@ public static CMIItemStack getItem(String name) { try { CMIEntityType e = CMIEntityType.getByName(name.split(":")[1]); if (e != null) - data = e.getType().getTypeId(); + data = (short) e.getId(); } catch (Exception e) { } name = name.split(":")[0]; @@ -178,7 +223,7 @@ public static CMIItemStack getItem(String name) { cm.setItemStack(old); } else { String d = original.split(":")[1]; - ItemStack skull = new ItemStack(CMIMaterial.PLAYER_HEAD.getMaterial(), 1, (byte) 3); + ItemStack skull = CMIMaterial.PLAYER_HEAD.newItemStack(); SkullMeta skullMeta = (SkullMeta) skull.getItemMeta(); if (d.length() == 36) { try { @@ -200,8 +245,35 @@ public static CMIItemStack getItem(String name) { break; } - if (cm == null) { + main: if (cm == null) { cm = byBukkitName.get(name); + if (subdata != null && cm != null) { + cm = byBukkitName.get(cm.getCMIType() + ":" + subdata); + if (cm != null) + break main; + } + cm = byBukkitName.get(name); + + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { + if (cm != null && data != -999) { + CMIMaterial t = CMIMaterial.get(cm.getCMIType().getLegacyId(), data); + if (t != null) { + cm = byMaterial.get(t); + } + } + } + + if (data != -999) { + try { + cm = byId.get(Integer.parseInt(name)); + CMIMaterial t = CMIMaterial.get(original); + if (t != null) { + cm = this.byMaterial.get(t); + } + } catch (Exception e) { + } + } + if (cm == null) { try { cm = byId.get(Integer.parseInt(name)); @@ -262,6 +334,7 @@ public static CMIItemStack getItem(String name) { } } } +// } } } } @@ -279,11 +352,62 @@ public static CMIItemStack getItem(String name) { } if (ncm != null && amount != null) ncm.setAmount(amount); + + if (ncm != null && subdata != null) { + + if (ncm.getCMIType().isPotion() || ncm.getCMIType().equals(CMIMaterial.SPLASH_POTION) || ncm.getCMIType().equals(CMIMaterial.TIPPED_ARROW)) { + Integer d = null; + PotionEffectType type = null; + Boolean upgraded = false; + Boolean extended = false; + String[] split = subdata.split("-"); + try { + d = Integer.parseInt(split.length > 0 ? split[0] : subdata); + type = PotionEffectType.getById(d); + } catch (Exception e) { + } + try { + + String n = (split.length > 0 ? split[0] : subdata).replace("_", ""); + for (PotionEffectType one : PotionEffectType.values()) { + if (one == null) + continue; + if (n.equalsIgnoreCase(one.getName().replace("_", ""))) { + type = one; + break; + } + } + + if (split.length > 1) { + try { + upgraded = Boolean.parseBoolean(split[1]); + } catch (Exception e) { + } + } + if (split.length > 2) { + try { + extended = Boolean.parseBoolean(split[2]); + } catch (Exception e) { + } + } + ItemStack item = ncm.getItemStack(); + if (extended && upgraded) + extended = false; + PotionMeta meta = (PotionMeta) item.getItemMeta(); + meta.setBasePotionData(new PotionData(PotionType.getByEffect(type), extended, upgraded)); + item.setItemMeta(meta); + } catch (Exception e) { + e.printStackTrace(); + } + + } + } + return ncm; } - static public List getAllRecipes() { - List results = new ArrayList<>(); + public List getAllRecipes() { + List results = new ArrayList(); Iterator iter = Bukkit.recipeIterator(); while (iter.hasNext()) { Recipe recipe = iter.next(); @@ -292,9 +416,9 @@ static public List getAllRecipes() { return results; } - static public List getRecipesFor(ItemStack result) { + public List getRecipesFor(ItemStack result) { - List results = new ArrayList<>(); + List results = new ArrayList(); Iterator iter = Bukkit.recipeIterator(); while (iter.hasNext()) { Recipe recipe = iter.next(); @@ -309,37 +433,80 @@ static public List getRecipesFor(ItemStack result) { return results; } - static public Material getMaterial(String name) { + public Material getMaterial(String name) { CMIItemStack cm = getItem(name); if (cm == null) return Material.AIR; - return cm.getMaterial(); + return cm.getType(); } - public enum colorNames { - White(0, "White"), - Orange(1, "Orange"), - Magenta(2, "Magenta"), - Light(3, "Light Blue"), - Yellow(4, "Yellow"), - Lime(5, "Lime"), - Pink(6, "Pink"), - Gray(7, "Gray"), - Light_Gray(8, "Light Gray"), - Cyan(9, "Cyan"), - Purple(10, "Purple"), - Blue(11, "Blue"), - Brown(12, "Brown"), - Green(13, "Green"), - Red(14, "Red"), - Black(15, "Black"); +// public CMIMaterial getRealName(CMIItemStack item) { +// return getRealName(item, false); +// } +// +// public CMIMaterial getRealName(CMIItemStack item, boolean safe) { +// +//// for (CMIMaterial one : CMIMaterial.values()) { +//// if (one.getId() == item.getId() && one.getDataList().contains(item.getData())) +//// return one; +//// } +//// if (safe) +//// for (CMIMaterial one : CMIMaterial.values()) { +//// if (one.getId() == item.getId()) +//// return one; +//// } +//// return safe ? CMIMaterial.AIR : null; +// return item.getRealName(); +// } + +// private static CMIMaterialLegacy proccessItemName(CMIMaterialLegacy one) { +// if (one.getName().contains("[colorNames]")) +// one.setName(one.getName().replace("[colorNames]", colorNames.getById(one.getData()).getName())); +// else if (one.getName().contains("[entityNames]")) +// one.setName(one.getName().replace("[entityNames]", CMIEntityType.getById(one.getData()).getName())); +// return one; +// } + public enum SlabType { + TOP, + BOTTOM, + DOUBLE, + NOTSLAB; + } + + public enum CMIColors { + White(0, "White", CMIMaterial.BONE_MEAL, new Color(249, 255, 254)), + Orange(1, "Orange", CMIMaterial.ORANGE_DYE, new Color(249, 128, 29)), + Magenta(2, "Magenta", CMIMaterial.MAGENTA_DYE, new Color(199, 78, 189)), + Light_Blue(3, "Light Blue", CMIMaterial.LIGHT_BLUE_DYE, new Color(58, 179, 218)), + Yellow(4, "Yellow", CMIMaterial.DANDELION_YELLOW, new Color(254, 216, 61)), + Lime(5, "Lime", CMIMaterial.LIME_DYE, new Color(128, 199, 31)), + Pink(6, "Pink", CMIMaterial.PINK_DYE, new Color(243, 139, 170)), + Gray(7, "Gray", CMIMaterial.GRAY_DYE, new Color(71, 79, 82)), + Light_Gray(8, "Light Gray", CMIMaterial.LIGHT_GRAY_DYE, new Color(157, 157, 151)), + Cyan(9, "Cyan", CMIMaterial.CYAN_DYE, new Color(22, 156, 156)), + Purple(10, "Purple", CMIMaterial.PURPLE_DYE, new Color(137, 50, 184)), + Blue(11, "Blue", CMIMaterial.LAPIS_LAZULI, new Color(60, 68, 170)), + Brown(12, "Brown", CMIMaterial.COCOA_BEANS, new Color(131, 84, 50)), + Green(13, "Green", CMIMaterial.CACTUS_GREEN, new Color(94, 124, 22)), + Red(14, "Red", CMIMaterial.ROSE_RED, new Color(176, 46, 38)), + Black(15, "Black", CMIMaterial.INK_SAC, new Color(29, 29, 33)); private int id; private String name; + private CMIMaterial mat; + private Color color; + + CMIColors(int id, String name, CMIMaterial mat, Color color) { + this.id = id; + this.name = name; + this.mat = mat; + this.color = color; + } - colorNames(int id, String name) { + CMIColors(int id, String name, CMIMaterial mat) { this.id = id; this.name = name; + this.mat = mat; } public int getId() { @@ -350,12 +517,55 @@ public String getName() { return name; } - public static colorNames getById(int id) { - for (colorNames one : colorNames.values()) { + public static CMIColors getById(int id) { + for (CMIColors one : CMIColors.values()) { if (one.getId() == id) return one; } - return colorNames.White; + return CMIColors.White; + } + + public CMIMaterial getMat() { + return mat; + } + + public void setMat(CMIMaterial mat) { + this.mat = mat; + } + + public static CMIMaterial getColorMaterial(CMIMaterial mat) { + String name = mat.getName().replace(" ", "").replace("_", "").toLowerCase(); + for (CMIColors one : values()) { + if (name.contains(one.getName().replace("_", "").toLowerCase())) + return one.getMat(); + } + + return null; + } + + public static CMIColors getColor(CMIMaterial mat) { + String name = mat.getName().replace(" ", "").replace("_", "").toLowerCase(); + for (CMIColors one : values()) { + if (name.contains(one.getName().replace("_", "").toLowerCase())) + return one; + } + +// if (c == null) { +// try { +// net.minecraft.server.v1_13_R2.BlockPosition blockPosition = new net.minecraft.server.v1_13_R2.BlockPosition(b.getX(), b.getY(), b.getZ()); +// net.minecraft.server.v1_13_R2.WorldServer worldServer = ((org.bukkit.craftbukkit.v1_13_R2.CraftWorld) b.getWorld()).getHandle(); +// IBlockData t = worldServer.getType(blockPosition); +// net.minecraft.server.v1_13_R2.Block bl = t.getBlock(); +// c = new Color(bl.n(t).i().rgb, true); +// } catch (Exception | Error e) { +// } +// } + + return null; + } + + public Color getColor() { + return color; } } @@ -398,7 +608,6 @@ public enum CMIEntityType { VEX(35, "Vex"), VINDICATOR(36, "Vindicator"), ILLUSIONER(37, "Illusioner"), - MINECART_COMMAND(40, "Minecart with Command Block"), BOAT(41, "Boat"), MINECART(42, "Minecart"), MINECART_CHEST(43, "Minecart with Chest"), @@ -413,7 +622,6 @@ public enum CMIEntityType { ZOMBIE(54, "Zombie"), SLIME(55, "Slime"), GHAST(56, "Ghast"), - PIG_ZOMBIE(57, "Zombie Pigman"), ENDERMAN(58, "Enderman"), CAVE_SPIDER(59, "Cave Spider"), SILVERFISH(60, "Silverfish"), @@ -432,7 +640,7 @@ public enum CMIEntityType { CHICKEN(93, "Chicken"), SQUID(94, "Squid"), WOLF(95, "Wolf"), - MUSHROOM_COW(96, "Mushroom Cow"), + MUSHROOM_COW(96, "Mushroom Cow", "Mooshroom"), SNOWMAN(97, "Snowman"), OCELOT(98, "Ocelot"), IRON_GOLEM(99, "Iron Golem"), @@ -460,15 +668,28 @@ public enum CMIEntityType { PLAYER(914, "Player"), COMPLEX_PART(915, "Complex Part"), TIPPED_ARROW(916, "Tipped Arrow"), + + PANDA(916, "Panda"), + PILLAGER(916, "Pillager"), + RAVAGER(916, "Ravager"), + TRADER_LLAMA(916, "Trader Llama"), + WANDERING_TRADER(916, "Wandering Trader"), + FOX(916, "Fox"), UNKNOWN(999, "Unknown"); private int id; private String name; + private String secondaryName; EntityType type = null; CMIEntityType(int id, String name) { + this(id, name, null); + } + + CMIEntityType(int id, String name, String secondaryName) { this.id = id; this.name = name; + this.secondaryName = secondaryName; } public int getId() { @@ -586,6 +807,18 @@ public static CMIEntityType getByName(String name) { break; } } + if (type == null) + for (CMIEntityType one : CMIEntityType.values()) { + if (one.secondaryName == null) + continue; + + String oneN = one.secondaryName; + oneN = oneN.replace("_", ""); + if (oneN.equalsIgnoreCase(name)) { + type = one; + break; + } + } return type; } @@ -603,11 +836,11 @@ public EntityType getType() { } public boolean isAlive() { - return getType().isAlive(); + return getType() == null ? false : getType().isAlive(); } public boolean isSpawnable() { - return getType().isSpawnable(); + return getType() == null ? false : getType().isSpawnable(); } public static String getRealNameByType(EntityType type) { @@ -622,24 +855,34 @@ public static String getRealNameByType(EntityType type) { name = name.substring(0, 1).toUpperCase() + name.substring(1); return name; } + + public CMIMaterial getSpawnEggMaterial() { + + CMIMaterial m = CMIMaterial.get((this.equals(CMIEntityType.MUSHROOM_COW) ? "Mooshroom".toLowerCase() : this.toString().toLowerCase()) + "_spawn_egg"); + + if (m != null && m.isMonsterEgg()) + return m; + + return null; + } } public enum CMIMaterial { - NONE(-1, -1, -1, "None"), + NONE(null, null, null, "None"), ACACIA_BOAT(447, 0, 27326, "Acacia Boat", "BOAT_ACACIA"), - ACACIA_BUTTON(-1, -1, 13993, "Acacia Button"), + ACACIA_BUTTON(null, null, 13993, "Acacia Button"), ACACIA_DOOR(430, 0, 23797, "Acacia Door", "ACACIA_DOOR_ITEM"), ACACIA_FENCE(192, 0, 4569, "Acacia Fence"), ACACIA_FENCE_GATE(187, 0, 14145, "Acacia Fence Gate"), ACACIA_LEAVES(161, 0, 16606, "Acacia Leaves", "LEAVES_2"), ACACIA_LOG(162, 0, 8385, "Acacia Log", "LOG_2"), ACACIA_PLANKS(5, 4, 31312, "Acacia Wood Plank", "Acacia Planks"), - ACACIA_PRESSURE_PLATE(-1, -1, 17586, "Acacia Pressure Plate"), + ACACIA_PRESSURE_PLATE(null, null, 17586, "Acacia Pressure Plate"), ACACIA_SAPLING(6, 4, 20806, "Acacia Sapling"), ACACIA_SLAB(126, 4, 23730, "Acacia Wood Slab", "Acacia Slab"), ACACIA_STAIRS(163, 0, 17453, "Acacia Stairs"), - ACACIA_TRAPDOOR(-1, -1, 18343, "Acacia Trapdoor"), - ACACIA_WOOD(-1, -1, 21861, "Acacia Wood"), + ACACIA_TRAPDOOR(null, null, 18343, "Acacia Trapdoor"), + ACACIA_WOOD(null, null, 21861, "Acacia Wood"), ACTIVATOR_RAIL(157, 0, 5834, "Activator Rail"), AIR(0, 0, 9648, "Air"), ALLIUM(38, 2, 6871, "Allium", "RED_ROSE"), @@ -647,9 +890,9 @@ public enum CMIMaterial { ANVIL(145, 0, 18718, "Anvil"), APPLE(260, 0, 7720, "Apple"), ARMOR_STAND(416, 0, 12852, "Armor Stand"), - ARROW(262, 0, 31091, "Arrow", "ARROW"), - ATTACHED_MELON_STEM(-1, -1, 30882, "Attached Melon Stem"), - ATTACHED_PUMPKIN_STEM(-1, -1, 12724, "Attached Pumpkin Stem"), + ARROW(262, 0, 31091, "Arrow"), + ATTACHED_MELON_STEM(null, null, 30882, "Attached Melon Stem"), + ATTACHED_PUMPKIN_STEM(null, null, 12724, "Attached Pumpkin Stem"), AZURE_BLUET(38, 3, 17608, "Azure Bluet"), BAKED_POTATO(393, 0, 14624, "Baked Potato"), BARRIER(166, 0, 26453, "Barrier"), @@ -662,26 +905,26 @@ public enum CMIMaterial { BEETROOT_SEEDS(435, 0, 21282, "Beetroot Seeds"), BEETROOT_SOUP(436, 0, 16036, "Beetroot Soup"), BIRCH_BOAT(445, 0, 28104, "Birch Boat", "BOAT_BIRCH"), - BIRCH_BUTTON(-1, -1, 26934, "Birch Button"), + BIRCH_BUTTON(null, null, 26934, "Birch Button"), BIRCH_DOOR(428, 0, 14759, "Birch Door", "BIRCH_DOOR_ITEM"), - BIRCH_FENCE(189, 0, 17347, "Birch Fence", "BIRCH_FENCE"), - BIRCH_FENCE_GATE(184, 0, 6322, "Birch Fence Gate", "BIRCH_FENCE_GATE"), + BIRCH_FENCE(189, 0, 17347, "Birch Fence"), + BIRCH_FENCE_GATE(184, 0, 6322, "Birch Fence Gate"), BIRCH_LEAVES(18, 2, 12601, "Birch Leaves", "LEAVES"), BIRCH_LOG(17, 2, 26727, "Birch Log", "LOG"), BIRCH_PLANKS(5, 2, 29322, "Birch Wood Plank", "Birch Planks"), - BIRCH_PRESSURE_PLATE(-1, -1, 9664, "Birch Pressure Plate"), + BIRCH_PRESSURE_PLATE(null, null, 9664, "Birch Pressure Plate"), BIRCH_SAPLING(6, 2, 31533, "Birch Sapling"), BIRCH_SLAB(126, 2, 13807, "Birch Slab"), BIRCH_STAIRS(135, 0, 7657, "Birch Wood Stairs", "Birch Stairs"), - BIRCH_TRAPDOOR(-1, -1, 32585, "Birch Trapdoor"), - BIRCH_WOOD(-1, -1, 20913, "Birch Wood"), + BIRCH_TRAPDOOR(null, null, 32585, "Birch Trapdoor"), + BIRCH_WOOD(null, null, 20913, "Birch Wood"), BLACK_BANNER(425, 0, 9365, "Banner", "Black Banner"), BLACK_BED(355, 15, 20490, "Black Bed"), BLACK_CARPET(171, 15, 6056, "Black Carpet", "CARPET"), BLACK_CONCRETE(251, 15, 13338, "Black Concrete", "CONCRETE"), BLACK_CONCRETE_POWDER(252, 15, 16150, "Black Concrete Powder", "CONCRETE_POWDER"), - BLACK_GLAZED_TERRACOTTA(250, 0, 29678, "Black Glazed Terracotta", "BLACK_GLAZED_TERRACOTTA"), - BLACK_SHULKER_BOX(234, 0, 24076, "Black Shulker Box", "BLACK_SHULKER_BOX"), + BLACK_GLAZED_TERRACOTTA(250, 0, 29678, "Black Glazed Terracotta"), + BLACK_SHULKER_BOX(234, 0, 24076, "Black Shulker Box"), BLACK_STAINED_GLASS(95, 15, 13941, "Black Stained Glass", "STAINED_GLASS"), BLACK_STAINED_GLASS_PANE(160, 15, 13201, "Black Stained Glass Pane", "STAINED_GLASS_PANE"), BLACK_TERRACOTTA(159, 15, 26691, "Black Terracotta", "STAINED_CLAY"), @@ -696,7 +939,7 @@ public enum CMIMaterial { BLUE_CONCRETE(251, 11, 18756, "Blue Concrete"), BLUE_CONCRETE_POWDER(252, 11, 17773, "Blue Concrete Powder"), BLUE_GLAZED_TERRACOTTA(246, 0, 23823, "Blue Glazed Terracotta"), - BLUE_ICE(-1, -1, 22449, "Blue Ice"), + BLUE_ICE(null, null, 22449, "Blue Ice"), BLUE_ORCHID(38, 1, 13432, "Blue Orchid"), BLUE_SHULKER_BOX(230, 0, 11476, "Blue Shulker Box"), BLUE_STAINED_GLASS(95, 11, 7107, "Blue Stained Glass"), @@ -711,10 +954,10 @@ public enum CMIMaterial { BOOKSHELF(47, 0, 10069, "Bookshelf"), BOW(261, 0, 8745, "Bow"), BOWL(281, 0, 32661, "Bowl"), - BRAIN_CORAL(-1, -1, 31316, "Brain Coral"), - BRAIN_CORAL_BLOCK(-1, -1, 30618, "Brain Coral Block"), - BRAIN_CORAL_FAN(-1, -1, 13849, "Brain Coral Fan"), - BRAIN_CORAL_WALL_FAN(-1, -1, 22685, "Brain Coral Wall Fan"), + BRAIN_CORAL(null, null, 31316, "Brain Coral"), + BRAIN_CORAL_BLOCK(null, null, 30618, "Brain Coral Block"), + BRAIN_CORAL_FAN(null, null, 13849, "Brain Coral Fan"), + BRAIN_CORAL_WALL_FAN(null, null, 22685, "Brain Coral Wall Fan"), BREAD(297, 0, 32049, "Bread"), BREWING_STAND(379, 0, 14539, "Brewing Stand", "BREWING_STAND_ITEM"), BRICK(336, 0, 6820, "Brick", "claybrick"), @@ -735,11 +978,11 @@ public enum CMIMaterial { BROWN_TERRACOTTA(159, 12, 23664, "Brown Terracotta"), BROWN_WALL_BANNER(117, 3, 14731, "Brown Banner"), BROWN_WOOL(35, 12, 32638, "Brown Wool"), - BUBBLE_COLUMN(-1, -1, 13758, "Bubble Column"), - BUBBLE_CORAL(-1, -1, 12464, "Bubble Coral"), - BUBBLE_CORAL_BLOCK(-1, -1, 15437, "Bubble Coral Block"), - BUBBLE_CORAL_FAN(-1, -1, 10795, "Bubble Coral Fan"), - BUBBLE_CORAL_WALL_FAN(-1, -1, 20382, "Bubble Coral Wall Fan"), + BUBBLE_COLUMN(null, null, 13758, "Bubble Column"), + BUBBLE_CORAL(null, null, 12464, "Bubble Coral"), + BUBBLE_CORAL_BLOCK(null, null, 15437, "Bubble Coral Block"), + BUBBLE_CORAL_FAN(null, null, 10795, "Bubble Coral Fan"), + BUBBLE_CORAL_WALL_FAN(null, null, 20382, "Bubble Coral Wall Fan"), BUCKET(325, 0, 15215, "Bucket"), CACTUS(81, 0, 12191, "Cactus"), CACTUS_GREEN(351, 2, 17296, "Cactus Green"), @@ -747,15 +990,15 @@ public enum CMIMaterial { CARROT(391, 0, 22824, "Carrot", "Carrotitem"), CARROTS(141, 0, 17258, "Carrots"), CARROT_ON_A_STICK(398, 0, 27809, "Carrot on a Stick", "carrotstick"), - CARVED_PUMPKIN(-1, -1, 25833, "Carved Pumpkin"), + CARVED_PUMPKIN(null, null, 25833, "Carved Pumpkin"), CAULDRON(380, 0, 26531, "Cauldron", "CAULDRON_ITEM"), - CAVE_AIR(-1, -1, 17422, "Cave Air"), + CAVE_AIR(null, null, 17422, "Cave Air"), CAVE_SPIDER_SPAWN_EGG(383, 59, 23341, "Spawn Cave Spider", "Cave Spider Spawn Egg"), CHAINMAIL_BOOTS(305, 0, 17953, "Chainmail Boots"), CHAINMAIL_CHESTPLATE(303, 0, 23602, "Chainmail Chestplate"), CHAINMAIL_HELMET(302, 0, 26114, "Chainmail Helmet"), CHAINMAIL_LEGGINGS(304, 0, 19087, "Chainmail Leggings"), - CHAIN_COMMAND_BLOCK(-1, -1, 26798, "Chain Command Block"), + CHAIN_COMMAND_BLOCK(null, null, 26798, "Chain Command Block"), CHARCOAL(263, 1, 5390, "Charcoal"), CHEST(54, 0, 22969, "Chest"), CHEST_MINECART(342, 0, 4497, "Minecart with Chest", "Storageminecart"), @@ -764,11 +1007,11 @@ public enum CMIMaterial { CHIPPED_ANVIL(145, 1, 10623, "Chipped Anvil"), CHISELED_QUARTZ_BLOCK(155, 1, 30964, "Chiseled Quartz Block", "QUARTZ_BLOCK"), CHISELED_RED_SANDSTONE(179, 1, 15529, "Chiseled Red Sandstone", "RED_SANDSTONE"), - CHISELED_SANDSTONE(24, 1, 31763, "Chiseled Sandstone", "SANDSTONE"), + CHISELED_SANDSTONE(24, 1, 31763, "Chiseled Sandstone"), CHISELED_STONE_BRICKS(98, 3, 9087, "Chiseled Stone Bricks", "SMOOTH_BRICK"), - CHORUS_FLOWER(200, 0, 28542, "Chorus Flower", "CHORUS_FLOWER"), + CHORUS_FLOWER(200, 0, 28542, "Chorus Flower"), CHORUS_FRUIT(432, 0, 7652, "Chorus Fruit"), - CHORUS_PLANT(199, 0, 28243, "Chorus Plant", "CHORUS_PLANT"), + CHORUS_PLANT(199, 0, 28243, "Chorus Plant"), CLAY(82, 0, 27880, "Clay", "Clay Block"), CLAY_BALL(337, 0, 24603, "Clay Ball"), CLOCK(347, 0, 14980, "Clock", "watch"), @@ -783,14 +1026,14 @@ public enum CMIMaterial { COBWEB(30, 0, 9469, "Cobweb", "WEB"), COCOA(127, 0, 29709, "Cocoa"), COCOA_BEANS(351, 3, 27381, "Coco Beans"), - COD(-1, -1, 24691, "Raw Cod"), - COD_BUCKET(-1, -1, 28601, "Bucket of Cod"), - COD_SPAWN_EGG(-1, -1, 27248, "Cod Spawn Egg"), + COD(null, null, 24691, "Raw Cod"), + COD_BUCKET(null, null, 28601, "Bucket of Cod"), + COD_SPAWN_EGG(null, null, 27248, "Cod Spawn Egg"), COMMAND_BLOCK(137, 0, 4355, "Command Block", "COMMAND"), COMMAND_BLOCK_MINECART(422, 0, 7992, "Minecart with Command Block"), COMPARATOR(404, 0, 18911, "Redstone Comparator"), COMPASS(345, 0, 24139, "Compass"), - CONDUIT(-1, -1, 5148, "Conduit"), + CONDUIT(null, null, 5148, "Conduit"), COOKED_BEEF(364, 0, 21595, "Steak"), COOKED_CHICKEN(366, 0, 20780, "Cooked Chicken"), COOKED_COD(350, 0, 9681, "Cooked Fish"), @@ -805,16 +1048,16 @@ public enum CMIMaterial { CREEPER_HEAD(397, 4, 29146, "Mob Head (Creeper)", "Creeper Head"), CREEPER_SPAWN_EGG(383, 50, 9653, "Spawn Creeper", "Creeper Spawn Egg"), CREEPER_WALL_HEAD(144, 4, 30123, "Creeper Wall Head"), - CUT_RED_SANDSTONE(-1, -1, 26842, "Cut Red Sandstone"), - CUT_SANDSTONE(-1, -1, 6118, "Cut Sandstone"), + CUT_RED_SANDSTONE(null, null, 26842, "Cut Red Sandstone"), + CUT_SANDSTONE(null, null, 6118, "Cut Sandstone"), CYAN_BANNER(425, 6, 9839, "Cyan Banner"), - CYAN_BED(355, 9, 16746, "Cyan Bed", "Cyan Bed"), + CYAN_BED(355, 9, 16746, "Cyan Bed"), CYAN_CARPET(171, 9, 31495, "Cyan Carpet"), CYAN_CONCRETE(251, 9, 26522, "Cyan Concrete"), CYAN_CONCRETE_POWDER(252, 9, 15734, "Cyan Concrete Powder"), CYAN_DYE(351, 6, 8043, "Cyan Dye"), - CYAN_GLAZED_TERRACOTTA(244, 0, 9550, "Cyan Glazed Terracotta", "CYAN_GLAZED_TERRACOTTA"), - CYAN_SHULKER_BOX(228, 0, 28123, "Cyan Shulker Box", "CYAN_SHULKER_BOX"), + CYAN_GLAZED_TERRACOTTA(244, 0, 9550, "Cyan Glazed Terracotta"), + CYAN_SHULKER_BOX(228, 0, 28123, "Cyan Shulker Box"), CYAN_STAINED_GLASS(95, 9, 30604, "Cyan Stained Glass"), CYAN_STAINED_GLASS_PANE(160, 9, 11784, "Cyan Stained Glass Pane"), CYAN_TERRACOTTA(159, 9, 25940, "Cyan Terracotta"), @@ -824,45 +1067,45 @@ public enum CMIMaterial { DANDELION(37, 0, 30558, "Dandelion", "YELLOW_FLOWER"), DANDELION_YELLOW(351, 11, 21789, "Dandelion Yellow"), DARK_OAK_BOAT(448, 0, 28618, "Dark Oak Boat", "BOAT_DARK_OAK"), - DARK_OAK_BUTTON(-1, -1, 6214, "Dark Oak Button"), + DARK_OAK_BUTTON(null, null, 6214, "Dark Oak Button"), DARK_OAK_DOOR(431, 0, 10669, "Dark Oak Door", "DARK_OAK_DOOR_ITEM"), - DARK_OAK_FENCE(191, 0, 21767, "Dark Oak Fence", "DARK_OAK_FENCE"), - DARK_OAK_FENCE_GATE(186, 0, 10679, "Dark Oak Fence Gate", "DARK_OAK_FENCE_GATE"), + DARK_OAK_FENCE(191, 0, 21767, "Dark Oak Fence"), + DARK_OAK_FENCE_GATE(186, 0, 10679, "Dark Oak Fence Gate"), DARK_OAK_LEAVES(161, 1, 22254, "Dark Oak Leaves"), DARK_OAK_LOG(162, 1, 14831, "Dark Oak Log"), DARK_OAK_PLANKS(5, 5, 20869, "Dark Oak Wood Plank", "Dark Oak Planks"), - DARK_OAK_PRESSURE_PLATE(-1, -1, 31375, "Dark Oak Pressure Plate"), + DARK_OAK_PRESSURE_PLATE(null, null, 31375, "Dark Oak Pressure Plate"), DARK_OAK_SAPLING(6, 5, 14933, "Dark Oak Sapling"), DARK_OAK_SLAB(126, 5, 28852, "Dark Oak Wood Slab", "Dark Oak Slab"), - DARK_OAK_STAIRS(164, 0, 22921, "Dark Oak Stairs", "DARK_OAK_STAIRS"), - DARK_OAK_TRAPDOOR(-1, -1, 10355, "Dark Oak Trapdoor"), - DARK_OAK_WOOD(-1, -1, 16995, "Dark Oak Wood"), + DARK_OAK_STAIRS(164, 0, 22921, "Dark Oak Stairs"), + DARK_OAK_TRAPDOOR(null, null, 10355, "Dark Oak Trapdoor"), + DARK_OAK_WOOD(null, null, 16995, "Dark Oak Wood"), DARK_PRISMARINE(168, 2, 19940, "Dark Prismarine"), - DARK_PRISMARINE_SLAB(-1, -1, 7577, "Dark Prismarine Slab"), - DARK_PRISMARINE_STAIRS(-1, -1, 26511, "Dark Prismarine Stairs"), + DARK_PRISMARINE_SLAB(null, null, 7577, "Dark Prismarine Slab"), + DARK_PRISMARINE_STAIRS(null, null, 26511, "Dark Prismarine Stairs"), DAYLIGHT_DETECTOR(151, 0, 8864, "Daylight Detector"), - DEAD_BRAIN_CORAL(-1, -1, 9116, "Dead Brain Coral"), - DEAD_BRAIN_CORAL_BLOCK(-1, -1, 12979, "Dead Brain Coral Block"), - DEAD_BRAIN_CORAL_FAN(-1, -1, 26150, "Dead Brain Coral Fan"), - DEAD_BRAIN_CORAL_WALL_FAN(-1, -1, 23718, "Dead Brain Coral Wall Fan"), - DEAD_BUBBLE_CORAL(-1, -1, 30583, "Dead Bubble Coral"), - DEAD_BUBBLE_CORAL_BLOCK(-1, -1, 28220, "Dead Bubble Coral Block"), - DEAD_BUBBLE_CORAL_FAN(-1, -1, 17322, "Dead Bubble Coral Fan"), - DEAD_BUBBLE_CORAL_WALL_FAN(-1, -1, 18453, "Dead Bubble Coral Wall Fan"), + DEAD_BRAIN_CORAL(null, null, 9116, "Dead Brain Coral"), + DEAD_BRAIN_CORAL_BLOCK(null, null, 12979, "Dead Brain Coral Block"), + DEAD_BRAIN_CORAL_FAN(null, null, 26150, "Dead Brain Coral Fan"), + DEAD_BRAIN_CORAL_WALL_FAN(null, null, 23718, "Dead Brain Coral Wall Fan"), + DEAD_BUBBLE_CORAL(null, null, 30583, "Dead Bubble Coral"), + DEAD_BUBBLE_CORAL_BLOCK(null, null, 28220, "Dead Bubble Coral Block"), + DEAD_BUBBLE_CORAL_FAN(null, null, 17322, "Dead Bubble Coral Fan"), + DEAD_BUBBLE_CORAL_WALL_FAN(null, null, 18453, "Dead Bubble Coral Wall Fan"), DEAD_BUSH(32, 0, 22888, "Dead Bush"), - DEAD_FIRE_CORAL(-1, -1, 8365, "Dead Fire Coral"), - DEAD_FIRE_CORAL_BLOCK(-1, -1, 5307, "Dead Fire Coral Block"), - DEAD_FIRE_CORAL_FAN(-1, -1, 27073, "Dead Fire Coral Fan"), - DEAD_FIRE_CORAL_WALL_FAN(-1, -1, 23375, "Dead Fire Coral Wall Fan"), - DEAD_HORN_CORAL(-1, -1, 5755, "Dead Horn Coral"), - DEAD_HORN_CORAL_BLOCK(-1, -1, 15103, "Dead Horn Coral Block"), - DEAD_HORN_CORAL_FAN(-1, -1, 11387, "Dead Horn Coral Fan"), - DEAD_HORN_CORAL_WALL_FAN(-1, -1, 27550, "Dead Horn Coral Wall Fan"), - DEAD_TUBE_CORAL(-1, -1, 18028, "Dead Tube Coral"), - DEAD_TUBE_CORAL_BLOCK(-1, -1, 28350, "Dead Tube Coral Block"), - DEAD_TUBE_CORAL_FAN(-1, -1, 17628, "Dead Tube Coral Fan"), - DEAD_TUBE_CORAL_WALL_FAN(-1, -1, 5128, "Dead Tube Coral Wall Fan"), - DEBUG_STICK(-1, -1, 24562, "Debug Stick"), + DEAD_FIRE_CORAL(null, null, 8365, "Dead Fire Coral"), + DEAD_FIRE_CORAL_BLOCK(null, null, 5307, "Dead Fire Coral Block"), + DEAD_FIRE_CORAL_FAN(null, null, 27073, "Dead Fire Coral Fan"), + DEAD_FIRE_CORAL_WALL_FAN(null, null, 23375, "Dead Fire Coral Wall Fan"), + DEAD_HORN_CORAL(null, null, 5755, "Dead Horn Coral"), + DEAD_HORN_CORAL_BLOCK(null, null, 15103, "Dead Horn Coral Block"), + DEAD_HORN_CORAL_FAN(null, null, 11387, "Dead Horn Coral Fan"), + DEAD_HORN_CORAL_WALL_FAN(null, null, 27550, "Dead Horn Coral Wall Fan"), + DEAD_TUBE_CORAL(null, null, 18028, "Dead Tube Coral"), + DEAD_TUBE_CORAL_BLOCK(null, null, 28350, "Dead Tube Coral Block"), + DEAD_TUBE_CORAL_FAN(null, null, 17628, "Dead Tube Coral Fan"), + DEAD_TUBE_CORAL_WALL_FAN(null, null, 5128, "Dead Tube Coral Wall Fan"), + DEBUG_STICK(null, null, 24562, "Debug Stick"), DETECTOR_RAIL(28, 0, 13475, "Detector Rail", "DETECTOR_RAIL"), DIAMOND(264, 0, 20865, "Diamond"), DIAMOND_AXE(279, 0, 27277, "Diamond Axe"), @@ -879,17 +1122,17 @@ public enum CMIMaterial { DIAMOND_SWORD(276, 0, 27707, "Diamond Sword"), DIORITE(1, 3, 24688, "Diorite"), DIRT(3, 0, 10580, "Dirt"), - DISPENSER(23, 0, 20871, "Dispenser", "DISPENSER"), - DOLPHIN_SPAWN_EGG(-1, -1, 20787, "Dolphin Spawn Egg"), + DISPENSER(23, 0, 20871, "Dispenser"), + DOLPHIN_SPAWN_EGG(null, null, 20787, "Dolphin Spawn Egg"), DONKEY_SPAWN_EGG(383, 31, 14513, "Spawn Donkey", "Donkey Spawn Egg"), DRAGON_BREATH(437, 0, 20154, "Dragon's Breath"), - DRAGON_EGG(122, 0, 29946, "Dragon Egg", "DRAGON_EGG"), + DRAGON_EGG(122, 0, 29946, "Dragon Egg"), DRAGON_HEAD(397, 5, 20084, "Dragon Head"), DRAGON_WALL_HEAD(144, 5, 19818, "Dragon Wall Head"), - DRIED_KELP(-1, -1, 21042, "Dried Kelp"), - DRIED_KELP_BLOCK(-1, -1, 12966, "Dried Kelp Block"), - DROPPER(158, 0, 31273, "Dropper", "DROPPER"), - DROWNED_SPAWN_EGG(-1, -1, 19368, "Drowned Spawn Egg"), + DRIED_KELP(null, null, 21042, "Dried Kelp"), + DRIED_KELP_BLOCK(null, null, 12966, "Dried Kelp Block"), + DROPPER(158, 0, 31273, "Dropper"), + DROWNED_SPAWN_EGG(null, null, 19368, "Drowned Spawn Egg"), EGG(344, 0, 21603, "Egg"), ELDER_GUARDIAN_SPAWN_EGG(383, 4, 11418, "Spawn Elder Guardian", "Elder Guardian Spawn Egg"), ELYTRA(443, 0, 23829, "Elytra"), @@ -922,20 +1165,20 @@ public enum CMIMaterial { FIREWORK_ROCKET(401, 0, 23841, "Firework Rocket"), FIREWORK_STAR(402, 0, 12190, "Firework Star", "FIREWORK_CHARGE"), FIRE_CHARGE(385, 0, 4842, "Fire Charge", "Fireball"), - FIRE_CORAL(-1, -1, 29151, "Fire Coral"), - FIRE_CORAL_BLOCK(-1, -1, 12119, "Fire Coral Block"), - FIRE_CORAL_FAN(-1, -1, 11112, "Fire Coral Fan"), - FIRE_CORAL_WALL_FAN(-1, -1, 20100, "Fire Coral Wall Fan"), + FIRE_CORAL(null, null, 29151, "Fire Coral"), + FIRE_CORAL_BLOCK(null, null, 12119, "Fire Coral Block"), + FIRE_CORAL_FAN(null, null, 11112, "Fire Coral Fan"), + FIRE_CORAL_WALL_FAN(null, null, 20100, "Fire Coral Wall Fan"), FISHING_ROD(346, 0, 4167, "Fishing Rod"), FLINT(318, 0, 23596, "Flint"), FLINT_AND_STEEL(259, 0, 28620, "Flint and Steel"), FLOWER_POT(390, 0, 30567, "Flower Pot", "FLOWER_POT_ITEM"), - FROSTED_ICE(212, 0, 21814, "Frosted Ice", "FROSTED_ICE"), + FROSTED_ICE(212, 0, 21814, "Frosted Ice"), FURNACE(61, 0, 8133, "Furnace"), FURNACE_MINECART(343, 0, 14196, "Minecart with Furnace", "POWERED_MINECART"), GHAST_SPAWN_EGG(383, 56, 9970, "Spawn Ghast", "Ghast Spawn Egg"), GHAST_TEAR(370, 0, 18222, "Ghast Tear"), - GLASS(20, 0, 6195, "Glass", "GLASS"), + GLASS(20, 0, 6195, "Glass"), GLASS_BOTTLE(374, 0, 6116, "Glass Bottle"), GLASS_PANE(102, 0, 5709, "Glass Pane", "THIN_GLASS"), GLISTERING_MELON_SLICE(382, 0, 20158, "Glistering Melon", "speckledmelon"), @@ -954,7 +1197,7 @@ public enum CMIMaterial { GOLDEN_SHOVEL(284, 0, 15597, "Golden Shovel", "GOLD_SPADE"), GOLDEN_SWORD(283, 0, 10505, "Golden Sword", "GOLD_SWORD"), GOLD_BLOCK(41, 0, 27392, "Block of Gold", "GOLD_BLOCK"), - GOLD_INGOT(266, 0, 28927, "Gold Ingot", "GOLD_INGOT"), + GOLD_INGOT(266, 0, 28927, "Gold Ingot"), GOLD_NUGGET(371, 0, 28814, "Gold Nugget"), GOLD_ORE(14, 0, 32625, "Gold Ore"), GRANITE(1, 1, 21091, "Granite"), @@ -968,8 +1211,8 @@ public enum CMIMaterial { GRAY_CONCRETE(251, 7, 13959, "Gray Concrete"), GRAY_CONCRETE_POWDER(252, 7, 13031, "Gray Concrete Powder"), GRAY_DYE(351, 8, 9184, "Gray Dye"), - GRAY_GLAZED_TERRACOTTA(242, 0, 6256, "Gray Glazed Terracotta", "GRAY_GLAZED_TERRACOTTA"), - GRAY_SHULKER_BOX(226, 0, 12754, "Gray Shulker Box", "GRAY_SHULKER_BOX"), + GRAY_GLAZED_TERRACOTTA(242, 0, 6256, "Gray Glazed Terracotta"), + GRAY_SHULKER_BOX(226, 0, 12754, "Gray Shulker Box"), GRAY_STAINED_GLASS(95, 7, 29979, "Gray Stained Glass"), GRAY_STAINED_GLASS_PANE(160, 7, 25272, "Gray Stained Glass Pane"), GRAY_TERRACOTTA(159, 7, 18004, "Gray Terracotta"), @@ -980,8 +1223,8 @@ public enum CMIMaterial { GREEN_CARPET(171, 13, 7780, "Green Carpet"), GREEN_CONCRETE(251, 13, 17949, "Green Concrete"), GREEN_CONCRETE_POWDER(252, 13, 6904, "Green Concrete Powder"), - GREEN_GLAZED_TERRACOTTA(248, 0, 6958, "Green Glazed Terracotta", "GREEN_GLAZED_TERRACOTTA"), - GREEN_SHULKER_BOX(232, 0, 9377, "Green Shulker Box", "GREEN_SHULKER_BOX"), + GREEN_GLAZED_TERRACOTTA(248, 0, 6958, "Green Glazed Terracotta"), + GREEN_SHULKER_BOX(232, 0, 9377, "Green Shulker Box"), GREEN_STAINED_GLASS(95, 13, 22503, "Green Stained Glass"), GREEN_STAINED_GLASS_PANE(160, 13, 4767, "Green Stained Glass Pane"), GREEN_TERRACOTTA(159, 13, 4105, "Green Terracotta"), @@ -990,17 +1233,17 @@ public enum CMIMaterial { GUARDIAN_SPAWN_EGG(383, 68, 20113, "Spawn Guardian", "Guardian Spawn Egg"), GUNPOWDER(289, 0, 29974, "Gunpowder", "SULPHUR"), HAY_BLOCK(170, 0, 17461, "Hay Bale", "HAY_BLOCK"), - HEART_OF_THE_SEA(-1, -1, 11807, "Heart of the Sea"), + HEART_OF_THE_SEA(null, null, 11807, "Heart of the Sea"), HEAVY_WEIGHTED_PRESSURE_PLATE(148, 0, 16970, "Heavy Weighted Pressure Plate", "IRON_PLATE"), HOPPER(154, 0, 31974, "Hopper"), HOPPER_MINECART(408, 0, 19024, "Minecart with Hopper"), - HORN_CORAL(-1, -1, 19511, "Horn Coral"), - HORN_CORAL_BLOCK(-1, -1, 19958, "Horn Coral Block"), - HORN_CORAL_FAN(-1, -1, 13610, "Horn Coral Fan"), - HORN_CORAL_WALL_FAN(-1, -1, 28883, "Horn Coral Wall Fan"), + HORN_CORAL(null, null, 19511, "Horn Coral"), + HORN_CORAL_BLOCK(null, null, 19958, "Horn Coral Block"), + HORN_CORAL_FAN(null, null, 13610, "Horn Coral Fan"), + HORN_CORAL_WALL_FAN(null, null, 28883, "Horn Coral Wall Fan"), HORSE_SPAWN_EGG(383, 100, 25981, "Spawn Horse", "Horse Spawn Egg"), HUSK_SPAWN_EGG(383, 23, 20178, "Spawn Husk", "Husk Spawn Egg"), - ICE(79, 0, 30428, "Ice", "ICE"), + ICE(79, 0, 30428, "Ice"), INFESTED_CHISELED_STONE_BRICKS(97, 5, 4728, "Infested Chiseled Stone Bricks", "MONSTER_EGGS"), INFESTED_COBBLESTONE(97, 1, 28798, "Infested Cobblestone"), INFESTED_CRACKED_STONE_BRICKS(97, 4, 7476, "Infested Cracked Stone Bricks"), @@ -1020,32 +1263,32 @@ public enum CMIMaterial { IRON_INGOT(265, 0, 24895, "Iron Ingot"), IRON_LEGGINGS(308, 0, 18951, "Iron Leggings"), IRON_NUGGET(452, 0, 13715, "Iron Nugget"), - IRON_ORE(15, 0, 19834, "Iron Ore", "IRON_ORE"), + IRON_ORE(15, 0, 19834, "Iron Ore"), IRON_PICKAXE(257, 0, 8842, "Iron Pickaxe"), IRON_SHOVEL(256, 0, 30045, "Iron Shovel", "IRON_SPADE"), IRON_SWORD(267, 0, 10904, "Iron Sword"), - IRON_TRAPDOOR(167, 0, 17095, "Iron Trapdoor", "IRON_TRAPDOOR"), + IRON_TRAPDOOR(167, 0, 17095, "Iron Trapdoor"), ITEM_FRAME(389, 0, 27318, "Item Frame"), JACK_O_LANTERN(91, 0, 31612, "Jack o'Lantern", "JACK_O_LANTERN"), - JUKEBOX(84, 0, 19264, "Jukebox", "JUKEBOX"), + JUKEBOX(84, 0, 19264, "Jukebox"), JUNGLE_BOAT(446, 0, 4495, "Jungle Boat", "BOAT_JUNGLE"), - JUNGLE_BUTTON(-1, -1, 25317, "Jungle Button"), + JUNGLE_BUTTON(null, null, 25317, "Jungle Button"), JUNGLE_DOOR(429, 0, 28163, "Jungle Door", "JUNGLE_DOOR_ITEM"), - JUNGLE_FENCE(190, 0, 14358, "Jungle Fence", "JUNGLE_FENCE"), + JUNGLE_FENCE(190, 0, 14358, "Jungle Fence"), JUNGLE_FENCE_GATE(185, 0, 21360, "Jungle Fence Gate", "JUNGLE_FENCE_GATE"), JUNGLE_LEAVES(18, 3, 5133, "Jungle Leaves"), JUNGLE_LOG(17, 3, 20721, "Jungle Log"), JUNGLE_PLANKS(5, 3, 26445, "Jungle Wood Plank", "Jungle Planks"), - JUNGLE_PRESSURE_PLATE(-1, -1, 11376, "Jungle Pressure Plate"), + JUNGLE_PRESSURE_PLATE(null, null, 11376, "Jungle Pressure Plate"), JUNGLE_SAPLING(6, 3, 17951, "Jungle Sapling"), JUNGLE_SLAB(43, 0, 19117, "Double Stone Slab"), JUNGLE_STAIRS(136, 0, 20636, "Jungle Wood Stairs", "Jungle Stairs"), - JUNGLE_TRAPDOOR(-1, -1, 8626, "Jungle Trapdoor"), - JUNGLE_WOOD(-1, -1, 10341, "Jungle Wood"), - KELP(-1, -1, 21916, "Kelp"), - KELP_PLANT(-1, -1, 29697, "Kelp Plant"), + JUNGLE_TRAPDOOR(null, null, 8626, "Jungle Trapdoor"), + JUNGLE_WOOD(null, null, 10341, "Jungle Wood"), + KELP(null, null, 21916, "Kelp"), + KELP_PLANT(null, null, 29697, "Kelp Plant"), KNOWLEDGE_BOOK(453, 0, 12646, "Knowledge Book"), - LADDER(65, 0, 23599, "Ladder", "LADDER"), + LADDER(65, 0, 23599, "Ladder"), LAPIS_BLOCK(22, 0, 14485, "Lapis Lazuli Block", "LAPIS_BLOCK"), LAPIS_LAZULI(351, 4, 11075, "Lapis Lazuli"), LAPIS_ORE(21, 0, 22934, "Lapis Lazuli Ore", "LAPIS_ORE"), @@ -1054,26 +1297,26 @@ public enum CMIMaterial { LAVA_BUCKET(327, 0, 9228, "Lava Bucket"), LEAD(420, 0, 29539, "Lead", "Leash"), LEATHER(334, 0, 16414, "Leather"), - LEATHER_BOOTS(301, 0, 15282, "Leather Boots", "LEATHER_BOOTS"), + LEATHER_BOOTS(301, 0, 15282, "Leather Boots"), LEATHER_CHESTPLATE(299, 0, 29275, "Leather Tunic", "LEATHER_CHESTPLATE"), LEATHER_HELMET(298, 0, 11624, "Leather Cap", "LEATHER_HELMET"), LEATHER_LEGGINGS(300, 0, 28210, "Leather Pants", "LEATHER_LEGGINGS"), - LEVER(69, 0, 15319, "Lever", "LEVER"), + LEVER(69, 0, 15319, "Lever"), LIGHT_BLUE_BANNER(425, 12, 18060, "Light Blue Banner"), - LIGHT_BLUE_BED(355, 3, 20957, "Light Blue Bed", "Light Blue Bed"), + LIGHT_BLUE_BED(355, 3, 20957, "Light Blue Bed"), LIGHT_BLUE_CARPET(171, 3, 21194, "Light Blue Carpet"), LIGHT_BLUE_CONCRETE(251, 3, 29481, "Light Blue Concrete"), LIGHT_BLUE_CONCRETE_POWDER(252, 3, 31206, "Light Blue Concrete Powder"), LIGHT_BLUE_DYE(351, 12, 28738, "Light Blue Dye"), - LIGHT_BLUE_GLAZED_TERRACOTTA(238, 0, 4336, "Light Blue Glazed Terracotta", "LIGHT_BLUE_GLAZED_TERRACOTTA"), - LIGHT_BLUE_SHULKER_BOX(222, 0, 18226, "Light Blue Shulker Box", "LIGHT_BLUE_SHULKER_BOX"), + LIGHT_BLUE_GLAZED_TERRACOTTA(238, 0, 4336, "Light Blue Glazed Terracotta"), + LIGHT_BLUE_SHULKER_BOX(222, 0, 18226, "Light Blue Shulker Box"), LIGHT_BLUE_STAINED_GLASS(95, 3, 17162, "Light Blue Stained Glass"), LIGHT_BLUE_STAINED_GLASS_PANE(160, 3, 18721, "Light Blue Stained Glass Pane"), LIGHT_BLUE_TERRACOTTA(159, 3, 31779, "Light Blue Terracotta"), LIGHT_BLUE_WALL_BANNER(117, 12, 12011, "Light Blue Banner"), LIGHT_BLUE_WOOL(35, 3, 21073, "Light Blue Wool"), LIGHT_GRAY_BANNER(425, 7, 11417, "Light Gray Banner"), - LIGHT_GRAY_BED(355, 8, 5090, "Light Gray Bed", "Light Gray Bed"), + LIGHT_GRAY_BED(355, 8, 5090, "Light Gray Bed"), LIGHT_GRAY_CARPET(171, 8, 11317, "Light Gray Carpet"), LIGHT_GRAY_CONCRETE(251, 8, 14453, "Light Gray Concrete"), LIGHT_GRAY_CONCRETE_POWDER(252, 8, 21589, "Light Gray Concrete Powder"), @@ -1094,8 +1337,8 @@ public enum CMIMaterial { LIME_CONCRETE(251, 5, 5863, "Lime Concrete"), LIME_CONCRETE_POWDER(252, 5, 28859, "Lime Concrete Powder"), LIME_DYE(351, 10, 6147, "Lime Dye"), - LIME_GLAZED_TERRACOTTA(240, 0, 13861, "Lime Glazed Terracotta", "LIME_GLAZED_TERRACOTTA"), - LIME_SHULKER_BOX(224, 0, 28360, "Lime Shulker Box", "LIME_SHULKER_BOX"), + LIME_GLAZED_TERRACOTTA(240, 0, 13861, "Lime Glazed Terracotta"), + LIME_SHULKER_BOX(224, 0, 28360, "Lime Shulker Box"), LIME_STAINED_GLASS(95, 5, 24266, "Lime Stained Glass"), LIME_STAINED_GLASS_PANE(160, 5, 10610, "Lime Stained Glass Pane"), LIME_TERRACOTTA(159, 5, 24013, "Lime Terracotta"), @@ -1109,8 +1352,8 @@ public enum CMIMaterial { MAGENTA_CONCRETE(251, 2, 20591, "Magenta Concrete"), MAGENTA_CONCRETE_POWDER(252, 2, 8272, "Magenta Concrete Powder"), MAGENTA_DYE(351, 13, 11788, "Magenta Dye"), - MAGENTA_GLAZED_TERRACOTTA(237, 0, 8067, "Magenta Glazed Terracotta", "MAGENTA_GLAZED_TERRACOTTA"), - MAGENTA_SHULKER_BOX(221, 0, 21566, "Magenta Shulker Box", "MAGENTA_SHULKER_BOX"), + MAGENTA_GLAZED_TERRACOTTA(237, 0, 8067, "Magenta Glazed Terracotta"), + MAGENTA_SHULKER_BOX(221, 0, 21566, "Magenta Shulker Box"), MAGENTA_STAINED_GLASS(95, 2, 26814, "Magenta Stained Glass"), MAGENTA_STAINED_GLASS_PANE(160, 2, 14082, "Magenta Stained Glass Pane"), MAGENTA_TERRACOTTA(159, 2, 25900, "Magenta Terracotta"), @@ -1119,11 +1362,11 @@ public enum CMIMaterial { MAGMA_BLOCK(213, 0, 25927, "Magma Block", "MAGMA"), MAGMA_CREAM(378, 0, 25097, "Magma Cream"), MAGMA_CUBE_SPAWN_EGG(383, 62, 26638, "Spawn Magma Cube", "Magma Cube Spawn Egg"), - MAP(395, 0, 21655, "Empty Map", "EMPTY_MAP"), + MAP(395, 0, 21655, "Empty Map"), MELON(103, 0, 25172, "Melon", "Melon_Block"), MELON_SEEDS(362, 0, 18340, "Melon Seeds"), MELON_SLICE(360, 0, 5347, "Melon Slice"), - MELON_STEM(105, 0, 8247, "Melon Stem", "MELON_STEM"), + MELON_STEM(105, 0, 8247, "Melon Stem"), MILK_BUCKET(335, 0, 9680, "Milk Bucket"), MINECART(328, 0, 14352, "Minecart"), MOOSHROOM_SPAWN_EGG(383, 96, 22125, "Spawn Mushroom Cow", "Mooshroom Spawn Egg"), @@ -1132,7 +1375,7 @@ public enum CMIMaterial { MOSSY_STONE_BRICKS(98, 1, 16415, "Mossy Stone Bricks"), MOVING_PISTON(36, 0, 13831, "Piston Moving Piece"), MULE_SPAWN_EGG(383, 32, 11229, "Spawn Mule", "Mule Spawn Egg"), - MUSHROOM_STEM(-1, -1, 16543, "Mushroom Stem"), + MUSHROOM_STEM(null, null, 16543, "Mushroom Stem"), MUSHROOM_STEW(282, 0, 16336, "Mushroom Stew", "MUSHROOM_SOUP"), MUSIC_DISC_11(2266, 0, 27426, "11 Disc", "RECORD_11"), MUSIC_DISC_13(2256, 0, 16359, "13 Disc", "GOLD_RECORD"), @@ -1149,8 +1392,8 @@ public enum CMIMaterial { MUTTON(423, 0, 4792, "Raw Mutton"), MYCELIUM(110, 0, 9913, "Mycelium", "MYCEL"), NAME_TAG(421, 0, 30731, "Name Tag"), - NAUTILUS_SHELL(-1, -1, 19989, "Nautilus Shell"), - NETHERRACK(87, 0, 23425, "Netherrack", "NETHERRACK"), + NAUTILUS_SHELL(null, null, 19989, "Nautilus Shell"), + NETHERRACK(87, 0, 23425, "Netherrack"), NETHER_BRICK(405, 0, 19996, "Nether Brick"), NETHER_BRICKS(112, 0, 27802, "Nether Bricks"), NETHER_BRICK_FENCE(113, 0, 5286, "Nether Brick Fence", "NETHER_FENCE"), @@ -1175,18 +1418,18 @@ public enum CMIMaterial { OAK_SLAB(126, 0, 12002, "Oak Slab", "Wood step"), OAK_STAIRS(53, 0, 5449, "Oak Stairs", "WOOD_STAIRS"), OAK_TRAPDOOR(96, 0, 16927, "Oak Trapdoor", "Trapdoor"), - OAK_WOOD(-1, -1, 7378, "Oak Wood"), - OBSERVER(218, 0, 10726, "Observer", "OBSERVER"), - OBSIDIAN(49, 0, 32723, "Obsidian", "OBSIDIAN"), + OAK_WOOD(null, null, 7378, "Oak Wood"), + OBSERVER(218, 0, 10726, "Observer"), + OBSIDIAN(49, 0, 32723, "Obsidian"), OCELOT_SPAWN_EGG(383, 98, 30080, "Spawn Ocelot", "Ocelot Spawn Egg"), ORANGE_BANNER(425, 14, 4839, "Orange Banner"), - ORANGE_BED(355, 1, 11194, "Orange Bed", "Orange Bed"), + ORANGE_BED(355, 1, 11194, "Orange Bed"), ORANGE_CARPET(171, 1, 24752, "Orange Carpet"), ORANGE_CONCRETE(251, 1, 19914, "Orange Concrete"), ORANGE_CONCRETE_POWDER(252, 1, 30159, "Orange Concrete Powder"), ORANGE_DYE(351, 14, 13866, "Orange Dye"), - ORANGE_GLAZED_TERRACOTTA(236, 0, 27451, "Orange Glazed Terracotta", "ORANGE_GLAZED_TERRACOTTA"), - ORANGE_SHULKER_BOX(220, 0, 21673, "Orange Shulker Box", "ORANGE_SHULKER_BOX"), + ORANGE_GLAZED_TERRACOTTA(236, 0, 27451, "Orange Glazed Terracotta"), + ORANGE_SHULKER_BOX(220, 0, 21673, "Orange Shulker Box"), ORANGE_STAINED_GLASS(95, 1, 25142, "Orange Stained Glass"), ORANGE_STAINED_GLASS_PANE(160, 1, 21089, "Orange Stained Glass Pane"), ORANGE_TERRACOTTA(159, 1, 18684, "Orange Terracotta"), @@ -1194,23 +1437,23 @@ public enum CMIMaterial { ORANGE_WALL_BANNER(117, 114, 9936, "Orange Banner"), ORANGE_WOOL(35, 1, 23957, "Orange Wool"), OXEYE_DAISY(38, 8, 11709, "Oxeye Daisy"), - PACKED_ICE(174, 0, 28993, "Packed Ice", "PACKED_ICE"), + PACKED_ICE(174, 0, 28993, "Packed Ice"), PAINTING(321, 0, 23945, "Painting"), PAPER(339, 0, 9923, "Paper"), PARROT_SPAWN_EGG(383, 105, 23614, "Spawn Parrot", "Parrot Spawn Egg"), PEONY(175, 5, 21155, "Peony"), - PETRIFIED_OAK_SLAB(-1, -1, 18658, "Petrified Oak Slab"), - PHANTOM_MEMBRANE(-1, -1, 18398, "Phantom Membrane"), - PHANTOM_SPAWN_EGG(-1, -1, 24648, "Phantom Spawn Egg"), + PETRIFIED_OAK_SLAB(null, null, 18658, "Petrified Oak Slab"), + PHANTOM_MEMBRANE(null, null, 18398, "Phantom Membrane"), + PHANTOM_SPAWN_EGG(null, null, 24648, "Phantom Spawn Egg"), PIG_SPAWN_EGG(383, 90, 22584, "Spawn Pig", "Pig Spawn Egg"), PINK_BANNER(425, 9, 19439, "Pink Banner"), - PINK_BED(355, 6, 13795, "Pink Bed", "Pink Bed"), + PINK_BED(355, 6, 13795, "Pink Bed"), PINK_CARPET(171, 6, 30186, "Pink Carpet"), PINK_CONCRETE(251, 6, 5227, "Pink Concrete"), PINK_CONCRETE_POWDER(252, 6, 6421, "Pink Concrete Powder"), PINK_DYE(351, 9, 31151, "Pink Dye"), - PINK_GLAZED_TERRACOTTA(241, 0, 10260, "Pink Glazed Terracotta", "PINK_GLAZED_TERRACOTTA"), - PINK_SHULKER_BOX(225, 0, 24968, "Pink Shulker Box", "PINK_SHULKER_BOX"), + PINK_GLAZED_TERRACOTTA(241, 0, 10260, "Pink Glazed Terracotta"), + PINK_SHULKER_BOX(225, 0, 24968, "Pink Shulker Box"), PINK_STAINED_GLASS(95, 6, 16164, "Pink Stained Glass"), PINK_STAINED_GLASS_PANE(160, 6, 24637, "Pink Stained Glass Pane"), PINK_TERRACOTTA(159, 6, 23727, "Pink Terracotta"), @@ -1273,43 +1516,43 @@ public enum CMIMaterial { POISON_POTION4(373, 8292, 24020, "Poison Potion4"), STRENGTH_POTION4(373, 8297, 24020, "Strength Potion4"), - POTTED_ACACIA_SAPLING(-1, -1, 14096, "Potted Acacia Sapling"), - POTTED_ALLIUM(-1, -1, 13184, "Potted Allium"), - POTTED_AZURE_BLUET(-1, -1, 8754, "Potted Azure Bluet"), - POTTED_BIRCH_SAPLING(-1, -1, 32484, "Potted Birch Sapling"), - POTTED_BLUE_ORCHID(-1, -1, 6599, "Potted Blue Orchid"), - POTTED_BROWN_MUSHROOM(-1, -1, 14481, "Potted Brown Mushroom"), - POTTED_CACTUS(-1, -1, 8777, "Potted Cactus"), - POTTED_DANDELION(-1, -1, 9727, "Potted Dandelion"), - POTTED_DARK_OAK_SAPLING(-1, -1, 6486, "Potted Dark Oak Sapling"), - POTTED_DEAD_BUSH(-1, -1, 13020, "Potted Dead Bush"), - POTTED_FERN(-1, -1, 23315, "Potted Fern"), - POTTED_JUNGLE_SAPLING(-1, -1, 7525, "Potted Jungle Sapling"), - POTTED_OAK_SAPLING(-1, -1, 11905, "Potted Oak Sapling"), - POTTED_ORANGE_TULIP(-1, -1, 28807, "Potted Orange Tulip"), - POTTED_OXEYE_DAISY(-1, -1, 19707, "Potted Oxeye Daisy"), - POTTED_PINK_TULIP(-1, -1, 10089, "Potted Pink Tulip"), - POTTED_POPPY(-1, -1, 7457, "Potted Poppy"), - POTTED_RED_MUSHROOM(-1, -1, 22881, "Potted Red Mushroom"), - POTTED_RED_TULIP(-1, -1, 28594, "Potted Red Tulip"), - POTTED_SPRUCE_SAPLING(-1, -1, 29498, "Potted Spruce Sapling"), - POTTED_WHITE_TULIP(-1, -1, 24330, "Potted White Tulip"), - POWERED_RAIL(27, 0, 11064, "Powered Rail", "POWERED_RAIL"), + POTTED_ACACIA_SAPLING(null, null, 14096, "Potted Acacia Sapling"), + POTTED_ALLIUM(null, null, 13184, "Potted Allium"), + POTTED_AZURE_BLUET(null, null, 8754, "Potted Azure Bluet"), + POTTED_BIRCH_SAPLING(null, null, 32484, "Potted Birch Sapling"), + POTTED_BLUE_ORCHID(null, null, 6599, "Potted Blue Orchid"), + POTTED_BROWN_MUSHROOM(null, null, 14481, "Potted Brown Mushroom"), + POTTED_CACTUS(null, null, 8777, "Potted Cactus"), + POTTED_DANDELION(null, null, 9727, "Potted Dandelion"), + POTTED_DARK_OAK_SAPLING(null, null, 6486, "Potted Dark Oak Sapling"), + POTTED_DEAD_BUSH(null, null, 13020, "Potted Dead Bush"), + POTTED_FERN(null, null, 23315, "Potted Fern"), + POTTED_JUNGLE_SAPLING(null, null, 7525, "Potted Jungle Sapling"), + POTTED_OAK_SAPLING(null, null, 11905, "Potted Oak Sapling"), + POTTED_ORANGE_TULIP(null, null, 28807, "Potted Orange Tulip"), + POTTED_OXEYE_DAISY(null, null, 19707, "Potted Oxeye Daisy"), + POTTED_PINK_TULIP(null, null, 10089, "Potted Pink Tulip"), + POTTED_POPPY(null, null, 7457, "Potted Poppy"), + POTTED_RED_MUSHROOM(null, null, 22881, "Potted Red Mushroom"), + POTTED_RED_TULIP(null, null, 28594, "Potted Red Tulip"), + POTTED_SPRUCE_SAPLING(null, null, 29498, "Potted Spruce Sapling"), + POTTED_WHITE_TULIP(null, null, 24330, "Potted White Tulip"), + POWERED_RAIL(27, 0, 11064, "Powered Rail"), PRISMARINE(168, 0, 7539, "Prismarine"), PRISMARINE_BRICKS(168, 1, 29118, "Prismarine Bricks"), - PRISMARINE_BRICK_SLAB(-1, -1, 26672, "Prismarine Brick Slab"), - PRISMARINE_BRICK_STAIRS(-1, -1, 15445, "Prismarine Brick Stairs"), + PRISMARINE_BRICK_SLAB(null, null, 26672, "Prismarine Brick Slab"), + PRISMARINE_BRICK_STAIRS(null, null, 15445, "Prismarine Brick Stairs"), PRISMARINE_CRYSTALS(410, 0, 31546, "Prismarine Crystals"), PRISMARINE_SHARD(409, 0, 10993, "Prismarine Shard"), - PRISMARINE_SLAB(-1, -1, 31323, "Prismarine Slab"), - PRISMARINE_STAIRS(-1, -1, 19217, "Prismarine Stairs"), + PRISMARINE_SLAB(null, null, 31323, "Prismarine Slab"), + PRISMARINE_STAIRS(null, null, 19217, "Prismarine Stairs"), PUFFERFISH(349, 3, 8115, "Pufferfish"), - PUFFERFISH_BUCKET(-1, -1, 8861, "Bucket of Pufferfish"), - PUFFERFISH_SPAWN_EGG(-1, -1, 24573, "Pufferfish Spawn Egg"), - PUMPKIN(86, 0, 19170, "Pumpkin", "PUMPKIN"), + PUFFERFISH_BUCKET(null, null, 8861, "Bucket of Pufferfish"), + PUFFERFISH_SPAWN_EGG(null, null, 24573, "Pufferfish Spawn Egg"), + PUMPKIN(86, 0, 19170, "Pumpkin"), PUMPKIN_PIE(400, 0, 28725, "Pumpkin Pie"), PUMPKIN_SEEDS(361, 0, 28985, "Pumpkin Seeds"), - PUMPKIN_STEM(104, 0, 19021, "Pumpkin Stem", "PUMPKIN_STEM"), + PUMPKIN_STEM(104, 0, 19021, "Pumpkin Stem"), PURPLE_BANNER(425, 5, 29027, "Purple Banner"), PURPLE_BED(355, 10, 29755, "Purple Bed", "Purple Bed"), PURPLE_CARPET(171, 10, 5574, "Purple Carpet"), @@ -1317,21 +1560,21 @@ public enum CMIMaterial { PURPLE_CONCRETE_POWDER(252, 10, 26808, "Purple Concrete Powder"), PURPLE_DYE(351, 5, 6347, "Purple Dye"), PURPLE_GLAZED_TERRACOTTA(245, 0, 4818, "Purple Glazed Terracotta"), - PURPLE_SHULKER_BOX(229, 0, 10373, "Purple Shulker Box", "PURPLE_SHULKER_BOX"), + PURPLE_SHULKER_BOX(229, 0, 10373, "Purple Shulker Box"), PURPLE_STAINED_GLASS(95, 10, 21845, "Purple Stained Glass"), PURPLE_STAINED_GLASS_PANE(160, 10, 10948, "Purple Stained Glass Pane"), PURPLE_TERRACOTTA(159, 10, 10387, "Purple Terracotta"), PURPLE_WALL_BANNER(117, 5, 14298, "Purple Banner"), PURPLE_WOOL(35, 10, 11922, "Purple Wool"), - PURPUR_BLOCK(201, 0, 7538, "Purpur Block", "PURPUR_BLOCK"), - PURPUR_PILLAR(202, 0, 26718, "Purpur Pillar", "PURPUR_PILLAR"), - PURPUR_SLAB(205, 0, 11487, "Purpur Slab", "PURPUR_SLAB"), - PURPUR_STAIRS(203, 0, 8921, "Purpur Stairs", "PURPUR_STAIRS"), + PURPUR_BLOCK(201, 0, 7538, "Purpur Block"), + PURPUR_PILLAR(202, 0, 26718, "Purpur Pillar"), + PURPUR_SLAB(205, 0, 11487, "Purpur Slab"), + PURPUR_STAIRS(203, 0, 8921, "Purpur Stairs"), QUARTZ(406, 0, 23608, "Nether Quartz"), QUARTZ_BLOCK(155, 0, 11987, "Block of Quartz"), QUARTZ_PILLAR(155, 2, 16452, "Quartz Pillar"), QUARTZ_SLAB(44, 7, 4423, "Quartz Slab"), - QUARTZ_STAIRS(156, 0, 24079, "Quartz Stairs", "QUARTZ_STAIRS"), + QUARTZ_STAIRS(156, 0, 24079, "Quartz Stairs"), RABBIT(411, 0, 23068, "Raw Rabbit"), RABBIT_FOOT(414, 0, 13864, "Rabbit's Foot"), RABBIT_HIDE(415, 0, 12467, "Rabbit Hide"), @@ -1350,15 +1593,15 @@ public enum CMIMaterial { RED_CARPET(171, 14, 5424, "Red Carpet"), RED_CONCRETE(251, 14, 8032, "Red Concrete"), RED_CONCRETE_POWDER(252, 14, 13286, "Red Concrete Powder"), - RED_GLAZED_TERRACOTTA(249, 0, 24989, "Red Glazed Terracotta", "RED_GLAZED_TERRACOTTA"), + RED_GLAZED_TERRACOTTA(249, 0, 24989, "Red Glazed Terracotta"), RED_MUSHROOM(40, 0, 19728, "Red Mushroom", "RED_MUSHROOM"), RED_MUSHROOM_BLOCK(100, 0, 20766, "Red Mushroom Block", "HUGE_MUSHROOM_2"), RED_NETHER_BRICKS(215, 0, 18056, "Red Nether Bricks", "RED_NETHER_BRICK"), - RED_SAND(12, 1, 16279, "Red Sand", "SAND"), + RED_SAND(12, 1, 16279, "Red Sand"), RED_SANDSTONE(179, 0, 9092, "Red Sandstone"), RED_SANDSTONE_SLAB(182, 0, 17550, "Red Sandstone Slab", "STONE_SLAB2"), - RED_SANDSTONE_STAIRS(180, 0, 25466, "Red Sandstone Stairs", "RED_SANDSTONE_STAIRS"), - RED_SHULKER_BOX(233, 0, 32448, "Red Shulker Box", "RED_SHULKER_BOX"), + RED_SANDSTONE_STAIRS(180, 0, 25466, "Red Sandstone Stairs"), + RED_SHULKER_BOX(233, 0, 32448, "Red Shulker Box"), RED_STAINED_GLASS(95, 14, 9717, "Red Stained Glass"), RED_STAINED_GLASS_PANE(160, 14, 8630, "Red Stained Glass Pane"), RED_TERRACOTTA(159, 14, 5086, "Red Terracotta"), @@ -1366,27 +1609,27 @@ public enum CMIMaterial { RED_WALL_BANNER(117, 1, 4378, "Red Banner"), RED_WOOL(35, 14, 11621, "Red Wool"), REPEATER(356, 0, 28823, "Redstone Repeater", "Diode"), - REPEATING_COMMAND_BLOCK(-1, -1, 12405, "Repeating Command Block"), + REPEATING_COMMAND_BLOCK(null, null, 12405, "Repeating Command Block"), ROSE_BUSH(175, 4, 6080, "Rose Bush"), ROSE_RED(351, 1, 15694, "Rose Red"), ROTTEN_FLESH(367, 0, 21591, "Rotten Flesh"), SADDLE(329, 0, 30206, "Saddle"), SALMON(349, 1, 18516, "Raw Salmon"), - SALMON_BUCKET(-1, -1, 31427, "Bucket of Salmon"), - SALMON_SPAWN_EGG(-1, -1, 18739, "Salmon Spawn Egg"), + SALMON_BUCKET(null, null, 31427, "Bucket of Salmon"), + SALMON_SPAWN_EGG(null, null, 18739, "Salmon Spawn Egg"), SAND(12, 0, 11542, "Sand"), SANDSTONE(24, 0, 13141, "Sandstone"), SANDSTONE_SLAB(44, 1, 29830, "Sandstone Slab"), SANDSTONE_STAIRS(128, 0, 18474, "Sandstone Stairs"), - SCUTE(-1, -1, 11914, "Scute"), - SEAGRASS(-1, -1, 23942, "Seagrass"), - SEA_LANTERN(169, 0, 16984, "Sea Lantern", "SEA_LANTERN"), - SEA_PICKLE(-1, -1, 19562, "Sea Pickle"), + SCUTE(null, null, 11914, "Scute"), + SEAGRASS(null, null, 23942, "Seagrass"), + SEA_LANTERN(169, 0, 16984, "Sea Lantern"), + SEA_PICKLE(null, null, 19562, "Sea Pickle"), SHEARS(359, 0, 27971, "Shears"), SHEEP_SPAWN_EGG(383, 91, 24488, "Spawn Sheep", "Sheep Spawn Egg"), SHIELD(442, 0, 29943, "Shield"), SHULKER_BOX(229, 0, 7776, "Shulker Box"), - SHULKER_SHELL(450, 0, 27848, "Shulker Shell", "SHULKER_SHELL"), + SHULKER_SHELL(450, 0, 27848, "Shulker Shell"), SHULKER_SPAWN_EGG(383, 69, 31848, "Spawn Shulker", "Shulker Spawn Egg"), SIGN(323, 0, 16918, "Sign"), SILVERFISH_SPAWN_EGG(383, 60, 14537, "Spawn Silverfish", "Silverfish Spawn Egg"), @@ -1395,16 +1638,16 @@ public enum CMIMaterial { SKELETON_SPAWN_EGG(383, 51, 15261, "Spawn Skeleton", "Skeleton Spawn Egg"), SKELETON_WALL_SKULL(144, 0, 31650, "Skeleton Wall Skull"), SLIME_BALL(341, 0, 5242, "Slimeball"), - SLIME_BLOCK(165, 0, 31892, "Slime Block", "SLIME_BLOCK"), + SLIME_BLOCK(165, 0, 31892, "Slime Block"), SLIME_SPAWN_EGG(383, 55, 6550, "Spawn Slime", "Slime Spawn Egg"), - SMOOTH_QUARTZ(-1, -1, 14415, "Smooth Quartz"), + SMOOTH_QUARTZ(null, null, 14415, "Smooth Quartz"), SMOOTH_RED_SANDSTONE(179, 2, 25180, "Smooth Red Sandstone"), SMOOTH_SANDSTONE(24, 2, 30039, "Smooth Sandstone"), - SMOOTH_STONE(-1, -1, 21910, "Smooth Stone"), + SMOOTH_STONE(null, null, 21910, "Smooth Stone"), SNOW(78, 0, 14146, "Snow"), SNOWBALL(332, 0, 19487, "Snowball"), - SNOW_BLOCK(80, 0, 19913, "Snow Block", "SNOW_BLOCK"), - SOUL_SAND(88, 0, 16841, "Soul Sand", "SOUL_SAND"), + SNOW_BLOCK(80, 0, 19913, "Snow Block"), + SOUL_SAND(88, 0, 16841, "Soul Sand"), SPAWNER(52, 90, 7018, "Spawner", "MOB_SPAWNER"), SPECTRAL_ARROW(439, 0, 4568, "Spectral Arrow"), SPIDER_EYE(375, 0, 9318, "Spider Eye"), @@ -1412,83 +1655,83 @@ public enum CMIMaterial { SPLASH_POTION(438, 0, 30248, "Splash Potion", "SPLASH_POTION"), SPONGE(19, 0, 15860, "Sponge", "SPONGE"), SPRUCE_BOAT(444, 0, 9606, "Spruce Boat", "BOAT_SPRUCE"), - SPRUCE_BUTTON(-1, -1, 23281, "Spruce Button"), + SPRUCE_BUTTON(null, null, 23281, "Spruce Button"), SPRUCE_DOOR(427, 0, 10642, "Spruce Door", "SPRUCE_DOOR_ITEM"), - SPRUCE_FENCE(188, 0, 25416, "Spruce Fence", "SPRUCE_FENCE"), - SPRUCE_FENCE_GATE(183, 0, 26423, "Spruce Fence Gate", "SPRUCE_FENCE_GATE"), + SPRUCE_FENCE(188, 0, 25416, "Spruce Fence"), + SPRUCE_FENCE_GATE(183, 0, 26423, "Spruce Fence Gate"), SPRUCE_LEAVES(18, 1, 20039, "Spruce Leaves"), SPRUCE_LOG(17, 1, 9726, "Spruce Log"), SPRUCE_PLANKS(5, 1, 14593, "Spruce Wood Plank", "Spruce Planks"), - SPRUCE_PRESSURE_PLATE(-1, -1, 15932, "Spruce Pressure Plate"), + SPRUCE_PRESSURE_PLATE(null, null, 15932, "Spruce Pressure Plate"), SPRUCE_SAPLING(6, 1, 19874, "Spruce Sapling"), SPRUCE_SLAB(126, 1, 4348, "Spruce Slab"), SPRUCE_STAIRS(134, 0, 11192, "Spruce Wood Stairs", "Spruce Stairs"), - SPRUCE_TRAPDOOR(-1, -1, 10289, "Spruce Trapdoor"), - SPRUCE_WOOD(-1, -1, 32328, "Spruce Wood"), + SPRUCE_TRAPDOOR(null, null, 10289, "Spruce Trapdoor"), + SPRUCE_WOOD(null, null, 32328, "Spruce Wood"), SQUID_SPAWN_EGG(383, 94, 10682, "Spawn Squid", "Squid Spawn Egg"), STICK(280, 0, 9773, "Stick"), STICKY_PISTON(29, 0, 18127, "Sticky Piston", "PISTON_STICKY_BASE"), STONE(1, 0, 22948, "Stone"), - STONE_AXE(275, 0, 6338, "Stone Axe", "STONE_AXE"), + STONE_AXE(275, 0, 6338, "Stone Axe"), STONE_BRICKS(98, 0, 6962, "Stone Bricks"), STONE_BRICK_SLAB(44, 5, 19676, "Stone Brick Slab"), STONE_BRICK_STAIRS(109, 0, 27032, "Stone Brick Stairs", "SMOOTH_STAIRS"), - STONE_BUTTON(77, 0, 12279, "Stone Button", "STONE_BUTTON"), - STONE_HOE(291, 0, 22855, "Stone Hoe", "STONE_HOE"), - STONE_PICKAXE(274, 0, 14611, "Stone Pickaxe", "STONE_PICKAXE"), + STONE_BUTTON(77, 0, 12279, "Stone Button"), + STONE_HOE(291, 0, 22855, "Stone Hoe"), + STONE_PICKAXE(274, 0, 14611, "Stone Pickaxe"), STONE_PRESSURE_PLATE(70, 0, 22591, "Stone Pressure Plate", "STONE_PLATE"), STONE_SHOVEL(273, 0, 9520, "Stone Shovel", "STONE_SPADE"), STONE_SLAB(44, 0, 19838, "Stone Slab"), - STONE_SWORD(272, 0, 25084, "Stone Sword", "STONE_SWORD"), + STONE_SWORD(272, 0, 25084, "Stone Sword"), STRAY_SPAWN_EGG(383, 6, 30153, "Spawn Stray", "Stray Spawn Egg"), - STRING(287, 0, 12806, "String", "STRING"), - STRIPPED_ACACIA_LOG(-1, -1, 18167, "Stripped Acacia Log"), - STRIPPED_ACACIA_WOOD(-1, -1, 27193, "Stripped Acacia Wood"), - STRIPPED_BIRCH_LOG(-1, -1, 8838, "Stripped Birch Log"), - STRIPPED_BIRCH_WOOD(-1, -1, 22350, "Stripped Birch Wood"), - STRIPPED_DARK_OAK_LOG(-1, -1, 6492, "Stripped Dark Oak Log"), - STRIPPED_DARK_OAK_WOOD(-1, -1, 16000, "Stripped Dark Oak Wood"), - STRIPPED_JUNGLE_LOG(-1, -1, 15476, "Stripped Jungle Log"), - STRIPPED_JUNGLE_WOOD(-1, -1, 30315, "Stripped Jungle Wood"), - STRIPPED_OAK_LOG(-1, -1, 20523, "Stripped Oak Log"), - STRIPPED_OAK_WOOD(-1, -1, 31455, "Stripped Oak Wood"), - STRIPPED_SPRUCE_LOG(-1, -1, 6140, "Stripped Spruce Log"), - STRIPPED_SPRUCE_WOOD(-1, -1, 6467, "Stripped Spruce Wood"), - STRUCTURE_BLOCK(255, 0, 26831, "Structure Block", "STRUCTURE_BLOCK"), - STRUCTURE_VOID(217, 0, 30806, "Structure Void", "STRUCTURE_VOID"), + STRING(287, 0, 12806, "String"), + STRIPPED_ACACIA_LOG(null, null, 18167, "Stripped Acacia Log"), + STRIPPED_ACACIA_WOOD(null, null, 27193, "Stripped Acacia Wood"), + STRIPPED_BIRCH_LOG(null, null, 8838, "Stripped Birch Log"), + STRIPPED_BIRCH_WOOD(null, null, 22350, "Stripped Birch Wood"), + STRIPPED_DARK_OAK_LOG(null, null, 6492, "Stripped Dark Oak Log"), + STRIPPED_DARK_OAK_WOOD(null, null, 16000, "Stripped Dark Oak Wood"), + STRIPPED_JUNGLE_LOG(null, null, 15476, "Stripped Jungle Log"), + STRIPPED_JUNGLE_WOOD(null, null, 30315, "Stripped Jungle Wood"), + STRIPPED_OAK_LOG(null, null, 20523, "Stripped Oak Log"), + STRIPPED_OAK_WOOD(null, null, 31455, "Stripped Oak Wood"), + STRIPPED_SPRUCE_LOG(null, null, 6140, "Stripped Spruce Log"), + STRIPPED_SPRUCE_WOOD(null, null, 6467, "Stripped Spruce Wood"), + STRUCTURE_BLOCK(255, 0, 26831, "Structure Block"), + STRUCTURE_VOID(217, 0, 30806, "Structure Void"), SUGAR(353, 0, 30638, "Sugar"), SUGAR_CANE(338, 0, 7726, "Sugar Canes", "Sugar Cane"), SUNFLOWER(175, 0, 7408, "Sunflower"), TALL_GRASS(31, 0, 21559, "Tall Grass"), - TALL_SEAGRASS(-1, -1, 27189, "Tall Seagrass"), + TALL_SEAGRASS(null, null, 27189, "Tall Seagrass"), TERRACOTTA(172, 0, 16544, "Terracotta", "HARD_CLAY"), TIPPED_ARROW(440, 0, 25164, "Tipped Arrow"), TNT(46, 0, 7896, "TNT", "TNT"), TNT_MINECART(407, 0, 4277, "Minecart with TNT", "explosiveminecart"), - TORCH(50, 0, 6063, "Torch", "TORCH"), + TORCH(50, 0, 6063, "Torch"), TOTEM_OF_UNDYING(449, 0, 10139, "Totem Of Undying"), - TRAPPED_CHEST(146, 0, 18970, "Trapped Chest", "TRAPPED_CHEST"), - TRIDENT(-1, -1, 7534, "Trident"), + TRAPPED_CHEST(146, 0, 18970, "Trapped Chest"), + TRIDENT(null, null, 7534, "Trident"), TRIPWIRE(132, 0, 8810, "Tripwire"), TRIPWIRE_HOOK(131, 0, 8130, "Tripwire Hook"), TROPICAL_FISH(349, 2, 24879, "Tropical Fish"), - TROPICAL_FISH_BUCKET(-1, -1, 29995, "Bucket of Tropical Fish"), - TROPICAL_FISH_SPAWN_EGG(-1, -1, 19713, "Tropical Fish Spawn Egg"), - TUBE_CORAL(-1, -1, 23048, "Tube Coral"), - TUBE_CORAL_BLOCK(-1, -1, 23723, "Tube Coral Block"), - TUBE_CORAL_FAN(-1, -1, 19929, "Tube Coral Fan"), - TUBE_CORAL_WALL_FAN(-1, -1, 25282, "Tube Coral Wall Fan"), - TURTLE_EGG(-1, -1, 32101, "Turtle Egg"), - TURTLE_HELMET(-1, -1, 30120, "Turtle Shell"), - TURTLE_SPAWN_EGG(-1, -1, 17324, "Turtle Spawn Egg"), + TROPICAL_FISH_BUCKET(null, null, 29995, "Bucket of Tropical Fish"), + TROPICAL_FISH_SPAWN_EGG(null, null, 19713, "Tropical Fish Spawn Egg"), + TUBE_CORAL(null, null, 23048, "Tube Coral"), + TUBE_CORAL_BLOCK(null, null, 23723, "Tube Coral Block"), + TUBE_CORAL_FAN(null, null, 19929, "Tube Coral Fan"), + TUBE_CORAL_WALL_FAN(null, null, 25282, "Tube Coral Wall Fan"), + TURTLE_EGG(null, null, 32101, "Turtle Egg"), + TURTLE_HELMET(null, null, 30120, "Turtle Shell"), + TURTLE_SPAWN_EGG(null, null, 17324, "Turtle Spawn Egg"), VEX_SPAWN_EGG(383, 35, 27751, "Spawn Vex", "Vex Spawn Egg"), VILLAGER_SPAWN_EGG(383, 120, 30348, "Spawn Villager", "Villager Spawn Egg"), VINDICATOR_SPAWN_EGG(383, 36, 25324, "Spawn Vindicator", "Vindicator Spawn Egg"), VINE(106, 0, 14564, "Vines", "VINE"), - VOID_AIR(-1, -1, 13668, "Void Air"), - WALL_SIGN(68, 0, 10644, "Wall Sign", "WALL_SIGN"), + VOID_AIR(null, null, 13668, "Void Air"), + WALL_SIGN(68, 0, 10644, "Wall Sign"), WALL_TORCH(50, 0, 25890, "Wall Torch"), - WATER(8, 0, 24998, "Flowing Water", "FLOWING_WATER"), + WATER(8, 0, 24998, "Flowing Water"), WATER_BUCKET(326, 0, 8802, "Water Bucket"), WET_SPONGE(19, 1, 9043, "Wet Sponge"), WHEAT(296, 0, 27709, "Wheat"), @@ -1498,8 +1741,8 @@ public enum CMIMaterial { WHITE_CARPET(171, 0, 15117, "White Carpet"), WHITE_CONCRETE(251, 0, 6281, "White Concrete"), WHITE_CONCRETE_POWDER(252, 0, 10363, "White Concrete Powder"), - WHITE_GLAZED_TERRACOTTA(235, 0, 11326, "White Glazed Terracotta", "WHITE_GLAZED_TERRACOTTA"), - WHITE_SHULKER_BOX(219, 0, 31750, "White Shulker Box", "WHITE_SHULKER_BOX"), + WHITE_GLAZED_TERRACOTTA(235, 0, 11326, "White Glazed Terracotta"), + WHITE_SHULKER_BOX(219, 0, 31750, "White Shulker Box"), WHITE_STAINED_GLASS(95, 0, 31190, "White Stained Glass"), WHITE_STAINED_GLASS_PANE(160, 0, 10557, "White Stained Glass Pane"), WHITE_TERRACOTTA(159, 0, 20975, "White Terracotta"), @@ -1519,12 +1762,12 @@ public enum CMIMaterial { WRITABLE_BOOK(386, 0, 13393, "Book and Quill"), WRITTEN_BOOK(387, 0, 24164, "Written Book"), YELLOW_BANNER(425, 11, 30382, "Yellow Banner"), - YELLOW_BED(355, 4, 30410, "Yellow Bed", "Yellow Bed"), + YELLOW_BED(355, 4, 30410, "Yellow Bed"), YELLOW_CARPET(171, 4, 18149, "Yellow Carpet"), YELLOW_CONCRETE(251, 4, 15722, "Yellow Concrete"), YELLOW_CONCRETE_POWDER(252, 4, 10655, "Yellow Concrete Powder"), - YELLOW_GLAZED_TERRACOTTA(239, 0, 10914, "Yellow Glazed Terracotta", "YELLOW_GLAZED_TERRACOTTA"), - YELLOW_SHULKER_BOX(223, 0, 28700, "Yellow Shulker Box", "YELLOW_SHULKER_BOX"), + YELLOW_GLAZED_TERRACOTTA(239, 0, 10914, "Yellow Glazed Terracotta"), + YELLOW_SHULKER_BOX(223, 0, 28700, "Yellow Shulker Box"), YELLOW_STAINED_GLASS(95, 4, 12182, "Yellow Stained Glass"), YELLOW_STAINED_GLASS_PANE(160, 4, 20298, "Yellow Stained Glass Pane"), YELLOW_TERRACOTTA(159, 4, 32129, "Yellow Terracotta"), @@ -1537,59 +1780,164 @@ public enum CMIMaterial { ZOMBIE_VILLAGER_SPAWN_EGG(383, 27, 10311, "Spawn Zombie Villager", "Zombie Villager Spawn Egg"), ZOMBIE_WALL_HEAD(144, 2, 16296, "Zombie Wall Head"), + //1.14 + ACACIA_SIGN(null, null, 29808, "Acacia Sign"), + ACACIA_WALL_SIGN(null, null, 20316, "Acacia Wall Sign"), + ANDESITE_SLAB(null, null, 32124, "Andesite Slab"), + ANDESITE_STAIRS(null, null, 17747, "Andesite Stairs"), + ANDESITE_WALL(null, null, 14938, "Andesite Wall"), + BAMBOO(null, null, 18728, "Bamboo"), + BAMBOO_SAPLING(null, null, 8478, "Bamboo Sapling"), + BARREL(null, null, 22396, "Barrel"), + BELL(null, null, 20000, "Bell"), + BIRCH_SIGN(null, null, 11351, "Birch Sign"), + BIRCH_WALL_SIGN(null, null, 9887, "Birch Wall Sign"), + BLACK_DYE(null, null, 6202, "Black Dye"), + BLAST_FURNACE(null, null, 31157, "Blast Furnace"), + BLUE_DYE(null, null, 11588, "Blue Dye"), + BRICK_WALL(null, null, 18995, "Brick Wall"), + BROWN_DYE(null, null, 7648, "Brown Dye"), + CAMPFIRE(null, null, 8488, "Campfire"), + CARTOGRAPHY_TABLE(null, null, 28529, "Cartography Table"), + CAT_SPAWN_EGG(null, null, 29583, "Cat Spawn Egg"), + CORNFLOWER(null, null, 15405, "Cornflower"), + CREEPER_BANNER_PATTERN(null, null, 15774, "Banner Pattern"), + CROSSBOW(null, null, 4340, "Crossbow"), + CUT_RED_SANDSTONE_SLAB(null, null, -11, "Cut Red Sandstone Slab"), + CUT_SANDSTONE_SLAB(null, null, -10, "Cut Sandstone Slab"), + DARK_OAK_SIGN(null, null, 15127, "Dark Oak Sign"), + DARK_OAK_WALL_SIGN(null, null, 9508, "Dark Oak Wall Sign"), + DIORITE_SLAB(null, null, 10715, "Diorite Slab"), + DIORITE_STAIRS(null, null, 13134, "Diorite Stairs"), + DIORITE_WALL(null, null, 17412, "Diorite Wall"), + END_STONE_BRICK_SLAB(null, null, 23239, "End Stone Brick Slab"), + END_STONE_BRICK_STAIRS(null, null, 28831, "End Stone Brick Stairs"), + END_STONE_BRICK_WALL(null, null, 27225, "End Stone Brick Wall"), + FLETCHING_TABLE(null, null, 30838, "Fletching Table"), + FLOWER_BANNER_PATTERN(null, null, 5762, "Banner Pattern"), + FOX_SPAWN_EGG(null, null, -1, "Fox Spawn Egg"), + GLOBE_BANNER_PATTERN(null, null, -99, "Banner Pattern"), + GRANITE_SLAB(null, null, 25898, "Granite Slab"), + GRANITE_STAIRS(null, null, 21840, "Granite Stairs"), + GRANITE_WALL(null, null, 23279, "Granite Wall"), + GREEN_DYE(null, null, 23215, "Green Dye"), + GRINDSTONE(null, null, 26260, "Grindstone"), + JIGSAW(null, null, 17398, "Jigsaw Block"), + JUNGLE_SIGN(null, null, 24717, "Jungle Sign"), + JUNGLE_WALL_SIGN(null, null, 29629, "Jungle Wall Sign"), + LANTERN(null, null, 5992, "Lantern"), + LEATHER_HORSE_ARMOR(null, null, -2, "Leather Horse Armor"), + LECTERN(null, null, 23490, "Lectern"), + LILY_OF_THE_VALLEY(null, null, 7185, "Lily of the Valley"), + LOOM(null, null, 14276, "Loom"), + MOJANG_BANNER_PATTERN(null, null, 11903, "Banner Pattern"), + MOSSY_COBBLESTONE_SLAB(null, null, 12139, "Mossy Cobblestone Slab"), + MOSSY_COBBLESTONE_STAIRS(null, null, 29210, "Mossy Cobblestone Stairs"), + MOSSY_STONE_BRICK_SLAB(null, null, 14002, "Mossy Stone Brick Slab"), + MOSSY_STONE_BRICK_STAIRS(null, null, 27578, "Mossy Stone Brick Stairs"), + MOSSY_STONE_BRICK_WALL(null, null, 18259, "Mossy Stone Brick Wall"), + NETHER_BRICK_WALL(null, null, 10398, "Nether Brick Wall"), + OAK_SIGN(null, null, 8192, "Oak Sign"), + OAK_WALL_SIGN(null, null, 12984, "Oak Wall Sign"), + PANDA_SPAWN_EGG(null, null, 23759, "Panda Spawn Egg"), + PILLAGER_SPAWN_EGG(null, null, 28659, "Pillager Spawn Egg"), + POLISHED_ANDESITE_STAIRS(null, null, 7573, "Polished Andesite Stairs"), + POLISHED_ANDESITE_SLAB(null, null, 0, "Polished Andesite Slab"), + POLISHED_DIORITE_SLAB(null, null, 18303, "Polished Diorite Slab"), + POLISHED_DIORITE_STAIRS(null, null, 4625, "Polished Diorite Stairs"), + POLISHED_GRANITE_SLAB(null, null, 4521, "Polished Granite Slab"), + POLISHED_GRANITE_STAIRS(null, null, 29588, "Polished Granite Stairs"), + POTTED_BAMBOO(null, null, 22542, "Air"), + POTTED_CORNFLOWER(null, null, 28917, "Air"), + POTTED_LILY_OF_THE_VALLEY(null, null, 9364, "Air"), + POTTED_WITHER_ROSE(null, null, 26876, "Air"), + PRISMARINE_WALL(null, null, 18184, "Prismarine Wall"), + RAVAGER_SPAWN_EGG(null, null, 31284, "Ravager Spawn Egg"), + RED_DYE(null, null, 5728, "Red Dye"), + RED_NETHER_BRICK_SLAB(null, null, 12462, "Red Nether Brick Slab"), + RED_NETHER_BRICK_STAIRS(null, null, 26374, "Red Nether Brick Stairs"), + RED_NETHER_BRICK_WALL(null, null, 4580, "Red Nether Brick Wall"), + RED_SANDSTONE_WALL(null, null, 4753, "Red Sandstone Wall"), + SANDSTONE_WALL(null, null, 18470, "Sandstone Wall"), + SCAFFOLDING(null, null, 15757, "Scaffolding"), + SKULL_BANNER_PATTERN(null, null, 7680, "Banner Pattern"), + SMITHING_TABLE(null, null, 9082, "Smithing Table"), + SMOKER(null, null, 24781, "Smoker"), + SMOOTH_QUARTZ_SLAB(null, null, 26543, "Smooth Quartz Slab"), + SMOOTH_QUARTZ_STAIRS(null, null, 19560, "Smooth Quartz Stairs"), + SMOOTH_RED_SANDSTONE_SLAB(null, null, 16304, "Smooth Red Sandstone Slab"), + SMOOTH_RED_SANDSTONE_STAIRS(null, null, 17561, "Smooth Red Sandstone Stairs"), + SMOOTH_SANDSTONE_SLAB(null, null, 9030, "Smooth Sandstone Slab"), + SMOOTH_SANDSTONE_STAIRS(null, null, 21183, "Smooth Sandstone Stairs"), + SMOOTH_STONE_SLAB(null, null, 24129, "Smooth Stone Slab"), + SPRUCE_SIGN(null, null, 21502, "Spruce Sign"), + SPRUCE_WALL_SIGN(null, null, 7352, "Air"), + STONECUTTER(null, null, 25170, "Stonecutter"), + STONE_BRICK_WALL(null, null, 29073, "Stone Brick Wall"), + STONE_STAIRS(null, null, 23784, "Stone Stairs"), + SUSPICIOUS_STEW(null, null, 8173, "Suspicious Stew"), + SWEET_BERRIES(null, null, 19747, "Sweet Berries"), + SWEET_BERRY_BUSH(null, null, 11958, "Air"), + TRADER_LLAMA_SPAWN_EGG(null, null, 13512, "Trader Llama Spawn Egg"), + WANDERING_TRADER_SPAWN_EGG(null, null, 12312, "Wandering Trader Spawn Egg"), + WHITE_DYE(null, null, 10758, "White Dye"), + WITHER_ROSE(null, null, 8619, "Wither Rose"), + YELLOW_DYE(null, null, 5952, "Yellow Dye"), + COMPOSTER(null, null, -4, "Composter"), + // Legacy - LEGACY_STATIONARY_WATER(9, 0, -1, "Stationary Water"), - LEGACY_STATIONARY_LAVA(11, 0, -1, "Stationary Lava"), - LEGACY_BURNING_FURNACE(62, 0, -1, "Burning Furnace"), - LEGACY_NETHER_WARTS(115, 0, -1, "Nether Warts"), - LEGACY_IRON_DOOR_BLOCK(71, 0, -1, "Iron Door Block"), - LEGACY_GLOWING_REDSTON_ORE(74, 0, -1, "Glowing Redstone Ore"), - LEGACY_SUGAR_CANE_BLOCK(83, 0, -1, "Sugar Cane Block"), - LEGACY_RAW_FISH(349, 0, -1, "Raw Fish"), - LEGACY_SKULL(144, 0, -1, "Skull"), - LEGACY_SIGN_POST(63, 0, -1, "Sign Post"), - LEGACY_BED_BLOCK(26, 0, -1, "Bed Block"), - LEGACY_REDSTONE_TORCH_OFF(75, 0, -1, "Redstone Torch Off"), - LEGACY_REDSTONE_TORCH_ON(76, 0, -1, "Redstone Torch On"), - LEGACY_CAKE_BLOCK(92, 0, -1, "Cake Block"), - LEGACY_DIODE_BLOCK_OFF(93, 0, -1, "Diode Block Off"), - LEGACY_DIODE_BLOCK_ON(94, 0, -1, "Diode Block On"), -// LEGACY_BREWING_STAND(117, -1, -1, "LEGACY_BREWING_STAND", ""), -// LEGACY_CAULDRON(118, 0, -1, "LEGACY_CAULDRON", ""), -// LEGACY_REDSTONE_LAMP_ON(124, -1, -1, "LEGACY_REDSTONE_LAMP_ON", ""), -// LEGACY_WOOD_DOUBLE_STEP(125, -1, -1, "LEGACY_WOOD_DOUBLE_STEP", ""), -// LEGACY_FLOWER_POT(140, -1, -1, "LEGACY_FLOWER_POT", ""), - LEGACY_REDSTONE_COMPARATOR_OFF(149, 0, -1, "Redstone Comparator Off", ""), - LEGACY_REDSTONE_COMPARATOR_ON(150, 0, -1, "Redstone Comparator On", ""), -// LEGACY_STANDING_BANNER(176, -1, -1, "LEGACY_STANDING_BANNER", ""), -// LEGACY_WALL_BANNER(177, -1, -1, "LEGACY_WALL_BANNER", ""), -// LEGACY_DAYLIGHT_DETECTOR_INVERTED(178, -1, -1, "LEGACY_DAYLIGHT_DETECTOR_INVERTED", ""), -// LEGACY_DOUBLE_STONE_SLAB2(181, -1, -1, "LEGACY_DOUBLE_STONE_SLAB2", ""), - LEGACY_WOODEN_DOOR_BLOCK(64, 0, -1, "Wooden Door Block"), - LEGACY_SPRUCE_DOOR(193, 0, -1, "Spruce Door Block"), - LEGACY_BIRCH_DOOR(194, 0, -1, "Birch Door Block"), - LEGACY_JUNGLE_DOOR(195, 0, -1, "Jungle Door Block"), - LEGACY_ACACIA_DOOR(196, 0, -1, "Acacia Door Block"), - LEGACY_DARK_OAK_DOOR(197, 0, -1, "Dark Oak Door Block"), -// LEGACY_PURPUR_DOUBLE_SLAB(204, -1, -1, "LEGACY_PURPUR_DOUBLE_SLAB", ""), -// LEGACY_COMMAND_REPEATING(210, -1, -1, "LEGACY_COMMAND_REPEATING", ""), -// LEGACY_COMMAND_CHAIN(211, -1, -1, "LEGACY_COMMAND_CHAIN", ""), - LEGACY_WHEAT(59, 0, -1, "Wheat Block"); - - private int legacyId; - private int legacyData; - private int id; + LEGACY_STATIONARY_WATER(9, 0, null, "Stationary Water"), + LEGACY_STATIONARY_LAVA(11, 0, null, "Stationary Lava"), + LEGACY_BURNING_FURNACE(62, 0, null, "Burning Furnace"), + LEGACY_NETHER_WARTS(115, 0, null, "Nether Warts"), + LEGACY_IRON_DOOR_BLOCK(71, 0, null, "Iron Door Block"), + LEGACY_GLOWING_REDSTON_ORE(74, 0, null, "Glowing Redstone Ore"), + LEGACY_SUGAR_CANE_BLOCK(83, 0, null, "Sugar Cane Block"), + LEGACY_RAW_FISH(349, 0, null, "Raw Fish"), + LEGACY_SKULL(144, 0, null, "Skull"), + LEGACY_SIGN_POST(63, 0, null, "Sign Post"), + LEGACY_BED_BLOCK(26, 0, null, "Bed Block"), + LEGACY_REDSTONE_TORCH_OFF(75, 0, null, "Redstone Torch Off"), + LEGACY_REDSTONE_TORCH_ON(76, 0, null, "Redstone Torch On"), + LEGACY_CAKE_BLOCK(92, 0, null, "Cake Block"), + LEGACY_DIODE_BLOCK_OFF(93, 0, null, "Diode Block Off"), + LEGACY_DIODE_BLOCK_ON(94, 0, null, "Diode Block On"), +// LEGACY_BREWING_STAND(117, null, null, "LEGACY_BREWING_STAND", ""), +// LEGACY_CAULDRON(118, 0, null, "LEGACY_CAULDRON", ""), +// LEGACY_REDSTONE_LAMP_ON(124, null, null, "LEGACY_REDSTONE_LAMP_ON", ""), +// LEGACY_WOOD_DOUBLE_STEP(125, null, null, "LEGACY_WOOD_DOUBLE_STEP", ""), +// LEGACY_FLOWER_POT(140, null, null, "LEGACY_FLOWER_POT", ""), + LEGACY_REDSTONE_COMPARATOR_OFF(149, 0, null, "Redstone Comparator Off", ""), + LEGACY_REDSTONE_COMPARATOR_ON(150, 0, null, "Redstone Comparator On", ""), +// LEGACY_STANDING_BANNER(176, null, null, "LEGACY_STANDING_BANNER", ""), +// LEGACY_WALL_BANNER(177, null, null, "LEGACY_WALL_BANNER", ""), +// LEGACY_DAYLIGHT_DETECTOR_INVERTED(178, null, null, "LEGACY_DAYLIGHT_DETECTOR_INVERTED", ""), +// LEGACY_DOUBLE_STONE_SLAB2(181, null, null, "LEGACY_DOUBLE_STONE_SLAB2", ""), + LEGACY_WOODEN_DOOR_BLOCK(64, 0, null, "Wooden Door Block"), + LEGACY_SPRUCE_DOOR(193, 0, null, "Spruce Door Block"), + LEGACY_BIRCH_DOOR(194, 0, null, "Birch Door Block"), + LEGACY_JUNGLE_DOOR(195, 0, null, "Jungle Door Block"), + LEGACY_ACACIA_DOOR(196, 0, null, "Acacia Door Block"), + LEGACY_DARK_OAK_DOOR(197, 0, null, "Dark Oak Door Block"), +// LEGACY_PURPUR_DOUBLE_SLAB(204, null, null, "LEGACY_PURPUR_DOUBLE_SLAB", ""), +// LEGACY_COMMAND_REPEATING(210, null, null, "LEGACY_COMMAND_REPEATING", ""), +// LEGACY_COMMAND_CHAIN(211, null, null, "LEGACY_COMMAND_CHAIN", ""), + LEGACY_WHEAT(59, 0, null, "Wheat Block"); + + private Integer legacyId; + private Integer legacyData; + private Integer id; private String name; private String legacyName; private String bukkitName; private String mojangName; Material mat; - CMIMaterial(int legacyId, int legacyData, int id, String name) { + CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name) { this(legacyId, legacyData, id, name, null); } - CMIMaterial(int legacyId, int legacyData, int id, String name, String legacyName) { + CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name, String legacyName) { this.legacyId = legacyId; this.legacyData = legacyData; this.id = id; @@ -1601,13 +1949,15 @@ public String getName() { return name; } - public int getLegacyId() { - return this.legacyId; + @Deprecated + public Integer getLegacyId() { + return this.legacyId == null ? 0 : this.legacyId; } - public int getId() { + @Deprecated + public Integer getId() { if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - return this.id; + return this.id == null ? 0 : this.id; } return getLegacyId(); } @@ -1617,14 +1967,6 @@ public Material getMaterial() { } public void updateMaterial() { - if (mat == null) { - for (Material one : Material.class.getEnumConstants()) { - if (one.getId() != this.getId()) - continue; - mat = one; - break; - } - } if (mat == null) { for (Material one : Material.class.getEnumConstants()) { if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.name().replace("_", ""))) @@ -1649,6 +1991,16 @@ public void updateMaterial() { break; } } + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { + if (mat == null && this.getId() != null) { + for (Material one : Material.class.getEnumConstants()) { + if (one.getId() != this.getId()) + continue; + mat = one; + break; + } + } + } } public ItemStack newItemStack() { @@ -1657,12 +2009,10 @@ public ItemStack newItemStack() { public ItemStack newItemStack(int amount) { if (mat == null) { - for (Material one : Material.class.getEnumConstants()) { - if (one.getId() != this.getId()) - continue; - mat = one; - break; - } + updateMaterial(); + } + if (mat == null) { + return new ItemStack(Material.STONE); } if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat); @@ -1679,11 +2029,12 @@ public short getData() { if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { return 0; } - return (short) legacyData; + return getLegacyData(); } - public int getLegacyData() { - return legacyData; + @Deprecated + public short getLegacyData() { + return legacyData == null ? 0 : legacyData.shortValue(); } public static CMIMaterial getRandom(CMIMaterial mat) { @@ -1691,7 +2042,7 @@ public static CMIMaterial getRandom(CMIMaterial mat) { List ls = new ArrayList(); for (CMIMaterial one : CMIMaterial.values()) { - if (one.getLegacyId() == -1) + if (one.getLegacyId() == null) continue; if (one.getLegacyId() != mat.getLegacyId()) continue; @@ -1714,25 +2065,49 @@ public static CMIMaterial getRandom(CMIMaterial mat) { return ls.isEmpty() ? CMIMaterial.NONE : ls.get(0); } + public CMIMaterial getByColorId(int id) { + return getByColorId(this, id); + } + + public static CMIMaterial getByColorId(CMIMaterial mat, int id) { + if (mat == null) + return CMIMaterial.NONE; + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getLegacyId() == null) + continue; + if (one.getLegacyId() != mat.getLegacyId()) + continue; + if (one.getLegacyData() == id) + return one; + } + + return mat; + } + public static CMIMaterial get(String id) { + if (id == null) + return CMIMaterial.NONE; Integer ids = null; Integer data = null; id = id.replace("_", "").replace(" ", "").replace("minecraft:", "").toLowerCase(); - try { - ids = Integer.parseInt(id); - } catch (Exception e) { - if (id.contains(":")) { - try { - ids = Integer.parseInt(id.split(":")[0]); - data = Integer.parseInt(id.split(":")[1]); - return get(ids, data); - } catch (Exception ex) { - } - try { - data = Integer.parseInt(id.split(":")[1]); - id = id.split(":")[0]; - } catch (Exception ex) { + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { + try { + ids = Integer.parseInt(id); + } catch (Exception e) { + if (id.contains(":")) { + try { + ids = Integer.parseInt(id.split(":")[0]); + data = Integer.parseInt(id.split(":")[1]); + return get(ids, data); + } catch (Exception ex) { + } + + try { + data = Integer.parseInt(id.split(":")[1]); + id = id.split(":")[0]; + } catch (Exception ex) { + } } } } @@ -1774,20 +2149,27 @@ public static CMIMaterial get(String id) { return mat; } - if (ids != null) { - if (data == null) - mat = get(ids); - else - mat = get(ids, data); + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { + if (ids != null) { + if (data == null) + mat = get(ids); + else + mat = get(ids, data); + } } if (mat != null) return mat; - for (CMIMaterial one : CMIMaterial.values()) { - if (ids != null && data == null && one.getId() == ids) - return one; - if (ids != null && data != null && one.getId() == ids && one.getLegacyData() == data) - return one; + + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { + if (ids != null) { + for (CMIMaterial one : CMIMaterial.values()) { + if (data == null && one.getId() == ids) + return one; + if (data != null && one.getId() == ids && one.getLegacyData() == data) + return one; + } + } } id = id.replace("_", "").toLowerCase(); @@ -1801,12 +2183,21 @@ public static CMIMaterial get(String id) { } public static CMIMaterial get(Material mat) { - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getMaterial() == null) - continue; - if (one.getMaterial().getId() == mat.getId()) { - return one; + if (mat == null) + return CMIMaterial.NONE; + + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getMaterial() == null) + continue; + if (one.getMaterial().getId() == mat.getId()) { + return one; + } } + } else { + CMIMaterial m = byRealMaterial.get(mat); + if (m != null) + return m; } return CMIMaterial.NONE; } @@ -1815,7 +2206,7 @@ public static CMIMaterial get(int id) { for (CMIMaterial one : CMIMaterial.values()) { if (one.getMaterial() == null) continue; - if (one.getMaterial().getId() == id) { + if (one.getId() == id) { return one; } } @@ -1828,30 +2219,43 @@ public static CMIMaterial get(int id) { } public static CMIMaterial get(ItemStack item) { + if (item == null) + return CMIMaterial.NONE; // if (CMIMaterial.isMonsterEgg(item.getType())) { // int tid = CMI.getInstance().getNMS().getEggId(item); // return get(item.getType().getId(), tid); // } - CMIMaterial m = get(item.getType().getId(), item.getData().getData()); - - if (m == null) { - CMIItemStack cm = byBukkitName.get(item.getType().toString().toLowerCase().replace("_", "")); - if (cm != null) - m = cm.getCMIType(); + CMIMaterial m = null; + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { + m = Version.isCurrentEqualOrHigher(Version.v1_13_R1) ? get(item.getType().getId()) : get(item.getType().getId(), item.getData().getData()); + + if (m == null) { + CMIItemStack cm = byBukkitName.get(item.getType().toString().toLowerCase().replace("_", "")); + if (cm != null) + m = cm.getCMIType(); + } + } else { + m = byRealMaterial.get(item.getType()); } return m == null ? CMIMaterial.NONE : m; } public static CMIMaterial get(Block block) { - + if (block == null) + return CMIMaterial.NONE; byte data = block.getData(); if (block.getState() instanceof Skull) { Skull skull = (Skull) block.getState(); data = (byte) skull.getSkullType().ordinal(); } - CMIMaterial m = get(block.getType().getId(), data); + CMIMaterial m = null; + + if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { + m = byRealMaterial.get(block.getType()); + } + if (m == null) { CMIItemStack cm = byBukkitName.get(block.getType().toString().replace("_", "").toLowerCase()); if (cm != null) @@ -1862,6 +2266,9 @@ public static CMIMaterial get(Block block) { if (cm != null) m = cm.getCMIType(); } + if (m == null && Version.isCurrentEqualOrLower(Version.v1_13_R2)) { + m = get(block.getType().getId(), Version.isCurrentEqualOrHigher(Version.v1_13_R1) ? 0 : data); + } return m == null ? CMIMaterial.NONE : m; } @@ -1871,7 +2278,6 @@ public static CMIMaterial get(int id, int data) { CMIItemStack cm = byBukkitName.get(id + ":" + data); if (cm != null) mat = cm.getCMIType(); - cm = byId.get(id); if (cm != null) mat = cm.getCMIType(); @@ -1917,6 +2323,10 @@ public boolean isBlock() { return this.getMaterial() == null ? false : this.getMaterial().isBlock(); } + public boolean isEquipment() { + return getMaxDurability() > 16; + } + public boolean isSolid() { return this.getMaterial() == null ? false : this.getMaterial().isSolid(); } @@ -1983,6 +2393,14 @@ public boolean isMonsterEgg() { case TROPICAL_FISH_SPAWN_EGG: case TURTLE_EGG: case TURTLE_SPAWN_EGG: + + case CAT_SPAWN_EGG: + case FOX_SPAWN_EGG: + case PANDA_SPAWN_EGG: + case PILLAGER_SPAWN_EGG: + case RAVAGER_SPAWN_EGG: + case TRADER_LLAMA_SPAWN_EGG: + case WANDERING_TRADER_SPAWN_EGG: return true; default: break; @@ -2022,6 +2440,54 @@ public boolean isBed() { return false; } + public static boolean isStairs(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isStairs(); + } + + public boolean isStairs() { + switch (this) { + case ACACIA_STAIRS: + case BIRCH_STAIRS: + case BRICK_STAIRS: + case COBBLESTONE_STAIRS: + case DARK_OAK_STAIRS: + case DARK_PRISMARINE_STAIRS: + case JUNGLE_STAIRS: + case NETHER_BRICK_STAIRS: + case OAK_STAIRS: + case PRISMARINE_BRICK_STAIRS: + case PRISMARINE_STAIRS: + case PURPUR_STAIRS: + case QUARTZ_STAIRS: + case RED_SANDSTONE_STAIRS: + case SANDSTONE_STAIRS: + case SPRUCE_STAIRS: + case STONE_BRICK_STAIRS: + + case ANDESITE_STAIRS: + case DIORITE_STAIRS: + case END_STONE_BRICK_STAIRS: + case GRANITE_STAIRS: + case MOSSY_COBBLESTONE_STAIRS: + case MOSSY_STONE_BRICK_STAIRS: + case POLISHED_ANDESITE_STAIRS: + case POLISHED_DIORITE_STAIRS: + case POLISHED_GRANITE_STAIRS: + case RED_NETHER_BRICK_STAIRS: + case SMOOTH_QUARTZ_STAIRS: + case SMOOTH_RED_SANDSTONE_STAIRS: + case SMOOTH_SANDSTONE_STAIRS: + case STONE_STAIRS: + return true; + default: + break; + } + return false; + } + public static boolean isPotion(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2032,6 +2498,9 @@ public static boolean isPotion(Material mat) { public boolean isPotion() { switch (this) { case POTION: + case LINGERING_POTION: + case SPLASH_POTION: + case AWKWARD_POTION: case THICK_POTION: case MUNDANE_POTION: @@ -2076,43 +2545,6 @@ public boolean isPotion() { return false; } - public static boolean isPottedFlower(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isPottedFlower(); - } - - public boolean isPottedFlower() { - switch (this) { - case POTTED_ACACIA_SAPLING: - case POTTED_ALLIUM: - case POTTED_AZURE_BLUET: - case POTTED_BIRCH_SAPLING: - case POTTED_BLUE_ORCHID: - case POTTED_BROWN_MUSHROOM: - case POTTED_CACTUS: - case POTTED_DANDELION: - case POTTED_DARK_OAK_SAPLING: - case POTTED_DEAD_BUSH: - case POTTED_FERN: - case POTTED_JUNGLE_SAPLING: - case POTTED_OAK_SAPLING: - case POTTED_ORANGE_TULIP: - case POTTED_OXEYE_DAISY: - case POTTED_PINK_TULIP: - case POTTED_POPPY: - case POTTED_RED_MUSHROOM: - case POTTED_RED_TULIP: - case POTTED_SPRUCE_SAPLING: - case POTTED_WHITE_TULIP: - return true; - default: - break; - } - return false; - } - public static boolean isBoat(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2135,25 +2567,6 @@ public boolean isBoat() { return false; } - public static boolean isAnvil(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isAnvil(); - } - - public boolean isAnvil() { - switch (this) { - case ANVIL: - case CHIPPED_ANVIL: - case DAMAGED_ANVIL: - return true; - default: - break; - } - return false; - } - public static boolean isSapling(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2205,6 +2618,42 @@ public boolean isButton() { return false; } + public static boolean isWater(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isWater(); + } + + public boolean isWater() { + switch (this) { + case WATER: + case LEGACY_STATIONARY_WATER: + return true; + default: + break; + } + return false; + } + + public static boolean isLava(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isLava(); + } + + public boolean isLava() { + switch (this) { + case LAVA: + case LEGACY_STATIONARY_LAVA: + return true; + default: + break; + } + return false; + } + public static boolean isPlate(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2262,6 +2711,38 @@ public boolean isWool() { return false; } + public static boolean isCarpet(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isCarpet(); + } + + public boolean isCarpet() { + switch (this) { + case BLACK_CARPET: + case BLUE_CARPET: + case BROWN_CARPET: + case CYAN_CARPET: + case GRAY_CARPET: + case GREEN_CARPET: + case LIGHT_BLUE_CARPET: + case LIGHT_GRAY_CARPET: + case LIME_CARPET: + case MAGENTA_CARPET: + case ORANGE_CARPET: + case PINK_CARPET: + case PURPLE_CARPET: + case RED_CARPET: + case WHITE_CARPET: + case YELLOW_CARPET: + return true; + default: + break; + } + return false; + } + public static boolean isShulkerBox(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2315,6 +2796,138 @@ public boolean isLeatherArmor() { return false; } + public static boolean isArmor(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isArmor(); + } + + public boolean isArmor() { + switch (this) { + case CHAINMAIL_HELMET: + case DIAMOND_HELMET: + case GOLDEN_HELMET: + case IRON_HELMET: + case LEATHER_HELMET: + case CHAINMAIL_CHESTPLATE: + case DIAMOND_CHESTPLATE: + case GOLDEN_CHESTPLATE: + case IRON_CHESTPLATE: + case LEATHER_CHESTPLATE: + case CHAINMAIL_LEGGINGS: + case DIAMOND_LEGGINGS: + case GOLDEN_LEGGINGS: + case IRON_LEGGINGS: + case LEATHER_LEGGINGS: + case CHAINMAIL_BOOTS: + case DIAMOND_BOOTS: + case GOLDEN_BOOTS: + case IRON_BOOTS: + case LEATHER_BOOTS: + case SHIELD: + case TURTLE_HELMET: + return true; + default: + break; + } + return false; + } + + public static boolean isWeapon(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isWeapon(); + } + + public boolean isWeapon() { + switch (this) { + case DIAMOND_SWORD: + case IRON_SWORD: + case GOLDEN_SWORD: + case STONE_SWORD: + case WOODEN_SWORD: + case BOW: + case CROSSBOW: + case TRIDENT: + return true; + default: + break; + } + return false; + } + + public static boolean isTool(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isTool(); + } + + public boolean isTool() { + switch (this) { + case DIAMOND_PICKAXE: + case GOLDEN_PICKAXE: + case IRON_PICKAXE: + case STONE_PICKAXE: + case WOODEN_PICKAXE: + case DIAMOND_SHOVEL: + case GOLDEN_SHOVEL: + case IRON_SHOVEL: + case STONE_SHOVEL: + case WOODEN_SHOVEL: + case DIAMOND_AXE: + case GOLDEN_AXE: + case IRON_AXE: + case STONE_AXE: + case WOODEN_AXE: + case SHEARS: + case FISHING_ROD: + return true; + default: + break; + } + return false; + } + + public static boolean isPotted(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isPotted(); + } + + public boolean isPotted() { + switch (this) { + case POTTED_ACACIA_SAPLING: + case POTTED_ALLIUM: + case POTTED_AZURE_BLUET: + case POTTED_BIRCH_SAPLING: + case POTTED_BLUE_ORCHID: + case POTTED_BROWN_MUSHROOM: + case POTTED_CACTUS: + case POTTED_DANDELION: + case POTTED_DARK_OAK_SAPLING: + case POTTED_DEAD_BUSH: + case POTTED_FERN: + case POTTED_JUNGLE_SAPLING: + case POTTED_OAK_SAPLING: + case POTTED_ORANGE_TULIP: + case POTTED_OXEYE_DAISY: + case POTTED_PINK_TULIP: + case POTTED_POPPY: + case POTTED_RED_MUSHROOM: + case POTTED_RED_TULIP: + case POTTED_SPRUCE_SAPLING: + case POTTED_WHITE_TULIP: + return true; + default: + break; + } + return false; + } + public static boolean isAir(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2334,6 +2947,25 @@ public boolean isAir() { return false; } + public static boolean isAnvil(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isAnvil(); + } + + public boolean isAnvil() { + switch (this) { + case ANVIL: + case CHIPPED_ANVIL: + case DAMAGED_ANVIL: + return true; + default: + break; + } + return false; + } + public static boolean isDoor(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2345,15 +2977,24 @@ public boolean isDoor() { switch (this) { case OAK_DOOR: case IRON_DOOR: + case LEGACY_SPRUCE_DOOR: case LEGACY_BIRCH_DOOR: case LEGACY_JUNGLE_DOOR: case LEGACY_ACACIA_DOOR: case LEGACY_DARK_OAK_DOOR: case LEGACY_WOODEN_DOOR_BLOCK: + +// case SPRUCE_DOOR_ITEM: +// case BIRCH_DOOR_ITEM: +// case JUNGLE_DOOR_ITEM: +// case ACACIA_DOOR_ITEM: +// case DARK_OAK_DOOR_ITEM: +// case WOODEN_DOOR: case ACACIA_DOOR: case BIRCH_DOOR: case DARK_OAK_DOOR: +// case IRON_DOOR_BLOCK: case JUNGLE_DOOR: case SPRUCE_DOOR: return true; @@ -2386,6 +3027,146 @@ public boolean isGate() { return false; } + public static boolean isFence(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isFence(); + } + + public boolean isFence() { + switch (this) { + case ACACIA_FENCE: + case BIRCH_FENCE: + case DARK_OAK_FENCE: + case JUNGLE_FENCE: + case NETHER_BRICK_FENCE: + case OAK_FENCE: + case SPRUCE_FENCE: + return true; + default: + break; + } + return false; + } + + public static boolean isRail(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isRail(); + } + + public boolean isRail() { + switch (this) { + case POWERED_RAIL: + case RAIL: + case ACTIVATOR_RAIL: + case DETECTOR_RAIL: + return true; + default: + break; + } + return false; + } + + public static boolean isGlassPane(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isGlassPane(); + } + + public boolean isGlassPane() { + switch (this) { + case BLACK_STAINED_GLASS_PANE: + case BLUE_STAINED_GLASS_PANE: + case BROWN_STAINED_GLASS_PANE: + case CYAN_STAINED_GLASS_PANE: + case GRAY_STAINED_GLASS_PANE: + case GREEN_STAINED_GLASS_PANE: + case LIGHT_BLUE_STAINED_GLASS_PANE: + case LIGHT_GRAY_STAINED_GLASS_PANE: + case LIME_STAINED_GLASS_PANE: + case MAGENTA_STAINED_GLASS_PANE: + case ORANGE_STAINED_GLASS_PANE: + case PINK_STAINED_GLASS_PANE: + case PURPLE_STAINED_GLASS_PANE: + case RED_STAINED_GLASS_PANE: + case WHITE_STAINED_GLASS_PANE: + case YELLOW_STAINED_GLASS_PANE: + case GLASS_PANE: + return true; + default: + break; + } + return false; + } + + public static boolean isSign(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isSign(); + } + + public boolean isSign() { + switch (this) { + case SIGN: + case WALL_SIGN: + case LEGACY_SIGN_POST: + + case ACACIA_SIGN: + case ACACIA_WALL_SIGN: + case BIRCH_SIGN: + case BIRCH_WALL_SIGN: + case DARK_OAK_SIGN: + case DARK_OAK_WALL_SIGN: + case JUNGLE_SIGN: + case JUNGLE_WALL_SIGN: + case OAK_SIGN: + case OAK_WALL_SIGN: + case SPRUCE_SIGN: + case SPRUCE_WALL_SIGN: + + return true; + default: + break; + } + return false; + } + + public static boolean isWall(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isWall(); + } + + public boolean isWall() { + switch (this) { + case COBBLESTONE_WALL: + case MOSSY_COBBLESTONE_WALL: + + case ANDESITE_WALL: + case BRICK_WALL: + case DIORITE_WALL: + case END_STONE_BRICK_WALL: + case GRANITE_WALL: + case MOSSY_STONE_BRICK_WALL: + case NETHER_BRICK_WALL: + case PRISMARINE_WALL: + case RED_NETHER_BRICK_WALL: + case RED_SANDSTONE_WALL: + case SANDSTONE_WALL: + case STONE_BRICK_WALL: + return true; + default: + break; + } + return false; + } + public static boolean isTrapDoor(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2458,6 +3239,14 @@ public boolean isDye() { case MAGENTA_DYE: case ORANGE_DYE: case BONE_MEAL: + + case BLACK_DYE: + case BLUE_DYE: + case BROWN_DYE: + case GREEN_DYE: + case RED_DYE: + case WHITE_DYE: + case YELLOW_DYE: return true; default: break; @@ -2503,6 +3292,23 @@ public boolean isSlab() { case SPRUCE_SLAB: case STONE_BRICK_SLAB: case STONE_SLAB: + + case ANDESITE_SLAB: + case CUT_RED_SANDSTONE_SLAB: + case CUT_SANDSTONE_SLAB: + case DIORITE_SLAB: + case END_STONE_BRICK_SLAB: + case GRANITE_SLAB: + case MOSSY_COBBLESTONE_SLAB: + case MOSSY_STONE_BRICK_SLAB: + case POLISHED_ANDESITE_SLAB: + case POLISHED_DIORITE_SLAB: + case POLISHED_GRANITE_SLAB: + case RED_NETHER_BRICK_SLAB: + case SMOOTH_QUARTZ_SLAB: + case SMOOTH_RED_SANDSTONE_SLAB: + case SMOOTH_SANDSTONE_SLAB: + case SMOOTH_STONE_SLAB: return true; default: break; @@ -2613,10 +3419,4 @@ public void setMojangName(String mojangName) { } } - public enum SlabType { - TOP, - BOTTOM, - DOUBLE, - NOTSLAB; - } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 40bb5fe26..57ce89968 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -57,12 +57,11 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; -import com.bekvon.bukkit.cmiLib.ItemReflection; import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.ItemReflection; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; -import com.bekvon.bukkit.residence.containers.ELMessageType; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.StuckInfo; @@ -82,7 +81,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -1009,7 +1007,7 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { CMIMaterial cmat = CMIMaterial.get(mat); if (cmat != null) { - if (cmat.isPottedFlower()) { + if (cmat.isPotted()) { return true; } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 082861a0e..8cc517489 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -204,7 +204,7 @@ public static void initValidFlags() { if (one.isBed() && one.getMaterial() != null) matUseFlagList.put(one.getMaterial(), Flags.bed); - if (one.isPottedFlower() && one.getMaterial() != null) + if (one.isPotted() && one.getMaterial() != null) matUseFlagList.put(one.getMaterial(), Flags.flowerpot); } From e30d1de888b6b8648e3a7a14609d71e438899e52 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 1 May 2019 10:27:10 +0300 Subject: [PATCH 0596/1142] Fix for tool command showing selection tool as info tool --- src/com/bekvon/bukkit/residence/commands/tool.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index 5a5c8f986..ebeaa0b2b 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -24,7 +24,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.General_Separator); plugin.msg(player, lm.Select_Tool, plugin.getConfigManager().getSelectionTool().getName()); - plugin.msg(player, lm.General_InfoTool, plugin.getConfigManager().getSelectionTool().getName()); + plugin.msg(player, lm.General_InfoTool, plugin.getConfigManager().getInfoTool().getName()); plugin.msg(player, lm.General_Separator); return true; } From bea5d73b82ae0c133868bd332862a1ce3f7f123a Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 1 May 2019 10:43:09 +0300 Subject: [PATCH 0597/1142] Lets fix #getid method which can be used anymore --- .../bekvon/bukkit/cmiLib/ItemReflection.java | 46 - .../bukkit/residence/ConfigManager.java | 49 +- .../bukkit/residence/commands/create.java | 2 +- .../listeners/ResidencePlayerListener.java | 12 +- .../protection/ResidenceManager.java | 3 +- .../bukkit/residence/text/help/HelpEntry.java | 8 +- .../residence/utils/ParticleEffects.java | 1601 ----------------- 7 files changed, 51 insertions(+), 1670 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/utils/ParticleEffects.java diff --git a/src/com/bekvon/bukkit/cmiLib/ItemReflection.java b/src/com/bekvon/bukkit/cmiLib/ItemReflection.java index b189ab801..89e46d4bd 100644 --- a/src/com/bekvon/bukkit/cmiLib/ItemReflection.java +++ b/src/com/bekvon/bukkit/cmiLib/ItemReflection.java @@ -93,52 +93,6 @@ public static String getItemMinecraftName(ItemStack item) { } } - public static String getItemRealName(ItemStack item) { - try { - Object nmsStack = asNMSCopy(item); - Method itemMeth = Item.getMethod("getById", int.class); - Object res = itemMeth.invoke(Item, item.getType().getId()); - - String ff = "b"; - switch (Version.getCurrent()) { - case v1_10_R1: - case v1_9_R1: - case v1_9_R2: - case v1_8_R1: - case v1_8_R3: - case v1_8_R2: - ff = "a"; - break; - case v1_11_R1: - case v1_12_R1: - ff = "b"; - break; - case v1_13_R2: - case v1_13_R1: - case v1_14_R2: - case v1_14_R1: - case v1_15_R2: - case v1_15_R1: - ff = "h"; - break; - case v1_7_R1: - case v1_7_R2: - case v1_7_R3: - case v1_7_R4: - ff = "n"; - break; - default: - break; - } - - Method meth2 = res.getClass().getMethod(ff, IStack); - Object name = meth2.invoke(res, nmsStack); - return name.toString(); - } catch (Exception e) { - return item != null ? item.getType().name() : ""; - } - } - public String getItemMinecraftNamePath(ItemStack item) { try { Object nmsStack = asNMSCopy(item); diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 9e7dfce3b..337090d18 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -182,10 +182,12 @@ public class ConfigManager { protected int TNTExplodeBelowLevel; protected boolean CreeperExplodeBelow; protected int CreeperExplodeBelowLevel; - protected List customContainers; - protected List customBothClick; - protected List customRightClick; - protected List CleanBlocks; + + protected List customContainers; + protected List customBothClick; + protected List customRightClick; + protected List CleanBlocks; + protected List NoFlowWorlds; protected List AutoCleanUpWorlds; protected List NoPlaceWorlds; @@ -750,7 +752,13 @@ public void UpdateConfigFile() { c.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); CleanLevel = c.get("Global.AntiGreef.ResCleaning.Level", 63); c.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); - CleanBlocks = c.getIntList("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(8, 9, 10, 11)); + List pls = c.getList("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(CMIMaterial.WATER.toString(), CMIMaterial.LAVA.toString())); + for (Object one : pls) { + CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); + if (mat != CMIMaterial.NONE) + CleanBlocks.add(mat); + } + CleanWorlds = c.get("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName)); c.addComment("Global.AntiGreef.Flags.Prevent", @@ -925,9 +933,26 @@ public void UpdateConfigFile() { c.addComment("Global.CustomContainers", "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); - customContainers = c.getIntList("Global.CustomContainers", new ArrayList()); - customBothClick = c.getIntList("Global.CustomBothClick", new ArrayList()); - customRightClick = c.getIntList("Global.CustomRightClick", new ArrayList()); + pls = c.getList("Global.CustomContainers", new ArrayList()); + for (Object one : pls) { + CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); + if (mat != CMIMaterial.NONE) + customContainers.add(mat); + } + + pls = c.getList("Global.CustomBothClick", new ArrayList()); + for (Object one : pls) { + CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); + if (mat != CMIMaterial.NONE) + customBothClick.add(mat); + } + + pls = c.getList("Global.CustomRightClick", new ArrayList()); + for (Object one : pls) { + CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); + if (mat != CMIMaterial.NONE) + customRightClick.add(mat); + } c.addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundaries"); useVisualizer = c.get("Global.Visualizer.Use", true); @@ -1718,19 +1743,19 @@ public boolean isOfflineMode() { return OfflineMode; } - public List getCustomContainers() { + public List getCustomContainers() { return customContainers; } - public List getCustomBothClick() { + public List getCustomBothClick() { return customBothClick; } - public List getCustomRightClick() { + public List getCustomRightClick() { return customRightClick; } - public List getCleanBlocks() { + public List getCleanBlocks() { return CleanBlocks; } diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 7b1451122..b92ef2d5e 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -26,7 +26,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } if (plugin.getWorldEdit() != null) { - if (plugin.getWorldEdit().getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTool().getId()) { + if (plugin.getWorldEditTool() == plugin.getConfigManager().getSelectionTool()) { plugin.getSelectionManager().worldEdit(player); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 57ce89968..64a223b53 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -975,7 +975,7 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { @SuppressWarnings("deprecation") private boolean isContainer(Material mat, Block block) { return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container) - || plugin.getConfigManager().getCustomContainers().contains(block.getType().getId()); + || plugin.getConfigManager().getCustomContainers().contains(CMIMaterial.get(block)); } @SuppressWarnings("deprecation") @@ -1012,7 +1012,7 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { } } - return plugin.getConfigManager().getCustomRightClick().contains(Integer.valueOf(block.getType().getId())); + return plugin.getConfigManager().getCustomRightClick().contains(CMIMaterial.get(block)); } public boolean isCanUseEntity_BothClick(Material mat, Block block) { @@ -1034,7 +1034,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { case DRAGON_EGG: return true; default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getType().getId())); + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(CMIMaterial.get(block)); } } @@ -1357,7 +1357,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (!hasContainerBypass) - if (plugin.getConfigManager().getCustomContainers().contains(blockM.getId())) { + if (plugin.getConfigManager().getCustomContainers().contains(blockM)) { if (!perms.playerHas(player, Flags.container, hasuse)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.container); @@ -1366,14 +1366,14 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (!hasUseBypass) { - if (plugin.getConfigManager().getCustomBothClick().contains(blockM.getId())) { + if (plugin.getConfigManager().getCustomBothClick().contains(blockM)) { if (!hasuse) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.use); return; } } - if (plugin.getConfigManager().getCustomRightClick().contains(blockM.getId()) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (plugin.getConfigManager().getCustomRightClick().contains(blockM) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (!hasuse) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.use); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 6653d8900..b98753606 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -22,6 +22,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.Zrips.CMI.Modules.CmiItems.ItemManager.CMIMaterial; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; @@ -544,7 +545,7 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole temploc.setZ(z); if (!temploc.getChunk().isLoaded()) temploc.getChunk().load(); - if (plugin.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getType().getId())) { + if (plugin.getConfigManager().getCleanBlocks().contains(CMIMaterial.get(temploc.getBlock()))) { temploc.getBlock().setType(Material.AIR); } } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 02f4db26d..c9b035368 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.containers.Flags; @@ -403,9 +404,10 @@ public Set getSubCommands(CommandSender sender, String[] args) { } break; case "[materialId]": - for (Material one : Material.values()) { - subCommands.add(String.valueOf(one.getId())); - } + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) + for (Material one : Material.values()) { + subCommands.add(String.valueOf(one.getId())); + } break; case "[worldname]": for (World one : Bukkit.getWorlds()) { diff --git a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java b/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java deleted file mode 100644 index b0690afae..000000000 --- a/src/com/bekvon/bukkit/residence/utils/ParticleEffects.java +++ /dev/null @@ -1,1601 +0,0 @@ -package com.bekvon.bukkit.residence.utils; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; -import com.bekvon.bukkit.residence.utils.ReflectionUtils.PackageType; - -/** - * ParticleEffect Library - *

- * This library was created by @DarkBlade12 and allows you to display all Minecraft particle effects on a Bukkit server - *

- * You are welcome to use it, modify it and redistribute it under the following conditions: - *

    - *
  • Don't claim this class as your own - *
  • Don't remove this disclaimer - *
- *

- * Special thanks: - *

    - *
  • @microgeek (original idea, names and packet parameters) - *
  • @ShadyPotato (1.8 names, ids and packet parameters) - *
  • @RingOfStorms (particle behavior) - *
  • @Cybermaxke (particle behavior) - *
- *

- * It would be nice if you provide credit to me if you use this class in a published project - * - * @author DarkBlade12 - * @version 1.7 - */ -public enum ParticleEffects { - /** - * A particle effect which is displayed by exploding tnt and creepers: - *

    - *
  • It looks like a white cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - EXPLOSION_NORMAL("explode", 0, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by exploding ghast fireballs and wither skulls: - *
    - *
  • It looks like a gray ball which is fading away - *
  • The speed value slightly influences the size of this particle effect - *
- */ - EXPLOSION_LARGE("largeexplode", 1, -1), - /** - * A particle effect which is displayed by exploding tnt and creepers: - *
    - *
  • It looks like a crowd of gray balls which are fading away - *
  • The speed value has no influence on this particle effect - *
- */ - EXPLOSION_HUGE("hugeexplosion", 2, -1), - /** - * A particle effect which is displayed by launching fireworks: - *
    - *
  • It looks like a white star which is sparkling - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - FIREWORKS_SPARK("fireworksSpark", 3, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by swimming entities and arrows in water: - *
    - *
  • It looks like a bubble - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - WATER_BUBBLE("bubble", 4, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_WATER), - /** - * A particle effect which is displayed by swimming entities and shaking wolves: - *
    - *
  • It looks like a blue drop - *
  • The speed value has no influence on this particle effect - *
- */ - WATER_SPLASH("splash", 5, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed on water when fishing: - *
    - *
  • It looks like a blue droplet - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - WATER_WAKE("wake", 6, 7, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by water: - *
    - *
  • It looks like a tiny blue square - *
  • The speed value has no influence on this particle effect - *
- */ - SUSPENDED("suspended", 7, -1, ParticleProperty.REQUIRES_WATER), - /** - * A particle effect which is displayed by air when close to bedrock and the in the void: - *
    - *
  • It looks like a tiny gray square - *
  • The speed value has no influence on this particle effect - *
- */ - SUSPENDED_DEPTH("depthSuspend", 8, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed when landing a critical hit and by arrows: - *
    - *
  • It looks like a light brown cross - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - CRIT("crit", 9, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed when landing a hit with an enchanted weapon: - *
    - *
  • It looks like a cyan star - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - CRIT_MAGIC("magicCrit", 10, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by primed tnt, torches, droppers, dispensers, end portals, brewing stands and monster spawners: - *
    - *
  • It looks like a little gray cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - SMOKE_NORMAL("smoke", 11, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by fire, minecarts with furnace and blazes: - *
    - *
  • It looks like a large gray cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - SMOKE_LARGE("largesmoke", 12, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed when splash potions or bottles o' enchanting hit something: - *
    - *
  • It looks like a white swirl - *
  • The speed value causes the particle to only move upwards when set to 0 - *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 - *
- */ - SPELL("spell", 13, -1), - /** - * A particle effect which is displayed when instant splash potions hit something: - *
    - *
  • It looks like a white cross - *
  • The speed value causes the particle to only move upwards when set to 0 - *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 - *
- */ - SPELL_INSTANT("instantSpell", 14, -1), - /** - * A particle effect which is displayed by entities with active potion effects: - *
    - *
  • It looks like a colored swirl - *
  • The speed value causes the particle to be colored black when set to 0 - *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed - *
- */ - SPELL_MOB("mobSpell", 15, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed by entities with active potion effects applied through a beacon: - *
    - *
  • It looks like a transparent colored swirl - *
  • The speed value causes the particle to be always colored black when set to 0 - *
  • The particle color gets lighter when increasing the speed and darker when decreasing the speed - *
- */ - SPELL_MOB_AMBIENT("mobSpellAmbient", 16, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed by witches: - *
    - *
  • It looks like a purple cross - *
  • The speed value causes the particle to only move upwards when set to 0 - *
  • Only the motion on the y-axis can be controlled, the motion on the x- and z-axis are multiplied by 0.1 when setting the values to 0 - *
- */ - SPELL_WITCH("witchMagic", 17, -1), - /** - * A particle effect which is displayed by blocks beneath a water source: - *
    - *
  • It looks like a blue drip - *
  • The speed value has no influence on this particle effect - *
- */ - DRIP_WATER("dripWater", 18, -1), - /** - * A particle effect which is displayed by blocks beneath a lava source: - *
    - *
  • It looks like an orange drip - *
  • The speed value has no influence on this particle effect - *
- */ - DRIP_LAVA("dripLava", 19, -1), - /** - * A particle effect which is displayed when attacking a villager in a village: - *
    - *
  • It looks like a cracked gray heart - *
  • The speed value has no influence on this particle effect - *
- */ - VILLAGER_ANGRY("angryVillager", 20, -1), - /** - * A particle effect which is displayed when using bone meal and trading with a villager in a village: - *
    - *
  • It looks like a green star - *
  • The speed value has no influence on this particle effect - *
- */ - VILLAGER_HAPPY("happyVillager", 21, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by mycelium: - *
    - *
  • It looks like a tiny gray square - *
  • The speed value has no influence on this particle effect - *
- */ - TOWN_AURA("townaura", 22, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by note blocks: - *
    - *
  • It looks like a colored note - *
  • The speed value causes the particle to be colored green when set to 0 - *
- */ - NOTE("note", 23, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed by nether portals, endermen, ender pearls, eyes of ender, ender chests and dragon eggs: - *
    - *
  • It looks like a purple cloud - *
  • The speed value influences the spread of this particle effect - *
- */ - PORTAL("portal", 24, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by enchantment tables which are nearby bookshelves: - *
    - *
  • It looks like a cryptic white letter - *
  • The speed value influences the spread of this particle effect - *
- */ - ENCHANTMENT_TABLE("enchantmenttable", 25, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by torches, active furnaces, magma cubes and monster spawners: - *
    - *
  • It looks like a tiny flame - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - FLAME("flame", 26, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by lava: - *
    - *
  • It looks like a spark - *
  • The speed value has no influence on this particle effect - *
- */ - LAVA("lava", 27, -1), - /** - * A particle effect which is currently unused: - *
    - *
  • It looks like a transparent gray square - *
  • The speed value has no influence on this particle effect - *
- */ - FOOTSTEP("footstep", 28, -1), - /** - * A particle effect which is displayed when a mob dies: - *
    - *
  • It looks like a large white cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - CLOUD("cloud", 29, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by redstone ore, powered redstone, redstone torches and redstone repeaters: - *
    - *
  • It looks like a tiny colored cloud - *
  • The speed value causes the particle to be colored red when set to 0 - *
- */ - REDSTONE("reddust", 30, -1, ParticleProperty.COLORABLE), - /** - * A particle effect which is displayed when snowballs hit a block: - *
    - *
  • It looks like a little piece with the snowball texture - *
  • The speed value has no influence on this particle effect - *
- */ - SNOWBALL("snowballpoof", 31, -1), - /** - * A particle effect which is currently unused: - *
    - *
  • It looks like a tiny white cloud - *
  • The speed value influences the velocity at which the particle flies off - *
- */ - SNOW_SHOVEL("snowshovel", 32, -1, ParticleProperty.DIRECTIONAL), - /** - * A particle effect which is displayed by slimes: - *
    - *
  • It looks like a tiny part of the slimeball icon - *
  • The speed value has no influence on this particle effect - *
- */ - SLIME("slime", 33, -1), - /** - * A particle effect which is displayed when breeding and taming animals: - *
    - *
  • It looks like a red heart - *
  • The speed value has no influence on this particle effect - *
- */ - HEART("heart", 34, -1), - /** - * A particle effect which is displayed by barriers: - *
    - *
  • It looks like a red box with a slash through it - *
  • The speed value has no influence on this particle effect - *
- */ - BARRIER("barrier", 35, 8), - /** - * A particle effect which is displayed when breaking a tool or eggs hit a block: - *
    - *
  • It looks like a little piece with an item texture - *
- */ - ITEM_CRACK("iconcrack", 36, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), - /** - * A particle effect which is displayed when breaking blocks or sprinting: - *
    - *
  • It looks like a little piece with a block texture - *
  • The speed value has no influence on this particle effect - *
- */ - BLOCK_CRACK("blockcrack", 37, -1, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), - /** - * A particle effect which is displayed when falling: - *
    - *
  • It looks like a little piece with a block texture - *
- */ - BLOCK_DUST("blockdust", 38, 7, ParticleProperty.DIRECTIONAL, ParticleProperty.REQUIRES_DATA), - /** - * A particle effect which is displayed when rain hits the ground: - *
    - *
  • It looks like a blue droplet - *
  • The speed value has no influence on this particle effect - *
- */ - WATER_DROP("droplet", 39, 8), - /** - * A particle effect which is currently unused: - *
    - *
  • It has no visual effect - *
- */ - ITEM_TAKE("take", 40, 8), - /** - * A particle effect which is displayed by elder guardians: - *
    - *
  • It looks like the shape of the elder guardian - *
  • The speed value has no influence on this particle effect - *
  • The offset values have no influence on this particle effect - *
- */ - MOB_APPEARANCE("mobappearance", 41, 8); - - private static final Map NAME_MAP = new HashMap(); - private static final Map ID_MAP = new HashMap(); - private final String name; - private final int id; - private final int requiredVersion; - private final List properties; - - // Initialize map for quick name and id lookup - static { - for (ParticleEffects effect : values()) { - NAME_MAP.put(effect.name, effect); - ID_MAP.put(effect.id, effect); - } - } - - /** - * Construct a new particle effect - * - * @param name Name of this particle effect - * @param id Id of this particle effect - * @param requiredVersion Version which is required (1.x) - * @param properties Properties of this particle effect - */ - private ParticleEffects(String name, int id, int requiredVersion, ParticleProperty... properties) { - this.name = name; - this.id = id; - this.requiredVersion = requiredVersion; - this.properties = Arrays.asList(properties); - } - - /** - * Returns the name of this particle effect - * - * @return The name - */ - public String getName() { - return name; - } - - /** - * Returns the id of this particle effect - * - * @return The id - */ - public int getId() { - return id; - } - - /** - * Returns the required version for this particle effect (1.x) - * - * @return The required version - */ - public int getRequiredVersion() { - return requiredVersion; - } - - /** - * Determine if this particle effect has a specific property - * - * @return Whether it has the property or not - */ - public boolean hasProperty(ParticleProperty property) { - return properties.contains(property); - } - - /** - * Determine if this particle effect is supported by your current server version - * - * @return Whether the particle effect is supported or not - */ - public boolean isSupported() { - if (requiredVersion == -1) { - return true; - } - return ParticlePacket.getVersion() >= requiredVersion; - } - - /** - * Returns the particle effect with the given name - * - * @param name Name of the particle effect - * @return The particle effect - */ - public static ParticleEffects fromName(String name) { - for (Entry entry : NAME_MAP.entrySet()) { - if (!entry.getKey().equalsIgnoreCase(name)) { - continue; - } - return entry.getValue(); - } - return null; - } - - /** - * Returns the particle effect with the given id - * - * @param id Id of the particle effect - * @return The particle effect - */ - public static ParticleEffects fromId(int id) { - for (Entry entry : ID_MAP.entrySet()) { - if (entry.getKey() != id) { - continue; - } - return entry.getValue(); - } - return null; - } - - /** - * Determine if water is at a certain location - * - * @param location Location to check - * @return Whether water is at this location or not - */ - private static boolean isWater(Location location) { - CMIMaterial material = CMIMaterial.get(location.getBlock()); - return material.equals(CMIMaterial.WATER); - } - - /** - * Determine if the distance between @param location and one of the players exceeds 256 - * - * @param location Location to check - * @return Whether the distance exceeds 256 or not - */ - private static boolean isLongDistance(Location location, List players) { - for (Player player : players) { - if (player.getLocation().distanceSquared(location) < 65536) { - continue; - } - return true; - } - return false; - } - - /** - * Determine if the data type for a particle effect is correct - * - * @param effect Particle effect - * @param data Particle data - * @return Whether the data type is correct or not - */ - private static boolean isDataCorrect(ParticleEffects effect, ParticleData data) { - return ((effect == BLOCK_CRACK || effect == BLOCK_DUST) && data instanceof BlockData) || (effect == ITEM_CRACK && data instanceof ItemData); - } - - /** - * Determine if the color type for a particle effect is correct - * - * @param effect Particle effect - * @param color Particle color - * @return Whether the color type is correct or not - */ - private static boolean isColorCorrect(ParticleEffects effect, ParticleColor color) { - return ((effect == SPELL_MOB || effect == SPELL_MOB_AMBIENT || effect == REDSTONE) && color instanceof OrdinaryColor) || (effect == NOTE - && color instanceof NoteColor); - } - - /** - * Displays a particle effect which is only visible for all players within a certain range in the world of @param center - * - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect requires water and none is at the center location - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) throws ParticleVersionException, - ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, null).sendTo(center, range); - } - - /** - * Displays a particle effect which is only visible for the specified players - * - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect requires water and none is at the center location - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) throws ParticleVersionException, - ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), null).sendTo(center, players); - } - - /** - * Displays a particle effect which is only visible for the specified players - * - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect requires water and none is at the center location - * @see #display(float, float, float, float, int, Location, List) - */ - public void display(float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) throws ParticleVersionException, - ParticleDataException, IllegalArgumentException { - display(offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); - } - - /** - * Displays a single particle which flies into a determined direction and is only visible for all players within a certain range in the world of @param center - * - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location - * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException, IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (!hasProperty(ParticleProperty.DIRECTIONAL)) { - throw new IllegalArgumentException("This particle effect is not directional"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, direction, speed, range > 256, null).sendTo(center, range); - } - - /** - * Displays a single particle which flies into a determined direction and is only visible for the specified players - * - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location - * @see ParticlePacket#ParticlePacket(ParticleEffects, Vector, float, boolean, ParticleData) - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException, - IllegalArgumentException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect requires additional data"); - } - if (!hasProperty(ParticleProperty.DIRECTIONAL)) { - throw new IllegalArgumentException("This particle effect is not directional"); - } - if (hasProperty(ParticleProperty.REQUIRES_WATER) && !isWater(center)) { - throw new IllegalArgumentException("There is no water at the center location"); - } - new ParticlePacket(this, direction, speed, isLongDistance(center, players), null).sendTo(center, players); - } - - /** - * Displays a single particle which flies into a determined direction and is only visible for the specified players - * - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect requires additional data - * @throws IllegalArgumentException If the particle effect is not directional or if it requires water and none is at the center location - * @see #display(Vector, float, Location, List) - */ - public void display(Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException, - IllegalArgumentException { - display(direction, speed, center, Arrays.asList(players)); - } - - /** - * Displays a single particle which is colored and only visible for all players within a certain range in the world of @param center - * - * @param color Color of the particle - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect - * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(ParticleColor color, Location center, double range) throws ParticleVersionException, ParticleColorException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.COLORABLE)) { - throw new ParticleColorException("This particle effect is not colorable"); - } - if (!isColorCorrect(this, color)) { - throw new ParticleColorException("The particle color type is incorrect"); - } - new ParticlePacket(this, color, range > 256).sendTo(center, range); - } - - /** - * Displays a single particle which is colored and only visible for the specified players - * - * @param color Color of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect - * @see ParticlePacket#ParticlePacket(ParticleEffects, ParticleColor, boolean) - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(ParticleColor color, Location center, List players) throws ParticleVersionException, ParticleColorException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.COLORABLE)) { - throw new ParticleColorException("This particle effect is not colorable"); - } - if (!isColorCorrect(this, color)) { - throw new ParticleColorException("The particle color type is incorrect"); - } - new ParticlePacket(this, color, isLongDistance(center, players)).sendTo(center, players); - } - - /** - * Displays a single particle which is colored and only visible for the specified players - * - * @param color Color of the particle - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleColorException If the particle effect is not colorable or the color type is incorrect - * @see #display(ParticleColor, Location, List) - */ - public void display(ParticleColor color, Location center, Player... players) throws ParticleVersionException, ParticleColorException { - display(color, center, Arrays.asList(players)); - } - - /** - * Displays a particle effect which requires additional data and is only visible for all players within a certain range in the world of @param center - * - * @param data Data of the effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, double range) - throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, range > 256, data).sendTo(center, range); - } - - /** - * Displays a particle effect which requires additional data and is only visible for the specified players - * - * @param data Data of the effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, List players) - throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, offsetX, offsetY, offsetZ, speed, amount, isLongDistance(center, players), data).sendTo(center, players); - } - - /** - * Displays a particle effect which requires additional data and is only visible for the specified players - * - * @param data Data of the effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see #display(ParticleData, float, float, float, float, int, Location, List) - */ - public void display(ParticleData data, float offsetX, float offsetY, float offsetZ, float speed, int amount, Location center, Player... players) - throws ParticleVersionException, ParticleDataException { - display(data, offsetX, offsetY, offsetZ, speed, amount, center, Arrays.asList(players)); - } - - /** - * Displays a single particle which requires additional data that flies into a determined direction and is only visible for all players within a certain range in the world of @param center - * - * @param data Data of the effect - * @param direction Direction of the particle - * @param speed Display speed of the particles - * @param center Center location of the effect - * @param range Range of the visibility - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, double) - */ - public void display(ParticleData data, Vector direction, float speed, Location center, double range) throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, direction, speed, range > 256, data).sendTo(center, range); - } - - /** - * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players - * - * @param data Data of the effect - * @param direction Direction of the particle - * @param speed Display speed of the particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see ParticlePacket - * @see ParticlePacket#sendTo(Location, List) - */ - public void display(ParticleData data, Vector direction, float speed, Location center, List players) throws ParticleVersionException, ParticleDataException { - if (!isSupported()) { - throw new ParticleVersionException("This particle effect is not supported by your server version"); - } - if (!hasProperty(ParticleProperty.REQUIRES_DATA)) { - throw new ParticleDataException("This particle effect does not require additional data"); - } - if (!isDataCorrect(this, data)) { - throw new ParticleDataException("The particle data type is incorrect"); - } - new ParticlePacket(this, direction, speed, isLongDistance(center, players), data).sendTo(center, players); - } - - /** - * Displays a single particle which requires additional data that flies into a determined direction and is only visible for the specified players - * - * @param data Data of the effect - * @param direction Direction of the particle - * @param speed Display speed of the particles - * @param center Center location of the effect - * @param players Receivers of the effect - * @throws ParticleVersionException If the particle effect is not supported by the server version - * @throws ParticleDataException If the particle effect does not require additional data or if the data type is incorrect - * @see #display(ParticleData, Vector, float, Location, List) - */ - public void display(ParticleData data, Vector direction, float speed, Location center, Player... players) throws ParticleVersionException, ParticleDataException { - display(data, direction, speed, center, Arrays.asList(players)); - } - - /** - * Represents the property of a particle effect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - public static enum ParticleProperty { - /** - * The particle effect requires water to be displayed - */ - REQUIRES_WATER, - /** - * The particle effect requires block or item data to be displayed - */ - REQUIRES_DATA, - /** - * The particle effect uses the offsets as direction values - */ - DIRECTIONAL, - /** - * The particle effect uses the offsets as color values - */ - COLORABLE; - } - - /** - * Represents the particle data for effects like {@link ParticleEffects#ITEM_CRACK}, {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - public static abstract class ParticleData { - private final Material material; - private final byte data; - private final int[] packetData; - - /** - * Construct a new particle data - * - * @param material Material of the item/block - * @param data Data value of the item/block - */ - @SuppressWarnings("deprecation") - public ParticleData(Material material, byte data) { - this.material = material; - this.data = data; - this.packetData = new int[] { material.getId(), data }; - } - - /** - * Returns the material of this data - * - * @return The material - */ - public Material getMaterial() { - return material; - } - - /** - * Returns the data value of this data - * - * @return The data value - */ - public byte getData() { - return data; - } - - /** - * Returns the data as an int array for packet construction - * - * @return The data for the packet - */ - public int[] getPacketData() { - return packetData; - } - - /** - * Returns the data as a string for pre 1.8 versions - * - * @return The data string for the packet - */ - public String getPacketDataString() { - return "_" + packetData[0] + "_" + packetData[1]; - } - } - - /** - * Represents the item data for the {@link ParticleEffects#ITEM_CRACK} effect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - public static final class ItemData extends ParticleData { - /** - * Construct a new item data - * - * @param material Material of the item - * @param data Data value of the item - * @see ParticleData#ParticleData(Material, byte) - */ - public ItemData(Material material, byte data) { - super(material, data); - } - } - - /** - * Represents the block data for the {@link ParticleEffects#BLOCK_CRACK} and {@link ParticleEffects#BLOCK_DUST} effects - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - public static final class BlockData extends ParticleData { - /** - * Construct a new block data - * - * @param material Material of the block - * @param data Data value of the block - * @throws IllegalArgumentException If the material is not a block - * @see ParticleData#ParticleData(Material, byte) - */ - public BlockData(Material material, byte data) throws IllegalArgumentException { - super(material, data); - if (!material.isBlock()) { - throw new IllegalArgumentException("The material is not a block"); - } - } - } - - /** - * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT}, {@link ParticleEffects#REDSTONE} and {@link ParticleEffects#NOTE} - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - public static abstract class ParticleColor { - /** - * Returns the value for the offsetX field - * - * @return The offsetX value - */ - public abstract float getValueX(); - - /** - * Returns the value for the offsetY field - * - * @return The offsetY value - */ - public abstract float getValueY(); - - /** - * Returns the value for the offsetZ field - * - * @return The offsetZ value - */ - public abstract float getValueZ(); - } - - /** - * Represents the color for effects like {@link ParticleEffects#SPELL_MOB}, {@link ParticleEffects#SPELL_MOB_AMBIENT} and {@link ParticleEffects#NOTE} - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - public static final class OrdinaryColor extends ParticleColor { - private final int red; - private final int green; - private final int blue; - - /** - * Construct a new ordinary color - * - * @param red Red value of the RGB format - * @param green Green value of the RGB format - * @param blue Blue value of the RGB format - * @throws IllegalArgumentException If one of the values is lower than 0 or higher than 255 - */ - public OrdinaryColor(int red, int green, int blue) throws IllegalArgumentException { - if (red < 0) { - throw new IllegalArgumentException("The red value is lower than 0"); - } - if (red > 255) { - throw new IllegalArgumentException("The red value is higher than 255"); - } - this.red = red; - if (green < 0) { - throw new IllegalArgumentException("The green value is lower than 0"); - } - if (green > 255) { - throw new IllegalArgumentException("The green value is higher than 255"); - } - this.green = green; - if (blue < 0) { - throw new IllegalArgumentException("The blue value is lower than 0"); - } - if (blue > 255) { - throw new IllegalArgumentException("The blue value is higher than 255"); - } - this.blue = blue; - } - - /** - * Returns the red value of the RGB format - * - * @return The red value - */ - public int getRed() { - return red; - } - - /** - * Returns the green value of the RGB format - * - * @return The green value - */ - public int getGreen() { - return green; - } - - /** - * Returns the blue value of the RGB format - * - * @return The blue value - */ - public int getBlue() { - return blue; - } - - /** - * Returns the red value divided by 255 - * - * @return The offsetX value - */ - @Override - public float getValueX() { - return red / 255F; - } - - /** - * Returns the green value divided by 255 - * - * @return The offsetY value - */ - @Override - public float getValueY() { - return green / 255F; - } - - /** - * Returns the blue value divided by 255 - * - * @return The offsetZ value - */ - @Override - public float getValueZ() { - return blue / 255F; - } - } - - /** - * Represents the color for the {@link ParticleEffects#NOTE} effect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - public static final class NoteColor extends ParticleColor { - private final int note; - - /** - * Construct a new note color - * - * @param note Note id which determines color - * @throws IllegalArgumentException If the note value is lower than 0 or higher than 255 - */ - public NoteColor(int note) throws IllegalArgumentException { - if (note < 0) { - throw new IllegalArgumentException("The note value is lower than 0"); - } - if (note > 24) { - throw new IllegalArgumentException("The note value is higher than 24"); - } - this.note = note; - } - - /** - * Returns the note value divided by 24 - * - * @return The offsetX value - */ - @Override - public float getValueX() { - return note / 24F; - } - - /** - * Returns zero because the offsetY value is unused - * - * @return zero - */ - @Override - public float getValueY() { - return 0; - } - - /** - * Returns zero because the offsetZ value is unused - * - * @return zero - */ - @Override - public float getValueZ() { - return 0; - } - - } - - /** - * Represents a runtime exception that is thrown either if the displayed particle effect requires data and has none or vice-versa or if the data type is incorrect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - private static final class ParticleDataException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new particle data exception - * - * @param message Message that will be logged - */ - public ParticleDataException(String message) { - super(message); - } - } - - /** - * Represents a runtime exception that is thrown either if the displayed particle effect is not colorable or if the particle color type is incorrect - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.7 - */ - private static final class ParticleColorException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new particle color exception - * - * @param message Message that will be logged - */ - public ParticleColorException(String message) { - super(message); - } - } - - /** - * Represents a runtime exception that is thrown if the displayed particle effect requires a newer version - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.6 - */ - private static final class ParticleVersionException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new particle version exception - * - * @param message Message that will be logged - */ - public ParticleVersionException(String message) { - super(message); - } - } - - /** - * Represents a particle effect packet with all attributes which is used for sending packets to the players - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.5 - */ - public static final class ParticlePacket { - private static int version = 7; - private static Class enumParticle; - private static Constructor packetConstructor; - private static Method getHandle; - private static Field playerConnection; - private static Method sendPacket; - private static boolean initialized; - private final ParticleEffects effect; - private final float offsetX; - private final float offsetY; - private final float offsetZ; - private final float speed; - private final int amount; - private final boolean longDistance; - private final ParticleData data; - private Object packet; - - /** - * Construct a new particle packet - * - * @param effect Particle effect - * @param offsetX Maximum distance particles can fly away from the center on the x-axis - * @param offsetY Maximum distance particles can fly away from the center on the y-axis - * @param offsetZ Maximum distance particles can fly away from the center on the z-axis - * @param speed Display speed of the particles - * @param amount Amount of particles - * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 - * @param data Data of the effect - * @throws IllegalArgumentException If the speed or amount is lower than 0 - * @see #initialize() - */ - public ParticlePacket(ParticleEffects effect, float offsetX, float offsetY, float offsetZ, float speed, int amount, boolean longDistance, ParticleData data) - throws IllegalArgumentException { - initialize(); - if (speed < 0) { - throw new IllegalArgumentException("The speed is lower than 0"); - } - if (amount < 0) { - throw new IllegalArgumentException("The amount is lower than 0"); - } - this.effect = effect; - this.offsetX = offsetX; - this.offsetY = offsetY; - this.offsetZ = offsetZ; - this.speed = speed; - this.amount = amount; - this.longDistance = longDistance; - this.data = data; - } - - /** - * Construct a new particle packet of a single particle flying into a determined direction - * - * @param effect Particle effect - * @param direction Direction of the particle - * @param speed Display speed of the particle - * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 - * @param data Data of the effect - * @throws IllegalArgumentException If the speed is lower than 0 - * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) - */ - public ParticlePacket(ParticleEffects effect, Vector direction, float speed, boolean longDistance, ParticleData data) throws IllegalArgumentException { - this(effect, (float) direction.getX(), (float) direction.getY(), (float) direction.getZ(), speed, 0, longDistance, data); - } - - /** - * Construct a new particle packet of a single colored particle - * - * @param effect Particle effect - * @param color Color of the particle - * @param longDistance Indicates whether the maximum distance is increased from 256 to 65536 - * @see #ParticleEffect(ParticleEffect, float, float, float, float, int, boolean, ParticleData) - */ - public ParticlePacket(ParticleEffects effect, ParticleColor color, boolean longDistance) { - this(effect, color.getValueX(), color.getValueY(), color.getValueZ(), 1, 0, longDistance, null); - } - - /** - * Initializes {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} and sets {@link #initialized} to true if it succeeds - *

- * Note: These fields only have to be initialized once, so it will return if {@link #initialized} is already set to true - * - * @throws VersionIncompatibleException if your bukkit version is not supported by this library - */ - public static void initialize() throws VersionIncompatibleException { - if (initialized) { - return; - } - try { - version = Integer.parseInt(ReflectionUtils.PackageType.getServerVersion().split("_")[1]); - } catch (Exception exception) { - throw new VersionIncompatibleException("Your current bukkit version seems to be incompatible with this library", exception); - } - try { - if (version > 7) { - enumParticle = PackageType.MINECRAFT_SERVER.getClass("EnumParticle"); - } - Class packetClass = PackageType.MINECRAFT_SERVER.getClass(version < 7 ? "Packet63WorldParticles" : "PacketPlayOutWorldParticles"); - packetConstructor = ReflectionUtils.getConstructor(packetClass); - getHandle = ReflectionUtils.getMethod("CraftPlayer", PackageType.CRAFTBUKKIT_ENTITY, "getHandle"); - playerConnection = ReflectionUtils.getField("EntityPlayer", PackageType.MINECRAFT_SERVER, false, "playerConnection"); - sendPacket = ReflectionUtils.getMethod(playerConnection.getType(), "sendPacket", PackageType.MINECRAFT_SERVER.getClass("Packet")); - } catch (Exception exception) { - throw new VersionIncompatibleException("Your current bukkit version seems to be incompatible with this library", exception); - } - initialized = true; - } - - /** - * Returns the version of your server (1.x) - * - * @return The version number - */ - public static int getVersion() { - return version; - } - - /** - * Determine if {@link #packetConstructor}, {@link #getHandle}, {@link #playerConnection} and {@link #sendPacket} are initialized - * - * @return Whether these fields are initialized or not - * @see #initialize() - */ - public static boolean isInitialized() { - return initialized; - } - - /** - * Initializes {@link #packet} with all set values - * - * @param center Center location of the effect - * @throws PacketInstantiationException If instantion fails due to an unknown error - */ - private void initializePacket(Location center) throws PacketInstantiationException { - if (packet != null) { - return; - } - try { - packet = packetConstructor.newInstance(); - if (version < 8) { - String name = effect.getName(); - if (data != null) { - name += data.getPacketDataString(); - } - ReflectionUtils.setValue(packet, true, "a", name); - } else { - ReflectionUtils.setValue(packet, true, "a", enumParticle.getEnumConstants()[effect.getId()]); - ReflectionUtils.setValue(packet, true, "j", longDistance); - if (data != null) { - ReflectionUtils.setValue(packet, true, "k", data.getPacketData()); - } - } - ReflectionUtils.setValue(packet, true, "b", (float) center.getX()); - ReflectionUtils.setValue(packet, true, "c", (float) center.getY()); - ReflectionUtils.setValue(packet, true, "d", (float) center.getZ()); - ReflectionUtils.setValue(packet, true, "e", offsetX); - ReflectionUtils.setValue(packet, true, "f", offsetY); - ReflectionUtils.setValue(packet, true, "g", offsetZ); - ReflectionUtils.setValue(packet, true, "h", speed); - ReflectionUtils.setValue(packet, true, "i", amount); - } catch (Exception exception) { - throw new PacketInstantiationException("Packet instantiation failed", exception); - } - } - - /** - * Sends the packet to a single player and caches it - * - * @param center Center location of the effect - * @param player Receiver of the packet - * @throws PacketInstantiationException If instantion fails due to an unknown error - * @throws PacketSendingException If sending fails due to an unknown error - * @see #initializePacket(Location) - */ - public void sendTo(Location center, Player player) throws PacketInstantiationException, PacketSendingException { - initializePacket(center); - try { - sendPacket.invoke(playerConnection.get(getHandle.invoke(player)), packet); - } catch (Exception exception) { - throw new PacketSendingException("Failed to send the packet to player '" + player.getName() + "'", exception); - } - } - - /** - * Sends the packet to all players in the list - * - * @param center Center location of the effect - * @param players Receivers of the packet - * @throws IllegalArgumentException If the player list is empty - * @see #sendTo(Location center, Player player) - */ - public void sendTo(Location center, List players) throws IllegalArgumentException { - if (players.isEmpty()) { - throw new IllegalArgumentException("The player list is empty"); - } - for (Player player : players) { - sendTo(center, player); - } - } - - /** - * Sends the packet to all players in a certain range - * - * @param center Center location of the effect - * @param range Range in which players will receive the packet (Maximum range for particles is usually 16, but it can differ for some types) - * @throws IllegalArgumentException If the range is lower than 1 - * @see #sendTo(Location center, Player player) - */ - public void sendTo(Location center, double range) throws IllegalArgumentException { - if (range < 1) { - throw new IllegalArgumentException("The range is lower than 1"); - } - String worldName = center.getWorld().getName(); - double squared = range * range; - for (Player player : Bukkit.getOnlinePlayers()) { - if (!player.getWorld().getName().equals(worldName) || player.getLocation().distanceSquared(center) > squared) { - continue; - } - sendTo(center, player); - } - } - - /** - * Represents a runtime exception that is thrown if a bukkit version is not compatible with this library - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.5 - */ - private static final class VersionIncompatibleException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new version incompatible exception - * - * @param message Message that will be logged - * @param cause Cause of the exception - */ - public VersionIncompatibleException(String message, Throwable cause) { - super(message, cause); - } - } - - /** - * Represents a runtime exception that is thrown if packet instantiation fails - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.4 - */ - private static final class PacketInstantiationException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new packet instantiation exception - * - * @param message Message that will be logged - * @param cause Cause of the exception - */ - public PacketInstantiationException(String message, Throwable cause) { - super(message, cause); - } - } - - /** - * Represents a runtime exception that is thrown if packet sending fails - *

- * This class is part of the ParticleEffect Library and follows the same usage conditions - * - * @author DarkBlade12 - * @since 1.4 - */ - private static final class PacketSendingException extends RuntimeException { - private static final long serialVersionUID = 3203085387160737484L; - - /** - * Construct a new packet sending exception - * - * @param message Message that will be logged - * @param cause Cause of the exception - */ - public PacketSendingException(String message, Throwable cause) { - super(message, cause); - } - } - } -} \ No newline at end of file From 8f48d730d79f34a9010629dfa4c0d234ae261cc5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 1 May 2019 11:07:40 +0300 Subject: [PATCH 0598/1142] Lets show residence bounds when entering it for convenience sake --- .../bukkit/residence/ConfigManager.java | 16 ++++++-- .../bekvon/bukkit/residence/Residence.java | 37 ++++++++++--------- .../listeners/ResidencePlayerListener.java | 5 +++ .../protection/ClaimedResidence.java | 11 ++++++ 4 files changed, 48 insertions(+), 21 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 337090d18..c32b0dfa7 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -156,6 +156,7 @@ public class ConfigManager { protected boolean spoutEnable; protected boolean AutoMobRemoval; protected boolean BounceAnimation; + private boolean EnterAnimation; protected boolean useFlagGUI; protected int AutoMobRemovalInterval; protected boolean enableLeaseMoneyAccount; @@ -183,10 +184,10 @@ public class ConfigManager { protected boolean CreeperExplodeBelow; protected int CreeperExplodeBelowLevel; - protected List customContainers; - protected List customBothClick; - protected List customRightClick; - protected List CleanBlocks; + protected List customContainers = new ArrayList(); + protected List customBothClick = new ArrayList(); + protected List customRightClick = new ArrayList(); + protected List CleanBlocks = new ArrayList(); protected List NoFlowWorlds; protected List AutoCleanUpWorlds; @@ -1089,6 +1090,9 @@ public void UpdateConfigFile() { Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } + c.addComment("Global.Visualizer.EnterAnimation", "Shows particle effect when player enters residence. Only applies to main residence area"); + EnterAnimation = c.get("Global.Visualizer.EnterAnimation", true); + c.addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); BounceAnimation = c.get("Global.BounceAnimation", true); @@ -1879,6 +1883,10 @@ public ELMessageType getEnterLeaveMessageType() { return EnterLeaveMessageType; } + public boolean isEnterAnimation() { + return EnterAnimation; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f0104602a..32884ec2d 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -353,7 +353,7 @@ public void run() { @Override public void run() { rentmanager.checkCurrentRents(); - if (cmanager.showIntervalMessages()) { + if (getConfigManager().showIntervalMessages()) { Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Rent Expirations checked!"); } } @@ -362,7 +362,7 @@ public void run() { @Override public void run() { leasemanager.doExpirations(); - if (cmanager.showIntervalMessages()) { + if (getConfigManager().showIntervalMessages()) { Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Lease Expirations checked!"); } } @@ -404,10 +404,10 @@ public void onDisable() { server.getScheduler().cancelTask(DespawnMobsBukkitId); - if (cmanager.useLeases()) { + if (getConfigManager().useLeases()) { server.getScheduler().cancelTask(leaseBukkitId); } - if (cmanager.enabledRentSystem()) { + if (getConfigManager().enabledRentSystem()) { server.getScheduler().cancelTask(rentBukkitId); } @@ -495,9 +495,7 @@ public void onEnable() { // this.getConfig().load("config.yml"); // System.out.println("[Residence] Config Invalid, wrote default..."); // } - - cmanager = new ConfigManager(this); - String multiworld = cmanager.getMultiworldPlugin(); + String multiworld = getConfigManager().getMultiworldPlugin(); if (multiworld != null) { Plugin plugin = server.getPluginManager().getPlugin(multiworld); if (plugin != null) { @@ -576,7 +574,7 @@ public void onEnable() { } try { - File langFile = new File(new File(dataFolder, "Language"), cmanager.getLanguage() + ".yml"); + File langFile = new File(new File(dataFolder, "Language"), getConfigManager().getLanguage() + ".yml"); BufferedReader in = null; try { @@ -597,7 +595,7 @@ public void onEnable() { if (in != null) in.close(); } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Failed to load language file: " + cmanager.getLanguage() + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Failed to load language file: " + getConfigManager().getLanguage() + ".yml setting to default - English"); File langFile = new File(new File(dataFolder, "Language"), "English.yml"); @@ -819,7 +817,7 @@ public void run() { getDynManager().activate(); } - int autosaveInt = cmanager.getAutoSaveInterval(); + int autosaveInt = getConfigManager().getAutoSaveInterval(); if (autosaveInt < 1) { autosaveInt = 1; } @@ -831,16 +829,16 @@ public void run() { DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * getConfigManager().AutoMobRemovalInterval(), 20 * getConfigManager().AutoMobRemovalInterval()); - if (cmanager.useLeases()) { - int leaseInterval = cmanager.getLeaseCheckInterval(); + if (getConfigManager().useLeases()) { + int leaseInterval = getConfigManager().getLeaseCheckInterval(); if (leaseInterval < 1) { leaseInterval = 1; } leaseInterval = leaseInterval * 60 * 20; leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval); } - if (cmanager.enabledRentSystem()) { - int rentint = cmanager.getRentCheckInterval(); + if (getConfigManager().enabledRentSystem()) { + int rentint = getConfigManager().getRentCheckInterval(); if (rentint < 1) { rentint = 1; } @@ -895,10 +893,10 @@ public boolean validName(String name) { if (name.contains(":") || name.contains(".") || name.contains("|")) { return false; } - if (cmanager.getResidenceNameRegex() == null) { + if (getConfigManager().getResidenceNameRegex() == null) { return true; } - String namecheck = name.replaceAll(cmanager.getResidenceNameRegex(), ""); + String namecheck = name.replaceAll(getConfigManager().getResidenceNameRegex(), ""); if (!name.equals(namecheck)) { return false; } @@ -978,6 +976,8 @@ public File getDataLocation() { } public ShopSignUtil getShopSignUtilManager() { + if (ShopSignUtilManager == null) + ShopSignUtilManager = new ShopSignUtil(this); return ShopSignUtilManager; } @@ -1051,11 +1051,14 @@ public HelpEntry getHelpPages() { return helppages; } + @Deprecated public void setConfigManager(ConfigManager cm) { cmanager = cm; } public ConfigManager getConfigManager() { + if (cmanager == null) + cmanager = new ConfigManager(this); return cmanager; } @@ -1328,7 +1331,7 @@ private void saveYml() throws IOException { } tmpFile.renameTo(ymlSaveLoc); - if (cmanager.showIntervalMessages()) { + if (getConfigManager().showIntervalMessages()) { System.out.println("[Residence] - Saved Residences..."); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 64a223b53..138b569cc 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2327,6 +2327,11 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { } } + if (to != null && plugin.getConfigManager().isEnterAnimation() && to.isTopArea()) { + if (from == null || from.getTopParent() != to) + to.showBounds(player, true); + } + if (from == null || res == null) return; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index edb7ec8ef..fa7d92f28 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -837,6 +837,10 @@ public ClaimedResidence getTopParent() { return parent.getTopParent(); } + public boolean isTopArea() { + return parent == null; + } + public boolean removeSubzone(String name) { return this.removeSubzone(null, name, true); } @@ -1991,4 +1995,11 @@ public double getWorthByOwner() { public double getWorth() { return (int) ((getTotalSize() * getBlockSellPrice()) * 100) / 100.0; } + + public void showBounds(Player player, boolean showOneTime) { + Visualizer v = new Visualizer(player); + v.setAreas(getAreaArray()); + v.setOnce(showOneTime); + plugin.getSelectionManager().showBounds(player, v); + } } From b6f13626a6ed99c97acfdcbadaa2810decdaf42a Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 2 May 2019 11:56:31 +0300 Subject: [PATCH 0599/1142] Fix for selection visualizer not recognizing config file set particles --- .../bukkit/residence/ConfigManager.java | 84 ++++--------------- .../residence/selection/SelectionManager.java | 4 +- 2 files changed, 20 insertions(+), 68 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index c32b0dfa7..53bf04dad 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -32,6 +32,7 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; public class ConfigManager { protected String defaultGroup; @@ -222,11 +223,11 @@ public class ConfigManager { protected CMIParticle OverlapFrame; protected CMIParticle OverlapSides; - protected CMIParticle SelectedSpigotFrame; - protected CMIParticle SelectedSpigotSides; - - protected CMIParticle OverlapSpigotFrame; - protected CMIParticle OverlapSpigotSides; +// protected CMIParticle SelectedSpigotFrame; +// protected CMIParticle SelectedSpigotSides; +// +// protected CMIParticle OverlapSpigotFrame; +// protected CMIParticle OverlapSpigotSides; // DynMap public boolean DynMapUse; @@ -934,20 +935,20 @@ public void UpdateConfigFile() { c.addComment("Global.CustomContainers", "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); - pls = c.getList("Global.CustomContainers", new ArrayList()); + pls = c.getList("Global.CustomContainers", new ArrayList()); for (Object one : pls) { CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); if (mat != CMIMaterial.NONE) customContainers.add(mat); } - + pls = c.getList("Global.CustomBothClick", new ArrayList()); for (Object one : pls) { CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); if (mat != CMIMaterial.NONE) customBothClick.add(mat); } - + pls = c.getList("Global.CustomRightClick", new ArrayList()); for (Object one : pls) { CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); @@ -1014,20 +1015,6 @@ public void UpdateConfigFile() { SelectedFrame = CMIParticle.HAPPY_VILLAGER; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); } - efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; - for (Effect one : Effect.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { - SelectedSpigotFrame = CMIParticle.getCMIParticle(one.toString()); - break; - } - } - - if (SelectedSpigotFrame == null) { - SelectedSpigotFrame = CMIParticle.HAPPY_VILLAGER; - if (SelectedSpigotFrame == null) - SelectedSpigotFrame = CMIParticle.COLOURED_DUST; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } // Sides efname = c.get("Global.Visualizer.Selected.Sides", "reddust"); @@ -1036,18 +1023,6 @@ public void UpdateConfigFile() { SelectedSides = CMIParticle.COLOURED_DUST; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } - efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; - for (Effect one : Effect.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { - SelectedSpigotSides = CMIParticle.getCMIParticle(one.toString()); - break; - } - } - - if (SelectedSpigotSides == null) { - SelectedSpigotSides = CMIParticle.COLOURED_DUST; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } efname = c.get("Global.Visualizer.Overlap.Frame", "FLAME"); OverlapFrame = CMIParticle.getCMIParticle(efname); @@ -1056,43 +1031,16 @@ public void UpdateConfigFile() { Bukkit.getConsoleSender().sendMessage("Can't find effect for Overlap Frame with this name, it was set to default"); } - efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; - for (Effect one : Effect.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { - OverlapSpigotFrame = CMIParticle.getCMIParticle(one.toString()); - break; - } - } - - if (plugin.isSpigot()) - if (OverlapSpigotFrame == null) { - OverlapSpigotFrame = CMIParticle.FLAME; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } - efname = c.get("Global.Visualizer.Overlap.Sides", "FLAME"); OverlapSides = CMIParticle.getCMIParticle(efname); if (OverlapSides == null) { OverlapSides = CMIParticle.FLAME; Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); } - efname = efname.equalsIgnoreCase("reddust") ? "COLOURED_DUST" : efname; - for (Effect one : Effect.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(efname.replace("_", ""))) { - OverlapSpigotSides = CMIParticle.getCMIParticle(one.toString()); - break; - } - } - - if (plugin.isSpigot()) - if (OverlapSpigotSides == null) { - OverlapSpigotSides = CMIParticle.FLAME; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } c.addComment("Global.Visualizer.EnterAnimation", "Shows particle effect when player enters residence. Only applies to main residence area"); EnterAnimation = c.get("Global.Visualizer.EnterAnimation", true); - + c.addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); BounceAnimation = c.get("Global.BounceAnimation", true); @@ -1331,20 +1279,24 @@ public CMIParticle getOverlapSides() { return OverlapSides; } + @Deprecated public CMIParticle getSelectedSpigotFrame() { - return SelectedSpigotFrame; + return SelectedFrame; } + @Deprecated public CMIParticle getSelectedSpigotSides() { - return SelectedSpigotSides; + return SelectedSides; } + @Deprecated public CMIParticle getOverlapSpigotFrame() { - return OverlapSpigotFrame; + return OverlapFrame; } + @Deprecated public CMIParticle getOverlapSpigotSides() { - return OverlapSpigotSides; + return OverlapSides; } public int getTeleportDelay() { diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 3f9c5dce6..1b08c3f05 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -799,9 +799,9 @@ private void showParticles(List locList, Player player, int timesMore, CMIParticle effect = null; if (sides) { - effect = error ? plugin.getConfigManager().getOverlapSpigotSides() : plugin.getConfigManager().getSelectedSpigotSides(); + effect = error ? plugin.getConfigManager().getOverlapSides() : plugin.getConfigManager().getSelectedSides(); } else { - effect = error ? plugin.getConfigManager().getOverlapSpigotFrame() : plugin.getConfigManager().getSelectedSpigotFrame(); + effect = error ? plugin.getConfigManager().getOverlapFrame() : plugin.getConfigManager().getSelectedFrame(); } CMIEffect ef = new CMIEffect(effect); From 152453e8ff3db99cf3743003ca8001610984a83d Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 2 May 2019 12:32:16 +0300 Subject: [PATCH 0600/1142] Faster residence sign updates Lets update signs when owner changes with give command --- .../listeners/ResidencePlayerListener.java | 88 ++++++++----------- .../protection/ResidenceManager.java | 4 +- .../bukkit/residence/signsStuff/SignInfo.java | 28 ++++-- .../bukkit/residence/signsStuff/SignUtil.java | 79 +++++------------ .../bekvon/bukkit/residence/utils/Utils.java | 73 +++++++++++++++ 5 files changed, 154 insertions(+), 118 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 138b569cc..deab2bd95 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -724,42 +724,35 @@ public void onSignInteract(PlayerInteractEvent event) { return; Location loc = block.getLocation(); - for (Signs one : plugin.getSignUtil().getSigns().GetAllSigns()) { - if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) - continue; - if (one.GetLocation().getBlockX() != loc.getBlockX()) - continue; - if (one.GetLocation().getBlockY() != loc.getBlockY()) - continue; - if (one.GetLocation().getBlockZ() != loc.getBlockZ()) - continue; - - ClaimedResidence res = one.GetResidence(); - - boolean ForSale = res.isForSell(); - boolean ForRent = res.isForRent(); - String landName = res.getName(); - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (ForSale) { - Bukkit.dispatchCommand(player, "res market buy " + landName); - break; - } + Signs s = plugin.getSignUtil().getSigns().getResSign(loc); + if (s == null) + return; - if (ForRent) { - if (res.isRented() && player.isSneaking()) - Bukkit.dispatchCommand(player, "res market release " + landName); - else { - boolean stage = true; - if (player.isSneaking()) - stage = false; - Bukkit.dispatchCommand(player, "res market rent " + landName + " " + stage); - } - break; - } - } else if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - if (ForRent && res.isRented() && plugin.getRentManager().getRentingPlayer(res).equals(player.getName())) { - plugin.getRentManager().payRent(player, res, false); + ClaimedResidence res = s.GetResidence(); + + boolean ForSale = res.isForSell(); + boolean ForRent = res.isForRent(); + String landName = res.getName(); + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (ForSale) { + Bukkit.dispatchCommand(player, "res market buy " + landName); + return; + } + + if (ForRent) { + if (res.isRented() && player.isSneaking()) + Bukkit.dispatchCommand(player, "res market release " + landName); + else { + boolean stage = true; + if (player.isSneaking()) + stage = false; + Bukkit.dispatchCommand(player, "res market rent " + landName + " " + stage); } + return; + } + } else if (event.getAction() == Action.LEFT_CLICK_BLOCK) { + if (ForRent && res.isRented() && plugin.getRentManager().getRentingPlayer(res).equals(player.getName())) { + plugin.getRentManager().payRent(player, res, false); } } } @@ -849,23 +842,15 @@ public void onSignDestroy(BlockBreakEvent event) { Location loc = block.getLocation(); if (event.getPlayer().hasMetadata("NPC")) return; - for (Signs one : plugin.getSignUtil().getSigns().GetAllSigns()) { - - if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) - continue; - if (one.GetLocation().getBlockX() != loc.getBlockX()) - continue; - if (one.GetLocation().getBlockY() != loc.getBlockY()) - continue; - if (one.GetLocation().getBlockZ() != loc.getBlockZ()) - continue; - - plugin.getSignUtil().getSigns().removeSign(one); - if (one.GetResidence() != null) - one.GetResidence().getSignsInResidence().remove(one); - plugin.getSignUtil().saveSigns(); - break; - } + + Signs s = plugin.getSignUtil().getSigns().getResSign(loc); + if (s == null) + return; + + plugin.getSignUtil().getSigns().removeSign(s); + if (s.GetResidence() != null) + s.GetResidence().getSignsInResidence().remove(s); + plugin.getSignUtil().saveSigns(); } @EventHandler(priority = EventPriority.MONITOR) @@ -1239,7 +1224,6 @@ private static boolean placingMinecart(Block block, ItemStack item) { return false; } - @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { if (event.getPlayer() == null) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index b98753606..550771964 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1188,8 +1188,8 @@ public void giveResidence(Player reqPlayer, String targPlayer, ClaimedResidence // Fix phrases here plugin.msg(reqPlayer, lm.Residence_Give, residence, giveplayer.getName()); plugin.msg(giveplayer, lm.Residence_Recieve, residence, reqPlayer.getName()); - - if (includeSubzones) + plugin.getSignUtil().updateSignResName(res); + if (includeSubzones) for (ClaimedResidence one : res.getSubzones()) { giveResidence(reqPlayer, targPlayer, one, resadmin, includeSubzones); } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java b/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java index eceabd9b0..e2c2f2dd5 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java @@ -1,28 +1,42 @@ package com.bekvon.bukkit.residence.signsStuff; -import java.util.ArrayList; -import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +import org.bukkit.Location; + +import com.bekvon.bukkit.residence.utils.Utils; public class SignInfo { - List AllSigns = new ArrayList(); + ConcurrentHashMap AllSigns = new ConcurrentHashMap(); public SignInfo() { } - public void setAllSigns(List AllSigns) { - this.AllSigns = AllSigns; + public void setAllSigns(ConcurrentHashMap AllSigns) { + this.AllSigns.clear(); + this.AllSigns.putAll(AllSigns); } - public List GetAllSigns() { + public ConcurrentHashMap GetAllSigns() { return this.AllSigns; } + public Signs getResSign(Location loc) { + String l = Utils.convertLocToStringShort(loc); + if (l == null) + return null; + return this.AllSigns.get(l); + } + public void removeSign(Signs sign) { this.AllSigns.remove(sign); } public void addSign(Signs sign) { - this.AllSigns.add(sign); + String loc = Utils.convertLocToStringShort(sign.GetLocation()); + if (loc == null) + return; + this.AllSigns.put(loc, sign); } } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 7cff99c22..3d54e2689 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -6,8 +6,10 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.List; +import java.util.Map.Entry; import java.util.Set; import java.util.TimeZone; +import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -40,10 +42,10 @@ public SignInfo getSigns() { } public int updateAllSigns() { - List temp = new ArrayList(); - temp.addAll(Signs.GetAllSigns()); - for (Signs one : temp) { - SignUpdate(one); + ConcurrentHashMap temp = new ConcurrentHashMap(); + temp.putAll(Signs.GetAllSigns()); + for (Entry one : temp.entrySet()) { + SignUpdate(one.getValue()); } saveSigns(); return temp.size(); @@ -105,13 +107,14 @@ public void saveSigns() { if (!conf.isConfigurationSection("Signs")) conf.createSection("Signs"); - for (Signs one : Signs.GetAllSigns()) { - String path = "Signs." + String.valueOf(one.GetCategory()); - writer.set(path + ".Residence", one.GetResidence().getName()); - writer.set(path + ".World", one.GetLocation().getWorld().getName()); - writer.set(path + ".X", one.GetLocation().getBlockX()); - writer.set(path + ".Y", one.GetLocation().getBlockY()); - writer.set(path + ".Z", one.GetLocation().getBlockZ()); + for (Entry one : new ConcurrentHashMap(Signs.GetAllSigns()).entrySet()) { + Signs s = one.getValue(); + String path = "Signs." + String.valueOf(s.GetCategory()); + writer.set(path + ".Residence", s.GetResidence().getName()); + writer.set(path + ".World", s.GetLocation().getWorld().getName()); + writer.set(path + ".X", s.GetLocation().getBlockX()); + writer.set(path + ".Y", s.GetLocation().getBlockY()); + writer.set(path + ".Z", s.GetLocation().getBlockZ()); } try { @@ -123,28 +126,7 @@ public void saveSigns() { } public Signs getSignFromLoc(Location loc) { - if (loc == null) - return null; - List signList = new ArrayList(); - signList.addAll(this.getSigns().GetAllSigns()); - for (Signs one : signList) { - if (one == null) - continue; - if (one.GetLocation() == null) - continue; - if (one.GetLocation().getWorld() == null) - continue; - if (!one.GetLocation().getWorld().getName().equalsIgnoreCase(loc.getWorld().getName())) - continue; - if (one.GetLocation().getBlockX() != loc.getBlockX()) - continue; - if (one.GetLocation().getBlockY() != loc.getBlockY()) - continue; - if (one.GetLocation().getBlockZ() != loc.getBlockZ()) - continue; - return one; - } - return null; + return this.getSigns().getResSign(loc); } public void CheckSign(final ClaimedResidence res, int time) { @@ -157,9 +139,7 @@ public void run() { } public void CheckSign(ClaimedResidence res) { - List signList = new ArrayList(); - signList.addAll(this.getSigns().GetAllSigns()); - for (Signs one : signList) { + for (Signs one : res.getSignsInResidence()) { if (res != one.GetResidence()) continue; this.SignUpdate(one); @@ -174,19 +154,16 @@ public void removeSign(String res) { } public void removeSign(ClaimedResidence res) { - List signList = new ArrayList(); - signList.addAll(this.getSigns().GetAllSigns()); - - for (Signs one : signList) { - if (!res.equals(one.GetResidence())) + for (Signs one : res.getSignsInResidence()) { + if (res != one.GetResidence()) continue; this.SignUpdate(one); } } public void updateSignResName(ClaimedResidence res) { - for (Signs one : this.getSigns().GetAllSigns()) { - if (!res.equals(one.GetResidence())) + for (Signs one : res.getSignsInResidence()) { + if (res != one.GetResidence()) continue; this.SignUpdate(one); saveSigns(); @@ -369,21 +346,9 @@ public void convertSigns(CommandSender sender) { } signs.setLocation(new Location(world, x, y, z)); - boolean found = false; - - for (Signs onesigns : this.getSigns().GetAllSigns()) { - if (!onesigns.GetLocation().getWorld().getName().equalsIgnoreCase(signs.GetLocation().getWorld().getName())) - continue; - if (onesigns.GetLocation().getBlockX() != signs.GetLocation().getBlockX()) - continue; - if (onesigns.GetLocation().getBlockY() != signs.GetLocation().getBlockY()) - continue; - if (onesigns.GetLocation().getBlockZ() != signs.GetLocation().getBlockZ()) - continue; - found = true; - } - if (found) + Signs s = this.getSigns().getResSign(signs.GetLocation()); + if (s == null) continue; Location nloc = signs.GetLocation(); diff --git a/src/com/bekvon/bukkit/residence/utils/Utils.java b/src/com/bekvon/bukkit/residence/utils/Utils.java index 5c5127771..3329d2bcf 100644 --- a/src/com/bekvon/bukkit/residence/utils/Utils.java +++ b/src/com/bekvon/bukkit/residence/utils/Utils.java @@ -3,7 +3,10 @@ import java.util.ArrayList; import java.util.Iterator; +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.Player; import org.bukkit.util.BlockIterator; @@ -98,4 +101,74 @@ public static Block getTargetBlock(Player player, Material lookingFor, int dista } return !blocks.isEmpty() ? blocks.get(blocks.size() - 1) : null; } + + public static String convertLocToStringShort(Location loc) { + String map = ""; + if (loc != null) { + if (loc.getWorld() != null) { + map += loc.getWorld().getName(); + map += ";" + (int) (loc.getX() * 100) / 100D; + map += ";" + (int) (loc.getY() * 100) / 100D; + map += ";" + (int) (loc.getZ() * 100) / 100D; + } + } + return map.replace(",", "."); + } + + public static Location convertStringToLocation(String map) { + Location loc = null; + if (map == null) + return null; + if (!map.contains(";")) + return null; + + String[] split = map.replace(",", ".").split(";"); + double x = 0; + double y = 0; + double z = 0; + float yaw = 0; + float pitch = 0; + + if (split.length > 0) + try { + x = Double.parseDouble(split[1]); + } catch (Exception e) { + return loc; + } + + if (split.length > 1) + try { + y = Double.parseDouble(split[2]); + } catch (Exception e) { + return loc; + } + + if (split.length > 2) + try { + z = Double.parseDouble(split[3]); + } catch (Exception e) { + return loc; + } + + if (split.length > 3) + try { + yaw = Float.parseFloat(split[4]); + } catch (Exception e) { + } + + if (split.length > 4) + try { + pitch = Float.parseFloat(split[5]); + } catch (Exception e) { + } + + World w = Bukkit.getWorld(split[0]); + if (w == null) + return null; + loc = new Location(w, x, y, z); + loc.setYaw(yaw); + loc.setPitch(pitch); + + return loc; + } } From 0df915323f78ef76b7e539409bdafa56a6fbd826 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 2 May 2019 12:44:50 +0300 Subject: [PATCH 0601/1142] Version increment --- .../listeners/ResidencePlayerListener.java | 17 ++++++++--------- src/plugin.yml | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index deab2bd95..2326567b9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -81,6 +81,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -1105,9 +1106,7 @@ public void onPlatePress(PlayerInteractEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); boolean resadmin = plugin.isResAdminOn(player); if (!resadmin) { - boolean hasUseBypass = player.hasPermission("residence.bypass.use"); - boolean hasuse = perms.playerHas(player, Flags.use, true); boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); if (!hasUseBypass) @@ -1116,7 +1115,7 @@ public void onPlatePress(PlayerInteractEvent event) { return; } } - if (!perms.playerHas(player, Flags.trample, perms.playerHas(player, Flags.build, true)) && (mat.equals(CMIMaterial.FARMLAND) || mat.equals(CMIMaterial.SOUL_SAND))) { + if (!perms.playerHas(player, Flags.trample, perms.playerHas(player, Flags.build, true)) && (mat == CMIMaterial.FARMLAND || mat == CMIMaterial.SOUL_SAND)) { event.setCancelled(true); return; } @@ -1137,8 +1136,9 @@ public void onSelection(PlayerInteractEvent event) { @SuppressWarnings("deprecation") CMIMaterial heldItem = CMIMaterial.get(player.getItemInHand()); - if (heldItem != plugin.getConfigManager().getSelectionTool()) + if (heldItem != plugin.getConfigManager().getSelectionTool()) { return; + } if (plugin.getWorldEditTool() == plugin.getConfigManager().getSelectionTool()) return; @@ -1199,7 +1199,7 @@ public void onInfoCheck(PlayerInteractEvent event) { CMIMaterial heldItem = CMIMaterial.get(item); - if (!heldItem.equals(plugin.getConfigManager().getInfoTool())) + if (heldItem != plugin.getConfigManager().getInfoTool()) return; if (this.isContainer(block.getType(), block)) @@ -1236,15 +1236,14 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (!plugin.getNms().isMainHand(event)) return; - ItemStack iih = plugin.getNms().itemInMainHand(player); - CMIMaterial heldItem = CMIMaterial.get(iih); - Block block = event.getClickedBlock(); if (block == null) return; - Material mat = block.getType(); + ItemStack iih = plugin.getNms().itemInMainHand(player); + CMIMaterial heldItem = CMIMaterial.get(iih); + Material mat = block.getType(); if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block))) { if (!heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) diff --git a/src/plugin.yml b/src/plugin.yml index 7e0ed9208..20643eb06 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.5.0 +version: 4.8.6.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From a03499ac33293a0719a7eb83e2a6b371b7ae7d68 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 2 May 2019 13:53:09 +0300 Subject: [PATCH 0602/1142] Missing containers as of 1.14 update --- src/com/bekvon/bukkit/cmiLib/ItemManager.java | 25 ++++++++----------- .../residence/protection/FlagPermissions.java | 12 +++++++++ 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/ItemManager.java b/src/com/bekvon/bukkit/cmiLib/ItemManager.java index 468bb17e8..ec49ab033 100644 --- a/src/com/bekvon/bukkit/cmiLib/ItemManager.java +++ b/src/com/bekvon/bukkit/cmiLib/ItemManager.java @@ -28,7 +28,6 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionType; -import com.Zrips.CMI.Modules.CmiItems.ItemManager.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; @@ -1847,10 +1846,10 @@ public enum CMIMaterial { POLISHED_DIORITE_STAIRS(null, null, 4625, "Polished Diorite Stairs"), POLISHED_GRANITE_SLAB(null, null, 4521, "Polished Granite Slab"), POLISHED_GRANITE_STAIRS(null, null, 29588, "Polished Granite Stairs"), - POTTED_BAMBOO(null, null, 22542, "Air"), - POTTED_CORNFLOWER(null, null, 28917, "Air"), - POTTED_LILY_OF_THE_VALLEY(null, null, 9364, "Air"), - POTTED_WITHER_ROSE(null, null, 26876, "Air"), + POTTED_BAMBOO(null, null, 22542, "Potted Bamboo"), + POTTED_CORNFLOWER(null, null, 28917, "Potted CornFlower"), + POTTED_LILY_OF_THE_VALLEY(null, null, 9364, "Potted Lily Of The Valley"), + POTTED_WITHER_ROSE(null, null, 26876, "Potted Wither Rose"), PRISMARINE_WALL(null, null, 18184, "Prismarine Wall"), RAVAGER_SPAWN_EGG(null, null, 31284, "Ravager Spawn Egg"), RED_DYE(null, null, 5728, "Red Dye"), @@ -1871,13 +1870,13 @@ public enum CMIMaterial { SMOOTH_SANDSTONE_STAIRS(null, null, 21183, "Smooth Sandstone Stairs"), SMOOTH_STONE_SLAB(null, null, 24129, "Smooth Stone Slab"), SPRUCE_SIGN(null, null, 21502, "Spruce Sign"), - SPRUCE_WALL_SIGN(null, null, 7352, "Air"), + SPRUCE_WALL_SIGN(null, null, 7352, "Spruce Wall Sign"), STONECUTTER(null, null, 25170, "Stonecutter"), STONE_BRICK_WALL(null, null, 29073, "Stone Brick Wall"), STONE_STAIRS(null, null, 23784, "Stone Stairs"), SUSPICIOUS_STEW(null, null, 8173, "Suspicious Stew"), SWEET_BERRIES(null, null, 19747, "Sweet Berries"), - SWEET_BERRY_BUSH(null, null, 11958, "Air"), + SWEET_BERRY_BUSH(null, null, 11958, "Sweet Berry Bush"), TRADER_LLAMA_SPAWN_EGG(null, null, 13512, "Trader Llama Spawn Egg"), WANDERING_TRADER_SPAWN_EGG(null, null, 12312, "Wandering Trader Spawn Egg"), WHITE_DYE(null, null, 10758, "White Dye"), @@ -1891,7 +1890,7 @@ public enum CMIMaterial { LEGACY_BURNING_FURNACE(62, 0, null, "Burning Furnace"), LEGACY_NETHER_WARTS(115, 0, null, "Nether Warts"), LEGACY_IRON_DOOR_BLOCK(71, 0, null, "Iron Door Block"), - LEGACY_GLOWING_REDSTON_ORE(74, 0, null, "Glowing Redstone Ore"), + LEGACY_GLOWING_REDSTONE_ORE(74, 0, null, "Glowing Redstone Ore"), LEGACY_SUGAR_CANE_BLOCK(83, 0, null, "Sugar Cane Block"), LEGACY_RAW_FISH(349, 0, null, "Raw Fish"), LEGACY_SKULL(144, 0, null, "Skull"), @@ -2582,12 +2581,6 @@ public boolean isSapling() { case JUNGLE_SAPLING: case ACACIA_SAPLING: case DARK_OAK_SAPLING: - case POTTED_ACACIA_SAPLING: - case POTTED_BIRCH_SAPLING: - case POTTED_DARK_OAK_SAPLING: - case POTTED_JUNGLE_SAPLING: - case POTTED_OAK_SAPLING: - case POTTED_SPRUCE_SAPLING: return true; default: break; @@ -2921,6 +2914,10 @@ public boolean isPotted() { case POTTED_RED_TULIP: case POTTED_SPRUCE_SAPLING: case POTTED_WHITE_TULIP: + case POTTED_BAMBOO: + case POTTED_CORNFLOWER: + case POTTED_LILY_OF_THE_VALLEY: + case POTTED_WITHER_ROSE: return true; default: break; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 8cc517489..f6a9e65e0 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -230,6 +230,18 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.DROPPER, Flags.container); addMaterialToUseFlag(Material.FURNACE, Flags.container); addMaterialToUseFlag(CMIMaterial.FURNACE.getMaterial(), Flags.container); + + addMaterialToUseFlag(CMIMaterial.BARREL.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.BLAST_FURNACE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.CARTOGRAPHY_TABLE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.FLETCHING_TABLE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.GRINDSTONE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.LECTERN.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.LOOM.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.SMITHING_TABLE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.SMOKER.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.COMPOSTER.getMaterial(), Flags.container); + addMaterialToUseFlag(Material.DISPENSER, Flags.container); addMaterialToUseFlag(CMIMaterial.CAKE.getMaterial(), Flags.cake); } From 1f5b97738f2eebe96961bf40443056ba6f20b0bf Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 2 May 2019 13:59:14 +0300 Subject: [PATCH 0603/1142] This class should not be here --- src/com/bekvon/bukkit/residence/protection/FlagPermissions.java | 1 + .../bekvon/bukkit/residence/protection/ResidenceManager.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index f6a9e65e0..89b0a17ec 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -241,6 +241,7 @@ public static void initValidFlags() { addMaterialToUseFlag(CMIMaterial.SMITHING_TABLE.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.SMOKER.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.COMPOSTER.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.STONECUTTER.getMaterial(), Flags.container); addMaterialToUseFlag(Material.DISPENSER, Flags.container); addMaterialToUseFlag(CMIMaterial.CAKE.getMaterial(), Flags.cake); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 550771964..cab840e0f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -22,7 +22,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.Zrips.CMI.Modules.CmiItems.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; From 40b763a8a2512d21f01d47bf793c1a79e87e40ff Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 2 May 2019 16:54:41 +0300 Subject: [PATCH 0604/1142] Lets check for NPE when adding materials to flag groups --- .../bekvon/bukkit/residence/protection/FlagPermissions.java | 4 ++++ src/plugin.yml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 89b0a17ec..34d067e77 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -62,10 +62,14 @@ public String getName() { } public static void addMaterialToUseFlag(Material mat, Flags flag) { + if (mat == null) + return; matUseFlagList.put(mat, flag); } public static void removeMaterialFromUseFlag(Material mat) { + if (mat == null) + return; matUseFlagList.remove(mat); } diff --git a/src/plugin.yml b/src/plugin.yml index 20643eb06..0328d32e4 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.6.0 +version: 4.8.6.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 6197280511a4881b12c9a0b20785d48261cca195 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 May 2019 10:50:37 +0300 Subject: [PATCH 0605/1142] Lets fix market signs --- src/com/bekvon/bukkit/cmiLib/VersionChecker.java | 10 ++++------ .../bekvon/bukkit/residence/commands/market.java | 7 ++----- .../listeners/ResidencePlayerListener.java | 5 ----- .../bukkit/residence/signsStuff/SignUtil.java | 11 +++-------- .../bekvon/bukkit/residence/signsStuff/Signs.java | 14 +++++++------- src/plugin.yml | 2 +- 6 files changed, 17 insertions(+), 32 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/VersionChecker.java b/src/com/bekvon/bukkit/cmiLib/VersionChecker.java index 006a031f0..917abc70f 100644 --- a/src/com/bekvon/bukkit/cmiLib/VersionChecker.java +++ b/src/com/bekvon/bukkit/cmiLib/VersionChecker.java @@ -19,10 +19,8 @@ public class VersionChecker { public VersionChecker(Residence plugin) { this.plugin = plugin; - version = Version.getCurrent(); } - private static Version version = Version.v1_11_R1; public Version getVersion() { return Version.getCurrent(); @@ -131,19 +129,19 @@ public boolean isEqualOrHigher(Version version) { } public static boolean isCurrentEqualOrHigher(Version v) { - return version.getValue() >= v.getValue(); + return getCurrent().getValue() >= v.getValue(); } public static boolean isCurrentHigher(Version v) { - return version.getValue() > v.getValue(); + return getCurrent().getValue() > v.getValue(); } public static boolean isCurrentLower(Version v) { - return version.getValue() < v.getValue(); + return getCurrent().getValue() < v.getValue(); } public static boolean isCurrentEqualOrLower(Version v) { - return version.getValue() <= v.getValue(); + return getCurrent().getValue() <= v.getValue(); } } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index b7650d36d..588d7c7f9 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; +import java.util.Map.Entry; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -18,6 +19,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.Utils; public class market implements cmd { @@ -149,12 +151,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman boolean ForSale = res.isForSell(); boolean ForRent = res.isForRent(); - int category = 1; - if (plugin.getSignUtil().getSigns().GetAllSigns().size() > 0) - category = plugin.getSignUtil().getSigns().GetAllSigns().get(plugin.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; - if (ForSale || ForRent) { - signInfo.setCategory(category); signInfo.setResidence(res); signInfo.setLocation(loc); plugin.getSignUtil().getSigns().addSign(signInfo); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 2326567b9..96b8c3020 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -806,11 +806,6 @@ public void onSignCreate(SignChangeEvent event) { final ClaimedResidence residence = res; - int category = 1; - if (plugin.getSignUtil().getSigns().GetAllSigns().size() > 0) - category = plugin.getSignUtil().getSigns().GetAllSigns().get(plugin.getSignUtil().getSigns().GetAllSigns().size() - 1).GetCategory() + 1; - - signInfo.setCategory(category); signInfo.setResidence(res); signInfo.setLocation(loc); plugin.getSignUtil().getSigns().addSign(signInfo); diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 3d54e2689..9c0c62dea 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -68,7 +68,6 @@ public void LoadSigns() { for (String category : categoriesList) { ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); Signs newTemp = new Signs(); - newTemp.setCategory(Integer.valueOf(category)); ClaimedResidence res = plugin.getResidenceManager().getByName(NameSection.getString("Residence")); @@ -107,9 +106,11 @@ public void saveSigns() { if (!conf.isConfigurationSection("Signs")) conf.createSection("Signs"); + int i = 0; for (Entry one : new ConcurrentHashMap(Signs.GetAllSigns()).entrySet()) { Signs s = one.getValue(); - String path = "Signs." + String.valueOf(s.GetCategory()); + ++i; + String path = "Signs." + i; writer.set(path + ".Residence", s.GetResidence().getName()); writer.set(path + ".World", s.GetLocation().getWorld().getName()); writer.set(path + ".X", s.GetLocation().getBlockX()); @@ -305,17 +306,12 @@ public void convertSigns(CommandSender sender) { Set sectionname = conf.getConfigurationSection("signs").getKeys(false); ConfigurationSection section = conf.getConfigurationSection("signs"); - int category = 1; - if (this.getSigns().GetAllSigns().size() > 0) - category = this.getSigns().GetAllSigns().get(this.getSigns().GetAllSigns().size() - 1).GetCategory() + 1; - long time = System.currentTimeMillis(); int i = 0; for (String one : sectionname) { Signs signs = new Signs(); String resname = section.getString(one + ".resName"); - signs.setCategory(category); ClaimedResidence res = plugin.getResidenceManager().getByName(resname); @@ -359,7 +355,6 @@ public void convertSigns(CommandSender sender) { this.getSigns().addSign(signs); this.SignUpdate(signs); - category++; i++; } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/Signs.java b/src/com/bekvon/bukkit/residence/signsStuff/Signs.java index 2760ac2c6..c25ded6d3 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/Signs.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/Signs.java @@ -6,7 +6,7 @@ public class Signs { - int Category = 0; +// int Category = 0; ClaimedResidence Residence = null; Location loc = null; @@ -22,13 +22,13 @@ public Location GetLocation() { return this.loc; } - public void setCategory(int Category) { - this.Category = Category; - } +// public void setCategory(int Category) { +// this.Category = Category; +// } - public int GetCategory() { - return this.Category; - } +// public int GetCategory() { +// return this.Category; +// } public void setResidence(ClaimedResidence Residence) { this.Residence = Residence; diff --git a/src/plugin.yml b/src/plugin.yml index 0328d32e4..bbafa7e5e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.6.1 +version: 4.8.6.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From c47378676969a902c35e156aa73f201a6996b6dc Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 May 2019 11:00:32 +0300 Subject: [PATCH 0606/1142] Lets minimize res sign save file --- .../bukkit/residence/signsStuff/SignInfo.java | 2 +- .../bukkit/residence/signsStuff/SignUtil.java | 33 ++++++++++--------- .../bukkit/residence/signsStuff/Signs.java | 18 +++++----- .../bekvon/bukkit/residence/utils/Utils.java | 13 ++++++++ 4 files changed, 40 insertions(+), 26 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java b/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java index e2c2f2dd5..a4d16cfea 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java @@ -34,7 +34,7 @@ public void removeSign(Signs sign) { } public void addSign(Signs sign) { - String loc = Utils.convertLocToStringShort(sign.GetLocation()); + String loc = Utils.convertLocToStringShort(sign.getLocation()); if (loc == null) return; this.AllSigns.put(loc, sign); diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 9c0c62dea..b86a89762 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -27,6 +27,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Utils; public class SignUtil { @@ -69,24 +70,27 @@ public void LoadSigns() { ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); Signs newTemp = new Signs(); - ClaimedResidence res = plugin.getResidenceManager().getByName(NameSection.getString("Residence")); + ClaimedResidence res = plugin.getResidenceManager().getByName(NameSection.contains("Residence") ? NameSection.getString("Residence") : NameSection.getString("Res")); if (res == null) continue; newTemp.setResidence(res); - World w = Bukkit.getWorld(NameSection.getString("World")); - - if (w == null) - continue; - - double x = NameSection.getDouble("X"); - double y = NameSection.getDouble("Y"); - double z = NameSection.getDouble("Z"); + if (NameSection.contains("World")) { + World w = Bukkit.getWorld(NameSection.getString("World")); + if (w == null) + continue; + double x = NameSection.getDouble("X"); + double y = NameSection.getDouble("Y"); + double z = NameSection.getDouble("Z"); + Location loc = new Location(w, x, y, z); + newTemp.setLocation(loc); + } else { + Location loc = Utils.convertStringToLocation(NameSection.getString("Loc")); + newTemp.setLocation(loc); + } - Location loc = new Location(w, x, y, z); - newTemp.setLocation(loc); Signs.addSign(newTemp); } return; @@ -111,11 +115,8 @@ public void saveSigns() { Signs s = one.getValue(); ++i; String path = "Signs." + i; - writer.set(path + ".Residence", s.GetResidence().getName()); - writer.set(path + ".World", s.GetLocation().getWorld().getName()); - writer.set(path + ".X", s.GetLocation().getBlockX()); - writer.set(path + ".Y", s.GetLocation().getBlockY()); - writer.set(path + ".Z", s.GetLocation().getBlockZ()); + writer.set(path + ".Res", s.getResidence().getName()); + writer.set(path + ".Loc", Utils.convertLocToStringTiny(s.getLocation())); } try { diff --git a/src/com/bekvon/bukkit/residence/signsStuff/Signs.java b/src/com/bekvon/bukkit/residence/signsStuff/Signs.java index c25ded6d3..c94e410f7 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/Signs.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/Signs.java @@ -6,9 +6,7 @@ public class Signs { -// int Category = 0; ClaimedResidence Residence = null; - Location loc = null; public Signs() { @@ -18,17 +16,14 @@ public void setLocation(Location loc) { this.loc = loc; } + @Deprecated public Location GetLocation() { return this.loc; } -// public void setCategory(int Category) { -// this.Category = Category; -// } - -// public int GetCategory() { -// return this.Category; -// } + public Location getLocation() { + return this.loc; + } public void setResidence(ClaimedResidence Residence) { this.Residence = Residence; @@ -36,6 +31,11 @@ public void setResidence(ClaimedResidence Residence) { Residence.getSignsInResidence().add(this); } + public ClaimedResidence getResidence() { + return this.Residence; + } + + @Deprecated public ClaimedResidence GetResidence() { return this.Residence; } diff --git a/src/com/bekvon/bukkit/residence/utils/Utils.java b/src/com/bekvon/bukkit/residence/utils/Utils.java index 3329d2bcf..ae200dae4 100644 --- a/src/com/bekvon/bukkit/residence/utils/Utils.java +++ b/src/com/bekvon/bukkit/residence/utils/Utils.java @@ -102,6 +102,19 @@ public static Block getTargetBlock(Player player, Material lookingFor, int dista return !blocks.isEmpty() ? blocks.get(blocks.size() - 1) : null; } + public static String convertLocToStringTiny(Location loc) { + String map = ""; + if (loc != null) { + if (loc.getWorld() != null) { + map += loc.getWorld().getName(); + map += ";" + loc.getBlockX(); + map += ";" + loc.getBlockY(); + map += ";" + loc.getBlockZ(); + } + } + return map.replace(",", "."); + } + public static String convertLocToStringShort(Location loc) { String map = ""; if (loc != null) { From 1fb3e9043b8cf80456d027ee57931e8759858249 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 May 2019 11:13:30 +0300 Subject: [PATCH 0607/1142] Fix for issue with set pset commands gui in 1.14 servers --- .../bukkit/residence/commands/pset.java | 21 +++++++++++-------- .../bekvon/bukkit/residence/commands/set.java | 12 +++++++---- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 96da8e7f4..98ec4d898 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -77,12 +77,13 @@ public boolean perform(final Residence plugin, final String[] args, final boolea res.getPermissions().setPlayerFlag(sender, args[2], args[3], args[4], resadmin, true); return true; - } else if ((args.length == 2 || args.length == 3) && plugin.getConfigManager().useFlagGUI()) { + } else if ((args.length == 2 || args.length == 3) && plugin.getConfigManager().useFlagGUI()) { + final Player player = (Player) sender; + player.closeInventory(); Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { - Player player = (Player) sender; ClaimedResidence res = null; String targetPlayer = null; if (args.length == 2) { @@ -95,27 +96,29 @@ public void run() { if (res == null) { plugin.msg(sender, lm.Invalid_Residence); - return ; + return; } - if (!plugin.isPlayerExist(player, targetPlayer, true)){ + if (!plugin.isPlayerExist(player, targetPlayer, true)) { plugin.msg(sender, lm.Invalid_Player); return; } if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { plugin.msg(sender, lm.General_NoPermission); - return ; + return; } - SetFlag flag = new SetFlag(res, player, resadmin); + final SetFlag flag = new SetFlag(res, player, resadmin); flag.setTargetPlayer(targetPlayer); flag.recalculatePlayer(res); - player.closeInventory(); plugin.getPlayerListener().getGUImap().put(player.getUniqueId(), flag); - player.openInventory(flag.getInventory()); + + Bukkit.getScheduler().runTask(plugin, () -> { + player.openInventory(flag.getInventory()); + }); + return; } }); - return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index eb4efe3e5..9b24df9f2 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -50,10 +50,11 @@ public boolean perform(final Residence plugin, final String[] args, final boolea res.getPermissions().setFlag(sender, args[2], args[3], resadmin); return true; } else if ((args.length == 1 || args.length == 2) && plugin.getConfigManager().useFlagGUI()) { + final Player player = (Player) sender; + player.closeInventory(); Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { - Player player = (Player) sender; ClaimedResidence res = null; if (args.length == 1) res = plugin.getResidenceManager().getByLoc(player.getLocation()); @@ -68,11 +69,14 @@ public void run() { return; } - SetFlag flag = new SetFlag(res, player, resadmin); + final SetFlag flag = new SetFlag(res, player, resadmin); flag.recalculateResidence(res); - player.closeInventory(); plugin.getPlayerListener().getGUImap().put(player.getUniqueId(), flag); - player.openInventory(flag.getInventory()); + + Bukkit.getScheduler().runTask(plugin, () -> { + player.openInventory(flag.getInventory()); + }); + return; } }); From 6e6abb880b2b7fd8bff454456cc033c99d167bd9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 May 2019 11:17:53 +0300 Subject: [PATCH 0608/1142] Fix for FlagGui reseting material on reload --- src/com/bekvon/bukkit/residence/ConfigManager.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 53bf04dad..397daf591 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -321,8 +321,9 @@ void UpdateFlagFile() { conf.set("Global.FlagPermission." + fl, fl.isEnabled()); } - if (!conf.isConfigurationSection("Global.FlagGui")) + if (!conf.isConfigurationSection("Global.FlagGui")){ conf.createSection("Global.FlagGui"); + } if (!conf.isConfigurationSection("Global.RentedDefault")) { for (Entry one : this.getGlobalCreatorDefaultFlags().getFlags().entrySet()) { @@ -334,7 +335,7 @@ void UpdateFlagFile() { ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); for (Flags fl : Flags.values()) { - guiSection.set(fl.toString(), fl.getIcon().toString()); + guiSection.set(fl.toString(), guiSection.get(fl.toString(),fl.getIcon().toString())); } try { From 124e080792105b742f4373429bc8575e4941cd27 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 May 2019 11:23:19 +0300 Subject: [PATCH 0609/1142] Updating PlaceHolderAPI hook --- .../Placeholders/PlaceholderAPIHook.java | 33 ++++++++++++++++--- .../bekvon/bukkit/residence/Residence.java | 5 ++- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java b/src/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java index cb704cf75..f87b2fe8a 100644 --- a/src/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java +++ b/src/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java @@ -5,17 +5,41 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.Placeholders.Placeholder.CMIPlaceHolders; -import me.clip.placeholderapi.external.EZPlaceholderHook; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; -public class PlaceholderAPIHook extends EZPlaceholderHook { +public class PlaceholderAPIHook extends PlaceholderExpansion { private Residence plugin; public PlaceholderAPIHook(Residence plugin) { - super(plugin, "residence"); this.plugin = plugin; } + @Override + public boolean persist() { + return true; + } + + @Override + public boolean canRegister() { + return true; + } + + @Override + public String getAuthor() { + return plugin.getDescription().getAuthors().toString(); + } + + @Override + public String getIdentifier() { + return "residence"; + } + + @Override + public String getVersion() { + return plugin.getDescription().getVersion(); + } + @Override public String onPlaceholderRequest(Player player, String identifier) { CMIPlaceHolders placeHolder = CMIPlaceHolders.getByName(identifier); @@ -24,5 +48,4 @@ public String onPlaceholderRequest(Player player, String identifier) { } return plugin.getPlaceholderAPIManager().getValue(player, placeHolder); } - -} +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 32884ec2d..6ccd20a3c 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -56,8 +56,8 @@ import com.bekvon.bukkit.residence.Placeholders.Placeholder; import com.bekvon.bukkit.residence.Placeholders.PlaceholderAPIHook; import com.bekvon.bukkit.residence.Siege.ResidenceSiegeListener; -import com.bekvon.bukkit.residence.allNms.v1_13Events; import com.bekvon.bukkit.residence.allNms.v1_10Events; +import com.bekvon.bukkit.residence.allNms.v1_13Events; import com.bekvon.bukkit.residence.allNms.v1_8Events; import com.bekvon.bukkit.residence.allNms.v1_9Events; import com.bekvon.bukkit.residence.api.ChatInterface; @@ -120,7 +120,6 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.CrackShot; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.Sorting; @@ -876,7 +875,7 @@ public void run() { private boolean setupPlaceHolderAPI() { if (!getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) return false; - if ((new PlaceholderAPIHook(this)).hook()) + if ((new PlaceholderAPIHook(this)).register()) Bukkit.getConsoleSender().sendMessage(this.getPrefix() + " PlaceholderAPI hooked."); return true; } From ab4fd0321f9db3fc5ddd18aad67ed77b9ec89ccf Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 May 2019 11:28:34 +0300 Subject: [PATCH 0610/1142] Lets use better comparison method --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index fa7d92f28..15271e529 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1806,7 +1806,7 @@ public boolean isOwner(CommandSender sender) { if (plugin.getConfigManager().isOfflineMode()) return perms.getOwner().equals(sender.getName()); if (sender instanceof Player) - return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); + return perms.getOwnerUUID() == ((Player) sender).getUniqueId(); return true; } From 074bf284a1bba263512ce72e18ff4e361d50a9c0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 May 2019 11:36:33 +0300 Subject: [PATCH 0611/1142] Reverting back some changes made in previous version, this should fix issue when getting players permission group --- .../bekvon/bukkit/residence/containers/ResidencePlayer.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 04d191b8e..71061ac40 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -282,19 +282,14 @@ public PermissionGroup getGroup(String world) { } public ResidencePlayer updatePlayer(Player player) { - if (updated) - return this; this.player = player; this.uuid = player.getUniqueId(); this.userName = player.getName(); this.ofPlayer = player; - updated = true; return this; } private void updatePlayer() { - if (updated) - return; player = Bukkit.getPlayer(this.uuid); if (player != null) updatePlayer(player); From eb7b9580dd765607625e7a8f7a3fb23fab91fb3f Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 18 May 2019 11:41:13 +0300 Subject: [PATCH 0612/1142] Fix for residence chat issue with 1.14 servers --- .../bukkit/residence/chat/ChatChannel.java | 144 +++++++++--------- .../residence/event/ResidenceEvent.java | 70 ++++----- 2 files changed, 108 insertions(+), 106 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index 8e64ce103..5706dca1d 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -1,71 +1,73 @@ -package com.bekvon.bukkit.residence.chat; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.event.ResidenceChatEvent; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Server; -import org.bukkit.entity.Player; - -public class ChatChannel { - - protected String channelName; - protected List members; - protected String ChatPrefix = ""; - protected ChatColor ChannelColor = ChatColor.WHITE; - - public ChatChannel(String channelName, String ChatPrefix, ChatColor chatColor) { - this.channelName = channelName; - this.ChatPrefix = ChatPrefix; - this.ChannelColor = chatColor; - members = new ArrayList(); - } - - public String getChannelName() { - return channelName; - } - - public void setChatPrefix(String ChatPrefix) { - this.ChatPrefix = ChatPrefix; - } - - public void setChannelColor(ChatColor ChannelColor) { - this.ChannelColor = ChannelColor; - } - - public void chat(String sourcePlayer, String message) { - Server serv = Residence.getInstance().getServ(); - ResidenceChatEvent cevent = new ResidenceChatEvent(Residence.getInstance().getResidenceManager().getByName(channelName), serv.getPlayer(sourcePlayer), this.ChatPrefix, message, - this.ChannelColor); - Residence.getInstance().getServ().getPluginManager().callEvent(cevent); - if (cevent.isCancelled()) - return; - for (String member : members) { - Player player = serv.getPlayer(member); - - Residence.getInstance().msg(player, cevent.getChatprefix() + " " + Residence.getInstance().getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent - .getChatMessage()); - } - Bukkit.getConsoleSender().sendMessage("ResidentialChat[" + channelName + "] - " + sourcePlayer + ": " + ChatColor.stripColor(cevent.getChatMessage())); - } - - public void join(String player) { - if (!members.contains(player)) - members.add(player); - } - - public void leave(String player) { - members.remove(player); - } - - public boolean hasMember(String player) { - return members.contains(player); - } - - public int memberCount() { - return members.size(); - } -} +package com.bekvon.bukkit.residence.chat; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.event.ResidenceChatEvent; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Server; +import org.bukkit.entity.Player; + +public class ChatChannel { + + protected String channelName; + protected List members; + protected String ChatPrefix = ""; + protected ChatColor ChannelColor = ChatColor.WHITE; + + public ChatChannel(String channelName, String ChatPrefix, ChatColor chatColor) { + this.channelName = channelName; + this.ChatPrefix = ChatPrefix; + this.ChannelColor = chatColor; + members = new ArrayList(); + } + + public String getChannelName() { + return channelName; + } + + public void setChatPrefix(String ChatPrefix) { + this.ChatPrefix = ChatPrefix; + } + + public void setChannelColor(ChatColor ChannelColor) { + this.ChannelColor = ChannelColor; + } + + public void chat(String sourcePlayer, String message) { + Bukkit.getScheduler().runTask(Residence.getInstance(), () -> { + Server serv = Residence.getInstance().getServ(); + ResidenceChatEvent cevent = new ResidenceChatEvent(Residence.getInstance().getResidenceManager().getByName(channelName), serv.getPlayer(sourcePlayer), this.ChatPrefix, message, + this.ChannelColor); + Residence.getInstance().getServ().getPluginManager().callEvent(cevent); + if (cevent.isCancelled()) + return; + for (String member : members) { + Player player = serv.getPlayer(member); + + Residence.getInstance().msg(player, cevent.getChatprefix() + " " + Residence.getInstance().getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent + .getChatMessage()); + } + Bukkit.getConsoleSender().sendMessage("ResidentialChat[" + channelName + "] - " + sourcePlayer + ": " + ChatColor.stripColor(cevent.getChatMessage())); + }); + } + + public void join(String player) { + if (!members.contains(player)) + members.add(player); + } + + public void leave(String player) { + members.remove(player); + } + + public boolean hasMember(String player) { + return members.contains(player); + } + + public int memberCount() { + return members.size(); + } +} diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java index 5ba53fc43..cdfebdad3 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java @@ -1,35 +1,35 @@ -package com.bekvon.bukkit.residence.event; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -public class ResidenceEvent extends Event { - - private static final HandlerList handlers = new HandlerList(); - private String message; - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - ClaimedResidence res; - - public ResidenceEvent(String eventName, ClaimedResidence resref) { - message = eventName; - res = resref; - } - - public String getMessage() { - return message; - } - - public ClaimedResidence getResidence() { - return res; - } -} +package com.bekvon.bukkit.residence.event; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class ResidenceEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private String message; + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + ClaimedResidence res; + + public ResidenceEvent(String eventName, ClaimedResidence resref) { + message = eventName; + res = resref; + } + + public String getMessage() { + return message; + } + + public ClaimedResidence getResidence() { + return res; + } +} From 2fcd9467010b495a784ba672e19d7b4654fb6dce Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 3 Jun 2019 16:09:38 +0300 Subject: [PATCH 0613/1142] Fix for issue with owner recognition --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 2 +- src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 15271e529..fa7d92f28 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1806,7 +1806,7 @@ public boolean isOwner(CommandSender sender) { if (plugin.getConfigManager().isOfflineMode()) return perms.getOwner().equals(sender.getName()); if (sender instanceof Player) - return perms.getOwnerUUID() == ((Player) sender).getUniqueId(); + return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); return true; } diff --git a/src/plugin.yml b/src/plugin.yml index bbafa7e5e..dc6cb3c23 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.6.2 +version: 4.8.6.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From e2978e7613db311dc84205fdf01cec1b0e3521d7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 20 Jun 2019 14:31:14 +0300 Subject: [PATCH 0614/1142] Better teleportation for players when location is not set --- .../bukkit/residence/commands/compass.java | 2 +- .../protection/ClaimedResidence.java | 3656 +++++++++-------- .../bekvon/bukkit/residence/utils/Utils.java | 16 + 3 files changed, 1874 insertions(+), 1800 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index fe2252435..ef2852ff0 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -40,7 +40,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman CuboidArea area = res.getMainArea(); if (area == null) return false; - Location loc = res.getTeleportLocation(); + Location loc = res.getTeleportLocation(player); if (loc == null) return false; player.setCompassTarget(loc); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index fa7d92f28..80ac098d0 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -54,1344 +54,1391 @@ import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.text.help.PageInfo; import com.bekvon.bukkit.residence.utils.Debug; +import com.bekvon.bukkit.residence.utils.Utils; public class ClaimedResidence { - private String resName = null; - protected ClaimedResidence parent; - protected Map areas; - protected Map subzones; - protected ResidencePermissions perms; - protected ResidenceBank bank; - protected Double BlockSellPrice = 0.0; - protected Location tpLoc; - protected String enterMessage; - protected String leaveMessage; - protected String ShopDesc = null; - protected String ChatPrefix = ""; - protected ChatColor ChannelColor = ChatColor.WHITE; - protected ResidenceItemList ignorelist; - protected ResidenceItemList blacklist; - protected boolean mainRes = false; - protected long createTime = 0L; + private String resName = null; + protected ClaimedResidence parent; + protected Map areas; + protected Map subzones; + protected ResidencePermissions perms; + protected ResidenceBank bank; + protected Double BlockSellPrice = 0.0; + protected Location tpLoc; + protected String enterMessage; + protected String leaveMessage; + protected String ShopDesc = null; + protected String ChatPrefix = ""; + protected ChatColor ChannelColor = ChatColor.WHITE; + protected ResidenceItemList ignorelist; + protected ResidenceItemList blacklist; + protected boolean mainRes = false; + protected long createTime = 0L; - private Long leaseExpireTime = null; + private Long leaseExpireTime = null; - protected List cmdWhiteList = new ArrayList(); - protected List cmdBlackList = new ArrayList(); + protected List cmdWhiteList = new ArrayList(); + protected List cmdBlackList = new ArrayList(); - List ShopVoteList = new ArrayList(); + List ShopVoteList = new ArrayList(); - protected RentableLand rentableland = null; - protected RentedLand rentedland = null; + protected RentableLand rentableland = null; + protected RentedLand rentedland = null; - protected Integer sellPrice = -1; + protected Integer sellPrice = -1; - private Residence plugin; + private Residence plugin; - private ResidenceSiege siege; + private ResidenceSiege siege; - private Set signsInResidence = new HashSet(); + private Set signsInResidence = new HashSet(); - public String getResidenceName() { - return resName; - } + public String getResidenceName() { + return resName; + } + + public void setName(String name) { + if (name.contains(".")) + resName = name.split("\\.")[name.split("\\.").length - 1]; + else + resName = name; + } + + public void setCreateTime() { + createTime = System.currentTimeMillis(); + } + + public long getCreateTime() { + return createTime; + } + + public Integer getSellPrice() { + return sellPrice; + } + + public void setSellPrice(Integer amount) { + sellPrice = amount; + } + + public boolean isForSell() { + return plugin.getTransactionManager().isForSale(this.getName()); + } + + public boolean isForRent() { + return plugin.getRentManager().isForRent(this); + } + + public boolean isSubzoneForRent() { + for (Entry one : subzones.entrySet()) { + if (one.getValue().isForRent()) + return true; + if (one.getValue().isSubzoneForRent()) + return true; + } + return false; + } + + public boolean isSubzoneRented() { + for (Entry one : subzones.entrySet()) { + if (one.getValue().isRented()) + return true; + if (one.getValue().isSubzoneRented()) + return true; + } + return false; + } + + public ClaimedResidence getRentedSubzone() { + for (Entry one : subzones.entrySet()) { + if (one.getValue().isRented()) + return one.getValue(); + if (one.getValue().getRentedSubzone() != null) + return one.getValue().getRentedSubzone(); + } + return null; + } + + public boolean isParentForRent() { + if (this.getParent() != null) + return this.getParent().isForRent() ? true : this.getParent().isParentForRent(); + return false; + } + + public boolean isParentForSell() { + if (this.getParent() != null) + return this.getParent().isForSell() ? true : this.getParent().isParentForSell(); + return false; + } + + public boolean isRented() { + return plugin.getRentManager().isRented(this); + } + + public void setRentable(RentableLand rl) { + this.rentableland = rl; + } + + public RentableLand getRentable() { + return this.rentableland; + } + + public void setRented(RentedLand rl) { + this.rentedland = rl; + } + + public RentedLand getRentedLand() { + return this.rentedland; + } + + public ClaimedResidence(String creationWorld, Residence plugin) { + this(plugin.getServerLandName(), creationWorld, plugin); + } + + public ClaimedResidence(String creator, String creationWorld, Residence plugin) { + this(plugin); + perms = new ResidencePermissions(this, creator, creationWorld); + } + + public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence, Residence plugin) { + this(creator, creationWorld, plugin); + parent = parentResidence; + } + + public ClaimedResidence(Residence plugin) { + subzones = new HashMap<>(); + areas = new HashMap<>(); + bank = new ResidenceBank(this); + blacklist = new ResidenceItemList(plugin, this, ListType.BLACKLIST); + ignorelist = new ResidenceItemList(plugin, this, ListType.IGNORELIST); + this.plugin = plugin; + } + + public boolean isMainResidence() { + return mainRes; + } + + public void setMainResidence(boolean state) { + mainRes = state; + } + + public boolean isSubzone() { + return parent == null ? false : true; + } + + public int getSubzoneDeep() { + return getSubzoneDeep(0); + } + + public int getSubzoneDeep(int deep) { + deep++; + if (parent != null) { + return parent.getSubzoneDeep(deep); + } + return deep; + } + + public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() < group.getMinX()) { + plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); + return false; + } + if (area.getYSize() < group.getMinY()) { + plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); + return false; + } + if (area.getZSize() < group.getMinZ()) { + plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); + return false; + } + return true; + } + + public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() < group.getSubzoneMinX()) { + plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); + return false; + } + if (area.getYSize() < group.getSubzoneMinY()) { + plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); + return false; + } + if (area.getZSize() < group.getSubzoneMinZ()) { + plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); + return false; + } + return true; + } + + public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() > group.getMaxX()) { + plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); + return false; + } + if (area.getYSize() > group.getMaxY()) { + plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); + return false; + } + if (area.getZSize() > group.getMaxZ()) { + plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); + return false; + } + return true; + } + + public boolean isSmallerThanMaxSubzone(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() > group.getSubzoneMaxX()) { + plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); + return false; + } + if (area.getYSize() > group.getSubzoneMaxY()) { + plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); + return false; + } + if (area.getZSize() > group.getSubzoneMaxZ()) { + plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); + return false; + } + return true; + } + + public boolean addArea(CuboidArea area, String name) { + return addArea(null, area, name, true); + } + + public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin) { + return addArea(player, area, name, resadmin, true); + } + + public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin, boolean chargeMoney) { + if (!plugin.validName(name)) { + if (player != null) { + plugin.msg(player, lm.Invalid_NameCharacters); + } + return false; + } + + String NName = name; + name = name.toLowerCase(); + + if (areas.containsKey(NName)) { + if (player != null) { + plugin.msg(player, lm.Area_Exists); + } + return false; + } + + if (this.isSubzone() && !isBiggerThanMinSubzone(player, area, resadmin) + || !this.isSubzone() && !isBiggerThanMin(player, area, resadmin)) + return false; + + if (!resadmin && plugin.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { + boolean inside = false; + for (CuboidArea are : areas.values()) { + if (are.isAreaWithinArea(area)) { + inside = true; + } + } + if (!inside) { + return false; + } + } + if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { + if (player != null) { + plugin.msg(player, lm.Area_DiffWorld); + } + return false; + } + if (parent == null) { + String collideResidence = plugin.getResidenceManager().checkAreaCollision(area, this); + ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); + if (cRes != null) { + if (player != null) { + plugin.msg(player, lm.Area_Collision, cRes.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(area); + v.setErrorAreas(cRes); + plugin.getSelectionManager().showBounds(player, v); + } + return false; + } + } else { + String[] szs = parent.listSubzones(); + for (String sz : szs) { + ClaimedResidence res = parent.getSubzone(sz); + if (res != null && res != this) { + if (res.checkCollision(area)) { + if (player != null) { + plugin.msg(player, lm.Area_SubzoneCollision, sz); + } + return false; + } + } + } + } + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + if (parent != null) { + if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { + plugin.msg(player, lm.Area_NotWithinParent); + return false; + } + if (!parent.getPermissions().hasResidencePermission(player, true) + && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { + plugin.msg(player, lm.Residence_ParentNoPermission); + return false; + } + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); + if (!this.isSubzone() && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create") + || this.isSubzone() && !group.canCreateResidences() + && !plugin.hasPermission(player, "residence.create.subzone")) { + return false; + } + + if (areas.size() >= group.getMaxPhysicalPerResidence()) { + plugin.msg(player, lm.Area_MaxPhysical); + return false; + } + if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) + || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { + plugin.msg(player, lm.Area_SizeLimit); + return false; + } + + if (group.getMinHeight() > area.getLowLoc().getBlockY()) { + plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); + return false; + } + + if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { + plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); + return false; + } + + if (!resadmin) { + if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) + return false; + + if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) + return false; + } + + if (chargeMoney && parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { + double chargeamount = area.getCost(group); + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + return false; + } + } + } + + ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, NName, this, area); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + plugin.getResidenceManager().removeChunkList(this.getName()); + areas.put(name, area); + plugin.getResidenceManager().calculateChunks(this.getName()); + return true; + } + + public boolean replaceArea(CuboidArea neware, String name) { + return this.replaceArea(null, neware, name, true); + } + + public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { + if (!areas.containsKey(name)) { + if (player != null) + plugin.msg(player, lm.Area_NonExist); + return false; + } + CuboidArea oldarea = areas.get(name); + if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { + if (player != null) + plugin.msg(player, lm.Area_DiffWorld); + return false; + } + if (parent == null) { + String collideResidence = plugin.getResidenceManager().checkAreaCollision(newarea, this); + ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); + if (cRes != null && player != null) { + plugin.msg(player, lm.Area_Collision, cRes.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(this.getAreaArray()); + v.setErrorAreas(cRes.getAreaArray()); + plugin.getSelectionManager().showBounds(player, v); + return false; + } + } else { + String[] szs = parent.listSubzones(); + for (String sz : szs) { + ClaimedResidence res = parent.getSubzone(sz); + if (res != null && res != this) { + if (res.checkCollision(newarea)) { + if (player != null) { + plugin.msg(player, lm.Area_SubzoneCollision, sz); + Visualizer v = new Visualizer(player); + v.setErrorAreas(res.getAreaArray()); + plugin.getSelectionManager().showBounds(player, v); + } + return false; + } + } + } + } + // Don't remove subzones that are not in the area anymore, show colliding areas + String[] szs = listSubzones(); + for (String sz : szs) { + ClaimedResidence res = getSubzone(sz); + if (res == null || res == this) + continue; + String[] szareas = res.getAreaList(); + for (String area : szareas) { + if (newarea.isAreaWithinArea(res.getArea(area))) + continue; + + boolean good = false; + for (CuboidArea arae : getAreaArray()) { + if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { + good = true; + } + } + if (!good) { + plugin.msg(player, lm.Area_Collision, res.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(this.getAreaArray()); + v.setErrorAreas(res.getAreaArray()); + plugin.getSelectionManager().showBounds(player, v); + return false; + } + + } + if (res.getAreaArray().length == 0) { + removeSubzone(sz); + } + } + + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + if (parent != null) { + if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { + plugin.msg(player, lm.Area_NotWithinParent); + return false; + } + if (!parent.getPermissions().hasResidencePermission(player, true) + && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { + plugin.msg(player, lm.Residence_ParentNoPermission); + return false; + } + } + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (!group.canCreateResidences() && !plugin.hasPermission(player, "residence.resize")) { + return false; + } + + if (oldarea.getSize() < newarea.getSize() + && (!this.isSubzone() && !isSmallerThanMax(player, newarea, resadmin) + || this.isSubzone() && !isSmallerThanMaxSubzone(player, newarea, resadmin))) { + plugin.msg(player, lm.Area_SizeLimit); + return false; + } + if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { + plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); + return false; + } + if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { + plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); + return false; + } + + if (!isBiggerThanMin(player, newarea, resadmin)) + return false; + + if (!resadmin) { + if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) + return false; + if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) + return false; + } + + if (parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { + double chargeamount = newarea.getCost(group) - oldarea.getCost(group); + if (chargeamount > 0) { + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + return false; + } + } + } + } + + ResidenceSizeChangeEvent resevent = new ResidenceSizeChangeEvent(player, this, oldarea, newarea); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + if ((!resadmin) && (player != null)) { + int chargeamount = (int) Math + .ceil((newarea.getSize() - oldarea.getSize()) * getBlockSellPrice().doubleValue()); + if ((chargeamount < 0) && (this.plugin.getConfigManager().useResMoneyBack())) { + if (!this.isServerLand()) + this.plugin.getTransactionManager().giveEconomyMoney(player, -chargeamount); + } + } + + plugin.getResidenceManager().removeChunkList(this.getName()); + areas.remove(name); + areas.put(name, newarea); + plugin.getResidenceManager().calculateChunks(this.getName()); + if (player != null) + plugin.msg(player, lm.Area_Update); + return true; + } + + public boolean addSubzone(String name, Location loc1, Location loc2) { + return this.addSubzone(null, loc1, loc2, name, true); + } + + public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { + if (player == null) { + return this.addSubzone(null, plugin.getServerLandName(), loc1, loc2, name, resadmin); + } + return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); + } + + public boolean isServerLand() { + return this.getOwnerUUID().toString() == Residence.getInstance().getServerLandUUID(); + } + + public boolean addSubzone(Player player, String name, boolean resadmin) { + if (Residence.getInstance().getSelectionManager().hasPlacedBoth(player)) { + Location loc1 = Residence.getInstance().getSelectionManager().getPlayerLoc1(player); + Location loc2 = Residence.getInstance().getSelectionManager().getPlayerLoc2(player); + return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); + } + return false; + } + + public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, + boolean resadmin) { + if (!plugin.validName(name)) { + if (player != null) { + plugin.msg(player, lm.Invalid_NameCharacters); + } + return false; + } + if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { + if (player != null) { + plugin.msg(player, lm.Subzone_SelectInside); + } + return false; + } + + String NName = name; + name = name.toLowerCase(); + + if (subzones.containsKey(name)) { + if (player != null) { + plugin.msg(player, lm.Subzone_Exists, NName); + } + return false; + } + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + if (!this.perms.playerHas(player.getName(), Flags.subzone, + this.perms.playerHas(player, Flags.admin, false))) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + } + + if (this.getSubzoneList().length >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { + plugin.msg(player, lm.Subzone_MaxAmount); + return false; + } + + if (this.getZoneDepth() >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { + plugin.msg(player, lm.Subzone_MaxDepth); + return false; + } + } + + CuboidArea newArea = new CuboidArea(loc1, loc2); + + Set> set = subzones.entrySet(); + for (Entry resEntry : set) { + ClaimedResidence res = resEntry.getValue(); + if (res.checkCollision(newArea)) { + if (player != null) { + plugin.msg(player, lm.Subzone_Collide, resEntry.getKey()); + Visualizer v = new Visualizer(player); + v.setAreas(newArea); + v.setErrorAreas(res); + plugin.getSelectionManager().showBounds(player, v); + } + return false; + } + } + ClaimedResidence newres; + if (player != null) { + newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); + newres.addArea(player, newArea, NName, resadmin); + } else { + newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); + newres.addArea(newArea, NName); + } + + if (newres.getAreaCount() != 0) { + newres.getPermissions().applyDefaultFlags(); + if (player != null) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + newres.setEnterMessage(group.getDefaultEnterMessage()); + newres.setLeaveMessage(group.getDefaultLeaveMessage()); + } + if (plugin.getConfigManager().flagsInherit()) { + newres.getPermissions().setParent(perms); + } + + newres.resName = NName; + + newres.setCreateTime(); + + ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, NName, newres, newArea); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + subzones.put(name, newres); + if (player != null) { + plugin.msg(player, lm.Area_Create, NName); + plugin.msg(player, lm.Subzone_Create, NName); + } + return true; + } + if (player != null) { + plugin.msg(player, lm.Subzone_CreateFail, NName); + } + return false; + } + + public ClaimedResidence getSubzoneByLoc(Location loc) { + Set> set = subzones.entrySet(); + ClaimedResidence res = null; + for (Entry entry : set) { + if (entry.getValue().containsLoc(loc)) { + res = entry.getValue(); + break; + } + } + if (res == null) + return null; + ClaimedResidence subrez = res.getSubzoneByLoc(loc); + if (subrez == null) { + return res; + } + return subrez; + } + + public ClaimedResidence getSubzone(String subzonename) { + subzonename = subzonename.toLowerCase(); + + if (!subzonename.contains(".")) { + return subzones.get(subzonename); + } + String split[] = subzonename.split("\\."); + ClaimedResidence get = subzones.get(split[0]); + for (int i = 1; i < split.length; i++) { + if (get == null) { + return null; + } + get = get.getSubzone(split[i]); + } + return get; + } + + public String getSubzoneNameByRes(ClaimedResidence res) { + Set> set = subzones.entrySet(); + for (Entry entry : set) { + if (entry.getValue() == res) { + return entry.getValue().getResidenceName(); + } + String n = entry.getValue().getSubzoneNameByRes(res); + if (n != null) { + return entry.getValue().getResidenceName() + "." + n; + } + } + return null; + } + + public String[] getSubzoneList() { + ArrayList zones = new ArrayList<>(); + Set set = subzones.keySet(); + for (String key : set) { + if (key != null) { + zones.add(key); + } + } + return zones.toArray(new String[zones.size()]); + } + + public boolean checkCollision(CuboidArea area) { + Set set = areas.keySet(); + for (String key : set) { + CuboidArea checkarea = areas.get(key); + if (checkarea != null) { + if (checkarea.checkCollision(area)) { + return true; + } + } + } + return false; + } + + public boolean containsLoc(Location loc) { + Collection keys = areas.values(); + for (CuboidArea key : keys) { + if (key.containsLoc(loc)) { + if (parent != null) + return parent.containsLoc(loc); + return true; + } + } + return false; + } + + public ClaimedResidence getParent() { + return parent; + } + + public String getTopParentName() { + return this.getTopParent().getName(); + } + + public ClaimedResidence getTopParent() { + if (parent == null) + return this; + return parent.getTopParent(); + } + + public boolean isTopArea() { + return parent == null; + } + + public boolean removeSubzone(String name) { + return this.removeSubzone(null, name, true); + } + + public boolean removeSubzone(Player player, String name, boolean resadmin) { + if (name == null) + return false; + name = name.toLowerCase(); + ClaimedResidence res = subzones.get(name); + if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + subzones.remove(name); + if (player != null) { + plugin.msg(player, lm.Subzone_Remove, name); + } + return true; + } + + public long getTotalSize() { + Collection set = areas.values(); + long size = 0; + if (!plugin.getConfigManager().isNoCostForYBlocks()) + for (CuboidArea entry : set) { + size = size + entry.getSize(); + } + else + for (CuboidArea entry : set) { + size = size + (entry.getXSize() * entry.getZSize()); + } + return size; + } + + public long getXZSize() { + Collection set = areas.values(); + long size = 0; + for (CuboidArea entry : set) { + size = size + (entry.getXSize() * entry.getZSize()); + } + return size; + } + + public CuboidArea[] getAreaArray() { + CuboidArea[] temp = new CuboidArea[areas.size()]; + int i = 0; + for (CuboidArea area : areas.values()) { + temp[i] = area; + i++; + } + return temp; + } + + public Map getAreaMap() { + return areas; + } + + public ResidencePermissions getPermissions() { + return perms; + } + + public String getEnterMessage() { + return enterMessage; + } + + public String getLeaveMessage() { + return leaveMessage; + } + + public String getShopDesc() { + return ShopDesc; + } + + public void setEnterMessage(String message) { + enterMessage = message; + } + + public void setLeaveMessage(String message) { + leaveMessage = message; + } + + public void setShopDesc(String message) { + ShopDesc = message; + } + + public void setEnterLeaveMessage(CommandSender sender, String message, boolean enter, boolean resadmin) { + if (message != null) { + if (message.equals("")) { + message = null; + } + } + if (sender instanceof Player) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer((Player) sender); + PermissionGroup group = rPlayer.getGroup(); + if (!group.canSetEnterLeaveMessages() && !resadmin) { + plugin.msg(sender, lm.Residence_OwnerNoPermission); + return; + } + if (!perms.hasResidencePermission(sender, false) && !resadmin) { + plugin.msg(sender, lm.General_NoPermission); + return; + } + } + if (enter) { + this.setEnterMessage(message); + } else { + this.setLeaveMessage(message); + } + plugin.msg(sender, lm.Residence_MessageChange); + } + + public Location getMiddleFreeLoc(Location insideLoc, Player player) { + Debug.D("d"); + CuboidArea area = this.getAreaByLoc(insideLoc); + if (area == null) { + return insideLoc; + } + + int y = area.getHighLoc().getBlockY(); + int lowY = area.getLowLoc().getBlockY(); + + int x = area.getLowLoc().getBlockX() + area.getXSize() / 2; + int z = area.getLowLoc().getBlockZ() + area.getZSize() / 2; + + Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); + boolean found = false; + int it = 1; + int maxIt = newLoc.getBlockY() + 1; + while (it < maxIt) { + it++; + + if (newLoc.getBlockY() < lowY) + break; + + newLoc.add(0, -1, 0); + + Block block = newLoc.getBlock(); + Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); + Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); + if (ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2) + && !ResidencePlayerListener.isEmptyBlock(block3)) { + found = true; + break; + } + } + if (found) { + if (player != null) { + newLoc.setPitch(player.getLocation().getPitch()); + newLoc.setYaw(player.getLocation().getYaw()); + } + return newLoc; + } + return getOutsideFreeLoc(insideLoc, player); + } + + public Location getOutsideFreeLoc(Location insideLoc, Player player) { + CuboidArea area = this.getAreaByLoc(insideLoc); + if (area == null) { + return insideLoc; + } + + List randomLocList = new ArrayList(); + + for (int z = -1; z < area.getZSize() + 1; z++) { + randomLocList.add(new RandomLoc(area.getLowLoc().getX(), 0, area.getLowLoc().getZ() + z)); + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + area.getXSize(), 0, area.getLowLoc().getZ() + z)); + } + + for (int x = -1; x < area.getXSize() + 1; x++) { + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ())); + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ() + area.getZSize())); + } + + Location loc = insideLoc.clone(); + + boolean found = false; + int it = 0; + int maxIt = 30; + while (!found && it < maxIt) { + it++; + + Random ran = new Random(System.currentTimeMillis()); + if (randomLocList.isEmpty()) + break; + int check = ran.nextInt(randomLocList.size()); + RandomLoc place = randomLocList.get(check); + randomLocList.remove(check); + double x = place.getX(); + double z = place.getZ(); + + loc.setX(x); + loc.setZ(z); + loc.setY(area.getHighLoc().getBlockY()); + + int max = area.getHighLoc().getBlockY(); + max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; + + for (int i = max; i > area.getLowLoc().getY(); i--) { + loc.setY(i); + Block block = loc.getBlock(); + Block block2 = loc.clone().add(0, 1, 0).getBlock(); + Block block3 = loc.clone().add(0, -1, 0).getBlock(); + if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) + && ResidencePlayerListener.isEmptyBlock(block2)) { + break; + } + } + + if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER) + continue; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) + && !player.hasPermission("residence.admin.tp")) + continue; + + found = true; + loc.add(0.5, 0.1, 0.5); + break; + } + + if (!found && plugin.getConfigManager().getKickLocation() != null) + return plugin.getConfigManager().getKickLocation(); + if (player != null) { + loc.setPitch(player.getLocation().getPitch()); + loc.setYaw(player.getLocation().getYaw()); + } + return loc; + } + + public CuboidArea getMainArea() { + CuboidArea area = areas.get(this.isSubzone() ? this.getResidenceName() : "main"); + if (area == null && !areas.isEmpty()) + for (Entry one : areas.entrySet()) { + area = one.getValue(); + break; + } + return area; + } - public void setName(String name) { - if (name.contains(".")) - resName = name.split("\\.")[name.split("\\.").length - 1]; - else - resName = name; - } + public CuboidArea getAreaByLoc(Location loc) { + for (CuboidArea thisarea : areas.values()) { + if (thisarea.containsLoc(loc)) { + return thisarea; + } + } + return null; + } - public void setCreateTime() { - createTime = System.currentTimeMillis(); - } + public String[] listSubzones() { + String list[] = new String[subzones.size()]; + int i = 0; + for (String res : subzones.keySet()) { + list[i] = res; + i++; + } + return list; + } - public long getCreateTime() { - return createTime; - } + public List getSubzones() { + List list = new ArrayList(); + for (Entry res : subzones.entrySet()) { + list.add(res.getValue()); + } + return list; + } - public Integer getSellPrice() { - return sellPrice; - } + public int getSubzonesAmount(Boolean includeChild) { + int i = 0; + for (Entry res : subzones.entrySet()) { + i++; + if (includeChild) + i += res.getValue().getSubzonesAmount(includeChild); + } + return i; + } - public void setSellPrice(Integer amount) { - sellPrice = amount; - } + public void printSubzoneList(CommandSender sender, int page) { - public boolean isForSell() { - return plugin.getTransactionManager().isForSale(this.getName()); - } + PageInfo pi = new PageInfo(6, subzones.size(), page); - public boolean isForRent() { - return plugin.getRentManager().isForRent(this); - } + if (!pi.isPageOk()) { + sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); + return; + } - public boolean isSubzoneForRent() { - for (Entry one : subzones.entrySet()) { - if (one.getValue().isForRent()) - return true; - if (one.getValue().isSubzoneForRent()) - return true; - } - return false; - } + plugin.msg(sender, lm.InformationPage_TopLine, plugin.msg(lm.General_Subzones)); + plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), + pi.getTotalPages(), pi.getTotalEntries())); + RawMessage rm = new RawMessage(); + for (int i = pi.getStart(); i <= pi.getEnd(); i++) { + ClaimedResidence res = getSubzones().get(i); + if (res == null) + continue; + rm.add(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " + + plugin.msg(lm.General_Owner, res.getOwner()), "Teleport to " + res.getName(), + "res tp " + res.getName()); + rm.show(sender); + rm.clear(); + } - public boolean isSubzoneRented() { - for (Entry one : subzones.entrySet()) { - if (one.getValue().isRented()) - return true; - if (one.getValue().isSubzoneRented()) - return true; + plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, "res sublist " + this.getName()); } - return false; - } - - public ClaimedResidence getRentedSubzone() { - for (Entry one : subzones.entrySet()) { - if (one.getValue().isRented()) - return one.getValue(); - if (one.getValue().getRentedSubzone() != null) - return one.getValue().getRentedSubzone(); - } - return null; - } - - public boolean isParentForRent() { - if (this.getParent() != null) - return this.getParent().isForRent() ? true : this.getParent().isParentForRent(); - return false; - } - - public boolean isParentForSell() { - if (this.getParent() != null) - return this.getParent().isForSell() ? true : this.getParent().isParentForSell(); - return false; - } - - public boolean isRented() { - return plugin.getRentManager().isRented(this); - } - - public void setRentable(RentableLand rl) { - this.rentableland = rl; - } - - public RentableLand getRentable() { - return this.rentableland; - } - - public void setRented(RentedLand rl) { - this.rentedland = rl; - } - - public RentedLand getRentedLand() { - return this.rentedland; - } - - public ClaimedResidence(String creationWorld, Residence plugin) { - this(plugin.getServerLandName(), creationWorld, plugin); - } - - public ClaimedResidence(String creator, String creationWorld, Residence plugin) { - this(plugin); - perms = new ResidencePermissions(this, creator, creationWorld); - } - - public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence, Residence plugin) { - this(creator, creationWorld, plugin); - parent = parentResidence; - } - - public ClaimedResidence(Residence plugin) { - subzones = new HashMap<>(); - areas = new HashMap<>(); - bank = new ResidenceBank(this); - blacklist = new ResidenceItemList(plugin, this, ListType.BLACKLIST); - ignorelist = new ResidenceItemList(plugin, this, ListType.IGNORELIST); - this.plugin = plugin; - } - - public boolean isMainResidence() { - return mainRes; - } - - public void setMainResidence(boolean state) { - mainRes = state; - } - - public boolean isSubzone() { - return parent == null ? false : true; - } - - public int getSubzoneDeep() { - return getSubzoneDeep(0); - } - - public int getSubzoneDeep(int deep) { - deep++; - if (parent != null) { - return parent.getSubzoneDeep(deep); - } - return deep; - } - - public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() < group.getMinX()) { - plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); - return false; - } - if (area.getYSize() < group.getMinY()) { - plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); - return false; - } - if (area.getZSize() < group.getMinZ()) { - plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); - return false; - } - return true; - } - - public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() < group.getSubzoneMinX()) { - plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); - return false; - } - if (area.getYSize() < group.getSubzoneMinY()) { - plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); - return false; - } - if (area.getZSize() < group.getSubzoneMinZ()) { - plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); - return false; - } - return true; - } - - public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() > group.getMaxX()) { - plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); - return false; - } - if (area.getYSize() > group.getMaxY()) { - plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); - return false; - } - if (area.getZSize() > group.getMaxZ()) { - plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); - return false; - } - return true; - } - - public boolean isSmallerThanMaxSubzone(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() > group.getSubzoneMaxX()) { - plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); - return false; - } - if (area.getYSize() > group.getSubzoneMaxY()) { - plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); - return false; - } - if (area.getZSize() > group.getSubzoneMaxZ()) { - plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); - return false; - } - return true; - } - - public boolean addArea(CuboidArea area, String name) { - return addArea(null, area, name, true); - } - - public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin) { - return addArea(player, area, name, resadmin, true); - } - - public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin, boolean chargeMoney) { - if (!plugin.validName(name)) { - if (player != null) { - plugin.msg(player, lm.Invalid_NameCharacters); - } - return false; - } - - String NName = name; - name = name.toLowerCase(); - - if (areas.containsKey(NName)) { - if (player != null) { - plugin.msg(player, lm.Area_Exists); - } - return false; - } - - if (this.isSubzone() && !isBiggerThanMinSubzone(player, area, resadmin) || !this.isSubzone() && !isBiggerThanMin(player, area, resadmin)) - return false; - - if (!resadmin && plugin.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { - boolean inside = false; - for (CuboidArea are : areas.values()) { - if (are.isAreaWithinArea(area)) { - inside = true; - } - } - if (!inside) { - return false; - } - } - if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { - if (player != null) { - plugin.msg(player, lm.Area_DiffWorld); - } - return false; - } - if (parent == null) { - String collideResidence = plugin.getResidenceManager().checkAreaCollision(area, this); - ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); - if (cRes != null) { - if (player != null) { - plugin.msg(player, lm.Area_Collision, cRes.getName()); - Visualizer v = new Visualizer(player); - v.setAreas(area); - v.setErrorAreas(cRes); - plugin.getSelectionManager().showBounds(player, v); + + public void printAreaList(Player player, int page) { + ArrayList temp = new ArrayList<>(); + for (String area : areas.keySet()) { + temp.add(area); } - return false; - } - } else { - String[] szs = parent.listSubzones(); - for (String sz : szs) { - ClaimedResidence res = parent.getSubzone(sz); - if (res != null && res != this) { - if (res.checkCollision(area)) { - if (player != null) { - plugin.msg(player, lm.Area_SubzoneCollision, sz); - } - return false; - } + plugin.getInfoPageManager().printInfo(player, "res area list " + this.getName(), + plugin.msg(lm.General_PhysicalAreas), temp, page); + } + + public void printAdvancedAreaList(Player player, int page) { + ArrayList temp = new ArrayList<>(); + for (Entry entry : areas.entrySet()) { + CuboidArea a = entry.getValue(); + Location h = a.getHighLoc(); + Location l = a.getLowLoc(); + temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED + entry.getKey() + " " + + ChatColor.YELLOW + "P1:" + ChatColor.RED + "(" + h.getBlockX() + "," + h.getBlockY() + "," + + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); } - } + plugin.getInfoPageManager().printInfo(player, "res area listall " + this.getName(), + plugin.msg(lm.General_PhysicalAreas), temp, page); } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - if (parent != null) { - if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { - plugin.msg(player, lm.Area_NotWithinParent); - return false; - } - if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { - plugin.msg(player, lm.Residence_ParentNoPermission); - return false; + + public String[] getAreaList() { + String arealist[] = new String[areas.size()]; + int i = 0; + for (Entry entry : areas.entrySet()) { + arealist[i] = entry.getKey(); + i++; } - } + return arealist; + } - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + public int getZoneDepth() { + int count = 0; + ClaimedResidence res = parent; + while (res != null) { + count++; + res = res.getParent(); + } + return count; + } - PermissionGroup group = rPlayer.getGroup(); - if (!this.isSubzone() && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create") || - this.isSubzone() && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create.subzone")) { - return false; - } +// public Location getTeleportLocation() { +// return getTeleportLocation(null); +// } - if (areas.size() >= group.getMaxPhysicalPerResidence()) { - plugin.msg(player, lm.Area_MaxPhysical); - return false; - } - if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { - plugin.msg(player, lm.Area_SizeLimit); - return false; - } + public Location getTeleportLocation(Player player) { + Debug.D("3 ss"); + tpLoc = null; + if (tpLoc == null) { + Debug.D("33"); + if (this.getMainArea() == null) + return null; + Debug.D("4"); + Location low = this.getMainArea().getLowLoc(); + Location high = this.getMainArea().getHighLoc(); + Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, + (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); + return this.getMiddleFreeLoc(t, player); + } + return tpLoc; + } - if (group.getMinHeight() > area.getLowLoc().getBlockY()) { - plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); - return false; - } + public void setTpLoc(Player player, boolean resadmin) { + if (!this.perms.hasResidencePermission(player, false) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return; + } + if (!this.containsLoc(player.getLocation())) { + plugin.msg(player, lm.Residence_NotIn); + return; + } + tpLoc = player.getLocation(); + plugin.msg(player, lm.Residence_SetTeleportLocation); + } - if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { - plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); - return false; - } - - if (!resadmin) { - if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) - return false; - - if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) - return false; - } - - if (chargeMoney && parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { - double chargeamount = area.getCost(group); - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { - return false; - } - } - } - - ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, NName, this, area); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - plugin.getResidenceManager().removeChunkList(this.getName()); - areas.put(name, area); - plugin.getResidenceManager().calculateChunks(this.getName()); - return true; - } - - public boolean replaceArea(CuboidArea neware, String name) { - return this.replaceArea(null, neware, name, true); - } - - public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { - if (!areas.containsKey(name)) { - if (player != null) - plugin.msg(player, lm.Area_NonExist); - return false; - } - CuboidArea oldarea = areas.get(name); - if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { - if (player != null) - plugin.msg(player, lm.Area_DiffWorld); - return false; - } - if (parent == null) { - String collideResidence = plugin.getResidenceManager().checkAreaCollision(newarea, this); - ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); - if (cRes != null && player != null) { - plugin.msg(player, lm.Area_Collision, cRes.getName()); - Visualizer v = new Visualizer(player); - v.setAreas(this.getAreaArray()); - v.setErrorAreas(cRes.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); - return false; - } - } else { - String[] szs = parent.listSubzones(); - for (String sz : szs) { - ClaimedResidence res = parent.getSubzone(sz); - if (res != null && res != this) { - if (res.checkCollision(newarea)) { - if (player != null) { - plugin.msg(player, lm.Area_SubzoneCollision, sz); - Visualizer v = new Visualizer(player); - v.setErrorAreas(res.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); - } - return false; - } - } - } - } - // Don't remove subzones that are not in the area anymore, show colliding areas - String[] szs = listSubzones(); - for (String sz : szs) { - ClaimedResidence res = getSubzone(sz); - if (res == null || res == this) - continue; - String[] szareas = res.getAreaList(); - for (String area : szareas) { - if (newarea.isAreaWithinArea(res.getArea(area))) - continue; - - boolean good = false; - for (CuboidArea arae : getAreaArray()) { - if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { - good = true; - } - } - if (!good) { - plugin.msg(player, lm.Area_Collision, res.getName()); - Visualizer v = new Visualizer(player); - v.setAreas(this.getAreaArray()); - v.setErrorAreas(res.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); - return false; - } - - } - if (res.getAreaArray().length == 0) { - removeSubzone(sz); - } - } - - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - if (parent != null) { - if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { - plugin.msg(player, lm.Area_NotWithinParent); - return false; - } - if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { - plugin.msg(player, lm.Residence_ParentNoPermission); - return false; - } - } - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (!group.canCreateResidences() && !plugin.hasPermission(player, "residence.resize")) { - return false; - } + public int isSafeTp(Player player) { + if (player.getAllowFlight()) + return 0; - if (oldarea.getSize() < newarea.getSize() && (!this.isSubzone() && !isSmallerThanMax(player, newarea, resadmin) || this.isSubzone() - && !isSmallerThanMaxSubzone(player, newarea, resadmin))) { - plugin.msg(player, lm.Area_SizeLimit); - return false; - } - if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { - plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); - return false; - } - if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { - plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); - return false; - } + if (player.getGameMode() == GameMode.CREATIVE) + return 0; - if (!isBiggerThanMin(player, newarea, resadmin)) - return false; + if (plugin.getNms().isSpectator(player.getGameMode())) + return 0; - if (!resadmin) { - if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) - return false; - if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) - return false; - } - - if (parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { - double chargeamount = newarea.getCost(group) - oldarea.getCost(group); - if (chargeamount > 0) { - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { - return false; - } - } - } - } - - ResidenceSizeChangeEvent resevent = new ResidenceSizeChangeEvent(player, this, oldarea, newarea); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - if ((!resadmin) && (player != null)) { - int chargeamount = (int) Math.ceil((newarea.getSize() - oldarea.getSize()) * getBlockSellPrice().doubleValue()); - if ((chargeamount < 0) && (this.plugin.getConfigManager().useResMoneyBack())) { - if (!this.isServerLand()) - this.plugin.getTransactionManager().giveEconomyMoney(player, -chargeamount); - } - } - - plugin.getResidenceManager().removeChunkList(this.getName()); - areas.remove(name); - areas.put(name, newarea); - plugin.getResidenceManager().calculateChunks(this.getName()); - if (player != null) - plugin.msg(player, lm.Area_Update); - return true; - } - - public boolean addSubzone(String name, Location loc1, Location loc2) { - return this.addSubzone(null, loc1, loc2, name, true); - } - - public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { - if (player == null) { - return this.addSubzone(null, plugin.getServerLandName(), loc1, loc2, name, resadmin); - } - return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); - } - - public boolean isServerLand() { - return this.getOwnerUUID().toString() == Residence.getInstance().getServerLandUUID(); - } - - public boolean addSubzone(Player player, String name, boolean resadmin) { - if (Residence.getInstance().getSelectionManager().hasPlacedBoth(player)) { - Location loc1 = Residence.getInstance().getSelectionManager().getPlayerLoc1(player); - Location loc2 = Residence.getInstance().getSelectionManager().getPlayerLoc2(player); - return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); - } - return false; - } - - public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { - if (!plugin.validName(name)) { - if (player != null) { - plugin.msg(player, lm.Invalid_NameCharacters); - } - return false; - } - if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { - if (player != null) { - plugin.msg(player, lm.Subzone_SelectInside); - } - return false; - } - - String NName = name; - name = name.toLowerCase(); - - if (subzones.containsKey(name)) { - if (player != null) { - plugin.msg(player, lm.Subzone_Exists, NName); - } - return false; - } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - if (!this.perms.playerHas(player.getName(), Flags.subzone, this.perms.playerHas(player, Flags.admin, false))) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - } - - if (this.getSubzoneList().length >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { - plugin.msg(player, lm.Subzone_MaxAmount); - return false; - } + if (tpLoc == null) + return 0; - if (this.getZoneDepth() >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { - plugin.msg(player, lm.Subzone_MaxDepth); - return false; - } - } + Location tempLoc = new Location(tpLoc.getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()); - CuboidArea newArea = new CuboidArea(loc1, loc2); + int from = (int) tempLoc.getY(); - Set> set = subzones.entrySet(); - for (Entry resEntry : set) { - ClaimedResidence res = resEntry.getValue(); - if (res.checkCollision(newArea)) { - if (player != null) { - plugin.msg(player, lm.Subzone_Collide, resEntry.getKey()); - Visualizer v = new Visualizer(player); - v.setAreas(newArea); - v.setErrorAreas(res); - plugin.getSelectionManager().showBounds(player, v); + int fallDistance = 0; + for (int i = 0; i < 255; i++) { + tempLoc.setY(from - i); + Block block = tempLoc.getBlock(); + if (ResidencePlayerListener.isEmptyBlock(block)) { + fallDistance++; + } else { + break; + } + } + return fallDistance; + } + + public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { + Debug.D("11"); + boolean isAdmin = plugin.isResAdminOn(reqPlayer); + boolean bypassDelay = targetPlayer.hasPermission("residence.tpdelaybypass"); + + if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") + && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) + && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); + PermissionGroup group = rPlayer.getGroup(); + if (!group.hasTpAccess()) { + plugin.msg(reqPlayer, lm.General_TeleportDeny); + return; + } + if (!reqPlayer.equals(targetPlayer)) { + plugin.msg(reqPlayer, lm.General_NoPermission); + return; + } + if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { + plugin.msg(reqPlayer, lm.Residence_TeleportNoFlag); + return; + } + if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { + plugin.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); + return; + } } - return false; - } - } - ClaimedResidence newres; - if (player != null) { - newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); - newres.addArea(player, newArea, NName, resadmin); - } else { - newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); - newres.addArea(newArea, NName); - } - if (newres.getAreaCount() != 0) { - newres.getPermissions().applyDefaultFlags(); - if (player != null) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - newres.setEnterMessage(group.getDefaultEnterMessage()); - newres.setLeaveMessage(group.getDefaultLeaveMessage()); - } - if (plugin.getConfigManager().flagsInherit()) { - newres.getPermissions().setParent(perms); - } + if (!plugin.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { + int distance = isSafeTp(reqPlayer); + if (distance > 6) { + plugin.msg(reqPlayer, lm.General_TeleportConfirm, distance); + plugin.getTeleportMap().put(reqPlayer.getName(), this); + return; + } + } - newres.resName = NName; + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin && !bypassDelay) { + plugin.msg(reqPlayer, lm.General_TeleportStarted, this.getName(), + plugin.getConfigManager().getTeleportDelay()); + if (plugin.getConfigManager().isTeleportTitleMessage()) + TpTimer(reqPlayer, plugin.getConfigManager().getTeleportDelay()); + plugin.getTeleportDelayMap().add(reqPlayer.getName()); + } - newres.setCreateTime(); + Debug.D("22"); + Location loc = this.getTeleportLocation(targetPlayer); - ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, NName, newres, newArea); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) + performDelaydTp(loc, targetPlayer, reqPlayer, true); + else + performInstantTp(loc, targetPlayer, reqPlayer, true); + } + + public void TpTimer(final Player player, final int t) { + ActionBarTitleMessages.sendTitle(player, plugin.msg(lm.General_TeleportTitle), + plugin.msg(lm.General_TeleportTitleTime, t)); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (!plugin.getTeleportDelayMap().contains(player.getName())) + return; + if (t > 1) + TpTimer(player, t - 1); + } + }, 20L); + } + + public void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, + final boolean near) { + ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); + plugin.getServ().getPluginManager().callEvent(tpevent); + if (tpevent.isCancelled()) + return; + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (targloc == null || targetPlayer == null || !targetPlayer.isOnline()) + return; + if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) + && plugin.getConfigManager().getTeleportDelay() > 0) + return; + else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) + plugin.getTeleportDelayMap().remove(targetPlayer.getName()); + targetPlayer.closeInventory(); + targetPlayer.teleport(targloc); + if (near) + plugin.msg(targetPlayer, lm.Residence_TeleportNear); + else + plugin.msg(targetPlayer, lm.General_TeleportSuccess); + return; + } + }, plugin.getConfigManager().getTeleportDelay() * 20L); + } + + private void performInstantTp(final Location targloc, final Player targetPlayer, Player reqPlayer, + final boolean near) { + ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); + plugin.getServ().getPluginManager().callEvent(tpevent); + if (!tpevent.isCancelled()) { + targetPlayer.closeInventory(); + boolean teleported = targetPlayer.teleport(targloc); + + if (teleported) { + if (near) + plugin.msg(targetPlayer, lm.Residence_TeleportNear); + else + plugin.msg(targetPlayer, lm.General_TeleportSuccess); + } + } + } - subzones.put(name, newres); - if (player != null) { - plugin.msg(player, lm.Area_Create, NName); - plugin.msg(player, lm.Subzone_Create, NName); - } - return true; - } - if (player != null) { - plugin.msg(player, lm.Subzone_CreateFail, NName); - } - return false; - } - - public ClaimedResidence getSubzoneByLoc(Location loc) { - Set> set = subzones.entrySet(); - ClaimedResidence res = null; - for (Entry entry : set) { - if (entry.getValue().containsLoc(loc)) { - res = entry.getValue(); - break; - } - } - if (res == null) - return null; - ClaimedResidence subrez = res.getSubzoneByLoc(loc); - if (subrez == null) { - return res; - } - return subrez; - } - - public ClaimedResidence getSubzone(String subzonename) { - subzonename = subzonename.toLowerCase(); - - if (!subzonename.contains(".")) { - return subzones.get(subzonename); - } - String split[] = subzonename.split("\\."); - ClaimedResidence get = subzones.get(split[0]); - for (int i = 1; i < split.length; i++) { - if (get == null) { + public String getAreaIDbyLoc(Location loc) { + for (Entry area : areas.entrySet()) { + if (area.getValue().containsLoc(loc)) + return area.getKey(); + } return null; - } - get = get.getSubzone(split[i]); - } - return get; - } - - public String getSubzoneNameByRes(ClaimedResidence res) { - Set> set = subzones.entrySet(); - for (Entry entry : set) { - if (entry.getValue() == res) { - return entry.getValue().getResidenceName(); - } - String n = entry.getValue().getSubzoneNameByRes(res); - if (n != null) { - return entry.getValue().getResidenceName() + "." + n; - } - } - return null; - } - - public String[] getSubzoneList() { - ArrayList zones = new ArrayList<>(); - Set set = subzones.keySet(); - for (String key : set) { - if (key != null) { - zones.add(key); - } - } - return zones.toArray(new String[zones.size()]); - } - - public boolean checkCollision(CuboidArea area) { - Set set = areas.keySet(); - for (String key : set) { - CuboidArea checkarea = areas.get(key); - if (checkarea != null) { - if (checkarea.checkCollision(area)) { - return true; - } - } - } - return false; - } - - public boolean containsLoc(Location loc) { - Collection keys = areas.values(); - for (CuboidArea key : keys) { - if (key.containsLoc(loc)) { - if (parent != null) - return parent.containsLoc(loc); - return true; - } - } - return false; - } - - public ClaimedResidence getParent() { - return parent; - } - - public String getTopParentName() { - return this.getTopParent().getName(); - } - - public ClaimedResidence getTopParent() { - if (parent == null) - return this; - return parent.getTopParent(); - } - - public boolean isTopArea() { - return parent == null; - } - - public boolean removeSubzone(String name) { - return this.removeSubzone(null, name, true); - } - - public boolean removeSubzone(Player player, String name, boolean resadmin) { - if (name == null) - return false; - name = name.toLowerCase(); - ClaimedResidence res = subzones.get(name); - if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - subzones.remove(name); - if (player != null) { - plugin.msg(player, lm.Subzone_Remove, name); - } - return true; - } - - public long getTotalSize() { - Collection set = areas.values(); - long size = 0; - if (!plugin.getConfigManager().isNoCostForYBlocks()) - for (CuboidArea entry : set) { - size = size + entry.getSize(); - } - else - for (CuboidArea entry : set) { - size = size + (entry.getXSize() * entry.getZSize()); - } - return size; - } - - public long getXZSize() { - Collection set = areas.values(); - long size = 0; - for (CuboidArea entry : set) { - size = size + (entry.getXSize() * entry.getZSize()); - } - return size; - } - - public CuboidArea[] getAreaArray() { - CuboidArea[] temp = new CuboidArea[areas.size()]; - int i = 0; - for (CuboidArea area : areas.values()) { - temp[i] = area; - i++; - } - return temp; - } - - public Map getAreaMap() { - return areas; - } - - public ResidencePermissions getPermissions() { - return perms; - } - - public String getEnterMessage() { - return enterMessage; - } - - public String getLeaveMessage() { - return leaveMessage; - } - - public String getShopDesc() { - return ShopDesc; - } - - public void setEnterMessage(String message) { - enterMessage = message; - } - - public void setLeaveMessage(String message) { - leaveMessage = message; - } - - public void setShopDesc(String message) { - ShopDesc = message; - } - - public void setEnterLeaveMessage(CommandSender sender, String message, boolean enter, boolean resadmin) { - if (message != null) { - if (message.equals("")) { - message = null; - } - } - if (sender instanceof Player) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer((Player) sender); - PermissionGroup group = rPlayer.getGroup(); - if (!group.canSetEnterLeaveMessages() && !resadmin) { - plugin.msg(sender, lm.Residence_OwnerNoPermission); - return; - } - if (!perms.hasResidencePermission(sender, false) && !resadmin) { - plugin.msg(sender, lm.General_NoPermission); - return; - } - } - if (enter) { - this.setEnterMessage(message); - } else { - this.setLeaveMessage(message); - } - plugin.msg(sender, lm.Residence_MessageChange); - } - - public Location getMiddleFreeLoc(Location insideLoc, Player player) { - CuboidArea area = this.getAreaByLoc(insideLoc); - if (area == null) { - return insideLoc; - } - - int y = area.getHighLoc().getBlockY(); - - int x = area.getLowLoc().getBlockX() + area.getXSize() / 2; - int z = area.getLowLoc().getBlockZ() + area.getZSize() / 2; - - Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); - boolean found = false; - int it = 0; - int maxIt = area.getWorld().getMaxHeight() - 63; - while (it < maxIt) { - it++; - newLoc.setY(newLoc.getY() - 1); - - if (newLoc.getBlockY() < 63) - break; - - Block block = newLoc.getBlock(); - Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); - Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); - if (ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2) && !ResidencePlayerListener.isEmptyBlock(block3)) { - found = true; - break; - } - } - if (found) { - return newLoc; - } - return getOutsideFreeLoc(insideLoc, player); - } - - public Location getOutsideFreeLoc(Location insideLoc, Player player) { - CuboidArea area = this.getAreaByLoc(insideLoc); - if (area == null) { - return insideLoc; - } - - List randomLocList = new ArrayList(); - - for (int z = -1; z < area.getZSize() + 1; z++) { - randomLocList.add(new RandomLoc(area.getLowLoc().getX(), 0, area.getLowLoc().getZ() + z)); - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + area.getXSize(), 0, area.getLowLoc().getZ() + z)); - } - - for (int x = -1; x < area.getXSize() + 1; x++) { - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ())); - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ() + area.getZSize())); - } - - Location loc = insideLoc.clone(); - - boolean found = false; - int it = 0; - int maxIt = 30; - while (!found && it < maxIt) { - it++; - - Random ran = new Random(System.currentTimeMillis()); - if (randomLocList.isEmpty()) - break; - int check = ran.nextInt(randomLocList.size()); - RandomLoc place = randomLocList.get(check); - randomLocList.remove(check); - double x = place.getX(); - double z = place.getZ(); - - loc.setX(x); - loc.setZ(z); - loc.setY(area.getHighLoc().getBlockY()); - - int max = area.getHighLoc().getBlockY(); - max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; - - for (int i = max; i > area.getLowLoc().getY(); i--) { - loc.setY(i); - Block block = loc.getBlock(); - Block block2 = loc.clone().add(0, 1, 0).getBlock(); - Block block3 = loc.clone().add(0, -1, 0).getBlock(); - if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2)) { - break; + } + + public CuboidArea getCuboidAreabyName(String name) { + for (Entry area : areas.entrySet()) { + if (area.getKey().equals(name)) + return area.getValue(); } - } + return null; + } - if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) - continue; + public void removeArea(String id) { + plugin.getResidenceManager().removeChunkList(this.getName()); + areas.remove(id); + plugin.getResidenceManager().calculateChunks(this.getName()); + } - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA) - continue; + public void removeArea(Player player, String id, boolean resadmin) { + if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { + if (!areas.containsKey(id)) { + plugin.msg(player, lm.Area_NonExist); + return; + } + if (areas.size() == 1 && !plugin.getConfigManager().allowEmptyResidences()) { + plugin.msg(player, lm.Area_RemoveLast); + return; + } - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER) - continue; + ResidenceAreaDeleteEvent resevent = new ResidenceAreaDeleteEvent(player, this, + player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) && !player.hasPermission("residence.admin.tp")) - continue; - - found = true; - loc.setY(loc.getY() + 2); - loc.add(0.5, 0, 0.5); - break; - } - - if (!found && plugin.getConfigManager().getKickLocation() != null) - return plugin.getConfigManager().getKickLocation(); - - return loc; - } - - public CuboidArea getMainArea() { - CuboidArea area = areas.get(this.isSubzone() ? this.getResidenceName() : "main"); - if (area == null && !areas.isEmpty()) - for (Entry one : areas.entrySet()) { - area = one.getValue(); - break; - } - return area; - } - - public CuboidArea getAreaByLoc(Location loc) { - for (CuboidArea thisarea : areas.values()) { - if (thisarea.containsLoc(loc)) { - return thisarea; - } - } - return null; - } - - public String[] listSubzones() { - String list[] = new String[subzones.size()]; - int i = 0; - for (String res : subzones.keySet()) { - list[i] = res; - i++; - } - return list; - } - - public List getSubzones() { - List list = new ArrayList(); - for (Entry res : subzones.entrySet()) { - list.add(res.getValue()); - } - return list; - } - - public int getSubzonesAmount(Boolean includeChild) { - int i = 0; - for (Entry res : subzones.entrySet()) { - i++; - if (includeChild) - i += res.getValue().getSubzonesAmount(includeChild); - } - return i; - } - - public void printSubzoneList(CommandSender sender, int page) { - - PageInfo pi = new PageInfo(6, subzones.size(), page); - - if (!pi.isPageOk()) { - sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); - return; - } - - plugin.msg(sender, lm.InformationPage_TopLine, plugin.msg(lm.General_Subzones)); - plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), pi.getTotalPages(), pi.getTotalEntries())); - RawMessage rm = new RawMessage(); - for (int i = pi.getStart(); i <= pi.getEnd(); i++) { - ClaimedResidence res = getSubzones().get(i); - if (res == null) - continue; - rm.add(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " + plugin.msg(lm.General_Owner, res.getOwner()), "Teleport to " + res.getName(), "res tp " + res.getName()); - rm.show(sender); - rm.clear(); - } - - plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, "res sublist " + this.getName()); - } - - public void printAreaList(Player player, int page) { - ArrayList temp = new ArrayList<>(); - for (String area : areas.keySet()) { - temp.add(area); - } - plugin.getInfoPageManager().printInfo(player, "res area list " + this.getName(), plugin.msg(lm.General_PhysicalAreas), temp, page); - } - - public void printAdvancedAreaList(Player player, int page) { - ArrayList temp = new ArrayList<>(); - for (Entry entry : areas.entrySet()) { - CuboidArea a = entry.getValue(); - Location h = a.getHighLoc(); - Location l = a.getLowLoc(); - temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED + entry.getKey() + " " + ChatColor.YELLOW + "P1:" + ChatColor.RED + "(" + h - .getBlockX() + "," + h.getBlockY() + "," + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + l.getBlockY() - + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); - } - plugin.getInfoPageManager().printInfo(player, "res area listall " + this.getName(), plugin.msg(lm.General_PhysicalAreas), temp, page); - } - - public String[] getAreaList() { - String arealist[] = new String[areas.size()]; - int i = 0; - for (Entry entry : areas.entrySet()) { - arealist[i] = entry.getKey(); - i++; - } - return arealist; - } - - public int getZoneDepth() { - int count = 0; - ClaimedResidence res = parent; - while (res != null) { - count++; - res = res.getParent(); - } - return count; - } - - public Location getTeleportLocation() { - if (tpLoc == null) { - if (this.getMainArea() == null) - return null; - Location low = this.getMainArea().getLowLoc(); - Location high = this.getMainArea().getHighLoc(); - Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); - tpLoc = this.getMiddleFreeLoc(t, null); - } - return tpLoc; - } - - public void setTpLoc(Player player, boolean resadmin) { - if (!this.perms.hasResidencePermission(player, false) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return; - } - if (!this.containsLoc(player.getLocation())) { - plugin.msg(player, lm.Residence_NotIn); - return; - } - tpLoc = player.getLocation(); - plugin.msg(player, lm.Residence_SetTeleportLocation); - } - - public int isSafeTp(Player player) { - if (player.getAllowFlight()) - return 0; - - if (player.getGameMode() == GameMode.CREATIVE) - return 0; - - if (plugin.getNms().isSpectator(player.getGameMode())) - return 0; - - if (tpLoc == null) - return 0; - - Location tempLoc = new Location(tpLoc.getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()); - - int from = (int) tempLoc.getY(); - - int fallDistance = 0; - for (int i = 0; i < 255; i++) { - tempLoc.setY(from - i); - Block block = tempLoc.getBlock(); - if (ResidencePlayerListener.isEmptyBlock(block)) { - fallDistance++; - } else { - break; - } - } - return fallDistance; - } - - public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { - boolean isAdmin = plugin.isResAdminOn(reqPlayer); - boolean bypassDelay = targetPlayer.hasPermission("residence.tpdelaybypass"); - - if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) && Residence.getInstance().getConfigManager() - .isCanTeleportIncludeOwner())) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); - PermissionGroup group = rPlayer.getGroup(); - if (!group.hasTpAccess()) { - plugin.msg(reqPlayer, lm.General_TeleportDeny); - return; - } - if (!reqPlayer.equals(targetPlayer)) { - plugin.msg(reqPlayer, lm.General_NoPermission); - return; - } - if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { - plugin.msg(reqPlayer, lm.Residence_TeleportNoFlag); - return; - } - if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { - plugin.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); - return; - } - } - - if (!plugin.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { - int distance = isSafeTp(reqPlayer); - if (distance > 6) { - plugin.msg(reqPlayer, lm.General_TeleportConfirm, distance); - plugin.getTeleportMap().put(reqPlayer.getName(), this); - return; - } - } - - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin && !bypassDelay) { - plugin.msg(reqPlayer, lm.General_TeleportStarted, this.getName(), plugin.getConfigManager().getTeleportDelay()); - if (plugin.getConfigManager().isTeleportTitleMessage()) - TpTimer(reqPlayer, plugin.getConfigManager().getTeleportDelay()); - plugin.getTeleportDelayMap().add(reqPlayer.getName()); - } - - Location loc = this.getTeleportLocation(); - - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) - performDelaydTp(loc, targetPlayer, reqPlayer, true); - else - performInstantTp(loc, targetPlayer, reqPlayer, true); - } - - public void TpTimer(final Player player, final int t) { - ActionBarTitleMessages.sendTitle(player, plugin.msg(lm.General_TeleportTitle), plugin.msg(lm.General_TeleportTitleTime, t)); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (!plugin.getTeleportDelayMap().contains(player.getName())) - return; - if (t > 1) - TpTimer(player, t - 1); - } - }, 20L); - } - - public void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { - ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - plugin.getServ().getPluginManager().callEvent(tpevent); - if (tpevent.isCancelled()) - return; - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (targloc == null || targetPlayer == null || !targetPlayer.isOnline()) - return; - if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) && plugin.getConfigManager().getTeleportDelay() > 0) - return; - else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) - plugin.getTeleportDelayMap().remove(targetPlayer.getName()); - targetPlayer.closeInventory(); - targetPlayer.teleport(targloc); - if (near) - plugin.msg(targetPlayer, lm.Residence_TeleportNear); - else - plugin.msg(targetPlayer, lm.General_TeleportSuccess); - return; - } - }, plugin.getConfigManager().getTeleportDelay() * 20L); - } - - private void performInstantTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { - ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - plugin.getServ().getPluginManager().callEvent(tpevent); - if (!tpevent.isCancelled()) { - targetPlayer.closeInventory(); - boolean teleported = targetPlayer.teleport(targloc); - - if (teleported) { - if (near) - plugin.msg(targetPlayer, lm.Residence_TeleportNear); - else - plugin.msg(targetPlayer, lm.General_TeleportSuccess); - } - } - } - - public String getAreaIDbyLoc(Location loc) { - for (Entry area : areas.entrySet()) { - if (area.getValue().containsLoc(loc)) - return area.getKey(); - } - return null; - } - - public CuboidArea getCuboidAreabyName(String name) { - for (Entry area : areas.entrySet()) { - if (area.getKey().equals(name)) - return area.getValue(); - } - return null; - } - - public void removeArea(String id) { - plugin.getResidenceManager().removeChunkList(this.getName()); - areas.remove(id); - plugin.getResidenceManager().calculateChunks(this.getName()); - } - - public void removeArea(Player player, String id, boolean resadmin) { - if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { - if (!areas.containsKey(id)) { - plugin.msg(player, lm.Area_NonExist); - return; - } - if (areas.size() == 1 && !plugin.getConfigManager().allowEmptyResidences()) { - plugin.msg(player, lm.Area_RemoveLast); - return; - } - - ResidenceAreaDeleteEvent resevent = new ResidenceAreaDeleteEvent(player, this, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return; - - removeArea(id); - if (player != null) - plugin.msg(player, lm.Area_Remove); - } else { - if (player != null) - plugin.msg(player, lm.General_NoPermission); + removeArea(id); + if (player != null) + plugin.msg(player, lm.Area_Remove); + } else { + if (player != null) + plugin.msg(player, lm.General_NoPermission); + } } - } - public Map save() { - Map root = new HashMap<>(); - Map areamap = new HashMap<>(); + public Map save() { + Map root = new HashMap<>(); + Map areamap = new HashMap<>(); - if (mainRes) - root.put("MainResidence", mainRes); - if (createTime != 0L) - root.put("CreatedOn", createTime); + if (mainRes) + root.put("MainResidence", mainRes); + if (createTime != 0L) + root.put("CreatedOn", createTime); // if (this.getTown() != null && !this.isSubzone()) { // if (this.getTown().getMainResidence().equals(this)) @@ -1400,24 +1447,25 @@ public Map save() { // root.put("Town", this.getTown().getTownName()); // } - if (plugin.getConfigManager().isNewSaveMechanic()) { - if (enterMessage != null && leaveMessage != null) { - MinimizeMessages min = plugin.getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, leaveMessage); - if (min == null) { - if (enterMessage != null) - root.put("EnterMessage", enterMessage); - if (leaveMessage != null) - root.put("LeaveMessage", leaveMessage); + if (plugin.getConfigManager().isNewSaveMechanic()) { + if (enterMessage != null && leaveMessage != null) { + MinimizeMessages min = plugin.getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, + leaveMessage); + if (min == null) { + if (enterMessage != null) + root.put("EnterMessage", enterMessage); + if (leaveMessage != null) + root.put("LeaveMessage", leaveMessage); + } else { + root.put("Messages", min.getId()); + } + } } else { - root.put("Messages", min.getId()); + if (enterMessage != null) + root.put("EnterMessage", enterMessage); + if (leaveMessage != null) + root.put("LeaveMessage", leaveMessage); } - } - } else { - if (enterMessage != null) - root.put("EnterMessage", enterMessage); - if (leaveMessage != null) - root.put("LeaveMessage", leaveMessage); - } // if (enterMessage != null) // root.put("EnterMessage", enterMessage); @@ -1428,123 +1476,125 @@ public Map save() { // root.put("LeaveMessage", id); // } - if (ShopDesc != null) - root.put("ShopDescription", ShopDesc); - if (bank.getStoredMoneyD() != 0) - root.put("StoredMoney", bank.getStoredMoneyD()); - if (BlockSellPrice != 0D) - root.put("BlockSellPrice", BlockSellPrice); - - if (!ChatPrefix.equals("")) - root.put("ChatPrefix", ChatPrefix); - if (!ChannelColor.name().equals(plugin.getConfigManager().getChatColor().name()) && !ChannelColor.name().equals("WHITE")) { - root.put("ChannelColor", ChannelColor.name()); - } - - Map map = blacklist.save(); - if (!map.isEmpty()) - root.put("BlackList", map); - map = ignorelist.save(); - if (!map.isEmpty()) - root.put("IgnoreList", map); - - if (plugin.getConfigManager().isNewSaveMechanic()) { - for (Entry entry : areas.entrySet()) { - areamap.put(entry.getKey(), entry.getValue().newSave()); - } - } else { - for (Entry entry : areas.entrySet()) { - areamap.put(entry.getKey(), entry.getValue().save()); - } - } - - root.put("Areas", areamap); - Map subzonemap = new HashMap<>(); - for (Entry sz : subzones.entrySet()) { - subzonemap.put(sz.getValue().getResidenceName(), sz.getValue().save()); - } - if (!subzonemap.isEmpty()) - root.put("Subzones", subzonemap); - root.put("Permissions", perms.save(this.getWorld())); - - if (!this.cmdBlackList.isEmpty()) - root.put("cmdBlackList", this.cmdBlackList); - if (!this.cmdWhiteList.isEmpty()) - root.put("cmdWhiteList", this.cmdWhiteList); - - if (tpLoc != null) { - if (plugin.getConfigManager().isNewSaveMechanic()) { - root.put("TPLoc", convertDouble(tpLoc.getX()) + ":" + - convertDouble(tpLoc.getY()) + ":" + - convertDouble(tpLoc.getZ()) + ":" + - convertDouble(tpLoc.getPitch()) + ":" + - convertDouble(tpLoc.getYaw())); - } else { - Map tpmap = new HashMap(); - tpmap.put("X", convertDouble(this.tpLoc.getX())); - tpmap.put("Y", convertDouble(this.tpLoc.getY())); - tpmap.put("Z", convertDouble(this.tpLoc.getZ())); - tpmap.put("Pitch", convertDouble(this.tpLoc.getPitch())); - tpmap.put("Yaw", convertDouble(this.tpLoc.getYaw())); - root.put("TPLoc", tpmap); - } - } - return root; - } - - // Converting double with comman to dots format and striping to 2 numbers after dot - private static double convertDouble(double d) { - return convertDouble(String.valueOf(d)); - } - - private static double convertDouble(String dString) { - DecimalFormat formatter = new DecimalFormat("#0.00"); - formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); - dString = dString.replace(",", "."); - Double d = 0D; - try { - d = Double.valueOf(dString); - d = Double.valueOf(formatter.format(d)); - } catch (Exception e) { - } - return d; - } - - @SuppressWarnings("unchecked") - public static ClaimedResidence load(String worldName, Map root, ClaimedResidence parent, Residence plugin) throws Exception { - ClaimedResidence res = new ClaimedResidence(plugin); - if (root == null) - throw new Exception("Null residence!"); - - if (root.containsKey("CapitalizedName")) - res.resName = ((String) root.get("CapitalizedName")); - - if (root.containsKey("CreatedOn")) - res.createTime = ((Long) root.get("CreatedOn")); - else - res.createTime = System.currentTimeMillis(); - - if (root.containsKey("ShopDescription")) - res.setShopDesc((String) root.get("ShopDescription")); - - if (root.containsKey("StoredMoney")) { - if (root.get("StoredMoney") instanceof Double) - res.bank.setStoredMoney((Double) root.get("StoredMoney")); - else - res.bank.setStoredMoney((Integer) root.get("StoredMoney")); - } - - if (root.containsKey("BlackList")) - res.blacklist = ResidenceItemList.load(plugin, res, (Map) root.get("BlackList")); - if (root.containsKey("IgnoreList")) - res.ignorelist = ResidenceItemList.load(plugin, res, (Map) root.get("IgnoreList")); - - Map areamap = (Map) root.get("Areas"); - - res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); - - if (res.getPermissions().getOwnerLastKnownName() == null) - return null; + if (ShopDesc != null) + root.put("ShopDescription", ShopDesc); + if (bank.getStoredMoneyD() != 0) + root.put("StoredMoney", bank.getStoredMoneyD()); + if (BlockSellPrice != 0D) + root.put("BlockSellPrice", BlockSellPrice); + + if (!ChatPrefix.equals("")) + root.put("ChatPrefix", ChatPrefix); + if (!ChannelColor.name().equals(plugin.getConfigManager().getChatColor().name()) + && !ChannelColor.name().equals("WHITE")) { + root.put("ChannelColor", ChannelColor.name()); + } + + Map map = blacklist.save(); + if (!map.isEmpty()) + root.put("BlackList", map); + map = ignorelist.save(); + if (!map.isEmpty()) + root.put("IgnoreList", map); + + if (plugin.getConfigManager().isNewSaveMechanic()) { + for (Entry entry : areas.entrySet()) { + areamap.put(entry.getKey(), entry.getValue().newSave()); + } + } else { + for (Entry entry : areas.entrySet()) { + areamap.put(entry.getKey(), entry.getValue().save()); + } + } + + root.put("Areas", areamap); + Map subzonemap = new HashMap<>(); + for (Entry sz : subzones.entrySet()) { + subzonemap.put(sz.getValue().getResidenceName(), sz.getValue().save()); + } + if (!subzonemap.isEmpty()) + root.put("Subzones", subzonemap); + root.put("Permissions", perms.save(this.getWorld())); + + if (!this.cmdBlackList.isEmpty()) + root.put("cmdBlackList", this.cmdBlackList); + if (!this.cmdWhiteList.isEmpty()) + root.put("cmdWhiteList", this.cmdWhiteList); + + if (tpLoc != null) { + if (plugin.getConfigManager().isNewSaveMechanic()) { + root.put("TPLoc", + convertDouble(tpLoc.getX()) + ":" + convertDouble(tpLoc.getY()) + ":" + + convertDouble(tpLoc.getZ()) + ":" + convertDouble(tpLoc.getPitch()) + ":" + + convertDouble(tpLoc.getYaw())); + } else { + Map tpmap = new HashMap(); + tpmap.put("X", convertDouble(this.tpLoc.getX())); + tpmap.put("Y", convertDouble(this.tpLoc.getY())); + tpmap.put("Z", convertDouble(this.tpLoc.getZ())); + tpmap.put("Pitch", convertDouble(this.tpLoc.getPitch())); + tpmap.put("Yaw", convertDouble(this.tpLoc.getYaw())); + root.put("TPLoc", tpmap); + } + } + return root; + } + + // Converting double with comman to dots format and striping to 2 numbers after + // dot + private static double convertDouble(double d) { + return convertDouble(String.valueOf(d)); + } + + private static double convertDouble(String dString) { + DecimalFormat formatter = new DecimalFormat("#0.00"); + formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); + dString = dString.replace(",", "."); + Double d = 0D; + try { + d = Double.valueOf(dString); + d = Double.valueOf(formatter.format(d)); + } catch (Exception e) { + } + return d; + } + + @SuppressWarnings("unchecked") + public static ClaimedResidence load(String worldName, Map root, ClaimedResidence parent, + Residence plugin) throws Exception { + ClaimedResidence res = new ClaimedResidence(plugin); + if (root == null) + throw new Exception("Null residence!"); + + if (root.containsKey("CapitalizedName")) + res.resName = ((String) root.get("CapitalizedName")); + + if (root.containsKey("CreatedOn")) + res.createTime = ((Long) root.get("CreatedOn")); + else + res.createTime = System.currentTimeMillis(); + + if (root.containsKey("ShopDescription")) + res.setShopDesc((String) root.get("ShopDescription")); + + if (root.containsKey("StoredMoney")) { + if (root.get("StoredMoney") instanceof Double) + res.bank.setStoredMoney((Double) root.get("StoredMoney")); + else + res.bank.setStoredMoney((Integer) root.get("StoredMoney")); + } + + if (root.containsKey("BlackList")) + res.blacklist = ResidenceItemList.load(plugin, res, (Map) root.get("BlackList")); + if (root.containsKey("IgnoreList")) + res.ignorelist = ResidenceItemList.load(plugin, res, (Map) root.get("IgnoreList")); + + Map areamap = (Map) root.get("Areas"); + + res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); + + if (res.getPermissions().getOwnerLastKnownName() == null) + return null; // if (root.containsKey("TownCap")) { // String townName = (String) root.get("TownCap"); @@ -1562,353 +1612,360 @@ public static ClaimedResidence load(String worldName, Map root, // res.setTown(t); // } - if (root.containsKey("MainResidence")) - res.mainRes = (Boolean) root.get("MainResidence"); + if (root.containsKey("MainResidence")) + res.mainRes = (Boolean) root.get("MainResidence"); + + if (root.containsKey("BlockSellPrice")) + res.BlockSellPrice = (Double) root.get("BlockSellPrice"); + else { + res.BlockSellPrice = 0D; + } + + World world = plugin.getServ().getWorld(res.perms.getWorld()); + if (world == null) + throw new Exception("Cant Find World: " + res.perms.getWorld()); + for (Entry map : areamap.entrySet()) { + if (map.getValue() instanceof String) { + // loading new same format + res.areas.put(map.getKey(), CuboidArea.newLoad((String) map.getValue(), world)); + } else { + // loading old format + res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); + } + } + + if (root.containsKey("Subzones")) { + Map subzonemap = (Map) root.get("Subzones"); + for (Entry map : subzonemap.entrySet()) { + ClaimedResidence subres = ClaimedResidence.load(worldName, (Map) map.getValue(), res, + plugin); + + if (subres == null) + continue; + + if (subres.getResidenceName() == null) + subres.setName(map.getKey()); + + if (plugin.getConfigManager().flagsInherit()) + subres.getPermissions().setParent(res.getPermissions()); + + // Adding subzone owner into hies res list if parent zone owner is not same + // person + if (subres.getParent() != null && !subres.getOwnerUUID().equals(subres.getParent().getOwnerUUID())) + plugin.getPlayerManager().addResidence(subres.getOwner(), subres); + + res.subzones.put(map.getKey().toLowerCase(), subres); + } + } + + if (root.containsKey("EnterMessage") && root.get("EnterMessage") instanceof String) + res.enterMessage = (String) root.get("EnterMessage"); + if (root.containsKey("LeaveMessage") && root.get("LeaveMessage") instanceof String) + res.leaveMessage = (String) root.get("LeaveMessage"); + + if (root.containsKey("Messages") && root.get("Messages") instanceof Integer) { + res.enterMessage = plugin.getResidenceManager().getChacheMessageEnter(worldName, + (Integer) root.get("Messages")); + res.leaveMessage = plugin.getResidenceManager().getChacheMessageLeave(worldName, + (Integer) root.get("Messages")); + } + + res.parent = parent; + + if (root.get("TPLoc") instanceof String) { + String tpLoc = (String) root.get("TPLoc"); + + double pitch = 0.0; + double yaw = 0.0; + + try { + String[] split = tpLoc.split(":"); + if (split.length > 4) + yaw = convertDouble(split[4]); + if (split.length > 3) + pitch = convertDouble(split[3]); + res.tpLoc = new Location(world, convertDouble(split[0]), convertDouble(split[1]), + convertDouble(split[2])); + } catch (Exception e) { + } + + res.tpLoc.setPitch((float) pitch); + res.tpLoc.setYaw((float) yaw); + + } else { + Map tploc = (Map) root.get("TPLoc"); + if (tploc != null) { + double pitch = 0.0; + double yaw = 0.0; + + if (tploc.containsKey("Yaw")) + yaw = convertDouble(tploc.get("Yaw").toString()); + + if (tploc.containsKey("Pitch")) + pitch = convertDouble(tploc.get("Pitch").toString()); + + res.tpLoc = new Location(world, convertDouble(tploc.get("X").toString()), + convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z").toString())); + res.tpLoc.setPitch((float) pitch); + res.tpLoc.setYaw((float) yaw); + } + } + + if (root.containsKey("cmdBlackList")) + res.cmdBlackList = (List) root.get("cmdBlackList"); + if (root.containsKey("cmdWhiteList")) + res.cmdWhiteList = (List) root.get("cmdWhiteList"); + + if (root.containsKey("ChatPrefix")) + res.ChatPrefix = (String) root.get("ChatPrefix"); - if (root.containsKey("BlockSellPrice")) - res.BlockSellPrice = (Double) root.get("BlockSellPrice"); - else { - res.BlockSellPrice = 0D; + if (root.containsKey("ChannelColor")) + res.ChannelColor = ChatColor.valueOf((String) root.get("ChannelColor")); + else { + res.ChannelColor = plugin.getConfigManager().getChatColor(); + } + + return res; + } + + public int getAreaCount() { + return areas.size(); + } + + public boolean renameSubzone(String oldName, String newName) { + return this.renameSubzone(null, oldName, newName, true); + } + + public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { + if (!plugin.validName(newName)) { + plugin.msg(player, lm.Invalid_NameCharacters); + return false; + } + if (oldName == null) + return false; + if (newName == null) + return false; + String newN = newName; + oldName = oldName.toLowerCase(); + newName = newName.toLowerCase(); + + ClaimedResidence res = subzones.get(oldName); + if (res == null) { + if (player != null) + plugin.msg(player, lm.Invalid_Subzone); + return false; + } + if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + if (subzones.containsKey(newName)) { + if (player != null) + plugin.msg(player, lm.Subzone_Exists, newName); + return false; + } + res.setName(newN); + subzones.put(newName, res); + subzones.remove(oldName); + if (player != null) + plugin.msg(player, lm.Subzone_Rename, oldName, newName); + return true; } - World world = plugin.getServ().getWorld(res.perms.getWorld()); - if (world == null) - throw new Exception("Cant Find World: " + res.perms.getWorld()); - for (Entry map : areamap.entrySet()) { - if (map.getValue() instanceof String) { - // loading new same format - res.areas.put(map.getKey(), CuboidArea.newLoad((String) map.getValue(), world)); - } else { - // loading old format - res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); - } + public boolean renameArea(String oldName, String newName) { + return this.renameArea(null, oldName, newName, true); + } + + public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { + if (!plugin.validName(newName)) { + plugin.msg(player, lm.Invalid_NameCharacters); + return false; + } + if (player == null || perms.hasResidencePermission(player, true) || resadmin) { + if (areas.containsKey(newName)) { + if (player != null) + plugin.msg(player, lm.Area_Exists); + return false; + } + CuboidArea area = areas.get(oldName); + if (area == null) { + if (player != null) + plugin.msg(player, lm.Area_InvalidName); + return false; + } + areas.put(newName, area); + areas.remove(oldName); + if (player != null) + plugin.msg(player, lm.Area_Rename, oldName, newName); + return true; + } + plugin.msg(player, lm.General_NoPermission); + return false; } - if (root.containsKey("Subzones")) { - Map subzonemap = (Map) root.get("Subzones"); - for (Entry map : subzonemap.entrySet()) { - ClaimedResidence subres = ClaimedResidence.load(worldName, (Map) map.getValue(), res, plugin); + public CuboidArea getArea(String name) { + return areas.get(name); + } - if (subres == null) - continue; + public String getName() { + String name = this.resName; + if (this.getParent() != null) + name = this.getParent().getName() + "." + name; + if (name == null) + return "Unknown"; + return name; + } - if (subres.getResidenceName() == null) - subres.setName(map.getKey()); + public void remove() { + plugin.getResidenceManager().removeResidence(this); + plugin.getResidenceManager().removeChunkList(this.getName()); + plugin.getPlayerManager().removeResFromPlayer(this); + } - if (plugin.getConfigManager().flagsInherit()) - subres.getPermissions().setParent(res.getPermissions()); + public ResidenceBank getBank() { + return bank; + } - // Adding subzone owner into hies res list if parent zone owner is not same person - if (subres.getParent() != null && !subres.getOwnerUUID().equals(subres.getParent().getOwnerUUID())) - plugin.getPlayerManager().addResidence(subres.getOwner(), subres); + public String getWorld() { + return perms.getWorld(); + } - res.subzones.put(map.getKey().toLowerCase(), subres); - } + public ResidencePlayer getRPlayer() { + return plugin.getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); } - if (root.containsKey("EnterMessage") && root.get("EnterMessage") instanceof String) - res.enterMessage = (String) root.get("EnterMessage"); - if (root.containsKey("LeaveMessage") && root.get("LeaveMessage") instanceof String) - res.leaveMessage = (String) root.get("LeaveMessage"); + public PermissionGroup getOwnerGroup() { + return getRPlayer().getGroup(getPermissions().getWorld()); + } - if (root.containsKey("Messages") && root.get("Messages") instanceof Integer) { - res.enterMessage = plugin.getResidenceManager().getChacheMessageEnter(worldName, (Integer) root.get("Messages")); - res.leaveMessage = plugin.getResidenceManager().getChacheMessageLeave(worldName, (Integer) root.get("Messages")); + public String getOwner() { + return perms.getOwner(); } - res.parent = parent; + public boolean isOwner(String name) { + Player player = Bukkit.getPlayer(name); + if (player != null) + return isOwner(player); + return perms.getOwner().equalsIgnoreCase(name); + } - if (root.get("TPLoc") instanceof String) { - String tpLoc = (String) root.get("TPLoc"); + public boolean isOwner(Player p) { + if (p == null) + return false; + if (plugin.getConfigManager().isOfflineMode()) + return perms.getOwner().equals(p.getName()); + return perms.getOwnerUUID().equals(p.getUniqueId()); + } - double pitch = 0.0; - double yaw = 0.0; + public boolean isOwner(CommandSender sender) { + if (plugin.getConfigManager().isOfflineMode()) { + return perms.getOwner().equals(sender.getName()); + } + if (sender instanceof Player) { + return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); + } + return true; + } - try { - String[] split = tpLoc.split(":"); - if (split.length > 4) - yaw = convertDouble(split[4]); - if (split.length > 3) - pitch = convertDouble(split[3]); - res.tpLoc = new Location(world, convertDouble(split[0]), convertDouble(split[1]), convertDouble(split[2])); - } catch (Exception e) { - } + public void setChatPrefix(String ChatPrefix) { + this.ChatPrefix = ChatPrefix; + } - res.tpLoc.setPitch((float) pitch); - res.tpLoc.setYaw((float) yaw); + public String getChatPrefix() { + return this.ChatPrefix == null ? "" : this.ChatPrefix; + } - } else { - Map tploc = (Map) root.get("TPLoc"); - if (tploc != null) { - double pitch = 0.0; - double yaw = 0.0; + public void setChannelColor(ChatColor ChannelColor) { + this.ChannelColor = ChannelColor; + } - if (tploc.containsKey("Yaw")) - yaw = convertDouble(tploc.get("Yaw").toString()); + public ChatChannel getChatChannel() { + return plugin.getChatManager().getChannel(this.getName()); + } - if (tploc.containsKey("Pitch")) - pitch = convertDouble(tploc.get("Pitch").toString()); + public ChatColor getChannelColor() { + return ChannelColor; + } - res.tpLoc = new Location(world, convertDouble(tploc.get("X").toString()), convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z") - .toString())); - res.tpLoc.setPitch((float) pitch); - res.tpLoc.setYaw((float) yaw); - } + public UUID getOwnerUUID() { + return perms.getOwnerUUID(); } - if (root.containsKey("cmdBlackList")) - res.cmdBlackList = (List) root.get("cmdBlackList"); - if (root.containsKey("cmdWhiteList")) - res.cmdWhiteList = (List) root.get("cmdWhiteList"); + public ResidenceItemList getItemBlacklist() { + return blacklist; + } - if (root.containsKey("ChatPrefix")) - res.ChatPrefix = (String) root.get("ChatPrefix"); - - if (root.containsKey("ChannelColor")) - res.ChannelColor = ChatColor.valueOf((String) root.get("ChannelColor")); - else { - res.ChannelColor = plugin.getConfigManager().getChatColor(); - } + public ResidenceItemList getItemIgnoreList() { + return ignorelist; + } - return res; - } - - public int getAreaCount() { - return areas.size(); - } - - public boolean renameSubzone(String oldName, String newName) { - return this.renameSubzone(null, oldName, newName, true); - } + public List getCmdBlackList() { + return this.cmdBlackList; + } - public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { - if (!plugin.validName(newName)) { - plugin.msg(player, lm.Invalid_NameCharacters); - return false; + public List getCmdWhiteList() { + return this.cmdWhiteList; } - if (oldName == null) - return false; - if (newName == null) - return false; - String newN = newName; - oldName = oldName.toLowerCase(); - newName = newName.toLowerCase(); - ClaimedResidence res = subzones.get(oldName); - if (res == null) { - if (player != null) - plugin.msg(player, lm.Invalid_Subzone); - return false; - } - if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - if (subzones.containsKey(newName)) { - if (player != null) - plugin.msg(player, lm.Subzone_Exists, newName); - return false; - } - res.setName(newN); - subzones.put(newName, res); - subzones.remove(oldName); - if (player != null) - plugin.msg(player, lm.Subzone_Rename, oldName, newName); - return true; - } - - public boolean renameArea(String oldName, String newName) { - return this.renameArea(null, oldName, newName, true); - } - - public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { - if (!plugin.validName(newName)) { - plugin.msg(player, lm.Invalid_NameCharacters); - return false; - } - if (player == null || perms.hasResidencePermission(player, true) || resadmin) { - if (areas.containsKey(newName)) { - if (player != null) - plugin.msg(player, lm.Area_Exists); + public boolean addCmdBlackList(String cmd) { + if (cmd.contains("/")) + cmd = cmd.replace("/", ""); + if (!this.cmdBlackList.contains(cmd.toLowerCase())) { + this.cmdBlackList.add(cmd.toLowerCase()); + return true; + } + this.cmdBlackList.remove(cmd.toLowerCase()); return false; - } - CuboidArea area = areas.get(oldName); - if (area == null) { - if (player != null) - plugin.msg(player, lm.Area_InvalidName); + } + + public boolean addCmdWhiteList(String cmd) { + if (cmd.contains("/")) + cmd = cmd.replace("/", ""); + if (!this.cmdWhiteList.contains(cmd.toLowerCase())) { + this.cmdWhiteList.add(cmd.toLowerCase()); + return true; + } + this.cmdWhiteList.remove(cmd.toLowerCase()); return false; - } - areas.put(newName, area); - areas.remove(oldName); - if (player != null) - plugin.msg(player, lm.Area_Rename, oldName, newName); - return true; - } - plugin.msg(player, lm.General_NoPermission); - return false; - } - - public CuboidArea getArea(String name) { - return areas.get(name); - } - - public String getName() { - String name = this.resName; - if (this.getParent() != null) - name = this.getParent().getName() + "." + name; - if (name == null) - return "Unknown"; - return name; - } - - public void remove() { - plugin.getResidenceManager().removeResidence(this); - plugin.getResidenceManager().removeChunkList(this.getName()); - plugin.getPlayerManager().removeResFromPlayer(this); - } - - public ResidenceBank getBank() { - return bank; - } - - public String getWorld() { - return perms.getWorld(); - } - - public ResidencePlayer getRPlayer() { - return plugin.getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); - } - - public PermissionGroup getOwnerGroup() { - return getRPlayer().getGroup(getPermissions().getWorld()); - } - - public String getOwner() { - return perms.getOwner(); - } - - public boolean isOwner(String name) { - Player player = Bukkit.getPlayer(name); - if (player != null) - return isOwner(player); - return perms.getOwner().equalsIgnoreCase(name); - } - - public boolean isOwner(Player p) { - if (p == null) - return false; - if (plugin.getConfigManager().isOfflineMode()) - return perms.getOwner().equals(p.getName()); - return perms.getOwnerUUID().equals(p.getUniqueId()); - } - - public boolean isOwner(CommandSender sender) { - if (plugin.getConfigManager().isOfflineMode()) - return perms.getOwner().equals(sender.getName()); - if (sender instanceof Player) - return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); - return true; - } - - public void setChatPrefix(String ChatPrefix) { - this.ChatPrefix = ChatPrefix; - } - - public String getChatPrefix() { - return this.ChatPrefix == null ? "" : this.ChatPrefix; - } - - public void setChannelColor(ChatColor ChannelColor) { - this.ChannelColor = ChannelColor; - } - - public ChatChannel getChatChannel() { - return plugin.getChatManager().getChannel(this.getName()); - } - - public ChatColor getChannelColor() { - return ChannelColor; - } - - public UUID getOwnerUUID() { - return perms.getOwnerUUID(); - } - - public ResidenceItemList getItemBlacklist() { - return blacklist; - } - - public ResidenceItemList getItemIgnoreList() { - return ignorelist; - } - - public List getCmdBlackList() { - return this.cmdBlackList; - } - - public List getCmdWhiteList() { - return this.cmdWhiteList; - } - - public boolean addCmdBlackList(String cmd) { - if (cmd.contains("/")) - cmd = cmd.replace("/", ""); - if (!this.cmdBlackList.contains(cmd.toLowerCase())) { - this.cmdBlackList.add(cmd.toLowerCase()); - return true; - } - this.cmdBlackList.remove(cmd.toLowerCase()); - return false; - } - - public boolean addCmdWhiteList(String cmd) { - if (cmd.contains("/")) - cmd = cmd.replace("/", ""); - if (!this.cmdWhiteList.contains(cmd.toLowerCase())) { - this.cmdWhiteList.add(cmd.toLowerCase()); - return true; - } - this.cmdWhiteList.remove(cmd.toLowerCase()); - return false; - } - - public Double getBlockSellPrice() { - return BlockSellPrice; - } - - public ArrayList getPlayersInResidence() { - ArrayList within = new ArrayList<>(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (this.containsLoc(player.getLocation())) { - within.add(player); - } - } - return within; - } - - public List GetShopVotes() { - return ShopVoteList; - } - - public void clearShopVotes() { - ShopVoteList.clear(); - } - - public void addShopVote(List ShopVotes) { - ShopVoteList.addAll(ShopVotes); - } - - public void addShopVote(ShopVote ShopVote) { - ShopVoteList.add(ShopVote); - } - - public Long getLeaseExpireTime() { - return leaseExpireTime; - } - - public void setLeaseExpireTime(Long leaseExpireTime) { - this.leaseExpireTime = leaseExpireTime; - } + } + + public Double getBlockSellPrice() { + return BlockSellPrice; + } + + public ArrayList getPlayersInResidence() { + ArrayList within = new ArrayList<>(); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (this.containsLoc(player.getLocation())) { + within.add(player); + } + } + return within; + } + + public List GetShopVotes() { + return ShopVoteList; + } + + public void clearShopVotes() { + ShopVoteList.clear(); + } + + public void addShopVote(List ShopVotes) { + ShopVoteList.addAll(ShopVotes); + } + + public void addShopVote(ShopVote ShopVote) { + ShopVoteList.add(ShopVote); + } + + public Long getLeaseExpireTime() { + return leaseExpireTime; + } + + public void setLeaseExpireTime(Long leaseExpireTime) { + this.leaseExpireTime = leaseExpireTime; + } // public Town getTown() { // return town; @@ -1918,88 +1975,89 @@ public void setLeaseExpireTime(Long leaseExpireTime) { // this.town = town; // } - public boolean isUnderSiege() { - return getSiege().getEndsAt() > System.currentTimeMillis() && getSiege().getStartsAt() < System.currentTimeMillis(); - } - - public boolean canSiege() { - return !isUnderSiege() && this.getSiege().getCooldownEnd() < System.currentTimeMillis(); - } + public boolean isUnderSiege() { + return getSiege().getEndsAt() > System.currentTimeMillis() + && getSiege().getStartsAt() < System.currentTimeMillis(); + } - public ResidenceSiege getSiege() { - if (siege == null) - siege = new ResidenceSiege(); - return siege; - } + public boolean canSiege() { + return !isUnderSiege() && this.getSiege().getCooldownEnd() < System.currentTimeMillis(); + } - public boolean isUnderSiegeCooldown() { - return this.getSiege().getCooldownEnd() > System.currentTimeMillis(); - } + public ResidenceSiege getSiege() { + if (siege == null) + siege = new ResidenceSiege(); + return siege; + } - int preSiegeDuration = 5; - int siegeDuration = 5; + public boolean isUnderSiegeCooldown() { + return this.getSiege().getCooldownEnd() > System.currentTimeMillis(); + } - public boolean startSiege(Player attacker) { + int preSiegeDuration = 5; + int siegeDuration = 5; - if (isUnderSiege()) - return false; + public boolean startSiege(Player attacker) { - if (this.getSiege().getCooldownEnd() > System.currentTimeMillis()) - return false; + if (isUnderSiege()) + return false; - getSiege().addAttacker(attacker); - getSiege().addDefender(this.getRPlayer().getPlayer()); - getSiege().setStartsAt(System.currentTimeMillis() + (preSiegeDuration * 1000)); - getSiege().setEndsAt(getSiege().getStartsAt() + (siegeDuration * 1000)); + if (this.getSiege().getCooldownEnd() > System.currentTimeMillis()) + return false; - return true; - } + getSiege().addAttacker(attacker); + getSiege().addDefender(this.getRPlayer().getPlayer()); + getSiege().setStartsAt(System.currentTimeMillis() + (preSiegeDuration * 1000)); + getSiege().setEndsAt(getSiege().getStartsAt() + (siegeDuration * 1000)); - public void endSiege() { - getSiege().setEndsAt(System.currentTimeMillis()); - if (getSiege().getSchedId() > 0) { - Bukkit.getScheduler().cancelTask(getSiege().getSchedId()); - getSiege().setSchedId(-1); + return true; } - getSiege().setStartsAt(0L); + public void endSiege() { + getSiege().setEndsAt(System.currentTimeMillis()); + if (getSiege().getSchedId() > 0) { + Bukkit.getScheduler().cancelTask(getSiege().getSchedId()); + getSiege().setSchedId(-1); + } + + getSiege().setStartsAt(0L); - for (Player one : this.getSiege().getAttackers()) { - Location outside = this.getOutsideFreeLoc(one.getLocation(), one); - if (outside != null) - one.teleport(outside); + for (Player one : this.getSiege().getAttackers()) { + Location outside = this.getOutsideFreeLoc(one.getLocation(), one); + if (outside != null) + one.teleport(outside); + } + this.getSiege().getAttackers().clear(); + this.getSiege().getDefenders().clear(); } - this.getSiege().getAttackers().clear(); - this.getSiege().getDefenders().clear(); - } - @Override - public boolean equals(Object obj) { - if (obj == null) - return false; - return this == obj; - } + @Override + public boolean equals(Object obj) { + if (obj == null) + return false; + return this == obj; + } - public Set getSignsInResidence() { - return signsInResidence; - } + public Set getSignsInResidence() { + return signsInResidence; + } - public void setSignsInResidence(Set signsInResidence) { - this.signsInResidence = signsInResidence; - } + public void setSignsInResidence(Set signsInResidence) { + this.signsInResidence = signsInResidence; + } - public double getWorthByOwner() { - return (int) ((getTotalSize() * getOwnerGroup().getCostPerBlock()) * 100) / 100D; - } + public double getWorthByOwner() { + return (int) ((getTotalSize() * getOwnerGroup().getCostPerBlock()) * 100) / 100D; + } - public double getWorth() { - return (int) ((getTotalSize() * getBlockSellPrice()) * 100) / 100.0; - } + public double getWorth() { + return (int) ((getTotalSize() * getBlockSellPrice()) * 100) / 100.0; + } - public void showBounds(Player player, boolean showOneTime) { - Visualizer v = new Visualizer(player); - v.setAreas(getAreaArray()); - v.setOnce(showOneTime); - plugin.getSelectionManager().showBounds(player, v); - } + public void showBounds(Player player, boolean showOneTime) { + Visualizer v = new Visualizer(player); + v.setAreas(getAreaArray()); + v.setOnce(showOneTime); + plugin.getSelectionManager().showBounds(player, v); + } } diff --git a/src/com/bekvon/bukkit/residence/utils/Utils.java b/src/com/bekvon/bukkit/residence/utils/Utils.java index ae200dae4..48b98085e 100644 --- a/src/com/bekvon/bukkit/residence/utils/Utils.java +++ b/src/com/bekvon/bukkit/residence/utils/Utils.java @@ -59,6 +59,22 @@ public static String to24hourShort(Long ticks) { return time; } + public static int getMaxWorldHeight(World world) { + if (world == null) + return 256; + + switch (world.getEnvironment()) { + case NETHER: + return 128; + case NORMAL: + case THE_END: + return 256; + default: + break; + } + return 256; + } + public static Block getTargetBlock(Player player, int distance, boolean ignoreNoneSolids) { return getTargetBlock(player, null, distance, ignoreNoneSolids); } From 39bd9666247b944e1e4fc417bcacae7524fb2a8f Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 20 Jun 2019 14:49:11 +0300 Subject: [PATCH 0615/1142] We should show selection for more then one time --- .../bekvon/bukkit/residence/selection/SelectionManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 1b08c3f05..9878211c7 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -362,7 +362,6 @@ public void afterSelectionUpdate(Player player) { public void afterSelectionUpdate(Player player, boolean force) { if (!this.hasPlacedBoth(player)) return; - Visualizer v = vMap.get(player.getUniqueId()); if (v == null) { v = new Visualizer(player); @@ -373,6 +372,7 @@ public void afterSelectionUpdate(Player player, boolean force) { if (force) v.setLoc(null); v.setAreas(this.getSelectionCuboid(player)); + v.setOnce(false); this.showBounds(player, v); } @@ -475,8 +475,10 @@ public void showSelectionInfo(Player player) { } public void showBounds(final Player player, final Visualizer v) { + if (!plugin.getConfigManager().useVisualizer()) return; + Visualizer tv = vMap.get(player.getUniqueId()); if (tv != null) { tv.cancelAll(); From f8354ef96e40861f08472bc487626f25e0f4fa22 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 20 Jun 2019 15:15:35 +0300 Subject: [PATCH 0616/1142] Set command event should be fired in sync --- .../bekvon/bukkit/residence/commands/set.java | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 9b24df9f2..e61d07152 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -52,25 +52,27 @@ public boolean perform(final Residence plugin, final String[] args, final boolea } else if ((args.length == 1 || args.length == 2) && plugin.getConfigManager().useFlagGUI()) { final Player player = (Player) sender; player.closeInventory(); + ClaimedResidence res = null; + if (args.length == 1) + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + else + res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; + } + if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { + plugin.msg(sender, lm.General_NoPermission); + return true; + } + + ClaimedResidence r = res; + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { - ClaimedResidence res = null; - if (args.length == 1) - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else - res = plugin.getResidenceManager().getByName(args[1]); - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return; - } - if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { - plugin.msg(sender, lm.General_NoPermission); - return; - } - - final SetFlag flag = new SetFlag(res, player, resadmin); - flag.recalculateResidence(res); + final SetFlag flag = new SetFlag(r, player, resadmin); + flag.recalculateResidence(r); plugin.getPlayerListener().getGUImap().put(player.getUniqueId(), flag); Bukkit.getScheduler().runTask(plugin, () -> { From c22902e910cd57496c42c3b354d6b6f7e975762b Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 20 Jun 2019 15:16:51 +0300 Subject: [PATCH 0617/1142] pset event should be triggered in sync mode --- .../bukkit/residence/commands/pset.java | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 98ec4d898..5a75dade9 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -80,36 +80,39 @@ public boolean perform(final Residence plugin, final String[] args, final boolea } else if ((args.length == 2 || args.length == 3) && plugin.getConfigManager().useFlagGUI()) { final Player player = (Player) sender; player.closeInventory(); + + ClaimedResidence res = null; + String targetPlayer = null; + if (args.length == 2) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + targetPlayer = args[1]; + } else { + res = plugin.getResidenceManager().getByName(args[1]); + targetPlayer = args[2]; + } + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; + } + + if (!plugin.isPlayerExist(player, targetPlayer, true)) { + plugin.msg(sender, lm.Invalid_Player); + return true; + } + if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { + plugin.msg(sender, lm.General_NoPermission); + return true; + } + + ClaimedResidence r = res; + String tplayer = targetPlayer; Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { - - ClaimedResidence res = null; - String targetPlayer = null; - if (args.length == 2) { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - targetPlayer = args[1]; - } else { - res = plugin.getResidenceManager().getByName(args[1]); - targetPlayer = args[2]; - } - - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return; - } - - if (!plugin.isPlayerExist(player, targetPlayer, true)) { - plugin.msg(sender, lm.Invalid_Player); - return; - } - if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { - plugin.msg(sender, lm.General_NoPermission); - return; - } - final SetFlag flag = new SetFlag(res, player, resadmin); - flag.setTargetPlayer(targetPlayer); - flag.recalculatePlayer(res); + final SetFlag flag = new SetFlag(r, player, resadmin); + flag.setTargetPlayer(tplayer); + flag.recalculatePlayer(r); plugin.getPlayerListener().getGUImap().put(player.getUniqueId(), flag); Bukkit.getScheduler().runTask(plugin, () -> { From a25ae1567492fd5c1f45de9d1ca9feb9af7cc901 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 20 Jun 2019 16:44:18 +0300 Subject: [PATCH 0618/1142] Adding CMI as softdepend to load after it in case we will need economy --- src/com/bekvon/bukkit/residence/utils/RandomTp.java | 9 +++++---- src/plugin.yml | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index a2f5133dc..195d7dfad 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -40,7 +40,8 @@ public Location getRandomlocation(World world) { if (world == null) return null; - Random random = new Random(System.currentTimeMillis()); + Random randomX = new Random(System.currentTimeMillis()); + Random randomZ = new Random(System.nanoTime()); boolean ok = false; double x = 0; @@ -78,12 +79,12 @@ public Location getRandomlocation(World world) { if (tries > maxtries) return null; - x = random.nextInt(outerrange * 2) - outerrange + 0.5 + centerX; + x = randomX.nextInt(outerrange * 2) - outerrange + 0.5 + centerX; if (x > inerrange * -1 && x < inerrange) continue; - z = random.nextInt(outerrange * 2) - outerrange + 0.5 + centerY; + z = randomZ.nextInt(outerrange * 2) - outerrange + 0.5 + centerY; if (z > inerrange * -1 && z < inerrange) continue; @@ -125,7 +126,7 @@ public Location getRandomlocation(World world) { } if (loc != null) { - int dir = random.nextInt(359); + int dir = randomZ.nextInt(359); loc.setYaw(dir); } diff --git a/src/plugin.yml b/src/plugin.yml index dc6cb3c23..15331e971 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -5,7 +5,7 @@ website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 authors: [bekvon,nate302,t00thpick1] -softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI] +softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: From dc730251f19f3a2fdf5e34947080b0b031f515a0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 20 Jun 2019 17:05:18 +0300 Subject: [PATCH 0619/1142] Lets check for NPE when setting gui flags --- .../bekvon/bukkit/residence/gui/SetFlag.java | 6 + .../protection/ClaimedResidence.java | 3780 ++++++++--------- 2 files changed, 1896 insertions(+), 1890 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 1a8afaa01..b8374a0fc 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -242,6 +242,12 @@ public void recalculateResidence(ClaimedResidence res) { Flags flag = Flags.getFlag(flagName); if (flag != null) flagName = flag.getName(); + if (flagName == null) + flagName = "Unknown"; + + // Can it be null? + if (MiscInfoMeta == null) + continue; MiscInfoMeta.setDisplayName(ChatColor.GREEN + flagName); List lore = new ArrayList(); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 80ac098d0..768839226 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -58,1387 +58,1387 @@ public class ClaimedResidence { - private String resName = null; - protected ClaimedResidence parent; - protected Map areas; - protected Map subzones; - protected ResidencePermissions perms; - protected ResidenceBank bank; - protected Double BlockSellPrice = 0.0; - protected Location tpLoc; - protected String enterMessage; - protected String leaveMessage; - protected String ShopDesc = null; - protected String ChatPrefix = ""; - protected ChatColor ChannelColor = ChatColor.WHITE; - protected ResidenceItemList ignorelist; - protected ResidenceItemList blacklist; - protected boolean mainRes = false; - protected long createTime = 0L; - - private Long leaseExpireTime = null; - - protected List cmdWhiteList = new ArrayList(); - protected List cmdBlackList = new ArrayList(); - - List ShopVoteList = new ArrayList(); - - protected RentableLand rentableland = null; - protected RentedLand rentedland = null; - - protected Integer sellPrice = -1; - - private Residence plugin; - - private ResidenceSiege siege; - - private Set signsInResidence = new HashSet(); - - public String getResidenceName() { - return resName; - } - - public void setName(String name) { - if (name.contains(".")) - resName = name.split("\\.")[name.split("\\.").length - 1]; - else - resName = name; - } - - public void setCreateTime() { - createTime = System.currentTimeMillis(); - } - - public long getCreateTime() { - return createTime; - } - - public Integer getSellPrice() { - return sellPrice; - } - - public void setSellPrice(Integer amount) { - sellPrice = amount; - } - - public boolean isForSell() { - return plugin.getTransactionManager().isForSale(this.getName()); - } - - public boolean isForRent() { - return plugin.getRentManager().isForRent(this); - } - - public boolean isSubzoneForRent() { - for (Entry one : subzones.entrySet()) { - if (one.getValue().isForRent()) - return true; - if (one.getValue().isSubzoneForRent()) - return true; - } - return false; - } - - public boolean isSubzoneRented() { - for (Entry one : subzones.entrySet()) { - if (one.getValue().isRented()) - return true; - if (one.getValue().isSubzoneRented()) - return true; - } - return false; - } - - public ClaimedResidence getRentedSubzone() { - for (Entry one : subzones.entrySet()) { - if (one.getValue().isRented()) - return one.getValue(); - if (one.getValue().getRentedSubzone() != null) - return one.getValue().getRentedSubzone(); - } - return null; - } - - public boolean isParentForRent() { - if (this.getParent() != null) - return this.getParent().isForRent() ? true : this.getParent().isParentForRent(); - return false; - } - - public boolean isParentForSell() { - if (this.getParent() != null) - return this.getParent().isForSell() ? true : this.getParent().isParentForSell(); - return false; - } - - public boolean isRented() { - return plugin.getRentManager().isRented(this); - } - - public void setRentable(RentableLand rl) { - this.rentableland = rl; - } - - public RentableLand getRentable() { - return this.rentableland; - } - - public void setRented(RentedLand rl) { - this.rentedland = rl; - } - - public RentedLand getRentedLand() { - return this.rentedland; - } - - public ClaimedResidence(String creationWorld, Residence plugin) { - this(plugin.getServerLandName(), creationWorld, plugin); - } - - public ClaimedResidence(String creator, String creationWorld, Residence plugin) { - this(plugin); - perms = new ResidencePermissions(this, creator, creationWorld); - } - - public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence, Residence plugin) { - this(creator, creationWorld, plugin); - parent = parentResidence; - } - - public ClaimedResidence(Residence plugin) { - subzones = new HashMap<>(); - areas = new HashMap<>(); - bank = new ResidenceBank(this); - blacklist = new ResidenceItemList(plugin, this, ListType.BLACKLIST); - ignorelist = new ResidenceItemList(plugin, this, ListType.IGNORELIST); - this.plugin = plugin; - } - - public boolean isMainResidence() { - return mainRes; - } - - public void setMainResidence(boolean state) { - mainRes = state; - } - - public boolean isSubzone() { - return parent == null ? false : true; - } - - public int getSubzoneDeep() { - return getSubzoneDeep(0); - } - - public int getSubzoneDeep(int deep) { - deep++; - if (parent != null) { - return parent.getSubzoneDeep(deep); - } - return deep; - } - - public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() < group.getMinX()) { - plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); - return false; - } - if (area.getYSize() < group.getMinY()) { - plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); - return false; - } - if (area.getZSize() < group.getMinZ()) { - plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); - return false; - } - return true; - } - - public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() < group.getSubzoneMinX()) { - plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); - return false; - } - if (area.getYSize() < group.getSubzoneMinY()) { - plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); - return false; - } - if (area.getZSize() < group.getSubzoneMinZ()) { - plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); - return false; - } - return true; - } - - public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() > group.getMaxX()) { - plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); - return false; - } - if (area.getYSize() > group.getMaxY()) { - plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); - return false; - } - if (area.getZSize() > group.getMaxZ()) { - plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); - return false; - } + private String resName = null; + protected ClaimedResidence parent; + protected Map areas; + protected Map subzones; + protected ResidencePermissions perms; + protected ResidenceBank bank; + protected Double BlockSellPrice = 0.0; + protected Location tpLoc; + protected String enterMessage; + protected String leaveMessage; + protected String ShopDesc = null; + protected String ChatPrefix = ""; + protected ChatColor ChannelColor = ChatColor.WHITE; + protected ResidenceItemList ignorelist; + protected ResidenceItemList blacklist; + protected boolean mainRes = false; + protected long createTime = 0L; + + private Long leaseExpireTime = null; + + protected List cmdWhiteList = new ArrayList(); + protected List cmdBlackList = new ArrayList(); + + List ShopVoteList = new ArrayList(); + + protected RentableLand rentableland = null; + protected RentedLand rentedland = null; + + protected Integer sellPrice = -1; + + private Residence plugin; + + private ResidenceSiege siege; + + private Set signsInResidence = new HashSet(); + + public String getResidenceName() { + return resName; + } + + public void setName(String name) { + if (name.contains(".")) + resName = name.split("\\.")[name.split("\\.").length - 1]; + else + resName = name; + } + + public void setCreateTime() { + createTime = System.currentTimeMillis(); + } + + public long getCreateTime() { + return createTime; + } + + public Integer getSellPrice() { + return sellPrice; + } + + public void setSellPrice(Integer amount) { + sellPrice = amount; + } + + public boolean isForSell() { + return plugin.getTransactionManager().isForSale(this.getName()); + } + + public boolean isForRent() { + return plugin.getRentManager().isForRent(this); + } + + public boolean isSubzoneForRent() { + for (Entry one : subzones.entrySet()) { + if (one.getValue().isForRent()) return true; - } - - public boolean isSmallerThanMaxSubzone(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() > group.getSubzoneMaxX()) { - plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); - return false; - } - if (area.getYSize() > group.getSubzoneMaxY()) { - plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); - return false; - } - if (area.getZSize() > group.getSubzoneMaxZ()) { - plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); - return false; - } + if (one.getValue().isSubzoneForRent()) return true; } + return false; + } - public boolean addArea(CuboidArea area, String name) { - return addArea(null, area, name, true); - } - - public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin) { - return addArea(player, area, name, resadmin, true); - } - - public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin, boolean chargeMoney) { - if (!plugin.validName(name)) { - if (player != null) { - plugin.msg(player, lm.Invalid_NameCharacters); - } - return false; - } - - String NName = name; - name = name.toLowerCase(); - - if (areas.containsKey(NName)) { - if (player != null) { - plugin.msg(player, lm.Area_Exists); - } - return false; - } - - if (this.isSubzone() && !isBiggerThanMinSubzone(player, area, resadmin) - || !this.isSubzone() && !isBiggerThanMin(player, area, resadmin)) - return false; - - if (!resadmin && plugin.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { - boolean inside = false; - for (CuboidArea are : areas.values()) { - if (are.isAreaWithinArea(area)) { - inside = true; - } - } - if (!inside) { - return false; - } - } - if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { - if (player != null) { - plugin.msg(player, lm.Area_DiffWorld); - } - return false; - } - if (parent == null) { - String collideResidence = plugin.getResidenceManager().checkAreaCollision(area, this); - ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); - if (cRes != null) { - if (player != null) { - plugin.msg(player, lm.Area_Collision, cRes.getName()); - Visualizer v = new Visualizer(player); - v.setAreas(area); - v.setErrorAreas(cRes); - plugin.getSelectionManager().showBounds(player, v); - } - return false; - } - } else { - String[] szs = parent.listSubzones(); - for (String sz : szs) { - ClaimedResidence res = parent.getSubzone(sz); - if (res != null && res != this) { - if (res.checkCollision(area)) { - if (player != null) { - plugin.msg(player, lm.Area_SubzoneCollision, sz); - } - return false; - } - } - } - } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - if (parent != null) { - if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { - plugin.msg(player, lm.Area_NotWithinParent); - return false; - } - if (!parent.getPermissions().hasResidencePermission(player, true) - && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { - plugin.msg(player, lm.Residence_ParentNoPermission); - return false; - } - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - - PermissionGroup group = rPlayer.getGroup(); - if (!this.isSubzone() && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create") - || this.isSubzone() && !group.canCreateResidences() - && !plugin.hasPermission(player, "residence.create.subzone")) { - return false; - } - - if (areas.size() >= group.getMaxPhysicalPerResidence()) { - plugin.msg(player, lm.Area_MaxPhysical); - return false; - } - if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) - || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { - plugin.msg(player, lm.Area_SizeLimit); - return false; - } - - if (group.getMinHeight() > area.getLowLoc().getBlockY()) { - plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); - return false; - } - - if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { - plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); - return false; - } - - if (!resadmin) { - if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) - return false; - - if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) - return false; - } - - if (chargeMoney && parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { - double chargeamount = area.getCost(group); - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { - return false; - } - } - } - - ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, NName, this, area); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - plugin.getResidenceManager().removeChunkList(this.getName()); - areas.put(name, area); - plugin.getResidenceManager().calculateChunks(this.getName()); - return true; - } - - public boolean replaceArea(CuboidArea neware, String name) { - return this.replaceArea(null, neware, name, true); - } - - public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { - if (!areas.containsKey(name)) { - if (player != null) - plugin.msg(player, lm.Area_NonExist); - return false; - } - CuboidArea oldarea = areas.get(name); - if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { - if (player != null) - plugin.msg(player, lm.Area_DiffWorld); - return false; - } - if (parent == null) { - String collideResidence = plugin.getResidenceManager().checkAreaCollision(newarea, this); - ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); - if (cRes != null && player != null) { - plugin.msg(player, lm.Area_Collision, cRes.getName()); - Visualizer v = new Visualizer(player); - v.setAreas(this.getAreaArray()); - v.setErrorAreas(cRes.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); - return false; - } - } else { - String[] szs = parent.listSubzones(); - for (String sz : szs) { - ClaimedResidence res = parent.getSubzone(sz); - if (res != null && res != this) { - if (res.checkCollision(newarea)) { - if (player != null) { - plugin.msg(player, lm.Area_SubzoneCollision, sz); - Visualizer v = new Visualizer(player); - v.setErrorAreas(res.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); - } - return false; - } - } - } - } - // Don't remove subzones that are not in the area anymore, show colliding areas - String[] szs = listSubzones(); - for (String sz : szs) { - ClaimedResidence res = getSubzone(sz); - if (res == null || res == this) - continue; - String[] szareas = res.getAreaList(); - for (String area : szareas) { - if (newarea.isAreaWithinArea(res.getArea(area))) - continue; - - boolean good = false; - for (CuboidArea arae : getAreaArray()) { - if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { - good = true; - } - } - if (!good) { - plugin.msg(player, lm.Area_Collision, res.getName()); - Visualizer v = new Visualizer(player); - v.setAreas(this.getAreaArray()); - v.setErrorAreas(res.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); - return false; - } - - } - if (res.getAreaArray().length == 0) { - removeSubzone(sz); - } - } - - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - if (parent != null) { - if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { - plugin.msg(player, lm.Area_NotWithinParent); - return false; - } - if (!parent.getPermissions().hasResidencePermission(player, true) - && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { - plugin.msg(player, lm.Residence_ParentNoPermission); - return false; - } - } - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (!group.canCreateResidences() && !plugin.hasPermission(player, "residence.resize")) { - return false; - } - - if (oldarea.getSize() < newarea.getSize() - && (!this.isSubzone() && !isSmallerThanMax(player, newarea, resadmin) - || this.isSubzone() && !isSmallerThanMaxSubzone(player, newarea, resadmin))) { - plugin.msg(player, lm.Area_SizeLimit); - return false; - } - if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { - plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); - return false; - } - if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { - plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); - return false; - } - - if (!isBiggerThanMin(player, newarea, resadmin)) - return false; - - if (!resadmin) { - if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) - return false; - if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) - return false; - } - - if (parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { - double chargeamount = newarea.getCost(group) - oldarea.getCost(group); - if (chargeamount > 0) { - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { - return false; - } - } - } - } - - ResidenceSizeChangeEvent resevent = new ResidenceSizeChangeEvent(player, this, oldarea, newarea); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - if ((!resadmin) && (player != null)) { - int chargeamount = (int) Math - .ceil((newarea.getSize() - oldarea.getSize()) * getBlockSellPrice().doubleValue()); - if ((chargeamount < 0) && (this.plugin.getConfigManager().useResMoneyBack())) { - if (!this.isServerLand()) - this.plugin.getTransactionManager().giveEconomyMoney(player, -chargeamount); - } - } - - plugin.getResidenceManager().removeChunkList(this.getName()); - areas.remove(name); - areas.put(name, newarea); - plugin.getResidenceManager().calculateChunks(this.getName()); - if (player != null) - plugin.msg(player, lm.Area_Update); - return true; - } - - public boolean addSubzone(String name, Location loc1, Location loc2) { - return this.addSubzone(null, loc1, loc2, name, true); - } - - public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { - if (player == null) { - return this.addSubzone(null, plugin.getServerLandName(), loc1, loc2, name, resadmin); - } - return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); - } - - public boolean isServerLand() { - return this.getOwnerUUID().toString() == Residence.getInstance().getServerLandUUID(); - } - - public boolean addSubzone(Player player, String name, boolean resadmin) { - if (Residence.getInstance().getSelectionManager().hasPlacedBoth(player)) { - Location loc1 = Residence.getInstance().getSelectionManager().getPlayerLoc1(player); - Location loc2 = Residence.getInstance().getSelectionManager().getPlayerLoc2(player); - return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); - } - return false; - } - - public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, - boolean resadmin) { - if (!plugin.validName(name)) { - if (player != null) { - plugin.msg(player, lm.Invalid_NameCharacters); - } - return false; - } - if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { - if (player != null) { - plugin.msg(player, lm.Subzone_SelectInside); - } - return false; - } - - String NName = name; - name = name.toLowerCase(); - - if (subzones.containsKey(name)) { - if (player != null) { - plugin.msg(player, lm.Subzone_Exists, NName); - } - return false; - } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - if (!this.perms.playerHas(player.getName(), Flags.subzone, - this.perms.playerHas(player, Flags.admin, false))) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - } - - if (this.getSubzoneList().length >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { - plugin.msg(player, lm.Subzone_MaxAmount); - return false; - } - - if (this.getZoneDepth() >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { - plugin.msg(player, lm.Subzone_MaxDepth); - return false; - } - } - - CuboidArea newArea = new CuboidArea(loc1, loc2); - - Set> set = subzones.entrySet(); - for (Entry resEntry : set) { - ClaimedResidence res = resEntry.getValue(); - if (res.checkCollision(newArea)) { - if (player != null) { - plugin.msg(player, lm.Subzone_Collide, resEntry.getKey()); - Visualizer v = new Visualizer(player); - v.setAreas(newArea); - v.setErrorAreas(res); - plugin.getSelectionManager().showBounds(player, v); - } - return false; - } - } - ClaimedResidence newres; - if (player != null) { - newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); - newres.addArea(player, newArea, NName, resadmin); - } else { - newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); - newres.addArea(newArea, NName); - } - - if (newres.getAreaCount() != 0) { - newres.getPermissions().applyDefaultFlags(); - if (player != null) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - newres.setEnterMessage(group.getDefaultEnterMessage()); - newres.setLeaveMessage(group.getDefaultLeaveMessage()); - } - if (plugin.getConfigManager().flagsInherit()) { - newres.getPermissions().setParent(perms); - } - - newres.resName = NName; - - newres.setCreateTime(); - - ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, NName, newres, newArea); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - subzones.put(name, newres); - if (player != null) { - plugin.msg(player, lm.Area_Create, NName); - plugin.msg(player, lm.Subzone_Create, NName); - } - return true; - } - if (player != null) { - plugin.msg(player, lm.Subzone_CreateFail, NName); - } - return false; - } - - public ClaimedResidence getSubzoneByLoc(Location loc) { - Set> set = subzones.entrySet(); - ClaimedResidence res = null; - for (Entry entry : set) { - if (entry.getValue().containsLoc(loc)) { - res = entry.getValue(); - break; - } - } - if (res == null) - return null; - ClaimedResidence subrez = res.getSubzoneByLoc(loc); - if (subrez == null) { - return res; - } - return subrez; - } - - public ClaimedResidence getSubzone(String subzonename) { - subzonename = subzonename.toLowerCase(); - - if (!subzonename.contains(".")) { - return subzones.get(subzonename); - } - String split[] = subzonename.split("\\."); - ClaimedResidence get = subzones.get(split[0]); - for (int i = 1; i < split.length; i++) { - if (get == null) { - return null; - } - get = get.getSubzone(split[i]); - } - return get; - } - - public String getSubzoneNameByRes(ClaimedResidence res) { - Set> set = subzones.entrySet(); - for (Entry entry : set) { - if (entry.getValue() == res) { - return entry.getValue().getResidenceName(); - } - String n = entry.getValue().getSubzoneNameByRes(res); - if (n != null) { - return entry.getValue().getResidenceName() + "." + n; - } - } - return null; - } - - public String[] getSubzoneList() { - ArrayList zones = new ArrayList<>(); - Set set = subzones.keySet(); - for (String key : set) { - if (key != null) { - zones.add(key); - } - } - return zones.toArray(new String[zones.size()]); - } - - public boolean checkCollision(CuboidArea area) { - Set set = areas.keySet(); - for (String key : set) { - CuboidArea checkarea = areas.get(key); - if (checkarea != null) { - if (checkarea.checkCollision(area)) { - return true; - } - } - } - return false; - } - - public boolean containsLoc(Location loc) { - Collection keys = areas.values(); - for (CuboidArea key : keys) { - if (key.containsLoc(loc)) { - if (parent != null) - return parent.containsLoc(loc); - return true; - } - } - return false; - } - - public ClaimedResidence getParent() { - return parent; - } - - public String getTopParentName() { - return this.getTopParent().getName(); - } - - public ClaimedResidence getTopParent() { - if (parent == null) - return this; - return parent.getTopParent(); - } - - public boolean isTopArea() { - return parent == null; - } - - public boolean removeSubzone(String name) { - return this.removeSubzone(null, name, true); - } - - public boolean removeSubzone(Player player, String name, boolean resadmin) { - if (name == null) - return false; - name = name.toLowerCase(); - ClaimedResidence res = subzones.get(name); - if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - subzones.remove(name); - if (player != null) { - plugin.msg(player, lm.Subzone_Remove, name); - } - return true; - } - - public long getTotalSize() { - Collection set = areas.values(); - long size = 0; - if (!plugin.getConfigManager().isNoCostForYBlocks()) - for (CuboidArea entry : set) { - size = size + entry.getSize(); - } - else - for (CuboidArea entry : set) { - size = size + (entry.getXSize() * entry.getZSize()); - } - return size; - } - - public long getXZSize() { - Collection set = areas.values(); - long size = 0; - for (CuboidArea entry : set) { - size = size + (entry.getXSize() * entry.getZSize()); - } - return size; - } - - public CuboidArea[] getAreaArray() { - CuboidArea[] temp = new CuboidArea[areas.size()]; - int i = 0; - for (CuboidArea area : areas.values()) { - temp[i] = area; - i++; - } - return temp; - } - - public Map getAreaMap() { - return areas; - } - - public ResidencePermissions getPermissions() { - return perms; - } - - public String getEnterMessage() { - return enterMessage; - } - - public String getLeaveMessage() { - return leaveMessage; - } - - public String getShopDesc() { - return ShopDesc; - } - - public void setEnterMessage(String message) { - enterMessage = message; - } - - public void setLeaveMessage(String message) { - leaveMessage = message; - } - - public void setShopDesc(String message) { - ShopDesc = message; - } - - public void setEnterLeaveMessage(CommandSender sender, String message, boolean enter, boolean resadmin) { - if (message != null) { - if (message.equals("")) { - message = null; - } - } - if (sender instanceof Player) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer((Player) sender); - PermissionGroup group = rPlayer.getGroup(); - if (!group.canSetEnterLeaveMessages() && !resadmin) { - plugin.msg(sender, lm.Residence_OwnerNoPermission); - return; - } - if (!perms.hasResidencePermission(sender, false) && !resadmin) { - plugin.msg(sender, lm.General_NoPermission); - return; - } - } - if (enter) { - this.setEnterMessage(message); - } else { - this.setLeaveMessage(message); - } - plugin.msg(sender, lm.Residence_MessageChange); - } - - public Location getMiddleFreeLoc(Location insideLoc, Player player) { - Debug.D("d"); - CuboidArea area = this.getAreaByLoc(insideLoc); - if (area == null) { - return insideLoc; - } - - int y = area.getHighLoc().getBlockY(); - int lowY = area.getLowLoc().getBlockY(); - - int x = area.getLowLoc().getBlockX() + area.getXSize() / 2; - int z = area.getLowLoc().getBlockZ() + area.getZSize() / 2; - - Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); - boolean found = false; - int it = 1; - int maxIt = newLoc.getBlockY() + 1; - while (it < maxIt) { - it++; - - if (newLoc.getBlockY() < lowY) - break; - - newLoc.add(0, -1, 0); - - Block block = newLoc.getBlock(); - Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); - Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); - if (ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2) - && !ResidencePlayerListener.isEmptyBlock(block3)) { - found = true; - break; - } - } - if (found) { - if (player != null) { - newLoc.setPitch(player.getLocation().getPitch()); - newLoc.setYaw(player.getLocation().getYaw()); - } - return newLoc; - } - return getOutsideFreeLoc(insideLoc, player); - } - - public Location getOutsideFreeLoc(Location insideLoc, Player player) { - CuboidArea area = this.getAreaByLoc(insideLoc); - if (area == null) { - return insideLoc; - } - - List randomLocList = new ArrayList(); - - for (int z = -1; z < area.getZSize() + 1; z++) { - randomLocList.add(new RandomLoc(area.getLowLoc().getX(), 0, area.getLowLoc().getZ() + z)); - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + area.getXSize(), 0, area.getLowLoc().getZ() + z)); - } - - for (int x = -1; x < area.getXSize() + 1; x++) { - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ())); - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ() + area.getZSize())); - } - - Location loc = insideLoc.clone(); - - boolean found = false; - int it = 0; - int maxIt = 30; - while (!found && it < maxIt) { - it++; - - Random ran = new Random(System.currentTimeMillis()); - if (randomLocList.isEmpty()) - break; - int check = ran.nextInt(randomLocList.size()); - RandomLoc place = randomLocList.get(check); - randomLocList.remove(check); - double x = place.getX(); - double z = place.getZ(); - - loc.setX(x); - loc.setZ(z); - loc.setY(area.getHighLoc().getBlockY()); - - int max = area.getHighLoc().getBlockY(); - max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; - - for (int i = max; i > area.getLowLoc().getY(); i--) { - loc.setY(i); - Block block = loc.getBlock(); - Block block2 = loc.clone().add(0, 1, 0).getBlock(); - Block block3 = loc.clone().add(0, -1, 0).getBlock(); - if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) - && ResidencePlayerListener.isEmptyBlock(block2)) { - break; - } - } - - if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) - continue; - - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA) - continue; - - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER) - continue; - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) - && !player.hasPermission("residence.admin.tp")) - continue; - - found = true; - loc.add(0.5, 0.1, 0.5); - break; - } - - if (!found && plugin.getConfigManager().getKickLocation() != null) - return plugin.getConfigManager().getKickLocation(); - if (player != null) { - loc.setPitch(player.getLocation().getPitch()); - loc.setYaw(player.getLocation().getYaw()); - } - return loc; - } - - public CuboidArea getMainArea() { - CuboidArea area = areas.get(this.isSubzone() ? this.getResidenceName() : "main"); - if (area == null && !areas.isEmpty()) - for (Entry one : areas.entrySet()) { - area = one.getValue(); - break; - } - return area; - } - - public CuboidArea getAreaByLoc(Location loc) { - for (CuboidArea thisarea : areas.values()) { - if (thisarea.containsLoc(loc)) { - return thisarea; - } - } - return null; - } - - public String[] listSubzones() { - String list[] = new String[subzones.size()]; - int i = 0; - for (String res : subzones.keySet()) { - list[i] = res; - i++; - } - return list; - } - - public List getSubzones() { - List list = new ArrayList(); - for (Entry res : subzones.entrySet()) { - list.add(res.getValue()); - } - return list; - } - - public int getSubzonesAmount(Boolean includeChild) { - int i = 0; - for (Entry res : subzones.entrySet()) { - i++; - if (includeChild) - i += res.getValue().getSubzonesAmount(includeChild); - } - return i; - } - - public void printSubzoneList(CommandSender sender, int page) { - - PageInfo pi = new PageInfo(6, subzones.size(), page); - - if (!pi.isPageOk()) { - sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); - return; - } - - plugin.msg(sender, lm.InformationPage_TopLine, plugin.msg(lm.General_Subzones)); - plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), - pi.getTotalPages(), pi.getTotalEntries())); - RawMessage rm = new RawMessage(); - for (int i = pi.getStart(); i <= pi.getEnd(); i++) { - ClaimedResidence res = getSubzones().get(i); - if (res == null) - continue; - rm.add(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " - + plugin.msg(lm.General_Owner, res.getOwner()), "Teleport to " + res.getName(), - "res tp " + res.getName()); - rm.show(sender); - rm.clear(); - } - - plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, "res sublist " + this.getName()); - } - - public void printAreaList(Player player, int page) { - ArrayList temp = new ArrayList<>(); - for (String area : areas.keySet()) { - temp.add(area); - } - plugin.getInfoPageManager().printInfo(player, "res area list " + this.getName(), - plugin.msg(lm.General_PhysicalAreas), temp, page); - } - - public void printAdvancedAreaList(Player player, int page) { - ArrayList temp = new ArrayList<>(); - for (Entry entry : areas.entrySet()) { - CuboidArea a = entry.getValue(); - Location h = a.getHighLoc(); - Location l = a.getLowLoc(); - temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED + entry.getKey() + " " - + ChatColor.YELLOW + "P1:" + ChatColor.RED + "(" + h.getBlockX() + "," + h.getBlockY() + "," - + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," - + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED - + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); - } - plugin.getInfoPageManager().printInfo(player, "res area listall " + this.getName(), - plugin.msg(lm.General_PhysicalAreas), temp, page); - } - - public String[] getAreaList() { - String arealist[] = new String[areas.size()]; - int i = 0; - for (Entry entry : areas.entrySet()) { - arealist[i] = entry.getKey(); - i++; - } - return arealist; + public boolean isSubzoneRented() { + for (Entry one : subzones.entrySet()) { + if (one.getValue().isRented()) + return true; + if (one.getValue().isSubzoneRented()) + return true; } - - public int getZoneDepth() { - int count = 0; - ClaimedResidence res = parent; - while (res != null) { - count++; - res = res.getParent(); + return false; + } + + public ClaimedResidence getRentedSubzone() { + for (Entry one : subzones.entrySet()) { + if (one.getValue().isRented()) + return one.getValue(); + if (one.getValue().getRentedSubzone() != null) + return one.getValue().getRentedSubzone(); + } + return null; + } + + public boolean isParentForRent() { + if (this.getParent() != null) + return this.getParent().isForRent() ? true : this.getParent().isParentForRent(); + return false; + } + + public boolean isParentForSell() { + if (this.getParent() != null) + return this.getParent().isForSell() ? true : this.getParent().isParentForSell(); + return false; + } + + public boolean isRented() { + return plugin.getRentManager().isRented(this); + } + + public void setRentable(RentableLand rl) { + this.rentableland = rl; + } + + public RentableLand getRentable() { + return this.rentableland; + } + + public void setRented(RentedLand rl) { + this.rentedland = rl; + } + + public RentedLand getRentedLand() { + return this.rentedland; + } + + public ClaimedResidence(String creationWorld, Residence plugin) { + this(plugin.getServerLandName(), creationWorld, plugin); + } + + public ClaimedResidence(String creator, String creationWorld, Residence plugin) { + this(plugin); + perms = new ResidencePermissions(this, creator, creationWorld); + } + + public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence, Residence plugin) { + this(creator, creationWorld, plugin); + parent = parentResidence; + } + + public ClaimedResidence(Residence plugin) { + subzones = new HashMap<>(); + areas = new HashMap<>(); + bank = new ResidenceBank(this); + blacklist = new ResidenceItemList(plugin, this, ListType.BLACKLIST); + ignorelist = new ResidenceItemList(plugin, this, ListType.IGNORELIST); + this.plugin = plugin; + } + + public boolean isMainResidence() { + return mainRes; + } + + public void setMainResidence(boolean state) { + mainRes = state; + } + + public boolean isSubzone() { + return parent == null ? false : true; + } + + public int getSubzoneDeep() { + return getSubzoneDeep(0); + } + + public int getSubzoneDeep(int deep) { + deep++; + if (parent != null) { + return parent.getSubzoneDeep(deep); + } + return deep; + } + + public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() < group.getMinX()) { + plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); + return false; + } + if (area.getYSize() < group.getMinY()) { + plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); + return false; + } + if (area.getZSize() < group.getMinZ()) { + plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); + return false; + } + return true; + } + + public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() < group.getSubzoneMinX()) { + plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); + return false; + } + if (area.getYSize() < group.getSubzoneMinY()) { + plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); + return false; + } + if (area.getZSize() < group.getSubzoneMinZ()) { + plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); + return false; + } + return true; + } + + public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() > group.getMaxX()) { + plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); + return false; + } + if (area.getYSize() > group.getMaxY()) { + plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); + return false; + } + if (area.getZSize() > group.getMaxZ()) { + plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); + return false; + } + return true; + } + + public boolean isSmallerThanMaxSubzone(Player player, CuboidArea area, boolean resadmin) { + if (resadmin) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() > group.getSubzoneMaxX()) { + plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); + return false; + } + if (area.getYSize() > group.getSubzoneMaxY()) { + plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); + return false; + } + if (area.getZSize() > group.getSubzoneMaxZ()) { + plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); + return false; + } + return true; + } + + public boolean addArea(CuboidArea area, String name) { + return addArea(null, area, name, true); + } + + public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin) { + return addArea(player, area, name, resadmin, true); + } + + public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin, boolean chargeMoney) { + if (!plugin.validName(name)) { + if (player != null) { + plugin.msg(player, lm.Invalid_NameCharacters); + } + return false; + } + + String NName = name; + name = name.toLowerCase(); + + if (areas.containsKey(NName)) { + if (player != null) { + plugin.msg(player, lm.Area_Exists); + } + return false; + } + + if (this.isSubzone() && !isBiggerThanMinSubzone(player, area, resadmin) + || !this.isSubzone() && !isBiggerThanMin(player, area, resadmin)) + return false; + + if (!resadmin && plugin.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { + boolean inside = false; + for (CuboidArea are : areas.values()) { + if (are.isAreaWithinArea(area)) { + inside = true; + } + } + if (!inside) { + return false; + } + } + if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { + if (player != null) { + plugin.msg(player, lm.Area_DiffWorld); + } + return false; + } + if (parent == null) { + String collideResidence = plugin.getResidenceManager().checkAreaCollision(area, this); + ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); + if (cRes != null) { + if (player != null) { + plugin.msg(player, lm.Area_Collision, cRes.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(area); + v.setErrorAreas(cRes); + plugin.getSelectionManager().showBounds(player, v); } - return count; - } - -// public Location getTeleportLocation() { -// return getTeleportLocation(null); -// } - - public Location getTeleportLocation(Player player) { - Debug.D("3 ss"); - tpLoc = null; - if (tpLoc == null) { - Debug.D("33"); - if (this.getMainArea() == null) - return null; - Debug.D("4"); - Location low = this.getMainArea().getLowLoc(); - Location high = this.getMainArea().getHighLoc(); - Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, - (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); - return this.getMiddleFreeLoc(t, player); + return false; + } + } else { + String[] szs = parent.listSubzones(); + for (String sz : szs) { + ClaimedResidence res = parent.getSubzone(sz); + if (res != null && res != this) { + if (res.checkCollision(area)) { + if (player != null) { + plugin.msg(player, lm.Area_SubzoneCollision, sz); + } + return false; + } } - return tpLoc; + } } - - public void setTpLoc(Player player, boolean resadmin) { - if (!this.perms.hasResidencePermission(player, false) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return; + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + if (parent != null) { + if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { + plugin.msg(player, lm.Area_NotWithinParent); + return false; } - if (!this.containsLoc(player.getLocation())) { - plugin.msg(player, lm.Residence_NotIn); - return; + if (!parent.getPermissions().hasResidencePermission(player, true) + && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { + plugin.msg(player, lm.Residence_ParentNoPermission); + return false; } - tpLoc = player.getLocation(); - plugin.msg(player, lm.Residence_SetTeleportLocation); - } + } - public int isSafeTp(Player player) { - if (player.getAllowFlight()) - return 0; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - if (player.getGameMode() == GameMode.CREATIVE) - return 0; - - if (plugin.getNms().isSpectator(player.getGameMode())) - return 0; - - if (tpLoc == null) - return 0; + PermissionGroup group = rPlayer.getGroup(); + if (!this.isSubzone() && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create") + || this.isSubzone() && !group.canCreateResidences() + && !plugin.hasPermission(player, "residence.create.subzone")) { + return false; + } - Location tempLoc = new Location(tpLoc.getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()); + if (areas.size() >= group.getMaxPhysicalPerResidence()) { + plugin.msg(player, lm.Area_MaxPhysical); + return false; + } + if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) + || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { + plugin.msg(player, lm.Area_SizeLimit); + return false; + } - int from = (int) tempLoc.getY(); + if (group.getMinHeight() > area.getLowLoc().getBlockY()) { + plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); + return false; + } - int fallDistance = 0; - for (int i = 0; i < 255; i++) { - tempLoc.setY(from - i); - Block block = tempLoc.getBlock(); - if (ResidencePlayerListener.isEmptyBlock(block)) { - fallDistance++; - } else { - break; - } - } - return fallDistance; - } - - public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { - Debug.D("11"); - boolean isAdmin = plugin.isResAdminOn(reqPlayer); - boolean bypassDelay = targetPlayer.hasPermission("residence.tpdelaybypass"); - - if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") - && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) - && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); - PermissionGroup group = rPlayer.getGroup(); - if (!group.hasTpAccess()) { - plugin.msg(reqPlayer, lm.General_TeleportDeny); - return; - } - if (!reqPlayer.equals(targetPlayer)) { - plugin.msg(reqPlayer, lm.General_NoPermission); - return; - } - if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { - plugin.msg(reqPlayer, lm.Residence_TeleportNoFlag); - return; - } - if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { - plugin.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); - return; + if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { + plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); + return false; + } + + if (!resadmin) { + if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) + return false; + + if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) + return false; + } + + if (chargeMoney && parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { + double chargeamount = area.getCost(group); + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + return false; + } + } + } + + ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, NName, this, area); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + plugin.getResidenceManager().removeChunkList(this.getName()); + areas.put(name, area); + plugin.getResidenceManager().calculateChunks(this.getName()); + return true; + } + + public boolean replaceArea(CuboidArea neware, String name) { + return this.replaceArea(null, neware, name, true); + } + + public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { + if (!areas.containsKey(name)) { + if (player != null) + plugin.msg(player, lm.Area_NonExist); + return false; + } + CuboidArea oldarea = areas.get(name); + if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { + if (player != null) + plugin.msg(player, lm.Area_DiffWorld); + return false; + } + if (parent == null) { + String collideResidence = plugin.getResidenceManager().checkAreaCollision(newarea, this); + ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); + if (cRes != null && player != null) { + plugin.msg(player, lm.Area_Collision, cRes.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(this.getAreaArray()); + v.setErrorAreas(cRes.getAreaArray()); + plugin.getSelectionManager().showBounds(player, v); + return false; + } + } else { + String[] szs = parent.listSubzones(); + for (String sz : szs) { + ClaimedResidence res = parent.getSubzone(sz); + if (res != null && res != this) { + if (res.checkCollision(newarea)) { + if (player != null) { + plugin.msg(player, lm.Area_SubzoneCollision, sz); + Visualizer v = new Visualizer(player); + v.setErrorAreas(res.getAreaArray()); + plugin.getSelectionManager().showBounds(player, v); } - } + return false; + } + } + } + } + // Don't remove subzones that are not in the area anymore, show colliding areas + String[] szs = listSubzones(); + for (String sz : szs) { + ClaimedResidence res = getSubzone(sz); + if (res == null || res == this) + continue; + String[] szareas = res.getAreaList(); + for (String area : szareas) { + if (newarea.isAreaWithinArea(res.getArea(area))) + continue; + + boolean good = false; + for (CuboidArea arae : getAreaArray()) { + if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { + good = true; + } + } + if (!good) { + plugin.msg(player, lm.Area_Collision, res.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(this.getAreaArray()); + v.setErrorAreas(res.getAreaArray()); + plugin.getSelectionManager().showBounds(player, v); + return false; + } + + } + if (res.getAreaArray().length == 0) { + removeSubzone(sz); + } + } + + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + if (parent != null) { + if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { + plugin.msg(player, lm.Area_NotWithinParent); + return false; + } + if (!parent.getPermissions().hasResidencePermission(player, true) + && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { + plugin.msg(player, lm.Residence_ParentNoPermission); + return false; + } + } + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (!group.canCreateResidences() && !plugin.hasPermission(player, "residence.resize")) { + return false; + } - if (!plugin.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { - int distance = isSafeTp(reqPlayer); - if (distance > 6) { - plugin.msg(reqPlayer, lm.General_TeleportConfirm, distance); - plugin.getTeleportMap().put(reqPlayer.getName(), this); - return; - } - } + if (oldarea.getSize() < newarea.getSize() + && (!this.isSubzone() && !isSmallerThanMax(player, newarea, resadmin) + || this.isSubzone() && !isSmallerThanMaxSubzone(player, newarea, resadmin))) { + plugin.msg(player, lm.Area_SizeLimit); + return false; + } + if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { + plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); + return false; + } + if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { + plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); + return false; + } - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin && !bypassDelay) { - plugin.msg(reqPlayer, lm.General_TeleportStarted, this.getName(), - plugin.getConfigManager().getTeleportDelay()); - if (plugin.getConfigManager().isTeleportTitleMessage()) - TpTimer(reqPlayer, plugin.getConfigManager().getTeleportDelay()); - plugin.getTeleportDelayMap().add(reqPlayer.getName()); - } + if (!isBiggerThanMin(player, newarea, resadmin)) + return false; - Debug.D("22"); - Location loc = this.getTeleportLocation(targetPlayer); + if (!resadmin) { + if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) + return false; + if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) + return false; + } + + if (parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { + double chargeamount = newarea.getCost(group) - oldarea.getCost(group); + if (chargeamount > 0) { + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + return false; + } + } + } + } + + ResidenceSizeChangeEvent resevent = new ResidenceSizeChangeEvent(player, this, oldarea, newarea); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + if ((!resadmin) && (player != null)) { + int chargeamount = (int) Math + .ceil((newarea.getSize() - oldarea.getSize()) * getBlockSellPrice().doubleValue()); + if ((chargeamount < 0) && (this.plugin.getConfigManager().useResMoneyBack())) { + if (!this.isServerLand()) + this.plugin.getTransactionManager().giveEconomyMoney(player, -chargeamount); + } + } + + plugin.getResidenceManager().removeChunkList(this.getName()); + areas.remove(name); + areas.put(name, newarea); + plugin.getResidenceManager().calculateChunks(this.getName()); + if (player != null) + plugin.msg(player, lm.Area_Update); + return true; + } + + public boolean addSubzone(String name, Location loc1, Location loc2) { + return this.addSubzone(null, loc1, loc2, name, true); + } + + public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { + if (player == null) { + return this.addSubzone(null, plugin.getServerLandName(), loc1, loc2, name, resadmin); + } + return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); + } + + public boolean isServerLand() { + return this.getOwnerUUID().toString() == Residence.getInstance().getServerLandUUID(); + } + + public boolean addSubzone(Player player, String name, boolean resadmin) { + if (Residence.getInstance().getSelectionManager().hasPlacedBoth(player)) { + Location loc1 = Residence.getInstance().getSelectionManager().getPlayerLoc1(player); + Location loc2 = Residence.getInstance().getSelectionManager().getPlayerLoc2(player); + return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); + } + return false; + } + + public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, + boolean resadmin) { + if (!plugin.validName(name)) { + if (player != null) { + plugin.msg(player, lm.Invalid_NameCharacters); + } + return false; + } + if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { + if (player != null) { + plugin.msg(player, lm.Subzone_SelectInside); + } + return false; + } + + String NName = name; + name = name.toLowerCase(); + + if (subzones.containsKey(name)) { + if (player != null) { + plugin.msg(player, lm.Subzone_Exists, NName); + } + return false; + } + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + if (!this.perms.playerHas(player.getName(), Flags.subzone, + this.perms.playerHas(player, Flags.admin, false))) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + } + + if (this.getSubzoneList().length >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { + plugin.msg(player, lm.Subzone_MaxAmount); + return false; + } - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) - performDelaydTp(loc, targetPlayer, reqPlayer, true); - else - performInstantTp(loc, targetPlayer, reqPlayer, true); - } - - public void TpTimer(final Player player, final int t) { - ActionBarTitleMessages.sendTitle(player, plugin.msg(lm.General_TeleportTitle), - plugin.msg(lm.General_TeleportTitleTime, t)); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (!plugin.getTeleportDelayMap().contains(player.getName())) - return; - if (t > 1) - TpTimer(player, t - 1); - } - }, 20L); - } - - public void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, - final boolean near) { - ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - plugin.getServ().getPluginManager().callEvent(tpevent); - if (tpevent.isCancelled()) - return; - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (targloc == null || targetPlayer == null || !targetPlayer.isOnline()) - return; - if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) - && plugin.getConfigManager().getTeleportDelay() > 0) - return; - else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) - plugin.getTeleportDelayMap().remove(targetPlayer.getName()); - targetPlayer.closeInventory(); - targetPlayer.teleport(targloc); - if (near) - plugin.msg(targetPlayer, lm.Residence_TeleportNear); - else - plugin.msg(targetPlayer, lm.General_TeleportSuccess); - return; - } - }, plugin.getConfigManager().getTeleportDelay() * 20L); - } - - private void performInstantTp(final Location targloc, final Player targetPlayer, Player reqPlayer, - final boolean near) { - ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - plugin.getServ().getPluginManager().callEvent(tpevent); - if (!tpevent.isCancelled()) { - targetPlayer.closeInventory(); - boolean teleported = targetPlayer.teleport(targloc); - - if (teleported) { - if (near) - plugin.msg(targetPlayer, lm.Residence_TeleportNear); - else - plugin.msg(targetPlayer, lm.General_TeleportSuccess); - } - } + if (this.getZoneDepth() >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { + plugin.msg(player, lm.Subzone_MaxDepth); + return false; + } } - public String getAreaIDbyLoc(Location loc) { - for (Entry area : areas.entrySet()) { - if (area.getValue().containsLoc(loc)) - return area.getKey(); - } - return null; - } + CuboidArea newArea = new CuboidArea(loc1, loc2); - public CuboidArea getCuboidAreabyName(String name) { - for (Entry area : areas.entrySet()) { - if (area.getKey().equals(name)) - return area.getValue(); + Set> set = subzones.entrySet(); + for (Entry resEntry : set) { + ClaimedResidence res = resEntry.getValue(); + if (res.checkCollision(newArea)) { + if (player != null) { + plugin.msg(player, lm.Subzone_Collide, resEntry.getKey()); + Visualizer v = new Visualizer(player); + v.setAreas(newArea); + v.setErrorAreas(res); + plugin.getSelectionManager().showBounds(player, v); } - return null; + return false; + } } - - public void removeArea(String id) { - plugin.getResidenceManager().removeChunkList(this.getName()); - areas.remove(id); - plugin.getResidenceManager().calculateChunks(this.getName()); + ClaimedResidence newres; + if (player != null) { + newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); + newres.addArea(player, newArea, NName, resadmin); + } else { + newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); + newres.addArea(newArea, NName); } - public void removeArea(Player player, String id, boolean resadmin) { - if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { - if (!areas.containsKey(id)) { - plugin.msg(player, lm.Area_NonExist); - return; - } - if (areas.size() == 1 && !plugin.getConfigManager().allowEmptyResidences()) { - plugin.msg(player, lm.Area_RemoveLast); - return; - } + if (newres.getAreaCount() != 0) { + newres.getPermissions().applyDefaultFlags(); + if (player != null) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + newres.setEnterMessage(group.getDefaultEnterMessage()); + newres.setLeaveMessage(group.getDefaultLeaveMessage()); + } + if (plugin.getConfigManager().flagsInherit()) { + newres.getPermissions().setParent(perms); + } - ResidenceAreaDeleteEvent resevent = new ResidenceAreaDeleteEvent(player, this, - player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return; + newres.resName = NName; - removeArea(id); - if (player != null) - plugin.msg(player, lm.Area_Remove); - } else { - if (player != null) - plugin.msg(player, lm.General_NoPermission); - } + newres.setCreateTime(); + + ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, NName, newres, newArea); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + subzones.put(name, newres); + if (player != null) { + plugin.msg(player, lm.Area_Create, NName); + plugin.msg(player, lm.Subzone_Create, NName); + } + return true; + } + if (player != null) { + plugin.msg(player, lm.Subzone_CreateFail, NName); + } + return false; + } + + public ClaimedResidence getSubzoneByLoc(Location loc) { + Set> set = subzones.entrySet(); + ClaimedResidence res = null; + for (Entry entry : set) { + if (entry.getValue().containsLoc(loc)) { + res = entry.getValue(); + break; + } + } + if (res == null) + return null; + ClaimedResidence subrez = res.getSubzoneByLoc(loc); + if (subrez == null) { + return res; + } + return subrez; + } + + public ClaimedResidence getSubzone(String subzonename) { + subzonename = subzonename.toLowerCase(); + + if (!subzonename.contains(".")) { + return subzones.get(subzonename); + } + String split[] = subzonename.split("\\."); + ClaimedResidence get = subzones.get(split[0]); + for (int i = 1; i < split.length; i++) { + if (get == null) { + return null; + } + get = get.getSubzone(split[i]); + } + return get; + } + + public String getSubzoneNameByRes(ClaimedResidence res) { + Set> set = subzones.entrySet(); + for (Entry entry : set) { + if (entry.getValue() == res) { + return entry.getValue().getResidenceName(); + } + String n = entry.getValue().getSubzoneNameByRes(res); + if (n != null) { + return entry.getValue().getResidenceName() + "." + n; + } + } + return null; + } + + public String[] getSubzoneList() { + ArrayList zones = new ArrayList<>(); + Set set = subzones.keySet(); + for (String key : set) { + if (key != null) { + zones.add(key); + } + } + return zones.toArray(new String[zones.size()]); + } + + public boolean checkCollision(CuboidArea area) { + Set set = areas.keySet(); + for (String key : set) { + CuboidArea checkarea = areas.get(key); + if (checkarea != null) { + if (checkarea.checkCollision(area)) { + return true; + } + } + } + return false; + } + + public boolean containsLoc(Location loc) { + Collection keys = areas.values(); + for (CuboidArea key : keys) { + if (key.containsLoc(loc)) { + if (parent != null) + return parent.containsLoc(loc); + return true; + } + } + return false; + } + + public ClaimedResidence getParent() { + return parent; + } + + public String getTopParentName() { + return this.getTopParent().getName(); + } + + public ClaimedResidence getTopParent() { + if (parent == null) + return this; + return parent.getTopParent(); + } + + public boolean isTopArea() { + return parent == null; + } + + public boolean removeSubzone(String name) { + return this.removeSubzone(null, name, true); + } + + public boolean removeSubzone(Player player, String name, boolean resadmin) { + if (name == null) + return false; + name = name.toLowerCase(); + ClaimedResidence res = subzones.get(name); + if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + subzones.remove(name); + if (player != null) { + plugin.msg(player, lm.Subzone_Remove, name); + } + return true; + } + + public long getTotalSize() { + Collection set = areas.values(); + long size = 0; + if (!plugin.getConfigManager().isNoCostForYBlocks()) + for (CuboidArea entry : set) { + size = size + entry.getSize(); + } + else + for (CuboidArea entry : set) { + size = size + (entry.getXSize() * entry.getZSize()); + } + return size; + } + + public long getXZSize() { + Collection set = areas.values(); + long size = 0; + for (CuboidArea entry : set) { + size = size + (entry.getXSize() * entry.getZSize()); + } + return size; + } + + public CuboidArea[] getAreaArray() { + CuboidArea[] temp = new CuboidArea[areas.size()]; + int i = 0; + for (CuboidArea area : areas.values()) { + temp[i] = area; + i++; + } + return temp; + } + + public Map getAreaMap() { + return areas; + } + + public ResidencePermissions getPermissions() { + return perms; + } + + public String getEnterMessage() { + return enterMessage; + } + + public String getLeaveMessage() { + return leaveMessage; + } + + public String getShopDesc() { + return ShopDesc; + } + + public void setEnterMessage(String message) { + enterMessage = message; + } + + public void setLeaveMessage(String message) { + leaveMessage = message; + } + + public void setShopDesc(String message) { + ShopDesc = message; + } + + public void setEnterLeaveMessage(CommandSender sender, String message, boolean enter, boolean resadmin) { + if (message != null) { + if (message.equals("")) { + message = null; + } + } + if (sender instanceof Player) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer((Player) sender); + PermissionGroup group = rPlayer.getGroup(); + if (!group.canSetEnterLeaveMessages() && !resadmin) { + plugin.msg(sender, lm.Residence_OwnerNoPermission); + return; + } + if (!perms.hasResidencePermission(sender, false) && !resadmin) { + plugin.msg(sender, lm.General_NoPermission); + return; + } + } + if (enter) { + this.setEnterMessage(message); + } else { + this.setLeaveMessage(message); + } + plugin.msg(sender, lm.Residence_MessageChange); + } + + public Location getMiddleFreeLoc(Location insideLoc, Player player) { + Debug.D("d"); + CuboidArea area = this.getAreaByLoc(insideLoc); + if (area == null) { + return insideLoc; + } + + int y = area.getHighLoc().getBlockY(); + int lowY = area.getLowLoc().getBlockY(); + + int x = area.getLowLoc().getBlockX() + area.getXSize() / 2; + int z = area.getLowLoc().getBlockZ() + area.getZSize() / 2; + + Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); + boolean found = false; + int it = 1; + int maxIt = newLoc.getBlockY() + 1; + while (it < maxIt) { + it++; + + if (newLoc.getBlockY() < lowY) + break; + + newLoc.add(0, -1, 0); + + Block block = newLoc.getBlock(); + Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); + Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); + if (ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2) + && !ResidencePlayerListener.isEmptyBlock(block3)) { + found = true; + break; + } + } + if (found) { + if (player != null) { + newLoc.setPitch(player.getLocation().getPitch()); + newLoc.setYaw(player.getLocation().getYaw()); + } + return newLoc; + } + return getOutsideFreeLoc(insideLoc, player); + } + + public Location getOutsideFreeLoc(Location insideLoc, Player player) { + CuboidArea area = this.getAreaByLoc(insideLoc); + if (area == null) { + return insideLoc; + } + + List randomLocList = new ArrayList(); + + for (int z = -1; z < area.getZSize() + 1; z++) { + randomLocList.add(new RandomLoc(area.getLowLoc().getX(), 0, area.getLowLoc().getZ() + z)); + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + area.getXSize(), 0, area.getLowLoc().getZ() + z)); + } + + for (int x = -1; x < area.getXSize() + 1; x++) { + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ())); + randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ() + area.getZSize())); + } + + Location loc = insideLoc.clone(); + + boolean found = false; + int it = 0; + int maxIt = 30; + while (!found && it < maxIt) { + it++; + + Random ran = new Random(System.currentTimeMillis()); + if (randomLocList.isEmpty()) + break; + int check = ran.nextInt(randomLocList.size()); + RandomLoc place = randomLocList.get(check); + randomLocList.remove(check); + double x = place.getX(); + double z = place.getZ(); + + loc.setX(x); + loc.setZ(z); + loc.setY(area.getHighLoc().getBlockY()); + + int max = area.getHighLoc().getBlockY(); + max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; + + for (int i = max; i > area.getLowLoc().getY(); i--) { + loc.setY(i); + Block block = loc.getBlock(); + Block block2 = loc.clone().add(0, 1, 0).getBlock(); + Block block3 = loc.clone().add(0, -1, 0).getBlock(); + if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) + && ResidencePlayerListener.isEmptyBlock(block2)) { + break; + } + } + + if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER) + continue; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) + && !player.hasPermission("residence.admin.tp")) + continue; + + found = true; + loc.add(0.5, 0.1, 0.5); + break; + } + + if (!found && plugin.getConfigManager().getKickLocation() != null) + return plugin.getConfigManager().getKickLocation(); + if (player != null) { + loc.setPitch(player.getLocation().getPitch()); + loc.setYaw(player.getLocation().getYaw()); + } + return loc; + } + + public CuboidArea getMainArea() { + CuboidArea area = areas.get(this.isSubzone() ? this.getResidenceName() : "main"); + if (area == null && !areas.isEmpty()) + for (Entry one : areas.entrySet()) { + area = one.getValue(); + break; + } + return area; + } + + public CuboidArea getAreaByLoc(Location loc) { + for (CuboidArea thisarea : areas.values()) { + if (thisarea.containsLoc(loc)) { + return thisarea; + } + } + return null; + } + + public String[] listSubzones() { + String list[] = new String[subzones.size()]; + int i = 0; + for (String res : subzones.keySet()) { + list[i] = res; + i++; + } + return list; + } + + public List getSubzones() { + List list = new ArrayList(); + for (Entry res : subzones.entrySet()) { + list.add(res.getValue()); + } + return list; + } + + public int getSubzonesAmount(Boolean includeChild) { + int i = 0; + for (Entry res : subzones.entrySet()) { + i++; + if (includeChild) + i += res.getValue().getSubzonesAmount(includeChild); + } + return i; + } + + public void printSubzoneList(CommandSender sender, int page) { + + PageInfo pi = new PageInfo(6, subzones.size(), page); + + if (!pi.isPageOk()) { + sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); + return; + } + + plugin.msg(sender, lm.InformationPage_TopLine, plugin.msg(lm.General_Subzones)); + plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), + pi.getTotalPages(), pi.getTotalEntries())); + RawMessage rm = new RawMessage(); + for (int i = pi.getStart(); i <= pi.getEnd(); i++) { + ClaimedResidence res = getSubzones().get(i); + if (res == null) + continue; + rm.add(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " + + plugin.msg(lm.General_Owner, res.getOwner()), "Teleport to " + res.getName(), + "res tp " + res.getName()); + rm.show(sender); + rm.clear(); + } + + plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, "res sublist " + this.getName()); + } + + public void printAreaList(Player player, int page) { + ArrayList temp = new ArrayList<>(); + for (String area : areas.keySet()) { + temp.add(area); + } + plugin.getInfoPageManager().printInfo(player, "res area list " + this.getName(), + plugin.msg(lm.General_PhysicalAreas), temp, page); + } + + public void printAdvancedAreaList(Player player, int page) { + ArrayList temp = new ArrayList<>(); + for (Entry entry : areas.entrySet()) { + CuboidArea a = entry.getValue(); + Location h = a.getHighLoc(); + Location l = a.getLowLoc(); + temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED + entry.getKey() + " " + + ChatColor.YELLOW + "P1:" + ChatColor.RED + "(" + h.getBlockX() + "," + h.getBlockY() + "," + + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," + + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED + + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); + } + plugin.getInfoPageManager().printInfo(player, "res area listall " + this.getName(), + plugin.msg(lm.General_PhysicalAreas), temp, page); + } + + public String[] getAreaList() { + String arealist[] = new String[areas.size()]; + int i = 0; + for (Entry entry : areas.entrySet()) { + arealist[i] = entry.getKey(); + i++; + } + return arealist; + } + + public int getZoneDepth() { + int count = 0; + ClaimedResidence res = parent; + while (res != null) { + count++; + res = res.getParent(); + } + return count; + } + +// public Location getTeleportLocation() { +// return getTeleportLocation(null); +// } + + public Location getTeleportLocation(Player player) { + Debug.D("3 ss"); + tpLoc = null; + if (tpLoc == null) { + Debug.D("33"); + if (this.getMainArea() == null) + return null; + Debug.D("4"); + Location low = this.getMainArea().getLowLoc(); + Location high = this.getMainArea().getHighLoc(); + Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, + (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); + return this.getMiddleFreeLoc(t, player); + } + return tpLoc; + } + + public void setTpLoc(Player player, boolean resadmin) { + if (!this.perms.hasResidencePermission(player, false) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return; + } + if (!this.containsLoc(player.getLocation())) { + plugin.msg(player, lm.Residence_NotIn); + return; + } + tpLoc = player.getLocation(); + plugin.msg(player, lm.Residence_SetTeleportLocation); + } + + public int isSafeTp(Player player) { + if (player.getAllowFlight()) + return 0; + + if (player.getGameMode() == GameMode.CREATIVE) + return 0; + + if (plugin.getNms().isSpectator(player.getGameMode())) + return 0; + + if (tpLoc == null) + return 0; + + Location tempLoc = new Location(tpLoc.getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()); + + int from = (int) tempLoc.getY(); + + int fallDistance = 0; + for (int i = 0; i < 255; i++) { + tempLoc.setY(from - i); + Block block = tempLoc.getBlock(); + if (ResidencePlayerListener.isEmptyBlock(block)) { + fallDistance++; + } else { + break; + } + } + return fallDistance; + } + + public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { + Debug.D("11"); + boolean isAdmin = plugin.isResAdminOn(reqPlayer); + boolean bypassDelay = targetPlayer.hasPermission("residence.tpdelaybypass"); + + if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") + && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) + && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); + PermissionGroup group = rPlayer.getGroup(); + if (!group.hasTpAccess()) { + plugin.msg(reqPlayer, lm.General_TeleportDeny); + return; + } + if (!reqPlayer.equals(targetPlayer)) { + plugin.msg(reqPlayer, lm.General_NoPermission); + return; + } + if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { + plugin.msg(reqPlayer, lm.Residence_TeleportNoFlag); + return; + } + if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { + plugin.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); + return; + } + } + + if (!plugin.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { + int distance = isSafeTp(reqPlayer); + if (distance > 6) { + plugin.msg(reqPlayer, lm.General_TeleportConfirm, distance); + plugin.getTeleportMap().put(reqPlayer.getName(), this); + return; + } + } + + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin && !bypassDelay) { + plugin.msg(reqPlayer, lm.General_TeleportStarted, this.getName(), + plugin.getConfigManager().getTeleportDelay()); + if (plugin.getConfigManager().isTeleportTitleMessage()) + TpTimer(reqPlayer, plugin.getConfigManager().getTeleportDelay()); + plugin.getTeleportDelayMap().add(reqPlayer.getName()); + } + + Debug.D("22"); + Location loc = this.getTeleportLocation(targetPlayer); + + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) + performDelaydTp(loc, targetPlayer, reqPlayer, true); + else + performInstantTp(loc, targetPlayer, reqPlayer, true); + } + + public void TpTimer(final Player player, final int t) { + ActionBarTitleMessages.sendTitle(player, plugin.msg(lm.General_TeleportTitle), + plugin.msg(lm.General_TeleportTitleTime, t)); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (!plugin.getTeleportDelayMap().contains(player.getName())) + return; + if (t > 1) + TpTimer(player, t - 1); + } + }, 20L); + } + + public void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, + final boolean near) { + ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); + plugin.getServ().getPluginManager().callEvent(tpevent); + if (tpevent.isCancelled()) + return; + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (targloc == null || targetPlayer == null || !targetPlayer.isOnline()) + return; + if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) + && plugin.getConfigManager().getTeleportDelay() > 0) + return; + else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) + plugin.getTeleportDelayMap().remove(targetPlayer.getName()); + targetPlayer.closeInventory(); + targetPlayer.teleport(targloc); + if (near) + plugin.msg(targetPlayer, lm.Residence_TeleportNear); + else + plugin.msg(targetPlayer, lm.General_TeleportSuccess); + return; + } + }, plugin.getConfigManager().getTeleportDelay() * 20L); + } + + private void performInstantTp(final Location targloc, final Player targetPlayer, Player reqPlayer, + final boolean near) { + ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); + plugin.getServ().getPluginManager().callEvent(tpevent); + if (!tpevent.isCancelled()) { + targetPlayer.closeInventory(); + boolean teleported = targetPlayer.teleport(targloc); + + if (teleported) { + if (near) + plugin.msg(targetPlayer, lm.Residence_TeleportNear); + else + plugin.msg(targetPlayer, lm.General_TeleportSuccess); + } + } + } + + public String getAreaIDbyLoc(Location loc) { + for (Entry area : areas.entrySet()) { + if (area.getValue().containsLoc(loc)) + return area.getKey(); + } + return null; + } + + public CuboidArea getCuboidAreabyName(String name) { + for (Entry area : areas.entrySet()) { + if (area.getKey().equals(name)) + return area.getValue(); + } + return null; + } + + public void removeArea(String id) { + plugin.getResidenceManager().removeChunkList(this.getName()); + areas.remove(id); + plugin.getResidenceManager().calculateChunks(this.getName()); + } + + public void removeArea(Player player, String id, boolean resadmin) { + if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { + if (!areas.containsKey(id)) { + plugin.msg(player, lm.Area_NonExist); + return; + } + if (areas.size() == 1 && !plugin.getConfigManager().allowEmptyResidences()) { + plugin.msg(player, lm.Area_RemoveLast); + return; + } + + ResidenceAreaDeleteEvent resevent = new ResidenceAreaDeleteEvent(player, this, + player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; + + removeArea(id); + if (player != null) + plugin.msg(player, lm.Area_Remove); + } else { + if (player != null) + plugin.msg(player, lm.General_NoPermission); } + } - public Map save() { - Map root = new HashMap<>(); - Map areamap = new HashMap<>(); + public Map save() { + Map root = new HashMap<>(); + Map areamap = new HashMap<>(); - if (mainRes) - root.put("MainResidence", mainRes); - if (createTime != 0L) - root.put("CreatedOn", createTime); + if (mainRes) + root.put("MainResidence", mainRes); + if (createTime != 0L) + root.put("CreatedOn", createTime); // if (this.getTown() != null && !this.isSubzone()) { // if (this.getTown().getMainResidence().equals(this)) @@ -1447,25 +1447,25 @@ public Map save() { // root.put("Town", this.getTown().getTownName()); // } - if (plugin.getConfigManager().isNewSaveMechanic()) { - if (enterMessage != null && leaveMessage != null) { - MinimizeMessages min = plugin.getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, - leaveMessage); - if (min == null) { - if (enterMessage != null) - root.put("EnterMessage", enterMessage); - if (leaveMessage != null) - root.put("LeaveMessage", leaveMessage); - } else { - root.put("Messages", min.getId()); - } - } + if (plugin.getConfigManager().isNewSaveMechanic()) { + if (enterMessage != null && leaveMessage != null) { + MinimizeMessages min = plugin.getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, + leaveMessage); + if (min == null) { + if (enterMessage != null) + root.put("EnterMessage", enterMessage); + if (leaveMessage != null) + root.put("LeaveMessage", leaveMessage); } else { - if (enterMessage != null) - root.put("EnterMessage", enterMessage); - if (leaveMessage != null) - root.put("LeaveMessage", leaveMessage); + root.put("Messages", min.getId()); } + } + } else { + if (enterMessage != null) + root.put("EnterMessage", enterMessage); + if (leaveMessage != null) + root.put("LeaveMessage", leaveMessage); + } // if (enterMessage != null) // root.put("EnterMessage", enterMessage); @@ -1476,125 +1476,125 @@ public Map save() { // root.put("LeaveMessage", id); // } - if (ShopDesc != null) - root.put("ShopDescription", ShopDesc); - if (bank.getStoredMoneyD() != 0) - root.put("StoredMoney", bank.getStoredMoneyD()); - if (BlockSellPrice != 0D) - root.put("BlockSellPrice", BlockSellPrice); - - if (!ChatPrefix.equals("")) - root.put("ChatPrefix", ChatPrefix); - if (!ChannelColor.name().equals(plugin.getConfigManager().getChatColor().name()) - && !ChannelColor.name().equals("WHITE")) { - root.put("ChannelColor", ChannelColor.name()); - } - - Map map = blacklist.save(); - if (!map.isEmpty()) - root.put("BlackList", map); - map = ignorelist.save(); - if (!map.isEmpty()) - root.put("IgnoreList", map); - - if (plugin.getConfigManager().isNewSaveMechanic()) { - for (Entry entry : areas.entrySet()) { - areamap.put(entry.getKey(), entry.getValue().newSave()); - } - } else { - for (Entry entry : areas.entrySet()) { - areamap.put(entry.getKey(), entry.getValue().save()); - } - } - - root.put("Areas", areamap); - Map subzonemap = new HashMap<>(); - for (Entry sz : subzones.entrySet()) { - subzonemap.put(sz.getValue().getResidenceName(), sz.getValue().save()); - } - if (!subzonemap.isEmpty()) - root.put("Subzones", subzonemap); - root.put("Permissions", perms.save(this.getWorld())); - - if (!this.cmdBlackList.isEmpty()) - root.put("cmdBlackList", this.cmdBlackList); - if (!this.cmdWhiteList.isEmpty()) - root.put("cmdWhiteList", this.cmdWhiteList); - - if (tpLoc != null) { - if (plugin.getConfigManager().isNewSaveMechanic()) { - root.put("TPLoc", - convertDouble(tpLoc.getX()) + ":" + convertDouble(tpLoc.getY()) + ":" - + convertDouble(tpLoc.getZ()) + ":" + convertDouble(tpLoc.getPitch()) + ":" - + convertDouble(tpLoc.getYaw())); - } else { - Map tpmap = new HashMap(); - tpmap.put("X", convertDouble(this.tpLoc.getX())); - tpmap.put("Y", convertDouble(this.tpLoc.getY())); - tpmap.put("Z", convertDouble(this.tpLoc.getZ())); - tpmap.put("Pitch", convertDouble(this.tpLoc.getPitch())); - tpmap.put("Yaw", convertDouble(this.tpLoc.getYaw())); - root.put("TPLoc", tpmap); - } - } - return root; - } - - // Converting double with comman to dots format and striping to 2 numbers after - // dot - private static double convertDouble(double d) { - return convertDouble(String.valueOf(d)); - } - - private static double convertDouble(String dString) { - DecimalFormat formatter = new DecimalFormat("#0.00"); - formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); - dString = dString.replace(",", "."); - Double d = 0D; - try { - d = Double.valueOf(dString); - d = Double.valueOf(formatter.format(d)); - } catch (Exception e) { - } - return d; - } - - @SuppressWarnings("unchecked") - public static ClaimedResidence load(String worldName, Map root, ClaimedResidence parent, - Residence plugin) throws Exception { - ClaimedResidence res = new ClaimedResidence(plugin); - if (root == null) - throw new Exception("Null residence!"); - - if (root.containsKey("CapitalizedName")) - res.resName = ((String) root.get("CapitalizedName")); - - if (root.containsKey("CreatedOn")) - res.createTime = ((Long) root.get("CreatedOn")); - else - res.createTime = System.currentTimeMillis(); - - if (root.containsKey("ShopDescription")) - res.setShopDesc((String) root.get("ShopDescription")); - - if (root.containsKey("StoredMoney")) { - if (root.get("StoredMoney") instanceof Double) - res.bank.setStoredMoney((Double) root.get("StoredMoney")); - else - res.bank.setStoredMoney((Integer) root.get("StoredMoney")); - } - - if (root.containsKey("BlackList")) - res.blacklist = ResidenceItemList.load(plugin, res, (Map) root.get("BlackList")); - if (root.containsKey("IgnoreList")) - res.ignorelist = ResidenceItemList.load(plugin, res, (Map) root.get("IgnoreList")); - - Map areamap = (Map) root.get("Areas"); - - res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); - - if (res.getPermissions().getOwnerLastKnownName() == null) - return null; + if (ShopDesc != null) + root.put("ShopDescription", ShopDesc); + if (bank.getStoredMoneyD() != 0) + root.put("StoredMoney", bank.getStoredMoneyD()); + if (BlockSellPrice != 0D) + root.put("BlockSellPrice", BlockSellPrice); + + if (!ChatPrefix.equals("")) + root.put("ChatPrefix", ChatPrefix); + if (!ChannelColor.name().equals(plugin.getConfigManager().getChatColor().name()) + && !ChannelColor.name().equals("WHITE")) { + root.put("ChannelColor", ChannelColor.name()); + } + + Map map = blacklist.save(); + if (!map.isEmpty()) + root.put("BlackList", map); + map = ignorelist.save(); + if (!map.isEmpty()) + root.put("IgnoreList", map); + + if (plugin.getConfigManager().isNewSaveMechanic()) { + for (Entry entry : areas.entrySet()) { + areamap.put(entry.getKey(), entry.getValue().newSave()); + } + } else { + for (Entry entry : areas.entrySet()) { + areamap.put(entry.getKey(), entry.getValue().save()); + } + } + + root.put("Areas", areamap); + Map subzonemap = new HashMap<>(); + for (Entry sz : subzones.entrySet()) { + subzonemap.put(sz.getValue().getResidenceName(), sz.getValue().save()); + } + if (!subzonemap.isEmpty()) + root.put("Subzones", subzonemap); + root.put("Permissions", perms.save(this.getWorld())); + + if (!this.cmdBlackList.isEmpty()) + root.put("cmdBlackList", this.cmdBlackList); + if (!this.cmdWhiteList.isEmpty()) + root.put("cmdWhiteList", this.cmdWhiteList); + + if (tpLoc != null) { + if (plugin.getConfigManager().isNewSaveMechanic()) { + root.put("TPLoc", + convertDouble(tpLoc.getX()) + ":" + convertDouble(tpLoc.getY()) + ":" + + convertDouble(tpLoc.getZ()) + ":" + convertDouble(tpLoc.getPitch()) + ":" + + convertDouble(tpLoc.getYaw())); + } else { + Map tpmap = new HashMap(); + tpmap.put("X", convertDouble(this.tpLoc.getX())); + tpmap.put("Y", convertDouble(this.tpLoc.getY())); + tpmap.put("Z", convertDouble(this.tpLoc.getZ())); + tpmap.put("Pitch", convertDouble(this.tpLoc.getPitch())); + tpmap.put("Yaw", convertDouble(this.tpLoc.getYaw())); + root.put("TPLoc", tpmap); + } + } + return root; + } + + // Converting double with comman to dots format and striping to 2 numbers after + // dot + private static double convertDouble(double d) { + return convertDouble(String.valueOf(d)); + } + + private static double convertDouble(String dString) { + DecimalFormat formatter = new DecimalFormat("#0.00"); + formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); + dString = dString.replace(",", "."); + Double d = 0D; + try { + d = Double.valueOf(dString); + d = Double.valueOf(formatter.format(d)); + } catch (Exception e) { + } + return d; + } + + @SuppressWarnings("unchecked") + public static ClaimedResidence load(String worldName, Map root, ClaimedResidence parent, + Residence plugin) throws Exception { + ClaimedResidence res = new ClaimedResidence(plugin); + if (root == null) + throw new Exception("Null residence!"); + + if (root.containsKey("CapitalizedName")) + res.resName = ((String) root.get("CapitalizedName")); + + if (root.containsKey("CreatedOn")) + res.createTime = ((Long) root.get("CreatedOn")); + else + res.createTime = System.currentTimeMillis(); + + if (root.containsKey("ShopDescription")) + res.setShopDesc((String) root.get("ShopDescription")); + + if (root.containsKey("StoredMoney")) { + if (root.get("StoredMoney") instanceof Double) + res.bank.setStoredMoney((Double) root.get("StoredMoney")); + else + res.bank.setStoredMoney((Integer) root.get("StoredMoney")); + } + + if (root.containsKey("BlackList")) + res.blacklist = ResidenceItemList.load(plugin, res, (Map) root.get("BlackList")); + if (root.containsKey("IgnoreList")) + res.ignorelist = ResidenceItemList.load(plugin, res, (Map) root.get("IgnoreList")); + + Map areamap = (Map) root.get("Areas"); + + res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); + + if (res.getPermissions().getOwnerLastKnownName() == null) + return null; // if (root.containsKey("TownCap")) { // String townName = (String) root.get("TownCap"); @@ -1612,360 +1612,360 @@ public static ClaimedResidence load(String worldName, Map root, // res.setTown(t); // } - if (root.containsKey("MainResidence")) - res.mainRes = (Boolean) root.get("MainResidence"); - - if (root.containsKey("BlockSellPrice")) - res.BlockSellPrice = (Double) root.get("BlockSellPrice"); - else { - res.BlockSellPrice = 0D; - } - - World world = plugin.getServ().getWorld(res.perms.getWorld()); - if (world == null) - throw new Exception("Cant Find World: " + res.perms.getWorld()); - for (Entry map : areamap.entrySet()) { - if (map.getValue() instanceof String) { - // loading new same format - res.areas.put(map.getKey(), CuboidArea.newLoad((String) map.getValue(), world)); - } else { - // loading old format - res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); - } - } - - if (root.containsKey("Subzones")) { - Map subzonemap = (Map) root.get("Subzones"); - for (Entry map : subzonemap.entrySet()) { - ClaimedResidence subres = ClaimedResidence.load(worldName, (Map) map.getValue(), res, - plugin); - - if (subres == null) - continue; - - if (subres.getResidenceName() == null) - subres.setName(map.getKey()); - - if (plugin.getConfigManager().flagsInherit()) - subres.getPermissions().setParent(res.getPermissions()); - - // Adding subzone owner into hies res list if parent zone owner is not same - // person - if (subres.getParent() != null && !subres.getOwnerUUID().equals(subres.getParent().getOwnerUUID())) - plugin.getPlayerManager().addResidence(subres.getOwner(), subres); - - res.subzones.put(map.getKey().toLowerCase(), subres); - } - } - - if (root.containsKey("EnterMessage") && root.get("EnterMessage") instanceof String) - res.enterMessage = (String) root.get("EnterMessage"); - if (root.containsKey("LeaveMessage") && root.get("LeaveMessage") instanceof String) - res.leaveMessage = (String) root.get("LeaveMessage"); - - if (root.containsKey("Messages") && root.get("Messages") instanceof Integer) { - res.enterMessage = plugin.getResidenceManager().getChacheMessageEnter(worldName, - (Integer) root.get("Messages")); - res.leaveMessage = plugin.getResidenceManager().getChacheMessageLeave(worldName, - (Integer) root.get("Messages")); - } - - res.parent = parent; - - if (root.get("TPLoc") instanceof String) { - String tpLoc = (String) root.get("TPLoc"); - - double pitch = 0.0; - double yaw = 0.0; - - try { - String[] split = tpLoc.split(":"); - if (split.length > 4) - yaw = convertDouble(split[4]); - if (split.length > 3) - pitch = convertDouble(split[3]); - res.tpLoc = new Location(world, convertDouble(split[0]), convertDouble(split[1]), - convertDouble(split[2])); - } catch (Exception e) { - } - - res.tpLoc.setPitch((float) pitch); - res.tpLoc.setYaw((float) yaw); - - } else { - Map tploc = (Map) root.get("TPLoc"); - if (tploc != null) { - double pitch = 0.0; - double yaw = 0.0; - - if (tploc.containsKey("Yaw")) - yaw = convertDouble(tploc.get("Yaw").toString()); - - if (tploc.containsKey("Pitch")) - pitch = convertDouble(tploc.get("Pitch").toString()); - - res.tpLoc = new Location(world, convertDouble(tploc.get("X").toString()), - convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z").toString())); - res.tpLoc.setPitch((float) pitch); - res.tpLoc.setYaw((float) yaw); - } - } - - if (root.containsKey("cmdBlackList")) - res.cmdBlackList = (List) root.get("cmdBlackList"); - if (root.containsKey("cmdWhiteList")) - res.cmdWhiteList = (List) root.get("cmdWhiteList"); - - if (root.containsKey("ChatPrefix")) - res.ChatPrefix = (String) root.get("ChatPrefix"); - - if (root.containsKey("ChannelColor")) - res.ChannelColor = ChatColor.valueOf((String) root.get("ChannelColor")); - else { - res.ChannelColor = plugin.getConfigManager().getChatColor(); - } - - return res; - } - - public int getAreaCount() { - return areas.size(); - } - - public boolean renameSubzone(String oldName, String newName) { - return this.renameSubzone(null, oldName, newName, true); - } - - public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { - if (!plugin.validName(newName)) { - plugin.msg(player, lm.Invalid_NameCharacters); - return false; - } - if (oldName == null) - return false; - if (newName == null) - return false; - String newN = newName; - oldName = oldName.toLowerCase(); - newName = newName.toLowerCase(); - - ClaimedResidence res = subzones.get(oldName); - if (res == null) { - if (player != null) - plugin.msg(player, lm.Invalid_Subzone); - return false; - } - if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return false; - } - if (subzones.containsKey(newName)) { - if (player != null) - plugin.msg(player, lm.Subzone_Exists, newName); - return false; - } - res.setName(newN); - subzones.put(newName, res); - subzones.remove(oldName); - if (player != null) - plugin.msg(player, lm.Subzone_Rename, oldName, newName); - return true; - } - - public boolean renameArea(String oldName, String newName) { - return this.renameArea(null, oldName, newName, true); - } - - public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { - if (!plugin.validName(newName)) { - plugin.msg(player, lm.Invalid_NameCharacters); - return false; - } - if (player == null || perms.hasResidencePermission(player, true) || resadmin) { - if (areas.containsKey(newName)) { - if (player != null) - plugin.msg(player, lm.Area_Exists); - return false; - } - CuboidArea area = areas.get(oldName); - if (area == null) { - if (player != null) - plugin.msg(player, lm.Area_InvalidName); - return false; - } - areas.put(newName, area); - areas.remove(oldName); - if (player != null) - plugin.msg(player, lm.Area_Rename, oldName, newName); - return true; - } - plugin.msg(player, lm.General_NoPermission); - return false; - } + if (root.containsKey("MainResidence")) + res.mainRes = (Boolean) root.get("MainResidence"); - public CuboidArea getArea(String name) { - return areas.get(name); + if (root.containsKey("BlockSellPrice")) + res.BlockSellPrice = (Double) root.get("BlockSellPrice"); + else { + res.BlockSellPrice = 0D; } - public String getName() { - String name = this.resName; - if (this.getParent() != null) - name = this.getParent().getName() + "." + name; - if (name == null) - return "Unknown"; - return name; + World world = plugin.getServ().getWorld(res.perms.getWorld()); + if (world == null) + throw new Exception("Cant Find World: " + res.perms.getWorld()); + for (Entry map : areamap.entrySet()) { + if (map.getValue() instanceof String) { + // loading new same format + res.areas.put(map.getKey(), CuboidArea.newLoad((String) map.getValue(), world)); + } else { + // loading old format + res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); + } } - public void remove() { - plugin.getResidenceManager().removeResidence(this); - plugin.getResidenceManager().removeChunkList(this.getName()); - plugin.getPlayerManager().removeResFromPlayer(this); - } + if (root.containsKey("Subzones")) { + Map subzonemap = (Map) root.get("Subzones"); + for (Entry map : subzonemap.entrySet()) { + ClaimedResidence subres = ClaimedResidence.load(worldName, (Map) map.getValue(), res, + plugin); - public ResidenceBank getBank() { - return bank; - } + if (subres == null) + continue; - public String getWorld() { - return perms.getWorld(); - } + if (subres.getResidenceName() == null) + subres.setName(map.getKey()); - public ResidencePlayer getRPlayer() { - return plugin.getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); - } + if (plugin.getConfigManager().flagsInherit()) + subres.getPermissions().setParent(res.getPermissions()); - public PermissionGroup getOwnerGroup() { - return getRPlayer().getGroup(getPermissions().getWorld()); - } + // Adding subzone owner into hies res list if parent zone owner is not same + // person + if (subres.getParent() != null && !subres.getOwnerUUID().equals(subres.getParent().getOwnerUUID())) + plugin.getPlayerManager().addResidence(subres.getOwner(), subres); - public String getOwner() { - return perms.getOwner(); + res.subzones.put(map.getKey().toLowerCase(), subres); + } } - public boolean isOwner(String name) { - Player player = Bukkit.getPlayer(name); + if (root.containsKey("EnterMessage") && root.get("EnterMessage") instanceof String) + res.enterMessage = (String) root.get("EnterMessage"); + if (root.containsKey("LeaveMessage") && root.get("LeaveMessage") instanceof String) + res.leaveMessage = (String) root.get("LeaveMessage"); + + if (root.containsKey("Messages") && root.get("Messages") instanceof Integer) { + res.enterMessage = plugin.getResidenceManager().getChacheMessageEnter(worldName, + (Integer) root.get("Messages")); + res.leaveMessage = plugin.getResidenceManager().getChacheMessageLeave(worldName, + (Integer) root.get("Messages")); + } + + res.parent = parent; + + if (root.get("TPLoc") instanceof String) { + String tpLoc = (String) root.get("TPLoc"); + + double pitch = 0.0; + double yaw = 0.0; + + try { + String[] split = tpLoc.split(":"); + if (split.length > 4) + yaw = convertDouble(split[4]); + if (split.length > 3) + pitch = convertDouble(split[3]); + res.tpLoc = new Location(world, convertDouble(split[0]), convertDouble(split[1]), + convertDouble(split[2])); + } catch (Exception e) { + } + + res.tpLoc.setPitch((float) pitch); + res.tpLoc.setYaw((float) yaw); + + } else { + Map tploc = (Map) root.get("TPLoc"); + if (tploc != null) { + double pitch = 0.0; + double yaw = 0.0; + + if (tploc.containsKey("Yaw")) + yaw = convertDouble(tploc.get("Yaw").toString()); + + if (tploc.containsKey("Pitch")) + pitch = convertDouble(tploc.get("Pitch").toString()); + + res.tpLoc = new Location(world, convertDouble(tploc.get("X").toString()), + convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z").toString())); + res.tpLoc.setPitch((float) pitch); + res.tpLoc.setYaw((float) yaw); + } + } + + if (root.containsKey("cmdBlackList")) + res.cmdBlackList = (List) root.get("cmdBlackList"); + if (root.containsKey("cmdWhiteList")) + res.cmdWhiteList = (List) root.get("cmdWhiteList"); + + if (root.containsKey("ChatPrefix")) + res.ChatPrefix = (String) root.get("ChatPrefix"); + + if (root.containsKey("ChannelColor")) + res.ChannelColor = ChatColor.valueOf((String) root.get("ChannelColor")); + else { + res.ChannelColor = plugin.getConfigManager().getChatColor(); + } + + return res; + } + + public int getAreaCount() { + return areas.size(); + } + + public boolean renameSubzone(String oldName, String newName) { + return this.renameSubzone(null, oldName, newName, true); + } + + public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { + if (!plugin.validName(newName)) { + plugin.msg(player, lm.Invalid_NameCharacters); + return false; + } + if (oldName == null) + return false; + if (newName == null) + return false; + String newN = newName; + oldName = oldName.toLowerCase(); + newName = newName.toLowerCase(); + + ClaimedResidence res = subzones.get(oldName); + if (res == null) { + if (player != null) + plugin.msg(player, lm.Invalid_Subzone); + return false; + } + if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return false; + } + if (subzones.containsKey(newName)) { + if (player != null) + plugin.msg(player, lm.Subzone_Exists, newName); + return false; + } + res.setName(newN); + subzones.put(newName, res); + subzones.remove(oldName); + if (player != null) + plugin.msg(player, lm.Subzone_Rename, oldName, newName); + return true; + } + + public boolean renameArea(String oldName, String newName) { + return this.renameArea(null, oldName, newName, true); + } + + public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { + if (!plugin.validName(newName)) { + plugin.msg(player, lm.Invalid_NameCharacters); + return false; + } + if (player == null || perms.hasResidencePermission(player, true) || resadmin) { + if (areas.containsKey(newName)) { if (player != null) - return isOwner(player); - return perms.getOwner().equalsIgnoreCase(name); - } - - public boolean isOwner(Player p) { - if (p == null) - return false; - if (plugin.getConfigManager().isOfflineMode()) - return perms.getOwner().equals(p.getName()); - return perms.getOwnerUUID().equals(p.getUniqueId()); - } - - public boolean isOwner(CommandSender sender) { - if (plugin.getConfigManager().isOfflineMode()) { - return perms.getOwner().equals(sender.getName()); - } - if (sender instanceof Player) { - return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); - } - return true; - } - - public void setChatPrefix(String ChatPrefix) { - this.ChatPrefix = ChatPrefix; - } - - public String getChatPrefix() { - return this.ChatPrefix == null ? "" : this.ChatPrefix; - } - - public void setChannelColor(ChatColor ChannelColor) { - this.ChannelColor = ChannelColor; - } - - public ChatChannel getChatChannel() { - return plugin.getChatManager().getChannel(this.getName()); - } - - public ChatColor getChannelColor() { - return ChannelColor; - } - - public UUID getOwnerUUID() { - return perms.getOwnerUUID(); - } - - public ResidenceItemList getItemBlacklist() { - return blacklist; - } - - public ResidenceItemList getItemIgnoreList() { - return ignorelist; - } - - public List getCmdBlackList() { - return this.cmdBlackList; - } - - public List getCmdWhiteList() { - return this.cmdWhiteList; - } - - public boolean addCmdBlackList(String cmd) { - if (cmd.contains("/")) - cmd = cmd.replace("/", ""); - if (!this.cmdBlackList.contains(cmd.toLowerCase())) { - this.cmdBlackList.add(cmd.toLowerCase()); - return true; - } - this.cmdBlackList.remove(cmd.toLowerCase()); + plugin.msg(player, lm.Area_Exists); return false; - } - - public boolean addCmdWhiteList(String cmd) { - if (cmd.contains("/")) - cmd = cmd.replace("/", ""); - if (!this.cmdWhiteList.contains(cmd.toLowerCase())) { - this.cmdWhiteList.add(cmd.toLowerCase()); - return true; - } - this.cmdWhiteList.remove(cmd.toLowerCase()); + } + CuboidArea area = areas.get(oldName); + if (area == null) { + if (player != null) + plugin.msg(player, lm.Area_InvalidName); return false; - } - - public Double getBlockSellPrice() { - return BlockSellPrice; - } - - public ArrayList getPlayersInResidence() { - ArrayList within = new ArrayList<>(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (this.containsLoc(player.getLocation())) { - within.add(player); - } - } - return within; - } - - public List GetShopVotes() { - return ShopVoteList; - } - - public void clearShopVotes() { - ShopVoteList.clear(); - } - - public void addShopVote(List ShopVotes) { - ShopVoteList.addAll(ShopVotes); - } - - public void addShopVote(ShopVote ShopVote) { - ShopVoteList.add(ShopVote); - } - - public Long getLeaseExpireTime() { - return leaseExpireTime; - } - - public void setLeaseExpireTime(Long leaseExpireTime) { - this.leaseExpireTime = leaseExpireTime; - } + } + areas.put(newName, area); + areas.remove(oldName); + if (player != null) + plugin.msg(player, lm.Area_Rename, oldName, newName); + return true; + } + plugin.msg(player, lm.General_NoPermission); + return false; + } + + public CuboidArea getArea(String name) { + return areas.get(name); + } + + public String getName() { + String name = this.resName; + if (this.getParent() != null) + name = this.getParent().getName() + "." + name; + if (name == null) + return "Unknown"; + return name; + } + + public void remove() { + plugin.getResidenceManager().removeResidence(this); + plugin.getResidenceManager().removeChunkList(this.getName()); + plugin.getPlayerManager().removeResFromPlayer(this); + } + + public ResidenceBank getBank() { + return bank; + } + + public String getWorld() { + return perms.getWorld(); + } + + public ResidencePlayer getRPlayer() { + return plugin.getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); + } + + public PermissionGroup getOwnerGroup() { + return getRPlayer().getGroup(getPermissions().getWorld()); + } + + public String getOwner() { + return perms.getOwner(); + } + + public boolean isOwner(String name) { + Player player = Bukkit.getPlayer(name); + if (player != null) + return isOwner(player); + return perms.getOwner().equalsIgnoreCase(name); + } + + public boolean isOwner(Player p) { + if (p == null) + return false; + if (plugin.getConfigManager().isOfflineMode()) + return perms.getOwner().equals(p.getName()); + return perms.getOwnerUUID().equals(p.getUniqueId()); + } + + public boolean isOwner(CommandSender sender) { + if (plugin.getConfigManager().isOfflineMode()) { + return perms.getOwner().equals(sender.getName()); + } + if (sender instanceof Player) { + return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); + } + return true; + } + + public void setChatPrefix(String ChatPrefix) { + this.ChatPrefix = ChatPrefix; + } + + public String getChatPrefix() { + return this.ChatPrefix == null ? "" : this.ChatPrefix; + } + + public void setChannelColor(ChatColor ChannelColor) { + this.ChannelColor = ChannelColor; + } + + public ChatChannel getChatChannel() { + return plugin.getChatManager().getChannel(this.getName()); + } + + public ChatColor getChannelColor() { + return ChannelColor; + } + + public UUID getOwnerUUID() { + return perms.getOwnerUUID(); + } + + public ResidenceItemList getItemBlacklist() { + return blacklist; + } + + public ResidenceItemList getItemIgnoreList() { + return ignorelist; + } + + public List getCmdBlackList() { + return this.cmdBlackList; + } + + public List getCmdWhiteList() { + return this.cmdWhiteList; + } + + public boolean addCmdBlackList(String cmd) { + if (cmd.contains("/")) + cmd = cmd.replace("/", ""); + if (!this.cmdBlackList.contains(cmd.toLowerCase())) { + this.cmdBlackList.add(cmd.toLowerCase()); + return true; + } + this.cmdBlackList.remove(cmd.toLowerCase()); + return false; + } + + public boolean addCmdWhiteList(String cmd) { + if (cmd.contains("/")) + cmd = cmd.replace("/", ""); + if (!this.cmdWhiteList.contains(cmd.toLowerCase())) { + this.cmdWhiteList.add(cmd.toLowerCase()); + return true; + } + this.cmdWhiteList.remove(cmd.toLowerCase()); + return false; + } + + public Double getBlockSellPrice() { + return BlockSellPrice; + } + + public ArrayList getPlayersInResidence() { + ArrayList within = new ArrayList<>(); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (this.containsLoc(player.getLocation())) { + within.add(player); + } + } + return within; + } + + public List GetShopVotes() { + return ShopVoteList; + } + + public void clearShopVotes() { + ShopVoteList.clear(); + } + + public void addShopVote(List ShopVotes) { + ShopVoteList.addAll(ShopVotes); + } + + public void addShopVote(ShopVote ShopVote) { + ShopVoteList.add(ShopVote); + } + + public Long getLeaseExpireTime() { + return leaseExpireTime; + } + + public void setLeaseExpireTime(Long leaseExpireTime) { + this.leaseExpireTime = leaseExpireTime; + } // public Town getTown() { // return town; @@ -1975,89 +1975,89 @@ public void setLeaseExpireTime(Long leaseExpireTime) { // this.town = town; // } - public boolean isUnderSiege() { - return getSiege().getEndsAt() > System.currentTimeMillis() - && getSiege().getStartsAt() < System.currentTimeMillis(); - } + public boolean isUnderSiege() { + return getSiege().getEndsAt() > System.currentTimeMillis() + && getSiege().getStartsAt() < System.currentTimeMillis(); + } - public boolean canSiege() { - return !isUnderSiege() && this.getSiege().getCooldownEnd() < System.currentTimeMillis(); - } + public boolean canSiege() { + return !isUnderSiege() && this.getSiege().getCooldownEnd() < System.currentTimeMillis(); + } - public ResidenceSiege getSiege() { - if (siege == null) - siege = new ResidenceSiege(); - return siege; - } + public ResidenceSiege getSiege() { + if (siege == null) + siege = new ResidenceSiege(); + return siege; + } - public boolean isUnderSiegeCooldown() { - return this.getSiege().getCooldownEnd() > System.currentTimeMillis(); - } + public boolean isUnderSiegeCooldown() { + return this.getSiege().getCooldownEnd() > System.currentTimeMillis(); + } - int preSiegeDuration = 5; - int siegeDuration = 5; + int preSiegeDuration = 5; + int siegeDuration = 5; - public boolean startSiege(Player attacker) { + public boolean startSiege(Player attacker) { - if (isUnderSiege()) - return false; + if (isUnderSiege()) + return false; - if (this.getSiege().getCooldownEnd() > System.currentTimeMillis()) - return false; + if (this.getSiege().getCooldownEnd() > System.currentTimeMillis()) + return false; - getSiege().addAttacker(attacker); - getSiege().addDefender(this.getRPlayer().getPlayer()); - getSiege().setStartsAt(System.currentTimeMillis() + (preSiegeDuration * 1000)); - getSiege().setEndsAt(getSiege().getStartsAt() + (siegeDuration * 1000)); + getSiege().addAttacker(attacker); + getSiege().addDefender(this.getRPlayer().getPlayer()); + getSiege().setStartsAt(System.currentTimeMillis() + (preSiegeDuration * 1000)); + getSiege().setEndsAt(getSiege().getStartsAt() + (siegeDuration * 1000)); - return true; - } + return true; + } - public void endSiege() { - getSiege().setEndsAt(System.currentTimeMillis()); - if (getSiege().getSchedId() > 0) { - Bukkit.getScheduler().cancelTask(getSiege().getSchedId()); - getSiege().setSchedId(-1); - } + public void endSiege() { + getSiege().setEndsAt(System.currentTimeMillis()); + if (getSiege().getSchedId() > 0) { + Bukkit.getScheduler().cancelTask(getSiege().getSchedId()); + getSiege().setSchedId(-1); + } - getSiege().setStartsAt(0L); + getSiege().setStartsAt(0L); - for (Player one : this.getSiege().getAttackers()) { - Location outside = this.getOutsideFreeLoc(one.getLocation(), one); - if (outside != null) - one.teleport(outside); - } - this.getSiege().getAttackers().clear(); - this.getSiege().getDefenders().clear(); + for (Player one : this.getSiege().getAttackers()) { + Location outside = this.getOutsideFreeLoc(one.getLocation(), one); + if (outside != null) + one.teleport(outside); } + this.getSiege().getAttackers().clear(); + this.getSiege().getDefenders().clear(); + } - @Override - public boolean equals(Object obj) { - if (obj == null) - return false; - return this == obj; - } + @Override + public boolean equals(Object obj) { + if (obj == null) + return false; + return this == obj; + } - public Set getSignsInResidence() { - return signsInResidence; - } + public Set getSignsInResidence() { + return signsInResidence; + } - public void setSignsInResidence(Set signsInResidence) { - this.signsInResidence = signsInResidence; - } + public void setSignsInResidence(Set signsInResidence) { + this.signsInResidence = signsInResidence; + } - public double getWorthByOwner() { - return (int) ((getTotalSize() * getOwnerGroup().getCostPerBlock()) * 100) / 100D; - } + public double getWorthByOwner() { + return (int) ((getTotalSize() * getOwnerGroup().getCostPerBlock()) * 100) / 100D; + } - public double getWorth() { - return (int) ((getTotalSize() * getBlockSellPrice()) * 100) / 100.0; - } + public double getWorth() { + return (int) ((getTotalSize() * getBlockSellPrice()) * 100) / 100.0; + } - public void showBounds(Player player, boolean showOneTime) { - Visualizer v = new Visualizer(player); - v.setAreas(getAreaArray()); - v.setOnce(showOneTime); - plugin.getSelectionManager().showBounds(player, v); - } + public void showBounds(Player player, boolean showOneTime) { + Visualizer v = new Visualizer(player); + v.setAreas(getAreaArray()); + v.setOnce(showOneTime); + plugin.getSelectionManager().showBounds(player, v); + } } From 2586110821dfdcd4fad96bd69323f97a4536a707 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 20 Jun 2019 17:26:49 +0300 Subject: [PATCH 0620/1142] New flat Title to show or hide residence enter/leave messages --- .../bukkit/residence/containers/Flags.java | 1 + .../bekvon/bukkit/residence/gui/SetFlag.java | 6 ++++ .../listeners/ResidencePlayerListener.java | 34 +++++++++++-------- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 13331584c..37ec9ac18 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -100,6 +100,7 @@ public enum Flags { shear(CMIMaterial.SHEARS, FlagMode.Both, "Allows or denys sheep shear", false), smonsters(CMIMaterial.ZOMBIE_SPAWN_EGG, FlagMode.Residence, "Allows or denys spawner or spawn egg monster spawns", true), subzone(CMIMaterial.GRAY_STAINED_GLASS_PANE, FlagMode.Both, "Allow a player to make subzones in the residence", true), + title(CMIMaterial.PAPER, FlagMode.Residence, "Shows or hides enter/leave message in residence", true), table(CMIMaterial.CRAFTING_TABLE, FlagMode.Both, "Allows or denys players to use workbenches", true), tnt(CMIMaterial.TNT, FlagMode.Residence, "Allow or deny tnt explosions", false), tp(CMIMaterial.END_PORTAL_FRAME, FlagMode.Both, "Allow or disallow teleporting to the residence", true), diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index b8374a0fc..23329315a 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -404,6 +404,12 @@ public void recalculatePlayer(ClaimedResidence res) { Flags flag = Flags.getFlag(flagName); if (flag != null) flagName = flag.getName(); + if (flagName == null) + flagName = "Unknown"; + // Can it be null? + if (MiscInfoMeta == null) + continue; + MiscInfoMeta.setDisplayName(ChatColor.GREEN + flagName); List lore = new ArrayList(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 96b8c3020..fb808c2f0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2153,7 +2153,9 @@ public void run() { switch (plugin.getConfigManager().getEnterLeaveMessageType()) { case ActionBar: case TitleBar: - ActionBarTitleMessages.send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); + FlagPermissions perms = res.getPermissions(); + if (perms.has(Flags.title, FlagCombo.TrueOrNone)) + ActionBarTitleMessages.send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); break; case ChatBox: plugin.msg(player, lm.Residence_MoveDeny, orres.getName()); @@ -2287,20 +2289,22 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { Long time = informar.get(player.getUniqueId()); if (time == null || time + 100L < System.currentTimeMillis()) { - switch (plugin.getConfigManager().getEnterLeaveMessageType()) { - case ActionBar: - ActionBarTitleMessages.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) - .toString()); - break; - case ChatBox: - plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res, message)); - break; - case TitleBar: - ActionBarTitleMessages.sendTitle(player, ChatColor.YELLOW + insertMessages(player, res, message)); - break; - default: - break; - } + FlagPermissions perms = res.getPermissions(); + if (perms.has(Flags.title, FlagCombo.TrueOrNone)) + switch (plugin.getConfigManager().getEnterLeaveMessageType()) { + case ActionBar: + ActionBarTitleMessages.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) + .toString()); + break; + case ChatBox: + plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res, message)); + break; + case TitleBar: + ActionBarTitleMessages.sendTitle(player, ChatColor.YELLOW + insertMessages(player, res, message)); + break; + default: + break; + } informar.put(player.getUniqueId(), System.currentTimeMillis()); } } From d8c530cc7652a9731121ebdc09b2370a7223d86a Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 22 Jun 2019 13:52:04 +0300 Subject: [PATCH 0621/1142] left over code causing issue with /res tp command --- .../bukkit/residence/protection/ClaimedResidence.java | 7 +------ src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 768839226..058dc9fc0 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1211,13 +1211,9 @@ public int getZoneDepth() { // } public Location getTeleportLocation(Player player) { - Debug.D("3 ss"); - tpLoc = null; if (tpLoc == null) { - Debug.D("33"); if (this.getMainArea() == null) return null; - Debug.D("4"); Location low = this.getMainArea().getLowLoc(); Location high = this.getMainArea().getHighLoc(); Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, @@ -1271,7 +1267,7 @@ public int isSafeTp(Player player) { } public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { - Debug.D("11"); + boolean isAdmin = plugin.isResAdminOn(reqPlayer); boolean bypassDelay = targetPlayer.hasPermission("residence.tpdelaybypass"); @@ -1315,7 +1311,6 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r plugin.getTeleportDelayMap().add(reqPlayer.getName()); } - Debug.D("22"); Location loc = this.getTeleportLocation(targetPlayer); if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) diff --git a/src/plugin.yml b/src/plugin.yml index 15331e971..a7a9467ec 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.6.3 +version: 4.8.6.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 0840a7eaa9722eb18eb62869dad909799da5094d Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 31 Jul 2019 18:23:09 +0300 Subject: [PATCH 0622/1142] Lets fix keepinventory issue introduced with latest spigot version --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 5 ++++- src/plugin.yml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index fb808c2f0..5bbb39345 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1787,8 +1787,11 @@ public void onPlayerDeath(final PlayerDeathEvent event) { if (res == null) return; - if (res.getPermissions().has(Flags.keepinv, false)) + if (res.getPermissions().has(Flags.keepinv, false)) { event.setKeepInventory(true); + if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) + event.getDrops().clear(); + } if (res.getPermissions().has(Flags.keepexp, false)) { event.setKeepLevel(true); diff --git a/src/plugin.yml b/src/plugin.yml index a7a9467ec..00b15277d 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.6.5 +version: 4.8.6.6 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 363d261858c1ec66854ebb5da9fffa784f16b57c Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 1 Aug 2019 11:34:18 +0300 Subject: [PATCH 0623/1142] Prevent player kick from residece if he has bypass permission --- src/com/bekvon/bukkit/residence/commands/kick.java | 5 +++++ src/com/bekvon/bukkit/residence/containers/lm.java | 1 + 2 files changed, 6 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 185d14407..2c3157ac9 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -54,6 +54,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return false; if (res.getPlayersInResidence().contains(targetplayer)) { + + if (plugin.hasPermission(targetplayer, "residence.command.kick.bypass")) { + plugin.msg(sender, lm.Residence_CantKick); + return true; + } Location loc = plugin.getConfigManager().getKickLocation(); targetplayer.closeInventory(); if (loc != null) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 0063190ae..f41c61796 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -198,6 +198,7 @@ public enum lm { Residence_NotIn("&cYou are not in a Residence."), Residence_PlayerNotIn("&cPlayer standing not in your Residence area."), Residence_Kicked("&eYou were kicked from residence"), + Residence_CantKick("&eCan't kick this player"), Residence_In("&eYou are standing in Residence &6%1"), Residence_OwnerChange("&eResidence &6%1 &eowner changed to &6%2"), Residence_NonAdmin("&cYou are not a Residence admin."), From 912b4399a56a1f378f01e20b6ed40deaaeb89ce2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Aug 2019 13:41:59 +0300 Subject: [PATCH 0624/1142] Lets fix lingering potion error for 1.13.2 paper spigot --- .../bekvon/bukkit/residence/allNms/v1_9Events.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index 7e194a8be..86a9e2f8f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -1,14 +1,17 @@ package com.bekvon.bukkit.residence.allNms; import java.util.Iterator; + import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.entity.ThrownPotion; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.AreaEffectCloudApplyEvent; import org.bukkit.event.entity.LingeringPotionSplashEvent; +import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.potion.PotionEffect; import com.bekvon.bukkit.residence.Residence; @@ -19,14 +22,18 @@ public class v1_9Events implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { + ProjectileHitEvent ev = event; + + ThrownPotion potion = (ThrownPotion) ev.getEntity(); + // disabling event on world - if (Residence.getInstance().isDisabledWorldListener(event.getEntity().getWorld())) + if (Residence.getInstance().isDisabledWorldListener(potion.getWorld())) return; if (event.isCancelled()) return; boolean harmfull = false; - mein: for (PotionEffect one : event.getEntity().getEffects()) { + mein: for (PotionEffect one : potion.getEffects()) { for (String oneHarm : Residence.getInstance().getConfigManager().getNegativePotionEffects()) { if (oneHarm.equalsIgnoreCase(one.getType().getName())) { harmfull = true; @@ -37,7 +44,7 @@ public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { if (!harmfull) return; - Entity ent = event.getEntity(); + Entity ent = potion; boolean srcpvp = Residence.getInstance().getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); if (!srcpvp) event.setCancelled(true); From 93974e4e945d1432fdba772fa235585183e0da6d Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Aug 2019 14:04:45 +0300 Subject: [PATCH 0625/1142] We dont need resbank when we have bank command already --- .../bukkit/residence/commands/bank.java | 6 +- .../bukkit/residence/commands/compass.java | 2 +- .../bukkit/residence/commands/padd.java | 2 +- .../bukkit/residence/commands/pdel.java | 2 +- .../bukkit/residence/commands/resbank.java | 67 ------------------- 5 files changed, 7 insertions(+), 72 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/commands/resbank.java diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 5967d3258..21f50e75b 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -18,10 +18,12 @@ public class bank implements cmd { @Override @CommandAnnotation(simple = true, priority = 3400) public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if ((args.length != 3) && (args.length != 4)) { + + if (args.length != 3 && args.length != 4) { return false; - } + } ClaimedResidence res = null; + if (args.length == 4) { res = plugin.getResidenceManager().getByName(args[2]); if (res == null) { diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index ef2852ff0..bda2ea98f 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -55,7 +55,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman @Override public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Set compass ponter to residence location"); + c.get(path + "Description", "Set compass pointer to residence location"); c.get(path + "Info", Arrays.asList("&eUsage: &6/res compass ")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index 27bfbfce6..535abff75 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -43,7 +43,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { // Main command c.get(path + "Description", "Add player to residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res padd [player]", "Adds essential flags for player")); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res padd [player]", "Adds essential flags for player")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index befc5d1c6..2c5344264 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -40,7 +40,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman public void getLocale(ConfigReader c, String path) { // Main command c.get(path + "Description", "Remove player from residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res pdel [player]", "Removes essential flags from player")); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res pdel [player]", "Removes essential flags from player")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/resbank.java b/src/com/bekvon/bukkit/residence/commands/resbank.java deleted file mode 100644 index f60d2da9b..000000000 --- a/src/com/bekvon/bukkit/residence/commands/resbank.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.bekvon.bukkit.residence.commands; - -import java.util.Arrays; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.ConfigReader; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class resbank implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 1800) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - - if (args.length != 3 && args.length != 4) { - return false; - } - ClaimedResidence res = null; - - if (args.length == 4) { - res = plugin.getResidenceManager().getByName(args[2]); - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return true; - } - } else { - if (sender instanceof Player) - res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); - } - if (res == null) { - plugin.msg(sender, lm.Residence_NotIn); - return true; - } - double amount = 0D; - try { - if (args.length == 3) - amount = Double.parseDouble(args[2]); - else - amount = Double.parseDouble(args[3]); - } catch (Exception ex) { - plugin.msg(sender, lm.Invalid_Amount); - return true; - } - if (args[1].equals("deposit")) { - res.getBank().deposit(sender, amount, resadmin); - } else if (args[1].equals("withdraw")) { - res.getBank().withdraw(sender, amount, resadmin); - } else { - return false; - } - return true; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Deposit or widraw money from residence bank"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res resbank [deposit/withdraw] [amount]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw", "1")); - } -} From 704c1e5d6c55b694556776322f8a2f4cb293983c Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Aug 2019 16:42:11 +0300 Subject: [PATCH 0626/1142] Bypass flag change from itempickup.bypass to bypass.itempickup --- .../bekvon/bukkit/residence/Residence.java | 76 ++-- .../residence/ResidenceCommandListener.java | 8 +- .../bukkit/residence/commands/compass.java | 3 +- .../bukkit/residence/commands/contract.java | 5 +- .../bukkit/residence/commands/expand.java | 7 +- .../bukkit/residence/commands/kick.java | 3 +- .../bukkit/residence/commands/list.java | 3 +- .../bukkit/residence/commands/market.java | 3 +- .../bukkit/residence/commands/message.java | 13 +- .../bekvon/bukkit/residence/commands/rc.java | 7 +- .../bukkit/residence/commands/remove.java | 9 +- .../bekvon/bukkit/residence/commands/rt.java | 9 +- .../bukkit/residence/commands/select.java | 6 +- .../bukkit/residence/commands/subzone.java | 3 +- .../residence/containers/PlayerGroup.java | 5 +- .../residence/containers/ResidencePlayer.java | 33 +- .../bukkit/residence/containers/lm.java | 5 + .../residence/economy/TransactionManager.java | 5 +- .../residence/economy/rent/RentManager.java | 3 +- .../listeners/ResidenceBlockListener.java | 7 +- .../listeners/ResidenceEntityListener.java | 5 +- .../listeners/ResidencePlayerListener.java | 2 +- .../residence/permissions/PermissionInfo.java | 81 ++++ .../permissions/PermissionManager.java | 359 +++++++++++++++++- .../protection/ClaimedResidence.java | 7 +- .../protection/ResidenceManager.java | 12 +- 26 files changed, 563 insertions(+), 116 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/permissions/PermissionInfo.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 6ccd20a3c..d24a09868 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1925,44 +1925,44 @@ public KingdomsUtil getKingdomsUtil() { return kingdomsUtil; } - public boolean hasPermission(CommandSender sender, String permision, boolean output) { - return hasPermission(sender, permision, output, null); - } - - public boolean hasPermission(CommandSender sender, String permision) { - return hasPermission(sender, permision, true, null); - } - - public boolean hasPermission(CommandSender sender, String permision, String message) { - return hasPermission(sender, permision, true, message); - } - - public boolean hasPermission(CommandSender sender, String permision, lm message) { - return hasPermission(sender, permision, true, getLM().getMessage(message)); - } - - public boolean hasPermission(CommandSender sender, String permision, Boolean output, String message) { - if (sender == null) - return false; - if (sender instanceof ConsoleCommandSender) { - return true; - } else if (sender instanceof Player) { - if (sender.hasPermission(permision)) - return true; - if (output) { - String outMsg = getLM().getMessage(lm.General_NoPermission); - if (message != null) - outMsg = message; - - RawMessage rm = new RawMessage(); - rm.add(outMsg, "§2" + permision); - rm.show(sender); - ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); - console.sendMessage(ChatColor.RED + sender.getName() + " No permission -> " + permision); - } - } - return false; - } +// public boolean hasPermission(CommandSender sender, String permision, boolean output) { +// return hasPermission(sender, permision, output, null); +// } +// +// public boolean hasPermission(CommandSender sender, String permision) { +// return hasPermission(sender, permision, true, null); +// } +// +// public boolean hasPermission(CommandSender sender, String permision, String message) { +// return hasPermission(sender, permision, true, message); +// } +// +// public boolean hasPermission(CommandSender sender, String permision, lm message) { +// return hasPermission(sender, permision, true, getLM().getMessage(message)); +// } +// +// public boolean hasPermission(CommandSender sender, String permision, Boolean output, String message) { +// if (sender == null) +// return false; +// if (sender instanceof ConsoleCommandSender) { +// return true; +// } else if (sender instanceof Player) { +// if (sender.hasPermission(permision)) +// return true; +// if (output) { +// String outMsg = getLM().getMessage(lm.General_NoPermission); +// if (message != null) +// outMsg = message; +// +// RawMessage rm = new RawMessage(); +// rm.add(outMsg, "§2" + permision); +// rm.show(sender); +// ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); +// console.sendMessage(ChatColor.RED + sender.getName() + " No permission -> " + permision); +// } +// } +// return false; +// } public static Residence getInstance() { return instance; diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index be66eac50..9c8ab3de6 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -17,10 +17,16 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; public class ResidenceCommandListener implements CommandExecutor { private static List AdminCommands = new ArrayList(); + private static final String label = "res"; + + public String getLabel() { + return label; + } public static List getAdminCommands() { if (AdminCommands.size() == 0) @@ -145,7 +151,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return commandHelp(new String[] { "?" }, resadmin, sender, command); } - if (!resadmin && !plugin.hasPermission(sender, "residence.command." + args[0].toLowerCase())) + if (!resadmin && !ResPerm.command_$1.hasPermission(sender, args[0].toLowerCase())) return true; if (!resadmin && player != null && plugin.resadminToggle.contains(player.getName())) { diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index bda2ea98f..5917acfce 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -30,7 +31,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (!plugin.hasPermission(player, "residence.compass")) + if (!ResPerm.command_$1.hasPermission(sender, this.getClass().getSimpleName())) return true; ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 4370c8a13..1f6df4645 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -35,10 +36,10 @@ else if (args.length == 3) return true; } - if (res.isSubzone() && !resadmin && !plugin.hasPermission(player, "residence.contract.subzone", lm.Subzone_CantContract)) + if (res.isSubzone() && !resadmin && !ResPerm.command_contract_subzone.hasPermission(player, lm.Subzone_CantContract)) return true; - if (!res.isSubzone() && !resadmin && !plugin.hasPermission(player, "residence.contract", lm.Residence_CantContractResidence)) + if (!res.isSubzone() && !resadmin && !ResPerm.command_$1.hasPermission(player, lm.Residence_CantContractResidence, this.getClass().getSimpleName())) return true; String resName = res.getName(); diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 5b27a00eb..2f0bea4c1 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -37,12 +38,12 @@ else if (args.length == 3) { return true; } - if (res.isSubzone() && !resadmin && !plugin.hasPermission(player, "residence.expand.subzone", lm.Subzone_CantExpand)) + if (res.isSubzone() && !resadmin && !ResPerm.command_expand_subzone.hasPermission(player, lm.Subzone_CantExpand)) return true; - if (!res.isSubzone() && !resadmin && !plugin.hasPermission(player, "residence.expand", lm.Residence_CantExpandResidence)) + if (!res.isSubzone() && !resadmin && !ResPerm.command_$1.hasPermission(player, lm.Residence_CantExpandResidence, this.getClass().getSimpleName())) return true; - + String resName = res.getName(); CuboidArea area = null; String areaName = null; diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 2c3157ac9..053e3e601 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -15,6 +15,7 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class kick implements cmd { @@ -55,7 +56,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (res.getPlayersInResidence().contains(targetplayer)) { - if (plugin.hasPermission(targetplayer, "residence.command.kick.bypass")) { + if (ResPerm.command_kick_bypass.hasPermission(targetplayer)) { plugin.msg(sender, lm.Residence_CantKick); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index c70754763..ab8ab7e66 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; public class list implements cmd { @@ -39,7 +40,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman target = args[i]; } - if (target != null && !sender.getName().equalsIgnoreCase(target) && !plugin.hasPermission(sender, "residence.command.list.others")) + if (target != null && !sender.getName().equalsIgnoreCase(target) && !ResPerm.command_$1_others.hasPermission(sender, this.getClass().getSimpleName())) return true; plugin.getResidenceManager().listResidences(sender, target, page, false, false, resadmin, world); diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 588d7c7f9..25bff34da 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -17,6 +17,7 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.utils.Debug; @@ -76,7 +77,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } if (res.isRented()) { - if (resadmin || plugin.isResAdminOn(player) || player.hasPermission("residence.market.evict")) { + if (resadmin || plugin.isResAdminOn(player) || ResPerm.market_evict.hasPermission(player)) { plugin.UnrentConfirm.put(player.getName(), res.getName()); plugin.msg(sender, lm.Rent_EvictConfirm, res.getName()); } else if (plugin.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sender.getName())) { diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 4f38af6b7..0c5df5c61 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class message implements cmd { @@ -68,22 +69,22 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (enter && !plugin.hasPermission(sender, "residence.command.message.enter", true)) { + if (enter && !ResPerm.command_message_enter.hasPermission(sender)) { return true; } - if (!enter && !plugin.hasPermission(sender, "residence.command.message.leave", true)) { + if (!enter && !ResPerm.command_message_leave.hasPermission(sender)) { return true; } - if (message == null && enter && !plugin.hasPermission(sender, "residence.command.message.enter.remove", true)) { + if (message == null && enter && !ResPerm.command_message_enter_remove.hasPermission(sender)) { return true; } - - if (message == null && !enter && !plugin.hasPermission(sender, "residence.command.message.leave.remove", true)) { + + if (message == null && !enter && !ResPerm.command_message_leave_remove.hasPermission(sender)) { return true; } - + res.setEnterLeaveMessage(sender, message, enter, resadmin); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index 33443e81a..ab27a3553 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -14,6 +14,7 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class rc implements cmd { @@ -98,7 +99,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (!plugin.hasPermission(player, "residence.chatcolor")) + if (!ResPerm.chatcolor.hasPermission(player)) return true; String posibleColor = args[1]; @@ -134,7 +135,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (!plugin.hasPermission(player, "residence.chatprefix")) + if (!ResPerm.chatprefix.hasPermission(player)) return true; String prefix = args[1]; @@ -167,7 +168,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (!plugin.hasPermission(player, "residence.chatkick")) + if (!ResPerm.chatkick.hasPermission(player)) return true; String targetName = args[1]; diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 9b86c6578..fd3392ebf 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -13,6 +13,7 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; @@ -35,7 +36,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (res.isSubzone() && !resadmin && !plugin.hasPermission(sender, "residence.delete.subzone", lm.Subzone_CantDelete)) { + if (res.isSubzone() && !resadmin && !ResPerm.delete_subzone.hasPermission(sender, lm.Subzone_CantDelete)) { return true; } @@ -48,18 +49,18 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getConfigManager().isPreventSubZoneRemoval() && !res.getParent().isOwner(sender) && !res.getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue) && - plugin.hasPermission(sender, "residence.delete.subzone", lm.Subzone_CantDeleteNotOwnerOfParent)) { + ResPerm.delete_subzone.hasPermission(sender, lm.Subzone_CantDeleteNotOwnerOfParent)) { return true; } if (!res.isSubzone() && !resadmin && !res.isOwner(sender) && - plugin.hasPermission(sender, "residence.delete", lm.Residence_CantDeleteResidence)) { + ResPerm.delete.hasPermission(sender, lm.Residence_CantDeleteResidence)) { return true; } - if (!res.isSubzone() && !resadmin && !plugin.hasPermission(sender, "residence.delete", lm.Residence_CantDeleteResidence)) { + if (!res.isSubzone() && !resadmin && !ResPerm.delete.hasPermission(sender, lm.Residence_CantDeleteResidence)) { return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 9c9dd0188..09a5cf2af 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -15,6 +15,7 @@ import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.utils.Debug; public class rt implements cmd { @@ -26,7 +27,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return false; } - if (!resadmin && !plugin.hasPermission(sender, "residence.randomtp")) + if (!resadmin && !ResPerm.randomtp.hasPermission(sender)) return true; World wname = null; @@ -82,11 +83,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (tPlayer == null) return false; - if (!sender.getName().equalsIgnoreCase(tPlayer.getName()) && !plugin.hasPermission(sender, "residence.randomtp.admin")) + if (!sender.getName().equalsIgnoreCase(tPlayer.getName()) && !ResPerm.randomtp_admin.hasPermission(sender)) return false; int sec = plugin.getConfigManager().getrtCooldown(); - if (plugin.getRandomTeleportMap().containsKey(tPlayer.getName()) && !resadmin && !plugin.hasPermission(sender, "residence.randomtp.cooldownbypass", false)) { + if (plugin.getRandomTeleportMap().containsKey(tPlayer.getName()) && !resadmin && !ResPerm.randomtp_cooldownbypass.hasPermission(sender, false)) { if (plugin.getRandomTeleportMap().get(tPlayer.getName()) + (sec * 1000) > System.currentTimeMillis()) { int left = (int) (sec - ((System.currentTimeMillis() - plugin.getRandomTeleportMap().get(tPlayer.getName())) / 1000)); plugin.msg(tPlayer, lm.RandomTeleport_TpLimit, left); @@ -106,7 +107,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (plugin.getConfigManager().getTeleportDelay() > 0 && !resadmin && !plugin.hasPermission(sender, "residence.randomtp.delaybypass", false)) { + if (plugin.getConfigManager().getTeleportDelay() > 0 && !resadmin && !ResPerm.randomtp_delaybypass.hasPermission(sender, false)) { plugin.msg(tPlayer, lm.RandomTeleport_TeleportStarted, loc.getX(), loc.getY(), loc .getZ(), plugin.getConfigManager().getTeleportDelay()); plugin.getTeleportDelayMap().add(tPlayer.getName()); diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 134e00ad2..38393f9ae 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -17,6 +17,7 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -41,8 +42,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Select_Disabled); return true; } - if ((!player.hasPermission("residence.create") && player.isPermissionSet("residence.create") && !player.hasPermission("residence.select") && player - .isPermissionSet("residence.select")) && !resadmin) { + if (!ResPerm.create.hasPermission(player) && !ResPerm.select.hasPermission(player) && !resadmin) { plugin.msg(player, lm.Select_Disabled); return true; } @@ -151,7 +151,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if ((args.length == 2 || args.length == 3) && args[1].equals("auto")) { Player target = player; if (args.length == 3) { - if (!plugin.hasPermission(player, "residence.select.auto.others")) { + if (!ResPerm.select_auto_others.hasPermission(player, true)) { return true; } target = Bukkit.getPlayer(args[2]); diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index 07ad990ec..899478f79 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class subzone implements cmd { @@ -44,7 +45,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } } if (plugin.getSelectionManager().hasPlacedBoth(player)) { - if (!resadmin && !plugin.hasPermission(player, "residence.create.subzone", lm.Subzone_CantCreate)) + if (!resadmin && !ResPerm.create_subzone.hasPermission(player, lm.Subzone_CantCreate)) return true; res.addSubzone(player, plugin.getSelectionManager().getPlayerLoc1(player), plugin.getSelectionManager().getPlayerLoc2(player), diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index 0962d1cd8..14d818043 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -9,6 +9,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class PlayerGroup { @@ -91,13 +92,13 @@ private PermissionGroup getPermissionGroup() { PermissionGroup group = Residence.getInstance().getPermissionManager().getDefaultGroup(); for (Entry one : Residence.getInstance().getPermissionManager().getGroups().entrySet()) { if (player != null) { - if (player.hasPermission("residence.group." + one.getKey())) { + if (ResPerm.group_$1.hasPermission(player, one.getKey())) { group = one.getValue(); } } else { OfflinePlayer offlineP = Residence.getInstance().getOfflinePlayer(resPlayer.getPlayerName()); if (offlineP != null) - if (ResidenceVaultAdapter.hasPermission(offlineP, "residence.group." + one.getKey(), Residence.getInstance().getConfigManager().getDefaultWorld())) + if (ResidenceVaultAdapter.hasPermission(offlineP, ResPerm.group_$1.getPermission(one.getKey()), Residence.getInstance().getConfigManager().getDefaultWorld())) group = one.getValue(); } } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 71061ac40..f012b85da 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -16,6 +16,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.BossBar.BossBarInfo; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; @@ -130,12 +131,12 @@ public void recountMaxRes() { this.maxRes = this.maxRes == -1 ? maxValue : this.maxRes; if (player != null && player.isOnline()) { - if (this.player.isPermissionSet("residence.max.res.unlimited")) { + if (ResPerm.max_res_unlimited.hasSetPermission(player)) { this.maxRes = maxValue; return; } } else if (ofPlayer != null) { - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res.unlimited", Residence.getInstance().getConfigManager().getDefaultWorld())) { + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_res_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { this.maxRes = maxValue; return; } @@ -143,10 +144,10 @@ public void recountMaxRes() { for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxResCount(); i++) { if (player != null && player.isOnline()) { - if (this.player.isPermissionSet("residence.max.res." + i)) + if (ResPerm.max_res_$1.hasSetPermission(player, String.valueOf(i))) this.maxRes = i; } else if (ofPlayer != null) { - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.res." + i, Residence.getInstance().getConfigManager().getDefaultWorld())) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_res_$1.getPermission(String.valueOf(i)), Residence.getInstance().getConfigManager().getDefaultWorld())) this.maxRes = i; } } @@ -154,24 +155,24 @@ public void recountMaxRes() { public void recountMaxRents() { if (player != null) { - if (this.player.isPermissionSet("residence.max.rents.unlimited")) { + if (ResPerm.max_rents_unlimited.hasSetPermission(player)) { this.maxRents = maxValue; return; } } else { if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.rents.unlimited", Residence.getInstance().getConfigManager().getDefaultWorld())) { + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_rents_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { this.maxRents = maxValue; return; } } for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxRentCount(); i++) { if (player != null) { - if (this.player.isPermissionSet("residence.max.rents.unlimited" + i)) + if (ResPerm.max_rents_$1.hasSetPermission(player, String.valueOf(i))) this.maxRents = i; } else { if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.rents." + i, Residence.getInstance().getConfigManager().getDefaultWorld())) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_rents_$1.getPermission(String.valueOf(i)), Residence.getInstance().getConfigManager().getDefaultWorld())) this.maxRents = i; } } @@ -189,24 +190,24 @@ public int getMaxRents() { public void recountMaxSubzones() { if (player != null) { - if (this.player.isPermissionSet("residence.max.subzones.unlimited")) { + if (ResPerm.max_subzones_unlimited.hasSetPermission(player)) { this.maxSubzones = maxValue; return; } } else { if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzones.unlimited", Residence.getInstance().getConfigManager().getDefaultWorld())) { + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzones_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { this.maxSubzones = maxValue; return; } } for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxSubzonesCount(); i++) { if (player != null) { - if (this.player.isPermissionSet("residence.max.subzones." + i)) + if (ResPerm.max_subzones_$1.hasSetPermission(player, String.valueOf(i))) this.maxSubzones = i; } else { if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzones." + i, Residence.getInstance().getConfigManager().getDefaultWorld())) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzones_$1.getPermission(String.valueOf(i)), Residence.getInstance().getConfigManager().getDefaultWorld())) this.maxSubzones = i; } } @@ -224,24 +225,24 @@ public int getMaxSubzones() { public void recountMaxSubzoneDepth() { if (player != null) { - if (this.player.isPermissionSet("residence.max.subzonedepth.unlimited")) { + if (ResPerm.max_subzonedepth_unlimited.hasSetPermission(player)) { this.maxSubzoneDepth = maxValue; return; } } else { if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzonedepth.unlimited", Residence.getInstance().getConfigManager().getDefaultWorld())) { + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzonedepth_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { this.maxSubzoneDepth = maxValue; return; } } for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxSubzoneDepthCount(); i++) { if (player != null) { - if (this.player.isPermissionSet("residence.max.subzonedepth." + i)) + if (ResPerm.max_subzonedepth_$1.hasSetPermission(player, String.valueOf(i))) this.maxSubzoneDepth = i; } else { if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, "residence.max.subzonedepth." + i, Residence.getInstance().getConfigManager().getDefaultWorld())) + if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzonedepth_$1.getPermission(String.valueOf(i)), Residence.getInstance().getConfigManager().getDefaultWorld())) this.maxSubzoneDepth = i; } } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index f41c61796..50e6d4f5e 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -389,12 +389,17 @@ public enum lm { RandomTeleport_TeleportStarted("&eTeleportation started, don't move for next &6%4 &esec."), RandomTeleport_WorldList("&ePossible worlds: &6%1"), + Permissions_variableColor("&f"), + Permissions_permissionColor("&6"), + Permissions_cmdPermissionColor("&2"), + General_DisabledWorld("&cResidence plugin is disabled in this world"), General_UseNumbers("&cPlease use numbers..."), General_CantPlaceLava("&cYou can't place lava outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), General_CantPlaceWater("&cYou can't place Water outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), General_CantPlaceChest("&cYou can't place chest at this place"), General_NoPermission("&cYou dont have permission for this."), + General_info_NoPlayerPermission("&c[playerName] doesn't have [permission] permission"), General_NoCmdPermission("&cYou dont have permission for this command."), General_DefaultUsage("&eType &6/%1 ? &efor more info"), General_MaterialGet("&eThe material name for ID &6%1 &eis &6%2"), diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index aee1a840f..fdcd27d12 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -18,6 +18,7 @@ import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.text.help.PageInfo; @@ -124,7 +125,7 @@ public void putForSale(ClaimedResidence res, Player player, int amount, boolean ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - if (!resadmin && !(rPlayer.getGroup().canSellLand() || player.hasPermission("residence.sell"))) { + if (!resadmin && !(rPlayer.getGroup().canSellLand() || ResPerm.sell.hasPermission(player))) { plugin.msg(player, lm.General_NoPermission); return; } @@ -188,7 +189,7 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { plugin.msg(player, lm.Economy_MarketDisabled); return; } - boolean canbuy = group.canBuyLand() || player.hasPermission("residence.buy"); + boolean canbuy = group.canBuyLand() || ResPerm.buy.hasPermission(player); if (!canbuy && !resadmin) { plugin.msg(player, lm.General_NoPermission); return; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index f5370ed21..7dd27a114 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -12,6 +12,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRentEvent; import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.text.help.PageInfo; @@ -409,7 +410,7 @@ public void unrent(Player player, ClaimedResidence res, boolean resadmin) { return; } - if (resadmin || rent.player.equals(player.getName()) || res.isOwner(player) && player.hasPermission("residence.market.evict")) { + if (resadmin || rent.player.equals(player.getName()) || res.isOwner(player) && ResPerm.market_evict.hasPermission(player)) { ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENTABLE); plugin.getServ().getPluginManager().callEvent(revent); if (revent.isCancelled()) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 5e9c47517..78eb1461e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -52,6 +52,7 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; @@ -222,7 +223,7 @@ public void onBlockBreak(BlockBreakEvent event) { boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); - if (!hasdestroy && !player.hasPermission("residence.bypass.destroy")) { + if (!hasdestroy && !ResPerm.bypass_destroy.hasPermission(player)) { plugin.msg(player, lm.Flag_Deny, Flags.destroy); event.setCancelled(true); } else if (mat == Material.CHEST && !perms.playerHas(player, Flags.container, true)) { @@ -381,7 +382,7 @@ public void onChestPlace(BlockPlaceEvent event) { if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) return; - if (!player.hasPermission("residence.newguyresidence")) + if (!ResPerm.newguyresidence.hasPermission(player)) return; ArrayList list = plugin.getPlayerManager().getResidenceList(player.getName()); @@ -627,7 +628,7 @@ public void onBlockPlace(BlockPlaceEvent event) { } FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - if (!hasplace && !player.hasPermission("residence.bypass.build")) { + if (!hasplace && !ResPerm.bypass_build.hasPermission(player)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 882804b5e..6b52944cb 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -53,6 +53,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; @@ -1280,9 +1281,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (event.getEntityType() == EntityType.ITEM_FRAME) { ItemFrame it = (ItemFrame) event.getEntity(); if (it.getItem() != null) { - - boolean hasContainerBypass = player.hasPermission("residence.bypass.container"); - if (!hasContainerBypass) + if (!ResPerm.bypass_container.hasPermission(player)) if (!perms.playerHas(player, Flags.container, true)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.container); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 5bbb39345..ac53d59c5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -860,7 +860,7 @@ public void onPlayerQuit(PlayerQuitEvent event) { plugin.getPlayerListener().removePlayerResidenceChat(event.getPlayer()); plugin.addOfflinePlayerToChache(event.getPlayer()); - plugin.getAutoSelectionManager().getList().remove(pname.toLowerCase()); + plugin.getAutoSelectionManager().getList().remove(event.getPlayer().getUniqueId()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionInfo.java b/src/com/bekvon/bukkit/residence/permissions/PermissionInfo.java new file mode 100644 index 000000000..687a16a69 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionInfo.java @@ -0,0 +1,81 @@ +package com.bekvon.bukkit.residence.permissions; + +public class PermissionInfo { + + private String permission; + private boolean enabled = false; + private Long delay = 1000L; + private Long lastChecked = null; + private Double maxValue = null; + private Double minValue = null; + + public PermissionInfo(String permission, Long delay) { + this.permission = permission; + if (delay != null) + this.delay = delay; + } + + public boolean isTimeToRecalculate() { + + return lastChecked == null || delay + lastChecked < System.currentTimeMillis(); + } + + public String getPermission() { + return permission; + } + + public void setPermission(String permission) { + this.permission = permission; + } + + public Long getDelay() { + return delay; + } + + public void setDelay(long delay) { + this.delay = delay; + } + + public Long getLastChecked() { + if (lastChecked == null) + lastChecked = System.currentTimeMillis(); + return lastChecked; + } + + public void setLastChecked(long lastChecked) { + this.lastChecked = lastChecked; + } + + public Double getMaxValue() { + return maxValue; + } + + public Double getMaxValue(Double defaultV) { + return maxValue == null ? defaultV : maxValue; + } + + public void setMaxValue(Double maxValue) { + this.maxValue = maxValue; + } + + public Double getMinValue() { + return minValue; + } + + public Double getMinValue(Double defaultV) { + return minValue == null ? defaultV : minValue; + } + + public void setMinValue(Double minValue) { + this.minValue = minValue; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + +} diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 9715c0090..537dad55e 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -1,26 +1,39 @@ package com.bekvon.bukkit.residence.permissions; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.PlayerGroup; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; -import com.nijikokun.bukkit.Permissions.Permissions; -import com.platymuus.bukkit.permissions.PermissionsPlugin; - import java.io.File; -import java.util.*; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.Server; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionAttachmentInfo; +import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.Plugin; +import com.Zrips.CMI.Modules.Permissions.PermissionInfo; +import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.PlayerGroup; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; +import com.nijikokun.bukkit.Permissions.Permissions; +import com.platymuus.bukkit.permissions.PermissionsPlugin; + public class PermissionManager { protected static PermissionsInterface perms; protected LinkedHashMap groups; @@ -106,14 +119,14 @@ private void checkPermissions() { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found PermissionsBukkit Plugin!"); return; } - + p = server.getPluginManager().getPlugin("LuckPerms"); if (p != null) { perms = new LuckPerms4Adapter(); Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found LuckPerms Plugin!"); return; } - + p = server.getPluginManager().getPlugin("bPermissions"); if (p != null) { perms = new BPermissionsAdapter(); @@ -181,4 +194,330 @@ public boolean hasGroup(String group) { public PermissionsInterface getPermissionsPlugin() { return perms; } + + public enum ResPerm { + chatcolor("Allows to change residence chat color"), + chatprefix("Allows to change residence chat prefix"), + chatkick("Allows to kick player from residence chat"), + permisiononerror("Allows to see missing permission on error message"), + + command_message_enter("Allows to change residence enter message"), + command_message_leave("Allows to change residence leave message"), + command_message_enter_remove("Allows to remove residence enter message"), + command_message_leave_remove("Allows to remove residence leave message"), + + newguyresidence("Creates residence on first chest place"), + bypass_destroy("Allows to bypass destroy flag"), + bypass_build("Allows to bypass build flag"), + bypass_container("Allows to bypass container flag"), + bypass_$1("Allows to bypass container flag"), + buy("Allows to buy residence"), + sell("Allows to sell residence"), + max_res_unlimited("Defines residence limit as unlimited"), + max_res_$1("Defines residence limit", "number"), + max_subzones_unlimited("Defines subzone limit as unlimited"), + max_subzones_$1("Defines subzone limit", "number"), + max_subzonedepth_unlimited("Defines subzone depth limit as unlimited"), + max_subzonedepth_$1("Defines subzone depth limit", "number"), + max_rents_unlimited("Defines residence rent limit as unlimited"), + max_rents_$1("Defines residence rent limit", "number"), + group_$1("Defines players residence group", "groupName"), + market_evict("Allows to evict players from rented residences"), + rename("Allows to rename residence"), + select("Allows to select residence area"), + select_auto_others("Allows to toggle auto selection for others"), + resize("Allows to resize residence"), + create("Allows to create residence"), + create_subzone("Allows to create residence subzones"), + randomtp("Allows to use rt command"), + randomtp_admin("Allows to use rt command on another player"), + randomtp_cooldownbypass("Allows to bypass random teleport command cooldown"), + randomtp_delaybypass("Allows to bypass random teleport command delay"), + delete("Allows to delete residence"), + delete_subzone("Allows to delete subzone"), + command_kick_bypass("Allows to bypass kick from residence"), + command_contract_subzone("Allows to contract subzones"), + command_expand_subzone("Allows to expand subzones"), +// security_admin("Sets players security level"), +// prewards_$1("Allows to get particular playtime reward"), +// colors_$1_$star("Allows all color usage in particular areas", "type"), +// command_repair("", false), + command_$1("", false), + command_$1_others("Allows to perform command on another player", "commandName"), + command_$1_$2("", false); + + private Boolean show = true; + private String desc; + private String[] wars; + + ResPerm(String desc, Boolean show) { + this.desc = desc; + this.show = show; + } + + ResPerm(String desc) { + this.desc = desc; + } + + ResPerm(String desc, String... wars) { + this.desc = desc; + this.wars = wars; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getPermissionForShow() { + return getPermissionForShow(false); + } + + public String getPermissionForShow(boolean cmd) { + if (this.getWars() == null) + return getPermission(""); + + String[] w = new String[this.getWars().length]; + + for (int i = 0; i < this.getWars().length; i++) { + w[i] = Residence.getInstance().getLM().getMessage(lm.Permissions_variableColor) + "[" + this.getWars()[i] + "]" + (!cmd ? Residence.getInstance().getLM().getMessage( + lm.Permissions_permissionColor) : Residence.getInstance().getLM().getMessage(lm.Permissions_cmdPermissionColor)); + } + + return getPermission(w); + } + + public String getPermission() { + return getPermission(""); + } + + public String getPermission(String... extra) { + String perm = this.name().replace("_", "."); + int i = 0; + for (String one : extra) { + i++; + if (one == null || one.isEmpty()) + continue; + perm = perm.replace("$" + i, one.toLowerCase()); + } + perm = perm.replace("$star", "*"); + return "residence." + perm; + } + + public boolean hasPermission(CommandSender sender) { + return hasPermission(sender, false); + } + + public boolean hasPermission(CommandSender sender, Integer... extra) { + String[] ex = new String[extra.length]; + for (int i = 0; i < extra.length; i++) { + ex[i] = String.valueOf(extra[i]); + } + return hasPermission(sender, false, ex); + } + + public boolean hasPermission(CommandSender sender, lm lm) { + return hasPermission(sender, true, true, null, lm); + } + + public boolean hasPermission(CommandSender sender, lm lm, String... extra) { + return hasPermission(sender, true, true, null, lm, extra); + } + + public boolean hasPermission(CommandSender sender, String... extra) { + return hasPermission(sender, false, extra); + } + + public boolean hasPermission(CommandSender sender, Long delay, String... extra) { + return hasPermission(sender, false, true, delay, null, extra); + } + + public boolean hasPermission(CommandSender sender, boolean inform, String... extra) { + return hasPermission(sender, inform, true, extra); + } + + public boolean hasPermission(CommandSender sender, boolean inform, boolean informConsole, String... extra) { + return hasPermission(sender, inform, informConsole, null, null, extra); + } + + public boolean hasPermission(CommandSender sender, boolean inform, Long delayInMiliSeconds) { + return hasPermission(sender, inform, true, delayInMiliSeconds, null); + } + + public boolean hasPermission(CommandSender sender, boolean inform, boolean informConsole, Long delay, lm lms, String... extra) { + if (sender == null) + return false; + + if (!(sender instanceof Player)) { + return true; + } + + String perm = this.getPermission(extra); + + Player player = (Player) sender; + + PermissionInfo info = Residence.getInstance().getPermissionManager().getFromCache(player, perm); + boolean has = false; + if (info != null && info.getDelay() + info.getLastChecked() > System.currentTimeMillis()) { + has = info.isEnabled(); + } else { + has = sender.hasPermission(perm); + Residence.getInstance().getPermissionManager().addToCache(player, perm, has, delay == null ? 200L : delay); + } + + if (!has && inform) { + boolean showPerm = ResPerm.permisiononerror.hasPermission(sender); + RawMessage rm = new RawMessage(); + rm.add(Residence.getInstance().getLM().getMessage(lms == null ? lm.General_NoPermission : lms), showPerm ? perm : null); + rm.show(sender); + + informConsole(sender, perm, informConsole); + } + return has; + } + +// public boolean hasPermission(Player player, String inName) { +// +// String name = inName.toLowerCase(java.util.Locale.ENGLISH); +// +// if (player.isPermissionSet(name)) { +// return player.getperpermissions.get(name).getValue(); +// } else { +// Permission perm = Bukkit.getServer().getPluginManager().getPermission(name); +// +// if (perm != null) { +// return perm.getDefault().getValue(isOp()); +// } else { +// return Permission.DEFAULT_PERMISSION.getValue(isOp()); +// } +// } +// } + + private static void informConsole(CommandSender sender, String permission, boolean informConsole) { + if (informConsole) { + ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); + Residence.getInstance().msg(console, Residence.getInstance().getLM().getMessage(lm.General_NoPermission, "[playerName]", sender.getName(), "[permission]", permission)); + } + } + + public boolean hasSetPermission(CommandSender sender, String... extra) { + return hasSetPermission(sender, false, extra); + } + + public boolean hasSetPermission(CommandSender sender, boolean inform, String... extra) { + return hasSetPermission(sender, this.getPermission(extra), inform); + } + + public static boolean hasSetPermission(CommandSender sender, String perm, boolean inform) { + boolean has = Residence.getInstance().getPermissionManager().isSetPermission(sender, perm); + if (!has && inform) { + boolean showPerm = ResPerm.permisiononerror.hasPermission(sender); + RawMessage rm = new RawMessage(); + rm.add(Residence.getInstance().getLM().getMessage(lm.General_NoPermission), showPerm ? perm : null); + rm.show(sender); + + informConsole(sender, perm, true); + } + return has; + } + + public String[] getWars() { + return wars; + } + + public void setWars(String[] wars) { + this.wars = wars; + } + + public Boolean getShow() { + return show; + } + + public void setShow(Boolean show) { + this.show = show; + } + + public static boolean hasPermission(CommandSender sender, String permision, Boolean output) { + return hasPermission(sender, permision, output, true); + } + + public static boolean hasPermission(CommandSender sender, String permision, Boolean output, boolean informConsole) { + if (!(sender instanceof Player)) { + return true; + } + Player player = (Player) sender; + if (player.hasPermission(permision)) { + return true; + } + if (output) { + boolean showPerm = ResPerm.permisiononerror.hasPermission(sender); + RawMessage rm = new RawMessage(); + rm.add(Residence.getInstance().getLM().getMessage(lm.General_NoPermission), showPerm ? permision : null); + rm.show(sender); + + informConsole(sender, permision, informConsole); + } + return false; + } + } + + private HashMap> cahce = new HashMap>(); + + public void removeFromCache(Player player) { + cahce.remove(player.getUniqueId()); + } + + public PermissionInfo getFromCache(Player player, String perm) { + HashMap old = cahce.get(player.getUniqueId()); + if (old == null) { + return null; + } + + PermissionInfo info = old.get(perm); + + if (info == null) { + return null; + } + + return info; + } + + public PermissionInfo addToCache(Player player, String perm, boolean has, Long delayInMiliseconds) { + HashMap old = cahce.get(player.getUniqueId()); + if (old == null) { + old = new HashMap(); + } + + PermissionInfo info = new PermissionInfo(perm, delayInMiliseconds); + info.setLastChecked(System.currentTimeMillis()); + info.setEnabled(has); + + old.put(perm, info); + cahce.put(player.getUniqueId(), old); + + return info; + } + + public PermissionAttachmentInfo getSetPermission(CommandSender sender, String perm) { + if (sender instanceof Player) + for (PermissionAttachmentInfo permission : ((Player) sender).getEffectivePermissions()) { + if (permission.getPermission().equalsIgnoreCase(perm)) { + return permission; + } + } + return null; + } + + public boolean isSetPermission(CommandSender sender, String perm) { + if (sender instanceof Player) + return isSetPermission((Player) sender, perm); + return true; + } + + public boolean isSetPermission(Player player, String perm) { + return player.hasPermission(new Permission(perm, PermissionDefault.FALSE)); + } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 058dc9fc0..86b2930ba 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -49,6 +49,7 @@ import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.signsStuff.Signs; @@ -412,9 +413,9 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); - if (!this.isSubzone() && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create") + if (!this.isSubzone() && !group.canCreateResidences() && !ResPerm.create.hasPermission(player, true) || this.isSubzone() && !group.canCreateResidences() - && !plugin.hasPermission(player, "residence.create.subzone")) { + && !ResPerm.create_subzone.hasPermission(player, true)) { return false; } @@ -559,7 +560,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); - if (!group.canCreateResidences() && !plugin.hasPermission(player, "residence.resize")) { + if (!group.canCreateResidences() && !ResPerm.resize.hasPermission(player, true)) { return false; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index cab840e0f..925005ff4 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -40,6 +40,7 @@ import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; @@ -204,12 +205,11 @@ public boolean addResidence(Player player, String owner, String name, Location l PermissionGroup group = rPlayer.getGroup(); // PermissionGroup group = plugin.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); - if (!resadmin && !group.canCreateResidences() && !plugin.hasPermission(player, "residence.create", false)) { - plugin.msg(player, lm.General_NoPermission); + if (!resadmin && !group.canCreateResidences() && !ResPerm.create.hasPermission(player, lm.General_NoPermission)) { return false; } - if (!resadmin && !plugin.hasPermission(player, "residence.create")) { + if (!resadmin && !ResPerm.create.hasPermission(player, true)) { return false; } @@ -260,7 +260,7 @@ public boolean addResidence(Player player, String owner, String name, Location l Visualizer v = new Visualizer(player); v.setAreas(newArea); plugin.getSelectionManager().showBounds(player, v); - plugin.getAutoSelectionManager().getList().remove(player.getName().toLowerCase()); + plugin.getAutoSelectionManager().getList().remove(player.getUniqueId()); plugin.msg(player, lm.Area_Create, "main"); plugin.msg(player, lm.Residence_Create, name); } @@ -1082,7 +1082,7 @@ public boolean renameResidence(String oldName, String newName) { } public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { - if (!plugin.hasPermission(player, "residence.rename")) { + if (!ResPerm.rename.hasPermission(player, true)) { return false; } @@ -1189,7 +1189,7 @@ public void giveResidence(Player reqPlayer, String targPlayer, ClaimedResidence plugin.msg(reqPlayer, lm.Residence_Give, residence, giveplayer.getName()); plugin.msg(giveplayer, lm.Residence_Recieve, residence, reqPlayer.getName()); plugin.getSignUtil().updateSignResName(res); - if (includeSubzones) + if (includeSubzones) for (ClaimedResidence one : res.getSubzones()) { giveResidence(reqPlayer, targPlayer, one, resadmin, includeSubzones); } From 75d14396582cf36abe592b258de58a53fe324e20 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Aug 2019 17:10:02 +0300 Subject: [PATCH 0627/1142] Centralizing permission handling --- .../residence/ResidenceCommandListener.java | 5 +- .../listeners/ResidencePlayerListener.java | 50 +++++++++---------- .../permissions/PermissionManager.java | 20 +++++++- .../protection/ClaimedResidence.java | 6 +-- .../residence/protection/FlagPermissions.java | 3 +- .../protection/ResidencePermissions.java | 3 +- .../residence/selection/SelectionManager.java | 5 +- .../residence/selection/WorldGuard7Util.java | 11 ++-- .../residence/selection/WorldGuardUtil.java | 3 +- .../bukkit/residence/text/help/HelpEntry.java | 3 +- .../bukkit/residence/utils/FileCleanUp.java | 3 +- 11 files changed, 67 insertions(+), 45 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 9c8ab3de6..25b313723 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -61,7 +61,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (command.getName().equals("resreload") && args.length == 0) { if (sender instanceof Player) { Player player = (Player) sender; - if (plugin.getPermissionManager().isResidenceAdmin(player) && player.hasPermission("residence.topadmin")) { + if (plugin.getPermissionManager().isResidenceAdmin(player) && ResPerm.topadmin.hasPermission(player)) { plugin.reloadPlugin(); sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); System.out.println("[Residence] Reloaded by " + player.getName() + "."); @@ -74,8 +74,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } if (command.getName().equals("resload")) { - if (!(sender instanceof Player) || sender instanceof Player && plugin.getPermissionManager().isResidenceAdmin(sender) && ((Player) sender).hasPermission( - "residence.topadmin")) { + if (!(sender instanceof Player) || sender instanceof Player && plugin.getPermissionManager().isResidenceAdmin(sender) && ResPerm.topadmin.hasPermission(sender)) { try { plugin.loadYml(); sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ac53d59c5..3a05805fa 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -76,6 +76,7 @@ import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; @@ -164,7 +165,7 @@ public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { return; if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itempickup, FlagCombo.OnlyFalse)) return; - if (event.getPlayer().hasPermission("residence.flag.itempickup.bypass")) + if (ResPerm.bypass_$1.hasPermission(event.getPlayer(), Flags.itempickup.toString())) return; event.setCancelled(true); event.getItem().setPickupDelay(plugin.getConfigManager().getItemPickUpDelay() * 20); @@ -278,7 +279,7 @@ public void onResidenceBackup(ResidenceFlagChangeEvent event) { return; if (plugin.getSchematicManager() == null) return; - if (player != null && !player.hasPermission("residence.backup")) + if (player != null && !ResPerm.backup.hasPermission(player)) event.setCancelled(true); else plugin.getSchematicManager().save(event.getResidence()); @@ -621,7 +622,7 @@ public void onCommand(PlayerCommandPreprocessEvent event) { if (plugin.getPermissionManager().isResidenceAdmin(player)) return; - if (player.hasPermission("residence.flag.command.bypass")) + if (ResPerm.bypass_$1.hasPermission(player, Flags.command.toString())) return; String msg = event.getMessage().replace(" ", "_").toLowerCase(); @@ -873,8 +874,7 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { return; FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); - f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) && !player.hasPermission( - "residence.nofly.bypass")) { + f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) && !ResPerm.bypass_$1.hasPermission(player, Flags.nofly)) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null && res.isOwner(player)) @@ -919,7 +919,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { plugin.getPlayerManager().playerJoin(player, false); - if (player.hasPermission("residence.versioncheck")) { + if (ResPerm.versioncheck.hasPermission(player)) { plugin.getVersionChecker().VersionCheck(player); } } @@ -1101,7 +1101,7 @@ public void onPlatePress(PlayerInteractEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); boolean resadmin = plugin.isResAdminOn(player); if (!resadmin) { - boolean hasUseBypass = player.hasPermission("residence.bypass.use"); + boolean hasUseBypass = ResPerm.bypass_$1.hasPermission(player, Flags.use.toString()); boolean hasuse = perms.playerHas(player, Flags.use, true); boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); if (!hasUseBypass) @@ -1147,8 +1147,8 @@ public void onSelection(PlayerInteractEvent event) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); - if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") || group - .canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { + if (ResPerm.select.hasPermission(player) || ResPerm.create.hasPermission(player) && !ResPerm.select.hasSetPermission(player) || group + .canCreateResidences() && !ResPerm.create.hasSetPermission(player) && !ResPerm.select.hasSetPermission(player) || resadmin) { Block block = event.getClickedBlock(); @@ -1300,8 +1300,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasUseBypass = player.hasPermission("residence.bypass.use"); - boolean hasContainerBypass = player.hasPermission("residence.bypass.container"); + boolean hasUseBypass = ResPerm.bypass_$1.hasPermission(player, Flags.use); + boolean hasContainerBypass = ResPerm.bypass_$1.hasPermission(player, Flags.container); boolean hasuse = perms.playerHas(player, Flags.use, true) || hasUseBypass; ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); if (res == null || !res.isOwner(player)) { @@ -1427,7 +1427,7 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { if (res == null) return; - boolean hasContainerBypass = player.hasPermission("residence.bypass.container"); + boolean hasContainerBypass = ResPerm.bypass_$1.hasPermission(player, Flags.container); if (!hasContainerBypass) if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { @@ -1483,7 +1483,7 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) if (res == null) return; - boolean hasContainerBypass = player.hasPermission("residence.bypass.container"); + boolean hasContainerBypass = ResPerm.bypass_$1.hasPermission(player, Flags.container); if (!hasContainerBypass) if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { @@ -1623,7 +1623,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { return; } - boolean hasContainerBypass = player.hasPermission("residence.bypass.container"); + boolean hasContainerBypass = ResPerm.bypass_$1.hasPermission(player, Flags.container); if (!hasContainerBypass) if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { @@ -1743,7 +1743,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { return; if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { - if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) && !player.hasPermission("residence.tpbypass")) { + if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) && !ResPerm.bypass_$1.hasPermission(player, Flags.tp)) { event.setCancelled(true); plugin.msg(player, lm.Residence_MoveDeny, res.getName()); return; @@ -1756,14 +1756,14 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { } } if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && plugin.getConfigManager().isBlockAnyTeleportation()) { - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player)) { event.setCancelled(true); plugin.msg(player, lm.General_TeleportDeny, res.getName()); return; } } if (plugin.getNms().isChorusTeleport(event.getCause())) { - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.chorustp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.chorustp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player)) { event.setCancelled(true); plugin.msg(player, lm.Residence_FlagDeny, Flags.chorustp, res.getName()); return; @@ -1833,7 +1833,7 @@ private static Location getSafeLocation(Location loc) { private void fly(Player player, boolean state) { if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) return; - if (player.hasPermission("residence.flybypass")) + if (ResPerm.bypass_$1.hasPermission(player, Flags.fly)) return; if (!state) { boolean land = player.isFlying(); @@ -2036,9 +2036,8 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move } else { if (res != null && ResOld.getName().equals(res.getName())) { - f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !player - .hasPermission( - "residence.nofly.bypass")) { + f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && + !ResPerm.bypass_$1.hasPermission(player, Flags.nofly)) { if (res.isOwner(player)) break f; Location lc = player.getLocation(); @@ -2119,8 +2118,7 @@ public void run() { } if (move) { - if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !player.hasPermission( - "residence.admin.move")) { + if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move.hasPermission(player)) { Location lastLoc = lastOutsideLoc.get(uuid); @@ -2133,7 +2131,7 @@ public void run() { ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); boolean teleported = false; - if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !player.hasPermission("residence.admin.tp")) { + if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player)) { Location newLoc = res.getOutsideFreeLoc(loc, player); player.closeInventory(); teleported = teleport(player, newLoc); @@ -2170,8 +2168,8 @@ public void run() { } // Preventing fly in residence only when player has move permission - f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !player.hasPermission( - "residence.nofly.bypass")) { + f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && + !ResPerm.bypass_$1.hasPermission(player, Flags.nofly)) { if (res.isOwner(player)) break f; Location lc = player.getLocation(); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 537dad55e..735c5cfad 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -27,6 +27,8 @@ import com.Zrips.CMI.Modules.Permissions.PermissionInfo; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.commands.flags; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.PlayerGroup; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; @@ -98,7 +100,7 @@ public String getPermissionsGroup(String player, String world) { } public boolean isResidenceAdmin(CommandSender sender) { - return (sender.hasPermission("residence.admin") || (sender.isOp() && plugin.getConfigManager().getOpsAreAdmins())); + return (ResPerm.admin_move.hasPermission(sender) || (sender.isOp() && plugin.getConfigManager().getOpsAreAdmins())); } private void checkPermissions() { @@ -206,7 +208,18 @@ public enum ResPerm { command_message_enter_remove("Allows to remove residence enter message"), command_message_leave_remove("Allows to remove residence leave message"), + cleanbypass("Prevents residence from ebing removed on automatic cleanup"), + worldguard_$1("Allows to create residence inside region","region"), + flag_$1("Gives access to defined flag","flagName"), + tpdelaybypass("Allows to bypass teleport delay"), + backup("Allows to use backup flag to save residence into schematics"), + admin_tp("Allows teleportation into residence where its not allowed"), + topadmin("Defines as residence top admin"), + admin("Defines as residence admin"), + admin_move("Allows movement in residence where its not allowed"), newguyresidence("Creates residence on first chest place"), + bypass_ignorey("Allows to ignore Y corrdiante restrictions"), + bypass_ignoreyinsubzone("Allows to ignore subzone limitations"), bypass_destroy("Allows to bypass destroy flag"), bypass_build("Allows to bypass build flag"), bypass_container("Allows to bypass container flag"), @@ -242,6 +255,7 @@ public enum ResPerm { // prewards_$1("Allows to get particular playtime reward"), // colors_$1_$star("Allows all color usage in particular areas", "type"), // command_repair("", false), + versioncheck("Shows when we have new version of plugin"), command_$1("", false), command_$1_others("Allows to perform command on another player", "commandName"), command_$1_$2("", false); @@ -327,6 +341,10 @@ public boolean hasPermission(CommandSender sender, lm lm, String... extra) { return hasPermission(sender, true, true, null, lm, extra); } + public boolean hasPermission(CommandSender sender, Flags flag) { + return hasPermission(sender, false, flag.toString()); + } + public boolean hasPermission(CommandSender sender, String... extra) { return hasPermission(sender, false, extra); } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 86b2930ba..636260b97 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1071,7 +1071,7 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) - && !player.hasPermission("residence.admin.tp")) + && !ResPerm.admin_tp.hasPermission(player)) continue; found = true; @@ -1270,9 +1270,9 @@ public int isSafeTp(Player player) { public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { boolean isAdmin = plugin.isResAdminOn(reqPlayer); - boolean bypassDelay = targetPlayer.hasPermission("residence.tpdelaybypass"); + boolean bypassDelay = ResPerm.tpdelaybypass.hasPermission(targetPlayer); - if (!resadmin && !isAdmin && !reqPlayer.hasPermission("residence.tpbypass") + if (!resadmin && !isAdmin && !ResPerm.bypass_$1.hasPermission(reqPlayer, Flags.tp) && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 34d067e77..89f0fbe1d 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -29,6 +29,7 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; public class FlagPermissions { @@ -942,7 +943,7 @@ public ArrayList getposibleAreaFlags() { public List getPosibleFlags(Player player, boolean residence, boolean resadmin) { Set flags = new HashSet(); for (Entry one : Residence.getInstance().getPermissionManager().getAllFlags().getFlags().entrySet()) { - if (!one.getValue() && !resadmin && !player.hasPermission(new Permission("residence.flag." + one.getKey().toLowerCase(), PermissionDefault.FALSE))) + if (!one.getValue() && !resadmin && !ResPerm.flag_$1.hasSetPermission(player, one.getKey().toLowerCase())) continue; if (!residence && !getAllPosibleFlags().contains(one.getKey())) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 372e355c9..d5eef9f8f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -21,6 +21,7 @@ import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; public class ResidencePermissions extends FlagPermissions { @@ -293,7 +294,7 @@ private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState sta Residence.getInstance().msg(sender, lm.General_NoPermission); return false; } - if (!hasFlagAccess(this.getOwner(), flag) && !sender.hasPermission("residence.flag." + flag.toLowerCase())) { + if (!hasFlagAccess(this.getOwner(), flag) && !ResPerm.flag_$1.hasPermission(sender, flag.toLowerCase())) { Residence.getInstance().msg(sender, lm.Flag_SetFailed, flag); return false; } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 9878211c7..aef85d8b0 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -26,6 +26,7 @@ import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -38,8 +39,8 @@ public class SelectionManager { public static final int MIN_HEIGHT = 0; - Permission ignoreyPermission = new Permission("residence.bypass.ignorey", PermissionDefault.FALSE); - Permission ignoreyinsubzonePermission = new Permission("residence.bypass.ignoreyinsubzone", PermissionDefault.FALSE); + Permission ignoreyPermission = new Permission(ResPerm.bypass_ignorey.getPermission(), PermissionDefault.FALSE); + Permission ignoreyinsubzonePermission = new Permission(ResPerm.bypass_ignoreyinsubzone.getPermission(), PermissionDefault.FALSE); public enum selectionType { noLimits, ignoreY, residenceBounds; diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java b/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java index 8b40145ec..5b87f331a 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java @@ -6,6 +6,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.sk89q.worldedit.BlockVector; import com.sk89q.worldedit.bukkit.BukkitAdapter; @@ -26,7 +27,7 @@ public WorldGuard7Util(Residence residence) { @Override public ProtectedRegion getRegion(Player player, CuboidArea area) { - + if (area == null) return null; @@ -46,11 +47,11 @@ public ProtectedRegion getRegion(Player player, CuboidArea area) { ProtectedRegion region = new ProtectedCuboidRegion(id, min, max); RegionManager mgr = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(loc1.getWorld())); - + ApplicableRegionSet regions = mgr.getApplicableRegions(region); for (ProtectedRegion one : regions.getRegions()) { - if (!player.hasPermission("residence.worldguard." + one.getId())) + if (!ResPerm.worldguard_$1.hasPermission(player, one.getId())) return one; } } catch (Exception | IncompatibleClassChangeError e) { @@ -68,9 +69,9 @@ public boolean isSelectionInArea(Player player) { return false; plugin.msg(player, lm.Select_WorldGuardOverlap, Region.getId()); - Location lowLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMinimumPoint().getBlockX(), + Location lowLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player).getWorld(), Region.getMinimumPoint().getBlockX(), Region.getMinimumPoint().getBlockY(), Region.getMinimumPoint().getBlockZ()); - Location highLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), Region.getMaximumPoint().getBlockX(), + Location highLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player).getWorld(), Region.getMaximumPoint().getBlockX(), Region.getMaximumPoint().getBlockY(), Region.getMaximumPoint().getBlockZ()); Visualizer v = new Visualizer(player); v.setAreas(plugin.getSelectionManager().getSelectionCuboid(player)); diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java index 2f965375c..becbd5ded 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -9,6 +9,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.sk89q.worldedit.BlockVector; import com.sk89q.worldedit.Vector; @@ -57,7 +58,7 @@ public ProtectedRegion getRegion(Player player, CuboidArea area) { ApplicableRegionSet regions = mgr.getApplicableRegions(region); for (ProtectedRegion one : regions.getRegions()) { - if (!player.hasPermission("residence.worldguard." + one.getId())) + if (!ResPerm.worldguard_$1.hasPermission(player, one.getId())) return one; } } catch (Exception | IncompatibleClassChangeError e) { diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index c9b035368..ea2970f97 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -13,6 +13,7 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.HelpLines; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.utils.Debug; @@ -146,7 +147,7 @@ private List getHelpData(CommandSender sender, boolean resadmin) { } else { if (GlobalFlags.getFlags().containsKey(entry.getName().toLowerCase())) { Boolean state = GlobalFlags.getFlags().get(entry.getName().toLowerCase()); - if (!state && !resadmin && !sender.hasPermission("residence.flag." + entry.getName().toLowerCase())) { + if (!state && !resadmin && !ResPerm.flag_$1.hasPermission(sender, entry.getName().toLowerCase())) { continue; } diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 292da1d1e..ac670cb94 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -10,6 +10,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; @@ -65,7 +66,7 @@ public void cleanFiles() { if (dif < interval) continue; - if (ResidenceVaultAdapter.hasPermission(player, "residence.cleanbypass", res.getWorld())) + if (ResidenceVaultAdapter.hasPermission(player, ResPerm.cleanbypass.getPermission(), res.getWorld())) continue; ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getUniqueId()); From 65de1d279d7d27b2704d477672048a62fff0c751 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Aug 2019 17:13:08 +0300 Subject: [PATCH 0628/1142] Lets print out residence count for each world on load --- .../bekvon/bukkit/residence/protection/ResidenceManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 925005ff4..4324d80bc 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -983,7 +983,8 @@ public void load(Map root) throws Exception { long pass = System.currentTimeMillis() - time; String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + world.getName() + " data into memory. (" + PastTime + ")"); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + world.getName() + " data into memory. (" + PastTime + ") -> " + (reslist == null ? "0" : reslist.size()) + + " residences"); } clearLoadChache(); From 644babe9e82204dd58fa27d6d0adb38eab1bf5a7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Aug 2019 17:52:34 +0300 Subject: [PATCH 0629/1142] Lets make each bypass flag separate --- .../listeners/ResidencePlayerListener.java | 26 +++++++++---------- .../permissions/PermissionManager.java | 20 +++++++------- .../protection/ClaimedResidence.java | 2 +- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3a05805fa..ce68d1037 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -165,7 +165,7 @@ public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { return; if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itempickup, FlagCombo.OnlyFalse)) return; - if (ResPerm.bypass_$1.hasPermission(event.getPlayer(), Flags.itempickup.toString())) + if (ResPerm.bypass_itempickup.hasPermission(event.getPlayer())) return; event.setCancelled(true); event.getItem().setPickupDelay(plugin.getConfigManager().getItemPickUpDelay() * 20); @@ -622,7 +622,7 @@ public void onCommand(PlayerCommandPreprocessEvent event) { if (plugin.getPermissionManager().isResidenceAdmin(player)) return; - if (ResPerm.bypass_$1.hasPermission(player, Flags.command.toString())) + if (ResPerm.bypass_command.hasPermission(player)) return; String msg = event.getMessage().replace(" ", "_").toLowerCase(); @@ -874,7 +874,7 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { return; FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); - f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) && !ResPerm.bypass_$1.hasPermission(player, Flags.nofly)) { + f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) && !ResPerm.bypass_nofly.hasPermission(player)) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null && res.isOwner(player)) @@ -1101,7 +1101,7 @@ public void onPlatePress(PlayerInteractEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); boolean resadmin = plugin.isResAdminOn(player); if (!resadmin) { - boolean hasUseBypass = ResPerm.bypass_$1.hasPermission(player, Flags.use.toString()); + boolean hasUseBypass = ResPerm.bypass_use.hasPermission(player); boolean hasuse = perms.playerHas(player, Flags.use, true); boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); if (!hasUseBypass) @@ -1300,8 +1300,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasUseBypass = ResPerm.bypass_$1.hasPermission(player, Flags.use); - boolean hasContainerBypass = ResPerm.bypass_$1.hasPermission(player, Flags.container); + boolean hasUseBypass = ResPerm.bypass_use.hasPermission(player); + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player); boolean hasuse = perms.playerHas(player, Flags.use, true) || hasUseBypass; ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); if (res == null || !res.isOwner(player)) { @@ -1427,7 +1427,7 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { if (res == null) return; - boolean hasContainerBypass = ResPerm.bypass_$1.hasPermission(player, Flags.container); + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player); if (!hasContainerBypass) if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { @@ -1483,7 +1483,7 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) if (res == null) return; - boolean hasContainerBypass = ResPerm.bypass_$1.hasPermission(player, Flags.container); + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player); if (!hasContainerBypass) if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { @@ -1623,7 +1623,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { return; } - boolean hasContainerBypass = ResPerm.bypass_$1.hasPermission(player, Flags.container); + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player); if (!hasContainerBypass) if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { @@ -1743,7 +1743,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { return; if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { - if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) && !ResPerm.bypass_$1.hasPermission(player, Flags.tp)) { + if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) && !ResPerm.bypass_tp.hasPermission(player)) { event.setCancelled(true); plugin.msg(player, lm.Residence_MoveDeny, res.getName()); return; @@ -1833,7 +1833,7 @@ private static Location getSafeLocation(Location loc) { private void fly(Player player, boolean state) { if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) return; - if (ResPerm.bypass_$1.hasPermission(player, Flags.fly)) + if (ResPerm.bypass_fly.hasPermission(player)) return; if (!state) { boolean land = player.isFlying(); @@ -2037,7 +2037,7 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move if (res != null && ResOld.getName().equals(res.getName())) { f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && - !ResPerm.bypass_$1.hasPermission(player, Flags.nofly)) { + !ResPerm.bypass_nofly.hasPermission(player)) { if (res.isOwner(player)) break f; Location lc = player.getLocation(); @@ -2169,7 +2169,7 @@ public void run() { // Preventing fly in residence only when player has move permission f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && - !ResPerm.bypass_$1.hasPermission(player, Flags.nofly)) { + !ResPerm.bypass_nofly.hasPermission(player)) { if (res.isOwner(player)) break f; Location lc = player.getLocation(); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 735c5cfad..fb7a4cdce 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -209,8 +209,8 @@ public enum ResPerm { command_message_leave_remove("Allows to remove residence leave message"), cleanbypass("Prevents residence from ebing removed on automatic cleanup"), - worldguard_$1("Allows to create residence inside region","region"), - flag_$1("Gives access to defined flag","flagName"), + worldguard_$1("Allows to create residence inside region", "region"), + flag_$1("Gives access to defined flag", "flagName"), tpdelaybypass("Allows to bypass teleport delay"), backup("Allows to use backup flag to save residence into schematics"), admin_tp("Allows teleportation into residence where its not allowed"), @@ -223,7 +223,12 @@ public enum ResPerm { bypass_destroy("Allows to bypass destroy flag"), bypass_build("Allows to bypass build flag"), bypass_container("Allows to bypass container flag"), - bypass_$1("Allows to bypass container flag"), + bypass_use("Allows to bypass use flag"), + bypass_fly("Allows to bypass fly flag"), + bypass_nofly("Allows to bypass nofly flag"), + bypass_tp("Allows to bypass command flag"), + bypass_command("Allows to bypass command flag"), + bypass_itempickup("Allows to bypass itempickup flag"), buy("Allows to buy residence"), sell("Allows to sell residence"), max_res_unlimited("Defines residence limit as unlimited"), @@ -251,14 +256,9 @@ public enum ResPerm { command_kick_bypass("Allows to bypass kick from residence"), command_contract_subzone("Allows to contract subzones"), command_expand_subzone("Allows to expand subzones"), -// security_admin("Sets players security level"), -// prewards_$1("Allows to get particular playtime reward"), -// colors_$1_$star("Allows all color usage in particular areas", "type"), -// command_repair("", false), versioncheck("Shows when we have new version of plugin"), - command_$1("", false), - command_$1_others("Allows to perform command on another player", "commandName"), - command_$1_$2("", false); + command_$1("Gives access to particular command", "commandName"), + command_$1_others("Allows to perform command on another player", "commandName"); private Boolean show = true; private String desc; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 636260b97..e4fa2c970 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1272,7 +1272,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r boolean isAdmin = plugin.isResAdminOn(reqPlayer); boolean bypassDelay = ResPerm.tpdelaybypass.hasPermission(targetPlayer); - if (!resadmin && !isAdmin && !ResPerm.bypass_$1.hasPermission(reqPlayer, Flags.tp) + if (!resadmin && !isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer) && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); From bb232b25ee9927786f9b44bf374994f682aef96a Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Aug 2019 18:08:24 +0300 Subject: [PATCH 0630/1142] Lets fix auto selection --- LICENSE => src/LICENSE | 0 README => src/README | 0 .../bukkit/residence/commands/select.java | 1 + .../residence/selection/AutoSelection.java | 3 +- .../residence/selection/SelectionManager.java | 1 + src/plugin.yml | 2 +- utils/fix-all-colors.pl | 58 --------- utils/res-plots.pl | 115 ------------------ 8 files changed, 4 insertions(+), 176 deletions(-) rename LICENSE => src/LICENSE (100%) rename README => src/README (100%) delete mode 100644 utils/fix-all-colors.pl delete mode 100644 utils/res-plots.pl diff --git a/LICENSE b/src/LICENSE similarity index 100% rename from LICENSE rename to src/LICENSE diff --git a/README b/src/README similarity index 100% rename from README rename to src/README diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 38393f9ae..4736a5d72 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -20,6 +20,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; public class select implements cmd { diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index 2e2378ce1..d8f98f4ab 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -12,6 +12,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; public class AutoSelection { @@ -61,12 +62,10 @@ public void UpdateSelection(Player player, Location targetLoc) { if (loc1 == null) { plugin.getSelectionManager().placeLoc1(player, cloc, false); loc1 = player.getLocation(); - return; } if (loc2 == null) { plugin.getSelectionManager().placeLoc2(player, cloc, true); - loc2 = player.getLocation(); return; } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index aef85d8b0..3bbcba709 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -29,6 +29,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; public class SelectionManager { protected Map selections; diff --git a/src/plugin.yml b/src/plugin.yml index 00b15277d..33135d8ed 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.6.6 +version: 4.8.7.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 diff --git a/utils/fix-all-colors.pl b/utils/fix-all-colors.pl deleted file mode 100644 index c901cf9ce..000000000 --- a/utils/fix-all-colors.pl +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/perl - -use strict; - -my %colors = ( - "0" => "BLACK", - "1" => "DARK_BLUE", - "2" => "DARK_GREEN", - "3" => "DARK_AQUA", - "4" => "DARK_RED", - "5" => "DARK_PURPLE", - "6" => "GOLD", - "7" => "GRAY", - "8" => "DARK_GRAY", - "9" => "BLUE", - "a" => "GREEN", - "b" => "AQUA", - "c" => "RED", - "d" => "LIGHT_PURPLE", - "e" => "YELLOW", - "f" => "WHITE", - "k" => "MAGIC", - "l" => "BOLD", - "m" => "STRIKETHROUGH", - "n" => "UNDERLINE", - "o" => "ITALIC", - "r" => "RESET", -); -open (CMD, "find . -name \\*java|"); -while( my $file = ) { - chomp $file; - my @lines = (); - open (FILE, "<$file"); - while (my $line = ) { - - $line =~ s/\xc2//g; - for my $c (keys %colors) { - $line =~ s/\("\xa7$c"/\(ChatColor.$colors{$c}/g; - $line =~ s/"\xa7$c"/ChatColor.$colors{$c}/g; - $line =~ s/"\xa7$c(.)/ChatColor.$colors{$c}+"$1/g; - $line =~ s/(.)\xa7$c"/$1"+ChatColor.$colors{$c}/g; - $line =~ s/(.)\xa7$c(.)/$1"+ChatColor.$colors{$c}+"$2/g; - $line =~ s/"\xa7"\+//g; - } - push @lines, $line; - if ($line =~ /^package/) { - push @lines, "import org.bukkit.ChatColor;\n"; - } - } - close FILE; - open (FILE, ">$file"); - for (@lines) { - print FILE $_; - print $_ if (/\xa7/); - } - close FILE; -} -close CMD; diff --git a/utils/res-plots.pl b/utils/res-plots.pl deleted file mode 100644 index b75b33df8..000000000 --- a/utils/res-plots.pl +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/perl -w -use strict; - -print "Enter output filename: "; -my $file = <>; -chomp($file); -print $file . "\n"; - -open OUT, ">$file"; - -my $startX; -my $startY; -my $startZ; -my $sizeX; -my $sizeY; -my $sizeZ; -my $bufferX; -my $bufferZ; -my $plotsX; -my $plotsZ; -my $world; -my $plotPrefix; -my $plotName; -my $owner; -my $input; - -print "Enter the world name: "; -$world = <>; -chomp($world); -print "Starting X coordinate: "; -$startX = <>; -chomp($startX); -print "Starting Y coordinate: "; -$startY = <>; -chomp($startY); -print "Starting Z coordinate: "; -$startZ = <>; -chomp($startZ); -print "Size of plots on X axis: "; -$sizeX = <>; -chomp($sizeX); -print "Size of plots on Y axis: "; -$sizeY = <>; -chomp($sizeY); -print "Size of plots on Z axis: "; -$sizeZ = <>; -chomp($sizeZ); -print "Blocks between plots on X axis: "; -$bufferX = <>; -chomp($bufferX); -print "Blocks between plots on Z axis: "; -$bufferZ = <>; -chomp($bufferZ); -print "Number of plots on X axis: "; -$plotsX = <>; -chomp($plotsX); -print "Number of plots on Z axis: "; -$plotsZ = <>; -chomp($plotsZ); -print "Default owner name: "; -$owner = <>; -chomp($owner); -print "Residence name prefix: "; -$plotPrefix = <>; -chomp($plotPrefix); - -my $plotID = 1; -print OUT "Residences:\n"; -for (my $currentX = 0; $currentX < $plotsX; $currentX++ ) { - for (my $currentZ = 0; $currentZ < $plotsZ; $currentZ++ ) { - $plotName = "$plotPrefix$plotID"; - print OUT " $plotName:\n"; - print OUT " EnterMessage: Welcome %player to %residence, owned by %owner\n"; - print OUT " BlackList:\n"; - print OUT " Type: BLACKLIST\n"; - print OUT " ItemList: []\n"; - print OUT " LeaveMessage: Now leaving %residence.\n"; - print OUT " IgnoreList:\n"; - print OUT " Type: IGNORELIST\n"; - print OUT " ItemList: []\n"; - print OUT " Areas:\n"; - print OUT " main:\n"; - print OUT " X1: " . ($currentX * ($sizeX + $bufferX) + $startX) . "\n"; - print OUT " Y1: " . $startY . "\n"; - print OUT " Z1: " . ($currentZ * ($sizeZ + $bufferZ) + $startZ) . "\n"; - print OUT " X2: " . ($currentX * ($sizeX + $bufferX) + $startX + $sizeX) . "\n"; - print OUT " Y2: " . ($startY + $sizeY) . "\n"; - print OUT " Z2: " . ($currentZ * ($sizeZ + $bufferZ) + $startZ + $sizeZ) . "\n"; - print OUT " Subzones: {}\n"; - print OUT " Permissions:\n"; - print OUT " PlayerFlags:\n"; - print OUT " $owner:\n"; - print OUT " container: true\n"; - print OUT " ignite: true\n"; - print OUT " use: true\n"; - print OUT " build: true\n"; - print OUT " move: true\n"; - print OUT " GroupFlags: {}\n"; - print OUT " AreaFlags:\n"; - print OUT " pvp: false\n"; - print OUT " firespread: false\n"; - print OUT " container: false\n"; - print OUT " tnt: false\n"; - print OUT " ignite: false\n"; - print OUT " piston: false\n"; - print OUT " use: false\n"; - print OUT " creeper: false\n"; - print OUT " flow: false\n"; - print OUT " build: false\n"; - print OUT " Owner: $owner\n"; - print OUT " World: $world\n"; - print OUT " StoredMoney: 0\n"; - $plotID++; - } -} From e4a70799787b09abf58f5b4236f45e788490c7d0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Aug 2019 18:15:33 +0300 Subject: [PATCH 0631/1142] Lets update bypass flags in plugin.yml --- src/plugin.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugin.yml b/src/plugin.yml index 33135d8ed..dc3a6c72f 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -75,10 +75,10 @@ permissions: residence.versioncheck: description: Notice to new version after connect default: op - residence.nofly.bypass: + residence.bypass.nofly: description: Bypasses nofly flag in residence default: op - residence.flag.command.bypass: + residence.bypass.command: description: Bypasses command flag in residence default: op residence.select.auto.others: From 6a15744b211abf4f9a7e22bce73b9049bf95a965 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 2 Aug 2019 20:18:59 +0300 Subject: [PATCH 0632/1142] Initialize selection manager if its null --- src/com/bekvon/bukkit/residence/Residence.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index d24a09868..2b22fa651 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -748,7 +748,8 @@ public void run() { } FlagPermissions.initValidFlags(); - setWorldEdit(); + if (smanager == null) + setWorldEdit(); setWorldGuard(); setKingdoms(); @@ -993,6 +994,8 @@ public ResidenceManager getResidenceManager() { } public SelectionManager getSelectionManager() { + if (smanager == null) + setWorldEdit(); return smanager; } From 403630ecf5136044c98b8c0269896b45377c48a5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 7 Aug 2019 11:55:19 +0300 Subject: [PATCH 0633/1142] We have to set initial location for auto select --- src/com/bekvon/bukkit/residence/commands/select.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 4736a5d72..6c7877dc7 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -162,6 +162,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } } plugin.getSelectionManager().clearSelection(target); + + plugin.getSelectionManager().placeLoc1(player, player.getLocation().clone(), false); + plugin.getSelectionManager().placeLoc2(player, player.getLocation().clone().add(0, 1, 0), true); + plugin.getAutoSelectionManager().switchAutoSelection(target); return true; } From 9c22e443b5e3b82d7481032ffea22f42903333e5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 7 Aug 2019 12:52:22 +0300 Subject: [PATCH 0634/1142] Its admin and not admin_move --- .../bekvon/bukkit/residence/permissions/PermissionManager.java | 2 +- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index fb7a4cdce..8c068d8d1 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -100,7 +100,7 @@ public String getPermissionsGroup(String player, String world) { } public boolean isResidenceAdmin(CommandSender sender) { - return (ResPerm.admin_move.hasPermission(sender) || (sender.isOp() && plugin.getConfigManager().getOpsAreAdmins())); + return (ResPerm.admin.hasPermission(sender) || (sender.isOp() && plugin.getConfigManager().getOpsAreAdmins())); } private void checkPermissions() { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e4fa2c970..11a1094ac 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -964,7 +964,6 @@ public void setEnterLeaveMessage(CommandSender sender, String message, boolean e } public Location getMiddleFreeLoc(Location insideLoc, Player player) { - Debug.D("d"); CuboidArea area = this.getAreaByLoc(insideLoc); if (area == null) { return insideLoc; From 53a7ca95ac0f230fbe3d130a22837fb585d420fb Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 12 Aug 2019 12:00:07 +0300 Subject: [PATCH 0635/1142] Residence removal from console fix --- src/com/bekvon/bukkit/residence/commands/confirm.java | 7 ++----- src/com/bekvon/bukkit/residence/commands/remove.java | 3 +-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/confirm.java b/src/com/bekvon/bukkit/residence/commands/confirm.java index f68835266..ac7296a22 100644 --- a/src/com/bekvon/bukkit/residence/commands/confirm.java +++ b/src/com/bekvon/bukkit/residence/commands/confirm.java @@ -18,11 +18,8 @@ public class confirm implements cmd { @CommandAnnotation(simple = true, priority = 2400) public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { Player player = null; - String name = "Console"; - if (sender instanceof Player) { - player = (Player) sender; - name = player.getName(); - } + String name = sender.getName(); + if (args.length != 1) return true; diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index fd3392ebf..0bf3c5224 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -64,8 +64,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (plugin.deleteConfirm.containsKey(senderName)) - plugin.deleteConfirm.remove(senderName); + plugin.deleteConfirm.remove(senderName); String resname = res.getName(); From d8de7ea70239c9ac326d7d7a79e80d5480effadd Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 13 Aug 2019 12:29:28 +0300 Subject: [PATCH 0636/1142] Wrong class --- .../bekvon/bukkit/residence/permissions/PermissionManager.java | 2 -- src/plugin.yml | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 8c068d8d1..7417f7b47 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -24,10 +24,8 @@ import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.Plugin; -import com.Zrips.CMI.Modules.Permissions.PermissionInfo; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.commands.flags; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.PlayerGroup; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/plugin.yml b/src/plugin.yml index dc3a6c72f..f4b21a8aa 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.7.0 +version: 4.8.7.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From b13ad0752f2a1d19ee018f7f548a547d86675e72 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Sep 2019 16:25:18 +0300 Subject: [PATCH 0637/1142] Lets prevent item placing from offhand --- src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java | 5 +++++ src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java | 5 +++++ src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java | 5 +++++ src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java | 5 +++++ src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java | 5 +++++ src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java | 5 +++++ src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java | 5 +++++ src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java | 6 +++++- src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java | 7 ++++++- src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java | 5 +++++ src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java | 5 +++++ src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java | 5 +++++ src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java | 5 +++++ src/com/bekvon/bukkit/residence/containers/NMS.java | 2 ++ .../residence/listeners/ResidencePlayerListener.java | 5 +---- src/plugin.yml | 2 +- 16 files changed, 70 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java index 115de20f6..45bd8f373 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java @@ -84,6 +84,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInMainHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return player.getInventory().getItemInOffHand(); + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { if (tpcause == TeleportCause.CHORUS_FRUIT) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java index b6700a245..4bc29f935 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java @@ -88,6 +88,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInMainHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return player.getInventory().getItemInOffHand(); + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { if (tpcause == TeleportCause.CHORUS_FRUIT) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java index a8854151c..766422687 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java @@ -90,6 +90,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInMainHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return player.getInventory().getItemInOffHand(); + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { if (tpcause == TeleportCause.CHORUS_FRUIT) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java index 1e2bbb549..ebb5b8fae 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java @@ -103,6 +103,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInMainHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return player.getInventory().getItemInOffHand(); + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { if (tpcause == TeleportCause.CHORUS_FRUIT) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java index 8969d64ab..63448e708 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java @@ -103,6 +103,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInMainHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return player.getInventory().getItemInOffHand(); + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { if (tpcause == TeleportCause.CHORUS_FRUIT) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java index 6f4406e86..513bcda96 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java @@ -107,6 +107,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInMainHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return player.getInventory().getItemInOffHand(); + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { if (tpcause == TeleportCause.CHORUS_FRUIT) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 0d48d1d74..439db409c 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -68,6 +68,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return null; + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { return false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java index 50e89ff58..5de3033cc 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java @@ -52,7 +52,6 @@ public boolean isArmorStandEntity(EntityType ent) { return false; } - @Override public boolean isSpectator(GameMode mode) { return false; @@ -69,6 +68,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return null; + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { return false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java index f5d67bd7c..3615f554f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java @@ -55,7 +55,7 @@ public boolean isAnimal(Entity ent) { public boolean isArmorStandEntity(EntityType ent) { return ent == EntityType.ARMOR_STAND; } - + @Override public boolean isSpectator(GameMode mode) { return mode == GameMode.SPECTATOR; @@ -72,6 +72,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return null; + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { return false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java index 83cc42cb9..9b4b91bcb 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java @@ -72,6 +72,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return null; + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { return false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java index 3e307c42b..3027b6e09 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java @@ -72,6 +72,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return null; + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { return false; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java index dbbbe63f0..a76bbff9d 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java @@ -72,6 +72,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInMainHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return player.getInventory().getItemInOffHand(); + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { if (tpcause == TeleportCause.CHORUS_FRUIT) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java index b0b47c2ea..ee7b75edd 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java @@ -72,6 +72,11 @@ public ItemStack itemInMainHand(Player player) { return player.getInventory().getItemInMainHand(); } + @Override + public ItemStack itemInOffHand(Player player) { + return player.getInventory().getItemInOffHand(); + } + @Override public boolean isChorusTeleport(TeleportCause tpcause) { if (tpcause == TeleportCause.CHORUS_FRUIT) diff --git a/src/com/bekvon/bukkit/residence/containers/NMS.java b/src/com/bekvon/bukkit/residence/containers/NMS.java index 290152aa4..0c3c9eb90 100644 --- a/src/com/bekvon/bukkit/residence/containers/NMS.java +++ b/src/com/bekvon/bukkit/residence/containers/NMS.java @@ -32,4 +32,6 @@ public interface NMS { public boolean isChorusTeleport(TeleportCause tpcause); void playEffect(Player player, Location location, CMIEffect ef); + + ItemStack itemInOffHand(Player player); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ce68d1037..60b5406e7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1228,14 +1228,11 @@ public void onPlayerInteract(PlayerInteractEvent event) { return; Player player = event.getPlayer(); - if (!plugin.getNms().isMainHand(event)) - return; - Block block = event.getClickedBlock(); if (block == null) return; - ItemStack iih = plugin.getNms().itemInMainHand(player); + ItemStack iih = event.getItem(); CMIMaterial heldItem = CMIMaterial.get(iih); Material mat = block.getType(); diff --git a/src/plugin.yml b/src/plugin.yml index f4b21a8aa..fbcc26e15 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.7.1 +version: 4.8.7.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 2fbec854d62c194b58e9a34661fed9e6355667ba Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Sep 2019 16:48:09 +0300 Subject: [PATCH 0638/1142] Lets correctly format grouped flags in feedback message --- src/com/bekvon/bukkit/residence/gui/SetFlag.java | 10 ++++------ .../residence/protection/ResidencePermissions.java | 6 ++---- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 23329315a..8c29437de 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -24,7 +24,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import com.bekvon.bukkit.residence.utils.Debug; public class SetFlag { @@ -215,7 +214,7 @@ public void recalculateResidence(ClaimedResidence res) { } for (Entry one : permMap.entrySet()) { - + i++; ItemStack MiscInfo = Residence.getInstance().getConfigManager().getGuiRemove(); switch ((FlagState) one.getValue()) { @@ -244,7 +243,7 @@ public void recalculateResidence(ClaimedResidence res) { flagName = flag.getName(); if (flagName == null) flagName = "Unknown"; - + // Can it be null? if (MiscInfoMeta == null) continue; @@ -274,10 +273,9 @@ public void recalculateResidence(ClaimedResidence res) { MiscInfoMeta.setLore(lore); MiscInfo.setItemMeta(MiscInfoMeta); - GuiInv.setItem(i, MiscInfo); - i++; if (i > 53) break; + GuiInv.setItem(i, MiscInfo); } ItemStack Item = new ItemStack(Material.ARROW); @@ -409,7 +407,7 @@ public void recalculatePlayer(ClaimedResidence res) { // Can it be null? if (MiscInfoMeta == null) continue; - + MiscInfoMeta.setDisplayName(ChatColor.GREEN + flagName); List lore = new ArrayList(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index d5eef9f8f..5d3a6cd07 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -724,14 +724,12 @@ public boolean setFlagGroupOnPlayer(CommandSender sender, String target, String ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); boolean changed = false; String flagString = ""; - int i = 0; for (String flag : flags) { - i++; if (this.setPlayerFlag(sender, target, flag, state, resadmin, false)) { changed = true; - flagString += flag; - if (i < flags.size() - 1) + if (!flagString.isEmpty()) flagString += ", "; + flagString += flag; } } if (flagString.length() > 0) From 0beedca286d7026909b35a9235f72fdf20c454e7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Sep 2019 16:53:09 +0300 Subject: [PATCH 0639/1142] GUI posible fix for issue with shifted buttons --- src/com/bekvon/bukkit/residence/gui/SetFlag.java | 11 ++++++----- .../residence/permissions/PermissionManager.java | 2 ++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 8c29437de..98a4470f4 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -24,6 +24,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import com.bekvon.bukkit.residence.utils.Debug; public class SetFlag { @@ -144,6 +145,7 @@ private void fillFlagDescriptions() { @SuppressWarnings("incomplete-switch") public void recalculateResidence(ClaimedResidence res) { + Debug.D("ss"); if (flags == null) flags = res.getPermissions().getPosibleFlags(player, true, this.admin); @@ -188,7 +190,6 @@ public void recalculateResidence(ClaimedResidence res) { } Inventory GuiInv = Bukkit.createInventory(null, 54, title); - int i = 0; if (targetPlayer == null) TempPermMap.remove("admin"); @@ -213,6 +214,7 @@ public void recalculateResidence(ClaimedResidence res) { permMap.put(one.getKey(), one.getValue()); } + int i = -1; for (Entry one : permMap.entrySet()) { i++; ItemStack MiscInfo = Residence.getInstance().getConfigManager().getGuiRemove(); @@ -352,7 +354,6 @@ public void recalculatePlayer(ClaimedResidence res) { } Inventory GuiInv = Bukkit.createInventory(null, 54, title); - int i = 0; TempPermMap = (LinkedHashMap) Residence.getInstance().getSortingManager().sortByKeyASC(TempPermMap); @@ -374,8 +375,9 @@ public void recalculatePlayer(ClaimedResidence res) { permMap.put(one.getKey(), one.getValue()); } + int i = -1; for (Entry one : permMap.entrySet()) { - + i++; ItemStack MiscInfo = Residence.getInstance().getConfigManager().getGuiRemove(); switch ((FlagState) one.getValue()) { @@ -434,10 +436,9 @@ public void recalculatePlayer(ClaimedResidence res) { MiscInfoMeta.setLore(lore); MiscInfo.setItemMeta(MiscInfoMeta); - GuiInv.setItem(i, MiscInfo); - i++; if (i > 53) break; + GuiInv.setItem(i, MiscInfo); } ItemStack Item = new ItemStack(Material.ARROW); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 7417f7b47..618515e0f 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -222,6 +222,8 @@ public enum ResPerm { bypass_build("Allows to bypass build flag"), bypass_container("Allows to bypass container flag"), bypass_use("Allows to bypass use flag"), + bypass_door("Allows to bypass door flag"), + bypass_button("Allows to bypass button flag"), bypass_fly("Allows to bypass fly flag"), bypass_nofly("Allows to bypass nofly flag"), bypass_tp("Allows to bypass command flag"), From 1777b15c70e9e10c5500fbff09dcf95fea35a8bb Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Sep 2019 17:10:07 +0300 Subject: [PATCH 0640/1142] New permission nodes: residence.bypass.door residence.bypass.button --- .../residence/listeners/ResidencePlayerListener.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 60b5406e7..4d583d346 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1317,6 +1317,17 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + switch (checkMat.getValue()) { + case door: + if (ResPerm.bypass_door.hasPermission(player)) + continue; + break; + case button: + if (ResPerm.bypass_button.hasPermission(player)) + continue; + break; + } + event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); return; From 1753be71c687d11a71968bec53da0fac86c0bf06 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 7 Sep 2019 12:03:20 +0300 Subject: [PATCH 0641/1142] Lets check if items are null when placing minecart --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 +- src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 4d583d346..2e7b70d26 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1214,7 +1214,7 @@ public void onInfoCheck(PlayerInteractEvent event) { } private static boolean placingMinecart(Block block, ItemStack item) { - if (block.getType().name().contains("RAIL") && item.getType().name().contains("MINECART")) + if (block != null && block.getType().name().contains("RAIL") && item != null && item.getType().name().contains("MINECART")) return true; return false; } diff --git a/src/plugin.yml b/src/plugin.yml index fbcc26e15..86566e8da 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.7.2 +version: 4.8.7.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 0ae3737b02dab0988013b2560fce500f4f99a266 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 20 Oct 2019 13:16:33 +0300 Subject: [PATCH 0642/1142] Czech translation by Leon --- src/Language/Czech.yml | 2346 ++++++++++++++++++++++++---------------- 1 file changed, 1399 insertions(+), 947 deletions(-) diff --git a/src/Language/Czech.yml b/src/Language/Czech.yml index 0da3a7afc..05d8dae29 100644 --- a/src/Language/Czech.yml +++ b/src/Language/Czech.yml @@ -1,4 +1,3 @@ -# NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy # of this file and modify that instead. This file will be updated automatically by Residence # when a newer version is detected, and your changes will be overwritten. Once you # have a copy of this file, change the Language: option under the Residence config.yml @@ -6,77 +5,84 @@ Language: Invalid: - Player: '&cNeplatne jmeno hrace...' - Residence: '&cNeplatna Residence...' - Subzone: '&cNeplatne subzona...' - Direction: '&cNeplatny smer...' - Amount: '&cNeplatna castka...' - Cost: '&cNeplatna cena...' - Days: '&cNeplatny pocet dni...' - Material: '&cNeplatny material...' - Boolean: '&cNeplatna hodnota, musi byt &6true(t) &cnebo &6false(f)' - Area: '&cNeplatna oblast...' - Group: '&cNeplatna skupina...' - MessageType: '&cTyp zpravy musi byt enter nebo remove.' - Flag: '&cNeplatna vlajka...' - FlagState: '&cNeplatny status vlajky, musi byt &6true(t)&c, &6false(f)&c, nebo + Player: '&cNeplatné jméno hráÄe...' + World: '&cNeplatný svÄ›t...' + Residence: '&cNeplatná Residence...' + Subzone: '&cNeplatná subzóna...' + Direction: '&cNeplatný smÄ›r...' + Amount: '&cNeplatná Äástka...' + Cost: '&cNeplatná cena...' + Days: '&cNeplatný poÄet dní...' + Material: '&cNeplatný materiál...' + Boolean: '&cNeplatná hodnota, musí být &6true(t) &cnebo &6false(f)' + Area: '&cNeplatná oblast...' + Group: '&cNeplatná skupina...' + MessageType: '&cTyp zprávy musí být enter nebo remove.' + Flag: '&cNeplatná vlajka...' + FlagState: '&cNeplatný status vlajky, musí být &6true(t)&c, &6false(f)&c, nebo &6remove(r)' - List: '&eNeznamy seznam, musi byt &6blacklist &enebo &6ignorelist.' - Page: '&eNeplatna stranka...' - Help: '&cNeplatna stranka napovedy...' - NameCharacters: '&cJmeno obsahuje nepovolene symboly...' + List: '&eNeznámý seznam, musí být &6blacklist &enebo &6ignorelist.' + Page: '&eNeplatná stránka...' + Help: '&cNeplatná stránka nápovÄ›dy...' + NameCharacters: '&cJméno obsahuje nepovolene symboly...' Area: - Exists: '&cJmeno oblasti je jiz obsazene.' - Create: '&eOblast residence vytvorena, ID &6%1' - DiffWorld: '&cOblast je v jinem svete, nez je residence.' - Collision: '&cOblast koliduje s residenci &6%1' - SubzoneCollision: '&cOblast koliduje se subzonou &6%1' - NonExist: '&cTakova oblast neexistuje.' - InvalidName: '&cNeplatne jmeno oblasti...' - ToSmallTotal: '&cVybrana oblast je mensi, nez je povolene minimum (&6%1&c)' - ToSmallX: '&cTvuj vyber &6X (&6%1&c) je moc kratky. &eJe povoleno &6%2 &ea vice.' - ToSmallY: '&cTvuj vyber (&6%1&c) je moc nizky. &eJe povoleno &6%2 &ea vice.' - ToSmallZ: '&cTvuj vyber &6Z (&6%1&c) je moc uzky. &eJe povoleno &6%2 &ea vice.' - Rename: '&eOblast &6%1 &eprejmenovana na &6%2' - Remove: '&eOblast &6%1 odstranena...' - Name: '&eJmeno: &2%1' - RemoveLast: '&cNelze odstranit posledni oblast v residenci.' - NotWithinParent: '&cOblast neni ve sve rodicovske oblasti.' - Update: '&eOblast aktualizovana...' - MaxPhysical: '&eByl dosazen maximalni pocet oblasti v residenci.' - SizeLimit: '&eNemuzes vytvorit takhle velkou oblast.' - HighLimit: '&cNemuzes chranit tak vysoko, tvuj limit je &6%1' - LowLimit: '&cNemuzes chranit tak hluboko, tvuj limit je &6%1' + Exists: '&cJméno oblasti je již obsazené.' + Create: '&eOblast residence vytvoÅ™ena, ID &6%1' + DiffWorld: '&cOblast je v jiném svÄ›tÄ›, než je residence.' + Collision: '&cOblast koliduje s residencí &6%1 a nelze ji tak vytvoÅ™it!' + SubzoneCollision: '&cOblast koliduje se subzónou &6%1' + NonExist: '&cTaková oblast neexistuje.' + InvalidName: '&cNeplatné jméno oblasti...' + ToSmallX: '&cTvůj výbÄ›r &6X (&6%1&c) je moc krátký. &eJe povoleno &6%2 &ea více.' + ToSmallY: '&cTvůj výbÄ›r (&6%1&c) je moc nízký. &eJe povoleno &6%2 &ea více.' + ToSmallZ: '&cTvůj výbÄ›r &6Z (&6%1&c) je moc úzký. &eJe povoleno &6%2 &ea více.' + ToBigX: '&cTvůj výbÄ›r délky &6X (&6%1&c) je moc velký. &eJe povoleno &6%2 &ea + ménÄ›.' + ToBigY: '&cTvůj výbÄ›r výšky &6Y (&6%1&c) je moc velký. &eJe povoleno &6%2 &ea + ménÄ›.' + ToBigZ: '&cTvůj výbÄ›r délky &6Z (&6%1&c) je moc velký. &eJe povoleno &6%2 &ea + ménÄ›.' + Rename: '&eOblast &6%1 &epÅ™ejmenována na &6%2' + Remove: '&eOblast &6%1 odstranÄ›na...' + Name: '&eJméno: &2%1' + RemoveLast: '&cNelze odstranit poslední oblast v residenci.' + NotWithinParent: '&cOblast není ve své rodiÄovské oblasti.' + Update: '&eOblast aktualizována...' + MaxPhysical: '&eByl dosažen maximalní poÄet oblastí v residenci.' + SizeLimit: '&eNemůžeÅ¡ vytvoÅ™it takhle velkou oblast.' + HighLimit: '&cNemůžeÅ¡ chránit tak vysoko, tvůj limit je &6%1' + LowLimit: '&cNemůžeÅ¡ chránit tak hluboko, tvůj limit je &6%1' Select: - Points: '&eVyber 2 body pred pouzitim tohoto prikazu!' - Overlap: '&cVybrana oblast se prekryva s regionem &6%1' - WorldGuardOverlap: '&cVybrana oblast se prekryva s WorldGuard regionem &6%1!' - Success: '&eVyber uspesny!' - Fail: '&cNeplatny vyberovy prikaz...' - Bedrock: '&eVyber rozsiren na nejnizsi povolenou uroven.' - Sky: '&eVyber rozsiren na nejvyssi povolenou uroven.' - Area: '&eVybrana oblast &6%1 &eresidence &6%2' - Tool: '&e- Vyberovy nastroj: &6%1' - PrimaryPoint: '&eVybran &6primarni &evyberovy bod %1' - SecondaryPoint: '&eVybran &6sekundarni &evyberovy bod %1' - Primary: '&ePrimarni vyber: &6%1' - Secondary: '&eSekundarni vyber: &6%1' - TooHigh: '&cVyber je vyssi nez vyska mapa, omezuji.' - TooLow: '&cVyber je pod bedrock, omezuji.' - TotalSize: '&eVelikost vyberu: &6%1' - AutoEnabled: '&eAutomaticky vyberovy rezim &6ZAPNUT&e. Vypni pomoci &6/res select + Points: '&eVyber 2 body pÅ™ed použitím tohoto příkazu!' + Overlap: '&cVybraná oblast se pÅ™ekrývá s regionem &6%1' + WorldGuardOverlap: '&cVybraná oblast se pÅ™ekrývá s WorldGuard regionem &6%1!' + KingdomsOverlap: '&cVybraná oblast se pÅ™ekrývá s &6%1 &cKingdoms land regionem!' + Success: '&eVýbÄ›r úspěšný!' + Fail: '&cNeplatný výbÄ›rový příkaz...' + Bedrock: '&eVýbÄ›r rozšířen na nejnižší povolenou úroveň.' + Sky: '&eVýbÄ›r rozšířen na nejvyšší povolenou úroveň.' + Area: '&eVybraná oblast &6%1 &eresidence &6%2' + Tool: '&e- VýbÄ›rový nástroj: &6%1' + PrimaryPoint: '&eVybrán &6primární &evýbÄ›rový bod %1' + SecondaryPoint: '&eVybrán &6sekundární &evýbÄ›rový bod %1' + Primary: '&ePrimární výbÄ›r: &6%1' + Secondary: '&eSekundární výbÄ›r: &6%1' + TooHigh: '&cVýbÄ›r je vyšší než maximální výška stavÄ›ní, omezuji.' + TooLow: '&cVýbÄ›r je pod bedrockem, omezuji.' + TotalSize: '&eVelikost výbÄ›ru: &6%1' + AutoEnabled: '&eAutomatický výbÄ›rový režim &6ZAPNUT&e. Vypni pomocí &6/res select auto' - AutoDisabled: '&eAutomaticky vyberovy rezim &6VYPNUT&e. Opet zapni pomoci &6/res + AutoDisabled: '&eAutomatický výbÄ›rový režim &6VYPNUT&e. OpÄ›t zapni pomocí &6/res select auto' - Disabled: '&cNemas prava pro pouziti vyberovych prikazu' + Disabled: '&cNemáš práva pro použití výbÄ›rových příkazů' Sign: - Updated: '&6%1 &ecedule aktualizovany!' + Updated: '&6%1 &ecedule aktualizovány!' TopLine: '[market]' DateFormat: YY/MM/dd HH:mm - ForRentTopLine: '&8K pronajmu' + ForRentTopLine: '&8K pronájmu' ForRentPriceLine: '&8%1&f/&8%2&f/&8%3' ForRentResName: '&8%1' - ForRentBottomLine: '&9Dostupne' + ForRentBottomLine: '&9Dostupné' RentedAutorenewTrue: '&2%1' RentedAutorenewFalse: '&c%1' RentedTopLine: '%1' @@ -86,1141 +92,1587 @@ Language: ForSaleTopLine: '&8K prodeji' ForSalePriceLine: '&8%1' ForSaleResName: '&8%1' - ForSaleBottomLine: '&5Dostupne' - LookAt: '&cNekoukas se na ceduli' + ForSaleBottom: '&5%1m³' + LookAt: '&cNekoukáš se na ceduli' + ResName: '&8%1' + Owner: '&5%1' + Siege: + Started: '&7Obléhání zaÄalo!' + noSelf: '&cNelze obléhat vlastní residenci!' + isOffline: '&cNelze obléhat cizí rezidenci pokud je její vlastník offline!' + cooldown: '&cMoc brzy na nové obléhání této rezidence! PoÄkej %1' + info: + years: '&e%1 &6roků ' + oneYear: '&e%1 &6rok ' + day: '&e%1 &6dnů ' + oneDay: '&e%1 &6den ' + hour: '&e%1 &6hodin ' + oneHour: '&e%1 &6hodina ' + min: '&e%1 &6min ' + sec: '&e%1 &6sek ' + click: '&7Klik' + server: + land: Server_Land Flag: - Set: '&eVlajka (&6%1&e) &6%2 &enastavena na &6%3 &estate' - SetFailed: '&cNemas pristup k vlajce &6%1' - CheckTrue: '&eVlajka &6%1 &ese vztahuje na hrace &6%2 &epro residenci &6%3&e, + ownColor: '&4' + p1Color: '&2' + p2Color: '&a' + haveColor: '&2' + havePrefix: '' + denyColor: '&4' + denyPrefix: '' + Set: '&eVlajka (&6%1&e) &6%2 &enastavená na &6%3 &estate' + SetFailed: '&cNemáš přístup k vlajce &6%1' + CheckTrue: '&eVlajka &6%1 &ese vztahuje na hráÄe &6%2 &epro residenci &6%3&e, hodnota = &6%4' - CheckFalse: '&eVlajka &6%1 &ese nevztahuje na hrace &6%2 &ev residenci.' - Cleared: '&eVlajky vycisteny.' - Default: '&eNastaveny vychozi hodnoty vlajek.' - Deny: '&cZde nemas opravneni na &6%1.' - SetDeny: '&cVlastnik residence nema prava na &6%1' - ChangeDeny: '&cNemuzes zmenit vlajku &6%1 &cdokud je/jsou hrac(i) &6%2 &c uvnitr.' + CheckFalse: '&eVlajka &6%1 &ese nevztahuje na hráÄe &6%2 &ev residenci.' + Cleared: '&eVlajky vyÄiÅ¡tÄ›ny.' + RemovedAll: '&eVÅ¡echny vlajky odstranÄ›ny pro &6%1 &ev &6%2 &eresidenci.' + RemovedGroup: '&eVÅ¡echny vlajky odstranÄ›ny pro &6%1 &eskupinu v &6%2 &eresidenci.' + Default: '&eNastaveny výchozí hodnoty vlajek.' + Deny: '&cZde nemáš oprávnÄ›ní na &6%1.' + SetDeny: '&cVlastník residence nemá práva na &6%1' + ChangeDeny: '&cNemůžeÅ¡ zmÄ›nit vlajku &6%1 &cdokud jsou hráÄi &6%2 &c uvnitÅ™ residence.' + ChangedForOne: '&eZmÄ›nÄ›ny &6%1 &evlajky pro &6%2 &eresidenci' + ChangedFor: '&eZmÄ›nÄ›ny &6%1 &evlajky z &6%2 &eresidence checked' + reset: '&eReset vlajek pro &6%1 &eresidenci' + resetAll: '&eReset vlajek pro &6%1 &eresidence' Bank: - NoAccess: '&cNemas pristup k bance.' + NoAccess: '&cNemáš přístup k bance.' Name: ' &eBanka: &6%1' - NoMoney: '&cNedostatek penez v bance.' - Deposit: '&eVlozil jsi &6%1 &edo banku residence.' + NoMoney: '&cNedostatek penÄ›z v bance.' + Deposit: '&eVložil jsi &6%1 &edo banku residence.' Withdraw: '&eVybral jsi &6%1 &ez banku residence.' Subzone: - Rename: '&ePrejmenovana subzona &6%1 &ena &6%2' - Remove: '&eSubzona &6%1 &eodstranena.' - Create: '&eVytvorena subzona &6%1' - CreateFail: '&cNepovedlo se vytvorit subzonu &6%1' - Exists: '&cSubzona &6%1 &cjiz existuje.' - Collide: '&cSubzona se prekryva se subzonou &6%1' - MaxDepth: '&cDosahl jsi maximalni mozne hloubky subzony.' - SelectInside: '&eOba vyberove body musi byt uvnitr residence.' - CantCreate: '&cNemas prava na vytvoreni subzon v residenci.' - CantDelete: '&cNemas prava na mazani subzon v residenci.' - CantDeleteNotOwnerOfParent: '&cNejsi vlastnikem nadrizene residence, nelze smazat - tuto subzone.' - CantContract: '&cNemas opravneni na zmenseni subzony.' - CantExpand: '&cNemas opravneni na zvetseni subzony.' - DeleteConfirm: '&ePokud opravdu chces smazat subzonu &6%1&e, napis &6/res confirm - &epro potvrzeni.' - OwnerChange: '&eVlastnik subzony &6%1 &eowner zmenen na &6%2' + Rename: '&eSubzóna byla pÅ™ejmenována z &6%1 &ena &6%2' + Remove: '&eSubzóna &6%1 &eodstranÄ›na.' + Create: '&eVytvoÅ™ena subzóna &6%1' + CreateFail: '&cNepovedlo se vytvoÅ™it subzónu &6%1' + Exists: '&cSubzóna &6%1 &cjiž existuje.' + Collide: '&cSubzóna se pÅ™ekrývá se subzónou &6%1' + MaxAmount: '&cDosáhl jsi maximálního poÄtu subzón v této residenci.' + MaxDepth: '&cDosáhl jsi maximální možné hloubky subzóny.' + SelectInside: '&eOba výbÄ›rové body musí být uvnitÅ™ residence.' + CantCreate: '&cNemáš práva na vytvoÅ™ení subzón v residenci.' + CantDelete: '&cNemáš práva na mazání subzón v residenci.' + CantDeleteNotOwnerOfParent: '&cNejsi vlastníkem nadřízené residence, nelze smazat + tuto subzónu.' + CantContract: '&cNemáš oprávnÄ›ní na zmenÅ¡ení subzóny.' + CantExpand: '&cNemáš oprávnÄ›ní na zvÄ›tÅ¡ení subzóny.' + DeleteConfirm: '&ePokud opravdu chceÅ¡ smazat subzónu &6%1&e, napiÅ¡ &6/res confirm + &epro potvrzení.' + OwnerChange: '&eVlastník subzóny &6%1 &eowner zmÄ›nÄ›n na &6%2' Residence: + DontOwn: '&eNic k vidÄ›ní' + Hidden: ' &e(&6Skrytý&e)' Bought: '&eKoupil jsi residenci &6%1' Buy: '&6%1 &esi od tebe koupil residenci &6%2 &e.' - BuyTooBig: '&cTato residence oblasti vetsi, nez je tvoje povolene maximum.' - NotForSale: '&cResidence neni na prodej.' - ForSale: '&eResidence &6%1 &eje nyni k prodeji za &6%2' - StopSelling: '&cResidence uz neni na prodej.' - TooMany: '&cJiz vlastnis maximalni pocet residenci.' - MaxRent: '&cJiz pronajimas maximalni pocet residenci.' - AlreadyRent: '&cResidence je jiz pronajimana...' - NotForRent: '&cResidence neni k pronajmu...' - NotForRentOrSell: '&cResidence neni k pronajmu, ci k prodeji...' - NotRented: '&cResidence neni pronajata.' - Unrent: '&eResidenci &6%1 &eskoncil pronajem.' - RemoveRentable: '&eResidence &6%1 &ejiz neni k pronajmu.' - ForRentSuccess: '&eResidence &6%1 &eje pronajimana na &6%2 &ekazde &6%3 &edni.' - RentSuccess: '&ePronajmul sis residenci &6%1 &ena &6%2 &edni.' - AlreadyRented: '&eResidence &6%1 &eje pronajata hraci &6%2' - AlreadyExists: '&cResidence se jmenem &6%1 &cuz existuje.' - Create: '&eVytvoril jsi residenci &6%1&e!' - Rename: '&ePrejmenovana residence &6%1 &ena &6%2' - Remove: '&eResidence &6%1 &ebyla odstranena...' - MoveDeny: '&cNemas pravo k pohybu v residenci &6%1' - TeleportNoFlag: '&cNemas pravo teleportovat se na onu residenci.' - FlagDeny: '&cNemas pravo &6%1 &cv residenci &6%2' - GiveLimits: '&cNemuzes dat residenci cilovemu hraci, protoze ten jiz ma maximalni - pocet residenci.' - Give: '&eDal jsi residenci &6%1 &ehraci &6%2' - Recieve: '&eObrzel jsi residenci &6%1 &eod hrace &6%2' - List: ' &a%1%2 &e- &6Svet&e: &6%3' - TeleportNear: '&eTeleportovan vedle residence.' + BuyTooBig: '&cTato residence má vÄ›tší oblasti, než je tvoje povolené maximum.' + NotForSale: '&cResidence není na prodej.' + ForSale: '&eResidence &6%1 &eje nyní k prodeji za &6%2' + StopSelling: '&cResidence už není na prodej.' + TooMany: '&cJiž vlastníš maximální poÄet residencí.' + MaxRent: '&cJiž pronajímáš maximální poÄet residencí.' + AlreadyRent: '&cResidence je již pronajímána...' + NotForRent: '&cResidence není k pronájmu...' + NotForRentOrSell: '&cResidence není k pronájmu, Äi k prodeji...' + NotRented: '&cResidence není pronajata.' + Unrent: '&eResidenci &6%1 &eskonÄil pronájem.' + RemoveRentable: '&eResidence &6%1 &ejiž není k pronájmu.' + ForRentSuccess: '&eResidence &6%1 &eje pronajímána na &6%2 &ekaždé &6%3 &ední.' + RentSuccess: '&ePronajmul sis residenci &6%1 &ena &6%2 &ední.' + EndingRent: '&ePronájem konÄí pro &6%1 &e- &6%2' + AlreadyRented: '&eResidence &6%1 &eje pronajata hráÄi &6%2' + CantAutoPay: '&eResidenci nelze automaticky prodat, bude nastavena hodnota &6false' + AlreadyExists: '&cResidence se jménem &6%1 &cuž existuje.' + Create: '&eVytvoÅ™il jsi residenci &6%1&e!' + Rename: '&ePÅ™ejmenována residence z &6%1 &ena &6%2' + Remove: '&eResidence &6%1 &ebyla odstranÄ›na...' + CantRemove: '&cResidenci &6%1 &cnelze odstranit jako &6%2 &csubzóna je pronajímána + dále &6%3' + MoveDeny: '&cNemáš právo k pohybu v residenci &6%1' + TeleportNoFlag: '&cNemáš právo teleportovat se na onu residenci.' + FlagDeny: '&cNemáš právo &6%1 &cv residenci &6%2' + GiveLimits: '&cNemůžeÅ¡ dát residenci cílovému hráÄi, protože ten již maximální + poÄet residencí má.' + GiveConfirm: '&7klikni pro potvrzení &6%1 &7residenci pÅ™evést z &6%2 &7na &6%3' + Give: '&eDal jsi residenci &6%1 &ehráÄi &6%2' + Recieve: '&eObdržel jsi residenci &6%1 &eod hráÄe &6%2' + ResList: ' &a%1. &e%2 &e- &6%3 %4&6%5' + List: ' &a%1%2 &e- &6SvÄ›t&e: &6%3' + TeleportNear: '&eTeleportován vedle residence.' SetTeleportLocation: '&ePozice pro teleportaci nastavena...' - PermissionsApply: '&ePrava applikovana na residenci.' - NotOwner: '&cNejsi vlastnik residence.' - RemovePlayersResidences: '&eOdstraneny vsechny residence nalezici hraci &6%1' + PermissionsApply: '&ePráva applikována na residenci.' + NotOwner: '&cNejsi vlastník residence.' + RemovePlayersResidences: '&eOdstranÄ›ny vÅ¡echny residence náležící hráÄi &6%1' NotIn: '&cNejsi v residenci.' - PlayerNotIn: '&cHrac nestoji v oblasti tve residence.' + PlayerNotIn: '&cHrÃ¡Ä nestojí v oblasti tvé residence.' Kicked: '&eByl jsi vyhozen z residence' - In: '&eStojis v residenci &6%1' - OwnerChange: '&eVlastnik residence &6%1 &ezmenen na &6%2' - NonAdmin: '&cNejsi Residence Admin.' + CantKick: '&eTohoto hráÄe nelze vykopnout' + In: '&eStojíš v residenci &6%1' + OwnerChange: '&eVlastník residence &6%1 &ezmÄ›nÄ›n na &6%2' + NonAdmin: '&cNejsi ResidenÄní Admin.' Line: '&eResidence: &6%1 ' - RentedBy: '&ePronajmuta hracem: &6%1' - MessageChange: '&eZprava nastavena...' - CantDeleteResidence: '&cNemas prava na smazani residenci.' - CantExpandResidence: '&cNemas prava na rozsireni residence.' - CantContractResidence: '&cNemas pravo na zmenseni residence.' - NoResHere: '&cNeni tu zadna residence.' - OwnerNoPermission: '&cVlastnik nema na toto prava.' - ParentNoPermission: '&cNemas prava menit vlastnosti nadrizene zony.' - ChatDisabled: '&eChat v residenci zakazan...' - DeleteConfirm: '&ePokud chces opravdu smazat residenci &6%1&e, napis &6/res confirm - &epro potvrzeni.' + RentedBy: '&ePronajmuta hráÄem: &6%1' + MessageChange: '&eZpráva nastavena...' + CantDeleteResidence: '&cNemáš práva na smazání residence.' + CantExpandResidence: '&cNemáš práva na rozšíření residence.' + CantContractResidence: '&cNemáš právo na zmenÅ¡ení residence.' + NoResHere: '&cNení tu žádná residence.' + OwnerNoPermission: '&cVlastník nemá na toto práva.' + ParentNoPermission: '&cNemáš práva mÄ›nit vlastnosti nadřízené zóny.' + ChatDisabled: '&eChat v residenci zakázán...' + DeleteConfirm: '&ePokud chceÅ¡ opravdu smazat residenci &6%1&e, napiÅ¡ &6/res confirm + &epro potvrzení.' + ChangedMain: '&eHlavní residence zmÄ›nÄ›na na &6%1' + LwcRemoved: '&eRemoved &6%1 &eLwc protections in &6%2ms' + CanBeRented: '&6%1&e lze pronajmout za &6%2 &ena &6%3 &edny. &6/res market rent' + CanBeBought: '&6%1&e lze koupit za &6%2&e. &6/res market buy' + IsForRent: '&6(K pronájmu)' + IsForSale: '&6(K prodeji)' + IsRented: '&6(Pronajaté)' Rent: - Disabled: '&cPronajimani je zakazano...' - DisableRenew: '&eNajem residence &6%1 &ese jiz nebude automaticky prodluzovat.' - EnableRenew: '&eNajem residence &6%1 &ese nyni bude automaticky prodluzovat.' - Expire: '&eNajem vyprsi: &6%1' + Disabled: '&cPronajímání je zakázáno...' + DisableRenew: '&eNájem residence &6%1 &ese již nebude automaticky prodlužovat.' + EnableRenew: '&eNájem residence &6%1 &ese nyní bude automaticky prodlužovat.' + NotByYou: '&cResidence není pronajímána tebou.' + isForRent: '&2Residence je k dispozici k pronájmu.' + MaxRentDays: '&cNemůžeÅ¡ pronajímat více jak &6%1 &cdní najednou.' + OneTime: '&cNelze prodloužit Äas pronájmu této residence.' + Extended: '&ePronájem prodloužen o dalších &6%1 &ední pro &6%2 &eresidenci' + Expire: '&eNájem vyprší: &6%1' + AutoPayTurnedOn: '&eAutoprodej je &2ZAPNUTÃ' + AutoPayTurnedOff: '&eAutoprodej je &cVYPNUTÃ' ModifyDeny: '&cNelze modifikovat pronajatou residenci.' - Days: '&eDny pronajmu: &6%1' - Rented: ' &6(Pronajate)' + Days: '&eDny pronájmu: &6%1' + Rented: ' &6(Pronajaté)' + RentList: ' &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7' + EvictConfirm: '&eNapiÅ¡ &6/res market confirm &epro vystÄ›hování nájemce z residence + &6%1' + UnrentConfirm: '&eNapiÅ¡ &6/res market confirm &epro odejmutí pronájmu residence + &6%1' + ReleaseConfirm: '&eNapiÅ¡ &6/res market confirm &epro odejmutí residence &6%1 &ez + marketu' + command: + addedAllow: '&ePÅ™idán nový povolený příkaz pro &6%1 &eresidenci' + removedAllow: '&eOdebrán nový povolený příkaz pro &6%1 &eresidenci' + addedBlock: '&ePÅ™idán nový blokovaný příkaz pro &6%1 &eresidenci' + removedBlock: '&eOdebrán nový blokovaný příkaz pro &6%1 &eresidenci' + Blocked: '&eBlokované příkazy: &6%1' + Allowed: '&ePovolené příkazy: &6%1' Rentable: - Land: '&ePronajimatelna puda: &6' - AutoRenew: '&eAutomaticke prodluzovani najmu: &6%1' - DisableRenew: '&6%1 &enebude po vyprseni pronajimatelna.' - EnableRenew: '&6%1 &ebude automaticky prodlouzen status pronajimatelnosti.' + Land: '&ePronajímatelný pozemek: &6' + AllowRenewing: '&eLze obnovit: &6%1' + StayInMarket: '&ePronajímatelné zůstane na marketu: &6%1' + AllowAutoPay: '&ePronajímatelné povoluje auto platbu: &6%1' + DisableRenew: '&6%1 &enebude po vyprÅ¡ení pronajímatelná.' + EnableRenew: '&6%1 &ebude automaticky prodloužen status pronajímatelnosti.' Economy: - LandForSale: '&eZeme na prodej:' - NotEnoughMoney: '&cNemas dostatek penez.' - MoneyCharged: '&eOdebrano &6%1 &ez tveho uctu &6%2.' - MoneyAdded: '&ePridano &6%1 &edo tveho uctu &6%2.' - MoneyCredit: '&ePripsano &6%1 &etvemu uctu &6%2.' - RentReleaseInvalid: '&eResidence &6%1 &eneni pronajata, nebo neni k pronajmu.' - RentSellFail: '&cNelze prodat residenci, pokud je k pronajmu.' + LandForSale: '&ePozemek na prodej:' + NotEnoughMoney: '&cNemáš dostatek penÄ›z.' + MoneyCharged: '&eOdebráno &6%1 &ez tvého úÄtu &6%2.' + MoneyAdded: '&ePÅ™idáno &6%1 &edo tvého úÄtu &6%2.' + MoneyCredit: '&ePÅ™ipsáno &6%1 &etvému úÄtu &6%2.' + RentReleaseInvalid: '&eResidence &6%1 &enení pronajata, nebo není k pronájmu.' + RentSellFail: '&cNelze prodat residenci, pokud je k pronájmu.' + SubzoneRentSellFail: '&cNelze prodat rezidenci pokud je její subzóna dána k pronájmu.' + ParentRentSellFail: '&cNelze prodat rezidenci pokud je její rodiÄovská zóna dána + k pronájmu.' + SubzoneSellFail: '&cNelze prodat subzónu.' SellRentFail: '&cNelze pronajmout residenci, pokud je na prodej.' - OwnerBuyFail: '&cNelze si koupit svoji vlastni plochu!' - OwnerRentFail: '&cNelze si pronajmout svoji vlastni plochu!' - AlreadySellFail: '&eResidence uz je na prodej!' - LeaseRenew: '&ePronajem validni do &6%1' - LeaseRenewMax: '&ePronajem prodlouzen na maximalni delku' - LeaseNotExpire: '&eZadny takovy pronajem neexistuje, nebo je na neomezene dlouhou + ParentSellRentFail: '&cNelze pronajmout residenci, pokud je její rodiÄovská zóna + dána k prodeji.' + OwnerBuyFail: '&cNelze si koupit svoji vlastní plochu!' + OwnerRentFail: '&cNelze si pronajmout svoji vlastní plochu!' + AlreadySellFail: '&eResidence už je na prodej!' + LeaseRenew: '&ePronájem validní do &6%1' + LeaseRenewMax: '&ePronájem prodloužen na maximální délku' + LeaseNotExpire: '&eŽádný takový pronájem neexistuje, nebo je na neomezenÄ› dlouhou dobu.' - LeaseRenewalCost: '&eCena k pronajmu oblasti &6%1 &eje &6%2' - LeaseInfinite: '&eDoba pronajmu nastavena na nekonecno...' - MarketDisabled: '&cEkonomie je zakazana!' - SellAmount: '&eCastka k prodeji: &2%1' - LeaseExpire: '&ePronajem propada: &2%1' + LeaseRenewalCost: '&eCena k pronájmu oblasti &6%1 &eje &6%2' + LeaseInfinite: '&eDoba pronájmu nastavena na nekoneÄno...' + MarketDisabled: '&cEkonomie je zakázána!' + SellAmount: '&eČástka k prodeji: &2%1' + SellList: ' &6%1&e. &6%2 &e(&6%3&e) - &6%4' + LeaseExpire: '&ePronájem propadá: &2%1' + LeaseList: '&6%1. &e%2 &2%3 &e%4' Expanding: - North: '&eRozsiruji severne o &6%1 &eblocku' - West: '&eRozsiruji zapadne o &6%1 &eblocku' - South: '&eRozsiruji jizne o &6%1 &eblocku' - East: '&eRozsiruji vychodne o &6%1 &eblocku' - Up: '&eRozsiruji nahoru o &6%1 &eblocku' - Down: '&eRozsiruji dolu o &6%1 &eblocku' + North: '&eRozÅ¡iÅ™uji severnÄ› o &6%1 &ebloků' + West: '&eRozÅ¡iÅ™uji západnÄ› o &6%1 &ebloků' + South: '&eRozÅ¡iÅ™uji jižnÄ› o &6%1 &ebloků' + East: '&eRozÅ¡iÅ™uji východnÄ› o &6%1 &ebloků' + Up: '&eRozÅ¡iÅ™uji nahoru o &6%1 &ebloků' + Down: '&eRozÅ¡iÅ™uji dolů o &6%1 &ebloků' Contracting: - North: '&eZmensuji severne o &6%1 &eblocku' - West: '&eZmensuji zapadne o &6%1 &eblocku' - South: '&eZmensuji jizne o &6%1 &eblocku' - East: '&eZmensuji vychodne o &6%1 &eblocku' - Up: '&eZmensuji nahoru o &6%1 &eblocku' - Down: '&eZmensuji dolu o &6%1 &eblocku' + North: '&eZmenÅ¡uji severnÄ› o &6%1 &ebloků' + West: '&eZmenÅ¡uji západnÄ› o &6%1 &ebloků' + South: '&eZmenÅ¡uji jižnÄ› o &6%1 &ebloků' + East: '&eZmenÅ¡uji východnÄ› o &6%1 &ebloků' + Up: '&eZmenÅ¡uji nahoru o &6%1 &ebloků' + Down: '&eZmenÅ¡uji dolů o &6%1 &ebloků' Shifting: - North: '&ePosouvam severne o &6%1 &eblocku' - West: '&ePosouvam zapadne o &6%1 &eblocku' - South: '&ePosouvam jizne o &6%1 &eblocku' - East: '&ePosouvam vychodne o &6%1 &eblocku' - Up: '&ePosouvam nahoru o &6%1 &eblocku' - Down: '&ePosouvam dolu o &6%1 &eblocku' + North: '&ePosouvám severnÄ› o &6%1 &ebloků' + West: '&ePosouvám západnÄ› o &6%1 &ebloků' + South: '&ePosouvám jižnÄ› o &6%1 &ebloků' + East: '&ePosouvám východnÄ› o &6%1 &ebloků' + Up: '&ePosouvám nahoru o &6%1 &ebloků' + Down: '&ePosouvám dolů o &6%1 &ebloků' Limits: - PGroup: '&7- &eSkupina opravneni:&3 %1' + PGroup: '&7- &eSkupina oprávnÄ›ní:&3 %1' RGroup: '&7- &eSkupina residence:&3 %1' - Admin: '&7- &eResidence Admin:&3 %1' - CanCreate: '&7- &eMuze vytvaret residence:&3 %1' - MaxRes: '&7- &eMaximalni pocet residenci:&3 %1' - MaxEW: '&7- &eMaximalni zapadni/vychodni velikost:&3 %1' - MaxNS: '&7- &eMaximalni severni/jizni velikost:&3 %1' - MaxUD: '&7- &eMaximalni vyska/hloubka:&3 %1' - MinMax: '&7- &eMinimalni/Maximalni vyska:&3 %1 to %2' - MaxSub: '&7- &eMaximalni hloubka subzon:&3 %1' - MaxRents: '&7- &eMaximalni pocet pronajmu:&3 %1' - EnterLeave: '&7- &eMuze nastavit uvitaci zpravu:&3 %1' - NumberOwn: '&7- &ePocet residenci, ktere vlastnis:&3 %1' - Cost: '&7- &eCena residence za block:&3 %1' - Sell: '&7- &ePenize za prodani residence za block:&3 %1' - Flag: '&7- &ePrava na vlajky:&3 %1' - MaxDays: '&7- &eMaximalni delka pronajmu (dny):&3 %1' - LeaseTime: '&7- &eDelka najmu dana pri prodlouzeni:&3 %1' - RenewCost: '&7- &eCena znovuobnoveni najmu za block:&3 %1' + Admin: '&7- &eResidenÄní Admin:&3 %1' + CanCreate: '&7- &eMůže vytvářet residence:&3 %1' + MaxRes: '&7- &eMaximální poÄet residencí:&3 %1' + MaxEW: '&7- &eMaximální zapadní/vychodní velikost:&3 %1' + MaxNS: '&7- &eMaximální severní/jižní velikost:&3 %1' + MaxUD: '&7- &eMaximální výška/hloubka:&3 %1' + MinMax: '&7- &eMinimalní/Maximální výška:&3 %1 to %2' + MaxSubzones: '&7- &eMaximální poÄet subzón:&3 %1' + MaxSubDepth: '&7- &eMaximální poÄet podsubzón:&3 %1' + MaxRents: '&7- &eMaximální poÄet pronájmů:&3 %1' + MaxRentDays: ' &eMaximální poÄet dnů pronájmu:&3 %1' + EnterLeave: '&7- &eMůže nastavit uvítací zprávu:&3 %1' + NumberOwn: '&7- &ePoÄet residencí, které vlastníš:&3 %1' + Cost: '&7- &eCena residence za blok:&3 %1' + Sell: '&7- &ePeníze za prodání residence za blok:&3 %1' + Flag: '&7- &ePráva na vlajky:&3 %1' + MaxDays: '&7- &eMaximální délka pronájmu (dny):&3 %1' + LeaseTime: '&7- &eDélka nájmu daná pÅ™i prodloužení:&3 %1' + RenewCost: '&7- &eCena znovuobnovení nájmu za blok:&3 %1' Gui: Set: Title: '&6%1 vlajky' Pset: Title: '&6%1 %2 vlajky' Actions: - - '&2Levym klikem povolis' - - '&cPravym klikem zakazes' - - '&eShift + levym klikem odstranis' + - '&2Levým klikem povolíš' + - '&cPravým klikem zakážeÅ¡' + - '&eShift + levým klikem odstraníš' InformationPage: TopLine: '&e---< &a %1 &e >---' Page: '&e-----< &6%1 &e>-----' NextPage: '&e-----< &6%1 &e>-----' NoNextPage: '&e-----------------------' + GeneralList: '&2 %1 &6- &e%2' + FlagsList: '&2 %1 &6- &e%2' + SmallSeparator: '&6------' Chat: - ChatChannelChange: '&eZmenen chat channel residence na &6%1!' + ChatChannelChange: '&eZmÄ›nÄ›n chat channel residence na &6%1!' ChatChannelLeave: '&eOpustil chat v residenci' - JoinFirst: '&4Nejdrive se pripoj do residencniho chatu...' - InvalidChannel: '&4Neplatny channel...' - InvalidColor: '&4Nespravny kod barvy' - NotInChannel: '&4Hrac neni v channelu' + JoinFirst: '&4Nejdříve se pÅ™ipoj do residenÄního chatu...' + InvalidChannel: '&4Neplatný channel...' + InvalidColor: '&4Nesprávný kód barvy' + NotInChannel: '&4HrÃ¡Ä není v channelu' Kicked: '&6%1 &ebyl vyhozen z channelu &6%2' - InvalidPrefixLength: '&4Prefix je moc dlouhy. Povolena delka: %1' - ChangedColor: '&eBarva chatu v residenci zmenena na %1' - ChangedPrefix: '&ePrefix chatu v residenci zmenen na %1' + InvalidPrefixLength: '&4Prefix je moc dlouhý. Povolená délka: %1' + ChangedColor: '&eBarva chatu v residenci zmÄ›nÄ›na na %1' + ChangedPrefix: '&ePrefix chatu v residenci zmÄ›nÄ›n na %1' Shop: - ListTopLine: '&6%1 &eseznam obchodu - Strana &6%2&e/&6%3 %4' + ListTopLine: '&6%1 &eseznam obchodů - Strana &6%2&e/&6%3 %4' List: ' &e%1. &6%2 &e(&6%3&e) %4' ListVoted: '&e%1 (&6%2&e)' - ListLiked: '&ePocet likes: &0%1' + ListLiked: '&ePoÄet lajků: &0%1' VotesTopLine: '&6%1 &e%2 residence vote list &6- &eStrana &6%3&e/&6%4 %5' VotesList: ' &e%1. &6%2 &e%3 &7%4' - NoDesc: '&6Zadny popis' + NoDesc: '&6Žádný popis' Desc: |- &6Popis: %1 - DescChange: '&6Popis zmenen na: %1' - NewBoard: '&6Uspesne pridana nova obchodni tabule' - DeleteBoard: '&6Klikni pravym klickem na ceduli pro smazani tabule' - DeletedBoard: '&6Tabule smazana' - IncorrectBoard: '&cToto neni cedulka, zkuste zadat prikaz znovu a kliknete na cedulku' + DescChange: '&6Popis zmÄ›nÄ›n na: %1' + NewBoard: '&6UspěšnÄ› pÅ™idána nová obchodní cedule' + BoardExist: '&cObchodní cedule již v této lokaci existuje' + DeleteBoard: '&6Klikni pravým tlaÄítkem na ceduli pro její smazání' + DeletedBoard: '&6Cedule smazána' + IncorrectBoard: '&cToto není cedulka, zkuste zadat příkaz znovu a kliknÄ›te na + cedulku' InvalidSelection: '&cLeft click with selection tool top left sign and then right click bottom right' - VoteChanged: '&6Vote changed from &e%1 &6to &e%2 &6for &e%3 &6residence' + ToBigSelection: '&cTvůj výbÄ›r je velký, maximální povolená velikost je 16 bloků' + ToDeapSelection: '&cYour selection is too deap, max allowed is 16x16x1 blocks' + VoteChanged: '&6Hlasování zmÄ›nÄ›no od &e%1 &6to &e%2 &6pro &e%3 &6residenci' Voted: '&6Hlasoval jsi a dal &e%1 &6hlasu do residence &e%2.' - Liked: '&6Libi se ti residence &e%1.' - AlreadyLiked: '&6Uz se ti libi tato residence &e%1' - NoVotes: '&cThere is no registered votes for this residence' - CantVote: '&cResidence nema vlajku shop nastavenou na true' - VotedRange: '&6Vote range is from &e%1 &6to &e%2' + Liked: '&6Líbí se ti residence &e%1.' + AlreadyLiked: '&6Už se ti líbí tato residence &e%1' + NoVotes: '&cTato residence nemá žádné lajky' + CantVote: '&cResidence nemá vlajku shop nastavenou na true' + VotedRange: '&6Rozsah hlasování je od &e%1 &6do &e%2' SignLines: '1': '&e--== &8%1 &e==--' '2': '&9%1' '3': '&4%1' '4': '&8%1&e (&8%2&e)' - Likes4: '&9Libi se: &8%2' + Likes4: '&9Líbí se: &8%2' RandomTeleport: - TpLimit: '&eNemuzes se teleportovat tak rychle, prosim pockej &6%1 &esekund' - TeleportSuccess: '&eTeleportovano na souradnice X:&6%1&e, Y:&6%2&e, Z:&6%3' - IncorrectLocation: '&6Nepovedlo se teleportovat do lokace &e%1, pockej &6sekund + TpLimit: '&eNemůžeÅ¡ se teleportovat tak rychle, prosím poÄkej &6%1 &esekund' + TeleportSuccess: '&eTeleportováno na souÅ™adnice X:&6%1&e, Y:&6%2&e, Z:&6%3' + IncorrectLocation: '&6Nepovedlo se teleportovat do lokace &e%1, poÄkej &6sekund a zkus to znovu.' - TeleportStarted: '&eTeleportace zacala, nehybej se dalsich &6%4 &esekund.' + Disabled: '&cNáhodná teleportace je v tomto svÄ›tÄ› vypnuta' + TeleportStarted: '&eTeleportace zaÄala, nehýbej se dalších &6%4 &esekund.' + WorldList: '&eMožé svÄ›ty: &6%1' + Permissions: + variableColor: '&f' + permissionColor: '&6' + cmdPermissionColor: '&2' General: - DisabledWorld: '&cResidence plugin je v tomto svete zakazan' - UseNumbers: '&cProsim pouzij cisla...' - CantPlaceLava: '&cNemuzes polozit lavu mimo residenci a vys, nez &6%1 &cblocku + DisabledWorld: '&cResidence plugin je v tomto svÄ›tÄ› zakázán' + UseNumbers: '&cProsím použij Äísla...' + # Replace all text with '' to disable this message + CantPlaceLava: '&cNemůžeÅ¡ položit lávu mimo residenci a výš, než &6%1 &cbloků vysoko.' - CantPlaceWater: '&cNemuzes polozit vodu mimo residenci a vys, nez &6%1 &cblocku + # Replace all text with '' to disable this message + CantPlaceWater: '&cNemůžeÅ¡ položit vodu mimo residenci a výš, než &6%1 &cbloků vysoko' - NoPermission: '&cNa toto nemas opravneni.' - DefaultUsage: '&ePro vice informaci napis &6/%1 ?' - MaterialGet: '&eNazev materialu pro ID &6%1 &eje &6%2' - MarketList: '&e---- &6Seznam obchodu &e----' + CantPlaceChest: '&cNemůžeÅ¡ položit truhlu na toto místo' + NoPermission: '&cNa toto nemáš oprávnÄ›ní.' + info: + NoPlayerPermission: '&c[playerName] nemá oprávnÄ›ní [permission]' + NoCmdPermission: '&cNemáš oprávnÄ›ní pro tento příkaz.' + DefaultUsage: '&ePro více informací napiÅ¡ &6/%1 ?' + MaterialGet: '&eNázev materiálu pro ID &6%1 &eje &6%2' + MarketList: '&e---- &6Seznam obchodů &e----' Separator: '&e----------------------------------------------------' - AdminOnly: '&cJenom admini mohou napsat tento prikaz.' - InfoTool: '&e- Info nastroj: &6%1' - ListMaterialAdd: '&6%1 &epridan do residence &6%2' - ListMaterialRemove: '&6%1 &eodstranen z residence &6%2' - ItemBlacklisted: '&cToto zde nemuzes pouzit.' + AdminOnly: '&cJenom admini mohou napsat tento příkaz.' + InfoTool: '&e- Info nástroj: &6%1' + ListMaterialAdd: '&6%1 &epÅ™idán do residence &6%2' + ListMaterialRemove: '&6%1 &eodstranÄ›n z residence &6%2' + ItemBlacklisted: '&cToto zde nemůžeÅ¡ použít.' WorldPVPDisabled: '&cPVP je vypnuto.' - NoPVPZone: '&cTady neni PVP zona.' - InvalidHelp: '&cNeplatna stranka help.' - TeleportDeny: '&cNemuzes se teleportovat.' - TeleportSuccess: '&eTeleportovan!' - TeleportConfirm: '&cTento teleport neni bezpecny, spadnes &6%1 &cblocku. Napis - &6/res tpconfirm &cpokud si ses jisty.' - TeleportStarted: '&eTeleportace na &6%1 &ezacina, nehybej se dalsich &6%2 &esekund.' - TeleportCanceled: '&eTeleportace zrusena!' - NoTeleportConfirm: '&eZadne teleportacni zadosti ke schvaleni!' - HelpPageHeader: '&eNapoveda - &6%1 &e- Strana <&6%2 &ez &6%3&e>' - ListExists: '&cSeznam jiz existuje...' - ListRemoved: '&eSeznam smazan...' - ListCreate: '&eVytvoren seznam &6%1' - PhysicalAreas: '&eFyzicke oblasti' - CurrentArea: '&eSoucasna oblast: &6%1' - TotalSize: '&eCelkova velikost: &6%1' - TotalWorth: '&eCelkova hodnota residenci: &6%1 &e(&6%2&e)' - NotOnline: '&eCilovy hrac musi byt online.' - NextPage: '&eDalsi strana' - NextInfoPage: '&2| &eDalsi strana &2>>>' - PrevInfoPage: '&2<<< &ePredchozi strana &2|' - GenericPage: '&eStrana &6%1&e/&6%2' + NoPVPZone: '&cTady není PVP zóna.' + NoFriendlyFire: '&cNo friendly fire' + InvalidHelp: '&cNeplatná stránka help.' + TeleportDeny: '&cNemůžeÅ¡ se teleportovat.' + TeleportSuccess: '&eTeleportován!' + TeleportConfirm: '&cTento teleport není bezpeÄný, spadneÅ¡ &6%1 &cbloků. NapiÅ¡ + &6/res tpconfirm &cpokud si seÅ¡ jistý.' + TeleportStarted: '&eTeleportace na &6%1 &ezaÄíná, nehýbej se dalších &6%2 &esekund.' + TeleportTitle: '&eTeleporting!' + TeleportTitleTime: '&6%1' + TeleportCanceled: '&eTeleportace zruÅ¡ena!' + NoTeleportConfirm: '&eŽádné teleportaÄní žádosti ke schválení!' + HelpPageHeader: '&eNápovÄ›da - &6%1 &e- Strana <&6%2 &ez &6%3&e>' + ListExists: '&cSeznam již existuje...' + ListRemoved: '&eSeznam smazán...' + ListCreate: '&eVytvoÅ™en seznam &6%1' + PhysicalAreas: '&eFyzické oblasti' + CurrentArea: '&eSouÄasná oblast: &6%1' + TotalResSize: '&eCelková velikost: &6%1m³ (%2m²)' + TotalWorth: '&eCelková hodnota residence: Nákupní cena &6%1&e, Prodejní cena (&6%2&e)' + TotalSubzones: '&eSubzóny v residenci: &6%1 &e(&6%2&e)' + NotOnline: '&eCílový hrÃ¡Ä musí být online.' + NextInfoPage: '&2| &eDalší strana &2>>>' + PrevInfoPage: '&2<<< &ePÅ™edchozí strana &2|' + GenericPages: '&eStrana &6%1 &ez &6%2 &e(&6%3&e)' WorldEditNotFound: '&cWorldEdit nebyl nalezen.' CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' - AdminToggleTurnOn: '&eAutomaticky resadmin &6ZAPNUTO' - AdminToggleTurnOff: '&eAutomaticky resadmin &6VYPNUTO' - NoSpawn: '&eNemas pravo k &6pohybu &ena tvem spawnu. Presunuji...' - CompassTargetReset: '&eTvuj kompas byl resetovan' - CompassTargetSet: '&eTvuj kompas nyni miri na &6%1' + AdminToggleTurnOn: '&eAutomatický resadmin &6ZAPNUTO' + AdminToggleTurnOff: '&eAutomatický resadmin &6VYPNUTO' + NoSpawn: '&eNemáš právo k &6pohybu &ena tvém spawnu. PÅ™esunuji...' + CompassTargetReset: '&eTvůj kompas byl resetován' + CompassTargetSet: '&eTvůj kompas nyní míří na &6%1' Ignorelist: '&2Ignorelist:&6' Blacklist: '&cBlacklist:&6' - LandCost: '&eCena zeme: &6%1' - 'True': '&2True' - 'False': '&cFalse' - Land: '&eZeme: &6%1' - Cost: '&eCena: &6%1 &ena &6%2 &edni' + LandCost: '&eCena zemÄ›: &6%1' + 'True': '&2Povoleno' + 'False': '&cZakázáno' + Removed: '&6OdstranÄ›no' + FlagState: '&eStatus vlajky: %1' + Land: '&eZemÄ›: &6%1' + Cost: '&eCena: &6%1 &ena &6%2 &ední' Status: '&eStatus: %1' - Available: '&2Dostupne' + Available: '&2Dostupné' Size: ' &eVelikost: &6%1' - Flags: '&eVlajky: &6%1' - YourFlags: '&eTvoje vlajky: &6%1' - GroupFlags: '&eSkupinove vlajky: &6%1' - OthersFlags: '&eDalsi vlajky: &6%1' - Moved: '&ePresunuto...' - Name: '&eJmeno: &6%1' + ResidenceFlags: '&eVlajky residence: &6%1' + PlayersFlags: '&eVlajky hráÄů: &6%1' + GroupFlags: '&eSkupinové vlajky: &6%1' + OthersFlags: '&eDalší vlajky: &6%1' + Moved: '&ePÅ™esunuto...' + Name: '&eJméno: &6%1' Lists: '&eSeznamy: &6' Residences: '&eResidence&6' - Owner: '&eVlastnik: &6%1' - World: '&eSvet: &6%1' - Subzones: '&eSubzony' + CreatedOn: '&eVytvoÅ™eno dne: &6%1' + Owner: '&eVlastník: &6%1' + World: '&eSvÄ›t: &6%1' + Subzones: '&eSubzóny' # The below lines represent various messages residence sends to the players. # Note that some messages have variables such as %1 that are inserted at runtime. - NewPlayerInfo: '&ePokud si chces ochranit dum, prosim pouzij tycku k - diagonalnimu oznaceni oblastni a napis &2/res create VasNazevResidence' + NewPlayerInfo: '&ePokud si chceÅ¡ ochránit dům, prosím použij tyÄku k diagonálnímu + oznaÄení oblastní a napiÅ¡ &2/res create VášNázevResidence' CommandHelp: - Description: Napoveda k Residenci + Description: NápovÄ›da k Residenci SubCommands: res: - Description: Hlavni prikaz residence + Description: Hlavní příkaz residence Info: - - '&2Pouzij &6/res [prikaz] ? &2pro zobrazeni dalsi napovedy.' + - '&2Použij &6/res [příkaz] ? &2pro zobrazení další nápovÄ›dy.' SubCommands: + auto: + Description: VytvoÅ™it maximální poÄet residencí kolem tebe + Info: + - '&ePoužití: &6/res auto (jméno residence) (rádius)' select: - Description: Vyberove prikazy + Description: VýbÄ›rové příkazy Info: - - Timto prikazev vybiras oblasti pro pouziti s residencemi. - - /res select [x] [y] [z] - vybere radius blocku okolo tebe. + - Tímto příkazem vybíráš oblasti pro použití s residencemi. + - /res select [x] [y] [z] - vybere rádius bloků okolo tebe. SubCommands: coords: - Description: Zobrazi vybrane souradnice + Description: Zobrazit vybrané souÅ™adnice Info: - - '&ePouziti: &6/res select coords' + - '&ePoužití: &6/res select coords' size: - Description: Zobrazi vybranou velikost + Description: Zobrazit vybranou velikost Info: - - '&ePouziti: &6/res select size' + - '&ePoužití: &6/res select size' auto: - Description: Zapne automaticky vyberovy rezim + Description: Zapne automatický výbÄ›rový režim Info: - - '&ePouziti: &6/res select auto [playername]' - Args: '[playername]' + - '&ePoužití: &6/res select auto [jméno hráÄe]' cost: - Description: Zobrazi cenu vyberu + Description: Zobrazit cenu výbÄ›ru Info: - - '&ePouziti: &6/res select cost' + - '&ePoužití: &6/res select cost' vert: - Description: Rozsirit vyber vertikalne + Description: Rozšířit výbÄ›r vertikálnÄ› Info: - - '&ePouziti: &6/res select vert' - - Rozsiri vyber od spoda az nahoru + - '&ePoužití: &6/res select vert' + - Rozšířit výbÄ›r od spoda až nahoru sky: - Description: Rozsirit vyber nahoru + Description: Rozšířit výbÄ›r nahoru Info: - - '&ePouziti: &6/res select sky' - - Rozsiri vyber co nejvys + - '&ePoužití: &6/res select sky' + - Rozšířit výbÄ›r co nejvýš bedrock: - Description: Rozsirit vyber nahoru + Description: Rozšířit výbÄ›r nahoru Info: - - '&ePouziti: &6/res select bedrock' - - Rozsiri vyber co nejniz + - '&ePoužití: &6/res select bedrock' + - Rozšířit výbÄ›r co nejníž expand: - Description: Rozsirit vyber urcitym smerem + Description: Rozšířit výbÄ›r urÄitým smÄ›rem Info: - - '&ePouziti: &6/res select expand ' - - Rozsiri vyber o blocku ve smeru tveho pohledu. + - '&ePoužití: &6/res select expand ' + - Rozšířit výbÄ›r o bloků ve smÄ›ru tvého pohledu. shift: - Description: Posunout vyber po smeru. + Description: Posunout výbÄ›r po smÄ›ru. Info: - - '&ePouziti: &6/res select shift ' - - Posune tvuj vyber o blocku ve smeru tveho pohledu. + - '&ePoužití: &6/res select shift ' + - Posune tvůj výbÄ›r o bloků ve smÄ›ru tvého pohledu. chunk: - Description: Vybrat chunk, ve kterem prave stojis. + Description: Vybere chunk, ve kterém právÄ› stojíš. Info: - - '&ePouziti: &6/res select chunk' - - Vybere chunk, ve kterem prave stojis. + - '&ePoužití: &6/res select chunk' + - Vybere chunk, ve kterém právÄ› stojíš. residence: - Description: Vybrat existujici oblast v residenci. + Description: Vybere existující oblast v residenci. Info: - - '&ePouziti: &6/res select residence ' - - Vybere existuji oblast v residenci. - Args: '[residence]' + - '&ePoužití: &6/res select residence ' + - Vybere existující oblast v residenci. worldedit: - Description: Nastavit vyber pomoci WorldEditu. + Description: Nastavit výbÄ›r pomocí WorldEditu. Info: - - '&ePouziti: &6/res select worldedit' - - Nastavi oblast z WorldEdit nastroje. - create: - Description: Vytvorit residenci. + - '&ePoužití: &6/res select worldedit' + - Nastaví oblast z WorldEdit nástroje. + padd: + Description: PÅ™idat hráÄe do residence. Info: - - '&ePouziti: &6/res create ' - remove: - Description: Odstranit residenci. + - '&ePoužití: &6/res padd [jméno hráÄe]' + - PÅ™idá hráÄe a dá mu základní práva/vlajky v residenci + signconvert: + Description: PÅ™evést znaÄku z ResidenceSign pluginu Info: - - '&ePouziti: &6/res remove ' - Args: '[residence]' - padd: - Description: Pridat hrace do residence. + - '&ePoužití: &6/res signconvert' + - Pokusí se pÅ™evést uložená data znaÄek z externího pluginu + listallhidden: + Description: Zobrazit vÅ¡echny skryté residence Info: - - '&ePouziti: &6/res padd [player]' - - Adds essential flags for player - Args: '[residence] [playername]' - pdel: - Description: Odebrat hrace z residence. + - '&ePoužití: &6/res listhidden ' + - Zobrazit vÅ¡echny skryté residence + bank: + Description: Manipulovat s penÄ›zi v residenci Info: - - '&ePouziti: &6/res pdel [player]' - - Removes essential flags from player - Args: '[residence] [playername]' - give: - Description: Da hraci residenci. + - '&ePoužití: &6/res bank [deposit/withdraw] [poÄet]' + - Musíš stát v residenci nebo použít název residence + - Musíš mít vlajku +bank. + create: + Description: VytvoÅ™it residenci. + Info: + - '&ePoužití: &6/res create ' + listall: + Description: Zobrazit vÅ¡echny residence Info: - - '&ePouziti: &6/res give [hrac]' - - Da residenci urcenu hraci - Args: '[residence] [hrac]' + - '&ePoužití: &6/res listall ' + - Zobrazit vÅ¡echny residence info: Description: Zobrazit info o residenci. Info: - - '&ePouziti: &6/res info ' - - Vynech aby si zobrazil informace o oblasti, ve ktere prave stojis. - Args: '[residence]' - set: - Description: Nastaveni vlajek residence. + - '&ePoužití: &6/res info ' + - Vynech aby si zobrazil informace o oblasti, ve které + právÄ› stojíš. + area: + Description: Spravovat oblasti residence. + SubCommands: + list: + Description: Zobrazit vÅ¡echny oblasti residence. + Info: + - '&ePoužití: &6/res area list [název residence] ' + listall: + Description: Zobrazit souÅ™adnice a další informace o oblastech. + Info: + - '&ePoužití: &6/res area listall [název residence] ' + add: + Description: PÅ™idat oblasti residence. + Info: + - '&ePoužití: &6/res area add [název residence] [areaID]' + - Nejprve musíš vybrat 2 body. + remove: + Description: Odstranit oblasti residence. + Info: + - '&ePoužití: &6/res area remove [název residence] [areaID]' + replace: + Description: VymÄ›nit oblasti residence. + Info: + - '&ePoužití: &6/res area replace [název residence] [areaID]' + - Nejprve musíš vybrat 2 body. + - VymÄ›nÄ›ní oblasti residence tÄ› může stát peníze, pokud je cílová oblast + vÄ›tší. + give: + Description: Dá hráÄi residenci. Info: - - '&ePouziti: &6/res set [vlajka] [true/false/remove]' - - Pouzij &6/res flags ? &cpro zobrazeni vsech dostupnych vlajek - - Tyto vlajky se vztahuji na vsechny hrace. (pokud chces jenom na jednoho, zkus &6/res pset ?&c) - Args: '[residence] [vlajka] [true/false/remove]' - pset: - Description: Nastaveni vlajek residence na urciteho hrace. + - '&ePoužití: &6/res give [jméno hráÄe]' + - Dá tvoji residenci urÄenému hráÄi + renamearea: + Description: PÅ™ejmenovat oblast residence Info: - - '&ePouziti: &6/res pset [hrac] [vlajka] [true/false/remove]' - - '&ePouziti: &6/res pset [hrac] removeall' - - Pro zobrazeni vsech vlajek, napis /res flags ? - Args: '[residence] [hrac] [vlajka] [true/false/remove]' - flags: - Description: Seznam vsech vlajek + - '&ePoužití: &6/res removeworld [název residence] [starý název oblasti] + [nový název oblasti]' + contract: + Description: ZmenÅ¡it residenci ve smÄ›ru, kam koukáš + Info: + - '&ePoužití: &6/res contract (název residence [poÄet])' + - Zmenší residenci ve smÄ›ru, kam se koukáš + - Zadání jména residence je volitelné + check: + Description: Kontrola stavu tvé vlajky + Info: + - '&ePoužití: &6/res check [název residence] [vlajka] (jméno hráÄe)' + gset: + Description: Nastavit vlajky pro specifickou skupinu. + Info: + - '&ePoužití: &6/res gset [skupina] [vlajka] [true/false/remove]' + - Pro zobrazení seznamu vlajek napiÅ¡ /res flags ? + list: + Description: Zobrazit seznam residencí + Info: + - '&ePoužití: &6/res list ' + - Zobrazit vÅ¡echny residence, které hrÃ¡Ä vlastní (krome skrytych). + - Pro zobrazení residenci vÅ¡ech hráÄů použij /res listall. + version: + Description: Verze residence Info: - - True vetsinou povoluje, False zakazuje + - '&ePoužití: &6/res version' + tool: + Description: Zvýraznit residenci a informaci jména nástroje + Info: + - '&ePoužití: &6/res tool' + pdel: + Description: Odebrat hráÄe z residence. + Info: + - '&ePoužití: &6/res pdel [jméno hráÄe]' + - Odebere práva hráÄe residence + market: + Description: Koupit, prodat nebo pronajmout residenci. + Info: + - '&ePoužití: &6/res market ? pro více informací' SubCommands: - build: - Description: povoluje/zakazuje staveni + Info: + Description: Zobrazit informace o ekonomii residence Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - use: - Description: povoluje/zakazuje pouziti dveri, tlacitek, pacek, atd ... + - '&ePoužití: &6/res market Info [název residence]' + - Zobrazit, jestli je residence na prodej nebo k pronájmu, popÅ™. její + cenu + list: + Description: Zobrazit seznam residencí na prodej a k pronájmu + Info: + - '&ePoužití: &6/res market list' + SubCommands: + rent: + Description: Seznam residencí k pronájmu. + Info: + - '&ePoužití: &6/res market list rent' + sell: + Description: Seznam residencí k prodeji. + Info: + - '&ePoužití: &6/res market list sell' + sell: + Description: Prodat residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - move: - Description: povoluje/zakazuje pohyb v residenci + - '&ePoužití: &6/res market sell [název residence] [Äástka]' + - Nastaví residenci k prodeji za [Äástka] penÄ›z. + - Jiný hrÃ¡Ä může koupit residenci pomocí /res market buy [název residence] + sign: + Description: Nastavit obchodní ceduli Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - container: - Description: povoluje/zakazuje pristup k truhlam, pecim, dispenserum, atd ... + - '&ePoužití: &6/res market sign [název residence]' + - Nastaví ceduli na kterou koukáš, jako obchodní + buy: + Description: Koupit residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - trusted: - Description: 'nastavi vlajky: build, use, move, container a tp' + - '&ePoužití: &6/res market buy [název residence]' + - Koupí residenci, pokud je na prodej + unsell: + Description: Stáhnout residenci z prodeje Info: - - '&ePouziti: &6/res pset [vlajka] true/false/remove' - place: - Description: povoluje/zakazuje pouze pokladani blocku + - '&ePoužití: &6/res market unsell [název residence]' + rent: + Description: Pronajmout si cizí residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - destroy: - Description: povoluje/zakazuje pouze niceni blocku + - '&ePoužití: &6/res market rent [název residence] ' + - Pronajmout si residenci. autoProdloužení může být true(ano)/false(ne). + Pokud true, bude docházet k automatickému prodlužování nájmu pokud + to vlastník schválil a to do doby ukonÄení. + rentable: + Description: Pronajmout vlastní residenci + Info: + - '&ePoužití: &6/res market rentable [název residence] [cena] [dní] + ' + - Pronajme vlastní residenci za [cena] na [dní]. Pokud je + true, pronájem bude automaticky prodlužován. + autopay: + Description: Nastavit residenci Autoplatbu + Info: + - '&ePoužití: &6/res market autopay [true/false]' + payrent: + Description: Zaplatit nájem za residenci + Info: + - '&ePoužití: &6/res market payrent ' + confirm: + Description: Potvrdit ukonÄení nájmu + Info: + - '&ePoužití: &6/res market confirm' + unrent: + Description: UkonÄit nájem Äi pronájem residence. + Info: + - '&ePoužití: &6/res market unrent [název residence]' + - Pokud jsi nájemce, tento příkaz zruší tvůj nájem. + - Pokud jsi vlastník, tento příkaz zruší pronájem nájemci. + rc: + Description: PÅ™ipojit se do residenÄního chatu. + Info: + - '&ePoužití: &6/res rc (název residence)' + SubCommands: + leave: + Description: Opustit stávající residenÄní chat Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - pvp: - Description: povoluje/zakazuje pvp + - '&ePoužití: &6/res rc leave' + - Pokud jsi v residenÄním chatu, tímto příkazem ho opustíš. + setcolor: + Description: Nastavit barvu residenÄního chatu Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - tp: - Description: povoluje/zakazuje teleport na residenci + - '&ePoužití: &6/res rc setcolor [barevný kód]' + - Nastaví barvu residenÄního chatu + setprefix: + Description: Nastavit prefix residenÄního chatu Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - enderpearl: - Description: povoluje/zakazuje pouziti enderperly v residenci + - '&ePoužití: &6/res rc setprefix [novýPrefix]' + - Nastaví prefix residenÄního chatu + kick: + Description: Vyhodit hráÄe z residenÄního chatu Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - admin: - Description: povolit hraci menit vlajky v residenci + - '&ePoužití: &6/res rc kick [jméno hráÄe]' + - Vyhodí hráÄe z residenÄního chatu + expand: + Description: Rozšířit residenci ve smÄ›ru, kam koukáš + Info: + - '&ePoužití: &6/res expand (název residence) [poÄet]' + - Rozšířit residenci ve smÄ›ru, kam se koukáš. + - Zadání jména residence je volitelné + compass: + Description: Nastavit kompas ukazující smÄ›rem k residenci + Info: + - '&ePoužití: &6/res compass ' + lists: + Description: PÅ™ednastavena práva + Info: + - PÅ™ednastavena práva residence + SubCommands: + add: + Description: PÅ™idat seznam Info: - - '&ePouziti: &6/res pset [vlajka] true/false/remove' - subzone: - Description: povolit hraci delat subzony v residenci + - '&ePoužití: &6/res lists add ' + remove: + Description: Odstranit seznam Info: - - '&ePouziti: &6/res pset [vlajka] true/false/remove' - monsters: - Description: povoluje/zakazuje spawn monster v residenci + - '&ePoužití: &6/res lists remove ' + apply: + Description: Použít seznam na residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - cmonsters: - Description: povoluje/zakazuje vlastni spawnery + - '&ePoužití: &6/res lists apply ' + set: + Description: Nastavit vlajku Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - smonsters: - Description: povoluje/zakazuje spawnery a spawn vejce + - '&ePoužití: &6/res lists set ' + pset: + Description: Nastavit hráÄskou vlajku Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - nmonsters: - Description: povoluje/zakazuje prirodni spawn monster + - '&ePoužití: &6/res lists pset + ' + gset: + Description: Nastavit skupinovou vlajku Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - animals: - Description: povoluje/zakazuje spawn zvirat + - '&ePoužití: &6/res lists view ' + view: + Description: Zobrazit seznam. Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - canimals: - Description: povoluje/zakazuje spawn vlastnich zvirat + - '&ePoužití: &6/res lists view ' + reset: + Description: Resetovat residenci + Info: + - '&ePoužití: &6/res reset ' + - Resetuje vlajky residence do továrního nastavení. + listhidden: + Description: Zobrazit seznam skrytých residencí + Info: + - '&ePoužití: &6/res listhidden ' + - Zobrazit seznam skrytých residencí urÄitého hráÄe. + setmain: + Description: Nastavit definovanou rezidenci jako hlavní, aby se v chatu + zobrazovala jako pÅ™edpona + Info: + - '&ePoužití: &6/res setmain (název residence)' + - Nastaví definovanou rezidenci jako hlavní. + server: + Description: PÅ™edat residenci serveru + Info: + - '&ePoužití: &6/resadmin server [název residence]' + - Nastaví server jako vlastníka residence. + rt: + Description: Teleportovat se na náhodnou lokaci ve svÄ›tÄ›. + Info: + - '&ePoužití: &6/res rt' + - Teleportuje tÄ› na náhodnou lokaci. + mirror: + Description: Zrcadlit vlajky + Info: + - '&ePoužití: &6/res mirror ?' + shop: + Description: Spravovat obchod s residencemi + Info: + - Spravovat funkce obchodu + SubCommands: + list: + Description: Zobrazit seznam obchodovatelných residencí Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - sanimals: - Description: povoluje/zakazuje zvireci spawnery a spawn vejce + - '&ePoužití: &6/res shop list' + - Zobrazit celý seznam obchodovatelných residencí + vote: + Description: Hlasovat v residenÄním obchodu Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - nanimals: - Description: povoluje/zakazuje prirodni spawn zvirat + - '&ePoužití: &6/res shop vote [hodnota]' + - Hlasování pro aktuální nebo definovanou residenci + like: + Description: Lajknout obchod residence Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' + - '&ePoužití: &6/res shop like ' + - Lajkne obchod residence + votes: + Description: Zobrazit seznam hlasů obchodu + Info: + - '&ePoužití: &6/res shop votes ' + likes: + Description: Zobrazit poÄet lajků + Info: + - '&ePoužití: &6/res shop likes ' + - Zobrazit plný seznam lajků + setdesc: + Description: Nastavit popis residenÄního shopu + Info: + - '&ePoužití: &6/res shop setdesc [text]' + - Nastaví popis residenÄního shopu. Barvy jsou podporovány. Pro nový + řádek použij /n + createboard: + Description: VytvoÅ™it novou obchodní ceduli + Info: + - '&ePoužití: &6/res shop createboard [místo]' + - Vytvoří novou obchodní ceduli. Místo - pozice, od které se zaÄne plnit + cedule + deleteboard: + Description: Smazat obchodní ceduli + Info: + - '&ePoužití: &6/res shop deleteboard' + - Smaže ceduli kliknutím pravým tlaÄítkem na jednu z cedulek + lset: + Description: MÄ›nit možnosti Äerné listiny a seznamu ignorovaných + Info: + - '&ePoužití: &6/res lset [blacklist/ignorelist] [materiál]' + - '&ePoužití: &6/res lset Info' + - Zakázání materiálu na Äerné listinÄ› brání jeho umístÄ›ní v rezidenci. + - Seznam ignorovaných materiálů způsobí, že konkrétní materiál nebude v + residenci chránÄ›n. + pset: + Description: Nastavení vlajek residence na urÄitého hráÄe. + Info: + - '&ePoužití: &6/res pset [jméno hráÄe] [vlajka] [true/false/remove]' + - '&ePoužití: &6/res pset [jméno hráÄe] removeall' + - Pro zobrazení vÅ¡ech vlajek, napiÅ¡ /res flags ? + show: + Description: Zobrazit hranice residence + Info: + - '&ePoužití: &6/res show ' + flags: + Description: Seznam vÅ¡ech vlajek + Info: + - True vetÅ¡inou povoluje, False zakazuje + SubCommands: + anvil: + Translated: anvil + Description: Povolit/zakázat používání kovadliny v residenci + Info: + - '&ePoužití: &6/res set/pset anvil true/false/remove' + admin: + Translated: admin + Description: Povolit/zakázat hráÄi mÄ›nit vlajky v residenci + Info: + - '&ePoužití: &6/res pset [vlajka] true/false/remove' animalkilling: - Description: povoluje/zakazuje zabijeni zvirat + Translated: animalkilling + Description: Povolit/zakázat zabíjení zvířat v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - mobkilling: - Description: povoluje/zakazuje zabijeni monster + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + animals: + Translated: animals + Description: Povolit/zakázat spawn zvířat v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - nofly: - Description: povoluje/zakazuje letani v residenci + - '&ePoužití: &6/res set [vlajka] true/false/remove' + anvilbreak: + Translated: anvilbreak + Description: Povolit/zakázat niÄení kovadliny v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - vehicledestroy: - Description: povoluje/zakazuje niceni dopravnich prostredku + - '&ePoužití: &6/res set anvilbreak true/false/remove' + backup: + Translated: backup + Description: Pokud je true, obnoví prvotní vzhled plochy (nutný WordEdit) Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - shear: - Description: povoluje/zakazuje strihani ovci + - '&ePoužití: &6/res set backup true/false/remove' + bank: + Translated: bank + Description: Povolit/zakázat použití banky residence Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - dye: - Description: povoluje/zakazuje barveni ovci + - '&ePoužití: &6/res set [vlajka] true/false/remove' + bed: + Translated: bed + Description: Povolit/zakázat použití postelí v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - leash: - Description: 'povoluje/zakazuje pouziti leash ' + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + beacon: + Translated: beacon + Description: Povolit/zakázat použití majáku v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - healing: - Description: nastaveni na true zpusobi regeneraci zivota v residenci + - '&ePoužití: &6/res set/pset beacon true/false/remove' + brew: + Translated: brew + Description: Povolit/zakázat použití stojanu na vaÅ™ení lektvarů v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - feed: - Description: nastaveni na true zpusobi doplnovani hungeru v residenci + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + build: + Translated: build + Description: Povolit/zakázat stavÄ›ní v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - tnt: - Description: povoluje/zakazuje tnt + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + burn: + Translated: burn + Description: Povolit/zakázat hoÅ™ení mobů v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - creeper: - Description: povoluje/zakazuje vybuchy creeperu + - '&ePoužití: &6/res set [vlajka] true/false/remove' + button: + Translated: button + Description: Povolit/zakázat použití tlaÄítek v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - ignite: - Description: povoluje/zakazuje vzplanuti + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + cake: + Translated: cake + Description: Povolit/zakázat hráÄům jíst dort v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - firespread: - Description: povoluje/zakazuje sireni ohne + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + canimals: + Translated: canimals + Description: Povolit/zakázat spawn vlastních zvířat v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - bucket: - Description: povoluje/zakazuje pouziti kyble + - '&ePoužití: &6/res set [vlajka] true/false/remove' + chorustp: + Translated: chorustp + Description: Povolit/zakázat teleportaci s plodem chorusu v residenci + fruit Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - bucketfill: - Description: povoluje/zakazuje naplneni kyble + - '&ePoužití: &6/res set/pset chorustp true/false/remove' + chat: + Translated: chat + Description: Povolit pÅ™ipojení do chatu residence Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - bucketempty: - Description: povoluje/zakazuje vyprazdneni kyble + - '&ePoužití: &6/res set [vlajka] true/false/remove' + cmonsters: + Translated: cmonsters + Description: Povolit/zakázat náhodný spawn monster v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - flow: - Description: povoluje/zakazuje tok kapalin + - '&ePoužití: &6/res set [vlajka] true/false/remove' + commandblock: + Translated: commandblock + Description: Povolit/zakázat používání command bloku v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - lavaflow: - Description: povoluje/zakazuje tok lavy; vyssi priorita nez flow + - '&ePoužití: &6/res set/pset commandblock true/false/remove' + command: + Translated: command + Description: Povolit/zakázat použití příkazu v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - waterflow: - Description: povoluje/zakazuje tok vody; vyssi priorita nez flow + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + container: + Translated: container + Description: Povolit/zakázat přístup k truhlám, pecím, dispenserům, + atd ... v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - damage: - Description: allows or denys all entity damage within the residence + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + coords: + Translated: coords + Description: Ukázat/skrýt koordináty residence Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - piston: - Description: povoluje/zakazuje funkci pistonu + - '&ePoužití: &6/res set coords true/false/remove' + craft: + Translated: craft + Description: 'Dát vlajky: table, enchant, brew' Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - hidden: - Description: skryje residenci prikazum list a listall + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + creeper: + Translated: creeper + Description: Povolit/zakázat výbuch creeperu v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - cake: - Description: povoluje/zakazuje hracum jist dort + - '&ePoužití: &6/res set [vlajka] true/false/remove' + dragongrief: + Translated: dragongrief + Description: Zabránit niÄení bloků ender drakem v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - lever: - Description: povoluje/zakazuje pouziti packy + - '&ePoužití: &6/res set [vlajka] true/false/remove' + day: + Translated: day + Description: Nastavit den v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - button: - Description: povoluje/zakazuje pouziti tlacitek + - '&ePoužití: &6/res set [vlajka] true/false/remove' + dye: + Translated: dye + Description: Povolit/zakázat barvení ovcí v residenci + Info: + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + damage: + Translated: damage + Description: VÅ¡em povolit/zakázat poÅ¡kození útokem v residenci + Info: + - '&ePoužití: &6/res set [vlajka] true/false/remove' + decay: + Translated: decay + Description: Povolit/zakázat rozpad listí v residenci + Info: + - '&ePoužití: &6/res set decay true/false/remove' + destroy: + Translated: destroy + Description: Povolit/zakázat niÄení bloků v residenci, ignoruje vlajku + build + Info: + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + dryup: + Translated: dryup + Description: Povolit/zakázat vysychání napÅ™ houbou v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' + - '&ePoužití: &6/res set dryup true/false/remove' diode: - Description: povoluje/zakazuje pouziti redstone repeateru + Translated: diode + Description: Povolit/zakázat použití ruditového zesilovaÄe v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' door: - Description: povoluje/zakazuje pouziti dveri + Translated: door + Description: Povolit/zakázat použití dveří v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - table: - Description: povoluje/zakazuje pouziti crafting table + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + egg: + Translated: egg + Description: Povolit/zakázat použití draÄího vejce v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' + - '&ePoužití: &6/res set/pset egg true/false/remove' enchant: - Description: povoluje/zakazuje pouziti enchant table + Translated: enchant + Description: Povolit/zakázat použití Äarovného stolu v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - brew: - Description: povoluje/zakazuje pouziti brewing stand + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + explode: + Translated: explode + Description: Povolit/zakázat výbuchy v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - bed: - Description: povoluje/zakazuje pouziti posteli + - '&ePoužití: &6/res set [vlajka] true/false/remove' + enderpearl: + Translated: enderpearl + Description: Povolit/zakázat použití enderperly v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - pressure: - Description: povoluje/zakazuje pouziti pressure plate + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + fallinprotection: + Translated: fallinprotection + Description: Povolit/zakázat ochranu pÅ™ed padajícím blokem v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - note: - Description: povoluje/zakazuje pouziti note blocku + - '&ePoužití: &6/res set fallinprotection true/false/remove' + falldamage: + Translated: falldamage + Description: Povolit/zakázat ochranu pÅ™ed pádem v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - redstone: - Description: 'Dava vlajky: lever, diode, button, pressure, note' + - '&ePoužití: &6/res set falldamage true/false/remove' + feed: + Translated: feed + Description: Povolit/zakázat ochranu pÅ™ed hladem v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - craft: - Description: 'Dava vlajky: table, enchant, brew' + - '&ePoužití: &6/res set [vlajka] true/false/remove' + friendlyfire: + Translated: friendlyfire + Description: Povolit/zakázat stÅ™elbu do kamarádů v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - trample: - Description: Povoluje/zakazuje poslapani obili + - '&ePoužití: &6/res pset friendlyfire true/false/remove' + fireball: + Translated: fireball + Description: Povolit/zakázat ohnivou kouli v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - trade: - Description: Povoluje/zakazuje obchodovani s vesnicany + - '&ePoužití: &6/res set [vlajka] true/false/remove' + firespread: + Translated: firespread + Description: Povolit/zakázat šíření ohnÄ› v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - nomobs: - Description: Zabranit monstrum v proniknuti do residence + - '&ePoužití: &6/res set [vlajka] true/false/remove' + flowinprotection: + Translated: flowinprotection + Description: Povolit/zakázat tok kapalin z venÄí do residence Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - explode: - Description: Povoluje/zakazuje vybuchy + - '&ePoužití: &6/res set flowinprotection true/false/remove' + flow: + Translated: flow + Description: Povolit/zakázat tok kapalin v residenci + Info: + - '&ePoužití: &6/res set [vlajka] true/false/remove' + flowerpot: + Translated: flowerpot + Description: Povolit/zakázat použití kvÄ›tináÄe v residenci + Info: + - '&ePoužití: &6/res set/pset flowerpot true/false/remove' + grow: + Translated: grow + Description: Povolit/zakázat sázení v residenci + Info: + - '&ePoužití: &6/res set grow true/false/remove' + glow: + Translated: glow + Description: Zapnout/vypnout záři kolem hráÄů v residenci + Info: + - '&ePoužití: &6/res set glow true/false/remove' + hotfloor: + Translated: hotfloor + Description: Povolit/zakázat poÅ¡kození od magma bloků v residenci + Info: + - '&ePoužití: &6/res set hotfloor true/false/remove' + hidden: + Translated: hidden + Description: Povolit/zakázat zobrazení residence pÅ™i použití příkazů + list a listall Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - witherdamage: - Description: Povoluje/zakazuje niceni blocku witherem + - '&ePoužití: &6/res set [vlajka] true/false/remove' + hook: + Translated: hook + Description: Povolit/zakázat chycení prutem vÅ¡ech entit v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - fireball: - Description: Povoluje/zakazuje fire ball + - '&ePoužití: &6/res set/pset hook true/false/remove' + healing: + Translated: healing + Description: Zapne/vypne regeneraci života v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - command: - Description: Povoluje/zakazuje pouziti prikazu v residenci + - '&ePoužití: &6/res set [vlajka] true/false/remove' + iceform: + Translated: iceform + Description: Povolit/zakázat tvorbu ledu v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - overridepvp: - Description: Ignorovat PVP ochranu ostatnich pluginu + - '&ePoužití: &6/res set iceform true/false/remove' + icemelt: + Translated: icemelt + Description: Povolit/zakázat tání ledu v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' + - '&ePoužití: &6/res set icemelt true/false/remove' + ignite: + Translated: ignite + Description: Povolit/zakázat vzplanutí v residenci + Info: + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + itemdrop: + Translated: itemdrop + Description: Povolit/zakázat odhození pÅ™edmÄ›tů v residenci + Info: + - '&ePoužití: &6/res set/pset itemdrop true/false/remove' + itempickup: + Translated: itempickup + Description: Povolit/zakázat sbírání pÅ™edmÄ›tů ze zemÄ› v residenci + Info: + - '&ePoužití: &6/res set/pset itempickup true/false/remove' + jump2: + Translated: jump2 + Description: Povolit/zakázat skákání nad 2 bloky v residenci + Info: + - '&ePoužití: &6/res set jump2 true/false/remove' + jump3: + Translated: jump3 + Description: Povolit/zakázat skákání nad 3 bloky v residenci + Info: + - '&ePoužití: &6/res set jump3 true/false/remove' keepinv: - Description: Nechat hracum po smrti obsah inventare + Translated: keepinv + Description: Povolit/zakázat ponechání inventáře hráÄům po smrti v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' keepexp: - Description: Nechat hracum po smrti XP + Translated: keepexp + Description: Povolit/zakázat ponechání XP hráÄům po smrti v residenci Info: - - '&ePouziti: &6/res set/pset [vlajka] true/false/remove' - burn: - Description: Povoluje/zakazuje horeni mobu v residenci + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + lavaflow: + Translated: lavaflow + Description: Povolit/zakázat tok lávy v residenci, ignoruje flow vlajku Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - bank: - Description: Povoluje/zakazuje pouziti banky residence + - '&ePoužití: &6/res set [vlajka] true/false/remove' + leash: + Translated: leash + Description: Povolit/zakázat použití vodítka v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - shop: - Description: Pridat residenci do obchodniho seznamu + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + lever: + Translated: lever + Description: Povolit/zakázat použití páÄky v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - day: - Description: Nastavi den v residenci + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + mobexpdrop: + Translated: mobexpdrop + Description: Povolit/zakázat XP z mobů v residenci + Info: + - '&ePoužití: &6/res set [vlajka] true/false/remove' + mobitemdrop: + Translated: mobitemdrop + Description: Povolit/zakázat pÅ™edmÄ›ty z mobů v residenci + Info: + - '&ePoužití: &6/res set [vlajka] true/false/remove' + mobkilling: + Translated: mobkilling + Description: Povolit/zakázat zabíjení monster v residenci + Info: + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + monsters: + Translated: monsters + Description: Povolit/zakázat spawn monster v residenci + Info: + - '&ePoužití: &6/res set [vlajka] true/false/remove' + move: + Translated: move + Description: Povolit/zakázat pohyb v residenci + Info: + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + nanimals: + Translated: nanimals + Description: Povolit/zakázat přírodní spawnování zvířat v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' + - '&ePoužití: &6/res set [vlajka] true/false/remove' + nmonsters: + Translated: nmonsters + Description: Povolit/zakázat přírodní spawnování monster v residenci + Info: + - '&ePoužití: &6/res set [vlajka] true/false/remove' night: - Description: Nastavi noc v residenci + Translated: night + Description: Nastaví noc v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - chat: - Description: Povoluje pripojeni do chatu residence + - '&ePoužití: &6/res set [vlajka] true/false/remove' + nofly: + Translated: nofly + Description: Povolit/zakázat létání pÅ™i vstupu do residence Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + fly: + Translated: fly + Description: Zapne/vypne létání pro hráÄe v residenci + Info: + - '&ePoužití: &6/res set/pset fly true/false/remove' + nomobs: + Translated: nomobs + Description: Povolit/zakázat monstrům v proniknutí do residence + Info: + - '&ePoužití: &6/res set [vlajka] true/false/remove' + note: + Translated: note + Description: Povolit/zakázat použití note bloků v residenci + Info: + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' nodurability: - Description: Zabranuje opotrebovani nastroju + Translated: nodurability + Description: Povolit/zakázat opotÅ™ebování nástrojů v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - mobitemdrop: - Description: Zabranuje vypadavani itemu z mobu po smrti + - '&ePoužití: &6/res set [vlajka] true/false/remove' + overridepvp: + Translated: overridepvp + Description: Povolit/zakázat PVP v residenci absolutnÄ› nad ostatními + pluginy Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - mobexpdrop: - Description: Zabranuje vypadavani XP z mobu + - '&ePoužití: &6/res set [vlajka] true/false/remove' + pressure: + Translated: pressure + Description: Povolit/zakázat použití nášlapné desky v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - dragongrief: - Description: Zabranuje niceni blocku ender drakem + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + piston: + Translated: piston + Description: Povolit/zakázat funkci pistonu v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - snowtrail: - Description: Zabranuje snehulakum nechavat za sebou snih + - '&ePoužití: &6/res set [vlajka] true/false/remove' + pistonprotection: + Translated: pistonprotection + Description: Povolit/zakázat funkci pistonu do nebo z residence + Info: + - '&ePoužití: &6/res set pistonprotection true/false/remove' + place: + Translated: place + Description: Povolit/zakázat pouze pokládání bloků v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + pvp: + Translated: pvp + Description: Povolit/zakázat pvp v residenci + Info: + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + rain: + Translated: rain + Description: Povolit/zakázat déšť v residenci + Info: + - '&ePoužití: &6/res set rain true/false/remove' + redstone: + Translated: redstone + Description: 'Dát vlajky: lever, diode, button, pressure, note' + Info: + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' respawn: - Description: Automaticky respawnovat hrace + Translated: respawn + Description: Povolit/zakázat automatický respawn hráÄe v residenci Info: - - '&ePouziti: &6/res set [vlajka] true/false/remove' - limits: - Description: Zobrazit me limity. - Info: - - '&ePouziti: &6/res limits' - - Zobrazi tva omezeni tykajici se rezidenci. - tpset: - Description: Nastavit pozici teleportace v residenci - Info: - - '&ePouziti: &6/res tpset' - - Nastavi teleportacni pozici residence tam, kde stojis. - - Musis byt vlastnik residence, nebo mit vlajku +admin. - tp: - Description: Teleportovat se do residence. - Info: - - '&ePouziti: &6/res tp [residence]' - - Teleportuje te do residence. Ta musi mit nastavenou vlajku +tp, popr musis byt vlastnik. - - Take na to musis mit prava. - Args: '[residence]' - rt: - Description: Teleportovat se na nahodnou lokaci ve svete. - Info: - - '&ePouziti: &6/res rt' - - Teleportuje te na nahodnou lokaci. - rc: - Description: Pripojit se do residencniho chatu. - Info: - - '&ePouziti: &6/res rc (residence)' - SubCommands: - leave: - Description: Opustit stavajici residencni chat + - '&ePoužití: &6/res set [vlajka] true/false/remove' + riding: + Translated: riding + Description: Povolit/zakázat jezdit na koni Info: - - '&ePouziti: &6/res rc leave' - - Pokud si v residencnim chatu, timto prikazem ho opustis. - setcolor: - Description: Nastavit barvu residencniho chatu + - '&ePoužití: &6/res set/pset riding true/false/remove' + shoot: + Translated: shoot + Description: Povolit/zakázat stÅ™elbu projektilů v residenci Info: - - '&ePouziti: &6/res rc setcolor [colorCode]' - - Nastavi barvu residencniho chatu - setprefix: - Description: Nastavit prefix residencniho chatu + - '&ePoužití: &6/res set shoot true/false/remove' + sun: + Translated: sun + Description: Zapnout/vypnout sluneÄné poÄasí v residenci Info: - - '&ePouziti: &6/res rc setprefix [novyPrefix]' - - Nastavi prefix residencniho chatu - kick: - Description: Vyhodit hrace z residencniho chatu + - '&ePoužití: &6/res set sun true/false/remove' + shop: + Translated: shop + Description: PÅ™idat residenci do obchodního seznamu Info: - - '&ePouziti: &6/res rc kick [hrac]' - - Vyhodi hrace z residencniho chatu - expand: - Description: Rozsirit residenci ve smeru, kam koukas - Info: - - '&ePouziti: &6/res expand (residence) [pocet]' - - Rozsiri residenci ve smeru, kam se koukas. - - Zadani jmena residence je volitelne - contract: - Description: Zmensit residence ve smeru, kam koukas - Info: - - '&ePouziti: &6/res contract (residence [amount])' - - Zmensi residenci ve smeru, kam se koukas - - Zadani jmena residence je volitelne - shop: - Description: Spravovat obchod s residencemi - Info: - - Spravovat funkce obchodu - SubCommands: - list: - Description: Zobrazit seznam obchodovatelnych residenci + - '&ePoužití: &6/res set [vlajka] true/false/remove' + snowtrail: + Translated: snowtrail + Description: Povolit/zakázat snÄ›hulákům snÄ›hovou stopu v residenci Info: - - '&ePouziti: &6/res shop list' - - Zobrazi cely seznam obchodovatelnych residenci - vote: - Description: Hlasovat v residencnim obchodu + - '&ePoužití: &6/res set [vlajka] true/false/remove' + spread: + Translated: spread + Description: Povolit/zakázat růstu bloků v residenci Info: - - '&ePouziti: &6/res shop vote [amount]' - - Votes for current or defined residence - Args: '[residence]' - like: - Description: Give like for residence obchod + - '&ePoužití: &6/res set spread true/false/remove' + snowball: + Translated: snowball + Description: Povolit/zakázat odhození pÅ™i zásahu snÄ›hovou koulí v residenci Info: - - '&ePouziti: &6/res shop like ' - - Gives like for residence shop - Args: '[residenceshop]' - votes: - Description: Zobrazi seznam hlasu obchodu + - '&ePoužití: &6/res set snowball true/false/remove' + sanimals: + Translated: sanimals + Description: Povolit/zakázat zvířecí spawnery a spawn vejce v residenci Info: - - '&ePouziti: &6/res shop votes ' - Args: '[residenceshop]' - likes: - Description: Zobrazit pocet like + - '&ePoužití: &6/res set [vlajka] true/false/remove' + shear: + Translated: shear + Description: Povolit/zakázat stříhání ovcí v residenci Info: - - '&ePouziti: &6/res shop likes ' - - Zobrazi plny seznam like - Args: '[residenceshop]' - setdesc: - Description: Nastavit popis residencniho shopu + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + smonsters: + Translated: smonsters + Description: Povolit/zakázat monster spawnery a spawn vejce v residenci Info: - - '&ePouziti: &6/res shop setdesc [text]' - - Nastavi popis residencniho shopu. Barvy jsou podporovany. Pro novy radek pouzij /n - createboard: - Description: Vytvorit novou obchodni tabuli + - '&ePoužití: &6/res set [vlajka] true/false/remove' + subzone: + Translated: subzone + Description: Povolit/zakázat hráÄi dÄ›lat subzóny v residenci Info: - - '&ePouziti: &6/res shop createboard [place]' - - Vytvori novou obchodni tabuli ceduli. Place - position from which to start filling board - deleteboard: - Description: Smazat obchodni tabuli + - '&ePoužití: &6/res pset [vlajka] true/false/remove' + title: + Translated: title + Description: Zapnout/vypnout uvítací hlášku pÅ™i vstupu do/výstupu z + residence Info: - - '&ePouziti: &6/res shop deleteboard' - - Smaze tabuli ceduli pravym klickem na jednu z cedulek - tpconfirm: - Description: Ignorovat nebezpecny teleport. - Info: - - '&ePouziti: &6/res tpconfirm' - - Vynuti teleportaci i pres to, ze muze byt nebezpecna. - subzone: - Description: Vytvorit subzony v residenci. - Info: - - '&ePouziti: &6/res subzone [jmeno subzony]' - - Pokud jmeno residence neni zadane, pouzije jmeno residence, ve ktere se nachazis. - Args: '[residence]' - area: - Description: Spravovat oblasti residence. - SubCommands: - list: - Description: Zobrazi vsechny oblasti residence. + - '&ePoužití: &6/res set title true/false/remove' + table: + Translated: table + Description: Povolit/zakázat použití pracovního stolu v residenci Info: - - '&ePouziti: &6/res area list [residence] ' - Args: '[residence]' - listall: - Description: Zobrazit souradnice a dalsi informace o oblastech. + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + tnt: + Translated: tnt + Description: Povolit/zakázat tnt v residenci Info: - - '&ePouziti: &6/res area listall [residence] ' - Args: '[residence]' - add: - Description: Pridat oblasti residence. + - '&ePoužití: &6/res set [vlajka] true/false/remove' + tp: + Translated: tp + Description: Povolit/zakázat teleport na residenci Info: - - '&ePouziti: &6/res area add [residence] [areaID]' - - Nejprve musis vybrat 2 body. - Args: '[residence]' - remove: - Description: Odstranit oblasti residence. + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + trade: + Translated: trade + Description: Povolit/zakázat obchodování s vesniÄany v residenci Info: - - '&ePouziti: &6/res area remove [residence] [areaID]' - Args: '[residence]' - replace: - Description: Vymenit oblasti residence. + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + trample: + Translated: trample + Description: Povolit/zakázat poÅ¡lapání obilí v residenci Info: - - '&ePouziti: &6/res area replace [residence] [areaID]' - - Nejprve musis vybrat 2 body. - - Vymeneni oblasti residence te muze stat penize, pokud je cilova oblast vetsi. - Args: '[residence]' - message: - Description: Spravovat zpravy o prichodu/odchodu z residence - Info: - - '&ePouziti: &6/res message [enter/leave] [zprava]' - - Nastavi zpravu pro prichod (enter) nebo odchod (leave). - - '&ePouziti: &6/res message remove [enter/leave]' - - Odstrani nastaveni zprav o prichodu (enter)/odchodu (leave) - Args: '[residence] [enter/leave]' - lease: - Description: Spravovat najmy residenci - Info: - - '&ePouziti: &6/res lease [renew/cost] [residence]' - - /res lease cost will zobrazit the cost of renewing a residence lease. - - /res lease renew will renew the residence provided you have enough money. - Args: '[renew/cost] [residence]' - SubCommands: - set: - Description: Set the lease time + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + trusted: + Translated: trusted + Description: 'Nastavit vlajky: build, use, move, container a tp' Info: - - '&ePouziti: &6/resadmin lease set [residence] [#days/infinite]' - - Sets the lease time to a specified number of days, or infinite. - Args: '[residence]' - renew: - Description: Renew the lease time + - '&ePoužití: &6/res pset [vlajka] true/false/remove' + use: + Translated: use + Description: Povolit/zakázat použití dveří, tlaÄítek, páÄek, atd. v + residenci Info: - - '&ePouziti: &6/resadmin lease renew ' - - Renews the lease time for current or specified residence. - Args: '[residence]' - expires: - Description: Lease end date + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + vehicledestroy: + Translated: vehicledestroy + Description: Povolit/zakázat niÄeni dopravních prostÅ™edků v residenci Info: - - '&ePouziti: &6/resadmin lease expires ' - - zobrazits when expires residence lease time. - Args: '[residence]' - cost: - Description: zobrazits renew cost + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + witherspawn: + Translated: witherspawn + Description: Povolit/zakázat spawnování withera v residenci Info: - - '&ePouziti: &6/resadmin lease cost ' - - zobrazits how much money you need to renew residence lease. - Args: '[residence]' - bank: - Description: Manage money in a Residence + - '&ePoužití: &6/res set witherspawn true/false/remove' + phantomspawn: + Translated: phantomspawn + Description: Povolit/zakázat spawnování fantoma v residenci + Info: + - '&ePoužití: &6/res set phantomspawn true/false/remove' + witherdamage: + Translated: witherdamage + Description: Povolit/zakázat poÅ¡kození witherem v residenci + Info: + - '&ePoužití: &6/res set [vlajka] true/false/remove' + witherdestruction: + Translated: witherdestruction + Description: Povolit/zakázat niÄení bloků witherem v residenci + Info: + - '&ePoužití: &6/res set witherdestruction true/false/remove' + waterflow: + Translated: waterflow + Description: Povolit/zakázat tok vody v residenci, ignoruje flow vlajku + Info: + - '&ePoužití: &6/res set [vlajka] true/false/remove' + wspeed1: + Translated: wspeed1 + Description: Povolit/zakázat hráÄi rychlé bÄ›hání %1 v residenci + Info: + - '&ePoužití: &6/res set wspeed1 true/false/remove' + wspeed2: + Translated: wspeed2 + Description: Povolit/zakázat hráÄi rychlé bÄ›hání %1 v residenci + Info: + - '&ePoužití: &6/res set wspeed2 true/false/remove' + bucket: + Description: Povolit/zakázat použití kýble v residenci + Info: + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + bucketfill: + Description: Povolit/zakázat naplnÄ›ní kýble v residenci + Info: + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + bucketempty: + Description: Povolit/zakázat vyprázdnÄ›ní kýble v residenci + Info: + - '&ePoužití: &6/res set/pset [vlajka] true/false/remove' + remove: + Description: Odstranit residenci. Info: - - '&ePouziti: &6/res bank [deposit/withdraw] [amount]' - - You must be standing in a Residence or provide residence name - - You must have the +bank flag. - Args: '[deposit/withdraw] [residence]' - confirm: - Description: Potvrdit odstraneni residence. + - '&ePoužití: &6/res remove ' + signupdate: + Description: Aktualizovat cedulky residence. Info: - - '&ePouziti: &6/res confirm' - - Potvrdi odstraneni residence. - gset: - Description: Nastavit vlajky pro specifickou skupinu. + - '&ePoužití: &6/res signupdate' + current: + Description: Zobrazit residenci, ve které se nacházíš. Info: - - '&ePouziti: &6/res gset [skupina] [vlajka] [true/false/remove]' - - Pro zobrazeni seznamu vlajek napis /res flags ? - lset: - Description: Change blacklist and ignorelist options + - '&ePoužití: &6/res current' + reload: + Description: Aktualizovat soubory config,lang,groups,flags Info: - - '&ePouziti: &6/res lset [blacklist/ignorelist] [material]' - - '&ePouziti: &6/res lset Info' - - Blacklisting a material prevents it from being placed in the residence. - - Ignorelist causes a specific material to not be protected by Residence. - Args: '[residence] [blacklist/ignorelist] [material]' - removeall: - Description: Odstranit vsechny residence hrace. + - '&ePoužití: &6/res reload [config/lang/groups/flags]' + setowner: + Description: ZmÄ›nit vlastníka residence. Info: - - '&ePouziti: &6/res removeall [vlastnik]' - - Odstrani vsechny residence vlastnene urcitym hracem.' - - Vyzaduje /resadmin pokud to pouzivas na kohokoliv jineho, nez sebe. - Args: '[playername]' - list: - Description: Zobrazit seznam residenci + - '&ePoužití: &6/resadmin setowner [název residence] [jméno hráÄe]' + unstuck: + Description: Teleportovat z residence Info: - - '&ePouziti: &6/res list ' - - Zobrazi vsechny residence, ktere hrac vlastni (krome skrytych). - - Pro zobrazeni residenci vsech hracu pouzij /res listall. - Args: '[playername]' - listhidden: - Description: Zobrazit seznam skrytych residenci + - '&ePoužití: &6/res unstuck' + subzone: + Description: VytvoÅ™it subzóny v residenci. Info: - - '&ePouziti: &6/res listhidden ' - - Zobrazi seznam skrytych residenci urciteho hrace. - Args: '[playername]' - listall: - Description: Zobrazit vsechny residence + - '&ePoužití: &6/res subzone [jméno subzony]' + - Pokud jméno residence není zadané, použije se jméno residence, ve které + se nacházíš. + removeworld: + Description: Odstranit vÅ¡echny residence svÄ›ta. Info: - - '&ePouziti: &6/res listall ' - - Zobrazi vsechny residence - listallhidden: - Description: Zobrazit vsechny skryte residence + - '&ePoužití: &6/res removeworld [svet]' + - Musí být spuÅ¡tÄ›no z konzole. + limits: + Description: Zobrazit mé limity. Info: - - '&ePouziti: &6/res listhidden ' - - Zobrazi vsechny skryte residence - sublist: - Description: Zobrazit subzony + - '&ePoužití: &6/res limits' + - Zobrazí tvá omezení týkající se rezidencí. + set: + Description: Nastavení vlajek residence. Info: - - '&ePouziti: &6/res sublist ' - - Zobrazi subzony v residenci - Args: '[residence]' - reset: - Description: Resetovat residenci + - '&ePoužití: &6/res set [vlajka] [true/false/remove]' + - Použij &6/res flags ? &cpro zobrazení vÅ¡ech dostupných vlajek + - Tyto vlajky se vztahují na vÅ¡echny hráÄe. (pokud chceÅ¡ jenom na jednoho, + zkus &6/res pset ?&c) + clearflags: + Description: OdstranÄ›ní vÅ¡ech vlajek z residence Info: - - '&ePouziti: &6/res reset ' - - Resetuje vlajky residence do tovarniho nastaveni. - Args: '[residence]' - rename: - Description: Prejmenovat residenci. + - '&ePoužití: &6/res clearflags ' + message: + Description: Spravovat uvítací text pÅ™i příchodu/odchodu z residence + Info: + - '&ePoužití: &6/res message [enter/leave] [zpráva]' + - Nastaví zprávu pro příchod (enter) nebo odchod (leave). + - '&ePoužití: &6/res message remove [enter/leave]' + - Odstraní zprávu pro příchod (enter)/odchod (leave) + command: + Description: Povolit/zakázat příkazy v residenci + Info: + - '&ePoužití: &6/res command ' + - Zobrazí seznam, pÅ™idá nebo odebere povolení k užití příkazů v residenci + - Použij podtržítko _ pÅ™i pÅ™idání příkazu s více/mezi promÄ›nnými + confirm: + Description: Potvrdit odstranÄ›ní residence. Info: - - '&ePouziti: &6/res rename [StaryNazev] [NovyNazev]' - - Musis byt vlastnik residence. - - Jmeno nesmi byt uz pouzite. - Args: '[residence]' + - '&ePoužití: &6/res confirm' + - Potvrdí odstranÄ›ní residence. + resadmin: + Description: Povolit/zakázat residenÄního admina + Info: + - '&ePoužití: &6/res resadmin [on/off]' + tpset: + Description: Nastavit pozici teleportace v residenci + Info: + - '&ePoužití: &6/res tpset' + - Nastaví teleportaÄní pozici residence tam, kde stojíš. + - Musíš být vlastník residence, nebo mít vlajku +admin. + tpconfirm: + Description: Ignorovat nebezpeÄný teleport. + Info: + - '&ePoužití: &6/res tpconfirm' + - Vynutí teleportaci i pÅ™es to, že může být nebezpeÄná. + removeall: + Description: Odstranit vÅ¡echny residence hráÄe. + Info: + - '&ePoužití: &6/res removeall [jméno vlastníka]' + - Odstraní vÅ¡echny residence vlastnÄ›né urÄitým hráÄem.' + - Vyžaduje /resadmin pokud to používáš na kohokoliv jiného, než sebe. + material: + Description: Zkontrolovat jestli existuje materiál pomocí id + Info: + - '&ePoužití: &6/res material [materiál]' kick: - Description: Vyhodit hrace z residence + Description: Vyhodit hráÄe z residence Info: - - '&ePouziti: &6/res kick ' - - Musis byt vlastnik residence. - - Hrac by mel byt online. - Args: '[playername]' - mirror: - Description: Zrcadlit vlajky + - '&ePoužití: &6/res kick ' + - Musíš být vlastník residence. + - HrÃ¡Ä by mÄ›l být online. + sublist: + Description: Zobrazit subzóny Info: - - '&ePouziti: &6/res mirror ?' - Args: '[residence] [residence]' - market: - Description: Koupit, prodat nebo pronajmout residenci. - SubCommands: - Info: - Description: Zobrazit informace o ekonomii residence - Info: - - '&ePouziti: &6/res market Info [residence]' - - Zobrazi, jestli je informace na prodej nebo k pronajmu, popr jeji cenu - Args: '[residence]' - list: - Description: Zobrazit seznam residenci na prodej a k pronajmu - Info: - - '&ePouziti: &6/res market list' - sell: - Description: Prodat residenci - Info: - - '&ePouziti: &6/res market sell [residence] [castka]' - - Nastavi residenci k pronajmu za [castka] penez. - - Jiny hrac muze koupit residenci pomoci /res market buy - Args: '[residence]' - sign: - Description: Nastavit obchodni ceduli - Info: - - '&ePouziti: &6/res market sign [residence]' - - Nastavi ceduli na kterou koukas, jako obchodni - Args: '[residence]' - buy: - Description: Koupit residenci - Info: - - '&ePouziti: &6/res market buy [residence]' - - Koupi residenci, pokud je na prodej - Args: '[residence]' - unsell: - Description: Prestat prodavat residenci - Info: - - '&ePouziti: &6/res market unsell [residence]' - Args: '[residence]' - rent: - Description: Pronajmout residenci - Info: - - '&ePouziti: &6/res market rent [residence] ' - - Pronajmout si residenci. autoProdlouzeni muze byt true(ano)/false(ne). Pokud true, bude dochazet k automatickemu prodluzovani najmu. - Args: '[cresidence] [true/false]' - rentable: - Description: Nastavit residenci pronajimatelnou - Info: - - '&ePouziti: &6/res market rentable [residence] [cena] [dni] ' - - Nastavi residenci jako pronajimatelnou za [cena] kazdych [dni]. Pokud je true, najem bude automaticky prodluzovan. - Args: '[residence]' - release: - Description: Odstranit residenci z najmu - Info: - - '&ePouziti: &6/res market release [residence]' - - Pokud si najemce, tento prikaz zrusi najem. - - Pokud si vlastnik, tento prikaz zrusi pronajem residence. - Args: '[residence]' - current: - Description: Zobrazit residenci, ve ktere se nachazis. + - '&ePoužití: &6/res sublist ' + - Zobrazí subzóny v residenci + rename: + Description: PÅ™ejmenovat residenci. Info: - - '&ePouziti: &6/res current' - signupdate: - Description: Aktualizovat cedulky residence. + - '&ePoužití: &6/res rename [StarýNázev] [NovýNázev]' + - Musíš být vlastník residence. + - Jméno nesmí být už použité. + setallfor: + Description: Nastavit vlajku urÄitému vlastníkovi pro vÅ¡echny jeho residence Info: - - '&ePouziti: &6/res signupdate' - lists: - Description: Prednastavena prava + - '&ePoužití: &6/res setallfor [jméno hráÄe] [vlajka] [true/false/remove]' + lease: + Description: Spravovat nájmy v residenci Info: - - Prednastavena prava residence + - '&ePoužití: &6/res lease [renew/cost] [název residence]' + - /res lease cost ukáže náklady na obnovení rezidenÄního pronájmu. + - /res lease renew obnoví residenci za pÅ™edpokladu, že máš dost penÄ›z. SubCommands: - add: - Description: Pridat seznam - Info: - - '&ePouziti: &6/res lists add ' - remove: - Description: Odstranit seznam + set: + Description: Nastavit dobu pronájmu Info: - - '&ePouziti: &6/res lists remove ' - apply: - Description: Pouzit seznam na residenci + - '&ePoužití: &6/resadmin lease set [název residence] [#days/infinite]' + - Nastaví dobu pronájmu na urÄitý poÄet dní nebo nekoneÄnÄ› dlouho. + renew: + Description: Obnovit dobu pronájmu Info: - - '&ePouziti: &6/res lists apply ' - set: - Description: Nastavit vlajku + - '&ePoužití: &6/resadmin lease renew ' + - Obnoví dobu pronájmu zadané residence. + list: + Description: Vypsat seznam pronájmu residence Info: - - '&ePouziti: &6/res lists set ' - pset: - Description: Nastavit hracskou vlajku + - '&ePoužití: &6/resadmin lease list ' + - Vypíše vÅ¡echny doby pronájmu subzón + expires: + Description: Zobrazit koncové datum pronájmu Info: - - '&ePouziti: &6/res lists pset ' - gset: - Description: Nastavit skupinovou vlajku + - '&ePoužití: &6/resadmin lease expires ' + - Zobrazí kdy konÄí pronájem residence. + cost: + Description: Zobrazit cenu za obnovení pronájmu Info: - - '&ePouziti: &6/res lists view ' - view: - Description: Zobrazit seznam. - server: - Description: Predat residenci serveru + - '&ePoužití: &6/resadmin lease cost ' + - Zobrazit kolik penÄ›z potÅ™ebujeÅ¡ k obnovení nájmu residence. + tp: + Description: Teleportovat se do residence. Info: - - '&ePouziti: &6/resadmin server [residence]' - - Nastavi server jako vlastnika residence. - Args: '[cresidence]' - setowner: - Description: Zmenit vlastnika residence. + - '&ePoužití: &6/res tp [název residence]' + - Teleportuje tÄ› do residence. Ta musí mít nastavenou vlajku +tp, popr musíš + být vlastník. + - Také na to musíš mít práva. + setall: + Description: Nastavit vlajku pro vÅ¡echny residence Info: - - '&ePouziti: &6/resadmin setowner [residence] [hrac]' - Args: '[cresidence]' + - '&ePoužití: &6/res setall [flag] [true/false/remove]' resreload: - Description: Reload residence. + Description: Obnovit residenci. Info: - - '&ePouziti: &6/resreload' + - '&ePoužití: &6/resreload' resload: - Description: Load residence save file. - Info: - - '&ePouziti: &6/resload' - - UNSAFE command, does not save residences first. - - Loads the residence save file after you have made changes. - removeworld: - Description: Odstranit vsechny residence sveta. - Info: - - '&ePouziti: &6/res removeworld [svet]' - - Musi byt spusteno z konzole. - signconvert: - Description: Converts signs from ResidenceSign plugin - Info: - - '&ePouziti: &6/res signconvert' - - Will try to convert saved sign data from 3rd party plugin - version: - Description: Verze residence + Description: NaÄíst residenci z uloženého souboru. Info: - - '&ePouziti: &6/res version' \ No newline at end of file + - '&ePoužití: &6/resload' + - Pozor příkaz pÅ™ed použitím neukládá residenci. + - NaÄti residenci ze souboru po provedených zmÄ›nách. From cf6ed7c8d11ba76e23f8c826f3b35c6a87cf52ec Mon Sep 17 00:00:00 2001 From: stashenko <34498917+stashenko@users.noreply.github.com> Date: Thu, 21 Nov 2019 20:00:19 +0500 Subject: [PATCH 0643/1142] Create Russian.yml Russian translation --- src/Language/Russian.yml | 1699 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 1699 insertions(+) create mode 100644 src/Language/Russian.yml diff --git a/src/Language/Russian.yml b/src/Language/Russian.yml new file mode 100644 index 000000000..003ce1f5a --- /dev/null +++ b/src/Language/Russian.yml @@ -0,0 +1,1699 @@ +# of this file and modify that instead. This file will be updated automatically by Residence +# when a newer version is detected, and your changes will be overwritten. Once you +# have a copy of this file, change the Language: option under the Residence config.yml +# to whatever you named your copy. + +Language: + Invalid: + Player: '&cÐеверное Ð¸Ð¼Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ°...' + World: '&cÐеверный мир...' + Residence: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ...' + Subzone: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐŸÐ¾Ð´Ð·Ð¾Ð½Ð°...' + Direction: '&cÐеверное направление...' + Amount: '&cÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ñумма...' + Cost: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÑтоимоÑÑ‚ÑŒ...' + Days: '&cÐеверное количеÑтво дней...' + Material: '&cÐеверный материал...' + Boolean: '&cÐеверное значение, должно быть &6true(t) &cили &6false(f)' + Area: '&cÐеверный район...' + Group: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°...' + MessageType: '&cТип ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ быть введен или удален.' + Flag: '&cÐеверный флаг...' + FlagState: '&cÐеверное ÑоÑтоÑние флага, должно быть &6true(t)&c, &6false(f)&c, + или &6remove(r)' + List: '&eÐеизвеÑтный тип ÑпиÑка, должен быть &6blacklist &eили &6ignorelist.' + Page: '&eÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñтраница...' + Help: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñтраница помощи...' + NameCharacters: '&cÐ˜Ð¼Ñ Ñодержит недопуÑтимые Ñимволы...' + Area: + Exists: '&cÐазвание облаÑти уже ÑущеÑтвует.' + Create: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ñоздана, ID &6%1' + DiffWorld: '&cРайон находитÑÑ Ð² другом мире от Резиденции' + Collision: '&cОблаÑÑ‚ÑŒ переÑекаетÑÑ Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸ÐµÐ¹ &6%1' + SubzoneCollision: '&cОблаÑÑ‚ÑŒ переÑекаетÑÑ Ñ Ð¿Ð¾Ð´Ð·Ð¾Ð½Ð¾Ð¹ &6%1' + NonExist: '&cТакой облаÑти не ÑущеÑтвует.' + InvalidName: '&cÐеверное название облаÑти...' + ToSmallX: '&cВаша длина выбора &6X &c(&6%1&c) Ñлишком мала. &eРазрешаетÑÑ &6%2 + &eи больше.' + ToSmallY: '&cВаша выÑота выбора (&6%1&c) Ñлишком мала. &eРазрешаетÑÑ &6%2 &eи + больше.' + ToSmallZ: '&cВаша длина выбора &6Z (&6%1&c) Ñлишком мала. &eРазрешаетÑÑ &6%2 &eи + больше.' + ToBigX: '&cВаша длина выбора &6X (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 + &eи меньше.' + ToBigY: '&cВаша выÑота выбора (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 &eи + меньше.' + ToBigZ: '&cВаша длина выбора &6Z (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 + &eи меньше.' + Rename: '&eПереименована облаÑÑ‚ÑŒ &6%1 &eв &6%2' + Remove: '&eУдалена облаÑÑ‚ÑŒ &6%1...' + Name: '&eÐазвание: &2%1' + RemoveLast: '&cÐевозможно удалить поÑледнюю облаÑÑ‚ÑŒ в резиденции.' + NotWithinParent: '&cОблаÑÑ‚ÑŒ не в пределах родительÑкой облаÑти.' + Update: '&eОбновление облаÑти...' + MaxPhysical: '&eÐ’Ñ‹ доÑтигли макÑимально допуÑтимых физичеÑких облаÑтей Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸.' + SizeLimit: '&eРазмер облаÑти не находитÑÑ Ð² ваших допуÑтимых пределах.' + HighLimit: '&cÐ’Ñ‹ не можете защитить так выÑоко, ваш предел &6%1' + LowLimit: '&cÐ’Ñ‹ не можете защитить так глубоко, ваш предел &6%1' + Select: + Points: '&eСначала выберите две точки перед иÑпользованием Ñтой команды!' + Overlap: '&cВыбранные точки переÑекаетÑÑ Ñ Ñ€ÐµÐ³Ð¸Ð¾Ð½Ð¾Ð¼ &6%1 &c!' + WorldGuardOverlap: '&cВыбранные точки переÑекаетÑÑ Ñ WorldGuard регионом &6%1 + &c!' + KingdomsOverlap: '&cВыбранные точки переÑекаетÑÑ Ñ Kingdoms землей &6%1 &c!' + Success: '&eВыбор уÑпешен!' + Fail: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° выбора...' + Bedrock: '&eВыбор раÑширен до минимально допуÑтимого.' + Sky: '&eВыбор раÑширен до макÑимально допуÑтимого предела.' + Area: '&eВыбрана облаÑÑ‚ÑŒ &6%1 &eрезиденции &6%2' + Tool: '&e- ИнÑтрумент выбора: &6%1' + PrimaryPoint: '&eВыделена &6ÐŸÐµÑ€Ð²Ð°Ñ &eточка выбора %1' + SecondaryPoint: '&eВыделена &6Ð’Ñ‚Ð¾Ñ€Ð°Ñ &eточка выбора %1' + Primary: '&eÐŸÐµÑ€Ð²Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ°: &6%1' + Secondary: '&eÐ’Ñ‚Ð¾Ñ€Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ°: &6%1' + TooHigh: '&cВнимание, выбор был выше вершины карты, ограничение.' + TooLow: '&cВнимание, выбор был ниже нижней чаÑти карты, ограничение.' + TotalSize: '&eОбщий размер выбора: &6%1' + AutoEnabled: '&eРежим автоматичеÑкого выбора &6ВКЛ&e. Чтобы отключить &6/res + select auto' + AutoDisabled: '&eРежим автоматичеÑкого выбора &6ВЫКЛ&e. Чтобы включить &6/res + select auto' + Disabled: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ доÑтупа к командам выбора' + Sign: + Updated: '&6%1 &eтабличка обновлена!' + TopLine: '[market]' + DateFormat: YY/MM/dd HH:mm + ForRentTopLine: '&8Ðренда' + ForRentPriceLine: '&8%1&f/&8%2&f/&8%3' + ForRentResName: '&8%1' + ForRentBottomLine: '&9ДоÑтупно' + RentedAutorenewTrue: '&2%1' + RentedAutorenewFalse: '&c%1' + RentedTopLine: '%1' + RentedPriceLine: '&8%1&f/&8%2&f/&8%3' + RentedResName: '&8%1' + RentedBottomLine: '&1%1' + ForSaleTopLine: '&8Продажа' + ForSalePriceLine: '&8%1' + ForSaleResName: '&8%1' + ForSaleBottom: '&5%1m³' + LookAt: '&cÐ’Ñ‹ не Ñмотрите на табличку' + ResName: '&8%1' + Owner: '&5%1' + Siege: + Started: '&7ОÑада началаÑÑŒ!' + noSelf: '&cÐе могу оÑадить Ñвою резиденцию!' + isOffline: '&cÐе могу оÑадить, пока владелец не в Ñети!' + cooldown: '&cСлишком быÑтро Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð½Ð¾Ð¹ оÑады Ñтой резиденции! Подождите %1' + info: + years: '&e%1 &6лет ' + oneYear: '&e%1 &6год ' + day: '&e%1 &6дней ' + oneDay: '&e%1 &6день ' + hour: '&e%1 &6чаÑов ' + oneHour: '&e%1 &6Ñ‡Ð°Ñ ' + min: '&e%1 &6мин ' + sec: '&e%1 &6Ñек ' + click: '&7Клик' + server: + land: Server_Land + Flag: + ownColor: '&4' + p1Color: '&2' + p2Color: '&a' + haveColor: '&2' + havePrefix: '' + denyColor: '&4' + denyPrefix: '' + Set: '&eФлаг (&6%1&e) уÑтановлен Ð´Ð»Ñ &6%2 &eна ÑÑ‚Ð°Ñ‚ÑƒÑ &6%3' + SetFailed: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ доÑтупа к флагу &6%1' + CheckTrue: '&eФлаг &6%1 &eотноÑитÑÑ Ðº игроку &6%2 &eв резиденции &6%3&e, значение + = &6%4' + CheckFalse: '&eФлаг &6%1 &eне отноÑитÑÑ Ðº игроку &6%2 &eÐ´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸.' + Cleared: '&eФлаги очищены.' + RemovedAll: '&eÐ’Ñе флаги удалены &6%1 &eв &6%2 &eрезиденции.' + RemovedGroup: '&eÐ’Ñе флаги удалены Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ &6%1 &eв резиденции &6%2 &e.' + Default: '&eФлаги уÑтановлены по умолчанию.' + Deny: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ здеÑÑŒ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ &6%1 &c.' + SetDeny: '&cВладелец не имеет доÑтупа к флагу &6%1' + ChangeDeny: '&cÐ’Ñ‹ не можете изменить ÑоÑтоÑние флага &6%1 &c, пока внутри находÑÑ‚ÑÑ + &6%2 &cигрок(ов).' + ChangedForOne: '&eУÑтановлен флаг &6%1 &eÐ´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%2' + ChangedFor: '&e&eУÑтановлен флаг &6%1 &eÐ´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%2' + reset: '&eУдален флаг Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%1' + resetAll: '&eУдален флаг Ð´Ð»Ñ &6%1 &eрезиденций' + Bank: + NoAccess: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ доÑтупа к банку.' + Name: ' &eБанк: &6%1' + NoMoney: '&cÐедоÑтаточно денег в банке.' + Deposit: '&eÐ’Ñ‹ внеÑли &6%1 &eв банк резиденции.' + Withdraw: '&eÐ’Ñ‹ ÑнÑли &6%1 &eиз банка резиденции.' + Subzone: + Rename: '&eПереименована подзона &6%1 &eв &6%2' + Remove: '&eПодзона &6%1 &eудалена.' + Create: '&eСоздана подзона &6%1' + CreateFail: '&cÐевозможно Ñоздать подзону &6%1' + Exists: '&cПодзона &6%1 &cуже ÑущеÑтвует.' + Collide: '&cПодзона переÑекаетÑÑ Ñ Ð¿Ð¾Ð´Ð·Ð¾Ð½Ð¾Ð¹ &6%1' + MaxAmount: '&cÐ’Ñ‹ доÑтигли макÑимально допуÑтимой Ñуммы подзоны Ð´Ð»Ñ Ñтой резиденции.' + MaxDepth: '&cÐ’Ñ‹ доÑтигли макÑимально допуÑтимой глубины подзоны.' + SelectInside: '&eОбе точки выбора должны быть внутри резиденции.' + CantCreate: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° Ñоздание подзоны резиденции.' + CantDelete: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° удаление подзоны резиденции.' + CantDeleteNotOwnerOfParent: '&cÐ’Ñ‹ не ÑвлÑетеÑÑŒ владельцем родительÑкой резиденции + Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñтой подзоны.' + CantContract: '&cÐ’Ñ‹ не имеете разрешений на контракт подзон резиденции.' + CantExpand: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° раÑширение подзоны резиденции.' + DeleteConfirm: '&eÐ’Ñ‹ уверены, что хотите удалить подзону &6%1&e? Пишите &6/res + confirm &eÐ´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ.' + OwnerChange: '&eУ подзоны &6%1 &eвладелец изменен на &6%2' + Residence: + DontOwn: '&eÐечего показать' + Hidden: ' &e(&6Скрыты&e)' + Bought: '&eÐ’Ñ‹ купили резиденцию &6%1' + Buy: '&6%1 &eкупил у Ð²Ð°Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸ÑŽ &6%2 &e.' + BuyTooBig: '&cЭта Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð¸Ð¼ÐµÐµÑ‚ площадь, превышающую макÑимально допуÑтимую.' + NotForSale: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ продаетÑÑ.' + ForSale: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eпродаетÑÑ Ð·Ð° &6%2' + StopSelling: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð±Ð¾Ð»ÑŒÑˆÐµ не продаетÑÑ.' + TooMany: '&cÐ’Ñ‹ уже владеете макÑимальным количеÑтвом резиденций, которые вам разрешено.' + MaxRent: '&cÐ’Ñ‹ уже арендуете макÑимальное количеÑтво резиденций, которое вам разрешено.' + AlreadyRent: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ ÑƒÐ¶Ðµ Ñдана в аренду ...' + NotForRent: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ ÑдаетÑÑ ...' + NotForRentOrSell: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ Ð´Ð»Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹ или продажи ...' + NotRented: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ Ñдана в аренду.' + Unrent: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eне Ñдана' + RemoveRentable: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eбольше не ÑдаетÑÑ Ð² аренду.' + ForRentSuccess: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eÑдаетÑÑ Ð·Ð° &6%2 &eкаждые &6%3 &eдней.' + RentSuccess: '&eÐ’Ñ‹ арендовали Резиденцию &6%1 &eна &6%2 &eдней.' + EndingRent: '&eÐ’Ñ€ÐµÐ¼Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹ заканчиваетÑÑ Ð´Ð»Ñ &6%1 &eчерез &6%2' + AlreadyRented: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eÑдана в аренду &6%2' + CantAutoPay: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ разрешает автоматичеÑкую оплату, она будет уÑтановлена + на &6false' + AlreadyExists: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ &6%1 &cуже ÑущеÑтвует.' + Create: '&eÐ’Ñ‹ Ñоздали резиденцию &6%1&e!' + Rename: '&eПереименована Ð ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eв &6%2' + Remove: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eудалена...' + CantRemove: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &cне может быть удалена, так как &6%2 &cподзона + вÑе еще арендована игроком &6%3' + MoveDeny: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° движение в резиденции &6%1' + TeleportNoFlag: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ доÑтупа к телепортации Ð´Ð»Ñ Ñтой резиденции.' + FlagDeny: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ &6%1 &cÐ´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%2' + GiveLimits: '&cÐе могу дать резиденцию к выбранному игроку, потому что он находитÑÑ + за пределами целевых игроков.' + GiveConfirm: '&7Ðажмите, чтобы подтвердить &6%1 &7передачу резиденции от &6%2 + &7Ð´Ð»Ñ &6%3' + Give: '&eÐ’Ñ‹ дали резиденцию &6%1 &eигроку &6%2' + Recieve: '&eÐ’Ñ‹ получили резиденцию &6%1 &eот игрока &6%2' + ResList: ' &a%1. &e%2 &e- &6%3 %4&6%5' + List: ' &e%2 &e- &6%3' + TeleportNear: '&eТелепортируемÑÑ Ð² ближайшую резиденцию.' + SetTeleportLocation: '&eРаÑположение Телепорта уÑтановлено...' + PermissionsApply: '&eÐ Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¾ к резиденции.' + NotOwner: '&cÐ’Ñ‹ не ÑвлÑетеÑÑŒ владельцем Ñтой резиденции' + RemovePlayersResidences: '&eУбраны вÑе резиденции, принадлежащие игроку &6%1' + NotIn: '&cÐ’Ñ‹ не в резиденции.' + PlayerNotIn: '&cИгрок Ñтоит не в вашей резиденции.' + Kicked: '&eÐ’Ð°Ñ ÐºÐ¸ÐºÐ½ÑƒÐ»Ð¸ из резиденции' + CantKick: '&eÐе могу кикнуть Ñтого игрока' + In: '&eYou are standing in Residence &6%1' + OwnerChange: '&eÐ’ резиденции &6%1 &eизменилÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ†. Им Ñтал &6%2' + NonAdmin: '&cÐ’Ñ‹ не админиÑтратор резиденции.' + Line: '&eРезиденциÑ: &6%1 ' + RentedBy: '&eÐрендовал: &6%1' + MessageChange: '&eСообщение...' + CantDeleteResidence: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° удаление резиденции.' + CantExpandResidence: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° раÑширение резиденции.' + CantContractResidence: '&cÐ’Ñ‹ не имеете Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° контракт Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸.' + NoResHere: '&cТам нет резиденции.' + OwnerNoPermission: '&cВладелец не имеет Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° Ñто.' + ParentNoPermission: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ прав вноÑить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² родительÑкую зону.' + ChatDisabled: '&eЧат резиденции отключен...' + DeleteConfirm: '&eÐ’Ñ‹ уверены, что хотите удалить резиденцию &6%1&e? пишите &6/res + confirm &eÐ´Ð»Ñ Ð¿Ð¿Ð¾Ð´Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ.' + ChangedMain: '&eИзменена оÑÐ½Ð¾Ð²Ð½Ð°Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ð° &6%1' + LwcRemoved: '&eУдалена &6%1 &eLwc защита за &6%2мÑ' + CanBeRented: '&6%1&e можно взÑÑ‚ÑŒ в аренду за &6%2 &eна &6%3 &eдней. &6/res market + rent' + CanBeBought: '&6%1&e можно купить за &6%2&e. &6/res market buy' + IsForRent: '&6(Ð’ аренду)' + IsForSale: '&6(ПродаетÑÑ)' + IsRented: '&6(Ðрендована)' + Rent: + Disabled: '&cÐренда отключена ...' + DisableRenew: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eбольше не будет ÑдаватьÑÑ Ð¿Ð¾ иÑтечении Ñрока.' + EnableRenew: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eбудет автоматичеÑки продлена по иÑтечении Ñрока.' + NotByYou: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ ÑдаетÑÑ Ð½Ðµ вам.' + isForRent: '&2Ð ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð´Ð¾Ñтупна Ð´Ð»Ñ Ñдачи в аренду.' + MaxRentDays: '&cÐ’Ñ‹ не можете арендовать на Ñрок более &6%1 &cдней.' + OneTime: '&cÐе могу продлить Ñрок аренды Ñтой резиденции.' + Extended: '&eÐренда продлена на &6%1 &eдней Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%2' + Expire: '&eСрок дейÑÑ‚Ð²Ð¸Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹: &6%1' + AutoPayTurnedOn: '&eÐвтооплата &2ВКЛЮЧЕÐÐ' + AutoPayTurnedOff: '&eÐвтооплата &cВЫКЛЮЧЕÐÐ' + ModifyDeny: '&cÐевозможно изменить аренду резиденции.' + Days: '&eДни аренды: &6%1' + Rented: ' &6(Ðрендована)' + RentList: ' &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7' + EvictConfirm: '&eПишите &6/res market confirm &eвыÑелить Ñъемщика из резиденции + &6%1' + UnrentConfirm: '&eПишите &6/res market confirm &eÑнÑÑ‚ÑŒ аренду Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%1' + ReleaseConfirm: '&eПишите &6/res market confirm &eудалить резиденцию &6%1 &eиз + маркета.' + command: + addedAllow: '&eДобавлена Ð½Ð¾Ð²Ð°Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%1 ' + removedAllow: '&eУдалена Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%1 ' + addedBlock: '&eДобавлена Ð½Ð¾Ð²Ð°Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%1 ' + removedBlock: '&eУдалена Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%1 ' + Blocked: '&eЗаблокированные команды: &6%1' + Allowed: '&eРазрешенные команды: &6%1' + Rentable: + Land: '&eÐÑ€ÐµÐ½Ð´ÑƒÐµÐ¼Ð°Ñ Ð—ÐµÐ¼Ð»Ñ: &6' + AllowRenewing: '&eМожно обновить: &6%1' + StayInMarket: '&eÐрендуемое пребывание на рынке: &6%1' + AllowAutoPay: '&eÐÑ€ÐµÐ½Ð´Ð½Ð°Ñ Ð¿Ð»Ð°Ñ‚Ð° позволÑет автооплату: &6%1' + DisableRenew: '&6%1 &eбольше не будет обновлÑÑ‚ÑŒ арендный ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾Ñле иÑÑ‚ÐµÑ‡ÐµÐ½Ð¸Ñ + Ñрока.' + EnableRenew: '&6%1 &eтеперь будет автоматичеÑки обновлÑÑ‚ÑŒ арендный ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾ иÑтечении + Ñрока.' + Economy: + LandForSale: '&eÐ—ÐµÐ¼Ð»Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð°Ð¶Ð¸:' + NotEnoughMoney: '&cÐ’Ñ‹ не имеете доÑтаточно денег.' + MoneyCharged: '&eÐачиÑлено &6%1 &eна ваш Ñчет &6%2 &e.' + MoneyAdded: '&eПолучено &6%1 &eна ваш Ñчет &6%2 &e.' + MoneyCredit: '&eЗачиÑлено &6%1 &eна ваш Ñчет &6%2 &e.' + RentReleaseInvalid: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eне Ñдана и не ÑдаетÑÑ.' + RentSellFail: '&cÐевозможно продать резиденцию, еÑли она ÑдаетÑÑ Ð² аренду.' + SubzoneRentSellFail: '&cÐевозможно продать Резиденцию, еÑли ее подзона Ñдана в + аренду.' + ParentRentSellFail: '&cÐевозможно продать Резиденцию, еÑли ее родительÑÐºÐ°Ñ Ð·Ð¾Ð½Ð° + Ñдана в аренду.' + SubzoneSellFail: '&cÐевозможно продать подзону.' + SellRentFail: '&cÐÐµÐ»ÑŒÐ·Ñ Ð°Ñ€ÐµÐ½Ð´Ð¾Ð²Ð°Ñ‚ÑŒ резиденцию, еÑли она продаетÑÑ.' + ParentSellRentFail: '&cÐÐµÐ»ÑŒÐ·Ñ Ð°Ñ€ÐµÐ½Ð´Ð¾Ð²Ð°Ñ‚ÑŒ Резиденцию, еÑли ее родительÑÐºÐ°Ñ Ð·Ð¾Ð½Ð° + выÑтавлена на продажу.' + OwnerBuyFail: '&cÐе можете купить ÑобÑтвенную землю!' + OwnerRentFail: '&cÐе можете арендовать Ñвою землю!' + AlreadySellFail: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ ÑƒÐ¶Ðµ продаетÑÑ!' + LeaseRenew: '&eÐренда дейÑтвительна до &6%1' + LeaseRenewMax: '&eÐренда продлена до макÑимально допуÑтимого' + LeaseNotExpire: '&eÐет такой аренды, или Ñрок аренды не иÑтекает.' + LeaseRenewalCost: '&eСтоимоÑÑ‚ÑŒ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð±Ð»Ð°Ñти &6%1 &eÑоÑтавлÑет &6%2' + LeaseInfinite: '&eÐ’Ñ€ÐµÐ¼Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹ уÑтановлено на беÑконечное...' + MarketDisabled: '&cЭкономика отключена!' + SellAmount: '&eСумма Продажи: &2%1' + SellList: ' &6%1&e. &6%2 &e(&6%3&e) - &6%4' + LeaseExpire: '&eСрок дейÑÑ‚Ð²Ð¸Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹: &2%1' + LeaseList: '&6%1. &e%2 &2%3 &e%4' + Expanding: + North: '&eРаÑширение на Север &6%1 &eблоков' + West: '&eРаÑширение на Запад &6%1 &eблоков' + South: '&eРаÑширение на Юг &6%1 &eблоков' + East: '&eРаÑширение на ВоÑток &6%1 &eблоков' + Up: '&eРаÑширение Вверх &6%1 &eблоков' + Down: '&eРаÑширение Вниз &6%1 &eблоков' + Contracting: + North: '&eСокращение на Север &6%1 &eблоков' + West: '&eСокращение на Запад &6%1 &eблоков' + South: '&eСокращение на Юг &6%1 &eблоков' + East: '&eСокращение на ВоÑток &6%1 &eблоков' + Up: '&eСокращение Вверх &6%1 &eблоков' + Down: '&eСокращение Вниз &6%1 &eблоков' + Shifting: + North: '&eСдвиг на Север &6%1 &eблоков' + West: '&eСдвиг на Запад &6%1 &eблоков' + South: '&eСдвиг на Юг &6%1 &eблоков' + East: '&eСдвиг на ВоÑток &6%1 &eблоков' + Up: '&eСдвиг Вверх &6%1 &eблоков' + Down: '&eСдвиг Вниз &6%1 &eблоков' + Limits: + PGroup: '&7- &eПрава группы:&3 %1' + RGroup: '&7- &eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹:&3 %1' + Admin: '&7- &eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ðдмина:&3 %1' + CanCreate: '&7- &eМожет Ñоздавать резиденции:&3 %1' + MaxRes: '&7- &eМакÑ. Резиденций:&3 %1' + MaxEW: '&7- &eМакÑ. Размер ВоÑток/Запад:&3 %1' + MaxNS: '&7- &eМакÑ. Размер Север/Юг:&3 %1' + MaxUD: '&7- &eМакÑ. Размер Вверх/Вниз:&3 %1' + MinMax: '&7- &eМин./МакÑ. Ð’Ñ‹Ñота Защиты:&3 %1 to %2' + MaxSubzones: '&7- &eМакÑ. Подзон:&3 %1' + MaxSubDepth: '&7- &eМакÑ. глубина подзоны:&3 %1' + MaxRents: '&7- &eМакÑ. Ðренд:&3 %1' + MaxRentDays: ' &eМакÑ. Ðрендных дней:&3 %1' + EnterLeave: '&7- &eМожно уÑтановить вход/выход ÑообщениÑ:&3 %1' + NumberOwn: '&7- &eКоличеÑтво ваших резиденций:&3 %1' + Cost: '&7- &eСтоимоÑÑ‚ÑŒ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð·Ð° блок:&3 %1' + Sell: '&7- &eСтоимоÑÑ‚ÑŒ продажи резиденции за блок:&3 %1' + Flag: '&7- &eРазрешенные флаги:&3 %1' + MaxDays: '&7- &eМакÑ. количеÑтво дней аренды:&3 %1' + LeaseTime: '&7- &eÐ’Ñ€ÐµÐ¼Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹, предоÑтавлÑемое при продлении:&3 %1' + RenewCost: '&7- &eСтоимоÑÑ‚ÑŒ Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð° блок:&3 %1' + Gui: + Set: + Title: '&6%1 флаги' + Pset: + Title: '&6%1 %2 флаги' + Actions: + - '&2Левый клик, чтобы включить' + - '&cПравый клик, чтобы выключить' + - '&eШифт+Левый клик, чтобы удалить' + InformationPage: + TopLine: '&e---< &a %1 &e >---' + Page: '&e-----< &6%1 &e>-----' + NextPage: '&e-----< &6%1 &e>-----' + NoNextPage: '&e-----------------------' + GeneralList: '&2 %1 &6- &e%2' + FlagsList: '&2 %1 &6- &e%2' + SmallSeparator: '&6------' + Chat: + ChatChannelChange: '&eИзменен канал чата резиденции на &6%1!' + ChatChannelLeave: '&eВыход из чата зезиденции' + JoinFirst: '&4ПриÑоединение к первому каналу чата резиденции...' + InvalidChannel: '&4Ðеверный канал...' + InvalidColor: '&4Ðеверный цветовой код' + NotInChannel: '&4Игрок не находитÑÑ Ð² канале чата' + Kicked: '&6%1 &eкикнут из канала чата &6%2 ' + InvalidPrefixLength: '&4ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ð¹. ДопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð°: %1' + ChangedColor: '&eЦвет канала чата резиденции изменен на %1' + ChangedPrefix: '&eÐŸÑ€ÐµÑ„Ð¸ÐºÑ ÐºÐ°Ð½Ð°Ð»Ð° чата резиденции изменен на %1' + Shop: + ListTopLine: '&6%1 &eСпиÑок магазинов - Страница &6%2 &eиз &6%3 %4' + List: ' &e%1. &6%2 &e(&6%3&e) %4' + ListVoted: '&e%1 (&6%2&e)' + ListLiked: '&7Лайки: &7%1' + VotesTopLine: '&6%1 &e%2 ÑпиÑок голоÑов &6- &eСтраница &6%3 &eиз &6%4 %5' + VotesList: ' &e%1. &6%2 &e%3 &7%4' + NoDesc: '&6Без опиÑаниÑ' + Desc: |- + &6Description: + %1 + DescChange: '&6ОпиÑание изменено на: %1' + NewBoard: '&6УÑпешно добавлена Ð½Ð¾Ð²Ð°Ñ Ð²Ñ‹Ð²ÐµÑка магазина' + BoardExist: '&cВывеÑка магазина уже ÑущеÑтвует в Ñтом меÑте' + DeleteBoard: '&6Правй клик по табличке, которую вы хотите удалить' + DeletedBoard: '&6ВывеÑка магазина удалена' + IncorrectBoard: '&cЭто не вывеÑка магазина, попробуйте выполнить команду еще раз + и нажмите по нужной табличке' + InvalidSelection: '&cЛевый клик Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ инÑтрумента Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ð²ÐµÑ€Ñ…Ñƒ Ñлева, + а затем правый клик внизу Ñправа' + ToBigSelection: '&cВаш выбор Ñлишком велик, макÑимально допуÑтимо 16 блоков' + ToDeapSelection: '&cВаш выбор Ñлишком глубокий, макÑимально допуÑтимо - 16x16x1 + блок' + VoteChanged: '&6ГолоÑование изменено Ñ &e%1 &6на &e%2 &6Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &e%3 ' + Voted: '&6Ð’Ñ‹ проголоÑовали и дали &e%1 &6голоÑ(ов) Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &e%2 ' + Liked: '&6Вам нравитÑÑ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &e%1 ' + AlreadyLiked: '&6Вам уже нравитÑÑ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &e%1 ' + NoVotes: '&cÐ”Ð»Ñ Ñтой резиденции нет зарегиÑтрированных голоÑов' + CantVote: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ имеет флаг магазина уÑтановлен в true' + VotedRange: '&6Диапазон голоÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚ &e%1 &6до &e%2' + SignLines: + '1': '&e--== &8%1 &e==--' + '2': '&9%1' + '3': '&4%1' + '4': '&8%1&e (&8%2&e)' + Likes4: '&9Лайки: &8%2' + RandomTeleport: + TpLimit: '&eÐ’Ñ‹ не можете телепортироватьÑÑ Ñ‚Ð°Ðº быÑтро, пожалуйÑта, подождите &6%1 + &eÑекунд и попробуйте Ñнова' + TeleportSuccess: '&eÐ¢ÐµÐ»ÐµÐ¿Ð¾Ñ€Ñ‚Ð°Ñ†Ð¸Ñ Ð² позицию X:&6%1&e, Y:&6%2&e, Z:&6%3 ' + IncorrectLocation: '&6Ðе удалоÑÑŒ найти правильное меÑтоположение телепортации, + подождите &e%1 &6Ñек и повторите попытку.' + Disabled: '&cÐ Ð°Ð½Ð´Ð¾Ð¼Ð½Ð°Ñ Ñ‚ÐµÐ»ÐµÐ¿Ð¾Ñ€Ñ‚Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° в Ñтом мире' + TeleportStarted: '&eÐ¢ÐµÐ»ÐµÐ¿Ð¾Ñ€Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°ÑÑŒ, не двигайтеÑÑŒ &6%4 &eÑекунд.' + WorldList: '&eВозможные миры: &6%1' + Permissions: + variableColor: '&f' + permissionColor: '&6' + cmdPermissionColor: '&2' + General: + DisabledWorld: '&cПлагин Residence отключен в Ñтом мире' + UseNumbers: '&cПожалуйÑта, иÑпользуйте номерs...' + # Replace all text with '' to disable this message + CantPlaceLava: '&cÐ’Ñ‹ не можете размеÑтить лаву за пределами резиденции и выше + ÑƒÑ€Ð¾Ð²Ð½Ñ Ð±Ð»Ð¾ÐºÐ° &6%1 ' + # Replace all text with '' to disable this message + CantPlaceWater: '&cÐ’Ñ‹ не можете размеÑтить воду за пределами резиденции и выше + ÑƒÑ€Ð¾Ð²Ð½Ñ Ð±Ð»Ð¾ÐºÐ° &6%1 ' + CantPlaceChest: '&cÐ’Ñ‹ не можете размеÑтить Ñундук в Ñтом меÑте' + NoPermission: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° Ñто.' + info: + NoPlayerPermission: '&c[playerName] не имеет Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ [permission]' + NoCmdPermission: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° Ñту команду.' + DefaultUsage: '&eПишите &6/%1 ? &eÐ´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации' + MaterialGet: '&eÐ˜Ð¼Ñ Ð¼Ð°Ñ‚ÐµÑ€Ð¸Ð°Ð»Ð° Ð´Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° &6%1 &eÑоÑтавлÑет &6%2' + MarketList: '&e---- &6СпиÑок рынков &e----' + Separator: '&e----------------------------------------------------' + AdminOnly: '&cТолько админиÑтраторы имеют доÑтуп к Ñтой команде.' + InfoTool: '&e- ИнÑтрумент информации: &6%1' + ListMaterialAdd: '&6%1 &eдобавлен в резиденцию &6%2' + ListMaterialRemove: '&6%1 &eудален из резиденции &6%2' + ItemBlacklisted: '&cÐ’Ñ‹ попали в черный ÑпиÑок из за иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого предмета' + WorldPVPDisabled: '&cPVP в мире откл.' + NoPVPZone: '&cÐет PVP зоны.' + NoFriendlyFire: '&cОгонь по Ñвоим отключен' + InvalidHelp: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñтраница Ñправки.' + TeleportDeny: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ доÑтупа к телепорту.' + TeleportSuccess: '&eТелепортациÑ!' + TeleportConfirm: '&cЭтот телепорт небезопаÑен, вы упадете на &6%1 блоки. ИÑпользуйте + &6/res tpconfirm Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ‚ÐµÐ»ÐµÐ¿Ð¾Ñ€Ñ‚Ð°Ñ†Ð¸Ð¸ в любом Ñлучае' + TeleportStarted: '&eÐ¢ÐµÐ»ÐµÐ¿Ð¾Ñ€Ñ‚Ð°Ñ†Ð¸Ñ Ð² &6%1 &eначалаÑÑŒ, не двигайтеÑÑŒ &6%2 &eÑек.' + TeleportTitle: '&eТелепортациÑ!' + TeleportTitleTime: '&6%1' + TeleportCanceled: '&eÐ¢ÐµÐ»ÐµÐ¿Ð¾Ñ€Ñ‚Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð¼ÐµÐ½ÐµÐ½Ð°!' + NoTeleportConfirm: '&eÐет телепортов, ожидающих подтверждениÑ!' + HelpPageHeader: '&eСправочные Ñтраницы - &6%1 &e- Страница <&6%2 &eиз &6%3&e>' + ListExists: '&cСпиÑок уже ÑущеÑтвует...' + ListRemoved: '&eСпиÑок удален...' + ListCreate: '&eСоздан ÑпиÑок &6%1' + PhysicalAreas: '&eФизичеÑкие облаÑти' + CurrentArea: '&eÐ¢ÐµÐºÑƒÑ‰Ð°Ñ Ð·Ð¾Ð½Ð°: &6%1' + TotalResSize: '&eОбщий размер: &6%1m³ (%2m²)' + TotalWorth: '&eÐžÐ±Ñ‰Ð°Ñ ÑтоимоÑÑ‚ÑŒ резиденции: &6%1 &e(&6%2&e)' + TotalSubzones: '&eПодзоны в резиденции: &6%1 &e(&6%2&e)' + NotOnline: '&eЦелевой игрок должен быть онлайн.' + NextInfoPage: '&2| &eÐ¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð¡Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð° &2>>>' + PrevInfoPage: '&2<<< &eÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð¡Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð° &2|' + GenericPages: '&eСтраница &6%1 &eиз &6%2 &e(&6%3&e)' + WorldEditNotFound: '&cWorldEdit не был обнаружен.' + CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + AdminToggleTurnOn: '&eÐвтоматичеÑкий реÑадмин переключен на &6ВКЛ' + AdminToggleTurnOff: '&eÐвтоматичеÑкий реÑадмин переключен на &6ВЫКЛ' + NoSpawn: '&eУ Ð²Ð°Ñ Ð½ÐµÑ‚ разрешений на перемещение к вашей точке Ñпавна. Перемещение' + CompassTargetReset: '&eВаш ÐºÐ¾Ð¼Ð¿Ð°Ñ Ñброшен' + CompassTargetSet: '&eВаш ÐºÐ¾Ð¼Ð¿Ð°Ñ Ñ‚ÐµÐ¿ÐµÑ€ÑŒ указывает на &6%1' + Ignorelist: '&2Игнор ÑпиÑок:&6' + Blacklist: '&cЧерный ÑпиÑок:&6' + LandCost: '&eСтоимоÑÑ‚ÑŒ земли: &6%1' + 'True': '&2ВКЛ' + 'False': '&cОТКЛ' + Removed: '&6Удаление' + FlagState: '&eÐ¡Ñ‚Ð°Ñ‚ÑƒÑ Ñ„Ð»Ð°Ð³Ð°: %1' + Land: '&eЗемлÑ: &6%1' + Cost: '&eСтоимоÑÑ‚ÑŒ: &6%1 &eза &6%2 &eдней' + Status: '&eСтатуÑ: %1' + Available: '&2ДоÑтупно' + Size: ' &eРазмер: &6%1' + ResidenceFlags: '&eФлаги резиденции: &6%1' + PlayersFlags: '&Флаги игроков: &6%1' + GroupFlags: '&eГрупповые флаги: &6%1' + OthersFlags: '&eДругие флаги: &6%1' + Moved: '&eДвижение...' + Name: '&eÐазвание: &6%1' + Lists: '&eСпиÑки: &6' + Residences: '&eРезиденции&6' + CreatedOn: '&eСоздатель: &6%1' + Owner: '&eВладелец: &6%1' + World: '&eМир: &6%1' + Subzones: '&eПодзона' + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. + NewPlayerInfo: '&eЕÑли вы хотите Ñоздать охранÑемую территорию Ð´Ð»Ñ Ñвоего дома, + иÑпользуйте деревÑнный топор, чтобы выбрать противоположные Ñтороны вашего дома, + и выполните команду /res create ÐазваниеВашейРезиденции' +CommandHelp: + Description: Содержит помощь Ð´Ð»Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð° Residence + SubCommands: + res: + Description: Ð“Ð»Ð°Ð²Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° резиденции + Info: + - '&2Пишите &6/res [команда] ? <Ñтраница> &2Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра дополнительной информации.' + SubCommands: + auto: + Description: Создание макÑимально допуÑтимую резиденцию вокруг Ð²Ð°Ñ + Info: + - '&eПишите: &6/res auto (ÐазваниеРезиденции) (радиуÑ)' + select: + Description: Команды Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ + Info: + - Эта команда выбирает облаÑти Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸. + - /res select [x] [y] [z] - выбирает Ñ€Ð°Ð´Ð¸ÑƒÑ Ð±Ð»Ð¾ÐºÐ¾Ð², Ñ Ð²Ð°Ð¼Ð¸ в Ñередине. + SubCommands: + coords: + Description: Показать выбранные координаты + Info: + - '&eПишите: &6/res select coords' + size: + Description: Показать выбранный размер + Info: + - '&eПишите: &6/res select size' + auto: + Description: Включает инÑтрумент автоматичеÑкого выбора + Info: + - '&eПишите: &6/res select auto [playername]' + cost: + Description: Показать ÑтоимоÑÑ‚ÑŒ выбора + Info: + - '&eПишите: &6/res select cost' + vert: + Description: РаÑширить выделение по вертикали + Info: + - '&eПишите: &6/res select vert' + - РаÑширит выбор наÑтолько выÑоко, наÑколько возможно. + sky: + Description: РаÑширить выделение до неба + Info: + - '&eПишите: &6/res select sky' + - РаÑширÑетÑÑ Ð½Ð°Ñтолько выÑоко, наÑколько вам позволено. + bedrock: + Description: РаÑширить выбор до бедрока + Info: + - '&eПишите: &6/res select bedrock' + - РаÑширÑетÑÑ Ð½Ð°Ñтолько низко, наÑколько вам позволено. + expand: + Description: РаÑширить выделение по направлению. + Info: + - '&eПишите: &6/res select expand <количеÑтво>' + - Увеличивает <количеÑтво> в направлении вашего взглÑда. + shift: + Description: Сдвиг выбора в направлении + Info: + - '&eПишите: &6/res select shift <количеÑтво>' + - Выдвигает ваш выбор на <количеÑтво> в направлении вашего взглÑда. + chunk: + Description: Выберите чанк, в котором вы ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚ÐµÑÑŒ. + Info: + - '&eПишите: &6/res select chunk' + - Выбирает чанк, в котором вы ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚ÐµÑÑŒ. + residence: + Description: Выберите ÑущеÑтвующий район в резиденции. + Info: + - '&eПишите: &6/res select residence <резиденциÑ>' + - Выбирает ÑущеÑтвующую площадь в резиденции. + worldedit: + Description: УÑтановите выбор, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ выбор WorldEdit. + Info: + - '&eПишите: &6/res select worldedit' + - УÑтановите выбор, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ выбор WorldEdit. + padd: + Description: Добавить игрока в резиденцию. + Info: + - '&eПишите: &6/res padd <резиденциÑ> [игрок]' + - ДобавлÑет необходимые флаги Ð´Ð»Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ° + signconvert: + Description: Преобразует таблички из плагина ResidenceSign + Info: + - '&eПишите: &6/res signconvert' + - ПоÑтараюÑÑŒ преобразовать Ñохраненные данные таблички из Ñтороннего плагина + listallhidden: + Description: СпиÑок вÑех Ñкрытых резиденций + Info: + - '&eПишите: &6/res listhidden <Ñтраница>' + - СпиÑок вÑех Ñкрытых резиденций на Ñервере. + bank: + Description: УправлÑÑ‚ÑŒ деньгами в резиденции + Info: + - '&eПишите: &6/res bank [deposit/withdraw] <резиденциÑ> [количеÑтво]' + - Ð’Ñ‹ должны ÑтоÑÑ‚ÑŒ в резиденции или указать название резиденции + - У Ð²Ð°Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ быть флаг + bank. + create: + Description: Создать Резиденцию + Info: + - '&eПишите: &6/res create <название>' + listall: + Description: СпиÑок вÑех резиденций + Info: + - '&eПишите: &6/res listall <Ñтраница> <мир> <-a/-f>' + - СпиÑки вÑех резиденций + info: + Description: Показать информацию о резиденции. + Info: + - '&eПишите: &6/res info <резиденциÑ>' + - ОÑтавьте <резиденциÑ>, чтобы отобразить информацию о резиденции, в которой + вы ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚ÐµÑÑŒ. + area: + Description: Управление физичеÑкими зонами Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸. + SubCommands: + list: + Description: СпиÑок физичеÑких зон в резиденции + Info: + - '&eПишите: &6/res area list [резиденциÑ] <Ñтраница>' + listall: + Description: СпиÑок координат и Ð´Ñ€ÑƒÐ³Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð´Ð»Ñ Ð¾Ð±Ð»Ð°Ñтей + Info: + - '&eПишите: &6/res area listall [резиденциÑ] <Ñтраница>' + add: + Description: Добавьте физичеÑкие облаÑти к резиденции + Info: + - '&eПишите: &6/res area add [резиденциÑ] [ID облаÑти]' + - Сначала вы должны выбрать две точки. + remove: + Description: Удалить физичеÑкие зоны из резиденции + Info: + - '&eПишите: &6/res area remove [резиденциÑ] [ID облаÑти]' + replace: + Description: Заменить физичеÑкие зоны в резиденции + Info: + - '&eПишите: &6/res area replace [резиденциÑ] [ID облаÑти]' + - Сначала вы должны выбрать две точки. + - Замена облаÑти будет взимать разницу в размере, еÑли Ð½Ð¾Ð²Ð°Ñ Ð¾Ð±Ð»Ð°ÑÑ‚ÑŒ + больше. + give: + Description: Дайте резиденцию игроку. + Info: + - '&eПишите: &6/res give <название резиденции> [игрок] <-s>' + - ПредоÑтавлÑет вашу резиденцию целевому игроку + renamearea: + Description: Переименовать название облаÑти Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ + Info: + - '&eПишите: &6/res removeworld [резиденциÑ] [oldAreaName] [newAreaName]' + contract: + Description: Контракты резиденции в направлении, котором вы ищете + Info: + - '&eПишите: &6/res contract (резиденциÑ) [количеÑтво]' + - Contracts residence in direction you looking. + - Residence name is optional + check: + Description: Check flag state for you + Info: + - '&eПишите: &6/res check [резиденциÑ] [флаг] (игрок)' + gset: + Description: УÑтановите флаги Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ð¾Ð¹ группы резиденции + Info: + - '&eПишите: &6/res gset <резиденциÑ> [группа] [флаг] [true/false/remove]' + - Чтобы увидеть ÑпиÑок флагов, иÑпользуйте /res flags ? + list: + Description: СпиÑок резиденций + Info: + - '&eПишите: &6/res list <игрок> <Ñтраница> <мир>' + - ПеречиÑлÑет вÑе резиденции, которыми владеет игрок (кроме Ñкрытых). + - ЕÑли Ñто ÑпиÑок ваших ÑобÑтвенных резиденций, то показывает также Ñкрытые. + - Чтобы перечиÑлить вÑе резиденции, иÑпользуйте /res listall. + version: + Description: Узнать верÑию плагина + Info: + - '&eПишите: &6/res version' + tool: + Description: Показывает выбор резиденции и Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ñ… инÑтрументов + Info: + - '&eПишите: &6/res tool' + pdel: + Description: Удалить игрока из резиденции. + Info: + - '&eПишите: &6/res pdel <резиденциÑ> [игрок]' + - Убирает необходимые флаги Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ° + market: + Description: Купить, продать или арендовать резиденцию + Info: + - '&eПишите: &6/res market ? Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐµÐ¹ информации' + SubCommands: + Info: + Description: Получить информацию о Ñкономике резиденции. + Info: + - '&eПишите: &6/res market Info [резиденциÑ]' + - Показывает, еÑли Ð ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð´Ð°ÐµÑ‚ÑÑ Ð¸Ð»Ð¸ ÑдаетÑÑ, и ÑтоимоÑÑ‚ÑŒ. + list: + Description: СпиÑки арендуемых и резиденций на продажу. + Info: + - '&eПишите: &6/res market list [rent/sell]' + SubCommands: + rent: + Description: СпиÑки арендуемых резиденций. + Info: + - '&eПишите: &6/res market list rent' + sell: + Description: СпиÑки резиденций Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð°Ð¶Ð¸. + Info: + - '&eПишите: &6/res market list sell' + sell: + Description: Продать резиденцию + Info: + - '&eПишите: &6/res market sell [резиденциÑ] [количеÑтво]' + - Ð’Ñ‹ÑтавлÑет резиденцию на продажу за [количеÑтво] денег. + - Другой игрок может купить резиденцию командой /res market buy + sign: + Description: УÑтановить табличку рынка + Info: + - '&eПишите: &6/res market sign [резиденциÑ]' + - УÑтанавливает табличку рынка, на которую вы Ñмотрите. + buy: + Description: Купить резиденцию + Info: + - '&eПишите: &6/res market buy [резиденциÑ]' + - Покупает резиденцию, еÑли она Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð°Ð¶Ð¸. + unsell: + Description: ОÑтанавливает продажу резиденции + Info: + - '&eПишите: &6/res market unsell [резиденциÑ]' + rent: + Description: Ðрендовать резиденцию + Info: + - '&eПишите: &6/res market rent [резиденциÑ] ' + - Ðрендует резиденцию. Ðвтообновление может быть как иÑтинным, так и + ложным. ЕÑли Ñто правда, меÑто жительÑтва будет автоматичеÑки повторно + Ñдано в аренду по иÑтечении Ñрока, еÑли владелец Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð» + Ñто. + rentable: + Description: Сделать резиденцию арендуемой. + Info: + - '&eПишите: &6/res market rentable [резиденциÑ] [ÑтоимоÑÑ‚ÑŒ] [дни] + ' + - Делает жилье арендуемым за [ÑтоимоÑÑ‚ÑŒ] денег за каждые [дни] количеÑтво + дней. + - ЕÑли имеет значение true, Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ñможет быть Ñдана + в аренду еще раз до иÑÑ‚ÐµÑ‡ÐµÐ½Ð¸Ñ Ñрока аренды. + - ЕÑли имеет значение true, Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð¾ÑтанетÑÑ Ð½Ð° рынке + поÑле того, как поÑледний арендатор будет удален. + - ЕÑли имеет значение true, деньги за аренду будут автоматичеÑки + ÑниматьÑÑ Ñ Ð±Ð°Ð»Ð°Ð½Ñа игроков, еÑли он выбрал Ñту опцию при аренде + autopay: + Description: УÑтанавливает автоплатеж резиденции на заданное значение + Info: + - '&eПишите: &6/res market autopay <резиденциÑ> [true/false]' + payrent: + Description: Оплачивает арендную плату за определенную резиденцию + Info: + - '&eПишите: &6/res market payrent <резиденциÑ>' + confirm: + Description: Подтверждает дейÑтвие ÑÐ½Ð¸Ñ‚Ð¸Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹ или оÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ + Info: + - '&eПишите: &6/res market confirm' + unrent: + Description: СнÑÑ‚ÑŒ резиденцию Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹ или Ñдачи в аренду. + Info: + - '&eПишите: &6/res market unrent [резиденциÑ]' + - ЕÑли вы арендатор, Ñта команда Ñнимает арендную плату за дом Ð´Ð»Ñ Ð²Ð°Ñ. + - ЕÑли вы владелец, Ñта команда больше не Ñдает резиденцию. + rc: + Description: ПриÑоединÑетÑÑ Ðº текущему или заданному чату резиденции + Info: + - '&eПишите: &6/res rc (резиденциÑ)' + - ПриÑоединÑет к общему чату резиденции + SubCommands: + leave: + Description: ОтÑоединитьÑÑ Ð¾Ñ‚ общего чата резиденции + Info: + - '&eПишите: &6/res rc leave' + - ЕÑли вы находитеÑÑŒ в канале резиденции, то покинете его. + setcolor: + Description: УÑтанавливить цвет текÑта канала чата резиденции + Info: + - '&eПишите: &6/res rc setcolor [код цвета]' + - УÑтанавливает цвет текÑта канала чата резиденции + setprefix: + Description: УÑтанавливить Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ ÐºÐ°Ð½Ð°Ð»Ð° чата резиденции + Info: + - '&eПишите: &6/res rc setprefix [префикÑ]' + - УÑтанавливает Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ ÐºÐ°Ð½Ð°Ð»Ð° чата резиденции + kick: + Description: Кикнуть игрока Ñ ÐºÐ°Ð½Ð°Ð»Ð° + Info: + - '&eПишите: &6/res rc kick [игрок]' + - Кикает игрока Ñ ÐºÐ°Ð½Ð°Ð»Ð° + expand: + Description: РаÑширить резиденцию в направлении, в которое вы Ñмотрите + Info: + - '&eПишите: &6/res expand (резиденциÑ) [количеÑтво]' + - РаÑширÑет резиденцию в направлении, в которое вы Ñмотрите + - Ðазвание резиденции необÑзательно + compass: + Description: УÑтановить указатель компаÑа на резиденцию + Info: + - '&eПишите: &6/res compass <резиденциÑ>' + lists: + Description: СпиÑки разрешений + Info: + - Предопределенные разрешениÑ, которые могут быть применены к резиденции. + SubCommands: + add: + Description: Добавить ÑпиÑок + Info: + - '&eПишите: &6/res lists add <название>' + remove: + Description: Удалить ÑпиÑок + Info: + - '&eПишите: &6/res lists remove <название>' + apply: + Description: Применить ÑпиÑок к резиденции + Info: + - '&eПишите: &6/res lists apply <название> <резиденциÑ>' + set: + Description: УÑтановить флаг + Info: + - '&eПишите: &6/res lists set <название> <флаг> <значение>' + pset: + Description: УÑтановить флаг игроку + Info: + - '&eПишите: &6/res lists pset <название> <игрок> <флаг> <значение>' + gset: + Description: УÑтановить флаг группе + Info: + - '&eПишите: &6/res lists gset <название> <группа> <флаг> <значение>' + view: + Description: ПроÑмотр ÑпиÑка. + Info: + - '&eПишите: &6/res lists view <название>' + reset: + Description: СброÑить флаги резиденции по умолчанию. + Info: + - '&eПишите: &6/res reset <резиденциÑ/all>' + - СбраÑывает флаги резиденции на их Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию. Ð’Ñ‹ должны быть + владельцем или админиÑтратором, чтобы Ñделать Ñто. + listhidden: + Description: СпиÑок Ñкрытых резиденций + Info: + - '&eПишите: &6/res listhidden <игрок> <Ñтраница>' + - СпиÑок Ñкрытых резиденций игрока + setmain: + Description: УÑтанавливить резиденцию в качеÑтве оÑновной, чтобы отображатьÑÑ + в чате в качеÑтве префикÑа + Info: + - '&eПишите: &6/res setmain (резиденциÑ)' + - УÑтанавливает определенное резиденцию в качеÑтве оÑновной. + server: + Description: Отметить земелю Ñервера в ÑобÑтвенноÑти. + Info: + - '&eПишите: &6/resadmin server [резиденциÑ]' + - Стать владельцем резиденции Ñервера. + rt: + Description: ТелепортироватьÑÑ Ð² Ñлучайное меÑто в мире + Info: + - '&eПишите: &6/res rt (мир) (игрок)' + - ТелепортируйтеÑÑŒ в Ñлучайное меÑто в мире + mirror: + Description: Копирование Флагов + Info: + - '&eПишите: &6/res mirror [1 резиденциÑ] [2 резиденциÑ]' + - Копируйте флаги из одной резиденции в другую. Ð’Ñ‹ должны быть владельцем + обоих или админиÑтратором, чтобы Ñделать Ñто. + shop: + Description: УправлÑÑ‚ÑŒ магазином резиденции + Info: + - УправлÑйте магазином резиденции + SubCommands: + list: + Description: Показывает ÑпиÑок магазинов + Info: + - '&eПишите: &6/res shop list' + - Показывает полный ÑпиÑок вÑех резиденций Ñ Ñ„Ð»Ð°Ð³Ð¾Ð¼ магазина + vote: + Description: ПроголоÑуй за магазин резиденции + Info: + - '&eПишите: &6/res shop vote <резиденциÑ> [количеÑтво]' + - ГолоÑа за текущую или определенную резиденцию + like: + Description: Дать лайк Ð´Ð»Ñ Ð¼Ð°Ð³Ð°Ð·Ð¸Ð½Ð° резиденции + Info: + - '&eПишите: &6/res shop like <резиденциÑ>' + - Gives like for residence shop + votes: + Description: Показать голоÑа магазина + Info: + - '&eПишите: &6/res shop votes <резиденциÑ> <Ñтраница>' + - Показывает полный ÑпиÑок голоÑов магазина текущей или определенной + резиденции + likes: + Description: Показать лайки магазина + Info: + - '&eПишите: &6/res shop likes <резиденциÑ> <Ñтраница>' + - Показывает полный ÑпиÑок лайков магазина текущей или определенной + резиденции + setdesc: + Description: УÑтанавливает опиÑание магазина резиденции + Info: + - '&eПишите: &6/res shop setdesc [текÑÑ‚]' + - УÑтанавливает опиÑание магазина резиденции. Цветовой код поддерживаетÑÑ. + Ð”Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ Ñтроки иÑпользуйте /n + createboard: + Description: Создать вывеÑку магазина + Info: + - '&eПишите: &6/res shop createboard [place]' + - Создает вывеÑку магазина из выбранной облаÑти. place - позициÑ, Ñ + которой начинаетÑÑ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ вывеÑки + deleteboard: + Description: Удалить вывеÑку магазина + Info: + - '&eПишите: &6/res shop deleteboard' + - УдалÑет вывеÑку магазина правым кликом по табличке + lset: + Description: Изменить параметры черного ÑпиÑка и ÑпиÑка игнорируемых + Info: + - '&eПишите: &6/res lset <резиденциÑ> [blacklist/ignorelist] [material]' + - '&eПишите: &6/res lset <резиденциÑ> Info' + - Blacklisting a material prevents it from being placed in the residence. + - Ignorelist causes a specific material to not be protected by Residence. + pset: + Description: Set flags on a specific player for a Residence. + Info: + - '&eПишите: &6/res pset <резиденциÑ> [игрок] [флаг] [true/false/remove]' + - '&eПишите: &6/res pset <резиденциÑ> [игрок] removeall' + - Чтобы увидеть ÑпиÑок флагов, иÑпользуйте /res flags ? + show: + Description: Показать границы резиденции + Info: + - '&eПишите: &6/res show <резиденциÑ>' + flags: + Description: СпиÑок флагов + Info: + - Ð”Ð»Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ флага true разрешает дейÑтвие, а false запрещает дейÑтвие. + SubCommands: + anvil: + Translated: anvil + Description: Разрешает или запрещает взаимодейÑтвие Ñ Ð½Ð°ÐºÐ¾Ð²Ð°Ð»ÑŒÐ½ÐµÐ¹ + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> anvil true/false/remove' + admin: + Translated: admin + Description: Дает игроку разрешение на Ñмену флагов по меÑту жительÑтва + Info: + - '&eПишите: &6/res pset <резиденциÑ> admin true/false/remove' + animalkilling: + Translated: animalkilling + Description: Разрешает или запрещает убийÑтво животных + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> animalkilling true/false/remove' + animals: + Translated: animals + Description: Разрешает или запрещает порождение животных + Info: + - '&eПишите: &6/res set <резиденциÑ> animals true/false/remove' + anvilbreak: + Translated: anvilbreak + Description: Разрешает или запрещает наковальню в резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> anvilbreak true/false/remove' + backup: + Translated: backup + Description: ЕÑли уÑтановлено значение true, воÑÑтанавливает предыдущий + вид облаÑти (требуетÑÑ WordEdit) + Info: + - '&eПишите: &6/res set <резиденциÑ> backup true/false/remove' + bank: + Translated: bank + Description: Разрешает или запрещает вводить / выводить деньги из банка + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> bank true/false/remove' + bed: + Translated: bed + Description: Разрешает или запрещает игрокам иÑпользовать кровати + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> bed true/false/remove' + beacon: + Translated: beacon + Description: Разрешает или запрещает взаимодейÑтвие Ñ Ð¼Ð°Ñком + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> beacon true/false/remove' + brew: + Translated: brew + Description: ПозволÑет или запрещает игрокам иÑпользовать варочные Ñтойки + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> brew true/false/remove' + build: + Translated: build + Description: Разрешает или запрещает ÑтроительÑтво + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> build true/false/remove' + burn: + Translated: burn + Description: Разрешает или запрещает Ñжигание мобов в резиденциÑÑ… + Info: + - '&eПишите: &6/res set <резиденциÑ> burn true/false/remove' + button: + Translated: button + Description: ПозволÑет или запрещает игрокам иÑпользовать кнопки + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> button true/false/remove' + cake: + Translated: cake + Description: ПозволÑет или запрещает игрокам еÑÑ‚ÑŒ торт + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> cake true/false/remove' + canimals: + Translated: canimals + Description: Разрешает или запрещает неÑтандартное поÑвление животных + Info: + - '&eПишите: &6/res set <резиденциÑ> canimals true/false/remove' + chorustp: + Translated: chorustp + Description: Разрешить или запретить телепортировку в резиденцию Ñ Ñ„Ñ€ÑƒÐºÑ‚Ð°Ð¼Ð¸ + хора + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> chorustp true/false/remove' + chat: + Translated: chat + Description: ПозволÑет приÑоединитьÑÑ Ðº чату резиденции + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> chat true/false/remove' + cmonsters: + Translated: cmonsters + Description: Разрешает или запрещает Ñоздание монÑтров + Info: + - '&eПишите: &6/res set <резиденциÑ> cmonsters true/false/remove' + commandblock: + Translated: commandblock + Description: Разрешает или запрещает взаимодейÑтвие Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð½Ñ‹Ð¼Ð¸ блоками + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> commandblock true/false/remove' + command: + Translated: command + Description: Разрешает или запрещает иÑпользование команды в резиденциÑÑ… + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> command true/false/remove' + container: + Translated: container + Description: Разрешает или запрещает иÑпользование печей, Ñундуков и + Ñ‚.д... + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> container true/false/remove' + coords: + Translated: coords + Description: Скрывает координаты резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> coords true/false/remove' + craft: + Translated: craft + Description: Разрешает table, enchant, brew флаги + Info: + - '&eПишите: &6/res set <резиденциÑ> craft true/false/remove' + creeper: + Translated: creeper + Description: Разрешить или запретить взрывы крипера + Info: + - '&eПишите: &6/res set <резиденциÑ> creeper true/false/remove' + dragongrief: + Translated: dragongrief + Description: Запрещает Дракону ломать блоки + Info: + - '&eПишите: &6/res set <резиденциÑ> dragongrief true/false/remove' + day: + Translated: day + Description: УÑтанавливает дневное Ð²Ñ€ÐµÐ¼Ñ Ð² резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> day true/false/remove' + dye: + Translated: dye + Description: Разрешает или запрещает покраÑку овец + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> dye true/false/remove' + damage: + Translated: damage + Description: Разрешает или запрещает урон ÑущноÑти в резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> damage true/false/remove' + decay: + Translated: decay + Description: Разрешает или запрещает опадание лиÑтвы в резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> decay true/false/remove' + destroy: + Translated: destroy + Description: Разрешает или запрещает только уничтожение блоков, отменÑет + флаг build + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> destroy true/false/remove' + dryup: + Translated: dryup + Description: Предотвращает землю от выÑÑ‹Ñ…Ð°Ð½Ð¸Ñ + Info: + - '&eПишите: &6/res set <резиденциÑ> dryup true/false/remove' + diode: + Translated: diode + Description: ПозволÑет или запрещает игрокам иÑпользовать повторители + редÑтоуна + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> diode true/false/remove' + door: + Translated: door + Description: ПозволÑет или запрещает игрокам иÑпользовать двери и люки + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> door true/false/remove' + egg: + Translated: egg + Description: Разрешает или запрещает взаимодейÑтвие Ñ Ñйцом дракона + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> egg true/false/remove' + enchant: + Translated: enchant + Description: ПозволÑет или запрещает игрокам иÑпользовать Ñтол Ð·Ð°Ñ‡Ð°Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> enchant true/false/remove' + explode: + Translated: explode + Description: Разрешает или запрещает взрывы в резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> explode true/false/remove' + enderpearl: + Translated: enderpearl + Description: Разрешить или запретить телепортировку в резиденцию Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ + Жемчуга ÐšÑ€Ð°Ñ + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> enderpearl true/false/remove' + fallinprotection: + Translated: fallinprotection + Description: Защищает от Ð¿Ð°Ð´Ð°Ð½Ð¸Ñ Ð±Ð»Ð¾ÐºÐ¾Ð² в резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> fallinprotection true/false/remove' + falldamage: + Translated: falldamage + Description: Защищает игроков от повреждений при падении + Info: + - '&eПишите: &6/res set <резиденциÑ> falldamage true/false/remove' + feed: + Translated: feed + Description: УÑтановка на true заÑтавлÑет резиденцию кормить Ñвоих жителей + Info: + - '&eПишите: &6/res set <резиденциÑ> feed true/false/remove' + friendlyfire: + Translated: friendlyfire + Description: Разрешить или запретить дружеÑкий огонь + Info: + - '&eПишите: &6/res pset <резиденциÑ> friendlyfire true/false/remove' + fireball: + Translated: fireball + Description: ПозволÑет или запрещает огненные шары в резиденциÑÑ… + Info: + - '&eПишите: &6/res set <резиденциÑ> fireball true/false/remove' + firespread: + Translated: firespread + Description: Разрешает или запрещает раÑпроÑтранение Ð¾Ð³Ð½Ñ + Info: + - '&eПишите: &6/res set <резиденциÑ> firespread true/false/remove' + flowinprotection: + Translated: flowinprotection + Description: ПозволÑет или запрещает потоки жидкоÑтей в резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> flowinprotection true/false/remove' + flow: + Translated: flow + Description: ПозволÑет или запрещает поток жидкоÑти + Info: + - '&eПишите: &6/res set <резиденциÑ> flow true/false/remove' + flowerpot: + Translated: flowerpot + Description: Разрешает или запрещает взаимодейÑтвие Ñ Ñ†Ð²ÐµÑ‚Ð¾Ñ‡Ð½Ñ‹Ð¼ горшком + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> flowerpot true/false/remove' + grow: + Translated: grow + Description: Разрешает или запрещает выращивание раÑтений + Info: + - '&eПишите: &6/res set <резиденциÑ> grow true/false/remove' + glow: + Translated: glow + Description: Игроки начнут ÑветитьÑÑ Ð¿Ñ€Ð¸ входе в резиденцию + Info: + - '&eПишите: &6/res set <резиденциÑ> glow true/false/remove' + hotfloor: + Translated: hotfloor + Description: Предотвратить повреждение от блоков магмы + Info: + - '&eПишите: &6/res set <резиденциÑ> hotfloor true/false/remove' + hidden: + Translated: hidden + Description: Скрывает резиденцию от команды list или listall + Info: + - '&eПишите: &6/res set <резиденциÑ> hidden true/false/remove' + hook: + Translated: hook + Description: Разрешает или запрещает зацепку удочкой + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> hook true/false/remove' + healing: + Translated: healing + Description: УÑтановка на true заÑтавлÑет резиденцию лечить Ñвоих жителей + Info: + - '&eПишите: &6/res set <резиденциÑ> healing true/false/remove' + iceform: + Translated: iceform + Description: Предотвращает образование льда + Info: + - '&eПишите: &6/res set <резиденциÑ> iceform true/false/remove' + icemelt: + Translated: icemelt + Description: Предотвращает таÑние льда + Info: + - '&eПишите: &6/res set <резиденциÑ> icemelt true/false/remove' + ignite: + Translated: ignite + Description: Разрешает или запрещает возгорание + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> ignite true/false/remove' + itemdrop: + Translated: itemdrop + Description: Разрешает или запрещает выбраÑывание предметов + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> itemdrop true/false/remove' + itempickup: + Translated: itempickup + Description: Разрешает или запрещает поднÑтие предметов + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> itempickup true/false/remove' + jump2: + Translated: jump2 + Description: ПозволÑет прыгать на два блока ввыÑоту + Info: + - '&eПишите: &6/res set <резиденциÑ> jump2 true/false/remove' + jump3: + Translated: jump3 + Description: ПозволÑет прыгать на три блока ввыÑоту + Info: + - '&eПишите: &6/res set <резиденциÑ> jump3 true/false/remove' + keepinv: + Translated: keepinv + Description: Игроки хранÑÑ‚ инвентарь поÑле Ñмерти + Info: + - '&eПишите: &6/res set <резиденциÑ> keepinv true/false/remove' + keepexp: + Translated: keepexp + Description: Игроки ÑохранÑÑŽÑ‚ опыт поÑле Ñмерти + Info: + - '&eПишите: &6/res set <резиденциÑ> keepexp true/false/remove' + lavaflow: + Translated: lavaflow + Description: ПозволÑет или запрещает поток лавы, перекрывает поток + Info: + - '&eПишите: &6/res set <резиденциÑ> lavaflow true/false/remove' + leash: + Translated: leash + Description: Разрешает или запрещает привÑзи животных + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> leash true/false/remove' + lever: + Translated: lever + Description: ПозволÑет или запрещает игрокам иÑпользовать рычаги + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> lever true/false/remove' + mobexpdrop: + Translated: mobexpdrop + Description: Предотвращает мобам ÑбраÑывание опыта поÑле Ñмерти + Info: + - '&eПишите: &6/res set <резиденциÑ> mobexpdrop true/false/remove' + mobitemdrop: + Translated: mobitemdrop + Description: Предотвращает мобам ÑбраÑывание предметов поÑле Ñмерти + Info: + - '&eПишите: &6/res set <резиденциÑ> mobitemdrop true/false/remove' + mobkilling: + Translated: mobkilling + Description: Разрешает или запрещает убийÑтво мобов + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> mobkilling true/false/remove' + monsters: + Translated: monsters + Description: Разрешает или запрещает Ñпавн мобов + Info: + - '&eПишите: &6/res set <резиденциÑ> monsters true/false/remove' + move: + Translated: move + Description: Разрешает или запрещает движение в резиденции + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> move true/false/remove' + nanimals: + Translated: nanimals + Description: Разрешает или запрещает Ñпавн животных + Info: + - '&eПишите: &6/res set <резиденциÑ> nanimals true/false/remove' + nmonsters: + Translated: nmonsters + Description: Разрешает или запрещает Ñпавн мобов + Info: + - '&eПишите: &6/res set <резиденциÑ> nmonsters true/false/remove' + night: + Translated: night + Description: УÑтанавливает ночное Ð²Ñ€ÐµÐ¼Ñ Ð² резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> night true/false/remove' + nofly: + Translated: nofly + Description: Allows or denys fly in residence + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> nofly true/false/remove' + fly: + Translated: fly + Description: Переключает полет Ð´Ð»Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ¾Ð² в резиденции + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> fly true/false/remove' + nomobs: + Translated: nomobs + Description: Предотвращает проникновение монÑтров в резиденцию + Info: + - '&eПишите: &6/res set <резиденциÑ> nomobs true/false/remove' + note: + Translated: note + Description: ПозволÑет или запрещает игрокам иÑпользовать музыкалные + блоки + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> note true/false/remove' + nodurability: + Translated: nodurability + Description: Предотвращает потерю прочноÑти предмета + Info: + - '&eПишите: &6/res set <резиденциÑ> nodurability true/false/remove' + overridepvp: + Translated: overridepvp + Description: ОтменÑет любую защиту плагинов пвп + Info: + - '&eПишите: &6/res set <резиденциÑ> overridepvp true/false/remove' + pressure: + Translated: pressure + Description: ПозволÑет или запрещает игрокам иÑпользовать нажимные плаÑтины + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> pressure true/false/remove' + piston: + Translated: piston + Description: Разрешить или запретить поршнÑм толкать или Ñ‚Ñнуть блоки + в резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> piston true/false/remove' + pistonprotection: + Translated: pistonprotection + Description: Включает или отключает перемещение поршней в или из резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> pistonprotection true/false/remove' + place: + Translated: place + Description: Разрешает или запрещает только размещение блоков, отменÑет + флаг build + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> place true/false/remove' + pvp: + Translated: pvp + Description: Разрешить или запретить пвп в резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> pvp true/false/remove' + rain: + Translated: rain + Description: УÑтанавливает дождливую погоду в резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> rain true/false/remove' + redstone: + Translated: redstone + Description: Выдает флаги lever, diode, button, pressure, note + Info: + - '&eПишите: &6/res pset <резиденциÑ> redstone true/false/remove' + respawn: + Translated: respawn + Description: ÐвтоматичеÑки возрождает игрока + Info: + - '&eПишите: &6/res set <резиденциÑ> respawn true/false/remove' + riding: + Translated: riding + Description: Запрет верховой езды + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> riding true/false/remove' + shoot: + Translated: shoot + Description: Разрешает или запрещает Ñтрельбу ÑнарÑдом в облаÑти + Info: + - '&eПишите: &6/res set <резиденциÑ> shoot true/false/remove' + sun: + Translated: sun + Description: УÑтанавливает Ñолнечную погоду в резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> sun true/false/remove' + shop: + Translated: shop + Description: ДобавлÑет резиденцию в Ñпециальный ÑпиÑок магазинов + Info: + - '&eПишите: &6/res set <резиденциÑ> shop true/false/remove' + snowtrail: + Translated: snowtrail + Description: Предотвращает Ñнежные тропы от Ñнеговика + Info: + - '&eПишите: &6/res set <резиденциÑ> snowtrail true/false/remove' + spread: + Translated: spread + Description: Предотвращает раÑпроÑтранение блоков + Info: + - '&eПишите: &6/res set <резиденциÑ> spread true/false/remove' + snowball: + Translated: snowball + Description: ПрепÑÑ‚Ñтвует отбраÑывание от Ñнежка + Info: + - '&eПишите: &6/res set <резиденциÑ> snowball true/false/remove' + sanimals: + Translated: sanimals + Description: Разрешает или запрещает порождать животных из Ñйца призыва + Info: + - '&eПишите: &6/res set <резиденциÑ> sanimals true/false/remove' + shear: + Translated: shear + Description: Разрешает или запрещает Ñтрич овец + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> shear true/false/remove' + smonsters: + Translated: smonsters + Description: Разрешает или запрещает порождать животных из Ñпавнера + или Ñйца призыва + Info: + - '&eПишите: &6/res set <резиденциÑ> smonsters true/false/remove' + subzone: + Translated: subzone + Description: Разрешить игроку делать подзоны в резиденции + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> subzone true/false/remove' + title: + Translated: title + Description: Показывает или Ñкрывает вход / выход ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> title true/false/remove' + table: + Translated: table + Description: ПозволÑет или запрещает игрокам иÑпользовать верÑтак + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> table true/false/remove' + tnt: + Translated: tnt + Description: Разрешить или запретить взрывы TNT + Info: + - '&eПишите: &6/res set <резиденциÑ> tnt true/false/remove' + tp: + Translated: tp + Description: Разрешить или запретить телепортацию в резиденцию + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> tp true/false/remove' + trade: + Translated: trade + Description: Разрешает или запрещает ÑельÑким жителÑм торговать в резиденции + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> trade true/false/remove' + trample: + Translated: trample + Description: Разрешает или запрещает вытаптывание ÑƒÑ€Ð¾Ð¶Ð°Ñ Ð² резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> trample true/false/remove' + trusted: + Translated: trusted + Description: Выдает флаги build, use, move, container и tp + Info: + - '&eПишите: &6/res pset <резиденциÑ> trusted true/false/remove' + use: + Translated: use + Description: Разрешает или запрещает иÑпользование дверей, рычагов, + кнопок и Ñ‚. д.... + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> use true/false/remove' + vehicledestroy: + Translated: vehicledestroy + Description: Разрешает или запрещает уничтожение вагонеток + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> vehicledestroy true/false/remove' + witherspawn: + Translated: witherspawn + Description: Разрешает или запрещает Ñпавн иÑÑÑƒÑˆÐ¸Ñ‚ÐµÐ»Ñ + Info: + - '&eПишите: &6/res set <резиденциÑ> witherspawn true/false/remove' + phantomspawn: + Translated: phantomspawn + Description: Разрешает или запрещает Ñпавн фантомов + Info: + - '&eПишите: &6/res set <резиденциÑ> phantomspawn true/false/remove' + witherdamage: + Translated: witherdamage + Description: ПозволÑет или запрещает повреждение от иÑÑÑƒÑˆÐ¸Ñ‚ÐµÐ»Ñ + Info: + - '&eПишите: &6/res set <резиденциÑ> witherdamage true/false/remove' + witherdestruction: + Translated: witherdestruction + Description: ПозволÑет или запрещает повреждение блоков от иÑÑÑƒÑˆÐ¸Ñ‚ÐµÐ»Ñ + Info: + - '&eПишите: &6/res set <резиденциÑ> witherdestruction true/false/remove' + waterflow: + Translated: waterflow + Description: ПозволÑет или запрещает поток воды, перекрывает поток + Info: + - '&eПишите: &6/res set <резиденциÑ> waterflow true/false/remove' + wspeed1: + Translated: wspeed1 + Description: Изменить ÑкороÑÑ‚ÑŒ ходьбы игроков по меÑту жительÑтва на + %1 + Info: + - '&eПишите: &6/res set <резиденциÑ> wspeed1 true/false/remove' + wspeed2: + Translated: wspeed2 + Description: Изменить ÑкороÑÑ‚ÑŒ ходьбы игроков по меÑту жительÑтва на + %1 + Info: + - '&eПишите: &6/res set <резиденциÑ> wspeed2 true/false/remove' + remove: + Description: Удалить резиденцию. + Info: + - '&eПишите: &6/res remove <резиденциÑ>' + signupdate: + Description: Обновление табличек резиденции + Info: + - '&eПишите: &6/res signupdate' + current: + Description: Показывает резиденцию в вашем меÑте + Info: + - '&eПишите: &6/res current' + reload: + Description: перезагрузить lang или файлы конфигурации + Info: + - '&eПишите: &6/res reload [config/lang/groups/flags]' + setowner: + Description: Сменить владельца резиденции + Info: + - '&eПишите: &6/resadmin setowner [резиденциÑ] [игрок]' + unstuck: + Description: Телепорт за пределы резиденции + Info: + - '&eПишите: &6/res unstuck' + subzone: + Description: Создайте подзоны в резиденциÑÑ…. + Info: + - '&eПишите: &6/res subzone <резиденциÑ> [подзона]' + - ЕÑли название резиденции не указано, попытаетÑÑ Ð¸Ñпользовать резиденцию, + в котором вы находитеÑÑŒ. + removeworld: + Description: Удалить вÑе резиденции из мира + Info: + - '&eПишите: &6/res removeworld [мир]' + - Может иÑпользоватьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ ÐºÐ¾Ð½Ñоли + limits: + Description: Покажит ваши лимиты + Info: + - '&eПишите: &6/res limits (игрок)' + - Показывает ограничениÑ, которые вы имеете при Ñоздании и управлении резиденциÑми. + set: + Description: УÑтановить общие флаги на резиденции + Info: + - '&eПишите: &6/res set <резиденциÑ> [флаг] [true/false/remove]' + - Чтобы увидеть ÑпиÑок флагов, иÑпользуйте /res flags ? + - Эти флаги применÑÑŽÑ‚ÑÑ ÐºÐ¾ вÑем игрокам, у которых нет флага, Ñпециально + примененного к ним. (Ñмотрите /res pset ?) + clearflags: + Description: Убрать вÑе флаги Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¹ + Info: + - '&eПишите: &6/res clearflags <резиденциÑ>' + message: + Description: Управление ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð²Ñ…Ð¾Ð´Ð°/выхода из резиденции + Info: + - '&eПишите: &6/res message <резиденциÑ> [enter/leave] [Ñообщение]' + - УÑтановить Ñообщение входа/выхода из резиденции. + - '&eПишите: &6/res message <резиденциÑ> remove [enter/leave]' + - Удалить Ñообщение входа/выхода. + command: + Description: УправлÑет разрешенными или заблокированными командами в резиденции + Info: + - '&eПишите: &6/res command <резиденциÑ> <команда>' + - Показывает ÑпиÑок, добавлÑет или удалÑет разрешенные или отключенные команды + в резиденции + - ИÑпользуйте _ Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ñ Ð½ÐµÑколькими переменными + confirm: + Description: Подтверждение ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ + Info: + - '&eПишите: &6/res confirm' + - Подтверждает удаление резиденции + resadmin: + Description: Включен или отключен админиÑтратор резиденции + Info: + - '&eПишите: &6/res resadmin [on/off]' + tpset: + Description: УÑтановите меÑтоположение телепортации Резиденции + Info: + - '&eПишите: &6/res tpset' + - Это уÑтановит меÑтоположение телепорта Ð´Ð»Ñ Ð ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸, где вы Ñтоите. + - Ð’Ñ‹ должны ÑтоÑÑ‚ÑŒ в резиденции, чтобы иÑпользовать Ñту команду. + - Ð’Ñ‹ также должны быть владельцем или иметь +admin флаг Ð´Ð»Ñ Ð ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ + tpconfirm: + Description: Игнорировать опаÑное предупреждение телепортации + Info: + - '&eПишите: &6/res tpconfirm' + - Телепортирует Ð²Ð°Ñ Ðº меÑту жительÑтва, когда Ñ‚ÐµÐ»ÐµÐ¿Ð¾Ñ€Ñ‚Ð°Ñ†Ð¸Ñ Ð½ÐµÐ±ÐµÐ·Ð¾Ð¿Ð°Ñна. + removeall: + Description: Удалить вÑе Резиденции, принадлежащие игроку. + Info: + - '&eПишите: &6/res removeall [игрок]' + - УдалÑет вÑе резиденции, принадлежащие конкретному игроку. + - ТребуетÑÑ /resadmin, еÑли вы иÑпользуете команду на кого-либо, кроме ÑебÑ. + material: + Description: Проверьте, ÑущеÑтвует ли материал по его идентификатору + Info: + - '&eПишите: &6/res material [материал]' + kick: + Description: Кикает игрока из резиденции. + Info: + - '&eПишите: &6/res kick <игрок>' + - Ð’Ñ‹ должны быть владельцем или админиÑтратором, чтобы Ñделать Ñто. + - Игрок должен быть онлайн. + sublist: + Description: СпиÑок подзон резиденции + Info: + - '&eПишите: &6/res sublist <резиденциÑ> <Ñтраница>' + - СпиÑок подзон внутри резиденции. + rename: + Description: Переименовывает резиденцию + Info: + - '&eПишите: &6/res rename [Старое имÑ] [Ðовое имÑ]' + - Ð’Ñ‹ должны быть владельцем или админиÑтратором, чтобы Ñделать Ñто. + - Ð˜Ð¼Ñ Ð½Ðµ должно быть занÑто. + setallfor: + Description: УÑтановите общие флаги Ð´Ð»Ñ Ð²Ñех резиденций, принадлежащих конкретному + игроку + Info: + - '&eПишите: &6/res setallfor [игрок] [флаг] [true/false/remove]' + lease: + Description: Управление уÑловиÑми аренды + Info: + - '&eПишите: &6/res lease [renew/cost] [резиденциÑ]' + - /res lease cost покажет ÑтоимоÑÑ‚ÑŒ Ð¿Ñ€Ð¾Ð´Ð»ÐµÐ½Ð¸Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹. + - /res lease renew продлит аренду, еÑли у Ð²Ð°Ñ Ð´Ð¾Ñтаточно денег. + SubCommands: + set: + Description: УÑтановите Ð²Ñ€ÐµÐ¼Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹ + Info: + - '&eПишите: &6/resadmin lease set [резиденциÑ] [#days/infinite]' + - УÑтанавливает Ð²Ñ€ÐµÐ¼Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹ на указанное количеÑтво дней или беÑконечно. + renew: + Description: Продлить Ñрок аренды + Info: + - '&eПишите: &6/resadmin lease renew <резиденциÑ>' + - Продлевает Ñрок аренды Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ или указанной резиденции + list: + Description: Показать ÑпиÑок аренды текущей резиденции + Info: + - '&eПишите: &6/resadmin lease list <резиденциÑ> <Ñтраница>' + - РаÑпечатывает вÑе Ñроки аренды подзон + expires: + Description: Дата Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹ + Info: + - '&eПишите: &6/resadmin lease expires <резиденциÑ>' + - Показывает, когда иÑтекает Ñрок аренды резиденции. + cost: + Description: Показывает ÑтоимоÑÑ‚ÑŒ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹ + Info: + - '&eПишите: &6/resadmin lease cost <резиденциÑ>' + - Показывает, Ñколько денег нужно, чтобы продлить аренду резиденции. + tp: + Description: Ð¢ÐµÐ»ÐµÐ¿Ð¾Ñ€Ñ‚Ð°Ñ†Ð¸Ñ Ð² резиденцию + Info: + - '&eПишите: &6/res tp [резиденциÑ]' + - Телепортирует Ð²Ð°Ñ Ð² резиденцию, вы должны иметь доÑтуп к флагу +tp или + быть владельцем. + - Ваша группа разрешений также должна иметь право телепортироватьÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором + Ñервера. + setall: + Description: УÑтановить общие флаги на вÑех резиденциÑÑ… + Info: + - '&eПишите: &6/res setall [флаг] [true/false/remove]' + resreload: + Description: Перезагрузить резиденцию. + Info: + - '&eПишите: &6/resreload' + resload: + Description: Загрузите файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸. + Info: + - '&eПишите: &6/resload' + - ÐЕБЕЗОПÐСÐÐЯ команда, перед выполнением не ÑохранÑет резиденции. + - Загружает файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ поÑле внеÑÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹. From e806ac25b0ca7e2abc98451269f050cc4d30262a Mon Sep 17 00:00:00 2001 From: stashenko <34498917+stashenko@users.noreply.github.com> Date: Fri, 22 Nov 2019 11:26:01 +0500 Subject: [PATCH 0644/1142] Update Russian.yml --- src/Language/Russian.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Language/Russian.yml b/src/Language/Russian.yml index 003ce1f5a..cdb4a99c3 100644 --- a/src/Language/Russian.yml +++ b/src/Language/Russian.yml @@ -487,7 +487,7 @@ Language: LandCost: '&eСтоимоÑÑ‚ÑŒ земли: &6%1' 'True': '&2ВКЛ' 'False': '&cОТКЛ' - Removed: '&6Удаление' + Removed: '&6Удален' FlagState: '&eÐ¡Ñ‚Ð°Ñ‚ÑƒÑ Ñ„Ð»Ð°Ð³Ð°: %1' Land: '&eЗемлÑ: &6%1' Cost: '&eСтоимоÑÑ‚ÑŒ: &6%1 &eза &6%2 &eдней' @@ -661,10 +661,10 @@ CommandHelp: Description: Контракты резиденции в направлении, котором вы ищете Info: - '&eПишите: &6/res contract (резиденциÑ) [количеÑтво]' - - Contracts residence in direction you looking. - - Residence name is optional + - Контракты резиденции в направлении, котором Ð’Ñ‹ ищете. + - Ðазвание резиденции необÑзательно check: - Description: Check flag state for you + Description: Проверьте ÑоÑтоÑние вашего флага Info: - '&eПишите: &6/res check [резиденциÑ] [флаг] (игрок)' gset: @@ -930,10 +930,10 @@ CommandHelp: Info: - '&eПишите: &6/res lset <резиденциÑ> [blacklist/ignorelist] [material]' - '&eПишите: &6/res lset <резиденциÑ> Info' - - Blacklisting a material prevents it from being placed in the residence. - - Ignorelist causes a specific material to not be protected by Residence. + - ВнеÑение в черный ÑпиÑок материала предотвращает его размещение в резиденции. + - Игнорирование приводит к тому, что конкретный материал не защищен Резиденцией. pset: - Description: Set flags on a specific player for a Residence. + Description: УÑтановите флаги на конкретного игрока в резиденции Info: - '&eПишите: &6/res pset <резиденциÑ> [игрок] [флаг] [true/false/remove]' - '&eПишите: &6/res pset <резиденциÑ> [игрок] removeall' From 42e199181bfe5277aa630dbf5dd6b59a0ef18c02 Mon Sep 17 00:00:00 2001 From: stashenko <34498917+stashenko@users.noreply.github.com> Date: Fri, 22 Nov 2019 11:36:12 +0500 Subject: [PATCH 0645/1142] Update Russian.yml --- src/Language/Russian.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Language/Russian.yml b/src/Language/Russian.yml index cdb4a99c3..1f250cf34 100644 --- a/src/Language/Russian.yml +++ b/src/Language/Russian.yml @@ -216,7 +216,7 @@ Language: PlayerNotIn: '&cИгрок Ñтоит не в вашей резиденции.' Kicked: '&eÐ’Ð°Ñ ÐºÐ¸ÐºÐ½ÑƒÐ»Ð¸ из резиденции' CantKick: '&eÐе могу кикнуть Ñтого игрока' - In: '&eYou are standing in Residence &6%1' + In: '&eÐ’Ñ‹ Ñтоите в резиденции &6%1' OwnerChange: '&eÐ’ резиденции &6%1 &eизменилÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ†. Им Ñтал &6%2' NonAdmin: '&cÐ’Ñ‹ не админиÑтратор резиденции.' Line: '&eРезиденциÑ: &6%1 ' @@ -385,7 +385,7 @@ Language: VotesList: ' &e%1. &6%2 &e%3 &7%4' NoDesc: '&6Без опиÑаниÑ' Desc: |- - &6Description: + &6ОпиÑание: %1 DescChange: '&6ОпиÑание изменено на: %1' NewBoard: '&6УÑпешно добавлена Ð½Ð¾Ð²Ð°Ñ Ð²Ñ‹Ð²ÐµÑка магазина' @@ -895,7 +895,7 @@ CommandHelp: Description: Дать лайк Ð´Ð»Ñ Ð¼Ð°Ð³Ð°Ð·Ð¸Ð½Ð° резиденции Info: - '&eПишите: &6/res shop like <резиденциÑ>' - - Gives like for residence shop + - Дает лайк Ð´Ð»Ñ Ð¼Ð°Ð³Ð°Ð·Ð¸Ð½ резиденции votes: Description: Показать голоÑа магазина Info: @@ -1315,7 +1315,7 @@ CommandHelp: - '&eПишите: &6/res set <резиденциÑ> night true/false/remove' nofly: Translated: nofly - Description: Allows or denys fly in residence + Description: Разрешает или запрещает летать по резиденции Info: - '&eПишите: &6/res set/pset <резиденциÑ> nofly true/false/remove' fly: From 684d0e3e2452d3a0cb7d34b367b4d485324b2bee Mon Sep 17 00:00:00 2001 From: stashenko <34498917+stashenko@users.noreply.github.com> Date: Fri, 22 Nov 2019 13:07:53 +0500 Subject: [PATCH 0646/1142] Update Russian.yml --- src/Language/Russian.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Language/Russian.yml b/src/Language/Russian.yml index 1f250cf34..32ef5fb18 100644 --- a/src/Language/Russian.yml +++ b/src/Language/Russian.yml @@ -427,7 +427,7 @@ Language: cmdPermissionColor: '&2' General: DisabledWorld: '&cПлагин Residence отключен в Ñтом мире' - UseNumbers: '&cПожалуйÑта, иÑпользуйте номерs...' + UseNumbers: '&cПожалуйÑта, иÑпользуйте номер...' # Replace all text with '' to disable this message CantPlaceLava: '&cÐ’Ñ‹ не можете размеÑтить лаву за пределами резиденции и выше ÑƒÑ€Ð¾Ð²Ð½Ñ Ð±Ð»Ð¾ÐºÐ° &6%1 ' @@ -502,7 +502,7 @@ Language: Name: '&eÐазвание: &6%1' Lists: '&eСпиÑки: &6' Residences: '&eРезиденции&6' - CreatedOn: '&eСоздатель: &6%1' + CreatedOn: '&eСоздана: &6%1' Owner: '&eВладелец: &6%1' World: '&eМир: &6%1' Subzones: '&eПодзона' From 7592f35108b4b7f7eb02bc05226eeb7589ca257d Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Dec 2019 12:25:24 +0200 Subject: [PATCH 0647/1142] Better pagination --- .../bukkit/residence/LocaleManager.java | 6 ++++ .../bukkit/residence/commands/area.java | 4 +-- .../bukkit/residence/commands/contract.java | 2 +- .../bukkit/residence/commands/lease.java | 2 +- .../bukkit/residence/commands/market.java | 2 -- .../bukkit/residence/commands/material.java | 1 - .../bukkit/residence/commands/shop.java | 4 +-- .../bukkit/residence/containers/lm.java | 20 +++++++++-- .../residence/economy/TransactionManager.java | 2 +- .../residence/economy/rent/RentManager.java | 2 +- .../bekvon/bukkit/residence/gui/SetFlag.java | 8 ++--- .../protection/ClaimedResidence.java | 2 +- .../bukkit/residence/text/Language.java | 23 ++++++++++-- .../bukkit/residence/text/help/HelpEntry.java | 2 +- .../residence/text/help/InformationPager.java | 36 ++++++++++++++----- src/plugin.yml | 2 +- 16 files changed, 86 insertions(+), 32 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index c94d8921a..dc75bd712 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -58,6 +58,12 @@ private static YamlConfiguration loadConfiguration(BufferedReader in, String lan public void LoadLang(String lang) { File f = new File(plugin.getDataFolder(), "Language" + File.separator + lang + ".yml"); + if(!f.isFile()) + try { + f.createNewFile(); + } catch (IOException e2) { + e2.printStackTrace(); + } BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(new FileInputStream(f), StandardCharsets.UTF_8)); diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index 4979a93e1..71106e35b 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -45,7 +45,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getSelectionManager().worldEdit(player); } } - if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + if (plugin.getSelectionManager().hasPlacedBoth(player)) { ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); if (res != null) { if (res.addArea(player, plugin.getSelectionManager().getSelectionCuboid(player), args[3], resadmin)) @@ -63,7 +63,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getSelectionManager().worldEdit(player); } } - if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + if (plugin.getSelectionManager().hasPlacedBoth(player)) { ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); if (res != null) { res.replaceArea(player, plugin.getSelectionManager().getSelectionCuboid(player), args[3], resadmin); diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 1f6df4645..4560d63d1 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -84,7 +84,7 @@ else if (args.length == 3) if (!plugin.getSelectionManager().contract(player, amount)) return true; - if (plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + if (plugin.getSelectionManager().hasPlacedBoth(player)) { res.replaceArea(player, plugin.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index 94b0352ff..bbe17f5c8 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -133,7 +133,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Economy_LeaseList, pi.getPositionForOutput(), one.getName(), "", ""); } - plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), pi.getCurrentPage(), "res lease list " + res.getName()); + plugin.getInfoPageManager().ShowPagination(sender, pi, "res lease list " + res.getName()); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 25bff34da..d16ac38cd 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -1,7 +1,6 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; -import java.util.Map.Entry; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -20,7 +19,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.Utils; public class market implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index 6d59b9832..e8f264fe0 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -15,7 +15,6 @@ public class material implements cmd { - @SuppressWarnings("deprecation") @Override @CommandAnnotation(simple = true, priority = 4300) public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 558876fff..fc4ea8b2a 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -121,7 +121,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman player.sendMessage(message); } - plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, "/res shop votes " + res.getName()); + plugin.getInfoPageManager().ShowPagination(sender, pi, "/res shop votes " + res.getName()); return true; } @@ -179,7 +179,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman rm.show(sender); } - plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, "/res shop list"); + plugin.getInfoPageManager().ShowPagination(sender, pi, "/res shop list"); return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 50e6d4f5e..c69c32d11 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -392,7 +392,7 @@ public enum lm { Permissions_variableColor("&f"), Permissions_permissionColor("&6"), Permissions_cmdPermissionColor("&2"), - + General_DisabledWorld("&cResidence plugin is disabled in this world"), General_UseNumbers("&cPlease use numbers..."), General_CantPlaceLava("&cYou can't place lava outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), @@ -433,8 +433,22 @@ public enum lm { General_TotalWorth("&eTotal worth of residence: &6%1 &e(&6%2&e)"), General_TotalSubzones("&eSubzones in residence: &6%1 &e(&6%2&e)"), General_NotOnline("&eTarget player must be online."), - General_NextInfoPage("&2| &eNext Page &2>>>"), - General_PrevInfoPage("&2<<< &ePrev Page &2|"), + + General_prevPage("&2----<< &6Prev "), + General_prevPageGui("&6Previous page "), + General_prevPageClean("&6Prev "), + General_prevPageOff("&2----<< &7Prev "), + General_prevPageHover("&7<<<"), + General_firstPageHover("&7|<"), + General_nextPage("&6 Next &2>>----"), + General_nextPageGui("&6Next Page"), + General_nextPageClean("&6 Next"), + General_nextPageOff("&7 Next &2>>----"), + General_nextPageHover("&7>>>"), + General_lastPageHover("&7>|"), + General_pageCount("&2%1&7/&2%2"), + General_pageCountHover("&e%1 entries"), + General_GenericPages("&ePage &6%1 &eof &6%2 &e(&6%3&e)"), General_WorldEditNotFound("&cWorldEdit was not detected."), General_CoordsTop("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index fdcd27d12..8bf99f610 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -364,7 +364,7 @@ public void printForSaleResidences(Player player, int page) { for (ClaimedResidence one : toRemove) { sellAmount.remove(one); } - plugin.getInfoPageManager().ShowPagination(player, pi.getTotalPages(), page, "/res market list sell"); + plugin.getInfoPageManager().ShowPagination(player, pi, "/res market list sell"); } public void clearSales() { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 7dd27a114..5ceaf79fc 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -851,7 +851,7 @@ public void printRentableResidences(Player player, int page) { } } - plugin.getInfoPageManager().ShowPagination(player, pi.getTotalPages(), page, "/res market list rent"); + plugin.getInfoPageManager().ShowPagination(player, pi, "/res market list rent"); } diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index 98a4470f4..c3122e334 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -284,13 +284,13 @@ public void recalculateResidence(ClaimedResidence res) { ItemMeta meta = Item.getItemMeta(); if (page > 1) { - meta.setDisplayName(Residence.getInstance().msg(lm.General_PrevInfoPage)); + meta.setDisplayName(Residence.getInstance().msg(lm.General_prevPage)); Item.setItemMeta(meta); GuiInv.setItem(45, Item); } if (page < pageCount) { - meta.setDisplayName(Residence.getInstance().msg(lm.General_NextInfoPage)); + meta.setDisplayName(Residence.getInstance().msg(lm.General_nextPage)); Item.setItemMeta(meta); GuiInv.setItem(53, Item); } @@ -444,12 +444,12 @@ public void recalculatePlayer(ClaimedResidence res) { ItemMeta meta = Item.getItemMeta(); if (page > 1) { - meta.setDisplayName(Residence.getInstance().msg(lm.General_PrevInfoPage)); + meta.setDisplayName(Residence.getInstance().msg(lm.General_prevPage)); Item.setItemMeta(meta); GuiInv.setItem(45, Item); } if (page < pageCount) { - meta.setDisplayName(Residence.getInstance().msg(lm.General_NextInfoPage)); + meta.setDisplayName(Residence.getInstance().msg(lm.General_nextPage)); Item.setItemMeta(meta); GuiInv.setItem(53, Item); } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 11a1094ac..8847b6eac 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1158,7 +1158,7 @@ public void printSubzoneList(CommandSender sender, int page) { rm.clear(); } - plugin.getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, "res sublist " + this.getName()); + plugin.getInfoPageManager().ShowPagination(sender, pi, "res sublist " + this.getName()); } public void printAreaList(Player player, int page) { diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index abab40404..f413f1e3e 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -1,5 +1,7 @@ package com.bekvon.bukkit.residence.text; +import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -10,6 +12,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.YmlMaker; public class Language { @@ -25,8 +28,22 @@ public Language(Residence plugin) { * Reloads the config */ public void LanguageReload() { - customlocale = new YmlMaker(plugin, "Language/" + plugin.getConfigManager().getLanguage() + ".yml").getConfig(); - enlocale = new YmlMaker(plugin, "Language/English.yml").getConfig(); + File f = new File(plugin.getDataFolder(), "Language" + File.separator + plugin.getConfigManager().getLanguage() + ".yml"); + if (!f.isFile()) + try { + f.createNewFile(); + } catch (IOException e2) { + e2.printStackTrace(); + } + f = new File(plugin.getDataFolder(), "Language" + File.separator + "English.yml"); + if (!f.isFile()) + try { + f.createNewFile(); + } catch (IOException e2) { + e2.printStackTrace(); + } + customlocale = new YmlMaker(plugin, "Language" + File.separator + plugin.getConfigManager().getLanguage() + ".yml").getConfig(); + enlocale = new YmlMaker(plugin, "Language" + File.separator + "English.yml").getConfig(); if (customlocale == null) customlocale = enlocale; } @@ -82,13 +99,13 @@ public String getMessage(lm lm, Object... variables) { if (customlocale == null || !customlocale.contains(key)) message = enlocale.contains(key) == true ? enlocale.getString(key) : missing; message = customlocale.contains(key) == true ? customlocale.getString(key) : missing; - for (int i = 1; i <= variables.length; i++) { String vr = String.valueOf(variables[i - 1]); if (variables[i - 1] instanceof Flags) vr = ((Flags) variables[i - 1]).getName(); message = message.replace("%" + i, vr); } + return ChatColor.translateAlternateColorCodes('&', message); } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index ea2970f97..8800c9561 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -112,7 +112,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p String baseCmd = resadmin ? "resadmin" : "res"; String cmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " : "/" + baseCmd + " ? "; - Residence.getInstance().getInfoPageManager().ShowPagination(sender, pi.getTotalPages(), page, cmd); + Residence.getInstance().getInfoPageManager().ShowPagination(sender, pi, cmd); } public void printHelp(CommandSender sender, int page, String path, boolean resadmin) { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index ceb27b49d..f40410a50 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -53,7 +53,7 @@ public void printInfo(CommandSender sender, String command, String title, List ownedResidences, int page, boolean resadmin) { @@ -163,9 +163,9 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, final int start, final boolean resadmin) { @@ -331,23 +331,43 @@ public void run() { }); } - public void ShowPagination(CommandSender sender, int pageCount, int CurrentPage, String cmd) { + public void ShowPagination(CommandSender sender, PageInfo pi, String cmd) { + ShowPagination(sender, pi, cmd, null); + } + + public void ShowPagination(CommandSender sender, PageInfo pi, Object cmd, String pagePref) { + ShowPagination(sender, pi.getTotalPages(), pi.getCurrentPage(), pi.getTotalEntries(), plugin.getCommandManager().getLabel() + " " + cmd.getClass().getSimpleName(), pagePref); + } + + public void ShowPagination(CommandSender sender, PageInfo pi, String cmd, String pagePref) { + ShowPagination(sender, pi.getTotalPages(), pi.getCurrentPage(), pi.getTotalEntries(), cmd, pagePref); + } + + public void ShowPagination(CommandSender sender, int pageCount, int CurrentPage, int totalEntries, String cmd, String pagePref) { + if (!(sender instanceof Player)) + return; if (!cmd.startsWith("/")) cmd = "/" + cmd; - String separator = plugin.msg(lm.InformationPage_SmallSeparator); if (pageCount == 1) return; + String pagePrefix = pagePref == null ? "" : pagePref; + int NextPage = CurrentPage + 1; NextPage = CurrentPage < pageCount ? NextPage : CurrentPage; int Prevpage = CurrentPage - 1; Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; RawMessage rm = new RawMessage(); - rm.add(separator + " " + plugin.msg(lm.General_PrevInfoPage), CurrentPage > 1 ? "<<<" : null, CurrentPage > 1 ? cmd + " " + Prevpage : null); - rm.add(plugin.msg(lm.General_NextInfoPage) + " " + separator, pageCount > CurrentPage ? ">>>" : null, pageCount > CurrentPage ? cmd + " " + NextPage : null); - if (pageCount != 0 && sender instanceof Player) + rm.add((CurrentPage > 1 ? plugin.msg(lm.General_prevPage) : plugin.msg(lm.General_prevPageOff)), + CurrentPage > 1 ? plugin.msg(lm.General_prevPageHover) : plugin.msg(lm.General_lastPageHover), + CurrentPage > 1 ? cmd + " " + pagePrefix + Prevpage : cmd + " " + pagePrefix + pageCount); + rm.add(plugin.msg(lm.General_pageCount, CurrentPage, pageCount), plugin.msg(lm.General_pageCountHover, totalEntries)); + rm.add(plugin.msg(pageCount > CurrentPage ? lm.General_nextPage : lm.General_nextPageOff), + pageCount > CurrentPage ? plugin.msg(lm.General_nextPageHover) : plugin.msg(lm.General_firstPageHover), + pageCount > CurrentPage ? cmd + " " + pagePrefix + NextPage : cmd + " " + pagePrefix + 1); + if (pageCount != 0) rm.show(sender); } } diff --git a/src/plugin.yml b/src/plugin.yml index 86566e8da..4be8323f4 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.7.3 +version: 4.8.7.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 34ddd20a0a1583f3d91f75dab539d8871d73b5c9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Dec 2019 12:43:57 +0200 Subject: [PATCH 0648/1142] 10x faster material recognition --- src/com/bekvon/bukkit/cmiLib/CMIColors.java | 99 + .../bukkit/cmiLib/CMIEffectManager.java | 1 - .../bekvon/bukkit/cmiLib/CMIEntityType.java | 450 +++ .../bekvon/bukkit/cmiLib/CMIItemStack.java | 44 +- src/com/bekvon/bukkit/cmiLib/CMIMaterial.java | 2497 ++++++++++++ ...temReflection.java => CMIReflections.java} | 2 +- src/com/bekvon/bukkit/cmiLib/ItemManager.java | 3375 ++--------------- .../bukkit/residence/ConfigManager.java | 2 +- .../bekvon/bukkit/residence/Residence.java | 4 +- .../bukkit/residence/allNms/v1_13Events.java | 3 +- .../bukkit/residence/commands/material.java | 2 +- .../bukkit/residence/containers/Flags.java | 2 +- .../bekvon/bukkit/residence/gui/FlagUtil.java | 2 +- .../bukkit/residence/itemlist/ItemList.java | 2 +- .../listeners/ResidenceBlockListener.java | 2 +- .../listeners/ResidenceEntityListener.java | 2 +- .../listeners/ResidenceFixesListener.java | 2 +- .../listeners/ResidencePlayerListener.java | 8 +- .../residence/protection/FlagPermissions.java | 2 +- .../protection/ResidenceManager.java | 2 +- .../bekvon/bukkit/residence/utils/Utils.java | 2 +- 21 files changed, 3327 insertions(+), 3178 deletions(-) create mode 100644 src/com/bekvon/bukkit/cmiLib/CMIColors.java create mode 100644 src/com/bekvon/bukkit/cmiLib/CMIEntityType.java create mode 100644 src/com/bekvon/bukkit/cmiLib/CMIMaterial.java rename src/com/bekvon/bukkit/cmiLib/{ItemReflection.java => CMIReflections.java} (96%) diff --git a/src/com/bekvon/bukkit/cmiLib/CMIColors.java b/src/com/bekvon/bukkit/cmiLib/CMIColors.java new file mode 100644 index 000000000..a9c652e55 --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/CMIColors.java @@ -0,0 +1,99 @@ +package com.bekvon.bukkit.cmiLib; + +import java.awt.Color; + +public enum CMIColors { + White(0, "White", CMIMaterial.BONE_MEAL, new Color(249, 255, 254)), + Orange(1, "Orange", CMIMaterial.ORANGE_DYE, new Color(249, 128, 29)), + Magenta(2, "Magenta", CMIMaterial.MAGENTA_DYE, new Color(199, 78, 189)), + Light_Blue(3, "Light Blue", CMIMaterial.LIGHT_BLUE_DYE, new Color(58, 179, 218)), + Yellow(4, "Yellow", CMIMaterial.DANDELION_YELLOW, new Color(254, 216, 61)), + Lime(5, "Lime", CMIMaterial.LIME_DYE, new Color(128, 199, 31)), + Pink(6, "Pink", CMIMaterial.PINK_DYE, new Color(243, 139, 170)), + Gray(7, "Gray", CMIMaterial.GRAY_DYE, new Color(71, 79, 82)), + Light_Gray(8, "Light Gray", CMIMaterial.LIGHT_GRAY_DYE, new Color(157, 157, 151)), + Cyan(9, "Cyan", CMIMaterial.CYAN_DYE, new Color(22, 156, 156)), + Purple(10, "Purple", CMIMaterial.PURPLE_DYE, new Color(137, 50, 184)), + Blue(11, "Blue", CMIMaterial.LAPIS_LAZULI, new Color(60, 68, 170)), + Brown(12, "Brown", CMIMaterial.COCOA_BEANS, new Color(131, 84, 50)), + Green(13, "Green", CMIMaterial.CACTUS_GREEN, new Color(94, 124, 22)), + Red(14, "Red", CMIMaterial.ROSE_RED, new Color(176, 46, 38)), + Black(15, "Black", CMIMaterial.INK_SAC, new Color(29, 29, 33)); + + private int id; + private String name; + private CMIMaterial mat; + private Color color; + + CMIColors(int id, String name, CMIMaterial mat, Color color) { + this.id = id; + this.name = name; + this.mat = mat; + this.color = color; + } + + CMIColors(int id, String name, CMIMaterial mat) { + this.id = id; + this.name = name; + this.mat = mat; + } + + public int getId() { + return id; + } + + public String getName() { + return name; + } + + public static CMIColors getById(int id) { + for (CMIColors one : CMIColors.values()) { + if (one.getId() == id) + return one; + } + return CMIColors.White; + } + + public CMIMaterial getMat() { + return mat; + } + + public void setMat(CMIMaterial mat) { + this.mat = mat; + } + + public static CMIMaterial getColorMaterial(CMIMaterial mat) { + String name = mat.getName().replace(" ", "").replace("_", "").toLowerCase(); + for (CMIColors one : values()) { + if (name.contains(one.getName().replace("_", "").toLowerCase())) + return one.getMat(); + } + + return null; + } + + public static CMIColors getColor(CMIMaterial mat) { + String name = mat.getName().replace(" ", "").replace("_", "").toLowerCase(); + for (CMIColors one : values()) { + if (name.contains(one.getName().replace("_", "").toLowerCase())) + return one; + } + +// if (c == null) { +// try { +// net.minecraft.server.v1_13_R2.BlockPosition blockPosition = new net.minecraft.server.v1_13_R2.BlockPosition(b.getX(), b.getY(), b.getZ()); +// net.minecraft.server.v1_13_R2.WorldServer worldServer = ((org.bukkit.craftbukkit.v1_13_R2.CraftWorld) b.getWorld()).getHandle(); +// IBlockData t = worldServer.getType(blockPosition); +// net.minecraft.server.v1_13_R2.Block bl = t.getBlock(); +// c = new Color(bl.n(t).i().rgb, true); +// } catch (Exception | Error e) { +// } +// } + + return null; + } + + public Color getColor() { + return color; + } +} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java b/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java index b1cad05c6..0784b1a3a 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java @@ -9,7 +9,6 @@ import org.bukkit.Effect; import org.bukkit.Effect.Type; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import org.bukkit.Material; diff --git a/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java b/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java new file mode 100644 index 000000000..c34f3a762 --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java @@ -0,0 +1,450 @@ +package com.bekvon.bukkit.cmiLib; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; + +import org.bukkit.block.CreatureSpawner; +import org.bukkit.entity.EntityType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BlockStateMeta; +import org.bukkit.inventory.meta.ItemMeta; + +public enum CMIEntityType { + + DROPPED_ITEM(1, "Item"), + EXPERIENCE_ORB(2, "Experience Orb"), + AREA_EFFECT_CLOUD(3, "Area Effect Cloud"), + ELDER_GUARDIAN(4, "Elder Guardian", Arrays.asList( + "MWM3OTc0ODJhMTRiZmNiODc3MjU3Y2IyY2ZmMWI2ZTZhOGI4NDEzMzM2ZmZiNGMyOWE2MTM5Mjc4YjQzNmIifX19")), + WITHER_SKELETON(5, "Wither Skeleton", Arrays.asList( + "Nzk1M2I2YzY4NDQ4ZTdlNmI2YmY4ZmIyNzNkNzIwM2FjZDhlMWJlMTllODE0ODFlYWQ1MWY0NWRlNTlhOCJ9fX0=", + "NDk2YmM4ZWJkNGUxM2Y0OTZkOGQ3NGM1NjVkZDU2ZTk5YTRhZjJlMmVhN2EyN2E5NmMxYWJkMjg0MTg0YiJ9fX0=", + "ZjVlYzk2NDY0NWE4ZWZhYzc2YmUyZjE2MGQ3Yzk5NTYzNjJmMzJiNjUxNzM5MGM1OWMzMDg1MDM0ZjA1MGNmZiJ9fX0=")), + STRAY(6, "Stray", Arrays.asList( + "NzhkZGY3NmU1NTVkZDVjNGFhOGEwYTVmYzU4NDUyMGNkNjNkNDg5YzI1M2RlOTY5ZjdmMjJmODVhOWEyZDU2In19fQ==")), + EGG(7, "Thrown Egg"), + LEASH_HITCH(8, "Leash Knot"), + PAINTING(9, "Painting"), + ARROW(10, "Arrow"), + SNOWBALL(11, "Snowball"), + FIREBALL(12, "Fireball"), + SMALL_FIREBALL(13, "Small Fireball"), + ENDER_PEARL(14, "Thrown Ender Pearl"), + ENDER_SIGNAL(15, "End Signal"), + SPLASH_POTION(16, "Splash Potion"), + THROWN_EXP_BOTTLE(17, "Thrown Bottle o' Enchanting"), + ITEM_FRAME(18, "Item Frame"), + WITHER_SKULL(19, "Wither Skull"), + PRIMED_TNT(20, "Primed TNT"), + FALLING_BLOCK(21, "Falling Block"), + FIREWORK(22, "Firework Rocket"), + HUSK(23, "Husk", Arrays.asList( + "Nzc3MDY4MWQxYTI1NWZiNGY3NTQ3OTNhYTA1NWIyMjA0NDFjZGFiOWUxMTQxZGZhNTIzN2I0OTkzMWQ5YjkxYyJ9fX0=")), + SPECTRAL_ARROW(24, "Spectral Arrow"), + SHULKER_BULLET(25, "Shulker Bullet"), + DRAGON_FIREBALL(26, "Dragon Fireball"), + ZOMBIE_VILLAGER(27, "Zombie Villager", Arrays.asList( + "NDRmMDhlYmQ0ZTI1Y2RhM2FkZTQ1Yjg2MzM3OGFkMzc3ZjE4YzUxMGRiNGQyOGU4MmJiMjQ0NTE0MzliMzczNCJ9fX0=", + "OTYxZjE5ZmZkOGFlNDI1NzkyYzRiMTgxNzU2YWRmZjhkNDgxNzRhZWVmNThhMGYzMjdhMjhjNzQyYzcyNDQyIn19fQ==", + "NTI4YzJiYWQ1Mzg5Y2IzNTkyYjU2NWIzYzQ3ZWNjMTg5ZTA1NDJhODc4MzUwMjhkNjE0OGJiZTMzNDU2NDUifX19", + "YTE2MTU1ZmNmMzY2Y2Y0ZTA2Y2U1ZGZmYzQ4Y2E1NGU4ZWE0OGRmZTUyNTM1OGI2MTJkYzQ0ZmQ0MzIifX19", + "Y2ZmMDQ4MmZkMzJmYWIyY2U5ZjVmYTJlMmQ5YjRkYzc1NjFkYTQyMjE1MmM5OWZjODA0YjkxMzljYWYyNTZiIn19fQ==", + "MzdlODM4Y2NjMjY3NzZhMjE3YzY3ODM4NmY2YTY1NzkxZmU4Y2RhYjhjZTljYTRhYzZiMjgzOTdhNGQ4MWMyMiJ9fX0=")), + SKELETON_HORSE(28, "Skeleton Horse", Arrays.asList( + "NDdlZmZjZTM1MTMyYzg2ZmY3MmJjYWU3N2RmYmIxZDIyNTg3ZTk0ZGYzY2JjMjU3MGVkMTdjZjg5NzNhIn19fQ==")), + ZOMBIE_HORSE(29, "Zombie Horse", Arrays.asList( + "ZDIyOTUwZjJkM2VmZGRiMThkZTg2ZjhmNTVhYzUxOGRjZTczZjEyYTZlMGY4NjM2ZDU1MWQ4ZWI0ODBjZWVjIn19fQ==")), + ARMOR_STAND(30, "Armor Stand"), + DONKEY(31, "Donkey", Arrays.asList( + "ZGZiNmMzYzA1MmNmNzg3ZDIzNmEyOTE1ZjgwNzJiNzdjNTQ3NDk3NzE1ZDFkMmY4Y2JjOWQyNDFkODhhIn19fQ==")), + MULE(32, "Mule", Arrays.asList( + "YTA0ODZhNzQyZTdkZGEwYmFlNjFjZTJmNTVmYTEzNTI3ZjFjM2IzMzRjNTdjMDM0YmI0Y2YxMzJmYjVmNWYifX19")), + EVOKER_FANGS(33, "Evoker Fangs"), + EVOKER(34, "Evoker", Arrays.asList( + "YTAwZDNmZmYxNmMyZGNhNTliOWM1OGYwOTY1MjVjODY5NzExNjZkYmFlMTMzYjFiMDUwZTVlZTcxNjQ0MyJ9fX0=")), + VEX(35, "Vex", Arrays.asList( + "NWU3MzMwYzdkNWNkOGEwYTU1YWI5ZTk1MzIxNTM1YWM3YWUzMGZlODM3YzM3ZWE5ZTUzYmVhN2JhMmRlODZiIn19fQ==")), + VINDICATOR(36, "Vindicator", Arrays.asList( + "YTAwZDNmZmYxNmMyZGNhNTliOWM1OGYwOTY1MjVjODY5NzExNjZkYmFlMTMzYjFiMDUwZTVlZTcxNjQ0MyJ9fX0=")), + ILLUSIONER(37, "Illusioner", Arrays.asList( + "NTEyNTEyZTdkMDE2YTIzNDNhN2JmZjFhNGNkMTUzNTdhYjg1MTU3OWYxMzg5YmQ0ZTNhMjRjYmViODhiIn19fQ==", + "MmYyODgyZGQwOTcyM2U0N2MwYWI5NjYzZWFiMDgzZDZhNTk2OTI3MzcwNjExMGM4MjkxMGU2MWJmOGE4ZjA3ZSJ9fX0=")), + MINECART_COMMAND(40, "Minecart with Command Block"), + BOAT(41, "Boat"), + MINECART(42, "Minecart"), + MINECART_CHEST(43, "Minecart with Chest"), + MINECART_FURNACE(44, "Minecart with Furnace"), + MINECART_TNT(45, "Minecart with TNT"), + MINECART_HOPPER(46, "Minecart with Hopper"), + MINECART_MOB_SPAWNER(47, "Minecart with Spawner"), + CREEPER(50, "Creeper", Arrays.asList( + "ZjQyNTQ4MzhjMzNlYTIyN2ZmY2EyMjNkZGRhYWJmZTBiMDIxNWY3MGRhNjQ5ZTk0NDQ3N2Y0NDM3MGNhNjk1MiJ9fX0=", + "YTNmMTcyZDI5Y2Y5NGJjODk1NjA4YjdhNWRjMmFmMGRlNDljNzg4ZDViZWNiMTYwNWYxZjUzNDg4YTAxNzBiOCJ9fX0=")), + SKELETON(51, "Skeleton", Arrays.asList( + "MzAxMjY4ZTljNDkyZGExZjBkODgyNzFjYjQ5MmE0YjMwMjM5NWY1MTVhN2JiZjc3ZjRhMjBiOTVmYzAyZWIyIn19fQ==", + "Yjk1MDc4ZDNiM2IxNzAxZDQ1NzI5ZDNhMTQyMjQ2N2IyOWRiYjJlMWE5MTI4MTMzYTJmMTYzZWJlODVkMmRiOSJ9fX0=")), + SPIDER(52, "Spider", Arrays.asList( + "Y2Q1NDE1NDFkYWFmZjUwODk2Y2QyNThiZGJkZDRjZjgwYzNiYTgxNjczNTcyNjA3OGJmZTM5MzkyN2U1N2YxIn19fQ==")), + GIANT(53, "Giant"), + ZOMBIE(54, "Zombie", Arrays.asList( + "NTZmYzg1NGJiODRjZjRiNzY5NzI5Nzk3M2UwMmI3OWJjMTA2OTg0NjBiNTFhNjM5YzYwZTVlNDE3NzM0ZTExIn19fQ==", + "MzExZGQ5MWVlNGQzMWRkZDU5MWQyODMyZWExZWMwODBmMmVkZWQzM2FiODllZTFkYjhiMDRiMjZhNjhhIn19fQ==")), + SLIME(55, "Slime", Arrays.asList( + "MTZhZDIwZmMyZDU3OWJlMjUwZDNkYjY1OWM4MzJkYTJiNDc4YTczYTY5OGI3ZWExMGQxOGM5MTYyZTRkOWI1In19fQ==")), + GHAST(56, "Ghast", Arrays.asList( + "OGI2YTcyMTM4ZDY5ZmJiZDJmZWEzZmEyNTFjYWJkODcxNTJlNGYxYzk3ZTVmOTg2YmY2ODU1NzFkYjNjYzAifX19")), + PIG_ZOMBIE(57, "Zombie Pigman", Arrays.asList( + "NzRlOWM2ZTk4NTgyZmZkOGZmOGZlYjMzMjJjZDE4NDljNDNmYjE2YjE1OGFiYjExY2E3YjQyZWRhNzc0M2ViIn19fQ==")), + ENDERMAN(58, "Enderman", Arrays.asList( + "N2E1OWJiMGE3YTMyOTY1YjNkOTBkOGVhZmE4OTlkMTgzNWY0MjQ1MDllYWRkNGU2YjcwOWFkYTUwYjljZiJ9fX0=")), + CAVE_SPIDER(59, "Cave Spider", Arrays.asList( + "NDE2NDVkZmQ3N2QwOTkyMzEwN2IzNDk2ZTk0ZWViNWMzMDMyOWY5N2VmYzk2ZWQ3NmUyMjZlOTgyMjQifX19")), + SILVERFISH(60, "Silverfish", Arrays.asList( + "ZGE5MWRhYjgzOTFhZjVmZGE1NGFjZDJjMGIxOGZiZDgxOWI4NjVlMWE4ZjFkNjIzODEzZmE3NjFlOTI0NTQwIn19fQ==")), + BLAZE(61, "Blaze", Arrays.asList( + "Yjc4ZWYyZTRjZjJjNDFhMmQxNGJmZGU5Y2FmZjEwMjE5ZjViMWJmNWIzNWE0OWViNTFjNjQ2Nzg4MmNiNWYwIn19fQ==")), + MAGMA_CUBE(62, "Magma Cube", Arrays.asList( + "Mzg5NTdkNTAyM2M5MzdjNGM0MWFhMjQxMmQ0MzQxMGJkYTIzY2Y3OWE5ZjZhYjM2Yjc2ZmVmMmQ3YzQyOSJ9fX0=")), + ENDER_DRAGON(63, "Ender Dragon"), + WITHER(64, "Wither", Arrays.asList( + "ZGRhZmIyM2VmYzU3ZjI1MTg3OGU1MzI4ZDExY2IwZWVmODdiNzljODdiMjU0YTdlYzcyMjk2ZjkzNjNlZjdjIn19fQ==", + "M2U0ZjQ5NTM1YTI3NmFhY2M0ZGM4NDEzM2JmZTgxYmU1ZjJhNDc5OWE0YzA0ZDlhNGRkYjcyZDgxOWVjMmIyYiJ9fX0=", + "OTY0ZTFjM2UzMTVjOGQ4ZmZmYzM3OTg1YjY2ODFjNWJkMTZhNmY5N2ZmZDA3MTk5ZThhMDVlZmJlZjEwMzc5MyJ9fX0=", + "Y2RmNzRlMzIzZWQ0MTQzNjk2NWY1YzU3ZGRmMjgxNWQ1MzMyZmU5OTllNjhmYmI5ZDZjZjVjOGJkNDEzOWYifX19", + "YTQzNTE2NGMwNWNlYTI5OWEzZjAxNmJiYmVkMDU3MDZlYmI3MjBkYWM5MTJjZTQzNTFjMjI5NjYyNmFlY2Q5YSJ9fX0=")), + BAT(65, "Bat", Arrays.asList( + "NGNmMWIzYjNmNTM5ZDJmNjNjMTcyZTk0Y2FjZmFhMzkxZThiMzg1Y2RkNjMzZjNiOTkxYzc0ZTQ0YjI4In19fQ==")), + WITCH(66, "Witch", Arrays.asList( + "ODllOGI1ZjE1YTliMjlhMWUzODljOTUyMThmZDM3OTVmMzI4NzJlNWFlZTk0NjRhNzY0OTVjNTI3ZDIyNDUifX19")), + ENDERMITE(67, "Endermite", Arrays.asList( + "ODRhYWZmYTRjMDllMmVhZmI4NWQzNTIyMTIyZGIwYWE0NTg3NGJlYTRlM2Y1ZTc1NjZiNGQxNjZjN2RmOCJ9fX0=")), + GUARDIAN(68, "Guardian", Arrays.asList( + "ZGZiNjc1Y2I1YTdlM2ZkMjVlMjlkYTgyNThmMjRmYzAyMGIzZmE5NTAzNjJiOGJjOGViMjUyZTU2ZTc0In19fQ==")), + SHULKER(69, "Shulker", Arrays.asList( + "MWU3MzgzMmUyNzJmODg0NGM0NzY4NDZiYzQyNGEzNDMyZmI2OThjNThlNmVmMmE5ODcxYzdkMjlhZWVhNyJ9fX0=")), + PIG(90, "Pig", Arrays.asList( + "NjIxNjY4ZWY3Y2I3OWRkOWMyMmNlM2QxZjNmNGNiNmUyNTU5ODkzYjZkZjRhNDY5NTE0ZTY2N2MxNmFhNCJ9fX0=", + "YzNhYmQ0NGFlNjdkOWM5MjU0ZDE3N2U5NjU4ZGE4NDg0MzM4OWQ1ZTFmZmQyYWYxZmI1MTIxN2M3NWMyOTgifX19")), + SHEEP(91, "Sheep", Arrays.asList( + "MjZhNDExMmRmMWU0YmNlMmE1ZTI4NDE3ZjNhYWZmNzljZDY2ZTg4NWMzNzI0NTU0MTAyY2VmOGViOCJ9fX0=", + "ZjMxZjljY2M2YjNlMzJlY2YxM2I4YTExYWMyOWNkMzNkMThjOTVmYzczZGI4YTY2YzVkNjU3Y2NiOGJlNzAifX19", + "Y2UxYWM2ODM5OTNiZTM1NTEyZTFiZTMxZDFmNGY5OGU1ODNlZGIxNjU4YTllMjExOTJjOWIyM2I1Y2NjZGMzIn19fQ==", + "ODM5YWY0NzdlYjYyNzgxNWY3MjNhNTY2MjU1NmVjOWRmY2JhYjVkNDk0ZDMzOGJkMjE0MjMyZjIzZTQ0NiJ9fX0=", + "YWU1Mjg2N2FmZWYzOGJiMTRhMjZkMTQyNmM4YzBmMTE2YWQzNDc2MWFjZDkyZTdhYWUyYzgxOWEwZDU1Yjg1In19fQ==", + "MmFjNzRhMmI5YjkxNDUyZTU2ZmExZGRhNWRiODEwNzc4NTZlNDlmMjdjNmUyZGUxZTg0MWU1Yzk1YTZmYzVhYiJ9fX0=", + "ZjA5ODM5N2EyNzBiNGMzZDJiMWU1NzRiOGNmZDNjYzRlYTM0MDkwNjZjZWZlMzFlYTk5MzYzM2M5ZDU3NiJ9fX0=", + "MTgzNjU2NWM3ODk3ZDQ5YTcxYmMxODk4NmQxZWE2NTYxMzIxYTBiYmY3MTFkNDFhNTZjZTNiYjJjMjE3ZTdhIn19fQ==", + "OTJhMjQ0OGY1OGE0OTEzMzI0MzRlODVjNDVkNzg2ZDg3NDM5N2U4MzBhM2E3ODk0ZTZkOTI2OTljNDJiMzAifX19", + "MWM4YTk3YTM4ODU2NTE0YTE2NDEzZTJjOTk1MjEyODlmNGM1MzYzZGM4MmZjOWIyODM0Y2ZlZGFjNzhiODkifX19", + "YTAxNzIxNWM3ZjhkYjgyMDQwYWEyYzQ3Mjk4YjY2NTQxYzJlYjVmN2Y5MzA0MGE1ZDIzZDg4ZjA2ODdkNGIzNCJ9fX0=", + "NDI4N2ViNTAxMzkxZjI3NTM4OWYxNjZlYzlmZWJlYTc1ZWM0YWU5NTFiODhiMzhjYWU4N2RmN2UyNGY0YyJ9fX0=", + "NDZmNmM3ZTdmZDUxNGNlMGFjYzY4NTkzMjI5ZTQwZmNjNDM1MmI4NDE2NDZlNGYwZWJjY2NiMGNlMjNkMTYifX19", + "YTU1YWQ2ZTVkYjU2OTJkODdmNTE1MTFmNGUwOWIzOWZmOWNjYjNkZTdiNDgxOWE3Mzc4ZmNlODU1M2I4In19fQ==", + "ZDllYzIyODE4ZDFmYmZjODE2N2ZiZTM2NzI4YjI4MjQwZTM0ZTE2NDY5YTI5MjlkMDNmZGY1MTFiZjJjYTEifX19", + "MzI2NTIwODNmMjhlZDFiNjFmOWI5NjVkZjFhYmYwMTBmMjM0NjgxYzIxNDM1OTUxYzY3ZDg4MzY0NzQ5ODIyIn19fQ==")), + COW(92, "Cow", Arrays.asList( + "NWQ2YzZlZGE5NDJmN2Y1ZjcxYzMxNjFjNzMwNmY0YWVkMzA3ZDgyODk1ZjlkMmIwN2FiNDUyNTcxOGVkYzUifX19", + "YzVhOWNkNThkNGM2N2JjY2M4ZmIxZjVmNzU2YTJkMzgxYzlmZmFjMjkyNGI3ZjRjYjcxYWE5ZmExM2ZiNWMifX19")), + CHICKEN(93, "Chicken", Arrays.asList( + "MTYzODQ2OWE1OTljZWVmNzIwNzUzNzYwMzI0OGE5YWIxMWZmNTkxZmQzNzhiZWE0NzM1YjM0NmE3ZmFlODkzIn19fQ==")), + SQUID(94, "Squid", Arrays.asList( + "MDE0MzNiZTI0MjM2NmFmMTI2ZGE0MzRiODczNWRmMWViNWIzY2IyY2VkZTM5MTQ1OTc0ZTljNDgzNjA3YmFjIn19fQ==")), + WOLF(95, "Wolf", Arrays.asList( + "ZTk1Y2JiNGY3NWVhODc2MTdmMmY3MTNjNmQ0OWRhYzMyMDliYTFiZDRiOTM2OTY1NGIxNDU5ZWExNTMxNyJ9fX0=")), + MUSHROOM_COW(96, "Mushroom Cow", "Mooshroom", Arrays.asList( + "ZDBiYzYxYjk3NTdhN2I4M2UwM2NkMjUwN2EyMTU3OTEzYzJjZjAxNmU3YzA5NmE0ZDZjZjFmZTFiOGRiIn19fQ==")), + SNOWMAN(97, "Snowman", Arrays.asList( + "MWZkZmQxZjc1MzhjMDQwMjU4YmU3YTkxNDQ2ZGE4OWVkODQ1Y2M1ZWY3MjhlYjVlNjkwNTQzMzc4ZmNmNCJ9fX0=")), + OCELOT(98, "Ocelot", "Cat", Arrays.asList( + "YWI4ODFjMzliM2FmZGNjNzlmOTFmZTVkZTNjZGQwMTViYzMzNTM4NDNmNTkxZjRkMjNjZDMwMjdkZTRlNiJ9fX0=", + "YTc1NWU3ZGYwNGQxOGIzMWQ2M2MxN2Y0YTdiNGM3MzkyNGJkNjI2NWRhNjllMTEzZWRkZDk3NTE2ZmM3In19fQ==", + "ZjJhNjYyZjJhZTdkZWJlZTY1MjkyYzJiZjQyZmJiMDliOTdiMmZmYmRiMjcwNTIwYzJkYjk2ZTUxZDg5NDUifX19", + "NTY1N2NkNWMyOTg5ZmY5NzU3MGZlYzRkZGNkYzY5MjZhNjhhMzM5MzI1MGMxYmUxZjBiMTE0YTFkYjEifX19")), + IRON_GOLEM(99, "Iron Golem", Arrays.asList( + "ODkwOTFkNzllYTBmNTllZjdlZjk0ZDdiYmE2ZTVmMTdmMmY3ZDQ1NzJjNDRmOTBmNzZjNDgxOWE3MTQifX19")), + HORSE(100, "Horse", Arrays.asList( + "NjE5MDI4OTgzMDg3MzBjNDc0NzI5OWNiNWE1ZGE5YzI1ODM4YjFkMDU5ZmU0NmZjMzY4OTZmZWU2NjI3MjkifX19")), + RABBIT(101, "Rabbit", Arrays.asList( + "Y2I4Y2ZmNGIxNWI4Y2EzN2UyNTc1MGYzNDU3MThmMjg5Y2IyMmM1YjNhZDIyNjI3YTcxMjIzZmFjY2MifX19", + "NzJjNTgxMTZhMTQ3ZDFhOWEyNjI2OTIyNGE4YmUxODRmZThlNWYzZjNkZjliNjE3NTEzNjlhZDg3MzgyZWM5In19fQ==", + "Yzk3N2EzMjY2YmYzYjllYWYxN2U1YTAyZWE1ZmJiNDY4MDExNTk4NjNkZDI4OGI5M2U2YzEyYzljYiJ9fX0=")), + POLAR_BEAR(102, "Polar Bear", Arrays.asList( + "ZDQ2ZDIzZjA0ODQ2MzY5ZmEyYTM3MDJjMTBmNzU5MTAxYWY3YmZlODQxOTk2NjQyOTUzM2NkODFhMTFkMmIifX19")), + LLAMA(103, "Llama", Arrays.asList( + "ODAyNzdlNmIzZDlmNzgxOWVmYzdkYTRiNDI3NDVmN2FiOWE2M2JhOGYzNmQ2Yjg0YTdhMjUwYzZkMWEzNThlYiJ9fX0=", + "Y2YyNGU1NmZkOWZmZDcxMzNkYTZkMWYzZTJmNDU1OTUyYjFkYTQ2MjY4NmY3NTNjNTk3ZWU4MjI5OWEifX19", + "YzJiMWVjZmY3N2ZmZTNiNTAzYzMwYTU0OGViMjNhMWEwOGZhMjZmZDY3Y2RmZjM4OTg1NWQ3NDkyMTM2OCJ9fX0=", + "NGQ2N2ZkNGJmZjI5MzI2OWNiOTA4OTc0ZGNhODNjMzM0ODVlNDM1ZWQ1YThlMWRiZDY1MjFjNjE2ODcxNDAifX19")), + LLAMA_SPIT(104, "Llama Spit"), + PARROT(105, "Parrot", Arrays.asList( + "YTRiYThkNjZmZWNiMTk5MmU5NGI4Njg3ZDZhYjRhNTMyMGFiNzU5NGFjMTk0YTI2MTVlZDRkZjgxOGVkYmMzIn19fQ==", + "Yjc4ZTFjNWY0OGE3ZTEyYjI2Mjg1MzU3MWVmMWY1OTdhOTJlZjU4ZGE4ZmFhZmUwN2JiN2MwZTY5ZTkzIn19fQ==", + "YWI5YTM2YzU1ODlmM2EyZTU5YzFjYWE5YjNiODhmYWRhNzY3MzJiZGI0YTc5MjYzODhhOGMwODhiYmJjYiJ9fX0=", + "M2Q2ZjRhMjFlMGQ2MmFmODI0Zjg3MDhhYzYzNDEwZjFhMDFiYmI0MWQ3ZjRhNzAyZDk0NjljNjExMzIyMiJ9fX0=", + "MmI5NGYyMzZjNGE2NDJlYjJiY2RjMzU4OWI5YzNjNGEwYjViZDVkZjljZDVkNjhmMzdmOGM4M2Y4ZTNmMSJ9fX0=", + "ZGFjNjcwM2RlZDQ2ZDkzOWE2MjBmZTIyYzQzZTE4Njc0ZTEzZDIzYzk3NDRiZTAzNmIzNDgzYzFkMWNkZCJ9fX0=", + "ZjBiZmE4NTBmNWRlNGIyOTgxY2NlNzhmNTJmYzJjYzdjZDdiNWM2MmNhZWZlZGRlYjljZjMxMWU4M2Q5MDk3In19fQ==", + "ZjhhODJjOGI3NWRkMWMyY2U4MTMzYzBiYTkzOWI4YzUyZTQ3ZDNlYzM3NDk1MGY0N2RkZGJiZTM0NWUyMCJ9fX0=", + "YWNhNTgwYjA1MWM2M2JlMjlkYTU0NWE5YWE3ZmY3ZTEzNmRmNzdhODFjNjdkYzFlZTllNjE3MGMxNGZiMzEwIn19fQ==")), + VILLAGER(120, "Villager", Arrays.asList( + "ODIyZDhlNzUxYzhmMmZkNGM4OTQyYzQ0YmRiMmY1Y2E0ZDhhZThlNTc1ZWQzZWIzNGMxOGE4NmU5M2IifX19")), + ENDER_CRYSTAL(200, "End Crystal"), + TURTLE(901, "Turtle", Arrays.asList( + "MGE0MDUwZTdhYWNjNDUzOTIwMjY1OGZkYzMzOWRkMTgyZDdlMzIyZjlmYmNjNGQ1Zjk5YjU3MThhIn19fQ==")), + PHANTOM(902, "Phantom", Arrays.asList( + "NDExZDI1YmNkYWJhZmFkNWZkNmUwMTBjNWIxY2Y3YTAwYzljY2E0MGM1YTQ2NzQ3ZjcwNmRjOWNiM2EifX19", + "YWQyZmE1NjE4NDQ3NzYyZTI2MTExZTA2MGRjNTkzZWE2MjJkNWRkZmMzODVkN2U0MjUzMmU0NjMyN2Y4MDdjMCJ9fX0=")), + TRIDENT(903, "Trident"), + COD(904, "Cod", Arrays.asList( + "NmY5OWI1ODBkNDVhNzg0ZTdhOTY0ZTdkM2IxZjk3Y2VjZTc0OTExMTczYmQyMWMxZDdjNTZhY2RjMzg1ZWQ1In19fQ==")), + SALMON(905, "Salmon", Arrays.asList( + "YWRmYzU3ZDA5MDU5ZTQ3OTlmYTkyYzE1ZTI4NTEyYmNmYWExMzE1NTc3ZmUzYTI3YWVkMzg5ZTRmNzUyMjg5YSJ9fX0=")), + PUFFERFISH(906, "Pufferfish", Arrays.asList( + "YTk1NTkzODg5OTNmZTc4MmY2N2JkNThkOThjNGRmNTZiY2Q0MzBlZGNiMmY2NmVmNTc3N2E3M2MyN2RlMyJ9fX0=")), + TROPICAL_FISH(907, "Tropical Fish", Arrays.asList( + "MzZkMTQ5ZTRkNDk5OTI5NjcyZTI3Njg5NDllNjQ3Nzk1OWMyMWU2NTI1NDYxM2IzMjdiNTM4ZGYxZTRkZiJ9fX0=")), + DROWNED(908, "Drowned", Arrays.asList( + "YzNmN2NjZjYxZGJjM2Y5ZmU5YTYzMzNjZGUwYzBlMTQzOTllYjJlZWE3MWQzNGNmMjIzYjNhY2UyMjA1MSJ9fX0=", + "MWY4YmFhNDhiOGY1MTE5OTBlNDdkYjk2ODMyNGMxNTJiZDExNjc3MzFkZGYwMzQ1MzAwNDQ3MzVhNmJkMmVkNCJ9fX0=", + "YzFhNzMyNTI0MDFhNmU5NDZmNjFkYmFjMGUwMjdkMTgzZTBhY2U1ODc1MmZhMTVhNjRkMjQ0OWZjZjUwODdiNyJ9fX0=", + "Yzg0ZGY3OWM0OTEwNGIxOThjZGFkNmQ5OWZkMGQwYmNmMTUzMWM5MmQ0YWI2MjY5ZTQwYjdkM2NiYmI4ZTk4YyJ9fX0=", + "ZmIxNTMxYzA0ZTI1ZDdmYTY0NTc2OTgyNjg0OTFjYjg5NmQzMzAyZDI2ODg0ZmNmZGYxYTBiMmY5MmQ3N2M4ZiJ9fX0=", + "NTZkYWY1MGVhZjc2YzNhNmQ1YWQzOWM5NjZmMjk4NzdiOTFkOTUwZGQxZTM3MTIyZTljODE5NTg1Yzg5ZDkyZSJ9fX0=")), + DOLPHIN(909, "Dolphin", Arrays.asList( + "OGU5Njg4Yjk1MGQ4ODBiNTViN2FhMmNmY2Q3NmU1YTBmYTk0YWFjNmQxNmY3OGU4MzNmNzQ0M2VhMjlmZWQzIn19fQ==")), + LINGERING_POTION(910, "Lingering Potion"), + FISHING_HOOK(911, "Fishing Hook"), + LIGHTNING(912, "Lightning Bolt"), + WEATHER(913, "Weather"), + PLAYER(914, "Player"), + COMPLEX_PART(915, "Complex Part"), + TIPPED_ARROW(916, "Tipped Arrow"), + + PANDA(917, "Panda", Arrays.asList( + "ZDE4OGM5ODBhYWNmYTk0Y2YzMzA4ODUxMmIxYjk1MTdiYTgyNmIxNTRkNGNhZmMyNjJhZmY2OTc3YmU4YSJ9fX0=")), + PILLAGER(918, "Pillager", Arrays.asList( + "NGFlZTZiYjM3Y2JmYzkyYjBkODZkYjVhZGE0NzkwYzY0ZmY0NDY4ZDY4Yjg0OTQyZmRlMDQ0MDVlOGVmNTMzMyJ9fX0=")), + RAVAGER(919, "Ravager", Arrays.asList( + "MWNiOWYxMzlmOTQ4OWQ4NmU0MTBhMDZkOGNiYzY3MGM4MDI4MTM3NTA4ZTNlNGJlZjYxMmZlMzJlZGQ2MDE5MyJ9fX0=", + "M2I2MjUwMWNkMWI4N2IzN2Y2MjgwMTgyMTBlYzU0MDBjYjY1YTRkMWFhYjc0ZTZhM2Y3ZjYyYWE4NWRiOTdlZSJ9fX0=")), + TRADER_LLAMA(920, "Trader Llama", Arrays.asList( + "ODQyNDc4MGIzYzVjNTM1MWNmNDlmYjViZjQxZmNiMjg5NDkxZGY2YzQzMDY4M2M4NGQ3ODQ2MTg4ZGI0Zjg0ZCJ9fX0=", + "NzA4N2E1NTZkNGZmYTk1ZWNkMjg0NGYzNTBkYzQzZTI1NGU1ZDUzNWZhNTk2ZjU0MGQ3ZTc3ZmE2N2RmNDY5NiJ9fX0=", + "YmU0ZDhhMGJjMTVmMjM5OTIxZWZkOGJlMzQ4MGJhNzdhOThlZTdkOWNlMDA3MjhjMGQ3MzNmMGEyZDYxNGQxNiJ9fX0=")), + WANDERING_TRADER(921, "Wandering Trader", Arrays.asList( + "NWYxMzc5YTgyMjkwZDdhYmUxZWZhYWJiYzcwNzEwZmYyZWMwMmRkMzRhZGUzODZiYzAwYzkzMGM0NjFjZjkzMiJ9fX0=")), + FOX(922, "Fox", Arrays.asList( + "YjZmZWI3NjFiMmY1OWZhYmU1Y2MzY2M4MmE5MzRiNTM0ZWE5OWVkYjkxMzJjY2RhOWY0ODRiZDU5ODZkNyJ9fX0=", + "MjRhMDM0NzQzNjQzNGViMTNkNTM3YjllYjZiNDViNmVmNGM1YTc4Zjg2ZTkxODYzZWY2MWQyYjhhNTNiODIifX19", + "MTZkYjdkNTA3Mzg5YTE0YmJlYzM5ZGU2OTIyMTY1YjMyZDQzNjU3YmNiNmFhZjRiNTE4MjgyNWIyMmI0In19fQ==")), + CAT(923, "Cat", Arrays.asList( + "N2M5Yjc0MDllN2I1MzgzYzE5YjM2MmIyYTBjYjQzZDUwOTNiMTNlMmIyMzRlOGExODkxNTYzZTU1ZWFlOWQ2OCJ9fX0=", + "NTg4MDNmMDI3MGY4Y2RmNGUwZmU5NzMyZDQ5NjdjY2NjMGEyZjRmY2QxMThjZDE1MDAwOTc5YjE4ODg1MTQ0ZiJ9fX0=")), + // if possible we can remove this string for each texture to save up some space + // eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUv + UNKNOWN(999, "Unknown"); + + private int id; + private String name; + private String secondaryName; + EntityType type = null; + public static HashMap cache = new HashMap(); + + CMIEntityType(int id, String name, List headTextures) { + this(id, name, null, headTextures); + } + + CMIEntityType(int id, String name) { + this(id, name, null, new ArrayList()); + } + + CMIEntityType(int id, String name, String secondaryName) { + this(id, name, secondaryName, new ArrayList()); + } + + CMIEntityType(int id, String name, String secondaryName, List headTextures) { + this.id = id; + this.name = name; + this.secondaryName = secondaryName; + } + + public int getId() { + return id; + } + + public String getName() { + return name; + } + + public static CMIEntityType getById(int id) { + for (CMIEntityType one : CMIEntityType.values()) { + if (one.getId() == id) + return one; + } + return CMIEntityType.PIG; + } + + public static CMIEntityType getByType(EntityType entity) { + return getByName(entity.toString()); + } + + public static CMIEntityType getByItem(ItemStack item) { + if (item == null) + return null; + + if (CMIMaterial.isMonsterEgg(item.getType())) { + String name = item.getType().toString().replace("_SPAWN_EGG", ""); + return getByName(name); + } + + if (CMIMaterial.SPAWNER.equals(item.getType())) { + if (item.getItemMeta() instanceof BlockStateMeta) { + BlockStateMeta bsm = (BlockStateMeta) item.getItemMeta(); + if (bsm.getBlockState() instanceof CreatureSpawner) { + CreatureSpawner bs = (CreatureSpawner) bsm.getBlockState(); + return CMIEntityType.getByType(bs.getSpawnedType()); + } + } + } + return null; + } + + public static CMIEntityType getByName(String name) { + String main = name; + String sub = null; + + if (name.contains("_")) { + main = name.split("_")[0]; + sub = name.split("_")[1]; + } + if (name.contains(":")) { + main = name.split(":")[0]; + sub = name.split(":")[1]; + } + + String updated = (main + (sub == null ? "" : sub)).toLowerCase(); + String reverse = ((sub == null ? "" : sub) + main).toLowerCase(); + + CMIEntityType type = null; + + Integer id = null; + try { + id = Integer.parseInt(main); + } catch (Exception e) { + } + + for (CMIEntityType one : CMIEntityType.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(updated) || one.name.replace(" ", "").equalsIgnoreCase(updated)) { + type = one; + break; + } + } + + if (type == null) + for (CMIEntityType one : CMIEntityType.values()) { + if (one.secondaryName == null) + continue; + + String oneN = one.secondaryName; + oneN = oneN.replace("_", ""); + if (oneN.equalsIgnoreCase(name)) { + type = one; + break; + } + } + + if (type == null) + for (CMIEntityType one : CMIEntityType.values()) { + if (one.name.replace("_", "").contains(updated)) { + type = one; + break; + } + } + + if (sub != null) { + if (type == null) + for (CMIEntityType one : CMIEntityType.values()) { + if (one.name().replace("_", "").equalsIgnoreCase(reverse) || one.name.replace(" ", "").equalsIgnoreCase(reverse)) { + type = one; + break; + } + } + if (type == null) + for (CMIEntityType one : CMIEntityType.values()) { + if (one.name.replace("_", "").contains(reverse)) { + type = one; + break; + } + } + } + + if (id != null) { + if (type == null) + for (CMIEntityType one : CMIEntityType.values()) { + if (one.getId() == id) { + type = one; + break; + } + } + } + + if (type == null) + for (CMIEntityType one : CMIEntityType.values()) { + if (one.name.contains("_")) + continue; + if (one.name.equalsIgnoreCase(main)) { + type = one; + break; + } + } + + return type; + } + + public EntityType getType() { + if (type != null) + return type; + for (EntityType one : EntityType.values()) { + if (one.toString().equalsIgnoreCase(this.name())) { + type = one; + break; + } + } + return type; + } + + public boolean isAlive() { + return getType() == null ? false : getType().isAlive(); + } + + public boolean isSpawnable() { + return getType() == null ? false : getType().isSpawnable(); + } + + public static String getRealNameByType(EntityType type) { + if (type == null) + return null; + CMIEntityType ctype = CMIEntityType.getByType(type); + if (ctype != null) + return ctype.getName(); + String name = type.name(); + + name = name.toLowerCase().replace("_", " "); + name = name.substring(0, 1).toUpperCase() + name.substring(1); + return name; + } + + public CMIMaterial getSpawnEggMaterial() { + + CMIMaterial m = CMIMaterial.get((this.equals(CMIEntityType.MUSHROOM_COW) ? "Mooshroom".toLowerCase() : this.toString().toLowerCase()) + "_spawn_egg"); + + if (m != null && m.isMonsterEgg()) + return m; + + return null; + } +} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java b/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java index 600818d0b..f518e5fb8 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java @@ -2,30 +2,20 @@ import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map.Entry; -import java.util.Set; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; -import org.bukkit.block.CreatureSpawner; import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; import org.bukkit.inventory.meta.EnchantmentStorageMeta; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.material.SpawnEgg; import org.bukkit.potion.PotionData; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIEntityType; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; public class CMIItemStack { @@ -155,9 +145,16 @@ public CMIItemStack setLore(List lore) { public CMIItemStack addEnchant(Enchantment enchant, Integer level) { if (enchant == null) return this; - ItemMeta meta = this.getItemStack().getItemMeta(); - meta.addEnchant(enchant, level, true); - this.getItemStack().setItemMeta(meta); + + if (this.getItemStack().getItemMeta() instanceof EnchantmentStorageMeta) { + EnchantmentStorageMeta meta = (EnchantmentStorageMeta) this.getItemStack().getItemMeta(); + meta.addStoredEnchant(enchant, level, true); + this.getItemStack().setItemMeta(meta); + } else { + ItemMeta meta = this.getItemStack().getItemMeta(); + meta.addEnchant(enchant, level, true); + this.getItemStack().setItemMeta(meta); + } return this; } @@ -315,9 +312,7 @@ else if (cmiMaterial != null) { data = (short) 0; } - if (CMIMaterial.SPAWNER.equals(item.getType())) { - data = getEntityType().getTypeId(); - } else if (item.getType() == Material.POTION || item.getType().name().contains("SPLASH_POTION") || item.getType().name().contains("TIPPED_ARROW")) { + if (item.getType() == Material.POTION || item.getType().name().contains("SPLASH_POTION") || item.getType().name().contains("TIPPED_ARROW")) { PotionMeta potion = (PotionMeta) item.getItemMeta(); try { if (potion != null && potion.getBasePotionData() != null && potion.getBasePotionData().getType() != null && potion.getBasePotionData().getType().getEffectType() != null) { @@ -398,8 +393,6 @@ public boolean isSimilar(CMIItemStack item) { if ((item.getCMIType() == CMIMaterial.SPAWNER || item.getCMIType().isMonsterEgg()) && (getCMIType() == CMIMaterial.SPAWNER || getCMIType().isMonsterEgg())) { if (this.cmiMaterial != item.cmiMaterial) return false; - if (getEntityType() != item.getEntityType()) - return false; return true; } @@ -408,21 +401,6 @@ public boolean isSimilar(CMIItemStack item) { return this.cmiMaterial == item.cmiMaterial && this.getData() == item.getData(); } - public EntityType getEntityType() { - if (this.getItemStack() == null) - return null; - ItemStack is = this.getItemStack().clone(); - if (is.getItemMeta() instanceof org.bukkit.inventory.meta.BlockStateMeta) { - org.bukkit.inventory.meta.BlockStateMeta bsm = (org.bukkit.inventory.meta.BlockStateMeta) is.getItemMeta(); - if (bsm.getBlockState() instanceof CreatureSpawner) { - CreatureSpawner bs = (CreatureSpawner) bsm.getBlockState(); - return bs.getSpawnedType(); - } - } - - return EntityType.fromId(is.getData().getData()); - } - public void setDurability(short durability) { this.durability = durability; } diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java new file mode 100644 index 000000000..abbecf5b5 --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java @@ -0,0 +1,2497 @@ +package com.bekvon.bukkit.cmiLib; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Skull; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.cmiLib.ItemManager.SlabType; +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; + +public enum CMIMaterial { + NONE(null, null, null, "None"), + ACACIA_BOAT(447, 0, 27326, "Acacia Boat", "BOAT_ACACIA"), + ACACIA_BUTTON(null, null, 13993, "Acacia Button"), + ACACIA_DOOR(430, 0, 23797, "Acacia Door", "ACACIA_DOOR_ITEM"), + ACACIA_FENCE(192, 0, 4569, "Acacia Fence"), + ACACIA_FENCE_GATE(187, 0, 14145, "Acacia Fence Gate"), + ACACIA_LEAVES(161, 0, 16606, "Acacia Leaves", "LEAVES_2"), + ACACIA_LOG(162, 0, 8385, "Acacia Log", "LOG_2"), + ACACIA_PLANKS(5, 4, 31312, "Acacia Wood Plank", "Acacia Planks"), + ACACIA_PRESSURE_PLATE(null, null, 17586, "Acacia Pressure Plate"), + ACACIA_SAPLING(6, 4, 20806, "Acacia Sapling"), + ACACIA_SLAB(126, 4, 23730, "Acacia Wood Slab", "Acacia Slab"), + ACACIA_STAIRS(163, 0, 17453, "Acacia Stairs"), + ACACIA_TRAPDOOR(null, null, 18343, "Acacia Trapdoor"), + ACACIA_WOOD(null, null, 21861, "Acacia Wood"), + ACTIVATOR_RAIL(157, 0, 5834, "Activator Rail"), + AIR(0, 0, 9648, "Air"), + ALLIUM(38, 2, 6871, "Allium", "RED_ROSE"), + ANDESITE(1, 5, 25975, "Andesite"), + ANVIL(145, 0, 18718, "Anvil"), + APPLE(260, 0, 7720, "Apple"), + ARMOR_STAND(416, 0, 12852, "Armor Stand"), + ARROW(262, 0, 31091, "Arrow"), + ATTACHED_MELON_STEM(null, null, 30882, "Attached Melon Stem"), + ATTACHED_PUMPKIN_STEM(null, null, 12724, "Attached Pumpkin Stem"), + AZURE_BLUET(38, 3, 17608, "Azure Bluet"), + BAKED_POTATO(393, 0, 14624, "Baked Potato"), + BARRIER(166, 0, 26453, "Barrier"), + BAT_SPAWN_EGG(383, 65, 14607, "Spawn Bat", "Bat Spawn Egg"), + BEACON(138, 0, 6608, "Beacon"), + BEDROCK(7, 0, 23130, "Bedrock"), + BEEF(363, 0, 4803, "Raw Beef"), + BEETROOT(434, 0, 23305, "Beetroot"), + BEETROOTS(207, 0, 22075, "Beetroots", "BEETROOT_BLOCK"), + BEETROOT_SEEDS(435, 0, 21282, "Beetroot Seeds"), + BEETROOT_SOUP(436, 0, 16036, "Beetroot Soup"), + BIRCH_BOAT(445, 0, 28104, "Birch Boat", "BOAT_BIRCH"), + BIRCH_BUTTON(null, null, 26934, "Birch Button"), + BIRCH_DOOR(428, 0, 14759, "Birch Door", "BIRCH_DOOR_ITEM"), + BIRCH_FENCE(189, 0, 17347, "Birch Fence"), + BIRCH_FENCE_GATE(184, 0, 6322, "Birch Fence Gate"), + BIRCH_LEAVES(18, 2, 12601, "Birch Leaves", "LEAVES"), + BIRCH_LOG(17, 2, 26727, "Birch Log", "LOG"), + BIRCH_PLANKS(5, 2, 29322, "Birch Wood Plank", "Birch Planks"), + BIRCH_PRESSURE_PLATE(null, null, 9664, "Birch Pressure Plate"), + BIRCH_SAPLING(6, 2, 31533, "Birch Sapling"), + BIRCH_SLAB(126, 2, 13807, "Birch Slab"), + BIRCH_STAIRS(135, 0, 7657, "Birch Wood Stairs", "Birch Stairs"), + BIRCH_TRAPDOOR(null, null, 32585, "Birch Trapdoor"), + BIRCH_WOOD(null, null, 20913, "Birch Wood"), + BLACK_BANNER(425, 0, 9365, "Banner", "Black Banner"), + BLACK_BED(355, 15, 20490, "Black Bed"), + BLACK_CARPET(171, 15, 6056, "Black Carpet", "CARPET"), + BLACK_CONCRETE(251, 15, 13338, "Black Concrete", "CONCRETE"), + BLACK_CONCRETE_POWDER(252, 15, 16150, "Black Concrete Powder", "CONCRETE_POWDER"), + BLACK_GLAZED_TERRACOTTA(250, 0, 29678, "Black Glazed Terracotta"), + BLACK_SHULKER_BOX(234, 0, 24076, "Black Shulker Box"), + BLACK_STAINED_GLASS(95, 15, 13941, "Black Stained Glass", "STAINED_GLASS"), + BLACK_STAINED_GLASS_PANE(160, 15, 13201, "Black Stained Glass Pane", "STAINED_GLASS_PANE"), + BLACK_TERRACOTTA(159, 15, 26691, "Black Terracotta", "STAINED_CLAY"), + BLACK_WALL_BANNER(117, 0, 4919, "Black Banner"), + BLACK_WOOL(35, 15, 16693, "Black Wool"), + BLAZE_POWDER(377, 0, 18941, "Blaze Powder"), + BLAZE_ROD(369, 0, 8289, "Blaze Rod"), + BLAZE_SPAWN_EGG(383, 61, 4759, "Spawn Blaze", "Blaze Spawn Egg"), + BLUE_BANNER(245, 4, 18481, "Blue Banner", "PURPLE_GLAZED_TERRACOTTA"), + BLUE_BED(355, 11, 12714, "Blue Bed"), + BLUE_CARPET(171, 11, 13292, "Blue Carpet"), + BLUE_CONCRETE(251, 11, 18756, "Blue Concrete"), + BLUE_CONCRETE_POWDER(252, 11, 17773, "Blue Concrete Powder"), + BLUE_GLAZED_TERRACOTTA(246, 0, 23823, "Blue Glazed Terracotta"), + BLUE_ICE(null, null, 22449, "Blue Ice"), + BLUE_ORCHID(38, 1, 13432, "Blue Orchid"), + BLUE_SHULKER_BOX(230, 0, 11476, "Blue Shulker Box"), + BLUE_STAINED_GLASS(95, 11, 7107, "Blue Stained Glass"), + BLUE_STAINED_GLASS_PANE(160, 11, 28484, "Blue Stained Glass Pane"), + BLUE_TERRACOTTA(159, 11, 5236, "Blue Terracotta"), + BLUE_WALL_BANNER(117, 4, 17757, "Blue Banner"), + BLUE_WOOL(35, 11, 15738, "Blue Wool"), + BONE(352, 0, 5686, "Bone"), + BONE_BLOCK(216, 0, 17312, "Bone Block"), + BONE_MEAL(351, 15, 32458, "Bone Meal"), + BOOK(340, 0, 23097, "Book"), + BOOKSHELF(47, 0, 10069, "Bookshelf"), + BOW(261, 0, 8745, "Bow"), + BOWL(281, 0, 32661, "Bowl"), + BRAIN_CORAL(null, null, 31316, "Brain Coral"), + BRAIN_CORAL_BLOCK(null, null, 30618, "Brain Coral Block"), + BRAIN_CORAL_FAN(null, null, 13849, "Brain Coral Fan"), + BRAIN_CORAL_WALL_FAN(null, null, 22685, "Brain Coral Wall Fan"), + BREAD(297, 0, 32049, "Bread"), + BREWING_STAND(379, 0, 14539, "Brewing Stand", "BREWING_STAND_ITEM"), + BRICK(336, 0, 6820, "Brick", "claybrick"), + BRICKS(45, 0, 14165, "Bricks"), + BRICK_SLAB(44, 4, 26333, "Brick Slab", "STEP"), + BRICK_STAIRS(108, 0, 21534, "Brick Stairs"), + BROWN_BANNER(425, 3, 11481, "Brown Banner"), + BROWN_BED(355, 12, 25624, "Brown Bed"), + BROWN_CARPET(171, 12, 23352, "Brown Carpet"), + BROWN_CONCRETE(251, 12, 19006, "Brown Concrete"), + BROWN_CONCRETE_POWDER(252, 12, 21485, "Brown Concrete Powder"), + BROWN_GLAZED_TERRACOTTA(247, 0, 5655, "Brown Glazed Terracotta"), + BROWN_MUSHROOM(39, 0, 9665, "Brown Mushroom"), + BROWN_MUSHROOM_BLOCK(99, 0, 6291, "Brown Mushroom Block", "HUGE_MUSHROOM_1"), + BROWN_SHULKER_BOX(231, 0, 24230, "Brown Shulker Box"), + BROWN_STAINED_GLASS(95, 12, 20945, "Brown Stained Glass"), + BROWN_STAINED_GLASS_PANE(160, 12, 17557, "Brown Stained Glass Pane"), + BROWN_TERRACOTTA(159, 12, 23664, "Brown Terracotta"), + BROWN_WALL_BANNER(117, 3, 14731, "Brown Banner"), + BROWN_WOOL(35, 12, 32638, "Brown Wool"), + BUBBLE_COLUMN(null, null, 13758, "Bubble Column"), + BUBBLE_CORAL(null, null, 12464, "Bubble Coral"), + BUBBLE_CORAL_BLOCK(null, null, 15437, "Bubble Coral Block"), + BUBBLE_CORAL_FAN(null, null, 10795, "Bubble Coral Fan"), + BUBBLE_CORAL_WALL_FAN(null, null, 20382, "Bubble Coral Wall Fan"), + BUCKET(325, 0, 15215, "Bucket"), + CACTUS(81, 0, 12191, "Cactus"), + CACTUS_GREEN(351, 2, 17296, "Cactus Green"), + CAKE(354, 0, 27048, "Cake"), + CARROT(391, 0, 22824, "Carrot", "Carrotitem"), + CARROTS(141, 0, 17258, "Carrots"), + CARROT_ON_A_STICK(398, 0, 27809, "Carrot on a Stick", "carrotstick"), + CARVED_PUMPKIN(null, null, 25833, "Carved Pumpkin"), + CAULDRON(380, 0, 26531, "Cauldron", "CAULDRON_ITEM"), + CAVE_AIR(null, null, 17422, "Cave Air"), + CAVE_SPIDER_SPAWN_EGG(383, 59, 23341, "Spawn Cave Spider", "Cave Spider Spawn Egg"), + CHAINMAIL_BOOTS(305, 0, 17953, "Chainmail Boots"), + CHAINMAIL_CHESTPLATE(303, 0, 23602, "Chainmail Chestplate"), + CHAINMAIL_HELMET(302, 0, 26114, "Chainmail Helmet"), + CHAINMAIL_LEGGINGS(304, 0, 19087, "Chainmail Leggings"), + CHAIN_COMMAND_BLOCK(null, null, 26798, "Chain Command Block"), + CHARCOAL(263, 1, 5390, "Charcoal"), + CHEST(54, 0, 22969, "Chest"), + CHEST_MINECART(342, 0, 4497, "Minecart with Chest", "Storageminecart"), + CHICKEN(365, 0, 17281, "Raw Chicken"), + CHICKEN_SPAWN_EGG(383, 93, 5462, "Spawn Chicken", "Chicken Spawn Egg"), + CHIPPED_ANVIL(145, 1, 10623, "Chipped Anvil"), + CHISELED_QUARTZ_BLOCK(155, 1, 30964, "Chiseled Quartz Block", "QUARTZ_BLOCK"), + CHISELED_RED_SANDSTONE(179, 1, 15529, "Chiseled Red Sandstone", "RED_SANDSTONE"), + CHISELED_SANDSTONE(24, 1, 31763, "Chiseled Sandstone"), + CHISELED_STONE_BRICKS(98, 3, 9087, "Chiseled Stone Bricks", "SMOOTH_BRICK"), + CHORUS_FLOWER(200, 0, 28542, "Chorus Flower"), + CHORUS_FRUIT(432, 0, 7652, "Chorus Fruit"), + CHORUS_PLANT(199, 0, 28243, "Chorus Plant"), + CLAY(82, 0, 27880, "Clay", "Clay Block"), + CLAY_BALL(337, 0, 24603, "Clay Ball"), + CLOCK(347, 0, 14980, "Clock", "watch"), + COAL(263, 0, 29067, "Coal"), + COAL_BLOCK(173, 0, 27968, "Block of Coal", "COAL_BLOCK"), + COAL_ORE(16, 0, 30965, "Coal Ore"), + COARSE_DIRT(3, 1, 15411, "Coarse Dirt"), + COBBLESTONE(4, 0, 32147, "Cobblestone"), + COBBLESTONE_SLAB(44, 3, 6340, "Cobblestone Slab"), + COBBLESTONE_STAIRS(67, 0, 24715, "Cobblestone Stairs"), + COBBLESTONE_WALL(139, 0, 12616, "Cobblestone Wall", "COBBLE_WALL"), + COBWEB(30, 0, 9469, "Cobweb", "WEB"), + COCOA(127, 0, 29709, "Cocoa"), + COCOA_BEANS(351, 3, 27381, "Coco Beans"), + COD(null, null, 24691, "Raw Cod"), + COD_BUCKET(null, null, 28601, "Bucket of Cod"), + COD_SPAWN_EGG(null, null, 27248, "Cod Spawn Egg"), + COMMAND_BLOCK(137, 0, 4355, "Command Block", "COMMAND"), + COMMAND_BLOCK_MINECART(422, 0, 7992, "Minecart with Command Block"), + COMPARATOR(404, 0, 18911, "Redstone Comparator"), + COMPASS(345, 0, 24139, "Compass"), + CONDUIT(null, null, 5148, "Conduit"), + COOKED_BEEF(364, 0, 21595, "Steak"), + COOKED_CHICKEN(366, 0, 20780, "Cooked Chicken"), + COOKED_COD(350, 0, 9681, "Cooked Fish"), + COOKED_MUTTON(424, 0, 31447, "Cooked Mutton"), + COOKED_PORKCHOP(320, 0, 27231, "Cooked Porkchop", "grilledpork"), + COOKED_RABBIT(412, 0, 4454, "Cooked Rabbit"), + COOKED_SALMON(350, 1, 5615, "Cooked Salmon"), + COOKIE(357, 0, 27431, "Cookie"), + COW_SPAWN_EGG(383, 92, 14761, "Spawn Cow", "Cow Spawn Egg"), + CRACKED_STONE_BRICKS(98, 2, 27869, "Cracked Stone Bricks"), + CRAFTING_TABLE(58, 0, 20706, "Crafting Table", "WORKBENCH"), + CREEPER_HEAD(397, 4, 29146, "Mob Head (Creeper)", "Creeper Head"), + CREEPER_SPAWN_EGG(383, 50, 9653, "Spawn Creeper", "Creeper Spawn Egg"), + CREEPER_WALL_HEAD(144, 4, 30123, "Creeper Wall Head"), + CUT_RED_SANDSTONE(null, null, 26842, "Cut Red Sandstone"), + CUT_SANDSTONE(null, null, 6118, "Cut Sandstone"), + CYAN_BANNER(425, 6, 9839, "Cyan Banner"), + CYAN_BED(355, 9, 16746, "Cyan Bed"), + CYAN_CARPET(171, 9, 31495, "Cyan Carpet"), + CYAN_CONCRETE(251, 9, 26522, "Cyan Concrete"), + CYAN_CONCRETE_POWDER(252, 9, 15734, "Cyan Concrete Powder"), + CYAN_DYE(351, 6, 8043, "Cyan Dye"), + CYAN_GLAZED_TERRACOTTA(244, 0, 9550, "Cyan Glazed Terracotta"), + CYAN_SHULKER_BOX(228, 0, 28123, "Cyan Shulker Box"), + CYAN_STAINED_GLASS(95, 9, 30604, "Cyan Stained Glass"), + CYAN_STAINED_GLASS_PANE(160, 9, 11784, "Cyan Stained Glass Pane"), + CYAN_TERRACOTTA(159, 9, 25940, "Cyan Terracotta"), + CYAN_WALL_BANNER(117, 6, 10889, "Cyan Banner"), + CYAN_WOOL(35, 9, 12221, "Cyan Wool"), + DAMAGED_ANVIL(145, 2, 10274, "Damaged Anvil"), + DANDELION(37, 0, 30558, "Dandelion", "YELLOW_FLOWER"), + DANDELION_YELLOW(351, 11, 21789, "Dandelion Yellow"), + DARK_OAK_BOAT(448, 0, 28618, "Dark Oak Boat", "BOAT_DARK_OAK"), + DARK_OAK_BUTTON(null, null, 6214, "Dark Oak Button"), + DARK_OAK_DOOR(431, 0, 10669, "Dark Oak Door", "DARK_OAK_DOOR_ITEM"), + DARK_OAK_FENCE(191, 0, 21767, "Dark Oak Fence"), + DARK_OAK_FENCE_GATE(186, 0, 10679, "Dark Oak Fence Gate"), + DARK_OAK_LEAVES(161, 1, 22254, "Dark Oak Leaves"), + DARK_OAK_LOG(162, 1, 14831, "Dark Oak Log"), + DARK_OAK_PLANKS(5, 5, 20869, "Dark Oak Wood Plank", "Dark Oak Planks"), + DARK_OAK_PRESSURE_PLATE(null, null, 31375, "Dark Oak Pressure Plate"), + DARK_OAK_SAPLING(6, 5, 14933, "Dark Oak Sapling"), + DARK_OAK_SLAB(126, 5, 28852, "Dark Oak Wood Slab", "Dark Oak Slab"), + DARK_OAK_STAIRS(164, 0, 22921, "Dark Oak Stairs"), + DARK_OAK_TRAPDOOR(null, null, 10355, "Dark Oak Trapdoor"), + DARK_OAK_WOOD(null, null, 16995, "Dark Oak Wood"), + DARK_PRISMARINE(168, 2, 19940, "Dark Prismarine"), + DARK_PRISMARINE_SLAB(null, null, 7577, "Dark Prismarine Slab"), + DARK_PRISMARINE_STAIRS(null, null, 26511, "Dark Prismarine Stairs"), + DAYLIGHT_DETECTOR(151, 0, 8864, "Daylight Detector"), + DEAD_BRAIN_CORAL(null, null, 9116, "Dead Brain Coral"), + DEAD_BRAIN_CORAL_BLOCK(null, null, 12979, "Dead Brain Coral Block"), + DEAD_BRAIN_CORAL_FAN(null, null, 26150, "Dead Brain Coral Fan"), + DEAD_BRAIN_CORAL_WALL_FAN(null, null, 23718, "Dead Brain Coral Wall Fan"), + DEAD_BUBBLE_CORAL(null, null, 30583, "Dead Bubble Coral"), + DEAD_BUBBLE_CORAL_BLOCK(null, null, 28220, "Dead Bubble Coral Block"), + DEAD_BUBBLE_CORAL_FAN(null, null, 17322, "Dead Bubble Coral Fan"), + DEAD_BUBBLE_CORAL_WALL_FAN(null, null, 18453, "Dead Bubble Coral Wall Fan"), + DEAD_BUSH(32, 0, 22888, "Dead Bush"), + DEAD_FIRE_CORAL(null, null, 8365, "Dead Fire Coral"), + DEAD_FIRE_CORAL_BLOCK(null, null, 5307, "Dead Fire Coral Block"), + DEAD_FIRE_CORAL_FAN(null, null, 27073, "Dead Fire Coral Fan"), + DEAD_FIRE_CORAL_WALL_FAN(null, null, 23375, "Dead Fire Coral Wall Fan"), + DEAD_HORN_CORAL(null, null, 5755, "Dead Horn Coral"), + DEAD_HORN_CORAL_BLOCK(null, null, 15103, "Dead Horn Coral Block"), + DEAD_HORN_CORAL_FAN(null, null, 11387, "Dead Horn Coral Fan"), + DEAD_HORN_CORAL_WALL_FAN(null, null, 27550, "Dead Horn Coral Wall Fan"), + DEAD_TUBE_CORAL(null, null, 18028, "Dead Tube Coral"), + DEAD_TUBE_CORAL_BLOCK(null, null, 28350, "Dead Tube Coral Block"), + DEAD_TUBE_CORAL_FAN(null, null, 17628, "Dead Tube Coral Fan"), + DEAD_TUBE_CORAL_WALL_FAN(null, null, 5128, "Dead Tube Coral Wall Fan"), + DEBUG_STICK(null, null, 24562, "Debug Stick"), + DETECTOR_RAIL(28, 0, 13475, "Detector Rail", "DETECTOR_RAIL"), + DIAMOND(264, 0, 20865, "Diamond"), + DIAMOND_AXE(279, 0, 27277, "Diamond Axe"), + DIAMOND_BLOCK(57, 0, 5944, "Block of Diamond", "DIAMOND_BLOCK"), + DIAMOND_BOOTS(313, 0, 16522, "Diamond Boots"), + DIAMOND_CHESTPLATE(311, 0, 32099, "Diamond Chestplate"), + DIAMOND_HELMET(310, 0, 10755, "Diamond Helmet"), + DIAMOND_HOE(293, 0, 24050, "Diamond Hoe"), + DIAMOND_HORSE_ARMOR(419, 0, 10321, "Diamond Horse Armor", "Diamond_barding"), + DIAMOND_LEGGINGS(312, 0, 11202, "Diamond Leggings"), + DIAMOND_ORE(56, 0, 9292, "Diamond Ore"), + DIAMOND_PICKAXE(278, 0, 24291, "Diamond Pickaxe"), + DIAMOND_SHOVEL(277, 0, 25415, "Diamond Shovel", "DIAMOND_SPADE"), + DIAMOND_SWORD(276, 0, 27707, "Diamond Sword"), + DIORITE(1, 3, 24688, "Diorite"), + DIRT(3, 0, 10580, "Dirt"), + DISPENSER(23, 0, 20871, "Dispenser"), + DOLPHIN_SPAWN_EGG(null, null, 20787, "Dolphin Spawn Egg"), + DONKEY_SPAWN_EGG(383, 31, 14513, "Spawn Donkey", "Donkey Spawn Egg"), + DRAGON_BREATH(437, 0, 20154, "Dragon's Breath"), + DRAGON_EGG(122, 0, 29946, "Dragon Egg"), + DRAGON_HEAD(397, 5, 20084, "Dragon Head"), + DRAGON_WALL_HEAD(144, 5, 19818, "Dragon Wall Head"), + DRIED_KELP(null, null, 21042, "Dried Kelp"), + DRIED_KELP_BLOCK(null, null, 12966, "Dried Kelp Block"), + DROPPER(158, 0, 31273, "Dropper"), + DROWNED_SPAWN_EGG(null, null, 19368, "Drowned Spawn Egg"), + EGG(344, 0, 21603, "Egg"), + ELDER_GUARDIAN_SPAWN_EGG(383, 4, 11418, "Spawn Elder Guardian", "Elder Guardian Spawn Egg"), + ELYTRA(443, 0, 23829, "Elytra"), + EMERALD(388, 0, 5654, "Emerald"), + EMERALD_BLOCK(133, 0, 9914, "Emerald Block", "Block of Emerald"), + EMERALD_ORE(129, 0, 16630, "Emerald Ore"), + ENCHANTED_BOOK(403, 0, 11741, "Enchanted Book"), + ENCHANTED_GOLDEN_APPLE(322, 1, 8280, "Enchanted Golden Apple"), + ENCHANTING_TABLE(116, 0, 16255, "Enchanting Table", "ENCHANTMENT_TABLE"), + ENDERMAN_SPAWN_EGG(383, 58, 29488, "Spawn Enderman", "Enderman Spawn Egg"), + ENDERMITE_SPAWN_EGG(383, 67, 16617, "Spawn Endermite", "Endermite Spawn Egg"), + ENDER_CHEST(130, 0, 32349, "Ender Chest"), + ENDER_EYE(381, 0, 24860, "Eye of Ender"), + ENDER_PEARL(368, 0, 5259, "Ender Pearl"), + END_CRYSTAL(426, 0, 19090, "End Crystal"), + END_GATEWAY(209, 0, 26605, "End Gateway"), + END_PORTAL(119, 0, 16782, "End Portal"), + END_PORTAL_FRAME(120, 0, 15480, "End Portal Frame", "ENDER_PORTAL_FRAME"), + END_ROD(198, 0, 24832, "End Rod"), + END_STONE(121, 0, 29686, "End Stone", "ENDER_STONE"), + END_STONE_BRICKS(206, 0, 20314, "End Stone Bricks", "END_BRICKS"), + EVOKER_SPAWN_EGG(383, 34, 21271, "Spawn Evoker", "Evoker Spawn Egg"), + EXPERIENCE_BOTTLE(384, 0, 12858, "Bottle o' Enchanting", "expbottle"), + FARMLAND(60, 0, 31166, "Farmland", "SOIL"), + FEATHER(288, 0, 30548, "Feather"), + FERMENTED_SPIDER_EYE(376, 0, 19386, "Fermented Spider Eye"), + FERN(31, 2, 15794, "Fern", "LONG_GRASS"), + FILLED_MAP(358, 0, 23504, "Map"), + FIRE(51, 0, 16396, "Fire"), + FIREWORK_ROCKET(401, 0, 23841, "Firework Rocket"), + FIREWORK_STAR(402, 0, 12190, "Firework Star", "FIREWORK_CHARGE"), + FIRE_CHARGE(385, 0, 4842, "Fire Charge", "Fireball"), + FIRE_CORAL(null, null, 29151, "Fire Coral"), + FIRE_CORAL_BLOCK(null, null, 12119, "Fire Coral Block"), + FIRE_CORAL_FAN(null, null, 11112, "Fire Coral Fan"), + FIRE_CORAL_WALL_FAN(null, null, 20100, "Fire Coral Wall Fan"), + FISHING_ROD(346, 0, 4167, "Fishing Rod"), + FLINT(318, 0, 23596, "Flint"), + FLINT_AND_STEEL(259, 0, 28620, "Flint and Steel"), + FLOWER_POT(390, 0, 30567, "Flower Pot", "FLOWER_POT_ITEM"), + FROSTED_ICE(212, 0, 21814, "Frosted Ice"), + FURNACE(61, 0, 8133, "Furnace"), + FURNACE_MINECART(343, 0, 14196, "Minecart with Furnace", "POWERED_MINECART"), + GHAST_SPAWN_EGG(383, 56, 9970, "Spawn Ghast", "Ghast Spawn Egg"), + GHAST_TEAR(370, 0, 18222, "Ghast Tear"), + GLASS(20, 0, 6195, "Glass"), + GLASS_BOTTLE(374, 0, 6116, "Glass Bottle"), + GLASS_PANE(102, 0, 5709, "Glass Pane", "THIN_GLASS"), + GLISTERING_MELON_SLICE(382, 0, 20158, "Glistering Melon", "speckledmelon"), + GLOWSTONE(89, 0, 32713, "Glowstone"), + GLOWSTONE_DUST(348, 0, 6665, "Glowstone Dust"), + GOLDEN_APPLE(322, 0, 27732, "Golden Apple", "Gold apple"), + GOLDEN_AXE(286, 0, 4878, "Golden Axe", "Gold Axe"), + GOLDEN_BOOTS(317, 0, 7859, "Golden Boots", "Gold Boots"), + GOLDEN_CARROT(396, 0, 5300, "Golden Carrot", "Gold Carrot"), + GOLDEN_CHESTPLATE(315, 0, 4507, "Golden Chestplate", "Gold Chestplate"), + GOLDEN_HELMET(314, 0, 7945, "Golden Helmet", "Gold Helmet"), + GOLDEN_HOE(294, 0, 19337, "Golden Hoe", "Gold Hoe"), + GOLDEN_HORSE_ARMOR(418, 0, 7996, "Golden Horse Armor", "Gold Barding"), + GOLDEN_LEGGINGS(316, 0, 21002, "Golden Leggings", "Gold Leggings"), + GOLDEN_PICKAXE(285, 0, 10901, "Golden Pickaxe", "GOLD_PICKAXE"), + GOLDEN_SHOVEL(284, 0, 15597, "Golden Shovel", "GOLD_SPADE"), + GOLDEN_SWORD(283, 0, 10505, "Golden Sword", "GOLD_SWORD"), + GOLD_BLOCK(41, 0, 27392, "Block of Gold", "GOLD_BLOCK"), + GOLD_INGOT(266, 0, 28927, "Gold Ingot"), + GOLD_NUGGET(371, 0, 28814, "Gold Nugget"), + GOLD_ORE(14, 0, 32625, "Gold Ore"), + GRANITE(1, 1, 21091, "Granite"), + GRASS(31, 1, 6155, "Grass"), + GRASS_BLOCK(2, 0, 28346, "Grass Block"), + GRASS_PATH(208, 0, 8604, "Grass Path"), + GRAVEL(13, 0, 7804, "Gravel"), + GRAY_BANNER(425, 8, 12053, "Gray Banner"), + GRAY_BED(355, 7, 15745, "Gray Bed"), + GRAY_CARPET(171, 7, 26991, "Gray Carpet"), + GRAY_CONCRETE(251, 7, 13959, "Gray Concrete"), + GRAY_CONCRETE_POWDER(252, 7, 13031, "Gray Concrete Powder"), + GRAY_DYE(351, 8, 9184, "Gray Dye"), + GRAY_GLAZED_TERRACOTTA(242, 0, 6256, "Gray Glazed Terracotta"), + GRAY_SHULKER_BOX(226, 0, 12754, "Gray Shulker Box"), + GRAY_STAINED_GLASS(95, 7, 29979, "Gray Stained Glass"), + GRAY_STAINED_GLASS_PANE(160, 7, 25272, "Gray Stained Glass Pane"), + GRAY_TERRACOTTA(159, 7, 18004, "Gray Terracotta"), + GRAY_WALL_BANNER(117, 8, 24275, "Gray Banner"), + GRAY_WOOL(35, 7, 27209, "Gray Wool"), + GREEN_BANNER(425, 2, 10698, "Green Banner"), + GREEN_BED(355, 13, 13797, "Green Bed"), + GREEN_CARPET(171, 13, 7780, "Green Carpet"), + GREEN_CONCRETE(251, 13, 17949, "Green Concrete"), + GREEN_CONCRETE_POWDER(252, 13, 6904, "Green Concrete Powder"), + GREEN_GLAZED_TERRACOTTA(248, 0, 6958, "Green Glazed Terracotta"), + GREEN_SHULKER_BOX(232, 0, 9377, "Green Shulker Box"), + GREEN_STAINED_GLASS(95, 13, 22503, "Green Stained Glass"), + GREEN_STAINED_GLASS_PANE(160, 13, 4767, "Green Stained Glass Pane"), + GREEN_TERRACOTTA(159, 13, 4105, "Green Terracotta"), + GREEN_WALL_BANNER(117, 2, 15046, "Green Banner"), + GREEN_WOOL(35, 13, 25085, "Green Wool"), + GUARDIAN_SPAWN_EGG(383, 68, 20113, "Spawn Guardian", "Guardian Spawn Egg"), + GUNPOWDER(289, 0, 29974, "Gunpowder", "SULPHUR"), + HAY_BLOCK(170, 0, 17461, "Hay Bale", "HAY_BLOCK"), + HEART_OF_THE_SEA(null, null, 11807, "Heart of the Sea"), + HEAVY_WEIGHTED_PRESSURE_PLATE(148, 0, 16970, "Heavy Weighted Pressure Plate", "IRON_PLATE"), + HOPPER(154, 0, 31974, "Hopper"), + HOPPER_MINECART(408, 0, 19024, "Minecart with Hopper"), + HORN_CORAL(null, null, 19511, "Horn Coral"), + HORN_CORAL_BLOCK(null, null, 19958, "Horn Coral Block"), + HORN_CORAL_FAN(null, null, 13610, "Horn Coral Fan"), + HORN_CORAL_WALL_FAN(null, null, 28883, "Horn Coral Wall Fan"), + HORSE_SPAWN_EGG(383, 100, 25981, "Spawn Horse", "Horse Spawn Egg"), + HUSK_SPAWN_EGG(383, 23, 20178, "Spawn Husk", "Husk Spawn Egg"), + ICE(79, 0, 30428, "Ice"), + INFESTED_CHISELED_STONE_BRICKS(97, 5, 4728, "Infested Chiseled Stone Bricks", "MONSTER_EGGS"), + INFESTED_COBBLESTONE(97, 1, 28798, "Infested Cobblestone"), + INFESTED_CRACKED_STONE_BRICKS(97, 4, 7476, "Infested Cracked Stone Bricks"), + INFESTED_MOSSY_STONE_BRICKS(97, 3, 9850, "Infested Mossy Stone Bricks"), + INFESTED_STONE(97, 0, 18440, "Infested Stone"), + INFESTED_STONE_BRICKS(97, 2, 19749, "Infested Stone Bricks"), + INK_SAC(351, 0, 7184, "Ink Sac", "Ink Sack"), + IRON_AXE(258, 0, 15894, "Iron Axe"), + IRON_BARS(101, 0, 9378, "Iron Bars", "IRON_FENCE"), + IRON_BLOCK(42, 0, 24754, "Block of Iron", "IRON_BLOCK"), + IRON_BOOTS(309, 0, 8531, "Iron Boots"), + IRON_CHESTPLATE(307, 0, 28112, "Iron Chestplate"), + IRON_DOOR(330, 0, 4788, "Iron Door"), + IRON_HELMET(306, 0, 12025, "Iron Helmet"), + IRON_HOE(292, 0, 11339, "Iron Hoe"), + IRON_HORSE_ARMOR(417, 0, 30108, "Iron Horse Armor", "Iron_barding"), + IRON_INGOT(265, 0, 24895, "Iron Ingot"), + IRON_LEGGINGS(308, 0, 18951, "Iron Leggings"), + IRON_NUGGET(452, 0, 13715, "Iron Nugget"), + IRON_ORE(15, 0, 19834, "Iron Ore"), + IRON_PICKAXE(257, 0, 8842, "Iron Pickaxe"), + IRON_SHOVEL(256, 0, 30045, "Iron Shovel", "IRON_SPADE"), + IRON_SWORD(267, 0, 10904, "Iron Sword"), + IRON_TRAPDOOR(167, 0, 17095, "Iron Trapdoor"), + ITEM_FRAME(389, 0, 27318, "Item Frame"), + JACK_O_LANTERN(91, 0, 31612, "Jack o'Lantern", "JACK_O_LANTERN"), + JUKEBOX(84, 0, 19264, "Jukebox"), + JUNGLE_BOAT(446, 0, 4495, "Jungle Boat", "BOAT_JUNGLE"), + JUNGLE_BUTTON(null, null, 25317, "Jungle Button"), + JUNGLE_DOOR(429, 0, 28163, "Jungle Door", "JUNGLE_DOOR_ITEM"), + JUNGLE_FENCE(190, 0, 14358, "Jungle Fence"), + JUNGLE_FENCE_GATE(185, 0, 21360, "Jungle Fence Gate", "JUNGLE_FENCE_GATE"), + JUNGLE_LEAVES(18, 3, 5133, "Jungle Leaves"), + JUNGLE_LOG(17, 3, 20721, "Jungle Log"), + JUNGLE_PLANKS(5, 3, 26445, "Jungle Wood Plank", "Jungle Planks"), + JUNGLE_PRESSURE_PLATE(null, null, 11376, "Jungle Pressure Plate"), + JUNGLE_SAPLING(6, 3, 17951, "Jungle Sapling"), + JUNGLE_SLAB(43, 0, 19117, "Double Stone Slab"), + JUNGLE_STAIRS(136, 0, 20636, "Jungle Wood Stairs", "Jungle Stairs"), + JUNGLE_TRAPDOOR(null, null, 8626, "Jungle Trapdoor"), + JUNGLE_WOOD(null, null, 10341, "Jungle Wood"), + KELP(null, null, 21916, "Kelp"), + KELP_PLANT(null, null, 29697, "Kelp Plant"), + KNOWLEDGE_BOOK(453, 0, 12646, "Knowledge Book"), + LADDER(65, 0, 23599, "Ladder"), + LAPIS_BLOCK(22, 0, 14485, "Lapis Lazuli Block", "LAPIS_BLOCK"), + LAPIS_LAZULI(351, 4, 11075, "Lapis Lazuli"), + LAPIS_ORE(21, 0, 22934, "Lapis Lazuli Ore", "LAPIS_ORE"), + LARGE_FERN(175, 3, 30177, "Large Fern", "DOUBLE_PLANT"), + LAVA(10, 0, 8415, "Flowing Lava"), + LAVA_BUCKET(327, 0, 9228, "Lava Bucket"), + LEAD(420, 0, 29539, "Lead", "Leash"), + LEATHER(334, 0, 16414, "Leather"), + LEATHER_BOOTS(301, 0, 15282, "Leather Boots"), + LEATHER_CHESTPLATE(299, 0, 29275, "Leather Tunic", "LEATHER_CHESTPLATE"), + LEATHER_HELMET(298, 0, 11624, "Leather Cap", "LEATHER_HELMET"), + LEATHER_LEGGINGS(300, 0, 28210, "Leather Pants", "LEATHER_LEGGINGS"), + LEVER(69, 0, 15319, "Lever"), + LIGHT_BLUE_BANNER(425, 12, 18060, "Light Blue Banner"), + LIGHT_BLUE_BED(355, 3, 20957, "Light Blue Bed"), + LIGHT_BLUE_CARPET(171, 3, 21194, "Light Blue Carpet"), + LIGHT_BLUE_CONCRETE(251, 3, 29481, "Light Blue Concrete"), + LIGHT_BLUE_CONCRETE_POWDER(252, 3, 31206, "Light Blue Concrete Powder"), + LIGHT_BLUE_DYE(351, 12, 28738, "Light Blue Dye"), + LIGHT_BLUE_GLAZED_TERRACOTTA(238, 0, 4336, "Light Blue Glazed Terracotta"), + LIGHT_BLUE_SHULKER_BOX(222, 0, 18226, "Light Blue Shulker Box"), + LIGHT_BLUE_STAINED_GLASS(95, 3, 17162, "Light Blue Stained Glass"), + LIGHT_BLUE_STAINED_GLASS_PANE(160, 3, 18721, "Light Blue Stained Glass Pane"), + LIGHT_BLUE_TERRACOTTA(159, 3, 31779, "Light Blue Terracotta"), + LIGHT_BLUE_WALL_BANNER(117, 12, 12011, "Light Blue Banner"), + LIGHT_BLUE_WOOL(35, 3, 21073, "Light Blue Wool"), + LIGHT_GRAY_BANNER(425, 7, 11417, "Light Gray Banner"), + LIGHT_GRAY_BED(355, 8, 5090, "Light Gray Bed"), + LIGHT_GRAY_CARPET(171, 8, 11317, "Light Gray Carpet"), + LIGHT_GRAY_CONCRETE(251, 8, 14453, "Light Gray Concrete"), + LIGHT_GRAY_CONCRETE_POWDER(252, 8, 21589, "Light Gray Concrete Powder"), + LIGHT_GRAY_DYE(351, 7, 27643, "Light Gray Dye"), + LIGHT_GRAY_GLAZED_TERRACOTTA(243, 0, 10707, "Light Gray Glazed Terracotta", "SILVER_GLAZED_TERRACOTTA"), + LIGHT_GRAY_SHULKER_BOX(227, 0, 21345, "Light Gray Shulker Box", "SILVER_SHULKER_BOX"), + LIGHT_GRAY_STAINED_GLASS(95, 8, 5843, "Light Gray Stained Glass"), + LIGHT_GRAY_STAINED_GLASS_PANE(160, 8, 19008, "Light Gray Stained Glass Pane"), + LIGHT_GRAY_TERRACOTTA(159, 8, 26388, "Light Gray Terracotta"), + LIGHT_GRAY_WALL_BANNER(117, 7, 31088, "Light Gray Banner"), + LIGHT_GRAY_WOOL(35, 8, 22936, "Light Gray Wool"), + LIGHT_WEIGHTED_PRESSURE_PLATE(147, 0, 14875, "Light Weighted Pressure Plate", "GOLD_PLATE"), + LILAC(175, 1, 22837, "Lilac"), + LILY_PAD(111, 0, 19271, "Lily Pad", "WATER_LILY"), + LIME_BANNER(425, 10, 18887, "Lime Banner"), + LIME_BED(355, 5, 27860, "Lime Bed"), + LIME_CARPET(171, 5, 15443, "Lime Carpet"), + LIME_CONCRETE(251, 5, 5863, "Lime Concrete"), + LIME_CONCRETE_POWDER(252, 5, 28859, "Lime Concrete Powder"), + LIME_DYE(351, 10, 6147, "Lime Dye"), + LIME_GLAZED_TERRACOTTA(240, 0, 13861, "Lime Glazed Terracotta"), + LIME_SHULKER_BOX(224, 0, 28360, "Lime Shulker Box"), + LIME_STAINED_GLASS(95, 5, 24266, "Lime Stained Glass"), + LIME_STAINED_GLASS_PANE(160, 5, 10610, "Lime Stained Glass Pane"), + LIME_TERRACOTTA(159, 5, 24013, "Lime Terracotta"), + LIME_WALL_BANNER(117, 10, 21422, "Lime Banner"), + LIME_WOOL(35, 5, 10443, "Lime Wool"), + LINGERING_POTION(441, 0, 25857, "Lingering Potion"), + LLAMA_SPAWN_EGG(383, 103, 23640, "Spawn Llama", "Llama Spawn Egg"), + MAGENTA_BANNER(425, 13, 15591, "Magenta Banner"), + MAGENTA_BED(355, 2, 20061, "Magenta Bed"), + MAGENTA_CARPET(171, 2, 6180, "Magenta Carpet"), + MAGENTA_CONCRETE(251, 2, 20591, "Magenta Concrete"), + MAGENTA_CONCRETE_POWDER(252, 2, 8272, "Magenta Concrete Powder"), + MAGENTA_DYE(351, 13, 11788, "Magenta Dye"), + MAGENTA_GLAZED_TERRACOTTA(237, 0, 8067, "Magenta Glazed Terracotta"), + MAGENTA_SHULKER_BOX(221, 0, 21566, "Magenta Shulker Box"), + MAGENTA_STAINED_GLASS(95, 2, 26814, "Magenta Stained Glass"), + MAGENTA_STAINED_GLASS_PANE(160, 2, 14082, "Magenta Stained Glass Pane"), + MAGENTA_TERRACOTTA(159, 2, 25900, "Magenta Terracotta"), + MAGENTA_WALL_BANNER(117, 13, 23291, "Magenta Banner"), + MAGENTA_WOOL(35, 2, 11853, "Magenta Wool"), + MAGMA_BLOCK(213, 0, 25927, "Magma Block", "MAGMA"), + MAGMA_CREAM(378, 0, 25097, "Magma Cream"), + MAGMA_CUBE_SPAWN_EGG(383, 62, 26638, "Spawn Magma Cube", "Magma Cube Spawn Egg"), + MAP(395, 0, 21655, "Empty Map"), + MELON(103, 0, 25172, "Melon", "Melon_Block"), + MELON_SEEDS(362, 0, 18340, "Melon Seeds"), + MELON_SLICE(360, 0, 5347, "Melon Slice"), + MELON_STEM(105, 0, 8247, "Melon Stem"), + MILK_BUCKET(335, 0, 9680, "Milk Bucket"), + MINECART(328, 0, 14352, "Minecart"), + MOOSHROOM_SPAWN_EGG(383, 96, 22125, "Spawn Mushroom Cow", "Mooshroom Spawn Egg"), + MOSSY_COBBLESTONE(48, 0, 21900, "Mossy Cobblestone", "MOSSY_COBBLESTONE"), + MOSSY_COBBLESTONE_WALL(139, 1, 11536, "Mossy Cobblestone Wall"), + MOSSY_STONE_BRICKS(98, 1, 16415, "Mossy Stone Bricks"), + MOVING_PISTON(36, 0, 13831, "Piston Moving Piece"), + MULE_SPAWN_EGG(383, 32, 11229, "Spawn Mule", "Mule Spawn Egg"), + MUSHROOM_STEM(null, null, 16543, "Mushroom Stem"), + MUSHROOM_STEW(282, 0, 16336, "Mushroom Stew", "MUSHROOM_SOUP"), + MUSIC_DISC_11(2266, 0, 27426, "11 Disc", "RECORD_11"), + MUSIC_DISC_13(2256, 0, 16359, "13 Disc", "GOLD_RECORD"), + MUSIC_DISC_BLOCKS(2258, 0, 26667, "Blocks Disc", "RECORD_3"), + MUSIC_DISC_CAT(2257, 0, 16246, "Cat Disc", "GREEN_RECORD"), + MUSIC_DISC_CHIRP(2259, 0, 19436, "Chirp Disc", "RECORD_4"), + MUSIC_DISC_FAR(2260, 0, 13823, "Far Disc", "RECORD_5"), + MUSIC_DISC_MALL(2261, 0, 11517, "Mall Disc", "RECORD_6"), + MUSIC_DISC_MELLOHI(2262, 0, 26117, "Mellohi Disc", "RECORD_7"), + MUSIC_DISC_STAL(2263, 0, 14989, "Stal Disc", "RECORD_8"), + MUSIC_DISC_STRAD(2264, 0, 16785, "Strad Disc", "RECORD_9"), + MUSIC_DISC_WAIT(2267, 0, 26499, "Wait Disc", "RECORD_12"), + MUSIC_DISC_WARD(2265, 0, 24026, "Ward Disc", "RECORD_10"), + MUTTON(423, 0, 4792, "Raw Mutton"), + MYCELIUM(110, 0, 9913, "Mycelium", "MYCEL"), + NAME_TAG(421, 0, 30731, "Name Tag"), + NAUTILUS_SHELL(null, null, 19989, "Nautilus Shell"), + NETHERRACK(87, 0, 23425, "Netherrack"), + NETHER_BRICK(405, 0, 19996, "Nether Brick", "Nether Brick Item"), + NETHER_BRICKS(112, 0, 27802, "Nether Bricks"), + NETHER_BRICK_FENCE(113, 0, 5286, "Nether Brick Fence", "NETHER_FENCE"), + NETHER_BRICK_SLAB(44, 6, 26586, "Nether Brick Slab"), + NETHER_BRICK_STAIRS(114, 0, 12085, "Nether Brick Stairs", "NETHER_BRICK_STAIRS"), + NETHER_PORTAL(90, 0, 19469, "Nether Portal", "PORTAL"), + NETHER_QUARTZ_ORE(153, 0, 4807, "Nether Quartz Ore", "QUARTZ_ORE"), + NETHER_STAR(399, 0, 12469, "Nether Star"), + NETHER_WART(372, 0, 29227, "Nether Wart", "NETHER_STALK"), + NETHER_WART_BLOCK(214, 0, 15486, "Nether Wart Block", "NETHER_WART_BLOCK"), + NOTE_BLOCK(25, 0, 20979, "Note Block", "NOTE_BLOCK"), + OAK_BOAT(333, 0, 17570, "Boat", "Oak Boat"), + OAK_BUTTON(143, 0, 13510, "Oak Button", "Wooden_button"), + OAK_DOOR(324, 0, 20341, "Wooden Door", "Wood Door", "Door"), + OAK_FENCE(85, 0, 6442, "Oak Fence", "FENCE"), + OAK_FENCE_GATE(107, 0, 16689, "Oak Fence Gate", "FENCE_GATE"), + OAK_LEAVES(18, 0, 4385, "Oak Leaves"), + OAK_LOG(17, 0, 26723, "Oak Log"), + OAK_PLANKS(5, 0, 14905, "Oak Wood Plank", "Oak Planks"), + OAK_PRESSURE_PLATE(72, 0, 20108, "Oak Pressure Plate", "Wooden_Presure_Plate"), + OAK_SAPLING(6, 0, 9636, "Oak Sapling"), + OAK_SLAB(126, 0, 12002, "Oak Slab", "Wood step"), + OAK_STAIRS(53, 0, 5449, "Oak Stairs", "WOOD_STAIRS"), + OAK_TRAPDOOR(96, 0, 16927, "Oak Trapdoor", "Trapdoor"), + OAK_WOOD(null, null, 7378, "Oak Wood"), + OBSERVER(218, 0, 10726, "Observer"), + OBSIDIAN(49, 0, 32723, "Obsidian"), + OCELOT_SPAWN_EGG(383, 98, 30080, "Spawn Ocelot", "Ocelot Spawn Egg"), + ORANGE_BANNER(425, 14, 4839, "Orange Banner"), + ORANGE_BED(355, 1, 11194, "Orange Bed"), + ORANGE_CARPET(171, 1, 24752, "Orange Carpet"), + ORANGE_CONCRETE(251, 1, 19914, "Orange Concrete"), + ORANGE_CONCRETE_POWDER(252, 1, 30159, "Orange Concrete Powder"), + ORANGE_DYE(351, 14, 13866, "Orange Dye"), + ORANGE_GLAZED_TERRACOTTA(236, 0, 27451, "Orange Glazed Terracotta"), + ORANGE_SHULKER_BOX(220, 0, 21673, "Orange Shulker Box"), + ORANGE_STAINED_GLASS(95, 1, 25142, "Orange Stained Glass"), + ORANGE_STAINED_GLASS_PANE(160, 1, 21089, "Orange Stained Glass Pane"), + ORANGE_TERRACOTTA(159, 1, 18684, "Orange Terracotta"), + ORANGE_TULIP(38, 5, 26038, "Orange Tulip"), + ORANGE_WALL_BANNER(117, 114, 9936, "Orange Banner"), + ORANGE_WOOL(35, 1, 23957, "Orange Wool"), + OXEYE_DAISY(38, 8, 11709, "Oxeye Daisy"), + PACKED_ICE(174, 0, 28993, "Packed Ice"), + PAINTING(321, 0, 23945, "Painting"), + PAPER(339, 0, 9923, "Paper"), + PARROT_SPAWN_EGG(383, 105, 23614, "Spawn Parrot", "Parrot Spawn Egg"), + PEONY(175, 5, 21155, "Peony"), + PETRIFIED_OAK_SLAB(null, null, 18658, "Petrified Oak Slab"), + PHANTOM_MEMBRANE(null, null, 18398, "Phantom Membrane"), + PHANTOM_SPAWN_EGG(null, null, 24648, "Phantom Spawn Egg"), + PIG_SPAWN_EGG(383, 90, 22584, "Spawn Pig", "Pig Spawn Egg"), + PINK_BANNER(425, 9, 19439, "Pink Banner"), + PINK_BED(355, 6, 13795, "Pink Bed"), + PINK_CARPET(171, 6, 30186, "Pink Carpet"), + PINK_CONCRETE(251, 6, 5227, "Pink Concrete"), + PINK_CONCRETE_POWDER(252, 6, 6421, "Pink Concrete Powder"), + PINK_DYE(351, 9, 31151, "Pink Dye"), + PINK_GLAZED_TERRACOTTA(241, 0, 10260, "Pink Glazed Terracotta"), + PINK_SHULKER_BOX(225, 0, 24968, "Pink Shulker Box"), + PINK_STAINED_GLASS(95, 6, 16164, "Pink Stained Glass"), + PINK_STAINED_GLASS_PANE(160, 6, 24637, "Pink Stained Glass Pane"), + PINK_TERRACOTTA(159, 6, 23727, "Pink Terracotta"), + PINK_TULIP(38, 7, 27319, "Pink Tulip"), + PINK_WALL_BANNER(117, 9, 9421, "Pink Banner"), + PINK_WOOL(35, 6, 7611, "Pink Wool"), + PISTON(33, 0, 21130, "Piston", "PISTON_BASE"), + PISTON_HEAD(34, 0, 30226, "Piston Head", "PISTON_EXTENSION"), + PLAYER_HEAD(397, 3, 21174, "Mob Head (Human)", "Player Head"), + PLAYER_WALL_HEAD(144, 3, 13164, "Player Wall Head"), + PODZOL(3, 2, 24068, "Podzol"), + POISONOUS_POTATO(394, 0, 32640, "Poisonous Potato"), + POLAR_BEAR_SPAWN_EGG(383, 102, 17015, "Spawn Polar Bear", "Polar Bear Spawn Egg"), + POLISHED_ANDESITE(1, 6, 8335, "Polished Andesite"), + POLISHED_DIORITE(1, 4, 31615, "Polished Diorite"), + POLISHED_GRANITE(1, 2, 5477, "Polished Granite"), + POPPED_CHORUS_FRUIT(433, 0, 27844, "Popped Chorus Fruit"), + POPPY(38, 0, 12851, "Poppy"), + PORKCHOP(319, 0, 30896, "Raw Porkchop"), + POTATO(392, 0, 21088, "Potato", "Potatoitem"), + POTATOES(142, 0, 10879, "Potatoes"), + + // Potions + POTION(373, 0, 24020, "Potion"), + AWKWARD_POTION(373, 16, 24020, "Awkard Potion"), + THICK_POTION(373, 32, 24020, "Thick Potion"), + MUNDANE_POTION(373, 64, 24020, "Mundane Potion"), + REGENERATION_POTION(373, 8193, 24020, "Regeneration Potion"), + SWIFTNESS_POTION(373, 8194, 24020, "Swiftness Potion"), + FIRE_RESISTANCE_POTION(373, 8195, 24020, "Fire Resistance Potion"), + POISON_POTION(373, 8196, 24020, "Poison Potion"), + HEALING_POTION(373, 8197, 24020, "Healing Potion"), + NIGHT_VISION_POTION(373, 8198, 24020, "Night Vision Potion"), + WEAKNESS_POTION(373, 8200, 24020, "Weakness Potion"), + STRENGTH_POTION(373, 8201, 24020, "Strenght Potion"), + SLOWNESS_POTION(373, 8202, 24020, "Slowness Potion"), + HARMING_POTION(373, 8204, 24020, "Harming Potion"), + WATER_BREATHING_POTION(373, 8205, 24020, "Water Breathing Potion"), + INVISIBILITY_POTION(373, 8206, 24020, "Invisibility Potion"), + REGENERATION_POTION2(373, 8225, 24020, "Regeneration Potion"), + SWIFTNESS_POTION2(373, 8226, 24020, "Swiftness Potion2"), + POISON_POTION2(373, 8228, 24020, "Poison Potion2"), + HEALING_POTION2(373, 8229, 24020, "Healing Potion2"), + STRENGTH_POTION2(373, 8233, 24020, "Strength Potion2"), + LEAPING_POTION2(373, 8235, 24020, "Leaping Potion2"), + HARMING_POTION2(373, 8236, 24020, "Harming Potion2"), + REGENERATION_POTION3(373, 8257, 24020, "Regeneration Potion3"), + SWIFTNESS_POTION3(373, 8258, 24020, "Swiftness Potion3"), + FIRE_RESISTANCE_POTION3(373, 8259, 24020, "Fire Resistance potion3"), + POISON_POTION3(373, 8260, 24020, "Poison Potion3"), + NIGHT_VISION_POTION2(373, 8262, 24020, "Night Vision Potion2"), + WEAKNESS_POTION2(373, 8264, 24020, "Weakness Potion2"), + STRENGTH_POTION3(373, 8265, 24020, "Strength Potion3"), + SLOWNESS_POTION2(373, 8266, 24020, "Slowness Potion2"), + LEAPING_POTION3(373, 8267, 24020, "Leaping Potion3"), + WATER_BREATHING_POTION2(373, 8269, 24020, "Water Breathing Potion2"), + INVISIBILITY_POTION2(373, 8270, 24020, "Invisibility Potion2"), + REGENERATION_POTION4(373, 8289, 24020, "Regeneration Potion4"), + SWIFTNESS_POTION4(373, 8290, 24020, "Swiftness Potion4"), + POISON_POTION4(373, 8292, 24020, "Poison Potion4"), + STRENGTH_POTION4(373, 8297, 24020, "Strength Potion4"), + + POTTED_ACACIA_SAPLING(null, null, 14096, " Acacia Sapling"), + POTTED_ALLIUM(null, null, 13184, "Potted Allium"), + POTTED_AZURE_BLUET(null, null, 8754, "Potted Azure Bluet"), + POTTED_BIRCH_SAPLING(null, null, 32484, "Potted Birch Sapling"), + POTTED_BLUE_ORCHID(null, null, 6599, "Potted Blue Orchid"), + POTTED_BROWN_MUSHROOM(null, null, 14481, "Potted Brown Mushroom"), + POTTED_CACTUS(null, null, 8777, "Potted Cactus"), + POTTED_DANDELION(null, null, 9727, "Potted Dandelion"), + POTTED_DARK_OAK_SAPLING(null, null, 6486, "Potted Dark Oak Sapling"), + POTTED_DEAD_BUSH(null, null, 13020, "Potted Dead Bush"), + POTTED_FERN(null, null, 23315, "Potted Fern"), + POTTED_JUNGLE_SAPLING(null, null, 7525, "Potted Jungle Sapling"), + POTTED_OAK_SAPLING(null, null, 11905, "Potted Oak Sapling"), + POTTED_ORANGE_TULIP(null, null, 28807, "Potted Orange Tulip"), + POTTED_OXEYE_DAISY(null, null, 19707, "Potted Oxeye Daisy"), + POTTED_PINK_TULIP(null, null, 10089, "Potted Pink Tulip"), + POTTED_POPPY(null, null, 7457, "Potted Poppy"), + POTTED_RED_MUSHROOM(null, null, 22881, "Potted Red Mushroom"), + POTTED_RED_TULIP(null, null, 28594, "Potted Red Tulip"), + POTTED_SPRUCE_SAPLING(null, null, 29498, "Potted Spruce Sapling"), + POTTED_WHITE_TULIP(null, null, 24330, "Potted White Tulip"), + POWERED_RAIL(27, 0, 11064, "Powered Rail"), + PRISMARINE(168, 0, 7539, "Prismarine"), + PRISMARINE_BRICKS(168, 1, 29118, "Prismarine Bricks"), + PRISMARINE_BRICK_SLAB(null, null, 26672, "Prismarine Brick Slab"), + PRISMARINE_BRICK_STAIRS(null, null, 15445, "Prismarine Brick Stairs"), + PRISMARINE_CRYSTALS(410, 0, 31546, "Prismarine Crystals"), + PRISMARINE_SHARD(409, 0, 10993, "Prismarine Shard"), + PRISMARINE_SLAB(null, null, 31323, "Prismarine Slab"), + PRISMARINE_STAIRS(null, null, 19217, "Prismarine Stairs"), + PUFFERFISH(349, 3, 8115, "Pufferfish"), + PUFFERFISH_BUCKET(null, null, 8861, "Bucket of Pufferfish"), + PUFFERFISH_SPAWN_EGG(null, null, 24573, "Pufferfish Spawn Egg"), + PUMPKIN(86, 0, 19170, "Pumpkin"), + PUMPKIN_PIE(400, 0, 28725, "Pumpkin Pie"), + PUMPKIN_SEEDS(361, 0, 28985, "Pumpkin Seeds"), + PUMPKIN_STEM(104, 0, 19021, "Pumpkin Stem"), + PURPLE_BANNER(425, 5, 29027, "Purple Banner"), + PURPLE_BED(355, 10, 29755, "Purple Bed", "Purple Bed"), + PURPLE_CARPET(171, 10, 5574, "Purple Carpet"), + PURPLE_CONCRETE(251, 10, 20623, "Purple Concrete"), + PURPLE_CONCRETE_POWDER(252, 10, 26808, "Purple Concrete Powder"), + PURPLE_DYE(351, 5, 6347, "Purple Dye"), + PURPLE_GLAZED_TERRACOTTA(245, 0, 4818, "Purple Glazed Terracotta"), + PURPLE_SHULKER_BOX(229, 0, 10373, "Purple Shulker Box"), + PURPLE_STAINED_GLASS(95, 10, 21845, "Purple Stained Glass"), + PURPLE_STAINED_GLASS_PANE(160, 10, 10948, "Purple Stained Glass Pane"), + PURPLE_TERRACOTTA(159, 10, 10387, "Purple Terracotta"), + PURPLE_WALL_BANNER(117, 5, 14298, "Purple Banner"), + PURPLE_WOOL(35, 10, 11922, "Purple Wool"), + PURPUR_BLOCK(201, 0, 7538, "Purpur Block"), + PURPUR_PILLAR(202, 0, 26718, "Purpur Pillar"), + PURPUR_SLAB(205, 0, 11487, "Purpur Slab"), + PURPUR_STAIRS(203, 0, 8921, "Purpur Stairs"), + QUARTZ(406, 0, 23608, "Nether Quartz"), + QUARTZ_BLOCK(155, 0, 11987, "Block of Quartz"), + QUARTZ_PILLAR(155, 2, 16452, "Quartz Pillar"), + QUARTZ_SLAB(44, 7, 4423, "Quartz Slab"), + QUARTZ_STAIRS(156, 0, 24079, "Quartz Stairs"), + RABBIT(411, 0, 23068, "Raw Rabbit"), + RABBIT_FOOT(414, 0, 13864, "Rabbit's Foot"), + RABBIT_HIDE(415, 0, 12467, "Rabbit Hide"), + RABBIT_SPAWN_EGG(383, 101, 26496, "Spawn Rabbit", "Rabbit Spawn Egg"), + RABBIT_STEW(413, 0, 10611, "Rabbit Stew"), + RAIL(66, 0, 13285, "Rail", "RAILS"), + REDSTONE(331, 0, 11233, "Redstone", "Redstone Dust"), + REDSTONE_BLOCK(152, 0, 19496, "Block of Redstone", "REDSTONE_BLOCK"), + REDSTONE_LAMP(123, 0, 8217, "Redstone Lamp", "REDSTONE_LAMP_OFF"), + REDSTONE_ORE(73, 0, 10887, "Redstone Ore"), + REDSTONE_TORCH(76, 0, 22547, "Redstone Torch(on)", "REDSTONE_TORCH_ON"), + REDSTONE_WALL_TORCH(76, 0, 7595, "Redstone Wall Torch"), + REDSTONE_WIRE(55, 0, 25984, "Redstone Dust", "REDSTONE_WIRE"), + RED_BANNER(425, 1, 26961, "Red Banner"), + RED_BED(355, 14, 30910, "Red Bed", "Red Bed"), + RED_CARPET(171, 14, 5424, "Red Carpet"), + RED_CONCRETE(251, 14, 8032, "Red Concrete"), + RED_CONCRETE_POWDER(252, 14, 13286, "Red Concrete Powder"), + RED_GLAZED_TERRACOTTA(249, 0, 24989, "Red Glazed Terracotta"), + RED_MUSHROOM(40, 0, 19728, "Red Mushroom", "RED_MUSHROOM"), + RED_MUSHROOM_BLOCK(100, 0, 20766, "Red Mushroom Block", "HUGE_MUSHROOM_2"), + RED_NETHER_BRICKS(215, 0, 18056, "Red Nether Bricks", "RED_NETHER_BRICK"), + RED_SAND(12, 1, 16279, "Red Sand"), + RED_SANDSTONE(179, 0, 9092, "Red Sandstone"), + RED_SANDSTONE_SLAB(182, 0, 17550, "Red Sandstone Slab", "STONE_SLAB2"), + RED_SANDSTONE_STAIRS(180, 0, 25466, "Red Sandstone Stairs"), + RED_SHULKER_BOX(233, 0, 32448, "Red Shulker Box"), + RED_STAINED_GLASS(95, 14, 9717, "Red Stained Glass"), + RED_STAINED_GLASS_PANE(160, 14, 8630, "Red Stained Glass Pane"), + RED_TERRACOTTA(159, 14, 5086, "Red Terracotta"), + RED_TULIP(38, 4, 16781, "Red Tulip"), + RED_WALL_BANNER(117, 1, 4378, "Red Banner"), + RED_WOOL(35, 14, 11621, "Red Wool"), + REPEATER(356, 0, 28823, "Redstone Repeater", "Diode"), + REPEATING_COMMAND_BLOCK(null, null, 12405, "Repeating Command Block"), + ROSE_BUSH(175, 4, 6080, "Rose Bush"), + ROSE_RED(351, 1, 15694, "Rose Red"), + ROTTEN_FLESH(367, 0, 21591, "Rotten Flesh"), + SADDLE(329, 0, 30206, "Saddle"), + SALMON(349, 1, 18516, "Raw Salmon"), + SALMON_BUCKET(null, null, 31427, "Bucket of Salmon"), + SALMON_SPAWN_EGG(null, null, 18739, "Salmon Spawn Egg"), + SAND(12, 0, 11542, "Sand"), + SANDSTONE(24, 0, 13141, "Sandstone"), + SANDSTONE_SLAB(44, 1, 29830, "Sandstone Slab"), + SANDSTONE_STAIRS(128, 0, 18474, "Sandstone Stairs"), + SCUTE(null, null, 11914, "Scute"), + SEAGRASS(null, null, 23942, "Seagrass"), + SEA_LANTERN(169, 0, 16984, "Sea Lantern"), + SEA_PICKLE(null, null, 19562, "Sea Pickle"), + SHEARS(359, 0, 27971, "Shears"), + SHEEP_SPAWN_EGG(383, 91, 24488, "Spawn Sheep", "Sheep Spawn Egg"), + SHIELD(442, 0, 29943, "Shield"), + SHULKER_BOX(229, 0, 7776, "Shulker Box"), + SHULKER_SHELL(450, 0, 27848, "Shulker Shell"), + SHULKER_SPAWN_EGG(383, 69, 31848, "Spawn Shulker", "Shulker Spawn Egg"), + SIGN(323, 0, 16918, "Sign"), + SILVERFISH_SPAWN_EGG(383, 60, 14537, "Spawn Silverfish", "Silverfish Spawn Egg"), + SKELETON_HORSE_SPAWN_EGG(383, 28, 21356, "Spawn Skeleton Horse", "Skeleton Horse Spawn Egg"), + SKELETON_SKULL(397, 0, 13270, "Mob Head (Skeleton)", "Skeleton Skull"), + SKELETON_SPAWN_EGG(383, 51, 15261, "Spawn Skeleton", "Skeleton Spawn Egg"), + SKELETON_WALL_SKULL(144, 0, 31650, "Skeleton Wall Skull"), + SLIME_BALL(341, 0, 5242, "Slimeball"), + SLIME_BLOCK(165, 0, 31892, "Slime Block"), + SLIME_SPAWN_EGG(383, 55, 6550, "Spawn Slime", "Slime Spawn Egg"), + SMOOTH_QUARTZ(null, null, 14415, "Smooth Quartz"), + SMOOTH_RED_SANDSTONE(179, 2, 25180, "Smooth Red Sandstone"), + SMOOTH_SANDSTONE(24, 2, 30039, "Smooth Sandstone"), + SMOOTH_STONE(null, null, 21910, "Smooth Stone"), + SNOW(78, 0, 14146, "Snow"), + SNOWBALL(332, 0, 19487, "Snowball"), + SNOW_BLOCK(80, 0, 19913, "Snow Block"), + SOUL_SAND(88, 0, 16841, "Soul Sand"), + SPAWNER(52, 90, 7018, "Spawner", "MOB_SPAWNER"), + SPECTRAL_ARROW(439, 0, 4568, "Spectral Arrow"), + SPIDER_EYE(375, 0, 9318, "Spider Eye"), + SPIDER_SPAWN_EGG(383, 52, 14984, "Spawn Spider", "Spider Spawn Egg"), + SPLASH_POTION(438, 0, 30248, "Splash Potion", "SPLASH_POTION"), + SPONGE(19, 0, 15860, "Sponge", "SPONGE"), + SPRUCE_BOAT(444, 0, 9606, "Spruce Boat", "BOAT_SPRUCE"), + SPRUCE_BUTTON(null, null, 23281, "Spruce Button"), + SPRUCE_DOOR(427, 0, 10642, "Spruce Door", "SPRUCE_DOOR_ITEM"), + SPRUCE_FENCE(188, 0, 25416, "Spruce Fence"), + SPRUCE_FENCE_GATE(183, 0, 26423, "Spruce Fence Gate"), + SPRUCE_LEAVES(18, 1, 20039, "Spruce Leaves"), + SPRUCE_LOG(17, 1, 9726, "Spruce Log"), + SPRUCE_PLANKS(5, 1, 14593, "Spruce Wood Plank", "Spruce Planks"), + SPRUCE_PRESSURE_PLATE(null, null, 15932, "Spruce Pressure Plate"), + SPRUCE_SAPLING(6, 1, 19874, "Spruce Sapling"), + SPRUCE_SLAB(126, 1, 4348, "Spruce Slab"), + SPRUCE_STAIRS(134, 0, 11192, "Spruce Wood Stairs", "Spruce Stairs"), + SPRUCE_TRAPDOOR(null, null, 10289, "Spruce Trapdoor"), + SPRUCE_WOOD(null, null, 32328, "Spruce Wood"), + SQUID_SPAWN_EGG(383, 94, 10682, "Spawn Squid", "Squid Spawn Egg"), + STICK(280, 0, 9773, "Stick"), + STICKY_PISTON(29, 0, 18127, "Sticky Piston", "PISTON_STICKY_BASE"), + STONE(1, 0, 22948, "Stone"), + STONE_AXE(275, 0, 6338, "Stone Axe"), + STONE_BRICKS(98, 0, 6962, "Stone Bricks"), + STONE_BRICK_SLAB(44, 5, 19676, "Stone Brick Slab"), + STONE_BRICK_STAIRS(109, 0, 27032, "Stone Brick Stairs", "SMOOTH_STAIRS"), + STONE_BUTTON(77, 0, 12279, "Stone Button"), + STONE_HOE(291, 0, 22855, "Stone Hoe"), + STONE_PICKAXE(274, 0, 14611, "Stone Pickaxe"), + STONE_PRESSURE_PLATE(70, 0, 22591, "Stone Pressure Plate", "STONE_PLATE"), + STONE_SHOVEL(273, 0, 9520, "Stone Shovel", "STONE_SPADE"), + STONE_SLAB(44, 0, 19838, "Stone Slab"), + STONE_SWORD(272, 0, 25084, "Stone Sword"), + STRAY_SPAWN_EGG(383, 6, 30153, "Spawn Stray", "Stray Spawn Egg"), + STRING(287, 0, 12806, "String"), + STRIPPED_ACACIA_LOG(null, null, 18167, "Stripped Acacia Log"), + STRIPPED_ACACIA_WOOD(null, null, 27193, "Stripped Acacia Wood"), + STRIPPED_BIRCH_LOG(null, null, 8838, "Stripped Birch Log"), + STRIPPED_BIRCH_WOOD(null, null, 22350, "Stripped Birch Wood"), + STRIPPED_DARK_OAK_LOG(null, null, 6492, "Stripped Dark Oak Log"), + STRIPPED_DARK_OAK_WOOD(null, null, 16000, "Stripped Dark Oak Wood"), + STRIPPED_JUNGLE_LOG(null, null, 15476, "Stripped Jungle Log"), + STRIPPED_JUNGLE_WOOD(null, null, 30315, "Stripped Jungle Wood"), + STRIPPED_OAK_LOG(null, null, 20523, "Stripped Oak Log"), + STRIPPED_OAK_WOOD(null, null, 31455, "Stripped Oak Wood"), + STRIPPED_SPRUCE_LOG(null, null, 6140, "Stripped Spruce Log"), + STRIPPED_SPRUCE_WOOD(null, null, 6467, "Stripped Spruce Wood"), + STRUCTURE_BLOCK(255, 0, 26831, "Structure Block"), + STRUCTURE_VOID(217, 0, 30806, "Structure Void"), + SUGAR(353, 0, 30638, "Sugar"), + SUGAR_CANE(338, 0, 7726, "Sugar Canes", "Sugar Cane"), + SUNFLOWER(175, 0, 7408, "Sunflower"), + TALL_GRASS(31, 0, 21559, "Tall Grass"), + TALL_SEAGRASS(null, null, 27189, "Tall Seagrass"), + TERRACOTTA(172, 0, 16544, "Terracotta", "HARD_CLAY"), + TIPPED_ARROW(440, 0, 25164, "Tipped Arrow"), + TNT(46, 0, 7896, "TNT", "TNT"), + TNT_MINECART(407, 0, 4277, "Minecart with TNT", "explosiveminecart"), + TORCH(50, 0, 6063, "Torch"), + TOTEM_OF_UNDYING(449, 0, 10139, "Totem Of Undying"), + TRAPPED_CHEST(146, 0, 18970, "Trapped Chest"), + TRIDENT(null, null, 7534, "Trident"), + TRIPWIRE(132, 0, 8810, "Tripwire"), + TRIPWIRE_HOOK(131, 0, 8130, "Tripwire Hook"), + TROPICAL_FISH(349, 2, 24879, "Tropical Fish"), + TROPICAL_FISH_BUCKET(null, null, 29995, "Bucket of Tropical Fish"), + TROPICAL_FISH_SPAWN_EGG(null, null, 19713, "Tropical Fish Spawn Egg"), + TUBE_CORAL(null, null, 23048, "Tube Coral"), + TUBE_CORAL_BLOCK(null, null, 23723, "Tube Coral Block"), + TUBE_CORAL_FAN(null, null, 19929, "Tube Coral Fan"), + TUBE_CORAL_WALL_FAN(null, null, 25282, "Tube Coral Wall Fan"), + TURTLE_EGG(null, null, 32101, "Turtle Egg"), + TURTLE_HELMET(null, null, 30120, "Turtle Shell"), + TURTLE_SPAWN_EGG(null, null, 17324, "Turtle Spawn Egg"), + VEX_SPAWN_EGG(383, 35, 27751, "Spawn Vex", "Vex Spawn Egg"), + VILLAGER_SPAWN_EGG(383, 120, 30348, "Spawn Villager", "Villager Spawn Egg"), + VINDICATOR_SPAWN_EGG(383, 36, 25324, "Spawn Vindicator", "Vindicator Spawn Egg"), + VINE(106, 0, 14564, "Vines", "VINE"), + VOID_AIR(null, null, 13668, "Void Air"), + WALL_SIGN(68, 0, 10644, "Wall Sign"), + WALL_TORCH(50, 0, 25890, "Wall Torch"), + WATER(8, 0, 24998, "Flowing Water"), + WATER_BUCKET(326, 0, 8802, "Water Bucket"), + WET_SPONGE(19, 1, 9043, "Wet Sponge"), + WHEAT(296, 0, 27709, "Wheat"), + WHEAT_SEEDS(295, 0, 28742, "Wheat Seeds", "SEEDS"), + WHITE_BANNER(425, 15, 17562, "White Banner"), + WHITE_BED(355, 0, 8185, "White Bed", "Bed"), + WHITE_CARPET(171, 0, 15117, "White Carpet"), + WHITE_CONCRETE(251, 0, 6281, "White Concrete"), + WHITE_CONCRETE_POWDER(252, 0, 10363, "White Concrete Powder"), + WHITE_GLAZED_TERRACOTTA(235, 0, 11326, "White Glazed Terracotta"), + WHITE_SHULKER_BOX(219, 0, 31750, "White Shulker Box"), + WHITE_STAINED_GLASS(95, 0, 31190, "White Stained Glass"), + WHITE_STAINED_GLASS_PANE(160, 0, 10557, "White Stained Glass Pane"), + WHITE_TERRACOTTA(159, 0, 20975, "White Terracotta"), + WHITE_TULIP(38, 6, 9742, "White Tulip"), + WHITE_WALL_BANNER(425, 15, 15967, "White Banner"), + WHITE_WOOL(35, 0, 8624, "White Wool", "Wool"), + WITCH_SPAWN_EGG(383, 66, 11837, "Spawn Witch", "Witch Spawn Egg"), + WITHER_SKELETON_SKULL(397, 1, 31487, "Mob Head (Wither Skeleton)", "Wither Skeleton Skull"), + WITHER_SKELETON_SPAWN_EGG(383, 5, 10073, "Spawn Wither Skeleton", "Wither Skeleton Spawn Egg"), + WITHER_SKELETON_WALL_SKULL(144, 1, 9326, "Wither Skeleton Wall Skull"), + WOLF_SPAWN_EGG(383, 95, 21692, "Spawn Wolf", "Wolf Spawn Egg"), + WOODEN_AXE(271, 0, 6292, "Wooden Axe", "Wood Axe"), + WOODEN_HOE(290, 0, 16043, "Wooden Hoe", "Wood Hoe"), + WOODEN_PICKAXE(270, 0, 12792, "Wooden Pickaxe", "WOOD_PICKAXE"), + WOODEN_SHOVEL(269, 0, 28432, "Wooden Shovel", "WOOD_SPADE"), + WOODEN_SWORD(268, 0, 7175, "Wooden Sword", "WOOD_SWORD"), + WRITABLE_BOOK(386, 0, 13393, "Book and Quill"), + WRITTEN_BOOK(387, 0, 24164, "Written Book"), + YELLOW_BANNER(425, 11, 30382, "Yellow Banner"), + YELLOW_BED(355, 4, 30410, "Yellow Bed"), + YELLOW_CARPET(171, 4, 18149, "Yellow Carpet"), + YELLOW_CONCRETE(251, 4, 15722, "Yellow Concrete"), + YELLOW_CONCRETE_POWDER(252, 4, 10655, "Yellow Concrete Powder"), + YELLOW_GLAZED_TERRACOTTA(239, 0, 10914, "Yellow Glazed Terracotta"), + YELLOW_SHULKER_BOX(223, 0, 28700, "Yellow Shulker Box"), + YELLOW_STAINED_GLASS(95, 4, 12182, "Yellow Stained Glass"), + YELLOW_STAINED_GLASS_PANE(160, 4, 20298, "Yellow Stained Glass Pane"), + YELLOW_TERRACOTTA(159, 4, 32129, "Yellow Terracotta"), + YELLOW_WALL_BANNER(425, 11, 32004, "Yellow Banner"), + YELLOW_WOOL(35, 4, 29507, "Yellow Wool"), + ZOMBIE_HEAD(397, 2, 9304, "Mob Head (Zombie)", "Zombie Head"), + ZOMBIE_HORSE_SPAWN_EGG(383, 29, 4275, "Spawn Zombie Horse", "Zombie Horse Spawn Egg"), + ZOMBIE_PIGMAN_SPAWN_EGG(383, 57, 11531, "Spawn Zombie Pigman", "Zombie Pigman Spawn Egg"), + ZOMBIE_SPAWN_EGG(383, 54, 5814, "Spawn Zombie", "Zombie Spawn Egg"), + ZOMBIE_VILLAGER_SPAWN_EGG(383, 27, 10311, "Spawn Zombie Villager", "Zombie Villager Spawn Egg"), + ZOMBIE_WALL_HEAD(144, 2, 16296, "Zombie Wall Head"), + + //1.14 + ACACIA_SIGN(null, null, 29808, "Acacia Sign"), + ACACIA_WALL_SIGN(null, null, 20316, "Acacia Wall Sign"), + ANDESITE_SLAB(null, null, 32124, "Andesite Slab"), + ANDESITE_STAIRS(null, null, 17747, "Andesite Stairs"), + ANDESITE_WALL(null, null, 14938, "Andesite Wall"), + BAMBOO(null, null, 18728, "Bamboo"), + BAMBOO_SAPLING(null, null, 8478, "Bamboo Sapling"), + BARREL(null, null, 22396, "Barrel"), + BELL(null, null, 20000, "Bell"), + BIRCH_SIGN(null, null, 11351, "Birch Sign"), + BIRCH_WALL_SIGN(null, null, 9887, "Birch Wall Sign"), + BLACK_DYE(null, null, 6202, "Black Dye"), + BLAST_FURNACE(null, null, 31157, "Blast Furnace"), + BLUE_DYE(null, null, 11588, "Blue Dye"), + BRICK_WALL(null, null, 18995, "Brick Wall"), + BROWN_DYE(null, null, 7648, "Brown Dye"), + CAMPFIRE(null, null, 8488, "Campfire"), + CARTOGRAPHY_TABLE(null, null, 28529, "Cartography Table"), + CAT_SPAWN_EGG(null, null, 29583, "Cat Spawn Egg"), + CORNFLOWER(null, null, 15405, "Cornflower"), + CREEPER_BANNER_PATTERN(null, null, 15774, "Banner Pattern"), + CROSSBOW(null, null, 4340, "Crossbow"), + CUT_RED_SANDSTONE_SLAB(null, null, -11, "Cut Red Sandstone Slab"), + CUT_SANDSTONE_SLAB(null, null, -10, "Cut Sandstone Slab"), + DARK_OAK_SIGN(null, null, 15127, "Dark Oak Sign"), + DARK_OAK_WALL_SIGN(null, null, 9508, "Dark Oak Wall Sign"), + DIORITE_SLAB(null, null, 10715, "Diorite Slab"), + DIORITE_STAIRS(null, null, 13134, "Diorite Stairs"), + DIORITE_WALL(null, null, 17412, "Diorite Wall"), + END_STONE_BRICK_SLAB(null, null, 23239, "End Stone Brick Slab"), + END_STONE_BRICK_STAIRS(null, null, 28831, "End Stone Brick Stairs"), + END_STONE_BRICK_WALL(null, null, 27225, "End Stone Brick Wall"), + FLETCHING_TABLE(null, null, 30838, "Fletching Table"), + FLOWER_BANNER_PATTERN(null, null, 5762, "Banner Pattern"), + FOX_SPAWN_EGG(null, null, -1, "Fox Spawn Egg"), + GLOBE_BANNER_PATTERN(null, null, -99, "Banner Pattern"), + GRANITE_SLAB(null, null, 25898, "Granite Slab"), + GRANITE_STAIRS(null, null, 21840, "Granite Stairs"), + GRANITE_WALL(null, null, 23279, "Granite Wall"), + GREEN_DYE(null, null, 23215, "Green Dye"), + GRINDSTONE(null, null, 26260, "Grindstone"), + JIGSAW(null, null, 17398, "Jigsaw Block"), + JUNGLE_SIGN(null, null, 24717, "Jungle Sign"), + JUNGLE_WALL_SIGN(null, null, 29629, "Jungle Wall Sign"), + LANTERN(null, null, 5992, "Lantern"), + LEATHER_HORSE_ARMOR(null, null, -2, "Leather Horse Armor"), + LECTERN(null, null, 23490, "Lectern"), + LILY_OF_THE_VALLEY(null, null, 7185, "Lily of the Valley"), + LOOM(null, null, 14276, "Loom"), + MOJANG_BANNER_PATTERN(null, null, 11903, "Banner Pattern"), + MOSSY_COBBLESTONE_SLAB(null, null, 12139, "Mossy Cobblestone Slab"), + MOSSY_COBBLESTONE_STAIRS(null, null, 29210, "Mossy Cobblestone Stairs"), + MOSSY_STONE_BRICK_SLAB(null, null, 14002, "Mossy Stone Brick Slab"), + MOSSY_STONE_BRICK_STAIRS(null, null, 27578, "Mossy Stone Brick Stairs"), + MOSSY_STONE_BRICK_WALL(null, null, 18259, "Mossy Stone Brick Wall"), + NETHER_BRICK_WALL(null, null, 10398, "Nether Brick Wall"), + OAK_SIGN(null, null, 8192, "Oak Sign"), + OAK_WALL_SIGN(null, null, 12984, "Oak Wall Sign"), + PANDA_SPAWN_EGG(null, null, 23759, "Panda Spawn Egg"), + PILLAGER_SPAWN_EGG(null, null, 28659, "Pillager Spawn Egg"), + POLISHED_ANDESITE_STAIRS(null, null, 7573, "Polished Andesite Stairs"), + POLISHED_ANDESITE_SLAB(null, null, 0, "Polished Andesite Slab"), + POLISHED_DIORITE_SLAB(null, null, 18303, "Polished Diorite Slab"), + POLISHED_DIORITE_STAIRS(null, null, 4625, "Polished Diorite Stairs"), + POLISHED_GRANITE_SLAB(null, null, 4521, "Polished Granite Slab"), + POLISHED_GRANITE_STAIRS(null, null, 29588, "Polished Granite Stairs"), + POTTED_BAMBOO(null, null, 22542, "Potted Bamboo"), + POTTED_CORNFLOWER(null, null, 28917, "Potted CornFlower"), + POTTED_LILY_OF_THE_VALLEY(null, null, 9364, "Potted Lily Of The Valley"), + POTTED_WITHER_ROSE(null, null, 26876, "Potted Wither Rose"), + PRISMARINE_WALL(null, null, 18184, "Prismarine Wall"), + RAVAGER_SPAWN_EGG(null, null, 31284, "Ravager Spawn Egg"), + RED_DYE(null, null, 5728, "Red Dye"), + RED_NETHER_BRICK_SLAB(null, null, 12462, "Red Nether Brick Slab"), + RED_NETHER_BRICK_STAIRS(null, null, 26374, "Red Nether Brick Stairs"), + RED_NETHER_BRICK_WALL(null, null, 4580, "Red Nether Brick Wall"), + RED_SANDSTONE_WALL(null, null, 4753, "Red Sandstone Wall"), + SANDSTONE_WALL(null, null, 18470, "Sandstone Wall"), + SCAFFOLDING(null, null, 15757, "Scaffolding"), + SKULL_BANNER_PATTERN(null, null, 7680, "Banner Pattern"), + SMITHING_TABLE(null, null, 9082, "Smithing Table"), + SMOKER(null, null, 24781, "Smoker"), + SMOOTH_QUARTZ_SLAB(null, null, 26543, "Smooth Quartz Slab"), + SMOOTH_QUARTZ_STAIRS(null, null, 19560, "Smooth Quartz Stairs"), + SMOOTH_RED_SANDSTONE_SLAB(null, null, 16304, "Smooth Red Sandstone Slab"), + SMOOTH_RED_SANDSTONE_STAIRS(null, null, 17561, "Smooth Red Sandstone Stairs"), + SMOOTH_SANDSTONE_SLAB(null, null, 9030, "Smooth Sandstone Slab"), + SMOOTH_SANDSTONE_STAIRS(null, null, 21183, "Smooth Sandstone Stairs"), + SMOOTH_STONE_SLAB(null, null, 24129, "Smooth Stone Slab"), + SPRUCE_SIGN(null, null, 21502, "Spruce Sign"), + SPRUCE_WALL_SIGN(null, null, 7352, "Spruce Wall Sign"), + STONECUTTER(null, null, 25170, "Stonecutter"), + STONE_BRICK_WALL(null, null, 29073, "Stone Brick Wall"), + STONE_STAIRS(null, null, 23784, "Stone Stairs"), + SUSPICIOUS_STEW(null, null, 8173, "Suspicious Stew"), + SWEET_BERRIES(null, null, 19747, "Sweet Berries"), + SWEET_BERRY_BUSH(null, null, 11958, "Sweet Berry Bush"), + TRADER_LLAMA_SPAWN_EGG(null, null, 13512, "Trader Llama Spawn Egg"), + WANDERING_TRADER_SPAWN_EGG(null, null, 12312, "Wandering Trader Spawn Egg"), + WHITE_DYE(null, null, 10758, "White Dye"), + WITHER_ROSE(null, null, 8619, "Wither Rose"), + YELLOW_DYE(null, null, 5952, "Yellow Dye"), + COMPOSTER(null, null, -4, "Composter"), + + // Legacy + LEGACY_STATIONARY_WATER(9, 0, null, "Stationary Water"), + LEGACY_STATIONARY_LAVA(11, 0, null, "Stationary Lava"), + LEGACY_BURNING_FURNACE(62, 0, null, "Burning Furnace"), + LEGACY_NETHER_WARTS(115, 0, null, "Nether Warts"), + LEGACY_IRON_DOOR_BLOCK(71, 0, null, "Iron Door Block"), + LEGACY_GLOWING_REDSTON_ORE(74, 0, null, "Glowing Redstone Ore"), + LEGACY_SUGAR_CANE_BLOCK(83, 0, null, "Sugar Cane Block"), + LEGACY_RAW_FISH(349, 0, null, "Raw Fish"), + LEGACY_SKULL(144, 0, null, "Skull"), + LEGACY_SIGN_POST(63, 0, null, "Sign Post"), + LEGACY_BED_BLOCK(26, 0, null, "Bed Block"), + LEGACY_REDSTONE_TORCH_OFF(75, 0, null, "Redstone Torch Off"), + LEGACY_REDSTONE_TORCH_ON(76, 0, null, "Redstone Torch On"), + LEGACY_CAKE_BLOCK(92, 0, null, "Cake Block"), + LEGACY_DIODE_BLOCK_OFF(93, 0, null, "Diode Block Off"), + LEGACY_DIODE_BLOCK_ON(94, 0, null, "Diode Block On"), + +// LEGACY_BREWING_STAND(117, null, null, "LEGACY_BREWING_STAND", ""), +// LEGACY_CAULDRON(118, 0, null, "LEGACY_CAULDRON", ""), +// LEGACY_REDSTONE_LAMP_ON(124, null, null, "LEGACY_REDSTONE_LAMP_ON", ""), +// LEGACY_WOOD_DOUBLE_STEP(125, null, null, "LEGACY_WOOD_DOUBLE_STEP", ""), +// LEGACY_FLOWER_POT(140, null, null, "LEGACY_FLOWER_POT", ""), + LEGACY_REDSTONE_COMPARATOR_OFF(149, 0, null, "Redstone Comparator Off", ""), + LEGACY_REDSTONE_COMPARATOR_ON(150, 0, null, "Redstone Comparator On", ""), +// LEGACY_STANDING_BANNER(176, null, null, "LEGACY_STANDING_BANNER", ""), +// LEGACY_WALL_BANNER(177, null, null, "LEGACY_WALL_BANNER", ""), +// LEGACY_DAYLIGHT_DETECTOR_INVERTED(178, null, null, "LEGACY_DAYLIGHT_DETECTOR_INVERTED", ""), +// LEGACY_DOUBLE_STONE_SLAB2(181, null, null, "LEGACY_DOUBLE_STONE_SLAB2", ""), + LEGACY_WOODEN_DOOR_BLOCK(64, 0, null, "Wooden Door Block"), + LEGACY_SPRUCE_DOOR(193, 0, null, "Spruce Door Block"), + LEGACY_BIRCH_DOOR(194, 0, null, "Birch Door Block"), + LEGACY_JUNGLE_DOOR(195, 0, null, "Jungle Door Block"), + LEGACY_ACACIA_DOOR(196, 0, null, "Acacia Door Block"), + LEGACY_DARK_OAK_DOOR(197, 0, null, "Dark Oak Door Block"), +// LEGACY_PURPUR_DOUBLE_SLAB(204, null, null, "LEGACY_PURPUR_DOUBLE_SLAB", ""), +// LEGACY_COMMAND_REPEATING(210, null, null, "LEGACY_COMMAND_REPEATING", ""), +// LEGACY_COMMAND_CHAIN(211, null, null, "LEGACY_COMMAND_CHAIN", ""), + LEGACY_WHEAT(59, 0, null, "Wheat Block"); + + private Integer legacyId; + private Integer legacyData; + private Integer id; + private String name; + private List legacyName; + private String bukkitName; + private String mojangName; + Material mat; + + CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name) { + this(legacyId, legacyData, id, name, ""); + } + + CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name, String... legacyName) { + this.legacyId = legacyId; + this.legacyData = legacyData; + this.id = id; + this.name = name; + if (legacyName != null && !legacyName[0].isEmpty()) + this.legacyName = Arrays.asList(legacyName); + } + + public String getName() { + return name; + } + + @Deprecated + public Integer getLegacyId() { + return this.legacyId == null ? 0 : this.legacyId; + } + + @Deprecated + public Integer getId() { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + return this.id == null ? 0 : this.id; + } + return getLegacyId(); + } + + public Material getMaterial() { + return mat == null ? null : mat; + } + + public void updateMaterial() { + if (mat == null) { + for (Material one : Material.class.getEnumConstants()) { + if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.name().replace("_", ""))) + continue; + mat = one; + break; + } + } + if (mat == null) { + for (Material one : Material.class.getEnumConstants()) { + if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.getName().replace(" ", ""))) + continue; + mat = one; + break; + } + } + if (mat == null && !this.getLegacyNames().isEmpty()) { + main: for (Material one : Material.class.getEnumConstants()) { + for (String oneL : this.getLegacyNames()) { + if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(oneL.replace(" ", "").replace("_", ""))) + continue main; + } + mat = one; + break; + } + } + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { + if (mat == null && this.getId() != null) { + for (Material one : Material.class.getEnumConstants()) { + if (one.getId() != this.getId()) + continue; + mat = one; + break; + } + } + } + } + + public ItemStack newItemStack() { + return newItemStack(1); + } + + public ItemStack newItemStack(int amount) { + if (mat == null) { + updateMaterial(); + } + if (mat == null) { + return new ItemStack(Material.STONE); + } + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat); + stack.setAmount(amount); + return stack; + } + ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat, 1, (short) this.getLegacyData()); + stack.setAmount(amount); + return stack; + } + + public CMIItemStack newCMIItemStack() { + return newCMIItemStack(1); + } + + public CMIItemStack newCMIItemStack(int amount) { + if (mat == null) { + updateMaterial(); + } + if (mat == null) { + return new CMIItemStack(CMIMaterial.STONE); + } + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + CMIItemStack stack = new CMIItemStack(mat == null ? Material.STONE : mat); + stack.setAmount(amount); + return stack; + } + ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat, 1, (short) this.getLegacyData()); + stack.setAmount(amount); + return new CMIItemStack(stack); + } + + @Deprecated + public short getData() { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + return 0; + } + return getLegacyData(); + } + + @Deprecated + public short getLegacyData() { + return legacyData == null ? 0 : legacyData.shortValue(); + } + + public static CMIMaterial getRandom(CMIMaterial mat) { + + List ls = new ArrayList(); + + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getLegacyId() == null) + continue; + if (one.getLegacyId() != mat.getLegacyId()) + continue; + ls.add(one); + } + + if (ls.isEmpty() || ls.size() == 1) { + String part = mat.name; + if (part.contains("_")) + part = part.split("_")[part.split("[_]").length - 1]; + for (CMIMaterial one : CMIMaterial.values()) { + if (!one.name().endsWith(part)) + continue; + ls.add(one); + } + } + + Collections.shuffle(ls); + + return ls.isEmpty() ? CMIMaterial.NONE : ls.get(0); + } + + public CMIMaterial getByColorId(int id) { + return getByColorId(this, id); + } + + public static CMIMaterial getByColorId(CMIMaterial mat, int id) { + if (mat == null) + return CMIMaterial.NONE; + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getLegacyId() == null) + continue; + if (one.getLegacyId() != mat.getLegacyId()) + continue; + if (one.getLegacyData() == id) + return one; + } + + return mat; + } + + public static CMIMaterial get(String id) { + + if (id == null) + return CMIMaterial.NONE; + Integer ids = null; + Integer data = null; + id = id.replace("_", "").replace(" ", "").replace("minecraft:", "").toLowerCase(); + + if (id.contains(":")) { + try { + ids = Integer.parseInt(id.split(":")[0]); + data = Integer.parseInt(id.split(":")[1]); + return get(ids, data); + } catch (Exception ex) { + } + + try { + data = Integer.parseInt(id.split(":")[1]); + id = id.split(":")[0]; + CMIMaterial mat = ItemManager.byName.get(id + ":" + data); + if (mat != null) { + return mat; + } + CMIMaterial mat1 = ItemManager.byName.get(id); + if (mat1 != null) { + mat = get(mat1.getLegacyId(), data); + if (mat != null) { + return mat; + } + } + } catch (Exception ex) { + } + } + + CMIMaterial mat = ItemManager.byName.get(id); + + if (mat != null) { + return mat; + } + + try { + mat = ItemManager.byId.get(Integer.parseInt(id)); + if (mat != null) { + return mat; + } + } catch (Exception ex) { + } + + return CMIMaterial.NONE; + } + + public static CMIMaterial get(Material mat) { + if (mat == null) + return CMIMaterial.NONE; + CMIMaterial m = ItemManager.byRealMaterial.get(mat); + if (m != null) + return m; + return get(mat.toString()); + } + + public static CMIMaterial get(int id) { + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getMaterial() == null) + continue; + if (one.getId() == id) { + return one; + } + } + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getLegacyId() == id) { + return one; + } + } + return CMIMaterial.NONE; + } + + public static CMIMaterial get(ItemStack item) { + if (item == null) + return CMIMaterial.NONE; + CMIMaterial mat = null; + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { + mat = Version.isCurrentEqualOrHigher(Version.v1_13_R1) ? get(item.getType().getId()) : get(item.getType().getId(), item.getData().getData()); + if (mat == null) { + mat = ItemManager.byName.get(item.getType().toString().toLowerCase().replace("_", "")); + } + } else { + mat = ItemManager.byRealMaterial.get(item.getType()); + } + + return mat == null ? CMIMaterial.NONE : mat; + } + + public static CMIMaterial get(Block block) { + if (block == null) + return CMIMaterial.NONE; + byte data = Version.isCurrentEqualOrLower(Version.v1_13_R1) ? block.getData() : 0; + if (block.getState() instanceof Skull) { + Skull skull = (Skull) block.getState(); + data = (byte) skull.getSkullType().ordinal(); + } + + CMIMaterial mat = null; + + if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { + mat = ItemManager.byRealMaterial.get(block.getType()); + } + + if (mat == null) { + mat = ItemManager.byName.get(block.getType().toString().replace("_", "").toLowerCase()); + } + + if (mat == null && Version.isCurrentEqualOrLower(Version.v1_13_R2)) { + mat = get(block.getType().getId(), Version.isCurrentEqualOrHigher(Version.v1_13_R1) ? 0 : data); + } + return mat == null ? CMIMaterial.NONE : mat; + } + + public static CMIMaterial get(int id, int data) { + CMIMaterial mat = ItemManager.byName.get(id + ":" + data); + if (mat != null) { + return mat; + } + mat = ItemManager.byId.get(id); + return mat == null ? CMIMaterial.NONE : mat; + } + + public static CMIMaterial getLegacy(int id) { + CMIMaterial mat = ItemManager.byId.get(id); + if (mat != null) + return mat; + return CMIMaterial.NONE; + } + + public short getMaxDurability() { + return this.getMaterial() == null ? 0 : this.getMaterial().getMaxDurability(); + } + + public boolean isBlock() { + return this.getMaterial() == null ? false : this.getMaterial().isBlock(); + } + + public boolean isEquipment() { + return getMaxDurability() > 16; + } + + public boolean isSolid() { + return this.getMaterial() == null ? false : this.getMaterial().isSolid(); + } + + public static boolean isMonsterEgg(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isMonsterEgg(); + } + + public boolean isMonsterEgg() { + switch (this) { + case ELDER_GUARDIAN_SPAWN_EGG: + case WITHER_SKELETON_SPAWN_EGG: + case STRAY_SPAWN_EGG: + case HUSK_SPAWN_EGG: + case ZOMBIE_VILLAGER_SPAWN_EGG: + case SKELETON_HORSE_SPAWN_EGG: + case ZOMBIE_HORSE_SPAWN_EGG: + case DONKEY_SPAWN_EGG: + case MULE_SPAWN_EGG: + case EVOKER_SPAWN_EGG: + case VEX_SPAWN_EGG: + case VINDICATOR_SPAWN_EGG: + case CREEPER_SPAWN_EGG: + case SKELETON_SPAWN_EGG: + case SPIDER_SPAWN_EGG: + case ZOMBIE_SPAWN_EGG: + case SLIME_SPAWN_EGG: + case GHAST_SPAWN_EGG: + case ZOMBIE_PIGMAN_SPAWN_EGG: + case ENDERMAN_SPAWN_EGG: + case CAVE_SPIDER_SPAWN_EGG: + case SILVERFISH_SPAWN_EGG: + case BLAZE_SPAWN_EGG: + case MAGMA_CUBE_SPAWN_EGG: + case BAT_SPAWN_EGG: + case WITCH_SPAWN_EGG: + case ENDERMITE_SPAWN_EGG: + case GUARDIAN_SPAWN_EGG: + case SHULKER_SPAWN_EGG: + case PIG_SPAWN_EGG: + case SHEEP_SPAWN_EGG: + case COW_SPAWN_EGG: + case CHICKEN_SPAWN_EGG: + case SQUID_SPAWN_EGG: + case WOLF_SPAWN_EGG: + case MOOSHROOM_SPAWN_EGG: + case OCELOT_SPAWN_EGG: + case HORSE_SPAWN_EGG: + case RABBIT_SPAWN_EGG: + case POLAR_BEAR_SPAWN_EGG: + case LLAMA_SPAWN_EGG: + case PARROT_SPAWN_EGG: + case VILLAGER_SPAWN_EGG: + case COD_SPAWN_EGG: + case DOLPHIN_SPAWN_EGG: + case DRAGON_EGG: + case DROWNED_SPAWN_EGG: + case PHANTOM_SPAWN_EGG: + case PUFFERFISH_SPAWN_EGG: + case SALMON_SPAWN_EGG: + case TROPICAL_FISH_SPAWN_EGG: + case TURTLE_EGG: + case TURTLE_SPAWN_EGG: + + case CAT_SPAWN_EGG: + case FOX_SPAWN_EGG: + case PANDA_SPAWN_EGG: + case PILLAGER_SPAWN_EGG: + case RAVAGER_SPAWN_EGG: + case TRADER_LLAMA_SPAWN_EGG: + case WANDERING_TRADER_SPAWN_EGG: + return true; + default: + break; + } + return false; + } + + public static boolean isBed(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isBed(); + } + + public boolean isBed() { + switch (this) { + case WHITE_BED: + case ORANGE_BED: + case MAGENTA_BED: + case LIGHT_BLUE_BED: + case YELLOW_BED: + case LIME_BED: + case PINK_BED: + case GRAY_BED: + case LIGHT_GRAY_BED: + case CYAN_BED: + case PURPLE_BED: + case BLUE_BED: + case BROWN_BED: + case GREEN_BED: + case RED_BED: + case BLACK_BED: + case LEGACY_BED_BLOCK: + return true; + default: + break; + } + return false; + } + + public static boolean isStairs(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isStairs(); + } + + public boolean isStairs() { + switch (this) { + case ACACIA_STAIRS: + case BIRCH_STAIRS: + case BRICK_STAIRS: + case COBBLESTONE_STAIRS: + case DARK_OAK_STAIRS: + case DARK_PRISMARINE_STAIRS: + case JUNGLE_STAIRS: + case NETHER_BRICK_STAIRS: + case OAK_STAIRS: + case PRISMARINE_BRICK_STAIRS: + case PRISMARINE_STAIRS: + case PURPUR_STAIRS: + case QUARTZ_STAIRS: + case RED_SANDSTONE_STAIRS: + case SANDSTONE_STAIRS: + case SPRUCE_STAIRS: + case STONE_BRICK_STAIRS: + + case ANDESITE_STAIRS: + case DIORITE_STAIRS: + case END_STONE_BRICK_STAIRS: + case GRANITE_STAIRS: + case MOSSY_COBBLESTONE_STAIRS: + case MOSSY_STONE_BRICK_STAIRS: + case POLISHED_ANDESITE_STAIRS: + case POLISHED_DIORITE_STAIRS: + case POLISHED_GRANITE_STAIRS: + case RED_NETHER_BRICK_STAIRS: + case SMOOTH_QUARTZ_STAIRS: + case SMOOTH_RED_SANDSTONE_STAIRS: + case SMOOTH_SANDSTONE_STAIRS: + case STONE_STAIRS: + return true; + default: + break; + } + return false; + } + + public static boolean isPotion(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isPotion(); + } + + public boolean isPotion() { + switch (this) { + case POTION: + case LINGERING_POTION: + case SPLASH_POTION: + + case AWKWARD_POTION: + case THICK_POTION: + case MUNDANE_POTION: + case REGENERATION_POTION: + case SWIFTNESS_POTION: + case FIRE_RESISTANCE_POTION: + case POISON_POTION: + case HEALING_POTION: + case NIGHT_VISION_POTION: + case WEAKNESS_POTION: + case STRENGTH_POTION: + case SLOWNESS_POTION: + case HARMING_POTION: + case WATER_BREATHING_POTION: + case INVISIBILITY_POTION: + case REGENERATION_POTION2: + case SWIFTNESS_POTION2: + case POISON_POTION2: + case HEALING_POTION2: + case STRENGTH_POTION2: + case LEAPING_POTION2: + case HARMING_POTION2: + case REGENERATION_POTION3: + case SWIFTNESS_POTION3: + case FIRE_RESISTANCE_POTION3: + case POISON_POTION3: + case NIGHT_VISION_POTION2: + case WEAKNESS_POTION2: + case STRENGTH_POTION3: + case SLOWNESS_POTION2: + case LEAPING_POTION3: + case WATER_BREATHING_POTION2: + case INVISIBILITY_POTION2: + case REGENERATION_POTION4: + case SWIFTNESS_POTION4: + case POISON_POTION4: + case STRENGTH_POTION4: + return true; + default: + break; + } + return false; + } + + public static boolean isBoat(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isBoat(); + } + + public boolean isBoat() { + switch (this) { + case OAK_BOAT: + case ACACIA_BOAT: + case BIRCH_BOAT: + case DARK_OAK_BOAT: + case JUNGLE_BOAT: + case SPRUCE_BOAT: + return true; + default: + break; + } + return false; + } + + public static boolean isSapling(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isSapling(); + } + + public boolean isSapling() { + switch (this) { + case OAK_SAPLING: + case SPRUCE_SAPLING: + case BIRCH_SAPLING: + case JUNGLE_SAPLING: + case ACACIA_SAPLING: + case DARK_OAK_SAPLING: + return true; + default: + break; + } + return false; + } + + public static boolean isButton(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isButton(); + } + + public boolean isButton() { + switch (this) { + case ACACIA_BUTTON: + case BIRCH_BUTTON: + case DARK_OAK_BUTTON: + case JUNGLE_BUTTON: + case OAK_BUTTON: + case SPRUCE_BUTTON: + case STONE_BUTTON: + return true; + default: + break; + } + return false; + } + + public static boolean isWater(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isWater(); + } + + public boolean isWater() { + switch (this) { + case WATER: + case LEGACY_STATIONARY_WATER: + return true; + default: + break; + } + return false; + } + + public static boolean isLava(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isLava(); + } + + public boolean isLava() { + switch (this) { + case LAVA: + case LEGACY_STATIONARY_LAVA: + return true; + default: + break; + } + return false; + } + + public static boolean isPlate(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isPlate(); + } + + public boolean isPlate() { + switch (this) { + case ACACIA_PRESSURE_PLATE: + case BIRCH_PRESSURE_PLATE: + case DARK_OAK_PRESSURE_PLATE: + case HEAVY_WEIGHTED_PRESSURE_PLATE: + case JUNGLE_PRESSURE_PLATE: + case LIGHT_WEIGHTED_PRESSURE_PLATE: + case OAK_PRESSURE_PLATE: + case SPRUCE_PRESSURE_PLATE: + case STONE_PRESSURE_PLATE: + return true; + default: + break; + } + return false; + } + + public static boolean isWool(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isWool(); + } + + public boolean isWool() { + switch (this) { + case BLACK_WOOL: + case BLUE_WOOL: + case BROWN_WOOL: + case CYAN_WOOL: + case GRAY_WOOL: + case GREEN_WOOL: + case LIGHT_BLUE_WOOL: + case LIGHT_GRAY_WOOL: + case LIME_WOOL: + case MAGENTA_WOOL: + case ORANGE_WOOL: + case PINK_WOOL: + case PURPLE_WOOL: + case RED_WOOL: + case WHITE_WOOL: + case YELLOW_WOOL: + return true; + default: + break; + } + return false; + } + + public static boolean isCarpet(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isCarpet(); + } + + public boolean isCarpet() { + switch (this) { + case BLACK_CARPET: + case BLUE_CARPET: + case BROWN_CARPET: + case CYAN_CARPET: + case GRAY_CARPET: + case GREEN_CARPET: + case LIGHT_BLUE_CARPET: + case LIGHT_GRAY_CARPET: + case LIME_CARPET: + case MAGENTA_CARPET: + case ORANGE_CARPET: + case PINK_CARPET: + case PURPLE_CARPET: + case RED_CARPET: + case WHITE_CARPET: + case YELLOW_CARPET: + return true; + default: + break; + } + return false; + } + + public static boolean isShulkerBox(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isShulkerBox(); + } + + public boolean isShulkerBox() { + switch (this) { + case BLACK_SHULKER_BOX: + case BLUE_SHULKER_BOX: + case BROWN_SHULKER_BOX: + case CYAN_SHULKER_BOX: + case GRAY_SHULKER_BOX: + case GREEN_SHULKER_BOX: + case LIGHT_BLUE_SHULKER_BOX: + case LIGHT_GRAY_SHULKER_BOX: + case LIME_SHULKER_BOX: + case MAGENTA_SHULKER_BOX: + case ORANGE_SHULKER_BOX: + case PINK_SHULKER_BOX: + case PURPLE_SHULKER_BOX: + case RED_SHULKER_BOX: + case WHITE_SHULKER_BOX: + case YELLOW_SHULKER_BOX: + case SHULKER_BOX: + return true; + default: + break; + } + return false; + } + + public static boolean isLeatherArmor(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isLeatherArmor(); + } + + public boolean isLeatherArmor() { + switch (this) { + case LEATHER_BOOTS: + case LEATHER_CHESTPLATE: + case LEATHER_HELMET: + case LEATHER_LEGGINGS: + return true; + default: + break; + } + return false; + } + + public static boolean isArmor(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isArmor(); + } + + public boolean isArmor() { + switch (this) { + case CHAINMAIL_HELMET: + case DIAMOND_HELMET: + case GOLDEN_HELMET: + case IRON_HELMET: + case LEATHER_HELMET: + case CHAINMAIL_CHESTPLATE: + case DIAMOND_CHESTPLATE: + case GOLDEN_CHESTPLATE: + case IRON_CHESTPLATE: + case LEATHER_CHESTPLATE: + case CHAINMAIL_LEGGINGS: + case DIAMOND_LEGGINGS: + case GOLDEN_LEGGINGS: + case IRON_LEGGINGS: + case LEATHER_LEGGINGS: + case CHAINMAIL_BOOTS: + case DIAMOND_BOOTS: + case GOLDEN_BOOTS: + case IRON_BOOTS: + case LEATHER_BOOTS: + case SHIELD: + case TURTLE_HELMET: + return true; + default: + break; + } + return false; + } + + public static boolean isWeapon(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isWeapon(); + } + + public boolean isWeapon() { + switch (this) { + case DIAMOND_SWORD: + case IRON_SWORD: + case GOLDEN_SWORD: + case STONE_SWORD: + case WOODEN_SWORD: + case BOW: + case CROSSBOW: + case TRIDENT: + return true; + default: + break; + } + return false; + } + + public static boolean isTool(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isTool(); + } + + public boolean isTool() { + switch (this) { + case DIAMOND_PICKAXE: + case GOLDEN_PICKAXE: + case IRON_PICKAXE: + case STONE_PICKAXE: + case WOODEN_PICKAXE: + case DIAMOND_SHOVEL: + case GOLDEN_SHOVEL: + case IRON_SHOVEL: + case STONE_SHOVEL: + case WOODEN_SHOVEL: + case DIAMOND_AXE: + case GOLDEN_AXE: + case IRON_AXE: + case STONE_AXE: + case WOODEN_AXE: + case DIAMOND_HOE: + case GOLDEN_HOE: + case IRON_HOE: + case STONE_HOE: + case WOODEN_HOE: + case SHEARS: + case FISHING_ROD: + return true; + default: + break; + } + return false; + } + + public static boolean isAir(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isAir(); + } + + public boolean isAir() { + switch (this) { + case AIR: + case CAVE_AIR: + case VOID_AIR: + return true; + default: + break; + } + return false; + } + + public static boolean isPotted(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isPotted(); + } + + public boolean isPotted() { + switch (this) { + case POTTED_ACACIA_SAPLING: + case POTTED_ALLIUM: + case POTTED_AZURE_BLUET: + case POTTED_BIRCH_SAPLING: + case POTTED_BLUE_ORCHID: + case POTTED_BROWN_MUSHROOM: + case POTTED_CACTUS: + case POTTED_DANDELION: + case POTTED_DARK_OAK_SAPLING: + case POTTED_DEAD_BUSH: + case POTTED_FERN: + case POTTED_JUNGLE_SAPLING: + case POTTED_OAK_SAPLING: + case POTTED_ORANGE_TULIP: + case POTTED_OXEYE_DAISY: + case POTTED_PINK_TULIP: + case POTTED_POPPY: + case POTTED_RED_MUSHROOM: + case POTTED_RED_TULIP: + case POTTED_SPRUCE_SAPLING: + case POTTED_WHITE_TULIP: + case POTTED_BAMBOO: + case POTTED_CORNFLOWER: + case POTTED_LILY_OF_THE_VALLEY: + case POTTED_WITHER_ROSE: + return true; + default: + break; + } + return false; + } + + public static boolean isAnvil(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isAnvil(); + } + + public boolean isAnvil() { + switch (this) { + case ANVIL: + case CHIPPED_ANVIL: + case DAMAGED_ANVIL: + return true; + default: + break; + } + return false; + } + + public static boolean isDoor(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isDoor(); + } + + public boolean isDoor() { + switch (this) { + case OAK_DOOR: + case IRON_DOOR: + + case LEGACY_SPRUCE_DOOR: + case LEGACY_BIRCH_DOOR: + case LEGACY_JUNGLE_DOOR: + case LEGACY_ACACIA_DOOR: + case LEGACY_DARK_OAK_DOOR: + case LEGACY_WOODEN_DOOR_BLOCK: + +// case SPRUCE_DOOR_ITEM: +// case BIRCH_DOOR_ITEM: +// case JUNGLE_DOOR_ITEM: +// case ACACIA_DOOR_ITEM: +// case DARK_OAK_DOOR_ITEM: +// case WOODEN_DOOR: + case ACACIA_DOOR: + case BIRCH_DOOR: + case DARK_OAK_DOOR: +// case IRON_DOOR_BLOCK: + case JUNGLE_DOOR: + case SPRUCE_DOOR: + return true; + default: + break; + } + return false; + } + + public static boolean isGate(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isGate(); + } + + public boolean isGate() { + switch (this) { + case ACACIA_FENCE_GATE: + case BIRCH_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case END_GATEWAY: + case JUNGLE_FENCE_GATE: + case OAK_FENCE_GATE: + case SPRUCE_FENCE_GATE: + return true; + default: + break; + } + return false; + } + + public static boolean isFence(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isFence(); + } + + public boolean isFence() { + switch (this) { + case ACACIA_FENCE: + case BIRCH_FENCE: + case DARK_OAK_FENCE: + case JUNGLE_FENCE: + case NETHER_BRICK_FENCE: + case OAK_FENCE: + case SPRUCE_FENCE: + return true; + default: + break; + } + return false; + } + + public static boolean isRail(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isRail(); + } + + public boolean isRail() { + switch (this) { + case POWERED_RAIL: + case RAIL: + case ACTIVATOR_RAIL: + case DETECTOR_RAIL: + return true; + default: + break; + } + return false; + } + + public static boolean isGlassPane(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isGlassPane(); + } + + public boolean isGlassPane() { + switch (this) { + case BLACK_STAINED_GLASS_PANE: + case BLUE_STAINED_GLASS_PANE: + case BROWN_STAINED_GLASS_PANE: + case CYAN_STAINED_GLASS_PANE: + case GRAY_STAINED_GLASS_PANE: + case GREEN_STAINED_GLASS_PANE: + case LIGHT_BLUE_STAINED_GLASS_PANE: + case LIGHT_GRAY_STAINED_GLASS_PANE: + case LIME_STAINED_GLASS_PANE: + case MAGENTA_STAINED_GLASS_PANE: + case ORANGE_STAINED_GLASS_PANE: + case PINK_STAINED_GLASS_PANE: + case PURPLE_STAINED_GLASS_PANE: + case RED_STAINED_GLASS_PANE: + case WHITE_STAINED_GLASS_PANE: + case YELLOW_STAINED_GLASS_PANE: + case GLASS_PANE: + return true; + default: + break; + } + return false; + } + + public static boolean isSign(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isSign(); + } + + public boolean isSign() { + switch (this) { + case SIGN: + case WALL_SIGN: + case LEGACY_SIGN_POST: + + case ACACIA_SIGN: + case ACACIA_WALL_SIGN: + case BIRCH_SIGN: + case BIRCH_WALL_SIGN: + case DARK_OAK_SIGN: + case DARK_OAK_WALL_SIGN: + case JUNGLE_SIGN: + case JUNGLE_WALL_SIGN: + case OAK_SIGN: + case OAK_WALL_SIGN: + case SPRUCE_SIGN: + case SPRUCE_WALL_SIGN: + + return true; + default: + break; + } + return false; + } + + public static boolean isWall(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isWall(); + } + + public boolean isWall() { + switch (this) { + case COBBLESTONE_WALL: + case MOSSY_COBBLESTONE_WALL: + + case ANDESITE_WALL: + case BRICK_WALL: + case DIORITE_WALL: + case END_STONE_BRICK_WALL: + case GRANITE_WALL: + case MOSSY_STONE_BRICK_WALL: + case NETHER_BRICK_WALL: + case PRISMARINE_WALL: + case RED_NETHER_BRICK_WALL: + case RED_SANDSTONE_WALL: + case SANDSTONE_WALL: + case STONE_BRICK_WALL: + return true; + default: + break; + } + return false; + } + + public static boolean isTrapDoor(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isTrapDoor(); + } + + public boolean isTrapDoor() { + switch (this) { + case ACACIA_TRAPDOOR: + case BIRCH_TRAPDOOR: + case DARK_OAK_TRAPDOOR: + case IRON_TRAPDOOR: + case JUNGLE_TRAPDOOR: + case OAK_TRAPDOOR: + case SPRUCE_TRAPDOOR: + return true; + default: + break; + } + return false; + } + + public static boolean isSkull(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isSkull(); + } + + public boolean isSkull() { + switch (this) { + case SKELETON_SKULL: + case WITHER_SKELETON_SKULL: + case SKELETON_WALL_SKULL: + case WITHER_SKELETON_WALL_SKULL: + case PLAYER_HEAD: + case CREEPER_HEAD: + case DRAGON_HEAD: + case ZOMBIE_HEAD: + return true; + default: + break; + } + return false; + } + + public static boolean isDye(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isDye(); + } + + public boolean isDye() { + switch (this) { + case INK_SAC: + case ROSE_RED: + case CACTUS_GREEN: + case COCOA_BEANS: + case LAPIS_LAZULI: + case PURPLE_DYE: + case CYAN_DYE: + case LIGHT_GRAY_DYE: + case GRAY_DYE: + case PINK_DYE: + case LIME_DYE: + case DANDELION_YELLOW: + case LIGHT_BLUE_DYE: + case MAGENTA_DYE: + case ORANGE_DYE: + case BONE_MEAL: + + case BLACK_DYE: + case BLUE_DYE: + case BROWN_DYE: + case GREEN_DYE: + case RED_DYE: + case WHITE_DYE: + case YELLOW_DYE: + return true; + default: + break; + } + return false; + } + + public static boolean isSlab(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isSlab(); + } + + public boolean isSlab() { + switch (this) { + case ACACIA_SLAB: + case DARK_OAK_SLAB: +// case DOUBLE_STONE_SLAB2: +// case PURPUR_DOUBLE_SLAB: + case BIRCH_SLAB: + case BRICK_SLAB: + case COBBLESTONE_SLAB: + case DARK_PRISMARINE_SLAB: +// case DOUBLE_STONE_SLAB: +// case DOUBLE_SANDSTONE_SLAB: +// case DOUBLE_WOODEN_SLAB: +// case DOUBLE_COBBLESTONE_SLAB: +// case DOUBLE_BRICK_SLAB: +// case DOUBLE_STONE_BRICK_SLAB: +// case DOUBLE_NETHER_BRICK_SLAB: +// case DOUBLE_QUARTZ_SLAB: + case JUNGLE_SLAB: + case NETHER_BRICK_SLAB: + case OAK_SLAB: + case PETRIFIED_OAK_SLAB: + case PRISMARINE_BRICK_SLAB: + case PRISMARINE_SLAB: + case PURPUR_SLAB: + case QUARTZ_SLAB: + case RED_SANDSTONE_SLAB: + case SANDSTONE_SLAB: + case SPRUCE_SLAB: + case STONE_BRICK_SLAB: + case STONE_SLAB: + + case ANDESITE_SLAB: + case CUT_RED_SANDSTONE_SLAB: + case CUT_SANDSTONE_SLAB: + case DIORITE_SLAB: + case END_STONE_BRICK_SLAB: + case GRANITE_SLAB: + case MOSSY_COBBLESTONE_SLAB: + case MOSSY_STONE_BRICK_SLAB: + case POLISHED_ANDESITE_SLAB: + case POLISHED_DIORITE_SLAB: + case POLISHED_GRANITE_SLAB: + case RED_NETHER_BRICK_SLAB: + case SMOOTH_QUARTZ_SLAB: + case SMOOTH_RED_SANDSTONE_SLAB: + case SMOOTH_SANDSTONE_SLAB: + case SMOOTH_STONE_SLAB: + return true; + default: + break; + } + return false; + } + + public static SlabType getSlabType(Block block) { + if (!isSlab(block.getType())) + return SlabType.NOTSLAB; + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + if (block.getBlockData() instanceof org.bukkit.block.data.type.Slab) { + org.bukkit.block.data.type.Slab slab = (org.bukkit.block.data.type.Slab) block.getBlockData(); + switch (slab.getType()) { + case TOP: + return SlabType.TOP; + case BOTTOM: + return SlabType.BOTTOM; + case DOUBLE: + return SlabType.DOUBLE; + } + + } + return SlabType.NOTSLAB; + } + if (block.getType().name().contains("STEP")) { + switch (CMIMaterial.get(block).getLegacyId()) { + case 44: + switch (block.getData()) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + return SlabType.BOTTOM; + default: + return SlabType.DOUBLE; + } + case 126: + switch (block.getData()) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + return SlabType.BOTTOM; + default: + return SlabType.DOUBLE; + } + case 182: + switch (block.getData()) { + case 0: + return SlabType.BOTTOM; + default: + return SlabType.DOUBLE; + } + case 205: + switch (block.getData()) { + case 0: + return SlabType.BOTTOM; + default: + return SlabType.DOUBLE; + } + } + } + + return SlabType.NOTSLAB; + } + + public boolean equals(Material mat) { + if (getMaterial() == null) { + return false; + } + return this.getMaterial().equals(mat); + } + + public List getLegacyNames() { + if (legacyName == null) + return new ArrayList(); + return legacyName; + } + + public void addLegacyName(String legacyName) { + if (legacyName == null) + this.legacyName = new ArrayList(); + this.legacyName.add(legacyName); + } + + public String getBukkitName() { + if (bukkitName == null) + bukkitName = getMaterial() == null ? "N/A" : getMaterial().name(); + return bukkitName; + } + + public void setBukkitName(String bukkitName) { + this.bukkitName = bukkitName; + } + + public void setMojangName(String mojangName) { + this.mojangName = mojangName; + } +} diff --git a/src/com/bekvon/bukkit/cmiLib/ItemReflection.java b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java similarity index 96% rename from src/com/bekvon/bukkit/cmiLib/ItemReflection.java rename to src/com/bekvon/bukkit/cmiLib/CMIReflections.java index 89e46d4bd..755e2f2dc 100644 --- a/src/com/bekvon/bukkit/cmiLib/ItemReflection.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java @@ -15,7 +15,7 @@ import com.bekvon.bukkit.cmiLib.VersionChecker.Version; -public class ItemReflection { +public class CMIReflections { private static Class CraftServerClass; private static Object CraftServer; diff --git a/src/com/bekvon/bukkit/cmiLib/ItemManager.java b/src/com/bekvon/bukkit/cmiLib/ItemManager.java index ec49ab033..bf104ef88 100644 --- a/src/com/bekvon/bukkit/cmiLib/ItemManager.java +++ b/src/com/bekvon/bukkit/cmiLib/ItemManager.java @@ -1,67 +1,43 @@ -/** - * Copyright (C) 2017 Zrips - */ package com.bekvon.bukkit.cmiLib; -import java.awt.Color; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; -import java.util.Map.Entry; import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.OfflinePlayer; -import org.bukkit.block.Block; -import org.bukkit.block.CreatureSpawner; -import org.bukkit.block.Skull; -import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; -import org.bukkit.inventory.meta.BlockStateMeta; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.potion.PotionData; import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionType; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; -import com.bekvon.bukkit.residence.Residence; - public class ItemManager { - private Residence plugin; - - static HashMap byId = new HashMap(); - static HashMap byBukkitName = new HashMap(); - static HashMap byMojangName = new HashMap(); - static HashMap byMaterial = new HashMap(); static HashMap byRealMaterial = new HashMap(); -// HashMap customNamesEn = new HashMap(); -// HashMap customNames = new HashMap(); - - public ItemManager(Residence plugin) { - this.plugin = plugin; - } + static HashMap byId = new HashMap(); + static HashMap byName = new HashMap(); - public HashMap idMap() { + public HashMap idMap() { return byId; } - public HashMap byBukkitNameMap() { - return byBukkitName; + public HashMap NameMap() { + return byName; } - public static void load() { + static { + for (CMIMaterial one : CMIMaterial.values()) { if (one == null) continue; one.updateMaterial(); Material mat = one.getMaterial(); - if (mat == null) { continue; } @@ -69,85 +45,160 @@ public static void load() { Integer id = one.getId(); short data = one.getLegacyData(); Integer legacyId = one.getLegacyId(); + String cmiName = one.getName().replace("_", "").replace(" ", "").toLowerCase(); + String materialName = one.toString().replace("_", "").replace(" ", "").toLowerCase(); - String bukkitName = one.name(); - String mojangName = one.name(); - ; + String mojangName = null; try { - mojangName = ItemReflection.getItemMinecraftName(new ItemStack(mat)); + mojangName = CMIReflections.getItemMinecraftName(new ItemStack(mat)); } catch (Exception e) { e.printStackTrace(); } + mojangName = mojangName == null ? mat.toString().replace("_", "").replace(" ", "").toLowerCase() : mojangName.replace("_", "").replace(" ", "").toLowerCase(); - mojangName = mojangName == null ? mat.toString() : mojangName; - CMIItemStack cm = new CMIItemStack(one); + if (byName.containsKey(cmiName)) { + byName.put(cmiName + ":" + data, one); + } else + byName.put(cmiName, one); - cm.setId(id); - cm.setData(data > 0 ? data : 0); + if (byName.containsKey(materialName)) + byName.put(materialName + ":" + data, one); + else + byName.put(materialName, one); - cm.setBukkitName(bukkitName); - cm.setMojangName(mojangName); - - byBukkitName.put(bukkitName + ":" + cm.getData(), cm); - byBukkitName.put(id + ":" + cm.getData(), cm); - byBukkitName.put(legacyId + ":" + cm.getData(), cm); - if (!one.getLegacyName().isEmpty()) { - byBukkitName.put(one.getLegacyName().toLowerCase().replace("_", "").replace(" ", ""), cm); + if (!one.getLegacyNames().isEmpty()) { + for (String oneL : one.getLegacyNames()) { + String legacyName = oneL.replace("_", "").replace(" ", "").toLowerCase(); + if (byName.containsKey(legacyName) || data > 0) + byName.put(legacyName + ":" + data, one); + else + byName.put(legacyName, one); + } } - byBukkitName.put(one.name().toLowerCase().replace("_", "").replace(" ", ""), cm); - String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); + if (byName.containsKey(mojangName)) + byName.put(mojangName + ":" + data, one); + else + byName.put(mojangName, one); + + if (byName.containsKey(String.valueOf(id)) || data > 0) + byName.put(id + ":" + data, one); + else + byName.put(String.valueOf(id), one); + + if (byName.containsKey(String.valueOf(legacyId)) || data > 0) + byName.put(legacyId + ":" + data, one); + else + byName.put(String.valueOf(legacyId), one); - if (!byMojangName.containsKey(n)) - byMojangName.put(n, cm); - byMaterial.put(one, cm); if (!byId.containsKey(id)) - byId.put(id, cm); + byId.put(id, one); if (!byId.containsKey(one.getLegacyId())) - byId.put(one.getLegacyId(), cm); + byId.put(one.getLegacyId(), one); if (one.getLegacyData() == 0) - byId.put(one.getLegacyId(), cm); + byId.put(one.getLegacyId(), one); byRealMaterial.put(mat, one); - } - for (Material one : Material.class.getEnumConstants()) { - CMIMaterial mat = CMIMaterial.get(one); - if (mat == CMIMaterial.NONE && !one.toString().startsWith("LEGACY_")) { - CMIItemStack cm = new CMIItemStack(new ItemStack(one)); - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) - cm.setId(one.getId()); - cm.setBukkitName(one.name()); - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) - byBukkitName.put(one.getId() + ":" + cm.getData(), cm); - byBukkitName.put(one.name().toLowerCase().replace("_", "").replace(" ", ""), cm); - String mojangName = one.name(); - try { - mojangName = ItemReflection.getItemMinecraftName(new ItemStack(one)); - } catch (Exception e) { - } - mojangName = mojangName == null ? mat.toString() : mojangName; - cm.setMojangName(mojangName); - String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); - if (!byMojangName.containsKey(n)) - byMojangName.put(n, cm); - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) - if (!byId.containsKey(one.getId())) - byId.put(one.getId(), cm); - byRealMaterial.put(one, mat); - } } +// plugin.consoleMessage("Loaded " + byName2.size() + " " + byId2.size() + " " + byRealMaterial2.size()); + +// for (CMIMaterial one : CMIMaterial.values()) { +// if (one == null) +// continue; +// one.updateMaterial(); +// Material mat = one.getMaterial(); +// +// if (mat == null) { +// continue; +// } +// +// Integer id = one.getId(); +// short data = one.getLegacyData(); +// Integer legacyId = one.getLegacyId(); +// +// String bukkitName = one.name(); +// String mojangName = one.name(); +//// String realName = plugin.getRef().getItemRealName(new ItemStack(mat)); +// try { +// mojangName = plugin.getRef().getItemMinecraftName(new ItemStack(mat)); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// +// mojangName = mojangName == null ? mat.toString() : mojangName; +// CMIItemStack cm = new CMIItemStack(one); +// +// cm.setId(id); +// cm.setData(data > 0 ? data : 0); +// +// cm.setBukkitName(bukkitName); +// cm.setMojangName(mojangName); +// +// byBukkitName.put(bukkitName + ":" + cm.getData(), cm); +// byBukkitName.put(id + ":" + cm.getData(), cm); +// byBukkitName.put(legacyId + ":" + cm.getData(), cm); +// if (!one.getLegacyNames().isEmpty()) { +// byBukkitName.put(one.getLegacyName().toLowerCase().replace("_", "").replace(" ", ""), cm); +// } +// byBukkitName.put(one.name().toLowerCase().replace("_", "").replace(" ", ""), cm); +// +// String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); +// +// if (!byMojangName.containsKey(n)) +// byMojangName.put(n, cm); +// byMaterial.put(one, cm); +// if (!byId.containsKey(id)) +// byId.put(id, cm); +// if (!byId.containsKey(one.getLegacyId())) +// byId.put(one.getLegacyId(), cm); +// if (one.getLegacyData() == 0) +// byId.put(one.getLegacyId(), cm); +// byRealMaterial.put(mat, one); +// } +// +// for (Material one : Material.class.getEnumConstants()) { +// CMIMaterial mat = CMIMaterial.get(one); +// if (mat == CMIMaterial.NONE && !one.toString().startsWith("LEGACY_")) { +// CMIItemStack cm = new CMIItemStack(new ItemStack(one)); +// if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) +// cm.setId(one.getId()); +// cm.setBukkitName(one.name()); +//// String realName = plugin.getRef().getItemRealName(new ItemStack(one)); +// +// if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) +// byBukkitName.put(one.getId() + ":" + cm.getData(), cm); +// byBukkitName.put(one.name().toLowerCase().replace("_", "").replace(" ", ""), cm); +// String mojangName = one.name(); +// try { +// mojangName = plugin.getRef().getItemMinecraftName(new ItemStack(one)); +// } catch (Exception e) { +// } +// mojangName = mojangName == null ? mat.toString() : mojangName; +// cm.setMojangName(mojangName); +// String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); +// if (!byMojangName.containsKey(n)) +// byMojangName.put(n, cm); +// if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) +// if (!byId.containsKey(one.getId())) +// byId.put(one.getId(), cm); +// byRealMaterial.put(one, mat); +// } +// } } @Deprecated public CMIItemStack getItem(Material mat) { - CMIItemStack cm = byMaterial.get(CMIMaterial.get(mat)); - return cm.clone(); + CMIMaterial cmat = CMIMaterial.get(mat); + if (cmat == null || cmat.equals(CMIMaterial.NONE)) + return null; + return new CMIItemStack(cmat); } public static CMIItemStack getItem(CMIMaterial mat) { - CMIItemStack cm = byMaterial.get(mat); - return cm == null ? null : cm.clone(); + if (mat == null || mat.equals(CMIMaterial.NONE)) + return null; + return new CMIItemStack(mat); } public static CMIItemStack getItem(ItemStack item) { @@ -173,9 +224,9 @@ public CMIItemStack getItem(String name) { String subdata = null; if (name.contains(":")) { - CMIItemStack mat = byBukkitName.get(name); + CMIMaterial mat = byName.get(name); if (mat != null) - return mat; + return new CMIItemStack(mat); subdata = name.split(":")[1]; } @@ -188,6 +239,15 @@ public CMIItemStack getItem(String name) { name = name.split("-")[0]; } + if (name.contains(">")) { + String a = name.split(">")[1]; + try { + amount = Integer.parseInt(a); + } catch (Exception e) { + } + name = name.split(">")[0]; + } + short data = -999; if (name.contains(":")) { @@ -206,13 +266,13 @@ public CMIItemStack getItem(String name) { switch (name.toLowerCase()) { case "skull": - cm = byMaterial.get(CMIMaterial.SKELETON_SKULL); + cm = CMIMaterial.SKELETON_SKULL.newCMIItemStack(); break; case "door": - cm = byMaterial.get(CMIMaterial.SPRUCE_DOOR); + cm = CMIMaterial.SPRUCE_DOOR.newCMIItemStack(); break; case "head": - cm = byMaterial.get(CMIMaterial.PLAYER_HEAD); + cm = CMIMaterial.PLAYER_HEAD.newCMIItemStack(); data = 3; main: if (original.contains(":")) { @@ -244,99 +304,112 @@ public CMIItemStack getItem(String name) { break; } - main: if (cm == null) { - cm = byBukkitName.get(name); - if (subdata != null && cm != null) { - cm = byBukkitName.get(cm.getCMIType() + ":" + subdata); - if (cm != null) - break main; - } - cm = byBukkitName.get(name); - - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { - if (cm != null && data != -999) { - CMIMaterial t = CMIMaterial.get(cm.getCMIType().getLegacyId(), data); - if (t != null) { - cm = byMaterial.get(t); - } - } - } + CMIMaterial cmat = CMIMaterial.get(subdata == null ? name : name + ":" + subdata); + if (cmat == null || cmat.equals(CMIMaterial.NONE)) { + cmat = CMIMaterial.get(name); + } - if (data != -999) { - try { - cm = byId.get(Integer.parseInt(name)); - CMIMaterial t = CMIMaterial.get(original); - if (t != null) { - cm = this.byMaterial.get(t); - } - } catch (Exception e) { - } - } + if (cmat != null && !cmat.equals(CMIMaterial.NONE)) { + cm = cmat.newCMIItemStack(); + } else + cmat = CMIMaterial.get(subdata == null ? original : original + ":" + subdata); - if (cm == null) { - try { - cm = byId.get(Integer.parseInt(name)); - } catch (Exception e) { - } + if (cmat != null && !cmat.equals(CMIMaterial.NONE)) + cm = cmat.newCMIItemStack(); - if (cm == null) { - cm = byMojangName.get(name); - if (cm == null) { - for (Material one : Material.class.getEnumConstants()) { - if (one.name().replace("_", "").equalsIgnoreCase(name)) { - cm = byMaterial.get(CMIMaterial.get(one)); - break; - } - } - if (cm == null) { - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getName().replace(" ", "").equalsIgnoreCase(name)) { - cm = byMaterial.get(one); - if (cm != null && data == -999) { - data = one.getData(); - } - break; - } - } - if (cm == null) { - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getName().replace(" ", "").toLowerCase().startsWith(name)) { - cm = byMaterial.get(one); - if (cm != null && data == -999) { - data = one.getData(); - } - break; - } - } - } - if (cm == null) { - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getName().replace(" ", "").toLowerCase().contains(name)) { - cm = byMaterial.get(one); - if (cm != null && data == -999) { - data = one.getData(); - } - break; - } - } - } - if (cm == null) { - for (Entry one : byMojangName.entrySet()) { - if (one.getKey().contains(name)) { - cm = one.getValue(); - if (cm != null && data == -999) { - data = one.getValue().getData(); - } - break; - } - } - } - } - } +// main: if (cm == null) { +// cm = byBukkitName.get(name); +// if (subdata != null && cm != null) { +// cm = byBukkitName.get(cm.getCMIType() + ":" + subdata); +// if (cm != null) +// break main; +// } +// cm = byBukkitName.get(name); +// +// if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { +// if (cm != null && data != -999) { +// CMIMaterial t = CMIMaterial.get(cm.getCMIType().getLegacyId(), data); +// if (t != null) { +// cm = byMaterial.get(t); // } - } - } - } +// } +// } +// +// if (data != -999) { +// try { +// cm = byId.get(Integer.parseInt(name)); +// CMIMaterial t = CMIMaterial.get(original); +// if (t != null) { +// cm = this.byMaterial.get(t); +// } +// } catch (Exception e) { +// } +// } +// +// if (cm == null) { +// try { +// cm = byId.get(Integer.parseInt(name)); +// } catch (Exception e) { +// } +// +// if (cm == null) { +// cm = byMojangName.get(name); +// if (cm == null) { +// for (Material one : Material.class.getEnumConstants()) { +// if (one.name().replace("_", "").equalsIgnoreCase(name)) { +// cm = byMaterial.get(CMIMaterial.get(one)); +// break; +// } +// } +// if (cm == null) { +// for (CMIMaterial one : CMIMaterial.values()) { +// if (one.getName().replace(" ", "").equalsIgnoreCase(name)) { +// cm = byMaterial.get(one); +// if (cm != null && data == -999) { +// data = one.getData(); +// } +// break; +// } +// } +// if (cm == null) { +// for (CMIMaterial one : CMIMaterial.values()) { +// if (one.getName().replace(" ", "").toLowerCase().startsWith(name)) { +// cm = byMaterial.get(one); +// if (cm != null && data == -999) { +// data = one.getData(); +// } +// break; +// } +// } +// } +// if (cm == null) { +// for (CMIMaterial one : CMIMaterial.values()) { +// if (one.getName().replace(" ", "").toLowerCase().contains(name)) { +// cm = byMaterial.get(one); +// if (cm != null && data == -999) { +// data = one.getData(); +// } +// break; +// } +// } +// } +// if (cm == null) { +// for (Entry one : byMojangName.entrySet()) { +// if (one.getKey().contains(name)) { +// cm = one.getValue(); +// if (cm != null && data == -999) { +// data = one.getValue().getData(); +// } +// break; +// } +// } +// } +// } +// } +//// } +// } +// } +// } CMIItemStack ncm = null; if (cm != null) @@ -472,2948 +545,4 @@ public enum SlabType { NOTSLAB; } - public enum CMIColors { - White(0, "White", CMIMaterial.BONE_MEAL, new Color(249, 255, 254)), - Orange(1, "Orange", CMIMaterial.ORANGE_DYE, new Color(249, 128, 29)), - Magenta(2, "Magenta", CMIMaterial.MAGENTA_DYE, new Color(199, 78, 189)), - Light_Blue(3, "Light Blue", CMIMaterial.LIGHT_BLUE_DYE, new Color(58, 179, 218)), - Yellow(4, "Yellow", CMIMaterial.DANDELION_YELLOW, new Color(254, 216, 61)), - Lime(5, "Lime", CMIMaterial.LIME_DYE, new Color(128, 199, 31)), - Pink(6, "Pink", CMIMaterial.PINK_DYE, new Color(243, 139, 170)), - Gray(7, "Gray", CMIMaterial.GRAY_DYE, new Color(71, 79, 82)), - Light_Gray(8, "Light Gray", CMIMaterial.LIGHT_GRAY_DYE, new Color(157, 157, 151)), - Cyan(9, "Cyan", CMIMaterial.CYAN_DYE, new Color(22, 156, 156)), - Purple(10, "Purple", CMIMaterial.PURPLE_DYE, new Color(137, 50, 184)), - Blue(11, "Blue", CMIMaterial.LAPIS_LAZULI, new Color(60, 68, 170)), - Brown(12, "Brown", CMIMaterial.COCOA_BEANS, new Color(131, 84, 50)), - Green(13, "Green", CMIMaterial.CACTUS_GREEN, new Color(94, 124, 22)), - Red(14, "Red", CMIMaterial.ROSE_RED, new Color(176, 46, 38)), - Black(15, "Black", CMIMaterial.INK_SAC, new Color(29, 29, 33)); - - private int id; - private String name; - private CMIMaterial mat; - private Color color; - - CMIColors(int id, String name, CMIMaterial mat, Color color) { - this.id = id; - this.name = name; - this.mat = mat; - this.color = color; - } - - CMIColors(int id, String name, CMIMaterial mat) { - this.id = id; - this.name = name; - this.mat = mat; - } - - public int getId() { - return id; - } - - public String getName() { - return name; - } - - public static CMIColors getById(int id) { - for (CMIColors one : CMIColors.values()) { - if (one.getId() == id) - return one; - } - return CMIColors.White; - } - - public CMIMaterial getMat() { - return mat; - } - - public void setMat(CMIMaterial mat) { - this.mat = mat; - } - - public static CMIMaterial getColorMaterial(CMIMaterial mat) { - String name = mat.getName().replace(" ", "").replace("_", "").toLowerCase(); - for (CMIColors one : values()) { - if (name.contains(one.getName().replace("_", "").toLowerCase())) - return one.getMat(); - } - - return null; - } - - public static CMIColors getColor(CMIMaterial mat) { - String name = mat.getName().replace(" ", "").replace("_", "").toLowerCase(); - for (CMIColors one : values()) { - if (name.contains(one.getName().replace("_", "").toLowerCase())) - return one; - } - -// if (c == null) { -// try { -// net.minecraft.server.v1_13_R2.BlockPosition blockPosition = new net.minecraft.server.v1_13_R2.BlockPosition(b.getX(), b.getY(), b.getZ()); -// net.minecraft.server.v1_13_R2.WorldServer worldServer = ((org.bukkit.craftbukkit.v1_13_R2.CraftWorld) b.getWorld()).getHandle(); -// IBlockData t = worldServer.getType(blockPosition); -// net.minecraft.server.v1_13_R2.Block bl = t.getBlock(); -// c = new Color(bl.n(t).i().rgb, true); -// } catch (Exception | Error e) { -// } -// } - - return null; - } - - public Color getColor() { - return color; - } - } - - public enum CMIEntityType { - - DROPPED_ITEM(1, "Item"), - EXPERIENCE_ORB(2, "Experience Orb"), - AREA_EFFECT_CLOUD(3, "Area Effect Cloud"), - ELDER_GUARDIAN(4, "Elder Guardian"), - WITHER_SKELETON(5, "Wither Skeleton"), - STRAY(6, "Stray"), - EGG(7, "Thrown Egg"), - LEASH_HITCH(8, "Leash Knot"), - PAINTING(9, "Painting"), - ARROW(10, "Arrow"), - SNOWBALL(11, "Snowball"), - FIREBALL(12, "Fireball"), - SMALL_FIREBALL(13, "Small Fireball"), - ENDER_PEARL(14, "Thrown Ender Pearl"), - ENDER_SIGNAL(15, "End Signal"), - SPLASH_POTION(16, "Splash Potion"), - THROWN_EXP_BOTTLE(17, "Thrown Bottle o' Enchanting"), - ITEM_FRAME(18, "Item Frame"), - WITHER_SKULL(19, "Wither Skull"), - PRIMED_TNT(20, "Primed TNT"), - FALLING_BLOCK(21, "Falling Block"), - FIREWORK(22, "Firework Rocket"), - HUSK(23, "Husk"), - SPECTRAL_ARROW(24, "Spectral Arrow"), - SHULKER_BULLET(25, "Shulker Bullet"), - DRAGON_FIREBALL(26, "Dragon Fireball"), - ZOMBIE_VILLAGER(27, "Zombie Villager"), - SKELETON_HORSE(28, "Skeleton Horse"), - ZOMBIE_HORSE(29, "Zombie Horse"), - ARMOR_STAND(30, "Armor Stand"), - DONKEY(31, "Donkey"), - MULE(32, "Mule"), - EVOKER_FANGS(33, "Evoker Fangs"), - EVOKER(34, "Evoker"), - VEX(35, "Vex"), - VINDICATOR(36, "Vindicator"), - ILLUSIONER(37, "Illusioner"), - BOAT(41, "Boat"), - MINECART(42, "Minecart"), - MINECART_CHEST(43, "Minecart with Chest"), - MINECART_FURNACE(44, "Minecart with Furnace"), - MINECART_TNT(45, "Minecart with TNT"), - MINECART_HOPPER(46, "Minecart with Hopper"), - MINECART_MOB_SPAWNER(47, "Minecart with Spawner"), - CREEPER(50, "Creeper"), - SKELETON(51, "Skeleton"), - SPIDER(52, "Spider"), - GIANT(53, "Giant"), - ZOMBIE(54, "Zombie"), - SLIME(55, "Slime"), - GHAST(56, "Ghast"), - ENDERMAN(58, "Enderman"), - CAVE_SPIDER(59, "Cave Spider"), - SILVERFISH(60, "Silverfish"), - BLAZE(61, "Blaze"), - MAGMA_CUBE(62, "Magma Cube"), - ENDER_DRAGON(63, "Ender Dragon"), - WITHER(64, "Wither"), - BAT(65, "Bat"), - WITCH(66, "Witch"), - ENDERMITE(67, "Endermite"), - GUARDIAN(68, "Guardian"), - SHULKER(69, "Shulker"), - PIG(90, "Pig"), - SHEEP(91, "Sheep"), - COW(92, "Cow"), - CHICKEN(93, "Chicken"), - SQUID(94, "Squid"), - WOLF(95, "Wolf"), - MUSHROOM_COW(96, "Mushroom Cow", "Mooshroom"), - SNOWMAN(97, "Snowman"), - OCELOT(98, "Ocelot"), - IRON_GOLEM(99, "Iron Golem"), - HORSE(100, "Horse"), - RABBIT(101, "Rabbit"), - POLAR_BEAR(102, "Polar Bear"), - LLAMA(103, "Llama"), - LLAMA_SPIT(104, "Llama Spit"), - PARROT(105, "Parrot"), - VILLAGER(120, "Villager"), - ENDER_CRYSTAL(200, "End Crystal"), - TURTLE(901, "Turtle"), - PHANTOM(902, "Phantom"), - TRIDENT(903, "Trident"), - COD(904, "Cod"), - SALMON(905, "Salmon"), - PUFFERFISH(906, "Pufferfish"), - TROPICAL_FISH(907, "Tropical Fish"), - DROWNED(908, "Drowned"), - DOLPHIN(909, "Dolphin"), - LINGERING_POTION(910, "Lingering Potion"), - FISHING_HOOK(911, "Fishing Hook"), - LIGHTNING(912, "Lightning Bolt"), - WEATHER(913, "Weather"), - PLAYER(914, "Player"), - COMPLEX_PART(915, "Complex Part"), - TIPPED_ARROW(916, "Tipped Arrow"), - - PANDA(916, "Panda"), - PILLAGER(916, "Pillager"), - RAVAGER(916, "Ravager"), - TRADER_LLAMA(916, "Trader Llama"), - WANDERING_TRADER(916, "Wandering Trader"), - FOX(916, "Fox"), - UNKNOWN(999, "Unknown"); - - private int id; - private String name; - private String secondaryName; - EntityType type = null; - - CMIEntityType(int id, String name) { - this(id, name, null); - } - - CMIEntityType(int id, String name, String secondaryName) { - this.id = id; - this.name = name; - this.secondaryName = secondaryName; - } - - public int getId() { - return id; - } - - public String getName() { - return name; - } - - public static CMIEntityType getById(int id) { - for (CMIEntityType one : CMIEntityType.values()) { - if (one.getId() == id) - return one; - } - return CMIEntityType.PIG; - } - - public static CMIEntityType getByType(EntityType entity) { - return getByName(entity.toString()); - } - - public static CMIEntityType getByItem(ItemStack item) { - if (item == null) - return null; - - if (CMIMaterial.isMonsterEgg(item.getType())) { - String name = item.getType().toString().replace("_SPAWN_EGG", ""); - return getByName(name); - } - - if (CMIMaterial.SPAWNER.equals(item.getType())) { - if (item.getItemMeta() instanceof BlockStateMeta) { - BlockStateMeta bsm = (BlockStateMeta) item.getItemMeta(); - if (bsm.getBlockState() instanceof CreatureSpawner) { - CreatureSpawner bs = (CreatureSpawner) bsm.getBlockState(); - return CMIEntityType.getByType(bs.getSpawnedType()); - } - } - } - return null; - } - - public static CMIEntityType getByName(String name) { - String main = name; - String sub = null; - - if (name.contains("_")) { - main = name.split("_")[0]; - sub = name.split("_")[1]; - } - if (name.contains(":")) { - main = name.split(":")[0]; - sub = name.split(":")[1]; - } - - String updated = (main + (sub == null ? "" : sub)).toLowerCase(); - String reverse = ((sub == null ? "" : sub) + main).toLowerCase(); - - CMIEntityType type = null; - - Integer id = null; - try { - id = Integer.parseInt(main); - } catch (Exception e) { - } - - for (CMIEntityType one : CMIEntityType.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(updated) || one.name.replace(" ", "").equalsIgnoreCase(updated)) { - type = one; - break; - } - } - if (type == null) - for (CMIEntityType one : CMIEntityType.values()) { - if (one.name.replace("_", "").contains(updated)) { - type = one; - break; - } - } - - if (sub != null) { - if (type == null) - for (CMIEntityType one : CMIEntityType.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(reverse) || one.name.replace(" ", "").equalsIgnoreCase(reverse)) { - type = one; - break; - } - } - if (type == null) - for (CMIEntityType one : CMIEntityType.values()) { - if (one.name.replace("_", "").contains(reverse)) { - type = one; - break; - } - } - } - - if (id != null) { - if (type == null) - for (CMIEntityType one : CMIEntityType.values()) { - if (one.getId() == id) { - type = one; - break; - } - } - } - - if (type == null) - for (CMIEntityType one : CMIEntityType.values()) { - if (one.name.contains("_")) - continue; - if (one.name.equalsIgnoreCase(main)) { - type = one; - break; - } - } - if (type == null) - for (CMIEntityType one : CMIEntityType.values()) { - if (one.secondaryName == null) - continue; - - String oneN = one.secondaryName; - oneN = oneN.replace("_", ""); - if (oneN.equalsIgnoreCase(name)) { - type = one; - break; - } - } - - return type; - } - - public EntityType getType() { - if (type != null) - return type; - for (EntityType one : EntityType.values()) { - if (one.toString().equalsIgnoreCase(this.name())) { - type = one; - break; - } - } - return type; - } - - public boolean isAlive() { - return getType() == null ? false : getType().isAlive(); - } - - public boolean isSpawnable() { - return getType() == null ? false : getType().isSpawnable(); - } - - public static String getRealNameByType(EntityType type) { - if (type == null) - return null; - CMIEntityType ctype = CMIEntityType.getByType(type); - if (ctype != null) - return ctype.getName(); - String name = type.name(); - - name = name.toLowerCase().replace("_", " "); - name = name.substring(0, 1).toUpperCase() + name.substring(1); - return name; - } - - public CMIMaterial getSpawnEggMaterial() { - - CMIMaterial m = CMIMaterial.get((this.equals(CMIEntityType.MUSHROOM_COW) ? "Mooshroom".toLowerCase() : this.toString().toLowerCase()) + "_spawn_egg"); - - if (m != null && m.isMonsterEgg()) - return m; - - return null; - } - } - - public enum CMIMaterial { - NONE(null, null, null, "None"), - ACACIA_BOAT(447, 0, 27326, "Acacia Boat", "BOAT_ACACIA"), - ACACIA_BUTTON(null, null, 13993, "Acacia Button"), - ACACIA_DOOR(430, 0, 23797, "Acacia Door", "ACACIA_DOOR_ITEM"), - ACACIA_FENCE(192, 0, 4569, "Acacia Fence"), - ACACIA_FENCE_GATE(187, 0, 14145, "Acacia Fence Gate"), - ACACIA_LEAVES(161, 0, 16606, "Acacia Leaves", "LEAVES_2"), - ACACIA_LOG(162, 0, 8385, "Acacia Log", "LOG_2"), - ACACIA_PLANKS(5, 4, 31312, "Acacia Wood Plank", "Acacia Planks"), - ACACIA_PRESSURE_PLATE(null, null, 17586, "Acacia Pressure Plate"), - ACACIA_SAPLING(6, 4, 20806, "Acacia Sapling"), - ACACIA_SLAB(126, 4, 23730, "Acacia Wood Slab", "Acacia Slab"), - ACACIA_STAIRS(163, 0, 17453, "Acacia Stairs"), - ACACIA_TRAPDOOR(null, null, 18343, "Acacia Trapdoor"), - ACACIA_WOOD(null, null, 21861, "Acacia Wood"), - ACTIVATOR_RAIL(157, 0, 5834, "Activator Rail"), - AIR(0, 0, 9648, "Air"), - ALLIUM(38, 2, 6871, "Allium", "RED_ROSE"), - ANDESITE(1, 5, 25975, "Andesite"), - ANVIL(145, 0, 18718, "Anvil"), - APPLE(260, 0, 7720, "Apple"), - ARMOR_STAND(416, 0, 12852, "Armor Stand"), - ARROW(262, 0, 31091, "Arrow"), - ATTACHED_MELON_STEM(null, null, 30882, "Attached Melon Stem"), - ATTACHED_PUMPKIN_STEM(null, null, 12724, "Attached Pumpkin Stem"), - AZURE_BLUET(38, 3, 17608, "Azure Bluet"), - BAKED_POTATO(393, 0, 14624, "Baked Potato"), - BARRIER(166, 0, 26453, "Barrier"), - BAT_SPAWN_EGG(383, 65, 14607, "Spawn Bat", "Bat Spawn Egg"), - BEACON(138, 0, 6608, "Beacon"), - BEDROCK(7, 0, 23130, "Bedrock"), - BEEF(363, 0, 4803, "Raw Beef"), - BEETROOT(434, 0, 23305, "Beetroot"), - BEETROOTS(207, 0, 22075, "Beetroots", "BEETROOT_BLOCK"), - BEETROOT_SEEDS(435, 0, 21282, "Beetroot Seeds"), - BEETROOT_SOUP(436, 0, 16036, "Beetroot Soup"), - BIRCH_BOAT(445, 0, 28104, "Birch Boat", "BOAT_BIRCH"), - BIRCH_BUTTON(null, null, 26934, "Birch Button"), - BIRCH_DOOR(428, 0, 14759, "Birch Door", "BIRCH_DOOR_ITEM"), - BIRCH_FENCE(189, 0, 17347, "Birch Fence"), - BIRCH_FENCE_GATE(184, 0, 6322, "Birch Fence Gate"), - BIRCH_LEAVES(18, 2, 12601, "Birch Leaves", "LEAVES"), - BIRCH_LOG(17, 2, 26727, "Birch Log", "LOG"), - BIRCH_PLANKS(5, 2, 29322, "Birch Wood Plank", "Birch Planks"), - BIRCH_PRESSURE_PLATE(null, null, 9664, "Birch Pressure Plate"), - BIRCH_SAPLING(6, 2, 31533, "Birch Sapling"), - BIRCH_SLAB(126, 2, 13807, "Birch Slab"), - BIRCH_STAIRS(135, 0, 7657, "Birch Wood Stairs", "Birch Stairs"), - BIRCH_TRAPDOOR(null, null, 32585, "Birch Trapdoor"), - BIRCH_WOOD(null, null, 20913, "Birch Wood"), - BLACK_BANNER(425, 0, 9365, "Banner", "Black Banner"), - BLACK_BED(355, 15, 20490, "Black Bed"), - BLACK_CARPET(171, 15, 6056, "Black Carpet", "CARPET"), - BLACK_CONCRETE(251, 15, 13338, "Black Concrete", "CONCRETE"), - BLACK_CONCRETE_POWDER(252, 15, 16150, "Black Concrete Powder", "CONCRETE_POWDER"), - BLACK_GLAZED_TERRACOTTA(250, 0, 29678, "Black Glazed Terracotta"), - BLACK_SHULKER_BOX(234, 0, 24076, "Black Shulker Box"), - BLACK_STAINED_GLASS(95, 15, 13941, "Black Stained Glass", "STAINED_GLASS"), - BLACK_STAINED_GLASS_PANE(160, 15, 13201, "Black Stained Glass Pane", "STAINED_GLASS_PANE"), - BLACK_TERRACOTTA(159, 15, 26691, "Black Terracotta", "STAINED_CLAY"), - BLACK_WALL_BANNER(117, 0, 4919, "Black Banner"), - BLACK_WOOL(35, 15, 16693, "Black Wool"), - BLAZE_POWDER(377, 0, 18941, "Blaze Powder"), - BLAZE_ROD(369, 0, 8289, "Blaze Rod"), - BLAZE_SPAWN_EGG(383, 61, 4759, "Spawn Blaze", "Blaze Spawn Egg"), - BLUE_BANNER(245, 4, 18481, "Blue Banner", "PURPLE_GLAZED_TERRACOTTA"), - BLUE_BED(355, 11, 12714, "Blue Bed"), - BLUE_CARPET(171, 11, 13292, "Blue Carpet"), - BLUE_CONCRETE(251, 11, 18756, "Blue Concrete"), - BLUE_CONCRETE_POWDER(252, 11, 17773, "Blue Concrete Powder"), - BLUE_GLAZED_TERRACOTTA(246, 0, 23823, "Blue Glazed Terracotta"), - BLUE_ICE(null, null, 22449, "Blue Ice"), - BLUE_ORCHID(38, 1, 13432, "Blue Orchid"), - BLUE_SHULKER_BOX(230, 0, 11476, "Blue Shulker Box"), - BLUE_STAINED_GLASS(95, 11, 7107, "Blue Stained Glass"), - BLUE_STAINED_GLASS_PANE(160, 11, 28484, "Blue Stained Glass Pane"), - BLUE_TERRACOTTA(159, 11, 5236, "Blue Terracotta"), - BLUE_WALL_BANNER(117, 4, 17757, "Blue Banner"), - BLUE_WOOL(35, 11, 15738, "Blue Wool"), - BONE(352, 0, 5686, "Bone"), - BONE_BLOCK(216, 0, 17312, "Bone Block"), - BONE_MEAL(351, 15, 32458, "Bone Meal"), - BOOK(340, 0, 23097, "Book"), - BOOKSHELF(47, 0, 10069, "Bookshelf"), - BOW(261, 0, 8745, "Bow"), - BOWL(281, 0, 32661, "Bowl"), - BRAIN_CORAL(null, null, 31316, "Brain Coral"), - BRAIN_CORAL_BLOCK(null, null, 30618, "Brain Coral Block"), - BRAIN_CORAL_FAN(null, null, 13849, "Brain Coral Fan"), - BRAIN_CORAL_WALL_FAN(null, null, 22685, "Brain Coral Wall Fan"), - BREAD(297, 0, 32049, "Bread"), - BREWING_STAND(379, 0, 14539, "Brewing Stand", "BREWING_STAND_ITEM"), - BRICK(336, 0, 6820, "Brick", "claybrick"), - BRICKS(45, 0, 14165, "Bricks"), - BRICK_SLAB(44, 4, 26333, "Brick Slab", "STEP"), - BRICK_STAIRS(108, 0, 21534, "Brick Stairs"), - BROWN_BANNER(425, 3, 11481, "Brown Banner"), - BROWN_BED(355, 12, 25624, "Brown Bed"), - BROWN_CARPET(171, 12, 23352, "Brown Carpet"), - BROWN_CONCRETE(251, 12, 19006, "Brown Concrete"), - BROWN_CONCRETE_POWDER(252, 12, 21485, "Brown Concrete Powder"), - BROWN_GLAZED_TERRACOTTA(247, 0, 5655, "Brown Glazed Terracotta"), - BROWN_MUSHROOM(39, 0, 9665, "Brown Mushroom"), - BROWN_MUSHROOM_BLOCK(99, 0, 6291, "Brown Mushroom Block", "HUGE_MUSHROOM_1"), - BROWN_SHULKER_BOX(231, 0, 24230, "Brown Shulker Box"), - BROWN_STAINED_GLASS(95, 12, 20945, "Brown Stained Glass"), - BROWN_STAINED_GLASS_PANE(160, 12, 17557, "Brown Stained Glass Pane"), - BROWN_TERRACOTTA(159, 12, 23664, "Brown Terracotta"), - BROWN_WALL_BANNER(117, 3, 14731, "Brown Banner"), - BROWN_WOOL(35, 12, 32638, "Brown Wool"), - BUBBLE_COLUMN(null, null, 13758, "Bubble Column"), - BUBBLE_CORAL(null, null, 12464, "Bubble Coral"), - BUBBLE_CORAL_BLOCK(null, null, 15437, "Bubble Coral Block"), - BUBBLE_CORAL_FAN(null, null, 10795, "Bubble Coral Fan"), - BUBBLE_CORAL_WALL_FAN(null, null, 20382, "Bubble Coral Wall Fan"), - BUCKET(325, 0, 15215, "Bucket"), - CACTUS(81, 0, 12191, "Cactus"), - CACTUS_GREEN(351, 2, 17296, "Cactus Green"), - CAKE(354, 0, 27048, "Cake"), - CARROT(391, 0, 22824, "Carrot", "Carrotitem"), - CARROTS(141, 0, 17258, "Carrots"), - CARROT_ON_A_STICK(398, 0, 27809, "Carrot on a Stick", "carrotstick"), - CARVED_PUMPKIN(null, null, 25833, "Carved Pumpkin"), - CAULDRON(380, 0, 26531, "Cauldron", "CAULDRON_ITEM"), - CAVE_AIR(null, null, 17422, "Cave Air"), - CAVE_SPIDER_SPAWN_EGG(383, 59, 23341, "Spawn Cave Spider", "Cave Spider Spawn Egg"), - CHAINMAIL_BOOTS(305, 0, 17953, "Chainmail Boots"), - CHAINMAIL_CHESTPLATE(303, 0, 23602, "Chainmail Chestplate"), - CHAINMAIL_HELMET(302, 0, 26114, "Chainmail Helmet"), - CHAINMAIL_LEGGINGS(304, 0, 19087, "Chainmail Leggings"), - CHAIN_COMMAND_BLOCK(null, null, 26798, "Chain Command Block"), - CHARCOAL(263, 1, 5390, "Charcoal"), - CHEST(54, 0, 22969, "Chest"), - CHEST_MINECART(342, 0, 4497, "Minecart with Chest", "Storageminecart"), - CHICKEN(365, 0, 17281, "Raw Chicken"), - CHICKEN_SPAWN_EGG(383, 93, 5462, "Spawn Chicken", "Chicken Spawn Egg"), - CHIPPED_ANVIL(145, 1, 10623, "Chipped Anvil"), - CHISELED_QUARTZ_BLOCK(155, 1, 30964, "Chiseled Quartz Block", "QUARTZ_BLOCK"), - CHISELED_RED_SANDSTONE(179, 1, 15529, "Chiseled Red Sandstone", "RED_SANDSTONE"), - CHISELED_SANDSTONE(24, 1, 31763, "Chiseled Sandstone"), - CHISELED_STONE_BRICKS(98, 3, 9087, "Chiseled Stone Bricks", "SMOOTH_BRICK"), - CHORUS_FLOWER(200, 0, 28542, "Chorus Flower"), - CHORUS_FRUIT(432, 0, 7652, "Chorus Fruit"), - CHORUS_PLANT(199, 0, 28243, "Chorus Plant"), - CLAY(82, 0, 27880, "Clay", "Clay Block"), - CLAY_BALL(337, 0, 24603, "Clay Ball"), - CLOCK(347, 0, 14980, "Clock", "watch"), - COAL(263, 0, 29067, "Coal"), - COAL_BLOCK(173, 0, 27968, "Block of Coal", "COAL_BLOCK"), - COAL_ORE(16, 0, 30965, "Coal Ore"), - COARSE_DIRT(3, 1, 15411, "Coarse Dirt"), - COBBLESTONE(4, 0, 32147, "Cobblestone"), - COBBLESTONE_SLAB(44, 3, 6340, "Cobblestone Slab"), - COBBLESTONE_STAIRS(67, 0, 24715, "Cobblestone Stairs"), - COBBLESTONE_WALL(139, 0, 12616, "Cobblestone Wall", "COBBLE_WALL"), - COBWEB(30, 0, 9469, "Cobweb", "WEB"), - COCOA(127, 0, 29709, "Cocoa"), - COCOA_BEANS(351, 3, 27381, "Coco Beans"), - COD(null, null, 24691, "Raw Cod"), - COD_BUCKET(null, null, 28601, "Bucket of Cod"), - COD_SPAWN_EGG(null, null, 27248, "Cod Spawn Egg"), - COMMAND_BLOCK(137, 0, 4355, "Command Block", "COMMAND"), - COMMAND_BLOCK_MINECART(422, 0, 7992, "Minecart with Command Block"), - COMPARATOR(404, 0, 18911, "Redstone Comparator"), - COMPASS(345, 0, 24139, "Compass"), - CONDUIT(null, null, 5148, "Conduit"), - COOKED_BEEF(364, 0, 21595, "Steak"), - COOKED_CHICKEN(366, 0, 20780, "Cooked Chicken"), - COOKED_COD(350, 0, 9681, "Cooked Fish"), - COOKED_MUTTON(424, 0, 31447, "Cooked Mutton"), - COOKED_PORKCHOP(320, 0, 27231, "Cooked Porkchop", "grilledpork"), - COOKED_RABBIT(412, 0, 4454, "Cooked Rabbit"), - COOKED_SALMON(350, 1, 5615, "Cooked Salmon"), - COOKIE(357, 0, 27431, "Cookie"), - COW_SPAWN_EGG(383, 92, 14761, "Spawn Cow", "Cow Spawn Egg"), - CRACKED_STONE_BRICKS(98, 2, 27869, "Cracked Stone Bricks"), - CRAFTING_TABLE(58, 0, 20706, "Crafting Table", "WORKBENCH"), - CREEPER_HEAD(397, 4, 29146, "Mob Head (Creeper)", "Creeper Head"), - CREEPER_SPAWN_EGG(383, 50, 9653, "Spawn Creeper", "Creeper Spawn Egg"), - CREEPER_WALL_HEAD(144, 4, 30123, "Creeper Wall Head"), - CUT_RED_SANDSTONE(null, null, 26842, "Cut Red Sandstone"), - CUT_SANDSTONE(null, null, 6118, "Cut Sandstone"), - CYAN_BANNER(425, 6, 9839, "Cyan Banner"), - CYAN_BED(355, 9, 16746, "Cyan Bed"), - CYAN_CARPET(171, 9, 31495, "Cyan Carpet"), - CYAN_CONCRETE(251, 9, 26522, "Cyan Concrete"), - CYAN_CONCRETE_POWDER(252, 9, 15734, "Cyan Concrete Powder"), - CYAN_DYE(351, 6, 8043, "Cyan Dye"), - CYAN_GLAZED_TERRACOTTA(244, 0, 9550, "Cyan Glazed Terracotta"), - CYAN_SHULKER_BOX(228, 0, 28123, "Cyan Shulker Box"), - CYAN_STAINED_GLASS(95, 9, 30604, "Cyan Stained Glass"), - CYAN_STAINED_GLASS_PANE(160, 9, 11784, "Cyan Stained Glass Pane"), - CYAN_TERRACOTTA(159, 9, 25940, "Cyan Terracotta"), - CYAN_WALL_BANNER(117, 6, 10889, "Cyan Banner"), - CYAN_WOOL(35, 9, 12221, "Cyan Wool"), - DAMAGED_ANVIL(145, 2, 10274, "Damaged Anvil"), - DANDELION(37, 0, 30558, "Dandelion", "YELLOW_FLOWER"), - DANDELION_YELLOW(351, 11, 21789, "Dandelion Yellow"), - DARK_OAK_BOAT(448, 0, 28618, "Dark Oak Boat", "BOAT_DARK_OAK"), - DARK_OAK_BUTTON(null, null, 6214, "Dark Oak Button"), - DARK_OAK_DOOR(431, 0, 10669, "Dark Oak Door", "DARK_OAK_DOOR_ITEM"), - DARK_OAK_FENCE(191, 0, 21767, "Dark Oak Fence"), - DARK_OAK_FENCE_GATE(186, 0, 10679, "Dark Oak Fence Gate"), - DARK_OAK_LEAVES(161, 1, 22254, "Dark Oak Leaves"), - DARK_OAK_LOG(162, 1, 14831, "Dark Oak Log"), - DARK_OAK_PLANKS(5, 5, 20869, "Dark Oak Wood Plank", "Dark Oak Planks"), - DARK_OAK_PRESSURE_PLATE(null, null, 31375, "Dark Oak Pressure Plate"), - DARK_OAK_SAPLING(6, 5, 14933, "Dark Oak Sapling"), - DARK_OAK_SLAB(126, 5, 28852, "Dark Oak Wood Slab", "Dark Oak Slab"), - DARK_OAK_STAIRS(164, 0, 22921, "Dark Oak Stairs"), - DARK_OAK_TRAPDOOR(null, null, 10355, "Dark Oak Trapdoor"), - DARK_OAK_WOOD(null, null, 16995, "Dark Oak Wood"), - DARK_PRISMARINE(168, 2, 19940, "Dark Prismarine"), - DARK_PRISMARINE_SLAB(null, null, 7577, "Dark Prismarine Slab"), - DARK_PRISMARINE_STAIRS(null, null, 26511, "Dark Prismarine Stairs"), - DAYLIGHT_DETECTOR(151, 0, 8864, "Daylight Detector"), - DEAD_BRAIN_CORAL(null, null, 9116, "Dead Brain Coral"), - DEAD_BRAIN_CORAL_BLOCK(null, null, 12979, "Dead Brain Coral Block"), - DEAD_BRAIN_CORAL_FAN(null, null, 26150, "Dead Brain Coral Fan"), - DEAD_BRAIN_CORAL_WALL_FAN(null, null, 23718, "Dead Brain Coral Wall Fan"), - DEAD_BUBBLE_CORAL(null, null, 30583, "Dead Bubble Coral"), - DEAD_BUBBLE_CORAL_BLOCK(null, null, 28220, "Dead Bubble Coral Block"), - DEAD_BUBBLE_CORAL_FAN(null, null, 17322, "Dead Bubble Coral Fan"), - DEAD_BUBBLE_CORAL_WALL_FAN(null, null, 18453, "Dead Bubble Coral Wall Fan"), - DEAD_BUSH(32, 0, 22888, "Dead Bush"), - DEAD_FIRE_CORAL(null, null, 8365, "Dead Fire Coral"), - DEAD_FIRE_CORAL_BLOCK(null, null, 5307, "Dead Fire Coral Block"), - DEAD_FIRE_CORAL_FAN(null, null, 27073, "Dead Fire Coral Fan"), - DEAD_FIRE_CORAL_WALL_FAN(null, null, 23375, "Dead Fire Coral Wall Fan"), - DEAD_HORN_CORAL(null, null, 5755, "Dead Horn Coral"), - DEAD_HORN_CORAL_BLOCK(null, null, 15103, "Dead Horn Coral Block"), - DEAD_HORN_CORAL_FAN(null, null, 11387, "Dead Horn Coral Fan"), - DEAD_HORN_CORAL_WALL_FAN(null, null, 27550, "Dead Horn Coral Wall Fan"), - DEAD_TUBE_CORAL(null, null, 18028, "Dead Tube Coral"), - DEAD_TUBE_CORAL_BLOCK(null, null, 28350, "Dead Tube Coral Block"), - DEAD_TUBE_CORAL_FAN(null, null, 17628, "Dead Tube Coral Fan"), - DEAD_TUBE_CORAL_WALL_FAN(null, null, 5128, "Dead Tube Coral Wall Fan"), - DEBUG_STICK(null, null, 24562, "Debug Stick"), - DETECTOR_RAIL(28, 0, 13475, "Detector Rail", "DETECTOR_RAIL"), - DIAMOND(264, 0, 20865, "Diamond"), - DIAMOND_AXE(279, 0, 27277, "Diamond Axe"), - DIAMOND_BLOCK(57, 0, 5944, "Block of Diamond", "DIAMOND_BLOCK"), - DIAMOND_BOOTS(313, 0, 16522, "Diamond Boots"), - DIAMOND_CHESTPLATE(311, 0, 32099, "Diamond Chestplate"), - DIAMOND_HELMET(310, 0, 10755, "Diamond Helmet"), - DIAMOND_HOE(293, 0, 24050, "Diamond Hoe"), - DIAMOND_HORSE_ARMOR(419, 0, 10321, "Diamond Horse Armor", "Diamond_barding"), - DIAMOND_LEGGINGS(312, 0, 11202, "Diamond Leggings"), - DIAMOND_ORE(56, 0, 9292, "Diamond Ore"), - DIAMOND_PICKAXE(278, 0, 24291, "Diamond Pickaxe"), - DIAMOND_SHOVEL(277, 0, 25415, "Diamond Shovel", "DIAMOND_SPADE"), - DIAMOND_SWORD(276, 0, 27707, "Diamond Sword"), - DIORITE(1, 3, 24688, "Diorite"), - DIRT(3, 0, 10580, "Dirt"), - DISPENSER(23, 0, 20871, "Dispenser"), - DOLPHIN_SPAWN_EGG(null, null, 20787, "Dolphin Spawn Egg"), - DONKEY_SPAWN_EGG(383, 31, 14513, "Spawn Donkey", "Donkey Spawn Egg"), - DRAGON_BREATH(437, 0, 20154, "Dragon's Breath"), - DRAGON_EGG(122, 0, 29946, "Dragon Egg"), - DRAGON_HEAD(397, 5, 20084, "Dragon Head"), - DRAGON_WALL_HEAD(144, 5, 19818, "Dragon Wall Head"), - DRIED_KELP(null, null, 21042, "Dried Kelp"), - DRIED_KELP_BLOCK(null, null, 12966, "Dried Kelp Block"), - DROPPER(158, 0, 31273, "Dropper"), - DROWNED_SPAWN_EGG(null, null, 19368, "Drowned Spawn Egg"), - EGG(344, 0, 21603, "Egg"), - ELDER_GUARDIAN_SPAWN_EGG(383, 4, 11418, "Spawn Elder Guardian", "Elder Guardian Spawn Egg"), - ELYTRA(443, 0, 23829, "Elytra"), - EMERALD(388, 0, 5654, "Emerald"), - EMERALD_BLOCK(133, 0, 9914, "Emerald Block", "Block of Emerald"), - EMERALD_ORE(129, 0, 16630, "Emerald Ore"), - ENCHANTED_BOOK(403, 0, 11741, "Enchanted Book"), - ENCHANTED_GOLDEN_APPLE(322, 1, 8280, "Enchanted Golden Apple"), - ENCHANTING_TABLE(116, 0, 16255, "Enchanting Table", "ENCHANTMENT_TABLE"), - ENDERMAN_SPAWN_EGG(383, 58, 29488, "Spawn Enderman", "Enderman Spawn Egg"), - ENDERMITE_SPAWN_EGG(383, 67, 16617, "Spawn Endermite", "Endermite Spawn Egg"), - ENDER_CHEST(130, 0, 32349, "Ender Chest"), - ENDER_EYE(381, 0, 24860, "Eye of Ender"), - ENDER_PEARL(368, 0, 5259, "Ender Pearl"), - END_CRYSTAL(426, 0, 19090, "End Crystal"), - END_GATEWAY(209, 0, 26605, "End Gateway"), - END_PORTAL(119, 0, 16782, "End Portal"), - END_PORTAL_FRAME(120, 0, 15480, "End Portal Frame", "ENDER_PORTAL_FRAME"), - END_ROD(198, 0, 24832, "End Rod"), - END_STONE(121, 0, 29686, "End Stone", "ENDER_STONE"), - END_STONE_BRICKS(206, 0, 20314, "End Stone Bricks", "END_BRICKS"), - EVOKER_SPAWN_EGG(383, 34, 21271, "Spawn Evoker", "Evoker Spawn Egg"), - EXPERIENCE_BOTTLE(384, 0, 12858, "Bottle o' Enchanting", "expbottle"), - FARMLAND(60, 0, 31166, "Farmland", "SOIL"), - FEATHER(288, 0, 30548, "Feather"), - FERMENTED_SPIDER_EYE(376, 0, 19386, "Fermented Spider Eye"), - FERN(31, 2, 15794, "Fern", "LONG_GRASS"), - FILLED_MAP(358, 0, 23504, "Map"), - FIRE(51, 0, 16396, "Fire"), - FIREWORK_ROCKET(401, 0, 23841, "Firework Rocket"), - FIREWORK_STAR(402, 0, 12190, "Firework Star", "FIREWORK_CHARGE"), - FIRE_CHARGE(385, 0, 4842, "Fire Charge", "Fireball"), - FIRE_CORAL(null, null, 29151, "Fire Coral"), - FIRE_CORAL_BLOCK(null, null, 12119, "Fire Coral Block"), - FIRE_CORAL_FAN(null, null, 11112, "Fire Coral Fan"), - FIRE_CORAL_WALL_FAN(null, null, 20100, "Fire Coral Wall Fan"), - FISHING_ROD(346, 0, 4167, "Fishing Rod"), - FLINT(318, 0, 23596, "Flint"), - FLINT_AND_STEEL(259, 0, 28620, "Flint and Steel"), - FLOWER_POT(390, 0, 30567, "Flower Pot", "FLOWER_POT_ITEM"), - FROSTED_ICE(212, 0, 21814, "Frosted Ice"), - FURNACE(61, 0, 8133, "Furnace"), - FURNACE_MINECART(343, 0, 14196, "Minecart with Furnace", "POWERED_MINECART"), - GHAST_SPAWN_EGG(383, 56, 9970, "Spawn Ghast", "Ghast Spawn Egg"), - GHAST_TEAR(370, 0, 18222, "Ghast Tear"), - GLASS(20, 0, 6195, "Glass"), - GLASS_BOTTLE(374, 0, 6116, "Glass Bottle"), - GLASS_PANE(102, 0, 5709, "Glass Pane", "THIN_GLASS"), - GLISTERING_MELON_SLICE(382, 0, 20158, "Glistering Melon", "speckledmelon"), - GLOWSTONE(89, 0, 32713, "Glowstone"), - GLOWSTONE_DUST(348, 0, 6665, "Glowstone Dust"), - GOLDEN_APPLE(322, 0, 27732, "Golden Apple", "Gold apple"), - GOLDEN_AXE(286, 0, 4878, "Golden Axe", "Gold Axe"), - GOLDEN_BOOTS(317, 0, 7859, "Golden Boots", "Gold Boots"), - GOLDEN_CARROT(396, 0, 5300, "Golden Carrot", "Gold Carrot"), - GOLDEN_CHESTPLATE(315, 0, 4507, "Golden Chestplate", "Gold Chestplate"), - GOLDEN_HELMET(314, 0, 7945, "Golden Helmet", "Gold Helmet"), - GOLDEN_HOE(294, 0, 19337, "Golden Hoe", "Gold Hoe"), - GOLDEN_HORSE_ARMOR(418, 0, 7996, "Golden Horse Armor", "Gold Barding"), - GOLDEN_LEGGINGS(316, 0, 21002, "Golden Leggings", "Gold Leggings"), - GOLDEN_PICKAXE(285, 0, 10901, "Golden Pickaxe", "GOLD_PICKAXE"), - GOLDEN_SHOVEL(284, 0, 15597, "Golden Shovel", "GOLD_SPADE"), - GOLDEN_SWORD(283, 0, 10505, "Golden Sword", "GOLD_SWORD"), - GOLD_BLOCK(41, 0, 27392, "Block of Gold", "GOLD_BLOCK"), - GOLD_INGOT(266, 0, 28927, "Gold Ingot"), - GOLD_NUGGET(371, 0, 28814, "Gold Nugget"), - GOLD_ORE(14, 0, 32625, "Gold Ore"), - GRANITE(1, 1, 21091, "Granite"), - GRASS(31, 1, 6155, "Grass"), - GRASS_BLOCK(2, 0, 28346, "Grass Block"), - GRASS_PATH(208, 0, 8604, "Grass Path"), - GRAVEL(13, 0, 7804, "Gravel"), - GRAY_BANNER(425, 8, 12053, "Gray Banner"), - GRAY_BED(355, 7, 15745, "Gray Bed"), - GRAY_CARPET(171, 7, 26991, "Gray Carpet"), - GRAY_CONCRETE(251, 7, 13959, "Gray Concrete"), - GRAY_CONCRETE_POWDER(252, 7, 13031, "Gray Concrete Powder"), - GRAY_DYE(351, 8, 9184, "Gray Dye"), - GRAY_GLAZED_TERRACOTTA(242, 0, 6256, "Gray Glazed Terracotta"), - GRAY_SHULKER_BOX(226, 0, 12754, "Gray Shulker Box"), - GRAY_STAINED_GLASS(95, 7, 29979, "Gray Stained Glass"), - GRAY_STAINED_GLASS_PANE(160, 7, 25272, "Gray Stained Glass Pane"), - GRAY_TERRACOTTA(159, 7, 18004, "Gray Terracotta"), - GRAY_WALL_BANNER(117, 8, 24275, "Gray Banner"), - GRAY_WOOL(35, 7, 27209, "Gray Wool"), - GREEN_BANNER(425, 2, 10698, "Green Banner"), - GREEN_BED(355, 13, 13797, "Green Bed"), - GREEN_CARPET(171, 13, 7780, "Green Carpet"), - GREEN_CONCRETE(251, 13, 17949, "Green Concrete"), - GREEN_CONCRETE_POWDER(252, 13, 6904, "Green Concrete Powder"), - GREEN_GLAZED_TERRACOTTA(248, 0, 6958, "Green Glazed Terracotta"), - GREEN_SHULKER_BOX(232, 0, 9377, "Green Shulker Box"), - GREEN_STAINED_GLASS(95, 13, 22503, "Green Stained Glass"), - GREEN_STAINED_GLASS_PANE(160, 13, 4767, "Green Stained Glass Pane"), - GREEN_TERRACOTTA(159, 13, 4105, "Green Terracotta"), - GREEN_WALL_BANNER(117, 2, 15046, "Green Banner"), - GREEN_WOOL(35, 13, 25085, "Green Wool"), - GUARDIAN_SPAWN_EGG(383, 68, 20113, "Spawn Guardian", "Guardian Spawn Egg"), - GUNPOWDER(289, 0, 29974, "Gunpowder", "SULPHUR"), - HAY_BLOCK(170, 0, 17461, "Hay Bale", "HAY_BLOCK"), - HEART_OF_THE_SEA(null, null, 11807, "Heart of the Sea"), - HEAVY_WEIGHTED_PRESSURE_PLATE(148, 0, 16970, "Heavy Weighted Pressure Plate", "IRON_PLATE"), - HOPPER(154, 0, 31974, "Hopper"), - HOPPER_MINECART(408, 0, 19024, "Minecart with Hopper"), - HORN_CORAL(null, null, 19511, "Horn Coral"), - HORN_CORAL_BLOCK(null, null, 19958, "Horn Coral Block"), - HORN_CORAL_FAN(null, null, 13610, "Horn Coral Fan"), - HORN_CORAL_WALL_FAN(null, null, 28883, "Horn Coral Wall Fan"), - HORSE_SPAWN_EGG(383, 100, 25981, "Spawn Horse", "Horse Spawn Egg"), - HUSK_SPAWN_EGG(383, 23, 20178, "Spawn Husk", "Husk Spawn Egg"), - ICE(79, 0, 30428, "Ice"), - INFESTED_CHISELED_STONE_BRICKS(97, 5, 4728, "Infested Chiseled Stone Bricks", "MONSTER_EGGS"), - INFESTED_COBBLESTONE(97, 1, 28798, "Infested Cobblestone"), - INFESTED_CRACKED_STONE_BRICKS(97, 4, 7476, "Infested Cracked Stone Bricks"), - INFESTED_MOSSY_STONE_BRICKS(97, 3, 9850, "Infested Mossy Stone Bricks"), - INFESTED_STONE(97, 0, 18440, "Infested Stone"), - INFESTED_STONE_BRICKS(97, 2, 19749, "Infested Stone Bricks"), - INK_SAC(351, 0, 7184, "Ink Sac", "Ink Sack"), - IRON_AXE(258, 0, 15894, "Iron Axe"), - IRON_BARS(101, 0, 9378, "Iron Bars", "IRON_FENCE"), - IRON_BLOCK(42, 0, 24754, "Block of Iron", "IRON_BLOCK"), - IRON_BOOTS(309, 0, 8531, "Iron Boots"), - IRON_CHESTPLATE(307, 0, 28112, "Iron Chestplate"), - IRON_DOOR(330, 0, 4788, "Iron Door"), - IRON_HELMET(306, 0, 12025, "Iron Helmet"), - IRON_HOE(292, 0, 11339, "Iron Hoe"), - IRON_HORSE_ARMOR(417, 0, 30108, "Iron Horse Armor", "Iron_barding"), - IRON_INGOT(265, 0, 24895, "Iron Ingot"), - IRON_LEGGINGS(308, 0, 18951, "Iron Leggings"), - IRON_NUGGET(452, 0, 13715, "Iron Nugget"), - IRON_ORE(15, 0, 19834, "Iron Ore"), - IRON_PICKAXE(257, 0, 8842, "Iron Pickaxe"), - IRON_SHOVEL(256, 0, 30045, "Iron Shovel", "IRON_SPADE"), - IRON_SWORD(267, 0, 10904, "Iron Sword"), - IRON_TRAPDOOR(167, 0, 17095, "Iron Trapdoor"), - ITEM_FRAME(389, 0, 27318, "Item Frame"), - JACK_O_LANTERN(91, 0, 31612, "Jack o'Lantern", "JACK_O_LANTERN"), - JUKEBOX(84, 0, 19264, "Jukebox"), - JUNGLE_BOAT(446, 0, 4495, "Jungle Boat", "BOAT_JUNGLE"), - JUNGLE_BUTTON(null, null, 25317, "Jungle Button"), - JUNGLE_DOOR(429, 0, 28163, "Jungle Door", "JUNGLE_DOOR_ITEM"), - JUNGLE_FENCE(190, 0, 14358, "Jungle Fence"), - JUNGLE_FENCE_GATE(185, 0, 21360, "Jungle Fence Gate", "JUNGLE_FENCE_GATE"), - JUNGLE_LEAVES(18, 3, 5133, "Jungle Leaves"), - JUNGLE_LOG(17, 3, 20721, "Jungle Log"), - JUNGLE_PLANKS(5, 3, 26445, "Jungle Wood Plank", "Jungle Planks"), - JUNGLE_PRESSURE_PLATE(null, null, 11376, "Jungle Pressure Plate"), - JUNGLE_SAPLING(6, 3, 17951, "Jungle Sapling"), - JUNGLE_SLAB(43, 0, 19117, "Double Stone Slab"), - JUNGLE_STAIRS(136, 0, 20636, "Jungle Wood Stairs", "Jungle Stairs"), - JUNGLE_TRAPDOOR(null, null, 8626, "Jungle Trapdoor"), - JUNGLE_WOOD(null, null, 10341, "Jungle Wood"), - KELP(null, null, 21916, "Kelp"), - KELP_PLANT(null, null, 29697, "Kelp Plant"), - KNOWLEDGE_BOOK(453, 0, 12646, "Knowledge Book"), - LADDER(65, 0, 23599, "Ladder"), - LAPIS_BLOCK(22, 0, 14485, "Lapis Lazuli Block", "LAPIS_BLOCK"), - LAPIS_LAZULI(351, 4, 11075, "Lapis Lazuli"), - LAPIS_ORE(21, 0, 22934, "Lapis Lazuli Ore", "LAPIS_ORE"), - LARGE_FERN(175, 3, 30177, "Large Fern", "DOUBLE_PLANT"), - LAVA(10, 0, 8415, "Flowing Lava"), - LAVA_BUCKET(327, 0, 9228, "Lava Bucket"), - LEAD(420, 0, 29539, "Lead", "Leash"), - LEATHER(334, 0, 16414, "Leather"), - LEATHER_BOOTS(301, 0, 15282, "Leather Boots"), - LEATHER_CHESTPLATE(299, 0, 29275, "Leather Tunic", "LEATHER_CHESTPLATE"), - LEATHER_HELMET(298, 0, 11624, "Leather Cap", "LEATHER_HELMET"), - LEATHER_LEGGINGS(300, 0, 28210, "Leather Pants", "LEATHER_LEGGINGS"), - LEVER(69, 0, 15319, "Lever"), - LIGHT_BLUE_BANNER(425, 12, 18060, "Light Blue Banner"), - LIGHT_BLUE_BED(355, 3, 20957, "Light Blue Bed"), - LIGHT_BLUE_CARPET(171, 3, 21194, "Light Blue Carpet"), - LIGHT_BLUE_CONCRETE(251, 3, 29481, "Light Blue Concrete"), - LIGHT_BLUE_CONCRETE_POWDER(252, 3, 31206, "Light Blue Concrete Powder"), - LIGHT_BLUE_DYE(351, 12, 28738, "Light Blue Dye"), - LIGHT_BLUE_GLAZED_TERRACOTTA(238, 0, 4336, "Light Blue Glazed Terracotta"), - LIGHT_BLUE_SHULKER_BOX(222, 0, 18226, "Light Blue Shulker Box"), - LIGHT_BLUE_STAINED_GLASS(95, 3, 17162, "Light Blue Stained Glass"), - LIGHT_BLUE_STAINED_GLASS_PANE(160, 3, 18721, "Light Blue Stained Glass Pane"), - LIGHT_BLUE_TERRACOTTA(159, 3, 31779, "Light Blue Terracotta"), - LIGHT_BLUE_WALL_BANNER(117, 12, 12011, "Light Blue Banner"), - LIGHT_BLUE_WOOL(35, 3, 21073, "Light Blue Wool"), - LIGHT_GRAY_BANNER(425, 7, 11417, "Light Gray Banner"), - LIGHT_GRAY_BED(355, 8, 5090, "Light Gray Bed"), - LIGHT_GRAY_CARPET(171, 8, 11317, "Light Gray Carpet"), - LIGHT_GRAY_CONCRETE(251, 8, 14453, "Light Gray Concrete"), - LIGHT_GRAY_CONCRETE_POWDER(252, 8, 21589, "Light Gray Concrete Powder"), - LIGHT_GRAY_DYE(351, 7, 27643, "Light Gray Dye"), - LIGHT_GRAY_GLAZED_TERRACOTTA(243, 0, 10707, "Light Gray Glazed Terracotta", "SILVER_GLAZED_TERRACOTTA"), - LIGHT_GRAY_SHULKER_BOX(227, 0, 21345, "Light Gray Shulker Box", "SILVER_SHULKER_BOX"), - LIGHT_GRAY_STAINED_GLASS(95, 8, 5843, "Light Gray Stained Glass"), - LIGHT_GRAY_STAINED_GLASS_PANE(160, 8, 19008, "Light Gray Stained Glass Pane"), - LIGHT_GRAY_TERRACOTTA(159, 8, 26388, "Light Gray Terracotta"), - LIGHT_GRAY_WALL_BANNER(117, 7, 31088, "Light Gray Banner"), - LIGHT_GRAY_WOOL(35, 8, 22936, "Light Gray Wool"), - LIGHT_WEIGHTED_PRESSURE_PLATE(147, 0, 14875, "Light Weighted Pressure Plate", "GOLD_PLATE"), - LILAC(175, 1, 22837, "Lilac"), - LILY_PAD(111, 0, 19271, "Lily Pad", "WATER_LILY"), - LIME_BANNER(425, 10, 18887, "Lime Banner"), - LIME_BED(355, 5, 27860, "Lime Bed"), - LIME_CARPET(171, 5, 15443, "Lime Carpet"), - LIME_CONCRETE(251, 5, 5863, "Lime Concrete"), - LIME_CONCRETE_POWDER(252, 5, 28859, "Lime Concrete Powder"), - LIME_DYE(351, 10, 6147, "Lime Dye"), - LIME_GLAZED_TERRACOTTA(240, 0, 13861, "Lime Glazed Terracotta"), - LIME_SHULKER_BOX(224, 0, 28360, "Lime Shulker Box"), - LIME_STAINED_GLASS(95, 5, 24266, "Lime Stained Glass"), - LIME_STAINED_GLASS_PANE(160, 5, 10610, "Lime Stained Glass Pane"), - LIME_TERRACOTTA(159, 5, 24013, "Lime Terracotta"), - LIME_WALL_BANNER(117, 10, 21422, "Lime Banner"), - LIME_WOOL(35, 5, 10443, "Lime Wool"), - LINGERING_POTION(441, 0, 25857, "Lingering Potion"), - LLAMA_SPAWN_EGG(383, 103, 23640, "Spawn Llama", "Llama Spawn Egg"), - MAGENTA_BANNER(425, 13, 15591, "Magenta Banner"), - MAGENTA_BED(355, 2, 20061, "Magenta Bed"), - MAGENTA_CARPET(171, 2, 6180, "Magenta Carpet"), - MAGENTA_CONCRETE(251, 2, 20591, "Magenta Concrete"), - MAGENTA_CONCRETE_POWDER(252, 2, 8272, "Magenta Concrete Powder"), - MAGENTA_DYE(351, 13, 11788, "Magenta Dye"), - MAGENTA_GLAZED_TERRACOTTA(237, 0, 8067, "Magenta Glazed Terracotta"), - MAGENTA_SHULKER_BOX(221, 0, 21566, "Magenta Shulker Box"), - MAGENTA_STAINED_GLASS(95, 2, 26814, "Magenta Stained Glass"), - MAGENTA_STAINED_GLASS_PANE(160, 2, 14082, "Magenta Stained Glass Pane"), - MAGENTA_TERRACOTTA(159, 2, 25900, "Magenta Terracotta"), - MAGENTA_WALL_BANNER(117, 13, 23291, "Magenta Banner"), - MAGENTA_WOOL(35, 2, 11853, "Magenta Wool"), - MAGMA_BLOCK(213, 0, 25927, "Magma Block", "MAGMA"), - MAGMA_CREAM(378, 0, 25097, "Magma Cream"), - MAGMA_CUBE_SPAWN_EGG(383, 62, 26638, "Spawn Magma Cube", "Magma Cube Spawn Egg"), - MAP(395, 0, 21655, "Empty Map"), - MELON(103, 0, 25172, "Melon", "Melon_Block"), - MELON_SEEDS(362, 0, 18340, "Melon Seeds"), - MELON_SLICE(360, 0, 5347, "Melon Slice"), - MELON_STEM(105, 0, 8247, "Melon Stem"), - MILK_BUCKET(335, 0, 9680, "Milk Bucket"), - MINECART(328, 0, 14352, "Minecart"), - MOOSHROOM_SPAWN_EGG(383, 96, 22125, "Spawn Mushroom Cow", "Mooshroom Spawn Egg"), - MOSSY_COBBLESTONE(48, 0, 21900, "Mossy Cobblestone", "MOSSY_COBBLESTONE"), - MOSSY_COBBLESTONE_WALL(139, 1, 11536, "Mossy Cobblestone Wall"), - MOSSY_STONE_BRICKS(98, 1, 16415, "Mossy Stone Bricks"), - MOVING_PISTON(36, 0, 13831, "Piston Moving Piece"), - MULE_SPAWN_EGG(383, 32, 11229, "Spawn Mule", "Mule Spawn Egg"), - MUSHROOM_STEM(null, null, 16543, "Mushroom Stem"), - MUSHROOM_STEW(282, 0, 16336, "Mushroom Stew", "MUSHROOM_SOUP"), - MUSIC_DISC_11(2266, 0, 27426, "11 Disc", "RECORD_11"), - MUSIC_DISC_13(2256, 0, 16359, "13 Disc", "GOLD_RECORD"), - MUSIC_DISC_BLOCKS(2258, 0, 26667, "Blocks Disc", "RECORD_3"), - MUSIC_DISC_CAT(2257, 0, 16246, "Cat Disc", "GREEN_RECORD"), - MUSIC_DISC_CHIRP(2259, 0, 19436, "Chirp Disc", "RECORD_4"), - MUSIC_DISC_FAR(2260, 0, 13823, "Far Disc", "RECORD_5"), - MUSIC_DISC_MALL(2261, 0, 11517, "Mall Disc", "RECORD_6"), - MUSIC_DISC_MELLOHI(2262, 0, 26117, "Mellohi Disc", "RECORD_7"), - MUSIC_DISC_STAL(2263, 0, 14989, "Stal Disc", "RECORD_8"), - MUSIC_DISC_STRAD(2264, 0, 16785, "Strad Disc", "RECORD_9"), - MUSIC_DISC_WAIT(2267, 0, 26499, "Wait Disc", "RECORD_12"), - MUSIC_DISC_WARD(2265, 0, 24026, "Ward Disc", "RECORD_10"), - MUTTON(423, 0, 4792, "Raw Mutton"), - MYCELIUM(110, 0, 9913, "Mycelium", "MYCEL"), - NAME_TAG(421, 0, 30731, "Name Tag"), - NAUTILUS_SHELL(null, null, 19989, "Nautilus Shell"), - NETHERRACK(87, 0, 23425, "Netherrack"), - NETHER_BRICK(405, 0, 19996, "Nether Brick"), - NETHER_BRICKS(112, 0, 27802, "Nether Bricks"), - NETHER_BRICK_FENCE(113, 0, 5286, "Nether Brick Fence", "NETHER_FENCE"), - NETHER_BRICK_SLAB(44, 6, 26586, "Nether Brick Slab"), - NETHER_BRICK_STAIRS(114, 0, 12085, "Nether Brick Stairs", "NETHER_BRICK_STAIRS"), - NETHER_PORTAL(90, 0, 19469, "Nether Portal", "PORTAL"), - NETHER_QUARTZ_ORE(153, 0, 4807, "Nether Quartz Ore", "QUARTZ_ORE"), - NETHER_STAR(399, 0, 12469, "Nether Star"), - NETHER_WART(372, 0, 29227, "Nether Wart", "NETHER_STALK"), - NETHER_WART_BLOCK(214, 0, 15486, "Nether Wart Block", "NETHER_WART_BLOCK"), - NOTE_BLOCK(25, 0, 20979, "Note Block", "NOTE_BLOCK"), - OAK_BOAT(333, 0, 17570, "Boat", "Oak Boat"), - OAK_BUTTON(143, 0, 13510, "Oak Button", "Wooden_button"), - OAK_DOOR(324, 0, 20341, "Wooden Door", "Wood Door"), - OAK_FENCE(85, 0, 6442, "Oak Fence", "FENCE"), - OAK_FENCE_GATE(107, 0, 16689, "Oak Fence Gate", "FENCE_GATE"), - OAK_LEAVES(18, 0, 4385, "Oak Leaves"), - OAK_LOG(17, 0, 26723, "Oak Log"), - OAK_PLANKS(5, 0, 14905, "Oak Wood Plank", "Oak Planks"), - OAK_PRESSURE_PLATE(72, 0, 20108, "Oak Pressure Plate", "Wooden_Presure_Plate"), - OAK_SAPLING(6, 0, 9636, "Oak Sapling"), - OAK_SLAB(126, 0, 12002, "Oak Slab", "Wood step"), - OAK_STAIRS(53, 0, 5449, "Oak Stairs", "WOOD_STAIRS"), - OAK_TRAPDOOR(96, 0, 16927, "Oak Trapdoor", "Trapdoor"), - OAK_WOOD(null, null, 7378, "Oak Wood"), - OBSERVER(218, 0, 10726, "Observer"), - OBSIDIAN(49, 0, 32723, "Obsidian"), - OCELOT_SPAWN_EGG(383, 98, 30080, "Spawn Ocelot", "Ocelot Spawn Egg"), - ORANGE_BANNER(425, 14, 4839, "Orange Banner"), - ORANGE_BED(355, 1, 11194, "Orange Bed"), - ORANGE_CARPET(171, 1, 24752, "Orange Carpet"), - ORANGE_CONCRETE(251, 1, 19914, "Orange Concrete"), - ORANGE_CONCRETE_POWDER(252, 1, 30159, "Orange Concrete Powder"), - ORANGE_DYE(351, 14, 13866, "Orange Dye"), - ORANGE_GLAZED_TERRACOTTA(236, 0, 27451, "Orange Glazed Terracotta"), - ORANGE_SHULKER_BOX(220, 0, 21673, "Orange Shulker Box"), - ORANGE_STAINED_GLASS(95, 1, 25142, "Orange Stained Glass"), - ORANGE_STAINED_GLASS_PANE(160, 1, 21089, "Orange Stained Glass Pane"), - ORANGE_TERRACOTTA(159, 1, 18684, "Orange Terracotta"), - ORANGE_TULIP(38, 5, 26038, "Orange Tulip"), - ORANGE_WALL_BANNER(117, 114, 9936, "Orange Banner"), - ORANGE_WOOL(35, 1, 23957, "Orange Wool"), - OXEYE_DAISY(38, 8, 11709, "Oxeye Daisy"), - PACKED_ICE(174, 0, 28993, "Packed Ice"), - PAINTING(321, 0, 23945, "Painting"), - PAPER(339, 0, 9923, "Paper"), - PARROT_SPAWN_EGG(383, 105, 23614, "Spawn Parrot", "Parrot Spawn Egg"), - PEONY(175, 5, 21155, "Peony"), - PETRIFIED_OAK_SLAB(null, null, 18658, "Petrified Oak Slab"), - PHANTOM_MEMBRANE(null, null, 18398, "Phantom Membrane"), - PHANTOM_SPAWN_EGG(null, null, 24648, "Phantom Spawn Egg"), - PIG_SPAWN_EGG(383, 90, 22584, "Spawn Pig", "Pig Spawn Egg"), - PINK_BANNER(425, 9, 19439, "Pink Banner"), - PINK_BED(355, 6, 13795, "Pink Bed"), - PINK_CARPET(171, 6, 30186, "Pink Carpet"), - PINK_CONCRETE(251, 6, 5227, "Pink Concrete"), - PINK_CONCRETE_POWDER(252, 6, 6421, "Pink Concrete Powder"), - PINK_DYE(351, 9, 31151, "Pink Dye"), - PINK_GLAZED_TERRACOTTA(241, 0, 10260, "Pink Glazed Terracotta"), - PINK_SHULKER_BOX(225, 0, 24968, "Pink Shulker Box"), - PINK_STAINED_GLASS(95, 6, 16164, "Pink Stained Glass"), - PINK_STAINED_GLASS_PANE(160, 6, 24637, "Pink Stained Glass Pane"), - PINK_TERRACOTTA(159, 6, 23727, "Pink Terracotta"), - PINK_TULIP(38, 7, 27319, "Pink Tulip"), - PINK_WALL_BANNER(117, 9, 9421, "Pink Banner"), - PINK_WOOL(35, 6, 7611, "Pink Wool"), - PISTON(33, 0, 21130, "Piston", "PISTON_BASE"), - PISTON_HEAD(34, 0, 30226, "Piston Head", "PISTON_EXTENSION"), - PLAYER_HEAD(397, 3, 21174, "Mob Head (Human)", "Player Head"), - PLAYER_WALL_HEAD(144, 3, 13164, "Player Wall Head"), - PODZOL(3, 2, 24068, "Podzol"), - POISONOUS_POTATO(394, 0, 32640, "Poisonous Potato"), - POLAR_BEAR_SPAWN_EGG(383, 102, 17015, "Spawn Polar Bear", "Polar Bear Spawn Egg"), - POLISHED_ANDESITE(1, 6, 8335, "Polished Andesite"), - POLISHED_DIORITE(1, 4, 31615, "Polished Diorite"), - POLISHED_GRANITE(1, 2, 5477, "Polished Granite"), - POPPED_CHORUS_FRUIT(433, 0, 27844, "Popped Chorus Fruit"), - POPPY(38, 0, 12851, "Poppy"), - PORKCHOP(319, 0, 30896, "Raw Porkchop"), - POTATO(392, 0, 21088, "Potato", "Potatoitem"), - POTATOES(142, 0, 10879, "Potatoes"), - - // Potions - POTION(373, 0, 24020, "Potion"), - AWKWARD_POTION(373, 16, 24020, "Awkard Potion"), - THICK_POTION(373, 32, 24020, "Thick Potion"), - MUNDANE_POTION(373, 64, 24020, "Mundane Potion"), - REGENERATION_POTION(373, 8193, 24020, "Regeneration Potion"), - SWIFTNESS_POTION(373, 8194, 24020, "Swiftness Potion"), - FIRE_RESISTANCE_POTION(373, 8195, 24020, "Fire Resistance Potion"), - POISON_POTION(373, 8196, 24020, "Poison Potion"), - HEALING_POTION(373, 8197, 24020, "Healing Potion"), - NIGHT_VISION_POTION(373, 8198, 24020, "Night Vision Potion"), - WEAKNESS_POTION(373, 8200, 24020, "Weakness Potion"), - STRENGTH_POTION(373, 8201, 24020, "Strenght Potion"), - SLOWNESS_POTION(373, 8202, 24020, "Slowness Potion"), - HARMING_POTION(373, 8204, 24020, "Harming Potion"), - WATER_BREATHING_POTION(373, 8205, 24020, "Water Breathing Potion"), - INVISIBILITY_POTION(373, 8206, 24020, "Invisibility Potion"), - REGENERATION_POTION2(373, 8225, 24020, "Regeneration Potion"), - SWIFTNESS_POTION2(373, 8226, 24020, "Swiftness Potion2"), - POISON_POTION2(373, 8228, 24020, "Poison Potion2"), - HEALING_POTION2(373, 8229, 24020, "Healing Potion2"), - STRENGTH_POTION2(373, 8233, 24020, "Strength Potion2"), - LEAPING_POTION2(373, 8235, 24020, "Leaping Potion2"), - HARMING_POTION2(373, 8236, 24020, "Harming Potion2"), - REGENERATION_POTION3(373, 8257, 24020, "Regeneration Potion3"), - SWIFTNESS_POTION3(373, 8258, 24020, "Swiftness Potion3"), - FIRE_RESISTANCE_POTION3(373, 8259, 24020, "Fire Resistance potion3"), - POISON_POTION3(373, 8260, 24020, "Poison Potion3"), - NIGHT_VISION_POTION2(373, 8262, 24020, "Night Vision Potion2"), - WEAKNESS_POTION2(373, 8264, 24020, "Weakness Potion2"), - STRENGTH_POTION3(373, 8265, 24020, "Strength Potion3"), - SLOWNESS_POTION2(373, 8266, 24020, "Slowness Potion2"), - LEAPING_POTION3(373, 8267, 24020, "Leaping Potion3"), - WATER_BREATHING_POTION2(373, 8269, 24020, "Water Breathing Potion2"), - INVISIBILITY_POTION2(373, 8270, 24020, "Invisibility Potion2"), - REGENERATION_POTION4(373, 8289, 24020, "Regeneration Potion4"), - SWIFTNESS_POTION4(373, 8290, 24020, "Swiftness Potion4"), - POISON_POTION4(373, 8292, 24020, "Poison Potion4"), - STRENGTH_POTION4(373, 8297, 24020, "Strength Potion4"), - - POTTED_ACACIA_SAPLING(null, null, 14096, "Potted Acacia Sapling"), - POTTED_ALLIUM(null, null, 13184, "Potted Allium"), - POTTED_AZURE_BLUET(null, null, 8754, "Potted Azure Bluet"), - POTTED_BIRCH_SAPLING(null, null, 32484, "Potted Birch Sapling"), - POTTED_BLUE_ORCHID(null, null, 6599, "Potted Blue Orchid"), - POTTED_BROWN_MUSHROOM(null, null, 14481, "Potted Brown Mushroom"), - POTTED_CACTUS(null, null, 8777, "Potted Cactus"), - POTTED_DANDELION(null, null, 9727, "Potted Dandelion"), - POTTED_DARK_OAK_SAPLING(null, null, 6486, "Potted Dark Oak Sapling"), - POTTED_DEAD_BUSH(null, null, 13020, "Potted Dead Bush"), - POTTED_FERN(null, null, 23315, "Potted Fern"), - POTTED_JUNGLE_SAPLING(null, null, 7525, "Potted Jungle Sapling"), - POTTED_OAK_SAPLING(null, null, 11905, "Potted Oak Sapling"), - POTTED_ORANGE_TULIP(null, null, 28807, "Potted Orange Tulip"), - POTTED_OXEYE_DAISY(null, null, 19707, "Potted Oxeye Daisy"), - POTTED_PINK_TULIP(null, null, 10089, "Potted Pink Tulip"), - POTTED_POPPY(null, null, 7457, "Potted Poppy"), - POTTED_RED_MUSHROOM(null, null, 22881, "Potted Red Mushroom"), - POTTED_RED_TULIP(null, null, 28594, "Potted Red Tulip"), - POTTED_SPRUCE_SAPLING(null, null, 29498, "Potted Spruce Sapling"), - POTTED_WHITE_TULIP(null, null, 24330, "Potted White Tulip"), - POWERED_RAIL(27, 0, 11064, "Powered Rail"), - PRISMARINE(168, 0, 7539, "Prismarine"), - PRISMARINE_BRICKS(168, 1, 29118, "Prismarine Bricks"), - PRISMARINE_BRICK_SLAB(null, null, 26672, "Prismarine Brick Slab"), - PRISMARINE_BRICK_STAIRS(null, null, 15445, "Prismarine Brick Stairs"), - PRISMARINE_CRYSTALS(410, 0, 31546, "Prismarine Crystals"), - PRISMARINE_SHARD(409, 0, 10993, "Prismarine Shard"), - PRISMARINE_SLAB(null, null, 31323, "Prismarine Slab"), - PRISMARINE_STAIRS(null, null, 19217, "Prismarine Stairs"), - PUFFERFISH(349, 3, 8115, "Pufferfish"), - PUFFERFISH_BUCKET(null, null, 8861, "Bucket of Pufferfish"), - PUFFERFISH_SPAWN_EGG(null, null, 24573, "Pufferfish Spawn Egg"), - PUMPKIN(86, 0, 19170, "Pumpkin"), - PUMPKIN_PIE(400, 0, 28725, "Pumpkin Pie"), - PUMPKIN_SEEDS(361, 0, 28985, "Pumpkin Seeds"), - PUMPKIN_STEM(104, 0, 19021, "Pumpkin Stem"), - PURPLE_BANNER(425, 5, 29027, "Purple Banner"), - PURPLE_BED(355, 10, 29755, "Purple Bed", "Purple Bed"), - PURPLE_CARPET(171, 10, 5574, "Purple Carpet"), - PURPLE_CONCRETE(251, 10, 20623, "Purple Concrete"), - PURPLE_CONCRETE_POWDER(252, 10, 26808, "Purple Concrete Powder"), - PURPLE_DYE(351, 5, 6347, "Purple Dye"), - PURPLE_GLAZED_TERRACOTTA(245, 0, 4818, "Purple Glazed Terracotta"), - PURPLE_SHULKER_BOX(229, 0, 10373, "Purple Shulker Box"), - PURPLE_STAINED_GLASS(95, 10, 21845, "Purple Stained Glass"), - PURPLE_STAINED_GLASS_PANE(160, 10, 10948, "Purple Stained Glass Pane"), - PURPLE_TERRACOTTA(159, 10, 10387, "Purple Terracotta"), - PURPLE_WALL_BANNER(117, 5, 14298, "Purple Banner"), - PURPLE_WOOL(35, 10, 11922, "Purple Wool"), - PURPUR_BLOCK(201, 0, 7538, "Purpur Block"), - PURPUR_PILLAR(202, 0, 26718, "Purpur Pillar"), - PURPUR_SLAB(205, 0, 11487, "Purpur Slab"), - PURPUR_STAIRS(203, 0, 8921, "Purpur Stairs"), - QUARTZ(406, 0, 23608, "Nether Quartz"), - QUARTZ_BLOCK(155, 0, 11987, "Block of Quartz"), - QUARTZ_PILLAR(155, 2, 16452, "Quartz Pillar"), - QUARTZ_SLAB(44, 7, 4423, "Quartz Slab"), - QUARTZ_STAIRS(156, 0, 24079, "Quartz Stairs"), - RABBIT(411, 0, 23068, "Raw Rabbit"), - RABBIT_FOOT(414, 0, 13864, "Rabbit's Foot"), - RABBIT_HIDE(415, 0, 12467, "Rabbit Hide"), - RABBIT_SPAWN_EGG(383, 101, 26496, "Spawn Rabbit", "Rabbit Spawn Egg"), - RABBIT_STEW(413, 0, 10611, "Rabbit Stew"), - RAIL(66, 0, 13285, "Rail", "RAILS"), - REDSTONE(331, 0, 11233, "Redstone", "Redstone Dust"), - REDSTONE_BLOCK(152, 0, 19496, "Block of Redstone", "REDSTONE_BLOCK"), - REDSTONE_LAMP(123, 0, 8217, "Redstone Lamp", "REDSTONE_LAMP_OFF"), - REDSTONE_ORE(73, 0, 10887, "Redstone Ore"), - REDSTONE_TORCH(76, 0, 22547, "Redstone Torch(on)", "REDSTONE_TORCH_ON"), - REDSTONE_WALL_TORCH(76, 0, 7595, "Redstone Wall Torch"), - REDSTONE_WIRE(55, 0, 25984, "Redstone Dust", "REDSTONE_WIRE"), - RED_BANNER(425, 1, 26961, "Red Banner"), - RED_BED(355, 14, 30910, "Red Bed", "Red Bed"), - RED_CARPET(171, 14, 5424, "Red Carpet"), - RED_CONCRETE(251, 14, 8032, "Red Concrete"), - RED_CONCRETE_POWDER(252, 14, 13286, "Red Concrete Powder"), - RED_GLAZED_TERRACOTTA(249, 0, 24989, "Red Glazed Terracotta"), - RED_MUSHROOM(40, 0, 19728, "Red Mushroom", "RED_MUSHROOM"), - RED_MUSHROOM_BLOCK(100, 0, 20766, "Red Mushroom Block", "HUGE_MUSHROOM_2"), - RED_NETHER_BRICKS(215, 0, 18056, "Red Nether Bricks", "RED_NETHER_BRICK"), - RED_SAND(12, 1, 16279, "Red Sand"), - RED_SANDSTONE(179, 0, 9092, "Red Sandstone"), - RED_SANDSTONE_SLAB(182, 0, 17550, "Red Sandstone Slab", "STONE_SLAB2"), - RED_SANDSTONE_STAIRS(180, 0, 25466, "Red Sandstone Stairs"), - RED_SHULKER_BOX(233, 0, 32448, "Red Shulker Box"), - RED_STAINED_GLASS(95, 14, 9717, "Red Stained Glass"), - RED_STAINED_GLASS_PANE(160, 14, 8630, "Red Stained Glass Pane"), - RED_TERRACOTTA(159, 14, 5086, "Red Terracotta"), - RED_TULIP(38, 4, 16781, "Red Tulip"), - RED_WALL_BANNER(117, 1, 4378, "Red Banner"), - RED_WOOL(35, 14, 11621, "Red Wool"), - REPEATER(356, 0, 28823, "Redstone Repeater", "Diode"), - REPEATING_COMMAND_BLOCK(null, null, 12405, "Repeating Command Block"), - ROSE_BUSH(175, 4, 6080, "Rose Bush"), - ROSE_RED(351, 1, 15694, "Rose Red"), - ROTTEN_FLESH(367, 0, 21591, "Rotten Flesh"), - SADDLE(329, 0, 30206, "Saddle"), - SALMON(349, 1, 18516, "Raw Salmon"), - SALMON_BUCKET(null, null, 31427, "Bucket of Salmon"), - SALMON_SPAWN_EGG(null, null, 18739, "Salmon Spawn Egg"), - SAND(12, 0, 11542, "Sand"), - SANDSTONE(24, 0, 13141, "Sandstone"), - SANDSTONE_SLAB(44, 1, 29830, "Sandstone Slab"), - SANDSTONE_STAIRS(128, 0, 18474, "Sandstone Stairs"), - SCUTE(null, null, 11914, "Scute"), - SEAGRASS(null, null, 23942, "Seagrass"), - SEA_LANTERN(169, 0, 16984, "Sea Lantern"), - SEA_PICKLE(null, null, 19562, "Sea Pickle"), - SHEARS(359, 0, 27971, "Shears"), - SHEEP_SPAWN_EGG(383, 91, 24488, "Spawn Sheep", "Sheep Spawn Egg"), - SHIELD(442, 0, 29943, "Shield"), - SHULKER_BOX(229, 0, 7776, "Shulker Box"), - SHULKER_SHELL(450, 0, 27848, "Shulker Shell"), - SHULKER_SPAWN_EGG(383, 69, 31848, "Spawn Shulker", "Shulker Spawn Egg"), - SIGN(323, 0, 16918, "Sign"), - SILVERFISH_SPAWN_EGG(383, 60, 14537, "Spawn Silverfish", "Silverfish Spawn Egg"), - SKELETON_HORSE_SPAWN_EGG(383, 28, 21356, "Spawn Skeleton Horse", "Skeleton Horse Spawn Egg"), - SKELETON_SKULL(397, 0, 13270, "Mob Head (Skeleton)", "Skeleton Skull"), - SKELETON_SPAWN_EGG(383, 51, 15261, "Spawn Skeleton", "Skeleton Spawn Egg"), - SKELETON_WALL_SKULL(144, 0, 31650, "Skeleton Wall Skull"), - SLIME_BALL(341, 0, 5242, "Slimeball"), - SLIME_BLOCK(165, 0, 31892, "Slime Block"), - SLIME_SPAWN_EGG(383, 55, 6550, "Spawn Slime", "Slime Spawn Egg"), - SMOOTH_QUARTZ(null, null, 14415, "Smooth Quartz"), - SMOOTH_RED_SANDSTONE(179, 2, 25180, "Smooth Red Sandstone"), - SMOOTH_SANDSTONE(24, 2, 30039, "Smooth Sandstone"), - SMOOTH_STONE(null, null, 21910, "Smooth Stone"), - SNOW(78, 0, 14146, "Snow"), - SNOWBALL(332, 0, 19487, "Snowball"), - SNOW_BLOCK(80, 0, 19913, "Snow Block"), - SOUL_SAND(88, 0, 16841, "Soul Sand"), - SPAWNER(52, 90, 7018, "Spawner", "MOB_SPAWNER"), - SPECTRAL_ARROW(439, 0, 4568, "Spectral Arrow"), - SPIDER_EYE(375, 0, 9318, "Spider Eye"), - SPIDER_SPAWN_EGG(383, 52, 14984, "Spawn Spider", "Spider Spawn Egg"), - SPLASH_POTION(438, 0, 30248, "Splash Potion", "SPLASH_POTION"), - SPONGE(19, 0, 15860, "Sponge", "SPONGE"), - SPRUCE_BOAT(444, 0, 9606, "Spruce Boat", "BOAT_SPRUCE"), - SPRUCE_BUTTON(null, null, 23281, "Spruce Button"), - SPRUCE_DOOR(427, 0, 10642, "Spruce Door", "SPRUCE_DOOR_ITEM"), - SPRUCE_FENCE(188, 0, 25416, "Spruce Fence"), - SPRUCE_FENCE_GATE(183, 0, 26423, "Spruce Fence Gate"), - SPRUCE_LEAVES(18, 1, 20039, "Spruce Leaves"), - SPRUCE_LOG(17, 1, 9726, "Spruce Log"), - SPRUCE_PLANKS(5, 1, 14593, "Spruce Wood Plank", "Spruce Planks"), - SPRUCE_PRESSURE_PLATE(null, null, 15932, "Spruce Pressure Plate"), - SPRUCE_SAPLING(6, 1, 19874, "Spruce Sapling"), - SPRUCE_SLAB(126, 1, 4348, "Spruce Slab"), - SPRUCE_STAIRS(134, 0, 11192, "Spruce Wood Stairs", "Spruce Stairs"), - SPRUCE_TRAPDOOR(null, null, 10289, "Spruce Trapdoor"), - SPRUCE_WOOD(null, null, 32328, "Spruce Wood"), - SQUID_SPAWN_EGG(383, 94, 10682, "Spawn Squid", "Squid Spawn Egg"), - STICK(280, 0, 9773, "Stick"), - STICKY_PISTON(29, 0, 18127, "Sticky Piston", "PISTON_STICKY_BASE"), - STONE(1, 0, 22948, "Stone"), - STONE_AXE(275, 0, 6338, "Stone Axe"), - STONE_BRICKS(98, 0, 6962, "Stone Bricks"), - STONE_BRICK_SLAB(44, 5, 19676, "Stone Brick Slab"), - STONE_BRICK_STAIRS(109, 0, 27032, "Stone Brick Stairs", "SMOOTH_STAIRS"), - STONE_BUTTON(77, 0, 12279, "Stone Button"), - STONE_HOE(291, 0, 22855, "Stone Hoe"), - STONE_PICKAXE(274, 0, 14611, "Stone Pickaxe"), - STONE_PRESSURE_PLATE(70, 0, 22591, "Stone Pressure Plate", "STONE_PLATE"), - STONE_SHOVEL(273, 0, 9520, "Stone Shovel", "STONE_SPADE"), - STONE_SLAB(44, 0, 19838, "Stone Slab"), - STONE_SWORD(272, 0, 25084, "Stone Sword"), - STRAY_SPAWN_EGG(383, 6, 30153, "Spawn Stray", "Stray Spawn Egg"), - STRING(287, 0, 12806, "String"), - STRIPPED_ACACIA_LOG(null, null, 18167, "Stripped Acacia Log"), - STRIPPED_ACACIA_WOOD(null, null, 27193, "Stripped Acacia Wood"), - STRIPPED_BIRCH_LOG(null, null, 8838, "Stripped Birch Log"), - STRIPPED_BIRCH_WOOD(null, null, 22350, "Stripped Birch Wood"), - STRIPPED_DARK_OAK_LOG(null, null, 6492, "Stripped Dark Oak Log"), - STRIPPED_DARK_OAK_WOOD(null, null, 16000, "Stripped Dark Oak Wood"), - STRIPPED_JUNGLE_LOG(null, null, 15476, "Stripped Jungle Log"), - STRIPPED_JUNGLE_WOOD(null, null, 30315, "Stripped Jungle Wood"), - STRIPPED_OAK_LOG(null, null, 20523, "Stripped Oak Log"), - STRIPPED_OAK_WOOD(null, null, 31455, "Stripped Oak Wood"), - STRIPPED_SPRUCE_LOG(null, null, 6140, "Stripped Spruce Log"), - STRIPPED_SPRUCE_WOOD(null, null, 6467, "Stripped Spruce Wood"), - STRUCTURE_BLOCK(255, 0, 26831, "Structure Block"), - STRUCTURE_VOID(217, 0, 30806, "Structure Void"), - SUGAR(353, 0, 30638, "Sugar"), - SUGAR_CANE(338, 0, 7726, "Sugar Canes", "Sugar Cane"), - SUNFLOWER(175, 0, 7408, "Sunflower"), - TALL_GRASS(31, 0, 21559, "Tall Grass"), - TALL_SEAGRASS(null, null, 27189, "Tall Seagrass"), - TERRACOTTA(172, 0, 16544, "Terracotta", "HARD_CLAY"), - TIPPED_ARROW(440, 0, 25164, "Tipped Arrow"), - TNT(46, 0, 7896, "TNT", "TNT"), - TNT_MINECART(407, 0, 4277, "Minecart with TNT", "explosiveminecart"), - TORCH(50, 0, 6063, "Torch"), - TOTEM_OF_UNDYING(449, 0, 10139, "Totem Of Undying"), - TRAPPED_CHEST(146, 0, 18970, "Trapped Chest"), - TRIDENT(null, null, 7534, "Trident"), - TRIPWIRE(132, 0, 8810, "Tripwire"), - TRIPWIRE_HOOK(131, 0, 8130, "Tripwire Hook"), - TROPICAL_FISH(349, 2, 24879, "Tropical Fish"), - TROPICAL_FISH_BUCKET(null, null, 29995, "Bucket of Tropical Fish"), - TROPICAL_FISH_SPAWN_EGG(null, null, 19713, "Tropical Fish Spawn Egg"), - TUBE_CORAL(null, null, 23048, "Tube Coral"), - TUBE_CORAL_BLOCK(null, null, 23723, "Tube Coral Block"), - TUBE_CORAL_FAN(null, null, 19929, "Tube Coral Fan"), - TUBE_CORAL_WALL_FAN(null, null, 25282, "Tube Coral Wall Fan"), - TURTLE_EGG(null, null, 32101, "Turtle Egg"), - TURTLE_HELMET(null, null, 30120, "Turtle Shell"), - TURTLE_SPAWN_EGG(null, null, 17324, "Turtle Spawn Egg"), - VEX_SPAWN_EGG(383, 35, 27751, "Spawn Vex", "Vex Spawn Egg"), - VILLAGER_SPAWN_EGG(383, 120, 30348, "Spawn Villager", "Villager Spawn Egg"), - VINDICATOR_SPAWN_EGG(383, 36, 25324, "Spawn Vindicator", "Vindicator Spawn Egg"), - VINE(106, 0, 14564, "Vines", "VINE"), - VOID_AIR(null, null, 13668, "Void Air"), - WALL_SIGN(68, 0, 10644, "Wall Sign"), - WALL_TORCH(50, 0, 25890, "Wall Torch"), - WATER(8, 0, 24998, "Flowing Water"), - WATER_BUCKET(326, 0, 8802, "Water Bucket"), - WET_SPONGE(19, 1, 9043, "Wet Sponge"), - WHEAT(296, 0, 27709, "Wheat"), - WHEAT_SEEDS(295, 0, 28742, "Wheat Seeds", "SEEDS"), - WHITE_BANNER(425, 15, 17562, "White Banner"), - WHITE_BED(355, 0, 8185, "White Bed", "Bed"), - WHITE_CARPET(171, 0, 15117, "White Carpet"), - WHITE_CONCRETE(251, 0, 6281, "White Concrete"), - WHITE_CONCRETE_POWDER(252, 0, 10363, "White Concrete Powder"), - WHITE_GLAZED_TERRACOTTA(235, 0, 11326, "White Glazed Terracotta"), - WHITE_SHULKER_BOX(219, 0, 31750, "White Shulker Box"), - WHITE_STAINED_GLASS(95, 0, 31190, "White Stained Glass"), - WHITE_STAINED_GLASS_PANE(160, 0, 10557, "White Stained Glass Pane"), - WHITE_TERRACOTTA(159, 0, 20975, "White Terracotta"), - WHITE_TULIP(38, 6, 9742, "White Tulip"), - WHITE_WALL_BANNER(425, 15, 15967, "White Banner"), - WHITE_WOOL(35, 0, 8624, "White Wool", "Wool"), - WITCH_SPAWN_EGG(383, 66, 11837, "Spawn Witch", "Witch Spawn Egg"), - WITHER_SKELETON_SKULL(397, 1, 31487, "Mob Head (Wither Skeleton)", "Wither Skeleton Skull"), - WITHER_SKELETON_SPAWN_EGG(383, 5, 10073, "Spawn Wither Skeleton", "Wither Skeleton Spawn Egg"), - WITHER_SKELETON_WALL_SKULL(144, 1, 9326, "Wither Skeleton Wall Skull"), - WOLF_SPAWN_EGG(383, 95, 21692, "Spawn Wolf", "Wolf Spawn Egg"), - WOODEN_AXE(271, 0, 6292, "Wooden Axe", "Wood Axe"), - WOODEN_HOE(290, 0, 16043, "Wooden Hoe", "Wood Hoe"), - WOODEN_PICKAXE(270, 0, 12792, "Wooden Pickaxe", "WOOD_PICKAXE"), - WOODEN_SHOVEL(269, 0, 28432, "Wooden Shovel", "WOOD_SPADE"), - WOODEN_SWORD(268, 0, 7175, "Wooden Sword", "WOOD_SWORD"), - WRITABLE_BOOK(386, 0, 13393, "Book and Quill"), - WRITTEN_BOOK(387, 0, 24164, "Written Book"), - YELLOW_BANNER(425, 11, 30382, "Yellow Banner"), - YELLOW_BED(355, 4, 30410, "Yellow Bed"), - YELLOW_CARPET(171, 4, 18149, "Yellow Carpet"), - YELLOW_CONCRETE(251, 4, 15722, "Yellow Concrete"), - YELLOW_CONCRETE_POWDER(252, 4, 10655, "Yellow Concrete Powder"), - YELLOW_GLAZED_TERRACOTTA(239, 0, 10914, "Yellow Glazed Terracotta"), - YELLOW_SHULKER_BOX(223, 0, 28700, "Yellow Shulker Box"), - YELLOW_STAINED_GLASS(95, 4, 12182, "Yellow Stained Glass"), - YELLOW_STAINED_GLASS_PANE(160, 4, 20298, "Yellow Stained Glass Pane"), - YELLOW_TERRACOTTA(159, 4, 32129, "Yellow Terracotta"), - YELLOW_WALL_BANNER(425, 11, 32004, "Yellow Banner"), - YELLOW_WOOL(35, 4, 29507, "Yellow Wool"), - ZOMBIE_HEAD(397, 2, 9304, "Mob Head (Zombie)", "Zombie Head"), - ZOMBIE_HORSE_SPAWN_EGG(383, 29, 4275, "Spawn Zombie Horse", "Zombie Horse Spawn Egg"), - ZOMBIE_PIGMAN_SPAWN_EGG(383, 57, 11531, "Spawn Zombie Pigman", "Zombie Pigman Spawn Egg"), - ZOMBIE_SPAWN_EGG(383, 54, 5814, "Spawn Zombie", "Zombie Spawn Egg"), - ZOMBIE_VILLAGER_SPAWN_EGG(383, 27, 10311, "Spawn Zombie Villager", "Zombie Villager Spawn Egg"), - ZOMBIE_WALL_HEAD(144, 2, 16296, "Zombie Wall Head"), - - //1.14 - ACACIA_SIGN(null, null, 29808, "Acacia Sign"), - ACACIA_WALL_SIGN(null, null, 20316, "Acacia Wall Sign"), - ANDESITE_SLAB(null, null, 32124, "Andesite Slab"), - ANDESITE_STAIRS(null, null, 17747, "Andesite Stairs"), - ANDESITE_WALL(null, null, 14938, "Andesite Wall"), - BAMBOO(null, null, 18728, "Bamboo"), - BAMBOO_SAPLING(null, null, 8478, "Bamboo Sapling"), - BARREL(null, null, 22396, "Barrel"), - BELL(null, null, 20000, "Bell"), - BIRCH_SIGN(null, null, 11351, "Birch Sign"), - BIRCH_WALL_SIGN(null, null, 9887, "Birch Wall Sign"), - BLACK_DYE(null, null, 6202, "Black Dye"), - BLAST_FURNACE(null, null, 31157, "Blast Furnace"), - BLUE_DYE(null, null, 11588, "Blue Dye"), - BRICK_WALL(null, null, 18995, "Brick Wall"), - BROWN_DYE(null, null, 7648, "Brown Dye"), - CAMPFIRE(null, null, 8488, "Campfire"), - CARTOGRAPHY_TABLE(null, null, 28529, "Cartography Table"), - CAT_SPAWN_EGG(null, null, 29583, "Cat Spawn Egg"), - CORNFLOWER(null, null, 15405, "Cornflower"), - CREEPER_BANNER_PATTERN(null, null, 15774, "Banner Pattern"), - CROSSBOW(null, null, 4340, "Crossbow"), - CUT_RED_SANDSTONE_SLAB(null, null, -11, "Cut Red Sandstone Slab"), - CUT_SANDSTONE_SLAB(null, null, -10, "Cut Sandstone Slab"), - DARK_OAK_SIGN(null, null, 15127, "Dark Oak Sign"), - DARK_OAK_WALL_SIGN(null, null, 9508, "Dark Oak Wall Sign"), - DIORITE_SLAB(null, null, 10715, "Diorite Slab"), - DIORITE_STAIRS(null, null, 13134, "Diorite Stairs"), - DIORITE_WALL(null, null, 17412, "Diorite Wall"), - END_STONE_BRICK_SLAB(null, null, 23239, "End Stone Brick Slab"), - END_STONE_BRICK_STAIRS(null, null, 28831, "End Stone Brick Stairs"), - END_STONE_BRICK_WALL(null, null, 27225, "End Stone Brick Wall"), - FLETCHING_TABLE(null, null, 30838, "Fletching Table"), - FLOWER_BANNER_PATTERN(null, null, 5762, "Banner Pattern"), - FOX_SPAWN_EGG(null, null, -1, "Fox Spawn Egg"), - GLOBE_BANNER_PATTERN(null, null, -99, "Banner Pattern"), - GRANITE_SLAB(null, null, 25898, "Granite Slab"), - GRANITE_STAIRS(null, null, 21840, "Granite Stairs"), - GRANITE_WALL(null, null, 23279, "Granite Wall"), - GREEN_DYE(null, null, 23215, "Green Dye"), - GRINDSTONE(null, null, 26260, "Grindstone"), - JIGSAW(null, null, 17398, "Jigsaw Block"), - JUNGLE_SIGN(null, null, 24717, "Jungle Sign"), - JUNGLE_WALL_SIGN(null, null, 29629, "Jungle Wall Sign"), - LANTERN(null, null, 5992, "Lantern"), - LEATHER_HORSE_ARMOR(null, null, -2, "Leather Horse Armor"), - LECTERN(null, null, 23490, "Lectern"), - LILY_OF_THE_VALLEY(null, null, 7185, "Lily of the Valley"), - LOOM(null, null, 14276, "Loom"), - MOJANG_BANNER_PATTERN(null, null, 11903, "Banner Pattern"), - MOSSY_COBBLESTONE_SLAB(null, null, 12139, "Mossy Cobblestone Slab"), - MOSSY_COBBLESTONE_STAIRS(null, null, 29210, "Mossy Cobblestone Stairs"), - MOSSY_STONE_BRICK_SLAB(null, null, 14002, "Mossy Stone Brick Slab"), - MOSSY_STONE_BRICK_STAIRS(null, null, 27578, "Mossy Stone Brick Stairs"), - MOSSY_STONE_BRICK_WALL(null, null, 18259, "Mossy Stone Brick Wall"), - NETHER_BRICK_WALL(null, null, 10398, "Nether Brick Wall"), - OAK_SIGN(null, null, 8192, "Oak Sign"), - OAK_WALL_SIGN(null, null, 12984, "Oak Wall Sign"), - PANDA_SPAWN_EGG(null, null, 23759, "Panda Spawn Egg"), - PILLAGER_SPAWN_EGG(null, null, 28659, "Pillager Spawn Egg"), - POLISHED_ANDESITE_STAIRS(null, null, 7573, "Polished Andesite Stairs"), - POLISHED_ANDESITE_SLAB(null, null, 0, "Polished Andesite Slab"), - POLISHED_DIORITE_SLAB(null, null, 18303, "Polished Diorite Slab"), - POLISHED_DIORITE_STAIRS(null, null, 4625, "Polished Diorite Stairs"), - POLISHED_GRANITE_SLAB(null, null, 4521, "Polished Granite Slab"), - POLISHED_GRANITE_STAIRS(null, null, 29588, "Polished Granite Stairs"), - POTTED_BAMBOO(null, null, 22542, "Potted Bamboo"), - POTTED_CORNFLOWER(null, null, 28917, "Potted CornFlower"), - POTTED_LILY_OF_THE_VALLEY(null, null, 9364, "Potted Lily Of The Valley"), - POTTED_WITHER_ROSE(null, null, 26876, "Potted Wither Rose"), - PRISMARINE_WALL(null, null, 18184, "Prismarine Wall"), - RAVAGER_SPAWN_EGG(null, null, 31284, "Ravager Spawn Egg"), - RED_DYE(null, null, 5728, "Red Dye"), - RED_NETHER_BRICK_SLAB(null, null, 12462, "Red Nether Brick Slab"), - RED_NETHER_BRICK_STAIRS(null, null, 26374, "Red Nether Brick Stairs"), - RED_NETHER_BRICK_WALL(null, null, 4580, "Red Nether Brick Wall"), - RED_SANDSTONE_WALL(null, null, 4753, "Red Sandstone Wall"), - SANDSTONE_WALL(null, null, 18470, "Sandstone Wall"), - SCAFFOLDING(null, null, 15757, "Scaffolding"), - SKULL_BANNER_PATTERN(null, null, 7680, "Banner Pattern"), - SMITHING_TABLE(null, null, 9082, "Smithing Table"), - SMOKER(null, null, 24781, "Smoker"), - SMOOTH_QUARTZ_SLAB(null, null, 26543, "Smooth Quartz Slab"), - SMOOTH_QUARTZ_STAIRS(null, null, 19560, "Smooth Quartz Stairs"), - SMOOTH_RED_SANDSTONE_SLAB(null, null, 16304, "Smooth Red Sandstone Slab"), - SMOOTH_RED_SANDSTONE_STAIRS(null, null, 17561, "Smooth Red Sandstone Stairs"), - SMOOTH_SANDSTONE_SLAB(null, null, 9030, "Smooth Sandstone Slab"), - SMOOTH_SANDSTONE_STAIRS(null, null, 21183, "Smooth Sandstone Stairs"), - SMOOTH_STONE_SLAB(null, null, 24129, "Smooth Stone Slab"), - SPRUCE_SIGN(null, null, 21502, "Spruce Sign"), - SPRUCE_WALL_SIGN(null, null, 7352, "Spruce Wall Sign"), - STONECUTTER(null, null, 25170, "Stonecutter"), - STONE_BRICK_WALL(null, null, 29073, "Stone Brick Wall"), - STONE_STAIRS(null, null, 23784, "Stone Stairs"), - SUSPICIOUS_STEW(null, null, 8173, "Suspicious Stew"), - SWEET_BERRIES(null, null, 19747, "Sweet Berries"), - SWEET_BERRY_BUSH(null, null, 11958, "Sweet Berry Bush"), - TRADER_LLAMA_SPAWN_EGG(null, null, 13512, "Trader Llama Spawn Egg"), - WANDERING_TRADER_SPAWN_EGG(null, null, 12312, "Wandering Trader Spawn Egg"), - WHITE_DYE(null, null, 10758, "White Dye"), - WITHER_ROSE(null, null, 8619, "Wither Rose"), - YELLOW_DYE(null, null, 5952, "Yellow Dye"), - COMPOSTER(null, null, -4, "Composter"), - - // Legacy - LEGACY_STATIONARY_WATER(9, 0, null, "Stationary Water"), - LEGACY_STATIONARY_LAVA(11, 0, null, "Stationary Lava"), - LEGACY_BURNING_FURNACE(62, 0, null, "Burning Furnace"), - LEGACY_NETHER_WARTS(115, 0, null, "Nether Warts"), - LEGACY_IRON_DOOR_BLOCK(71, 0, null, "Iron Door Block"), - LEGACY_GLOWING_REDSTONE_ORE(74, 0, null, "Glowing Redstone Ore"), - LEGACY_SUGAR_CANE_BLOCK(83, 0, null, "Sugar Cane Block"), - LEGACY_RAW_FISH(349, 0, null, "Raw Fish"), - LEGACY_SKULL(144, 0, null, "Skull"), - LEGACY_SIGN_POST(63, 0, null, "Sign Post"), - LEGACY_BED_BLOCK(26, 0, null, "Bed Block"), - LEGACY_REDSTONE_TORCH_OFF(75, 0, null, "Redstone Torch Off"), - LEGACY_REDSTONE_TORCH_ON(76, 0, null, "Redstone Torch On"), - LEGACY_CAKE_BLOCK(92, 0, null, "Cake Block"), - LEGACY_DIODE_BLOCK_OFF(93, 0, null, "Diode Block Off"), - LEGACY_DIODE_BLOCK_ON(94, 0, null, "Diode Block On"), -// LEGACY_BREWING_STAND(117, null, null, "LEGACY_BREWING_STAND", ""), -// LEGACY_CAULDRON(118, 0, null, "LEGACY_CAULDRON", ""), -// LEGACY_REDSTONE_LAMP_ON(124, null, null, "LEGACY_REDSTONE_LAMP_ON", ""), -// LEGACY_WOOD_DOUBLE_STEP(125, null, null, "LEGACY_WOOD_DOUBLE_STEP", ""), -// LEGACY_FLOWER_POT(140, null, null, "LEGACY_FLOWER_POT", ""), - LEGACY_REDSTONE_COMPARATOR_OFF(149, 0, null, "Redstone Comparator Off", ""), - LEGACY_REDSTONE_COMPARATOR_ON(150, 0, null, "Redstone Comparator On", ""), -// LEGACY_STANDING_BANNER(176, null, null, "LEGACY_STANDING_BANNER", ""), -// LEGACY_WALL_BANNER(177, null, null, "LEGACY_WALL_BANNER", ""), -// LEGACY_DAYLIGHT_DETECTOR_INVERTED(178, null, null, "LEGACY_DAYLIGHT_DETECTOR_INVERTED", ""), -// LEGACY_DOUBLE_STONE_SLAB2(181, null, null, "LEGACY_DOUBLE_STONE_SLAB2", ""), - LEGACY_WOODEN_DOOR_BLOCK(64, 0, null, "Wooden Door Block"), - LEGACY_SPRUCE_DOOR(193, 0, null, "Spruce Door Block"), - LEGACY_BIRCH_DOOR(194, 0, null, "Birch Door Block"), - LEGACY_JUNGLE_DOOR(195, 0, null, "Jungle Door Block"), - LEGACY_ACACIA_DOOR(196, 0, null, "Acacia Door Block"), - LEGACY_DARK_OAK_DOOR(197, 0, null, "Dark Oak Door Block"), -// LEGACY_PURPUR_DOUBLE_SLAB(204, null, null, "LEGACY_PURPUR_DOUBLE_SLAB", ""), -// LEGACY_COMMAND_REPEATING(210, null, null, "LEGACY_COMMAND_REPEATING", ""), -// LEGACY_COMMAND_CHAIN(211, null, null, "LEGACY_COMMAND_CHAIN", ""), - LEGACY_WHEAT(59, 0, null, "Wheat Block"); - - private Integer legacyId; - private Integer legacyData; - private Integer id; - private String name; - private String legacyName; - private String bukkitName; - private String mojangName; - Material mat; - - CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name) { - this(legacyId, legacyData, id, name, null); - } - - CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name, String legacyName) { - this.legacyId = legacyId; - this.legacyData = legacyData; - this.id = id; - this.name = name; - this.legacyName = legacyName; - } - - public String getName() { - return name; - } - - @Deprecated - public Integer getLegacyId() { - return this.legacyId == null ? 0 : this.legacyId; - } - - @Deprecated - public Integer getId() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - return this.id == null ? 0 : this.id; - } - return getLegacyId(); - } - - public Material getMaterial() { - return mat == null ? null : mat; - } - - public void updateMaterial() { - if (mat == null) { - for (Material one : Material.class.getEnumConstants()) { - if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.name().replace("_", ""))) - continue; - mat = one; - break; - } - } - if (mat == null) { - for (Material one : Material.class.getEnumConstants()) { - if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.getName().replace(" ", ""))) - continue; - mat = one; - break; - } - } - if (mat == null && !this.getLegacyName().isEmpty()) { - for (Material one : Material.class.getEnumConstants()) { - if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.getLegacyName().replace(" ", "").replace("_", ""))) - continue; - mat = one; - break; - } - } - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { - if (mat == null && this.getId() != null) { - for (Material one : Material.class.getEnumConstants()) { - if (one.getId() != this.getId()) - continue; - mat = one; - break; - } - } - } - } - - public ItemStack newItemStack() { - return newItemStack(1); - } - - public ItemStack newItemStack(int amount) { - if (mat == null) { - updateMaterial(); - } - if (mat == null) { - return new ItemStack(Material.STONE); - } - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat); - stack.setAmount(amount); - return stack; - } - ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat, 1, (short) this.getLegacyData()); - stack.setAmount(amount); - return stack; - } - - @Deprecated - public short getData() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - return 0; - } - return getLegacyData(); - } - - @Deprecated - public short getLegacyData() { - return legacyData == null ? 0 : legacyData.shortValue(); - } - - public static CMIMaterial getRandom(CMIMaterial mat) { - - List ls = new ArrayList(); - - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getLegacyId() == null) - continue; - if (one.getLegacyId() != mat.getLegacyId()) - continue; - ls.add(one); - } - - if (ls.isEmpty() || ls.size() == 1) { - String part = mat.name; - if (part.contains("_")) - part = part.split("_")[part.split("[_]").length - 1]; - for (CMIMaterial one : CMIMaterial.values()) { - if (!one.name().endsWith(part)) - continue; - ls.add(one); - } - } - - Collections.shuffle(ls); - - return ls.isEmpty() ? CMIMaterial.NONE : ls.get(0); - } - - public CMIMaterial getByColorId(int id) { - return getByColorId(this, id); - } - - public static CMIMaterial getByColorId(CMIMaterial mat, int id) { - if (mat == null) - return CMIMaterial.NONE; - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getLegacyId() == null) - continue; - if (one.getLegacyId() != mat.getLegacyId()) - continue; - if (one.getLegacyData() == id) - return one; - } - - return mat; - } - - public static CMIMaterial get(String id) { - if (id == null) - return CMIMaterial.NONE; - Integer ids = null; - Integer data = null; - id = id.replace("_", "").replace(" ", "").replace("minecraft:", "").toLowerCase(); - - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { - try { - ids = Integer.parseInt(id); - } catch (Exception e) { - if (id.contains(":")) { - try { - ids = Integer.parseInt(id.split(":")[0]); - data = Integer.parseInt(id.split(":")[1]); - return get(ids, data); - } catch (Exception ex) { - } - - try { - data = Integer.parseInt(id.split(":")[1]); - id = id.split(":")[0]; - } catch (Exception ex) { - } - } - } - } - - CMIMaterial mat = null; - - CMIItemStack ci = byBukkitName.get(id); - if (ci != null) - mat = ci.getCMIType(); - if (mat != null) { - if (data != null) { - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getLegacyId() == mat.getLegacyId()) { - if (one.getLegacyData() == data) { - mat = one; - break; - } - } - } - } - return mat; - } - - ci = byMojangName.get(id); - if (ci != null) - mat = ci.getCMIType(); - - if (mat != null) { - if (data != null) { - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getLegacyId() == mat.getLegacyId()) { - if (one.getLegacyData() == data) { - mat = one; - break; - } - } - } - } - return mat; - } - - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { - if (ids != null) { - if (data == null) - mat = get(ids); - else - mat = get(ids, data); - } - } - - if (mat != null) - return mat; - - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { - if (ids != null) { - for (CMIMaterial one : CMIMaterial.values()) { - if (data == null && one.getId() == ids) - return one; - if (data != null && one.getId() == ids && one.getLegacyData() == data) - return one; - } - } - } - - id = id.replace("_", "").toLowerCase(); - for (CMIMaterial one : CMIMaterial.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(id)) - return one; - if (one.getName().replace("_", "").replace(" ", "").equalsIgnoreCase(id)) - return one; - } - return CMIMaterial.NONE; - } - - public static CMIMaterial get(Material mat) { - if (mat == null) - return CMIMaterial.NONE; - - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getMaterial() == null) - continue; - if (one.getMaterial().getId() == mat.getId()) { - return one; - } - } - } else { - CMIMaterial m = byRealMaterial.get(mat); - if (m != null) - return m; - } - return CMIMaterial.NONE; - } - - public static CMIMaterial get(int id) { - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getMaterial() == null) - continue; - if (one.getId() == id) { - return one; - } - } - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getLegacyId() == id) { - return one; - } - } - return CMIMaterial.NONE; - } - - public static CMIMaterial get(ItemStack item) { - if (item == null) - return CMIMaterial.NONE; -// if (CMIMaterial.isMonsterEgg(item.getType())) { -// int tid = CMI.getInstance().getNMS().getEggId(item); -// return get(item.getType().getId(), tid); -// } - CMIMaterial m = null; - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { - m = Version.isCurrentEqualOrHigher(Version.v1_13_R1) ? get(item.getType().getId()) : get(item.getType().getId(), item.getData().getData()); - - if (m == null) { - CMIItemStack cm = byBukkitName.get(item.getType().toString().toLowerCase().replace("_", "")); - if (cm != null) - m = cm.getCMIType(); - } - } else { - m = byRealMaterial.get(item.getType()); - } - - return m == null ? CMIMaterial.NONE : m; - } - - public static CMIMaterial get(Block block) { - if (block == null) - return CMIMaterial.NONE; - byte data = block.getData(); - if (block.getState() instanceof Skull) { - Skull skull = (Skull) block.getState(); - data = (byte) skull.getSkullType().ordinal(); - } - - CMIMaterial m = null; - - if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { - m = byRealMaterial.get(block.getType()); - } - - if (m == null) { - CMIItemStack cm = byBukkitName.get(block.getType().toString().replace("_", "").toLowerCase()); - if (cm != null) - m = cm.getCMIType(); - } - if (m == null) { - CMIItemStack cm = byBukkitName.get(block.getType().name().toString().replace("_", "").toLowerCase()); - if (cm != null) - m = cm.getCMIType(); - } - if (m == null && Version.isCurrentEqualOrLower(Version.v1_13_R2)) { - m = get(block.getType().getId(), Version.isCurrentEqualOrHigher(Version.v1_13_R1) ? 0 : data); - } - return m == null ? CMIMaterial.NONE : m; - } - - public static CMIMaterial get(int id, int data) { - CMIMaterial mat = null; - - CMIItemStack cm = byBukkitName.get(id + ":" + data); - if (cm != null) - mat = cm.getCMIType(); - cm = byId.get(id); - if (cm != null) - mat = cm.getCMIType(); - - if (mat == null) { - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getId() == id) { - mat = one; - break; - } - } - } - if (mat != null) { - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getLegacyId() == mat.getLegacyId()) { - if (one.getLegacyData() == data) { - mat = one; - break; - } - } - } - } - return mat == null ? CMIMaterial.NONE : mat; - } - - public static CMIMaterial getLegacy(int id) { - CMIItemStack cm = byId.get(id); - if (cm != null) - return cm.getCMIType(); - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getLegacyId() == id) { - return one; - } - } - return CMIMaterial.NONE; - } - - public short getMaxDurability() { - return this.getMaterial() == null ? 0 : this.getMaterial().getMaxDurability(); - } - - public boolean isBlock() { - return this.getMaterial() == null ? false : this.getMaterial().isBlock(); - } - - public boolean isEquipment() { - return getMaxDurability() > 16; - } - - public boolean isSolid() { - return this.getMaterial() == null ? false : this.getMaterial().isSolid(); - } - - public static boolean isMonsterEgg(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isMonsterEgg(); - } - - public boolean isMonsterEgg() { - switch (this) { - case ELDER_GUARDIAN_SPAWN_EGG: - case WITHER_SKELETON_SPAWN_EGG: - case STRAY_SPAWN_EGG: - case HUSK_SPAWN_EGG: - case ZOMBIE_VILLAGER_SPAWN_EGG: - case SKELETON_HORSE_SPAWN_EGG: - case ZOMBIE_HORSE_SPAWN_EGG: - case DONKEY_SPAWN_EGG: - case MULE_SPAWN_EGG: - case EVOKER_SPAWN_EGG: - case VEX_SPAWN_EGG: - case VINDICATOR_SPAWN_EGG: - case CREEPER_SPAWN_EGG: - case SKELETON_SPAWN_EGG: - case SPIDER_SPAWN_EGG: - case ZOMBIE_SPAWN_EGG: - case SLIME_SPAWN_EGG: - case GHAST_SPAWN_EGG: - case ZOMBIE_PIGMAN_SPAWN_EGG: - case ENDERMAN_SPAWN_EGG: - case CAVE_SPIDER_SPAWN_EGG: - case SILVERFISH_SPAWN_EGG: - case BLAZE_SPAWN_EGG: - case MAGMA_CUBE_SPAWN_EGG: - case BAT_SPAWN_EGG: - case WITCH_SPAWN_EGG: - case ENDERMITE_SPAWN_EGG: - case GUARDIAN_SPAWN_EGG: - case SHULKER_SPAWN_EGG: - case PIG_SPAWN_EGG: - case SHEEP_SPAWN_EGG: - case COW_SPAWN_EGG: - case CHICKEN_SPAWN_EGG: - case SQUID_SPAWN_EGG: - case WOLF_SPAWN_EGG: - case MOOSHROOM_SPAWN_EGG: - case OCELOT_SPAWN_EGG: - case HORSE_SPAWN_EGG: - case RABBIT_SPAWN_EGG: - case POLAR_BEAR_SPAWN_EGG: - case LLAMA_SPAWN_EGG: - case PARROT_SPAWN_EGG: - case VILLAGER_SPAWN_EGG: - case COD_SPAWN_EGG: - case DOLPHIN_SPAWN_EGG: - case DRAGON_EGG: - case DROWNED_SPAWN_EGG: - case PHANTOM_SPAWN_EGG: - case PUFFERFISH_SPAWN_EGG: - case SALMON_SPAWN_EGG: - case TROPICAL_FISH_SPAWN_EGG: - case TURTLE_EGG: - case TURTLE_SPAWN_EGG: - - case CAT_SPAWN_EGG: - case FOX_SPAWN_EGG: - case PANDA_SPAWN_EGG: - case PILLAGER_SPAWN_EGG: - case RAVAGER_SPAWN_EGG: - case TRADER_LLAMA_SPAWN_EGG: - case WANDERING_TRADER_SPAWN_EGG: - return true; - default: - break; - } - return false; - } - - public static boolean isBed(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isBed(); - } - - public boolean isBed() { - switch (this) { - case WHITE_BED: - case ORANGE_BED: - case MAGENTA_BED: - case LIGHT_BLUE_BED: - case YELLOW_BED: - case LIME_BED: - case PINK_BED: - case GRAY_BED: - case LIGHT_GRAY_BED: - case CYAN_BED: - case PURPLE_BED: - case BLUE_BED: - case BROWN_BED: - case GREEN_BED: - case RED_BED: - case BLACK_BED: - return true; - default: - break; - } - return false; - } - - public static boolean isStairs(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isStairs(); - } - - public boolean isStairs() { - switch (this) { - case ACACIA_STAIRS: - case BIRCH_STAIRS: - case BRICK_STAIRS: - case COBBLESTONE_STAIRS: - case DARK_OAK_STAIRS: - case DARK_PRISMARINE_STAIRS: - case JUNGLE_STAIRS: - case NETHER_BRICK_STAIRS: - case OAK_STAIRS: - case PRISMARINE_BRICK_STAIRS: - case PRISMARINE_STAIRS: - case PURPUR_STAIRS: - case QUARTZ_STAIRS: - case RED_SANDSTONE_STAIRS: - case SANDSTONE_STAIRS: - case SPRUCE_STAIRS: - case STONE_BRICK_STAIRS: - - case ANDESITE_STAIRS: - case DIORITE_STAIRS: - case END_STONE_BRICK_STAIRS: - case GRANITE_STAIRS: - case MOSSY_COBBLESTONE_STAIRS: - case MOSSY_STONE_BRICK_STAIRS: - case POLISHED_ANDESITE_STAIRS: - case POLISHED_DIORITE_STAIRS: - case POLISHED_GRANITE_STAIRS: - case RED_NETHER_BRICK_STAIRS: - case SMOOTH_QUARTZ_STAIRS: - case SMOOTH_RED_SANDSTONE_STAIRS: - case SMOOTH_SANDSTONE_STAIRS: - case STONE_STAIRS: - return true; - default: - break; - } - return false; - } - - public static boolean isPotion(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isPotion(); - } - - public boolean isPotion() { - switch (this) { - case POTION: - case LINGERING_POTION: - case SPLASH_POTION: - - case AWKWARD_POTION: - case THICK_POTION: - case MUNDANE_POTION: - case REGENERATION_POTION: - case SWIFTNESS_POTION: - case FIRE_RESISTANCE_POTION: - case POISON_POTION: - case HEALING_POTION: - case NIGHT_VISION_POTION: - case WEAKNESS_POTION: - case STRENGTH_POTION: - case SLOWNESS_POTION: - case HARMING_POTION: - case WATER_BREATHING_POTION: - case INVISIBILITY_POTION: - case REGENERATION_POTION2: - case SWIFTNESS_POTION2: - case POISON_POTION2: - case HEALING_POTION2: - case STRENGTH_POTION2: - case LEAPING_POTION2: - case HARMING_POTION2: - case REGENERATION_POTION3: - case SWIFTNESS_POTION3: - case FIRE_RESISTANCE_POTION3: - case POISON_POTION3: - case NIGHT_VISION_POTION2: - case WEAKNESS_POTION2: - case STRENGTH_POTION3: - case SLOWNESS_POTION2: - case LEAPING_POTION3: - case WATER_BREATHING_POTION2: - case INVISIBILITY_POTION2: - case REGENERATION_POTION4: - case SWIFTNESS_POTION4: - case POISON_POTION4: - case STRENGTH_POTION4: - return true; - default: - break; - } - return false; - } - - public static boolean isBoat(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isBoat(); - } - - public boolean isBoat() { - switch (this) { - case OAK_BOAT: - case ACACIA_BOAT: - case BIRCH_BOAT: - case DARK_OAK_BOAT: - case JUNGLE_BOAT: - case SPRUCE_BOAT: - return true; - default: - break; - } - return false; - } - - public static boolean isSapling(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isSapling(); - } - - public boolean isSapling() { - switch (this) { - case OAK_SAPLING: - case SPRUCE_SAPLING: - case BIRCH_SAPLING: - case JUNGLE_SAPLING: - case ACACIA_SAPLING: - case DARK_OAK_SAPLING: - return true; - default: - break; - } - return false; - } - - public static boolean isButton(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isButton(); - } - - public boolean isButton() { - switch (this) { - case ACACIA_BUTTON: - case BIRCH_BUTTON: - case DARK_OAK_BUTTON: - case JUNGLE_BUTTON: - case OAK_BUTTON: - case SPRUCE_BUTTON: - case STONE_BUTTON: - return true; - default: - break; - } - return false; - } - - public static boolean isWater(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isWater(); - } - - public boolean isWater() { - switch (this) { - case WATER: - case LEGACY_STATIONARY_WATER: - return true; - default: - break; - } - return false; - } - - public static boolean isLava(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isLava(); - } - - public boolean isLava() { - switch (this) { - case LAVA: - case LEGACY_STATIONARY_LAVA: - return true; - default: - break; - } - return false; - } - - public static boolean isPlate(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isPlate(); - } - - public boolean isPlate() { - switch (this) { - case ACACIA_PRESSURE_PLATE: - case BIRCH_PRESSURE_PLATE: - case DARK_OAK_PRESSURE_PLATE: - case HEAVY_WEIGHTED_PRESSURE_PLATE: - case JUNGLE_PRESSURE_PLATE: - case LIGHT_WEIGHTED_PRESSURE_PLATE: - case OAK_PRESSURE_PLATE: - case SPRUCE_PRESSURE_PLATE: - case STONE_PRESSURE_PLATE: - return true; - default: - break; - } - return false; - } - - public static boolean isWool(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isWool(); - } - - public boolean isWool() { - switch (this) { - case BLACK_WOOL: - case BLUE_WOOL: - case BROWN_WOOL: - case CYAN_WOOL: - case GRAY_WOOL: - case GREEN_WOOL: - case LIGHT_BLUE_WOOL: - case LIGHT_GRAY_WOOL: - case LIME_WOOL: - case MAGENTA_WOOL: - case ORANGE_WOOL: - case PINK_WOOL: - case PURPLE_WOOL: - case RED_WOOL: - case WHITE_WOOL: - case YELLOW_WOOL: - return true; - default: - break; - } - return false; - } - - public static boolean isCarpet(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isCarpet(); - } - - public boolean isCarpet() { - switch (this) { - case BLACK_CARPET: - case BLUE_CARPET: - case BROWN_CARPET: - case CYAN_CARPET: - case GRAY_CARPET: - case GREEN_CARPET: - case LIGHT_BLUE_CARPET: - case LIGHT_GRAY_CARPET: - case LIME_CARPET: - case MAGENTA_CARPET: - case ORANGE_CARPET: - case PINK_CARPET: - case PURPLE_CARPET: - case RED_CARPET: - case WHITE_CARPET: - case YELLOW_CARPET: - return true; - default: - break; - } - return false; - } - - public static boolean isShulkerBox(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isShulkerBox(); - } - - public boolean isShulkerBox() { - switch (this) { - case BLACK_SHULKER_BOX: - case BLUE_SHULKER_BOX: - case BROWN_SHULKER_BOX: - case CYAN_SHULKER_BOX: - case GRAY_SHULKER_BOX: - case GREEN_SHULKER_BOX: - case LIGHT_BLUE_SHULKER_BOX: - case LIGHT_GRAY_SHULKER_BOX: - case LIME_SHULKER_BOX: - case MAGENTA_SHULKER_BOX: - case ORANGE_SHULKER_BOX: - case PINK_SHULKER_BOX: - case PURPLE_SHULKER_BOX: - case RED_SHULKER_BOX: - case WHITE_SHULKER_BOX: - case YELLOW_SHULKER_BOX: - case SHULKER_BOX: - return true; - default: - break; - } - return false; - } - - public static boolean isLeatherArmor(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isLeatherArmor(); - } - - public boolean isLeatherArmor() { - switch (this) { - case LEATHER_BOOTS: - case LEATHER_CHESTPLATE: - case LEATHER_HELMET: - case LEATHER_LEGGINGS: - return true; - default: - break; - } - return false; - } - - public static boolean isArmor(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isArmor(); - } - - public boolean isArmor() { - switch (this) { - case CHAINMAIL_HELMET: - case DIAMOND_HELMET: - case GOLDEN_HELMET: - case IRON_HELMET: - case LEATHER_HELMET: - case CHAINMAIL_CHESTPLATE: - case DIAMOND_CHESTPLATE: - case GOLDEN_CHESTPLATE: - case IRON_CHESTPLATE: - case LEATHER_CHESTPLATE: - case CHAINMAIL_LEGGINGS: - case DIAMOND_LEGGINGS: - case GOLDEN_LEGGINGS: - case IRON_LEGGINGS: - case LEATHER_LEGGINGS: - case CHAINMAIL_BOOTS: - case DIAMOND_BOOTS: - case GOLDEN_BOOTS: - case IRON_BOOTS: - case LEATHER_BOOTS: - case SHIELD: - case TURTLE_HELMET: - return true; - default: - break; - } - return false; - } - - public static boolean isWeapon(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isWeapon(); - } - - public boolean isWeapon() { - switch (this) { - case DIAMOND_SWORD: - case IRON_SWORD: - case GOLDEN_SWORD: - case STONE_SWORD: - case WOODEN_SWORD: - case BOW: - case CROSSBOW: - case TRIDENT: - return true; - default: - break; - } - return false; - } - - public static boolean isTool(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isTool(); - } - - public boolean isTool() { - switch (this) { - case DIAMOND_PICKAXE: - case GOLDEN_PICKAXE: - case IRON_PICKAXE: - case STONE_PICKAXE: - case WOODEN_PICKAXE: - case DIAMOND_SHOVEL: - case GOLDEN_SHOVEL: - case IRON_SHOVEL: - case STONE_SHOVEL: - case WOODEN_SHOVEL: - case DIAMOND_AXE: - case GOLDEN_AXE: - case IRON_AXE: - case STONE_AXE: - case WOODEN_AXE: - case SHEARS: - case FISHING_ROD: - return true; - default: - break; - } - return false; - } - - public static boolean isPotted(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isPotted(); - } - - public boolean isPotted() { - switch (this) { - case POTTED_ACACIA_SAPLING: - case POTTED_ALLIUM: - case POTTED_AZURE_BLUET: - case POTTED_BIRCH_SAPLING: - case POTTED_BLUE_ORCHID: - case POTTED_BROWN_MUSHROOM: - case POTTED_CACTUS: - case POTTED_DANDELION: - case POTTED_DARK_OAK_SAPLING: - case POTTED_DEAD_BUSH: - case POTTED_FERN: - case POTTED_JUNGLE_SAPLING: - case POTTED_OAK_SAPLING: - case POTTED_ORANGE_TULIP: - case POTTED_OXEYE_DAISY: - case POTTED_PINK_TULIP: - case POTTED_POPPY: - case POTTED_RED_MUSHROOM: - case POTTED_RED_TULIP: - case POTTED_SPRUCE_SAPLING: - case POTTED_WHITE_TULIP: - case POTTED_BAMBOO: - case POTTED_CORNFLOWER: - case POTTED_LILY_OF_THE_VALLEY: - case POTTED_WITHER_ROSE: - return true; - default: - break; - } - return false; - } - - public static boolean isAir(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isAir(); - } - - public boolean isAir() { - switch (this) { - case AIR: - case CAVE_AIR: - case VOID_AIR: - return true; - default: - break; - } - return false; - } - - public static boolean isAnvil(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isAnvil(); - } - - public boolean isAnvil() { - switch (this) { - case ANVIL: - case CHIPPED_ANVIL: - case DAMAGED_ANVIL: - return true; - default: - break; - } - return false; - } - - public static boolean isDoor(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isDoor(); - } - - public boolean isDoor() { - switch (this) { - case OAK_DOOR: - case IRON_DOOR: - - case LEGACY_SPRUCE_DOOR: - case LEGACY_BIRCH_DOOR: - case LEGACY_JUNGLE_DOOR: - case LEGACY_ACACIA_DOOR: - case LEGACY_DARK_OAK_DOOR: - case LEGACY_WOODEN_DOOR_BLOCK: - -// case SPRUCE_DOOR_ITEM: -// case BIRCH_DOOR_ITEM: -// case JUNGLE_DOOR_ITEM: -// case ACACIA_DOOR_ITEM: -// case DARK_OAK_DOOR_ITEM: -// case WOODEN_DOOR: - case ACACIA_DOOR: - case BIRCH_DOOR: - case DARK_OAK_DOOR: -// case IRON_DOOR_BLOCK: - case JUNGLE_DOOR: - case SPRUCE_DOOR: - return true; - default: - break; - } - return false; - } - - public static boolean isGate(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isGate(); - } - - public boolean isGate() { - switch (this) { - case ACACIA_FENCE_GATE: - case BIRCH_FENCE_GATE: - case DARK_OAK_FENCE_GATE: - case END_GATEWAY: - case JUNGLE_FENCE_GATE: - case OAK_FENCE_GATE: - case SPRUCE_FENCE_GATE: - return true; - default: - break; - } - return false; - } - - public static boolean isFence(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isFence(); - } - - public boolean isFence() { - switch (this) { - case ACACIA_FENCE: - case BIRCH_FENCE: - case DARK_OAK_FENCE: - case JUNGLE_FENCE: - case NETHER_BRICK_FENCE: - case OAK_FENCE: - case SPRUCE_FENCE: - return true; - default: - break; - } - return false; - } - - public static boolean isRail(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isRail(); - } - - public boolean isRail() { - switch (this) { - case POWERED_RAIL: - case RAIL: - case ACTIVATOR_RAIL: - case DETECTOR_RAIL: - return true; - default: - break; - } - return false; - } - - public static boolean isGlassPane(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isGlassPane(); - } - - public boolean isGlassPane() { - switch (this) { - case BLACK_STAINED_GLASS_PANE: - case BLUE_STAINED_GLASS_PANE: - case BROWN_STAINED_GLASS_PANE: - case CYAN_STAINED_GLASS_PANE: - case GRAY_STAINED_GLASS_PANE: - case GREEN_STAINED_GLASS_PANE: - case LIGHT_BLUE_STAINED_GLASS_PANE: - case LIGHT_GRAY_STAINED_GLASS_PANE: - case LIME_STAINED_GLASS_PANE: - case MAGENTA_STAINED_GLASS_PANE: - case ORANGE_STAINED_GLASS_PANE: - case PINK_STAINED_GLASS_PANE: - case PURPLE_STAINED_GLASS_PANE: - case RED_STAINED_GLASS_PANE: - case WHITE_STAINED_GLASS_PANE: - case YELLOW_STAINED_GLASS_PANE: - case GLASS_PANE: - return true; - default: - break; - } - return false; - } - - public static boolean isSign(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isSign(); - } - - public boolean isSign() { - switch (this) { - case SIGN: - case WALL_SIGN: - case LEGACY_SIGN_POST: - - case ACACIA_SIGN: - case ACACIA_WALL_SIGN: - case BIRCH_SIGN: - case BIRCH_WALL_SIGN: - case DARK_OAK_SIGN: - case DARK_OAK_WALL_SIGN: - case JUNGLE_SIGN: - case JUNGLE_WALL_SIGN: - case OAK_SIGN: - case OAK_WALL_SIGN: - case SPRUCE_SIGN: - case SPRUCE_WALL_SIGN: - - return true; - default: - break; - } - return false; - } - - public static boolean isWall(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isWall(); - } - - public boolean isWall() { - switch (this) { - case COBBLESTONE_WALL: - case MOSSY_COBBLESTONE_WALL: - - case ANDESITE_WALL: - case BRICK_WALL: - case DIORITE_WALL: - case END_STONE_BRICK_WALL: - case GRANITE_WALL: - case MOSSY_STONE_BRICK_WALL: - case NETHER_BRICK_WALL: - case PRISMARINE_WALL: - case RED_NETHER_BRICK_WALL: - case RED_SANDSTONE_WALL: - case SANDSTONE_WALL: - case STONE_BRICK_WALL: - return true; - default: - break; - } - return false; - } - - public static boolean isTrapDoor(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isTrapDoor(); - } - - public boolean isTrapDoor() { - switch (this) { - case ACACIA_TRAPDOOR: - case BIRCH_TRAPDOOR: - case DARK_OAK_TRAPDOOR: - case IRON_TRAPDOOR: - case JUNGLE_TRAPDOOR: - case OAK_TRAPDOOR: - case SPRUCE_TRAPDOOR: - return true; - default: - break; - } - return false; - } - - public static boolean isSkull(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isSkull(); - } - - public boolean isSkull() { - switch (this) { - case SKELETON_SKULL: - case WITHER_SKELETON_SKULL: - case SKELETON_WALL_SKULL: - case WITHER_SKELETON_WALL_SKULL: - case PLAYER_HEAD: - case CREEPER_HEAD: - case DRAGON_HEAD: - case ZOMBIE_HEAD: - return true; - default: - break; - } - return false; - } - - public static boolean isDye(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isDye(); - } - - public boolean isDye() { - switch (this) { - case INK_SAC: - case ROSE_RED: - case CACTUS_GREEN: - case COCOA_BEANS: - case LAPIS_LAZULI: - case PURPLE_DYE: - case CYAN_DYE: - case LIGHT_GRAY_DYE: - case GRAY_DYE: - case PINK_DYE: - case LIME_DYE: - case DANDELION_YELLOW: - case LIGHT_BLUE_DYE: - case MAGENTA_DYE: - case ORANGE_DYE: - case BONE_MEAL: - - case BLACK_DYE: - case BLUE_DYE: - case BROWN_DYE: - case GREEN_DYE: - case RED_DYE: - case WHITE_DYE: - case YELLOW_DYE: - return true; - default: - break; - } - return false; - } - - public static boolean isSlab(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isSlab(); - } - - public boolean isSlab() { - switch (this) { - case ACACIA_SLAB: - case DARK_OAK_SLAB: -// case DOUBLE_STONE_SLAB2: -// case PURPUR_DOUBLE_SLAB: - case BIRCH_SLAB: - case BRICK_SLAB: - case COBBLESTONE_SLAB: - case DARK_PRISMARINE_SLAB: -// case DOUBLE_STONE_SLAB: -// case DOUBLE_SANDSTONE_SLAB: -// case DOUBLE_WOODEN_SLAB: -// case DOUBLE_COBBLESTONE_SLAB: -// case DOUBLE_BRICK_SLAB: -// case DOUBLE_STONE_BRICK_SLAB: -// case DOUBLE_NETHER_BRICK_SLAB: -// case DOUBLE_QUARTZ_SLAB: - case JUNGLE_SLAB: - case NETHER_BRICK_SLAB: - case OAK_SLAB: - case PETRIFIED_OAK_SLAB: - case PRISMARINE_BRICK_SLAB: - case PRISMARINE_SLAB: - case PURPUR_SLAB: - case QUARTZ_SLAB: - case RED_SANDSTONE_SLAB: - case SANDSTONE_SLAB: - case SPRUCE_SLAB: - case STONE_BRICK_SLAB: - case STONE_SLAB: - - case ANDESITE_SLAB: - case CUT_RED_SANDSTONE_SLAB: - case CUT_SANDSTONE_SLAB: - case DIORITE_SLAB: - case END_STONE_BRICK_SLAB: - case GRANITE_SLAB: - case MOSSY_COBBLESTONE_SLAB: - case MOSSY_STONE_BRICK_SLAB: - case POLISHED_ANDESITE_SLAB: - case POLISHED_DIORITE_SLAB: - case POLISHED_GRANITE_SLAB: - case RED_NETHER_BRICK_SLAB: - case SMOOTH_QUARTZ_SLAB: - case SMOOTH_RED_SANDSTONE_SLAB: - case SMOOTH_SANDSTONE_SLAB: - case SMOOTH_STONE_SLAB: - return true; - default: - break; - } - return false; - } - - public static SlabType getSlabType(Block block) { - if (!isSlab(block.getType())) - return SlabType.NOTSLAB; - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - if (block.getBlockData() instanceof org.bukkit.block.data.type.Slab) { - org.bukkit.block.data.type.Slab slab = (org.bukkit.block.data.type.Slab) block.getBlockData(); - switch (slab.getType()) { - case TOP: - return SlabType.TOP; - case BOTTOM: - return SlabType.BOTTOM; - case DOUBLE: - return SlabType.DOUBLE; - } - - } - return SlabType.NOTSLAB; - } - if (block.getType().name().contains("STEP")) { - switch (CMIMaterial.get(block).getLegacyId()) { - case 44: - switch (block.getData()) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - return SlabType.BOTTOM; - default: - return SlabType.DOUBLE; - } - case 126: - switch (block.getData()) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - return SlabType.BOTTOM; - default: - return SlabType.DOUBLE; - } - case 182: - switch (block.getData()) { - case 0: - return SlabType.BOTTOM; - default: - return SlabType.DOUBLE; - } - case 205: - switch (block.getData()) { - case 0: - return SlabType.BOTTOM; - default: - return SlabType.DOUBLE; - } - } - } - - return SlabType.NOTSLAB; - } - - public boolean equals(Material mat) { - if (getMaterial() == null) { - return false; - } - return this.getMaterial().equals(mat); - } - - public String getLegacyName() { - return legacyName == null ? "" : legacyName; - } - - public void setLegacyName(String legacyName) { - this.legacyName = legacyName; - } - - public String getBukkitName() { - if (bukkitName == null) - bukkitName = getMaterial() == null ? "N/A" : getMaterial().name(); - return bukkitName; - } - - public void setBukkitName(String bukkitName) { - this.bukkitName = bukkitName; - } - - public String getMojangName() { - if (mojangName == null) - mojangName = ItemReflection.getItemMinecraftName(this.newItemStack()); - return mojangName; - } - - public void setMojangName(String mojangName) { - this.mojangName = mojangName; - } - } - } diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 397daf591..2400ea2d7 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -25,7 +25,7 @@ import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.containers.ELMessageType; import com.bekvon.bukkit.residence.containers.EconomyType; diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 2b22fa651..e925cab4c 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -47,8 +47,7 @@ import org.kingdoms.manager.game.GameManagement; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; -import com.bekvon.bukkit.cmiLib.ItemManager; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.cmiLib.VersionChecker; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; @@ -445,7 +444,6 @@ public void onEnable() { instance = this; initsuccess = false; versionChecker = new VersionChecker(this); - ItemManager.load(); deleteConfirm = new HashMap(); resadminToggle = new ArrayList(); server = this.getServer(); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java index 9cdfebe24..3a4a979bb 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java @@ -9,13 +9,12 @@ import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.event.block.BlockPhysicsEvent; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; public class v1_13Events implements Listener { diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index e8f264fe0..1c211629e 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -6,8 +6,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.ConfigReader; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 37ec9ac18..820da350f 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -1,6 +1,6 @@ package com.bekvon.bukkit.residence.containers; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIMaterial; public enum Flags { anvil(CMIMaterial.ANVIL, FlagMode.Both, "Allows or denys interaction with anvil", true), diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 7938c86aa..438426eab 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -4,8 +4,8 @@ import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.ConfigReader; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; import com.bekvon.bukkit.residence.Residence; public class FlagUtil { diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index 201416e3c..b587c4d24 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -10,7 +10,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIMaterial; public class ItemList { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 78eb1461e..595813601 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -44,7 +44,7 @@ import org.bukkit.metadata.FixedMetadataValue; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.commands.auto.direction; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 6b52944cb..606a6a3be 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -48,7 +48,7 @@ import org.bukkit.projectiles.ProjectileSource; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java index ea7675167..d3e827908 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java @@ -11,7 +11,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.residence.Residence; public class ResidenceFixesListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 2e7b70d26..45c703570 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -57,8 +57,8 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; -import com.bekvon.bukkit.cmiLib.ItemReflection; +import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIReflections; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; @@ -1548,7 +1548,7 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.dye, FlagCombo.OnlyFalse)) { ItemStack iih = plugin.getNms().itemInMainHand(player); - ItemStack iiho = ItemReflection.getItemInOffHand(player); + ItemStack iiho = CMIReflections.getItemInOffHand(player); if (iih == null && iiho == null) return; if (iih != null && !CMIMaterial.isDye(iih.getType()) && iiho != null && !CMIMaterial.isDye(iiho.getType())) @@ -1582,7 +1582,7 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.shear, FlagCombo.OnlyFalse)) { ItemStack iih = plugin.getNms().itemInMainHand(player); - ItemStack iiho = ItemReflection.getItemInOffHand(player); + ItemStack iiho = CMIReflections.getItemInOffHand(player); if (iih == null && iiho == null) return; if (iih != null && !CMIMaterial.SHEARS.equals(iih.getType()) && iiho != null && !CMIMaterial.SHEARS.equals(iiho.getType())) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 89f0fbe1d..30961717f 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -22,7 +22,7 @@ import org.bukkit.permissions.PermissionDefault; import com.bekvon.bukkit.cmiLib.RawMessage; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeFlags; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 4324d80bc..dc79b6257 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -22,7 +22,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; diff --git a/src/com/bekvon/bukkit/residence/utils/Utils.java b/src/com/bekvon/bukkit/residence/utils/Utils.java index 48b98085e..fb75ad544 100644 --- a/src/com/bekvon/bukkit/residence/utils/Utils.java +++ b/src/com/bekvon/bukkit/residence/utils/Utils.java @@ -11,7 +11,7 @@ import org.bukkit.entity.Player; import org.bukkit.util.BlockIterator; -import com.bekvon.bukkit.cmiLib.ItemManager.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; From 4ec1c08b1a59468373be5a1bac4ef5c7fc101e06 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Dec 2019 13:40:37 +0200 Subject: [PATCH 0649/1142] Improving residence cleaning proccess --- .../bukkit/residence/ConfigManager.java | 15 +++-- .../protection/ResidenceManager.java | 64 +++++++++++-------- 2 files changed, 47 insertions(+), 32 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 2400ea2d7..85c0e66c7 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -188,7 +188,7 @@ public class ConfigManager { protected List customContainers = new ArrayList(); protected List customBothClick = new ArrayList(); protected List customRightClick = new ArrayList(); - protected List CleanBlocks = new ArrayList(); + protected List CleanBlocks = new ArrayList(); protected List NoFlowWorlds; protected List AutoCleanUpWorlds; @@ -321,7 +321,7 @@ void UpdateFlagFile() { conf.set("Global.FlagPermission." + fl, fl.isEnabled()); } - if (!conf.isConfigurationSection("Global.FlagGui")){ + if (!conf.isConfigurationSection("Global.FlagGui")) { conf.createSection("Global.FlagGui"); } @@ -335,7 +335,7 @@ void UpdateFlagFile() { ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); for (Flags fl : Flags.values()) { - guiSection.set(fl.toString(), guiSection.get(fl.toString(),fl.getIcon().toString())); + guiSection.set(fl.toString(), guiSection.get(fl.toString(), fl.getIcon().toString())); } try { @@ -750,7 +750,8 @@ public void UpdateConfigFile() { // Res cleaning c.addComment("Global.AntiGreef.ResCleaning.Use", "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", - "Effective way to prevent residence creating near greefing target and then remove it"); + "Effective way to prevent residence creating near greefing target and then remove it", + "ATTENTION! Bigger residence areas could want to create bigger loads on server when cleaning up areas. So dont use this if regular player have access to huge residences. 15 million blocks would be a max limit"); UseClean = c.get("Global.AntiGreef.ResCleaning.Use", true); c.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); CleanLevel = c.get("Global.AntiGreef.ResCleaning.Level", 63); @@ -758,8 +759,8 @@ public void UpdateConfigFile() { List pls = c.getList("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(CMIMaterial.WATER.toString(), CMIMaterial.LAVA.toString())); for (Object one : pls) { CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); - if (mat != CMIMaterial.NONE) - CleanBlocks.add(mat); + if (mat != CMIMaterial.NONE && mat.getMaterial() != null) + CleanBlocks.add(mat.getMaterial()); } CleanWorlds = c.get("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName)); @@ -1712,7 +1713,7 @@ public List getCustomRightClick() { return customRightClick; } - public List getCleanBlocks() { + public List getCleanBlocks() { return CleanBlocks; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index dc79b6257..0be40454d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -523,36 +523,50 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole residences.remove(name.toLowerCase()); if (plugin.getConfigManager().isUseClean() && plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) { - for (CuboidArea area : res.getAreaArray()) { - Location low = area.getLowLoc(); - Location high = area.getHighLoc(); - - if (high.getBlockY() > plugin.getConfigManager().getCleanLevel()) { - - if (low.getBlockY() < plugin.getConfigManager().getCleanLevel()) - low.setY(plugin.getConfigManager().getCleanLevel()); - - World world = low.getWorld(); - - Location temploc = new Location(world, low.getBlockX(), low.getBlockY(), low.getBlockZ()); - - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - temploc.setX(x); - for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { - temploc.setY(y); - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - temploc.setZ(z); - if (!temploc.getChunk().isLoaded()) - temploc.getChunk().load(); - if (plugin.getConfigManager().getCleanBlocks().contains(CMIMaterial.get(temploc.getBlock()))) { - temploc.getBlock().setType(Material.AIR); + CuboidArea[] arr = res.getAreaArray(); + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + for (CuboidArea area : arr) { + Location low = area.getLowLoc().clone(); + Location high = area.getHighLoc().clone(); + + if (high.getBlockY() > plugin.getConfigManager().getCleanLevel()) { + + if (low.getBlockY() < plugin.getConfigManager().getCleanLevel()) + low.setY(plugin.getConfigManager().getCleanLevel()); + + World world = low.getWorld(); + + Location temploc = new Location(world, low.getBlockX(), low.getBlockY(), low.getBlockZ()); + + Bukkit.getScheduler().runTask(plugin, () -> { + Long blocks = 0L; + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + temploc.setX(x); + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + temploc.setZ(z); + for (int y = low.getBlockY(); y <= world.getHighestBlockAt(x, z).getY(); y++) { + temploc.setY(y); + + if (!temploc.getChunk().isLoaded()) { + temploc.getChunk().load(); + } + if (plugin.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getType())) { + temploc.getBlock().setType(Material.AIR); + } + + blocks++; + } + } } - } + }); } } + return; } - } + }); } if (plugin.getConfigManager().isRemoveLwcOnDelete()) From b4373327eaea189fa75d8ac1e582e83241257d7f Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Dec 2019 13:44:33 +0200 Subject: [PATCH 0650/1142] Its coord not a cord --- src/com/bekvon/bukkit/residence/ConfigManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 85c0e66c7..f2be68eb6 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -616,9 +616,9 @@ public void UpdateConfigFile() { int MaxCoord = c.get(path + "MaxCoord", 1000); if (!commented) - c.addComment(path + "MinCord", + c.addComment(path + "MinCoord", "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); - int MinCord = c.get(path + "MinCord", 500); + int MinCoord = c.get(path + "MinCoord", c.getC().getInt(path + "MinCord", 500)); int CenterX = c.get(path + "CenterX", 0); int CenterZ = c.get(path + "CenterZ", 0); @@ -634,7 +634,7 @@ public void UpdateConfigFile() { if (!enabled) continue; - RTeleport.add(new RandomTeleport(w, MaxCoord, MinCord, CenterX, CenterZ)); + RTeleport.add(new RandomTeleport(w, MaxCoord, MinCoord, CenterX, CenterZ)); } } for (World one : worlds) { From e2fb82a81cd3f26dbf48f2fa14ec2e18afffef31 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Dec 2019 13:55:48 +0200 Subject: [PATCH 0651/1142] Trident issue fix --- .../bukkit/residence/ConfigManager.java | 6 +-- .../listeners/ResidenceEntityListener.java | 37 +++++++++++-------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index f2be68eb6..a26b98449 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -617,7 +617,7 @@ public void UpdateConfigFile() { if (!commented) c.addComment(path + "MinCoord", - "If maxcord set to 1000 and mincord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); + "If maxcoord set to 1000 and mincoord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); int MinCoord = c.get(path + "MinCoord", c.getC().getInt(path + "MinCord", 500)); int CenterX = c.get(path + "CenterX", 0); int CenterZ = c.get(path + "CenterZ", 0); @@ -644,13 +644,13 @@ public void UpdateConfigFile() { String path = "Global.RandomTeleportation.Worlds." + name + "."; boolean enabled = c.get(path + "Enabled", true); int MaxCoord = c.get(path + "MaxCoord", 1000); - int MinCord = c.get(path + "MinCord", 500); + int MinCoord = c.get(path + "MinCoord", c.getC().getInt(path + "MinCord", 500)); int CenterX = c.get(path + "CenterX", 0); int CenterZ = c.get(path + "CenterZ", 0); if (!enabled) continue; - RTeleport.add(new RandomTeleport(one, MaxCoord, MinCord, CenterX, CenterZ)); + RTeleport.add(new RandomTeleport(one, MaxCoord, MinCoord, CenterX, CenterZ)); } c.addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 606a6a3be..a3966bf1d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -57,6 +57,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceEntityListener implements Listener { @@ -106,6 +107,10 @@ public static boolean isMonster(Entity ent) { private static boolean isTamed(Entity ent) { return (ent instanceof Tameable ? ((Tameable) ent).isTamed() : false); } + + private static boolean damageableProjectile(Entity ent) { + return ent instanceof Arrow || ent instanceof Projectile && ent.getType().toString().equalsIgnoreCase("Trident"); + } @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(EntityDamageByEntityEvent event) { @@ -123,10 +128,10 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { Entity damager = event.getDamager(); - if (!(damager instanceof Arrow) && !(damager instanceof Player)) + if (!damageableProjectile(damager) && !(damager instanceof Player)) return; - if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + if (damageableProjectile(damager) && !(((Projectile) damager).getShooter() instanceof Player)) return; Player cause = null; @@ -134,7 +139,7 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { if (damager instanceof Player) { cause = (Player) damager; } else { - cause = (Player) ((Arrow) damager).getShooter(); + cause = (Player) ((Projectile) damager).getShooter(); } if (cause == null) @@ -178,10 +183,10 @@ public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { Entity damager = event.getCombuster(); - if (!(damager instanceof Arrow) && !(damager instanceof Player)) + if (!damageableProjectile(damager) && !(damager instanceof Player)) return; - if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + if (damageableProjectile(damager) && !(((Projectile) damager).getShooter() instanceof Player)) return; Player cause = null; @@ -189,7 +194,7 @@ public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { if (damager instanceof Player) { cause = (Player) damager; } else { - cause = (Player) ((Arrow) damager).getShooter(); + cause = (Player) ((Projectile) damager).getShooter(); } if (cause == null) @@ -324,10 +329,10 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { Entity damager = event.getDamager(); - if (!(damager instanceof Arrow) && !(damager instanceof Player)) + if (!damageableProjectile(damager) && !(damager instanceof Player)) return; - if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + if (damageableProjectile(damager) && !(((Projectile) damager).getShooter() instanceof Player)) return; Player cause = null; @@ -335,7 +340,7 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { if (damager instanceof Player) { cause = (Player) damager; } else { - cause = (Player) ((Arrow) damager).getShooter(); + cause = (Player) ((Projectile) damager).getShooter(); } if (cause == null) @@ -1043,10 +1048,10 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { Entity damager = event.getCombuster(); - if (!(damager instanceof Arrow) && !(damager instanceof Player)) + if (!damageableProjectile(damager) && !(damager instanceof Player)) return; - if (damager instanceof Arrow && !(((Arrow) damager).getShooter() instanceof Player)) + if (damageableProjectile(damager) && !(((Projectile) damager).getShooter() instanceof Player)) return; Player cause = null; @@ -1054,7 +1059,7 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { if (damager instanceof Player) { cause = (Player) damager; } else { - cause = (Player) ((Arrow) damager).getShooter(); + cause = (Player) ((Projectile) damager).getShooter(); } if (cause == null) @@ -1136,18 +1141,18 @@ public void onEntityCatchingFire(EntityDamageByEntityEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; - if (!(event.getDamager() instanceof Arrow)) + if (!damageableProjectile(event.getDamager())) return; if (event.getEntity() == null || !(event.getEntity() instanceof Player)) return; - Arrow arrow = (Arrow) event.getDamager(); + Projectile projectile = (Projectile) event.getDamager(); - FlagPermissions perms = plugin.getPermsByLoc(arrow.getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(projectile.getLocation()); if (!perms.has(Flags.pvp, FlagCombo.TrueOrNone)) - arrow.setFireTicks(0); + projectile.setFireTicks(0); } @EventHandler From ab9901dfec5529bf6d38af3ba45539c41b00b393 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Dec 2019 15:16:44 +0200 Subject: [PATCH 0652/1142] Added option to use %subtitle% to define second title line --- src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java | 8 ++++++++ src/com/bekvon/bukkit/residence/ConfigManager.java | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java index 4e8cf325c..50cf89b7b 100644 --- a/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java +++ b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java @@ -13,6 +13,7 @@ import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.utils.Debug; public class ActionBarTitleMessages { private static Object packet; @@ -126,6 +127,13 @@ public void run() { String t = title == null ? null : CMIChatColor.translateAlternateColorCodes((String) title); String s = subtitle == null ? null : CMIChatColor.translateAlternateColorCodes((String) subtitle); + if (t != null && s == null && t.contains("%subtitle%")) { + s = t.split("%subtitle%")[1]; + t = t.split("%subtitle%")[0]; + t = t == null ? null : CMIChatColor.translateAlternateColorCodes(t); + s = s == null ? null : CMIChatColor.translateAlternateColorCodes(s); + } + if (simpleTitleMessages) { receivingPacket.sendMessage(t); receivingPacket.sendMessage(s); diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index a26b98449..bb3048904 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -868,7 +868,8 @@ public void UpdateConfigFile() { ELMessageType old = c.getC().isBoolean("Global.ActionBar.General") && c.getC().getBoolean("Global.ActionBar.General") ? ELMessageType.ActionBar : ELMessageType.ChatBox; old = c.getC().isBoolean("Global.TitleBar.EnterLeave") && c.getC().getBoolean("Global.TitleBar.EnterLeave") ? ELMessageType.TitleBar : old; - c.addComment("Global.Messages.GeneralMessages", "Defines where you want to send residence enter/leave/deny move and similar messages. Possible options: " + ELMessageType.getAllValuesAsString()); + c.addComment("Global.Messages.GeneralMessages", "Defines where you want to send residence enter/leave/deny move and similar messages. Possible options: " + ELMessageType.getAllValuesAsString(), + "TitleBar can have %subtitle% variable to define second line"); EnterLeaveMessageType = ELMessageType.getByName(c.get("Global.Messages.GeneralMessages", old.toString())); if (EnterLeaveMessageType == null || Version.isCurrentEqualOrLower(Version.v1_7_R4)) EnterLeaveMessageType = ELMessageType.ChatBox; From a4571d9f920b0edddacb85e1aee86508bdf11c69 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Dec 2019 15:25:42 +0200 Subject: [PATCH 0653/1142] Prevent entity damage by throwable potions --- .../listeners/ResidenceEntityListener.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index a3966bf1d..4f61fca3d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -20,6 +20,7 @@ import org.bukkit.entity.Projectile; import org.bukkit.entity.Slime; import org.bukkit.entity.Tameable; +import org.bukkit.entity.ThrownPotion; import org.bukkit.entity.Vehicle; import org.bukkit.entity.Witch; import org.bukkit.event.EventHandler; @@ -107,9 +108,18 @@ public static boolean isMonster(Entity ent) { private static boolean isTamed(Entity ent) { return (ent instanceof Tameable ? ((Tameable) ent).isTamed() : false); } - + private static boolean damageableProjectile(Entity ent) { - return ent instanceof Arrow || ent instanceof Projectile && ent.getType().toString().equalsIgnoreCase("Trident"); + if (ent instanceof Projectile && ent.getType().toString().equalsIgnoreCase("Splash_potion")) { + for (PotionEffect one : ((ThrownPotion) ent).getEffects()) { + for (String oneHarm : Residence.getInstance().getConfigManager().getNegativePotionEffects()) { + if (oneHarm.equalsIgnoreCase(one.getType().getName())) { + return true; + } + } + } + } + return ent instanceof Arrow || ent instanceof Projectile && (ent.getType().toString().equalsIgnoreCase("Trident")); } @EventHandler(priority = EventPriority.LOWEST) @@ -980,6 +990,7 @@ public void onSplashPotion(PotionSplashEvent event) { return; boolean harmfull = false; + mein: for (PotionEffect one : event.getPotion().getEffects()) { for (String oneHarm : plugin.getConfigManager().getNegativePotionEffects()) { if (oneHarm.equalsIgnoreCase(one.getType().getName())) { From 4ca05d586a85419bdef6d38208d13c6cac61315c Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Dec 2019 15:43:37 +0200 Subject: [PATCH 0654/1142] Black listed material recognition fix --- .../bukkit/cmiLib/CMIEffectManager.java | 2 +- .../bekvon/bukkit/residence/gui/SetFlag.java | 2 -- .../bukkit/residence/itemlist/ItemList.java | 16 ++++++++++---- .../residence/itemlist/WorldItemManager.java | 1 + .../listeners/ResidenceEntityListener.java | 3 +-- .../residence/protection/FlagPermissions.java | 21 +++++++++++-------- .../bekvon/bukkit/residence/utils/Debug.java | 4 ++-- 7 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java b/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java index 0784b1a3a..715b958a0 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java @@ -289,7 +289,7 @@ public Effect getEffect() { } public Material getIcon() { - return icon; + return icon == null ? Material.STONE : icon; } public static List getParticleList() { diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java index c3122e334..d4a5c70b2 100644 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ b/src/com/bekvon/bukkit/residence/gui/SetFlag.java @@ -145,8 +145,6 @@ private void fillFlagDescriptions() { @SuppressWarnings("incomplete-switch") public void recalculateResidence(ClaimedResidence res) { - Debug.D("ss"); - if (flags == null) flags = res.getPermissions().getPosibleFlags(player, true, this.admin); diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index b587c4d24..fda7f97e0 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -11,6 +11,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.residence.utils.Debug; public class ItemList { @@ -48,7 +49,8 @@ public boolean toggle(Material mat) { list.remove(mat); return false; } - list.add(mat); + if (mat != null) + list.add(mat); return true; } @@ -106,12 +108,16 @@ protected static ItemList readList(ConfigurationSection node, ItemList list) { } if (parse == -1) { try { - list.add(CMIMaterial.get(item.toUpperCase()).getMaterial()); + Material mat = CMIMaterial.get(item.toUpperCase()).getMaterial(); + if (mat != null) + list.add(mat); } catch (Exception ex) { } } else { try { - list.add(CMIMaterial.get(parse).getMaterial()); + Material mat = CMIMaterial.get(parse).getMaterial(); + if (mat != null) + list.add( mat); } catch (Exception ex) { } } @@ -168,7 +174,9 @@ protected static ItemList load(Map map, ItemList newlist) { @SuppressWarnings("unchecked") List list = (List) map.get("ItemList"); for (String item : list) { - newlist.add(Material.valueOf(item)); + CMIMaterial cmat = CMIMaterial.get(item); + if (cmat != null && cmat.getMaterial() != null) + newlist.add(cmat.getMaterial()); } } catch (Exception ex) { } diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java index 20a314a13..d4f9a3f36 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java @@ -10,6 +10,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.utils.Debug; public class WorldItemManager { protected List lists; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 4f61fca3d..70c75fcec 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -113,9 +113,8 @@ private static boolean damageableProjectile(Entity ent) { if (ent instanceof Projectile && ent.getType().toString().equalsIgnoreCase("Splash_potion")) { for (PotionEffect one : ((ThrownPotion) ent).getEffects()) { for (String oneHarm : Residence.getInstance().getConfigManager().getNegativePotionEffects()) { - if (oneHarm.equalsIgnoreCase(one.getType().getName())) { + if (oneHarm.equalsIgnoreCase(one.getType().getName())) return true; - } } } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 30961717f..0392bccc4 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -191,25 +191,28 @@ public static void initValidFlags() { addMaterialToUseFlag(CMIMaterial.CRAFTING_TABLE.getMaterial(), Flags.table); for (CMIMaterial one : CMIMaterial.values()) { - if (one.isDoor() && one.getMaterial() != null) + if (one.getMaterial() == null) + continue; + + if (one.isDoor()) matUseFlagList.put(one.getMaterial(), Flags.door); - if (one.isGate() && one.getMaterial() != null) + if (one.isGate()) matUseFlagList.put(one.getMaterial(), Flags.door); - if (one.isTrapDoor() && one.getMaterial() != null) + if (one.isTrapDoor()) matUseFlagList.put(one.getMaterial(), Flags.door); - if (one.isShulkerBox() && one.getMaterial() != null) + if (one.isShulkerBox()) matUseFlagList.put(one.getMaterial(), Flags.container); - if (one.isButton() && one.getMaterial() != null) + if (one.isButton()) matUseFlagList.put(one.getMaterial(), Flags.button); - if (one.isBed() && one.getMaterial() != null) + if (one.isBed()) matUseFlagList.put(one.getMaterial(), Flags.bed); - if (one.isPotted() && one.getMaterial() != null) + if (one.isPotted()) matUseFlagList.put(one.getMaterial(), Flags.flowerpot); } @@ -235,7 +238,7 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.DROPPER, Flags.container); addMaterialToUseFlag(Material.FURNACE, Flags.container); addMaterialToUseFlag(CMIMaterial.FURNACE.getMaterial(), Flags.container); - + addMaterialToUseFlag(CMIMaterial.BARREL.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.BLAST_FURNACE.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.CARTOGRAPHY_TABLE.getMaterial(), Flags.container); @@ -247,7 +250,7 @@ public static void initValidFlags() { addMaterialToUseFlag(CMIMaterial.SMOKER.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.COMPOSTER.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.STONECUTTER.getMaterial(), Flags.container); - + addMaterialToUseFlag(Material.DISPENSER, Flags.container); addMaterialToUseFlag(CMIMaterial.CAKE.getMaterial(), Flags.cake); } diff --git a/src/com/bekvon/bukkit/residence/utils/Debug.java b/src/com/bekvon/bukkit/residence/utils/Debug.java index 15f800f27..789b85fde 100644 --- a/src/com/bekvon/bukkit/residence/utils/Debug.java +++ b/src/com/bekvon/bukkit/residence/utils/Debug.java @@ -8,8 +8,8 @@ public class Debug { public static void D(Object message) { Player player = Bukkit.getPlayer("Zrips"); if (player == null) - return; - player.sendMessage(ChatColor.DARK_GRAY + "[Residence Debug] " + ChatColor.DARK_AQUA + ChatColor.translateAlternateColorCodes('&', message.toString())); + return; + player.sendMessage(ChatColor.DARK_GRAY + "[Residence Debug] " + ChatColor.DARK_AQUA + ChatColor.translateAlternateColorCodes('&', message == null ? "Null" : message.toString())); return; } } From 6134ef455374f847a25b90ad7022b43ff2e41f70 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Dec 2019 15:59:59 +0200 Subject: [PATCH 0655/1142] Lets properly inform player about missing permission node --- .../bukkit/residence/ResidenceCommandListener.java | 13 +++++++++++-- .../bekvon/bukkit/residence/commands/reload.java | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 25b313723..fd750fe79 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -12,12 +12,15 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceCommandListener implements CommandExecutor { @@ -112,7 +115,6 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } else { resadmin = true; } - if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { return commandHelp(args, resadmin, sender, command); } @@ -150,8 +152,15 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return commandHelp(new String[] { "?" }, resadmin, sender, command); } - if (!resadmin && !ResPerm.command_$1.hasPermission(sender, args[0].toLowerCase())) + if (!resadmin && !ResPerm.command_$1.hasPermission(sender, args[0].toLowerCase())) { + RawMessage rm = new RawMessage(); + rm.add(plugin.msg(lm.General_NoPermission), "&2" + ResPerm.command_$1.getPermission(args[0].toLowerCase())); + rm.show(sender); + + ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); + plugin.msg(console, plugin.msg(lm.General_NoPermission) + " " + ResPerm.command_$1.getPermission(args[0].toLowerCase())); return true; + } if (!resadmin && player != null && plugin.resadminToggle.contains(player.getName())) { if (!plugin.getPermissionManager().isResidenceAdmin(player)) { diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index e3784923a..ec7adc875 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -13,6 +13,7 @@ import com.bekvon.bukkit.residence.itemlist.WorldItemManager; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.protection.WorldFlagManager; +import com.bekvon.bukkit.residence.utils.Debug; public class reload implements cmd { From 8190ed98cc50221d59188fa3bff233f25e7fb7a7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Dec 2019 16:08:47 +0200 Subject: [PATCH 0656/1142] Letss hide coords in area listall --- src/com/bekvon/bukkit/residence/containers/lm.java | 6 ++++++ .../bukkit/residence/protection/ClaimedResidence.java | 9 ++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index c69c32d11..f6bfd09ac 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -3,6 +3,8 @@ import java.util.ArrayList; import java.util.Arrays; +import org.bukkit.ChatColor; + public enum lm { Invalid_Player("&cInvalid player name..."), Invalid_World("&cInvalid world..."), @@ -41,6 +43,9 @@ public enum lm { Area_Rename("&eRenamed area &6%1 &eto &6%2"), Area_Remove("&eRemoved area &6%1..."), Area_Name("&eName: &2%1"), + + Area_ListAll("&a{&eID:&c%1 &eP1:&c(%2,%3,%4) &eP2:&c(%5,%6,%7) &e(Size:&c%8&e)&a}"), + Area_RemoveLast("&cCannot remove the last area in a residence."), Area_NotWithinParent("&cArea is not within parent area."), Area_Update("&eArea Updated..."), @@ -428,6 +433,7 @@ public enum lm { General_ListRemoved("&eList removed..."), General_ListCreate("&eCreated list &6%1"), General_PhysicalAreas("&ePhysical Areas"), + General_CurrentArea("&eCurrent Area: &6%1"), General_TotalResSize("&eTotal size: &6%1m\u00B3 (%2m\u00B2)"), General_TotalWorth("&eTotal worth of residence: &6%1 &e(&6%2&e)"), diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 8847b6eac..455bea4e4 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1176,11 +1176,10 @@ public void printAdvancedAreaList(Player player, int page) { CuboidArea a = entry.getValue(); Location h = a.getHighLoc(); Location l = a.getLowLoc(); - temp.add(ChatColor.GREEN + "{" + ChatColor.YELLOW + "ID:" + ChatColor.RED + entry.getKey() + " " - + ChatColor.YELLOW + "P1:" + ChatColor.RED + "(" + h.getBlockX() + "," + h.getBlockY() + "," - + h.getBlockZ() + ") " + ChatColor.YELLOW + "P2:" + ChatColor.RED + "(" + l.getBlockX() + "," - + l.getBlockY() + "," + l.getBlockZ() + ") " + ChatColor.YELLOW + "(Size:" + ChatColor.RED - + a.getSize() + ChatColor.YELLOW + ")" + ChatColor.GREEN + "} "); + if (this.getPermissions().has(Flags.coords, FlagCombo.OnlyFalse)) + temp.add(plugin.msg(lm.Area_ListAll, entry.getKey(), 0, 0, 0, 0, 0, 0, a.getSize())); + else + temp.add(plugin.msg(lm.Area_ListAll, entry.getKey(), h.getBlockX(), h.getBlockY(), h.getBlockZ(), l.getBlockX(), l.getBlockY(), l.getBlockZ(), a.getSize())); } plugin.getInfoPageManager().printInfo(player, "res area listall " + this.getName(), plugin.msg(lm.General_PhysicalAreas), temp, page); From 0748ddab116720a1b900dcc9315c23650c4f3a87 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Dec 2019 16:09:24 +0200 Subject: [PATCH 0657/1142] Translatable area listAll output message --- src/com/bekvon/bukkit/residence/containers/lm.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index f6bfd09ac..4db9c312b 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -44,7 +44,7 @@ public enum lm { Area_Remove("&eRemoved area &6%1..."), Area_Name("&eName: &2%1"), - Area_ListAll("&a{&eID:&c%1 &eP1:&c(%2,%3,%4) &eP2:&c(%5,%6,%7) &e(Size:&c%8&e)&a}"), + Area_ListAll("&a{&eID:&c%1 &eP1:&c(%2,%3,%4) &eP2:&c(%5,%6,%7) &e(Size:&c%8&e)&a}"), Area_RemoveLast("&cCannot remove the last area in a residence."), Area_NotWithinParent("&cArea is not within parent area."), From 0e5d320425398a7c4c28f379912ba12b21256477 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 2 Dec 2019 17:04:09 +0200 Subject: [PATCH 0658/1142] Adding missing tabcomplete for flags --- .../bekvon/bukkit/residence/commands/area.java | 4 ++-- .../bekvon/bukkit/residence/containers/lm.java | 2 +- .../residence/protection/FlagPermissions.java | 2 +- .../bukkit/residence/text/help/HelpEntry.java | 18 +++++++++++++++--- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index 71106e35b..276d6f83e 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -41,7 +41,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } else if (args[1].equals("add")) { if (plugin.getWorldEdit() != null) { - if (plugin.getWorldEdit().getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) { + if (plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { plugin.getSelectionManager().worldEdit(player); } } @@ -59,7 +59,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } else if (args[1].equals("replace")) { if (plugin.getWorldEdit() != null) { - if (plugin.getWorldEdit().getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) { + if (plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { plugin.getSelectionManager().worldEdit(player); } } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 4db9c312b..c8a5d73a8 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -428,7 +428,7 @@ public enum lm { General_TeleportTitleTime("&6%1"), General_TeleportCanceled("&eTeleportation canceled!"), General_NoTeleportConfirm("&eThere is no teleports waiting for confirmation!"), - General_HelpPageHeader("&eHelp Pages - &6%1 &e- Page <&6%2 &eof &6%3&e>"), + General_HelpPageHeader2("&eHelp Pages - &6%1 &e- Page <&6%2 &eof &6%3&e>"), General_ListExists("&cList already exists..."), General_ListRemoved("&eList removed..."), General_ListCreate("&eCreated list &6%1"), diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 0392bccc4..e120ce16a 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -939,7 +939,7 @@ public static Set getAllPosibleFlags() { return t; } - public ArrayList getposibleAreaFlags() { + public static ArrayList getPosibleAreaFlags() { return FlagPermissions.validAreaFlags; } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 8800c9561..bfdfeae2b 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -80,9 +80,9 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p return; } - String separator = Residence.getInstance().msg(lm.InformationPage_SmallSeparator); +// String separator = Residence.getInstance().msg(lm.InformationPage_SmallSeparator); - sender.sendMessage(separator + " " + Residence.getInstance().msg(lm.General_HelpPageHeader, path, page, pi.getTotalPages()) + " " + separator); +// sender.sendMessage(separator + " " + Residence.getInstance().msg(lm.General_HelpPageHeader, path, page, pi.getTotalPages()) + " " + separator); for (int i = pi.getStart(); i <= pi.getEnd(); i++) { if (helplines.get(i).getCommand() != null) { @@ -386,7 +386,19 @@ public Set getSubCommands(CommandSender sender, String[] args) { break; case "[flag]": - for (String one : Residence.getInstance().getPermissionManager().getAllFlags().getAllPosibleFlags()) { + for (String one : FlagPermissions.getAllPosibleFlags()) { + + Flags f = Flags.getFlag(one); + + if (f != null) { + if (!f.isGlobalyEnabled()) + continue; + subCommands.add(f.getName()); + } + subCommands.add(one); + + } + for (String one : FlagPermissions.getPosibleAreaFlags()) { Flags f = Flags.getFlag(one); From 9c5f73bb14fa92674974077468f82a59f61b54f7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Dec 2019 10:46:19 +0200 Subject: [PATCH 0659/1142] Prevent bed block placement on residence edge --- src/com/bekvon/bukkit/cmiLib/CMIBlock.java | 1945 +++++++++++++++++ .../listeners/ResidenceBlockListener.java | 19 +- 2 files changed, 1962 insertions(+), 2 deletions(-) create mode 100644 src/com/bekvon/bukkit/cmiLib/CMIBlock.java diff --git a/src/com/bekvon/bukkit/cmiLib/CMIBlock.java b/src/com/bekvon/bukkit/cmiLib/CMIBlock.java new file mode 100644 index 000000000..7aa0c61e5 --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/CMIBlock.java @@ -0,0 +1,1945 @@ +package com.bekvon.bukkit.cmiLib; + +import org.bukkit.Axis; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.data.Waterlogged; +import org.bukkit.block.data.type.Stairs.Shape; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; + +import com.bekvon.bukkit.cmiLib.VersionChecker.Version; + +public class CMIBlock { + public static enum blockDirection { + none(-1), upWest(0), upEast(1), upNorth(2), upSouth(3), downWest(4), downEast(5), downNorth(6), downSouth(7); + private int dir; + + blockDirection(int dir) { + this.dir = dir; + } + + public int getDir() { + return dir; + } + + public static blockDirection getByDir(int dir) { + for (blockDirection one : blockDirection.values()) { + if (one.getDir() == dir) + return one; + } + return null; + } + } + + public static enum FlipDirection { + NORTH_SOUTH, + WEST_EAST, + UP_DOWN + } + + public static enum Bisect { + TOP, + BOTTOM + } + + public static enum BedPart { + HEAD, + FOOT + + } + + public static enum StairShape { + INNER_LEFT, + INNER_RIGHT, + OUTER_LEFT, + OUTER_RIGHT, + STRAIGHT; + + public static StairShape getByName(String name) { + for (StairShape one : StairShape.values()) { + if (one.toString().equalsIgnoreCase(name)) + return one; + } + return null; + } + } + + private Block block; + private Integer data = null; + private Object blockd = null; + + public CMIBlock(Block block) { + this.block = block; + } + + @Deprecated + public blockDirection getDirection() { + + return blockDirection.getByDir(block.getData()) == null ? blockDirection.none : blockDirection.getByDir(block.getData()); + } + + public boolean isWaterlogged() { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + if (block.getBlockData() instanceof org.bukkit.block.data.Waterlogged) { + org.bukkit.block.data.Waterlogged wl = (Waterlogged) block.getBlockData(); + return wl.isWaterlogged(); + } + } + + CMIMaterial mat = CMIMaterial.get(block); + switch (mat) { + case WATER: + case LEGACY_STATIONARY_WATER: + case BUBBLE_COLUMN: + case KELP_PLANT: + case KELP: + case SEAGRASS: + case TALL_SEAGRASS: + return true; + default: + break; + } + + return false; + } + + public Bisect getBisect() { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + org.bukkit.block.data.BlockData blockData = block.getBlockData(); + if (!(blockData instanceof org.bukkit.block.data.Bisected)) + return null; + + org.bukkit.block.data.Bisected half = (org.bukkit.block.data.Bisected) blockData; + + switch (half.getHalf()) { + case TOP: + return Bisect.TOP; + case BOTTOM: + return Bisect.BOTTOM; + } + } + + return null; + } + + public boolean isAttached() { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + org.bukkit.block.data.BlockData blockData = block.getBlockData(); + if (!(blockData instanceof org.bukkit.block.data.Attachable)) + return false; + org.bukkit.block.data.Attachable half = (org.bukkit.block.data.Attachable) blockData; + return half.isAttached(); + } + + return false; + } + + public Axis getAxis() { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + org.bukkit.block.data.BlockData blockData = block.getBlockData(); + if (!(blockData instanceof org.bukkit.block.data.Orientable)) + return null; + org.bukkit.block.data.Orientable half = (org.bukkit.block.data.Orientable) blockData; + return half.getAxis(); + } + + return null; + } + + public BedPart getBedPart() { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + org.bukkit.block.data.BlockData blockData = block.getBlockData(); + if (!(blockData instanceof org.bukkit.block.data.type.Bed)) + return null; + org.bukkit.block.data.type.Bed half = (org.bukkit.block.data.type.Bed) blockData; + switch (half.getPart()) { + case FOOT: + return BedPart.FOOT; + case HEAD: + return BedPart.HEAD; + default: + break; + } + } + + return null; + } + + public StairShape getStairShape() { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + CMIMaterial cm = CMIMaterial.get(block); + if (cm.isStairs()) { + org.bukkit.block.data.BlockData blockData = block.getBlockData(); + org.bukkit.block.data.type.Stairs stair = ((org.bukkit.block.data.type.Stairs) blockData); + org.bukkit.block.data.type.Stairs.Shape shape = stair.getShape(); + return StairShape.getByName(shape.toString()); + } + } + return null; + } + + public BlockFace getFacing() { + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + org.bukkit.block.data.BlockData blockData = block.getBlockData(); + if (blockData instanceof org.bukkit.block.data.Directional) { + org.bukkit.block.data.Directional directional = blockd == null + ? (org.bukkit.block.data.Directional) blockData.clone() + : (org.bukkit.block.data.Directional) blockd; + + return directional.getFacing(); + } + if (blockData instanceof org.bukkit.block.data.Rotatable) { + org.bukkit.block.data.Rotatable directional = blockd == null ? (org.bukkit.block.data.Rotatable) blockData.clone() + : (org.bukkit.block.data.Rotatable) blockd; + return directional.getRotation(); + } + } + + try { + CMIMaterial cm = CMIMaterial.get(block); + switch (cm) { + case COMPARATOR: + org.bukkit.material.Comparator Comparator2 = (org.bukkit.material.Comparator) block.getState().getData(); + return Comparator2.getFacing(); + case REPEATER: + org.bukkit.material.Diode diode = (org.bukkit.material.Diode) block.getState().getData(); + return diode.getFacing(); + case DISPENSER: + org.bukkit.material.Dispenser Dispenser = (org.bukkit.material.Dispenser) block.getState().getData(); + return Dispenser.getFacing(); + case HOPPER: + org.bukkit.material.Hopper Hopper = (org.bukkit.material.Hopper) block.getState().getData(); + return Hopper.getFacing(); + case LEVER: + org.bukkit.material.Lever Lever = (org.bukkit.material.Lever) block.getState().getData(); + return Lever.getFacing(); + case TRIPWIRE_HOOK: + org.bukkit.material.TripwireHook TripwireHook = (org.bukkit.material.TripwireHook) block.getState().getData(); + return TripwireHook.getFacing(); + } + + if (cm.isSign()) { + org.bukkit.material.Sign sign = (org.bukkit.material.Sign) block.getState().getData(); + return sign.getFacing(); + } + + if (cm.isSkull()) { + org.bukkit.material.Skull Skull = (org.bukkit.material.Skull) block.getState().getData(); + return Skull.getFacing(); + } + if (cm.isBed()) { + org.bukkit.material.Bed mat = (org.bukkit.material.Bed) block.getState().getData(); + return mat.getFacing(); + } + + if (cm.isDoor()) { + org.bukkit.material.Door mat = (org.bukkit.material.Door) block.getState().getData(); + return mat.getFacing(); + } + if (cm.isGate()) { + org.bukkit.material.Gate mat = (org.bukkit.material.Gate) block.getState().getData(); + return mat.getFacing(); + } + + String stringname = this.block.getType().name(); + + if (stringname.contains("_STAIRS")) { + org.bukkit.material.Stairs mat = (org.bukkit.material.Stairs) block.getState().getData(); + + return mat.getFacing(); + } + if (stringname.contains("BANNER")) { + org.bukkit.material.Banner Banner2 = (org.bukkit.material.Banner) block.getState().getData(); + return Banner2.getFacing(); + } + + if (stringname.contains("OBSERVER")) { + org.bukkit.material.Observer Banner2 = (org.bukkit.material.Observer) block.getState().getData(); + return Banner2.getFacing(); + } + + if (stringname.contains("PISTON_BASE")) { + org.bukkit.material.PistonBaseMaterial Banner2 = (org.bukkit.material.PistonBaseMaterial) block.getState().getData(); + return Banner2.getFacing(); + } + + if (stringname.contains("PISTON_EXTENSION")) { + org.bukkit.material.PistonExtensionMaterial Banner2 = (org.bukkit.material.PistonExtensionMaterial) block.getState().getData(); + return Banner2.getFacing(); + } + } catch (Exception e) { + } + + return null; + } + + public CMIBlock flip(FlipDirection direction, boolean angle) { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + CMIMaterial cmat = CMIMaterial.get(this.block); + org.bukkit.block.data.BlockData blockData = block.getBlockData().clone(); + switch (direction) { + case UP_DOWN: + if (blockData instanceof org.bukkit.block.data.Bisected) { + org.bukkit.block.data.Bisected half = blockd == null || !(blockd instanceof org.bukkit.block.data.Bisected) + ? (org.bukkit.block.data.Bisected) blockData.clone() + : (org.bukkit.block.data.Bisected) blockd; + if (half != null) { + switch (half.getHalf()) { + case TOP: + half.setHalf(org.bukkit.block.data.Bisected.Half.BOTTOM); + break; + case BOTTOM: + half.setHalf(org.bukkit.block.data.Bisected.Half.TOP); + break; + } + if (this.blockd == null) + this.blockd = half; + } + } + break; + } + + if (blockData instanceof org.bukkit.block.data.Directional) { + org.bukkit.block.data.Directional directional = blockd == null + ? (org.bukkit.block.data.Directional) blockData.clone() + : (org.bukkit.block.data.Directional) blockd; + if (directional != null) { + org.bukkit.block.BlockFace face = directional.getFacing(); + switch (direction) { + case NORTH_SOUTH: + + if (angle) { + switch (face) { + case NORTH: + directional.setFacing(BlockFace.EAST); + break; + case SOUTH: + directional.setFacing(BlockFace.WEST); + break; + case WEST: + directional.setFacing(BlockFace.SOUTH); + break; + case EAST: + directional.setFacing(BlockFace.NORTH); + break; + } + } else { + switch (face) { + case NORTH: + directional.setFacing(BlockFace.SOUTH); + break; + case SOUTH: + directional.setFacing(BlockFace.NORTH); + break; + } + } + + break; + case WEST_EAST: + + if (angle) { + switch (face) { + case WEST: + directional.setFacing(BlockFace.NORTH); + break; + case EAST: + directional.setFacing(BlockFace.SOUTH); + break; + case NORTH: + directional.setFacing(BlockFace.WEST); + break; + case SOUTH: + directional.setFacing(BlockFace.EAST); + break; + } + } else { + switch (face) { + case WEST: + directional.setFacing(BlockFace.EAST); + break; + case EAST: + directional.setFacing(BlockFace.WEST); + break; + } + } + + break; + case UP_DOWN: + switch (face) { + case UP: + directional.setFacing(BlockFace.DOWN); + break; + case DOWN: + directional.setFacing(BlockFace.UP); + break; + } + break; + } + + if (this.blockd == null) + this.blockd = directional; + } + } + + if (cmat.isStairs()) { + org.bukkit.block.data.type.Stairs stair = ((org.bukkit.block.data.type.Stairs) this.blockd); + org.bukkit.block.data.type.Stairs.Shape shape = stair.getShape(); + org.bukkit.block.BlockFace face = stair.getFacing(); + switch (direction) { + case NORTH_SOUTH: + case WEST_EAST: + switch (shape) { + case INNER_LEFT: + stair.setShape(Shape.INNER_RIGHT); + break; + case INNER_RIGHT: + stair.setShape(Shape.INNER_LEFT); + break; + case OUTER_LEFT: + stair.setShape(Shape.OUTER_RIGHT); + break; + case OUTER_RIGHT: + stair.setShape(Shape.OUTER_LEFT); + break; + } + break; + } + } + + if (blockData instanceof org.bukkit.block.data.Rotatable) { + org.bukkit.block.data.Rotatable directional = blockd == null ? (org.bukkit.block.data.Rotatable) blockData.clone() + : (org.bukkit.block.data.Rotatable) blockd; + + switch (directional.getRotation()) { + case NORTH: + directional.setRotation(BlockFace.SOUTH); + break; + case NORTH_NORTH_EAST: + directional.setRotation(BlockFace.SOUTH_SOUTH_WEST); + break; + case NORTH_EAST: + directional.setRotation(BlockFace.SOUTH_WEST); + break; + case EAST_NORTH_EAST: + directional.setRotation(BlockFace.WEST_SOUTH_WEST); + break; + case EAST: + directional.setRotation(BlockFace.WEST); + break; + case EAST_SOUTH_EAST: + directional.setRotation(BlockFace.WEST_NORTH_WEST); + break; + case SOUTH_EAST: + directional.setRotation(BlockFace.NORTH_WEST); + break; + case SOUTH_SOUTH_EAST: + directional.setRotation(BlockFace.NORTH_NORTH_WEST); + break; + case SOUTH: + directional.setRotation(BlockFace.NORTH); + break; + case SOUTH_SOUTH_WEST: + directional.setRotation(BlockFace.NORTH_NORTH_EAST); + break; + case SOUTH_WEST: + directional.setRotation(BlockFace.NORTH_EAST); + break; + case WEST_SOUTH_WEST: + directional.setRotation(BlockFace.EAST_NORTH_EAST); + break; + case WEST: + directional.setRotation(BlockFace.EAST); + break; + case WEST_NORTH_WEST: + directional.setRotation(BlockFace.EAST_SOUTH_EAST); + break; + case NORTH_WEST: + directional.setRotation(BlockFace.SOUTH_EAST); + break; + case NORTH_NORTH_WEST: + directional.setRotation(BlockFace.SOUTH_SOUTH_EAST); + break; + } + if (this.blockd == null) + this.blockd = directional; + } + + if (!cmat.isWall() && !cmat.isGlassPane() && !cmat.isFence() && !cmat.equals(CMIMaterial.IRON_BARS)) { + if (this.blockd == null) + this.blockd = blockData.clone(); + } + + return this; + + } + + int flipX = 0; + int flipY = 0; + int flipZ = 0; + + Material type = block.getType(); + this.data = this.data == null ? block.getData() : this.data; + + CMIMaterial cmat = CMIMaterial.get(block); + + try { + switch (direction) { + case NORTH_SOUTH: + flipZ = 1; + break; + + case WEST_EAST: + flipX = 1; + break; + + case UP_DOWN: + flipY = 1; + break; + } + + if (cmat.isButton()) { + switch (data & ~0x8) { + case 1: + this.data = data + flipX; + break; + case 2: + this.data = data - flipX; + break; + case 3: + this.data = data + flipZ; + break; + case 4: + this.data = data - flipZ; + break; + case 0: + case 5: + this.data = data ^ (flipY * 5); + break; + } + } else if (cmat.isSlab()) { + this.data = data ^ (flipY << 3); + } else if (cmat.isDoor()) { + // Only bottom part + if ((data & 0x8) == 0) { + switch (data & 0x3) { + case 0: + this.data = data + flipX + flipZ * 3; + break; + case 1: + this.data = data - flipX + flipZ; + break; + case 2: + this.data = data + flipX - flipZ; + break; + case 3: + this.data = data - flipX - flipZ * 3; + break; + } + } + } else if (cmat.isTrapDoor()) { + switch (data & 0x3) { + case 0: + case 1: + this.data = data ^ flipZ; + break; + case 2: + case 3: + this.data = data ^ flipX; + break; + } + } else if (cmat.isBed()) { + switch (data & 0x3) { + case 0: + case 2: + this.data = data ^ flipZ << 1; + break; + case 1: + case 3: + this.data = data ^ flipX << 1; + break; + } + } else if (cmat.isSign()) { + switch (direction) { + case NORTH_SOUTH: + this.data = (16 - data) & 0xf; + break; + case WEST_EAST: + this.data = (8 - data) & 0xf; + break; + default: + } + } + + switch (CMIMaterial.get(block)) { + case TORCH: + case REDSTONE_TORCH: +// case UNLIT_REDSTONE_TORCH: + if (data < 1 || data > 4) + break; + switch (data) { + case 1: + this.data = data + flipX; + break; + case 2: + this.data = data - flipX; + break; + case 3: + this.data = data + flipZ; + break; + case 4: + this.data = data - flipZ; + break; + } + break; + + case LEVER: + switch (data & ~0x8) { + case 1: + this.data = data + flipX; + break; + case 2: + this.data = data - flipX; + break; + case 3: + this.data = data + flipZ; + break; + case 4: + this.data = data - flipZ; + break; + case 5: + case 7: + this.data = data ^ flipY << 1; + break; + case 6: + case 0: + this.data = data ^ flipY * 6; + break; + } + break; + case RAIL: + switch (data) { + case 6: + this.data = data + flipX + flipZ * 3; + break; + case 7: + this.data = data - flipX + flipZ; + break; + case 8: + this.data = data + flipX - flipZ; + break; + case 9: + this.data = data - flipX - flipZ * 3; + break; + } + + case POWERED_RAIL: + case DETECTOR_RAIL: + case ACTIVATOR_RAIL: + switch (data & 0x7) { + case 0: + case 1: + this.data = data; + break; + case 2: + case 3: + this.data = data ^ flipX; + break; + case 4: + case 5: + this.data = data ^ flipZ; + break; + } + break; + + case LADDER: + case WALL_SIGN: + case CHEST: + case FURNACE: + case LEGACY_BURNING_FURNACE: + case ENDER_CHEST: + case TRAPPED_CHEST: + case HOPPER: + int extra = data & 0x8; + int withoutFlags = data & ~0x8; + switch (withoutFlags) { + case 2: + case 3: + this.data = (data ^ flipZ) | extra; + break; + case 4: + case 5: + this.data = (data ^ flipX) | extra; + break; + } + break; + + case DROPPER: + case DISPENSER: + int dispPower = data & 0x8; + switch (data & ~0x8) { + case 2: + case 3: + this.data = (data ^ flipZ) | dispPower; + break; + case 4: + case 5: + this.data = (data ^ flipX) | dispPower; + break; + case 0: + case 1: + this.data = (data ^ flipY) | dispPower; + break; + } + break; + + case PUMPKIN: + case JACK_O_LANTERN: + if (data > 3) + break; + case REPEATER: + case LEGACY_DIODE_BLOCK_OFF: + case LEGACY_DIODE_BLOCK_ON: + case LEGACY_REDSTONE_COMPARATOR_OFF: + case LEGACY_REDSTONE_COMPARATOR_ON: + case COMPARATOR: + case COCOA: + case TRIPWIRE_HOOK: + switch (data & 0x3) { + case 0: + case 2: + this.data = data ^ (flipZ << 1); + break; + case 1: + case 3: + this.data = data ^ (flipX << 1); + break; + } + break; + case PISTON_HEAD: + case STICKY_PISTON: + case MOVING_PISTON: + switch (data & ~0x8) { + case 0: + case 1: + this.data = data ^ flipY; + break; + case 2: + case 3: + this.data = data ^ flipZ; + break; + case 4: + case 5: + this.data = data ^ flipX; + break; + } + break; + + case RED_MUSHROOM: + case BROWN_MUSHROOM: + switch (data) { + case 1: + case 4: + case 7: + data += flipX * 2; + break; + case 3: + case 6: + case 9: + data -= flipX * 2; + break; + } + switch (data) { + case 1: + case 2: + case 3: + this.data = data + flipZ * 6; + break; + case 7: + case 8: + case 9: + this.data = data - flipZ * 6; + break; + } + break; + + case VINE: + int bit1 = 0, bit2 = 0; + switch (direction) { + case NORTH_SOUTH: + bit1 = 0x2; + bit2 = 0x8; + break; + case WEST_EAST: + bit1 = 0x1; + bit2 = 0x4; + break; + default: + this.data = data; + break; + } + int newData = data & ~(bit1 | bit2); + if ((data & bit1) != 0) + newData |= bit2; + if ((data & bit2) != 0) + newData |= bit1; + this.data = newData; + break; + + case LEGACY_SKULL: + switch (data) { + case 2: + case 3: + this.data = data ^ flipZ; + break; + case 4: + case 5: + this.data = data ^ flipX; + break; + } + break; + + case ANVIL: + switch (data & 0x3) { + case 0: + case 2: + this.data = data ^ flipZ << 1; + break; + case 1: + case 3: + this.data = data ^ flipX << 1; + break; + } + } + + if (cmat.isFence()) { + switch (data & 0x3) { + case 0: + case 2: + this.data = data ^ flipZ << 1; + break; + case 1: + case 3: + this.data = data ^ flipX << 1; + break; + } + } else if (cmat.isStairs()) { + + data ^= flipY << 2; + switch (data) { + case 0: + case 1: + case 4: + case 5: + this.data = data ^ flipX; + break; + case 2: + case 3: + case 6: + case 7: + this.data = data ^ flipZ; + break; + } + } + + if (type.name().contains("TERRACOTTA")) { + switch (data & 0x3) { + case 0: + case 2: + this.data = data ^ flipZ << 1; + break; + case 1: + case 3: + this.data = data ^ flipX << 1; + break; + } + } + + } catch (Exception e) { + this.data = data; + } + return this; + } + + public CMIBlock rotate90Reverse() { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + + CMIMaterial cmat = CMIMaterial.get(this.block); + org.bukkit.block.data.BlockData blockData = block.getBlockData(); + + if (blockData instanceof org.bukkit.block.data.Directional) { + org.bukkit.block.data.Directional directional = blockd == null ? (org.bukkit.block.data.Directional) blockData.clone() + : (org.bukkit.block.data.Directional) blockd; + org.bukkit.block.BlockFace face = directional.getFacing(); + + switch (directional.getFacing()) { + case NORTH: + directional.setFacing(BlockFace.WEST); + break; + case EAST: + directional.setFacing(BlockFace.NORTH); + break; + case SOUTH: + directional.setFacing(BlockFace.EAST); + break; + case WEST: + directional.setFacing(BlockFace.SOUTH); + break; + + } + + if (this.blockd == null) + this.blockd = directional.clone(); + + } + + if (blockData instanceof org.bukkit.block.data.Rotatable) { + + org.bukkit.block.data.Rotatable directional = blockd == null ? (org.bukkit.block.data.Rotatable) blockData.clone() + : (org.bukkit.block.data.Rotatable) blockd; + + org.bukkit.block.BlockFace face = directional.getRotation(); + + switch (face) { + case NORTH: + directional.setRotation(BlockFace.WEST); + break; + case NORTH_NORTH_EAST: + directional.setRotation(BlockFace.WEST_NORTH_WEST); + break; + case NORTH_EAST: + directional.setRotation(BlockFace.NORTH_WEST); + break; + case EAST_NORTH_EAST: + directional.setRotation(BlockFace.NORTH_NORTH_WEST); + break; + case EAST: + directional.setRotation(BlockFace.NORTH); + break; + case EAST_SOUTH_EAST: + directional.setRotation(BlockFace.NORTH_NORTH_EAST); + break; + case SOUTH_EAST: + directional.setRotation(BlockFace.NORTH_EAST); + break; + case SOUTH_SOUTH_EAST: + directional.setRotation(BlockFace.EAST_NORTH_EAST); + break; + case SOUTH: + directional.setRotation(BlockFace.EAST); + break; + case SOUTH_SOUTH_WEST: + directional.setRotation(BlockFace.EAST_SOUTH_EAST); + break; + case SOUTH_WEST: + directional.setRotation(BlockFace.SOUTH_EAST); + break; + case WEST_SOUTH_WEST: + directional.setRotation(BlockFace.SOUTH_SOUTH_EAST); + break; + case WEST: + directional.setRotation(BlockFace.SOUTH); + break; + case WEST_NORTH_WEST: + directional.setRotation(BlockFace.SOUTH_SOUTH_WEST); + break; + case NORTH_WEST: + directional.setRotation(BlockFace.SOUTH_WEST); + break; + case NORTH_NORTH_WEST: + directional.setRotation(BlockFace.WEST_SOUTH_WEST); + break; + } + if (this.blockd == null) + this.blockd = directional; + return this; + + } else { + if (this.blockd == null) + this.blockd = blockData.clone(); + return this; + } + } + + Material type = block.getType(); + this.data = this.data == null ? block.getData() : this.data; + + CMIMaterial cmat = CMIMaterial.get(block); + + try { + + switch (cmat) { + case TORCH: + case LEGACY_REDSTONE_TORCH_OFF: + case LEGACY_REDSTONE_TORCH_ON: + switch (data) { + case 1: + this.data = 3; + break; + case 2: + this.data = 4; + break; + case 3: + this.data = 2; + break; + case 4: + this.data = 1; + break; + } + case RAIL: + switch (data) { + case 6: + this.data = 7; + break; + case 7: + this.data = 8; + break; + case 8: + this.data = 9; + break; + case 9: + this.data = 6; + break; + } + case POWERED_RAIL: + case DETECTOR_RAIL: + case ACTIVATOR_RAIL: + switch (data & 0x7) { + case 0: + this.data = 1 | (data & ~0x7); + break; + case 1: + this.data = 0 | (data & ~0x7); + break; + case 2: + this.data = 5 | (data & ~0x7); + break; + case 3: + this.data = 4 | (data & ~0x7); + break; + case 4: + this.data = 2 | (data & ~0x7); + break; + case 5: + this.data = 3 | (data & ~0x7); + break; + } + break; + + case STONE_BUTTON: + case OAK_BUTTON: { + int thrown = data & 0x8; + switch (data & ~0x8) { + case 1: + this.data = 3 | thrown; + break; + case 2: + this.data = 4 | thrown; + break; + case 3: + this.data = 2 | thrown; + break; + case 4: + this.data = 1 | thrown; + break; + // 0 and 5 are vertical + } + break; + } + + case LEVER: { + int thrown = data & 0x8; + switch (data & ~0x8) { + case 1: + this.data = 3 | thrown; + break; + case 2: + this.data = 4 | thrown; + break; + case 3: + this.data = 2 | thrown; + break; + case 4: + this.data = 1 | thrown; + break; + case 5: + this.data = 6 | thrown; + break; + case 6: + this.data = 5 | thrown; + break; + case 7: + this.data = 0 | thrown; + break; + case 0: + this.data = 7 | thrown; + break; + } + break; + } + + case OAK_DOOR: + case IRON_DOOR: + if ((data & 0x8) != 0) { + // door top halves contain no orientation information + break; + } + + /* FALL-THROUGH */ + + case COCOA: + case TRIPWIRE_HOOK: { + int extra = data & ~0x3; + int withoutFlags = data & 0x3; + switch (withoutFlags) { + case 0: + this.data = 1 | extra; + break; + case 1: + this.data = 2 | extra; + break; + case 2: + this.data = 3 | extra; + break; + case 3: + this.data = 0 | extra; + break; + } + break; + } + case LEGACY_SIGN_POST: + this.data = (data + 4) % 16; + break; + + case LADDER: + case WALL_SIGN: + case CHEST: + case FURNACE: + case LEGACY_BURNING_FURNACE: + case ENDER_CHEST: + case TRAPPED_CHEST: + case HOPPER: { + int extra = data & 0x8; + int withoutFlags = data & ~0x8; + switch (withoutFlags) { + case 2: + this.data = 5 | extra; + break; + case 3: + this.data = 4 | extra; + break; + case 4: + this.data = 2 | extra; + break; + case 5: + this.data = 3 | extra; + break; + } + break; + } + case DISPENSER: + case DROPPER: + int dispPower = data & 0x8; + switch (data & ~0x8) { + case 2: + this.data = 5 | dispPower; + break; + case 3: + this.data = 4 | dispPower; + break; + case 4: + this.data = 2 | dispPower; + break; + case 5: + this.data = 3 | dispPower; + break; + } + break; + + case PUMPKIN: + case JACK_O_LANTERN: + switch (data) { + case 0: + this.data = 1; + break; + case 1: + this.data = 2; + break; + case 2: + this.data = 3; + break; + case 3: + this.data = 0; + break; + } + break; + + case HAY_BLOCK: + case OAK_LOG: + case BIRCH_LOG: + case SPRUCE_LOG: + case JUNGLE_LOG: + if (data >= 4 && data <= 11) + data ^= 0xc; + break; + + case LEGACY_DIODE_BLOCK_OFF: + case LEGACY_DIODE_BLOCK_ON: + case LEGACY_REDSTONE_COMPARATOR_OFF: + case LEGACY_REDSTONE_COMPARATOR_ON: + int dir = data & 0x03; + int delay = data - dir; + switch (dir) { + case 0: + this.data = 1 | delay; + break; + case 1: + this.data = 2 | delay; + break; + case 2: + this.data = 3 | delay; + break; + case 3: + this.data = 0 | delay; + break; + } + break; + case OAK_TRAPDOOR: + case IRON_TRAPDOOR: + int withoutOrientation = data & ~0x3; + int orientation = data & 0x3; + switch (orientation) { + case 0: + this.data = 3 | withoutOrientation; + break; + case 1: + this.data = 2 | withoutOrientation; + break; + case 2: + this.data = 0 | withoutOrientation; + break; + case 3: + this.data = 1 | withoutOrientation; + break; + } + break; + + case PISTON_HEAD: + case STICKY_PISTON: + case MOVING_PISTON: + final int rest = data & ~0x7; + switch (data & 0x7) { + case 2: + this.data = 5 | rest; + break; + case 3: + this.data = 4 | rest; + break; + case 4: + this.data = 2 | rest; + break; + case 5: + this.data = 3 | rest; + break; + } + break; + + case RED_MUSHROOM: + case BROWN_MUSHROOM: + if (data >= 10) { + this.data = data; + break; + } + this.data = (data * 3) % 10; + break; + + case VINE: + this.data = ((data << 1) | (data >> 3)) & 0xf; + break; + case ANVIL: + int damage = data & ~0x3; + switch (data & 0x3) { + case 0: + this.data = 3 | damage; + break; + case 2: + this.data = 1 | damage; + break; + case 1: + this.data = 0 | damage; + break; + case 3: + this.data = 2 | damage; + break; + } + break; + case LEGACY_SKULL: + switch (data) { + case 2: + this.data = 5; + break; + case 3: + this.data = 4; + break; + case 4: + this.data = 2; + break; + case 5: + this.data = 3; + break; + } + } + + if (cmat.isBed()) { + this.data = data & ~0x3 | (data + 1) & 0x3; + } else if (cmat.isGate()) { + this.data = ((data + 1) & 0x3) | (data & ~0x3); + } else if (cmat.isStairs()) { + switch (data) { + case 0: + this.data = 2; + break; + case 1: + this.data = 3; + break; + case 2: + this.data = 1; + break; + case 3: + this.data = 0; + break; + case 4: + this.data = 6; + break; + case 5: + this.data = 7; + break; + case 6: + this.data = 5; + break; + case 7: + this.data = 4; + break; + } + } + + if (type.name().contains("TERRACOTTA")) { + int extra = data & ~0x3; + int withoutFlags = data & 0x3; + switch (withoutFlags) { + case 0: + this.data = 1 | extra; + break; + case 1: + this.data = 2 | extra; + break; + case 2: + this.data = 3 | extra; + break; + case 3: + this.data = 0 | extra; + break; + } + + } + + } catch (Exception e) { + this.data = data; + } + return this; + + } + + public CMIBlock rotate90() { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + + CMIMaterial cmat = CMIMaterial.get(this.block); + org.bukkit.block.data.BlockData blockData = block.getBlockData().clone(); + + if (blockData instanceof org.bukkit.block.data.Directional) { + + org.bukkit.block.data.Directional directional = blockd == null ? (org.bukkit.block.data.Directional) ((org.bukkit.block.data.Directional) blockData).clone() + : (org.bukkit.block.data.Directional) blockd; + +// if (cmat.isStairs()) { + + org.bukkit.block.BlockFace face = directional.getFacing(); + switch (face) { + case NORTH: + directional.setFacing(BlockFace.EAST); + break; + case EAST: + directional.setFacing(BlockFace.SOUTH); + break; + case SOUTH: + directional.setFacing(BlockFace.WEST); + break; + case WEST: + directional.setFacing(BlockFace.NORTH); + break; + } + if (this.blockd == null) + this.blockd = directional.clone(); + return this; + + } + + if (blockData instanceof org.bukkit.block.data.Rotatable) { + + org.bukkit.block.data.Rotatable directional = blockd == null ? (org.bukkit.block.data.Rotatable) blockData.clone() + : (org.bukkit.block.data.Rotatable) blockd; + + org.bukkit.block.BlockFace face = directional.getRotation(); + + switch (face) { + case NORTH: + directional.setRotation(BlockFace.EAST); + break; + case NORTH_NORTH_EAST: + directional.setRotation(BlockFace.EAST_SOUTH_EAST); + break; + case NORTH_EAST: + directional.setRotation(BlockFace.SOUTH_EAST); + break; + case EAST_NORTH_EAST: + directional.setRotation(BlockFace.SOUTH_SOUTH_EAST); + break; + case EAST: + directional.setRotation(BlockFace.SOUTH); + break; + case EAST_SOUTH_EAST: + directional.setRotation(BlockFace.SOUTH_SOUTH_WEST); + break; + case SOUTH_EAST: + directional.setRotation(BlockFace.SOUTH_WEST); + break; + case SOUTH_SOUTH_EAST: + directional.setRotation(BlockFace.WEST_SOUTH_WEST); + break; + case SOUTH: + directional.setRotation(BlockFace.WEST); + break; + case SOUTH_SOUTH_WEST: + directional.setRotation(BlockFace.WEST_NORTH_WEST); + break; + case SOUTH_WEST: + directional.setRotation(BlockFace.NORTH_WEST); + break; + case WEST_SOUTH_WEST: + directional.setRotation(BlockFace.NORTH_NORTH_WEST); + break; + case WEST: + directional.setRotation(BlockFace.NORTH); + break; + case WEST_NORTH_WEST: + directional.setRotation(BlockFace.NORTH_NORTH_EAST); + break; + case NORTH_WEST: + directional.setRotation(BlockFace.NORTH_EAST); + break; + case NORTH_NORTH_WEST: + directional.setRotation(BlockFace.EAST_NORTH_EAST); + break; + } + + if (this.blockd == null) + this.blockd = directional; + } else { + if (this.blockd == null) + this.blockd = blockData.clone(); + return this; + } + } + + Material type = block.getType(); + this.data = this.data == null ? block.getData() : this.data; + + CMIMaterial cmat = CMIMaterial.get(block); + + try { + switch (cmat) { + case TORCH: + case LEGACY_REDSTONE_TORCH_OFF: + case LEGACY_REDSTONE_TORCH_ON: + switch (data) { + case 3: + this.data = 1; + break; + case 4: + this.data = 2; + break; + case 2: + this.data = 3; + break; + case 1: + this.data = 4; + break; + } + break; + + case RAIL: + switch (data) { + case 7: + this.data = 6; + break; + case 8: + this.data = 7; + break; + case 9: + this.data = 8; + break; + case 6: + this.data = 9; + break; + } + case POWERED_RAIL: + case DETECTOR_RAIL: + case ACTIVATOR_RAIL: + int power = data & ~0x7; + switch (data & 0x7) { + case 1: + this.data = 0 | power; + break; + case 0: + this.data = 1 | power; + break; + case 5: + this.data = 2 | power; + break; + case 4: + this.data = 3 | power; + break; + case 2: + this.data = 4 | power; + break; + case 3: + this.data = 5 | power; + break; + } + break; + + case STONE_BUTTON: + case OAK_BUTTON: { + int thrown = data & 0x8; + switch (data & ~0x8) { + case 3: + this.data = 1 | thrown; + break; + case 4: + this.data = 2 | thrown; + break; + case 2: + this.data = 3 | thrown; + break; + case 1: + this.data = 4 | thrown; + break; + } + break; + } + + case LEVER: { + int thrown = data & 0x8; + switch (data & ~0x8) { + case 3: + this.data = 1 | thrown; + break; + case 4: + this.data = 2 | thrown; + break; + case 2: + this.data = 3 | thrown; + break; + case 1: + this.data = 4 | thrown; + break; + case 6: + this.data = 5 | thrown; + break; + case 5: + this.data = 6 | thrown; + break; + case 0: + this.data = 7 | thrown; + break; + case 7: + this.data = 0 | thrown; + break; + } + break; + } + + case OAK_DOOR: + case IRON_DOOR: + if ((data & 0x8) != 0) { + break; + } + case COCOA: + case TRIPWIRE_HOOK: { + int extra = data & ~0x3; + int withoutFlags = data & 0x3; + switch (withoutFlags) { + case 1: + this.data = 0 | extra; + break; + case 2: + this.data = 1 | extra; + break; + case 3: + this.data = 2 | extra; + break; + case 0: + this.data = 3 | extra; + break; + } + break; + } + case SIGN: + this.data = (data + 12) % 16; + + break; + case LADDER: + case WALL_SIGN: + case CHEST: + case FURNACE: + case LEGACY_BURNING_FURNACE: + case ENDER_CHEST: + case TRAPPED_CHEST: + case HOPPER: { + int extra = data & 0x8; + int withoutFlags = data & ~0x8; + switch (withoutFlags) { + case 5: + this.data = 2 | extra; + break; + case 4: + this.data = 3 | extra; + break; + case 2: + this.data = 4 | extra; + break; + case 3: + this.data = 5 | extra; + break; + } + break; + } + case DISPENSER: + case DROPPER: + int dispPower = data & 0x8; + switch (data & ~0x8) { + case 5: + this.data = 2 | dispPower; + break; + case 4: + this.data = 3 | dispPower; + break; + case 2: + this.data = 4 | dispPower; + break; + case 3: + this.data = 5 | dispPower; + break; + } + break; + case PUMPKIN: + case JACK_O_LANTERN: + switch (data) { + case 1: + this.data = 0; + break; + case 2: + this.data = 1; + break; + case 3: + this.data = 2; + break; + case 0: + this.data = 3; + break; + } + break; + + case HAY_BLOCK: + case OAK_LOG: + case BIRCH_LOG: + case SPRUCE_LOG: + case JUNGLE_LOG: + if (data >= 4 && data <= 11) + data ^= 0xc; + break; + + case LEGACY_DIODE_BLOCK_OFF: + case LEGACY_DIODE_BLOCK_ON: + case LEGACY_REDSTONE_COMPARATOR_OFF: + case LEGACY_REDSTONE_COMPARATOR_ON: + int dir = data & 0x03; + int delay = data - dir; + switch (dir) { + case 1: + this.data = 0 | delay; + break; + case 2: + this.data = 1 | delay; + break; + case 3: + this.data = 2 | delay; + break; + case 0: + this.data = 3 | delay; + break; + } + break; + + case OAK_TRAPDOOR: + case IRON_TRAPDOOR: + int withoutOrientation = data & ~0x3; + int orientation = data & 0x3; + switch (orientation) { + case 3: + this.data = 0 | withoutOrientation; + break; + case 2: + this.data = 1 | withoutOrientation; + break; + case 0: + this.data = 2 | withoutOrientation; + break; + case 1: + this.data = 3 | withoutOrientation; + break; + } + + case PISTON_HEAD: + case STICKY_PISTON: + case MOVING_PISTON: + final int rest = data & ~0x7; + switch (data & 0x7) { + case 5: + this.data = 2 | rest; + break; + case 4: + this.data = 3 | rest; + break; + case 2: + this.data = 4 | rest; + break; + case 3: + this.data = 5 | rest; + break; + } + break; + case RED_MUSHROOM: + case BROWN_MUSHROOM: + if (data >= 10) { + this.data = data; + break; + } + this.data = (data * 7) % 10; + case VINE: + this.data = ((data >> 1) | (data << 3)) & 0xf; + break; + case ANVIL: + int damage = data & ~0x3; + switch (data & 0x3) { + case 0: + this.data = 1 | damage; + break; + case 2: + this.data = 3 | damage; + break; + case 1: + this.data = 2 | damage; + break; + case 3: + this.data = 0 | damage; + break; + } + break; + case LEGACY_SKULL: + switch (data) { + case 2: + this.data = 4; + break; + case 3: + this.data = 5; + break; + case 4: + this.data = 3; + break; + case 5: + this.data = 2; + break; + } + } + + if (cmat.isBed()) { + this.data = data & ~0x3 | (data - 1) & 0x3; + } else if (cmat.isGate()) { + this.data = ((data + 3) & 0x3) | (data & ~0x3); + } else if (cmat.isStairs()) { + switch (data) { + case 2: + this.data = 0; + break; + case 3: + this.data = 1; + break; + case 1: + this.data = 2; + break; + case 0: + this.data = 3; + break; + case 6: + this.data = 4; + break; + case 7: + this.data = 5; + break; + case 5: + this.data = 6; + break; + case 4: + this.data = 7; + break; + } + } + + if (type.name().contains("TERRACOTTA")) { + int extra = data & ~0x3; + int withoutFlags = data & 0x3; + switch (withoutFlags) { + case 1: + this.data = 0 | extra; + break; + case 2: + this.data = 1 | extra; + break; + case 3: + this.data = 2 | extra; + break; + case 0: + this.data = 3 | extra; + break; + } + } + } catch (Exception e) { + this.data = data; + } + return this; + } + + public Object getData() { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + return this.blockd == null ? this.block.getBlockData().clone() : this.blockd; + } + if (data == null) + return this.block.getData(); + return data.byteValue(); + } + + public CMIBlock setData(Object data) { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + if (data != null) { + org.bukkit.block.data.BlockData blockData = (org.bukkit.block.data.BlockData) data; + this.blockd = blockData.clone(); + } else + this.blockd = data; + } else { + try { + this.data = (int) data; + } catch (ClassCastException e) { + + } + } + return this; + } + + public boolean hasInventory() { + return block.getState() instanceof InventoryHolder; + } + + public Inventory getInventory() { + if (block.getState() instanceof InventoryHolder) { + InventoryHolder holder = (InventoryHolder) block.getState(); + return holder.getInventory(); + } + return null; + } + + public Block getSecondaryBedBlock() { + + if (block == null || !CMIMaterial.isBed(block.getType())) + return null; + + BlockFace facing = getFacing(); + BedPart part = getBedPart(); + + if (facing == null || part == null) + return null; + + Location loc = block.getLocation().clone(); + + switch (facing) { + case WEST: + switch (part) { + case FOOT: + return loc.add(-1, 0, 0).getBlock(); + case HEAD: + return loc.add(1, 0, 0).getBlock(); + } + break; + case EAST: + switch (part) { + case FOOT: + return loc.add(1, 0, 0).getBlock(); + case HEAD: + return loc.add(-1, 0, 0).getBlock(); + } + break; + case NORTH: + switch (part) { + case FOOT: + return loc.add(0, 0, -1).getBlock(); + case HEAD: + return loc.add(0, 0, 1).getBlock(); + } + break; + case SOUTH: + switch (part) { + case FOOT: + return loc.add(0, 0, 1).getBlock(); + case HEAD: + return loc.add(0, 0, -1).getBlock(); + } + break; + } + + return null; + } + + public Block getBedFootBlock() { + + if (block == null || !CMIMaterial.isBed(block.getType())) + return null; + + Block sec = getSecondaryBedBlock(); + + Location loc = this.block.getLocation(); + if (getBedPart() != null) + if (getBedPart() == BedPart.FOOT) { + return block; + } else if (sec != null) { + CMIBlock cbs = new CMIBlock(sec); + if (cbs.getBedPart() != null && cbs.getBedPart() == BedPart.FOOT) { + return sec; + } + } + + return null; + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 595813601..8be93ec49 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -44,6 +44,7 @@ import org.bukkit.metadata.FixedMetadataValue; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; +import com.bekvon.bukkit.cmiLib.CMIBlock; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; @@ -206,7 +207,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (plugin.getItemManager().isIgnored(mat, group, world)) { return; } - + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); if (plugin.getConfigManager().enabledRentSystem() && res != null) { String resname = res.getName(); @@ -399,6 +400,7 @@ public void onChestPlace(BlockPlaceEvent event) { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onChestPlaceNearResidence(BlockPlaceEvent event) { + // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -445,7 +447,6 @@ public void onChestPlaceNearResidence(BlockPlaceEvent event) { ActionBarTitleMessages.send(player, plugin.msg(lm.General_CantPlaceChest)); event.setCancelled(true); } - } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -633,6 +634,20 @@ public void onBlockPlace(BlockPlaceEvent event) { plugin.msg(player, lm.Flag_Deny, Flags.place); return; } + + if (CMIMaterial.isBed(mat)) { + CMIBlock cb = new CMIBlock(block); + Block sec = cb.getSecondaryBedBlock(); + if (sec != null) { + perms = plugin.getPermsByLocForPlayer(sec.getLocation(), player); + hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); + if (!hasplace && !ResPerm.bypass_build.hasPermission(player)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.place); + return; + } + } + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) From 25581d88fb8c1c9a5ca559a9c446026698bea935 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Dec 2019 11:32:28 +0200 Subject: [PATCH 0660/1142] Res auto should take into consideration resadmin command --- src/com/bekvon/bukkit/residence/commands/auto.java | 2 +- .../bukkit/residence/listeners/ResidenceBlockListener.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index bb634b249..2bde1ec3f 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -116,7 +116,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } } - player.performCommand("res create " + resName); + player.performCommand((resadmin ? "resadmin" : "res") + " create " + resName); return true; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 8be93ec49..55c972c49 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -637,7 +637,7 @@ public void onBlockPlace(BlockPlaceEvent event) { if (CMIMaterial.isBed(mat)) { CMIBlock cb = new CMIBlock(block); - Block sec = cb.getSecondaryBedBlock(); + Block sec = cb.getSecondaryBedBlock(); if (sec != null) { perms = plugin.getPermsByLocForPlayer(sec.getLocation(), player); hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); From a4c46bc5867fe293a81d9f14f5044bd24007a567 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Dec 2019 11:37:09 +0200 Subject: [PATCH 0661/1142] Custom value should impact Y in auto command --- src/com/bekvon/bukkit/residence/commands/auto.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 2bde1ec3f..5692851a1 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -17,6 +17,7 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; public class auto implements cmd { @@ -65,6 +66,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Z = group.getMaxZ(); else Z = lenght; + if (lenght > group.getMaxY()) + Y = group.getMaxY(); + else + Y = lenght; } int rX = (X - 1) / 2; @@ -79,6 +84,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman int minY = loc.getBlockY() - rY; int maxY = loc.getBlockY() + rY; + Debug.D(minY + " " + maxY + " " + rY + " " + Y); if (maxY - minY + 1 < Y) maxY++; @@ -104,6 +110,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), minX, minY, minZ), false); plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), maxX, maxY, maxZ), false); + Debug.D(minY + " " + maxY); resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true); if (plugin.getResidenceManager().getByName(resName) != null) { From ef9f6c6d2eb9de0b1693b1574b102cddff1fcd39 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Dec 2019 11:42:16 +0200 Subject: [PATCH 0662/1142] Allow to create residence with auto command by only providing size value --- src/com/bekvon/bukkit/residence/commands/auto.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 5692851a1..592a1449b 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -34,13 +34,21 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman String resName = null; - if (args.length > 1) + int lenght = -1; + if (args.length == 2) + try { + lenght = Integer.parseInt(args[1]); + } catch (Exception | Error e) { + + } + + if (args.length > 1 && lenght == -1) resName = args[1]; else resName = player.getName(); - int lenght = -1; if (args.length == 3) { + resName = args[1]; try { lenght = Integer.parseInt(args[2]); } catch (Exception ex) { @@ -84,7 +92,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman int minY = loc.getBlockY() - rY; int maxY = loc.getBlockY() + rY; - Debug.D(minY + " " + maxY + " " + rY + " " + Y); if (maxY - minY + 1 < Y) maxY++; From 7959283a2915ccf77e1576f4ce11a1f9c301f234 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Dec 2019 13:09:32 +0200 Subject: [PATCH 0663/1142] Fix for trident in nodurability residences --- .../bekvon/bukkit/residence/listeners/SpigotListener.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java index 41df83942..44662c38f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java @@ -29,7 +29,11 @@ public void onItemDamage(PlayerItemDamageEvent event) { ItemStack held = Residence.getInstance().getNms().itemInMainHand(player); if (held.getType() == Material.AIR || held.getDurability() <= 0) return; - + + if (held.getType().toString().equalsIgnoreCase("TRIDENT")) { + return; + } + held.setDurability(held.getDurability()); player.setItemInHand(held); event.setDamage(0); From bc3452fd017c3b2aad84b56735bd8368929fed4d Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Dec 2019 13:22:57 +0200 Subject: [PATCH 0664/1142] Direct support for LuckPerms5 --- .../bukkit/residence/ConfigManager.java | 2 +- .../permissions/LuckPerms5Adapter.java | 37 +++++++++++++++++++ .../permissions/PermissionManager.java | 20 +++++++--- 3 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/permissions/LuckPerms5Adapter.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index bb3048904..b45e59f1a 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -547,7 +547,7 @@ public void UpdateConfigFile() { c.addComment("Global.Optimizations.ShortInfo.Use", "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); - ShortInfoUse = c.get("Global.Optimizations.ShortInfo.Use", false); + ShortInfoUse = c.get("Global.Optimizations.ShortInfo.Use", true); // Vote range c.addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); diff --git a/src/com/bekvon/bukkit/residence/permissions/LuckPerms5Adapter.java b/src/com/bekvon/bukkit/residence/permissions/LuckPerms5Adapter.java new file mode 100644 index 000000000..2fc4cde45 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/permissions/LuckPerms5Adapter.java @@ -0,0 +1,37 @@ +package com.bekvon.bukkit.residence.permissions; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.RegisteredServiceProvider; + +import net.luckperms.api.LuckPerms; +import net.luckperms.api.model.user.User; + +public class LuckPerms5Adapter implements PermissionsInterface { + + LuckPerms api = null; + + public LuckPerms5Adapter() { + RegisteredServiceProvider provider = Bukkit.getServicesManager().getRegistration(LuckPerms.class); + if (provider != null) { + api = provider.getProvider(); + } + } + + @Override + public String getPlayerGroup(Player player) { + User user = api.getUserManager().getUser(player.getUniqueId()); + if (user == null) + return ""; + return user.getPrimaryGroup(); + } + + @Override + public String getPlayerGroup(String player, String world) { + User user = api.getUserManager().getUser(player); + if (user == null) + return ""; + return user.getPrimaryGroup(); + } + +} diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 618515e0f..265cecd53 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -23,6 +23,7 @@ import org.bukkit.permissions.PermissionAttachmentInfo; import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; @@ -120,11 +121,20 @@ private void checkPermissions() { return; } - p = server.getPluginManager().getPlugin("LuckPerms"); - if (p != null) { - perms = new LuckPerms4Adapter(); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found LuckPerms Plugin!"); - return; + PluginManager pluginManager = plugin.getServer().getPluginManager(); + Plugin pl = pluginManager.getPlugin("LuckPerms"); + if (pl != null && pl.isEnabled()) { + Integer ver = plugin.getVersionChecker().convertVersion(pl.getDescription().getVersion()); + if (ver >= 40000 && ver < 50000) { + perms = new LuckPerms4Adapter(); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found LuckPerms4 Plugin!"); + return; + } else if (ver > 50000) { + perms = new LuckPerms5Adapter(); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found LuckPerms5 Plugin!"); + return; + } + plugin.consoleMessage("&cLuckPerms plugin was found but its outdated"); } p = server.getPluginManager().getPlugin("bPermissions"); From e37b3a3af4062211699ed63971bd84470f16e0d5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Dec 2019 13:31:37 +0200 Subject: [PATCH 0665/1142] Cat's are different creature then Ocelot --- src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java index 513bcda96..929846852 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java @@ -10,6 +10,7 @@ import org.bukkit.craftbukkit.v1_14_R1.CraftParticle; import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; import org.bukkit.entity.Bat; +import org.bukkit.entity.Cat; import org.bukkit.entity.Chicken; import org.bukkit.entity.Cod; import org.bukkit.entity.Cow; @@ -84,7 +85,8 @@ public boolean isAnimal(Entity ent) { ent instanceof Turtle || ent instanceof Dolphin || ent instanceof Fox || - ent instanceof Panda); + ent instanceof Panda|| + ent instanceof Cat); } @Override From 7f850794ec603b9b1e373ed7d54a520e9d9c3d4b Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Dec 2019 13:37:32 +0200 Subject: [PATCH 0666/1142] Optimization for BlockPhysicsEvent event in 1.13+ servers with dryup --- src/com/bekvon/bukkit/residence/allNms/v1_13Events.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java index 3a4a979bb..97f897ae3 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java @@ -65,8 +65,8 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; try { - CMIMaterial mat = CMIMaterial.get(event.getChangedType()); - if (mat != CMIMaterial.FARMLAND) + + if (!event.getChangedType().toString().equalsIgnoreCase("FARMLAND")) return; FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); From 50dbc7153f707d77f58995396f8d094a38956e91 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Dec 2019 14:10:14 +0200 Subject: [PATCH 0667/1142] Small optimization for player interact event --- .../listeners/ResidencePlayerListener.java | 76 +++++++++---------- 1 file changed, 35 insertions(+), 41 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 45c703570..b0e206a69 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -730,7 +730,7 @@ public void onSignInteract(PlayerInteractEvent event) { if (s == null) return; - ClaimedResidence res = s.GetResidence(); + ClaimedResidence res = s.getResidence(); boolean ForSale = res.isForSell(); boolean ForRent = res.isForRent(); @@ -953,13 +953,11 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { event.setRespawnLocation(loc); } - @SuppressWarnings("deprecation") private boolean isContainer(Material mat, Block block) { return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container) || plugin.getConfigManager().getCustomContainers().contains(CMIMaterial.get(block)); } - @SuppressWarnings("deprecation") private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { switch (mat.name()) { @@ -1094,14 +1092,14 @@ public void onPlatePress(PlayerInteractEvent event) { Block block = event.getClickedBlock(); if (block == null) return; - CMIMaterial mat = CMIMaterial.get(block); Player player = event.getPlayer(); if (player.hasMetadata("NPC")) return; FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); boolean resadmin = plugin.isResAdminOn(player); + CMIMaterial mat = CMIMaterial.get(block); if (!resadmin) { - boolean hasUseBypass = ResPerm.bypass_use.hasPermission(player); + boolean hasUseBypass = ResPerm.bypass_use.hasPermission(player, 100L); boolean hasuse = perms.playerHas(player, Flags.use, true); boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); if (!hasUseBypass) @@ -1247,13 +1245,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; - String world = player.getWorld().getName(); - - ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = resPlayer.getGroup(); - boolean resadmin = plugin.isResAdminOn(player); - if (!resadmin && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), group, world)) { + if (!resadmin && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld().getName())) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; @@ -1302,44 +1295,45 @@ public void onPlayerInteract(PlayerInteractEvent event) { boolean hasuse = perms.playerHas(player, Flags.use, true) || hasUseBypass; ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); if (res == null || !res.isOwner(player)) { - if (!hasContainerBypass) - for (Entry checkMat : FlagPermissions.getMaterialUseFlagList().entrySet()) { - if (mat != checkMat.getKey()) - continue; + if (!hasContainerBypass) { - if (perms.playerHas(player, checkMat.getValue(), hasuse)) - continue; + Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); - if (hasuse || checkMat.getValue().equals(Flags.container)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); - return; - } + if (result != null) { + main: if (!perms.playerHas(player, result, hasuse)) { - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - switch (checkMat.getValue()) { - case door: - if (ResPerm.bypass_door.hasPermission(player)) - continue; - break; - case button: - if (ResPerm.bypass_button.hasPermission(player)) - continue; - break; + if (hasuse || result.equals(Flags.container)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, result); + return; } - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); - return; - } + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + switch (result) { + case door: + if (ResPerm.bypass_door.hasPermission(player)) + break main; + break; + case button: + if (ResPerm.bypass_button.hasPermission(player)) + break main; + break; + } + + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, result); + return; + } - if (isCanUseEntity_BothClick(mat, block)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, checkMat.getValue()); + if (isCanUseEntity_BothClick(mat, block)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, result); + } + return; } - - return; } + + } } if (!hasContainerBypass) From 32794312a344f4531af5bfa45610be50106d541b Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Dec 2019 14:25:46 +0200 Subject: [PATCH 0668/1142] Lets check by residence player object and not player --- .../bekvon/bukkit/residence/protection/ResidenceManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 0be40454d..71c2744bb 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -511,7 +511,7 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole } } - ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, rPlayer == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); plugin.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return; From 5879141ff678a5c931901aefb16586d35cfabf3c Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Dec 2019 16:53:43 +0200 Subject: [PATCH 0669/1142] Fixing some flag interactions: crafting table, beacon, enchant table, repeater --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b0e206a69..6c323b332 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -970,13 +970,17 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { case "DIODE": case "DIODE_BLOCK_OFF": case "DIODE_BLOCK_ON": + case "COMPARATOR": + case "REPEATER": case "REDSTONE_COMPARATOR": case "REDSTONE_COMPARATOR_OFF": case "REDSTONE_COMPARATOR_ON": case "BED_BLOCK": case "WORKBENCH": + case "CRAFTING_TABLE": case "BREWING_STAND": case "ENCHANTMENT_TABLE": + case "ENCHANTING_TABLE": case "DAYLIGHT_DETECTOR": case "DAYLIGHT_DETECTOR_INVERTED": return true; @@ -1234,6 +1238,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { CMIMaterial heldItem = CMIMaterial.get(iih); Material mat = block.getType(); + Debug.D(mat.toString()); if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block))) { if (!heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) @@ -1290,6 +1295,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { + boolean hasUseBypass = ResPerm.bypass_use.hasPermission(player); boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player); boolean hasuse = perms.playerHas(player, Flags.use, true) || hasUseBypass; From 1e1b01dc99694eedda4e251c53cea5d7348ac949 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Dec 2019 17:16:16 +0200 Subject: [PATCH 0670/1142] Fix for missing feedback message on residence removal by a player --- src/com/bekvon/bukkit/residence/commands/confirm.java | 2 +- .../bekvon/bukkit/residence/protection/ResidenceManager.java | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/confirm.java b/src/com/bekvon/bukkit/residence/commands/confirm.java index ac7296a22..02fb42296 100644 --- a/src/com/bekvon/bukkit/residence/commands/confirm.java +++ b/src/com/bekvon/bukkit/residence/commands/confirm.java @@ -27,7 +27,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (area == null) { plugin.msg(sender, lm.Invalid_Residence); } else { - plugin.getResidenceManager().removeResidence(player, area, resadmin); + plugin.getResidenceManager().removeResidence(sender instanceof Player ? (Player) sender : null, area, resadmin); plugin.deleteConfirm.remove(name); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 71c2744bb..6c2749049 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -568,7 +568,6 @@ public void run() { } }); } - if (plugin.getConfigManager().isRemoveLwcOnDelete()) removeLwcFromResidence(player, res); if (regenerate) { @@ -576,7 +575,6 @@ public void run() { plugin.getSelectionManager().regenerate(one); } } - plugin.msg(player, lm.Residence_Remove, name); } else { String[] split = name.split("\\."); From 93372a05301978863b12dbcad7ec87efee396f22 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 7 Dec 2019 11:00:23 +0200 Subject: [PATCH 0671/1142] Possible fix for issue with air being counted as blacklisted material --- src/com/bekvon/bukkit/residence/itemlist/ItemList.java | 9 ++++++--- .../residence/listeners/ResidencePlayerListener.java | 2 +- src/plugin.yml | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index fda7f97e0..ebffe261d 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -40,7 +40,7 @@ public boolean contains(Material mat) { } public void add(Material mat) { - if (!list.contains(mat)) + if (!list.contains(mat) && mat != null) list.add(mat); } @@ -59,6 +59,8 @@ public void remove(Material mat) { } public boolean isAllowed(Material mat) { + if (mat == null) + return true; if (type == ListType.BLACKLIST) { if (list.contains(mat)) { return false; @@ -74,6 +76,8 @@ public boolean isAllowed(Material mat) { } public boolean isIgnored(Material mat) { + if (mat == null) + return false; if (type == ListType.IGNORELIST) { if (list.contains(mat)) { return true; @@ -94,7 +98,6 @@ public static ItemList readList(ConfigurationSection node) { return ItemList.readList(node, new ItemList()); } - @SuppressWarnings("deprecation") protected static ItemList readList(ConfigurationSection node, ItemList list) { ListType type = ListType.valueOf(node.getString("Type", "").toUpperCase()); list.type = type; @@ -117,7 +120,7 @@ protected static ItemList readList(ConfigurationSection node, ItemList list) { try { Material mat = CMIMaterial.get(parse).getMaterial(); if (mat != null) - list.add( mat); + list.add(mat); } catch (Exception ex) { } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 6c323b332..b0a7e86f7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1238,7 +1238,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { CMIMaterial heldItem = CMIMaterial.get(iih); Material mat = block.getType(); - Debug.D(mat.toString()); + if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block))) { if (!heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) diff --git a/src/plugin.yml b/src/plugin.yml index 4be8323f4..24be69c37 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.7.4 +version: 4.8.8.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 7528e855eefb23b209d00154a14cc8c043cc63ac Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 7 Dec 2019 11:12:44 +0200 Subject: [PATCH 0672/1142] Correct flag reloading --- .../bekvon/bukkit/residence/ConfigManager.java | 3 +-- .../bekvon/bukkit/residence/commands/reload.java | 7 +++++-- .../bukkit/residence/itemlist/WorldItemList.java | 2 ++ .../residence/itemlist/WorldItemManager.java | 4 ++++ .../residence/protection/FlagPermissions.java | 15 ++++----------- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index b45e59f1a..3fa55eb0b 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -23,16 +23,15 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.containers.ELMessageType; import com.bekvon.bukkit.residence.containers.EconomyType; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; public class ConfigManager { protected String defaultGroup; diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index ec7adc875..a639e6308 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -12,8 +12,8 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.itemlist.WorldItemManager; import com.bekvon.bukkit.residence.permissions.PermissionManager; +import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.WorldFlagManager; -import com.bekvon.bukkit.residence.utils.Debug; public class reload implements cmd { @@ -30,7 +30,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } if (args[1].equalsIgnoreCase("lang")) { - plugin.getLM().LanguageReload(); + plugin.getLM().LanguageReload(); plugin.getLocaleManager().LoadLang(plugin.getConfigManager().getLanguage()); sender.sendMessage(plugin.getPrefix() + " Reloaded language file."); return true; @@ -49,6 +49,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.gmanager = new PermissionManager(plugin); plugin.imanager = new WorldItemManager(plugin); plugin.wmanager = new WorldFlagManager(plugin); + + FlagPermissions.initValidFlags(); + sender.sendMessage(plugin.getPrefix() + " Reloaded flags file."); return true; } diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java index c41cb770b..312fcd2c3 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemList.java @@ -25,6 +25,8 @@ public String getGroup() { } public boolean isAllowed(Material mat, String inworld, String ingroup) { + if (mat == null) + return true; if (!listApplicable(inworld, ingroup)) return true; return super.isAllowed(mat); diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java index d4f9a3f36..5b1a7ad47 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java @@ -23,12 +23,16 @@ public WorldItemManager(Residence plugin) { } public boolean isAllowed(Material mat, PermissionGroup group, String world) { + if (mat == null) + return true; if (group == null) return true; return isAllowed(mat, group.getGroupName(), world); } public boolean isAllowed(Material mat, String group, String world) { + if (mat == null) + return true; for (WorldItemList list : lists) { if (!list.isAllowed(mat, world, group)) { return false; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index e120ce16a..5ce10d337 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -18,11 +18,9 @@ import org.bukkit.OfflinePlayer; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; -import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeFlags; @@ -401,8 +399,6 @@ public void removeAllPlayerFlags(String player) {//this function works with uuid return; } playerFlags.remove(player); - cachedPlayerNameUUIDs.remove(player); - } public void removeAllGroupFlags(String group) { @@ -1038,8 +1034,7 @@ public String listOtherPlayersFlags(String player) { } catch (Exception e) { } next = resolvedName; - } else if (this.cachedPlayerNameUUIDs.containsKey(next)) - next = this.cachedPlayerNameUUIDs.get(next); + } } if (!perms.equals("none")) { sbuild.append(next).append(ChatColor.WHITE).append("[").append(perms).append(ChatColor.WHITE).append("] "); @@ -1069,8 +1064,7 @@ public String listPlayersFlags() { } catch (Exception e) { } next = resolvedName; - } else if (this.cachedPlayerNameUUIDs.containsKey(next)) - next = this.cachedPlayerNameUUIDs.get(next); + } } if (next.equalsIgnoreCase(Residence.getInstance().getServerLandName())) @@ -1111,8 +1105,7 @@ public RawMessage listPlayersFlagsRaw(String player, String text) { } catch (Exception e) { } next = resolvedName; - } else if (this.cachedPlayerNameUUIDs.containsKey(next)) - next = this.cachedPlayerNameUUIDs.get(next); + } } if (next.equalsIgnoreCase(Residence.getInstance().getServerLandName())) From be67c94900856d2a221f3111a8fd23550f27d196 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 12 Dec 2019 11:49:16 +0200 Subject: [PATCH 0673/1142] Initial support for 1.15 --- .../bukkit/residence/allNms/v1_15_R1.java | 159 ++++++++++++++++++ src/plugin.yml | 2 +- 2 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_15_R1.java diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_15_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_15_R1.java new file mode 100644 index 000000000..def2fcd4b --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_15_R1.java @@ -0,0 +1,159 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Particle.DustOptions; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_15_R1.CraftParticle; +import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Bee; +import org.bukkit.entity.Cat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cod; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Dolphin; +import org.bukkit.entity.Donkey; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Fox; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Llama; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Panda; +import org.bukkit.entity.Parrot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.PolarBear; +import org.bukkit.entity.PufferFish; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Salmon; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.TropicalFish; +import org.bukkit.entity.Turtle; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.cmiLib.CMIEffect; +import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_15_R1.Packet; +import net.minecraft.server.v1_15_R1.PacketPlayOutWorldParticles; + +public class v1_15_R1 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof Llama || + ent instanceof PolarBear || + ent instanceof Parrot || + ent instanceof Donkey || + ent instanceof Cod || + ent instanceof Salmon || + ent instanceof PufferFish || + ent instanceof TropicalFish || + ent instanceof Turtle || + ent instanceof Dolphin || + ent instanceof Fox || + ent instanceof Panda || + ent instanceof Cat || + ent instanceof Bee); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public ItemStack itemInOffHand(Player player) { + return player.getInventory().getItemInOffHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + + CMIParticle effect = ef.getParticle(); + if (effect == null) + return; + if (!effect.isParticle()) { + return; + } + + org.bukkit.Particle particle = effect.getParticle(); + + if (particle == null) + return; + + DustOptions dd = null; + if (particle.equals(org.bukkit.Particle.REDSTONE)) + dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); + + Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), + (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); + + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/plugin.yml b/src/plugin.yml index 24be69c37..98a8068bb 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.8.0 +version: 4.8.8.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From c7b902a162a8572567ef60a0990989199ef2a448 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 12 Dec 2019 11:53:13 +0200 Subject: [PATCH 0674/1142] 1.15 materials and entity types --- src/com/bekvon/bukkit/cmiLib/CMIEntityType.java | 7 ++++++- src/com/bekvon/bukkit/cmiLib/CMIMaterial.java | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java b/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java index c34f3a762..a7a6861b3 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java @@ -244,10 +244,15 @@ public enum CMIEntityType { CAT(923, "Cat", Arrays.asList( "N2M5Yjc0MDllN2I1MzgzYzE5YjM2MmIyYTBjYjQzZDUwOTNiMTNlMmIyMzRlOGExODkxNTYzZTU1ZWFlOWQ2OCJ9fX0=", "NTg4MDNmMDI3MGY4Y2RmNGUwZmU5NzMyZDQ5NjdjY2NjMGEyZjRmY2QxMThjZDE1MDAwOTc5YjE4ODg1MTQ0ZiJ9fX0=")), + BEE(924, "Bee", Arrays.asList( + "OTQ3MzIyZjgzMWUzYzE2OGNmYmQzZTI4ZmU5MjUxNDRiMjYxZTc5ZWIzOWM3NzEzNDlmYWM1NWE4MTI2NDczIn19fQ==", + "OTlkYzNmMDBlY2FiMjI0OWJiNmExNmM4YzUxMTVjZWI5ZjIzMjA1YTBkNTVjYzBlOWJhYmQyNTYyZjc5NTljNCJ9fX0==", + "ZTZiNzRlMDUyYjc0Mjg4Nzk5YmE2ZDlmMzVjNWQwMjIxY2Y4YjA0MzMxNTQ3ZWMyZjY4ZDczNTk3YWUyYzliIn19fQ==", + "YmIxNzc3NDY2MjUxMmQ3ODdlZjc3YjFhNDZhMDRlMmM2ZmQ2Nzc5NGJmN2Y3Nzk1NjZlYjIxYzgxNDNhYWQ5ZSJ9fX0=")), // if possible we can remove this string for each texture to save up some space // eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUv UNKNOWN(999, "Unknown"); - + private int id; private String name; private String secondaryName; diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java index abbecf5b5..3b5be6517 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java @@ -1033,6 +1033,15 @@ public enum CMIMaterial { YELLOW_DYE(null, null, 5952, "Yellow Dye"), COMPOSTER(null, null, -4, "Composter"), + //1.15 + BEEHIVE("Beehive"), + BEE_NEST("Bee Nest"), + BEE_SPAWN_EGG("Bee Spawn Egg"), + HONEYCOMB("Honeycomb"), + HONEYCOMB_BLOCK("Honeycomb Block"), + HONEY_BLOCK("Honey Block"), + HONEY_BOTTLE("Honey Bottle"), + // Legacy LEGACY_STATIONARY_WATER(9, 0, null, "Stationary Water"), LEGACY_STATIONARY_LAVA(11, 0, null, "Stationary Lava"), @@ -1086,12 +1095,16 @@ public enum CMIMaterial { this(legacyId, legacyData, id, name, ""); } + CMIMaterial(String name, String... legacyName) { + this(null, null, null, name, legacyName); + } + CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name, String... legacyName) { this.legacyId = legacyId; this.legacyData = legacyData; this.id = id; this.name = name; - if (legacyName != null && !legacyName[0].isEmpty()) + if (legacyName != null && legacyName.length > 0 && !legacyName[0].isEmpty()) this.legacyName = Arrays.asList(legacyName); } From e630592698e4a98f0e817837c049fefe7140a508 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 12 Dec 2019 14:06:28 +0200 Subject: [PATCH 0675/1142] Second fix for issue with blacklisted items on older servers --- src/com/bekvon/bukkit/cmiLib/CMIMaterial.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java index 3b5be6517..97bbf7993 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java @@ -1130,6 +1130,8 @@ public Material getMaterial() { } public void updateMaterial() { + if (this.equals(CMIMaterial.NONE)) + return; if (mat == null) { for (Material one : Material.class.getEnumConstants()) { if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.name().replace("_", ""))) From e23142c4816206c9b4c1a6df62c09127c9d4b808 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 16 Dec 2019 12:20:35 +0200 Subject: [PATCH 0676/1142] Burning_furnace is still a thing --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 1 - src/com/bekvon/bukkit/residence/protection/FlagPermissions.java | 2 +- src/plugin.yml | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b0a7e86f7..9104a5532 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -82,7 +82,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 5ce10d337..025e89ca0 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -235,7 +235,7 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.HOPPER, Flags.container); addMaterialToUseFlag(Material.DROPPER, Flags.container); addMaterialToUseFlag(Material.FURNACE, Flags.container); - addMaterialToUseFlag(CMIMaterial.FURNACE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.LEGACY_BURNING_FURNACE.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.BARREL.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.BLAST_FURNACE.getMaterial(), Flags.container); diff --git a/src/plugin.yml b/src/plugin.yml index 98a8068bb..9ab74b237 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.8.1 +version: 4.8.8.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 85b4750825666ab2ea7533a37e9ea4e4eafd618d Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 21 Dec 2019 14:22:34 +0200 Subject: [PATCH 0677/1142] Some raiding stuff --- .../bukkit/residence/BossBar/BossBarInfo.java | 4 + .../residence/BossBar/BossBarManager.java | 2 + .../bukkit/residence/ConfigManager.java | 42 ++++ .../bekvon/bukkit/residence/Residence.java | 8 +- .../residence/Siege/ResidenceSiege.java | 94 --------- .../Siege/ResidenceSiegeListener.java | 96 ---------- .../Siege/ResidenceSiegeManager.java | 9 - .../bukkit/residence/commands/attack.java | 97 ++++++++++ .../bukkit/residence/commands/defend.java | 145 ++++++++++++++ .../residence/commandsInProgress/siege.java | 105 ---------- .../residence/containers/ResidencePlayer.java | 36 +++- .../bukkit/residence/containers/lm.java | 21 +- ...dEvent.java => ResidenceRaidEndEvent.java} | 4 +- ...t.java => ResidenceRaidPreStartEvent.java} | 19 +- ...vent.java => ResidenceRaidStartEvent.java} | 19 +- .../listeners/ResidenceBlockListener.java | 16 +- .../listeners/ResidenceEntityListener.java | 10 + .../listeners/ResidencePlayerListener.java | 83 +++++--- .../protection/ClaimedResidence.java | 155 +++++++++++---- .../bukkit/residence/raid/RaidAttacker.java | 34 ++++ .../bukkit/residence/raid/RaidDefender.java | 33 ++++ .../bukkit/residence/raid/ResidenceRaid.java | 179 ++++++++++++++++++ .../residence/raid/ResidenceRaidListener.java | 50 +++++ .../residence/raid/ResidenceRaidManager.java | 9 + 24 files changed, 875 insertions(+), 395 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/Siege/ResidenceSiege.java delete mode 100644 src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeListener.java delete mode 100644 src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeManager.java create mode 100644 src/com/bekvon/bukkit/residence/commands/attack.java create mode 100644 src/com/bekvon/bukkit/residence/commands/defend.java delete mode 100644 src/com/bekvon/bukkit/residence/commandsInProgress/siege.java rename src/com/bekvon/bukkit/residence/event/{ResidenceSiegeEndEvent.java => ResidenceRaidEndEvent.java} (80%) rename src/com/bekvon/bukkit/residence/event/{ResidenceSiegeStartEvent.java => ResidenceRaidPreStartEvent.java} (60%) rename src/com/bekvon/bukkit/residence/event/{ResidenceSiegePreStartEvent.java => ResidenceRaidStartEvent.java} (61%) create mode 100644 src/com/bekvon/bukkit/residence/raid/RaidAttacker.java create mode 100644 src/com/bekvon/bukkit/residence/raid/RaidDefender.java create mode 100644 src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java create mode 100644 src/com/bekvon/bukkit/residence/raid/ResidenceRaidListener.java create mode 100644 src/com/bekvon/bukkit/residence/raid/ResidenceRaidManager.java diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java index a8be47f7c..cd42ad45d 100644 --- a/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java +++ b/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java @@ -188,6 +188,10 @@ public void setAutoId(Integer autoId) { this.autoId = autoId; } + public void updateCycle() { + + } + // public List getCommands() { // return cmds; // } diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java index 0058a5b71..9301ef3d6 100644 --- a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java +++ b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java @@ -41,6 +41,8 @@ public synchronized void Show(final BossBarInfo barInfo) { if (user == null || !user.isOnline()) return; + barInfo.updateCycle(); + BossBar bar = barInfo.getBar(); String name = barInfo.getTitleOfBar(); diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 3fa55eb0b..8387ab4bd 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -246,6 +246,20 @@ public class ConfigManager { public List DynMapHiddenRegions; // DynMap + // Raid + public static boolean RaidEnabled = false; + public static boolean RaidAttackerBlockBreak = false; + public static boolean RaidAttackerBlockPlace = false; + public static boolean RaidDefenderBlockBreak = false; + public static boolean RaidDefenderBlockPlace = false; + public static boolean RaidDefenderContainerUsage = false; + public static boolean RaidFriendlyFire = false; + public static int PreRaidTimer = 120; + public static int RaidTimer = 120; + public static int RaidCooldown = 120; + public static int RaidPlayerCooldown = 120; + // Raid + // Schematics public boolean RestoreAfterRentEnds; public boolean SchematicsSaveOnFlagChange; @@ -1116,6 +1130,34 @@ public void UpdateConfigFile() { c.addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden in game"); DynMapHiddenRegions = c.get("DynMap.HiddenRegions", new ArrayList()); + c.addComment("Raid.Enabled", "Determines if you want to enable raid feature for your server", + "When residence is under raid, attackers can move inside residence even if residence has move false flag"); + RaidEnabled = c.get("Raid.Enabled", false); + c.addComment("Raid.PreTimer", "Time in seconds before raid starts", "This will allow defenders to get back to residence and prepare for attack"); + PreRaidTimer = c.get("Raid.PreTimer", 120); + c.addComment("Raid.Timer", "Time in seconds raid should be", "During this time attackers can steal and kill defenders"); + RaidTimer = c.get("Raid.Timer", 120); + c.addComment("Raid.Cooldown", "Time in seconds residence is immune for next raid"); + RaidCooldown = c.get("Raid.Cooldown", 120); + c.addComment("Raid.PlayerCooldown", "Time in seconds player is immune for next raid", "In case player has more than one residence, this can prevent player from being attacked again"); + RaidPlayerCooldown = c.get("Raid.PlayerCooldown", 120); + + c.addComment("Raid.Allow.Attacker.blockBreak", "Allows to break blocks inside raided residence even if it has destroy false", "This only applies for attackers and for raid time"); + RaidAttackerBlockBreak = c.get("Raid.Allow.Attacker.blockBreak", true); + c.addComment("Raid.Allow.Attacker.blockPlace", "Allows to place blocks inside raided residence even if it has place false", "This only applies for attackers and for raid time"); + RaidAttackerBlockPlace = c.get("Raid.Allow.Attacker.blockPlace", true); + c.addComment("Raid.Allow.Defender.blockBreak", "Allows to break blocks inside raided residence even if it has destroy false", "This only applies for defenders and for raid time"); + RaidDefenderBlockBreak = c.get("Raid.Allow.Defender.blockBreak", true); + c.addComment("Raid.Allow.Defender.blockPlace", "Allows to place blocks inside raided residence even if it has place false", "This only applies for defenders and for raid time"); + RaidDefenderBlockPlace = c.get("Raid.Allow.Defender.blockPlace", true); + + c.addComment("Raid.Allow.Defender.containerUsage", "Allows to use containers, such as chests, during raid time", "This only applies for defenders and for raid time", + "Keeping this at false might prevent from players moving their items to another residence which is not in raid", "Attackers will have access to any container in your residence during raid"); + RaidDefenderContainerUsage = c.get("Raid.Allow.Defender.containerUsage", false); + + c.addComment("Raid.FriendlyFire", "When set to false players in same teams (attackers or defenders) will not cause each other damage"); + RaidFriendlyFire = c.get("Raid.FriendlyFire", true); + c.save(); } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index e925cab4c..c4c5d1f11 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -54,7 +54,6 @@ import com.bekvon.bukkit.residence.BossBar.BossBarManager; import com.bekvon.bukkit.residence.Placeholders.Placeholder; import com.bekvon.bukkit.residence.Placeholders.PlaceholderAPIHook; -import com.bekvon.bukkit.residence.Siege.ResidenceSiegeListener; import com.bekvon.bukkit.residence.allNms.v1_10Events; import com.bekvon.bukkit.residence.allNms.v1_13Events; import com.bekvon.bukkit.residence.allNms.v1_8Events; @@ -95,6 +94,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.raid.ResidenceRaidListener; import com.bekvon.bukkit.residence.protection.LeaseManager; import com.bekvon.bukkit.residence.protection.PermissionListManager; import com.bekvon.bukkit.residence.protection.PlayerManager; @@ -162,7 +162,7 @@ public class Residence extends JavaPlugin { protected ResidenceEntityListener elistener; protected ResidenceFixesListener flistener; - protected ResidenceSiegeListener slistener; + protected ResidenceRaidListener slistener; protected ResidenceCommandListener cManager; @@ -756,7 +756,7 @@ public void run() { plistener = new ResidencePlayerListener(this); elistener = new ResidenceEntityListener(this); flistener = new ResidenceFixesListener(); -// slistener = new ResidenceSiegeListener(); + slistener = new ResidenceRaidListener(); shlistener = new ShopListener(this); spigotlistener = new SpigotListener(); @@ -767,7 +767,7 @@ public void run() { pm.registerEvents(elistener, this); pm.registerEvents(flistener, this); pm.registerEvents(shlistener, this); -// pm.registerEvents(slistener, this); + pm.registerEvents(slistener, this); // 1.8 event if (Version.isCurrentEqualOrHigher(Version.v1_8_R1)) diff --git a/src/com/bekvon/bukkit/residence/Siege/ResidenceSiege.java b/src/com/bekvon/bukkit/residence/Siege/ResidenceSiege.java deleted file mode 100644 index 197f51813..000000000 --- a/src/com/bekvon/bukkit/residence/Siege/ResidenceSiege.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.bekvon.bukkit.residence.Siege; - -import java.util.HashSet; -import java.util.Set; - -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class ResidenceSiege { - - private ClaimedResidence res; - private Long startsAt = 0L; - private Long endsAt = 0L; -// private Long lastSiegeEnded = 0L; - private Set attackers = new HashSet(); - private Set defenders = new HashSet(); - - private int schedId = -1; - - int siegeCooldown = 5; - - public ResidenceSiege() { - } - - public Long getEndsAt() { - return endsAt; - } - - public Long getCooldownEnd() { - return endsAt + (siegeCooldown * 1000); - } - - public void setEndsAt(Long endsAt) { - this.endsAt = endsAt; - } - -// public Long getLastSiegeEnded() { -// return lastSiegeEnded; -// } -// -// public void setLastSiegeEnded(Long lastSiegeEnded) { -// this.lastSiegeEnded = lastSiegeEnded; -// } - - public ClaimedResidence getRes() { - return res; - } - - public void setRes(ClaimedResidence res) { - this.res = res; - } - - public Set getDefenders() { - return defenders; - } - - public void addDefender(Player defender) { - this.defenders.add(defender); - } - - public void removeDefenders(Player defender) { - this.defenders.remove(defender); - } - - public Set getAttackers() { - return attackers; - } - - public void addAttacker(Player attacker) { - this.attackers.add(attacker); - } - - public void removeAttacker(Player attacker) { - this.attackers.remove(attacker); - } - - public Long getStartsAt() { - return startsAt; - } - - public void setStartsAt(Long startsAt) { - this.startsAt = startsAt; - } - - public int getSchedId() { - return schedId; - } - - public void setSchedId(int schedId) { - this.schedId = schedId; - } - -} diff --git a/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeListener.java b/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeListener.java deleted file mode 100644 index c718a6cdb..000000000 --- a/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeListener.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.bekvon.bukkit.residence.Siege; - -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.BossBar.BossBarInfo; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; - -public class ResidenceSiegeListener implements Listener { - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void ResidenceSiegePreStartEvent(com.bekvon.bukkit.residence.event.ResidenceSiegePreStartEvent event) { - ClaimedResidence res = event.getRes(); - Player player = event.getAttacker(); - - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - Residence.getInstance().msg(player, lm.Siege_Started); - BossBarInfo barInfo = new BossBarInfo(rPlayer, "ResidenceSiege"); - Double secLeft = (res.getSiege().getStartsAt() - System.currentTimeMillis()) / 1000D; - barInfo.setKeepForTicks(22); - barInfo.setColor(BarColor.GREEN); - barInfo.setTitleOfBar("&7Siege starts in: [autoTimeLeft]"); - barInfo.setAdjustPerc(-(1D / secLeft)); - barInfo.setPercentage(secLeft, secLeft); - barInfo.setStyle(BarStyle.SEGMENTED_20); - rPlayer.removeBossBar(rPlayer.getBossBar("ResidenceSiege")); - barInfo.setAuto(20); - - rPlayer.addBossBar(barInfo); - - ResidencePlayer rOwner = Residence.getInstance().getPlayerManager().getResidencePlayer(res.getOwnerUUID()); - Residence.getInstance().msg(rOwner.getPlayer(), lm.Siege_Started); - barInfo = new BossBarInfo(rOwner, "ResidenceSiege"); - secLeft = (res.getSiege().getStartsAt() - System.currentTimeMillis()) / 1000D; - barInfo.setKeepForTicks(22); - barInfo.setColor(BarColor.GREEN); - barInfo.setTitleOfBar("&7Siege starts in: [autoTimeLeft]"); - barInfo.setAdjustPerc(-(1D / secLeft)); - barInfo.setPercentage(secLeft, secLeft); - barInfo.setStyle(BarStyle.SEGMENTED_20); - barInfo.setAuto(20); - rOwner.removeBossBar(rOwner.getBossBar("ResidenceSiege")); - rOwner.addBossBar(barInfo); - - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void ResidenceSiegeStartEvent(com.bekvon.bukkit.residence.event.ResidenceSiegeStartEvent event) { - - ClaimedResidence res = event.getRes(); - Player player = event.getAttacker(); - - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - BossBarInfo barInfo = new BossBarInfo(rPlayer, "ResidenceSiege"); - Double secLeft = (res.getSiege().getEndsAt() - System.currentTimeMillis()) / 1000D - 1; - barInfo.setKeepForTicks(22); - barInfo.setColor(BarColor.RED); - barInfo.setTitleOfBar("&cSiege ends in: [autoTimeLeft]"); - barInfo.setAdjustPerc(-(1D / secLeft)); - barInfo.setPercentage(secLeft, secLeft); - barInfo.setStyle(BarStyle.SEGMENTED_20); - barInfo.setAuto(20); - rPlayer.removeBossBar(rPlayer.getBossBar("ResidenceSiege")); - rPlayer.addBossBar(barInfo); - - ResidencePlayer rOwner = Residence.getInstance().getPlayerManager().getResidencePlayer(res.getOwnerUUID()); - barInfo = new BossBarInfo(rOwner, "ResidenceSiege"); - secLeft = (res.getSiege().getEndsAt() - System.currentTimeMillis()) / 1000D - 1; - barInfo.setKeepForTicks(22); - barInfo.setColor(BarColor.RED); - barInfo.setTitleOfBar("&cSiege ends in: [autoTimeLeft]"); - barInfo.setAdjustPerc(-(1D / secLeft)); - barInfo.setPercentage(secLeft, secLeft); - barInfo.setStyle(BarStyle.SEGMENTED_20); - barInfo.setAuto(20); - rOwner.removeBossBar(rOwner.getBossBar("ResidenceSiege")); - rOwner.addBossBar(barInfo); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void ResidenceSiegeEndEvent(com.bekvon.bukkit.residence.event.ResidenceSiegeEndEvent event) { - event.getRes().endSiege(); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void ResidenceFlagCheckEvent(com.bekvon.bukkit.residence.event.ResidenceFlagCheckEvent event) { - - } -} diff --git a/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeManager.java b/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeManager.java deleted file mode 100644 index 9ab35ad83..000000000 --- a/src/com/bekvon/bukkit/residence/Siege/ResidenceSiegeManager.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.bekvon.bukkit.residence.Siege; - -public class ResidenceSiegeManager { - - public ResidenceSiegeManager() { - - } - -} diff --git a/src/com/bekvon/bukkit/residence/commands/attack.java b/src/com/bekvon/bukkit/residence/commands/attack.java new file mode 100644 index 000000000..478857779 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/attack.java @@ -0,0 +1,97 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.ConfigManager; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.event.ResidenceRaidEndEvent; +import com.bekvon.bukkit.residence.event.ResidenceRaidPreStartEvent; +import com.bekvon.bukkit.residence.event.ResidenceRaidStartEvent; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; +import com.bekvon.bukkit.residence.utils.Utils; + +public class attack implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3100) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + final Player player = (Player) sender; + + if (args.length != 1 && args.length != 2) + return false; + + if (!ConfigManager.RaidEnabled) { + plugin.msg(player, lm.Raid_NotEnabled); + return true; + } + + ClaimedResidence res = null; + if (args.length == 2) + res = plugin.getResidenceManager().getByName(args[1]); + else + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + if (res.isOwner(player)) { + plugin.msg(player, lm.Raid_noSelf); + return true; + } + + final ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(res.getOwnerUUID()); + if (!rPlayer.isOnline()) { + plugin.msg(player, lm.Raid_isOffline); + return true; + } + + if (res.isUnderRaidCooldown() && !res.isInPreRaid() && !res.isUnderRaid()) { + plugin.msg(player, lm.Raid_cooldown, Utils.to24hourShort(res.getRaid().getCooldownEnd() - System.currentTimeMillis() + 1000)); + return true; + } + + if (res.isUnderRaid() || res.isInPreRaid()) { + if (!res.getRaid().isAttacker(player)) + res.getRaid().addAttacker(player); + + plugin.msg(player, lm.Raid_Joined, res.getName()); + + return true; + } + + boolean started = res.preStartRaid(player); + + if (started) { + res.startRaid(); + return true; + } + + plugin.msg(player, "Cant start raid"); + + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Start raid on residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res attack [resName]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/defend.java b/src/com/bekvon/bukkit/residence/commands/defend.java new file mode 100644 index 000000000..d175b92e3 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/defend.java @@ -0,0 +1,145 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.Zrips.CMI.utils.RawMessage; +import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.ConfigManager; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.raid.RaidDefender; + +public class defend implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3100) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + final Player player = (Player) sender; + + if (args.length != 1 && args.length != 2) + return false; + + if (!ConfigManager.RaidEnabled) { + plugin.msg(player, lm.Raid_NotEnabled); + return true; + } + + ClaimedResidence res = null; + ResidencePlayer target = null; + if (args.length == 2) { + OfflinePlayer targetP = plugin.getOfflinePlayer(args[1]); + if (targetP != null) { + if (!targetP.isOnline()) { + plugin.msg(player, lm.Invalid_PlayerOffline); + return true; + } + target = plugin.getPlayerManager().getResidencePlayer(targetP.getUniqueId()); + } else + res = plugin.getResidenceManager().getByName(args[1]); + } else + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + + if (res == null) { + ResidencePlayer owner = plugin.getPlayerManager().getResidencePlayer(player); + res = owner.getCurrentlyRaidedResidence(); + } + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + if (res.isOwner(player)) { + if (target != null) { + ClaimedResidence req = joinRequests.get(target.getUniqueId()); + + if (req != null && req.equals(res)) { + plugin.msg(target.getPlayer(), lm.Raid_defend_Joined, res.getName()); + for (Entry one : res.getRaid().getDefenders().entrySet()) { + if (!target.getUniqueId().equals(one.getKey())) { + plugin.msg(Bukkit.getPlayer(one.getKey()), lm.Raid_defend_JoinedDef, target.getPlayer().getDisplayName()); + } + } + res.getRaid().addDefender(target); + joinRequests.remove(target.getUniqueId()); + ownerJoinRequests.remove(target.getUniqueId()); + return true; + } + + ownerJoinRequests.put(target.getUniqueId(), res); + RawMessage rm = new RawMessage(); + rm.add("join raid " + res.getName(), res.getName(), "res defend " + res.getName()); + rm.show(target.getPlayer()); + return true; + } + plugin.msg(player, lm.Raid_defend_noSelf); + return true; + } + + final ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(res.getOwnerUUID()); + if (!rPlayer.isOnline()) { + plugin.msg(player, lm.Raid_defend_IsOffline); + return true; + } + + if (!res.isInPreRaid() && !res.isUnderRaid()) { + plugin.msg(player, lm.Raid_defend_notRaided); + return true; + } + + if (res.isUnderRaid() || res.isInPreRaid()) { + + ClaimedResidence req = ownerJoinRequests.get(player.getUniqueId()); + if (req != null && req.equals(res)) { + plugin.msg(player, lm.Raid_defend_Joined, res.getName()); + for (Entry one : res.getRaid().getDefenders().entrySet()) { + if (!player.getUniqueId().equals(one.getKey())) { + plugin.msg(Bukkit.getPlayer(one.getKey()), lm.Raid_defend_JoinedDef, player.getDisplayName()); + } + } + res.getRaid().addDefender(player); + joinRequests.remove(player.getUniqueId()); + ownerJoinRequests.remove(player.getUniqueId()); + return true; + } + + joinRequests.put(player.getUniqueId(), res); + RawMessage rm = new RawMessage(); + plugin.msg(player, lm.Raid_defend_Sent, res.getName()); + rm.add("Accept raid defend from " + player.getDisplayName(), player.getName(), "res defend " + player.getName()); + rm.show(rPlayer.getPlayer()); + return true; + } + + plugin.msg(player, "Cant join raid"); + + return false; + } + + static HashMap ownerJoinRequests = new HashMap(); + static HashMap joinRequests = new HashMap(); + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Join raid defence on residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res defend [resName] (playerName)")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]%%[playername]")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java b/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java deleted file mode 100644 index 49b034091..000000000 --- a/src/com/bekvon/bukkit/residence/commandsInProgress/siege.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.bekvon.bukkit.residence.commandsInProgress; - -import java.util.Arrays; - -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.ConfigReader; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.cmd; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.event.ResidenceSiegeEndEvent; -import com.bekvon.bukkit.residence.event.ResidenceSiegePreStartEvent; -import com.bekvon.bukkit.residence.event.ResidenceSiegeStartEvent; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Utils; - -public class siege implements cmd { - - @Override - @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - final Player player = (Player) sender; - - if (args.length != 1 && args.length != 2) - return false; - - ClaimedResidence res = null; - if (args.length == 2) - res = plugin.getResidenceManager().getByName(args[1]); - else - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - - if (res.isOwner(player)) { - plugin.msg(player, lm.Siege_noSelf); - return true; - } - - final ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(res.getOwnerUUID()); - if (!rPlayer.isOnline()) { - plugin.msg(player, lm.Siege_isOffline); - return true; - } - - if (res.isUnderSiegeCooldown()) { - plugin.msg(player, lm.Siege_cooldown, Utils.to24hourShort(res.getSiege().getCooldownEnd() - System.currentTimeMillis() + 1000)); - return true; - } - - boolean started = res.startSiege(player); - - ResidenceSiegePreStartEvent pre = new ResidenceSiegePreStartEvent(res, player); - - Bukkit.getPluginManager().callEvent(pre); - if (pre.isCancelled()) { - res.endSiege(); - return true; - } - - final ClaimedResidence r = res; - if (started) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - ResidenceSiegeStartEvent start = new ResidenceSiegeStartEvent(r, player); - Bukkit.getPluginManager().callEvent(start); - } - }, ((res.getSiege().getStartsAt() - System.currentTimeMillis()) / 50)); - - res.getSiege().setSchedId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (r.getSiege().getSchedId() > 0) { - ResidenceSiegeEndEvent End = new ResidenceSiegeEndEvent(r); - Bukkit.getPluginManager().callEvent(End); - } - } - }, ((res.getSiege().getEndsAt() - System.currentTimeMillis()) / 50))); - - return true; - } - plugin.msg(player, "Cant start siege"); - - return false; - } - - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Start siege on residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res siege [resName]")); - } - -} diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index f012b85da..a537708a2 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -43,6 +43,9 @@ public class ResidencePlayer { private int maxValue = 9999; + private Long lastRaidAttackTimer = 0L; + private Long lastRaidDefendTimer = 0L; + public ResidencePlayer(OfflinePlayer off) { if (off == null) return; @@ -370,8 +373,14 @@ public String getPlayerName() { return userName; } - public UUID getUuid() { + public UUID getUniqueId() { return uuid; + + } + + @Deprecated + public UUID getUuid() { + return getUniqueId(); } public Player getPlayer() { @@ -453,4 +462,29 @@ public void clearBossMaps() { } barMap.clear(); } + + public ClaimedResidence getCurrentlyRaidedResidence() { + for (ClaimedResidence one : getResList()) { + if (one.isUnderRaid() || one.isInPreRaid()) { + return one; + } + } + return null; + } + + public Long getLastRaidAttackTimer() { + return lastRaidAttackTimer; + } + + public void setLastRaidAttackTimer(Long lastRaidAttackTimer) { + this.lastRaidAttackTimer = lastRaidAttackTimer; + } + + public Long getLastRaidDefendTimer() { + return lastRaidDefendTimer; + } + + public void setLastRaidDefendTimer(Long lastRaidDefendTimer) { + this.lastRaidDefendTimer = lastRaidDefendTimer; + } } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index c8a5d73a8..2869432c8 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -7,6 +7,7 @@ public enum lm { Invalid_Player("&cInvalid player name..."), + Invalid_PlayerOffline("&cPlayer is offline"), Invalid_World("&cInvalid world..."), Invalid_Residence("&cInvalid Residence..."), Invalid_Subzone("&cInvalid Subzone..."), @@ -96,10 +97,22 @@ public enum lm { Sign_ResName("&8%1"), Sign_Owner("&5%1"), - Siege_Started("&7Siege started!"), - Siege_noSelf("&cCan't siege your own residence!"), - Siege_isOffline("&cCan't siege while owner is offline!"), - Siege_cooldown("&cToo soon for another siege on this residence! Wait %1"), + Raid_NotEnabled("&cRaid is not enabled!"), + Raid_StartsIn("&7Raid starts in: [autoTimeLeft] &2%1D &4%2A"), + Raid_EndsIn("&cRaid ends in: [autoTimeLeft] &2%1D &4%2A"), + Raid_Joined("&7Joined &2%1 &7raid!"), + Raid_Started("&7Raid started!"), + Raid_Ended("&7Raid on &4%1 &7ended!"), + Raid_cantDo("&cCan't do this during raid!"), + Raid_noSelf("&cCan't raid your own residence!"), + Raid_isOffline("&cCan't raid while owner is offline!"), + Raid_cooldown("&cToo soon for another raid on this residence! Wait %1"), + Raid_defend_Joined("&7Joined &2%1 &7defence forces!"), + Raid_defend_Sent("&7Request to join raid defence is sent, wait for confirmation"), + Raid_defend_JoinedDef("&2%1&7 joined defence forces!"), + Raid_defend_IsOffline("&cCan't join defend team while owner is offline!"), + Raid_defend_noSelf("&cYou already defending this residence"), + Raid_defend_notRaided("&cResidence is not under the raid"), info_years("&e%1 &6years "), info_oneYear("&e%1 &6year "), diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceSiegeEndEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceRaidEndEvent.java similarity index 80% rename from src/com/bekvon/bukkit/residence/event/ResidenceSiegeEndEvent.java rename to src/com/bekvon/bukkit/residence/event/ResidenceRaidEndEvent.java index 42aa82d75..fca2267e6 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceSiegeEndEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceRaidEndEvent.java @@ -6,7 +6,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; -public class ResidenceSiegeEndEvent extends Event implements Cancellable { +public class ResidenceRaidEndEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); @@ -22,7 +22,7 @@ public static HandlerList getHandlerList() { private ClaimedResidence res; protected boolean cancelled; - public ResidenceSiegeEndEvent(ClaimedResidence res) { + public ResidenceRaidEndEvent(ClaimedResidence res) { this.res = res; } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceSiegeStartEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceRaidPreStartEvent.java similarity index 60% rename from src/com/bekvon/bukkit/residence/event/ResidenceSiegeStartEvent.java rename to src/com/bekvon/bukkit/residence/event/ResidenceRaidPreStartEvent.java index ac795ce47..bc3032f15 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceSiegeStartEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceRaidPreStartEvent.java @@ -1,13 +1,16 @@ package com.bekvon.bukkit.residence.event; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import java.util.HashMap; +import java.util.UUID; -import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; -public class ResidenceSiegeStartEvent extends Event implements Cancellable { +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.raid.RaidAttacker; + +public class ResidenceRaidPreStartEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); @@ -21,12 +24,12 @@ public static HandlerList getHandlerList() { } private ClaimedResidence res; - private Player attacker; + private HashMap attackers; protected boolean cancelled; - public ResidenceSiegeStartEvent(ClaimedResidence res, Player attacker) { + public ResidenceRaidPreStartEvent(ClaimedResidence res, HashMap hashMap) { this.res = res; - this.attacker = attacker; + this.attackers = hashMap; } @Override @@ -43,7 +46,7 @@ public ClaimedResidence getRes() { return res; } - public Player getAttacker() { - return attacker; + public HashMap getAttackers() { + return attackers; } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceSiegePreStartEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceRaidStartEvent.java similarity index 61% rename from src/com/bekvon/bukkit/residence/event/ResidenceSiegePreStartEvent.java rename to src/com/bekvon/bukkit/residence/event/ResidenceRaidStartEvent.java index a9193deef..2c4804a56 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceSiegePreStartEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceRaidStartEvent.java @@ -1,13 +1,16 @@ package com.bekvon.bukkit.residence.event; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import java.util.HashMap; +import java.util.UUID; -import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; -public class ResidenceSiegePreStartEvent extends Event implements Cancellable { +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.raid.RaidAttacker; + +public class ResidenceRaidStartEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); @@ -21,12 +24,12 @@ public static HandlerList getHandlerList() { } private ClaimedResidence res; - private Player attacker; + private HashMap attackers; protected boolean cancelled; - public ResidenceSiegePreStartEvent(ClaimedResidence res, Player attacker) { + public ResidenceRaidStartEvent(ClaimedResidence res, HashMap hashMap) { this.res = res; - this.attacker = attacker; + this.attackers = hashMap; } @Override @@ -43,7 +46,7 @@ public ClaimedResidence getRes() { return res; } - public Player getAttacker() { - return attacker; + public HashMap getAttackers() { + return attackers; } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 55c972c49..3c7d1c767 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -47,6 +47,7 @@ import com.bekvon.bukkit.cmiLib.CMIBlock; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; +import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.commands.auto.direction; import com.bekvon.bukkit.residence.containers.Flags; @@ -224,6 +225,12 @@ public void onBlockBreak(BlockBreakEvent event) { boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); + if (res != null && res.isUnderRaid()) { + if (res.getRaid().isAttacker(player.getUniqueId()) && ConfigManager.RaidAttackerBlockBreak || res.getRaid().isDefender(player.getUniqueId()) && ConfigManager.RaidDefenderBlockBreak) { + hasdestroy = true; + } + } + if (!hasdestroy && !ResPerm.bypass_destroy.hasPermission(player)) { plugin.msg(player, lm.Flag_Deny, Flags.destroy); event.setCancelled(true); @@ -629,6 +636,13 @@ public void onBlockPlace(BlockPlaceEvent event) { } FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); + + if (res != null && res.isUnderRaid()) { + if (res.getRaid().isAttacker(player.getUniqueId()) && ConfigManager.RaidAttackerBlockPlace || res.getRaid().isDefender(player.getUniqueId()) && ConfigManager.RaidDefenderBlockPlace) { + hasplace = true; + } + } + if (!hasplace && !ResPerm.bypass_build.hasPermission(player)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); @@ -637,7 +651,7 @@ public void onBlockPlace(BlockPlaceEvent event) { if (CMIMaterial.isBed(mat)) { CMIBlock cb = new CMIBlock(block); - Block sec = cb.getSecondaryBedBlock(); + Block sec = cb.getSecondaryBedBlock(); if (sec != null) { perms = plugin.getPermsByLocForPlayer(sec.getLocation(), player); hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 70c75fcec..6b337b496 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -51,6 +51,7 @@ import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; +import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; @@ -1371,6 +1372,15 @@ public void onEntityDamage(EntityDamageEvent event) { if (!(ent instanceof Player)) return; + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.isUnderRaid() && area.getRaid().onSameTeam(attacker, (Player) ent) + && !ConfigManager.RaidFriendlyFire) { + event.setCancelled(true); + } + + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.isUnderRaid() && !area.getRaid().onSameTeam(attacker, (Player) ent)) { + return; + } + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && srcarea.getPermissions().playerHas((Player) ent, Flags.friendlyfire, FlagCombo.OnlyFalse) && srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9104a5532..0fc8c85c5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -60,6 +60,7 @@ import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.CMIReflections; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; +import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.Flags; @@ -82,6 +83,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -1255,7 +1257,6 @@ public void onPlayerInteract(PlayerInteractEvent event) { event.setCancelled(true); return; } - if (resadmin) return; @@ -1299,6 +1300,20 @@ public void onPlayerInteract(PlayerInteractEvent event) { boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player); boolean hasuse = perms.playerHas(player, Flags.use, true) || hasUseBypass; ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + + main: if (res != null && res.isUnderRaid()) { + if (res.getRaid().isDefender(player) && !ConfigManager.RaidDefenderContainerUsage) { + Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); + if (result != null) { + if (result.equals(Flags.container)) { + event.setCancelled(true); + plugin.msg(player, lm.Raid_cantDo); + return; + } + } + } + } + if (res == null || !res.isOwner(player)) { if (!hasContainerBypass) { @@ -1308,12 +1323,26 @@ public void onPlayerInteract(PlayerInteractEvent event) { main: if (!perms.playerHas(player, result, hasuse)) { if (hasuse || result.equals(Flags.container)) { + + if (res != null && res.isUnderRaid()) { + if (res.getRaid().isAttacker(player)) { + break main; + } + } + event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, result); return; } if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + + if (res != null && res.isUnderRaid()) { + if (res.getRaid().isAttacker(player)) { + break main; + } + } + switch (result) { case door: if (ResPerm.bypass_door.hasPermission(player)) @@ -1324,13 +1353,19 @@ public void onPlayerInteract(PlayerInteractEvent event) { break main; break; } - event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, result); return; } if (isCanUseEntity_BothClick(mat, block)) { + + if (res != null && res.isUnderRaid()) { + if (res.getRaid().isAttacker(player)) { + break main; + } + } + event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, result); } @@ -2035,18 +2070,15 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move UUID uuid = player.getUniqueId(); - ClaimedResidence ResOld = null; - if (currentRes.containsKey(uuid)) { - ResOld = currentRes.get(uuid); - if (ResOld == null) { - currentRes.remove(uuid); - } else { - if (res != null && ResOld.getName().equals(res.getName())) { + ClaimedResidence ResOld = currentRes.get(uuid); + if (ResOld == null) { + currentRes.remove(uuid); + } else { + if (res != null && ResOld.getName().equals(res.getName())) { - f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && - !ResPerm.bypass_nofly.hasPermission(player)) { - if (res.isOwner(player)) - break f; + if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && + !ResPerm.bypass_nofly.hasPermission(player)) { + if (!res.isOwner(player)) { Location lc = player.getLocation(); Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); location.setPitch(lc.getPitch()); @@ -2082,10 +2114,9 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move player.setFlying(false); player.setAllowFlight(false); } - - lastOutsideLoc.put(uuid, loc); - return true; } + lastOutsideLoc.put(uuid, loc); + return true; } } @@ -2102,23 +2133,9 @@ public void run() { if (res == null) { lastOutsideLoc.put(uuid, loc); if (ResOld != null) { - // New ResidenceChangeEvent ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); plugin.getServ().getPluginManager().callEvent(chgEvent); - -// String leave = ResOld.getLeaveMessage(); -// if (leave != null && !leave.equals("")) { -// if (plugin.getConfigManager().useTitleMessage()) { -// plugin.getAB().sendTitle(player, ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); -// } -// if (plugin.getConfigManager().useActionBar()) { -// plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) -// .toString()); -// } else { -// plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); -// } -// } currentRes.remove(uuid); } return true; @@ -2127,6 +2144,12 @@ public void run() { if (move) { if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move.hasPermission(player)) { + if (res.isUnderRaid()) { + if (res.getRaid().isAttacker(player.getUniqueId()) || res.getRaid().isDefender(player.getUniqueId())) { + return true; + } + } + Location lastLoc = lastOutsideLoc.get(uuid); if (plugin.getConfigManager().BounceAnimation()) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 455bea4e4..3e49e4672 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -27,8 +27,9 @@ import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.Siege.ResidenceSiege; +import com.bekvon.bukkit.residence.BossBar.BossBarInfo; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeMessages; @@ -41,6 +42,9 @@ import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; import com.bekvon.bukkit.residence.event.ResidenceAreaDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceRaidEndEvent; +import com.bekvon.bukkit.residence.event.ResidenceRaidPreStartEvent; +import com.bekvon.bukkit.residence.event.ResidenceRaidStartEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; @@ -51,6 +55,9 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.raid.RaidAttacker; +import com.bekvon.bukkit.residence.raid.RaidDefender; +import com.bekvon.bukkit.residence.raid.ResidenceRaid; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.text.help.PageInfo; @@ -91,7 +98,7 @@ public class ClaimedResidence { private Residence plugin; - private ResidenceSiege siege; + private ResidenceRaid raid; private Set signsInResidence = new HashSet(); @@ -1843,6 +1850,9 @@ public boolean isOwner(String name) { return perms.getOwner().equalsIgnoreCase(name); } + public boolean isOwner(UUID uuid) { + return perms.getOwnerUUID().toString().equals(uuid.toString()); + } public boolean isOwner(Player p) { if (p == null) return false; @@ -1969,60 +1979,135 @@ public void setLeaseExpireTime(Long leaseExpireTime) { // this.town = town; // } - public boolean isUnderSiege() { - return getSiege().getEndsAt() > System.currentTimeMillis() - && getSiege().getStartsAt() < System.currentTimeMillis(); + public boolean isUnderRaid() { + return getRaid().getEndsAt() > System.currentTimeMillis() + && getRaid().getStartsAt() < System.currentTimeMillis(); } - public boolean canSiege() { - return !isUnderSiege() && this.getSiege().getCooldownEnd() < System.currentTimeMillis(); + public boolean isInPreRaid() { + return getRaid().getEndsAt() > System.currentTimeMillis() + && getRaid().getStartsAt() > System.currentTimeMillis(); } - public ResidenceSiege getSiege() { - if (siege == null) - siege = new ResidenceSiege(); - return siege; + public boolean canRaid() { + return !isUnderRaid() && this.getRaid().getCooldownEnd() < System.currentTimeMillis(); } - public boolean isUnderSiegeCooldown() { - return this.getSiege().getCooldownEnd() > System.currentTimeMillis(); + public ResidenceRaid getRaid() { + if (raid == null) + raid = new ResidenceRaid(this); + return raid; } - int preSiegeDuration = 5; - int siegeDuration = 5; + public boolean isUnderRaidCooldown() { + return this.getRaid().getCooldownEnd() > System.currentTimeMillis(); + } - public boolean startSiege(Player attacker) { + public boolean preStartRaid(Player attacker) { - if (isUnderSiege()) + if (isUnderRaid() || this.isInPreRaid()) return false; - if (this.getSiege().getCooldownEnd() > System.currentTimeMillis()) + if (this.getRaid().getCooldownEnd() > System.currentTimeMillis()) + return false; + + getRaid().addAttacker(attacker); + getRaid().addDefender(this.getRPlayer().getPlayer()); + getRaid().setStartsAt(System.currentTimeMillis() + (ConfigManager.PreRaidTimer * 1000)); + getRaid().setEndsAt(getRaid().getStartsAt() + (ConfigManager.RaidTimer * 1000)); + + ResidenceRaidPreStartEvent start = new ResidenceRaidPreStartEvent(getResidence(), getRaid().getAttackers()); + + Bukkit.getPluginManager().callEvent(start); + if (start.isCancelled()) return false; - getSiege().addAttacker(attacker); - getSiege().addDefender(this.getRPlayer().getPlayer()); - getSiege().setStartsAt(System.currentTimeMillis() + (preSiegeDuration * 1000)); - getSiege().setEndsAt(getSiege().getStartsAt() + (siegeDuration * 1000)); + return true; + } + + Integer repeatId = -1; + + public boolean startRaid() { + + if (!isUnderRaid() && !this.isInPreRaid()) + return false; + + ResidenceRaidStartEvent start = new ResidenceRaidStartEvent(getResidence(), getRaid().getAttackers()); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + Bukkit.getPluginManager().callEvent(start); + if (start.isCancelled()) + start.getRes().endRaid(); + } + }, ((getRaid().getStartsAt() - System.currentTimeMillis()) / 50)); + + repeatId = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { + @Override + public void run() { + if (!isUnderRaid() && !isInPreRaid()) { + Bukkit.getServer().getScheduler().cancelTask(repeatId); + return; + } + getRaid().showBossBar(); + } + }, this.isUnderRaid() ? 20L : 0L, 20L); + + getRaid().setSchedId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + endRaid(); + } + }, ((getRaid().getEndsAt() - System.currentTimeMillis()) / 50))); return true; } - public void endSiege() { - getSiege().setEndsAt(System.currentTimeMillis()); - if (getSiege().getSchedId() > 0) { - Bukkit.getScheduler().cancelTask(getSiege().getSchedId()); - getSiege().setSchedId(-1); + public void endRaid() { + getRaid().setEndsAt(System.currentTimeMillis()); + + if (getRaid().getSchedId() > 0) { + ResidenceRaidEndEvent End = new ResidenceRaidEndEvent(this); + Bukkit.getPluginManager().callEvent(End); + Bukkit.getScheduler().cancelTask(getRaid().getSchedId()); + getRaid().setSchedId(-1); } - getSiege().setStartsAt(0L); + getRaid().setStartsAt(0L); - for (Player one : this.getSiege().getAttackers()) { - Location outside = this.getOutsideFreeLoc(one.getLocation(), one); + for (Entry one : this.getRaid().getAttackers().entrySet()) { + Player player = Bukkit.getPlayer(one.getKey()); + if (player == null) + continue; + Residence.getInstance().msg(player, lm.Raid_Ended, this.getName()); + Location outside = this.getOutsideFreeLoc(player.getLocation(), player); if (outside != null) - one.teleport(outside); + player.teleport(outside); } - this.getSiege().getAttackers().clear(); - this.getSiege().getDefenders().clear(); + + for (Entry one : getRaid().getAttackers().entrySet()) { + ResidencePlayer RPlayer = one.getValue().getPlayer(); + if (RPlayer != null) { + RPlayer.setLastRaidAttackTimer(System.currentTimeMillis()); + BossBarInfo barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarRaidIdent); + if (barInfo != null) + RPlayer.removeBossBar(barInfo); + } + } + + for (Entry one : getRaid().getDefenders().entrySet()) { + ResidencePlayer RPlayer = one.getValue().getPlayer(); + if (RPlayer != null) { + BossBarInfo barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarRaidIdent); + if (barInfo != null) + RPlayer.removeBossBar(barInfo); + } + } + + this.getRPlayer().setLastRaidDefendTimer(System.currentTimeMillis()); + + this.getRaid().getAttackers().clear(); + this.getRaid().getDefenders().clear(); } @Override @@ -2054,4 +2139,8 @@ public void showBounds(Player player, boolean showOneTime) { v.setOnce(showOneTime); plugin.getSelectionManager().showBounds(player, v); } + + private ClaimedResidence getResidence() { + return this; + } } diff --git a/src/com/bekvon/bukkit/residence/raid/RaidAttacker.java b/src/com/bekvon/bukkit/residence/raid/RaidAttacker.java new file mode 100644 index 000000000..f11d6106d --- /dev/null +++ b/src/com/bekvon/bukkit/residence/raid/RaidAttacker.java @@ -0,0 +1,34 @@ +package com.bekvon.bukkit.residence.raid; + +import com.bekvon.bukkit.residence.containers.ResidencePlayer; + +public class RaidAttacker { + private ResidencePlayer rPlayer = null; + private int blocksBroken = 0; + private int blocksPlaced = 0; + + public RaidAttacker(ResidencePlayer rPlayer) { + this.rPlayer = rPlayer; + } + + public int getBlocksBroken() { + return blocksBroken; + } + + public void setBlocksBroken(int blocksBroken) { + this.blocksBroken = blocksBroken; + } + + public int getBlocksPlaced() { + return blocksPlaced; + } + + public void setBlocksPlaced(int blocksPlaced) { + this.blocksPlaced = blocksPlaced; + } + + public ResidencePlayer getPlayer() { + return rPlayer; + } + +} diff --git a/src/com/bekvon/bukkit/residence/raid/RaidDefender.java b/src/com/bekvon/bukkit/residence/raid/RaidDefender.java new file mode 100644 index 000000000..8da571a20 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/raid/RaidDefender.java @@ -0,0 +1,33 @@ +package com.bekvon.bukkit.residence.raid; + +import com.bekvon.bukkit.residence.containers.ResidencePlayer; + +public class RaidDefender { + private ResidencePlayer rPlayer = null; + private int blocksBroken = 0; + private int blocksPlaced = 0; + + public RaidDefender(ResidencePlayer rPlayer) { + this.rPlayer = rPlayer; + } + + public int getBlocksBroken() { + return blocksBroken; + } + + public void setBlocksBroken(int blocksBroken) { + this.blocksBroken = blocksBroken; + } + + public int getBlocksPlaced() { + return blocksPlaced; + } + + public void setBlocksPlaced(int blocksPlaced) { + this.blocksPlaced = blocksPlaced; + } + + public ResidencePlayer getPlayer() { + return rPlayer; + } +} diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java new file mode 100644 index 000000000..3a5913435 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -0,0 +1,179 @@ +package com.bekvon.bukkit.residence.raid; + +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.UUID; + +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.ConfigManager; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.BossBar.BossBarInfo; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class ResidenceRaid { + + private ClaimedResidence res; + private Long startsAt = 0L; + private Long endsAt = 0L; +// private Long lastSiegeEnded = 0L; + private HashMap attackers = new HashMap(); + private HashMap defenders = new HashMap(); + + private int schedId = -1; + + public ResidenceRaid(ClaimedResidence res) { + this.res = res; + } + + public boolean onSameTeam(Player player1, Player player2) { + return attackers.containsKey(player1.getUniqueId()) && attackers.containsKey(player2.getUniqueId()) || defenders.containsKey(player1.getUniqueId()) && defenders.containsKey(player2.getUniqueId()); + } + + public Long getEndsAt() { + return endsAt; + } + + public Long getCooldownEnd() { + return endsAt + (ConfigManager.RaidCooldown * 1000); + } + + public void setEndsAt(Long endsAt) { + this.endsAt = endsAt; + } + +// public Long getLastSiegeEnded() { +// return lastSiegeEnded; +// } +// +// public void setLastSiegeEnded(Long lastSiegeEnded) { +// this.lastSiegeEnded = lastSiegeEnded; +// } + + public ClaimedResidence getRes() { + return res; + } + + public HashMap getDefenders() { + return defenders; + } + + public void addDefender(Player defender) { + addDefender(Residence.getInstance().getPlayerManager().getResidencePlayer(defender)); + } + + public void addDefender(ResidencePlayer defender) { + this.attackers.remove(defender.getUniqueId()); + this.defenders.put(defender.getUniqueId(), new RaidDefender(defender)); + } + + public boolean isDefender(Player player) { + return isDefender(player.getUniqueId()); + } + + public boolean isDefender(UUID uuid) { + return defenders.containsKey(uuid); + } + + public void removeDefenders(Player defender) { + this.defenders.remove(defender.getUniqueId()); + } + + public boolean isAttacker(Player player) { + return isAttacker(player.getUniqueId()); + } + + public boolean isAttacker(UUID uuid) { + return attackers.containsKey(uuid); + } + + public HashMap getAttackers() { + return attackers; + } + + public void addAttacker(Player attacker) { + this.defenders.remove(attacker.getUniqueId()); + this.attackers.put(attacker.getUniqueId(), new RaidAttacker(Residence.getInstance().getPlayerManager().getResidencePlayer(attacker))); + } + + public void addAttacker(ResidencePlayer attacker) { + this.defenders.remove(attacker.getUniqueId()); + this.attackers.put(attacker.getUniqueId(), new RaidAttacker(attacker)); + } + + public void removeAttacker(Player attacker) { + this.attackers.remove(attacker.getUniqueId()); + } + + public Long getStartsAt() { + return startsAt; + } + + public void setStartsAt(Long startsAt) { + this.startsAt = startsAt; + } + + public int getSchedId() { + return schedId; + } + + public void setSchedId(int schedId) { + this.schedId = schedId; + } + + public static final String bossBarPreRaidIdent = "ResidencePreRaid"; + public static final String bossBarRaidIdent = "ResidenceRaid"; + + public void showBossBar() { + + if (res.isUnderRaid()) { + for (Entry one : res.getRaid().getAttackers().entrySet()) { + ResidencePlayer rPlayer = one.getValue().getPlayer(); + if (rPlayer.isOnline()) + showBossbar(rPlayer, BarColor.BLUE, lm.Raid_EndsIn); + } + for (Entry one : res.getRaid().getDefenders().entrySet()) { + ResidencePlayer rOwner = one.getValue().getPlayer(); + if (rOwner.isOnline()) + showBossbar(rOwner, BarColor.BLUE, lm.Raid_EndsIn); + } + } else if (res.isInPreRaid()) { + for (Entry one : res.getRaid().getAttackers().entrySet()) { + ResidencePlayer rPlayer = one.getValue().getPlayer(); + if (rPlayer.isOnline()) + showBossbar(rPlayer, BarColor.GREEN, lm.Raid_StartsIn); + } + for (Entry one : res.getRaid().getDefenders().entrySet()) { + ResidencePlayer rOwner = one.getValue().getPlayer(); + if (rOwner.isOnline()) + showBossbar(rOwner, BarColor.GREEN, lm.Raid_StartsIn); + } + } + } + + private void showBossbar(ResidencePlayer rPlayer, BarColor color, lm msg) { + BossBarInfo barInfo = rPlayer.getBossBar(res.isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent); + if (barInfo == null) { + barInfo = new BossBarInfo(rPlayer, res.isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent) { + @Override + public void updateCycle() { + setTitleOfBar(Residence.getInstance().msg(msg, getDefenders().size(), getAttackers().size())); + } + }; + Double secLeft = ((res.isUnderRaid() ? res.getRaid().getEndsAt() : res.getRaid().getStartsAt()) - System.currentTimeMillis()) / 1000D; + barInfo.setKeepForTicks(22); + barInfo.setColor(color); + barInfo.setTitleOfBar(Residence.getInstance().msg(msg, getDefenders().size(), getAttackers().size())); + barInfo.setAdjustPerc(-(1D / secLeft)); + barInfo.setPercentage(secLeft, secLeft); + barInfo.setStyle(BarStyle.SEGMENTED_20); + barInfo.setAuto(20); + + rPlayer.addBossBar(barInfo); + } + } +} diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaidListener.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaidListener.java new file mode 100644 index 000000000..c0e238a9a --- /dev/null +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaidListener.java @@ -0,0 +1,50 @@ +package com.bekvon.bukkit.residence.raid; + +import java.util.UUID; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.BossBar.BossBarInfo; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; + +public class ResidenceRaidListener implements Listener { + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void ResidenceSiegePreStartEvent(com.bekvon.bukkit.residence.event.ResidenceRaidPreStartEvent event) { + + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void ResidenceSiegeStartEvent(com.bekvon.bukkit.residence.event.ResidenceRaidStartEvent event) { + +// for (UUID one : event.getRes().getRaid().getAttackers()) { +// ResidencePlayer RPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(one); +// if (RPlayer != null) { +// BossBarInfo barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarPreRaidIdent); +// if (barInfo != null) +// RPlayer.removeBossBar(barInfo); +// } +// } +// for (UUID one : event.getRes().getRaid().getDefenders()) { +// ResidencePlayer RPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(one); +// if (RPlayer != null) { +// BossBarInfo barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarPreRaidIdent); +// if (barInfo != null) +// RPlayer.removeBossBar(barInfo); +// } +// } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void ResidenceSiegeEndEvent(com.bekvon.bukkit.residence.event.ResidenceRaidEndEvent event) { + + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void ResidenceFlagCheckEvent(com.bekvon.bukkit.residence.event.ResidenceFlagCheckEvent event) { + + } +} diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaidManager.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaidManager.java new file mode 100644 index 000000000..8c5d76ef6 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaidManager.java @@ -0,0 +1,9 @@ +package com.bekvon.bukkit.residence.raid; + +public class ResidenceRaidManager { + + public ResidenceRaidManager() { + + } + +} From 3037231d93fb8a281298611068608e8e9b0dfe20 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 22 Dec 2019 17:58:48 +0200 Subject: [PATCH 0678/1142] Secondary raid update --- .../bukkit/residence/ConfigManager.java | 4 + .../bukkit/residence/commands/attack.java | 19 +-- .../bukkit/residence/commands/clearflags.java | 4 + .../bukkit/residence/commands/contract.java | 7 +- .../bukkit/residence/commands/defend.java | 6 + .../bukkit/residence/commands/expand.java | 7 +- .../bukkit/residence/commands/kick.java | 5 + .../bukkit/residence/commands/leaveraid.java | 66 +++++++++ .../bukkit/residence/commands/market.java | 4 +- .../bukkit/residence/commands/remove.java | 5 + .../bukkit/residence/commands/reset.java | 8 +- .../bukkit/residence/commands/setowner.java | 8 +- .../bukkit/residence/commands/subzone.java | 6 + .../bekvon/bukkit/residence/commands/tp.java | 10 ++ .../residence/containers/ResidencePlayer.java | 11 ++ .../bukkit/residence/containers/lm.java | 24 +++- .../residence/economy/rent/RentManager.java | 20 ++- .../listeners/ResidencePlayerListener.java | 55 +++++++- .../protection/ClaimedResidence.java | 126 ++++++++---------- .../protection/ResidenceManager.java | 6 + .../protection/ResidencePermissions.java | 15 +++ .../bukkit/residence/raid/ResidenceRaid.java | 83 +++++++++++- .../residence/raid/ResidenceRaidListener.java | 12 +- 23 files changed, 406 insertions(+), 105 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/commands/leaveraid.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 8387ab4bd..28a969466 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -252,6 +252,7 @@ public class ConfigManager { public static boolean RaidAttackerBlockPlace = false; public static boolean RaidDefenderBlockBreak = false; public static boolean RaidDefenderBlockPlace = false; + public static boolean RaidDefenderTeleport = false; public static boolean RaidDefenderContainerUsage = false; public static boolean RaidFriendlyFire = false; public static int PreRaidTimer = 120; @@ -1150,6 +1151,9 @@ public void UpdateConfigFile() { RaidDefenderBlockBreak = c.get("Raid.Allow.Defender.blockBreak", true); c.addComment("Raid.Allow.Defender.blockPlace", "Allows to place blocks inside raided residence even if it has place false", "This only applies for defenders and for raid time"); RaidDefenderBlockPlace = c.get("Raid.Allow.Defender.blockPlace", true); + c.addComment("Raid.Allow.Defender.Teleport", "Allows to teleport into raided residence, includes /res tp and other 3rd party teleport commands", "This only applies for defenders and for raid time", + "keep in mind that attackers will not have this option and will be prevented from teleporting inside raided residence"); + RaidDefenderTeleport = c.get("Raid.Allow.Defender.Teleport", false); c.addComment("Raid.Allow.Defender.containerUsage", "Allows to use containers, such as chests, during raid time", "This only applies for defenders and for raid time", "Keeping this at false might prevent from players moving their items to another residence which is not in raid", "Attackers will have access to any container in your residence during raid"); diff --git a/src/com/bekvon/bukkit/residence/commands/attack.java b/src/com/bekvon/bukkit/residence/commands/attack.java index 478857779..53c2b6921 100644 --- a/src/com/bekvon/bukkit/residence/commands/attack.java +++ b/src/com/bekvon/bukkit/residence/commands/attack.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -14,11 +13,7 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.event.ResidenceRaidEndEvent; -import com.bekvon.bukkit.residence.event.ResidenceRaidPreStartEvent; -import com.bekvon.bukkit.residence.event.ResidenceRaidStartEvent; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.Utils; public class attack implements cmd { @@ -45,24 +40,30 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman else res = plugin.getResidenceManager().getByLoc(player.getLocation()); + ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + if (resPlayer.getJoinedRaid() != null) { + plugin.msg(player, lm.Raid_defend_alreadyInAnother, resPlayer.getJoinedRaid().getRes().getName()); + return true; + } + if (res == null) { plugin.msg(player, lm.Invalid_Residence); return true; } if (res.isOwner(player)) { - plugin.msg(player, lm.Raid_noSelf); + plugin.msg(player, lm.Raid_attack_noSelf); return true; } final ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(res.getOwnerUUID()); if (!rPlayer.isOnline()) { - plugin.msg(player, lm.Raid_isOffline); + plugin.msg(player, lm.Raid_attack_isOffline); return true; } if (res.isUnderRaidCooldown() && !res.isInPreRaid() && !res.isUnderRaid()) { - plugin.msg(player, lm.Raid_cooldown, Utils.to24hourShort(res.getRaid().getCooldownEnd() - System.currentTimeMillis() + 1000)); + plugin.msg(player, lm.Raid_attack_cooldown, Utils.to24hourShort(res.getRaid().getCooldownEnd() - System.currentTimeMillis() + 1000)); return true; } @@ -70,7 +71,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (!res.getRaid().isAttacker(player)) res.getRaid().addAttacker(player); - plugin.msg(player, lm.Raid_Joined, res.getName()); + plugin.msg(player, lm.Raid_attack_Joined, res.getName()); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/clearflags.java b/src/com/bekvon/bukkit/residence/commands/clearflags.java index 9cbb3e62d..690ebe2f8 100644 --- a/src/com/bekvon/bukkit/residence/commands/clearflags.java +++ b/src/com/bekvon/bukkit/residence/commands/clearflags.java @@ -29,6 +29,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } ClaimedResidence area = plugin.getResidenceManager().getByName(args[1]); if (area != null) { + if (area.isRaidInitialized()) { + plugin.msg(sender, lm.Raid_cantDo); + return true; + } area.getPermissions().clearFlags(); plugin.msg(player, lm.Flag_Cleared); } else { diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 4560d63d1..65999903b 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -35,7 +35,12 @@ else if (args.length == 3) plugin.msg(player, lm.Invalid_Residence); return true; } - + + if (res.isRaidInitialized()) { + plugin.msg(sender, lm.Raid_cantDo); + return true; + } + if (res.isSubzone() && !resadmin && !ResPerm.command_contract_subzone.hasPermission(player, lm.Subzone_CantContract)) return true; diff --git a/src/com/bekvon/bukkit/residence/commands/defend.java b/src/com/bekvon/bukkit/residence/commands/defend.java index d175b92e3..45eca7629 100644 --- a/src/com/bekvon/bukkit/residence/commands/defend.java +++ b/src/com/bekvon/bukkit/residence/commands/defend.java @@ -65,6 +65,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } + ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + if (resPlayer.getJoinedRaid() != null) { + plugin.msg(player, lm.Raid_attack_alreadyInAnother, resPlayer.getJoinedRaid().getRes().getName()); + return true; + } + if (res.isOwner(player)) { if (target != null) { ClaimedResidence req = joinRequests.get(target.getUniqueId()); diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 2f0bea4c1..ee515c4f1 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -37,7 +37,12 @@ else if (args.length == 3) { plugin.msg(player, lm.Invalid_Residence); return true; } - + + if (res.isRaidInitialized()) { + plugin.msg(sender, lm.Raid_cantDo); + return true; + } + if (res.isSubzone() && !resadmin && !ResPerm.command_expand_subzone.hasPermission(player, lm.Subzone_CantExpand)) return true; diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 053e3e601..fb03015b1 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -54,6 +54,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (!res.isOwner(player)) return false; + if (res.isRaidInitialized()) { + plugin.msg(sender, lm.Raid_cantDo); + return true; + } + if (res.getPlayersInResidence().contains(targetplayer)) { if (ResPerm.command_kick_bypass.hasPermission(targetplayer)) { diff --git a/src/com/bekvon/bukkit/residence/commands/leaveraid.java b/src/com/bekvon/bukkit/residence/commands/leaveraid.java new file mode 100644 index 000000000..dfa1daf53 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/leaveraid.java @@ -0,0 +1,66 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.ConfigManager; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.raid.ResidenceRaid; + +public class leaveraid implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3100) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + final Player player = (Player) sender; + + if (args.length != 1 && args.length != 2) + return false; + + if (!ConfigManager.RaidEnabled) { + plugin.msg(player, lm.Raid_NotEnabled); + return true; + } + + ResidencePlayer owner = plugin.getPlayerManager().getResidencePlayer(player); + + ResidenceRaid raid = owner.getJoinedRaid(); + + if (raid == null || !raid.getRes().isUnderRaid() && !raid.getRes().isInPreRaid()) { + plugin.msg(player, lm.Raid_NotIn); + return true; + } + + if (raid.getRes().isOwner(player)) { + plugin.msg(player, lm.Raid_CantLeave, raid.getRes().getName()); + return true; + } + + raid.removeAttacker(player); + raid.removeDefender(player); + raid.getRes().kickFromResidence(player); + + plugin.msg(player, lm.Raid_left, raid.getRes().getName()); + + return false; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Leave raid"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res leaveraid")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]%%[playername]")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index d16ac38cd..e921dea61 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -249,9 +249,9 @@ private boolean commandResMarketRent(String[] args, boolean resadmin, Player pla else if (args.length > 2) res = plugin.getResidenceManager().getByName(args[2]); - if (res != null) + if (res != null) { plugin.getRentManager().rent(player, res, repeat, resadmin); - else + } else plugin.msg(player, lm.Invalid_Residence); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 0bf3c5224..06915c0f4 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -64,6 +64,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } + if (res.isRaidInitialized() && !resadmin) { + plugin.msg(sender, lm.Raid_noRemoval); + return true; + } + plugin.deleteConfirm.remove(senderName); String resname = res.getName(); diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index f39c27b29..47800a831 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -33,7 +33,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (args.length == 1 && sender instanceof Player) res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); - if (residenceName != null && !residenceName.equalsIgnoreCase("all") && res == null || args.length == 1 && res == null) { + if (residenceName != null && !residenceName.equalsIgnoreCase("all") && res == null || args.length == 1 && res == null) { plugin.msg(sender, lm.Invalid_Residence); return true; } @@ -43,6 +43,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(sender, lm.Residence_NotOwner); return true; } + + if (res.isRaidInitialized() && !resadmin) { + plugin.msg(sender, lm.Raid_cantDo); + return true; + } + res.getPermissions().applyDefaultFlags(); plugin.msg(sender, lm.Flag_reset, res.getName()); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index a07d10b78..b3cc5144d 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -28,6 +28,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman ClaimedResidence area = plugin.getResidenceManager().getByName(args[1]); if (area != null) { + + if (area.isRaidInitialized() && !resadmin) { + plugin.msg(sender, lm.Raid_cantDo); + return true; + } + area.getPermissions().setOwner(args[2], true); if (plugin.getRentManager().isForRent(area.getName())) plugin.getRentManager().removeRentable(area.getName()); @@ -36,7 +42,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman area.getPermissions().applyDefaultFlags(); plugin.getSignUtil().updateSignResName(area); - + if (area.getParent() == null) { plugin.msg(sender, lm.Residence_OwnerChange, args[1], args[2]); } else { diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index 899478f79..2f62024cd 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -39,6 +39,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Invalid_Residence); return true; } + + if (res.isRaidInitialized()) { + plugin.msg(sender, lm.Raid_cantDo); + return true; + } + if (plugin.getWorldEdit() != null) { if (plugin.getWorldEditTool() == plugin.getConfigManager().getSelectionTool()) { plugin.getSelectionManager().worldEdit(player); diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index 8b23eef79..f8fb6c476 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -31,6 +31,16 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Invalid_Residence); return true; } + + if (res.isRaidInitialized()) { + if (res.getRaid().isAttacker(player)) { + plugin.msg(player, lm.Raid_cantDo); + return true; + } + + + } + res.tpToResidence(player, player, resadmin); return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index a537708a2..a14c72688 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -18,6 +18,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.raid.ResidenceRaid; import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; @@ -45,6 +46,8 @@ public class ResidencePlayer { private Long lastRaidAttackTimer = 0L; private Long lastRaidDefendTimer = 0L; + + private ResidenceRaid raid = null; public ResidencePlayer(OfflinePlayer off) { if (off == null) @@ -487,4 +490,12 @@ public Long getLastRaidDefendTimer() { public void setLastRaidDefendTimer(Long lastRaidDefendTimer) { this.lastRaidDefendTimer = lastRaidDefendTimer; } + + public ResidenceRaid getJoinedRaid() { + return raid; + } + + public void setJoinedRaid(ResidenceRaid raid) { + this.raid = raid; + } } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 2869432c8..be9a75c07 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -45,7 +45,7 @@ public enum lm { Area_Remove("&eRemoved area &6%1..."), Area_Name("&eName: &2%1"), - Area_ListAll("&a{&eID:&c%1 &eP1:&c(%2,%3,%4) &eP2:&c(%5,%6,%7) &e(Size:&c%8&e)&a}"), + Area_ListAll("&a{&eID:&c%1 &eP1:&c(%2,%3,%4) &eP2:&c(%5,%6,%7) &e(Size:&c%8&e)&a}"), Area_RemoveLast("&cCannot remove the last area in a residence."), Area_NotWithinParent("&cArea is not within parent area."), @@ -97,22 +97,32 @@ public enum lm { Sign_ResName("&8%1"), Sign_Owner("&5%1"), - Raid_NotEnabled("&cRaid is not enabled!"), + Raid_NotEnabled("&cRaid feature is not enabled!"), + Raid_NotIn("&cYou are not in the raid!"), + Raid_CantLeave("&cYou cant leave (%1) your own residence raid!"), Raid_StartsIn("&7Raid starts in: [autoTimeLeft] &2%1D &4%2A"), Raid_EndsIn("&cRaid ends in: [autoTimeLeft] &2%1D &4%2A"), - Raid_Joined("&7Joined &2%1 &7raid!"), - Raid_Started("&7Raid started!"), + Raid_Ended("&7Raid on &4%1 &7ended!"), Raid_cantDo("&cCan't do this during raid!"), - Raid_noSelf("&cCan't raid your own residence!"), - Raid_isOffline("&cCan't raid while owner is offline!"), - Raid_cooldown("&cToo soon for another raid on this residence! Wait %1"), + Raid_left("&7You have left &4%1 &7raid"), + Raid_noFlagChange("&cCan't change flags during raid"), + Raid_noRemoval("&cCan't remove residence during raid"), + + Raid_attack_Joined("&7Joined &2%1 &7raid!"), + Raid_attack_Started("&7Raid started!"), + Raid_attack_cooldown("&cToo soon for another raid on this residence! Wait %1"), + Raid_attack_isOffline("&cCan't raid while owner is offline!"), + Raid_attack_noSelf("&cCan't raid your own residence!"), + Raid_attack_alreadyInAnother("&cCan't join this rais, you are in another one already (%1)"), + Raid_defend_Joined("&7Joined &2%1 &7defence forces!"), Raid_defend_Sent("&7Request to join raid defence is sent, wait for confirmation"), Raid_defend_JoinedDef("&2%1&7 joined defence forces!"), Raid_defend_IsOffline("&cCan't join defend team while owner is offline!"), Raid_defend_noSelf("&cYou already defending this residence"), Raid_defend_notRaided("&cResidence is not under the raid"), + Raid_defend_alreadyInAnother("&cCan't join this residence defence, you are in another one already (%1)"), info_years("&e%1 &6years "), info_oneYear("&e%1 &6year "), diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 5ceaf79fc..1bda4a970 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -188,6 +188,11 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days return; } + if (res.isRaidInitialized() && !resadmin) { + plugin.msg(player, lm.Raid_cantDo); + return; + } + if (!plugin.getConfigManager().enabledRentSystem()) { plugin.msg(player, lm.Economy_MarketDisabled); return; @@ -229,9 +234,9 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days newrent.AllowAutoPay = AllowAutoPay; res.setRentable(newrent); rentableLand.add(res); - + plugin.getSignUtil().CheckSign(res); - + plugin.msg(player, lm.Residence_ForRentSuccess, res.getResidenceName(), amount, days); } else { plugin.msg(player, lm.Residence_AlreadyRent); @@ -246,11 +251,17 @@ public void rent(Player player, String landName, boolean AutoPay, boolean resadm @SuppressWarnings("deprecation") public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean resadmin) { + if (res == null) { plugin.msg(player, lm.Invalid_Residence); return; } + if (res.isRaidInitialized() && !resadmin) { + plugin.msg(player, lm.Raid_cantDo); + return; + } + if (!plugin.getConfigManager().enabledRentSystem()) { plugin.msg(player, lm.Rent_Disabled); return; @@ -404,6 +415,11 @@ public void unrent(Player player, ClaimedResidence res, boolean resadmin) { return; } + if (res.isRaidInitialized() && !resadmin) { + plugin.msg(player, lm.Raid_cantDo); + return; + } + RentedLand rent = res.getRentedLand(); if (rent == null) { plugin.msg(player, lm.Residence_NotRented); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 0fc8c85c5..cfa446e4f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2142,13 +2142,60 @@ public void run() { } if (move) { - if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move.hasPermission(player)) { - if (res.isUnderRaid()) { - if (res.getRaid().isAttacker(player.getUniqueId()) || res.getRaid().isDefender(player.getUniqueId())) { - return true; + if (res.isUnderRaid()) { + if (res.getRaid().isAttacker(player.getUniqueId()) || res.getRaid().isDefender(player.getUniqueId())) { + return true; + } else { + Location lastLoc = lastOutsideLoc.get(uuid); + + if (plugin.getConfigManager().BounceAnimation()) { + Visualizer v = new Visualizer(player); + v.setErrorAreas(res); + v.setOnce(true); + plugin.getSelectionManager().showBounds(player, v); } + + ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); + boolean teleported = false; + if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player)) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); + teleported = teleport(player, newLoc); + } else if (lastLoc != null) { + + StuckInfo info = updateStuckTeleport(player, loc); + player.closeInventory(); + if (info != null && info.getTimesTeleported() > 5) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + teleported = teleport(player, newLoc); + } else { + teleported = teleport(player, lastLoc); + } + } else { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); + teleported = teleport(player, newLoc); + } + + switch (plugin.getConfigManager().getEnterLeaveMessageType()) { + case ActionBar: + case TitleBar: + FlagPermissions perms = res.getPermissions(); + if (perms.has(Flags.title, FlagCombo.TrueOrNone)) + ActionBarTitleMessages.send(player, plugin.msg(lm.Raid_cantDo)); + break; + case ChatBox: + plugin.msg(player, lm.Raid_cantDo, orres.getName()); + break; + default: + break; + } + return teleported; } + } + + if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move.hasPermission(player)) { Location lastLoc = lastOutsideLoc.get(uuid); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 3e49e4672..99b03b312 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1275,28 +1275,40 @@ public int isSafeTp(Player player) { public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { boolean isAdmin = plugin.isResAdminOn(reqPlayer); - boolean bypassDelay = ResPerm.tpdelaybypass.hasPermission(targetPlayer); - if (!resadmin && !isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer) - && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) - && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); - PermissionGroup group = rPlayer.getGroup(); - if (!group.hasTpAccess()) { - plugin.msg(reqPlayer, lm.General_TeleportDeny); - return; - } - if (!reqPlayer.equals(targetPlayer)) { - plugin.msg(reqPlayer, lm.General_NoPermission); + if (this.isRaidInitialized()) { + if (this.getRaid().isAttacker(targetPlayer)) { + plugin.msg(reqPlayer, lm.Raid_cantDo); return; - } - if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { - plugin.msg(reqPlayer, lm.Residence_TeleportNoFlag); + } else if (this.getRaid().isDefender(targetPlayer) && !ConfigManager.RaidDefenderTeleport) { + plugin.msg(reqPlayer, lm.Raid_cantDo); return; + } else if (!resadmin) { + plugin.msg(reqPlayer, lm.Raid_cantDo); } - if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { - plugin.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); - return; + + } else { + if (!resadmin && !isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer) + && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) + && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); + PermissionGroup group = rPlayer.getGroup(); + if (!group.hasTpAccess()) { + plugin.msg(reqPlayer, lm.General_TeleportDeny); + return; + } + if (!reqPlayer.equals(targetPlayer)) { + plugin.msg(reqPlayer, lm.General_NoPermission); + return; + } + if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { + plugin.msg(reqPlayer, lm.Residence_TeleportNoFlag); + return; + } + if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { + plugin.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); + return; + } } } @@ -1309,6 +1321,8 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } } + boolean bypassDelay = ResPerm.tpdelaybypass.hasPermission(targetPlayer); + if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin && !bypassDelay) { plugin.msg(reqPlayer, lm.General_TeleportStarted, this.getName(), plugin.getConfigManager().getTeleportDelay()); @@ -1782,6 +1796,12 @@ public boolean renameArea(Player player, String oldName, String newName, boolean plugin.msg(player, lm.Invalid_NameCharacters); return false; } + + if (isRaidInitialized() && !resadmin) { + plugin.msg(player, lm.Raid_cantDo); + return false; + } + if (player == null || perms.hasResidencePermission(player, true) || resadmin) { if (areas.containsKey(newName)) { if (player != null) @@ -1853,6 +1873,7 @@ public boolean isOwner(String name) { public boolean isOwner(UUID uuid) { return perms.getOwnerUUID().toString().equals(uuid.toString()); } + public boolean isOwner(Player p) { if (p == null) return false; @@ -1971,6 +1992,16 @@ public void setLeaseExpireTime(Long leaseExpireTime) { this.leaseExpireTime = leaseExpireTime; } + public boolean kickFromResidence(Player player) { + if (!this.containsLoc(player.getLocation())) + return false; + Location loc = Residence.getInstance().getConfigManager().getKickLocation(); + player.closeInventory(); + if (loc != null) { + return player.teleport(loc); + } + return player.teleport(getOutsideFreeLoc(player.getLocation(), player)); + } // public Town getTown() { // return town; // } @@ -1984,6 +2015,14 @@ public boolean isUnderRaid() { && getRaid().getStartsAt() < System.currentTimeMillis(); } + public boolean isRaidInitialized() { + if (isUnderRaid() || isInPreRaid()) + return true; + if (this.getParent() != null) + return this.getParent().isRaidInitialized(); + return false; + } + public boolean isInPreRaid() { return getRaid().getEndsAt() > System.currentTimeMillis() && getRaid().getStartsAt() > System.currentTimeMillis(); @@ -2038,7 +2077,7 @@ public boolean startRaid() { public void run() { Bukkit.getPluginManager().callEvent(start); if (start.isCancelled()) - start.getRes().endRaid(); + start.getRes().getRaid().endRaid(); } }, ((getRaid().getStartsAt() - System.currentTimeMillis()) / 50)); @@ -2056,60 +2095,13 @@ public void run() { getRaid().setSchedId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { - endRaid(); + getRaid().endRaid(); } }, ((getRaid().getEndsAt() - System.currentTimeMillis()) / 50))); return true; } - public void endRaid() { - getRaid().setEndsAt(System.currentTimeMillis()); - - if (getRaid().getSchedId() > 0) { - ResidenceRaidEndEvent End = new ResidenceRaidEndEvent(this); - Bukkit.getPluginManager().callEvent(End); - Bukkit.getScheduler().cancelTask(getRaid().getSchedId()); - getRaid().setSchedId(-1); - } - - getRaid().setStartsAt(0L); - - for (Entry one : this.getRaid().getAttackers().entrySet()) { - Player player = Bukkit.getPlayer(one.getKey()); - if (player == null) - continue; - Residence.getInstance().msg(player, lm.Raid_Ended, this.getName()); - Location outside = this.getOutsideFreeLoc(player.getLocation(), player); - if (outside != null) - player.teleport(outside); - } - - for (Entry one : getRaid().getAttackers().entrySet()) { - ResidencePlayer RPlayer = one.getValue().getPlayer(); - if (RPlayer != null) { - RPlayer.setLastRaidAttackTimer(System.currentTimeMillis()); - BossBarInfo barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarRaidIdent); - if (barInfo != null) - RPlayer.removeBossBar(barInfo); - } - } - - for (Entry one : getRaid().getDefenders().entrySet()) { - ResidencePlayer RPlayer = one.getValue().getPlayer(); - if (RPlayer != null) { - BossBarInfo barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarRaidIdent); - if (barInfo != null) - RPlayer.removeBossBar(barInfo); - } - } - - this.getRPlayer().setLastRaidDefendTimer(System.currentTimeMillis()); - - this.getRaid().getAttackers().clear(); - this.getRaid().getDefenders().clear(); - } - @Override public boolean equals(Object obj) { if (obj == null) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 6c2749049..93eb2a5b3 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1108,6 +1108,12 @@ public boolean renameResidence(Player player, String oldName, String newName, bo plugin.msg(player, lm.Invalid_Residence); return false; } + + if (res.isRaidInitialized() && !resadmin) { + plugin.msg(player, lm.Raid_cantDo); + return false; + } + oldName = res.getName(); if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { if (res.getParent() == null) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 5d3a6cd07..d2036ae9d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -315,6 +315,11 @@ public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String f return false; } + if (this.residence.isRaidInitialized() && !resadmin) { + Residence.getInstance().msg(sender, lm.Raid_noFlagChange); + return false; + } + Flags f = Flags.getFlag(flag); if (f != null) flag = f.toString(); @@ -342,6 +347,11 @@ public boolean setGroupFlag(Player player, String group, String flag, String fla Flags f = Flags.getFlag(flag); if (f != null) flag = f.toString(); + + if (this.residence.isRaidInitialized() && !resadmin) { + Residence.getInstance().msg(player, lm.Raid_noFlagChange); + return false; + } group = group.toLowerCase(); if (validFlagGroups.containsKey(flag)) @@ -380,6 +390,11 @@ public boolean setFlag(CommandSender sender, String flag, FlagState state, boole if (f != null) flag = f.toString(); + if (this.residence.isRaidInitialized() && !resadmin) { + Residence.getInstance().msg(sender, lm.Raid_noFlagChange); + return false; + } + if (validFlagGroups.containsKey(flag)) return this.setFlagGroup(sender, flag, state, resadmin); diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java index 3a5913435..402480ef7 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -4,6 +4,8 @@ import java.util.Map.Entry; import java.util.UUID; +import org.bukkit.Bukkit; +import org.bukkit.Location; import org.bukkit.boss.BarColor; import org.bukkit.boss.BarStyle; import org.bukkit.entity.Player; @@ -13,6 +15,7 @@ import com.bekvon.bukkit.residence.BossBar.BossBarInfo; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.event.ResidenceRaidEndEvent; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class ResidenceRaid { @@ -69,6 +72,7 @@ public void addDefender(Player defender) { public void addDefender(ResidencePlayer defender) { this.attackers.remove(defender.getUniqueId()); this.defenders.put(defender.getUniqueId(), new RaidDefender(defender)); + defender.setJoinedRaid(this); } public boolean isDefender(Player player) { @@ -79,8 +83,13 @@ public boolean isDefender(UUID uuid) { return defenders.containsKey(uuid); } - public void removeDefenders(Player defender) { + public void removeDefender(Player defender) { + removeDefender(Residence.getInstance().getPlayerManager().getResidencePlayer(defender)); + } + + public void removeDefender(ResidencePlayer defender) { this.defenders.remove(defender.getUniqueId()); + defender.setJoinedRaid(null); } public boolean isAttacker(Player player) { @@ -95,18 +104,39 @@ public HashMap getAttackers() { return attackers; } + public void clearAttackers() { + for (Entry one : this.attackers.entrySet()) { + one.getValue().getPlayer().setJoinedRaid(null); + } + this.attackers.clear(); + } + + public void clearDefenders() { + for (Entry one : this.defenders.entrySet()) { + one.getValue().getPlayer().setJoinedRaid(null); + } + this.defenders.clear(); + } + public void addAttacker(Player attacker) { - this.defenders.remove(attacker.getUniqueId()); - this.attackers.put(attacker.getUniqueId(), new RaidAttacker(Residence.getInstance().getPlayerManager().getResidencePlayer(attacker))); + addAttacker(Residence.getInstance().getPlayerManager().getResidencePlayer(attacker)); } public void addAttacker(ResidencePlayer attacker) { this.defenders.remove(attacker.getUniqueId()); this.attackers.put(attacker.getUniqueId(), new RaidAttacker(attacker)); + + attacker.setJoinedRaid(this); } public void removeAttacker(Player attacker) { this.attackers.remove(attacker.getUniqueId()); + removeAttacker(Residence.getInstance().getPlayerManager().getResidencePlayer(attacker)); + } + + public void removeAttacker(ResidencePlayer attacker) { + attacker.setJoinedRaid(null); + this.attackers.remove(attacker.getUniqueId()); } public Long getStartsAt() { @@ -176,4 +206,51 @@ public void updateCycle() { rPlayer.addBossBar(barInfo); } } + + public void endRaid() { + setEndsAt(System.currentTimeMillis()); + + if (getSchedId() > 0) { + ResidenceRaidEndEvent End = new ResidenceRaidEndEvent(res); + Bukkit.getPluginManager().callEvent(End); + Bukkit.getScheduler().cancelTask(getSchedId()); + setSchedId(-1); + } + + setStartsAt(0L); + + for (Entry one : getAttackers().entrySet()) { + Player player = Bukkit.getPlayer(one.getKey()); + if (player == null) + continue; + Residence.getInstance().msg(player, lm.Raid_Ended, res.getName()); + Location outside = res.getOutsideFreeLoc(player.getLocation(), player); + if (outside != null) + player.teleport(outside); + } + + for (Entry one : getAttackers().entrySet()) { + ResidencePlayer RPlayer = one.getValue().getPlayer(); + if (RPlayer != null) { + RPlayer.setLastRaidAttackTimer(System.currentTimeMillis()); + BossBarInfo barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarRaidIdent); + if (barInfo != null) + RPlayer.removeBossBar(barInfo); + } + } + + for (Entry one : getDefenders().entrySet()) { + ResidencePlayer RPlayer = one.getValue().getPlayer(); + if (RPlayer != null) { + BossBarInfo barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarRaidIdent); + if (barInfo != null) + RPlayer.removeBossBar(barInfo); + } + } + + res.getRPlayer().setLastRaidDefendTimer(System.currentTimeMillis()); + + clearAttackers(); + clearDefenders(); + } } diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaidListener.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaidListener.java index c0e238a9a..d3451d56f 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaidListener.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaidListener.java @@ -1,15 +1,10 @@ package com.bekvon.bukkit.residence.raid; -import java.util.UUID; - +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.BossBar.BossBarInfo; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; - public class ResidenceRaidListener implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -19,7 +14,10 @@ public void ResidenceSiegePreStartEvent(com.bekvon.bukkit.residence.event.Reside @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void ResidenceSiegeStartEvent(com.bekvon.bukkit.residence.event.ResidenceRaidStartEvent event) { - + for (Player one : event.getRes().getPlayersInResidence()) { + if (!event.getRes().getRaid().isDefender(one)) + event.getRes().kickFromResidence(one); + } // for (UUID one : event.getRes().getRaid().getAttackers()) { // ResidencePlayer RPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(one); // if (RPlayer != null) { From 2dbfedf8f97ea407ec98cbf4db9ca226cc9f3ffb Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 19 Jan 2020 12:52:37 +0200 Subject: [PATCH 0679/1142] Lets check if we can see player before attempting to kick him. --- .../bukkit/residence/commands/kick.java | 2 +- .../bukkit/residence/commands/raid.java | 63 +++++++++ .../bukkit/residence/commands/raidstatus.java | 131 ++++++++++++++++++ 3 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 src/com/bekvon/bukkit/residence/commands/raid.java create mode 100644 src/com/bekvon/bukkit/residence/commands/raidstatus.java diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index fb03015b1..f872b3f13 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -32,7 +32,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return false; Player targetplayer = Bukkit.getPlayer(args[1]); - if (targetplayer == null) { + if (targetplayer == null || !player.canSee(targetplayer)) { plugin.msg(player, lm.General_NotOnline); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/raid.java b/src/com/bekvon/bukkit/residence/commands/raid.java new file mode 100644 index 000000000..126a1a75d --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/raid.java @@ -0,0 +1,63 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.Zrips.CMI.utils.RawMessage; +import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.ConfigManager; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.raid.RaidDefender; + +public class raid implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3100) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + final Player player = (Player) sender; + + if (args.length != 1 && args.length != 2) + return false; + + if (!ConfigManager.RaidEnabled) { + plugin.msg(player, lm.Raid_NotEnabled); + return true; + } + + if (!resadmin) { + plugin.msg(sender, lm.General_NoPermission); + } + + // raid start [resname/playerName/currentres] + // raid stop [resname/playerName/currentres] + // raid immunity [add/take/set/clear] [resname/playerName/currentres] + + + return false; + } + + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Manage raid in residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res defend [resName] (playerName)")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]%%[playername]")); + } + +} diff --git a/src/com/bekvon/bukkit/residence/commands/raidstatus.java b/src/com/bekvon/bukkit/residence/commands/raidstatus.java new file mode 100644 index 000000000..69d6f00de --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/raidstatus.java @@ -0,0 +1,131 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; +import java.util.Map.Entry; +import java.util.UUID; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.residence.ConfigManager; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.raid.RaidAttacker; +import com.bekvon.bukkit.residence.raid.RaidDefender; +import com.bekvon.bukkit.residence.raid.ResidenceRaid; +import com.bekvon.bukkit.residence.utils.GetTime; +import com.bekvon.bukkit.residence.utils.Utils; + +public class raidstatus implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 3100) + public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + if (!(sender instanceof Player)) + return false; + + final Player player = (Player) sender; + + if (args.length != 1 && args.length != 2) + return false; + + if (!ConfigManager.RaidEnabled) { + plugin.msg(player, lm.Raid_NotEnabled); + return true; + } + + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) { + OfflinePlayer offp = plugin.getOfflinePlayer(args[1]); + if (offp != null) { + ResidencePlayer resp = plugin.getPlayerManager().getResidencePlayer(offp.getUniqueId()); + res = resp.getCurrentlyRaidedResidence(); + } + } + + if (res == null) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + } + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + ResidenceRaid raid = res.getRaid(); + + plugin.msg(sender, "&7----------- &f" + res.getName() + "(" + res.getOwner() + ") &7-----------"); + if (res.isInPreRaid()) { + plugin.msg(sender, "&7Raid starts in: " + Utils.to24hourShort(raid.getStartsAt() - System.currentTimeMillis())); + RawMessage rm = new RawMessage(); + rm.add("&7Attackers: &4" + raid.getAttackers().size(), getAttackers(raid)); + rm.show(sender); + rm = new RawMessage(); + rm.add("&7Defenders: &2" + raid.getDefenders().size(), getDefenders(raid)); + rm.show(sender); + } else if (res.isUnderRaid()) { + plugin.msg(sender, "&7Raid ends in: " + Utils.to24hourShort(raid.getEndsAt() - System.currentTimeMillis())); + RawMessage rm = new RawMessage(); + rm.add("&7Attackers: &4" + raid.getAttackers().size(), getAttackers(raid)); + rm.show(sender); + rm = new RawMessage(); + rm.add("&7Defenders: &2" + raid.getDefenders().size(), getDefenders(raid)); + rm.show(sender); + } else { + plugin.msg(sender, raid.getCooldownEnd() < System.currentTimeMillis() ? "&2Can be raided" : "&ePosible raid in: " + Utils.to24hourShort(raid.getCooldownEnd() - System.currentTimeMillis() + + 1000L)); + } + + return true; + } + + private String getAttackers(ResidenceRaid raid) { + String r = ""; + int i = 0; + for (Entry one : raid.getAttackers().entrySet()) { + if (!one.getValue().getPlayer().isOnline()) + continue; + i++; + if (i >= 5) + r += " \n"; + if (!r.isEmpty()) + r += ", "; + if (one.getValue().getPlayer().isOnline()) + r += one.getValue().getPlayer().getPlayer().getDisplayName(); + } + return r; + } + + private String getDefenders(ResidenceRaid raid) { + String r = ""; + int i = 0; + for (Entry one : raid.getDefenders().entrySet()) { + if (!one.getValue().getPlayer().isOnline()) + continue; + i++; + if (i >= 5) + r += " \n"; + if (!r.isEmpty()) + r += ", "; + if (one.getValue().getPlayer().isOnline()) + r += one.getValue().getPlayer().getPlayer().getDisplayName(); + } + return r; + } + + @Override + public void getLocale(ConfigReader c, String path) { + c.get(path + "Description", "Check raid status for a residence"); + c.get(path + "Info", Arrays.asList("&eUsage: &6/res raidstatus (resName/playerName)")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]%%[playername]")); + } + +} From 70bc47773ed346dcb594273dd3d1168e978b282e Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 22 Jan 2020 12:53:19 +0200 Subject: [PATCH 0680/1142] Fixing version check --- src/com/bekvon/bukkit/cmiLib/VersionChecker.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/VersionChecker.java b/src/com/bekvon/bukkit/cmiLib/VersionChecker.java index 917abc70f..33def486d 100644 --- a/src/com/bekvon/bukkit/cmiLib/VersionChecker.java +++ b/src/com/bekvon/bukkit/cmiLib/VersionChecker.java @@ -4,6 +4,7 @@ import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; +import java.net.URLConnection; import java.util.Arrays; import java.util.List; @@ -172,12 +173,9 @@ public void run() { public String getNewVersion() { try { - HttpURLConnection con = (HttpURLConnection) new URL("https://www.spigotmc.org/api/general.php").openConnection(); - con.setDoOutput(true); - con.setRequestMethod("POST"); - con.getOutputStream().write(("key=98BE0FE67F88AB82B4C197FAF1DC3B69206EFDCC4D3B80FC83A00037510B99B4&resource=" + resource).getBytes("UTF-8")); + URLConnection con = new URL("https://api.spigotmc.org/legacy/update.php?resource=" + resource).openConnection(); String version = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine(); - if (version.length() <= 7) + if (version.length() <= 8) return version; } catch (Exception ex) { Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Failed to check for " + plugin.getDescription().getName() + " update on spigot web page."); From 36c533b0b43babdf694fcf371e6e770cc5a82210 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 23 Jan 2020 15:45:21 +0200 Subject: [PATCH 0681/1142] New and updated command and locale handling --- .../bekvon/bukkit/cmiLib/ConfigReader.java | 113 +++++++++++- .../bukkit/residence/CommandFiller.java | 15 +- .../bukkit/residence/ConfigManager.java | 20 +-- .../bukkit/residence/LocaleManager.java | 30 +++- .../bekvon/bukkit/residence/Residence.java | 14 +- .../residence/ResidenceCommandListener.java | 109 +++++++++++- .../bukkit/residence/commands/area.java | 66 +++---- .../bukkit/residence/commands/attack.java | 16 +- .../bukkit/residence/commands/auto.java | 29 ++- .../bukkit/residence/commands/bank.java | 26 +-- .../bukkit/residence/commands/check.java | 26 +-- .../bukkit/residence/commands/clearflags.java | 12 +- .../bukkit/residence/commands/command.java | 30 ++-- .../bukkit/residence/commands/compass.java | 44 +++-- .../bukkit/residence/commands/confirm.java | 26 +-- .../bukkit/residence/commands/contract.java | 30 ++-- .../bukkit/residence/commands/create.java | 14 +- .../bukkit/residence/commands/current.java | 23 ++- .../bukkit/residence/commands/defend.java | 18 +- .../bukkit/residence/commands/expand.java | 26 +-- .../bukkit/residence/commands/flags.java | 35 ++-- .../bukkit/residence/commands/give.java | 20 +-- .../bukkit/residence/commands/gset.java | 20 +-- .../bukkit/residence/commands/info.java | 19 +- .../bukkit/residence/commands/kick.java | 14 +- .../bukkit/residence/commands/lease.java | 80 ++++----- .../bukkit/residence/commands/leaveraid.java | 12 +- .../bukkit/residence/commands/limits.java | 20 +-- .../bukkit/residence/commands/list.java | 10 +- .../bukkit/residence/commands/listall.java | 10 +- .../residence/commands/listallhidden.java | 14 +- .../bukkit/residence/commands/listhidden.java | 22 +-- .../bukkit/residence/commands/lists.java | 86 ++++----- .../bukkit/residence/commands/lset.java | 30 ++-- .../bukkit/residence/commands/market.java | 165 +++++++++--------- .../bukkit/residence/commands/material.java | 14 +- .../bukkit/residence/commands/message.java | 10 +- .../bukkit/residence/commands/mirror.java | 14 +- .../bukkit/residence/commands/padd.java | 22 +-- .../bukkit/residence/commands/pdel.java | 18 +- .../bukkit/residence/commands/pset.java | 44 ++--- .../bukkit/residence/commands/raid.java | 56 ++++-- .../bukkit/residence/commands/raidstatus.java | 17 +- .../bekvon/bukkit/residence/commands/rc.java | 29 ++- .../bukkit/residence/commands/reload.java | 24 ++- .../bukkit/residence/commands/remove.java | 16 +- .../bukkit/residence/commands/removeall.java | 14 +- .../residence/commands/removeworld.java | 14 +- .../bukkit/residence/commands/rename.java | 21 ++- .../bukkit/residence/commands/renamearea.java | 22 +-- .../bukkit/residence/commands/resadmin.java | 16 +- .../bukkit/residence/commands/reset.java | 20 +-- .../bekvon/bukkit/residence/commands/rt.java | 19 +- .../bukkit/residence/commands/select.java | 109 ++++++------ .../bukkit/residence/commands/server.java | 26 ++- .../bekvon/bukkit/residence/commands/set.java | 28 +-- .../bukkit/residence/commands/setall.java | 20 +-- .../bukkit/residence/commands/setallfor.java | 18 +- .../bukkit/residence/commands/setmain.java | 16 +- .../bukkit/residence/commands/setowner.java | 20 +-- .../bukkit/residence/commands/shop.java | 105 +++++------ .../bukkit/residence/commands/show.java | 14 +- .../residence/commands/signconvert.java | 14 +- .../bukkit/residence/commands/signupdate.java | 22 +-- .../bukkit/residence/commands/sublist.java | 16 +- .../bukkit/residence/commands/subzone.java | 20 +-- .../bukkit/residence/commands/tool.java | 24 +-- .../bekvon/bukkit/residence/commands/tp.java | 20 +-- .../bukkit/residence/commands/tpconfirm.java | 12 +- .../bukkit/residence/commands/tpset.java | 10 +- .../bukkit/residence/commands/unstuck.java | 14 +- .../bukkit/residence/commands/version.java | 10 +- .../containers/CommandAnnotation.java | 16 +- .../residence/containers/CommandStatus.java | 22 ++- .../bukkit/residence/containers/cmd.java | 8 +- .../bukkit/residence/containers/lm.java | 3 + .../protection/ClaimedResidence.java | 6 + .../residence/raid/ResidenceRaidListener.java | 7 +- 78 files changed, 1230 insertions(+), 984 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/ConfigReader.java b/src/com/bekvon/bukkit/cmiLib/ConfigReader.java index 020ceb07b..045d7711e 100644 --- a/src/com/bekvon/bukkit/cmiLib/ConfigReader.java +++ b/src/com/bekvon/bukkit/cmiLib/ConfigReader.java @@ -25,9 +25,11 @@ public class ConfigReader extends YamlConfiguration { private HashMap comments; + private HashMap contents; YamlConfiguration config; private String p = null; private File file = null; + private boolean recordContents = false; public ConfigReader(String fileName) throws Exception { this(new File(Residence.getInstance().getDataFolder(), fileName)); @@ -36,10 +38,19 @@ public ConfigReader(String fileName) throws Exception { public ConfigReader(File file) throws Exception { super(); comments = new HashMap(); + contents = new HashMap(); this.file = file; this.config = getyml(file); } + public void load() { + try { + this.load(file); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + } + @Override public void save(String file) throws IOException { if (file == null) { @@ -181,6 +192,9 @@ else if (key.contains("\"")) } public void addComment(String path, String... commentLines) { + if (this.p != null) + path = this.p + path; + StringBuilder commentstring = new StringBuilder(); String leadingSpaces = ""; for (int n = 0; n < path.length(); n++) { @@ -207,6 +221,7 @@ public YamlConfiguration getyml(File file) throws Exception { try { fileinputstream = new FileInputStream(file); InputStreamReader str = new InputStreamReader(fileinputstream, Charset.forName("UTF-8")); + config.load(str); str.close(); } catch (FileNotFoundException e) { @@ -289,6 +304,11 @@ public void copyDefaults(boolean value) { getC().options().copyDefaults(value); } + public Boolean get(String path, Boolean boo) { + path = process(path, boo); + return config.getBoolean(path); + } + private String process(String path, Object value) { if (this.p != null) path = this.p + path; @@ -298,11 +318,6 @@ private String process(String path, Object value) { return path; } - public Boolean get(String path, Boolean boo) { - path = process(path, boo); - return config.getBoolean(path); - } - public Object get(String path, Location boo) { path = process(path, boo); return config.get(path); @@ -318,14 +333,84 @@ public List getIntList(String path, List list) { return config.getIntegerList(path); } + private static String convertUnicode(String st) { + try { + if (!st.contains("\\u")) + return st; + + StringBuilder sb = new StringBuilder(st.length()); + for (int i = 0; i < st.length(); i++) { + char ch = st.charAt(i); + if (ch == '\\') { + char nextChar = (i == st.length() - 1) ? '\\' : st.charAt(i + 1); + if (nextChar >= '0' && nextChar <= '7') { + String code = "" + nextChar; + i++; + if ((i < st.length() - 1) && st.charAt(i + 1) >= '0' && st.charAt(i + 1) <= '7') { + code += st.charAt(i + 1); + i++; + if ((i < st.length() - 1) && st.charAt(i + 1) >= '0' && st.charAt(i + 1) <= '7') { + code += st.charAt(i + 1); + i++; + } + } + sb.append((char) Integer.parseInt(code, 8)); + continue; + } + switch (nextChar) { + case 'u': + if (i >= st.length() - 5) { + ch = 'u'; + break; + } + try { + int code = Integer.parseInt("" + st.charAt(i + 2) + st.charAt(i + 3) + st.charAt(i + 4) + st.charAt(i + 5), 16); + sb.append(Character.toChars(code)); + } catch (NumberFormatException e) { + sb.append("\\"); + continue; + } + i += 5; + continue; + default: + sb.append("\\"); + continue; + } + i++; + } + sb.append(ch); + } + return sb.toString(); + } catch (Exception e) { + e.printStackTrace(); + return st; + } + } + public List get(String path, List list) { path = process(path, list); - return config.getStringList(path); + + if (recordContents) { + contents.put(path, config.isList(path) ? config.getStringList(path) : list); + } + + List ls = config.getStringList(path); + + for (int p = 0; p < ls.size(); p++) { + String st = convertUnicode(ls.get(p)); + ls.set(p, st); + } + + return ls; } public String get(String path, String boo) { path = process(path, boo); - return config.getString(path); + + if (recordContents) + contents.put(path, config.isString(path) ? config.getString(path) : boo); + + return convertUnicode(config.getString(path)); } public Double get(String path, Double boo) { @@ -342,6 +427,18 @@ public void resetP() { } public void setP(String cmd) { - this.p = "command." + cmd + ".info."; + this.p = cmd; + } + + public String getPath() { + return this.p; + } + + public void setRecordContents(boolean recordContents) { + this.recordContents = recordContents; + } + + public HashMap getContents() { + return contents; } } diff --git a/src/com/bekvon/bukkit/residence/CommandFiller.java b/src/com/bekvon/bukkit/residence/CommandFiller.java index 08783f50c..82f32777a 100644 --- a/src/com/bekvon/bukkit/residence/CommandFiller.java +++ b/src/com/bekvon/bukkit/residence/CommandFiller.java @@ -19,7 +19,7 @@ public class CommandFiller { public final String packagePath = "com.bekvon.bukkit.residence.commands"; - public Map CommandList = new HashMap(); + private Map CommandList = new HashMap(); public List getCommands(Boolean simple) { Map cmd = new HashMap(); @@ -74,12 +74,15 @@ public Map fillCommands() { Boolean simple = met.getAnnotation(CommandAnnotation.class).simple(); int Priority = met.getAnnotation(CommandAnnotation.class).priority(); + String info = met.getAnnotation(CommandAnnotation.class).info(); + String[] usage = met.getAnnotation(CommandAnnotation.class).usage(); + String cmd = OneClass.getKey(); - CommandList.put(cmd, new CommandStatus(simple, Priority)); + CommandList.put(cmd, new CommandStatus(simple, Priority, info, usage)); break; } if (!found) { - CommandList.put(OneClass.getKey(), new CommandStatus(true, 1000)); + CommandList.put(OneClass.getKey(), new CommandStatus(true, 1000, "", new String[0])); } } return CommandList; @@ -139,4 +142,10 @@ private Class getClass(String cmd) { } return nmsClass; } + + public Map getCommandMap() { + if (CommandList.isEmpty()) + this.fillCommands(); + return CommandList; + } } diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 28a969466..d64dd72da 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -619,7 +619,7 @@ public void UpdateConfigFile() { for (String one : sec.getKeys(false)) { String path = "Global.RandomTeleportation.Worlds." + one + "."; - boolean enabled = c.get(path + "Enabled", true); + boolean enabled = c.get("Enabled", true); if (!commented) c.addComment("Global.RandomTeleportation.Worlds." + one, @@ -627,14 +627,14 @@ public void UpdateConfigFile() { if (!commented) c.addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); - int MaxCoord = c.get(path + "MaxCoord", 1000); + int MaxCoord = c.get("MaxCoord", 1000); if (!commented) c.addComment(path + "MinCoord", "If maxcoord set to 1000 and mincoord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); - int MinCoord = c.get(path + "MinCoord", c.getC().getInt(path + "MinCord", 500)); - int CenterX = c.get(path + "CenterX", 0); - int CenterZ = c.get(path + "CenterZ", 0); + int MinCoord = c.get("MinCoord", c.getC().getInt(path + "MinCord", 500)); + int CenterX = c.get("CenterX", 0); + int CenterZ = c.get("CenterZ", 0); World w = getWorld(one); @@ -656,11 +656,11 @@ public void UpdateConfigFile() { name = name.replace(".", "_"); String path = "Global.RandomTeleportation.Worlds." + name + "."; - boolean enabled = c.get(path + "Enabled", true); - int MaxCoord = c.get(path + "MaxCoord", 1000); - int MinCoord = c.get(path + "MinCoord", c.getC().getInt(path + "MinCord", 500)); - int CenterX = c.get(path + "CenterX", 0); - int CenterZ = c.get(path + "CenterZ", 0); + boolean enabled = c.get("Enabled", true); + int MaxCoord = c.get("MaxCoord", 1000); + int MinCoord = c.get("MinCoord", c.getC().getInt(path + "MinCord", 500)); + int CenterX = c.get("CenterX", 0); + int CenterZ = c.get("CenterZ", 0); if (!enabled) continue; diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index dc75bd712..2d6a9f418 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -33,10 +33,15 @@ public class LocaleManager { private Residence plugin; public String path = "CommandHelp.SubCommands.res.SubCommands."; + private ConfigReader c = null; public LocaleManager(Residence plugin) { this.plugin = plugin; } + + public static void addTabComplete(Object cl, String subCmd, String... tabs) { + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(cl.getClass().getSimpleName(), subCmd), Arrays.asList(tabs)); + } private static YamlConfiguration loadConfiguration(BufferedReader in, String language) { Validate.notNull(in, "File cannot be null"); @@ -58,7 +63,7 @@ private static YamlConfiguration loadConfiguration(BufferedReader in, String lan public void LoadLang(String lang) { File f = new File(plugin.getDataFolder(), "Language" + File.separator + lang + ".yml"); - if(!f.isFile()) + if (!f.isFile()) try { f.createNewFile(); } catch (IOException e2) { @@ -86,9 +91,8 @@ public void LoadLang(String lang) { } catch (IOException e) { e.printStackTrace(); } - - ConfigReader c = null; + c = null; try { c = new ConfigReader("Language" + File.separator + lang + ".yml"); } catch (Exception e1) { @@ -98,6 +102,9 @@ public void LoadLang(String lang) { return; c.copyDefaults(true); + if (lang.equalsIgnoreCase(plugin.getConfigManager().getLanguage())) + c.setRecordContents(true); + c.header(Arrays.asList("NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy", "of this file and modify that instead. This file will be updated automatically by Residence", "when a newer version is detected, and your changes will be overwritten. Once you ", @@ -120,26 +127,31 @@ else if (lm.getText() instanceof ArrayList) { if (lm.getComments() != null) c.addComment(lm.getPath(), lm.getComments()); } - + c.addComment("CommandHelp", ""); c.get("CommandHelp.Description", "Contains Help for Residence"); c.get("CommandHelp.SubCommands.res.Description", "Main Residence Command"); c.get("CommandHelp.SubCommands.res.Info", Arrays.asList("&2Use &6/res [command] ? &2to view more help Information.")); - for (Entry cmo : plugin.getCommandFiller().CommandList.entrySet()) { - String path = plugin.getLocaleManager().path + cmo.getKey() + "."; + for (Entry cmo : plugin.getCommandFiller().getCommandMap().entrySet()) { + c.setP(plugin.getLocaleManager().path + cmo.getKey() + "."); try { Class cl = Class.forName(plugin.getCommandFiller().packagePath + "." + cmo.getKey()); if (cmd.class.isAssignableFrom(cl)) { cmd cm = (cmd) cl.getConstructor().newInstance(); - cm.getLocale(c, path); + if (!cmo.getValue().getInfo().isEmpty()) + c.get("Description", cmo.getValue().getInfo()); + if (cmo.getValue().getUsage().length != 0) + c.get("Info", Arrays.asList(cmo.getValue().getUsage())); + cm.getLocale(); } } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { continue; } } + c.resetP(); if (lang.equalsIgnoreCase(plugin.getConfigManager().getLanguage())) { for (Flags one : Flags.values()) { @@ -166,4 +178,8 @@ else if (lm.getText() instanceof ArrayList) { // Write back config c.save(); } + + public ConfigReader getLocaleConfig() { + return c; + } } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index c4c5d1f11..2d9972c73 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -131,8 +131,6 @@ import com.griefcraft.lwc.LWCPlugin; import com.residence.mcstats.Metrics; import com.residence.zip.ZipLibrary; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import cosine.boseconomy.BOSEconomy; import fr.crafter.tickleman.realeconomy.RealEconomy; @@ -220,8 +218,8 @@ public class Residence extends JavaPlugin { private final static Set validLanguages = new HashSet(Arrays.asList("English", "Czech", "Chinese", "ChineseTW", "French", "Spanish")); private ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); private Map cachedPlayerNameUUIDs = new HashMap(); - private WorldEditPlugin wep = null; - private WorldGuardPlugin wg = null; + private com.sk89q.worldedit.bukkit.WorldEditPlugin wep = null; + private com.sk89q.worldguard.bukkit.WorldGuardPlugin wg = null; private CMIMaterial wepid; // private String ServerLandname = "Server_Land"; @@ -905,7 +903,7 @@ private void setWorldEdit() { try { Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); if (plugin != null) { - this.wep = (WorldEditPlugin) plugin; + this.wep = (com.sk89q.worldedit.bukkit.WorldEditPlugin) plugin; try { Class.forName("com.sk89q.worldedit.bukkit.selections.Selection"); smanager = new WorldEditSelectionManager(server, this); @@ -952,7 +950,7 @@ public GameManagement getKingdomsManager() { private void setWorldGuard() { Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); if (wgplugin != null) { - wg = (WorldGuardPlugin) wgplugin; + wg = (com.sk89q.worldguard.bukkit.WorldGuardPlugin) wgplugin; Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldGuard " + wg.getDescription().getVersion()); } } @@ -1888,11 +1886,11 @@ public InformationPager getInfoPageManager() { return InformationPagerManager; } - public WorldEditPlugin getWorldEdit() { + public com.sk89q.worldedit.bukkit.WorldEditPlugin getWorldEdit() { return wep; } - public WorldGuardPlugin getWorldGuard() { + public com.sk89q.worldguard.bukkit.WorldGuardPlugin getWorldGuard() { return wg; } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index fd750fe79..e6b57863c 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -16,11 +17,11 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceCommandListener implements CommandExecutor { @@ -95,7 +96,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St sendUsage(sender, command.getName()); return true; } - boolean respond = cmdClass.perform(Residence.getInstance(), args, false, command, sender); + boolean respond = cmdClass.perform(Residence.getInstance(), sender, reduceArgs(args), false); if (!respond) sendUsage(sender, command.getName()); return true; @@ -167,7 +168,102 @@ public boolean onCommand(CommandSender sender, Command command, String label, St plugin.resadminToggle.remove(player.getName()); } } - boolean respond = cmdClass.perform(Residence.getInstance(), args, resadmin, command, sender); + + String[] targ = reduceArgs(args); + + for (Method met : cmdClass.getClass().getMethods()) { + if (!met.isAnnotationPresent(CommandAnnotation.class)) + continue; + CommandAnnotation cs = met.getAnnotation(CommandAnnotation.class); + + varCheck : if (sender instanceof Player) { + int[] regVar = cs.regVar(); + List list = new ArrayList(); + boolean more = true; + for (int one : regVar) { + if (one < 0) + more = false; + list.add(one); + } + + int size = targ.length; + + boolean good = true; + + if (list.isEmpty()) + break varCheck; + + if (list.contains(666) || list.contains(-666)) { + plugin.msg(sender, lm.Invalid_FromConsole); + return false; + } + + if (list.contains(-size)) + good = false; + + if (list.contains(size)) + good = true; + + if (list.contains(-100) && size == 0) + good = false; + + if (more && !list.contains(size)) + good = false; + + if (!good) { + String[] tempArray = new String[args.length + 1]; + for (int i = 0; i < args.length; i++) { + tempArray[i] = args[i]; + } + tempArray[args.length] = "?"; + args = tempArray; + return commandHelp(args, resadmin, sender, command); + } + } else { + + int[] consoleVar = cs.consoleVar(); + List list = new ArrayList(); + boolean more = true; + for (int one : consoleVar) { + if (one < 0) + more = false; + list.add(one); + } + int size = targ.length; + boolean good = true; + + if (list.isEmpty()) + break varCheck; + + if (list.contains(666) || list.contains(-666)) { + plugin.msg(sender, lm.Invalid_Ingame); + return false; + } + + if (list.contains(-size)) + good = false; + + if (list.contains(size)) + good = true; + + if (list.contains(-100) && size == 0) + good = false; + + if (more && !list.contains(size)) + good = false; + if (!good) { + String[] tempArray = new String[args.length + 1]; + for (int i = 0; i < args.length; i++) { + tempArray[i] = args[i]; + } + tempArray[args.length] = "?"; + args = tempArray; + return commandHelp(args, resadmin, sender, command); + } + } + } + + boolean respond = cmdClass.perform(Residence.getInstance(), sender, targ, resadmin); if (!respond) { String[] tempArray = new String[args.length + 1]; for (int i = 0; i < args.length; i++) { @@ -183,6 +279,13 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return this.onCommand(sender, command, label, args); } + private static String[] reduceArgs(String[] args) { + if (args.length <= 1) + return new String[0]; + + return Arrays.copyOfRange(args, 1, args.length); + } + private static cmd getCmdClass(String[] args) { cmd cmdClass = null; try { diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index 276d6f83e..7df99b230 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -2,11 +2,11 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -16,8 +16,8 @@ public class area implements cmd { @Override - @CommandAnnotation(simple = true, priority = 3300) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + @CommandAnnotation(info = "Manage physical areas for a residence.",priority = 3300) + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -30,26 +30,26 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } catch (Exception ex) { } - if (args.length == 4) { - if (args[1].equals("remove")) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); + if (args.length == 3) { + if (args[0].equals("remove")) { + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); if (res != null) { - res.removeArea(player, args[3], resadmin); + res.removeArea(player, args[2], resadmin); } else { plugin.msg(player, lm.Invalid_Residence); } return true; - } else if (args[1].equals("add")) { + } else if (args[0].equals("add")) { if (plugin.getWorldEdit() != null) { if (plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { plugin.getSelectionManager().worldEdit(player); } } if (plugin.getSelectionManager().hasPlacedBoth(player)) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); if (res != null) { - if (res.addArea(player, plugin.getSelectionManager().getSelectionCuboid(player), args[3], resadmin)) - plugin.msg(player, lm.Area_Create, args[3]); + if (res.addArea(player, plugin.getSelectionManager().getSelectionCuboid(player), args[2], resadmin)) + plugin.msg(player, lm.Area_Create, args[2]); } else { plugin.msg(player, lm.Invalid_Residence); } @@ -57,16 +57,16 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Select_Points); } return true; - } else if (args[1].equals("replace")) { + } else if (args[0].equals("replace")) { if (plugin.getWorldEdit() != null) { if (plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { plugin.getSelectionManager().worldEdit(player); } } if (plugin.getSelectionManager().hasPlacedBoth(player)) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); if (res != null) { - res.replaceArea(player, plugin.getSelectionManager().getSelectionCuboid(player), args[3], resadmin); + res.replaceArea(player, plugin.getSelectionManager().getSelectionCuboid(player), args[2], resadmin); } else { plugin.msg(player, lm.Invalid_Residence); } @@ -76,16 +76,16 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } } - if ((args.length == 3 || args.length == 4) && args[1].equals("list")) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); + if ((args.length == 2 || args.length == 3) && args[0].equals("list")) { + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); if (res != null) { res.printAreaList(player, page); } else { plugin.msg(player, lm.Invalid_Residence); } return true; - } else if ((args.length == 3 || args.length == 4) && args[1].equals("listall")) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); + } else if ((args.length == 2 || args.length == 3) && args[0].equals("listall")) { + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); if (res != null) { res.printAdvancedAreaList(player, page); } else { @@ -97,28 +97,30 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manage physical areas for a residence."); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); // Sub commands - path += "SubCommands."; - c.get(path + "list.Description", "List physical areas in a residence"); - c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res area list [residence] ")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("[residence]")); + c.setP(c.getPath() + "SubCommands."); + c.get("list.Description", "List physical areas in a residence"); + c.get("list.Info", Arrays.asList("&eUsage: &6/res area list [residence] ")); + LocaleManager.addTabComplete(this, "list", "[residence]"); - c.get(path + "listall.Description", "List coordinates and other Info for areas"); - c.get(path + "listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] ")); + c.get("listall.Description", "List coordinates and other Info for areas"); + c.get("listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] ")); + + LocaleManager.addTabComplete(this, "listall", "[residence]"); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "listall"), Arrays.asList("[residence]")); - c.get(path + "add.Description", "Add physical areas to a residence"); - c.get(path + "add.Info", Arrays.asList("&eUsage: &6/res area add [residence] [areaID]", "You must first select two points first.")); + c.get("add.Description", "Add physical areas to a residence"); + c.get("add.Info", Arrays.asList("&eUsage: &6/res area add [residence] [areaID]", "You must first select two points first.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "add"), Arrays.asList("[residence]")); - c.get(path + "remove.Description", "Remove physical areas from a residence"); - c.get(path + "remove.Info", Arrays.asList("&eUsage: &6/res area remove [residence] [areaID]")); + c.get("remove.Description", "Remove physical areas from a residence"); + c.get("remove.Info", Arrays.asList("&eUsage: &6/res area remove [residence] [areaID]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "remove"), Arrays.asList("[residence]")); - c.get(path + "replace.Description", "Replace physical areas in a residence"); - c.get(path + "replace.Info", Arrays.asList("&eUsage: &6/res area replace [residence] [areaID]", + c.get("replace.Description", "Replace physical areas in a residence"); + c.get("replace.Info", Arrays.asList("&eUsage: &6/res area replace [residence] [areaID]", "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "replace"), Arrays.asList("[residence]")); diff --git a/src/com/bekvon/bukkit/residence/commands/attack.java b/src/com/bekvon/bukkit/residence/commands/attack.java index 53c2b6921..2631a3344 100644 --- a/src/com/bekvon/bukkit/residence/commands/attack.java +++ b/src/com/bekvon/bukkit/residence/commands/attack.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -20,13 +19,13 @@ public class attack implements cmd { @Override @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; final Player player = (Player) sender; - if (args.length != 1 && args.length != 2) + if (args.length != 0 && args.length != 1) return false; if (!ConfigManager.RaidEnabled) { @@ -35,8 +34,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } ClaimedResidence res = null; - if (args.length == 2) - res = plugin.getResidenceManager().getByName(args[1]); + if (args.length == 1) + res = plugin.getResidenceManager().getByName(args[0]); else res = plugin.getResidenceManager().getByLoc(player.getLocation()); @@ -89,9 +88,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Start raid on residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res attack [resName]")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Start raid on residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res attack [resName]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 592a1449b..7a5660794 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -5,7 +5,6 @@ import java.util.List; import org.bukkit.Location; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.util.Vector; @@ -17,40 +16,39 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; public class auto implements cmd { @Override @CommandAnnotation(simple = true, priority = 150) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length != 2 && args.length != 1 && args.length != 3) { + if (args.length != 1 && args.length != 0 && args.length != 2) { return false; } String resName = null; int lenght = -1; - if (args.length == 2) + if (args.length == 1) try { - lenght = Integer.parseInt(args[1]); + lenght = Integer.parseInt(args[0]); } catch (Exception | Error e) { } - if (args.length > 1 && lenght == -1) - resName = args[1]; + if (args.length > 0 && lenght == -1) + resName = args[0]; else resName = player.getName(); - if (args.length == 3) { - resName = args[1]; + if (args.length == 2) { + resName = args[0]; try { - lenght = Integer.parseInt(args[2]); + lenght = Integer.parseInt(args[1]); } catch (Exception ex) { } } @@ -117,7 +115,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), minX, minY, minZ), false); plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), maxX, maxY, maxZ), false); - Debug.D(minY + " " + maxY); + resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true); if (plugin.getResidenceManager().getByName(resName) != null) { @@ -289,9 +287,10 @@ public direction getNext() { } @Override - public void getLocale(ConfigReader c, String path) { + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); // Main command - c.get(path + "Description", "Create maximum allowed residence around you"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res auto (residence name) (radius)")); + c.get("Description", "Create maximum allowed residence around you"); + c.get("Info", Arrays.asList("&eUsage: &6/res auto (residence name) (radius)")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 21f50e75b..577e8a7ba 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,15 +16,15 @@ public class bank implements cmd { @Override @CommandAnnotation(simple = true, priority = 3400) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (args.length != 3 && args.length != 4) { + if (args.length != 2 && args.length != 3) { return false; } ClaimedResidence res = null; - if (args.length == 4) { - res = plugin.getResidenceManager().getByName(args[2]); + if (args.length == 3) { + res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { plugin.msg(sender, lm.Invalid_Residence); return true; @@ -39,17 +38,17 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } double amount = 0D; try { - if (args.length == 3) - amount = Double.parseDouble(args[2]); + if (args.length == 2) + amount = Double.parseDouble(args[1]); else - amount = Double.parseDouble(args[3]); + amount = Double.parseDouble(args[2]); } catch (Exception ex) { plugin.msg(sender, lm.Invalid_Amount); return true; } - if (args[1].equals("deposit")) + if (args[0].equals("deposit")) res.getBank().deposit(sender, amount, resadmin); - else if (args[1].equals("withdraw")) + else if (args[0].equals("withdraw")) res.getBank().withdraw(sender, amount, resadmin); else return false; @@ -58,9 +57,10 @@ else if (args[1].equals("withdraw")) } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manage money in a Residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Manage money in a Residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", "You must have the +bank flag.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw", "[residence]")); diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index a13ee71b7..6149c65e9 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -18,44 +17,45 @@ public class check implements cmd { @Override @CommandAnnotation(simple = true, priority = 3500) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; String pname = player.getName(); - if (args.length != 3 && args.length != 4) + if (args.length != 2 && args.length != 3) return false; - if (args.length == 4) - pname = args[3]; + if (args.length == 3) + pname = args[2]; - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); if (res == null) { plugin.msg(player, lm.Invalid_Residence); return true; } - Flags flag = Flags.getFlag(args[2]); + Flags flag = Flags.getFlag(args[1]); if (flag == null) { plugin.msg(player, lm.Invalid_Flag); return true; } - if (!res.getPermissions().hasApplicableFlag(pname, args[2])) { - plugin.msg(player, lm.Flag_CheckFalse, flag, pname, args[1]); + if (!res.getPermissions().hasApplicableFlag(pname, args[1])) { + plugin.msg(player, lm.Flag_CheckFalse, flag, pname, args[0]); } else { - plugin.msg(player, lm.Flag_CheckTrue, flag, pname, args[1], (res.getPermissions().playerHas(player, res.getPermissions().getWorld(), flag, false) ? plugin.msg(lm.General_True) + plugin.msg(player, lm.Flag_CheckTrue, flag, pname, args[0], (res.getPermissions().playerHas(player, res.getPermissions().getWorld(), flag, false) ? plugin.msg(lm.General_True) : plugin.msg(lm.General_False))); } return true; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Check flag state for you"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res check [residence] [flag] (playername)")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Check flag state for you"); + c.get("Info", Arrays.asList("&eUsage: &6/res check [residence] [flag] (playername)")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[flag]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/clearflags.java b/src/com/bekvon/bukkit/residence/commands/clearflags.java index 690ebe2f8..824623357 100644 --- a/src/com/bekvon/bukkit/residence/commands/clearflags.java +++ b/src/com/bekvon/bukkit/residence/commands/clearflags.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,7 +16,7 @@ public class clearflags implements cmd { @Override @CommandAnnotation(simple = false, priority = 3600) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -27,7 +26,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.General_NoPermission); return true; } - ClaimedResidence area = plugin.getResidenceManager().getByName(args[1]); + ClaimedResidence area = plugin.getResidenceManager().getByName(args[0]); if (area != null) { if (area.isRaidInitialized()) { plugin.msg(sender, lm.Raid_cantDo); @@ -42,9 +41,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Remove all flags from residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res clearflags ")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Remove all flags from residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res clearflags ")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index 7d38a36c7..cf43cc50c 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,27 +16,27 @@ public class command implements cmd { @Override @CommandAnnotation(simple = true, priority = 3000) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { ClaimedResidence res = null; String action = null; String cmd = null; - if (args.length == 2 && sender instanceof Player) { + if (args.length == 1 && sender instanceof Player) { Player player = (Player) sender; res = plugin.getResidenceManager().getByLoc(player.getLocation()); - action = args[1]; - } else if (args.length == 3 && sender instanceof Player) { + action = args[0]; + } else if (args.length == 2 && sender instanceof Player) { Player player = (Player) sender; res = plugin.getResidenceManager().getByLoc(player.getLocation()); + action = args[0]; + cmd = args[1]; + } else if (args.length == 3) { + res = plugin.getResidenceManager().getByName(args[0]); action = args[1]; cmd = args[2]; - } else if (args.length == 4) { - res = plugin.getResidenceManager().getByName(args[1]); - action = args[2]; - cmd = args[3]; - } else if (args.length == 3 && !(sender instanceof Player)) { - res = plugin.getResidenceManager().getByName(args[1]); - action = args[2]; + } else if (args.length == 2 && !(sender instanceof Player)) { + res = plugin.getResidenceManager().getByName(args[0]); + action = args[1]; } if (res == null) { @@ -84,9 +83,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manages allowed or blocked commands in residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res command ", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Manages allowed or blocked commands in residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res command ", "Shows list, adds or removes allowed or disabled commands in residence", "Use _ to include command with multiple variables")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%allow%%block%%list", diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index 5917acfce..1f6045ee2 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -1,8 +1,8 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; + import org.bukkit.Location; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -18,14 +18,12 @@ public class compass implements cmd { @Override - @CommandAnnotation(simple = true, priority = 3200) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; + @CommandAnnotation(simple = true, priority = 3200, consoleVar = { 666 }) + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { Player player = (Player) sender; - if (args.length != 2) { + if (args.length != 1) { player.setCompassTarget(player.getWorld().getSpawnLocation()); plugin.msg(player, lm.General_CompassTargetReset); return true; @@ -34,30 +32,30 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman if (!ResPerm.command_$1.hasPermission(sender, this.getClass().getSimpleName())) return true; - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); - - if (res != null) { - if (res.getWorld().equalsIgnoreCase(player.getWorld().getName())) { - CuboidArea area = res.getMainArea(); - if (area == null) - return false; - Location loc = res.getTeleportLocation(player); - if (loc == null) - return false; - player.setCompassTarget(loc); - plugin.msg(player, lm.General_CompassTargetSet, args[1]); - } - } else { + ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); + + if (res == null || !res.getWorld().equalsIgnoreCase(player.getWorld().getName())) { plugin.msg(player, lm.Invalid_Residence); + return true; } + CuboidArea area = res.getMainArea(); + if (area == null) + return false; + Location loc = res.getTeleportLocation(player); + if (loc == null) + return false; + player.setCompassTarget(loc); + plugin.msg(player, lm.General_CompassTargetSet, args[0]); + return true; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Set compass pointer to residence location"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res compass ")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Set compass pointer to residence location"); + c.get("Info", Arrays.asList("&eUsage: &6/res compass ")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/confirm.java b/src/com/bekvon/bukkit/residence/commands/confirm.java index 02fb42296..26f358f7a 100644 --- a/src/com/bekvon/bukkit/residence/commands/confirm.java +++ b/src/com/bekvon/bukkit/residence/commands/confirm.java @@ -1,12 +1,8 @@ package com.bekvon.bukkit.residence.commands; -import java.util.Arrays; - -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -15,29 +11,19 @@ public class confirm implements cmd { @Override - @CommandAnnotation(simple = true, priority = 2400) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - Player player = null; - String name = sender.getName(); - - if (args.length != 1) - return true; - - String area = plugin.deleteConfirm.get(name); + @CommandAnnotation(info = "Confirms removal of a residence.", usage = { "&eUsage: &6/res confirm", "Confirms removal of a residence." }, regVar = { 0 }, consoleVar = { 0 }) + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + String area = plugin.deleteConfirm.remove(sender.getName()); if (area == null) { plugin.msg(sender, lm.Invalid_Residence); - } else { - plugin.getResidenceManager().removeResidence(sender instanceof Player ? (Player) sender : null, area, resadmin); - plugin.deleteConfirm.remove(name); + return true; } - + plugin.getResidenceManager().removeResidence(sender instanceof Player ? (Player) sender : null, area, resadmin); return true; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Confirms removal of a residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res confirm", "Confirms removal of a residence.")); + public void getLocale() { } } diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 65999903b..2371cc47a 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -19,28 +18,28 @@ public class contract implements cmd { @Override @CommandAnnotation(simple = true, priority = 1900) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; ClaimedResidence res = null; - if (args.length == 2) + if (args.length == 1) res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 3) - res = plugin.getResidenceManager().getByName(args[1]); + else if (args.length == 2) + res = plugin.getResidenceManager().getByName(args[0]); else return false; if (res == null) { plugin.msg(player, lm.Invalid_Residence); return true; } - + if (res.isRaidInitialized()) { plugin.msg(sender, lm.Raid_cantDo); return true; } - + if (res.isSubzone() && !resadmin && !ResPerm.command_contract_subzone.hasPermission(player, lm.Subzone_CantContract)) return true; @@ -51,10 +50,10 @@ else if (args.length == 3) CuboidArea area = null; String areaName = null; - if (args.length == 2) { + if (args.length == 1) { areaName = res.getAreaIDbyLoc(player.getLocation()); area = res.getArea(areaName); - } else if (args.length == 3) { + } else if (args.length == 2) { areaName = res.isSubzone() ? plugin.getResidenceManager().getSubzoneNameByRes(res) : "main"; area = res.getCuboidAreabyName(areaName); } @@ -69,10 +68,10 @@ else if (args.length == 3) } int amount = -1; try { - if (args.length == 2) + if (args.length == 1) + amount = Integer.parseInt(args[0]); + else if (args.length == 2) amount = Integer.parseInt(args[1]); - else if (args.length == 3) - amount = Integer.parseInt(args[2]); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Amount); return true; @@ -99,9 +98,10 @@ else if (args.length == 3) } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Contracts residence in direction you looking"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res contract (residence) [amount]", "Contracts residence in direction you looking.", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Contracts residence in direction you looking"); + c.get("Info", Arrays.asList("&eUsage: &6/res contract (residence) [amount]", "Contracts residence in direction you looking.", "Residence name is optional")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1", "1")); } diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index b92ef2d5e..d933b8d23 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -16,12 +15,12 @@ public class create implements cmd { @Override @CommandAnnotation(simple = true, priority = 100) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length != 2) { + if (args.length != 1) { return false; } @@ -31,7 +30,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } } if (plugin.getSelectionManager().hasPlacedBoth(player)) { - plugin.getResidenceManager().addResidence(player, args[1], plugin.getSelectionManager().getPlayerLoc1(player), plugin + plugin.getResidenceManager().addResidence(player, args[0], plugin.getSelectionManager().getPlayerLoc1(player), plugin .getSelectionManager().getPlayerLoc2(player), resadmin); return true; } @@ -40,9 +39,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); // Main command - c.get(path + "Description", "Create Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res create ")); + c.get("Description", "Create Residences"); + c.get("Info", Arrays.asList("&eUsage: &6/res create ")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/current.java b/src/com/bekvon/bukkit/residence/commands/current.java index e26feecc3..49665fef7 100644 --- a/src/com/bekvon/bukkit/residence/commands/current.java +++ b/src/com/bekvon/bukkit/residence/commands/current.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -16,29 +15,27 @@ public class current implements cmd { @Override - @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; + @CommandAnnotation(simple = true, priority = 3100, regVar = { 0 }, consoleVar = { 666 }) + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { Player player = (Player) sender; - if (args.length != 1) - return false; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { plugin.msg(player, lm.Residence_NotIn); - } else { - plugin.msg(player, lm.Residence_In, res.getName()); + return true; } + + plugin.msg(player, lm.Residence_In, res.getName()); + return true; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Show residence your currently in."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res current")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Show residence your currently in."); + c.get("Info", Arrays.asList("&eUsage: &6/res current")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/defend.java b/src/com/bekvon/bukkit/residence/commands/defend.java index 45eca7629..ea324b31d 100644 --- a/src/com/bekvon/bukkit/residence/commands/defend.java +++ b/src/com/bekvon/bukkit/residence/commands/defend.java @@ -7,7 +7,6 @@ import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -26,13 +25,13 @@ public class defend implements cmd { @Override @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; final Player player = (Player) sender; - if (args.length != 1 && args.length != 2) + if (args.length != 0 && args.length != 1) return false; if (!ConfigManager.RaidEnabled) { @@ -42,8 +41,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman ClaimedResidence res = null; ResidencePlayer target = null; - if (args.length == 2) { - OfflinePlayer targetP = plugin.getOfflinePlayer(args[1]); + if (args.length == 1) { + OfflinePlayer targetP = plugin.getOfflinePlayer(args[0]); if (targetP != null) { if (!targetP.isOnline()) { plugin.msg(player, lm.Invalid_PlayerOffline); @@ -51,7 +50,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } target = plugin.getPlayerManager().getResidencePlayer(targetP.getUniqueId()); } else - res = plugin.getResidenceManager().getByName(args[1]); + res = plugin.getResidenceManager().getByName(args[0]); } else res = plugin.getResidenceManager().getByLoc(player.getLocation()); @@ -142,9 +141,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman static HashMap joinRequests = new HashMap(); @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Join raid defence on residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res defend [resName] (playerName)")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Join raid defence on residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res defend [resName] (playerName)")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]%%[playername]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index ee515c4f1..bc1962a31 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -19,17 +18,17 @@ public class expand implements cmd { @Override @CommandAnnotation(simple = true, priority = 2000) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; ClaimedResidence res = null; - if (args.length == 2) + if (args.length == 1) res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 3) { - res = plugin.getResidenceManager().getByName(args[1]); + else if (args.length == 2) { + res = plugin.getResidenceManager().getByName(args[0]); } else return false; @@ -53,10 +52,10 @@ else if (args.length == 3) { CuboidArea area = null; String areaName = null; - if (args.length == 2) { + if (args.length == 1) { areaName = res.getAreaIDbyLoc(player.getLocation()); area = res.getArea(areaName); - } else if (args.length == 3) { + } else if (args.length == 2) { areaName = res.isSubzone() ? plugin.getResidenceManager().getSubzoneNameByRes(res) : "main"; area = res.getCuboidAreabyName(areaName); } @@ -71,10 +70,10 @@ else if (args.length == 3) { } int amount = -1; try { - if (args.length == 2) + if (args.length == 1) + amount = Integer.parseInt(args[0]); + else if (args.length == 2) amount = Integer.parseInt(args[1]); - else if (args.length == 3) - amount = Integer.parseInt(args[2]); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Amount); return true; @@ -106,9 +105,10 @@ else if (args.length == 3) } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Expands residence in direction you looking"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Expands residence in direction you looking"); + c.get("Info", Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1", "1")); } diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index c9ff2fff0..9414ce64c 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -5,7 +5,6 @@ import java.util.Set; import org.bukkit.Bukkit; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; @@ -18,7 +17,7 @@ public class flags implements cmd { @Override @CommandAnnotation(simple = true, priority = 1200) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { int page = 1; try { if (args.length > 0) { @@ -34,17 +33,29 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "List of flags"); - c.get(path + "Info", Arrays.asList("For flag values, usually true allows the action, and false denys the action.")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "List of flags"); + c.get("Info", Arrays.asList("For flag values, usually true allows the action, and false denys the action.")); Set keys = new HashSet(); - if (c.getC().isConfigurationSection(path + "SubCommands")){ - keys = c.getC().getConfigurationSection(path + "SubCommands").getKeys(false); + if (c.getC().isConfigurationSection(c.getPath() + "SubCommands")) { + keys = c.getC().getConfigurationSection(c.getPath() + "SubCommands").getKeys(false); + } + + String path = c.getPath() + "SubCommands."; + c.resetP(); + + for (String fl : keys) { + String pt = path + fl; +// No translation for custom flags for now +// c.get(pt + ".Translated", c.getC().getString(pt + ".Translated")); + c.get(pt + ".Description", c.getC().getString(pt + ".Description")); + c.get(pt + ".Info", c.getC().getStringList(pt + ".Info")); } for (Flags fl : Flags.values()) { - String pt = path + "SubCommands." + fl.toString(); + String pt = path + fl.toString(); c.get(pt + ".Translated", fl.toString()); c.get(pt + ".Description", fl.getDesc()); String forSet = "set/pset"; @@ -65,14 +76,6 @@ public void getLocale(ConfigReader c, String path) { keys.remove(fl.toString()); } - for (String fl : keys) { - String pt = path + "SubCommands." + fl; -// No translation for custom flags for now -// c.get(pt + ".Translated", c.getC().getString(pt + ".Translated")); - c.get(pt + ".Description", c.getC().getString(pt + ".Description")); - c.get(pt + ".Info", c.getC().getStringList(pt + ".Info")); - } - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "pset"), Arrays.asList("[residence]", "[flag]", "[true%%false%%remove]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]", "[flag]", diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index e6ec5a168..8425199a8 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -18,7 +17,7 @@ public class give implements cmd { @Override @CommandAnnotation(simple = true, priority = 3800) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -27,7 +26,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman boolean includeSubzones = false; boolean confirmed = false; - if (args.length != 3 && args.length != 4 && args.length != 5) + if (args.length != 2 && args.length != 3 && args.length != 4) return false; for (String one : args) { @@ -40,27 +39,28 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman RawMessage rm = new RawMessage(); - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); if (res == null) { plugin.msg(sender, lm.Invalid_Residence); return false; } - rm.add(plugin.getLM().getMessage(lm.Residence_GiveConfirm, args[1], res.getOwner(), args[2]), plugin.getLM().getMessage(lm.info_click), (resadmin ? "resadmin" : "res") + " give " + args[1] - + " " + args[2] + (includeSubzones ? " -s" : "") + " -confirmed"); + rm.add(plugin.getLM().getMessage(lm.Residence_GiveConfirm, args[0], res.getOwner(), args[1]), plugin.getLM().getMessage(lm.info_click), (resadmin ? "resadmin" : "res") + " give " + args[0] + + " " + args[1] + (includeSubzones ? " -s" : "") + " -confirmed"); rm.show(sender); return true; } - plugin.getResidenceManager().giveResidence(player, args[2], args[1], resadmin, includeSubzones); + plugin.getResidenceManager().giveResidence(player, args[1], args[0], resadmin, includeSubzones); return true; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Give residence to player."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res give [player] <-s>", "Gives your owned residence to target player")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Give residence to player."); + c.get("Info", Arrays.asList("&eUsage: &6/res give [player] <-s>", "Gives your owned residence to target player")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/gset.java b/src/com/bekvon/bukkit/residence/commands/gset.java index 570835a2b..72f7a2ecc 100644 --- a/src/com/bekvon/bukkit/residence/commands/gset.java +++ b/src/com/bekvon/bukkit/residence/commands/gset.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,23 +16,23 @@ public class gset implements cmd { @Override @CommandAnnotation(simple = true, priority = 4500) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length == 4) { + if (args.length == 3) { ClaimedResidence area = plugin.getResidenceManager().getByLoc(player.getLocation()); if (area != null) { - area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); + area.getPermissions().setGroupFlag(player, args[0], args[1], args[2], resadmin); } else { plugin.msg(player, lm.Invalid_Area); } return true; - } else if (args.length == 5) { - ClaimedResidence area = plugin.getResidenceManager().getByName(args[1]); + } else if (args.length == 4) { + ClaimedResidence area = plugin.getResidenceManager().getByName(args[0]); if (area != null) { - area.getPermissions().setGroupFlag(player, args[2], args[3], args[4], resadmin); + area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); } else { plugin.msg(player, lm.Invalid_Residence); } @@ -43,9 +42,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Set flags on a specific group for a Residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Set flags on a specific group for a Residence."); + c.get("Info", Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index ff3d36a49..5d56bc4e3 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -12,14 +11,15 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; public class info implements cmd { @Override @CommandAnnotation(simple = true, priority = 600) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - - if (args.length == 1 && sender instanceof Player) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + Debug.D("check"); + if (args.length == 0 && sender instanceof Player) { Player player = (Player) sender; ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { @@ -28,17 +28,18 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(sender, lm.Invalid_Residence); } return true; - } else if (args.length == 2) { - plugin.getResidenceManager().printAreaInfo(args[1], sender, resadmin); + } else if (args.length == 1) { + plugin.getResidenceManager().printAreaInfo(args[0], sender, resadmin); return true; } return false; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Show info on a residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in.")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Show info on a residence."); + c.get("Info", Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index f872b3f13..d8f678444 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -4,7 +4,6 @@ import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -22,16 +21,16 @@ public class kick implements cmd { @Override @CommandAnnotation(simple = true, priority = 2200) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length != 2) + if (args.length != 1) return false; - Player targetplayer = Bukkit.getPlayer(args[1]); + Player targetplayer = Bukkit.getPlayer(args[0]); if (targetplayer == null || !player.canSee(targetplayer)) { plugin.msg(player, lm.General_NotOnline); return true; @@ -77,9 +76,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Kicks player from residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res kick ", "You must be the owner or an admin to do this.", "Player should be online.")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Kicks player from residence."); + c.get("Info", Arrays.asList("&eUsage: &6/res kick ", "You must be the owner or an admin to do this.", "Player should be online.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index bbe17f5c8..5de188817 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -4,7 +4,6 @@ import java.util.Arrays; import java.util.List; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -20,22 +19,22 @@ public class lease implements cmd { @Override @CommandAnnotation(simple = true, priority = 3900) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length == 2 || args.length == 3 || args.length == 4) { + if (args.length == 1 || args.length == 2 || args.length == 3) { - if (args[1].equals("set")) { + if (args[0].equals("set")) { if (!resadmin) { plugin.msg(player, lm.General_NoPermission); return true; } - if (args[3].equals("infinite")) { - if (plugin.getLeaseManager().isLeased(plugin.getResidenceManager().getByName(args[2]))) { - plugin.getLeaseManager().removeExpireTime(plugin.getResidenceManager().getByName(args[2])); + if (args[2].equals("infinite")) { + if (plugin.getLeaseManager().isLeased(plugin.getResidenceManager().getByName(args[1]))) { + plugin.getLeaseManager().removeExpireTime(plugin.getResidenceManager().getByName(args[1])); plugin.msg(player, lm.Economy_LeaseInfinite); } else { plugin.msg(player, lm.Economy_LeaseNotExpire); @@ -44,24 +43,24 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } int days; try { - days = Integer.parseInt(args[3]); + days = Integer.parseInt(args[2]); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Days); return true; } - plugin.getLeaseManager().setExpireTime(player, plugin.getResidenceManager().getByName(args[2]), days); + plugin.getLeaseManager().setExpireTime(player, plugin.getResidenceManager().getByName(args[1]), days); return true; } - if (args[1].equals("expires")) { + if (args[0].equals("expires")) { ClaimedResidence res = null; - if (args.length == 2) { + if (args.length == 1) { res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { plugin.msg(player, lm.Residence_NotIn); return true; } } else { - res = plugin.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { plugin.msg(player, lm.Invalid_Residence); return true; @@ -73,9 +72,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Economy_LeaseRenew, until); return true; } - if (args[1].equals("renew")) { - if (args.length == 3) { - plugin.getLeaseManager().renewArea(plugin.getResidenceManager().getByName(args[2]), player); + if (args[0].equals("renew")) { + if (args.length == 2) { + plugin.getLeaseManager().renewArea(plugin.getResidenceManager().getByName(args[1]), player); } else { ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null) @@ -85,20 +84,20 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } return true; } - if (args[1].equals("list")) { + if (args[0].equals("list")) { ClaimedResidence res = null; int page = -1; - if (args.length > 2) + if (args.length > 1) try { - page = Integer.parseInt(args[2]); + page = Integer.parseInt(args[1]); } catch (Exception e) { - res = plugin.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[1]); } - if (args.length > 3 && page == -1) + if (args.length > 2 && page == -1) try { - page = Integer.parseInt(args[3]); + page = Integer.parseInt(args[2]); } catch (Exception e) { - res = plugin.getResidenceManager().getByName(args[3]); + res = plugin.getResidenceManager().getByName(args[2]); } if (res == null) @@ -137,12 +136,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (args[1].equals("cost")) { - if (args.length == 3) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[2]); + if (args[0].equals("cost")) { + if (args.length == 2) { + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); if (res == null || plugin.getLeaseManager().isLeased(res)) { double cost = plugin.getLeaseManager().getRenewCostD(res); - plugin.msg(player, lm.Economy_LeaseRenewalCost, args[2], plugin.getEconomyManager().format(cost)); + plugin.msg(player, lm.Economy_LeaseRenewalCost, args[1], plugin.getEconomyManager().format(cost)); } else { plugin.msg(player, lm.Economy_LeaseNotExpire); } @@ -167,33 +166,34 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manage residence leases"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Manage residence leases"); + c.get("Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("renew%%cost", "[residence]")); // Sub commands - path += "SubCommands."; - c.get(path + "set.Description", "Set the lease time"); - c.get(path + "set.Info", Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", + c.setP(c.getPath()+"SubCommands."); + c.get("set.Description", "Set the lease time"); + c.get("set.Info", Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]")); - c.get(path + "renew.Description", "Renew the lease time"); - c.get(path + "renew.Info", Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence.")); + c.get("renew.Description", "Renew the lease time"); + c.get("renew.Info", Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "renew"), Arrays.asList("[residence]")); - c.get(path + "list.Description", "Show lease list of current residence"); - c.get(path + "list.Info", Arrays.asList("&eUsage: &6/resadmin lease list ", "Prints out all subzones lease times")); + c.get("list.Description", "Show lease list of current residence"); + c.get("list.Info", Arrays.asList("&eUsage: &6/resadmin lease list ", "Prints out all subzones lease times")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("[residence]")); - c.get(path + "expires.Description", "Lease end date"); - c.get(path + "expires.Info", Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time.")); + c.get("expires.Description", "Lease end date"); + c.get("expires.Info", Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "expires"), Arrays.asList("[residence]")); - c.get(path + "cost.Description", "Shows renew cost"); - c.get(path + "cost.Info", Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease.")); + c.get("cost.Description", "Shows renew cost"); + c.get("cost.Info", Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "cost"), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/leaveraid.java b/src/com/bekvon/bukkit/residence/commands/leaveraid.java index dfa1daf53..169730003 100644 --- a/src/com/bekvon/bukkit/residence/commands/leaveraid.java +++ b/src/com/bekvon/bukkit/residence/commands/leaveraid.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -19,13 +18,13 @@ public class leaveraid implements cmd { @Override @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; final Player player = (Player) sender; - if (args.length != 1 && args.length != 2) + if (args.length != 0 && args.length != 1) return false; if (!ConfigManager.RaidEnabled) { @@ -57,9 +56,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Leave raid"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res leaveraid")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Leave raid"); + c.get("Info", Arrays.asList("&eUsage: &6/res leaveraid")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]%%[playername]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 110669154..cbeb0c036 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -3,7 +3,6 @@ import java.util.Arrays; import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,24 +16,22 @@ public class limits implements cmd { @Override @CommandAnnotation(simple = true, priority = 900) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player) && args.length < 2) + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + if (!(sender instanceof Player) && args.length < 1) return false; - if (args.length != 1 && args.length != 2) + if (args.length != 0 && args.length != 1) return false; final String[] tempArgs = args; OfflinePlayer target; boolean rsadm = false; - if (tempArgs.length == 1) { + if (tempArgs.length == 0) { target = (Player) sender; rsadm = true; } else - target = plugin.getOfflinePlayer(tempArgs[1]); + target = plugin.getOfflinePlayer(tempArgs[0]); if (target == null) return false; -// plugin.getPermissionManager().updateGroupNameForPlayer(target.getName(), target.isOnline() ? target.getPlayer().getLocation().getWorld().getName() : plugin -// .getConfigManager().getDefaultWorld(), true); ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(target.getName(), true); rPlayer.getGroup().printLimits(sender, target, rsadm); @@ -42,10 +39,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); // Main command - c.get(path + "Description", "Show your limits."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res limits (playerName)", "Shows the limitations you have on creating and managing residences.")); + c.get("Description", "Show your limits."); + c.get("Info", Arrays.asList("&eUsage: &6/res limits (playerName)", "Shows the limitations you have on creating and managing residences.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index ab8ab7e66..67afa0683 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -4,7 +4,6 @@ import org.bukkit.Bukkit; import org.bukkit.World; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; @@ -17,7 +16,7 @@ public class list implements cmd { @Override @CommandAnnotation(simple = true, priority = 300) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { int page = 1; World world = null; String target = null; @@ -49,9 +48,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "List Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res list ", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "List Residences"); + c.get("Info", Arrays.asList("&eUsage: &6/res list ", "Lists all the residences a player owns (except hidden ones).", "If listing your own residences, shows hidden ones as well.", "To list everyones residences, use /res listall.")); diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index f1bd6c622..7d404e7c2 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -4,7 +4,6 @@ import org.bukkit.Bukkit; import org.bukkit.World; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,7 +16,7 @@ public class listall implements cmd { @Override @CommandAnnotation(simple = true, priority = 4200) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { int page = 1; World world = null; @@ -53,9 +52,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "List All Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res listall <-a/-f>", "Lists all residences")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "List All Residences"); + c.get("Info", Arrays.asList("&eUsage: &6/res listall <-a/-f>", "Lists all residences")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/listallhidden.java b/src/com/bekvon/bukkit/residence/commands/listallhidden.java index eb370b562..73a143355 100644 --- a/src/com/bekvon/bukkit/residence/commands/listallhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listallhidden.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; @@ -15,7 +14,7 @@ public class listallhidden implements cmd { @Override @CommandAnnotation(simple = false, priority = 4700) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { int page = 1; try { if (args.length > 0) { @@ -27,9 +26,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(sender, lm.General_NoPermission); return true; } - if (args.length == 1) { + if (args.length == 0) { plugin.getResidenceManager().listAllResidences(sender, 1, true, true); - } else if (args.length == 2) { + } else if (args.length == 1) { try { plugin.getResidenceManager().listAllResidences(sender, page, true, true); } catch (Exception ex) { @@ -41,8 +40,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "List All Hidden Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res listhidden ", "Lists all hidden residences on the server.")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "List All Hidden Residences"); + c.get("Info", Arrays.asList("&eUsage: &6/res listhidden ", "Lists all hidden residences on the server.")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/listhidden.java b/src/com/bekvon/bukkit/residence/commands/listhidden.java index 0cd21cbb7..ce6d29683 100644 --- a/src/com/bekvon/bukkit/residence/commands/listhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listhidden.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; @@ -15,7 +14,7 @@ public class listhidden implements cmd { @Override @CommandAnnotation(simple = false, priority = 4800) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { int page = 1; try { if (args.length > 0) { @@ -27,28 +26,29 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(sender, lm.General_NoPermission); return true; } - if (args.length == 1) { + if (args.length == 0) { plugin.getResidenceManager().listResidences(sender, 1, true, true); return true; - } else if (args.length == 2) { + } else if (args.length == 1) { try { - Integer.parseInt(args[1]); + Integer.parseInt(args[0]); plugin.getResidenceManager().listResidences(sender, page, true, true); } catch (Exception ex) { - plugin.getResidenceManager().listResidences(sender, args[1], 1, true, true, resadmin); + plugin.getResidenceManager().listResidences(sender, args[0], 1, true, true, resadmin); } return true; - } else if (args.length == 3) { - plugin.getResidenceManager().listResidences(sender, args[1], page, true, true, resadmin); + } else if (args.length == 2) { + plugin.getResidenceManager().listResidences(sender, args[0], page, true, true, resadmin); return true; } return false; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "List Hidden Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res listhidden ", "Lists hidden residences for a player.")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "List Hidden Residences"); + c.get("Info", Arrays.asList("&eUsage: &6/res listhidden ", "Lists hidden residences for a player.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/lists.java b/src/com/bekvon/bukkit/residence/commands/lists.java index 8fb322642..c8196ebed 100644 --- a/src/com/bekvon/bukkit/residence/commands/lists.java +++ b/src/com/bekvon/bukkit/residence/commands/lists.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,47 +16,47 @@ public class lists implements cmd { @Override @CommandAnnotation(simple = true, priority = 4900) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length == 2) { - if (args[1].equals("list")) { + if (args.length == 1) { + if (args[0].equals("list")) { plugin.getPermissionListManager().printLists(player); return true; } - } else if (args.length == 3) { - if (args[1].equals("view")) { - plugin.getPermissionListManager().printList(player, args[2]); + } else if (args.length == 2) { + if (args[0].equals("view")) { + plugin.getPermissionListManager().printList(player, args[1]); return true; - } else if (args[1].equals("remove")) { - plugin.getPermissionListManager().removeList(player, args[2]); + } else if (args[0].equals("remove")) { + plugin.getPermissionListManager().removeList(player, args[1]); return true; - } else if (args[1].equals("add")) { - plugin.getPermissionListManager().makeList(player, args[2]); + } else if (args[0].equals("add")) { + plugin.getPermissionListManager().makeList(player, args[1]); return true; } - } else if (args.length == 4) { - if (args[1].equals("apply")) { - plugin.getPermissionListManager().applyListToResidence(player, args[2], args[3], resadmin); + } else if (args.length == 3) { + if (args[0].equals("apply")) { + plugin.getPermissionListManager().applyListToResidence(player, args[1], args[2], resadmin); return true; } - } else if (args.length == 5) { - if (args[1].equals("set")) { - plugin.getPermissionListManager().getList(player.getName(), args[2]).setFlag(args[3], FlagPermissions.stringToFlagState(args[4])); - plugin.msg(player, lm.Flag_Set, args[3], args[2], FlagPermissions.stringToFlagState(args[4])); + } else if (args.length == 4) { + if (args[0].equals("set")) { + plugin.getPermissionListManager().getList(player.getName(), args[1]).setFlag(args[2], FlagPermissions.stringToFlagState(args[3])); + plugin.msg(player, lm.Flag_Set, args[2], args[1], FlagPermissions.stringToFlagState(args[3])); return true; } - } else if (args.length == 6) { - if (args[1].equals("gset")) { - plugin.getPermissionListManager().getList(player.getName(), args[2]).setGroupFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - plugin.msg(player, lm.Flag_Set, args[3], args[2], FlagPermissions.stringToFlagState(args[4])); + } else if (args.length == 5) { + if (args[0].equals("gset")) { + plugin.getPermissionListManager().getList(player.getName(), args[1]).setGroupFlag(args[2], args[3], FlagPermissions.stringToFlagState(args[4])); + plugin.msg(player, lm.Flag_Set, args[2], args[1], FlagPermissions.stringToFlagState(args[3])); return true; - } else if (args[1].equals("pset")) { - plugin.getPermissionListManager().getList(player.getName(), args[2]).setPlayerFlag(args[3], args[4], FlagPermissions.stringToFlagState(args[5])); - plugin.msg(player, lm.Flag_Set, args[3], args[2], FlagPermissions.stringToFlagState(args[4])); + } else if (args[0].equals("pset")) { + plugin.getPermissionListManager().getList(player.getName(), args[1]).setPlayerFlag(args[2], args[3], FlagPermissions.stringToFlagState(args[4])); + plugin.msg(player, lm.Flag_Set, args[2], args[1], FlagPermissions.stringToFlagState(args[3])); return true; } } @@ -65,32 +64,33 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get(path + "Description", "Predefined permission lists"); - c.get(path + "Info", Arrays.asList("Predefined permissions that can be applied to a residence.")); + c.get("Description", "Predefined permission lists"); + c.get("Info", Arrays.asList("Predefined permissions that can be applied to a residence.")); - path += "SubCommands."; - c.get(path + "add.Description", "Add a list"); - c.get(path + "add.Info", Arrays.asList("&eUsage: &6/res lists add ")); + c.setP(c.getPath() + "SubCommands."); + c.get("add.Description", "Add a list"); + c.get("add.Info", Arrays.asList("&eUsage: &6/res lists add ")); - c.get(path + "remove.Description", "Remove a list"); - c.get(path + "remove.Info", Arrays.asList("&eUsage: &6/res lists remove ")); + c.get("remove.Description", "Remove a list"); + c.get("remove.Info", Arrays.asList("&eUsage: &6/res lists remove ")); - c.get(path + "apply.Description", "Apply a list to a residence"); - c.get(path + "apply.Info", Arrays.asList("&eUsage: &6/res lists apply ")); + c.get("apply.Description", "Apply a list to a residence"); + c.get("apply.Info", Arrays.asList("&eUsage: &6/res lists apply ")); - c.get(path + "set.Description", "Set a flag"); - c.get(path + "set.Info", Arrays.asList("&eUsage: &6/res lists set ")); + c.get("set.Description", "Set a flag"); + c.get("set.Info", Arrays.asList("&eUsage: &6/res lists set ")); - c.get(path + "pset.Description", "Set a player flag"); - c.get(path + "pset.Info", Arrays.asList("&eUsage: &6/res lists pset ")); + c.get("pset.Description", "Set a player flag"); + c.get("pset.Info", Arrays.asList("&eUsage: &6/res lists pset ")); - c.get(path + "gset.Description", "Set a group flag"); - c.get(path + "gset.Info", Arrays.asList("&eUsage: &6/res lists gset ")); + c.get("gset.Description", "Set a group flag"); + c.get("gset.Info", Arrays.asList("&eUsage: &6/res lists gset ")); - c.get(path + "view.Description", "View a list."); - c.get(path + "view.Info", Arrays.asList("&eUsage: &6/res lists view ")); + c.get("view.Description", "View a list."); + c.get("view.Info", Arrays.asList("&eUsage: &6/res lists view ")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java index 1cffdcb54..2fea7c5f4 100644 --- a/src/com/bekvon/bukkit/residence/commands/lset.java +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -3,7 +3,6 @@ import java.util.Arrays; import org.bukkit.Material; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -18,7 +17,7 @@ public class lset implements cmd { @Override @CommandAnnotation(simple = true, priority = 5000) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -28,11 +27,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Material mat = null; String listtype = null; boolean showinfo = false; - if (args.length == 2 && args[1].equals("info")) { + if (args.length == 1 && args[0].equals("info")) { res = plugin.getResidenceManager().getByLoc(player.getLocation()); showinfo = true; - } else if (args.length == 3 && args[2].equals("info")) { - res = plugin.getResidenceManager().getByName(args[1]); + } else if (args.length == 2 && args[1].equals("info")) { + res = plugin.getResidenceManager().getByName(args[0]); showinfo = true; } if (showinfo) { @@ -45,20 +44,20 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.General_Ignorelist); res.getItemIgnoreList().printList(player); return true; - } else if (args.length == 4) { - res = plugin.getResidenceManager().getByName(args[1]); - listtype = args[2]; + } else if (args.length == 3) { + res = plugin.getResidenceManager().getByName(args[0]); + listtype = args[1]; try { - mat = Material.valueOf(args[3].toUpperCase()); + mat = Material.valueOf(args[2].toUpperCase()); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Material); return true; } - } else if (args.length == 3) { + } else if (args.length == 2) { res = plugin.getResidenceManager().getByLoc(player.getLocation()); - listtype = args[1]; + listtype = args[0]; try { - mat = Material.valueOf(args[2].toUpperCase()); + mat = Material.valueOf(args[1].toUpperCase()); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Material); return true; @@ -79,9 +78,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Change blacklist and ignorelist options"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res lset [blacklist/ignorelist] [material]", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Change blacklist and ignorelist options"); + c.get("Info", Arrays.asList("&eUsage: &6/res lset [blacklist/ignorelist] [material]", "&eUsage: &6/res lset Info", "Blacklisting a material prevents it from being placed in the residence.", "Ignorelist causes a specific material to not be protected by Residence.")); diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index e921dea61..d719088ab 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -6,7 +6,6 @@ import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.block.Sign; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -26,11 +25,15 @@ public class market implements cmd { @Override @CommandAnnotation(simple = true, priority = 2600) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { this.plugin = plugin; if (!(sender instanceof Player)) return false; + if (args.length == 0) { + return false; + } + Player player = (Player) sender; int page = 1; try { @@ -40,12 +43,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } catch (Exception ex) { } - if (args.length == 1) { - return false; - } - String secondCommand = args[1].toLowerCase(); - - switch (secondCommand.toLowerCase()) { + switch (args[0].toLowerCase()) { case "list": return commandResMarketList(args, player, page); @@ -59,15 +57,15 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return commandResMarketRent(args, resadmin, player); case "release": case "unrent": - if (args.length != 3 && args.length != 2) + if (args.length != 2 && args.length != 1) return false; ClaimedResidence res = null; - if (args.length == 2) + if (args.length == 1) res = plugin.getResidenceManager().getByLoc(player.getLocation()); else - res = plugin.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { plugin.msg(player, lm.Invalid_Residence); @@ -112,7 +110,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getRentManager().unrent(player, area, resadmin); return true; case "sign": - if (args.length != 3) { + if (args.length != 2) { return false; } Block block = Utils.getTargetBlock(player, 10); @@ -166,10 +164,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman case "info": res = null; - if (args.length == 2) + if (args.length == 1) res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 3) - res = plugin.getResidenceManager().getByName(args[2]); + else if (args.length ==2) + res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { plugin.msg(player, lm.Invalid_Residence); return true; @@ -183,10 +181,10 @@ else if (args.length == 3) return true; case "buy": res = null; - if (args.length == 2) + if (args.length == 1) res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 3) - res = plugin.getResidenceManager().getByName(args[2]); + else if (args.length == 2) + res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { plugin.msg(player, lm.Invalid_Residence); @@ -201,24 +199,24 @@ else if (args.length == 3) } return true; case "unsell": - if (args.length != 3) + if (args.length != 2) return false; - plugin.getTransactionManager().removeFromSale(player, args[2], resadmin); + plugin.getTransactionManager().removeFromSale(player, args[1], resadmin); return true; case "sell": - if (args.length != 4) + if (args.length != 3) return false; int amount; try { - amount = Integer.parseInt(args[3]); + amount = Integer.parseInt(args[2]); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Amount); return true; } - plugin.getTransactionManager().putForSale(args[2], player, amount, resadmin); + plugin.getTransactionManager().putForSale(args[1], player, amount, resadmin); return true; default: return false; @@ -226,17 +224,17 @@ else if (args.length == 3) } private boolean commandResMarketRent(String[] args, boolean resadmin, Player player) { - if (args.length < 2 || args.length > 4) { + if (args.length < 1 || args.length > 3) { return false; } boolean repeat = plugin.getConfigManager().isRentPlayerAutoPay(); ClaimedResidence res = null; - if (args.length == 4) { - if (args[3].equalsIgnoreCase("t") || args[3].equalsIgnoreCase("true")) { + if (args.length == 3) { + if (args[2].equalsIgnoreCase("t") || args[2].equalsIgnoreCase("true")) { repeat = true; - } else if (args[3].equalsIgnoreCase("f") || args[3].equalsIgnoreCase("false")) { + } else if (args[2].equalsIgnoreCase("f") || args[2].equalsIgnoreCase("false")) { repeat = false; } else { plugin.msg(player, lm.Invalid_Boolean); @@ -244,10 +242,10 @@ private boolean commandResMarketRent(String[] args, boolean resadmin, Player pla } } - if (args.length == 2) + if (args.length == 1) res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length > 2) - res = plugin.getResidenceManager().getByName(args[2]); + else if (args.length > 1) + res = plugin.getResidenceManager().getByName(args[1]); if (res != null) { plugin.getRentManager().rent(player, res, repeat, resadmin); @@ -258,16 +256,16 @@ else if (args.length > 2) } private boolean commandResMarketPayRent(String[] args, boolean resadmin, Player player) { - if (args.length != 2 && args.length != 3) { + if (args.length != 1 && args.length != 2) { return false; } ClaimedResidence res = null; - if (args.length == 2) + if (args.length == 1) res = plugin.getResidenceManager().getByLoc(player.getLocation()); else - res = plugin.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[1]); if (res != null) plugin.getRentManager().payRent(player, res, resadmin); @@ -277,7 +275,7 @@ private boolean commandResMarketPayRent(String[] args, boolean resadmin, Player } private boolean commandResMarketRentable(String[] args, boolean resadmin, Player player) { - if (args.length < 5 || args.length > 8) { + if (args.length < 4 || args.length > 7) { return false; } if (!plugin.getConfigManager().enabledRentSystem()) { @@ -287,20 +285,20 @@ private boolean commandResMarketRentable(String[] args, boolean resadmin, Player int days; int cost; try { - cost = Integer.parseInt(args[3]); + cost = Integer.parseInt(args[2]); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Cost); return true; } try { - days = Integer.parseInt(args[4]); + days = Integer.parseInt(args[3]); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Days); return true; } boolean AllowRenewing = plugin.getConfigManager().isRentAllowRenewing(); - if (args.length >= 6) { - String ag = args[5]; + if (args.length >= 5) { + String ag = args[4]; if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { AllowRenewing = true; } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { @@ -312,8 +310,8 @@ private boolean commandResMarketRentable(String[] args, boolean resadmin, Player } boolean StayInMarket = plugin.getConfigManager().isRentStayInMarket(); - if (args.length >= 7) { - String ag = args[6]; + if (args.length >= 6) { + String ag = args[5]; if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { StayInMarket = true; } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { @@ -325,8 +323,8 @@ private boolean commandResMarketRentable(String[] args, boolean resadmin, Player } boolean AllowAutoPay = plugin.getConfigManager().isRentAllowAutoPay(); - if (args.length >= 8) { - String ag = args[7]; + if (args.length >= 7) { + String ag = args[6]; if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { AllowAutoPay = true; } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { @@ -337,7 +335,7 @@ private boolean commandResMarketRentable(String[] args, boolean resadmin, Player } } - plugin.getRentManager().setForRent(player, args[2], cost, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); + plugin.getRentManager().setForRent(player, args[1], cost, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); return true; } @@ -346,7 +344,7 @@ private boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player plugin.msg(player, lm.Economy_MarketDisabled); return true; } - if (args.length != 3 && args.length != 4) { + if (args.length != 2 && args.length != 3) { return false; } @@ -354,12 +352,12 @@ private boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player String barg = ""; ClaimedResidence res = null; - if (args.length == 3) { - barg = args[2]; + if (args.length == 2) { + barg = args[1]; res = plugin.getResidenceManager().getByLoc(player.getLocation()); } else { - barg = args[3]; - res = plugin.getResidenceManager().getByName(args[2]); + barg = args[2]; + res = plugin.getResidenceManager().getByName(args[1]); } if (barg.equalsIgnoreCase("true") || barg.equalsIgnoreCase("t")) { @@ -392,14 +390,14 @@ private boolean commandResMarketList(String[] args, Player player, int page) { return true; } plugin.msg(player, lm.General_MarketList); - if (args.length < 3) + if (args.length < 2) return false; - if (args[2].equalsIgnoreCase("sell")) { + if (args[1].equalsIgnoreCase("sell")) { plugin.getTransactionManager().printForSaleResidences(player, page); return true; } - if (args[2].equalsIgnoreCase("rent")) { + if (args[1].equalsIgnoreCase("rent")) { if (plugin.getConfigManager().enabledRentSystem()) { plugin.getRentManager().printRentableResidences(player, page); } @@ -409,51 +407,52 @@ private boolean commandResMarketList(String[] args, Player player, int page) { } @Override - public void getLocale(ConfigReader c, String path) { + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get(path + "Description", "Buy, Sell, or Rent Residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res market ? for more Info")); + c.get("Description", "Buy, Sell, or Rent Residences"); + c.get("Info", Arrays.asList("&eUsage: &6/res market ? for more Info")); - path += "SubCommands."; + c.setP(c.getPath() + "SubCommands."); - c.get(path + "Info.Description", "Get economy Info on residence"); - c.get(path + "Info.Info", Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost.")); + c.get("Info.Description", "Get economy Info on residence"); + c.get("Info.Info", Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "Info"), Arrays.asList("[residence]")); - c.get(path + "list.Description", "Lists rentable and for sale residences."); - c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res market list [rent/sell]")); + c.get("list.Description", "Lists rentable and for sale residences."); + c.get("list.Info", Arrays.asList("&eUsage: &6/res market list [rent/sell]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("rent%%sell")); - c.get(path + "list.SubCommands.rent.Description", "Lists rentable residences."); - c.get(path + "list.SubCommands.rent.Info", Arrays.asList("&eUsage: &6/res market list rent")); + c.get("list.SubCommands.rent.Description", "Lists rentable residences."); + c.get("list.SubCommands.rent.Info", Arrays.asList("&eUsage: &6/res market list rent")); - c.get(path + "list.SubCommands.sell.Description", "Lists for sale residences."); - c.get(path + "list.SubCommands.sell.Info", Arrays.asList("&eUsage: &6/res market list sell")); + c.get("list.SubCommands.sell.Description", "Lists for sale residences."); + c.get("list.SubCommands.sell.Info", Arrays.asList("&eUsage: &6/res market list sell")); - c.get(path + "sell.Description", "Sell a residence"); - c.get(path + "sell.Info", Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", + c.get("sell.Description", "Sell a residence"); + c.get("sell.Info", Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", "Another player can buy the residence with /res market buy")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sell"), Arrays.asList("[residence]")); - c.get(path + "sign.Description", "Set market sign"); - c.get(path + "sign.Info", Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at.")); + c.get("sign.Description", "Set market sign"); + c.get("sign.Info", Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sign"), Arrays.asList("[residence]")); - c.get(path + "buy.Description", "Buy a residence"); - c.get(path + "buy.Info", Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale.")); + c.get("buy.Description", "Buy a residence"); + c.get("buy.Info", Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "buy"), Arrays.asList("[residence]")); - c.get(path + "unsell.Description", "Stops selling a residence"); - c.get(path + "unsell.Info", Arrays.asList("&eUsage: &6/res market unsell [residence]")); + c.get("unsell.Description", "Stops selling a residence"); + c.get("unsell.Info", Arrays.asList("&eUsage: &6/res market unsell [residence]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "unsell"), Arrays.asList("[residence]")); - c.get(path + "rent.Description", "ent a residence"); - c.get(path + "rent.Info", Arrays.asList("&eUsage: &6/res market rent [residence] ", + c.get("rent.Description", "ent a residence"); + c.get("rent.Info", Arrays.asList("&eUsage: &6/res market rent [residence] ", "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rent"), Arrays.asList("[cresidence]", "true%%false")); - c.get(path + "rentable.Description", "Make a residence rentable."); - c.get(path + "rentable.Info", Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", + c.get("rentable.Description", "Make a residence rentable."); + c.get("rentable.Info", Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", "Makes a residence rentable for [cost] money for every [days] number of days.", "If is true, the residence will be able to be rented again before rent expires.", "If is true, the residence will stay in market after last renter will be removed.", @@ -461,19 +460,19 @@ public void getLocale(ConfigReader c, String path) { Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rentable"), Arrays.asList("[residence]", "1000", "7", "true", "true", "true")); - c.get(path + "autopay.Description", "Sets residence AutoPay to given value"); - c.get(path + "autopay.Info", Arrays.asList("&eUsage: &6/res market autopay [true/false]")); + c.get("autopay.Description", "Sets residence AutoPay to given value"); + c.get("autopay.Info", Arrays.asList("&eUsage: &6/res market autopay [true/false]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "autopay"), Arrays.asList("[residence]%%true%%false", "true%%false")); - c.get(path + "payrent.Description", "Pays rent for defined residence"); - c.get(path + "payrent.Info", Arrays.asList("&eUsage: &6/res market payrent ")); + c.get("payrent.Description", "Pays rent for defined residence"); + c.get("payrent.Info", Arrays.asList("&eUsage: &6/res market payrent ")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "payrent"), Arrays.asList("[residence]")); - c.get(path + "confirm.Description", "Confirms residence unrent/release action"); - c.get(path + "confirm.Info", Arrays.asList("&eUsage: &6/res market confirm")); + c.get("confirm.Description", "Confirms residence unrent/release action"); + c.get("confirm.Info", Arrays.asList("&eUsage: &6/res market confirm")); - c.get(path + "unrent.Description", "Remove a residence from rent or rentable."); - c.get(path + "unrent.Info", Arrays.asList("&eUsage: &6/res market unrent [residence]", + c.get("unrent.Description", "Remove a residence from rent or rentable."); + c.get("unrent.Info", Arrays.asList("&eUsage: &6/res market unrent [residence]", "If you are the renter, this command releases the rent on the house for you.", "If you are the owner, this command makes the residence not for rent anymore.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "release"), Arrays.asList("[residence]")); diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index 1c211629e..8ff53ca4f 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,16 +16,16 @@ public class material implements cmd { @Override @CommandAnnotation(simple = true, priority = 4300) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length != 2) { + if (args.length != 1) { return false; } try { - plugin.msg(player, lm.General_MaterialGet, args[1], CMIMaterial.get(Integer.parseInt(args[1])).getName()); + plugin.msg(player, lm.General_MaterialGet, args[0], CMIMaterial.get(Integer.parseInt(args[0])).getName()); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Material); } @@ -34,9 +33,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Check if material exists by its id"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res material [material]")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Check if material exists by its id"); + c.get("Info", Arrays.asList("&eUsage: &6/res material [material]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[materialId]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 0c5df5c61..3d8babdae 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -18,7 +17,7 @@ public class message implements cmd { @Override @CommandAnnotation(simple = true, priority = 1000) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { ClaimedResidence res = null; String message = null; Boolean enter = null; @@ -91,9 +90,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manage residence enter / leave messages"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Manage residence enter / leave messages"); + c.get("Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%enter%%leave", "enter%%leave")); } diff --git a/src/com/bekvon/bukkit/residence/commands/mirror.java b/src/com/bekvon/bukkit/residence/commands/mirror.java index 9288b6c6d..e636298c0 100644 --- a/src/com/bekvon/bukkit/residence/commands/mirror.java +++ b/src/com/bekvon/bukkit/residence/commands/mirror.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -15,22 +14,23 @@ public class mirror implements cmd { @Override @CommandAnnotation(simple = true, priority = 3700) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length != 3) + if (args.length != 2) return false; - plugin.getResidenceManager().mirrorPerms(player, args[2], args[1], resadmin); + plugin.getResidenceManager().mirrorPerms(player, args[1], args[0], resadmin); return true; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Mirrors Flags"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res mirror [Source Residence] [Target Residence]", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Mirrors Flags"); + c.get("Info", Arrays.asList("&eUsage: &6/res mirror [Source Residence] [Target Residence]", "Mirrors flags from one residence to another. You must be owner of both or a admin to do this.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[residence]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index 535abff75..64f05b6c4 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -15,7 +14,7 @@ public class padd implements cmd { @Override @CommandAnnotation(simple = true, priority = 400) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -24,26 +23,27 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman String baseCmd = "res"; if (resadmin) baseCmd = "resadmin"; - if (args.length == 2) { - if (!plugin.isPlayerExist(player, args[1], true)) + if (args.length == 1) { + if (!plugin.isPlayerExist(player, args[0], true)) return false; - player.performCommand(baseCmd + " pset " + args[1] + " trusted true"); + player.performCommand(baseCmd + " pset " + args[0] + " trusted true"); return true; } - if (args.length == 3) { - if (!plugin.isPlayerExist(player, args[2], true)) + if (args.length == 2) { + if (!plugin.isPlayerExist(player, args[1], true)) return false; - player.performCommand(baseCmd + " pset " + args[1] + " " + args[2] + " trusted true"); + player.performCommand(baseCmd + " pset " + args[0] + " " + args[1] + " trusted true"); return true; } return false; } @Override - public void getLocale(ConfigReader c, String path) { + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); // Main command - c.get(path + "Description", "Add player to residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res padd [player]", "Adds essential flags for player")); + c.get("Description", "Add player to residence."); + c.get("Info", Arrays.asList("&eUsage: &6/res padd [player]", "Adds essential flags for player")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index 2c5344264..f138c04bf 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -3,7 +3,6 @@ import java.util.Arrays; import org.bukkit.Bukkit; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -16,7 +15,7 @@ public class pdel implements cmd { @Override @CommandAnnotation(simple = true, priority = 500) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -25,22 +24,23 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman String baseCmd = "res"; if (resadmin) baseCmd = "resadmin"; - if (args.length == 2) { - Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " trusted remove"); + if (args.length == 1) { + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[0] + " trusted remove"); return true; } - if (args.length == 3) { - Bukkit.dispatchCommand(player, baseCmd + " pset " + args[1] + " " + args[2] + " trusted remove"); + if (args.length == 2) { + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[0] + " " + args[1] + " trusted remove"); return true; } return false; } @Override - public void getLocale(ConfigReader c, String path) { + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); // Main command - c.get(path + "Description", "Remove player from residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res pdel [player]", "Removes essential flags from player")); + c.get("Description", "Remove player from residence."); + c.get("Info", Arrays.asList("&eUsage: &6/res pdel [player]", "Removes essential flags from player")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 5a75dade9..be45e333f 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -3,7 +3,6 @@ import java.util.Arrays; import org.bukkit.Bukkit; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -20,32 +19,32 @@ public class pset implements cmd { @Override @CommandAnnotation(simple = true, priority = 800) - public boolean perform(final Residence plugin, final String[] args, final boolean resadmin, Command command, final CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player) && args.length != 5 && args.length == 4 && !args[3].equalsIgnoreCase("removeall")) return false; - if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { + if (args.length == 2 && args[1].equalsIgnoreCase("removeall")) { Player player = (Player) sender; ClaimedResidence area = plugin.getResidenceManager().getByLoc(player.getLocation()); if (area != null) { - area.getPermissions().removeAllPlayerFlags(sender, args[1], resadmin); + area.getPermissions().removeAllPlayerFlags(sender, args[0], resadmin); } else { plugin.msg(sender, lm.Invalid_Residence); } return true; - } else if (args.length == 4 && args[3].equalsIgnoreCase("removeall")) { - ClaimedResidence area = plugin.getResidenceManager().getByName(args[1]); + } else if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { + ClaimedResidence area = plugin.getResidenceManager().getByName(args[0]); if (area != null) { - area.getPermissions().removeAllPlayerFlags(sender, args[2], resadmin); + area.getPermissions().removeAllPlayerFlags(sender, args[1], resadmin); } else { plugin.msg(sender, lm.Invalid_Residence); } return true; - } else if (args.length == 4) { + } else if (args.length == 3) { Player player = (Player) sender; ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (!plugin.isPlayerExist(sender, args[1], true)) + if (!plugin.isPlayerExist(sender, args[0], true)) return false; if (res == null) { @@ -57,12 +56,12 @@ public boolean perform(final Residence plugin, final String[] args, final boolea plugin.msg(sender, lm.General_NoPermission); return true; } - res.getPermissions().setPlayerFlag(sender, args[1], args[2], args[3], resadmin, true); + res.getPermissions().setPlayerFlag(sender, args[0], args[1], args[2], resadmin, true); return true; - } else if (args.length == 5) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); - if (!plugin.isPlayerExist(sender, args[2], true)) + } else if (args.length == 4) { + ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); + if (!plugin.isPlayerExist(sender, args[1], true)) return false; if (res == null) { @@ -75,20 +74,20 @@ public boolean perform(final Residence plugin, final String[] args, final boolea return true; } - res.getPermissions().setPlayerFlag(sender, args[2], args[3], args[4], resadmin, true); + res.getPermissions().setPlayerFlag(sender, args[1], args[2], args[3], resadmin, true); return true; - } else if ((args.length == 2 || args.length == 3) && plugin.getConfigManager().useFlagGUI()) { + } else if ((args.length == 1 || args.length == 2) && plugin.getConfigManager().useFlagGUI()) { final Player player = (Player) sender; player.closeInventory(); ClaimedResidence res = null; String targetPlayer = null; - if (args.length == 2) { + if (args.length == 1) { res = plugin.getResidenceManager().getByLoc(player.getLocation()); - targetPlayer = args[1]; + targetPlayer = args[0]; } else { - res = plugin.getResidenceManager().getByName(args[1]); - targetPlayer = args[2]; + res = plugin.getResidenceManager().getByName(args[0]); + targetPlayer = args[1]; } if (res == null) { @@ -129,9 +128,10 @@ public void run() { } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Set flags on a specific player for a Residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Set flags on a specific player for a Residence."); + c.get("Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]%%[flag]", "[flag]%%true%%false%%remove", diff --git a/src/com/bekvon/bukkit/residence/commands/raid.java b/src/com/bekvon/bukkit/residence/commands/raid.java index 126a1a75d..2ab1996c5 100644 --- a/src/com/bekvon/bukkit/residence/commands/raid.java +++ b/src/com/bekvon/bukkit/residence/commands/raid.java @@ -1,62 +1,82 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; -import java.util.HashMap; -import java.util.Map.Entry; -import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.Zrips.CMI.utils.RawMessage; import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.raid.RaidDefender; public class raid implements cmd { + enum States { + start, stop, immunity, kick; + public static States getState(String name) { + for (States one : States.values()) { + if (one.toString().equalsIgnoreCase(name)) + return one; + } + return null; + } + + } + @Override @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; final Player player = (Player) sender; - if (args.length != 1 && args.length != 2) + if (args.length != 0 && args.length != 1) return false; if (!ConfigManager.RaidEnabled) { plugin.msg(player, lm.Raid_NotEnabled); return true; } - + if (!resadmin) { plugin.msg(sender, lm.General_NoPermission); } + + States state = States.getState(args[1]); + + if (state == null) { + return false; + } + + switch(state) { + case immunity: + break; + case kick: + break; + case start: + break; + case stop: + break; + default: + break; + } // raid start [resname/playerName/currentres] // raid stop [resname/playerName/currentres] // raid immunity [add/take/set/clear] [resname/playerName/currentres] - return false; } - @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manage raid in residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res defend [resName] (playerName)")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Manage raid in residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res defend [resName] (playerName)")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]%%[playername]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/raidstatus.java b/src/com/bekvon/bukkit/residence/commands/raidstatus.java index 69d6f00de..699dfa479 100644 --- a/src/com/bekvon/bukkit/residence/commands/raidstatus.java +++ b/src/com/bekvon/bukkit/residence/commands/raidstatus.java @@ -5,7 +5,6 @@ import java.util.UUID; import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -21,20 +20,19 @@ import com.bekvon.bukkit.residence.raid.RaidAttacker; import com.bekvon.bukkit.residence.raid.RaidDefender; import com.bekvon.bukkit.residence.raid.ResidenceRaid; -import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.Utils; public class raidstatus implements cmd { @Override @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; final Player player = (Player) sender; - if (args.length != 1 && args.length != 2) + if (args.length != 0 && args.length != 1) return false; if (!ConfigManager.RaidEnabled) { @@ -42,9 +40,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); if (res == null) { - OfflinePlayer offp = plugin.getOfflinePlayer(args[1]); + OfflinePlayer offp = plugin.getOfflinePlayer(args[0]); if (offp != null) { ResidencePlayer resp = plugin.getPlayerManager().getResidencePlayer(offp.getUniqueId()); res = resp.getCurrentlyRaidedResidence(); @@ -122,9 +120,10 @@ private String getDefenders(ResidenceRaid raid) { } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Check raid status for a residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res raidstatus (resName/playerName)")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Check raid status for a residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res raidstatus (resName/playerName)")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]%%[playername]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index ab27a3553..f5f7830d6 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -21,7 +21,7 @@ public class rc implements cmd { @Override @CommandAnnotation(simple = true, priority = 1100) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return true; Player player = (Player) sender; @@ -30,8 +30,6 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Residence_ChatDisabled); return false; } - if (args.length > 0) - args = Arrays.copyOfRange(args, 1, args.length); if (args.length == 0) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); @@ -187,23 +185,24 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Joins current or defined residence chat channel"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res rc (residence)", "Join residence chat channel.")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Joins current or defined residence chat channel"); + c.get("Info", Arrays.asList("&eUsage: &6/res rc (residence)", "Join residence chat channel.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); - path += "SubCommands."; - c.get(path + "leave.Description", "Leaves current residence chat channel"); - c.get(path + "leave.Info", Arrays.asList("&eUsage: &6/res rc leave", "If you are in residence chat channel then you will leave it")); + c.setP(c.getPath() + "SubCommands."); + c.get("leave.Description", "Leaves current residence chat channel"); + c.get("leave.Info", Arrays.asList("&eUsage: &6/res rc leave", "If you are in residence chat channel then you will leave it")); - c.get(path + "setcolor.Description", "Sets residence chat channel text color"); - c.get(path + "setcolor.Info", Arrays.asList("&eUsage: &6/res rc setcolor [colorCode]", "Sets residence chat channel text color")); + c.get("setcolor.Description", "Sets residence chat channel text color"); + c.get("setcolor.Info", Arrays.asList("&eUsage: &6/res rc setcolor [colorCode]", "Sets residence chat channel text color")); - c.get(path + "setprefix.Description", "Sets residence chat channel prefix"); - c.get(path + "setprefix.Info", Arrays.asList("&eUsage: &6/res rc setprefix [newName]", "Sets residence chat channel prefix")); + c.get("setprefix.Description", "Sets residence chat channel prefix"); + c.get("setprefix.Info", Arrays.asList("&eUsage: &6/res rc setprefix [newName]", "Sets residence chat channel prefix")); - c.get(path + "kick.Description", "Kicks player from channel"); - c.get(path + "kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", "Kicks player from channel")); + c.get("kick.Description", "Kicks player from channel"); + c.get("kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", "Kicks player from channel")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "kick"), Arrays.asList("[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index a639e6308..ceb9409ef 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; @@ -19,39 +18,37 @@ public class reload implements cmd { @Override @CommandAnnotation(simple = false, priority = 5800) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!resadmin && !sender.isOp()) { plugin.msg(sender, lm.General_NoPermission); return true; } - if (args.length != 2) { + if (args.length != 1) { return false; } - - if (args[1].equalsIgnoreCase("lang")) { + switch (args[0].toLowerCase()) { + case "lang": plugin.getLM().LanguageReload(); plugin.getLocaleManager().LoadLang(plugin.getConfigManager().getLanguage()); sender.sendMessage(plugin.getPrefix() + " Reloaded language file."); return true; - } else if (args[1].equalsIgnoreCase("config")) { + case "config": plugin.getConfigManager().UpdateConfigFile(); sender.sendMessage(plugin.getPrefix() + " Reloaded config file."); return true; - } else if (args[1].equalsIgnoreCase("groups")) { + case "groups": plugin.getConfigManager().loadGroups(); plugin.gmanager = new PermissionManager(plugin); plugin.wmanager = new WorldFlagManager(plugin); sender.sendMessage(plugin.getPrefix() + " Reloaded groups file."); return true; - } else if (args[1].equalsIgnoreCase("flags")) { + case "flags": plugin.getConfigManager().loadFlags(); plugin.gmanager = new PermissionManager(plugin); plugin.imanager = new WorldItemManager(plugin); plugin.wmanager = new WorldFlagManager(plugin); - FlagPermissions.initValidFlags(); - sender.sendMessage(plugin.getPrefix() + " Reloaded flags file."); return true; } @@ -59,9 +56,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "reload lanf or config files"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res reload [config/lang/groups/flags]")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "reload lanf or config files"); + c.get("Info", Arrays.asList("&eUsage: &6/res reload [config/lang/groups/flags]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("config%%lang%%groups%%flags")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 06915c0f4..e2c74738d 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -21,13 +20,13 @@ public class remove implements cmd { @Override @CommandAnnotation(simple = true, priority = 2300) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { ClaimedResidence res = null; String senderName = sender.getName(); - if (args.length == 2) { - res = plugin.getResidenceManager().getByName(args[1]); - } else if (sender instanceof Player && args.length == 1) { + if (args.length == 1) { + res = plugin.getResidenceManager().getByName(args[0]); + } else if (sender instanceof Player && args.length == 0) { res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); } @@ -100,10 +99,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); // Main command - c.get(path + "Description", "Remove residences."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res remove ")); + c.get("Description", "Remove residences."); + c.get("Info", Arrays.asList("&eUsage: &6/res remove ")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/removeall.java b/src/com/bekvon/bukkit/residence/commands/removeall.java index 1962ae0eb..acdd6a1fc 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeall.java +++ b/src/com/bekvon/bukkit/residence/commands/removeall.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; @@ -15,12 +14,12 @@ public class removeall implements cmd { @Override @CommandAnnotation(simple = false, priority = 5100) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (args.length != 2 && args.length != 1) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + if (args.length != 1 && args.length != 0) { return false; } - String target = args.length == 2 ? args[1] : sender.getName(); + String target = args.length == 1 ? args[0] : sender.getName(); if (resadmin) { plugin.getResidenceManager().removeAllByOwner(target); @@ -32,9 +31,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Remove all residences owned by a player."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeall [owner]", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Remove all residences owned by a player."); + c.get("Info", Arrays.asList("&eUsage: &6/res removeall [owner]", "Removes all residences owned by a specific player.'", "Requires /resadmin if you use it on anyone besides yourself.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index 60f0bec2f..d6b6215c9 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -4,7 +4,6 @@ import org.bukkit.ChatColor; import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,23 +16,24 @@ public class removeworld implements cmd { @Override @CommandAnnotation(simple = false, priority = 5200) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (args.length != 2) + if (args.length != 1) return false; if (sender instanceof Player || sender instanceof BlockCommandSender) { sender.sendMessage(ChatColor.RED + "MUST be run from console."); return false; } - plugin.getResidenceManager().removeAllFromWorld(sender, args[1]); + plugin.getResidenceManager().removeAllFromWorld(sender, args[0]); return true; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Removes all residences from particular world"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeworld [worldName]")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Removes all residences from particular world"); + c.get("Info", Arrays.asList("&eUsage: &6/res removeworld [worldName]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/rename.java b/src/com/bekvon/bukkit/residence/commands/rename.java index 4e9ef4387..361d5040c 100644 --- a/src/com/bekvon/bukkit/residence/commands/rename.java +++ b/src/com/bekvon/bukkit/residence/commands/rename.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -15,22 +14,22 @@ public class rename implements cmd { @Override @CommandAnnotation(simple = true, priority = 2700) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; - Player player = (Player) sender; - if (args.length == 3) { - plugin.getResidenceManager().renameResidence(player, args[1], args[2], resadmin); - return true; - } - return false; + if (args.length != 2) + return false; + + plugin.getResidenceManager().renameResidence((Player) sender, args[0], args[1], resadmin); + return true; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Renames a residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Renames a residence."); + c.get("Info", Arrays.asList("&eUsage: &6/res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", "The name must not already be taken by another residence.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/renamearea.java b/src/com/bekvon/bukkit/residence/commands/renamearea.java index ecd03644d..7424034c6 100644 --- a/src/com/bekvon/bukkit/residence/commands/renamearea.java +++ b/src/com/bekvon/bukkit/residence/commands/renamearea.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,26 +16,29 @@ public class renamearea implements cmd { @Override @CommandAnnotation(simple = true, priority = 2800) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length != 4) + if (args.length != 3) return false; - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); - if (res == null) + ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); + if (res == null) { plugin.msg(player, lm.Invalid_Residence); - else - res.renameArea(player, args[2], args[3], resadmin); + return true; + } + + res.renameArea(player, args[1], args[2], resadmin); return true; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Rename area name for residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res removeworld [residence] [oldAreaName] [newAreaName]")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Rename area name for residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res removeworld [residence] [oldAreaName] [newAreaName]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/resadmin.java b/src/com/bekvon/bukkit/residence/commands/resadmin.java index 32f64f04b..142589471 100644 --- a/src/com/bekvon/bukkit/residence/commands/resadmin.java +++ b/src/com/bekvon/bukkit/residence/commands/resadmin.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -16,17 +15,17 @@ public class resadmin implements cmd { @Override @CommandAnnotation(simple = false, priority = 5300) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; - if (args.length != 2) + if (args.length != 1) return true; Player player = (Player) sender; - if (args[1].equals("on")) { + if (args[0].equals("on")) { plugin.resadminToggle.add(player.getName()); plugin.msg(player, lm.General_AdminToggleTurnOn); - } else if (args[1].equals("off")) { + } else if (args[0].equals("off")) { plugin.resadminToggle.remove(player.getName()); plugin.msg(player, lm.General_AdminToggleTurnOff); } @@ -34,9 +33,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Enabled or disable residence admin"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res resadmin [on/off]")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Enabled or disable residence admin"); + c.get("Info", Arrays.asList("&eUsage: &6/res resadmin [on/off]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("on%%off")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index 47800a831..a5d20db02 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -4,7 +4,6 @@ import org.bukkit.Bukkit; import org.bukkit.World; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -19,21 +18,21 @@ public class reset implements cmd { @Override @CommandAnnotation(simple = true, priority = 4400) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (args.length != 2 && args.length != 1) + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + if (args.length != 1 && args.length != 0) return false; String residenceName = null; - if (args.length == 2) - residenceName = args[1]; + if (args.length == 1) + residenceName = args[0]; ClaimedResidence res = null; if (residenceName != null && !residenceName.equalsIgnoreCase("all")) res = plugin.getResidenceManager().getByName(residenceName); - if (args.length == 1 && sender instanceof Player) + if (args.length == 0 && sender instanceof Player) res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); - if (residenceName != null && !residenceName.equalsIgnoreCase("all") && res == null || args.length == 1 && res == null) { + if (residenceName != null && !residenceName.equalsIgnoreCase("all") && res == null || args.length == 0 && res == null) { plugin.msg(sender, lm.Invalid_Residence); return true; } @@ -72,9 +71,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Reset residence to default flags."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res reset ", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Reset residence to default flags."); + c.get("Info", Arrays.asList("&eUsage: &6/res reset ", "Resets the flags on a residence to their default. You must be the owner or an admin to do this.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 09a5cf2af..62fa69403 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -5,7 +5,6 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -16,14 +15,13 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import com.bekvon.bukkit.residence.utils.Debug; public class rt implements cmd { @Override @CommandAnnotation(simple = true, priority = 2500) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (args.length != 1 && args.length != 2 && args.length != 3) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + if (args.length != 0 && args.length != 1 && args.length != 2) { return false; } @@ -34,7 +32,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman Player tPlayer = null; - if (args.length > 1) { + if (args.length > 0) { c: for (int i = 1; i < args.length; i++) { for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { if (!one.getCenter().getWorld().getName().equalsIgnoreCase(args[i])) @@ -48,7 +46,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } } - if (args.length > 1 && wname == null && tPlayer == null) { + if (args.length > 0 && wname == null && tPlayer == null) { plugin.msg(sender, lm.Invalid_World); String worlds = ""; for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { @@ -98,7 +96,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(sender, lm.RandomTeleport_Disabled); return true; } - Long time = System.currentTimeMillis(); + Location loc = plugin.getRandomTpManager().getRandomlocation(wname); plugin.getRandomTeleportMap().put(tPlayer.getName(), System.currentTimeMillis()); @@ -119,9 +117,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Teleports to random location in world"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res rt (worldname) (playerName)", "Teleports you to random location in defined world.")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Teleports to random location in world"); + c.get("Info", Arrays.asList("&eUsage: &6/res rt (worldname) (playerName)", "Teleports you to random location in defined world.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]", "[playername]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 6c7877dc7..2264347a9 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -6,7 +6,6 @@ import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -20,13 +19,12 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; public class select implements cmd { @Override @CommandAnnotation(simple = true, priority = 1300) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -48,8 +46,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (args.length == 2) { - if (args[1].equals("size") || args[1].equals("cost")) { + if (args.length == 1) { + if (args[0].equals("size") || args[0].equals("cost")) { if (plugin.getSelectionManager().hasPlacedBoth(player)) { try { plugin.getSelectionManager().showSelectionInfo(player); @@ -67,19 +65,19 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } } - } else if (args[1].equals("vert")) { + } else if (args[0].equals("vert")) { plugin.getSelectionManager().vert(player, resadmin); plugin.getSelectionManager().afterSelectionUpdate(player, true); return true; - } else if (args[1].equals("sky")) { + } else if (args[0].equals("sky")) { plugin.getSelectionManager().sky(player, resadmin); plugin.getSelectionManager().afterSelectionUpdate(player, true); return true; - } else if (args[1].equals("bedrock")) { + } else if (args[0].equals("bedrock")) { plugin.getSelectionManager().bedrock(player, resadmin); plugin.getSelectionManager().afterSelectionUpdate(player, true); return true; - } else if (args[1].equals("coords")) { + } else if (args[0].equals("coords")) { plugin.msg(player, lm.General_Separator); if (!plugin.getSelectionManager().hasPlacedBoth(player)) { @@ -101,7 +99,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getSelectionManager().afterSelectionUpdate(player, false); return true; } else if (args[1].equals("chunk")) { - plugin.getSelectionManager().selectChunk(player); + plugin.getSelectionManager().getSelection(player).selectChunk(); plugin.getSelectionManager().afterSelectionUpdate(player, true); return true; } else if (args[1].equals("worldedit")) { @@ -111,11 +109,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } return true; } - } else if (args.length == 3) { - if (args[1].equals("expand")) { + } else if (args.length == 2) { + if (args[0].equals("expand")) { int amount; try { - amount = Integer.parseInt(args[2]); + amount = Integer.parseInt(args[1]); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Amount); return true; @@ -123,20 +121,20 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getSelectionManager().modify(player, false, amount); return true; } - if (args[1].equals("contract")) { + if (args[0].equals("contract")) { int amount; try { - amount = Integer.parseInt(args[2]); + amount = Integer.parseInt(args[1]); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Amount); return true; } plugin.getSelectionManager().contract(player, amount); return true; - } else if (args[1].equals("shift")) { + } else if (args[0].equals("shift")) { int amount; try { - amount = Integer.parseInt(args[2]); + amount = Integer.parseInt(args[1]); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Amount); return true; @@ -149,13 +147,13 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } } - if ((args.length == 2 || args.length == 3) && args[1].equals("auto")) { + if ((args.length == 1 || args.length == 2) && args[0].equals("auto")) { Player target = player; - if (args.length == 3) { + if (args.length == 2) { if (!ResPerm.select_auto_others.hasPermission(player, true)) { return true; } - target = Bukkit.getPlayer(args[2]); + target = Bukkit.getPlayer(args[1]); if (target == null) { plugin.msg(player, lm.General_NotOnline); return true; @@ -169,12 +167,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getAutoSelectionManager().switchAutoSelection(target); return true; } - if (args.length > 1 && args[1].equals("residence")) { + if (args.length > 0 && args[0].equals("residence")) { String resName; String areaName; ClaimedResidence res = null; - if (args.length > 2) { - res = plugin.getResidenceManager().getByName(args[2]); + if (args.length > 1) { + res = plugin.getResidenceManager().getByName(args[1]); } else { res = plugin.getResidenceManager().getByLoc(player.getLocation()); } @@ -184,9 +182,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } resName = res.getName(); CuboidArea area = null; - if (args.length > 3) { - area = res.getArea(args[3]); - areaName = args[3]; + if (args.length > 2) { + area = res.getArea(args[2]); + areaName = args[2]; } else { areaName = res.getAreaIDbyLoc(player.getLocation()); area = res.getArea(areaName); @@ -201,7 +199,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } try { - plugin.getSelectionManager().selectBySize(player, Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3])); + plugin.getSelectionManager().selectBySize(player, Integer.parseInt(args[0]), Integer.parseInt(args[1]), Integer.parseInt(args[2])); return true; } catch (Exception ex) { // plugin.msg(player, lm.Select_Fail); @@ -210,51 +208,52 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); // Main command - c.get(path + "Description", "Selection Commands"); - c.get(path + "Info", Arrays.asList("This command selects areas for usage with residence.", + c.get("Description", "Selection Commands"); + c.get("Info", Arrays.asList("This command selects areas for usage with residence.", "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle.")); // Sub commands - path += "SubCommands."; + c.setP(c.getPath() + "SubCommands."); - c.get(path + "coords.Description", "Display selected coordinates"); - c.get(path + "coords.Info", Arrays.asList("&eUsage: &6/res select coords")); + c.get("coords.Description", "Display selected coordinates"); + c.get("coords.Info", Arrays.asList("&eUsage: &6/res select coords")); - c.get(path + "size.Description", "Display selected size"); - c.get(path + "size.Info", Arrays.asList("&eUsage: &6/res select size")); + c.get("size.Description", "Display selected size"); + c.get("size.Info", Arrays.asList("&eUsage: &6/res select size")); - c.get(path + "auto.Description", "Turns on auto selection tool"); - c.get(path + "auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]")); + c.get("auto.Description", "Turns on auto selection tool"); + c.get("auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "auto"), Arrays.asList("[playername]")); - c.get(path + "cost.Description", "Display selection cost"); - c.get(path + "cost.Info", Arrays.asList("&eUsage: &6/res select cost")); + c.get("cost.Description", "Display selection cost"); + c.get("cost.Info", Arrays.asList("&eUsage: &6/res select cost")); - c.get(path + "vert.Description", "Expand Selection Vertically"); - c.get(path + "vert.Info", Arrays.asList("&eUsage: &6/res select vert", "Will expand selection as high and as low as allowed.")); + c.get("vert.Description", "Expand Selection Vertically"); + c.get("vert.Info", Arrays.asList("&eUsage: &6/res select vert", "Will expand selection as high and as low as allowed.")); - c.get(path + "sky.Description", "Expand Selection to Sky"); - c.get(path + "sky.Info", Arrays.asList("&eUsage: &6/res select sky", "Expands as high as your allowed to go.")); + c.get("sky.Description", "Expand Selection to Sky"); + c.get("sky.Info", Arrays.asList("&eUsage: &6/res select sky", "Expands as high as your allowed to go.")); - c.get(path + "bedrock.Description", "Expand Selection to Bedrock"); - c.get(path + "bedrock.Info", Arrays.asList("&eUsage: &6/res select bedrock", "Expands as low as your allowed to go.")); + c.get("bedrock.Description", "Expand Selection to Bedrock"); + c.get("bedrock.Info", Arrays.asList("&eUsage: &6/res select bedrock", "Expands as low as your allowed to go.")); - c.get(path + "expand.Description", "Expand selection in a direction."); - c.get(path + "expand.Info", Arrays.asList("&eUsage: &6/res select expand ", "Expands in the direction your looking.")); + c.get("expand.Description", "Expand selection in a direction."); + c.get("expand.Info", Arrays.asList("&eUsage: &6/res select expand ", "Expands in the direction your looking.")); - c.get(path + "shift.Description", "Shift selection in a direction"); - c.get(path + "shift.Info", Arrays.asList("&eUsage: &6/res select shift ", "Pushes your selection by in the direction your looking.")); + c.get("shift.Description", "Shift selection in a direction"); + c.get("shift.Info", Arrays.asList("&eUsage: &6/res select shift ", "Pushes your selection by in the direction your looking.")); - c.get(path + "chunk.Description", "Select the chunk your currently in."); - c.get(path + "chunk.Info", Arrays.asList("&eUsage: &6/res select chunk", "Selects the chunk your currently standing in.")); + c.get("chunk.Description", "Select the chunk your currently in."); + c.get("chunk.Info", Arrays.asList("&eUsage: &6/res select chunk", "Selects the chunk your currently standing in.")); - c.get(path + "residence.Description", "Select a existing area in a residence."); - c.get(path + "residence.Info", Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence.")); + c.get("residence.Description", "Select a existing area in a residence."); + c.get("residence.Info", Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "residence"), Arrays.asList("[residence]")); - c.get(path + "worldedit.Description", "Set selection using the current WorldEdit selection."); - c.get(path + "worldedit.Info", Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection.")); + c.get("worldedit.Description", "Set selection using the current WorldEdit selection."); + c.get("worldedit.Info", Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection.")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java index 94faa4a9c..0ef14889d 100644 --- a/src/com/bekvon/bukkit/residence/commands/server.java +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,7 +16,7 @@ public class server implements cmd { @Override @CommandAnnotation(simple = false, priority = 5400) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -27,25 +26,24 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.General_NoPermission); return true; } - if (args.length == 2) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - res.getPermissions().setOwner(plugin.getServerLandName(), false); - plugin.msg(player, lm.Residence_OwnerChange, args[1], plugin.getServerLandName()); + if (args.length != 1 || plugin.getResidenceManager().getByName(args[0]) == null) { + plugin.msg(player, lm.Invalid_Residence); return true; } - plugin.msg(player, lm.Invalid_Residence); + + ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); + res.getPermissions().setOwner(plugin.getServerLandName(), false); + plugin.msg(player, lm.Residence_OwnerChange, args[0], plugin.getServerLandName()); return true; + } @Override - public void getLocale(ConfigReader c, String path) { + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get(path + "Description", "Make land server owned."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/resadmin server [residence]", "Make a residence server owned.")); + c.get("Description", "Make land server owned."); + c.get("Info", Arrays.asList("&eUsage: &6/resadmin server [residence]", "Make a residence server owned.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index e61d07152..c10681c28 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -3,7 +3,6 @@ import java.util.Arrays; import org.bukkit.Bukkit; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -20,11 +19,11 @@ public class set implements cmd { @Override @CommandAnnotation(simple = true, priority = 700) - public boolean perform(final Residence plugin, final String[] args, final boolean resadmin, Command command, final CommandSender sender) { - if (!(sender instanceof Player) && args.length != 4) + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + if (!(sender instanceof Player) && args.length != 3) return false; - if (args.length == 3) { + if (args.length == 2) { Player player = (Player) sender; ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { @@ -35,10 +34,10 @@ public boolean perform(final Residence plugin, final String[] args, final boolea plugin.msg(sender, lm.General_NoPermission); return true; } - res.getPermissions().setFlag(sender, args[1], args[2], resadmin); + res.getPermissions().setFlag(sender, args[0], args[1], resadmin); return true; - } else if (args.length == 4) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + } else if (args.length == 3) { + ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); if (res == null) { plugin.msg(sender, lm.Invalid_Residence); return true; @@ -47,16 +46,16 @@ public boolean perform(final Residence plugin, final String[] args, final boolea plugin.msg(sender, lm.General_NoPermission); return true; } - res.getPermissions().setFlag(sender, args[2], args[3], resadmin); + res.getPermissions().setFlag(sender, args[1], args[2], resadmin); return true; - } else if ((args.length == 1 || args.length == 2) && plugin.getConfigManager().useFlagGUI()) { + } else if ((args.length == 0 || args.length == 1) && plugin.getConfigManager().useFlagGUI()) { final Player player = (Player) sender; player.closeInventory(); ClaimedResidence res = null; - if (args.length == 1) + if (args.length == 0) res = plugin.getResidenceManager().getByLoc(player.getLocation()); else - res = plugin.getResidenceManager().getByName(args[1]); + res = plugin.getResidenceManager().getByName(args[0]); if (res == null) { plugin.msg(sender, lm.Invalid_Residence); return true; @@ -88,9 +87,10 @@ public void run() { } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Set general flags on a Residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res set [flag] [true/false/remove]", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Set general flags on a Residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res set [flag] [true/false/remove]", "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[flag]", "[flag]%%true%%false%%remove", "true%%false%%remove")); diff --git a/src/com/bekvon/bukkit/residence/commands/setall.java b/src/com/bekvon/bukkit/residence/commands/setall.java index 0d5267133..7e5742a7f 100644 --- a/src/com/bekvon/bukkit/residence/commands/setall.java +++ b/src/com/bekvon/bukkit/residence/commands/setall.java @@ -4,7 +4,6 @@ import org.bukkit.Bukkit; import org.bukkit.World; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; @@ -21,17 +20,17 @@ public class setall implements cmd { @Override @CommandAnnotation(simple = true, priority = 700) - public boolean perform(final Residence plugin, final String[] args, final boolean resadmin, Command command, final CommandSender sender) { - if (args.length != 3) + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + if (args.length != 2) return false; - String flag = args[1]; - + String flag = args[0]; + Flags f = Flags.getFlag(flag); if (f != null) flag = f.toString(); - - FlagState state = FlagPermissions.stringToFlagState(args[2]); + + FlagState state = FlagPermissions.stringToFlagState(args[1]); FlagPermissions GlobalFlags = Residence.getInstance().getPermissionManager().getAllFlags(); if (flag == null || !GlobalFlags.checkValidFlag(flag.toLowerCase(), true)) { @@ -59,9 +58,10 @@ public boolean perform(final Residence plugin, final String[] args, final boolea } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Set general flags on all residences"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res setall [flag] [true/false/remove]")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Set general flags on all residences"); + c.get("Info", Arrays.asList("&eUsage: &6/res setall [flag] [true/false/remove]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[flag]", "true%%false%%remove")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/setallfor.java b/src/com/bekvon/bukkit/residence/commands/setallfor.java index 0c9d1439c..b2cbfeb1b 100644 --- a/src/com/bekvon/bukkit/residence/commands/setallfor.java +++ b/src/com/bekvon/bukkit/residence/commands/setallfor.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; @@ -20,18 +19,18 @@ public class setallfor implements cmd { @Override @CommandAnnotation(simple = true, priority = 700) - public boolean perform(final Residence plugin, final String[] args, final boolean resadmin, Command command, final CommandSender sender) { - if (args.length != 4) + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + if (args.length != 3) return false; - String playerName = args[1]; - String flag = args[2]; + String playerName = args[0]; + String flag = args[1]; Flags f = Flags.getFlag(flag); if (f != null) flag = f.toString(); - FlagState state = FlagPermissions.stringToFlagState(args[3]); + FlagState state = FlagPermissions.stringToFlagState(args[2]); ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(playerName); if (resPlayer == null) return false; @@ -60,9 +59,10 @@ public boolean perform(final Residence plugin, final String[] args, final boolea } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Set general flags on all residences owned by particular player"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res setallfor [playerName] [flag] [true/false/remove]")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Set general flags on all residences owned by particular player"); + c.get("Info", Arrays.asList("&eUsage: &6/res setallfor [playerName] [flag] [true/false/remove]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]", "[flag]", "true%%false%%remove")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/setmain.java b/src/com/bekvon/bukkit/residence/commands/setmain.java index cfb9517a8..a889b2c0c 100644 --- a/src/com/bekvon/bukkit/residence/commands/setmain.java +++ b/src/com/bekvon/bukkit/residence/commands/setmain.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -18,22 +17,22 @@ public class setmain implements cmd { @Override @CommandAnnotation(simple = true, priority = 2900) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length != 1 && args.length != 2) { + if (args.length != 0 && args.length != 1) { return false; } ClaimedResidence res = null; - if (args.length == 1) + if (args.length == 0) res = plugin.getResidenceManager().getByLoc(player.getLocation()); else - res = plugin.getResidenceManager().getByName(args[1]); + res = plugin.getResidenceManager().getByName(args[0]); if (res == null) { plugin.msg(sender, lm.Invalid_Residence); @@ -57,9 +56,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Sets defined residence as main to show up in chat as prefix"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res setmain (residence)", "Set defined residence as main.")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Sets defined residence as main to show up in chat as prefix"); + c.get("Info", Arrays.asList("&eUsage: &6/res setmain (residence)", "Set defined residence as main.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index b3cc5144d..2db243ef4 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; @@ -16,9 +15,9 @@ public class setowner implements cmd { @Override @CommandAnnotation(simple = false, priority = 5500) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (args.length < 3) + if (args.length < 2) return false; if (!resadmin) { @@ -26,7 +25,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - ClaimedResidence area = plugin.getResidenceManager().getByName(args[1]); + ClaimedResidence area = plugin.getResidenceManager().getByName(args[0]); if (area != null) { if (area.isRaidInitialized() && !resadmin) { @@ -34,7 +33,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - area.getPermissions().setOwner(args[2], true); + area.getPermissions().setOwner(args[1], true); if (plugin.getRentManager().isForRent(area.getName())) plugin.getRentManager().removeRentable(area.getName()); if (plugin.getTransactionManager().isForSale(area.getName())) @@ -44,9 +43,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.getSignUtil().updateSignResName(area); if (area.getParent() == null) { - plugin.msg(sender, lm.Residence_OwnerChange, args[1], args[2]); + plugin.msg(sender, lm.Residence_OwnerChange, args[0], args[1]); } else { - plugin.msg(sender, lm.Subzone_OwnerChange, args[1].split("\\.")[args[1].split("\\.").length - 1], args[2]); + plugin.msg(sender, lm.Subzone_OwnerChange, args[0].split("\\.")[args[0].split("\\.").length - 1], args[1]); } } else { plugin.msg(sender, lm.Invalid_Residence); @@ -55,9 +54,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Change owner of a residence."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Change owner of a residence."); + c.get("Info", Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index fc4ea8b2a..9476c7ede 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -5,11 +5,11 @@ import java.util.Date; import java.util.List; import java.util.Map; -import java.util.TimeZone; import java.util.Map.Entry; +import java.util.TimeZone; + import org.bukkit.ChatColor; import org.bukkit.Location; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -31,7 +31,7 @@ public class shop implements cmd { @Override @CommandAnnotation(simple = true, priority = 1700) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -44,22 +44,22 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } catch (Exception ex) { } - if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("votes") || args[1].equalsIgnoreCase("likes"))) { + if ((args.length == 1 || args.length == 2 || args.length == 3) && (args[0].equalsIgnoreCase("votes") || args[0].equalsIgnoreCase("likes"))) { int VotePage = 1; ClaimedResidence res = null; - if (args.length == 2) { + if (args.length == 1) { res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { plugin.msg(player, lm.Residence_NotIn); return true; } - } else if (args.length == 3) { - res = plugin.getResidenceManager().getByName(args[2]); + } else if (args.length == 2) { + res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { try { - VotePage = Integer.parseInt(args[2]); + VotePage = Integer.parseInt(args[1]); res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { plugin.msg(player, lm.Residence_NotIn); @@ -71,14 +71,14 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } } - } else if (args.length == 4) { - res = plugin.getResidenceManager().getByName(args[2]); + } else if (args.length == 3) { + res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { plugin.msg(player, lm.Residence_NotIn); return true; } try { - VotePage = Integer.parseInt(args[3]); + VotePage = Integer.parseInt(args[2]); } catch (Exception ex) { plugin.msg(player, lm.General_UseNumbers); return true; @@ -125,13 +125,13 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if ((args.length == 2 || args.length == 3) && args[1].equalsIgnoreCase("list")) { + if ((args.length == 1 || args.length == 2) && args[0].equalsIgnoreCase("list")) { int Shoppage = 1; - if (args.length == 3) { + if (args.length == 2) { try { - Shoppage = Integer.parseInt(args[2]); + Shoppage = Integer.parseInt(args[1]); } catch (Exception ex) { plugin.msg(player, lm.General_UseNumbers); return true; @@ -184,7 +184,7 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if (args.length == 2 && args[1].equalsIgnoreCase("DeleteBoard")) { + if (args.length == 1 && args[0].equalsIgnoreCase("DeleteBoard")) { if (!resadmin) { plugin.msg(player, lm.General_AdminOnly); @@ -195,12 +195,12 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Shop_DeleteBoard); return true; } - if (args.length > 2 && args[1].equalsIgnoreCase("setdesc")) { + if (args.length > 1 && args[0].equalsIgnoreCase("setdesc")) { ClaimedResidence res = null; String desc = ""; - if (args.length >= 2) { + if (args.length >= 1) { res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { plugin.msg(player, lm.Residence_NotIn); @@ -225,21 +225,21 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman plugin.msg(player, lm.Shop_DescChange, ChatColor.translateAlternateColorCodes('&', desc)); return true; } - if (args.length == 3 && args[1].equalsIgnoreCase("createboard")) { + if (args.length == 2 && args[0].equalsIgnoreCase("createboard")) { if (!resadmin) { plugin.msg(player, lm.General_AdminOnly); return true; } - if (!plugin.getSelectionManager().hasPlacedBoth(player.getName())) { + if (!plugin.getSelectionManager().hasPlacedBoth(player)) { plugin.msg(player, lm.Select_Points); return true; } int place = 1; try { - place = Integer.parseInt(args[2]); + place = Integer.parseInt(args[1]); } catch (Exception ex) { plugin.msg(player, lm.General_UseNumbers); return true; @@ -260,8 +260,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - Location loc1 = plugin.getSelectionManager().getPlayerLoc1(player.getName()); - Location loc2 = plugin.getSelectionManager().getPlayerLoc2(player.getName()); + Location loc1 = plugin.getSelectionManager().getPlayerLoc1(player); + Location loc2 = plugin.getSelectionManager().getPlayerLoc2(player); if (loc1.getBlockY() < loc2.getBlockY()) { plugin.msg(player, lm.Shop_InvalidSelection); @@ -287,15 +287,15 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman return true; } - if ((args.length == 2 || args.length == 3 || args.length == 4) && (args[1].equalsIgnoreCase("vote") || args[1].equalsIgnoreCase("like"))) { + if ((args.length == 1 || args.length == 2 || args.length == 3) && (args[0].equalsIgnoreCase("vote") || args[0].equalsIgnoreCase("like"))) { String resName = ""; int vote = 5; ClaimedResidence res = null; - if (args.length == 3) { + if (args.length == 2) { if (plugin.getConfigManager().isOnlyLike()) { - res = plugin.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { plugin.msg(player, lm.Invalid_Residence); return true; @@ -310,39 +310,39 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } try { - vote = Integer.parseInt(args[2]); + vote = Integer.parseInt(args[1]); } catch (Exception ex) { plugin.msg(player, lm.General_UseNumbers); return true; } } - } else if (args.length == 2 && plugin.getConfigManager().isOnlyLike()) { + } else if (args.length == 1 && plugin.getConfigManager().isOnlyLike()) { res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { plugin.msg(player, lm.Residence_NotIn); return true; } vote = plugin.getConfigManager().getVoteRangeTo(); - } else if (args.length == 4 && !plugin.getConfigManager().isOnlyLike()) { - res = plugin.getResidenceManager().getByName(args[2]); + } else if (args.length == 3 && !plugin.getConfigManager().isOnlyLike()) { + res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { plugin.msg(player, lm.Invalid_Residence); return true; } try { - vote = Integer.parseInt(args[3]); + vote = Integer.parseInt(args[2]); } catch (Exception ex) { plugin.msg(player, lm.General_UseNumbers); return true; } - } else if (args.length == 3 && !plugin.getConfigManager().isOnlyLike()) { + } else if (args.length == 2 && !plugin.getConfigManager().isOnlyLike()) { res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) { plugin.msg(player, lm.Invalid_Residence); return true; } try { - vote = Integer.parseInt(args[3]); + vote = Integer.parseInt(args[2]); } catch (Exception ex) { plugin.msg(player, lm.General_UseNumbers); return true; @@ -406,40 +406,41 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Manage residence shop"); - c.get(path + "Info", Arrays.asList("Manages residence shop feature")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Manage residence shop"); + c.get("Info", Arrays.asList("Manages residence shop feature")); // Sub commands - path += "SubCommands."; - c.get(path + "list.Description", "Shows list of res shops"); - c.get(path + "list.Info", Arrays.asList("&eUsage: &6/res shop list", "Shows full list of all residences with shop flag")); + c.setP(c.getPath()+"SubCommands."); + c.get("list.Description", "Shows list of res shops"); + c.get("list.Info", Arrays.asList("&eUsage: &6/res shop list", "Shows full list of all residences with shop flag")); - c.get(path + "vote.Description", "Vote for residence shop"); - c.get(path + "vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", "Votes for current or defined residence")); + c.get("vote.Description", "Vote for residence shop"); + c.get("vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", "Votes for current or defined residence")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "vote"), Arrays.asList("[residence]", "10")); - c.get(path + "like.Description", "Give like for residence shop"); - c.get(path + "like.Info", Arrays.asList("&eUsage: &6/res shop like ", "Gives like for residence shop")); + c.get("like.Description", "Give like for residence shop"); + c.get("like.Info", Arrays.asList("&eUsage: &6/res shop like ", "Gives like for residence shop")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "like"), Arrays.asList("[residenceshop]")); - c.get(path + "votes.Description", "Shows res shop votes"); - c.get(path + "votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", "Shows full vote list of current or defined residence shop")); + c.get("votes.Description", "Shows res shop votes"); + c.get("votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", "Shows full vote list of current or defined residence shop")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "votes"), Arrays.asList("[residenceshop]")); - c.get(path + "likes.Description", "Shows res shop likes"); - c.get(path + "likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", "Shows full like list of current or defined residence shop")); + c.get("likes.Description", "Shows res shop likes"); + c.get("likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", "Shows full like list of current or defined residence shop")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "likes"), Arrays.asList("[residenceshop]")); - c.get(path + "setdesc.Description", "Sets residence shop description"); - c.get(path + "setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n")); + c.get("setdesc.Description", "Sets residence shop description"); + c.get("setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n")); - c.get(path + "createboard.Description", "Create res shop board"); - c.get(path + "createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", + c.get("createboard.Description", "Create res shop board"); + c.get("createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", "Creates res shop board from selected area. Place - position from which to start filling board")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "createboard"), Arrays.asList("1")); - c.get(path + "deleteboard.Description", "Deletes res shop board"); - c.get(path + "deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", "Deletes res shop board bi right clicking on one of signs")); + c.get("deleteboard.Description", "Deletes res shop board"); + c.get("deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", "Deletes res shop board bi right clicking on one of signs")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/show.java b/src/com/bekvon/bukkit/residence/commands/show.java index 6333c83f8..b6c61e8f1 100644 --- a/src/com/bekvon/bukkit/residence/commands/show.java +++ b/src/com/bekvon/bukkit/residence/commands/show.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -18,7 +17,7 @@ public class show implements cmd { @Override @CommandAnnotation(simple = true, priority = 3300) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -26,8 +25,8 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman ClaimedResidence res = null; - if (args.length == 2) { - res = plugin.getResidenceManager().getByName(args[1]); + if (args.length == 1) { + res = plugin.getResidenceManager().getByName(args[0]); } else { res = plugin.getResidenceManager().getByLoc(player.getLocation()); } @@ -45,9 +44,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Show residence boundaries"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res show ")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Show residence boundaries"); + c.get("Info", Arrays.asList("&eUsage: &6/res show ")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/signconvert.java b/src/com/bekvon/bukkit/residence/commands/signconvert.java index 8ba961be5..8e2769f55 100644 --- a/src/com/bekvon/bukkit/residence/commands/signconvert.java +++ b/src/com/bekvon/bukkit/residence/commands/signconvert.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -16,11 +15,7 @@ public class signconvert implements cmd { @Override @CommandAnnotation(simple = false, priority = 5600) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - - if (args.length != 0) - return false; - + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (sender instanceof Player) { Player player = (Player) sender; if (plugin.getPermissionManager().isResidenceAdmin(player)) { @@ -34,8 +29,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Converts signs from ResidenceSign plugin"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res signconvert", "Will try to convert saved sign data from 3rd party plugin")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Converts signs from ResidenceSign plugin"); + c.get("Info", Arrays.asList("&eUsage: &6/res signconvert", "Will try to convert saved sign data from 3rd party plugin")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/signupdate.java b/src/com/bekvon/bukkit/residence/commands/signupdate.java index f1f39aae3..7176da42a 100644 --- a/src/com/bekvon/bukkit/residence/commands/signupdate.java +++ b/src/com/bekvon/bukkit/residence/commands/signupdate.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; @@ -15,22 +14,19 @@ public class signupdate implements cmd { @Override @CommandAnnotation(simple = false, priority = 5700) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (args.length == 1) { - if (!resadmin) { - plugin.msg(sender, lm.General_NoPermission); - return true; - } - int number = plugin.getSignUtil().updateAllSigns(); - plugin.msg(sender, lm.Sign_Updated, number); + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + if (!resadmin) { + plugin.msg(sender, lm.General_NoPermission); return true; } - return false; + plugin.msg(sender, lm.Sign_Updated, plugin.getSignUtil().updateAllSigns()); + return true; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Updated residence signs"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res signupdate")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Updated residence signs"); + c.get("Info", Arrays.asList("&eUsage: &6/res signupdate")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java index dff0c93f2..85d1fa6fe 100644 --- a/src/com/bekvon/bukkit/residence/commands/sublist.java +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,9 +16,9 @@ public class sublist implements cmd { @Override @CommandAnnotation(simple = true, priority = 4100) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (args.length != 1 && args.length != 2 && args.length != 3) + if (args.length != 0 && args.length != 1 && args.length != 2) return false; int page = 0; @@ -31,10 +30,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } ClaimedResidence res; - if (args.length == 1 && sender instanceof Player) { + if (args.length == 0 && sender instanceof Player) { res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); } else { - res = plugin.getResidenceManager().getByName(args[1]); + res = plugin.getResidenceManager().getByName(args[0]); } if (page < 1) @@ -49,9 +48,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "List Residence Subzones"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res sublist ", "List subzones within a residence.")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "List Residence Subzones"); + c.get("Info", Arrays.asList("&eUsage: &6/res sublist ", "List subzones within a residence.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index 2f62024cd..d6bd7449e 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -18,22 +17,22 @@ public class subzone implements cmd { @Override @CommandAnnotation(simple = true, priority = 2100) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length != 2 && args.length != 3) { + if (args.length != 1 && args.length != 2) { return false; } String zname; ClaimedResidence res = null; - if (args.length == 2) { + if (args.length == 1) { res = plugin.getResidenceManager().getByLoc(player.getLocation()); - zname = args[1]; + zname = args[0]; } else { - res = plugin.getResidenceManager().getByName(args[1]); - zname = args[2]; + res = plugin.getResidenceManager().getByName(args[0]); + zname = args[1]; } if (res == null) { plugin.msg(player, lm.Invalid_Residence); @@ -63,9 +62,10 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Create subzones in residences."); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res subzone [subzone name]", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Create subzones in residences."); + c.get("Info", Arrays.asList("&eUsage: &6/res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index ebeaa0b2b..e8ed90f02 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -2,9 +2,7 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; @@ -16,22 +14,18 @@ public class tool implements cmd { @Override @CommandAnnotation(simple = true, priority = 1600) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - plugin.msg(player, lm.General_Separator); - plugin.msg(player, lm.Select_Tool, plugin.getConfigManager().getSelectionTool().getName()); - plugin.msg(player, lm.General_InfoTool, plugin.getConfigManager().getInfoTool().getName()); - plugin.msg(player, lm.General_Separator); + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + plugin.msg(sender, lm.General_Separator); + plugin.msg(sender, lm.Select_Tool, plugin.getConfigManager().getSelectionTool().getName()); + plugin.msg(sender, lm.General_InfoTool, plugin.getConfigManager().getInfoTool().getName()); + plugin.msg(sender, lm.General_Separator); return true; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Shows residence selection and info tool names"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res tool")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Shows residence selection and info tool names"); + c.get("Info", Arrays.asList("&eUsage: &6/res tool")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index f8fb6c476..7e9b48e83 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,38 +16,37 @@ public class tp implements cmd { @Override @CommandAnnotation(simple = true, priority = 1400) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length != 2) + if (args.length != 1) return false; - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); if (res == null) { plugin.msg(player, lm.Invalid_Residence); return true; } - + if (res.isRaidInitialized()) { if (res.getRaid().isAttacker(player)) { plugin.msg(player, lm.Raid_cantDo); return true; } - - } - + res.tpToResidence(player, player, resadmin); return true; } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Teleport to a residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Teleport to a residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", "Your permission group must also be allowed to teleport by the server admin.")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); } diff --git a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java index 83a88f0be..19f8730a5 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java +++ b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -16,12 +15,12 @@ public class tpconfirm implements cmd { @Override @CommandAnnotation(simple = true, priority = 1500) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length != 1) { + if (args.length != 0) { return false; } if (plugin.getTeleportMap().containsKey(player.getName())) { @@ -33,8 +32,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Ignore unsafe teleportation warning"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res tpconfirm", "Teleports you to a residence, when teleportation is unsafe.")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Ignore unsafe teleportation warning"); + c.get("Info", Arrays.asList("&eUsage: &6/res tpconfirm", "Teleports you to a residence, when teleportation is unsafe.")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/tpset.java b/src/com/bekvon/bukkit/residence/commands/tpset.java index 5115931bb..969abb0ea 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpset.java +++ b/src/com/bekvon/bukkit/residence/commands/tpset.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,7 +16,7 @@ public class tpset implements cmd { @Override @CommandAnnotation(simple = true, priority = 200) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -32,10 +31,11 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); // Main command - c.get(path + "Description", "Set the teleport location of a Residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res tpset", "This will set the teleport location for a residence to where your standing.", + c.get("Description", "Set the teleport location of a Residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res tpset", "This will set the teleport location for a residence to where your standing.", "You must be standing in the residence to use this command.", "You must also be the owner or have the +admin flag for the residence.")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index e24af4317..09f1b8355 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -19,17 +18,15 @@ public class unstuck implements cmd { @Override @CommandAnnotation(simple = true, priority = 4000) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; Player player = (Player) sender; - if (args.length != 1) - return false; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); + if (!group.hasUnstuckAccess()) { plugin.msg(player, lm.General_NoPermission); return true; @@ -45,8 +42,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "Teleports outside of residence"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res unstuck")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Teleports outside of residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res unstuck")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/version.java b/src/com/bekvon/bukkit/residence/commands/version.java index df306ceba..c9c3bb01d 100644 --- a/src/com/bekvon/bukkit/residence/commands/version.java +++ b/src/com/bekvon/bukkit/residence/commands/version.java @@ -3,7 +3,6 @@ import java.util.Arrays; import org.bukkit.ChatColor; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; @@ -15,7 +14,7 @@ public class version implements cmd { @Override @CommandAnnotation(simple = false, priority = 5900) - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender) { + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { sender.sendMessage(ChatColor.GRAY + "------------------------------------"); sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + plugin.getResidenceVersion()); sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); @@ -38,8 +37,9 @@ public boolean perform(Residence plugin, String[] args, boolean resadmin, Comman } @Override - public void getLocale(ConfigReader c, String path) { - c.get(path + "Description", "how residence version"); - c.get(path + "Info", Arrays.asList("&eUsage: &6/res version")); + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "how residence version"); + c.get("Info", Arrays.asList("&eUsage: &6/res version")); } } diff --git a/src/com/bekvon/bukkit/residence/containers/CommandAnnotation.java b/src/com/bekvon/bukkit/residence/containers/CommandAnnotation.java index 91123fca2..a0916293d 100644 --- a/src/com/bekvon/bukkit/residence/containers/CommandAnnotation.java +++ b/src/com/bekvon/bukkit/residence/containers/CommandAnnotation.java @@ -8,7 +8,19 @@ @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.METHOD }) public @interface CommandAnnotation { - boolean simple(); + boolean simple() default true; - int priority(); + int priority() default 1000; + + String info() default ""; + + String[] usage() default ""; + + String[] explanation() default {}; + + String[] tab() default {}; + + int[] regVar() default {}; + + int[] consoleVar() default {}; } diff --git a/src/com/bekvon/bukkit/residence/containers/CommandStatus.java b/src/com/bekvon/bukkit/residence/containers/CommandStatus.java index 893af69ea..bdb88364d 100644 --- a/src/com/bekvon/bukkit/residence/containers/CommandStatus.java +++ b/src/com/bekvon/bukkit/residence/containers/CommandStatus.java @@ -4,10 +4,14 @@ public class CommandStatus { private Boolean simple; private Integer priority; + private String info; + private String[] usage; - public CommandStatus(Boolean simple, Integer priority) { + public CommandStatus(Boolean simple, Integer priority, String info, String[] usage) { this.simple = simple; this.priority = priority; + this.info = info; + this.usage = usage; } public Integer getPriority() { @@ -25,4 +29,20 @@ public Boolean getSimple() { public void setSimple(Boolean simple) { this.simple = simple; } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String[] getUsage() { + return usage; + } + + public void setUsage(String[] usage) { + this.usage = usage; + } } diff --git a/src/com/bekvon/bukkit/residence/containers/cmd.java b/src/com/bekvon/bukkit/residence/containers/cmd.java index af6d551b1..a83addcdf 100644 --- a/src/com/bekvon/bukkit/residence/containers/cmd.java +++ b/src/com/bekvon/bukkit/residence/containers/cmd.java @@ -1,15 +1,15 @@ package com.bekvon.bukkit.residence.containers; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; public interface cmd { - public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender); +// public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender); + + public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin); - public void getLocale(ConfigReader c, String path); + public void getLocale(); } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index be9a75c07..117fc70f9 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -27,6 +27,9 @@ public enum lm { Invalid_Help("&cInvalid Help Page..."), Invalid_NameCharacters("&cName contained unallowed characters..."), + Invalid_FromConsole("&cYou can only use this in the console!"), + Invalid_Ingame("&cYou can only use this in game!"), + Area_Exists("&cArea name already exists."), Area_Create("&eResidence Area created, ID &6%1"), Area_DiffWorld("&cArea is in a different world from residence."), diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 99b03b312..d30a8b251 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1082,6 +1082,12 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { found = true; loc.add(0.5, 0.1, 0.5); + + // Incase empty space is on oposite side + if (plugin.getResidenceManager().getByLoc(loc) == this) { + loc.add(-1, 0, -1); + } + break; } diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaidListener.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaidListener.java index d3451d56f..42ae73208 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaidListener.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaidListener.java @@ -9,13 +9,16 @@ public class ResidenceRaidListener implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void ResidenceSiegePreStartEvent(com.bekvon.bukkit.residence.event.ResidenceRaidPreStartEvent event) { - + for (Player one : event.getRes().getPlayersInResidence()) { + if (!event.getRes().getRaid().isDefender(one)) + event.getRes().kickFromResidence(one); + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void ResidenceSiegeStartEvent(com.bekvon.bukkit.residence.event.ResidenceRaidStartEvent event) { for (Player one : event.getRes().getPlayersInResidence()) { - if (!event.getRes().getRaid().isDefender(one)) + if (!event.getRes().getRaid().isDefender(one)) event.getRes().kickFromResidence(one); } // for (UUID one : event.getRes().getRaid().getAttackers()) { From cd8d2f2daf3e936cc57651fd95b89f8abfabf95f Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 23 Jan 2020 16:05:06 +0200 Subject: [PATCH 0682/1142] Lets show nearby residence names with /res info --- .../bukkit/residence/commands/info.java | 38 ++++++++++++++++++- .../bukkit/residence/containers/lm.java | 1 + 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 5d56bc4e3..6cb708399 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -1,7 +1,10 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -18,15 +21,46 @@ public class info implements cmd { @Override @CommandAnnotation(simple = true, priority = 600) public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - Debug.D("check"); + if (args.length == 0 && sender instanceof Player) { Player player = (Player) sender; ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + + Set nearby = new HashSet(); + + Location loc = player.getLocation(); + for (int x = -3; x <= 3; x = x + 3) { + for (int z = -3; z <= 3; z = z + 3) { + for (int y = -3; y <= 3; y = y + 3) { + if (x == 0 && z == 0 && y == 0) + continue; + Location l = loc.clone().add(x, y, z); + ClaimedResidence nr = plugin.getResidenceManager().getByLoc(l); + if (nr != null) + nearby.add(nr); + } + } + } + nearby.remove(res); + if (res != null) { plugin.getResidenceManager().printAreaInfo(res.getName(), sender, resadmin); } else { - plugin.msg(sender, lm.Invalid_Residence); + if (nearby.isEmpty()) + plugin.msg(sender, lm.Invalid_Residence); } + + String list = ""; + if (!nearby.isEmpty()) { + for (ClaimedResidence one : nearby) { + if (!list.isEmpty()) + list += ", "; + list += one.getName(); + } + + plugin.msg(sender, lm.Residence_Near, list); + } + return true; } else if (args.length == 1) { plugin.getResidenceManager().printAreaInfo(args[0], sender, resadmin); diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 117fc70f9..191b9e7e2 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -221,6 +221,7 @@ public enum lm { Residence_Recieve("&eYou have recieved residence &6%1 &efrom player &6%2"), Residence_ResList(" &a%1. &e%2 &e- &6%3 %4&6%5"), Residence_List(" &e%2 &e- &6%3"), + Residence_Near("&eNearby residences: &7%1"), Residence_TeleportNear("&eTeleported to near residence."), Residence_SetTeleportLocation("&eTeleport Location Set..."), Residence_PermissionsApply("&ePermissions applied to residence."), From 2eee82befcce32f4a144459c434e418253a219b3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 24 Jan 2020 15:42:35 +0200 Subject: [PATCH 0683/1142] New command handling --- .../bukkit/residence/LocaleManager.java | 9 +- .../residence/ResidenceCommandListener.java | 6 +- .../bukkit/residence/commands/area.java | 157 ++++++++++-------- .../bukkit/residence/commands/attack.java | 46 ++--- .../bukkit/residence/commands/auto.java | 9 +- .../bukkit/residence/commands/bank.java | 34 ++-- .../bukkit/residence/commands/check.java | 14 +- .../bukkit/residence/commands/clearflags.java | 28 ++-- .../bukkit/residence/commands/command.java | 51 +++--- .../bukkit/residence/commands/compass.java | 6 +- .../bukkit/residence/commands/confirm.java | 2 +- .../bukkit/residence/commands/contract.java | 2 +- .../bukkit/residence/commands/create.java | 2 +- .../bukkit/residence/commands/current.java | 2 +- .../bukkit/residence/commands/defend.java | 2 +- .../bukkit/residence/commands/expand.java | 2 +- .../bukkit/residence/commands/flags.java | 2 +- .../bukkit/residence/commands/give.java | 2 +- .../bukkit/residence/commands/gset.java | 2 +- .../bukkit/residence/commands/info.java | 3 +- .../bukkit/residence/commands/kick.java | 2 +- .../bukkit/residence/commands/lease.java | 2 +- .../bukkit/residence/commands/leaveraid.java | 2 +- .../bukkit/residence/commands/limits.java | 2 +- .../bukkit/residence/commands/list.java | 2 +- .../bukkit/residence/commands/listall.java | 2 +- .../residence/commands/listallhidden.java | 2 +- .../bukkit/residence/commands/listhidden.java | 2 +- .../bukkit/residence/commands/lists.java | 2 +- .../bukkit/residence/commands/lset.java | 2 +- .../bukkit/residence/commands/market.java | 2 +- .../bukkit/residence/commands/material.java | 2 +- .../bukkit/residence/commands/message.java | 2 +- .../bukkit/residence/commands/mirror.java | 2 +- .../bukkit/residence/commands/padd.java | 2 +- .../bukkit/residence/commands/pdel.java | 2 +- .../bukkit/residence/commands/pset.java | 2 +- .../bukkit/residence/commands/raid.java | 10 +- .../bukkit/residence/commands/raidstatus.java | 11 +- .../bekvon/bukkit/residence/commands/rc.java | 2 +- .../bukkit/residence/commands/reload.java | 2 +- .../bukkit/residence/commands/remove.java | 2 +- .../bukkit/residence/commands/removeall.java | 2 +- .../residence/commands/removeworld.java | 2 +- .../bukkit/residence/commands/rename.java | 2 +- .../bukkit/residence/commands/renamearea.java | 2 +- .../bukkit/residence/commands/resadmin.java | 2 +- .../bukkit/residence/commands/reset.java | 2 +- .../bekvon/bukkit/residence/commands/rt.java | 2 +- .../bukkit/residence/commands/select.java | 2 +- .../bukkit/residence/commands/server.java | 2 +- .../bekvon/bukkit/residence/commands/set.java | 2 +- .../bukkit/residence/commands/setall.java | 2 +- .../bukkit/residence/commands/setallfor.java | 2 +- .../bukkit/residence/commands/setmain.java | 2 +- .../bukkit/residence/commands/setowner.java | 2 +- .../bukkit/residence/commands/shop.java | 2 +- .../bukkit/residence/commands/show.java | 2 +- .../residence/commands/signconvert.java | 2 +- .../bukkit/residence/commands/signupdate.java | 2 +- .../bukkit/residence/commands/sublist.java | 2 +- .../bukkit/residence/commands/subzone.java | 2 +- .../bukkit/residence/commands/tool.java | 2 +- .../bekvon/bukkit/residence/commands/tp.java | 2 +- .../bukkit/residence/commands/tpconfirm.java | 2 +- .../bukkit/residence/commands/tpset.java | 2 +- .../bukkit/residence/commands/unstuck.java | 2 +- .../bukkit/residence/commands/version.java | 2 +- .../bukkit/residence/containers/cmd.java | 4 +- 69 files changed, 255 insertions(+), 243 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 2d6a9f418..60600c512 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -38,9 +38,12 @@ public class LocaleManager { public LocaleManager(Residence plugin) { this.plugin = plugin; } - - public static void addTabComplete(Object cl, String subCmd, String... tabs) { - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(cl.getClass().getSimpleName(), subCmd), Arrays.asList(tabs)); + + public static void addTabComplete(Object cl, String subCmd, String... tabs) { + if (subCmd == null || subCmd.isEmpty()) + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(cl.getClass().getSimpleName()), Arrays.asList(tabs)); + else + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(cl.getClass().getSimpleName(), subCmd), Arrays.asList(tabs)); } private static YamlConfiguration loadConfiguration(BufferedReader in, String language) { diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index e6b57863c..ddc413ceb 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -263,8 +263,8 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } } - boolean respond = cmdClass.perform(Residence.getInstance(), sender, targ, resadmin); - if (!respond) { + Boolean respond = cmdClass.perform(Residence.getInstance(), sender, targ, resadmin); + if (respond != null && !respond) { String[] tempArray = new String[args.length + 1]; for (int i = 0; i < args.length; i++) { tempArray[i] = args[i]; @@ -274,7 +274,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return commandHelp(args, resadmin, sender, command); } - return true; + return respond == null || !respond ? false : true; } return this.onCommand(sender, command, label, args); } diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index 7df99b230..b12a0a9c7 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -16,10 +16,8 @@ public class area implements cmd { @Override - @CommandAnnotation(info = "Manage physical areas for a residence.",priority = 3300) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; + @CommandAnnotation(info = "Manage physical areas for a residence.", priority = 3300, regVar = { 2, 3 }, consoleVar = { 666 }) + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { Player player = (Player) sender; int page = 1; @@ -30,69 +28,98 @@ public boolean perform(Residence plugin, CommandSender sender, String[] args, bo } catch (Exception ex) { } - if (args.length == 3) { - if (args[0].equals("remove")) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); - if (res != null) { - res.removeArea(player, args[2], resadmin); - } else { - plugin.msg(player, lm.Invalid_Residence); - } - return true; - } else if (args[0].equals("add")) { - if (plugin.getWorldEdit() != null) { - if (plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { - plugin.getSelectionManager().worldEdit(player); - } - } - if (plugin.getSelectionManager().hasPlacedBoth(player)) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); - if (res != null) { - if (res.addArea(player, plugin.getSelectionManager().getSelectionCuboid(player), args[2], resadmin)) - plugin.msg(player, lm.Area_Create, args[2]); - } else { - plugin.msg(player, lm.Invalid_Residence); - } - } else { - plugin.msg(player, lm.Select_Points); - } - return true; - } else if (args[0].equals("replace")) { - if (plugin.getWorldEdit() != null) { - if (plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { - plugin.getSelectionManager().worldEdit(player); - } - } - if (plugin.getSelectionManager().hasPlacedBoth(player)) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); - if (res != null) { - res.replaceArea(player, plugin.getSelectionManager().getSelectionCuboid(player), args[2], resadmin); - } else { - plugin.msg(player, lm.Invalid_Residence); - } - } else { - plugin.msg(player, lm.Select_Points); - } - return true; - } - } - if ((args.length == 2 || args.length == 3) && args[0].equals("list")) { + switch (args[0].toLowerCase()) { + case "remove": + if (args.length != 3) + return false; + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); - if (res != null) { - res.printAreaList(player, page); - } else { + + if (res == null) { plugin.msg(player, lm.Invalid_Residence); + return null; } + + res.removeArea(player, args[2], resadmin); return true; - } else if ((args.length == 2 || args.length == 3) && args[0].equals("listall")) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); - if (res != null) { - res.printAdvancedAreaList(player, page); - } else { + + case "add": + + if (args.length != 3) + return false; + + if (plugin.getWorldEdit() != null && plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { + plugin.getSelectionManager().worldEdit(player); + } + + if (!plugin.getSelectionManager().hasPlacedBoth(player)) { + plugin.msg(player, lm.Select_Points); + return null; + } + + res = plugin.getResidenceManager().getByName(args[1]); + + if (res == null) { plugin.msg(player, lm.Invalid_Residence); + return null; } + + if (res.addArea(player, plugin.getSelectionManager().getSelectionCuboid(player), args[2], resadmin)) + plugin.msg(player, lm.Area_Create, args[2]); + + return true; + + case "replace": + if (args.length != 3) + return false; + + if (plugin.getWorldEdit() != null && plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { + plugin.getSelectionManager().worldEdit(player); + } + + if (!plugin.getSelectionManager().hasPlacedBoth(player)) { + plugin.msg(player, lm.Select_Points); + return null; + } + + res = plugin.getResidenceManager().getByName(args[1]); + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return null; + } + + res.replaceArea(player, plugin.getSelectionManager().getSelectionCuboid(player), args[2], resadmin); + return true; + + case "list": + if (args.length != 2) + return false; + + res = plugin.getResidenceManager().getByName(args[1]); + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return null; + } + + res.printAreaList(player, page); + return true; + case "listall": + if (args.length != 2) + return false; + + res = plugin.getResidenceManager().getByName(args[1]); + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return null; + } + + res.printAdvancedAreaList(player, page); return true; } + return false; } @@ -102,27 +129,25 @@ public void getLocale() { // Sub commands c.setP(c.getPath() + "SubCommands."); c.get("list.Description", "List physical areas in a residence"); - c.get("list.Info", Arrays.asList("&eUsage: &6/res area list [residence] ")); + c.get("list.Info", Arrays.asList("&eUsage: &6/res area list [residence] ")); LocaleManager.addTabComplete(this, "list", "[residence]"); c.get("listall.Description", "List coordinates and other Info for areas"); - c.get("listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] ")); - + c.get("listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] ")); LocaleManager.addTabComplete(this, "listall", "[residence]"); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "listall"), Arrays.asList("[residence]")); c.get("add.Description", "Add physical areas to a residence"); c.get("add.Info", Arrays.asList("&eUsage: &6/res area add [residence] [areaID]", "You must first select two points first.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "add"), Arrays.asList("[residence]")); + LocaleManager.addTabComplete(this, "add", "[residence]"); c.get("remove.Description", "Remove physical areas from a residence"); c.get("remove.Info", Arrays.asList("&eUsage: &6/res area remove [residence] [areaID]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "remove"), Arrays.asList("[residence]")); + LocaleManager.addTabComplete(this, "remove", "[residence]"); c.get("replace.Description", "Replace physical areas in a residence"); c.get("replace.Info", Arrays.asList("&eUsage: &6/res area replace [residence] [areaID]", "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "replace"), Arrays.asList("[residence]")); + LocaleManager.addTabComplete(this, "replace", "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/attack.java b/src/com/bekvon/bukkit/residence/commands/attack.java index 2631a3344..8cdc31cb0 100644 --- a/src/com/bekvon/bukkit/residence/commands/attack.java +++ b/src/com/bekvon/bukkit/residence/commands/attack.java @@ -1,12 +1,10 @@ package com.bekvon.bukkit.residence.commands; -import java.util.Arrays; - import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.ConfigManager; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -18,19 +16,14 @@ public class attack implements cmd { @Override - @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; - - final Player player = (Player) sender; + @CommandAnnotation(info = "Start raid on residence", usage = "&eUsage: &6/res attack [resName]", simple = true, priority = 3100, regVar = { 0, 1 }, consoleVar = { 666 }) + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (args.length != 0 && args.length != 1) - return false; + Player player = (Player) sender; if (!ConfigManager.RaidEnabled) { plugin.msg(player, lm.Raid_NotEnabled); - return true; + return null; } ClaimedResidence res = null; @@ -39,40 +32,38 @@ public boolean perform(Residence plugin, CommandSender sender, String[] args, bo else res = plugin.getResidenceManager().getByLoc(player.getLocation()); - ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); - if (resPlayer.getJoinedRaid() != null) { - plugin.msg(player, lm.Raid_defend_alreadyInAnother, resPlayer.getJoinedRaid().getRes().getName()); - return true; - } - if (res == null) { plugin.msg(player, lm.Invalid_Residence); - return true; + return null; } if (res.isOwner(player)) { plugin.msg(player, lm.Raid_attack_noSelf); - return true; + return null; + } + + ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + if (resPlayer.getJoinedRaid() != null) { + plugin.msg(player, lm.Raid_defend_alreadyInAnother, resPlayer.getJoinedRaid().getRes().getName()); + return null; } final ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(res.getOwnerUUID()); if (!rPlayer.isOnline()) { plugin.msg(player, lm.Raid_attack_isOffline); - return true; + return null; } if (res.isUnderRaidCooldown() && !res.isInPreRaid() && !res.isUnderRaid()) { plugin.msg(player, lm.Raid_attack_cooldown, Utils.to24hourShort(res.getRaid().getCooldownEnd() - System.currentTimeMillis() + 1000)); - return true; + return null; } if (res.isUnderRaid() || res.isInPreRaid()) { if (!res.getRaid().isAttacker(player)) res.getRaid().addAttacker(player); - plugin.msg(player, lm.Raid_attack_Joined, res.getName()); - - return true; + return null; } boolean started = res.preStartRaid(player); @@ -89,10 +80,7 @@ public boolean perform(Residence plugin, CommandSender sender, String[] args, bo @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Start raid on residence"); - c.get("Info", Arrays.asList("&eUsage: &6/res attack [resName]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); + LocaleManager.addTabComplete(this, null, "[cresidence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 7a5660794..e838ecd79 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -20,15 +20,10 @@ public class auto implements cmd { @Override - @CommandAnnotation(simple = true, priority = 150) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; + @CommandAnnotation(simple = true, priority = 150, regVar = { 0, 1, 2 }, consoleVar = { 666 }) + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { Player player = (Player) sender; - if (args.length != 1 && args.length != 0 && args.length != 2) { - return false; - } String resName = null; diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 577e8a7ba..1e256b1ee 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -15,26 +15,23 @@ public class bank implements cmd { @Override - @CommandAnnotation(simple = true, priority = 3400) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - - if (args.length != 2 && args.length != 3) { - return false; - } + @CommandAnnotation(simple = true, priority = 3400, regVar = { 2, 3 }, consoleVar = { 2, 3 }) + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + ClaimedResidence res = null; - + if (args.length == 3) { res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { plugin.msg(sender, lm.Invalid_Residence); - return true; + return null; } - } else if ((sender instanceof Player)) { + } else if (sender instanceof Player) { res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); } if (res == null) { plugin.msg(sender, lm.Residence_NotIn); - return true; + return null; } double amount = 0D; try { @@ -44,16 +41,19 @@ public boolean perform(Residence plugin, CommandSender sender, String[] args, bo amount = Double.parseDouble(args[2]); } catch (Exception ex) { plugin.msg(sender, lm.Invalid_Amount); - return true; + return null; } - if (args[0].equals("deposit")) + + switch(args[0].toLowerCase()) { + case "deposit": res.getBank().deposit(sender, amount, resadmin); - else if (args[0].equals("withdraw")) + return true; + case "withdraw": res.getBank().withdraw(sender, amount, resadmin); - else - return false; - - return true; + return true; + } + + return false; } @Override diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index 6149c65e9..990b11ee1 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -16,30 +16,26 @@ public class check implements cmd { @Override - @CommandAnnotation(simple = true, priority = 3500) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; + @CommandAnnotation(simple = true, priority = 3500, regVar = { 2, 3 }, consoleVar = { 666 }) + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + Player player = (Player) sender; String pname = player.getName(); - if (args.length != 2 && args.length != 3) - return false; - if (args.length == 3) pname = args[2]; ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); if (res == null) { plugin.msg(player, lm.Invalid_Residence); - return true; + return null; } Flags flag = Flags.getFlag(args[1]); if (flag == null) { plugin.msg(player, lm.Invalid_Flag); - return true; + return null; } if (!res.getPermissions().hasApplicableFlag(pname, args[1])) { diff --git a/src/com/bekvon/bukkit/residence/commands/clearflags.java b/src/com/bekvon/bukkit/residence/commands/clearflags.java index 824623357..8ecec715d 100644 --- a/src/com/bekvon/bukkit/residence/commands/clearflags.java +++ b/src/com/bekvon/bukkit/residence/commands/clearflags.java @@ -15,28 +15,28 @@ public class clearflags implements cmd { @Override - @CommandAnnotation(simple = false, priority = 3600) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; - + @CommandAnnotation(simple = false, priority = 3600, regVar = { 2, 3 }, consoleVar = { 666 }) + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { Player player = (Player) sender; if (!resadmin) { plugin.msg(player, lm.General_NoPermission); - return true; + return null; } + ClaimedResidence area = plugin.getResidenceManager().getByName(args[0]); - if (area != null) { - if (area.isRaidInitialized()) { - plugin.msg(sender, lm.Raid_cantDo); - return true; - } - area.getPermissions().clearFlags(); - plugin.msg(player, lm.Flag_Cleared); - } else { + if (area == null) { plugin.msg(player, lm.Invalid_Residence); + return null; } + + if (area.isRaidInitialized()) { + plugin.msg(sender, lm.Raid_cantDo); + return null; + } + area.getPermissions().clearFlags(); + plugin.msg(player, lm.Flag_Cleared); + return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index cf43cc50c..20b2c14fb 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -15,51 +15,46 @@ public class command implements cmd { @Override - @CommandAnnotation(simple = true, priority = 3000) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + @CommandAnnotation(simple = true, priority = 3000, regVar = { -100 }, consoleVar = { -100, -1 }) + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + String cmd = args[args.length - 1]; + if (!cmd.equalsIgnoreCase("list")) + args = Arrays.copyOfRange(args, 0, args.length - 1); ClaimedResidence res = null; - String action = null; - String cmd = null; - if (args.length == 1 && sender instanceof Player) { - Player player = (Player) sender; - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - action = args[0]; - } else if (args.length == 2 && sender instanceof Player) { - Player player = (Player) sender; - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - action = args[0]; - cmd = args[1]; - } else if (args.length == 3) { + String action = args.length > 0 ? args[args.length - 1].toLowerCase() : ""; + if (args.length > 0) + args = Arrays.copyOfRange(args, 0, args.length - 1); + if (args.length > 0) res = plugin.getResidenceManager().getByName(args[0]); - action = args[1]; - cmd = args[2]; - } else if (args.length == 2 && !(sender instanceof Player)) { - res = plugin.getResidenceManager().getByName(args[0]); - action = args[1]; - } + + if (res == null && sender instanceof Player) + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); if (res == null) { plugin.msg(sender, lm.Invalid_Residence); - return true; + return null; } if (!res.isOwner(sender) && !resadmin) { plugin.msg(sender, lm.Residence_NotOwner); - return true; + return null; } - if (action != null && action.equalsIgnoreCase("allow")) { + switch (action) { + case "allow": if (res.addCmdWhiteList(cmd)) { plugin.msg(sender, lm.command_addedAllow, res.getName()); } else plugin.msg(sender, lm.command_removedAllow, res.getName()); - } else if (action != null && action.equalsIgnoreCase("block")) { + return true; + case "block": if (res.addCmdBlackList(cmd)) { plugin.msg(sender, lm.command_addedBlock, res.getName()); } else plugin.msg(sender, lm.command_removedBlock, res.getName()); - } else if (action != null && action.equalsIgnoreCase("list")) { + return true; + case "list": StringBuilder sb = new StringBuilder(); for (int i = 0; i < res.getCmdBlackList().size(); i++) { sb.append("/" + res.getCmdBlackList().get(i).replace("_", " ")); @@ -75,10 +70,10 @@ public boolean perform(Residence plugin, CommandSender sender, String[] args, bo sb.append(", "); } plugin.msg(sender, lm.command_Allowed, sb.toString()); - } else - return false; + return true; + } - return true; + return false; } diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index 1f6045ee2..8ce9b4181 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -19,7 +19,7 @@ public class compass implements cmd { @Override @CommandAnnotation(simple = true, priority = 3200, consoleVar = { 666 }) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { Player player = (Player) sender; @@ -30,13 +30,13 @@ public boolean perform(Residence plugin, CommandSender sender, String[] args, bo } if (!ResPerm.command_$1.hasPermission(sender, this.getClass().getSimpleName())) - return true; + return null; ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); if (res == null || !res.getWorld().equalsIgnoreCase(player.getWorld().getName())) { plugin.msg(player, lm.Invalid_Residence); - return true; + return null; } CuboidArea area = res.getMainArea(); diff --git a/src/com/bekvon/bukkit/residence/commands/confirm.java b/src/com/bekvon/bukkit/residence/commands/confirm.java index 26f358f7a..aaa441f79 100644 --- a/src/com/bekvon/bukkit/residence/commands/confirm.java +++ b/src/com/bekvon/bukkit/residence/commands/confirm.java @@ -12,7 +12,7 @@ public class confirm implements cmd { @Override @CommandAnnotation(info = "Confirms removal of a residence.", usage = { "&eUsage: &6/res confirm", "Confirms removal of a residence." }, regVar = { 0 }, consoleVar = { 0 }) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { String area = plugin.deleteConfirm.remove(sender.getName()); if (area == null) { plugin.msg(sender, lm.Invalid_Residence); diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 2371cc47a..75cd27013 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -18,7 +18,7 @@ public class contract implements cmd { @Override @CommandAnnotation(simple = true, priority = 1900) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index d933b8d23..fe8ff575a 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -15,7 +15,7 @@ public class create implements cmd { @Override @CommandAnnotation(simple = true, priority = 100) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/current.java b/src/com/bekvon/bukkit/residence/commands/current.java index 49665fef7..85e2ebfec 100644 --- a/src/com/bekvon/bukkit/residence/commands/current.java +++ b/src/com/bekvon/bukkit/residence/commands/current.java @@ -16,7 +16,7 @@ public class current implements cmd { @Override @CommandAnnotation(simple = true, priority = 3100, regVar = { 0 }, consoleVar = { 666 }) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { Player player = (Player) sender; diff --git a/src/com/bekvon/bukkit/residence/commands/defend.java b/src/com/bekvon/bukkit/residence/commands/defend.java index ea324b31d..64551d475 100644 --- a/src/com/bekvon/bukkit/residence/commands/defend.java +++ b/src/com/bekvon/bukkit/residence/commands/defend.java @@ -25,7 +25,7 @@ public class defend implements cmd { @Override @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index bc1962a31..baa27a318 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -18,7 +18,7 @@ public class expand implements cmd { @Override @CommandAnnotation(simple = true, priority = 2000) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index 9414ce64c..7ef606c15 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -17,7 +17,7 @@ public class flags implements cmd { @Override @CommandAnnotation(simple = true, priority = 1200) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { int page = 1; try { if (args.length > 0) { diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index 8425199a8..50ffb258f 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -17,7 +17,7 @@ public class give implements cmd { @Override @CommandAnnotation(simple = true, priority = 3800) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/gset.java b/src/com/bekvon/bukkit/residence/commands/gset.java index 72f7a2ecc..2a7037a10 100644 --- a/src/com/bekvon/bukkit/residence/commands/gset.java +++ b/src/com/bekvon/bukkit/residence/commands/gset.java @@ -16,7 +16,7 @@ public class gset implements cmd { @Override @CommandAnnotation(simple = true, priority = 4500) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 6cb708399..e84ddb742 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -14,13 +14,12 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; public class info implements cmd { @Override @CommandAnnotation(simple = true, priority = 600) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (args.length == 0 && sender instanceof Player) { Player player = (Player) sender; diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index d8f678444..7346a3cec 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -21,7 +21,7 @@ public class kick implements cmd { @Override @CommandAnnotation(simple = true, priority = 2200) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index 5de188817..d8a76509e 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -19,7 +19,7 @@ public class lease implements cmd { @Override @CommandAnnotation(simple = true, priority = 3900) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/leaveraid.java b/src/com/bekvon/bukkit/residence/commands/leaveraid.java index 169730003..1b52b0614 100644 --- a/src/com/bekvon/bukkit/residence/commands/leaveraid.java +++ b/src/com/bekvon/bukkit/residence/commands/leaveraid.java @@ -18,7 +18,7 @@ public class leaveraid implements cmd { @Override @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index cbeb0c036..630a65dcc 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -16,7 +16,7 @@ public class limits implements cmd { @Override @CommandAnnotation(simple = true, priority = 900) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player) && args.length < 1) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 67afa0683..369a8ca96 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -16,7 +16,7 @@ public class list implements cmd { @Override @CommandAnnotation(simple = true, priority = 300) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { int page = 1; World world = null; String target = null; diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index 7d404e7c2..24f0d2dad 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -16,7 +16,7 @@ public class listall implements cmd { @Override @CommandAnnotation(simple = true, priority = 4200) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { int page = 1; World world = null; diff --git a/src/com/bekvon/bukkit/residence/commands/listallhidden.java b/src/com/bekvon/bukkit/residence/commands/listallhidden.java index 73a143355..1eccf5916 100644 --- a/src/com/bekvon/bukkit/residence/commands/listallhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listallhidden.java @@ -14,7 +14,7 @@ public class listallhidden implements cmd { @Override @CommandAnnotation(simple = false, priority = 4700) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { int page = 1; try { if (args.length > 0) { diff --git a/src/com/bekvon/bukkit/residence/commands/listhidden.java b/src/com/bekvon/bukkit/residence/commands/listhidden.java index ce6d29683..eaf60243b 100644 --- a/src/com/bekvon/bukkit/residence/commands/listhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listhidden.java @@ -14,7 +14,7 @@ public class listhidden implements cmd { @Override @CommandAnnotation(simple = false, priority = 4800) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { int page = 1; try { if (args.length > 0) { diff --git a/src/com/bekvon/bukkit/residence/commands/lists.java b/src/com/bekvon/bukkit/residence/commands/lists.java index c8196ebed..20f9f8fad 100644 --- a/src/com/bekvon/bukkit/residence/commands/lists.java +++ b/src/com/bekvon/bukkit/residence/commands/lists.java @@ -16,7 +16,7 @@ public class lists implements cmd { @Override @CommandAnnotation(simple = true, priority = 4900) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java index 2fea7c5f4..0ffdf5df7 100644 --- a/src/com/bekvon/bukkit/residence/commands/lset.java +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -17,7 +17,7 @@ public class lset implements cmd { @Override @CommandAnnotation(simple = true, priority = 5000) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index d719088ab..a4646bb8c 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -25,7 +25,7 @@ public class market implements cmd { @Override @CommandAnnotation(simple = true, priority = 2600) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { this.plugin = plugin; if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index 8ff53ca4f..ec665425f 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -16,7 +16,7 @@ public class material implements cmd { @Override @CommandAnnotation(simple = true, priority = 4300) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 3d8babdae..40f0c8cb5 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -17,7 +17,7 @@ public class message implements cmd { @Override @CommandAnnotation(simple = true, priority = 1000) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { ClaimedResidence res = null; String message = null; Boolean enter = null; diff --git a/src/com/bekvon/bukkit/residence/commands/mirror.java b/src/com/bekvon/bukkit/residence/commands/mirror.java index e636298c0..af0460661 100644 --- a/src/com/bekvon/bukkit/residence/commands/mirror.java +++ b/src/com/bekvon/bukkit/residence/commands/mirror.java @@ -14,7 +14,7 @@ public class mirror implements cmd { @Override @CommandAnnotation(simple = true, priority = 3700) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index 64f05b6c4..7fc8fc671 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -14,7 +14,7 @@ public class padd implements cmd { @Override @CommandAnnotation(simple = true, priority = 400) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index f138c04bf..0bac8a0e3 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -15,7 +15,7 @@ public class pdel implements cmd { @Override @CommandAnnotation(simple = true, priority = 500) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index be45e333f..dc2058811 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -19,7 +19,7 @@ public class pset implements cmd { @Override @CommandAnnotation(simple = true, priority = 800) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player) && args.length != 5 && args.length == 4 && !args[3].equalsIgnoreCase("removeall")) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/raid.java b/src/com/bekvon/bukkit/residence/commands/raid.java index 2ab1996c5..69ca76efb 100644 --- a/src/com/bekvon/bukkit/residence/commands/raid.java +++ b/src/com/bekvon/bukkit/residence/commands/raid.java @@ -27,8 +27,8 @@ public static States getState(String name) { } @Override - @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + @CommandAnnotation(simple = true, priority = 3100, regVar = { 1, 2 }, consoleVar = { 1, 2 }) + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -38,7 +38,7 @@ public boolean perform(Residence plugin, CommandSender sender, String[] args, bo return false; if (!ConfigManager.RaidEnabled) { - plugin.msg(player, lm.Raid_NotEnabled); + plugin.msg(sender, lm.Raid_NotEnabled); return true; } @@ -56,6 +56,9 @@ public boolean perform(Residence plugin, CommandSender sender, String[] args, bo case immunity: break; case kick: + + + break; case start: break; @@ -67,6 +70,7 @@ public boolean perform(Residence plugin, CommandSender sender, String[] args, bo // raid start [resname/playerName/currentres] // raid stop [resname/playerName/currentres] + // raid kick [resname/playerName] // raid immunity [add/take/set/clear] [resname/playerName/currentres] return false; diff --git a/src/com/bekvon/bukkit/residence/commands/raidstatus.java b/src/com/bekvon/bukkit/residence/commands/raidstatus.java index 699dfa479..c0f68cd92 100644 --- a/src/com/bekvon/bukkit/residence/commands/raidstatus.java +++ b/src/com/bekvon/bukkit/residence/commands/raidstatus.java @@ -26,7 +26,7 @@ public class raidstatus implements cmd { @Override @CommandAnnotation(simple = true, priority = 3100) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -40,7 +40,14 @@ public boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); + ClaimedResidence res = null; + if (args.length > 0) + res = plugin.getResidenceManager().getByName(args[0]); + + if (res == null) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + } + if (res == null) { OfflinePlayer offp = plugin.getOfflinePlayer(args[0]); if (offp != null) { diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index f5f7830d6..b6a38e139 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -21,7 +21,7 @@ public class rc implements cmd { @Override @CommandAnnotation(simple = true, priority = 1100) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return true; Player player = (Player) sender; diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index ceb9409ef..60105eb0b 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -18,7 +18,7 @@ public class reload implements cmd { @Override @CommandAnnotation(simple = false, priority = 5800) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!resadmin && !sender.isOp()) { plugin.msg(sender, lm.General_NoPermission); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index e2c74738d..16dc848ba 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -20,7 +20,7 @@ public class remove implements cmd { @Override @CommandAnnotation(simple = true, priority = 2300) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { ClaimedResidence res = null; String senderName = sender.getName(); diff --git a/src/com/bekvon/bukkit/residence/commands/removeall.java b/src/com/bekvon/bukkit/residence/commands/removeall.java index acdd6a1fc..9131fa501 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeall.java +++ b/src/com/bekvon/bukkit/residence/commands/removeall.java @@ -14,7 +14,7 @@ public class removeall implements cmd { @Override @CommandAnnotation(simple = false, priority = 5100) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (args.length != 1 && args.length != 0) { return false; } diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index d6b6215c9..ce6c4e1ea 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -16,7 +16,7 @@ public class removeworld implements cmd { @Override @CommandAnnotation(simple = false, priority = 5200) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (args.length != 1) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/rename.java b/src/com/bekvon/bukkit/residence/commands/rename.java index 361d5040c..4663684c5 100644 --- a/src/com/bekvon/bukkit/residence/commands/rename.java +++ b/src/com/bekvon/bukkit/residence/commands/rename.java @@ -14,7 +14,7 @@ public class rename implements cmd { @Override @CommandAnnotation(simple = true, priority = 2700) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/renamearea.java b/src/com/bekvon/bukkit/residence/commands/renamearea.java index 7424034c6..d49062c4d 100644 --- a/src/com/bekvon/bukkit/residence/commands/renamearea.java +++ b/src/com/bekvon/bukkit/residence/commands/renamearea.java @@ -16,7 +16,7 @@ public class renamearea implements cmd { @Override @CommandAnnotation(simple = true, priority = 2800) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/resadmin.java b/src/com/bekvon/bukkit/residence/commands/resadmin.java index 142589471..649129b57 100644 --- a/src/com/bekvon/bukkit/residence/commands/resadmin.java +++ b/src/com/bekvon/bukkit/residence/commands/resadmin.java @@ -15,7 +15,7 @@ public class resadmin implements cmd { @Override @CommandAnnotation(simple = false, priority = 5300) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; if (args.length != 1) diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index a5d20db02..dba02a0c8 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -18,7 +18,7 @@ public class reset implements cmd { @Override @CommandAnnotation(simple = true, priority = 4400) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (args.length != 1 && args.length != 0) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 62fa69403..9c97b5818 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -20,7 +20,7 @@ public class rt implements cmd { @Override @CommandAnnotation(simple = true, priority = 2500) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (args.length != 0 && args.length != 1 && args.length != 2) { return false; } diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 2264347a9..c08794921 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -24,7 +24,7 @@ public class select implements cmd { @Override @CommandAnnotation(simple = true, priority = 1300) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java index 0ef14889d..4e7938c4b 100644 --- a/src/com/bekvon/bukkit/residence/commands/server.java +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -16,7 +16,7 @@ public class server implements cmd { @Override @CommandAnnotation(simple = false, priority = 5400) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index c10681c28..cc9c43685 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -19,7 +19,7 @@ public class set implements cmd { @Override @CommandAnnotation(simple = true, priority = 700) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player) && args.length != 3) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/setall.java b/src/com/bekvon/bukkit/residence/commands/setall.java index 7e5742a7f..e6b06f4f8 100644 --- a/src/com/bekvon/bukkit/residence/commands/setall.java +++ b/src/com/bekvon/bukkit/residence/commands/setall.java @@ -20,7 +20,7 @@ public class setall implements cmd { @Override @CommandAnnotation(simple = true, priority = 700) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (args.length != 2) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/setallfor.java b/src/com/bekvon/bukkit/residence/commands/setallfor.java index b2cbfeb1b..60cfcf6e4 100644 --- a/src/com/bekvon/bukkit/residence/commands/setallfor.java +++ b/src/com/bekvon/bukkit/residence/commands/setallfor.java @@ -19,7 +19,7 @@ public class setallfor implements cmd { @Override @CommandAnnotation(simple = true, priority = 700) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (args.length != 3) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/setmain.java b/src/com/bekvon/bukkit/residence/commands/setmain.java index a889b2c0c..34e65d9a4 100644 --- a/src/com/bekvon/bukkit/residence/commands/setmain.java +++ b/src/com/bekvon/bukkit/residence/commands/setmain.java @@ -17,7 +17,7 @@ public class setmain implements cmd { @Override @CommandAnnotation(simple = true, priority = 2900) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index 2db243ef4..ec2ec9980 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -15,7 +15,7 @@ public class setowner implements cmd { @Override @CommandAnnotation(simple = false, priority = 5500) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (args.length < 2) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 9476c7ede..4b1f817e8 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -31,7 +31,7 @@ public class shop implements cmd { @Override @CommandAnnotation(simple = true, priority = 1700) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/show.java b/src/com/bekvon/bukkit/residence/commands/show.java index b6c61e8f1..599e4ba36 100644 --- a/src/com/bekvon/bukkit/residence/commands/show.java +++ b/src/com/bekvon/bukkit/residence/commands/show.java @@ -17,7 +17,7 @@ public class show implements cmd { @Override @CommandAnnotation(simple = true, priority = 3300) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/signconvert.java b/src/com/bekvon/bukkit/residence/commands/signconvert.java index 8e2769f55..99700e85a 100644 --- a/src/com/bekvon/bukkit/residence/commands/signconvert.java +++ b/src/com/bekvon/bukkit/residence/commands/signconvert.java @@ -15,7 +15,7 @@ public class signconvert implements cmd { @Override @CommandAnnotation(simple = false, priority = 5600) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (sender instanceof Player) { Player player = (Player) sender; if (plugin.getPermissionManager().isResidenceAdmin(player)) { diff --git a/src/com/bekvon/bukkit/residence/commands/signupdate.java b/src/com/bekvon/bukkit/residence/commands/signupdate.java index 7176da42a..75498b1b3 100644 --- a/src/com/bekvon/bukkit/residence/commands/signupdate.java +++ b/src/com/bekvon/bukkit/residence/commands/signupdate.java @@ -14,7 +14,7 @@ public class signupdate implements cmd { @Override @CommandAnnotation(simple = false, priority = 5700) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!resadmin) { plugin.msg(sender, lm.General_NoPermission); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java index 85d1fa6fe..b6ed521eb 100644 --- a/src/com/bekvon/bukkit/residence/commands/sublist.java +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -16,7 +16,7 @@ public class sublist implements cmd { @Override @CommandAnnotation(simple = true, priority = 4100) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (args.length != 0 && args.length != 1 && args.length != 2) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index d6bd7449e..4d1813ca9 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -17,7 +17,7 @@ public class subzone implements cmd { @Override @CommandAnnotation(simple = true, priority = 2100) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index e8ed90f02..df59dded1 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -14,7 +14,7 @@ public class tool implements cmd { @Override @CommandAnnotation(simple = true, priority = 1600) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { plugin.msg(sender, lm.General_Separator); plugin.msg(sender, lm.Select_Tool, plugin.getConfigManager().getSelectionTool().getName()); plugin.msg(sender, lm.General_InfoTool, plugin.getConfigManager().getInfoTool().getName()); diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index 7e9b48e83..b6f5f1908 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -16,7 +16,7 @@ public class tp implements cmd { @Override @CommandAnnotation(simple = true, priority = 1400) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java index 19f8730a5..c64aa2b92 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java +++ b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java @@ -15,7 +15,7 @@ public class tpconfirm implements cmd { @Override @CommandAnnotation(simple = true, priority = 1500) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/tpset.java b/src/com/bekvon/bukkit/residence/commands/tpset.java index 969abb0ea..5bd9253a4 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpset.java +++ b/src/com/bekvon/bukkit/residence/commands/tpset.java @@ -16,7 +16,7 @@ public class tpset implements cmd { @Override @CommandAnnotation(simple = true, priority = 200) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index 09f1b8355..2dc040ab1 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -18,7 +18,7 @@ public class unstuck implements cmd { @Override @CommandAnnotation(simple = true, priority = 4000) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; diff --git a/src/com/bekvon/bukkit/residence/commands/version.java b/src/com/bekvon/bukkit/residence/commands/version.java index c9c3bb01d..39fff3770 100644 --- a/src/com/bekvon/bukkit/residence/commands/version.java +++ b/src/com/bekvon/bukkit/residence/commands/version.java @@ -14,7 +14,7 @@ public class version implements cmd { @Override @CommandAnnotation(simple = false, priority = 5900) - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { sender.sendMessage(ChatColor.GRAY + "------------------------------------"); sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + plugin.getResidenceVersion()); sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); diff --git a/src/com/bekvon/bukkit/residence/containers/cmd.java b/src/com/bekvon/bukkit/residence/containers/cmd.java index a83addcdf..210d7b703 100644 --- a/src/com/bekvon/bukkit/residence/containers/cmd.java +++ b/src/com/bekvon/bukkit/residence/containers/cmd.java @@ -7,8 +7,8 @@ public interface cmd { // public boolean perform(Residence plugin, String[] args, boolean resadmin, Command command, CommandSender sender); - - public boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin); + + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin); public void getLocale(); From 0faee43f70c7b6e75ce917075b69875d777a99f3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 24 Jan 2020 17:23:03 +0200 Subject: [PATCH 0684/1142] Raid immunity management and raid cooldown saving --- .../bukkit/residence/commands/attack.java | 5 + .../bukkit/residence/commands/raid.java | 112 ++++++++++++++---- .../bukkit/residence/commands/raidstatus.java | 6 +- .../bukkit/residence/containers/lm.java | 3 + .../protection/ClaimedResidence.java | 16 +++ .../bukkit/residence/raid/ResidenceRaid.java | 16 +++ .../bukkit/residence/utils/TimeModifier.java | 53 +++++++++ 7 files changed, 183 insertions(+), 28 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/utils/TimeModifier.java diff --git a/src/com/bekvon/bukkit/residence/commands/attack.java b/src/com/bekvon/bukkit/residence/commands/attack.java index 8cdc31cb0..bd585adc9 100644 --- a/src/com/bekvon/bukkit/residence/commands/attack.java +++ b/src/com/bekvon/bukkit/residence/commands/attack.java @@ -54,6 +54,11 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return null; } + if (res.getRaid().isImmune()) { + plugin.msg(player, lm.Raid_attack_immune, Utils.to24hourShort(res.getRaid().getImmunityUntil() - System.currentTimeMillis() + 1000)); + return null; + } + if (res.isUnderRaidCooldown() && !res.isInPreRaid() && !res.isUnderRaid()) { plugin.msg(player, lm.Raid_attack_cooldown, Utils.to24hourShort(res.getRaid().getCooldownEnd() - System.currentTimeMillis() + 1000)); return null; diff --git a/src/com/bekvon/bukkit/residence/commands/raid.java b/src/com/bekvon/bukkit/residence/commands/raid.java index 69ca76efb..468474531 100644 --- a/src/com/bekvon/bukkit/residence/commands/raid.java +++ b/src/com/bekvon/bukkit/residence/commands/raid.java @@ -11,6 +11,9 @@ import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.TimeModifier; +import com.bekvon.bukkit.residence.utils.Utils; public class raid implements cmd { @@ -21,57 +24,109 @@ public static States getState(String name) { if (one.toString().equalsIgnoreCase(name)) return one; } - return null; + return null; } } @Override - @CommandAnnotation(simple = true, priority = 3100, regVar = { 1, 2 }, consoleVar = { 1, 2 }) + @CommandAnnotation(simple = true, priority = 3100, regVar = { 1, 2, 3, 4 }, consoleVar = { 2, 3, 4 }) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; - - final Player player = (Player) sender; - - if (args.length != 0 && args.length != 1) - return false; if (!ConfigManager.RaidEnabled) { plugin.msg(sender, lm.Raid_NotEnabled); return true; } - if (!resadmin) { + if (!resadmin && !plugin.isResAdminOn(sender)) { plugin.msg(sender, lm.General_NoPermission); + return null; } - States state = States.getState(args[1]); - - if (state == null) { + States state = States.getState(args[0]); + + if (state == null) { return false; } - - switch(state) { + + switch (state) { case immunity: + + ClaimedResidence res = null; + + if (args.length > 2) + res = plugin.getResidenceManager().getByName(args[2]); + if (res == null && sender instanceof Player) + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return null; + } + + Long time = null; + if (args.length > 3) + time = TimeModifier.getTimeRangeFromString(args[3]); + + if (args.length < 2) + return false; + + if (time == null && args.length > 2) + time = TimeModifier.getTimeRangeFromString(args[2]); + + switch (args[1].toLowerCase()) { + case "add": + if (time == null) + return false; + Long immune = res.getRaid().getImmunityUntil(); + immune = immune == null || immune < System.currentTimeMillis() ? System.currentTimeMillis() : immune; + immune += (time * 1000L); + res.getRaid().setImmunityUntil(immune); + plugin.msg(sender, lm.Raid_immune, Utils.to24hourShort(immune - System.currentTimeMillis())); + return true; + case "take": + if (time == null) + return false; + immune = res.getRaid().getImmunityUntil(); + immune = immune == null || immune < System.currentTimeMillis() ? System.currentTimeMillis() : immune; + immune -= (time * 1000L); + res.getRaid().setImmunityUntil(immune); + + if (res.getRaid().isImmune()) + plugin.msg(sender, lm.Raid_immune, Utils.to24hourShort(immune - System.currentTimeMillis())); + else + plugin.msg(sender, lm.Raid_notImmune); + return true; + case "set": + if (time == null) + return false; + immune = System.currentTimeMillis() + (time * 1000L); + res.getRaid().setImmunityUntil(immune); + plugin.msg(sender, lm.Raid_immune, Utils.to24hourShort(immune - System.currentTimeMillis())); + + return true; + case "clear": + res.getRaid().setImmunityUntil(null); + plugin.msg(sender, lm.Raid_notImmune); + + return true; + } + break; case kick: - - - break; case start: break; case stop: break; default: - break; + break; } - - // raid start [resname/playerName/currentres] - // raid stop [resname/playerName/currentres] - // raid kick [resname/playerName] - // raid immunity [add/take/set/clear] [resname/playerName/currentres] + + // raid start [resname/currentres] + // raid stop [resname/currentres] + // raid kick [playerName] + // raid immunity [add/take/set/clear] [resname/currentres] [time] return false; } @@ -80,8 +135,13 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Manage raid in residence"); - c.get("Info", Arrays.asList("&eUsage: &6/res defend [resName] (playerName)")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]%%[playername]")); + c.get("Info", Arrays.asList("&eUsage: &6/res raid start [resname]", "&6/res raid stop [resname]", "&6/res raid kick [playerName]", + "&6/res raid immunity [add/take/set/clear] [resname/currentres] [time]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("start%%stop%%kick%%immunity")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "start"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "stop"), Arrays.asList("[residence]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "kick"), Arrays.asList("[playername]")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "immunity"), Arrays.asList("add%%take%%set%%clear", "[residence]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/raidstatus.java b/src/com/bekvon/bukkit/residence/commands/raidstatus.java index c0f68cd92..e10505e04 100644 --- a/src/com/bekvon/bukkit/residence/commands/raidstatus.java +++ b/src/com/bekvon/bukkit/residence/commands/raidstatus.java @@ -47,7 +47,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (res == null) { res = plugin.getResidenceManager().getByLoc(player.getLocation()); } - + if (res == null) { OfflinePlayer offp = plugin.getOfflinePlayer(args[0]); if (offp != null) { @@ -68,7 +68,9 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo ResidenceRaid raid = res.getRaid(); plugin.msg(sender, "&7----------- &f" + res.getName() + "(" + res.getOwner() + ") &7-----------"); - if (res.isInPreRaid()) { + if (res.getRaid().isImmune()) { + plugin.msg(sender, "&eImmune to raids for next: " + Utils.to24hourShort(raid.getImmunityUntil() - System.currentTimeMillis() + 1000L)); + } else if (res.isInPreRaid()) { plugin.msg(sender, "&7Raid starts in: " + Utils.to24hourShort(raid.getStartsAt() - System.currentTimeMillis())); RawMessage rm = new RawMessage(); rm.add("&7Attackers: &4" + raid.getAttackers().size(), getAttackers(raid)); diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 191b9e7e2..94ef4cde2 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -111,10 +111,13 @@ public enum lm { Raid_left("&7You have left &4%1 &7raid"), Raid_noFlagChange("&cCan't change flags during raid"), Raid_noRemoval("&cCan't remove residence during raid"), + Raid_immune("&eImmune for next %1"), + Raid_notImmune("&eNo longer immune"), Raid_attack_Joined("&7Joined &2%1 &7raid!"), Raid_attack_Started("&7Raid started!"), Raid_attack_cooldown("&cToo soon for another raid on this residence! Wait %1"), + Raid_attack_immune("&cThis residence is immune to raids! Wait %1"), Raid_attack_isOffline("&cCan't raid while owner is offline!"), Raid_attack_noSelf("&cCan't raid your own residence!"), Raid_attack_alreadyInAnother("&cCan't join this rais, you are in another one already (%1)"), diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index d30a8b251..52cc73ec8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1461,6 +1461,14 @@ public Map save() { if (createTime != 0L) root.put("CreatedOn", createTime); + if (this.isTopArea() && this.isUnderRaidCooldown()) { + root.put("LastRaid", this.getRaid().getEndsAt()); + } + + if (this.isTopArea() && this.getRaid().isImmune()) { + root.put("Immunity", this.getRaid().getImmunityUntil()); + } + // if (this.getTown() != null && !this.isSubzone()) { // if (this.getTown().getMainResidence().equals(this)) // root.put("TownCap", this.getTown().getTownName()); @@ -1594,6 +1602,14 @@ public static ClaimedResidence load(String worldName, Map root, res.createTime = ((Long) root.get("CreatedOn")); else res.createTime = System.currentTimeMillis(); + + if (root.containsKey("LastRaid")) { + res.getRaid().setEndsAt(((Long) root.get("LastRaid"))); + } + + if (root.containsKey("Immunity")) { + res.getRaid().setImmunityUntil(((Long) root.get("Immunity"))); + } if (root.containsKey("ShopDescription")) res.setShopDesc((String) root.get("ShopDescription")); diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java index 402480ef7..b81a374f9 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -23,6 +23,7 @@ public class ResidenceRaid { private ClaimedResidence res; private Long startsAt = 0L; private Long endsAt = 0L; + private Long immunityUntil = null; // private Long lastSiegeEnded = 0L; private HashMap attackers = new HashMap(); private HashMap defenders = new HashMap(); @@ -253,4 +254,19 @@ public void endRaid() { clearAttackers(); clearDefenders(); } + + public boolean isImmune() { + return immunityUntil == null ? false : immunityUntil > System.currentTimeMillis(); + } + + public Long getImmunityUntil() { + return immunityUntil; + } + + public void setImmunityUntil(Long immunityUntil) { + if (immunityUntil != null && immunityUntil > System.currentTimeMillis()) + this.immunityUntil = immunityUntil; + else + this.immunityUntil = null; + } } diff --git a/src/com/bekvon/bukkit/residence/utils/TimeModifier.java b/src/com/bekvon/bukkit/residence/utils/TimeModifier.java new file mode 100644 index 000000000..980e48c67 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/TimeModifier.java @@ -0,0 +1,53 @@ +package com.bekvon.bukkit.residence.utils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.Zrips.CMI.utils.TimeManager.timeModifier; + +public enum TimeModifier { + + s(1), m(60), h(60 * 60), d(60 * 60 * 24), w(60 * 60 * 24 * 7), M(60 * 60 * 24 * 30), Y(60 * 60 * 24 * 365); + private int modifier = 0; + + static Pattern patern = Pattern.compile("(\\d+[a-z])"); + + TimeModifier(int modifier) { + this.modifier = modifier; + } + + + public int getModifier() { + return modifier; + } + + public void setModifier(int modifier) { + this.modifier = modifier; + } + + public static Long getTimeRangeFromString(String time) { + try { + return Long.parseLong(time); + } catch (Exception e) { + } + Matcher match = patern.matcher(time); + Long total = null; + while (match.find()) { + String t = match.group(1); + for (timeModifier one : timeModifier.values()) { + if (t.endsWith(one.name())) { + try { + Long amount = Long.parseLong(t.substring(0, t.length() - one.name().length())); + if (total == null) + total = 0L; + total += amount * one.getModifier(); + } catch (Exception e) { + break; + } + } + } + } + return total; + } + +} From cf3e611fc837344d67e9a1c843f2888ff58d8e44 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 5 Feb 2020 19:01:25 +0200 Subject: [PATCH 0685/1142] If we have different LWC, lets ignore it --- src/com/bekvon/bukkit/residence/Residence.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 2d9972c73..9ee11aa50 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -35,7 +35,6 @@ import org.bukkit.Server; import org.bukkit.World; import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; @@ -48,7 +47,6 @@ import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.cmiLib.VersionChecker; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.BossBar.BossBarManager; @@ -94,13 +92,13 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.raid.ResidenceRaidListener; import com.bekvon.bukkit.residence.protection.LeaseManager; import com.bekvon.bukkit.residence.protection.PermissionListManager; import com.bekvon.bukkit.residence.protection.PlayerManager; import com.bekvon.bukkit.residence.protection.ResidenceManager; import com.bekvon.bukkit.residence.protection.ResidencePermissions; import com.bekvon.bukkit.residence.protection.WorldFlagManager; +import com.bekvon.bukkit.residence.raid.ResidenceRaidListener; import com.bekvon.bukkit.residence.selection.AutoSelection; import com.bekvon.bukkit.residence.selection.KingdomsUtil; import com.bekvon.bukkit.residence.selection.Schematics7Manager; @@ -555,8 +553,12 @@ public void onEnable() { zip = new ZipLibrary(this); Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); - if (lwcp != null) - lwc = ((LWCPlugin) lwcp).getLWC(); + try { + if (lwcp != null) + lwc = ((LWCPlugin) lwcp).getLWC(); + } catch (Throwable e) { + e.printStackTrace(); + } for (String lang : validLanguages) { YmlMaker langFile = new YmlMaker(this, "Language" + File.separator + lang + ".yml"); From 0864610cc4a125c97c5f4463b295517e84c31eff Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 13 Mar 2020 14:33:22 +0200 Subject: [PATCH 0686/1142] Lets optimize player respawn event --- src/com/bekvon/bukkit/cmiLib/CMIMaterial.java | 14 +++-- .../bukkit/residence/commands/attack.java | 5 ++ .../bukkit/residence/commands/raid.java | 59 ++++++++++++++++++- .../residence/containers/PlayerGroup.java | 6 +- .../residence/containers/ResidencePlayer.java | 5 ++ .../bukkit/residence/containers/lm.java | 5 ++ .../protection/ClaimedResidence.java | 19 +++--- .../bukkit/residence/raid/ResidenceRaid.java | 3 + src/plugin.yml | 4 +- 9 files changed, 98 insertions(+), 22 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java index 97bbf7993..d9ca33452 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java @@ -1367,11 +1367,6 @@ public static CMIMaterial get(ItemStack item) { public static CMIMaterial get(Block block) { if (block == null) return CMIMaterial.NONE; - byte data = Version.isCurrentEqualOrLower(Version.v1_13_R1) ? block.getData() : 0; - if (block.getState() instanceof Skull) { - Skull skull = (Skull) block.getState(); - data = (byte) skull.getSkullType().ordinal(); - } CMIMaterial mat = null; @@ -1379,6 +1374,15 @@ public static CMIMaterial get(Block block) { mat = ItemManager.byRealMaterial.get(block.getType()); } + if (mat != null) + return mat; + + byte data = Version.isCurrentEqualOrLower(Version.v1_13_R1) ? block.getData() : 0; + if (block.getState() instanceof Skull) { + Skull skull = (Skull) block.getState(); + data = (byte) skull.getSkullType().ordinal(); + } + if (mat == null) { mat = ItemManager.byName.get(block.getType().toString().replace("_", "").toLowerCase()); } diff --git a/src/com/bekvon/bukkit/residence/commands/attack.java b/src/com/bekvon/bukkit/residence/commands/attack.java index bd585adc9..ac1e4f9ca 100644 --- a/src/com/bekvon/bukkit/residence/commands/attack.java +++ b/src/com/bekvon/bukkit/residence/commands/attack.java @@ -37,6 +37,11 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return null; } + if (!res.isTopArea()) { + plugin.msg(player, lm.Raid_attack_noSubzones); + return null; + } + if (res.isOwner(player)) { plugin.msg(player, lm.Raid_attack_noSelf); return null; diff --git a/src/com/bekvon/bukkit/residence/commands/raid.java b/src/com/bekvon/bukkit/residence/commands/raid.java index 468474531..923917175 100644 --- a/src/com/bekvon/bukkit/residence/commands/raid.java +++ b/src/com/bekvon/bukkit/residence/commands/raid.java @@ -9,9 +9,11 @@ import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.raid.ResidenceRaid; import com.bekvon.bukkit.residence.utils.TimeModifier; import com.bekvon.bukkit.residence.utils.Utils; @@ -114,8 +116,61 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo break; case kick: - break; + + if (args.length < 2) + return false; + + String playername = args[1]; + + ResidencePlayer rplayer = plugin.getPlayerManager().getResidencePlayer(playername); + + if (rplayer == null) { + plugin.msg(sender, lm.Invalid_Player); + return null; + } + + if (rplayer.getJoinedRaid() == null || rplayer.getJoinedRaid().isEnded()) { + plugin.msg(sender, lm.Raid_notInRaid); + return null; + } + + ResidenceRaid raid = rplayer.getJoinedRaid(); + if (raid == null || !raid.getRes().isUnderRaid() && !raid.getRes().isInPreRaid()) { + plugin.msg(sender, lm.Raid_NotIn); + return true; + } + + if (raid.getRes().isOwner(rplayer.getUniqueId())) { + plugin.msg(sender, lm.Raid_CantKick, raid.getRes().getName()); + return true; + } + + raid.removeAttacker(rplayer); + raid.removeDefender(rplayer); + raid.getRes().kickFromResidence(rplayer.getPlayer()); + + plugin.msg(sender, lm.Raid_Kicked, rplayer.getName(), raid.getRes().getName()); + + return true; case start: + + + res = null; + + if (args.length > 1) + res = plugin.getResidenceManager().getByName(args[2]); + if (res == null && sender instanceof Player) + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return null; + } + + + + + break; case stop: break; @@ -135,7 +190,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Manage raid in residence"); - c.get("Info", Arrays.asList("&eUsage: &6/res raid start [resname]", "&6/res raid stop [resname]", "&6/res raid kick [playerName]", + c.get("Info", Arrays.asList("&eUsage: &6/res raid start [resname] (playerName)", "&6/res raid stop [resname]", "&6/res raid kick [playerName]", "&6/res raid immunity [add/take/set/clear] [resname/currentres] [time]")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("start%%stop%%kick%%immunity")); Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "start"), Arrays.asList("[residence]")); diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index 14d818043..67bc8c721 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -45,8 +45,8 @@ public void updateGroup(String world, boolean force) { this.lastCheck = System.currentTimeMillis(); List posibleGroups = new ArrayList(); String group; - if (Residence.getInstance().getPermissionManager().getPlayersGroups().containsKey(resPlayer.getPlayerName().toLowerCase())) { - group = Residence.getInstance().getPermissionManager().getPlayersGroups().get(resPlayer.getPlayerName().toLowerCase()); + if (Residence.getInstance().getPermissionManager().getPlayersGroups().containsKey(resPlayer.getName().toLowerCase())) { + group = Residence.getInstance().getPermissionManager().getPlayersGroups().get(resPlayer.getName().toLowerCase()); if (group != null) { group = group.toLowerCase(); if (group != null && Residence.getInstance().getPermissionManager().getGroups().containsKey(group)) { @@ -59,7 +59,7 @@ public void updateGroup(String world, boolean force) { posibleGroups.add(getPermissionGroup()); - group = Residence.getInstance().getPermissionManager().getPermissionsGroup(resPlayer.getPlayerName(), world); + group = Residence.getInstance().getPermissionManager().getPermissionsGroup(resPlayer.getName(), world); PermissionGroup g = Residence.getInstance().getPermissionManager().getGroupByName(group); diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index a14c72688..383518cf1 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -371,7 +371,12 @@ public List getResList() { return ls; } + @Deprecated public String getPlayerName() { + return getName(); + } + + public String getName() { this.updatePlayer(); return userName; } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 94ef4cde2..985fb591b 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -103,6 +103,8 @@ public enum lm { Raid_NotEnabled("&cRaid feature is not enabled!"), Raid_NotIn("&cYou are not in the raid!"), Raid_CantLeave("&cYou cant leave (%1) your own residence raid!"), + Raid_CantKick("&cCant kick (%1) residence owner!"), + Raid_Kicked("&eKicked &7%1 &efrom &7%2 &eresidence raid!"), Raid_StartsIn("&7Raid starts in: [autoTimeLeft] &2%1D &4%2A"), Raid_EndsIn("&cRaid ends in: [autoTimeLeft] &2%1D &4%2A"), @@ -113,12 +115,15 @@ public enum lm { Raid_noRemoval("&cCan't remove residence during raid"), Raid_immune("&eImmune for next %1"), Raid_notImmune("&eNo longer immune"), + + Raid_notInRaid("&ePlayer isn't in raid"), Raid_attack_Joined("&7Joined &2%1 &7raid!"), Raid_attack_Started("&7Raid started!"), Raid_attack_cooldown("&cToo soon for another raid on this residence! Wait %1"), Raid_attack_immune("&cThis residence is immune to raids! Wait %1"), Raid_attack_isOffline("&cCan't raid while owner is offline!"), + Raid_attack_noSubzones("&cCan't raid subzones!"), Raid_attack_noSelf("&cCan't raid your own residence!"), Raid_attack_alreadyInAnother("&cCan't join this rais, you are in another one already (%1)"), diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 52cc73ec8..737b2b091 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1021,21 +1021,23 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { List randomLocList = new ArrayList(); - for (int z = -1; z < area.getZSize() + 1; z++) { + for (int z = -1; z < area.getZSize() + 2; z++) { randomLocList.add(new RandomLoc(area.getLowLoc().getX(), 0, area.getLowLoc().getZ() + z)); randomLocList.add(new RandomLoc(area.getLowLoc().getX() + area.getXSize(), 0, area.getLowLoc().getZ() + z)); } - for (int x = -1; x < area.getXSize() + 1; x++) { + for (int x = -1; x < area.getXSize() + 2; x++) { randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ())); randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ() + area.getZSize())); } Location loc = insideLoc.clone(); + boolean admin = ResPerm.admin_tp.hasPermission(player); + boolean found = false; int it = 0; - int maxIt = 30; + int maxIt = 15; while (!found && it < maxIt) { it++; @@ -1076,8 +1078,7 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { continue; ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) - && !ResPerm.admin_tp.hasPermission(player)) + if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) && !admin) continue; found = true; @@ -1464,7 +1465,7 @@ public Map save() { if (this.isTopArea() && this.isUnderRaidCooldown()) { root.put("LastRaid", this.getRaid().getEndsAt()); } - + if (this.isTopArea() && this.getRaid().isImmune()) { root.put("Immunity", this.getRaid().getImmunityUntil()); } @@ -1602,11 +1603,11 @@ public static ClaimedResidence load(String worldName, Map root, res.createTime = ((Long) root.get("CreatedOn")); else res.createTime = System.currentTimeMillis(); - - if (root.containsKey("LastRaid")) { + + if (root.containsKey("LastRaid")) { res.getRaid().setEndsAt(((Long) root.get("LastRaid"))); } - + if (root.containsKey("Immunity")) { res.getRaid().setImmunityUntil(((Long) root.get("Immunity"))); } diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java index b81a374f9..30edc9c99 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -50,6 +50,9 @@ public void setEndsAt(Long endsAt) { this.endsAt = endsAt; } + public boolean isEnded() { + return getEndsAt() < System.currentTimeMillis(); + } // public Long getLastSiegeEnded() { // return lastSiegeEnded; // } diff --git a/src/plugin.yml b/src/plugin.yml index 9ab74b237..6232033a7 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.8.8.2 +version: 4.9.0.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 @@ -10,10 +10,8 @@ contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: description: Manage Residences - usage: §c/res ? for more info residence: description: Manage Residences - usage: §c/residence ? for more info resadmin: description: Residence admin functions. usage: §c/res ? or /resadmin ? for more info From 54878d2c59d82b4ec73f7e2e9a7687c12f2dc424 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 13 Mar 2020 14:36:18 +0200 Subject: [PATCH 0687/1142] Optimized noob chest place checker --- .../residence/listeners/ResidenceBlockListener.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 3c7d1c767..d72884698 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -390,16 +390,16 @@ public void onChestPlace(BlockPlaceEvent event) { if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) return; - if (!ResPerm.newguyresidence.hasPermission(player)) - return; - - ArrayList list = plugin.getPlayerManager().getResidenceList(player.getName()); + ArrayList list = plugin.getPlayerManager().getResidenceList(player.getUniqueId()); if (list.size() != 0) return; if (MessageInformed.contains(player.getName())) return; + if (!ResPerm.newguyresidence.hasPermission(player)) + return; + plugin.msg(player, lm.General_NewPlayerInfo); MessageInformed.add(player.getName()); From fc8da73d6bc9e632ef4737931c88c0485ed19886 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 13 Mar 2020 16:40:21 +0200 Subject: [PATCH 0688/1142] Optimizing crap load of all this --- src/com/bekvon/bukkit/cmiLib/CMIMaterial.java | 2 + .../listeners/ResidenceBlockListener.java | 18 ++-- .../listeners/ResidenceEntityListener.java | 2 +- .../listeners/ResidencePlayerListener.java | 93 ++++++++++--------- .../permissions/PermissionManager.java | 9 +- .../protection/ClaimedResidence.java | 2 +- .../residence/protection/PlayerManager.java | 8 ++ 7 files changed, 72 insertions(+), 62 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java index d9ca33452..dc92f7b82 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java @@ -1372,6 +1372,8 @@ public static CMIMaterial get(Block block) { if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { mat = ItemManager.byRealMaterial.get(block.getType()); + if (mat == null) + return CMIMaterial.NONE; } if (mat != null) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index d72884698..eaa60b304 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -231,7 +231,7 @@ public void onBlockBreak(BlockBreakEvent event) { } } - if (!hasdestroy && !ResPerm.bypass_destroy.hasPermission(player)) { + if (!hasdestroy && !ResPerm.bypass_destroy.hasPermission(player, 10000L)) { plugin.msg(player, lm.Flag_Deny, Flags.destroy); event.setCancelled(true); } else if (mat == Material.CHEST && !perms.playerHas(player, Flags.container, true)) { @@ -390,8 +390,7 @@ public void onChestPlace(BlockPlaceEvent event) { if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) return; - ArrayList list = plugin.getPlayerManager().getResidenceList(player.getUniqueId()); - if (list.size() != 0) + if (plugin.getPlayerManager().getResidenceCount(player.getUniqueId()) != 0) return; if (MessageInformed.contains(player.getName())) @@ -470,9 +469,8 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { Block block = event.getBlock(); if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) return; - - ArrayList list = plugin.getPlayerManager().getResidenceList(player.getName()); - if (list.size() != 0) + + if (plugin.getPlayerManager().getResidenceCount(player.getUniqueId()) != 0) return; if (ResCreated.contains(player.getUniqueId())) @@ -491,8 +489,8 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { plugin.getConfigManager().getNewPlayerRangeY() * 2, plugin.getConfigManager().getNewPlayerRangeZ() * 2); - boolean created = plugin.getResidenceManager().addResidence(player, player.getName(), plugin.getSelectionManager().getPlayerLoc1(player.getName()), - plugin.getSelectionManager().getPlayerLoc2(player.getName()), plugin.getConfigManager().isNewPlayerFree()); + boolean created = plugin.getResidenceManager().addResidence(player, player.getName(), plugin.getSelectionManager().getPlayerLoc1(player), + plugin.getSelectionManager().getPlayerLoc2(player), plugin.getConfigManager().isNewPlayerFree()); if (created) { ResCreated.add(player.getUniqueId()); newPlayers.remove(player.getUniqueId()); @@ -643,7 +641,7 @@ public void onBlockPlace(BlockPlaceEvent event) { } } - if (!hasplace && !ResPerm.bypass_build.hasPermission(player)) { + if (!hasplace && !ResPerm.bypass_build.hasPermission(player, 10000L)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); return; @@ -655,7 +653,7 @@ public void onBlockPlace(BlockPlaceEvent event) { if (sec != null) { perms = plugin.getPermsByLocForPlayer(sec.getLocation(), player); hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - if (!hasplace && !ResPerm.bypass_build.hasPermission(player)) { + if (!hasplace && !ResPerm.bypass_build.hasPermission(player, 10000L)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 6b337b496..10627a0ca 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1297,7 +1297,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (event.getEntityType() == EntityType.ITEM_FRAME) { ItemFrame it = (ItemFrame) event.getEntity(); if (it.getItem() != null) { - if (!ResPerm.bypass_container.hasPermission(player)) + if (!ResPerm.bypass_container.hasPermission(player, 10000L)) if (!perms.playerHas(player, Flags.container, true)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.container); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index cfa446e4f..bab0bb59a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -14,6 +14,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.WeatherType; +import org.bukkit.World.Environment; import org.bukkit.block.Block; import org.bukkit.block.Sign; import org.bukkit.entity.Boat; @@ -166,7 +167,7 @@ public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { return; if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itempickup, FlagCombo.OnlyFalse)) return; - if (ResPerm.bypass_itempickup.hasPermission(event.getPlayer())) + if (ResPerm.bypass_itempickup.hasPermission(event.getPlayer(), 10000L)) return; event.setCancelled(true); event.getItem().setPickupDelay(plugin.getConfigManager().getItemPickUpDelay() * 20); @@ -623,7 +624,7 @@ public void onCommand(PlayerCommandPreprocessEvent event) { if (plugin.getPermissionManager().isResidenceAdmin(player)) return; - if (ResPerm.bypass_command.hasPermission(player)) + if (ResPerm.bypass_command.hasPermission(player, 10000L)) return; String msg = event.getMessage().replace(" ", "_").toLowerCase(); @@ -846,8 +847,8 @@ public void onSignDestroy(BlockBreakEvent event) { return; plugin.getSignUtil().getSigns().removeSign(s); - if (s.GetResidence() != null) - s.GetResidence().getSignsInResidence().remove(s); + if (s.getResidence() != null) + s.getResidence().getSignsInResidence().remove(s); plugin.getSignUtil().saveSigns(); } @@ -875,7 +876,7 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { return; FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); - f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) && !ResPerm.bypass_nofly.hasPermission(player)) { + f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null && res.isOwner(player)) @@ -887,6 +888,11 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { location.setYaw(lc.getYaw()); int from = location.getBlockY(); int maxH = location.getWorld().getMaxHeight() - 1; + maxH = location.getWorld().getHighestBlockAt(location).getLocation().getBlockY() + 3; + + if (location.getWorld().getEnvironment() == Environment.NETHER) + maxH = 100; + for (int i = 0; i < maxH; i++) { location.setY(from - i); Block block = location.getBlock(); @@ -1023,7 +1029,8 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { } public static boolean isEmptyBlock(Block block) { - switch (CMIMaterial.get(block)) { + CMIMaterial cb = CMIMaterial.get(block); + switch (cb) { case COBWEB: case STRING: case WALL_SIGN: @@ -1037,11 +1044,11 @@ public static boolean isEmptyBlock(Block block) { break; } - if (CMIMaterial.get(block).isSapling()) + if (cb.isSapling()) return true; - if (CMIMaterial.get(block).isAir()) + if (cb.isAir()) return true; - if (CMIMaterial.get(block).isButton()) + if (cb.isButton()) return true; return false; } @@ -1101,17 +1108,17 @@ public void onPlatePress(PlayerInteractEvent event) { if (player.hasMetadata("NPC")) return; FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - boolean resadmin = plugin.isResAdminOn(player); + CMIMaterial mat = CMIMaterial.get(block); - if (!resadmin) { - boolean hasUseBypass = ResPerm.bypass_use.hasPermission(player, 100L); - boolean hasuse = perms.playerHas(player, Flags.use, true); - boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); - if (!hasUseBypass) + if (!plugin.isResAdminOn(player)) { + if (!ResPerm.bypass_use.hasPermission(player, 10000L)) { + boolean hasuse = perms.playerHas(player, Flags.use, true); + boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); if ((!hasuse && !haspressure || !haspressure) && mat.isPlate()) { event.setCancelled(true); return; } + } } if (!perms.playerHas(player, Flags.trample, perms.playerHas(player, Flags.build, true)) && (mat == CMIMaterial.FARMLAND || mat == CMIMaterial.SOUL_SAND)) { event.setCancelled(true); @@ -1204,8 +1211,8 @@ public void onInfoCheck(PlayerInteractEvent event) { return; if (player.hasMetadata("NPC")) return; - Location loc = block.getLocation(); - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); if (res != null) plugin.getResidenceManager().printAreaInfo(res.getName(), player, false); else @@ -1252,13 +1259,15 @@ public void onPlayerInteract(PlayerInteractEvent event) { return; boolean resadmin = plugin.isResAdminOn(player); + + if (resadmin) + return; + if (!resadmin && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld().getName())) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; } - if (resadmin) - return; CMIMaterial blockM = CMIMaterial.get(block); @@ -1296,8 +1305,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasUseBypass = ResPerm.bypass_use.hasPermission(player); - boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player); + boolean hasUseBypass = ResPerm.bypass_use.hasPermission(player, 10000L); boolean hasuse = perms.playerHas(player, Flags.use, true) || hasUseBypass; ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); @@ -1314,6 +1322,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); + if (res == null || !res.isOwner(player)) { if (!hasContainerBypass) { @@ -1345,11 +1355,11 @@ public void onPlayerInteract(PlayerInteractEvent event) { switch (result) { case door: - if (ResPerm.bypass_door.hasPermission(player)) + if (ResPerm.bypass_door.hasPermission(player, 10000L)) break main; break; case button: - if (ResPerm.bypass_button.hasPermission(player)) + if (ResPerm.bypass_button.hasPermission(player, 10000L)) break main; break; } @@ -1469,7 +1479,7 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { if (res == null) return; - boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player); + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); if (!hasContainerBypass) if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { @@ -1525,7 +1535,7 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) if (res == null) return; - boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player); + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); if (!hasContainerBypass) if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { @@ -1665,7 +1675,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { return; } - boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player); + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); if (!hasContainerBypass) if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { @@ -1785,7 +1795,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { return; if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { - if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) && !ResPerm.bypass_tp.hasPermission(player)) { + if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) && !ResPerm.bypass_tp.hasPermission(player, 10000L)) { event.setCancelled(true); plugin.msg(player, lm.Residence_MoveDeny, res.getName()); return; @@ -1875,7 +1885,7 @@ private static Location getSafeLocation(Location loc) { private void fly(Player player, boolean state) { if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) return; - if (ResPerm.bypass_fly.hasPermission(player)) + if (ResPerm.bypass_fly.hasPermission(player, 10000L)) return; if (!state) { boolean land = player.isFlying(); @@ -2015,18 +2025,12 @@ public void onPlayerMove(PlayerMoveEvent event) { if (locfrom.getBlockX() == locto.getBlockX() && locfrom.getBlockY() == locto.getBlockY() && locfrom.getBlockZ() == locto.getBlockZ()) return; - String name = player.getName(); - - if (name == null) - return; - Long last = lastUpdate.get(player.getUniqueId()); - long now = System.currentTimeMillis(); if (last != null) - if (now - last < plugin.getConfigManager().getMinMoveUpdateInterval()) + if (System.currentTimeMillis() - last < plugin.getConfigManager().getMinMoveUpdateInterval()) return; - this.lastUpdate.put(player.getUniqueId(), now); + this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); boolean handled = handleNewLocation(player, locto, true); if (!handled) @@ -2077,14 +2081,19 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move if (res != null && ResOld.getName().equals(res.getName())) { if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && - !ResPerm.bypass_nofly.hasPermission(player)) { + !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { if (!res.isOwner(player)) { Location lc = player.getLocation(); Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); location.setPitch(lc.getPitch()); location.setYaw(lc.getYaw()); int from = location.getBlockY(); - int maxH = location.getWorld().getMaxHeight() - 1; + int maxH = from + 3; + if (location.getWorld().getEnvironment() == Environment.NETHER) + maxH = 100; + else + maxH = location.getWorld().getHighestBlockAt(location).getLocation().getBlockY() + 3; + for (int i = 0; i < maxH; i++) { location.setY(from - i); Block block = location.getBlock(); @@ -2158,7 +2167,7 @@ public void run() { ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); boolean teleported = false; - if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player)) { + if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { Location newLoc = res.getOutsideFreeLoc(loc, player); player.closeInventory(); teleported = teleport(player, newLoc); @@ -2195,7 +2204,7 @@ public void run() { } } - if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move.hasPermission(player)) { + if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move.hasPermission(player, 10000L)) { Location lastLoc = lastOutsideLoc.get(uuid); @@ -2208,7 +2217,7 @@ public void run() { ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); boolean teleported = false; - if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player)) { + if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { Location newLoc = res.getOutsideFreeLoc(loc, player); player.closeInventory(); teleported = teleport(player, newLoc); @@ -2246,7 +2255,7 @@ public void run() { // Preventing fly in residence only when player has move permission f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && - !ResPerm.bypass_nofly.hasPermission(player)) { + !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { if (res.isOwner(player)) break f; Location lc = player.getLocation(); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 265cecd53..e6250afd7 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -503,14 +503,7 @@ public PermissionInfo getFromCache(Player player, String perm) { if (old == null) { return null; } - - PermissionInfo info = old.get(perm); - - if (info == null) { - return null; - } - - return info; + return old.get(perm); } public PermissionInfo addToCache(Player player, String perm, boolean has, Long delayInMiliseconds) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 737b2b091..a74d41b0e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1295,7 +1295,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } } else { - if (!resadmin && !isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer) + if (!resadmin && !isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer, 10000L) && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 09726ad21..1bbb78c70 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -95,6 +95,14 @@ public ResidencePlayer playerJoin(String player, UUID uuid) { return null; } + public int getResidenceCount(UUID uuid) { + ResidencePlayer resPlayer = playersUuid.get(uuid); + if (resPlayer != null) { + return resPlayer.getResList().size(); + } + return 0; + } + @Override public ArrayList getResidenceList(UUID uuid) { ArrayList temp = new ArrayList(); From 895124d4002db46956510371ddd651873fe709bf Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 14 Mar 2020 11:29:23 +0200 Subject: [PATCH 0689/1142] Lets prevent rented residence removal and not only subzones --- .../listeners/ResidencePlayerListener.java | 18 ------------------ .../residence/protection/ResidenceManager.java | 4 ++++ 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index bab0bb59a..c3cc1b2af 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2300,24 +2300,6 @@ public void run() { if (!currentRes.containsKey(uuid) || ResOld != res) { currentRes.put(uuid, res); - // "from" residence for ResidenceChangedEvent -// ClaimedResidence chgFrom = null; -// if (ResOld != res && ResOld != null) { -// String leave = ResOld.getLeaveMessage(); -// chgFrom = ResOld; -// if (leave != null && !leave.equals("") && ResOld != res.getParent()) { -// if (plugin.getConfigManager().useTitleMessage()) { -// plugin.getAB().sendTitle(player, ChatColor.YELLOW + insertMessages(player, ResOld.getName(), ResOld, leave)); -// } -// if (plugin.getConfigManager().useActionBar()) { -// plugin.getAB().send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, ResOld.getName(), ResOld, leave)) -// .toString()); -// } else { -// plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, ResOld.getName(), ResOld, leave)); -// } -// } -// } - // New ResidenceChangedEvent ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, res, player); plugin.getServ().getPluginManager().callEvent(chgEvent); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 93eb2a5b3..1c77ab097 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -502,6 +502,10 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole plugin.msg(player, lm.Residence_CantRemove, res.getName(), rented.getName(), rented.getRentedLand().player); return; } + if (player!= null && res.isRented() && !player.getName().equalsIgnoreCase(res.getRentedLand().player)) { + plugin.msg(player, lm.Residence_CantRemove, res.getName(), res.getName(), res.getRentedLand().player); + return; + } } if (player != null && !resadmin) { From e1b6858dc7820fe45724bdde09583815e2066e74 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 14 Mar 2020 11:50:01 +0200 Subject: [PATCH 0690/1142] Lets not allow lease renewal if its already at max time --- .../bekvon/bukkit/residence/protection/LeaseManager.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index ceb8cf3d4..4c764db51 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import java.util.HashMap; @@ -113,6 +114,12 @@ public void renewArea(ClaimedResidence res, Player player) { int max = group.getMaxLeaseTime(); int add = group.getLeaseGiveTime(); int rem = daysRemaining(res); + + if (rem >= max) { + plugin.msg(player, lm.Economy_LeaseRenew, getExpireTime(res)); + return; + } + EconomyInterface econ = plugin.getEconomyManager(); if (econ != null) { double cost = group.getLeaseRenewCost(); @@ -130,6 +137,7 @@ public void renewArea(ClaimedResidence res, Player player) { } } } + if (rem + add > max) { setExpireTime(player, res, max); plugin.msg(player, lm.Economy_LeaseRenewMax); From 10f955f896c1a2d3b0a59a33fa3ec00a3fd25494 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 14 Mar 2020 11:53:46 +0200 Subject: [PATCH 0691/1142] Lets limit max rent days while setting rentable to actual group limits --- src/com/bekvon/bukkit/residence/economy/rent/RentManager.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 1bda4a970..79b7c1a8c 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -215,6 +215,9 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days } ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); + + days = group.getMaxRentDays() < days ? group.getMaxRentDays() : days; + if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { plugin.msg(player, lm.Residence_MaxRent); return; From b8ddd4a8d459ffbb2aa172596165755b6a868806 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 14 Mar 2020 13:13:57 +0200 Subject: [PATCH 0692/1142] Allow rent payment from residence bank account and/or player balance --- .../bukkit/residence/ConfigManager.java | 18 ++++++ .../bekvon/bukkit/residence/Residence.java | 3 +- .../bukkit/residence/commands/select.java | 1 + .../residence/economy/rent/RentManager.java | 60 +++++++++++++++++-- 4 files changed, 75 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index d64dd72da..36ed06b26 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -67,6 +67,8 @@ public class ConfigManager { protected String multiworldPlugin; protected boolean enableRentSystem; protected boolean RentPreventRemoval; + private boolean DeductFromBank; + private boolean DeductFromBankThenPlayer; protected boolean RentInformOnEnding; protected boolean RentAllowRenewing; protected boolean RentStayInMarket; @@ -849,6 +851,14 @@ public void UpdateConfigFile() { c.addComment("Global.Rent.PreventRemoval", "Prevents residence/subzone removal if its subzone is still rented by some one"); RentPreventRemoval = c.get("Global.Rent.PreventRemoval", true); + + c.addComment("Global.Rent.DeductFromBank", "When set to true residence rent can be renewed from residence bank"); + DeductFromBank = c.get("Global.Rent.DeductFromBank", false); + c.addComment("Global.Rent.DeductFromBankThenPlayer", + "When set to true residence rent can be renewed from residence bank and if there is not enough money then we will deduct rest of it from player", + "This will override behavior of DeductFromBank"); + DeductFromBankThenPlayer = c.get("Global.Rent.DeductFromBankThenPlayer", false); + c.addComment("Global.Rent.Inform.OnEnding", "Informs players on rent time ending"); RentInformOnEnding = c.get("Global.Rent.Inform.OnEnding", true); c.addComment("Global.Rent.Inform.Before", "Time range in minutes when to start informing about ending rent"); @@ -1887,6 +1897,14 @@ public boolean isEnterAnimation() { return EnterAnimation; } + public boolean isDeductFromBank() { + return DeductFromBank; + } + + public boolean isDeductFromBankThenPlayer() { + return DeductFromBankThenPlayer; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 9ee11aa50..1e7ef6769 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -840,7 +840,8 @@ public void run() { if (rentint < 1) { rentint = 1; } - rentint = rentint * 60 * 20; +// rentint = rentint * 60 * 20; + rentint = rentint * 20; rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); } for (Player player : Bukkit.getServer().getOnlinePlayers()) { diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index c08794921..bd9d5f41d 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -19,6 +19,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; public class select implements cmd { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 79b7c1a8c..886c6a14f 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -215,9 +215,9 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days } ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); - + days = group.getMaxRentDays() < days ? group.getMaxRentDays() : days; - + if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { plugin.msg(player, lm.Residence_MaxRent); return; @@ -637,8 +637,8 @@ public void checkCurrentRents() { if (land == null) continue; - if (land.endTime > System.currentTimeMillis()) - continue; +// if (land.endTime > System.currentTimeMillis()) +// continue; if (plugin.getConfigManager().debugEnabled()) System.out.println("Rent Check: " + res.getName()); @@ -661,7 +661,18 @@ public void checkCurrentRents() { continue; } if (land.AutoPay && rentable.AllowAutoPay) { - if (!plugin.getEconomyManager().canAfford(land.player, rentable.cost)) { + + Double money = 0D; + if (plugin.getConfigManager().isDeductFromBankThenPlayer()) { + money += res.getBank().getStoredMoneyD(); + money += plugin.getEconomyManager().getBalance(land.player); + } else if (plugin.getConfigManager().isDeductFromBank()) { + money += res.getBank().getStoredMoneyD(); + } else { + money += plugin.getEconomyManager().getBalance(land.player); + } + + if (money < rentable.cost) { if (!rentable.StayInMarket) { rentableLand.remove(res); res.setRentable(null); @@ -670,7 +681,44 @@ public void checkCurrentRents() { res.setRented(null); res.getPermissions().applyDefaultFlags(); } else { - if (!plugin.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost)) { + + boolean updatedTime = true; + if (plugin.getConfigManager().isDeductFromBankThenPlayer()) { + double deductFromPlayer = rentable.cost; + double leftInBank = res.getBank().getStoredMoneyD(); + if (leftInBank < deductFromPlayer) { + deductFromPlayer = deductFromPlayer - leftInBank; + leftInBank = 0D; + } else { + leftInBank = leftInBank - deductFromPlayer; + deductFromPlayer = 0D; + } + leftInBank = leftInBank < 0 ? 0 : leftInBank; + + if (plugin.getEconomyManager().getBalance(land.player) < deductFromPlayer) { + updatedTime = false; + } else { + if (deductFromPlayer == 0D || plugin.getEconomyManager().subtract(land.player, deductFromPlayer)) { + plugin.getEconomyManager().add(res.getPermissions().getOwner(), rentable.cost); + res.getBank().setStoredMoney(leftInBank); + updatedTime = true; + } + } + } else if (plugin.getConfigManager().isDeductFromBank()) { + double deductFromPlayer = rentable.cost; + double leftInBank = res.getBank().getStoredMoneyD(); + if (leftInBank < deductFromPlayer) { + updatedTime = false; + } else { + res.getBank().setStoredMoney(leftInBank - deductFromPlayer); + plugin.getEconomyManager().add(res.getPermissions().getOwner(), rentable.cost); + updatedTime = true; + } + } else { + updatedTime = plugin.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost); + } + + if (!updatedTime) { if (!rentable.StayInMarket) { rentableLand.remove(res); res.setRentable(null); From 6aee52750d412d85b4675f3b20b15fb026dede6e Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 14 Mar 2020 13:17:53 +0200 Subject: [PATCH 0693/1142] Lets not allow to withdraw money from rented residence bank if its not you who is renting it --- src/com/bekvon/bukkit/residence/containers/lm.java | 1 + src/com/bekvon/bukkit/residence/economy/ResidenceBank.java | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 985fb591b..a2145bba7 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -176,6 +176,7 @@ public enum lm { Bank_NoMoney("&cNot enough money in the bank."), Bank_Deposit("&eYou deposit &6%1 &einto the residence bank."), Bank_Withdraw("&eYou withdraw &6%1 &efrom the residence bank."), + Bank_rentedWithdraw("&cCan't withdraw from rented residence bank."), Subzone_Rename("&eRenamed subzone &6%1 &eto &6%2"), Subzone_Remove("&eSubzone &6%1 &eremoved."), diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index b48bdaad2..d235bb067 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -76,6 +76,12 @@ public void withdraw(CommandSender sender, double amount, boolean resadmin) { Residence.getInstance().msg(sender, lm.Bank_NoMoney); return; } + + if (!resadmin && res.isRented() && !res.getRentedLand().player.equalsIgnoreCase(sender.getName())) { + Residence.getInstance().msg(sender, lm.Bank_rentedWithdraw, res.getName()); + return; + } + if (sender instanceof Player && Residence.getInstance().getEconomyManager().add(sender.getName(), amount) || !(sender instanceof Player)) { this.subtract(amount); Residence.getInstance().msg(sender, lm.Bank_Withdraw, String.format("%.2f", amount)); From a5dc4bd1f928c3ff0627f31a339eb61078ca6e47 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 15 Mar 2020 11:29:38 +0200 Subject: [PATCH 0694/1142] nomobs flag should check by subzone they are in --- src/com/bekvon/bukkit/residence/Residence.java | 3 +-- .../bekvon/bukkit/residence/economy/rent/RentManager.java | 5 +++-- .../residence/listeners/ResidencePlayerListener.java | 8 ++++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 1e7ef6769..9ee11aa50 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -840,8 +840,7 @@ public void run() { if (rentint < 1) { rentint = 1; } -// rentint = rentint * 60 * 20; - rentint = rentint * 20; + rentint = rentint * 60 * 20; rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); } for (Player player : Bukkit.getServer().getOnlinePlayers()) { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 886c6a14f..a8cb76af7 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -16,6 +16,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import java.util.ArrayList; @@ -637,8 +638,8 @@ public void checkCurrentRents() { if (land == null) continue; -// if (land.endTime > System.currentTimeMillis()) -// continue; + if (land.endTime > System.currentTimeMillis()) + continue; if (plugin.getConfigManager().debugEnabled()) System.out.println("Rent Check: " + res.getName()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c3cc1b2af..f0ac86429 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -57,6 +57,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; +import com.Zrips.CMI.CMI; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.CMIReflections; @@ -2478,13 +2479,13 @@ public void feed() { public void DespawnMobs() { if (!Flags.nomobs.isGlobalyEnabled()) return; + try { for (Player player : Bukkit.getServer().getOnlinePlayers()) { ClaimedResidence res = getCurrentResidence(player.getUniqueId()); if (res == null) continue; - if (!res.getPermissions().has(Flags.nomobs, false)) continue; @@ -2494,7 +2495,10 @@ public void DespawnMobs() { continue; if (res.containsLoc(ent.getLocation())) { - ent.remove(); + ClaimedResidence ares = plugin.getResidenceManager().getByLoc(ent.getLocation()); + if (ares.getPermissions().has(Flags.nomobs, FlagCombo.OnlyTrue)) { + ent.remove(); + } } } } From 6bb7d6ddeb0a9611d2752941bb7da57b850f8df9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 15 Mar 2020 11:50:49 +0200 Subject: [PATCH 0695/1142] Lets inform player when area is not inside another area when we have EnforceAreaInsideArea set to true --- src/com/bekvon/bukkit/residence/ResidenceCommandListener.java | 2 +- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index ddc413ceb..3bb21114d 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -155,7 +155,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (!resadmin && !ResPerm.command_$1.hasPermission(sender, args[0].toLowerCase())) { RawMessage rm = new RawMessage(); - rm.add(plugin.msg(lm.General_NoPermission), "&2" + ResPerm.command_$1.getPermission(args[0].toLowerCase())); + rm.add(plugin.msg(lm.General_NoPermission), "&7" + ResPerm.command_$1.getPermission(args[0].toLowerCase())); rm.show(sender); ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index a74d41b0e..e1a5f162a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -364,6 +364,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } } if (!inside) { + plugin.msg(player, lm.Subzone_SelectInside); return false; } } From aabd71e0559341f9c5a5391de52d73e19fe44e1a Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 15 Mar 2020 11:56:16 +0200 Subject: [PATCH 0696/1142] Max Y is 256 and not 255. Issue with IgnoreY option --- .../bekvon/bukkit/residence/selection/SelectionManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 3bbcba709..aafe585ac 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -102,7 +102,7 @@ public int getMaxYAllowed() { case ignoreY: case noLimits: default: - return getMaxWorldHeight(getWorld()) - 1; + return getMaxWorldHeight(getWorld()); case residenceBounds: ClaimedResidence res1 = plugin.getResidenceManager().getByLoc(this.getBaseLoc2()); if (res1 != null) { @@ -113,7 +113,7 @@ public int getMaxYAllowed() { } break; } - return getMaxWorldHeight(getWorld()) - 1; + return getMaxWorldHeight(getWorld()); } public int getMinYAllowed() { From efd5bd94971707e6f3ba91601e6edac52b8bc872 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 15 Mar 2020 12:39:28 +0200 Subject: [PATCH 0697/1142] Lets not allow to transfer residence to none existing player --- src/com/bekvon/bukkit/residence/Residence.java | 5 ++++- .../bukkit/residence/ResidenceCommandListener.java | 2 ++ src/com/bekvon/bukkit/residence/commands/setowner.java | 9 ++++++++- .../bukkit/residence/protection/ResidenceManager.java | 2 -- .../residence/protection/ResidencePermissions.java | 1 + 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 9ee11aa50..77f3f1f36 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -554,8 +554,11 @@ public void onEnable() { Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); try { - if (lwcp != null) + if (lwcp != null) { lwc = ((LWCPlugin) lwcp).getLWC(); + Bukkit.getConsoleSender().sendMessage(this.getPrefix() + " LWC hooked."); + + } } catch (Throwable e) { e.printStackTrace(); } diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 3bb21114d..0fae19ed1 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -22,6 +22,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceCommandListener implements CommandExecutor { @@ -264,6 +265,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } Boolean respond = cmdClass.perform(Residence.getInstance(), sender, targ, resadmin); + if (respond != null && !respond) { String[] tempArray = new String[args.length + 1]; for (int i = 0; i < args.length; i++) { diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index ec2ec9980..5b773ee1b 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -7,9 +7,11 @@ import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; public class setowner implements cmd { @@ -26,13 +28,18 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } ClaimedResidence area = plugin.getResidenceManager().getByName(args[0]); + if (area != null) { if (area.isRaidInitialized() && !resadmin) { plugin.msg(sender, lm.Raid_cantDo); return true; } - + + if (!plugin.isPlayerExist(sender, args[1], true)) { + return null; + } + area.getPermissions().setOwner(args[1], true); if (plugin.getRentManager().isForRent(area.getName())) plugin.getRentManager().removeRentable(area.getName()); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1c77ab097..8fbcd3473 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -22,7 +22,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; @@ -34,7 +33,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.rent.RentableLand; import com.bekvon.bukkit.residence.economy.rent.RentedLand; -import com.bekvon.bukkit.residence.event.ResidenceChangedEvent; import com.bekvon.bukkit.residence.event.ResidenceCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index d2036ae9d..e923ea723 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -22,6 +22,7 @@ import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidencePermissions extends FlagPermissions { From 3904359c076a9d340725465a66b8dfc63b84b397 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 15 Mar 2020 12:43:56 +0200 Subject: [PATCH 0698/1142] Fix for invisible modded item support section --- src/com/bekvon/bukkit/residence/ConfigManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 36ed06b26..0a8f9c0c3 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -962,21 +962,21 @@ public void UpdateConfigFile() { c.addComment("Global.CustomContainers", "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); - pls = c.getList("Global.CustomContainers", new ArrayList()); + pls = c.get("Global.CustomContainers", new ArrayList()); for (Object one : pls) { CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); if (mat != CMIMaterial.NONE) customContainers.add(mat); } - pls = c.getList("Global.CustomBothClick", new ArrayList()); + pls = c.get("Global.CustomBothClick", new ArrayList()); for (Object one : pls) { CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); if (mat != CMIMaterial.NONE) customBothClick.add(mat); } - pls = c.getList("Global.CustomRightClick", new ArrayList()); + pls = c.get("Global.CustomRightClick", new ArrayList()); for (Object one : pls) { CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); if (mat != CMIMaterial.NONE) From 184ebf3fde416d1c37e95c5a5a0b35d1537216fa Mon Sep 17 00:00:00 2001 From: Zrips Date: Sun, 15 Mar 2020 13:03:45 +0200 Subject: [PATCH 0699/1142] Correct and universal way to copy over locale files --- .../bukkit/residence/ConfigManager.java | 75 +++++++++++++++++++ .../bekvon/bukkit/residence/Residence.java | 16 +--- 2 files changed, 79 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 0a8f9c0c3..c429dcd60 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -2,14 +2,20 @@ import java.io.File; import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; +import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; import java.util.Set; import org.bukkit.Bukkit; @@ -32,6 +38,8 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; +import com.bekvon.bukkit.residence.utils.YmlMaker; public class ConfigManager { protected String defaultGroup; @@ -291,6 +299,73 @@ public static String Colors(String text) { return ChatColor.translateAlternateColorCodes('&', text); } + public static List getClassesFromPackage(String pckgname, String cleaner) throws ClassNotFoundException { + List result = new ArrayList(); + try { + for (URL jarURL : ((URLClassLoader) Residence.class.getClassLoader()).getURLs()) { + try { + result.addAll(getClassesInSamePackageFromJar(pckgname, jarURL.toURI().getPath(), cleaner)); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + } + } catch (NullPointerException x) { + throw new ClassNotFoundException(pckgname + " does not appear to be a valid package (Null pointer exception)"); + } + return result; + } + + private static List getClassesInSamePackageFromJar(String packageName, String jarPath, String cleaner) { + JarFile jarFile = null; + List listOfCommands = new ArrayList(); + try { + jarFile = new JarFile(jarPath); + Enumeration en = jarFile.entries(); + while (en.hasMoreElements()) { + JarEntry entry = en.nextElement(); + String entryName = entry.getName(); + packageName = packageName.replace(".", "/"); + if (entryName != null && entryName.endsWith(".yml") && entryName.startsWith(packageName)) { + String name = entryName.replace(packageName, "").replace(".yml", "").replace("/", ""); + if (name.contains("$")) + name = name.split("\\$")[0]; + if (cleaner != null) + name = name.replace(cleaner, ""); + listOfCommands.add(name); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (jarFile != null) + try { + jarFile.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + return listOfCommands; + } + + public void copyOverTranslations() { + + ArrayList languages = new ArrayList(); + try { + languages.addAll(getClassesFromPackage("Language", null)); + } catch (ClassNotFoundException e1) { + e1.printStackTrace(); + } + + for (String one : languages) { + File file = new File(plugin.getDataFolder(), "Language" + File.separator + one + ".yml"); + if (!file.exists()) { + YmlMaker f = new YmlMaker(plugin, "Language" + File.separator + one + ".yml"); + f.saveDefaultConfig(); + f.ConfigFile.renameTo(file); + } + } + } + public void ChangeConfig(String path, Boolean stage) { File f = new File(plugin.getDataFolder(), "config.yml"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 77f3f1f36..4db1dfff0 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -213,7 +213,6 @@ public class Residence extends JavaPlugin { public Map deleteConfirm; public Map UnrentConfirm = new HashMap(); public List resadminToggle; - private final static Set validLanguages = new HashSet(Arrays.asList("English", "Czech", "Chinese", "ChineseTW", "French", "Spanish")); private ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); private Map cachedPlayerNameUUIDs = new HashMap(); private com.sk89q.worldedit.bukkit.WorldEditPlugin wep = null; @@ -434,6 +433,7 @@ public void onDisable() { } } + @Override public void onEnable() { try { @@ -557,22 +557,14 @@ public void onEnable() { if (lwcp != null) { lwc = ((LWCPlugin) lwcp).getLWC(); Bukkit.getConsoleSender().sendMessage(this.getPrefix() + " LWC hooked."); - + } } catch (Throwable e) { e.printStackTrace(); } - for (String lang : validLanguages) { - YmlMaker langFile = new YmlMaker(this, "Language" + File.separator + lang + ".yml"); - langFile.saveDefaultConfig(); - } - validLanguages.add(getConfigManager().getLanguage()); - - for (String lang : validLanguages) { - getLocaleManager().LoadLang(lang); - } - + this.getConfigManager().copyOverTranslations(); + try { File langFile = new File(new File(dataFolder, "Language"), getConfigManager().getLanguage() + ".yml"); From eabe7dc60dde58438fece8a1f249728633dd2fc5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 17 Mar 2020 11:41:58 +0200 Subject: [PATCH 0700/1142] Forgot to update locale with default values --- src/com/bekvon/bukkit/residence/Residence.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 4db1dfff0..5272fc0c8 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -721,6 +721,7 @@ public void run() { NewLanguageManager = new Language(this); getLM().LanguageReload(); + getLocaleManager().LoadLang(getConfigManager().getLanguage()); try { this.loadYml(); From 33a252f79a7367e4fe23994ce22a591b3978e386 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 17 Mar 2020 15:36:34 +0200 Subject: [PATCH 0701/1142] More robust GUI handling. --- src/com/bekvon/bukkit/CMIGUI/CMIGui.java | 497 ++++++++++++++++++ .../bekvon/bukkit/CMIGUI/CMIGuiButton.java | 401 ++++++++++++++ src/com/bekvon/bukkit/CMIGUI/CommandType.java | 5 + .../bukkit/CMIGUI/GUIButtonCommand.java | 32 ++ src/com/bekvon/bukkit/CMIGUI/GUIListener.java | 176 +++++++ src/com/bekvon/bukkit/CMIGUI/GUIManager.java | 354 +++++++++++++ .../bekvon/bukkit/cmiLib/CMIReflections.java | 235 ++++++++- .../bukkit/residence/ConfigManager.java | 30 +- .../bekvon/bukkit/residence/Residence.java | 2 +- .../bukkit/residence/commands/pset.java | 20 +- .../bekvon/bukkit/residence/commands/set.java | 18 +- .../bekvon/bukkit/residence/gui/FlagUtil.java | 103 +++- .../bekvon/bukkit/residence/gui/SetFlag.java | 457 ---------------- .../bukkit/residence/gui/setFlagInfo.java | 361 +++++++++++++ .../listeners/ResidencePlayerListener.java | 52 -- .../residence/protection/FlagPermissions.java | 29 + .../protection/ResidencePermissions.java | 1 - .../bukkit/residence/text/help/PageInfo.java | 4 + 18 files changed, 2207 insertions(+), 570 deletions(-) create mode 100644 src/com/bekvon/bukkit/CMIGUI/CMIGui.java create mode 100644 src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java create mode 100644 src/com/bekvon/bukkit/CMIGUI/CommandType.java create mode 100644 src/com/bekvon/bukkit/CMIGUI/GUIButtonCommand.java create mode 100644 src/com/bekvon/bukkit/CMIGUI/GUIListener.java create mode 100644 src/com/bekvon/bukkit/CMIGUI/GUIManager.java delete mode 100644 src/com/bekvon/bukkit/residence/gui/SetFlag.java create mode 100644 src/com/bekvon/bukkit/residence/gui/setFlagInfo.java diff --git a/src/com/bekvon/bukkit/CMIGUI/CMIGui.java b/src/com/bekvon/bukkit/CMIGUI/CMIGui.java new file mode 100644 index 000000000..31b60f092 --- /dev/null +++ b/src/com/bekvon/bukkit/CMIGUI/CMIGui.java @@ -0,0 +1,497 @@ +package com.bekvon.bukkit.CMIGUI; + +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.Map.Entry; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.bekvon.bukkit.CMIGUI.GUIManager.CmiInventoryType; +import com.bekvon.bukkit.CMIGUI.GUIManager.GUIButtonLocation; +import com.bekvon.bukkit.CMIGUI.GUIManager.GUIClickType; +import com.bekvon.bukkit.CMIGUI.GUIManager.GUIFieldType; +import com.bekvon.bukkit.CMIGUI.GUIManager.GUIRows; +import com.bekvon.bukkit.CMIGUI.GUIManager.InvType; +import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIReflections; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.text.help.PageInfo; + +public class CMIGui { + + private InventoryType invType; + private GUIRows gUIRows; + private Player player; + private Inventory inv; + private String title; + private HashMap buttons = new HashMap(); + private LinkedHashSet noSlotButtons = new LinkedHashSet(); + + private HashMap lock = new HashMap(); + private HashMap permLock = new HashMap(); + + private CmiInventoryType type = CmiInventoryType.regular; + private Object whatShows; + private Object tempData; + + private boolean allowShift = false; + private boolean allowPickUpAll = false; + + public CMIGui(Player player) { + this.player = player; + } + + @Override + public CMIGui clone() { + CMIGui g = new CMIGui(player); + g.setInvSize(gUIRows); + g.setButtons(buttons); + g.setInv(inv); + g.setInvType(invType); + g.setTitle(title); + g.setCmiInventoryType(type); + g.setWhatShows(whatShows); + return g; + } + + public boolean isOpened() { + return GUIManager.isOpenedGui(getPlayer()); + } + + public boolean isSimilar(CMIGui gui) { + + if (this.getInvSize() != gui.getInvSize()) + return false; + + if (this.getInvType() != gui.getInvType()) + return false; + + return true; + } + + public CMIGui open() { + GUIManager.openGui(this); + return this; + } + + public void outsideClick(GUIClickType type) { + + } + + public InventoryType getInvType() { + if (invType == null) + invType = InventoryType.CHEST; + return invType; + } + + public void setInvType(InventoryType invType) { + this.invType = invType; + } + + public GUIRows getInvSize() { + if (gUIRows == null) + autoResize(); + return gUIRows; + } + + public void setInvSize(GUIRows GUIRows) { + this.gUIRows = GUIRows; + } + + public void setInvSize(int rows) { + this.gUIRows = GUIRows.getByRows(rows); + } + + public void autoResize() { + this.combineButtons(); + int max = 0; + for (Entry one : this.buttons.entrySet()) { + if (one.getKey() > max) + max = one.getKey(); + } + + if (max < 9) { + this.gUIRows = GUIRows.r1; + } else if (max < 18) { + this.gUIRows = GUIRows.r2; + } else if (max < 27) { + this.gUIRows = GUIRows.r3; + } else if (max < 36) { + this.gUIRows = GUIRows.r4; + } else if (max < 45) { + this.gUIRows = GUIRows.r5; + } else { + this.gUIRows = GUIRows.r6; + } + } + + public Player getPlayer() { + return player; + } + + public void setPlayer(Player player) { + this.player = player; + } + + public Inventory getInv() { + if (inv == null) + GUIManager.generateInventory(this); + return inv; + } + + public void setInv(Inventory inv) { + this.inv = inv; + } + + public String getTitle() { + if (title == null) + title = ""; + return ChatColor.translateAlternateColorCodes('&', title); + } + + public void updateTitle(String title) { + setTitle(title); + CMIReflections.updateInventoryTitle(player, this.title); + } + + public void setTitle(String title) { + if (title.length() > 32) { + title = title.substring(0, 31) + "~"; + } + + this.title = title; + } + + public HashMap getButtons() { + combineButtons(); + return buttons; + } + + public void clearButtons() { + for (Entry one : getButtons().entrySet()) { + this.inv.setItem(one.getKey(), null); + } + if (inv != null) + this.inv.clear(); + buttons.clear(); + noSlotButtons.clear(); + } + + public CMIGui replaceButton(CMIGuiButton button) { + button.updateLooks(); + if (button.getSlot() != null) + this.buttons.remove(button.getSlot()); + if (this.getInv() != null) { + this.getInv().setItem(button.getSlot(), button.getItem(this.getPlayer())); + } + return addButton(button, 54); + } + + public CMIGui addButton(CMIGuiButton button) { + button.updateLooks(); + return addButton(button, 54); + } + + public CMIGui addButton(CMIGuiButton button, int maxSlot) { + button.setGui(this); + if (button.getSlot() != null && buttons.get(button.getSlot()) != null) { + for (int ii = button.getSlot(); ii < maxSlot; ii++) { + CMIGuiButton b = buttons.get(ii); + if (b == null) { + buttons.put(ii, button); + break; + } + } + return this; + } + + if (button.getSlot() == null) { + noSlotButtons.add(button); + return this; + } + buttons.put(button.getSlot(), button); + return this; + } + + private void combineButtons() { + for (CMIGuiButton button : noSlotButtons) { + for (int ii = 0; ii < 54; ii++) { + CMIGuiButton b = buttons.get(ii); + if (b == null) { + buttons.put(ii, button); + break; + } + } + } + noSlotButtons.clear(); + } + + public void fillEmptyButtons() { + fillEmptyButtons(null); + } + + public void fillEmptyButtons(ItemStack item) { + combineButtons(); + for (int i = 0; i < this.getInvSize().getFields(); i++) { + if (this.buttons.containsKey(i)) + continue; + addEmptyButton(item, i); + } + } + + public void updateButton(CMIGuiButton button) { + if (inv == null || button.getSlot() == null || inv.getSize() < button.getSlot()) + return; + this.inv.setItem(button.getSlot(), button.getItem(this.getPlayer())); + buttons.put(button.getSlot(), button); + } + + public void addEmptyButton(int slot) { + addEmptyButton(null, slot); + } + + public void addEmptyButton(ItemStack item, int slot) { + ItemStack MiscInfo = item == null ? CMIMaterial.BLACK_STAINED_GLASS_PANE.newItemStack() : item.clone(); + ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); + MiscInfoMeta.setDisplayName(" "); + MiscInfo.setItemMeta(MiscInfoMeta); + CMIGuiButton button = new CMIGuiButton(slot, GUIFieldType.Locked, MiscInfo); + addButton(button); + updateButton(button); + } + + public void setButtons(HashMap buttons) { +// for (Entry one : buttons.entrySet()) { +// CMIGuiButton old = this.buttons.get(one.getKey()); +// if (old == null) +// old = one.getValue(); +// buttons.put(one.getKey(), old); +// } + this.buttons = buttons; + } + + public boolean isLocked(InvType type) { + return lock.containsKey(type) ? (lock.get(type) == GUIFieldType.Locked) : false; + } + + public void addLock(InvType type) { + addLock(type, GUIFieldType.Locked); + } + + public void addLock(InvType type, GUIFieldType lock) { + this.lock.put(type, lock); + } + + public boolean isPermLocked(InvType type) { + return permLock.containsKey(type) ? (!this.player.hasPermission(permLock.get(type))) : true; + } + + public void addPermLock(InvType type, String perm) { + this.permLock.put(type, perm); + } + + public CmiInventoryType getType() { + return type; + } + + public void setCmiInventoryType(CmiInventoryType type) { + this.type = type; + } + + public Object getWhatShows() { + return whatShows; + } + + public void setWhatShows(Object whatShows) { + this.whatShows = whatShows; + } + + public Integer getSlot(GUIButtonLocation place) { + GUIRows size = this.getInvSize(); + int v = place.getCollumn() * 9; + v = place.getCollumn() > 0 ? v - 1 : v; + Integer value = (((place.getRow() * (size.getRows())) * 9) - 8) + v; + value = place.getRow() > 0 ? value : value + 9; + return value - 1; + } + + public void onClose() { + + } + + public void onOpen() { + + } + + public void processClose() { + } + +// public void addPagination(PageInfo pi, Object cmd, String pagePref) { +// addPagination(pi,Residence.getInstance().getCommandManager().getLabel() + " " + cmd.getClass().getSimpleName(), pagePref); +// } +// +// public void addPagination(PageInfo pi, String cmd, String pagePref) { +// +// if (!cmd.startsWith("/")) +// cmd = "/" + cmd; +//// String separator = this.getMsg(LC.info_fliperSimbols); +// +// int CurrentPage = pi.getCurrentPage(); +// int pageCount = pi.getTotalPages(); +// int totalEntries = pi.getTotalEntries(); +// +// if (pageCount == 1) +// return; +// if (this.getInvSize().getRows() < 6) +// this.setInvSize(GUIRows.r6); +// +// Integer prevSlot = this.getSlot(GUIButtonLocation.bottomLeft); +// Integer nextSlot = this.getSlot(GUIButtonLocation.bottomRight); +// Integer midSlot = this.getSlot(GUIButtonLocation.bottomRight) - 4; +// +// String pagePrefix = pagePref == null ? "" : pagePref; +// +// int NextPage = CurrentPage + 1; +// NextPage = CurrentPage < pageCount ? NextPage : CurrentPage; +// int Prevpage = CurrentPage - 1; +// Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; +// +//// RawMessage rm = new RawMessage(); +// +// if (pageCount != 0) { +// +// for (int i = GUIRows.r5.getFields(); i < GUIRows.r6.getFields(); i++) { +// this.getButtons().remove(i); +// } +// +// CMIGuiButton button = new CMIGuiButton(midSlot, CMIMaterial.LIGHT_GRAY_WOOL.newItemStack()); +// button.setName(CMI.getInstance().getMsg(LC.info_pageCount, "[current]", CurrentPage, "[total]", pageCount)); +// button.addLore(CMI.getInstance().getMsg(LC.info_pageCountHover, "[totalEntries]", totalEntries)); +// this.addButton(button); +// +// if (this.getButtons().get(prevSlot) == null && CurrentPage > 1) { +// button = new CMIGuiButton(prevSlot, CMIMaterial.WHITE_WOOL.newItemStack()); +// button.setName(CMI.getInstance().getMsg(LC.info_prevPageGui)); +// button.addLore(CMI.getInstance().getMsg(LC.info_pageCount, "[current]", CurrentPage, "[total]", pageCount)); +// button.addCommand(cmd + " " + pagePrefix + Prevpage, CommandType.silent); +// this.addButton(button); +// } +// +// if (this.getButtons().get(nextSlot) == null && pageCount > CurrentPage) { +// button = new CMIGuiButton(nextSlot, CMIMaterial.GRAY_WOOL.newItemStack()); +// button.setName(CMI.getInstance().getMsg(LC.info_nextPageGui)); +// button.addLore(CMI.getInstance().getMsg(LC.info_pageCount, "[current]", CurrentPage, "[total]", pageCount)); +// button.addCommand(cmd + " " + pagePrefix + NextPage, CommandType.silent); +// this.addButton(button); +// } +// +// } +// } +// +// public void addPagination(PageInfo pi, String pagePref, Class cls, String... argsS) { +// +//// if (!cmd.startsWith("/")) +//// cmd = "/" + cmd; +//// String separator = this.getMsg(LC.info_fliperSimbols); +// +// String arg = ""; +// for (String one : argsS) { +// if (!arg.isEmpty()) +// arg += " "; +// arg += one; +// } +// String args = arg; +// +// int CurrentPage = pi.getCurrentPage(); +// int pageCount = pi.getTotalPages(); +// int totalEntries = pi.getTotalEntries(); +// +// if (pageCount == 1) +// return; +// if (this.getInvSize().getRows() < 6) +// this.setInvSize(GUIRows.r6); +// +// Integer prevSlot = this.getSlot(GUIButtonLocation.bottomLeft); +// Integer nextSlot = this.getSlot(GUIButtonLocation.bottomRight); +// Integer midSlot = this.getSlot(GUIButtonLocation.bottomRight) - 4; +// +// String pagePrefix = pagePref == null ? "" : pagePref; +// +//// RawMessage rm = new RawMessage(); +// +// if (pageCount != 0) { +// +// for (int i = GUIRows.r5.getFields(); i < GUIRows.r6.getFields(); i++) { +// this.getButtons().remove(i); +// } +// +// CMIGuiButton button = new CMIGuiButton(midSlot, CMIMaterial.LIGHT_GRAY_WOOL.newItemStack()); +// button.setName(CMI.getInstance().getMsg(LC.info_pageCount, "[current]", CurrentPage, "[total]", pageCount)); +// button.addLore(CMI.getInstance().getMsg(LC.info_pageCountHover, "[totalEntries]", totalEntries)); +// this.addButton(button); +// +// if (this.getButtons().get(prevSlot) == null && CurrentPage > 1) { +// button = new CMIGuiButton(prevSlot, CMIMaterial.WHITE_WOOL.newItemStack()) { +// @Override +// public void click(GUIClickType type) { +// +// int Prevpage = CurrentPage - 1; +// Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; +// CMI.getInstance().getCommandManager().performCMICommand(player, cls, (args.isEmpty() ? "" : args + " ") + pagePrefix + Prevpage); +// +// } +// }; +// button.setName(CMI.getInstance().getMsg(LC.info_prevPageGui)); +// button.addLore(CMI.getInstance().getMsg(LC.info_pageCount, "[current]", CurrentPage - 1, "[total]", pageCount)); +// this.addButton(button); +// } +// +// if (this.getButtons().get(nextSlot) == null && pageCount > CurrentPage) { +// button = new CMIGuiButton(nextSlot, CMIMaterial.GRAY_WOOL.newItemStack()) { +// @Override +// public void click(GUIClickType type) { +// +// int NextPage = CurrentPage + 1; +// NextPage = CurrentPage < pageCount ? NextPage : CurrentPage; +// CMI.getInstance().getCommandManager().performCMICommand(player, cls, (args.isEmpty() ? "" : args + " ") + pagePrefix + NextPage); +// +// } +// }; +// button.setName(CMI.getInstance().getMsg(LC.info_nextPageGui)); +// button.addLore(CMI.getInstance().getMsg(LC.info_pageCount, "[current]", CurrentPage + 1, "[total]", pageCount)); +//// button.addCommand(cmd + " " + pagePrefix + NextPage, CommandType.silent); +// this.addButton(button); +// } +// +// } +// } + + public boolean isAllowShift() { + return allowShift; + } + + public void setAllowShift(boolean allowShift) { + this.allowShift = allowShift; + } + + public Object getTempData() { + return tempData; + } + + public void setTempData(Object tempData) { + this.tempData = tempData; + } + + public boolean isAllowPickUpAll() { + return allowPickUpAll; + } + + public void setAllowPickUpAll(boolean allowPickUpAll) { + this.allowPickUpAll = allowPickUpAll; + } +} diff --git a/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java b/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java new file mode 100644 index 000000000..e40e6b3a6 --- /dev/null +++ b/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java @@ -0,0 +1,401 @@ +package com.bekvon.bukkit.CMIGUI; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.bekvon.bukkit.CMIGUI.GUIManager.GUIClickType; +import com.bekvon.bukkit.CMIGUI.GUIManager.GUIFieldType; +import com.bekvon.bukkit.cmiLib.CMIItemStack; +import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIReflections; +import com.bekvon.bukkit.residence.Residence; + +public class CMIGuiButton { + + private Integer slot = null; + private GUIFieldType fieldType = GUIFieldType.Locked; + private boolean closeInv = false; + + private HashMap> commandMap = new HashMap>(); + private List permissions = new ArrayList(); + private ItemStack item = null; + + @Override + public CMIGuiButton clone() { + CMIGuiButton b = new CMIGuiButton(slot, fieldType, item); + b.setPermissions(new ArrayList(permissions)); + b.setCommandMap(new HashMap>(commandMap)); + return b; + } + + public CMIGuiButton(Integer slot, GUIFieldType fieldType, ItemStack item) { + this.slot = slot; + this.fieldType = fieldType; + this.item = item == null ? null : item.clone(); + } + + public CMIGuiButton(Integer slot) { + this.slot = slot; + } + +// public void hideItemFlags() { +// if (item != null) +// item = CMI.getInstance().getNMS().HideFlag(item, 63); +// } + + public CMIGuiButton(ItemStack item) { + this.item = item == null ? null : item.clone(); + } + + public CMIGuiButton(CMIMaterial mat) { + this.item = mat == null ? null : mat.newItemStack(); + } + + public CMIGuiButton(Integer slot, CMIItemStack item) { + this(slot, item.getItemStack()); + } + + public CMIGuiButton(Integer slot, Material material) { + this(slot, CMIMaterial.get(material), null); + } + + public CMIGuiButton(Integer slot, CMIMaterial material) { + this(slot, material, null); + } + + @Deprecated + public CMIGuiButton(Integer slot, Material material, int data) { + this(slot, material, data, null); + } + + public CMIGuiButton(Integer slot, Material material, String name) { + this(slot, CMIMaterial.get(material), name); + } + + public CMIGuiButton(Integer slot, CMIMaterial material, String name) { + this.slot = slot; + this.item = material == null ? null : material.newItemStack(); + if (name != null) { + ItemMeta meta = this.item.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); + this.item.setItemMeta(meta); + } + } + + @Deprecated + public CMIGuiButton(Integer slot, Material material, int data, String name) { + this.slot = slot; + this.item = new ItemStack(material, 1, (short) data); + if (name != null) { + ItemMeta meta = this.item.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); + this.item.setItemMeta(meta); + } + } + + public CMIGuiButton(Integer slot, ItemStack item) { + this.slot = slot; + this.item = item == null ? null : item.clone(); + if (this.item != null && this.item.getDurability() == 32767) { + CMIMaterial d = CMIMaterial.getRandom(CMIMaterial.get(this.item)); + if (d != null && d.getLegacyData() != -1) + this.item.setDurability((short) d.getLegacyData()); + } + } + + private int schedId = -1; + private int updateInterval = 20; + private int ticks = 0; + private CMIGui sgui; + + public void setGui(CMIGui sgui) { + this.sgui = sgui; + } + + public void startAutoUpdate(int intervalTicks) { + updateInterval = intervalTicks; + tasker(); + } + + @Deprecated + public void startAutoUpdate(CMIGui sgui, int intervalTicks) { + updateInterval = intervalTicks; + this.sgui = sgui; + tasker(); + } + + private void tasker() { + if (schedId != -1) { + Bukkit.getScheduler().cancelTask(schedId); + schedId = -1; + } + CMIGuiButton b = this; + schedId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Residence.getInstance(), new Runnable() { + @Override + public void run() { + ticks++; + if (sgui != null && GUIManager.getGui(sgui.getPlayer()) != sgui) { + if (schedId != -1) { + Bukkit.getScheduler().cancelTask(schedId); + schedId = -1; + return; + } + } + updateLooks(); + update(sgui); + if (sgui != null) + sgui.updateButton(b); + } + }, 20L, updateInterval); + } + + public void updateLooks() { + + } + + public void update() { + if (this.sgui != null) + sgui.updateButton(this); + } + + public void update(CMIGui gui) { + if (gui != null) + gui.updateButton(this); + } + + public Integer getSlot() { + return slot; + } + + public CMIGuiButton setSlot(Integer slot) { + this.slot = slot; + return this; + } + + public GUIFieldType getFieldType() { + return fieldType; + } + + public CMIGuiButton setFieldType(GUIFieldType fieldType) { + this.fieldType = fieldType; + return this; + } + + public CMIGuiButton lockField() { + this.fieldType = GUIFieldType.Locked; + return this; + } + + public CMIGuiButton unlockField() { + this.fieldType = GUIFieldType.Free; + return this; + } + + public boolean isLocked() { + return this.fieldType.equals(GUIFieldType.Locked); + } + + public List getPermissions() { + return permissions; + } + + public CMIGuiButton addPermission(String perm) { + this.permissions.add(perm); + return this; + } + + public void setPermissions(List permissions) { + this.permissions = permissions; + } + + public List getCommands(GUIClickType type) { + List list = commandMap.get(type); + if (list == null) + list = new ArrayList(); + return list; + } + + public CMIGuiButton setName(String name) { + if (this.item == null) + return this; + ItemMeta meta = this.item.getItemMeta(); + if (meta != null) { + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); + this.item.setItemMeta(meta); + } + return this; + } + + public CMIGuiButton addLore(List l) { + l = spreadList(l); + for (String one : l) { + addLore(one); + } + return this; + } + + public List spreadList(List ls) { + List s = new ArrayList(); + for (int i = 0; i < ls.size(); i++) { + if (ls.get(i).contains(" \\n")) { + s.addAll(Arrays.asList(ls.get(i).split(" \\\\n"))); + } else if (ls.get(i).contains(" \n")) { + s.addAll(Arrays.asList(ls.get(i).split(" \\n"))); + } else + s.add(ls.get(i)); + } + return s; + } + + public CMIGuiButton addLore(String l) { + if (this.item == null) + return this; + ItemMeta meta = this.item.getItemMeta(); + + if (meta != null) { + List lore = meta.getLore(); + if (lore == null) + lore = new ArrayList(); + + if (l.contains("\\n")) { + String[] split = l.split("\\\\n"); + for (String one : split) { + lore.add(ChatColor.translateAlternateColorCodes('&', one)); + } + } else if (l.contains("\n")) { + String[] split = l.split("\\n"); + for (String one : split) { + lore.add(ChatColor.translateAlternateColorCodes('&', one)); + } + } else + lore.add(ChatColor.translateAlternateColorCodes('&', l)); + meta.setLore(lore); + this.item.setItemMeta(meta); + } + return this; + } + + public CMIGuiButton clearLore() { + if (this.item == null) + return this; + ItemMeta meta = this.item.getItemMeta(); + if (meta != null) { + meta.setLore(new ArrayList()); + this.item.setItemMeta(meta); + } + return this; + } + + public CMIGuiButton addItemName(String name) { + if (this.item == null) + return this; + ItemMeta meta = this.item.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); + this.item.setItemMeta(meta); + return this; + } + + public CMIGuiButton addCommand(String command) { + return addCommand(null, command); + } + + public CMIGuiButton addCommand(String command, CommandType vis) { + return addCommand(null, command, vis); + } + + public CMIGuiButton addCommand(GUIClickType type, String command) { + return addCommand(type, command, CommandType.gui); + } + + public CMIGuiButton addCommand(GUIClickType type, String command, CommandType vis) { + if (type == null) { + for (GUIClickType one : GUIClickType.values()) { + List list = commandMap.get(one); + if (list == null) + list = new ArrayList(); + list.add(new GUIButtonCommand(command, vis)); + commandMap.put(one, list); + } + } else { + List list = commandMap.get(type); + if (list == null) + list = new ArrayList(); + list.add(new GUIButtonCommand(command, vis)); + commandMap.put(type, list); + } + return this; + } + + public void click() { +// click(null, null); + } + + public void click(GUIClickType type) { +// click(type, null); + } + + public CMIGuiButton addCommand(Location loc) { + if (loc == null) + return this; + addCommand("cmi tppos " + loc.getWorld().getName() + " " + loc.getX() + " " + loc.getY() + " " + loc.getBlockZ() + " " + loc.getPitch() + " " + loc.getYaw()); + return this; + } + + public ItemStack getItem() { + return item; + } + + public ItemStack getItem(Player player) { + + if (item != null) { + ItemStack i = item.clone(); + + if (this.isLocked()) + i = CMIReflections.setNbt(i, GUIManager.CMIGUIIcon, GUIManager.LIProtection); + + ItemMeta meta = i.hasItemMeta() ? i.getItemMeta() : null; + + if (meta != null) + i.setItemMeta(meta); + return i; + } + + return item; + } + + public CMIGuiButton setItem(ItemStack item) { + this.item = item == null ? null : item.clone(); + return this; + } + + public void setCommandMap(HashMap> commandMap) { + this.commandMap = commandMap; + } + + public boolean isCloseInv() { + return closeInv; + } + + public void setCloseInv(boolean closeInv) { + this.closeInv = closeInv; + } + + public CMIGui getGui() { + return sgui; + } + + public int getTicks() { + return ticks; + } + +} diff --git a/src/com/bekvon/bukkit/CMIGUI/CommandType.java b/src/com/bekvon/bukkit/CMIGUI/CommandType.java new file mode 100644 index 000000000..11bc67e20 --- /dev/null +++ b/src/com/bekvon/bukkit/CMIGUI/CommandType.java @@ -0,0 +1,5 @@ +package com.bekvon.bukkit.CMIGUI; + +public enum CommandType { + gui, warmup, acmd, rank, silent +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/CMIGUI/GUIButtonCommand.java b/src/com/bekvon/bukkit/CMIGUI/GUIButtonCommand.java new file mode 100644 index 000000000..734decb11 --- /dev/null +++ b/src/com/bekvon/bukkit/CMIGUI/GUIButtonCommand.java @@ -0,0 +1,32 @@ +package com.bekvon.bukkit.CMIGUI; + +class GUIButtonCommand { + private String command; + private CommandType vis = CommandType.gui; + + public GUIButtonCommand(String command) { + this.command = command; + } + + public GUIButtonCommand(String command, CommandType vis) { + this.command = command; + this.vis = vis; + } + + public String getCommand() { + return command; + } + + public void setCommand(String command) { + this.command = command; + } + + public CommandType getVis() { + return vis; + } + + public void setVis(CommandType vis) { + this.vis = vis; + } + +} diff --git a/src/com/bekvon/bukkit/CMIGUI/GUIListener.java b/src/com/bekvon/bukkit/CMIGUI/GUIListener.java new file mode 100644 index 000000000..b54a349f3 --- /dev/null +++ b/src/com/bekvon/bukkit/CMIGUI/GUIListener.java @@ -0,0 +1,176 @@ +package com.bekvon.bukkit.CMIGUI; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.cmiLib.CMIReflections; +import com.bekvon.bukkit.residence.Residence; + +public class GUIListener implements Listener { + Residence plugin; + + public GUIListener(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onNormalInventoryClose(InventoryCloseEvent event) { + + final Player player = (Player) event.getPlayer(); + if (GUIManager.isOpenedGui(player)) { + if (GUIManager.removePlayer(player)) { + player.updateInventory(); + clearIconItems(player); + } + } + } + + private void clearIconItems(Player player) { + for (ItemStack one : player.getInventory().getContents()) { + Object res = CMIReflections.getNbt(one, GUIManager.CMIGUIIcon); + if (res == null || !(res instanceof String) || !((String) res).equalsIgnoreCase(GUIManager.LIProtection)) + continue; + player.getInventory().remove(one); + } + } + + private HashMap LastClick = new HashMap(); + + private boolean canClickByTimer(UUID uuid) { + Long time = LastClick.get(uuid); + if (time == null) { + LastClick.put(uuid, System.currentTimeMillis()); + return true; + } + + if (time + 51 > System.currentTimeMillis()) { + LastClick.put(uuid, System.currentTimeMillis()); + return false; + } + + LastClick.put(uuid, System.currentTimeMillis()); + return true; + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onInventoryClick(final InventoryClickEvent event) { + + if (event.isCancelled()) { + if (!event.getWhoClicked().getGameMode().toString().equalsIgnoreCase("Spectator")) + return; + } + final Player player = (Player) event.getWhoClicked(); + + if (!GUIManager.isOpenedGui(player)) + return; + + CMIGui gui = GUIManager.getGui(player); + + if (event.getClick() == ClickType.DOUBLE_CLICK || event.getHotbarButton() != -1) { + event.setCancelled(true); + return; + } + + if (!gui.isAllowShift() && event.isShiftClick()) + event.setCancelled(true); + + if (!event.getAction().equals(InventoryAction.PICKUP_ALL) && + !event.getAction().equals(InventoryAction.PICKUP_ONE) && + !event.getAction().equals(InventoryAction.PICKUP_HALF) && + !event.getAction().equals(InventoryAction.PICKUP_SOME) && + !event.getAction().equals(InventoryAction.PLACE_ALL) && + !event.getAction().equals(InventoryAction.PLACE_ONE) && + !event.getAction().equals(InventoryAction.PLACE_SOME) && + !gui.isAllowShift() && !event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY)) + event.setCancelled(true); + + if (!gui.isAllowPickUpAll() && !canClickByTimer(player.getUniqueId())) { + event.setCancelled(true); + return; + } + + final List buttons = new ArrayList(); + buttons.add(event.getRawSlot()); + if (!GUIManager.canClick(player, buttons)) { + event.setCancelled(true); + } + + if (GUIManager.isLockedPart(player, buttons)) + event.setCancelled(true); + +// Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { +// @Override +// public void run() { + InventoryAction action = event.getAction(); + GUIManager.processClick(player, buttons, GUIManager.getClickType(event.isLeftClick(), event.isShiftClick(), action)); +// } +// }, 1); + +// Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { +// @Override +// public void run() { +// clearIconItems(player); +// } +// }, 1); + + } + +// @EventHandler(priority = EventPriority.MONITOR) +// public void onInventoryClicks(final InventoryClickEvent event) { +// final Player player = (Player) event.getWhoClicked(); +// } +// +// @EventHandler(priority = EventPriority.MONITOR) +// public void onInventoryClicks(final InventoryDragEvent event) { +// final Player player = (Player) event.getWhoClicked(); +// } + + @EventHandler(priority = EventPriority.NORMAL) + public void onInventoryMove(final InventoryDragEvent event) { + if (event.isCancelled()) { + if (!event.getWhoClicked().getGameMode().toString().equalsIgnoreCase("Spectator")) + return; + } + final Player player = (Player) event.getWhoClicked(); + + if (!GUIManager.isOpenedGui(player)) + return; + + CMIGui gui = GUIManager.getGui(player); + + if (!gui.isAllowPickUpAll() && !canClickByTimer(player.getUniqueId())) { + event.setCancelled(true); + return; + } + + final List buttons = new ArrayList(); + buttons.addAll(event.getRawSlots()); + if (!GUIManager.canClick(player, buttons)) + event.setCancelled(true); + + if (GUIManager.isLockedPart(player, buttons)) + event.setCancelled(true); + +// Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { +// @Override +// public void run() { + + GUIManager.processClick(player, buttons, GUIManager.getClickType(true, false, null)); +// } +// }, 1); + } + +} diff --git a/src/com/bekvon/bukkit/CMIGUI/GUIManager.java b/src/com/bekvon/bukkit/CMIGUI/GUIManager.java new file mode 100644 index 000000000..161203519 --- /dev/null +++ b/src/com/bekvon/bukkit/CMIGUI/GUIManager.java @@ -0,0 +1,354 @@ +package com.bekvon.bukkit.CMIGUI; + +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; +import java.util.logging.Level; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.server.ServerCommandEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.cmiLib.CMIReflections; +import com.bekvon.bukkit.residence.Residence; + +public class GUIManager { + + private static HashMap map = new HashMap(); + + public final static String CMIGUIIcon = "CMIGUIIcon"; + public final static String LIProtection = "LIProtection"; + + static { + registerListener(); + } + + public static void registerListener() { + Residence.getInstance().getServer().getPluginManager().registerEvents(new GUIListener(Residence.getInstance()), Residence.getInstance()); + } + + public enum GUIButtonLocation { + topLeft(0, 0), topRight(0, 1), bottomLeft(1, 0), bottomRight(1, 1); + private Integer row; + private Integer collumn; + + GUIButtonLocation(Integer row, Integer collumn) { + this.collumn = collumn; + this.row = row; + } + + public Integer getRow() { + return row; + } + + public Integer getCollumn() { + return collumn; + } + + } + + public enum GUIRows { + r1(1), r2(2), r3(3), r4(4), r5(5), r6(6); + private int rows; + + GUIRows(int rows) { + this.rows = rows; + } + + public Integer getFields() { +// if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { +// return rows * 9 < 27 ? 27 : rows * 9; +// } + return rows * 9; + } + + public Integer getRows() { + return rows; + } + + public static GUIRows getByRows(Integer rows) { + if (rows > 9) + rows = rows / 9; + for (GUIRows one : GUIRows.values()) { + if (one.getRows().equals(rows)) + return one; + } + return GUIRows.r6; + } + } + + public enum GUIFieldType { + Free, Locked + } + + public enum InvType { + Gui, Main, Quickbar + } + + public enum CmiInventoryType { + regular, SavedInv, EditableInv, RecipeCreator, ArmorStandEditor, ArmorStandCopy, EntityInventoryEditor, Recipes, SellHand + } + + public enum GUIClickType { + Left, LeftShift, Right, RightShift, MiddleMouse + } + + public void closeAll() { + for (Entry one : map.entrySet()) { + Player player = Bukkit.getPlayer(one.getKey()); + if (player == null) + continue; + player.closeInventory(); + } + } + + public static GUIClickType getClickType(boolean left, boolean shift, InventoryAction action) { + + if (!left && !shift && (action.equals(InventoryAction.NOTHING) || action.equals(InventoryAction.CLONE_STACK))) + return GUIClickType.MiddleMouse; + + if (left && !shift) { + return GUIClickType.Left; + } else if (left && shift) { + return GUIClickType.LeftShift; + } else if (!left && !shift) { + return GUIClickType.Right; + } else { + return GUIClickType.RightShift; + } + } + + public static boolean processClick(final Player player, List buttons, final GUIClickType clickType) { + CMIGui gui = map.get(player.getUniqueId()); + if (gui == null) + return false; + int clicks = 0; + for (Integer one : buttons) { + + final CMIGuiButton button = gui.getButtons().get(one); + + if (button == null) + continue; + clicks++; + boolean canClick = true; + + if (canClick) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { + @Override + public void run() { + + for (GUIButtonCommand oneC : button.getCommands(clickType)) { + GUIManager.performCommand(player, oneC.getCommand(), oneC.getVis()); + } + } + }, 1); + } + + button.click(); + button.click(clickType); +// button.updateLooks(); +// button.update(gui); + + if (button.isCloseInv()) + player.closeInventory(); + + if (!button.getCommands(clickType).isEmpty()) + break; + } + if (clicks == 0) + gui.outsideClick(clickType); + + return false; + } + + public static void performCommand(CommandSender sender, String command, CommandType type) { + if (sender instanceof Player) { + performCommand((Player) sender, command, type); + } else { + ServerCommandEvent event = new ServerCommandEvent(sender, command.startsWith("/") ? command : "/" + command); + Bukkit.getServer().getPluginManager().callEvent(event); + if (!event.isCancelled()) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), event.getCommand().startsWith("/") ? event.getCommand().substring(1, event.getCommand().length()) : event.getCommand()); + } + if (!type.equals(CommandType.silent)) + Bukkit.getLogger().log(Level.INFO, sender.getName() + " issued " + type.name() + " command: /" + command); + } + } + + public static void performCommand(Player player, String command, CommandType type) { + if (player == null) { + Residence.getInstance().consoleMessage("&cCant perform command (" + command + "). Player is NULL"); + return; + } + if (command == null) { + Residence.getInstance().consoleMessage("&cCant perform command (" + command + "). Command is NULL"); + return; + } + PlayerCommandPreprocessEvent event = new PlayerCommandPreprocessEvent(player, command.startsWith("/") ? command : "/" + command); + Bukkit.getServer().getPluginManager().callEvent(event); + if (!event.isCancelled()) { + player.performCommand(event.getMessage().startsWith("/") ? event.getMessage().substring(1, event.getMessage().length()) : event.getMessage()); + } + if (!type.equals(CommandType.silent)) + Bukkit.getLogger().log(Level.INFO, player.getName() + " issued " + type.name() + " command: /" + command); + } + + public static boolean isLockedPart(Player player, List buttons) { + CMIGui gui = map.get(player.getUniqueId()); + if (gui == null) + return false; + + int size = gui.getInv().getSize(); + int mainInvMax = size + 36 - 9; + int quickbar = size + 36; + + for (Integer one : buttons) { + if (one > quickbar || quickbar < 0) + continue; + if (one < size && (gui.isLocked(InvType.Gui) && gui.isPermLocked(InvType.Gui))) { + return true; + } else if (one >= size && one < mainInvMax && (gui.isLocked(InvType.Main) && gui.isPermLocked(InvType.Main))) { + return true; + } else if (one >= mainInvMax && one < quickbar && ((gui.isLocked(InvType.Quickbar) && gui.isPermLocked(InvType.Quickbar)) || (gui.isLocked(InvType.Main) && gui.isPermLocked(InvType.Main)))) { + return true; + } + } + + return false; + } + + public static boolean canClick(Player player, List buttons) { + try { + CMIGui gui = map.get(player.getUniqueId()); + if (gui == null) + return true; + + for (Integer one : buttons) { + CMIGuiButton button = gui.getButtons().get(one); + if (button == null) + continue; + if (button.getFieldType() == GUIFieldType.Locked) + return false; + } + } catch (Exception e) { + return false; + } + return true; + } + + public static CMIGui getGui(Player player) { + return map.get(player.getUniqueId()); + } + + public static boolean isOpenedGui(Player player) { + CMIGui gui = map.get(player.getUniqueId()); + if (gui == null) + return false; + if (player.getOpenInventory() == null) + return false; +// if (!player.getOpenInventory().getTopInventory().equals(gui.getInv())) +// return false; + return true; + } + + public static boolean removePlayer(Player player) { + CMIGui removed = map.remove(player.getUniqueId()); + if (removed == null) + return false; + if (player.getOpenInventory() != null && player.getOpenInventory().getTopInventory().equals(removed.getInv())) + player.closeInventory(); + + removed.processClose(); + removed.onClose(); + + return true; + } + + public static void generateInventory(CMIGui gui) { + Inventory GuiInv = null; + if (gui.getInvSize() != null) { + GuiInv = Bukkit.createInventory(null, gui.getInvSize().getFields(), gui.getTitle()); + } else { + GuiInv = Bukkit.createInventory(null, gui.getInvType(), gui.getTitle()); + } + + if (GuiInv == null) + return; + + for (Entry one : gui.getButtons().entrySet()) { + if (one.getKey() > GuiInv.getSize()) + continue; + try { + ItemStack item = one.getValue().getItem(gui.getPlayer()); + item = item == null ? null : item.clone(); + if (item != null && one.getValue().isLocked()) { + item = CMIReflections.setNbt(item, CMIGUIIcon, LIProtection); +// if (gui.getPlayer().getName().equals("Zrips")) +// one.getValue().unlockField(); + } + GuiInv.setItem(one.getKey(), item); + } catch (ArrayIndexOutOfBoundsException e) { +// e.printStackTrace(); + break; + } + } + gui.setInv(GuiInv); + } + +// public void updateInventory(CMIGui old, CMIGui gui) { +// +// Inventory GuiInv = gui.getInv(); +// if (GuiInv == null) +// return; +// +// plugin.getNMS().updateInventoryTitle(gui.getPlayer(), gui.getTitle()); +// +// for (Entry one : gui.getButtons().entrySet()) { +// if (one.getKey() > GuiInv.getSize()) +// continue; +// GuiInv.setItem(one.getKey(), one.getValue().getItem()); +// } +// gui.setInv(GuiInv); +// } + + public static void openGui(CMIGui gui) { + + Player player = gui.getPlayer(); + + CMIGui oldGui = null; + if (isOpenedGui(player)) { + oldGui = getGui(player); + if (!gui.isSimilar(oldGui)) { + oldGui = null; + } + } + if (oldGui == null) { + generateInventory(gui); + player.closeInventory(); + player.openInventory(gui.getInv()); + gui.onOpen(); + map.put(player.getUniqueId(), gui); + } else { + updateContent(gui); + } + + } + + public static void updateContent(CMIGui gui) { + Player player = gui.getPlayer(); + if (player.getOpenInventory() == null || player.getOpenInventory().getTopInventory() == null) { + player.closeInventory(); + } + CMIReflections.updateInventoryTitle(player, gui.getTitle()); + player.getOpenInventory().getTopInventory().setContents(gui.getInv().getContents()); + gui.setInv(player.getOpenInventory().getTopInventory()); + map.put(player.getUniqueId(), gui); + } + +} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java index 755e2f2dc..477b010bd 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java @@ -4,17 +4,19 @@ package com.bekvon.bukkit.cmiLib; +import java.lang.reflect.Constructor; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; - public class CMIReflections { private static Class CraftServerClass; @@ -22,6 +24,12 @@ public class CMIReflections { private static Class CraftItemStack; private static Class Item; private static Class IStack; + private static Class NBTTagCompound; + private static Class CraftContainer; + private static Class CraftContainers; + private static Class PacketPlayOutOpenWindow; + private static Class CraftPlayer; + public static Class nmsChatSerializer; static { initialize(); @@ -32,6 +40,38 @@ public class CMIReflections { // } private static void initialize() { + try { + if (!Version.isCurrentHigher(Version.v1_8_R2)) + nmsChatSerializer = getMinecraftClass("ChatSerializer"); + else // 1_8_R2 moved to IChatBaseComponent + nmsChatSerializer = getMinecraftClass("IChatBaseComponent$ChatSerializer"); + } catch (Throwable e) { + e.printStackTrace(); + } + try { + CraftPlayer = getBukkitClass("entity.CraftPlayer"); + } catch (Throwable e) { + e.printStackTrace(); + } + try { + CraftContainer = getMinecraftClass("Container"); + } catch (Throwable e) { + } + try { + CraftContainers = getMinecraftClass("Containers"); + } catch (Throwable e) { + } + + try { + PacketPlayOutOpenWindow = getMinecraftClass("PacketPlayOutOpenWindow"); + } catch (Throwable e) { + e.printStackTrace(); + } + try { + NBTTagCompound = getMinecraftClass("NBTTagCompound"); + } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) { + e.printStackTrace(); + } try { CraftServerClass = getBukkitClass("CraftServer"); } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) { @@ -59,6 +99,142 @@ private static void initialize() { } } + private static Integer getActiveContainerId(Object entityplayer) { + try { + Field field = entityplayer.getClass().getField("activeContainer"); + Object container = CraftContainer.cast(field.get(entityplayer)); + Field field2 = container.getClass().getField("windowId"); + Object ids = field2.get(container); + return (int) ids; + } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + + return null; + } + + private static Object getContainer(String name) { + try { + Field field = CraftContainers.getDeclaredField(name); + return field.get(CraftContainers); + } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) { + e.printStackTrace(); + } + return null; + } + + public static void updateInventoryTitle(Player p, String title) { + if (title.length() > 32) { + title = title.substring(0, 31) + "~"; + } + + try { + + if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { + Object entityplayer = CraftPlayer.getMethod("getHandle").invoke(p); + + Object s = getContainer("GENERIC_9X1"); + switch (p.getOpenInventory().getTopInventory().getSize()) { + case 9: + break; + case 18: + s = getContainer("GENERIC_9X2"); + break; + case 27: + s = getContainer("GENERIC_9X3"); + break; + case 36: + s = getContainer("GENERIC_9X4"); + break; + case 45: + s = getContainer("GENERIC_9X5"); + break; + case 54: + s = getContainer("GENERIC_9X6"); + break; + } + + Constructor packet = PacketPlayOutOpenWindow.getConstructor(int.class, CraftContainers, getMinecraftClass("IChatBaseComponent")); + Object newPack = packet.newInstance(getActiveContainerId(entityplayer), s, textToIChatBaseComponent("{\"text\": \"" + title + "\"}")); + + sendPlayerPacket(p, newPack); + + Field field = entityplayer.getClass().getField("activeContainer"); + Object container = CraftContainer.cast(field.get(entityplayer)); + + Method meth = entityplayer.getClass().getMethod("updateInventory", CraftContainer); + meth.invoke(entityplayer, container); + } else if (Version.isCurrentEqualOrHigher(Version.v1_8_R2)) { + + Object entityplayer = CraftPlayer.getMethod("getHandle").invoke(p); + + Constructor packet = PacketPlayOutOpenWindow.getConstructor(int.class, String.class, getMinecraftClass("IChatBaseComponent"), int.class); + Object newPack = packet.newInstance(getActiveContainerId(entityplayer), "minecraft:chest", textToIChatBaseComponent("{\"text\": \"" + title + "\"}"), p.getOpenInventory().getTopInventory() + .getSize()); + + sendPlayerPacket(p, newPack); + + Field field = entityplayer.getClass().getField("activeContainer"); + Object container = CraftContainer.cast(field.get(entityplayer)); + + Method meth = entityplayer.getClass().getMethod("updateInventory", CraftContainer); + meth.invoke(entityplayer, container); + + } + } catch (Throwable e) { + e.printStackTrace(); + } + } + + public static Object textToIChatBaseComponent(String text) { + try { + Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, ChatColor.translateAlternateColorCodes('&', text)); + return serialized; + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { + e.printStackTrace(); + } + return text; + } + + public static Object getPlayerHandle(Player player) { + Object handle = null; + try { + handle = player.getClass().getMethod("getHandle").invoke(player); + } catch (Exception e) { + e.printStackTrace(); + } + return handle; + } + + private static Object getPlayerConnection(Player player) { + Object connection = null; + try { + Object handle = getPlayerHandle(player); + connection = handle.getClass().getField("playerConnection").get(handle); + } catch (Exception e) { + e.printStackTrace(); + } + return connection; + } + + public static Class getClass(String classname) { + try { + String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3]; + String path = classname.replace("{nms}", "net.minecraft.server." + version) + .replace("{nm}", "net.minecraft." + version) + .replace("{cb}", "org.bukkit.craftbukkit.." + version); + return Class.forName(path); + } catch (Throwable t) { + t.printStackTrace(); + return null; + } + } + + public static void sendPlayerPacket(Player player, Object packet) throws Exception { + Object connection = getPlayerConnection(player); + connection.getClass().getMethod("sendPacket", getClass("{nms}.Packet")).invoke(connection, packet); + } + private static Class getBukkitClass(String nmsClassString) throws ClassNotFoundException { return Class.forName("org.bukkit.craftbukkit." + Version.getCurrent() + "." + nmsClassString); } @@ -67,11 +243,33 @@ public static Class getMinecraftClass(String nmsClassString) throws ClassNotF return Class.forName("net.minecraft.server." + Version.getCurrent() + "." + nmsClassString); } + public static ItemStack setNbt(ItemStack item, String path, String value) { + if (item == null) + return null; + try { + Object nmsStack = asNMSCopy(item); + if (nmsStack == null) + return item; + Method methTag = nmsStack.getClass().getMethod("getTag"); + Object tag = methTag.invoke(nmsStack); + if (tag == null) + tag = NBTTagCompound.newInstance(); + Method meth = tag.getClass().getMethod("setString", String.class, String.class); + meth.invoke(tag, path, value); + Method meth2 = nmsStack.getClass().getMethod("setTag", NBTTagCompound); + meth2.invoke(nmsStack, tag); + return (ItemStack) asBukkitCopy(nmsStack); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + public static String getItemMinecraftName(ItemStack item) { try { Object nmsStack = asNMSCopy(item); - + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { Object pre = nmsStack.getClass().getMethod("getItem").invoke(nmsStack); Object n = pre.getClass().getMethod("getName").invoke(pre); @@ -79,7 +277,7 @@ public static String getItemMinecraftName(ItemStack item) { Object lla = ll.getMethod("a").invoke(ll); return (String) lla.getClass().getMethod("a", String.class).invoke(lla, (String) n); } - + Field field = Item.getField("REGISTRY"); Object reg = field.get(field); Method meth = reg.getClass().getMethod("b", Object.class); @@ -115,7 +313,7 @@ public static Object asNMSCopy(ItemStack item) { } } - public Object asBukkitCopy(Object item) { + public static Object asBukkitCopy(Object item) { try { Method meth = CraftItemStack.getMethod("asBukkitCopy", IStack); return meth.invoke(CraftItemStack, item); @@ -128,6 +326,35 @@ public Object getCraftServer() { return CraftServer; } + public static Object getNbt(ItemStack item, String path) { + if (item == null) + return null; + try { + Object nbt = getNbt(item); + if (nbt == null) + return null; + + Method meth = nbt.getClass().getMethod("getString", String.class); + Object res = meth.invoke(nbt, path); + return res; + } catch (Throwable e) { + return null; + } + } + + public static Object getNbt(ItemStack item) { + if (item == null) + return null; + try { + Object nmsStack = asNMSCopy(item); + Method methTag = nmsStack.getClass().getMethod("getTag"); + Object tag = methTag.invoke(nmsStack); + return tag; + } catch (Throwable e) { + return null; + } + } + public static ItemStack getItemInOffHand(Player player) { if (Version.getCurrent().isLower(Version.v1_9_R1)) return null; diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index c429dcd60..f4a966a85 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -38,6 +38,7 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.YmlMaker; @@ -220,9 +221,7 @@ public class ConfigManager { protected int rtCooldown; protected int rtMaxTries; - protected ItemStack GuiTrue; - protected ItemStack GuiFalse; - protected ItemStack GuiRemove; + private HashMap guiBottonStates = new HashMap(); private boolean enforceAreaInsideArea; @@ -355,7 +354,7 @@ public void copyOverTranslations() { } catch (ClassNotFoundException e1) { e1.printStackTrace(); } - + for (String one : languages) { File file = new File(plugin.getDataFolder(), "Language" + File.separator + one + ".yml"); if (!file.exists()) { @@ -1154,19 +1153,19 @@ public void UpdateConfigFile() { CMIMaterial Mat = CMIMaterial.get(c.get("Global.GUI.setTrue", "GREEN_WOOL")); if (Mat == null) Mat = CMIMaterial.GREEN_WOOL; - GuiTrue = Mat.newItemStack(); + guiBottonStates.put(FlagState.TRUE, Mat.newItemStack()); c.addComment("Global.GUI.setFalse", "Item id and data to use when flag is set to false"); Mat = CMIMaterial.get(c.get("Global.GUI.setFalse", "RED_WOOL")); if (Mat == null) Mat = CMIMaterial.RED_WOOL; - GuiFalse = Mat.newItemStack(); + guiBottonStates.put(FlagState.FALSE, Mat.newItemStack()); c.addComment("Global.GUI.setRemove", "Item id and data to use when flag is set to remove"); Mat = CMIMaterial.get(c.get("Global.GUI.setRemove", "LIGHT_GRAY_WOOL")); if (Mat == null) Mat = CMIMaterial.LIGHT_GRAY_WOOL; - GuiRemove = Mat.newItemStack(); + guiBottonStates.put(FlagState.NEITHER, Mat.newItemStack()); c.addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", "This is quite heavy on server side, so enable only if you really need this feature"); @@ -1884,18 +1883,6 @@ public boolean getEnforceAreaInsideArea() { return enforceAreaInsideArea; } - public ItemStack getGuiTrue() { - return GuiTrue; - } - - public ItemStack getGuiFalse() { - return GuiFalse; - } - - public ItemStack getGuiRemove() { - return GuiRemove; - } - public List getRandomTeleport() { return RTeleport; } @@ -1980,6 +1967,11 @@ public boolean isDeductFromBankThenPlayer() { return DeductFromBankThenPlayer; } + public ItemStack getGuiBottonStates(FlagState state) { + return guiBottonStates.get(state); + } + + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 5272fc0c8..00da9f86f 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -720,8 +720,8 @@ public void run() { pmanager = new PermissionListManager(this); NewLanguageManager = new Language(this); - getLM().LanguageReload(); getLocaleManager().LoadLang(getConfigManager().getLanguage()); + getLM().LanguageReload(); try { this.loadYml(); diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index dc2058811..a381c79bc 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -12,7 +12,7 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.gui.SetFlag; +import com.bekvon.bukkit.residence.gui.setFlagInfo; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class pset implements cmd { @@ -104,23 +104,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - ClaimedResidence r = res; - String tplayer = targetPlayer; - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - final SetFlag flag = new SetFlag(r, player, resadmin); - flag.setTargetPlayer(tplayer); - flag.recalculatePlayer(r); - plugin.getPlayerListener().getGUImap().put(player.getUniqueId(), flag); - - Bukkit.getScheduler().runTask(plugin, () -> { - player.openInventory(flag.getInventory()); - }); - - return; - } - }); + plugin.getFlagUtilManager().openPsetFlagGui(player, targetPlayer, res, resadmin, 1); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index cc9c43685..6e202bf94 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -12,7 +11,6 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class set implements cmd { @@ -65,22 +63,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - ClaimedResidence r = res; + plugin.getFlagUtilManager().openSetFlagGui(player, res, resadmin, 1); - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - final SetFlag flag = new SetFlag(r, player, resadmin); - flag.recalculateResidence(r); - plugin.getPlayerListener().getGUImap().put(player.getUniqueId(), flag); - - Bukkit.getScheduler().runTask(plugin, () -> { - player.openInventory(flag.getInventory()); - }); - - return; - } - }); return true; } return false; diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 438426eab..2a045b9b9 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -2,11 +2,23 @@ import java.util.Set; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.CMIGUI.CMIGui; +import com.bekvon.bukkit.CMIGUI.CMIGuiButton; +import com.bekvon.bukkit.CMIGUI.GUIManager.GUIClickType; +import com.bekvon.bukkit.CMIGUI.GUIManager.GUIRows; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.utils.Debug; public class FlagUtil { @@ -38,7 +50,6 @@ public void load() { value = value.replace("-", ":"); CMIMaterial Mat = CMIMaterial.get(value); if (Mat == null) { - Residence.getInstance().consoleMessage(value); Mat = CMIMaterial.STONE; } ItemStack item = Mat.newItemStack(); @@ -47,6 +58,96 @@ public void load() { } } + public void openPsetFlagGui(Player player, String targetPlayer, ClaimedResidence res, boolean resadmin, int page) { + if (player == null || !player.isOnline()) + return; + + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + + setFlagInfo flag = new setFlagInfo(res, player, targetPlayer, resadmin); + flag.recalculate(); + + Bukkit.getScheduler().runTask(plugin, () -> { + CMIGui gui = new CMIGui(player); + gui.setTitle(Residence.getInstance().msg(lm.Gui_Set_Title, res.getName())); + gui.setInvSize(GUIRows.r6); + PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); + + fillButtons(flag, pi, gui); + + gui.open(); + }); + return; + } + }); + } + + private void fillButtons(setFlagInfo flag, PageInfo pi, CMIGui gui) { + gui.clearButtons(); + for (CMIGuiButton one : flag.getButtons()) { + if (pi.isContinue()) + continue; + if (pi.isBreak()) + break; + gui.addButton(one); + gui.updateButton(one); + } + + if (pi.getCurrentPage() < pi.getTotalPages()) { + ItemStack Item = new ItemStack(Material.ARROW); + CMIGuiButton forward = new CMIGuiButton(53, Item) { + @Override + public void click(GUIClickType type) { + fillButtons(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() + 1), gui); + } + }; + forward.setName(Residence.getInstance().msg(lm.General_nextPage)); + gui.addButton(forward); + gui.updateButton(forward); + } + + if (pi.getCurrentPage() > 1) { + ItemStack Item = new ItemStack(Material.ARROW); + CMIGuiButton back = new CMIGuiButton(45, Item) { + @Override + public void click(GUIClickType type) { + fillButtons(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() - 1), gui); + } + }; + back.setName(Residence.getInstance().msg(lm.General_prevPage)); + gui.addButton(back); + gui.updateButton(back); + } + } + + public void openSetFlagGui(Player player, ClaimedResidence res, boolean resadmin, int page) { + if (player == null || !player.isOnline()) + return; + + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + + setFlagInfo flag = new setFlagInfo(res, player, resadmin); + flag.recalculate(); + Bukkit.getScheduler().runTask(plugin, () -> { + CMIGui gui = new CMIGui(player); + gui.setTitle(Residence.getInstance().msg(lm.Gui_Set_Title, res.getName())); + gui.setInvSize(GUIRows.r6); + + PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); + + fillButtons(flag, pi, gui); + + gui.open(); + }); + return; + } + }); + } + public FlagData getFlagData() { return flagData; } diff --git a/src/com/bekvon/bukkit/residence/gui/SetFlag.java b/src/com/bekvon/bukkit/residence/gui/SetFlag.java deleted file mode 100644 index d4a5c70b2..000000000 --- a/src/com/bekvon/bukkit/residence/gui/SetFlag.java +++ /dev/null @@ -1,457 +0,0 @@ -package com.bekvon.bukkit.residence.gui; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryAction; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import com.bekvon.bukkit.residence.utils.Debug; - -public class SetFlag { - - private ClaimedResidence residence; - private Player player; - private String targetPlayer = null; - private Inventory inventory; - private LinkedHashMap permMap = new LinkedHashMap(); - private LinkedHashMap> description = new LinkedHashMap>(); - private List flags = null; - private boolean admin = false; - private int page = 1; - private int pageCount = 1; - - public SetFlag(ClaimedResidence residence, Player player, boolean admin) { - this.residence = residence; - this.player = player; - this.admin = admin; - fillFlagDescriptions(); - } - - public void setAdmin(boolean state) { - this.admin = state; - } - - public boolean isAdmin() { - return this.admin; - } - - public void setTargetPlayer(String player) { - this.targetPlayer = player; - } - - public ClaimedResidence getResidence() { - return this.residence; - } - - public Player getPlayer() { - return this.player; - } - - public Inventory getInventory() { - return this.inventory; - } - - public void toggleFlag(int slot, ClickType click, InventoryAction action) { - ItemStack item = this.inventory.getItem(slot); - if (item == null) - return; - String command = "true"; - if (click.isLeftClick() && action != InventoryAction.MOVE_TO_OTHER_INVENTORY) - command = "true"; - else if (click.isRightClick() && action != InventoryAction.MOVE_TO_OTHER_INVENTORY) - command = "false"; - else if (click.isLeftClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTORY) - command = "remove"; - else if (click.isRightClick() && action == InventoryAction.MOVE_TO_OTHER_INVENTORY) - return; - - if (slot == 53) { - if (page < pageCount) - page++; - recalculateInv(); - return; - } else if (slot == 45) { - if (page > 1) - page--; - recalculateInv(); - return; - } - - String flag = ""; - int i = 0; - for (Entry one : permMap.entrySet()) { - flag = one.getKey(); - if (i == slot) { - break; - } - i++; - } - - String targetPlayerName = targetPlayer == null ? "" : " " + targetPlayer; - String actionType = targetPlayer == null ? "set" : "pset"; - String cmdPrefix = admin ? "resadmin" : "res"; - - Bukkit.dispatchCommand(player, cmdPrefix + " " + actionType + " " + residence.getName() + targetPlayerName + " " + flag + " " + command); - if (Residence.getInstance().getConfigManager().isConsoleLogsShowFlagChanges()) - Residence.getInstance().consoleMessage(player.getName() + " issued server command: /" + cmdPrefix + " " + actionType + " " + residence.getName() + targetPlayerName + " " + flag + " " - + command); - - } - - public void recalculateInv() { - if (targetPlayer == null) - recalculateResidence(residence); - else - recalculatePlayer(residence); - } - - private void fillFlagDescriptions() { - for (Flags flag : Flags.values()) { - List lore = new ArrayList(); - int i = 0; - String sentence = ""; - for (String oneWord : flag.getDesc().split(" ")) { - sentence += oneWord + " "; - if (i > 4) { - lore.add(ChatColor.YELLOW + sentence); - sentence = ""; - i = 0; - } - i++; - } - lore.add(ChatColor.YELLOW + sentence); - description.put(flag, lore); - } - } - - @SuppressWarnings("incomplete-switch") - public void recalculateResidence(ClaimedResidence res) { - if (flags == null) - flags = res.getPermissions().getPosibleFlags(player, true, this.admin); - - Map resFlags = new HashMap(); - Map TempPermMap = new LinkedHashMap(); - - Map globalFlags = Residence.getInstance().getPermissionManager().getAllFlags().getFlags(); - - for (Entry one : res.getPermissions().getFlags().entrySet()) { - if (flags.contains(one.getKey())) { - resFlags.put(one.getKey(), one.getValue()); - } - } - - for (Entry one : globalFlags.entrySet()) { - String fname = one.getKey(); - - Flags flag = Flags.getFlag(fname); - - if (flag != null && !flag.isGlobalyEnabled()) - continue; - - if (!flags.contains(one.getKey())) { - continue; - } - - if (resFlags.containsKey(one.getKey())) - TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? FlagState.TRUE : FlagState.FALSE); - else - TempPermMap.put(one.getKey(), FlagState.NEITHER); - } - - String title = ""; - if (targetPlayer == null) - title = Residence.getInstance().msg(lm.Gui_Set_Title, res.getName()); - else - title = Residence.getInstance().msg(lm.Gui_Pset_Title, targetPlayer, res.getName()); - - if (title.length() > 32) { - title = title.substring(0, Math.min(title.length(), 32)); - } - - Inventory GuiInv = Bukkit.createInventory(null, 54, title); - - if (targetPlayer == null) - TempPermMap.remove("admin"); - - TempPermMap = Residence.getInstance().getSortingManager().sortByKeyASC(TempPermMap); - - FlagData flagData = Residence.getInstance().getFlagUtilManager().getFlagData(); - - pageCount = (int) Math.ceil((double) TempPermMap.size() / (double) 45); - - int start = page * 45 - 45; - int end = page * 45; - - int count = -1; - permMap.clear(); - for (Entry one : TempPermMap.entrySet()) { - count++; - if (count >= end) - break; - if (count < start) - continue; - permMap.put(one.getKey(), one.getValue()); - } - - int i = -1; - for (Entry one : permMap.entrySet()) { - i++; - ItemStack MiscInfo = Residence.getInstance().getConfigManager().getGuiRemove(); - - switch ((FlagState) one.getValue()) { - case FALSE: - MiscInfo = Residence.getInstance().getConfigManager().getGuiFalse(); - break; - case TRUE: - MiscInfo = Residence.getInstance().getConfigManager().getGuiTrue(); - break; - } - - if (flagData.contains(one.getKey())) - MiscInfo = flagData.getItem(one.getKey()); - - if ((FlagState) one.getValue() == FlagState.TRUE) { - ItemMeta im = MiscInfo.getItemMeta(); - im.addEnchant(Enchantment.LUCK, 1, true); - MiscInfo.setItemMeta(im); - } else - MiscInfo.removeEnchantment(Enchantment.LUCK); - - ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); - String flagName = one.getKey(); - Flags flag = Flags.getFlag(flagName); - if (flag != null) - flagName = flag.getName(); - if (flagName == null) - flagName = "Unknown"; - - // Can it be null? - if (MiscInfoMeta == null) - continue; - MiscInfoMeta.setDisplayName(ChatColor.GREEN + flagName); - - List lore = new ArrayList(); - - String variable = ""; - switch ((FlagState) one.getValue()) { - case FALSE: - variable = Residence.getInstance().msg(lm.General_False); - break; - case TRUE: - variable = Residence.getInstance().msg(lm.General_True); - break; - case NEITHER: - variable = Residence.getInstance().msg(lm.General_Removed); - break; - } - lore.add(Residence.getInstance().msg(lm.General_FlagState, variable)); - - if (description.containsKey(flag)) - lore.addAll(description.get(flag)); - - lore.addAll(Residence.getInstance().msgL(lm.Gui_Actions)); - - MiscInfoMeta.setLore(lore); - - MiscInfo.setItemMeta(MiscInfoMeta); - if (i > 53) - break; - GuiInv.setItem(i, MiscInfo); - } - - ItemStack Item = new ItemStack(Material.ARROW); - - ItemMeta meta = Item.getItemMeta(); - if (page > 1) { - meta.setDisplayName(Residence.getInstance().msg(lm.General_prevPage)); - Item.setItemMeta(meta); - GuiInv.setItem(45, Item); - } - - if (page < pageCount) { - meta.setDisplayName(Residence.getInstance().msg(lm.General_nextPage)); - Item.setItemMeta(meta); - GuiInv.setItem(53, Item); - } - - this.inventory = GuiInv; - } - - @SuppressWarnings("incomplete-switch") - public void recalculatePlayer(ClaimedResidence res) { - Map globalFlags = new HashMap(); - for (Flags oneFlag : Flags.values()) { - globalFlags.put(oneFlag.toString(), oneFlag.isEnabled()); - } - - if (flags == null) - flags = res.getPermissions().getPosibleFlags(player, false, this.admin); - Map resFlags = new HashMap(); - - for (Entry one : res.getPermissions().getFlags().entrySet()) { - if (flags.contains(one.getKey())) - resFlags.put(one.getKey(), one.getValue()); - } - - if (targetPlayer != null) { - Set PosibleResPFlags = res.getPermissions().getposibleFlags(); - Map temp = new HashMap(); - for (String one : PosibleResPFlags) { - if (globalFlags.containsKey(one)) - temp.put(one, globalFlags.get(one)); - } - globalFlags = temp; - - Map pFlags = res.getPermissions().getPlayerFlags(targetPlayer); - - if (pFlags != null) - for (Entry one : pFlags.entrySet()) { - resFlags.put(one.getKey(), one.getValue()); - } - } - - LinkedHashMap TempPermMap = new LinkedHashMap(); - - for (Entry one : globalFlags.entrySet()) { - if (!flags.contains(one.getKey())) - continue; - - if (resFlags.containsKey(one.getKey())) - TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? FlagState.TRUE : FlagState.FALSE); - else - TempPermMap.put(one.getKey(), FlagState.NEITHER); - } - - String title = ""; - if (targetPlayer == null) - title = Residence.getInstance().msg(lm.Gui_Set_Title, res.getName()); - else - title = Residence.getInstance().msg(lm.Gui_Pset_Title, targetPlayer, res.getName()); - - if (title.length() > 32) { - title = title.substring(0, Math.min(title.length(), 32)); - } - - Inventory GuiInv = Bukkit.createInventory(null, 54, title); - - TempPermMap = (LinkedHashMap) Residence.getInstance().getSortingManager().sortByKeyASC(TempPermMap); - - FlagData flagData = Residence.getInstance().getFlagUtilManager().getFlagData(); - - pageCount = (int) Math.ceil((double) TempPermMap.size() / (double) 45); - - int start = page * 45 - 45; - int end = page * 45; - - int count = -1; - permMap.clear(); - for (Entry one : TempPermMap.entrySet()) { - count++; - if (count >= end) - break; - if (count < start) - continue; - permMap.put(one.getKey(), one.getValue()); - } - - int i = -1; - for (Entry one : permMap.entrySet()) { - i++; - ItemStack MiscInfo = Residence.getInstance().getConfigManager().getGuiRemove(); - - switch ((FlagState) one.getValue()) { - case FALSE: - MiscInfo = Residence.getInstance().getConfigManager().getGuiFalse(); - break; - case TRUE: - MiscInfo = Residence.getInstance().getConfigManager().getGuiTrue(); - break; - } - - if (flagData.contains(one.getKey())) - MiscInfo = flagData.getItem(one.getKey()); - - if ((FlagState) one.getValue() == FlagState.TRUE) { - ItemMeta im = MiscInfo.getItemMeta(); - im.addEnchant(Enchantment.LUCK, 1, true); - MiscInfo.setItemMeta(im); - } else - MiscInfo.removeEnchantment(Enchantment.LUCK); - - ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); - String flagName = one.getKey(); - Flags flag = Flags.getFlag(flagName); - if (flag != null) - flagName = flag.getName(); - if (flagName == null) - flagName = "Unknown"; - // Can it be null? - if (MiscInfoMeta == null) - continue; - - MiscInfoMeta.setDisplayName(ChatColor.GREEN + flagName); - - List lore = new ArrayList(); - - String variable = ""; - switch ((FlagState) one.getValue()) { - case FALSE: - variable = Residence.getInstance().msg(lm.General_False); - break; - case TRUE: - variable = Residence.getInstance().msg(lm.General_True); - break; - case NEITHER: - variable = Residence.getInstance().msg(lm.General_Removed); - break; - } - lore.add(Residence.getInstance().msg(lm.General_FlagState, variable)); - - if (description.containsKey(flag)) - lore.addAll(description.get(flag)); - - lore.addAll(Residence.getInstance().msgL(lm.Gui_Actions)); - - MiscInfoMeta.setLore(lore); - - MiscInfo.setItemMeta(MiscInfoMeta); - if (i > 53) - break; - GuiInv.setItem(i, MiscInfo); - } - ItemStack Item = new ItemStack(Material.ARROW); - - ItemMeta meta = Item.getItemMeta(); - if (page > 1) { - meta.setDisplayName(Residence.getInstance().msg(lm.General_prevPage)); - Item.setItemMeta(meta); - GuiInv.setItem(45, Item); - } - if (page < pageCount) { - meta.setDisplayName(Residence.getInstance().msg(lm.General_nextPage)); - Item.setItemMeta(meta); - GuiInv.setItem(53, Item); - } - - this.inventory = GuiInv; - } -} diff --git a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java new file mode 100644 index 000000000..4a06f4b2b --- /dev/null +++ b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java @@ -0,0 +1,361 @@ +package com.bekvon.bukkit.residence.gui; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.bekvon.bukkit.CMIGUI.CMIGuiButton; +import com.bekvon.bukkit.CMIGUI.GUIManager.GUIClickType; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import com.bekvon.bukkit.residence.utils.Debug; + +public class setFlagInfo { + + private ClaimedResidence residence; + private Player player; + private String targetPlayer = null; + private LinkedHashMap> description = new LinkedHashMap>(); + private List buttons = new ArrayList(); + private boolean admin = false; + + public setFlagInfo(ClaimedResidence residence, Player player, boolean admin) { + this.residence = residence; + this.player = player; + this.admin = admin; + fillFlagDescriptions(); + } + + public setFlagInfo(ClaimedResidence residence, Player player, String targetPlayer, boolean admin) { + this.residence = residence; + this.player = player; + this.targetPlayer = targetPlayer; + this.admin = admin; + fillFlagDescriptions(); + } + + public void setAdmin(boolean state) { + this.admin = state; + } + + public boolean isAdmin() { + return this.admin; + } + + public ClaimedResidence getResidence() { + return this.residence; + } + + public Player getPlayer() { + return this.player; + } + + private void fillFlagDescriptions() { + for (Flags flag : Flags.values()) { + List lore = new ArrayList(); + int i = 0; + String sentence = ""; + for (String oneWord : flag.getDesc().split(" ")) { + sentence += oneWord + " "; + if (i > 4) { + lore.add(ChatColor.YELLOW + sentence); + sentence = ""; + i = 0; + } + i++; + } + lore.add(ChatColor.YELLOW + sentence); + description.put(flag, lore); + } + } + + public void recalculate() { + if (targetPlayer == null) + recalculateResidence(); + else + recalculatePlayer(); + } + + private void recalculateResidence() { + buttons.clear(); + + List flags = residence.getPermissions().getPosibleFlags(player, true, this.admin); + + Map resFlags = new HashMap(); + Map TempPermMap = new LinkedHashMap(); + + Map globalFlags = Residence.getInstance().getPermissionManager().getAllFlags().getFlags(); + + for (Entry one : residence.getPermissions().getFlags().entrySet()) { + if (flags.contains(one.getKey())) { + resFlags.put(one.getKey(), one.getValue()); + } + } + + for (Entry one : globalFlags.entrySet()) { + String fname = one.getKey(); + + Flags flag = Flags.getFlag(fname); + + if (flag != null && !flag.isGlobalyEnabled()) + continue; + + if (!flags.contains(one.getKey())) { + continue; + } + + if (resFlags.containsKey(one.getKey())) + TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? FlagState.TRUE : FlagState.FALSE); + else + TempPermMap.put(one.getKey(), FlagState.NEITHER); + } + + if (targetPlayer == null) + TempPermMap.remove("admin"); + + TempPermMap = Residence.getInstance().getSortingManager().sortByKeyASC(TempPermMap); + +// FlagData flagData = Residence.getInstance().getFlagUtilManager().getFlagData(); + + LinkedHashMap permMap = new LinkedHashMap(); + for (Entry one : TempPermMap.entrySet()) { + permMap.put(one.getKey(), one.getValue()); + } + + String cmdPrefix = admin ? "resadmin" : "res"; + + int i = 0; + for (Entry one : permMap.entrySet()) { + i = i > 44 ? 0 : i; + + CMIGuiButton button = new CMIGuiButton(i, updateLook(one.getKey())) { + @Override + public void click(GUIClickType type) { + String command = "true"; + switch (type) { + case Left: + break; + case Right: + command = "false"; + break; + case RightShift: + case LeftShift: + case MiddleMouse: + command = "remove"; + break; + default: + break; + } + + Bukkit.dispatchCommand(player, cmdPrefix + " set " + residence.getName() + " " + one.getKey() + " " + command); + if (Residence.getInstance().getConfigManager().isConsoleLogsShowFlagChanges()) + Residence.getInstance().consoleMessage(player.getName() + " issued server command: /" + cmdPrefix + " set " + residence.getName() + " " + one.getKey() + " " + command); + updateLooks(); + } + + @Override + public void updateLooks() { + this.setItem(updateLook(one.getKey())); + this.update(); + } + }; + + buttons.add(button); + i++; + } + description.clear(); + } + + private void recalculatePlayer() { + Map globalFlags = new HashMap(); + for (Flags oneFlag : Flags.values()) { + globalFlags.put(oneFlag.toString(), oneFlag.isEnabled()); + } + + List flags = residence.getPermissions().getPosibleFlags(player, false, this.admin); + + Map resFlags = new HashMap(); + + for (Entry one : residence.getPermissions().getFlags().entrySet()) { + if (flags.contains(one.getKey())) + resFlags.put(one.getKey(), one.getValue()); + } + + if (targetPlayer != null) { + + Set PosibleResPFlags = FlagPermissions.getAllPosibleFlags(); + Map temp = new HashMap(); + for (String one : PosibleResPFlags) { + if (globalFlags.containsKey(one)) + temp.put(one, globalFlags.get(one)); + } + globalFlags = temp; + + Map pFlags = residence.getPermissions().getPlayerFlags(targetPlayer); + + if (pFlags != null) + for (Entry one : pFlags.entrySet()) { + resFlags.put(one.getKey(), one.getValue()); + } + } + + LinkedHashMap TempPermMap = new LinkedHashMap(); + + for (Entry one : globalFlags.entrySet()) { + if (!flags.contains(one.getKey())) + continue; + + if (resFlags.containsKey(one.getKey())) + TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? FlagState.TRUE : FlagState.FALSE); + else + TempPermMap.put(one.getKey(), FlagState.NEITHER); + } + + TempPermMap = (LinkedHashMap) Residence.getInstance().getSortingManager().sortByKeyASC(TempPermMap); + + LinkedHashMap permMap = new LinkedHashMap(); + for (Entry one : TempPermMap.entrySet()) { + permMap.put(one.getKey(), one.getValue()); + } + + String targetPlayerName = targetPlayer == null ? "" : " " + targetPlayer; + String cmdPrefix = admin ? "resadmin" : "res"; + + int i = 0; + for (Entry one : permMap.entrySet()) { + + i = i > 44 ? 0 : i; + + CMIGuiButton button = new CMIGuiButton(i, updateLook(one.getKey())) { + @Override + public void click(GUIClickType type) { + String command = "true"; + switch (type) { + case Left: + break; + case Right: + command = "false"; + break; + case RightShift: + case LeftShift: + case MiddleMouse: + command = "remove"; + break; + default: + break; + } + + Bukkit.dispatchCommand(player, cmdPrefix + " pset " + residence.getName() + targetPlayerName + " " + Flags.getFlag(one.getKey()) + " " + command); + if (Residence.getInstance().getConfigManager().isConsoleLogsShowFlagChanges()) + Residence.getInstance().consoleMessage(player.getName() + " issued server command: /" + cmdPrefix + " pset " + residence.getName() + targetPlayerName + " " + Flags.getFlag(one + .getKey()) + " " + command); + updateLooks(); + } + + @Override + public void updateLooks() { + this.setItem(updateLook(one.getKey())); + this.update(); + } + + }; + i++; + + buttons.add(button); + } + description.clear(); + } + + private ItemStack updateLook(String flagName) { + + Boolean have = null; + FlagPermissions fp = (this.residence.getPermissions()); + + if (this.targetPlayer != null) { + if (fp.playerHas(targetPlayer, residence.getWorld(), flagName, FlagCombo.OnlyTrue)) + have = true; + else if (fp.playerHas(targetPlayer, residence.getWorld(), flagName, FlagCombo.OnlyFalse)) + have = false; + } else { + if (fp.has(Flags.getFlag(flagName), FlagCombo.OnlyTrue)) + have = true; + else if (fp.has(Flags.getFlag(flagName), FlagCombo.OnlyFalse)) + have = false; + } + + FlagState state = FlagState.NEITHER; + if (have == null) { + + } else if (have) + state = FlagState.TRUE; + else + state = FlagState.FALSE; + + ItemStack MiscInfo = Residence.getInstance().getConfigManager().getGuiBottonStates(state).clone(); + + FlagData flagData = Residence.getInstance().getFlagUtilManager().getFlagData(); + + if (flagData.contains(flagName)) + MiscInfo = flagData.getItem(flagName).clone(); + + if (state == FlagState.TRUE) { + ItemMeta im = MiscInfo.getItemMeta(); + im.addEnchant(Enchantment.LUCK, 1, true); + MiscInfo.setItemMeta(im); + } else + MiscInfo.removeEnchantment(Enchantment.LUCK); + + ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); + + Flags flag = Flags.getFlag(flagName); + if (flag != null) + flagName = flag.getName(); + if (flagName == null) + flagName = "Unknown"; + // Can it be null? + if (MiscInfoMeta == null) + return MiscInfo; + MiscInfoMeta.setDisplayName(ChatColor.GREEN + flagName); + List lore = new ArrayList(); + String variable = ""; + switch (state) { + case FALSE: + variable = Residence.getInstance().msg(lm.General_False); + break; + case TRUE: + variable = Residence.getInstance().msg(lm.General_True); + break; + case NEITHER: + variable = Residence.getInstance().msg(lm.General_Removed); + break; + } + lore.add(Residence.getInstance().msg(lm.General_FlagState, variable)); + if (description.containsKey(flag)) + lore.addAll(description.get(flag)); + lore.addAll(Residence.getInstance().msgL(lm.Gui_Actions)); + MiscInfoMeta.setLore(lore); + MiscInfo.setItemMeta(MiscInfoMeta); + + return MiscInfo; + } + + public List getButtons() { + return buttons; + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index f0ac86429..df5adba9e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -4,7 +4,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; import java.util.UUID; @@ -22,7 +21,6 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Hanging; -import org.bukkit.entity.HumanEntity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -32,11 +30,6 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryAction; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerBucketFillEvent; @@ -57,7 +50,6 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.Zrips.CMI.CMI; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.CMIReflections; @@ -77,7 +69,6 @@ import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; -import com.bekvon.bukkit.residence.gui.SetFlag; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -85,7 +76,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -98,8 +88,6 @@ public class ResidencePlayerListener implements Listener { protected boolean chatenabled; protected Set playerToggleChat = new HashSet(); - public Map GUI = new HashMap(); - private Residence plugin; public ResidencePlayerListener(Residence plugin) { @@ -116,10 +104,6 @@ public ResidencePlayerListener(Residence plugin) { this.plugin = plugin; } - public Map getGUImap() { - return GUI; - } - public void reload() { currentRes = new HashMap(); lastUpdate = new HashMap(); @@ -672,42 +656,6 @@ else if (white == 0) } - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onFlagGuiClick(InventoryClickEvent event) { - if (this.getGUImap().isEmpty()) - return; - - Player player = (Player) event.getWhoClicked(); - - if (!this.getGUImap().containsKey(player.getUniqueId())) - return; - - event.setCancelled(true); - int slot = event.getRawSlot(); - - if (slot > 53 || slot < 0) - return; - - SetFlag setFlag = this.getGUImap().get(player.getUniqueId()); - ClickType click = event.getClick(); - InventoryAction action = event.getAction(); - setFlag.toggleFlag(slot, click, action); - setFlag.recalculateInv(); - - if (!player.getOpenInventory().getTopInventory().getType().equals(InventoryType.CHEST)) - return; - - player.getOpenInventory().getTopInventory().setContents(setFlag.getInventory().getContents()); - } - - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onFlagGuiClose(InventoryCloseEvent event) { - if (this.getGUImap().isEmpty()) - return; - HumanEntity player = event.getPlayer(); - this.getGUImap().remove(player.getUniqueId()); - } - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignInteract(PlayerInteractEvent event) { if (event.getPlayer() == null) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 025e89ca0..cf2e5cd76 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -473,6 +473,25 @@ public boolean playerHas(Player player, String world, Flags flag, boolean def) { // return playerHas(player, world, flag.getName(), def); // } + public boolean playerHas(String player, String world, String flag, FlagCombo f) { + switch (f) { + case FalseOrNone: + return !this.playerCheck(player, flag, this.groupCheck(Residence.getInstance().getPlayerManager().getResidencePlayer(player).getGroup(world), flag, localHas(flag, false, true))); +// return !this.playerHas(player, world, flag.toString(), false); + case OnlyFalse: + return !this.playerCheck(player, flag, this.groupCheck(Residence.getInstance().getPlayerManager().getResidencePlayer(player).getGroup(world), flag, localHas(flag, true, true))); +// return !this.playerHas(player, world, flag.toString(), true); + case OnlyTrue: + return this.playerCheck(player, flag, this.groupCheck(Residence.getInstance().getPlayerManager().getResidencePlayer(player).getGroup(world), flag, localHas(flag, false, true))); +// return this.playerHas(player, world, flag.toString(), false); + case TrueOrNone: + return this.playerCheck(player, flag, this.groupCheck(Residence.getInstance().getPlayerManager().getResidencePlayer(player).getGroup(world), flag, localHas(flag, true, true))); +// return this.playerHas(player, world, flag.toString(), true); + default: + return false; + } + } + @Deprecated public boolean playerHas(String player, String world, String flag, boolean def) { ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); @@ -561,6 +580,16 @@ public boolean has(String flag, boolean def, boolean checkParent) { return def; } + private boolean localHas(String flag, boolean def, boolean checkParent) { + if (cuboidFlags.containsKey(flag)) { + return cuboidFlags.get(flag); + } + if (checkParent && parent != null) { + return parent.has(flag, def); + } + return def; + } + public boolean isPlayerSet(String player, String flag) { Map flags = this.getPlayerFlags(player, false); if (flags == null) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index e923ea723..d2036ae9d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -22,7 +22,6 @@ import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidencePermissions extends FlagPermissions { diff --git a/src/com/bekvon/bukkit/residence/text/help/PageInfo.java b/src/com/bekvon/bukkit/residence/text/help/PageInfo.java index c8df587c6..eaf458dda 100644 --- a/src/com/bekvon/bukkit/residence/text/help/PageInfo.java +++ b/src/com/bekvon/bukkit/residence/text/help/PageInfo.java @@ -41,6 +41,10 @@ public boolean isInRange(int place) { return false; } + public boolean isContinue() { + return !isEntryOk(); + } + public boolean isEntryOk() { currentEntry++; return currentEntry - 1 >= start && currentEntry - 1 <= end; From 5c8ca04513a5c6f245c0709e1144b456637e49ee Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 18 Mar 2020 11:10:31 +0200 Subject: [PATCH 0702/1142] Hiding GUI item flags for cleaner looks --- src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java | 8 ++++---- .../bekvon/bukkit/cmiLib/CMIReflections.java | 18 ++++++++++++++++++ .../bukkit/residence/gui/setFlagInfo.java | 4 ++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java b/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java index e40e6b3a6..afb186acb 100644 --- a/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java +++ b/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java @@ -48,10 +48,10 @@ public CMIGuiButton(Integer slot) { this.slot = slot; } -// public void hideItemFlags() { -// if (item != null) -// item = CMI.getInstance().getNMS().HideFlag(item, 63); -// } + public void hideItemFlags() { + if (item != null) + item = CMIReflections.HideFlag(item, 63); + } public CMIGuiButton(ItemStack item) { this.item = item == null ? null : item.clone(); diff --git a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java index 477b010bd..d1cec311f 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java @@ -99,6 +99,24 @@ private static void initialize() { } } + public static ItemStack HideFlag(ItemStack item, int state) { + Object nmsStack = asNMSCopy(item); + try { + Method methTag = nmsStack.getClass().getMethod("getTag"); + Object tag = methTag.invoke(nmsStack); + if (tag == null) + tag = NBTTagCompound.newInstance(); + + Method meth = tag.getClass().getMethod("setInt", String.class, int.class); + meth.invoke(tag, "HideFlags", state); + Method meth2 = nmsStack.getClass().getMethod("setTag", NBTTagCompound); + meth2.invoke(nmsStack, tag); + return (ItemStack) asBukkitCopy(nmsStack); + } catch (Exception e) { + } + return item; + } + private static Integer getActiveContainerId(Object entityplayer) { try { Field field = entityplayer.getClass().getField("activeContainer"); diff --git a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java index 4a06f4b2b..8a563cdd5 100644 --- a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java +++ b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java @@ -172,9 +172,11 @@ public void click(GUIClickType type) { @Override public void updateLooks() { this.setItem(updateLook(one.getKey())); + hideItemFlags(); this.update(); } }; + button.hideItemFlags(); buttons.add(button); i++; @@ -271,12 +273,14 @@ public void click(GUIClickType type) { @Override public void updateLooks() { this.setItem(updateLook(one.getKey())); + hideItemFlags(); this.update(); } }; i++; + button.hideItemFlags(); buttons.add(button); } description.clear(); From ee4db8e6529e0f073fc52351f6d2c3cdfedb7448 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 18 Mar 2020 11:17:28 +0200 Subject: [PATCH 0703/1142] Lets initialize language in case its NULL to avoid issues --- src/com/bekvon/bukkit/residence/Residence.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 00da9f86f..8335a9490 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -176,7 +176,7 @@ public class Residence extends JavaPlugin { protected Server server; public HelpEntry helppages; protected LocaleManager LocaleManager; - protected Language NewLanguageManager; + protected Language newLanguageManager; protected PlayerManager PlayerManager; protected FlagUtil FlagUtilManager; protected ShopSignUtil ShopSignUtilManager; @@ -433,7 +433,6 @@ public void onDisable() { } } - @Override public void onEnable() { try { @@ -564,7 +563,7 @@ public void onEnable() { } this.getConfigManager().copyOverTranslations(); - + try { File langFile = new File(new File(dataFolder, "Language"), getConfigManager().getLanguage() + ".yml"); @@ -719,7 +718,6 @@ public void run() { pmanager = new PermissionListManager(this); - NewLanguageManager = new Language(this); getLocaleManager().LoadLang(getConfigManager().getLanguage()); getLM().LanguageReload(); @@ -1079,7 +1077,11 @@ public LocaleManager getLocaleManager() { } public Language getLM() { - return NewLanguageManager; + if (newLanguageManager == null) { + newLanguageManager = new Language(this); + newLanguageManager.LanguageReload(); + } + return newLanguageManager; } public ResidencePlayerListener getPlayerListener() { From e20f8249ba85e4d21a8ed41f4e699b2c5f2dd1a6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 18 Mar 2020 12:34:46 +0200 Subject: [PATCH 0704/1142] Lets allow to put out fire if you have admin mode turned on --- src/com/bekvon/bukkit/CMIGUI/GUIManager.java | 2 +- .../bekvon/bukkit/cmiLib/VersionChecker.java | 1 - .../bekvon/bukkit/residence/Residence.java | 1 + .../listeners/ResidencePlayerListener.java | 22 +++++++++++-------- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/CMIGUI/GUIManager.java b/src/com/bekvon/bukkit/CMIGUI/GUIManager.java index 161203519..41fb8674b 100644 --- a/src/com/bekvon/bukkit/CMIGUI/GUIManager.java +++ b/src/com/bekvon/bukkit/CMIGUI/GUIManager.java @@ -124,7 +124,7 @@ public static GUIClickType getClickType(boolean left, boolean shift, InventoryAc } } - public static boolean processClick(final Player player, List buttons, final GUIClickType clickType) { + public static boolean processClick(final Player player, List buttons, final GUIClickType clickType) { CMIGui gui = map.get(player.getUniqueId()); if (gui == null) return false; diff --git a/src/com/bekvon/bukkit/cmiLib/VersionChecker.java b/src/com/bekvon/bukkit/cmiLib/VersionChecker.java index 33def486d..a495a9203 100644 --- a/src/com/bekvon/bukkit/cmiLib/VersionChecker.java +++ b/src/com/bekvon/bukkit/cmiLib/VersionChecker.java @@ -2,7 +2,6 @@ import java.io.BufferedReader; import java.io.InputStreamReader; -import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.Arrays; diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 8335a9490..197af9c4c 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -437,6 +437,7 @@ public void onDisable() { public void onEnable() { try { instance = this; + initsuccess = false; versionChecker = new VersionChecker(this); deleteConfirm = new HashMap(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index df5adba9e..c606bb4cc 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -76,6 +76,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -1029,16 +1030,19 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); if (player.hasMetadata("NPC")) return; - + if (plugin.isResAdminOn(player)) + return; FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - if (relativeBlock.getType() == Material.FIRE) { - boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - if (!hasplace) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.build); - return; - } - } + if (relativeBlock.getType() != Material.FIRE) + return; + + boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); + if (hasplace) + return; + + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.build); + return; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) From 4fda04fd21079303041cb4ed78e45a24bba376a5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 18 Mar 2020 14:11:15 +0200 Subject: [PATCH 0705/1142] Lets use direct packet sending for tellraw in case we have strange names --- .../bukkit/cmiLib/ActionBarTitleMessages.java | 24 +++++++++++++++++++ src/com/bekvon/bukkit/cmiLib/RawMessage.java | 7 ++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java index 50cf89b7b..416190ada 100644 --- a/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java +++ b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java @@ -111,6 +111,30 @@ else if (Version.isCurrentHigher(Version.v1_7_R4)) { } } + public static void sendRaw(Player receivingPacket, String msg) { + if (receivingPacket == null) + return; + if (!receivingPacket.isOnline()) + return; + if (msg == null) + return; + try { + Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, ChatColor.translateAlternateColorCodes('&', msg)); + if (Version.isCurrentHigher(Version.v1_11_R1)) + packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[1]); + else if (Version.isCurrentHigher(Version.v1_7_R4)) { + packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 1); + } else { + packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 1); + } + Object player = getHandle.invoke(receivingPacket); + Object connection = playerConnection.get(player); + sendPacket.invoke(connection, packet); + } catch (Exception ex) { + Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); + } + } + public static void sendTitle(final Player receivingPacket, final Object title) { sendTitle(receivingPacket, title, null, 0, 20, 20); } diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessage.java b/src/com/bekvon/bukkit/cmiLib/RawMessage.java index 987e5cb57..5f776dd39 100644 --- a/src/com/bekvon/bukkit/cmiLib/RawMessage.java +++ b/src/com/bekvon/bukkit/cmiLib/RawMessage.java @@ -18,6 +18,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; +import com.bekvon.bukkit.residence.utils.Debug; public class RawMessage { @@ -521,10 +522,12 @@ public RawMessage show(Player player, boolean softCombined) { if (one.isEmpty()) continue; // CMI.getInstance().d("=" + one + "="); - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + one); +ActionBarTitleMessages.sendRaw(player, one); +// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + one); } } else { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + combined); +ActionBarTitleMessages.sendRaw(player, combined); +// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + combined); } return this; From 4adc95f5f55df3bd407808fff385cc8f07cef47e Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 18 Mar 2020 16:04:48 +0200 Subject: [PATCH 0706/1142] Different way to check if chunk is loaded to avoid possible issues --- .../bukkit/cmiLib/ActionBarTitleMessages.java | 8 +++----- src/com/bekvon/bukkit/cmiLib/RawMessage.java | 17 ++++++++++------- .../listeners/ResidenceBlockListener.java | 6 +++--- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java index 416190ada..c7bfff97f 100644 --- a/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java +++ b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java @@ -13,7 +13,6 @@ import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.utils.Debug; public class ActionBarTitleMessages { private static Object packet; @@ -34,7 +33,6 @@ public class ActionBarTitleMessages { private static Object[] consts; static { - if (Version.getCurrent().isHigher(Version.v1_7_R4)) { try { packetType = Class.forName(getPacketPlayOutChat()); Class typeCraftPlayer = Class.forName(getCraftPlayerClasspath()); @@ -64,7 +62,6 @@ public class ActionBarTitleMessages { } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) { simpleTitleMessages = true; } - } } public static void send(CommandSender receivingPacket, String msg) { @@ -119,13 +116,14 @@ public static void sendRaw(Player receivingPacket, String msg) { if (msg == null) return; try { - Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, ChatColor.translateAlternateColorCodes('&', msg)); + Method meth = nmsChatSerializer.getMethod("a", String.class); + Object serialized = meth.invoke(null, ChatColor.translateAlternateColorCodes('&', msg)); if (Version.isCurrentHigher(Version.v1_11_R1)) packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[1]); else if (Version.isCurrentHigher(Version.v1_7_R4)) { packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 1); } else { - packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 1); + packet = packetType.getConstructor(nmsIChatBaseComponent, boolean.class).newInstance(serialized, true); } Object player = getHandle.invoke(receivingPacket); Object connection = playerConnection.get(player); diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessage.java b/src/com/bekvon/bukkit/cmiLib/RawMessage.java index 5f776dd39..81aa19617 100644 --- a/src/com/bekvon/bukkit/cmiLib/RawMessage.java +++ b/src/com/bekvon/bukkit/cmiLib/RawMessage.java @@ -18,6 +18,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; +import com.bekvon.bukkit.residence.commands.version; import com.bekvon.bukkit.residence.utils.Debug; public class RawMessage { @@ -515,19 +516,21 @@ public RawMessage show(Player player, boolean softCombined) { if (!player.isOnline()) return this; -// CMI.getInstance().d("|" + combined + "|"); - if (softCombined) { for (String one : softCombine()) { if (one.isEmpty()) continue; -// CMI.getInstance().d("=" + one + "="); -ActionBarTitleMessages.sendRaw(player, one); -// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + one); + +// if (Version.isCurrentEqualOrHigher(Version.v1_8_R1)) + ActionBarTitleMessages.sendRaw(player, one); +// else +// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + one); } } else { -ActionBarTitleMessages.sendRaw(player, combined); -// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + combined); +// if (Version.isCurrentEqualOrHigher(Version.v1_8_R1)) + ActionBarTitleMessages.sendRaw(player, combined); +// else +// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + combined); } return this; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index eaa60b304..67c82243b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -469,7 +469,7 @@ public void onChestPlaceCreateRes(BlockPlaceEvent event) { Block block = event.getBlock(); if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) return; - + if (plugin.getPlayerManager().getResidenceCount(player.getUniqueId()) != 0) return; @@ -842,10 +842,10 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; - if (!event.getBlock().getChunk().isLoaded()) + if (!event.getBlock().getWorld().isChunkLoaded((int) Math.floor(event.getBlock().getLocation().getX()) >> 4, ((int) Math.floor(event.getBlock().getLocation().getZ()) >> 4))) return; - CMIMaterial mat = CMIMaterial.get(event.getBlock().getType()); + CMIMaterial mat = CMIMaterial.get(event.getBlock()); if (!mat.equals(CMIMaterial.FARMLAND)) return; From 2019d34798a98af5d70f6c82ad31fae5779ad442 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 18 Mar 2020 16:35:24 +0200 Subject: [PATCH 0707/1142] Lets generate some comments inside flags.yml --- .../bukkit/residence/ConfigManager.java | 37 ++++++++++++++++++- src/flags.yml | 10 ++--- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index f4a966a85..ed78b02e2 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -433,6 +433,42 @@ void UpdateFlagFile() { } catch (IOException e) { e.printStackTrace(); } + + ConfigReader cfg = null; + try { + cfg = new ConfigReader(f); + } catch (Exception e) { + e.printStackTrace(); + } + if (cfg == null) + return; + cfg.load(); + cfg.addComment("Global", "These are Global Settings for Residence."); + cfg.addComment("Global.Flags", "These are world flags that are applied when the player is NOT within a residence."); + cfg.addComment("Global.Flags.Global", "these are default for all worlds unless specified below, they can be overridden per group"); + cfg.addComment("Global.FlagPermission", "This gives permission to change certain flags to all groups, unless specifically denied to the group."); + cfg.addComment("Global.FlagGui", "This sets GUI items to represent each flag, if not given, then gray wool will be used"); + cfg.addComment("Global.ResidenceDefault", "These are default flags applied to all residences from any user group."); + cfg.addComment("Global.CreatorDefault", "These are default flags applied to the residence creator of any group."); + cfg.addComment("Global.RentedDefault", "These are default flags applied to the residence renter of any group."); + cfg.addComment("Global.GroupedFlags", "These are grouped flags, so when using /res pset nickname redstone true, player will get all flags in list, same when setting to false or removing them."); + cfg.addComment("Global.TotalFlagDisabling", "Completely disables defined flag which will no longer be accesable even with resadmin command", + "Can save some of the server processing resources if you dont want to utilize specific checks for specific flags"); + cfg.addComment("Global.GroupDefault", "These are default group flags applied to a residence made by a user of any group."); + cfg.get("Global.GroupDefault.default", "groupName"); + cfg.get("Global.GroupDefault.default.build", true); + cfg.addComment("ItemList", "this is where you can create blacklists / whitelists"); + cfg.addComment("ItemList.DefaultList", "list name is not important, as long as it is unique. Its good to use a descripive name."); + cfg.addComment("ItemList.DefaultList.Type", "type of the list, can be blacklist, whitelist, or ignorelist"); + cfg.addComment("ItemList.DefaultList.Items", "If you want, you can have this list only apply to one world, otherwise it applies to all worlds", + "World: world", + "You can also have the list apply only to one group, otherwise it applies for all groups", + "Group: default", + "this is the actual list of material names that this list allows or disallows", + "You can look up the material name by item ID in game by typing /res material ", + "Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance"); + + cfg.save(); } public void UpdateGroupedFlagsFile() { @@ -1971,7 +2007,6 @@ public ItemStack getGuiBottonStates(FlagState state) { return guiBottonStates.get(state); } - // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/flags.yml b/src/flags.yml index c1ffeafec..de7d02e95 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -231,8 +231,8 @@ Global: admin: true # These are default group flags applied to a residence made by a user of any group. GroupDefault: - #default: #group name - #build: true + default: groupName + build: true # These are grouped flags, so when using /res pset nickname redstone true, player will get all flags in list, same when setting to false or removing them. GroupedFlags: redstone: @@ -265,11 +265,11 @@ ItemList: #this is where you can create blacklists / whitelists DefaultList: #list name is not important, as long as it is unique. Its good to use a descripive name. #type of the list, can be blacklist, whitelist, or ignorelist Type: blacklist - #If you want, you can have this list only apply to one world, otherwise it applys to all worlds + #If you want, you can have this list only apply to one world, otherwise it applies to all worlds #World: world - #You can also have the list apply only to one group, otherwise it applys for all groups + #You can also have the list apply only to one group, otherwise it applies for all groups #Group: default - #this is the actual list of material names that this list allows or dissallows + #this is the actual list of material names that this list allows or disallows #You can look up the material name by item ID in game by typing /res material #Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance Items: From 8dd473320844aa2572527a67e061e7a29b022111 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 18 Mar 2020 17:31:57 +0200 Subject: [PATCH 0708/1142] Lets force update player group when we use res limits command --- .../residence/containers/ResidencePlayer.java | 19 ++++++++++++++++--- .../listeners/ResidenceEntityListener.java | 1 + .../permissions/PermissionGroup.java | 1 + 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 383518cf1..fbd0ac663 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -46,7 +46,7 @@ public class ResidencePlayer { private Long lastRaidAttackTimer = 0L; private Long lastRaidDefendTimer = 0L; - + private ResidenceRaid raid = null; public ResidencePlayer(OfflinePlayer off) { @@ -273,15 +273,24 @@ public int getMaxRes() { return this.maxRes; } + public PermissionGroup forceUpdateGroup() { + updatePlayer(); + return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), true); + } + public PermissionGroup getGroup() { updatePlayer(); return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld()); } public PermissionGroup getGroup(String world) { + return getGroup(world, false); + } + + public PermissionGroup getGroup(String world, boolean force) { if (groups == null) groups = new PlayerGroup(this); - groups.updateGroup(world, false); + groups.updateGroup(world, force); PermissionGroup group = groups.getGroup(world); if (group == null) group = Residence.getInstance().getPermissionManager().getDefaultGroup(); @@ -375,7 +384,7 @@ public List getResList() { public String getPlayerName() { return getName(); } - + public String getName() { this.updatePlayer(); return userName; @@ -503,4 +512,8 @@ public ResidenceRaid getJoinedRaid() { public void setJoinedRaid(ResidenceRaid raid) { this.raid = raid; } + + public PlayerGroup getGroups() { + return groups; + } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 10627a0ca..eb4411e7b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1152,6 +1152,7 @@ public void onEntityCatchingFire(EntityDamageByEntityEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; + if (!damageableProjectile(event.getDamager())) return; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 8ba252823..895267c88 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -450,6 +450,7 @@ public boolean itemListAccess() { public void printLimits(CommandSender player, OfflinePlayer target, boolean resadmin) { ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(target.getName()); + rPlayer.forceUpdateGroup(); PermissionGroup group = rPlayer.getGroup(); Residence.getInstance().msg(player, lm.General_Separator); From 2f20e2d39264cf2b7ca3421d582df0a5d1375c34 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 19 Mar 2020 15:49:00 +0200 Subject: [PATCH 0709/1142] Faster way to check for residence signs --- src/README | 2 +- .../bukkit/residence/ConfigManager.java | 11 ++++++---- .../bukkit/residence/commands/attack.java | 11 +++++++--- .../bukkit/residence/commands/raid.java | 22 ++++++++++++------- .../residence/containers/ResidencePlayer.java | 5 +++++ .../bukkit/residence/containers/lm.java | 1 + .../listeners/ResidenceBlockListener.java | 1 - .../listeners/ResidencePlayerListener.java | 11 +++++----- .../protection/ClaimedResidence.java | 8 ++++++- .../bukkit/residence/raid/ResidenceRaid.java | 11 ++++++++++ .../bukkit/residence/signsStuff/SignInfo.java | 9 +++++--- .../bukkit/residence/signsStuff/SignUtil.java | 8 +++---- 12 files changed, 69 insertions(+), 31 deletions(-) diff --git a/src/README b/src/README index 9fd377c8b..455b8bc48 100644 --- a/src/README +++ b/src/README @@ -6,7 +6,7 @@ Wiki: https://github.com/Zrips/Residence/wiki IRC: http://webchat.esper.net/?channels=residence Spigot Resource page: https://www.spigotmc.org/resources/residence-1-7-10-up-to-1-11.11480/ -Downdload the latest config.yml: https://github.com/Zrips/Residence/raw/master/src/config.yml +Download the latest config.yml: https://github.com/Zrips/Residence/raw/master/src/config.yml To build the source yourself, simply download the source, unzip and run ant: https://github.com/Zrips/Residence/zipball/master diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index ed78b02e2..77104bcfd 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -1251,6 +1251,8 @@ public void UpdateConfigFile() { c.addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden in game"); DynMapHiddenRegions = c.get("DynMap.HiddenRegions", new ArrayList()); + c.addComment("Raid", "In development"); + c.addComment("Raid.Enabled", "Determines if you want to enable raid feature for your server", "When residence is under raid, attackers can move inside residence even if residence has move false flag"); RaidEnabled = c.get("Raid.Enabled", false); @@ -1258,10 +1260,11 @@ public void UpdateConfigFile() { PreRaidTimer = c.get("Raid.PreTimer", 120); c.addComment("Raid.Timer", "Time in seconds raid should be", "During this time attackers can steal and kill defenders"); RaidTimer = c.get("Raid.Timer", 120); - c.addComment("Raid.Cooldown", "Time in seconds residence is immune for next raid"); - RaidCooldown = c.get("Raid.Cooldown", 120); - c.addComment("Raid.PlayerCooldown", "Time in seconds player is immune for next raid", "In case player has more than one residence, this can prevent player from being attacked again"); - RaidPlayerCooldown = c.get("Raid.PlayerCooldown", 120); + c.addComment("Raid.Cooldown", "Time in seconds residence is immune for next raid","Default is 79200 seconds which results into 22 hours, this might reset if you have server restart"); + RaidCooldown = c.get("Raid.Cooldown", 79200); + c.addComment("Raid.PlayerCooldown", "Time in seconds player is immune for next raid", "In case player has more than one residence, this can prevent player from being attacked again", + "Default is 79200 seconds which results into 22 hours, this might reset if you have server restart"); + RaidPlayerCooldown = c.get("Raid.PlayerCooldown", 79200); c.addComment("Raid.Allow.Attacker.blockBreak", "Allows to break blocks inside raided residence even if it has destroy false", "This only applies for attackers and for raid time"); RaidAttackerBlockBreak = c.get("Raid.Allow.Attacker.blockBreak", true); diff --git a/src/com/bekvon/bukkit/residence/commands/attack.java b/src/com/bekvon/bukkit/residence/commands/attack.java index ac1e4f9ca..6cdeade11 100644 --- a/src/com/bekvon/bukkit/residence/commands/attack.java +++ b/src/com/bekvon/bukkit/residence/commands/attack.java @@ -59,13 +59,18 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return null; } - if (res.getRaid().isImmune()) { - plugin.msg(player, lm.Raid_attack_immune, Utils.to24hourShort(res.getRaid().getImmunityUntil() - System.currentTimeMillis() + 1000)); + if (!rPlayer.isOnline()) { + plugin.msg(player, lm.Raid_attack_isOffline); + return null; + } + + if (res.getRaid().isPlayerImmune()) { + plugin.msg(player, lm.Raid_attack_playerImmune, Utils.to24hourShort(res.getRaid().getPlayerImmunityUntil() - System.currentTimeMillis() + 1000L)); return null; } if (res.isUnderRaidCooldown() && !res.isInPreRaid() && !res.isUnderRaid()) { - plugin.msg(player, lm.Raid_attack_cooldown, Utils.to24hourShort(res.getRaid().getCooldownEnd() - System.currentTimeMillis() + 1000)); + plugin.msg(player, lm.Raid_attack_cooldown, Utils.to24hourShort(res.getRaid().getCooldownEnd() - System.currentTimeMillis() + 1000L)); return null; } diff --git a/src/com/bekvon/bukkit/residence/commands/raid.java b/src/com/bekvon/bukkit/residence/commands/raid.java index 923917175..b93589604 100644 --- a/src/com/bekvon/bukkit/residence/commands/raid.java +++ b/src/com/bekvon/bukkit/residence/commands/raid.java @@ -153,9 +153,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; case start: - - - res = null; + + res = null; if (args.length > 1) res = plugin.getResidenceManager().getByName(args[2]); @@ -166,11 +165,18 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.msg(sender, lm.Invalid_Residence); return null; } - - - - - + + if (res.isUnderRaid() || res.isInPreRaid()) { + return null; + } + + boolean started = res.preStartRaid(null); + + if (started) { + res.startRaid(); + return true; + } + break; case stop: break; diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index fbd0ac663..e7d5347c9 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -296,12 +296,17 @@ public PermissionGroup getGroup(String world, boolean force) { group = Residence.getInstance().getPermissionManager().getDefaultGroup(); return group; } + + private boolean updatedPlayer = false; public ResidencePlayer updatePlayer(Player player) { + if (updatedPlayer) + return this; this.player = player; this.uuid = player.getUniqueId(); this.userName = player.getName(); this.ofPlayer = player; + updatedPlayer = true; return this; } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index a2145bba7..e0a142ca4 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -122,6 +122,7 @@ public enum lm { Raid_attack_Started("&7Raid started!"), Raid_attack_cooldown("&cToo soon for another raid on this residence! Wait %1"), Raid_attack_immune("&cThis residence is immune to raids! Wait %1"), + Raid_attack_playerImmune("&cResidence owner is immune to raids! Wait %1"), Raid_attack_isOffline("&cCan't raid while owner is offline!"), Raid_attack_noSubzones("&cCan't raid subzones!"), Raid_attack_noSelf("&cCan't raid your own residence!"), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 67c82243b..ac2a6f0c2 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -59,7 +59,6 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceBlockListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c606bb4cc..2c61d69e4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -659,6 +659,7 @@ else if (white == 0) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignInteract(PlayerInteractEvent event) { + if (event.getPlayer() == null) return; // disabling event on world @@ -667,10 +668,7 @@ public void onSignInteract(PlayerInteractEvent event) { Block block = event.getClickedBlock(); - if (block == null || block.getState() == null) - return; - - if (!(block.getState() instanceof Sign)) + if (block == null || !CMIMaterial.isSign(block.getType())) return; Player player = event.getPlayer(); @@ -679,6 +677,7 @@ public void onSignInteract(PlayerInteractEvent event) { Location loc = block.getLocation(); Signs s = plugin.getSignUtil().getSigns().getResSign(loc); + if (s == null) return; @@ -892,9 +891,9 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { if (player.hasMetadata("NPC")) return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res == null) { + if (res == null) return; - } + if (!res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse)) { return; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e1a5f162a..6f74f0ca3 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -2074,7 +2074,8 @@ public boolean preStartRaid(Player attacker) { if (this.getRaid().getCooldownEnd() > System.currentTimeMillis()) return false; - getRaid().addAttacker(attacker); + if (attacker != null) + getRaid().addAttacker(attacker); getRaid().addDefender(this.getRPlayer().getPlayer()); getRaid().setStartsAt(System.currentTimeMillis() + (ConfigManager.PreRaidTimer * 1000)); getRaid().setEndsAt(getRaid().getStartsAt() + (ConfigManager.RaidTimer * 1000)); @@ -2085,6 +2086,11 @@ public boolean preStartRaid(Player attacker) { if (start.isCancelled()) return false; + if (attacker != null) + plugin.getPlayerManager().getResidencePlayer(attacker).setLastRaidAttackTimer(System.currentTimeMillis()); + this.getRPlayer().setLastRaidDefendTimer(System.currentTimeMillis()); + getRaid().setImmunityUntil(ConfigManager.RaidCooldown * 1000L); + return true; } diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java index 30edc9c99..b26f29519 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -262,6 +262,17 @@ public boolean isImmune() { return immunityUntil == null ? false : immunityUntil > System.currentTimeMillis(); } + public Long getPlayerImmunityUntil() { + ResidencePlayer rplayer = this.res.getRPlayer(); + if (rplayer == null) + return 0L; + return rplayer.getLastRaidDefendTimer() == null ? 0L : rplayer.getLastRaidDefendTimer() + (ConfigManager.RaidPlayerCooldown * 1000L); + } + + public boolean isPlayerImmune() { + return getPlayerImmunityUntil() > System.currentTimeMillis(); + } + public Long getImmunityUntil() { return immunityUntil; } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java b/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java index a4d16cfea..e71d1b738 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignInfo.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence.signsStuff; +import java.util.HashMap; import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Location; @@ -8,7 +9,7 @@ public class SignInfo { - ConcurrentHashMap AllSigns = new ConcurrentHashMap(); + HashMap AllSigns = new HashMap(); public SignInfo() { } @@ -18,11 +19,13 @@ public void setAllSigns(ConcurrentHashMap AllSigns) { this.AllSigns.putAll(AllSigns); } - public ConcurrentHashMap GetAllSigns() { + public HashMap GetAllSigns() { return this.AllSigns; } public Signs getResSign(Location loc) { + if (this.AllSigns.isEmpty()) + return null; String l = Utils.convertLocToStringShort(loc); if (l == null) return null; @@ -30,7 +33,7 @@ public Signs getResSign(Location loc) { } public void removeSign(Signs sign) { - this.AllSigns.remove(sign); + this.AllSigns.remove(Utils.convertLocToStringShort(sign.getLocation())); } public void addSign(Signs sign) { diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index b86a89762..55c13cc18 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -157,7 +157,7 @@ public void removeSign(String res) { public void removeSign(ClaimedResidence res) { for (Signs one : res.getSignsInResidence()) { - if (res != one.GetResidence()) + if (res != one.getResidence()) continue; this.SignUpdate(one); } @@ -165,7 +165,7 @@ public void removeSign(ClaimedResidence res) { public void updateSignResName(ClaimedResidence res) { for (Signs one : res.getSignsInResidence()) { - if (res != one.GetResidence()) + if (res != one.getResidence()) continue; this.SignUpdate(one); saveSigns(); @@ -175,7 +175,7 @@ public void updateSignResName(ClaimedResidence res) { public boolean SignUpdate(Signs Sign) { - ClaimedResidence res = Sign.GetResidence(); + ClaimedResidence res = Sign.getResidence(); if (res == null) return false; @@ -183,7 +183,7 @@ public boolean SignUpdate(Signs Sign) { boolean ForSale = res.isForSell(); boolean ForRent = res.isForRent(); - Location nloc = Sign.GetLocation(); + Location nloc = Sign.getLocation(); if (nloc == null) { Signs.removeSign(Sign); From a09bc9fbd7e4b72104e3dec0ee9cdcc69f759dc8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 19 Mar 2020 16:11:11 +0200 Subject: [PATCH 0710/1142] Cleaning and optimization --- .../bekvon/bukkit/residence/Residence.java | 2 +- .../bukkit/residence/commands/defend.java | 2 +- .../listeners/ResidencePlayerListener.java | 19 ++++++++++--------- .../bukkit/residence/signsStuff/SignUtil.java | 6 ++---- .../bukkit/residence/utils/TimeModifier.java | 7 ++----- 5 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 197af9c4c..44d78bfd8 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1833,7 +1833,7 @@ public void msg(CommandSender sender, String text) { } public void msg(Player player, String text) { - if (player != null && text.length() > 0) + if (player != null && !text.isEmpty()) player.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); } diff --git a/src/com/bekvon/bukkit/residence/commands/defend.java b/src/com/bekvon/bukkit/residence/commands/defend.java index 64551d475..163b27bc6 100644 --- a/src/com/bekvon/bukkit/residence/commands/defend.java +++ b/src/com/bekvon/bukkit/residence/commands/defend.java @@ -10,8 +10,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.Zrips.CMI.utils.RawMessage; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 2c61d69e4..88418c41c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -784,7 +784,7 @@ public void onSignDestroy(BlockBreakEvent event) { if (block == null) return; - if (!(block.getState() instanceof Sign)) + if (!CMIMaterial.isSign(block.getType())) return; Location loc = block.getLocation(); @@ -1183,6 +1183,7 @@ private static boolean placingMinecart(Block block, ItemStack item) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getPlayer() == null) return; // disabling event on world @@ -1203,6 +1204,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { || isCanUseEntity_BothClick(mat, block))) { if (!heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) && !heldItem.isDye() && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { + return; } } @@ -1211,7 +1213,6 @@ public void onPlayerInteract(PlayerInteractEvent event) { return; boolean resadmin = plugin.isResAdminOn(player); - if (resadmin) return; @@ -1604,14 +1605,15 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { Entity ent = event.getRightClicked(); + if (ent.getType() != EntityType.ITEM_FRAME) { + return; + } + /* Container - ItemFrame protection */ if (!(ent instanceof Hanging)) return; Hanging hanging = (Hanging) ent; - if (hanging.getType() != EntityType.ITEM_FRAME) { - return; - } Material heldItem = plugin.getNms().itemInMainHand(player).getType(); @@ -2310,8 +2312,7 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { Long time = informar.get(player.getUniqueId()); if (time == null || time + 100L < System.currentTimeMillis()) { - FlagPermissions perms = res.getPermissions(); - if (perms.has(Flags.title, FlagCombo.TrueOrNone)) + if (res.getPermissions().has(Flags.title, FlagCombo.TrueOrNone)) switch (plugin.getConfigManager().getEnterLeaveMessageType()) { case ActionBar: ActionBarTitleMessages.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) @@ -2335,8 +2336,9 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { to.showBounds(player, true); } - if (from == null || res == null) + if (from == null || res == null) { return; + } if (!(res == from.getParent())) { if (plugin.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (plugin.getRentManager().isForRent(from) || plugin @@ -2351,7 +2353,6 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { } } } - } private StuckInfo updateStuckTeleport(Player player, Location loc) { diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 55c13cc18..19163b09f 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -22,6 +22,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.residence.CommentedYamlConfiguration; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; @@ -193,15 +194,12 @@ public boolean SignUpdate(Signs Sign) { Block block = nloc.getBlock(); - if (block.getType() == Material.AIR) { + if (!CMIMaterial.isSign(block.getType())) { Signs.removeSign(Sign); res.getSignsInResidence().remove(Sign); return false; } - if (!(block.getState() instanceof Sign)) - return false; - Sign sign = (Sign) block.getState(); String landName = res.getName(); diff --git a/src/com/bekvon/bukkit/residence/utils/TimeModifier.java b/src/com/bekvon/bukkit/residence/utils/TimeModifier.java index 980e48c67..b984637ed 100644 --- a/src/com/bekvon/bukkit/residence/utils/TimeModifier.java +++ b/src/com/bekvon/bukkit/residence/utils/TimeModifier.java @@ -3,20 +3,17 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import com.Zrips.CMI.utils.TimeManager.timeModifier; - public enum TimeModifier { s(1), m(60), h(60 * 60), d(60 * 60 * 24), w(60 * 60 * 24 * 7), M(60 * 60 * 24 * 30), Y(60 * 60 * 24 * 365); private int modifier = 0; static Pattern patern = Pattern.compile("(\\d+[a-z])"); - + TimeModifier(int modifier) { this.modifier = modifier; } - public int getModifier() { return modifier; } @@ -34,7 +31,7 @@ public static Long getTimeRangeFromString(String time) { Long total = null; while (match.find()) { String t = match.group(1); - for (timeModifier one : timeModifier.values()) { + for (TimeModifier one : TimeModifier.values()) { if (t.endsWith(one.name())) { try { Long amount = Long.parseLong(t.substring(0, t.length() - one.name().length())); From b806b1f06d0f154dd2e330d46f3f3d9156b2b934 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 19 Mar 2020 16:36:09 +0200 Subject: [PATCH 0711/1142] Flags.yml format issue... Lets forget about this for time being --- src/com/bekvon/bukkit/residence/ConfigManager.java | 3 --- .../bekvon/bukkit/residence/permissions/PermissionGroup.java | 2 +- src/flags.yml | 4 ---- src/plugin.yml | 2 +- 4 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 77104bcfd..0004dca27 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -455,8 +455,6 @@ void UpdateFlagFile() { cfg.addComment("Global.TotalFlagDisabling", "Completely disables defined flag which will no longer be accesable even with resadmin command", "Can save some of the server processing resources if you dont want to utilize specific checks for specific flags"); cfg.addComment("Global.GroupDefault", "These are default group flags applied to a residence made by a user of any group."); - cfg.get("Global.GroupDefault.default", "groupName"); - cfg.get("Global.GroupDefault.default.build", true); cfg.addComment("ItemList", "this is where you can create blacklists / whitelists"); cfg.addComment("ItemList.DefaultList", "list name is not important, as long as it is unique. Its good to use a descripive name."); cfg.addComment("ItemList.DefaultList.Type", "type of the list, can be blacklist, whitelist, or ignorelist"); @@ -467,7 +465,6 @@ void UpdateFlagFile() { "this is the actual list of material names that this list allows or disallows", "You can look up the material name by item ID in game by typing /res material ", "Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance"); - cfg.save(); } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 895267c88..83594a07a 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -119,7 +119,7 @@ private void parseGroup(ConfigurationSection limits) { if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { ymin = 0; - ymax = 255; + ymax = 256; } zmax = limits.getInt("Residence.MaxNorthSouth", 0); diff --git a/src/flags.yml b/src/flags.yml index de7d02e95..37985d016 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -229,10 +229,6 @@ Global: leash: true animalkilling: true admin: true - # These are default group flags applied to a residence made by a user of any group. - GroupDefault: - default: groupName - build: true # These are grouped flags, so when using /res pset nickname redstone true, player will get all flags in list, same when setting to false or removing them. GroupedFlags: redstone: diff --git a/src/plugin.yml b/src/plugin.yml index 6232033a7..a6d97c4f4 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.0.0 +version: 4.9.0.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From feaec75dd4569736229c5e9b4b61dae5ab316e06 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 20 Mar 2020 11:39:57 +0200 Subject: [PATCH 0712/1142] Lets do this in sync --- .../bekvon/bukkit/residence/gui/FlagUtil.java | 51 +++++++------------ .../bukkit/residence/gui/setFlagInfo.java | 3 +- .../listeners/ResidencePlayerListener.java | 2 +- .../protection/ResidencePermissions.java | 17 +------ src/plugin.yml | 2 +- 5 files changed, 22 insertions(+), 53 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 2a045b9b9..1fbff02ad 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -62,26 +62,18 @@ public void openPsetFlagGui(Player player, String targetPlayer, ClaimedResidence if (player == null || !player.isOnline()) return; - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { + setFlagInfo flag = new setFlagInfo(res, player, targetPlayer, resadmin); + flag.recalculate(); - setFlagInfo flag = new setFlagInfo(res, player, targetPlayer, resadmin); - flag.recalculate(); + CMIGui gui = new CMIGui(player); + gui.setTitle(Residence.getInstance().msg(lm.Gui_Set_Title, res.getName())); + gui.setInvSize(GUIRows.r6); + PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); - Bukkit.getScheduler().runTask(plugin, () -> { - CMIGui gui = new CMIGui(player); - gui.setTitle(Residence.getInstance().msg(lm.Gui_Set_Title, res.getName())); - gui.setInvSize(GUIRows.r6); - PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); + fillButtons(flag, pi, gui); - fillButtons(flag, pi, gui); - - gui.open(); - }); - return; - } - }); + gui.open(); + return; } private void fillButtons(setFlagInfo flag, PageInfo pi, CMIGui gui) { @@ -126,26 +118,17 @@ public void openSetFlagGui(Player player, ClaimedResidence res, boolean resadmin if (player == null || !player.isOnline()) return; - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { + setFlagInfo flag = new setFlagInfo(res, player, resadmin); + flag.recalculate(); + CMIGui gui = new CMIGui(player); + gui.setTitle(Residence.getInstance().msg(lm.Gui_Set_Title, res.getName())); + gui.setInvSize(GUIRows.r6); - setFlagInfo flag = new setFlagInfo(res, player, resadmin); - flag.recalculate(); - Bukkit.getScheduler().runTask(plugin, () -> { - CMIGui gui = new CMIGui(player); - gui.setTitle(Residence.getInstance().msg(lm.Gui_Set_Title, res.getName())); - gui.setInvSize(GUIRows.r6); + PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); - PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); + fillButtons(flag, pi, gui); - fillButtons(flag, pi, gui); - - gui.open(); - }); - return; - } - }); + gui.open(); } public FlagData getFlagData() { diff --git a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java index 8a563cdd5..a47fd8020 100644 --- a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java +++ b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java @@ -24,6 +24,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import com.bekvon.bukkit.residence.protection.ResidencePermissions; import com.bekvon.bukkit.residence.utils.Debug; public class setFlagInfo { @@ -289,7 +290,7 @@ public void updateLooks() { private ItemStack updateLook(String flagName) { Boolean have = null; - FlagPermissions fp = (this.residence.getPermissions()); + ResidencePermissions fp = this.residence.getPermissions(); if (this.targetPlayer != null) { if (fp.playerHas(targetPlayer, residence.getWorld(), flagName, FlagCombo.OnlyTrue)) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 88418c41c..6a5c5e3d7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -442,7 +442,7 @@ public void onPlayerQuitEvent(PlayerQuitEvent event) { if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); - if (event.getPlayer() != null && res.getPermissions().playerHas(event.getPlayer(), Flags.fly, FlagCombo.OnlyTrue)) + if (res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, false); if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index d2036ae9d..970b5f117 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -84,21 +84,6 @@ public boolean playerHas(Player player, Flags flag, FlagCombo f) { } } -// public boolean playerHas(String player, Flags flag, FlagCombo f) { -// switch (f) { -// case FalseOrNone: -// return !this.playerHas(player, world, flag, false); -// case OnlyFalse: -// return !this.playerHas(player, world, flag, true); -// case OnlyTrue: -// return this.playerHas(player, world, flag, false); -// case TrueOrNone: -// return this.playerHas(player, world, flag, true); -// default: -// return false; -// } -// } - @Override public boolean playerHas(Player player, String world, Flags flag, boolean def) { if (player == null) @@ -347,7 +332,7 @@ public boolean setGroupFlag(Player player, String group, String flag, String fla Flags f = Flags.getFlag(flag); if (f != null) flag = f.toString(); - + if (this.residence.isRaidInitialized() && !resadmin) { Residence.getInstance().msg(player, lm.Raid_noFlagChange); return false; diff --git a/src/plugin.yml b/src/plugin.yml index a6d97c4f4..47c47ee34 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.0.1 +version: 4.9.0.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From c201a82131ef6839b09475350eb288ec5dfe9357 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 20 Mar 2020 14:18:11 +0200 Subject: [PATCH 0713/1142] Optimizing interact event and disabling some of the bypass permission for time being. --- .../residence/containers/ResidencePlayer.java | 9 +- .../bukkit/residence/gui/setFlagInfo.java | 4 +- .../listeners/ResidenceBlockListener.java | 1 + .../listeners/ResidencePlayerListener.java | 256 +++++++++--------- .../residence/protection/FlagPermissions.java | 71 ++--- .../protection/ResidencePermissions.java | 21 +- .../bukkit/residence/signsStuff/SignUtil.java | 1 - 7 files changed, 184 insertions(+), 179 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index e7d5347c9..56c1f9d39 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -5,9 +5,9 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Map.Entry; import java.util.Set; import java.util.UUID; -import java.util.Map.Entry; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; @@ -19,7 +19,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.raid.ResidenceRaid; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { @@ -39,7 +38,6 @@ public class ResidencePlayer { private int maxSubzones = -1; private int maxSubzoneDepth = -1; - private boolean updated = false; private Long lastRecalculation = 0L; private int maxValue = 9999; @@ -296,17 +294,12 @@ public PermissionGroup getGroup(String world, boolean force) { group = Residence.getInstance().getPermissionManager().getDefaultGroup(); return group; } - - private boolean updatedPlayer = false; public ResidencePlayer updatePlayer(Player player) { - if (updatedPlayer) - return this; this.player = player; this.uuid = player.getUniqueId(); this.userName = player.getName(); this.ofPlayer = player; - updatedPlayer = true; return this; } diff --git a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java index a47fd8020..32a4c664b 100644 --- a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java +++ b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java @@ -293,9 +293,9 @@ private ItemStack updateLook(String flagName) { ResidencePermissions fp = this.residence.getPermissions(); if (this.targetPlayer != null) { - if (fp.playerHas(targetPlayer, residence.getWorld(), flagName, FlagCombo.OnlyTrue)) + if (fp.playerHas(targetPlayer, Flags.getFlag(flagName), FlagCombo.OnlyTrue)) have = true; - else if (fp.playerHas(targetPlayer, residence.getWorld(), flagName, FlagCombo.OnlyFalse)) + else if (fp.playerHas(targetPlayer, Flags.getFlag(flagName), FlagCombo.OnlyFalse)) have = false; } else { if (fp.has(Flags.getFlag(flagName), FlagCombo.OnlyTrue)) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index ac2a6f0c2..67c82243b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -59,6 +59,7 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceBlockListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 6a5c5e3d7..279e62c3d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -76,7 +76,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -965,7 +964,7 @@ public boolean isCanUseEntity_BothClick(Material mat, Block block) { if (m.isTrapDoor()) return true; - switch (CMIMaterial.get(mat)) { + switch (m) { case LEVER: case PISTON: case STICKY_PISTON: @@ -1063,13 +1062,13 @@ public void onPlatePress(PlayerInteractEvent event) { CMIMaterial mat = CMIMaterial.get(block); if (!plugin.isResAdminOn(player)) { - if (!ResPerm.bypass_use.hasPermission(player, 10000L)) { - boolean hasuse = perms.playerHas(player, Flags.use, true); - boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); - if ((!hasuse && !haspressure || !haspressure) && mat.isPlate()) { - event.setCancelled(true); - return; - } + boolean hasuse = perms.playerHas(player, Flags.use, true); + boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); + if ((!hasuse && !haspressure || !haspressure) && mat.isPlate() +// && !ResPerm.bypass_use.hasPermission(player, 10000L) + ) { + event.setCancelled(true); + return; } } if (!perms.playerHas(player, Flags.trample, perms.playerHas(player, Flags.build, true)) && (mat == CMIMaterial.FARMLAND || mat == CMIMaterial.SOUL_SAND)) { @@ -1103,12 +1102,12 @@ public void onSelection(PlayerInteractEvent event) { if (player.getGameMode() == GameMode.CREATIVE) event.setCancelled(true); - boolean resadmin = plugin.isResAdminOn(player); if (player.hasMetadata("NPC")) return; ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); + boolean resadmin = plugin.isResAdminOn(player); if (ResPerm.select.hasPermission(player) || ResPerm.create.hasPermission(player) && !ResPerm.select.hasSetPermission(player) || group .canCreateResidences() && !ResPerm.create.hasSetPermission(player) && !ResPerm.select.hasSetPermission(player) || resadmin) { @@ -1183,7 +1182,7 @@ private static boolean placingMinecart(Block block, ItemStack item) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { - +// Long nano = System.nanoTime(); if (event.getPlayer() == null) return; // disabling event on world @@ -1216,7 +1215,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (resadmin) return; - if (!resadmin && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld().getName())) { + if (!plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld().getName())) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; @@ -1225,7 +1224,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { CMIMaterial blockM = CMIMaterial.get(block); FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - if (heldItem != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (heldItem.isDye()) { CMIMaterial btype = CMIMaterial.get(block); if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || btype == CMIMaterial.GRASS || btype.isSapling()) || @@ -1258,11 +1257,11 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasUseBypass = ResPerm.bypass_use.hasPermission(player, 10000L); - boolean hasuse = perms.playerHas(player, Flags.use, true) || hasUseBypass; + boolean hasuse = perms.playerHas(player, Flags.use, true); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - main: if (res != null && res.isUnderRaid()) { + if (res != null && res.isUnderRaid()) { if (res.getRaid().isDefender(player) && !ConfigManager.RaidDefenderContainerUsage) { Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); if (result != null) { @@ -1275,96 +1274,92 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } - boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); - if (res == null || !res.isOwner(player)) { - if (!hasContainerBypass) { - Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); + Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); - if (result != null) { - main: if (!perms.playerHas(player, result, hasuse)) { + if (result != null) { + main: if (!perms.playerHas(player, result, hasuse)) { - if (hasuse || result.equals(Flags.container)) { + if (hasuse || result.equals(Flags.container)) { - if (res != null && res.isUnderRaid()) { - if (res.getRaid().isAttacker(player)) { - break main; - } + if (res != null && res.isUnderRaid()) { + if (res.getRaid().isAttacker(player)) { + break main; } - + } +// if (!ResPerm.bypass_container.hasPermission(player, 10000L)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, result); - return; - } - - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { +// } + return; + } - if (res != null && res.isUnderRaid()) { - if (res.getRaid().isAttacker(player)) { - break main; - } - } + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - switch (result) { - case door: - if (ResPerm.bypass_door.hasPermission(player, 10000L)) - break main; - break; - case button: - if (ResPerm.bypass_button.hasPermission(player, 10000L)) - break main; - break; + if (res != null && res.isUnderRaid()) { + if (res.getRaid().isAttacker(player)) { + break main; } - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, result); - return; } - if (isCanUseEntity_BothClick(mat, block)) { +// switch (result) { +// case door: +// if (ResPerm.bypass_door.hasPermission(player, 10000L)) +// break main; +// break; +// case button: +// if (ResPerm.bypass_button.hasPermission(player, 10000L)) +// break main; +// break; +// } + event.setCancelled(true); +// Debug.D("took: " + (System.nanoTime() - nano)); + plugin.msg(player, lm.Flag_Deny, result); + return; + } - if (res != null && res.isUnderRaid()) { - if (res.getRaid().isAttacker(player)) { - break main; - } - } + if (isCanUseEntity_BothClick(mat, block)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, result); + if (res != null && res.isUnderRaid()) { + if (res.getRaid().isAttacker(player)) { + break main; + } } - return; + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, result); } + return; } - } } - if (!hasContainerBypass) - if (plugin.getConfigManager().getCustomContainers().contains(blockM)) { - if (!perms.playerHas(player, Flags.container, hasuse)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container); - return; - } + if (plugin.getConfigManager().getCustomContainers().contains(blockM)) { + if (!perms.playerHas(player, Flags.container, hasuse) +// || !ResPerm.bypass_container.hasPermission(player, 10000L) + ) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.container); + return; } + } - if (!hasUseBypass) { - if (plugin.getConfigManager().getCustomBothClick().contains(blockM)) { - if (!hasuse) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use); - return; - } + if (plugin.getConfigManager().getCustomBothClick().contains(blockM)) { + if (!hasuse) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.use); + return; } - if (plugin.getConfigManager().getCustomRightClick().contains(blockM) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (!hasuse) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use); - return; - } + } + if (plugin.getConfigManager().getCustomRightClick().contains(blockM) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (!hasuse) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.use); + return; } } } + } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1432,9 +1427,9 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { if (res == null) return; - boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); - - if (!hasContainerBypass) +// boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); +// +// if (!hasContainerBypass) if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); event.setCancelled(true); @@ -1488,9 +1483,9 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) if (res == null) return; - boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); - - if (!hasContainerBypass) +// boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); +// +// if (!hasContainerBypass) if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); event.setCancelled(true); @@ -1613,7 +1608,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { if (!(ent instanceof Hanging)) return; - Hanging hanging = (Hanging) ent; +// Hanging hanging = (Hanging) ent; Material heldItem = plugin.getNms().itemInMainHand(player).getType(); @@ -1629,9 +1624,9 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { return; } - boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); - - if (!hasContainerBypass) +// boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); +// +// if (!hasContainerBypass) if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.container); @@ -2109,53 +2104,52 @@ public void run() { if (res.isUnderRaid()) { if (res.getRaid().isAttacker(player.getUniqueId()) || res.getRaid().isDefender(player.getUniqueId())) { return true; - } else { - Location lastLoc = lastOutsideLoc.get(uuid); + } + Location lastLoc = lastOutsideLoc.get(uuid); - if (plugin.getConfigManager().BounceAnimation()) { - Visualizer v = new Visualizer(player); - v.setErrorAreas(res); - v.setOnce(true); - plugin.getSelectionManager().showBounds(player, v); - } + if (plugin.getConfigManager().BounceAnimation()) { + Visualizer v = new Visualizer(player); + v.setErrorAreas(res); + v.setOnce(true); + plugin.getSelectionManager().showBounds(player, v); + } - ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); - boolean teleported = false; - if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { - Location newLoc = res.getOutsideFreeLoc(loc, player); - player.closeInventory(); - teleported = teleport(player, newLoc); - } else if (lastLoc != null) { + ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); + boolean teleported = false; + if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); + teleported = teleport(player, newLoc); + } else if (lastLoc != null) { - StuckInfo info = updateStuckTeleport(player, loc); - player.closeInventory(); - if (info != null && info.getTimesTeleported() > 5) { - Location newLoc = res.getOutsideFreeLoc(loc, player); - teleported = teleport(player, newLoc); - } else { - teleported = teleport(player, lastLoc); - } - } else { - Location newLoc = res.getOutsideFreeLoc(loc, player); - player.closeInventory(); - teleported = teleport(player, newLoc); - } + StuckInfo info = updateStuckTeleport(player, loc); + player.closeInventory(); + if (info != null && info.getTimesTeleported() > 5) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + teleported = teleport(player, newLoc); + } else { + teleported = teleport(player, lastLoc); + } + } else { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); + teleported = teleport(player, newLoc); + } - switch (plugin.getConfigManager().getEnterLeaveMessageType()) { - case ActionBar: - case TitleBar: - FlagPermissions perms = res.getPermissions(); - if (perms.has(Flags.title, FlagCombo.TrueOrNone)) - ActionBarTitleMessages.send(player, plugin.msg(lm.Raid_cantDo)); - break; - case ChatBox: - plugin.msg(player, lm.Raid_cantDo, orres.getName()); - break; - default: - break; - } - return teleported; + switch (plugin.getConfigManager().getEnterLeaveMessageType()) { + case ActionBar: + case TitleBar: + FlagPermissions perms = res.getPermissions(); + if (perms.has(Flags.title, FlagCombo.TrueOrNone)) + ActionBarTitleMessages.send(player, plugin.msg(lm.Raid_cantDo)); + break; + case ChatBox: + plugin.msg(player, lm.Raid_cantDo, orres.getName()); + break; + default: + break; } + return teleported; } if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move.hasPermission(player, 10000L)) { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index cf2e5cd76..13c42f81e 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -28,6 +28,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.utils.Debug; public class FlagPermissions { @@ -289,6 +290,25 @@ public static FlagPermissions parseFromConfigNodeAsList(String node, String stag return list; } + protected Map getPlayerFlags(Player player, boolean allowCreate) { + + UUID uuid = player.getUniqueId(); + Map flags = playerFlags.get(uuid.toString()); + if (flags == null) { + flags = playerFlags.get(player.getName()); + if (flags != null) { + flags = playerFlags.remove(player.getName()); + playerFlags.put(uuid.toString(), flags); + } + } + + if (flags == null && allowCreate) { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(uuid.toString(), flags); + } + return flags; + } + protected Map getPlayerFlags(String player, boolean allowCreate)//this function works with uuid in string format as well, instead of player name { @@ -457,7 +477,7 @@ public boolean playerHas(Player player, Flags flag, boolean def) { ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = resPlayer.getGroup(); - return this.playerCheck(player.getName(), flag.toString(), this.groupCheck(group, flag.toString(), this.has(flag, def))); + return this.playerCheck(player, flag.toString(), this.groupCheck(group, flag.toString(), this.has(flag, def))); } public boolean playerHas(Player player, String world, Flags flag, boolean def) { @@ -466,30 +486,7 @@ public boolean playerHas(Player player, String world, Flags flag, boolean def) { ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = resPlayer.getGroup(world); - return this.playerCheck(player.getName(), flag.toString(), this.groupCheck(group, flag.toString(), this.has(flag, def))); - } - -// public boolean playerHas(String player, String world, Flags flag, boolean def) { -// return playerHas(player, world, flag.getName(), def); -// } - - public boolean playerHas(String player, String world, String flag, FlagCombo f) { - switch (f) { - case FalseOrNone: - return !this.playerCheck(player, flag, this.groupCheck(Residence.getInstance().getPlayerManager().getResidencePlayer(player).getGroup(world), flag, localHas(flag, false, true))); -// return !this.playerHas(player, world, flag.toString(), false); - case OnlyFalse: - return !this.playerCheck(player, flag, this.groupCheck(Residence.getInstance().getPlayerManager().getResidencePlayer(player).getGroup(world), flag, localHas(flag, true, true))); -// return !this.playerHas(player, world, flag.toString(), true); - case OnlyTrue: - return this.playerCheck(player, flag, this.groupCheck(Residence.getInstance().getPlayerManager().getResidencePlayer(player).getGroup(world), flag, localHas(flag, false, true))); -// return this.playerHas(player, world, flag.toString(), false); - case TrueOrNone: - return this.playerCheck(player, flag, this.groupCheck(Residence.getInstance().getPlayerManager().getResidencePlayer(player).getGroup(world), flag, localHas(flag, true, true))); -// return this.playerHas(player, world, flag.toString(), true); - default: - return false; - } + return this.playerCheck(player, flag.toString(), this.groupCheck(group, flag.toString(), this.has(flag, def))); } @Deprecated @@ -503,6 +500,20 @@ public boolean groupHas(String group, String flag, boolean def) { return this.groupCheck(group, flag, this.has(flag, def)); } + private boolean playerCheck(Player player, String flag, boolean def) { + Map pmap = this.getPlayerFlags(player, false); + if (pmap != null) { + if (pmap.containsKey(flag)) { + return pmap.get(flag); + } + } + if (parent != null) { + return parent.playerCheck(player, flag, def); + } + return def; + } + + @Deprecated private boolean playerCheck(String player, String flag, boolean def) { Map pmap = this.getPlayerFlags(player, false); if (pmap != null) { @@ -580,16 +591,6 @@ public boolean has(String flag, boolean def, boolean checkParent) { return def; } - private boolean localHas(String flag, boolean def, boolean checkParent) { - if (cuboidFlags.containsKey(flag)) { - return cuboidFlags.get(flag); - } - if (checkParent && parent != null) { - return parent.has(flag, def); - } - return def; - } - public boolean isPlayerSet(String player, String flag) { Map flags = this.getPlayerFlags(player, false); if (flags == null) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 970b5f117..c3d5262c5 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -22,6 +22,7 @@ import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidencePermissions extends FlagPermissions { @@ -52,7 +53,7 @@ public boolean playerHas(CommandSender sender, Flags flag, boolean def) { @Override public boolean playerHas(Player player, Flags flag, boolean def) { - return playerHas(player, flag.toString(), def); + return playerHas(player, player.getWorld().getName(), flag, def); } @Deprecated @@ -84,6 +85,22 @@ public boolean playerHas(Player player, Flags flag, FlagCombo f) { } } + @Deprecated + public boolean playerHas(String player, Flags flag, FlagCombo f) { + switch (f) { + case FalseOrNone: + return !this.playerHas(player, world, flag.toString(), false); + case OnlyFalse: + return !this.playerHas(player, world, flag.toString(), true); + case OnlyTrue: + return this.playerHas(player, world, flag.toString(), false); + case TrueOrNone: + return this.playerHas(player, world, flag.toString(), true); + default: + return false; + } + } + @Override public boolean playerHas(Player player, String world, Flags flag, boolean def) { if (player == null) @@ -279,7 +296,7 @@ private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState sta Residence.getInstance().msg(sender, lm.General_NoPermission); return false; } - if (!hasFlagAccess(this.getOwner(), flag) && !ResPerm.flag_$1.hasPermission(sender, flag.toLowerCase())) { + if (!hasFlagAccess(this.getOwner(), flag) && !ResPerm.flag_$1.hasPermission(sender, 10000L, flag.toLowerCase())) { Residence.getInstance().msg(sender, lm.Flag_SetFailed, flag); return false; } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 19163b09f..da8e56aef 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -14,7 +14,6 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.Sign; From 851e33d95bd26823d07388d5340aaf757932a8c5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 20 Mar 2020 14:53:38 +0200 Subject: [PATCH 0714/1142] Disabling couple extra bypass permission checks, lets see how it goes. --- .../bekvon/bukkit/residence/Residence.java | 1 + .../listeners/ResidenceBlockListener.java | 21 ++-- .../listeners/ResidenceEntityListener.java | 2 +- .../listeners/ResidencePlayerListener.java | 115 ++++++++++-------- .../residence/protection/FlagPermissions.java | 8 ++ .../protection/ResidenceManager.java | 18 +-- .../protection/ResidencePermissions.java | 26 ++++ 7 files changed, 121 insertions(+), 70 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 44d78bfd8..84ff3f07f 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -117,6 +117,7 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.CrackShot; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.Sorting; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 67c82243b..9d167c837 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -210,9 +210,12 @@ public void onBlockBreak(BlockBreakEvent event) { } ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + + if (res != null && res.getItemIgnoreList().isListed(mat)) + return; + if (plugin.getConfigManager().enabledRentSystem() && res != null) { - String resname = res.getName(); - if (plugin.getConfigManager().preventRentModify() && plugin.getRentManager().isRented(resname)) { + if (plugin.getConfigManager().preventRentModify() && res.isRented()) { plugin.msg(player, lm.Rent_ModifyDeny); event.setCancelled(true); return; @@ -220,8 +223,6 @@ public void onBlockBreak(BlockBreakEvent event) { } FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - if (res != null && res.getItemIgnoreList().isListed(mat)) - return; boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); @@ -231,7 +232,9 @@ public void onBlockBreak(BlockBreakEvent event) { } } - if (!hasdestroy && !ResPerm.bypass_destroy.hasPermission(player, 10000L)) { + if (!hasdestroy +// && !ResPerm.bypass_destroy.hasPermission(player, 10000L) + ) { plugin.msg(player, lm.Flag_Deny, Flags.destroy); event.setCancelled(true); } else if (mat == Material.CHEST && !perms.playerHas(player, Flags.container, true)) { @@ -641,7 +644,9 @@ public void onBlockPlace(BlockPlaceEvent event) { } } - if (!hasplace && !ResPerm.bypass_build.hasPermission(player, 10000L)) { + if (!hasplace +// && !ResPerm.bypass_build.hasPermission(player, 10000L) + ) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); return; @@ -653,7 +658,9 @@ public void onBlockPlace(BlockPlaceEvent event) { if (sec != null) { perms = plugin.getPermsByLocForPlayer(sec.getLocation(), player); hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - if (!hasplace && !ResPerm.bypass_build.hasPermission(player, 10000L)) { + if (!hasplace +// && !ResPerm.bypass_build.hasPermission(player, 10000L) + ) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index eb4411e7b..a7ba33965 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1298,7 +1298,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (event.getEntityType() == EntityType.ITEM_FRAME) { ItemFrame it = (ItemFrame) event.getEntity(); if (it.getItem() != null) { - if (!ResPerm.bypass_container.hasPermission(player, 10000L)) +// if (!ResPerm.bypass_container.hasPermission(player, 10000L)) if (!perms.playerHas(player, Flags.container, true)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.container); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 279e62c3d..09a884d95 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -76,6 +76,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -152,8 +153,8 @@ public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { return; if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itempickup, FlagCombo.OnlyFalse)) return; - if (ResPerm.bypass_itempickup.hasPermission(event.getPlayer(), 10000L)) - return; +// if (ResPerm.bypass_itempickup.hasPermission(event.getPlayer(), 10000L)) +// return; event.setCancelled(true); event.getItem().setPickupDelay(plugin.getConfigManager().getItemPickUpDelay() * 20); } @@ -824,7 +825,9 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { return; FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); - f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { + f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) +// && !ResPerm.bypass_nofly.hasPermission(player, 10000L) + ) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null && res.isOwner(player)) @@ -1025,14 +1028,15 @@ public void onPlayerFireInteract(PlayerInteractEvent event) { if (relativeBlock == null) return; + if (relativeBlock.getType() != Material.FIRE) + return; + Player player = event.getPlayer(); if (player.hasMetadata("NPC")) return; if (plugin.isResAdminOn(player)) return; FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - if (relativeBlock.getType() != Material.FIRE) - return; boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); if (hasplace) @@ -1066,7 +1070,7 @@ public void onPlatePress(PlayerInteractEvent event) { boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); if ((!hasuse && !haspressure || !haspressure) && mat.isPlate() // && !ResPerm.bypass_use.hasPermission(player, 10000L) - ) { + ) { event.setCancelled(true); return; } @@ -1104,7 +1108,6 @@ public void onSelection(PlayerInteractEvent event) { if (player.hasMetadata("NPC")) return; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); boolean resadmin = plugin.isResAdminOn(player); @@ -1289,8 +1292,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } // if (!ResPerm.bypass_container.hasPermission(player, 10000L)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, result); + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, result); // } return; } @@ -1335,9 +1338,9 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (plugin.getConfigManager().getCustomContainers().contains(blockM)) { - if (!perms.playerHas(player, Flags.container, hasuse) + if (!perms.playerHas(player, Flags.container, hasuse) // || !ResPerm.bypass_container.hasPermission(player, 10000L) - ) { + ) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.container); return; @@ -1430,10 +1433,10 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { // boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); // // if (!hasContainerBypass) - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); - event.setCancelled(true); - } + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1486,10 +1489,10 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) // boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); // // if (!hasContainerBypass) - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); - event.setCancelled(true); - } + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1627,10 +1630,10 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { // boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); // // if (!hasContainerBypass) - if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container); - } + if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.container); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1744,7 +1747,9 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { return; if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { - if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) && !ResPerm.bypass_tp.hasPermission(player, 10000L)) { + if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) +// && !ResPerm.bypass_tp.hasPermission(player, 10000L) + ) { event.setCancelled(true); plugin.msg(player, lm.Residence_MoveDeny, res.getName()); return; @@ -1834,8 +1839,8 @@ private static Location getSafeLocation(Location loc) { private void fly(Player player, boolean state) { if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) return; - if (ResPerm.bypass_fly.hasPermission(player, 10000L)) - return; +// if (ResPerm.bypass_fly.hasPermission(player, 10000L)) +// return; if (!state) { boolean land = player.isFlying(); player.setFlying(state); @@ -2029,8 +2034,9 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move } else { if (res != null && ResOld.getName().equals(res.getName())) { - if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && - !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { + if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) +// && !ResPerm.bypass_nofly.hasPermission(player, 10000L) + ) { if (!res.isOwner(player)) { Location lc = player.getLocation(); Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); @@ -2108,46 +2114,46 @@ public void run() { Location lastLoc = lastOutsideLoc.get(uuid); if (plugin.getConfigManager().BounceAnimation()) { - Visualizer v = new Visualizer(player); - v.setErrorAreas(res); - v.setOnce(true); - plugin.getSelectionManager().showBounds(player, v); + Visualizer v = new Visualizer(player); + v.setErrorAreas(res); + v.setOnce(true); + plugin.getSelectionManager().showBounds(player, v); } ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); boolean teleported = false; if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { - Location newLoc = res.getOutsideFreeLoc(loc, player); - player.closeInventory(); - teleported = teleport(player, newLoc); + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); + teleported = teleport(player, newLoc); } else if (lastLoc != null) { - StuckInfo info = updateStuckTeleport(player, loc); - player.closeInventory(); - if (info != null && info.getTimesTeleported() > 5) { + StuckInfo info = updateStuckTeleport(player, loc); + player.closeInventory(); + if (info != null && info.getTimesTeleported() > 5) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + teleported = teleport(player, newLoc); + } else { + teleported = teleport(player, lastLoc); + } + } else { Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); teleported = teleport(player, newLoc); - } else { - teleported = teleport(player, lastLoc); - } - } else { - Location newLoc = res.getOutsideFreeLoc(loc, player); - player.closeInventory(); - teleported = teleport(player, newLoc); } switch (plugin.getConfigManager().getEnterLeaveMessageType()) { case ActionBar: case TitleBar: - FlagPermissions perms = res.getPermissions(); - if (perms.has(Flags.title, FlagCombo.TrueOrNone)) - ActionBarTitleMessages.send(player, plugin.msg(lm.Raid_cantDo)); - break; + FlagPermissions perms = res.getPermissions(); + if (perms.has(Flags.title, FlagCombo.TrueOrNone)) + ActionBarTitleMessages.send(player, plugin.msg(lm.Raid_cantDo)); + break; case ChatBox: - plugin.msg(player, lm.Raid_cantDo, orres.getName()); - break; + plugin.msg(player, lm.Raid_cantDo, orres.getName()); + break; default: - break; + break; } return teleported; } @@ -2202,8 +2208,9 @@ public void run() { } // Preventing fly in residence only when player has move permission - f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && - !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { + f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) +// && !ResPerm.bypass_nofly.hasPermission(player, 10000L) + ) { if (res.isOwner(player)) break f; Location lc = player.getLocation(); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 13c42f81e..280bc7bc3 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -291,6 +291,8 @@ public static FlagPermissions parseFromConfigNodeAsList(String node, String stag } protected Map getPlayerFlags(Player player, boolean allowCreate) { + if(player == null) + return new HashMap(); UUID uuid = player.getUniqueId(); Map flags = playerFlags.get(uuid.toString()); @@ -471,6 +473,12 @@ public static FlagState stringToFlagState(String flagstate) { } } + public boolean playerHas(ResidencePlayer resPlayer, Flags flag, boolean def) { + if (resPlayer == null) + return false; + return this.playerCheck(resPlayer.getPlayer(), flag.toString(), this.groupCheck(resPlayer.getGroup(), flag.toString(), this.has(flag, def))); + } + public boolean playerHas(Player player, Flags flag, boolean def) { if (player == null) return false; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 8fbcd3473..e1cd6462d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -72,6 +72,7 @@ public ClaimedResidence getByLoc(Player player) { @Override public ClaimedResidence getByLoc(Location loc) { + if (loc == null) return null; World world = loc.getWorld(); @@ -80,15 +81,17 @@ public ClaimedResidence getByLoc(Location loc) { String worldName = world.getName(); if (worldName == null) return null; - ClaimedResidence res = null; - ChunkRef chunk = new ChunkRef(loc); if (!chunkResidences.containsKey(worldName)) return null; + ClaimedResidence res = null; + ChunkRef chunk = new ChunkRef(loc); Map> ChunkMap = chunkResidences.get(worldName); - if (ChunkMap.containsKey(chunk)) { - for (ClaimedResidence entry : ChunkMap.get(chunk)) { + List chunks = ChunkMap.get(chunk); + + if (chunks != null) { + for (ClaimedResidence entry : chunks) { if (entry == null) continue; if (entry.containsLoc(loc)) { @@ -97,7 +100,6 @@ public ClaimedResidence getByLoc(Location loc) { } } } - if (res == null) return null; @@ -500,7 +502,7 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole plugin.msg(player, lm.Residence_CantRemove, res.getName(), rented.getName(), rented.getRentedLand().player); return; } - if (player!= null && res.isRented() && !player.getName().equalsIgnoreCase(res.getRentedLand().player)) { + if (player != null && res.isRented() && !player.getName().equalsIgnoreCase(res.getRentedLand().player)) { plugin.msg(player, lm.Residence_CantRemove, res.getName(), res.getName(), res.getRentedLand().player); return; } @@ -1110,12 +1112,12 @@ public boolean renameResidence(Player player, String oldName, String newName, bo plugin.msg(player, lm.Invalid_Residence); return false; } - + if (res.isRaidInitialized() && !resadmin) { plugin.msg(player, lm.Raid_cantDo); return false; } - + oldName = res.getName(); if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { if (res.getParent() == null) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index c3d5262c5..62a0032ec 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -85,6 +85,32 @@ public boolean playerHas(Player player, Flags flag, FlagCombo f) { } } + public boolean playerHas(ResidencePlayer player, Flags flag, FlagCombo f) { + switch (f) { + case FalseOrNone: + return !this.playerHas(player, flag, false); + case OnlyFalse: + return !this.playerHas(player, flag, true); + case OnlyTrue: + return this.playerHas(player, flag, false); + case TrueOrNone: + return this.playerHas(player, flag, true); + default: + return false; + } + } + + @Override + public boolean playerHas(ResidencePlayer player, Flags flag, boolean def) { + if (player == null) + return false; + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag.toString(), FlagType.PLAYER, player.getName(), def); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + return super.playerHas(player, flag, def); + } + @Deprecated public boolean playerHas(String player, Flags flag, FlagCombo f) { switch (f) { From 801d6e268974e78b0ed864434940316ce9746001 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 21 Mar 2020 16:05:57 +0200 Subject: [PATCH 0715/1142] Optimizing permission check --- src/com/bekvon/bukkit/cmiLib/RawMessage.java | 7 --- .../bukkit/residence/ConfigManager.java | 6 +- .../bekvon/bukkit/residence/Residence.java | 6 +- .../bukkit/residence/commands/limits.java | 2 +- .../bukkit/residence/commands/list.java | 5 +- .../residence/containers/ResidencePlayer.java | 52 ++++++++++------ .../residence/economy/rent/RentManager.java | 22 +++---- .../bukkit/residence/gui/setFlagInfo.java | 14 ++--- .../listeners/ResidenceBlockListener.java | 30 +++++++-- .../listeners/ResidencePlayerListener.java | 7 ++- .../permissions/PermissionManager.java | 45 ++++++++++++-- .../residence/protection/PlayerManager.java | 61 ++++++++----------- .../protection/ResidencePermissions.java | 12 ++-- src/plugin.yml | 2 +- 14 files changed, 165 insertions(+), 106 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessage.java b/src/com/bekvon/bukkit/cmiLib/RawMessage.java index 81aa19617..71049014f 100644 --- a/src/com/bekvon/bukkit/cmiLib/RawMessage.java +++ b/src/com/bekvon/bukkit/cmiLib/RawMessage.java @@ -520,17 +520,10 @@ public RawMessage show(Player player, boolean softCombined) { for (String one : softCombine()) { if (one.isEmpty()) continue; - -// if (Version.isCurrentEqualOrHigher(Version.v1_8_R1)) ActionBarTitleMessages.sendRaw(player, one); -// else -// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + one); } } else { -// if (Version.isCurrentEqualOrHigher(Version.v1_8_R1)) ActionBarTitleMessages.sendRaw(player, combined); -// else -// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + combined); } return this; diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 0004dca27..c8c051e74 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -786,7 +786,7 @@ public void UpdateConfigFile() { c.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); autoSaveInt = c.get("Global.SaveInterval", 10); c.addComment("Global.NewSaveMechanic", "New save mechanic can minimize save file couple times and speedup save/load time in general", "Bigger files have bigger impact"); - NewSaveMechanic = c.get("Global.NewSaveMechanic", false); + NewSaveMechanic = c.get("Global.NewSaveMechanic", true); c.addComment("Global.Backup.AutoCleanUp.Use", "Do you want to automatically remove backup files from main backup folder if they are older than defined day amount"); @@ -875,11 +875,11 @@ public void UpdateConfigFile() { "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", "Effective way to prevent residence creating near greefing target and then remove it", "ATTENTION! Bigger residence areas could want to create bigger loads on server when cleaning up areas. So dont use this if regular player have access to huge residences. 15 million blocks would be a max limit"); - UseClean = c.get("Global.AntiGreef.ResCleaning.Use", true); + UseClean = c.get("Global.AntiGreef.ResCleaning.Use", false); c.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); CleanLevel = c.get("Global.AntiGreef.ResCleaning.Level", 63); c.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); - List pls = c.getList("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(CMIMaterial.WATER.toString(), CMIMaterial.LAVA.toString())); + List pls = c.get("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(CMIMaterial.WATER.toString(), CMIMaterial.LAVA.toString())); for (Object one : pls) { CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); if (mat != CMIMaterial.NONE && mat.getMaterial() != null) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 84ff3f07f..a0fdf0e45 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -398,6 +398,8 @@ public void onDisable() { server.getScheduler().cancelTask(DespawnMobsBukkitId); + this.getPermissionManager().stopCacheClearScheduler(); + if (getConfigManager().useLeases()) { server.getScheduler().cancelTask(leaseBukkitId); } @@ -438,7 +440,7 @@ public void onDisable() { public void onEnable() { try { instance = this; - + initsuccess = false; versionChecker = new VersionChecker(this); deleteConfirm = new HashMap(); @@ -536,6 +538,8 @@ public void onEnable() { } gmanager = new PermissionManager(this); + this.getPermissionManager().startCacheClearScheduler(); + imanager = new WorldItemManager(this); wmanager = new WorldFlagManager(this); diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 630a65dcc..2e3dcf74b 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -33,7 +33,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (target == null) return false; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(target.getName(), true); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(target.getUniqueId()); rPlayer.getGroup().printLimits(sender, target, rsadm); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 369a8ca96..1affba6c1 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.utils.Debug; public class list implements cmd { @@ -21,7 +22,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo World world = null; String target = null; - c: for (int i = 1; i < args.length; i++) { + c: for (int i = 0; i < args.length; i++) { try { page = Integer.parseInt(args[i]); if (page < 1) @@ -41,7 +42,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (target != null && !sender.getName().equalsIgnoreCase(target) && !ResPerm.command_$1_others.hasPermission(sender, this.getClass().getSimpleName())) return true; - + plugin.getResidenceManager().listResidences(sender, target, page, false, false, resadmin, world); return true; diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 56c1f9d39..836929804 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -38,8 +38,6 @@ public class ResidencePlayer { private int maxSubzones = -1; private int maxSubzoneDepth = -1; - private Long lastRecalculation = 0L; - private int maxValue = 9999; private Long lastRaidAttackTimer = 0L; @@ -54,7 +52,6 @@ public ResidencePlayer(OfflinePlayer off) { this.userName = off.getName(); Residence.getInstance().addOfflinePlayerToChache(off); this.updatePlayer(); - this.RecalculatePermissions(); } public ResidencePlayer(Player player) { @@ -62,7 +59,6 @@ public ResidencePlayer(Player player) { return; Residence.getInstance().addOfflinePlayerToChache(player); this.updatePlayer(player); - this.RecalculatePermissions(); } public boolean isOnline() { @@ -75,14 +71,10 @@ public boolean isOnline() { public ResidencePlayer(String userName, UUID uuid) { this.userName = userName; this.uuid = uuid; - if (this.isOnline()) - RecalculatePermissions(); } public ResidencePlayer(String userName) { this.userName = userName; - if (this.isOnline()) - RecalculatePermissions(); } public void setMainResidence(ClaimedResidence res) { @@ -118,18 +110,12 @@ public ClaimedResidence getMainResidence() { return mainResidence; } - public void RecalculatePermissions() { - if (lastRecalculation + 5000L > System.currentTimeMillis()) - return; - lastRecalculation = System.currentTimeMillis(); - - getGroup(); - recountMaxRes(); - recountMaxRents(); - recountMaxSubzones(); - } + private Long lastMaxResRecalculation = 0L; public void recountMaxRes() { + if (lastMaxResRecalculation + 10000L > System.currentTimeMillis()) + return; + lastMaxResRecalculation = System.currentTimeMillis(); if (this.getGroup() != null) this.maxRes = this.getGroup().getMaxZones(); this.maxRes = this.maxRes == -1 ? maxValue : this.maxRes; @@ -157,7 +143,13 @@ public void recountMaxRes() { } } + private Long lastMaxRentsRecalculation = 0L; + public void recountMaxRents() { + if (lastMaxRentsRecalculation + 10000L > System.currentTimeMillis()) + return; + lastMaxRentsRecalculation = System.currentTimeMillis(); + if (player != null) { if (ResPerm.max_rents_unlimited.hasSetPermission(player)) { this.maxRents = maxValue; @@ -192,7 +184,13 @@ public int getMaxRents() { return this.maxRents; } + private Long lastMaxSubzonesRecalculation = 0L; + public void recountMaxSubzones() { + if (lastMaxSubzonesRecalculation + 10000L > System.currentTimeMillis()) + return; + lastMaxSubzonesRecalculation = System.currentTimeMillis(); + if (player != null) { if (ResPerm.max_subzones_unlimited.hasSetPermission(player)) { this.maxSubzones = maxValue; @@ -227,7 +225,13 @@ public int getMaxSubzones() { return this.maxSubzones; } + private Long lastMaxSubzonesDepthRecalculation = 0L; + public void recountMaxSubzoneDepth() { + if (lastMaxSubzonesDepthRecalculation + 10000L > System.currentTimeMillis()) + return; + lastMaxSubzonesDepthRecalculation = System.currentTimeMillis(); + if (player != null) { if (ResPerm.max_subzonedepth_unlimited.hasSetPermission(player)) { this.maxSubzoneDepth = maxValue; @@ -295,7 +299,13 @@ public PermissionGroup getGroup(String world, boolean force) { return group; } + private boolean updated = false; + public ResidencePlayer updatePlayer(Player player) { + if (updated) + return this; + if (player.isOnline()) + updated = true; this.player = player; this.uuid = player.getUniqueId(); this.userName = player.getName(); @@ -303,6 +313,12 @@ public ResidencePlayer updatePlayer(Player player) { return this; } + public void onQuit() { + this.ofPlayer = null; + this.player = null; + updated = false; + } + private void updatePlayer() { player = Bukkit.getPlayer(this.uuid); if (player != null) diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index a8cb76af7..be7c380b4 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -1,7 +1,17 @@ package com.bekvon.bukkit.residence.economy.rent; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.TreeMap; + import org.bukkit.ChatColor; import org.bukkit.World; +import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; @@ -16,20 +26,8 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.TreeMap; - -import org.bukkit.entity.Player; - public class RentManager implements MarketRentInterface { private Set rentedLand; private Set rentableLand; diff --git a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java index 32a4c664b..cecd5e9fc 100644 --- a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java +++ b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java @@ -264,10 +264,10 @@ public void click(GUIClickType type) { break; } - Bukkit.dispatchCommand(player, cmdPrefix + " pset " + residence.getName() + targetPlayerName + " " + Flags.getFlag(one.getKey()) + " " + command); + Bukkit.dispatchCommand(player, cmdPrefix + " pset " + residence.getName() + targetPlayerName + " " + one.getKey() + " " + command); if (Residence.getInstance().getConfigManager().isConsoleLogsShowFlagChanges()) - Residence.getInstance().consoleMessage(player.getName() + " issued server command: /" + cmdPrefix + " pset " + residence.getName() + targetPlayerName + " " + Flags.getFlag(one - .getKey()) + " " + command); + Residence.getInstance().consoleMessage(player.getName() + " issued server command: /" + cmdPrefix + " pset " + residence.getName() + targetPlayerName + " " + one + .getKey() + " " + command); updateLooks(); } @@ -293,14 +293,14 @@ private ItemStack updateLook(String flagName) { ResidencePermissions fp = this.residence.getPermissions(); if (this.targetPlayer != null) { - if (fp.playerHas(targetPlayer, Flags.getFlag(flagName), FlagCombo.OnlyTrue)) + if (fp.playerHas(targetPlayer, flagName, FlagCombo.OnlyTrue)) have = true; - else if (fp.playerHas(targetPlayer, Flags.getFlag(flagName), FlagCombo.OnlyFalse)) + else if (fp.playerHas(targetPlayer, flagName, FlagCombo.OnlyFalse)) have = false; } else { - if (fp.has(Flags.getFlag(flagName), FlagCombo.OnlyTrue)) + if (fp.has(flagName, FlagCombo.OnlyTrue)) have = true; - else if (fp.has(Flags.getFlag(flagName), FlagCombo.OnlyFalse)) + else if (fp.has(flagName, FlagCombo.OnlyFalse)) have = false; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 9d167c837..ba6bc3cb5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -191,6 +191,7 @@ public void onTreeGrow(StructureGrowEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { + // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -380,6 +381,27 @@ public void onBlockFall(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestPlace(BlockPlaceEvent event) { + + Long time = System.nanoTime(); + event.getPlayer().hasPermission("residence.newguyresidence"); + Debug.D("Bukkit1: " + (System.nanoTime() - time)); + time = System.nanoTime(); + ResPerm.newguyresidence.hasPermission(event.getPlayer(), 100L); + Debug.D("took2: " + (System.nanoTime() - time)); + time = System.nanoTime(); + ResPerm.newguyresidence.hasPermission(event.getPlayer(), 100L); + Debug.D("took1: " + (System.nanoTime() - time)); + time = System.nanoTime(); + ResPerm.newguyresidence.hasPermission(event.getPlayer(), 100L); + Debug.D("took11: " + (System.nanoTime() - time)); + time = System.nanoTime(); + ResPerm.newguyresidence.hasPermission(event.getPlayer(), 100L); + Debug.D("took12: " + (System.nanoTime() - time)); + time = System.nanoTime(); + event.getPlayer().hasPermission("residence.newguyresidence"); + Debug.D("Bukkit2: " + (System.nanoTime() - time)); + + // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -644,9 +666,9 @@ public void onBlockPlace(BlockPlaceEvent event) { } } - if (!hasplace + if (!hasplace // && !ResPerm.bypass_build.hasPermission(player, 10000L) - ) { + ) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); return; @@ -658,9 +680,9 @@ public void onBlockPlace(BlockPlaceEvent event) { if (sec != null) { perms = plugin.getPermsByLocForPlayer(sec.getLocation(), player); hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - if (!hasplace + if (!hasplace // && !ResPerm.bypass_build.hasPermission(player, 10000L) - ) { + ) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 09a884d95..74cc5b491 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -431,6 +431,9 @@ public void onResidenceDeleteEvent(ResidenceDeleteEvent event) { public void onPlayerQuitEvent(PlayerQuitEvent event) { Player player = event.getPlayer(); + + plugin.getPermissionManager().removeFromCache(player); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) @@ -447,6 +450,8 @@ public void onPlayerQuitEvent(PlayerQuitEvent event) { if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) player.setGlowing(false); + + plugin.getPlayerManager().getResidencePlayer(player).onQuit(); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -875,7 +880,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { } handleNewLocation(player, player.getLocation(), true); - plugin.getPlayerManager().playerJoin(player, false); + plugin.getPlayerManager().playerJoin(player); if (ResPerm.versioncheck.hasPermission(player)) { plugin.getVersionChecker().VersionCheck(player); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index e6250afd7..0febe1c0e 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.permissions; import java.io.File; +import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; @@ -31,6 +32,7 @@ import com.bekvon.bukkit.residence.containers.PlayerGroup; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; import com.nijikokun.bukkit.Permissions.Permissions; import com.platymuus.bukkit.permissions.PermissionsPlugin; @@ -45,6 +47,9 @@ public class PermissionManager { private PermissionGroup defaultGroup = null; private Residence plugin; + private int autoCacheClearId = 0; + private static final int cacheClearDelay = 600; + public PermissionManager(Residence plugin) { this.plugin = plugin; try { @@ -58,6 +63,18 @@ public PermissionManager(Residence plugin) { } } + public void startCacheClearScheduler() { + autoCacheClearId = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, cacheClear, cacheClearDelay * 20L, cacheClearDelay * 20L); + } + + public void stopCacheClearScheduler() { + try { + if (autoCacheClearId > 0) + Bukkit.getScheduler().cancelTask(autoCacheClearId); + } catch (Throwable e) { + } + } + public FlagPermissions getAllFlags() { return this.globalFlagPerms; } @@ -273,6 +290,7 @@ public enum ResPerm { private Boolean show = true; private String desc; private String[] wars; + private String fixedPermission = null; ResPerm(String desc, Boolean show) { this.desc = desc; @@ -319,6 +337,9 @@ public String getPermission() { } public String getPermission(String... extra) { + if (fixedPermission != null) + return fixedPermission; + String perm = this.name().replace("_", "."); int i = 0; for (String one : extra) { @@ -328,6 +349,11 @@ public String getPermission(String... extra) { perm = perm.replace("$" + i, one.toLowerCase()); } perm = perm.replace("$star", "*"); + + if (!this.name().contains("$")) { + fixedPermission = "residence." + perm; + } + return "residence." + perm; } @@ -397,7 +423,7 @@ public boolean hasPermission(CommandSender sender, boolean inform, boolean infor } if (!has && inform) { - boolean showPerm = ResPerm.permisiononerror.hasPermission(sender); + boolean showPerm = ResPerm.permisiononerror.hasPermission(sender, 50000L); RawMessage rm = new RawMessage(); rm.add(Residence.getInstance().getLM().getMessage(lms == null ? lm.General_NoPermission : lms), showPerm ? perm : null); rm.show(sender); @@ -492,14 +518,21 @@ public static boolean hasPermission(CommandSender sender, String permision, Bool } } - private HashMap> cahce = new HashMap>(); + private Runnable cacheClear = new Runnable() { + @Override + public void run() { + cache.clear(); + } + }; + + private HashMap> cache = new HashMap>(); public void removeFromCache(Player player) { - cahce.remove(player.getUniqueId()); + cache.remove(player.getUniqueId()); } public PermissionInfo getFromCache(Player player, String perm) { - HashMap old = cahce.get(player.getUniqueId()); + HashMap old = cache.get(player.getUniqueId()); if (old == null) { return null; } @@ -507,7 +540,7 @@ public PermissionInfo getFromCache(Player player, String perm) { } public PermissionInfo addToCache(Player player, String perm, boolean has, Long delayInMiliseconds) { - HashMap old = cahce.get(player.getUniqueId()); + HashMap old = cache.get(player.getUniqueId()); if (old == null) { old = new HashMap(); } @@ -517,7 +550,7 @@ public PermissionInfo addToCache(Player player, String perm, boolean has, Long d info.setEnabled(has); old.put(perm, info); - cahce.put(player.getUniqueId(), old); + cache.put(player.getUniqueId(), old); return info; } diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 1bbb78c70..b94fe920d 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -30,7 +30,7 @@ public PlayerManager(Residence plugin) { public void addPlayer(ResidencePlayer resPlayer) { if (resPlayer == null) return; - addPlayer(resPlayer.getPlayerName(), resPlayer.getUuid(), resPlayer); + addPlayer(resPlayer.getName(), resPlayer.getUniqueId(), resPlayer); } public void addPlayer(Player player, ResidencePlayer resPlayer) { @@ -47,27 +47,19 @@ public void addPlayer(String name, UUID uuid, ResidencePlayer resPlayer) { } public ResidencePlayer playerJoin(Player player) { - return playerJoin(player, true); - } - - public ResidencePlayer playerJoin(Player player, boolean recalculate) { ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId()); if (resPlayer == null) { resPlayer = new ResidencePlayer(player); addPlayer(resPlayer); } else { resPlayer.updatePlayer(player); - if (recalculate) - resPlayer.RecalculatePermissions(); } return resPlayer; } public ResidencePlayer playerJoin(UUID uuid) { ResidencePlayer resPlayer = playersUuid.get(uuid); - if (resPlayer != null) { - resPlayer.RecalculatePermissions(); - } else { + if (resPlayer == null) { OfflinePlayer off = Bukkit.getOfflinePlayer(uuid); if (off != null) { resPlayer = new ResidencePlayer(off); @@ -251,6 +243,10 @@ public int getMaxRents(String player) { return -1; } +// public ResidencePlayer getResidencePlayer(Player player) { +// return getResidencePlayer(player, true); +// } + public ResidencePlayer getResidencePlayer(Player player) { ResidencePlayer resPlayer = null; if (player == null) @@ -258,7 +254,6 @@ public ResidencePlayer getResidencePlayer(Player player) { resPlayer = playersUuid.get(player.getUniqueId()); if (resPlayer != null) { resPlayer.updatePlayer(player); - resPlayer.RecalculatePermissions(); } else { resPlayer = playerJoin(player); } @@ -267,35 +262,25 @@ public ResidencePlayer getResidencePlayer(Player player) { @Override public ResidencePlayer getResidencePlayer(String player) { - return getResidencePlayer(player, false); - } - - public ResidencePlayer getResidencePlayer(String player, boolean recalculate) { Player p = Bukkit.getPlayer(player); if (p != null) return getResidencePlayer(p); - ResidencePlayer resPlayer = null; - if (players.containsKey(player.toLowerCase())) { - resPlayer = players.get(player.toLowerCase()); - if (recalculate || resPlayer.isOnline()) - resPlayer.RecalculatePermissions(); - } else { - resPlayer = playerJoin(player); + ResidencePlayer rplayer = players.get(player.toLowerCase()); + if (rplayer != null) { + return rplayer; } - return resPlayer; + return playerJoin(player); } public ResidencePlayer getResidencePlayer(UUID uuid) { Player p = Bukkit.getPlayer(uuid); if (p != null) return getResidencePlayer(p); - ResidencePlayer resPlayer = null; - if (playersUuid.containsKey(uuid)) { - resPlayer = playersUuid.get(uuid); - } else { - resPlayer = playerJoin(uuid); + ResidencePlayer resPlayer = playersUuid.get(uuid); + if (resPlayer != null) { + return resPlayer; } - return resPlayer; + return playerJoin(uuid); } public ResidencePlayer getResidencePlayer(String name, UUID uuid) { @@ -305,15 +290,17 @@ public ResidencePlayer getResidencePlayer(String name, UUID uuid) { if (p != null) { return getResidencePlayer(p); } - ResidencePlayer resPlayer = null; - if (this.playersUuid.containsKey(uuid)) { - resPlayer = this.playersUuid.get(uuid); - } else if ((name != null) && (this.players.containsKey(name.toLowerCase()))) { - resPlayer = this.players.get(name.toLowerCase()); - } else { - resPlayer = playerJoin(name, uuid); + ResidencePlayer resPlayer = this.playersUuid.get(uuid); + if (resPlayer != null) { + return resPlayer; } - return resPlayer; + + if (name != null) + resPlayer = this.players.get(name.toLowerCase()); + if (resPlayer != null) + return resPlayer; + + return playerJoin(name, uuid); } public void addResidence(UUID uuid, ClaimedResidence residence) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 62a0032ec..fb60295c4 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -112,16 +112,16 @@ public boolean playerHas(ResidencePlayer player, Flags flag, boolean def) { } @Deprecated - public boolean playerHas(String player, Flags flag, FlagCombo f) { + public boolean playerHas(String player, String flag, FlagCombo f) { switch (f) { case FalseOrNone: - return !this.playerHas(player, world, flag.toString(), false); + return !this.playerHas(player, world, flag, false); case OnlyFalse: - return !this.playerHas(player, world, flag.toString(), true); + return !this.playerHas(player, world, flag, true); case OnlyTrue: - return this.playerHas(player, world, flag.toString(), false); + return this.playerHas(player, world, flag, false); case TrueOrNone: - return this.playerHas(player, world, flag.toString(), true); + return this.playerHas(player, world, flag, true); default: return false; } @@ -201,7 +201,7 @@ public boolean has(String flag, FlagCombo f, boolean checkParent) { @Override public boolean has(Flags flag, boolean def) { - return has(flag.toString(), def); + return has(flag.toString(), def, true); } @Override diff --git a/src/plugin.yml b/src/plugin.yml index 47c47ee34..cdba3d7ff 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.0.2 +version: 4.9.0.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 6e2e57a8e4d30be48e759be82fa551198f5eb8e8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 21 Mar 2020 16:06:26 +0200 Subject: [PATCH 0716/1142] Fix for /res set issue when you have custom flags --- src/com/bekvon/bukkit/residence/commands/list.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 1affba6c1..28c852ef1 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -41,8 +41,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } if (target != null && !sender.getName().equalsIgnoreCase(target) && !ResPerm.command_$1_others.hasPermission(sender, this.getClass().getSimpleName())) - return true; - + return true; plugin.getResidenceManager().listResidences(sender, target, page, false, false, resadmin, world); return true; From 8f53bd3212c5a23b0b7a77fecf5c490ca64058f8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 21 Mar 2020 16:06:53 +0200 Subject: [PATCH 0717/1142] Fix for /res list not accepting target player name --- src/com/bekvon/bukkit/residence/commands/list.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 28c852ef1..5ca55decb 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -11,7 +11,6 @@ import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import com.bekvon.bukkit.residence.utils.Debug; public class list implements cmd { @@ -42,6 +41,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (target != null && !sender.getName().equalsIgnoreCase(target) && !ResPerm.command_$1_others.hasPermission(sender, this.getClass().getSimpleName())) return true; + plugin.getResidenceManager().listResidences(sender, target, page, false, false, resadmin, world); return true; From aeb08ddb8e1e98d846e8c14b6959f746c7e0d07e Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 21 Mar 2020 16:12:09 +0200 Subject: [PATCH 0718/1142] Lets allow full customization of res info hover over text --- .../bukkit/residence/containers/lm.java | 1 + .../residence/text/help/InformationPager.java | 35 +++++++++---------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index e0a142ca4..0ae34b93c 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -496,6 +496,7 @@ public enum lm { General_WorldEditNotFound("&cWorldEdit was not detected."), General_CoordsTop("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), General_CoordsBottom("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), + General_CoordsLiner("&7 (&3%1&7;%2&7)"), General_AdminToggleTurnOn("&eAutomatic resadmin toggle turned &6On"), General_AdminToggleTurnOff("&eAutomatic resadmin toggle turned &6Off"), General_NoSpawn("&eYou do not have &6move &epermissions at your spawn point. Relocating"), diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index f40410a50..56e80518c 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -1,8 +1,19 @@ package com.bekvon.bukkit.residence.text.help; +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map.Entry; +import java.util.TreeMap; + import org.apache.commons.io.FileUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; @@ -14,18 +25,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.GetTime; -import java.io.File; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Map.Entry; -import java.util.TreeMap; - -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - public class InformationPager { Residence plugin; @@ -106,19 +105,17 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { - worldInfo += "&6 (&3"; CuboidArea area = res.getAreaArray()[0]; - worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() .getBlockZ()); - worldInfo += "&6; &3"; - worldInfo += plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() + + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() .getBlockZ()); - worldInfo += "&6)"; - worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + + String worldInfo = ChatColor.translateAlternateColorCodes('&', plugin.msg(lm.General_CoordsLiner, cord1, cord2)); StringB.append("\n" + worldInfo); } From ac5641652f43da782bd2ee6892b5eb139d418aff Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 21 Mar 2020 16:16:42 +0200 Subject: [PATCH 0719/1142] Res info extra customization when it comes to show limitations of tp and move --- src/com/bekvon/bukkit/residence/containers/lm.java | 4 ++++ .../bekvon/bukkit/residence/text/help/InformationPager.java | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 0ae34b93c..345234240 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -497,6 +497,10 @@ public enum lm { General_CoordsTop("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), General_CoordsBottom("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), General_CoordsLiner("&7 (&3%1&7;%2&7)"), + General_AllowedTeleportIcon("&2T"), + General_BlockedTeleportIcon("&7T"), + General_AllowedMovementIcon("&2M"), + General_BlockedMovementIcon("&7M"), General_AdminToggleTurnOn("&eAutomatic resadmin toggle turned &6On"), General_AdminToggleTurnOff("&eAutomatic resadmin toggle turned &6Off"), General_NoSpawn("&eYou do not have &6move &epermissions at your spawn point. Relocating"), diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 56e80518c..2f2c85223 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -144,8 +144,8 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap Date: Mon, 23 Mar 2020 14:57:45 +0200 Subject: [PATCH 0720/1142] This should not be here --- .../bekvon/bukkit/residence/Residence.java | 4 -- .../listeners/ResidenceBlockListener.java | 20 ---------- .../protection/ResidenceManager.java | 13 +++---- .../residence/text/help/InformationPager.java | 37 +++++-------------- src/plugin.yml | 2 +- 5 files changed, 16 insertions(+), 60 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index a0fdf0e45..a0664e878 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -16,11 +16,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.jar.JarEntry; @@ -117,12 +115,10 @@ import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; import com.bekvon.bukkit.residence.utils.CrackShot; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.Sorting; import com.bekvon.bukkit.residence.utils.TabComplete; -import com.bekvon.bukkit.residence.utils.YmlMaker; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; //import com.bekvon.bukkit.residence.towns.TownManager; import com.earth2me.essentials.Essentials; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index ba6bc3cb5..610784fe9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -381,26 +381,6 @@ public void onBlockFall(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestPlace(BlockPlaceEvent event) { - - Long time = System.nanoTime(); - event.getPlayer().hasPermission("residence.newguyresidence"); - Debug.D("Bukkit1: " + (System.nanoTime() - time)); - time = System.nanoTime(); - ResPerm.newguyresidence.hasPermission(event.getPlayer(), 100L); - Debug.D("took2: " + (System.nanoTime() - time)); - time = System.nanoTime(); - ResPerm.newguyresidence.hasPermission(event.getPlayer(), 100L); - Debug.D("took1: " + (System.nanoTime() - time)); - time = System.nanoTime(); - ResPerm.newguyresidence.hasPermission(event.getPlayer(), 100L); - Debug.D("took11: " + (System.nanoTime() - time)); - time = System.nanoTime(); - ResPerm.newguyresidence.hasPermission(event.getPlayer(), 100L); - Debug.D("took12: " + (System.nanoTime() - time)); - time = System.nanoTime(); - event.getPlayer().hasPermission("residence.newguyresidence"); - Debug.D("Bukkit2: " + (System.nanoTime() - time)); - // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index e1cd6462d..a2a23836e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -705,14 +705,11 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi String worldInfo = plugin.msg(lm.General_World, perms.getWorld()); - if (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin) { - worldInfo += "&6 (&3"; + if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { CuboidArea area = res.getAreaArray()[0]; - worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); - worldInfo += "&6; &3"; - worldInfo += plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); - worldInfo += "&6)"; - worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + worldInfo += ChatColor.translateAlternateColorCodes('&', plugin.msg(lm.General_CoordsLiner, cord1, cord2)); } worldInfo += "\n" + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.createTime)); @@ -853,7 +850,7 @@ public Map save() { try { resmap.put(res.getValue().getResidenceName(), res.getValue().save()); - } catch (Exception ex) { + } catch (Throwable ex) { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + " Failed to save residence (" + res.getKey() + ")!"); Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); } diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 2f2c85223..fffbda7be 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -107,14 +107,9 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { - CuboidArea area = res.getAreaArray()[0]; - String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() - .getBlockZ()); - - String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() - .getBlockZ()); - + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); String worldInfo = ChatColor.translateAlternateColorCodes('&', plugin.msg(lm.General_CoordsLiner, cord1, cord2)); StringB.append("\n" + worldInfo); } @@ -144,8 +139,8 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { - worldInfo += "&6 (&3"; CuboidArea area = res.getAreaArray()[0]; - worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() - .getBlockZ()); - worldInfo += "&6; &3"; - worldInfo += plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() - .getBlockZ()); - worldInfo += "&6)"; - worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + String worldInfo = ChatColor.translateAlternateColorCodes('&', plugin.msg(lm.General_CoordsLiner, cord1, cord2)); StringB.append("\n" + worldInfo); } @@ -264,18 +253,12 @@ public void run() { ClaimedResidence res = resT.getValue(); StringBuilder StringB = new StringBuilder(); StringB.append(" " + plugin.msg(lm.General_Owner, res.getOwner())); - String worldInfo = ""; if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { - worldInfo += "&6 (&3"; CuboidArea area = res.getAreaArray()[0]; - worldInfo += plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc() - .getBlockZ()); - worldInfo += "&6; &3"; - worldInfo += plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc() - .getBlockZ()); - worldInfo += "&6)"; - worldInfo = ChatColor.translateAlternateColorCodes('&', worldInfo); + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + String worldInfo = ChatColor.translateAlternateColorCodes('&', plugin.msg(lm.General_CoordsLiner, cord1, cord2)); StringB.append("\n" + worldInfo); } diff --git a/src/plugin.yml b/src/plugin.yml index cdba3d7ff..3580f22d7 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.0.3 +version: 4.9.0.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 9b9bc6ebe74f28e3280dfff252876bb308068611 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 23 Mar 2020 15:01:56 +0200 Subject: [PATCH 0721/1142] RandomTeleport not accepting custom variable --- src/com/bekvon/bukkit/residence/commands/rt.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 9c97b5818..ee6626e1b 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -33,7 +33,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo Player tPlayer = null; if (args.length > 0) { - c: for (int i = 1; i < args.length; i++) { + c: for (int i = 0; i < args.length; i++) { for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { if (!one.getCenter().getWorld().getName().equalsIgnoreCase(args[i])) continue; From 6c0764ec0310f5b83aa9a95a4d63e2e07a7855ea Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 23 Mar 2020 15:08:08 +0200 Subject: [PATCH 0722/1142] ServerControlReloaded as softdepend --- src/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugin.yml b/src/plugin.yml index 3580f22d7..06ab07f95 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -5,7 +5,7 @@ website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 authors: [bekvon,nate302,t00thpick1] -softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI] +softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI,ServerControlReloaded] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: From 064fc8bdc34361f6088c569e3e532067b45a3fbb Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 29 Apr 2020 12:11:45 +0300 Subject: [PATCH 0723/1142] We need this check --- src/com/bekvon/bukkit/CMIGUI/GUIManager.java | 7 +++++-- src/plugin.yml | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/CMIGUI/GUIManager.java b/src/com/bekvon/bukkit/CMIGUI/GUIManager.java index 41fb8674b..b725c33cb 100644 --- a/src/com/bekvon/bukkit/CMIGUI/GUIManager.java +++ b/src/com/bekvon/bukkit/CMIGUI/GUIManager.java @@ -35,6 +35,7 @@ public static void registerListener() { public enum GUIButtonLocation { topLeft(0, 0), topRight(0, 1), bottomLeft(1, 0), bottomRight(1, 1); + private Integer row; private Integer collumn; @@ -55,6 +56,7 @@ public Integer getCollumn() { public enum GUIRows { r1(1), r2(2), r3(3), r4(4), r5(5), r6(6); + private int rows; GUIRows(int rows) { @@ -124,7 +126,7 @@ public static GUIClickType getClickType(boolean left, boolean shift, InventoryAc } } - public static boolean processClick(final Player player, List buttons, final GUIClickType clickType) { + public static boolean processClick(final Player player, List buttons, final GUIClickType clickType) { CMIGui gui = map.get(player.getUniqueId()); if (gui == null) return false; @@ -320,7 +322,8 @@ public static void generateInventory(CMIGui gui) { public static void openGui(CMIGui gui) { Player player = gui.getPlayer(); - + if (player.isSleeping()) + return; CMIGui oldGui = null; if (isOpenedGui(player)) { oldGui = getGui(player); diff --git a/src/plugin.yml b/src/plugin.yml index 06ab07f95..b05702ab4 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.0.4 +version: 4.9.0.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From f40c5289d129f098acd6f65cf6a52fce8111464b Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 11:01:00 +0300 Subject: [PATCH 0724/1142] Turning back on bypass permissions --- .../listeners/ResidenceBlockListener.java | 6 +- .../listeners/ResidenceEntityListener.java | 2 +- .../listeners/ResidencePlayerListener.java | 99 +++++++++---------- .../residence/protection/FlagPermissions.java | 21 ++-- 4 files changed, 62 insertions(+), 66 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 610784fe9..a8f392a5b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -234,7 +234,7 @@ public void onBlockBreak(BlockBreakEvent event) { } if (!hasdestroy -// && !ResPerm.bypass_destroy.hasPermission(player, 10000L) + && !ResPerm.bypass_destroy.hasPermission(player, 10000L) ) { plugin.msg(player, lm.Flag_Deny, Flags.destroy); event.setCancelled(true); @@ -647,7 +647,7 @@ public void onBlockPlace(BlockPlaceEvent event) { } if (!hasplace -// && !ResPerm.bypass_build.hasPermission(player, 10000L) + && !ResPerm.bypass_build.hasPermission(player, 10000L) ) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); @@ -661,7 +661,7 @@ public void onBlockPlace(BlockPlaceEvent event) { perms = plugin.getPermsByLocForPlayer(sec.getLocation(), player); hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); if (!hasplace -// && !ResPerm.bypass_build.hasPermission(player, 10000L) + && !ResPerm.bypass_build.hasPermission(player, 10000L) ) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index a7ba33965..eb4411e7b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1298,7 +1298,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (event.getEntityType() == EntityType.ITEM_FRAME) { ItemFrame it = (ItemFrame) event.getEntity(); if (it.getItem() != null) { -// if (!ResPerm.bypass_container.hasPermission(player, 10000L)) + if (!ResPerm.bypass_container.hasPermission(player, 10000L)) if (!perms.playerHas(player, Flags.container, true)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.container); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 74cc5b491..0b0a225c0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -76,7 +76,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -153,8 +152,8 @@ public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { return; if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itempickup, FlagCombo.OnlyFalse)) return; -// if (ResPerm.bypass_itempickup.hasPermission(event.getPlayer(), 10000L)) -// return; + if (ResPerm.bypass_itempickup.hasPermission(event.getPlayer(), 10000L)) + return; event.setCancelled(true); event.getItem().setPickupDelay(plugin.getConfigManager().getItemPickUpDelay() * 20); } @@ -431,9 +430,9 @@ public void onResidenceDeleteEvent(ResidenceDeleteEvent event) { public void onPlayerQuitEvent(PlayerQuitEvent event) { Player player = event.getPlayer(); - + plugin.getPermissionManager().removeFromCache(player); - + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res == null) @@ -450,7 +449,7 @@ public void onPlayerQuitEvent(PlayerQuitEvent event) { if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) player.setGlowing(false); - + plugin.getPlayerManager().getResidencePlayer(player).onQuit(); } @@ -831,7 +830,7 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) -// && !ResPerm.bypass_nofly.hasPermission(player, 10000L) + && !ResPerm.bypass_nofly.hasPermission(player, 10000L) ) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); @@ -1074,7 +1073,7 @@ public void onPlatePress(PlayerInteractEvent event) { boolean hasuse = perms.playerHas(player, Flags.use, true); boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); if ((!hasuse && !haspressure || !haspressure) && mat.isPlate() -// && !ResPerm.bypass_use.hasPermission(player, 10000L) + && !ResPerm.bypass_use.hasPermission(player, 10000L) ) { event.setCancelled(true); return; @@ -1296,10 +1295,10 @@ public void onPlayerInteract(PlayerInteractEvent event) { break main; } } -// if (!ResPerm.bypass_container.hasPermission(player, 10000L)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, result); -// } + if (!ResPerm.bypass_container.hasPermission(player, 10000L)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, result); + } return; } @@ -1311,16 +1310,16 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } -// switch (result) { -// case door: -// if (ResPerm.bypass_door.hasPermission(player, 10000L)) -// break main; -// break; -// case button: -// if (ResPerm.bypass_button.hasPermission(player, 10000L)) -// break main; -// break; -// } + switch (result) { + case door: + if (ResPerm.bypass_door.hasPermission(player, 10000L)) + break main; + break; + case button: + if (ResPerm.bypass_button.hasPermission(player, 10000L)) + break main; + break; + } event.setCancelled(true); // Debug.D("took: " + (System.nanoTime() - nano)); plugin.msg(player, lm.Flag_Deny, result); @@ -1344,8 +1343,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (plugin.getConfigManager().getCustomContainers().contains(blockM)) { if (!perms.playerHas(player, Flags.container, hasuse) -// || !ResPerm.bypass_container.hasPermission(player, 10000L) - ) { + || !ResPerm.bypass_container.hasPermission(player, 10000L)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.container); return; @@ -1435,13 +1433,13 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { if (res == null) return; -// boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); -// -// if (!hasContainerBypass) - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); - event.setCancelled(true); - } + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); + + if (!hasContainerBypass) + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1491,13 +1489,13 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) if (res == null) return; -// boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); -// -// if (!hasContainerBypass) - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); - event.setCancelled(true); - } + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); + + if (!hasContainerBypass) + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1632,13 +1630,13 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { return; } -// boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); // -// if (!hasContainerBypass) - if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container); - } + if (!hasContainerBypass) + if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.container); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1753,8 +1751,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) -// && !ResPerm.bypass_tp.hasPermission(player, 10000L) - ) { + && !ResPerm.bypass_tp.hasPermission(player, 10000L)) { event.setCancelled(true); plugin.msg(player, lm.Residence_MoveDeny, res.getName()); return; @@ -1844,8 +1841,8 @@ private static Location getSafeLocation(Location loc) { private void fly(Player player, boolean state) { if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) return; -// if (ResPerm.bypass_fly.hasPermission(player, 10000L)) -// return; + if (ResPerm.bypass_fly.hasPermission(player, 10000L)) + return; if (!state) { boolean land = player.isFlying(); player.setFlying(state); @@ -2040,8 +2037,7 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move if (res != null && ResOld.getName().equals(res.getName())) { if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) -// && !ResPerm.bypass_nofly.hasPermission(player, 10000L) - ) { + && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { if (!res.isOwner(player)) { Location lc = player.getLocation(); Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); @@ -2214,8 +2210,7 @@ public void run() { // Preventing fly in residence only when player has move permission f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) -// && !ResPerm.bypass_nofly.hasPermission(player, 10000L) - ) { + && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { if (res.isOwner(player)) break f; Location lc = player.getLocation(); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 280bc7bc3..01d35278c 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -12,6 +12,7 @@ import java.util.Map.Entry; import java.util.Set; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -28,7 +29,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import com.bekvon.bukkit.residence.utils.Debug; public class FlagPermissions { @@ -36,18 +36,18 @@ public class FlagPermissions { protected static ArrayList validPlayerFlags = new ArrayList<>(); protected static ArrayList validAreaFlags = new ArrayList<>(); final static Map matUseFlagList = new EnumMap<>(Material.class); - protected Map cachedPlayerNameUUIDs = new HashMap(); - protected Map> playerFlags = new HashMap>(); - protected Map> groupFlags = new HashMap>(); - protected Map cuboidFlags = new HashMap(); + protected Map cachedPlayerNameUUIDs = new ConcurrentHashMap(); + protected Map> playerFlags = new ConcurrentHashMap>(); + protected Map> groupFlags = new ConcurrentHashMap>(); + protected Map cuboidFlags = new ConcurrentHashMap(); protected FlagPermissions parent; protected static HashMap> validFlagGroups = new HashMap<>(); public FlagPermissions() { - cuboidFlags = Collections.synchronizedMap(new HashMap()); - playerFlags = Collections.synchronizedMap(new HashMap>()); - groupFlags = Collections.synchronizedMap(new HashMap>()); - cachedPlayerNameUUIDs = Collections.synchronizedMap(new HashMap()); + cuboidFlags = new ConcurrentHashMap(); + playerFlags = new ConcurrentHashMap>(); + groupFlags = new ConcurrentHashMap>(); + cachedPlayerNameUUIDs = new ConcurrentHashMap(); } public static enum FlagCombo { @@ -56,6 +56,7 @@ public static enum FlagCombo { public static enum FlagState { TRUE, FALSE, NEITHER, INVALID; + public String getName() { return name().toLowerCase(); } @@ -291,7 +292,7 @@ public static FlagPermissions parseFromConfigNodeAsList(String node, String stag } protected Map getPlayerFlags(Player player, boolean allowCreate) { - if(player == null) + if (player == null) return new HashMap(); UUID uuid = player.getUniqueId(); From 12294f994da45ed9a22065c7e9dd8166c7870c60 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 11:50:54 +0300 Subject: [PATCH 0725/1142] Protection from crossbow firework damage --- .../listeners/ResidenceEntityListener.java | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index eb4411e7b..0705215ac 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -3,14 +3,18 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.UUID; +import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Arrow; import org.bukkit.entity.Creeper; import org.bukkit.entity.Damageable; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Firework; import org.bukkit.entity.Ghast; import org.bukkit.entity.Hanging; import org.bukkit.entity.ItemFrame; @@ -36,6 +40,7 @@ import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityInteractEvent; +import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.PlayerLeashEntityEvent; import org.bukkit.event.entity.PotionSplashEvent; @@ -45,6 +50,8 @@ import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.metadata.MetadataValue; import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; @@ -69,6 +76,8 @@ public ResidenceEntityListener(Residence plugin) { this.plugin = plugin; } + private final static String CrossbowShooter = "CrossbowShooter"; + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEndermanChangeBlock(EntityChangeBlockEvent event) { // disabling event on world @@ -1152,7 +1161,7 @@ public void onEntityCatchingFire(EntityDamageByEntityEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; - + if (!damageableProjectile(event.getDamager())) return; @@ -1313,6 +1322,22 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEntityShootBowEvent(EntityShootBowEvent event) { + + if (Version.isCurrentEqualOrLower(Version.v1_14_R1)) + return; + + if (event.getBow().getType() != Material.CROSSBOW) + return; + + if (!(event.getEntity() instanceof Player)) + return; + + if (event.getProjectile().getType() == EntityType.FIREWORK) + event.getProjectile().setMetadata(CrossbowShooter, new FixedMetadataValue(plugin, event.getEntity().getUniqueId())); + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamage(EntityDamageEvent event) { // disabling event on world @@ -1352,9 +1377,11 @@ public void onEntityDamage(EntityDamageEvent event) { if (srcarea != null) { srcpvp = srcarea.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone); } + ent = attackevent.getEntity(); if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) - .getShooter() instanceof Player))) && event.getCause() != DamageCause.FALL) { + .getShooter() instanceof Player))) && event.getCause() != DamageCause.FALL || damager instanceof Firework) { + Player attacker = null; if (damager instanceof Player) { attacker = (Player) damager; @@ -1368,6 +1395,15 @@ public void onEntityDamage(EntityDamageEvent event) { isOnFire = true; attacker = (Player) ((Projectile) damager).getShooter(); + } else if (damager instanceof Firework) { + List meta = damager.getMetadata(CrossbowShooter); + if (meta != null && !meta.isEmpty()) { + try { + String uid = meta.get(0).asString(); + attacker = Bukkit.getPlayer(UUID.fromString(uid)); + } catch (Throwable e) { + } + } } if (!(ent instanceof Player)) @@ -1377,11 +1413,11 @@ public void onEntityDamage(EntityDamageEvent event) { && !ConfigManager.RaidFriendlyFire) { event.setCancelled(true); } - + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.isUnderRaid() && !area.getRaid().onSameTeam(attacker, (Player) ent)) { return; } - + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && srcarea.getPermissions().playerHas((Player) ent, Flags.friendlyfire, FlagCombo.OnlyFalse) && srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { From b10ac9f0e3c84656b5857ee86e077751d6a066ec Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 12:19:17 +0300 Subject: [PATCH 0726/1142] Fixing select command --- .../bukkit/residence/commands/select.java | 57 +++++++------------ 1 file changed, 22 insertions(+), 35 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index bd9d5f41d..d486654f3 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -48,16 +48,10 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } if (args.length == 1) { - if (args[0].equals("size") || args[0].equals("cost")) { - if (plugin.getSelectionManager().hasPlacedBoth(player)) { - try { - plugin.getSelectionManager().showSelectionInfo(player); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - return true; - } - } else if (plugin.getSelectionManager().worldEdit(player)) { + switch (args[0].toLowerCase()) { + case "size": + case "cost": + if (plugin.getSelectionManager().hasPlacedBoth(player) || plugin.getSelectionManager().worldEdit(player)) { try { plugin.getSelectionManager().showSelectionInfo(player); return true; @@ -66,19 +60,20 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } } - } else if (args[0].equals("vert")) { + return false; + case "vert": plugin.getSelectionManager().vert(player, resadmin); plugin.getSelectionManager().afterSelectionUpdate(player, true); return true; - } else if (args[0].equals("sky")) { + case "sky": plugin.getSelectionManager().sky(player, resadmin); plugin.getSelectionManager().afterSelectionUpdate(player, true); return true; - } else if (args[0].equals("bedrock")) { + case "bedrock": plugin.getSelectionManager().bedrock(player, resadmin); plugin.getSelectionManager().afterSelectionUpdate(player, true); return true; - } else if (args[0].equals("coords")) { + case "coords": plugin.msg(player, lm.General_Separator); if (!plugin.getSelectionManager().hasPlacedBoth(player)) { @@ -99,11 +94,11 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.msg(player, lm.General_Separator); plugin.getSelectionManager().afterSelectionUpdate(player, false); return true; - } else if (args[1].equals("chunk")) { + case "chunk": plugin.getSelectionManager().getSelection(player).selectChunk(); plugin.getSelectionManager().afterSelectionUpdate(player, true); return true; - } else if (args[1].equals("worldedit")) { + case "worldedit": if (plugin.getSelectionManager().worldEdit(player)) { plugin.msg(player, lm.Select_Success); plugin.getSelectionManager().afterSelectionUpdate(player, false); @@ -111,35 +106,27 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } } else if (args.length == 2) { - if (args[0].equals("expand")) { - int amount; + int amount = 0; + switch (args[0].toLowerCase()) { + case "expand": + case "contract": + case "shift": try { amount = Integer.parseInt(args[1]); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Amount); return true; } + } + + switch (args[0].toLowerCase()) { + case "expand": plugin.getSelectionManager().modify(player, false, amount); return true; - } - if (args[0].equals("contract")) { - int amount; - try { - amount = Integer.parseInt(args[1]); - } catch (Exception ex) { - plugin.msg(player, lm.Invalid_Amount); - return true; - } + case "contract": plugin.getSelectionManager().contract(player, amount); return true; - } else if (args[0].equals("shift")) { - int amount; - try { - amount = Integer.parseInt(args[1]); - } catch (Exception ex) { - plugin.msg(player, lm.Invalid_Amount); - return true; - } + case "shift": if (amount > 100) amount = 100; if (amount < -100) From 33c276dc2f61c2d244f7c4ed8c944f8d287bff73 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 12:21:25 +0300 Subject: [PATCH 0727/1142] Fixing issue with mising config sections --- .../protection/WorldFlagManager.java | 98 ++++++++++--------- 1 file changed, 51 insertions(+), 47 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java index 93faf24ff..23e2b58d8 100644 --- a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java +++ b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java @@ -1,8 +1,5 @@ package com.bekvon.bukkit.residence.protection; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; - import java.io.File; import java.util.HashMap; import java.util.Map; @@ -17,6 +14,9 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; + public class WorldFlagManager { protected Map> groupperms; protected Map worldperms; @@ -72,13 +72,15 @@ public final void parsePerms() { FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); - Set keys = flags.getConfigurationSection("Global.Flags").getKeys(false); - if (keys != null) { - for (String key : keys) { - if (key.equalsIgnoreCase("Global")) { - globaldefaults = FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags")); - } else { - worldperms.put(key.toLowerCase(), FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags"))); + if (flags.isConfigurationSection("Global.Flags")) { + Set keys = flags.getConfigurationSection("Global.Flags").getKeys(false); + if (keys != null) { + for (String key : keys) { + if (key.equalsIgnoreCase("Global")) { + globaldefaults = FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags")); + } else { + worldperms.put(key.toLowerCase(), FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags"))); + } } } } @@ -91,50 +93,52 @@ public final void parsePerms() { return; } - keys = groups.getConfigurationSection("Groups").getKeys(false); - if (keys != null) { - for (String key : keys) { - if (!groups.contains("Groups." + key + ".Flags")) - continue; - if (!groups.contains("Groups." + key + ".Flags.World")) - continue; - if (key == null) - continue; - Set worldkeys = groups.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false); + if (flags.isConfigurationSection("Groups")) { + Set keys = groups.getConfigurationSection("Groups").getKeys(false); + if (keys != null) { + for (String key : keys) { + if (!groups.contains("Groups." + key + ".Flags")) + continue; + if (!groups.contains("Groups." + key + ".Flags.World")) + continue; + if (key == null) + continue; + Set worldkeys = groups.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false); - if (worldkeys == null) - continue; + if (worldkeys == null) + continue; - Map perms = new HashMap<>(); - for (String wkey : worldkeys) { - FlagPermissions list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); - if (wkey.equalsIgnoreCase("global")) { - list.setParent(globaldefaults); - perms.put(wkey.toLowerCase(), list); - for (Entry worldperm : worldperms.entrySet()) { - list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); - list.setParent(worldperm.getValue()); - perms.put("global." + worldperm.getKey().toLowerCase(), list); + Map perms = new HashMap<>(); + for (String wkey : worldkeys) { + FlagPermissions list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); + if (wkey.equalsIgnoreCase("global")) { + list.setParent(globaldefaults); + perms.put(wkey.toLowerCase(), list); + for (Entry worldperm : worldperms.entrySet()) { + list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); + list.setParent(worldperm.getValue()); + perms.put("global." + worldperm.getKey().toLowerCase(), list); + } + } else { + perms.put(wkey.toLowerCase(), list); } - } else { - perms.put(wkey.toLowerCase(), list); } - } - for (Entry entry : perms.entrySet()) { - String wkey = entry.getKey(); - FlagPermissions list = entry.getValue(); - if (!wkey.startsWith("global.")) { - list.setParent(perms.get("global." + wkey)); - if (list.getParent() == null) { - list.setParent(worldperms.get(wkey)); - } - if (list.getParent() == null) { - list.setParent(globaldefaults); + for (Entry entry : perms.entrySet()) { + String wkey = entry.getKey(); + FlagPermissions list = entry.getValue(); + if (!wkey.startsWith("global.")) { + list.setParent(perms.get("global." + wkey)); + if (list.getParent() == null) { + list.setParent(worldperms.get(wkey)); + } + if (list.getParent() == null) { + list.setParent(globaldefaults); + } } } - } - groupperms.put(key.toLowerCase(), perms); + groupperms.put(key.toLowerCase(), perms); + } } } } catch (Exception ex) { From 8f01229e352f704a82a6a1c242a5ca685beba353 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 12:27:14 +0300 Subject: [PATCH 0728/1142] market command fix --- src/com/bekvon/bukkit/residence/commands/market.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index a4646bb8c..bbd1367ea 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -138,7 +138,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - res = plugin.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { plugin.msg(player, lm.Invalid_Residence); From 379e8c8eb76ca9f63c3f2795da42f736c05c4a28 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 12:49:41 +0300 Subject: [PATCH 0729/1142] Fixing pset flag check issue --- .../bukkit/residence/protection/ResidencePermissions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index fb60295c4..d709232da 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -53,7 +53,7 @@ public boolean playerHas(CommandSender sender, Flags flag, boolean def) { @Override public boolean playerHas(Player player, Flags flag, boolean def) { - return playerHas(player, player.getWorld().getName(), flag, def); + return playerHas(player, world, flag, def); } @Deprecated From 26b2d9fb48e4406e9f88720bb8e2d4beccd83829 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 15:36:42 +0300 Subject: [PATCH 0730/1142] Fix for duplicated entries when changing players flags while having offline mode enabled --- .../bekvon/bukkit/residence/Residence.java | 42 -------------- .../residence/protection/FlagPermissions.java | 55 +++++++++++++------ .../protection/ResidencePermissions.java | 3 +- 3 files changed, 39 insertions(+), 61 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index a0664e878..eb26b6bfc 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1926,45 +1926,6 @@ public KingdomsUtil getKingdomsUtil() { return kingdomsUtil; } -// public boolean hasPermission(CommandSender sender, String permision, boolean output) { -// return hasPermission(sender, permision, output, null); -// } -// -// public boolean hasPermission(CommandSender sender, String permision) { -// return hasPermission(sender, permision, true, null); -// } -// -// public boolean hasPermission(CommandSender sender, String permision, String message) { -// return hasPermission(sender, permision, true, message); -// } -// -// public boolean hasPermission(CommandSender sender, String permision, lm message) { -// return hasPermission(sender, permision, true, getLM().getMessage(message)); -// } -// -// public boolean hasPermission(CommandSender sender, String permision, Boolean output, String message) { -// if (sender == null) -// return false; -// if (sender instanceof ConsoleCommandSender) { -// return true; -// } else if (sender instanceof Player) { -// if (sender.hasPermission(permision)) -// return true; -// if (output) { -// String outMsg = getLM().getMessage(lm.General_NoPermission); -// if (message != null) -// outMsg = message; -// -// RawMessage rm = new RawMessage(); -// rm.add(outMsg, "§2" + permision); -// rm.show(sender); -// ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); -// console.sendMessage(ChatColor.RED + sender.getName() + " No permission -> " + permision); -// } -// } -// return false; -// } - public static Residence getInstance() { return instance; } @@ -1978,9 +1939,6 @@ public String[] reduceArgs(String[] args) { return new String[0]; return Arrays.copyOfRange(args, 1, args.length); } -// public TownManager getTownManager() { -// return townManager; -// } public int getWorldGuardVersion() { return wepVersion; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 01d35278c..73317356b 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -29,19 +29,20 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.utils.Debug; public class FlagPermissions { protected static ArrayList validFlags = new ArrayList<>(); protected static ArrayList validPlayerFlags = new ArrayList<>(); protected static ArrayList validAreaFlags = new ArrayList<>(); + protected static HashMap> validFlagGroups = new HashMap<>(); final static Map matUseFlagList = new EnumMap<>(Material.class); protected Map cachedPlayerNameUUIDs = new ConcurrentHashMap(); protected Map> playerFlags = new ConcurrentHashMap>(); protected Map> groupFlags = new ConcurrentHashMap>(); protected Map cuboidFlags = new ConcurrentHashMap(); protected FlagPermissions parent; - protected static HashMap> validFlagGroups = new HashMap<>(); public FlagPermissions() { cuboidFlags = new ConcurrentHashMap(); @@ -292,22 +293,34 @@ public static FlagPermissions parseFromConfigNodeAsList(String node, String stag } protected Map getPlayerFlags(Player player, boolean allowCreate) { - if (player == null) - return new HashMap(); - UUID uuid = player.getUniqueId(); - Map flags = playerFlags.get(uuid.toString()); - if (flags == null) { - flags = playerFlags.get(player.getName()); - if (flags != null) { - flags = playerFlags.remove(player.getName()); + Map flags = null; + + if (!Residence.getInstance().getConfigManager().isOfflineMode()) { + UUID uuid = player.getUniqueId(); + flags = playerFlags.get(uuid.toString()); + + if (flags == null && allowCreate) { + flags = Collections.synchronizedMap(new HashMap()); playerFlags.put(uuid.toString(), flags); + cachedPlayerNameUUIDs.put(uuid, player.getName()); + } + } else { + for (Entry> one : playerFlags.entrySet()) { + if (!one.getKey().equalsIgnoreCase(player.getName())) + continue; + // Updating players name to correct capitalization + if (!one.getKey().equals(player.getName())) { + Map r = playerFlags.remove(one.getKey()); + playerFlags.put(player.getName(), r); + } + flags = one.getValue(); + break; + } + if (flags == null && allowCreate) { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(player.getName(), flags); } - } - - if (flags == null && allowCreate) { - flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(uuid.toString(), flags); } return flags; } @@ -386,6 +399,7 @@ else if (cachedPlayerNameUUIDs.containsKey(uuid)) } public boolean setPlayerFlag(String player, String flag, FlagState state) { + Map map = this.getPlayerFlags(player, state != FlagState.NEITHER); if (map == null) return true; @@ -733,13 +747,20 @@ protected static FlagPermissions load(Map root, FlagPermissions Map ft = new HashMap(); for (Entry one : ((HashMap) root.get("PlayerFlags")).entrySet()) { ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), one.getValue()); - if (ft != null && !ft.isEmpty()) - t.put(one.getKey(), new HashMap(ft)); + if (ft != null && !ft.isEmpty()) { + if (Residence.getInstance().getConfigManager().isOfflineMode() && one.getKey().length() == 36) { + String name = Residence.getInstance().getPlayerName(UUID.fromString(one.getKey())); + if (name != null) + t.put(name, new HashMap(ft)); + else + t.put(one.getKey(), new HashMap(ft)); + } else + t.put(one.getKey(), new HashMap(ft)); + } } if (!t.isEmpty()) newperms.playerFlags = t; } - } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index d709232da..25e1ab57b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -337,9 +337,8 @@ private boolean hasFlagAccess(String player, String flag) { } public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String flag, String flagstate, boolean resadmin, boolean Show) { - if (Residence.getInstance().getPlayerUUID(targetPlayer) == null) { - sender.sendMessage("no player by this name"); + sender.sendMessage("No player by this name"); return false; } From 8f66b0758546871aba730875f1be63bbed45a228 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 16:02:58 +0300 Subject: [PATCH 0731/1142] Fixing colorization issue --- .../bekvon/bukkit/cmiLib/CMIChatColor.java | 4 +- src/com/bekvon/bukkit/cmiLib/RawMessage.java | 73 ++++++++++--------- .../residence/economy/rent/RentManager.java | 2 +- .../listeners/ResidencePlayerListener.java | 1 - 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java index 7fbb0891e..76587f5e1 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java @@ -64,7 +64,7 @@ public static String colorize(String text) { public static String deColorize(String text) { if (text == null) return null; - return text.replace("§", "&"); + return text.replace("§", "&"); } public static String stripColor(String text) { @@ -86,7 +86,7 @@ public String getColorCode() { } public String getBukkitColorCode() { - return "§" + c; + return "§" + c; } public char getChar() { diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessage.java b/src/com/bekvon/bukkit/cmiLib/RawMessage.java index 71049014f..8ca2f4866 100644 --- a/src/com/bekvon/bukkit/cmiLib/RawMessage.java +++ b/src/com/bekvon/bukkit/cmiLib/RawMessage.java @@ -18,27 +18,26 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.VersionChecker.Version; -import com.bekvon.bukkit.residence.commands.version; import com.bekvon.bukkit.residence.utils.Debug; public class RawMessage { - List parts = new ArrayList(); - List cleanParts = new ArrayList(); - String colorReplacerPlaceholder = "%#%"; + private List parts = new ArrayList<>(); + private List cleanParts = new ArrayList<>(); + private String colorReplacerPlaceholder = "%#%"; private String unfinished = ""; private String unfinishedClean = ""; private String combined = ""; - String combinedClean = ""; + private String combinedClean = ""; private boolean dontBreakLine = false; // private boolean colorizeEntireWithLast = true; public void clear() { - parts = new ArrayList(); - cleanParts = new ArrayList(); + parts = new ArrayList<>(); + cleanParts = new ArrayList<>(); combined = ""; combinedClean = ""; } @@ -72,34 +71,33 @@ public RawMessage add(String text, String hoverText, String command, String sugg return add(text, hoverText, command, suggestion, null); } - Set formats = new HashSet(); - CMIChatColor lastColor = null; + private Set formats = new HashSet<>(); + private CMIChatColor lastColor = null; - Set savedFormats = new HashSet(); - CMIChatColor savedLastColor = null; + private Set savedFormats = new HashSet<>(); + private CMIChatColor savedLastColor = null; - CMIChatColor firstBlockColor = null; + private CMIChatColor firstBlockColor = null; private String makeMessyText(String text) { if (text.equalsIgnoreCase(" ")) return text; text = CMIChatColor.deColorize(text); List splited = new ArrayList(); - if (text.contains(" ")) { for (String one : text.split(" ")) { -// if (this.isBreakLine() && one.contains("\\n")) { -// String[] split = one.split("\\\\n"); -// for (int i = 0; i < split.length; i++) { -// if (i < split.length - 1) { -// splited.add(split[i] + "\n"); -// } else { -// splited.add(split[i]); -// } -// } -// } else { +// if (this.isBreakLine() && one.contains("\\n")) { +// String[] split = one.split("\\\\n"); +// for (int i = 0; i < split.length; i++) { +// if (i < split.length - 1) { +// splited.add(split[i] + "\n"); +// } else { +// splited.add(split[i]); +// } +// } +// } else { splited.add(one); -// } +// } splited.add(" "); } if (text.length() > 1 && text.endsWith(" ")) @@ -126,9 +124,10 @@ private String makeMessyText(String text) { } if (one.contains("&")) { - Pattern pattern = Pattern.compile("(&[0123456789abcdefklmnor])"); + Pattern pattern = Pattern.compile("(&[0123456789abcdefklmnorABCDEFKLMNOR])"); Matcher match = pattern.matcher(one); while (match.find()) { + String color = CMIChatColor.getLastColors(match.group(0)); CMIChatColor c = CMIChatColor.getColor(color); if (c != null) { @@ -137,7 +136,7 @@ private String makeMessyText(String text) { } else if (c.isReset()) { formats.clear(); lastColor = null; - firstBlockColor = null; +// firstBlockColor = null; } else if (c.isColor()) { lastColor = c; formats.clear(); @@ -160,6 +159,7 @@ private String makeMessyText(String text) { newText += colorString + one; } + return newText; } @@ -257,13 +257,13 @@ private String provessText(String text) { } public RawMessage add(String text, String hoverText, String command, String suggestion, String url) { + if (text == null) return this; text = provessText(text); - if (dontBreakLine) { + if (dontBreakLine) text = text.replace("\\\\\\n", "\\\\n"); - } String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(colorReplacerPlaceholder, "&") + "\""; @@ -282,7 +282,8 @@ public RawMessage add(String text, String hoverText, String command, String sugg suggestion = suggestion.replace(" \\n", " \\\\n"); suggestion = suggestion.replace(" \n", " \\\\n"); - f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}"; + if (suggestion != null) + f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}"; } if (url != null) { url = provessText(url); @@ -357,7 +358,7 @@ public RawMessage addItem(String text, ItemStack item, List extraLore, S CMIItemStack cm = ItemManager.getItem(item); - String ItemDisplayName = "&r&f" + cm.getDisplayName(); + String ItemName = "&r&f" + cm.getDisplayName(); String Enchants = getItemEnchants(item); if (!Enchants.isEmpty()) { @@ -368,7 +369,7 @@ public RawMessage addItem(String text, ItemStack item, List extraLore, S } } - List Lore = new ArrayList(); + List Lore = new ArrayList<>(); // if (CMIMaterial.isShulkerBox(item.getType())) { // List items = CMI.getInstance().getShulkerBoxManager().getShulkerBoxContents(item); @@ -394,7 +395,7 @@ public RawMessage addItem(String text, ItemStack item, List extraLore, S if (itemName.equalsIgnoreCase("Air")) { itemName = "Stone"; - ItemDisplayName = "Hand"; + ItemName = "Hand"; } if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { @@ -405,7 +406,7 @@ public RawMessage addItem(String text, ItemStack item, List extraLore, S if (!Lore.isEmpty()) { loreS = ",Lore:[" + loreS + "]"; } - f += ",\"hoverEvent\":{\"action\":\"show_item\",\"value\":\"{id:" + itemName + ",Count:1b,tag:{display:{Name:\\\"" + CMIChatColor.translateAlternateColorCodes(ItemDisplayName) + "\\\"" + loreS + f += ",\"hoverEvent\":{\"action\":\"show_item\",\"value\":\"{id:" + itemName + ",Count:1b,tag:{display:{Name:\\\"" + CMIChatColor.translateAlternateColorCodes(ItemName) + "\\\"" + loreS + "}" + Enchants + "}}\"}"; @@ -458,7 +459,7 @@ private static String convertLore(List lore) { } public List softCombine() { - List ls = new ArrayList(); + List ls = new ArrayList<>(); String f = ""; for (String part : parts) { if (f.isEmpty()) @@ -520,10 +521,10 @@ public RawMessage show(Player player, boolean softCombined) { for (String one : softCombine()) { if (one.isEmpty()) continue; - ActionBarTitleMessages.sendRaw(player, one); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + one); } } else { - ActionBarTitleMessages.sendRaw(player, combined); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + combined); } return this; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index be7c380b4..046273941 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -908,7 +908,7 @@ public void printRentableResidences(Player player, int page) { res.getOwner(), rentedBy); RawMessage rm = new RawMessage(); - rm.add(msg, "§2" + hover); + rm.add(msg, "&2" + hover); if (!hover.equalsIgnoreCase("")) { rm.show(player); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 0b0a225c0..653121573 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1321,7 +1321,6 @@ public void onPlayerInteract(PlayerInteractEvent event) { break; } event.setCancelled(true); -// Debug.D("took: " + (System.nanoTime() - nano)); plugin.msg(player, lm.Flag_Deny, result); return; } From f2f74e80830154b2543c51adbb5e2ba73221ca89 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 16:21:40 +0300 Subject: [PATCH 0732/1142] Lets properly update new locale for command help --- .../bukkit/residence/LocaleManager.java | 2 +- .../bekvon/bukkit/residence/Residence.java | 106 ++++++++++-------- .../residence/ResidenceCommandListener.java | 8 +- .../bukkit/residence/commands/reload.java | 3 +- 4 files changed, 67 insertions(+), 52 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 60600c512..d19e31c3c 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -64,7 +64,7 @@ private static YamlConfiguration loadConfiguration(BufferedReader in, String lan // Language file public void LoadLang(String lang) { - +Debug.D("loaging langs"); File f = new File(plugin.getDataFolder(), "Language" + File.separator + lang + ".yml"); if (!f.isFile()) try { diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index eb26b6bfc..b43277cc7 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -566,52 +566,7 @@ public void onEnable() { this.getConfigManager().copyOverTranslations(); - try { - File langFile = new File(new File(dataFolder, "Language"), getConfigManager().getLanguage() + ".yml"); - - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - - if (langFile.isFile()) { - FileConfiguration langconfig = new YamlConfiguration(); - langconfig.load(in); - helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - } else { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Language file does not exist..."); - } - if (in != null) - in.close(); - } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Failed to load language file: " + getConfigManager().getLanguage() - + ".yml setting to default - English"); - - File langFile = new File(new File(dataFolder, "Language"), "English.yml"); - - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - - if (langFile.isFile()) { - FileConfiguration langconfig = new YamlConfiguration(); - langconfig.load(in); - helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - } else { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Language file does not exist..."); - } - if (in != null) - in.close(); - } + parseHelpEntries(); economy = null; if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { @@ -867,6 +822,65 @@ public void run() { getVersionChecker().VersionCheck(null); } + public void parseHelpEntries() { + + try { + File langFile = new File(new File(dataFolder, "Language"), getConfigManager().getLanguage() + ".yml"); + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + if (langFile.isFile()) { + FileConfiguration langconfig = new YamlConfiguration(); + langconfig.load(in); + helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); + } else { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Language file does not exist..."); + } + if (in != null) + in.close(); + } catch (Exception ex) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Failed to load language file: " + getConfigManager().getLanguage() + + ".yml setting to default - English"); + + File langFile = new File(new File(dataFolder, "Language"), "English.yml"); + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + try { + if (langFile.isFile()) { + FileConfiguration langconfig = new YamlConfiguration(); + langconfig.load(in); + helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); + } else { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Language file does not exist..."); + } + } catch (Throwable e) { + + } finally { + if (in != null) + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + private boolean setupPlaceHolderAPI() { if (!getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) return false; diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 0fae19ed1..a1376bb11 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -177,7 +177,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St continue; CommandAnnotation cs = met.getAnnotation(CommandAnnotation.class); - varCheck : if (sender instanceof Player) { + varCheck: if (sender instanceof Player) { int[] regVar = cs.regVar(); List list = new ArrayList(); boolean more = true; @@ -190,7 +190,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St int size = targ.length; boolean good = true; - + if (list.isEmpty()) break varCheck; @@ -235,7 +235,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (list.isEmpty()) break varCheck; - + if (list.contains(666) || list.contains(-666)) { plugin.msg(sender, lm.Invalid_Ingame); return false; @@ -265,7 +265,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } Boolean respond = cmdClass.perform(Residence.getInstance(), sender, targ, resadmin); - + if (respond != null && !respond) { String[] tempArray = new String[args.length + 1]; for (int i = 0; i < args.length; i++) { diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index 60105eb0b..4b3ff84a6 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -31,9 +31,10 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo case "lang": plugin.getLM().LanguageReload(); plugin.getLocaleManager().LoadLang(plugin.getConfigManager().getLanguage()); + plugin.parseHelpEntries(); sender.sendMessage(plugin.getPrefix() + " Reloaded language file."); return true; - case "config": + case "config": plugin.getConfigManager().UpdateConfigFile(); sender.sendMessage(plugin.getPrefix() + " Reloaded config file."); return true; From e726d6017b5f285dd44f205e5dd5b3d699771dde Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 16:52:00 +0300 Subject: [PATCH 0733/1142] Extra locale line for flag change error when you have shop flag --- src/com/bekvon/bukkit/residence/containers/lm.java | 1 + .../bukkit/residence/protection/FlagPermissions.java | 12 +++--------- .../bukkit/residence/shopStuff/ShopListener.java | 4 ++-- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 345234240..6daeed220 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -403,6 +403,7 @@ public enum lm { Shop_NoDesc("&6No description"), Shop_Desc("&6Description:\n%1"), Shop_DescChange("&6Description changed to: %1"), + Shop_ChantChange("&4Can't change while shop flag is set to true"), Shop_NewBoard("&6Successfully added new shop sign board"), Shop_BoardExist("&cShop board already exists in this location"), Shop_DeleteBoard("&6Right click sign of board you want to delete"), diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 73317356b..af607cb75 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -408,9 +408,7 @@ public boolean setPlayerFlag(String player, String flag, FlagState state) { } else if (state == FlagState.TRUE) { map.put(flag, true); } else if (state == FlagState.NEITHER) { - if (map.containsKey(flag)) { - map.remove(flag); - } + map.remove(flag); } if (map.isEmpty()) this.removeAllPlayerFlags(player); @@ -453,9 +451,7 @@ public boolean setGroupFlag(String group, String flag, FlagState state) { } else if (state == FlagState.TRUE) { map.put(flag, true); } else if (state == FlagState.NEITHER) { - if (map.containsKey(flag)) { - map.remove(flag); - } + map.remove(flag); } if (map.isEmpty()) { groupFlags.remove(group); @@ -469,9 +465,7 @@ public boolean setFlag(String flag, FlagState state) { } else if (state == FlagState.TRUE) { cuboidFlags.put(flag, true); } else if (state == FlagState.NEITHER) { - if (cuboidFlags.containsKey(flag)) { - cuboidFlags.remove(flag); - } + cuboidFlags.remove(flag); } return true; } diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index f7f939d67..e2ccad790 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -2,8 +2,8 @@ import java.util.ArrayList; import java.util.List; + import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.block.Sign; @@ -158,7 +158,7 @@ public void onFlagChange(ResidenceFlagChangeEvent event) { event.setCancelled(true); - plugin.msg(event.getPlayer(), ChatColor.YELLOW + "Can't change while shop flag is set to true"); + plugin.msg(event.getPlayer(), lm.Shop_ChantChange); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) From d2e6a083443b3d7201f56b4b45df7b6cc6d07d1a Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 17:22:12 +0300 Subject: [PATCH 0734/1142] Spectral arrows and tridents with channeling protection --- .../listeners/ResidenceEntityListener.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 0705215ac..59e22de59 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -128,11 +128,11 @@ private static boolean damageableProjectile(Entity ent) { } } } - return ent instanceof Arrow || ent instanceof Projectile && (ent.getType().toString().equalsIgnoreCase("Trident")); + return ent instanceof Arrow || ent.getType().toString().equalsIgnoreCase("Trident") || ent.getType().toString().equalsIgnoreCase("Spectral_Arrow"); } @EventHandler(priority = EventPriority.LOWEST) - public void AnimalKilling(EntityDamageByEntityEvent event) { + public void AnimalKilling(EntityDamageEvent event) { // Disabling listener if flag disabled globally if (!Flags.animalkilling.isGlobalyEnabled()) return; @@ -145,12 +145,26 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { if (!plugin.getNms().isAnimal(entity)) return; - Entity damager = event.getDamager(); + if (event.getCause() == DamageCause.LIGHTNING || event.getCause() == DamageCause.FIRE_TICK) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); + if (res.getPermissions().has(Flags.animalkilling, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + } + return; + } - if (!damageableProjectile(damager) && !(damager instanceof Player)) + if (!(event instanceof EntityDamageByEntityEvent)) return; - if (damageableProjectile(damager) && !(((Projectile) damager).getShooter() instanceof Player)) + EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; + Entity damager = attackevent.getDamager(); + + boolean damageable = damageableProjectile(damager); + + if (!damageable && !(damager instanceof Player)) + return; + + if (damageable && !(((Projectile) damager).getShooter() instanceof Player)) return; Player cause = null; @@ -174,8 +188,9 @@ public void AnimalKilling(EntityDamageByEntityEvent event) { if (res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling, res.getName()); - event.setCancelled(true); + attackevent.setCancelled(true); } + } @EventHandler(priority = EventPriority.LOWEST) From 8b6101fb38edd74e20ba09ac247fa692f478f917 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 17:40:45 +0300 Subject: [PATCH 0735/1142] In case res auto cant generate next in line name, lets pick random one --- src/com/bekvon/bukkit/residence/commands/auto.java | 5 +++++ .../bukkit/residence/listeners/ResidenceEntityListener.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index e838ecd79..76cd1c156 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Random; import org.bukkit.Location; import org.bukkit.command.CommandSender; @@ -123,7 +124,11 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } } + if (resName == null) + resName = sender.getName() + (new Random().nextInt(10000)); + player.performCommand((resadmin ? "resadmin" : "res") + " create " + resName); + return true; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 59e22de59..201e1a04a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -147,7 +147,7 @@ public void AnimalKilling(EntityDamageEvent event) { if (event.getCause() == DamageCause.LIGHTNING || event.getCause() == DamageCause.FIRE_TICK) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); - if (res.getPermissions().has(Flags.animalkilling, FlagCombo.OnlyFalse)) { + if (res != null && res.getPermissions().has(Flags.animalkilling, FlagCombo.OnlyFalse)) { event.setCancelled(true); } return; From 51de99e2a1f85adcf9bbc0db4e2356872719eb1a Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 17:53:22 +0300 Subject: [PATCH 0736/1142] Fix for listall pages not working --- src/com/bekvon/bukkit/residence/LocaleManager.java | 2 +- src/com/bekvon/bukkit/residence/commands/listall.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index d19e31c3c..60600c512 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -64,7 +64,7 @@ private static YamlConfiguration loadConfiguration(BufferedReader in, String lan // Language file public void LoadLang(String lang) { -Debug.D("loaging langs"); + File f = new File(plugin.getDataFolder(), "Language" + File.separator + lang + ".yml"); if (!f.isFile()) try { diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index 24f0d2dad..437a8ce45 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -21,7 +21,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo int page = 1; World world = null; - c: for (int i = 1; i < args.length; i++) { + c: for (int i = 0; i < args.length; i++) { try { page = Integer.parseInt(args[i]); if (page < 1) From 03e81080d5c3aefa82e130ac8bfa2461dfab2025 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 17:59:34 +0300 Subject: [PATCH 0737/1142] Fixing issue with missing flag description --- src/com/bekvon/bukkit/residence/gui/setFlagInfo.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java index cecd5e9fc..30c438559 100644 --- a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java +++ b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java @@ -182,7 +182,7 @@ public void updateLooks() { buttons.add(button); i++; } - description.clear(); + } private void recalculatePlayer() { @@ -284,7 +284,7 @@ public void updateLooks() { button.hideItemFlags(); buttons.add(button); } - description.clear(); + } private ItemStack updateLook(String flagName) { @@ -351,6 +351,7 @@ else if (fp.has(flagName, FlagCombo.OnlyFalse)) break; } lore.add(Residence.getInstance().msg(lm.General_FlagState, variable)); + if (description.containsKey(flag)) lore.addAll(description.get(flag)); lore.addAll(Residence.getInstance().msgL(lm.Gui_Actions)); From deeb2c50f5da55ef3ee0f4c2b7d172f279a0cfd5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 13 May 2020 18:05:42 +0300 Subject: [PATCH 0738/1142] Fix for missing random teleportation config section. --- .../bekvon/bukkit/residence/ConfigManager.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index c8c051e74..bafde4731 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -760,16 +760,17 @@ public void UpdateConfigFile() { RTeleport.add(new RandomTeleport(w, MaxCoord, MinCoord, CenterX, CenterZ)); } } + for (World one : worlds) { String name = one.getName(); name = name.replace(".", "_"); String path = "Global.RandomTeleportation.Worlds." + name + "."; - boolean enabled = c.get("Enabled", true); - int MaxCoord = c.get("MaxCoord", 1000); - int MinCoord = c.get("MinCoord", c.getC().getInt(path + "MinCord", 500)); - int CenterX = c.get("CenterX", 0); - int CenterZ = c.get("CenterZ", 0); + boolean enabled = c.get(path + "Enabled", true); + int MaxCoord = c.get(path + "MaxCoord", 1000); + int MinCoord = c.get(path + "MinCoord", c.getC().getInt(path + "MinCord", 500)); + int CenterX = c.get(path + "CenterX", 0); + int CenterZ = c.get(path + "CenterZ", 0); if (!enabled) continue; @@ -1249,7 +1250,7 @@ public void UpdateConfigFile() { DynMapHiddenRegions = c.get("DynMap.HiddenRegions", new ArrayList()); c.addComment("Raid", "In development"); - + c.addComment("Raid.Enabled", "Determines if you want to enable raid feature for your server", "When residence is under raid, attackers can move inside residence even if residence has move false flag"); RaidEnabled = c.get("Raid.Enabled", false); @@ -1257,7 +1258,7 @@ public void UpdateConfigFile() { PreRaidTimer = c.get("Raid.PreTimer", 120); c.addComment("Raid.Timer", "Time in seconds raid should be", "During this time attackers can steal and kill defenders"); RaidTimer = c.get("Raid.Timer", 120); - c.addComment("Raid.Cooldown", "Time in seconds residence is immune for next raid","Default is 79200 seconds which results into 22 hours, this might reset if you have server restart"); + c.addComment("Raid.Cooldown", "Time in seconds residence is immune for next raid", "Default is 79200 seconds which results into 22 hours, this might reset if you have server restart"); RaidCooldown = c.get("Raid.Cooldown", 79200); c.addComment("Raid.PlayerCooldown", "Time in seconds player is immune for next raid", "In case player has more than one residence, this can prevent player from being attacked again", "Default is 79200 seconds which results into 22 hours, this might reset if you have server restart"); From 7e15b1b9fc8349c55b61e237f8225447800c2613 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 27 Jun 2020 10:19:52 +0300 Subject: [PATCH 0739/1142] Initial 1.16 update --- .../bukkit/cmiLib/ActionBarTitleMessages.java | 78 +- src/com/bekvon/bukkit/cmiLib/CMIBlock.java | 2 - .../bekvon/bukkit/cmiLib/CMIChatColor.java | 184 ++- .../bukkit/cmiLib/CMIEffectManager.java | 3 - .../bekvon/bukkit/cmiLib/CMIEntityType.java | 14 +- .../bekvon/bukkit/cmiLib/CMIItemStack.java | 2 - src/com/bekvon/bukkit/cmiLib/CMIMaterial.java | 1110 ++++++++++------- .../bukkit/cmiLib/CMIMaterialCriteria.java | 7 + .../bekvon/bukkit/cmiLib/CMIReflections.java | 19 +- src/com/bekvon/bukkit/cmiLib/RawMessage.java | 482 ++++--- .../bukkit/cmiLib/RawMessageManager.java | 92 ++ src/com/bekvon/bukkit/cmiLib/Version.java | 95 ++ .../bekvon/bukkit/cmiLib/VersionChecker.java | 93 -- .../residence/BossBar/BossBarManager.java | 2 +- .../bukkit/residence/ConfigManager.java | 5 +- .../bekvon/bukkit/residence/Residence.java | 2 +- .../bukkit/residence/allNms/v1_13Events.java | 2 +- .../bukkit/residence/allNms/v1_16_R1.java | 161 +++ .../bukkit/residence/commands/auto.java | 2 +- .../listeners/ResidenceBlockListener.java | 3 +- .../listeners/ResidenceEntityListener.java | 3 +- .../listeners/ResidencePlayerListener.java | 2 +- .../selection/SchematicsManager.java | 2 +- .../bukkit/residence/text/help/HelpEntry.java | 35 +- src/plugin.yml | 2 +- 25 files changed, 1564 insertions(+), 838 deletions(-) create mode 100644 src/com/bekvon/bukkit/cmiLib/CMIMaterialCriteria.java create mode 100644 src/com/bekvon/bukkit/cmiLib/RawMessageManager.java create mode 100644 src/com/bekvon/bukkit/cmiLib/Version.java create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_16_R1.java diff --git a/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java index c7bfff97f..314c9b734 100644 --- a/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java +++ b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java @@ -4,6 +4,7 @@ import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.UUID; import java.util.logging.Level; import org.bukkit.Bukkit; @@ -11,7 +12,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; public class ActionBarTitleMessages { @@ -33,35 +33,35 @@ public class ActionBarTitleMessages { private static Object[] consts; static { - try { - packetType = Class.forName(getPacketPlayOutChat()); - Class typeCraftPlayer = Class.forName(getCraftPlayerClasspath()); - Class typeNMSPlayer = Class.forName(getNMSPlayerClasspath()); - Class typePlayerConnection = Class.forName(getPlayerConnectionClasspath()); - nmsChatSerializer = Class.forName(getChatSerializerClasspath()); - nmsIChatBaseComponent = Class.forName(getIChatBaseComponentClasspath()); - getHandle = typeCraftPlayer.getMethod("getHandle"); - playerConnection = typeNMSPlayer.getField("playerConnection"); - sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName(getPacketClasspath())); - - if (Version.isCurrentHigher(Version.v1_11_R1)) { - ChatMessageclz = Class.forName(getChatMessageTypeClasspath()); - consts = ChatMessageclz.getEnumConstants(); - sub = consts[2].getClass(); - } - - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); - } - // Title - try { - Class typePacketPlayOutTitle = Class.forName(getPacketPlayOutTitleClasspath()); - enumTitleAction = Class.forName(getEnumTitleActionClasspath()); - nmsPacketPlayOutTitle = typePacketPlayOutTitle.getConstructor(enumTitleAction, nmsIChatBaseComponent); - fromString = Class.forName(getClassMessageClasspath()).getMethod("fromString", String.class); - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) { - simpleTitleMessages = true; + try { + packetType = Class.forName(getPacketPlayOutChat()); + Class typeCraftPlayer = Class.forName(getCraftPlayerClasspath()); + Class typeNMSPlayer = Class.forName(getNMSPlayerClasspath()); + Class typePlayerConnection = Class.forName(getPlayerConnectionClasspath()); + nmsChatSerializer = Class.forName(getChatSerializerClasspath()); + nmsIChatBaseComponent = Class.forName(getIChatBaseComponentClasspath()); + getHandle = typeCraftPlayer.getMethod("getHandle"); + playerConnection = typeNMSPlayer.getField("playerConnection"); + sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName(getPacketClasspath())); + + if (Version.isCurrentHigher(Version.v1_11_R1)) { + ChatMessageclz = Class.forName(getChatMessageTypeClasspath()); + consts = ChatMessageclz.getEnumConstants(); + sub = consts[2].getClass(); } + + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { + Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); + } + // Title + try { + Class typePacketPlayOutTitle = Class.forName(getPacketPlayOutTitleClasspath()); + enumTitleAction = Class.forName(getEnumTitleActionClasspath()); + nmsPacketPlayOutTitle = typePacketPlayOutTitle.getConstructor(enumTitleAction, nmsIChatBaseComponent); + fromString = Class.forName(getClassMessageClasspath()).getMethod("fromString", String.class); + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) { + simpleTitleMessages = true; + } } public static void send(CommandSender receivingPacket, String msg) { @@ -84,12 +84,17 @@ public static void send(Player receivingPacket, String msg) { return; } - Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, "{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', msg) + "\"}"); - if (Version.isCurrentHigher(Version.v1_11_R1)) + RawMessage rm = new RawMessage(); + rm.add(msg); + + Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, ChatColor.translateAlternateColorCodes('&', rm.getRaw())); + if (Version.isCurrentHigher(Version.v1_15_R1)) + packet = packetType.getConstructor(nmsIChatBaseComponent, sub, UUID.class).newInstance(serialized, consts[2], receivingPacket.getUniqueId()); + else if (Version.isCurrentHigher(Version.v1_11_R1)) packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[2]); else if (Version.isCurrentHigher(Version.v1_7_R4)) { packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 2); - } else { + } else { packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 2); } Object player = getHandle.invoke(receivingPacket); @@ -117,8 +122,13 @@ public static void sendRaw(Player receivingPacket, String msg) { return; try { Method meth = nmsChatSerializer.getMethod("a", String.class); - Object serialized = meth.invoke(null, ChatColor.translateAlternateColorCodes('&', msg)); - if (Version.isCurrentHigher(Version.v1_11_R1)) + + RawMessage rm = new RawMessage(); + rm.add(msg); + Object serialized = meth.invoke(null, ChatColor.translateAlternateColorCodes('&', rm.getRaw())); + if (Version.isCurrentHigher(Version.v1_15_R1)) + packet = packetType.getConstructor(nmsIChatBaseComponent, sub, UUID.class).newInstance(serialized, consts[1], receivingPacket.getUniqueId()); + else if (Version.isCurrentHigher(Version.v1_11_R1)) packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[1]); else if (Version.isCurrentHigher(Version.v1_7_R4)) { packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 1); diff --git a/src/com/bekvon/bukkit/cmiLib/CMIBlock.java b/src/com/bekvon/bukkit/cmiLib/CMIBlock.java index 7aa0c61e5..075b42af9 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIBlock.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIBlock.java @@ -10,8 +10,6 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; - public class CMIBlock { public static enum blockDirection { none(-1), upWest(0), upEast(1), upNorth(2), upSouth(3), downWest(4), downEast(5), downNorth(6), downSouth(7); diff --git a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java index 76587f5e1..fe6f5be25 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java @@ -2,82 +2,148 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.regex.Matcher; import java.util.regex.Pattern; import org.bukkit.ChatColor; +import org.bukkit.Color; -public enum CMIChatColor { - BLACK('0'), - DARK_BLUE('1'), - DARK_GREEN('2'), - DARK_AQUA('3'), - DARK_RED('4'), - DARK_PURPLE('5'), - GOLD('6'), - GRAY('7'), - DARK_GRAY('8'), - BLUE('9'), - GREEN('a'), - AQUA('b'), - RED('c'), - LIGHT_PURPLE('d'), - YELLOW('e'), - WHITE('f'), - MAGIC('k', false), - BOLD('l', false), - STRIKETHROUGH('m', false), - UNDERLINE('n', false), - ITALIC('o', false), - RESET('r', false, true); +import com.Zrips.CMI.utils.VersionChecker.Version; + +public class CMIChatColor { + + public static final String colorReplacerPlaceholder = "\uFF06"; + public static final String hexColorRegex = "(\\{#)([0-9A-Fa-f]{6})(\\})"; + public static final String hexColorDecolRegex = "(&x)(&[0-9A-Fa-f]){6}"; + + private static final Map BY_CHAR = new HashMap<>(); + private static final Map BY_NAME = new HashMap<>(); + + public static final CMIChatColor BLACK = new CMIChatColor("Black", '0', 0, 0, 0); + public static final CMIChatColor DARK_BLUE = new CMIChatColor("Dark_Blue", '1', 0, 0, 170); + public static final CMIChatColor DARK_GREEN = new CMIChatColor("Dark_Green", '2', 0, 170, 0); + public static final CMIChatColor DARK_AQUA = new CMIChatColor("Dark_Aqua", '3', 0, 170, 170); + public static final CMIChatColor DARK_RED = new CMIChatColor("Dark_Red", '4', 170, 0, 0); + public static final CMIChatColor DARK_PURPLE = new CMIChatColor("Dark_Purple", '5', 170, 0, 170); + public static final CMIChatColor GOLD = new CMIChatColor("Gold", '6', 255, 170, 0); + public static final CMIChatColor GRAY = new CMIChatColor("Gray", '7', 170, 170, 170); + public static final CMIChatColor DARK_GRAY = new CMIChatColor("Dark_Gray", '8', 85, 85, 85); + public static final CMIChatColor BLUE = new CMIChatColor("Blue", '9', 85, 85, 255); + public static final CMIChatColor GREEN = new CMIChatColor("Green", 'a', 85, 255, 85); + public static final CMIChatColor AQUA = new CMIChatColor("Aqua", 'b', 85, 255, 255); + public static final CMIChatColor RED = new CMIChatColor("Red", 'c', 255, 85, 85); + public static final CMIChatColor LIGHT_PURPLE = new CMIChatColor("Light_Purple", 'd', 255, 85, 255); + public static final CMIChatColor YELLOW = new CMIChatColor("Yellow", 'e', 255, 255, 85); + public static final CMIChatColor WHITE = new CMIChatColor("White", 'f', 255, 255, 255); + public static final CMIChatColor MAGIC = new CMIChatColor("Obfuscated", 'k', false); + public static final CMIChatColor BOLD = new CMIChatColor("Bold", 'l', false); + public static final CMIChatColor STRIKETHROUGH = new CMIChatColor("Strikethrough", 'm', false); + public static final CMIChatColor UNDERLINE = new CMIChatColor("Underline", 'n', false); + public static final CMIChatColor ITALIC = new CMIChatColor("Italic", 'o', false); + public static final CMIChatColor RESET = new CMIChatColor("Reset", 'r', false, true); + public static final CMIChatColor HEX = new CMIChatColor("Hex", 'x', false, false); private char c; private Boolean color = true; private Boolean reset = false; private Pattern pattern = null; + private int red; + private int green; + private int blue; + private String hex = null; + private String name; + + public CMIChatColor(String name, char c, int red, int green, int blue) { + this(name, c, true, false, red, green, blue); + } - CMIChatColor(char c) { - this(c, true); + public CMIChatColor(String hex) { + this.hex = hex; } - CMIChatColor(char c, Boolean color) { - this(c, color, false); + public CMIChatColor(String name, char c, Boolean color) { + this(name, c, color, false); } - CMIChatColor(char c, Boolean color, Boolean reset) { + public CMIChatColor(String name, char c, Boolean color, Boolean reset) { + this(name, c, color, reset, -1, -1, -1); + } + + public CMIChatColor(String name, char c, Boolean color, Boolean reset, int red, int green, int blue) { + this.name = name; this.c = c; this.color = color; this.reset = reset; this.pattern = Pattern.compile("(?i)(&[" + c + "])"); + this.red = red; + this.green = green; + this.blue = blue; + + if (Version.isCurrentLower(Version.v1_16_R1) && name.equalsIgnoreCase("Hex")) + return; + BY_CHAR.put(Character.valueOf(c), this); + BY_NAME.put(this.getName().toLowerCase().replace("_", ""), this); } - public static String translateAlternateColorCodes(String text) { + public static String translate(String text) { + + if (text == null) + return null; + + if (text.contains("#")) { + + Pattern prepattern = Pattern.compile(CMIChatColor.hexColorRegex); + + Matcher match = prepattern.matcher(text); + + while (match.find()) { + String string = match.group(); + + StringBuilder magic = new StringBuilder("§x"); + for (char c : string.substring(2, string.length() - 1).toCharArray()) { + magic.append('§').append(c); + } + text = text.replace(string, magic.toString()); + } + } + return ChatColor.translateAlternateColorCodes('&', text); } + @Deprecated + public static String translateAlternateColorCodes(String text) { + return translate(text); + } + public static String colorize(String text) { if (text == null) return null; - return ChatColor.translateAlternateColorCodes('&', text); + return translate(text); } public static String deColorize(String text) { if (text == null) return null; + + text = CMIChatColor.translate(text); return text.replace("§", "&"); } public static String stripColor(String text) { if (text == null) return null; - text = ChatColor.translateAlternateColorCodes('&', text); + text = CMIChatColor.translate(text); return ChatColor.stripColor(text); } public static String getLastColors(String text) { if (text == null) return null; - text = CMIChatColor.translateAlternateColorCodes(text); +// text = CMIChatColor.translate(text); return ChatColor.getLastColors(text); } @@ -119,18 +185,18 @@ public static CMIChatColor getColor(String text) { if (text.length() > 1) { String formated = text.toLowerCase().replace("_", ""); - for (CMIChatColor one : CMIChatColor.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(formated)) - return one; + for (Entry one : BY_NAME.entrySet()) { + if (one.getKey().equalsIgnoreCase(formated)) + return one.getValue(); } } if (or.length() > 1 && String.valueOf(or.charAt(or.length() - 2)).equalsIgnoreCase("&")) { text = text.substring(text.length() - 1, text.length()); - for (CMIChatColor one : CMIChatColor.values()) { - if (String.valueOf(one.getChar()).equalsIgnoreCase(text)) - return one; + for (Entry one : BY_CHAR.entrySet()) { + if (String.valueOf(one.getKey()).equalsIgnoreCase(text)) + return one.getValue(); } } @@ -139,10 +205,10 @@ public static CMIChatColor getColor(String text) { public static CMIChatColor getRandomColor() { List ls = new ArrayList(); - for (CMIChatColor one : CMIChatColor.values()) { - if (!one.isColor()) + for (Entry one : BY_NAME.entrySet()) { + if (!one.getValue().isColor()) continue; - ls.add(one); + ls.add(one.getValue()); } Collections.shuffle(ls); return ls.get(0); @@ -151,4 +217,40 @@ public static CMIChatColor getRandomColor() { public Pattern getPattern() { return pattern; } + + public Color getRGBColor() { + if (blue < 0) + return null; + return Color.fromBGR(blue, green, red); + } + + public String getHex() { + return hex; + } + + public String getName() { + return name; + } + + public String getCleanName() { + return name.replace("_", ""); + } + + public static Map getByName() { + return BY_NAME; + } + + public static String getHexFromCoord(int x, int y) { + x = x < 0 ? 0 : x > 255 ? 255 : x; + y = y < 0 ? 0 : y > 255 ? 255 : y; + + int blue = (int) (255 - y * 255 * (1.0 + Math.sin(6.3 * x)) / 2); + int green = (int) (255 - y * 255 * (1.0 + Math.cos(6.3 * x)) / 2); + int red = (int) (255 - y * 255 * (1.0 - Math.sin(6.3 * x)) / 2); + String hex = Integer.toHexString((red << 16) + (green << 8) + blue & 0xffffff); + while (hex.length() < 6) { + hex = "0" + hex; + } + return "#" + hex; + } } diff --git a/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java b/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java index 715b958a0..474087c43 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java @@ -8,9 +8,6 @@ import org.bukkit.Effect; import org.bukkit.Effect.Type; - -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; - import org.bukkit.Material; public class CMIEffectManager { diff --git a/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java b/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java index a7a6861b3..b6b710549 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java @@ -249,10 +249,17 @@ public enum CMIEntityType { "OTlkYzNmMDBlY2FiMjI0OWJiNmExNmM4YzUxMTVjZWI5ZjIzMjA1YTBkNTVjYzBlOWJhYmQyNTYyZjc5NTljNCJ9fX0==", "ZTZiNzRlMDUyYjc0Mjg4Nzk5YmE2ZDlmMzVjNWQwMjIxY2Y4YjA0MzMxNTQ3ZWMyZjY4ZDczNTk3YWUyYzliIn19fQ==", "YmIxNzc3NDY2MjUxMmQ3ODdlZjc3YjFhNDZhMDRlMmM2ZmQ2Nzc5NGJmN2Y3Nzk1NjZlYjIxYzgxNDNhYWQ5ZSJ9fX0=")), + + ZOMBIFIED_PIGLIN(929, "Zombified Piglin", Arrays.asList("N2VhYmFlY2M1ZmFlNWE4YTQ5Yzg4NjNmZjQ4MzFhYWEyODQxOThmMWEyMzk4ODkwYzc2NWUwYThkZTE4ZGE4YyJ9fX0=")), + HOGLIN(925, "Hoglin", Arrays.asList("OWJiOWJjMGYwMWRiZDc2MmEwOGQ5ZTc3YzA4MDY5ZWQ3Yzk1MzY0YWEzMGNhMTA3MjIwODU2MWI3MzBlOGQ3NSJ9fX0=")), + PIGLIN(926, "Piglin", Arrays.asList("OWYxODEwN2QyNzVmMWNiM2E5Zjk3M2U1OTI4ZDU4NzlmYTQwMzI4ZmYzMjU4MDU0ZGI2ZGQzZTdjMGNhNjMzMCJ9fX0=")), + STRIDER(927, "Strider", Arrays.asList("MThhOWFkZjc4MGVjN2RkNDYyNWM5YzA3NzkwNTJlNmExNWE0NTE4NjY2MjM1MTFlNGM4MmU5NjU1NzE0YjNjMSJ9fX0=")), + ZOGLIN(928, "Zoglin", Arrays.asList("ZTY3ZTE4NjAyZTAzMDM1YWQ2ODk2N2NlMDkwMjM1ZDg5OTY2NjNmYjllYTQ3NTc4ZDNhN2ViYmM0MmE1Y2NmOSJ9fX0=")), + // if possible we can remove this string for each texture to save up some space // eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUv UNKNOWN(999, "Unknown"); - + private int id; private String name; private String secondaryName; @@ -275,6 +282,11 @@ public enum CMIEntityType { this.id = id; this.name = name; this.secondaryName = secondaryName; + for (String one : headTextures) { + String text = one; + if (text.length() < 150) + text = "" + text; + } } public int getId() { diff --git a/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java b/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java index f518e5fb8..0678a83f7 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java @@ -16,8 +16,6 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; - public class CMIItemStack { private int id = 0; diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java index dc92f7b82..dee1ce277 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java @@ -3,34 +3,35 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; +import java.util.HashSet; import java.util.List; -import java.util.Map.Entry; +import java.util.Set; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.Skull; import org.bukkit.inventory.ItemStack; + import com.bekvon.bukkit.cmiLib.ItemManager.SlabType; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; public enum CMIMaterial { - NONE(null, null, null, "None"), + NONE(null, "None"), ACACIA_BOAT(447, 0, 27326, "Acacia Boat", "BOAT_ACACIA"), - ACACIA_BUTTON(null, null, 13993, "Acacia Button"), + ACACIA_BUTTON(13993, "Acacia Button"), ACACIA_DOOR(430, 0, 23797, "Acacia Door", "ACACIA_DOOR_ITEM"), - ACACIA_FENCE(192, 0, 4569, "Acacia Fence"), - ACACIA_FENCE_GATE(187, 0, 14145, "Acacia Fence Gate"), + ACACIA_FENCE(192, 0, 4569, Arrays.asList(CMIMaterialCriteria.seeThrow), "Acacia Fence"), + ACACIA_FENCE_GATE(187, 0, 14145, Arrays.asList(CMIMaterialCriteria.seeThrow), "Acacia Fence Gate"), ACACIA_LEAVES(161, 0, 16606, "Acacia Leaves", "LEAVES_2"), ACACIA_LOG(162, 0, 8385, "Acacia Log", "LOG_2"), ACACIA_PLANKS(5, 4, 31312, "Acacia Wood Plank", "Acacia Planks"), - ACACIA_PRESSURE_PLATE(null, null, 17586, "Acacia Pressure Plate"), + ACACIA_PRESSURE_PLATE(17586, "Acacia Pressure Plate"), ACACIA_SAPLING(6, 4, 20806, "Acacia Sapling"), ACACIA_SLAB(126, 4, 23730, "Acacia Wood Slab", "Acacia Slab"), ACACIA_STAIRS(163, 0, 17453, "Acacia Stairs"), - ACACIA_TRAPDOOR(null, null, 18343, "Acacia Trapdoor"), - ACACIA_WOOD(null, null, 21861, "Acacia Wood"), + ACACIA_TRAPDOOR(18343, "Acacia Trapdoor"), + ACACIA_WOOD(21861, "Acacia Wood"), ACTIVATOR_RAIL(157, 0, 5834, "Activator Rail"), AIR(0, 0, 9648, "Air"), ALLIUM(38, 2, 6871, "Allium", "RED_ROSE"), @@ -39,12 +40,12 @@ public enum CMIMaterial { APPLE(260, 0, 7720, "Apple"), ARMOR_STAND(416, 0, 12852, "Armor Stand"), ARROW(262, 0, 31091, "Arrow"), - ATTACHED_MELON_STEM(null, null, 30882, "Attached Melon Stem"), - ATTACHED_PUMPKIN_STEM(null, null, 12724, "Attached Pumpkin Stem"), + ATTACHED_MELON_STEM(30882, "Attached Melon Stem"), + ATTACHED_PUMPKIN_STEM(12724, "Attached Pumpkin Stem"), AZURE_BLUET(38, 3, 17608, "Azure Bluet"), BAKED_POTATO(393, 0, 14624, "Baked Potato"), BARRIER(166, 0, 26453, "Barrier"), - BAT_SPAWN_EGG(383, 65, 14607, "Spawn Bat", "Bat Spawn Egg"), + BAT_SPAWN_EGG(383, 65, 14607, "Bat Spawn Egg", "Spawn Bat"), BEACON(138, 0, 6608, "Beacon"), BEDROCK(7, 0, 23130, "Bedrock"), BEEF(363, 0, 4803, "Raw Beef"), @@ -53,45 +54,45 @@ public enum CMIMaterial { BEETROOT_SEEDS(435, 0, 21282, "Beetroot Seeds"), BEETROOT_SOUP(436, 0, 16036, "Beetroot Soup"), BIRCH_BOAT(445, 0, 28104, "Birch Boat", "BOAT_BIRCH"), - BIRCH_BUTTON(null, null, 26934, "Birch Button"), + BIRCH_BUTTON(26934, "Birch Button"), BIRCH_DOOR(428, 0, 14759, "Birch Door", "BIRCH_DOOR_ITEM"), - BIRCH_FENCE(189, 0, 17347, "Birch Fence"), - BIRCH_FENCE_GATE(184, 0, 6322, "Birch Fence Gate"), + BIRCH_FENCE(189, 0, 17347, Arrays.asList(CMIMaterialCriteria.seeThrow), "Birch Fence"), + BIRCH_FENCE_GATE(184, 0, 6322, Arrays.asList(CMIMaterialCriteria.seeThrow), "Birch Fence Gate"), BIRCH_LEAVES(18, 2, 12601, "Birch Leaves", "LEAVES"), BIRCH_LOG(17, 2, 26727, "Birch Log", "LOG"), - BIRCH_PLANKS(5, 2, 29322, "Birch Wood Plank", "Birch Planks"), - BIRCH_PRESSURE_PLATE(null, null, 9664, "Birch Pressure Plate"), + BIRCH_PLANKS(5, 2, 29322, "Birch Wood Plank"), + BIRCH_PRESSURE_PLATE(9664, "Birch Pressure Plate"), BIRCH_SAPLING(6, 2, 31533, "Birch Sapling"), BIRCH_SLAB(126, 2, 13807, "Birch Slab"), - BIRCH_STAIRS(135, 0, 7657, "Birch Wood Stairs", "Birch Stairs"), - BIRCH_TRAPDOOR(null, null, 32585, "Birch Trapdoor"), - BIRCH_WOOD(null, null, 20913, "Birch Wood"), - BLACK_BANNER(425, 0, 9365, "Banner", "Black Banner"), + BIRCH_STAIRS(135, 0, 7657, "Birch Wood Stairs"), + BIRCH_TRAPDOOR(32585, "Birch Trapdoor"), + BIRCH_WOOD(20913, "Birch Wood"), + BLACK_BANNER(425, 0, 9365, "Black Banner"), BLACK_BED(355, 15, 20490, "Black Bed"), BLACK_CARPET(171, 15, 6056, "Black Carpet", "CARPET"), BLACK_CONCRETE(251, 15, 13338, "Black Concrete", "CONCRETE"), BLACK_CONCRETE_POWDER(252, 15, 16150, "Black Concrete Powder", "CONCRETE_POWDER"), BLACK_GLAZED_TERRACOTTA(250, 0, 29678, "Black Glazed Terracotta"), BLACK_SHULKER_BOX(234, 0, 24076, "Black Shulker Box"), - BLACK_STAINED_GLASS(95, 15, 13941, "Black Stained Glass", "STAINED_GLASS"), - BLACK_STAINED_GLASS_PANE(160, 15, 13201, "Black Stained Glass Pane", "STAINED_GLASS_PANE"), + BLACK_STAINED_GLASS(95, 15, 13941, Arrays.asList(CMIMaterialCriteria.seeThrow), "Black Stained Glass", "STAINED_GLASS"), + BLACK_STAINED_GLASS_PANE(160, 15, 13201, Arrays.asList(CMIMaterialCriteria.seeThrow), "Black Stained Glass Pane", "STAINED_GLASS_PANE"), BLACK_TERRACOTTA(159, 15, 26691, "Black Terracotta", "STAINED_CLAY"), BLACK_WALL_BANNER(117, 0, 4919, "Black Banner"), BLACK_WOOL(35, 15, 16693, "Black Wool"), BLAZE_POWDER(377, 0, 18941, "Blaze Powder"), BLAZE_ROD(369, 0, 8289, "Blaze Rod"), - BLAZE_SPAWN_EGG(383, 61, 4759, "Spawn Blaze", "Blaze Spawn Egg"), - BLUE_BANNER(245, 4, 18481, "Blue Banner", "PURPLE_GLAZED_TERRACOTTA"), + BLAZE_SPAWN_EGG(383, 61, 4759, "Blaze Spawn Egg", "Spawn Blaze"), + BLUE_BANNER(245, 4, 18481, "Blue Banner"), BLUE_BED(355, 11, 12714, "Blue Bed"), BLUE_CARPET(171, 11, 13292, "Blue Carpet"), BLUE_CONCRETE(251, 11, 18756, "Blue Concrete"), BLUE_CONCRETE_POWDER(252, 11, 17773, "Blue Concrete Powder"), BLUE_GLAZED_TERRACOTTA(246, 0, 23823, "Blue Glazed Terracotta"), - BLUE_ICE(null, null, 22449, "Blue Ice"), + BLUE_ICE(22449, "Blue Ice"), BLUE_ORCHID(38, 1, 13432, "Blue Orchid"), BLUE_SHULKER_BOX(230, 0, 11476, "Blue Shulker Box"), - BLUE_STAINED_GLASS(95, 11, 7107, "Blue Stained Glass"), - BLUE_STAINED_GLASS_PANE(160, 11, 28484, "Blue Stained Glass Pane"), + BLUE_STAINED_GLASS(95, 11, 7107, Arrays.asList(CMIMaterialCriteria.seeThrow), "Blue Stained Glass"), + BLUE_STAINED_GLASS_PANE(160, 11, 28484, Arrays.asList(CMIMaterialCriteria.seeThrow), "Blue Stained Glass Pane"), BLUE_TERRACOTTA(159, 11, 5236, "Blue Terracotta"), BLUE_WALL_BANNER(117, 4, 17757, "Blue Banner"), BLUE_WOOL(35, 11, 15738, "Blue Wool"), @@ -102,10 +103,10 @@ public enum CMIMaterial { BOOKSHELF(47, 0, 10069, "Bookshelf"), BOW(261, 0, 8745, "Bow"), BOWL(281, 0, 32661, "Bowl"), - BRAIN_CORAL(null, null, 31316, "Brain Coral"), - BRAIN_CORAL_BLOCK(null, null, 30618, "Brain Coral Block"), - BRAIN_CORAL_FAN(null, null, 13849, "Brain Coral Fan"), - BRAIN_CORAL_WALL_FAN(null, null, 22685, "Brain Coral Wall Fan"), + BRAIN_CORAL(31316, "Brain Coral"), + BRAIN_CORAL_BLOCK(30618, "Brain Coral Block"), + BRAIN_CORAL_FAN(13849, "Brain Coral Fan"), + BRAIN_CORAL_WALL_FAN(22685, "Brain Coral Wall Fan"), BREAD(297, 0, 32049, "Bread"), BREWING_STAND(379, 0, 14539, "Brewing Stand", "BREWING_STAND_ITEM"), BRICK(336, 0, 6820, "Brick", "claybrick"), @@ -121,40 +122,40 @@ public enum CMIMaterial { BROWN_MUSHROOM(39, 0, 9665, "Brown Mushroom"), BROWN_MUSHROOM_BLOCK(99, 0, 6291, "Brown Mushroom Block", "HUGE_MUSHROOM_1"), BROWN_SHULKER_BOX(231, 0, 24230, "Brown Shulker Box"), - BROWN_STAINED_GLASS(95, 12, 20945, "Brown Stained Glass"), - BROWN_STAINED_GLASS_PANE(160, 12, 17557, "Brown Stained Glass Pane"), + BROWN_STAINED_GLASS(95, 12, 20945, Arrays.asList(CMIMaterialCriteria.seeThrow), "Brown Stained Glass"), + BROWN_STAINED_GLASS_PANE(160, 12, 17557, Arrays.asList(CMIMaterialCriteria.seeThrow), "Brown Stained Glass Pane"), BROWN_TERRACOTTA(159, 12, 23664, "Brown Terracotta"), BROWN_WALL_BANNER(117, 3, 14731, "Brown Banner"), BROWN_WOOL(35, 12, 32638, "Brown Wool"), - BUBBLE_COLUMN(null, null, 13758, "Bubble Column"), - BUBBLE_CORAL(null, null, 12464, "Bubble Coral"), - BUBBLE_CORAL_BLOCK(null, null, 15437, "Bubble Coral Block"), - BUBBLE_CORAL_FAN(null, null, 10795, "Bubble Coral Fan"), - BUBBLE_CORAL_WALL_FAN(null, null, 20382, "Bubble Coral Wall Fan"), + BUBBLE_COLUMN(13758, "Bubble Column"), + BUBBLE_CORAL(12464, "Bubble Coral"), + BUBBLE_CORAL_BLOCK(15437, "Bubble Coral Block"), + BUBBLE_CORAL_FAN(10795, "Bubble Coral Fan"), + BUBBLE_CORAL_WALL_FAN(20382, "Bubble Coral Wall Fan"), BUCKET(325, 0, 15215, "Bucket"), CACTUS(81, 0, 12191, "Cactus"), CACTUS_GREEN(351, 2, 17296, "Cactus Green"), CAKE(354, 0, 27048, "Cake"), - CARROT(391, 0, 22824, "Carrot", "Carrotitem"), - CARROTS(141, 0, 17258, "Carrots"), + CARROT(141, 0, 22824, "Carrot", "Carrotitem"), + CARROTS(391, 0, 17258, "Carrots"), CARROT_ON_A_STICK(398, 0, 27809, "Carrot on a Stick", "carrotstick"), - CARVED_PUMPKIN(null, null, 25833, "Carved Pumpkin"), + CARVED_PUMPKIN(25833, "Carved Pumpkin"), CAULDRON(380, 0, 26531, "Cauldron", "CAULDRON_ITEM"), - CAVE_AIR(null, null, 17422, "Cave Air"), - CAVE_SPIDER_SPAWN_EGG(383, 59, 23341, "Spawn Cave Spider", "Cave Spider Spawn Egg"), + CAVE_AIR(17422, "Cave Air"), + CAVE_SPIDER_SPAWN_EGG(383, 59, 23341, "Cave Spider Spawn Egg", "Spawn Cave Spider"), CHAINMAIL_BOOTS(305, 0, 17953, "Chainmail Boots"), CHAINMAIL_CHESTPLATE(303, 0, 23602, "Chainmail Chestplate"), CHAINMAIL_HELMET(302, 0, 26114, "Chainmail Helmet"), CHAINMAIL_LEGGINGS(304, 0, 19087, "Chainmail Leggings"), - CHAIN_COMMAND_BLOCK(null, null, 26798, "Chain Command Block"), + CHAIN_COMMAND_BLOCK(26798, "Chain Command Block"), CHARCOAL(263, 1, 5390, "Charcoal"), CHEST(54, 0, 22969, "Chest"), CHEST_MINECART(342, 0, 4497, "Minecart with Chest", "Storageminecart"), CHICKEN(365, 0, 17281, "Raw Chicken"), - CHICKEN_SPAWN_EGG(383, 93, 5462, "Spawn Chicken", "Chicken Spawn Egg"), + CHICKEN_SPAWN_EGG(383, 93, 5462, "Chicken Spawn Egg", "Spawn Chicken"), CHIPPED_ANVIL(145, 1, 10623, "Chipped Anvil"), - CHISELED_QUARTZ_BLOCK(155, 1, 30964, "Chiseled Quartz Block", "QUARTZ_BLOCK"), - CHISELED_RED_SANDSTONE(179, 1, 15529, "Chiseled Red Sandstone", "RED_SANDSTONE"), + CHISELED_QUARTZ_BLOCK(155, 1, 30964, "Chiseled Quartz Block"), + CHISELED_RED_SANDSTONE(179, 1, 15529, "Chiseled Red Sandstone"), CHISELED_SANDSTONE(24, 1, 31763, "Chiseled Sandstone"), CHISELED_STONE_BRICKS(98, 3, 9087, "Chiseled Stone Bricks", "SMOOTH_BRICK"), CHORUS_FLOWER(200, 0, 28542, "Chorus Flower"), @@ -164,24 +165,24 @@ public enum CMIMaterial { CLAY_BALL(337, 0, 24603, "Clay Ball"), CLOCK(347, 0, 14980, "Clock", "watch"), COAL(263, 0, 29067, "Coal"), - COAL_BLOCK(173, 0, 27968, "Block of Coal", "COAL_BLOCK"), + COAL_BLOCK(173, 0, 27968, "Block of Coal"), COAL_ORE(16, 0, 30965, "Coal Ore"), COARSE_DIRT(3, 1, 15411, "Coarse Dirt"), COBBLESTONE(4, 0, 32147, "Cobblestone"), COBBLESTONE_SLAB(44, 3, 6340, "Cobblestone Slab"), COBBLESTONE_STAIRS(67, 0, 24715, "Cobblestone Stairs"), COBBLESTONE_WALL(139, 0, 12616, "Cobblestone Wall", "COBBLE_WALL"), - COBWEB(30, 0, 9469, "Cobweb", "WEB"), + COBWEB(30, 0, 9469, Arrays.asList(CMIMaterialCriteria.seeThrow), "Cobweb", "WEB"), COCOA(127, 0, 29709, "Cocoa"), COCOA_BEANS(351, 3, 27381, "Coco Beans"), - COD(null, null, 24691, "Raw Cod"), - COD_BUCKET(null, null, 28601, "Bucket of Cod"), - COD_SPAWN_EGG(null, null, 27248, "Cod Spawn Egg"), + COD(24691, "Raw Cod"), + COD_BUCKET(28601, "Bucket of Cod"), + COD_SPAWN_EGG(27248, "Cod Spawn Egg"), COMMAND_BLOCK(137, 0, 4355, "Command Block", "COMMAND"), COMMAND_BLOCK_MINECART(422, 0, 7992, "Minecart with Command Block"), COMPARATOR(404, 0, 18911, "Redstone Comparator"), COMPASS(345, 0, 24139, "Compass"), - CONDUIT(null, null, 5148, "Conduit"), + CONDUIT(5148, "Conduit"), COOKED_BEEF(364, 0, 21595, "Steak"), COOKED_CHICKEN(366, 0, 20780, "Cooked Chicken"), COOKED_COD(350, 0, 9681, "Cooked Fish"), @@ -190,14 +191,14 @@ public enum CMIMaterial { COOKED_RABBIT(412, 0, 4454, "Cooked Rabbit"), COOKED_SALMON(350, 1, 5615, "Cooked Salmon"), COOKIE(357, 0, 27431, "Cookie"), - COW_SPAWN_EGG(383, 92, 14761, "Spawn Cow", "Cow Spawn Egg"), + COW_SPAWN_EGG(383, 92, 14761, "Cow Spawn Egg", "Spawn Cow"), CRACKED_STONE_BRICKS(98, 2, 27869, "Cracked Stone Bricks"), - CRAFTING_TABLE(58, 0, 20706, "Crafting Table", "WORKBENCH"), - CREEPER_HEAD(397, 4, 29146, "Mob Head (Creeper)", "Creeper Head"), - CREEPER_SPAWN_EGG(383, 50, 9653, "Spawn Creeper", "Creeper Spawn Egg"), + CRAFTING_TABLE(58, 0, 20706, "Crafting Table", "WORKBENCH", "Table"), + CREEPER_HEAD(397, 4, 29146, "Mob Head (Creeper)"), + CREEPER_SPAWN_EGG(383, 50, 9653, "Creeper Spawn Egg", "Spawn Creeper"), CREEPER_WALL_HEAD(144, 4, 30123, "Creeper Wall Head"), - CUT_RED_SANDSTONE(null, null, 26842, "Cut Red Sandstone"), - CUT_SANDSTONE(null, null, 6118, "Cut Sandstone"), + CUT_RED_SANDSTONE(26842, "Cut Red Sandstone"), + CUT_SANDSTONE(6118, "Cut Sandstone"), CYAN_BANNER(425, 6, 9839, "Cyan Banner"), CYAN_BED(355, 9, 16746, "Cyan Bed"), CYAN_CARPET(171, 9, 31495, "Cyan Carpet"), @@ -206,8 +207,8 @@ public enum CMIMaterial { CYAN_DYE(351, 6, 8043, "Cyan Dye"), CYAN_GLAZED_TERRACOTTA(244, 0, 9550, "Cyan Glazed Terracotta"), CYAN_SHULKER_BOX(228, 0, 28123, "Cyan Shulker Box"), - CYAN_STAINED_GLASS(95, 9, 30604, "Cyan Stained Glass"), - CYAN_STAINED_GLASS_PANE(160, 9, 11784, "Cyan Stained Glass Pane"), + CYAN_STAINED_GLASS(95, 9, 30604, Arrays.asList(CMIMaterialCriteria.seeThrow), "Cyan Stained Glass"), + CYAN_STAINED_GLASS_PANE(160, 9, 11784, Arrays.asList(CMIMaterialCriteria.seeThrow), "Cyan Stained Glass Pane"), CYAN_TERRACOTTA(159, 9, 25940, "Cyan Terracotta"), CYAN_WALL_BANNER(117, 6, 10889, "Cyan Banner"), CYAN_WOOL(35, 9, 12221, "Cyan Wool"), @@ -215,49 +216,49 @@ public enum CMIMaterial { DANDELION(37, 0, 30558, "Dandelion", "YELLOW_FLOWER"), DANDELION_YELLOW(351, 11, 21789, "Dandelion Yellow"), DARK_OAK_BOAT(448, 0, 28618, "Dark Oak Boat", "BOAT_DARK_OAK"), - DARK_OAK_BUTTON(null, null, 6214, "Dark Oak Button"), + DARK_OAK_BUTTON(6214, "Dark Oak Button"), DARK_OAK_DOOR(431, 0, 10669, "Dark Oak Door", "DARK_OAK_DOOR_ITEM"), - DARK_OAK_FENCE(191, 0, 21767, "Dark Oak Fence"), - DARK_OAK_FENCE_GATE(186, 0, 10679, "Dark Oak Fence Gate"), + DARK_OAK_FENCE(191, 0, 21767, Arrays.asList(CMIMaterialCriteria.seeThrow), "Dark Oak Fence"), + DARK_OAK_FENCE_GATE(186, 0, 10679, Arrays.asList(CMIMaterialCriteria.seeThrow), "Dark Oak Fence Gate"), DARK_OAK_LEAVES(161, 1, 22254, "Dark Oak Leaves"), DARK_OAK_LOG(162, 1, 14831, "Dark Oak Log"), - DARK_OAK_PLANKS(5, 5, 20869, "Dark Oak Wood Plank", "Dark Oak Planks"), - DARK_OAK_PRESSURE_PLATE(null, null, 31375, "Dark Oak Pressure Plate"), + DARK_OAK_PLANKS(5, 5, 20869, "Dark Oak Wood Plank"), + DARK_OAK_PRESSURE_PLATE(31375, "Dark Oak Pressure Plate"), DARK_OAK_SAPLING(6, 5, 14933, "Dark Oak Sapling"), - DARK_OAK_SLAB(126, 5, 28852, "Dark Oak Wood Slab", "Dark Oak Slab"), + DARK_OAK_SLAB(126, 5, 28852, "Dark Oak Wood Slab"), DARK_OAK_STAIRS(164, 0, 22921, "Dark Oak Stairs"), - DARK_OAK_TRAPDOOR(null, null, 10355, "Dark Oak Trapdoor"), - DARK_OAK_WOOD(null, null, 16995, "Dark Oak Wood"), + DARK_OAK_TRAPDOOR(10355, "Dark Oak Trapdoor"), + DARK_OAK_WOOD(16995, "Dark Oak Wood"), DARK_PRISMARINE(168, 2, 19940, "Dark Prismarine"), - DARK_PRISMARINE_SLAB(null, null, 7577, "Dark Prismarine Slab"), - DARK_PRISMARINE_STAIRS(null, null, 26511, "Dark Prismarine Stairs"), + DARK_PRISMARINE_SLAB(7577, "Dark Prismarine Slab"), + DARK_PRISMARINE_STAIRS(26511, "Dark Prismarine Stairs"), DAYLIGHT_DETECTOR(151, 0, 8864, "Daylight Detector"), - DEAD_BRAIN_CORAL(null, null, 9116, "Dead Brain Coral"), - DEAD_BRAIN_CORAL_BLOCK(null, null, 12979, "Dead Brain Coral Block"), - DEAD_BRAIN_CORAL_FAN(null, null, 26150, "Dead Brain Coral Fan"), - DEAD_BRAIN_CORAL_WALL_FAN(null, null, 23718, "Dead Brain Coral Wall Fan"), - DEAD_BUBBLE_CORAL(null, null, 30583, "Dead Bubble Coral"), - DEAD_BUBBLE_CORAL_BLOCK(null, null, 28220, "Dead Bubble Coral Block"), - DEAD_BUBBLE_CORAL_FAN(null, null, 17322, "Dead Bubble Coral Fan"), - DEAD_BUBBLE_CORAL_WALL_FAN(null, null, 18453, "Dead Bubble Coral Wall Fan"), + DEAD_BRAIN_CORAL(9116, "Dead Brain Coral"), + DEAD_BRAIN_CORAL_BLOCK(12979, "Dead Brain Coral Block"), + DEAD_BRAIN_CORAL_FAN(26150, "Dead Brain Coral Fan"), + DEAD_BRAIN_CORAL_WALL_FAN(23718, "Dead Brain Coral Wall Fan"), + DEAD_BUBBLE_CORAL(30583, "Dead Bubble Coral"), + DEAD_BUBBLE_CORAL_BLOCK(28220, "Dead Bubble Coral Block"), + DEAD_BUBBLE_CORAL_FAN(17322, "Dead Bubble Coral Fan"), + DEAD_BUBBLE_CORAL_WALL_FAN(18453, "Dead Bubble Coral Wall Fan"), DEAD_BUSH(32, 0, 22888, "Dead Bush"), - DEAD_FIRE_CORAL(null, null, 8365, "Dead Fire Coral"), - DEAD_FIRE_CORAL_BLOCK(null, null, 5307, "Dead Fire Coral Block"), - DEAD_FIRE_CORAL_FAN(null, null, 27073, "Dead Fire Coral Fan"), - DEAD_FIRE_CORAL_WALL_FAN(null, null, 23375, "Dead Fire Coral Wall Fan"), - DEAD_HORN_CORAL(null, null, 5755, "Dead Horn Coral"), - DEAD_HORN_CORAL_BLOCK(null, null, 15103, "Dead Horn Coral Block"), - DEAD_HORN_CORAL_FAN(null, null, 11387, "Dead Horn Coral Fan"), - DEAD_HORN_CORAL_WALL_FAN(null, null, 27550, "Dead Horn Coral Wall Fan"), - DEAD_TUBE_CORAL(null, null, 18028, "Dead Tube Coral"), - DEAD_TUBE_CORAL_BLOCK(null, null, 28350, "Dead Tube Coral Block"), - DEAD_TUBE_CORAL_FAN(null, null, 17628, "Dead Tube Coral Fan"), - DEAD_TUBE_CORAL_WALL_FAN(null, null, 5128, "Dead Tube Coral Wall Fan"), - DEBUG_STICK(null, null, 24562, "Debug Stick"), - DETECTOR_RAIL(28, 0, 13475, "Detector Rail", "DETECTOR_RAIL"), + DEAD_FIRE_CORAL(8365, "Dead Fire Coral"), + DEAD_FIRE_CORAL_BLOCK(5307, "Dead Fire Coral Block"), + DEAD_FIRE_CORAL_FAN(27073, "Dead Fire Coral Fan"), + DEAD_FIRE_CORAL_WALL_FAN(23375, "Dead Fire Coral Wall Fan"), + DEAD_HORN_CORAL(5755, "Dead Horn Coral"), + DEAD_HORN_CORAL_BLOCK(15103, "Dead Horn Coral Block"), + DEAD_HORN_CORAL_FAN(11387, "Dead Horn Coral Fan"), + DEAD_HORN_CORAL_WALL_FAN(27550, "Dead Horn Coral Wall Fan"), + DEAD_TUBE_CORAL(18028, "Dead Tube Coral"), + DEAD_TUBE_CORAL_BLOCK(28350, "Dead Tube Coral Block"), + DEAD_TUBE_CORAL_FAN(17628, "Dead Tube Coral Fan"), + DEAD_TUBE_CORAL_WALL_FAN(5128, "Dead Tube Coral Wall Fan"), + DEBUG_STICK(24562, "Debug Stick"), + DETECTOR_RAIL(28, 0, 13475, "Detector Rail"), DIAMOND(264, 0, 20865, "Diamond"), DIAMOND_AXE(279, 0, 27277, "Diamond Axe"), - DIAMOND_BLOCK(57, 0, 5944, "Block of Diamond", "DIAMOND_BLOCK"), + DIAMOND_BLOCK(57, 0, 5944, "Block of Diamond"), DIAMOND_BOOTS(313, 0, 16522, "Diamond Boots"), DIAMOND_CHESTPLATE(311, 0, 32099, "Diamond Chestplate"), DIAMOND_HELMET(310, 0, 10755, "Diamond Helmet"), @@ -271,18 +272,18 @@ public enum CMIMaterial { DIORITE(1, 3, 24688, "Diorite"), DIRT(3, 0, 10580, "Dirt"), DISPENSER(23, 0, 20871, "Dispenser"), - DOLPHIN_SPAWN_EGG(null, null, 20787, "Dolphin Spawn Egg"), - DONKEY_SPAWN_EGG(383, 31, 14513, "Spawn Donkey", "Donkey Spawn Egg"), + DOLPHIN_SPAWN_EGG(20787, "Dolphin Spawn Egg"), + DONKEY_SPAWN_EGG(383, 31, 14513, "Donkey Spawn Egg", "Spawn Donkey"), DRAGON_BREATH(437, 0, 20154, "Dragon's Breath"), DRAGON_EGG(122, 0, 29946, "Dragon Egg"), DRAGON_HEAD(397, 5, 20084, "Dragon Head"), DRAGON_WALL_HEAD(144, 5, 19818, "Dragon Wall Head"), - DRIED_KELP(null, null, 21042, "Dried Kelp"), - DRIED_KELP_BLOCK(null, null, 12966, "Dried Kelp Block"), + DRIED_KELP(21042, "Dried Kelp"), + DRIED_KELP_BLOCK(12966, "Dried Kelp Block"), DROPPER(158, 0, 31273, "Dropper"), - DROWNED_SPAWN_EGG(null, null, 19368, "Drowned Spawn Egg"), + DROWNED_SPAWN_EGG(19368, "Drowned Spawn Egg"), EGG(344, 0, 21603, "Egg"), - ELDER_GUARDIAN_SPAWN_EGG(383, 4, 11418, "Spawn Elder Guardian", "Elder Guardian Spawn Egg"), + ELDER_GUARDIAN_SPAWN_EGG(383, 4, 11418, "Elder Guardian Spawn Egg", "Spawn Elder Guardian"), ELYTRA(443, 0, 23829, "Elytra"), EMERALD(388, 0, 5654, "Emerald"), EMERALD_BLOCK(133, 0, 9914, "Emerald Block", "Block of Emerald"), @@ -290,8 +291,8 @@ public enum CMIMaterial { ENCHANTED_BOOK(403, 0, 11741, "Enchanted Book"), ENCHANTED_GOLDEN_APPLE(322, 1, 8280, "Enchanted Golden Apple"), ENCHANTING_TABLE(116, 0, 16255, "Enchanting Table", "ENCHANTMENT_TABLE"), - ENDERMAN_SPAWN_EGG(383, 58, 29488, "Spawn Enderman", "Enderman Spawn Egg"), - ENDERMITE_SPAWN_EGG(383, 67, 16617, "Spawn Endermite", "Endermite Spawn Egg"), + ENDERMAN_SPAWN_EGG(383, 58, 29488, "Enderman Spawn Egg", "Spawn Enderman"), + ENDERMITE_SPAWN_EGG(383, 67, 16617, "Endermite Spawn Egg", "Spawn Endermite"), ENDER_CHEST(130, 0, 32349, "Ender Chest"), ENDER_EYE(381, 0, 24860, "Eye of Ender"), ENDER_PEARL(368, 0, 5259, "Ender Pearl"), @@ -302,7 +303,7 @@ public enum CMIMaterial { END_ROD(198, 0, 24832, "End Rod"), END_STONE(121, 0, 29686, "End Stone", "ENDER_STONE"), END_STONE_BRICKS(206, 0, 20314, "End Stone Bricks", "END_BRICKS"), - EVOKER_SPAWN_EGG(383, 34, 21271, "Spawn Evoker", "Evoker Spawn Egg"), + EVOKER_SPAWN_EGG(383, 34, 21271, "Evoker Spawn Egg", "Spawn Evoker"), EXPERIENCE_BOTTLE(384, 0, 12858, "Bottle o' Enchanting", "expbottle"), FARMLAND(60, 0, 31166, "Farmland", "SOIL"), FEATHER(288, 0, 30548, "Feather"), @@ -313,10 +314,10 @@ public enum CMIMaterial { FIREWORK_ROCKET(401, 0, 23841, "Firework Rocket"), FIREWORK_STAR(402, 0, 12190, "Firework Star", "FIREWORK_CHARGE"), FIRE_CHARGE(385, 0, 4842, "Fire Charge", "Fireball"), - FIRE_CORAL(null, null, 29151, "Fire Coral"), - FIRE_CORAL_BLOCK(null, null, 12119, "Fire Coral Block"), - FIRE_CORAL_FAN(null, null, 11112, "Fire Coral Fan"), - FIRE_CORAL_WALL_FAN(null, null, 20100, "Fire Coral Wall Fan"), + FIRE_CORAL(29151, "Fire Coral"), + FIRE_CORAL_BLOCK(12119, "Fire Coral Block"), + FIRE_CORAL_FAN(11112, "Fire Coral Fan"), + FIRE_CORAL_WALL_FAN(20100, "Fire Coral Wall Fan"), FISHING_ROD(346, 0, 4167, "Fishing Rod"), FLINT(318, 0, 23596, "Flint"), FLINT_AND_STEEL(259, 0, 28620, "Flint and Steel"), @@ -324,11 +325,11 @@ public enum CMIMaterial { FROSTED_ICE(212, 0, 21814, "Frosted Ice"), FURNACE(61, 0, 8133, "Furnace"), FURNACE_MINECART(343, 0, 14196, "Minecart with Furnace", "POWERED_MINECART"), - GHAST_SPAWN_EGG(383, 56, 9970, "Spawn Ghast", "Ghast Spawn Egg"), + GHAST_SPAWN_EGG(383, 56, 9970, "Ghast Spawn Egg", "Spawn Ghast"), GHAST_TEAR(370, 0, 18222, "Ghast Tear"), - GLASS(20, 0, 6195, "Glass"), + GLASS(20, 0, 6195, Arrays.asList(CMIMaterialCriteria.seeThrow), "Glass"), GLASS_BOTTLE(374, 0, 6116, "Glass Bottle"), - GLASS_PANE(102, 0, 5709, "Glass Pane", "THIN_GLASS"), + GLASS_PANE(102, 0, 5709, Arrays.asList(CMIMaterialCriteria.seeThrow), "Glass Pane", "THIN_GLASS"), GLISTERING_MELON_SLICE(382, 0, 20158, "Glistering Melon", "speckledmelon"), GLOWSTONE(89, 0, 32713, "Glowstone"), GLOWSTONE_DUST(348, 0, 6665, "Glowstone Dust"), @@ -361,8 +362,8 @@ public enum CMIMaterial { GRAY_DYE(351, 8, 9184, "Gray Dye"), GRAY_GLAZED_TERRACOTTA(242, 0, 6256, "Gray Glazed Terracotta"), GRAY_SHULKER_BOX(226, 0, 12754, "Gray Shulker Box"), - GRAY_STAINED_GLASS(95, 7, 29979, "Gray Stained Glass"), - GRAY_STAINED_GLASS_PANE(160, 7, 25272, "Gray Stained Glass Pane"), + GRAY_STAINED_GLASS(95, 7, 29979, Arrays.asList(CMIMaterialCriteria.seeThrow), "Gray Stained Glass"), + GRAY_STAINED_GLASS_PANE(160, 7, 25272, Arrays.asList(CMIMaterialCriteria.seeThrow), "Gray Stained Glass Pane"), GRAY_TERRACOTTA(159, 7, 18004, "Gray Terracotta"), GRAY_WALL_BANNER(117, 8, 24275, "Gray Banner"), GRAY_WOOL(35, 7, 27209, "Gray Wool"), @@ -373,24 +374,24 @@ public enum CMIMaterial { GREEN_CONCRETE_POWDER(252, 13, 6904, "Green Concrete Powder"), GREEN_GLAZED_TERRACOTTA(248, 0, 6958, "Green Glazed Terracotta"), GREEN_SHULKER_BOX(232, 0, 9377, "Green Shulker Box"), - GREEN_STAINED_GLASS(95, 13, 22503, "Green Stained Glass"), - GREEN_STAINED_GLASS_PANE(160, 13, 4767, "Green Stained Glass Pane"), + GREEN_STAINED_GLASS(95, 13, 22503, Arrays.asList(CMIMaterialCriteria.seeThrow), "Green Stained Glass"), + GREEN_STAINED_GLASS_PANE(160, 13, 4767, Arrays.asList(CMIMaterialCriteria.seeThrow), "Green Stained Glass Pane"), GREEN_TERRACOTTA(159, 13, 4105, "Green Terracotta"), GREEN_WALL_BANNER(117, 2, 15046, "Green Banner"), GREEN_WOOL(35, 13, 25085, "Green Wool"), - GUARDIAN_SPAWN_EGG(383, 68, 20113, "Spawn Guardian", "Guardian Spawn Egg"), + GUARDIAN_SPAWN_EGG(383, 68, 20113, "Guardian Spawn Egg", "Spawn Guardian"), GUNPOWDER(289, 0, 29974, "Gunpowder", "SULPHUR"), HAY_BLOCK(170, 0, 17461, "Hay Bale", "HAY_BLOCK"), - HEART_OF_THE_SEA(null, null, 11807, "Heart of the Sea"), + HEART_OF_THE_SEA(11807, "Heart of the Sea"), HEAVY_WEIGHTED_PRESSURE_PLATE(148, 0, 16970, "Heavy Weighted Pressure Plate", "IRON_PLATE"), HOPPER(154, 0, 31974, "Hopper"), HOPPER_MINECART(408, 0, 19024, "Minecart with Hopper"), - HORN_CORAL(null, null, 19511, "Horn Coral"), - HORN_CORAL_BLOCK(null, null, 19958, "Horn Coral Block"), - HORN_CORAL_FAN(null, null, 13610, "Horn Coral Fan"), - HORN_CORAL_WALL_FAN(null, null, 28883, "Horn Coral Wall Fan"), - HORSE_SPAWN_EGG(383, 100, 25981, "Spawn Horse", "Horse Spawn Egg"), - HUSK_SPAWN_EGG(383, 23, 20178, "Spawn Husk", "Husk Spawn Egg"), + HORN_CORAL(19511, "Horn Coral"), + HORN_CORAL_BLOCK(19958, "Horn Coral Block"), + HORN_CORAL_FAN(13610, "Horn Coral Fan"), + HORN_CORAL_WALL_FAN(28883, "Horn Coral Wall Fan"), + HORSE_SPAWN_EGG(383, 100, 25981, "Horse Spawn Egg", "Spawn Horse"), + HUSK_SPAWN_EGG(383, 23, 20178, "Husk Spawn Egg", "Spawn Husk"), ICE(79, 0, 30428, "Ice"), INFESTED_CHISELED_STONE_BRICKS(97, 5, 4728, "Infested Chiseled Stone Bricks", "MONSTER_EGGS"), INFESTED_COBBLESTONE(97, 1, 28798, "Infested Cobblestone"), @@ -400,7 +401,7 @@ public enum CMIMaterial { INFESTED_STONE_BRICKS(97, 2, 19749, "Infested Stone Bricks"), INK_SAC(351, 0, 7184, "Ink Sac", "Ink Sack"), IRON_AXE(258, 0, 15894, "Iron Axe"), - IRON_BARS(101, 0, 9378, "Iron Bars", "IRON_FENCE"), + IRON_BARS(101, 0, 9378, Arrays.asList(CMIMaterialCriteria.seeThrow), "Iron Bars", "IRON_FENCE"), IRON_BLOCK(42, 0, 24754, "Block of Iron", "IRON_BLOCK"), IRON_BOOTS(309, 0, 8531, "Iron Boots"), IRON_CHESTPLATE(307, 0, 28112, "Iron Chestplate"), @@ -420,21 +421,21 @@ public enum CMIMaterial { JACK_O_LANTERN(91, 0, 31612, "Jack o'Lantern", "JACK_O_LANTERN"), JUKEBOX(84, 0, 19264, "Jukebox"), JUNGLE_BOAT(446, 0, 4495, "Jungle Boat", "BOAT_JUNGLE"), - JUNGLE_BUTTON(null, null, 25317, "Jungle Button"), + JUNGLE_BUTTON(25317, "Jungle Button"), JUNGLE_DOOR(429, 0, 28163, "Jungle Door", "JUNGLE_DOOR_ITEM"), - JUNGLE_FENCE(190, 0, 14358, "Jungle Fence"), - JUNGLE_FENCE_GATE(185, 0, 21360, "Jungle Fence Gate", "JUNGLE_FENCE_GATE"), + JUNGLE_FENCE(190, 0, 14358, Arrays.asList(CMIMaterialCriteria.seeThrow), "Jungle Fence"), + JUNGLE_FENCE_GATE(185, 0, 21360, Arrays.asList(CMIMaterialCriteria.seeThrow), "Jungle Fence Gate", "JUNGLE_FENCE_GATE"), JUNGLE_LEAVES(18, 3, 5133, "Jungle Leaves"), JUNGLE_LOG(17, 3, 20721, "Jungle Log"), JUNGLE_PLANKS(5, 3, 26445, "Jungle Wood Plank", "Jungle Planks"), - JUNGLE_PRESSURE_PLATE(null, null, 11376, "Jungle Pressure Plate"), + JUNGLE_PRESSURE_PLATE(11376, "Jungle Pressure Plate"), JUNGLE_SAPLING(6, 3, 17951, "Jungle Sapling"), JUNGLE_SLAB(43, 0, 19117, "Double Stone Slab"), JUNGLE_STAIRS(136, 0, 20636, "Jungle Wood Stairs", "Jungle Stairs"), - JUNGLE_TRAPDOOR(null, null, 8626, "Jungle Trapdoor"), - JUNGLE_WOOD(null, null, 10341, "Jungle Wood"), - KELP(null, null, 21916, "Kelp"), - KELP_PLANT(null, null, 29697, "Kelp Plant"), + JUNGLE_TRAPDOOR(8626, "Jungle Trapdoor"), + JUNGLE_WOOD(10341, "Jungle Wood"), + KELP(21916, "Kelp"), + KELP_PLANT(29697, "Kelp Plant"), KNOWLEDGE_BOOK(453, 0, 12646, "Knowledge Book"), LADDER(65, 0, 23599, "Ladder"), LAPIS_BLOCK(22, 0, 14485, "Lapis Lazuli Block", "LAPIS_BLOCK"), @@ -458,8 +459,8 @@ public enum CMIMaterial { LIGHT_BLUE_DYE(351, 12, 28738, "Light Blue Dye"), LIGHT_BLUE_GLAZED_TERRACOTTA(238, 0, 4336, "Light Blue Glazed Terracotta"), LIGHT_BLUE_SHULKER_BOX(222, 0, 18226, "Light Blue Shulker Box"), - LIGHT_BLUE_STAINED_GLASS(95, 3, 17162, "Light Blue Stained Glass"), - LIGHT_BLUE_STAINED_GLASS_PANE(160, 3, 18721, "Light Blue Stained Glass Pane"), + LIGHT_BLUE_STAINED_GLASS(95, 3, 17162, Arrays.asList(CMIMaterialCriteria.seeThrow), "Light Blue Stained Glass"), + LIGHT_BLUE_STAINED_GLASS_PANE(160, 3, 18721, Arrays.asList(CMIMaterialCriteria.seeThrow), "Light Blue Stained Glass Pane"), LIGHT_BLUE_TERRACOTTA(159, 3, 31779, "Light Blue Terracotta"), LIGHT_BLUE_WALL_BANNER(117, 12, 12011, "Light Blue Banner"), LIGHT_BLUE_WOOL(35, 3, 21073, "Light Blue Wool"), @@ -471,8 +472,8 @@ public enum CMIMaterial { LIGHT_GRAY_DYE(351, 7, 27643, "Light Gray Dye"), LIGHT_GRAY_GLAZED_TERRACOTTA(243, 0, 10707, "Light Gray Glazed Terracotta", "SILVER_GLAZED_TERRACOTTA"), LIGHT_GRAY_SHULKER_BOX(227, 0, 21345, "Light Gray Shulker Box", "SILVER_SHULKER_BOX"), - LIGHT_GRAY_STAINED_GLASS(95, 8, 5843, "Light Gray Stained Glass"), - LIGHT_GRAY_STAINED_GLASS_PANE(160, 8, 19008, "Light Gray Stained Glass Pane"), + LIGHT_GRAY_STAINED_GLASS(95, 8, 5843, Arrays.asList(CMIMaterialCriteria.seeThrow), "Light Gray Stained Glass"), + LIGHT_GRAY_STAINED_GLASS_PANE(160, 8, 19008, Arrays.asList(CMIMaterialCriteria.seeThrow), "Light Gray Stained Glass Pane"), LIGHT_GRAY_TERRACOTTA(159, 8, 26388, "Light Gray Terracotta"), LIGHT_GRAY_WALL_BANNER(117, 7, 31088, "Light Gray Banner"), LIGHT_GRAY_WOOL(35, 8, 22936, "Light Gray Wool"), @@ -487,13 +488,13 @@ public enum CMIMaterial { LIME_DYE(351, 10, 6147, "Lime Dye"), LIME_GLAZED_TERRACOTTA(240, 0, 13861, "Lime Glazed Terracotta"), LIME_SHULKER_BOX(224, 0, 28360, "Lime Shulker Box"), - LIME_STAINED_GLASS(95, 5, 24266, "Lime Stained Glass"), - LIME_STAINED_GLASS_PANE(160, 5, 10610, "Lime Stained Glass Pane"), + LIME_STAINED_GLASS(95, 5, 24266, Arrays.asList(CMIMaterialCriteria.seeThrow), "Lime Stained Glass"), + LIME_STAINED_GLASS_PANE(160, 5, 10610, Arrays.asList(CMIMaterialCriteria.seeThrow), "Lime Stained Glass Pane"), LIME_TERRACOTTA(159, 5, 24013, "Lime Terracotta"), LIME_WALL_BANNER(117, 10, 21422, "Lime Banner"), LIME_WOOL(35, 5, 10443, "Lime Wool"), LINGERING_POTION(441, 0, 25857, "Lingering Potion"), - LLAMA_SPAWN_EGG(383, 103, 23640, "Spawn Llama", "Llama Spawn Egg"), + LLAMA_SPAWN_EGG(383, 103, 23640, "Llama Spawn Egg", "Spawn Llama"), MAGENTA_BANNER(425, 13, 15591, "Magenta Banner"), MAGENTA_BED(355, 2, 20061, "Magenta Bed"), MAGENTA_CARPET(171, 2, 6180, "Magenta Carpet"), @@ -502,14 +503,14 @@ public enum CMIMaterial { MAGENTA_DYE(351, 13, 11788, "Magenta Dye"), MAGENTA_GLAZED_TERRACOTTA(237, 0, 8067, "Magenta Glazed Terracotta"), MAGENTA_SHULKER_BOX(221, 0, 21566, "Magenta Shulker Box"), - MAGENTA_STAINED_GLASS(95, 2, 26814, "Magenta Stained Glass"), - MAGENTA_STAINED_GLASS_PANE(160, 2, 14082, "Magenta Stained Glass Pane"), + MAGENTA_STAINED_GLASS(95, 2, 26814, Arrays.asList(CMIMaterialCriteria.seeThrow), "Magenta Stained Glass"), + MAGENTA_STAINED_GLASS_PANE(160, 2, 14082, Arrays.asList(CMIMaterialCriteria.seeThrow), "Magenta Stained Glass Pane"), MAGENTA_TERRACOTTA(159, 2, 25900, "Magenta Terracotta"), MAGENTA_WALL_BANNER(117, 13, 23291, "Magenta Banner"), MAGENTA_WOOL(35, 2, 11853, "Magenta Wool"), MAGMA_BLOCK(213, 0, 25927, "Magma Block", "MAGMA"), MAGMA_CREAM(378, 0, 25097, "Magma Cream"), - MAGMA_CUBE_SPAWN_EGG(383, 62, 26638, "Spawn Magma Cube", "Magma Cube Spawn Egg"), + MAGMA_CUBE_SPAWN_EGG(383, 62, 26638, "Magma Cube Spawn Egg", "Spawn Magma Cube"), MAP(395, 0, 21655, "Empty Map"), MELON(103, 0, 25172, "Melon", "Melon_Block"), MELON_SEEDS(362, 0, 18340, "Melon Seeds"), @@ -517,13 +518,13 @@ public enum CMIMaterial { MELON_STEM(105, 0, 8247, "Melon Stem"), MILK_BUCKET(335, 0, 9680, "Milk Bucket"), MINECART(328, 0, 14352, "Minecart"), - MOOSHROOM_SPAWN_EGG(383, 96, 22125, "Spawn Mushroom Cow", "Mooshroom Spawn Egg"), + MOOSHROOM_SPAWN_EGG(383, 96, 22125, "Mooshroom Spawn Egg", "Spawn Mushroom Cow"), MOSSY_COBBLESTONE(48, 0, 21900, "Mossy Cobblestone", "MOSSY_COBBLESTONE"), MOSSY_COBBLESTONE_WALL(139, 1, 11536, "Mossy Cobblestone Wall"), MOSSY_STONE_BRICKS(98, 1, 16415, "Mossy Stone Bricks"), MOVING_PISTON(36, 0, 13831, "Piston Moving Piece"), - MULE_SPAWN_EGG(383, 32, 11229, "Spawn Mule", "Mule Spawn Egg"), - MUSHROOM_STEM(null, null, 16543, "Mushroom Stem"), + MULE_SPAWN_EGG(383, 32, 11229, "Mule Spawn Egg", "Spawn Mule"), + MUSHROOM_STEM(16543, "Mushroom Stem"), MUSHROOM_STEW(282, 0, 16336, "Mushroom Stew", "MUSHROOM_SOUP"), MUSIC_DISC_11(2266, 0, 27426, "11 Disc", "RECORD_11"), MUSIC_DISC_13(2256, 0, 16359, "13 Disc", "GOLD_RECORD"), @@ -540,11 +541,11 @@ public enum CMIMaterial { MUTTON(423, 0, 4792, "Raw Mutton"), MYCELIUM(110, 0, 9913, "Mycelium", "MYCEL"), NAME_TAG(421, 0, 30731, "Name Tag"), - NAUTILUS_SHELL(null, null, 19989, "Nautilus Shell"), + NAUTILUS_SHELL(19989, "Nautilus Shell"), NETHERRACK(87, 0, 23425, "Netherrack"), NETHER_BRICK(405, 0, 19996, "Nether Brick", "Nether Brick Item"), NETHER_BRICKS(112, 0, 27802, "Nether Bricks"), - NETHER_BRICK_FENCE(113, 0, 5286, "Nether Brick Fence", "NETHER_FENCE"), + NETHER_BRICK_FENCE(113, 0, 5286, Arrays.asList(CMIMaterialCriteria.seeThrow), "Nether Brick Fence", "NETHER_FENCE"), NETHER_BRICK_SLAB(44, 6, 26586, "Nether Brick Slab"), NETHER_BRICK_STAIRS(114, 0, 12085, "Nether Brick Stairs", "NETHER_BRICK_STAIRS"), NETHER_PORTAL(90, 0, 19469, "Nether Portal", "PORTAL"), @@ -556,8 +557,8 @@ public enum CMIMaterial { OAK_BOAT(333, 0, 17570, "Boat", "Oak Boat"), OAK_BUTTON(143, 0, 13510, "Oak Button", "Wooden_button"), OAK_DOOR(324, 0, 20341, "Wooden Door", "Wood Door", "Door"), - OAK_FENCE(85, 0, 6442, "Oak Fence", "FENCE"), - OAK_FENCE_GATE(107, 0, 16689, "Oak Fence Gate", "FENCE_GATE"), + OAK_FENCE(85, 0, 6442, Arrays.asList(CMIMaterialCriteria.seeThrow), "Oak Fence", "FENCE"), + OAK_FENCE_GATE(107, 0, 16689, Arrays.asList(CMIMaterialCriteria.seeThrow), "Oak Fence Gate", "FENCE_GATE"), OAK_LEAVES(18, 0, 4385, "Oak Leaves"), OAK_LOG(17, 0, 26723, "Oak Log"), OAK_PLANKS(5, 0, 14905, "Oak Wood Plank", "Oak Planks"), @@ -566,10 +567,10 @@ public enum CMIMaterial { OAK_SLAB(126, 0, 12002, "Oak Slab", "Wood step"), OAK_STAIRS(53, 0, 5449, "Oak Stairs", "WOOD_STAIRS"), OAK_TRAPDOOR(96, 0, 16927, "Oak Trapdoor", "Trapdoor"), - OAK_WOOD(null, null, 7378, "Oak Wood"), + OAK_WOOD(7378, "Oak Wood"), OBSERVER(218, 0, 10726, "Observer"), OBSIDIAN(49, 0, 32723, "Obsidian"), - OCELOT_SPAWN_EGG(383, 98, 30080, "Spawn Ocelot", "Ocelot Spawn Egg"), + OCELOT_SPAWN_EGG(383, 98, 30080, "Ocelot Spawn Egg", "Spawn Ocelot"), ORANGE_BANNER(425, 14, 4839, "Orange Banner"), ORANGE_BED(355, 1, 11194, "Orange Bed"), ORANGE_CARPET(171, 1, 24752, "Orange Carpet"), @@ -578,8 +579,8 @@ public enum CMIMaterial { ORANGE_DYE(351, 14, 13866, "Orange Dye"), ORANGE_GLAZED_TERRACOTTA(236, 0, 27451, "Orange Glazed Terracotta"), ORANGE_SHULKER_BOX(220, 0, 21673, "Orange Shulker Box"), - ORANGE_STAINED_GLASS(95, 1, 25142, "Orange Stained Glass"), - ORANGE_STAINED_GLASS_PANE(160, 1, 21089, "Orange Stained Glass Pane"), + ORANGE_STAINED_GLASS(95, 1, 25142, Arrays.asList(CMIMaterialCriteria.seeThrow), "Orange Stained Glass"), + ORANGE_STAINED_GLASS_PANE(160, 1, 21089, Arrays.asList(CMIMaterialCriteria.seeThrow), "Orange Stained Glass Pane"), ORANGE_TERRACOTTA(159, 1, 18684, "Orange Terracotta"), ORANGE_TULIP(38, 5, 26038, "Orange Tulip"), ORANGE_WALL_BANNER(117, 114, 9936, "Orange Banner"), @@ -588,11 +589,11 @@ public enum CMIMaterial { PACKED_ICE(174, 0, 28993, "Packed Ice"), PAINTING(321, 0, 23945, "Painting"), PAPER(339, 0, 9923, "Paper"), - PARROT_SPAWN_EGG(383, 105, 23614, "Spawn Parrot", "Parrot Spawn Egg"), + PARROT_SPAWN_EGG(383, 105, 23614, "Parrot Spawn Egg", "Spawn Parrot"), PEONY(175, 5, 21155, "Peony"), - PETRIFIED_OAK_SLAB(null, null, 18658, "Petrified Oak Slab"), - PHANTOM_MEMBRANE(null, null, 18398, "Phantom Membrane"), - PHANTOM_SPAWN_EGG(null, null, 24648, "Phantom Spawn Egg"), + PETRIFIED_OAK_SLAB(18658, "Petrified Oak Slab"), + PHANTOM_MEMBRANE(18398, "Phantom Membrane"), + PHANTOM_SPAWN_EGG(24648, "Phantom Spawn Egg"), PIG_SPAWN_EGG(383, 90, 22584, "Spawn Pig", "Pig Spawn Egg"), PINK_BANNER(425, 9, 19439, "Pink Banner"), PINK_BED(355, 6, 13795, "Pink Bed"), @@ -602,8 +603,8 @@ public enum CMIMaterial { PINK_DYE(351, 9, 31151, "Pink Dye"), PINK_GLAZED_TERRACOTTA(241, 0, 10260, "Pink Glazed Terracotta"), PINK_SHULKER_BOX(225, 0, 24968, "Pink Shulker Box"), - PINK_STAINED_GLASS(95, 6, 16164, "Pink Stained Glass"), - PINK_STAINED_GLASS_PANE(160, 6, 24637, "Pink Stained Glass Pane"), + PINK_STAINED_GLASS(95, 6, 16164, Arrays.asList(CMIMaterialCriteria.seeThrow), "Pink Stained Glass"), + PINK_STAINED_GLASS_PANE(160, 6, 24637, Arrays.asList(CMIMaterialCriteria.seeThrow), "Pink Stained Glass Pane"), PINK_TERRACOTTA(159, 6, 23727, "Pink Terracotta"), PINK_TULIP(38, 7, 27319, "Pink Tulip"), PINK_WALL_BANNER(117, 9, 9421, "Pink Banner"), @@ -614,7 +615,7 @@ public enum CMIMaterial { PLAYER_WALL_HEAD(144, 3, 13164, "Player Wall Head"), PODZOL(3, 2, 24068, "Podzol"), POISONOUS_POTATO(394, 0, 32640, "Poisonous Potato"), - POLAR_BEAR_SPAWN_EGG(383, 102, 17015, "Spawn Polar Bear", "Polar Bear Spawn Egg"), + POLAR_BEAR_SPAWN_EGG(383, 102, 17015, "Polar Bear Spawn Egg", "Spawn Polar Bear"), POLISHED_ANDESITE(1, 6, 8335, "Polished Andesite"), POLISHED_DIORITE(1, 4, 31615, "Polished Diorite"), POLISHED_GRANITE(1, 2, 5477, "Polished Granite"), @@ -626,77 +627,77 @@ public enum CMIMaterial { // Potions POTION(373, 0, 24020, "Potion"), - AWKWARD_POTION(373, 16, 24020, "Awkard Potion"), - THICK_POTION(373, 32, 24020, "Thick Potion"), - MUNDANE_POTION(373, 64, 24020, "Mundane Potion"), - REGENERATION_POTION(373, 8193, 24020, "Regeneration Potion"), - SWIFTNESS_POTION(373, 8194, 24020, "Swiftness Potion"), - FIRE_RESISTANCE_POTION(373, 8195, 24020, "Fire Resistance Potion"), - POISON_POTION(373, 8196, 24020, "Poison Potion"), - HEALING_POTION(373, 8197, 24020, "Healing Potion"), - NIGHT_VISION_POTION(373, 8198, 24020, "Night Vision Potion"), - WEAKNESS_POTION(373, 8200, 24020, "Weakness Potion"), - STRENGTH_POTION(373, 8201, 24020, "Strenght Potion"), - SLOWNESS_POTION(373, 8202, 24020, "Slowness Potion"), - HARMING_POTION(373, 8204, 24020, "Harming Potion"), - WATER_BREATHING_POTION(373, 8205, 24020, "Water Breathing Potion"), - INVISIBILITY_POTION(373, 8206, 24020, "Invisibility Potion"), - REGENERATION_POTION2(373, 8225, 24020, "Regeneration Potion"), - SWIFTNESS_POTION2(373, 8226, 24020, "Swiftness Potion2"), - POISON_POTION2(373, 8228, 24020, "Poison Potion2"), - HEALING_POTION2(373, 8229, 24020, "Healing Potion2"), - STRENGTH_POTION2(373, 8233, 24020, "Strength Potion2"), - LEAPING_POTION2(373, 8235, 24020, "Leaping Potion2"), - HARMING_POTION2(373, 8236, 24020, "Harming Potion2"), - REGENERATION_POTION3(373, 8257, 24020, "Regeneration Potion3"), - SWIFTNESS_POTION3(373, 8258, 24020, "Swiftness Potion3"), - FIRE_RESISTANCE_POTION3(373, 8259, 24020, "Fire Resistance potion3"), - POISON_POTION3(373, 8260, 24020, "Poison Potion3"), - NIGHT_VISION_POTION2(373, 8262, 24020, "Night Vision Potion2"), - WEAKNESS_POTION2(373, 8264, 24020, "Weakness Potion2"), - STRENGTH_POTION3(373, 8265, 24020, "Strength Potion3"), - SLOWNESS_POTION2(373, 8266, 24020, "Slowness Potion2"), - LEAPING_POTION3(373, 8267, 24020, "Leaping Potion3"), - WATER_BREATHING_POTION2(373, 8269, 24020, "Water Breathing Potion2"), - INVISIBILITY_POTION2(373, 8270, 24020, "Invisibility Potion2"), - REGENERATION_POTION4(373, 8289, 24020, "Regeneration Potion4"), - SWIFTNESS_POTION4(373, 8290, 24020, "Swiftness Potion4"), - POISON_POTION4(373, 8292, 24020, "Poison Potion4"), - STRENGTH_POTION4(373, 8297, 24020, "Strength Potion4"), - - POTTED_ACACIA_SAPLING(null, null, 14096, " Acacia Sapling"), - POTTED_ALLIUM(null, null, 13184, "Potted Allium"), - POTTED_AZURE_BLUET(null, null, 8754, "Potted Azure Bluet"), - POTTED_BIRCH_SAPLING(null, null, 32484, "Potted Birch Sapling"), - POTTED_BLUE_ORCHID(null, null, 6599, "Potted Blue Orchid"), - POTTED_BROWN_MUSHROOM(null, null, 14481, "Potted Brown Mushroom"), - POTTED_CACTUS(null, null, 8777, "Potted Cactus"), - POTTED_DANDELION(null, null, 9727, "Potted Dandelion"), - POTTED_DARK_OAK_SAPLING(null, null, 6486, "Potted Dark Oak Sapling"), - POTTED_DEAD_BUSH(null, null, 13020, "Potted Dead Bush"), - POTTED_FERN(null, null, 23315, "Potted Fern"), - POTTED_JUNGLE_SAPLING(null, null, 7525, "Potted Jungle Sapling"), - POTTED_OAK_SAPLING(null, null, 11905, "Potted Oak Sapling"), - POTTED_ORANGE_TULIP(null, null, 28807, "Potted Orange Tulip"), - POTTED_OXEYE_DAISY(null, null, 19707, "Potted Oxeye Daisy"), - POTTED_PINK_TULIP(null, null, 10089, "Potted Pink Tulip"), - POTTED_POPPY(null, null, 7457, "Potted Poppy"), - POTTED_RED_MUSHROOM(null, null, 22881, "Potted Red Mushroom"), - POTTED_RED_TULIP(null, null, 28594, "Potted Red Tulip"), - POTTED_SPRUCE_SAPLING(null, null, 29498, "Potted Spruce Sapling"), - POTTED_WHITE_TULIP(null, null, 24330, "Potted White Tulip"), +// AWKWARD_POTION(373, 16, 24020, "Awkard Potion"), +// THICK_POTION(373, 32, 24020, "Thick Potion"), +// MUNDANE_POTION(373, 64, 24020, "Mundane Potion"), +// REGENERATION_POTION(373, 8193, 24020, "Regeneration Potion"), +// SWIFTNESS_POTION(373, 8194, 24020, "Swiftness Potion"), +// FIRE_RESISTANCE_POTION(373, 8195, 24020, "Fire Resistance Potion"), +// POISON_POTION(373, 8196, 24020, "Poison Potion"), +// HEALING_POTION(373, 8197, 24020, "Healing Potion"), +// NIGHT_VISION_POTION(373, 8198, 24020, "Night Vision Potion"), +// WEAKNESS_POTION(373, 8200, 24020, "Weakness Potion"), +// STRENGTH_POTION(373, 8201, 24020, "Strenght Potion"), +// SLOWNESS_POTION(373, 8202, 24020, "Slowness Potion"), +// HARMING_POTION(373, 8204, 24020, "Harming Potion"), +// WATER_BREATHING_POTION(373, 8205, 24020, "Water Breathing Potion"), +// INVISIBILITY_POTION(373, 8206, 24020, "Invisibility Potion"), +// REGENERATION_POTION2(373, 8225, 24020, "Regeneration Potion"), +// SWIFTNESS_POTION2(373, 8226, 24020, "Swiftness Potion2"), +// POISON_POTION2(373, 8228, 24020, "Poison Potion2"), +// HEALING_POTION2(373, 8229, 24020, "Healing Potion2"), +// STRENGTH_POTION2(373, 8233, 24020, "Strength Potion2"), +// LEAPING_POTION2(373, 8235, 24020, "Leaping Potion2"), +// HARMING_POTION2(373, 8236, 24020, "Harming Potion2"), +// REGENERATION_POTION3(373, 8257, 24020, "Regeneration Potion3"), +// SWIFTNESS_POTION3(373, 8258, 24020, "Swiftness Potion3"), +// FIRE_RESISTANCE_POTION3(373, 8259, 24020, "Fire Resistance potion3"), +// POISON_POTION3(373, 8260, 24020, "Poison Potion3"), +// NIGHT_VISION_POTION2(373, 8262, 24020, "Night Vision Potion2"), +// WEAKNESS_POTION2(373, 8264, 24020, "Weakness Potion2"), +// STRENGTH_POTION3(373, 8265, 24020, "Strength Potion3"), +// SLOWNESS_POTION2(373, 8266, 24020, "Slowness Potion2"), +// LEAPING_POTION3(373, 8267, 24020, "Leaping Potion3"), +// WATER_BREATHING_POTION2(373, 8269, 24020, "Water Breathing Potion2"), +// INVISIBILITY_POTION2(373, 8270, 24020, "Invisibility Potion2"), +// REGENERATION_POTION4(373, 8289, 24020, "Regeneration Potion4"), +// SWIFTNESS_POTION4(373, 8290, 24020, "Swiftness Potion4"), +// POISON_POTION4(373, 8292, 24020, "Poison Potion4"), +// STRENGTH_POTION4(373, 8297, 24020, "Strength Potion4"), + + POTTED_ACACIA_SAPLING(14096, " Acacia Sapling"), + POTTED_ALLIUM(13184, "Potted Allium"), + POTTED_AZURE_BLUET(8754, "Potted Azure Bluet"), + POTTED_BIRCH_SAPLING(32484, "Potted Birch Sapling"), + POTTED_BLUE_ORCHID(6599, "Potted Blue Orchid"), + POTTED_BROWN_MUSHROOM(14481, "Potted Brown Mushroom"), + POTTED_CACTUS(8777, "Potted Cactus"), + POTTED_DANDELION(9727, "Potted Dandelion"), + POTTED_DARK_OAK_SAPLING(6486, "Potted Dark Oak Sapling"), + POTTED_DEAD_BUSH(13020, "Potted Dead Bush"), + POTTED_FERN(23315, "Potted Fern"), + POTTED_JUNGLE_SAPLING(7525, "Potted Jungle Sapling"), + POTTED_OAK_SAPLING(11905, "Potted Oak Sapling"), + POTTED_ORANGE_TULIP(28807, "Potted Orange Tulip"), + POTTED_OXEYE_DAISY(19707, "Potted Oxeye Daisy"), + POTTED_PINK_TULIP(10089, "Potted Pink Tulip"), + POTTED_POPPY(7457, "Potted Poppy"), + POTTED_RED_MUSHROOM(22881, "Potted Red Mushroom"), + POTTED_RED_TULIP(28594, "Potted Red Tulip"), + POTTED_SPRUCE_SAPLING(29498, "Potted Spruce Sapling"), + POTTED_WHITE_TULIP(24330, "Potted White Tulip"), POWERED_RAIL(27, 0, 11064, "Powered Rail"), PRISMARINE(168, 0, 7539, "Prismarine"), PRISMARINE_BRICKS(168, 1, 29118, "Prismarine Bricks"), - PRISMARINE_BRICK_SLAB(null, null, 26672, "Prismarine Brick Slab"), - PRISMARINE_BRICK_STAIRS(null, null, 15445, "Prismarine Brick Stairs"), + PRISMARINE_BRICK_SLAB(26672, "Prismarine Brick Slab"), + PRISMARINE_BRICK_STAIRS(15445, "Prismarine Brick Stairs"), PRISMARINE_CRYSTALS(410, 0, 31546, "Prismarine Crystals"), PRISMARINE_SHARD(409, 0, 10993, "Prismarine Shard"), - PRISMARINE_SLAB(null, null, 31323, "Prismarine Slab"), - PRISMARINE_STAIRS(null, null, 19217, "Prismarine Stairs"), + PRISMARINE_SLAB(31323, "Prismarine Slab"), + PRISMARINE_STAIRS(19217, "Prismarine Stairs"), PUFFERFISH(349, 3, 8115, "Pufferfish"), - PUFFERFISH_BUCKET(null, null, 8861, "Bucket of Pufferfish"), - PUFFERFISH_SPAWN_EGG(null, null, 24573, "Pufferfish Spawn Egg"), + PUFFERFISH_BUCKET(8861, "Bucket of Pufferfish"), + PUFFERFISH_SPAWN_EGG(24573, "Pufferfish Spawn Egg"), PUMPKIN(86, 0, 19170, "Pumpkin"), PUMPKIN_PIE(400, 0, 28725, "Pumpkin Pie"), PUMPKIN_SEEDS(361, 0, 28985, "Pumpkin Seeds"), @@ -709,8 +710,8 @@ public enum CMIMaterial { PURPLE_DYE(351, 5, 6347, "Purple Dye"), PURPLE_GLAZED_TERRACOTTA(245, 0, 4818, "Purple Glazed Terracotta"), PURPLE_SHULKER_BOX(229, 0, 10373, "Purple Shulker Box"), - PURPLE_STAINED_GLASS(95, 10, 21845, "Purple Stained Glass"), - PURPLE_STAINED_GLASS_PANE(160, 10, 10948, "Purple Stained Glass Pane"), + PURPLE_STAINED_GLASS(95, 10, 21845, Arrays.asList(CMIMaterialCriteria.seeThrow), "Purple Stained Glass"), + PURPLE_STAINED_GLASS_PANE(160, 10, 10948, Arrays.asList(CMIMaterialCriteria.seeThrow), "Purple Stained Glass Pane"), PURPLE_TERRACOTTA(159, 10, 10387, "Purple Terracotta"), PURPLE_WALL_BANNER(117, 5, 14298, "Purple Banner"), PURPLE_WOOL(35, 10, 11922, "Purple Wool"), @@ -726,7 +727,7 @@ public enum CMIMaterial { RABBIT(411, 0, 23068, "Raw Rabbit"), RABBIT_FOOT(414, 0, 13864, "Rabbit's Foot"), RABBIT_HIDE(415, 0, 12467, "Rabbit Hide"), - RABBIT_SPAWN_EGG(383, 101, 26496, "Spawn Rabbit", "Rabbit Spawn Egg"), + RABBIT_SPAWN_EGG(383, 101, 26496, "Rabbit Spawn Egg", "Spawn Rabbit"), RABBIT_STEW(413, 0, 10611, "Rabbit Stew"), RAIL(66, 0, 13285, "Rail", "RAILS"), REDSTONE(331, 0, 11233, "Redstone", "Redstone Dust"), @@ -750,48 +751,48 @@ public enum CMIMaterial { RED_SANDSTONE_SLAB(182, 0, 17550, "Red Sandstone Slab", "STONE_SLAB2"), RED_SANDSTONE_STAIRS(180, 0, 25466, "Red Sandstone Stairs"), RED_SHULKER_BOX(233, 0, 32448, "Red Shulker Box"), - RED_STAINED_GLASS(95, 14, 9717, "Red Stained Glass"), - RED_STAINED_GLASS_PANE(160, 14, 8630, "Red Stained Glass Pane"), + RED_STAINED_GLASS(95, 14, 9717, Arrays.asList(CMIMaterialCriteria.seeThrow), "Red Stained Glass"), + RED_STAINED_GLASS_PANE(160, 14, 8630, Arrays.asList(CMIMaterialCriteria.seeThrow), "Red Stained Glass Pane"), RED_TERRACOTTA(159, 14, 5086, "Red Terracotta"), RED_TULIP(38, 4, 16781, "Red Tulip"), RED_WALL_BANNER(117, 1, 4378, "Red Banner"), RED_WOOL(35, 14, 11621, "Red Wool"), REPEATER(356, 0, 28823, "Redstone Repeater", "Diode"), - REPEATING_COMMAND_BLOCK(null, null, 12405, "Repeating Command Block"), + REPEATING_COMMAND_BLOCK(12405, "Repeating Command Block"), ROSE_BUSH(175, 4, 6080, "Rose Bush"), ROSE_RED(351, 1, 15694, "Rose Red"), ROTTEN_FLESH(367, 0, 21591, "Rotten Flesh"), SADDLE(329, 0, 30206, "Saddle"), SALMON(349, 1, 18516, "Raw Salmon"), - SALMON_BUCKET(null, null, 31427, "Bucket of Salmon"), - SALMON_SPAWN_EGG(null, null, 18739, "Salmon Spawn Egg"), + SALMON_BUCKET(31427, "Bucket of Salmon"), + SALMON_SPAWN_EGG(18739, "Salmon Spawn Egg"), SAND(12, 0, 11542, "Sand"), SANDSTONE(24, 0, 13141, "Sandstone"), SANDSTONE_SLAB(44, 1, 29830, "Sandstone Slab"), SANDSTONE_STAIRS(128, 0, 18474, "Sandstone Stairs"), - SCUTE(null, null, 11914, "Scute"), - SEAGRASS(null, null, 23942, "Seagrass"), + SCUTE(11914, "Scute"), + SEAGRASS(23942, "Seagrass"), SEA_LANTERN(169, 0, 16984, "Sea Lantern"), - SEA_PICKLE(null, null, 19562, "Sea Pickle"), + SEA_PICKLE(19562, "Sea Pickle"), SHEARS(359, 0, 27971, "Shears"), - SHEEP_SPAWN_EGG(383, 91, 24488, "Spawn Sheep", "Sheep Spawn Egg"), + SHEEP_SPAWN_EGG(383, 91, 24488, "Sheep Spawn Egg", "Spawn Sheep"), SHIELD(442, 0, 29943, "Shield"), SHULKER_BOX(229, 0, 7776, "Shulker Box"), SHULKER_SHELL(450, 0, 27848, "Shulker Shell"), - SHULKER_SPAWN_EGG(383, 69, 31848, "Spawn Shulker", "Shulker Spawn Egg"), + SHULKER_SPAWN_EGG(383, 69, 31848, "Shulker Spawn Egg", "Spawn Shulker"), SIGN(323, 0, 16918, "Sign"), - SILVERFISH_SPAWN_EGG(383, 60, 14537, "Spawn Silverfish", "Silverfish Spawn Egg"), - SKELETON_HORSE_SPAWN_EGG(383, 28, 21356, "Spawn Skeleton Horse", "Skeleton Horse Spawn Egg"), + SILVERFISH_SPAWN_EGG(383, 60, 14537, "Silverfish Spawn Egg", "Spawn Silverfish"), + SKELETON_HORSE_SPAWN_EGG(383, 28, 21356, "Skeleton Horse Spawn Egg", "Spawn Skeleton Horse"), SKELETON_SKULL(397, 0, 13270, "Mob Head (Skeleton)", "Skeleton Skull"), - SKELETON_SPAWN_EGG(383, 51, 15261, "Spawn Skeleton", "Skeleton Spawn Egg"), + SKELETON_SPAWN_EGG(383, 51, 15261, "Skeleton Spawn Egg", "Spawn Skeleton"), SKELETON_WALL_SKULL(144, 0, 31650, "Skeleton Wall Skull"), SLIME_BALL(341, 0, 5242, "Slimeball"), SLIME_BLOCK(165, 0, 31892, "Slime Block"), - SLIME_SPAWN_EGG(383, 55, 6550, "Spawn Slime", "Slime Spawn Egg"), - SMOOTH_QUARTZ(null, null, 14415, "Smooth Quartz"), + SLIME_SPAWN_EGG(383, 55, 6550, "Slime Spawn Egg", "Spawn Slime"), + SMOOTH_QUARTZ(14415, "Smooth Quartz"), SMOOTH_RED_SANDSTONE(179, 2, 25180, "Smooth Red Sandstone"), SMOOTH_SANDSTONE(24, 2, 30039, "Smooth Sandstone"), - SMOOTH_STONE(null, null, 21910, "Smooth Stone"), + SMOOTH_STONE(21910, "Smooth Stone"), SNOW(78, 0, 14146, "Snow"), SNOWBALL(332, 0, 19487, "Snowball"), SNOW_BLOCK(80, 0, 19913, "Snow Block"), @@ -799,24 +800,24 @@ public enum CMIMaterial { SPAWNER(52, 90, 7018, "Spawner", "MOB_SPAWNER"), SPECTRAL_ARROW(439, 0, 4568, "Spectral Arrow"), SPIDER_EYE(375, 0, 9318, "Spider Eye"), - SPIDER_SPAWN_EGG(383, 52, 14984, "Spawn Spider", "Spider Spawn Egg"), + SPIDER_SPAWN_EGG(383, 52, 14984, "Spider Spawn Egg", "Spawn Spider"), SPLASH_POTION(438, 0, 30248, "Splash Potion", "SPLASH_POTION"), SPONGE(19, 0, 15860, "Sponge", "SPONGE"), SPRUCE_BOAT(444, 0, 9606, "Spruce Boat", "BOAT_SPRUCE"), - SPRUCE_BUTTON(null, null, 23281, "Spruce Button"), + SPRUCE_BUTTON(23281, "Spruce Button"), SPRUCE_DOOR(427, 0, 10642, "Spruce Door", "SPRUCE_DOOR_ITEM"), - SPRUCE_FENCE(188, 0, 25416, "Spruce Fence"), - SPRUCE_FENCE_GATE(183, 0, 26423, "Spruce Fence Gate"), + SPRUCE_FENCE(188, 0, 25416, Arrays.asList(CMIMaterialCriteria.seeThrow), "Spruce Fence"), + SPRUCE_FENCE_GATE(183, 0, 26423, Arrays.asList(CMIMaterialCriteria.seeThrow), "Spruce Fence Gate"), SPRUCE_LEAVES(18, 1, 20039, "Spruce Leaves"), SPRUCE_LOG(17, 1, 9726, "Spruce Log"), SPRUCE_PLANKS(5, 1, 14593, "Spruce Wood Plank", "Spruce Planks"), - SPRUCE_PRESSURE_PLATE(null, null, 15932, "Spruce Pressure Plate"), + SPRUCE_PRESSURE_PLATE(15932, "Spruce Pressure Plate"), SPRUCE_SAPLING(6, 1, 19874, "Spruce Sapling"), SPRUCE_SLAB(126, 1, 4348, "Spruce Slab"), SPRUCE_STAIRS(134, 0, 11192, "Spruce Wood Stairs", "Spruce Stairs"), - SPRUCE_TRAPDOOR(null, null, 10289, "Spruce Trapdoor"), - SPRUCE_WOOD(null, null, 32328, "Spruce Wood"), - SQUID_SPAWN_EGG(383, 94, 10682, "Spawn Squid", "Squid Spawn Egg"), + SPRUCE_TRAPDOOR(10289, "Spruce Trapdoor"), + SPRUCE_WOOD(32328, "Spruce Wood"), + SQUID_SPAWN_EGG(383, 94, 10682, "Squid Spawn Egg", "Spawn Squid"), STICK(280, 0, 9773, "Stick"), STICKY_PISTON(29, 0, 18127, "Sticky Piston", "PISTON_STICKY_BASE"), STONE(1, 0, 22948, "Stone"), @@ -831,52 +832,52 @@ public enum CMIMaterial { STONE_SHOVEL(273, 0, 9520, "Stone Shovel", "STONE_SPADE"), STONE_SLAB(44, 0, 19838, "Stone Slab"), STONE_SWORD(272, 0, 25084, "Stone Sword"), - STRAY_SPAWN_EGG(383, 6, 30153, "Spawn Stray", "Stray Spawn Egg"), + STRAY_SPAWN_EGG(383, 6, 30153, "Stray Spawn Egg", "Spawn Stray"), STRING(287, 0, 12806, "String"), - STRIPPED_ACACIA_LOG(null, null, 18167, "Stripped Acacia Log"), - STRIPPED_ACACIA_WOOD(null, null, 27193, "Stripped Acacia Wood"), - STRIPPED_BIRCH_LOG(null, null, 8838, "Stripped Birch Log"), - STRIPPED_BIRCH_WOOD(null, null, 22350, "Stripped Birch Wood"), - STRIPPED_DARK_OAK_LOG(null, null, 6492, "Stripped Dark Oak Log"), - STRIPPED_DARK_OAK_WOOD(null, null, 16000, "Stripped Dark Oak Wood"), - STRIPPED_JUNGLE_LOG(null, null, 15476, "Stripped Jungle Log"), - STRIPPED_JUNGLE_WOOD(null, null, 30315, "Stripped Jungle Wood"), - STRIPPED_OAK_LOG(null, null, 20523, "Stripped Oak Log"), - STRIPPED_OAK_WOOD(null, null, 31455, "Stripped Oak Wood"), - STRIPPED_SPRUCE_LOG(null, null, 6140, "Stripped Spruce Log"), - STRIPPED_SPRUCE_WOOD(null, null, 6467, "Stripped Spruce Wood"), + STRIPPED_ACACIA_LOG(18167, "Stripped Acacia Log"), + STRIPPED_ACACIA_WOOD(27193, "Stripped Acacia Wood"), + STRIPPED_BIRCH_LOG(8838, "Stripped Birch Log"), + STRIPPED_BIRCH_WOOD(22350, "Stripped Birch Wood"), + STRIPPED_DARK_OAK_LOG(6492, "Stripped Dark Oak Log"), + STRIPPED_DARK_OAK_WOOD(16000, "Stripped Dark Oak Wood"), + STRIPPED_JUNGLE_LOG(15476, "Stripped Jungle Log"), + STRIPPED_JUNGLE_WOOD(30315, "Stripped Jungle Wood"), + STRIPPED_OAK_LOG(20523, "Stripped Oak Log"), + STRIPPED_OAK_WOOD(31455, "Stripped Oak Wood"), + STRIPPED_SPRUCE_LOG(6140, "Stripped Spruce Log"), + STRIPPED_SPRUCE_WOOD(6467, "Stripped Spruce Wood"), STRUCTURE_BLOCK(255, 0, 26831, "Structure Block"), STRUCTURE_VOID(217, 0, 30806, "Structure Void"), SUGAR(353, 0, 30638, "Sugar"), SUGAR_CANE(338, 0, 7726, "Sugar Canes", "Sugar Cane"), SUNFLOWER(175, 0, 7408, "Sunflower"), TALL_GRASS(31, 0, 21559, "Tall Grass"), - TALL_SEAGRASS(null, null, 27189, "Tall Seagrass"), + TALL_SEAGRASS(27189, "Tall Seagrass"), TERRACOTTA(172, 0, 16544, "Terracotta", "HARD_CLAY"), TIPPED_ARROW(440, 0, 25164, "Tipped Arrow"), TNT(46, 0, 7896, "TNT", "TNT"), TNT_MINECART(407, 0, 4277, "Minecart with TNT", "explosiveminecart"), TORCH(50, 0, 6063, "Torch"), - TOTEM_OF_UNDYING(449, 0, 10139, "Totem Of Undying"), + TOTEM_OF_UNDYING(449, 0, 10139, "Totem Of Undying", "Totem"), TRAPPED_CHEST(146, 0, 18970, "Trapped Chest"), - TRIDENT(null, null, 7534, "Trident"), + TRIDENT(7534, "Trident"), TRIPWIRE(132, 0, 8810, "Tripwire"), TRIPWIRE_HOOK(131, 0, 8130, "Tripwire Hook"), TROPICAL_FISH(349, 2, 24879, "Tropical Fish"), - TROPICAL_FISH_BUCKET(null, null, 29995, "Bucket of Tropical Fish"), - TROPICAL_FISH_SPAWN_EGG(null, null, 19713, "Tropical Fish Spawn Egg"), - TUBE_CORAL(null, null, 23048, "Tube Coral"), - TUBE_CORAL_BLOCK(null, null, 23723, "Tube Coral Block"), - TUBE_CORAL_FAN(null, null, 19929, "Tube Coral Fan"), - TUBE_CORAL_WALL_FAN(null, null, 25282, "Tube Coral Wall Fan"), - TURTLE_EGG(null, null, 32101, "Turtle Egg"), - TURTLE_HELMET(null, null, 30120, "Turtle Shell"), - TURTLE_SPAWN_EGG(null, null, 17324, "Turtle Spawn Egg"), - VEX_SPAWN_EGG(383, 35, 27751, "Spawn Vex", "Vex Spawn Egg"), - VILLAGER_SPAWN_EGG(383, 120, 30348, "Spawn Villager", "Villager Spawn Egg"), - VINDICATOR_SPAWN_EGG(383, 36, 25324, "Spawn Vindicator", "Vindicator Spawn Egg"), - VINE(106, 0, 14564, "Vines", "VINE"), - VOID_AIR(null, null, 13668, "Void Air"), + TROPICAL_FISH_BUCKET(29995, "Bucket of Tropical Fish"), + TROPICAL_FISH_SPAWN_EGG(19713, "Tropical Fish Spawn Egg"), + TUBE_CORAL(23048, "Tube Coral"), + TUBE_CORAL_BLOCK(23723, "Tube Coral Block"), + TUBE_CORAL_FAN(19929, "Tube Coral Fan"), + TUBE_CORAL_WALL_FAN(25282, "Tube Coral Wall Fan"), + TURTLE_EGG(32101, "Turtle Egg"), + TURTLE_HELMET(30120, "Turtle Shell"), + TURTLE_SPAWN_EGG(17324, "Turtle Spawn Egg"), + VEX_SPAWN_EGG(383, 35, 27751, "Vex Spawn Egg", "Spawn Vex"), + VILLAGER_SPAWN_EGG(383, 120, 30348, "Villager Spawn Egg", "Spawn Villager"), + VINDICATOR_SPAWN_EGG(383, 36, 25324, "Vindicator Spawn Egg", "Spawn Vindicator"), + VINE(106, 0, 14564, Arrays.asList(CMIMaterialCriteria.seeThrow), "Vines", "VINE"), + VOID_AIR(13668, "Void Air"), WALL_SIGN(68, 0, 10644, "Wall Sign"), WALL_TORCH(50, 0, 25890, "Wall Torch"), WATER(8, 0, 24998, "Flowing Water"), @@ -891,17 +892,17 @@ public enum CMIMaterial { WHITE_CONCRETE_POWDER(252, 0, 10363, "White Concrete Powder"), WHITE_GLAZED_TERRACOTTA(235, 0, 11326, "White Glazed Terracotta"), WHITE_SHULKER_BOX(219, 0, 31750, "White Shulker Box"), - WHITE_STAINED_GLASS(95, 0, 31190, "White Stained Glass"), - WHITE_STAINED_GLASS_PANE(160, 0, 10557, "White Stained Glass Pane"), + WHITE_STAINED_GLASS(95, 0, 31190, Arrays.asList(CMIMaterialCriteria.seeThrow), "White Stained Glass"), + WHITE_STAINED_GLASS_PANE(160, 0, 10557, Arrays.asList(CMIMaterialCriteria.seeThrow), "White Stained Glass Pane"), WHITE_TERRACOTTA(159, 0, 20975, "White Terracotta"), WHITE_TULIP(38, 6, 9742, "White Tulip"), WHITE_WALL_BANNER(425, 15, 15967, "White Banner"), WHITE_WOOL(35, 0, 8624, "White Wool", "Wool"), - WITCH_SPAWN_EGG(383, 66, 11837, "Spawn Witch", "Witch Spawn Egg"), + WITCH_SPAWN_EGG(383, 66, 11837, "Witch Spawn Egg", "Spawn Witch"), WITHER_SKELETON_SKULL(397, 1, 31487, "Mob Head (Wither Skeleton)", "Wither Skeleton Skull"), - WITHER_SKELETON_SPAWN_EGG(383, 5, 10073, "Spawn Wither Skeleton", "Wither Skeleton Spawn Egg"), + WITHER_SKELETON_SPAWN_EGG(383, 5, 10073, "Wither Skeleton Spawn Egg", "Spawn Wither Skeleton"), WITHER_SKELETON_WALL_SKULL(144, 1, 9326, "Wither Skeleton Wall Skull"), - WOLF_SPAWN_EGG(383, 95, 21692, "Spawn Wolf", "Wolf Spawn Egg"), + WOLF_SPAWN_EGG(383, 95, 21692, "Wolf Spawn Egg", "Spawn Wolf"), WOODEN_AXE(271, 0, 6292, "Wooden Axe", "Wood Axe"), WOODEN_HOE(290, 0, 16043, "Wooden Hoe", "Wood Hoe"), WOODEN_PICKAXE(270, 0, 12792, "Wooden Pickaxe", "WOOD_PICKAXE"), @@ -916,122 +917,122 @@ public enum CMIMaterial { YELLOW_CONCRETE_POWDER(252, 4, 10655, "Yellow Concrete Powder"), YELLOW_GLAZED_TERRACOTTA(239, 0, 10914, "Yellow Glazed Terracotta"), YELLOW_SHULKER_BOX(223, 0, 28700, "Yellow Shulker Box"), - YELLOW_STAINED_GLASS(95, 4, 12182, "Yellow Stained Glass"), - YELLOW_STAINED_GLASS_PANE(160, 4, 20298, "Yellow Stained Glass Pane"), + YELLOW_STAINED_GLASS(95, 4, 12182, Arrays.asList(CMIMaterialCriteria.seeThrow), "Yellow Stained Glass"), + YELLOW_STAINED_GLASS_PANE(160, 4, 20298, Arrays.asList(CMIMaterialCriteria.seeThrow), "Yellow Stained Glass Pane"), YELLOW_TERRACOTTA(159, 4, 32129, "Yellow Terracotta"), YELLOW_WALL_BANNER(425, 11, 32004, "Yellow Banner"), YELLOW_WOOL(35, 4, 29507, "Yellow Wool"), ZOMBIE_HEAD(397, 2, 9304, "Mob Head (Zombie)", "Zombie Head"), - ZOMBIE_HORSE_SPAWN_EGG(383, 29, 4275, "Spawn Zombie Horse", "Zombie Horse Spawn Egg"), - ZOMBIE_PIGMAN_SPAWN_EGG(383, 57, 11531, "Spawn Zombie Pigman", "Zombie Pigman Spawn Egg"), - ZOMBIE_SPAWN_EGG(383, 54, 5814, "Spawn Zombie", "Zombie Spawn Egg"), - ZOMBIE_VILLAGER_SPAWN_EGG(383, 27, 10311, "Spawn Zombie Villager", "Zombie Villager Spawn Egg"), + ZOMBIE_HORSE_SPAWN_EGG(383, 29, 4275, "Zombie Horse Spawn Egg", "Spawn Zombie Horse"), + ZOMBIE_PIGMAN_SPAWN_EGG(383, 57, 11531, "Zombie Pigman Spawn Egg", "Spawn Zombie Pigman"), + ZOMBIE_SPAWN_EGG(383, 54, 5814, "Zombie Spawn Egg", "Spawn Zombie"), + ZOMBIE_VILLAGER_SPAWN_EGG(383, 27, 10311, "Zombie Villager Spawn Egg", "Spawn Zombie Villager"), ZOMBIE_WALL_HEAD(144, 2, 16296, "Zombie Wall Head"), //1.14 - ACACIA_SIGN(null, null, 29808, "Acacia Sign"), - ACACIA_WALL_SIGN(null, null, 20316, "Acacia Wall Sign"), - ANDESITE_SLAB(null, null, 32124, "Andesite Slab"), - ANDESITE_STAIRS(null, null, 17747, "Andesite Stairs"), - ANDESITE_WALL(null, null, 14938, "Andesite Wall"), - BAMBOO(null, null, 18728, "Bamboo"), - BAMBOO_SAPLING(null, null, 8478, "Bamboo Sapling"), - BARREL(null, null, 22396, "Barrel"), - BELL(null, null, 20000, "Bell"), - BIRCH_SIGN(null, null, 11351, "Birch Sign"), - BIRCH_WALL_SIGN(null, null, 9887, "Birch Wall Sign"), - BLACK_DYE(null, null, 6202, "Black Dye"), - BLAST_FURNACE(null, null, 31157, "Blast Furnace"), - BLUE_DYE(null, null, 11588, "Blue Dye"), - BRICK_WALL(null, null, 18995, "Brick Wall"), - BROWN_DYE(null, null, 7648, "Brown Dye"), - CAMPFIRE(null, null, 8488, "Campfire"), - CARTOGRAPHY_TABLE(null, null, 28529, "Cartography Table"), - CAT_SPAWN_EGG(null, null, 29583, "Cat Spawn Egg"), - CORNFLOWER(null, null, 15405, "Cornflower"), - CREEPER_BANNER_PATTERN(null, null, 15774, "Banner Pattern"), - CROSSBOW(null, null, 4340, "Crossbow"), - CUT_RED_SANDSTONE_SLAB(null, null, -11, "Cut Red Sandstone Slab"), - CUT_SANDSTONE_SLAB(null, null, -10, "Cut Sandstone Slab"), - DARK_OAK_SIGN(null, null, 15127, "Dark Oak Sign"), - DARK_OAK_WALL_SIGN(null, null, 9508, "Dark Oak Wall Sign"), - DIORITE_SLAB(null, null, 10715, "Diorite Slab"), - DIORITE_STAIRS(null, null, 13134, "Diorite Stairs"), - DIORITE_WALL(null, null, 17412, "Diorite Wall"), - END_STONE_BRICK_SLAB(null, null, 23239, "End Stone Brick Slab"), - END_STONE_BRICK_STAIRS(null, null, 28831, "End Stone Brick Stairs"), - END_STONE_BRICK_WALL(null, null, 27225, "End Stone Brick Wall"), - FLETCHING_TABLE(null, null, 30838, "Fletching Table"), - FLOWER_BANNER_PATTERN(null, null, 5762, "Banner Pattern"), - FOX_SPAWN_EGG(null, null, -1, "Fox Spawn Egg"), - GLOBE_BANNER_PATTERN(null, null, -99, "Banner Pattern"), - GRANITE_SLAB(null, null, 25898, "Granite Slab"), - GRANITE_STAIRS(null, null, 21840, "Granite Stairs"), - GRANITE_WALL(null, null, 23279, "Granite Wall"), - GREEN_DYE(null, null, 23215, "Green Dye"), - GRINDSTONE(null, null, 26260, "Grindstone"), - JIGSAW(null, null, 17398, "Jigsaw Block"), - JUNGLE_SIGN(null, null, 24717, "Jungle Sign"), - JUNGLE_WALL_SIGN(null, null, 29629, "Jungle Wall Sign"), - LANTERN(null, null, 5992, "Lantern"), - LEATHER_HORSE_ARMOR(null, null, -2, "Leather Horse Armor"), - LECTERN(null, null, 23490, "Lectern"), - LILY_OF_THE_VALLEY(null, null, 7185, "Lily of the Valley"), - LOOM(null, null, 14276, "Loom"), - MOJANG_BANNER_PATTERN(null, null, 11903, "Banner Pattern"), - MOSSY_COBBLESTONE_SLAB(null, null, 12139, "Mossy Cobblestone Slab"), - MOSSY_COBBLESTONE_STAIRS(null, null, 29210, "Mossy Cobblestone Stairs"), - MOSSY_STONE_BRICK_SLAB(null, null, 14002, "Mossy Stone Brick Slab"), - MOSSY_STONE_BRICK_STAIRS(null, null, 27578, "Mossy Stone Brick Stairs"), - MOSSY_STONE_BRICK_WALL(null, null, 18259, "Mossy Stone Brick Wall"), - NETHER_BRICK_WALL(null, null, 10398, "Nether Brick Wall"), - OAK_SIGN(null, null, 8192, "Oak Sign"), - OAK_WALL_SIGN(null, null, 12984, "Oak Wall Sign"), - PANDA_SPAWN_EGG(null, null, 23759, "Panda Spawn Egg"), - PILLAGER_SPAWN_EGG(null, null, 28659, "Pillager Spawn Egg"), - POLISHED_ANDESITE_STAIRS(null, null, 7573, "Polished Andesite Stairs"), - POLISHED_ANDESITE_SLAB(null, null, 0, "Polished Andesite Slab"), - POLISHED_DIORITE_SLAB(null, null, 18303, "Polished Diorite Slab"), - POLISHED_DIORITE_STAIRS(null, null, 4625, "Polished Diorite Stairs"), - POLISHED_GRANITE_SLAB(null, null, 4521, "Polished Granite Slab"), - POLISHED_GRANITE_STAIRS(null, null, 29588, "Polished Granite Stairs"), - POTTED_BAMBOO(null, null, 22542, "Potted Bamboo"), - POTTED_CORNFLOWER(null, null, 28917, "Potted CornFlower"), - POTTED_LILY_OF_THE_VALLEY(null, null, 9364, "Potted Lily Of The Valley"), - POTTED_WITHER_ROSE(null, null, 26876, "Potted Wither Rose"), - PRISMARINE_WALL(null, null, 18184, "Prismarine Wall"), - RAVAGER_SPAWN_EGG(null, null, 31284, "Ravager Spawn Egg"), - RED_DYE(null, null, 5728, "Red Dye"), - RED_NETHER_BRICK_SLAB(null, null, 12462, "Red Nether Brick Slab"), - RED_NETHER_BRICK_STAIRS(null, null, 26374, "Red Nether Brick Stairs"), - RED_NETHER_BRICK_WALL(null, null, 4580, "Red Nether Brick Wall"), - RED_SANDSTONE_WALL(null, null, 4753, "Red Sandstone Wall"), - SANDSTONE_WALL(null, null, 18470, "Sandstone Wall"), - SCAFFOLDING(null, null, 15757, "Scaffolding"), - SKULL_BANNER_PATTERN(null, null, 7680, "Banner Pattern"), - SMITHING_TABLE(null, null, 9082, "Smithing Table"), - SMOKER(null, null, 24781, "Smoker"), - SMOOTH_QUARTZ_SLAB(null, null, 26543, "Smooth Quartz Slab"), - SMOOTH_QUARTZ_STAIRS(null, null, 19560, "Smooth Quartz Stairs"), - SMOOTH_RED_SANDSTONE_SLAB(null, null, 16304, "Smooth Red Sandstone Slab"), - SMOOTH_RED_SANDSTONE_STAIRS(null, null, 17561, "Smooth Red Sandstone Stairs"), - SMOOTH_SANDSTONE_SLAB(null, null, 9030, "Smooth Sandstone Slab"), - SMOOTH_SANDSTONE_STAIRS(null, null, 21183, "Smooth Sandstone Stairs"), - SMOOTH_STONE_SLAB(null, null, 24129, "Smooth Stone Slab"), - SPRUCE_SIGN(null, null, 21502, "Spruce Sign"), - SPRUCE_WALL_SIGN(null, null, 7352, "Spruce Wall Sign"), - STONECUTTER(null, null, 25170, "Stonecutter"), - STONE_BRICK_WALL(null, null, 29073, "Stone Brick Wall"), - STONE_STAIRS(null, null, 23784, "Stone Stairs"), - SUSPICIOUS_STEW(null, null, 8173, "Suspicious Stew"), - SWEET_BERRIES(null, null, 19747, "Sweet Berries"), - SWEET_BERRY_BUSH(null, null, 11958, "Sweet Berry Bush"), - TRADER_LLAMA_SPAWN_EGG(null, null, 13512, "Trader Llama Spawn Egg"), - WANDERING_TRADER_SPAWN_EGG(null, null, 12312, "Wandering Trader Spawn Egg"), - WHITE_DYE(null, null, 10758, "White Dye"), - WITHER_ROSE(null, null, 8619, "Wither Rose"), - YELLOW_DYE(null, null, 5952, "Yellow Dye"), - COMPOSTER(null, null, -4, "Composter"), + ACACIA_SIGN(29808, "Acacia Sign"), + ACACIA_WALL_SIGN(20316, "Acacia Wall Sign"), + ANDESITE_SLAB(32124, "Andesite Slab"), + ANDESITE_STAIRS(17747, "Andesite Stairs"), + ANDESITE_WALL(14938, "Andesite Wall"), + BAMBOO(18728, "Bamboo"), + BAMBOO_SAPLING(8478, "Bamboo Sapling"), + BARREL(22396, "Barrel"), + BELL(20000, "Bell"), + BIRCH_SIGN(11351, "Birch Sign"), + BIRCH_WALL_SIGN(9887, "Birch Wall Sign"), + BLACK_DYE(6202, "Black Dye"), + BLAST_FURNACE(31157, "Blast Furnace"), + BLUE_DYE(11588, "Blue Dye"), + BRICK_WALL(18995, "Brick Wall"), + BROWN_DYE(7648, "Brown Dye"), + CAMPFIRE(8488, "Campfire"), + CARTOGRAPHY_TABLE(28529, "Cartography Table"), + CAT_SPAWN_EGG(29583, "Cat Spawn Egg"), + CORNFLOWER(15405, "Cornflower"), + CREEPER_BANNER_PATTERN(15774, "Banner Pattern"), + CROSSBOW(4340, "Crossbow"), + CUT_RED_SANDSTONE_SLAB(-11, "Cut Red Sandstone Slab"), + CUT_SANDSTONE_SLAB(-10, "Cut Sandstone Slab"), + DARK_OAK_SIGN(15127, "Dark Oak Sign"), + DARK_OAK_WALL_SIGN(9508, "Dark Oak Wall Sign"), + DIORITE_SLAB(10715, "Diorite Slab"), + DIORITE_STAIRS(13134, "Diorite Stairs"), + DIORITE_WALL(17412, "Diorite Wall"), + END_STONE_BRICK_SLAB(23239, "End Stone Brick Slab"), + END_STONE_BRICK_STAIRS(28831, "End Stone Brick Stairs"), + END_STONE_BRICK_WALL(27225, "End Stone Brick Wall"), + FLETCHING_TABLE(30838, "Fletching Table"), + FLOWER_BANNER_PATTERN(5762, "Banner Pattern"), + FOX_SPAWN_EGG(-1, "Fox Spawn Egg"), + GLOBE_BANNER_PATTERN(-99, "Banner Pattern"), + GRANITE_SLAB(25898, "Granite Slab"), + GRANITE_STAIRS(21840, "Granite Stairs"), + GRANITE_WALL(23279, "Granite Wall"), + GREEN_DYE(23215, "Green Dye"), + GRINDSTONE(26260, "Grindstone"), + JIGSAW(17398, "Jigsaw Block"), + JUNGLE_SIGN(24717, "Jungle Sign"), + JUNGLE_WALL_SIGN(29629, "Jungle Wall Sign"), + LANTERN(5992, "Lantern"), + LEATHER_HORSE_ARMOR(-2, "Leather Horse Armor"), + LECTERN(23490, "Lectern"), + LILY_OF_THE_VALLEY(7185, "Lily of the Valley"), + LOOM(14276, "Loom"), + MOJANG_BANNER_PATTERN(11903, "Banner Pattern"), + MOSSY_COBBLESTONE_SLAB(12139, "Mossy Cobblestone Slab"), + MOSSY_COBBLESTONE_STAIRS(29210, "Mossy Cobblestone Stairs"), + MOSSY_STONE_BRICK_SLAB(14002, "Mossy Stone Brick Slab"), + MOSSY_STONE_BRICK_STAIRS(27578, "Mossy Stone Brick Stairs"), + MOSSY_STONE_BRICK_WALL(18259, "Mossy Stone Brick Wall"), + NETHER_BRICK_WALL(10398, "Nether Brick Wall"), + OAK_SIGN(8192, "Oak Sign"), + OAK_WALL_SIGN(12984, "Oak Wall Sign"), + PANDA_SPAWN_EGG(23759, "Panda Spawn Egg"), + PILLAGER_SPAWN_EGG(28659, "Pillager Spawn Egg"), + POLISHED_ANDESITE_STAIRS(7573, "Polished Andesite Stairs"), + POLISHED_ANDESITE_SLAB(0, "Polished Andesite Slab"), + POLISHED_DIORITE_SLAB(18303, "Polished Diorite Slab"), + POLISHED_DIORITE_STAIRS(4625, "Polished Diorite Stairs"), + POLISHED_GRANITE_SLAB(4521, "Polished Granite Slab"), + POLISHED_GRANITE_STAIRS(29588, "Polished Granite Stairs"), + POTTED_BAMBOO(22542, "Potted Bamboo"), + POTTED_CORNFLOWER(28917, "Potted CornFlower"), + POTTED_LILY_OF_THE_VALLEY(9364, "Potted Lily Of The Valley"), + POTTED_WITHER_ROSE(26876, "Potted Wither Rose"), + PRISMARINE_WALL(18184, "Prismarine Wall"), + RAVAGER_SPAWN_EGG(31284, "Ravager Spawn Egg"), + RED_DYE(5728, "Red Dye"), + RED_NETHER_BRICK_SLAB(12462, "Red Nether Brick Slab"), + RED_NETHER_BRICK_STAIRS(26374, "Red Nether Brick Stairs"), + RED_NETHER_BRICK_WALL(4580, "Red Nether Brick Wall"), + RED_SANDSTONE_WALL(4753, "Red Sandstone Wall"), + SANDSTONE_WALL(18470, "Sandstone Wall"), + SCAFFOLDING(15757, "Scaffolding"), + SKULL_BANNER_PATTERN(7680, "Banner Pattern"), + SMITHING_TABLE(9082, "Smithing Table"), + SMOKER(24781, "Smoker"), + SMOOTH_QUARTZ_SLAB(26543, "Smooth Quartz Slab"), + SMOOTH_QUARTZ_STAIRS(19560, "Smooth Quartz Stairs"), + SMOOTH_RED_SANDSTONE_SLAB(16304, "Smooth Red Sandstone Slab"), + SMOOTH_RED_SANDSTONE_STAIRS(17561, "Smooth Red Sandstone Stairs"), + SMOOTH_SANDSTONE_SLAB(9030, "Smooth Sandstone Slab"), + SMOOTH_SANDSTONE_STAIRS(21183, "Smooth Sandstone Stairs"), + SMOOTH_STONE_SLAB(24129, "Smooth Stone Slab"), + SPRUCE_SIGN(21502, "Spruce Sign"), + SPRUCE_WALL_SIGN(7352, "Spruce Wall Sign"), + STONECUTTER(25170, "Stonecutter"), + STONE_BRICK_WALL(29073, "Stone Brick Wall"), + STONE_STAIRS(23784, "Stone Stairs"), + SUSPICIOUS_STEW(8173, "Suspicious Stew"), + SWEET_BERRIES(19747, "Sweet Berries"), + SWEET_BERRY_BUSH(11958, "Sweet Berry Bush"), + TRADER_LLAMA_SPAWN_EGG(13512, "Trader Llama Spawn Egg"), + WANDERING_TRADER_SPAWN_EGG(12312, "Wandering Trader Spawn Egg"), + WHITE_DYE(10758, "White Dye"), + WITHER_ROSE(8619, "Wither Rose"), + YELLOW_DYE(5952, "Yellow Dye"), + COMPOSTER(-4, "Composter"), //1.15 BEEHIVE("Beehive"), @@ -1042,6 +1043,110 @@ public enum CMIMaterial { HONEY_BLOCK("Honey Block"), HONEY_BOTTLE("Honey Bottle"), + //1.16 + ANCIENT_DEBRIS("ancient debris"), + BASALT("basalt"), + BLACKSTONE("blackstone"), + BLACKSTONE_SLAB("blackstone slab"), + BLACKSTONE_STAIRS("blackstone stairs"), + BLACKSTONE_WALL("blackstone wall"), + CHAIN("chain"), + CHISELED_NETHER_BRICKS("chiseled nether bricks"), + CHISELED_POLISHED_BLACKSTONE("chiseled polished blackstone"), + CRACKED_NETHER_BRICKS("cracked nether bricks"), + CRACKED_POLISHED_BLACKSTONE_BRICKS("cracked polished blackstone bricks"), + CRIMSON_BUTTON("crimson button"), + CRIMSON_DOOR("crimson door"), + CRIMSON_FENCE("crimson fence"), + CRIMSON_FENCE_GATE("crimson fence gate"), + CRIMSON_FUNGUS("crimson fungus"), + CRIMSON_HYPHAE("crimson hyphae"), + CRIMSON_NYLIUM("crimson nylium"), + CRIMSON_PLANKS("crimson planks"), + CRIMSON_PRESSURE_PLATE("crimson pressure plate"), + CRIMSON_ROOTS("crimson roots"), + CRIMSON_SIGN("crimson sign"), + CRIMSON_SLAB("crimson slab"), + CRIMSON_STAIRS("crimson stairs"), + CRIMSON_STEM("crimson stem"), + CRIMSON_TRAPDOOR("crimson trapdoor"), + CRIMSON_WALL_SIGN("crimson wall sign"), + CRYING_OBSIDIAN("crying obsidian"), + GILDED_BLACKSTONE("gilded blackstone"), + HOGLIN_SPAWN_EGG("hoglin spawn egg"), + LODESTONE("lodestone"), + MUSIC_DISC_PIGSTEP("music disc pigstep"), + NETHERITE_AXE("netherite axe"), + NETHERITE_BLOCK("netherite block"), + NETHERITE_BOOTS("netherite boots"), + NETHERITE_CHESTPLATE("netherite chestplate"), + NETHERITE_HELMET("netherite helmet"), + NETHERITE_HOE("netherite hoe"), + NETHERITE_INGOT("netherite ingot"), + NETHERITE_LEGGINGS("netherite leggings"), + NETHERITE_PICKAXE("netherite pickaxe"), + NETHERITE_SCRAP("netherite scrap"), + NETHERITE_SHOVEL("netherite shovel"), + NETHERITE_SWORD("netherite sword"), + NETHER_GOLD_ORE("nether gold ore"), + NETHER_SPROUTS("nether sprouts"), + PIGLIN_BANNER_PATTERN("piglin banner pattern"), + PIGLIN_SPAWN_EGG("piglin spawn egg"), + POLISHED_BASALT("polished basalt"), + POLISHED_BLACKSTONE("polished blackstone"), + POLISHED_BLACKSTONE_BRICKS("polished blackstone bricks"), + POLISHED_BLACKSTONE_BRICK_SLAB("polished blackstone brick slab"), + POLISHED_BLACKSTONE_BRICK_STAIRS("polished blackstone brick stairs"), + POLISHED_BLACKSTONE_BRICK_WALL("polished blackstone brick wall"), + POLISHED_BLACKSTONE_BUTTON("polished blackstone button"), + POLISHED_BLACKSTONE_PRESSURE_PLATE("polished blackstone pressure plate"), + POLISHED_BLACKSTONE_SLAB("polished blackstone slab"), + POLISHED_BLACKSTONE_STAIRS("polished blackstone stairs"), + POLISHED_BLACKSTONE_WALL("polished blackstone wall"), + POTTED_CRIMSON_FUNGUS("potted crimson fungus"), + POTTED_CRIMSON_ROOTS("potted crimson roots"), + POTTED_WARPED_FUNGUS("potted warped fungus"), + POTTED_WARPED_ROOTS("potted warped roots"), + QUARTZ_BRICKS("quartz bricks"), + RESPAWN_ANCHOR("respawn anchor"), + SHROOMLIGHT("shroomlight"), + SOUL_CAMPFIRE("soul campfire"), + SOUL_FIRE("soul fire"), + SOUL_LANTERN("soul lantern"), + SOUL_SOIL("soul soil"), + SOUL_TORCH("soul torch"), + SOUL_WALL_TORCH("soul wall torch"), + STRIDER_SPAWN_EGG("strider spawn egg"), + STRIPPED_CRIMSON_HYPHAE("stripped crimson hyphae"), + STRIPPED_CRIMSON_STEM("stripped crimson stem"), + STRIPPED_WARPED_HYPHAE("stripped warped hyphae"), + STRIPPED_WARPED_STEM("stripped warped stem"), + TARGET("target"), + TWISTING_VINES("twisting vines"), + TWISTING_VINES_PLANT("twisting vines plant"), + WARPED_BUTTON("warped button"), + WARPED_DOOR("warped door"), + WARPED_FENCE("warped fence"), + WARPED_FENCE_GATE("warped fence gate"), + WARPED_FUNGUS("warped fungus"), + WARPED_FUNGUS_ON_A_STICK("warped fungus on a stick"), + WARPED_HYPHAE("warped hyphae"), + WARPED_NYLIUM("warped nylium"), + WARPED_PLANKS("warped planks"), + WARPED_PRESSURE_PLATE("warped pressure plate"), + WARPED_ROOTS("warped roots"), + WARPED_SIGN("warped sign"), + WARPED_SLAB("warped slab"), + WARPED_STAIRS("warped stairs"), + WARPED_STEM("warped stem"), + WARPED_TRAPDOOR("warped trapdoor"), + WARPED_WALL_SIGN("warped wall sign"), + WARPED_WART_BLOCK("warped wart block"), + WEEPING_VINES("weeping vines"), + WEEPING_VINES_PLANT("weeping vines plant"), + ZOGLIN_SPAWN_EGG("zoglin spawn egg"), + ZOMBIFIED_PIGLIN_SPAWN_EGG("zombified piglin spawn egg"), + // Legacy LEGACY_STATIONARY_WATER(9, 0, null, "Stationary Water"), LEGACY_STATIONARY_LAVA(11, 0, null, "Stationary Lava"), @@ -1089,8 +1194,18 @@ public enum CMIMaterial { private List legacyName; private String bukkitName; private String mojangName; + private Set criteria; + Material mat; + CMIMaterial(Integer id, String name, String... legacyName) { + this(null, null, id, name, legacyName); + } + + CMIMaterial(Integer id, String name) { + this(null, null, id, name, ""); + } + CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name) { this(legacyId, legacyData, id, name, ""); } @@ -1100,12 +1215,20 @@ public enum CMIMaterial { } CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name, String... legacyName) { + this(legacyId, legacyData, id, null, name, legacyName); + } + + CMIMaterial(Integer legacyId, Integer legacyData, Integer id, List criteria, String name, String... legacyName) { + this.legacyId = legacyId; this.legacyData = legacyData; this.id = id; this.name = name; if (legacyName != null && legacyName.length > 0 && !legacyName[0].isEmpty()) this.legacyName = Arrays.asList(legacyName); + + if (criteria != null) + this.criteria = new HashSet<>(criteria); } public String getName() { @@ -1130,8 +1253,6 @@ public Material getMaterial() { } public void updateMaterial() { - if (this.equals(CMIMaterial.NONE)) - return; if (mat == null) { for (Material one : Material.class.getEnumConstants()) { if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.name().replace("_", ""))) @@ -1181,6 +1302,13 @@ public ItemStack newItemStack(int amount) { if (mat == null) { return new ItemStack(Material.STONE); } + + try { + if (!mat.isItem()) + return new ItemStack(Material.STONE); + } catch (Throwable e) { + } + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat); stack.setAmount(amount); @@ -1208,6 +1336,7 @@ public CMIItemStack newCMIItemStack(int amount) { return stack; } ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat, 1, (short) this.getLegacyData()); + stack.setAmount(amount); return new CMIItemStack(stack); } @@ -1284,6 +1413,8 @@ public static CMIMaterial get(String id) { try { ids = Integer.parseInt(id.split(":")[0]); data = Integer.parseInt(id.split(":")[1]); + if (ids <= 0) + return CMIMaterial.NONE; return get(ids, data); } catch (Exception ex) { } @@ -1296,7 +1427,7 @@ public static CMIMaterial get(String id) { return mat; } CMIMaterial mat1 = ItemManager.byName.get(id); - if (mat1 != null) { + if (mat1 != null && mat1.getLegacyId() > 0) { mat = get(mat1.getLegacyId(), data); if (mat != null) { return mat; @@ -1368,16 +1499,16 @@ public static CMIMaterial get(Block block) { if (block == null) return CMIMaterial.NONE; - CMIMaterial mat = null; - - if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { - mat = ItemManager.byRealMaterial.get(block.getType()); - if (mat == null) + try { + if (Bukkit.getWorld(block.getWorld().getUID()) == null) return CMIMaterial.NONE; + } catch (Throwable e) { + e.printStackTrace(); } - if (mat != null) - return mat; + if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { + return ItemManager.byRealMaterial.get(block.getType()); + } byte data = Version.isCurrentEqualOrLower(Version.v1_13_R1) ? block.getData() : 0; if (block.getState() instanceof Skull) { @@ -1385,6 +1516,12 @@ public static CMIMaterial get(Block block) { data = (byte) skull.getSkullType().ordinal(); } + CMIMaterial mat = null; + + if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { + mat = ItemManager.byRealMaterial.get(block.getType()); + } + if (mat == null) { mat = ItemManager.byName.get(block.getType().toString().replace("_", "").toLowerCase()); } @@ -1490,6 +1627,7 @@ public boolean isMonsterEgg() { case TURTLE_EGG: case TURTLE_SPAWN_EGG: + // 1.14 case CAT_SPAWN_EGG: case FOX_SPAWN_EGG: case PANDA_SPAWN_EGG: @@ -1497,6 +1635,15 @@ public boolean isMonsterEgg() { case RAVAGER_SPAWN_EGG: case TRADER_LLAMA_SPAWN_EGG: case WANDERING_TRADER_SPAWN_EGG: + + // 1.15 + case BEE_SPAWN_EGG: + + case HOGLIN_SPAWN_EGG: + case PIGLIN_SPAWN_EGG: + case STRIDER_SPAWN_EGG: + case ZOGLIN_SPAWN_EGG: + case ZOMBIFIED_PIGLIN_SPAWN_EGG: return true; default: break; @@ -1578,6 +1725,12 @@ public boolean isStairs() { case SMOOTH_RED_SANDSTONE_STAIRS: case SMOOTH_SANDSTONE_STAIRS: case STONE_STAIRS: + + case BLACKSTONE_STAIRS: + case CRIMSON_STAIRS: + case POLISHED_BLACKSTONE_BRICK_STAIRS: + case POLISHED_BLACKSTONE_STAIRS: + case WARPED_STAIRS: return true; default: break; @@ -1598,43 +1751,43 @@ public boolean isPotion() { case LINGERING_POTION: case SPLASH_POTION: - case AWKWARD_POTION: - case THICK_POTION: - case MUNDANE_POTION: - case REGENERATION_POTION: - case SWIFTNESS_POTION: - case FIRE_RESISTANCE_POTION: - case POISON_POTION: - case HEALING_POTION: - case NIGHT_VISION_POTION: - case WEAKNESS_POTION: - case STRENGTH_POTION: - case SLOWNESS_POTION: - case HARMING_POTION: - case WATER_BREATHING_POTION: - case INVISIBILITY_POTION: - case REGENERATION_POTION2: - case SWIFTNESS_POTION2: - case POISON_POTION2: - case HEALING_POTION2: - case STRENGTH_POTION2: - case LEAPING_POTION2: - case HARMING_POTION2: - case REGENERATION_POTION3: - case SWIFTNESS_POTION3: - case FIRE_RESISTANCE_POTION3: - case POISON_POTION3: - case NIGHT_VISION_POTION2: - case WEAKNESS_POTION2: - case STRENGTH_POTION3: - case SLOWNESS_POTION2: - case LEAPING_POTION3: - case WATER_BREATHING_POTION2: - case INVISIBILITY_POTION2: - case REGENERATION_POTION4: - case SWIFTNESS_POTION4: - case POISON_POTION4: - case STRENGTH_POTION4: +// case AWKWARD_POTION: +// case THICK_POTION: +// case MUNDANE_POTION: +// case REGENERATION_POTION: +// case SWIFTNESS_POTION: +// case FIRE_RESISTANCE_POTION: +// case POISON_POTION: +// case HEALING_POTION: +// case NIGHT_VISION_POTION: +// case WEAKNESS_POTION: +// case STRENGTH_POTION: +// case SLOWNESS_POTION: +// case HARMING_POTION: +// case WATER_BREATHING_POTION: +// case INVISIBILITY_POTION: +// case REGENERATION_POTION2: +// case SWIFTNESS_POTION2: +// case POISON_POTION2: +// case HEALING_POTION2: +// case STRENGTH_POTION2: +// case LEAPING_POTION2: +// case HARMING_POTION2: +// case REGENERATION_POTION3: +// case SWIFTNESS_POTION3: +// case FIRE_RESISTANCE_POTION3: +// case POISON_POTION3: +// case NIGHT_VISION_POTION2: +// case WEAKNESS_POTION2: +// case STRENGTH_POTION3: +// case SLOWNESS_POTION2: +// case LEAPING_POTION3: +// case WATER_BREATHING_POTION2: +// case INVISIBILITY_POTION2: +// case REGENERATION_POTION4: +// case SWIFTNESS_POTION4: +// case POISON_POTION4: +// case STRENGTH_POTION4: return true; default: break; @@ -1702,6 +1855,8 @@ public boolean isButton() { case OAK_BUTTON: case SPRUCE_BUTTON: case STONE_BUTTON: + case POLISHED_BLACKSTONE_BUTTON: + case WARPED_BUTTON: return true; default: break; @@ -1763,6 +1918,9 @@ public boolean isPlate() { case OAK_PRESSURE_PLATE: case SPRUCE_PRESSURE_PLATE: case STONE_PRESSURE_PLATE: + case CRIMSON_PRESSURE_PLATE: + case POLISHED_BLACKSTONE_PRESSURE_PLATE: + case WARPED_PRESSURE_PLATE: return true; default: break; @@ -1896,26 +2054,34 @@ public static boolean isArmor(Material mat) { public boolean isArmor() { switch (this) { + case NETHERITE_HELMET: case CHAINMAIL_HELMET: case DIAMOND_HELMET: case GOLDEN_HELMET: case IRON_HELMET: case LEATHER_HELMET: + + case NETHERITE_CHESTPLATE: case CHAINMAIL_CHESTPLATE: case DIAMOND_CHESTPLATE: case GOLDEN_CHESTPLATE: case IRON_CHESTPLATE: case LEATHER_CHESTPLATE: + + case NETHERITE_LEGGINGS: case CHAINMAIL_LEGGINGS: case DIAMOND_LEGGINGS: case GOLDEN_LEGGINGS: case IRON_LEGGINGS: case LEATHER_LEGGINGS: + + case NETHERITE_BOOTS: case CHAINMAIL_BOOTS: case DIAMOND_BOOTS: case GOLDEN_BOOTS: case IRON_BOOTS: case LEATHER_BOOTS: + case SHIELD: case TURTLE_HELMET: return true; @@ -1942,6 +2108,7 @@ public boolean isWeapon() { case BOW: case CROSSBOW: case TRIDENT: + case NETHERITE_SWORD: return true; default: break; @@ -1958,26 +2125,34 @@ public static boolean isTool(Material mat) { public boolean isTool() { switch (this) { + case NETHERITE_PICKAXE: case DIAMOND_PICKAXE: case GOLDEN_PICKAXE: case IRON_PICKAXE: case STONE_PICKAXE: case WOODEN_PICKAXE: + + case NETHERITE_SHOVEL: case DIAMOND_SHOVEL: case GOLDEN_SHOVEL: case IRON_SHOVEL: case STONE_SHOVEL: case WOODEN_SHOVEL: + + case NETHERITE_AXE: case DIAMOND_AXE: case GOLDEN_AXE: case IRON_AXE: case STONE_AXE: case WOODEN_AXE: + + case NETHERITE_HOE: case DIAMOND_HOE: case GOLDEN_HOE: case IRON_HOE: case STONE_HOE: case WOODEN_HOE: + case SHEARS: case FISHING_ROD: return true; @@ -1987,6 +2162,10 @@ public boolean isTool() { return false; } + public boolean isNone() { + return this.equals(CMIMaterial.NONE); + } + public static boolean isAir(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2097,6 +2276,9 @@ public boolean isDoor() { // case IRON_DOOR_BLOCK: case JUNGLE_DOOR: case SPRUCE_DOOR: + case CRIMSON_DOOR: + case WARPED_DOOR: + return true; default: break; @@ -2120,6 +2302,8 @@ public boolean isGate() { case JUNGLE_FENCE_GATE: case OAK_FENCE_GATE: case SPRUCE_FENCE_GATE: + case CRIMSON_FENCE_GATE: + case WARPED_FENCE_GATE: return true; default: break; @@ -2143,6 +2327,9 @@ public boolean isFence() { case NETHER_BRICK_FENCE: case OAK_FENCE: case SPRUCE_FENCE: + + case CRIMSON_FENCE: + case WARPED_FENCE: return true; default: break; @@ -2218,17 +2405,28 @@ public boolean isSign() { case ACACIA_SIGN: case ACACIA_WALL_SIGN: + case BIRCH_SIGN: case BIRCH_WALL_SIGN: + case DARK_OAK_SIGN: case DARK_OAK_WALL_SIGN: + case JUNGLE_SIGN: case JUNGLE_WALL_SIGN: + case OAK_SIGN: case OAK_WALL_SIGN: + case SPRUCE_SIGN: case SPRUCE_WALL_SIGN: + case CRIMSON_SIGN: + case CRIMSON_WALL_SIGN: + + case WARPED_SIGN: + case WARPED_WALL_SIGN: + return true; default: break; @@ -2283,6 +2481,8 @@ public boolean isTrapDoor() { case JUNGLE_TRAPDOOR: case OAK_TRAPDOOR: case SPRUCE_TRAPDOOR: + case CRIMSON_TRAPDOOR: + case WARPED_TRAPDOOR: return true; default: break; @@ -2409,6 +2609,12 @@ public boolean isSlab() { case SMOOTH_RED_SANDSTONE_SLAB: case SMOOTH_SANDSTONE_SLAB: case SMOOTH_STONE_SLAB: + + case BLACKSTONE_SLAB: + case CRIMSON_SLAB: + case POLISHED_BLACKSTONE_BRICK_SLAB: + case POLISHED_BLACKSTONE_SLAB: + case WARPED_SLAB: return true; default: break; @@ -2512,7 +2718,23 @@ public void setBukkitName(String bukkitName) { this.bukkitName = bukkitName; } + public String getMojangName() { + if (mojangName == null) + mojangName = CMIReflections.getItemMinecraftName(this.newItemStack()); + return mojangName; + } + public void setMojangName(String mojangName) { this.mojangName = mojangName; } + + public Set getCriteria() { + return criteria; + } + + public boolean containsCriteria(CMIMaterialCriteria criteria) { + if (this.criteria == null || criteria == null) + return false; + return this.criteria.contains(criteria); + } } diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterialCriteria.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterialCriteria.java new file mode 100644 index 000000000..6801941da --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/CMIMaterialCriteria.java @@ -0,0 +1,7 @@ +package com.bekvon.bukkit.cmiLib; + +public enum CMIMaterialCriteria { + + seeThrow, stars, slab, door, carpet, wool, monsteregg + +} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java index d1cec311f..87a5e670d 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java @@ -15,8 +15,6 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; - public class CMIReflections { private static Class CraftServerClass; @@ -99,6 +97,23 @@ private static void initialize() { } } + public static String toJson(ItemStack item) { + if (item == null) + return null; + + Object nmsStack = asNMSCopy(item); + + try { + Method meth = IStack.getMethod("save", NBTTagCompound); + Object res = meth.invoke(nmsStack, NBTTagCompound.newInstance()); + return res.toString(); + } catch (Throwable e) { + e.printStackTrace(); + } + + return null; + } + public static ItemStack HideFlag(ItemStack item, int state) { Object nmsStack = asNMSCopy(item); try { diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessage.java b/src/com/bekvon/bukkit/cmiLib/RawMessage.java index 8ca2f4866..e2bccf45a 100644 --- a/src/com/bekvon/bukkit/cmiLib/RawMessage.java +++ b/src/com/bekvon/bukkit/cmiLib/RawMessage.java @@ -1,43 +1,36 @@ package com.bekvon.bukkit.cmiLib; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; -import java.util.Map.Entry; import java.util.Random; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; -import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; -import com.bekvon.bukkit.residence.utils.Debug; - public class RawMessage { - private List parts = new ArrayList<>(); - private List cleanParts = new ArrayList<>(); - private String colorReplacerPlaceholder = "%#%"; + List parts = new ArrayList(); + List cleanParts = new ArrayList(); private String unfinished = ""; private String unfinishedClean = ""; private String combined = ""; - private String combinedClean = ""; + String combinedClean = ""; private boolean dontBreakLine = false; + private boolean combineHoverOver = false; // private boolean colorizeEntireWithLast = true; public void clear() { - parts = new ArrayList<>(); - cleanParts = new ArrayList<>(); + parts = new ArrayList(); + cleanParts = new ArrayList(); combined = ""; combinedClean = ""; } @@ -59,7 +52,6 @@ public RawMessage add(String text, List hoverText) { hover += "\n"; hover += one; } - return add(text, hover.isEmpty() ? null : hover, null, null, null); } @@ -71,18 +63,32 @@ public RawMessage add(String text, String hoverText, String command, String sugg return add(text, hoverText, command, suggestion, null); } - private Set formats = new HashSet<>(); - private CMIChatColor lastColor = null; + Set formats = new HashSet(); + CMIChatColor lastColor = null; - private Set savedFormats = new HashSet<>(); - private CMIChatColor savedLastColor = null; + Set savedFormats = new HashSet(); + CMIChatColor savedLastColor = null; - private CMIChatColor firstBlockColor = null; + CMIChatColor firstBlockColor = null; - private String makeMessyText(String text) { + private String intoJsonColored(String text) { if (text.equalsIgnoreCase(" ")) return text; + text = CMIChatColor.deColorize(text); + + Pattern decolpattern = Pattern.compile(CMIChatColor.hexColorDecolRegex); + + Matcher decolmatch = decolpattern.matcher(text); + while (decolmatch.find()) { + + String string = decolmatch.group(); + + string = "{#" + string.substring(2).replace("&", "") + "}"; + + text = text.replaceAll(decolmatch.group(), string); + } + List splited = new ArrayList(); if (text.contains(" ")) { for (String one : text.split(" ")) { @@ -92,7 +98,7 @@ private String makeMessyText(String text) { // if (i < split.length - 1) { // splited.add(split[i] + "\n"); // } else { -// splited.add(split[i]); +// splited.add(split[i]); // } // } // } else { @@ -110,26 +116,95 @@ private String makeMessyText(String text) { } else splited.add(text); + Pattern prepattern = Pattern.compile(CMIChatColor.hexColorRegex); + + List plt = new ArrayList(splited); + splited.clear(); + for (String one : plt) { + Matcher match = prepattern.matcher(one); + + boolean found = false; + + String prev = null; + String end = null; + while (match.find()) { + if (match.group(2) == null) + continue; + found = true; + + CMIChatColor c = new CMIChatColor(match.group(2)); + + String[] spl = one.split("\\{\\#" + c.getHex() + "\\}"); + if (spl.length == 0 || spl[0].isEmpty()) { + prev = match.group(); + if (spl.length > 0) + end = spl[1]; + continue; + } + +// if (prev != null) { +// splited.add(spl[0]); +// } else { + splited.add(spl[0]); +// } + + if (spl.length > 0) + end = spl[1]; + + one = one.substring(spl[0].length()); + prev = match.group(); + match = prepattern.matcher(one); + } + + if (!found) { + if (prev != null) { + if (end != null) + splited.add(prev + end); + else + splited.add(prev); + } else { + if (end != null) + splited.add(end); + } + + splited.add(one); + } else { + + if (prev != null) { + if (end != null) + splited.add(prev + end); + } else { + if (end != null) + splited.add(end); + } + } + } + String newText = ""; + Pattern pattern = Pattern.compile("(&[0123456789abcdefklmnorABCDEFKLMNOR])|" + CMIChatColor.hexColorRegex); + + newText += "{\"text\":\""; + for (String one : splited) { String colorString = ""; - if (lastColor != null) - colorString += lastColor.getColorCode(); - else - colorString += CMIChatColor.WHITE.getColorCode(); - for (CMIChatColor oneC : formats) { - colorString = colorString + oneC.getColorCode(); - } +// if (lastColor != null) +// colorString += lastColor.getColorCode(); +// else +// colorString += CMIChatColor.WHITE.getColorCode(); +// for (CMIChatColor oneC : formats) { +// colorString = colorString + oneC.getColorCode(); +// } - if (one.contains("&")) { - Pattern pattern = Pattern.compile("(&[0123456789abcdefklmnorABCDEFKLMNOR])"); + if (one.contains("&") || one.contains("{") && one.contains("}")) { Matcher match = pattern.matcher(one); while (match.find()) { - String color = CMIChatColor.getLastColors(match.group(0)); CMIChatColor c = CMIChatColor.getColor(color); + if (c == null && match.group(3) != null) { + c = new CMIChatColor(match.group(3)); + } if (c != null) { if (c.isFormat()) { formats.add(c); @@ -138,60 +213,128 @@ private String makeMessyText(String text) { lastColor = null; // firstBlockColor = null; } else if (c.isColor()) { - lastColor = c; + if (c.getHex() == null) + lastColor = c; formats.clear(); firstBlockColor = c; + + if (c.getHex() != null) { + one = "\"},{\"color\":\"#" + c.getHex() + "\",\"text\":\"" + one; + } } if (c.isFormat()) { } else if (c.isReset()) { - } else if (c.isColor()) { + } else if (c.isColor() && c.getHex() == null) { String form = ""; for (CMIChatColor oneC : formats) { form += oneC.getColorCode(); } one = one.replace(c.getColorCode(), c.getColorCode() + form); - } + } else if (c.getHex() != null) { + String form = ""; + for (CMIChatColor oneC : formats) { + form += oneC.getColorCode(); + } + +// CMIDebug.d("*"+net.md_5.bungee.api.ChatColor.of("#" + c.getHex())+ "_"+net.md_5.bungee.api.ChatColor.of("#FF00FF")+ "+"); +// one = one.replace("{#" + c.getHex() + "}", "\u00A7x\u00A76\u00A76\u00A70\u00A70\u00A7c\u00A7c" + form); + } + if (c.getHex() != null) { + one = one.replace("{#" + c.getHex() + "}", ""); + } } } } newText += colorString + one; + } + newText += "\"}"; return newText; } + private String processText(String text) { + Random rand = new Random(); + + String breakLine0 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); + text = text.replace("\\n", breakLine0); + + String breakLine3 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); + text = text.replace("\\", breakLine3); + + String breakLine2 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); + text = text.replace("\\\"", breakLine2); + + String breakLine1 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); + text = text.replace("\"", breakLine1); + + text = text.replace(breakLine3, "\\\\"); + text = text.replace(breakLine0, "\\n"); + text = text.replace(breakLine1, "\\\""); + text = text.replace(breakLine2, "\\\""); + + return text; + } + public RawMessage addText(String text) { if (text == null) return this; - text = provessText(text); + text = processText(text); + if (dontBreakLine) { + text = text.replace("\n", "\\\\n"); + text = text.replace("\\n", "\\\\n"); text = text.replace("\\\\\\n", "\\\\n"); } + text = text.replace("\n", "\\n"); + unfinishedClean = text; - unfinished += "\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(colorReplacerPlaceholder, "&") + "\""; + + unfinished = "{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(text)).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]"; + if (firstBlockColor != null) { + if (firstBlockColor.getHex() == null) + unfinished += ",\"color\":\"" + firstBlockColor.getName().toLowerCase() + "\""; + else { + unfinished += ",\"color\":\"#" + firstBlockColor.getHex() + "\""; + } + } + return this; } +// public RawMessage addHoverText(List hoverText) { +// String hover = ""; +// if (hoverText != null) +// for (Object one : hoverText) { +// if (!hover.isEmpty()) +// hover += "\n"; +// hover += one.toString(); +// } +// return addHoverText(hover); +// } + public RawMessage addHoverText(List hoverText) { String hover = ""; - if (hoverText != null) + if (hoverText != null) { for (String one : hoverText) { if (!hover.isEmpty()) hover += "\n"; hover += one; } + } return addHoverText(hover); } public RawMessage addHoverText(String hoverText) { if (hoverText != null && !hoverText.isEmpty()) { + hoverText = processText(hoverText); hoverText = hoverText.replace(" \n", " \\n"); hoverText = hoverText.replace("\n", "\\n"); - unfinished += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText) + "\"}]}}"; + unfinished += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(hoverText)) + "]}}"; } return this; } @@ -205,14 +348,39 @@ public RawMessage addCommand(String command) { return this; } + public RawMessage addInsertion(String suggestion) { + if (suggestion != null) { + + suggestion = processText(suggestion); + + suggestion = suggestion.replace("\\n", "\\\\n"); + suggestion = suggestion.replace(" \\n", " \\\\n"); + suggestion = suggestion.replace(" \n", " \\\\n"); + + unfinished += ",\"insertion\":\"" + suggestion + "\""; + } + + return this; + } + public RawMessage addSuggestion(String suggestion) { - if (suggestion != null) + if (suggestion != null) { + + suggestion = processText(suggestion); + + suggestion = suggestion.replace("\\n", "\\\\n"); + suggestion = suggestion.replace(" \\n", " \\\\n"); + suggestion = suggestion.replace(" \n", " \\\\n"); + unfinished += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}"; + } + return this; } public RawMessage addUrl(String url) { if (url != null) { + url = processText(url); if (!url.toLowerCase().startsWith("http://") || !url.toLowerCase().startsWith("https://")) url = "http://" + url; unfinished += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}"; @@ -223,9 +391,11 @@ public RawMessage addUrl(String url) { public RawMessage build() { if (unfinished.isEmpty()) return this; + + unfinished += "}"; unfinished = unfinished.startsWith("{") ? unfinished : "{" + unfinished + "}"; parts.add(unfinished); - cleanParts.add(ChatColor.translateAlternateColorCodes('&', unfinishedClean)); + cleanParts.add(CMIChatColor.translate(unfinishedClean)); unfinished = ""; unfinishedClean = ""; @@ -233,61 +403,60 @@ public RawMessage build() { return this; } - private String provessText(String text) { - Random rand = new Random(); - - String breakLine0 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); - text = text.replace("\\n", breakLine0); - - String breakLine3 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); - text = text.replace("\\", breakLine3); - - String breakLine2 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); - text = text.replace("\\\"", breakLine2); - - String breakLine1 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); - text = text.replace("\"", breakLine1); - - text = text.replace(breakLine3, "\\\\"); - text = text.replace(breakLine0, "\\n"); - text = text.replace(breakLine1, "\\\""); - text = text.replace(breakLine2, "\\\""); - - return text; + public RawMessage add(String text, String hoverText, String command, String suggestion, String url) { + return add(text, hoverText, command, suggestion, url, null); } - public RawMessage add(String text, String hoverText, String command, String suggestion, String url) { - + public RawMessage add(String text, String hoverText, String command, String suggestion, String url, String insertion) { if (text == null) return this; - text = provessText(text); - if (dontBreakLine) + text = processText(text); + + if (dontBreakLine) { + text = text.replace("\n", "\\\\n"); + text = text.replace("\\n", "\\\\n"); text = text.replace("\\\\\\n", "\\\\n"); + } - String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(colorReplacerPlaceholder, "&") + "\""; + text = text.replace("\n", "\\n"); + + String f = "{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(text)).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]"; + if (firstBlockColor != null) { + if (firstBlockColor.getHex() == null) + f += ",\"color\":\"" + firstBlockColor.getName().toLowerCase() + "\""; + else { + f += ",\"color\":\"#" + firstBlockColor.getHex() + "\""; + } + } + +// f+=",\"extra\":[{\"text\":\"Extra\"},{\"text\":\"Extra1\"}]"; + + if (insertion != null) { + insertion = processText(insertion); + f += ",\"insertion\":\"" + insertion + "\""; + } if (hoverText != null && !hoverText.isEmpty()) { - hoverText = provessText(hoverText); + hoverText = processText(hoverText); hoverText = hoverText.replace(" \n", " \\n"); hoverText = hoverText.replace("\n", "\\n"); - f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText) + "\"}]}}"; + f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(hoverText)) + "]}}"; } if (suggestion != null) { - suggestion = provessText(suggestion); + suggestion = processText(suggestion); suggestion = suggestion.replace("\\n", "\\\\n"); suggestion = suggestion.replace(" \\n", " \\\\n"); suggestion = suggestion.replace(" \n", " \\\\n"); - if (suggestion != null) - f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}"; + f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}"; } if (url != null) { - url = provessText(url); - if (!url.toLowerCase().startsWith("http://") || !url.toLowerCase().startsWith("https://")) + url = processText(url); + if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://")) url = "http://" + url; f += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}"; } @@ -295,7 +464,7 @@ public RawMessage add(String text, String hoverText, String command, String sugg if (command != null) { if (!command.startsWith("/")) command = "/" + command; - command = provessText(command); + command = processText(command); f += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}"; } // } @@ -303,7 +472,12 @@ public RawMessage add(String text, String hoverText, String command, String sugg f += "}"; parts.add(f); - cleanParts.add(ChatColor.translateAlternateColorCodes('&', text)); + cleanParts.add(CMIChatColor.translate(text)); +// if (this.isCombineHoverOver() && hoverText != null) { +// for (String one : hoverText.split("\\\\n")) { +// cleanParts.add("\n"+CMIChatColor.translate(one)); +// } +// } // firstBlockColor = null; return this; } @@ -316,16 +490,21 @@ public RawMessage addUrl(String text, String url, String hoverText) { if (text == null) return this; - text = text.replace("\\", "\\\\"); - text = text.replace("\"", "\\\""); - String f = "{\"text\":\"" + CMIChatColor.colorize(text).replace(colorReplacerPlaceholder, "&") + "\""; + text = processText(text); + String f = "{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(text)).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]"; if (firstBlockColor != null) { - f += ",\"color\":\"" + firstBlockColor.name().toLowerCase() + "\""; + if (firstBlockColor.getHex() == null) + f += ",\"color\":\"" + firstBlockColor.getName().toLowerCase() + "\""; + else { + f += ",\"color\":\"#" + firstBlockColor.getHex() + "\""; + } } if (hoverText != null && !hoverText.isEmpty()) { + + hoverText = processText(hoverText); hoverText = hoverText.startsWith(" ") ? hoverText.substring(1) : hoverText; - f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText).replace( - colorReplacerPlaceholder, "&") + "\"}]}}"; + f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(hoverText)).replace( + CMIChatColor.colorReplacerPlaceholder, "&") + "]}}"; } url = url.endsWith(" ") ? url.substring(0, url.length() - 1) : url; @@ -334,17 +513,24 @@ public RawMessage addUrl(String text, String url, String hoverText) { if (url != null && !url.isEmpty()) { if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://")) url = "http://" + url; + url = processText(url); f += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}"; } f += "}"; parts.add(f); - cleanParts.add(ChatColor.translateAlternateColorCodes('&', text)); + cleanParts.add(CMIChatColor.translate(text)); +// if (this.isCombineHoverOver() && hoverText != null) { +// for (String one : hoverText.split("\\n")) { +// cleanParts.add(CMIChatColor.translate(one)); +// } +// } // firstBlockColor = null; return this; } - public RawMessage addItem(String text, ItemStack item, List extraLore, String command, String suggestion) { + public RawMessage addItem(String text, ItemStack item, String command, String suggestion, String insertion) { + if (text == null) return this; if (item == null) @@ -352,114 +538,35 @@ public RawMessage addItem(String text, ItemStack item, List extraLore, S item = item.clone(); - text = makeMessyText(text); - - String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', text) + "\""; - - CMIItemStack cm = ItemManager.getItem(item); - - String ItemName = "&r&f" + cm.getDisplayName(); - String Enchants = getItemEnchants(item); - - if (!Enchants.isEmpty()) { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - Enchants = ",Enchantments:" + Enchants; - } else { - Enchants = ",ench:" + Enchants; - } - } - - List Lore = new ArrayList<>(); - -// if (CMIMaterial.isShulkerBox(item.getType())) { -// List items = CMI.getInstance().getShulkerBoxManager().getShulkerBoxContents(item); -// for (ItemStack one : items) { -// if (one == null) -// continue; -// CMIItemStack cim = ItemManager.getItem(one); -// if (cim == null) -// continue; -// Lore.add(CMIChatColor.translateAlternateColorCodes("&7" + cim.getRealName() + " x" + cim.getAmount())); -// } -// } - - if (item.hasItemMeta() && item.getItemMeta().hasLore()) - Lore.addAll(item.getItemMeta().getLore()); - if (extraLore != null) - Lore.addAll(extraLore); - - String itemName = cm.getBukkitName(); + String f = "{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(text)).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]"; - if (cm.getMojangName() != null) - itemName = cm.getMojangName(); - - if (itemName.equalsIgnoreCase("Air")) { - itemName = "Stone"; - ItemName = "Hand"; + if (insertion != null) { + insertion = processText(insertion); + f += ",\"insertion\":\"" + insertion + "\""; } - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - itemName = org.bukkit.NamespacedKey.minecraft(cm.getType().name().toLowerCase()).getKey(); - } + String res = CMIReflections.toJson(item); - String loreS = convertLore(Lore); - if (!Lore.isEmpty()) { - loreS = ",Lore:[" + loreS + "]"; - } - f += ",\"hoverEvent\":{\"action\":\"show_item\",\"value\":\"{id:" + itemName + ",Count:1b,tag:{display:{Name:\\\"" + CMIChatColor.translateAlternateColorCodes(ItemName) + "\\\"" + loreS - + "}" - + Enchants + "}}\"}"; + f += ",\"hoverEvent\":{\"action\":\"show_item\",\"value\":\"" + res + "\"}"; - if (suggestion != null) + if (suggestion != null) { + suggestion = processText(suggestion); f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + suggestion + "\"}"; + } if (command != null) { + command = processText(command); if (!command.startsWith("/")) command = "/" + command; f += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}"; } f += "}"; + parts.add(f); return this; } - private static String getItemEnchants(ItemStack item) { - String Enchants = ""; - if (item.getEnchantments().isEmpty()) - return Enchants; - - Enchants = ""; - for (Entry one : item.getEnchantments().entrySet()) { - if (!Enchants.isEmpty()) - Enchants += ","; - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) - Enchants += "{id:" + one.getKey().getKey().getKey() + ",lvl:" + one.getValue() + "s}"; - else { - try { - Enchants += "{id:" + String.valueOf(one.getKey().getClass().getMethod("getId").invoke(one.getKey())) + ",lvl:" + one.getValue() + "}"; - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { - e.printStackTrace(); - } - } - } - if (!Enchants.isEmpty()) { - Enchants = "[" + Enchants; - Enchants += "]"; - } - return Enchants; - } - - private static String convertLore(List lore) { - String lr = ""; - for (String one : lore) { - if (!lr.isEmpty()) - lr += ","; - lr += "\\\"" + one + "\\\""; - } - return lr; - } - public List softCombine() { - List ls = new ArrayList<>(); + List ls = new ArrayList(); String f = ""; for (String part : parts) { if (f.isEmpty()) @@ -521,10 +628,12 @@ public RawMessage show(Player player, boolean softCombined) { for (String one : softCombine()) { if (one.isEmpty()) continue; - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + one); + RawMessageManager.send(player, one); +// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "minecraft:tellraw " + player.getName() + " " + one); } } else { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + combined); + RawMessageManager.send(player, combined); +// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "minecraft:tellraw " + player.getName() + " " + combined); } return this; @@ -547,10 +656,12 @@ public int getFinalLenght() { public RawMessage show(CommandSender sender) { if (combined.isEmpty()) combine(); - if (sender instanceof Player) + this.build(); + if (sender instanceof Player) { show((Player) sender); - else - sender.sendMessage(this.combineClean().combinedClean); + } else { + Bukkit.getConsoleSender().sendMessage(CMIChatColor.translate(this.combineClean().combinedClean)); + } return this; } @@ -582,11 +693,6 @@ public void setCombined(String combined) { this.combined = combined; } -// Set formats = new HashSet(); -// CMIChatColor lastColor = null; -// -// Set savedFormats = new HashSet(); -// CMIChatColor savedLastColor = null; public void resetColorFormats() { formats.clear(); lastColor = null; @@ -603,4 +709,12 @@ public void loadColorFormats() { formats.addAll(savedFormats); lastColor = savedLastColor; } + + public boolean isCombineHoverOver() { + return combineHoverOver; + } + + public void setCombineHoverOver(boolean combineHoverOver) { + this.combineHoverOver = combineHoverOver; + } } diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessageManager.java b/src/com/bekvon/bukkit/cmiLib/RawMessageManager.java new file mode 100644 index 000000000..71b9d3ada --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/RawMessageManager.java @@ -0,0 +1,92 @@ +package com.bekvon.bukkit.cmiLib; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.Zrips.CMI.CMI; +import com.Zrips.CMI.utils.VersionChecker.Version; + +public class RawMessageManager { + + private static Object packet; + private static Method getHandle; + private static Method sendPacket; + private static Field playerConnection; + private static Class nmsChatSerializer; + private static Class nmsIChatBaseComponent; + private static Class packetType; + + private static Class ChatMessageclz; + private static Class sub; + private static Object[] consts; + + static { + Version version = Version.getCurrent(); + try { + packetType = Class.forName("net.minecraft.server." + version + ".PacketPlayOutChat"); + Class typeCraftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer"); + Class typeNMSPlayer = Class.forName("net.minecraft.server." + version + ".EntityPlayer"); + Class typePlayerConnection = Class.forName("net.minecraft.server." + version + ".PlayerConnection"); + nmsChatSerializer = Class.forName(getChatSerializerClasspath()); + nmsIChatBaseComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent"); + getHandle = typeCraftPlayer.getMethod("getHandle"); + playerConnection = typeNMSPlayer.getField("playerConnection"); + sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet")); + if (Version.isCurrentHigher(Version.v1_11_R1)) { + ChatMessageclz = Class.forName("net.minecraft.server." + version + ".ChatMessageType"); + consts = ChatMessageclz.getEnumConstants(); + sub = consts[2].getClass(); + } + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { + CMI.getInstance().consoleMessage("Error {0} "); + CMI.getInstance().consoleMessage(ex.toString()); + } + } + + public static void send(CommandSender receivingPacket, String msg) { + if (receivingPacket instanceof Player) + send((Player) receivingPacket, msg); + else + receivingPacket.sendMessage(msg); + } + + public static void send(Player receivingPacket, String json) { + if (receivingPacket == null) + return; + if (!receivingPacket.isOnline()) + return; + if (json == null) + return; + + try { + Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, json); + if (Version.isCurrentHigher(Version.v1_15_R1)) + packet = packetType.getConstructor(nmsIChatBaseComponent, sub, UUID.class).newInstance(serialized, consts[1], receivingPacket.getUniqueId()); + else if (Version.isCurrentHigher(Version.v1_11_R1)) + packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[1]); + else if (Version.isCurrentHigher(Version.v1_7_R4)) { + packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 1); + } else { + packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 1); + } + Object player = getHandle.invoke(receivingPacket); + Object connection = playerConnection.get(player); + sendPacket.invoke(connection, packet); + } catch (Exception ex) { + ex.printStackTrace(); + CMI.getInstance().consoleMessage("Failed to show json message with packets, using command approach"); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "minecraft:tellraw \"" + receivingPacket.getName() + "\" " + json); + } + } + + private static String getChatSerializerClasspath() { + if (!Version.isCurrentHigher(Version.v1_8_R2)) + return "net.minecraft.server." + Version.getCurrent() + ".ChatSerializer"; + return "net.minecraft.server." + Version.getCurrent() + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent + } +} diff --git a/src/com/bekvon/bukkit/cmiLib/Version.java b/src/com/bekvon/bukkit/cmiLib/Version.java new file mode 100644 index 000000000..13e3fcab0 --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/Version.java @@ -0,0 +1,95 @@ +package com.bekvon.bukkit.cmiLib; + +import org.bukkit.Bukkit; + +public enum Version { + v1_7_R1, + v1_7_R2, + v1_7_R3, + v1_7_R4, + v1_8_R1, + v1_8_R2, + v1_8_R3, + v1_9_R1, + v1_9_R2, + v1_10_R1, + v1_11_R1, + v1_12_R1, + v1_13_R1, + v1_13_R2, + v1_13_R3, + v1_14_R1, + v1_14_R2, + v1_15_R1, + v1_15_R2, + v1_16_R1, + v1_16_R2, + v1_17_R1, + v1_17_R2; + + private Integer value; + private String shortVersion; + private static Version current = null; + + Version() { + try { + this.value = Integer.valueOf(this.name().replaceAll("[^\\d.]", "")); + } catch (Exception e) { + } + shortVersion = this.name().substring(0, this.name().length() - 3); + } + + public Integer getValue() { + return value; + } + + public String getShortVersion() { + return shortVersion; + } + + public static Version getCurrent() { + if (current != null) + return current; + String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); + String vv = v[v.length - 1]; + for (Version one : values()) { + if (one.name().equalsIgnoreCase(vv)) { + current = one; + break; + } + } + return current; + } + + public boolean isLower(Version version) { + return getValue() < version.getValue(); + } + + public boolean isHigher(Version version) { + return getValue() > version.getValue(); + } + + public boolean isEqualOrLower(Version version) { + return getValue() <= version.getValue(); + } + + public boolean isEqualOrHigher(Version version) { + return getValue() >= version.getValue(); + } + + public static boolean isCurrentEqualOrHigher(Version v) { + return getCurrent().getValue() >= v.getValue(); + } + + public static boolean isCurrentHigher(Version v) { + return getCurrent().getValue() > v.getValue(); + } + + public static boolean isCurrentLower(Version v) { + return getCurrent().getValue() < v.getValue(); + } + + public static boolean isCurrentEqualOrLower(Version v) { + return getCurrent().getValue() <= v.getValue(); + } +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/cmiLib/VersionChecker.java b/src/com/bekvon/bukkit/cmiLib/VersionChecker.java index a495a9203..6b5cf49fb 100644 --- a/src/com/bekvon/bukkit/cmiLib/VersionChecker.java +++ b/src/com/bekvon/bukkit/cmiLib/VersionChecker.java @@ -21,7 +21,6 @@ public VersionChecker(Residence plugin) { this.plugin = plugin; } - public Version getVersion() { return Version.getCurrent(); } @@ -53,98 +52,6 @@ public Integer convertVersion(String v) { return version; } - public enum Version { - v1_7_R1, - v1_7_R2, - v1_7_R3, - v1_7_R4, - v1_8_R1, - v1_8_R2, - v1_8_R3, - v1_9_R1, - v1_9_R2, - v1_10_R1, - v1_11_R1, - v1_12_R1, - v1_13_R1, - v1_13_R2, - v1_13_R3, - v1_14_R1, - v1_14_R2, - v1_15_R1, - v1_15_R2, - v1_16_R1, - v1_16_R2, - v1_17_R1, - v1_17_R2; - - private Integer value; - private String shortVersion; - private static Version current = null; - - Version() { - try { - this.value = Integer.valueOf(this.name().replaceAll("[^\\d.]", "")); - } catch (Exception e) { - } - shortVersion = this.name().substring(0, this.name().length() - 3); - } - - public Integer getValue() { - return value; - } - - public String getShortVersion() { - return shortVersion; - } - - public static Version getCurrent() { - if (current != null) - return current; - String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); - String vv = v[v.length - 1]; - for (Version one : values()) { - if (one.name().equalsIgnoreCase(vv)) { - current = one; - break; - } - } - return current; - } - - public boolean isLower(Version version) { - return getValue() < version.getValue(); - } - - public boolean isHigher(Version version) { - return getValue() > version.getValue(); - } - - public boolean isEqualOrLower(Version version) { - return getValue() <= version.getValue(); - } - - public boolean isEqualOrHigher(Version version) { - return getValue() >= version.getValue(); - } - - public static boolean isCurrentEqualOrHigher(Version v) { - return getCurrent().getValue() >= v.getValue(); - } - - public static boolean isCurrentHigher(Version v) { - return getCurrent().getValue() > v.getValue(); - } - - public static boolean isCurrentLower(Version v) { - return getCurrent().getValue() < v.getValue(); - } - - public static boolean isCurrentEqualOrLower(Version v) { - return getCurrent().getValue() <= v.getValue(); - } - } - public void VersionCheck(final Player player) { if (!plugin.getConfigManager().versionCheck()) return; diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java index 9301ef3d6..8f95f88ad 100644 --- a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java +++ b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java @@ -10,7 +10,7 @@ import org.bukkit.boss.BossBar; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; +import com.Zrips.CMI.utils.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index bafde4731..96c1c06e0 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -14,9 +14,9 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; -import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -29,17 +29,16 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; +import com.Zrips.CMI.utils.VersionChecker.Version; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.ConfigReader; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.containers.ELMessageType; import com.bekvon.bukkit.residence.containers.EconomyType; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.YmlMaker; public class ConfigManager { diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index b43277cc7..97035c53f 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -43,10 +43,10 @@ import org.kingdoms.main.Kingdoms; import org.kingdoms.manager.game.GameManagement; +import com.Zrips.CMI.utils.VersionChecker.Version; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.BossBar.BossBarManager; import com.bekvon.bukkit.residence.Placeholders.Placeholder; import com.bekvon.bukkit.residence.Placeholders.PlaceholderAPIHook; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java index 97f897ae3..7971f9513 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java @@ -9,8 +9,8 @@ import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.event.block.BlockPhysicsEvent; +import com.Zrips.CMI.utils.VersionChecker.Version; import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_16_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_16_R1.java new file mode 100644 index 000000000..73c1d06b7 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_16_R1.java @@ -0,0 +1,161 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Particle.DustOptions; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_16_R1.CraftParticle; +import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Bee; +import org.bukkit.entity.Cat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cod; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Dolphin; +import org.bukkit.entity.Donkey; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Fox; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Llama; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Panda; +import org.bukkit.entity.Parrot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.PolarBear; +import org.bukkit.entity.PufferFish; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Salmon; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Strider; +import org.bukkit.entity.TropicalFish; +import org.bukkit.entity.Turtle; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.cmiLib.CMIEffect; +import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_16_R1.Packet; +import net.minecraft.server.v1_16_R1.PacketPlayOutWorldParticles; + +public class v1_16_R1 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof Llama || + ent instanceof PolarBear || + ent instanceof Parrot || + ent instanceof Donkey || + ent instanceof Cod || + ent instanceof Salmon || + ent instanceof PufferFish || + ent instanceof TropicalFish || + ent instanceof Turtle || + ent instanceof Dolphin || + ent instanceof Fox || + ent instanceof Panda || + ent instanceof Cat || + ent instanceof Bee || + ent instanceof Strider); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public ItemStack itemInOffHand(Player player) { + return player.getInventory().getItemInOffHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + + CMIParticle effect = ef.getParticle(); + if (effect == null) + return; + if (!effect.isParticle()) { + return; + } + + org.bukkit.Particle particle = effect.getParticle(); + + if (particle == null) + return; + + DustOptions dd = null; + if (particle.equals(org.bukkit.Particle.REDSTONE)) + dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); + + Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), + (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); + + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 76cd1c156..de67ad33f 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -125,7 +125,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } if (resName == null) - resName = sender.getName() + (new Random().nextInt(10000)); + resName = sender.getName() + (new Random().nextInt(99950) + 50); player.performCommand((resadmin ? "resadmin" : "res") + " create " + resName); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index a8f392a5b..dd263d01f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -43,10 +43,10 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; +import com.Zrips.CMI.utils.VersionChecker.Version; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIBlock; import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.commands.auto.direction; @@ -59,7 +59,6 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceBlockListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 201e1a04a..32e932f8f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -55,9 +55,9 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; +import com.Zrips.CMI.utils.VersionChecker.Version; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -66,7 +66,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceEntityListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 653121573..3aa348d13 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -50,10 +50,10 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; +import com.Zrips.CMI.utils.VersionChecker.Version; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.CMIReflections; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index 7bfe30072..e19ada0b3 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -7,7 +7,7 @@ import org.bukkit.Location; import org.bukkit.World; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; +import com.Zrips.CMI.utils.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index bfdfeae2b..011a17de4 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -1,23 +1,5 @@ package com.bekvon.bukkit.residence.text.help; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.World; - -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.RawMessage; -import com.bekvon.bukkit.cmiLib.VersionChecker.Version; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.ResidenceCommandListener; -import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.HelpLines; -import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; - import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -29,6 +11,11 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.InvalidConfigurationException; @@ -36,6 +23,18 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; +import com.Zrips.CMI.utils.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.CMIChatColor; +import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.ResidenceCommandListener; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.HelpLines; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; + public class HelpEntry { protected String name; protected String desc; diff --git a/src/plugin.yml b/src/plugin.yml index b05702ab4..65fa314d9 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.0.5 +version: 4.9.0.6 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From d3b6052007fc077ea8aca7a2360bc58e4aa5cbff Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 8 Jul 2020 18:35:25 +0300 Subject: [PATCH 0740/1142] 1.16 --- .../bukkit/cmiLib/ActionBarTitleMessages.java | 28 ++++++------- .../bekvon/bukkit/cmiLib/CMIChatColor.java | 2 - src/com/bekvon/bukkit/cmiLib/CMIMaterial.java | 41 +++++++++---------- src/com/bekvon/bukkit/cmiLib/CMISlabType.java | 8 ++++ src/com/bekvon/bukkit/cmiLib/ItemManager.java | 7 +--- src/com/bekvon/bukkit/cmiLib/RawMessage.java | 4 +- .../bukkit/cmiLib/RawMessageManager.java | 9 ++-- .../residence/BossBar/BossBarManager.java | 2 +- .../bukkit/residence/ConfigManager.java | 2 +- .../bekvon/bukkit/residence/Residence.java | 2 +- .../bukkit/residence/allNms/v1_13Events.java | 2 +- .../bukkit/residence/containers/Flags.java | 2 +- .../listeners/ResidenceBlockListener.java | 2 +- .../listeners/ResidenceEntityListener.java | 2 +- .../listeners/ResidencePlayerListener.java | 10 ++--- .../selection/SchematicsManager.java | 2 +- .../bukkit/residence/text/help/HelpEntry.java | 2 +- src/plugin.yml | 2 +- 18 files changed, 63 insertions(+), 66 deletions(-) create mode 100644 src/com/bekvon/bukkit/cmiLib/CMISlabType.java diff --git a/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java index 314c9b734..02326bfa3 100644 --- a/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java +++ b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java @@ -94,7 +94,7 @@ else if (Version.isCurrentHigher(Version.v1_11_R1)) packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[2]); else if (Version.isCurrentHigher(Version.v1_7_R4)) { packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 2); - } else { + } else { packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 2); } Object player = getHandle.invoke(receivingPacket); @@ -156,14 +156,14 @@ public static void sendTitle(final Player receivingPacket, final Object title, f @Override public void run() { - String t = title == null ? null : CMIChatColor.translateAlternateColorCodes((String) title); - String s = subtitle == null ? null : CMIChatColor.translateAlternateColorCodes((String) subtitle); + String t = title == null ? null : CMIChatColor.translate((String) title); + String s = subtitle == null ? null : CMIChatColor.translate((String) subtitle); if (t != null && s == null && t.contains("%subtitle%")) { s = t.split("%subtitle%")[1]; t = t.split("%subtitle%")[0]; - t = t == null ? null : CMIChatColor.translateAlternateColorCodes(t); - s = s == null ? null : CMIChatColor.translateAlternateColorCodes(s); + t = t == null ? null : CMIChatColor.translate(t); + s = s == null ? null : CMIChatColor.translate(s); } if (simpleTitleMessages) { @@ -179,15 +179,6 @@ public void run() { case v1_11_R1: receivingPacket.sendTitle(t, s); break; - case v1_12_R1: - case v1_13_R1: - case v1_13_R2: - case v1_14_R1: - case v1_14_R2: - case v1_15_R1: - case v1_15_R2: - receivingPacket.sendTitle(t, s, fadeIn, keep, fadeOut); - break; case v1_7_R1: case v1_7_R2: case v1_7_R3: @@ -211,7 +202,16 @@ public void run() { } break; + case v1_12_R1: + case v1_13_R1: + case v1_13_R2: + case v1_14_R1: + case v1_14_R2: + case v1_15_R1: + case v1_15_R2: + case v1_16_R1: default: + receivingPacket.sendTitle(t, s, fadeIn, keep, fadeOut); break; } diff --git a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java index fe6f5be25..ffb52d14a 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java @@ -12,8 +12,6 @@ import org.bukkit.ChatColor; import org.bukkit.Color; -import com.Zrips.CMI.utils.VersionChecker.Version; - public class CMIChatColor { public static final String colorReplacerPlaceholder = "\uFF06"; diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java index dee1ce277..8ed016947 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java @@ -13,9 +13,6 @@ import org.bukkit.block.Skull; import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.cmiLib.ItemManager.SlabType; - public enum CMIMaterial { NONE(null, "None"), ACACIA_BOAT(447, 0, 27326, "Acacia Boat", "BOAT_ACACIA"), @@ -2622,24 +2619,24 @@ public boolean isSlab() { return false; } - public static SlabType getSlabType(Block block) { + public static CMISlabType getSlabType(Block block) { if (!isSlab(block.getType())) - return SlabType.NOTSLAB; + return CMISlabType.NOTSLAB; if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { if (block.getBlockData() instanceof org.bukkit.block.data.type.Slab) { org.bukkit.block.data.type.Slab slab = (org.bukkit.block.data.type.Slab) block.getBlockData(); - switch (slab.getType()) { - case TOP: - return SlabType.TOP; - case BOTTOM: - return SlabType.BOTTOM; - case DOUBLE: - return SlabType.DOUBLE; + switch (slab.getType().toString()) { + case "TOP": + return CMISlabType.TOP; + case "BOTTOM": + return CMISlabType.BOTTOM; + case "DOUBLE": + return CMISlabType.DOUBLE; } } - return SlabType.NOTSLAB; + return CMISlabType.NOTSLAB; } if (block.getType().name().contains("STEP")) { switch (CMIMaterial.get(block).getLegacyId()) { @@ -2653,9 +2650,9 @@ public static SlabType getSlabType(Block block) { case 5: case 6: case 7: - return SlabType.BOTTOM; + return CMISlabType.BOTTOM; default: - return SlabType.DOUBLE; + return CMISlabType.DOUBLE; } case 126: switch (block.getData()) { @@ -2665,28 +2662,28 @@ public static SlabType getSlabType(Block block) { case 3: case 4: case 5: - return SlabType.BOTTOM; + return CMISlabType.BOTTOM; default: - return SlabType.DOUBLE; + return CMISlabType.DOUBLE; } case 182: switch (block.getData()) { case 0: - return SlabType.BOTTOM; + return CMISlabType.BOTTOM; default: - return SlabType.DOUBLE; + return CMISlabType.DOUBLE; } case 205: switch (block.getData()) { case 0: - return SlabType.BOTTOM; + return CMISlabType.BOTTOM; default: - return SlabType.DOUBLE; + return CMISlabType.DOUBLE; } } } - return SlabType.NOTSLAB; + return CMISlabType.NOTSLAB; } public boolean equals(Material mat) { diff --git a/src/com/bekvon/bukkit/cmiLib/CMISlabType.java b/src/com/bekvon/bukkit/cmiLib/CMISlabType.java new file mode 100644 index 000000000..53f64e4f7 --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/CMISlabType.java @@ -0,0 +1,8 @@ +package com.bekvon.bukkit.cmiLib; + +public enum CMISlabType { + TOP, + BOTTOM, + DOUBLE, + NOTSLAB; +} diff --git a/src/com/bekvon/bukkit/cmiLib/ItemManager.java b/src/com/bekvon/bukkit/cmiLib/ItemManager.java index bf104ef88..9796b56b0 100644 --- a/src/com/bekvon/bukkit/cmiLib/ItemManager.java +++ b/src/com/bekvon/bukkit/cmiLib/ItemManager.java @@ -538,11 +538,6 @@ public Material getMaterial(String name) { // one.setName(one.getName().replace("[entityNames]", CMIEntityType.getById(one.getData()).getName())); // return one; // } - public enum SlabType { - TOP, - BOTTOM, - DOUBLE, - NOTSLAB; - } + } diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessage.java b/src/com/bekvon/bukkit/cmiLib/RawMessage.java index e2bccf45a..2478ea196 100644 --- a/src/com/bekvon/bukkit/cmiLib/RawMessage.java +++ b/src/com/bekvon/bukkit/cmiLib/RawMessage.java @@ -72,8 +72,10 @@ public RawMessage add(String text, String hoverText, String command, String sugg CMIChatColor firstBlockColor = null; private String intoJsonColored(String text) { - if (text.equalsIgnoreCase(" ")) + if (text.equalsIgnoreCase(" ")) { + text = "{\"text\":\" \"}"; return text; + } text = CMIChatColor.deColorize(text); diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessageManager.java b/src/com/bekvon/bukkit/cmiLib/RawMessageManager.java index 71b9d3ada..3c54f3c0d 100644 --- a/src/com/bekvon/bukkit/cmiLib/RawMessageManager.java +++ b/src/com/bekvon/bukkit/cmiLib/RawMessageManager.java @@ -8,9 +8,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.Zrips.CMI.CMI; -import com.Zrips.CMI.utils.VersionChecker.Version; - public class RawMessageManager { private static Object packet; @@ -43,8 +40,8 @@ public class RawMessageManager { sub = consts[2].getClass(); } } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { - CMI.getInstance().consoleMessage("Error {0} "); - CMI.getInstance().consoleMessage(ex.toString()); + Bukkit.getConsoleSender().sendMessage("Error {0} "); + Bukkit.getConsoleSender().sendMessage(ex.toString()); } } @@ -79,7 +76,7 @@ else if (Version.isCurrentHigher(Version.v1_7_R4)) { sendPacket.invoke(connection, packet); } catch (Exception ex) { ex.printStackTrace(); - CMI.getInstance().consoleMessage("Failed to show json message with packets, using command approach"); + Bukkit.getConsoleSender().sendMessage("Failed to show json message with packets, using command approach"); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "minecraft:tellraw \"" + receivingPacket.getName() + "\" " + json); } } diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java index 8f95f88ad..5b2fc213c 100644 --- a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java +++ b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java @@ -10,7 +10,7 @@ import org.bukkit.boss.BossBar; import org.bukkit.entity.Player; -import com.Zrips.CMI.utils.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 96c1c06e0..cfeb573a1 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -29,7 +29,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; -import com.Zrips.CMI.utils.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.ConfigReader; diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 97035c53f..f7bb9ab30 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -43,7 +43,7 @@ import org.kingdoms.main.Kingdoms; import org.kingdoms.manager.game.GameManagement; -import com.Zrips.CMI.utils.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java index 7971f9513..6c18183a2 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java @@ -9,8 +9,8 @@ import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.event.block.BlockPhysicsEvent; -import com.Zrips.CMI.utils.VersionChecker.Version; import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions; diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 820da350f..a29674330 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -77,7 +77,7 @@ public enum Flags { night(CMIMaterial.BLACK_WOOL, FlagMode.Residence, "Sets night time in residence", true), nofly(CMIMaterial.ORANGE_CARPET, FlagMode.Both, "Allows or denys fly in residence", false), fly(CMIMaterial.ORANGE_CARPET, FlagMode.Both, "Toggles fly for players in residence", false), - nomobs(CMIMaterial.BARRIER, FlagMode.Residence, "Prevents monsters from entering residence", true), + nomobs(CMIMaterial.BARRIER, FlagMode.Residence, "Prevents monsters from entering residence. Requires AutoMobRemoval to be enabled", true), note(CMIMaterial.NOTE_BLOCK, FlagMode.Both, "Allows or denys players to use note blocks", true), nodurability(CMIMaterial.ANVIL, FlagMode.Residence, "Prevents item durability loss", false), overridepvp(CMIMaterial.IRON_SWORD, FlagMode.Residence, "Overrides any plugin pvp protection", false), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index dd263d01f..d6ce6bff0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -43,7 +43,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; -import com.Zrips.CMI.utils.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIBlock; import com.bekvon.bukkit.cmiLib.CMIMaterial; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 32e932f8f..940e8a55e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -55,7 +55,7 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; -import com.Zrips.CMI.utils.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.residence.ConfigManager; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3aa348d13..c867063f2 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -50,7 +50,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.Zrips.CMI.utils.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.CMIReflections; @@ -557,11 +557,11 @@ public void onFlagChangeSunRain(ResidenceFlagChangeEvent event) { break; case TRUE: if (event.getFlag().equalsIgnoreCase(Flags.sun.toString())) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setPlayerWeather(WeatherType.CLEAR); + for (Player player : event.getResidence().getPlayersInResidence()) + player.setPlayerWeather(WeatherType.CLEAR); if (event.getFlag().equalsIgnoreCase(Flags.rain.toString())) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setPlayerWeather(WeatherType.DOWNFALL); + for (Player player : event.getResidence().getPlayersInResidence()) + player.setPlayerWeather(WeatherType.DOWNFALL); break; default: break; diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index e19ada0b3..bf232965f 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -7,7 +7,7 @@ import org.bukkit.Location; import org.bukkit.World; -import com.Zrips.CMI.utils.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 011a17de4..9ecfe76be 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -23,7 +23,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; -import com.Zrips.CMI.utils.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; diff --git a/src/plugin.yml b/src/plugin.yml index 65fa314d9..49dec2033 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.0.6 +version: 4.9.1.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From b37a491438469f186e4cd9f4a96eb65405d202c6 Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Mon, 13 Jul 2020 13:14:38 +0800 Subject: [PATCH 0741/1142] Update YMLSaveHelper.java --- src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java index 3a5962b6f..50d1a9b97 100644 --- a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java +++ b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java @@ -33,6 +33,8 @@ public YMLSaveHelper(File ymlfile) throws IOException { } public void save() throws IOException { + if (f.getParentFile() != null && !f.getParentFile().exists()) + f.getParentFile().mkdirs(); if (f.isFile()) f.delete(); FileOutputStream fout = new FileOutputStream(f); From 4d9bc363a17106c10b66d7550234f5103e0576a8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jul 2020 12:56:22 +0300 Subject: [PATCH 0742/1142] Lets not show world data loading messages for worlds which are disabled --- src/com/bekvon/bukkit/residence/Residence.java | 16 ++++++++++++++-- .../residence/protection/ResidenceManager.java | 8 +++++--- src/plugin.yml | 2 +- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f7bb9ab30..471ab68a7 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1368,7 +1368,8 @@ protected boolean loadYml() throws Exception { loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); if (loadFile.isFile()) { time = System.currentTimeMillis(); - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading save data for world " + world.getName() + "..."); + if (!isDisabledWorld(world)) + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading save data for world " + world.getName() + "..."); yml = new YMLSaveHelper(loadFile); yml.load(); @@ -1414,7 +1415,8 @@ protected boolean loadYml() throws Exception { int pass = (int) (System.currentTimeMillis() - time); String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loaded " + world.getName() + " data. (" + PastTime + ")"); + if (!isDisabledWorld(world)) + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loaded " + world.getName() + " data. (" + PastTime + ")"); } } @@ -1810,6 +1812,16 @@ public String getPlayerName(UUID uuid) { return null; } + public boolean isDisabledWorld(World world) { + return isDisabledWorld(world.getName()); + } + + public boolean isDisabledWorld(String worldname) { + if (getConfigManager().DisabledWorldsList.contains(worldname)) + return true; + return false; + } + public boolean isDisabledWorldListener(World world) { return isDisabledWorldListener(world.getName()); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index a2a23836e..04a101512 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -982,7 +982,8 @@ public void load(Map root) throws Exception { @SuppressWarnings("unchecked") Map reslist = (Map) root.get(world.getName()); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + world.getName() + " data into memory..."); + if (!plugin.isDisabledWorld(world)) + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + world.getName() + " data into memory..."); if (reslist != null) { try { chunkResidences.put(world.getName(), loadMap(world.getName(), reslist)); @@ -996,8 +997,9 @@ public void load(Map root) throws Exception { long pass = System.currentTimeMillis() - time; String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + world.getName() + " data into memory. (" + PastTime + ") -> " + (reslist == null ? "0" : reslist.size()) - + " residences"); + if (!plugin.isDisabledWorld(world)) + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + world.getName() + " data into memory. (" + PastTime + ") -> " + (reslist == null ? "0" : reslist.size()) + + " residences"); } clearLoadChache(); diff --git a/src/plugin.yml b/src/plugin.yml index 49dec2033..75f5baf91 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.1.1 +version: 4.9.1.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 531813f1177f3b716ebc6c87869454f74cc94512 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jul 2020 13:03:12 +0300 Subject: [PATCH 0743/1142] Lets allow to load plugin when Kingdoms compatibility fails --- src/com/bekvon/bukkit/residence/Residence.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 471ab68a7..72abf5a3e 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -949,8 +949,8 @@ private void setKingdoms() { if (Bukkit.getPluginManager().getPlugin("Kingdoms") != null) { try { kingdomsmanager = Kingdoms.getManagers(); - } catch (NoClassDefFoundError | Exception e) { - + } catch (Throwable e) { + this.consoleMessage("Failed to recognize Kingdoms plugin. Compatability disabled"); } } } From 96b7128d5753d3ef9c38143ce200d6c2a5a2bf78 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jul 2020 13:16:05 +0300 Subject: [PATCH 0744/1142] Fixing anvil flag --- .../residence/listeners/ResidencePlayerListener.java | 11 +++++------ .../bukkit/residence/protection/FlagPermissions.java | 10 +++++++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c867063f2..1886f057d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -76,6 +76,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -830,8 +831,7 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) - && !ResPerm.bypass_nofly.hasPermission(player, 10000L) - ) { + && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null && res.isOwner(player)) @@ -928,6 +928,8 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { case "FLOWER_POT": case "COMMAND": case "ANVIL": + case "CHIPPED_ANVIL": + case "DAMAGED_ANVIL": case "CAKE_BLOCK": case "DIODE": case "DIODE_BLOCK_OFF": @@ -1073,8 +1075,7 @@ public void onPlatePress(PlayerInteractEvent event) { boolean hasuse = perms.playerHas(player, Flags.use, true); boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); if ((!hasuse && !haspressure || !haspressure) && mat.isPlate() - && !ResPerm.bypass_use.hasPermission(player, 10000L) - ) { + && !ResPerm.bypass_use.hasPermission(player, 10000L)) { event.setCancelled(true); return; } @@ -1210,7 +1211,6 @@ public void onPlayerInteract(PlayerInteractEvent event) { || isCanUseEntity_BothClick(mat, block))) { if (!heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) && !heldItem.isDye() && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { - return; } } @@ -1263,7 +1263,6 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasuse = perms.playerHas(player, Flags.use, true); ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index af607cb75..4ef90896e 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -229,7 +229,11 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.NOTE_BLOCK, Flags.note); addMaterialToUseFlag(Material.DRAGON_EGG, Flags.egg); addMaterialToUseFlag(CMIMaterial.COMMAND_BLOCK.getMaterial(), Flags.commandblock); - addMaterialToUseFlag(Material.ANVIL, Flags.anvil); + + addMaterialToUseFlag(CMIMaterial.ANVIL.getMaterial(), Flags.anvil); + addMaterialToUseFlag(CMIMaterial.CHIPPED_ANVIL.getMaterial(), Flags.anvil); + addMaterialToUseFlag(CMIMaterial.DAMAGED_ANVIL.getMaterial(), Flags.anvil); + addMaterialToUseFlag(Material.FLOWER_POT, Flags.flowerpot); addMaterialToUseFlag(Material.BEACON, Flags.beacon); addMaterialToUseFlag(Material.JUKEBOX, Flags.container); @@ -408,7 +412,7 @@ public boolean setPlayerFlag(String player, String flag, FlagState state) { } else if (state == FlagState.TRUE) { map.put(flag, true); } else if (state == FlagState.NEITHER) { - map.remove(flag); + map.remove(flag); } if (map.isEmpty()) this.removeAllPlayerFlags(player); @@ -451,7 +455,7 @@ public boolean setGroupFlag(String group, String flag, FlagState state) { } else if (state == FlagState.TRUE) { map.put(flag, true); } else if (state == FlagState.NEITHER) { - map.remove(flag); + map.remove(flag); } if (map.isEmpty()) { groupFlags.remove(group); From d91d9bf47d50949c220297a8ece21c4393d854f4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jul 2020 13:45:48 +0300 Subject: [PATCH 0745/1142] Cakes are right click too --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 3 ++- .../bekvon/bukkit/residence/protection/FlagPermissions.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 1886f057d..23f66ab1a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -921,9 +921,9 @@ private boolean isContainer(Material mat, Block block) { } private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { - switch (mat.name()) { case "ITEM_FRAME": + case "CAKE": case "BEACON": case "FLOWER_POT": case "COMMAND": @@ -1209,6 +1209,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block))) { + if (!heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) && !heldItem.isDye() && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { return; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 4ef90896e..20742d2cf 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -257,7 +257,7 @@ public static void initValidFlags() { addMaterialToUseFlag(CMIMaterial.STONECUTTER.getMaterial(), Flags.container); addMaterialToUseFlag(Material.DISPENSER, Flags.container); - addMaterialToUseFlag(CMIMaterial.CAKE.getMaterial(), Flags.cake); +// addMaterialToUseFlag(CMIMaterial.CAKE.getMaterial(), Flags.cake); } public static FlagPermissions parseFromConfigNode(String name, ConfigurationSection node) { From 246da2092709d96073d291f25c87580394040414 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jul 2020 14:13:41 +0300 Subject: [PATCH 0746/1142] Lets ignore air by default for item blacklist --- src/com/bekvon/bukkit/residence/commands/material.java | 2 +- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index ec665425f..88592c6a0 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -25,7 +25,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return false; } try { - plugin.msg(player, lm.General_MaterialGet, args[0], CMIMaterial.get(Integer.parseInt(args[0])).getName()); + plugin.msg(player, lm.General_MaterialGet, args[0], CMIMaterial.get(args[0]).getName()); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Material); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 23f66ab1a..ccf34d5c1 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1223,7 +1223,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (resadmin) return; - if (!plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld().getName())) { + if (!heldItem.isAir() && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld().getName())) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; From 362d8c37574de2fc886fe4e0616e19a00c20cf57 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jul 2020 14:24:16 +0300 Subject: [PATCH 0747/1142] Better tabcomplete for message command --- .../bukkit/residence/commands/message.java | 2 +- .../listeners/ResidencePlayerListener.java | 7 ++++--- .../bukkit/residence/text/help/HelpEntry.java | 20 +++++++++++++++++++ src/groups.yml | 2 ++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 40f0c8cb5..f37482565 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -95,6 +95,6 @@ public void getLocale() { c.get("Description", "Manage residence enter / leave messages"); c.get("Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%enter%%leave", "enter%%leave")); + Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]", "enter%%leave", "[enter]%%[leave]")); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ccf34d5c1..f04e3b0e8 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2371,9 +2371,10 @@ private StuckInfo updateStuckTeleport(Player player, Location loc) { public String insertMessages(Player player, ClaimedResidence res, String message) { try { - message = message.replaceAll("%player", player.getName()); - message = message.replaceAll("%owner", res.getPermissions().getOwner()); - message = message.replaceAll("%residence", res.getName()); + message = message.replace("%player", player.getName()); + message = message.replace("%owner", res.getPermissions().getOwner()); + message = message.replace("%residence", res.getName()); + message = message.replace("%subzone", res.getResidenceName()); } catch (Exception ex) { return ""; } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 9ecfe76be..14247593f 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -378,6 +378,26 @@ public Set getSubCommands(CommandSender sender, String[] args) { } } break; + case "[enter]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getEnterMessage(); + if (resName != null) + subCommands.add(CMIChatColor.deColorize(resName)); + } + } + break; + case "[leave]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getLeaveMessage(); + if (resName != null) + subCommands.add(CMIChatColor.deColorize(resName)); + } + } + break; case "[residenceshop]": for (ClaimedResidence one : Residence.getInstance().getResidenceManager().getShops()) { subCommands.add(one.getName()); diff --git a/src/groups.yml b/src/groups.yml index 832388a67..58b97bc77 100644 --- a/src/groups.yml +++ b/src/groups.yml @@ -62,9 +62,11 @@ Groups: # Whether or not the player can change the Residence enter and leave messages. CanChange: true # The default enter message to apply to new Residences created by players in this group. + # Use %subzone if you want to include only current residence name without including parent zones into name # Leaving the message blank will disable it. DefaultEnter: "Welcome %player to %residence, owned by %owner." # The default leave message to apply to new Residences created by players in this group. + # Use %subzone if you want to include only current residence name without including parent zones into name # Leaving the message blank will disable it. DefaultLeave: "Now leaving %residence." # Options relating to the Lease system. From 405c6c3737f86aaef3ebceff50ad60df4bc4f6ef Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jul 2020 14:25:57 +0300 Subject: [PATCH 0748/1142] Allow %zone variable in enter/leave message to include zones name --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 +- src/groups.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index f04e3b0e8..62d223bc4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2374,7 +2374,7 @@ public String insertMessages(Player player, ClaimedResidence res, String message message = message.replace("%player", player.getName()); message = message.replace("%owner", res.getPermissions().getOwner()); message = message.replace("%residence", res.getName()); - message = message.replace("%subzone", res.getResidenceName()); + message = message.replace("%zone", res.getResidenceName()); } catch (Exception ex) { return ""; } diff --git a/src/groups.yml b/src/groups.yml index 58b97bc77..353d3052d 100644 --- a/src/groups.yml +++ b/src/groups.yml @@ -62,11 +62,11 @@ Groups: # Whether or not the player can change the Residence enter and leave messages. CanChange: true # The default enter message to apply to new Residences created by players in this group. - # Use %subzone if you want to include only current residence name without including parent zones into name + # Use %zone if you want to include only current residence name without including parent zones into name # Leaving the message blank will disable it. DefaultEnter: "Welcome %player to %residence, owned by %owner." # The default leave message to apply to new Residences created by players in this group. - # Use %subzone if you want to include only current residence name without including parent zones into name + # Use %zone if you want to include only current residence name without including parent zones into name # Leaving the message blank will disable it. DefaultLeave: "Now leaving %residence." # Options relating to the Lease system. From ecff72e07392af1b6d0de1cacc775d641290d131 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jul 2020 14:37:38 +0300 Subject: [PATCH 0749/1142] Lets fix random teleportation config section --- src/com/bekvon/bukkit/residence/ConfigManager.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index cfeb573a1..61352919b 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -727,7 +727,7 @@ public void UpdateConfigFile() { for (String one : sec.getKeys(false)) { String path = "Global.RandomTeleportation.Worlds." + one + "."; - boolean enabled = c.get("Enabled", true); + boolean enabled = c.get(path + "Enabled", true); if (!commented) c.addComment("Global.RandomTeleportation.Worlds." + one, @@ -735,14 +735,14 @@ public void UpdateConfigFile() { if (!commented) c.addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); - int MaxCoord = c.get("MaxCoord", 1000); + int MaxCoord = c.get(path + "MaxCoord", 1000); if (!commented) c.addComment(path + "MinCoord", "If maxcoord set to 1000 and mincoord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); - int MinCoord = c.get("MinCoord", c.getC().getInt(path + "MinCord", 500)); - int CenterX = c.get("CenterX", 0); - int CenterZ = c.get("CenterZ", 0); + int MinCoord = c.get(path + "MinCoord", c.getC().getInt(path + "MinCord", 500)); + int CenterX = c.get(path + "CenterX", 0); + int CenterZ = c.get(path + "CenterZ", 0); World w = getWorld(one); From 0b98b8251269a8e05c5ff623b0bddcafab5d4546 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jul 2020 14:52:12 +0300 Subject: [PATCH 0750/1142] New Title and action bar managers --- src/com/bekvon/bukkit/CMIGUI/CMIGui.java | 2 - .../bekvon/bukkit/CMIGUI/CMIGuiButton.java | 16 +- .../bukkit/cmiLib/ActionBarManager.java | 93 ++++++ .../bukkit/cmiLib/ActionBarTitleMessages.java | 278 ---------------- .../bukkit/cmiLib/TitleMessageManager.java | 136 ++++++++ .../bukkit/residence/ConfigManager.java | 2 +- .../bekvon/bukkit/residence/Residence.java | 2 - .../listeners/ResidenceBlockListener.java | 6 +- .../listeners/ResidenceEntityListener.java | 8 +- .../listeners/ResidencePlayerListener.java | 20 +- .../protection/ClaimedResidence.java | 4 +- .../residence/selection/SelectionManager.java | 4 +- .../bukkit/residence/text/help/HelpEntry.java | 313 +++++++++--------- 13 files changed, 413 insertions(+), 471 deletions(-) create mode 100644 src/com/bekvon/bukkit/cmiLib/ActionBarManager.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java create mode 100644 src/com/bekvon/bukkit/cmiLib/TitleMessageManager.java diff --git a/src/com/bekvon/bukkit/CMIGUI/CMIGui.java b/src/com/bekvon/bukkit/CMIGUI/CMIGui.java index 31b60f092..db7818056 100644 --- a/src/com/bekvon/bukkit/CMIGUI/CMIGui.java +++ b/src/com/bekvon/bukkit/CMIGUI/CMIGui.java @@ -19,8 +19,6 @@ import com.bekvon.bukkit.CMIGUI.GUIManager.InvType; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.CMIReflections; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.text.help.PageInfo; public class CMIGui { diff --git a/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java b/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java index afb186acb..c66d5f3f7 100644 --- a/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java +++ b/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java @@ -6,7 +6,6 @@ import java.util.List; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -15,6 +14,7 @@ import com.bekvon.bukkit.CMIGUI.GUIManager.GUIClickType; import com.bekvon.bukkit.CMIGUI.GUIManager.GUIFieldType; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.CMIItemStack; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.CMIReflections; @@ -87,7 +87,7 @@ public CMIGuiButton(Integer slot, CMIMaterial material, String name) { this.item = material == null ? null : material.newItemStack(); if (name != null) { ItemMeta meta = this.item.getItemMeta(); - meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); + meta.setDisplayName(CMIChatColor.translate(name)); this.item.setItemMeta(meta); } } @@ -98,7 +98,7 @@ public CMIGuiButton(Integer slot, Material material, int data, String name) { this.item = new ItemStack(material, 1, (short) data); if (name != null) { ItemMeta meta = this.item.getItemMeta(); - meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); + meta.setDisplayName(CMIChatColor.translate(name)); this.item.setItemMeta(meta); } } @@ -230,7 +230,7 @@ public CMIGuiButton setName(String name) { return this; ItemMeta meta = this.item.getItemMeta(); if (meta != null) { - meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); + meta.setDisplayName(CMIChatColor.translate(name)); this.item.setItemMeta(meta); } return this; @@ -270,15 +270,15 @@ public CMIGuiButton addLore(String l) { if (l.contains("\\n")) { String[] split = l.split("\\\\n"); for (String one : split) { - lore.add(ChatColor.translateAlternateColorCodes('&', one)); + lore.add(CMIChatColor.translate(one)); } } else if (l.contains("\n")) { String[] split = l.split("\\n"); for (String one : split) { - lore.add(ChatColor.translateAlternateColorCodes('&', one)); + lore.add(CMIChatColor.translate(one)); } } else - lore.add(ChatColor.translateAlternateColorCodes('&', l)); + lore.add(CMIChatColor.translate(l)); meta.setLore(lore); this.item.setItemMeta(meta); } @@ -300,7 +300,7 @@ public CMIGuiButton addItemName(String name) { if (this.item == null) return this; ItemMeta meta = this.item.getItemMeta(); - meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); + meta.setDisplayName(CMIChatColor.translate(name)); this.item.setItemMeta(meta); return this; } diff --git a/src/com/bekvon/bukkit/cmiLib/ActionBarManager.java b/src/com/bekvon/bukkit/cmiLib/ActionBarManager.java new file mode 100644 index 000000000..201fb0ea8 --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/ActionBarManager.java @@ -0,0 +1,93 @@ +package com.bekvon.bukkit.cmiLib; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ActionBarManager { + private static Object packet; + private static Method getHandle; + private static Method sendPacket; + private static Field playerConnection; + private static Class nmsChatSerializer; + private static Class nmsIChatBaseComponent; + private static Class packetType; + + private static Class ChatMessageclz; + private static Class sub; + private static Object[] consts; + + static { + if (Version.isCurrentHigher(Version.v1_7_R4)) { + Version version = Version.getCurrent(); + try { + packetType = Class.forName("net.minecraft.server." + version + ".PacketPlayOutChat"); + Class typeCraftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer"); + Class typeNMSPlayer = Class.forName("net.minecraft.server." + version + ".EntityPlayer"); + Class typePlayerConnection = Class.forName("net.minecraft.server." + version + ".PlayerConnection"); + nmsChatSerializer = Class.forName(getChatSerializerClasspath()); + nmsIChatBaseComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent"); + getHandle = typeCraftPlayer.getMethod("getHandle"); + playerConnection = typeNMSPlayer.getField("playerConnection"); + sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet")); + if (Version.isCurrentHigher(Version.v1_11_R1)) { + ChatMessageclz = Class.forName("net.minecraft.server." + version + ".ChatMessageType"); + consts = ChatMessageclz.getEnumConstants(); + sub = consts[2].getClass(); + } + } catch (Exception ex) { + Bukkit.getConsoleSender().sendMessage(ex.toString()); + } + } + } + + public static void send(CommandSender receivingPacket, String msg) { + if (receivingPacket instanceof Player) + send((Player) receivingPacket, msg); + else + receivingPacket.sendMessage(msg); + } + + public static void send(Player receivingPacket, String msg) { + if (receivingPacket == null || !receivingPacket.isOnline() || msg == null) + return; + + try { + if (!Version.getCurrent().isHigher(Version.v1_7_R4) || nmsChatSerializer == null) { + receivingPacket.sendMessage(CMIChatColor.translate(msg)); + return; + } + + RawMessage rm = new RawMessage(); + rm.add(msg); + Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, CMIChatColor.translate(rm.getRaw())); + if (Version.isCurrentHigher(Version.v1_15_R1)) + packet = packetType.getConstructor(nmsIChatBaseComponent, sub, UUID.class).newInstance(serialized, consts[2], receivingPacket.getUniqueId()); + else if (Version.isCurrentHigher(Version.v1_11_R1)) { + packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[2]); + } else if (Version.isCurrentHigher(Version.v1_7_R4)) { + packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 2); + } else { + packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 2); + } + Object player = getHandle.invoke(receivingPacket); + Object connection = playerConnection.get(player); + + sendPacket.invoke(connection, packet); + return; + + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + private static String getChatSerializerClasspath() { + if (!Version.isCurrentHigher(Version.v1_8_R2)) + return "net.minecraft.server." + Version.getCurrent() + ".ChatSerializer"; + return "net.minecraft.server." + Version.getCurrent() + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent + } +} diff --git a/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java b/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java deleted file mode 100644 index 02326bfa3..000000000 --- a/src/com/bekvon/bukkit/cmiLib/ActionBarTitleMessages.java +++ /dev/null @@ -1,278 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.UUID; -import java.util.logging.Level; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; - -public class ActionBarTitleMessages { - private static Object packet; - private static Method getHandle; - private static Method sendPacket; - private static Field playerConnection; - private static Class nmsChatSerializer; - private static Class nmsIChatBaseComponent; - private static Class packetType; - - private static Constructor nmsPacketPlayOutTitle; - private static Class enumTitleAction; - private static Method fromString; - private static boolean simpleTitleMessages = false; - - private static Class ChatMessageclz; - private static Class sub; - private static Object[] consts; - - static { - try { - packetType = Class.forName(getPacketPlayOutChat()); - Class typeCraftPlayer = Class.forName(getCraftPlayerClasspath()); - Class typeNMSPlayer = Class.forName(getNMSPlayerClasspath()); - Class typePlayerConnection = Class.forName(getPlayerConnectionClasspath()); - nmsChatSerializer = Class.forName(getChatSerializerClasspath()); - nmsIChatBaseComponent = Class.forName(getIChatBaseComponentClasspath()); - getHandle = typeCraftPlayer.getMethod("getHandle"); - playerConnection = typeNMSPlayer.getField("playerConnection"); - sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName(getPacketClasspath())); - - if (Version.isCurrentHigher(Version.v1_11_R1)) { - ChatMessageclz = Class.forName(getChatMessageTypeClasspath()); - consts = ChatMessageclz.getEnumConstants(); - sub = consts[2].getClass(); - } - - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); - } - // Title - try { - Class typePacketPlayOutTitle = Class.forName(getPacketPlayOutTitleClasspath()); - enumTitleAction = Class.forName(getEnumTitleActionClasspath()); - nmsPacketPlayOutTitle = typePacketPlayOutTitle.getConstructor(enumTitleAction, nmsIChatBaseComponent); - fromString = Class.forName(getClassMessageClasspath()).getMethod("fromString", String.class); - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) { - simpleTitleMessages = true; - } - } - - public static void send(CommandSender receivingPacket, String msg) { - if (receivingPacket instanceof Player) - send((Player) receivingPacket, msg); - else - receivingPacket.sendMessage(msg); - } - - public static void send(Player receivingPacket, String msg) { - if (receivingPacket == null) - return; - if (!receivingPacket.isOnline()) - return; - if (msg == null) - return; - try { - if (!Version.getCurrent().isHigher(Version.v1_7_R4) || nmsChatSerializer == null) { - receivingPacket.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - return; - } - - RawMessage rm = new RawMessage(); - rm.add(msg); - - Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, ChatColor.translateAlternateColorCodes('&', rm.getRaw())); - if (Version.isCurrentHigher(Version.v1_15_R1)) - packet = packetType.getConstructor(nmsIChatBaseComponent, sub, UUID.class).newInstance(serialized, consts[2], receivingPacket.getUniqueId()); - else if (Version.isCurrentHigher(Version.v1_11_R1)) - packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[2]); - else if (Version.isCurrentHigher(Version.v1_7_R4)) { - packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 2); - } else { - packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 2); - } - Object player = getHandle.invoke(receivingPacket); - Object connection = playerConnection.get(player); - sendPacket.invoke(connection, packet); - } catch (Exception ex) { -// Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); - } - - try { - Object player = getHandle.invoke(receivingPacket); - Object connection = playerConnection.get(player); - sendPacket.invoke(connection, packet); - } catch (Exception ex) { -// Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); - } - } - - public static void sendRaw(Player receivingPacket, String msg) { - if (receivingPacket == null) - return; - if (!receivingPacket.isOnline()) - return; - if (msg == null) - return; - try { - Method meth = nmsChatSerializer.getMethod("a", String.class); - - RawMessage rm = new RawMessage(); - rm.add(msg); - Object serialized = meth.invoke(null, ChatColor.translateAlternateColorCodes('&', rm.getRaw())); - if (Version.isCurrentHigher(Version.v1_15_R1)) - packet = packetType.getConstructor(nmsIChatBaseComponent, sub, UUID.class).newInstance(serialized, consts[1], receivingPacket.getUniqueId()); - else if (Version.isCurrentHigher(Version.v1_11_R1)) - packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[1]); - else if (Version.isCurrentHigher(Version.v1_7_R4)) { - packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 1); - } else { - packet = packetType.getConstructor(nmsIChatBaseComponent, boolean.class).newInstance(serialized, true); - } - Object player = getHandle.invoke(receivingPacket); - Object connection = playerConnection.get(player); - sendPacket.invoke(connection, packet); - } catch (Exception ex) { - Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); - } - } - - public static void sendTitle(final Player receivingPacket, final Object title) { - sendTitle(receivingPacket, title, null, 0, 20, 20); - } - - public static void sendTitle(final Player receivingPacket, final Object title, final Object subtitle) { - sendTitle(receivingPacket, title, subtitle, 0, 20, 20); - } - - public static void sendTitle(final Player receivingPacket, final Object title, final Object subtitle, final int fadeIn, final int keep, final int fadeOut) { - Bukkit.getScheduler().runTaskAsynchronously(Residence.getInstance(), new Runnable() { - @Override - public void run() { - - String t = title == null ? null : CMIChatColor.translate((String) title); - String s = subtitle == null ? null : CMIChatColor.translate((String) subtitle); - - if (t != null && s == null && t.contains("%subtitle%")) { - s = t.split("%subtitle%")[1]; - t = t.split("%subtitle%")[0]; - t = t == null ? null : CMIChatColor.translate(t); - s = s == null ? null : CMIChatColor.translate(s); - } - - if (simpleTitleMessages) { - receivingPacket.sendMessage(t); - receivingPacket.sendMessage(s); - return; - } - try { - switch (Version.getCurrent()) { - case v1_9_R1: - case v1_9_R2: - case v1_10_R1: - case v1_11_R1: - receivingPacket.sendTitle(t, s); - break; - case v1_7_R1: - case v1_7_R2: - case v1_7_R3: - case v1_7_R4: - case v1_8_R1: - case v1_8_R2: - case v1_8_R3: - if (title != null) { - Object packetTitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("TITLE").get(null), - ((Object[]) fromString.invoke(null, t))[0]); - sendPacket(receivingPacket, packetTitle); - } - if (subtitle != null) { - if (title == null) { - Object packetTitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("TITLE").get(null), ((Object[]) fromString.invoke(null, ""))[0]); - sendPacket(receivingPacket, packetTitle); - } - Object packetSubtitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("SUBTITLE").get(null), - ((Object[]) fromString.invoke(null, s))[0]); - sendPacket(receivingPacket, packetSubtitle); - } - - break; - case v1_12_R1: - case v1_13_R1: - case v1_13_R2: - case v1_14_R1: - case v1_14_R2: - case v1_15_R1: - case v1_15_R2: - case v1_16_R1: - default: - receivingPacket.sendTitle(t, s, fadeIn, keep, fadeOut); - break; - } - - } catch (SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchFieldException ex) { - simpleTitleMessages = true; - Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully support title messages. They will be shown in chat instead."); - } - return; - } - }); - } - - private static void sendPacket(Player player, Object packet) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { - Object handle = getHandle.invoke(player); - Object connection = playerConnection.get(handle); - sendPacket.invoke(connection, packet); - } - - private static String getCraftPlayerClasspath() { - return "org.bukkit.craftbukkit." + Version.getCurrent() + ".entity.CraftPlayer"; - } - - private static String getPlayerConnectionClasspath() { - return "net.minecraft.server." + Version.getCurrent() + ".PlayerConnection"; - } - - private static String getNMSPlayerClasspath() { - return "net.minecraft.server." + Version.getCurrent() + ".EntityPlayer"; - } - - private static String getPacketClasspath() { - return "net.minecraft.server." + Version.getCurrent() + ".Packet"; - } - - private static String getIChatBaseComponentClasspath() { - return "net.minecraft.server." + Version.getCurrent() + ".IChatBaseComponent"; - } - - private static String getChatSerializerClasspath() { - if (!Version.isCurrentHigher(Version.v1_8_R2)) - return "net.minecraft.server." + Version.getCurrent() + ".ChatSerializer"; - return "net.minecraft.server." + Version.getCurrent() + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent - } - - private static String getPacketPlayOutChat() { - return "net.minecraft.server." + Version.getCurrent() + ".PacketPlayOutChat"; - } - - private static String getPacketPlayOutTitleClasspath() { - return "net.minecraft.server." + Version.getCurrent() + ".PacketPlayOutTitle"; - } - - private static String getEnumTitleActionClasspath() { - return getPacketPlayOutTitleClasspath() + "$EnumTitleAction"; - } - - private static String getClassMessageClasspath() { - return "org.bukkit.craftbukkit." + Version.getCurrent() + ".util.CraftChatMessage"; - } - - private static String getChatMessageTypeClasspath() { - return "net.minecraft.server." + Version.getCurrent() + ".ChatMessageType"; - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/TitleMessageManager.java b/src/com/bekvon/bukkit/cmiLib/TitleMessageManager.java new file mode 100644 index 000000000..352e4874c --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/TitleMessageManager.java @@ -0,0 +1,136 @@ +package com.bekvon.bukkit.cmiLib; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.logging.Level; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.Residence; + +public class TitleMessageManager { + private static Method getHandle; + private static Method sendPacket; + private static Field playerConnection; + private static Class nmsIChatBaseComponent; + + private static Constructor nmsPacketPlayOutTitle; + private static Constructor nmsPacketPlayOutTimes; + private static Class enumTitleAction; + private static Method fromString; + private static boolean simpleTitleMessages = false; + + static { + if (Version.isCurrentHigher(Version.v1_7_R4)) { + Version version = Version.getCurrent(); + try { + Class typeCraftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer"); + Class typeNMSPlayer = Class.forName("net.minecraft.server." + version + ".EntityPlayer"); + Class typePlayerConnection = Class.forName("net.minecraft.server." + version + ".PlayerConnection"); + nmsIChatBaseComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent"); + getHandle = typeCraftPlayer.getMethod("getHandle"); + playerConnection = typeNMSPlayer.getField("playerConnection"); + sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet")); + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { + Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); + } + + // Title + try { + Class typePacketPlayOutTitle = Class.forName(getPacketPlayOutTitleClasspath()); + enumTitleAction = Class.forName(getEnumTitleActionClasspath()); + nmsPacketPlayOutTitle = typePacketPlayOutTitle.getConstructor(enumTitleAction, nmsIChatBaseComponent); + nmsPacketPlayOutTimes = typePacketPlayOutTitle.getConstructor(int.class, int.class, int.class); + fromString = Class.forName("org.bukkit.craftbukkit." + version + ".util.CraftChatMessage").getMethod("fromString", String.class); + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) { + simpleTitleMessages = true; + } + } + } + + public static void send(final Player receivingPacket, final Object title, final Object subtitle) { + send(receivingPacket, title, subtitle, 0, 40, 10); + } + + public static void send(final Player receivingPacket, final Object title, final Object subtitle, final int fadeIn, final int keep, final int fadeOut) { + Bukkit.getScheduler().runTaskAsynchronously(Residence.getInstance(), new Runnable() { + @Override + public void run() { + + String t = title == null ? null : CMIChatColor.translate((String) title); + String s = subtitle == null ? null : CMIChatColor.translate((String) subtitle); + + if (Version.isCurrentEqualOrLower(Version.v1_7_R4)) { + ActionBarManager.send(receivingPacket, (t == null ? "" : t) + (s == null ? "" : s)); + return; + } + + if (simpleTitleMessages) { + receivingPacket.sendMessage(t); + receivingPacket.sendMessage(s); + return; + } + try { + switch (Version.getCurrent()) { + case v1_12_R1: + case v1_13_R1: + case v1_13_R2: + case v1_14_R1: + case v1_14_R2: + case v1_15_R1: + case v1_15_R2: + case v1_16_R1: + default: + receivingPacket.sendTitle(t, s, fadeIn, keep, fadeOut); + break; + case v1_9_R1: + case v1_9_R2: + case v1_10_R1: + case v1_11_R1: + case v1_8_R1: + case v1_8_R2: + case v1_8_R3: + Object packetTimes = nmsPacketPlayOutTimes.newInstance(fadeIn, keep, fadeOut); + sendPacket(receivingPacket, packetTimes); + if (title != null) { + Object packetTitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("TITLE").get(null), ((Object[]) fromString.invoke(null, t))[0]); + sendPacket(receivingPacket, packetTitle); + } + if (subtitle != null) { + if (title == null) { + Object packetTitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("TITLE").get(null), ((Object[]) fromString.invoke(null, ""))[0]); + sendPacket(receivingPacket, packetTitle); + } + Object packetSubtitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("SUBTITLE").get(null), ((Object[]) fromString.invoke(null, s))[0]); + sendPacket(receivingPacket, packetSubtitle); + } + break; + } + + } catch (SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchFieldException ex) { + simpleTitleMessages = true; + Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully support title messages. They will be shown in chat instead."); + } + return; + } + }); + } + + private static void sendPacket(Player player, Object packet) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { + Object handle = getHandle.invoke(player); + Object connection = playerConnection.get(handle); + sendPacket.invoke(connection, packet); + } + + private static String getPacketPlayOutTitleClasspath() { + return "net.minecraft.server." + Version.getCurrent() + ".PacketPlayOutTitle"; + } + + private static String getEnumTitleActionClasspath() { + return getPacketPlayOutTitleClasspath() + "$EnumTitleAction"; + } + +} diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 61352919b..7201b1d26 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -739,7 +739,7 @@ public void UpdateConfigFile() { if (!commented) c.addComment(path + "MinCoord", - "If maxcoord set to 1000 and mincoord to 500, then player can be teleported between -1000 to -500 and 1000 to 500 coordinates"); + "If maxcoord set to 1000 and mincoord to 500, then player can be teleported between -1000 to -500 and 500 to 1000 coordinates"); int MinCoord = c.get(path + "MinCoord", c.getC().getInt(path + "MinCord", 500)); int CenterX = c.get(path + "CenterX", 0); int CenterZ = c.get(path + "CenterZ", 0); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 72abf5a3e..ce5c96fd3 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -44,7 +44,6 @@ import org.kingdoms.manager.game.GameManagement; import com.bekvon.bukkit.cmiLib.Version; -import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.VersionChecker; import com.bekvon.bukkit.residence.BossBar.BossBarManager; @@ -181,7 +180,6 @@ public class Residence extends JavaPlugin { protected RandomTp RandomTpManager; protected DynMapManager DynManager; protected Sorting SortingManager; - protected ActionBarTitleMessages ABManager; protected AutoSelection AutoSelectionManager; protected WESchematicManager SchematicManager; private InformationPager InformationPagerManager; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index d6ce6bff0..74410faf6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -43,10 +43,10 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; -import com.bekvon.bukkit.cmiLib.Version; -import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; +import com.bekvon.bukkit.cmiLib.ActionBarManager; import com.bekvon.bukkit.cmiLib.CMIBlock; import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.commands.auto.direction; @@ -454,7 +454,7 @@ public void onChestPlaceNearResidence(BlockPlaceEvent event) { } if (cancel) { - ActionBarTitleMessages.send(player, plugin.msg(lm.General_CantPlaceChest)); + ActionBarManager.send(player, plugin.msg(lm.General_CantPlaceChest)); event.setCancelled(true); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 940e8a55e..031c7824d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -55,9 +55,9 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; -import com.bekvon.bukkit.cmiLib.Version; -import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; +import com.bekvon.bukkit.cmiLib.ActionBarManager; import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -1051,7 +1051,7 @@ public void onSplashPotion(PotionSplashEvent event) { ClaimedResidence srcarea = plugin.getResidenceManager().getByLoc(attacker.getLocation()); if (srcarea != null && area != null && srcarea.equals(area) && srcarea.getPermissions().playerHas((Player) target, Flags.friendlyfire, FlagCombo.OnlyFalse) && srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { - ActionBarTitleMessages.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); + ActionBarManager.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); event.setIntensity(target, 0); } } @@ -1436,7 +1436,7 @@ public void onEntityDamage(EntityDamageEvent event) { srcarea.getPermissions().playerHas((Player) ent, Flags.friendlyfire, FlagCombo.OnlyFalse) && srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { - ActionBarTitleMessages.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); + ActionBarManager.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); if (isOnFire) ent.setFireTicks(0); event.setCancelled(true); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 62d223bc4..c81895cd3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -50,10 +50,11 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.cmiLib.Version; -import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; +import com.bekvon.bukkit.cmiLib.ActionBarManager; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.CMIReflections; +import com.bekvon.bukkit.cmiLib.TitleMessageManager; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; @@ -76,7 +77,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -1996,7 +1996,7 @@ public void onPlayerMove(PlayerMoveEvent event) { plugin.getTeleportDelayMap().remove(player.getName()); plugin.msg(player, lm.General_TeleportCanceled); if (plugin.getConfigManager().isTeleportTitleMessage()) - ActionBarTitleMessages.sendTitle(player, "", ""); + TitleMessageManager.send(player, "", ""); } } @@ -2147,7 +2147,7 @@ public void run() { case TitleBar: FlagPermissions perms = res.getPermissions(); if (perms.has(Flags.title, FlagCombo.TrueOrNone)) - ActionBarTitleMessages.send(player, plugin.msg(lm.Raid_cantDo)); + ActionBarManager.send(player, plugin.msg(lm.Raid_cantDo)); break; case ChatBox: plugin.msg(player, lm.Raid_cantDo, orres.getName()); @@ -2196,7 +2196,7 @@ public void run() { case TitleBar: FlagPermissions perms = res.getPermissions(); if (perms.has(Flags.title, FlagCombo.TrueOrNone)) - ActionBarTitleMessages.send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); + ActionBarManager.send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); break; case ChatBox: plugin.msg(player, lm.Residence_MoveDeny, orres.getName()); @@ -2315,14 +2315,14 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { if (res.getPermissions().has(Flags.title, FlagCombo.TrueOrNone)) switch (plugin.getConfigManager().getEnterLeaveMessageType()) { case ActionBar: - ActionBarTitleMessages.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) + ActionBarManager.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) .toString()); break; case ChatBox: plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res, message)); break; case TitleBar: - ActionBarTitleMessages.sendTitle(player, ChatColor.YELLOW + insertMessages(player, res, message)); + TitleMessageManager.send(player, ChatColor.YELLOW + insertMessages(player, res, message), null); break; default: break; @@ -2346,10 +2346,10 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { if (plugin.getRentManager().isForRent(from) && !plugin.getRentManager().isRented(from)) { RentableLand rentable = plugin.getRentManager().getRentableLand(from); if (rentable != null) - ActionBarTitleMessages.send(player, plugin.msg(lm.Residence_CanBeRented, from.getName(), rentable.cost, rentable.days)); + ActionBarManager.send(player, plugin.msg(lm.Residence_CanBeRented, from.getName(), rentable.cost, rentable.days)); } else if (plugin.getTransactionManager().isForSale(from) && !res.isOwner(player)) { int sale = plugin.getTransactionManager().getSaleAmount(from); - ActionBarTitleMessages.send(player, plugin.msg(lm.Residence_CanBeBought, from.getName(), sale)); + ActionBarManager.send(player, plugin.msg(lm.Residence_CanBeBought, from.getName(), sale)); } } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 6f74f0ca3..7143fa97c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -25,8 +25,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.cmiLib.TitleMessageManager; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.BossBar.BossBarInfo; @@ -1348,7 +1348,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } public void TpTimer(final Player player, final int t) { - ActionBarTitleMessages.sendTitle(player, plugin.msg(lm.General_TeleportTitle), + TitleMessageManager.send(player, plugin.msg(lm.General_TeleportTitle), plugin.msg(lm.General_TeleportTitleTime, t)); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index aafe585ac..d61a3e11a 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -17,7 +17,7 @@ import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; -import com.bekvon.bukkit.cmiLib.ActionBarTitleMessages; +import com.bekvon.bukkit.cmiLib.ActionBarManager; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; import com.bekvon.bukkit.residence.Residence; @@ -450,7 +450,7 @@ public void showSelectionInfoInActionBar(Player player) { if (plugin.getConfigManager().enableEconomy()) Message += " " + plugin.msg(lm.General_LandCost, cuboidArea.getCost(group)); - ActionBarTitleMessages.send(player, Message); + ActionBarManager.send(player, Message); } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 14247593f..9ddedcddc 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -1,8 +1,6 @@ package com.bekvon.bukkit.residence.text.help; import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -18,14 +16,13 @@ import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.containers.Flags; @@ -101,11 +98,11 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p path = path.replace("/res ", "/resadmin "); RawMessage rm = new RawMessage(); - rm.add(CMIChatColor.translateAlternateColorCodes("&6" + helplines.get(i).getDesc()), desc, null, path + helplines.get(i).getCommand()); + rm.add(CMIChatColor.translate("&6" + helplines.get(i).getDesc()), desc, null, path + helplines.get(i).getCommand()); rm.show(sender); } else - sender.sendMessage(CMIChatColor.translateAlternateColorCodes("&6" + helplines.get(i).getDesc())); + sender.sendMessage(CMIChatColor.translate("&6" + helplines.get(i).getDesc())); } @@ -270,198 +267,196 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { public Set getSubCommands(CommandSender sender, String[] args) { Set subCommands = new HashSet(); - if (langFile.isFile()) { - FileConfiguration node = new YamlConfiguration(); - try { - node.load(langFile); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (InvalidConfigurationException e) { - e.printStackTrace(); - } + if (!langFile.isFile()) + return subCommands; - ConfigurationSection meinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); - ConfigurationSection tempmeinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); + FileConfiguration node = new YamlConfiguration(); + try { + node.load(langFile); + } catch (Throwable e) { + e.printStackTrace(); + } - if (args.length == 1) - return meinPath.getKeys(false); + ConfigurationSection tempmeinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); - boolean ok = true; - int i = 0; - while (ok) { + if (args.length == 1) { + if (tempmeinPath == null) + return subCommands; + return tempmeinPath.getKeys(false); + } - if (i >= args.length) - break; + boolean ok = true; + int i = 0; + while (ok) { - if (args[i].equalsIgnoreCase("")) - return tempmeinPath.getKeys(false); + if (i >= args.length) + break; - if (!tempmeinPath.isConfigurationSection(args[i] + ".SubCommands")) - break; + if (args[i].equalsIgnoreCase("")) + return tempmeinPath.getKeys(false); - tempmeinPath = tempmeinPath.getConfigurationSection(args[i] + ".SubCommands"); + if (!tempmeinPath.isConfigurationSection(args[i] + ".SubCommands")) + break; - i++; - } + tempmeinPath = tempmeinPath.getConfigurationSection(args[i] + ".SubCommands"); - int neededArgPlace = args.length - 2 - i; + i++; + } - boolean subCommand = true; - if (i < args.length && tempmeinPath.isConfigurationSection(args[i])) { - subCommand = false; - tempmeinPath = tempmeinPath.getConfigurationSection(args[i]); - } + int neededArgPlace = args.length - 2 - i; - List ArgsList = new ArrayList(); + boolean subCommand = true; + if (i < args.length && tempmeinPath.isConfigurationSection(args[i])) { + subCommand = false; + tempmeinPath = tempmeinPath.getConfigurationSection(args[i]); + } - int ii = 0; - for (Entry, List> one : Residence.getInstance().getLocaleManager().CommandTab.entrySet()) { - List list = one.getKey(); - if (list.size() > ii && args.length > ii && list.get(ii).equalsIgnoreCase(args[ii])) { - ArgsList = one.getValue(); - } - i++; + List ArgsList = new ArrayList(); + + int ii = 0; + for (Entry, List> one : Residence.getInstance().getLocaleManager().CommandTab.entrySet()) { + List list = one.getKey(); + if (list.size() > ii && args.length > ii && list.get(ii).equalsIgnoreCase(args[ii])) { + ArgsList = one.getValue(); } + i++; + } - String NeededArg = null; - if (neededArgPlace < ArgsList.size() && neededArgPlace >= 0) - NeededArg = ArgsList.get(neededArgPlace); + String NeededArg = null; + if (neededArgPlace < ArgsList.size() && neededArgPlace >= 0) + NeededArg = ArgsList.get(neededArgPlace); - Player playerSender = null; - if (sender instanceof Player) - playerSender = (Player) sender; + Player playerSender = null; + if (sender instanceof Player) + playerSender = (Player) sender; - if (NeededArg != null) { + if (NeededArg != null) { - List list = new ArrayList(); + List list = new ArrayList(); - if (NeededArg.contains("%%")) { - list.addAll(Arrays.asList(NeededArg.split("%%"))); - } else - list.add(NeededArg); + if (NeededArg.contains("%%")) { + list.addAll(Arrays.asList(NeededArg.split("%%"))); + } else + list.add(NeededArg); - for (String oneArg : list) { - switch (oneArg) { - case "[playername]": - for (Player one : Bukkit.getOnlinePlayers()) { - if (playerSender == null || one.canSee(playerSender)) - subCommands.add(one.getName()); - } - break; - case "[residence]": - if (sender instanceof Player) { - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); - if (res != null) { - String resName = res.getName(); - if (resName != null) - subCommands.add(resName); - } - List resList = Residence.getInstance().getPlayerManager().getResidencePlayer(((Player) sender)).getResList(); - for (ClaimedResidence oneRes : resList) { - subCommands.add(oneRes.getName()); - } - } else { - ArrayList resList = Residence.getInstance().getResidenceManager().getResidenceList(Residence.getInstance().getServerLandName(), true, false, false); - if (resList.size() > 0) - subCommands.addAll(resList); + for (String oneArg : list) { + switch (oneArg) { + case "[playername]": + for (Player one : Bukkit.getOnlinePlayers()) { + if (playerSender == null || one.canSee(playerSender)) + subCommands.add(one.getName()); + } + break; + case "[residence]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getName(); + if (resName != null) + subCommands.add(resName); } - break; - case "[cresidence]": - if (sender instanceof Player) { - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); - if (res != null) { - String resName = res.getName(); - if (resName != null) - subCommands.add(resName); - } + List resList = Residence.getInstance().getPlayerManager().getResidencePlayer(((Player) sender)).getResList(); + for (ClaimedResidence oneRes : resList) { + subCommands.add(oneRes.getName()); } - break; - case "[enter]": - if (sender instanceof Player) { - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); - if (res != null) { - String resName = res.getEnterMessage(); - if (resName != null) - subCommands.add(CMIChatColor.deColorize(resName)); - } + } else { + ArrayList resList = Residence.getInstance().getResidenceManager().getResidenceList(Residence.getInstance().getServerLandName(), true, false, false); + if (resList.size() > 0) + subCommands.addAll(resList); + } + break; + case "[cresidence]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getName(); + if (resName != null) + subCommands.add(resName); } - break; - case "[leave]": - if (sender instanceof Player) { - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); - if (res != null) { - String resName = res.getLeaveMessage(); - if (resName != null) - subCommands.add(CMIChatColor.deColorize(resName)); - } + } + break; + case "[enter]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getEnterMessage(); + if (resName != null) + subCommands.add(CMIChatColor.deColorize(resName)); } - break; - case "[residenceshop]": - for (ClaimedResidence one : Residence.getInstance().getResidenceManager().getShops()) { - subCommands.add(one.getName()); + } + break; + case "[leave]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getLeaveMessage(); + if (resName != null) + subCommands.add(CMIChatColor.deColorize(resName)); } - break; - case "[flag]": - - for (String one : FlagPermissions.getAllPosibleFlags()) { + } + break; + case "[residenceshop]": + for (ClaimedResidence one : Residence.getInstance().getResidenceManager().getShops()) { + subCommands.add(one.getName()); + } + break; + case "[flag]": - Flags f = Flags.getFlag(one); + for (String one : FlagPermissions.getAllPosibleFlags()) { - if (f != null) { - if (!f.isGlobalyEnabled()) - continue; - subCommands.add(f.getName()); - } - subCommands.add(one); + Flags f = Flags.getFlag(one); + if (f != null) { + if (!f.isGlobalyEnabled()) + continue; + subCommands.add(f.getName()); } - for (String one : FlagPermissions.getPosibleAreaFlags()) { + subCommands.add(one); - Flags f = Flags.getFlag(one); + } + for (String one : FlagPermissions.getPosibleAreaFlags()) { - if (f != null) { - if (!f.isGlobalyEnabled()) - continue; - subCommands.add(f.getName()); - } - subCommands.add(one); + Flags f = Flags.getFlag(one); + if (f != null) { + if (!f.isGlobalyEnabled()) + continue; + subCommands.add(f.getName()); } - break; - case "[material]": + subCommands.add(one); + + } + break; + case "[material]": + for (Material one : Material.values()) { + subCommands.add(one.name().toLowerCase()); + } + break; + case "[materialId]": + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) for (Material one : Material.values()) { - subCommands.add(one.name().toLowerCase()); + subCommands.add(String.valueOf(one.getId())); } - break; - case "[materialId]": - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) - for (Material one : Material.values()) { - subCommands.add(String.valueOf(one.getId())); - } - break; - case "[worldname]": - for (World one : Bukkit.getWorlds()) { - subCommands.add(one.getName()); - } - break; - default: - subCommands.add(oneArg); - break; + break; + case "[worldname]": + for (World one : Bukkit.getWorlds()) { + subCommands.add(one.getName()); } + break; + default: + subCommands.add(oneArg); + break; } } + } -// String command = tempmeinPath.getCurrentPath().replace("CommandHelp.SubCommands.", "").replace(".SubCommands.", " "); - if (subCommands.size() > 0) { - return subCommands; - } - - if (subCommand) - return tempmeinPath.getKeys(false); -// Bukkit.dispatchCommand(sender, command + " ?"); + if (!subCommands.isEmpty()) { + return subCommands; } + + if (subCommand) + return tempmeinPath.getKeys(false); + return new HashSet(Arrays.asList("?")); } } From 922774541030fa933adf65e841dc431c16cb092d Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jul 2020 15:03:37 +0300 Subject: [PATCH 0751/1142] Correct way to prevent trees spreading into residence on growth --- .../listeners/ResidenceBlockListener.java | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 74410faf6..07774601e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -175,16 +175,12 @@ public void onTreeGrow(StructureGrowEvent event) { ClaimedResidence startRes = plugin.getResidenceManager().getByLoc(event.getLocation()); List blocks = event.getBlocks(); - int i = 0; - for (BlockState one : blocks) { + + for (BlockState one : new ArrayList(blocks)) { ClaimedResidence targetRes = plugin.getResidenceManager().getByLoc(one.getLocation()); - if (startRes == null && targetRes != null || - targetRes != null && startRes != null && !startRes.getName().equals(targetRes.getName()) && !startRes.isOwner(targetRes.getOwner())) { - BlockState matas = blocks.get(i); - matas.setType(Material.AIR); - blocks.set(i, matas); + if (startRes == null && targetRes != null || targetRes != null && startRes != null && !startRes.getName().equals(targetRes.getName()) && !startRes.isOwner(targetRes.getOwner())) { + blocks.remove(one); } - i++; } } @@ -233,8 +229,7 @@ public void onBlockBreak(BlockBreakEvent event) { } if (!hasdestroy - && !ResPerm.bypass_destroy.hasPermission(player, 10000L) - ) { + && !ResPerm.bypass_destroy.hasPermission(player, 10000L)) { plugin.msg(player, lm.Flag_Deny, Flags.destroy); event.setCancelled(true); } else if (mat == Material.CHEST && !perms.playerHas(player, Flags.container, true)) { @@ -380,7 +375,7 @@ public void onBlockFall(EntityChangeBlockEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestPlace(BlockPlaceEvent event) { - + // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -646,8 +641,7 @@ public void onBlockPlace(BlockPlaceEvent event) { } if (!hasplace - && !ResPerm.bypass_build.hasPermission(player, 10000L) - ) { + && !ResPerm.bypass_build.hasPermission(player, 10000L)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); return; @@ -660,8 +654,7 @@ public void onBlockPlace(BlockPlaceEvent event) { perms = plugin.getPermsByLocForPlayer(sec.getLocation(), player); hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); if (!hasplace - && !ResPerm.bypass_build.hasPermission(player, 10000L) - ) { + && !ResPerm.bypass_build.hasPermission(player, 10000L)) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); return; From ad525fa2a9e69c8831b9814cfd4af53e610bc352 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jul 2020 15:24:21 +0300 Subject: [PATCH 0752/1142] Better feedback when failing to set flag --- src/com/bekvon/bukkit/residence/ConfigManager.java | 2 +- src/com/bekvon/bukkit/residence/commands/pset.java | 2 -- src/com/bekvon/bukkit/residence/containers/lm.java | 5 +++-- .../bukkit/residence/protection/ResidencePermissions.java | 7 ++++++- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 7201b1d26..a7adccc5a 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -480,7 +480,7 @@ public void UpdateGroupedFlagsFile() { Flags.lever.toString(), Flags.button.toString(), Flags.diode.toString())); - conf.set("Global.GroupedFlags.craft", Arrays.asList( + conf.set("Global.GroupedFlags.crafting", Arrays.asList( Flags.brew.toString(), Flags.table.toString(), Flags.enchant.toString())); diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index a381c79bc..22b35c6b9 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -2,7 +2,6 @@ import java.util.Arrays; -import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -12,7 +11,6 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.gui.setFlagInfo; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class pset implements cmd { diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 6daeed220..ebc11489d 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -3,8 +3,6 @@ import java.util.ArrayList; import java.util.Arrays; -import org.bukkit.ChatColor; - public enum lm { Invalid_Player("&cInvalid player name..."), Invalid_PlayerOffline("&cPlayer is offline"), @@ -21,6 +19,9 @@ public enum lm { Invalid_Group("&cInvalid Group..."), Invalid_MessageType("&cMessage type must be enter or remove."), Invalid_Flag("&cInvalid Flag..."), + Invalid_FlagType_Fail("&cInvalid Flag... This flag can only be used on %1"), + Invalid_FlagType_Player("Player"), + Invalid_FlagType_Residence("Residence"), Invalid_FlagState("&cInvalid flag state, must be &6true(t)&c, &6false(f)&c, or &6remove(r)"), Invalid_List("&eUnknown list type, must be &6blacklist &eor &6ignorelist."), Invalid_Page("&eInvalid Page..."), diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 25e1ab57b..8bd12c060 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -16,6 +16,7 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.containers.Flags.FlagMode; import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagCheckEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; @@ -310,7 +311,11 @@ private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState sta if (f != null) flag = f.toString(); if (!checkValidFlag(flag, globalflag)) { - Residence.getInstance().msg(sender, lm.Invalid_Flag); + if (f != null) + Residence.getInstance().msg(sender, lm.Invalid_FlagType_Fail, f.getFlagMode() == FlagMode.Residence ? Residence.getInstance().getLM().getMessage(lm.Invalid_FlagType_Residence) : Residence + .getInstance().getLM().getMessage(lm.Invalid_FlagType_Player)); + else + Residence.getInstance().msg(sender, lm.Invalid_Flag); return false; } if (state == FlagState.INVALID) { From 16be4fd43d8078cf1a18d69826cd6debd7ac04bc Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Jul 2020 15:36:57 +0300 Subject: [PATCH 0753/1142] Fixing pset command not working from console --- src/com/bekvon/bukkit/residence/commands/pset.java | 3 ++- src/groups.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 22b35c6b9..fb09c6fc4 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -18,7 +18,8 @@ public class pset implements cmd { @Override @CommandAnnotation(simple = true, priority = 800) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player) && args.length != 5 && args.length == 4 && !args[3].equalsIgnoreCase("removeall")) + + if (!(sender instanceof Player) && args.length != 4 && args.length == 3 && !args[2].equalsIgnoreCase("removeall")) return false; if (args.length == 2 && args[1].equalsIgnoreCase("removeall")) { diff --git a/src/groups.yml b/src/groups.yml index 353d3052d..20e3c560d 100644 --- a/src/groups.yml +++ b/src/groups.yml @@ -93,7 +93,8 @@ Groups: IgnoreLimits: false # The cost, per block, of making a new Residence or adding a area to it. BuyCost: 0.5 - # The cost, per block, player will be getting back when removing residence. + # The cost, per block, player will be getting back when removing residence. + # ATTENTION ResMoneyBack needs to be enabled in config file for this to work SellCost: 0.25 # The cost, per block, of renewing a Residence lease (if the lease system is enabled). RenewCost: 0.2 From 7e21449a1c577808d71bb8785c2167e0284a2352 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 20 Jul 2020 14:11:30 +0300 Subject: [PATCH 0754/1142] Lets set fly state with slight delay to prevent other plugin overriding this state --- .../bekvon/bukkit/residence/Residence.java | 11 ++++- .../listeners/ResidencePlayerListener.java | 49 ++++++++++++------- src/plugin.yml | 2 +- 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index ce5c96fd3..c36c86f45 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -43,8 +43,8 @@ import org.kingdoms.main.Kingdoms; import org.kingdoms.manager.game.GameManagement; -import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.cmiLib.VersionChecker; import com.bekvon.bukkit.residence.BossBar.BossBarManager; import com.bekvon.bukkit.residence.Placeholders.Placeholder; @@ -202,6 +202,8 @@ public class Residence extends JavaPlugin { protected int DespawnMobsBukkitId = -1; + private boolean Slimefun = false; + protected int autosaveBukkitId = -1; protected VersionChecker versionChecker; protected boolean initsuccess = false; @@ -562,6 +564,8 @@ public void onEnable() { e.printStackTrace(); } + Slimefun = Bukkit.getPluginManager().getPlugin("Slimefun") != null && Bukkit.getPluginManager().getPlugin("CS-CoreLib") != null; + this.getConfigManager().copyOverTranslations(); parseHelpEntries(); @@ -711,6 +715,7 @@ public void run() { spigotlistener = new SpigotListener(); PluginManager pm = getServer().getPluginManager(); + pm.registerEvents(blistener, this); pm.registerEvents(plistener, this); pm.registerEvents(elistener, this); @@ -1968,4 +1973,8 @@ public int getWorldGuardVersion() { return wepVersion; } + public boolean isSlimefunPresent() { + return Slimefun; + } + } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c81895cd3..846345f00 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -77,6 +77,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -778,6 +779,7 @@ public void run() { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignDestroy(BlockBreakEvent event) { + // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -1862,12 +1864,24 @@ private void fly(Player player, boolean state) { } } } else { - player.setAllowFlight(state); + player.setAllowFlight(true); + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + + if (res != null && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { + ClaimedResidence res2 = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (player.isOnline() && res != null && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) { + player.setAllowFlight(true); + } + }, 20L); + } } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceChange(ResidenceChangedEvent event) { + ClaimedResidence res = event.getTo(); ClaimedResidence ResOld = event.getFrom(); Player player = event.getPlayer(); @@ -2208,10 +2222,9 @@ public void run() { } // Preventing fly in residence only when player has move permission - f: if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) - && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { - if (res.isOwner(player)) - break f; + if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) + && !ResPerm.bypass_nofly.hasPermission(player, 10000L) && res.isOwner(player)) { + Location lc = player.getLocation(); Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); location.setPitch(lc.getPitch()); @@ -2331,28 +2344,26 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { } } - if (to != null && plugin.getConfigManager().isEnterAnimation() && to.isTopArea()) { - if (from == null || from.getTopParent() != to) - to.showBounds(player, true); + if (to != null && plugin.getConfigManager().isEnterAnimation() && to.isTopArea() && (from == null || from.getTopParent() != to)) { + to.showBounds(player, true); } if (from == null || res == null) { return; } - if (!(res == from.getParent())) { - if (plugin.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (plugin.getRentManager().isForRent(from) || plugin - .getTransactionManager().isForSale(from))) { - if (plugin.getRentManager().isForRent(from) && !plugin.getRentManager().isRented(from)) { - RentableLand rentable = plugin.getRentManager().getRentableLand(from); - if (rentable != null) - ActionBarManager.send(player, plugin.msg(lm.Residence_CanBeRented, from.getName(), rentable.cost, rentable.days)); - } else if (plugin.getTransactionManager().isForSale(from) && !res.isOwner(player)) { - int sale = plugin.getTransactionManager().getSaleAmount(from); - ActionBarManager.send(player, plugin.msg(lm.Residence_CanBeBought, from.getName(), sale)); - } + if (res != from.getParent() && plugin.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (plugin.getRentManager().isForRent(from) || plugin + .getTransactionManager().isForSale(from))) { + if (plugin.getRentManager().isForRent(from) && !plugin.getRentManager().isRented(from)) { + RentableLand rentable = plugin.getRentManager().getRentableLand(from); + if (rentable != null) + ActionBarManager.send(player, plugin.msg(lm.Residence_CanBeRented, from.getName(), rentable.cost, rentable.days)); + } else if (plugin.getTransactionManager().isForSale(from) && !res.isOwner(player)) { + int sale = plugin.getTransactionManager().getSaleAmount(from); + ActionBarManager.send(player, plugin.msg(lm.Residence_CanBeBought, from.getName(), sale)); } } + } private StuckInfo updateStuckTeleport(Player player, Location loc) { diff --git a/src/plugin.yml b/src/plugin.yml index 75f5baf91..6a5b5f58d 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.1.2 +version: 4.9.1.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From e689a6a1ebd83cec641f219c86e9f01631c8a7f2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 22 Jul 2020 12:45:10 +0300 Subject: [PATCH 0755/1142] Lets allow more customization for residence list page --- .../bekvon/bukkit/cmiLib/CMIChatColor.java | 391 +++- .../bekvon/bukkit/cmiLib/CMICustomColors.java | 1592 +++++++++++++++++ src/com/bekvon/bukkit/cmiLib/RawMessage.java | 846 ++++----- .../bukkit/cmiLib/RawMessageFragment.java | 55 + .../bukkit/cmiLib/RawMessagePartType.java | 5 + .../bukkit/residence/containers/lm.java | 5 +- .../protection/ClaimedResidence.java | 2 +- .../residence/text/help/InformationPager.java | 29 +- 8 files changed, 2400 insertions(+), 525 deletions(-) create mode 100644 src/com/bekvon/bukkit/cmiLib/CMICustomColors.java create mode 100644 src/com/bekvon/bukkit/cmiLib/RawMessageFragment.java create mode 100644 src/com/bekvon/bukkit/cmiLib/RawMessagePartType.java diff --git a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java index ffb52d14a..a42e3074a 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java @@ -3,9 +3,12 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Random; +import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -14,12 +17,59 @@ public class CMIChatColor { - public static final String colorReplacerPlaceholder = "\uFF06"; - public static final String hexColorRegex = "(\\{#)([0-9A-Fa-f]{6})(\\})"; - public static final String hexColorDecolRegex = "(&x)(&[0-9A-Fa-f]){6}"; - private static final Map BY_CHAR = new HashMap<>(); private static final Map BY_NAME = new HashMap<>(); + private static final LinkedHashMap CUSTOM_BY_NAME = new LinkedHashMap<>(); + private static final Map CUSTOM_BY_HEX = new HashMap<>(); + private static final TreeMap CUSTOM_BY_RGB = new TreeMap<>(); + + static { + for (CMICustomColors one : CMICustomColors.values()) { + CUSTOM_BY_NAME.put(one.name().toLowerCase().replace("_", ""), new CMIChatColor(one.toString(), one.getHex())); + CUSTOM_BY_HEX.put(one.getHex().toLowerCase(), new CMIChatColor(one.toString(), one.getHex())); + if (one.getExtra() != null) { + for (String extra : one.getExtra()) { + CUSTOM_BY_NAME.put(extra.toLowerCase().replace("_", ""), new CMIChatColor(extra.replace(" ", "_"), one.getHex())); + } + } + } + + for (float x = 0.0F; x <= 1; x += 0.1) { + for (float z = 0.1F; z <= 1; z += 0.1) { + for (float y = 0; y <= 1; y += 0.03) { + java.awt.Color color = java.awt.Color.getHSBColor(y, x, z); + String hex = Integer.toHexString((color.getRed() << 16) + (color.getGreen() << 8) + color.getBlue() & 0xffffff); + while (hex.length() < 6) { + hex = "0" + hex; + } + CMIChatColor.getClosest(hex); + } + } + } + } + + public final static String colorReplacerPlaceholder = "\uFF06"; + + public static final String colorCodePrefix = "{#"; + public static final String colorCodeSuffix = "}"; + + public static final String hexColorRegex = "(\\" + colorCodePrefix + ")([0-9A-Fa-f]{6}|[0-9A-Fa-f]{3})(\\" + colorCodeSuffix + ")"; + public static final Pattern hexColorRegexPattern = Pattern.compile(CMIChatColor.hexColorRegex); + public static final Pattern hexColorRegexPatternLast = Pattern.compile(CMIChatColor.hexColorRegex + "(?!.*\\" + colorCodePrefix + ")"); + public static final String deColorNameRegex = "(&x)((&[0-9A-Fa-f]){6})"; + public static final Pattern hexDeColorNamePattern = Pattern.compile(CMIChatColor.deColorNameRegex); + public static final String ColorNameRegex = "(\\" + colorCodePrefix + ")([a-zA-Z_]{3,})(\\" + colorCodeSuffix + ")"; + public static final Pattern hexColorNamePattern = Pattern.compile(CMIChatColor.ColorNameRegex); + public static final String ColorNameRegexLast = ColorNameRegex + "(?!.*\\" + colorCodePrefix + ")"; + public static final Pattern hexColorNamePatternLast = Pattern.compile(CMIChatColor.ColorNameRegexLast); + + public static final Pattern gradientPattern = Pattern.compile("(\\{(#[^\\{]*?)>\\})(.*?)(\\{(#.*?)<(>?)\\})"); + + public static final String hexColorDecolRegex = "(&x)(&[0-9A-Fa-f]){6}"; + + public static final Pattern postGradientPattern = Pattern.compile("(" + CMIChatColor.hexColorRegex + "|" + CMIChatColor.ColorNameRegex + ")" + "(.)" + "(" + CMIChatColor.hexColorRegex + "|" + + CMIChatColor.ColorNameRegex + ")"); + public static final Pattern fullPattern = Pattern.compile("(&[0123456789abcdefklmnorABCDEFKLMNOR])|" + CMIChatColor.hexColorRegex + "|" + CMIChatColor.ColorNameRegex); public static final CMIChatColor BLACK = new CMIChatColor("Black", '0', 0, 0, 0); public static final CMIChatColor DARK_BLUE = new CMIChatColor("Dark_Blue", '1', 0, 0, 170); @@ -46,8 +96,8 @@ public class CMIChatColor { public static final CMIChatColor HEX = new CMIChatColor("Hex", 'x', false, false); private char c; - private Boolean color = true; - private Boolean reset = false; + private boolean color = true; + private boolean reset = false; private Pattern pattern = null; private int red; private int green; @@ -60,7 +110,18 @@ public CMIChatColor(String name, char c, int red, int green, int blue) { } public CMIChatColor(String hex) { + this(null, hex); + } + + public CMIChatColor(String name, String hex) { + if (hex.startsWith("#")) + hex = hex.substring(1); this.hex = hex; + this.name = name; + + red = Integer.valueOf(this.hex.substring(0, 2), 16); + green = Integer.valueOf(this.hex.substring(2, 4), 16); + blue = Integer.parseInt(this.hex.substring(4, 6), 16); } public CMIChatColor(String name, char c, Boolean color) { @@ -87,26 +148,81 @@ public CMIChatColor(String name, char c, Boolean color, Boolean reset, int red, BY_NAME.put(this.getName().toLowerCase().replace("_", ""), this); } + private static String processGradient(String text) { + + Matcher gradientMatch = gradientPattern.matcher(text); + + while (gradientMatch.find()) { + String fullmatch = gradientMatch.group(); + CMIChatColor c1 = CMIChatColor.getColor(CMIChatColor.colorCodePrefix + gradientMatch.group(2).replace("#", "") + CMIChatColor.colorCodeSuffix); + CMIChatColor c2 = CMIChatColor.getColor(CMIChatColor.colorCodePrefix + gradientMatch.group(5).replace("#", "") + CMIChatColor.colorCodeSuffix); + + if (c1 == null || c2 == null) + continue; + + String gtext = gradientMatch.group(3); + + boolean continuous = !gradientMatch.group(6).isEmpty(); + + String updated = ""; + + for (int i = 0; i < gtext.length(); i++) { + char ch = gtext.charAt(i); + + CMIChatColor mix = CMIChatColor.mixColors(c1, c2, (i * 100D) / gtext.length()); + updated += CMIChatColor.colorCodePrefix + mix.getHex() + CMIChatColor.colorCodeSuffix; + updated += ch; + } + + if (continuous) { + updated += CMIChatColor.colorCodePrefix + gradientMatch.group(5).replace("#", "") + ">" + CMIChatColor.colorCodeSuffix; + } + + text = text.replace(fullmatch, updated); + + if (continuous) { + text = processGradient(text); + } + } + + return text; + } + public static String translate(String text) { if (text == null) return null; - if (text.contains("#")) { - - Pattern prepattern = Pattern.compile(CMIChatColor.hexColorRegex); + text = processGradient(text); - Matcher match = prepattern.matcher(text); + if (text.contains(colorCodePrefix)) { + Matcher match = hexColorRegexPattern.matcher(text); while (match.find()) { String string = match.group(); StringBuilder magic = new StringBuilder("§x"); for (char c : string.substring(2, string.length() - 1).toCharArray()) { magic.append('§').append(c); + if (string.substring(2, string.length() - 1).length() == 3) + magic.append('§').append(c); } text = text.replace(string, magic.toString()); } + + Matcher nameMatch = hexColorNamePattern.matcher(text); + while (nameMatch.find()) { + String string = nameMatch.group(2); + CMIChatColor cn = getByCustomName(string.toLowerCase().replace("_", "")); + if (cn == null) + continue; + String gex = cn.getHex(); + StringBuilder magic = new StringBuilder("§x"); + for (char c : gex.toCharArray()) { + magic.append('§').append(c); + } + text = text.replace(nameMatch.group(), magic.toString()); + } } return ChatColor.translateAlternateColorCodes('&', text); @@ -128,7 +244,70 @@ public static String deColorize(String text) { return null; text = CMIChatColor.translate(text); - return text.replace("§", "&"); + text = text.replace("§", "&"); + + if (text.contains("&x")) { + Matcher match = hexDeColorNamePattern.matcher(text); + while (match.find()) { + String reg = match.group(2).replace("&", ""); + CMIChatColor custom = CUSTOM_BY_HEX.get(reg.toLowerCase()); + if (custom != null) { + text = text.replace(match.group(), colorCodePrefix + custom.getName().toLowerCase().replace("_", "") + colorCodeSuffix); + } else { + text = text.replace(match.group(), colorCodePrefix + reg + colorCodeSuffix); + } + } + } + +// if (text.contains(colorCodePrefix)) { +// Matcher match = postGradientPattern.matcher(text); +// while (match.find()) { +// CMIChatColor h1 = getColor(match.group(1)); +// CMIChatColor h2 = getColor(match.group(9)); +// +// if (h1.getHex() == null || h2.getHex() == null) +// continue; +// +// java.awt.Color c1 = null; +// try { +// c1 = new java.awt.Color( +// Integer.valueOf(h1.getHex().substring(0, 2), 16), +// Integer.valueOf(h1.getHex().substring(2, 4), 16), +// Integer.valueOf(h1.getHex().substring(4, 6), 16)); +// } catch (Throwable e) { +// return null; +// } +// +// java.awt.Color c2 = null; +// try { +// c2 = new java.awt.Color( +// Integer.valueOf(h2.getHex().substring(0, 2), 16), +// Integer.valueOf(h2.getHex().substring(2, 4), 16), +// Integer.valueOf(h2.getHex().substring(4, 6), 16)); +// } catch (Throwable e) { +// return null; +// } +// +// int red1 = c1.getRed(); +// int red2 = c2.getRed(); +// int rmean = (red1 + red2) >> 1; +// int r = red1 - red2; +// int g = c1.getGreen() - c2.getGreen(); +// int b = c1.getBlue() - c2.getBlue(); +// double dist = Math.sqrt((((512 + rmean) * r * r) >> 8) + 4 * g * g + (((767 - rmean) * b * b) >> 8)); +// +// CMIDebug.d("Distance " , match.group(1), match.group(9), dist); +// } +// } + + return text; + } + + public static List deColorize(List lore) { + for (int i = 0; i < lore.size(); i++) { + lore.set(i, deColorize(lore.get(i))); + } + return lore; } public static String stripColor(String text) { @@ -139,20 +318,42 @@ public static String stripColor(String text) { } public static String getLastColors(String text) { + if (text == null) return null; -// text = CMIChatColor.translate(text); - return ChatColor.getLastColors(text); + + text = deColorize(text); + + Matcher match = hexColorRegexPatternLast.matcher(text); + if (match.find()) { + return match.group(0); + } + + match = hexColorNamePatternLast.matcher(text); + if (match.find()) { + return match.group(); + } + + return ChatColor.getLastColors(translate(text)); } public String getColorCode() { + if (hex != null) + return colorCodePrefix + hex + colorCodeSuffix; return "&" + c; } public String getBukkitColorCode() { + if (hex != null) + return translate(colorCodePrefix + hex + colorCodeSuffix); return "§" + c; } + @Override + public String toString() { + return getBukkitColorCode(); + } + public char getChar() { return c; } @@ -161,15 +362,15 @@ public void setChar(char c) { this.c = c; } - public Boolean isColor() { + public boolean isColor() { return color; } - public Boolean isFormat() { + public boolean isFormat() { return !color && !reset; } - public Boolean isReset() { + public boolean isReset() { return reset; } @@ -178,23 +379,44 @@ public ChatColor getColor() { } public static CMIChatColor getColor(String text) { - String or = CMIChatColor.deColorize(text); - text = CMIChatColor.deColorize(text).replace("&", ""); + + if (text == null) + return null; + + String or = deColorize(text); + + if (or.contains(colorCodePrefix)) { + Matcher match = hexColorRegexPatternLast.matcher(or); + if (match.find()) { + + return new CMIChatColor(match.group(2)); + } + match = hexColorNamePatternLast.matcher(or); + if (match.find()) { + return CMIChatColor.getByCustomName(match.group(2)); + } + } + + text = deColorize(text).replace("&", ""); if (text.length() > 1) { String formated = text.toLowerCase().replace("_", ""); - for (Entry one : BY_NAME.entrySet()) { - if (one.getKey().equalsIgnoreCase(formated)) - return one.getValue(); - } + CMIChatColor got = BY_NAME.get(formated); + if (got != null) + return got; + + got = CUSTOM_BY_NAME.get(formated); + if (got != null) + return got; } if (or.length() > 1 && String.valueOf(or.charAt(or.length() - 2)).equalsIgnoreCase("&")) { text = text.substring(text.length() - 1, text.length()); for (Entry one : BY_CHAR.entrySet()) { - if (String.valueOf(one.getKey()).equalsIgnoreCase(text)) + if (String.valueOf(one.getKey()).equalsIgnoreCase(text)) { return one.getValue(); + } } } @@ -234,10 +456,32 @@ public String getCleanName() { return name.replace("_", ""); } + public static CMIChatColor getByCustomName(String name) { + if (name.equalsIgnoreCase("random")) { + List valuesList = new ArrayList(CUSTOM_BY_NAME.values()); + int randomIndex = new Random().nextInt(valuesList.size()); + return valuesList.get(randomIndex); + } + + return CUSTOM_BY_NAME.get(name.toLowerCase().replace("_", "")); + } + + public static CMIChatColor getByHex(String hex) { + if (hex.startsWith(colorCodePrefix)) + hex = hex.substring(colorCodePrefix.length()); + if (hex.endsWith(colorCodeSuffix)) + hex = hex.substring(0, hex.length() - colorCodeSuffix.length()); + return CUSTOM_BY_HEX.get(hex.toLowerCase().replace("_", "")); + } + public static Map getByName() { return BY_NAME; } + public static Map getByCustomName() { + return CUSTOM_BY_NAME; + } + public static String getHexFromCoord(int x, int y) { x = x < 0 ? 0 : x > 255 ? 255 : x; y = y < 0 ? 0 : y > 255 ? 255 : y; @@ -251,4 +495,105 @@ public static String getHexFromCoord(int x, int y) { } return "#" + hex; } + + public static String getHexRedGreenByPercent(int percentage, int parts) { + float percent = (percentage * 33F / 100F) / 100F; + + java.awt.Color color = java.awt.Color.getHSBColor(percent, 1, 1); + String hex = Integer.toHexString((color.getRed() << 16) + (color.getGreen() << 8) + color.getBlue() & 0xffffff); + while (hex.length() < 6) { + hex = "0" + hex; + } + return "#" + hex; + } + + public int getRed() { + return red; + } + + public int getGreen() { + return green; + } + + public int getBlue() { + return blue; + } + + public static CMIChatColor getClosest(String hex) { + if (hex.startsWith("#")) + hex = hex.substring(1); + + CMIChatColor closest = CUSTOM_BY_RGB.get(hex); + if (closest != null) + return closest; + + java.awt.Color c2 = null; + try { + c2 = new java.awt.Color( + Integer.valueOf(hex.substring(0, 2), 16), + Integer.valueOf(hex.substring(2, 4), 16), + Integer.valueOf(hex.substring(4, 6), 16)); + } catch (Throwable e) { + return null; + } + double distance = Double.MAX_VALUE; + for (Entry one : CUSTOM_BY_HEX.entrySet()) { + + java.awt.Color c1 = new java.awt.Color( + Integer.valueOf(one.getValue().hex.substring(0, 2), 16), + Integer.valueOf(one.getValue().hex.substring(2, 4), 16), + Integer.valueOf(one.getValue().hex.substring(4, 6), 16)); + + int red1 = c1.getRed(); + int red2 = c2.getRed(); + int rmean = (red1 + red2) >> 1; + int r = red1 - red2; + int g = c1.getGreen() - c2.getGreen(); + int b = c1.getBlue() - c2.getBlue(); + double dist = Math.sqrt((((512 + rmean) * r * r) >> 8) + 4 * g * g + (((767 - rmean) * b * b) >> 8)); + if (dist < distance) { + closest = one.getValue(); + distance = dist; + } + } + + if (closest != null) { + CUSTOM_BY_RGB.put(hex, closest); + return closest; + } + CUSTOM_BY_RGB.put(hex, null); + + return null; + } + + public CMIChatColor mixColors(CMIChatColor color, double percent) { + return mixColors(this, color, percent); + } + + public static CMIChatColor mixColors(CMIChatColor color1, CMIChatColor color2, double percent) { + percent = percent / 100D; + double inverse_percent = 1.0 - percent; + int redPart = (int) (color2.getRed() * percent + color1.getRed() * inverse_percent); + int greenPart = (int) (color2.getGreen() * percent + color1.getGreen() * inverse_percent); + int bluePart = (int) (color2.getBlue() * percent + color1.getBlue() * inverse_percent); + String hexCode = String.format("#%02x%02x%02x", redPart, greenPart, bluePart); + return new CMIChatColor(hexCode); + } + +// public static CMIChatColor getClosest(Long rgb) { +// +// Entry low = CUSTOM_BY_RGB.floorEntry(rgb); +// Entry high = CUSTOM_BY_RGB.ceilingEntry(rgb); +// customColors res = null; +// if (low != null && high != null) { +// res = Math.abs(rgb - low.getKey()) < Math.abs(rgb - high.getKey()) ? low.getValue() : high.getValue(); +// } else if (low != null || high != null) { +// res = low != null ? low.getValue() : high == null ? null : high.getValue(); +// } +// if (res == null) { +// return null; +// } +// return new CMIChatColor(res.name(), res.hex); +// } + } diff --git a/src/com/bekvon/bukkit/cmiLib/CMICustomColors.java b/src/com/bekvon/bukkit/cmiLib/CMICustomColors.java new file mode 100644 index 000000000..16597b728 --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/CMICustomColors.java @@ -0,0 +1,1592 @@ +package com.bekvon.bukkit.cmiLib; + +public enum CMICustomColors { + Black("000000"), + Navy_Blue("000080"), + Dark_Blue("0000C8"), + Blue("0000FF"), + Stratos("000741"), + Swamp("001B1C"), + Resolution_Blue("002387"), + Deep_Fir("002900"), + Burnham("002E20"), + International_Klein_Blue("002FA7"), + Prussian_Blue("003153"), + Midnight_Blue("003366"), + Smalt("003399"), + Deep_Teal("003532"), + Cyprus("003E40"), + Kaitoke_Green("004620"), + Cobalt("0047AB"), + Crusoe("004816"), + Sherpa_Blue("004950"), + Endeavour("0056A7"), + Camarone("00581A"), + Science_Blue("0066CC"), + Blue_Ribbon("0066FF"), + Tropical_Rain_Forest("00755E"), + Allports("0076A3"), + Deep_Cerulean("007BA7"), + Lochmara("007EC7"), + Azure_Radiance("007FFF"), + Teal("008080"), + Bondi_Blue("0095B6"), + Pacific_Blue("009DC4"), + Persian_Green("00A693"), + Jade("00A86B"), + Caribbean_Green("00CC99"), + Robins_Egg_Blue("00CCCC"), + Green("00FF00"), + Spring_Green("00FF7F"), + Cyan("00FFFF", "Aqua"), + Blue_Charcoal("010D1A"), + Midnight("011635"), + Holly("011D13"), + Daintree("012731"), + Cardin_Green("01361C"), + County_Green("01371A"), + Astronaut_Blue("013E62"), + Regal_Blue("013F6A"), + Aqua_Deep("014B43"), + Orient("015E85"), + Blue_Stone("016162"), + Fun_Green("016D39"), + Pine_Green("01796F"), + Blue_Lagoon("017987"), + Deep_Sea("01826B"), + Green_Haze("01A368"), + English_Holly("022D15"), + Sherwood_Green("02402C"), + Congress_Blue("02478E"), + Evening_Sea("024E46"), + Bahama_Blue("026395"), + Observatory("02866F"), + Cerulean("02A4D3"), + Tangaroa("03163C"), + Green_Vogue("032B52"), + Mosque("036A6E"), + Midnight_Moss("041004"), + Black_Pearl("041322"), + Blue_Whale("042E4C"), + Zuccini("044022"), + Teal_Blue("044259"), + Deep_Cove("051040"), + Gulf_Blue("051657"), + Venice_Blue("055989"), + Watercourse("056F57"), + Catalina_Blue("062A78"), + Tiber("063537"), + Gossamer("069B81"), + Niagara("06A189"), + Tarawera("073A50"), + Jaguar("080110"), + Black_Bean("081910"), + Deep_Sapphire("082567"), + Elf_Green("088370"), + Bright_Turquoise("08E8DE"), + Downriver("092256"), + Palm_Green("09230F"), + Madison("09255D"), + Bottle_Green("093624"), + Deep_Sea_Green("095859"), + Salem("097F4B"), + Black_Russian("0A001C"), + Dark_Fern("0A480D"), + Japanese_Laurel("0A6906"), + Atoll("0A6F75"), + Cod_Gray("0B0B0B"), + Marshland("0B0F08"), + Gordons_Green("0B1107"), + Black_Forest("0B1304"), + San_Felix("0B6207"), + Malachite("0BDA51"), + Ebony("0C0B1D"), + Woodsmoke("0C0D0F"), + Racing_Green("0C1911"), + Surfie_Green("0C7A79"), + Blue_Chill("0C8990"), + Black_Rock("0D0332"), + Bunker("0D1117"), + Aztec("0D1C19"), + Bush("0D2E1C"), + Cinder("0E0E18"), + Firefly("0E2A30"), + Torea_Bay("0F2D9E"), + Vulcan("10121D"), + Green_Waterloo("101405"), + Eden("105852"), + Arapawa("110C6C"), + Ultramarine("120A8F"), + Elephant("123447"), + Jewel("126B40"), + Diesel("130000"), + Asphalt("130A06"), + Blue_Zodiac("13264D"), + Parsley("134F19"), + Nero("140600"), + Tory_Blue("1450AA"), + Bunting("151F4C"), + Denim("1560BD"), + Genoa("15736B"), + Mirage("161928"), + Hunter_Green("161D10"), + Big_Stone("162A40"), + Celtic("163222"), + Timber_Green("16322C"), + Gable_Green("163531"), + Pine_Tree("171F04"), + Chathams_Blue("175579"), + Deep_Forest_Green("182D09"), + Blumine("18587A"), + Palm_Leaf("19330E"), + Nile_Blue("193751"), + Fun_Blue("1959A8"), + Lucky_Point("1A1A68"), + Mountain_Meadow("1AB385"), + Tolopea("1B0245"), + Haiti("1B1035"), + Deep_Koamaru("1B127B"), + Acadia("1B1404"), + Seaweed("1B2F11"), + Biscay("1B3162"), + Matisse("1B659D"), + Crowshead("1C1208"), + Rangoon_Green("1C1E13"), + Persian_Blue("1C39BB"), + Everglade("1C402E"), + Elm("1C7C7D"), + Green_Pea("1D6142"), + Creole("1E0F04"), + Karaka("1E1609"), + El_Paso("1E1708"), + Cello("1E385B"), + Te_Papa_Green("1E433C"), + Dodger_Blue("1E90FF"), + Eastern_Blue("1E9AB0"), + Night_Rider("1F120F"), + Java("1FC2C2"), + Jacksons_Purple("20208D"), + Cloud_Burst("202E54"), + Blue_Dianne("204852"), + Eternity("211A0E"), + Deep_Blue("220878"), + Forest_Green("228B22"), + Mallard("233418"), + Violet("240A40"), + Kilamanjaro("240C02"), + Log_Cabin("242A1D"), + Black_Olive("242E16"), + Green_House("24500F"), + Graphite("251607"), + Cannon_Black("251706"), + Port_Gore("251F4F"), + Shark("25272C"), + Green_Kelp("25311C"), + Curious_Blue("2596D1"), + Paua("260368"), + Paris_M("26056A"), + Wood_Bark("261105"), + Gondola("261414"), + Steel_Gray("262335"), + Ebony_Clay("26283B"), + Bay_of_Many("273A81"), + Plantation("27504B"), + Eucalyptus("278A5B"), + Oil("281E15"), + Astronaut("283A77"), + Mariner("286ACD"), + Violent_Violet("290C5E"), + Bastille("292130"), + Zeus("292319"), + Charade("292937"), + Jelly_Bean("297B9A"), + Jungle_Green("29AB87"), + Cherry_Pie("2A0359"), + Coffee_Bean("2A140E"), + Baltic_Sea("2A2630"), + Turtle_Green("2A380B"), + Cerulean_Blue("2A52BE"), + Sepia_Black("2B0202"), + Valhalla("2B194F"), + Heavy_Metal("2B3228"), + Blue_Gem("2C0E8C"), + Revolver("2C1632"), + Bleached_Cedar("2C2133"), + Lochinvar("2C8C84"), + Mikado("2D2510"), + Outer_Space("2D383A"), + St_Tropaz("2D569B"), + Jacaranda("2E0329"), + Jacko_Bean("2E1905"), + Rangitoto("2E3222"), + Rhino("2E3F62"), + Sea_Green("2E8B57"), + Scooter("2EBFD4"), + Onion("2F270E"), + Governor_Bay("2F3CB3"), + Sapphire("2F519E"), + Spectra("2F5A57"), + Casal("2F6168"), + Melanzane("300529"), + Cocoa_Brown("301F1E"), + Woodrush("302A0F"), + San_Juan("304B6A"), + Turquoise("30D5C8"), + Eclipse("311C17"), + Pickled_Bluewood("314459"), + Azure("315BA1"), + Calypso("31728D"), + Paradiso("317D82"), + Persian_Indigo("32127A"), + Blackcurrant("32293A"), + Mine_Shaft("323232"), + Stromboli("325D52"), + Bilbao("327C14"), + Astral("327DA0"), + Christalle("33036B"), + Thunder("33292F"), + Shamrock("33CC99"), + Tamarind("341515"), + Mardi_Gras("350036"), + Valentino("350E42"), + Jagger("350E57"), + Tuna("353542"), + Chambray("354E8C"), + Martinique("363050"), + Tuatara("363534"), + Waiouru("363C0D"), + Ming("36747D"), + La_Palma("368716"), + Chocolate("370202"), + Clinker("371D09"), + Brown_Tumbleweed("37290E"), + Birch("373021"), + Oracle("377475"), + Blue_Diamond("380474"), + Grape("381A51"), + Dune("383533"), + Oxford_Blue("384555"), + Clover("384910"), + Limed_Spruce("394851"), + Dell("396413"), + Toledo("3A0020"), + Sambuca("3A2010"), + Jacarta("3A2A6A"), + William("3A686C"), + Killarney("3A6A47"), + Keppel("3AB09E"), + Temptress("3B000B"), + Aubergine("3B0910"), + Jon("3B1F1F"), + Treehouse("3B2820"), + Amazon("3B7A57"), + Boston_Blue("3B91B4"), + Windsor("3C0878"), + Rebel("3C1206"), + Meteorite("3C1F76"), + Dark_Ebony("3C2005"), + Camouflage("3C3910"), + Bright_Gray("3C4151"), + Cape_Cod("3C4443"), + Lunar_Green("3C493A"), + Bean_("3D0C02"), + Bistre("3D2B1F"), + Goblin("3D7D52"), + Kingfisher_Daisy("3E0480"), + Cedar("3E1C14"), + English_Walnut("3E2B23"), + Black_Marlin("3E2C1C"), + Ship_Gray("3E3A44"), + Pelorous("3EABBF"), + Bronze("3F2109"), + Cola("3F2500"), + Madras("3F3002"), + Minsk("3F307F"), + Cabbage_Pont("3F4C3A"), + Tom_Thumb("3F583B"), + Mineral_Green("3F5D53"), + Puerto_Rico("3FC1AA"), + Harlequin("3FFF00"), + Brown_Pod("401801"), + Cork("40291D"), + Masala("403B38"), + Thatch_Green("403D19"), + Fiord("405169"), + Viridian("40826D"), + Chateau_Green("40A860"), + Ripe_Plum("410056"), + Paco("411F10"), + Deep_Oak("412010"), + Merlin("413C37"), + Gun_Powder("414257"), + East_Bay("414C7D"), + Royal_Blue("4169E1"), + Ocean_Green("41AA78"), + Burnt_Maroon("420303"), + Lisbon_Brown("423921"), + Faded_Jade("427977"), + Scarlet_Gum("431560"), + Iroko("433120"), + Armadillo("433E37"), + River_Bed("434C59"), + Green_Leaf("436A0D"), + Barossa("44012D"), + Morocco_Brown("441D00"), + Mako("444954"), + Kelp("454936"), + San_Marino("456CAC"), + Picton_Blue("45B1E8"), + Loulou("460B41"), + Crater_Brown("462425"), + Gray_Asparagus("465945"), + Steel_Blue("4682B4"), + Rustic_Red("480404"), + Bulgarian_Rose("480607"), + Clairvoyant("480656"), + Cocoa_Bean("481C1C"), + Woody_Brown("483131"), + Taupe("483C32"), + Van_Cleef("49170C"), + Brown_Derby("492615"), + Metallic_Bronze("49371B"), + Verdun_Green("495400"), + Blue_Bayoux("496679"), + Bismark("497183"), + Bracken("4A2A04"), + Deep_Bronze("4A3004"), + Mondo("4A3C30"), + Tundora("4A4244"), + Gravel("4A444B"), + Trout("4A4E5A"), + Pigment_Indigo("4B0082"), + Nandor("4B5D52"), + Saddle("4C3024"), + Abbey("4C4F56"), + Blackberry("4D0135"), + Cab_Sav("4D0A18"), + Indian_Tan("4D1E01"), + Cowboy("4D282D"), + Livid_Brown("4D282E"), + Rock("4D3833"), + Punga("4D3D14"), + Bronzetone("4D400F"), + Woodland("4D5328"), + Mahogany("4E0606"), + Bossanova("4E2A5A"), + Matterhorn("4E3B41"), + Bronze_Olive("4E420C"), + Mulled_Wine("4E4562"), + Axolotl("4E6649"), + Wedgewood("4E7F9E"), + Shakespeare("4EABD1"), + Honey_Flower("4F1C70"), + Daisy_Bush("4F2398"), + Indigo("4F69C6"), + Fern_Green("4F7942"), + Fruit_Salad("4F9D5D"), + Apple("4FA83D"), + Mortar("504351"), + Kashmir_Blue("507096"), + Cutty_Sark("507672"), + Emerald("50C878"), + Emperor("514649"), + Chalet_Green("516E3D"), + Como("517C66"), + Smalt_Blue("51808F"), + Castro("52001F"), + Maroon_Oak("520C17"), + Gigas("523C94"), + Voodoo("533455"), + Victoria("534491"), + Hippie_Green("53824B"), + Heath("541012"), + Judge_Gray("544333"), + Fuscous_Gray("54534D"), + Vida_Loca("549019"), + Cioccolato("55280C"), + Saratoga("555B10"), + Finlandia("556D56"), + Havelock_Blue("5590D9"), + Fountain_Blue("56B4BE"), + Spring_Leaves("578363"), + Saddle_Brown("583401"), + Scarpa_Flow("585562"), + Cactus("587156"), + Hippie_Blue("589AAF"), + Wine_Berry("591D35"), + Brown_Bramble("592804"), + Congo_Brown("593737"), + Millbrook("594433"), + Waikawa_Gray("5A6E9C"), + Horizon("5A87A0"), + Jambalaya("5B3013"), + Bordeaux("5C0120"), + Mulberry_Wood("5C0536"), + Carnaby_Tan("5C2E01"), + Comet("5C5D75"), + Redwood("5D1E0F"), + Don_Juan("5D4C51"), + Chicago("5D5C58"), + Verdigris("5D5E37"), + Dingley("5D7747"), + Breaker_Bay("5DA19F"), + Kabul("5E483E"), + Hemlock("5E5D3B"), + Irish_Coffee("5F3D26"), + Mid_Gray("5F5F6E"), + Shuttle_Gray("5F6672"), + Aqua_Forest("5FA777"), + Tradewind("5FB3AC"), + Horses_Neck("604913"), + Smoky("605B73"), + Corduroy("606E68"), + Danube("6093D1"), + Espresso("612718"), + Eggplant("614051"), + Costa_Del_Sol("615D30"), + Glade_Green("61845F"), + Buccaneer("622F30"), + Quincy("623F2D"), + Butterfly_Bush("624E9A"), + West_Coast("625119"), + Finch("626649"), + Patina("639A8F"), + Fern("63B76C"), + Blue_Violet("6456B7"), + Dolphin("646077"), + Storm_Dust("646463"), + Siam("646A54"), + Nevada("646E75"), + Cornflower_Blue("6495ED"), + Viking("64CCDB"), + Rosewood("65000B"), + Cherrywood("651A14"), + Purple_Heart("652DC1"), + Fern_Frond("657220"), + Willow_Grove("65745D"), + Hoki("65869F"), + Pompadour("660045"), + Purple("660099"), + Tyrian_Purple("66023C"), + Dark_Tan("661010"), + Silver_Tree("66B58F"), + Bright_Green("66FF00"), + Screamin_Green("66FF66"), + Black_Rose("67032D"), + Scampi("675FA6"), + Ironside_Gray("676662"), + Viridian_Green("678975"), + Christi("67A712"), + Nutmeg_Wood_Finish("683600"), + Zambezi("685558"), + Salt_Box("685E6E"), + Tawny_Port("692545"), + Finn("692D54"), + Scorpion("695F62"), + Lynch("697E9A"), + Spice("6A442E"), + Himalaya("6A5D1B"), + Soya_Bean("6A6051"), + Hairy_Heath("6B2A14"), + Royal_Purple("6B3FA0"), + Shingle_Fawn("6B4E31"), + Dorado("6B5755"), + Bermuda_Gray("6B8BA2"), + Olive_Drab("6B8E23"), + Eminence("6C3082"), + Turquoise_Blue("6CDAE7"), + Lonestar("6D0101"), + Pine_Cone("6D5E54"), + Dove_Gray("6D6C6C"), + Juniper("6D9292"), + Gothic("6D92A1"), + Red_Oxide("6E0902"), + Moccaccino("6E1D14"), + Pickled_Bean("6E4826"), + Dallas("6E4B26"), + Kokoda("6E6D57"), + Pale_Sky("6E7783"), + Cafe_Royale("6F440C"), + Flint("6F6A61"), + Highland("6F8E63"), + Limeade("6F9D02"), + Downy("6FD0C5"), + Persian_Plum("701C1C"), + Sepia("704214"), + Antique_Bronze("704A07"), + Ferra("704F50"), + Coffee("706555"), + Slate_Gray("708090"), + Cedar_Wood_Finish("711A00"), + Metallic_Copper("71291D"), + Affair("714693"), + Studio("714AB2"), + Tobacco_Brown("715D47"), + Yellow_Metal("716338"), + Peat("716B56"), + Olivetone("716E10"), + Storm_Gray("717486"), + Sirocco("718080"), + Aquamarine_Blue("71D9E2"), + Venetian_Red("72010F"), + Old_Copper("724A2F"), + Go_Ben("726D4E"), + Raven("727B89"), + Seance("731E8F"), + Raw_Umber("734A12"), + Kimberly("736C9F"), + Crocodile("736D58"), + Crete("737829"), + Xanadu("738678"), + Spicy_Mustard("74640D"), + Limed_Ash("747D63"), + Rolling_Stone("747D83"), + Blue_Smoke("748881"), + Laurel("749378"), + Mantis("74C365"), + Russett("755A57"), + Deluge("7563A8"), + Cosmic("76395D"), + Blue_Marguerite("7666C6"), + Lima("76BD17"), + Sky_Blue("76D7EA"), + Dark_Burgundy("770F05"), + Crown_of_Thorns("771F1F"), + Walnut("773F1A"), + Pablo("776F61"), + Pacifika("778120"), + Oxley("779E86"), + Pastel_Green("77DD77"), + Japanese_Maple("780109"), + Mocha("782D19"), + Peanut("782F16"), + Camouflage_Green("78866B"), + Wasabi("788A25"), + Ship_Cove("788BBA"), + Sea_Nymph("78A39C"), + Roman_Coffee("795D4C"), + Old_Lavender("796878"), + Rum("796989"), + Fedora("796A78"), + Sandstone("796D62"), + Spray("79DEEC"), + Siren("7A013A"), + Fuchsia_Blue("7A58C1"), + Boulder("7A7A7A"), + Wild_Blue_Yonder("7A89B8"), + De_York("7AC488"), + Red_Beech("7B3801"), + Cinnamon("7B3F00"), + Yukon_Gold("7B6608"), + Tapa("7B7874"), + Waterloo_("7B7C94"), + Flax_Smoke("7B8265"), + Amulet("7B9F80"), + Asparagus("7BA05B"), + Kenyan_Copper("7C1C05"), + Pesto("7C7631"), + Topaz("7C778A"), + Concord("7C7B7A"), + Jumbo("7C7B82"), + Trendy_Green("7C881A"), + Gumbo("7CA1A6"), + Acapulco("7CB0A1"), + Neptune("7CB7BB"), + Pueblo("7D2C14"), + Bay_Leaf("7DA98D"), + Malibu("7DC8F7"), + Bermuda("7DD8C6"), + Copper_Canyon("7E3A15"), + Claret("7F1734"), + Peru_Tan("7F3A02"), + Falcon("7F626D"), + Mobster("7F7589"), + Moody_Blue("7F76D3"), + Chartreuse("7FFF00"), + Aquamarine("7FFFD4"), + Maroon("800000"), + Rose_Bud_Cherry("800B47"), + Falu_Red("801818"), + Red_Robin("80341F"), + Vivid_Violet("803790"), + Russet("80461B"), + Friar_Gray("807E79"), + Olive("808000"), + Gray("808080"), + Gulf_Stream("80B3AE"), + Glacier("80B3C4"), + Seagull("80CCEA"), + Nutmeg("81422C"), + Spicy_Pink("816E71"), + Empress("817377"), + Spanish_Green("819885"), + Sand_Dune("826F65"), + Gunsmoke("828685"), + Battleship_Gray("828F72"), + Merlot("831923"), + Shadow("837050"), + Chelsea_Cucumber("83AA5D"), + Monte_Carlo("83D0C6"), + Plum("843179"), + Granny_Smith("84A0A0"), + Chetwode_Blue("8581D9"), + Bandicoot("858470"), + Bali_Hai("859FAF"), + Half_Baked("85C4CC"), + Red_Devil("860111"), + Lotus("863C3C"), + Ironstone("86483C"), + Bull_Shot("864D1E"), + Rusty_Nail("86560A"), + Bitter("868974"), + Regent_Gray("86949F"), + Disco("871550"), + Americano("87756E"), + Hurricane("877C7B"), + Oslo_Gray("878D91"), + Sushi("87AB39"), + Spicy_Mix("885342"), + Kumera("886221"), + Suva_Gray("888387"), + Avocado("888D65"), + Camelot("893456"), + Solid_Pink("893843"), + Cannon_Pink("894367"), + Makara("897D6D"), + Burnt_Umber("8A3324"), + True_V("8A73D6"), + Clay_Creek("8A8360"), + Monsoon("8A8389"), + Stack("8A8F8A"), + Jordy_Blue("8AB9F1"), + Electric_Violet("8B00FF"), + Monarch("8B0723"), + Corn_Harvest("8B6B0B"), + Olive_Haze("8B8470"), + Schooner("8B847E"), + Natural_Gray("8B8680"), + Mantle("8B9C90"), + Portage("8B9FEE"), + Envy("8BA690"), + Cascade("8BA9A5"), + Riptide("8BE6D8"), + Cardinal_Pink("8C055E"), + Mule_Fawn("8C472F"), + Potters_Clay("8C5738"), + Trendy_Pink("8C6495"), + Paprika("8D0226"), + Sanguine_Brown("8D3D38"), + Tosca("8D3F3F"), + Cement("8D7662"), + Granite_Green("8D8974"), + Manatee("8D90A1"), + Polo_Blue("8DA8CC"), + Red_Berry("8E0000"), + Rope("8E4D1E"), + Opium("8E6F70"), + Domino("8E775E"), + Mamba("8E8190"), + Nepal("8EABC1"), + Pohutukawa("8F021C"), + El_Salva("8F3E33"), + Korma("8F4B0E"), + Squirrel("8F8176"), + Vista_Blue("8FD6B4"), + Burgundy("900020"), + Old_Brick("901E1E"), + Hemp("907874"), + Almond_Frost("907B71"), + Sycamore("908D39"), + Sangria("92000A"), + Cumin("924321"), + Beaver("926F5B"), + Stonewall("928573"), + Venus("928590"), + Medium_Purple("9370DB"), + Cornflower("93CCEA"), + Algae_Green("93DFB8"), + Copper_Rust("944747"), + Arrowtown("948771"), + Scarlett("950015"), + Strikemaster("956387"), + Mountain_Mist("959396"), + Carmine("960018"), + Brown("964B00"), + Leather("967059"), + Purple_Mountains_Majesty("9678B6"), + Lavender_Purple("967BB6"), + Pewter("96A8A1"), + Summer_Green("96BBAB"), + Au_Chico("97605D"), + Wisteria("9771B5"), + Atlantis("97CD2D"), + Vin_Rouge("983D61"), + Lilac_Bush("9874D3"), + Bazaar("98777B"), + Hacienda("98811B"), + Pale_Oyster("988D77"), + Mint_Green("98FF98"), + Fresh_Eggplant("990066"), + Violet_Eggplant("991199"), + Tamarillo("991613"), + Totem_Pole("991B07"), + Copper_Rose("996666"), + Amethyst("9966CC"), + Mountbatten_Pink("997A8D"), + Blue_Bell("9999CC"), + Prairie_Sand("9A3820"), + Toast("9A6E61"), + Gurkha("9A9577"), + Olivine("9AB973"), + Shadow_Green("9AC2B8"), + Oregon("9B4703"), + Lemon_Grass("9B9E8F"), + Stiletto("9C3336"), + Hawaiian_Tan("9D5616"), + Gull_Gray("9DACB7"), + Pistachio("9DC209"), + Granny_Smith_Apple("9DE093"), + Anakiwa("9DE5FF"), + Chelsea_Gem("9E5302"), + Sepia_Skin("9E5B40"), + Sage("9EA587"), + Citron("9EA91F"), + Rock_Blue("9EB1CD"), + Morning_Glory("9EDEE0"), + Cognac("9F381D"), + Reef_Gold("9F821C"), + Star_Dust("9F9F9C"), + Santas_Gray("9FA0B1"), + Sinbad("9FD7D3"), + Feijoa("9FDD8C"), + Tabasco("A02712"), + Buttered_Rum("A1750D"), + Hit_Gray("A1ADB5"), + Citrus("A1C50A"), + Aqua_Island("A1DAD7"), + Water_Leaf("A1E9DE"), + Flirt("A2006D"), + Rouge("A23B6C"), + Cape_Palliser("A26645"), + Gray_Chateau("A2AAB3"), + Edward("A2AEAB"), + Pharlap("A3807B"), + Amethyst_Smoke("A397B4"), + Blizzard_Blue("A3E3ED"), + Delta("A4A49D"), + Wistful("A4A6D3"), + Green_Smoke("A4AF6E"), + Jazzberry_Jam("A50B5E"), + Zorba("A59B91"), + Bahia("A5CB0C"), + Roof_Terracotta("A62F20"), + Paarl("A65529"), + Barley_Corn("A68B5B"), + Donkey_Brown("A69279"), + Dawn("A6A29A"), + Mexican_Red("A72525"), + Luxor_Gold("A7882C"), + Rich_Gold("A85307"), + Reno_Sand("A86515"), + Coral_Tree("A86B6B"), + Dusty_Gray("A8989B"), + Dull_Lavender("A899E6"), + Tallow("A8A589"), + Bud("A8AE9C"), + Locust("A8AF8E"), + Norway("A8BD9F"), + Chinook("A8E3BD"), + Gray_Olive("A9A491"), + Aluminium("A9ACB6"), + Cadet_Blue("A9B2C3"), + Schist("A9B497"), + Tower_Gray("A9BDBF"), + Perano("A9BEF2"), + Opal("A9C6C2"), + Night_Shadz("AA375A"), + Fire("AA4203"), + Muesli("AA8B5B"), + Sandal("AA8D6F"), + Shady_Lady("AAA5A9"), + Logan("AAA9CD"), + Spun_Pearl("AAABB7"), + Regent_St_Blue("AAD6E6"), + Magic_Mint("AAF0D1"), + Lipstick("AB0563"), + Royal_Heath("AB3472"), + Sandrift("AB917A"), + Cold_Purple("ABA0D9"), + Bronco("ABA196"), + Limed_Oak("AC8A56"), + East_Side("AC91CE"), + Lemon_Ginger("AC9E22"), + Napa("ACA494"), + Hillary("ACA586"), + Cloudy("ACA59F"), + Silver_Chalice("ACACAC"), + Swamp_Green("ACB78E"), + Spring_Rain("ACCBB1"), + Conifer("ACDD4D"), + Celadon("ACE1AF"), + Mandalay("AD781B"), + Casper("ADBED1"), + Moss_Green("ADDFAD"), + Padua("ADE6C4"), + Green_Yellow("ADFF2F"), + Hippie_Pink("AE4560"), + Desert("AE6020"), + Bouquet("AE809E"), + Medium_Carmine("AF4035"), + Apple_Blossom("AF4D43"), + Brown_Rust("AF593E"), + Driftwood("AF8751"), + Alpine("AF8F2C"), + Lucky("AF9F1C"), + Martini("AFA09E"), + Bombay("AFB1B8"), + Pigeon_Post("AFBDD9"), + Cadillac("B04C6A"), + Matrix("B05D54"), + Tapestry("B05E81"), + Mai_Tai("B06608"), + Del_Rio("B09A95"), + Powder_Blue("B0E0E6"), + Inch_Worm("B0E313"), + Bright_Red("B10000"), + Vesuvius("B14A0B"), + Pumpkin_Skin("B1610B"), + Santa_Fe("B16D52"), + Teak("B19461"), + Fringy_Flower("B1E2C1"), + Ice_Cold("B1F4E7"), + Shiraz("B20931"), + Biloba_Flower("B2A1EA"), + Tall_Poppy("B32D29"), + Fiery_Orange("B35213"), + Hot_Toddy("B38007"), + Taupe_Gray("B3AF95"), + La_Rioja("B3C110"), + Well_Read("B43332"), + Blush("B44668"), + Jungle_Mist("B4CFD3"), + Turkish_Rose("B57281"), + Lavender("B57EDC"), + Mongoose("B5A27F"), + Olive_Green("B5B35C"), + Jet_Stream("B5D2CE"), + Cruise("B5ECDF"), + Hibiscus("B6316C"), + Thatch("B69D98"), + Heathered_Gray("B6B095"), + Eagle("B6BAA4"), + Spindle("B6D1EA"), + Gum_Leaf("B6D3BF"), + Rust("B7410E"), + Muddy_Waters("B78E5C"), + Sahara("B7A214"), + Husk("B7A458"), + Nobel("B7B1B1"), + Heather("B7C3D0"), + Madang("B7F0BE"), + Milano_Red("B81104"), + Copper("B87333"), + Gimblet("B8B56A"), + Green_Spring("B8C1B1"), + Celery("B8C25D"), + Sail("B8E0F9"), + Chestnut("B94E48"), + Crail("B95140"), + Marigold("B98D28"), + Wild_Willow("B9C46A"), + Rainee("B9C8AC"), + Guardsman_Red("BA0101"), + Rock_Spray("BA450C"), + Bourbon("BA6F1E"), + Pirate_Gold("BA7F03"), + Nomad("BAB1A2"), + Submarine("BAC7C9"), + Charlotte("BAEEF9"), + Medium_Red_Violet("BB3385"), + Brandy_Rose("BB8983"), + Rio_Grande("BBD009"), + Surf("BBD7C1"), + Powder_Ash("BCC9C2"), + Tuscany("BD5E2E"), + Quicksand("BD978E"), + Silk("BDB1A8"), + Malta("BDB2A1"), + Chatelle("BDB3C7"), + Lavender_Gray("BDBBD7"), + French_Gray("BDBDC6"), + Clay_Ash("BDC8B3"), + Loblolly("BDC9CE"), + French_Pass("BDEDFD"), + London_Hue("BEA6C3"), + Pink_Swan("BEB5B7"), + Fuego("BEDE0D"), + Rose_of_Sharon("BF5500"), + Tide("BFB8B0"), + Blue_Haze("BFBED8"), + Silver_Sand("BFC1C2"), + Key_Lime_Pie("BFC921"), + Ziggurat("BFDBE2"), + Lime("BFFF00"), + Thunderbird("C02B18"), + Mojo("C04737"), + Old_Rose("C08081"), + Silver("C0C0C0"), + Pale_Leaf("C0D3B9"), + Pixie_Green("C0D8B6"), + Tia_Maria("C1440E"), + Fuchsia_Pink("C154C1"), + Buddha_Gold("C1A004"), + Bison_Hide("C1B7A4"), + Tea("C1BAB0"), + Gray_Suit("C1BECD"), + Sprout("C1D7B0"), + Sulu("C1F07C"), + Indochine("C26B03"), + Twine("C2955D"), + Cotton_Seed("C2BDB6"), + Pumice("C2CAC4"), + Jagged_Ice("C2E8E5"), + Maroon_Flush("C32148"), + Indian_Khaki("C3B091"), + Pale_Slate("C3BFC1"), + Gray_Nickel("C3C3BD"), + Periwinkle_Gray("C3CDE6"), + Tiara("C3D1D1"), + Tropical_Blue("C3DDF9"), + Cardinal("C41E3A"), + Fuzzy_Wuzzy_Brown("C45655"), + Orange_Roughy("C45719"), + Mist_Gray("C4C4BC"), + Coriander("C4D0B0"), + Mint_Tulip("C4F4EB"), + Mulberry("C54B8C"), + Nugget("C59922"), + Tussock("C5994B"), + Sea_Mist("C5DBCA"), + Yellow_Green("C5E17A"), + Brick_Red("C62D42"), + Contessa("C6726B"), + Oriental_Pink("C69191"), + Roti("C6A84B"), + Ash("C6C3B5"), + Kangaroo("C6C8BD"), + Las_Palmas("C6E610"), + Monza("C7031E"), + Red_Violet("C71585"), + Coral_Reef("C7BCA2"), + Melrose("C7C1FF"), + Cloud("C7C4BF"), + Ghost("C7C9D5"), + Pine_Glade("C7CD90"), + Botticelli("C7DDE5"), + Antique_Brass("C88A65"), + Lilac("C8A2C8"), + Hokey_Pokey("C8A528"), + Lily("C8AABF"), + Laser("C8B568"), + Edgewater("C8E3D7"), + Piper("C96323"), + Pizza("C99415"), + Light_Wisteria("C9A0DC"), + Rodeo_Dust("C9B29B"), + Sundance("C9B35B"), + Earls_Green("C9B93B"), + Silver_Rust("C9C0BB"), + Conch("C9D9D2"), + Reef("C9FFA2"), + Aero_Blue("C9FFE5"), + Flush_Mahogany("CA3435"), + Turmeric("CABB48"), + Paris_White("CADCD4"), + Bitter_Lemon("CAE00D"), + Skeptic("CAE6DA"), + Viola("CB8FA9"), + Foggy_Gray("CBCAB6"), + Green_Mist("CBD3B0"), + Nebula("CBDBD6"), + Persian_Red("CC3333"), + Burnt_Orange("CC5500"), + Ochre("CC7722"), + Puce("CC8899"), + Thistle_Green("CCCAA8"), + Periwinkle("CCCCFF"), + Electric_Lime("CCFF00"), + Tenn("CD5700"), + Chestnut_Rose("CD5C5C"), + Brandy_Punch("CD8429"), + Onahau("CDF4FF"), + Sorrell_Brown("CEB98F"), + Cold_Turkey("CEBABA"), + Yuma("CEC291"), + Chino("CEC7A7"), + Eunry("CFA39D"), + Old_Gold("CFB53B"), + Tasman("CFDCCF"), + Surf_Crest("CFE5D2"), + Humming_Bird("CFF9F3"), + Scandal("CFFAF4"), + Red_Stage("D05F04"), + Hopbush("D06DA1"), + Meteor("D07D12"), + Perfume("D0BEF8"), + Prelude("D0C0E5"), + Tea_Green("D0F0C0"), + Geebung("D18F1B"), + Vanilla("D1BEA8"), + Soft_Amber("D1C6B4"), + Celeste("D1D2CA"), + Mischka("D1D2DD"), + Pear("D1E231"), + Hot_Cinnamon("D2691E"), + Raw_Sienna("D27D46"), + Careys_Pink("D29EAA"), + Tan("D2B48C"), + Deco("D2DA97"), + Blue_Romance("D2F6DE"), + Gossip("D2F8B0"), + Sisal("D3CBBA"), + Swirl("D3CDC5"), + Charm("D47494"), + Clam_Shell("D4B6AF"), + Straw("D4BF8D"), + Akaroa("D4C4A8"), + Bird_Flower("D4CD16"), + Iron("D4D7D9"), + Geyser("D4DFE2"), + Hawkes_Blue("D4E2FC"), + Grenadier("D54600"), + Can_Can("D591A4"), + Whiskey("D59A6F"), + Winter_Hazel("D5D195"), + Granny_Apple("D5F6E3"), + My_Pink("D69188"), + Tacha("D6C562"), + Moon_Raker("D6CEF6"), + Quill_Gray("D6D6D1"), + Snowy_Mint("D6FFDB"), + New_York_Pink("D7837F"), + Pavlova("D7C498"), + Fog("D7D0FF"), + Valencia("D84437"), + Japonica("D87C63"), + Thistle("D8BFD8"), + Maverick("D8C2D5"), + Foam("D8FCFA"), + Cabaret("D94972"), + Burning_Sand("D99376"), + Cameo("D9B99B"), + Timberwolf("D9D6CF"), + Tana("D9DCC1"), + Link_Water("D9E4F5"), + Mabel("D9F7FF"), + Cerise("DA3287"), + Flame_Pea("DA5B38"), + Bamboo("DA6304"), + Red_Damask("DA6A41"), + Orchid("DA70D6"), + Copperfield("DA8A67"), + Golden_Grass("DAA520"), + Zanah("DAECD6"), + Iceberg("DAF4F0"), + Oyster_Bay("DAFAFF"), + Cranberry("DB5079"), + Petite_Orchid("DB9690"), + Di_Serria("DB995E"), + Alto("DBDBDB"), + Frosted_Mint("DBFFF8"), + Crimson("DC143C"), + Punch("DC4333"), + Galliano("DCB20C"), + Blossom("DCB4BC"), + Wattle("DCD747"), + Westar("DCD9D2"), + Moon_Mist("DCDDCC"), + Caper("DCEDB4"), + Swans_Down("DCF0EA"), + Swiss_Coffee("DDD6D5"), + White_Ice("DDF9F1"), + Cerise_Red("DE3163"), + Roman("DE6360"), + Tumbleweed("DEA681"), + Gold_Tips("DEBA13"), + Brandy("DEC196"), + Wafer("DECBC6"), + Sapling("DED4A4"), + Barberry("DED717"), + Beryl_Green("DEE5C0"), + Pattens_Blue("DEF5FF"), + Heliotrope("DF73FF"), + Apache("DFBE6F"), + Chenin("DFCD6F"), + Lola("DFCFDB"), + Willow_Brook("DFECDA"), + Chartreuse_Yellow("DFFF00"), + Mauve("E0B0FF"), + Anzac("E0B646"), + Harvest_Gold("E0B974"), + Calico("E0C095"), + Baby_Blue("E0FFFF"), + Sunglo("E16865"), + Equator("E1BC64"), + Pink_Flare("E1C0C8"), + Periglacial_Blue("E1E6D6"), + Kidnapper("E1EAD4"), + Tara("E1F6E8"), + Mandy("E25465"), + Terracotta("E2725B"), + Golden_Bell("E28913"), + Shocking("E292C0"), + Dixie("E29418"), + Light_Orchid("E29CD2"), + Snuff("E2D8ED"), + Mystic("E2EBED"), + Apple_Green("E2F3EC"), + Razzmatazz("E30B5C"), + Alizarin_Crimson("E32636"), + Cinnabar("E34234"), + Cavern_Pink("E3BEBE"), + Peppermint("E3F5E1"), + Mindaro("E3F988"), + Deep_Blush("E47698"), + Gamboge("E49B0F"), + Melanie("E4C2D5"), + Twilight("E4CFDE"), + Bone("E4D1C0"), + Sunflower("E4D422"), + Grain_Brown("E4D5B7"), + Zombie("E4D69B"), + Frostee("E4F6E7"), + Snow_Flurry("E4FFD1"), + Amaranth("E52B50"), + Zest("E5841B"), + Dust_Storm("E5CCC9"), + Stark_White("E5D7BD"), + Hampton("E5D8AF"), + Bon_Jour("E5E0E1"), + Mercury("E5E5E5"), + Polar("E5F9F6"), + Trinidad("E64E03"), + Gold_Sand("E6BE8A"), + Cashmere("E6BEA5"), + Double_Spanish_White("E6D7B9"), + Satin_Linen("E6E4D4"), + Harp("E6F2EA"), + Off_Green("E6F8F3"), + Hint_of_Green("E6FFE9"), + Tranquil("E6FFFF"), + Mango_Tango("E77200"), + Christine("E7730A"), + Tonys_Pink("E79F8C"), + Kobi("E79FC4"), + Rose_Fog("E7BCB4"), + Corn("E7BF05"), + Putty("E7CD8C"), + Gray_Nurse("E7ECE6"), + Lily_White("E7F8FF"), + Bubbles("E7FEFF"), + Fire_Bush("E89928"), + Shilo("E8B9B3"), + Pearl_Bush("E8E0D5"), + Green_White("E8EBE0"), + Chrome_White("E8F1D4"), + Gin("E8F2EB"), + Aqua_Squeeze("E8F5F2"), + Clementine("E96E00"), + Burnt_Sienna("E97451"), + Tahiti_Gold("E97C07"), + Oyster_Pink("E9CECD"), + Confetti("E9D75A"), + Ebb("E9E3E3"), + Ottoman("E9F8ED"), + Clear_Day("E9FFFD"), + Carissma("EA88A8"), + Porsche("EAAE69"), + Tulip_Tree("EAB33B"), + Rob_Roy("EAC674"), + Raffia("EADAB8"), + White_Rock("EAE8D4"), + Panache("EAF6EE"), + Solitude("EAF6FF"), + Aqua_Spring("EAF9F5"), + Dew("EAFFFE"), + Apricot("EB9373"), + Zinnwaldite("EBC2AF"), + Fuel_Yellow("ECA927"), + Ronchi("ECC54E"), + French_Lilac("ECC7EE"), + Just_Right("ECCDB9"), + Wild_Rice("ECE090"), + Fall_Green("ECEBBD"), + Aths_Special("ECEBCE"), + Starship("ECF245"), + Red_Ribbon("ED0A3F"), + Tango("ED7A1C"), + Carrot_Orange("ED9121"), + Sea_Pink("ED989E"), + Tacao("EDB381"), + Desert_Sand("EDC9AF"), + Pancho("EDCDAB"), + Chamois("EDDCB1"), + Primrose("EDEA99"), + Frost("EDF5DD"), + Aqua_Haze("EDF5F5"), + Zumthor("EDF6FF"), + Narvik("EDF9F1"), + Honeysuckle("EDFC84"), + Lavender_Magenta("EE82EE"), + Beauty_Bush("EEC1BE"), + Chalky("EED794"), + Almond("EED9C4"), + Flax("EEDC82"), + Bizarre("EEDEDA"), + Double_Colonial_White("EEE3AD"), + Cararra("EEEEE8"), + Manz("EEEF78"), + Tahuna_Sands("EEF0C8"), + Athens_Gray("EEF0F3"), + Tusk("EEF3C3"), + Loafer("EEF4DE"), + Catskill_White("EEF6F7"), + Twilight_Blue("EEFDFF"), + Jonquil("EEFF9A"), + Rice_Flower("EEFFE2"), + Jaffa("EF863F"), + Gallery("EFEFEF"), + Porcelain("EFF2F3"), + Mauvelous("F091A9"), + Golden_Dream("F0D52D"), + Golden_Sand("F0DB7D"), + Buff("F0DC82"), + Prim("F0E2EC"), + Khaki("F0E68C"), + Selago("F0EEFD"), + Titan_White("F0EEFF"), + Alice_Blue("F0F8FF"), + Feta("F0FCEA"), + Gold_Drop("F18200"), + Wewak("F19BAB"), + Sahara_Sand("F1E788"), + Parchment("F1E9D2"), + Blue_Chalk("F1E9FF"), + Mint_Julep("F1EEC1"), + Seashell("F1F1F1"), + Saltpan("F1F7F2"), + Tidal("F1FFAD"), + Chiffon("F1FFC8"), + Flamingo("F2552A"), + Tangerine("F28500"), + Mandys_Pink("F2C3B2"), + Concrete("F2F2F2"), + Black_Squeeze("F2FAFA"), + Pomegranate("F34723"), + Buttercup("F3AD16"), + New_Orleans("F3D69D"), + Vanilla_Ice("F3D9DF"), + Sidecar("F3E7BB"), + Dawn_Pink("F3E9E5"), + Wheatfield("F3EDCF"), + Canary("F3FB62"), + Orinoco("F3FBD4"), + Carla("F3FFD8"), + Hollywood_Cerise("F400A1"), + Sandy_brown("F4A460"), + Saffron("F4C430"), + Ripe_Lemon("F4D81C"), + Janna("F4EBD3"), + Pampas("F4F2EE"), + Wild_Sand("F4F4F4"), + Zircon("F4F8FF"), + Froly("F57584"), + Cream_Can("F5C85C"), + Manhattan("F5C999"), + Maize("F5D5A0"), + Wheat("F5DEB3"), + Sandwisp("F5E7A2"), + Pot_Pourri("F5E7E2"), + Albescent_White("F5E9D3"), + Soft_Peach("F5EDEF"), + Ecru_White("F5F3E5"), + Beige("F5F5DC"), + Golden_Fizz("F5FB3D"), + Australian_Mint("F5FFBE"), + French_Rose("F64A8A"), + Brilliant_Rose("F653A6"), + Illusion("F6A4C9"), + Merino("F6F0E6"), + Black_Haze("F6F7F7"), + Spring_Sun("F6FFDC"), + Violet_Red("F7468A"), + Chilean_Fire("F77703"), + Persian_Pink("F77FBE"), + Rajah("F7B668"), + Azalea("F7C8DA"), + We_Peep("F7DBE6"), + Quarter_Spanish_White("F7F2E1"), + Whisper("F7F5FA"), + Snow_Drift("F7FAF7"), + Casablanca("F8B853"), + Chantilly("F8C3DF"), + Cherub("F8D9E9"), + Marzipan("F8DB9D"), + Energy_Yellow("F8DD5C"), + Givry("F8E4BF"), + White_Linen("F8F0E8"), + Magnolia("F8F4FF"), + Spring_Wood("F8F6F1"), + Coconut_Cream("F8F7DC"), + White_Lilac("F8F7FC"), + Desert_Storm("F8F8F7"), + Texas("F8F99C"), + Corn_Field("F8FACD"), + Mimosa("F8FDD3"), + Carnation("F95A61"), + Saffron_Mango("F9BF58"), + Carousel_Pink("F9E0ED"), + Dairy_Cream("F9E4BC"), + Portica("F9E663"), + Amour("F9EAF3"), + Rum_Swizzle("F9F8E4"), + Dolly("F9FF8B"), + Sugar_Cane("F9FFF6"), + Ecstasy("FA7814"), + Tan_Hide("FA9D5A"), + Corvette("FAD3A2"), + Peach_Yellow("FADFAD"), + Turbo("FAE600"), + Astra("FAEAB9"), + Champagne("FAECCC"), + Linen("FAF0E6"), + Fantasy("FAF3F0"), + Citrine_White("FAF7D6"), + Alabaster("FAFAFA"), + Hint_of_Yellow("FAFDE4"), + Milan("FAFFA4"), + Brink_Pink("FB607F"), + Geraldine("FB8989"), + Lavender_Rose("FBA0E3"), + Sea_Buckthorn("FBA129"), + Sun("FBAC13"), + Lavender_Pink("FBAED2"), + Rose_Bud("FBB2A3"), + Cupid("FBBEDA"), + Classic_Rose("FBCCE7"), + Apricot_Peach("FBCEB1"), + Banana_Mania("FBE7B2"), + Marigold_Yellow("FBE870"), + Festival("FBE96C"), + Sweet_Corn("FBEA8C"), + Candy_Corn("FBEC5D"), + Hint_of_Red("FBF9F9"), + Shalimar("FBFFBA"), + Shocking_Pink("FC0FC0"), + Tickle_Me_Pink("FC80A5"), + Tree_Poppy("FC9C1D"), + Lightning_Yellow("FCC01E"), + Goldenrod("FCD667"), + Candlelight("FCD917"), + Cherokee("FCDA98"), + Double_Pearl_Lusta("FCF4D0"), + Pearl_Lusta("FCF4DC"), + Vista_White("FCF8F7"), + Bianca("FCFBF3"), + Moon_Glow("FCFEDA"), + China_Ivory("FCFFE7"), + Ceramic("FCFFF9"), + Torch_Red("FD0E35"), + Wild_Watermelon("FD5B78"), + Crusta("FD7B33"), + Sorbus("FD7C07"), + Sweet_Pink("FD9FA2"), + Light_Apricot("FDD5B1"), + Pig_Pink("FDD7E4"), + Cinderella("FDE1DC"), + Golden_Glow("FDE295"), + Lemon("FDE910"), + Old_Lace("FDF5E6"), + Half_Colonial_White("FDF6D3"), + Drover("FDF7AD"), + Pale_Prim("FDFEB8"), + Cumulus("FDFFD5"), + Persian_Rose("FE28A2"), + Sunset_Orange("FE4C40"), + Bittersweet("FE6F5E"), + California("FE9D04"), + Yellow_Sea("FEA904"), + Melon("FEBAAD"), + Bright_Sun("FED33C"), + Dandelion("FED85D"), + Salomie("FEDB8D"), + Cape_Honey("FEE5AC"), + Remy("FEEBF3"), + Oasis("FEEFCE"), + Bridesmaid("FEF0EC"), + Beeswax("FEF2C7"), + Bleach_White("FEF3D8"), + Pipi("FEF4CC"), + Half_Spanish_White("FEF4DB"), + Wisp_Pink("FEF4F8"), + Provincial_Pink("FEF5F1"), + Half_Dutch_White("FEF7DE"), + Solitaire("FEF8E2"), + White_Pointer("FEF8FF"), + Off_Yellow("FEF9E3"), + Orange_White("FEFCED"), + Red("FF0000"), + Rose("FF007F"), + Purple_Pizzazz("FF00CC"), + Magenta("FF00FF", "Fuchsia"), + Scarlet("FF2400"), + Wild_Strawberry("FF3399"), + Razzle_Dazzle_Rose("FF33CC"), + Radical_Red("FF355E"), + Red_Orange("FF3F34"), + Coral_Red("FF4040"), + Vermilion("FF4D00"), + International_Orange("FF4F00"), + Outrageous_Orange("FF6037"), + Blaze_Orange("FF6600"), + Pink_Flamingo("FF66FF"), + Orange("FF681F"), + Hot_Pink("FF69B4"), + Persimmon("FF6B53"), + Blush_Pink("FF6FFF"), + Burning_Orange("FF7034"), + Pumpkin("FF7518"), + Flamenco("FF7D07"), + Flush_Orange("FF7F00"), + Coral("FF7F50"), + Salmon("FF8C69"), + Pizazz("FF9000"), + West_Side("FF910F"), + Pink_Salmon("FF91A4"), + Neon_Carrot("FF9933"), + Atomic_Tangerine("FF9966"), + Vivid_Tangerine("FF9980"), + Sunshade("FF9E2C"), + Orange_Peel("FFA000"), + Mona_Lisa("FFA194"), + Web_Orange("FFA500"), + Carnation_Pink("FFA6C9"), + Hit_Pink("FFAB81"), + Yellow_Orange("FFAE42"), + Cornflower_Lilac("FFB0AC"), + Sundown("FFB1B3"), + My_Sin("FFB31F"), + Texas_Rose("FFB555"), + Cotton_Candy("FFB7D5"), + Macaroni_and_Cheese("FFB97B"), + Selective_Yellow("FFBA00"), + Koromiko("FFBD5F"), + Amber("FFBF00"), + Wax_Flower("FFC0A8"), + Pink("FFC0CB"), + Your_Pink("FFC3C0"), + Supernova("FFC901"), + Flesh("FFCBA4"), + Sunglow("FFCC33"), + Golden_Tainoi("FFCC5C"), + Peach_Orange("FFCC99"), + Chardonnay("FFCD8C"), + Pastel_Pink("FFD1DC"), + Romantic("FFD2B7"), + Grandis("FFD38C"), + Gold("FFD700"), + School_bus_Yellow("FFD800"), + Cosmos("FFD8D9"), + Mustard("FFDB58"), + Peach_Schnapps("FFDCD6"), + Caramel("FFDDAF"), + Tuft_Bush("FFDDCD"), + Watusi("FFDDCF"), + Pink_Lace("FFDDF4"), + Navajo_White("FFDEAD"), + Frangipani("FFDEB3"), + Pippin("FFE1DF"), + Pale_Rose("FFE1F2"), + Negroni("FFE2C5"), + Cream_Brulee("FFE5A0"), + Peach("FFE5B4"), + Tequila("FFE6C7"), + Kournikova("FFE772"), + Sandy_Beach("FFEAC8"), + Karry("FFEAD4"), + Broom("FFEC13"), + Colonial_White("FFEDBC"), + Derby("FFEED8"), + Vis_Vis("FFEFA1"), + Egg_White("FFEFC1"), + Papaya_Whip("FFEFD5"), + Fair_Pink("FFEFEC"), + Peach_Cream("FFF0DB"), + Lavender_blush("FFF0F5"), + Gorse("FFF14F"), + Buttermilk("FFF1B5"), + Pink_Lady("FFF1D8"), + Forget_Me_Not("FFF1EE"), + Tutu("FFF1F9"), + Picasso("FFF39D"), + Chardon("FFF3F1"), + Paris_Daisy("FFF46E"), + Barley_White("FFF4CE"), + Egg_Sour("FFF4DD"), + Sazerac("FFF4E0"), + Serenade("FFF4E8"), + Chablis("FFF4F3"), + Seashell_Peach("FFF5EE"), + Sauvignon("FFF5F3"), + Milk_Punch("FFF6D4"), + Varden("FFF6DF"), + Rose_White("FFF6F5"), + Baja_White("FFF8D1"), + Gin_Fizz("FFF9E2"), + Early_Dawn("FFF9E6"), + Lemon_Chiffon("FFFACD"), + Bridal_Heath("FFFAF4"), + Scotch_Mist("FFFBDC"), + Soapstone("FFFBF9"), + Witch_Haze("FFFC99"), + Buttery_White("FFFCEA"), + Island_Spice("FFFCEE"), + Cream("FFFDD0"), + Chilean_Heath("FFFDE6"), + Travertine("FFFDE8"), + Orchid_White("FFFDF3"), + Quarter_Pearl_Lusta("FFFDF4"), + Half_and_Half("FFFEE1"), + Apricot_White("FFFEEC"), + Rice_Cake("FFFEF0"), + Black_White("FFFEF6"), + Romance("FFFEFD"), + Yellow("FFFF00"), + Laser_Lemon("FFFF66"), + Pale_Canary("FFFF99"), + Portafino("FFFFB4"), + Ivory("FFFFF0"), + White("FFFFFF"); + + private String hex; + private String[] extra; + private long rgb = 0; + + CMICustomColors(String hex, String... extra) { + this.hex = hex.toLowerCase(); + this.extra = extra; + rgb = Long.parseLong(hex, 16); + } + + public String getHex() { + return hex; + } + + public String[] getExtra() { + return extra; + } + + public long getRgb() { + return rgb; + } +} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessage.java b/src/com/bekvon/bukkit/cmiLib/RawMessage.java index 2478ea196..3442b715b 100644 --- a/src/com/bekvon/bukkit/cmiLib/RawMessage.java +++ b/src/com/bekvon/bukkit/cmiLib/RawMessage.java @@ -1,14 +1,10 @@ package com.bekvon.bukkit.cmiLib; import java.util.ArrayList; -import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; -import java.util.Random; -import java.util.Set; import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -16,555 +12,440 @@ public class RawMessage { List parts = new ArrayList(); - List cleanParts = new ArrayList(); + List onlyText = new ArrayList(); - private String unfinished = ""; - private String unfinishedClean = ""; + LinkedHashMap temp = new LinkedHashMap(); + + RawMessageFragment fragment = new RawMessageFragment(); + RawMessageFragment hoverFragment = new RawMessageFragment(); + + private RawMessageFragment frozenFragment = new RawMessageFragment(); + private boolean freezeFormat = false; private String combined = ""; String combinedClean = ""; - private boolean dontBreakLine = false; - private boolean combineHoverOver = false; -// private boolean colorizeEntireWithLast = true; + private boolean dontBreakLine = false; public void clear() { parts = new ArrayList(); - cleanParts = new ArrayList(); + onlyText = new ArrayList(); combined = ""; combinedClean = ""; } - public RawMessage add(String text) { - return add(text, null, null, null, null); - } - - public RawMessage add(String text, String hoverText) { - return add(text, hoverText, null, null, null); - } - - public RawMessage add(String text, List hoverText) { - - String hover = ""; - if (hoverText != null) - for (String one : hoverText) { - if (!hover.isEmpty()) - hover += "\n"; - hover += one; - } - return add(text, hover.isEmpty() ? null : hover, null, null, null); - } - - public RawMessage add(String text, String hoverText, String command) { - return add(text, hoverText, command, null, null); - } - - public RawMessage add(String text, String hoverText, String command, String suggestion) { - return add(text, hoverText, command, suggestion, null); - } - - Set formats = new HashSet(); - CMIChatColor lastColor = null; - - Set savedFormats = new HashSet(); - CMIChatColor savedLastColor = null; - - CMIChatColor firstBlockColor = null; - - private String intoJsonColored(String text) { + private String textIntoJson(String text, boolean hover) { + if (text.isEmpty()) { + return ""; + } if (text.equalsIgnoreCase(" ")) { - text = "{\"text\":\" \"}"; - return text; + return " "; } - text = CMIChatColor.deColorize(text); - Pattern decolpattern = Pattern.compile(CMIChatColor.hexColorDecolRegex); - - Matcher decolmatch = decolpattern.matcher(text); - while (decolmatch.find()) { + Matcher match = CMIChatColor.fullPattern.matcher(text); + String matcher = null; - String string = decolmatch.group(); + List fragments = new ArrayList(); - string = "{#" + string.substring(2).replace("&", "") + "}"; - - text = text.replaceAll(decolmatch.group(), string); - } + RawMessageFragment f = hover ? hoverFragment : fragment; - List splited = new ArrayList(); - if (text.contains(" ")) { - for (String one : text.split(" ")) { -// if (this.isBreakLine() && one.contains("\\n")) { -// String[] split = one.split("\\\\n"); -// for (int i = 0; i < split.length; i++) { -// if (i < split.length - 1) { -// splited.add(split[i] + "\n"); -// } else { -// splited.add(split[i]); -// } -// } -// } else { - splited.add(one); -// } - splited.add(" "); + String lastText = ""; + while (match.find()) { + matcher = match.group(); + String[] split = text.split(matcher.replace("#", "\\#").replace("{", "\\{").replace("}", "\\}"), 2); + text = ""; + for (int i = 1; i < split.length; i++) { + text += split[i]; } - if (text.length() > 1 && text.endsWith(" ")) - splited.add(" "); - if (text.startsWith(" ")) - splited.add(" "); - - if (!splited.isEmpty()) - splited.remove(splited.size() - 1); - } else - splited.add(text); + if (split[0] != null && !split[0].isEmpty()) { + String t = split[0]; - Pattern prepattern = Pattern.compile(CMIChatColor.hexColorRegex); + String t2 = lastText; + lastText = t; - List plt = new ArrayList(splited); - splited.clear(); - for (String one : plt) { - Matcher match = prepattern.matcher(one); - - boolean found = false; - - String prev = null; - String end = null; - while (match.find()) { - if (match.group(2) == null) - continue; - found = true; - - CMIChatColor c = new CMIChatColor(match.group(2)); - - String[] spl = one.split("\\{\\#" + c.getHex() + "\\}"); - if (spl.length == 0 || spl[0].isEmpty()) { - prev = match.group(); - if (spl.length > 0) - end = spl[1]; - continue; + if (t2.endsWith(" ") && t.startsWith(" ")) { + t = t.substring(1); } -// if (prev != null) { -// splited.add(spl[0]); -// } else { - splited.add(spl[0]); -// } - - if (spl.length > 0) - end = spl[1]; - - one = one.substring(spl[0].length()); - prev = match.group(); - match = prepattern.matcher(one); + f.setText(t); + fragments.add(f); + f = new RawMessageFragment(f); } + CMIChatColor color = CMIChatColor.getColor(matcher); + if (color == null) + continue; - if (!found) { - if (prev != null) { - if (end != null) - splited.add(prev + end); - else - splited.add(prev); - } else { - if (end != null) - splited.add(end); - } - - splited.add(one); + if (color.isColor()) { + f.setLastColor(color); } else { - - if (prev != null) { - if (end != null) - splited.add(prev + end); - } else { - if (end != null) - splited.add(end); - } + f.addFormat(color); } } - String newText = ""; - - Pattern pattern = Pattern.compile("(&[0123456789abcdefklmnorABCDEFKLMNOR])|" + CMIChatColor.hexColorRegex); - - newText += "{\"text\":\""; - - for (String one : splited) { - - String colorString = ""; -// if (lastColor != null) -// colorString += lastColor.getColorCode(); -// else -// colorString += CMIChatColor.WHITE.getColorCode(); -// for (CMIChatColor oneC : formats) { -// colorString = colorString + oneC.getColorCode(); -// } + if (!text.isEmpty()) { + + if (lastText.endsWith(" ") && text.startsWith(" ")) + text = text.substring(1); + + RawMessageFragment t = new RawMessageFragment(f); + + t.setText(text); + fragments.add(t); + } + + if (hover) + hoverFragment = f; + else + fragment = f; + + StringBuilder finalText = new StringBuilder(); + if (Version.isCurrentEqualOrHigher(Version.v1_16_R1)) { + for (RawMessageFragment one : fragments) { + if (!finalText.toString().isEmpty()) + finalText.append("},{"); + StringBuilder options = new StringBuilder(); + for (CMIChatColor format : one.getFormats()) { + if (!options.toString().isEmpty()) + options.append(","); + if (format.equals(CMIChatColor.UNDERLINE)) + options.append("\"underlined\":true"); + else if (format.equals(CMIChatColor.BOLD)) + options.append("\"bold\":true"); + else if (format.equals(CMIChatColor.ITALIC)) + options.append("\"italic\":true"); + else if (format.equals(CMIChatColor.STRIKETHROUGH)) + options.append("\"strikethrough\":true"); + else if (format.equals(CMIChatColor.MAGIC)) + options.append("\"obfuscated\":true"); + } + if (!options.toString().isEmpty()) { + finalText.append(options.toString()); + finalText.append(","); + } - if (one.contains("&") || one.contains("{") && one.contains("}")) { - Matcher match = pattern.matcher(one); - while (match.find()) { - String color = CMIChatColor.getLastColors(match.group(0)); - CMIChatColor c = CMIChatColor.getColor(color); - if (c == null && match.group(3) != null) { - c = new CMIChatColor(match.group(3)); - } - if (c != null) { - if (c.isFormat()) { - formats.add(c); - } else if (c.isReset()) { - formats.clear(); - lastColor = null; -// firstBlockColor = null; - } else if (c.isColor()) { - if (c.getHex() == null) - lastColor = c; - formats.clear(); - firstBlockColor = c; - - if (c.getHex() != null) { - one = "\"},{\"color\":\"#" + c.getHex() + "\",\"text\":\"" + one; - } - } - - if (c.isFormat()) { - } else if (c.isReset()) { - } else if (c.isColor() && c.getHex() == null) { - String form = ""; - for (CMIChatColor oneC : formats) { - form += oneC.getColorCode(); - } - one = one.replace(c.getColorCode(), c.getColorCode() + form); - } else if (c.getHex() != null) { - String form = ""; - for (CMIChatColor oneC : formats) { - form += oneC.getColorCode(); - } - -// CMIDebug.d("*"+net.md_5.bungee.api.ChatColor.of("#" + c.getHex())+ "_"+net.md_5.bungee.api.ChatColor.of("#FF00FF")+ "+"); - -// one = one.replace("{#" + c.getHex() + "}", "\u00A7x\u00A76\u00A76\u00A70\u00A70\u00A7c\u00A7c" + form); - } - if (c.getHex() != null) { - one = one.replace("{#" + c.getHex() + "}", ""); - } + if (one.getLastColor() != null) { + if (one.getLastColor().getHex() != null) + finalText.append("\"color\":\"#" + one.getLastColor().getHex() + "\","); + else if (one.getLastColor().getName() != null) { + finalText.append("\"color\":\"" + one.getLastColor().getName().toLowerCase() + "\","); } } + String t = one.getText(); + finalText.append("\"text\":\"" + t + "\""); } + } else { + for (RawMessageFragment one : fragments) { + if (!finalText.toString().isEmpty()) + finalText.append("},{"); + StringBuilder options = new StringBuilder(); - newText += colorString + one; - + if (one.getLastColor() != null && one.getLastColor().getName() != null) { + options.append(one.getLastColor().getColorCode()); + } + for (CMIChatColor format : one.getFormats()) { + if (format.equals(CMIChatColor.UNDERLINE)) + options.append("&n"); + else if (format.equals(CMIChatColor.BOLD)) + options.append("&l"); + else if (format.equals(CMIChatColor.ITALIC)) + options.append("&o"); + else if (format.equals(CMIChatColor.STRIKETHROUGH)) + options.append("&m"); + else if (format.equals(CMIChatColor.MAGIC)) + options.append("&k"); + } + String t = one.getText(); + finalText.append("\"text\":\"" + options.toString() + t + "\""); + } } - - newText += "\"}"; - return newText; + if (finalText.toString().isEmpty()) + return ""; + return "{" + finalText.toString() + "}"; } - private String processText(String text) { - Random rand = new Random(); - - String breakLine0 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); - text = text.replace("\\n", breakLine0); - - String breakLine3 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); - text = text.replace("\\", breakLine3); - - String breakLine2 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); - text = text.replace("\\\"", breakLine2); - - String breakLine1 = String.valueOf(rand.nextInt(Integer.MAX_VALUE)); - text = text.replace("\"", breakLine1); - - text = text.replace(breakLine3, "\\\\"); - text = text.replace(breakLine0, "\\n"); - text = text.replace(breakLine1, "\\\""); - text = text.replace(breakLine2, "\\\""); - - return text; + @Deprecated + public RawMessage add(String text, String hoverText, String command, String suggestion, String url) { + add(text, hoverText, command, suggestion, url, null); + return this; } - public RawMessage addText(String text) { - if (text == null) - return this; - text = processText(text); - - if (dontBreakLine) { - text = text.replace("\n", "\\\\n"); - text = text.replace("\\n", "\\\\n"); - text = text.replace("\\\\\\n", "\\\\n"); - } + @Deprecated + public RawMessage add(String text, String hoverText, String command, String suggestion, String url, String insertion) { + this.addText(text); + this.addHover(hoverText); + this.addCommand(command); + this.addSuggestion(suggestion); + this.addUrl(url); + this.addInsertion(insertion); + return this; + } - text = text.replace("\n", "\\n"); + @Deprecated + public RawMessage addUrl(String text, String url) { + addUrl(text, url, null); + return this; + } - unfinishedClean = text; + @Deprecated + public RawMessage addUrl(String text, String url, String hoverText) { + this.addText(text); + this.addHover(hoverText); + this.addUrl(url); + return this; + } - unfinished = "{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(text)).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]"; - if (firstBlockColor != null) { - if (firstBlockColor.getHex() == null) - unfinished += ",\"color\":\"" + firstBlockColor.getName().toLowerCase() + "\""; - else { - unfinished += ",\"color\":\"#" + firstBlockColor.getHex() + "\""; - } - } + @Deprecated + public RawMessage add(String text) { + return add(text, null, null, null, null); + } - return this; + @Deprecated + public RawMessage add(String text, String hoverText) { + return add(text, hoverText, null, null, null); } -// public RawMessage addHoverText(List hoverText) { -// String hover = ""; -// if (hoverText != null) -// for (Object one : hoverText) { -// if (!hover.isEmpty()) -// hover += "\n"; -// hover += one.toString(); -// } -// return addHoverText(hover); -// } + @Deprecated + public RawMessage add(String text, List hoverText) { - public RawMessage addHoverText(List hoverText) { String hover = ""; - if (hoverText != null) { + if (hoverText != null) for (String one : hoverText) { if (!hover.isEmpty()) hover += "\n"; hover += one; } - } - return addHoverText(hover); + return add(text, hover.isEmpty() ? null : hover, null, null, null); } - public RawMessage addHoverText(String hoverText) { - if (hoverText != null && !hoverText.isEmpty()) { - hoverText = processText(hoverText); - hoverText = hoverText.replace(" \n", " \\n"); - hoverText = hoverText.replace("\n", "\\n"); - unfinished += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(hoverText)) + "]}}"; - } - return this; + @Deprecated + public RawMessage add(String text, String hoverText, String command) { + return add(text, hoverText, command, null, null); } - public RawMessage addCommand(String command) { - if (command != null) { - if (!command.startsWith("/")) - command = "/" + command; - unfinished += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}"; - } - return this; + @Deprecated + public RawMessage add(String text, String hoverText, String command, String suggestion) { + return add(text, hoverText, command, suggestion, null); } - public RawMessage addInsertion(String suggestion) { - if (suggestion != null) { - - suggestion = processText(suggestion); - - suggestion = suggestion.replace("\\n", "\\\\n"); - suggestion = suggestion.replace(" \\n", " \\\\n"); - suggestion = suggestion.replace(" \n", " \\\\n"); + @Deprecated + public RawMessage addHoverText(List hoverText) { + return addHover(hoverText); + } - unfinished += ",\"insertion\":\"" + suggestion + "\""; - } + @Deprecated + public RawMessage addHoverText(String hover) { + return addHover(hover); + } + public RawMessage addItem(String text, ItemStack item, String command, String suggestion, String insertion) { + this.addText(text); + this.addCommand(command); + this.addSuggestion(suggestion); + this.addInsertion(insertion); + this.addItem(item); return this; } - public RawMessage addSuggestion(String suggestion) { - if (suggestion != null) { - - suggestion = processText(suggestion); - - suggestion = suggestion.replace("\\n", "\\\\n"); - suggestion = suggestion.replace(" \\n", " \\\\n"); - suggestion = suggestion.replace(" \n", " \\\\n"); + public RawMessage addText(String text) { +// CMIDebug.c(text); + if (text == null || text.isEmpty()) + return this; + if (temp.containsKey(RawMessagePartType.Text)) + build(); - unfinished += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}"; - } +// if (this.isDontBreakLine()) { + onlyText.add(CMIChatColor.translate(text)); + text = escape(text, this.isDontBreakLine()); +// } + text = textIntoJson(text, false); + String f = ""; + if (text.isEmpty()) + f = "\"text\":\"\""; + else if (text.equalsIgnoreCase(" ")) + f = "\"text\":\" \""; + else + f = "\"text\":\"\",\"extra\":[" + CMIChatColor.translate(text).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]"; + temp.put(RawMessagePartType.Text, f); return this; } - public RawMessage addUrl(String url) { - if (url != null) { - url = processText(url); - if (!url.toLowerCase().startsWith("http://") || !url.toLowerCase().startsWith("https://")) - url = "http://" + url; - unfinished += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}"; + public RawMessage addHover(List hoverText) { + StringBuilder hover = new StringBuilder(); + if (hoverText != null) { + for (String one : hoverText) { + if (!hover.toString().isEmpty()) + hover.append("\n"); + hover.append(one); + } } - return this; + return addHover(hover.toString()); } - public RawMessage build() { - if (unfinished.isEmpty()) + public RawMessage addHover(String hover) { + hoverFragment = new RawMessageFragment(); + if (hover == null || hover.isEmpty()) return this; - unfinished += "}"; - unfinished = unfinished.startsWith("{") ? unfinished : "{" + unfinished + "}"; - parts.add(unfinished); - cleanParts.add(CMIChatColor.translate(unfinishedClean)); - - unfinished = ""; - unfinishedClean = ""; + hover = escape(hover, false); + hover = textIntoJson(hover, true); + String f = ""; + if (hover.isEmpty()) + f = "\"text\":\"\""; + else if (hover.equalsIgnoreCase(" ")) + f = "\"text\":\" \""; + else + f = "\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(hover).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]}}"; + temp.put(RawMessagePartType.HoverText, f); return this; } - public RawMessage add(String text, String hoverText, String command, String suggestion, String url) { - return add(text, hoverText, command, suggestion, url, null); + public RawMessage addCommand(String command) { + if (command == null || command.isEmpty()) + return this; + if (!command.startsWith("/")) + command = "/" + command; + String f = "\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + CMIChatColor.deColorize(command) + "\"}"; + temp.put(RawMessagePartType.ClickCommand, f); + return this; } - public RawMessage add(String text, String hoverText, String command, String suggestion, String url, String insertion) { - if (text == null) + public RawMessage addSuggestion(String suggestion) { + if (suggestion == null || suggestion.isEmpty()) return this; - - text = processText(text); - - if (dontBreakLine) { - text = text.replace("\n", "\\\\n"); - text = text.replace("\\n", "\\\\n"); - text = text.replace("\\\\\\n", "\\\\n"); - } - - text = text.replace("\n", "\\n"); - - String f = "{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(text)).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]"; - if (firstBlockColor != null) { - if (firstBlockColor.getHex() == null) - f += ",\"color\":\"" + firstBlockColor.getName().toLowerCase() + "\""; - else { - f += ",\"color\":\"#" + firstBlockColor.getHex() + "\""; - } - } - -// f+=",\"extra\":[{\"text\":\"Extra\"},{\"text\":\"Extra1\"}]"; - - if (insertion != null) { - insertion = processText(insertion); - f += ",\"insertion\":\"" + insertion + "\""; - } - - if (hoverText != null && !hoverText.isEmpty()) { - hoverText = processText(hoverText); - hoverText = hoverText.replace(" \n", " \\n"); - hoverText = hoverText.replace("\n", "\\n"); - f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(hoverText)) + "]}}"; - } - - if (suggestion != null) { - - suggestion = processText(suggestion); - - suggestion = suggestion.replace("\\n", "\\\\n"); - suggestion = suggestion.replace(" \\n", " \\\\n"); - suggestion = suggestion.replace(" \n", " \\\\n"); - - f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}"; - } - if (url != null) { - url = processText(url); - if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://")) - url = "http://" + url; - f += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}"; - } - - if (command != null) { - if (!command.startsWith("/")) - command = "/" + command; - command = processText(command); - f += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}"; - } -// } - - f += "}"; - - parts.add(f); - cleanParts.add(CMIChatColor.translate(text)); -// if (this.isCombineHoverOver() && hoverText != null) { -// for (String one : hoverText.split("\\\\n")) { -// cleanParts.add("\n"+CMIChatColor.translate(one)); -// } -// } -// firstBlockColor = null; + suggestion = escape(suggestion, true); + String f = "\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}"; + temp.put(RawMessagePartType.ClickSuggestion, f); return this; } - public RawMessage addUrl(String text, String url) { - return addUrl(text, url, null); + public RawMessage addInsertion(String insertion) { + if (insertion == null || insertion.isEmpty()) + return this; + insertion = escape(insertion, true); + String f = "\"insertion\":\"" + CMIChatColor.deColorize(insertion) + "\""; + temp.put(RawMessagePartType.ClickInsertion, f); + return this; } - public RawMessage addUrl(String text, String url, String hoverText) { - if (text == null) + public RawMessage addItem(ItemStack item) { + if (item == null) return this; + String res = CMIReflections.toJson(item.clone()); + String f = "\"hoverEvent\":{\"action\":\"show_item\",\"value\":\"" + escape(res, true) + "\"}"; + temp.put(RawMessagePartType.HoverItem, f); + return this; + } - text = processText(text); - String f = "{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(text)).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]"; - if (firstBlockColor != null) { - if (firstBlockColor.getHex() == null) - f += ",\"color\":\"" + firstBlockColor.getName().toLowerCase() + "\""; - else { - f += ",\"color\":\"#" + firstBlockColor.getHex() + "\""; - } - } - if (hoverText != null && !hoverText.isEmpty()) { - - hoverText = processText(hoverText); - hoverText = hoverText.startsWith(" ") ? hoverText.substring(1) : hoverText; - f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(hoverText)).replace( - CMIChatColor.colorReplacerPlaceholder, "&") + "]}}"; - } - - url = url.endsWith(" ") ? url.substring(0, url.length() - 1) : url; - url = url.startsWith(" ") ? url.substring(1) : url; + public RawMessage addUrl(String url) { + if (url == null || url.isEmpty()) + return this; - if (url != null && !url.isEmpty()) { - if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://")) - url = "http://" + url; - url = processText(url); - f += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}"; - } - f += "}"; - parts.add(f); - cleanParts.add(CMIChatColor.translate(text)); -// if (this.isCombineHoverOver() && hoverText != null) { -// for (String one : hoverText.split("\\n")) { -// cleanParts.add(CMIChatColor.translate(one)); -// } -// } -// firstBlockColor = null; + if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://")) + url = "http://" + url; + String f = "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}"; + temp.put(RawMessagePartType.ClickLink, f); return this; } - public RawMessage addItem(String text, ItemStack item, String command, String suggestion, String insertion) { - - if (text == null) - return this; - if (item == null) + public RawMessage build() { + if (temp.isEmpty()) return this; - item = item.clone(); + if (!temp.containsKey(RawMessagePartType.Text)) + return this; + String part = ""; + for (RawMessagePartType one : RawMessagePartType.values()) { + String t = temp.get(one); + if (t == null) + continue; + if (!part.isEmpty()) + part += ","; + part += t; + } + part = "{" + part + "}"; + temp.clear(); + parts.add(part); + return this; + } - String f = "{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(text)).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]"; + private static String escape(String s, boolean escapeNewLn) { - if (insertion != null) { - insertion = processText(insertion); - f += ",\"insertion\":\"" + insertion + "\""; - } + if (s == null) + return null; + StringBuffer sb = new StringBuffer(); + escape(s, sb); + if (escapeNewLn) + return sb.toString().replace(nl, "\\\\n"); + return sb.toString().replace(nl, "\n"); + } - String res = CMIReflections.toJson(item); + private static final String nl = "\u00A5n"; - f += ",\"hoverEvent\":{\"action\":\"show_item\",\"value\":\"" + res + "\"}"; + private static void escape(String s, StringBuffer sb) { + s = s.replace("\n", nl); + s = s.replace("\\n", nl); + for (int i = 0; i < s.length(); i++) { + char ch = s.charAt(i); - if (suggestion != null) { - suggestion = processText(suggestion); - f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + suggestion + "\"}"; - } - if (command != null) { - command = processText(command); - if (!command.startsWith("/")) - command = "/" + command; - f += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}"; + switch (ch) { + case '"': + sb.append("\\\""); + break; + case '\n': + sb.append("\\n"); + break; + case '\\': +// if (escapeNewLn) { + sb.append("\\\\"); +// } else { +// sb.append("\\"); +// } + break; + case '\b': + sb.append("\\b"); + break; + case '\f': + sb.append("\\f"); + break; + case '\r': + sb.append("\\r"); + break; + case '\t': + sb.append("\\t"); + break; + case '/': + sb.append("\\/"); + break; + default: + if ((ch >= '\u0000' && ch <= '\u001F') || (ch >= '\u007F' && ch <= '\u009F') || (ch >= '\u2000' && ch <= '\u20FF')) { + String ss = Integer.toHexString(ch); + sb.append("\\u"); + for (int k = 0; k < 4 - ss.length(); k++) { + sb.append('0'); + } + sb.append(ss.toUpperCase()); + } else { + sb.append(ch); + } + } } - f += "}"; - parts.add(f); - return this; +// for (int i = 0; i < s.length(); i++) { +// char ch = s.charAt(i); +// if (String.valueOf(ch).equals(nl)) { +// if (escapeNewLn) { +// sb.append("\\n"); +// } else { +// sb.append("\n"); +// } +// } else +// sb.append(ch); +// +// } } public List softCombine() { @@ -589,7 +470,7 @@ public List softCombine() { return ls; } - public RawMessage combine() { + private RawMessage combine() { String f = ""; for (String part : parts) { if (f.isEmpty()) @@ -600,13 +481,17 @@ public RawMessage combine() { } if (!f.isEmpty()) f += "]"; + + if (f.isEmpty()) + f = "{\"text\":\" \"}"; + combined = f; return this; } public RawMessage combineClean() { String f = ""; - for (String part : cleanParts) { + for (String part : onlyText) { f += part.replace("\\\"", "\""); } combinedClean = f; @@ -620,8 +505,10 @@ public RawMessage show(Player player) { public RawMessage show(Player player, boolean softCombined) { if (player == null) return this; - if (combined.isEmpty()) + if (combined.isEmpty()) { + this.build(); combine(); + } if (!player.isOnline()) return this; @@ -631,11 +518,9 @@ public RawMessage show(Player player, boolean softCombined) { if (one.isEmpty()) continue; RawMessageManager.send(player, one); -// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "minecraft:tellraw " + player.getName() + " " + one); } } else { RawMessageManager.send(player, combined); -// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "minecraft:tellraw " + player.getName() + " " + combined); } return this; @@ -656,24 +541,32 @@ public int getFinalLenght() { } public RawMessage show(CommandSender sender) { - if (combined.isEmpty()) + if (combined.isEmpty()) { + this.build(); combine(); - this.build(); + } if (sender instanceof Player) { show((Player) sender); } else { - Bukkit.getConsoleSender().sendMessage(CMIChatColor.translate(this.combineClean().combinedClean)); + sender.sendMessage(CMIChatColor.translate(this.combineClean().combinedClean)); } return this; } public String getRaw() { - if (combined.isEmpty()) + if (combined.isEmpty()) { + build(); combine(); + } return combined; } + public void setCombined(String combined) { + this.combined = combined; + } + public String getShortRaw() { + build(); String f = ""; for (String part : parts) { if (!f.isEmpty()) @@ -691,32 +584,17 @@ public void setDontBreakLine(boolean dontBreakLine) { this.dontBreakLine = dontBreakLine; } - public void setCombined(String combined) { - this.combined = combined; - } - - public void resetColorFormats() { - formats.clear(); - lastColor = null; - } - - public void saveColorFormats() { - savedFormats.clear(); - savedFormats.addAll(formats); - savedLastColor = lastColor; - } - - public void loadColorFormats() { - formats.clear(); - formats.addAll(savedFormats); - lastColor = savedLastColor; + public boolean isFormatFrozen() { + return freezeFormat; } - public boolean isCombineHoverOver() { - return combineHoverOver; + public void freezeFormat() { + frozenFragment = new RawMessageFragment(fragment); + this.freezeFormat = true; } - public void setCombineHoverOver(boolean combineHoverOver) { - this.combineHoverOver = combineHoverOver; + public void unFreezeFormat() { + fragment = new RawMessageFragment(frozenFragment); + this.freezeFormat = false; } } diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessageFragment.java b/src/com/bekvon/bukkit/cmiLib/RawMessageFragment.java new file mode 100644 index 000000000..38050bcce --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/RawMessageFragment.java @@ -0,0 +1,55 @@ +package com.bekvon.bukkit.cmiLib; + +import java.util.HashSet; +import java.util.Set; + +public class RawMessageFragment { + + private CMIChatColor lastColor = null; + private Set formats = new HashSet(); + String font = null; + private String text = ""; + + public RawMessageFragment() { + } + + public RawMessageFragment(RawMessageFragment old) { + this.lastColor = old.lastColor; + this.formats = new HashSet(old.formats); + this.font = old.font; + } + + public CMIChatColor getLastColor() { + return lastColor; + } + + public void setLastColor(CMIChatColor lastColor) { + this.lastColor = lastColor; + formats.clear(); + } + + public Set getFormats() { + return formats; + } + + public void setFormats(Set formats) { + this.formats = formats; + } + + public void addFormat(CMIChatColor format) { + if (format.isReset()) { + this.formats.clear(); + this.lastColor = null; + return; + } + this.formats.add(format); + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } +} diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessagePartType.java b/src/com/bekvon/bukkit/cmiLib/RawMessagePartType.java new file mode 100644 index 000000000..a3ce00383 --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/RawMessagePartType.java @@ -0,0 +1,5 @@ +package com.bekvon.bukkit.cmiLib; + +public enum RawMessagePartType { + Text, HoverText, HoverItem, HoverEntity, HoverAchievement, ClickLink, ClickCommand, ClickSuggestion, ClickInsertion; +} diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index ebc11489d..0191da3d5 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -373,9 +373,10 @@ public enum lm { Gui_Pset_Title("&6%1 %2 flags"), Gui_Actions(new ArrayList(Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove"))), - InformationPage_TopLine("&e---< &a %1 &e >---"), + InformationPage_Top("&e___/ &a %1 - %2 &e \\___"), + InformationPage_TopSingle("&e___/ &a %1 &e \\___"), InformationPage_Page("&e-----< &6%1 &e>-----"), - InformationPage_NextPage("&e-----< &6%1 &e>-----"), + InformationPage_NextPage2("&e-----< &6%1 &e>-----"), InformationPage_NoNextPage("&e-----------------------"), InformationPage_GeneralList("&2 %1 &6- &e%2"), InformationPage_FlagsList("&2 %1 &6- &e%2"), diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 7143fa97c..78aa795e1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1158,7 +1158,7 @@ public void printSubzoneList(CommandSender sender, int page) { return; } - plugin.msg(sender, lm.InformationPage_TopLine, plugin.msg(lm.General_Subzones)); + plugin.msg(sender, lm.InformationPage_TopSingle, plugin.msg(lm.General_Subzones)); plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), pi.getTotalPages(), pi.getTotalEntries())); RawMessage rm = new RawMessage(); diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index fffbda7be..582aca0ef 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -44,7 +44,7 @@ public void printInfo(CommandSender sender, String command, String title, List 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { + StringB.append("\n"); CuboidArea area = res.getAreaArray()[0]; String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); String worldInfo = ChatColor.translateAlternateColorCodes('&', plugin.msg(lm.General_CoordsLiner, cord1, cord2)); - StringB.append("\n" + worldInfo); + StringB.append(worldInfo); } - StringB.append("\n " + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); + StringB.append("\n").append(plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); String ExtraString = ""; if (res.isForRent()) { if (res.isRented()) { ExtraString = " " + plugin.msg(lm.Residence_IsRented); - StringB.append("\n " + plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); + StringB.append("\n").append(plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); } else { ExtraString = " " + plugin.msg(lm.Residence_IsForRent); } RentableLand rentable = res.getRentable(); - StringB.append("\n " + plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); - StringB.append("\n " + plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); - StringB.append("\n " + plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); - StringB.append("\n " + plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + StringB.append("\n").append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); + StringB.append("\n").append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); + StringB.append("\n").append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); + StringB.append("\n").append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); } if (res.isForSell()) { @@ -147,9 +146,9 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap Date: Wed, 22 Jul 2020 12:52:08 +0300 Subject: [PATCH 0756/1142] Canceling async methods on plugin disable --- .../bekvon/bukkit/residence/Residence.java | 18 ++------- .../residence/selection/SelectionManager.java | 8 ++++ .../residence/text/help/InformationPager.java | 37 +++++++------------ 3 files changed, 25 insertions(+), 38 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index c36c86f45..f893485c2 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -395,7 +395,9 @@ public void onDisable() { server.getScheduler().cancelTask(DespawnMobsBukkitId); this.getPermissionManager().stopCacheClearScheduler(); - + + this.getSelectionManager().onDisable(); + if (getConfigManager().useLeases()) { server.getScheduler().cancelTask(leaseBukkitId); } @@ -414,20 +416,6 @@ public void onDisable() { } catch (Exception ex) { Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); } - -// File file = new File(this.getDataFolder(), "uuids.yml"); -// YamlConfiguration conf = YamlConfiguration.loadConfiguration(file); -// if (!conf.isConfigurationSection("UUIDS")) -// conf.createSection("UUIDS"); -// for (Entry one : getCachedPlayerNameUUIDs().entrySet()) { -// conf.set("UUIDS." + one.getKey().toString(), one.getValue()); -// } -// try { -// conf.save(file); -// } catch (IOException e) { -// e.printStackTrace(); -// } - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Disabled!"); } } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index d61a3e11a..21483ea43 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.UUID; import org.bukkit.Bukkit; @@ -1079,4 +1080,11 @@ private static Direction getDirection(Player player) { public void regenerate(CuboidArea area) { } + + public void onDisable() { + for (Entry one : vMap.entrySet()) { + one.getValue().cancelAll(); + } + vMap.clear(); + } } diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 582aca0ef..998d9a3df 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -68,7 +68,6 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { CuboidArea area = res.getAreaArray()[0]; @@ -185,7 +184,7 @@ private void printListWithDelay(final CommandSender sender, final TreeMap 100) { -// i = 0; -// while (i < 100) { -// i++; -// ownedResidences.remove(ownedResidences.firstKey()); -// } -// } - if (ownedResidences.isEmpty()) { return; } @@ -339,12 +330,12 @@ public void ShowPagination(CommandSender sender, int pageCount, int CurrentPage, Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; RawMessage rm = new RawMessage(); - rm.add((CurrentPage > 1 ? plugin.msg(lm.General_prevPage) : plugin.msg(lm.General_prevPageOff)), - CurrentPage > 1 ? plugin.msg(lm.General_prevPageHover) : plugin.msg(lm.General_lastPageHover), - CurrentPage > 1 ? cmd + " " + pagePrefix + Prevpage : cmd + " " + pagePrefix + pageCount); - rm.add(plugin.msg(lm.General_pageCount, CurrentPage, pageCount), plugin.msg(lm.General_pageCountHover, totalEntries)); - rm.add(plugin.msg(pageCount > CurrentPage ? lm.General_nextPage : lm.General_nextPageOff), - pageCount > CurrentPage ? plugin.msg(lm.General_nextPageHover) : plugin.msg(lm.General_firstPageHover), + rm.addText((CurrentPage > 1 ? plugin.msg(lm.General_prevPage) : plugin.msg(lm.General_prevPageOff))).addHover( + CurrentPage > 1 ? plugin.msg(lm.General_prevPageHover) : plugin.msg(lm.General_lastPageHover)).addCommand( + CurrentPage > 1 ? cmd + " " + pagePrefix + Prevpage : cmd + " " + pagePrefix + pageCount); + rm.addText(plugin.msg(lm.General_pageCount, CurrentPage, pageCount)).addHover(plugin.msg(lm.General_pageCountHover, totalEntries)); + rm.addText(plugin.msg(pageCount > CurrentPage ? lm.General_nextPage : lm.General_nextPageOff)).addHover( + pageCount > CurrentPage ? plugin.msg(lm.General_nextPageHover) : plugin.msg(lm.General_firstPageHover)).addCommand( pageCount > CurrentPage ? cmd + " " + pagePrefix + NextPage : cmd + " " + pagePrefix + 1); if (pageCount != 0) rm.show(sender); From abef801c95ada7e415944309ff71b1c120489d02 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 27 Jul 2020 13:32:25 +0300 Subject: [PATCH 0757/1142] SlimeFun support --- .../bekvon/bukkit/cmiLib/CMIChatColor.java | 112 +++++++++-- src/com/bekvon/bukkit/cmiLib/RawMessage.java | 87 +++++---- .../bekvon/bukkit/residence/Residence.java | 176 ++++++++---------- .../listeners/ResidencePlayerListener.java | 2 +- .../slimeFun/SlimeFunResidenceModule.java | 58 ++++++ .../residence/slimeFun/slimeFunManager.java | 39 ++++ src/plugin.yml | 2 +- 7 files changed, 309 insertions(+), 167 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java create mode 100644 src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java diff --git a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java index a42e3074a..63d855bca 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java @@ -53,15 +53,17 @@ public class CMIChatColor { public static final String colorCodePrefix = "{#"; public static final String colorCodeSuffix = "}"; + private static String escape(String text) { + return text.replace("#", "\\#").replace("{", "\\{").replace("}", "\\}"); + } + public static final String hexColorRegex = "(\\" + colorCodePrefix + ")([0-9A-Fa-f]{6}|[0-9A-Fa-f]{3})(\\" + colorCodeSuffix + ")"; public static final Pattern hexColorRegexPattern = Pattern.compile(CMIChatColor.hexColorRegex); - public static final Pattern hexColorRegexPatternLast = Pattern.compile(CMIChatColor.hexColorRegex + "(?!.*\\" + colorCodePrefix + ")"); - public static final String deColorNameRegex = "(&x)((&[0-9A-Fa-f]){6})"; - public static final Pattern hexDeColorNamePattern = Pattern.compile(CMIChatColor.deColorNameRegex); + public static final Pattern hexColorRegexPatternLast = Pattern.compile(CMIChatColor.hexColorRegex + "(?!.*\\{#)"); + public static final Pattern hexDeColorNamePattern = Pattern.compile("(&x)((&[0-9A-Fa-f]){6})"); public static final String ColorNameRegex = "(\\" + colorCodePrefix + ")([a-zA-Z_]{3,})(\\" + colorCodeSuffix + ")"; public static final Pattern hexColorNamePattern = Pattern.compile(CMIChatColor.ColorNameRegex); - public static final String ColorNameRegexLast = ColorNameRegex + "(?!.*\\" + colorCodePrefix + ")"; - public static final Pattern hexColorNamePatternLast = Pattern.compile(CMIChatColor.ColorNameRegexLast); + public static final Pattern hexColorNamePatternLast = Pattern.compile(ColorNameRegex + "(?!.*\\{#)"); public static final Pattern gradientPattern = Pattern.compile("(\\{(#[^\\{]*?)>\\})(.*?)(\\{(#.*?)<(>?)\\})"); @@ -148,7 +150,7 @@ public CMIChatColor(String name, char c, Boolean color, Boolean reset, int red, BY_NAME.put(this.getName().toLowerCase().replace("_", ""), this); } - private static String processGradient(String text) { + public static String processGradient(String text) { Matcher gradientMatch = gradientPattern.matcher(text); @@ -169,7 +171,7 @@ private static String processGradient(String text) { for (int i = 0; i < gtext.length(); i++) { char ch = gtext.charAt(i); - CMIChatColor mix = CMIChatColor.mixColors(c1, c2, (i * 100D) / gtext.length()); + CMIChatColor mix = CMIChatColor.mixColors(c1, c2, (i * 100D) / (gtext.length() - 1)); updated += CMIChatColor.colorCodePrefix + mix.getHex() + CMIChatColor.colorCodeSuffix; updated += ch; } @@ -228,6 +230,24 @@ public static String translate(String text) { return ChatColor.translateAlternateColorCodes('&', text); } + public static String applyEqualGradient(String text, List gradients) { + if (gradients == null || gradients.isEmpty()) + return text; + int size = text.length() / gradients.size(); + StringBuilder messageWithGradient = new StringBuilder(); + messageWithGradient.append(gradients.get(0).getFormatedHex(">")); + for (int y = 0; y <= gradients.size() - 1; y++) { + if (y > 0 && size > 0) + messageWithGradient.append(gradients.get(y).getFormatedHex("<>")); + for (int i = 0; i < size; i++) { + messageWithGradient.append(text.charAt(0)); + text = text.substring(1); + } + } + messageWithGradient.append(text + gradients.get(gradients.size() - 1).getFormatedHex("<")); + return messageWithGradient.toString(); + } + @Deprecated public static String translateAlternateColorCodes(String text) { return translate(text); @@ -260,10 +280,24 @@ public static String deColorize(String text) { } // if (text.contains(colorCodePrefix)) { -// Matcher match = postGradientPattern.matcher(text); +// String t = text; +// Matcher match = postGradientPattern.matcher(t); +// double prevDist = Double.MAX_VALUE; +// StringBuilder endTest = new StringBuilder(); +// String prevG9 = ""; // while (match.find()) { -// CMIChatColor h1 = getColor(match.group(1)); -// CMIChatColor h2 = getColor(match.group(9)); +// String g1 = match.group(1); +// +// if (!t.startsWith(g1)) { +// CMIDebug.d("Not start ", t, g1); +// prevDist = Double.MAX_VALUE; +// } +// +// String g9 = match.group(9); +// String g8 = match.group(8); +// CMIChatColor h1 = getColor(g1); +// CMIChatColor h2 = getColor(g9); +// // // if (h1.getHex() == null || h2.getHex() == null) // continue; @@ -275,7 +309,7 @@ public static String deColorize(String text) { // Integer.valueOf(h1.getHex().substring(2, 4), 16), // Integer.valueOf(h1.getHex().substring(4, 6), 16)); // } catch (Throwable e) { -// return null; +// break; // } // // java.awt.Color c2 = null; @@ -285,7 +319,7 @@ public static String deColorize(String text) { // Integer.valueOf(h2.getHex().substring(2, 4), 16), // Integer.valueOf(h2.getHex().substring(4, 6), 16)); // } catch (Throwable e) { -// return null; +// break; // } // // int red1 = c1.getRed(); @@ -295,9 +329,30 @@ public static String deColorize(String text) { // int g = c1.getGreen() - c2.getGreen(); // int b = c1.getBlue() - c2.getBlue(); // double dist = Math.sqrt((((512 + rmean) * r * r) >> 8) + 4 * g * g + (((767 - rmean) * b * b) >> 8)); -// -// CMIDebug.d("Distance " , match.group(1), match.group(9), dist); +// +// String[] split = t.split(escape(g1) + match.group(8).replace("|", "\\|"), 2); +// t = split[1]; +// +// endTest.append(split[0]); +// if (prevDist == Double.MAX_VALUE) +// endTest.append(g1 + match.group(8)); +// else { +// if (prevDist - dist <= 3) +// endTest.append(match.group(8)); +// else +// endTest.append(g1 + match.group(8)); +// } +// prevG9 = g9; +// +// prevDist = dist; +// +// match = postGradientPattern.matcher(t); +// +// CMIDebug.d("Distance ", g8, g1, g9, (int) (dist * 100) / 100D, prevDist - dist <= 2 ? "OK" : "FAIL"); // } +// endTest.append(prevG9); +// +// CMIDebug.d("endString: " + endTest); // } return text; @@ -318,20 +373,33 @@ public static String stripColor(String text) { } public static String getLastColors(String text) { - if (text == null) return null; text = deColorize(text); - Matcher match = hexColorRegexPatternLast.matcher(text); if (match.find()) { - return match.group(0); + String colorByHex = match.group(0); + if (text.endsWith(colorByHex)) + return colorByHex; + String[] split = text.split(escape(colorByHex), 2); + if (split == null) + return colorByHex; + String last = getLastColors(split[1]); + return last == null || last.isEmpty() ? colorByHex : last; + } match = hexColorNamePatternLast.matcher(text); if (match.find()) { - return match.group(); + String colorByName = match.group(); + if (text.endsWith(colorByName)) + return colorByName; + String[] split = text.split(escape(colorByName), 2); + if (split == null) + return colorByName; + String last = getLastColors(split[1]); + return last == null || last.isEmpty() ? colorByName : last; } return ChatColor.getLastColors(translate(text)); @@ -448,6 +516,14 @@ public String getHex() { return hex; } + public String getFormatedHex() { + return getFormatedHex(null); + } + + public String getFormatedHex(String subSuffix) { + return colorCodePrefix + hex + (subSuffix == null ? "" : subSuffix) + colorCodeSuffix; + } + public String getName() { return name; } diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessage.java b/src/com/bekvon/bukkit/cmiLib/RawMessage.java index 3442b715b..7b6ebdfc7 100644 --- a/src/com/bekvon/bukkit/cmiLib/RawMessage.java +++ b/src/com/bekvon/bukkit/cmiLib/RawMessage.java @@ -100,65 +100,64 @@ private String textIntoJson(String text, boolean hover) { fragment = f; StringBuilder finalText = new StringBuilder(); - if (Version.isCurrentEqualOrHigher(Version.v1_16_R1)) { - for (RawMessageFragment one : fragments) { - if (!finalText.toString().isEmpty()) - finalText.append("},{"); - StringBuilder options = new StringBuilder(); - for (CMIChatColor format : one.getFormats()) { - if (!options.toString().isEmpty()) - options.append(","); - if (format.equals(CMIChatColor.UNDERLINE)) - options.append("\"underlined\":true"); - else if (format.equals(CMIChatColor.BOLD)) - options.append("\"bold\":true"); - else if (format.equals(CMIChatColor.ITALIC)) - options.append("\"italic\":true"); - else if (format.equals(CMIChatColor.STRIKETHROUGH)) - options.append("\"strikethrough\":true"); - else if (format.equals(CMIChatColor.MAGIC)) - options.append("\"obfuscated\":true"); - } - if (!options.toString().isEmpty()) { - finalText.append(options.toString()); - finalText.append(","); - } - if (one.getLastColor() != null) { - if (one.getLastColor().getHex() != null) - finalText.append("\"color\":\"#" + one.getLastColor().getHex() + "\","); - else if (one.getLastColor().getName() != null) { - finalText.append("\"color\":\"" + one.getLastColor().getName().toLowerCase() + "\","); - } + for (RawMessageFragment one : fragments) { + if (!finalText.toString().isEmpty()) + finalText.append("},{"); + StringBuilder options = new StringBuilder(); + for (CMIChatColor format : one.getFormats()) { + if (!options.toString().isEmpty()) + options.append(","); + if (format.equals(CMIChatColor.UNDERLINE)) + options.append("\"underlined\":true"); + else if (format.equals(CMIChatColor.BOLD)) + options.append("\"bold\":true"); + else if (format.equals(CMIChatColor.ITALIC)) + options.append("\"italic\":true"); + else if (format.equals(CMIChatColor.STRIKETHROUGH)) + options.append("\"strikethrough\":true"); + else if (format.equals(CMIChatColor.MAGIC)) + options.append("\"obfuscated\":true"); + } + if (!options.toString().isEmpty()) { + finalText.append(options.toString()); + finalText.append(","); + } + + if (one.getLastColor() != null) { + if (one.getLastColor().getHex() != null) + finalText.append("\"color\":\"#" + one.getLastColor().getHex() + "\","); + else if (one.getLastColor().getName() != null) { + finalText.append("\"color\":\"" + one.getLastColor().getName().toLowerCase() + "\","); } - String t = one.getText(); - finalText.append("\"text\":\"" + t + "\""); } - } else { - for (RawMessageFragment one : fragments) { - if (!finalText.toString().isEmpty()) - finalText.append("},{"); - StringBuilder options = new StringBuilder(); + String t = one.getText(); + + // Old server support, we need to add colors and formats to the text directly + if (Version.isCurrentLower(Version.v1_16_R1)) { + StringBuilder oldColors = new StringBuilder(); if (one.getLastColor() != null && one.getLastColor().getName() != null) { - options.append(one.getLastColor().getColorCode()); + oldColors.append(one.getLastColor().getColorCode()); } for (CMIChatColor format : one.getFormats()) { if (format.equals(CMIChatColor.UNDERLINE)) - options.append("&n"); + oldColors.append("&n"); else if (format.equals(CMIChatColor.BOLD)) - options.append("&l"); + oldColors.append("&l"); else if (format.equals(CMIChatColor.ITALIC)) - options.append("&o"); + oldColors.append("&o"); else if (format.equals(CMIChatColor.STRIKETHROUGH)) - options.append("&m"); + oldColors.append("&m"); else if (format.equals(CMIChatColor.MAGIC)) - options.append("&k"); + oldColors.append("&k"); } - String t = one.getText(); - finalText.append("\"text\":\"" + options.toString() + t + "\""); + t = oldColors.toString() + t; } + + finalText.append("\"text\":\"" + t + "\""); } + if (finalText.toString().isEmpty()) return ""; return "{" + finalText.toString() + "}"; diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f893485c2..f99c16e12 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -110,6 +110,7 @@ import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; import com.bekvon.bukkit.residence.signsStuff.SignUtil; +import com.bekvon.bukkit.residence.slimeFun.slimeFunManager; import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; @@ -129,6 +130,8 @@ import cosine.boseconomy.BOSEconomy; import fr.crafter.tickleman.realeconomy.RealEconomy; import fr.crafter.tickleman.realplugin.RealPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectionManager; /** * @@ -143,7 +146,7 @@ public class Residence extends JavaPlugin { protected ResidenceManager rmanager; protected SelectionManager smanager; public PermissionManager gmanager; - protected ConfigManager cmanager; + protected ConfigManager configManager; protected boolean spigotPlatform = false; @@ -156,7 +159,7 @@ public class Residence extends JavaPlugin { protected ResidenceFixesListener flistener; protected ResidenceRaidListener slistener; - protected ResidenceCommandListener cManager; + protected ResidenceCommandListener commandManager; protected BossBarManager BossBarManager; @@ -202,7 +205,7 @@ public class Residence extends JavaPlugin { protected int DespawnMobsBukkitId = -1; - private boolean Slimefun = false; + private boolean SlimeFun = false; protected int autosaveBukkitId = -1; protected VersionChecker versionChecker; @@ -304,9 +307,9 @@ public ChatInterface getResidenceChatAPI() { } public ResidenceCommandListener getCommandManager() { - if (cManager == null) - cManager = new ResidenceCommandListener(this); - return cManager; + if (commandManager == null) + commandManager = new ResidenceCommandListener(this); + return commandManager; } public ResidenceApi getAPI() { @@ -395,9 +398,9 @@ public void onDisable() { server.getScheduler().cancelTask(DespawnMobsBukkitId); this.getPermissionManager().stopCacheClearScheduler(); - + this.getSelectionManager().onDisable(); - + if (getConfigManager().useLeases()) { server.getScheduler().cancelTask(leaseBukkitId); } @@ -552,8 +555,11 @@ public void onEnable() { e.printStackTrace(); } - Slimefun = Bukkit.getPluginManager().getPlugin("Slimefun") != null && Bukkit.getPluginManager().getPlugin("CS-CoreLib") != null; + SlimeFun = Bukkit.getPluginManager().getPlugin("Slimefun") != null && Bukkit.getPluginManager().getPlugin("CS-CoreLib") != null; + if (SlimeFun) + new slimeFunManager(this); + this.getConfigManager().copyOverTranslations(); parseHelpEntries(); @@ -652,7 +658,6 @@ public void run() { continue; addOfflinePlayerToChache(player); } - return; } }); } @@ -896,10 +901,7 @@ public boolean validName(String name) { return true; } String namecheck = name.replaceAll(getConfigManager().getResidenceNameRegex(), ""); - if (!name.equals(namecheck)) { - return false; - } - return true; + return name.equals(namecheck); } private void setWorldEdit() { @@ -1054,13 +1056,13 @@ public HelpEntry getHelpPages() { @Deprecated public void setConfigManager(ConfigManager cm) { - cmanager = cm; + configManager = cm; } public ConfigManager getConfigManager() { - if (cmanager == null) - cmanager = new ConfigManager(this); - return cmanager; + if (configManager == null) + configManager = new ConfigManager(this); + return configManager; } public TransactionManager getTransactionManager() { @@ -1215,10 +1217,7 @@ public boolean isResAdminOn(CommandSender sender) { } public boolean isResAdminOn(Player player) { - if (resadminToggle.contains(player.getName())) { - return true; - } - return false; + return resadminToggle.contains(player.getName()); } public void turnResAdminOn(Player player) { @@ -1226,9 +1225,7 @@ public void turnResAdminOn(Player player) { } public boolean isResAdminOn(String player) { - if (resadminToggle.contains(player)) - return true; - return false; + return resadminToggle.contains(player); } private void saveYml() throws IOException { @@ -1473,12 +1470,6 @@ private void addShops(ClaimedResidence res) { } } - private void writeDefaultConfigFromJar() { - if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "config.yml"), "config.yml", true)) { - System.out.println("[Residence] Wrote default config..."); - } - } - private void writeDefaultGroupsFromJar() { if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "groups.yml"), "groups.yml", true)) { System.out.println("[Residence] Wrote default groups..."); @@ -1611,13 +1602,18 @@ private static void remove(File newGroups, List list) throws IOException private static void copy(File source, File target) throws IOException { InputStream in = new FileInputStream(source); OutputStream out = new FileOutputStream(target); - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); + try { + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + } catch (Throwable e) { + e.printStackTrace(); + } finally { + in.close(); + out.close(); } - in.close(); - out.close(); } // private void writeDefaultLanguageFile(String lang) { @@ -1658,33 +1654,44 @@ private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile(); if (jarloc.isFile()) { JarFile jar = new JarFile(jarloc); - JarEntry entry = jar.getJarEntry(jarPath); - if (entry != null && !entry.isDirectory()) { - InputStream in = jar.getInputStream(entry); - InputStreamReader isr = new InputStreamReader(in, "UTF8"); - if (writeName.isFile()) { - if (backupOld) { - if (fileBackup.isFile()) { - fileBackup.delete(); + try { + JarEntry entry = jar.getJarEntry(jarPath); + if (entry != null && !entry.isDirectory()) { + InputStream in = jar.getInputStream(entry); + InputStreamReader isr = new InputStreamReader(in, "UTF8"); + if (writeName.isFile()) { + if (backupOld) { + if (fileBackup.isFile()) { + fileBackup.delete(); + } + writeName.renameTo(fileBackup); + } else { + writeName.delete(); } - writeName.renameTo(fileBackup); - } else { - writeName.delete(); } + FileOutputStream out = new FileOutputStream(writeName); + OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); + try { + char[] tempbytes = new char[512]; + int readbytes = isr.read(tempbytes, 0, 512); + while (readbytes > -1) { + osw.write(tempbytes, 0, readbytes); + readbytes = isr.read(tempbytes, 0, 512); + } + } catch (Throwable e) { + e.printStackTrace(); + } finally { + osw.close(); + isr.close(); + out.close(); + } + return true; } - FileOutputStream out = new FileOutputStream(writeName); - OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); - char[] tempbytes = new char[512]; - int readbytes = isr.read(tempbytes, 0, 512); - while (readbytes > -1) { - osw.write(tempbytes, 0, readbytes); - readbytes = isr.read(tempbytes, 0, 512); - } - osw.close(); - isr.close(); - return true; + } catch (Throwable ex) { + ex.printStackTrace(); + } finally { + jar.close(); } - jar.close(); } return false; } catch (Exception ex) { @@ -1765,8 +1772,7 @@ public void addOfflinePlayerToChache(OfflinePlayer player) { return; if (player.getName() != null) OfflinePlayerList.put(player.getName().toLowerCase(), player); - if (player.getUniqueId() != null) - cachedPlayerNameUUIDs.put(player.getUniqueId(), player); + cachedPlayerNameUUIDs.put(player.getUniqueId(), player); } public String getPlayerName(String uuid) { @@ -1779,7 +1785,7 @@ public String getPlayerName(String uuid) { @Deprecated public String getServerLandname() { - return this.getLM().getMessage(lm.server_land); + return getServerLandName(); } public String getServerLandName() { @@ -1808,9 +1814,7 @@ public boolean isDisabledWorld(World world) { } public boolean isDisabledWorld(String worldname) { - if (getConfigManager().DisabledWorldsList.contains(worldname)) - return true; - return false; + return getConfigManager().DisabledWorldsList.contains(worldname); } public boolean isDisabledWorldListener(World world) { @@ -1818,9 +1822,7 @@ public boolean isDisabledWorldListener(World world) { } public boolean isDisabledWorldListener(String worldname) { - if (getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableListeners) - return true; - return false; + return getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableListeners; } public boolean isDisabledWorldCommand(World world) { @@ -1828,19 +1830,9 @@ public boolean isDisabledWorldCommand(World world) { } public boolean isDisabledWorldCommand(String worldname) { - if (getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableCommands) - return true; - return false; + return getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableCommands; } -// public static void msg(Player player, String path, Object... variables) { -// if (player != null) -// if (Residence.getLM().containsKey(path)) -// player.sendMessage(Residence.getLM().getMessage(path, variables)); -// else -// player.sendMessage(path); -// } - public String msg(String path) { return getLM().getMessage(path); } @@ -1855,29 +1847,7 @@ public void msg(Player player, String text) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); } -// private boolean isWorldOk(CommandSender sender) { -// if (!this.getConfigManager().DisableNoFlagMessageUse) -// return true; -// -// if (sender.hasPermission("residence.checkbadflags")) -// return true; -// -// if (!(sender instanceof Player)) -// return true; -// -// Player player = (Player) sender; -// String world = player.getWorld().getName(); -// -// for (String one : this.getConfigManager().DisableNoFlagMessageWorlds) { -// if (one.equalsIgnoreCase(world)) -// return false; -// } -// return true; -// } - public void msg(CommandSender sender, lm lm, Object... variables) { -// if (!isWorldOk(sender)) -// return; if (sender == null) return; @@ -1962,7 +1932,7 @@ public int getWorldGuardVersion() { } public boolean isSlimefunPresent() { - return Slimefun; + return SlimeFun; } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 846345f00..148645254 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -964,7 +964,7 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { return plugin.getConfigManager().getCustomRightClick().contains(CMIMaterial.get(block)); } - public boolean isCanUseEntity_BothClick(Material mat, Block block) { + public static boolean isCanUseEntity_BothClick(Material mat, Block block) { CMIMaterial m = CMIMaterial.get(mat); if (m.isDoor()) return true; diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java new file mode 100644 index 000000000..93fd1d5a0 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -0,0 +1,58 @@ +package com.bekvon.bukkit.residence.slimeFun; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.plugin.Plugin; + +import com.bekvon.bukkit.residence.Residence; + +import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectableAction; +import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectionModule; + +public class SlimeFunResidenceModule implements ProtectionModule { + private Residence residence; + + private final Plugin plugin; + + public SlimeFunResidenceModule(Plugin plugin) { + this.plugin = plugin; + } + + @Override + public Plugin getPlugin() { + return this.plugin; + } + + @Override + public void load() { + this.residence = Residence.getInstance(); + } + + @Override + public boolean hasPermission(OfflinePlayer p, Location l, ProtectableAction action) { + if (!action.isBlockAction()) + return true; + + switch (action) { + case ACCESS_INVENTORIES: + break; + case BREAK_BLOCK: + Player player = Bukkit.getPlayer(p.getUniqueId()); + BlockBreakEvent breakEvent = new BlockBreakEvent(l.getBlock(), player); + Bukkit.getServer().getPluginManager().callEvent(breakEvent); + if (breakEvent.isCancelled()) + return false; + break; + case PLACE_BLOCK: + break; + case PVP: + break; + default: + break; + } + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java b/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java new file mode 100644 index 000000000..882f4e0b7 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java @@ -0,0 +1,39 @@ +package com.bekvon.bukkit.residence.slimeFun; + +import org.bukkit.Bukkit; + +import com.bekvon.bukkit.residence.Residence; + +import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectionManager; + +public class slimeFunManager { + + private Residence plugin; + + int repeat = 0; + // Fail safe to avoid infinite checks + int times = 0; + + @SuppressWarnings("deprecation") + public slimeFunManager(Residence plugin) { + this.plugin = plugin; + if (Bukkit.getPluginManager().getPlugin("Slimefun") != null && Bukkit.getPluginManager().getPlugin("CS-CoreLib") != null) { + repeat = Bukkit.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, () -> { + times++; + if (Bukkit.getPluginManager().getPlugin("Slimefun").isEnabled()) { + ProtectionManager manager = SlimefunPlugin.getProtectionManager(); + manager.registerModule(Bukkit.getServer(), "Residence", pls -> new SlimeFunResidenceModule(plugin)); + Bukkit.getScheduler().cancelTask(repeat); + } + if (times > 60) { + plugin.consoleMessage("&cFailed to initialize SlimeFun support"); + Bukkit.getScheduler().cancelTask(repeat); + } + }, 20L, 20L); + + } + + } + +} diff --git a/src/plugin.yml b/src/plugin.yml index 6a5b5f58d..7d685d01c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -5,7 +5,7 @@ website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 authors: [bekvon,nate302,t00thpick1] -softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI,ServerControlReloaded] +softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI,ServerControlReloaded,Slimefun,CS-CoreLib] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: From d50057a0f66e0a96d85effd44050854446729e48 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 27 Jul 2020 13:38:56 +0300 Subject: [PATCH 0758/1142] Fix for error when we tab complete from invalid locale file --- .../bekvon/bukkit/residence/text/help/HelpEntry.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 9ddedcddc..65b2753e5 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -293,12 +293,13 @@ public Set getSubCommands(CommandSender sender, String[] args) { break; if (args[i].equalsIgnoreCase("")) - return tempmeinPath.getKeys(false); + return tempmeinPath == null ? subCommands : tempmeinPath.getKeys(false); - if (!tempmeinPath.isConfigurationSection(args[i] + ".SubCommands")) + if (tempmeinPath != null && !tempmeinPath.isConfigurationSection(args[i] + ".SubCommands")) break; - tempmeinPath = tempmeinPath.getConfigurationSection(args[i] + ".SubCommands"); + if (tempmeinPath != null) + tempmeinPath = tempmeinPath.getConfigurationSection(args[i] + ".SubCommands"); i++; } @@ -306,7 +307,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { int neededArgPlace = args.length - 2 - i; boolean subCommand = true; - if (i < args.length && tempmeinPath.isConfigurationSection(args[i])) { + if (i < args.length && tempmeinPath!= null && tempmeinPath.isConfigurationSection(args[i])) { subCommand = false; tempmeinPath = tempmeinPath.getConfigurationSection(args[i]); } @@ -455,7 +456,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { } if (subCommand) - return tempmeinPath.getKeys(false); + return tempmeinPath == null ? subCommands : tempmeinPath.getKeys(false); return new HashSet(Arrays.asList("?")); } From 9e7c8738de96b7f00eff6f64c3f56f47c013ba1b Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 27 Jul 2020 15:04:29 +0300 Subject: [PATCH 0759/1142] Optimizing piston extend event --- .../listeners/ResidenceBlockListener.java | 53 +++++++++++++------ 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 07774601e..1166cab5f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -59,6 +59,7 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceBlockListener implements Listener { @@ -723,6 +724,7 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPistonExtend(BlockPistonExtendEvent event) { + // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -739,29 +741,50 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { // Disabling listener if flag disabled globally if (!Flags.pistonprotection.isGlobalyEnabled()) return; - ClaimedResidence pistonRes = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); + + Location origins = event.getBlock().getLocation(); + + int lowestY = 255; + int bigestY = 0; + int lowestX = Integer.MAX_VALUE; + int lowestZ = Integer.MAX_VALUE; + int bigestX = -Integer.MAX_VALUE; + int bigestZ = -Integer.MAX_VALUE; BlockFace dir = event.getDirection(); + for (Block block : event.getBlocks()) { - Location locFrom = block.getLocation(); - Location locTo = new Location(block.getWorld(), block.getX() + dir.getModX(), block.getY() + dir.getModY(), block.getZ() + dir.getModZ()); - ClaimedResidence blockFrom = plugin.getResidenceManager().getByLoc(locFrom); - ClaimedResidence blockTo = plugin.getResidenceManager().getByLoc(locTo); + Location one = block.getLocation().clone().add(dir.getModX(), dir.getModY(), dir.getModZ()); + if (one.getBlockY() < lowestY) + lowestY = one.getBlockY(); + if (one.getBlockX() < lowestX) + lowestX = one.getBlockX(); + if (one.getBlockZ() < lowestZ) + lowestZ = one.getBlockZ(); + if (one.getBlockY() > bigestY) + bigestY = one.getBlockY(); + if (one.getBlockX() > bigestX) + bigestX = one.getBlockX(); + if (one.getBlockZ() > bigestZ) + bigestZ = one.getBlockZ(); + } - if (pistonRes == null && blockTo != null && blockTo.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue)) { - event.setCancelled(true); - return; - } else if (blockTo != null && blockFrom == null && blockTo.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue)) { - event.setCancelled(true); - return; - } else if (blockTo != null && blockFrom != null && (pistonRes != null && !blockTo.isOwner(pistonRes.getOwner()) || !blockTo.isOwner(blockFrom.getOwner())) - && blockTo.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue)) { + ClaimedResidence pistonRes = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); + + if (pistonRes != null && pistonRes.containsLoc(new Location(origins.getWorld(), lowestX, lowestY, lowestZ)) && pistonRes.containsLoc(new Location(origins.getWorld(), bigestX, bigestY, bigestZ))) { + return; + } + + for (int i = event.getBlocks().size() - 1; i >= 0; i--) { + Block block = event.getBlocks().get(i); + Location locTo = block.getLocation().clone().add(dir.getModX(), dir.getModY(), dir.getModZ()); + ClaimedResidence blockTo = plugin.getResidenceManager().getByLoc(locTo); + boolean hasPerm = blockTo != null && blockTo.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue); + if (pistonRes == null && hasPerm || blockTo != null && pistonRes != null && !blockTo.isOwner(pistonRes.getOwner()) && hasPerm) { event.setCancelled(true); return; } - } - } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) From 0144cfb053feb1f0f04907d24f283e0e90a904d3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 27 Jul 2020 15:12:05 +0300 Subject: [PATCH 0760/1142] Fix for random teleportation not reloading properly --- src/com/bekvon/bukkit/residence/ConfigManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index a7adccc5a..322ca58a1 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -720,6 +720,7 @@ public void UpdateConfigFile() { Set worlds = new HashSet(); worlds.addAll(Bukkit.getWorlds()); + RTeleport.clear(); boolean commented = false; if (c.getC().isConfigurationSection("Global.RandomTeleportation.Worlds")) { ConfigurationSection sec = c.getC().getConfigurationSection("Global.RandomTeleportation.Worlds"); From 1443941cb49ce52d993cd582340a22b71183100c Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 27 Jul 2020 15:31:30 +0300 Subject: [PATCH 0761/1142] Lets allow to hide residences on dynmap by default --- src/com/bekvon/bukkit/residence/ConfigManager.java | 3 +++ src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java | 4 ++-- src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 322ca58a1..6c7219d26 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -237,6 +237,7 @@ public class ConfigManager { // protected CMIParticle OverlapSpigotSides; // DynMap + public boolean DynMapHideByDefault; public boolean DynMapUse; public boolean DynMapShowFlags; public boolean DynMapHideHidden; @@ -1222,6 +1223,8 @@ public void UpdateConfigFile() { c.addComment("DynMap.Use", "Enables or disable DynMap Support"); DynMapUse = c.get("DynMap.Use", false); + c.addComment("DynMap.HideByDefault", "When set to true we will hide residence areas by default on dynmap window","Residences can still be enabled throw provided DynMap option on left top side"); + DynMapHideByDefault = c.get("DynMap.HideByDefault", false); c.addComment("DynMap.ShowFlags", "Shows or hides residence flags"); DynMapShowFlags = c.get("DynMap.ShowFlags", true); c.addComment("DynMap.HideHidden", "If set true, residence with hidden flag set to true will be hidden from dynmap"); diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 608b42e28..eac8786d6 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -312,7 +312,7 @@ public void activate() { if (set != null) { set.deleteMarkerSet(); set = null; - } + } set = markerapi.getMarkerSet("residence.markerset"); if (set == null) set = markerapi.createMarkerSet("residence.markerset", "Residence", null, false); @@ -324,7 +324,7 @@ public void activate() { return; } set.setLayerPriority(1); - set.setHideByDefault(false); + set.setHideByDefault(plugin.getConfigManager().DynMapHideByDefault); Bukkit.getConsoleSender().sendMessage("[Residence] DynMap residence activated!"); diff --git a/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java b/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java index 882f4e0b7..066aad50b 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java @@ -24,6 +24,8 @@ public slimeFunManager(Residence plugin) { if (Bukkit.getPluginManager().getPlugin("Slimefun").isEnabled()) { ProtectionManager manager = SlimefunPlugin.getProtectionManager(); manager.registerModule(Bukkit.getServer(), "Residence", pls -> new SlimeFunResidenceModule(plugin)); + + plugin.consoleMessage("Enabled compatability with SlimeFun plugin"); Bukkit.getScheduler().cancelTask(repeat); } if (times > 60) { From 4f6f4c7908397341c498ab1e733d2855e9fbf9db Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 27 Jul 2020 17:30:49 +0300 Subject: [PATCH 0762/1142] Adding comments to flags to indicate where they are used --- .../bukkit/residence/ConfigManager.java | 7 +- .../bukkit/residence/commands/flags.java | 1 - .../bukkit/residence/containers/Flags.java | 4 +- .../listeners/ResidencePlayerListener.java | 170 +++++++----------- 4 files changed, 72 insertions(+), 110 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 6c7219d26..ed91e7ea7 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -465,6 +465,11 @@ void UpdateFlagFile() { "this is the actual list of material names that this list allows or disallows", "You can look up the material name by item ID in game by typing /res material ", "Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance"); + + for (Flags fl : Flags.values()) { + cfg.addComment("Global.FlagPermission." + fl, "Applies to: " + fl.getFlagMode()); + } + cfg.save(); } @@ -1223,7 +1228,7 @@ public void UpdateConfigFile() { c.addComment("DynMap.Use", "Enables or disable DynMap Support"); DynMapUse = c.get("DynMap.Use", false); - c.addComment("DynMap.HideByDefault", "When set to true we will hide residence areas by default on dynmap window","Residences can still be enabled throw provided DynMap option on left top side"); + c.addComment("DynMap.HideByDefault", "When set to true we will hide residence areas by default on dynmap window", "Residences can still be enabled throw provided DynMap option on left top side"); DynMapHideByDefault = c.get("DynMap.HideByDefault", false); c.addComment("DynMap.ShowFlags", "Shows or hides residence flags"); DynMapShowFlags = c.get("DynMap.ShowFlags", true); diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index 7ef606c15..eb8e11429 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -60,7 +60,6 @@ public void getLocale() { c.get(pt + ".Description", fl.getDesc()); String forSet = "set/pset"; switch (fl.getFlagMode()) { - case Group: case Player: forSet = "pset"; break; diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index a29674330..81742c447 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -87,7 +87,6 @@ public enum Flags { place(CMIMaterial.SEA_LANTERN, FlagMode.Both, "Allows or denys only placement of blocks, overrides the build flag", true), pvp(CMIMaterial.WOODEN_SWORD, FlagMode.Residence, "Allow or deny pvp in the residence", false), rain(CMIMaterial.BLUE_ORCHID, FlagMode.Residence, "Sets weather to rainny in residence", true), - redstone(CMIMaterial.SUNFLOWER, FlagMode.Group, "Gives lever, diode, button, pressure, note flags", true), respawn(CMIMaterial.SUNFLOWER, FlagMode.Residence, "Automaticaly respawns player", false), riding(CMIMaterial.SADDLE, FlagMode.Both, "Prevent riding a horse", true), shoot(CMIMaterial.ARROW, FlagMode.Residence, "Allows or denys shooting projectile in area", true), @@ -106,7 +105,6 @@ public enum Flags { tp(CMIMaterial.END_PORTAL_FRAME, FlagMode.Both, "Allow or disallow teleporting to the residence", true), trade(CMIMaterial.EMERALD, FlagMode.Both, "Allows or denys villager trading in residence", true), trample(CMIMaterial.DIRT, FlagMode.Residence, "Allows or denys crop trampling in residence", true), - trusted(CMIMaterial.STONE, FlagMode.Group, "Gives build, use, move, container and tp flags", true), use(CMIMaterial.STONE_PRESSURE_PLATE, FlagMode.Both, "Allows or denys use of doors, lever, buttons, etc...", false), vehicledestroy(CMIMaterial.MINECART, FlagMode.Both, "Allows or denys vehicle destroy", false), witherspawn(CMIMaterial.WITHER_SKELETON_SKULL, FlagMode.Residence, "Allows or denys wither spawning", true), @@ -125,7 +123,7 @@ public enum Flags { private boolean globalyEnabled = true; public static enum FlagMode { - Player, Residence, Both, Group + Player, Residence, Both } @Deprecated diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 148645254..8f95b8c13 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -77,7 +77,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -191,7 +190,7 @@ public void onPlayerGlobalChat(AsyncPlayerChatEvent event) { if (rPlayer == null) return; - if (rPlayer.getResList().size() == 0) + if (rPlayer.getResList().isEmpty()) return; ClaimedResidence res = rPlayer.getMainResidence(); @@ -342,7 +341,6 @@ public void onFishingRodUse(PlayerFishEvent event) { event.setCancelled(true); if (res != null) plugin.msg(player, lm.Residence_FlagDeny, Flags.hook, res.getName()); - return; } } } @@ -395,10 +393,10 @@ public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { case INVALID: break; case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.glow.toString())) - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setGlowing(true); + if (event.getFlag().equalsIgnoreCase(Flags.glow.toString()) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) + for (Player one : event.getResidence().getPlayersInResidence()) { + one.setGlowing(true); + } break; default: break; @@ -531,9 +529,8 @@ public void onFlagChangeJump(ResidenceFlagChangeEvent event) { if (event.getFlag().equalsIgnoreCase(Flags.jump2.toString())) { if (event.getResidence().getPermissions().has(Flags.jump3, FlagCombo.OnlyTrue)) event.getResidence().getPermissions().setFlag(Flags.jump3.toString(), FlagState.NEITHER); - } else if (event.getFlag().equalsIgnoreCase(Flags.jump3.toString())) { - if (event.getResidence().getPermissions().has(Flags.jump2, FlagCombo.OnlyTrue)) - event.getResidence().getPermissions().setFlag(Flags.jump2.toString(), FlagState.NEITHER); + } else if (event.getFlag().equalsIgnoreCase(Flags.jump3.toString()) && event.getResidence().getPermissions().has(Flags.jump2, FlagCombo.OnlyTrue)) { + event.getResidence().getPermissions().setFlag(Flags.jump2.toString(), FlagState.NEITHER); } break; default: @@ -844,8 +841,8 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { location.setPitch(lc.getPitch()); location.setYaw(lc.getYaw()); int from = location.getBlockY(); - int maxH = location.getWorld().getMaxHeight() - 1; - maxH = location.getWorld().getHighestBlockAt(location).getLocation().getBlockY() + 3; + + int maxH = location.getWorld().getHighestBlockAt(location).getLocation().getBlockY() + 3; if (location.getWorld().getEnvironment() == Environment.NETHER) maxH = 100; @@ -955,10 +952,8 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { } CMIMaterial cmat = CMIMaterial.get(mat); - if (cmat != null) { - if (cmat.isPotted()) { - return true; - } + if (cmat != null && cmat.isPotted()) { + return true; } return plugin.getConfigManager().getCustomRightClick().contains(CMIMaterial.get(block)); @@ -1079,14 +1074,11 @@ public void onPlatePress(PlayerInteractEvent event) { if ((!hasuse && !haspressure || !haspressure) && mat.isPlate() && !ResPerm.bypass_use.hasPermission(player, 10000L)) { event.setCancelled(true); - return; } } if (!perms.playerHas(player, Flags.trample, perms.playerHas(player, Flags.build, true)) && (mat == CMIMaterial.FARMLAND || mat == CMIMaterial.SOUL_SAND)) { event.setCancelled(true); - return; } - return; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1180,14 +1172,11 @@ public void onInfoCheck(PlayerInteractEvent event) { plugin.msg(player, lm.Residence_NoResHere); event.setCancelled(true); - return; } private static boolean placingMinecart(Block block, ItemStack item) { - if (block != null && block.getType().name().contains("RAIL") && item != null && item.getType().name().contains("MINECART")) - return true; - return false; + return block != null && block.getType().name().contains("RAIL") && item != null && item.getType().name().contains("MINECART"); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1210,12 +1199,9 @@ public void onPlayerInteract(PlayerInteractEvent event) { Material mat = block.getType(); if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK - || isCanUseEntity_BothClick(mat, block))) { - - if (!heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) - && !heldItem.isDye() && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { - return; - } + || isCanUseEntity_BothClick(mat, block)) && !heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) + && !heldItem.isDye() && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { + return; } if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) @@ -1273,12 +1259,10 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (res != null && res.isUnderRaid()) { if (res.getRaid().isDefender(player) && !ConfigManager.RaidDefenderContainerUsage) { Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); - if (result != null) { - if (result.equals(Flags.container)) { - event.setCancelled(true); - plugin.msg(player, lm.Raid_cantDo); - return; - } + if (result != null && result.equals(Flags.container)) { + event.setCancelled(true); + plugin.msg(player, lm.Raid_cantDo); + return; } } } @@ -1351,19 +1335,14 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } - if (plugin.getConfigManager().getCustomBothClick().contains(blockM)) { - if (!hasuse) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use); - return; - } + if (plugin.getConfigManager().getCustomBothClick().contains(blockM) && !hasuse) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.use); + return; } - if (plugin.getConfigManager().getCustomRightClick().contains(blockM) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (!hasuse) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use); - return; - } + if (plugin.getConfigManager().getCustomRightClick().contains(blockM) && event.getAction() == Action.RIGHT_CLICK_BLOCK && !hasuse) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.use); } } @@ -1436,11 +1415,10 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); - if (!hasContainerBypass) - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); - event.setCancelled(true); - } + if (!hasContainerBypass && !res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1492,11 +1470,10 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); - if (!hasContainerBypass) - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); - event.setCancelled(true); - } + if (!hasContainerBypass && !res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1633,11 +1610,10 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); // - if (!hasContainerBypass) - if (!perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container); - } + if (!hasContainerBypass && !perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.container); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1692,13 +1668,11 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { } if (res == null && plugin.getConfigManager().isNoWaterPlace() && loc.getBlockY() >= level - 1 && plugin.getConfigManager() - .getNoPlaceWorlds().contains(loc.getWorld().getName())) - if (mat == Material.WATER_BUCKET) { - if (!plugin.msg(lm.General_CantPlaceWater).equalsIgnoreCase("")) - plugin.msg(player, lm.General_CantPlaceWater, level); - event.setCancelled(true); - return; - } + .getNoPlaceWorlds().contains(loc.getWorld().getName()) && mat == Material.WATER_BUCKET) { + if (!plugin.msg(lm.General_CantPlaceWater).equalsIgnoreCase("")) + plugin.msg(player, lm.General_CantPlaceWater, level); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1711,14 +1685,10 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) { return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); - if (res != null) { - if (plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem()) { - if (plugin.getRentManager().isRented(res.getName())) { - plugin.msg(player, lm.Rent_ModifyDeny); - event.setCancelled(true); - return; - } - } + if (res != null && plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isRented(res.getName())) { + plugin.msg(player, lm.Rent_ModifyDeny); + event.setCancelled(true); + return; } FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); @@ -1757,26 +1727,22 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { plugin.msg(player, lm.Residence_MoveDeny, res.getName()); return; } - } else if (event.getCause() == TeleportCause.ENDER_PEARL) { - if (res.getPermissions().playerHas(player, Flags.enderpearl, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - plugin.msg(player, lm.Residence_FlagDeny, Flags.enderpearl, res.getName()); - return; - } + } else if (event.getCause() == TeleportCause.ENDER_PEARL && res.getPermissions().playerHas(player, Flags.enderpearl, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + plugin.msg(player, lm.Residence_FlagDeny, Flags.enderpearl, res.getName()); + return; } - if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && plugin.getConfigManager().isBlockAnyTeleportation()) { - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player)) { - event.setCancelled(true); - plugin.msg(player, lm.General_TeleportDeny, res.getName()); - return; - } + if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && plugin.getConfigManager().isBlockAnyTeleportation() && !res.isOwner(player) && res.getPermissions() + .playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player)) { + event.setCancelled(true); + plugin.msg(player, lm.General_TeleportDeny, res.getName()); + return; } - if (plugin.getNms().isChorusTeleport(event.getCause())) { - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.chorustp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player)) { - event.setCancelled(true); - plugin.msg(player, lm.Residence_FlagDeny, Flags.chorustp, res.getName()); - return; - } + if (plugin.getNms().isChorusTeleport(event.getCause()) && !res.isOwner(player) && res.getPermissions().playerHas(player, Flags.chorustp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission( + player)) { + event.setCancelled(true); + plugin.msg(player, lm.Residence_FlagDeny, Flags.chorustp, res.getName()); + return; } } @@ -1870,7 +1836,6 @@ private void fly(Player player, boolean state) { if (res != null && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) { Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - ClaimedResidence res2 = plugin.getResidenceManager().getByLoc(player.getLocation()); if (player.isOnline() && res != null && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) { player.setAllowFlight(true); } @@ -1949,9 +1914,8 @@ else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res. } if (res != null && ResOld == null) { - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) { - if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(true); + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) { + player.setGlowing(true); } if (res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) @@ -1995,9 +1959,8 @@ public void onPlayerMove(PlayerMoveEvent event) { return; Long last = lastUpdate.get(player.getUniqueId()); - if (last != null) - if (System.currentTimeMillis() - last < plugin.getConfigManager().getMinMoveUpdateInterval()) - return; + if (last != null && System.currentTimeMillis() - last < plugin.getConfigManager().getMinMoveUpdateInterval()) + return; this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); @@ -2030,14 +1993,11 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); ClaimedResidence orres = res; - String areaname = null; String subzone = null; if (res != null) { - areaname = res.getName(); while (res.getSubzoneByLoc(loc) != null) { res = res.getSubzoneByLoc(player.getLocation()); subzone = res.getName(); - areaname = areaname + "." + subzone; } } From cee38a637c784bdbb4f02c0a4d13cc664b8b1245 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 27 Jul 2020 18:22:59 +0300 Subject: [PATCH 0763/1142] Version up --- src/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugin.yml b/src/plugin.yml index 7d685d01c..ee1976fc4 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.1.3 +version: 4.9.1.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 78422610e119b9185cebd307ec0928a048186836 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 27 Jul 2020 18:54:01 +0300 Subject: [PATCH 0764/1142] Color support --- src/com/bekvon/bukkit/CMIGUI/CMIGui.java | 3 ++- .../bekvon/bukkit/cmiLib/CMIItemStack.java | 6 ++--- .../bekvon/bukkit/cmiLib/CMIReflections.java | 2 +- .../bukkit/residence/BossBar/BossBarInfo.java | 5 ++-- .../bukkit/residence/ConfigManager.java | 3 ++- .../bekvon/bukkit/residence/Residence.java | 7 +++--- .../bukkit/residence/chat/ChatChannel.java | 3 ++- .../bekvon/bukkit/residence/commands/rc.java | 5 ++-- .../bukkit/residence/commands/shop.java | 11 ++++---- .../residence/dynmap/DynMapManager.java | 25 ++++++++++--------- .../residence/event/ResidenceChatEvent.java | 3 ++- .../listeners/ResidencePlayerListener.java | 3 ++- .../residence/protection/FlagPermissions.java | 7 +++--- .../protection/ResidenceManager.java | 7 +++--- .../bukkit/residence/text/Language.java | 10 +++++--- .../bukkit/residence/text/help/HelpEntry.java | 2 +- .../residence/text/help/InformationPager.java | 11 ++++---- .../bekvon/bukkit/residence/utils/Debug.java | 4 ++- 18 files changed, 67 insertions(+), 50 deletions(-) diff --git a/src/com/bekvon/bukkit/CMIGUI/CMIGui.java b/src/com/bekvon/bukkit/CMIGUI/CMIGui.java index db7818056..5224bd67a 100644 --- a/src/com/bekvon/bukkit/CMIGUI/CMIGui.java +++ b/src/com/bekvon/bukkit/CMIGUI/CMIGui.java @@ -17,6 +17,7 @@ import com.bekvon.bukkit.CMIGUI.GUIManager.GUIFieldType; import com.bekvon.bukkit.CMIGUI.GUIManager.GUIRows; import com.bekvon.bukkit.CMIGUI.GUIManager.InvType; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.CMIReflections; @@ -149,7 +150,7 @@ public void setInv(Inventory inv) { public String getTitle() { if (title == null) title = ""; - return ChatColor.translateAlternateColorCodes('&', title); + return CMIChatColor.translate(title); } public void updateTitle(String title) { diff --git a/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java b/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java index 0678a83f7..b396aacbd 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java @@ -95,7 +95,7 @@ public CMIItemStack setDisplayName(String name) { if (name == null) { meta.setDisplayName(null); } else - meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); + meta.setDisplayName(CMIChatColor.translate(name)); } this.getItemStack().setItemMeta(meta); return this; @@ -113,7 +113,7 @@ public CMIItemStack addLore(String string) { List lore = meta.getLore(); if (lore == null) lore = new ArrayList(); - lore.add(ChatColor.translateAlternateColorCodes('&', string)); + lore.add(CMIChatColor.translate(string)); meta.setLore(lore); this.getItemStack().setItemMeta(meta); return this; @@ -133,7 +133,7 @@ public CMIItemStack setLore(List lore) { ItemMeta meta = this.getItemStack().getItemMeta(); List t = new ArrayList(); for (String one : lore) { - t.add(ChatColor.translateAlternateColorCodes('&', one)); + t.add(CMIChatColor.translate(one)); } meta.setLore(t); this.getItemStack().setItemMeta(meta); diff --git a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java index 87a5e670d..0192ee021 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java @@ -221,7 +221,7 @@ public static void updateInventoryTitle(Player p, String title) { public static Object textToIChatBaseComponent(String text) { try { - Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, ChatColor.translateAlternateColorCodes('&', text)); + Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, CMIChatColor.translate(text)); return serialized; } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { e.printStackTrace(); diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java index cd42ad45d..03efb8906 100644 --- a/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java +++ b/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java @@ -11,6 +11,7 @@ import org.bukkit.boss.BossBar; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.utils.Utils; @@ -129,7 +130,7 @@ public void setTitleOfBar(String titleOfBar) { if (titleOfBar == null || titleOfBar.isEmpty()) this.titleOfBar = null; else - this.titleOfBar = ChatColor.translateAlternateColorCodes('&', titleOfBar); + this.titleOfBar = CMIChatColor.translate(titleOfBar); } public void setBar(BossBar bar) { @@ -189,7 +190,7 @@ public void setAutoId(Integer autoId) { } public void updateCycle() { - + } // public List getCommands() { diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index ed91e7ea7..08cd91e6d 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -31,6 +31,7 @@ import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.ELMessageType; @@ -295,7 +296,7 @@ public ConfigManager(Residence plugin) { } public static String Colors(String text) { - return ChatColor.translateAlternateColorCodes('&', text); + return CMIChatColor.translate(text); } public static List getClassesFromPackage(String pckgname, String cleaner) throws ClassNotFoundException { diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f99c16e12..921061468 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -43,6 +43,7 @@ import org.kingdoms.main.Kingdoms; import org.kingdoms.manager.game.GameManagement; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.cmiLib.VersionChecker; @@ -890,7 +891,7 @@ public SignUtil getSignUtil() { } public void consoleMessage(String message) { - Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', getPrefix() + " " + message)); + Bukkit.getConsoleSender().sendMessage(CMIChatColor.translate(getPrefix() + " " + message)); } public boolean validName(String name) { @@ -1839,12 +1840,12 @@ public String msg(String path) { public void msg(CommandSender sender, String text) { if (sender != null && text.length() > 0) - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); + sender.sendMessage(CMIChatColor.translate(text)); } public void msg(Player player, String text) { if (player != null && !text.isEmpty()) - player.sendMessage(ChatColor.translateAlternateColorCodes('&', text)); + player.sendMessage(CMIChatColor.translate(text)); } public void msg(CommandSender sender, lm lm, Object... variables) { diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index 5706dca1d..f7f08c6be 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence.chat; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.event.ResidenceChatEvent; import java.util.ArrayList; @@ -50,7 +51,7 @@ public void chat(String sourcePlayer, String message) { Residence.getInstance().msg(player, cevent.getChatprefix() + " " + Residence.getInstance().getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent .getChatMessage()); } - Bukkit.getConsoleSender().sendMessage("ResidentialChat[" + channelName + "] - " + sourcePlayer + ": " + ChatColor.stripColor(cevent.getChatMessage())); + Bukkit.getConsoleSender().sendMessage("ResidentialChat[" + channelName + "] - " + sourcePlayer + ": " + CMIChatColor.stripColor(cevent.getChatMessage())); }); } diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index b6a38e139..defd7801e 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -7,6 +7,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; @@ -105,7 +106,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (!posibleColor.contains("&")) posibleColor = "&" + posibleColor; - if (posibleColor.length() != 2 || ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', posibleColor)).length() != 0) { + if (posibleColor.length() != 2 || CMIChatColor.stripColor(CMIChatColor.translate(posibleColor)).length() != 0) { plugin.msg(player, lm.Chat_InvalidColor); return true; } @@ -146,7 +147,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo res.setChatPrefix(prefix); chat.setChatPrefix(prefix); - plugin.msg(player, lm.Chat_ChangedPrefix, ChatColor.translateAlternateColorCodes('&', prefix)); + plugin.msg(player, lm.Chat_ChangedPrefix, CMIChatColor.translate(prefix)); return true; } else if (args[0].equalsIgnoreCase("kick")) { ChatChannel chat = plugin.getChatManager().getPlayerChannel(pname); diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 4b1f817e8..bd91496a2 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -13,6 +13,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; @@ -159,7 +160,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); if (res == null) continue; - + Vote vote = plugin.getShopSignUtilManager().getAverageVote(one.getKey()); String votestat = ""; @@ -172,10 +173,10 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo String message = plugin.msg(lm.Shop_List, pi.getPositionForOutput(), one.getKey(), owner, votestat); String desc = res.getShopDesc() == null ? plugin.msg(lm.Shop_NoDesc) : plugin.msg( - lm.Shop_Desc, ChatColor.translateAlternateColorCodes('&', res.getShopDesc().replace("/n", "\n"))); + lm.Shop_Desc, CMIChatColor.translate(res.getShopDesc().replace("/n", "\n"))); RawMessage rm = new RawMessage(); - rm.add(" " + message, desc, "/res tp " + one.getKey()); + rm.addText(" " + message).addHover(desc).addCommand("/res tp " + one.getKey()); rm.show(sender); } @@ -222,7 +223,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } res.setShopDesc(desc); - plugin.msg(player, lm.Shop_DescChange, ChatColor.translateAlternateColorCodes('&', desc)); + plugin.msg(player, lm.Shop_DescChange, CMIChatColor.translate(desc)); return true; } if (args.length == 2 && args[0].equalsIgnoreCase("createboard")) { @@ -412,7 +413,7 @@ public void getLocale() { c.get("Info", Arrays.asList("Manages residence shop feature")); // Sub commands - c.setP(c.getPath()+"SubCommands."); + c.setP(c.getPath() + "SubCommands."); c.get("list.Description", "Shows list of res shops"); c.get("list.Info", Arrays.asList("&eUsage: &6/res shop list", "Shows full list of all residences with shop flag")); diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index eac8786d6..95a4f9c8a 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -13,6 +13,7 @@ import org.dynmap.markers.MarkerAPI; import org.dynmap.markers.MarkerSet; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.TransactionManager; @@ -78,28 +79,28 @@ private String formatInfoWindow(String resid, ClaimedResidence res, String resNa return null; String v = "
%regionname%
" - + ChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
"; + + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
"; if (plugin.getConfigManager().DynMapShowFlags) - v += ChatColor.stripColor(plugin.msg(lm.General_ResidenceFlags, "")) + "
%flags%"; + v += CMIChatColor.stripColor(plugin.msg(lm.General_ResidenceFlags, "")) + "
%flags%"; v += "
"; if (plugin.getRentManager().isForRent(res.getName())) v = "
" - + ChatColor.stripColor(plugin.msg(lm.Rentable_Land, "")) + "%regionname%
" - + ChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" - + ChatColor.stripColor(plugin.msg(lm.Residence_RentedBy, "")) + "%renter%
" - + ChatColor.stripColor(plugin.msg(lm.General_LandCost, "")) + "%rent%
" - + ChatColor.stripColor(plugin.msg(lm.Rent_Days, "")) + "%rentdays%
" - + ChatColor.stripColor(plugin.msg(lm.Rentable_AllowRenewing, "")) + "%renew%
" - + ChatColor.stripColor(plugin.msg(lm.Rent_Expire, "")) + "%expire%
"; + + CMIChatColor.stripColor(plugin.msg(lm.Rentable_Land, "")) + "%regionname%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" + + CMIChatColor.stripColor(plugin.msg(lm.Residence_RentedBy, "")) + "%renter%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_LandCost, "")) + "%rent%
" + + CMIChatColor.stripColor(plugin.msg(lm.Rent_Days, "")) + "%rentdays%
" + + CMIChatColor.stripColor(plugin.msg(lm.Rentable_AllowRenewing, "")) + "%renew%
" + + CMIChatColor.stripColor(plugin.msg(lm.Rent_Expire, "")) + "%expire%"; if (plugin.getTransactionManager().isForSale(res.getName())) v = "
" - + ChatColor.stripColor(plugin.msg(lm.Economy_LandForSale, " ")) + + CMIChatColor.stripColor(plugin.msg(lm.Economy_LandForSale, " ")) + "%regionname%
" - + ChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" - + ChatColor.stripColor(plugin.msg(lm.Economy_SellAmount, "")) + "%price%
"; + + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" + + CMIChatColor.stripColor(plugin.msg(lm.Economy_SellAmount, "")) + "%price%
"; v = v.replace("%regionname%", resName); v = v.replace("%playerowners%", res.getOwner()); diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java index 58f062384..bb80b7564 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence.event; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import org.bukkit.ChatColor; import org.bukkit.entity.Player; @@ -34,7 +35,7 @@ public String getChatMessage() { } public String getChatprefix() { - return ChatColor.translateAlternateColorCodes('&', prefix); + return CMIChatColor.translate( prefix); } public void setChatprefix(String prefix) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 8f95b8c13..9b60d109f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -51,6 +51,7 @@ import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.ActionBarManager; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.CMIReflections; import com.bekvon.bukkit.cmiLib.TitleMessageManager; @@ -725,7 +726,7 @@ public void onSignCreate(SignChangeEvent event) { Sign sign = (Sign) block.getState(); - if (!ChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(plugin.msg(lm.Sign_TopLine))) + if (!CMIChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(plugin.msg(lm.Sign_TopLine))) return; Signs signInfo = new Signs(); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 20742d2cf..1bfaba79b 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -20,6 +20,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; @@ -970,7 +971,7 @@ public String listFlags(Integer split, Integer totalShow) { if (sbuild.length() == 0) { sbuild.append("none"); } - return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); + return CMIChatColor.translate(sbuild.toString()); } public Map getFlags() { @@ -1067,7 +1068,7 @@ protected String printPlayerFlags(Map flags) { if (sbuild.length() == 0) { sbuild.append("none"); } - return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); + return CMIChatColor.translate(sbuild.toString()); } public String listOtherPlayersFlags(String player) { @@ -1264,7 +1265,7 @@ public String listGroupFlags(String group) { groupFlags.remove(group); sbuild.append("none"); } - return ChatColor.translateAlternateColorCodes('&', sbuild.toString()); + return CMIChatColor.translate(sbuild.toString()); } return "none"; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 04a101512..9421cd069 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -22,6 +22,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; @@ -701,7 +702,7 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi if (res.isOwner(sender) || !(sender instanceof Player) || resadmin) resNameOwner += plugin.msg(lm.Bank_Name, res.getBank().getStoredMoneyFormated()); } - resNameOwner = ChatColor.translateAlternateColorCodes('&', resNameOwner); + resNameOwner = CMIChatColor.translate(resNameOwner); String worldInfo = plugin.msg(lm.General_World, perms.getWorld()); @@ -709,7 +710,7 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi CuboidArea area = res.getAreaArray()[0]; String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); - worldInfo += ChatColor.translateAlternateColorCodes('&', plugin.msg(lm.General_CoordsLiner, cord1, cord2)); + worldInfo += CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); } worldInfo += "\n" + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.createTime)); @@ -753,7 +754,7 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) String msg = ""; msg += plugin.msg(lm.General_TotalResSize, res.getTotalSize(), res.getXZSize()); - plugin.msg(sender, ChatColor.translateAlternateColorCodes('&', msg)); + plugin.msg(sender, CMIChatColor.translate(msg)); if (plugin.getEconomyManager() != null) { plugin.msg(sender, lm.General_TotalWorth, res.getWorthByOwner(), res.getWorth()); diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index f413f1e3e..e8ed9ef27 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -9,6 +9,8 @@ import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; + +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; @@ -77,7 +79,7 @@ public String getMessage(String key) { if (customlocale == null || !customlocale.contains(key)) message = enlocale.contains(key) == true ? enlocale.getString(key) : missing; message = customlocale.contains(key) == true ? customlocale.getString(key) : missing; - return ChatColor.translateAlternateColorCodes('&', message); + return CMIChatColor.translate(message); } /** @@ -106,7 +108,7 @@ public String getMessage(lm lm, Object... variables) { message = message.replace("%" + i, vr); } - return ChatColor.translateAlternateColorCodes('&', message); + return CMIChatColor.translate(message); } /** @@ -120,7 +122,7 @@ public String getDefaultMessage(String key) { if (!key.contains("Language.") && !key.contains("CommandHelp.")) key = "Language." + key; String missing = "Missing locale for " + key; - return enlocale.contains(key) == true ? ChatColor.translateAlternateColorCodes('&', enlocale.getString(key)) : missing; + return enlocale.contains(key) == true ? CMIChatColor.translate(enlocale.getString(key)) : missing; } /** @@ -193,6 +195,6 @@ private static List ColorsArray(List text) { } private static String Colors(String text) { - return ChatColor.translateAlternateColorCodes('&', text); + return CMIChatColor.translate(text); } } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 65b2753e5..723e0a9a2 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -238,7 +238,7 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { if (stringList != null) { entry.lines = new String[stringList.size()]; for (int i = 0; i < stringList.size(); i++) { - entry.lines[i] = ChatColor.translateAlternateColorCodes('&', stringList.get(i)); + entry.lines[i] = CMIChatColor.translate(stringList.get(i)); } } } diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 998d9a3df..fede8aa5b 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -15,6 +15,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -108,7 +109,7 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap Date: Tue, 28 Jul 2020 10:23:40 +0300 Subject: [PATCH 0765/1142] Fix for empty hand interaction --- src/com/bekvon/bukkit/cmiLib/CMIMaterial.java | 11 +++++++++++ .../bekvon/bukkit/residence/itemlist/ItemList.java | 6 ++++-- .../bukkit/residence/itemlist/WorldItemManager.java | 5 +++++ .../residence/listeners/ResidencePlayerListener.java | 5 ++--- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java index 8ed016947..1c501fcd7 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java @@ -2159,6 +2159,17 @@ public boolean isTool() { return false; } + public static boolean isValidItem(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isValidItem(); + } + + public boolean isValidItem() { + return !this.equals(CMIMaterial.NONE) && !this.isAir() && this.getMaterial() != null; + } + public boolean isNone() { return this.equals(CMIMaterial.NONE); } diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index ebffe261d..95cd44a92 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -36,11 +36,13 @@ public ListType getType() { } public boolean contains(Material mat) { + if (mat == null || CMIMaterial.isAir(mat)) + return false; return list.contains(mat); } public void add(Material mat) { - if (!list.contains(mat) && mat != null) + if (!list.contains(mat) && mat != null && !CMIMaterial.isAir(mat)) list.add(mat); } @@ -49,7 +51,7 @@ public boolean toggle(Material mat) { list.remove(mat); return false; } - if (mat != null) + if (mat != null && !CMIMaterial.isAir(mat)) list.add(mat); return true; } diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java index 5b1a7ad47..d73d10415 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java @@ -8,6 +8,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.utils.Debug; @@ -33,6 +34,10 @@ public boolean isAllowed(Material mat, PermissionGroup group, String world) { public boolean isAllowed(Material mat, String group, String world) { if (mat == null) return true; + + if (!CMIMaterial.isValidItem(mat)) + return true; + for (WorldItemList list : lists) { if (!list.isAllowed(mat, world, group)) { return false; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9b60d109f..0b24e685e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -78,6 +78,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -1212,7 +1213,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (resadmin) return; - if (!heldItem.isAir() && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld().getName())) { + if (heldItem.isValidItem() && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld().getName())) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; @@ -1994,11 +1995,9 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); ClaimedResidence orres = res; - String subzone = null; if (res != null) { while (res.getSubzoneByLoc(loc) != null) { res = res.getSubzoneByLoc(player.getLocation()); - subzone = res.getName(); } } From e374c685352e5a4732a31928a20bd68e06b042ea Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 28 Jul 2020 23:23:19 +0300 Subject: [PATCH 0766/1142] Correct way to check for block break event from SlimeFun plugin --- .../residence/itemlist/WorldItemManager.java | 2 +- .../listeners/ResidenceBlockListener.java | 37 ++++++++++--------- .../slimeFun/SlimeFunResidenceModule.java | 5 +-- src/plugin.yml | 2 +- 4 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java index d73d10415..7736eb629 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; + import org.bukkit.Material; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -11,7 +12,6 @@ import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.utils.Debug; public class WorldItemManager { protected List lists; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 1166cab5f..201faad1d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -195,31 +195,34 @@ public void onBlockBreak(BlockBreakEvent event) { if (plugin.isResAdminOn(player)) { return; } + if (cancelBlockBreak(player, event.getBlock())) + event.setCancelled(true); + } + + public static boolean cancelBlockBreak(Player player, Block block) { - Block block = event.getBlock(); Material mat = block.getType(); String world = block.getWorld().getName(); - ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = resPlayer.getGroup(); - if (plugin.getItemManager().isIgnored(mat, group, world)) { - return; + if (Residence.getInstance().getItemManager().isIgnored(mat, group, world)) { + return false; } - ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(block.getLocation()); if (res != null && res.getItemIgnoreList().isListed(mat)) - return; + return false; - if (plugin.getConfigManager().enabledRentSystem() && res != null) { - if (plugin.getConfigManager().preventRentModify() && res.isRented()) { - plugin.msg(player, lm.Rent_ModifyDeny); - event.setCancelled(true); - return; + if (Residence.getInstance().getConfigManager().enabledRentSystem() && res != null) { + if (Residence.getInstance().getConfigManager().preventRentModify() && res.isRented()) { + Residence.getInstance().msg(player, lm.Rent_ModifyDeny); + return true; } } - FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(block.getLocation(), player); boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); @@ -231,13 +234,13 @@ public void onBlockBreak(BlockBreakEvent event) { if (!hasdestroy && !ResPerm.bypass_destroy.hasPermission(player, 10000L)) { - plugin.msg(player, lm.Flag_Deny, Flags.destroy); - event.setCancelled(true); + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.destroy); + return true; } else if (mat == Material.CHEST && !perms.playerHas(player, Flags.container, true)) { - plugin.msg(player, lm.Flag_Deny, Flags.container); - event.setCancelled(true); + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container); + return true; } - + return false; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index 93fd1d5a0..1ca6b612c 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -8,6 +8,7 @@ import org.bukkit.plugin.Plugin; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectableAction; import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectionModule; @@ -41,9 +42,7 @@ public boolean hasPermission(OfflinePlayer p, Location l, ProtectableAction acti break; case BREAK_BLOCK: Player player = Bukkit.getPlayer(p.getUniqueId()); - BlockBreakEvent breakEvent = new BlockBreakEvent(l.getBlock(), player); - Bukkit.getServer().getPluginManager().callEvent(breakEvent); - if (breakEvent.isCancelled()) + if (ResidenceBlockListener.cancelBlockBreak(player, l.getBlock())) return false; break; case PLACE_BLOCK: diff --git a/src/plugin.yml b/src/plugin.yml index ee1976fc4..0fb64aa79 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.1.4 +version: 4.9.1.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 01ffe851ca13eeb8790653b5c4af55cd13883af2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 10 Aug 2020 14:22:14 +0300 Subject: [PATCH 0767/1142] Show flags depending on core subcommand --- .../listeners/ResidenceBlockListener.java | 18 ++++++------ .../bukkit/residence/text/help/HelpEntry.java | 28 ++++++++++++++----- src/plugin.yml | 2 +- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 201faad1d..e0adde113 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -187,20 +187,20 @@ public void onTreeGrow(StructureGrowEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { - - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) { - return; - } - if (cancelBlockBreak(player, event.getBlock())) + if (cancelBlockBreak(event.getPlayer(), event.getBlock())) event.setCancelled(true); } public static boolean cancelBlockBreak(Player player, Block block) { + // disabling event on world + if (Residence.getInstance().isDisabledWorldListener(block.getWorld())) + return false; + + if (Residence.getInstance().isResAdminOn(player)) { + return false; + } + Material mat = block.getType(); String world = block.getWorld().getName(); diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 723e0a9a2..af59842e3 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -11,7 +11,6 @@ import java.util.Set; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.command.CommandSender; @@ -25,7 +24,10 @@ import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; +import com.bekvon.bukkit.residence.commands.pset; +import com.bekvon.bukkit.residence.commands.set; import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.Flags.FlagMode; import com.bekvon.bukkit.residence.containers.HelpLines; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; @@ -307,7 +309,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { int neededArgPlace = args.length - 2 - i; boolean subCommand = true; - if (i < args.length && tempmeinPath!= null && tempmeinPath.isConfigurationSection(args[i])) { + if (i < args.length && tempmeinPath != null && tempmeinPath.isConfigurationSection(args[i])) { subCommand = false; tempmeinPath = tempmeinPath.getConfigurationSection(args[i]); } @@ -403,29 +405,41 @@ public Set getSubCommands(CommandSender sender, String[] args) { break; case "[flag]": - for (String one : FlagPermissions.getAllPosibleFlags()) { + FlagMode mode = FlagMode.Both; + if (args.length > 0) { + if (args[0].equalsIgnoreCase(set.class.getSimpleName())) + mode = FlagMode.Residence; + else if (args[0].equalsIgnoreCase(pset.class.getSimpleName())) + mode = FlagMode.Player; + } + for (String one : FlagPermissions.getAllPosibleFlags()) { Flags f = Flags.getFlag(one); if (f != null) { + + if (f.getFlagMode() != FlagMode.Both && f.getFlagMode() != mode) + continue; + if (!f.isGlobalyEnabled()) continue; subCommands.add(f.getName()); } subCommands.add(one); - } - for (String one : FlagPermissions.getPosibleAreaFlags()) { + for (String one : FlagPermissions.getPosibleAreaFlags()) { Flags f = Flags.getFlag(one); - if (f != null) { + + if (f.getFlagMode() != FlagMode.Both && f.getFlagMode() != mode) + continue; + if (!f.isGlobalyEnabled()) continue; subCommands.add(f.getName()); } subCommands.add(one); - } break; case "[material]": diff --git a/src/plugin.yml b/src/plugin.yml index 0fb64aa79..22dfb3444 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.1.5 +version: 4.9.1.6 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 7dace76b58d59ccce0d734c9c31f0e22d35f78c8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 10 Aug 2020 15:31:12 +0300 Subject: [PATCH 0768/1142] Disabling metrics async schedule on server stop --- src/com/bekvon/bukkit/residence/Residence.java | 11 +++++++++-- .../bukkit/residence/selection/SelectionManager.java | 6 +++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 921061468..37768975d 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -207,6 +207,7 @@ public class Residence extends JavaPlugin { protected int DespawnMobsBukkitId = -1; private boolean SlimeFun = false; + Metrics metrics = null; protected int autosaveBukkitId = -1; protected VersionChecker versionChecker; @@ -402,6 +403,12 @@ public void onDisable() { this.getSelectionManager().onDisable(); + if (this.metrics != null) + try { + metrics.disable(); + } catch (IOException e) { + e.printStackTrace(); + } if (getConfigManager().useLeases()) { server.getScheduler().cancelTask(leaseBukkitId); } @@ -560,7 +567,7 @@ public void onEnable() { if (SlimeFun) new slimeFunManager(this); - + this.getConfigManager().copyOverTranslations(); parseHelpEntries(); @@ -797,7 +804,7 @@ public void run() { } } try { - Metrics metrics = new Metrics(this); + metrics = new Metrics(this); metrics.start(); } catch (IOException e) { // Failed to submit the stats :-( diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 21483ea43..06a7d33c8 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -488,6 +488,8 @@ public void showBounds(final Player player, final Visualizer v) { } vMap.put(player.getUniqueId(), v); + if (!plugin.isEnabled()) + return; v.setBaseShedId(Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { @@ -724,6 +726,8 @@ public boolean MakeBorders(final Player player, final boolean error) { } } + if (!plugin.isEnabled()) + return false; Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { @@ -1080,7 +1084,7 @@ private static Direction getDirection(Player player) { public void regenerate(CuboidArea area) { } - + public void onDisable() { for (Entry one : vMap.entrySet()) { one.getValue().cancelAll(); From 95afaf510b412e1a955cddab8e8ab63b65a99907 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 10 Aug 2020 15:32:50 +0300 Subject: [PATCH 0769/1142] Check for possible null bow --- .../bukkit/residence/listeners/ResidenceEntityListener.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 031c7824d..ba5ff7c02 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1341,6 +1341,9 @@ public void onEntityShootBowEvent(EntityShootBowEvent event) { if (Version.isCurrentEqualOrLower(Version.v1_14_R1)) return; + + if (event.getBow() == null) + return; if (event.getBow().getType() != Material.CROSSBOW) return; From 41a1a775c310fa7f8c412c1c89635ab96c66f075 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 10 Aug 2020 16:04:31 +0300 Subject: [PATCH 0770/1142] Lectern now under use flag to be able to read it To take book from lectern requires container flag --- .../bekvon/bukkit/residence/Residence.java | 7 ++++ .../listeners/ResidencePlayerListener.java | 5 ++- .../ResidencePlayerListener1_14.java | 36 +++++++++++++++++++ .../residence/protection/FlagPermissions.java | 4 ++- 4 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_14.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 37768975d..cd95dc37d 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -84,6 +84,7 @@ import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; import com.bekvon.bukkit.residence.listeners.ResidenceFixesListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_14; import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; @@ -155,6 +156,7 @@ public class Residence extends JavaPlugin { protected ResidenceBlockListener blistener; protected ResidencePlayerListener plistener; + protected ResidencePlayerListener1_14 p1_14listener; protected ResidenceEntityListener elistener; protected ResidenceFixesListener flistener; @@ -708,6 +710,8 @@ public void run() { blistener = new ResidenceBlockListener(this); plistener = new ResidencePlayerListener(this); + if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) + p1_14listener = new ResidencePlayerListener1_14(this); elistener = new ResidenceEntityListener(this); flistener = new ResidenceFixesListener(); slistener = new ResidenceRaidListener(); @@ -719,6 +723,9 @@ public void run() { pm.registerEvents(blistener, this); pm.registerEvents(plistener, this); + + if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) + pm.registerEvents(p1_14listener, this); pm.registerEvents(elistener, this); pm.registerEvents(flistener, this); pm.registerEvents(shlistener, this); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 0b24e685e..9c463ac21 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -78,7 +78,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -929,6 +928,7 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { case "FLOWER_POT": case "COMMAND": case "ANVIL": + case "LECTERN": case "CHIPPED_ANVIL": case "DAMAGED_ANVIL": case "CAKE_BLOCK": @@ -1183,7 +1183,7 @@ private static boolean placingMinecart(Block block, ItemStack item) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { -// Long nano = System.nanoTime(); + if (event.getPlayer() == null) return; // disabling event on world @@ -1272,7 +1272,6 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (res == null || !res.isOwner(player)) { Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); - if (result != null) { main: if (!perms.playerHas(player, result, hasuse)) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_14.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_14.java new file mode 100644 index 000000000..5a96cfac8 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_14.java @@ -0,0 +1,36 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerTakeLecternBookEvent; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + +public class ResidencePlayerListener1_14 implements Listener { + + private Residence plugin; + + public ResidencePlayerListener1_14(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler + public void onJump(PlayerTakeLecternBookEvent event) { + + // disabling event on world + if (Residence.getInstance().isDisabledWorldListener(event.getLectern().getWorld())) + return; + if (Residence.getInstance().isResAdminOn(event.getPlayer())) { + return; + } + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(event.getLectern().getLocation(), event.getPlayer()); + if (perms.has(Flags.container, FlagCombo.TrueOrNone)) + return; + event.setCancelled(true); + Residence.getInstance().msg(event.getPlayer(), lm.Flag_Deny, Flags.container); + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 1bfaba79b..4de0a87d8 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -250,7 +250,9 @@ public static void initValidFlags() { addMaterialToUseFlag(CMIMaterial.CARTOGRAPHY_TABLE.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.FLETCHING_TABLE.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.GRINDSTONE.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.LECTERN.getMaterial(), Flags.container); + + addMaterialToUseFlag(CMIMaterial.LECTERN.getMaterial(), Flags.use); + addMaterialToUseFlag(CMIMaterial.LOOM.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.SMITHING_TABLE.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.SMOKER.getMaterial(), Flags.container); From d061c9d09c6e07b1dfe8b5ebf539bafa9f0aa61b Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 10 Aug 2020 16:08:55 +0300 Subject: [PATCH 0771/1142] SlimeFun error fix --- src/com/bekvon/bukkit/residence/Residence.java | 2 ++ .../bukkit/residence/slimeFun/SlimeFunResidenceModule.java | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index cd95dc37d..5b4f4b6e4 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1232,6 +1232,8 @@ public boolean isResAdminOn(CommandSender sender) { } public boolean isResAdminOn(Player player) { + if (player == null) + return true; return resadminToggle.contains(player.getName()); } diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index 1ca6b612c..38e3842bd 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -4,7 +4,6 @@ import org.bukkit.Location; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; -import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.plugin.Plugin; import com.bekvon.bukkit.residence.Residence; @@ -42,6 +41,8 @@ public boolean hasPermission(OfflinePlayer p, Location l, ProtectableAction acti break; case BREAK_BLOCK: Player player = Bukkit.getPlayer(p.getUniqueId()); + if (player == null) + return false; if (ResidenceBlockListener.cancelBlockBreak(player, l.getBlock())) return false; break; From e795d6c69a617c6b6ade240ffb02c3ac2f1b3a8c Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 10 Aug 2020 17:59:32 +0300 Subject: [PATCH 0772/1142] Fixing fly flag issue --- .../listeners/ResidencePlayerListener.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9c463ac21..bb205dbf4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -78,6 +78,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidencePlayerListener implements Listener { @@ -1832,16 +1833,12 @@ private void fly(Player player, boolean state) { } } else { player.setAllowFlight(true); - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - - if (res != null && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - if (player.isOnline() && res != null && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) { - player.setAllowFlight(true); - } - }, 20L); - } + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res != null && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && player.isOnline()) { + player.setAllowFlight(true); + } + }, 20L); } } @@ -1850,6 +1847,7 @@ public void onResidenceChange(ResidenceChangedEvent event) { ClaimedResidence res = event.getTo(); ClaimedResidence ResOld = event.getFrom(); + Player player = event.getPlayer(); if (player == null) return; @@ -2007,7 +2005,6 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move currentRes.remove(uuid); } else { if (res != null && ResOld.getName().equals(res.getName())) { - if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { if (!res.isOwner(player)) { From 9e535d6769f1546f57b366e4b649a34afa12bb72 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 12 Aug 2020 17:25:25 +0300 Subject: [PATCH 0773/1142] Initial 1.16.2 support --- .../bukkit/residence/allNms/v1_16_R2.java | 161 ++++++++++++++++++ .../listeners/ResidenceEntityListener.java | 6 +- src/plugin.yml | 2 +- 3 files changed, 167 insertions(+), 2 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java new file mode 100644 index 000000000..ce1036fe4 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java @@ -0,0 +1,161 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Particle.DustOptions; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_16_R2.CraftParticle; +import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Bee; +import org.bukkit.entity.Cat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cod; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Dolphin; +import org.bukkit.entity.Donkey; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Fox; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Llama; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Panda; +import org.bukkit.entity.Parrot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.PolarBear; +import org.bukkit.entity.PufferFish; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Salmon; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Strider; +import org.bukkit.entity.TropicalFish; +import org.bukkit.entity.Turtle; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.cmiLib.CMIEffect; +import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_16_R2.Packet; +import net.minecraft.server.v1_16_R2.PacketPlayOutWorldParticles; + +public class v1_16_R2 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof Llama || + ent instanceof PolarBear || + ent instanceof Parrot || + ent instanceof Donkey || + ent instanceof Cod || + ent instanceof Salmon || + ent instanceof PufferFish || + ent instanceof TropicalFish || + ent instanceof Turtle || + ent instanceof Dolphin || + ent instanceof Fox || + ent instanceof Panda || + ent instanceof Cat || + ent instanceof Bee || + ent instanceof Strider); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public ItemStack itemInOffHand(Player player) { + return player.getInventory().getItemInOffHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + + CMIParticle effect = ef.getParticle(); + if (effect == null) + return; + if (!effect.isParticle()) { + return; + } + + org.bukkit.Particle particle = effect.getParticle(); + + if (particle == null) + return; + + DustOptions dd = null; + if (particle.equals(org.bukkit.Particle.REDSTONE)) + dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); + + Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), + (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); + + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index ba5ff7c02..4538b5af5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -66,6 +66,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceEntityListener implements Listener { @@ -120,6 +121,9 @@ private static boolean isTamed(Entity ent) { private static boolean damageableProjectile(Entity ent) { if (ent instanceof Projectile && ent.getType().toString().equalsIgnoreCase("Splash_potion")) { + + if (((ThrownPotion) ent).getEffects().isEmpty()) + return true; for (PotionEffect one : ((ThrownPotion) ent).getEffects()) { for (String oneHarm : Residence.getInstance().getConfigManager().getNegativePotionEffects()) { if (oneHarm.equalsIgnoreCase(one.getType().getName())) @@ -1341,7 +1345,7 @@ public void onEntityShootBowEvent(EntityShootBowEvent event) { if (Version.isCurrentEqualOrLower(Version.v1_14_R1)) return; - + if (event.getBow() == null) return; diff --git a/src/plugin.yml b/src/plugin.yml index 22dfb3444..fdb73f9f2 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.1.6 +version: 4.9.1.7 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 3f450e1ea1e3c9c6c347cb9dacd5ec5c6f245889 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 13 Aug 2020 14:23:19 +0300 Subject: [PATCH 0774/1142] Updating 1.16.2 libraries --- .../bekvon/bukkit/cmiLib/CMIChatColor.java | 77 ++++- .../bekvon/bukkit/cmiLib/CMIEntityType.java | 119 ++------ src/com/bekvon/bukkit/cmiLib/CMIMaterial.java | 254 ++++++++++------- src/com/bekvon/bukkit/cmiLib/ItemManager.java | 264 +----------------- src/com/bekvon/bukkit/cmiLib/RawMessage.java | 30 +- .../bukkit/cmiLib/TitleMessageManager.java | 2 - src/com/bekvon/bukkit/cmiLib/Version.java | 15 +- 7 files changed, 269 insertions(+), 492 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java index 63d855bca..a721b4a41 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java @@ -12,6 +12,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Color; @@ -33,7 +34,6 @@ public class CMIChatColor { } } } - for (float x = 0.0F; x <= 1; x += 0.1) { for (float z = 0.1F; z <= 1; z += 0.1) { for (float y = 0; y <= 1; y += 0.03) { @@ -53,6 +53,52 @@ public class CMIChatColor { public static final String colorCodePrefix = "{#"; public static final String colorCodeSuffix = "}"; + private static String charEscape(String s) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < s.length(); i++) { + char ch = s.charAt(i); + + switch (ch) { + case '"': + sb.append("\\\""); + break; + case '\n': + sb.append("\\n"); + break; + case '\\': + sb.append("\\\\"); + break; + case '\b': + sb.append("\\b"); + break; + case '\f': + sb.append("\\f"); + break; + case '\r': + sb.append("\\r"); + break; + case '\t': + sb.append("\\t"); + break; + case '/': + sb.append("/"); + break; + default: + if ((ch >= '\u0000' && ch <= '\u001F') || (ch >= '\u007F' && ch <= '\u009F') || (ch >= '\u2000' && ch <= '\u20FF')) { + String ss = Integer.toHexString(ch); + sb.append("\\u"); + for (int k = 0; k < 4 - ss.length(); k++) { + sb.append('0'); + } + sb.append(ss.toUpperCase()); + } else { + sb.append(ch); + } + } + } + return sb.toString(); + } + private static String escape(String text) { return text.replace("#", "\\#").replace("{", "\\{").replace("}", "\\}"); } @@ -89,7 +135,7 @@ private static String escape(String text) { public static final CMIChatColor LIGHT_PURPLE = new CMIChatColor("Light_Purple", 'd', 255, 85, 255); public static final CMIChatColor YELLOW = new CMIChatColor("Yellow", 'e', 255, 255, 85); public static final CMIChatColor WHITE = new CMIChatColor("White", 'f', 255, 255, 255); - public static final CMIChatColor MAGIC = new CMIChatColor("Obfuscated", 'k', false); + public static final CMIChatColor OBFUSCATED = new CMIChatColor("Obfuscated", 'k', false); public static final CMIChatColor BOLD = new CMIChatColor("Bold", 'l', false); public static final CMIChatColor STRIKETHROUGH = new CMIChatColor("Strikethrough", 'm', false); public static final CMIChatColor UNDERLINE = new CMIChatColor("Underline", 'n', false); @@ -121,9 +167,13 @@ public CMIChatColor(String name, String hex) { this.hex = hex; this.name = name; - red = Integer.valueOf(this.hex.substring(0, 2), 16); - green = Integer.valueOf(this.hex.substring(2, 4), 16); - blue = Integer.parseInt(this.hex.substring(4, 6), 16); + try { + red = Integer.valueOf(this.hex.substring(0, 2), 16); + green = Integer.valueOf(this.hex.substring(2, 4), 16); + blue = Integer.parseInt(this.hex.substring(4, 6), 16); + } catch (Throwable e) { + this.hex = null; + } } public CMIChatColor(String name, char c, Boolean color) { @@ -159,8 +209,9 @@ public static String processGradient(String text) { CMIChatColor c1 = CMIChatColor.getColor(CMIChatColor.colorCodePrefix + gradientMatch.group(2).replace("#", "") + CMIChatColor.colorCodeSuffix); CMIChatColor c2 = CMIChatColor.getColor(CMIChatColor.colorCodePrefix + gradientMatch.group(5).replace("#", "") + CMIChatColor.colorCodeSuffix); - if (c1 == null || c2 == null) + if (c1 == null || c2 == null) { continue; + } String gtext = gradientMatch.group(3); @@ -168,12 +219,19 @@ public static String processGradient(String text) { String updated = ""; + gtext = stripColor(gtext); + for (int i = 0; i < gtext.length(); i++) { char ch = gtext.charAt(i); + int length = gtext.length(); + length = length < 2 ? 2 : length; + + double percent = (i * 100D) / (length - 1); - CMIChatColor mix = CMIChatColor.mixColors(c1, c2, (i * 100D) / (gtext.length() - 1)); + CMIChatColor mix = CMIChatColor.mixColors(c1, c2, percent); updated += CMIChatColor.colorCodePrefix + mix.getHex() + CMIChatColor.colorCodeSuffix; - updated += ch; + + updated += String.valueOf(ch); } if (continuous) { @@ -262,7 +320,6 @@ public static String colorize(String text) { public static String deColorize(String text) { if (text == null) return null; - text = CMIChatColor.translate(text); text = text.replace("§", "&"); @@ -509,7 +566,7 @@ public Pattern getPattern() { public Color getRGBColor() { if (blue < 0) return null; - return Color.fromBGR(blue, green, red); + return Color.fromRGB(red, green, blue); } public String getHex() { diff --git a/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java b/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java index b6b710549..ee3f57717 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java @@ -2,16 +2,13 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.List; -import java.util.Map.Entry; import org.bukkit.block.CreatureSpawner; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BlockStateMeta; -import org.bukkit.inventory.meta.ItemMeta; public enum CMIEntityType { @@ -256,6 +253,9 @@ public enum CMIEntityType { STRIDER(927, "Strider", Arrays.asList("MThhOWFkZjc4MGVjN2RkNDYyNWM5YzA3NzkwNTJlNmExNWE0NTE4NjY2MjM1MTFlNGM4MmU5NjU1NzE0YjNjMSJ9fX0=")), ZOGLIN(928, "Zoglin", Arrays.asList("ZTY3ZTE4NjAyZTAzMDM1YWQ2ODk2N2NlMDkwMjM1ZDg5OTY2NjNmYjllYTQ3NTc4ZDNhN2ViYmM0MmE1Y2NmOSJ9fX0=")), + // 1.16.2 + PIGLIN_BRUTE(929, "Piglin Brute", Arrays.asList("M2UzMDBlOTAyNzM0OWM0OTA3NDk3NDM4YmFjMjllM2E0Yzg3YTg0OGM1MGIzNGMyMTI0MjcyN2I1N2Y0ZTFjZiJ9fX0=")), + // if possible we can remove this string for each texture to save up some space // eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUv UNKNOWN(999, "Unknown"); @@ -265,6 +265,17 @@ public enum CMIEntityType { private String secondaryName; EntityType type = null; public static HashMap cache = new HashMap(); + static HashMap byName = new HashMap(); + + static { + for (CMIEntityType one : CMIEntityType.values()) { + byName.put(one.toString().replace("_", "").toLowerCase(), one); + byName.put(one.getName().replace("_", "").replace(" ", "").toLowerCase(), one); + byName.put(String.valueOf(one.getId()), one); + if (one.secondaryName != null) + byName.put(one.secondaryName.replace("_", "").replace(" ", "").toLowerCase(), one); + } + } CMIEntityType(int id, String name, List headTextures) { this(id, name, null, headTextures); @@ -282,11 +293,6 @@ public enum CMIEntityType { this.id = id; this.name = name; this.secondaryName = secondaryName; - for (String one : headTextures) { - String text = one; - if (text.length() < 150) - text = "" + text; - } } public int getId() { @@ -298,11 +304,8 @@ public String getName() { } public static CMIEntityType getById(int id) { - for (CMIEntityType one : CMIEntityType.values()) { - if (one.getId() == id) - return one; - } - return CMIEntityType.PIG; + CMIEntityType ttype = getByName(String.valueOf(id)); + return ttype == null ? CMIEntityType.PIG : ttype; } public static CMIEntityType getByType(EntityType entity) { @@ -331,95 +334,7 @@ public static CMIEntityType getByItem(ItemStack item) { } public static CMIEntityType getByName(String name) { - String main = name; - String sub = null; - - if (name.contains("_")) { - main = name.split("_")[0]; - sub = name.split("_")[1]; - } - if (name.contains(":")) { - main = name.split(":")[0]; - sub = name.split(":")[1]; - } - - String updated = (main + (sub == null ? "" : sub)).toLowerCase(); - String reverse = ((sub == null ? "" : sub) + main).toLowerCase(); - - CMIEntityType type = null; - - Integer id = null; - try { - id = Integer.parseInt(main); - } catch (Exception e) { - } - - for (CMIEntityType one : CMIEntityType.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(updated) || one.name.replace(" ", "").equalsIgnoreCase(updated)) { - type = one; - break; - } - } - - if (type == null) - for (CMIEntityType one : CMIEntityType.values()) { - if (one.secondaryName == null) - continue; - - String oneN = one.secondaryName; - oneN = oneN.replace("_", ""); - if (oneN.equalsIgnoreCase(name)) { - type = one; - break; - } - } - - if (type == null) - for (CMIEntityType one : CMIEntityType.values()) { - if (one.name.replace("_", "").contains(updated)) { - type = one; - break; - } - } - - if (sub != null) { - if (type == null) - for (CMIEntityType one : CMIEntityType.values()) { - if (one.name().replace("_", "").equalsIgnoreCase(reverse) || one.name.replace(" ", "").equalsIgnoreCase(reverse)) { - type = one; - break; - } - } - if (type == null) - for (CMIEntityType one : CMIEntityType.values()) { - if (one.name.replace("_", "").contains(reverse)) { - type = one; - break; - } - } - } - - if (id != null) { - if (type == null) - for (CMIEntityType one : CMIEntityType.values()) { - if (one.getId() == id) { - type = one; - break; - } - } - } - - if (type == null) - for (CMIEntityType one : CMIEntityType.values()) { - if (one.name.contains("_")) - continue; - if (one.name.equalsIgnoreCase(main)) { - type = one; - break; - } - } - - return type; + return byName.get(name.toLowerCase().replace("_", "")); } public EntityType getType() { diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java index 1c501fcd7..d5acce440 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java @@ -1040,109 +1040,112 @@ public enum CMIMaterial { HONEY_BLOCK("Honey Block"), HONEY_BOTTLE("Honey Bottle"), - //1.16 - ANCIENT_DEBRIS("ancient debris"), - BASALT("basalt"), - BLACKSTONE("blackstone"), - BLACKSTONE_SLAB("blackstone slab"), - BLACKSTONE_STAIRS("blackstone stairs"), - BLACKSTONE_WALL("blackstone wall"), - CHAIN("chain"), - CHISELED_NETHER_BRICKS("chiseled nether bricks"), - CHISELED_POLISHED_BLACKSTONE("chiseled polished blackstone"), - CRACKED_NETHER_BRICKS("cracked nether bricks"), - CRACKED_POLISHED_BLACKSTONE_BRICKS("cracked polished blackstone bricks"), - CRIMSON_BUTTON("crimson button"), - CRIMSON_DOOR("crimson door"), - CRIMSON_FENCE("crimson fence"), - CRIMSON_FENCE_GATE("crimson fence gate"), - CRIMSON_FUNGUS("crimson fungus"), - CRIMSON_HYPHAE("crimson hyphae"), - CRIMSON_NYLIUM("crimson nylium"), - CRIMSON_PLANKS("crimson planks"), - CRIMSON_PRESSURE_PLATE("crimson pressure plate"), - CRIMSON_ROOTS("crimson roots"), - CRIMSON_SIGN("crimson sign"), - CRIMSON_SLAB("crimson slab"), - CRIMSON_STAIRS("crimson stairs"), - CRIMSON_STEM("crimson stem"), - CRIMSON_TRAPDOOR("crimson trapdoor"), - CRIMSON_WALL_SIGN("crimson wall sign"), - CRYING_OBSIDIAN("crying obsidian"), - GILDED_BLACKSTONE("gilded blackstone"), - HOGLIN_SPAWN_EGG("hoglin spawn egg"), - LODESTONE("lodestone"), - MUSIC_DISC_PIGSTEP("music disc pigstep"), - NETHERITE_AXE("netherite axe"), - NETHERITE_BLOCK("netherite block"), - NETHERITE_BOOTS("netherite boots"), - NETHERITE_CHESTPLATE("netherite chestplate"), - NETHERITE_HELMET("netherite helmet"), - NETHERITE_HOE("netherite hoe"), - NETHERITE_INGOT("netherite ingot"), - NETHERITE_LEGGINGS("netherite leggings"), - NETHERITE_PICKAXE("netherite pickaxe"), - NETHERITE_SCRAP("netherite scrap"), - NETHERITE_SHOVEL("netherite shovel"), - NETHERITE_SWORD("netherite sword"), - NETHER_GOLD_ORE("nether gold ore"), - NETHER_SPROUTS("nether sprouts"), - PIGLIN_BANNER_PATTERN("piglin banner pattern"), - PIGLIN_SPAWN_EGG("piglin spawn egg"), - POLISHED_BASALT("polished basalt"), - POLISHED_BLACKSTONE("polished blackstone"), - POLISHED_BLACKSTONE_BRICKS("polished blackstone bricks"), - POLISHED_BLACKSTONE_BRICK_SLAB("polished blackstone brick slab"), - POLISHED_BLACKSTONE_BRICK_STAIRS("polished blackstone brick stairs"), - POLISHED_BLACKSTONE_BRICK_WALL("polished blackstone brick wall"), - POLISHED_BLACKSTONE_BUTTON("polished blackstone button"), - POLISHED_BLACKSTONE_PRESSURE_PLATE("polished blackstone pressure plate"), - POLISHED_BLACKSTONE_SLAB("polished blackstone slab"), - POLISHED_BLACKSTONE_STAIRS("polished blackstone stairs"), - POLISHED_BLACKSTONE_WALL("polished blackstone wall"), - POTTED_CRIMSON_FUNGUS("potted crimson fungus"), - POTTED_CRIMSON_ROOTS("potted crimson roots"), - POTTED_WARPED_FUNGUS("potted warped fungus"), - POTTED_WARPED_ROOTS("potted warped roots"), - QUARTZ_BRICKS("quartz bricks"), - RESPAWN_ANCHOR("respawn anchor"), - SHROOMLIGHT("shroomlight"), - SOUL_CAMPFIRE("soul campfire"), - SOUL_FIRE("soul fire"), - SOUL_LANTERN("soul lantern"), - SOUL_SOIL("soul soil"), - SOUL_TORCH("soul torch"), - SOUL_WALL_TORCH("soul wall torch"), - STRIDER_SPAWN_EGG("strider spawn egg"), - STRIPPED_CRIMSON_HYPHAE("stripped crimson hyphae"), - STRIPPED_CRIMSON_STEM("stripped crimson stem"), - STRIPPED_WARPED_HYPHAE("stripped warped hyphae"), - STRIPPED_WARPED_STEM("stripped warped stem"), - TARGET("target"), - TWISTING_VINES("twisting vines"), - TWISTING_VINES_PLANT("twisting vines plant"), - WARPED_BUTTON("warped button"), - WARPED_DOOR("warped door"), - WARPED_FENCE("warped fence"), - WARPED_FENCE_GATE("warped fence gate"), - WARPED_FUNGUS("warped fungus"), - WARPED_FUNGUS_ON_A_STICK("warped fungus on a stick"), - WARPED_HYPHAE("warped hyphae"), - WARPED_NYLIUM("warped nylium"), - WARPED_PLANKS("warped planks"), - WARPED_PRESSURE_PLATE("warped pressure plate"), - WARPED_ROOTS("warped roots"), - WARPED_SIGN("warped sign"), - WARPED_SLAB("warped slab"), - WARPED_STAIRS("warped stairs"), - WARPED_STEM("warped stem"), - WARPED_TRAPDOOR("warped trapdoor"), - WARPED_WALL_SIGN("warped wall sign"), - WARPED_WART_BLOCK("warped wart block"), - WEEPING_VINES("weeping vines"), - WEEPING_VINES_PLANT("weeping vines plant"), - ZOGLIN_SPAWN_EGG("zoglin spawn egg"), - ZOMBIFIED_PIGLIN_SPAWN_EGG("zombified piglin spawn egg"), + //1.16.1 + ANCIENT_DEBRIS("Ancient Debris"), + BASALT("Basalt"), + BLACKSTONE("Blackstone"), + BLACKSTONE_SLAB("Blackstone Slab"), + BLACKSTONE_STAIRS("Blackstone Stairs"), + BLACKSTONE_WALL("Blackstone Wall"), + CHAIN("Chain"), + CHISELED_NETHER_BRICKS("Chiseled Nether Bricks"), + CHISELED_POLISHED_BLACKSTONE("Chiseled Polished Blackstone"), + CRACKED_NETHER_BRICKS("Cracked Nether Bricks"), + CRACKED_POLISHED_BLACKSTONE_BRICKS("Cracked Polished Blackstone Bricks"), + CRIMSON_BUTTON("Crimson Button"), + CRIMSON_DOOR("Crimson Door"), + CRIMSON_FENCE("Crimson Fence"), + CRIMSON_FENCE_GATE("Crimson Fence Gate"), + CRIMSON_FUNGUS("Crimson Fungus"), + CRIMSON_HYPHAE("Crimson Hyphae"), + CRIMSON_NYLIUM("Crimson Nylium"), + CRIMSON_PLANKS("Crimson Planks"), + CRIMSON_PRESSURE_PLATE("Crimson Pressure Plate"), + CRIMSON_ROOTS("Crimson Roots"), + CRIMSON_SIGN("Crimson Sign"), + CRIMSON_SLAB("Crimson Slab"), + CRIMSON_STAIRS("Crimson Stairs"), + CRIMSON_STEM("Crimson Stem"), + CRIMSON_TRAPDOOR("Crimson Trapdoor"), + CRIMSON_WALL_SIGN("Crimson Wall Sign"), + CRYING_OBSIDIAN("Crying Obsidian"), + GILDED_BLACKSTONE("Gilded Blackstone"), + HOGLIN_SPAWN_EGG("Hoglin Spawn Egg"), + LODESTONE("Lodestone"), + MUSIC_DISC_PIGSTEP("Music Disc Pigstep"), + NETHERITE_AXE("Netherite Axe"), + NETHERITE_BLOCK("Netherite Block", "netherite"), + NETHERITE_BOOTS("Netherite Boots"), + NETHERITE_CHESTPLATE("Netherite Chestplate"), + NETHERITE_HELMET("Netherite Helmet"), + NETHERITE_HOE("Netherite Hoe"), + NETHERITE_INGOT("Netherite Ingot"), + NETHERITE_LEGGINGS("Netherite Leggings"), + NETHERITE_PICKAXE("Netherite Pickaxe"), + NETHERITE_SCRAP("Netherite Scrap"), + NETHERITE_SHOVEL("Netherite Shovel"), + NETHERITE_SWORD("Netherite Sword"), + NETHER_GOLD_ORE("Nether Gold Ore"), + NETHER_SPROUTS("Nether Sprouts"), + PIGLIN_BANNER_PATTERN("Piglin Banner Pattern"), + PIGLIN_SPAWN_EGG("Piglin Spawn Egg"), + POLISHED_BASALT("Polished Basalt"), + POLISHED_BLACKSTONE("Polished Blackstone"), + POLISHED_BLACKSTONE_BRICKS("Polished Blackstone Bricks"), + POLISHED_BLACKSTONE_BRICK_SLAB("Polished Blackstone Brick Slab"), + POLISHED_BLACKSTONE_BRICK_STAIRS("Polished Blackstone Brick Stairs"), + POLISHED_BLACKSTONE_BRICK_WALL("Polished Blackstone Brick Wall"), + POLISHED_BLACKSTONE_BUTTON("Polished Blackstone Button"), + POLISHED_BLACKSTONE_PRESSURE_PLATE("Polished Blackstone Pressure Plate"), + POLISHED_BLACKSTONE_SLAB("Polished Blackstone Slab"), + POLISHED_BLACKSTONE_STAIRS("Polished Blackstone Stairs"), + POLISHED_BLACKSTONE_WALL("Polished Blackstone Wall"), + POTTED_CRIMSON_FUNGUS("Potted Crimson Fungus"), + POTTED_CRIMSON_ROOTS("Potted Crimson Roots"), + POTTED_WARPED_FUNGUS("Potted Warped Fungus"), + POTTED_WARPED_ROOTS("Potted Warped Roots"), + QUARTZ_BRICKS("Quartz Bricks"), + RESPAWN_ANCHOR("Respawn Anchor"), + SHROOMLIGHT("Shroomlight"), + SOUL_CAMPFIRE("Soul Campfire"), + SOUL_FIRE("Soul Fire"), + SOUL_LANTERN("Soul Lantern"), + SOUL_SOIL("Soul Soil"), + SOUL_TORCH("Soul Torch"), + SOUL_WALL_TORCH("Soul Wall Torch"), + STRIDER_SPAWN_EGG("Strider Spawn Egg"), + STRIPPED_CRIMSON_HYPHAE("Stripped Crimson Hyphae"), + STRIPPED_CRIMSON_STEM("Stripped Crimson Stem"), + STRIPPED_WARPED_HYPHAE("Stripped Warped Hyphae"), + STRIPPED_WARPED_STEM("Stripped Warped Stem"), + TARGET("Target"), + TWISTING_VINES("Twisting Vines"), + TWISTING_VINES_PLANT("Twisting Vines Plant"), + WARPED_BUTTON("Warped Button"), + WARPED_DOOR("Warped Door"), + WARPED_FENCE("Warped Fence"), + WARPED_FENCE_GATE("Warped Fence Gate"), + WARPED_FUNGUS("Warped Fungus"), + WARPED_FUNGUS_ON_A_STICK("Warped Fungus On A Stick"), + WARPED_HYPHAE("Warped Hyphae"), + WARPED_NYLIUM("Warped Nylium"), + WARPED_PLANKS("Warped Planks"), + WARPED_PRESSURE_PLATE("Warped Pressure Plate"), + WARPED_ROOTS("Warped Roots"), + WARPED_SIGN("Warped Sign"), + WARPED_SLAB("Warped Slab"), + WARPED_STAIRS("Warped Stairs"), + WARPED_STEM("Warped Stem"), + WARPED_TRAPDOOR("Warped Trapdoor"), + WARPED_WALL_SIGN("Warped Wall Sign", "Warped Wall"), + WARPED_WART_BLOCK("Warped Wart Block", "Warped Wart"), + WEEPING_VINES("Weeping Vines"), + WEEPING_VINES_PLANT("Weeping Vines Plant"), + ZOGLIN_SPAWN_EGG("Zoglin Spawn Egg"), + ZOMBIFIED_PIGLIN_SPAWN_EGG("Zombified Piglin Spawn Egg"), + + // 1.16.2 + PIGLIN_BRUTE_SPAWN_EGG("Piglin Brute Spawn Egg"), // Legacy LEGACY_STATIONARY_WATER(9, 0, null, "Stationary Water"), @@ -1161,6 +1164,7 @@ public enum CMIMaterial { LEGACY_CAKE_BLOCK(92, 0, null, "Cake Block"), LEGACY_DIODE_BLOCK_OFF(93, 0, null, "Diode Block Off"), LEGACY_DIODE_BLOCK_ON(94, 0, null, "Diode Block On"), + LEGACY_MELON_BLOCK(103, 0, null, "Melon Block"), // LEGACY_BREWING_STAND(117, null, null, "LEGACY_BREWING_STAND", ""), // LEGACY_CAULDRON(118, 0, null, "LEGACY_CAULDRON", ""), @@ -1179,6 +1183,8 @@ public enum CMIMaterial { LEGACY_JUNGLE_DOOR(195, 0, null, "Jungle Door Block"), LEGACY_ACACIA_DOOR(196, 0, null, "Acacia Door Block"), LEGACY_DARK_OAK_DOOR(197, 0, null, "Dark Oak Door Block"), + LEGACY_GLOWING_REDSTONE_ORE(74, 0, null, "Glowing Redstone Ore"), + LEGACY_BREWING_STAND(117, null, null, "LEGACY_BREWING_STAND"), // LEGACY_PURPUR_DOUBLE_SLAB(204, null, null, "LEGACY_PURPUR_DOUBLE_SLAB", ""), // LEGACY_COMMAND_REPEATING(210, null, null, "LEGACY_COMMAND_REPEATING", ""), // LEGACY_COMMAND_CHAIN(211, null, null, "LEGACY_COMMAND_CHAIN", ""), @@ -2159,6 +2165,28 @@ public boolean isTool() { return false; } + public static boolean isPickaxe(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isPickaxe(); + } + + public boolean isPickaxe() { + switch (this) { + case NETHERITE_PICKAXE: + case DIAMOND_PICKAXE: + case GOLDEN_PICKAXE: + case IRON_PICKAXE: + case STONE_PICKAXE: + case WOODEN_PICKAXE: + return true; + default: + break; + } + return false; + } + public static boolean isValidItem(Material mat) { CMIMaterial m = CMIMaterial.get(mat); if (m == null) @@ -2515,6 +2543,26 @@ public boolean isSkull() { case CREEPER_HEAD: case DRAGON_HEAD: case ZOMBIE_HEAD: + case LEGACY_SKULL: + return true; + default: + break; + } + return false; + } + + public static boolean isPlayerHead(Material mat) { + CMIMaterial m = CMIMaterial.get(mat); + if (m == null) + return false; + return m.isPlayerHead(); + } + + public boolean isPlayerHead() { + switch (this) { + case PLAYER_HEAD: + case LEGACY_SKULL: + case PLAYER_WALL_HEAD: return true; default: break; diff --git a/src/com/bekvon/bukkit/cmiLib/ItemManager.java b/src/com/bekvon/bukkit/cmiLib/ItemManager.java index 9796b56b0..1c42b73f2 100644 --- a/src/com/bekvon/bukkit/cmiLib/ItemManager.java +++ b/src/com/bekvon/bukkit/cmiLib/ItemManager.java @@ -1,16 +1,12 @@ package com.bekvon.bukkit.cmiLib; -import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; -import java.util.List; import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.potion.PotionData; @@ -32,7 +28,6 @@ public HashMap NameMap() { } static { - for (CMIMaterial one : CMIMaterial.values()) { if (one == null) continue; @@ -54,7 +49,8 @@ public HashMap NameMap() { } catch (Exception e) { e.printStackTrace(); } - mojangName = mojangName == null ? mat.toString().replace("_", "").replace(" ", "").toLowerCase() : mojangName.replace("_", "").replace(" ", "").toLowerCase(); + mojangName = mojangName == null ? mat.toString().replace("_", "").replace(" ", "").toLowerCase() + : mojangName.replace("_", "").replace(" ", "").toLowerCase(); if (byName.containsKey(cmiName)) { byName.put(cmiName + ":" + data, one); @@ -100,91 +96,6 @@ public HashMap NameMap() { byRealMaterial.put(mat, one); } -// plugin.consoleMessage("Loaded " + byName2.size() + " " + byId2.size() + " " + byRealMaterial2.size()); - -// for (CMIMaterial one : CMIMaterial.values()) { -// if (one == null) -// continue; -// one.updateMaterial(); -// Material mat = one.getMaterial(); -// -// if (mat == null) { -// continue; -// } -// -// Integer id = one.getId(); -// short data = one.getLegacyData(); -// Integer legacyId = one.getLegacyId(); -// -// String bukkitName = one.name(); -// String mojangName = one.name(); -//// String realName = plugin.getRef().getItemRealName(new ItemStack(mat)); -// try { -// mojangName = plugin.getRef().getItemMinecraftName(new ItemStack(mat)); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// -// mojangName = mojangName == null ? mat.toString() : mojangName; -// CMIItemStack cm = new CMIItemStack(one); -// -// cm.setId(id); -// cm.setData(data > 0 ? data : 0); -// -// cm.setBukkitName(bukkitName); -// cm.setMojangName(mojangName); -// -// byBukkitName.put(bukkitName + ":" + cm.getData(), cm); -// byBukkitName.put(id + ":" + cm.getData(), cm); -// byBukkitName.put(legacyId + ":" + cm.getData(), cm); -// if (!one.getLegacyNames().isEmpty()) { -// byBukkitName.put(one.getLegacyName().toLowerCase().replace("_", "").replace(" ", ""), cm); -// } -// byBukkitName.put(one.name().toLowerCase().replace("_", "").replace(" ", ""), cm); -// -// String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); -// -// if (!byMojangName.containsKey(n)) -// byMojangName.put(n, cm); -// byMaterial.put(one, cm); -// if (!byId.containsKey(id)) -// byId.put(id, cm); -// if (!byId.containsKey(one.getLegacyId())) -// byId.put(one.getLegacyId(), cm); -// if (one.getLegacyData() == 0) -// byId.put(one.getLegacyId(), cm); -// byRealMaterial.put(mat, one); -// } -// -// for (Material one : Material.class.getEnumConstants()) { -// CMIMaterial mat = CMIMaterial.get(one); -// if (mat == CMIMaterial.NONE && !one.toString().startsWith("LEGACY_")) { -// CMIItemStack cm = new CMIItemStack(new ItemStack(one)); -// if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) -// cm.setId(one.getId()); -// cm.setBukkitName(one.name()); -//// String realName = plugin.getRef().getItemRealName(new ItemStack(one)); -// -// if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) -// byBukkitName.put(one.getId() + ":" + cm.getData(), cm); -// byBukkitName.put(one.name().toLowerCase().replace("_", "").replace(" ", ""), cm); -// String mojangName = one.name(); -// try { -// mojangName = plugin.getRef().getItemMinecraftName(new ItemStack(one)); -// } catch (Exception e) { -// } -// mojangName = mojangName == null ? mat.toString() : mojangName; -// cm.setMojangName(mojangName); -// String n = mojangName.toLowerCase().replace("_", "").replace(" ", "").replace("minecraft:", ""); -// if (!byMojangName.containsKey(n)) -// byMojangName.put(n, cm); -// if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) -// if (!byId.containsKey(one.getId())) -// byId.put(one.getId(), cm); -// byRealMaterial.put(one, mat); -// } -// } - } @Deprecated @@ -234,7 +145,7 @@ public CMIItemStack getItem(String name) { String a = name.split("-")[1]; try { amount = Integer.parseInt(a); - } catch (Exception e) { + } catch (NumberFormatException e) { } name = name.split("-")[0]; } @@ -243,7 +154,7 @@ public CMIItemStack getItem(String name) { String a = name.split(">")[1]; try { amount = Integer.parseInt(a); - } catch (Exception e) { + } catch (NumberFormatException e) { } name = name.split(">")[0]; } @@ -301,6 +212,8 @@ public CMIItemStack getItem(String name) { } } + break; + default: break; } @@ -317,100 +230,6 @@ public CMIItemStack getItem(String name) { if (cmat != null && !cmat.equals(CMIMaterial.NONE)) cm = cmat.newCMIItemStack(); -// main: if (cm == null) { -// cm = byBukkitName.get(name); -// if (subdata != null && cm != null) { -// cm = byBukkitName.get(cm.getCMIType() + ":" + subdata); -// if (cm != null) -// break main; -// } -// cm = byBukkitName.get(name); -// -// if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { -// if (cm != null && data != -999) { -// CMIMaterial t = CMIMaterial.get(cm.getCMIType().getLegacyId(), data); -// if (t != null) { -// cm = byMaterial.get(t); -// } -// } -// } -// -// if (data != -999) { -// try { -// cm = byId.get(Integer.parseInt(name)); -// CMIMaterial t = CMIMaterial.get(original); -// if (t != null) { -// cm = this.byMaterial.get(t); -// } -// } catch (Exception e) { -// } -// } -// -// if (cm == null) { -// try { -// cm = byId.get(Integer.parseInt(name)); -// } catch (Exception e) { -// } -// -// if (cm == null) { -// cm = byMojangName.get(name); -// if (cm == null) { -// for (Material one : Material.class.getEnumConstants()) { -// if (one.name().replace("_", "").equalsIgnoreCase(name)) { -// cm = byMaterial.get(CMIMaterial.get(one)); -// break; -// } -// } -// if (cm == null) { -// for (CMIMaterial one : CMIMaterial.values()) { -// if (one.getName().replace(" ", "").equalsIgnoreCase(name)) { -// cm = byMaterial.get(one); -// if (cm != null && data == -999) { -// data = one.getData(); -// } -// break; -// } -// } -// if (cm == null) { -// for (CMIMaterial one : CMIMaterial.values()) { -// if (one.getName().replace(" ", "").toLowerCase().startsWith(name)) { -// cm = byMaterial.get(one); -// if (cm != null && data == -999) { -// data = one.getData(); -// } -// break; -// } -// } -// } -// if (cm == null) { -// for (CMIMaterial one : CMIMaterial.values()) { -// if (one.getName().replace(" ", "").toLowerCase().contains(name)) { -// cm = byMaterial.get(one); -// if (cm != null && data == -999) { -// data = one.getData(); -// } -// break; -// } -// } -// } -// if (cm == null) { -// for (Entry one : byMojangName.entrySet()) { -// if (one.getKey().contains(name)) { -// cm = one.getValue(); -// if (cm != null && data == -999) { -// data = one.getValue().getData(); -// } -// break; -// } -// } -// } -// } -// } -//// } -// } -// } -// } - CMIItemStack ncm = null; if (cm != null) ncm = cm.clone(); @@ -426,8 +245,8 @@ public CMIItemStack getItem(String name) { ncm.setAmount(amount); if (ncm != null && subdata != null) { - - if (ncm.getCMIType().isPotion() || ncm.getCMIType().equals(CMIMaterial.SPLASH_POTION) || ncm.getCMIType().equals(CMIMaterial.TIPPED_ARROW)) { + if (ncm.getCMIType().isPotion() || ncm.getCMIType().equals(CMIMaterial.SPLASH_POTION) + || ncm.getCMIType().equals(CMIMaterial.TIPPED_ARROW)) { Integer d = null; PotionEffectType type = null; Boolean upgraded = false; @@ -439,7 +258,6 @@ public CMIItemStack getItem(String name) { } catch (Exception e) { } try { - String n = (split.length > 0 ? split[0] : subdata).replace("_", ""); for (PotionEffectType one : PotionEffectType.values()) { if (one == null) @@ -451,16 +269,10 @@ public CMIItemStack getItem(String name) { } if (split.length > 1) { - try { - upgraded = Boolean.parseBoolean(split[1]); - } catch (Exception e) { - } + upgraded = Boolean.parseBoolean(split[1]); } if (split.length > 2) { - try { - extended = Boolean.parseBoolean(split[2]); - } catch (Exception e) { - } + extended = Boolean.parseBoolean(split[2]); } ItemStack item = ncm.getItemStack(); if (extended && upgraded) @@ -478,66 +290,10 @@ public CMIItemStack getItem(String name) { return ncm; } - public List getAllRecipes() { - List results = new ArrayList(); - Iterator iter = Bukkit.recipeIterator(); - while (iter.hasNext()) { - Recipe recipe = iter.next(); - results.add(recipe); - } - return results; - } - - public List getRecipesFor(ItemStack result) { - - List results = new ArrayList(); - Iterator iter = Bukkit.recipeIterator(); - while (iter.hasNext()) { - Recipe recipe = iter.next(); - ItemStack stack = recipe.getResult(); - if (stack.getType() != result.getType()) { - continue; - } - if (result.getDurability() == -1 || result.getDurability() == stack.getDurability()) { - results.add(recipe); - } - } - return results; - } - public Material getMaterial(String name) { CMIItemStack cm = getItem(name); if (cm == null) return Material.AIR; return cm.getType(); } - -// public CMIMaterial getRealName(CMIItemStack item) { -// return getRealName(item, false); -// } -// -// public CMIMaterial getRealName(CMIItemStack item, boolean safe) { -// -//// for (CMIMaterial one : CMIMaterial.values()) { -//// if (one.getId() == item.getId() && one.getDataList().contains(item.getData())) -//// return one; -//// } -//// if (safe) -//// for (CMIMaterial one : CMIMaterial.values()) { -//// if (one.getId() == item.getId()) -//// return one; -//// } -//// return safe ? CMIMaterial.AIR : null; -// return item.getRealName(); -// } - -// private static CMIMaterialLegacy proccessItemName(CMIMaterialLegacy one) { -// if (one.getName().contains("[colorNames]")) -// one.setName(one.getName().replace("[colorNames]", colorNames.getById(one.getData()).getName())); -// else if (one.getName().contains("[entityNames]")) -// one.setName(one.getName().replace("[entityNames]", CMIEntityType.getById(one.getData()).getName())); -// return one; -// } - - } diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessage.java b/src/com/bekvon/bukkit/cmiLib/RawMessage.java index 7b6ebdfc7..d61161378 100644 --- a/src/com/bekvon/bukkit/cmiLib/RawMessage.java +++ b/src/com/bekvon/bukkit/cmiLib/RawMessage.java @@ -116,7 +116,7 @@ else if (format.equals(CMIChatColor.ITALIC)) options.append("\"italic\":true"); else if (format.equals(CMIChatColor.STRIKETHROUGH)) options.append("\"strikethrough\":true"); - else if (format.equals(CMIChatColor.MAGIC)) + else if (format.equals(CMIChatColor.OBFUSCATED)) options.append("\"obfuscated\":true"); } if (!options.toString().isEmpty()) { @@ -149,13 +149,13 @@ else if (format.equals(CMIChatColor.ITALIC)) oldColors.append("&o"); else if (format.equals(CMIChatColor.STRIKETHROUGH)) oldColors.append("&m"); - else if (format.equals(CMIChatColor.MAGIC)) + else if (format.equals(CMIChatColor.OBFUSCATED)) oldColors.append("&k"); } t = oldColors.toString() + t; } - finalText.append("\"text\":\"" + t + "\""); + finalText.append("\"text\":\"" + escape(t, hover ? false : this.isDontBreakLine()) + "\""); } if (finalText.toString().isEmpty()) @@ -247,7 +247,6 @@ public RawMessage addItem(String text, ItemStack item, String command, String su } public RawMessage addText(String text) { -// CMIDebug.c(text); if (text == null || text.isEmpty()) return this; if (temp.containsKey(RawMessagePartType.Text)) @@ -256,7 +255,7 @@ public RawMessage addText(String text) { // if (this.isDontBreakLine()) { onlyText.add(CMIChatColor.translate(text)); - text = escape(text, this.isDontBreakLine()); +// text = escape(text, this.isDontBreakLine()); // } text = textIntoJson(text, false); String f = ""; @@ -287,9 +286,8 @@ public RawMessage addHover(String hover) { if (hover == null || hover.isEmpty()) return this; - hover = escape(hover, false); - hover = textIntoJson(hover, true); +// hover = escape(hover, false); String f = ""; if (hover.isEmpty()) f = "\"text\":\"\""; @@ -306,7 +304,8 @@ public RawMessage addCommand(String command) { return this; if (!command.startsWith("/")) command = "/" + command; - String f = "\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + CMIChatColor.deColorize(command) + "\"}"; + command = escape(command, true); + String f = "\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + CMIChatColor.deColorize(command).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "\"}"; temp.put(RawMessagePartType.ClickCommand, f); return this; } @@ -315,7 +314,7 @@ public RawMessage addSuggestion(String suggestion) { if (suggestion == null || suggestion.isEmpty()) return this; suggestion = escape(suggestion, true); - String f = "\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}"; + String f = "\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "\"}"; temp.put(RawMessagePartType.ClickSuggestion, f); return this; } @@ -324,7 +323,7 @@ public RawMessage addInsertion(String insertion) { if (insertion == null || insertion.isEmpty()) return this; insertion = escape(insertion, true); - String f = "\"insertion\":\"" + CMIChatColor.deColorize(insertion) + "\""; + String f = "\"insertion\":\"" + CMIChatColor.deColorize(insertion).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "\""; temp.put(RawMessagePartType.ClickInsertion, f); return this; } @@ -344,7 +343,8 @@ public RawMessage addUrl(String url) { if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://")) url = "http://" + url; - String f = "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}"; + + String f = "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + CMIChatColor.deColorize(url).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "\"}"; temp.put(RawMessagePartType.ClickLink, f); return this; @@ -379,7 +379,7 @@ private static String escape(String s, boolean escapeNewLn) { escape(s, sb); if (escapeNewLn) return sb.toString().replace(nl, "\\\\n"); - return sb.toString().replace(nl, "\n"); + return sb.toString().replace(nl, "\\n"); } private static final String nl = "\u00A5n"; @@ -398,11 +398,7 @@ private static void escape(String s, StringBuffer sb) { sb.append("\\n"); break; case '\\': -// if (escapeNewLn) { sb.append("\\\\"); -// } else { -// sb.append("\\"); -// } break; case '\b': sb.append("\\b"); @@ -547,7 +543,7 @@ public RawMessage show(CommandSender sender) { if (sender instanceof Player) { show((Player) sender); } else { - sender.sendMessage(CMIChatColor.translate(this.combineClean().combinedClean)); + sender.sendMessage(this.combineClean().combinedClean); } return this; } diff --git a/src/com/bekvon/bukkit/cmiLib/TitleMessageManager.java b/src/com/bekvon/bukkit/cmiLib/TitleMessageManager.java index 352e4874c..a00c38ef4 100644 --- a/src/com/bekvon/bukkit/cmiLib/TitleMessageManager.java +++ b/src/com/bekvon/bukkit/cmiLib/TitleMessageManager.java @@ -79,9 +79,7 @@ public void run() { case v1_13_R1: case v1_13_R2: case v1_14_R1: - case v1_14_R2: case v1_15_R1: - case v1_15_R2: case v1_16_R1: default: receivingPacket.sendTitle(t, s, fadeIn, keep, fadeOut); diff --git a/src/com/bekvon/bukkit/cmiLib/Version.java b/src/com/bekvon/bukkit/cmiLib/Version.java index 13e3fcab0..1b0446c3e 100644 --- a/src/com/bekvon/bukkit/cmiLib/Version.java +++ b/src/com/bekvon/bukkit/cmiLib/Version.java @@ -17,15 +17,22 @@ public enum Version { v1_12_R1, v1_13_R1, v1_13_R2, - v1_13_R3, v1_14_R1, - v1_14_R2, v1_15_R1, - v1_15_R2, v1_16_R1, v1_16_R2, v1_17_R1, - v1_17_R2; + v1_17_R2, + v1_18_R1, + v1_18_R2, + v1_19_R1, + v1_19_R2, + v1_20_R1, + v1_20_R2, + v1_21_R1, + v1_21_R2, + v1_22_R1, + v1_22_R2; private Integer value; private String shortVersion; From dbd937cc10debd4f0c18e3403337e5f8eadf7e32 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 13 Aug 2020 14:48:57 +0300 Subject: [PATCH 0775/1142] Allowing to define max height for nether world --- .../bekvon/bukkit/residence/ConfigManager.java | 13 ++++++++++++- .../residence/permissions/PermissionGroup.java | 2 +- .../residence/selection/SelectionManager.java | 2 +- src/com/bekvon/bukkit/residence/utils/Utils.java | 16 ---------------- src/groups.yml | 4 ++-- 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 08cd91e6d..4b84e842c 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -178,6 +178,7 @@ public class ConfigManager { protected boolean OfflineMode = false; protected boolean SelectionIgnoreY = false; protected boolean SelectionIgnoreYInSubzone = false; + private int SelectionNetherHeight = 128; protected boolean NoCostForYBlocks = false; protected boolean useVisualizer; protected boolean DisableListeners; @@ -563,9 +564,15 @@ public void UpdateConfigFile() { "When this set to true, selections inside existing residence will be from bottom to top of that residence", "When this set to false, selections inside existing residence will be exactly as they are"); SelectionIgnoreYInSubzone = c.get("Global.Selection.IgnoreYInSubzone", false); + + + c.addComment("Global.Selection.netherHeight", + "Defines height of nether when creating residences. This mostly applies when performing commands like /res select vert or /res auto which will expand residence to defined height","This cant be higher than 255 or lower than 1"); + SelectionNetherHeight = c.get("Global.Selection.netherHeight", 128); + SelectionNetherHeight = SelectionNetherHeight > 255 ? 255 : SelectionNetherHeight < 1 ? 1 : SelectionNetherHeight; c.addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", - "This will lower residence price by up to 256 times, so adjust block price BEFORE enabling this"); + "This will lower residence price by up to 255 times, so adjust block price BEFORE enabling this"); NoCostForYBlocks = c.get("Global.Selection.NoCostForYBlocks", false); c.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", @@ -2017,6 +2024,10 @@ public ItemStack getGuiBottonStates(FlagState state) { return guiBottonStates.get(state); } + public int getSelectionNetherHeight() { + return SelectionNetherHeight; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 83594a07a..895267c88 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -119,7 +119,7 @@ private void parseGroup(ConfigurationSection limits) { if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { ymin = 0; - ymax = 256; + ymax = 255; } zmax = limits.getInt("Residence.MaxNorthSouth", 0); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 06a7d33c8..2160ab1b3 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -282,7 +282,7 @@ private int getMaxWorldHeight(World world) { return 255; switch (world.getEnvironment()) { case NETHER: - return 128; + return plugin.getConfigManager().getSelectionNetherHeight(); case NORMAL: case THE_END: return 255; diff --git a/src/com/bekvon/bukkit/residence/utils/Utils.java b/src/com/bekvon/bukkit/residence/utils/Utils.java index fb75ad544..d381872f8 100644 --- a/src/com/bekvon/bukkit/residence/utils/Utils.java +++ b/src/com/bekvon/bukkit/residence/utils/Utils.java @@ -59,22 +59,6 @@ public static String to24hourShort(Long ticks) { return time; } - public static int getMaxWorldHeight(World world) { - if (world == null) - return 256; - - switch (world.getEnvironment()) { - case NETHER: - return 128; - case NORMAL: - case THE_END: - return 256; - default: - break; - } - return 256; - } - public static Block getTargetBlock(Player player, int distance, boolean ignoreNoneSolids) { return getTargetBlock(player, null, distance, ignoreNoneSolids); } diff --git a/src/groups.yml b/src/groups.yml index 20e3c560d..f4b63a909 100644 --- a/src/groups.yml +++ b/src/groups.yml @@ -22,7 +22,7 @@ Groups: # (Optional) The minimum number of blocks a Residence can be, North to South (Z). MinNorthSouth: 3 # The maximum number of blocks a Residence can be, High to Low (Y). - MaxUpDown: 256 + MaxUpDown: 255 # (Optional) The minimum number of blocks a Residence can be, High to Low (Y). MinUpDown: 3 # The lowest altitude this group is allowed to protect. @@ -44,7 +44,7 @@ Groups: # (Optional) The minimum number of blocks a Residence Subzone can be, North to South (Z). SubzoneMinNorthSouth: 3 # (Optional) The maximum number of blocks a Residence Subzone can be, High to Low (Y). - SubzoneMaxUpDown: 256 + SubzoneMaxUpDown: 255 # (Optional) The minimum number of blocks a Residence Subzone can be, High to Low (Y). SubzoneMinUpDown: 3 # Whether or not to allow teleporting to Residences. From 78ccc33624ec431d4115e7552598647a7824e09b Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 13 Aug 2020 15:57:58 +0300 Subject: [PATCH 0776/1142] Updating API for general player actions --- .../residence/containers/ResidencePlayer.java | 31 +++++ .../listeners/ResidenceBlockListener.java | 93 +++++++------ .../listeners/ResidenceEntityListener.java | 127 +++++++++++++++++- .../slimeFun/SlimeFunResidenceModule.java | 2 +- 4 files changed, 208 insertions(+), 45 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 836929804..e7e1b54cd 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -10,11 +10,16 @@ import java.util.UUID; import org.bukkit.Bukkit; +import org.bukkit.Location; import org.bukkit.OfflinePlayer; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.BossBar.BossBarInfo; +import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; +import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -530,4 +535,30 @@ public void setJoinedRaid(ResidenceRaid raid) { public PlayerGroup getGroups() { return groups; } + + @Deprecated + public boolean canBreakBlock(Location loc, boolean inform) { + return canBreakBlock(loc.getBlock(), inform); + } + + public boolean canBreakBlock(Block block, boolean inform) { + return ResidenceBlockListener.canBreakBlock(this.getPlayer(), block, inform); + } + + @Deprecated + public boolean canPlaceBlock(Location loc, boolean inform) { + return canPlaceBlock(loc.getBlock(), inform); + } + + public boolean canPlaceBlock(Block block, boolean inform) { + return ResidenceBlockListener.canPlaceBlock(this.getPlayer(), block, inform); + } + + public boolean canDamageEntity(Entity entity, boolean inform) { + return ResidenceEntityListener.canDamageEntity(this.getPlayer(), entity, inform); + } + +// public boolean canDamagePlayer(Player player, boolean inform) { +// +// } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index e0adde113..c175d8bb0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -187,18 +187,20 @@ public void onTreeGrow(StructureGrowEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { - if (cancelBlockBreak(event.getPlayer(), event.getBlock())) + if (!canBreakBlock(event.getPlayer(), event.getBlock(), true)) event.setCancelled(true); } + public static boolean canBreakBlock(Player player, Block block, boolean inform) { - public static boolean cancelBlockBreak(Player player, Block block) { + if (player == null) + return true; // disabling event on world if (Residence.getInstance().isDisabledWorldListener(block.getWorld())) - return false; + return true; if (Residence.getInstance().isResAdminOn(player)) { - return false; + return true; } Material mat = block.getType(); @@ -207,18 +209,19 @@ public static boolean cancelBlockBreak(Player player, Block block) { ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = resPlayer.getGroup(); if (Residence.getInstance().getItemManager().isIgnored(mat, group, world)) { - return false; + return true; } ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(block.getLocation()); if (res != null && res.getItemIgnoreList().isListed(mat)) - return false; + return true; if (Residence.getInstance().getConfigManager().enabledRentSystem() && res != null) { if (Residence.getInstance().getConfigManager().preventRentModify() && res.isRented()) { - Residence.getInstance().msg(player, lm.Rent_ModifyDeny); - return true; + if (inform) + Residence.getInstance().msg(player, lm.Rent_ModifyDeny); + return false; } } @@ -232,15 +235,16 @@ public static boolean cancelBlockBreak(Player player, Block block) { } } - if (!hasdestroy - && !ResPerm.bypass_destroy.hasPermission(player, 10000L)) { - Residence.getInstance().msg(player, lm.Flag_Deny, Flags.destroy); - return true; + if (!hasdestroy && !ResPerm.bypass_destroy.hasPermission(player, 10000L)) { + if (inform) + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.destroy); + return false; } else if (mat == Material.CHEST && !perms.playerHas(player, Flags.container, true)) { - Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container); - return true; + if (inform) + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container); + return false; } - return false; + return true; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -605,37 +609,43 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { + + if (!canPlaceBlock(event.getPlayer(), event.getBlock(), true)) + event.setCancelled(true); + } + + public static boolean canPlaceBlock(Player player, Block block, boolean informPlayer) { // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) { - return; + if (Residence.getInstance().isDisabledWorldListener(block.getWorld())) + return true; + + if (Residence.getInstance().isResAdminOn(player)) { + return true; } - Block block = event.getBlock(); + Material mat = block.getType(); String world = block.getWorld().getName(); - ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = resPlayer.getGroup(); - if (plugin.getItemManager().isIgnored(mat, group, world)) { - return; + if (Residence.getInstance().getItemManager().isIgnored(mat, group, world)) { + return true; } - ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - if (plugin.getConfigManager().enabledRentSystem() && res != null) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(block.getLocation()); + if (Residence.getInstance().getConfigManager().enabledRentSystem() && res != null) { String resname = res.getName(); - if (plugin.getConfigManager().preventRentModify() && plugin.getRentManager().isRented(resname)) { - plugin.msg(player, lm.Rent_ModifyDeny); - event.setCancelled(true); - return; + if (Residence.getInstance().getConfigManager().preventRentModify() && Residence.getInstance().getRentManager().isRented(resname)) { + if (informPlayer) + Residence.getInstance().msg(player, lm.Rent_ModifyDeny); + return false; } } if (res != null && !res.getItemBlacklist().isAllowed(mat)) { - plugin.msg(player, lm.General_ItemBlacklisted); - event.setCancelled(true); - return; + if (informPlayer) + Residence.getInstance().msg(player, lm.General_ItemBlacklisted); + return false; } - FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(block.getLocation(), player); boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); if (res != null && res.isUnderRaid()) { @@ -646,25 +656,26 @@ public void onBlockPlace(BlockPlaceEvent event) { if (!hasplace && !ResPerm.bypass_build.hasPermission(player, 10000L)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.place); - return; + if (informPlayer) + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.place); + return false; } if (CMIMaterial.isBed(mat)) { CMIBlock cb = new CMIBlock(block); Block sec = cb.getSecondaryBedBlock(); if (sec != null) { - perms = plugin.getPermsByLocForPlayer(sec.getLocation(), player); + perms = Residence.getInstance().getPermsByLocForPlayer(sec.getLocation(), player); hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); if (!hasplace && !ResPerm.bypass_build.hasPermission(player, 10000L)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.place); - return; + if (informPlayer) + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.place); + return false; } } } + return true; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 4538b5af5..a79691e09 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -61,6 +61,7 @@ import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -1359,6 +1360,126 @@ public void onEntityShootBowEvent(EntityShootBowEvent event) { event.getProjectile().setMetadata(CrossbowShooter, new FixedMetadataValue(plugin, event.getEntity().getUniqueId())); } + public static boolean canDamageEntity(Entity damager, Entity victim, boolean inform) { + + boolean tamedAnimal = isTamed(victim); + ClaimedResidence area = Residence.getInstance().getResidenceManager().getByLoc(victim.getLocation()); + + if (area != null && victim instanceof Player && damager instanceof Player) { + if (area.getPermissions().has(Flags.overridepvp, false) || Residence.getInstance().getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, + FlagCombo.OnlyFalse)) { + return false; + } + } + + ClaimedResidence srcarea = null; + if (damager != null) { + srcarea = Residence.getInstance().getResidenceManager().getByLoc(damager.getLocation()); + } + boolean srcpvp = true; + boolean allowSnowBall = false; + boolean isSnowBall = false; + boolean isOnFire = false; + if (srcarea != null) { + srcpvp = srcarea.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone); + } + +// ent = attackevent.getEntity(); + if ((victim instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) + .getShooter() instanceof Player))) || damager instanceof Firework) { + + Player attacker = null; + if (damager instanceof Player) { + attacker = (Player) damager; + } else if (damager instanceof Projectile) { + Projectile project = (Projectile) damager; + if (project.getType() == EntityType.SNOWBALL && srcarea != null) { + isSnowBall = true; + allowSnowBall = srcarea.getPermissions().has(Flags.snowball, FlagCombo.TrueOrNone); + } + if (project.getFireTicks() > 0) + isOnFire = true; + + attacker = (Player) ((Projectile) damager).getShooter(); + } else if (damager instanceof Firework) { + List meta = damager.getMetadata(CrossbowShooter); + if (meta != null && !meta.isEmpty()) { + try { + String uid = meta.get(0).asString(); + attacker = Bukkit.getPlayer(UUID.fromString(uid)); + } catch (Throwable e) { + } + } + } + + if (!(victim instanceof Player)) + return true; + + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.isUnderRaid() && area.getRaid().onSameTeam(attacker, (Player) victim) + && !ConfigManager.RaidFriendlyFire) { + return false; + } + + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.isUnderRaid() && !area.getRaid().onSameTeam(attacker, (Player) victim)) { + return true; + } + + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && + srcarea.getPermissions().playerHas((Player) victim, Flags.friendlyfire, FlagCombo.OnlyFalse) && + srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { + + ActionBarManager.send(attacker, Residence.getInstance().getLM().getMessage(lm.General_NoFriendlyFire)); + if (isOnFire) + victim.setFireTicks(0); + return false; + } + + if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { + if (attacker != null && inform) + Residence.getInstance().msg(attacker, lm.General_NoPVPZone); + if (isOnFire) + victim.setFireTicks(0); + return false; + } + + /* Check for Player vs Player */ + if (area == null) { + /* World PvP */ + if (damager != null) + if (!Residence.getInstance().getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, FlagCombo.TrueOrNone)) { + if (attacker != null && inform) + Residence.getInstance().msg(attacker, lm.General_WorldPVPDisabled); + return false; + } + + /* Attacking from safe zone */ + if (attacker != null) { + FlagPermissions aPerm = Residence.getInstance().getPermsByLoc(attacker.getLocation()); + if (!aPerm.has(Flags.pvp, FlagCombo.TrueOrNone)) { + if (inform) + Residence.getInstance().msg(attacker, lm.General_NoPVPZone); + return false; + } + } + } else { + /* Normal PvP */ + if (!isSnowBall && !area.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone) || isSnowBall && !allowSnowBall) { + if (attacker != null) + if (inform) + Residence.getInstance().msg(attacker, lm.General_NoPVPZone); + return false; + } + } + return true; + } else if ((victim instanceof Player || tamedAnimal) && (damager instanceof Creeper)) { + if (area == null && !Residence.getInstance().getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.creeper, true) || area != null && !area.getPermissions().has(Flags.creeper, + true)) { + return false; + } + } + return true; + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamage(EntityDamageEvent event) { // disabling event on world @@ -1378,7 +1499,7 @@ public void onEntityDamage(EntityDamageEvent event) { if (area != null && ent instanceof Player && damager instanceof Player) { if (area.getPermissions().has(Flags.overridepvp, false) || plugin.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, FlagCombo.OnlyFalse)) { - Player player = (Player) event.getEntity(); + Player player = (Player) ent; Damageable damage = player; damage.damage(event.getDamage()); damage.setVelocity(damager.getLocation().getDirection()); @@ -1425,8 +1546,8 @@ public void onEntityDamage(EntityDamageEvent event) { } catch (Throwable e) { } } - } - + } + if (!(ent instanceof Player)) return; diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index 38e3842bd..9d9ee3774 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -43,7 +43,7 @@ public boolean hasPermission(OfflinePlayer p, Location l, ProtectableAction acti Player player = Bukkit.getPlayer(p.getUniqueId()); if (player == null) return false; - if (ResidenceBlockListener.cancelBlockBreak(player, l.getBlock())) + if (!ResidenceBlockListener.canBreakBlock(player, l.getBlock(), true)) return false; break; case PLACE_BLOCK: From 6be99abe6b63f392fd583482da134d0f9773dc9d Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 13 Aug 2020 16:15:19 +0300 Subject: [PATCH 0777/1142] Lets allow to exclude default residence flags from info page --- src/com/bekvon/bukkit/residence/ConfigManager.java | 14 ++++++++++++-- .../residence/protection/FlagPermissions.java | 12 ++++++++++-- .../residence/protection/ResidenceManager.java | 4 ++-- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 4b84e842c..57c1a505b 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -85,6 +85,7 @@ public class ConfigManager { protected boolean RentPlayerAutoPay; protected boolean leaseAutoRenew; protected boolean ShortInfoUse; + private boolean InfoExcludeDFlags; protected boolean OnlyLike; protected int RentInformBefore; protected int RentInformDelay; @@ -681,9 +682,13 @@ public void UpdateConfigFile() { FlyLandLocation.setYaw(FlyYaw.floatValue()); } - c.addComment("Global.Optimizations.ShortInfo.Use", + c.addComment("Global.Optimizations.InfoCommand.ShortInformation", "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); - ShortInfoUse = c.get("Global.Optimizations.ShortInfo.Use", true); + ShortInfoUse = c.get("Global.Optimizations.InfoCommand.ShortInformation", c.getC().getBoolean("Global.Optimizations.ShortInfo.Use",true)); + + c.addComment("Global.Optimizations.InfoCommand.ExcludeDefaultFlags", + "When set to true default residence flags set in flags.yml file will get excluded from info command output and will not be shown","If flag gets different state then it will be shown"); + InfoExcludeDFlags = c.get("Global.Optimizations.InfoCommand.ExcludeDefaultFlags", false); // Vote range c.addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); @@ -2028,6 +2033,11 @@ public int getSelectionNetherHeight() { return SelectionNetherHeight; } + public boolean isInfoExcludeDFlags() { + return InfoExcludeDFlags; + } + + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 4de0a87d8..e811d4fcb 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -30,6 +30,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.utils.Debug; public class FlagPermissions { @@ -250,9 +251,9 @@ public static void initValidFlags() { addMaterialToUseFlag(CMIMaterial.CARTOGRAPHY_TABLE.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.FLETCHING_TABLE.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.GRINDSTONE.getMaterial(), Flags.container); - + addMaterialToUseFlag(CMIMaterial.LECTERN.getMaterial(), Flags.use); - + addMaterialToUseFlag(CMIMaterial.LOOM.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.SMITHING_TABLE.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.SMOKER.getMaterial(), Flags.container); @@ -924,6 +925,9 @@ public String listFlags(Integer split) { public String listFlags(Integer split, Integer totalShow) { StringBuilder sbuild = new StringBuilder(); Set> set = cuboidFlags.entrySet(); + + FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); + synchronized (set) { Iterator> it = set.iterator(); int i = -1; @@ -936,6 +940,10 @@ public String listFlags(Integer split, Integer totalShow) { while (it.hasNext()) { Entry next = it.next(); + + if (Residence.getInstance().getConfigManager().isInfoExcludeDFlags() && gRD.cuboidFlags.get(next.getKey()) != null && gRD.cuboidFlags.get(next.getKey()) == next.getValue()) + continue; + String fname = next.getKey(); Flags flag = Flags.getFlag(fname); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 9421cd069..96b1596f0 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -726,12 +726,12 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi if (sender instanceof Player) { RawMessage rm = new RawMessage(); - rm.add(resNameOwner, worldInfo); + rm.addText(resNameOwner).addHover(worldInfo); rm.show(sender); rm.clear(); - rm.add(ResFlagMsg, ResFlagList); + rm.addText(ResFlagMsg).addHover(ResFlagList); rm.show(sender); } else { plugin.msg(sender, resNameOwner); From 9254fd19ff2a2fd254dda593201683e026ead684 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 14 Aug 2020 16:14:56 +0300 Subject: [PATCH 0778/1142] Its 256 and not 255 --- src/com/bekvon/bukkit/residence/Residence.java | 2 -- .../residence/listeners/ResidenceEntityListener.java | 4 ++-- .../residence/listeners/ResidencePlayerListener.java | 3 +-- .../bukkit/residence/permissions/PermissionGroup.java | 6 ++++-- .../bukkit/residence/protection/ClaimedResidence.java | 8 +------- .../bekvon/bukkit/residence/protection/CuboidArea.java | 2 +- .../bukkit/residence/protection/ResidenceManager.java | 2 +- .../bekvon/bukkit/residence/slimeFun/slimeFunManager.java | 2 -- src/plugin.yml | 2 +- 9 files changed, 11 insertions(+), 20 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 5b4f4b6e4..7c6383760 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -132,8 +132,6 @@ import cosine.boseconomy.BOSEconomy; import fr.crafter.tickleman.realeconomy.RealEconomy; import fr.crafter.tickleman.realplugin.RealPlugin; -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectionManager; /** * diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index a79691e09..a96cebc52 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1546,8 +1546,8 @@ public void onEntityDamage(EntityDamageEvent event) { } catch (Throwable e) { } } - } - + } + if (!(ent instanceof Player)) return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index bb205dbf4..ea1c72145 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2276,8 +2276,7 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { Player player = event.getPlayer(); if (player.hasMetadata("NPC")) return; - if (message != null) { - + if (message != null) { Long time = informar.get(player.getUniqueId()); if (time == null || time + 100L < System.currentTimeMillis()) { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 895267c88..22a4629b6 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -119,7 +119,8 @@ private void parseGroup(ConfigurationSection limits) { if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { ymin = 0; - ymax = 255; + // This needs to be 256 to include entire height where 255 and block 0 + ymax = 256; } zmax = limits.getInt("Residence.MaxNorthSouth", 0); @@ -127,7 +128,8 @@ private void parseGroup(ConfigurationSection limits) { zmin = zmin > zmax ? zmax : zmin; minHeight = limits.getInt("Residence.MinHeight", 0); - maxHeight = limits.getInt("Residence.MaxHeight", 255); + // This needs to be 256 to include entire height where 255 and block 0 + maxHeight = limits.getInt("Residence.MaxHeight", 256); tpaccess = limits.getBoolean("Residence.CanTeleport", false); maxSubzones = limits.getInt("Residence.MaxSubzonesInArea", 3); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 78aa795e1..93e75ffe6 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -29,7 +29,6 @@ import com.bekvon.bukkit.cmiLib.TitleMessageManager; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.BossBar.BossBarInfo; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeMessages; @@ -42,10 +41,9 @@ import com.bekvon.bukkit.residence.economy.rent.RentedLand; import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; import com.bekvon.bukkit.residence.event.ResidenceAreaDeleteEvent; -import com.bekvon.bukkit.residence.event.ResidenceRaidEndEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.event.ResidenceRaidPreStartEvent; import com.bekvon.bukkit.residence.event.ResidenceRaidStartEvent; -import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceTPEvent; @@ -55,14 +53,10 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.raid.RaidAttacker; -import com.bekvon.bukkit.residence.raid.RaidDefender; import com.bekvon.bukkit.residence.raid.ResidenceRaid; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.Debug; -import com.bekvon.bukkit.residence.utils.Utils; public class ClaimedResidence { diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index c27c45ecd..a445d003b 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -120,7 +120,7 @@ public long getSize() { int xsize = (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; int zsize = (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; if (!Residence.getInstance().getConfigManager().isNoCostForYBlocks()) { - int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; + int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()); return xsize * ysize * zsize; } return xsize * zsize; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 96b1596f0..402e354af 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -811,7 +811,7 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) if (sender instanceof Player) { RawMessage rm = new RawMessage(); - rm.add(RentedMsg, rentableString.toString()); + rm.addText(RentedMsg).addHover(rentableString.toString()); rm.show(sender); } else plugin.msg(sender, RentedMsg); diff --git a/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java b/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java index 066aad50b..35319f806 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java @@ -33,9 +33,7 @@ public slimeFunManager(Residence plugin) { Bukkit.getScheduler().cancelTask(repeat); } }, 20L, 20L); - } - } } diff --git a/src/plugin.yml b/src/plugin.yml index fdb73f9f2..07f981461 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.1.7 +version: 4.9.1.8 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 9ee85b9882253512b80dd70b41c3aef78c60abee Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 14 Aug 2020 17:09:42 +0300 Subject: [PATCH 0779/1142] Actual groups mirroring --- .../permissions/PermissionGroup.java | 190 +++++++++++------- .../permissions/PermissionManager.java | 7 +- 2 files changed, 123 insertions(+), 74 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 22a4629b6..fab535a9f 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -18,54 +18,54 @@ import org.bukkit.configuration.ConfigurationSection; public class PermissionGroup { - private int xmax; - private int ymax; - private int zmax; + private int xmax = 0; + private int ymax = 0; + private int zmax = 0; - private int xmin; - private int ymin; - private int zmin; + private int xmin = 0; + private int ymin = 0; + private int zmin = 0; - protected int Subzonexmax; - protected int Subzoneymax; - protected int Subzonezmax; + protected int Subzonexmax = 0; + protected int Subzoneymax = 0; + protected int Subzonezmax = 0; - protected int Subzonexmin; - protected int Subzoneymin; - protected int Subzonezmin; + protected int Subzonexmin = 0; + protected int Subzoneymin = 0; + protected int Subzonezmin = 0; - protected int resmax; - private double costperarea; + protected int resmax = 0; + private double costperarea = 0; private double sellperarea = 0; - protected boolean tpaccess; - protected int subzonedepth; - protected int maxSubzones; + protected boolean tpaccess = false; + protected int subzonedepth = 0; + protected int maxSubzones = 3; protected FlagPermissions flagPerms; protected Map creatorDefaultFlags; // protected Map rentedDefaultFlags; protected Map> groupDefaultFlags; protected Map residenceDefaultFlags; - protected boolean messageperms; - protected String defaultEnterMessage; - protected String defaultLeaveMessage; - private int maxLeaseTime; - private int leaseGiveTime; - protected double renewcostperarea; - protected boolean canBuy; - protected boolean canSell; - protected boolean buyIgnoreLimits; - protected boolean cancreate; + protected boolean messageperms = false; + protected String defaultEnterMessage = null; + protected String defaultLeaveMessage = null; + private int maxLeaseTime = 16; + private int leaseGiveTime = 14; + protected double renewcostperarea = 0.02D; + protected boolean canBuy = false; + protected boolean canSell = false; + protected boolean buyIgnoreLimits = false; + protected boolean cancreate = false; protected String groupname; - protected int maxPhysical; - protected boolean unstuck; - protected boolean kick; - protected int minHeight; - protected int maxHeight; - protected int maxRents; + protected int maxPhysical = 2; + protected boolean unstuck = false; + protected boolean kick = false; + protected int minHeight = 0; + protected int maxHeight = 256; + protected int maxRents = 0; protected int MaxRentDays = -1; - protected int maxRentables; - protected boolean selectCommandAccess; - protected boolean itemListAccess; + protected int maxRentables = 0; + protected boolean selectCommandAccess = true; + protected boolean itemListAccess = true; protected int priority = 0; public PermissionGroup(String name) { @@ -101,20 +101,34 @@ public PermissionGroup(String name, ConfigurationSection node, FlagPermissions p this.priority = priority; } + public void mirrorIn(ConfigurationSection limits) { + parseGroup(limits); + } + private void parseGroup(ConfigurationSection limits) { if (limits == null) { return; } - cancreate = limits.getBoolean("Residence.CanCreate", false); - resmax = limits.getInt("Residence.MaxResidences", 0); - maxPhysical = limits.getInt("Residence.MaxAreasPerResidence", 2); + if (limits.contains("Residence.CanCreate")) + cancreate = limits.getBoolean("Residence.CanCreate", false); + + if (limits.contains("Residence.MaxResidences")) + resmax = limits.getInt("Residence.MaxResidences", 0); - xmax = (limits.getInt("Residence.MaxEastWest", 0)); - xmin = (limits.getInt("Residence.MinEastWest", 0)); - xmin = (getXmin() > getXmax() ? getXmax() : getXmin()); + if (limits.contains("Residence.MaxAreasPerResidence")) + maxPhysical = limits.getInt("Residence.MaxAreasPerResidence", 2); - ymax = limits.getInt("Residence.MaxUpDown", 0); - ymin = limits.getInt("Residence.MinUpDown", 0); + if (limits.contains("Residence.MaxEastWest")) + xmax = limits.getInt("Residence.MaxEastWest", 0); + if (limits.contains("Residence.MinEastWest")) + xmin = limits.getInt("Residence.MinEastWest", 0); + + xmin = getXmin() > getXmax() ? getXmax() : getXmin(); + + if (limits.contains("Residence.MaxUpDown")) + ymax = limits.getInt("Residence.MaxUpDown", 0); + if (limits.contains("Residence.MinUpDown")) + ymin = limits.getInt("Residence.MinUpDown", 0); ymin = ymin > ymax ? ymax : ymin; if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { @@ -123,58 +137,88 @@ private void parseGroup(ConfigurationSection limits) { ymax = 256; } - zmax = limits.getInt("Residence.MaxNorthSouth", 0); - zmin = limits.getInt("Residence.MinNorthSouth", 0); + if (limits.contains("Residence.MaxNorthSouth")) + zmax = limits.getInt("Residence.MaxNorthSouth", 0); + if (limits.contains("Residence.MinNorthSouth")) + zmin = limits.getInt("Residence.MinNorthSouth", 0); zmin = zmin > zmax ? zmax : zmin; - minHeight = limits.getInt("Residence.MinHeight", 0); + if (limits.contains("Residence.MinHeight")) + minHeight = limits.getInt("Residence.MinHeight", 0); // This needs to be 256 to include entire height where 255 and block 0 - maxHeight = limits.getInt("Residence.MaxHeight", 256); - tpaccess = limits.getBoolean("Residence.CanTeleport", false); + if (limits.contains("Residence.MaxHeight")) + maxHeight = limits.getInt("Residence.MaxHeight", 256); + + if (limits.contains("Residence.CanTeleport")) + tpaccess = limits.getBoolean("Residence.CanTeleport", false); - maxSubzones = limits.getInt("Residence.MaxSubzonesInArea", 3); + if (limits.contains("Residence.MaxSubzonesInArea")) + maxSubzones = limits.getInt("Residence.MaxSubzonesInArea", 3); - subzonedepth = limits.getInt("Residence.SubzoneDepth", 0); + if (limits.contains("Residence.SubzoneDepth")) + subzonedepth = limits.getInt("Residence.SubzoneDepth", 0); - Subzonexmax = limits.getInt("Residence.SubzoneMaxEastWest", getXmax()); + if (limits.contains("Residence.SubzoneMaxEastWest")) + Subzonexmax = limits.getInt("Residence.SubzoneMaxEastWest", getXmax()); Subzonexmax = getXmax() < Subzonexmax ? getXmax() : Subzonexmax; - Subzonexmin = limits.getInt("Residence.SubzoneMinEastWest", 0); + if (limits.contains("Residence.SubzoneMinEastWest")) + Subzonexmin = limits.getInt("Residence.SubzoneMinEastWest", 0); Subzonexmin = Subzonexmin > Subzonexmax ? Subzonexmax : Subzonexmin; - Subzoneymax = limits.getInt("Residence.SubzoneMaxUpDown", ymax); + if (limits.contains("Residence.SubzoneMaxUpDown")) + Subzoneymax = limits.getInt("Residence.SubzoneMaxUpDown", ymax); Subzoneymax = ymax < Subzoneymax ? ymax : Subzoneymax; - Subzoneymin = limits.getInt("Residence.SubzoneMinUpDown", 0); + if (limits.contains("Residence.SubzoneMinUpDown")) + Subzoneymin = limits.getInt("Residence.SubzoneMinUpDown", 0); Subzoneymin = Subzoneymin > Subzoneymax ? Subzoneymax : Subzoneymin; - Subzonezmax = limits.getInt("Residence.SubzoneMaxNorthSouth", zmax); + if (limits.contains("Residence.SubzoneMaxNorthSouth")) + Subzonezmax = limits.getInt("Residence.SubzoneMaxNorthSouth", zmax); Subzonezmax = zmax < Subzonezmax ? zmax : Subzonezmax; - Subzonezmin = limits.getInt("Residence.SubzoneMinNorthSouth", 0); + if (limits.contains("Residence.SubzoneMinNorthSouth")) + Subzonezmin = limits.getInt("Residence.SubzoneMinNorthSouth", 0); Subzonezmin = Subzonezmin > Subzonezmax ? Subzonezmax : Subzonezmin; - messageperms = limits.getBoolean("Messaging.CanChange", false); - defaultEnterMessage = limits.getString("Messaging.DefaultEnter", null); - defaultLeaveMessage = limits.getString("Messaging.DefaultLeave", null); - maxLeaseTime = limits.getInt("Lease.MaxDays", 16); - leaseGiveTime = limits.getInt("Lease.RenewIncrement", 14); - maxRents = limits.getInt("Rent.MaxRents", 0); + if (limits.contains("Messaging.CanChange")) + messageperms = limits.getBoolean("Messaging.CanChange", false); + if (limits.contains("Messaging.DefaultEnter")) + defaultEnterMessage = limits.getString("Messaging.DefaultEnter", null); + if (limits.contains("Messaging.DefaultLeave")) + defaultLeaveMessage = limits.getString("Messaging.DefaultLeave", null); + if (limits.contains("Lease.MaxDays")) + maxLeaseTime = limits.getInt("Lease.MaxDays", 16); + if (limits.contains("Lease.RenewIncrement")) + leaseGiveTime = limits.getInt("Lease.RenewIncrement", 14); + if (limits.contains("Rent.MaxRents")) + maxRents = limits.getInt("Rent.MaxRents", 0); if (limits.contains("Rent.MaxRentDays")) MaxRentDays = limits.getInt("Rent.MaxRentDays", -1); - maxRentables = limits.getInt("Rent.MaxRentables", 0); - renewcostperarea = limits.getDouble("Economy.RenewCost", 0.02D); - canBuy = limits.getBoolean("Economy.CanBuy", false); - canSell = limits.getBoolean("Economy.CanSell", false); - buyIgnoreLimits = limits.getBoolean("Economy.IgnoreLimits", false); - costperarea = limits.getDouble("Economy.BuyCost", 0); + if (limits.contains("Rent.MaxRentables")) + maxRentables = limits.getInt("Rent.MaxRentables", 0); + if (limits.contains("Economy.RenewCost")) + renewcostperarea = limits.getDouble("Economy.RenewCost", 0.02D); + if (limits.contains("Economy.CanBuy")) + canBuy = limits.getBoolean("Economy.CanBuy", false); + if (limits.contains("Economy.CanSell")) + canSell = limits.getBoolean("Economy.CanSell", false); + if (limits.contains("Economy.IgnoreLimits")) + buyIgnoreLimits = limits.getBoolean("Economy.IgnoreLimits", false); + if (limits.contains("Economy.BuyCost")) + costperarea = limits.getDouble("Economy.BuyCost", 0); if (limits.contains("Economy.SellCost")) sellperarea = limits.getDouble("Economy.SellCost", 0); - unstuck = limits.getBoolean("Residence.Unstuck", false); - kick = limits.getBoolean("Residence.Kick", false); - selectCommandAccess = limits.getBoolean("Residence.SelectCommandAccess", true); - itemListAccess = limits.getBoolean("Residence.ItemListAccess", true); + if (limits.isBoolean("Economy.Unstuck")) + unstuck = limits.getBoolean("Residence.Unstuck", false); + if (limits.contains("Residence.Kick")) + kick = limits.getBoolean("Residence.Kick", false); + if (limits.contains("Residence.SelectCommandAccess")) + selectCommandAccess = limits.getBoolean("Residence.SelectCommandAccess", true); + if (limits.contains("Residence.ItemListAccess")) + itemListAccess = limits.getBoolean("Residence.ItemListAccess", true); ConfigurationSection node = limits.getConfigurationSection("Flags.Permission"); Set flags = null; if (node != null) { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 0febe1c0e..2c0d67bb1 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -189,7 +189,12 @@ private void readConfig() { for (String key : entrys) { try { i++; - groups.put(key.toLowerCase(), new PermissionGroup(key.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms, i)); + + PermissionGroup old = groups.getOrDefault(key.toLowerCase(), new PermissionGroup(key.toLowerCase(), null, globalFlagPerms, i)); + + old.mirrorIn(nodes.getConfigurationSection(key)); + + groups.put(key.toLowerCase(), old); List mirrors = nodes.getConfigurationSection(key).getStringList("Mirror"); for (String group : mirrors) { groups.put(group.toLowerCase(), new PermissionGroup(group.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms, i)); From c9a6104c9e5593c0cac8f117a0e32d68b9fb311d Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 1 Oct 2020 13:08:09 +0300 Subject: [PATCH 0780/1142] Lets initialize permission manager, just in case 3rd party plugin accesses it --- src/com/bekvon/bukkit/residence/Residence.java | 13 ++++++++----- src/com/bekvon/bukkit/residence/gui/FlagData.java | 3 --- src/com/bekvon/bukkit/residence/gui/FlagUtil.java | 3 --- .../bekvon/bukkit/residence/gui/setFlagInfo.java | 1 - src/plugin.yml | 2 +- 5 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 7c6383760..d21706e33 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -532,7 +532,8 @@ public void onEnable() { return; } - gmanager = new PermissionManager(this); + + this.getPermissionManager().startCacheClearScheduler(); imanager = new WorldItemManager(this); @@ -588,8 +589,8 @@ public void onEnable() { case MineConomy: break; case None: - if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { - ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); + if (this.getPermissionManager().getPermissionsPlugin() instanceof ResidenceVaultAdapter) { + ResidenceVaultAdapter vault = (ResidenceVaultAdapter) this.getPermissionManager().getPermissionsPlugin(); if (vault.economyOK()) { economy = vault; consoleMessage("Found Vault using economy system: &5" + vault.getEconomyName()); @@ -618,8 +619,8 @@ public void onEnable() { this.loadRealEconomy(); break; case Vault: - if (gmanager.getPermissionsPlugin() instanceof ResidenceVaultAdapter) { - ResidenceVaultAdapter vault = (ResidenceVaultAdapter) gmanager.getPermissionsPlugin(); + if (this.getPermissionManager().getPermissionsPlugin() instanceof ResidenceVaultAdapter) { + ResidenceVaultAdapter vault = (ResidenceVaultAdapter) this.getPermissionManager().getPermissionsPlugin(); if (vault.economyOK()) { economy = vault; consoleMessage("Found Vault using economy system: &5" + vault.getEconomyName()); @@ -1020,6 +1021,8 @@ public FlagUtil getFlagUtilManager() { } public PermissionManager getPermissionManager() { + if (gmanager == null) + gmanager = new PermissionManager(this); return gmanager; } diff --git a/src/com/bekvon/bukkit/residence/gui/FlagData.java b/src/com/bekvon/bukkit/residence/gui/FlagData.java index 7e4fef1b6..4e999e850 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagData.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagData.java @@ -7,9 +7,6 @@ public class FlagData { private HashMap items = new HashMap(); - public FlagData() { - } - public void addFlagButton(String flag, ItemStack item) { this.items.put(flag, item); } diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 1fbff02ad..222fb1e0e 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -2,7 +2,6 @@ import java.util.Set; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -14,11 +13,9 @@ import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.Debug; public class FlagUtil { diff --git a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java index 30c438559..2c83d53d2 100644 --- a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java +++ b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java @@ -25,7 +25,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.protection.ResidencePermissions; -import com.bekvon.bukkit.residence.utils.Debug; public class setFlagInfo { diff --git a/src/plugin.yml b/src/plugin.yml index 07f981461..6629d11d0 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.1.8 +version: 4.9.1.9 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From f93780c45783fc686a9c8056b9761df111002426 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 1 Oct 2020 13:17:50 +0300 Subject: [PATCH 0781/1142] Error catcher in case SlimeFun fails to load --- src/com/bekvon/bukkit/residence/Residence.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index d21706e33..cb955a81c 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -532,8 +532,6 @@ public void onEnable() { return; } - - this.getPermissionManager().startCacheClearScheduler(); imanager = new WorldItemManager(this); @@ -566,8 +564,13 @@ public void onEnable() { SlimeFun = Bukkit.getPluginManager().getPlugin("Slimefun") != null && Bukkit.getPluginManager().getPlugin("CS-CoreLib") != null; - if (SlimeFun) - new slimeFunManager(this); + if (SlimeFun) { + try { + new slimeFunManager(this); + } catch (Throwable e) { + e.printStackTrace(); + } + } this.getConfigManager().copyOverTranslations(); From 5b685fe8f483b78f9a3a9586902d99d2c1678d01 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 1 Oct 2020 15:36:10 +0300 Subject: [PATCH 0782/1142] Lets not duplicate flags in tabcomplete --- .../bukkit/residence/permissions/PermissionManager.java | 2 +- src/com/bekvon/bukkit/residence/text/help/HelpEntry.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 2c0d67bb1..b85a04a40 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -430,7 +430,7 @@ public boolean hasPermission(CommandSender sender, boolean inform, boolean infor if (!has && inform) { boolean showPerm = ResPerm.permisiononerror.hasPermission(sender, 50000L); RawMessage rm = new RawMessage(); - rm.add(Residence.getInstance().getLM().getMessage(lms == null ? lm.General_NoPermission : lms), showPerm ? perm : null); + rm.addText(Residence.getInstance().getLM().getMessage(lms == null ? lm.General_NoPermission : lms)).addHover(showPerm ? perm : null); rm.show(sender); informConsole(sender, perm, informConsole); diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index af59842e3..75c89b940 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -33,6 +33,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; public class HelpEntry { protected String name; @@ -413,6 +414,10 @@ else if (args[0].equalsIgnoreCase(pset.class.getSimpleName())) mode = FlagMode.Player; } + if(args.length > 1 && Flags.getFlag(args[args.length - 2]) != null) { + continue; + } + for (String one : FlagPermissions.getAllPosibleFlags()) { Flags f = Flags.getFlag(one); From 05ace77e99f2bfd2f66a8149f16045674ebcfa54 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 1 Oct 2020 15:38:13 +0300 Subject: [PATCH 0783/1142] unstuck ignored resadmin --- src/com/bekvon/bukkit/residence/commands/unstuck.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index 2dc040ab1..b5dbebc0f 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -27,7 +27,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); - if (!group.hasUnstuckAccess()) { + if (!group.hasUnstuckAccess() && !plugin.isResAdminOn(player)) { plugin.msg(player, lm.General_NoPermission); return true; } From ed92ff20f7ee087e61a3f7381b09f06031ada253 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 1 Oct 2020 15:57:22 +0300 Subject: [PATCH 0784/1142] Including Hoglin into animal group --- src/com/bekvon/bukkit/cmiLib/ActionBarManager.java | 6 ++++-- src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/ActionBarManager.java b/src/com/bekvon/bukkit/cmiLib/ActionBarManager.java index 201fb0ea8..2488bd20c 100644 --- a/src/com/bekvon/bukkit/cmiLib/ActionBarManager.java +++ b/src/com/bekvon/bukkit/cmiLib/ActionBarManager.java @@ -8,6 +8,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.residence.utils.Debug; + public class ActionBarManager { private static Object packet; private static Method getHandle; @@ -63,9 +65,9 @@ public static void send(Player receivingPacket, String msg) { } RawMessage rm = new RawMessage(); - rm.add(msg); + rm.addText(msg); Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, CMIChatColor.translate(rm.getRaw())); - if (Version.isCurrentHigher(Version.v1_15_R1)) + if (Version.isCurrentEqualOrHigher(Version.v1_16_R1)) packet = packetType.getConstructor(nmsIChatBaseComponent, sub, UUID.class).newInstance(serialized, consts[2], receivingPacket.getUniqueId()); else if (Version.isCurrentHigher(Version.v1_11_R1)) { packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[2]); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java index ce1036fe4..5561259b2 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java @@ -40,6 +40,7 @@ import org.bukkit.entity.Turtle; import org.bukkit.entity.Villager; import org.bukkit.entity.Wolf; +import org.bukkit.entity.Hoglin; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; @@ -90,7 +91,8 @@ public boolean isAnimal(Entity ent) { ent instanceof Panda || ent instanceof Cat || ent instanceof Bee || - ent instanceof Strider); + ent instanceof Strider|| + ent instanceof Hoglin); } @Override From 648a97ce18c3298c9bb099b6f751fa8176d6cc25 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 3 Nov 2020 17:25:23 +0200 Subject: [PATCH 0785/1142] 1.16.4 support --- src/com/bekvon/bukkit/cmiLib/Version.java | 1 + .../bukkit/residence/ConfigManager.java | 22 ++- .../bukkit/residence/allNms/v1_16_R3.java | 163 ++++++++++++++++++ .../protection/ResidencePermissions.java | 3 +- 4 files changed, 180 insertions(+), 9 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_16_R3.java diff --git a/src/com/bekvon/bukkit/cmiLib/Version.java b/src/com/bekvon/bukkit/cmiLib/Version.java index 1b0446c3e..d793abfb6 100644 --- a/src/com/bekvon/bukkit/cmiLib/Version.java +++ b/src/com/bekvon/bukkit/cmiLib/Version.java @@ -21,6 +21,7 @@ public enum Version { v1_15_R1, v1_16_R1, v1_16_R2, + v1_16_R3, v1_17_R1, v1_17_R2, v1_18_R1, diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 57c1a505b..c93d5736c 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -131,6 +131,7 @@ public class ConfigManager { private int VisualizerFrameCap; private int VisualizerSidesCap; protected boolean flagsInherit; + protected boolean ignoreGroupedFlagAcess; protected ChatColor chatColor; protected boolean chatEnable; private ELMessageType EnterLeaveMessageType; @@ -185,6 +186,8 @@ public class ConfigManager { protected boolean DisableListeners; protected boolean DisableCommands; + private boolean ignoreGroupedFlagAccess = false; + //Town // private boolean TownEnabled = false; // private int TownMinRange = 0; @@ -565,10 +568,10 @@ public void UpdateConfigFile() { "When this set to true, selections inside existing residence will be from bottom to top of that residence", "When this set to false, selections inside existing residence will be exactly as they are"); SelectionIgnoreYInSubzone = c.get("Global.Selection.IgnoreYInSubzone", false); - - + c.addComment("Global.Selection.netherHeight", - "Defines height of nether when creating residences. This mostly applies when performing commands like /res select vert or /res auto which will expand residence to defined height","This cant be higher than 255 or lower than 1"); + "Defines height of nether when creating residences. This mostly applies when performing commands like /res select vert or /res auto which will expand residence to defined height", + "This cant be higher than 255 or lower than 1"); SelectionNetherHeight = c.get("Global.Selection.netherHeight", 128); SelectionNetherHeight = SelectionNetherHeight > 255 ? 255 : SelectionNetherHeight < 1 ? 1 : SelectionNetherHeight; @@ -684,11 +687,11 @@ public void UpdateConfigFile() { c.addComment("Global.Optimizations.InfoCommand.ShortInformation", "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); - ShortInfoUse = c.get("Global.Optimizations.InfoCommand.ShortInformation", c.getC().getBoolean("Global.Optimizations.ShortInfo.Use",true)); - + ShortInfoUse = c.get("Global.Optimizations.InfoCommand.ShortInformation", c.getC().getBoolean("Global.Optimizations.ShortInfo.Use", true)); + c.addComment("Global.Optimizations.InfoCommand.ExcludeDefaultFlags", - "When set to true default residence flags set in flags.yml file will get excluded from info command output and will not be shown","If flag gets different state then it will be shown"); - InfoExcludeDFlags = c.get("Global.Optimizations.InfoCommand.ExcludeDefaultFlags", false); + "When set to true default residence flags set in flags.yml file will get excluded from info command output and will not be shown", "If flag gets different state then it will be shown"); + InfoExcludeDFlags = c.get("Global.Optimizations.InfoCommand.ExcludeDefaultFlags", false); // Vote range c.addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); @@ -1729,6 +1732,10 @@ public boolean flagsInherit() { return flagsInherit; } + public boolean isIgnoreGroupedFlagAcess() { + return ignoreGroupedFlagAcess; + } + public boolean chatEnabled() { return chatEnable; } @@ -2037,7 +2044,6 @@ public boolean isInfoExcludeDFlags() { return InfoExcludeDFlags; } - // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_16_R3.java b/src/com/bekvon/bukkit/residence/allNms/v1_16_R3.java new file mode 100644 index 000000000..393132c11 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/allNms/v1_16_R3.java @@ -0,0 +1,163 @@ +package com.bekvon.bukkit.residence.allNms; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Particle.DustOptions; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_16_R3.CraftParticle; +import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Bee; +import org.bukkit.entity.Cat; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Cod; +import org.bukkit.entity.Cow; +import org.bukkit.entity.Dolphin; +import org.bukkit.entity.Donkey; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Fox; +import org.bukkit.entity.Horse; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.Llama; +import org.bukkit.entity.Ocelot; +import org.bukkit.entity.Panda; +import org.bukkit.entity.Parrot; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; +import org.bukkit.entity.PolarBear; +import org.bukkit.entity.PufferFish; +import org.bukkit.entity.Rabbit; +import org.bukkit.entity.Salmon; +import org.bukkit.entity.Sheep; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.Squid; +import org.bukkit.entity.Strider; +import org.bukkit.entity.TropicalFish; +import org.bukkit.entity.Turtle; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; +import org.bukkit.entity.Hoglin; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.cmiLib.CMIEffect; +import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; +import com.bekvon.bukkit.residence.containers.NMS; + +import net.minecraft.server.v1_16_R3.Packet; +import net.minecraft.server.v1_16_R3.PacketPlayOutWorldParticles; + +public class v1_16_R3 implements NMS { + @Override + public List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + blocks.addAll(event.getBlocks()); + return blocks; + } + + @Override + public boolean isAnimal(Entity ent) { + return (ent instanceof Horse || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem || + ent instanceof Ocelot || + ent instanceof Pig || + ent instanceof Sheep || + ent instanceof Chicken || + ent instanceof Wolf || + ent instanceof Cow || + ent instanceof Squid || + ent instanceof Villager || + ent instanceof Rabbit || + ent instanceof Llama || + ent instanceof PolarBear || + ent instanceof Parrot || + ent instanceof Donkey || + ent instanceof Cod || + ent instanceof Salmon || + ent instanceof PufferFish || + ent instanceof TropicalFish || + ent instanceof Turtle || + ent instanceof Dolphin || + ent instanceof Fox || + ent instanceof Panda || + ent instanceof Cat || + ent instanceof Bee || + ent instanceof Strider|| + ent instanceof Hoglin); + } + + @Override + public boolean isArmorStandEntity(EntityType ent) { + return ent == EntityType.ARMOR_STAND; + } + + @Override + public boolean isSpectator(GameMode mode) { + return mode == GameMode.SPECTATOR; + } + + @Override + public boolean isMainHand(PlayerInteractEvent event) { + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + @Override + public ItemStack itemInMainHand(Player player) { + return player.getInventory().getItemInMainHand(); + } + + @Override + public ItemStack itemInOffHand(Player player) { + return player.getInventory().getItemInOffHand(); + } + + @Override + public boolean isChorusTeleport(TeleportCause tpcause) { + if (tpcause == TeleportCause.CHORUS_FRUIT) + return true; + return false; + } + + @Override + public void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null) + return; + + CMIParticle effect = ef.getParticle(); + if (effect == null) + return; + if (!effect.isParticle()) { + return; + } + + org.bukkit.Particle particle = effect.getParticle(); + + if (particle == null) + return; + + DustOptions dd = null; + if (particle.equals(org.bukkit.Particle.REDSTONE)) + dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); + + Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), + (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); + + CraftPlayer cPlayer = (CraftPlayer) player; + if (cPlayer.getHandle().playerConnection == null) + return; + + if (!location.getWorld().equals(cPlayer.getWorld())) + return; + + cPlayer.getHandle().playerConnection.sendPacket(packet); + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 8bd12c060..cb17e8172 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -742,7 +742,8 @@ public boolean setFlagGroup(CommandSender sender, String flaggroup, FlagState st if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); boolean changed = false; - for (String flag : flags) { + + for (String flag : flags) { if (this.setFlag(sender, flag, state, resadmin)) { changed = true; } From 832469ad28d99b005d470d04171d9086a6ee85f5 Mon Sep 17 00:00:00 2001 From: matesssaks Date: Sat, 14 Nov 2020 22:38:03 +0100 Subject: [PATCH 0786/1142] Better Slimefun support --- .../bekvon/bukkit/residence/Residence.java | 6 +- .../slimeFun/SlimeFunResidenceModule.java | 89 ++++++++++--------- .../residence/slimeFun/SlimefunManager.java | 34 +++++++ .../residence/slimeFun/slimeFunManager.java | 39 -------- 4 files changed, 85 insertions(+), 83 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java delete mode 100644 src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index cb955a81c..1eab82663 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -112,7 +112,7 @@ import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopSignUtil; import com.bekvon.bukkit.residence.signsStuff.SignUtil; -import com.bekvon.bukkit.residence.slimeFun.slimeFunManager; +import com.bekvon.bukkit.residence.slimeFun.SlimefunManager; import com.bekvon.bukkit.residence.text.Language; import com.bekvon.bukkit.residence.text.help.HelpEntry; import com.bekvon.bukkit.residence.text.help.InformationPager; @@ -566,9 +566,9 @@ public void onEnable() { if (SlimeFun) { try { - new slimeFunManager(this); + SlimefunManager.register(this); } catch (Throwable e) { - e.printStackTrace(); + e.printStackTrace(); } } diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index 9d9ee3774..646eda287 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -7,52 +7,59 @@ import org.bukkit.plugin.Plugin; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectableAction; import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectionModule; public class SlimeFunResidenceModule implements ProtectionModule { - private Residence residence; - - private final Plugin plugin; - - public SlimeFunResidenceModule(Plugin plugin) { - this.plugin = plugin; - } - - @Override - public Plugin getPlugin() { - return this.plugin; - } - - @Override - public void load() { - this.residence = Residence.getInstance(); - } - - @Override - public boolean hasPermission(OfflinePlayer p, Location l, ProtectableAction action) { - if (!action.isBlockAction()) - return true; - - switch (action) { - case ACCESS_INVENTORIES: - break; - case BREAK_BLOCK: - Player player = Bukkit.getPlayer(p.getUniqueId()); - if (player == null) - return false; - if (!ResidenceBlockListener.canBreakBlock(player, l.getBlock(), true)) - return false; - break; - case PLACE_BLOCK: - break; - case PVP: - break; - default: - break; + + private final Residence residence; + + public SlimeFunResidenceModule(Plugin plugin) { + this.residence = (Residence) plugin; + } + + @Override + public Plugin getPlugin() { + return this.residence; + } + + @Override + public void load() {} + + @Override + public boolean hasPermission(OfflinePlayer op, Location loc, ProtectableAction action) { + if (op == null) + return false; + + switch (action) { + case ACCESS_INVENTORIES: + ClaimedResidence res = residence.getResidenceManager().getByLoc(loc); + if (res != null) { + boolean allow = res.getPermissions().playerHas(new ResidencePlayer(op), Flags.container, false); + + if (!allow) + residence.msg(op.getPlayer(), lm.Flag_Deny, Flags.container); + + return allow; + } + break; + case BREAK_BLOCK: + Player player = Bukkit.getPlayer(op.getUniqueId()); + + if (player == null) + return false; + + return ResidenceBlockListener.canBreakBlock(player, loc.getBlock(), true); + default: + break; + } + + return true; } - return true; - } } diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java new file mode 100644 index 000000000..ff2c07468 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java @@ -0,0 +1,34 @@ +package com.bekvon.bukkit.residence.slimeFun; + +import org.bukkit.Bukkit; + +import com.bekvon.bukkit.residence.Residence; + +import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectionManager; + +public class SlimefunManager { + + // Fail safe to avoid infinite checks + private final static int TRIES = 60; + private static int times = 0; + + public static void register(Residence residence) { + Bukkit.getServer().getScheduler().runTaskTimer(residence, task -> { + + ProtectionManager manager = SlimefunPlugin.getProtectionManager(); + + // Wait for protectionManager to load (loaded on first server tick) + if (manager != null) { + manager.registerModule(Bukkit.getServer(), "Residence", plugin -> new SlimeFunResidenceModule(plugin)); + residence.consoleMessage("Enabled compatability with SlimeFun plugin"); + task.cancel(); + } + + if (++times >= TRIES) { + residence.consoleMessage("&cFailed to initialize SlimeFun support"); + task.cancel(); + } + }, 20, 20); + } +} diff --git a/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java b/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java deleted file mode 100644 index 35319f806..000000000 --- a/src/com/bekvon/bukkit/residence/slimeFun/slimeFunManager.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.bekvon.bukkit.residence.slimeFun; - -import org.bukkit.Bukkit; - -import com.bekvon.bukkit.residence.Residence; - -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectionManager; - -public class slimeFunManager { - - private Residence plugin; - - int repeat = 0; - // Fail safe to avoid infinite checks - int times = 0; - - @SuppressWarnings("deprecation") - public slimeFunManager(Residence plugin) { - this.plugin = plugin; - if (Bukkit.getPluginManager().getPlugin("Slimefun") != null && Bukkit.getPluginManager().getPlugin("CS-CoreLib") != null) { - repeat = Bukkit.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, () -> { - times++; - if (Bukkit.getPluginManager().getPlugin("Slimefun").isEnabled()) { - ProtectionManager manager = SlimefunPlugin.getProtectionManager(); - manager.registerModule(Bukkit.getServer(), "Residence", pls -> new SlimeFunResidenceModule(plugin)); - - plugin.consoleMessage("Enabled compatability with SlimeFun plugin"); - Bukkit.getScheduler().cancelTask(repeat); - } - if (times > 60) { - plugin.consoleMessage("&cFailed to initialize SlimeFun support"); - Bukkit.getScheduler().cancelTask(repeat); - } - }, 20L, 20L); - } - } - -} From e3c91c2184ab4b1e320fe73ac176a88fe2783fd1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 17 Nov 2020 15:50:12 +0200 Subject: [PATCH 0787/1142] general protection when teleporting to residence from void and lava --- .../bekvon/bukkit/residence/commands/tp.java | 8 +++--- .../bukkit/residence/containers/lm.java | 2 ++ .../protection/ClaimedResidence.java | 27 ++++++++++++++----- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index b6f5f1908..a8d521e64 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -31,11 +31,9 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - if (res.isRaidInitialized()) { - if (res.getRaid().isAttacker(player)) { - plugin.msg(player, lm.Raid_cantDo); - return true; - } + if (res.isRaidInitialized() && res.getRaid().isAttacker(player)) { + plugin.msg(player, lm.Raid_cantDo); + return true; } res.tpToResidence(player, player, resadmin); diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 0191da3d5..73ad15cec 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -462,6 +462,8 @@ public enum lm { General_TeleportDeny("&cYou dont have teleport access."), General_TeleportSuccess("&eTeleported!"), + General_TeleportConfirmLava("&cThis teleport is not safe, you will fall into &6lava&c. Use &6/res tpconfirm &cto perform teleportation anyways."), + General_TeleportConfirmVoid("&cThis teleport is not safe, you will fall into &6void&c. Use &6/res tpconfirm &cto perform teleportation anyways."), General_TeleportConfirm("&cThis teleport is not safe, you will fall for &6%1 &cblocks. Use &6/res tpconfirm &cto perform teleportation anyways."), General_TeleportStarted("&eTeleportation to &6%1 &estarted, don't move for next &6%2 &esec."), General_TeleportTitle("&eTeleporting!"), diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 93e75ffe6..cede50f10 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -25,6 +25,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.cmiLib.TitleMessageManager; import com.bekvon.bukkit.residence.ConfigManager; @@ -1259,15 +1260,22 @@ public int isSafeTp(Player player) { Location tempLoc = new Location(tpLoc.getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()); - int from = (int) tempLoc.getY(); - int fallDistance = 0; - for (int i = 0; i < 255; i++) { - tempLoc.setY(from - i); + for (int i = (int) tempLoc.getY(); i >= 0; i--) { + if (i == 0) { + fallDistance = 255; + break; + } + tempLoc.setY(i); Block block = tempLoc.getBlock(); if (ResidencePlayerListener.isEmptyBlock(block)) { fallDistance++; } else { + + if (CMIMaterial.get(block).isLava()) { + fallDistance = 256; + } + break; } } @@ -1314,10 +1322,17 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } } - if (!plugin.getTeleportMap().containsKey(targetPlayer.getName()) && !isAdmin) { + ClaimedResidence old = plugin.getTeleportMap().get(targetPlayer.getName()); + + if (old == null || !old.equals(this)) { int distance = isSafeTp(reqPlayer); if (distance > 6) { - plugin.msg(reqPlayer, lm.General_TeleportConfirm, distance); + if (distance == 256) + plugin.msg(reqPlayer, lm.General_TeleportConfirmLava, distance); + else if (distance == 255) + plugin.msg(reqPlayer, lm.General_TeleportConfirmVoid, distance); + else + plugin.msg(reqPlayer, lm.General_TeleportConfirm, distance); plugin.getTeleportMap().put(reqPlayer.getName(), this); return; } From 2c3fa17f584426025373d916e5e3d64d629d5cb9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 18 Nov 2020 12:54:25 +0200 Subject: [PATCH 0788/1142] Lets ignore residence count when buying one and you have ignorelimits --- .../bukkit/residence/ConfigManager.java | 4 ++++ .../bekvon/bukkit/residence/Residence.java | 22 +++++++++++-------- .../bukkit/residence/commands/give.java | 5 +++-- .../residence/economy/TransactionManager.java | 3 ++- .../bukkit/residence/signsStuff/SignUtil.java | 6 ++--- 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index c93d5736c..9bc34abed 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -245,6 +245,7 @@ public class ConfigManager { // DynMap public boolean DynMapHideByDefault; public boolean DynMapUse; + public boolean BlueMapUse; public boolean DynMapShowFlags; public boolean DynMapHideHidden; public boolean DynMapLayer3dRegions; @@ -1242,6 +1243,9 @@ public void UpdateConfigFile() { ActionBarOnSelection = false; } + c.addComment("BlueMap.Use", "Enables or disable BlueMap Support"); + BlueMapUse = c.get("BlueMap.Use", false); + c.addComment("DynMap.Use", "Enables or disable DynMap Support"); DynMapUse = c.get("DynMap.Use", false); c.addComment("DynMap.HideByDefault", "When set to true we will hide residence areas by default on dynmap window", "Residences can still be enabled throw provided DynMap option on left top side"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 1eab82663..b66961e75 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -566,9 +566,9 @@ public void onEnable() { if (SlimeFun) { try { - SlimefunManager.register(this); + SlimefunManager.register(this); } catch (Throwable e) { - e.printStackTrace(); + e.printStackTrace(); } } @@ -770,13 +770,17 @@ public void run() { if (getServer().getPluginManager().getPlugin("CrackShot") != null) getServer().getPluginManager().registerEvents(new CrackShot(this), this); - // DynMap - Plugin dynmap = Bukkit.getPluginManager().getPlugin("dynmap"); - if (dynmap != null && getConfigManager().DynMapUse) { - DynManager = new DynMapManager(this); - getServer().getPluginManager().registerEvents(new DynMapListeners(this), this); - getDynManager().api = (DynmapAPI) dynmap; - getDynManager().activate(); + try { + // DynMap + Plugin dynmap = Bukkit.getPluginManager().getPlugin("dynmap"); + if (dynmap != null && getConfigManager().DynMapUse) { + DynManager = new DynMapManager(this); + getServer().getPluginManager().registerEvents(new DynMapListeners(this), this); + getDynManager().api = (DynmapAPI) dynmap; + getDynManager().activate(); + } + } catch (Throwable e) { + e.printStackTrace(); } int autosaveInt = getConfigManager().getAutoSaveInterval(); diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index 50ffb258f..d8a744724 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -46,8 +46,9 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return false; } - rm.add(plugin.getLM().getMessage(lm.Residence_GiveConfirm, args[0], res.getOwner(), args[1]), plugin.getLM().getMessage(lm.info_click), (resadmin ? "resadmin" : "res") + " give " + args[0] - + " " + args[1] + (includeSubzones ? " -s" : "") + " -confirmed"); + rm.addText(plugin.getLM().getMessage(lm.Residence_GiveConfirm, args[0], res.getOwner(), args[1])) + .addHover(plugin.getLM().getMessage(lm.info_click)) + .addCommand((resadmin ? "resadmin" : "res") + " give " + args[0] + " " + args[1] + (includeSubzones ? " -s" : "") + " -confirmed"); rm.show(sender); return true; diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 8bf99f610..29dadc3ff 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -22,6 +22,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.utils.Debug; public class TransactionManager implements MarketBuyInterface { private Set sellAmount; @@ -200,7 +201,7 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { plugin.msg(player, lm.Economy_OwnerBuyFail); return; } - if (plugin.getResidenceManager().getOwnedZoneCount(player.getName()) >= rPlayer.getMaxRes() && !resadmin) { + if (plugin.getResidenceManager().getOwnedZoneCount(player.getName()) >= rPlayer.getMaxRes() && !resadmin && !group.buyLandIgnoreLimits()) { plugin.msg(player, lm.Residence_TooMany); return; } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index da8e56aef..60f54cf09 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -142,7 +142,7 @@ public void run() { public void CheckSign(ClaimedResidence res) { for (Signs one : res.getSignsInResidence()) { - if (res != one.GetResidence()) + if (res != one.getResidence()) continue; this.SignUpdate(one); } @@ -341,11 +341,11 @@ public void convertSigns(CommandSender sender) { signs.setLocation(new Location(world, x, y, z)); - Signs s = this.getSigns().getResSign(signs.GetLocation()); + Signs s = this.getSigns().getResSign(signs.getLocation()); if (s == null) continue; - Location nloc = signs.GetLocation(); + Location nloc = signs.getLocation(); Block block = nloc.getBlock(); if (!(block.getState() instanceof Sign)) From 5b14ccea52b49e2a5a4b6a8edff29742073bf856 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 18 Nov 2020 13:37:18 +0200 Subject: [PATCH 0789/1142] Preventing anchor block exploding while interacting with it not in nether --- .../bukkit/residence/ConfigManager.java | 5 +- .../bekvon/bukkit/residence/Residence.java | 12 +-- .../bukkit/residence/containers/Flags.java | 1 + .../bukkit/residence/containers/lm.java | 22 +++--- .../listeners/ResidencePlayerListener.java | 3 +- .../ResidencePlayerListener1_16.java | 78 +++++++++++++++++++ 6 files changed, 99 insertions(+), 22 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 9bc34abed..edb3c5675 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -245,7 +245,7 @@ public class ConfigManager { // DynMap public boolean DynMapHideByDefault; public boolean DynMapUse; - public boolean BlueMapUse; + public boolean DynMapShowFlags; public boolean DynMapHideHidden; public boolean DynMapLayer3dRegions; @@ -1243,9 +1243,6 @@ public void UpdateConfigFile() { ActionBarOnSelection = false; } - c.addComment("BlueMap.Use", "Enables or disable BlueMap Support"); - BlueMapUse = c.get("BlueMap.Use", false); - c.addComment("DynMap.Use", "Enables or disable DynMap Support"); DynMapUse = c.get("DynMap.Use", false); c.addComment("DynMap.HideByDefault", "When set to true we will hide residence areas by default on dynmap window", "Residences can still be enabled throw provided DynMap option on left top side"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index b66961e75..92a82e519 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -85,6 +85,7 @@ import com.bekvon.bukkit.residence.listeners.ResidenceFixesListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_14; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_16; import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; @@ -154,7 +155,6 @@ public class Residence extends JavaPlugin { protected ResidenceBlockListener blistener; protected ResidencePlayerListener plistener; - protected ResidencePlayerListener1_14 p1_14listener; protected ResidenceEntityListener elistener; protected ResidenceFixesListener flistener; @@ -710,10 +710,14 @@ public void run() { setKingdoms(); + PluginManager pm = getServer().getPluginManager(); + blistener = new ResidenceBlockListener(this); plistener = new ResidencePlayerListener(this); if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) - p1_14listener = new ResidencePlayerListener1_14(this); + pm.registerEvents(new ResidencePlayerListener1_14(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_16_R1)) + pm.registerEvents(new ResidencePlayerListener1_16(this), this); elistener = new ResidenceEntityListener(this); flistener = new ResidenceFixesListener(); slistener = new ResidenceRaidListener(); @@ -721,13 +725,9 @@ public void run() { shlistener = new ShopListener(this); spigotlistener = new SpigotListener(); - PluginManager pm = getServer().getPluginManager(); pm.registerEvents(blistener, this); pm.registerEvents(plistener, this); - - if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) - pm.registerEvents(p1_14listener, this); pm.registerEvents(elistener, this); pm.registerEvents(flistener, this); pm.registerEvents(shlistener, this); diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 81742c447..5ec12e560 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -7,6 +7,7 @@ public enum Flags { admin(CMIMaterial.BEDROCK, FlagMode.Player, "Gives a player permission to change flags on a residence", true), animalkilling(CMIMaterial.CHICKEN, FlagMode.Both, "Allows or denys animal killing", false), animals(CMIMaterial.PIG_SPAWN_EGG, FlagMode.Residence, "Allows or denys animal spawns", true), + anchor(CMIMaterial.RESPAWN_ANCHOR, FlagMode.Both, "Allows or denys respawn anchor usage", true), anvilbreak(CMIMaterial.ANVIL, FlagMode.Residence, "Allows or denys anvil break in residence", true), backup(CMIMaterial.BOOKSHELF, FlagMode.Residence, "If set to true, restores previous look of area (WordEdit required)", false), bank(CMIMaterial.ENDER_CHEST, FlagMode.Both, "Allows or denys deposit/withdraw money from res bank", true), diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 73ad15cec..f1df6cc1c 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -83,23 +83,23 @@ public enum lm { Sign_Updated("&6%1 &esigns updated!"), Sign_TopLine("[market]"), Sign_DateFormat("YY/MM/dd HH:mm"), - Sign_ForRentTopLine("&8For Rent"), - Sign_ForRentPriceLine("&8%1&f/&8%2&f/&8%3"), - Sign_ForRentResName("&8%1"), + Sign_ForRentTopLine("&0For Rent"), + Sign_ForRentPriceLine("&0%1&f/&0%2&f/&0%3"), + Sign_ForRentResName("&0%1"), Sign_ForRentBottomLine("&9Available"), Sign_RentedAutorenewTrue("&2%1"), Sign_RentedAutorenewFalse("&c%1"), Sign_RentedTopLine("%1"), - Sign_RentedPriceLine("&8%1&f/&8%2&f/&8%3"), - Sign_RentedResName("&8%1"), + Sign_RentedPriceLine("&0%1&f/&0%2&f/&0%3"), + Sign_RentedResName("&0%1"), Sign_RentedBottomLine("&1%1"), - Sign_ForSaleTopLine("&8For Sale"), - Sign_ForSalePriceLine("&8%1"), - Sign_ForSaleResName("&8%1"), - Sign_ForSaleBottom("&5%1m\u00B3"), + Sign_ForSaleTopLine("&0For Sale"), + Sign_ForSalePriceLine("&0%1"), + Sign_ForSaleResName("&0%1"), + Sign_ForSaleBottom("&0%1m\u00B3"), Sign_LookAt("&cYou are not looking at sign"), - Sign_ResName("&8%1"), - Sign_Owner("&5%1"), + Sign_ResName("&0%1"), + Sign_Owner("&0%1"), Raid_NotEnabled("&cRaid feature is not enabled!"), Raid_NotIn("&cYou are not in the raid!"), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ea1c72145..e0f29a4ef 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1182,6 +1182,7 @@ private static boolean placingMinecart(Block block, ItemStack item) { return block != null && block.getType().name().contains("RAIL") && item != null && item.getType().name().contains("MINECART"); } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { @@ -2276,7 +2277,7 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { Player player = event.getPlayer(); if (player.hasMetadata("NPC")) return; - if (message != null) { + if (message != null) { Long time = informar.get(player.getUniqueId()); if (time == null || time + 100L < System.currentTimeMillis()) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java new file mode 100644 index 000000000..1b67b76e7 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java @@ -0,0 +1,78 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.Material; +import org.bukkit.World.Environment; +import org.bukkit.block.Block; +import org.bukkit.block.data.type.RespawnAnchor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; + +public class ResidencePlayerListener1_16 implements Listener { + + private Residence plugin; + + public ResidencePlayerListener1_16(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractRespawn(PlayerInteractEvent event) { + + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + Player player = event.getPlayer(); + + Block block = event.getClickedBlock(); + if (block == null) + return; + + Material mat = block.getType(); + + if (!mat.equals(Material.RESPAWN_ANCHOR)) + return; + + ItemStack iih = event.getItem(); + CMIMaterial heldItem = CMIMaterial.get(iih); + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (res == null) + return; + + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.anchor, FlagCombo.OnlyTrue)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.anchor, res.getName()); + event.setCancelled(true); + return; + } + + if (!heldItem.equals(CMIMaterial.GLOWSTONE) && !player.getWorld().getEnvironment().equals(Environment.NETHER) && !res.getPermissions().has(Flags.explode, FlagCombo.TrueOrNone)) { + event.setCancelled(true); + return; + } + + RespawnAnchor anchor = (RespawnAnchor) block.getBlockData(); + if (anchor.getMaximumCharges() == anchor.getCharges() && !res.getPermissions().has(Flags.explode, FlagCombo.TrueOrNone) && !player.getWorld().getEnvironment().equals(Environment.NETHER)) { + event.setCancelled(true); + } + + } +} From 9a555c787f7d44b54cced4c485b61734b8ef10e6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 19 Nov 2020 15:38:00 +0200 Subject: [PATCH 0790/1142] Fixing raid stop command Fixing raid bossbar message Fixing and improving tab complete --- .../residence/BossBar/BossBarManager.java | 337 ++++++++++++------ .../bukkit/residence/LocaleManager.java | 22 +- .../bukkit/residence/commands/area.java | 10 +- .../bukkit/residence/commands/attack.java | 10 +- .../bukkit/residence/commands/bank.java | 3 +- .../bukkit/residence/commands/check.java | 3 +- .../bukkit/residence/commands/clearflags.java | 5 +- .../bukkit/residence/commands/command.java | 4 +- .../bukkit/residence/commands/compass.java | 5 +- .../bukkit/residence/commands/contract.java | 5 +- .../bukkit/residence/commands/defend.java | 11 +- .../bukkit/residence/commands/expand.java | 5 +- .../bukkit/residence/commands/flags.java | 11 +- .../bukkit/residence/commands/give.java | 3 +- .../bukkit/residence/commands/gset.java | 3 +- .../bukkit/residence/commands/info.java | 3 +- .../bukkit/residence/commands/kick.java | 5 +- .../bukkit/residence/commands/lease.java | 12 +- .../bukkit/residence/commands/leaveraid.java | 5 +- .../bukkit/residence/commands/limits.java | 3 +- .../bukkit/residence/commands/list.java | 3 +- .../bukkit/residence/commands/listall.java | 3 +- .../bukkit/residence/commands/listhidden.java | 3 +- .../bukkit/residence/commands/lset.java | 4 +- .../bukkit/residence/commands/market.java | 28 +- .../bukkit/residence/commands/material.java | 3 +- .../bukkit/residence/commands/message.java | 3 +- .../bukkit/residence/commands/mirror.java | 3 +- .../bukkit/residence/commands/padd.java | 3 +- .../bukkit/residence/commands/pdel.java | 3 +- .../bukkit/residence/commands/pset.java | 5 +- .../bukkit/residence/commands/raid.java | 51 ++- .../bukkit/residence/commands/raidstatus.java | 7 +- .../bekvon/bukkit/residence/commands/rc.java | 5 +- .../bukkit/residence/commands/reload.java | 3 +- .../bukkit/residence/commands/remove.java | 5 +- .../bukkit/residence/commands/removeall.java | 3 +- .../residence/commands/removeworld.java | 3 +- .../bukkit/residence/commands/rename.java | 3 +- .../bukkit/residence/commands/renamearea.java | 3 +- .../bukkit/residence/commands/resadmin.java | 3 +- .../bukkit/residence/commands/reset.java | 5 +- .../bekvon/bukkit/residence/commands/rt.java | 3 +- .../bukkit/residence/commands/select.java | 5 +- .../bukkit/residence/commands/server.java | 5 +- .../bekvon/bukkit/residence/commands/set.java | 4 +- .../bukkit/residence/commands/setall.java | 3 +- .../bukkit/residence/commands/setallfor.java | 3 +- .../bukkit/residence/commands/setmain.java | 3 +- .../bukkit/residence/commands/setowner.java | 5 +- .../bukkit/residence/commands/shop.java | 11 +- .../bukkit/residence/commands/show.java | 3 +- .../bukkit/residence/commands/sublist.java | 3 +- .../bukkit/residence/commands/subzone.java | 5 +- .../bekvon/bukkit/residence/commands/tp.java | 5 +- .../residence/containers/ResidencePlayer.java | 8 +- .../bukkit/residence/containers/lm.java | 4 + .../residence/economy/rent/RentManager.java | 6 +- .../listeners/ResidenceBlockListener.java | 4 +- .../listeners/ResidenceEntityListener.java | 8 +- .../listeners/ResidencePlayerListener.java | 10 +- .../protection/ClaimedResidence.java | 106 +----- .../protection/ResidenceManager.java | 2 +- .../protection/ResidencePermissions.java | 6 +- .../bukkit/residence/raid/ResidenceRaid.java | 165 +++++++-- .../bukkit/residence/text/help/HelpEntry.java | 107 +++--- 66 files changed, 658 insertions(+), 443 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java index 5b2fc213c..c243855a2 100644 --- a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java +++ b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java @@ -10,9 +10,11 @@ import org.bukkit.boss.BossBar; import org.bukkit.entity.Player; +import com.bekvon.bukkit.CMIGUI.GUIManager; import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.utils.Debug; public class BossBarManager { @@ -29,130 +31,257 @@ public synchronized void updateBossBars(ResidencePlayer player) { return; HashMap temp = new HashMap(player.getBossBarInfo()); for (Entry one : temp.entrySet()) { - Show(one.getValue()); + showBar(one.getValue()); } } - public synchronized void Show(final BossBarInfo barInfo) { + public synchronized void showBar(final BossBarInfo barInfo) { + if (Version.isCurrentLower(Version.v1_9_R1)) return; final ResidencePlayer user = barInfo.getUser(); - if (user == null || !user.isOnline()) - return; + barInfo.cancelHideScheduler(); + barInfo.cancelAutoScheduler(); + + barInfo.setAutoId(Bukkit.getScheduler().scheduleSyncRepeatingTask(Residence.getInstance(), new Runnable() { + @Override + public void run() { - barInfo.updateCycle(); - - BossBar bar = barInfo.getBar(); - - String name = barInfo.getTitleOfBar(); - - boolean isNew = true; - if (bar == null) { - BarColor color = barInfo.getColor(); - if (color == null) - switch (user.getBossBarInfo().size()) { - case 1: - color = BarColor.GREEN; - break; - case 2: - color = BarColor.RED; - break; - case 3: - color = BarColor.WHITE; - break; - case 4: - color = BarColor.YELLOW; - break; - case 5: - color = BarColor.PINK; - break; - case 6: - color = BarColor.PURPLE; - break; - default: - color = BarColor.BLUE; - break; + if (user == null || !user.isOnline()) { + barInfo.cancelAutoScheduler(); + return; } - bar = Bukkit.createBossBar(name, color, barInfo.getStyle() != null ? barInfo.getStyle() : BarStyle.SEGMENTED_10); - } else { - bar.setTitle(name); - if (barInfo.getStyle() != null) - bar.setStyle(barInfo.getStyle()); - if (barInfo.getColor() != null) - bar.setColor(barInfo.getColor()); - isNew = false; - } - Double percentage = barInfo.getPercentage(); - if (percentage == null) - percentage = 1D; + barInfo.updateCycle(); + + BossBar bar = barInfo.getBar(); + + String name = barInfo.getTitleOfBar(); + + boolean isNew = true; + if (bar == null) { + BarColor color = barInfo.getColor(); + if (color == null) + switch (user.getBossBarInfo().size()) { + case 1: + color = BarColor.GREEN; + break; + case 2: + color = BarColor.RED; + break; + case 3: + color = BarColor.WHITE; + break; + case 4: + color = BarColor.YELLOW; + break; + case 5: + color = BarColor.PINK; + break; + case 6: + color = BarColor.PURPLE; + break; + default: + color = BarColor.BLUE; + break; + } + bar = Bukkit.createBossBar(name, color, barInfo.getStyle() != null ? barInfo.getStyle() : BarStyle.SEGMENTED_10); + } else { + bar.setTitle(name); + if (barInfo.getStyle() != null) + bar.setStyle(barInfo.getStyle()); + if (barInfo.getColor() != null) + bar.setColor(barInfo.getColor()); + isNew = false; + } + + Double percentage = barInfo.getPercentage(); + if (percentage == null) + percentage = 1D; + + if (barInfo.getAdjustPerc() != null) { + Double curP = barInfo.getPercentage(); + if (curP != null && curP <= 0 && barInfo.getAdjustPerc() < 0) { + barInfo.cancelAutoScheduler(); + barInfo.getBar().setVisible(false); + barInfo.remove(); - if (barInfo.getAdjustPerc() != null) { - Double curP = barInfo.getPercentage(); - if (curP != null && curP <= 0 && barInfo.getAdjustPerc() < 0) { - barInfo.cancelAutoScheduler(); // if (barInfo.getCommands() != null) { // plugin.getSpecializedCommandManager().processCmds(barInfo.getCommands(user.getPlayer()), user.getPlayer()); // } - return; - } - if (curP != null && curP >= 1 && barInfo.getAdjustPerc() > 0) { - barInfo.cancelAutoScheduler(); + return; + } + if (curP != null && curP >= 1 && barInfo.getAdjustPerc() > 0) { + barInfo.cancelAutoScheduler(); + barInfo.getBar().setVisible(false); + barInfo.remove(); // if (barInfo.getCommands() != null) { // plugin.getSpecializedCommandManager().processCmds(barInfo.getCommands(user.getPlayer()), user.getPlayer()); // } - return; - } - if (curP == null) - if (barInfo.getAdjustPerc() > 0) - curP = 0D; - else - curP = 1D; - curP += barInfo.getAdjustPerc(); - barInfo.setPercentage(curP); - } else - barInfo.setPercentage(percentage); - - try { - bar.setProgress(barInfo.getPercentage()); - if (isNew) { - Player target = user.getPlayer(); - if (target == null) - return; - bar.addPlayer(target); - bar.setVisible(true); - } - } catch (NoSuchMethodError e) { - e.printStackTrace(); - } - barInfo.setBar(bar); - - barInfo.cancelHideScheduler(); - barInfo.cancelAutoScheduler(); - - if (barInfo.getAuto() != null && barInfo.getAuto() > 0) { - barInfo.setAutoId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { + return; + } + if (curP == null) + if (barInfo.getAdjustPerc() > 0) + curP = 0D; + else + curP = 1D; + curP += barInfo.getAdjustPerc(); + barInfo.setPercentage(curP); + } else + barInfo.setPercentage(percentage); - Show(barInfo); - - return; + try { + bar.setProgress(barInfo.getPercentage()); + if (isNew) { + Player target = user.getPlayer(); + if (target == null) + return; + bar.addPlayer(target); + bar.setVisible(true); + } + } catch (NoSuchMethodError e) { + e.printStackTrace(); } - }, barInfo.getAuto())); - } - if (barInfo.getKeepFor() > 0) { + barInfo.setBar(bar); + } + }, barInfo.getAuto(), barInfo.getAuto())); - barInfo.setId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - barInfo.getBar().setVisible(false); - barInfo.remove(); - return; - } - }, barInfo.getKeepFor())); - } +// if (barInfo.getKeepFor() > 0) { +// barInfo.setId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { +// @Override +// public void run() { +// barInfo.getBar().setVisible(false); +// barInfo.remove(); +// return; +// } +// }, barInfo.getKeepFor())); +// } } +// public synchronized void Show(final BossBarInfo barInfo) { +// if (Version.isCurrentLower(Version.v1_9_R1)) +// return; +// final ResidencePlayer user = barInfo.getUser(); +// +// if (user == null || !user.isOnline()) +// return; +// +// barInfo.updateCycle(); +// +// BossBar bar = barInfo.getBar(); +// +// String name = barInfo.getTitleOfBar(); +// +// boolean isNew = true; +// if (bar == null) { +// BarColor color = barInfo.getColor(); +// if (color == null) +// switch (user.getBossBarInfo().size()) { +// case 1: +// color = BarColor.GREEN; +// break; +// case 2: +// color = BarColor.RED; +// break; +// case 3: +// color = BarColor.WHITE; +// break; +// case 4: +// color = BarColor.YELLOW; +// break; +// case 5: +// color = BarColor.PINK; +// break; +// case 6: +// color = BarColor.PURPLE; +// break; +// default: +// color = BarColor.BLUE; +// break; +// } +// bar = Bukkit.createBossBar(name, color, barInfo.getStyle() != null ? barInfo.getStyle() : BarStyle.SEGMENTED_10); +// } else { +// bar.setTitle(name); +// if (barInfo.getStyle() != null) +// bar.setStyle(barInfo.getStyle()); +// if (barInfo.getColor() != null) +// bar.setColor(barInfo.getColor()); +// isNew = false; +// } +// +// Double percentage = barInfo.getPercentage(); +// if (percentage == null) +// percentage = 1D; +// +// if (barInfo.getAdjustPerc() != null) { +// Double curP = barInfo.getPercentage(); +// if (curP != null && curP <= 0 && barInfo.getAdjustPerc() < 0) { +// barInfo.cancelAutoScheduler(); +//// if (barInfo.getCommands() != null) { +//// plugin.getSpecializedCommandManager().processCmds(barInfo.getCommands(user.getPlayer()), user.getPlayer()); +//// } +// return; +// } +// if (curP != null && curP >= 1 && barInfo.getAdjustPerc() > 0) { +// barInfo.cancelAutoScheduler(); +//// if (barInfo.getCommands() != null) { +//// plugin.getSpecializedCommandManager().processCmds(barInfo.getCommands(user.getPlayer()), user.getPlayer()); +//// } +// return; +// } +// if (curP == null) +// if (barInfo.getAdjustPerc() > 0) +// curP = 0D; +// else +// curP = 1D; +// curP += barInfo.getAdjustPerc(); +// barInfo.setPercentage(curP); +// } else +// barInfo.setPercentage(percentage); +// +// try { +// bar.setProgress(barInfo.getPercentage()); +// if (isNew) { +// Player target = user.getPlayer(); +// if (target == null) +// return; +// bar.addPlayer(target); +// bar.setVisible(true); +// } +// } catch (NoSuchMethodError e) { +// e.printStackTrace(); +// } +// barInfo.setBar(bar); +// +// barInfo.cancelHideScheduler(); +// barInfo.cancelAutoScheduler(); +// +// if (barInfo.getAuto() != null && barInfo.getAuto() > 0) { +// barInfo.setAutoId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { +// @Override +// public void run() { +// +// if (barInfo.getAutoId() != null) { +// Debug.D("show boss " + barInfo.getAutoId()); +// Show(barInfo); +// } +// +// return; +// } +// }, barInfo.getAuto())); +// } +// if (barInfo.getKeepFor() > 0) { +// +// barInfo.setId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { +// @Override +// public void run() { +// barInfo.getBar().setVisible(false); +// barInfo.remove(); +// return; +// } +// }, barInfo.getKeepFor())); +// } +// } + } diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index 60600c512..eab43d747 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -13,6 +13,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map.Entry; + import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -24,12 +25,10 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.utils.Debug; -import com.google.common.util.concurrent.ListenableFutureTask; public class LocaleManager { - public HashMap, List> CommandTab = new HashMap, List>(); + public HashMap>> CommandTab = new HashMap>>(); private Residence plugin; public String path = "CommandHelp.SubCommands.res.SubCommands."; @@ -39,11 +38,18 @@ public LocaleManager(Residence plugin) { this.plugin = plugin; } - public static void addTabComplete(Object cl, String subCmd, String... tabs) { - if (subCmd == null || subCmd.isEmpty()) - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(cl.getClass().getSimpleName()), Arrays.asList(tabs)); - else - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(cl.getClass().getSimpleName(), subCmd), Arrays.asList(tabs)); + public static void addTabCompleteMain(Object cl, String... tabs) { + HashMap> mp = new HashMap>(); + mp.put("", Arrays.asList(tabs)); + Residence.getInstance().getLocaleManager().CommandTab.put(cl.getClass().getSimpleName().toLowerCase(), mp); + } + + public static void addTabCompleteSub(Object cl, String subCmd, String... tabs) { + HashMap> mp = Residence.getInstance().getLocaleManager().CommandTab.get(cl.getClass().getSimpleName().toLowerCase()); + if (mp == null) + mp = new HashMap>(); + mp.put(subCmd.toLowerCase(), Arrays.asList(tabs)); + Residence.getInstance().getLocaleManager().CommandTab.put(cl.getClass().getSimpleName().toLowerCase(), mp); } private static YamlConfiguration loadConfiguration(BufferedReader in, String language) { diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index b12a0a9c7..ab20a2e6f 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -130,24 +130,24 @@ public void getLocale() { c.setP(c.getPath() + "SubCommands."); c.get("list.Description", "List physical areas in a residence"); c.get("list.Info", Arrays.asList("&eUsage: &6/res area list [residence] ")); - LocaleManager.addTabComplete(this, "list", "[residence]"); + LocaleManager.addTabCompleteSub(this, "list", "[residence]"); c.get("listall.Description", "List coordinates and other Info for areas"); c.get("listall.Info", Arrays.asList("&eUsage: &6/res area listall [residence] ")); - LocaleManager.addTabComplete(this, "listall", "[residence]"); + LocaleManager.addTabCompleteSub(this, "listall", "[residence]"); c.get("add.Description", "Add physical areas to a residence"); c.get("add.Info", Arrays.asList("&eUsage: &6/res area add [residence] [areaID]", "You must first select two points first.")); - LocaleManager.addTabComplete(this, "add", "[residence]"); + LocaleManager.addTabCompleteSub(this, "add", "[residence]"); c.get("remove.Description", "Remove physical areas from a residence"); c.get("remove.Info", Arrays.asList("&eUsage: &6/res area remove [residence] [areaID]")); - LocaleManager.addTabComplete(this, "remove", "[residence]"); + LocaleManager.addTabCompleteSub(this, "remove", "[residence]"); c.get("replace.Description", "Replace physical areas in a residence"); c.get("replace.Info", Arrays.asList("&eUsage: &6/res area replace [residence] [areaID]", "You must first select two points first.", "Replacing a area will charge the difference in size if the new area is bigger.")); - LocaleManager.addTabComplete(this, "replace", "[residence]"); + LocaleManager.addTabCompleteSub(this, "replace", "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/attack.java b/src/com/bekvon/bukkit/residence/commands/attack.java index 6cdeade11..cd55256f3 100644 --- a/src/com/bekvon/bukkit/residence/commands/attack.java +++ b/src/com/bekvon/bukkit/residence/commands/attack.java @@ -69,22 +69,22 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return null; } - if (res.isUnderRaidCooldown() && !res.isInPreRaid() && !res.isUnderRaid()) { + if (res.getRaid().isUnderRaidCooldown() && !res.getRaid().isInPreRaid() && !res.getRaid().isUnderRaid()) { plugin.msg(player, lm.Raid_attack_cooldown, Utils.to24hourShort(res.getRaid().getCooldownEnd() - System.currentTimeMillis() + 1000L)); return null; } - if (res.isUnderRaid() || res.isInPreRaid()) { + if (res.getRaid().isUnderRaid() || res.getRaid().isInPreRaid()) { if (!res.getRaid().isAttacker(player)) res.getRaid().addAttacker(player); plugin.msg(player, lm.Raid_attack_Joined, res.getName()); return null; } - boolean started = res.preStartRaid(player); + boolean started = res.getRaid().preStartRaid(player); if (started) { - res.startRaid(); + res.getRaid().startRaid(); return true; } @@ -95,7 +95,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo @Override public void getLocale() { - LocaleManager.addTabComplete(this, null, "[cresidence]"); + LocaleManager.addTabCompleteMain(this, "[cresidence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 1e256b1ee..05a83381e 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -63,6 +64,6 @@ public void getLocale() { c.get("Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", "You must be standing in a Residence or provide residence name", "You must have the +bank flag.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("deposit%%withdraw", "[residence]")); + LocaleManager.addTabCompleteMain(this, "deposit%%withdraw", "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index 990b11ee1..d5dfe79c3 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; @@ -52,6 +53,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Check flag state for you"); c.get("Info", Arrays.asList("&eUsage: &6/res check [residence] [flag] (playername)")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[flag]", "[playername]")); + LocaleManager.addTabCompleteMain(this, "[residence]", "[flag]", "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/clearflags.java b/src/com/bekvon/bukkit/residence/commands/clearflags.java index 8ecec715d..5a04263b2 100644 --- a/src/com/bekvon/bukkit/residence/commands/clearflags.java +++ b/src/com/bekvon/bukkit/residence/commands/clearflags.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -30,7 +31,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return null; } - if (area.isRaidInitialized()) { + if (area.getRaid().isRaidInitialized()) { plugin.msg(sender, lm.Raid_cantDo); return null; } @@ -45,6 +46,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Remove all flags from residence"); c.get("Info", Arrays.asList("&eUsage: &6/res clearflags ")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index 20b2c14fb..7849acf1a 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -84,7 +85,6 @@ public void getLocale() { c.get("Info", Arrays.asList("&eUsage: &6/res command ", "Shows list, adds or removes allowed or disabled commands in residence", "Use _ to include command with multiple variables")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%allow%%block%%list", - "allow%%block%%list")); + LocaleManager.addTabCompleteMain(this, "[residence]%%allow%%block%%list", "allow%%block%%list"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index 8ce9b4181..0c488f731 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -55,7 +56,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Set compass pointer to residence location"); - c.get("Info", Arrays.asList("&eUsage: &6/res compass ")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + c.get("Info", Arrays.asList("&eUsage: &6/res compass ")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 75cd27013..28deac7ae 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -35,7 +36,7 @@ else if (args.length == 2) return true; } - if (res.isRaidInitialized()) { + if (res.getRaid().isRaidInitialized()) { plugin.msg(sender, lm.Raid_cantDo); return true; } @@ -103,7 +104,7 @@ public void getLocale() { c.get("Description", "Contracts residence in direction you looking"); c.get("Info", Arrays.asList("&eUsage: &6/res contract (residence) [amount]", "Contracts residence in direction you looking.", "Residence name is optional")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1", "1")); + LocaleManager.addTabCompleteMain(this, "[residence]%%1", "1"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/defend.java b/src/com/bekvon/bukkit/residence/commands/defend.java index 163b27bc6..87f5edf46 100644 --- a/src/com/bekvon/bukkit/residence/commands/defend.java +++ b/src/com/bekvon/bukkit/residence/commands/defend.java @@ -13,6 +13,7 @@ import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.ConfigManager; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -89,7 +90,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo ownerJoinRequests.put(target.getUniqueId(), res); RawMessage rm = new RawMessage(); - rm.add("join raid " + res.getName(), res.getName(), "res defend " + res.getName()); + rm.addText(plugin.getLM().getMessage(lm.Raid_defend_Invitation, res.getName())).addHover(res.getName()).addCommand("res defend " + res.getName()); rm.show(target.getPlayer()); return true; } @@ -103,12 +104,12 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - if (!res.isInPreRaid() && !res.isUnderRaid()) { + if (!res.getRaid().isInPreRaid() && !res.getRaid().isUnderRaid()) { plugin.msg(player, lm.Raid_defend_notRaided); return true; } - if (res.isUnderRaid() || res.isInPreRaid()) { + if (res.getRaid().isUnderRaid() || res.getRaid().isInPreRaid()) { ClaimedResidence req = ownerJoinRequests.get(player.getUniqueId()); if (req != null && req.equals(res)) { @@ -127,7 +128,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo joinRequests.put(player.getUniqueId(), res); RawMessage rm = new RawMessage(); plugin.msg(player, lm.Raid_defend_Sent, res.getName()); - rm.add("Accept raid defend from " + player.getDisplayName(), player.getName(), "res defend " + player.getName()); + rm.addText(plugin.getLM().getMessage(lm.Raid_defend_Invitation, player.getDisplayName())).addHover(player.getName()).addCommand("res defend " + rPlayer.getPlayer().getName()); rm.show(rPlayer.getPlayer()); return true; } @@ -145,7 +146,7 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Join raid defence on residence"); c.get("Info", Arrays.asList("&eUsage: &6/res defend [resName] (playerName)")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]%%[playername]")); + LocaleManager.addTabCompleteMain(this, "[cresidence]%%[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index baa27a318..6841bd7b6 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -37,7 +38,7 @@ else if (args.length == 2) { return true; } - if (res.isRaidInitialized()) { + if (res.getRaid().isRaidInitialized()) { plugin.msg(sender, lm.Raid_cantDo); return true; } @@ -109,7 +110,7 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Expands residence in direction you looking"); c.get("Info", Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%1", "1")); + LocaleManager.addTabCompleteMain(this, "[residence]%%1", "1"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index eb8e11429..a757e40f4 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -8,6 +8,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; @@ -42,10 +43,10 @@ public void getLocale() { if (c.getC().isConfigurationSection(c.getPath() + "SubCommands")) { keys = c.getC().getConfigurationSection(c.getPath() + "SubCommands").getKeys(false); } - + String path = c.getPath() + "SubCommands."; c.resetP(); - + for (String fl : keys) { String pt = path + fl; // No translation for custom flags for now @@ -75,9 +76,7 @@ public void getLocale() { keys.remove(fl.toString()); } - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "pset"), Arrays.asList("[residence]", "[flag]", - "[true%%false%%remove]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]", "[flag]", - "[true%%false%%remove]")); + LocaleManager.addTabCompleteSub(this, "pset", "[residence]", "[flag]", "[true%%false%%remove]"); + LocaleManager.addTabCompleteSub(this, "set", "[residence]", "[flag]", "[true%%false%%remove]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index d8a744724..f022a66a5 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -62,6 +63,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Give residence to player."); c.get("Info", Arrays.asList("&eUsage: &6/res give [player] <-s>", "Gives your owned residence to target player")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[playername]")); + LocaleManager.addTabCompleteMain(this, "[residence]", "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/gset.java b/src/com/bekvon/bukkit/residence/commands/gset.java index 2a7037a10..29d7b487c 100644 --- a/src/com/bekvon/bukkit/residence/commands/gset.java +++ b/src/com/bekvon/bukkit/residence/commands/gset.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -46,6 +47,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Set flags on a specific group for a Residence."); c.get("Info", Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index e84ddb742..9fc887ebe 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -9,6 +9,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -73,6 +74,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Show info on a residence."); c.get("Info", Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 7346a3cec..c54078dc8 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -53,7 +54,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (!res.isOwner(player)) return false; - if (res.isRaidInitialized()) { + if (res.getRaid().isRaidInitialized()) { plugin.msg(sender, lm.Raid_cantDo); return true; } @@ -80,6 +81,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Kicks player from residence."); c.get("Info", Arrays.asList("&eUsage: &6/res kick ", "You must be the owner or an admin to do this.", "Player should be online.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + LocaleManager.addTabCompleteMain(this, "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index d8a76509e..d6515f279 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -171,29 +172,28 @@ public void getLocale() { c.get("Description", "Manage residence leases"); c.get("Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("renew%%cost", "[residence]")); // Sub commands c.setP(c.getPath()+"SubCommands."); c.get("set.Description", "Set the lease time"); c.get("set.Info", Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "set"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "set", "[residence]"); c.get("renew.Description", "Renew the lease time"); c.get("renew.Info", Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "renew"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "renew", "[residence]"); c.get("list.Description", "Show lease list of current residence"); c.get("list.Info", Arrays.asList("&eUsage: &6/resadmin lease list ", "Prints out all subzones lease times")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "list", "[residence]"); c.get("expires.Description", "Lease end date"); c.get("expires.Info", Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "expires"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "expires", "[residence]"); c.get("cost.Description", "Shows renew cost"); c.get("cost.Info", Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "cost"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "cost", "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/leaveraid.java b/src/com/bekvon/bukkit/residence/commands/leaveraid.java index 1b52b0614..4ce5fb90e 100644 --- a/src/com/bekvon/bukkit/residence/commands/leaveraid.java +++ b/src/com/bekvon/bukkit/residence/commands/leaveraid.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.ConfigManager; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -36,7 +37,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo ResidenceRaid raid = owner.getJoinedRaid(); - if (raid == null || !raid.getRes().isUnderRaid() && !raid.getRes().isInPreRaid()) { + if (raid == null || !raid.getRes().getRaid().isUnderRaid() && !raid.getRes().getRaid().isInPreRaid()) { plugin.msg(player, lm.Raid_NotIn); return true; } @@ -60,7 +61,7 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Leave raid"); c.get("Info", Arrays.asList("&eUsage: &6/res leaveraid")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]%%[playername]")); + LocaleManager.addTabCompleteMain(this, "[cresidence]%%[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 2e3dcf74b..1779aa8d7 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -44,6 +45,6 @@ public void getLocale() { // Main command c.get("Description", "Show your limits."); c.get("Info", Arrays.asList("&eUsage: &6/res limits (playerName)", "Shows the limitations you have on creating and managing residences.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + LocaleManager.addTabCompleteMain(this, "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 5ca55decb..9bb87fa8a 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -7,6 +7,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -55,6 +56,6 @@ public void getLocale() { "Lists all the residences a player owns (except hidden ones).", "If listing your own residences, shows hidden ones as well.", "To list everyones residences, use /res listall.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]", "[worldname]")); + LocaleManager.addTabCompleteMain(this, "[playername]", "[worldname]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index 437a8ce45..c7ee13000 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -56,6 +57,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "List All Residences"); c.get("Info", Arrays.asList("&eUsage: &6/res listall <-a/-f>", "Lists all residences")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); + LocaleManager.addTabCompleteMain(this, "[worldname]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/listhidden.java b/src/com/bekvon/bukkit/residence/commands/listhidden.java index eaf60243b..ad2d79763 100644 --- a/src/com/bekvon/bukkit/residence/commands/listhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listhidden.java @@ -5,6 +5,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -49,6 +50,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "List Hidden Residences"); c.get("Info", Arrays.asList("&eUsage: &6/res listhidden ", "Lists hidden residences for a player.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + LocaleManager.addTabCompleteMain(this, "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java index 0ffdf5df7..933fb4c61 100644 --- a/src/com/bekvon/bukkit/residence/commands/lset.java +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -85,7 +86,6 @@ public void getLocale() { "&eUsage: &6/res lset Info", "Blacklisting a material prevents it from being placed in the residence.", "Ignorelist causes a specific material to not be protected by Residence.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), - Arrays.asList("[residence]%%blacklist%%ignorelist", "blacklist%%ignorelist%%[material]", "[material]")); + LocaleManager.addTabCompleteMain(this, "[residence]%%blacklist%%ignorelist", "blacklist%%ignorelist%%[material]", "[material]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index bbd1367ea..ab143b936 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -10,6 +10,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -166,7 +167,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo res = null; if (args.length == 1) res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length ==2) + else if (args.length == 2) res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { plugin.msg(player, lm.Invalid_Residence); @@ -417,11 +418,11 @@ public void getLocale() { c.get("Info.Description", "Get economy Info on residence"); c.get("Info.Info", Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "Info"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "Info", "[residence]"); c.get("list.Description", "Lists rentable and for sale residences."); c.get("list.Info", Arrays.asList("&eUsage: &6/res market list [rent/sell]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "list"), Arrays.asList("rent%%sell")); + LocaleManager.addTabCompleteSub(this, "list", "rent%%sell"); c.get("list.SubCommands.rent.Description", "Lists rentable residences."); c.get("list.SubCommands.rent.Info", Arrays.asList("&eUsage: &6/res market list rent")); @@ -432,24 +433,24 @@ public void getLocale() { c.get("sell.Description", "Sell a residence"); c.get("sell.Info", Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", "Another player can buy the residence with /res market buy")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sell"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "sell", "[residence]"); c.get("sign.Description", "Set market sign"); c.get("sign.Info", Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "sign"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "sign", "[residence]"); c.get("buy.Description", "Buy a residence"); c.get("buy.Info", Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "buy"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "buy", "[residence]"); c.get("unsell.Description", "Stops selling a residence"); c.get("unsell.Info", Arrays.asList("&eUsage: &6/res market unsell [residence]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "unsell"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "unsell", "[residence]"); c.get("rent.Description", "ent a residence"); c.get("rent.Info", Arrays.asList("&eUsage: &6/res market rent [residence] ", "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rent"), Arrays.asList("[cresidence]", "true%%false")); + LocaleManager.addTabCompleteSub(this, "rent", "[cresidence]", "true%%false"); c.get("rentable.Description", "Make a residence rentable."); c.get("rentable.Info", Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", @@ -457,16 +458,15 @@ public void getLocale() { "If is true, the residence will be able to be rented again before rent expires.", "If is true, the residence will stay in market after last renter will be removed.", "If is true, money for rent will be automaticaly taken from players balance if he chosen that option when renting")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "rentable"), Arrays.asList("[residence]", "1000", "7", "true", "true", - "true")); + LocaleManager.addTabCompleteSub(this, "rentable", "[residence]", "1000", "7", "true", "true", "true"); c.get("autopay.Description", "Sets residence AutoPay to given value"); c.get("autopay.Info", Arrays.asList("&eUsage: &6/res market autopay [true/false]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "autopay"), Arrays.asList("[residence]%%true%%false", "true%%false")); + LocaleManager.addTabCompleteSub(this, "autopay", "[residence]%%true%%false", "true%%false"); c.get("payrent.Description", "Pays rent for defined residence"); c.get("payrent.Info", Arrays.asList("&eUsage: &6/res market payrent ")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "payrent"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "payrent", "[residence]"); c.get("confirm.Description", "Confirms residence unrent/release action"); c.get("confirm.Info", Arrays.asList("&eUsage: &6/res market confirm")); @@ -475,8 +475,8 @@ public void getLocale() { c.get("unrent.Info", Arrays.asList("&eUsage: &6/res market unrent [residence]", "If you are the renter, this command releases the rent on the house for you.", "If you are the owner, this command makes the residence not for rent anymore.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "release"), Arrays.asList("[residence]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "unrent"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "release", "[residence]"); + LocaleManager.addTabCompleteSub(this, "unrent", "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index 88592c6a0..130b36483 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -37,6 +38,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Check if material exists by its id"); c.get("Info", Arrays.asList("&eUsage: &6/res material [material]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[materialId]")); + LocaleManager.addTabCompleteMain(this, "[materialId]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index f37482565..c76b6d4bf 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -95,6 +96,6 @@ public void getLocale() { c.get("Description", "Manage residence enter / leave messages"); c.get("Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]", "enter%%leave", "[enter]%%[leave]")); + LocaleManager.addTabCompleteMain(this, "[cresidence]", "enter%%leave", "[enter]%%[leave]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/mirror.java b/src/com/bekvon/bukkit/residence/commands/mirror.java index af0460661..3a2c19f97 100644 --- a/src/com/bekvon/bukkit/residence/commands/mirror.java +++ b/src/com/bekvon/bukkit/residence/commands/mirror.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -32,6 +33,6 @@ public void getLocale() { c.get("Description", "Mirrors Flags"); c.get("Info", Arrays.asList("&eUsage: &6/res mirror [Source Residence] [Target Residence]", "Mirrors flags from one residence to another. You must be owner of both or a admin to do this.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]", "[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]", "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index 7fc8fc671..90a4870ca 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -44,6 +45,6 @@ public void getLocale() { // Main command c.get("Description", "Add player to residence."); c.get("Info", Arrays.asList("&eUsage: &6/res padd [player]", "Adds essential flags for player")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); + LocaleManager.addTabCompleteMain(this, "[residence]%%[playername]", "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index 0bac8a0e3..acf7b88f1 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -41,7 +42,7 @@ public void getLocale() { // Main command c.get("Description", "Remove player from residence."); c.get("Info", Arrays.asList("&eUsage: &6/res pdel [player]", "Removes essential flags from player")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]")); + LocaleManager.addTabCompleteMain(this, "[residence]%%[playername]", "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index fb09c6fc4..0396b18b8 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; @@ -116,8 +117,6 @@ public void getLocale() { c.get("Description", "Set flags on a specific player for a Residence."); c.get("Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[playername]", "[playername]%%[flag]", - "[flag]%%true%%false%%remove", - "true%%false%%remove")); + LocaleManager.addTabCompleteMain(this, "[residence]%%[playername]", "[playername]%%[flag]", "[flag]%%true%%false%%remove", "true%%false%%remove"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/raid.java b/src/com/bekvon/bukkit/residence/commands/raid.java index b93589604..2b5d7eeb4 100644 --- a/src/com/bekvon/bukkit/residence/commands/raid.java +++ b/src/com/bekvon/bukkit/residence/commands/raid.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.ConfigManager; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -21,6 +22,7 @@ public class raid implements cmd { enum States { start, stop, immunity, kick; + public static States getState(String name) { for (States one : States.values()) { if (one.toString().equalsIgnoreCase(name)) @@ -109,6 +111,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; case "clear": res.getRaid().setImmunityUntil(null); + res.getRaid().setEndsAt(0L); + res.getRPlayer().setLastRaidDefendTimer(0L); plugin.msg(sender, lm.Raid_notImmune); return true; @@ -135,7 +139,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } ResidenceRaid raid = rplayer.getJoinedRaid(); - if (raid == null || !raid.getRes().isUnderRaid() && !raid.getRes().isInPreRaid()) { + if (raid == null || !raid.isUnderRaid() && !raid.isInPreRaid()) { plugin.msg(sender, lm.Raid_NotIn); return true; } @@ -166,29 +170,46 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return null; } - if (res.isUnderRaid() || res.isInPreRaid()) { + if (res.getRaid().isUnderRaid() || res.getRaid().isInPreRaid()) { return null; } - boolean started = res.preStartRaid(null); + boolean started = res.getRaid().preStartRaid(null); if (started) { - res.startRaid(); + res.getRaid().startRaid(); return true; } break; case stop: - break; + + res = null; + + if (args.length > 1) + res = plugin.getResidenceManager().getByName(args[1]); + if (res == null && sender instanceof Player) + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return null; + } + + if (!res.getRaid().isUnderRaid() && !res.getRaid().isInPreRaid()) { + plugin.msg(sender, lm.Raid_defend_notRaided); + return null; + } + + res.getRaid().endRaid(); + res.getRaid().setEndsAt(0L); + + plugin.msg(sender, lm.Raid_stopped, res.getName()); + return true; default: break; } - // raid start [resname/currentres] - // raid stop [resname/currentres] - // raid kick [playerName] - // raid immunity [add/take/set/clear] [resname/currentres] [time] - return false; } @@ -198,11 +219,11 @@ public void getLocale() { c.get("Description", "Manage raid in residence"); c.get("Info", Arrays.asList("&eUsage: &6/res raid start [resname] (playerName)", "&6/res raid stop [resname]", "&6/res raid kick [playerName]", "&6/res raid immunity [add/take/set/clear] [resname/currentres] [time]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("start%%stop%%kick%%immunity")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "start"), Arrays.asList("[residence]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "stop"), Arrays.asList("[residence]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "kick"), Arrays.asList("[playername]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "immunity"), Arrays.asList("add%%take%%set%%clear", "[residence]")); + + LocaleManager.addTabCompleteSub(this, "start", "[residence]"); + LocaleManager.addTabCompleteSub(this, "stop", "[residence]"); + LocaleManager.addTabCompleteSub(this, "kick", "[playername]"); + LocaleManager.addTabCompleteSub(this, "immunity", "add%%take%%set%%clear", "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/raidstatus.java b/src/com/bekvon/bukkit/residence/commands/raidstatus.java index e10505e04..689a522f7 100644 --- a/src/com/bekvon/bukkit/residence/commands/raidstatus.java +++ b/src/com/bekvon/bukkit/residence/commands/raidstatus.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.ConfigManager; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -70,7 +71,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.msg(sender, "&7----------- &f" + res.getName() + "(" + res.getOwner() + ") &7-----------"); if (res.getRaid().isImmune()) { plugin.msg(sender, "&eImmune to raids for next: " + Utils.to24hourShort(raid.getImmunityUntil() - System.currentTimeMillis() + 1000L)); - } else if (res.isInPreRaid()) { + } else if (res.getRaid().isInPreRaid()) { plugin.msg(sender, "&7Raid starts in: " + Utils.to24hourShort(raid.getStartsAt() - System.currentTimeMillis())); RawMessage rm = new RawMessage(); rm.add("&7Attackers: &4" + raid.getAttackers().size(), getAttackers(raid)); @@ -78,7 +79,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo rm = new RawMessage(); rm.add("&7Defenders: &2" + raid.getDefenders().size(), getDefenders(raid)); rm.show(sender); - } else if (res.isUnderRaid()) { + } else if (res.getRaid().isUnderRaid()) { plugin.msg(sender, "&7Raid ends in: " + Utils.to24hourShort(raid.getEndsAt() - System.currentTimeMillis())); RawMessage rm = new RawMessage(); rm.add("&7Attackers: &4" + raid.getAttackers().size(), getAttackers(raid)); @@ -133,7 +134,7 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Check raid status for a residence"); c.get("Info", Arrays.asList("&eUsage: &6/res raidstatus (resName/playerName)")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]%%[playername]")); + LocaleManager.addTabCompleteMain(this, "[cresidence]%%[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index defd7801e..f12d3321d 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -9,6 +9,7 @@ import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -190,7 +191,7 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Joins current or defined residence chat channel"); c.get("Info", Arrays.asList("&eUsage: &6/res rc (residence)", "Join residence chat channel.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); c.setP(c.getPath() + "SubCommands."); c.get("leave.Description", "Leaves current residence chat channel"); @@ -204,6 +205,6 @@ public void getLocale() { c.get("kick.Description", "Kicks player from channel"); c.get("kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", "Kicks player from channel")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "kick"), Arrays.asList("[playername]")); + LocaleManager.addTabCompleteSub(this, "kick", "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index 4b3ff84a6..625f8e86e 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -5,6 +5,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -61,6 +62,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "reload lanf or config files"); c.get("Info", Arrays.asList("&eUsage: &6/res reload [config/lang/groups/flags]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("config%%lang%%groups%%flags")); + LocaleManager.addTabCompleteMain(this, "config%%lang%%groups%%flags"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 16dc848ba..d49bf8c06 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -7,6 +7,7 @@ import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; @@ -63,7 +64,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - if (res.isRaidInitialized() && !resadmin) { + if (res.getRaid().isRaidInitialized() && !resadmin) { plugin.msg(sender, lm.Raid_noRemoval); return true; } @@ -104,6 +105,6 @@ public void getLocale() { // Main command c.get("Description", "Remove residences."); c.get("Info", Arrays.asList("&eUsage: &6/res remove ")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/removeall.java b/src/com/bekvon/bukkit/residence/commands/removeall.java index 9131fa501..d426c8cd8 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeall.java +++ b/src/com/bekvon/bukkit/residence/commands/removeall.java @@ -5,6 +5,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -36,7 +37,7 @@ public void getLocale() { c.get("Description", "Remove all residences owned by a player."); c.get("Info", Arrays.asList("&eUsage: &6/res removeall [owner]", "Removes all residences owned by a specific player.'", "Requires /resadmin if you use it on anyone besides yourself.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]")); + LocaleManager.addTabCompleteMain(this, "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index ce6c4e1ea..564ea1605 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -34,6 +35,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Removes all residences from particular world"); c.get("Info", Arrays.asList("&eUsage: &6/res removeworld [worldName]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]")); + LocaleManager.addTabCompleteMain(this, "[worldname]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/rename.java b/src/com/bekvon/bukkit/residence/commands/rename.java index 4663684c5..44492f6d1 100644 --- a/src/com/bekvon/bukkit/residence/commands/rename.java +++ b/src/com/bekvon/bukkit/residence/commands/rename.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -31,6 +32,6 @@ public void getLocale() { c.get("Description", "Renames a residence."); c.get("Info", Arrays.asList("&eUsage: &6/res rename [OldName] [NewName]", "You must be the owner or an admin to do this.", "The name must not already be taken by another residence.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/renamearea.java b/src/com/bekvon/bukkit/residence/commands/renamearea.java index d49062c4d..4b15a7849 100644 --- a/src/com/bekvon/bukkit/residence/commands/renamearea.java +++ b/src/com/bekvon/bukkit/residence/commands/renamearea.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -39,6 +40,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Rename area name for residence"); c.get("Info", Arrays.asList("&eUsage: &6/res removeworld [residence] [oldAreaName] [newAreaName]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/resadmin.java b/src/com/bekvon/bukkit/residence/commands/resadmin.java index 649129b57..1fe1c0e55 100644 --- a/src/com/bekvon/bukkit/residence/commands/resadmin.java +++ b/src/com/bekvon/bukkit/residence/commands/resadmin.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -37,6 +38,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Enabled or disable residence admin"); c.get("Info", Arrays.asList("&eUsage: &6/res resadmin [on/off]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("on%%off")); + LocaleManager.addTabCompleteMain(this, "on%%off"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index dba02a0c8..38689dc35 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -43,7 +44,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - if (res.isRaidInitialized() && !resadmin) { + if (res.getRaid().isRaidInitialized() && !resadmin) { plugin.msg(sender, lm.Raid_cantDo); return true; } @@ -76,6 +77,6 @@ public void getLocale() { c.get("Description", "Reset residence to default flags."); c.get("Info", Arrays.asList("&eUsage: &6/res reset ", "Resets the flags on a residence to their default. You must be the owner or an admin to do this.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index ee6626e1b..a3780cf2a 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -9,6 +9,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.RandomTeleport; @@ -121,6 +122,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Teleports to random location in world"); c.get("Info", Arrays.asList("&eUsage: &6/res rt (worldname) (playerName)", "Teleports you to random location in defined world.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[worldname]", "[playername]")); + LocaleManager.addTabCompleteMain(this, "[worldname]", "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index d486654f3..0e3eae0d1 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -10,6 +10,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -214,7 +215,7 @@ public void getLocale() { c.get("auto.Description", "Turns on auto selection tool"); c.get("auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "auto"), Arrays.asList("[playername]")); + LocaleManager.addTabCompleteSub(this, "auto", "[playername]"); c.get("cost.Description", "Display selection cost"); c.get("cost.Info", Arrays.asList("&eUsage: &6/res select cost")); @@ -239,7 +240,7 @@ public void getLocale() { c.get("residence.Description", "Select a existing area in a residence."); c.get("residence.Info", Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "residence"), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteSub(this, "residence", "[residence]"); c.get("worldedit.Description", "Set selection using the current WorldEdit selection."); c.get("worldedit.Info", Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection.")); diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java index 4e7938c4b..3ff35f427 100644 --- a/src/com/bekvon/bukkit/residence/commands/server.java +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -30,7 +31,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.msg(player, lm.Invalid_Residence); return true; } - + ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); res.getPermissions().setOwner(plugin.getServerLandName(), false); plugin.msg(player, lm.Residence_OwnerChange, args[0], plugin.getServerLandName()); @@ -44,6 +45,6 @@ public void getLocale() { c.get("Description", "Make land server owned."); c.get("Info", Arrays.asList("&eUsage: &6/resadmin server [residence]", "Make a residence server owned.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); + LocaleManager.addTabCompleteMain(this, "[cresidence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 6e202bf94..9f0af26eb 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; @@ -76,7 +77,6 @@ public void getLocale() { c.get("Description", "Set general flags on a Residence"); c.get("Info", Arrays.asList("&eUsage: &6/res set [flag] [true/false/remove]", "To see a list of flags, use /res flags ?", "These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]%%[flag]", "[flag]%%true%%false%%remove", - "true%%false%%remove")); + LocaleManager.addTabCompleteMain(this, "[residence]%%[flag]", "[flag]%%true%%false%%remove", "true%%false%%remove"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/setall.java b/src/com/bekvon/bukkit/residence/commands/setall.java index e6b06f4f8..29bea0877 100644 --- a/src/com/bekvon/bukkit/residence/commands/setall.java +++ b/src/com/bekvon/bukkit/residence/commands/setall.java @@ -7,6 +7,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; @@ -62,6 +63,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Set general flags on all residences"); c.get("Info", Arrays.asList("&eUsage: &6/res setall [flag] [true/false/remove]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[flag]", "true%%false%%remove")); + LocaleManager.addTabCompleteMain(this, "[flag]", "true%%false%%remove"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/setallfor.java b/src/com/bekvon/bukkit/residence/commands/setallfor.java index 60cfcf6e4..44df29882 100644 --- a/src/com/bekvon/bukkit/residence/commands/setallfor.java +++ b/src/com/bekvon/bukkit/residence/commands/setallfor.java @@ -5,6 +5,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; @@ -63,6 +64,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Set general flags on all residences owned by particular player"); c.get("Info", Arrays.asList("&eUsage: &6/res setallfor [playerName] [flag] [true/false/remove]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[playername]", "[flag]", "true%%false%%remove")); + LocaleManager.addTabCompleteMain(this, "[playername]", "[flag]", "true%%false%%remove"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/setmain.java b/src/com/bekvon/bukkit/residence/commands/setmain.java index 34e65d9a4..269a29435 100644 --- a/src/com/bekvon/bukkit/residence/commands/setmain.java +++ b/src/com/bekvon/bukkit/residence/commands/setmain.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -60,6 +61,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Sets defined residence as main to show up in chat as prefix"); c.get("Info", Arrays.asList("&eUsage: &6/res setmain (residence)", "Set defined residence as main.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index 5b773ee1b..1b87854de 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -5,6 +5,7 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -31,7 +32,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (area != null) { - if (area.isRaidInitialized() && !resadmin) { + if (area.getRaid().isRaidInitialized() && !resadmin) { plugin.msg(sender, lm.Raid_cantDo); return true; } @@ -65,7 +66,7 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Change owner of a residence."); c.get("Info", Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[cresidence]")); + LocaleManager.addTabCompleteMain(this, "[cresidence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index bd91496a2..5e47b52d8 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -16,6 +16,7 @@ import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -419,19 +420,19 @@ public void getLocale() { c.get("vote.Description", "Vote for residence shop"); c.get("vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", "Votes for current or defined residence")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "vote"), Arrays.asList("[residence]", "10")); + LocaleManager.addTabCompleteSub(this, "vote", "[residence]", "10"); c.get("like.Description", "Give like for residence shop"); c.get("like.Info", Arrays.asList("&eUsage: &6/res shop like ", "Gives like for residence shop")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "like"), Arrays.asList("[residenceshop]")); + LocaleManager.addTabCompleteSub(this, "like", "[residenceshop]"); c.get("votes.Description", "Shows res shop votes"); c.get("votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", "Shows full vote list of current or defined residence shop")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "votes"), Arrays.asList("[residenceshop]")); + LocaleManager.addTabCompleteSub(this, "votes", "[residenceshop]"); c.get("likes.Description", "Shows res shop likes"); c.get("likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", "Shows full like list of current or defined residence shop")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "likes"), Arrays.asList("[residenceshop]")); + LocaleManager.addTabCompleteSub(this, "likes", "[residenceshop]"); c.get("setdesc.Description", "Sets residence shop description"); c.get("setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n")); @@ -439,7 +440,7 @@ public void getLocale() { c.get("createboard.Description", "Create res shop board"); c.get("createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", "Creates res shop board from selected area. Place - position from which to start filling board")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName(), "createboard"), Arrays.asList("1")); + LocaleManager.addTabCompleteSub(this, "createboard", "1"); c.get("deleteboard.Description", "Deletes res shop board"); c.get("deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", "Deletes res shop board bi right clicking on one of signs")); diff --git a/src/com/bekvon/bukkit/residence/commands/show.java b/src/com/bekvon/bukkit/residence/commands/show.java index 599e4ba36..bba1e9f61 100644 --- a/src/com/bekvon/bukkit/residence/commands/show.java +++ b/src/com/bekvon/bukkit/residence/commands/show.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Visualizer; @@ -48,6 +49,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Show residence boundaries"); c.get("Info", Arrays.asList("&eUsage: &6/res show ")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java index b6ed521eb..fa4e399b7 100644 --- a/src/com/bekvon/bukkit/residence/commands/sublist.java +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -52,7 +53,7 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "List Residence Subzones"); c.get("Info", Arrays.asList("&eUsage: &6/res sublist ", "List subzones within a residence.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index 4d1813ca9..39d22963a 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -39,7 +40,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - if (res.isRaidInitialized()) { + if (res.getRaid().isRaidInitialized()) { plugin.msg(sender, lm.Raid_cantDo); return true; } @@ -67,7 +68,7 @@ public void getLocale() { c.get("Description", "Create subzones in residences."); c.get("Info", Arrays.asList("&eUsage: &6/res subzone [subzone name]", "If residence name is left off, will attempt to use residence your standing in.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index a8d521e64..e52dea2db 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -31,7 +32,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - if (res.isRaidInitialized() && res.getRaid().isAttacker(player)) { + if (res.getRaid().isRaidInitialized() && res.getRaid().isAttacker(player)) { plugin.msg(player, lm.Raid_cantDo); return true; } @@ -46,6 +47,6 @@ public void getLocale() { c.get("Description", "Teleport to a residence"); c.get("Info", Arrays.asList("&eUsage: &6/res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", "Your permission group must also be allowed to teleport by the server admin.")); - Residence.getInstance().getLocaleManager().CommandTab.put(Arrays.asList(this.getClass().getSimpleName()), Arrays.asList("[residence]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index e7e1b54cd..c6ca37776 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -24,6 +24,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.raid.ResidenceRaid; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { @@ -437,9 +438,10 @@ public void removeBossBar(BossBarInfo bossBar) { } public void addBossBar(BossBarInfo barInfo) { + Debug.D("add bossbar"); if (!barMap.containsKey(barInfo.getNameOfBar().toLowerCase())) { barMap.put(barInfo.getNameOfBar().toLowerCase(), barInfo); - Residence.getInstance().getBossBarManager().Show(barInfo); + Residence.getInstance().getBossBarManager().showBar(barInfo); } else { BossBarInfo old = getBossBar(barInfo.getNameOfBar().toLowerCase()); if (old != null) { @@ -474,7 +476,7 @@ public void addBossBar(BossBarInfo barInfo) { if (barInfo.getAuto() != null) old.setAuto(barInfo.getAuto()); } - Residence.getInstance().getBossBarManager().Show(old); + Residence.getInstance().getBossBarManager().showBar(old); } } @@ -501,7 +503,7 @@ public void clearBossMaps() { public ClaimedResidence getCurrentlyRaidedResidence() { for (ClaimedResidence one : getResList()) { - if (one.isUnderRaid() || one.isInPreRaid()) { + if (one.getRaid().isUnderRaid() || one.getRaid().isInPreRaid()) { return one; } } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index f1df6cc1c..c05161cc3 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -131,11 +131,15 @@ public enum lm { Raid_defend_Joined("&7Joined &2%1 &7defence forces!"), Raid_defend_Sent("&7Request to join raid defence is sent, wait for confirmation"), + Raid_defend_Join("&7Join &6%1 &7raid defence"), + Raid_defend_Invitation("&7Accept raid defend from &6%1"), Raid_defend_JoinedDef("&2%1&7 joined defence forces!"), Raid_defend_IsOffline("&cCan't join defend team while owner is offline!"), Raid_defend_noSelf("&cYou already defending this residence"), Raid_defend_notRaided("&cResidence is not under the raid"), Raid_defend_alreadyInAnother("&cCan't join this residence defence, you are in another one already (%1)"), + + Raid_stopped("&eRain on &6%1 &ewas stopped"), info_years("&e%1 &6years "), info_oneYear("&e%1 &6year "), diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 046273941..0d5afc838 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -187,7 +187,7 @@ public void setForRent(Player player, ClaimedResidence res, int amount, int days return; } - if (res.isRaidInitialized() && !resadmin) { + if (res.getRaid().isRaidInitialized() && !resadmin) { plugin.msg(player, lm.Raid_cantDo); return; } @@ -259,7 +259,7 @@ public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean r return; } - if (res.isRaidInitialized() && !resadmin) { + if (res.getRaid().isRaidInitialized() && !resadmin) { plugin.msg(player, lm.Raid_cantDo); return; } @@ -417,7 +417,7 @@ public void unrent(Player player, ClaimedResidence res, boolean resadmin) { return; } - if (res.isRaidInitialized() && !resadmin) { + if (res.getRaid().isRaidInitialized() && !resadmin) { plugin.msg(player, lm.Raid_cantDo); return; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index c175d8bb0..b00988560 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -229,7 +229,7 @@ public static boolean canBreakBlock(Player player, Block block, boolean inform) boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); - if (res != null && res.isUnderRaid()) { + if (res != null && res.getRaid().isUnderRaid()) { if (res.getRaid().isAttacker(player.getUniqueId()) && ConfigManager.RaidAttackerBlockBreak || res.getRaid().isDefender(player.getUniqueId()) && ConfigManager.RaidDefenderBlockBreak) { hasdestroy = true; } @@ -648,7 +648,7 @@ public static boolean canPlaceBlock(Player player, Block block, boolean informPl FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(block.getLocation(), player); boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - if (res != null && res.isUnderRaid()) { + if (res != null && res.getRaid().isUnderRaid()) { if (res.getRaid().isAttacker(player.getUniqueId()) && ConfigManager.RaidAttackerBlockPlace || res.getRaid().isDefender(player.getUniqueId()) && ConfigManager.RaidDefenderBlockPlace) { hasplace = true; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index a96cebc52..0540862dd 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1415,12 +1415,12 @@ public static boolean canDamageEntity(Entity damager, Entity victim, boolean inf if (!(victim instanceof Player)) return true; - if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.isUnderRaid() && area.getRaid().onSameTeam(attacker, (Player) victim) + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.getRaid().isUnderRaid() && area.getRaid().onSameTeam(attacker, (Player) victim) && !ConfigManager.RaidFriendlyFire) { return false; } - if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.isUnderRaid() && !area.getRaid().onSameTeam(attacker, (Player) victim)) { + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.getRaid().isUnderRaid() && !area.getRaid().onSameTeam(attacker, (Player) victim)) { return true; } @@ -1551,12 +1551,12 @@ public void onEntityDamage(EntityDamageEvent event) { if (!(ent instanceof Player)) return; - if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.isUnderRaid() && area.getRaid().onSameTeam(attacker, (Player) ent) + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.getRaid().isUnderRaid() && area.getRaid().onSameTeam(attacker, (Player) ent) && !ConfigManager.RaidFriendlyFire) { event.setCancelled(true); } - if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.isUnderRaid() && !area.getRaid().onSameTeam(attacker, (Player) ent)) { + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.getRaid().isUnderRaid() && !area.getRaid().onSameTeam(attacker, (Player) ent)) { return; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index e0f29a4ef..6430afbee 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1260,7 +1260,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - if (res != null && res.isUnderRaid()) { + if (res != null && res.getRaid().isUnderRaid()) { if (res.getRaid().isDefender(player) && !ConfigManager.RaidDefenderContainerUsage) { Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); if (result != null && result.equals(Flags.container)) { @@ -1279,7 +1279,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (hasuse || result.equals(Flags.container)) { - if (res != null && res.isUnderRaid()) { + if (res != null && res.getRaid().isUnderRaid()) { if (res.getRaid().isAttacker(player)) { break main; } @@ -1293,7 +1293,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (res != null && res.isUnderRaid()) { + if (res != null && res.getRaid().isUnderRaid()) { if (res.getRaid().isAttacker(player)) { break main; } @@ -1316,7 +1316,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (isCanUseEntity_BothClick(mat, block)) { - if (res != null && res.isUnderRaid()) { + if (res != null && res.getRaid().isUnderRaid()) { if (res.getRaid().isAttacker(player)) { break main; } @@ -2078,7 +2078,7 @@ public void run() { if (move) { - if (res.isUnderRaid()) { + if (res.getRaid().isUnderRaid()) { if (res.getRaid().isAttacker(player.getUniqueId()) || res.getRaid().isDefender(player.getUniqueId())) { return true; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index cede50f10..dd334dea2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -43,8 +43,6 @@ import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; import com.bekvon.bukkit.residence.event.ResidenceAreaDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; -import com.bekvon.bukkit.residence.event.ResidenceRaidPreStartEvent; -import com.bekvon.bukkit.residence.event.ResidenceRaidStartEvent; import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; import com.bekvon.bukkit.residence.event.ResidenceTPEvent; @@ -1286,7 +1284,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r boolean isAdmin = plugin.isResAdminOn(reqPlayer); - if (this.isRaidInitialized()) { + if (this.getRaid().isRaidInitialized()) { if (this.getRaid().isAttacker(targetPlayer)) { plugin.msg(reqPlayer, lm.Raid_cantDo); return; @@ -1323,7 +1321,7 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } ClaimedResidence old = plugin.getTeleportMap().get(targetPlayer.getName()); - + if (old == null || !old.equals(this)) { int distance = isSafeTp(reqPlayer); if (distance > 6) { @@ -1472,7 +1470,7 @@ public Map save() { if (createTime != 0L) root.put("CreatedOn", createTime); - if (this.isTopArea() && this.isUnderRaidCooldown()) { + if (this.isTopArea() && this.getRaid().isUnderRaidCooldown()) { root.put("LastRaid", this.getRaid().getEndsAt()); } @@ -1830,7 +1828,7 @@ public boolean renameArea(Player player, String oldName, String newName, boolean return false; } - if (isRaidInitialized() && !resadmin) { + if (this.getRaid().isRaidInitialized() && !resadmin) { plugin.msg(player, lm.Raid_cantDo); return false; } @@ -2043,104 +2041,12 @@ public boolean kickFromResidence(Player player) { // this.town = town; // } - public boolean isUnderRaid() { - return getRaid().getEndsAt() > System.currentTimeMillis() - && getRaid().getStartsAt() < System.currentTimeMillis(); - } - - public boolean isRaidInitialized() { - if (isUnderRaid() || isInPreRaid()) - return true; - if (this.getParent() != null) - return this.getParent().isRaidInitialized(); - return false; - } - - public boolean isInPreRaid() { - return getRaid().getEndsAt() > System.currentTimeMillis() - && getRaid().getStartsAt() > System.currentTimeMillis(); - } - - public boolean canRaid() { - return !isUnderRaid() && this.getRaid().getCooldownEnd() < System.currentTimeMillis(); - } - public ResidenceRaid getRaid() { if (raid == null) raid = new ResidenceRaid(this); return raid; } - public boolean isUnderRaidCooldown() { - return this.getRaid().getCooldownEnd() > System.currentTimeMillis(); - } - - public boolean preStartRaid(Player attacker) { - - if (isUnderRaid() || this.isInPreRaid()) - return false; - - if (this.getRaid().getCooldownEnd() > System.currentTimeMillis()) - return false; - - if (attacker != null) - getRaid().addAttacker(attacker); - getRaid().addDefender(this.getRPlayer().getPlayer()); - getRaid().setStartsAt(System.currentTimeMillis() + (ConfigManager.PreRaidTimer * 1000)); - getRaid().setEndsAt(getRaid().getStartsAt() + (ConfigManager.RaidTimer * 1000)); - - ResidenceRaidPreStartEvent start = new ResidenceRaidPreStartEvent(getResidence(), getRaid().getAttackers()); - - Bukkit.getPluginManager().callEvent(start); - if (start.isCancelled()) - return false; - - if (attacker != null) - plugin.getPlayerManager().getResidencePlayer(attacker).setLastRaidAttackTimer(System.currentTimeMillis()); - this.getRPlayer().setLastRaidDefendTimer(System.currentTimeMillis()); - getRaid().setImmunityUntil(ConfigManager.RaidCooldown * 1000L); - - return true; - } - - Integer repeatId = -1; - - public boolean startRaid() { - - if (!isUnderRaid() && !this.isInPreRaid()) - return false; - - ResidenceRaidStartEvent start = new ResidenceRaidStartEvent(getResidence(), getRaid().getAttackers()); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - Bukkit.getPluginManager().callEvent(start); - if (start.isCancelled()) - start.getRes().getRaid().endRaid(); - } - }, ((getRaid().getStartsAt() - System.currentTimeMillis()) / 50)); - - repeatId = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { - @Override - public void run() { - if (!isUnderRaid() && !isInPreRaid()) { - Bukkit.getServer().getScheduler().cancelTask(repeatId); - return; - } - getRaid().showBossBar(); - } - }, this.isUnderRaid() ? 20L : 0L, 20L); - - getRaid().setSchedId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - getRaid().endRaid(); - } - }, ((getRaid().getEndsAt() - System.currentTimeMillis()) / 50))); - - return true; - } - @Override public boolean equals(Object obj) { if (obj == null) @@ -2170,8 +2076,4 @@ public void showBounds(Player player, boolean showOneTime) { v.setOnce(showOneTime); plugin.getSelectionManager().showBounds(player, v); } - - private ClaimedResidence getResidence() { - return this; - } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 402e354af..1a555e011 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1113,7 +1113,7 @@ public boolean renameResidence(Player player, String oldName, String newName, bo return false; } - if (res.isRaidInitialized() && !resadmin) { + if (res.getRaid().isRaidInitialized() && !resadmin) { plugin.msg(player, lm.Raid_cantDo); return false; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index cb17e8172..d3a42f055 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -347,7 +347,7 @@ public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String f return false; } - if (this.residence.isRaidInitialized() && !resadmin) { + if (this.residence.getRaid().isRaidInitialized() && !resadmin) { Residence.getInstance().msg(sender, lm.Raid_noFlagChange); return false; } @@ -380,7 +380,7 @@ public boolean setGroupFlag(Player player, String group, String flag, String fla if (f != null) flag = f.toString(); - if (this.residence.isRaidInitialized() && !resadmin) { + if (this.residence.getRaid().isRaidInitialized() && !resadmin) { Residence.getInstance().msg(player, lm.Raid_noFlagChange); return false; } @@ -422,7 +422,7 @@ public boolean setFlag(CommandSender sender, String flag, FlagState state, boole if (f != null) flag = f.toString(); - if (this.residence.isRaidInitialized() && !resadmin) { + if (this.residence.getRaid().isRaidInitialized() && !resadmin) { Residence.getInstance().msg(sender, lm.Raid_noFlagChange); return false; } diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java index b26f29519..0561b4005 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -16,7 +16,10 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceRaidEndEvent; +import com.bekvon.bukkit.residence.event.ResidenceRaidPreStartEvent; +import com.bekvon.bukkit.residence.event.ResidenceRaidStartEvent; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceRaid { @@ -28,7 +31,9 @@ public class ResidenceRaid { private HashMap attackers = new HashMap(); private HashMap defenders = new HashMap(); - private int schedId = -1; + private int schedRaidEndId = -1; + private int shedRaidStartId = -1; + private int schedBossBarId = -1; public ResidenceRaid(ClaimedResidence res) { this.res = res; @@ -151,37 +156,29 @@ public void setStartsAt(Long startsAt) { this.startsAt = startsAt; } - public int getSchedId() { - return schedId; - } - - public void setSchedId(int schedId) { - this.schedId = schedId; - } - public static final String bossBarPreRaidIdent = "ResidencePreRaid"; public static final String bossBarRaidIdent = "ResidenceRaid"; public void showBossBar() { - if (res.isUnderRaid()) { - for (Entry one : res.getRaid().getAttackers().entrySet()) { + if (isUnderRaid()) { + for (Entry one : getAttackers().entrySet()) { ResidencePlayer rPlayer = one.getValue().getPlayer(); if (rPlayer.isOnline()) showBossbar(rPlayer, BarColor.BLUE, lm.Raid_EndsIn); } - for (Entry one : res.getRaid().getDefenders().entrySet()) { + for (Entry one : getDefenders().entrySet()) { ResidencePlayer rOwner = one.getValue().getPlayer(); if (rOwner.isOnline()) showBossbar(rOwner, BarColor.BLUE, lm.Raid_EndsIn); } - } else if (res.isInPreRaid()) { - for (Entry one : res.getRaid().getAttackers().entrySet()) { + } else if (isInPreRaid()) { + for (Entry one : getAttackers().entrySet()) { ResidencePlayer rPlayer = one.getValue().getPlayer(); if (rPlayer.isOnline()) showBossbar(rPlayer, BarColor.GREEN, lm.Raid_StartsIn); } - for (Entry one : res.getRaid().getDefenders().entrySet()) { + for (Entry one : getDefenders().entrySet()) { ResidencePlayer rOwner = one.getValue().getPlayer(); if (rOwner.isOnline()) showBossbar(rOwner, BarColor.GREEN, lm.Raid_StartsIn); @@ -190,15 +187,15 @@ public void showBossBar() { } private void showBossbar(ResidencePlayer rPlayer, BarColor color, lm msg) { - BossBarInfo barInfo = rPlayer.getBossBar(res.isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent); + BossBarInfo barInfo = rPlayer.getBossBar(isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent); if (barInfo == null) { - barInfo = new BossBarInfo(rPlayer, res.isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent) { + barInfo = new BossBarInfo(rPlayer, isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent) { @Override public void updateCycle() { setTitleOfBar(Residence.getInstance().msg(msg, getDefenders().size(), getAttackers().size())); } }; - Double secLeft = ((res.isUnderRaid() ? res.getRaid().getEndsAt() : res.getRaid().getStartsAt()) - System.currentTimeMillis()) / 1000D; + Double secLeft = ((isUnderRaid() ? getEndsAt() : getStartsAt()) - System.currentTimeMillis()) / 1000D; barInfo.setKeepForTicks(22); barInfo.setColor(color); barInfo.setTitleOfBar(Residence.getInstance().msg(msg, getDefenders().size(), getAttackers().size())); @@ -214,11 +211,21 @@ public void updateCycle() { public void endRaid() { setEndsAt(System.currentTimeMillis()); - if (getSchedId() > 0) { + if (this.schedRaidEndId > 0) { ResidenceRaidEndEvent End = new ResidenceRaidEndEvent(res); Bukkit.getPluginManager().callEvent(End); - Bukkit.getScheduler().cancelTask(getSchedId()); - setSchedId(-1); + Bukkit.getScheduler().cancelTask(this.schedRaidEndId); + this.schedRaidEndId = -1; + } + + if (this.shedRaidStartId > 0) { + Bukkit.getScheduler().cancelTask(this.shedRaidStartId); + this.shedRaidStartId = -1; + } + + if (this.schedBossBarId > 0) { + Bukkit.getScheduler().cancelTask(this.schedBossBarId); + this.schedBossBarId = -1; } setStartsAt(0L); @@ -238,8 +245,17 @@ public void endRaid() { if (RPlayer != null) { RPlayer.setLastRaidAttackTimer(System.currentTimeMillis()); BossBarInfo barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarRaidIdent); - if (barInfo != null) + if (barInfo != null) { + barInfo.cancelAutoScheduler(); + barInfo.remove(); + RPlayer.removeBossBar(barInfo); + } + barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarPreRaidIdent); + if (barInfo != null) { + barInfo.cancelAutoScheduler(); + barInfo.remove(); RPlayer.removeBossBar(barInfo); + } } } @@ -247,8 +263,17 @@ public void endRaid() { ResidencePlayer RPlayer = one.getValue().getPlayer(); if (RPlayer != null) { BossBarInfo barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarRaidIdent); - if (barInfo != null) + if (barInfo != null) { + barInfo.cancelAutoScheduler(); + barInfo.remove(); + RPlayer.removeBossBar(barInfo); + } + barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarPreRaidIdent); + if (barInfo != null) { + barInfo.cancelAutoScheduler(); + barInfo.remove(); RPlayer.removeBossBar(barInfo); + } } } @@ -256,6 +281,7 @@ public void endRaid() { clearAttackers(); clearDefenders(); + } public boolean isImmune() { @@ -283,4 +309,97 @@ public void setImmunityUntil(Long immunityUntil) { else this.immunityUntil = null; } + + public boolean preStartRaid(Player attacker) { + + if (isUnderRaid() || this.isInPreRaid()) + return false; + + if (getCooldownEnd() > System.currentTimeMillis()) + return false; + + if (attacker != null) + addAttacker(attacker); + addDefender(res.getRPlayer().getPlayer()); + setStartsAt(System.currentTimeMillis() + (ConfigManager.PreRaidTimer * 1000)); + setEndsAt(getStartsAt() + (ConfigManager.RaidTimer * 1000)); + + ResidenceRaidPreStartEvent start = new ResidenceRaidPreStartEvent(res, getAttackers()); + + Bukkit.getPluginManager().callEvent(start); + if (start.isCancelled()) + return false; + + if (attacker != null) + Residence.getInstance().getPlayerManager().getResidencePlayer(attacker).setLastRaidAttackTimer(System.currentTimeMillis()); + res.getRPlayer().setLastRaidDefendTimer(System.currentTimeMillis()); + setImmunityUntil(ConfigManager.RaidCooldown * 1000L); + + return true; + } + + + public boolean startRaid() { + + if (!isUnderRaid() && !this.isInPreRaid()) + return false; + + ResidenceRaidStartEvent start = new ResidenceRaidStartEvent(res, getAttackers()); + this.shedRaidStartId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { + @Override + public void run() { + Bukkit.getPluginManager().callEvent(start); + if (start.isCancelled()) + start.getRes().getRaid().endRaid(); + } + }, ((getStartsAt() - System.currentTimeMillis()) / 50)); + + schedBossBarId = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(Residence.getInstance(), new Runnable() { + @Override + public void run() { + if (!isUnderRaid() && !isInPreRaid()) { + Debug.D("canceling bossbar " + schedBossBarId); + Bukkit.getServer().getScheduler().cancelTask(schedBossBarId); + return; + } + showBossBar(); + } + }, this.isUnderRaid() ? 20L : 0L, 20L); + + this.schedRaidEndId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { + @Override + public void run() { + endRaid(); + } + }, ((getEndsAt() - System.currentTimeMillis()) / 50)); + + return true; + } + + public boolean isUnderRaid() { + return getEndsAt() > System.currentTimeMillis() + && getStartsAt() < System.currentTimeMillis(); + } + + public boolean isRaidInitialized() { + if (isUnderRaid() || isInPreRaid()) + return true; + if (res.getParent() != null) + return res.getParent().getRaid().isRaidInitialized(); + return false; + } + + public boolean isInPreRaid() { + return getEndsAt() > System.currentTimeMillis() + && getStartsAt() > System.currentTimeMillis(); + } + + public boolean canRaid() { + return !isUnderRaid() && getCooldownEnd() < System.currentTimeMillis(); + } + + public boolean isUnderRaidCooldown() { + return getCooldownEnd() > System.currentTimeMillis(); + } + } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 75c89b940..76766cedb 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -16,7 +16,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.CMIChatColor; @@ -33,7 +32,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; public class HelpEntry { protected String name; @@ -270,65 +268,60 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { public Set getSubCommands(CommandSender sender, String[] args) { Set subCommands = new HashSet(); - if (!langFile.isFile()) - return subCommands; - - FileConfiguration node = new YamlConfiguration(); - try { - node.load(langFile); - } catch (Throwable e) { - e.printStackTrace(); - } - - ConfigurationSection tempmeinPath = node.getConfigurationSection("CommandHelp.SubCommands.res.SubCommands"); - - if (args.length == 1) { - if (tempmeinPath == null) - return subCommands; - return tempmeinPath.getKeys(false); - } - - boolean ok = true; - int i = 0; - while (ok) { - - if (i >= args.length) - break; + int neededArgPlace = args.length - 2; - if (args[i].equalsIgnoreCase("")) - return tempmeinPath == null ? subCommands : tempmeinPath.getKeys(false); - - if (tempmeinPath != null && !tempmeinPath.isConfigurationSection(args[i] + ".SubCommands")) - break; - - if (tempmeinPath != null) - tempmeinPath = tempmeinPath.getConfigurationSection(args[i] + ".SubCommands"); - - i++; - } - - int neededArgPlace = args.length - 2 - i; - - boolean subCommand = true; - if (i < args.length && tempmeinPath != null && tempmeinPath.isConfigurationSection(args[i])) { - subCommand = false; - tempmeinPath = tempmeinPath.getConfigurationSection(args[i]); - } + if (neededArgPlace < 0) + neededArgPlace = 0; List ArgsList = new ArrayList(); - int ii = 0; - for (Entry, List> one : Residence.getInstance().getLocaleManager().CommandTab.entrySet()) { - List list = one.getKey(); - if (list.size() > ii && args.length > ii && list.get(ii).equalsIgnoreCase(args[ii])) { - ArgsList = one.getValue(); + if (args.length > 0) { + HashMap> mp = Residence.getInstance().getLocaleManager().CommandTab.get(args[0].toLowerCase()); + + if (mp != null) { + if (neededArgPlace > 0 || args.length == 2) { + List mps = mp.get(args[1].toLowerCase()); + if (mps != null) { + if (args.length > 2) + neededArgPlace--; + ArgsList = mps; + } else { + StringBuilder st = new StringBuilder(); + for (String one : mp.keySet()) { + if (!st.toString().isEmpty()) + st.append("%%"); + st.append(one); + } + ArgsList.add(st.toString()); + } + } else { + if (args.length > 1 && mp.get(args[1].toLowerCase()) != null) { + neededArgPlace--; + ArgsList = mp.get(args[1].toLowerCase()); + } else if (mp.get("") != null) { + ArgsList = mp.get(""); + } else { + StringBuilder st = new StringBuilder(); + for (String one : mp.keySet()) { + if (!st.toString().isEmpty()) + st.append("%%"); + st.append(one); + } + ArgsList.add(st.toString()); + } + } + } else { + for (String one : Residence.getInstance().getLocaleManager().CommandTab.keySet()) { + subCommands.add(one); + } + return subCommands; } - i++; } String NeededArg = null; - if (neededArgPlace < ArgsList.size() && neededArgPlace >= 0) + if (neededArgPlace < ArgsList.size() && neededArgPlace >= 0) { NeededArg = ArgsList.get(neededArgPlace); + } Player playerSender = null; if (sender instanceof Player) @@ -340,8 +333,9 @@ public Set getSubCommands(CommandSender sender, String[] args) { if (NeededArg.contains("%%")) { list.addAll(Arrays.asList(NeededArg.split("%%"))); - } else + } else { list.add(NeededArg); + } for (String oneArg : list) { switch (oneArg) { @@ -414,10 +408,10 @@ else if (args[0].equalsIgnoreCase(pset.class.getSimpleName())) mode = FlagMode.Player; } - if(args.length > 1 && Flags.getFlag(args[args.length - 2]) != null) { + if (args.length > 1 && Flags.getFlag(args[args.length - 2]) != null) { continue; } - + for (String one : FlagPermissions.getAllPosibleFlags()) { Flags f = Flags.getFlag(one); @@ -474,9 +468,6 @@ else if (args[0].equalsIgnoreCase(pset.class.getSimpleName())) return subCommands; } - if (subCommand) - return tempmeinPath == null ? subCommands : tempmeinPath.getKeys(false); - return new HashSet(Arrays.asList("?")); } } From b0077d0dd3241a2775897507d9abe2f052431815 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 19 Nov 2020 17:02:07 +0200 Subject: [PATCH 0791/1142] raidstatus locale lines --- .../bukkit/residence/commands/raid.java | 8 +++++-- .../bukkit/residence/commands/raidstatus.java | 24 +++++++++---------- .../bukkit/residence/containers/lm.java | 12 +++++++++- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/raid.java b/src/com/bekvon/bukkit/residence/commands/raid.java index 2b5d7eeb4..991a28882 100644 --- a/src/com/bekvon/bukkit/residence/commands/raid.java +++ b/src/com/bekvon/bukkit/residence/commands/raid.java @@ -15,6 +15,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.raid.ResidenceRaid; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.TimeModifier; import com.bekvon.bukkit.residence.utils.Utils; @@ -112,7 +113,6 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo case "clear": res.getRaid().setImmunityUntil(null); res.getRaid().setEndsAt(0L); - res.getRPlayer().setLastRaidDefendTimer(0L); plugin.msg(sender, lm.Raid_notImmune); return true; @@ -161,7 +161,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo res = null; if (args.length > 1) - res = plugin.getResidenceManager().getByName(args[2]); + res = plugin.getResidenceManager().getByName(args[1]); if (res == null && sender instanceof Player) res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); @@ -174,6 +174,10 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return null; } + res.getRaid().endRaid(); + res.getRaid().setEndsAt(0L); + res.getRPlayer().setLastRaidDefendTimer(0L); + boolean started = res.getRaid().preStartRaid(null); if (started) { diff --git a/src/com/bekvon/bukkit/residence/commands/raidstatus.java b/src/com/bekvon/bukkit/residence/commands/raidstatus.java index 689a522f7..b4ea88aca 100644 --- a/src/com/bekvon/bukkit/residence/commands/raidstatus.java +++ b/src/com/bekvon/bukkit/residence/commands/raidstatus.java @@ -68,34 +68,34 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo ResidenceRaid raid = res.getRaid(); - plugin.msg(sender, "&7----------- &f" + res.getName() + "(" + res.getOwner() + ") &7-----------"); + plugin.msg(sender, lm.Raid_status_title, res.getName(), res.getOwner()); if (res.getRaid().isImmune()) { - plugin.msg(sender, "&eImmune to raids for next: " + Utils.to24hourShort(raid.getImmunityUntil() - System.currentTimeMillis() + 1000L)); + plugin.msg(sender, lm.Raid_status_immune, Utils.to24hourShort(raid.getImmunityUntil() - System.currentTimeMillis() + 1000L)); } else if (res.getRaid().isInPreRaid()) { - plugin.msg(sender, "&7Raid starts in: " + Utils.to24hourShort(raid.getStartsAt() - System.currentTimeMillis())); + plugin.msg(sender, lm.Raid_status_starts, Utils.to24hourShort(raid.getStartsAt() - System.currentTimeMillis())); RawMessage rm = new RawMessage(); - rm.add("&7Attackers: &4" + raid.getAttackers().size(), getAttackers(raid)); + rm.addText(plugin.getLM().getMessage(lm.Raid_status_attackers, raid.getAttackers().size())).addHover(getAttackers(raid)); rm.show(sender); rm = new RawMessage(); - rm.add("&7Defenders: &2" + raid.getDefenders().size(), getDefenders(raid)); + rm.addText(plugin.getLM().getMessage(lm.Raid_status_defenders, raid.getDefenders().size())).addHover(getDefenders(raid)); rm.show(sender); } else if (res.getRaid().isUnderRaid()) { - plugin.msg(sender, "&7Raid ends in: " + Utils.to24hourShort(raid.getEndsAt() - System.currentTimeMillis())); + plugin.msg(sender, lm.Raid_status_ends, Utils.to24hourShort(raid.getEndsAt() - System.currentTimeMillis())); RawMessage rm = new RawMessage(); - rm.add("&7Attackers: &4" + raid.getAttackers().size(), getAttackers(raid)); + rm.addText(plugin.getLM().getMessage(lm.Raid_status_attackers, raid.getAttackers().size())).addHover(getAttackers(raid)); rm.show(sender); rm = new RawMessage(); - rm.add("&7Defenders: &2" + raid.getDefenders().size(), getDefenders(raid)); + rm.addText(plugin.getLM().getMessage(lm.Raid_status_defenders, raid.getDefenders().size())).addHover(getDefenders(raid)); rm.show(sender); } else { - plugin.msg(sender, raid.getCooldownEnd() < System.currentTimeMillis() ? "&2Can be raided" : "&ePosible raid in: " + Utils.to24hourShort(raid.getCooldownEnd() - System.currentTimeMillis() - + 1000L)); + plugin.msg(sender, raid.getCooldownEnd() < System.currentTimeMillis() ? plugin.getLM().getMessage(lm.Raid_status_canraid) : plugin.getLM().getMessage(lm.Raid_status_raidin, Utils.to24hourShort( + raid.getCooldownEnd() - System.currentTimeMillis() + 1000L))); } return true; } - private String getAttackers(ResidenceRaid raid) { + private static String getAttackers(ResidenceRaid raid) { String r = ""; int i = 0; for (Entry one : raid.getAttackers().entrySet()) { @@ -112,7 +112,7 @@ private String getAttackers(ResidenceRaid raid) { return r; } - private String getDefenders(ResidenceRaid raid) { + private static String getDefenders(ResidenceRaid raid) { String r = ""; int i = 0; for (Entry one : raid.getDefenders().entrySet()) { diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index c05161cc3..f5ee88ab1 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -139,7 +139,17 @@ public enum lm { Raid_defend_notRaided("&cResidence is not under the raid"), Raid_defend_alreadyInAnother("&cCan't join this residence defence, you are in another one already (%1)"), - Raid_stopped("&eRain on &6%1 &ewas stopped"), + + Raid_status_title("&7----------- &f%1(%2) &7-----------"), + Raid_status_immune("&eImmune to raids for next: %1"), + Raid_status_starts("&7Raid starts in: %1"), + Raid_status_attackers("&7Attackers: &4%1" ), + Raid_status_defenders("&7Defenders: &4%1"), + Raid_status_ends("&7Raid ends in: %1"), + Raid_status_canraid("&2Can be raided"), + Raid_status_raidin("&ePosible raid in: %1" ), + + Raid_stopped("&eRaid on &6%1 &ewas stopped"), info_years("&e%1 &6years "), info_oneYear("&e%1 &6year "), From f26c79eedd3b5bcc02b9c80ca516e95b9613fe28 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 19 Nov 2020 17:14:47 +0200 Subject: [PATCH 0792/1142] res info show accurate dimensions of residence --- .../bukkit/residence/containers/lm.java | 3 +++ .../protection/ResidenceManager.java | 22 ++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index f5ee88ab1..3afc7332a 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -492,6 +492,9 @@ public enum lm { General_CurrentArea("&eCurrent Area: &6%1"), General_TotalResSize("&eTotal size: &6%1m\u00B3 (%2m\u00B2)"), + General_ResSize_eastWest("&eEast/West: &6%1"), + General_ResSize_northSouth("&eNorth/South: &6%1"), + General_ResSize_upDown("&eUp/Down: &6%1"), General_TotalWorth("&eTotal worth of residence: &6%1 &e(&6%2&e)"), General_TotalSubzones("&eSubzones in residence: &6%1 &e(&6%2&e)"), General_NotOnline("&eTarget player must be online."), diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1a555e011..33a29a6e5 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.protection; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -751,10 +752,19 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) if (groupFlags.length() > 0) plugin.msg(sender, lm.General_GroupFlags, groupFlags); - String msg = ""; - msg += plugin.msg(lm.General_TotalResSize, res.getTotalSize(), res.getXZSize()); + RawMessage rm = new RawMessage(); + rm.addText(plugin.msg(lm.General_TotalResSize, res.getTotalSize(), res.getXZSize())); - plugin.msg(sender, CMIChatColor.translate(msg)); + try { + rm.addHover(Arrays.asList( + plugin.msg(lm.General_ResSize_eastWest, res.getMainArea().getXSize()), + plugin.msg(lm.General_ResSize_northSouth, res.getMainArea().getZSize()), + plugin.msg(lm.General_ResSize_upDown, res.getMainArea().getYSize()))); + } catch (Throwable e) { + e.printStackTrace(); + } + + rm.show(sender); if (plugin.getEconomyManager() != null) { plugin.msg(sender, lm.General_TotalWorth, res.getWorthByOwner(), res.getWorth()); @@ -782,8 +792,8 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) } if (sender instanceof Player) { - RawMessage rm = new RawMessage(); - rm.add(forRentMsg, rentableString.toString()); + rm = new RawMessage(); + rm.addText(forRentMsg).addHover(rentableString.toString()); rm.show(sender); } else plugin.msg(sender, forRentMsg); @@ -810,7 +820,7 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) if (sender instanceof Player) { - RawMessage rm = new RawMessage(); + rm = new RawMessage(); rm.addText(RentedMsg).addHover(rentableString.toString()); rm.show(sender); } else From 1d063f954e167f4deda8d00f0e6e172f3577cc02 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 19 Nov 2020 17:37:38 +0200 Subject: [PATCH 0793/1142] Fix for unstuck command not recognizing correct value --- .../bekvon/bukkit/residence/permissions/PermissionGroup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index fab535a9f..80e1676f0 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -211,7 +211,7 @@ private void parseGroup(ConfigurationSection limits) { if (limits.contains("Economy.SellCost")) sellperarea = limits.getDouble("Economy.SellCost", 0); - if (limits.isBoolean("Economy.Unstuck")) + if (limits.isBoolean("Residence.Unstuck")) unstuck = limits.getBoolean("Residence.Unstuck", false); if (limits.contains("Residence.Kick")) kick = limits.getBoolean("Residence.Kick", false); From e650cc603067b999faac2f1b10ccd110b4cbfd97 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 20 Nov 2020 12:44:58 +0200 Subject: [PATCH 0794/1142] Lets not disable fly mode when leaving residence with fly flag while having access to fly toggle command from CMI or Essentials --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 6430afbee..e5558b58d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1814,6 +1814,11 @@ private void fly(Player player, boolean state) { if (ResPerm.bypass_fly.hasPermission(player, 10000L)) return; if (!state) { + + // Lets not disable fly mode if player has access to fly command from another plugin + if (player.hasPermission("cmi.command.fly") || player.hasPermission("essentials.fly")) + return; + boolean land = player.isFlying(); player.setFlying(state); player.setAllowFlight(state); From 0be14331594401c7da1c4c582b14dbb1aa00e6f4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 20 Nov 2020 12:54:45 +0200 Subject: [PATCH 0795/1142] Record only first 3 worlds for random teleportation as a default example --- src/com/bekvon/bukkit/residence/ConfigManager.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index edb3c5675..c8925a3cf 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -741,6 +741,11 @@ public void UpdateConfigFile() { TeleportTitleMessage = c.get("Global.Tp.TeleportTitleMessage", true); Set worlds = new HashSet(); + + for (int i = 0; i < 3 && i < Bukkit.getWorlds().size(); i++) { + worlds.add(Bukkit.getWorlds().get(i)); + } + worlds.addAll(Bukkit.getWorlds()); RTeleport.clear(); From a45086593097a79420674e2259ccd8460dde79da Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 20 Nov 2020 13:03:02 +0200 Subject: [PATCH 0796/1142] Y size needs to add 1 extra block height --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 4 ++-- src/com/bekvon/bukkit/residence/protection/CuboidArea.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index dd334dea2..107286b0d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -878,11 +878,11 @@ public long getTotalSize() { long size = 0; if (!plugin.getConfigManager().isNoCostForYBlocks()) for (CuboidArea entry : set) { - size = size + entry.getSize(); + size += entry.getSize(); } else for (CuboidArea entry : set) { - size = size + (entry.getXSize() * entry.getZSize()); + size += (entry.getXSize() * entry.getZSize()); } return size; } diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index a445d003b..c27c45ecd 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -120,7 +120,7 @@ public long getSize() { int xsize = (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; int zsize = (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; if (!Residence.getInstance().getConfigManager().isNoCostForYBlocks()) { - int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()); + int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; return xsize * ysize * zsize; } return xsize * zsize; From 92aab56945f33c103fb3f72adc8276e52f2929a9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 20 Nov 2020 13:45:54 +0200 Subject: [PATCH 0797/1142] honey and honeycomb new flags --- .../bekvon/bukkit/cmiLib/CMIReflections.java | 33 ++++++- .../bekvon/bukkit/residence/Residence.java | 3 + .../bukkit/residence/containers/Flags.java | 2 + .../bukkit/residence/containers/lm.java | 2 +- .../ResidencePlayerListener1_15.java | 85 +++++++++++++++++++ .../ResidencePlayerListener1_16.java | 1 - 6 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_15.java diff --git a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java index 0192ee021..a262daeff 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java @@ -10,7 +10,7 @@ import java.lang.reflect.Method; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; +import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -28,6 +28,7 @@ public class CMIReflections { private static Class PacketPlayOutOpenWindow; private static Class CraftPlayer; public static Class nmsChatSerializer; + private static Class CraftBeehive; static { initialize(); @@ -46,6 +47,10 @@ private static void initialize() { } catch (Throwable e) { e.printStackTrace(); } + try { + CraftBeehive = getBukkitClass("block.impl.CraftBeehive"); + } catch (Throwable e) { + } try { CraftPlayer = getBukkitClass("entity.CraftPlayer"); } catch (Throwable e) { @@ -324,6 +329,32 @@ public static String getItemMinecraftName(ItemStack item) { } } + public static int getHoneyLevel(Block block) { + if (CMIMaterial.get(block) != CMIMaterial.BEE_NEST && CMIMaterial.get(block) != CMIMaterial.BEEHIVE) + return 0; + try { + Object nb = CraftBeehive.cast(block.getBlockData()); + Method method = nb.getClass().getMethod("getHoneyLevel"); + return (int) method.invoke(nb); + } catch (Throwable e) { + e.printStackTrace(); + } + return 0; + } + + public static int getMaxHoneyLevel(Block block) { + if (CMIMaterial.get(block) != CMIMaterial.BEE_NEST && CMIMaterial.get(block) != CMIMaterial.BEEHIVE) + return 0; + try { + Object nb = CraftBeehive.cast(block.getBlockData()); + Method method = nb.getClass().getMethod("getMaximumHoneyLevel"); + return (int) method.invoke(nb); + } catch (Throwable e) { + e.printStackTrace(); + } + return 5; + } + public String getItemMinecraftNamePath(ItemStack item) { try { Object nmsStack = asNMSCopy(item); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 92a82e519..53e2da9e2 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -85,6 +85,7 @@ import com.bekvon.bukkit.residence.listeners.ResidenceFixesListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_14; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_15; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_16; import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; @@ -716,6 +717,8 @@ public void run() { plistener = new ResidencePlayerListener(this); if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) pm.registerEvents(new ResidencePlayerListener1_14(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_15_R1)) + pm.registerEvents(new ResidencePlayerListener1_15(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_16_R1)) pm.registerEvents(new ResidencePlayerListener1_16(this), this); elistener = new ResidenceEntityListener(this); diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 5ec12e560..98617829d 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -12,6 +12,8 @@ public enum Flags { backup(CMIMaterial.BOOKSHELF, FlagMode.Residence, "If set to true, restores previous look of area (WordEdit required)", false), bank(CMIMaterial.ENDER_CHEST, FlagMode.Both, "Allows or denys deposit/withdraw money from res bank", true), bed(CMIMaterial.WHITE_BED, FlagMode.Both, "Allows or denys players to use beds", true), + honey(CMIMaterial.BEEHIVE, FlagMode.Both, "Allows or denys players to get honey", true), + honeycomb(CMIMaterial.BEE_NEST, FlagMode.Both, "Allows or denys players to get honeycomb", true), beacon(CMIMaterial.BEACON, FlagMode.Both, "Allows or denys interaction with beacon", true), brew(CMIMaterial.BREWING_STAND, FlagMode.Both, "Allows or denys players to use brewing stands", true), build(CMIMaterial.BRICKS, FlagMode.Both, "Allows or denys building", false), diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 3afc7332a..707b009da 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -239,7 +239,7 @@ public enum lm { Residence_CantRemove("&cResidence &6%1 &ccant be removed as &6%2 &csubzone is still rented by &6%3"), Residence_MoveDeny("&cYou dont have movement permission for Residence &6%1"), Residence_TeleportNoFlag("&cYou dont have teleport access for that residence."), - Residence_FlagDeny("&cYou dont have &6%1 &cpermission for Residence &6%2"), + Residence_FlagDeny("&cYou dont have &6%1 &cpermission for &6%2 &cresidence"), Residence_GiveLimits("&cCannot give residence to target player, because it is outside the target players limits."), Residence_GiveConfirm("&7Click to confirm &6%1 &7residence transfer from &6%2 &7to &6%3"), Residence_Give("&eYou give residence &6%1 &eto player &6%2"), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_15.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_15.java new file mode 100644 index 000000000..0d17a8e3d --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_15.java @@ -0,0 +1,85 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.Material; +import org.bukkit.block.Beehive; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.cmiLib.CMIReflections; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; + +public class ResidencePlayerListener1_15 implements Listener { + + private Residence plugin; + + public ResidencePlayerListener1_15(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractBeeHive(PlayerInteractEvent event) { + + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + Player player = event.getPlayer(); + + Block block = event.getClickedBlock(); + if (block == null) + return; + + Material mat = block.getType(); + + if (!mat.equals(Material.BEE_NEST) && !mat.equals(Material.BEEHIVE)) + return; + + ItemStack iih = event.getItem(); + CMIMaterial heldItem = CMIMaterial.get(iih); + + if (heldItem.equals(CMIMaterial.GLASS_BOTTLE)) { + if (CMIReflections.getHoneyLevel(block) < CMIReflections.getMaxHoneyLevel(block)) { + return; + } + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (res == null) + return; + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.honey, FlagCombo.TrueOrNone)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.honey, res.getName()); + event.setCancelled(true); + return; + } + } + + if (heldItem.equals(CMIMaterial.SHEARS)) { + if (CMIReflections.getHoneyLevel(block) < CMIReflections.getMaxHoneyLevel(block)) { + return; + } + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (res == null) + return; + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.honeycomb, FlagCombo.TrueOrNone)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.honeycomb, res.getName()); + event.setCancelled(true); + return; + } + } + } +} diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java index 1b67b76e7..f41925037 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java @@ -18,7 +18,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidencePlayerListener1_16 implements Listener { From 82aea75eba86694ac400376d55e9974b8ace3be1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 20 Nov 2020 15:58:36 +0200 Subject: [PATCH 0798/1142] Improving tab complete and adding some missing ones --- .../bukkit/residence/commands/create.java | 2 +- .../bukkit/residence/commands/defend.java | 2 +- .../bukkit/residence/commands/flags.java | 3 - .../bukkit/residence/commands/lists.java | 8 ++ .../bukkit/residence/commands/market.java | 5 +- .../bukkit/residence/commands/message.java | 2 +- .../bekvon/bukkit/residence/commands/rc.java | 3 + .../bukkit/residence/commands/remove.java | 6 +- .../bukkit/residence/commands/renamearea.java | 2 +- .../bukkit/residence/commands/reset.java | 2 +- .../bukkit/residence/commands/select.java | 13 +- .../bukkit/residence/commands/setallfor.java | 2 +- .../bukkit/residence/commands/setowner.java | 8 +- .../bukkit/residence/commands/shop.java | 1 - .../bukkit/residence/text/help/HelpEntry.java | 116 +++++++++++++----- 15 files changed, 126 insertions(+), 49 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index fe8ff575a..9e7b01814 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -43,6 +43,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); // Main command c.get("Description", "Create Residences"); - c.get("Info", Arrays.asList("&eUsage: &6/res create ")); + c.get("Info", Arrays.asList("&eUsage: &6/res create [residence_name]")); } } diff --git a/src/com/bekvon/bukkit/residence/commands/defend.java b/src/com/bekvon/bukkit/residence/commands/defend.java index 87f5edf46..1ed9131aa 100644 --- a/src/com/bekvon/bukkit/residence/commands/defend.java +++ b/src/com/bekvon/bukkit/residence/commands/defend.java @@ -146,7 +146,7 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Join raid defence on residence"); c.get("Info", Arrays.asList("&eUsage: &6/res defend [resName] (playerName)")); - LocaleManager.addTabCompleteMain(this, "[cresidence]%%[playername]"); + LocaleManager.addTabCompleteMain(this, "[cresidence]%%[playername]", "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index a757e40f4..a91d5f5bc 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -75,8 +75,5 @@ public void getLocale() { c.get(pt + ".Info", Arrays.asList("&eUsage: &6/res " + forSet + " " + fl.getName() + " true/false/remove")); keys.remove(fl.toString()); } - - LocaleManager.addTabCompleteSub(this, "pset", "[residence]", "[flag]", "[true%%false%%remove]"); - LocaleManager.addTabCompleteSub(this, "set", "[residence]", "[flag]", "[true%%false%%remove]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/lists.java b/src/com/bekvon/bukkit/residence/commands/lists.java index 20f9f8fad..5548c6e52 100644 --- a/src/com/bekvon/bukkit/residence/commands/lists.java +++ b/src/com/bekvon/bukkit/residence/commands/lists.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -73,24 +74,31 @@ public void getLocale() { c.setP(c.getPath() + "SubCommands."); c.get("add.Description", "Add a list"); c.get("add.Info", Arrays.asList("&eUsage: &6/res lists add ")); + LocaleManager.addTabCompleteSub(this, "add"); c.get("remove.Description", "Remove a list"); c.get("remove.Info", Arrays.asList("&eUsage: &6/res lists remove ")); + LocaleManager.addTabCompleteSub(this, "remove"); c.get("apply.Description", "Apply a list to a residence"); c.get("apply.Info", Arrays.asList("&eUsage: &6/res lists apply ")); + LocaleManager.addTabCompleteSub(this, "apply", "", "[cresidence]"); c.get("set.Description", "Set a flag"); c.get("set.Info", Arrays.asList("&eUsage: &6/res lists set ")); + LocaleManager.addTabCompleteSub(this, "set", "", "[flag]", "true%%false%%remove"); c.get("pset.Description", "Set a player flag"); c.get("pset.Info", Arrays.asList("&eUsage: &6/res lists pset ")); + LocaleManager.addTabCompleteSub(this, "pset", "", "[flag]", "true%%false%%remove"); c.get("gset.Description", "Set a group flag"); c.get("gset.Info", Arrays.asList("&eUsage: &6/res lists gset ")); + LocaleManager.addTabCompleteSub(this, "gset", "", "", "[flag]", "true%%false%%remove"); c.get("view.Description", "View a list."); c.get("view.Info", Arrays.asList("&eUsage: &6/res lists view ")); + LocaleManager.addTabCompleteSub(this, "view"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index ab143b936..04836cf1c 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -461,15 +461,16 @@ public void getLocale() { LocaleManager.addTabCompleteSub(this, "rentable", "[residence]", "1000", "7", "true", "true", "true"); c.get("autopay.Description", "Sets residence AutoPay to given value"); - c.get("autopay.Info", Arrays.asList("&eUsage: &6/res market autopay [true/false]")); + c.get("autopay.Info", Arrays.asList("&eUsage: &6/res market autopay [residence] [true/false]")); LocaleManager.addTabCompleteSub(this, "autopay", "[residence]%%true%%false", "true%%false"); c.get("payrent.Description", "Pays rent for defined residence"); - c.get("payrent.Info", Arrays.asList("&eUsage: &6/res market payrent ")); + c.get("payrent.Info", Arrays.asList("&eUsage: &6/res market payrent [residence]")); LocaleManager.addTabCompleteSub(this, "payrent", "[residence]"); c.get("confirm.Description", "Confirms residence unrent/release action"); c.get("confirm.Info", Arrays.asList("&eUsage: &6/res market confirm")); + LocaleManager.addTabCompleteSub(this, "confirm"); c.get("unrent.Description", "Remove a residence from rent or rentable."); c.get("unrent.Info", Arrays.asList("&eUsage: &6/res market unrent [residence]", diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index c76b6d4bf..333cc704d 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -96,6 +96,6 @@ public void getLocale() { c.get("Description", "Manage residence enter / leave messages"); c.get("Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); - LocaleManager.addTabCompleteMain(this, "[cresidence]", "enter%%leave", "[enter]%%[leave]"); + LocaleManager.addTabCompleteMain(this, "[cresidence]", "enter%%leave%%remove", "[enter]%%[leave]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index f12d3321d..8e50e8c89 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -196,12 +196,15 @@ public void getLocale() { c.setP(c.getPath() + "SubCommands."); c.get("leave.Description", "Leaves current residence chat channel"); c.get("leave.Info", Arrays.asList("&eUsage: &6/res rc leave", "If you are in residence chat channel then you will leave it")); + LocaleManager.addTabCompleteSub(this, "leave"); c.get("setcolor.Description", "Sets residence chat channel text color"); c.get("setcolor.Info", Arrays.asList("&eUsage: &6/res rc setcolor [colorCode]", "Sets residence chat channel text color")); + LocaleManager.addTabCompleteSub(this, "setcolor"); c.get("setprefix.Description", "Sets residence chat channel prefix"); c.get("setprefix.Info", Arrays.asList("&eUsage: &6/res rc setprefix [newName]", "Sets residence chat channel prefix")); + LocaleManager.addTabCompleteSub(this, "setprefix"); c.get("kick.Description", "Kicks player from channel"); c.get("kick.Info", Arrays.asList("&eUsage: &6/res rc kick [player]", "Kicks player from channel")); diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index d49bf8c06..42004b383 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -80,9 +80,9 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (sender instanceof Player) { RawMessage rm = new RawMessage(); if (res.isSubzone()) { - rm.add(plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()), "Click to confirm", cmd + " confirm"); + rm.addText(plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName())).addHover("Click to confirm").addCommand(cmd + " confirm"); } else { - rm.add(plugin.msg(lm.Residence_DeleteConfirm, res.getResidenceName()), "Click to confirm", cmd + " confirm"); + rm.addText(plugin.msg(lm.Residence_DeleteConfirm, res.getResidenceName())).addHover("Click to confirm").addCommand(cmd + " confirm"); } if (plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()).length() > 0) rm.show(sender); @@ -104,7 +104,7 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); // Main command c.get("Description", "Remove residences."); - c.get("Info", Arrays.asList("&eUsage: &6/res remove ")); + c.get("Info", Arrays.asList("&eUsage: &6/res remove [residence_name]")); LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/renamearea.java b/src/com/bekvon/bukkit/residence/commands/renamearea.java index 4b15a7849..4093a66c6 100644 --- a/src/com/bekvon/bukkit/residence/commands/renamearea.java +++ b/src/com/bekvon/bukkit/residence/commands/renamearea.java @@ -40,6 +40,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Rename area name for residence"); c.get("Info", Arrays.asList("&eUsage: &6/res removeworld [residence] [oldAreaName] [newAreaName]")); - LocaleManager.addTabCompleteMain(this, "[residence]"); + LocaleManager.addTabCompleteMain(this, "[residence]", "[carea]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index 38689dc35..39f242ba4 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -77,6 +77,6 @@ public void getLocale() { c.get("Description", "Reset residence to default flags."); c.get("Info", Arrays.asList("&eUsage: &6/res reset ", "Resets the flags on a residence to their default. You must be the owner or an admin to do this.")); - LocaleManager.addTabCompleteMain(this, "[residence]"); + LocaleManager.addTabCompleteMain(this, "[residence]%%all"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 0e3eae0d1..0ca4962c7 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -119,7 +119,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } } - + switch (args[0].toLowerCase()) { case "expand": plugin.getSelectionManager().modify(player, false, amount); @@ -203,15 +203,18 @@ public void getLocale() { c.get("Description", "Selection Commands"); c.get("Info", Arrays.asList("This command selects areas for usage with residence.", "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle.")); + LocaleManager.addTabCompleteSub(this, "[x]", "[y]", "[z]"); // Sub commands c.setP(c.getPath() + "SubCommands."); c.get("coords.Description", "Display selected coordinates"); c.get("coords.Info", Arrays.asList("&eUsage: &6/res select coords")); + LocaleManager.addTabCompleteSub(this, "coords"); c.get("size.Description", "Display selected size"); c.get("size.Info", Arrays.asList("&eUsage: &6/res select size")); + LocaleManager.addTabCompleteSub(this, "size"); c.get("auto.Description", "Turns on auto selection tool"); c.get("auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]")); @@ -219,24 +222,31 @@ public void getLocale() { c.get("cost.Description", "Display selection cost"); c.get("cost.Info", Arrays.asList("&eUsage: &6/res select cost")); + LocaleManager.addTabCompleteSub(this, "cost"); c.get("vert.Description", "Expand Selection Vertically"); c.get("vert.Info", Arrays.asList("&eUsage: &6/res select vert", "Will expand selection as high and as low as allowed.")); + LocaleManager.addTabCompleteSub(this, "vert"); c.get("sky.Description", "Expand Selection to Sky"); c.get("sky.Info", Arrays.asList("&eUsage: &6/res select sky", "Expands as high as your allowed to go.")); + LocaleManager.addTabCompleteSub(this, "sky"); c.get("bedrock.Description", "Expand Selection to Bedrock"); c.get("bedrock.Info", Arrays.asList("&eUsage: &6/res select bedrock", "Expands as low as your allowed to go.")); + LocaleManager.addTabCompleteSub(this, "bedrock"); c.get("expand.Description", "Expand selection in a direction."); c.get("expand.Info", Arrays.asList("&eUsage: &6/res select expand ", "Expands in the direction your looking.")); + LocaleManager.addTabCompleteSub(this, "expand", "5"); c.get("shift.Description", "Shift selection in a direction"); c.get("shift.Info", Arrays.asList("&eUsage: &6/res select shift ", "Pushes your selection by in the direction your looking.")); + LocaleManager.addTabCompleteSub(this, "shift", "5"); c.get("chunk.Description", "Select the chunk your currently in."); c.get("chunk.Info", Arrays.asList("&eUsage: &6/res select chunk", "Selects the chunk your currently standing in.")); + LocaleManager.addTabCompleteSub(this, "chunk"); c.get("residence.Description", "Select a existing area in a residence."); c.get("residence.Info", Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence.")); @@ -244,5 +254,6 @@ public void getLocale() { c.get("worldedit.Description", "Set selection using the current WorldEdit selection."); c.get("worldedit.Info", Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection.")); + LocaleManager.addTabCompleteSub(this, "worldedit"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/setallfor.java b/src/com/bekvon/bukkit/residence/commands/setallfor.java index 44df29882..54084cb63 100644 --- a/src/com/bekvon/bukkit/residence/commands/setallfor.java +++ b/src/com/bekvon/bukkit/residence/commands/setallfor.java @@ -54,7 +54,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo count++; } - plugin.msg(sender, lm.Flag_ChangedForOne, count, resPlayer.getPlayerName()); + plugin.msg(sender, lm.Flag_ChangedForOne, count, resPlayer.getName()); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index 1b87854de..29fd3970f 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -8,11 +8,9 @@ import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; public class setowner implements cmd { @@ -36,11 +34,11 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.msg(sender, lm.Raid_cantDo); return true; } - + if (!plugin.isPlayerExist(sender, args[1], true)) { return null; } - + area.getPermissions().setOwner(args[1], true); if (plugin.getRentManager().isForRent(area.getName())) plugin.getRentManager().removeRentable(area.getName()); @@ -66,7 +64,7 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Change owner of a residence."); c.get("Info", Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]")); - LocaleManager.addTabCompleteMain(this, "[cresidence]"); + LocaleManager.addTabCompleteMain(this, "[cresidence]", "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 5e47b52d8..ce5958527 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -8,7 +8,6 @@ import java.util.Map.Entry; import java.util.TimeZone; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 76766cedb..045a35549 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -1,6 +1,5 @@ package com.bekvon.bukkit.residence.text.help; -import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -99,7 +98,7 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p path = path.replace("/res ", "/resadmin "); RawMessage rm = new RawMessage(); - rm.add(CMIChatColor.translate("&6" + helplines.get(i).getDesc()), desc, null, path + helplines.get(i).getCommand()); + rm.addText(CMIChatColor.translate("&6" + helplines.get(i).getDesc())).addHover(desc).addSuggestion(path + helplines.get(i).getCommand()); rm.show(sender); } else @@ -262,8 +261,6 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { return entry; } - File langFile = new File(new File(Residence.getInstance().getDataLocation(), "Language"), "English.yml"); - @SuppressWarnings("deprecation") public Set getSubCommands(CommandSender sender, String[] args) { Set subCommands = new HashSet(); @@ -279,36 +276,74 @@ public Set getSubCommands(CommandSender sender, String[] args) { HashMap> mp = Residence.getInstance().getLocaleManager().CommandTab.get(args[0].toLowerCase()); if (mp != null) { - if (neededArgPlace > 0 || args.length == 2) { - List mps = mp.get(args[1].toLowerCase()); - if (mps != null) { - if (args.length > 2) + if (args.length > 1) { + if (args[args.length - 1].isEmpty()) { + List ls = mp.get(args[1].toLowerCase()); + if (ls != null) { neededArgPlace--; - ArgsList = mps; + if (args.length == 2) { + StringBuilder st = new StringBuilder(); + for (Entry> one : mp.entrySet()) { + if (!st.toString().isEmpty()) + st.append("%%"); + if (one.getKey().equalsIgnoreCase("") && !one.getValue().isEmpty()) + st.append(one.getValue().get(0)); + else + st.append(one.getKey()); + } + ArgsList.add(st.toString()); + } else + ArgsList = ls; + } else { + ls = mp.get(""); + if (ls != null) { + ArgsList = ls; + } else { + + StringBuilder st = new StringBuilder(); + for (String one : mp.keySet()) { + if (!st.toString().isEmpty()) + st.append("%%"); + st.append(one); + } + ArgsList.add(st.toString()); + + } + } } else { - StringBuilder st = new StringBuilder(); - for (String one : mp.keySet()) { - if (!st.toString().isEmpty()) - st.append("%%"); - st.append(one); + List main = mp.get(""); + if (main != null) { + if (args.length == 2) { + StringBuilder st = new StringBuilder(); + for (Entry> one : mp.entrySet()) { + if (!st.toString().isEmpty()) + st.append("%%"); + if (one.getKey().equalsIgnoreCase("") && !one.getValue().isEmpty()) + st.append(one.getValue().get(0)); + else + st.append(one.getKey()); + } + ArgsList.add(st.toString()); + } else + ArgsList = main; + } else { + StringBuilder st = new StringBuilder(); + for (String one : mp.keySet()) { + if (!st.toString().isEmpty()) + st.append("%%"); + st.append(one); + } + ArgsList.add(st.toString()); } - ArgsList.add(st.toString()); } } else { - if (args.length > 1 && mp.get(args[1].toLowerCase()) != null) { - neededArgPlace--; - ArgsList = mp.get(args[1].toLowerCase()); - } else if (mp.get("") != null) { - ArgsList = mp.get(""); - } else { - StringBuilder st = new StringBuilder(); - for (String one : mp.keySet()) { - if (!st.toString().isEmpty()) - st.append("%%"); - st.append(one); - } - ArgsList.add(st.toString()); + StringBuilder st = new StringBuilder(); + for (String one : mp.keySet()) { + if (!st.toString().isEmpty()) + st.append("%%"); + st.append(one); } + ArgsList.add(st.toString()); } } else { for (String one : Residence.getInstance().getLocaleManager().CommandTab.keySet()) { @@ -319,6 +354,9 @@ public Set getSubCommands(CommandSender sender, String[] args) { } String NeededArg = null; + + if (neededArgPlace < 0) + neededArgPlace = 0; if (neededArgPlace < ArgsList.size() && neededArgPlace >= 0) { NeededArg = ArgsList.get(neededArgPlace); } @@ -373,6 +411,16 @@ public Set getSubCommands(CommandSender sender, String[] args) { } } break; + case "[carea]": + if (sender instanceof Player) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); + if (res != null) { + String resName = res.getAreaIDbyLoc(((Player) sender).getLocation()); + if (resName != null) + subCommands.add(resName); + } + } + break; case "[enter]": if (sender instanceof Player) { ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(((Player) sender).getLocation()); @@ -457,6 +505,18 @@ else if (args[0].equalsIgnoreCase(pset.class.getSimpleName())) subCommands.add(one.getName()); } break; + case "[x]": + if (playerSender != null) + subCommands.add(String.valueOf(playerSender.getLocation().getBlockX())); + break; + case "[y]": + if (playerSender != null) + subCommands.add(String.valueOf(playerSender.getLocation().getBlockY())); + break; + case "[z]": + if (playerSender != null) + subCommands.add(String.valueOf(playerSender.getLocation().getBlockZ())); + break; default: subCommands.add(oneArg); break; From 4fa22a52f71392e7aab64403c1c08b90904f62eb Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 20 Nov 2020 16:11:13 +0200 Subject: [PATCH 0799/1142] Fix for fly issue when teleporting to the edge of residence and leaving it after that --- .../listeners/ResidencePlayerListener.java | 10 ++- .../bukkit/residence/text/help/HelpEntry.java | 76 +++++++------------ 2 files changed, 35 insertions(+), 51 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index e5558b58d..a6643c506 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1182,7 +1182,6 @@ private static boolean placingMinecart(Block block, ItemStack item) { return block != null && block.getType().name().contains("RAIL") && item != null && item.getType().name().contains("MINECART"); } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { @@ -1814,11 +1813,11 @@ private void fly(Player player, boolean state) { if (ResPerm.bypass_fly.hasPermission(player, 10000L)) return; if (!state) { - + // Lets not disable fly mode if player has access to fly command from another plugin if (player.hasPermission("cmi.command.fly") || player.hasPermission("essentials.fly")) return; - + boolean land = player.isFlying(); player.setFlying(state); player.setAllowFlight(state); @@ -1853,7 +1852,7 @@ public void onResidenceChange(ResidenceChangedEvent event) { ClaimedResidence res = event.getTo(); ClaimedResidence ResOld = event.getFrom(); - + Player player = event.getPlayer(); if (player == null) return; @@ -2250,6 +2249,9 @@ public void onPlayerTeleportEvent(PlayerTeleportEvent event) { return; if (event.getPlayer().hasMetadata("NPC")) return; + + currentRes.put(event.getPlayer().getUniqueId(), toRes); + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(fromRes, toRes, event.getPlayer()); plugin.getServ().getPluginManager().callEvent(chgEvent); } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 045a35549..fd7773c42 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -261,6 +261,29 @@ public static HelpEntry parseHelp(FileConfiguration node, String key) { return entry; } + private static String getMp(HashMap> mp) { + StringBuilder st = new StringBuilder(); + for (String one : mp.keySet()) { + if (!st.toString().isEmpty()) + st.append("%%"); + st.append(one); + } + return st.toString(); + } + + private static String getMpEntry(HashMap> mp) { + StringBuilder st = new StringBuilder(); + for (Entry> one : mp.entrySet()) { + if (!st.toString().isEmpty()) + st.append("%%"); + if (one.getKey().equalsIgnoreCase("") && !one.getValue().isEmpty()) + st.append(one.getValue().get(0)); + else + st.append(one.getKey()); + } + return st.toString(); + } + @SuppressWarnings("deprecation") public Set getSubCommands(CommandSender sender, String[] args) { Set subCommands = new HashSet(); @@ -274,7 +297,6 @@ public Set getSubCommands(CommandSender sender, String[] args) { if (args.length > 0) { HashMap> mp = Residence.getInstance().getLocaleManager().CommandTab.get(args[0].toLowerCase()); - if (mp != null) { if (args.length > 1) { if (args[args.length - 1].isEmpty()) { @@ -282,16 +304,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { if (ls != null) { neededArgPlace--; if (args.length == 2) { - StringBuilder st = new StringBuilder(); - for (Entry> one : mp.entrySet()) { - if (!st.toString().isEmpty()) - st.append("%%"); - if (one.getKey().equalsIgnoreCase("") && !one.getValue().isEmpty()) - st.append(one.getValue().get(0)); - else - st.append(one.getKey()); - } - ArgsList.add(st.toString()); + ArgsList.add(getMpEntry(mp)); } else ArgsList = ls; } else { @@ -299,51 +312,22 @@ public Set getSubCommands(CommandSender sender, String[] args) { if (ls != null) { ArgsList = ls; } else { - - StringBuilder st = new StringBuilder(); - for (String one : mp.keySet()) { - if (!st.toString().isEmpty()) - st.append("%%"); - st.append(one); - } - ArgsList.add(st.toString()); - + ArgsList.add(getMp(mp)); } } } else { List main = mp.get(""); if (main != null) { if (args.length == 2) { - StringBuilder st = new StringBuilder(); - for (Entry> one : mp.entrySet()) { - if (!st.toString().isEmpty()) - st.append("%%"); - if (one.getKey().equalsIgnoreCase("") && !one.getValue().isEmpty()) - st.append(one.getValue().get(0)); - else - st.append(one.getKey()); - } - ArgsList.add(st.toString()); + ArgsList.add(getMpEntry(mp)); } else ArgsList = main; } else { - StringBuilder st = new StringBuilder(); - for (String one : mp.keySet()) { - if (!st.toString().isEmpty()) - st.append("%%"); - st.append(one); - } - ArgsList.add(st.toString()); + ArgsList.add(getMp(mp)); } } } else { - StringBuilder st = new StringBuilder(); - for (String one : mp.keySet()) { - if (!st.toString().isEmpty()) - st.append("%%"); - st.append(one); - } - ArgsList.add(st.toString()); + ArgsList.add(getMp(mp)); } } else { for (String one : Residence.getInstance().getLocaleManager().CommandTab.keySet()) { @@ -396,9 +380,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { subCommands.add(oneRes.getName()); } } else { - ArrayList resList = Residence.getInstance().getResidenceManager().getResidenceList(Residence.getInstance().getServerLandName(), true, false, false); - if (resList.size() > 0) - subCommands.addAll(resList); + subCommands.addAll(Residence.getInstance().getResidenceManager().getResidenceList(Residence.getInstance().getServerLandName(), true, false, false)); } break; case "[cresidence]": From d594f5824c94420e149572ebdd70687148f39187 Mon Sep 17 00:00:00 2001 From: matesssaks Date: Sun, 22 Nov 2020 14:37:40 +0100 Subject: [PATCH 0800/1142] SlimeFun protection repair --- .../bukkit/residence/slimeFun/SlimeFunResidenceModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index 646eda287..d652fe45a 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -38,7 +38,7 @@ public boolean hasPermission(OfflinePlayer op, Location loc, ProtectableAction a return false; switch (action) { - case ACCESS_INVENTORIES: + case INTERACT_BLOCK: ClaimedResidence res = residence.getResidenceManager().getByLoc(loc); if (res != null) { boolean allow = res.getPermissions().playerHas(new ResidencePlayer(op), Flags.container, false); From 3cd3f98a9cfefb11ce8649b2a0fa6f02d33dafd4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 7 Dec 2020 13:05:28 +0200 Subject: [PATCH 0801/1142] Optimizing max permission calculation method to be more efficient --- .../bukkit/residence/ConfigManager.java | 34 +---- .../residence/containers/ResidencePlayer.java | 123 +++++------------- .../permissions/PermissionGroup.java | 2 +- .../residence/permissions/PermissionInfo.java | 31 ++++- .../permissions/PermissionManager.java | 116 +++++++++++++++++ 5 files changed, 175 insertions(+), 131 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index c8925a3cf..cda17ce41 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -140,10 +140,7 @@ public class ConfigManager { protected boolean ActionBarOnSelection; protected boolean visualizer; protected int minMoveUpdate; - protected int MaxResCount; - protected int MaxRentCount; - protected int MaxSubzonesCount; - protected int MaxSubzoneDepthCount; + protected int VoteRangeFrom; protected int HealInterval; protected int FeedInterval; @@ -632,19 +629,6 @@ public void UpdateConfigFile() { "This can prevent from teleporting players to residence with 3rd party plugins like esentials /tpa"); BlockAnyTeleportation = c.get("Global.Optimizations.BlockAnyTeleportation", true); - c.addComment("Global.Optimizations.MaxResCount", "Set this as low as possible depending of residence.max.res.[number] permission you are using", - "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxResCount = c.get("Global.Optimizations.MaxResCount", 30); - c.addComment("Global.Optimizations.MaxRentCount", "Set this as low as possible depending of residence.max.rents.[number] permission you are using", - "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxRentCount = c.get("Global.Optimizations.MaxRentCount", 10); - c.addComment("Global.Optimizations.MaxSubzoneCount", "Set this as low as possible depending of residence.max.subzones.[number] permission you are using", - "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxSubzonesCount = c.get("Global.Optimizations.MaxSubzoneCount", 5); - c.addComment("Global.Optimizations.MaxSubzoneDepthCount", "Set this as low as possible depending of residence.max.subzonedepth.[number] permission you are using", - "In example if you are giving max number of 10 for players, set it to 15, if its 30, set it to 35 just to have some small buffer in case"); - MaxSubzoneDepthCount = c.get("Global.Optimizations.MaxSubzoneDepthCount", 5); - c.addComment("Global.Optimizations.OverridePvp", "By setting this to true, regular pvp flag will be acting as overridepvp flag", "Overridepvp flag tries to ignore any pvp protection in that residence by any other plugin"); OverridePvp = c.get("Global.Optimizations.OverridePvp", false); @@ -1758,22 +1742,6 @@ public int getMinMoveUpdateInterval() { return minMoveUpdate; } - public int getMaxResCount() { - return MaxResCount; - } - - public int getMaxRentCount() { - return MaxRentCount; - } - - public int getMaxSubzonesCount() { - return MaxSubzonesCount; - } - - public int getMaxSubzoneDepthCount() { - return MaxSubzoneDepthCount; - } - public int getVoteRangeFrom() { return VoteRangeFrom; } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index c6ca37776..70ab7c27f 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -21,6 +21,7 @@ import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.permissions.PermissionInfo; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.raid.ResidenceRaid; @@ -116,45 +117,25 @@ public ClaimedResidence getMainResidence() { return mainResidence; } - private Long lastMaxResRecalculation = 0L; - public void recountMaxRes() { - if (lastMaxResRecalculation + 10000L > System.currentTimeMillis()) - return; - lastMaxResRecalculation = System.currentTimeMillis(); - if (this.getGroup() != null) - this.maxRes = this.getGroup().getMaxZones(); - this.maxRes = this.maxRes == -1 ? maxValue : this.maxRes; if (player != null && player.isOnline()) { if (ResPerm.max_res_unlimited.hasSetPermission(player)) { this.maxRes = maxValue; return; } - } else if (ofPlayer != null) { - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_res_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { - this.maxRes = maxValue; - return; - } + } else if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_res_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { + this.maxRes = maxValue; + return; } - for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxResCount(); i++) { - if (player != null && player.isOnline()) { - if (ResPerm.max_res_$1.hasSetPermission(player, String.valueOf(i))) - this.maxRes = i; - } else if (ofPlayer != null) { - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_res_$1.getPermission(String.valueOf(i)), Residence.getInstance().getConfigManager().getDefaultWorld())) - this.maxRes = i; - } - } - } + int m = this.getGroup().getMaxZones(); + m = m == -1 ? maxValue : m; - private Long lastMaxRentsRecalculation = 0L; + this.maxRes = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_res_$1).getMaxValue(m); + } public void recountMaxRents() { - if (lastMaxRentsRecalculation + 10000L > System.currentTimeMillis()) - return; - lastMaxRentsRecalculation = System.currentTimeMillis(); if (player != null) { if (ResPerm.max_rents_unlimited.hasSetPermission(player)) { @@ -162,27 +143,16 @@ public void recountMaxRents() { return; } } else { - if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_rents_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { - this.maxRents = maxValue; - return; - } - } - for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxRentCount(); i++) { - if (player != null) { - if (ResPerm.max_rents_$1.hasSetPermission(player, String.valueOf(i))) - this.maxRents = i; - } else { - if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_rents_$1.getPermission(String.valueOf(i)), Residence.getInstance().getConfigManager().getDefaultWorld())) - this.maxRents = i; + if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_rents_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { + this.maxRents = maxValue; + return; } } int m = this.getGroup().getMaxRents(); m = m == -1 ? maxValue : m; - if (this.maxRents < m) - this.maxRents = m; + + this.maxRents = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_rents_$1).getMaxValue(m); } public int getMaxRents() { @@ -190,12 +160,7 @@ public int getMaxRents() { return this.maxRents; } - private Long lastMaxSubzonesRecalculation = 0L; - public void recountMaxSubzones() { - if (lastMaxSubzonesRecalculation + 10000L > System.currentTimeMillis()) - return; - lastMaxSubzonesRecalculation = System.currentTimeMillis(); if (player != null) { if (ResPerm.max_subzones_unlimited.hasSetPermission(player)) { @@ -203,27 +168,15 @@ public void recountMaxSubzones() { return; } } else { - if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzones_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { - this.maxSubzones = maxValue; - return; - } - } - for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxSubzonesCount(); i++) { - if (player != null) { - if (ResPerm.max_subzones_$1.hasSetPermission(player, String.valueOf(i))) - this.maxSubzones = i; - } else { - if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzones_$1.getPermission(String.valueOf(i)), Residence.getInstance().getConfigManager().getDefaultWorld())) - this.maxSubzones = i; + if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzones_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { + this.maxSubzones = maxValue; + return; } } int m = this.getGroup().getMaxSubzones(); m = m == -1 ? maxValue : m; - if (this.maxSubzones < m) - this.maxSubzones = m; + this.maxSubzones = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_subzones_$1).getMaxValue(m); } public int getMaxSubzones() { @@ -231,12 +184,7 @@ public int getMaxSubzones() { return this.maxSubzones; } - private Long lastMaxSubzonesDepthRecalculation = 0L; - public void recountMaxSubzoneDepth() { - if (lastMaxSubzonesDepthRecalculation + 10000L > System.currentTimeMillis()) - return; - lastMaxSubzonesDepthRecalculation = System.currentTimeMillis(); if (player != null) { if (ResPerm.max_subzonedepth_unlimited.hasSetPermission(player)) { @@ -244,27 +192,17 @@ public void recountMaxSubzoneDepth() { return; } } else { - if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzonedepth_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { - this.maxSubzoneDepth = maxValue; - return; - } - } - for (int i = 1; i <= Residence.getInstance().getConfigManager().getMaxSubzoneDepthCount(); i++) { - if (player != null) { - if (ResPerm.max_subzonedepth_$1.hasSetPermission(player, String.valueOf(i))) - this.maxSubzoneDepth = i; - } else { - if (ofPlayer != null) - if (ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzonedepth_$1.getPermission(String.valueOf(i)), Residence.getInstance().getConfigManager().getDefaultWorld())) - this.maxSubzoneDepth = i; + if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzonedepth_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { + this.maxSubzoneDepth = maxValue; + return; } } int m = this.getGroup().getMaxSubzoneDepth(); m = m == -1 ? maxValue : m; - if (this.maxSubzoneDepth < m) - this.maxSubzoneDepth = m; + + this.maxSubzoneDepth = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_subzonedepth_$1).getMaxValue(m); + } public int getMaxSubzoneDepth() { @@ -281,14 +219,13 @@ public int getMaxRes() { return this.maxRes; } - public PermissionGroup forceUpdateGroup() { - updatePlayer(); - return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), true); + public PermissionGroup getGroup() { + return getGroup(false); } - public PermissionGroup getGroup() { + public PermissionGroup getGroup(boolean forceUpdate) { updatePlayer(); - return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld()); + return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), forceUpdate); } public PermissionGroup getGroup(String world) { @@ -438,7 +375,7 @@ public void removeBossBar(BossBarInfo bossBar) { } public void addBossBar(BossBarInfo barInfo) { - Debug.D("add bossbar"); + if (!barMap.containsKey(barInfo.getNameOfBar().toLowerCase())) { barMap.put(barInfo.getNameOfBar().toLowerCase(), barInfo); Residence.getInstance().getBossBarManager().showBar(barInfo); @@ -556,10 +493,10 @@ public boolean canPlaceBlock(Block block, boolean inform) { return ResidenceBlockListener.canPlaceBlock(this.getPlayer(), block, inform); } - public boolean canDamageEntity(Entity entity, boolean inform) { + public boolean canDamageEntity(Entity entity, boolean inform) { return ResidenceEntityListener.canDamageEntity(this.getPlayer(), entity, inform); } - + // public boolean canDamagePlayer(Player player, boolean inform) { // // } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 80e1676f0..3b42711b1 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -496,7 +496,7 @@ public boolean itemListAccess() { public void printLimits(CommandSender player, OfflinePlayer target, boolean resadmin) { ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(target.getName()); - rPlayer.forceUpdateGroup(); + rPlayer.getGroup(true); PermissionGroup group = rPlayer.getGroup(); Residence.getInstance().msg(player, lm.General_Separator); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionInfo.java b/src/com/bekvon/bukkit/residence/permissions/PermissionInfo.java index 687a16a69..049a712c0 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionInfo.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionInfo.java @@ -1,5 +1,10 @@ package com.bekvon.bukkit.residence.permissions; +import java.util.HashSet; +import java.util.Set; + +import com.bekvon.bukkit.residence.utils.Debug; + public class PermissionInfo { private String permission; @@ -9,6 +14,8 @@ public class PermissionInfo { private Double maxValue = null; private Double minValue = null; + private Set values = new HashSet(); + public PermissionInfo(String permission, Long delay) { this.permission = permission; if (delay != null) @@ -50,8 +57,12 @@ public Double getMaxValue() { return maxValue; } - public Double getMaxValue(Double defaultV) { - return maxValue == null ? defaultV : maxValue; + public Double getMaxValue(double defaultV) { + return maxValue == null ? defaultV : maxValue > defaultV ? maxValue : defaultV; + } + + public int getMaxValue(int defaultV) { + return maxValue == null ? defaultV : maxValue > defaultV ? maxValue.intValue() : defaultV; } public void setMaxValue(Double maxValue) { @@ -62,8 +73,12 @@ public Double getMinValue() { return minValue; } - public Double getMinValue(Double defaultV) { - return minValue == null ? defaultV : minValue; + public Double getMinValue(double defaultV) { + return minValue == null ? defaultV : minValue < defaultV ? minValue : defaultV; + } + + public int getMinValue(int defaultV) { + return minValue == null ? defaultV : minValue < defaultV ? minValue.intValue() : defaultV; } public void setMinValue(Double minValue) { @@ -78,4 +93,12 @@ public void setEnabled(boolean enabled) { this.enabled = enabled; } + public Set getValues() { + return values; + } + + public void addValue(String value) { + this.values.add(value); + } + } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index b85a04a40..de2b1a194 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -9,6 +9,7 @@ import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.Map.Entry; import java.util.logging.Level; import java.util.logging.Logger; @@ -579,4 +580,119 @@ public boolean isSetPermission(CommandSender sender, String perm) { public boolean isSetPermission(Player player, String perm) { return player.hasPermission(new Permission(perm, PermissionDefault.FALSE)); } + + @Deprecated + public PermissionInfo getPermissionInfo(Player player, String perm, Long delayInMiliseconds) { + return getPermissionInfo(player, perm, false, delayInMiliseconds); + } + + @Deprecated + public PermissionInfo getPermissionInfo(Player player, ResPerm perm) { + return getPermissionInfo(player, perm, 1000L); + } + + public PermissionInfo getPermissionInfo(UUID uuid, ResPerm perm) { + return getPermissionInfo(uuid, perm, 1000L); + } + + @Deprecated + public PermissionInfo getPermissionInfo(Player player, ResPerm perm, Long delayInMiliseconds) { + return getPermissionInfo(player.getUniqueId(), perm, delayInMiliseconds); + } + + public PermissionInfo getPermissionInfo(UUID uuid, ResPerm perm, Long delayInMiliseconds) { + String permission = perm.getPermission(" "); + if (permission.endsWith(" ")) + permission = permission.replace(" ", ""); + if (permission.endsWith(".")) + permission = permission.substring(0, permission.length() - 1); + return getPermissionInfo(uuid, permission, false, delayInMiliseconds); + } + + @Deprecated + public PermissionInfo getPermissionInfo(Player player, String perm) { + return getPermissionInfo(player, perm, false, 1000L); + } + + @Deprecated + public PermissionInfo getPermissionInfo(Player player, String perm, boolean force) { + return getPermissionInfo(player, perm, force, 1000L); + } + + @Deprecated + public PermissionInfo getPermissionInfo(Player player, String perm, boolean force, Long delay) { + return getPermissionInfo(player.getUniqueId(), perm, force, delay); + } + + public PermissionInfo getPermissionInfo(UUID uuid, String perm, boolean force, Long delay) { + perm = perm.toLowerCase(); + if (!perm.endsWith(".")) + perm += "."; + + if (uuid == null) + return new PermissionInfo(perm, delay); + + HashMap c = cache.get(uuid); + if (c == null) + c = new HashMap(); + + PermissionInfo p = c.get(perm); + + if (p == null) + p = new PermissionInfo(perm, delay); + + if (delay != null) + p.setDelay(delay); + + String pref = perm.contains(".") ? perm.split("\\.")[0] : perm; + + if (force || p.isTimeToRecalculate()) { + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + HashMap all = getAll(player, pref); + + Double max = null; + Double min = null; + for (Entry uno : all.entrySet()) { + if (!uno.getValue()) + continue; + + if (!uno.getKey().startsWith(perm)) + continue; + + String value = uno.getKey().replace(perm, ""); + + p.addValue(value); + try { + double t = Double.parseDouble(value); + + if (max == null || t > max) + max = t; + + if (min == null || t < min) + min = t; + } catch (Exception e) { + } + + } + + p.setMaxValue(max); + p.setMinValue(min); + } + } + p.setLastChecked(System.currentTimeMillis()); + c.put(perm, p); + cache.put(uuid, c); + return p; + } + + private static HashMap getAll(Player player, String pref) { + pref = pref.endsWith(".") ? pref : pref + "."; + HashMap mine = new HashMap(); + for (PermissionAttachmentInfo permission : player.getEffectivePermissions()) { + if (permission.getPermission().startsWith(pref)) + mine.put(permission.getPermission(), permission.getValue()); + } + return mine; + } } From af93604a436012e84041f9d4beaf3ceb877ea08f Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 7 Dec 2020 13:42:47 +0200 Subject: [PATCH 0802/1142] Lets prevent flag addition while plugin is not yet loaded --- .../residence/permissions/PermissionManager.java | 4 +--- .../residence/protection/FlagPermissions.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index de2b1a194..1cecaa556 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -1,15 +1,14 @@ package com.bekvon.bukkit.residence.permissions; import java.io.File; -import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.UUID; -import java.util.Map.Entry; import java.util.logging.Level; import java.util.logging.Logger; @@ -33,7 +32,6 @@ import com.bekvon.bukkit.residence.containers.PlayerGroup; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; import com.nijikokun.bukkit.Permissions.Permissions; import com.platymuus.bukkit.permissions.PermissionsPlugin; diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index e811d4fcb..760093afc 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -14,6 +14,7 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.OfflinePlayer; @@ -86,6 +87,10 @@ public static void addFlag(Flags flag) { } public static void addFlag(String flag) { + if (Residence.getInstance() == null) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Can't add flags (" + flag + ") to residence plugin before it was initialized"); + return; + } flag = flag.toLowerCase(); if (!validFlags.contains(flag)) { validFlags.add(flag); @@ -106,6 +111,10 @@ public static void addPlayerOrGroupOnlyFlag(Flags flag) { } public static void addPlayerOrGroupOnlyFlag(String flag) { + if (Residence.getInstance() == null) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Can't add flags (" + flag + ") to residence plugin before it was initialized"); + return; + } flag = flag.toLowerCase(); if (!validPlayerFlags.contains(flag)) { validPlayerFlags.add(flag); @@ -126,6 +135,10 @@ public static void addResidenceOnlyFlag(Flags flag) { } public static void addResidenceOnlyFlag(String flag) { + if (Residence.getInstance() == null) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Can't add flags (" + flag + ") to residence plugin before it was initialized"); + return; + } flag = flag.toLowerCase(); if (!validAreaFlags.contains(flag)) { validAreaFlags.add(flag); From d9957fb5e4ef0c667efc7bfe7285f3d02d8494bf Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 7 Dec 2020 15:02:38 +0200 Subject: [PATCH 0803/1142] Fixing lectern book take action issue --- .../listeners/ResidencePlayerListener1_14.java | 3 ++- .../listeners/ResidencePlayerListener1_16.java | 2 +- .../residence/protection/FlagPermissions.java | 16 ++++++++++++++++ .../bukkit/residence/utils/FileCleanUp.java | 1 + 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_14.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_14.java index 5a96cfac8..e8f93c87f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_14.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_14.java @@ -28,7 +28,8 @@ public void onJump(PlayerTakeLecternBookEvent event) { return; } FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(event.getLectern().getLocation(), event.getPlayer()); - if (perms.has(Flags.container, FlagCombo.TrueOrNone)) + + if (perms.playerHas(event.getPlayer(), Flags.container, FlagCombo.TrueOrNone)) return; event.setCancelled(true); Residence.getInstance().msg(event.getPlayer(), lm.Flag_Deny, Flags.container); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java index f41925037..91977d443 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java @@ -27,7 +27,7 @@ public ResidencePlayerListener1_16(Residence plugin) { this.plugin = plugin; } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onPlayerInteractRespawn(PlayerInteractEvent event) { if (event.getPlayer() == null) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 760093afc..4280d7395 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -509,6 +509,22 @@ public boolean playerHas(ResidencePlayer resPlayer, Flags flag, boolean def) { return this.playerCheck(resPlayer.getPlayer(), flag.toString(), this.groupCheck(resPlayer.getGroup(), flag.toString(), this.has(flag, def))); } + public boolean playerHas(Player player, Flags flag, FlagCombo f) { + switch (f) { + case FalseOrNone: + return !playerHas(player, flag, false); + case OnlyFalse: + return !playerHas(player, flag, true); + case OnlyTrue: + return playerHas(player, flag, false); + case TrueOrNone: + return playerHas(player, flag, true); + default: + return false; + } + + } + public boolean playerHas(Player player, Flags flag, boolean def) { if (player == null) return false; diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index ac670cb94..3f6911a44 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -71,6 +71,7 @@ public void cleanFiles() { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getUniqueId()); + plugin.getResidenceManager().removeResidence(rPlayer, oneName.getValue(), true, plugin.getConfigManager().isAutoCleanUpRegenerate()); i++; } From 649b6a1fe421e3e347bbbf94ede7bd53490e906f Mon Sep 17 00:00:00 2001 From: sandtechnology <20417547+sandtechnology@users.noreply.github.com> Date: Sat, 16 Jan 2021 14:59:36 +0800 Subject: [PATCH 0804/1142] Fix #354, just check the block location permission When a block was changed, plugin should check the block location permissions rather than entity location permissions, otherwise wither outside the residence could break the block in residence. --- .../bukkit/residence/listeners/ResidenceEntityListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 0540862dd..d7ead13a8 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -995,7 +995,7 @@ public void onSplashPotion(EntityChangeBlockEvent event) { if (ent.getType() != EntityType.WITHER) return; - if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.witherdestruction, FlagCombo.OnlyFalse)) + if (!plugin.getPermsByLoc(event.getBlock().getLocation()).has(Flags.witherdestruction, FlagCombo.OnlyFalse)) return; event.setCancelled(true); From 3daaf5bded8a91df515951937bc2b92e5d5ea2cf Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jan 2021 11:47:32 +0200 Subject: [PATCH 0805/1142] nametag flag to prevent nametag usage in residence --- .../bekvon/bukkit/cmiLib/CMIChatColor.java | 76 ------------------- .../residence/BossBar/BossBarManager.java | 1 - .../bekvon/bukkit/residence/Residence.java | 2 +- .../bukkit/residence/allNms/v1_8Events.java | 2 + .../bukkit/residence/containers/Flags.java | 1 + .../listeners/ResidencePlayerListener.java | 25 +++++- .../bukkit/residence/raid/ResidenceRaid.java | 1 - 7 files changed, 26 insertions(+), 82 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java index a721b4a41..65a2e67ac 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java @@ -336,82 +336,6 @@ public static String deColorize(String text) { } } -// if (text.contains(colorCodePrefix)) { -// String t = text; -// Matcher match = postGradientPattern.matcher(t); -// double prevDist = Double.MAX_VALUE; -// StringBuilder endTest = new StringBuilder(); -// String prevG9 = ""; -// while (match.find()) { -// String g1 = match.group(1); -// -// if (!t.startsWith(g1)) { -// CMIDebug.d("Not start ", t, g1); -// prevDist = Double.MAX_VALUE; -// } -// -// String g9 = match.group(9); -// String g8 = match.group(8); -// CMIChatColor h1 = getColor(g1); -// CMIChatColor h2 = getColor(g9); -// -// -// if (h1.getHex() == null || h2.getHex() == null) -// continue; -// -// java.awt.Color c1 = null; -// try { -// c1 = new java.awt.Color( -// Integer.valueOf(h1.getHex().substring(0, 2), 16), -// Integer.valueOf(h1.getHex().substring(2, 4), 16), -// Integer.valueOf(h1.getHex().substring(4, 6), 16)); -// } catch (Throwable e) { -// break; -// } -// -// java.awt.Color c2 = null; -// try { -// c2 = new java.awt.Color( -// Integer.valueOf(h2.getHex().substring(0, 2), 16), -// Integer.valueOf(h2.getHex().substring(2, 4), 16), -// Integer.valueOf(h2.getHex().substring(4, 6), 16)); -// } catch (Throwable e) { -// break; -// } -// -// int red1 = c1.getRed(); -// int red2 = c2.getRed(); -// int rmean = (red1 + red2) >> 1; -// int r = red1 - red2; -// int g = c1.getGreen() - c2.getGreen(); -// int b = c1.getBlue() - c2.getBlue(); -// double dist = Math.sqrt((((512 + rmean) * r * r) >> 8) + 4 * g * g + (((767 - rmean) * b * b) >> 8)); -// -// String[] split = t.split(escape(g1) + match.group(8).replace("|", "\\|"), 2); -// t = split[1]; -// -// endTest.append(split[0]); -// if (prevDist == Double.MAX_VALUE) -// endTest.append(g1 + match.group(8)); -// else { -// if (prevDist - dist <= 3) -// endTest.append(match.group(8)); -// else -// endTest.append(g1 + match.group(8)); -// } -// prevG9 = g9; -// -// prevDist = dist; -// -// match = postGradientPattern.matcher(t); -// -// CMIDebug.d("Distance ", g8, g1, g9, (int) (dist * 100) / 100D, prevDist - dist <= 2 ? "OK" : "FAIL"); -// } -// endTest.append(prevG9); -// -// CMIDebug.d("endString: " + endTest); -// } - return text; } diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java index c243855a2..981a56061 100644 --- a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java +++ b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java @@ -263,7 +263,6 @@ public void run() { // public void run() { // // if (barInfo.getAutoId() != null) { -// Debug.D("show boss " + barInfo.getAutoId()); // Show(barInfo); // } // diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 53e2da9e2..251e22800 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -162,7 +162,7 @@ public class Residence extends JavaPlugin { protected ResidenceRaidListener slistener; protected ResidenceCommandListener commandManager; - + protected BossBarManager BossBarManager; protected SpigotListener spigotlistener; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java index cfd4fdfc1..6e98e6b5c 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java @@ -12,11 +12,13 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockExplodeEvent; import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; public class v1_8Events implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 98617829d..916e817c8 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -75,6 +75,7 @@ public enum Flags { mobkilling(CMIMaterial.ROTTEN_FLESH, FlagMode.Both, "Allows or denys mob killing", true), monsters(CMIMaterial.SPAWNER, FlagMode.Residence, "Allows or denys monster spawns", true), move(CMIMaterial.LEATHER_BOOTS, FlagMode.Both, "Allows or denys movement in the residence", true), + nametag(CMIMaterial.NAME_TAG, FlagMode.Both, "Allows or denys name tag usage", true), nanimals(CMIMaterial.COW_SPAWN_EGG, FlagMode.Residence, "Allows or denys natural animal spawns", true), nmonsters(CMIMaterial.SKELETON_SPAWN_EGG, FlagMode.Residence, "Allows or denys natural monster spawns", true), night(CMIMaterial.BLACK_WOOL, FlagMode.Residence, "Sets night time in residence", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index a6643c506..63af439df 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1571,6 +1571,25 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractAtArmoStand(PlayerInteractEntityEvent event) { + + Player player = event.getPlayer(); + if (Residence.getInstance().isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + if (!Residence.getInstance().getNms().isArmorStandEntity(ent.getType())) + return; + + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); + + if (!perms.playerHas(player, Flags.nametag, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.nametag); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { // Disabling listener if flag disabled globally @@ -1852,7 +1871,7 @@ public void onResidenceChange(ResidenceChangedEvent event) { ClaimedResidence res = event.getTo(); ClaimedResidence ResOld = event.getFrom(); - + Player player = event.getPlayer(); if (player == null) return; @@ -2249,9 +2268,9 @@ public void onPlayerTeleportEvent(PlayerTeleportEvent event) { return; if (event.getPlayer().hasMetadata("NPC")) return; - + currentRes.put(event.getPlayer().getUniqueId(), toRes); - + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(fromRes, toRes, event.getPlayer()); plugin.getServ().getPluginManager().callEvent(chgEvent); } diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java index 0561b4005..11483afc2 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -358,7 +358,6 @@ public void run() { @Override public void run() { if (!isUnderRaid() && !isInPreRaid()) { - Debug.D("canceling bossbar " + schedBossBarId); Bukkit.getServer().getScheduler().cancelTask(schedBossBarId); return; } From a7a09375efa16f3d93f9413b652a225cc5497d4c Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jan 2021 11:57:03 +0200 Subject: [PATCH 0806/1142] Lets load plugin straight away without need to restart server --- src/com/bekvon/bukkit/residence/Residence.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 251e22800..f99f6b073 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -162,7 +162,7 @@ public class Residence extends JavaPlugin { protected ResidenceRaidListener slistener; protected ResidenceCommandListener commandManager; - + protected BossBarManager BossBarManager; protected SpigotListener spigotlistener; @@ -712,11 +712,11 @@ public void run() { setKingdoms(); PluginManager pm = getServer().getPluginManager(); - + blistener = new ResidenceBlockListener(this); plistener = new ResidencePlayerListener(this); if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) - pm.registerEvents(new ResidencePlayerListener1_14(this), this); + pm.registerEvents(new ResidencePlayerListener1_14(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_15_R1)) pm.registerEvents(new ResidencePlayerListener1_15(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_16_R1)) @@ -728,7 +728,6 @@ public void run() { shlistener = new ShopListener(this); spigotlistener = new SpigotListener(); - pm.registerEvents(blistener, this); pm.registerEvents(plistener, this); pm.registerEvents(elistener, this); @@ -1372,9 +1371,12 @@ protected boolean loadYml() throws Exception { try { File worldFolder = new File(saveFolder, "Worlds"); if (!saveFolder.isDirectory()) { - this.getLogger().warning("Save directory does not exist..."); - this.getLogger().warning("Please restart server"); - return true; + saveFolder.mkdir(); + if (!saveFolder.isDirectory()) { + this.getLogger().warning("Save directory does not exist..."); + this.getLogger().warning("Please restart server"); + return true; + } } long time; YMLSaveHelper yml; From 543862ebfc70d9aa9634b3561eb637b2a6036754 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jan 2021 12:15:54 +0200 Subject: [PATCH 0807/1142] equals and not == (OowhitecatoO) --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 107286b0d..681019c8d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -635,7 +635,7 @@ public boolean addSubzone(Player player, Location loc1, Location loc2, String na } public boolean isServerLand() { - return this.getOwnerUUID().toString() == Residence.getInstance().getServerLandUUID(); + return this.getOwnerUUID().toString().equals(Residence.getInstance().getServerLandUUID()); } public boolean addSubzone(Player player, String name, boolean resadmin) { From 933e476d5041c457142cd175d756ad9f64274bfe Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jan 2021 12:45:19 +0200 Subject: [PATCH 0808/1142] Sorting flags in flags.yml (TheNety) --- .../bukkit/residence/ConfigManager.java | 10 +- src/flags.yml | 741 +++++++++++------- 2 files changed, 473 insertions(+), 278 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index cda17ce41..4339e3696 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -15,6 +15,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.TreeMap; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -406,9 +407,14 @@ void UpdateFlagFile() { // conf.crea.createSection("Global.CompleteDisable"); if (!conf.isList("Global.TotalFlagDisabling")) - conf.set("Global.TotalFlagDisabling", Arrays.asList("Completely", "Disabled", "Particular", "Flags")); + conf.set("Global.TotalFlagDisabling", Arrays.asList("Completely", "Disable", "Particular", "Flags")); + TreeMap sorted = new TreeMap<>(); for (Flags fl : Flags.values()) { + sorted.put(fl.getName(), fl); + } + + for (Flags fl : sorted.values()) { if (conf.isBoolean("Global.FlagPermission." + fl)) continue; conf.createSection("Global.FlagPermission." + fl); @@ -428,7 +434,7 @@ void UpdateFlagFile() { ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); - for (Flags fl : Flags.values()) { + for (Flags fl : sorted.values()) { guiSection.set(fl.toString(), guiSection.get(fl.toString(), fl.getIcon().toString())); } diff --git a/src/flags.yml b/src/flags.yml index 37985d016..a103765d9 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -1,277 +1,466 @@ -#These are Global Settings for Residence. +# These are Global Settings for Residence. Global: - # These are world flags that are applied when the player is NOT within a residence. - Flags: - Global: #these are default for all worlds unless specified below, they can be overridden per group - use: true - build: true - ignite: true - firespread: true - damage: true - creeper: true - tnt: true - pvp: true - WorldNameHere: #here you can set flags for individual worlds, these override Global - #build: true - # This gives permission to change certain flags to all groups, unless specifically denied to the group. - FlagPermission: - move: true - build: true - place: true - destroy: true - use: true - container: true - pvp: true - tp: true - ignite: true - firespread: true - flow: true - lavaflow: true - waterflow: true - creeper: true - tnt: true - monsters: true - animals: true - animalkilling: true - mobkilling: true - vehicledestroy: true - trade: true - shear: true - leash: true - nofly: false - subzone: true - healing: true - piston: true - diode: true - lever: true - button: true - door: true - table: true - enchant: true - brew: true - bed: true - cake: true - note: true - trample: true - burn: true - explode: true - fireball: true - command: false - day: true - night: true - chat: true - hidden: false - overridepvp: false - keepinv: false - keepexp: false - shop: true - bank: false - # This sets GUI items to represent each flag, if not given, then gray wool will be used - FlagGui: - animalkilling: CHICKEN - animals: PIG_SPAWN_EGG - bed: WHITE_BED - brew: BREWING_STAND - build: BRICKS - burn: TORCH - button: OAK_BUTTON - cake: CAKE - canimals: SHEEP_SPAWN_EGG - chat: WRITABLE_BOOK - cmonsters: CREEPER_SPAWN_EGG - command: COMMAND_BLOCK - container: CHEST_MINECART - creeper: CREEPER_SPAWN_EGG - destroy: END_STONE - diode: REPEATER - door: OAK_DOOR - enchant: ENCHANTING_TABLE - explode: TNT_MINECART - fireball: FIRE_CHARGE - firespread: BLAZE_POWDER - flow: LILY_PAD - healing: POTION - ignite: FLINT_AND_STEEL - lavaflow: LAVA_BUCKET - leash: LEAD - lever: LEVER - mobkilling: ROTTEN_FLESH - monsters: SPAWNER - move: LEATHER_BOOTS - nanimals: COW_SPAWN_EGG - nmonsters: SKELETON_SPAWN_EGG - nofly: ORANGE_CARPET - nomobs: BARRIER - note: NOTE_BLOCK - piston: PISTON - place: SEA_LANTERN - pvp: WOODEN_SWORD - sanimals: RABBIT_SPAWN_EGG - shear: SHEARS - smonsters: ZOMBIE_SPAWN_EGG - subzone: GRAY_STAINED_GLASS_PANE - table: CRAFTING_TABLE - tnt: TNT - tp: END_PORTAL_FRAME - trade: EMERALD - trample: DIRT - use: STONE_PRESSURE_PLATE - vehicledestroy: MINECART - waterflow: WATER_BUCKET - anvil: ANVIL - admin: BEDROCK - anvilbreak: ANVIL - backup: BOOKSHELF - bank: ENDER_CHEST - beacon: BEACON - chorustp: CHORUS_FRUIT - commandblock: COMMAND_BLOCK - coords: COMPASS - craft: STONE - dragongrief: DIRT - day: DANDELION - dye: ORANGE_DYE - damage: GOLDEN_SWORD - decay: OAK_LEAVES - dryup: BLUE_STAINED_GLASS_PANE - egg: EGG - enderpearl: ENDER_PEARL - fallinprotection: SAND - falldamage: LEATHER_BOOTS - feed: COOKED_BEEF - friendlyfire: SUNFLOWER - flowinprotection: OAK_BOAT - flowerpot: FLOWER_POT - grow: WHEAT_SEEDS - glow: SEA_LANTERN - hotfloor: MAGMA_BLOCK - hidden: GLASS_PANE - hook: FISHING_ROD - iceform: ICE - icemelt: ICE - itemdrop: FEATHER - itempickup: GUNPOWDER - jump2: SLIME_BLOCK - jump3: SLIME_BLOCK - keepinv: LEATHER_HELMET - keepexp: GOLDEN_APPLE - mobexpdrop: MELON_SEEDS - mobitemdrop: COCOA_BEANS - night: BLACK_WOOL - fly: ORANGE_CARPET - nodurability: ANVIL - overridepvp: IRON_SWORD - pressure: LIGHT_WEIGHTED_PRESSURE_PLATE - pistonprotection: STICKY_PISTON - rain: BLUE_ORCHID - redstone: SUNFLOWER - respawn: SUNFLOWER - riding: SADDLE - shoot: ARROW - sun: SUNFLOWER - shop: ITEM_FRAME - snowtrail: SNOW - spread: SNOWBALL - snowball: SNOWBALL - trusted: STONE - witherspawn: WITHER_SKELETON_SKULL - witherdamage: WITHER_SKELETON_SKULL - witherdestruction: WITHER_SKELETON_SKULL - wspeed1: POTION - wspeed2: POTION - testing: WHITE_WOOL - phantomspawn: BROWN_WOOL - # These are default flags applied to all residences from any user group. - ResidenceDefault: - build: false - destroy: false - use: false - container: false - pvp: false - tnt: false - creeper: false - ignite: false - firespread: false - vehicledestroy: false - animalkilling: false - hook: false - shear: false - leash: false - pistonprotection: true - tp: true - explode: false - # These are default flags applied to the residence creator of any group. - CreatorDefault: - build: true - destroy: true - move: true - use: true - ignite: true - container: true - animalkilling: true - mobkilling: true - vehicledestroy: true - trade: true - shear: true - leash: true - # These are default flags applied to the residence renter of any group. - RentedDefault: - container: true - ignite: true - move: true - trade: true - mobkilling: true - shear: true - build: true - use: true - destroy: true - vehicledestroy: true - leash: true - animalkilling: true - admin: true - # These are grouped flags, so when using /res pset nickname redstone true, player will get all flags in list, same when setting to false or removing them. - GroupedFlags: - redstone: - - note - - pressure - - lever - - button - - diode - craft: - - brew - - table - - enchant - trusted: - - use - - tp - - build - - destroy - - container - - move - - leash - - animalkilling - - mobkilling - - shear - - chat - - beacon - fire: - - ignite - - firespread -ItemList: #this is where you can create blacklists / whitelists - DefaultList: #list name is not important, as long as it is unique. Its good to use a descripive name. - #type of the list, can be blacklist, whitelist, or ignorelist - Type: blacklist - #If you want, you can have this list only apply to one world, otherwise it applies to all worlds - #World: world - #You can also have the list apply only to one group, otherwise it applies for all groups - #Group: default - #this is the actual list of material names that this list allows or disallows - #You can look up the material name by item ID in game by typing /res material - #Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance - Items: - - 'BEDROCK' - - 'LAVA' - - 'WATER' - - 'STATIONARY_LAVA' - - 'STATIONARY_WATER' - - 'MOB_SPAWNER' \ No newline at end of file + # These are world flags that are applied when the player is NOT within a residence. + Flags: + # these are default for all worlds unless specified below, they can be overridden per group + Global: + use: true + build: true + ignite: true + firespread: true + damage: true + creeper: true + tnt: true + pvp: true + # This gives permission to change certain flags to all groups, unless specifically denied to the group. + FlagPermission: + # Applies to: Player + admin: true + # Applies to: Both + anchor: true + # Applies to: Both + animalkilling: false + # Applies to: Residence + animals: true + # Applies to: Both + anvil: true + # Applies to: Residence + anvilbreak: true + # Applies to: Residence + backup: false + # Applies to: Both + bank: true + # Applies to: Both + beacon: true + # Applies to: Both + bed: true + # Applies to: Both + brew: true + # Applies to: Both + build: false + # Applies to: Residence + burn: true + # Applies to: Both + button: true + # Applies to: Both + cake: true + # Applies to: Residence + canimals: true + # Applies to: Both + chat: true + # Applies to: Both + chorustp: true + # Applies to: Residence + cmonsters: true + # Applies to: Both + command: false + # Applies to: Both + commandblock: false + # Applies to: Both + container: false + # Applies to: Residence + coords: true + # Applies to: Residence + craft: true + # Applies to: Residence + creeper: false + # Applies to: Residence + damage: false + # Applies to: Residence + day: true + # Applies to: Residence + decay: true + # Applies to: Both + destroy: false + # Applies to: Both + diode: true + # Applies to: Both + door: true + # Applies to: Residence + dragongrief: true + # Applies to: Residence + dryup: true + # Applies to: Both + dye: true + # Applies to: Both + egg: true + # Applies to: Both + enchant: true + # Applies to: Both + enderpearl: true + # Applies to: Residence + explode: false + # Applies to: Residence + falldamage: true + # Applies to: Residence + fallinprotection: true + # Applies to: Residence + feed: true + # Applies to: Residence + fireball: true + # Applies to: Residence + firespread: false + # Applies to: Residence + flow: true + # Applies to: Both + flowerpot: true + # Applies to: Residence + flowinprotection: true + # Applies to: Both + fly: false + # Applies to: Player + friendlyfire: false + # Applies to: Residence + glow: true + # Applies to: Residence + grow: true + # Applies to: Residence + healing: true + # Applies to: Residence + hidden: false + # Applies to: Both + honey: true + # Applies to: Both + honeycomb: true + # Applies to: Both + hook: false + # Applies to: Residence + hotfloor: true + # Applies to: Residence + iceform: true + # Applies to: Residence + icemelt: true + # Applies to: Both + ignite: false + # Applies to: Both + itemdrop: true + # Applies to: Both + itempickup: true + # Applies to: Residence + jump2: false + # Applies to: Residence + jump3: false + # Applies to: Residence + keepexp: false + # Applies to: Residence + keepinv: false + # Applies to: Residence + lavaflow: true + # Applies to: Both + leash: false + # Applies to: Both + lever: true + # Applies to: Residence + mobexpdrop: true + # Applies to: Residence + mobitemdrop: true + # Applies to: Both + mobkilling: true + # Applies to: Residence + monsters: true + # Applies to: Both + move: true + # Applies to: Both + nametag: true + # Applies to: Residence + nanimals: true + # Applies to: Residence + night: true + # Applies to: Residence + nmonsters: true + # Applies to: Residence + nodurability: false + # Applies to: Both + nofly: false + # Applies to: Residence + nomobs: true + # Applies to: Both + note: true + # Applies to: Residence + overridepvp: false + # Applies to: Residence + phantomspawn: true + # Applies to: Residence + piston: true + # Applies to: Residence + pistonprotection: true + # Applies to: Both + place: true + # Applies to: Both + pressure: true + # Applies to: Residence + pvp: false + # Applies to: Residence + rain: true + # Applies to: Residence + respawn: false + # Applies to: Both + riding: true + # Applies to: Residence + sanimals: true + # Applies to: Both + shear: false + # Applies to: Residence + shoot: true + # Applies to: Residence + shop: true + # Applies to: Residence + smonsters: true + # Applies to: Residence + snowball: true + # Applies to: Residence + snowtrail: true + # Applies to: Residence + spread: true + # Applies to: Both + subzone: true + # Applies to: Residence + sun: true + # Applies to: Both + table: true + # Applies to: Residence + title: true + # Applies to: Residence + tnt: false + # Applies to: Both + tp: true + # Applies to: Both + trade: true + # Applies to: Residence + trample: true + # Applies to: Both + use: false + # Applies to: Both + vehicledestroy: false + # Applies to: Residence + waterflow: true + # Applies to: Residence + witherdamage: true + # Applies to: Residence + witherdestruction: true + # Applies to: Residence + witherspawn: true + # Applies to: Residence + wspeed1: true + # Applies to: Residence + wspeed2: true + # This sets GUI items to represent each flag, if not given, then gray wool will be used + FlagGui: + admin: BEDROCK + anchor: RESPAWN_ANCHOR + animalkilling: CHICKEN + animals: PIG_SPAWN_EGG + anvil: ANVIL + anvilbreak: ANVIL + backup: BOOKSHELF + bank: ENDER_CHEST + beacon: BEACON + bed: WHITE_BED + brew: BREWING_STAND + build: BRICKS + burn: TORCH + button: OAK_BUTTON + cake: CAKE + canimals: SHEEP_SPAWN_EGG + chat: WRITABLE_BOOK + chorustp: CHORUS_FRUIT + cmonsters: CREEPER_SPAWN_EGG + command: COMMAND_BLOCK + commandblock: COMMAND_BLOCK + container: CHEST_MINECART + coords: COMPASS + craft: STONE + creeper: CREEPER_SPAWN_EGG + damage: GOLDEN_SWORD + day: DANDELION + decay: OAK_LEAVES + destroy: END_STONE + diode: REPEATER + door: OAK_DOOR + dragongrief: DIRT + dryup: BLUE_STAINED_GLASS_PANE + dye: ORANGE_DYE + egg: EGG + enchant: ENCHANTING_TABLE + enderpearl: ENDER_PEARL + explode: TNT_MINECART + falldamage: LEATHER_BOOTS + fallinprotection: SAND + feed: COOKED_BEEF + fireball: FIRE_CHARGE + firespread: BLAZE_POWDER + flow: LILY_PAD + flowerpot: FLOWER_POT + flowinprotection: OAK_BOAT + fly: ORANGE_CARPET + friendlyfire: SUNFLOWER + glow: SEA_LANTERN + grow: WHEAT_SEEDS + healing: POTION + hidden: GLASS_PANE + honey: BEEHIVE + honeycomb: BEE_NEST + hook: FISHING_ROD + hotfloor: MAGMA_BLOCK + iceform: ICE + icemelt: ICE + ignite: FLINT_AND_STEEL + itemdrop: FEATHER + itempickup: GUNPOWDER + jump2: SLIME_BLOCK + jump3: SLIME_BLOCK + keepexp: GOLDEN_APPLE + keepinv: LEATHER_HELMET + lavaflow: LAVA_BUCKET + leash: LEAD + lever: LEVER + mobexpdrop: MELON_SEEDS + mobitemdrop: COCOA_BEANS + mobkilling: ROTTEN_FLESH + monsters: SPAWNER + move: LEATHER_BOOTS + nametag: NAME_TAG + nanimals: COW_SPAWN_EGG + night: BLACK_WOOL + nmonsters: SKELETON_SPAWN_EGG + nodurability: ANVIL + nofly: ORANGE_CARPET + nomobs: BARRIER + note: NOTE_BLOCK + overridepvp: IRON_SWORD + phantomspawn: BROWN_WOOL + piston: PISTON + pistonprotection: STICKY_PISTON + place: SEA_LANTERN + pressure: LIGHT_WEIGHTED_PRESSURE_PLATE + pvp: WOODEN_SWORD + rain: BLUE_ORCHID + respawn: SUNFLOWER + riding: SADDLE + sanimals: RABBIT_SPAWN_EGG + shear: SHEARS + shoot: ARROW + shop: ITEM_FRAME + smonsters: ZOMBIE_SPAWN_EGG + snowball: SNOWBALL + snowtrail: SNOW + spread: SNOWBALL + subzone: GRAY_STAINED_GLASS_PANE + sun: SUNFLOWER + table: CRAFTING_TABLE + title: PAPER + tnt: TNT + tp: END_PORTAL_FRAME + trade: EMERALD + trample: DIRT + use: STONE_PRESSURE_PLATE + vehicledestroy: MINECART + waterflow: WATER_BUCKET + witherdamage: WITHER_SKELETON_SKULL + witherdestruction: WITHER_SKELETON_SKULL + witherspawn: WITHER_SKELETON_SKULL + wspeed1: POTION + wspeed2: POTION + # These are default flags applied to all residences from any user group. + ResidenceDefault: + build: false + destroy: false + use: false + container: false + pvp: false + tnt: false + creeper: false + ignite: false + firespread: false + vehicledestroy: false + animalkilling: false + hook: false + shear: false + leash: false + pistonprotection: true + tp: true + explode: false + # These are default flags applied to the residence creator of any group. + CreatorDefault: + build: true + destroy: true + move: true + use: true + ignite: true + container: true + animalkilling: true + mobkilling: true + vehicledestroy: true + trade: true + shear: true + leash: true + # These are default flags applied to the residence renter of any group. + RentedDefault: + container: true + ignite: true + move: true + trade: true + mobkilling: true + shear: true + build: true + use: true + destroy: true + vehicledestroy: true + leash: true + animalkilling: true + admin: true + # These are grouped flags, so when using /res pset nickname redstone true, player will get all flags in list, same when setting to false or removing them. + GroupedFlags: + redstone: + - note + - pressure + - lever + - button + - diode + craft: + - brew + - table + - enchant + trusted: + - use + - tp + - build + - destroy + - container + - move + - leash + - animalkilling + - mobkilling + - shear + - chat + - beacon + fire: + - ignite + - firespread + # Completely disables defined flag which will no longer be accesable even with resadmin command + # Can save some of the server processing resources if you dont want to utilize specific checks for specific flags + TotalFlagDisabling: + - Completely + - Disable + - Particular + - Flags +# this is where you can create blacklists / whitelists +ItemList: + # list name is not important, as long as it is unique. Its good to use a descripive name. + DefaultList: + # type of the list, can be blacklist, whitelist, or ignorelist + Type: blacklist + # If you want, you can have this list only apply to one world, otherwise it applies to all worlds + # World: world + # You can also have the list apply only to one group, otherwise it applies for all groups + # Group: default + # this is the actual list of material names that this list allows or disallows + # You can look up the material name by item ID in game by typing /res material + # Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance + Items: + - BEDROCK + - LAVA + - WATER + - STATIONARY_LAVA + - STATIONARY_WATER + - MOB_SPAWNER From 98018e13af40aa1ae1e00961d647b7d1268da58a Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jan 2021 13:24:08 +0200 Subject: [PATCH 0809/1142] Fixing chest interaction on residence edge --- .../listeners/ResidencePlayerListener.java | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 63af439df..627e6631c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1228,8 +1228,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { CMIMaterial btype = CMIMaterial.get(block); if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || btype == CMIMaterial.GRASS || btype.isSapling()) || heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD) { - perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player, Flags.build, true)) { + FlagPermissions tperms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!tperms.playerHas(player, Flags.build, true)) { plugin.msg(player, lm.Flag_Deny, Flags.build); event.setCancelled(true); return; @@ -1237,15 +1237,14 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } if (heldItem.equals(CMIMaterial.ARMOR_STAND) || heldItem.isBoat()) { - perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!perms.playerHas(player, Flags.build, true)) { + FlagPermissions tperms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!tperms.playerHas(player, Flags.build, true)) { plugin.msg(player, lm.Flag_Deny, Flags.build); event.setCancelled(true); return; } } if (placingMinecart(block, iih)) { - perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); if (!perms.playerHas(player, Flags.build, true)) { plugin.msg(player, lm.Flag_Deny, Flags.build); event.setCancelled(true); @@ -1274,14 +1273,13 @@ public void onPlayerInteract(PlayerInteractEvent event) { Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); if (result != null) { + main: if (!perms.playerHas(player, result, hasuse)) { if (hasuse || result.equals(Flags.container)) { - if (res != null && res.getRaid().isUnderRaid()) { - if (res.getRaid().isAttacker(player)) { - break main; - } + if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { + break main; } if (!ResPerm.bypass_container.hasPermission(player, 10000L)) { event.setCancelled(true); @@ -1292,10 +1290,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (res != null && res.getRaid().isUnderRaid()) { - if (res.getRaid().isAttacker(player)) { - break main; - } + if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { + break main; } switch (result) { @@ -1315,10 +1311,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (isCanUseEntity_BothClick(mat, block)) { - if (res != null && res.getRaid().isUnderRaid()) { - if (res.getRaid().isAttacker(player)) { - break main; - } + if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { + break main; } event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, result); From e9dd13cc499e8eb48bb4aea905f508a8866622ee Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jan 2021 13:44:37 +0200 Subject: [PATCH 0810/1142] Returning /rc /resload /resreload functionality --- src/com/bekvon/bukkit/residence/Residence.java | 5 +++++ .../bekvon/bukkit/residence/ResidenceCommandListener.java | 5 +++++ .../bukkit/residence/listeners/ResidencePlayerListener.java | 1 + 3 files changed, 11 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f99f6b073..11b4fd693 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -475,6 +475,11 @@ public void onEnable() { this.getCommand("res").setExecutor(getCommandManager()); this.getCommand("resadmin").setExecutor(getCommandManager()); this.getCommand("residence").setExecutor(getCommandManager()); + + this.getCommand("rc").setExecutor(getCommandManager()); + this.getCommand("resreload").setExecutor(getCommandManager()); + this.getCommand("resload").setExecutor(getCommandManager()); + TabComplete tab = new TabComplete(); this.getCommand("res").setTabCompleter(tab); this.getCommand("resadmin").setTabCompleter(tab); diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index a1376bb11..4657df21e 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -97,6 +97,11 @@ public boolean onCommand(CommandSender sender, Command command, String label, St sendUsage(sender, command.getName()); return true; } + + if (args.length == 1 && args[0].equals("?")) { + return commandHelp(new String[]{"rc", "?"}, false, sender, command); + } + boolean respond = cmdClass.perform(Residence.getInstance(), sender, reduceArgs(args), false); if (!respond) sendUsage(sender, command.getName()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 627e6631c..edc8e5c97 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -914,6 +914,7 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { plugin.msg(player, lm.General_NoSpawn); event.setRespawnLocation(loc); + } private boolean isContainer(Material mat, Block block) { From 710cdfdf082e7f47ab93d406d6dc1e672a81bc9f Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jan 2021 13:59:32 +0200 Subject: [PATCH 0811/1142] New variable for setowner as -keepflags which will keep all existing flags when changing residence owner instead of defaulting them --- .../bukkit/residence/commands/setowner.java | 51 +++++++++++-------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index 29fd3970f..4eb2e0970 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -26,36 +26,43 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } + boolean keepFlags = false; + if (args.length > 2 && args[2].equalsIgnoreCase("-keepflags")) + keepFlags = true; + ClaimedResidence area = plugin.getResidenceManager().getByName(args[0]); - if (area != null) { + if (area == null) { + plugin.msg(sender, lm.Invalid_Residence); + return null; + } + + if (area.getRaid().isRaidInitialized() && !resadmin) { + plugin.msg(sender, lm.Raid_cantDo); + return null; + } - if (area.getRaid().isRaidInitialized() && !resadmin) { - plugin.msg(sender, lm.Raid_cantDo); - return true; - } + if (!plugin.isPlayerExist(sender, args[1], true)) { + return null; + } - if (!plugin.isPlayerExist(sender, args[1], true)) { - return null; - } + area.getPermissions().setOwner(args[1], !keepFlags); + if (plugin.getRentManager().isForRent(area.getName())) + plugin.getRentManager().removeRentable(area.getName()); + if (plugin.getTransactionManager().isForSale(area.getName())) + plugin.getTransactionManager().removeFromSale(area.getName()); - area.getPermissions().setOwner(args[1], true); - if (plugin.getRentManager().isForRent(area.getName())) - plugin.getRentManager().removeRentable(area.getName()); - if (plugin.getTransactionManager().isForSale(area.getName())) - plugin.getTransactionManager().removeFromSale(area.getName()); + if (!keepFlags) area.getPermissions().applyDefaultFlags(); - plugin.getSignUtil().updateSignResName(area); + plugin.getSignUtil().updateSignResName(area); - if (area.getParent() == null) { - plugin.msg(sender, lm.Residence_OwnerChange, args[0], args[1]); - } else { - plugin.msg(sender, lm.Subzone_OwnerChange, args[0].split("\\.")[args[0].split("\\.").length - 1], args[1]); - } + if (area.getParent() == null) { + plugin.msg(sender, lm.Residence_OwnerChange, args[0], args[1]); } else { - plugin.msg(sender, lm.Invalid_Residence); + plugin.msg(sender, lm.Subzone_OwnerChange, args[0].split("\\.")[args[0].split("\\.").length - 1], args[1]); } + return true; } @@ -63,8 +70,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Change owner of a residence."); - c.get("Info", Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player]")); - LocaleManager.addTabCompleteMain(this, "[cresidence]", "[playername]"); + c.get("Info", Arrays.asList("&eUsage: &6/resadmin setowner [residence] [player] (-keepflags)")); + LocaleManager.addTabCompleteMain(this, "[cresidence]", "[playername]", "-keepflags"); } } From 1308f14f0cc4164ebb37685aaf6ad9f7d1d94771 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jan 2021 16:49:59 +0200 Subject: [PATCH 0812/1142] Fixing incorrect cast from villager to player after arrow shooting --- .../bukkit/residence/listeners/ResidenceEntityListener.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index d7ead13a8..d243f55bf 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1536,7 +1536,9 @@ public void onEntityDamage(EntityDamageEvent event) { if (project.getFireTicks() > 0) isOnFire = true; - attacker = (Player) ((Projectile) damager).getShooter(); + ProjectileSource shooter = ((Projectile) damager).getShooter(); + if (shooter instanceof Player) + attacker = (Player) shooter; } else if (damager instanceof Firework) { List meta = damager.getMetadata(CrossbowShooter); if (meta != null && !meta.isEmpty()) { From 2cfdf9ae1cf1a08f711f06df0ec09f922b3fa22c Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jan 2021 17:08:27 +0200 Subject: [PATCH 0813/1142] Lets support %subtitle% or \n for enter leave messages --- .../residence/listeners/ResidencePlayerListener.java | 8 +++++++- .../bukkit/residence/protection/ClaimedResidence.java | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index edc8e5c97..3a25ce25a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2312,7 +2312,13 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res, message)); break; case TitleBar: - TitleMessageManager.send(player, ChatColor.YELLOW + insertMessages(player, res, message), null); + String title = ChatColor.YELLOW + insertMessages(player, res, message); + String subtitle = ""; + if (title.contains("\\n")) { + subtitle = ChatColor.YELLOW + title.split("\\\\n", 2)[1]; + title = title.split("\\\\n", 2)[0]; + } + TitleMessageManager.send(player, title, subtitle); break; default: break; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 681019c8d..d51816392 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -940,10 +940,12 @@ public void setShopDesc(String message) { public void setEnterLeaveMessage(CommandSender sender, String message, boolean enter, boolean resadmin) { if (message != null) { + message = message.replace("%subtitle%", "\\n"); if (message.equals("")) { message = null; } } + if (sender instanceof Player) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer((Player) sender); PermissionGroup group = rPlayer.getGroup(); From 450ac42e89bb752498f24f663ca4014b9443a9a5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Jan 2021 17:32:03 +0200 Subject: [PATCH 0814/1142] Full color code support for /res rc setcolor including hex and by name --- .../bekvon/bukkit/residence/ConfigManager.java | 8 ++++---- .../bekvon/bukkit/residence/chat/ChatChannel.java | 14 +++++++------- src/com/bekvon/bukkit/residence/commands/rc.java | 15 +++++++++++---- .../residence/event/ResidenceChatEvent.java | 14 +++++++------- .../residence/protection/ClaimedResidence.java | 15 ++++++++------- 5 files changed, 37 insertions(+), 29 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 4339e3696..0d1bbbe87 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -133,7 +133,7 @@ public class ConfigManager { private int VisualizerSidesCap; protected boolean flagsInherit; protected boolean ignoreGroupedFlagAcess; - protected ChatColor chatColor; + protected CMIChatColor chatColor; protected boolean chatEnable; private ELMessageType EnterLeaveMessageType; // protected boolean actionBar; @@ -1028,9 +1028,9 @@ public void UpdateConfigFile() { c.addComment("Global.ResidenceChatColor", "Color of residence chat."); try { - chatColor = ChatColor.valueOf(c.get("Global.ResidenceChatColor", "DARK_PURPLE")); + chatColor = CMIChatColor.getColor((c.get("Global.ResidenceChatColor", "DARK_PURPLE"))); } catch (Exception ex) { - chatColor = ChatColor.DARK_PURPLE; + chatColor = CMIChatColor.DARK_PURPLE; } c.addComment("Global.ResidenceChatPrefixLenght", "Max lenght of residence chat prefix including color codes"); @@ -1740,7 +1740,7 @@ public boolean useActionBarOnSelection() { return ActionBarOnSelection; } - public ChatColor getChatColor() { + public CMIChatColor getChatColor() { return chatColor; } diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index f7f08c6be..0e5e61c6b 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -1,24 +1,24 @@ package com.bekvon.bukkit.residence.chat; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.event.ResidenceChatEvent; import java.util.ArrayList; import java.util.List; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Server; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.CMIChatColor; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.event.ResidenceChatEvent; + public class ChatChannel { protected String channelName; protected List members; protected String ChatPrefix = ""; - protected ChatColor ChannelColor = ChatColor.WHITE; + protected CMIChatColor ChannelColor = CMIChatColor.WHITE; - public ChatChannel(String channelName, String ChatPrefix, ChatColor chatColor) { + public ChatChannel(String channelName, String ChatPrefix, CMIChatColor chatColor) { this.channelName = channelName; this.ChatPrefix = ChatPrefix; this.ChannelColor = chatColor; @@ -33,7 +33,7 @@ public void setChatPrefix(String ChatPrefix) { this.ChatPrefix = ChatPrefix; } - public void setChannelColor(ChatColor ChannelColor) { + public void setChannelColor(CMIChatColor ChannelColor) { this.ChannelColor = ChannelColor; } diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index 8e50e8c89..5c49d4442 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -7,6 +7,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.Zrips.CMI.Modules.Logs.CMIDebug; import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; @@ -104,18 +105,24 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo String posibleColor = args[1]; - if (!posibleColor.contains("&")) + if (posibleColor.length() == 1 && !posibleColor.contains("&")) posibleColor = "&" + posibleColor; - if (posibleColor.length() != 2 || CMIChatColor.stripColor(CMIChatColor.translate(posibleColor)).length() != 0) { + CMIChatColor color = CMIChatColor.getColor(posibleColor); + + if (color == null && posibleColor.length() > 2 && !posibleColor.startsWith(CMIChatColor.colorCodePrefix) && !posibleColor.endsWith(CMIChatColor.colorCodeSuffix)) + posibleColor = CMIChatColor.colorCodePrefix + posibleColor + CMIChatColor.colorCodeSuffix; + + color = CMIChatColor.getColor(posibleColor); + + if (color == null) { plugin.msg(player, lm.Chat_InvalidColor); return true; } - ChatColor color = ChatColor.getByChar(posibleColor.replace("&", "")); res.setChannelColor(color); chat.setChannelColor(color); - plugin.msg(player, lm.Chat_ChangedColor, color.name()); + plugin.msg(player, lm.Chat_ChangedColor, color.getName()); return true; } else if (args[0].equalsIgnoreCase("setprefix")) { ChatChannel chat = plugin.getChatManager().getPlayerChannel(pname); diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java index bb80b7564..1989b7dac 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java @@ -1,11 +1,11 @@ package com.bekvon.bukkit.residence.event; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; +import com.bekvon.bukkit.cmiLib.CMIChatColor; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + public class ResidenceChatEvent extends CancellableResidencePlayerEvent { private static final HandlerList handlers = new HandlerList(); @@ -20,10 +20,10 @@ public static HandlerList getHandlerList() { } protected String message; - ChatColor color = ChatColor.WHITE; + CMIChatColor color = CMIChatColor.WHITE; private String prefix = ""; - public ResidenceChatEvent(ClaimedResidence resref, Player player, String prefix, String message, ChatColor color) { + public ResidenceChatEvent(ClaimedResidence resref, Player player, String prefix, String message, CMIChatColor color) { super("RESIDENCE_CHAT_EVENT", resref, player); this.message = message; this.prefix = prefix; @@ -46,11 +46,11 @@ public void setChatMessage(String newmessage) { message = newmessage; } - public ChatColor getColor() { + public CMIChatColor getColor() { return color; } - public void setColor(ChatColor c) { + public void setColor(CMIChatColor c) { color = c; } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index d51816392..708dcf5d8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -25,6 +25,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.cmiLib.TitleMessageManager; @@ -71,7 +72,7 @@ public class ClaimedResidence { protected String leaveMessage; protected String ShopDesc = null; protected String ChatPrefix = ""; - protected ChatColor ChannelColor = ChatColor.WHITE; + protected CMIChatColor ChannelColor = CMIChatColor.WHITE; protected ResidenceItemList ignorelist; protected ResidenceItemList blacklist; protected boolean mainRes = false; @@ -1525,9 +1526,9 @@ public Map save() { if (!ChatPrefix.equals("")) root.put("ChatPrefix", ChatPrefix); - if (!ChannelColor.name().equals(plugin.getConfigManager().getChatColor().name()) - && !ChannelColor.name().equals("WHITE")) { - root.put("ChannelColor", ChannelColor.name()); + if (!ChannelColor.getCleanName().equals(plugin.getConfigManager().getChatColor().getName()) + && !ChannelColor.getName().equals("WHITE")) { + root.put("ChannelColor", ChannelColor.getName()); } Map map = blacklist.save(); @@ -1768,7 +1769,7 @@ public static ClaimedResidence load(String worldName, Map root, res.ChatPrefix = (String) root.get("ChatPrefix"); if (root.containsKey("ChannelColor")) - res.ChannelColor = ChatColor.valueOf((String) root.get("ChannelColor")); + res.ChannelColor = CMIChatColor.getColor((String) root.get("ChannelColor")); else { res.ChannelColor = plugin.getConfigManager().getChatColor(); } @@ -1933,7 +1934,7 @@ public String getChatPrefix() { return this.ChatPrefix == null ? "" : this.ChatPrefix; } - public void setChannelColor(ChatColor ChannelColor) { + public void setChannelColor(CMIChatColor ChannelColor) { this.ChannelColor = ChannelColor; } @@ -1941,7 +1942,7 @@ public ChatChannel getChatChannel() { return plugin.getChatManager().getChannel(this.getName()); } - public ChatColor getChannelColor() { + public CMIChatColor getChannelColor() { return ChannelColor; } From 5bc81cbd560954da626004e79899b79a2e5e24f5 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Tue, 2 Feb 2021 14:24:54 +0200 Subject: [PATCH 0815/1142] Better handling when player leaves residence inside vehicle --- .../listeners/ResidencePlayerListener.java | 58 ++++++++++++++++++- src/plugin.yml | 2 +- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3a25ce25a..4752eb7b9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence.listeners; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -42,6 +43,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.vehicle.VehicleMoveEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; @@ -914,7 +916,7 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { plugin.msg(player, lm.General_NoSpawn); event.setRespawnLocation(loc); - + } private boolean isContainer(Material mat, Block block) { @@ -1995,6 +1997,60 @@ public void onPlayerMove(PlayerMoveEvent event) { } } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerMoveInVehicle(VehicleMoveEvent event) { + // disabling event on world + if (plugin.isDisabledWorldListener(event.getVehicle().getWorld())) + return; + + if (event.getVehicle().getPassenger() == null) + return; + + List ent = new ArrayList(); + + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) + ent.addAll(event.getVehicle().getPassengers()); + else + ent.add(event.getVehicle().getPassenger()); + + for (Entity one : ent) { + + if (!(one instanceof Player)) + continue; + + Player player = (Player) one; + if (player == null) + continue; + + if (player.hasMetadata("NPC")) + continue; + + Location locfrom = event.getFrom(); + Location locto = event.getTo(); + if (locfrom.getBlockX() == locto.getBlockX() && locfrom.getBlockY() == locto.getBlockY() && locfrom.getBlockZ() == locto.getBlockZ()) + continue; + + Long last = lastUpdate.get(player.getUniqueId()); + if (last != null && System.currentTimeMillis() - last < plugin.getConfigManager().getMinMoveUpdateInterval()) + continue; + + this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); + + boolean handled = handleNewLocation(player, locto, true); + if (!handled) { + event.getVehicle().teleport(event.getFrom()); + } + + if (!plugin.getTeleportDelayMap().isEmpty() && plugin.getConfigManager().getTeleportDelay() > 0 && plugin.getTeleportDelayMap().contains(player + .getName())) { + plugin.getTeleportDelayMap().remove(player.getName()); + plugin.msg(player, lm.General_TeleportCanceled); + if (plugin.getConfigManager().isTeleportTitleMessage()) + TitleMessageManager.send(player, "", ""); + } + } + } + private static boolean teleport(Player player, Location loc) { if (player == null || !player.isOnline() || loc == null) return false; diff --git a/src/plugin.yml b/src/plugin.yml index 6629d11d0..490f67461 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.1.9 +version: 4.9.2.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 4731bb5e558eaf0de90ca24ff9c95f402350f791 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Tue, 2 Feb 2021 15:41:30 +0200 Subject: [PATCH 0816/1142] Wrong nametag flag state check --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 4752eb7b9..f920fd81e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1581,7 +1581,7 @@ public void onPlayerInteractAtArmoStand(PlayerInteractEntityEvent event) { FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); - if (!perms.playerHas(player, Flags.nametag, FlagCombo.OnlyFalse)) { + if (perms.playerHas(player, Flags.nametag, FlagCombo.OnlyFalse)) { event.setCancelled(true); Residence.getInstance().msg(player, lm.Flag_Deny, Flags.nametag); } From a18be567f7fc6480a835e5dcbc29c7cf0b6c4c60 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Tue, 2 Feb 2021 15:45:45 +0200 Subject: [PATCH 0817/1142] ItemMeta null check --- .../bukkit/residence/gui/setFlagInfo.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java index 2c83d53d2..f725b17a6 100644 --- a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java +++ b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java @@ -311,30 +311,34 @@ else if (fp.has(flagName, FlagCombo.OnlyFalse)) else state = FlagState.FALSE; - ItemStack MiscInfo = Residence.getInstance().getConfigManager().getGuiBottonStates(state).clone(); + ItemStack miscInfo = Residence.getInstance().getConfigManager().getGuiBottonStates(state).clone(); FlagData flagData = Residence.getInstance().getFlagUtilManager().getFlagData(); if (flagData.contains(flagName)) - MiscInfo = flagData.getItem(flagName).clone(); + miscInfo = flagData.getItem(flagName).clone(); if (state == FlagState.TRUE) { - ItemMeta im = MiscInfo.getItemMeta(); - im.addEnchant(Enchantment.LUCK, 1, true); - MiscInfo.setItemMeta(im); + ItemMeta im = miscInfo.getItemMeta(); + if (im != null) { + im.addEnchant(Enchantment.LUCK, 1, true); + miscInfo.setItemMeta(im); + } } else - MiscInfo.removeEnchantment(Enchantment.LUCK); + miscInfo.removeEnchantment(Enchantment.LUCK); - ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); Flags flag = Flags.getFlag(flagName); if (flag != null) flagName = flag.getName(); if (flagName == null) flagName = "Unknown"; + + ItemMeta MiscInfoMeta = miscInfo.getItemMeta(); + // Can it be null? if (MiscInfoMeta == null) - return MiscInfo; + return miscInfo; MiscInfoMeta.setDisplayName(ChatColor.GREEN + flagName); List lore = new ArrayList(); String variable = ""; @@ -350,14 +354,14 @@ else if (fp.has(flagName, FlagCombo.OnlyFalse)) break; } lore.add(Residence.getInstance().msg(lm.General_FlagState, variable)); - + if (description.containsKey(flag)) lore.addAll(description.get(flag)); lore.addAll(Residence.getInstance().msgL(lm.Gui_Actions)); MiscInfoMeta.setLore(lore); - MiscInfo.setItemMeta(MiscInfoMeta); + miscInfo.setItemMeta(MiscInfoMeta); - return MiscInfo; + return miscInfo; } public List getButtons() { From dd20afffa849e875f21df04a29014888a113244f Mon Sep 17 00:00:00 2001 From: BuildTools Date: Tue, 2 Feb 2021 15:58:08 +0200 Subject: [PATCH 0818/1142] Lets default subzone to main area size if not defined --- .../bukkit/residence/permissions/PermissionGroup.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 3b42711b1..2c62f7fcd 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -10,6 +10,8 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import com.bekvon.bukkit.residence.utils.Debug; + import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -160,13 +162,19 @@ private void parseGroup(ConfigurationSection limits) { if (limits.contains("Residence.SubzoneMaxEastWest")) Subzonexmax = limits.getInt("Residence.SubzoneMaxEastWest", getXmax()); + else + Subzonexmax = getXmax(); Subzonexmax = getXmax() < Subzonexmax ? getXmax() : Subzonexmax; + if (limits.contains("Residence.SubzoneMinEastWest")) Subzonexmin = limits.getInt("Residence.SubzoneMinEastWest", 0); Subzonexmin = Subzonexmin > Subzonexmax ? Subzonexmax : Subzonexmin; if (limits.contains("Residence.SubzoneMaxUpDown")) Subzoneymax = limits.getInt("Residence.SubzoneMaxUpDown", ymax); + else + Subzoneymax = getYmax(); + Subzoneymax = ymax < Subzoneymax ? ymax : Subzoneymax; if (limits.contains("Residence.SubzoneMinUpDown")) Subzoneymin = limits.getInt("Residence.SubzoneMinUpDown", 0); @@ -174,6 +182,8 @@ private void parseGroup(ConfigurationSection limits) { if (limits.contains("Residence.SubzoneMaxNorthSouth")) Subzonezmax = limits.getInt("Residence.SubzoneMaxNorthSouth", zmax); + else + Subzonezmax = getZmax(); Subzonezmax = zmax < Subzonezmax ? zmax : Subzonezmax; if (limits.contains("Residence.SubzoneMinNorthSouth")) Subzonezmin = limits.getInt("Residence.SubzoneMinNorthSouth", 0); From d17e69a2f06e912d79de48e93007cf4229bb32f6 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Tue, 2 Feb 2021 16:46:31 +0200 Subject: [PATCH 0819/1142] Option to exclude default flags from dynmap --- .../bukkit/residence/ConfigManager.java | 3 ++ .../residence/dynmap/DynMapManager.java | 48 +++++++++---------- .../listeners/ResidencePlayerListener.java | 4 +- .../residence/protection/FlagPermissions.java | 2 +- 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 0d1bbbe87..012a893c4 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -245,6 +245,7 @@ public class ConfigManager { public boolean DynMapUse; public boolean DynMapShowFlags; + public boolean DynMapExcludeDefaultFlags; public boolean DynMapHideHidden; public boolean DynMapLayer3dRegions; public int DynMapLayerSubZoneDepth; @@ -1244,6 +1245,8 @@ public void UpdateConfigFile() { DynMapHideByDefault = c.get("DynMap.HideByDefault", false); c.addComment("DynMap.ShowFlags", "Shows or hides residence flags"); DynMapShowFlags = c.get("DynMap.ShowFlags", true); + c.addComment("DynMap.ExcludeDefaultFlags", "When enabled default flags will not be included in residence overview"); + DynMapExcludeDefaultFlags = c.get("DynMap.ExcludeDefaultFlags", true); c.addComment("DynMap.HideHidden", "If set true, residence with hidden flag set to true will be hidden from dynmap"); DynMapHideHidden = c.get("DynMap.HideHidden", true); diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 95a4f9c8a..a86033e8d 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -20,6 +20,7 @@ import com.bekvon.bukkit.residence.economy.rent.RentManager; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.ResidencePermissions; import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; @@ -81,8 +82,27 @@ private String formatInfoWindow(String resid, ClaimedResidence res, String resNa "
%regionname%
" + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
"; - if (plugin.getConfigManager().DynMapShowFlags) - v += CMIChatColor.stripColor(plugin.msg(lm.General_ResidenceFlags, "")) + "
%flags%"; + if (plugin.getConfigManager().DynMapShowFlags) { + + ResidencePermissions residencePermissions = res.getPermissions(); + FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); + + StringBuilder flgs = new StringBuilder(); + for (Entry one : residencePermissions.getFlags().entrySet()) { + if (Residence.getInstance().getConfigManager().DynMapExcludeDefaultFlags && gRD.isSet(one.getKey()) && gRD.getFlags().get(one.getKey()).equals(one.getValue())) { + continue; + } + if (!flgs.toString().isEmpty()) + flgs.append("
"); + flgs.append(one.getKey() + ": " + one.getValue()); + } + + if (!flgs.toString().isEmpty()) { + v += CMIChatColor.stripColor(plugin.msg(lm.General_ResidenceFlags, "")) + "
%flags%"; + v = v.replace("%flags%", flgs.toString()); + } + } + v += "
"; if (plugin.getRentManager().isForRent(res.getName())) @@ -108,29 +128,7 @@ private String formatInfoWindow(String resid, ClaimedResidence res, String resNa v = v.replace("%entermsg%", (m != null) ? m : ""); m = res.getLeaveMessage(); v = v.replace("%leavemsg%", (m != null) ? m : ""); - ResidencePermissions p = res.getPermissions(); - String flgs = ""; - - // remake - Map all = plugin.getPermissionManager().getAllFlags().getFlags(); - String[] FLAGS = new String[all.size()]; - int ii = 0; - for (Entry one : all.entrySet()) { - FLAGS[ii] = one.getKey(); - ii++; - } - for (int i = 0; i < FLAGS.length; i++) { - if (p.isSet(FLAGS[i])) { - if (flgs.length() > 0) - flgs += "
"; - boolean f = p.has(FLAGS[i], false); - flgs += FLAGS[i] + ": " + f; - v = v.replace("%flag." + FLAGS[i] + "%", Boolean.toString(f)); - } else - v = v.replace("%flag." + FLAGS[i] + "%", ""); - } - v = v.replace("%flags%", flgs); RentManager rentmgr = plugin.getRentManager(); TransactionManager transmgr = plugin.getTransactionManager(); @@ -313,7 +311,7 @@ public void activate() { if (set != null) { set.deleteMarkerSet(); set = null; - } + } set = markerapi.getMarkerSet("residence.markerset"); if (set == null) set = markerapi.createMarkerSet("residence.markerset", "Residence", null, false); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index f920fd81e..7b5bfe23d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -658,7 +658,7 @@ else if (white == 0) if (white != 0 && white >= black || black == 0) return; - + Debug.D("cancel command"); event.setCancelled(true); plugin.msg(player, lm.Residence_FlagDeny, Flags.command, res.getName()); @@ -2037,7 +2037,7 @@ public void onPlayerMoveInVehicle(VehicleMoveEvent event) { this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); boolean handled = handleNewLocation(player, locto, true); - if (!handled) { + if (!handled) { event.getVehicle().teleport(event.getFrom()); } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 4280d7395..158170899 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -44,7 +44,7 @@ public class FlagPermissions { protected Map cachedPlayerNameUUIDs = new ConcurrentHashMap(); protected Map> playerFlags = new ConcurrentHashMap>(); protected Map> groupFlags = new ConcurrentHashMap>(); - protected Map cuboidFlags = new ConcurrentHashMap(); + public Map cuboidFlags = new ConcurrentHashMap(); protected FlagPermissions parent; public FlagPermissions() { From 8d7ded67b7aafe69c02005782ab794173aada2e5 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Tue, 2 Feb 2021 17:05:17 +0200 Subject: [PATCH 0820/1142] Too many respawn anchor checks --- .../ResidencePlayerListener1_16.java | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java index 91977d443..356977fdd 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java @@ -1,18 +1,14 @@ package com.bekvon.bukkit.residence.listeners; import org.bukkit.Material; -import org.bukkit.World.Environment; import org.bukkit.block.Block; -import org.bukkit.block.data.type.RespawnAnchor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.cmiLib.CMIMaterial; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; @@ -50,9 +46,6 @@ public void onPlayerInteractRespawn(PlayerInteractEvent event) { if (!mat.equals(Material.RESPAWN_ANCHOR)) return; - ItemStack iih = event.getItem(); - CMIMaterial heldItem = CMIMaterial.get(iih); - ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); if (res == null) return; @@ -60,18 +53,6 @@ public void onPlayerInteractRespawn(PlayerInteractEvent event) { if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.anchor, FlagCombo.OnlyTrue)) { plugin.msg(player, lm.Residence_FlagDeny, Flags.anchor, res.getName()); event.setCancelled(true); - return; - } - - if (!heldItem.equals(CMIMaterial.GLOWSTONE) && !player.getWorld().getEnvironment().equals(Environment.NETHER) && !res.getPermissions().has(Flags.explode, FlagCombo.TrueOrNone)) { - event.setCancelled(true); - return; } - - RespawnAnchor anchor = (RespawnAnchor) block.getBlockData(); - if (anchor.getMaximumCharges() == anchor.getCharges() && !res.getPermissions().has(Flags.explode, FlagCombo.TrueOrNone) && !player.getWorld().getEnvironment().equals(Environment.NETHER)) { - event.setCancelled(true); - } - } } From 5c3d20236500e274bbc60666af468454fa7c3fb3 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Thu, 4 Feb 2021 14:38:14 +0200 Subject: [PATCH 0821/1142] More checks when we have globally disabled flags Better flag reload when updating globally disabled flags --- .../bukkit/residence/ConfigManager.java | 12 +- .../listeners/ResidenceEntityListener.java | 1 + .../listeners/ResidencePlayerListener.java | 115 ++++++++++-------- .../residence/protection/FlagPermissions.java | 3 + .../protection/ResidencePermissions.java | 4 +- src/plugin.yml | 2 +- 6 files changed, 83 insertions(+), 54 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 012a893c4..7014fe009 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -410,11 +410,11 @@ void UpdateFlagFile() { if (!conf.isList("Global.TotalFlagDisabling")) conf.set("Global.TotalFlagDisabling", Arrays.asList("Completely", "Disable", "Particular", "Flags")); - TreeMap sorted = new TreeMap<>(); + TreeMap sorted = new TreeMap<>(); for (Flags fl : Flags.values()) { sorted.put(fl.getName(), fl); } - + for (Flags fl : sorted.values()) { if (conf.isBoolean("Global.FlagPermission." + fl)) continue; @@ -1315,10 +1315,16 @@ public void loadFlags() { if (flags.isList("Global.TotalFlagDisabling")) { List globalDisable = flags.getStringList("Global.TotalFlagDisabling"); + // Re enabling all of them before loading flags file + for (Flags one : Flags.values()) { + one.setGlobalyEnabled(true); + } + for (String fl : globalDisable) { Flags flag = Flags.getFlag(fl); - if (flag == null) + if (flag == null) { continue; + } flag.setGlobalyEnabled(false); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index d243f55bf..9db96f9fb 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -429,6 +429,7 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onWitherSpawn(CreatureSpawnEvent event) { + // Disabling listener if flag disabled globally if (!Flags.witherspawn.isGlobalyEnabled()) return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 7b5bfe23d..4c8dacaf0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -891,6 +891,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerSpawn(PlayerRespawnEvent event) { + // disabling event on world if (plugin.isDisabledWorldListener(event.getRespawnLocation().getWorld())) return; @@ -1873,90 +1874,107 @@ public void onResidenceChange(ResidenceChangedEvent event) { if (player == null) return; if (res == null && ResOld != null) { - if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + if (Flags.night.isGlobalyEnabled() && ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || Flags.day.isGlobalyEnabled() && ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.resetPlayerTime(); - if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + if (Flags.wspeed1.isGlobalyEnabled() && ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || Flags.wspeed2.isGlobalyEnabled() && ResOld.getPermissions().has(Flags.wspeed2, + FlagCombo.OnlyTrue)) player.setWalkSpeed(0.2F); - if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + if (Flags.sun.isGlobalyEnabled() && ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || Flags.rain.isGlobalyEnabled() && ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); - if (ResOld.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) + if (Flags.fly.isGlobalyEnabled() && ResOld.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, false); - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(false); } if (res != null && ResOld != null && !res.equals(ResOld)) { - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) { - if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(true); - else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(false); + if (Flags.glow.isGlobalyEnabled()) { + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) { + if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(true); + else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(false); + } } - if (res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) - fly(player, true); - else if (ResOld.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && !res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) - fly(player, false); + if (Flags.fly.isGlobalyEnabled()) { + if (res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) + fly(player, true); + else if (ResOld.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && !res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) + fly(player, false); + } - if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) - player.setPlayerTime(6000L, false); - else if (ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) - player.resetPlayerTime(); + if (Flags.day.isGlobalyEnabled()) { + if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.setPlayerTime(6000L, false); + else if (ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.resetPlayerTime(); + } - if (res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) - player.setPlayerTime(14000L, false); - else if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) - player.resetPlayerTime(); + if (Flags.night.isGlobalyEnabled()) { + if (res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + player.setPlayerTime(14000L, false); + else if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + player.resetPlayerTime(); + } - if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); - else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - player.setWalkSpeed(0.2F); + if (Flags.wspeed1.isGlobalyEnabled()) { + if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); + else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + player.setWalkSpeed(0.2F); + } - if (res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) { - player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); - } else if (ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - player.setWalkSpeed(0.2F); + if (Flags.wspeed2.isGlobalyEnabled()) { + if (res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) { + player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); + } else if (ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + player.setWalkSpeed(0.2F); + } - if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) { - player.setPlayerWeather(WeatherType.CLEAR); - } else if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) - player.resetPlayerWeather(); + if (Flags.sun.isGlobalyEnabled()) { + if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) { + player.setPlayerWeather(WeatherType.CLEAR); + } else if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) + player.resetPlayerWeather(); + } - if (res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) { - player.setPlayerWeather(WeatherType.DOWNFALL); - } else if (ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) - player.resetPlayerWeather(); + if (Flags.rain.isGlobalyEnabled()) { + if (res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) { + player.setPlayerWeather(WeatherType.DOWNFALL); + } else if (ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + player.resetPlayerWeather(); + } } if (res != null && ResOld == null) { - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) { + if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) { player.setGlowing(true); } - if (res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) + if (Flags.fly.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, true); - if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + if (Flags.day.isGlobalyEnabled() && res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.setPlayerTime(6000L, false); - if (res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + if (Flags.night.isGlobalyEnabled() && res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) player.setPlayerTime(14000L, false); - if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + if (Flags.wspeed1.isGlobalyEnabled() && res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); - if (res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + if (Flags.wspeed2.isGlobalyEnabled() && res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); - if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) + if (Flags.sun.isGlobalyEnabled() && res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) player.setPlayerWeather(WeatherType.CLEAR); - if (res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + if (Flags.rain.isGlobalyEnabled() && res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.setPlayerWeather(WeatherType.DOWNFALL); } } @@ -2167,7 +2185,7 @@ public void run() { ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); boolean teleported = false; - if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { + if (preRes != null && Flags.tp.isGlobalyEnabled() && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { Location newLoc = res.getOutsideFreeLoc(loc, player); player.closeInventory(); teleported = teleport(player, newLoc); @@ -2203,7 +2221,8 @@ public void run() { return teleported; } - if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move.hasPermission(player, 10000L)) { + if (Flags.move.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move + .hasPermission(player, 10000L)) { Location lastLoc = lastOutsideLoc.get(uuid); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 158170899..9583d1c97 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -538,6 +538,9 @@ public boolean playerHas(Player player, String world, Flags flag, boolean def) { if (player == null) return false; + if (!flag.isGlobalyEnabled()) + return true; + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = resPlayer.getGroup(world); return this.playerCheck(player, flag.toString(), this.groupCheck(group, flag.toString(), this.has(flag, def))); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index d3a42f055..09a548970 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -742,8 +742,8 @@ public boolean setFlagGroup(CommandSender sender, String flaggroup, FlagState st if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); boolean changed = false; - - for (String flag : flags) { + + for (String flag : flags) { if (this.setFlag(sender, flag, state, resadmin)) { changed = true; } diff --git a/src/plugin.yml b/src/plugin.yml index 490f67461..4d9b6ff11 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.2.3 +version: 4.9.2.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 77979258e44230cc8278a40abf71ae58eea4b76e Mon Sep 17 00:00:00 2001 From: BuildTools Date: Fri, 5 Feb 2021 14:28:23 +0200 Subject: [PATCH 0822/1142] Removing flags from groupedFlags if its globally disabled --- .../residence/protection/FlagPermissions.java | 20 +++++++++---------- .../protection/ResidencePermissions.java | 6 +++--- src/plugin.yml | 2 +- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 9583d1c97..68b64925e 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -31,15 +31,13 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import com.bekvon.bukkit.residence.utils.Debug; public class FlagPermissions { protected static ArrayList validFlags = new ArrayList<>(); protected static ArrayList validPlayerFlags = new ArrayList<>(); protected static ArrayList validAreaFlags = new ArrayList<>(); - protected static HashMap> validFlagGroups = new HashMap<>(); + protected static HashMap> validFlagGroups = new HashMap<>(); final static Map matUseFlagList = new EnumMap<>(Material.class); protected Map cachedPlayerNameUUIDs = new ConcurrentHashMap(); protected Map> playerFlags = new ConcurrentHashMap>(); @@ -154,18 +152,18 @@ public static void addResidenceOnlyFlag(String flag) { } public static void addFlagToFlagGroup(String group, String flag) { - if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { - if (!validFlagGroups.containsKey(group)) { - validFlagGroups.put(group, new ArrayList()); - } - ArrayList flags = validFlagGroups.get(group); - flags.add(flag); + Flags f = Flags.getFlag(flag); + if (f != null && !f.isGlobalyEnabled()) { + return; + } + if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { + validFlagGroups.computeIfAbsent(group, k -> new HashSet()).add(flag); } } public static void removeFlagFromFlagGroup(String group, String flag) { if (validFlagGroups.containsKey(group)) { - ArrayList flags = validFlagGroups.get(group); + Set flags = validFlagGroups.get(group); flags.remove(flag); if (flags.isEmpty()) { validFlagGroups.remove(group); @@ -540,7 +538,7 @@ public boolean playerHas(Player player, String world, Flags flag, boolean def) { if (!flag.isGlobalyEnabled()) return true; - + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = resPlayer.getGroup(world); return this.playerCheck(player, flag.toString(), this.groupCheck(group, flag.toString(), this.has(flag, def))); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 09a548970..bd88842d9 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -740,7 +740,7 @@ public boolean setFlagGroup(CommandSender sender, String flaggroup, String state public boolean setFlagGroup(CommandSender sender, String flaggroup, FlagState state, boolean resadmin) { if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { - ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); + Set flags = FlagPermissions.validFlagGroups.get(flaggroup); boolean changed = false; for (String flag : flags) { @@ -755,7 +755,7 @@ public boolean setFlagGroup(CommandSender sender, String flaggroup, FlagState st public boolean setFlagGroupOnGroup(Player player, String flaggroup, String group, String state, boolean resadmin) { if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { - ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); + Set flags = FlagPermissions.validFlagGroups.get(flaggroup); boolean changed = false; for (String flag : flags) { if (this.setGroupFlag(player, group, flag, state, resadmin)) { @@ -769,7 +769,7 @@ public boolean setFlagGroupOnGroup(Player player, String flaggroup, String group public boolean setFlagGroupOnPlayer(CommandSender sender, String target, String flaggroup, String state, boolean resadmin) { if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { - ArrayList flags = FlagPermissions.validFlagGroups.get(flaggroup); + Set flags = FlagPermissions.validFlagGroups.get(flaggroup); boolean changed = false; String flagString = ""; for (String flag : flags) { diff --git a/src/plugin.yml b/src/plugin.yml index 4d9b6ff11..7a7bb3217 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.2.4 +version: 4.9.2.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From ee35022a740a8023143c8b472b8fb41cea7413a9 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Fri, 5 Feb 2021 14:39:10 +0200 Subject: [PATCH 0823/1142] Disabling special flags on logout --- .../listeners/ResidencePlayerListener.java | 98 +++++++++---------- 1 file changed, 46 insertions(+), 52 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 4c8dacaf0..d386888bd 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -430,29 +430,14 @@ public void onResidenceDeleteEvent(ResidenceDeleteEvent event) { one.setGlowing(false); } - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerQuitEvent(PlayerQuitEvent event) { Player player = event.getPlayer(); plugin.getPermissionManager().removeFromCache(player); - ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - - if (res == null) - return; - - if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - player.setWalkSpeed(0.2F); - - if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) - player.resetPlayerWeather(); - - if (res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) - fly(player, false); - - if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) - player.setGlowing(false); + checkSpecialFlags(player, null, plugin.getResidenceManager().getByLoc(player.getLocation())); plugin.getPlayerManager().getResidencePlayer(player).onQuit(); } @@ -1867,114 +1852,123 @@ private void fly(Player player, boolean state) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceChange(ResidenceChangedEvent event) { - ClaimedResidence res = event.getTo(); - ClaimedResidence ResOld = event.getFrom(); + ClaimedResidence newRes = event.getTo(); + ClaimedResidence oldRes = event.getFrom(); Player player = event.getPlayer(); if (player == null) return; - if (res == null && ResOld != null) { - if (Flags.night.isGlobalyEnabled() && ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || Flags.day.isGlobalyEnabled() && ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + + checkSpecialFlags(player, newRes, oldRes); + } + + private void checkSpecialFlags(Player player, ClaimedResidence newRes, ClaimedResidence oldRes) { + if (newRes == null && oldRes != null) { + if (Flags.night.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || Flags.day.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.resetPlayerTime(); - if (Flags.wspeed1.isGlobalyEnabled() && ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || Flags.wspeed2.isGlobalyEnabled() && ResOld.getPermissions().has(Flags.wspeed2, - FlagCombo.OnlyTrue)) + if (Flags.wspeed1.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || Flags.wspeed2.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.wspeed2, + FlagCombo.OnlyTrue)) { player.setWalkSpeed(0.2F); + } - if (Flags.sun.isGlobalyEnabled() && ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || Flags.rain.isGlobalyEnabled() && ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + if (Flags.sun.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || Flags.rain.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); - if (Flags.fly.isGlobalyEnabled() && ResOld.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) + if (Flags.fly.isGlobalyEnabled() && oldRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, false); - if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && oldRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(false); + + return; } - if (res != null && ResOld != null && !res.equals(ResOld)) { + if (newRes != null && oldRes != null && !newRes.equals(oldRes)) { if (Flags.glow.isGlobalyEnabled()) { if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) { - if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + if (newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(true); - else if (ResOld.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + else if (oldRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(false); } } if (Flags.fly.isGlobalyEnabled()) { - if (res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) + if (newRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, true); - else if (ResOld.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && !res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) + else if (oldRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && !newRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, false); } if (Flags.day.isGlobalyEnabled()) { - if (res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + if (newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.setPlayerTime(6000L, false); - else if (ResOld.getPermissions().has(Flags.day, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + else if (oldRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.resetPlayerTime(); } if (Flags.night.isGlobalyEnabled()) { - if (res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + if (newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) player.setPlayerTime(14000L, false); - else if (ResOld.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + else if (oldRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) player.resetPlayerTime(); } if (Flags.wspeed1.isGlobalyEnabled()) { - if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + if (newRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); - else if (ResOld.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + else if (oldRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) player.setWalkSpeed(0.2F); } if (Flags.wspeed2.isGlobalyEnabled()) { - if (res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) { + if (newRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) { player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); - } else if (ResOld.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + } else if (oldRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) player.setWalkSpeed(0.2F); } if (Flags.sun.isGlobalyEnabled()) { - if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) { + if (newRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) { player.setPlayerWeather(WeatherType.CLEAR); - } else if (ResOld.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) + } else if (oldRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); } if (Flags.rain.isGlobalyEnabled()) { - if (res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) { + if (newRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) { player.setPlayerWeather(WeatherType.DOWNFALL); - } else if (ResOld.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue) && !res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + } else if (oldRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); } + return; } - if (res != null && ResOld == null) { - if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) { + if (newRes != null && oldRes == null) { + if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) { player.setGlowing(true); } - if (Flags.fly.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) + if (Flags.fly.isGlobalyEnabled() && newRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) fly(player, true); - if (Flags.day.isGlobalyEnabled() && res.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + if (Flags.day.isGlobalyEnabled() && newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.setPlayerTime(6000L, false); - if (Flags.night.isGlobalyEnabled() && res.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + if (Flags.night.isGlobalyEnabled() && newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) player.setPlayerTime(14000L, false); - if (Flags.wspeed1.isGlobalyEnabled() && res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + if (Flags.wspeed1.isGlobalyEnabled() && newRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); - if (Flags.wspeed2.isGlobalyEnabled() && res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + if (Flags.wspeed2.isGlobalyEnabled() && newRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); - if (Flags.sun.isGlobalyEnabled() && res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) + if (Flags.sun.isGlobalyEnabled() && newRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) player.setPlayerWeather(WeatherType.CLEAR); - if (Flags.rain.isGlobalyEnabled() && res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + if (Flags.rain.isGlobalyEnabled() && newRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.setPlayerWeather(WeatherType.DOWNFALL); } } From 6d4250316df8fcaa572f0080da3747f1c556b2ff Mon Sep 17 00:00:00 2001 From: BuildTools Date: Fri, 5 Feb 2021 14:48:57 +0200 Subject: [PATCH 0824/1142] Lets take into consideration /res auto provided size --- .../bukkit/residence/commands/auto.java | 55 ++++++++----------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index de67ad33f..2342c216d 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -17,6 +17,7 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; public class auto implements cmd { @@ -55,39 +56,30 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo Location loc = player.getLocation(); - int X = group.getMinX(); - int Y = group.getMinY(); - int Z = group.getMinZ(); + int x = group.getMinX(); + int y = group.getMinY(); + int z = group.getMinZ(); if (lenght > 0) { - if (lenght > group.getMaxX()) - X = group.getMaxX(); - else - X = lenght; - if (lenght > group.getMaxZ()) - Z = group.getMaxZ(); - else - Z = lenght; - if (lenght > group.getMaxY()) - Y = group.getMaxY(); - else - Y = lenght; + x = lenght > group.getMaxX() ? group.getMaxX() : lenght; + z = lenght > group.getMaxZ() ? group.getMaxZ() : lenght; + y = lenght > group.getMaxY() ? group.getMaxY() : lenght; } - int rX = (X - 1) / 2; - int rY = (Y - 1) / 2; - int rZ = (Z - 1) / 2; + int rX = (x - 1) / 2; + int rY = (y - 1) / 2; + int rZ = (z - 1) / 2; int minX = loc.getBlockX() - rX; int maxX = loc.getBlockX() + rX; - if (maxX - minX + 1 < X) + if (maxX - minX + 1 < x) maxX++; int minY = loc.getBlockY() - rY; int maxY = loc.getBlockY() + rY; - if (maxY - minY + 1 < Y) + if (maxY - minY + 1 < y) maxY++; if (minY < 0) { @@ -106,13 +98,13 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo int minZ = loc.getBlockZ() - rZ; int maxZ = loc.getBlockZ() + rZ; - if (maxZ - minZ + 1 < Z) + if (maxZ - minZ + 1 < z) maxZ++; plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), minX, minY, minZ), false); plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), maxX, maxY, maxZ), false); - resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true); + resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true, lenght); if (plugin.getResidenceManager().getByName(resName) != null) { for (int i = 1; i < 50; i++) { @@ -132,7 +124,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - public static void resize(Residence plugin, Player player, CuboidArea cuboid, boolean checkBalance) { + public static void resize(Residence plugin, Player player, CuboidArea cuboid, boolean checkBalance, int max) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); @@ -203,22 +195,21 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo continue; } - if (c.getXSize() > group.getMaxX() - group.getMinX()) { + if (max > 0 && max <= c.getXSize() || c.getXSize() > group.getMaxX() - group.getMinX()) { locked.add(dir); dir = dir.getNext(); skipped++; continue; } - if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) - if (c.getYSize() > group.getMaxY() - group.getMinY()) { - locked.add(dir); - dir = dir.getNext(); - skipped++; - continue; - } + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (max > 0 && max <= c.getYSize() || c.getYSize() > group.getMaxY() - group.getMinY())) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } - if (c.getZSize() > group.getMaxZ() - group.getMinZ()) { + if (max > 0 && max <= c.getZSize() || c.getZSize() > group.getMaxZ() - group.getMinZ()) { locked.add(dir); dir = dir.getNext(); skipped++; From e0c956201d6b36035f184cc0934fc23fb6f784e8 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Fri, 5 Feb 2021 16:08:23 +0200 Subject: [PATCH 0825/1142] Fixing issue with 1.8.8 servers while checking for valid teleport location --- src/com/bekvon/bukkit/cmiLib/CMIMaterial.java | 3 ++- .../residence/listeners/ResidencePlayerListener.java | 2 ++ .../bukkit/residence/protection/ClaimedResidence.java | 9 ++------- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java index d5acce440..21fb43334 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java @@ -1143,7 +1143,7 @@ public enum CMIMaterial { WEEPING_VINES_PLANT("Weeping Vines Plant"), ZOGLIN_SPAWN_EGG("Zoglin Spawn Egg"), ZOMBIFIED_PIGLIN_SPAWN_EGG("Zombified Piglin Spawn Egg"), - + // 1.16.2 PIGLIN_BRUTE_SPAWN_EGG("Piglin Brute Spawn Egg"), @@ -1532,6 +1532,7 @@ public static CMIMaterial get(Block block) { if (mat == null && Version.isCurrentEqualOrLower(Version.v1_13_R2)) { mat = get(block.getType().getId(), Version.isCurrentEqualOrHigher(Version.v1_13_R1) ? 0 : data); } + return mat == null ? CMIMaterial.NONE : mat; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index d386888bd..25d58d066 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -976,6 +976,7 @@ public static boolean isCanUseEntity_BothClick(Material mat, Block block) { public static boolean isEmptyBlock(Block block) { CMIMaterial cb = CMIMaterial.get(block); + switch (cb) { case COBWEB: case STRING: @@ -985,6 +986,7 @@ public static boolean isEmptyBlock(Block block) { case TRIPWIRE: case PAINTING: case ITEM_FRAME: + case NONE: return true; default: break; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 708dcf5d8..14c8e3493 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -57,6 +57,7 @@ import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.utils.Debug; public class ClaimedResidence { @@ -1288,16 +1289,10 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r boolean isAdmin = plugin.isResAdminOn(reqPlayer); if (this.getRaid().isRaidInitialized()) { - if (this.getRaid().isAttacker(targetPlayer)) { + if (this.getRaid().isAttacker(targetPlayer) || this.getRaid().isDefender(targetPlayer) && !ConfigManager.RaidDefenderTeleport || !resadmin) { plugin.msg(reqPlayer, lm.Raid_cantDo); return; - } else if (this.getRaid().isDefender(targetPlayer) && !ConfigManager.RaidDefenderTeleport) { - plugin.msg(reqPlayer, lm.Raid_cantDo); - return; - } else if (!resadmin) { - plugin.msg(reqPlayer, lm.Raid_cantDo); } - } else { if (!resadmin && !isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer, 10000L) && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) From 9e6d04a5eff24079aab8b020baf40469c482ac35 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Fri, 5 Feb 2021 16:33:13 +0200 Subject: [PATCH 0826/1142] Fixing issue with black listed item error message on older servers --- .../bukkit/residence/listeners/ResidenceBlockListener.java | 2 +- .../bukkit/residence/listeners/ResidencePlayerListener.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index b00988560..9fbd2f64e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -640,7 +640,7 @@ public static boolean canPlaceBlock(Player player, Block block, boolean informPl return false; } } - if (res != null && !res.getItemBlacklist().isAllowed(mat)) { + if (!CMIMaterial.get(mat).isNone() && res != null && !res.getItemBlacklist().isAllowed(mat)) { if (informPlayer) Residence.getInstance().msg(player, lm.General_ItemBlacklisted); return false; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 25d58d066..ddf925760 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -976,7 +976,7 @@ public static boolean isCanUseEntity_BothClick(Material mat, Block block) { public static boolean isEmptyBlock(Block block) { CMIMaterial cb = CMIMaterial.get(block); - + switch (cb) { case COBWEB: case STRING: @@ -1205,7 +1205,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (resadmin) return; - if (heldItem.isValidItem() && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld().getName())) { + if (!heldItem.isNone() && heldItem.isValidItem() && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld().getName())) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; @@ -1872,7 +1872,7 @@ private void checkSpecialFlags(Player player, ClaimedResidence newRes, ClaimedRe if (Flags.wspeed1.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || Flags.wspeed2.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) { player.setWalkSpeed(0.2F); - } + } if (Flags.sun.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || Flags.rain.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); From fdbfc9e5751ce6e21d3acb785a963b57d50b7b43 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 26 Feb 2021 16:03:08 +0200 Subject: [PATCH 0827/1142] We should check tab complete player name by sender --- .../bekvon/bukkit/residence/commands/auto.java | 1 - .../bekvon/bukkit/residence/commands/flags.java | 1 - .../bekvon/bukkit/residence/commands/raid.java | 1 - src/com/bekvon/bukkit/residence/commands/rc.java | 3 --- .../bekvon/bukkit/residence/commands/select.java | 1 - .../bukkit/residence/containers/PlayerGroup.java | 2 +- .../residence/containers/ResidencePlayer.java | 2 -- .../bukkit/residence/dynmap/DynMapManager.java | 2 -- .../residence/economy/TransactionManager.java | 1 - .../residence/economy/rent/RentManager.java | 4 ++-- .../bekvon/bukkit/residence/gui/FlagUtil.java | 2 +- .../bukkit/residence/itemlist/ItemList.java | 1 - .../listeners/ResidenceBlockListener.java | 1 - .../listeners/ResidenceEntityListener.java | 2 -- .../listeners/ResidencePlayerListener.java | 2 +- .../listeners/ResidencePlayerListener1_14.java | 8 ++++---- .../listeners/ResidencePlayerListener1_15.java | 2 -- .../residence/permissions/PermissionGroup.java | 15 +++++++-------- .../residence/permissions/PermissionInfo.java | 2 -- .../residence/permissions/PermissionManager.java | 4 ++-- .../residence/protection/ClaimedResidence.java | 7 +++---- .../residence/protection/FlagPermissions.java | 6 +++--- .../residence/protection/LeaseManager.java | 16 ++++++++-------- .../residence/protection/ResidenceManager.java | 1 - .../protection/ResidencePermissions.java | 3 +-- .../bukkit/residence/raid/ResidenceRaid.java | 1 - .../residence/selection/AutoSelection.java | 1 - .../bukkit/residence/text/help/HelpEntry.java | 7 ++++--- src/plugin.yml | 2 +- 29 files changed, 38 insertions(+), 63 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 2342c216d..2aa793f34 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -17,7 +17,6 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; public class auto implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index a91d5f5bc..aadce8adb 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -8,7 +8,6 @@ import org.bukkit.command.CommandSender; import com.bekvon.bukkit.cmiLib.ConfigReader; -import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; diff --git a/src/com/bekvon/bukkit/residence/commands/raid.java b/src/com/bekvon/bukkit/residence/commands/raid.java index 991a28882..3f690646b 100644 --- a/src/com/bekvon/bukkit/residence/commands/raid.java +++ b/src/com/bekvon/bukkit/residence/commands/raid.java @@ -15,7 +15,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.raid.ResidenceRaid; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.TimeModifier; import com.bekvon.bukkit.residence.utils.Utils; diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index 5c49d4442..5be6fa719 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -2,12 +2,9 @@ import java.util.Arrays; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.Zrips.CMI.Modules.Logs.CMIDebug; import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 0ca4962c7..df676c4d3 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -20,7 +20,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; public class select implements cmd { diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index 67bc8c721..d76c4bc9a 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -96,7 +96,7 @@ private PermissionGroup getPermissionGroup() { group = one.getValue(); } } else { - OfflinePlayer offlineP = Residence.getInstance().getOfflinePlayer(resPlayer.getPlayerName()); + OfflinePlayer offlineP = Residence.getInstance().getOfflinePlayer(resPlayer.getName()); if (offlineP != null) if (ResidenceVaultAdapter.hasPermission(offlineP, ResPerm.group_$1.getPermission(one.getKey()), Residence.getInstance().getConfigManager().getDefaultWorld())) group = one.getValue(); diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 70ab7c27f..3b9030d1e 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -21,11 +21,9 @@ import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.permissions.PermissionInfo; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.raid.ResidenceRaid; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index a86033e8d..07cb81d66 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -7,7 +7,6 @@ import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.ChatColor; import org.dynmap.DynmapAPI; import org.dynmap.markers.AreaMarker; import org.dynmap.markers.MarkerAPI; @@ -22,7 +21,6 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.ResidencePermissions; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class DynMapManager { diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 29dadc3ff..8e1e4fabb 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -22,7 +22,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.Debug; public class TransactionManager implements MarketBuyInterface { private Set sellAmount; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 0d5afc838..fad845e16 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -523,7 +523,7 @@ public void removeRentable(ClaimedResidence res) { return; removeFromRent(res); rentableLand.remove(res); - plugin.getSignUtil().removeSign(res.getName()); + plugin.getSignUtil().removeSign(res); } @Override @@ -908,7 +908,7 @@ public void printRentableResidences(Player player, int page) { res.getOwner(), rentedBy); RawMessage rm = new RawMessage(); - rm.add(msg, "&2" + hover); + rm.addText(msg).addHover("&2" + hover); if (!hover.equalsIgnoreCase("")) { rm.show(player); diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 222fb1e0e..fa8d87747 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -118,7 +118,7 @@ public void openSetFlagGui(Player player, ClaimedResidence res, boolean resadmin setFlagInfo flag = new setFlagInfo(res, player, resadmin); flag.recalculate(); CMIGui gui = new CMIGui(player); - gui.setTitle(Residence.getInstance().msg(lm.Gui_Set_Title, res.getName())); + gui.setTitle(plugin.msg(lm.Gui_Set_Title, res.getName())); gui.setInvSize(GUIRows.r6); PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index 95cd44a92..b502ab3ad 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -11,7 +11,6 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.residence.utils.Debug; public class ItemList { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 9fbd2f64e..539ec6aa3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -59,7 +59,6 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceBlockListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 9db96f9fb..d52cf227f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -61,13 +61,11 @@ import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceEntityListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ddf925760..c932f479b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -43,13 +43,13 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.vehicle.VehicleMoveEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerShearEntityEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.event.vehicle.VehicleMoveEvent; import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.ActionBarManager; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_14.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_14.java index e8f93c87f..c3d400dfe 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_14.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_14.java @@ -22,16 +22,16 @@ public ResidencePlayerListener1_14(Residence plugin) { public void onJump(PlayerTakeLecternBookEvent event) { // disabling event on world - if (Residence.getInstance().isDisabledWorldListener(event.getLectern().getWorld())) + if (plugin.isDisabledWorldListener(event.getLectern().getWorld())) return; - if (Residence.getInstance().isResAdminOn(event.getPlayer())) { + if (plugin.isResAdminOn(event.getPlayer())) { return; } - FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(event.getLectern().getLocation(), event.getPlayer()); + FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getLectern().getLocation(), event.getPlayer()); if (perms.playerHas(event.getPlayer(), Flags.container, FlagCombo.TrueOrNone)) return; event.setCancelled(true); - Residence.getInstance().msg(event.getPlayer(), lm.Flag_Deny, Flags.container); + plugin.msg(event.getPlayer(), lm.Flag_Deny, Flags.container); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_15.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_15.java index 0d17a8e3d..dd17a69d6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_15.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_15.java @@ -1,7 +1,6 @@ package com.bekvon.bukkit.residence.listeners; import org.bukkit.Material; -import org.bukkit.block.Beehive; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -18,7 +17,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidencePlayerListener1_15 implements Listener { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 2c62f7fcd..a142ca440 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -1,8 +1,15 @@ package com.bekvon.bukkit.residence.permissions; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; +import org.bukkit.configuration.ConfigurationSection; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -10,14 +17,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import com.bekvon.bukkit.residence.utils.Debug; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import org.bukkit.configuration.ConfigurationSection; public class PermissionGroup { private int xmax = 0; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionInfo.java b/src/com/bekvon/bukkit/residence/permissions/PermissionInfo.java index 049a712c0..cfb11275f 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionInfo.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionInfo.java @@ -3,8 +3,6 @@ import java.util.HashSet; import java.util.Set; -import com.bekvon.bukkit.residence.utils.Debug; - public class PermissionInfo { private String permission; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 1cecaa556..8b9ed6053 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -474,7 +474,7 @@ public static boolean hasSetPermission(CommandSender sender, String perm, boolea if (!has && inform) { boolean showPerm = ResPerm.permisiononerror.hasPermission(sender); RawMessage rm = new RawMessage(); - rm.add(Residence.getInstance().getLM().getMessage(lm.General_NoPermission), showPerm ? perm : null); + rm.addText(Residence.getInstance().getLM().getMessage(lm.General_NoPermission)).addHover(showPerm ? perm : null); rm.show(sender); informConsole(sender, perm, true); @@ -513,7 +513,7 @@ public static boolean hasPermission(CommandSender sender, String permision, Bool if (output) { boolean showPerm = ResPerm.permisiononerror.hasPermission(sender); RawMessage rm = new RawMessage(); - rm.add(Residence.getInstance().getLM().getMessage(lm.General_NoPermission), showPerm ? permision : null); + rm.addText(Residence.getInstance().getLM().getMessage(lm.General_NoPermission)).addHover(showPerm ? permision : null); rm.show(sender); informConsole(sender, permision, informConsole); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 14c8e3493..77c9d7cac 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -57,7 +57,6 @@ import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.Debug; public class ClaimedResidence { @@ -1163,9 +1162,9 @@ public void printSubzoneList(CommandSender sender, int page) { ClaimedResidence res = getSubzones().get(i); if (res == null) continue; - rm.add(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " - + plugin.msg(lm.General_Owner, res.getOwner()), "Teleport to " + res.getName(), - "res tp " + res.getName()); + rm.addText(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " + plugin.msg(lm.General_Owner, res.getOwner())) + .addHover("Teleport to " + res.getName()) + .addCommand("res tp " + res.getName()); rm.show(sender); rm.clear(); } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 68b64925e..1902c4095 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -1179,7 +1179,7 @@ public String listPlayersFlags() { public RawMessage listPlayersFlagsRaw(String player, String text) { RawMessage rm = new RawMessage(); - rm.add(text); + rm.addText(text); Set>> set = playerFlags.entrySet(); synchronized (set) { @@ -1224,8 +1224,8 @@ public RawMessage listPlayersFlagsRaw(String player, String text) { else next = p1Color + next + "&r"; } - rm.add(next, splitBy(5, perms)); - rm.add(" "); + rm.addText(next).addHover(splitBy(5, perms)); + rm.addText(" "); } } } diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index 4c764db51..2dc8fa1f5 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -1,5 +1,13 @@ package com.bekvon.bukkit.residence.protection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import org.bukkit.entity.Player; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; @@ -7,16 +15,8 @@ import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import org.bukkit.entity.Player; - public class LeaseManager { private Set leaseExpireTime; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 33a29a6e5..c6fecc629 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -42,7 +42,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.griefcraft.cache.ProtectionCache; import com.griefcraft.lwc.LWC; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index bd88842d9..98434a4e6 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -14,16 +14,15 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.Flags.FlagMode; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.containers.Flags.FlagMode; import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagCheckEvent; import com.bekvon.bukkit.residence.event.ResidenceFlagEvent.FlagType; import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidencePermissions extends FlagPermissions { diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java index 11483afc2..e39f45bd0 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -19,7 +19,6 @@ import com.bekvon.bukkit.residence.event.ResidenceRaidPreStartEvent; import com.bekvon.bukkit.residence.event.ResidenceRaidStartEvent; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidenceRaid { diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index d8f98f4ab..facf86093 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -12,7 +12,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; public class AutoSelection { diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index fd7773c42..9e029aa19 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -31,6 +31,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; public class HelpEntry { protected String name; @@ -287,7 +288,6 @@ private static String getMpEntry(HashMap> mp) { @SuppressWarnings("deprecation") public Set getSubCommands(CommandSender sender, String[] args) { Set subCommands = new HashSet(); - int neededArgPlace = args.length - 2; if (neededArgPlace < 0) @@ -359,11 +359,12 @@ public Set getSubCommands(CommandSender sender, String[] args) { list.add(NeededArg); } + for (String oneArg : list) { switch (oneArg) { case "[playername]": for (Player one : Bukkit.getOnlinePlayers()) { - if (playerSender == null || one.canSee(playerSender)) + if (playerSender == null || playerSender.canSee(one)) subCommands.add(one.getName()); } break; @@ -445,7 +446,7 @@ else if (args[0].equalsIgnoreCase(pset.class.getSimpleName())) for (String one : FlagPermissions.getAllPosibleFlags()) { Flags f = Flags.getFlag(one); - if (f != null) { + if (f != null) { if (f.getFlagMode() != FlagMode.Both && f.getFlagMode() != mode) continue; diff --git a/src/plugin.yml b/src/plugin.yml index 7a7bb3217..feb33debf 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.2.5 +version: 4.9.2.6 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 35a9a6d22d10f3378b05d9590eb00d6de4dbc5f9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 26 Feb 2021 16:27:31 +0200 Subject: [PATCH 0828/1142] Inverting contract command side --- .../residence/selection/SelectionManager.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 2160ab1b3..4fa5136a0 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -294,7 +294,27 @@ private int getMaxWorldHeight(World world) { } public enum Direction { - UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ + UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ; + + public Direction getOpposite() { + switch (this) { + case DOWN: + return UP; + case MINUSX: + return PLUSX; + case MINUSZ: + return PLUSZ; + case PLUSX: + return MINUSX; + case PLUSZ: + return MINUSZ; + case UP: + return DOWN; + default: + break; + } + return this; + } } public SelectionManager(Server server, Residence plugin) { @@ -997,6 +1017,8 @@ public boolean contract(Player player, double amount, @SuppressWarnings("unused" plugin.msg(player, lm.Invalid_Direction); return false; } + d = d.getOpposite(); + CuboidArea area = this.getSelectionCuboid(player); switch (d) { case UP: From 2f3354b85ae76ec5ac32888715fdda29e8eafd55 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 26 Feb 2021 16:44:48 +0200 Subject: [PATCH 0829/1142] Lets keep loaded chunk in while checking for valid location --- .../protection/ClaimedResidence.java | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 77c9d7cac..c415325f6 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -983,23 +983,38 @@ public Location getMiddleFreeLoc(Location insideLoc, Player player) { boolean found = false; int it = 1; int maxIt = newLoc.getBlockY() + 1; - while (it < maxIt) { - it++; - if (newLoc.getBlockY() < lowY) - break; + try { + insideLoc.getChunk().setForceLoaded(true); + } catch (Throwable e) { + } - newLoc.add(0, -1, 0); + try { + while (it < maxIt) { + it++; - Block block = newLoc.getBlock(); - Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); - Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); - if (ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2) - && !ResidencePlayerListener.isEmptyBlock(block3)) { - found = true; - break; + if (newLoc.getBlockY() < lowY) + break; + + newLoc.add(0, -1, 0); + + Block block = newLoc.getBlock(); + Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); + Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); + if (ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2) + && !ResidencePlayerListener.isEmptyBlock(block3)) { + found = true; + break; + } } + } catch (Throwable e) { } + + try { + insideLoc.getChunk().setForceLoaded(false); + } catch (Throwable e) { + } + if (found) { if (player != null) { newLoc.setPitch(player.getLocation().getPitch()); @@ -1228,7 +1243,7 @@ public Location getTeleportLocation(Player player) { Location high = this.getMainArea().getHighLoc(); Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); - return this.getMiddleFreeLoc(t, player); + tpLoc = this.getMiddleFreeLoc(t, player); } return tpLoc; } From 95e3a6247c645dccb395e16f381291ed6347c741 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 26 Feb 2021 16:53:02 +0200 Subject: [PATCH 0830/1142] Tab complete for /res auto command --- src/com/bekvon/bukkit/residence/commands/auto.java | 2 ++ src/com/bekvon/bukkit/residence/text/help/HelpEntry.java | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 2aa793f34..039d5e58b 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -11,6 +11,7 @@ import org.bukkit.util.Vector; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -282,5 +283,6 @@ public void getLocale() { // Main command c.get("Description", "Create maximum allowed residence around you"); c.get("Info", Arrays.asList("&eUsage: &6/res auto (residence name) (radius)")); + LocaleManager.addTabCompleteMain(this); } } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 9e029aa19..53ee40f07 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -31,7 +31,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; public class HelpEntry { protected String name; @@ -294,7 +293,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { neededArgPlace = 0; List ArgsList = new ArrayList(); - + if (args.length > 0) { HashMap> mp = Residence.getInstance().getLocaleManager().CommandTab.get(args[0].toLowerCase()); if (mp != null) { From 41174deec8bf33f3741cbc873e822f496c05c7a3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 26 Feb 2021 17:02:20 +0200 Subject: [PATCH 0831/1142] prevent residence creation from none disabled world --- src/com/bekvon/bukkit/residence/commands/create.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 9e7b01814..61d7f26a1 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -29,7 +29,15 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.getSelectionManager().worldEdit(player); } } + if (plugin.getSelectionManager().hasPlacedBoth(player)) { + + if (sender instanceof Player && !plugin.getPermissionManager().isResidenceAdmin(sender) && plugin.isDisabledWorldCommand((plugin.getSelectionManager().getSelection(player)) + .getWorld())) { + plugin.msg(sender, lm.General_DisabledWorld); + return null; + } + plugin.getResidenceManager().addResidence(player, args[0], plugin.getSelectionManager().getPlayerLoc1(player), plugin .getSelectionManager().getPlayerLoc2(player), resadmin); return true; From fe9558d2739b9951804ea674a9a89c61d9971ff9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 26 Feb 2021 17:08:32 +0200 Subject: [PATCH 0832/1142] Lets allow player kicking when you have admin flag --- src/com/bekvon/bukkit/residence/commands/kick.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index c54078dc8..ced6f4eff 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; @@ -46,19 +47,19 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } ClaimedResidence res = plugin.getResidenceManager().getByLoc(targetplayer.getLocation()); - if (res == null || !res.isOwner(player) && !resadmin) { + if (res == null || !res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { plugin.msg(player, lm.Residence_PlayerNotIn); return true; } - if (!res.isOwner(player)) + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.admin, false)) return false; if (res.getRaid().isRaidInitialized()) { plugin.msg(sender, lm.Raid_cantDo); return true; } - + if (res.getPlayersInResidence().contains(targetplayer)) { if (ResPerm.command_kick_bypass.hasPermission(targetplayer)) { From 4aa0b9f1c2fae19590be85d9d8f95dba294b5c18 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 26 Feb 2021 18:08:15 +0200 Subject: [PATCH 0833/1142] Ability to listen to residence chat without joining it --- .../bukkit/residence/ConfigManager.java | 15 ++++++++++++--- .../bukkit/residence/chat/ChatChannel.java | 19 ++++++++++++++++++- .../bukkit/residence/containers/lm.java | 5 +++++ src/plugin.yml | 2 +- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 7014fe009..4dd2bcede 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -135,6 +135,7 @@ public class ConfigManager { protected boolean ignoreGroupedFlagAcess; protected CMIChatColor chatColor; protected boolean chatEnable; + private boolean chatListening; private ELMessageType EnterLeaveMessageType; // protected boolean actionBar; // protected boolean titleMessage; @@ -1013,8 +1014,6 @@ public void UpdateConfigFile() { c.addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); rentCheckInterval = c.get("Global.RentCheckInterval", 10); - c.addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); - chatEnable = c.get("Global.ResidenceChatEnable", true); ELMessageType old = c.getC().isBoolean("Global.ActionBar.General") && c.getC().getBoolean("Global.ActionBar.General") ? ELMessageType.ActionBar : ELMessageType.ChatBox; old = c.getC().isBoolean("Global.TitleBar.EnterLeave") && c.getC().getBoolean("Global.TitleBar.EnterLeave") ? ELMessageType.TitleBar : old; @@ -1027,6 +1026,9 @@ public void UpdateConfigFile() { ActionBarOnSelection = c.get("Global.ActionBar.ShowOnSelection", true); + c.addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); + chatEnable = c.get("Global.ResidenceChatEnable", true); + c.addComment("Global.ResidenceChatColor", "Color of residence chat."); try { chatColor = CMIChatColor.getColor((c.get("Global.ResidenceChatColor", "DARK_PURPLE"))); @@ -1034,7 +1036,10 @@ public void UpdateConfigFile() { chatColor = CMIChatColor.DARK_PURPLE; } - c.addComment("Global.ResidenceChatPrefixLenght", "Max lenght of residence chat prefix including color codes"); + c.addComment("Global.ResidenceChatListening", "When enabled players with access to chat flag will be able to listen to residence chat without joining it"); + chatListening = c.get("Global.ResidenceChatListening", false); + + c.addComment("Global.ResidenceChatPrefixLength", "Max lenght of residence chat prefix including color codes"); chatPrefixLength = c.get("Global.ResidenceChatPrefixLength", 16); c.addComment("Global.AdminOnlyCommands", @@ -2033,6 +2038,10 @@ public boolean isInfoExcludeDFlags() { return InfoExcludeDFlags; } + public boolean isChatListening() { + return chatListening; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index 0e5e61c6b..85da38a7c 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -9,7 +9,11 @@ import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceChatEvent; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.sun.jna.platform.win32.LMAccess; public class ChatChannel { @@ -48,9 +52,22 @@ public void chat(String sourcePlayer, String message) { for (String member : members) { Player player = serv.getPlayer(member); - Residence.getInstance().msg(player, cevent.getChatprefix() + " " + Residence.getInstance().getConfigManager().getChatColor() + sourcePlayer + ": " + cevent.getColor() + cevent + Residence.getInstance().msg(player, lm.Chat_ChatMessage, cevent.getChatprefix(), Residence.getInstance().getConfigManager().getChatColor(), sourcePlayer, cevent.getColor(), cevent .getChatMessage()); } + + if (Residence.getInstance().getConfigManager().isChatListening()) { + cevent.getResidence().getPlayersInResidence().forEach((v) -> { + if (members.contains(v.getName())) + return; + if (!cevent.getResidence().isOwner(v) && !cevent.getResidence().getPermissions().playerHas(v, Flags.chat, FlagCombo.OnlyTrue)) + return; + Residence.getInstance().msg(v, lm.Chat_ChatListeningMessage, cevent.getChatprefix(), Residence.getInstance().getConfigManager().getChatColor(), sourcePlayer, cevent.getColor(), cevent + .getChatMessage(), channelName); + }); + } + + Bukkit.getConsoleSender().sendMessage("ResidentialChat[" + channelName + "] - " + sourcePlayer + ": " + CMIChatColor.stripColor(cevent.getChatMessage())); }); } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 707b009da..007aa9de4 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -3,6 +3,8 @@ import java.util.ArrayList; import java.util.Arrays; +import com.bekvon.bukkit.residence.Residence; + public enum lm { Invalid_Player("&cInvalid player name..."), Invalid_PlayerOffline("&cPlayer is offline"), @@ -398,6 +400,9 @@ public enum lm { Chat_ChatChannelChange("&eChanged residence chat channel to &6%1!"), Chat_ChatChannelLeave("&eLeft residence chat"), + + Chat_ChatMessage("%1 %2%3: %4%5"), + Chat_ChatListeningMessage("&2[Listening %6]%1 %2%3: %4%5"), Chat_JoinFirst("&4Join residence chat channel first..."), Chat_InvalidChannel("&4Invalid Channel..."), diff --git a/src/plugin.yml b/src/plugin.yml index feb33debf..d6416b082 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.2.6 +version: 4.9.2.7 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 324353922a8cec0d6542a9c4748ada3dbabe14b0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 5 Mar 2021 16:00:27 +0200 Subject: [PATCH 0834/1142] Allow residences in unloaded worlds --- .../bukkit/residence/ConfigManager.java | 18 +- .../bekvon/bukkit/residence/Residence.java | 33 +- .../protection/ClaimedResidence.java | 503 +++++++++--------- .../residence/protection/CuboidArea.java | 73 ++- .../protection/ResidenceManager.java | 56 +- .../protection/ResidencePermissions.java | 5 + 6 files changed, 391 insertions(+), 297 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 4dd2bcede..1c587f6ba 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -71,6 +71,7 @@ public class ConfigManager { protected int AutoCleanUpDays; protected boolean AutoCleanUpRegenerate; protected boolean CanTeleportIncludeOwner; + private boolean LoadEveryWorld; protected CMIMaterial selectionTool; protected boolean adminOps; protected boolean AdminFullAccess; @@ -589,6 +590,10 @@ public void UpdateConfigFile() { "Simply equip this tool and hit a location inside the residence and it will display the info for it."); infoTool = CMIMaterial.get(c.get("Global.InfoToolId", Material.STRING.toString())); + c.addComment("Global.Optimizations.LoadEveryWorld", "When enabled we will load data from every single world file even if world doesn't exist but might be loaded later on", + "Usually only useful when you have multiverse plugin which loads worlds durring server work time"); + LoadEveryWorld = c.get("Global.Optimizations.LoadEveryWorld", false); + c.addComment("Global.Optimizations.CanTeleportIncludeOwner", "This will slightly change behavior of groups file CanTeleport section which will include server owner into check", "When this is set to false and CanTeleport set to false, players will not have option to teleport to other player residences, only to their own", "When this is set to true and CanTeleport set to false, players will not have option to teleport to residences in general", @@ -1014,7 +1019,6 @@ public void UpdateConfigFile() { c.addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); rentCheckInterval = c.get("Global.RentCheckInterval", 10); - ELMessageType old = c.getC().isBoolean("Global.ActionBar.General") && c.getC().getBoolean("Global.ActionBar.General") ? ELMessageType.ActionBar : ELMessageType.ChatBox; old = c.getC().isBoolean("Global.TitleBar.EnterLeave") && c.getC().getBoolean("Global.TitleBar.EnterLeave") ? ELMessageType.TitleBar : old; @@ -1028,7 +1032,7 @@ public void UpdateConfigFile() { c.addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); chatEnable = c.get("Global.ResidenceChatEnable", true); - + c.addComment("Global.ResidenceChatColor", "Color of residence chat."); try { chatColor = CMIChatColor.getColor((c.get("Global.ResidenceChatColor", "DARK_PURPLE"))); @@ -1038,7 +1042,7 @@ public void UpdateConfigFile() { c.addComment("Global.ResidenceChatListening", "When enabled players with access to chat flag will be able to listen to residence chat without joining it"); chatListening = c.get("Global.ResidenceChatListening", false); - + c.addComment("Global.ResidenceChatPrefixLength", "Max lenght of residence chat prefix including color codes"); chatPrefixLength = c.get("Global.ResidenceChatPrefixLength", 16); @@ -1322,9 +1326,9 @@ public void loadFlags() { // Re enabling all of them before loading flags file for (Flags one : Flags.values()) { - one.setGlobalyEnabled(true); + one.setGlobalyEnabled(true); } - + for (String fl : globalDisable) { Flags flag = Flags.getFlag(fl); if (flag == null) { @@ -2042,6 +2046,10 @@ public boolean isChatListening() { return chatListening; } + public boolean isLoadEveryWorld() { + return LoadEveryWorld; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 11b4fd693..87cfe66f6 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -16,9 +16,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.jar.JarEntry; @@ -475,11 +477,11 @@ public void onEnable() { this.getCommand("res").setExecutor(getCommandManager()); this.getCommand("resadmin").setExecutor(getCommandManager()); this.getCommand("residence").setExecutor(getCommandManager()); - + this.getCommand("rc").setExecutor(getCommandManager()); this.getCommand("resreload").setExecutor(getCommandManager()); this.getCommand("resload").setExecutor(getCommandManager()); - + TabComplete tab = new TabComplete(); this.getCommand("res").setTabCompleter(tab); this.getCommand("resadmin").setTabCompleter(tab); @@ -1370,6 +1372,8 @@ private void saveYml() throws IOException { } } + public final static String saveFilePrefix = "res_"; + @SuppressWarnings({ "rawtypes", "unchecked" }) protected boolean loadYml() throws Exception { File saveFolder = new File(dataFolder, "Save"); @@ -1387,18 +1391,21 @@ protected boolean loadYml() throws Exception { YMLSaveHelper yml; File loadFile; HashMap worlds = new HashMap<>(); - for (World world : getServ().getWorlds()) { - loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); + + + + for (String worldName : this.getResidenceManager().getWorldNames()) { + loadFile = new File(worldFolder, saveFilePrefix + worldName + ".yml"); if (loadFile.isFile()) { time = System.currentTimeMillis(); - if (!isDisabledWorld(world)) - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading save data for world " + world.getName() + "..."); + if (!isDisabledWorld(worldName)) + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading save data for world " + worldName + "..."); yml = new YMLSaveHelper(loadFile); yml.load(); if (yml.getRoot().containsKey("Messages")) { - HashMap c = getResidenceManager().getCacheMessages().get(world.getName()); + HashMap c = getResidenceManager().getCacheMessages().get(worldName); if (c == null) c = new HashMap(); Map ms = (Map) yml.getRoot().get("Messages"); @@ -1411,12 +1418,12 @@ protected boolean loadYml() throws Exception { } } - getResidenceManager().getCacheMessages().put(world.getName(), c); + getResidenceManager().getCacheMessages().put(worldName, c); } } if (yml.getRoot().containsKey("Flags")) { - HashMap c = getResidenceManager().getCacheFlags().get(world.getName()); + HashMap c = getResidenceManager().getCacheFlags().get(worldName); if (c == null) c = new HashMap(); Map ms = (Map) yml.getRoot().get("Flags"); @@ -1429,17 +1436,17 @@ protected boolean loadYml() throws Exception { } } - getResidenceManager().getCacheFlags().put(world.getName(), c); + getResidenceManager().getCacheFlags().put(worldName, c); } } - worlds.put(world.getName(), yml.getRoot().get("Residences")); + worlds.put(worldName, yml.getRoot().get("Residences")); int pass = (int) (System.currentTimeMillis() - time); String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - if (!isDisabledWorld(world)) - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loaded " + world.getName() + " data. (" + PastTime + ")"); + if (!isDisabledWorld(worldName)) + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loaded " + worldName + " data. (" + PastTime + ")"); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index c415325f6..b59b73e32 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -24,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.util.Vector; import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.CMIMaterial; @@ -67,7 +68,9 @@ public class ClaimedResidence { protected ResidencePermissions perms; protected ResidenceBank bank; protected Double BlockSellPrice = 0.0; - protected Location tpLoc; + protected Vector tpLoc; + protected Vector PitchYaw; + protected World world; protected String enterMessage; protected String leaveMessage; protected String ShopDesc = null; @@ -90,8 +93,6 @@ public class ClaimedResidence { protected Integer sellPrice = -1; - private Residence plugin; - private ResidenceRaid raid; private Set signsInResidence = new HashSet(); @@ -124,11 +125,11 @@ public void setSellPrice(Integer amount) { } public boolean isForSell() { - return plugin.getTransactionManager().isForSale(this.getName()); + return Residence.getInstance().getTransactionManager().isForSale(this.getName()); } public boolean isForRent() { - return plugin.getRentManager().isForRent(this); + return Residence.getInstance().getRentManager().isForRent(this); } public boolean isSubzoneForRent() { @@ -174,7 +175,7 @@ public boolean isParentForSell() { } public boolean isRented() { - return plugin.getRentManager().isRented(this); + return Residence.getInstance().getRentManager().isRented(this); } public void setRentable(RentableLand rl) { @@ -193,27 +194,30 @@ public RentedLand getRentedLand() { return this.rentedland; } - public ClaimedResidence(String creationWorld, Residence plugin) { - this(plugin.getServerLandName(), creationWorld, plugin); + public ClaimedResidence() { + initialize(); + } + + public ClaimedResidence(String creationWorld) { + this(Residence.getInstance().getServerLandName(), creationWorld); } - public ClaimedResidence(String creator, String creationWorld, Residence plugin) { - this(plugin); + public ClaimedResidence(String creator, String creationWorld) { perms = new ResidencePermissions(this, creator, creationWorld); + initialize(); } - public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence, Residence plugin) { - this(creator, creationWorld, plugin); + public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence) { + this(creator, creationWorld); parent = parentResidence; } - public ClaimedResidence(Residence plugin) { + private void initialize() { subzones = new HashMap<>(); areas = new HashMap<>(); bank = new ResidenceBank(this); - blacklist = new ResidenceItemList(plugin, this, ListType.BLACKLIST); - ignorelist = new ResidenceItemList(plugin, this, ListType.IGNORELIST); - this.plugin = plugin; + blacklist = new ResidenceItemList(Residence.getInstance(), this, ListType.BLACKLIST); + ignorelist = new ResidenceItemList(Residence.getInstance(), this, ListType.IGNORELIST); } public boolean isMainResidence() { @@ -243,18 +247,18 @@ public int getSubzoneDeep(int deep) { public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) { if (resadmin) return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (area.getXSize() < group.getMinX()) { - plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); + Residence.getInstance().msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); return false; } if (area.getYSize() < group.getMinY()) { - plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); + Residence.getInstance().msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); return false; } if (area.getZSize() < group.getMinZ()) { - plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); + Residence.getInstance().msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); return false; } return true; @@ -263,18 +267,18 @@ public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean resadmin) { if (resadmin) return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (area.getXSize() < group.getSubzoneMinX()) { - plugin.msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); + Residence.getInstance().msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); return false; } if (area.getYSize() < group.getSubzoneMinY()) { - plugin.msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); + Residence.getInstance().msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); return false; } if (area.getZSize() < group.getSubzoneMinZ()) { - plugin.msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); + Residence.getInstance().msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); return false; } return true; @@ -283,18 +287,18 @@ public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean re public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin) { if (resadmin) return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (area.getXSize() > group.getMaxX()) { - plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); + Residence.getInstance().msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); return false; } if (area.getYSize() > group.getMaxY()) { - plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); + Residence.getInstance().msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); return false; } if (area.getZSize() > group.getMaxZ()) { - plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); + Residence.getInstance().msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); return false; } return true; @@ -303,18 +307,18 @@ public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin public boolean isSmallerThanMaxSubzone(Player player, CuboidArea area, boolean resadmin) { if (resadmin) return true; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (area.getXSize() > group.getSubzoneMaxX()) { - plugin.msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); + Residence.getInstance().msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); return false; } if (area.getYSize() > group.getSubzoneMaxY()) { - plugin.msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); + Residence.getInstance().msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); return false; } if (area.getZSize() > group.getSubzoneMaxZ()) { - plugin.msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); + Residence.getInstance().msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); return false; } return true; @@ -329,9 +333,9 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin, boolean chargeMoney) { - if (!plugin.validName(name)) { + if (!Residence.getInstance().validName(name)) { if (player != null) { - plugin.msg(player, lm.Invalid_NameCharacters); + Residence.getInstance().msg(player, lm.Invalid_NameCharacters); } return false; } @@ -341,7 +345,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa if (areas.containsKey(NName)) { if (player != null) { - plugin.msg(player, lm.Area_Exists); + Residence.getInstance().msg(player, lm.Area_Exists); } return false; } @@ -350,7 +354,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa || !this.isSubzone() && !isBiggerThanMin(player, area, resadmin)) return false; - if (!resadmin && plugin.getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { + if (!resadmin && Residence.getInstance().getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { boolean inside = false; for (CuboidArea are : areas.values()) { if (are.isAreaWithinArea(area)) { @@ -358,26 +362,26 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } } if (!inside) { - plugin.msg(player, lm.Subzone_SelectInside); + Residence.getInstance().msg(player, lm.Subzone_SelectInside); return false; } } - if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { + if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorldName())) { if (player != null) { - plugin.msg(player, lm.Area_DiffWorld); + Residence.getInstance().msg(player, lm.Area_DiffWorld); } return false; } if (parent == null) { - String collideResidence = plugin.getResidenceManager().checkAreaCollision(area, this); - ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); + String collideResidence = Residence.getInstance().getResidenceManager().checkAreaCollision(area, this); + ClaimedResidence cRes = Residence.getInstance().getResidenceManager().getByName(collideResidence); if (cRes != null) { if (player != null) { - plugin.msg(player, lm.Area_Collision, cRes.getName()); + Residence.getInstance().msg(player, lm.Area_Collision, cRes.getName()); Visualizer v = new Visualizer(player); v.setAreas(area); v.setErrorAreas(cRes); - plugin.getSelectionManager().showBounds(player, v); + Residence.getInstance().getSelectionManager().showBounds(player, v); } return false; } @@ -388,7 +392,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa if (res != null && res != this) { if (res.checkCollision(area)) { if (player != null) { - plugin.msg(player, lm.Area_SubzoneCollision, sz); + Residence.getInstance().msg(player, lm.Area_SubzoneCollision, sz); } return false; } @@ -397,22 +401,22 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { - plugin.msg(player, lm.General_NoPermission); + Residence.getInstance().msg(player, lm.General_NoPermission); return false; } if (parent != null) { if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { - plugin.msg(player, lm.Area_NotWithinParent); + Residence.getInstance().msg(player, lm.Area_NotWithinParent); return false; } if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { - plugin.msg(player, lm.Residence_ParentNoPermission); + Residence.getInstance().msg(player, lm.Residence_ParentNoPermission); return false; } } - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (!this.isSubzone() && !group.canCreateResidences() && !ResPerm.create.hasPermission(player, true) @@ -422,49 +426,49 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } if (areas.size() >= group.getMaxPhysicalPerResidence()) { - plugin.msg(player, lm.Area_MaxPhysical); + Residence.getInstance().msg(player, lm.Area_MaxPhysical); return false; } if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { - plugin.msg(player, lm.Area_SizeLimit); + Residence.getInstance().msg(player, lm.Area_SizeLimit); return false; } if (group.getMinHeight() > area.getLowLoc().getBlockY()) { - plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); + Residence.getInstance().msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); return false; } if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { - plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); + Residence.getInstance().msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); return false; } if (!resadmin) { - if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) + if (Residence.getInstance().getWorldGuard() != null && Residence.getInstance().getWorldGuardUtil().isSelectionInArea(player)) return false; - if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) + if (Residence.getInstance().getKingdomsManager() != null && Residence.getInstance().getKingdomsUtil().isSelectionInArea(player)) return false; } - if (chargeMoney && parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { + if (chargeMoney && parent == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { double chargeamount = area.getCost(group); - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + if (!Residence.getInstance().getTransactionManager().chargeEconomyMoney(player, chargeamount)) { return false; } } } ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, NName, this, area); - plugin.getServ().getPluginManager().callEvent(resevent); + Residence.getInstance().getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return false; - plugin.getResidenceManager().removeChunkList(this.getName()); + Residence.getInstance().getResidenceManager().removeChunkList(this.getName()); areas.put(name, area); - plugin.getResidenceManager().calculateChunks(this.getName()); + Residence.getInstance().getResidenceManager().calculateChunks(this.getName()); return true; } @@ -475,24 +479,24 @@ public boolean replaceArea(CuboidArea neware, String name) { public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { if (!areas.containsKey(name)) { if (player != null) - plugin.msg(player, lm.Area_NonExist); + Residence.getInstance().msg(player, lm.Area_NonExist); return false; } CuboidArea oldarea = areas.get(name); - if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorld())) { + if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorldName())) { if (player != null) - plugin.msg(player, lm.Area_DiffWorld); + Residence.getInstance().msg(player, lm.Area_DiffWorld); return false; } if (parent == null) { - String collideResidence = plugin.getResidenceManager().checkAreaCollision(newarea, this); - ClaimedResidence cRes = plugin.getResidenceManager().getByName(collideResidence); + String collideResidence = Residence.getInstance().getResidenceManager().checkAreaCollision(newarea, this); + ClaimedResidence cRes = Residence.getInstance().getResidenceManager().getByName(collideResidence); if (cRes != null && player != null) { - plugin.msg(player, lm.Area_Collision, cRes.getName()); + Residence.getInstance().msg(player, lm.Area_Collision, cRes.getName()); Visualizer v = new Visualizer(player); v.setAreas(this.getAreaArray()); v.setErrorAreas(cRes.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); + Residence.getInstance().getSelectionManager().showBounds(player, v); return false; } } else { @@ -502,10 +506,10 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole if (res != null && res != this) { if (res.checkCollision(newarea)) { if (player != null) { - plugin.msg(player, lm.Area_SubzoneCollision, sz); + Residence.getInstance().msg(player, lm.Area_SubzoneCollision, sz); Visualizer v = new Visualizer(player); v.setErrorAreas(res.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); + Residence.getInstance().getSelectionManager().showBounds(player, v); } return false; } @@ -530,11 +534,11 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } } if (!good) { - plugin.msg(player, lm.Area_Collision, res.getName()); + Residence.getInstance().msg(player, lm.Area_Collision, res.getName()); Visualizer v = new Visualizer(player); v.setAreas(this.getAreaArray()); v.setErrorAreas(res.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); + Residence.getInstance().getSelectionManager().showBounds(player, v); return false; } @@ -546,21 +550,21 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole if (!resadmin && player != null) { if (!this.perms.hasResidencePermission(player, true)) { - plugin.msg(player, lm.General_NoPermission); + Residence.getInstance().msg(player, lm.General_NoPermission); return false; } if (parent != null) { if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { - plugin.msg(player, lm.Area_NotWithinParent); + Residence.getInstance().msg(player, lm.Area_NotWithinParent); return false; } if (!parent.getPermissions().hasResidencePermission(player, true) && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { - plugin.msg(player, lm.Residence_ParentNoPermission); + Residence.getInstance().msg(player, lm.Residence_ParentNoPermission); return false; } } - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (!group.canCreateResidences() && !ResPerm.resize.hasPermission(player, true)) { return false; @@ -569,15 +573,15 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole if (oldarea.getSize() < newarea.getSize() && (!this.isSubzone() && !isSmallerThanMax(player, newarea, resadmin) || this.isSubzone() && !isSmallerThanMaxSubzone(player, newarea, resadmin))) { - plugin.msg(player, lm.Area_SizeLimit); + Residence.getInstance().msg(player, lm.Area_SizeLimit); return false; } if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { - plugin.msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); + Residence.getInstance().msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); return false; } if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { - plugin.msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); + Residence.getInstance().msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); return false; } @@ -585,16 +589,16 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole return false; if (!resadmin) { - if (plugin.getWorldGuard() != null && plugin.getWorldGuardUtil().isSelectionInArea(player)) + if (Residence.getInstance().getWorldGuard() != null && Residence.getInstance().getWorldGuardUtil().isSelectionInArea(player)) return false; - if (plugin.getKingdomsManager() != null && plugin.getKingdomsUtil().isSelectionInArea(player)) + if (Residence.getInstance().getKingdomsManager() != null && Residence.getInstance().getKingdomsUtil().isSelectionInArea(player)) return false; } - if (parent == null && plugin.getConfigManager().enableEconomy() && !resadmin) { + if (parent == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { double chargeamount = newarea.getCost(group) - oldarea.getCost(group); if (chargeamount > 0) { - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + if (!Residence.getInstance().getTransactionManager().chargeEconomyMoney(player, chargeamount)) { return false; } } @@ -602,25 +606,25 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } ResidenceSizeChangeEvent resevent = new ResidenceSizeChangeEvent(player, this, oldarea, newarea); - plugin.getServ().getPluginManager().callEvent(resevent); + Residence.getInstance().getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return false; if ((!resadmin) && (player != null)) { int chargeamount = (int) Math .ceil((newarea.getSize() - oldarea.getSize()) * getBlockSellPrice().doubleValue()); - if ((chargeamount < 0) && (this.plugin.getConfigManager().useResMoneyBack())) { + if ((chargeamount < 0) && (Residence.getInstance().getConfigManager().useResMoneyBack())) { if (!this.isServerLand()) - this.plugin.getTransactionManager().giveEconomyMoney(player, -chargeamount); + Residence.getInstance().getTransactionManager().giveEconomyMoney(player, -chargeamount); } } - plugin.getResidenceManager().removeChunkList(this.getName()); + Residence.getInstance().getResidenceManager().removeChunkList(this.getName()); areas.remove(name); areas.put(name, newarea); - plugin.getResidenceManager().calculateChunks(this.getName()); + Residence.getInstance().getResidenceManager().calculateChunks(this.getName()); if (player != null) - plugin.msg(player, lm.Area_Update); + Residence.getInstance().msg(player, lm.Area_Update); return true; } @@ -630,7 +634,7 @@ public boolean addSubzone(String name, Location loc1, Location loc2) { public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { if (player == null) { - return this.addSubzone(null, plugin.getServerLandName(), loc1, loc2, name, resadmin); + return this.addSubzone(null, Residence.getInstance().getServerLandName(), loc1, loc2, name, resadmin); } return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); } @@ -650,15 +654,15 @@ public boolean addSubzone(Player player, String name, boolean resadmin) { public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, boolean resadmin) { - if (!plugin.validName(name)) { + if (!Residence.getInstance().validName(name)) { if (player != null) { - plugin.msg(player, lm.Invalid_NameCharacters); + Residence.getInstance().msg(player, lm.Invalid_NameCharacters); } return false; } if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { if (player != null) { - plugin.msg(player, lm.Subzone_SelectInside); + Residence.getInstance().msg(player, lm.Subzone_SelectInside); } return false; } @@ -668,7 +672,7 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l if (subzones.containsKey(name)) { if (player != null) { - plugin.msg(player, lm.Subzone_Exists, NName); + Residence.getInstance().msg(player, lm.Subzone_Exists, NName); } return false; } @@ -676,18 +680,18 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l if (!this.perms.hasResidencePermission(player, true)) { if (!this.perms.playerHas(player.getName(), Flags.subzone, this.perms.playerHas(player, Flags.admin, false))) { - plugin.msg(player, lm.General_NoPermission); + Residence.getInstance().msg(player, lm.General_NoPermission); return false; } } - if (this.getSubzoneList().length >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { - plugin.msg(player, lm.Subzone_MaxAmount); + if (this.getSubzoneList().length >= Residence.getInstance().getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { + Residence.getInstance().msg(player, lm.Subzone_MaxAmount); return false; } - if (this.getZoneDepth() >= plugin.getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { - plugin.msg(player, lm.Subzone_MaxDepth); + if (this.getZoneDepth() >= Residence.getInstance().getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { + Residence.getInstance().msg(player, lm.Subzone_MaxDepth); return false; } } @@ -699,33 +703,33 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l ClaimedResidence res = resEntry.getValue(); if (res.checkCollision(newArea)) { if (player != null) { - plugin.msg(player, lm.Subzone_Collide, resEntry.getKey()); + Residence.getInstance().msg(player, lm.Subzone_Collide, resEntry.getKey()); Visualizer v = new Visualizer(player); v.setAreas(newArea); v.setErrorAreas(res); - plugin.getSelectionManager().showBounds(player, v); + Residence.getInstance().getSelectionManager().showBounds(player, v); } return false; } } ClaimedResidence newres; if (player != null) { - newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); + newres = new ClaimedResidence(owner, perms.getWorldName(), this); newres.addArea(player, newArea, NName, resadmin); } else { - newres = new ClaimedResidence(owner, perms.getWorld(), this, plugin); + newres = new ClaimedResidence(owner, perms.getWorldName(), this); newres.addArea(newArea, NName); } if (newres.getAreaCount() != 0) { newres.getPermissions().applyDefaultFlags(); if (player != null) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); newres.setEnterMessage(group.getDefaultEnterMessage()); newres.setLeaveMessage(group.getDefaultLeaveMessage()); } - if (plugin.getConfigManager().flagsInherit()) { + if (Residence.getInstance().getConfigManager().flagsInherit()) { newres.getPermissions().setParent(perms); } @@ -734,19 +738,19 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l newres.setCreateTime(); ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, NName, newres, newArea); - plugin.getServ().getPluginManager().callEvent(resevent); + Residence.getInstance().getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return false; subzones.put(name, newres); if (player != null) { - plugin.msg(player, lm.Area_Create, NName); - plugin.msg(player, lm.Subzone_Create, NName); + Residence.getInstance().msg(player, lm.Area_Create, NName); + Residence.getInstance().msg(player, lm.Subzone_Create, NName); } return true; } if (player != null) { - plugin.msg(player, lm.Subzone_CreateFail, NName); + Residence.getInstance().msg(player, lm.Subzone_CreateFail, NName); } return false; } @@ -864,12 +868,12 @@ public boolean removeSubzone(Player player, String name, boolean resadmin) { name = name.toLowerCase(); ClaimedResidence res = subzones.get(name); if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); + Residence.getInstance().msg(player, lm.General_NoPermission); return false; } subzones.remove(name); if (player != null) { - plugin.msg(player, lm.Subzone_Remove, name); + Residence.getInstance().msg(player, lm.Subzone_Remove, name); } return true; } @@ -877,7 +881,7 @@ public boolean removeSubzone(Player player, String name, boolean resadmin) { public long getTotalSize() { Collection set = areas.values(); long size = 0; - if (!plugin.getConfigManager().isNoCostForYBlocks()) + if (!Residence.getInstance().getConfigManager().isNoCostForYBlocks()) for (CuboidArea entry : set) { size += entry.getSize(); } @@ -948,14 +952,14 @@ public void setEnterLeaveMessage(CommandSender sender, String message, boolean e } if (sender instanceof Player) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer((Player) sender); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer((Player) sender); PermissionGroup group = rPlayer.getGroup(); if (!group.canSetEnterLeaveMessages() && !resadmin) { - plugin.msg(sender, lm.Residence_OwnerNoPermission); + Residence.getInstance().msg(sender, lm.Residence_OwnerNoPermission); return; } if (!perms.hasResidencePermission(sender, false) && !resadmin) { - plugin.msg(sender, lm.General_NoPermission); + Residence.getInstance().msg(sender, lm.General_NoPermission); return; } } @@ -964,10 +968,12 @@ public void setEnterLeaveMessage(CommandSender sender, String message, boolean e } else { this.setLeaveMessage(message); } - plugin.msg(sender, lm.Residence_MessageChange); + Residence.getInstance().msg(sender, lm.Residence_MessageChange); } public Location getMiddleFreeLoc(Location insideLoc, Player player) { + if (insideLoc == null) + return null; CuboidArea area = this.getAreaByLoc(insideLoc); if (area == null) { return insideLoc; @@ -1089,7 +1095,7 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER) continue; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(loc); if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) && !admin) continue; @@ -1097,15 +1103,15 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { loc.add(0.5, 0.1, 0.5); // Incase empty space is on oposite side - if (plugin.getResidenceManager().getByLoc(loc) == this) { + if (Residence.getInstance().getResidenceManager().getByLoc(loc) == this) { loc.add(-1, 0, -1); } break; } - if (!found && plugin.getConfigManager().getKickLocation() != null) - return plugin.getConfigManager().getKickLocation(); + if (!found && Residence.getInstance().getConfigManager().getKickLocation() != null) + return Residence.getInstance().getConfigManager().getKickLocation(); if (player != null) { loc.setPitch(player.getLocation().getPitch()); loc.setYaw(player.getLocation().getYaw()); @@ -1115,11 +1121,9 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { public CuboidArea getMainArea() { CuboidArea area = areas.get(this.isSubzone() ? this.getResidenceName() : "main"); - if (area == null && !areas.isEmpty()) - for (Entry one : areas.entrySet()) { - area = one.getValue(); - break; - } + if (area == null && !areas.isEmpty()) { + return areas.entrySet().iterator().next().getValue(); + } return area; } @@ -1165,26 +1169,26 @@ public void printSubzoneList(CommandSender sender, int page) { PageInfo pi = new PageInfo(6, subzones.size(), page); if (!pi.isPageOk()) { - sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); + sender.sendMessage(ChatColor.RED + Residence.getInstance().msg(lm.Invalid_Page)); return; } - plugin.msg(sender, lm.InformationPage_TopSingle, plugin.msg(lm.General_Subzones)); - plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), + Residence.getInstance().msg(sender, lm.InformationPage_TopSingle, Residence.getInstance().msg(lm.General_Subzones)); + Residence.getInstance().msg(sender, lm.InformationPage_Page, Residence.getInstance().msg(lm.General_GenericPages, String.format("%d", page), pi.getTotalPages(), pi.getTotalEntries())); RawMessage rm = new RawMessage(); for (int i = pi.getStart(); i <= pi.getEnd(); i++) { ClaimedResidence res = getSubzones().get(i); if (res == null) continue; - rm.addText(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " + plugin.msg(lm.General_Owner, res.getOwner())) + rm.addText(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " + Residence.getInstance().msg(lm.General_Owner, res.getOwner())) .addHover("Teleport to " + res.getName()) .addCommand("res tp " + res.getName()); rm.show(sender); rm.clear(); } - plugin.getInfoPageManager().ShowPagination(sender, pi, "res sublist " + this.getName()); + Residence.getInstance().getInfoPageManager().ShowPagination(sender, pi, "res sublist " + this.getName()); } public void printAreaList(Player player, int page) { @@ -1192,8 +1196,8 @@ public void printAreaList(Player player, int page) { for (String area : areas.keySet()) { temp.add(area); } - plugin.getInfoPageManager().printInfo(player, "res area list " + this.getName(), - plugin.msg(lm.General_PhysicalAreas), temp, page); + Residence.getInstance().getInfoPageManager().printInfo(player, "res area list " + this.getName(), + Residence.getInstance().msg(lm.General_PhysicalAreas), temp, page); } public void printAdvancedAreaList(Player player, int page) { @@ -1203,12 +1207,12 @@ public void printAdvancedAreaList(Player player, int page) { Location h = a.getHighLoc(); Location l = a.getLowLoc(); if (this.getPermissions().has(Flags.coords, FlagCombo.OnlyFalse)) - temp.add(plugin.msg(lm.Area_ListAll, entry.getKey(), 0, 0, 0, 0, 0, 0, a.getSize())); + temp.add(Residence.getInstance().msg(lm.Area_ListAll, entry.getKey(), 0, 0, 0, 0, 0, 0, a.getSize())); else - temp.add(plugin.msg(lm.Area_ListAll, entry.getKey(), h.getBlockX(), h.getBlockY(), h.getBlockZ(), l.getBlockX(), l.getBlockY(), l.getBlockZ(), a.getSize())); + temp.add(Residence.getInstance().msg(lm.Area_ListAll, entry.getKey(), h.getBlockX(), h.getBlockY(), h.getBlockZ(), l.getBlockX(), l.getBlockY(), l.getBlockZ(), a.getSize())); } - plugin.getInfoPageManager().printInfo(player, "res area listall " + this.getName(), - plugin.msg(lm.General_PhysicalAreas), temp, page); + Residence.getInstance().getInfoPageManager().printInfo(player, "res area listall " + this.getName(), + Residence.getInstance().msg(lm.General_PhysicalAreas), temp, page); } public String[] getAreaList() { @@ -1243,22 +1247,35 @@ public Location getTeleportLocation(Player player) { Location high = this.getMainArea().getHighLoc(); Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); - tpLoc = this.getMiddleFreeLoc(t, player); + tpLoc = this.getMiddleFreeLoc(t, player).toVector(); + } + + if (tpLoc != null) { + Location loc = tpLoc.toLocation(this.getMainArea().getLowLoc().getWorld()); + if (PitchYaw != null) { + loc.setPitch((float) PitchYaw.getX()); + loc.setYaw((float) PitchYaw.getY()); + } + return loc; } - return tpLoc; + + return null; } public void setTpLoc(Player player, boolean resadmin) { if (!this.perms.hasResidencePermission(player, false) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); + Residence.getInstance().msg(player, lm.General_NoPermission); return; } if (!this.containsLoc(player.getLocation())) { - plugin.msg(player, lm.Residence_NotIn); + Residence.getInstance().msg(player, lm.Residence_NotIn); return; } - tpLoc = player.getLocation(); - plugin.msg(player, lm.Residence_SetTeleportLocation); + + world = player.getWorld(); + tpLoc = player.getLocation().toVector(); + PitchYaw = new Vector(player.getLocation().getPitch(), player.getLocation().getYaw(), 0); + Residence.getInstance().msg(player, lm.Residence_SetTeleportLocation); } public int isSafeTp(Player player) { @@ -1268,13 +1285,13 @@ public int isSafeTp(Player player) { if (player.getGameMode() == GameMode.CREATIVE) return 0; - if (plugin.getNms().isSpectator(player.getGameMode())) + if (Residence.getInstance().getNms().isSpectator(player.getGameMode())) return 0; if (tpLoc == null) return 0; - Location tempLoc = new Location(tpLoc.getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()); + Location tempLoc = this.getTeleportLocation(player).clone(); int fallDistance = 0; for (int i = (int) tempLoc.getY(); i >= 0; i--) { @@ -1300,79 +1317,82 @@ public int isSafeTp(Player player) { public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { - boolean isAdmin = plugin.isResAdminOn(reqPlayer); + boolean isAdmin = Residence.getInstance().isResAdminOn(reqPlayer); if (this.getRaid().isRaidInitialized()) { if (this.getRaid().isAttacker(targetPlayer) || this.getRaid().isDefender(targetPlayer) && !ConfigManager.RaidDefenderTeleport || !resadmin) { - plugin.msg(reqPlayer, lm.Raid_cantDo); + Residence.getInstance().msg(reqPlayer, lm.Raid_cantDo); return; } } else { if (!resadmin && !isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer, 10000L) && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(reqPlayer); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(reqPlayer); PermissionGroup group = rPlayer.getGroup(); if (!group.hasTpAccess()) { - plugin.msg(reqPlayer, lm.General_TeleportDeny); + Residence.getInstance().msg(reqPlayer, lm.General_TeleportDeny); return; } if (!reqPlayer.equals(targetPlayer)) { - plugin.msg(reqPlayer, lm.General_NoPermission); + Residence.getInstance().msg(reqPlayer, lm.General_NoPermission); return; } if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { - plugin.msg(reqPlayer, lm.Residence_TeleportNoFlag); + Residence.getInstance().msg(reqPlayer, lm.Residence_TeleportNoFlag); return; } if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { - plugin.msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); + Residence.getInstance().msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); return; } } } - ClaimedResidence old = plugin.getTeleportMap().get(targetPlayer.getName()); + ClaimedResidence old = Residence.getInstance().getTeleportMap().get(targetPlayer.getName()); + + if (Bukkit.getWorld(this.getPermissions().getWorldName()) == null) + return; if (old == null || !old.equals(this)) { int distance = isSafeTp(reqPlayer); if (distance > 6) { if (distance == 256) - plugin.msg(reqPlayer, lm.General_TeleportConfirmLava, distance); + Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirmLava, distance); else if (distance == 255) - plugin.msg(reqPlayer, lm.General_TeleportConfirmVoid, distance); + Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirmVoid, distance); else - plugin.msg(reqPlayer, lm.General_TeleportConfirm, distance); - plugin.getTeleportMap().put(reqPlayer.getName(), this); + Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirm, distance); + Residence.getInstance().getTeleportMap().put(reqPlayer.getName(), this); return; } } boolean bypassDelay = ResPerm.tpdelaybypass.hasPermission(targetPlayer); - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin && !bypassDelay) { - plugin.msg(reqPlayer, lm.General_TeleportStarted, this.getName(), - plugin.getConfigManager().getTeleportDelay()); - if (plugin.getConfigManager().isTeleportTitleMessage()) - TpTimer(reqPlayer, plugin.getConfigManager().getTeleportDelay()); - plugin.getTeleportDelayMap().add(reqPlayer.getName()); + if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin && !bypassDelay) { + Residence.getInstance().msg(reqPlayer, lm.General_TeleportStarted, this.getName(), + Residence.getInstance().getConfigManager().getTeleportDelay()); + if (Residence.getInstance().getConfigManager().isTeleportTitleMessage()) + TpTimer(reqPlayer, Residence.getInstance().getConfigManager().getTeleportDelay()); + Residence.getInstance().getTeleportDelayMap().add(reqPlayer.getName()); } Location loc = this.getTeleportLocation(targetPlayer); - if (plugin.getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) + if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) performDelaydTp(loc, targetPlayer, reqPlayer, true); else performInstantTp(loc, targetPlayer, reqPlayer, true); } public void TpTimer(final Player player, final int t) { - TitleMessageManager.send(player, plugin.msg(lm.General_TeleportTitle), - plugin.msg(lm.General_TeleportTitleTime, t)); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + TitleMessageManager.send(player, Residence.getInstance().msg(lm.General_TeleportTitle), + Residence.getInstance().msg(lm.General_TeleportTitleTime, t)); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { @Override public void run() { - if (!plugin.getTeleportDelayMap().contains(player.getName())) + if (!Residence.getInstance().getTeleportDelayMap().contains(player.getName())) return; if (t > 1) TpTimer(player, t - 1); @@ -1383,44 +1403,44 @@ public void run() { public void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - plugin.getServ().getPluginManager().callEvent(tpevent); + Residence.getInstance().getServ().getPluginManager().callEvent(tpevent); if (tpevent.isCancelled()) return; - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { @Override public void run() { if (targloc == null || targetPlayer == null || !targetPlayer.isOnline()) return; - if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) - && plugin.getConfigManager().getTeleportDelay() > 0) + if (!Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName()) + && Residence.getInstance().getConfigManager().getTeleportDelay() > 0) return; - else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) - plugin.getTeleportDelayMap().remove(targetPlayer.getName()); + else if (Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName())) + Residence.getInstance().getTeleportDelayMap().remove(targetPlayer.getName()); targetPlayer.closeInventory(); targetPlayer.teleport(targloc); if (near) - plugin.msg(targetPlayer, lm.Residence_TeleportNear); + Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); else - plugin.msg(targetPlayer, lm.General_TeleportSuccess); + Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); return; } - }, plugin.getConfigManager().getTeleportDelay() * 20L); + }, Residence.getInstance().getConfigManager().getTeleportDelay() * 20L); } private void performInstantTp(final Location targloc, final Player targetPlayer, Player reqPlayer, final boolean near) { ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - plugin.getServ().getPluginManager().callEvent(tpevent); + Residence.getInstance().getServ().getPluginManager().callEvent(tpevent); if (!tpevent.isCancelled()) { targetPlayer.closeInventory(); boolean teleported = targetPlayer.teleport(targloc); if (teleported) { if (near) - plugin.msg(targetPlayer, lm.Residence_TeleportNear); + Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); else - plugin.msg(targetPlayer, lm.General_TeleportSuccess); + Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); } } } @@ -1442,34 +1462,34 @@ public CuboidArea getCuboidAreabyName(String name) { } public void removeArea(String id) { - plugin.getResidenceManager().removeChunkList(this.getName()); + Residence.getInstance().getResidenceManager().removeChunkList(this.getName()); areas.remove(id); - plugin.getResidenceManager().calculateChunks(this.getName()); + Residence.getInstance().getResidenceManager().calculateChunks(this.getName()); } public void removeArea(Player player, String id, boolean resadmin) { if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { if (!areas.containsKey(id)) { - plugin.msg(player, lm.Area_NonExist); + Residence.getInstance().msg(player, lm.Area_NonExist); return; } - if (areas.size() == 1 && !plugin.getConfigManager().allowEmptyResidences()) { - plugin.msg(player, lm.Area_RemoveLast); + if (areas.size() == 1 && !Residence.getInstance().getConfigManager().allowEmptyResidences()) { + Residence.getInstance().msg(player, lm.Area_RemoveLast); return; } ResidenceAreaDeleteEvent resevent = new ResidenceAreaDeleteEvent(player, this, player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - plugin.getServ().getPluginManager().callEvent(resevent); + Residence.getInstance().getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return; removeArea(id); if (player != null) - plugin.msg(player, lm.Area_Remove); + Residence.getInstance().msg(player, lm.Area_Remove); } else { if (player != null) - plugin.msg(player, lm.General_NoPermission); + Residence.getInstance().msg(player, lm.General_NoPermission); } } @@ -1497,9 +1517,9 @@ public Map save() { // root.put("Town", this.getTown().getTownName()); // } - if (plugin.getConfigManager().isNewSaveMechanic()) { + if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { if (enterMessage != null && leaveMessage != null) { - MinimizeMessages min = plugin.getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, + MinimizeMessages min = Residence.getInstance().getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, leaveMessage); if (min == null) { if (enterMessage != null) @@ -1521,7 +1541,7 @@ public Map save() { // root.put("EnterMessage", enterMessage); // // if (leaveMessage != null) { -// ResidenceManager mng = plugin.getResidenceManager(); +// ResidenceManager mng = Residence.getInstance().getResidenceManager(); // Integer id = mng.addLeaveMessageToTempCache(leaveMessage); // root.put("LeaveMessage", id); // } @@ -1535,7 +1555,7 @@ public Map save() { if (!ChatPrefix.equals("")) root.put("ChatPrefix", ChatPrefix); - if (!ChannelColor.getCleanName().equals(plugin.getConfigManager().getChatColor().getName()) + if (!ChannelColor.getCleanName().equals(Residence.getInstance().getConfigManager().getChatColor().getName()) && !ChannelColor.getName().equals("WHITE")) { root.put("ChannelColor", ChannelColor.getName()); } @@ -1547,7 +1567,7 @@ public Map save() { if (!map.isEmpty()) root.put("IgnoreList", map); - if (plugin.getConfigManager().isNewSaveMechanic()) { + if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { for (Entry entry : areas.entrySet()) { areamap.put(entry.getKey(), entry.getValue().newSave()); } @@ -1572,18 +1592,18 @@ public Map save() { root.put("cmdWhiteList", this.cmdWhiteList); if (tpLoc != null) { - if (plugin.getConfigManager().isNewSaveMechanic()) { + if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { root.put("TPLoc", convertDouble(tpLoc.getX()) + ":" + convertDouble(tpLoc.getY()) + ":" - + convertDouble(tpLoc.getZ()) + ":" + convertDouble(tpLoc.getPitch()) + ":" - + convertDouble(tpLoc.getYaw())); + + convertDouble(tpLoc.getZ()) + ":" + convertDouble(PitchYaw == null ? 0 : PitchYaw.getX()) + ":" + + convertDouble(PitchYaw == null ? 0 : PitchYaw.getY())); } else { Map tpmap = new HashMap(); tpmap.put("X", convertDouble(this.tpLoc.getX())); tpmap.put("Y", convertDouble(this.tpLoc.getY())); tpmap.put("Z", convertDouble(this.tpLoc.getZ())); - tpmap.put("Pitch", convertDouble(this.tpLoc.getPitch())); - tpmap.put("Yaw", convertDouble(this.tpLoc.getYaw())); + tpmap.put("Pitch", convertDouble(PitchYaw == null ? 0 : this.PitchYaw.getX())); + tpmap.put("Yaw", convertDouble(PitchYaw == null ? 0 : this.PitchYaw.getY())); root.put("TPLoc", tpmap); } } @@ -1612,7 +1632,7 @@ private static double convertDouble(String dString) { @SuppressWarnings("unchecked") public static ClaimedResidence load(String worldName, Map root, ClaimedResidence parent, Residence plugin) throws Exception { - ClaimedResidence res = new ClaimedResidence(plugin); + ClaimedResidence res = new ClaimedResidence(); if (root == null) throw new Exception("Null residence!"); @@ -1656,17 +1676,17 @@ public static ClaimedResidence load(String worldName, Map root, // if (root.containsKey("TownCap")) { // String townName = (String) root.get("TownCap"); -// Town t = plugin.getTownManager().getTown(townName); +// Town t = Residence.getInstance().getTownManager().getTown(townName); // if (t == null) -// t = plugin.getTownManager().addTown(townName, res); +// t = Residence.getInstance().getTownManager().addTown(townName, res); // else // t.setMainResidence(res); // res.setTown(t); // } else if (root.containsKey("Town")) { // String townName = (String) root.get("Town"); -// Town t = plugin.getTownManager().getTown(townName); +// Town t = Residence.getInstance().getTownManager().getTown(townName); // if (t == null) -// t = plugin.getTownManager().addTown(townName); +// t = Residence.getInstance().getTownManager().addTown(townName); // res.setTown(t); // } @@ -1679,16 +1699,18 @@ public static ClaimedResidence load(String worldName, Map root, res.BlockSellPrice = 0D; } - World world = plugin.getServ().getWorld(res.perms.getWorld()); - if (world == null) + World world = Residence.getInstance().getServ().getWorld(res.perms.getWorld()); + + if (world == null && !Residence.getInstance().getConfigManager().isLoadEveryWorld()) throw new Exception("Cant Find World: " + res.perms.getWorld()); + for (Entry map : areamap.entrySet()) { if (map.getValue() instanceof String) { // loading new same format - res.areas.put(map.getKey(), CuboidArea.newLoad((String) map.getValue(), world)); + res.areas.put(map.getKey(), CuboidArea.newLoad((String) map.getValue(), res.perms.getWorld())); } else { // loading old format - res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), world)); + res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), res.perms.getWorld())); } } @@ -1704,13 +1726,13 @@ public static ClaimedResidence load(String worldName, Map root, if (subres.getResidenceName() == null) subres.setName(map.getKey()); - if (plugin.getConfigManager().flagsInherit()) + if (Residence.getInstance().getConfigManager().flagsInherit()) subres.getPermissions().setParent(res.getPermissions()); // Adding subzone owner into hies res list if parent zone owner is not same // person if (subres.getParent() != null && !subres.getOwnerUUID().equals(subres.getParent().getOwnerUUID())) - plugin.getPlayerManager().addResidence(subres.getOwner(), subres); + Residence.getInstance().getPlayerManager().addResidence(subres.getOwner(), subres); res.subzones.put(map.getKey().toLowerCase(), subres); } @@ -1722,9 +1744,9 @@ public static ClaimedResidence load(String worldName, Map root, res.leaveMessage = (String) root.get("LeaveMessage"); if (root.containsKey("Messages") && root.get("Messages") instanceof Integer) { - res.enterMessage = plugin.getResidenceManager().getChacheMessageEnter(worldName, + res.enterMessage = Residence.getInstance().getResidenceManager().getChacheMessageEnter(worldName, (Integer) root.get("Messages")); - res.leaveMessage = plugin.getResidenceManager().getChacheMessageLeave(worldName, + res.leaveMessage = Residence.getInstance().getResidenceManager().getChacheMessageLeave(worldName, (Integer) root.get("Messages")); } @@ -1742,13 +1764,12 @@ public static ClaimedResidence load(String worldName, Map root, yaw = convertDouble(split[4]); if (split.length > 3) pitch = convertDouble(split[3]); - res.tpLoc = new Location(world, convertDouble(split[0]), convertDouble(split[1]), - convertDouble(split[2])); + + res.tpLoc = new Vector(convertDouble(split[0]), convertDouble(split[1]), convertDouble(split[2])); } catch (Exception e) { } - res.tpLoc.setPitch((float) pitch); - res.tpLoc.setYaw((float) yaw); + res.PitchYaw = new Vector((float) pitch, (float) yaw, 0); } else { Map tploc = (Map) root.get("TPLoc"); @@ -1762,10 +1783,8 @@ public static ClaimedResidence load(String worldName, Map root, if (tploc.containsKey("Pitch")) pitch = convertDouble(tploc.get("Pitch").toString()); - res.tpLoc = new Location(world, convertDouble(tploc.get("X").toString()), - convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z").toString())); - res.tpLoc.setPitch((float) pitch); - res.tpLoc.setYaw((float) yaw); + res.tpLoc = new Vector(convertDouble(tploc.get("X").toString()), convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z").toString())); + res.PitchYaw = new Vector((float) pitch, (float) yaw, 0); } } @@ -1780,7 +1799,7 @@ public static ClaimedResidence load(String worldName, Map root, if (root.containsKey("ChannelColor")) res.ChannelColor = CMIChatColor.getColor((String) root.get("ChannelColor")); else { - res.ChannelColor = plugin.getConfigManager().getChatColor(); + res.ChannelColor = Residence.getInstance().getConfigManager().getChatColor(); } return res; @@ -1795,8 +1814,8 @@ public boolean renameSubzone(String oldName, String newName) { } public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { - if (!plugin.validName(newName)) { - plugin.msg(player, lm.Invalid_NameCharacters); + if (!Residence.getInstance().validName(newName)) { + Residence.getInstance().msg(player, lm.Invalid_NameCharacters); return false; } if (oldName == null) @@ -1810,23 +1829,23 @@ public boolean renameSubzone(Player player, String oldName, String newName, bool ClaimedResidence res = subzones.get(oldName); if (res == null) { if (player != null) - plugin.msg(player, lm.Invalid_Subzone); + Residence.getInstance().msg(player, lm.Invalid_Subzone); return false; } if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); + Residence.getInstance().msg(player, lm.General_NoPermission); return false; } if (subzones.containsKey(newName)) { if (player != null) - plugin.msg(player, lm.Subzone_Exists, newName); + Residence.getInstance().msg(player, lm.Subzone_Exists, newName); return false; } res.setName(newN); subzones.put(newName, res); subzones.remove(oldName); if (player != null) - plugin.msg(player, lm.Subzone_Rename, oldName, newName); + Residence.getInstance().msg(player, lm.Subzone_Rename, oldName, newName); return true; } @@ -1835,35 +1854,35 @@ public boolean renameArea(String oldName, String newName) { } public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { - if (!plugin.validName(newName)) { - plugin.msg(player, lm.Invalid_NameCharacters); + if (!Residence.getInstance().validName(newName)) { + Residence.getInstance().msg(player, lm.Invalid_NameCharacters); return false; } if (this.getRaid().isRaidInitialized() && !resadmin) { - plugin.msg(player, lm.Raid_cantDo); + Residence.getInstance().msg(player, lm.Raid_cantDo); return false; } if (player == null || perms.hasResidencePermission(player, true) || resadmin) { if (areas.containsKey(newName)) { if (player != null) - plugin.msg(player, lm.Area_Exists); + Residence.getInstance().msg(player, lm.Area_Exists); return false; } CuboidArea area = areas.get(oldName); if (area == null) { if (player != null) - plugin.msg(player, lm.Area_InvalidName); + Residence.getInstance().msg(player, lm.Area_InvalidName); return false; } areas.put(newName, area); areas.remove(oldName); if (player != null) - plugin.msg(player, lm.Area_Rename, oldName, newName); + Residence.getInstance().msg(player, lm.Area_Rename, oldName, newName); return true; } - plugin.msg(player, lm.General_NoPermission); + Residence.getInstance().msg(player, lm.General_NoPermission); return false; } @@ -1881,25 +1900,31 @@ public String getName() { } public void remove() { - plugin.getResidenceManager().removeResidence(this); - plugin.getResidenceManager().removeChunkList(this.getName()); - plugin.getPlayerManager().removeResFromPlayer(this); + Residence.getInstance().getResidenceManager().removeResidence(this); + Residence.getInstance().getResidenceManager().removeChunkList(this.getName()); + Residence.getInstance().getPlayerManager().removeResFromPlayer(this); } public ResidenceBank getBank() { return bank; } + @Deprecated public String getWorld() { return perms.getWorld(); } + @Deprecated + public String getWorldName() { + return perms.getWorld(); + } + public ResidencePlayer getRPlayer() { - return plugin.getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); + return Residence.getInstance().getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); } public PermissionGroup getOwnerGroup() { - return getRPlayer().getGroup(getPermissions().getWorld()); + return getRPlayer().getGroup(getPermissions().getWorldName()); } public String getOwner() { @@ -1920,13 +1945,13 @@ public boolean isOwner(UUID uuid) { public boolean isOwner(Player p) { if (p == null) return false; - if (plugin.getConfigManager().isOfflineMode()) + if (Residence.getInstance().getConfigManager().isOfflineMode()) return perms.getOwner().equals(p.getName()); return perms.getOwnerUUID().equals(p.getUniqueId()); } public boolean isOwner(CommandSender sender) { - if (plugin.getConfigManager().isOfflineMode()) { + if (Residence.getInstance().getConfigManager().isOfflineMode()) { return perms.getOwner().equals(sender.getName()); } if (sender instanceof Player) { @@ -1948,7 +1973,7 @@ public void setChannelColor(CMIChatColor ChannelColor) { } public ChatChannel getChatChannel() { - return plugin.getChatManager().getChannel(this.getName()); + return Residence.getInstance().getChatManager().getChannel(this.getName()); } public CMIChatColor getChannelColor() { @@ -2086,6 +2111,6 @@ public void showBounds(Player player, boolean showOneTime) { Visualizer v = new Visualizer(player); v.setAreas(getAreaArray()); v.setOnce(showOneTime); - plugin.getSelectionManager().showBounds(player, v); + Residence.getInstance().getSelectionManager().showBounds(player, v); } } diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index c27c45ecd..95e65e6da 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -11,14 +11,17 @@ import java.util.List; import java.util.Map; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.World; +import org.bukkit.util.Vector; public class CuboidArea { - private Location highPoints; - private Location lowPoints; + private Vector highPoints; + private Vector lowPoints; protected String worldName; + protected World world; public CuboidArea(Location startLoc, Location endLoc) { int highx, highy, highz, lowx, lowy, lowz; @@ -43,23 +46,28 @@ public CuboidArea(Location startLoc, Location endLoc) { highz = endLoc.getBlockZ(); lowz = startLoc.getBlockZ(); } - highPoints = new Location(startLoc.getWorld(), highx, highy, highz); - lowPoints = new Location(startLoc.getWorld(), lowx, lowy, lowz); + highPoints = new Vector(highx, highy, highz); + lowPoints = new Vector(lowx, lowy, lowz); worldName = startLoc.getWorld().getName(); + world = startLoc.getWorld(); } public CuboidArea() { } public boolean isAreaWithinArea(CuboidArea area) { - return (this.containsLoc(area.highPoints) && this.containsLoc(area.lowPoints)); + return (this.containsLoc(area.highPoints, area.getWorldName()) && this.containsLoc(area.lowPoints, area.getWorldName())); } public boolean containsLoc(Location loc) { + return containsLoc(loc.toVector(), loc.getWorld().getName()); + } + + public boolean containsLoc(Vector loc, String world) { if (loc == null) return false; - if (!loc.getWorld().getName().equals(worldName)) + if (!world.equals(worldName)) return false; if (lowPoints.getBlockX() > loc.getBlockX()) @@ -87,13 +95,14 @@ public boolean checkCollision(CuboidArea area) { if (!area.getWorld().equals(this.getWorld())) { return false; } - if (area.containsLoc(lowPoints) || area.containsLoc(highPoints) || this.containsLoc(area.highPoints) || this.containsLoc(area.lowPoints)) { + if (area.containsLoc(lowPoints, getWorldName()) || area.containsLoc(highPoints, getWorldName()) || this.containsLoc(area.highPoints, getWorldName()) || this.containsLoc(area.lowPoints, + getWorldName())) { return true; } return advCuboidCheckCollision(highPoints, lowPoints, area.highPoints, area.lowPoints); } - private static boolean advCuboidCheckCollision(Location A1High, Location A1Low, Location A2High, Location A2Low) { + private static boolean advCuboidCheckCollision(Vector A1High, Vector A1Low, Vector A2High, Vector A2Low) { int A1HX = A1High.getBlockX(); int A1LX = A1Low.getBlockX(); int A1HY = A1High.getBlockY(); @@ -139,19 +148,23 @@ public int getZSize() { } public Location getHighLoc() { - return highPoints; + return highPoints.toLocation(getWorld()); } public Location getLowLoc() { - return lowPoints; + return lowPoints.toLocation(getWorld()); } public World getWorld() { - return highPoints.getWorld(); + return world; + } + + public String getWorldName() { + return world != null ? world.getName() : worldName; } public void save(DataOutputStream out) throws IOException { - out.writeUTF(highPoints.getWorld().getName()); + out.writeUTF(getWorldName()); out.writeInt(highPoints.getBlockX()); out.writeInt(highPoints.getBlockY()); out.writeInt(highPoints.getBlockZ()); @@ -163,16 +176,16 @@ public void save(DataOutputStream out) throws IOException { public CuboidArea load(DataInputStream in) throws IOException { CuboidArea newArea = new CuboidArea(); Server server = Residence.getInstance().getServ(); - World world = server.getWorld(in.readUTF()); int highx = in.readInt(); int highy = in.readInt(); int highz = in.readInt(); int lowx = in.readInt(); int lowy = in.readInt(); int lowz = in.readInt(); - newArea.highPoints = new Location(world, highx, highy, highz); - newArea.lowPoints = new Location(world, lowx, lowy, lowz); - newArea.worldName = world.getName(); + newArea.highPoints = new Vector(highx, highy, highz); + newArea.lowPoints = new Vector(lowx, lowy, lowz); + newArea.worldName = in.readUTF(); + newArea.world = Bukkit.getWorld(newArea.worldName); return newArea; } @@ -191,7 +204,7 @@ public String newSave() { return lowPoints.getBlockX() + ":" + lowPoints.getBlockY() + ":" + lowPoints.getBlockZ() + ":" + highPoints.getBlockX() + ":" + highPoints.getBlockY() + ":" + highPoints.getBlockZ(); } - public static CuboidArea newLoad(String root, World world) throws Exception { + public static CuboidArea newLoad(String root, String world) throws Exception { if (root == null || !root.contains(":")) { throw new Exception("Invalid residence physical location..."); } @@ -204,9 +217,10 @@ public static CuboidArea newLoad(String root, World world) throws Exception { int x2 = Integer.parseInt(split[3]); int y2 = Integer.parseInt(split[4]); int z2 = Integer.parseInt(split[5]); - newArea.lowPoints = new Location(world, x1, y1, z1); - newArea.highPoints = new Location(world, x2, y2, z2); - newArea.worldName = world.getName(); + newArea.lowPoints = new Vector(x1, y1, z1); + newArea.highPoints = new Vector(x2, y2, z2); + newArea.worldName = world; + newArea.world = Bukkit.getWorld(newArea.worldName); } catch (Exception e) { throw new Exception("Invalid residence physical location..."); } @@ -214,7 +228,7 @@ public static CuboidArea newLoad(String root, World world) throws Exception { return newArea; } - public static CuboidArea load(Map root, World world) throws Exception { + public static CuboidArea load(Map root, String world) throws Exception { if (root == null) { throw new Exception("Invalid residence physical location..."); } @@ -225,16 +239,17 @@ public static CuboidArea load(Map root, World world) throws Exce int x2 = (Integer) root.get("X2"); int y2 = (Integer) root.get("Y2"); int z2 = (Integer) root.get("Z2"); - newArea.highPoints = new Location(world, x1, y1, z1); - newArea.lowPoints = new Location(world, x2, y2, z2); - newArea.worldName = world.getName(); + newArea.highPoints = new Vector(x1, y1, z1); + newArea.lowPoints = new Vector(x2, y2, z2); + newArea.worldName = world; + newArea.world = Bukkit.getWorld(newArea.worldName); return newArea; } public List getChunks() { List chunks = new ArrayList<>(); - Location high = this.highPoints; - Location low = this.lowPoints; + Vector high = this.highPoints; + Vector low = this.lowPoints; int lowX = ChunkRef.getChunkCoord(low.getBlockX()); int lowZ = ChunkRef.getChunkCoord(low.getBlockZ()); int highX = ChunkRef.getChunkCoord(high.getBlockX()); @@ -249,11 +264,13 @@ public List getChunks() { } public void setHighLocation(Location highLocation) { - this.highPoints = highLocation; + this.highPoints = highLocation.toVector(); + this.world = highLocation.getWorld(); } public void setLowLocation(Location lowLocation) { - this.lowPoints = lowLocation; + this.lowPoints = lowLocation.toVector(); + this.world = lowLocation.getWorld(); } public double getCost(PermissionGroup group) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index c6fecc629..03de0c27e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1,8 +1,10 @@ package com.bekvon.bukkit.residence.protection; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; @@ -220,7 +222,7 @@ public boolean addResidence(Player player, String owner, String name, Location l } CuboidArea newArea = new CuboidArea(loc1, loc2); - ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName(), plugin); + ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName()); newRes.getPermissions().applyDefaultFlags(); newRes.setEnterMessage(group.getDefaultEnterMessage()); newRes.setLeaveMessage(group.getDefaultLeaveMessage()); @@ -852,10 +854,10 @@ public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, public Map save() { clearSaveChache(); Map worldmap = new LinkedHashMap<>(); - for (World world : plugin.getServ().getWorlds()) { + for (String worldName : getWorldNames()) { Map resmap = new LinkedHashMap<>(); for (Entry res : (new TreeMap(residences)).entrySet()) { - if (!res.getValue().getWorld().equals(world.getName())) + if (!res.getValue().getWorld().equals(worldName)) continue; try { @@ -866,7 +868,7 @@ public Map save() { } } - worldmap.put(world.getName(), resmap); + worldmap.put(worldName, resmap); } return worldmap; } @@ -983,22 +985,52 @@ public Map getChacheFlags(String world, int id) { return m.getFlags(); } + public Set getWorldNames() { + Set worldnames = new HashSet(); + File saveFolder = new File(plugin.dataFolder, "Save"); + try { + File worldFolder = new File(saveFolder, "Worlds"); + if (plugin.getConfigManager().isLoadEveryWorld()) { + for (File f : worldFolder.listFiles()) { + if (!f.isFile()) + continue; + String name = f.getName(); + if (!name.startsWith(Residence.saveFilePrefix)) + continue; + worldnames.add(name.substring(Residence.saveFilePrefix.length(), name.length() - 4)); + } + + } else { + plugin.getServ().getWorlds().forEach((w) -> { + worldnames.add(w.getName()); + }); + } + } catch (Exception ex) { + plugin.getServ().getWorlds().forEach((w) -> { + worldnames.add(w.getName()); + }); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + throw ex; + } + return worldnames; + } + public void load(Map root) throws Exception { if (root == null) return; residences.clear(); - for (World world : plugin.getServ().getWorlds()) { + for (String worldName : getWorldNames()) { long time = System.currentTimeMillis(); @SuppressWarnings("unchecked") - Map reslist = (Map) root.get(world.getName()); - if (!plugin.isDisabledWorld(world)) - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + world.getName() + " data into memory..."); + Map reslist = (Map) root.get(worldName); + if (!plugin.isDisabledWorld(worldName)) + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + worldName + " data into memory..."); if (reslist != null) { try { - chunkResidences.put(world.getName(), loadMap(world.getName(), reslist)); + chunkResidences.put(worldName, loadMap(worldName, reslist)); } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + "Error in loading save file for world: " + world.getName()); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + "Error in loading save file for world: " + worldName); if (plugin.getConfigManager().stopOnSaveError()) throw (ex); } @@ -1007,8 +1039,8 @@ public void load(Map root) throws Exception { long pass = System.currentTimeMillis() - time; String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - if (!plugin.isDisabledWorld(world)) - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + world.getName() + " data into memory. (" + PastTime + ") -> " + (reslist == null ? "0" : reslist.size()) + if (!plugin.isDisabledWorld(worldName)) + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + worldName + " data into memory. (" + PastTime + ") -> " + (reslist == null ? "0" : reslist.size()) + " residences"); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 98434a4e6..0cb2da08f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -642,9 +642,14 @@ public void setOwnerUUID(UUID ownerUUID) { this.ownerUUID = ownerUUID; } + @Deprecated public String getWorld() { return world; } + + public String getWorldName() { + return world; + } @Override public Map save(String world) { From 3be1ac2b25767827faf1b31f0a65906423be729a Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 5 Mar 2021 17:39:12 +0200 Subject: [PATCH 0835/1142] Increasing nearby residence range from 3 to 9 blocks Expanding auto command Y range to the max if we should ignore Y selection teleporting to residence with move false while having resdience.admin.move permission node is now working properly Small adjustments when checking player new position after teleportation --- .../bukkit/residence/commands/auto.java | 5 +++ .../bukkit/residence/commands/info.java | 18 +++++------ .../listeners/ResidencePlayerListener.java | 32 ++++--------------- 3 files changed, 20 insertions(+), 35 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 039d5e58b..73b851ffc 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -79,6 +79,11 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo int minY = loc.getBlockY() - rY; int maxY = loc.getBlockY() + rY; + if (plugin.getConfigManager().isSelectionIgnoreY()) { + minY = 0; + maxY = loc.getWorld().getMaxHeight(); + } + if (maxY - minY + 1 < y) maxY++; diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 9fc887ebe..2d7aa9b09 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -29,9 +29,9 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo Set nearby = new HashSet(); Location loc = player.getLocation(); - for (int x = -3; x <= 3; x = x + 3) { - for (int z = -3; z <= 3; z = z + 3) { - for (int y = -3; y <= 3; y = y + 3) { + for (int x = -9; x <= 9; x = x + 3) { + for (int z = -9; z <= 9; z = z + 3) { + for (int y = -9; y <= 9; y = y + 3) { if (x == 0 && z == 0 && y == 0) continue; Location l = loc.clone().add(x, y, z); @@ -50,15 +50,15 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.msg(sender, lm.Invalid_Residence); } - String list = ""; + StringBuilder list = new StringBuilder(); + if (!nearby.isEmpty()) { for (ClaimedResidence one : nearby) { - if (!list.isEmpty()) - list += ", "; - list += one.getName(); + if (!list.toString().isEmpty()) + list.append(", "); + list.append(one.getName()); } - - plugin.msg(sender, lm.Residence_Near, list); + plugin.msg(sender, lm.Residence_Near, list.toString()); } return true; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c932f479b..c36990a6c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -643,7 +643,7 @@ else if (white == 0) if (white != 0 && white >= black || black == 0) return; - Debug.D("cancel command"); + event.setCancelled(true); plugin.msg(player, lm.Residence_FlagDeny, Flags.command, res.getName()); @@ -1205,7 +1205,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (resadmin) return; - if (!heldItem.isNone() && heldItem.isValidItem() && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld().getName())) { + if (!heldItem.isNone() && heldItem.isValidItem() && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld() + .getName())) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; @@ -1716,9 +1717,8 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { return; Location loc = event.getTo(); - + handleNewLocation(player, loc, false); if (plugin.isResAdminOn(player)) { - handleNewLocation(player, loc, false); return; } @@ -1728,7 +1728,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) - && !ResPerm.bypass_tp.hasPermission(player, 10000L)) { + && !ResPerm.bypass_tp.hasPermission(player, 10000L) && !ResPerm.admin_move.hasPermission(player, 10000L)) { event.setCancelled(true); plugin.msg(player, lm.Residence_MoveDeny, res.getName()); return; @@ -1975,7 +1975,7 @@ else if (oldRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !newR } } - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerMove(PlayerMoveEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) @@ -2321,26 +2321,6 @@ public void run() { return true; } - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerTeleportEvent(PlayerTeleportEvent event) { - - Location from = event.getFrom(); - Location to = event.getTo(); - - ClaimedResidence fromRes = plugin.getResidenceManager().getByLoc(from); - ClaimedResidence toRes = plugin.getResidenceManager().getByLoc(to); - - if (fromRes != null && toRes != null && fromRes.equals(toRes)) - return; - if (event.getPlayer().hasMetadata("NPC")) - return; - - currentRes.put(event.getPlayer().getUniqueId(), toRes); - - ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(fromRes, toRes, event.getPlayer()); - plugin.getServ().getPluginManager().callEvent(chgEvent); - } - HashMap informar = new HashMap(); @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) From 7475939d0ed254297cb907a56e9f07b037453c35 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 5 Mar 2021 21:09:43 +0200 Subject: [PATCH 0836/1142] Fixing selection issue --- .../bukkit/residence/commands/auto.java | 32 ++-- .../bukkit/residence/commands/contract.java | 4 +- .../bukkit/residence/commands/expand.java | 4 +- .../bukkit/residence/commands/select.java | 4 +- .../residence/dynmap/DynMapManager.java | 4 +- .../listeners/ResidenceBlockListener.java | 20 +-- .../protection/ClaimedResidence.java | 44 +++--- .../residence/protection/CuboidArea.java | 12 +- .../protection/ResidenceManager.java | 12 +- .../residence/selection/AutoSelection.java | 5 +- .../residence/selection/KingdomsUtil.java | 4 +- .../selection/SchematicsManager.java | 6 +- .../residence/selection/SelectionManager.java | 141 +++++++++--------- .../selection/WorldEdit7SelectionManager.java | 4 +- .../selection/WorldEditSelectionManager.java | 2 +- .../residence/selection/WorldGuard7Util.java | 4 +- .../residence/selection/WorldGuardUtil.java | 4 +- .../residence/text/help/InformationPager.java | 12 +- src/plugin.yml | 2 +- 19 files changed, 165 insertions(+), 155 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 73b851ffc..83ad585b5 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -18,6 +18,7 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; public class auto implements cmd { @@ -79,11 +80,6 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo int minY = loc.getBlockY() - rY; int maxY = loc.getBlockY() + rY; - if (plugin.getConfigManager().isSelectionIgnoreY()) { - minY = 0; - maxY = loc.getWorld().getMaxHeight(); - } - if (maxY - minY + 1 < y) maxY++; @@ -106,6 +102,11 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (maxZ - minZ + 1 < z) maxZ++; + if (plugin.getConfigManager().isSelectionIgnoreY()) { + minY = plugin.getSelectionManager().getSelection(player).getMinYAllowed(); + maxY = plugin.getSelectionManager().getSelection(player).getMaxYAllowed(); + } + plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), minX, minY, minZ), false); plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), maxX, maxY, maxZ), false); @@ -172,11 +173,11 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo } CuboidArea c = new CuboidArea(); - c.setLowLocation(cuboid.getLowLoc().clone().add(-dir.getLow().getX(), -dir.getLow().getY(), -dir.getLow().getZ())); - c.setHighLocation(cuboid.getHighLoc().clone().add(dir.getHigh().getX(), dir.getHigh().getY(), dir.getHigh().getZ())); + c.setLowLocation(cuboid.getLowLocation().clone().add(-dir.getLow().getX(), -dir.getLow().getY(), -dir.getLow().getZ())); + c.setHighLocation(cuboid.getHighLocation().clone().add(dir.getHigh().getX(), dir.getHigh().getY(), dir.getHigh().getZ())); - if (c.getLowLoc().getY() < 0) { - c.getLowLoc().setY(0); + if (c.getLowVector().getY() < 0) { + c.getLowVector().setY(0); locked.add(dir); dir = dir.getNext(); if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) @@ -184,8 +185,8 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo continue; } - if (c.getHighLoc().getY() >= c.getWorld().getMaxHeight()) { - c.getHighLoc().setY(c.getWorld().getMaxHeight() - 1); + if (c.getHighVector().getY() >= c.getWorld().getMaxHeight()) { + c.getHighVector().setY(c.getWorld().getMaxHeight() - 1); locked.add(dir); dir = dir.getNext(); if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) @@ -231,14 +232,13 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo } } - cuboid.setLowLocation(c.getLowLoc()); - cuboid.setHighLocation(c.getHighLoc()); + cuboid.setLowLocation(c.getLowLocation()); + cuboid.setHighLocation(c.getHighLocation()); dir = dir.getNext(); } - - plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLoc()); - plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLoc()); + plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); + plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); } public enum direction { diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 28deac7ae..13c6622df 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -60,8 +60,8 @@ else if (args.length == 2) } if (area != null) { - plugin.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); - plugin.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); + plugin.getSelectionManager().placeLoc1(player, area.getHighLocation(), false); + plugin.getSelectionManager().placeLoc2(player, area.getLowLocation(), false); plugin.msg(player, lm.Select_Area, areaName, resName); } else { plugin.msg(player, lm.Area_NonExist); diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 6841bd7b6..b997bddd2 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -62,8 +62,8 @@ else if (args.length == 2) { } if (area != null) { - plugin.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); - plugin.getSelectionManager().placeLoc2(player, area.getLowLoc(), false); + plugin.getSelectionManager().placeLoc1(player, area.getHighLocation(), false); + plugin.getSelectionManager().placeLoc2(player, area.getLowLocation(), false); plugin.msg(player, lm.Select_Area, areaName, resName); } else { plugin.msg(player, lm.Area_NonExist); diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index df676c4d3..1c5d8aa22 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -178,8 +178,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo area = res.getArea(areaName); } if (area != null) { - plugin.getSelectionManager().placeLoc1(player, area.getHighLoc(), false); - plugin.getSelectionManager().placeLoc2(player, area.getLowLoc(), true); + plugin.getSelectionManager().placeLoc1(player, area.getHighLocation(), false); + plugin.getSelectionManager().placeLoc2(player, area.getLowLocation(), true); plugin.msg(player, lm.Select_Area, areaName, resName); } else { plugin.msg(player, lm.Area_NonExist); diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 07cb81d66..ace6ef074 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -229,8 +229,8 @@ private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { if (!isVisible(resid, res.getWorld())) return; - Location l0 = oneArea.getValue().getLowLoc(); - Location l1 = oneArea.getValue().getHighLoc(); + Location l0 = oneArea.getValue().getLowLocation(); + Location l1 = oneArea.getValue().getHighLocation(); // x[0] = l0.getX(); // z[0] = l0.getZ(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 539ec6aa3..abd1aaffe 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -539,19 +539,19 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo } CuboidArea c = new CuboidArea(); - c.setLowLocation(cuboid.getLowLoc().clone().add(-dir.getLow().getX(), -dir.getLow().getY(), -dir.getLow().getZ())); - c.setHighLocation(cuboid.getHighLoc().clone().add(dir.getHigh().getX(), dir.getHigh().getY(), dir.getHigh().getZ())); + c.setLowLocation(cuboid.getLowLocation().clone().add(-dir.getLow().getX(), -dir.getLow().getY(), -dir.getLow().getZ())); + c.setHighLocation(cuboid.getHighLocation().clone().add(dir.getHigh().getX(), dir.getHigh().getY(), dir.getHigh().getZ())); - if (c.getLowLoc().getY() < 0) { - c.getLowLoc().setY(0); + if (c.getLowVector().getY() < 0) { + c.getLowVector().setY(0); locked.add(dir); dir = dir.getNext(); skipped++; continue; } - if (c.getHighLoc().getY() >= c.getWorld().getMaxHeight()) { - c.getHighLoc().setY(c.getWorld().getMaxHeight() - 1); + if (c.getHighVector().getY() >= c.getWorld().getMaxHeight()) { + c.getHighVector().setY(c.getWorld().getMaxHeight() - 1); locked.add(dir); dir = dir.getNext(); skipped++; @@ -596,14 +596,14 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo } } - cuboid.setLowLocation(c.getLowLoc()); - cuboid.setHighLocation(c.getHighLoc()); + cuboid.setLowLocation(c.getLowLocation()); + cuboid.setHighLocation(c.getHighLocation()); dir = dir.getNext(); } - plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLoc()); - plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLoc()); + plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); + plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index b59b73e32..a73a5e5aa 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -405,7 +405,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa return false; } if (parent != null) { - if (!parent.containsLoc(area.getHighLoc()) || !parent.containsLoc(area.getLowLoc())) { + if (!parent.containsLoc(area.getHighLocation()) || !parent.containsLoc(area.getLowLocation())) { Residence.getInstance().msg(player, lm.Area_NotWithinParent); return false; } @@ -435,12 +435,12 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa return false; } - if (group.getMinHeight() > area.getLowLoc().getBlockY()) { + if (group.getMinHeight() > area.getLowVector().getBlockY()) { Residence.getInstance().msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); return false; } - if (group.getMaxHeight() < area.getHighLoc().getBlockY()) { + if (group.getMaxHeight() < area.getHighVector().getBlockY()) { Residence.getInstance().msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); return false; } @@ -554,7 +554,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole return false; } if (parent != null) { - if (!parent.containsLoc(newarea.getHighLoc()) || !parent.containsLoc(newarea.getLowLoc())) { + if (!parent.containsLoc(newarea.getHighLocation()) || !parent.containsLoc(newarea.getLowLocation())) { Residence.getInstance().msg(player, lm.Area_NotWithinParent); return false; } @@ -576,11 +576,11 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole Residence.getInstance().msg(player, lm.Area_SizeLimit); return false; } - if (group.getMinHeight() > newarea.getLowLoc().getBlockY()) { + if (group.getMinHeight() > newarea.getLowVector().getBlockY()) { Residence.getInstance().msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); return false; } - if (group.getMaxHeight() < newarea.getHighLoc().getBlockY()) { + if (group.getMaxHeight() < newarea.getHighVector().getBlockY()) { Residence.getInstance().msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); return false; } @@ -979,11 +979,11 @@ public Location getMiddleFreeLoc(Location insideLoc, Player player) { return insideLoc; } - int y = area.getHighLoc().getBlockY(); - int lowY = area.getLowLoc().getBlockY(); + int y = area.getHighVector().getBlockY(); + int lowY = area.getLowVector().getBlockY(); - int x = area.getLowLoc().getBlockX() + area.getXSize() / 2; - int z = area.getLowLoc().getBlockZ() + area.getZSize() / 2; + int x = area.getLowVector().getBlockX() + area.getXSize() / 2; + int z = area.getLowVector().getBlockZ() + area.getZSize() / 2; Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); boolean found = false; @@ -1040,13 +1040,13 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { List randomLocList = new ArrayList(); for (int z = -1; z < area.getZSize() + 2; z++) { - randomLocList.add(new RandomLoc(area.getLowLoc().getX(), 0, area.getLowLoc().getZ() + z)); - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + area.getXSize(), 0, area.getLowLoc().getZ() + z)); + randomLocList.add(new RandomLoc(area.getLowVector().getX(), 0, area.getLowVector().getZ() + z)); + randomLocList.add(new RandomLoc(area.getLowVector().getX() + area.getXSize(), 0, area.getLowVector().getZ() + z)); } for (int x = -1; x < area.getXSize() + 2; x++) { - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ())); - randomLocList.add(new RandomLoc(area.getLowLoc().getX() + x, 0, area.getLowLoc().getZ() + area.getZSize())); + randomLocList.add(new RandomLoc(area.getLowVector().getX() + x, 0, area.getLowVector().getZ())); + randomLocList.add(new RandomLoc(area.getLowVector().getX() + x, 0, area.getLowVector().getZ() + area.getZSize())); } Location loc = insideLoc.clone(); @@ -1070,12 +1070,12 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { loc.setX(x); loc.setZ(z); - loc.setY(area.getHighLoc().getBlockY()); + loc.setY(area.getHighVector().getBlockY()); - int max = area.getHighLoc().getBlockY(); + int max = area.getHighVector().getBlockY(); max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; - for (int i = max; i > area.getLowLoc().getY(); i--) { + for (int i = max; i > area.getLowVector().getY(); i--) { loc.setY(i); Block block = loc.getBlock(); Block block2 = loc.clone().add(0, 1, 0).getBlock(); @@ -1204,8 +1204,8 @@ public void printAdvancedAreaList(Player player, int page) { ArrayList temp = new ArrayList<>(); for (Entry entry : areas.entrySet()) { CuboidArea a = entry.getValue(); - Location h = a.getHighLoc(); - Location l = a.getLowLoc(); + Location h = a.getHighLocation(); + Location l = a.getLowLocation(); if (this.getPermissions().has(Flags.coords, FlagCombo.OnlyFalse)) temp.add(Residence.getInstance().msg(lm.Area_ListAll, entry.getKey(), 0, 0, 0, 0, 0, 0, a.getSize())); else @@ -1243,15 +1243,15 @@ public Location getTeleportLocation(Player player) { if (tpLoc == null) { if (this.getMainArea() == null) return null; - Location low = this.getMainArea().getLowLoc(); - Location high = this.getMainArea().getHighLoc(); + Location low = this.getMainArea().getLowLocation(); + Location high = this.getMainArea().getHighLocation(); Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); tpLoc = this.getMiddleFreeLoc(t, player).toVector(); } if (tpLoc != null) { - Location loc = tpLoc.toLocation(this.getMainArea().getLowLoc().getWorld()); + Location loc = tpLoc.toLocation(this.getMainArea().getLowLocation().getWorld()); if (PitchYaw != null) { loc.setPitch((float) PitchYaw.getX()); loc.setYaw((float) PitchYaw.getY()); diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index 95e65e6da..cbc85a908 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -147,11 +147,19 @@ public int getZSize() { return (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; } - public Location getHighLoc() { + public Vector getHighVector() { + return highPoints; + } + + public Vector getLowVector() { + return lowPoints; + } + + public Location getHighLocation() { return highPoints.toLocation(getWorld()); } - public Location getLowLoc() { + public Location getLowLocation() { return lowPoints.toLocation(getWorld()); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 03de0c27e..9de10566a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -536,8 +536,8 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole @Override public void run() { for (CuboidArea area : arr) { - Location low = area.getLowLoc().clone(); - Location high = area.getHighLoc().clone(); + Location low = area.getLowLocation().clone(); + Location high = area.getHighLocation().clone(); if (high.getBlockY() > plugin.getConfigManager().getCleanLevel()) { @@ -636,8 +636,8 @@ public void removeLwcFromResidence(final Player player, final ClaimedResidence r try { for (CuboidArea area : res.getAreaArray()) { - Location low = area.getLowLoc(); - Location high = area.getHighLoc(); + Location low = area.getLowLocation(); + Location high = area.getHighLocation(); World world = low.getWorld(); for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { @@ -710,8 +710,8 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { CuboidArea area = res.getAreaArray()[0]; - String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); - String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); worldInfo += CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); } diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index facf86093..a57dd562b 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -5,6 +5,7 @@ import org.bukkit.Location; import org.bukkit.entity.Player; +import org.bukkit.util.Vector; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.AutoSelector; @@ -71,8 +72,8 @@ public void UpdateSelection(Player player, Location targetLoc) { boolean changed = false; CuboidArea area = new CuboidArea(loc1, loc2); - Location hloc = area.getHighLoc(); - Location lloc = area.getLowLoc(); + Location hloc = area.getHighLocation(); + Location lloc = area.getLowLocation(); if (cloc.getBlockX() < lloc.getBlockX()) { lloc.setX(cloc.getBlockX()); diff --git a/src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java b/src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java index 1b7ba841f..d432e01dc 100644 --- a/src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java @@ -29,8 +29,8 @@ public Land getRegion(CuboidArea area) { if (area == null) return null; - Chunk loc1 = area.getLowLoc().getChunk(); - Chunk loc2 = area.getHighLoc().getChunk(); + Chunk loc1 = area.getLowLocation().getChunk(); + Chunk loc2 = area.getHighLocation().getChunk(); World world = loc1.getWorld(); diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index bf232965f..cadd83eb7 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -36,9 +36,9 @@ public boolean save(ClaimedResidence res) { CuboidArea area = res.getAreaArray()[0]; - Vector bvmin = new Vector(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); - Vector bvmax = new Vector(area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); - Vector origin = new Vector(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + Vector bvmin = new Vector(area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); + Vector bvmax = new Vector(area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); + Vector origin = new Vector(area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); World bworld = Bukkit.getWorld(res.getWorld()); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 4fa5136a0..4b8c83f5d 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -17,6 +17,7 @@ import org.bukkit.entity.Player; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; +import org.bukkit.util.Vector; import com.bekvon.bukkit.cmiLib.ActionBarManager; import com.bekvon.bukkit.cmiLib.CMIEffect; @@ -109,7 +110,7 @@ public int getMaxYAllowed() { if (res1 != null) { CuboidArea area = res1.getAreaByLoc(this.getBaseLoc2()); if (area != null) { - return area.getHighLoc().getBlockY(); + return area.getHighVector().getBlockY(); } } break; @@ -128,7 +129,7 @@ public int getMinYAllowed() { if (res1 != null) { CuboidArea area = res1.getAreaByLoc(getBaseLoc1()); if (area != null) - return area.getLowLoc().getBlockY(); + return area.getLowVector().getBlockY(); } break; } @@ -163,15 +164,15 @@ public void vert(boolean resadmin) { private void shadowSky(CuboidArea area) { if (!hasPlacedBoth()) return; - area.setHighLocation(this.getBaseArea().getHighLoc()); - area.getHighLoc().setY(this.getMaxYAllowed()); + area.setHighLocation(this.getBaseArea().getHighLocation()); + area.getHighVector().setY(this.getMaxYAllowed()); } private void shadowBedrock(CuboidArea area) { if (!hasPlacedBoth()) return; - area.setLowLocation(this.getBaseArea().getLowLoc()); - area.getLowLoc().setY(this.getMinYAllowed()); + area.setLowLocation(this.getBaseArea().getLowLocation()); + area.getLowVector().setY(this.getMinYAllowed()); } public void sky(boolean resadmin) { @@ -181,7 +182,7 @@ public void sky(boolean resadmin) { CuboidArea base = this.getBaseArea(); - int y1 = base.getLowLoc().getBlockY(); + int y1 = base.getLowVector().getBlockY(); int newy = this.getMaxYAllowed(); @@ -192,8 +193,8 @@ public void sky(boolean resadmin) { newy = y1 + (group.getMaxY() - 1); } - loc1 = base.getLowLoc(); - loc2 = base.getHighLoc(); + loc1 = base.getLowLocation(); + loc2 = base.getHighLocation(); loc2.setY(newy); plugin.msg(player, lm.Select_Sky); @@ -209,7 +210,7 @@ public void bedrock(boolean resadmin) { CuboidArea base = this.getBaseArea(); - int y2 = base.getHighLoc().getBlockY(); + int y2 = base.getHighVector().getBlockY(); int newy = this.getMinYAllowed(); if (!resadmin) { @@ -219,8 +220,8 @@ public void bedrock(boolean resadmin) { newy = y2 - (group.getMaxY() - 1); } - loc1 = base.getLowLoc(); - loc2 = base.getHighLoc(); + loc1 = base.getLowLocation(); + loc2 = base.getHighLocation(); loc1.setY(newy); plugin.msg(player, lm.Select_Bedrock); @@ -408,7 +409,7 @@ public Location getPlayerLoc1(Player player) { CuboidArea area = sel.getResizedArea(); if (area == null) return null; - return area.getLowLoc(); + return area.getLowLocation(); } @Deprecated @@ -425,7 +426,7 @@ public Location getPlayerLoc2(Player player) { CuboidArea area = sel.getResizedArea(); if (area == null) return null; - return area.getHighLoc(); + return area.getHighLocation(); } @Deprecated @@ -680,8 +681,8 @@ public boolean MakeBorders(final Player player, final boolean error) { for (CuboidArea area : areas) { if (area == null) continue; - CuboidArea cuboidArea = new CuboidArea(area.getLowLoc(), area.getHighLoc()); - cuboidArea.getHighLoc().add(1, 1, 1); + CuboidArea cuboidArea = new CuboidArea(area.getLowLocation(), area.getHighLocation()); + cuboidArea.getHighVector().add(new Vector(1, 1, 1)); SelectionSides Sides = new SelectionSides(); @@ -692,33 +693,33 @@ public boolean MakeBorders(final Player player, final boolean error) { double PLHZ = loc.getBlockZ() + Range; double PLHY = loc.getBlockY() + Range; - if (cuboidArea.getLowLoc().getBlockX() < PLLX) { - cuboidArea.getLowLoc().setX(PLLX); + if (cuboidArea.getLowVector().getBlockX() < PLLX) { + cuboidArea.getLowVector().setX(PLLX); Sides.setWestSide(false); } - if (cuboidArea.getHighLoc().getBlockX() > PLHX) { - cuboidArea.getHighLoc().setX(PLHX); + if (cuboidArea.getHighVector().getBlockX() > PLHX) { + cuboidArea.getHighVector().setX(PLHX); Sides.setEastSide(false); } - if (cuboidArea.getLowLoc().getBlockZ() < PLLZ) { - cuboidArea.getLowLoc().setZ(PLLZ); + if (cuboidArea.getLowVector().getBlockZ() < PLLZ) { + cuboidArea.getLowVector().setZ(PLLZ); Sides.setNorthSide(false); } - if (cuboidArea.getHighLoc().getBlockZ() > PLHZ) { - cuboidArea.getHighLoc().setZ(PLHZ); + if (cuboidArea.getHighVector().getBlockZ() > PLHZ) { + cuboidArea.getHighVector().setZ(PLHZ); Sides.setSouthSide(false); } - if (cuboidArea.getLowLoc().getBlockY() < PLLY) { - cuboidArea.getLowLoc().setY(PLLY); + if (cuboidArea.getLowVector().getBlockY() < PLLY) { + cuboidArea.getLowVector().setY(PLLY); Sides.setBottomSide(false); } - if (cuboidArea.getHighLoc().getBlockY() > PLHY) { - cuboidArea.getHighLoc().setY(PLHY); + if (cuboidArea.getHighVector().getBlockY() > PLHY) { + cuboidArea.getHighVector().setY(PLHY); Sides.setTopSide(false); } @@ -732,8 +733,8 @@ public boolean MakeBorders(final Player player, final boolean error) { Bukkit.getScheduler().cancelTask(v.getErrorId()); } - locList.addAll(GetLocationsWallsByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range)); - errorLocList.addAll(GetLocationsCornersByData(loc, TX, TY, TZ, cuboidArea.getLowLoc().clone(), Sides, Range)); + locList.addAll(GetLocationsWallsByData(loc, TX, TY, TZ, cuboidArea.getLowLocation().clone(), Sides, Range)); + errorLocList.addAll(GetLocationsCornersByData(loc, TX, TY, TZ, cuboidArea.getLowLocation().clone(), Sides, Range)); } v.setLoc(player.getLocation()); } else { @@ -890,10 +891,10 @@ public void selectBySize(Player player, int xsize, int ysize, int zsize) { Selection selection = this.getSelection(player); - if (selection.getMaxYAllowed() < area.getHighLoc().getBlockY()) + if (selection.getMaxYAllowed() < area.getHighVector().getBlockY()) selection.getBaseLoc2().setY(selection.getMaxYAllowed()); - if (selection.getMinYAllowed() > area.getLowLoc().getBlockY()) + if (selection.getMinYAllowed() > area.getLowVector().getBlockY()) selection.getBaseLoc1().setY(selection.getMinYAllowed()); // selection.updateBaseArea(); @@ -918,81 +919,81 @@ public void modify(Player player, boolean shift, double amount) { CuboidArea area = this.getSelectionCuboid(player); switch (d) { case DOWN: - double oldy = area.getLowLoc().getBlockY(); + double oldy = area.getLowVector().getBlockY(); oldy = oldy - amount; if (oldy < MIN_HEIGHT) { plugin.msg(player, lm.Select_TooLow); oldy = MIN_HEIGHT; } - area.getLowLoc().setY(oldy); + area.getLowVector().setY(oldy); if (shift) { - double oldy2 = area.getHighLoc().getBlockY(); + double oldy2 = area.getHighVector().getBlockY(); oldy2 = oldy2 - amount; - area.getHighLoc().setY(oldy2); + area.getHighVector().setY(oldy2); plugin.msg(player, lm.Shifting_Down, amount); } else plugin.msg(player, lm.Expanding_Down, amount); break; case MINUSX: - double oldx = area.getLowLoc().getBlockX(); + double oldx = area.getLowVector().getBlockX(); oldx = oldx - amount; - area.getLowLoc().setX(oldx); + area.getLowVector().setX(oldx); if (shift) { - double oldx2 = area.getHighLoc().getBlockX(); + double oldx2 = area.getHighVector().getBlockX(); oldx2 = oldx2 - amount; - area.getHighLoc().setX(oldx2); + area.getHighVector().setX(oldx2); plugin.msg(player, lm.Shifting_West, amount); } else plugin.msg(player, lm.Expanding_West, amount); break; case MINUSZ: - double oldz = area.getLowLoc().getBlockZ(); + double oldz = area.getLowVector().getBlockZ(); oldz = oldz - amount; - area.getLowLoc().setZ(oldz); + area.getLowVector().setZ(oldz); if (shift) { - double oldz2 = area.getHighLoc().getBlockZ(); + double oldz2 = area.getHighVector().getBlockZ(); oldz2 = oldz2 - amount; - area.getHighLoc().setZ(oldz2); + area.getHighVector().setZ(oldz2); plugin.msg(player, lm.Shifting_North, amount); } else plugin.msg(player, lm.Expanding_North, amount); break; case PLUSX: - oldx = area.getHighLoc().getBlockX(); + oldx = area.getHighVector().getBlockX(); oldx = oldx + amount; - area.getHighLoc().setX(oldx); + area.getHighVector().setX(oldx); if (shift) { - double oldx2 = area.getLowLoc().getBlockX(); + double oldx2 = area.getLowVector().getBlockX(); oldx2 = oldx2 + amount; - area.getLowLoc().setX(oldx2); + area.getLowVector().setX(oldx2); plugin.msg(player, lm.Shifting_East, amount); } else plugin.msg(player, lm.Expanding_East, amount); break; case PLUSZ: - oldz = area.getHighLoc().getBlockZ(); + oldz = area.getHighVector().getBlockZ(); oldz = oldz + amount; - area.getHighLoc().setZ(oldz); + area.getHighVector().setZ(oldz); if (shift) { - double oldz2 = area.getLowLoc().getBlockZ(); + double oldz2 = area.getLowVector().getBlockZ(); oldz2 = oldz2 + amount; - area.getLowLoc().setZ(oldz2); + area.getLowVector().setZ(oldz2); plugin.msg(player, lm.Shifting_South, amount); } else plugin.msg(player, lm.Expanding_South, amount); break; case UP: - oldy = area.getHighLoc().getBlockY(); + oldy = area.getHighVector().getBlockY(); oldy = oldy + amount; if (oldy > getMaxWorldHeight(player.getLocation().getWorld()) - 1) { plugin.msg(player, lm.Select_TooHigh); oldy = getMaxWorldHeight(player.getLocation().getWorld()) - 1; } - area.getHighLoc().setY(oldy); + area.getHighVector().setY(oldy); if (shift) { - double oldy2 = area.getLowLoc().getBlockY(); + double oldy2 = area.getLowVector().getBlockY(); oldy2 = oldy2 + amount; - area.getLowLoc().setY(oldy2); + area.getLowVector().setY(oldy2); plugin.msg(player, lm.Shifting_Up, amount); } else plugin.msg(player, lm.Expanding_Up, amount); @@ -1000,7 +1001,7 @@ public void modify(Player player, boolean shift, double amount) { default: break; } - updateLocations(player, area.getHighLoc(), area.getLowLoc(), true); + updateLocations(player, area.getHighLocation(), area.getLowLocation(), true); } public boolean contract(Player player, double amount) { @@ -1022,47 +1023,47 @@ public boolean contract(Player player, double amount, @SuppressWarnings("unused" CuboidArea area = this.getSelectionCuboid(player); switch (d) { case UP: - double oldy = area.getHighLoc().getBlockY(); + double oldy = area.getHighVector().getBlockY(); oldy = oldy - amount; if (oldy > getMaxWorldHeight(player.getLocation().getWorld()) - 1) { plugin.msg(player, lm.Select_TooHigh); oldy = getMaxWorldHeight(player.getLocation().getWorld()) - 1; } - area.getHighLoc().setY(oldy); + area.getHighVector().setY(oldy); plugin.msg(player, lm.Contracting_Down, amount); break; case PLUSX: - double oldx = area.getHighLoc().getBlockX(); + double oldx = area.getHighVector().getBlockX(); oldx = oldx - amount; - area.getHighLoc().setX(oldx); + area.getHighVector().setX(oldx); plugin.msg(player, lm.Contracting_West, amount); break; case PLUSZ: - double oldz = area.getHighLoc().getBlockZ(); + double oldz = area.getHighVector().getBlockZ(); oldz = oldz - amount; - area.getHighLoc().setZ(oldz); + area.getHighVector().setZ(oldz); plugin.msg(player, lm.Contracting_North, amount); break; case MINUSX: - oldx = area.getLowLoc().getBlockX(); + oldx = area.getLowVector().getBlockX(); oldx = oldx + amount; - area.getLowLoc().setX(oldx); + area.getLowVector().setX(oldx); plugin.msg(player, lm.Contracting_East, amount); break; case MINUSZ: - oldz = area.getLowLoc().getBlockZ(); + oldz = area.getLowVector().getBlockZ(); oldz = oldz + amount; - area.getLowLoc().setZ(oldz); + area.getLowVector().setZ(oldz); plugin.msg(player, lm.Contracting_South, amount); break; case DOWN: - oldy = area.getLowLoc().getBlockY(); + oldy = area.getLowVector().getBlockY(); oldy = oldy + amount; if (oldy < MIN_HEIGHT) { plugin.msg(player, lm.Select_TooLow); oldy = MIN_HEIGHT; } - area.getLowLoc().setY(oldy); + area.getLowVector().setY(oldy); plugin.msg(player, lm.Contracting_Up, amount); break; default: @@ -1072,7 +1073,7 @@ public boolean contract(Player player, double amount, @SuppressWarnings("unused" // if (!ClaimedResidence.isBiggerThanMinSubzone(player, area, resadmin)) // return false; - updateLocations(player, area.getHighLoc(), area.getLowLoc(), true); + updateLocations(player, area.getHighLocation(), area.getLowLocation(), true); return true; } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java index 59ddb7812..d5aa5c8ed 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java @@ -122,8 +122,8 @@ public void regenerate(CuboidArea area) { // set up selector try { - sellection.selectPrimary(BlockVector3.at(area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()), PermissiveSelectorLimits.getInstance()); - sellection.selectSecondary(BlockVector3.at(area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()), PermissiveSelectorLimits.getInstance()); + sellection.selectPrimary(BlockVector3.at(area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()), PermissiveSelectorLimits.getInstance()); + sellection.selectSecondary(BlockVector3.at(area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()), PermissiveSelectorLimits.getInstance()); } catch (Exception | Error e) { return; } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java index 1cf7758eb..846544934 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEditSelectionManager.java @@ -103,7 +103,7 @@ public void showSelectionInfo(Player player) { @Override public void regenerate(CuboidArea area) { - CuboidSelection selection = new CuboidSelection(area.getWorld(), area.getLowLoc(), area.getHighLoc()); + CuboidSelection selection = new CuboidSelection(area.getWorld(), area.getLowLocation(), area.getHighLocation()); try { Region region = selection.getRegionSelector().getRegion(); region.getWorld().regenerate(region, WorldEdit.getInstance().getEditSessionFactory().getEditSession(region.getWorld(), -1)); diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java b/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java index 5b87f331a..58c03f7ea 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuard7Util.java @@ -37,8 +37,8 @@ public ProtectedRegion getRegion(Player player, CuboidArea area) { if (plugin.getWorldEdit() == null) return null; - Location loc1 = area.getLowLoc(); - Location loc2 = area.getHighLoc(); + Location loc1 = area.getLowLocation(); + Location loc2 = area.getHighLocation(); String id = "icp__tempregion"; try { diff --git a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java index becbd5ded..1aad8e74b 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldGuardUtil.java @@ -41,8 +41,8 @@ public ProtectedRegion getRegion(Player player, CuboidArea area) { if (plugin.getWorldEdit() == null) return null; - Location loc1 = area.getLowLoc(); - Location loc2 = area.getHighLoc(); + Location loc1 = area.getLowLocation(); + Location loc2 = area.getHighLocation(); String id = "icp__tempregion"; try { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index fede8aa5b..b1eb34b33 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -107,8 +107,8 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { StringB.append("\n"); CuboidArea area = res.getAreaArray()[0]; - String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); - String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); String worldInfo = CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); StringB.append(worldInfo); } @@ -179,8 +179,8 @@ private void printListWithDelay(final CommandSender sender, final TreeMap 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { CuboidArea area = res.getAreaArray()[0]; - String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); - String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); String worldInfo = CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); StringB.append("\n" + worldInfo); } @@ -247,8 +247,8 @@ public void run() { if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { CuboidArea area = res.getAreaArray()[0]; - String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighLoc().getBlockX(), area.getHighLoc().getBlockY(), area.getHighLoc().getBlockZ()); - String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowLoc().getBlockX(), area.getLowLoc().getBlockY(), area.getLowLoc().getBlockZ()); + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); String worldInfo = CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); StringB.append("\n" + worldInfo); } diff --git a/src/plugin.yml b/src/plugin.yml index d6416b082..7b7f6e9c3 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.2.7 +version: 4.9.2.8 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From c2b7dc13eb1edc734b07e58282ab03b9604f4c70 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 12 Mar 2021 12:52:51 +0200 Subject: [PATCH 0837/1142] Update for updated SlimeFun API --- .../bekvon/bukkit/residence/Residence.java | 2 +- .../protection/ResidenceManager.java | 7 +- .../slimeFun/SlimeFunResidenceModule.java | 68 ++++++++++--------- .../residence/slimeFun/SlimefunManager.java | 44 ++++++------ src/plugin.yml | 2 +- 5 files changed, 62 insertions(+), 61 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 87cfe66f6..2bd8ebef4 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -570,7 +570,7 @@ public void onEnable() { e.printStackTrace(); } - SlimeFun = Bukkit.getPluginManager().getPlugin("Slimefun") != null && Bukkit.getPluginManager().getPlugin("CS-CoreLib") != null; + SlimeFun = Bukkit.getPluginManager().getPlugin("Slimefun") != null; if (SlimeFun) { try { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 9de10566a..9a649df6c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1000,11 +1000,10 @@ public Set getWorldNames() { worldnames.add(name.substring(Residence.saveFilePrefix.length(), name.length() - 4)); } - } else { - plugin.getServ().getWorlds().forEach((w) -> { - worldnames.add(w.getName()); - }); } + plugin.getServ().getWorlds().forEach((w) -> { + worldnames.add(w.getName()); + }); } catch (Exception ex) { plugin.getServ().getWorlds().forEach((w) -> { worldnames.add(w.getName()); diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index d652fe45a..e2c57a254 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -18,48 +18,50 @@ public class SlimeFunResidenceModule implements ProtectionModule { - private final Residence residence; + private final Residence residence; - public SlimeFunResidenceModule(Plugin plugin) { - this.residence = (Residence) plugin; - } + public SlimeFunResidenceModule(Plugin plugin) { + this.residence = (Residence) plugin; + } - @Override - public Plugin getPlugin() { - return this.residence; - } + @Override + public Plugin getPlugin() { + return this.residence; + } - @Override - public void load() {} + @Override + public void load() { + } - @Override - public boolean hasPermission(OfflinePlayer op, Location loc, ProtectableAction action) { - if (op == null) - return false; + @Override + public boolean hasPermission(OfflinePlayer op, Location loc, ProtectableAction action) { - switch (action) { - case INTERACT_BLOCK: - ClaimedResidence res = residence.getResidenceManager().getByLoc(loc); - if (res != null) { - boolean allow = res.getPermissions().playerHas(new ResidencePlayer(op), Flags.container, false); + if (op == null) + return false; - if (!allow) - residence.msg(op.getPlayer(), lm.Flag_Deny, Flags.container); + switch (action) { + case INTERACT_BLOCK: + ClaimedResidence res = residence.getResidenceManager().getByLoc(loc); + if (res != null) { + boolean allow = res.getPermissions().playerHas(new ResidencePlayer(op), Flags.container, false); - return allow; - } - break; - case BREAK_BLOCK: - Player player = Bukkit.getPlayer(op.getUniqueId()); + if (!allow) + residence.msg(op.getPlayer(), lm.Flag_Deny, Flags.container); - if (player == null) - return false; + return allow; + } + break; + case BREAK_BLOCK: + Player player = Bukkit.getPlayer(op.getUniqueId()); - return ResidenceBlockListener.canBreakBlock(player, loc.getBlock(), true); - default: - break; - } + if (player == null) + return false; - return true; + return ResidenceBlockListener.canBreakBlock(player, loc.getBlock(), true); + default: + break; } + + return true; + } } diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java index ff2c07468..d1f523317 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java @@ -9,26 +9,26 @@ public class SlimefunManager { - // Fail safe to avoid infinite checks - private final static int TRIES = 60; - private static int times = 0; - - public static void register(Residence residence) { - Bukkit.getServer().getScheduler().runTaskTimer(residence, task -> { - - ProtectionManager manager = SlimefunPlugin.getProtectionManager(); - - // Wait for protectionManager to load (loaded on first server tick) - if (manager != null) { - manager.registerModule(Bukkit.getServer(), "Residence", plugin -> new SlimeFunResidenceModule(plugin)); - residence.consoleMessage("Enabled compatability with SlimeFun plugin"); - task.cancel(); - } - - if (++times >= TRIES) { - residence.consoleMessage("&cFailed to initialize SlimeFun support"); - task.cancel(); - } - }, 20, 20); - } + // Fail safe to avoid infinite checks + private final static int TRIES = 60; + private static int times = 0; + + public static void register(Residence residence) { + Bukkit.getServer().getScheduler().runTaskTimer(residence, task -> { + + ProtectionManager manager = SlimefunPlugin.getProtectionManager(); + + // Wait for protectionManager to load (loaded on first server tick) + if (manager != null) { + manager.registerModule(Bukkit.getServer(), "Residence", plugin -> new SlimeFunResidenceModule(plugin)); + residence.consoleMessage("Enabled compatability with SlimeFun plugin"); + task.cancel(); + } + + if (++times >= TRIES) { + residence.consoleMessage("&cFailed to initialize SlimeFun support"); + task.cancel(); + } + }, 20, 20); + } } diff --git a/src/plugin.yml b/src/plugin.yml index 7b7f6e9c3..fe405b43d 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.2.8 +version: 4.9.2.10 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 772279cb21a1ccf1ac4470207aee20b212697a9e Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 12 Mar 2021 12:59:38 +0200 Subject: [PATCH 0838/1142] Fix for stackoverflow with teleport event --- .../listeners/ResidencePlayerListener.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c36990a6c..bc765ddd1 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2119,10 +2119,12 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move Location lastLoc = lastOutsideLoc.get(uuid); player.closeInventory(); boolean teleported = false; - if (lastLoc != null) - teleported = teleport(player, lastLoc); - else - teleported = teleport(player, res.getOutsideFreeLoc(loc, player)); + if (move) { + if (lastLoc != null) + teleported = teleport(player, lastLoc); + else + teleported = teleport(player, res.getOutsideFreeLoc(loc, player)); + } plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); if (!teleported) return false; @@ -2131,9 +2133,11 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move } plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); player.closeInventory(); - boolean teleported = teleport(player, location); - if (!teleported) - return false; + if (move) { + boolean teleported = teleport(player, location); + if (!teleported) + return false; + } player.setFlying(false); player.setAllowFlight(false); } From 167be9d2e6a931211607bf5cae7c7c8296548d71 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 12 Mar 2021 18:05:36 +0200 Subject: [PATCH 0839/1142] Cleaning NMS classes --- .../bekvon/bukkit/residence/Residence.java | 1 + .../bukkit/residence/allNms/v1_10Events.java | 1 + .../bukkit/residence/allNms/v1_10_R1.java | 114 +---------------- .../bukkit/residence/allNms/v1_11_R1.java | 118 +---------------- .../bukkit/residence/allNms/v1_12_R1.java | 120 +----------------- .../bukkit/residence/allNms/v1_13_R1.java | 100 --------------- .../bukkit/residence/allNms/v1_13_R2.java | 100 --------------- .../bukkit/residence/allNms/v1_14_R1.java | 106 ---------------- .../bukkit/residence/allNms/v1_15_R1.java | 108 ---------------- .../bukkit/residence/allNms/v1_16_R1.java | 110 ---------------- .../bukkit/residence/allNms/v1_16_R2.java | 113 ----------------- .../bukkit/residence/allNms/v1_16_R3.java | 113 ----------------- .../residence/allNms/v1_7_Couldron.java | 66 ---------- .../bukkit/residence/allNms/v1_7_R4.java | 66 ---------- .../bukkit/residence/allNms/v1_8Events.java | 5 +- .../bukkit/residence/allNms/v1_8_R1.java | 100 +-------------- .../bukkit/residence/allNms/v1_8_R2.java | 100 +-------------- .../bukkit/residence/allNms/v1_8_R3.java | 100 +-------------- .../bukkit/residence/allNms/v1_9_R1.java | 107 +--------------- .../bukkit/residence/allNms/v1_9_R2.java | 102 +-------------- .../bukkit/residence/containers/NMS.java | 26 ---- .../listeners/ResidenceBlockListener.java | 3 +- .../listeners/ResidenceEntityListener.java | 24 ++-- .../listeners/ResidencePlayerListener.java | 16 +-- .../residence/listeners/SpigotListener.java | 3 +- .../protection/ClaimedResidence.java | 3 +- .../residence/protection/CuboidArea.java | 10 ++ .../bukkit/residence/utils/CrackShot.java | 5 +- .../bekvon/bukkit/residence/utils/Utils.java | 70 ++++++++++ src/plugin.yml | 2 +- 30 files changed, 152 insertions(+), 1760 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 2bd8ebef4..1ec964ad2 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -576,6 +576,7 @@ public void onEnable() { try { SlimefunManager.register(this); } catch (Throwable e) { + SlimeFun = false; e.printStackTrace(); } } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java index d5ffc4a8c..e1e44ff2e 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10Events.java @@ -6,6 +6,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java index 45bd8f373..b679533e5 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java @@ -1,35 +1,9 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Particle; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.PolarBear; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; @@ -39,62 +13,6 @@ import net.minecraft.server.v1_10_R1.PacketPlayOutWorldParticles; public class v1_10_R1 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof PolarBear); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return player.getInventory().getItemInOffHand(); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { @@ -113,36 +31,12 @@ public void playEffect(Player player, Location location, CMIEffect ef) { int[] extra = ef.getParticle().getExtra(); if (particle == null) { for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { particle = p; if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; } break; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java index 4bc29f935..a3b9a5fa1 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java @@ -1,37 +1,9 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Particle; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Donkey; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Llama; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.PolarBear; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; @@ -41,64 +13,6 @@ import net.minecraft.server.v1_11_R1.PacketPlayOutWorldParticles; public class v1_11_R1 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof Llama || - ent instanceof PolarBear || - ent instanceof Donkey); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return player.getInventory().getItemInOffHand(); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { @@ -117,36 +31,12 @@ public void playEffect(Player player, Location location, CMIEffect ef) { int[] extra = ef.getParticle().getExtra(); if (particle == null) { for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { particle = p; if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; } break; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java index 766422687..88ed3cd07 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java @@ -1,38 +1,9 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Particle; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Donkey; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Llama; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Parrot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.PolarBear; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; @@ -42,65 +13,6 @@ import net.minecraft.server.v1_12_R1.PacketPlayOutWorldParticles; public class v1_12_R1 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof Llama || - ent instanceof PolarBear || - ent instanceof Parrot || - ent instanceof Donkey); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return player.getInventory().getItemInOffHand(); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { @@ -119,36 +31,12 @@ public void playEffect(Player player, Location location, CMIEffect ef) { int[] extra = ef.getParticle().getExtra(); if (particle == null) { for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { particle = p; if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; } break; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java index ebb5b8fae..f53b47c5f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java @@ -1,45 +1,10 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Particle.DustOptions; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_13_R1.CraftParticle; import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cod; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Dolphin; -import org.bukkit.entity.Donkey; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Llama; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Parrot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.PolarBear; -import org.bukkit.entity.PufferFish; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Salmon; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.TropicalFish; -import org.bukkit.entity.Turtle; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; @@ -49,71 +14,6 @@ import net.minecraft.server.v1_13_R1.PacketPlayOutWorldParticles; public class v1_13_R1 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof Llama || - ent instanceof PolarBear || - ent instanceof Parrot || - ent instanceof Donkey || - ent instanceof Cod || - ent instanceof Salmon || - ent instanceof PufferFish || - ent instanceof TropicalFish || - ent instanceof Turtle || - ent instanceof Dolphin); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return player.getInventory().getItemInOffHand(); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java index 63448e708..407d3526b 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java @@ -1,45 +1,10 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Particle.DustOptions; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_13_R2.CraftParticle; import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cod; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Dolphin; -import org.bukkit.entity.Donkey; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Llama; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Parrot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.PolarBear; -import org.bukkit.entity.PufferFish; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Salmon; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.TropicalFish; -import org.bukkit.entity.Turtle; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; @@ -49,71 +14,6 @@ import net.minecraft.server.v1_13_R2.PacketPlayOutWorldParticles; public class v1_13_R2 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof Llama || - ent instanceof PolarBear || - ent instanceof Parrot || - ent instanceof Donkey || - ent instanceof Cod || - ent instanceof Salmon || - ent instanceof PufferFish || - ent instanceof TropicalFish || - ent instanceof Turtle || - ent instanceof Dolphin); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return player.getInventory().getItemInOffHand(); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java index 929846852..cac620aeb 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java @@ -1,48 +1,10 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Particle.DustOptions; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_14_R1.CraftParticle; import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Cat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cod; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Dolphin; -import org.bukkit.entity.Donkey; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Fox; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Llama; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Panda; -import org.bukkit.entity.Parrot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.PolarBear; -import org.bukkit.entity.PufferFish; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Salmon; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.TropicalFish; -import org.bukkit.entity.Turtle; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; @@ -52,74 +14,6 @@ import net.minecraft.server.v1_14_R1.PacketPlayOutWorldParticles; public class v1_14_R1 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof Llama || - ent instanceof PolarBear || - ent instanceof Parrot || - ent instanceof Donkey || - ent instanceof Cod || - ent instanceof Salmon || - ent instanceof PufferFish || - ent instanceof TropicalFish || - ent instanceof Turtle || - ent instanceof Dolphin || - ent instanceof Fox || - ent instanceof Panda|| - ent instanceof Cat); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return player.getInventory().getItemInOffHand(); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_15_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_15_R1.java index def2fcd4b..0e63a3311 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_15_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_15_R1.java @@ -1,49 +1,10 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Particle.DustOptions; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_15_R1.CraftParticle; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Bee; -import org.bukkit.entity.Cat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cod; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Dolphin; -import org.bukkit.entity.Donkey; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Fox; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Llama; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Panda; -import org.bukkit.entity.Parrot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.PolarBear; -import org.bukkit.entity.PufferFish; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Salmon; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.TropicalFish; -import org.bukkit.entity.Turtle; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; @@ -53,75 +14,6 @@ import net.minecraft.server.v1_15_R1.PacketPlayOutWorldParticles; public class v1_15_R1 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof Llama || - ent instanceof PolarBear || - ent instanceof Parrot || - ent instanceof Donkey || - ent instanceof Cod || - ent instanceof Salmon || - ent instanceof PufferFish || - ent instanceof TropicalFish || - ent instanceof Turtle || - ent instanceof Dolphin || - ent instanceof Fox || - ent instanceof Panda || - ent instanceof Cat || - ent instanceof Bee); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return player.getInventory().getItemInOffHand(); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_16_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_16_R1.java index 73c1d06b7..777b11d5b 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_16_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_16_R1.java @@ -1,50 +1,10 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Particle.DustOptions; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_16_R1.CraftParticle; import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Bee; -import org.bukkit.entity.Cat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cod; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Dolphin; -import org.bukkit.entity.Donkey; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Fox; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Llama; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Panda; -import org.bukkit.entity.Parrot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.PolarBear; -import org.bukkit.entity.PufferFish; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Salmon; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Strider; -import org.bukkit.entity.TropicalFish; -import org.bukkit.entity.Turtle; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; @@ -54,76 +14,6 @@ import net.minecraft.server.v1_16_R1.PacketPlayOutWorldParticles; public class v1_16_R1 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof Llama || - ent instanceof PolarBear || - ent instanceof Parrot || - ent instanceof Donkey || - ent instanceof Cod || - ent instanceof Salmon || - ent instanceof PufferFish || - ent instanceof TropicalFish || - ent instanceof Turtle || - ent instanceof Dolphin || - ent instanceof Fox || - ent instanceof Panda || - ent instanceof Cat || - ent instanceof Bee || - ent instanceof Strider); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return player.getInventory().getItemInOffHand(); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java index 5561259b2..0820cdc5e 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java @@ -1,51 +1,10 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Particle.DustOptions; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_16_R2.CraftParticle; import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Bee; -import org.bukkit.entity.Cat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cod; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Dolphin; -import org.bukkit.entity.Donkey; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Fox; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Llama; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Panda; -import org.bukkit.entity.Parrot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.PolarBear; -import org.bukkit.entity.PufferFish; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Salmon; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Strider; -import org.bukkit.entity.TropicalFish; -import org.bukkit.entity.Turtle; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.entity.Hoglin; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; @@ -55,78 +14,6 @@ import net.minecraft.server.v1_16_R2.PacketPlayOutWorldParticles; public class v1_16_R2 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof Llama || - ent instanceof PolarBear || - ent instanceof Parrot || - ent instanceof Donkey || - ent instanceof Cod || - ent instanceof Salmon || - ent instanceof PufferFish || - ent instanceof TropicalFish || - ent instanceof Turtle || - ent instanceof Dolphin || - ent instanceof Fox || - ent instanceof Panda || - ent instanceof Cat || - ent instanceof Bee || - ent instanceof Strider|| - ent instanceof Hoglin); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return player.getInventory().getItemInOffHand(); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } - @Override public void playEffect(Player player, Location location, CMIEffect ef) { if (location == null || ef == null || location.getWorld() == null) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_16_R3.java b/src/com/bekvon/bukkit/residence/allNms/v1_16_R3.java index 393132c11..1d0586a86 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_16_R3.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_16_R3.java @@ -1,51 +1,10 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Particle.DustOptions; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_16_R3.CraftParticle; import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Bee; -import org.bukkit.entity.Cat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cod; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Dolphin; -import org.bukkit.entity.Donkey; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Fox; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Llama; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Panda; -import org.bukkit.entity.Parrot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.PolarBear; -import org.bukkit.entity.PufferFish; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Salmon; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Strider; -import org.bukkit.entity.TropicalFish; -import org.bukkit.entity.Turtle; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.entity.Hoglin; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; @@ -55,78 +14,6 @@ import net.minecraft.server.v1_16_R3.PacketPlayOutWorldParticles; public class v1_16_R3 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || - ent instanceof Bat || - ent instanceof Snowman || - ent instanceof IronGolem || - ent instanceof Ocelot || - ent instanceof Pig || - ent instanceof Sheep || - ent instanceof Chicken || - ent instanceof Wolf || - ent instanceof Cow || - ent instanceof Squid || - ent instanceof Villager || - ent instanceof Rabbit || - ent instanceof Llama || - ent instanceof PolarBear || - ent instanceof Parrot || - ent instanceof Donkey || - ent instanceof Cod || - ent instanceof Salmon || - ent instanceof PufferFish || - ent instanceof TropicalFish || - ent instanceof Turtle || - ent instanceof Dolphin || - ent instanceof Fox || - ent instanceof Panda || - ent instanceof Cat || - ent instanceof Bee || - ent instanceof Strider|| - ent instanceof Hoglin); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return player.getInventory().getItemInOffHand(); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } - @Override public void playEffect(Player player, Location location, CMIEffect ef) { if (location == null || ef == null || location.getWorld() == null) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java index 439db409c..46917c6cd 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java @@ -1,32 +1,9 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - import org.bukkit.Effect; -import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; @@ -34,49 +11,6 @@ import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; public class v1_7_Couldron implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.add(event.getBlock()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return false; - } - - @Override - public boolean isSpectator(GameMode mode) { - return false; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return true; - } - - @SuppressWarnings("deprecation") - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return null; - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java index 5de3033cc..4a92945b8 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java @@ -1,32 +1,9 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - import org.bukkit.Effect; -import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; @@ -34,49 +11,6 @@ import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; public class v1_7_R4 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.add(event.getBlock()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return false; - } - - @Override - public boolean isSpectator(GameMode mode) { - return false; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return true; - } - - @SuppressWarnings("deprecation") - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return null; - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java index 6e98e6b5c..1a4e72fa6 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8Events.java @@ -12,13 +12,12 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockExplodeEvent; import org.bukkit.event.player.PlayerInteractAtEntityEvent; -import org.bukkit.event.player.PlayerInteractEntityEvent; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Utils; public class v1_8Events implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -28,7 +27,7 @@ public void onPlayerInteractAtArmoStand(PlayerInteractAtEntityEvent event) { return; Entity ent = event.getRightClicked(); - if (!Residence.getInstance().getNms().isArmorStandEntity(ent.getType())) + if (!Utils.isArmorStandEntity(ent.getType())) return; FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java index 3615f554f..4fe93663f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java @@ -1,33 +1,9 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - import org.bukkit.Effect; -import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; @@ -37,50 +13,6 @@ import net.minecraft.server.v1_8_R1.PacketPlayOutWorldParticles; public class v1_8_R1 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager - || ent instanceof Rabbit); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return true; - } - - @SuppressWarnings("deprecation") - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return null; - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { @@ -99,36 +31,12 @@ public void playEffect(Player player, Location location, CMIEffect ef) { int[] extra = ef.getParticle().getExtra(); if (particle == null) { for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { particle = p; if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; } break; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java index 9b4b91bcb..8c3ab8b9f 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java @@ -1,33 +1,9 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - import org.bukkit.Effect; -import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; @@ -37,50 +13,6 @@ import net.minecraft.server.v1_8_R2.PacketPlayOutWorldParticles; public class v1_8_R2 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager - || ent instanceof Rabbit); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return true; - } - - @SuppressWarnings("deprecation") - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return null; - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { @@ -99,36 +31,12 @@ public void playEffect(Player player, Location location, CMIEffect ef) { int[] extra = ef.getParticle().getExtra(); if (particle == null) { for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { particle = p; if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; } break; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java index 3027b6e09..2548c3c92 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java @@ -1,33 +1,9 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - import org.bukkit.Effect; -import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; @@ -37,50 +13,6 @@ import net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles; public class v1_8_R3 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager - || ent instanceof Rabbit); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return true; - } - - @SuppressWarnings("deprecation") - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return null; - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { @@ -99,36 +31,12 @@ public void playEffect(Player player, Location location, CMIEffect ef) { int[] extra = ef.getParticle().getExtra(); if (particle == null) { for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { particle = p; if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; } break; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java index a76bbff9d..5e3251274 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java @@ -1,34 +1,9 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Particle; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; @@ -38,56 +13,13 @@ import net.minecraft.server.v1_9_R1.PacketPlayOutWorldParticles; public class v1_9_R1 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager - || ent instanceof Rabbit); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return player.getInventory().getItemInOffHand(); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { if (location == null || ef == null || location.getWorld() == null) return; + if (!location.getWorld().equals(player.getWorld())) + return; Packet packet = null; if (ef.getParticle().getEffect() == null) return; @@ -101,36 +33,12 @@ public void playEffect(Player player, Location location, CMIEffect ef) { int[] extra = ef.getParticle().getExtra(); if (particle == null) { for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { particle = p; if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; } break; } @@ -155,9 +63,6 @@ public void playEffect(Player player, Location location, CMIEffect ef) { if (cPlayer.getHandle().playerConnection == null) return; - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - if (packet == null) return; cPlayer.getHandle().playerConnection.sendPacket(packet); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java index ee7b75edd..64153ae91 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java @@ -1,34 +1,9 @@ package com.bekvon.bukkit.residence.allNms; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Particle; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Cow; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Horse; -import org.bukkit.entity.IronGolem; -import org.bukkit.entity.Ocelot; -import org.bukkit.entity.Pig; import org.bukkit.entity.Player; -import org.bukkit.entity.Rabbit; -import org.bukkit.entity.Sheep; -import org.bukkit.entity.Snowman; -import org.bukkit.entity.Squid; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Wolf; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.residence.containers.NMS; @@ -38,51 +13,6 @@ import net.minecraft.server.v1_9_R2.PacketPlayOutWorldParticles; public class v1_9_R2 implements NMS { - @Override - public List getPistonRetractBlocks(BlockPistonRetractEvent event) { - List blocks = new ArrayList(); - blocks.addAll(event.getBlocks()); - return blocks; - } - - @Override - public boolean isAnimal(Entity ent) { - return (ent instanceof Horse || ent instanceof Bat || ent instanceof Snowman || ent instanceof IronGolem || ent instanceof Ocelot || ent instanceof Pig - || ent instanceof Sheep || ent instanceof Chicken || ent instanceof Wolf || ent instanceof Cow || ent instanceof Squid || ent instanceof Villager - || ent instanceof Rabbit); - } - - @Override - public boolean isArmorStandEntity(EntityType ent) { - return ent == EntityType.ARMOR_STAND; - } - - @Override - public boolean isSpectator(GameMode mode) { - return mode == GameMode.SPECTATOR; - } - - @Override - public boolean isMainHand(PlayerInteractEvent event) { - return event.getHand() == EquipmentSlot.HAND ? true : false; - } - - @Override - public ItemStack itemInMainHand(Player player) { - return player.getInventory().getItemInMainHand(); - } - - @Override - public ItemStack itemInOffHand(Player player) { - return player.getInventory().getItemInOffHand(); - } - - @Override - public boolean isChorusTeleport(TeleportCause tpcause) { - if (tpcause == TeleportCause.CHORUS_FRUIT) - return true; - return false; - } @Override public void playEffect(Player player, Location location, CMIEffect ef) { @@ -101,36 +31,12 @@ public void playEffect(Player player, Location location, CMIEffect ef) { int[] extra = ef.getParticle().getExtra(); if (particle == null) { for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - } - break; - } - if (ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { particle = p; if (ef.getParticle().getEffect().getData() != null) { - if (ef.getParticle().getEffect().equals(org.bukkit.Material.class)) { - extra = new int[] { 0 }; - } else { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; } break; } diff --git a/src/com/bekvon/bukkit/residence/containers/NMS.java b/src/com/bekvon/bukkit/residence/containers/NMS.java index 0c3c9eb90..2a2409a4b 100644 --- a/src/com/bekvon/bukkit/residence/containers/NMS.java +++ b/src/com/bekvon/bukkit/residence/containers/NMS.java @@ -1,37 +1,11 @@ package com.bekvon.bukkit.residence.containers; -import java.util.List; - -import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.cmiLib.CMIEffect; public interface NMS { - public List getPistonRetractBlocks(BlockPistonRetractEvent event); - - public boolean isAnimal(Entity ent); - - public boolean isArmorStandEntity(EntityType entityType); - - public boolean isSpectator(GameMode mode); - - public boolean isMainHand(PlayerInteractEvent event); - - public ItemStack itemInMainHand(Player player); - - public boolean isChorusTeleport(TeleportCause tpcause); - void playEffect(Player player, Location location, CMIEffect ef); - - ItemStack itemInOffHand(Player player); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index abd1aaffe..ed04873c4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -59,6 +59,7 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Utils; public class ResidenceBlockListener implements Listener { @@ -712,7 +713,7 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) { if (!Flags.pistonprotection.isGlobalyEnabled()) return; - List blocks = plugin.getNms().getPistonRetractBlocks(event); + List blocks = Utils.getPistonRetractBlocks(event); if (!event.isSticky()) return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index d52cf227f..11b2dc707 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -6,10 +6,13 @@ import java.util.UUID; import org.bukkit.Bukkit; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.entity.Animals; import org.bukkit.entity.Arrow; +import org.bukkit.entity.Bat; import org.bukkit.entity.Creeper; import org.bukkit.entity.Damageable; import org.bukkit.entity.Entity; @@ -17,15 +20,19 @@ import org.bukkit.entity.Firework; import org.bukkit.entity.Ghast; import org.bukkit.entity.Hanging; +import org.bukkit.entity.IronGolem; import org.bukkit.entity.ItemFrame; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Monster; +import org.bukkit.entity.NPC; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.entity.Slime; +import org.bukkit.entity.Snowman; import org.bukkit.entity.Tameable; import org.bukkit.entity.ThrownPotion; import org.bukkit.entity.Vehicle; +import org.bukkit.entity.WaterMob; import org.bukkit.entity.Witch; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -66,6 +73,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Utils; public class ResidenceEntityListener implements Listener { @@ -144,7 +152,7 @@ public void AnimalKilling(EntityDamageEvent event) { return; if (plugin.isDisabledWorldListener(entity.getWorld())) return; - if (!plugin.getNms().isAnimal(entity)) + if (!Utils.isAnimal(entity)) return; if (event.getCause() == DamageCause.LIGHTNING || event.getCause() == DamageCause.FIRE_TICK) { @@ -209,7 +217,7 @@ public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { Entity entity = event.getEntity(); if (entity == null) return; - if (!plugin.getNms().isAnimal(entity)) + if (!Utils.isAnimal(entity)) return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); @@ -259,7 +267,7 @@ public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { Entity entity = event.getEntity(); if (entity == null) return; - if (!plugin.getNms().isAnimal(entity)) + if (!Utils.isAnimal(entity)) return; Entity damager = event.getDamager(); @@ -408,7 +416,7 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { Entity entity = event.getEntity(); - if (!plugin.getNms().isAnimal(entity)) + if (!Utils.isAnimal(entity)) return; if (plugin.isResAdminOn(player)) @@ -481,7 +489,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { if (plugin.isDisabledWorldListener(ent.getWorld())) return; FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); - if (plugin.getNms().isAnimal(ent)) { + if (Utils.isAnimal(ent)) { if (!perms.has(Flags.animals, true)) { event.setCancelled(true); return; @@ -1142,7 +1150,7 @@ public void OnArmorStandFlameDamage(EntityDamageEvent event) { return; Entity ent = event.getEntity(); - if (!plugin.getNms().isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) + if (!Utils.isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) return; if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { @@ -1162,7 +1170,7 @@ public void OnArmorStandExplosion(EntityDamageEvent event) { if (event.getCause() != DamageCause.BLOCK_EXPLOSION && event.getCause() != DamageCause.ENTITY_EXPLOSION) return; Entity ent = event.getEntity(); - if (!plugin.getNms().isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) + if (!Utils.isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) return; if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { @@ -1265,7 +1273,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (event.isCancelled()) return; - if (event.getEntityType() != EntityType.ENDER_CRYSTAL && event.getEntityType() != EntityType.ITEM_FRAME && !plugin.getNms().isArmorStandEntity(event + if (event.getEntityType() != EntityType.ENDER_CRYSTAL && event.getEntityType() != EntityType.ITEM_FRAME && !Utils.isArmorStandEntity(event .getEntityType())) return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index bc765ddd1..6b09aff49 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -80,8 +80,8 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; +import com.bekvon.bukkit.residence.utils.Utils; public class ResidencePlayerListener implements Listener { @@ -338,7 +338,7 @@ public void onFishingRodUse(PlayerFishEvent event) { Player player = event.getPlayer(); if (event.getCaught() == null) return; - if (plugin.getNms().isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { + if (Utils.isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { FlagPermissions perm = plugin.getPermsByLoc(event.getCaught().getLocation()); ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getCaught().getLocation()); if (perm.has(Flags.hook, FlagCombo.OnlyFalse)) { @@ -1115,7 +1115,7 @@ public void onSelection(PlayerInteractEvent event) { plugin.msg(player, lm.Select_PrimaryPoint, plugin.msg(lm.General_CoordsTop, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); event.setCancelled(true); - } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && plugin.getNms().isMainHand(event)) { + } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && Utils.isMainHand(event)) { Location loc = block.getLocation(); plugin.getSelectionManager().placeLoc2(player, loc, true); plugin.msg(player, lm.Select_SecondaryPoint, plugin.msg(lm.General_CoordsBottom, loc.getBlockX(), loc @@ -1511,7 +1511,7 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { if (res == null) return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.dye, FlagCombo.OnlyFalse)) { - ItemStack iih = plugin.getNms().itemInMainHand(player); + ItemStack iih = Utils.itemInMainHand(player); ItemStack iiho = CMIReflections.getItemInOffHand(player); if (iih == null && iiho == null) return; @@ -1545,7 +1545,7 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.shear, FlagCombo.OnlyFalse)) { - ItemStack iih = plugin.getNms().itemInMainHand(player); + ItemStack iih = Utils.itemInMainHand(player); ItemStack iiho = CMIReflections.getItemInOffHand(player); if (iih == null && iiho == null) return; @@ -1565,7 +1565,7 @@ public void onPlayerInteractAtArmoStand(PlayerInteractEntityEvent event) { return; Entity ent = event.getRightClicked(); - if (!Residence.getInstance().getNms().isArmorStandEntity(ent.getType())) + if (!Utils.isArmorStandEntity(ent.getType())) return; FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); @@ -1601,7 +1601,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { // Hanging hanging = (Hanging) ent; - Material heldItem = plugin.getNms().itemInMainHand(player).getType(); + Material heldItem = Utils.itemInMainHand(player).getType(); FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player); String world = player.getWorld().getName(); @@ -1744,7 +1744,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { plugin.msg(player, lm.General_TeleportDeny, res.getName()); return; } - if (plugin.getNms().isChorusTeleport(event.getCause()) && !res.isOwner(player) && res.getPermissions().playerHas(player, Flags.chorustp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission( + if (Utils.isChorusTeleport(event.getCause()) && !res.isOwner(player) && res.getPermissions().playerHas(player, Flags.chorustp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission( player)) { event.setCancelled(true); plugin.msg(player, lm.Residence_FlagDeny, Flags.chorustp, res.getName()); diff --git a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java index 44662c38f..66ccee6c9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java @@ -12,6 +12,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Utils; public class SpigotListener implements Listener { @SuppressWarnings("deprecation") @@ -26,7 +27,7 @@ public void onItemDamage(PlayerItemDamageEvent event) { if (!perms.has(Flags.nodurability, false)) return; - ItemStack held = Residence.getInstance().getNms().itemInMainHand(player); + ItemStack held = Utils.itemInMainHand(player); if (held.getType() == Material.AIR || held.getDurability() <= 0) return; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index a73a5e5aa..5a01e5bc2 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -58,6 +58,7 @@ import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.utils.Utils; public class ClaimedResidence { @@ -1285,7 +1286,7 @@ public int isSafeTp(Player player) { if (player.getGameMode() == GameMode.CREATIVE) return 0; - if (Residence.getInstance().getNms().isSpectator(player.getGameMode())) + if (Utils.isSpectator(player.getGameMode())) return 0; if (tpLoc == null) diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index cbc85a908..99219a2d3 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -155,6 +155,16 @@ public Vector getLowVector() { return lowPoints; } + @Deprecated + public Location getHighLoc() { + return getHighLocation(); + } + + @Deprecated + public Location getLowLoc() { + return getLowLocation(); + } + public Location getHighLocation() { return highPoints.toLocation(getWorld()); } diff --git a/src/com/bekvon/bukkit/residence/utils/CrackShot.java b/src/com/bekvon/bukkit/residence/utils/CrackShot.java index 39fc90e42..2688230b1 100644 --- a/src/com/bekvon/bukkit/residence/utils/CrackShot.java +++ b/src/com/bekvon/bukkit/residence/utils/CrackShot.java @@ -13,6 +13,7 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.shampaggon.crackshot.events.WeaponDamageEntityEvent; @@ -59,7 +60,7 @@ public void AnimalKilling(WeaponDamageEntityEvent event) { Entity entity = event.getVictim(); ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); - if (plugin.getNms().isAnimal(entity)) { + if (Utils.isAnimal(entity)) { if (res != null && res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { cause.sendMessage(plugin.msg(lm.Residence_FlagDeny, Flags.animalkilling, res.getName())); event.setCancelled(true); @@ -72,7 +73,7 @@ public void onEntityDamageByEntityEvent(WeaponDamageEntityEvent event) { // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; - if (event.getVictim().getType() != EntityType.ITEM_FRAME && !plugin.getNms().isArmorStandEntity(event.getVictim().getType())) + if (event.getVictim().getType() != EntityType.ITEM_FRAME && !Utils.isArmorStandEntity(event.getVictim().getType())) return; Entity dmgr = event.getDamager(); diff --git a/src/com/bekvon/bukkit/residence/utils/Utils.java b/src/com/bekvon/bukkit/residence/utils/Utils.java index d381872f8..755fe1e82 100644 --- a/src/com/bekvon/bukkit/residence/utils/Utils.java +++ b/src/com/bekvon/bukkit/residence/utils/Utils.java @@ -2,16 +2,31 @@ import java.util.ArrayList; import java.util.Iterator; +import java.util.List; import org.bukkit.Bukkit; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.entity.Animals; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.IronGolem; +import org.bukkit.entity.NPC; import org.bukkit.entity.Player; +import org.bukkit.entity.Snowman; +import org.bukkit.entity.WaterMob; +import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; import org.bukkit.util.BlockIterator; import com.bekvon.bukkit.cmiLib.CMIMaterial; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; @@ -184,4 +199,59 @@ public static Location convertStringToLocation(String map) { return loc; } + + public static boolean isAnimal(Entity ent) { + return (ent instanceof Animals || + ent instanceof WaterMob || + ent instanceof NPC || + ent instanceof Bat || + ent instanceof Snowman || + ent instanceof IronGolem); + } + + public static boolean isArmorStandEntity(EntityType ent) { + if (Version.isCurrentEqualOrLower(Version.v1_7_R4)) + return false; + return ent == org.bukkit.entity.EntityType.ARMOR_STAND; + } + + public static boolean isSpectator(org.bukkit.GameMode mode) { + if (Version.isCurrentEqualOrLower(Version.v1_7_R4)) + return false; + return mode == org.bukkit.GameMode.SPECTATOR; + } + + public static boolean isMainHand(PlayerInteractEvent event) { + if (Version.isCurrentEqualOrLower(Version.v1_8_R3)) + return true; + return event.getHand() == EquipmentSlot.HAND ? true : false; + } + + public static ItemStack itemInMainHand(Player player) { + if (Version.isCurrentEqualOrLower(Version.v1_8_R3)) + return player.getInventory().getItemInHand(); + return player.getInventory().getItemInMainHand(); + } + + public static ItemStack itemInOffHand(Player player) { + if (Version.isCurrentEqualOrLower(Version.v1_8_R3)) + return null; + return player.getInventory().getItemInOffHand(); + } + + public static boolean isChorusTeleport(org.bukkit.event.player.PlayerTeleportEvent.TeleportCause tpcause) { + if (Version.isCurrentEqualOrLower(Version.v1_8_R3)) + return false; + return tpcause == org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.CHORUS_FRUIT; + } + + public static List getPistonRetractBlocks(BlockPistonRetractEvent event) { + List blocks = new ArrayList(); + if (Version.isCurrentEqualOrLower(Version.v1_7_R4)) { + blocks.add(event.getBlock()); + } else { + blocks.addAll(event.getBlocks()); + } + return blocks; + } } diff --git a/src/plugin.yml b/src/plugin.yml index fe405b43d..a5e793716 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.2.10 +version: 4.9.2.11 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 32076b3d741c8804f78c443abeb1db1ca92f379e Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 12 Mar 2021 18:59:50 +0200 Subject: [PATCH 0840/1142] Getting rid of NMS classes --- .../bekvon/bukkit/cmiLib/CMIReflections.java | 128 ++++++++++++++++++ .../bekvon/bukkit/residence/Residence.java | 31 ----- .../bukkit/residence/allNms/v1_10_R1.java | 71 ---------- .../bukkit/residence/allNms/v1_11_R1.java | 71 ---------- .../bukkit/residence/allNms/v1_12_R1.java | 71 ---------- .../bukkit/residence/allNms/v1_13_R1.java | 53 -------- .../bukkit/residence/allNms/v1_13_R2.java | 53 -------- .../bukkit/residence/allNms/v1_14_R1.java | 53 -------- .../bukkit/residence/allNms/v1_15_R1.java | 51 ------- .../bukkit/residence/allNms/v1_16_R1.java | 51 ------- .../bukkit/residence/allNms/v1_16_R2.java | 50 ------- .../bukkit/residence/allNms/v1_16_R3.java | 50 ------- .../residence/allNms/v1_7_Couldron.java | 30 ---- .../bukkit/residence/allNms/v1_7_R4.java | 30 ---- .../bukkit/residence/allNms/v1_8_R1.java | 71 ---------- .../bukkit/residence/allNms/v1_8_R2.java | 71 ---------- .../bukkit/residence/allNms/v1_8_R3.java | 71 ---------- .../bukkit/residence/allNms/v1_9_R1.java | 70 ---------- .../bukkit/residence/allNms/v1_9_R2.java | 71 ---------- .../bukkit/residence/containers/NMS.java | 11 -- .../residence/selection/SelectionManager.java | 3 +- 21 files changed, 130 insertions(+), 1031 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_15_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_16_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_16_R3.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java delete mode 100644 src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java delete mode 100644 src/com/bekvon/bukkit/residence/containers/NMS.java diff --git a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java index a262daeff..43b813943 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java @@ -10,11 +10,15 @@ import java.lang.reflect.Method; import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import com.bekvon.bukkit.residence.utils.Debug; + public class CMIReflections { private static Class CraftServerClass; @@ -26,6 +30,10 @@ public class CMIReflections { private static Class CraftContainer; private static Class CraftContainers; private static Class PacketPlayOutOpenWindow; + private static Class PacketPlayOutWorldParticles; + private static Class EnumParticle; + private static Class ParticleParam; + private static Class CraftParticle; private static Class CraftPlayer; public static Class nmsChatSerializer; private static Class CraftBeehive; @@ -56,6 +64,16 @@ private static void initialize() { } catch (Throwable e) { e.printStackTrace(); } + try { + CraftParticle = getBukkitClass("CraftParticle"); + } catch (Throwable e) { + e.printStackTrace(); + } + try { + ParticleParam = getMinecraftClass("ParticleParam"); + } catch (Throwable e) { + e.printStackTrace(); + } try { CraftContainer = getMinecraftClass("Container"); } catch (Throwable e) { @@ -70,6 +88,17 @@ private static void initialize() { } catch (Throwable e) { e.printStackTrace(); } + try { + PacketPlayOutWorldParticles = getMinecraftClass("PacketPlayOutWorldParticles"); + } catch (Throwable e) { + e.printStackTrace(); + } + try { + if (Version.isCurrentEqualOrLower(Version.v1_12_R1)) + EnumParticle = getMinecraftClass("EnumParticle"); + } catch (Throwable e) { + e.printStackTrace(); + } try { NBTTagCompound = getMinecraftClass("NBTTagCompound"); } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) { @@ -429,4 +458,103 @@ public void setEndermiteActive(Entity ent, boolean state) { } + static Constructor effectConstructor = null; + static Method CraftParticleMethod = null; + + public static void playEffect(Player player, Location location, CMIEffect ef) { + if (location == null || ef == null || location.getWorld() == null || player == null || !player.isOnline()) + return; + + if (!location.getWorld().equals(player.getWorld())) + return; + + if (ef.getParticle() == null) + return; + + if (!ef.getParticle().isParticle()) + return; + + try { + + if (Version.isCurrentEqualOrLower(Version.v1_7_R4)) { + + Effect effect = ef.getParticle().getEffect(); + + if (effect == null) + return; + + if (effectConstructor == null) + effectConstructor = PacketPlayOutWorldParticles.getConstructor(String.class, float.class, float.class, float.class, float.class, float.class, float.class, float.class, int.class); + Object newPack = effectConstructor.newInstance(effect.name(), (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), + (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); + sendPlayerPacket(player, newPack); + } else if (Version.isCurrentEqualOrLower(Version.v1_12_R1)) { + + Effect effect = ef.getParticle().getEffect(); + + if (effect == null) + return; + + Object particle = ef.getParticle().getEnumParticle() == null ? null : EnumParticle.cast(ef.getParticle().getEnumParticle()); + int[] extra = ef.getParticle().getExtra(); + if (particle == null) { + for (Object p : EnumParticle.getEnumConstants()) { + if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || + ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { + particle = p; + if (ef.getParticle().getEffect().getData() != null) { + extra = new int[] { (0 << 12) | (0 & 0xFFF) }; + } + break; + } + } + if (extra == null) { + extra = new int[0]; + } + } + + if (particle == null) + return; + + if (ef.getParticle().getEnumParticle() == null) { + ef.getParticle().setEnumParticle(particle); + ef.getParticle().setExtra(extra); + } + + if (effectConstructor == null) + effectConstructor = PacketPlayOutWorldParticles.getConstructor(EnumParticle, boolean.class, float.class, float.class, float.class, float.class, float.class, float.class, float.class, + int.class, int[].class); + Object newPack = effectConstructor.newInstance(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), + (float) ef.getOffset().getY(), + (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); + + sendPlayerPacket(player, newPack); + } else { + + org.bukkit.Particle particle = ef.getParticle().getParticle(); + + if (particle == null) + return; + + org.bukkit.Particle.DustOptions dd = null; + if (particle.equals(org.bukkit.Particle.REDSTONE)) + dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); + + if (CraftParticleMethod == null) + CraftParticleMethod = CraftParticle.getMethod("toNMS", org.bukkit.Particle.class, Object.class); + + if (effectConstructor == null) + effectConstructor = PacketPlayOutWorldParticles.getConstructor(ParticleParam, boolean.class, double.class, double.class, double.class, float.class, float.class, float.class, + float.class, int.class); + + Object packet = effectConstructor.newInstance(CraftParticleMethod.invoke(null, particle, dd), true, location.getX(), location.getY(), location.getZ(), (float) ef + .getOffset().getX(), (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); + sendPlayerPacket(player, packet); + + } + } catch (Throwable e) { + e.printStackTrace(); + } + } } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 1ec964ad2..14f79e29f 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -11,16 +11,13 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.jar.JarEntry; @@ -66,7 +63,6 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeFlags; import com.bekvon.bukkit.residence.containers.MinimizeMessages; -import com.bekvon.bukkit.residence.containers.NMS; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.dynmap.DynMapListeners; import com.bekvon.bukkit.residence.dynmap.DynMapManager; @@ -228,7 +224,6 @@ public class Residence extends JavaPlugin { private String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; private String TempUserUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"; - private NMS nms; private LWC lwc; public HashMap rtMap = new HashMap(); @@ -322,10 +317,6 @@ public ResidenceApi getAPI() { } // API end - public NMS getNms() { - return nms; - } - private Runnable doHeals = new Runnable() { @Override public void run() { @@ -518,28 +509,6 @@ public void onEnable() { } catch (Exception e) { } - String version = versionChecker.getVersion().getShortVersion(); - try { - Class nmsClass; - if (getConfigManager().CouldronCompatibility()) - nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms.v1_7_Couldron"); - else - nmsClass = Class.forName("com.bekvon.bukkit.residence.allNms." + versionChecker.getVersion()); - if (NMS.class.isAssignableFrom(nmsClass)) { - nms = (NMS) nmsClass.getConstructor().newInstance(); - } else { - System.out.println("Something went wrong, please note down version and contact author v:" + versionChecker.getVersion()); - this.setEnabled(false); - Bukkit.shutdown(); - } - } catch (SecurityException | NoSuchMethodException | InvocationTargetException | IllegalArgumentException | IllegalAccessException | InstantiationException - | ClassNotFoundException e) { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Your server version is not compatible with this plugins version! Plugin will be disabled: " + version + " and server will shutdown"); - this.setEnabled(false); - Bukkit.shutdown(); - return; - } - this.getPermissionManager().startCacheClearScheduler(); imanager = new WorldItemManager(this); diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java deleted file mode 100644 index b679533e5..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_10_R1.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_10_R1.EnumParticle; -import net.minecraft.server.v1_10_R1.Packet; -import net.minecraft.server.v1_10_R1.PacketPlayOutWorldParticles; - -public class v1_10_R1 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - Packet packet = null; - if (ef.getParticle().getEffect() == null) - return; - if (!ef.getParticle().isParticle()) { -// int packetData = effect.getId(); -// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); - } else { - Particle effect = ef.getParticle().getParticle(); - - EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); - int[] extra = ef.getParticle().getExtra(); - if (particle == null) { - for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - break; - } - } - if (extra == null) { - extra = new int[0]; - } - } - - if (particle == null) - return; - - if (ef.getParticle().getEnumParticle() == null) { - ef.getParticle().setEnumParticle(particle); - ef.getParticle().setExtra(extra); - } - - packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), - (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); - } - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - if (packet == null) - return; - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java deleted file mode 100644 index a3b9a5fa1..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_11_R1.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_11_R1.EnumParticle; -import net.minecraft.server.v1_11_R1.Packet; -import net.minecraft.server.v1_11_R1.PacketPlayOutWorldParticles; - -public class v1_11_R1 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - Packet packet = null; - if (ef.getParticle().getEffect() == null) - return; - if (!ef.getParticle().isParticle()) { -// int packetData = effect.getId(); -// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); - } else { - Particle effect = ef.getParticle().getParticle(); - - EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); - int[] extra = ef.getParticle().getExtra(); - if (particle == null) { - for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - break; - } - } - if (extra == null) { - extra = new int[0]; - } - } - - if (particle == null) - return; - - if (ef.getParticle().getEnumParticle() == null) { - ef.getParticle().setEnumParticle(particle); - ef.getParticle().setExtra(extra); - } - - packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), - (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); - } - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - if (packet == null) - return; - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java deleted file mode 100644 index 88ed3cd07..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_12_R1.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_12_R1.EnumParticle; -import net.minecraft.server.v1_12_R1.Packet; -import net.minecraft.server.v1_12_R1.PacketPlayOutWorldParticles; - -public class v1_12_R1 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - Packet packet = null; - if (ef.getParticle().getEffect() == null) - return; - if (!ef.getParticle().isParticle()) { -// int packetData = effect.getId(); -// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); - } else { - Particle effect = ef.getParticle().getParticle(); - - EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); - int[] extra = ef.getParticle().getExtra(); - if (particle == null) { - for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - break; - } - } - if (extra == null) { - extra = new int[0]; - } - } - - if (particle == null) - return; - - if (ef.getParticle().getEnumParticle() == null) { - ef.getParticle().setEnumParticle(particle); - ef.getParticle().setExtra(extra); - } - - packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), - (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); - } - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - if (packet == null) - return; - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java deleted file mode 100644 index f53b47c5f..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R1.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Location; -import org.bukkit.Particle.DustOptions; -import org.bukkit.craftbukkit.v1_13_R1.CraftParticle; -import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_13_R1.Packet; -import net.minecraft.server.v1_13_R1.PacketPlayOutWorldParticles; - -public class v1_13_R1 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - - CMIParticle effect = ef.getParticle(); - if (effect == null) - return; - if (!effect.isParticle()) { - return; - } - - org.bukkit.Particle particle = effect.getParticle(); - - if (particle == null) - return; - -// CMI.getInstance().d(particle, effect.name()); - - DustOptions dd = null; - if (particle.equals(org.bukkit.Particle.REDSTONE)) - dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); - - Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), - (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); - - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java deleted file mode 100644 index 407d3526b..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13_R2.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Location; -import org.bukkit.Particle.DustOptions; -import org.bukkit.craftbukkit.v1_13_R2.CraftParticle; -import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_13_R2.Packet; -import net.minecraft.server.v1_13_R2.PacketPlayOutWorldParticles; - -public class v1_13_R2 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - - CMIParticle effect = ef.getParticle(); - if (effect == null) - return; - if (!effect.isParticle()) { - return; - } - - org.bukkit.Particle particle = effect.getParticle(); - - if (particle == null) - return; - -// CMI.getInstance().d(particle, effect.name()); - - DustOptions dd = null; - if (particle.equals(org.bukkit.Particle.REDSTONE)) - dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); - - Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), - (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); - - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java deleted file mode 100644 index cac620aeb..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_14_R1.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Location; -import org.bukkit.Particle.DustOptions; -import org.bukkit.craftbukkit.v1_14_R1.CraftParticle; -import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_14_R1.Packet; -import net.minecraft.server.v1_14_R1.PacketPlayOutWorldParticles; - -public class v1_14_R1 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - - CMIParticle effect = ef.getParticle(); - if (effect == null) - return; - if (!effect.isParticle()) { - return; - } - - org.bukkit.Particle particle = effect.getParticle(); - - if (particle == null) - return; - -// CMI.getInstance().d(particle, effect.name()); - - DustOptions dd = null; - if (particle.equals(org.bukkit.Particle.REDSTONE)) - dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); - - Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), - (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); - - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_15_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_15_R1.java deleted file mode 100644 index 0e63a3311..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_15_R1.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Location; -import org.bukkit.Particle.DustOptions; -import org.bukkit.craftbukkit.v1_15_R1.CraftParticle; -import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_15_R1.Packet; -import net.minecraft.server.v1_15_R1.PacketPlayOutWorldParticles; - -public class v1_15_R1 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - - CMIParticle effect = ef.getParticle(); - if (effect == null) - return; - if (!effect.isParticle()) { - return; - } - - org.bukkit.Particle particle = effect.getParticle(); - - if (particle == null) - return; - - DustOptions dd = null; - if (particle.equals(org.bukkit.Particle.REDSTONE)) - dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); - - Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), - (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); - - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_16_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_16_R1.java deleted file mode 100644 index 777b11d5b..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_16_R1.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Location; -import org.bukkit.Particle.DustOptions; -import org.bukkit.craftbukkit.v1_16_R1.CraftParticle; -import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_16_R1.Packet; -import net.minecraft.server.v1_16_R1.PacketPlayOutWorldParticles; - -public class v1_16_R1 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - - CMIParticle effect = ef.getParticle(); - if (effect == null) - return; - if (!effect.isParticle()) { - return; - } - - org.bukkit.Particle particle = effect.getParticle(); - - if (particle == null) - return; - - DustOptions dd = null; - if (particle.equals(org.bukkit.Particle.REDSTONE)) - dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); - - Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), - (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); - - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java deleted file mode 100644 index 0820cdc5e..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_16_R2.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Location; -import org.bukkit.Particle.DustOptions; -import org.bukkit.craftbukkit.v1_16_R2.CraftParticle; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_16_R2.Packet; -import net.minecraft.server.v1_16_R2.PacketPlayOutWorldParticles; - -public class v1_16_R2 implements NMS { - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - - CMIParticle effect = ef.getParticle(); - if (effect == null) - return; - if (!effect.isParticle()) { - return; - } - - org.bukkit.Particle particle = effect.getParticle(); - - if (particle == null) - return; - - DustOptions dd = null; - if (particle.equals(org.bukkit.Particle.REDSTONE)) - dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); - - Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), - (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); - - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_16_R3.java b/src/com/bekvon/bukkit/residence/allNms/v1_16_R3.java deleted file mode 100644 index 1d0586a86..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_16_R3.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Location; -import org.bukkit.Particle.DustOptions; -import org.bukkit.craftbukkit.v1_16_R3.CraftParticle; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_16_R3.Packet; -import net.minecraft.server.v1_16_R3.PacketPlayOutWorldParticles; - -public class v1_16_R3 implements NMS { - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - - CMIParticle effect = ef.getParticle(); - if (effect == null) - return; - if (!effect.isParticle()) { - return; - } - - org.bukkit.Particle particle = effect.getParticle(); - - if (particle == null) - return; - - DustOptions dd = null; - if (particle.equals(org.bukkit.Particle.REDSTONE)) - dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); - - Packet packet = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle, dd), true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), - (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); - - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java deleted file mode 100644 index 46917c6cd..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_Couldron.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; - -public class v1_7_Couldron implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - Effect effect = ef.getParticle().getEffect(); - if (effect == null) - return; - PacketPlayOutWorldParticles packet = new PacketPlayOutWorldParticles(effect.name(), (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), - (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java b/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java deleted file mode 100644 index 4a92945b8..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_7_R4.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_7_R4.PacketPlayOutWorldParticles; - -public class v1_7_R4 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - Effect effect = ef.getParticle().getEffect(); - if (effect == null) - return; - PacketPlayOutWorldParticles packet = new PacketPlayOutWorldParticles(effect.name(), (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), - (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java deleted file mode 100644 index 4fe93663f..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R1.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_8_R1.EnumParticle; -import net.minecraft.server.v1_8_R1.Packet; -import net.minecraft.server.v1_8_R1.PacketPlayOutWorldParticles; - -public class v1_8_R1 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - Packet packet = null; - if (ef.getParticle().getEffect() == null) - return; - if (!ef.getParticle().isParticle()) { -// int packetData = effect.getId(); -// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); - } else { - Effect effect = ef.getParticle().getEffect(); - - EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); - int[] extra = ef.getParticle().getExtra(); - if (particle == null) { - for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - break; - } - } - if (extra == null) { - extra = new int[0]; - } - } - - if (particle == null) - return; - - if (ef.getParticle().getEnumParticle() == null) { - ef.getParticle().setEnumParticle(particle); - ef.getParticle().setExtra(extra); - } - - packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), - (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); - } - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - if (packet == null) - return; - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java deleted file mode 100644 index 8c3ab8b9f..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R2.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_8_R2.EnumParticle; -import net.minecraft.server.v1_8_R2.Packet; -import net.minecraft.server.v1_8_R2.PacketPlayOutWorldParticles; - -public class v1_8_R2 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - Packet packet = null; - if (ef.getParticle().getEffect() == null) - return; - if (!ef.getParticle().isParticle()) { -// int packetData = effect.getId(); -// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); - } else { - Effect effect = ef.getParticle().getEffect(); - - EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); - int[] extra = ef.getParticle().getExtra(); - if (particle == null) { - for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - break; - } - } - if (extra == null) { - extra = new int[0]; - } - } - - if (particle == null) - return; - - if (ef.getParticle().getEnumParticle() == null) { - ef.getParticle().setEnumParticle(particle); - ef.getParticle().setExtra(extra); - } - - packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), - (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); - } - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - if (packet == null) - return; - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java b/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java deleted file mode 100644 index 2548c3c92..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_8_R3.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_8_R3.EnumParticle; -import net.minecraft.server.v1_8_R3.Packet; -import net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles; - -public class v1_8_R3 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - Packet packet = null; - if (ef.getParticle().getEffect() == null) - return; - if (!ef.getParticle().isParticle()) { -// int packetData = effect.getId(); -// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); - } else { - Effect effect = ef.getParticle().getEffect(); - - EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); - int[] extra = ef.getParticle().getExtra(); - if (particle == null) { - for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - break; - } - } - if (extra == null) { - extra = new int[0]; - } - } - - if (particle == null) - return; - - if (ef.getParticle().getEnumParticle() == null) { - ef.getParticle().setEnumParticle(particle); - ef.getParticle().setExtra(extra); - } - - packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), - (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); - } - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - if (packet == null) - return; - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java deleted file mode 100644 index 5e3251274..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R1.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_9_R1.EnumParticle; -import net.minecraft.server.v1_9_R1.Packet; -import net.minecraft.server.v1_9_R1.PacketPlayOutWorldParticles; - -public class v1_9_R1 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - if (!location.getWorld().equals(player.getWorld())) - return; - Packet packet = null; - if (ef.getParticle().getEffect() == null) - return; - if (!ef.getParticle().isParticle()) { -// int packetData = effect.getId(); -// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); - } else { - Particle effect = ef.getParticle().getParticle(); - - EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); - int[] extra = ef.getParticle().getExtra(); - if (particle == null) { - for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - break; - } - } - if (extra == null) { - extra = new int[0]; - } - } - - if (particle == null) - return; - - if (ef.getParticle().getEnumParticle() == null) { - ef.getParticle().setEnumParticle(particle); - ef.getParticle().setExtra(extra); - } - - packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), - (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); - } - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (packet == null) - return; - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java b/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java deleted file mode 100644 index 64153ae91..000000000 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9_R2.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.bekvon.bukkit.residence.allNms; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.residence.containers.NMS; - -import net.minecraft.server.v1_9_R2.EnumParticle; -import net.minecraft.server.v1_9_R2.Packet; -import net.minecraft.server.v1_9_R2.PacketPlayOutWorldParticles; - -public class v1_9_R2 implements NMS { - - @Override - public void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null) - return; - Packet packet = null; - if (ef.getParticle().getEffect() == null) - return; - if (!ef.getParticle().isParticle()) { -// int packetData = effect.getId(); -// packet = new PacketPlayOutWorldEvent(packetData, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()), id, false); - } else { - Particle effect = ef.getParticle().getParticle(); - - EnumParticle particle = ef.getParticle().getEnumParticle() == null ? null : (EnumParticle) ef.getParticle().getEnumParticle(); - int[] extra = ef.getParticle().getExtra(); - if (particle == null) { - for (EnumParticle p : EnumParticle.values()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - break; - } - } - if (extra == null) { - extra = new int[0]; - } - } - - if (particle == null) - return; - - if (ef.getParticle().getEnumParticle() == null) { - ef.getParticle().setEnumParticle(particle); - ef.getParticle().setExtra(extra); - } - - packet = new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), (float) ef.getOffset().getY(), - (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); - } - CraftPlayer cPlayer = (CraftPlayer) player; - if (cPlayer.getHandle().playerConnection == null) - return; - - if (!location.getWorld().equals(cPlayer.getWorld())) - return; - - if (packet == null) - return; - cPlayer.getHandle().playerConnection.sendPacket(packet); - } -} diff --git a/src/com/bekvon/bukkit/residence/containers/NMS.java b/src/com/bekvon/bukkit/residence/containers/NMS.java deleted file mode 100644 index 2a2409a4b..000000000 --- a/src/com/bekvon/bukkit/residence/containers/NMS.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.bekvon.bukkit.residence.containers; - -import org.bukkit.Location; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIEffect; - -public interface NMS { - - void playEffect(Player player, Location location, CMIEffect ef); -} diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 4b8c83f5d..0520b5737 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -22,6 +22,7 @@ import com.bekvon.bukkit.cmiLib.ActionBarManager; import com.bekvon.bukkit.cmiLib.CMIEffect; import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; +import com.bekvon.bukkit.cmiLib.CMIReflections; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.SelectionSides; @@ -836,7 +837,7 @@ private void showParticles(List locList, Player player, int timesMore, CMIEffect ef = new CMIEffect(effect); - Residence.getInstance().getNms().playEffect(player, l, ef); + CMIReflections.playEffect(player, l, ef); } } From f23576a47e37296dda22bf6f45d9e857351f639b Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Mar 2021 14:15:20 +0200 Subject: [PATCH 0841/1142] Better reslist save into file --- .../bukkit/residence/chat/ChatChannel.java | 1 - .../residence/text/help/InformationPager.java | 21 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index 85da38a7c..e2339258d 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -13,7 +13,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceChatEvent; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.sun.jna.platform.win32.LMAccess; public class ChatChannel { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index b1eb34b33..66556ed6b 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -1,7 +1,11 @@ package com.bekvon.bukkit.residence.text.help; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStreamWriter; +import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; @@ -9,13 +13,14 @@ import java.util.Map.Entry; import java.util.TreeMap; -import org.apache.commons.io.FileUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.Zrips.CMI.CMI; import com.bekvon.bukkit.cmiLib.CMIChatColor; +import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -282,7 +287,6 @@ public void run() { sb.append(msg); sb.append(" \n"); -// sender.sendMessage(msg); } File BackupDir = new File(Residence.getInstance().getDataLocation(), "FullLists"); @@ -290,14 +294,17 @@ public void run() { BackupDir.mkdir(); Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); + File file = new File(BackupDir, dateFormat.format(date) + ".txt"); - try { - FileUtils.writeStringToFile(file, sb.toString(), "UTF-8"); - } catch (IOException e) { + try ( + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), StandardCharsets.UTF_8));) { + writer.append(sb.toString()); + writer.flush(); + } catch (Exception e) { e.printStackTrace(); } + Bukkit.getConsoleSender().sendMessage("Saved file to FullLists folder with " + file.getName() + " name"); - return; } }); } @@ -337,7 +344,7 @@ public void ShowPagination(CommandSender sender, int pageCount, int CurrentPage, rm.addText(plugin.msg(lm.General_pageCount, CurrentPage, pageCount)).addHover(plugin.msg(lm.General_pageCountHover, totalEntries)); rm.addText(plugin.msg(pageCount > CurrentPage ? lm.General_nextPage : lm.General_nextPageOff)).addHover( pageCount > CurrentPage ? plugin.msg(lm.General_nextPageHover) : plugin.msg(lm.General_firstPageHover)).addCommand( - pageCount > CurrentPage ? cmd + " " + pagePrefix + NextPage : cmd + " " + pagePrefix + 1); + pageCount > CurrentPage ? cmd + " " + pagePrefix + NextPage : cmd + " " + pagePrefix + 1); if (pageCount != 0) rm.show(sender); } From 55f56c13a790a3c6d00b4350350a7b6af7867420 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Mar 2021 14:21:44 +0200 Subject: [PATCH 0842/1142] Dropping BOSEconomy support --- .../bekvon/bukkit/residence/Residence.java | 20 ----- .../residence/containers/EconomyType.java | 12 +-- .../bukkit/residence/economy/BOSEAdapter.java | 78 ------------------- src/plugin.yml | 2 +- 4 files changed, 7 insertions(+), 105 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 14f79e29f..3db09b9ce 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -66,7 +66,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.dynmap.DynMapListeners; import com.bekvon.bukkit.residence.dynmap.DynMapManager; -import com.bekvon.bukkit.residence.economy.BOSEAdapter; import com.bekvon.bukkit.residence.economy.BlackHoleEconomy; import com.bekvon.bukkit.residence.economy.CMIEconomy; import com.bekvon.bukkit.residence.economy.EconomyInterface; @@ -129,7 +128,6 @@ import com.residence.mcstats.Metrics; import com.residence.zip.ZipLibrary; -import cosine.boseconomy.BOSEconomy; import fr.crafter.tickleman.realeconomy.RealEconomy; import fr.crafter.tickleman.realplugin.RealPlugin; @@ -558,9 +556,6 @@ public void onEnable() { if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { Bukkit.getConsoleSender().sendMessage(getPrefix() + " Scanning for economy systems..."); switch (this.getConfigManager().getEconomyType()) { - case BOSEconomy: - this.loadBOSEconomy(); - break; case CMIEconomy: this.loadCMIEconomy(); break; @@ -583,9 +578,6 @@ public void onEnable() { if (economy == null) { this.loadCMIEconomy(); } - if (economy == null) { - this.loadBOSEconomy(); - } if (economy == null) { this.loadEssentialsEconomy(); } @@ -1157,16 +1149,6 @@ private void loadIConomy() { } } - private void loadBOSEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("BOSEconomy"); - if (p != null) { - economy = new BOSEAdapter((BOSEconomy) p); - consoleMessage("Successfully linked with &5BOSEconomy"); - } else { - consoleMessage("BOSEconomy NOT found!"); - } - } - private void loadEssentialsEconomy() { Plugin p = getServer().getPluginManager().getPlugin("Essentials"); if (p != null) { @@ -1362,8 +1344,6 @@ protected boolean loadYml() throws Exception { File loadFile; HashMap worlds = new HashMap<>(); - - for (String worldName : this.getResidenceManager().getWorldNames()) { loadFile = new File(worldFolder, saveFilePrefix + worldName + ".yml"); if (loadFile.isFile()) { diff --git a/src/com/bekvon/bukkit/residence/containers/EconomyType.java b/src/com/bekvon/bukkit/residence/containers/EconomyType.java index a600283d9..707b93b5b 100644 --- a/src/com/bekvon/bukkit/residence/containers/EconomyType.java +++ b/src/com/bekvon/bukkit/residence/containers/EconomyType.java @@ -2,7 +2,7 @@ public enum EconomyType { - Vault, iConomy, MineConomy, Essentials, BOSEconomy, RealEconomy, CMIEconomy, None; + Vault, iConomy, MineConomy, Essentials, RealEconomy, CMIEconomy, None; public static EconomyType getByName(String string) { for (EconomyType one : EconomyType.values()) { @@ -13,12 +13,12 @@ public static EconomyType getByName(String string) { } public static String toStringLine() { - String l = ""; + StringBuilder l = new StringBuilder(); for (EconomyType one : EconomyType.values()) { - if (!l.isEmpty()) - l += ", "; - l += one.toString(); + if (!l.toString().isEmpty()) + l.append(", "); + l.append(one.toString()); } - return l; + return l.toString(); } } diff --git a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java b/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java deleted file mode 100644 index 1240eb8f9..000000000 --- a/src/com/bekvon/bukkit/residence/economy/BOSEAdapter.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.bekvon.bukkit.residence.economy; - -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; - -import cosine.boseconomy.BOSEconomy; - -public class BOSEAdapter implements EconomyInterface { - - BOSEconomy plugin; - - public BOSEAdapter(BOSEconomy p) { - plugin = p; - String serverland = Residence.getInstance().getServerLandName(); - if (!plugin.playerRegistered(serverland, false)) { - plugin.registerPlayer(serverland); - } - } - - @Override - public double getBalance(Player player) { - return plugin.getPlayerMoneyDouble(player.getName()); - } - - @Override - public double getBalance(String playerName) { - return plugin.getPlayerMoneyDouble(playerName); - } - - @Override - public boolean canAfford(String playerName, double amount) { - double balance = plugin.getPlayerMoneyDouble(playerName); - if (balance >= amount) { - return true; - } - return false; - } - - @Override - public boolean add(String playerName, double amount) { - return plugin.setPlayerMoney(playerName, plugin.getPlayerMoneyDouble(playerName) + amount, false); - } - - @Override - public boolean subtract(String playerName, double amount) { - if (canAfford(playerName, amount)) { - return plugin.setPlayerMoney(playerName, plugin.getPlayerMoneyDouble(playerName) - amount, false); - } - return false; - } - - @Override - public boolean transfer(String playerFrom, String playerTo, double amount) { - if (canAfford(playerFrom, amount)) { - if (!subtract(playerFrom, amount)) { - return false; - } - if (!add(playerTo, amount)) { - add(playerFrom, amount); - return false; - } - return true; - } - return false; - } - - @Override - public String getName() { - return "BOSEconomy"; - } - - @Override - public String format(double amount) { - return plugin.getMoneyFormatted(amount); - } - -} \ No newline at end of file diff --git a/src/plugin.yml b/src/plugin.yml index a5e793716..e2faf668f 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -5,7 +5,7 @@ website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 authors: [bekvon,nate302,t00thpick1] -softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI,ServerControlReloaded,Slimefun,CS-CoreLib] +softdepend: [Vault,Essentials,RealPlugin,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI,ServerControlReloaded,Slimefun,CS-CoreLib] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: From 87e1361fa50350389e1607729d41deb005b83444 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Mar 2021 14:25:28 +0200 Subject: [PATCH 0843/1142] Dropping Iconomy5 support, still supporting Iconomy6 --- .../bekvon/bukkit/residence/Residence.java | 3 - .../residence/economy/IConomy5Adapter.java | 72 ------------------- 2 files changed, 75 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 3db09b9ce..84612583d 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -70,7 +70,6 @@ import com.bekvon.bukkit.residence.economy.CMIEconomy; import com.bekvon.bukkit.residence.economy.EconomyInterface; import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter; -import com.bekvon.bukkit.residence.economy.IConomy5Adapter; import com.bekvon.bukkit.residence.economy.IConomy6Adapter; import com.bekvon.bukkit.residence.economy.RealShopEconomy; import com.bekvon.bukkit.residence.economy.TransactionManager; @@ -1136,8 +1135,6 @@ private void loadIConomy() { if (p != null) { if (p.getDescription().getVersion().startsWith("6")) { economy = new IConomy6Adapter((com.iCo6.iConomy) p); - } else if (p.getDescription().getVersion().startsWith("5")) { - economy = new IConomy5Adapter(); } else { consoleMessage("UNKNOWN iConomy version!"); return; diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java deleted file mode 100644 index a46872dc4..000000000 --- a/src/com/bekvon/bukkit/residence/economy/IConomy5Adapter.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.bekvon.bukkit.residence.economy; - -import org.bukkit.entity.Player; - -import com.iConomy.iConomy; -import com.iConomy.system.Account; - -public class IConomy5Adapter implements EconomyInterface { - - @Override - public double getBalance(Player player) { - Account acc = iConomy.getAccount(player.getName()); - return (acc == null) ? 0 : acc.getHoldings().balance(); - } - - @Override - public double getBalance(String playerName) { - Account acc = iConomy.getAccount(playerName); - return (acc == null) ? 0 : acc.getHoldings().balance(); - } - - @Override - public boolean canAfford(String playerName, double amount) { - if (amount == 0) { - return true; - } - Account acc = iConomy.getAccount(playerName); - return (acc == null) ? false : acc.getHoldings().hasEnough(amount); - } - - @Override - public boolean add(String playerName, double amount) { - Account acc = iConomy.getAccount(playerName); - if (acc != null) { - acc.getHoldings().add(amount); - return true; - } - return false; - } - - @Override - public boolean subtract(String playerName, double amount) { - Account acc = iConomy.getAccount(playerName); - if (acc != null) { - acc.getHoldings().subtract(amount); - return true; - } - return false; - } - - @Override - public boolean transfer(String playerFrom, String playerTo, double amount) { - Account accFrom = iConomy.getAccount(playerFrom); - Account accTo = iConomy.getAccount(playerTo); - if (accFrom != null && accTo != null) { - accFrom.getHoldings().subtract(amount); - accTo.getHoldings().add(amount); - return true; - } - return false; - } - - @Override - public String getName() { - return "iConomy"; - } - - @Override - public String format(double amount) { - return iConomy.format(amount); - } -} From fcbaac2b8c36e163c710e32db254ebaca3d5382c Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Mar 2021 14:27:34 +0200 Subject: [PATCH 0844/1142] Dropping LuckPerms 4 support, still supporting LuckPerms5 --- .../permissions/LuckPerms4Adapter.java | 37 ------------------- .../permissions/PermissionManager.java | 6 +-- .../permissions/PermissionsBukkitAdapter.java | 2 +- 3 files changed, 2 insertions(+), 43 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/permissions/LuckPerms4Adapter.java diff --git a/src/com/bekvon/bukkit/residence/permissions/LuckPerms4Adapter.java b/src/com/bekvon/bukkit/residence/permissions/LuckPerms4Adapter.java deleted file mode 100644 index da548de8c..000000000 --- a/src/com/bekvon/bukkit/residence/permissions/LuckPerms4Adapter.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.bekvon.bukkit.residence.permissions; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.plugin.ServicesManager; - -import me.lucko.luckperms.api.LuckPermsApi; -import me.lucko.luckperms.api.User; - -public class LuckPerms4Adapter implements PermissionsInterface { - - LuckPermsApi api = null; - - public LuckPerms4Adapter() { - ServicesManager manager = Bukkit.getServicesManager(); - if (manager.isProvidedFor(LuckPermsApi.class)) { - api = manager.getRegistration(LuckPermsApi.class).getProvider(); - } - } - - @Override - public String getPlayerGroup(Player player) { - User user = api.getUser(player.getUniqueId()); - if (user == null) - return ""; - return user.getPrimaryGroup(); - } - - @Override - public String getPlayerGroup(String player, String world) { - User user = api.getUser(player); - if (user == null) - return ""; - return user.getPrimaryGroup(); - } - -} diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 8b9ed6053..294ac2f84 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -141,11 +141,7 @@ private void checkPermissions() { Plugin pl = pluginManager.getPlugin("LuckPerms"); if (pl != null && pl.isEnabled()) { Integer ver = plugin.getVersionChecker().convertVersion(pl.getDescription().getVersion()); - if (ver >= 40000 && ver < 50000) { - perms = new LuckPerms4Adapter(); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found LuckPerms4 Plugin!"); - return; - } else if (ver > 50000) { + if (ver > 50000) { perms = new LuckPerms5Adapter(); Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found LuckPerms5 Plugin!"); return; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java b/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java index 47022bae1..4ba166103 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java @@ -29,7 +29,7 @@ public String getPlayerGroup(String player, String world) { return name; } } - if (groups.size() > 0) { + if (!groups.isEmpty()) { return groups.get(0).getName().toLowerCase(); } return null; From 7336b1a8aab50d6262e615337b62acdbbfbdeda0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Mar 2021 14:46:05 +0200 Subject: [PATCH 0845/1142] Removing Legacy permission plugins from supported list --- .../bukkit/residence/ConfigManager.java | 9 +---- .../bekvon/bukkit/residence/Residence.java | 2 - .../residence/containers/EconomyType.java | 2 +- .../permissions/LegacyPermissions.java | 27 ------------- .../permissions/OriginalPermissions.java | 28 -------------- .../permissions/PermissionManager.java | 21 +--------- .../permissions/PermissionsBukkitAdapter.java | 38 ------------------- src/plugin.yml | 2 +- 8 files changed, 4 insertions(+), 125 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/permissions/LegacyPermissions.java delete mode 100644 src/com/bekvon/bukkit/residence/permissions/OriginalPermissions.java delete mode 100644 src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 1c587f6ba..2db6594de 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -160,7 +160,7 @@ public class ConfigManager { protected boolean preventBuildInRent; protected boolean PreventSubZoneRemoval; protected boolean stopOnSaveError; - protected boolean legacyperms; + protected String namefix; protected boolean showIntervalMessages; protected boolean ShowNoobMessage; @@ -951,9 +951,6 @@ public void UpdateConfigFile() { c.addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); c.get("Global.EnablePermissions", true); - c.addComment("Global.LegacyPermissions", "Set to true if NOT using Permissions or PermissionsBukkit, or using a really old version of Permissions"); - legacyperms = c.get("Global.LegacyPermissions", false); - c.addComment("Global.EnableEconomy", "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); enableEconomy = c.get("Global.EnableEconomy", true); @@ -1514,10 +1511,6 @@ public boolean isTeleportTitleMessage() { return TeleportTitleMessage; } - public boolean useLegacyPermissions() { - return legacyperms; - } - public String getDefaultGroup() { return defaultGroup; } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 84612583d..6aab68771 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -561,8 +561,6 @@ public void onEnable() { case Essentials: this.loadEssentialsEconomy(); break; - case MineConomy: - break; case None: if (this.getPermissionManager().getPermissionsPlugin() instanceof ResidenceVaultAdapter) { ResidenceVaultAdapter vault = (ResidenceVaultAdapter) this.getPermissionManager().getPermissionsPlugin(); diff --git a/src/com/bekvon/bukkit/residence/containers/EconomyType.java b/src/com/bekvon/bukkit/residence/containers/EconomyType.java index 707b93b5b..c45673ce9 100644 --- a/src/com/bekvon/bukkit/residence/containers/EconomyType.java +++ b/src/com/bekvon/bukkit/residence/containers/EconomyType.java @@ -2,7 +2,7 @@ public enum EconomyType { - Vault, iConomy, MineConomy, Essentials, RealEconomy, CMIEconomy, None; + Vault, iConomy, Essentials, RealEconomy, CMIEconomy, None; public static EconomyType getByName(String string) { for (EconomyType one : EconomyType.values()) { diff --git a/src/com/bekvon/bukkit/residence/permissions/LegacyPermissions.java b/src/com/bekvon/bukkit/residence/permissions/LegacyPermissions.java deleted file mode 100644 index 93cac1390..000000000 --- a/src/com/bekvon/bukkit/residence/permissions/LegacyPermissions.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.bekvon.bukkit.residence.permissions; - -import com.nijiko.permissions.PermissionHandler; -import org.bukkit.entity.Player; - -public class LegacyPermissions implements PermissionsInterface { - - PermissionHandler authority; - - public LegacyPermissions(PermissionHandler perms) { - authority = perms; - } - - @Override - public String getPlayerGroup(Player player) { - return this.getPlayerGroup(player.getName(), player.getWorld().getName()); - } - - @Override - public String getPlayerGroup(String player, String world) { - String group = authority.getPrimaryGroup(world, player); - if (group != null) - return group.toLowerCase(); - return null; - } - -} diff --git a/src/com/bekvon/bukkit/residence/permissions/OriginalPermissions.java b/src/com/bekvon/bukkit/residence/permissions/OriginalPermissions.java deleted file mode 100644 index 06c7b5561..000000000 --- a/src/com/bekvon/bukkit/residence/permissions/OriginalPermissions.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.bekvon.bukkit.residence.permissions; - -import com.nijiko.permissions.PermissionHandler; -import org.bukkit.entity.Player; - -public class OriginalPermissions implements PermissionsInterface { - - PermissionHandler authority; - - public OriginalPermissions(PermissionHandler perms) { - authority = perms; - } - - @Override - public String getPlayerGroup(Player player) { - return this.getPlayerGroup(player.getName(), player.getWorld().getName()); - } - - @Override - public String getPlayerGroup(String player, String world) { - String group = authority.getPrimaryGroup(world, player); - if (group != null) { - return group.toLowerCase(); - } - return null; - } - -} diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 294ac2f84..993c59087 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -33,8 +33,6 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; -import com.nijikokun.bukkit.Permissions.Permissions; -import com.platymuus.bukkit.permissions.PermissionsPlugin; public class PermissionManager { protected static PermissionsInterface perms; @@ -130,12 +128,6 @@ private void checkPermissions() { } Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Vault, but Vault reported no usable permissions system..."); } - p = server.getPluginManager().getPlugin("PermissionsBukkit"); - if (p != null) { - perms = new PermissionsBukkitAdapter((PermissionsPlugin) p); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found PermissionsBukkit Plugin!"); - return; - } PluginManager pluginManager = plugin.getServer().getPluginManager(); Plugin pl = pluginManager.getPlugin("LuckPerms"); @@ -155,18 +147,7 @@ private void checkPermissions() { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found bPermissions Plugin!"); return; } - p = server.getPluginManager().getPlugin("Permissions"); - if (p != null) { - if (plugin.getConfigManager().useLegacyPermissions()) { - perms = new LegacyPermissions(((Permissions) p).getHandler()); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Permissions Plugin!"); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + "Permissions running in Legacy mode!"); - } else { - perms = new OriginalPermissions(((Permissions) p).getHandler()); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Permissions Plugin!"); - } - return; - } + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Permissions plugin NOT FOUND!"); } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java b/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java deleted file mode 100644 index 4ba166103..000000000 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionsBukkitAdapter.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.bekvon.bukkit.residence.permissions; - -import com.bekvon.bukkit.residence.Residence; -import com.platymuus.bukkit.permissions.Group; -import com.platymuus.bukkit.permissions.PermissionsPlugin; -import java.util.List; -import org.bukkit.entity.Player; - -public class PermissionsBukkitAdapter implements PermissionsInterface { - - PermissionsPlugin newperms; - - public PermissionsBukkitAdapter(PermissionsPlugin p) { - newperms = p; - } - - @Override - public String getPlayerGroup(Player player) { - return this.getPlayerGroup(player.getName(), player.getWorld().getName()); - } - - @Override - public String getPlayerGroup(String player, String world) { - PermissionManager pmanager = Residence.getInstance().getPermissionManager(); - List groups = newperms.getGroups(player); - for (Group group : groups) { - String name = group.getName().toLowerCase(); - if (pmanager.hasGroup(name)) { - return name; - } - } - if (!groups.isEmpty()) { - return groups.get(0).getName().toLowerCase(); - } - return null; - } - -} diff --git a/src/plugin.yml b/src/plugin.yml index e2faf668f..936594ab1 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -5,7 +5,7 @@ website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 authors: [bekvon,nate302,t00thpick1] -softdepend: [Vault,Essentials,RealPlugin,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI,ServerControlReloaded,Slimefun,CS-CoreLib] +softdepend: [Vault,Essentials,RealPlugin,iConomy,bPermissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI,ServerControlReloaded,Slimefun,CS-CoreLib] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: From cc692265619fa1b528156d00f7f5f638bec926fe Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Mar 2021 16:26:42 +0200 Subject: [PATCH 0846/1142] Allowing teleportation to residence with residence.admin.tp --- .../bukkit/residence/economy/EssentialsEcoAdapter.java | 4 ++-- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 ++ .../bukkit/residence/protection/ClaimedResidence.java | 6 +++--- src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java | 6 +++--- src/plugin.yml | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index b9caee05e..da60f9887 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -23,8 +23,8 @@ public EssentialsEcoAdapter(Essentials p) { @Override public double getBalance(Player player) { try { - if (Economy.playerExists(player.getName())) { - return Economy.getMoney(player.getName()); + if (Economy.playerExists(player.getUniqueId())) { + return Economy.getMoneyExact(player.getUniqueId()).doubleValue(); } return 0; } catch (UserDoesNotExistException ex) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 6b09aff49..6f868efff 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -80,6 +80,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.Utils; @@ -1716,6 +1717,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { if (player.hasMetadata("NPC")) return; + Location loc = event.getTo(); handleNewLocation(player, loc, false); if (plugin.isResAdminOn(player)) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 5a01e5bc2..40e02c189 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -58,6 +58,7 @@ import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.text.help.PageInfo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.Utils; public class ClaimedResidence { @@ -1326,9 +1327,8 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r return; } } else { - if (!resadmin && !isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer, 10000L) - && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) - && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { + if (!resadmin && !isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer, 10000L) && !ResPerm.admin_tp.hasPermission(reqPlayer, 10000L) + && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(reqPlayer); PermissionGroup group = rPlayer.getGroup(); if (!group.hasTpAccess()) { diff --git a/src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java b/src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java index d432e01dc..f2f761eaf 100644 --- a/src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java +++ b/src/com/bekvon/bukkit/residence/selection/KingdomsUtil.java @@ -21,7 +21,7 @@ public KingdomsUtil(Residence residence) { this.plugin = residence; } - public Land getRegion(CuboidArea area) { + private Land getRegion(CuboidArea area) { if (plugin.getKingdomsManager() == null) return null; @@ -62,8 +62,8 @@ public boolean isSelectionInArea(Player player) { World world = Bukkit.getWorld(sl.getWorld()); - Location lowLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), sl.getX() * 16, 0, sl.getZ() * 16); - Location highLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player.getName()).getWorld(), sl.getX() * 16 + 16, world.getMaxHeight(), sl.getZ() * 16 + 16); + Location lowLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player).getWorld(), sl.getX() * 16, 0, sl.getZ() * 16); + Location highLoc = new Location(plugin.getSelectionManager().getPlayerLoc1(player).getWorld(), sl.getX() * 16 + 16, world.getMaxHeight(), sl.getZ() * 16 + 16); Visualizer v = new Visualizer(player); v.setAreas(plugin.getSelectionManager().getSelectionCuboid(player)); v.setErrorAreas(new CuboidArea(lowLoc, highLoc)); diff --git a/src/plugin.yml b/src/plugin.yml index 936594ab1..46c8232c9 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.2.11 +version: 4.10.0.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From df59cc2f39b148dcbba95cd4a266b54302ac75ba Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Mar 2021 16:32:47 +0200 Subject: [PATCH 0847/1142] For for cuboidarea in case world is not known --- .../bukkit/residence/protection/CuboidArea.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index 99219a2d3..cda1eb918 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -24,7 +24,12 @@ public class CuboidArea { protected World world; public CuboidArea(Location startLoc, Location endLoc) { + + if (startLoc == null || endLoc == null) + return; + int highx, highy, highz, lowx, lowy, lowz; + if (startLoc.getBlockX() > endLoc.getBlockX()) { highx = startLoc.getBlockX(); lowx = endLoc.getBlockX(); @@ -48,8 +53,10 @@ public CuboidArea(Location startLoc, Location endLoc) { } highPoints = new Vector(highx, highy, highz); lowPoints = new Vector(lowx, lowy, lowz); - worldName = startLoc.getWorld().getName(); - world = startLoc.getWorld(); + + world = startLoc.getWorld() != null ? startLoc.getWorld() : startLoc.getWorld() != null ? startLoc.getWorld() : null; + + worldName = world != null ? world.getName() : null; } public CuboidArea() { From 8ac94c08a6d21b57d19de23e64e8ed567d3a817d Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Mar 2021 16:45:43 +0200 Subject: [PATCH 0848/1142] New flag: elytra. Can block its usage in residence area. --- .../bekvon/bukkit/residence/Residence.java | 3 + .../bukkit/residence/containers/Flags.java | 1 + .../listeners/ResidencePlayerListener.java | 2 +- .../listeners/ResidencePlayerListener1_9.java | 88 +++++++++++++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 6aab68771..4ca8ccf34 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -83,6 +83,7 @@ import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_14; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_15; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_16; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_9; import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; @@ -681,6 +682,8 @@ public void run() { blistener = new ResidenceBlockListener(this); plistener = new ResidencePlayerListener(this); + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) + pm.registerEvents(new ResidencePlayerListener1_9(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) pm.registerEvents(new ResidencePlayerListener1_14(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_15_R1)) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 916e817c8..72619b434 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -42,6 +42,7 @@ public enum Flags { egg(CMIMaterial.EGG, FlagMode.Both, "Allows or denys interaction with dragon egg", true), enchant(CMIMaterial.ENCHANTING_TABLE, FlagMode.Both, "Allows or denys players to use enchanting tables", true), explode(CMIMaterial.TNT_MINECART, FlagMode.Residence, "Allows or denys explosions in residences", false), + elytra(CMIMaterial.ELYTRA, FlagMode.Both, "Allows or denys elytra usage in residences", false), enderpearl(CMIMaterial.ENDER_PEARL, FlagMode.Both, "Allow or disallow teleporting to the residence with enderpearl", true), fallinprotection(CMIMaterial.SAND, FlagMode.Residence, "Protects from blocks falling into residence", true), falldamage(CMIMaterial.LEATHER_BOOTS, FlagMode.Residence, "Protects players from fall damage", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 6f868efff..c00d9cf05 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1794,7 +1794,7 @@ public void run() { }, 20L); } - private static Location getSafeLocation(Location loc) { + public static Location getSafeLocation(Location loc) { int curY = loc.getBlockY(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java new file mode 100644 index 000000000..77cc09f89 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java @@ -0,0 +1,88 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityToggleGlideEvent; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.event.ResidenceChangedEvent; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + +public class ResidencePlayerListener1_9 implements Listener { + + private Residence plugin; + + public ResidencePlayerListener1_9(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler + public void EntityToggleGlideEvent(EntityToggleGlideEvent event) { + + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + + if (!(event.getEntity() instanceof Player)) + return; + + if (plugin.isResAdminOn(event.getEntity())) { + return; + } + + Player player = (Player) event.getEntity(); + + FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); + + if (perms.playerHas(player, Flags.elytra, FlagCombo.TrueOrNone)) + return; + + plugin.msg(player, lm.Flag_Deny, Flags.elytra); + + event.setCancelled(true); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { + player.setGliding(false); + }, 2L); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceChange(ResidenceChangedEvent event) { + + ClaimedResidence newRes = event.getTo(); + + Player player = event.getPlayer(); + if (player == null) + return; + + if (!player.isGliding()) + return; + + if (newRes.getPermissions().playerHas(player, Flags.elytra, FlagCombo.TrueOrNone)) + return; + + player.setGliding(false); + + Location loc = ResidencePlayerListener.getSafeLocation(player.getLocation()); + if (loc == null) { + // get defined land location in case no safe landing spot are found + loc = plugin.getConfigManager().getFlyLandLocation(); + if (loc == null) { + // get main world spawn location in case valid location is not found + loc = Bukkit.getWorlds().get(0).getSpawnLocation(); + } + } + if (loc != null) { + plugin.msg(player, lm.Flag_Deny, Flags.elytra); + player.closeInventory(); + player.teleport(loc); + } + } +} From a9f7ab990376816010cea0dc142ca7485f370048 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Mar 2021 16:51:46 +0200 Subject: [PATCH 0849/1142] Small adjustment for /res create command tabcomplete --- src/com/bekvon/bukkit/residence/commands/create.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 61d7f26a1..b1c4abdc6 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.ConfigReader; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -52,5 +53,6 @@ public void getLocale() { // Main command c.get("Description", "Create Residences"); c.get("Info", Arrays.asList("&eUsage: &6/res create [residence_name]")); + LocaleManager.addTabCompleteMain(this); } } From fbb7af05d52472dbf481c8f0e07e3af6ee99c70b Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 16 Mar 2021 13:28:34 +0200 Subject: [PATCH 0850/1142] Option to define /res auto min and max values --- .../bukkit/residence/ConfigManager.java | 58 +++++++++++++++---- .../bukkit/residence/commands/auto.java | 33 ++++++++++- .../listeners/ResidenceBlockListener.java | 2 +- .../listeners/ResidencePlayerListener.java | 1 - .../residence/selection/SelectionManager.java | 1 - src/plugin.yml | 2 +- 6 files changed, 78 insertions(+), 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 2db6594de..c00434933 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -97,8 +97,11 @@ public class ConfigManager { protected int autoSaveInt; protected boolean NewSaveMechanic; private int ItemPickUpDelay; - private boolean AutomaticResidenceCreationCheckCollision; - private String AutomaticResidenceCreationIncrementFormat; + private boolean ARCCheckCollision; + private String ARCIncrementFormat; + private int ARCSizePercentage; + private int ARCSizeMin; + private int ARCSizeMax; private boolean ConsoleLogsShowFlagChanges = true; @@ -617,11 +620,30 @@ public void UpdateConfigFile() { c.addComment("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", "When set to true /res auto command will check for new area collision with other residences to avoid overlapping.", "Set it to false to gain some performace but new residence can often overlap with old ones"); - AutomaticResidenceCreationCheckCollision = c.get("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", true); + ARCCheckCollision = c.get("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", true); c.addComment("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "Defines new residence name increment when using automatic residence creation command if residence with that name already exist"); - AutomaticResidenceCreationIncrementFormat = c.get("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "_[number]"); + ARCIncrementFormat = c.get("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "_[number]"); + + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Percentage", + "Value between 1 and 100 which will define size of residence we will create in percentage depending on players permission group"); + ARCSizePercentage = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Percentage", 50); + ARCSizePercentage = ARCSizePercentage < 1 ? 1 : ARCSizePercentage > 100 ? 100 : ARCSizePercentage; + + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Min", + "Value in blocks. While previous percentage will determine general size, this can be used to avoid having tiny residences", + "For example if player has access to 30x30 residence and Percentage is set to 50% then instead of using 15 block size we will use 20 (default)", + "Keep in mind that this will not override actual max/min residence sizes player can have"); + ARCSizeMin = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Min", 20); + ARCSizeMin = ARCSizeMin < 1 ? 1 : ARCSizeMin; + + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Max", + "Value in blocks. While previous percentage will determine general size, this can be used to avoid having huge residences", + "For example if player has access to 500x500 residence and Percentage is set to 50% then instead of using 250 block size we will use 100 (default)", + "Keep in mind that this will not override actual max/min residence sizes player can have"); + ARCSizeMax = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Max", 100); + ARCSizeMax = ARCSizeMax < ARCSizeMin ? ARCSizeMin : ARCSizeMax; // c.addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", // "You can bypass this with residence.checkbadflags permission node"); @@ -1987,14 +2009,6 @@ public int getItemPickUpDelay() { return ItemPickUpDelay; } - public boolean isAutomaticResidenceCreationCheckCollision() { - return AutomaticResidenceCreationCheckCollision; - } - - public String AutomaticResidenceCreationIncrementFormat() { - return AutomaticResidenceCreationIncrementFormat; - } - public boolean isConsoleLogsShowFlagChanges() { return ConsoleLogsShowFlagChanges; } @@ -2043,6 +2057,26 @@ public boolean isLoadEveryWorld() { return LoadEveryWorld; } + public boolean isARCCheckCollision() { + return ARCCheckCollision; + } + + public String ARCIncrementFormat() { + return ARCIncrementFormat; + } + + public int getARCSizePercentage() { + return ARCSizePercentage; + } + + public int getARCSizeMin() { + return ARCSizeMin; + } + + public int getARCSizeMax() { + return ARCSizeMax; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 83ad585b5..5359b515c 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -18,7 +18,6 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; public class auto implements cmd { @@ -65,6 +64,10 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo x = lenght > group.getMaxX() ? group.getMaxX() : lenght; z = lenght > group.getMaxZ() ? group.getMaxZ() : lenght; y = lenght > group.getMaxY() ? group.getMaxY() : lenght; + } else { + x = getMin(x, group.getMaxX()); + y = getMin(y, group.getMaxY()); + z = getMin(z, group.getMaxZ()); } int rX = (x - 1) / 2; @@ -114,7 +117,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (plugin.getResidenceManager().getByName(resName) != null) { for (int i = 1; i < 50; i++) { - String tempName = resName + plugin.getConfigManager().AutomaticResidenceCreationIncrementFormat().replace("[number]", i + ""); + String tempName = resName + plugin.getConfigManager().ARCIncrementFormat().replace("[number]", i + ""); if (plugin.getResidenceManager().getByName(tempName) == null) { resName = tempName; break; @@ -130,6 +133,25 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } + private static int getMax(int max) { + int arcmin = Residence.getInstance().getConfigManager().getARCSizeMin(); + int arcmax = Residence.getInstance().getConfigManager().getARCSizeMax(); + int maxV = (int) (max * (Residence.getInstance().getConfigManager().getARCSizePercentage() / 100D)); + maxV = maxV < arcmin && arcmin < max ? arcmin : maxV; + maxV = maxV > arcmax ? arcmax : maxV; + return maxV; + } + + private static int getMin(int min, int max) { + int percent = (int) (max * (Residence.getInstance().getConfigManager().getARCSizePercentage() / 100D)); + int arcmin = Residence.getInstance().getConfigManager().getARCSizeMin(); + int arcmax = Residence.getInstance().getConfigManager().getARCSizeMax(); + int pmin = arcmin < percent ? percent : arcmin; + min = min < pmin ? pmin : min; + min = min > arcmax ? arcmin : min; + return min; + } + public static void resize(Residence plugin, Player player, CuboidArea cuboid, boolean checkBalance, int max) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); @@ -145,9 +167,14 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo List locked = new ArrayList(); - boolean checkCollision = plugin.getConfigManager().isAutomaticResidenceCreationCheckCollision(); + boolean checkCollision = plugin.getConfigManager().isARCCheckCollision(); int skipped = 0; int done = 0; + + int maxX = getMax(group.getMaxX()); + if (max < 0) + max = maxX; + while (true) { if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { if (dir.equals(direction.Top) || dir.equals(direction.Bottom)) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index ed04873c4..1fd55c7c5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -519,7 +519,7 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo List locked = new ArrayList(); - boolean checkCollision = plugin.getConfigManager().isAutomaticResidenceCreationCheckCollision(); + boolean checkCollision = plugin.getConfigManager().isARCCheckCollision(); int skipped = 0; int done = 0; while (true) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index c00d9cf05..5b2ce8a74 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -80,7 +80,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.Utils; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 0520b5737..1dea51a30 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -32,7 +32,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; public class SelectionManager { protected Map selections; diff --git a/src/plugin.yml b/src/plugin.yml index 46c8232c9..083bbf5f8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.10.0.0 +version: 4.9.3.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 9f9ab6cb6d0c5cca5350d0e9bba66024429ac57e Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 16 Mar 2021 15:26:51 +0200 Subject: [PATCH 0851/1142] Better LWC support --- .../bekvon/bukkit/cmiLib/CMIReflections.java | 20 ++-- .../bekvon/bukkit/residence/Residence.java | 7 +- .../bukkit/residence/commands/auto.java | 8 +- .../listeners/ResidenceEntityListener.java | 13 +-- .../listeners/ResidenceLWCListener.java | 109 ++++++++++++++++++ 5 files changed, 137 insertions(+), 20 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java diff --git a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java index 43b813943..6d1428385 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java @@ -64,15 +64,17 @@ private static void initialize() { } catch (Throwable e) { e.printStackTrace(); } - try { - CraftParticle = getBukkitClass("CraftParticle"); - } catch (Throwable e) { - e.printStackTrace(); - } - try { - ParticleParam = getMinecraftClass("ParticleParam"); - } catch (Throwable e) { - e.printStackTrace(); + if (Version.isCurrentHigher(Version.v1_12_R1)) { + try { + CraftParticle = getBukkitClass("CraftParticle"); + } catch (Throwable e) { +// e.printStackTrace(); + } + try { + ParticleParam = getMinecraftClass("ParticleParam"); + } catch (Throwable e) { +// e.printStackTrace(); + } } try { CraftContainer = getMinecraftClass("Container"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 4ca8ccf34..9dc191086 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -79,6 +79,7 @@ import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; import com.bekvon.bukkit.residence.listeners.ResidenceFixesListener; +import com.bekvon.bukkit.residence.listeners.ResidenceLWCListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_14; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_15; @@ -530,8 +531,12 @@ public void onEnable() { try { if (lwcp != null) { lwc = ((LWCPlugin) lwcp).getLWC(); + try { + LWC.getInstance().getModuleLoader().registerModule(this, new ResidenceLWCListener()); + } catch (Throwable e) { + e.printStackTrace(); + } Bukkit.getConsoleSender().sendMessage(this.getPrefix() + " LWC hooked."); - } } catch (Throwable e) { e.printStackTrace(); diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 5359b515c..b396e2aea 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -147,9 +147,11 @@ private static int getMin(int min, int max) { int arcmin = Residence.getInstance().getConfigManager().getARCSizeMin(); int arcmax = Residence.getInstance().getConfigManager().getARCSizeMax(); int pmin = arcmin < percent ? percent : arcmin; - min = min < pmin ? pmin : min; - min = min > arcmax ? arcmin : min; - return min; + int newmin = min < pmin ? pmin : min; + newmin = newmin > arcmax ? arcmin : newmin; + newmin = newmin > max ? max : newmin; + + return newmin; } public static void resize(Residence plugin, Player player, CuboidArea cuboid, boolean checkBalance, int max) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 11b2dc707..015a15fda 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -6,13 +6,10 @@ import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.entity.Animals; import org.bukkit.entity.Arrow; -import org.bukkit.entity.Bat; import org.bukkit.entity.Creeper; import org.bukkit.entity.Damageable; import org.bukkit.entity.Entity; @@ -20,19 +17,15 @@ import org.bukkit.entity.Firework; import org.bukkit.entity.Ghast; import org.bukkit.entity.Hanging; -import org.bukkit.entity.IronGolem; import org.bukkit.entity.ItemFrame; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Monster; -import org.bukkit.entity.NPC; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.entity.Slime; -import org.bukkit.entity.Snowman; import org.bukkit.entity.Tameable; import org.bukkit.entity.ThrownPotion; import org.bukkit.entity.Vehicle; -import org.bukkit.entity.WaterMob; import org.bukkit.entity.Witch; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -52,6 +45,7 @@ import org.bukkit.event.entity.PlayerLeashEntityEvent; import org.bukkit.event.entity.PotionSplashEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.entity.SpawnerSpawnEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; @@ -480,6 +474,11 @@ public void onPhantomSpawn(CreatureSpawnEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onItemSpawnEvent(SpawnerSpawnEvent event) { + + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onCreatureSpawn(CreatureSpawnEvent event) { // disabling event on world diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java new file mode 100644 index 000000000..278df8b0e --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java @@ -0,0 +1,109 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.utils.Debug; +import com.griefcraft.lwc.LWC; +import com.griefcraft.scripting.Module; +import com.griefcraft.scripting.event.LWCAccessEvent; +import com.griefcraft.scripting.event.LWCBlockInteractEvent; +import com.griefcraft.scripting.event.LWCCommandEvent; +import com.griefcraft.scripting.event.LWCDropItemEvent; +import com.griefcraft.scripting.event.LWCEntityInteractEvent; +import com.griefcraft.scripting.event.LWCMagnetPullEvent; +import com.griefcraft.scripting.event.LWCProtectionDestroyEvent; +import com.griefcraft.scripting.event.LWCProtectionInteractEntityEvent; +import com.griefcraft.scripting.event.LWCProtectionInteractEvent; +import com.griefcraft.scripting.event.LWCProtectionRegisterEntityEvent; +import com.griefcraft.scripting.event.LWCProtectionRegisterEvent; +import com.griefcraft.scripting.event.LWCProtectionRegistrationPostEvent; +import com.griefcraft.scripting.event.LWCProtectionRemovePostEvent; +import com.griefcraft.scripting.event.LWCRedstoneEvent; +import com.griefcraft.scripting.event.LWCReloadEvent; +import com.griefcraft.scripting.event.LWCSendLocaleEvent; + +public class ResidenceLWCListener implements Module { + + @Override + public void load(LWC lwc) { + } + + @Override + public void onReload(LWCReloadEvent event) { + } + + @Override + public void onAccessRequest(LWCAccessEvent event) { + } + + @Override + public void onDropItem(LWCDropItemEvent event) { + } + + @Override + public void onCommand(LWCCommandEvent event) { + } + + @Override + public void onRedstone(LWCRedstoneEvent event) { + } + + @Override + public void onDestroyProtection(LWCProtectionDestroyEvent event) { + } + + @Override + public void onProtectionInteract(LWCProtectionInteractEvent event) { + } + + @Override + public void onBlockInteract(LWCBlockInteractEvent event) { + } + + @Override + public void onRegisterProtection(LWCProtectionRegisterEvent event) { + Player player = event.getPlayer(); + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(event.getBlock().getLocation(), player); + boolean hasuse = perms.playerHas(player, Flags.use, true); + if (!perms.playerHas(player, Flags.container, hasuse) && !ResPerm.bypass_container.hasPermission(player, 10000L)) { + event.setCancelled(true); + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container); + } + } + + @Override + public void onPostRegistration(LWCProtectionRegistrationPostEvent event) { + } + + @Override + public void onPostRemoval(LWCProtectionRemovePostEvent event) { + } + + @Override + public void onSendLocale(LWCSendLocaleEvent event) { + } + + @Override + public void onEntityInteract(LWCEntityInteractEvent arg0) { + } + + @Override + public void onEntityInteractProtection(LWCProtectionInteractEntityEvent arg0) { + } + + @Override + public void onMagnetPull(LWCMagnetPullEvent arg0) { + } + + @Override + public void onRegisterEntity(LWCProtectionRegisterEntityEvent arg0) { + } + +} From 276dcc2d5edb8f9831973800aa50d070fa9e28f2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 16 Mar 2021 15:43:59 +0200 Subject: [PATCH 0852/1142] Checking for right click on anchor flag check Consider player to be resadmin for anchor flag check --- .../listeners/ResidencePlayerListener1_16.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java index 356977fdd..0fabd49d0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java @@ -8,7 +8,9 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; +import com.Zrips.CMI.utils.VersionChecker.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; @@ -34,7 +36,11 @@ public void onPlayerInteractRespawn(PlayerInteractEvent event) { if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; - + try { + if (Version.isCurrentHigher(Version.v1_8_R3) && event.getHand() != EquipmentSlot.HAND) + return; + } catch (Exception e) { + } Player player = event.getPlayer(); Block block = event.getClickedBlock(); @@ -50,7 +56,7 @@ public void onPlayerInteractRespawn(PlayerInteractEvent event) { if (res == null) return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.anchor, FlagCombo.OnlyTrue)) { + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.anchor, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player)) { plugin.msg(player, lm.Residence_FlagDeny, Flags.anchor, res.getName()); event.setCancelled(true); } From 9d0786c95f2e58c797ca5789ef577596fd4d5bef Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 17 Mar 2021 11:10:53 +0200 Subject: [PATCH 0853/1142] Wrong library --- .../bukkit/residence/listeners/ResidencePlayerListener1_16.java | 2 +- src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java index 0fabd49d0..054151d00 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java @@ -10,7 +10,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; -import com.Zrips.CMI.utils.VersionChecker.Version; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/plugin.yml b/src/plugin.yml index 083bbf5f8..70fc27706 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.3.0 +version: 4.9.3.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 5b6a21f8cee09ee3f07ba1032e794c006c3fbc86 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 17 Mar 2021 12:31:02 +0200 Subject: [PATCH 0854/1142] Fix for LWC issue --- src/com/bekvon/bukkit/residence/Residence.java | 17 ++++++----------- .../listeners/ResidenceLWCListener.java | 11 ++++++----- .../residence/protection/ResidenceManager.java | 2 +- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 9dc191086..3e0b029f5 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -122,10 +122,8 @@ import com.bekvon.bukkit.residence.utils.Sorting; import com.bekvon.bukkit.residence.utils.TabComplete; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; -//import com.bekvon.bukkit.residence.towns.TownManager; + import com.earth2me.essentials.Essentials; -import com.griefcraft.lwc.LWC; -import com.griefcraft.lwc.LWCPlugin; import com.residence.mcstats.Metrics; import com.residence.zip.ZipLibrary; @@ -223,8 +221,6 @@ public class Residence extends JavaPlugin { private String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; private String TempUserUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"; - private LWC lwc; - public HashMap rtMap = new HashMap(); public List teleportDelayMap = new ArrayList(); public HashMap teleportMap = new HashMap(); @@ -530,13 +526,12 @@ public void onEnable() { Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); try { if (lwcp != null) { - lwc = ((LWCPlugin) lwcp).getLWC(); try { - LWC.getInstance().getModuleLoader().registerModule(this, new ResidenceLWCListener()); + ResidenceLWCListener.register(this); + Bukkit.getConsoleSender().sendMessage(this.getPrefix() + " LWC hooked."); } catch (Throwable e) { e.printStackTrace(); } - Bukkit.getConsoleSender().sendMessage(this.getPrefix() + " LWC hooked."); } } catch (Throwable e) { e.printStackTrace(); @@ -965,9 +960,9 @@ public VersionChecker getVersionChecker() { return versionChecker; } - public LWC getLwc() { - return lwc; - } +// public LWC getLwc() { +// return lwc; +// } public File getDataLocation() { return dataFolder; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java index 278df8b0e..6db9affcd 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java @@ -1,17 +1,14 @@ package com.bekvon.bukkit.residence.listeners; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; +import org.bukkit.plugin.Plugin; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.FlagPermissions; -import com.bekvon.bukkit.residence.utils.Debug; import com.griefcraft.lwc.LWC; -import com.griefcraft.scripting.Module; import com.griefcraft.scripting.event.LWCAccessEvent; import com.griefcraft.scripting.event.LWCBlockInteractEvent; import com.griefcraft.scripting.event.LWCCommandEvent; @@ -29,7 +26,11 @@ import com.griefcraft.scripting.event.LWCReloadEvent; import com.griefcraft.scripting.event.LWCSendLocaleEvent; -public class ResidenceLWCListener implements Module { +public class ResidenceLWCListener implements com.griefcraft.scripting.Module { + + public static void register(Plugin plugin) { + com.griefcraft.lwc.LWC.getInstance().getModuleLoader().registerModule(plugin, new ResidenceLWCListener()); + } @Override public void load(LWC lwc) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 9a649df6c..0f40d7848 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -623,7 +623,7 @@ public void removeLwcFromResidence(final Player player, final ClaimedResidence r // @Override // public void run() { long time = System.currentTimeMillis(); - LWC lwc = plugin.getLwc(); + LWC lwc = com.griefcraft.lwc.LWC.getInstance(); if (lwc == null) return; if (res == null) From 8b47baf19af11cc76b4c0f9108387694fb5d5340 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 17 Mar 2021 16:16:18 +0200 Subject: [PATCH 0855/1142] Completely moving away LWC handling to avoid issues with its classes --- .../bekvon/bukkit/residence/Residence.java | 5 ++ .../residence/economy/TransactionManager.java | 5 +- .../residence/economy/rent/RentManager.java | 5 +- .../listeners/ResidenceLWCListener.java | 55 +++++++++++++++++++ .../protection/ResidenceManager.java | 55 +------------------ src/plugin.yml | 2 +- 6 files changed, 70 insertions(+), 57 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 3e0b029f5..2ce175c9f 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -203,6 +203,7 @@ public class Residence extends JavaPlugin { protected int DespawnMobsBukkitId = -1; private boolean SlimeFun = false; + private boolean lwc = false; Metrics metrics = null; protected int autosaveBukkitId = -1; @@ -529,6 +530,7 @@ public void onEnable() { try { ResidenceLWCListener.register(this); Bukkit.getConsoleSender().sendMessage(this.getPrefix() + " LWC hooked."); + lwc = true; } catch (Throwable e) { e.printStackTrace(); } @@ -1925,4 +1927,7 @@ public boolean isSlimefunPresent() { return SlimeFun; } + public boolean isLwcPresent() { + return lwc; + } } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 8e1e4fabb..78af47322 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -17,6 +17,7 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.listeners.ResidenceLWCListener; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -240,8 +241,8 @@ public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { res.getPermissions().applyDefaultFlags(); removeFromSale(res); - if (plugin.getConfigManager().isRemoveLwcOnBuy()) - plugin.getResidenceManager().removeLwcFromResidence(player, res); + if (plugin.getConfigManager().isRemoveLwcOnBuy() && plugin.isLwcPresent()) + ResidenceLWCListener.removeLwcFromResidence(player, res); plugin.getSignUtil().CheckSign(res); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index fad845e16..c123c2b1a 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -21,6 +21,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceRentEvent; import com.bekvon.bukkit.residence.event.ResidenceRentEvent.RentEventType; +import com.bekvon.bukkit.residence.listeners.ResidenceLWCListener; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -443,8 +444,8 @@ public void unrent(Player player, ClaimedResidence res, boolean resadmin) { boolean backup = res.getPermissions().has("backup", false); - if (plugin.getConfigManager().isRemoveLwcOnUnrent()) - plugin.getResidenceManager().removeLwcFromResidence(player, res); + if (plugin.getConfigManager().isRemoveLwcOnUnrent() && plugin.isLwcPresent()) + ResidenceLWCListener.removeLwcFromResidence(player, res); res.getPermissions().applyDefaultFlags(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java index 6db9affcd..cb3f4329d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java @@ -1,5 +1,11 @@ package com.bekvon.bukkit.residence.listeners; +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -7,6 +13,8 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.griefcraft.lwc.LWC; import com.griefcraft.scripting.event.LWCAccessEvent; @@ -32,6 +40,53 @@ public static void register(Plugin plugin) { com.griefcraft.lwc.LWC.getInstance().getModuleLoader().registerModule(plugin, new ResidenceLWCListener()); } + public static void removeLwcFromResidence(final Player player, final ClaimedResidence res) { +// Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { +// @Override +// public void run() { + long time = System.currentTimeMillis(); + com.griefcraft.lwc.LWC lwc = com.griefcraft.lwc.LWC.getInstance(); + if (lwc == null) + return; + if (res == null) + return; + int i = 0; + + com.griefcraft.cache.ProtectionCache cache = lwc.getProtectionCache(); + + List list = Residence.getInstance().getConfigManager().getLwcMatList(); + + try { + for (CuboidArea area : res.getAreaArray()) { + Location low = area.getLowLocation(); + Location high = area.getHighLocation(); + World world = low.getWorld(); + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + Block b = world.getBlockAt(x, y, z); + if (!b.getChunk().isLoaded()) + b.getChunk().load(); + if (!list.contains(b.getType())) + continue; + com.griefcraft.model.Protection prot = cache.getProtection(b); + if (prot == null) + continue; + prot.remove(); + i++; + } + } + } + } + } catch (Exception e) { + } + if (i > 0) + Residence.getInstance().msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); + return; +// } +// }); + } + @Override public void load(LWC lwc) { } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 0f40d7848..eabb45da1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -41,13 +41,11 @@ import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent.DeleteCause; import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; +import com.bekvon.bukkit.residence.listeners.ResidenceLWCListener; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.GetTime; -import com.griefcraft.cache.ProtectionCache; -import com.griefcraft.lwc.LWC; -import com.griefcraft.model.Protection; public class ResidenceManager implements ResidenceInterface { protected SortedMap residences; @@ -575,8 +573,8 @@ public void run() { } }); } - if (plugin.getConfigManager().isRemoveLwcOnDelete()) - removeLwcFromResidence(player, res); + if (plugin.getConfigManager().isRemoveLwcOnDelete() && plugin.isLwcPresent()) + ResidenceLWCListener.removeLwcFromResidence(player, res); if (regenerate) { for (CuboidArea one : res.getAreaArray()) { plugin.getSelectionManager().regenerate(one); @@ -618,53 +616,6 @@ else if (rPlayer != null) } } - public void removeLwcFromResidence(final Player player, final ClaimedResidence res) { -// Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { -// @Override -// public void run() { - long time = System.currentTimeMillis(); - LWC lwc = com.griefcraft.lwc.LWC.getInstance(); - if (lwc == null) - return; - if (res == null) - return; - int i = 0; - - ProtectionCache cache = lwc.getProtectionCache(); - - List list = plugin.getConfigManager().getLwcMatList(); - - try { - for (CuboidArea area : res.getAreaArray()) { - Location low = area.getLowLocation(); - Location high = area.getHighLocation(); - World world = low.getWorld(); - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - Block b = world.getBlockAt(x, y, z); - if (!b.getChunk().isLoaded()) - b.getChunk().load(); - if (!list.contains(b.getType())) - continue; - Protection prot = cache.getProtection(b); - if (prot == null) - continue; - prot.remove(); - i++; - } - } - } - } - } catch (Exception e) { - } - if (i > 0) - plugin.msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); - return; -// } -// }); - } - public void removeAllByOwner(String owner) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(owner); for (ClaimedResidence oneRes : rPlayer.getResList()) { diff --git a/src/plugin.yml b/src/plugin.yml index 70fc27706..e7683433d 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.3.1 +version: 4.9.3.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 5fc52b014cc9db2c6913418f475a78aa83ef0edf Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 30 Mar 2021 13:40:19 +0300 Subject: [PATCH 0856/1142] Faster LWC cleaning. Moved into async --- src/com/bekvon/bukkit/cmiLib/CMILocation.java | 371 ++++++++++++++++++ .../bekvon/bukkit/cmiLib/CMIReflections.java | 2 - .../bukkit/residence/ConfigManager.java | 40 +- .../listeners/ResidenceLWCListener.java | 122 ++++-- src/plugin.yml | 2 +- 5 files changed, 476 insertions(+), 61 deletions(-) create mode 100644 src/com/bekvon/bukkit/cmiLib/CMILocation.java diff --git a/src/com/bekvon/bukkit/cmiLib/CMILocation.java b/src/com/bekvon/bukkit/cmiLib/CMILocation.java new file mode 100644 index 000000000..a0fc37775 --- /dev/null +++ b/src/com/bekvon/bukkit/cmiLib/CMILocation.java @@ -0,0 +1,371 @@ +package com.bekvon.bukkit.cmiLib; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.util.Map; + +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.ChunkSnapshot; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Utility; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; +import org.bukkit.material.MaterialData; + +public class CMILocation extends Location { + + public CMILocation(World world, double x, double y, double z, float yaw, float pitch) { + super(world, x, y, z, yaw, pitch); + this.worldName = world.getName(); + } + + public CMILocation(World world, double x, double y, double z) { + super(world, x, y, z); + if (world != null) + this.worldName = world.getName(); + } + + private String worldName; + + public CMILocation(Location loc) { + super(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch()); + if (loc.getWorld() != null) + this.worldName = loc.getWorld().getName(); + } + + public CMILocation(String world, double x, double y, double z, float yaw, float pitch) { + super(Bukkit.getWorld(world), x, y, z, yaw, pitch); + this.worldName = world; + } + + public CMILocation(String world, double x, double y, double z) { + super(Bukkit.getWorld(world), x, y, z); + this.worldName = world; + } + + public void recheck() { + updateWorld(); + } + + private void updateWorld() { + try { + if (Version.isCurrentEqualOrHigher(Version.v1_16_R1) && super.getWorld() != null && !super.isWorldLoaded()) + return; + } catch (Throwable e) { + } + + try { + if (super.getWorld() == null && worldName != null) { + World w = Bukkit.getWorld(worldName); + if (w != null) { + super.setWorld(w); + this.worldName = super.getWorld().getName(); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public String getWorldName() { + return this.worldName != null ? this.worldName : this.getWorld() == null ? null : this.getWorld().getName(); + } + + public Location getBukkitLoc() { + updateWorld(); + return this; + } + + public boolean isValid() { + updateWorld(); + return this.getWorld() != null && this.getWorld().getName() != null && Bukkit.getWorld(this.getWorld().getUID()) != null; + } + + @Override + public World getWorld() { + updateWorld(); + try { + if (Version.isCurrentEqualOrHigher(Version.v1_16_R1) && !super.isWorldLoaded()) + return null; + } catch (Throwable e) { + } + return super.getWorld(); + } + + @Override + public Chunk getChunk() { + updateWorld(); + return super.getChunk(); + } + + @Override + public Block getBlock() { + updateWorld(); + if (super.getWorld() == null) + return null; + return super.getBlock(); + } + + @Override + public Location add(Location vec) { + updateWorld(); + return super.add(vec); + } + + @Override + public Location subtract(Location vec) { + updateWorld(); + return super.subtract(vec); + } + + @Override + public double distanceSquared(Location o) { + if (o == null) + return Integer.MAX_VALUE; + if (!this.isValid()) + return Integer.MAX_VALUE; + return super.distanceSquared(o); + } + + @Override + public double distance(Location o) { + if (o == null) + return Integer.MAX_VALUE; + if (!this.isValid()) + return Integer.MAX_VALUE; + return super.distance(o); + } + + @Override + public boolean equals(Object obj) { + updateWorld(); + return super.equals(obj); + } + + @Override + public int hashCode() { + updateWorld(); + return super.hashCode(); + } + + @Override + public String toString() { + updateWorld(); + return super.toString(); + } + + @Override + public CMILocation clone() { + updateWorld(); + return new CMILocation(super.clone()); + } + + @Override + @Utility + public Map serialize() { + updateWorld(); + return super.serialize(); + } + + public int getHighestBlockYAt() { +// Location loc = this.getBukkitLoc(); +// if (loc == null) +// return 0; +// return this.getWorld().getHighestBlockYAt(this); + + if (this.getWorld() == null) + return 63; + + ChunkSnapshot chunk = this.getWorld().getEmptyChunkSnapshot(this.getBlockX() >> 4, this.getBlockZ() >> 4, true, true); + + int x = this.getBlockX() % 16; + x = x < 0 ? 16 + x : x; + int z = this.getBlockZ() % 16; + z = z < 0 ? 16 + z : z; + + return chunk.getHighestBlockYAt(x, z); + +// ChunkSnapshot snap = loc.getChunk().getChunkSnapshot(true, false, false); +// +// int x = this.getBlockX() - (snap.getX() * 16); +// int z = this.getBlockZ() - (snap.getZ() * 16); +// +// x = x < 0 ? 0 : x > 15 ? 15 : x; +// z = z < 0 ? 0 : z > 15 ? 15 : z; +// +// return snap.getHighestBlockYAt(x, z); + } + + public Material getBlockType() { + Location loc = this.getBukkitLoc(); + if (loc == null) + return Material.AIR; + + try { + if (Version.isCurrentEqualOrHigher(Version.v1_16_R1) && !super.isWorldLoaded()) + return Material.AIR; + } catch (Throwable e) { + } + return this.getBlock().getType(); + } + + private static MethodHandle getBlockTypeId = null; + private static MethodHandle getBlockData = null; + + public static Material getBlockTypeSafe(Location loc) { + if (loc == null) + return Material.AIR; + + int x = loc.getBlockX(); + int z = loc.getBlockZ(); + int y = loc.getBlockY(); + + int cx = Math.abs(loc.getBlockX() % 16); + int cz = Math.abs(loc.getBlockZ() % 16); + World world = loc.getWorld(); + + ChunkSnapshot chunkSnapshot = null; + + if (!world.getBlockAt(x, 0, z).getChunk().isLoaded()) { + world.getBlockAt(x, 0, z).getChunk().load(); + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(false, false, false); + world.getBlockAt(x, 0, z).getChunk().unload(); + } else { + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(); + } + + if (chunkSnapshot == null) + return Material.AIR; + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + BlockData type = chunkSnapshot.getBlockData(cx, y, cz); + return type.getMaterial(); + } + + if (getBlockTypeId == null) { + MethodHandles.Lookup lookup = MethodHandles.lookup(); + try { + getBlockTypeId = lookup.findVirtual(ChunkSnapshot.class, "getBlockTypeId", MethodType.methodType(int.class, int.class, int.class)).asType(MethodType.methodType(int.class, + ChunkSnapshot.class)); + getBlockData = lookup.findVirtual(ChunkSnapshot.class, "getBlockData", MethodType.methodType(int.class, int.class, int.class)).asType(MethodType.methodType(int.class, + ChunkSnapshot.class)); + } catch (NoSuchMethodException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + if (getBlockTypeId == null || getBlockData == null) { + return Material.AIR; + } + try { + int type = (int) getBlockTypeId.invokeExact(chunkSnapshot); + if (type == 0) { + return Material.AIR; + } + int data = (int) getBlockData.invokeExact(chunkSnapshot); + return CMIMaterial.get(type, data).getMaterial(); + } catch (Throwable e) { + e.printStackTrace(); + } + + return Material.AIR; + } + + public CMIMaterial getBlockCMIType() { + Location loc = this.getBukkitLoc(); + if (loc == null) + return CMIMaterial.AIR; + + try { + if (Version.isCurrentEqualOrHigher(Version.v1_16_R1) && !super.isWorldLoaded()) + return CMIMaterial.AIR; + } catch (Throwable e) { + } + + CMIMaterial mat = CMIMaterial.get(this.getBlock()); + return mat == CMIMaterial.NONE ? CMIMaterial.AIR : mat; + } + + public static CMILocation fromString(String map) { + return fromString(map, ";"); + } + + public static CMILocation fromString(String map, String separator) { + CMILocation loc = null; + if (map == null) + return null; + if (!map.contains(separator)) + return null; + + String[] split = map.replace(",", ".").split(separator); + + double x = 0; + double y = 0; + double z = 0; + float yaw = 0; + float pitch = 0; + + if (split.length > 0) + try { + x = Double.parseDouble(split[1]); + } catch (Exception e) { + return loc; + } + + if (split.length > 1) + try { + y = Double.parseDouble(split[2]); + } catch (Exception e) { + return loc; + } + + if (split.length > 2) + try { + z = Double.parseDouble(split[3]); + } catch (Exception e) { + return loc; + } + + if (split.length > 3) + try { + yaw = Float.parseFloat(split[4]); + } catch (Exception e) { + } + + if (split.length > 4) + try { + pitch = Float.parseFloat(split[5]); + } catch (Exception e) { + } + + World world = getWorld(split[0]); + String worldName = world == null ? split[0] : world.getName(); + loc = new CMILocation(worldName, x, y, z); + loc.setYaw(yaw); + loc.setPitch(pitch); + + return loc; + } + + private static World getWorld(String name) { + World w = Bukkit.getWorld(name); + + if (w != null) + return w; + + name = name.replace("_", "").replace(".", "").replace("-", ""); + + for (World one : Bukkit.getWorlds()) { + String n = one.getName().replace("_", "").replace(".", "").replace("-", ""); + if (!n.equalsIgnoreCase(name)) + continue; + return one; + } + + return null; + } +} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java index 6d1428385..7a8774ed9 100644 --- a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java +++ b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java @@ -17,8 +17,6 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.residence.utils.Debug; - public class CMIReflections { private static Class CraftServerClass; diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index c00434933..aab803494 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -59,9 +59,9 @@ public class ConfigManager { protected boolean NoWaterPlace; protected boolean AutoCleanUp; protected boolean SellSubzone; - protected boolean LwcOnDelete; - protected boolean LwcOnBuy; - protected boolean LwcOnUnrent; + protected boolean LwcOnDelete = false; + protected boolean LwcOnBuy = false; + protected boolean LwcOnUnrent = false; protected List LwcMatList = new ArrayList(); protected boolean UseClean; protected boolean PvPFlagPrevent; @@ -636,14 +636,14 @@ public void UpdateConfigFile() { "For example if player has access to 30x30 residence and Percentage is set to 50% then instead of using 15 block size we will use 20 (default)", "Keep in mind that this will not override actual max/min residence sizes player can have"); ARCSizeMin = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Min", 20); - ARCSizeMin = ARCSizeMin < 1 ? 1 : ARCSizeMin; + ARCSizeMin = ARCSizeMin < 1 ? 1 : ARCSizeMin; c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Max", "Value in blocks. While previous percentage will determine general size, this can be used to avoid having huge residences", "For example if player has access to 500x500 residence and Percentage is set to 50% then instead of using 250 block size we will use 100 (default)", "Keep in mind that this will not override actual max/min residence sizes player can have"); ARCSizeMax = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Max", 100); - ARCSizeMax = ARCSizeMax < ARCSizeMin ? ARCSizeMin : ARCSizeMax; + ARCSizeMax = ARCSizeMax < ARCSizeMin ? ARCSizeMin : ARCSizeMax; // c.addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", // "You can bypass this with residence.checkbadflags permission node"); @@ -865,20 +865,22 @@ public void UpdateConfigFile() { c.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); - c.addComment("Global.Lwc.OnDelete", "Removes lwc protection from all defined objects when removing residence"); - LwcOnDelete = c.get("Global.Lwc.OnDelete", true); - c.addComment("Global.Lwc.OnBuy", "Removes lwc protection from all defined objects when buying residence"); - LwcOnBuy = c.get("Global.Lwc.OnBuy", true); - c.addComment("Global.Lwc.OnUnrent", "Removes lwc protection from all defined objects when unrenting residence"); - LwcOnUnrent = c.get("Global.Lwc.OnUnrent", true); - - c.addComment("Global.Lwc.MaterialList", "List of blocks you want to remove protection from"); - for (String oneName : c.get("Global.Lwc.MaterialList", Arrays.asList("CHEST", "TRAPPED_CHEST", "furnace", "dispenser"))) { - Material mat = Material.getMaterial(oneName.toUpperCase()); - if (mat != null) - LwcMatList.add(mat); - else - Bukkit.getConsoleSender().sendMessage("Incorrect Lwc material name for " + oneName); + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + c.addComment("Global.Lwc.OnDelete", "Removes lwc protection from all defined objects when removing residence"); + LwcOnDelete = c.get("Global.Lwc.OnDelete", true); + c.addComment("Global.Lwc.OnBuy", "Removes lwc protection from all defined objects when buying residence"); + LwcOnBuy = c.get("Global.Lwc.OnBuy", true); + c.addComment("Global.Lwc.OnUnrent", "Removes lwc protection from all defined objects when unrenting residence"); + LwcOnUnrent = c.get("Global.Lwc.OnUnrent", true); + + c.addComment("Global.Lwc.MaterialList", "List of blocks you want to remove protection from"); + for (String oneName : c.get("Global.Lwc.MaterialList", Arrays.asList("CHEST", "TRAPPED_CHEST", "furnace", "dispenser"))) { + Material mat = Material.getMaterial(oneName.toUpperCase()); + if (mat != null) + LwcMatList.add(mat); + else + Bukkit.getConsoleSender().sendMessage("Incorrect Lwc material name for " + oneName); + } } // TNT explosions below 63 diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java index cb3f4329d..a5979aa51 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java @@ -1,14 +1,20 @@ package com.bekvon.bukkit.residence.listeners; +import java.util.ArrayList; import java.util.List; +import org.bukkit.Bukkit; +import org.bukkit.ChunkSnapshot; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; +import com.bekvon.bukkit.cmiLib.CMILocation; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; @@ -41,50 +47,88 @@ public static void register(Plugin plugin) { } public static void removeLwcFromResidence(final Player player, final ClaimedResidence res) { -// Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { -// @Override -// public void run() { - long time = System.currentTimeMillis(); - com.griefcraft.lwc.LWC lwc = com.griefcraft.lwc.LWC.getInstance(); - if (lwc == null) + if (Version.isCurrentLower(Version.v1_13_R1)) return; - if (res == null) - return; - int i = 0; - - com.griefcraft.cache.ProtectionCache cache = lwc.getProtectionCache(); - - List list = Residence.getInstance().getConfigManager().getLwcMatList(); - - try { - for (CuboidArea area : res.getAreaArray()) { - Location low = area.getLowLocation(); - Location high = area.getHighLocation(); - World world = low.getWorld(); - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - for (int y = low.getBlockY(); y <= high.getBlockY(); y++) { - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - Block b = world.getBlockAt(x, y, z); - if (!b.getChunk().isLoaded()) - b.getChunk().load(); - if (!list.contains(b.getType())) - continue; - com.griefcraft.model.Protection prot = cache.getProtection(b); - if (prot == null) - continue; - prot.remove(); - i++; + + Bukkit.getScheduler().runTaskAsynchronously(Residence.getInstance(), new Runnable() { + @Override + public void run() { + long time = System.currentTimeMillis(); + com.griefcraft.lwc.LWC lwc = com.griefcraft.lwc.LWC.getInstance(); + if (lwc == null) + return; + if (res == null) + return; + int i = 0; + + com.griefcraft.cache.ProtectionCache cache = lwc.getProtectionCache(); + + List list = Residence.getInstance().getConfigManager().getLwcMatList(); + + List block = new ArrayList(); + + try { + ChunkSnapshot chunkSnapshot = null; + int chunkX = 0; + int chunkZ = 0; + for (CuboidArea area : res.getAreaArray()) { + Location low = area.getLowLocation(); + Location high = area.getHighLocation(); + World world = low.getWorld(); + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + int hy = world.getHighestBlockYAt(x, z); + if (high.getBlockY() < hy) + hy = high.getBlockY(); + int cx = Math.abs(x % 16); + int cz = Math.abs(z % 16); + if (chunkSnapshot == null || x >> 4 != chunkX || z >> 4 != chunkZ) { + if (!world.getBlockAt(x, 0, z).getChunk().isLoaded()) { + world.getBlockAt(x, 0, z).getChunk().load(); + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(false, false, false); + world.getBlockAt(x, 0, z).getChunk().unload(); + } else { + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(); + } + chunkX = x >> 4; + chunkZ = z >> 4; + } + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + for (int y = low.getBlockY(); y <= hy; y++) { + BlockData type = chunkSnapshot.getBlockData(cx, y, cz); + if (!list.contains(type.getMaterial())) + continue; + block.add(world.getBlockAt(x, y, z)); + } + } else { + for (int y = low.getBlockY(); y <= hy; y++) { + Material type = CMILocation.getBlockTypeSafe(new Location(world, x, y, z)); + if (!list.contains(type)) + continue; + block.add(world.getBlockAt(x, y, z)); + } + } + } } } + } catch (Exception e) { + e.printStackTrace(); + } + + for (Block b : block) { + com.griefcraft.model.Protection prot = cache.getProtection(b); + if (prot == null) + continue; + prot.remove(); + i++; } + + if (i > 0) + Residence.getInstance().msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); + return; } - } catch (Exception e) { - } - if (i > 0) - Residence.getInstance().msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); - return; -// } -// }); + }); } @Override diff --git a/src/plugin.yml b/src/plugin.yml index e7683433d..c53d8b7e9 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.3.2 +version: 4.9.3.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 62a7d85be581e29f767156e48108f4afff88ffa3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 30 Mar 2021 14:49:35 +0300 Subject: [PATCH 0857/1142] Faster residence cleaning --- .../bukkit/residence/ConfigManager.java | 106 ++++++++---------- .../protection/ClaimedResidence.java | 4 +- .../protection/ResidenceManager.java | 63 +++++++---- 3 files changed, 89 insertions(+), 84 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index aab803494..6f672b62a 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -63,7 +63,7 @@ public class ConfigManager { protected boolean LwcOnBuy = false; protected boolean LwcOnUnrent = false; protected List LwcMatList = new ArrayList(); - protected boolean UseClean; + protected boolean UseClean = false; protected boolean PvPFlagPrevent; protected boolean OverridePvp; protected boolean BlockAnyTeleportation; @@ -121,7 +121,7 @@ public class ConfigManager { protected int FlowLevel; protected int PlaceLevel; protected int BlockFallLevel; - protected int CleanLevel; + protected int CleanLevel = 63; protected int NewPlayerRangeX; protected int NewPlayerRangeY; protected int NewPlayerRangeZ; @@ -866,6 +866,7 @@ public void UpdateConfigFile() { AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + LwcMatList.clear(); c.addComment("Global.Lwc.OnDelete", "Removes lwc protection from all defined objects when removing residence"); LwcOnDelete = c.get("Global.Lwc.OnDelete", true); c.addComment("Global.Lwc.OnBuy", "Removes lwc protection from all defined objects when buying residence"); @@ -920,26 +921,28 @@ public void UpdateConfigFile() { BlockFallLevel = c.get("Global.AntiGreef.BlockFall.Level", 62); BlockFallWorlds = c.get("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName)); - // Res cleaning - c.addComment("Global.AntiGreef.ResCleaning.Use", - "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", - "Effective way to prevent residence creating near greefing target and then remove it", - "ATTENTION! Bigger residence areas could want to create bigger loads on server when cleaning up areas. So dont use this if regular player have access to huge residences. 15 million blocks would be a max limit"); - UseClean = c.get("Global.AntiGreef.ResCleaning.Use", false); - c.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); - CleanLevel = c.get("Global.AntiGreef.ResCleaning.Level", 63); - c.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); - List pls = c.get("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(CMIMaterial.WATER.toString(), CMIMaterial.LAVA.toString())); - for (Object one : pls) { - CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); - if (mat != CMIMaterial.NONE && mat.getMaterial() != null) - CleanBlocks.add(mat.getMaterial()); - } - - CleanWorlds = c.get("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName)); + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + // Res cleaning + CleanBlocks.clear(); + c.addComment("Global.AntiGreef.ResCleaning.Use", + "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", + "Effective way to prevent residence creating near greefing target and then remove it", + "ATTENTION! Bigger residence areas could want to create bigger loads on server when cleaning up areas. So dont use this if regular player have access to huge residences. 15 million blocks would be a max limit"); + UseClean = c.get("Global.AntiGreef.ResCleaning.Use", false); + c.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); + CleanLevel = c.get("Global.AntiGreef.ResCleaning.Level", 63); + c.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); + List pls = c.get("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(CMIMaterial.WATER.toString(), CMIMaterial.LAVA.toString())); + for (Object one : pls) { + CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); + if (mat != CMIMaterial.NONE && mat.getMaterial() != null && !mat.isAir()) + CleanBlocks.add(mat.getMaterial()); + } - c.addComment("Global.AntiGreef.Flags.Prevent", - "By setting this to true flags from list will be protected from change while there is some one inside residence besides owner", + CleanWorlds = c.get("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName)); + } + + c.addComment("Global.AntiGreef.Flags.Prevent", "By setting this to true flags from list will be protected from change while there is some one inside residence besides owner", "Protects in example from people inviting some one and changing pvp flag to true to kill them"); PvPFlagPrevent = c.get("Global.AntiGreef.Flags.Prevent", true); FlagsList = c.get("Global.AntiGreef.Flags.list", Arrays.asList("pvp")); @@ -968,29 +971,27 @@ public void UpdateConfigFile() { c.addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); leaseCheckInterval = c.get("Global.LeaseCheckInterval", 10); - c.addComment("Global.LeaseAutoRenew", - "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); + c.addComment("Global.LeaseAutoRenew", "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); leaseAutoRenew = c.get("Global.LeaseAutoRenew", true); c.addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); c.get("Global.EnablePermissions", true); - c.addComment("Global.EnableEconomy", - "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); + c.addComment("Global.EnableEconomy", "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); enableEconomy = c.get("Global.EnableEconomy", true); - c.addComment("Global.Type", - "Defaults to None which will start by looking to default economy engine throw vault API and if it fails to any supported economy engine", + c.addComment("Global.Type", "Defaults to None which will start by looking to default economy engine throw vault API and if it fails to any supported economy engine", "Custom economy engines can be defined to access economy directly", "Supported variables: " + EconomyType.toStringLine()); VaultEconomy = EconomyType.getByName(c.get("Global.Type", "None")); - if (VaultEconomy == null) { + if (VaultEconomy == null) + + { plugin.consoleMessage("&cCould not determine economy from " + c.get("Global.Type", "Vault")); plugin.consoleMessage("&cTrying to find suitable economy system"); VaultEconomy = EconomyType.None; } - c.addComment("Global.ExtraEnterMessage", - "When enabled extra message will appear in chat if residence is for rent or for sell to inform how he can rent/buy residence with basic information."); + c.addComment("Global.ExtraEnterMessage", "When enabled extra message will appear in chat if residence is for rent or for sell to inform how he can rent/buy residence with basic information."); ExtraEnterMessage = c.get("Global.ExtraEnterMessage", true); c.addComment("Global.Sell.Subzone", "If set to true, this will allow to sell subzones. Its recommended to keep it false tho"); @@ -1027,12 +1028,10 @@ public void UpdateConfigFile() { c.addComment("Global.Rent.DefaultValues.PlayerAutoPay", "If set to true, when player is not defining auto pay on renting, then this value will be used"); RentPlayerAutoPay = c.get("Global.Rent.DefaultValues.PlayerAutoPay", true); - c.addComment("Global.Rent.Schematics.RestoreAfterRentEnds", - "EXPERIMENTAL!!! If set to true, residence will be restored to state it was when backup flag was set to true", + c.addComment("Global.Rent.Schematics.RestoreAfterRentEnds", "EXPERIMENTAL!!! If set to true, residence will be restored to state it was when backup flag was set to true", "For securoty reassons only players with aditional residence.backup permission node can set backup flag"); RestoreAfterRentEnds = c.get("Global.Rent.Schematics.RestoreAfterRentEnds", true); - c.addComment("Global.Rent.Schematics.SaveOnFlagChange", - "When set to true, area state will be saved only when setting backup to true value", + c.addComment("Global.Rent.Schematics.SaveOnFlagChange", "When set to true, area state will be saved only when setting backup to true value", "When set to false, area state will be saved before each renting to have always up to date area look", "Keep in mind that when its set to false, there is slightly bigger server load as it has to save area each time when some one rents it"); SchematicsSaveOnFlagChange = c.get("Global.Rent.Schematics.SaveOnFlagChange", true); @@ -1040,7 +1039,8 @@ public void UpdateConfigFile() { c.addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); rentCheckInterval = c.get("Global.RentCheckInterval", 10); - ELMessageType old = c.getC().isBoolean("Global.ActionBar.General") && c.getC().getBoolean("Global.ActionBar.General") ? ELMessageType.ActionBar : ELMessageType.ChatBox; + ELMessageType old = c.getC().isBoolean("Global.ActionBar.General") && c.getC().getBoolean("Global.ActionBar.General") ? ELMessageType.ActionBar + : ELMessageType.ChatBox; old = c.getC().isBoolean("Global.TitleBar.EnterLeave") && c.getC().getBoolean("Global.TitleBar.EnterLeave") ? ELMessageType.TitleBar : old; c.addComment("Global.Messages.GeneralMessages", "Defines where you want to send residence enter/leave/deny move and similar messages. Possible options: " + ELMessageType.getAllValuesAsString(), @@ -1067,8 +1067,7 @@ public void UpdateConfigFile() { c.addComment("Global.ResidenceChatPrefixLength", "Max lenght of residence chat prefix including color codes"); chatPrefixLength = c.get("Global.ResidenceChatPrefixLength", 16); - c.addComment("Global.AdminOnlyCommands", - "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); + c.addComment("Global.AdminOnlyCommands", "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); adminsOnly = c.get("Global.AdminOnlyCommands", false); c.addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); @@ -1078,8 +1077,7 @@ public void UpdateConfigFile() { "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); AdminFullAccess = c.get("Global.AdminFullAccess", false); - c.addComment("Global.MultiWorldPlugin", - "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", + c.addComment("Global.MultiWorldPlugin", "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); multiworldPlugin = c.get("Global.MultiWorldPlugin", "Multiverse-Core"); @@ -1095,31 +1093,26 @@ public void UpdateConfigFile() { c.addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); stopOnSaveError = c.get("Global.StopOnSaveFault", true); - c.addComment( - "This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); + c.addComment("This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); namefix = c.get("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]"); - c.addComment("Global.ShowIntervalMessages", - "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); + c.addComment("Global.ShowIntervalMessages", "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); showIntervalMessages = c.get("Global.ShowIntervalMessages", false); c.addComment("Global.ShowNoobMessage", "Setting this to true sends a tutorial message to the new player when he places chest on ground."); ShowNoobMessage = c.get("Global.ShowNoobMessage", true); - c.addComment("Global.NewPlayer", "Setting this to true creates residence around players placed chest if he don't have any.", - "Only once every server restart if he still don't have any residence"); + c.addComment("Global.NewPlayer", "Setting this to true creates residence around players placed chest if he don't have any.", "Only once every server restart if he still don't have any residence"); NewPlayerUse = c.get("Global.NewPlayer.Use", false); - c.addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", - "By setting to false, money will be taken from player, if he has them"); + c.addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", "By setting to false, money will be taken from player, if he has them"); NewPlayerFree = c.get("Global.NewPlayer.Free", true); c.addComment("Global.NewPlayer.Range", "Range from placed chest o both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide"); NewPlayerRangeX = c.get("Global.NewPlayer.Range.X", 5); NewPlayerRangeY = c.get("Global.NewPlayer.Range.Y", 5); NewPlayerRangeZ = c.get("Global.NewPlayer.Range.Z", 5); - c.addComment("Global.CustomContainers", - "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); - pls = c.get("Global.CustomContainers", new ArrayList()); + c.addComment("Global.CustomContainers", "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); + List pls = c.get("Global.CustomContainers", new ArrayList()); for (Object one : pls) { CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); if (mat != CMIMaterial.NONE) @@ -1142,8 +1135,7 @@ public void UpdateConfigFile() { c.addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundaries"); useVisualizer = c.get("Global.Visualizer.Use", true); - c.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", - "Keep it no more as 30, as player cant see more than 16 blocks"); + c.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", "Keep it no more as 30, as player cant see more than 16 blocks"); VisualizerRange = c.get("Global.Visualizer.Range", 16); c.addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); VisualizerShowFor = c.get("Global.Visualizer.ShowFor", 5000); @@ -1158,9 +1150,7 @@ public void UpdateConfigFile() { if (VisualizerCollumnSpacing < 1) VisualizerCollumnSpacing = 1; - c.addComment("Global.Visualizer.SkipBy", - "Defines by how many particles we need to skip", - "This will create moving particle effect and will improve overall look of selection", + c.addComment("Global.Visualizer.SkipBy", "Defines by how many particles we need to skip", "This will create moving particle effect and will improve overall look of selection", "By increasing this number, you can decrease update interval"); VisualizerSkipBy = c.get("Global.Visualizer.SkipBy", 5); if (VisualizerSkipBy < 1) @@ -1185,11 +1175,9 @@ public void UpdateConfigFile() { effectsList += one.name().toLowerCase() + ", "; } - c.addComment("Global.Visualizer.Selected", - "Particle effect names. possible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", + c.addComment("Global.Visualizer.Selected", "Particle effect names. possible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", - " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance", - "", + " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance", "", "If using spigot based server different particles can be used:", effectsList); // Frame diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 40e02c189..51d5da6e1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1912,12 +1912,12 @@ public ResidenceBank getBank() { @Deprecated public String getWorld() { - return perms.getWorld(); + return perms.getWorldName(); } @Deprecated public String getWorldName() { - return perms.getWorld(); + return perms.getWorldName(); } public ResidencePlayer getRPlayer() { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index eabb45da1..95b5fde7e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -18,15 +18,18 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.ChunkSnapshot; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.cmiLib.CMIChatColor; import com.bekvon.bukkit.cmiLib.RawMessage; +import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; import com.bekvon.bukkit.residence.containers.Flags; @@ -45,6 +48,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; public class ResidenceManager implements ResidenceInterface { @@ -527,12 +531,16 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole residences.remove(name.toLowerCase()); - if (plugin.getConfigManager().isUseClean() && plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) { + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1) && plugin.getConfigManager().isUseClean() && plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) { CuboidArea[] arr = res.getAreaArray(); Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { + ChunkSnapshot chunkSnapshot = null; + int chunkX = 0; + int chunkZ = 0; + Set locations = new HashSet(); for (CuboidArea area : arr) { Location low = area.getLowLocation().clone(); Location high = area.getHighLocation().clone(); @@ -541,35 +549,44 @@ public void run() { if (low.getBlockY() < plugin.getConfigManager().getCleanLevel()) low.setY(plugin.getConfigManager().getCleanLevel()); - World world = low.getWorld(); + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + int hy = world.getHighestBlockYAt(x, z); + if (high.getBlockY() < hy) + hy = high.getBlockY(); + + int cx = Math.abs(x % 16); + int cz = Math.abs(z % 16); + if (chunkSnapshot == null || x >> 4 != chunkX || z >> 4 != chunkZ) { + if (!world.getBlockAt(x, 0, z).getChunk().isLoaded()) { + world.getBlockAt(x, 0, z).getChunk().load(); + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(false, false, false); + world.getBlockAt(x, 0, z).getChunk().unload(); + } else { + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(); + } + chunkX = x >> 4; + chunkZ = z >> 4; + } - Location temploc = new Location(world, low.getBlockX(), low.getBlockY(), low.getBlockZ()); - - Bukkit.getScheduler().runTask(plugin, () -> { - Long blocks = 0L; - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - temploc.setX(x); - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - temploc.setZ(z); - for (int y = low.getBlockY(); y <= world.getHighestBlockAt(x, z).getY(); y++) { - temploc.setY(y); - - if (!temploc.getChunk().isLoaded()) { - temploc.getChunk().load(); - } - if (plugin.getConfigManager().getCleanBlocks().contains(temploc.getBlock().getType())) { - temploc.getBlock().setType(Material.AIR); - } - - blocks++; + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + for (int y = low.getBlockY(); y <= hy; y++) { + BlockData type = chunkSnapshot.getBlockData(cx, y, cz); + if (!plugin.getConfigManager().getCleanBlocks().contains(type.getMaterial())) + continue; + locations.add(new Location(world, x, y, z)); } } } - }); + } } } - return; + Bukkit.getScheduler().runTask(plugin, () -> { + for (Location one : locations) { + one.getBlock().setType(Material.AIR); + } + }); } }); } From 25313fd787c34f8778f7ef12df3cd0d3c4cf76b3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 30 Mar 2021 14:55:24 +0300 Subject: [PATCH 0858/1142] Elytra flag check error fix --- .../bukkit/residence/listeners/ResidencePlayerListener1_9.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java index 77cc09f89..13e05085d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java @@ -65,6 +65,9 @@ public void onResidenceChange(ResidenceChangedEvent event) { if (!player.isGliding()) return; + if (newRes == null) + return; + if (newRes.getPermissions().playerHas(player, Flags.elytra, FlagCombo.TrueOrNone)) return; From 202d1baf75a79830409cc7d5ef62d95ef22404d0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 9 Apr 2021 16:04:07 +0300 Subject: [PATCH 0859/1142] Checking /res limits by residence.command.limits.others --- src/com/bekvon/bukkit/residence/commands/limits.java | 4 ++++ src/plugin.yml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 1779aa8d7..80fa937b2 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -12,6 +12,7 @@ import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; public class limits implements cmd { @@ -34,6 +35,9 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (target == null) return false; + if (!sender.getName().equalsIgnoreCase(target.getName()) && !ResPerm.command_$1_others.hasPermission(sender, this.getClass().getSimpleName())) + return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(target.getUniqueId()); rPlayer.getGroup().printLimits(sender, target, rsadm); return true; diff --git a/src/plugin.yml b/src/plugin.yml index c53d8b7e9..8c0d06603 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.3.3 +version: 4.9.3.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 72dbd8494f21db008ff7da78f02e18386139edbd Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Apr 2021 12:55:23 +0300 Subject: [PATCH 0860/1142] Translatable confirm line hover text --- src/com/bekvon/bukkit/residence/ConfigManager.java | 5 ++++- src/com/bekvon/bukkit/residence/commands/remove.java | 4 ++-- src/com/bekvon/bukkit/residence/containers/lm.java | 1 + src/com/bekvon/bukkit/residence/utils/FileCleanUp.java | 4 ++-- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 6f672b62a..254d9f541 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -940,8 +940,11 @@ public void UpdateConfigFile() { } CleanWorlds = c.get("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName)); + for (int i = 0; i < CleanWorlds.size(); i++) { + CleanWorlds.set(i, CleanWorlds.get(i).toLowerCase()); + } } - + c.addComment("Global.AntiGreef.Flags.Prevent", "By setting this to true flags from list will be protected from change while there is some one inside residence besides owner", "Protects in example from people inviting some one and changing pvp flag to true to kill them"); PvPFlagPrevent = c.get("Global.AntiGreef.Flags.Prevent", true); diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 42004b383..2d6e19d66 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -80,9 +80,9 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (sender instanceof Player) { RawMessage rm = new RawMessage(); if (res.isSubzone()) { - rm.addText(plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName())).addHover("Click to confirm").addCommand(cmd + " confirm"); + rm.addText(plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName())).addHover(plugin.msg(lm.info_clickToConfirm)).addCommand(cmd + " confirm"); } else { - rm.addText(plugin.msg(lm.Residence_DeleteConfirm, res.getResidenceName())).addHover("Click to confirm").addCommand(cmd + " confirm"); + rm.addText(plugin.msg(lm.Residence_DeleteConfirm, res.getResidenceName())).addHover(plugin.msg(lm.info_clickToConfirm)).addCommand(cmd + " confirm"); } if (plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()).length() > 0) rm.show(sender); diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 007aa9de4..ffbbad6f0 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -163,6 +163,7 @@ public enum lm { info_sec("&e%1 &6sec "), info_click("&7Click"), + info_clickToConfirm("&7Click to confirm"), server_land("Server_Land"), diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 3f6911a44..9d1dc9f50 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -55,7 +55,7 @@ public void cleanFiles() { if (player == null) continue; - if (!plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) + if (!plugin.getConfigManager().getCleanWorlds().contains(res.getPermissions().getWorldName().toLowerCase())) continue; if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(plugin.getServerLandName())) @@ -66,7 +66,7 @@ public void cleanFiles() { if (dif < interval) continue; - if (ResidenceVaultAdapter.hasPermission(player, ResPerm.cleanbypass.getPermission(), res.getWorld())) + if (ResidenceVaultAdapter.hasPermission(player, ResPerm.cleanbypass.getPermission(), res.getPermissions().getWorldName().toLowerCase())) continue; ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getUniqueId()); From 889b81dc03eb59748e5d6fbef3b08008a5bbcca6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Apr 2021 13:11:52 +0300 Subject: [PATCH 0861/1142] Double check for move flag prevention when teleport fails --- .../listeners/ResidencePlayerListener.java | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 5b2ce8a74..eb334208f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -80,6 +80,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.Utils; @@ -1716,7 +1717,6 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { if (player.hasMetadata("NPC")) return; - Location loc = event.getTo(); handleNewLocation(player, loc, false); if (plugin.isResAdminOn(player)) { @@ -2072,10 +2072,8 @@ private static boolean teleport(Player player, Location loc) { // PlayerTeleportEvent ev = new PlayerTeleportEvent(player, player.getLocation(), loc); // Bukkit.getServer().getPluginManager().callEvent(ev); - if (!player.teleport(loc)) - return false; - return true; + return player.teleport(loc); } public boolean handleNewLocation(final Player player, Location loc, boolean move) { @@ -2222,6 +2220,9 @@ public void run() { return teleported; } + Debug.D("s " + res.getName() + " " + !res.isOwner(player) + " " + !ResPerm.admin_move + .hasPermission(player, 10000L)); + if (Flags.move.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move .hasPermission(player, 10000L)) { @@ -2240,20 +2241,25 @@ public void run() { Location newLoc = res.getOutsideFreeLoc(loc, player); player.closeInventory(); teleported = teleport(player, newLoc); - } else if (lastLoc != null) { + } - StuckInfo info = updateStuckTeleport(player, loc); - player.closeInventory(); - if (info != null && info.getTimesTeleported() > 5) { + if (!teleported) { + if (lastLoc != null) { + StuckInfo info = updateStuckTeleport(player, loc); + player.closeInventory(); + if (info != null && info.getTimesTeleported() > 5) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + teleported = teleport(player, newLoc); + } else { + teleported = teleport(player, lastLoc); + } + } + + if (!teleported) { Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); teleported = teleport(player, newLoc); - } else { - teleported = teleport(player, lastLoc); } - } else { - Location newLoc = res.getOutsideFreeLoc(loc, player); - player.closeInventory(); - teleported = teleport(player, newLoc); } switch (plugin.getConfigManager().getEnterLeaveMessageType()) { From 8008d2c62d961cac86ff1fe734432ef632563651 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Apr 2021 13:35:40 +0300 Subject: [PATCH 0862/1142] Fly flag handling adjustment --- .../listeners/ResidencePlayerListener.java | 46 ++++++++++++------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index eb334208f..a8b13ab42 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1824,8 +1824,8 @@ private void fly(Player player, boolean state) { return; boolean land = player.isFlying(); - player.setFlying(state); - player.setAllowFlight(state); + player.setFlying(false); + player.setAllowFlight(false); if (land) { Location loc = getSafeLocation(player.getLocation()); if (loc == null) { @@ -1841,6 +1841,8 @@ private void fly(Player player, boolean state) { player.teleport(loc); } } + player.setFlying(false); + player.setAllowFlight(false); } else { player.setAllowFlight(true); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { @@ -1848,6 +1850,13 @@ private void fly(Player player, boolean state) { if (res != null && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && player.isOnline()) { player.setAllowFlight(true); } + if (res == null || !res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && player.isOnline()) { + if (player.hasPermission("cmi.command.fly") || player.hasPermission("essentials.fly")) + return; + + player.setFlying(false); + player.setAllowFlight(false); + } }, 20L); } } @@ -1878,8 +1887,9 @@ private void checkSpecialFlags(Player player, ClaimedResidence newRes, ClaimedRe if (Flags.sun.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || Flags.rain.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) player.resetPlayerWeather(); - if (Flags.fly.isGlobalyEnabled() && oldRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) + if (Flags.fly.isGlobalyEnabled() && oldRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) { fly(player, false); + } if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && oldRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) player.setGlowing(false); @@ -1953,8 +1963,9 @@ else if (oldRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !newR player.setGlowing(true); } - if (Flags.fly.isGlobalyEnabled() && newRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) + if (Flags.fly.isGlobalyEnabled() && newRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) { fly(player, true); + } if (Flags.day.isGlobalyEnabled() && newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.setPlayerTime(6000L, false); @@ -2188,20 +2199,24 @@ public void run() { Location newLoc = res.getOutsideFreeLoc(loc, player); player.closeInventory(); teleported = teleport(player, newLoc); - } else if (lastLoc != null) { + } - StuckInfo info = updateStuckTeleport(player, loc); - player.closeInventory(); - if (info != null && info.getTimesTeleported() > 5) { + if (!teleported) { + if (lastLoc != null) { + StuckInfo info = updateStuckTeleport(player, loc); + player.closeInventory(); + if (info != null && info.getTimesTeleported() > 5) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + teleported = teleport(player, newLoc); + } else { + teleported = teleport(player, lastLoc); + } + } + if (!teleported) { Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); teleported = teleport(player, newLoc); - } else { - teleported = teleport(player, lastLoc); } - } else { - Location newLoc = res.getOutsideFreeLoc(loc, player); - player.closeInventory(); - teleported = teleport(player, newLoc); } switch (plugin.getConfigManager().getEnterLeaveMessageType()) { @@ -2220,9 +2235,6 @@ public void run() { return teleported; } - Debug.D("s " + res.getName() + " " + !res.isOwner(player) + " " + !ResPerm.admin_move - .hasPermission(player, 10000L)); - if (Flags.move.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move .hasPermission(player, 10000L)) { From a1c03329a3f9cb30bf8d7fbd29c25ab81f935839 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Apr 2021 13:45:54 +0300 Subject: [PATCH 0863/1142] Properly showing provided world for listall command when changing pages --- .../residence/protection/ResidenceManager.java | 6 +++--- .../residence/text/help/InformationPager.java | 16 +++++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 95b5fde7e..144bb895c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -318,7 +318,7 @@ public void listResidences(CommandSender sender, String targetplayer, int page, boolean hidden = showhidden; TreeMap ownedResidences = plugin.getPlayerManager().getResidencesMap(targetplayer, hidden, onlyHidden, world); ownedResidences.putAll(plugin.getRentManager().getRentsMap(targetplayer, onlyHidden, world)); - plugin.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin); + plugin.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin, world); } public void listAllResidences(CommandSender sender, int page) { @@ -327,7 +327,7 @@ public void listAllResidences(CommandSender sender, int page) { public void listAllResidences(CommandSender sender, int page, boolean showhidden, World world) { TreeMap list = getFromAllResidencesMap(showhidden, false, world); - plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); + plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden, world); } public void listAllResidences(CommandSender sender, int page, boolean showhidden) { @@ -336,7 +336,7 @@ public void listAllResidences(CommandSender sender, int page, boolean showhidden public void listAllResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { TreeMap list = getFromAllResidencesMap(showhidden, onlyHidden, null); - plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden); + plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden, null); } public String[] getResidenceList() { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 66556ed6b..666cdc1cf 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -3,7 +3,6 @@ import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; -import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; @@ -15,12 +14,11 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.Zrips.CMI.CMI; import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -61,7 +59,7 @@ public void printInfo(CommandSender sender, String command, String title, List ownedResidences, int page, boolean resadmin) { + public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, int page, boolean resadmin, World world) { int perPage = 20; if (sender instanceof Player) @@ -158,10 +156,14 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, final int start, final boolean resadmin) { @@ -303,7 +305,7 @@ public void run() { } catch (Exception e) { e.printStackTrace(); } - + Bukkit.getConsoleSender().sendMessage("Saved file to FullLists folder with " + file.getName() + " name"); } }); From 88cf8c53333517fc67ed3051a7611fbeec092e15 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Apr 2021 15:06:28 +0300 Subject: [PATCH 0864/1142] Fix for not being able to join raid party --- src/com/bekvon/bukkit/residence/commands/attack.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/attack.java b/src/com/bekvon/bukkit/residence/commands/attack.java index cd55256f3..743dba143 100644 --- a/src/com/bekvon/bukkit/residence/commands/attack.java +++ b/src/com/bekvon/bukkit/residence/commands/attack.java @@ -64,10 +64,10 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return null; } - if (res.getRaid().isPlayerImmune()) { + if (res.getRaid().isPlayerImmune() && !res.getRaid().isInPreRaid() && !res.getRaid().isUnderRaid()) { plugin.msg(player, lm.Raid_attack_playerImmune, Utils.to24hourShort(res.getRaid().getPlayerImmunityUntil() - System.currentTimeMillis() + 1000L)); return null; - } + } if (res.getRaid().isUnderRaidCooldown() && !res.getRaid().isInPreRaid() && !res.getRaid().isUnderRaid()) { plugin.msg(player, lm.Raid_attack_cooldown, Utils.to24hourShort(res.getRaid().getCooldownEnd() - System.currentTimeMillis() + 1000L)); From 0163ee0d850ba2aecf66638f886fd3728877fdfe Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Apr 2021 15:41:55 +0300 Subject: [PATCH 0865/1142] Allow residence shifting when /res auto with appropriate messages --- .../bukkit/residence/commands/auto.java | 89 +++++++------------ 1 file changed, 31 insertions(+), 58 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index b396e2aea..533e630b8 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -16,6 +16,7 @@ import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; @@ -50,70 +51,24 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } } - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - - PermissionGroup group = rPlayer.getGroup(); - Location loc = player.getLocation(); - int x = group.getMinX(); - int y = group.getMinY(); - int z = group.getMinZ(); - - if (lenght > 0) { - x = lenght > group.getMaxX() ? group.getMaxX() : lenght; - z = lenght > group.getMaxZ() ? group.getMaxZ() : lenght; - y = lenght > group.getMaxY() ? group.getMaxY() : lenght; - } else { - x = getMin(x, group.getMaxX()); - y = getMin(y, group.getMaxY()); - z = getMin(z, group.getMaxZ()); - } - - int rX = (x - 1) / 2; - int rY = (y - 1) / 2; - int rZ = (z - 1) / 2; - - int minX = loc.getBlockX() - rX; - int maxX = loc.getBlockX() + rX; - - if (maxX - minX + 1 < x) - maxX++; - - int minY = loc.getBlockY() - rY; - int maxY = loc.getBlockY() + rY; - - if (maxY - minY + 1 < y) - maxY++; - - if (minY < 0) { - maxY += -minY; - minY = 0; - } - - if (maxY > loc.getWorld().getMaxHeight()) { - int dif = maxY - loc.getWorld().getMaxHeight(); - if (minY > 0) - minY -= dif; - if (minY < 0) - minY = 0; - maxY = loc.getWorld().getMaxHeight() - 1; - } - - int minZ = loc.getBlockZ() - rZ; - int maxZ = loc.getBlockZ() + rZ; - if (maxZ - minZ + 1 < z) - maxZ++; - + int minY = loc.getBlockY() - 1; + int maxY = loc.getBlockY() + 1; if (plugin.getConfigManager().isSelectionIgnoreY()) { minY = plugin.getSelectionManager().getSelection(player).getMinYAllowed(); maxY = plugin.getSelectionManager().getSelection(player).getMaxYAllowed(); } - plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), minX, minY, minZ), false); - plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), maxX, maxY, maxZ), false); + plugin.getSelectionManager().placeLoc1(player, loc.clone().add(-1, minY, -1), false); + plugin.getSelectionManager().placeLoc2(player, loc.clone().add(1, maxY, 1), false); - resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true, lenght); + boolean result = resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true, lenght); + + if (!result) { + Residence.getInstance().msg(player, lm.Area_SizeLimit); + return true; + } if (plugin.getResidenceManager().getByName(resName) != null) { for (int i = 1; i < 50; i++) { @@ -154,7 +109,7 @@ private static int getMin(int min, int max) { return newmin; } - public static void resize(Residence plugin, Player player, CuboidArea cuboid, boolean checkBalance, int max) { + public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, boolean checkBalance, int max) { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); @@ -256,8 +211,10 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo if (checkBalance) { if (plugin.getConfigManager().enableEconomy()) { cost = c.getCost(group); - if (cost > balance) + if (cost > balance) { + plugin.msg(player, lm.Economy_NotEnoughMoney); break; + } } } @@ -266,8 +223,24 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo dir = dir.getNext(); } + + int x = group.getMinX(); + int y = group.getMinY(); + int z = group.getMinZ(); + + x = getMin(x, group.getMaxX()); + y = getMin(y, group.getMaxY()); + z = getMin(z, group.getMaxZ()); + plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); + + cuboid = plugin.getSelectionManager().getSelectionCuboid(player); + + if (cuboid.getXSize() < x || cuboid.getYSize() < y || cuboid.getZSize() < z) + return false; + + return true; } public enum direction { From 7649d85e0b66533ecead1190b4f714e416027f61 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 28 May 2021 13:53:59 +0300 Subject: [PATCH 0866/1142] Including residences into list if you are added to them as trusted --- .../bukkit/residence/ConfigManager.java | 14 +++- .../bekvon/bukkit/residence/Residence.java | 11 ++- .../bukkit/residence/commands/padd.java | 6 +- .../bukkit/residence/containers/Flags.java | 25 ++++++ .../residence/containers/ResidencePlayer.java | 16 ++++ .../bukkit/residence/containers/lm.java | 24 +++--- .../protection/ClaimedResidence.java | 39 ++++++++- .../residence/protection/FlagPermissions.java | 4 +- .../residence/protection/PlayerManager.java | 53 ++++++++++++- .../protection/ResidenceManager.java | 2 + .../protection/ResidencePermissions.java | 79 ++++++++++++++----- .../residence/text/help/InformationPager.java | 7 +- src/plugin.yml | 2 +- 13 files changed, 243 insertions(+), 39 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 254d9f541..ccbd20a58 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -528,9 +528,19 @@ public void UpdateGroupedFlagsFile() { } } + for (Flags one : Flags.values()) { + one.resetGroups(); + } + for (String oneGroup : conf.getConfigurationSection("Global.GroupedFlags").getKeys(false)) { - for (String OneFlag : conf.getStringList("Global.GroupedFlags." + oneGroup)) { - FlagPermissions.addFlagToFlagGroup(oneGroup, OneFlag); + for (String oneFlag : conf.getStringList("Global.GroupedFlags." + oneGroup)) { + + Flags flag = Flags.getFlag(oneFlag); + if (flag != null) { + flag.addGroup(oneGroup); + } + + FlagPermissions.addFlagToFlagGroup(oneGroup, oneFlag); } } } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 2ce175c9f..35ba96276 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -654,7 +654,14 @@ public void run() { getLocaleManager().LoadLang(getConfigManager().getLanguage()); getLM().LanguageReload(); - + + if (firstenable) { + if (!this.isEnabled()) { + return; + } + FlagPermissions.initValidFlags(); + } + try { this.loadYml(); } catch (Exception e) { @@ -672,7 +679,7 @@ public void run() { if (!this.isEnabled()) { return; } - FlagPermissions.initValidFlags(); +// FlagPermissions.initValidFlags(); if (smanager == null) setWorldEdit(); diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index 90a4870ca..6346f8761 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -13,6 +13,8 @@ public class padd implements cmd { + public static String groupedFlag = "trusted"; + @Override @CommandAnnotation(simple = true, priority = 400) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { @@ -27,13 +29,13 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (args.length == 1) { if (!plugin.isPlayerExist(player, args[0], true)) return false; - player.performCommand(baseCmd + " pset " + args[0] + " trusted true"); + player.performCommand(baseCmd + " pset " + args[0] + " " + groupedFlag + " true"); return true; } if (args.length == 2) { if (!plugin.isPlayerExist(player, args[1], true)) return false; - player.performCommand(baseCmd + " pset " + args[0] + " " + args[1] + " trusted true"); + player.performCommand(baseCmd + " pset " + args[0] + " " + args[1] + " " + groupedFlag + " true"); return true; } return false; diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 72619b434..43589e885 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -1,5 +1,8 @@ package com.bekvon.bukkit.residence.containers; +import java.util.HashSet; +import java.util.Set; + import com.bekvon.bukkit.cmiLib.CMIMaterial; public enum Flags { @@ -126,6 +129,7 @@ public enum Flags { private String desc; private boolean enabled; private boolean globalyEnabled = true; + private Set groups = null; public static enum FlagMode { Player, Residence, Both @@ -210,4 +214,25 @@ public CMIMaterial getIcon() { public void setIcon(CMIMaterial icon) { this.icon = icon; } + + public boolean isInGroup(String group) { + if (groups == null) + return false; + + return groups.contains(group.toLowerCase()); + } + + public void addGroup(String group) { + if (groups == null) + groups = new HashSet(); + groups.add(group.toLowerCase()); + } + + public Set getGroups() { + return groups; + } + + public void resetGroups() { + this.groups = null; + } } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 3b9030d1e..fcc6fdd64 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -34,6 +34,7 @@ public class ResidencePlayer { private UUID uuid = null; private Set ResidenceList = new HashSet(); + private Set trustedList = new HashSet(); private ClaimedResidence mainResidence = null; private PlayerGroup groups = null; @@ -495,6 +496,21 @@ public boolean canDamageEntity(Entity entity, boolean inform) { return ResidenceEntityListener.canDamageEntity(this.getPlayer(), entity, inform); } + public Set getTrustedResidenceList() { + return trustedList; + } + + public void addTrustedResidence(ClaimedResidence residence) { + if (residence == null) + return; + this.trustedList.add(residence); + } + + public void removeTrustedResidence(ClaimedResidence residence) { + if (residence == null) + return; + this.trustedList.remove(residence); + } // public boolean canDamagePlayer(Player player, boolean inform) { // // } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index ffbbad6f0..8d4cdd5e0 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -30,9 +30,9 @@ public enum lm { Invalid_Help("&cInvalid Help Page..."), Invalid_NameCharacters("&cName contained unallowed characters..."), - Invalid_FromConsole("&cYou can only use this in the console!"), + Invalid_FromConsole("&cYou can only use this in the console!"), Invalid_Ingame("&cYou can only use this in game!"), - + Area_Exists("&cArea name already exists."), Area_Create("&eResidence Area created, ID &6%1"), Area_DiffWorld("&cArea is in a different world from residence."), @@ -118,7 +118,7 @@ public enum lm { Raid_noRemoval("&cCan't remove residence during raid"), Raid_immune("&eImmune for next %1"), Raid_notImmune("&eNo longer immune"), - + Raid_notInRaid("&ePlayer isn't in raid"), Raid_attack_Joined("&7Joined &2%1 &7raid!"), @@ -140,17 +140,16 @@ public enum lm { Raid_defend_noSelf("&cYou already defending this residence"), Raid_defend_notRaided("&cResidence is not under the raid"), Raid_defend_alreadyInAnother("&cCan't join this residence defence, you are in another one already (%1)"), - - + Raid_status_title("&7----------- &f%1(%2) &7-----------"), Raid_status_immune("&eImmune to raids for next: %1"), Raid_status_starts("&7Raid starts in: %1"), - Raid_status_attackers("&7Attackers: &4%1" ), + Raid_status_attackers("&7Attackers: &4%1"), Raid_status_defenders("&7Defenders: &4%1"), Raid_status_ends("&7Raid ends in: %1"), Raid_status_canraid("&2Can be raided"), - Raid_status_raidin("&ePosible raid in: %1" ), - + Raid_status_raidin("&ePosible raid in: %1"), + Raid_stopped("&eRaid on &6%1 &ewas stopped"), info_years("&e%1 &6years "), @@ -162,6 +161,8 @@ public enum lm { info_min("&e%1 &6min "), info_sec("&e%1 &6sec "), + info_listSplitter(", "), + info_click("&7Click"), info_clickToConfirm("&7Click to confirm"), @@ -248,6 +249,7 @@ public enum lm { Residence_Give("&eYou give residence &6%1 &eto player &6%2"), Residence_Recieve("&eYou have recieved residence &6%1 &efrom player &6%2"), Residence_ResList(" &a%1. &e%2 &e- &6%3 %4&6%5"), + Residence_TrustedResList(" &a%1. &f%2 &e- &6%3 %4&6%5"), Residence_List(" &e%2 &e- &6%3"), Residence_Near("&eNearby residences: &7%1"), Residence_TeleportNear("&eTeleported to near residence."), @@ -401,7 +403,7 @@ public enum lm { Chat_ChatChannelChange("&eChanged residence chat channel to &6%1!"), Chat_ChatChannelLeave("&eLeft residence chat"), - + Chat_ChatMessage("%1 %2%3: %4%5"), Chat_ChatListeningMessage("&2[Listening %6]%1 %2%3: %4%5"), @@ -585,4 +587,8 @@ public String getPath() { path = "Language." + this.name(); return path.replace("_", "."); } + + public String getMessage(Object... variables) { + return Residence.getInstance().getLM().getMessage(this, variables); + } } \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 51d5da6e1..a2f03b0c3 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -33,6 +33,7 @@ import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; +import com.bekvon.bukkit.residence.commands.padd; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeMessages; import com.bekvon.bukkit.residence.containers.RandomLoc; @@ -1802,7 +1803,7 @@ public static ClaimedResidence load(String worldName, Map root, else { res.ChannelColor = Residence.getInstance().getConfigManager().getChatColor(); } - + return res; } @@ -2114,4 +2115,40 @@ public void showBounds(Player player, boolean showOneTime) { v.setOnce(showOneTime); Residence.getInstance().getSelectionManager().showBounds(player, v); } + + public boolean isTrusted(Player player) { + Set flags = FlagPermissions.validFlagGroups.get(padd.groupedFlag); + if (flags == null || flags.isEmpty()) + return false; + boolean trusted = true; + for (String flag : flags) { + Flags f = Flags.getFlag(flag); + if (f == null) { + trusted = false; + break; + } + if (f != null && f.isInGroup(padd.groupedFlag) && !this.getPermissions().playerHas(player, f, FlagCombo.OnlyTrue)) { + trusted = false; + break; + } + } + return trusted; + } + + @Deprecated + public boolean isTrusted(String playerName) { + Set flags = FlagPermissions.validFlagGroups.get(padd.groupedFlag); + + if (flags == null || flags.isEmpty()) + return false; + boolean trusted = true; + for (String flag : flags) { + Flags f = Flags.getFlag(flag); + if (f != null && f.isInGroup(padd.groupedFlag) && !this.getPermissions().playerHas(playerName, flag, FlagCombo.OnlyTrue)) { + trusted = false; + break; + } + } + return trusted; + } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 1902c4095..3ad0bf723 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -431,6 +431,7 @@ public boolean setPlayerFlag(String player, String flag, FlagState state) { } if (map.isEmpty()) this.removeAllPlayerFlags(player); + return true; } @@ -797,8 +798,9 @@ protected static FlagPermissions load(Map root, FlagPermissions } for (Entry> one : newperms.playerFlags.entrySet()) { - if (one.getKey().length() != 32) + if (one.getKey().length() != 32) { continue; + } try { UUID uuid = UUID.fromString(one.getKey()); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index b94fe920d..a0ce08857 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -2,8 +2,11 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.Iterator; +import java.util.Map; import java.util.TreeMap; import java.util.UUID; +import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; @@ -17,6 +20,7 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.utils.Debug; public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); @@ -159,13 +163,14 @@ public ArrayList getResidences(String player, boolean showhidd return getResidences(player, showhidden, onlyHidden, null); } + // All 3 methods could be compacted into one, if needed public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden, World world) { ArrayList temp = new ArrayList(); ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); if (resPlayer == null) return temp; for (ClaimedResidence one : resPlayer.getResList()) { - boolean hidden = one.getPermissions().has("hidden", false); + boolean hidden = one.getPermissions().has(Flags.hidden, false); if (!showhidden && hidden) continue; if (onlyHidden && !hidden) @@ -198,6 +203,33 @@ public TreeMap getResidencesMap(String player, boolean return temp; } + public TreeMap getTrustedResidencesMap(String player, boolean showhidden, boolean onlyHidden, World world) { + TreeMap temp = new TreeMap(); + + ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); + if (resPlayer == null) { + return temp; + } + + Iterator iter = resPlayer.getTrustedResidenceList().iterator(); + while (iter.hasNext()) { + ClaimedResidence one = iter.next(); + boolean hidden = one.getPermissions().has(Flags.hidden, false); + if (!showhidden && hidden) + continue; + if (onlyHidden && !hidden) + continue; + if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) + continue; + if (!one.isTrusted(player)) { + iter.remove(); + continue; + } + temp.put(one.getName(), one); + } + return temp; + } + @Override public PermissionGroup getGroup(String player) { ResidencePlayer resPlayer = getResidencePlayer(player); @@ -320,6 +352,25 @@ public void addResidence(String player, ClaimedResidence residence) { if (resPlayer != null) { resPlayer.addResidence(residence); } + + // Adding trusted residences + if (residence.perms.playerFlags != null) { + for (Entry> one : residence.perms.playerFlags.entrySet()) { + String name = one.getKey(); + if (name.length() == 36) + name = residence.perms.cachedPlayerNameUUIDs.get(UUID.fromString(one.getKey())); + if (!residence.isTrusted(name)) + continue; + ResidencePlayer rplayer = null; + if (one.getKey().length() == 36) + rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(UUID.fromString(one.getKey())); + else + rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(name); + if (rplayer == null) + continue; + rplayer.addTrustedResidence(residence); + } + } } public void removeResFromPlayer(ClaimedResidence residence) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 144bb895c..23bb47234 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -318,6 +318,8 @@ public void listResidences(CommandSender sender, String targetplayer, int page, boolean hidden = showhidden; TreeMap ownedResidences = plugin.getPlayerManager().getResidencesMap(targetplayer, hidden, onlyHidden, world); ownedResidences.putAll(plugin.getRentManager().getRentsMap(targetplayer, onlyHidden, world)); + ownedResidences.putAll(plugin.getPlayerManager().getTrustedResidencesMap(targetplayer, hidden, onlyHidden, world)); + plugin.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin, world); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 0cb2da08f..4500e5881 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -8,11 +8,13 @@ import java.util.Set; import java.util.UUID; +import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.commands.padd; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.Flags.FlagMode; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -23,6 +25,7 @@ import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.utils.Debug; public class ResidencePermissions extends FlagPermissions { @@ -354,9 +357,9 @@ public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String f Flags f = Flags.getFlag(flag); if (f != null) flag = f.toString(); - - if (validFlagGroups.containsKey(flag)) + if (validFlagGroups.containsKey(flag)) { return this.setFlagGroupOnPlayer(sender, targetPlayer, flag, flagstate, resadmin); + } FlagState state = FlagPermissions.stringToFlagState(flagstate); if (checkCanSetFlag(sender, flag, state, false, resadmin)) { ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, sender instanceof Player ? (Player) sender : null, flag, @@ -367,6 +370,22 @@ public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String f if (super.setPlayerFlag(targetPlayer, flag, state)) { if (Show) Residence.getInstance().msg(sender, lm.Flag_Set, flag, residence.getName(), flagstate); + + if (f == null || f.isInGroup(padd.groupedFlag)) { + boolean trusted = this.residence.isTrusted(targetPlayer); + if (!state.equals(FlagState.TRUE) && !trusted) { + ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(targetPlayer); + if (rplayer != null) { + rplayer.removeTrustedResidence(this.residence); + } + } else if (state.equals(FlagState.TRUE) && trusted) { + ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(targetPlayer); + if (rplayer != null) { + rplayer.addTrustedResidence(this.residence); + } + } + } + return true; } } @@ -516,6 +535,21 @@ public boolean setPlayerFlag(String player, String flag, FlagState state) { Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; +// Flags f = Flags.getFlag(flag); +// if (f == null || f.isInGroup(padd.groupedFlag)) { +// boolean trusted = this.residence.isTrusted(player); +// if (!state.equals(FlagState.TRUE) && !trusted) { +// ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); +// if (rplayer != null) { +// rplayer.removeTrustedResidence(this.residence); +// } +// } else if (state.equals(FlagState.TRUE) && trusted) { +// ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); +// if (rplayer != null) { +// rplayer.addTrustedResidence(this.residence); +// } +// } +// } return super.setPlayerFlag(player, flag, state); } @@ -646,7 +680,7 @@ public void setOwnerUUID(UUID ownerUUID) { public String getWorld() { return world; } - + public String getWorldName() { return world; } @@ -772,23 +806,32 @@ public boolean setFlagGroupOnGroup(Player player, String flaggroup, String group } public boolean setFlagGroupOnPlayer(CommandSender sender, String target, String flaggroup, String state, boolean resadmin) { - if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { - Set flags = FlagPermissions.validFlagGroups.get(flaggroup); - boolean changed = false; - String flagString = ""; - for (String flag : flags) { - if (this.setPlayerFlag(sender, target, flag, state, resadmin, false)) { - changed = true; - if (!flagString.isEmpty()) - flagString += ", "; - flagString += flag; - } + if (!FlagPermissions.validFlagGroups.containsKey(flaggroup)) + return false; + + Set flags = FlagPermissions.validFlagGroups.get(flaggroup); + boolean changed = false; + boolean changedAll = true; + StringBuilder flagString = new StringBuilder(); + + for (String flag : flags) { + if (this.setPlayerFlag(sender, target, flag, state, resadmin, false)) { + changed = true; + if (!flagString.toString().isEmpty()) + flagString.append(lm.info_listSplitter.getMessage()); + flagString.append(flag); + } else + changedAll = false; + } + if (changedAll) { + ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(target); + if (rplayer != null) { + rplayer.addTrustedResidence(this.residence); } - if (flagString.length() > 0) - Residence.getInstance().msg(sender, lm.Flag_Set, flagString, target, state); - return changed; } - return false; + if (!flagString.toString().isEmpty()) + Residence.getInstance().msg(sender, lm.Flag_Set, flagString, target, state); + return changed; } public String getOwnerLastKnownName() { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 666cdc1cf..9c2c7c4c1 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -140,12 +140,15 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap Date: Fri, 28 May 2021 14:10:59 +0300 Subject: [PATCH 0867/1142] Correct locale for next/previous page buttons in flag set UI --- src/com/bekvon/bukkit/residence/gui/FlagUtil.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index fa8d87747..3928d2e30 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -92,10 +92,10 @@ public void click(GUIClickType type) { fillButtons(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() + 1), gui); } }; - forward.setName(Residence.getInstance().msg(lm.General_nextPage)); + forward.setName(Residence.getInstance().msg(lm.General_nextPageGui)); gui.addButton(forward); gui.updateButton(forward); - } + } if (pi.getCurrentPage() > 1) { ItemStack Item = new ItemStack(Material.ARROW); @@ -105,7 +105,7 @@ public void click(GUIClickType type) { fillButtons(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() - 1), gui); } }; - back.setName(Residence.getInstance().msg(lm.General_prevPage)); + back.setName(Residence.getInstance().msg(lm.General_prevPageGui)); gui.addButton(back); gui.updateButton(back); } From 34a2660f73c79482f8dad657bca3fd19d9bb4496 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 28 May 2021 15:56:40 +0300 Subject: [PATCH 0868/1142] set flag UI button fix and filler addition --- src/com/bekvon/bukkit/residence/gui/FlagUtil.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 3928d2e30..30c81569a 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -2,6 +2,7 @@ import java.util.Set; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -68,6 +69,7 @@ public void openPsetFlagGui(Player player, String targetPlayer, ClaimedResidence PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); fillButtons(flag, pi, gui); + gui.fillEmptyButtons(); gui.open(); return; @@ -75,12 +77,12 @@ public void openPsetFlagGui(Player player, String targetPlayer, ClaimedResidence private void fillButtons(setFlagInfo flag, PageInfo pi, CMIGui gui) { gui.clearButtons(); + for (CMIGuiButton one : flag.getButtons()) { if (pi.isContinue()) continue; if (pi.isBreak()) break; - gui.addButton(one); gui.updateButton(one); } @@ -90,12 +92,12 @@ private void fillButtons(setFlagInfo flag, PageInfo pi, CMIGui gui) { @Override public void click(GUIClickType type) { fillButtons(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() + 1), gui); + gui.fillEmptyButtons(); } }; forward.setName(Residence.getInstance().msg(lm.General_nextPageGui)); - gui.addButton(forward); gui.updateButton(forward); - } + } if (pi.getCurrentPage() > 1) { ItemStack Item = new ItemStack(Material.ARROW); @@ -103,10 +105,11 @@ public void click(GUIClickType type) { @Override public void click(GUIClickType type) { fillButtons(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() - 1), gui); + + gui.fillEmptyButtons(); } }; back.setName(Residence.getInstance().msg(lm.General_prevPageGui)); - gui.addButton(back); gui.updateButton(back); } } @@ -124,7 +127,7 @@ public void openSetFlagGui(Player player, ClaimedResidence res, boolean resadmin PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); fillButtons(flag, pi, gui); - + gui.fillEmptyButtons(); gui.open(); } From 7e201f517716563b2d40dedd752f19d461d960b5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 28 May 2021 16:15:14 +0300 Subject: [PATCH 0869/1142] Fixing /res auto command issue --- src/com/bekvon/bukkit/residence/commands/auto.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 533e630b8..5cb224ce7 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -19,6 +19,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.utils.Debug; public class auto implements cmd { @@ -59,9 +60,10 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo minY = plugin.getSelectionManager().getSelection(player).getMinYAllowed(); maxY = plugin.getSelectionManager().getSelection(player).getMaxYAllowed(); } - - plugin.getSelectionManager().placeLoc1(player, loc.clone().add(-1, minY, -1), false); - plugin.getSelectionManager().placeLoc2(player, loc.clone().add(1, maxY, 1), false); + loc.setY(minY); + plugin.getSelectionManager().placeLoc1(player, loc.clone(), false); + loc.setY(maxY); + plugin.getSelectionManager().placeLoc2(player, loc.clone(), false); boolean result = resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true, lenght); @@ -164,8 +166,9 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, c.getLowVector().setY(0); locked.add(dir); dir = dir.getNext(); - if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { skipped++; + } continue; } @@ -173,8 +176,9 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, c.getHighVector().setY(c.getWorld().getMaxHeight() - 1); locked.add(dir); dir = dir.getNext(); - if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { skipped++; + } continue; } From ce0a4610b8c0761acc135e4ec13b453cab406769 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 28 May 2021 16:24:39 +0300 Subject: [PATCH 0870/1142] Fixing auto residence cleanup --- src/com/bekvon/bukkit/residence/ConfigManager.java | 4 ++++ src/com/bekvon/bukkit/residence/Residence.java | 2 +- src/com/bekvon/bukkit/residence/utils/FileCleanUp.java | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index ccbd20a58..f37222649 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -875,6 +875,10 @@ public void UpdateConfigFile() { c.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); + for (int i = 0; i < AutoCleanUpWorlds.size(); i++) { + AutoCleanUpWorlds.set(i, AutoCleanUpWorlds.get(i).toLowerCase()); + } + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { LwcMatList.clear(); c.addComment("Global.Lwc.OnDelete", "Removes lwc protection from all defined objects when removing residence"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 35ba96276..2ef2c0940 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -673,7 +673,7 @@ public void run() { getSignUtil().LoadSigns(); if (getConfigManager().isUseResidenceFileClean()) - (new FileCleanUp(this)).cleanFiles(); + (new FileCleanUp(this)).cleanOldResidence(); if (firstenable) { if (!this.isEnabled()) { diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 9d1dc9f50..abf130b33 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -22,7 +22,7 @@ public FileCleanUp(Residence plugin) { this.plugin = plugin; } - public void cleanFiles() { + public void cleanOldResidence() { Map resNameList = new HashMap(plugin.getResidenceManager().getResidences()); int i = 0; @@ -55,7 +55,7 @@ public void cleanFiles() { if (player == null) continue; - if (!plugin.getConfigManager().getCleanWorlds().contains(res.getPermissions().getWorldName().toLowerCase())) + if (!plugin.getConfigManager().getAutoCleanUpWorlds().contains(res.getPermissions().getWorldName().toLowerCase())) continue; if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(plugin.getServerLandName())) From bae7078f68861b9592b32a16c921cb9168233320 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 29 May 2021 00:02:15 +0300 Subject: [PATCH 0871/1142] Fixing error on load --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 4 ++-- src/com/bekvon/bukkit/residence/protection/PlayerManager.java | 2 ++ .../bukkit/residence/protection/ResidencePermissions.java | 2 +- src/plugin.yml | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index a2f03b0c3..22edcf272 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -2118,7 +2118,7 @@ public void showBounds(Player player, boolean showOneTime) { public boolean isTrusted(Player player) { Set flags = FlagPermissions.validFlagGroups.get(padd.groupedFlag); - if (flags == null || flags.isEmpty()) + if (flags == null || flags.isEmpty() || player == null) return false; boolean trusted = true; for (String flag : flags) { @@ -2139,7 +2139,7 @@ public boolean isTrusted(Player player) { public boolean isTrusted(String playerName) { Set flags = FlagPermissions.validFlagGroups.get(padd.groupedFlag); - if (flags == null || flags.isEmpty()) + if (flags == null || flags.isEmpty() || playerName == null) return false; boolean trusted = true; for (String flag : flags) { diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index a0ce08857..1ba80a931 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -294,6 +294,8 @@ public ResidencePlayer getResidencePlayer(Player player) { @Override public ResidencePlayer getResidencePlayer(String player) { + if (player == null) + return null; Player p = Bukkit.getPlayer(player); if (p != null) return getResidencePlayer(p); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 4500e5881..f021e876f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -371,7 +371,7 @@ public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String f if (Show) Residence.getInstance().msg(sender, lm.Flag_Set, flag, residence.getName(), flagstate); - if (f == null || f.isInGroup(padd.groupedFlag)) { + if ((f == null || f.isInGroup(padd.groupedFlag)) && targetPlayer != null) { boolean trusted = this.residence.isTrusted(targetPlayer); if (!state.equals(FlagState.TRUE) && !trusted) { ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(targetPlayer); diff --git a/src/plugin.yml b/src/plugin.yml index 4d973a0d9..f53c15081 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.3.5 +version: 4.9.3.7 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 82007de8cfc179524efa7f49fde1e4e94734c9e7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 29 May 2021 12:24:46 +0300 Subject: [PATCH 0872/1142] Fix for auto cleanup issue when we can't determine residence owner --- src/com/bekvon/bukkit/residence/Residence.java | 8 +++++--- .../bukkit/residence/protection/ResidencePermissions.java | 2 +- src/com/bekvon/bukkit/residence/utils/FileCleanUp.java | 8 ++++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 2ef2c0940..8f767eaf3 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -654,14 +654,14 @@ public void run() { getLocaleManager().LoadLang(getConfigManager().getLanguage()); getLM().LanguageReload(); - + if (firstenable) { if (!this.isEnabled()) { return; } FlagPermissions.initValidFlags(); } - + try { this.loadYml(); } catch (Exception e) { @@ -674,7 +674,7 @@ public void run() { if (getConfigManager().isUseResidenceFileClean()) (new FileCleanUp(this)).cleanOldResidence(); - + if (firstenable) { if (!this.isEnabled()) { return; @@ -1800,6 +1800,8 @@ public String getTempUserUUID() { } public String getPlayerName(UUID uuid) { + if (uuid == null) + return null; OfflinePlayer p = getServ().getPlayer(uuid); if (p == null) p = getServ().getOfflinePlayer(uuid); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index f021e876f..f729f528c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -659,7 +659,7 @@ public void setOwner(String newOwner, boolean resetFlags) { public String getOwner() { if (Residence.getInstance().getConfigManager().isOfflineMode()) return ownerLastKnownName; - if (ownerUUID.toString().equals(Residence.getInstance().getServerLandUUID())) //check for server land + if (ownerUUID != null && ownerUUID.toString().equals(Residence.getInstance().getServerLandUUID())) //check for server land return Residence.getInstance().getServerLandName(); String name = Residence.getInstance().getPlayerName(ownerUUID);//try to find the owner's name if (name == null) diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index abf130b33..3ec0608b3 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -42,6 +42,7 @@ public void cleanOldResidence() { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Starting auto CleanUp (" + playerMapUUID.size() + "/" + resNameList.size() + ")!"); + int skipped = 0; for (Entry oneName : resNameList.entrySet()) { ClaimedResidence res = oneName.getValue(); if (res == null) @@ -52,8 +53,10 @@ public void cleanOldResidence() { if (player == null) player = playerMapNane.get(res.getOwner()); - if (player == null) + if (player == null) { + skipped++; continue; + } if (!plugin.getConfigManager().getAutoCleanUpWorlds().contains(res.getPermissions().getWorldName().toLowerCase())) continue; @@ -71,10 +74,11 @@ public void cleanOldResidence() { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getUniqueId()); - plugin.getResidenceManager().removeResidence(rPlayer, oneName.getValue(), true, plugin.getConfigManager().isAutoCleanUpRegenerate()); i++; } Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Auto CleanUp deleted " + i + " residences!"); + if (skipped > 0) + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Skipped " + skipped + " residences due to inability to determine residence owner."); } } From 928ae4fa0a73f15b6d3bc5065a8b81388a33c6d1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 29 May 2021 13:28:14 +0300 Subject: [PATCH 0873/1142] Extra adjustments --- .../bekvon/bukkit/residence/Residence.java | 17 ++++++-- .../protection/ClaimedResidence.java | 2 +- .../residence/protection/PlayerManager.java | 39 +++++++++++-------- .../protection/ResidencePermissions.java | 29 ++++---------- src/plugin.yml | 2 +- 5 files changed, 45 insertions(+), 44 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 8f767eaf3..2b28429a3 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -60,6 +60,7 @@ import com.bekvon.bukkit.residence.api.ResidenceInterface; import com.bekvon.bukkit.residence.api.ResidencePlayerInterface; import com.bekvon.bukkit.residence.chat.ChatManager; +import com.bekvon.bukkit.residence.commands.padd; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeFlags; import com.bekvon.bukkit.residence.containers.MinimizeMessages; @@ -659,7 +660,17 @@ public void run() { if (!this.isEnabled()) { return; } - FlagPermissions.initValidFlags(); + + File f = new File(getDataFolder(), "flags.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + for (String oneFlag : conf.getStringList("Global.GroupedFlags." + padd.groupedFlag)) { + Flags flag = Flags.getFlag(oneFlag); + if (flag != null) { + flag.addGroup(padd.groupedFlag); + } + FlagPermissions.addFlagToFlagGroup(padd.groupedFlag, oneFlag); + } + } try { @@ -674,12 +685,12 @@ public void run() { if (getConfigManager().isUseResidenceFileClean()) (new FileCleanUp(this)).cleanOldResidence(); - + if (firstenable) { if (!this.isEnabled()) { return; } -// FlagPermissions.initValidFlags(); + FlagPermissions.initValidFlags(); if (smanager == null) setWorldEdit(); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 22edcf272..415df7f2c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1803,7 +1803,7 @@ public static ClaimedResidence load(String worldName, Map root, else { res.ChannelColor = Residence.getInstance().getConfigManager().getChatColor(); } - + return res; } diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 1ba80a931..a5a1e6b56 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -216,7 +216,7 @@ public TreeMap getTrustedResidencesMap(String player, ClaimedResidence one = iter.next(); boolean hidden = one.getPermissions().has(Flags.hidden, false); if (!showhidden && hidden) - continue; + continue; if (onlyHidden && !hidden) continue; if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) @@ -354,24 +354,29 @@ public void addResidence(String player, ClaimedResidence residence) { if (resPlayer != null) { resPlayer.addResidence(residence); } - + // Adding trusted residences - if (residence.perms.playerFlags != null) { - for (Entry> one : residence.perms.playerFlags.entrySet()) { - String name = one.getKey(); - if (name.length() == 36) - name = residence.perms.cachedPlayerNameUUIDs.get(UUID.fromString(one.getKey())); - if (!residence.isTrusted(name)) - continue; - ResidencePlayer rplayer = null; - if (one.getKey().length() == 36) - rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(UUID.fromString(one.getKey())); - else - rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(name); - if (rplayer == null) - continue; - rplayer.addTrustedResidence(residence); + try { + if (residence.perms.playerFlags != null) { + for (Entry> one : residence.perms.playerFlags.entrySet()) { + String name = one.getKey(); + if (name.length() == 36) + name = residence.perms.cachedPlayerNameUUIDs.get(UUID.fromString(one.getKey())); + + if (!residence.isTrusted(name)) + continue; + ResidencePlayer rplayer = null; + if (one.getKey().length() == 36) + rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(UUID.fromString(one.getKey())); + else + rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(name); + if (rplayer == null) + continue; + rplayer.addTrustedResidence(residence); + } } + } catch (Throwable e) { + e.printStackTrace(); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index f729f528c..f0ed879ca 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -8,7 +8,6 @@ import java.util.Set; import java.util.UUID; -import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -25,7 +24,6 @@ import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import com.bekvon.bukkit.residence.utils.Debug; public class ResidencePermissions extends FlagPermissions { @@ -535,21 +533,7 @@ public boolean setPlayerFlag(String player, String flag, FlagState state) { Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; -// Flags f = Flags.getFlag(flag); -// if (f == null || f.isInGroup(padd.groupedFlag)) { -// boolean trusted = this.residence.isTrusted(player); -// if (!state.equals(FlagState.TRUE) && !trusted) { -// ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); -// if (rplayer != null) { -// rplayer.removeTrustedResidence(this.residence); -// } -// } else if (state.equals(FlagState.TRUE) && trusted) { -// ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); -// if (rplayer != null) { -// rplayer.addTrustedResidence(this.residence); -// } -// } -// } + return super.setPlayerFlag(player, flag, state); } @@ -640,7 +624,7 @@ public void setOwner(String newOwner, boolean resetFlags) { ownerLastKnownName = newOwner; ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(newOwner); if (rPlayer != null) - this.ownerUUID = rPlayer.getUuid(); + this.ownerUUID = rPlayer.getUniqueId(); if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase(Residence.getInstance().getServerLandName())) { ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());// the UUID for server owned land @@ -659,7 +643,9 @@ public void setOwner(String newOwner, boolean resetFlags) { public String getOwner() { if (Residence.getInstance().getConfigManager().isOfflineMode()) return ownerLastKnownName; - if (ownerUUID != null && ownerUUID.toString().equals(Residence.getInstance().getServerLandUUID())) //check for server land + if ( + ownerUUID != null && + ownerUUID.toString().equals(Residence.getInstance().getServerLandUUID())) //check for server land return Residence.getInstance().getServerLandName(); String name = Residence.getInstance().getPlayerName(ownerUUID);//try to find the owner's name if (name == null) @@ -691,19 +677,18 @@ public Map save(String world) { if (!ownerUUID.toString().equals(Residence.getInstance().getTempUserUUID())) root.put("OwnerUUID", ownerUUID.toString()); root.put("OwnerLastKnownName", ownerLastKnownName); -// root.put("World", world); return root; } public static ResidencePermissions load(String worldName, ClaimedResidence res, Map root) throws Exception { ResidencePermissions newperms = new ResidencePermissions(res); - //newperms.owner = (String) root.get("Owner"); + if (root.containsKey("OwnerUUID") || root.containsKey("OwnerLastKnownName")) { if (!root.containsKey("OwnerUUID")) newperms.ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//get empty owner UUID else newperms.ownerUUID = UUID.fromString((String) root.get("OwnerUUID"));//get owner UUID - // String name = Residence.getPlayerName(newperms.ownerUUID); //try to find the current name of the owner + newperms.ownerLastKnownName = (String) root.get("OwnerLastKnownName");//otherwise load last known name from file OfflinePlayer p = null; diff --git a/src/plugin.yml b/src/plugin.yml index f53c15081..ce079c269 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.3.7 +version: 4.9.3.8 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 248406a4f826af702ceabdbe2545ee7a83cb549b Mon Sep 17 00:00:00 2001 From: Zrips Date: Sat, 29 May 2021 15:41:06 +0300 Subject: [PATCH 0874/1142] Better way to handle UI --- .../bekvon/bukkit/residence/gui/FlagUtil.java | 53 +++++++------------ .../bukkit/residence/utils/FileCleanUp.java | 52 +++++++++--------- 2 files changed, 48 insertions(+), 57 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 30c81569a..89d94f543 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -63,40 +63,27 @@ public void openPsetFlagGui(Player player, String targetPlayer, ClaimedResidence setFlagInfo flag = new setFlagInfo(res, player, targetPlayer, resadmin); flag.recalculate(); - CMIGui gui = new CMIGui(player); - gui.setTitle(Residence.getInstance().msg(lm.Gui_Set_Title, res.getName())); - gui.setInvSize(GUIRows.r6); PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); - - fillButtons(flag, pi, gui); - gui.fillEmptyButtons(); - - gui.open(); + openUI(flag, pi, player, Residence.getInstance().msg(lm.Gui_Set_Title, res.getName())); return; } - private void fillButtons(setFlagInfo flag, PageInfo pi, CMIGui gui) { - gui.clearButtons(); + private void openUI(setFlagInfo flag, PageInfo pi, Player player, String title) { - for (CMIGuiButton one : flag.getButtons()) { - if (pi.isContinue()) - continue; - if (pi.isBreak()) - break; - gui.updateButton(one); - } + CMIGui gui = new CMIGui(player); + gui.setTitle(title); + gui.setInvSize(GUIRows.r6); if (pi.getCurrentPage() < pi.getTotalPages()) { ItemStack Item = new ItemStack(Material.ARROW); CMIGuiButton forward = new CMIGuiButton(53, Item) { @Override public void click(GUIClickType type) { - fillButtons(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() + 1), gui); - gui.fillEmptyButtons(); + openUI(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() + 1), player, title); } }; forward.setName(Residence.getInstance().msg(lm.General_nextPageGui)); - gui.updateButton(forward); + gui.addButton(forward); } if (pi.getCurrentPage() > 1) { @@ -104,31 +91,31 @@ public void click(GUIClickType type) { CMIGuiButton back = new CMIGuiButton(45, Item) { @Override public void click(GUIClickType type) { - fillButtons(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() - 1), gui); - - gui.fillEmptyButtons(); + openUI(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() - 1), player, title); } }; back.setName(Residence.getInstance().msg(lm.General_prevPageGui)); - gui.updateButton(back); + gui.addButton(back); } + + for (CMIGuiButton one : flag.getButtons()) { + if (pi.isContinue()) + continue; + if (pi.isBreak()) + break; + gui.addButton(one); + } + gui.fillEmptyButtons(); + gui.open(); } public void openSetFlagGui(Player player, ClaimedResidence res, boolean resadmin, int page) { if (player == null || !player.isOnline()) return; - setFlagInfo flag = new setFlagInfo(res, player, resadmin); flag.recalculate(); - CMIGui gui = new CMIGui(player); - gui.setTitle(plugin.msg(lm.Gui_Set_Title, res.getName())); - gui.setInvSize(GUIRows.r6); - PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); - - fillButtons(flag, pi, gui); - gui.fillEmptyButtons(); - gui.open(); + openUI(flag, pi, player, plugin.msg(lm.Gui_Set_Title, res.getName())); } public FlagData getFlagData() { diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 3ec0608b3..d488e7cc3 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -43,39 +43,43 @@ public void cleanOldResidence() { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Starting auto CleanUp (" + playerMapUUID.size() + "/" + resNameList.size() + ")!"); int skipped = 0; - for (Entry oneName : resNameList.entrySet()) { - ClaimedResidence res = oneName.getValue(); - if (res == null) - continue; + try { + for (Entry oneName : resNameList.entrySet()) { + ClaimedResidence res = oneName.getValue(); + if (res == null) + continue; - OfflinePlayer player = playerMapUUID.get(res.getOwnerUUID()); + OfflinePlayer player = playerMapUUID.get(res.getOwnerUUID()); - if (player == null) - player = playerMapNane.get(res.getOwner()); + if (player == null) + player = playerMapNane.get(res.getOwner()); - if (player == null) { - skipped++; - continue; - } + if (player == null) { + skipped++; + continue; + } - if (!plugin.getConfigManager().getAutoCleanUpWorlds().contains(res.getPermissions().getWorldName().toLowerCase())) - continue; + if (!plugin.getConfigManager().getAutoCleanUpWorlds().contains(res.getPermissions().getWorldName().toLowerCase())) + continue; - if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(plugin.getServerLandName())) - continue; + if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(plugin.getServerLandName())) + continue; - long lastPlayed = player.getLastPlayed(); - int dif = (int) ((time - lastPlayed) / 1000 / 60 / 60 / 24); - if (dif < interval) - continue; + long lastPlayed = player.getLastPlayed(); + int dif = (int) ((time - lastPlayed) / 1000 / 60 / 60 / 24); + if (dif < interval) + continue; - if (ResidenceVaultAdapter.hasPermission(player, ResPerm.cleanbypass.getPermission(), res.getPermissions().getWorldName().toLowerCase())) - continue; + if (ResidenceVaultAdapter.hasPermission(player, ResPerm.cleanbypass.getPermission(), res.getPermissions().getWorldName().toLowerCase())) + continue; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getUniqueId()); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getUniqueId()); - plugin.getResidenceManager().removeResidence(rPlayer, oneName.getValue(), true, plugin.getConfigManager().isAutoCleanUpRegenerate()); - i++; + plugin.getResidenceManager().removeResidence(rPlayer, oneName.getValue(), true, plugin.getConfigManager().isAutoCleanUpRegenerate()); + i++; + } + } catch (Throwable e) { + e.printStackTrace(); } Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Auto CleanUp deleted " + i + " residences!"); if (skipped > 0) From 531e852c3d5fc19756bfad585e52bc588188d8d1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 31 May 2021 15:17:11 +0300 Subject: [PATCH 0875/1142] Fixing issue with auto cleanup causing major issues --- .../bekvon/bukkit/residence/Residence.java | 16 +++++++-- .../residence/containers/ResidencePlayer.java | 4 +++ .../protection/ClaimedResidence.java | 4 +++ .../residence/protection/PlayerManager.java | 33 ++++++++++++------- .../protection/ResidencePermissions.java | 14 ++++---- .../bukkit/residence/utils/FileCleanUp.java | 2 +- src/plugin.yml | 2 +- 7 files changed, 52 insertions(+), 23 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 2b28429a3..46180b152 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -220,8 +220,8 @@ public class Residence extends JavaPlugin { private CMIMaterial wepid; // private String ServerLandname = "Server_Land"; - private String ServerLandUUID = "00000000-0000-0000-0000-000000000000"; - private String TempUserUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"; + private UUID ServerLandUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); + private UUID TempUserUUID = UUID.fromString("ffffffff-ffff-ffff-ffff-ffffffffffff"); public HashMap rtMap = new HashMap(); public List teleportDelayMap = new ArrayList(); @@ -1802,11 +1802,21 @@ public String getServerLandName() { return this.getLM().getMessage(lm.server_land); } + @Deprecated public String getServerLandUUID() { + return ServerLandUUID.toString(); + } + + @Deprecated + public String getTempUserUUID() { + return TempUserUUID.toString(); + } + + public UUID getServerUUID() { return ServerLandUUID; } - public String getTempUserUUID() { + public UUID getEmptyUserUUID() { return TempUserUUID; } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index fcc6fdd64..fb6e44d1f 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -514,4 +514,8 @@ public void removeTrustedResidence(ClaimedResidence residence) { // public boolean canDamagePlayer(Player player, boolean inform) { // // } + + public void setUuid(UUID uuid) { + this.uuid = uuid; + } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 415df7f2c..3acb803a4 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1675,7 +1675,11 @@ public static ClaimedResidence load(String worldName, Map root, if (res.getPermissions().getOwnerLastKnownName() == null) return null; + if (res.perms.getOwnerUUID() == null) { + Bukkit.getConsoleSender().sendMessage("Failed to load residence: " + res.getName()); + + } // if (root.containsKey("TownCap")) { // String townName = (String) root.get("TownCap"); // Town t = Residence.getInstance().getTownManager().getTown(townName); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index a5a1e6b56..fc58cb222 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -24,7 +24,7 @@ public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); - private ConcurrentHashMap playersUuid = new ConcurrentHashMap(); + private ConcurrentHashMap playersUuid = new ConcurrentHashMap(); private Residence plugin; public PlayerManager(Residence plugin) { @@ -47,11 +47,11 @@ public void addPlayer(String name, UUID uuid, ResidencePlayer resPlayer) { if (name != null) players.put(name.toLowerCase(), resPlayer); if (uuid != null) - playersUuid.put(uuid, resPlayer); + playersUuid.put(uuid.toString(), resPlayer); } public ResidencePlayer playerJoin(Player player) { - ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId()); + ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId().toString()); if (resPlayer == null) { resPlayer = new ResidencePlayer(player); addPlayer(resPlayer); @@ -62,7 +62,7 @@ public ResidencePlayer playerJoin(Player player) { } public ResidencePlayer playerJoin(UUID uuid) { - ResidencePlayer resPlayer = playersUuid.get(uuid); + ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); if (resPlayer == null) { OfflinePlayer off = Bukkit.getOfflinePlayer(uuid); if (off != null) { @@ -92,7 +92,7 @@ public ResidencePlayer playerJoin(String player, UUID uuid) { } public int getResidenceCount(UUID uuid) { - ResidencePlayer resPlayer = playersUuid.get(uuid); + ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); if (resPlayer != null) { return resPlayer.getResList().size(); } @@ -103,7 +103,7 @@ public int getResidenceCount(UUID uuid) { public ArrayList getResidenceList(UUID uuid) { ArrayList temp = new ArrayList(); // playerJoin(player, false); - ResidencePlayer resPlayer = playersUuid.get(uuid); + ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); if (resPlayer != null) { for (ClaimedResidence one : resPlayer.getResList()) { temp.add(one.getName()); @@ -283,7 +283,7 @@ public ResidencePlayer getResidencePlayer(Player player) { ResidencePlayer resPlayer = null; if (player == null) return null; - resPlayer = playersUuid.get(player.getUniqueId()); + resPlayer = playersUuid.get(player.getUniqueId().toString()); if (resPlayer != null) { resPlayer.updatePlayer(player); } else { @@ -310,7 +310,7 @@ public ResidencePlayer getResidencePlayer(UUID uuid) { Player p = Bukkit.getPlayer(uuid); if (p != null) return getResidencePlayer(p); - ResidencePlayer resPlayer = playersUuid.get(uuid); + ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); if (resPlayer != null) { return resPlayer; } @@ -324,13 +324,18 @@ public ResidencePlayer getResidencePlayer(String name, UUID uuid) { if (p != null) { return getResidencePlayer(p); } - ResidencePlayer resPlayer = this.playersUuid.get(uuid); + ResidencePlayer resPlayer = this.playersUuid.get(uuid.toString()); if (resPlayer != null) { return resPlayer; } - if (name != null) + if (name != null) { resPlayer = this.players.get(name.toLowerCase()); + if (resPlayer != null && resPlayer.getUniqueId() == null) { + resPlayer.setUuid(uuid); + this.playersUuid.put(uuid.toString(), resPlayer); + } + } if (resPlayer != null) return resPlayer; @@ -352,6 +357,11 @@ public void addResidence(Player player, ClaimedResidence residence) { public void addResidence(String player, ClaimedResidence residence) { ResidencePlayer resPlayer = getResidencePlayer(player, residence.getOwnerUUID()); if (resPlayer != null) { + + if (resPlayer.getUniqueId() == null) { + Bukkit.getConsoleSender().sendMessage(" <--------------------- " + resPlayer.getUniqueId() + " " + residence.getOwnerUUID()); + } + resPlayer.addResidence(residence); } @@ -387,7 +397,7 @@ public void removeResFromPlayer(ClaimedResidence residence) { } public void removeResFromPlayer(UUID uuid, ClaimedResidence residence) { - ResidencePlayer resPlayer = playersUuid.get(uuid); + ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); if (resPlayer != null) { resPlayer.removeResidence(residence); } @@ -406,6 +416,5 @@ public void removeResFromPlayer(String player, ClaimedResidence residence) { if (resPlayer != null) { resPlayer.removeResidence(residence); } - return; } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index f0ed879ca..81d0400fe 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -8,6 +8,7 @@ import java.util.Set; import java.util.UUID; +import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -641,15 +642,15 @@ public void setOwner(String newOwner, boolean resetFlags) { } public String getOwner() { - if (Residence.getInstance().getConfigManager().isOfflineMode()) - return ownerLastKnownName; - if ( - ownerUUID != null && + if (Residence.getInstance().getConfigManager().isOfflineMode()) { + return ownerLastKnownName == null ? "Unknown" : ownerLastKnownName; + } + if (ownerUUID != null && ownerUUID.toString().equals(Residence.getInstance().getServerLandUUID())) //check for server land return Residence.getInstance().getServerLandName(); String name = Residence.getInstance().getPlayerName(ownerUUID);//try to find the owner's name if (name == null) - return ownerLastKnownName;//return last known if we cannot find it + return ownerLastKnownName == null ? "Unknown" : ownerLastKnownName;//return last known if we cannot find it ownerLastKnownName = name;//update last known if we did find it return name; } @@ -659,7 +660,8 @@ public UUID getOwnerUUID() { } public void setOwnerUUID(UUID ownerUUID) { - this.ownerUUID = ownerUUID; + if (ownerUUID != null) + this.ownerUUID = ownerUUID; } @Deprecated diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index d488e7cc3..f5285c16c 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -73,7 +73,7 @@ public void cleanOldResidence() { if (ResidenceVaultAdapter.hasPermission(player, ResPerm.cleanbypass.getPermission(), res.getPermissions().getWorldName().toLowerCase())) continue; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getUniqueId()); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getName(), player.getUniqueId()); plugin.getResidenceManager().removeResidence(rPlayer, oneName.getValue(), true, plugin.getConfigManager().isAutoCleanUpRegenerate()); i++; diff --git a/src/plugin.yml b/src/plugin.yml index ce079c269..e569deb94 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.3.8 +version: 4.9.3.10 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From ce63ccc52ef40a3c441105998fdd8daf916cf51f Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 16 Jun 2021 13:47:51 +0300 Subject: [PATCH 0876/1142] Initial transition towards CMILib usage --- src/com/bekvon/bukkit/CMIGUI/CMIGui.java | 496 --- .../bekvon/bukkit/CMIGUI/CMIGuiButton.java | 401 --- src/com/bekvon/bukkit/CMIGUI/CommandType.java | 5 - .../bukkit/CMIGUI/GUIButtonCommand.java | 32 - src/com/bekvon/bukkit/CMIGUI/GUIListener.java | 176 -- src/com/bekvon/bukkit/CMIGUI/GUIManager.java | 357 --- .../bukkit/cmiLib/ActionBarManager.java | 95 - src/com/bekvon/bukkit/cmiLib/CMIBlock.java | 1943 ------------ .../bekvon/bukkit/cmiLib/CMIChatColor.java | 656 ---- src/com/bekvon/bukkit/cmiLib/CMIColors.java | 99 - .../bekvon/bukkit/cmiLib/CMICustomColors.java | 1592 ---------- src/com/bekvon/bukkit/cmiLib/CMIEffect.java | 74 - .../bukkit/cmiLib/CMIEffectManager.java | 431 --- .../bekvon/bukkit/cmiLib/CMIEntityType.java | 382 --- .../bekvon/bukkit/cmiLib/CMIItemStack.java | 443 --- src/com/bekvon/bukkit/cmiLib/CMILocation.java | 371 --- src/com/bekvon/bukkit/cmiLib/CMIMaterial.java | 2797 ----------------- .../bukkit/cmiLib/CMIMaterialCriteria.java | 7 - .../bekvon/bukkit/cmiLib/CMIReflections.java | 560 ---- src/com/bekvon/bukkit/cmiLib/CMISlabType.java | 8 - .../bekvon/bukkit/cmiLib/ConfigReader.java | 444 --- src/com/bekvon/bukkit/cmiLib/ItemManager.java | 299 -- src/com/bekvon/bukkit/cmiLib/RawMessage.java | 595 ---- .../bukkit/cmiLib/RawMessageFragment.java | 55 - .../bukkit/cmiLib/RawMessageManager.java | 89 - .../bukkit/cmiLib/RawMessagePartType.java | 5 - .../bukkit/cmiLib/TitleMessageManager.java | 134 - src/com/bekvon/bukkit/cmiLib/Version.java | 103 - .../bukkit/residence/BossBar/BossBarInfo.java | 210 -- .../residence/BossBar/BossBarManager.java | 286 -- .../bukkit/residence/CommandFiller.java | 4 +- .../bukkit/residence/ConfigManager.java | 14 +- .../bukkit/residence/LocaleManager.java | 9 +- .../bekvon/bukkit/residence/Residence.java | 17 +- .../residence/ResidenceCommandListener.java | 16 +- .../bukkit/residence/allNms/v1_13Events.java | 5 +- .../bukkit/residence/chat/ChatChannel.java | 2 +- .../bukkit/residence/commands/area.java | 5 +- .../bukkit/residence/commands/auto.java | 2 +- .../bukkit/residence/commands/bank.java | 2 +- .../bukkit/residence/commands/check.java | 2 +- .../bukkit/residence/commands/clearflags.java | 2 +- .../bukkit/residence/commands/command.java | 2 +- .../bukkit/residence/commands/compass.java | 2 +- .../bukkit/residence/commands/contract.java | 2 +- .../bukkit/residence/commands/create.java | 2 +- .../bukkit/residence/commands/current.java | 2 +- .../bukkit/residence/commands/defend.java | 5 +- .../bukkit/residence/commands/expand.java | 2 +- .../bukkit/residence/commands/flags.java | 2 +- .../bukkit/residence/commands/give.java | 5 +- .../bukkit/residence/commands/gset.java | 2 +- .../bukkit/residence/commands/info.java | 2 +- .../bukkit/residence/commands/kick.java | 2 +- .../bukkit/residence/commands/lease.java | 4 +- .../bukkit/residence/commands/leaveraid.java | 2 +- .../bukkit/residence/commands/limits.java | 2 +- .../bukkit/residence/commands/list.java | 2 +- .../bukkit/residence/commands/listall.java | 2 +- .../residence/commands/listallhidden.java | 2 +- .../bukkit/residence/commands/listhidden.java | 2 +- .../bukkit/residence/commands/lists.java | 4 +- .../bukkit/residence/commands/lset.java | 2 +- .../bukkit/residence/commands/market.java | 4 +- .../bukkit/residence/commands/material.java | 4 +- .../bukkit/residence/commands/message.java | 2 +- .../bukkit/residence/commands/mirror.java | 2 +- .../bukkit/residence/commands/padd.java | 2 +- .../bukkit/residence/commands/pdel.java | 2 +- .../bukkit/residence/commands/pset.java | 2 +- .../bukkit/residence/commands/raid.java | 2 +- .../bukkit/residence/commands/raidstatus.java | 5 +- .../bekvon/bukkit/residence/commands/rc.java | 6 +- .../bukkit/residence/commands/reload.java | 2 +- .../bukkit/residence/commands/remove.java | 5 +- .../bukkit/residence/commands/removeall.java | 2 +- .../residence/commands/removeworld.java | 2 +- .../bukkit/residence/commands/rename.java | 2 +- .../bukkit/residence/commands/renamearea.java | 2 +- .../bukkit/residence/commands/resadmin.java | 2 +- .../bukkit/residence/commands/reset.java | 2 +- .../bekvon/bukkit/residence/commands/rt.java | 2 +- .../bukkit/residence/commands/select.java | 4 +- .../bukkit/residence/commands/server.java | 2 +- .../bekvon/bukkit/residence/commands/set.java | 2 +- .../bukkit/residence/commands/setall.java | 2 +- .../bukkit/residence/commands/setallfor.java | 2 +- .../bukkit/residence/commands/setmain.java | 2 +- .../bukkit/residence/commands/setowner.java | 2 +- .../bukkit/residence/commands/shop.java | 9 +- .../bukkit/residence/commands/show.java | 2 +- .../residence/commands/signconvert.java | 2 +- .../bukkit/residence/commands/signupdate.java | 2 +- .../bukkit/residence/commands/sublist.java | 2 +- .../bukkit/residence/commands/subzone.java | 2 +- .../bukkit/residence/commands/tool.java | 2 +- .../bekvon/bukkit/residence/commands/tp.java | 2 +- .../bukkit/residence/commands/tpconfirm.java | 2 +- .../bukkit/residence/commands/tpset.java | 2 +- .../bukkit/residence/commands/unstuck.java | 2 +- .../bukkit/residence/commands/version.java | 2 +- .../bukkit/residence/containers/Flags.java | 5 +- .../residence/containers/ResidencePlayer.java | 79 - .../residence/dynmap/DynMapManager.java | 2 +- .../residence/economy/rent/RentManager.java | 3 +- .../residence/event/ResidenceChatEvent.java | 2 +- .../bekvon/bukkit/residence/gui/FlagUtil.java | 16 +- .../bukkit/residence/gui/setFlagInfo.java | 28 +- .../bukkit/residence/itemlist/ItemList.java | 2 +- .../residence/itemlist/WorldItemManager.java | 2 +- .../listeners/ResidenceBlockListener.java | 12 +- .../listeners/ResidenceEntityListener.java | 14 +- .../listeners/ResidenceFixesListener.java | 2 +- .../listeners/ResidenceLWCListener.java | 5 +- .../listeners/ResidencePlayerListener.java | 34 +- .../ResidencePlayerListener1_15.java | 9 +- .../ResidencePlayerListener1_16.java | 2 +- .../permissions/PermissionManager.java | 3 +- .../protection/ClaimedResidence.java | 13 +- .../residence/protection/FlagPermissions.java | 7 +- .../protection/ResidenceManager.java | 9 +- .../bukkit/residence/raid/ResidenceRaid.java | 29 +- .../selection/SchematicsManager.java | 2 +- .../residence/selection/SelectionManager.java | 13 +- .../bukkit/residence/signsStuff/SignUtil.java | 2 +- .../bukkit/residence/text/Language.java | 2 +- .../bukkit/residence/text/help/HelpEntry.java | 9 +- .../residence/text/help/InformationPager.java | 5 +- .../bekvon/bukkit/residence/utils/Debug.java | 2 +- .../bekvon/bukkit/residence/utils/Utils.java | 4 +- .../utils}/VersionChecker.java | 4 +- src/plugin.yml | 3 +- 132 files changed, 249 insertions(+), 13451 deletions(-) delete mode 100644 src/com/bekvon/bukkit/CMIGUI/CMIGui.java delete mode 100644 src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java delete mode 100644 src/com/bekvon/bukkit/CMIGUI/CommandType.java delete mode 100644 src/com/bekvon/bukkit/CMIGUI/GUIButtonCommand.java delete mode 100644 src/com/bekvon/bukkit/CMIGUI/GUIListener.java delete mode 100644 src/com/bekvon/bukkit/CMIGUI/GUIManager.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/ActionBarManager.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMIBlock.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMIChatColor.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMIColors.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMICustomColors.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMIEffect.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMIEntityType.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMIItemStack.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMILocation.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMIMaterial.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMIMaterialCriteria.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMIReflections.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/CMISlabType.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/ConfigReader.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/ItemManager.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/RawMessage.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/RawMessageFragment.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/RawMessageManager.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/RawMessagePartType.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/TitleMessageManager.java delete mode 100644 src/com/bekvon/bukkit/cmiLib/Version.java delete mode 100644 src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java delete mode 100644 src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java rename src/com/bekvon/bukkit/{cmiLib => residence/utils}/VersionChecker.java (93%) diff --git a/src/com/bekvon/bukkit/CMIGUI/CMIGui.java b/src/com/bekvon/bukkit/CMIGUI/CMIGui.java deleted file mode 100644 index 5224bd67a..000000000 --- a/src/com/bekvon/bukkit/CMIGUI/CMIGui.java +++ /dev/null @@ -1,496 +0,0 @@ -package com.bekvon.bukkit.CMIGUI; - -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.Map.Entry; - -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import com.bekvon.bukkit.CMIGUI.GUIManager.CmiInventoryType; -import com.bekvon.bukkit.CMIGUI.GUIManager.GUIButtonLocation; -import com.bekvon.bukkit.CMIGUI.GUIManager.GUIClickType; -import com.bekvon.bukkit.CMIGUI.GUIManager.GUIFieldType; -import com.bekvon.bukkit.CMIGUI.GUIManager.GUIRows; -import com.bekvon.bukkit.CMIGUI.GUIManager.InvType; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.CMIReflections; - -public class CMIGui { - - private InventoryType invType; - private GUIRows gUIRows; - private Player player; - private Inventory inv; - private String title; - private HashMap buttons = new HashMap(); - private LinkedHashSet noSlotButtons = new LinkedHashSet(); - - private HashMap lock = new HashMap(); - private HashMap permLock = new HashMap(); - - private CmiInventoryType type = CmiInventoryType.regular; - private Object whatShows; - private Object tempData; - - private boolean allowShift = false; - private boolean allowPickUpAll = false; - - public CMIGui(Player player) { - this.player = player; - } - - @Override - public CMIGui clone() { - CMIGui g = new CMIGui(player); - g.setInvSize(gUIRows); - g.setButtons(buttons); - g.setInv(inv); - g.setInvType(invType); - g.setTitle(title); - g.setCmiInventoryType(type); - g.setWhatShows(whatShows); - return g; - } - - public boolean isOpened() { - return GUIManager.isOpenedGui(getPlayer()); - } - - public boolean isSimilar(CMIGui gui) { - - if (this.getInvSize() != gui.getInvSize()) - return false; - - if (this.getInvType() != gui.getInvType()) - return false; - - return true; - } - - public CMIGui open() { - GUIManager.openGui(this); - return this; - } - - public void outsideClick(GUIClickType type) { - - } - - public InventoryType getInvType() { - if (invType == null) - invType = InventoryType.CHEST; - return invType; - } - - public void setInvType(InventoryType invType) { - this.invType = invType; - } - - public GUIRows getInvSize() { - if (gUIRows == null) - autoResize(); - return gUIRows; - } - - public void setInvSize(GUIRows GUIRows) { - this.gUIRows = GUIRows; - } - - public void setInvSize(int rows) { - this.gUIRows = GUIRows.getByRows(rows); - } - - public void autoResize() { - this.combineButtons(); - int max = 0; - for (Entry one : this.buttons.entrySet()) { - if (one.getKey() > max) - max = one.getKey(); - } - - if (max < 9) { - this.gUIRows = GUIRows.r1; - } else if (max < 18) { - this.gUIRows = GUIRows.r2; - } else if (max < 27) { - this.gUIRows = GUIRows.r3; - } else if (max < 36) { - this.gUIRows = GUIRows.r4; - } else if (max < 45) { - this.gUIRows = GUIRows.r5; - } else { - this.gUIRows = GUIRows.r6; - } - } - - public Player getPlayer() { - return player; - } - - public void setPlayer(Player player) { - this.player = player; - } - - public Inventory getInv() { - if (inv == null) - GUIManager.generateInventory(this); - return inv; - } - - public void setInv(Inventory inv) { - this.inv = inv; - } - - public String getTitle() { - if (title == null) - title = ""; - return CMIChatColor.translate(title); - } - - public void updateTitle(String title) { - setTitle(title); - CMIReflections.updateInventoryTitle(player, this.title); - } - - public void setTitle(String title) { - if (title.length() > 32) { - title = title.substring(0, 31) + "~"; - } - - this.title = title; - } - - public HashMap getButtons() { - combineButtons(); - return buttons; - } - - public void clearButtons() { - for (Entry one : getButtons().entrySet()) { - this.inv.setItem(one.getKey(), null); - } - if (inv != null) - this.inv.clear(); - buttons.clear(); - noSlotButtons.clear(); - } - - public CMIGui replaceButton(CMIGuiButton button) { - button.updateLooks(); - if (button.getSlot() != null) - this.buttons.remove(button.getSlot()); - if (this.getInv() != null) { - this.getInv().setItem(button.getSlot(), button.getItem(this.getPlayer())); - } - return addButton(button, 54); - } - - public CMIGui addButton(CMIGuiButton button) { - button.updateLooks(); - return addButton(button, 54); - } - - public CMIGui addButton(CMIGuiButton button, int maxSlot) { - button.setGui(this); - if (button.getSlot() != null && buttons.get(button.getSlot()) != null) { - for (int ii = button.getSlot(); ii < maxSlot; ii++) { - CMIGuiButton b = buttons.get(ii); - if (b == null) { - buttons.put(ii, button); - break; - } - } - return this; - } - - if (button.getSlot() == null) { - noSlotButtons.add(button); - return this; - } - buttons.put(button.getSlot(), button); - return this; - } - - private void combineButtons() { - for (CMIGuiButton button : noSlotButtons) { - for (int ii = 0; ii < 54; ii++) { - CMIGuiButton b = buttons.get(ii); - if (b == null) { - buttons.put(ii, button); - break; - } - } - } - noSlotButtons.clear(); - } - - public void fillEmptyButtons() { - fillEmptyButtons(null); - } - - public void fillEmptyButtons(ItemStack item) { - combineButtons(); - for (int i = 0; i < this.getInvSize().getFields(); i++) { - if (this.buttons.containsKey(i)) - continue; - addEmptyButton(item, i); - } - } - - public void updateButton(CMIGuiButton button) { - if (inv == null || button.getSlot() == null || inv.getSize() < button.getSlot()) - return; - this.inv.setItem(button.getSlot(), button.getItem(this.getPlayer())); - buttons.put(button.getSlot(), button); - } - - public void addEmptyButton(int slot) { - addEmptyButton(null, slot); - } - - public void addEmptyButton(ItemStack item, int slot) { - ItemStack MiscInfo = item == null ? CMIMaterial.BLACK_STAINED_GLASS_PANE.newItemStack() : item.clone(); - ItemMeta MiscInfoMeta = MiscInfo.getItemMeta(); - MiscInfoMeta.setDisplayName(" "); - MiscInfo.setItemMeta(MiscInfoMeta); - CMIGuiButton button = new CMIGuiButton(slot, GUIFieldType.Locked, MiscInfo); - addButton(button); - updateButton(button); - } - - public void setButtons(HashMap buttons) { -// for (Entry one : buttons.entrySet()) { -// CMIGuiButton old = this.buttons.get(one.getKey()); -// if (old == null) -// old = one.getValue(); -// buttons.put(one.getKey(), old); -// } - this.buttons = buttons; - } - - public boolean isLocked(InvType type) { - return lock.containsKey(type) ? (lock.get(type) == GUIFieldType.Locked) : false; - } - - public void addLock(InvType type) { - addLock(type, GUIFieldType.Locked); - } - - public void addLock(InvType type, GUIFieldType lock) { - this.lock.put(type, lock); - } - - public boolean isPermLocked(InvType type) { - return permLock.containsKey(type) ? (!this.player.hasPermission(permLock.get(type))) : true; - } - - public void addPermLock(InvType type, String perm) { - this.permLock.put(type, perm); - } - - public CmiInventoryType getType() { - return type; - } - - public void setCmiInventoryType(CmiInventoryType type) { - this.type = type; - } - - public Object getWhatShows() { - return whatShows; - } - - public void setWhatShows(Object whatShows) { - this.whatShows = whatShows; - } - - public Integer getSlot(GUIButtonLocation place) { - GUIRows size = this.getInvSize(); - int v = place.getCollumn() * 9; - v = place.getCollumn() > 0 ? v - 1 : v; - Integer value = (((place.getRow() * (size.getRows())) * 9) - 8) + v; - value = place.getRow() > 0 ? value : value + 9; - return value - 1; - } - - public void onClose() { - - } - - public void onOpen() { - - } - - public void processClose() { - } - -// public void addPagination(PageInfo pi, Object cmd, String pagePref) { -// addPagination(pi,Residence.getInstance().getCommandManager().getLabel() + " " + cmd.getClass().getSimpleName(), pagePref); -// } -// -// public void addPagination(PageInfo pi, String cmd, String pagePref) { -// -// if (!cmd.startsWith("/")) -// cmd = "/" + cmd; -//// String separator = this.getMsg(LC.info_fliperSimbols); -// -// int CurrentPage = pi.getCurrentPage(); -// int pageCount = pi.getTotalPages(); -// int totalEntries = pi.getTotalEntries(); -// -// if (pageCount == 1) -// return; -// if (this.getInvSize().getRows() < 6) -// this.setInvSize(GUIRows.r6); -// -// Integer prevSlot = this.getSlot(GUIButtonLocation.bottomLeft); -// Integer nextSlot = this.getSlot(GUIButtonLocation.bottomRight); -// Integer midSlot = this.getSlot(GUIButtonLocation.bottomRight) - 4; -// -// String pagePrefix = pagePref == null ? "" : pagePref; -// -// int NextPage = CurrentPage + 1; -// NextPage = CurrentPage < pageCount ? NextPage : CurrentPage; -// int Prevpage = CurrentPage - 1; -// Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; -// -//// RawMessage rm = new RawMessage(); -// -// if (pageCount != 0) { -// -// for (int i = GUIRows.r5.getFields(); i < GUIRows.r6.getFields(); i++) { -// this.getButtons().remove(i); -// } -// -// CMIGuiButton button = new CMIGuiButton(midSlot, CMIMaterial.LIGHT_GRAY_WOOL.newItemStack()); -// button.setName(CMI.getInstance().getMsg(LC.info_pageCount, "[current]", CurrentPage, "[total]", pageCount)); -// button.addLore(CMI.getInstance().getMsg(LC.info_pageCountHover, "[totalEntries]", totalEntries)); -// this.addButton(button); -// -// if (this.getButtons().get(prevSlot) == null && CurrentPage > 1) { -// button = new CMIGuiButton(prevSlot, CMIMaterial.WHITE_WOOL.newItemStack()); -// button.setName(CMI.getInstance().getMsg(LC.info_prevPageGui)); -// button.addLore(CMI.getInstance().getMsg(LC.info_pageCount, "[current]", CurrentPage, "[total]", pageCount)); -// button.addCommand(cmd + " " + pagePrefix + Prevpage, CommandType.silent); -// this.addButton(button); -// } -// -// if (this.getButtons().get(nextSlot) == null && pageCount > CurrentPage) { -// button = new CMIGuiButton(nextSlot, CMIMaterial.GRAY_WOOL.newItemStack()); -// button.setName(CMI.getInstance().getMsg(LC.info_nextPageGui)); -// button.addLore(CMI.getInstance().getMsg(LC.info_pageCount, "[current]", CurrentPage, "[total]", pageCount)); -// button.addCommand(cmd + " " + pagePrefix + NextPage, CommandType.silent); -// this.addButton(button); -// } -// -// } -// } -// -// public void addPagination(PageInfo pi, String pagePref, Class cls, String... argsS) { -// -//// if (!cmd.startsWith("/")) -//// cmd = "/" + cmd; -//// String separator = this.getMsg(LC.info_fliperSimbols); -// -// String arg = ""; -// for (String one : argsS) { -// if (!arg.isEmpty()) -// arg += " "; -// arg += one; -// } -// String args = arg; -// -// int CurrentPage = pi.getCurrentPage(); -// int pageCount = pi.getTotalPages(); -// int totalEntries = pi.getTotalEntries(); -// -// if (pageCount == 1) -// return; -// if (this.getInvSize().getRows() < 6) -// this.setInvSize(GUIRows.r6); -// -// Integer prevSlot = this.getSlot(GUIButtonLocation.bottomLeft); -// Integer nextSlot = this.getSlot(GUIButtonLocation.bottomRight); -// Integer midSlot = this.getSlot(GUIButtonLocation.bottomRight) - 4; -// -// String pagePrefix = pagePref == null ? "" : pagePref; -// -//// RawMessage rm = new RawMessage(); -// -// if (pageCount != 0) { -// -// for (int i = GUIRows.r5.getFields(); i < GUIRows.r6.getFields(); i++) { -// this.getButtons().remove(i); -// } -// -// CMIGuiButton button = new CMIGuiButton(midSlot, CMIMaterial.LIGHT_GRAY_WOOL.newItemStack()); -// button.setName(CMI.getInstance().getMsg(LC.info_pageCount, "[current]", CurrentPage, "[total]", pageCount)); -// button.addLore(CMI.getInstance().getMsg(LC.info_pageCountHover, "[totalEntries]", totalEntries)); -// this.addButton(button); -// -// if (this.getButtons().get(prevSlot) == null && CurrentPage > 1) { -// button = new CMIGuiButton(prevSlot, CMIMaterial.WHITE_WOOL.newItemStack()) { -// @Override -// public void click(GUIClickType type) { -// -// int Prevpage = CurrentPage - 1; -// Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; -// CMI.getInstance().getCommandManager().performCMICommand(player, cls, (args.isEmpty() ? "" : args + " ") + pagePrefix + Prevpage); -// -// } -// }; -// button.setName(CMI.getInstance().getMsg(LC.info_prevPageGui)); -// button.addLore(CMI.getInstance().getMsg(LC.info_pageCount, "[current]", CurrentPage - 1, "[total]", pageCount)); -// this.addButton(button); -// } -// -// if (this.getButtons().get(nextSlot) == null && pageCount > CurrentPage) { -// button = new CMIGuiButton(nextSlot, CMIMaterial.GRAY_WOOL.newItemStack()) { -// @Override -// public void click(GUIClickType type) { -// -// int NextPage = CurrentPage + 1; -// NextPage = CurrentPage < pageCount ? NextPage : CurrentPage; -// CMI.getInstance().getCommandManager().performCMICommand(player, cls, (args.isEmpty() ? "" : args + " ") + pagePrefix + NextPage); -// -// } -// }; -// button.setName(CMI.getInstance().getMsg(LC.info_nextPageGui)); -// button.addLore(CMI.getInstance().getMsg(LC.info_pageCount, "[current]", CurrentPage + 1, "[total]", pageCount)); -//// button.addCommand(cmd + " " + pagePrefix + NextPage, CommandType.silent); -// this.addButton(button); -// } -// -// } -// } - - public boolean isAllowShift() { - return allowShift; - } - - public void setAllowShift(boolean allowShift) { - this.allowShift = allowShift; - } - - public Object getTempData() { - return tempData; - } - - public void setTempData(Object tempData) { - this.tempData = tempData; - } - - public boolean isAllowPickUpAll() { - return allowPickUpAll; - } - - public void setAllowPickUpAll(boolean allowPickUpAll) { - this.allowPickUpAll = allowPickUpAll; - } -} diff --git a/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java b/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java deleted file mode 100644 index c66d5f3f7..000000000 --- a/src/com/bekvon/bukkit/CMIGUI/CMIGuiButton.java +++ /dev/null @@ -1,401 +0,0 @@ -package com.bekvon.bukkit.CMIGUI; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import com.bekvon.bukkit.CMIGUI.GUIManager.GUIClickType; -import com.bekvon.bukkit.CMIGUI.GUIManager.GUIFieldType; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.CMIItemStack; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.CMIReflections; -import com.bekvon.bukkit.residence.Residence; - -public class CMIGuiButton { - - private Integer slot = null; - private GUIFieldType fieldType = GUIFieldType.Locked; - private boolean closeInv = false; - - private HashMap> commandMap = new HashMap>(); - private List permissions = new ArrayList(); - private ItemStack item = null; - - @Override - public CMIGuiButton clone() { - CMIGuiButton b = new CMIGuiButton(slot, fieldType, item); - b.setPermissions(new ArrayList(permissions)); - b.setCommandMap(new HashMap>(commandMap)); - return b; - } - - public CMIGuiButton(Integer slot, GUIFieldType fieldType, ItemStack item) { - this.slot = slot; - this.fieldType = fieldType; - this.item = item == null ? null : item.clone(); - } - - public CMIGuiButton(Integer slot) { - this.slot = slot; - } - - public void hideItemFlags() { - if (item != null) - item = CMIReflections.HideFlag(item, 63); - } - - public CMIGuiButton(ItemStack item) { - this.item = item == null ? null : item.clone(); - } - - public CMIGuiButton(CMIMaterial mat) { - this.item = mat == null ? null : mat.newItemStack(); - } - - public CMIGuiButton(Integer slot, CMIItemStack item) { - this(slot, item.getItemStack()); - } - - public CMIGuiButton(Integer slot, Material material) { - this(slot, CMIMaterial.get(material), null); - } - - public CMIGuiButton(Integer slot, CMIMaterial material) { - this(slot, material, null); - } - - @Deprecated - public CMIGuiButton(Integer slot, Material material, int data) { - this(slot, material, data, null); - } - - public CMIGuiButton(Integer slot, Material material, String name) { - this(slot, CMIMaterial.get(material), name); - } - - public CMIGuiButton(Integer slot, CMIMaterial material, String name) { - this.slot = slot; - this.item = material == null ? null : material.newItemStack(); - if (name != null) { - ItemMeta meta = this.item.getItemMeta(); - meta.setDisplayName(CMIChatColor.translate(name)); - this.item.setItemMeta(meta); - } - } - - @Deprecated - public CMIGuiButton(Integer slot, Material material, int data, String name) { - this.slot = slot; - this.item = new ItemStack(material, 1, (short) data); - if (name != null) { - ItemMeta meta = this.item.getItemMeta(); - meta.setDisplayName(CMIChatColor.translate(name)); - this.item.setItemMeta(meta); - } - } - - public CMIGuiButton(Integer slot, ItemStack item) { - this.slot = slot; - this.item = item == null ? null : item.clone(); - if (this.item != null && this.item.getDurability() == 32767) { - CMIMaterial d = CMIMaterial.getRandom(CMIMaterial.get(this.item)); - if (d != null && d.getLegacyData() != -1) - this.item.setDurability((short) d.getLegacyData()); - } - } - - private int schedId = -1; - private int updateInterval = 20; - private int ticks = 0; - private CMIGui sgui; - - public void setGui(CMIGui sgui) { - this.sgui = sgui; - } - - public void startAutoUpdate(int intervalTicks) { - updateInterval = intervalTicks; - tasker(); - } - - @Deprecated - public void startAutoUpdate(CMIGui sgui, int intervalTicks) { - updateInterval = intervalTicks; - this.sgui = sgui; - tasker(); - } - - private void tasker() { - if (schedId != -1) { - Bukkit.getScheduler().cancelTask(schedId); - schedId = -1; - } - CMIGuiButton b = this; - schedId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Residence.getInstance(), new Runnable() { - @Override - public void run() { - ticks++; - if (sgui != null && GUIManager.getGui(sgui.getPlayer()) != sgui) { - if (schedId != -1) { - Bukkit.getScheduler().cancelTask(schedId); - schedId = -1; - return; - } - } - updateLooks(); - update(sgui); - if (sgui != null) - sgui.updateButton(b); - } - }, 20L, updateInterval); - } - - public void updateLooks() { - - } - - public void update() { - if (this.sgui != null) - sgui.updateButton(this); - } - - public void update(CMIGui gui) { - if (gui != null) - gui.updateButton(this); - } - - public Integer getSlot() { - return slot; - } - - public CMIGuiButton setSlot(Integer slot) { - this.slot = slot; - return this; - } - - public GUIFieldType getFieldType() { - return fieldType; - } - - public CMIGuiButton setFieldType(GUIFieldType fieldType) { - this.fieldType = fieldType; - return this; - } - - public CMIGuiButton lockField() { - this.fieldType = GUIFieldType.Locked; - return this; - } - - public CMIGuiButton unlockField() { - this.fieldType = GUIFieldType.Free; - return this; - } - - public boolean isLocked() { - return this.fieldType.equals(GUIFieldType.Locked); - } - - public List getPermissions() { - return permissions; - } - - public CMIGuiButton addPermission(String perm) { - this.permissions.add(perm); - return this; - } - - public void setPermissions(List permissions) { - this.permissions = permissions; - } - - public List getCommands(GUIClickType type) { - List list = commandMap.get(type); - if (list == null) - list = new ArrayList(); - return list; - } - - public CMIGuiButton setName(String name) { - if (this.item == null) - return this; - ItemMeta meta = this.item.getItemMeta(); - if (meta != null) { - meta.setDisplayName(CMIChatColor.translate(name)); - this.item.setItemMeta(meta); - } - return this; - } - - public CMIGuiButton addLore(List l) { - l = spreadList(l); - for (String one : l) { - addLore(one); - } - return this; - } - - public List spreadList(List ls) { - List s = new ArrayList(); - for (int i = 0; i < ls.size(); i++) { - if (ls.get(i).contains(" \\n")) { - s.addAll(Arrays.asList(ls.get(i).split(" \\\\n"))); - } else if (ls.get(i).contains(" \n")) { - s.addAll(Arrays.asList(ls.get(i).split(" \\n"))); - } else - s.add(ls.get(i)); - } - return s; - } - - public CMIGuiButton addLore(String l) { - if (this.item == null) - return this; - ItemMeta meta = this.item.getItemMeta(); - - if (meta != null) { - List lore = meta.getLore(); - if (lore == null) - lore = new ArrayList(); - - if (l.contains("\\n")) { - String[] split = l.split("\\\\n"); - for (String one : split) { - lore.add(CMIChatColor.translate(one)); - } - } else if (l.contains("\n")) { - String[] split = l.split("\\n"); - for (String one : split) { - lore.add(CMIChatColor.translate(one)); - } - } else - lore.add(CMIChatColor.translate(l)); - meta.setLore(lore); - this.item.setItemMeta(meta); - } - return this; - } - - public CMIGuiButton clearLore() { - if (this.item == null) - return this; - ItemMeta meta = this.item.getItemMeta(); - if (meta != null) { - meta.setLore(new ArrayList()); - this.item.setItemMeta(meta); - } - return this; - } - - public CMIGuiButton addItemName(String name) { - if (this.item == null) - return this; - ItemMeta meta = this.item.getItemMeta(); - meta.setDisplayName(CMIChatColor.translate(name)); - this.item.setItemMeta(meta); - return this; - } - - public CMIGuiButton addCommand(String command) { - return addCommand(null, command); - } - - public CMIGuiButton addCommand(String command, CommandType vis) { - return addCommand(null, command, vis); - } - - public CMIGuiButton addCommand(GUIClickType type, String command) { - return addCommand(type, command, CommandType.gui); - } - - public CMIGuiButton addCommand(GUIClickType type, String command, CommandType vis) { - if (type == null) { - for (GUIClickType one : GUIClickType.values()) { - List list = commandMap.get(one); - if (list == null) - list = new ArrayList(); - list.add(new GUIButtonCommand(command, vis)); - commandMap.put(one, list); - } - } else { - List list = commandMap.get(type); - if (list == null) - list = new ArrayList(); - list.add(new GUIButtonCommand(command, vis)); - commandMap.put(type, list); - } - return this; - } - - public void click() { -// click(null, null); - } - - public void click(GUIClickType type) { -// click(type, null); - } - - public CMIGuiButton addCommand(Location loc) { - if (loc == null) - return this; - addCommand("cmi tppos " + loc.getWorld().getName() + " " + loc.getX() + " " + loc.getY() + " " + loc.getBlockZ() + " " + loc.getPitch() + " " + loc.getYaw()); - return this; - } - - public ItemStack getItem() { - return item; - } - - public ItemStack getItem(Player player) { - - if (item != null) { - ItemStack i = item.clone(); - - if (this.isLocked()) - i = CMIReflections.setNbt(i, GUIManager.CMIGUIIcon, GUIManager.LIProtection); - - ItemMeta meta = i.hasItemMeta() ? i.getItemMeta() : null; - - if (meta != null) - i.setItemMeta(meta); - return i; - } - - return item; - } - - public CMIGuiButton setItem(ItemStack item) { - this.item = item == null ? null : item.clone(); - return this; - } - - public void setCommandMap(HashMap> commandMap) { - this.commandMap = commandMap; - } - - public boolean isCloseInv() { - return closeInv; - } - - public void setCloseInv(boolean closeInv) { - this.closeInv = closeInv; - } - - public CMIGui getGui() { - return sgui; - } - - public int getTicks() { - return ticks; - } - -} diff --git a/src/com/bekvon/bukkit/CMIGUI/CommandType.java b/src/com/bekvon/bukkit/CMIGUI/CommandType.java deleted file mode 100644 index 11bc67e20..000000000 --- a/src/com/bekvon/bukkit/CMIGUI/CommandType.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.bekvon.bukkit.CMIGUI; - -public enum CommandType { - gui, warmup, acmd, rank, silent -} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/CMIGUI/GUIButtonCommand.java b/src/com/bekvon/bukkit/CMIGUI/GUIButtonCommand.java deleted file mode 100644 index 734decb11..000000000 --- a/src/com/bekvon/bukkit/CMIGUI/GUIButtonCommand.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.bekvon.bukkit.CMIGUI; - -class GUIButtonCommand { - private String command; - private CommandType vis = CommandType.gui; - - public GUIButtonCommand(String command) { - this.command = command; - } - - public GUIButtonCommand(String command, CommandType vis) { - this.command = command; - this.vis = vis; - } - - public String getCommand() { - return command; - } - - public void setCommand(String command) { - this.command = command; - } - - public CommandType getVis() { - return vis; - } - - public void setVis(CommandType vis) { - this.vis = vis; - } - -} diff --git a/src/com/bekvon/bukkit/CMIGUI/GUIListener.java b/src/com/bekvon/bukkit/CMIGUI/GUIListener.java deleted file mode 100644 index b54a349f3..000000000 --- a/src/com/bekvon/bukkit/CMIGUI/GUIListener.java +++ /dev/null @@ -1,176 +0,0 @@ -package com.bekvon.bukkit.CMIGUI; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryAction; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.inventory.InventoryDragEvent; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.cmiLib.CMIReflections; -import com.bekvon.bukkit.residence.Residence; - -public class GUIListener implements Listener { - Residence plugin; - - public GUIListener(Residence plugin) { - this.plugin = plugin; - } - - @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) - public void onNormalInventoryClose(InventoryCloseEvent event) { - - final Player player = (Player) event.getPlayer(); - if (GUIManager.isOpenedGui(player)) { - if (GUIManager.removePlayer(player)) { - player.updateInventory(); - clearIconItems(player); - } - } - } - - private void clearIconItems(Player player) { - for (ItemStack one : player.getInventory().getContents()) { - Object res = CMIReflections.getNbt(one, GUIManager.CMIGUIIcon); - if (res == null || !(res instanceof String) || !((String) res).equalsIgnoreCase(GUIManager.LIProtection)) - continue; - player.getInventory().remove(one); - } - } - - private HashMap LastClick = new HashMap(); - - private boolean canClickByTimer(UUID uuid) { - Long time = LastClick.get(uuid); - if (time == null) { - LastClick.put(uuid, System.currentTimeMillis()); - return true; - } - - if (time + 51 > System.currentTimeMillis()) { - LastClick.put(uuid, System.currentTimeMillis()); - return false; - } - - LastClick.put(uuid, System.currentTimeMillis()); - return true; - } - - @EventHandler(priority = EventPriority.NORMAL) - public void onInventoryClick(final InventoryClickEvent event) { - - if (event.isCancelled()) { - if (!event.getWhoClicked().getGameMode().toString().equalsIgnoreCase("Spectator")) - return; - } - final Player player = (Player) event.getWhoClicked(); - - if (!GUIManager.isOpenedGui(player)) - return; - - CMIGui gui = GUIManager.getGui(player); - - if (event.getClick() == ClickType.DOUBLE_CLICK || event.getHotbarButton() != -1) { - event.setCancelled(true); - return; - } - - if (!gui.isAllowShift() && event.isShiftClick()) - event.setCancelled(true); - - if (!event.getAction().equals(InventoryAction.PICKUP_ALL) && - !event.getAction().equals(InventoryAction.PICKUP_ONE) && - !event.getAction().equals(InventoryAction.PICKUP_HALF) && - !event.getAction().equals(InventoryAction.PICKUP_SOME) && - !event.getAction().equals(InventoryAction.PLACE_ALL) && - !event.getAction().equals(InventoryAction.PLACE_ONE) && - !event.getAction().equals(InventoryAction.PLACE_SOME) && - !gui.isAllowShift() && !event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY)) - event.setCancelled(true); - - if (!gui.isAllowPickUpAll() && !canClickByTimer(player.getUniqueId())) { - event.setCancelled(true); - return; - } - - final List buttons = new ArrayList(); - buttons.add(event.getRawSlot()); - if (!GUIManager.canClick(player, buttons)) { - event.setCancelled(true); - } - - if (GUIManager.isLockedPart(player, buttons)) - event.setCancelled(true); - -// Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { -// @Override -// public void run() { - InventoryAction action = event.getAction(); - GUIManager.processClick(player, buttons, GUIManager.getClickType(event.isLeftClick(), event.isShiftClick(), action)); -// } -// }, 1); - -// Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { -// @Override -// public void run() { -// clearIconItems(player); -// } -// }, 1); - - } - -// @EventHandler(priority = EventPriority.MONITOR) -// public void onInventoryClicks(final InventoryClickEvent event) { -// final Player player = (Player) event.getWhoClicked(); -// } -// -// @EventHandler(priority = EventPriority.MONITOR) -// public void onInventoryClicks(final InventoryDragEvent event) { -// final Player player = (Player) event.getWhoClicked(); -// } - - @EventHandler(priority = EventPriority.NORMAL) - public void onInventoryMove(final InventoryDragEvent event) { - if (event.isCancelled()) { - if (!event.getWhoClicked().getGameMode().toString().equalsIgnoreCase("Spectator")) - return; - } - final Player player = (Player) event.getWhoClicked(); - - if (!GUIManager.isOpenedGui(player)) - return; - - CMIGui gui = GUIManager.getGui(player); - - if (!gui.isAllowPickUpAll() && !canClickByTimer(player.getUniqueId())) { - event.setCancelled(true); - return; - } - - final List buttons = new ArrayList(); - buttons.addAll(event.getRawSlots()); - if (!GUIManager.canClick(player, buttons)) - event.setCancelled(true); - - if (GUIManager.isLockedPart(player, buttons)) - event.setCancelled(true); - -// Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { -// @Override -// public void run() { - - GUIManager.processClick(player, buttons, GUIManager.getClickType(true, false, null)); -// } -// }, 1); - } - -} diff --git a/src/com/bekvon/bukkit/CMIGUI/GUIManager.java b/src/com/bekvon/bukkit/CMIGUI/GUIManager.java deleted file mode 100644 index b725c33cb..000000000 --- a/src/com/bekvon/bukkit/CMIGUI/GUIManager.java +++ /dev/null @@ -1,357 +0,0 @@ -package com.bekvon.bukkit.CMIGUI; - -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; -import java.util.logging.Level; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryAction; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.server.ServerCommandEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -import com.bekvon.bukkit.cmiLib.CMIReflections; -import com.bekvon.bukkit.residence.Residence; - -public class GUIManager { - - private static HashMap map = new HashMap(); - - public final static String CMIGUIIcon = "CMIGUIIcon"; - public final static String LIProtection = "LIProtection"; - - static { - registerListener(); - } - - public static void registerListener() { - Residence.getInstance().getServer().getPluginManager().registerEvents(new GUIListener(Residence.getInstance()), Residence.getInstance()); - } - - public enum GUIButtonLocation { - topLeft(0, 0), topRight(0, 1), bottomLeft(1, 0), bottomRight(1, 1); - - private Integer row; - private Integer collumn; - - GUIButtonLocation(Integer row, Integer collumn) { - this.collumn = collumn; - this.row = row; - } - - public Integer getRow() { - return row; - } - - public Integer getCollumn() { - return collumn; - } - - } - - public enum GUIRows { - r1(1), r2(2), r3(3), r4(4), r5(5), r6(6); - - private int rows; - - GUIRows(int rows) { - this.rows = rows; - } - - public Integer getFields() { -// if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { -// return rows * 9 < 27 ? 27 : rows * 9; -// } - return rows * 9; - } - - public Integer getRows() { - return rows; - } - - public static GUIRows getByRows(Integer rows) { - if (rows > 9) - rows = rows / 9; - for (GUIRows one : GUIRows.values()) { - if (one.getRows().equals(rows)) - return one; - } - return GUIRows.r6; - } - } - - public enum GUIFieldType { - Free, Locked - } - - public enum InvType { - Gui, Main, Quickbar - } - - public enum CmiInventoryType { - regular, SavedInv, EditableInv, RecipeCreator, ArmorStandEditor, ArmorStandCopy, EntityInventoryEditor, Recipes, SellHand - } - - public enum GUIClickType { - Left, LeftShift, Right, RightShift, MiddleMouse - } - - public void closeAll() { - for (Entry one : map.entrySet()) { - Player player = Bukkit.getPlayer(one.getKey()); - if (player == null) - continue; - player.closeInventory(); - } - } - - public static GUIClickType getClickType(boolean left, boolean shift, InventoryAction action) { - - if (!left && !shift && (action.equals(InventoryAction.NOTHING) || action.equals(InventoryAction.CLONE_STACK))) - return GUIClickType.MiddleMouse; - - if (left && !shift) { - return GUIClickType.Left; - } else if (left && shift) { - return GUIClickType.LeftShift; - } else if (!left && !shift) { - return GUIClickType.Right; - } else { - return GUIClickType.RightShift; - } - } - - public static boolean processClick(final Player player, List buttons, final GUIClickType clickType) { - CMIGui gui = map.get(player.getUniqueId()); - if (gui == null) - return false; - int clicks = 0; - for (Integer one : buttons) { - - final CMIGuiButton button = gui.getButtons().get(one); - - if (button == null) - continue; - clicks++; - boolean canClick = true; - - if (canClick) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { - @Override - public void run() { - - for (GUIButtonCommand oneC : button.getCommands(clickType)) { - GUIManager.performCommand(player, oneC.getCommand(), oneC.getVis()); - } - } - }, 1); - } - - button.click(); - button.click(clickType); -// button.updateLooks(); -// button.update(gui); - - if (button.isCloseInv()) - player.closeInventory(); - - if (!button.getCommands(clickType).isEmpty()) - break; - } - if (clicks == 0) - gui.outsideClick(clickType); - - return false; - } - - public static void performCommand(CommandSender sender, String command, CommandType type) { - if (sender instanceof Player) { - performCommand((Player) sender, command, type); - } else { - ServerCommandEvent event = new ServerCommandEvent(sender, command.startsWith("/") ? command : "/" + command); - Bukkit.getServer().getPluginManager().callEvent(event); - if (!event.isCancelled()) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), event.getCommand().startsWith("/") ? event.getCommand().substring(1, event.getCommand().length()) : event.getCommand()); - } - if (!type.equals(CommandType.silent)) - Bukkit.getLogger().log(Level.INFO, sender.getName() + " issued " + type.name() + " command: /" + command); - } - } - - public static void performCommand(Player player, String command, CommandType type) { - if (player == null) { - Residence.getInstance().consoleMessage("&cCant perform command (" + command + "). Player is NULL"); - return; - } - if (command == null) { - Residence.getInstance().consoleMessage("&cCant perform command (" + command + "). Command is NULL"); - return; - } - PlayerCommandPreprocessEvent event = new PlayerCommandPreprocessEvent(player, command.startsWith("/") ? command : "/" + command); - Bukkit.getServer().getPluginManager().callEvent(event); - if (!event.isCancelled()) { - player.performCommand(event.getMessage().startsWith("/") ? event.getMessage().substring(1, event.getMessage().length()) : event.getMessage()); - } - if (!type.equals(CommandType.silent)) - Bukkit.getLogger().log(Level.INFO, player.getName() + " issued " + type.name() + " command: /" + command); - } - - public static boolean isLockedPart(Player player, List buttons) { - CMIGui gui = map.get(player.getUniqueId()); - if (gui == null) - return false; - - int size = gui.getInv().getSize(); - int mainInvMax = size + 36 - 9; - int quickbar = size + 36; - - for (Integer one : buttons) { - if (one > quickbar || quickbar < 0) - continue; - if (one < size && (gui.isLocked(InvType.Gui) && gui.isPermLocked(InvType.Gui))) { - return true; - } else if (one >= size && one < mainInvMax && (gui.isLocked(InvType.Main) && gui.isPermLocked(InvType.Main))) { - return true; - } else if (one >= mainInvMax && one < quickbar && ((gui.isLocked(InvType.Quickbar) && gui.isPermLocked(InvType.Quickbar)) || (gui.isLocked(InvType.Main) && gui.isPermLocked(InvType.Main)))) { - return true; - } - } - - return false; - } - - public static boolean canClick(Player player, List buttons) { - try { - CMIGui gui = map.get(player.getUniqueId()); - if (gui == null) - return true; - - for (Integer one : buttons) { - CMIGuiButton button = gui.getButtons().get(one); - if (button == null) - continue; - if (button.getFieldType() == GUIFieldType.Locked) - return false; - } - } catch (Exception e) { - return false; - } - return true; - } - - public static CMIGui getGui(Player player) { - return map.get(player.getUniqueId()); - } - - public static boolean isOpenedGui(Player player) { - CMIGui gui = map.get(player.getUniqueId()); - if (gui == null) - return false; - if (player.getOpenInventory() == null) - return false; -// if (!player.getOpenInventory().getTopInventory().equals(gui.getInv())) -// return false; - return true; - } - - public static boolean removePlayer(Player player) { - CMIGui removed = map.remove(player.getUniqueId()); - if (removed == null) - return false; - if (player.getOpenInventory() != null && player.getOpenInventory().getTopInventory().equals(removed.getInv())) - player.closeInventory(); - - removed.processClose(); - removed.onClose(); - - return true; - } - - public static void generateInventory(CMIGui gui) { - Inventory GuiInv = null; - if (gui.getInvSize() != null) { - GuiInv = Bukkit.createInventory(null, gui.getInvSize().getFields(), gui.getTitle()); - } else { - GuiInv = Bukkit.createInventory(null, gui.getInvType(), gui.getTitle()); - } - - if (GuiInv == null) - return; - - for (Entry one : gui.getButtons().entrySet()) { - if (one.getKey() > GuiInv.getSize()) - continue; - try { - ItemStack item = one.getValue().getItem(gui.getPlayer()); - item = item == null ? null : item.clone(); - if (item != null && one.getValue().isLocked()) { - item = CMIReflections.setNbt(item, CMIGUIIcon, LIProtection); -// if (gui.getPlayer().getName().equals("Zrips")) -// one.getValue().unlockField(); - } - GuiInv.setItem(one.getKey(), item); - } catch (ArrayIndexOutOfBoundsException e) { -// e.printStackTrace(); - break; - } - } - gui.setInv(GuiInv); - } - -// public void updateInventory(CMIGui old, CMIGui gui) { -// -// Inventory GuiInv = gui.getInv(); -// if (GuiInv == null) -// return; -// -// plugin.getNMS().updateInventoryTitle(gui.getPlayer(), gui.getTitle()); -// -// for (Entry one : gui.getButtons().entrySet()) { -// if (one.getKey() > GuiInv.getSize()) -// continue; -// GuiInv.setItem(one.getKey(), one.getValue().getItem()); -// } -// gui.setInv(GuiInv); -// } - - public static void openGui(CMIGui gui) { - - Player player = gui.getPlayer(); - if (player.isSleeping()) - return; - CMIGui oldGui = null; - if (isOpenedGui(player)) { - oldGui = getGui(player); - if (!gui.isSimilar(oldGui)) { - oldGui = null; - } - } - if (oldGui == null) { - generateInventory(gui); - player.closeInventory(); - player.openInventory(gui.getInv()); - gui.onOpen(); - map.put(player.getUniqueId(), gui); - } else { - updateContent(gui); - } - - } - - public static void updateContent(CMIGui gui) { - Player player = gui.getPlayer(); - if (player.getOpenInventory() == null || player.getOpenInventory().getTopInventory() == null) { - player.closeInventory(); - } - CMIReflections.updateInventoryTitle(player, gui.getTitle()); - player.getOpenInventory().getTopInventory().setContents(gui.getInv().getContents()); - gui.setInv(player.getOpenInventory().getTopInventory()); - map.put(player.getUniqueId(), gui); - } - -} diff --git a/src/com/bekvon/bukkit/cmiLib/ActionBarManager.java b/src/com/bekvon/bukkit/cmiLib/ActionBarManager.java deleted file mode 100644 index 2488bd20c..000000000 --- a/src/com/bekvon/bukkit/cmiLib/ActionBarManager.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.utils.Debug; - -public class ActionBarManager { - private static Object packet; - private static Method getHandle; - private static Method sendPacket; - private static Field playerConnection; - private static Class nmsChatSerializer; - private static Class nmsIChatBaseComponent; - private static Class packetType; - - private static Class ChatMessageclz; - private static Class sub; - private static Object[] consts; - - static { - if (Version.isCurrentHigher(Version.v1_7_R4)) { - Version version = Version.getCurrent(); - try { - packetType = Class.forName("net.minecraft.server." + version + ".PacketPlayOutChat"); - Class typeCraftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer"); - Class typeNMSPlayer = Class.forName("net.minecraft.server." + version + ".EntityPlayer"); - Class typePlayerConnection = Class.forName("net.minecraft.server." + version + ".PlayerConnection"); - nmsChatSerializer = Class.forName(getChatSerializerClasspath()); - nmsIChatBaseComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent"); - getHandle = typeCraftPlayer.getMethod("getHandle"); - playerConnection = typeNMSPlayer.getField("playerConnection"); - sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet")); - if (Version.isCurrentHigher(Version.v1_11_R1)) { - ChatMessageclz = Class.forName("net.minecraft.server." + version + ".ChatMessageType"); - consts = ChatMessageclz.getEnumConstants(); - sub = consts[2].getClass(); - } - } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(ex.toString()); - } - } - } - - public static void send(CommandSender receivingPacket, String msg) { - if (receivingPacket instanceof Player) - send((Player) receivingPacket, msg); - else - receivingPacket.sendMessage(msg); - } - - public static void send(Player receivingPacket, String msg) { - if (receivingPacket == null || !receivingPacket.isOnline() || msg == null) - return; - - try { - if (!Version.getCurrent().isHigher(Version.v1_7_R4) || nmsChatSerializer == null) { - receivingPacket.sendMessage(CMIChatColor.translate(msg)); - return; - } - - RawMessage rm = new RawMessage(); - rm.addText(msg); - Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, CMIChatColor.translate(rm.getRaw())); - if (Version.isCurrentEqualOrHigher(Version.v1_16_R1)) - packet = packetType.getConstructor(nmsIChatBaseComponent, sub, UUID.class).newInstance(serialized, consts[2], receivingPacket.getUniqueId()); - else if (Version.isCurrentHigher(Version.v1_11_R1)) { - packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[2]); - } else if (Version.isCurrentHigher(Version.v1_7_R4)) { - packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 2); - } else { - packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 2); - } - Object player = getHandle.invoke(receivingPacket); - Object connection = playerConnection.get(player); - - sendPacket.invoke(connection, packet); - return; - - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - private static String getChatSerializerClasspath() { - if (!Version.isCurrentHigher(Version.v1_8_R2)) - return "net.minecraft.server." + Version.getCurrent() + ".ChatSerializer"; - return "net.minecraft.server." + Version.getCurrent() + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIBlock.java b/src/com/bekvon/bukkit/cmiLib/CMIBlock.java deleted file mode 100644 index 075b42af9..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMIBlock.java +++ /dev/null @@ -1,1943 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import org.bukkit.Axis; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.Waterlogged; -import org.bukkit.block.data.type.Stairs.Shape; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; - -public class CMIBlock { - public static enum blockDirection { - none(-1), upWest(0), upEast(1), upNorth(2), upSouth(3), downWest(4), downEast(5), downNorth(6), downSouth(7); - private int dir; - - blockDirection(int dir) { - this.dir = dir; - } - - public int getDir() { - return dir; - } - - public static blockDirection getByDir(int dir) { - for (blockDirection one : blockDirection.values()) { - if (one.getDir() == dir) - return one; - } - return null; - } - } - - public static enum FlipDirection { - NORTH_SOUTH, - WEST_EAST, - UP_DOWN - } - - public static enum Bisect { - TOP, - BOTTOM - } - - public static enum BedPart { - HEAD, - FOOT - - } - - public static enum StairShape { - INNER_LEFT, - INNER_RIGHT, - OUTER_LEFT, - OUTER_RIGHT, - STRAIGHT; - - public static StairShape getByName(String name) { - for (StairShape one : StairShape.values()) { - if (one.toString().equalsIgnoreCase(name)) - return one; - } - return null; - } - } - - private Block block; - private Integer data = null; - private Object blockd = null; - - public CMIBlock(Block block) { - this.block = block; - } - - @Deprecated - public blockDirection getDirection() { - - return blockDirection.getByDir(block.getData()) == null ? blockDirection.none : blockDirection.getByDir(block.getData()); - } - - public boolean isWaterlogged() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - if (block.getBlockData() instanceof org.bukkit.block.data.Waterlogged) { - org.bukkit.block.data.Waterlogged wl = (Waterlogged) block.getBlockData(); - return wl.isWaterlogged(); - } - } - - CMIMaterial mat = CMIMaterial.get(block); - switch (mat) { - case WATER: - case LEGACY_STATIONARY_WATER: - case BUBBLE_COLUMN: - case KELP_PLANT: - case KELP: - case SEAGRASS: - case TALL_SEAGRASS: - return true; - default: - break; - } - - return false; - } - - public Bisect getBisect() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - org.bukkit.block.data.BlockData blockData = block.getBlockData(); - if (!(blockData instanceof org.bukkit.block.data.Bisected)) - return null; - - org.bukkit.block.data.Bisected half = (org.bukkit.block.data.Bisected) blockData; - - switch (half.getHalf()) { - case TOP: - return Bisect.TOP; - case BOTTOM: - return Bisect.BOTTOM; - } - } - - return null; - } - - public boolean isAttached() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - org.bukkit.block.data.BlockData blockData = block.getBlockData(); - if (!(blockData instanceof org.bukkit.block.data.Attachable)) - return false; - org.bukkit.block.data.Attachable half = (org.bukkit.block.data.Attachable) blockData; - return half.isAttached(); - } - - return false; - } - - public Axis getAxis() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - org.bukkit.block.data.BlockData blockData = block.getBlockData(); - if (!(blockData instanceof org.bukkit.block.data.Orientable)) - return null; - org.bukkit.block.data.Orientable half = (org.bukkit.block.data.Orientable) blockData; - return half.getAxis(); - } - - return null; - } - - public BedPart getBedPart() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - org.bukkit.block.data.BlockData blockData = block.getBlockData(); - if (!(blockData instanceof org.bukkit.block.data.type.Bed)) - return null; - org.bukkit.block.data.type.Bed half = (org.bukkit.block.data.type.Bed) blockData; - switch (half.getPart()) { - case FOOT: - return BedPart.FOOT; - case HEAD: - return BedPart.HEAD; - default: - break; - } - } - - return null; - } - - public StairShape getStairShape() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - CMIMaterial cm = CMIMaterial.get(block); - if (cm.isStairs()) { - org.bukkit.block.data.BlockData blockData = block.getBlockData(); - org.bukkit.block.data.type.Stairs stair = ((org.bukkit.block.data.type.Stairs) blockData); - org.bukkit.block.data.type.Stairs.Shape shape = stair.getShape(); - return StairShape.getByName(shape.toString()); - } - } - return null; - } - - public BlockFace getFacing() { - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - org.bukkit.block.data.BlockData blockData = block.getBlockData(); - if (blockData instanceof org.bukkit.block.data.Directional) { - org.bukkit.block.data.Directional directional = blockd == null - ? (org.bukkit.block.data.Directional) blockData.clone() - : (org.bukkit.block.data.Directional) blockd; - - return directional.getFacing(); - } - if (blockData instanceof org.bukkit.block.data.Rotatable) { - org.bukkit.block.data.Rotatable directional = blockd == null ? (org.bukkit.block.data.Rotatable) blockData.clone() - : (org.bukkit.block.data.Rotatable) blockd; - return directional.getRotation(); - } - } - - try { - CMIMaterial cm = CMIMaterial.get(block); - switch (cm) { - case COMPARATOR: - org.bukkit.material.Comparator Comparator2 = (org.bukkit.material.Comparator) block.getState().getData(); - return Comparator2.getFacing(); - case REPEATER: - org.bukkit.material.Diode diode = (org.bukkit.material.Diode) block.getState().getData(); - return diode.getFacing(); - case DISPENSER: - org.bukkit.material.Dispenser Dispenser = (org.bukkit.material.Dispenser) block.getState().getData(); - return Dispenser.getFacing(); - case HOPPER: - org.bukkit.material.Hopper Hopper = (org.bukkit.material.Hopper) block.getState().getData(); - return Hopper.getFacing(); - case LEVER: - org.bukkit.material.Lever Lever = (org.bukkit.material.Lever) block.getState().getData(); - return Lever.getFacing(); - case TRIPWIRE_HOOK: - org.bukkit.material.TripwireHook TripwireHook = (org.bukkit.material.TripwireHook) block.getState().getData(); - return TripwireHook.getFacing(); - } - - if (cm.isSign()) { - org.bukkit.material.Sign sign = (org.bukkit.material.Sign) block.getState().getData(); - return sign.getFacing(); - } - - if (cm.isSkull()) { - org.bukkit.material.Skull Skull = (org.bukkit.material.Skull) block.getState().getData(); - return Skull.getFacing(); - } - if (cm.isBed()) { - org.bukkit.material.Bed mat = (org.bukkit.material.Bed) block.getState().getData(); - return mat.getFacing(); - } - - if (cm.isDoor()) { - org.bukkit.material.Door mat = (org.bukkit.material.Door) block.getState().getData(); - return mat.getFacing(); - } - if (cm.isGate()) { - org.bukkit.material.Gate mat = (org.bukkit.material.Gate) block.getState().getData(); - return mat.getFacing(); - } - - String stringname = this.block.getType().name(); - - if (stringname.contains("_STAIRS")) { - org.bukkit.material.Stairs mat = (org.bukkit.material.Stairs) block.getState().getData(); - - return mat.getFacing(); - } - if (stringname.contains("BANNER")) { - org.bukkit.material.Banner Banner2 = (org.bukkit.material.Banner) block.getState().getData(); - return Banner2.getFacing(); - } - - if (stringname.contains("OBSERVER")) { - org.bukkit.material.Observer Banner2 = (org.bukkit.material.Observer) block.getState().getData(); - return Banner2.getFacing(); - } - - if (stringname.contains("PISTON_BASE")) { - org.bukkit.material.PistonBaseMaterial Banner2 = (org.bukkit.material.PistonBaseMaterial) block.getState().getData(); - return Banner2.getFacing(); - } - - if (stringname.contains("PISTON_EXTENSION")) { - org.bukkit.material.PistonExtensionMaterial Banner2 = (org.bukkit.material.PistonExtensionMaterial) block.getState().getData(); - return Banner2.getFacing(); - } - } catch (Exception e) { - } - - return null; - } - - public CMIBlock flip(FlipDirection direction, boolean angle) { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - CMIMaterial cmat = CMIMaterial.get(this.block); - org.bukkit.block.data.BlockData blockData = block.getBlockData().clone(); - switch (direction) { - case UP_DOWN: - if (blockData instanceof org.bukkit.block.data.Bisected) { - org.bukkit.block.data.Bisected half = blockd == null || !(blockd instanceof org.bukkit.block.data.Bisected) - ? (org.bukkit.block.data.Bisected) blockData.clone() - : (org.bukkit.block.data.Bisected) blockd; - if (half != null) { - switch (half.getHalf()) { - case TOP: - half.setHalf(org.bukkit.block.data.Bisected.Half.BOTTOM); - break; - case BOTTOM: - half.setHalf(org.bukkit.block.data.Bisected.Half.TOP); - break; - } - if (this.blockd == null) - this.blockd = half; - } - } - break; - } - - if (blockData instanceof org.bukkit.block.data.Directional) { - org.bukkit.block.data.Directional directional = blockd == null - ? (org.bukkit.block.data.Directional) blockData.clone() - : (org.bukkit.block.data.Directional) blockd; - if (directional != null) { - org.bukkit.block.BlockFace face = directional.getFacing(); - switch (direction) { - case NORTH_SOUTH: - - if (angle) { - switch (face) { - case NORTH: - directional.setFacing(BlockFace.EAST); - break; - case SOUTH: - directional.setFacing(BlockFace.WEST); - break; - case WEST: - directional.setFacing(BlockFace.SOUTH); - break; - case EAST: - directional.setFacing(BlockFace.NORTH); - break; - } - } else { - switch (face) { - case NORTH: - directional.setFacing(BlockFace.SOUTH); - break; - case SOUTH: - directional.setFacing(BlockFace.NORTH); - break; - } - } - - break; - case WEST_EAST: - - if (angle) { - switch (face) { - case WEST: - directional.setFacing(BlockFace.NORTH); - break; - case EAST: - directional.setFacing(BlockFace.SOUTH); - break; - case NORTH: - directional.setFacing(BlockFace.WEST); - break; - case SOUTH: - directional.setFacing(BlockFace.EAST); - break; - } - } else { - switch (face) { - case WEST: - directional.setFacing(BlockFace.EAST); - break; - case EAST: - directional.setFacing(BlockFace.WEST); - break; - } - } - - break; - case UP_DOWN: - switch (face) { - case UP: - directional.setFacing(BlockFace.DOWN); - break; - case DOWN: - directional.setFacing(BlockFace.UP); - break; - } - break; - } - - if (this.blockd == null) - this.blockd = directional; - } - } - - if (cmat.isStairs()) { - org.bukkit.block.data.type.Stairs stair = ((org.bukkit.block.data.type.Stairs) this.blockd); - org.bukkit.block.data.type.Stairs.Shape shape = stair.getShape(); - org.bukkit.block.BlockFace face = stair.getFacing(); - switch (direction) { - case NORTH_SOUTH: - case WEST_EAST: - switch (shape) { - case INNER_LEFT: - stair.setShape(Shape.INNER_RIGHT); - break; - case INNER_RIGHT: - stair.setShape(Shape.INNER_LEFT); - break; - case OUTER_LEFT: - stair.setShape(Shape.OUTER_RIGHT); - break; - case OUTER_RIGHT: - stair.setShape(Shape.OUTER_LEFT); - break; - } - break; - } - } - - if (blockData instanceof org.bukkit.block.data.Rotatable) { - org.bukkit.block.data.Rotatable directional = blockd == null ? (org.bukkit.block.data.Rotatable) blockData.clone() - : (org.bukkit.block.data.Rotatable) blockd; - - switch (directional.getRotation()) { - case NORTH: - directional.setRotation(BlockFace.SOUTH); - break; - case NORTH_NORTH_EAST: - directional.setRotation(BlockFace.SOUTH_SOUTH_WEST); - break; - case NORTH_EAST: - directional.setRotation(BlockFace.SOUTH_WEST); - break; - case EAST_NORTH_EAST: - directional.setRotation(BlockFace.WEST_SOUTH_WEST); - break; - case EAST: - directional.setRotation(BlockFace.WEST); - break; - case EAST_SOUTH_EAST: - directional.setRotation(BlockFace.WEST_NORTH_WEST); - break; - case SOUTH_EAST: - directional.setRotation(BlockFace.NORTH_WEST); - break; - case SOUTH_SOUTH_EAST: - directional.setRotation(BlockFace.NORTH_NORTH_WEST); - break; - case SOUTH: - directional.setRotation(BlockFace.NORTH); - break; - case SOUTH_SOUTH_WEST: - directional.setRotation(BlockFace.NORTH_NORTH_EAST); - break; - case SOUTH_WEST: - directional.setRotation(BlockFace.NORTH_EAST); - break; - case WEST_SOUTH_WEST: - directional.setRotation(BlockFace.EAST_NORTH_EAST); - break; - case WEST: - directional.setRotation(BlockFace.EAST); - break; - case WEST_NORTH_WEST: - directional.setRotation(BlockFace.EAST_SOUTH_EAST); - break; - case NORTH_WEST: - directional.setRotation(BlockFace.SOUTH_EAST); - break; - case NORTH_NORTH_WEST: - directional.setRotation(BlockFace.SOUTH_SOUTH_EAST); - break; - } - if (this.blockd == null) - this.blockd = directional; - } - - if (!cmat.isWall() && !cmat.isGlassPane() && !cmat.isFence() && !cmat.equals(CMIMaterial.IRON_BARS)) { - if (this.blockd == null) - this.blockd = blockData.clone(); - } - - return this; - - } - - int flipX = 0; - int flipY = 0; - int flipZ = 0; - - Material type = block.getType(); - this.data = this.data == null ? block.getData() : this.data; - - CMIMaterial cmat = CMIMaterial.get(block); - - try { - switch (direction) { - case NORTH_SOUTH: - flipZ = 1; - break; - - case WEST_EAST: - flipX = 1; - break; - - case UP_DOWN: - flipY = 1; - break; - } - - if (cmat.isButton()) { - switch (data & ~0x8) { - case 1: - this.data = data + flipX; - break; - case 2: - this.data = data - flipX; - break; - case 3: - this.data = data + flipZ; - break; - case 4: - this.data = data - flipZ; - break; - case 0: - case 5: - this.data = data ^ (flipY * 5); - break; - } - } else if (cmat.isSlab()) { - this.data = data ^ (flipY << 3); - } else if (cmat.isDoor()) { - // Only bottom part - if ((data & 0x8) == 0) { - switch (data & 0x3) { - case 0: - this.data = data + flipX + flipZ * 3; - break; - case 1: - this.data = data - flipX + flipZ; - break; - case 2: - this.data = data + flipX - flipZ; - break; - case 3: - this.data = data - flipX - flipZ * 3; - break; - } - } - } else if (cmat.isTrapDoor()) { - switch (data & 0x3) { - case 0: - case 1: - this.data = data ^ flipZ; - break; - case 2: - case 3: - this.data = data ^ flipX; - break; - } - } else if (cmat.isBed()) { - switch (data & 0x3) { - case 0: - case 2: - this.data = data ^ flipZ << 1; - break; - case 1: - case 3: - this.data = data ^ flipX << 1; - break; - } - } else if (cmat.isSign()) { - switch (direction) { - case NORTH_SOUTH: - this.data = (16 - data) & 0xf; - break; - case WEST_EAST: - this.data = (8 - data) & 0xf; - break; - default: - } - } - - switch (CMIMaterial.get(block)) { - case TORCH: - case REDSTONE_TORCH: -// case UNLIT_REDSTONE_TORCH: - if (data < 1 || data > 4) - break; - switch (data) { - case 1: - this.data = data + flipX; - break; - case 2: - this.data = data - flipX; - break; - case 3: - this.data = data + flipZ; - break; - case 4: - this.data = data - flipZ; - break; - } - break; - - case LEVER: - switch (data & ~0x8) { - case 1: - this.data = data + flipX; - break; - case 2: - this.data = data - flipX; - break; - case 3: - this.data = data + flipZ; - break; - case 4: - this.data = data - flipZ; - break; - case 5: - case 7: - this.data = data ^ flipY << 1; - break; - case 6: - case 0: - this.data = data ^ flipY * 6; - break; - } - break; - case RAIL: - switch (data) { - case 6: - this.data = data + flipX + flipZ * 3; - break; - case 7: - this.data = data - flipX + flipZ; - break; - case 8: - this.data = data + flipX - flipZ; - break; - case 9: - this.data = data - flipX - flipZ * 3; - break; - } - - case POWERED_RAIL: - case DETECTOR_RAIL: - case ACTIVATOR_RAIL: - switch (data & 0x7) { - case 0: - case 1: - this.data = data; - break; - case 2: - case 3: - this.data = data ^ flipX; - break; - case 4: - case 5: - this.data = data ^ flipZ; - break; - } - break; - - case LADDER: - case WALL_SIGN: - case CHEST: - case FURNACE: - case LEGACY_BURNING_FURNACE: - case ENDER_CHEST: - case TRAPPED_CHEST: - case HOPPER: - int extra = data & 0x8; - int withoutFlags = data & ~0x8; - switch (withoutFlags) { - case 2: - case 3: - this.data = (data ^ flipZ) | extra; - break; - case 4: - case 5: - this.data = (data ^ flipX) | extra; - break; - } - break; - - case DROPPER: - case DISPENSER: - int dispPower = data & 0x8; - switch (data & ~0x8) { - case 2: - case 3: - this.data = (data ^ flipZ) | dispPower; - break; - case 4: - case 5: - this.data = (data ^ flipX) | dispPower; - break; - case 0: - case 1: - this.data = (data ^ flipY) | dispPower; - break; - } - break; - - case PUMPKIN: - case JACK_O_LANTERN: - if (data > 3) - break; - case REPEATER: - case LEGACY_DIODE_BLOCK_OFF: - case LEGACY_DIODE_BLOCK_ON: - case LEGACY_REDSTONE_COMPARATOR_OFF: - case LEGACY_REDSTONE_COMPARATOR_ON: - case COMPARATOR: - case COCOA: - case TRIPWIRE_HOOK: - switch (data & 0x3) { - case 0: - case 2: - this.data = data ^ (flipZ << 1); - break; - case 1: - case 3: - this.data = data ^ (flipX << 1); - break; - } - break; - case PISTON_HEAD: - case STICKY_PISTON: - case MOVING_PISTON: - switch (data & ~0x8) { - case 0: - case 1: - this.data = data ^ flipY; - break; - case 2: - case 3: - this.data = data ^ flipZ; - break; - case 4: - case 5: - this.data = data ^ flipX; - break; - } - break; - - case RED_MUSHROOM: - case BROWN_MUSHROOM: - switch (data) { - case 1: - case 4: - case 7: - data += flipX * 2; - break; - case 3: - case 6: - case 9: - data -= flipX * 2; - break; - } - switch (data) { - case 1: - case 2: - case 3: - this.data = data + flipZ * 6; - break; - case 7: - case 8: - case 9: - this.data = data - flipZ * 6; - break; - } - break; - - case VINE: - int bit1 = 0, bit2 = 0; - switch (direction) { - case NORTH_SOUTH: - bit1 = 0x2; - bit2 = 0x8; - break; - case WEST_EAST: - bit1 = 0x1; - bit2 = 0x4; - break; - default: - this.data = data; - break; - } - int newData = data & ~(bit1 | bit2); - if ((data & bit1) != 0) - newData |= bit2; - if ((data & bit2) != 0) - newData |= bit1; - this.data = newData; - break; - - case LEGACY_SKULL: - switch (data) { - case 2: - case 3: - this.data = data ^ flipZ; - break; - case 4: - case 5: - this.data = data ^ flipX; - break; - } - break; - - case ANVIL: - switch (data & 0x3) { - case 0: - case 2: - this.data = data ^ flipZ << 1; - break; - case 1: - case 3: - this.data = data ^ flipX << 1; - break; - } - } - - if (cmat.isFence()) { - switch (data & 0x3) { - case 0: - case 2: - this.data = data ^ flipZ << 1; - break; - case 1: - case 3: - this.data = data ^ flipX << 1; - break; - } - } else if (cmat.isStairs()) { - - data ^= flipY << 2; - switch (data) { - case 0: - case 1: - case 4: - case 5: - this.data = data ^ flipX; - break; - case 2: - case 3: - case 6: - case 7: - this.data = data ^ flipZ; - break; - } - } - - if (type.name().contains("TERRACOTTA")) { - switch (data & 0x3) { - case 0: - case 2: - this.data = data ^ flipZ << 1; - break; - case 1: - case 3: - this.data = data ^ flipX << 1; - break; - } - } - - } catch (Exception e) { - this.data = data; - } - return this; - } - - public CMIBlock rotate90Reverse() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - - CMIMaterial cmat = CMIMaterial.get(this.block); - org.bukkit.block.data.BlockData blockData = block.getBlockData(); - - if (blockData instanceof org.bukkit.block.data.Directional) { - org.bukkit.block.data.Directional directional = blockd == null ? (org.bukkit.block.data.Directional) blockData.clone() - : (org.bukkit.block.data.Directional) blockd; - org.bukkit.block.BlockFace face = directional.getFacing(); - - switch (directional.getFacing()) { - case NORTH: - directional.setFacing(BlockFace.WEST); - break; - case EAST: - directional.setFacing(BlockFace.NORTH); - break; - case SOUTH: - directional.setFacing(BlockFace.EAST); - break; - case WEST: - directional.setFacing(BlockFace.SOUTH); - break; - - } - - if (this.blockd == null) - this.blockd = directional.clone(); - - } - - if (blockData instanceof org.bukkit.block.data.Rotatable) { - - org.bukkit.block.data.Rotatable directional = blockd == null ? (org.bukkit.block.data.Rotatable) blockData.clone() - : (org.bukkit.block.data.Rotatable) blockd; - - org.bukkit.block.BlockFace face = directional.getRotation(); - - switch (face) { - case NORTH: - directional.setRotation(BlockFace.WEST); - break; - case NORTH_NORTH_EAST: - directional.setRotation(BlockFace.WEST_NORTH_WEST); - break; - case NORTH_EAST: - directional.setRotation(BlockFace.NORTH_WEST); - break; - case EAST_NORTH_EAST: - directional.setRotation(BlockFace.NORTH_NORTH_WEST); - break; - case EAST: - directional.setRotation(BlockFace.NORTH); - break; - case EAST_SOUTH_EAST: - directional.setRotation(BlockFace.NORTH_NORTH_EAST); - break; - case SOUTH_EAST: - directional.setRotation(BlockFace.NORTH_EAST); - break; - case SOUTH_SOUTH_EAST: - directional.setRotation(BlockFace.EAST_NORTH_EAST); - break; - case SOUTH: - directional.setRotation(BlockFace.EAST); - break; - case SOUTH_SOUTH_WEST: - directional.setRotation(BlockFace.EAST_SOUTH_EAST); - break; - case SOUTH_WEST: - directional.setRotation(BlockFace.SOUTH_EAST); - break; - case WEST_SOUTH_WEST: - directional.setRotation(BlockFace.SOUTH_SOUTH_EAST); - break; - case WEST: - directional.setRotation(BlockFace.SOUTH); - break; - case WEST_NORTH_WEST: - directional.setRotation(BlockFace.SOUTH_SOUTH_WEST); - break; - case NORTH_WEST: - directional.setRotation(BlockFace.SOUTH_WEST); - break; - case NORTH_NORTH_WEST: - directional.setRotation(BlockFace.WEST_SOUTH_WEST); - break; - } - if (this.blockd == null) - this.blockd = directional; - return this; - - } else { - if (this.blockd == null) - this.blockd = blockData.clone(); - return this; - } - } - - Material type = block.getType(); - this.data = this.data == null ? block.getData() : this.data; - - CMIMaterial cmat = CMIMaterial.get(block); - - try { - - switch (cmat) { - case TORCH: - case LEGACY_REDSTONE_TORCH_OFF: - case LEGACY_REDSTONE_TORCH_ON: - switch (data) { - case 1: - this.data = 3; - break; - case 2: - this.data = 4; - break; - case 3: - this.data = 2; - break; - case 4: - this.data = 1; - break; - } - case RAIL: - switch (data) { - case 6: - this.data = 7; - break; - case 7: - this.data = 8; - break; - case 8: - this.data = 9; - break; - case 9: - this.data = 6; - break; - } - case POWERED_RAIL: - case DETECTOR_RAIL: - case ACTIVATOR_RAIL: - switch (data & 0x7) { - case 0: - this.data = 1 | (data & ~0x7); - break; - case 1: - this.data = 0 | (data & ~0x7); - break; - case 2: - this.data = 5 | (data & ~0x7); - break; - case 3: - this.data = 4 | (data & ~0x7); - break; - case 4: - this.data = 2 | (data & ~0x7); - break; - case 5: - this.data = 3 | (data & ~0x7); - break; - } - break; - - case STONE_BUTTON: - case OAK_BUTTON: { - int thrown = data & 0x8; - switch (data & ~0x8) { - case 1: - this.data = 3 | thrown; - break; - case 2: - this.data = 4 | thrown; - break; - case 3: - this.data = 2 | thrown; - break; - case 4: - this.data = 1 | thrown; - break; - // 0 and 5 are vertical - } - break; - } - - case LEVER: { - int thrown = data & 0x8; - switch (data & ~0x8) { - case 1: - this.data = 3 | thrown; - break; - case 2: - this.data = 4 | thrown; - break; - case 3: - this.data = 2 | thrown; - break; - case 4: - this.data = 1 | thrown; - break; - case 5: - this.data = 6 | thrown; - break; - case 6: - this.data = 5 | thrown; - break; - case 7: - this.data = 0 | thrown; - break; - case 0: - this.data = 7 | thrown; - break; - } - break; - } - - case OAK_DOOR: - case IRON_DOOR: - if ((data & 0x8) != 0) { - // door top halves contain no orientation information - break; - } - - /* FALL-THROUGH */ - - case COCOA: - case TRIPWIRE_HOOK: { - int extra = data & ~0x3; - int withoutFlags = data & 0x3; - switch (withoutFlags) { - case 0: - this.data = 1 | extra; - break; - case 1: - this.data = 2 | extra; - break; - case 2: - this.data = 3 | extra; - break; - case 3: - this.data = 0 | extra; - break; - } - break; - } - case LEGACY_SIGN_POST: - this.data = (data + 4) % 16; - break; - - case LADDER: - case WALL_SIGN: - case CHEST: - case FURNACE: - case LEGACY_BURNING_FURNACE: - case ENDER_CHEST: - case TRAPPED_CHEST: - case HOPPER: { - int extra = data & 0x8; - int withoutFlags = data & ~0x8; - switch (withoutFlags) { - case 2: - this.data = 5 | extra; - break; - case 3: - this.data = 4 | extra; - break; - case 4: - this.data = 2 | extra; - break; - case 5: - this.data = 3 | extra; - break; - } - break; - } - case DISPENSER: - case DROPPER: - int dispPower = data & 0x8; - switch (data & ~0x8) { - case 2: - this.data = 5 | dispPower; - break; - case 3: - this.data = 4 | dispPower; - break; - case 4: - this.data = 2 | dispPower; - break; - case 5: - this.data = 3 | dispPower; - break; - } - break; - - case PUMPKIN: - case JACK_O_LANTERN: - switch (data) { - case 0: - this.data = 1; - break; - case 1: - this.data = 2; - break; - case 2: - this.data = 3; - break; - case 3: - this.data = 0; - break; - } - break; - - case HAY_BLOCK: - case OAK_LOG: - case BIRCH_LOG: - case SPRUCE_LOG: - case JUNGLE_LOG: - if (data >= 4 && data <= 11) - data ^= 0xc; - break; - - case LEGACY_DIODE_BLOCK_OFF: - case LEGACY_DIODE_BLOCK_ON: - case LEGACY_REDSTONE_COMPARATOR_OFF: - case LEGACY_REDSTONE_COMPARATOR_ON: - int dir = data & 0x03; - int delay = data - dir; - switch (dir) { - case 0: - this.data = 1 | delay; - break; - case 1: - this.data = 2 | delay; - break; - case 2: - this.data = 3 | delay; - break; - case 3: - this.data = 0 | delay; - break; - } - break; - case OAK_TRAPDOOR: - case IRON_TRAPDOOR: - int withoutOrientation = data & ~0x3; - int orientation = data & 0x3; - switch (orientation) { - case 0: - this.data = 3 | withoutOrientation; - break; - case 1: - this.data = 2 | withoutOrientation; - break; - case 2: - this.data = 0 | withoutOrientation; - break; - case 3: - this.data = 1 | withoutOrientation; - break; - } - break; - - case PISTON_HEAD: - case STICKY_PISTON: - case MOVING_PISTON: - final int rest = data & ~0x7; - switch (data & 0x7) { - case 2: - this.data = 5 | rest; - break; - case 3: - this.data = 4 | rest; - break; - case 4: - this.data = 2 | rest; - break; - case 5: - this.data = 3 | rest; - break; - } - break; - - case RED_MUSHROOM: - case BROWN_MUSHROOM: - if (data >= 10) { - this.data = data; - break; - } - this.data = (data * 3) % 10; - break; - - case VINE: - this.data = ((data << 1) | (data >> 3)) & 0xf; - break; - case ANVIL: - int damage = data & ~0x3; - switch (data & 0x3) { - case 0: - this.data = 3 | damage; - break; - case 2: - this.data = 1 | damage; - break; - case 1: - this.data = 0 | damage; - break; - case 3: - this.data = 2 | damage; - break; - } - break; - case LEGACY_SKULL: - switch (data) { - case 2: - this.data = 5; - break; - case 3: - this.data = 4; - break; - case 4: - this.data = 2; - break; - case 5: - this.data = 3; - break; - } - } - - if (cmat.isBed()) { - this.data = data & ~0x3 | (data + 1) & 0x3; - } else if (cmat.isGate()) { - this.data = ((data + 1) & 0x3) | (data & ~0x3); - } else if (cmat.isStairs()) { - switch (data) { - case 0: - this.data = 2; - break; - case 1: - this.data = 3; - break; - case 2: - this.data = 1; - break; - case 3: - this.data = 0; - break; - case 4: - this.data = 6; - break; - case 5: - this.data = 7; - break; - case 6: - this.data = 5; - break; - case 7: - this.data = 4; - break; - } - } - - if (type.name().contains("TERRACOTTA")) { - int extra = data & ~0x3; - int withoutFlags = data & 0x3; - switch (withoutFlags) { - case 0: - this.data = 1 | extra; - break; - case 1: - this.data = 2 | extra; - break; - case 2: - this.data = 3 | extra; - break; - case 3: - this.data = 0 | extra; - break; - } - - } - - } catch (Exception e) { - this.data = data; - } - return this; - - } - - public CMIBlock rotate90() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - - CMIMaterial cmat = CMIMaterial.get(this.block); - org.bukkit.block.data.BlockData blockData = block.getBlockData().clone(); - - if (blockData instanceof org.bukkit.block.data.Directional) { - - org.bukkit.block.data.Directional directional = blockd == null ? (org.bukkit.block.data.Directional) ((org.bukkit.block.data.Directional) blockData).clone() - : (org.bukkit.block.data.Directional) blockd; - -// if (cmat.isStairs()) { - - org.bukkit.block.BlockFace face = directional.getFacing(); - switch (face) { - case NORTH: - directional.setFacing(BlockFace.EAST); - break; - case EAST: - directional.setFacing(BlockFace.SOUTH); - break; - case SOUTH: - directional.setFacing(BlockFace.WEST); - break; - case WEST: - directional.setFacing(BlockFace.NORTH); - break; - } - if (this.blockd == null) - this.blockd = directional.clone(); - return this; - - } - - if (blockData instanceof org.bukkit.block.data.Rotatable) { - - org.bukkit.block.data.Rotatable directional = blockd == null ? (org.bukkit.block.data.Rotatable) blockData.clone() - : (org.bukkit.block.data.Rotatable) blockd; - - org.bukkit.block.BlockFace face = directional.getRotation(); - - switch (face) { - case NORTH: - directional.setRotation(BlockFace.EAST); - break; - case NORTH_NORTH_EAST: - directional.setRotation(BlockFace.EAST_SOUTH_EAST); - break; - case NORTH_EAST: - directional.setRotation(BlockFace.SOUTH_EAST); - break; - case EAST_NORTH_EAST: - directional.setRotation(BlockFace.SOUTH_SOUTH_EAST); - break; - case EAST: - directional.setRotation(BlockFace.SOUTH); - break; - case EAST_SOUTH_EAST: - directional.setRotation(BlockFace.SOUTH_SOUTH_WEST); - break; - case SOUTH_EAST: - directional.setRotation(BlockFace.SOUTH_WEST); - break; - case SOUTH_SOUTH_EAST: - directional.setRotation(BlockFace.WEST_SOUTH_WEST); - break; - case SOUTH: - directional.setRotation(BlockFace.WEST); - break; - case SOUTH_SOUTH_WEST: - directional.setRotation(BlockFace.WEST_NORTH_WEST); - break; - case SOUTH_WEST: - directional.setRotation(BlockFace.NORTH_WEST); - break; - case WEST_SOUTH_WEST: - directional.setRotation(BlockFace.NORTH_NORTH_WEST); - break; - case WEST: - directional.setRotation(BlockFace.NORTH); - break; - case WEST_NORTH_WEST: - directional.setRotation(BlockFace.NORTH_NORTH_EAST); - break; - case NORTH_WEST: - directional.setRotation(BlockFace.NORTH_EAST); - break; - case NORTH_NORTH_WEST: - directional.setRotation(BlockFace.EAST_NORTH_EAST); - break; - } - - if (this.blockd == null) - this.blockd = directional; - } else { - if (this.blockd == null) - this.blockd = blockData.clone(); - return this; - } - } - - Material type = block.getType(); - this.data = this.data == null ? block.getData() : this.data; - - CMIMaterial cmat = CMIMaterial.get(block); - - try { - switch (cmat) { - case TORCH: - case LEGACY_REDSTONE_TORCH_OFF: - case LEGACY_REDSTONE_TORCH_ON: - switch (data) { - case 3: - this.data = 1; - break; - case 4: - this.data = 2; - break; - case 2: - this.data = 3; - break; - case 1: - this.data = 4; - break; - } - break; - - case RAIL: - switch (data) { - case 7: - this.data = 6; - break; - case 8: - this.data = 7; - break; - case 9: - this.data = 8; - break; - case 6: - this.data = 9; - break; - } - case POWERED_RAIL: - case DETECTOR_RAIL: - case ACTIVATOR_RAIL: - int power = data & ~0x7; - switch (data & 0x7) { - case 1: - this.data = 0 | power; - break; - case 0: - this.data = 1 | power; - break; - case 5: - this.data = 2 | power; - break; - case 4: - this.data = 3 | power; - break; - case 2: - this.data = 4 | power; - break; - case 3: - this.data = 5 | power; - break; - } - break; - - case STONE_BUTTON: - case OAK_BUTTON: { - int thrown = data & 0x8; - switch (data & ~0x8) { - case 3: - this.data = 1 | thrown; - break; - case 4: - this.data = 2 | thrown; - break; - case 2: - this.data = 3 | thrown; - break; - case 1: - this.data = 4 | thrown; - break; - } - break; - } - - case LEVER: { - int thrown = data & 0x8; - switch (data & ~0x8) { - case 3: - this.data = 1 | thrown; - break; - case 4: - this.data = 2 | thrown; - break; - case 2: - this.data = 3 | thrown; - break; - case 1: - this.data = 4 | thrown; - break; - case 6: - this.data = 5 | thrown; - break; - case 5: - this.data = 6 | thrown; - break; - case 0: - this.data = 7 | thrown; - break; - case 7: - this.data = 0 | thrown; - break; - } - break; - } - - case OAK_DOOR: - case IRON_DOOR: - if ((data & 0x8) != 0) { - break; - } - case COCOA: - case TRIPWIRE_HOOK: { - int extra = data & ~0x3; - int withoutFlags = data & 0x3; - switch (withoutFlags) { - case 1: - this.data = 0 | extra; - break; - case 2: - this.data = 1 | extra; - break; - case 3: - this.data = 2 | extra; - break; - case 0: - this.data = 3 | extra; - break; - } - break; - } - case SIGN: - this.data = (data + 12) % 16; - - break; - case LADDER: - case WALL_SIGN: - case CHEST: - case FURNACE: - case LEGACY_BURNING_FURNACE: - case ENDER_CHEST: - case TRAPPED_CHEST: - case HOPPER: { - int extra = data & 0x8; - int withoutFlags = data & ~0x8; - switch (withoutFlags) { - case 5: - this.data = 2 | extra; - break; - case 4: - this.data = 3 | extra; - break; - case 2: - this.data = 4 | extra; - break; - case 3: - this.data = 5 | extra; - break; - } - break; - } - case DISPENSER: - case DROPPER: - int dispPower = data & 0x8; - switch (data & ~0x8) { - case 5: - this.data = 2 | dispPower; - break; - case 4: - this.data = 3 | dispPower; - break; - case 2: - this.data = 4 | dispPower; - break; - case 3: - this.data = 5 | dispPower; - break; - } - break; - case PUMPKIN: - case JACK_O_LANTERN: - switch (data) { - case 1: - this.data = 0; - break; - case 2: - this.data = 1; - break; - case 3: - this.data = 2; - break; - case 0: - this.data = 3; - break; - } - break; - - case HAY_BLOCK: - case OAK_LOG: - case BIRCH_LOG: - case SPRUCE_LOG: - case JUNGLE_LOG: - if (data >= 4 && data <= 11) - data ^= 0xc; - break; - - case LEGACY_DIODE_BLOCK_OFF: - case LEGACY_DIODE_BLOCK_ON: - case LEGACY_REDSTONE_COMPARATOR_OFF: - case LEGACY_REDSTONE_COMPARATOR_ON: - int dir = data & 0x03; - int delay = data - dir; - switch (dir) { - case 1: - this.data = 0 | delay; - break; - case 2: - this.data = 1 | delay; - break; - case 3: - this.data = 2 | delay; - break; - case 0: - this.data = 3 | delay; - break; - } - break; - - case OAK_TRAPDOOR: - case IRON_TRAPDOOR: - int withoutOrientation = data & ~0x3; - int orientation = data & 0x3; - switch (orientation) { - case 3: - this.data = 0 | withoutOrientation; - break; - case 2: - this.data = 1 | withoutOrientation; - break; - case 0: - this.data = 2 | withoutOrientation; - break; - case 1: - this.data = 3 | withoutOrientation; - break; - } - - case PISTON_HEAD: - case STICKY_PISTON: - case MOVING_PISTON: - final int rest = data & ~0x7; - switch (data & 0x7) { - case 5: - this.data = 2 | rest; - break; - case 4: - this.data = 3 | rest; - break; - case 2: - this.data = 4 | rest; - break; - case 3: - this.data = 5 | rest; - break; - } - break; - case RED_MUSHROOM: - case BROWN_MUSHROOM: - if (data >= 10) { - this.data = data; - break; - } - this.data = (data * 7) % 10; - case VINE: - this.data = ((data >> 1) | (data << 3)) & 0xf; - break; - case ANVIL: - int damage = data & ~0x3; - switch (data & 0x3) { - case 0: - this.data = 1 | damage; - break; - case 2: - this.data = 3 | damage; - break; - case 1: - this.data = 2 | damage; - break; - case 3: - this.data = 0 | damage; - break; - } - break; - case LEGACY_SKULL: - switch (data) { - case 2: - this.data = 4; - break; - case 3: - this.data = 5; - break; - case 4: - this.data = 3; - break; - case 5: - this.data = 2; - break; - } - } - - if (cmat.isBed()) { - this.data = data & ~0x3 | (data - 1) & 0x3; - } else if (cmat.isGate()) { - this.data = ((data + 3) & 0x3) | (data & ~0x3); - } else if (cmat.isStairs()) { - switch (data) { - case 2: - this.data = 0; - break; - case 3: - this.data = 1; - break; - case 1: - this.data = 2; - break; - case 0: - this.data = 3; - break; - case 6: - this.data = 4; - break; - case 7: - this.data = 5; - break; - case 5: - this.data = 6; - break; - case 4: - this.data = 7; - break; - } - } - - if (type.name().contains("TERRACOTTA")) { - int extra = data & ~0x3; - int withoutFlags = data & 0x3; - switch (withoutFlags) { - case 1: - this.data = 0 | extra; - break; - case 2: - this.data = 1 | extra; - break; - case 3: - this.data = 2 | extra; - break; - case 0: - this.data = 3 | extra; - break; - } - } - } catch (Exception e) { - this.data = data; - } - return this; - } - - public Object getData() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - return this.blockd == null ? this.block.getBlockData().clone() : this.blockd; - } - if (data == null) - return this.block.getData(); - return data.byteValue(); - } - - public CMIBlock setData(Object data) { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - if (data != null) { - org.bukkit.block.data.BlockData blockData = (org.bukkit.block.data.BlockData) data; - this.blockd = blockData.clone(); - } else - this.blockd = data; - } else { - try { - this.data = (int) data; - } catch (ClassCastException e) { - - } - } - return this; - } - - public boolean hasInventory() { - return block.getState() instanceof InventoryHolder; - } - - public Inventory getInventory() { - if (block.getState() instanceof InventoryHolder) { - InventoryHolder holder = (InventoryHolder) block.getState(); - return holder.getInventory(); - } - return null; - } - - public Block getSecondaryBedBlock() { - - if (block == null || !CMIMaterial.isBed(block.getType())) - return null; - - BlockFace facing = getFacing(); - BedPart part = getBedPart(); - - if (facing == null || part == null) - return null; - - Location loc = block.getLocation().clone(); - - switch (facing) { - case WEST: - switch (part) { - case FOOT: - return loc.add(-1, 0, 0).getBlock(); - case HEAD: - return loc.add(1, 0, 0).getBlock(); - } - break; - case EAST: - switch (part) { - case FOOT: - return loc.add(1, 0, 0).getBlock(); - case HEAD: - return loc.add(-1, 0, 0).getBlock(); - } - break; - case NORTH: - switch (part) { - case FOOT: - return loc.add(0, 0, -1).getBlock(); - case HEAD: - return loc.add(0, 0, 1).getBlock(); - } - break; - case SOUTH: - switch (part) { - case FOOT: - return loc.add(0, 0, 1).getBlock(); - case HEAD: - return loc.add(0, 0, -1).getBlock(); - } - break; - } - - return null; - } - - public Block getBedFootBlock() { - - if (block == null || !CMIMaterial.isBed(block.getType())) - return null; - - Block sec = getSecondaryBedBlock(); - - Location loc = this.block.getLocation(); - if (getBedPart() != null) - if (getBedPart() == BedPart.FOOT) { - return block; - } else if (sec != null) { - CMIBlock cbs = new CMIBlock(sec); - if (cbs.getBedPart() != null && cbs.getBedPart() == BedPart.FOOT) { - return sec; - } - } - - return null; - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java b/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java deleted file mode 100644 index 65a2e67ac..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMIChatColor.java +++ /dev/null @@ -1,656 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Random; -import java.util.TreeMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Color; - -public class CMIChatColor { - - private static final Map BY_CHAR = new HashMap<>(); - private static final Map BY_NAME = new HashMap<>(); - private static final LinkedHashMap CUSTOM_BY_NAME = new LinkedHashMap<>(); - private static final Map CUSTOM_BY_HEX = new HashMap<>(); - private static final TreeMap CUSTOM_BY_RGB = new TreeMap<>(); - - static { - for (CMICustomColors one : CMICustomColors.values()) { - CUSTOM_BY_NAME.put(one.name().toLowerCase().replace("_", ""), new CMIChatColor(one.toString(), one.getHex())); - CUSTOM_BY_HEX.put(one.getHex().toLowerCase(), new CMIChatColor(one.toString(), one.getHex())); - if (one.getExtra() != null) { - for (String extra : one.getExtra()) { - CUSTOM_BY_NAME.put(extra.toLowerCase().replace("_", ""), new CMIChatColor(extra.replace(" ", "_"), one.getHex())); - } - } - } - for (float x = 0.0F; x <= 1; x += 0.1) { - for (float z = 0.1F; z <= 1; z += 0.1) { - for (float y = 0; y <= 1; y += 0.03) { - java.awt.Color color = java.awt.Color.getHSBColor(y, x, z); - String hex = Integer.toHexString((color.getRed() << 16) + (color.getGreen() << 8) + color.getBlue() & 0xffffff); - while (hex.length() < 6) { - hex = "0" + hex; - } - CMIChatColor.getClosest(hex); - } - } - } - } - - public final static String colorReplacerPlaceholder = "\uFF06"; - - public static final String colorCodePrefix = "{#"; - public static final String colorCodeSuffix = "}"; - - private static String charEscape(String s) { - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < s.length(); i++) { - char ch = s.charAt(i); - - switch (ch) { - case '"': - sb.append("\\\""); - break; - case '\n': - sb.append("\\n"); - break; - case '\\': - sb.append("\\\\"); - break; - case '\b': - sb.append("\\b"); - break; - case '\f': - sb.append("\\f"); - break; - case '\r': - sb.append("\\r"); - break; - case '\t': - sb.append("\\t"); - break; - case '/': - sb.append("/"); - break; - default: - if ((ch >= '\u0000' && ch <= '\u001F') || (ch >= '\u007F' && ch <= '\u009F') || (ch >= '\u2000' && ch <= '\u20FF')) { - String ss = Integer.toHexString(ch); - sb.append("\\u"); - for (int k = 0; k < 4 - ss.length(); k++) { - sb.append('0'); - } - sb.append(ss.toUpperCase()); - } else { - sb.append(ch); - } - } - } - return sb.toString(); - } - - private static String escape(String text) { - return text.replace("#", "\\#").replace("{", "\\{").replace("}", "\\}"); - } - - public static final String hexColorRegex = "(\\" + colorCodePrefix + ")([0-9A-Fa-f]{6}|[0-9A-Fa-f]{3})(\\" + colorCodeSuffix + ")"; - public static final Pattern hexColorRegexPattern = Pattern.compile(CMIChatColor.hexColorRegex); - public static final Pattern hexColorRegexPatternLast = Pattern.compile(CMIChatColor.hexColorRegex + "(?!.*\\{#)"); - public static final Pattern hexDeColorNamePattern = Pattern.compile("(&x)((&[0-9A-Fa-f]){6})"); - public static final String ColorNameRegex = "(\\" + colorCodePrefix + ")([a-zA-Z_]{3,})(\\" + colorCodeSuffix + ")"; - public static final Pattern hexColorNamePattern = Pattern.compile(CMIChatColor.ColorNameRegex); - public static final Pattern hexColorNamePatternLast = Pattern.compile(ColorNameRegex + "(?!.*\\{#)"); - - public static final Pattern gradientPattern = Pattern.compile("(\\{(#[^\\{]*?)>\\})(.*?)(\\{(#.*?)<(>?)\\})"); - - public static final String hexColorDecolRegex = "(&x)(&[0-9A-Fa-f]){6}"; - - public static final Pattern postGradientPattern = Pattern.compile("(" + CMIChatColor.hexColorRegex + "|" + CMIChatColor.ColorNameRegex + ")" + "(.)" + "(" + CMIChatColor.hexColorRegex + "|" - + CMIChatColor.ColorNameRegex + ")"); - public static final Pattern fullPattern = Pattern.compile("(&[0123456789abcdefklmnorABCDEFKLMNOR])|" + CMIChatColor.hexColorRegex + "|" + CMIChatColor.ColorNameRegex); - - public static final CMIChatColor BLACK = new CMIChatColor("Black", '0', 0, 0, 0); - public static final CMIChatColor DARK_BLUE = new CMIChatColor("Dark_Blue", '1', 0, 0, 170); - public static final CMIChatColor DARK_GREEN = new CMIChatColor("Dark_Green", '2', 0, 170, 0); - public static final CMIChatColor DARK_AQUA = new CMIChatColor("Dark_Aqua", '3', 0, 170, 170); - public static final CMIChatColor DARK_RED = new CMIChatColor("Dark_Red", '4', 170, 0, 0); - public static final CMIChatColor DARK_PURPLE = new CMIChatColor("Dark_Purple", '5', 170, 0, 170); - public static final CMIChatColor GOLD = new CMIChatColor("Gold", '6', 255, 170, 0); - public static final CMIChatColor GRAY = new CMIChatColor("Gray", '7', 170, 170, 170); - public static final CMIChatColor DARK_GRAY = new CMIChatColor("Dark_Gray", '8', 85, 85, 85); - public static final CMIChatColor BLUE = new CMIChatColor("Blue", '9', 85, 85, 255); - public static final CMIChatColor GREEN = new CMIChatColor("Green", 'a', 85, 255, 85); - public static final CMIChatColor AQUA = new CMIChatColor("Aqua", 'b', 85, 255, 255); - public static final CMIChatColor RED = new CMIChatColor("Red", 'c', 255, 85, 85); - public static final CMIChatColor LIGHT_PURPLE = new CMIChatColor("Light_Purple", 'd', 255, 85, 255); - public static final CMIChatColor YELLOW = new CMIChatColor("Yellow", 'e', 255, 255, 85); - public static final CMIChatColor WHITE = new CMIChatColor("White", 'f', 255, 255, 255); - public static final CMIChatColor OBFUSCATED = new CMIChatColor("Obfuscated", 'k', false); - public static final CMIChatColor BOLD = new CMIChatColor("Bold", 'l', false); - public static final CMIChatColor STRIKETHROUGH = new CMIChatColor("Strikethrough", 'm', false); - public static final CMIChatColor UNDERLINE = new CMIChatColor("Underline", 'n', false); - public static final CMIChatColor ITALIC = new CMIChatColor("Italic", 'o', false); - public static final CMIChatColor RESET = new CMIChatColor("Reset", 'r', false, true); - public static final CMIChatColor HEX = new CMIChatColor("Hex", 'x', false, false); - - private char c; - private boolean color = true; - private boolean reset = false; - private Pattern pattern = null; - private int red; - private int green; - private int blue; - private String hex = null; - private String name; - - public CMIChatColor(String name, char c, int red, int green, int blue) { - this(name, c, true, false, red, green, blue); - } - - public CMIChatColor(String hex) { - this(null, hex); - } - - public CMIChatColor(String name, String hex) { - if (hex.startsWith("#")) - hex = hex.substring(1); - this.hex = hex; - this.name = name; - - try { - red = Integer.valueOf(this.hex.substring(0, 2), 16); - green = Integer.valueOf(this.hex.substring(2, 4), 16); - blue = Integer.parseInt(this.hex.substring(4, 6), 16); - } catch (Throwable e) { - this.hex = null; - } - } - - public CMIChatColor(String name, char c, Boolean color) { - this(name, c, color, false); - } - - public CMIChatColor(String name, char c, Boolean color, Boolean reset) { - this(name, c, color, reset, -1, -1, -1); - } - - public CMIChatColor(String name, char c, Boolean color, Boolean reset, int red, int green, int blue) { - this.name = name; - this.c = c; - this.color = color; - this.reset = reset; - this.pattern = Pattern.compile("(?i)(&[" + c + "])"); - this.red = red; - this.green = green; - this.blue = blue; - - if (Version.isCurrentLower(Version.v1_16_R1) && name.equalsIgnoreCase("Hex")) - return; - BY_CHAR.put(Character.valueOf(c), this); - BY_NAME.put(this.getName().toLowerCase().replace("_", ""), this); - } - - public static String processGradient(String text) { - - Matcher gradientMatch = gradientPattern.matcher(text); - - while (gradientMatch.find()) { - String fullmatch = gradientMatch.group(); - CMIChatColor c1 = CMIChatColor.getColor(CMIChatColor.colorCodePrefix + gradientMatch.group(2).replace("#", "") + CMIChatColor.colorCodeSuffix); - CMIChatColor c2 = CMIChatColor.getColor(CMIChatColor.colorCodePrefix + gradientMatch.group(5).replace("#", "") + CMIChatColor.colorCodeSuffix); - - if (c1 == null || c2 == null) { - continue; - } - - String gtext = gradientMatch.group(3); - - boolean continuous = !gradientMatch.group(6).isEmpty(); - - String updated = ""; - - gtext = stripColor(gtext); - - for (int i = 0; i < gtext.length(); i++) { - char ch = gtext.charAt(i); - int length = gtext.length(); - length = length < 2 ? 2 : length; - - double percent = (i * 100D) / (length - 1); - - CMIChatColor mix = CMIChatColor.mixColors(c1, c2, percent); - updated += CMIChatColor.colorCodePrefix + mix.getHex() + CMIChatColor.colorCodeSuffix; - - updated += String.valueOf(ch); - } - - if (continuous) { - updated += CMIChatColor.colorCodePrefix + gradientMatch.group(5).replace("#", "") + ">" + CMIChatColor.colorCodeSuffix; - } - - text = text.replace(fullmatch, updated); - - if (continuous) { - text = processGradient(text); - } - } - - return text; - } - - public static String translate(String text) { - - if (text == null) - return null; - - text = processGradient(text); - - if (text.contains(colorCodePrefix)) { - - Matcher match = hexColorRegexPattern.matcher(text); - while (match.find()) { - String string = match.group(); - - StringBuilder magic = new StringBuilder("§x"); - for (char c : string.substring(2, string.length() - 1).toCharArray()) { - magic.append('§').append(c); - if (string.substring(2, string.length() - 1).length() == 3) - magic.append('§').append(c); - } - text = text.replace(string, magic.toString()); - } - - Matcher nameMatch = hexColorNamePattern.matcher(text); - while (nameMatch.find()) { - String string = nameMatch.group(2); - CMIChatColor cn = getByCustomName(string.toLowerCase().replace("_", "")); - if (cn == null) - continue; - String gex = cn.getHex(); - StringBuilder magic = new StringBuilder("§x"); - for (char c : gex.toCharArray()) { - magic.append('§').append(c); - } - text = text.replace(nameMatch.group(), magic.toString()); - } - } - - return ChatColor.translateAlternateColorCodes('&', text); - } - - public static String applyEqualGradient(String text, List gradients) { - if (gradients == null || gradients.isEmpty()) - return text; - int size = text.length() / gradients.size(); - StringBuilder messageWithGradient = new StringBuilder(); - messageWithGradient.append(gradients.get(0).getFormatedHex(">")); - for (int y = 0; y <= gradients.size() - 1; y++) { - if (y > 0 && size > 0) - messageWithGradient.append(gradients.get(y).getFormatedHex("<>")); - for (int i = 0; i < size; i++) { - messageWithGradient.append(text.charAt(0)); - text = text.substring(1); - } - } - messageWithGradient.append(text + gradients.get(gradients.size() - 1).getFormatedHex("<")); - return messageWithGradient.toString(); - } - - @Deprecated - public static String translateAlternateColorCodes(String text) { - return translate(text); - } - - public static String colorize(String text) { - if (text == null) - return null; - return translate(text); - } - - public static String deColorize(String text) { - if (text == null) - return null; - text = CMIChatColor.translate(text); - text = text.replace("§", "&"); - - if (text.contains("&x")) { - Matcher match = hexDeColorNamePattern.matcher(text); - while (match.find()) { - String reg = match.group(2).replace("&", ""); - CMIChatColor custom = CUSTOM_BY_HEX.get(reg.toLowerCase()); - if (custom != null) { - text = text.replace(match.group(), colorCodePrefix + custom.getName().toLowerCase().replace("_", "") + colorCodeSuffix); - } else { - text = text.replace(match.group(), colorCodePrefix + reg + colorCodeSuffix); - } - } - } - - return text; - } - - public static List deColorize(List lore) { - for (int i = 0; i < lore.size(); i++) { - lore.set(i, deColorize(lore.get(i))); - } - return lore; - } - - public static String stripColor(String text) { - if (text == null) - return null; - text = CMIChatColor.translate(text); - return ChatColor.stripColor(text); - } - - public static String getLastColors(String text) { - if (text == null) - return null; - - text = deColorize(text); - Matcher match = hexColorRegexPatternLast.matcher(text); - if (match.find()) { - String colorByHex = match.group(0); - if (text.endsWith(colorByHex)) - return colorByHex; - String[] split = text.split(escape(colorByHex), 2); - if (split == null) - return colorByHex; - String last = getLastColors(split[1]); - return last == null || last.isEmpty() ? colorByHex : last; - - } - - match = hexColorNamePatternLast.matcher(text); - if (match.find()) { - String colorByName = match.group(); - if (text.endsWith(colorByName)) - return colorByName; - String[] split = text.split(escape(colorByName), 2); - if (split == null) - return colorByName; - String last = getLastColors(split[1]); - return last == null || last.isEmpty() ? colorByName : last; - } - - return ChatColor.getLastColors(translate(text)); - } - - public String getColorCode() { - if (hex != null) - return colorCodePrefix + hex + colorCodeSuffix; - return "&" + c; - } - - public String getBukkitColorCode() { - if (hex != null) - return translate(colorCodePrefix + hex + colorCodeSuffix); - return "§" + c; - } - - @Override - public String toString() { - return getBukkitColorCode(); - } - - public char getChar() { - return c; - } - - public void setChar(char c) { - this.c = c; - } - - public boolean isColor() { - return color; - } - - public boolean isFormat() { - return !color && !reset; - } - - public boolean isReset() { - return reset; - } - - public ChatColor getColor() { - return ChatColor.getByChar(this.getChar()); - } - - public static CMIChatColor getColor(String text) { - - if (text == null) - return null; - - String or = deColorize(text); - - if (or.contains(colorCodePrefix)) { - Matcher match = hexColorRegexPatternLast.matcher(or); - if (match.find()) { - - return new CMIChatColor(match.group(2)); - } - match = hexColorNamePatternLast.matcher(or); - if (match.find()) { - return CMIChatColor.getByCustomName(match.group(2)); - } - } - - text = deColorize(text).replace("&", ""); - - if (text.length() > 1) { - String formated = text.toLowerCase().replace("_", ""); - CMIChatColor got = BY_NAME.get(formated); - if (got != null) - return got; - - got = CUSTOM_BY_NAME.get(formated); - if (got != null) - return got; - } - - if (or.length() > 1 && String.valueOf(or.charAt(or.length() - 2)).equalsIgnoreCase("&")) { - text = text.substring(text.length() - 1, text.length()); - - for (Entry one : BY_CHAR.entrySet()) { - if (String.valueOf(one.getKey()).equalsIgnoreCase(text)) { - return one.getValue(); - } - } - } - - return null; - } - - public static CMIChatColor getRandomColor() { - List ls = new ArrayList(); - for (Entry one : BY_NAME.entrySet()) { - if (!one.getValue().isColor()) - continue; - ls.add(one.getValue()); - } - Collections.shuffle(ls); - return ls.get(0); - } - - public Pattern getPattern() { - return pattern; - } - - public Color getRGBColor() { - if (blue < 0) - return null; - return Color.fromRGB(red, green, blue); - } - - public String getHex() { - return hex; - } - - public String getFormatedHex() { - return getFormatedHex(null); - } - - public String getFormatedHex(String subSuffix) { - return colorCodePrefix + hex + (subSuffix == null ? "" : subSuffix) + colorCodeSuffix; - } - - public String getName() { - return name; - } - - public String getCleanName() { - return name.replace("_", ""); - } - - public static CMIChatColor getByCustomName(String name) { - if (name.equalsIgnoreCase("random")) { - List valuesList = new ArrayList(CUSTOM_BY_NAME.values()); - int randomIndex = new Random().nextInt(valuesList.size()); - return valuesList.get(randomIndex); - } - - return CUSTOM_BY_NAME.get(name.toLowerCase().replace("_", "")); - } - - public static CMIChatColor getByHex(String hex) { - if (hex.startsWith(colorCodePrefix)) - hex = hex.substring(colorCodePrefix.length()); - if (hex.endsWith(colorCodeSuffix)) - hex = hex.substring(0, hex.length() - colorCodeSuffix.length()); - return CUSTOM_BY_HEX.get(hex.toLowerCase().replace("_", "")); - } - - public static Map getByName() { - return BY_NAME; - } - - public static Map getByCustomName() { - return CUSTOM_BY_NAME; - } - - public static String getHexFromCoord(int x, int y) { - x = x < 0 ? 0 : x > 255 ? 255 : x; - y = y < 0 ? 0 : y > 255 ? 255 : y; - - int blue = (int) (255 - y * 255 * (1.0 + Math.sin(6.3 * x)) / 2); - int green = (int) (255 - y * 255 * (1.0 + Math.cos(6.3 * x)) / 2); - int red = (int) (255 - y * 255 * (1.0 - Math.sin(6.3 * x)) / 2); - String hex = Integer.toHexString((red << 16) + (green << 8) + blue & 0xffffff); - while (hex.length() < 6) { - hex = "0" + hex; - } - return "#" + hex; - } - - public static String getHexRedGreenByPercent(int percentage, int parts) { - float percent = (percentage * 33F / 100F) / 100F; - - java.awt.Color color = java.awt.Color.getHSBColor(percent, 1, 1); - String hex = Integer.toHexString((color.getRed() << 16) + (color.getGreen() << 8) + color.getBlue() & 0xffffff); - while (hex.length() < 6) { - hex = "0" + hex; - } - return "#" + hex; - } - - public int getRed() { - return red; - } - - public int getGreen() { - return green; - } - - public int getBlue() { - return blue; - } - - public static CMIChatColor getClosest(String hex) { - if (hex.startsWith("#")) - hex = hex.substring(1); - - CMIChatColor closest = CUSTOM_BY_RGB.get(hex); - if (closest != null) - return closest; - - java.awt.Color c2 = null; - try { - c2 = new java.awt.Color( - Integer.valueOf(hex.substring(0, 2), 16), - Integer.valueOf(hex.substring(2, 4), 16), - Integer.valueOf(hex.substring(4, 6), 16)); - } catch (Throwable e) { - return null; - } - double distance = Double.MAX_VALUE; - for (Entry one : CUSTOM_BY_HEX.entrySet()) { - - java.awt.Color c1 = new java.awt.Color( - Integer.valueOf(one.getValue().hex.substring(0, 2), 16), - Integer.valueOf(one.getValue().hex.substring(2, 4), 16), - Integer.valueOf(one.getValue().hex.substring(4, 6), 16)); - - int red1 = c1.getRed(); - int red2 = c2.getRed(); - int rmean = (red1 + red2) >> 1; - int r = red1 - red2; - int g = c1.getGreen() - c2.getGreen(); - int b = c1.getBlue() - c2.getBlue(); - double dist = Math.sqrt((((512 + rmean) * r * r) >> 8) + 4 * g * g + (((767 - rmean) * b * b) >> 8)); - if (dist < distance) { - closest = one.getValue(); - distance = dist; - } - } - - if (closest != null) { - CUSTOM_BY_RGB.put(hex, closest); - return closest; - } - CUSTOM_BY_RGB.put(hex, null); - - return null; - } - - public CMIChatColor mixColors(CMIChatColor color, double percent) { - return mixColors(this, color, percent); - } - - public static CMIChatColor mixColors(CMIChatColor color1, CMIChatColor color2, double percent) { - percent = percent / 100D; - double inverse_percent = 1.0 - percent; - int redPart = (int) (color2.getRed() * percent + color1.getRed() * inverse_percent); - int greenPart = (int) (color2.getGreen() * percent + color1.getGreen() * inverse_percent); - int bluePart = (int) (color2.getBlue() * percent + color1.getBlue() * inverse_percent); - String hexCode = String.format("#%02x%02x%02x", redPart, greenPart, bluePart); - return new CMIChatColor(hexCode); - } - -// public static CMIChatColor getClosest(Long rgb) { -// -// Entry low = CUSTOM_BY_RGB.floorEntry(rgb); -// Entry high = CUSTOM_BY_RGB.ceilingEntry(rgb); -// customColors res = null; -// if (low != null && high != null) { -// res = Math.abs(rgb - low.getKey()) < Math.abs(rgb - high.getKey()) ? low.getValue() : high.getValue(); -// } else if (low != null || high != null) { -// res = low != null ? low.getValue() : high == null ? null : high.getValue(); -// } -// if (res == null) { -// return null; -// } -// return new CMIChatColor(res.name(), res.hex); -// } - -} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIColors.java b/src/com/bekvon/bukkit/cmiLib/CMIColors.java deleted file mode 100644 index a9c652e55..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMIColors.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.awt.Color; - -public enum CMIColors { - White(0, "White", CMIMaterial.BONE_MEAL, new Color(249, 255, 254)), - Orange(1, "Orange", CMIMaterial.ORANGE_DYE, new Color(249, 128, 29)), - Magenta(2, "Magenta", CMIMaterial.MAGENTA_DYE, new Color(199, 78, 189)), - Light_Blue(3, "Light Blue", CMIMaterial.LIGHT_BLUE_DYE, new Color(58, 179, 218)), - Yellow(4, "Yellow", CMIMaterial.DANDELION_YELLOW, new Color(254, 216, 61)), - Lime(5, "Lime", CMIMaterial.LIME_DYE, new Color(128, 199, 31)), - Pink(6, "Pink", CMIMaterial.PINK_DYE, new Color(243, 139, 170)), - Gray(7, "Gray", CMIMaterial.GRAY_DYE, new Color(71, 79, 82)), - Light_Gray(8, "Light Gray", CMIMaterial.LIGHT_GRAY_DYE, new Color(157, 157, 151)), - Cyan(9, "Cyan", CMIMaterial.CYAN_DYE, new Color(22, 156, 156)), - Purple(10, "Purple", CMIMaterial.PURPLE_DYE, new Color(137, 50, 184)), - Blue(11, "Blue", CMIMaterial.LAPIS_LAZULI, new Color(60, 68, 170)), - Brown(12, "Brown", CMIMaterial.COCOA_BEANS, new Color(131, 84, 50)), - Green(13, "Green", CMIMaterial.CACTUS_GREEN, new Color(94, 124, 22)), - Red(14, "Red", CMIMaterial.ROSE_RED, new Color(176, 46, 38)), - Black(15, "Black", CMIMaterial.INK_SAC, new Color(29, 29, 33)); - - private int id; - private String name; - private CMIMaterial mat; - private Color color; - - CMIColors(int id, String name, CMIMaterial mat, Color color) { - this.id = id; - this.name = name; - this.mat = mat; - this.color = color; - } - - CMIColors(int id, String name, CMIMaterial mat) { - this.id = id; - this.name = name; - this.mat = mat; - } - - public int getId() { - return id; - } - - public String getName() { - return name; - } - - public static CMIColors getById(int id) { - for (CMIColors one : CMIColors.values()) { - if (one.getId() == id) - return one; - } - return CMIColors.White; - } - - public CMIMaterial getMat() { - return mat; - } - - public void setMat(CMIMaterial mat) { - this.mat = mat; - } - - public static CMIMaterial getColorMaterial(CMIMaterial mat) { - String name = mat.getName().replace(" ", "").replace("_", "").toLowerCase(); - for (CMIColors one : values()) { - if (name.contains(one.getName().replace("_", "").toLowerCase())) - return one.getMat(); - } - - return null; - } - - public static CMIColors getColor(CMIMaterial mat) { - String name = mat.getName().replace(" ", "").replace("_", "").toLowerCase(); - for (CMIColors one : values()) { - if (name.contains(one.getName().replace("_", "").toLowerCase())) - return one; - } - -// if (c == null) { -// try { -// net.minecraft.server.v1_13_R2.BlockPosition blockPosition = new net.minecraft.server.v1_13_R2.BlockPosition(b.getX(), b.getY(), b.getZ()); -// net.minecraft.server.v1_13_R2.WorldServer worldServer = ((org.bukkit.craftbukkit.v1_13_R2.CraftWorld) b.getWorld()).getHandle(); -// IBlockData t = worldServer.getType(blockPosition); -// net.minecraft.server.v1_13_R2.Block bl = t.getBlock(); -// c = new Color(bl.n(t).i().rgb, true); -// } catch (Exception | Error e) { -// } -// } - - return null; - } - - public Color getColor() { - return color; - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/CMICustomColors.java b/src/com/bekvon/bukkit/cmiLib/CMICustomColors.java deleted file mode 100644 index 16597b728..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMICustomColors.java +++ /dev/null @@ -1,1592 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -public enum CMICustomColors { - Black("000000"), - Navy_Blue("000080"), - Dark_Blue("0000C8"), - Blue("0000FF"), - Stratos("000741"), - Swamp("001B1C"), - Resolution_Blue("002387"), - Deep_Fir("002900"), - Burnham("002E20"), - International_Klein_Blue("002FA7"), - Prussian_Blue("003153"), - Midnight_Blue("003366"), - Smalt("003399"), - Deep_Teal("003532"), - Cyprus("003E40"), - Kaitoke_Green("004620"), - Cobalt("0047AB"), - Crusoe("004816"), - Sherpa_Blue("004950"), - Endeavour("0056A7"), - Camarone("00581A"), - Science_Blue("0066CC"), - Blue_Ribbon("0066FF"), - Tropical_Rain_Forest("00755E"), - Allports("0076A3"), - Deep_Cerulean("007BA7"), - Lochmara("007EC7"), - Azure_Radiance("007FFF"), - Teal("008080"), - Bondi_Blue("0095B6"), - Pacific_Blue("009DC4"), - Persian_Green("00A693"), - Jade("00A86B"), - Caribbean_Green("00CC99"), - Robins_Egg_Blue("00CCCC"), - Green("00FF00"), - Spring_Green("00FF7F"), - Cyan("00FFFF", "Aqua"), - Blue_Charcoal("010D1A"), - Midnight("011635"), - Holly("011D13"), - Daintree("012731"), - Cardin_Green("01361C"), - County_Green("01371A"), - Astronaut_Blue("013E62"), - Regal_Blue("013F6A"), - Aqua_Deep("014B43"), - Orient("015E85"), - Blue_Stone("016162"), - Fun_Green("016D39"), - Pine_Green("01796F"), - Blue_Lagoon("017987"), - Deep_Sea("01826B"), - Green_Haze("01A368"), - English_Holly("022D15"), - Sherwood_Green("02402C"), - Congress_Blue("02478E"), - Evening_Sea("024E46"), - Bahama_Blue("026395"), - Observatory("02866F"), - Cerulean("02A4D3"), - Tangaroa("03163C"), - Green_Vogue("032B52"), - Mosque("036A6E"), - Midnight_Moss("041004"), - Black_Pearl("041322"), - Blue_Whale("042E4C"), - Zuccini("044022"), - Teal_Blue("044259"), - Deep_Cove("051040"), - Gulf_Blue("051657"), - Venice_Blue("055989"), - Watercourse("056F57"), - Catalina_Blue("062A78"), - Tiber("063537"), - Gossamer("069B81"), - Niagara("06A189"), - Tarawera("073A50"), - Jaguar("080110"), - Black_Bean("081910"), - Deep_Sapphire("082567"), - Elf_Green("088370"), - Bright_Turquoise("08E8DE"), - Downriver("092256"), - Palm_Green("09230F"), - Madison("09255D"), - Bottle_Green("093624"), - Deep_Sea_Green("095859"), - Salem("097F4B"), - Black_Russian("0A001C"), - Dark_Fern("0A480D"), - Japanese_Laurel("0A6906"), - Atoll("0A6F75"), - Cod_Gray("0B0B0B"), - Marshland("0B0F08"), - Gordons_Green("0B1107"), - Black_Forest("0B1304"), - San_Felix("0B6207"), - Malachite("0BDA51"), - Ebony("0C0B1D"), - Woodsmoke("0C0D0F"), - Racing_Green("0C1911"), - Surfie_Green("0C7A79"), - Blue_Chill("0C8990"), - Black_Rock("0D0332"), - Bunker("0D1117"), - Aztec("0D1C19"), - Bush("0D2E1C"), - Cinder("0E0E18"), - Firefly("0E2A30"), - Torea_Bay("0F2D9E"), - Vulcan("10121D"), - Green_Waterloo("101405"), - Eden("105852"), - Arapawa("110C6C"), - Ultramarine("120A8F"), - Elephant("123447"), - Jewel("126B40"), - Diesel("130000"), - Asphalt("130A06"), - Blue_Zodiac("13264D"), - Parsley("134F19"), - Nero("140600"), - Tory_Blue("1450AA"), - Bunting("151F4C"), - Denim("1560BD"), - Genoa("15736B"), - Mirage("161928"), - Hunter_Green("161D10"), - Big_Stone("162A40"), - Celtic("163222"), - Timber_Green("16322C"), - Gable_Green("163531"), - Pine_Tree("171F04"), - Chathams_Blue("175579"), - Deep_Forest_Green("182D09"), - Blumine("18587A"), - Palm_Leaf("19330E"), - Nile_Blue("193751"), - Fun_Blue("1959A8"), - Lucky_Point("1A1A68"), - Mountain_Meadow("1AB385"), - Tolopea("1B0245"), - Haiti("1B1035"), - Deep_Koamaru("1B127B"), - Acadia("1B1404"), - Seaweed("1B2F11"), - Biscay("1B3162"), - Matisse("1B659D"), - Crowshead("1C1208"), - Rangoon_Green("1C1E13"), - Persian_Blue("1C39BB"), - Everglade("1C402E"), - Elm("1C7C7D"), - Green_Pea("1D6142"), - Creole("1E0F04"), - Karaka("1E1609"), - El_Paso("1E1708"), - Cello("1E385B"), - Te_Papa_Green("1E433C"), - Dodger_Blue("1E90FF"), - Eastern_Blue("1E9AB0"), - Night_Rider("1F120F"), - Java("1FC2C2"), - Jacksons_Purple("20208D"), - Cloud_Burst("202E54"), - Blue_Dianne("204852"), - Eternity("211A0E"), - Deep_Blue("220878"), - Forest_Green("228B22"), - Mallard("233418"), - Violet("240A40"), - Kilamanjaro("240C02"), - Log_Cabin("242A1D"), - Black_Olive("242E16"), - Green_House("24500F"), - Graphite("251607"), - Cannon_Black("251706"), - Port_Gore("251F4F"), - Shark("25272C"), - Green_Kelp("25311C"), - Curious_Blue("2596D1"), - Paua("260368"), - Paris_M("26056A"), - Wood_Bark("261105"), - Gondola("261414"), - Steel_Gray("262335"), - Ebony_Clay("26283B"), - Bay_of_Many("273A81"), - Plantation("27504B"), - Eucalyptus("278A5B"), - Oil("281E15"), - Astronaut("283A77"), - Mariner("286ACD"), - Violent_Violet("290C5E"), - Bastille("292130"), - Zeus("292319"), - Charade("292937"), - Jelly_Bean("297B9A"), - Jungle_Green("29AB87"), - Cherry_Pie("2A0359"), - Coffee_Bean("2A140E"), - Baltic_Sea("2A2630"), - Turtle_Green("2A380B"), - Cerulean_Blue("2A52BE"), - Sepia_Black("2B0202"), - Valhalla("2B194F"), - Heavy_Metal("2B3228"), - Blue_Gem("2C0E8C"), - Revolver("2C1632"), - Bleached_Cedar("2C2133"), - Lochinvar("2C8C84"), - Mikado("2D2510"), - Outer_Space("2D383A"), - St_Tropaz("2D569B"), - Jacaranda("2E0329"), - Jacko_Bean("2E1905"), - Rangitoto("2E3222"), - Rhino("2E3F62"), - Sea_Green("2E8B57"), - Scooter("2EBFD4"), - Onion("2F270E"), - Governor_Bay("2F3CB3"), - Sapphire("2F519E"), - Spectra("2F5A57"), - Casal("2F6168"), - Melanzane("300529"), - Cocoa_Brown("301F1E"), - Woodrush("302A0F"), - San_Juan("304B6A"), - Turquoise("30D5C8"), - Eclipse("311C17"), - Pickled_Bluewood("314459"), - Azure("315BA1"), - Calypso("31728D"), - Paradiso("317D82"), - Persian_Indigo("32127A"), - Blackcurrant("32293A"), - Mine_Shaft("323232"), - Stromboli("325D52"), - Bilbao("327C14"), - Astral("327DA0"), - Christalle("33036B"), - Thunder("33292F"), - Shamrock("33CC99"), - Tamarind("341515"), - Mardi_Gras("350036"), - Valentino("350E42"), - Jagger("350E57"), - Tuna("353542"), - Chambray("354E8C"), - Martinique("363050"), - Tuatara("363534"), - Waiouru("363C0D"), - Ming("36747D"), - La_Palma("368716"), - Chocolate("370202"), - Clinker("371D09"), - Brown_Tumbleweed("37290E"), - Birch("373021"), - Oracle("377475"), - Blue_Diamond("380474"), - Grape("381A51"), - Dune("383533"), - Oxford_Blue("384555"), - Clover("384910"), - Limed_Spruce("394851"), - Dell("396413"), - Toledo("3A0020"), - Sambuca("3A2010"), - Jacarta("3A2A6A"), - William("3A686C"), - Killarney("3A6A47"), - Keppel("3AB09E"), - Temptress("3B000B"), - Aubergine("3B0910"), - Jon("3B1F1F"), - Treehouse("3B2820"), - Amazon("3B7A57"), - Boston_Blue("3B91B4"), - Windsor("3C0878"), - Rebel("3C1206"), - Meteorite("3C1F76"), - Dark_Ebony("3C2005"), - Camouflage("3C3910"), - Bright_Gray("3C4151"), - Cape_Cod("3C4443"), - Lunar_Green("3C493A"), - Bean_("3D0C02"), - Bistre("3D2B1F"), - Goblin("3D7D52"), - Kingfisher_Daisy("3E0480"), - Cedar("3E1C14"), - English_Walnut("3E2B23"), - Black_Marlin("3E2C1C"), - Ship_Gray("3E3A44"), - Pelorous("3EABBF"), - Bronze("3F2109"), - Cola("3F2500"), - Madras("3F3002"), - Minsk("3F307F"), - Cabbage_Pont("3F4C3A"), - Tom_Thumb("3F583B"), - Mineral_Green("3F5D53"), - Puerto_Rico("3FC1AA"), - Harlequin("3FFF00"), - Brown_Pod("401801"), - Cork("40291D"), - Masala("403B38"), - Thatch_Green("403D19"), - Fiord("405169"), - Viridian("40826D"), - Chateau_Green("40A860"), - Ripe_Plum("410056"), - Paco("411F10"), - Deep_Oak("412010"), - Merlin("413C37"), - Gun_Powder("414257"), - East_Bay("414C7D"), - Royal_Blue("4169E1"), - Ocean_Green("41AA78"), - Burnt_Maroon("420303"), - Lisbon_Brown("423921"), - Faded_Jade("427977"), - Scarlet_Gum("431560"), - Iroko("433120"), - Armadillo("433E37"), - River_Bed("434C59"), - Green_Leaf("436A0D"), - Barossa("44012D"), - Morocco_Brown("441D00"), - Mako("444954"), - Kelp("454936"), - San_Marino("456CAC"), - Picton_Blue("45B1E8"), - Loulou("460B41"), - Crater_Brown("462425"), - Gray_Asparagus("465945"), - Steel_Blue("4682B4"), - Rustic_Red("480404"), - Bulgarian_Rose("480607"), - Clairvoyant("480656"), - Cocoa_Bean("481C1C"), - Woody_Brown("483131"), - Taupe("483C32"), - Van_Cleef("49170C"), - Brown_Derby("492615"), - Metallic_Bronze("49371B"), - Verdun_Green("495400"), - Blue_Bayoux("496679"), - Bismark("497183"), - Bracken("4A2A04"), - Deep_Bronze("4A3004"), - Mondo("4A3C30"), - Tundora("4A4244"), - Gravel("4A444B"), - Trout("4A4E5A"), - Pigment_Indigo("4B0082"), - Nandor("4B5D52"), - Saddle("4C3024"), - Abbey("4C4F56"), - Blackberry("4D0135"), - Cab_Sav("4D0A18"), - Indian_Tan("4D1E01"), - Cowboy("4D282D"), - Livid_Brown("4D282E"), - Rock("4D3833"), - Punga("4D3D14"), - Bronzetone("4D400F"), - Woodland("4D5328"), - Mahogany("4E0606"), - Bossanova("4E2A5A"), - Matterhorn("4E3B41"), - Bronze_Olive("4E420C"), - Mulled_Wine("4E4562"), - Axolotl("4E6649"), - Wedgewood("4E7F9E"), - Shakespeare("4EABD1"), - Honey_Flower("4F1C70"), - Daisy_Bush("4F2398"), - Indigo("4F69C6"), - Fern_Green("4F7942"), - Fruit_Salad("4F9D5D"), - Apple("4FA83D"), - Mortar("504351"), - Kashmir_Blue("507096"), - Cutty_Sark("507672"), - Emerald("50C878"), - Emperor("514649"), - Chalet_Green("516E3D"), - Como("517C66"), - Smalt_Blue("51808F"), - Castro("52001F"), - Maroon_Oak("520C17"), - Gigas("523C94"), - Voodoo("533455"), - Victoria("534491"), - Hippie_Green("53824B"), - Heath("541012"), - Judge_Gray("544333"), - Fuscous_Gray("54534D"), - Vida_Loca("549019"), - Cioccolato("55280C"), - Saratoga("555B10"), - Finlandia("556D56"), - Havelock_Blue("5590D9"), - Fountain_Blue("56B4BE"), - Spring_Leaves("578363"), - Saddle_Brown("583401"), - Scarpa_Flow("585562"), - Cactus("587156"), - Hippie_Blue("589AAF"), - Wine_Berry("591D35"), - Brown_Bramble("592804"), - Congo_Brown("593737"), - Millbrook("594433"), - Waikawa_Gray("5A6E9C"), - Horizon("5A87A0"), - Jambalaya("5B3013"), - Bordeaux("5C0120"), - Mulberry_Wood("5C0536"), - Carnaby_Tan("5C2E01"), - Comet("5C5D75"), - Redwood("5D1E0F"), - Don_Juan("5D4C51"), - Chicago("5D5C58"), - Verdigris("5D5E37"), - Dingley("5D7747"), - Breaker_Bay("5DA19F"), - Kabul("5E483E"), - Hemlock("5E5D3B"), - Irish_Coffee("5F3D26"), - Mid_Gray("5F5F6E"), - Shuttle_Gray("5F6672"), - Aqua_Forest("5FA777"), - Tradewind("5FB3AC"), - Horses_Neck("604913"), - Smoky("605B73"), - Corduroy("606E68"), - Danube("6093D1"), - Espresso("612718"), - Eggplant("614051"), - Costa_Del_Sol("615D30"), - Glade_Green("61845F"), - Buccaneer("622F30"), - Quincy("623F2D"), - Butterfly_Bush("624E9A"), - West_Coast("625119"), - Finch("626649"), - Patina("639A8F"), - Fern("63B76C"), - Blue_Violet("6456B7"), - Dolphin("646077"), - Storm_Dust("646463"), - Siam("646A54"), - Nevada("646E75"), - Cornflower_Blue("6495ED"), - Viking("64CCDB"), - Rosewood("65000B"), - Cherrywood("651A14"), - Purple_Heart("652DC1"), - Fern_Frond("657220"), - Willow_Grove("65745D"), - Hoki("65869F"), - Pompadour("660045"), - Purple("660099"), - Tyrian_Purple("66023C"), - Dark_Tan("661010"), - Silver_Tree("66B58F"), - Bright_Green("66FF00"), - Screamin_Green("66FF66"), - Black_Rose("67032D"), - Scampi("675FA6"), - Ironside_Gray("676662"), - Viridian_Green("678975"), - Christi("67A712"), - Nutmeg_Wood_Finish("683600"), - Zambezi("685558"), - Salt_Box("685E6E"), - Tawny_Port("692545"), - Finn("692D54"), - Scorpion("695F62"), - Lynch("697E9A"), - Spice("6A442E"), - Himalaya("6A5D1B"), - Soya_Bean("6A6051"), - Hairy_Heath("6B2A14"), - Royal_Purple("6B3FA0"), - Shingle_Fawn("6B4E31"), - Dorado("6B5755"), - Bermuda_Gray("6B8BA2"), - Olive_Drab("6B8E23"), - Eminence("6C3082"), - Turquoise_Blue("6CDAE7"), - Lonestar("6D0101"), - Pine_Cone("6D5E54"), - Dove_Gray("6D6C6C"), - Juniper("6D9292"), - Gothic("6D92A1"), - Red_Oxide("6E0902"), - Moccaccino("6E1D14"), - Pickled_Bean("6E4826"), - Dallas("6E4B26"), - Kokoda("6E6D57"), - Pale_Sky("6E7783"), - Cafe_Royale("6F440C"), - Flint("6F6A61"), - Highland("6F8E63"), - Limeade("6F9D02"), - Downy("6FD0C5"), - Persian_Plum("701C1C"), - Sepia("704214"), - Antique_Bronze("704A07"), - Ferra("704F50"), - Coffee("706555"), - Slate_Gray("708090"), - Cedar_Wood_Finish("711A00"), - Metallic_Copper("71291D"), - Affair("714693"), - Studio("714AB2"), - Tobacco_Brown("715D47"), - Yellow_Metal("716338"), - Peat("716B56"), - Olivetone("716E10"), - Storm_Gray("717486"), - Sirocco("718080"), - Aquamarine_Blue("71D9E2"), - Venetian_Red("72010F"), - Old_Copper("724A2F"), - Go_Ben("726D4E"), - Raven("727B89"), - Seance("731E8F"), - Raw_Umber("734A12"), - Kimberly("736C9F"), - Crocodile("736D58"), - Crete("737829"), - Xanadu("738678"), - Spicy_Mustard("74640D"), - Limed_Ash("747D63"), - Rolling_Stone("747D83"), - Blue_Smoke("748881"), - Laurel("749378"), - Mantis("74C365"), - Russett("755A57"), - Deluge("7563A8"), - Cosmic("76395D"), - Blue_Marguerite("7666C6"), - Lima("76BD17"), - Sky_Blue("76D7EA"), - Dark_Burgundy("770F05"), - Crown_of_Thorns("771F1F"), - Walnut("773F1A"), - Pablo("776F61"), - Pacifika("778120"), - Oxley("779E86"), - Pastel_Green("77DD77"), - Japanese_Maple("780109"), - Mocha("782D19"), - Peanut("782F16"), - Camouflage_Green("78866B"), - Wasabi("788A25"), - Ship_Cove("788BBA"), - Sea_Nymph("78A39C"), - Roman_Coffee("795D4C"), - Old_Lavender("796878"), - Rum("796989"), - Fedora("796A78"), - Sandstone("796D62"), - Spray("79DEEC"), - Siren("7A013A"), - Fuchsia_Blue("7A58C1"), - Boulder("7A7A7A"), - Wild_Blue_Yonder("7A89B8"), - De_York("7AC488"), - Red_Beech("7B3801"), - Cinnamon("7B3F00"), - Yukon_Gold("7B6608"), - Tapa("7B7874"), - Waterloo_("7B7C94"), - Flax_Smoke("7B8265"), - Amulet("7B9F80"), - Asparagus("7BA05B"), - Kenyan_Copper("7C1C05"), - Pesto("7C7631"), - Topaz("7C778A"), - Concord("7C7B7A"), - Jumbo("7C7B82"), - Trendy_Green("7C881A"), - Gumbo("7CA1A6"), - Acapulco("7CB0A1"), - Neptune("7CB7BB"), - Pueblo("7D2C14"), - Bay_Leaf("7DA98D"), - Malibu("7DC8F7"), - Bermuda("7DD8C6"), - Copper_Canyon("7E3A15"), - Claret("7F1734"), - Peru_Tan("7F3A02"), - Falcon("7F626D"), - Mobster("7F7589"), - Moody_Blue("7F76D3"), - Chartreuse("7FFF00"), - Aquamarine("7FFFD4"), - Maroon("800000"), - Rose_Bud_Cherry("800B47"), - Falu_Red("801818"), - Red_Robin("80341F"), - Vivid_Violet("803790"), - Russet("80461B"), - Friar_Gray("807E79"), - Olive("808000"), - Gray("808080"), - Gulf_Stream("80B3AE"), - Glacier("80B3C4"), - Seagull("80CCEA"), - Nutmeg("81422C"), - Spicy_Pink("816E71"), - Empress("817377"), - Spanish_Green("819885"), - Sand_Dune("826F65"), - Gunsmoke("828685"), - Battleship_Gray("828F72"), - Merlot("831923"), - Shadow("837050"), - Chelsea_Cucumber("83AA5D"), - Monte_Carlo("83D0C6"), - Plum("843179"), - Granny_Smith("84A0A0"), - Chetwode_Blue("8581D9"), - Bandicoot("858470"), - Bali_Hai("859FAF"), - Half_Baked("85C4CC"), - Red_Devil("860111"), - Lotus("863C3C"), - Ironstone("86483C"), - Bull_Shot("864D1E"), - Rusty_Nail("86560A"), - Bitter("868974"), - Regent_Gray("86949F"), - Disco("871550"), - Americano("87756E"), - Hurricane("877C7B"), - Oslo_Gray("878D91"), - Sushi("87AB39"), - Spicy_Mix("885342"), - Kumera("886221"), - Suva_Gray("888387"), - Avocado("888D65"), - Camelot("893456"), - Solid_Pink("893843"), - Cannon_Pink("894367"), - Makara("897D6D"), - Burnt_Umber("8A3324"), - True_V("8A73D6"), - Clay_Creek("8A8360"), - Monsoon("8A8389"), - Stack("8A8F8A"), - Jordy_Blue("8AB9F1"), - Electric_Violet("8B00FF"), - Monarch("8B0723"), - Corn_Harvest("8B6B0B"), - Olive_Haze("8B8470"), - Schooner("8B847E"), - Natural_Gray("8B8680"), - Mantle("8B9C90"), - Portage("8B9FEE"), - Envy("8BA690"), - Cascade("8BA9A5"), - Riptide("8BE6D8"), - Cardinal_Pink("8C055E"), - Mule_Fawn("8C472F"), - Potters_Clay("8C5738"), - Trendy_Pink("8C6495"), - Paprika("8D0226"), - Sanguine_Brown("8D3D38"), - Tosca("8D3F3F"), - Cement("8D7662"), - Granite_Green("8D8974"), - Manatee("8D90A1"), - Polo_Blue("8DA8CC"), - Red_Berry("8E0000"), - Rope("8E4D1E"), - Opium("8E6F70"), - Domino("8E775E"), - Mamba("8E8190"), - Nepal("8EABC1"), - Pohutukawa("8F021C"), - El_Salva("8F3E33"), - Korma("8F4B0E"), - Squirrel("8F8176"), - Vista_Blue("8FD6B4"), - Burgundy("900020"), - Old_Brick("901E1E"), - Hemp("907874"), - Almond_Frost("907B71"), - Sycamore("908D39"), - Sangria("92000A"), - Cumin("924321"), - Beaver("926F5B"), - Stonewall("928573"), - Venus("928590"), - Medium_Purple("9370DB"), - Cornflower("93CCEA"), - Algae_Green("93DFB8"), - Copper_Rust("944747"), - Arrowtown("948771"), - Scarlett("950015"), - Strikemaster("956387"), - Mountain_Mist("959396"), - Carmine("960018"), - Brown("964B00"), - Leather("967059"), - Purple_Mountains_Majesty("9678B6"), - Lavender_Purple("967BB6"), - Pewter("96A8A1"), - Summer_Green("96BBAB"), - Au_Chico("97605D"), - Wisteria("9771B5"), - Atlantis("97CD2D"), - Vin_Rouge("983D61"), - Lilac_Bush("9874D3"), - Bazaar("98777B"), - Hacienda("98811B"), - Pale_Oyster("988D77"), - Mint_Green("98FF98"), - Fresh_Eggplant("990066"), - Violet_Eggplant("991199"), - Tamarillo("991613"), - Totem_Pole("991B07"), - Copper_Rose("996666"), - Amethyst("9966CC"), - Mountbatten_Pink("997A8D"), - Blue_Bell("9999CC"), - Prairie_Sand("9A3820"), - Toast("9A6E61"), - Gurkha("9A9577"), - Olivine("9AB973"), - Shadow_Green("9AC2B8"), - Oregon("9B4703"), - Lemon_Grass("9B9E8F"), - Stiletto("9C3336"), - Hawaiian_Tan("9D5616"), - Gull_Gray("9DACB7"), - Pistachio("9DC209"), - Granny_Smith_Apple("9DE093"), - Anakiwa("9DE5FF"), - Chelsea_Gem("9E5302"), - Sepia_Skin("9E5B40"), - Sage("9EA587"), - Citron("9EA91F"), - Rock_Blue("9EB1CD"), - Morning_Glory("9EDEE0"), - Cognac("9F381D"), - Reef_Gold("9F821C"), - Star_Dust("9F9F9C"), - Santas_Gray("9FA0B1"), - Sinbad("9FD7D3"), - Feijoa("9FDD8C"), - Tabasco("A02712"), - Buttered_Rum("A1750D"), - Hit_Gray("A1ADB5"), - Citrus("A1C50A"), - Aqua_Island("A1DAD7"), - Water_Leaf("A1E9DE"), - Flirt("A2006D"), - Rouge("A23B6C"), - Cape_Palliser("A26645"), - Gray_Chateau("A2AAB3"), - Edward("A2AEAB"), - Pharlap("A3807B"), - Amethyst_Smoke("A397B4"), - Blizzard_Blue("A3E3ED"), - Delta("A4A49D"), - Wistful("A4A6D3"), - Green_Smoke("A4AF6E"), - Jazzberry_Jam("A50B5E"), - Zorba("A59B91"), - Bahia("A5CB0C"), - Roof_Terracotta("A62F20"), - Paarl("A65529"), - Barley_Corn("A68B5B"), - Donkey_Brown("A69279"), - Dawn("A6A29A"), - Mexican_Red("A72525"), - Luxor_Gold("A7882C"), - Rich_Gold("A85307"), - Reno_Sand("A86515"), - Coral_Tree("A86B6B"), - Dusty_Gray("A8989B"), - Dull_Lavender("A899E6"), - Tallow("A8A589"), - Bud("A8AE9C"), - Locust("A8AF8E"), - Norway("A8BD9F"), - Chinook("A8E3BD"), - Gray_Olive("A9A491"), - Aluminium("A9ACB6"), - Cadet_Blue("A9B2C3"), - Schist("A9B497"), - Tower_Gray("A9BDBF"), - Perano("A9BEF2"), - Opal("A9C6C2"), - Night_Shadz("AA375A"), - Fire("AA4203"), - Muesli("AA8B5B"), - Sandal("AA8D6F"), - Shady_Lady("AAA5A9"), - Logan("AAA9CD"), - Spun_Pearl("AAABB7"), - Regent_St_Blue("AAD6E6"), - Magic_Mint("AAF0D1"), - Lipstick("AB0563"), - Royal_Heath("AB3472"), - Sandrift("AB917A"), - Cold_Purple("ABA0D9"), - Bronco("ABA196"), - Limed_Oak("AC8A56"), - East_Side("AC91CE"), - Lemon_Ginger("AC9E22"), - Napa("ACA494"), - Hillary("ACA586"), - Cloudy("ACA59F"), - Silver_Chalice("ACACAC"), - Swamp_Green("ACB78E"), - Spring_Rain("ACCBB1"), - Conifer("ACDD4D"), - Celadon("ACE1AF"), - Mandalay("AD781B"), - Casper("ADBED1"), - Moss_Green("ADDFAD"), - Padua("ADE6C4"), - Green_Yellow("ADFF2F"), - Hippie_Pink("AE4560"), - Desert("AE6020"), - Bouquet("AE809E"), - Medium_Carmine("AF4035"), - Apple_Blossom("AF4D43"), - Brown_Rust("AF593E"), - Driftwood("AF8751"), - Alpine("AF8F2C"), - Lucky("AF9F1C"), - Martini("AFA09E"), - Bombay("AFB1B8"), - Pigeon_Post("AFBDD9"), - Cadillac("B04C6A"), - Matrix("B05D54"), - Tapestry("B05E81"), - Mai_Tai("B06608"), - Del_Rio("B09A95"), - Powder_Blue("B0E0E6"), - Inch_Worm("B0E313"), - Bright_Red("B10000"), - Vesuvius("B14A0B"), - Pumpkin_Skin("B1610B"), - Santa_Fe("B16D52"), - Teak("B19461"), - Fringy_Flower("B1E2C1"), - Ice_Cold("B1F4E7"), - Shiraz("B20931"), - Biloba_Flower("B2A1EA"), - Tall_Poppy("B32D29"), - Fiery_Orange("B35213"), - Hot_Toddy("B38007"), - Taupe_Gray("B3AF95"), - La_Rioja("B3C110"), - Well_Read("B43332"), - Blush("B44668"), - Jungle_Mist("B4CFD3"), - Turkish_Rose("B57281"), - Lavender("B57EDC"), - Mongoose("B5A27F"), - Olive_Green("B5B35C"), - Jet_Stream("B5D2CE"), - Cruise("B5ECDF"), - Hibiscus("B6316C"), - Thatch("B69D98"), - Heathered_Gray("B6B095"), - Eagle("B6BAA4"), - Spindle("B6D1EA"), - Gum_Leaf("B6D3BF"), - Rust("B7410E"), - Muddy_Waters("B78E5C"), - Sahara("B7A214"), - Husk("B7A458"), - Nobel("B7B1B1"), - Heather("B7C3D0"), - Madang("B7F0BE"), - Milano_Red("B81104"), - Copper("B87333"), - Gimblet("B8B56A"), - Green_Spring("B8C1B1"), - Celery("B8C25D"), - Sail("B8E0F9"), - Chestnut("B94E48"), - Crail("B95140"), - Marigold("B98D28"), - Wild_Willow("B9C46A"), - Rainee("B9C8AC"), - Guardsman_Red("BA0101"), - Rock_Spray("BA450C"), - Bourbon("BA6F1E"), - Pirate_Gold("BA7F03"), - Nomad("BAB1A2"), - Submarine("BAC7C9"), - Charlotte("BAEEF9"), - Medium_Red_Violet("BB3385"), - Brandy_Rose("BB8983"), - Rio_Grande("BBD009"), - Surf("BBD7C1"), - Powder_Ash("BCC9C2"), - Tuscany("BD5E2E"), - Quicksand("BD978E"), - Silk("BDB1A8"), - Malta("BDB2A1"), - Chatelle("BDB3C7"), - Lavender_Gray("BDBBD7"), - French_Gray("BDBDC6"), - Clay_Ash("BDC8B3"), - Loblolly("BDC9CE"), - French_Pass("BDEDFD"), - London_Hue("BEA6C3"), - Pink_Swan("BEB5B7"), - Fuego("BEDE0D"), - Rose_of_Sharon("BF5500"), - Tide("BFB8B0"), - Blue_Haze("BFBED8"), - Silver_Sand("BFC1C2"), - Key_Lime_Pie("BFC921"), - Ziggurat("BFDBE2"), - Lime("BFFF00"), - Thunderbird("C02B18"), - Mojo("C04737"), - Old_Rose("C08081"), - Silver("C0C0C0"), - Pale_Leaf("C0D3B9"), - Pixie_Green("C0D8B6"), - Tia_Maria("C1440E"), - Fuchsia_Pink("C154C1"), - Buddha_Gold("C1A004"), - Bison_Hide("C1B7A4"), - Tea("C1BAB0"), - Gray_Suit("C1BECD"), - Sprout("C1D7B0"), - Sulu("C1F07C"), - Indochine("C26B03"), - Twine("C2955D"), - Cotton_Seed("C2BDB6"), - Pumice("C2CAC4"), - Jagged_Ice("C2E8E5"), - Maroon_Flush("C32148"), - Indian_Khaki("C3B091"), - Pale_Slate("C3BFC1"), - Gray_Nickel("C3C3BD"), - Periwinkle_Gray("C3CDE6"), - Tiara("C3D1D1"), - Tropical_Blue("C3DDF9"), - Cardinal("C41E3A"), - Fuzzy_Wuzzy_Brown("C45655"), - Orange_Roughy("C45719"), - Mist_Gray("C4C4BC"), - Coriander("C4D0B0"), - Mint_Tulip("C4F4EB"), - Mulberry("C54B8C"), - Nugget("C59922"), - Tussock("C5994B"), - Sea_Mist("C5DBCA"), - Yellow_Green("C5E17A"), - Brick_Red("C62D42"), - Contessa("C6726B"), - Oriental_Pink("C69191"), - Roti("C6A84B"), - Ash("C6C3B5"), - Kangaroo("C6C8BD"), - Las_Palmas("C6E610"), - Monza("C7031E"), - Red_Violet("C71585"), - Coral_Reef("C7BCA2"), - Melrose("C7C1FF"), - Cloud("C7C4BF"), - Ghost("C7C9D5"), - Pine_Glade("C7CD90"), - Botticelli("C7DDE5"), - Antique_Brass("C88A65"), - Lilac("C8A2C8"), - Hokey_Pokey("C8A528"), - Lily("C8AABF"), - Laser("C8B568"), - Edgewater("C8E3D7"), - Piper("C96323"), - Pizza("C99415"), - Light_Wisteria("C9A0DC"), - Rodeo_Dust("C9B29B"), - Sundance("C9B35B"), - Earls_Green("C9B93B"), - Silver_Rust("C9C0BB"), - Conch("C9D9D2"), - Reef("C9FFA2"), - Aero_Blue("C9FFE5"), - Flush_Mahogany("CA3435"), - Turmeric("CABB48"), - Paris_White("CADCD4"), - Bitter_Lemon("CAE00D"), - Skeptic("CAE6DA"), - Viola("CB8FA9"), - Foggy_Gray("CBCAB6"), - Green_Mist("CBD3B0"), - Nebula("CBDBD6"), - Persian_Red("CC3333"), - Burnt_Orange("CC5500"), - Ochre("CC7722"), - Puce("CC8899"), - Thistle_Green("CCCAA8"), - Periwinkle("CCCCFF"), - Electric_Lime("CCFF00"), - Tenn("CD5700"), - Chestnut_Rose("CD5C5C"), - Brandy_Punch("CD8429"), - Onahau("CDF4FF"), - Sorrell_Brown("CEB98F"), - Cold_Turkey("CEBABA"), - Yuma("CEC291"), - Chino("CEC7A7"), - Eunry("CFA39D"), - Old_Gold("CFB53B"), - Tasman("CFDCCF"), - Surf_Crest("CFE5D2"), - Humming_Bird("CFF9F3"), - Scandal("CFFAF4"), - Red_Stage("D05F04"), - Hopbush("D06DA1"), - Meteor("D07D12"), - Perfume("D0BEF8"), - Prelude("D0C0E5"), - Tea_Green("D0F0C0"), - Geebung("D18F1B"), - Vanilla("D1BEA8"), - Soft_Amber("D1C6B4"), - Celeste("D1D2CA"), - Mischka("D1D2DD"), - Pear("D1E231"), - Hot_Cinnamon("D2691E"), - Raw_Sienna("D27D46"), - Careys_Pink("D29EAA"), - Tan("D2B48C"), - Deco("D2DA97"), - Blue_Romance("D2F6DE"), - Gossip("D2F8B0"), - Sisal("D3CBBA"), - Swirl("D3CDC5"), - Charm("D47494"), - Clam_Shell("D4B6AF"), - Straw("D4BF8D"), - Akaroa("D4C4A8"), - Bird_Flower("D4CD16"), - Iron("D4D7D9"), - Geyser("D4DFE2"), - Hawkes_Blue("D4E2FC"), - Grenadier("D54600"), - Can_Can("D591A4"), - Whiskey("D59A6F"), - Winter_Hazel("D5D195"), - Granny_Apple("D5F6E3"), - My_Pink("D69188"), - Tacha("D6C562"), - Moon_Raker("D6CEF6"), - Quill_Gray("D6D6D1"), - Snowy_Mint("D6FFDB"), - New_York_Pink("D7837F"), - Pavlova("D7C498"), - Fog("D7D0FF"), - Valencia("D84437"), - Japonica("D87C63"), - Thistle("D8BFD8"), - Maverick("D8C2D5"), - Foam("D8FCFA"), - Cabaret("D94972"), - Burning_Sand("D99376"), - Cameo("D9B99B"), - Timberwolf("D9D6CF"), - Tana("D9DCC1"), - Link_Water("D9E4F5"), - Mabel("D9F7FF"), - Cerise("DA3287"), - Flame_Pea("DA5B38"), - Bamboo("DA6304"), - Red_Damask("DA6A41"), - Orchid("DA70D6"), - Copperfield("DA8A67"), - Golden_Grass("DAA520"), - Zanah("DAECD6"), - Iceberg("DAF4F0"), - Oyster_Bay("DAFAFF"), - Cranberry("DB5079"), - Petite_Orchid("DB9690"), - Di_Serria("DB995E"), - Alto("DBDBDB"), - Frosted_Mint("DBFFF8"), - Crimson("DC143C"), - Punch("DC4333"), - Galliano("DCB20C"), - Blossom("DCB4BC"), - Wattle("DCD747"), - Westar("DCD9D2"), - Moon_Mist("DCDDCC"), - Caper("DCEDB4"), - Swans_Down("DCF0EA"), - Swiss_Coffee("DDD6D5"), - White_Ice("DDF9F1"), - Cerise_Red("DE3163"), - Roman("DE6360"), - Tumbleweed("DEA681"), - Gold_Tips("DEBA13"), - Brandy("DEC196"), - Wafer("DECBC6"), - Sapling("DED4A4"), - Barberry("DED717"), - Beryl_Green("DEE5C0"), - Pattens_Blue("DEF5FF"), - Heliotrope("DF73FF"), - Apache("DFBE6F"), - Chenin("DFCD6F"), - Lola("DFCFDB"), - Willow_Brook("DFECDA"), - Chartreuse_Yellow("DFFF00"), - Mauve("E0B0FF"), - Anzac("E0B646"), - Harvest_Gold("E0B974"), - Calico("E0C095"), - Baby_Blue("E0FFFF"), - Sunglo("E16865"), - Equator("E1BC64"), - Pink_Flare("E1C0C8"), - Periglacial_Blue("E1E6D6"), - Kidnapper("E1EAD4"), - Tara("E1F6E8"), - Mandy("E25465"), - Terracotta("E2725B"), - Golden_Bell("E28913"), - Shocking("E292C0"), - Dixie("E29418"), - Light_Orchid("E29CD2"), - Snuff("E2D8ED"), - Mystic("E2EBED"), - Apple_Green("E2F3EC"), - Razzmatazz("E30B5C"), - Alizarin_Crimson("E32636"), - Cinnabar("E34234"), - Cavern_Pink("E3BEBE"), - Peppermint("E3F5E1"), - Mindaro("E3F988"), - Deep_Blush("E47698"), - Gamboge("E49B0F"), - Melanie("E4C2D5"), - Twilight("E4CFDE"), - Bone("E4D1C0"), - Sunflower("E4D422"), - Grain_Brown("E4D5B7"), - Zombie("E4D69B"), - Frostee("E4F6E7"), - Snow_Flurry("E4FFD1"), - Amaranth("E52B50"), - Zest("E5841B"), - Dust_Storm("E5CCC9"), - Stark_White("E5D7BD"), - Hampton("E5D8AF"), - Bon_Jour("E5E0E1"), - Mercury("E5E5E5"), - Polar("E5F9F6"), - Trinidad("E64E03"), - Gold_Sand("E6BE8A"), - Cashmere("E6BEA5"), - Double_Spanish_White("E6D7B9"), - Satin_Linen("E6E4D4"), - Harp("E6F2EA"), - Off_Green("E6F8F3"), - Hint_of_Green("E6FFE9"), - Tranquil("E6FFFF"), - Mango_Tango("E77200"), - Christine("E7730A"), - Tonys_Pink("E79F8C"), - Kobi("E79FC4"), - Rose_Fog("E7BCB4"), - Corn("E7BF05"), - Putty("E7CD8C"), - Gray_Nurse("E7ECE6"), - Lily_White("E7F8FF"), - Bubbles("E7FEFF"), - Fire_Bush("E89928"), - Shilo("E8B9B3"), - Pearl_Bush("E8E0D5"), - Green_White("E8EBE0"), - Chrome_White("E8F1D4"), - Gin("E8F2EB"), - Aqua_Squeeze("E8F5F2"), - Clementine("E96E00"), - Burnt_Sienna("E97451"), - Tahiti_Gold("E97C07"), - Oyster_Pink("E9CECD"), - Confetti("E9D75A"), - Ebb("E9E3E3"), - Ottoman("E9F8ED"), - Clear_Day("E9FFFD"), - Carissma("EA88A8"), - Porsche("EAAE69"), - Tulip_Tree("EAB33B"), - Rob_Roy("EAC674"), - Raffia("EADAB8"), - White_Rock("EAE8D4"), - Panache("EAF6EE"), - Solitude("EAF6FF"), - Aqua_Spring("EAF9F5"), - Dew("EAFFFE"), - Apricot("EB9373"), - Zinnwaldite("EBC2AF"), - Fuel_Yellow("ECA927"), - Ronchi("ECC54E"), - French_Lilac("ECC7EE"), - Just_Right("ECCDB9"), - Wild_Rice("ECE090"), - Fall_Green("ECEBBD"), - Aths_Special("ECEBCE"), - Starship("ECF245"), - Red_Ribbon("ED0A3F"), - Tango("ED7A1C"), - Carrot_Orange("ED9121"), - Sea_Pink("ED989E"), - Tacao("EDB381"), - Desert_Sand("EDC9AF"), - Pancho("EDCDAB"), - Chamois("EDDCB1"), - Primrose("EDEA99"), - Frost("EDF5DD"), - Aqua_Haze("EDF5F5"), - Zumthor("EDF6FF"), - Narvik("EDF9F1"), - Honeysuckle("EDFC84"), - Lavender_Magenta("EE82EE"), - Beauty_Bush("EEC1BE"), - Chalky("EED794"), - Almond("EED9C4"), - Flax("EEDC82"), - Bizarre("EEDEDA"), - Double_Colonial_White("EEE3AD"), - Cararra("EEEEE8"), - Manz("EEEF78"), - Tahuna_Sands("EEF0C8"), - Athens_Gray("EEF0F3"), - Tusk("EEF3C3"), - Loafer("EEF4DE"), - Catskill_White("EEF6F7"), - Twilight_Blue("EEFDFF"), - Jonquil("EEFF9A"), - Rice_Flower("EEFFE2"), - Jaffa("EF863F"), - Gallery("EFEFEF"), - Porcelain("EFF2F3"), - Mauvelous("F091A9"), - Golden_Dream("F0D52D"), - Golden_Sand("F0DB7D"), - Buff("F0DC82"), - Prim("F0E2EC"), - Khaki("F0E68C"), - Selago("F0EEFD"), - Titan_White("F0EEFF"), - Alice_Blue("F0F8FF"), - Feta("F0FCEA"), - Gold_Drop("F18200"), - Wewak("F19BAB"), - Sahara_Sand("F1E788"), - Parchment("F1E9D2"), - Blue_Chalk("F1E9FF"), - Mint_Julep("F1EEC1"), - Seashell("F1F1F1"), - Saltpan("F1F7F2"), - Tidal("F1FFAD"), - Chiffon("F1FFC8"), - Flamingo("F2552A"), - Tangerine("F28500"), - Mandys_Pink("F2C3B2"), - Concrete("F2F2F2"), - Black_Squeeze("F2FAFA"), - Pomegranate("F34723"), - Buttercup("F3AD16"), - New_Orleans("F3D69D"), - Vanilla_Ice("F3D9DF"), - Sidecar("F3E7BB"), - Dawn_Pink("F3E9E5"), - Wheatfield("F3EDCF"), - Canary("F3FB62"), - Orinoco("F3FBD4"), - Carla("F3FFD8"), - Hollywood_Cerise("F400A1"), - Sandy_brown("F4A460"), - Saffron("F4C430"), - Ripe_Lemon("F4D81C"), - Janna("F4EBD3"), - Pampas("F4F2EE"), - Wild_Sand("F4F4F4"), - Zircon("F4F8FF"), - Froly("F57584"), - Cream_Can("F5C85C"), - Manhattan("F5C999"), - Maize("F5D5A0"), - Wheat("F5DEB3"), - Sandwisp("F5E7A2"), - Pot_Pourri("F5E7E2"), - Albescent_White("F5E9D3"), - Soft_Peach("F5EDEF"), - Ecru_White("F5F3E5"), - Beige("F5F5DC"), - Golden_Fizz("F5FB3D"), - Australian_Mint("F5FFBE"), - French_Rose("F64A8A"), - Brilliant_Rose("F653A6"), - Illusion("F6A4C9"), - Merino("F6F0E6"), - Black_Haze("F6F7F7"), - Spring_Sun("F6FFDC"), - Violet_Red("F7468A"), - Chilean_Fire("F77703"), - Persian_Pink("F77FBE"), - Rajah("F7B668"), - Azalea("F7C8DA"), - We_Peep("F7DBE6"), - Quarter_Spanish_White("F7F2E1"), - Whisper("F7F5FA"), - Snow_Drift("F7FAF7"), - Casablanca("F8B853"), - Chantilly("F8C3DF"), - Cherub("F8D9E9"), - Marzipan("F8DB9D"), - Energy_Yellow("F8DD5C"), - Givry("F8E4BF"), - White_Linen("F8F0E8"), - Magnolia("F8F4FF"), - Spring_Wood("F8F6F1"), - Coconut_Cream("F8F7DC"), - White_Lilac("F8F7FC"), - Desert_Storm("F8F8F7"), - Texas("F8F99C"), - Corn_Field("F8FACD"), - Mimosa("F8FDD3"), - Carnation("F95A61"), - Saffron_Mango("F9BF58"), - Carousel_Pink("F9E0ED"), - Dairy_Cream("F9E4BC"), - Portica("F9E663"), - Amour("F9EAF3"), - Rum_Swizzle("F9F8E4"), - Dolly("F9FF8B"), - Sugar_Cane("F9FFF6"), - Ecstasy("FA7814"), - Tan_Hide("FA9D5A"), - Corvette("FAD3A2"), - Peach_Yellow("FADFAD"), - Turbo("FAE600"), - Astra("FAEAB9"), - Champagne("FAECCC"), - Linen("FAF0E6"), - Fantasy("FAF3F0"), - Citrine_White("FAF7D6"), - Alabaster("FAFAFA"), - Hint_of_Yellow("FAFDE4"), - Milan("FAFFA4"), - Brink_Pink("FB607F"), - Geraldine("FB8989"), - Lavender_Rose("FBA0E3"), - Sea_Buckthorn("FBA129"), - Sun("FBAC13"), - Lavender_Pink("FBAED2"), - Rose_Bud("FBB2A3"), - Cupid("FBBEDA"), - Classic_Rose("FBCCE7"), - Apricot_Peach("FBCEB1"), - Banana_Mania("FBE7B2"), - Marigold_Yellow("FBE870"), - Festival("FBE96C"), - Sweet_Corn("FBEA8C"), - Candy_Corn("FBEC5D"), - Hint_of_Red("FBF9F9"), - Shalimar("FBFFBA"), - Shocking_Pink("FC0FC0"), - Tickle_Me_Pink("FC80A5"), - Tree_Poppy("FC9C1D"), - Lightning_Yellow("FCC01E"), - Goldenrod("FCD667"), - Candlelight("FCD917"), - Cherokee("FCDA98"), - Double_Pearl_Lusta("FCF4D0"), - Pearl_Lusta("FCF4DC"), - Vista_White("FCF8F7"), - Bianca("FCFBF3"), - Moon_Glow("FCFEDA"), - China_Ivory("FCFFE7"), - Ceramic("FCFFF9"), - Torch_Red("FD0E35"), - Wild_Watermelon("FD5B78"), - Crusta("FD7B33"), - Sorbus("FD7C07"), - Sweet_Pink("FD9FA2"), - Light_Apricot("FDD5B1"), - Pig_Pink("FDD7E4"), - Cinderella("FDE1DC"), - Golden_Glow("FDE295"), - Lemon("FDE910"), - Old_Lace("FDF5E6"), - Half_Colonial_White("FDF6D3"), - Drover("FDF7AD"), - Pale_Prim("FDFEB8"), - Cumulus("FDFFD5"), - Persian_Rose("FE28A2"), - Sunset_Orange("FE4C40"), - Bittersweet("FE6F5E"), - California("FE9D04"), - Yellow_Sea("FEA904"), - Melon("FEBAAD"), - Bright_Sun("FED33C"), - Dandelion("FED85D"), - Salomie("FEDB8D"), - Cape_Honey("FEE5AC"), - Remy("FEEBF3"), - Oasis("FEEFCE"), - Bridesmaid("FEF0EC"), - Beeswax("FEF2C7"), - Bleach_White("FEF3D8"), - Pipi("FEF4CC"), - Half_Spanish_White("FEF4DB"), - Wisp_Pink("FEF4F8"), - Provincial_Pink("FEF5F1"), - Half_Dutch_White("FEF7DE"), - Solitaire("FEF8E2"), - White_Pointer("FEF8FF"), - Off_Yellow("FEF9E3"), - Orange_White("FEFCED"), - Red("FF0000"), - Rose("FF007F"), - Purple_Pizzazz("FF00CC"), - Magenta("FF00FF", "Fuchsia"), - Scarlet("FF2400"), - Wild_Strawberry("FF3399"), - Razzle_Dazzle_Rose("FF33CC"), - Radical_Red("FF355E"), - Red_Orange("FF3F34"), - Coral_Red("FF4040"), - Vermilion("FF4D00"), - International_Orange("FF4F00"), - Outrageous_Orange("FF6037"), - Blaze_Orange("FF6600"), - Pink_Flamingo("FF66FF"), - Orange("FF681F"), - Hot_Pink("FF69B4"), - Persimmon("FF6B53"), - Blush_Pink("FF6FFF"), - Burning_Orange("FF7034"), - Pumpkin("FF7518"), - Flamenco("FF7D07"), - Flush_Orange("FF7F00"), - Coral("FF7F50"), - Salmon("FF8C69"), - Pizazz("FF9000"), - West_Side("FF910F"), - Pink_Salmon("FF91A4"), - Neon_Carrot("FF9933"), - Atomic_Tangerine("FF9966"), - Vivid_Tangerine("FF9980"), - Sunshade("FF9E2C"), - Orange_Peel("FFA000"), - Mona_Lisa("FFA194"), - Web_Orange("FFA500"), - Carnation_Pink("FFA6C9"), - Hit_Pink("FFAB81"), - Yellow_Orange("FFAE42"), - Cornflower_Lilac("FFB0AC"), - Sundown("FFB1B3"), - My_Sin("FFB31F"), - Texas_Rose("FFB555"), - Cotton_Candy("FFB7D5"), - Macaroni_and_Cheese("FFB97B"), - Selective_Yellow("FFBA00"), - Koromiko("FFBD5F"), - Amber("FFBF00"), - Wax_Flower("FFC0A8"), - Pink("FFC0CB"), - Your_Pink("FFC3C0"), - Supernova("FFC901"), - Flesh("FFCBA4"), - Sunglow("FFCC33"), - Golden_Tainoi("FFCC5C"), - Peach_Orange("FFCC99"), - Chardonnay("FFCD8C"), - Pastel_Pink("FFD1DC"), - Romantic("FFD2B7"), - Grandis("FFD38C"), - Gold("FFD700"), - School_bus_Yellow("FFD800"), - Cosmos("FFD8D9"), - Mustard("FFDB58"), - Peach_Schnapps("FFDCD6"), - Caramel("FFDDAF"), - Tuft_Bush("FFDDCD"), - Watusi("FFDDCF"), - Pink_Lace("FFDDF4"), - Navajo_White("FFDEAD"), - Frangipani("FFDEB3"), - Pippin("FFE1DF"), - Pale_Rose("FFE1F2"), - Negroni("FFE2C5"), - Cream_Brulee("FFE5A0"), - Peach("FFE5B4"), - Tequila("FFE6C7"), - Kournikova("FFE772"), - Sandy_Beach("FFEAC8"), - Karry("FFEAD4"), - Broom("FFEC13"), - Colonial_White("FFEDBC"), - Derby("FFEED8"), - Vis_Vis("FFEFA1"), - Egg_White("FFEFC1"), - Papaya_Whip("FFEFD5"), - Fair_Pink("FFEFEC"), - Peach_Cream("FFF0DB"), - Lavender_blush("FFF0F5"), - Gorse("FFF14F"), - Buttermilk("FFF1B5"), - Pink_Lady("FFF1D8"), - Forget_Me_Not("FFF1EE"), - Tutu("FFF1F9"), - Picasso("FFF39D"), - Chardon("FFF3F1"), - Paris_Daisy("FFF46E"), - Barley_White("FFF4CE"), - Egg_Sour("FFF4DD"), - Sazerac("FFF4E0"), - Serenade("FFF4E8"), - Chablis("FFF4F3"), - Seashell_Peach("FFF5EE"), - Sauvignon("FFF5F3"), - Milk_Punch("FFF6D4"), - Varden("FFF6DF"), - Rose_White("FFF6F5"), - Baja_White("FFF8D1"), - Gin_Fizz("FFF9E2"), - Early_Dawn("FFF9E6"), - Lemon_Chiffon("FFFACD"), - Bridal_Heath("FFFAF4"), - Scotch_Mist("FFFBDC"), - Soapstone("FFFBF9"), - Witch_Haze("FFFC99"), - Buttery_White("FFFCEA"), - Island_Spice("FFFCEE"), - Cream("FFFDD0"), - Chilean_Heath("FFFDE6"), - Travertine("FFFDE8"), - Orchid_White("FFFDF3"), - Quarter_Pearl_Lusta("FFFDF4"), - Half_and_Half("FFFEE1"), - Apricot_White("FFFEEC"), - Rice_Cake("FFFEF0"), - Black_White("FFFEF6"), - Romance("FFFEFD"), - Yellow("FFFF00"), - Laser_Lemon("FFFF66"), - Pale_Canary("FFFF99"), - Portafino("FFFFB4"), - Ivory("FFFFF0"), - White("FFFFFF"); - - private String hex; - private String[] extra; - private long rgb = 0; - - CMICustomColors(String hex, String... extra) { - this.hex = hex.toLowerCase(); - this.extra = extra; - rgb = Long.parseLong(hex, 16); - } - - public String getHex() { - return hex; - } - - public String[] getExtra() { - return extra; - } - - public long getRgb() { - return rgb; - } -} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/cmiLib/CMIEffect.java b/src/com/bekvon/bukkit/cmiLib/CMIEffect.java deleted file mode 100644 index 5b3dd80e6..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMIEffect.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright (C) 2017 Zrips - */ -package com.bekvon.bukkit.cmiLib; - -import org.bukkit.Color; -import org.bukkit.util.Vector; - -import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; - -public class CMIEffect { - - private CMIParticle particle; - private Color color = Color.fromBGR(0, 0, 200); - private Vector offset = new Vector(); - private int size = 1; - private int amount = 1; - private float speed = 0; - - public CMIEffect(CMIParticle particle) { - this.particle = particle; - } - - public CMIParticle getParticle() { - if (particle == null) - particle = CMIParticle.COLOURED_DUST; - return particle; - } - - public void setParticle(CMIParticle particle) { - this.particle = particle; - } - - public Color getColor() { - return color; - } - - public void setColor(Color color) { - this.color = color; - } - - public Vector getOffset() { - return offset; - } - - public void setOffset(Vector offset) { - this.offset = offset; - } - - public int getAmount() { - return amount; - } - - public void setAmount(int amount) { - this.amount = amount; - } - - public float getSpeed() { - return speed; - } - - public void setSpeed(float speed) { - this.speed = speed; - } - - public int getSize() { - return size; - } - - public void setSize(int size) { - this.size = size; - } - -} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java b/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java deleted file mode 100644 index 474087c43..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMIEffectManager.java +++ /dev/null @@ -1,431 +0,0 @@ -/** - * Copyright (C) 2017 Zrips - */ -package com.bekvon.bukkit.cmiLib; - -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.Effect; -import org.bukkit.Effect.Type; -import org.bukkit.Material; - -public class CMIEffectManager { - public enum CMIParticleType { - SOUND, VISUAL, PARTICLE, NONE; - } - - public enum CMIParticleDataType { - Void, DustOptions, ItemStack, BlockData, MaterialData; - } - - public enum CMIParticle { - CLICK2("null", 0, CMIParticleType.SOUND, null), - CLICK1("null", 1, CMIParticleType.SOUND, null), - BOW_FIRE("null", 2, CMIParticleType.SOUND, null), - DOOR_TOGGLE("null", 3, CMIParticleType.SOUND, null), - IRON_DOOR_TOGGLE("null", 4, CMIParticleType.SOUND, null), - TRAPDOOR_TOGGLE("null", 5, CMIParticleType.SOUND, null), - IRON_TRAPDOOR_TOGGLE("null", 6, CMIParticleType.SOUND, null), - FENCE_GATE_TOGGLE("null", 7, CMIParticleType.SOUND, null), - DOOR_CLOSE("null", 8, CMIParticleType.SOUND, null), - IRON_DOOR_CLOSE("null", 9, CMIParticleType.SOUND, null), - TRAPDOOR_CLOSE("null", 10, CMIParticleType.SOUND, null), - IRON_TRAPDOOR_CLOSE("null", 11, CMIParticleType.SOUND, null), - FENCE_GATE_CLOSE("null", 12, CMIParticleType.SOUND, null), - EXTINGUISH("null", 13, CMIParticleType.SOUND, null), - RECORD_PLAY("null", 14, CMIParticleType.SOUND, null), - GHAST_SHRIEK("null", 15, CMIParticleType.SOUND, null), - GHAST_SHOOT("null", 16, CMIParticleType.SOUND, null), - BLAZE_SHOOT("null", 17, CMIParticleType.SOUND, null), - ZOMBIE_CHEW_WOODEN_DOOR("null", 18, CMIParticleType.SOUND, null), - ZOMBIE_CHEW_IRON_DOOR("null", 19, CMIParticleType.SOUND, null), - ZOMBIE_DESTROY_DOOR("null", 20, CMIParticleType.SOUND, null), - SMOKE("null", 21, CMIParticleType.VISUAL, null), - STEP_SOUND("null", 22, CMIParticleType.SOUND, null), - POTION_BREAK("null", 23, CMIParticleType.VISUAL, null), - ENDER_SIGNAL("null", 24, CMIParticleType.VISUAL, null), - MOBSPAWNER_FLAMES("null", 25, CMIParticleType.VISUAL, null), - BREWING_STAND_BREW("null", 26, CMIParticleType.SOUND, null), - CHORUS_FLOWER_GROW("null", 27, CMIParticleType.SOUND, null), - CHORUS_FLOWER_DEATH("null", 28, CMIParticleType.SOUND, null), - PORTAL_TRAVEL("null", 29, CMIParticleType.SOUND, null), - ENDEREYE_LAUNCH("null", 30, CMIParticleType.SOUND, null), - FIREWORK_SHOOT("null", 31, CMIParticleType.SOUND, null), - VILLAGER_PLANT_GROW("null", 32, CMIParticleType.VISUAL, null), - DRAGON_BREATH("null", 33, CMIParticleType.VISUAL, null), - ANVIL_BREAK("null", 34, CMIParticleType.SOUND, null), - ANVIL_USE("null", 35, CMIParticleType.SOUND, null), - ANVIL_LAND("null", 36, CMIParticleType.SOUND, null), - ENDERDRAGON_SHOOT("null", 37, CMIParticleType.SOUND, null), - WITHER_BREAK_BLOCK("null", 38, CMIParticleType.SOUND, null), - WITHER_SHOOT("null", 39, CMIParticleType.SOUND, null), - ZOMBIE_INFECT("null", 40, CMIParticleType.SOUND, null), - ZOMBIE_CONVERTED_VILLAGER("null", 41, CMIParticleType.SOUND, null), - BAT_TAKEOFF("null", 42, CMIParticleType.SOUND, null), - END_GATEWAY_SPAWN("null", 43, CMIParticleType.VISUAL, null), - ENDERDRAGON_GROWL("null", 44, CMIParticleType.SOUND, null), - FIREWORKS_SPARK("fireworksSpark", 45, CMIParticleType.PARTICLE, CMIMaterial.FIRE_CHARGE.getMaterial()), - CRIT("crit", 46, CMIParticleType.PARTICLE, Material.IRON_SWORD), - MAGIC_CRIT("CRIT_MAGIC", 47, CMIParticleType.PARTICLE, Material.POTION), - POTION_SWIRL("mobSpell", "SPELL_MOB", 48, CMIParticleType.PARTICLE, Material.BLAZE_ROD), - POTION_SWIRL_TRANSPARENT("mobSpellAmbient", "SPELL_MOB_AMBIENT", 49, CMIParticleType.PARTICLE, Material.BLAZE_POWDER), - SPELL("spell", 50, CMIParticleType.PARTICLE, Material.MILK_BUCKET), - INSTANT_SPELL("instantSpell", "SPELL_INSTANT", 51, CMIParticleType.PARTICLE, Material.GLASS_BOTTLE), - WITCH_MAGIC("witchMagic", "SPELL_WITCH", 52, CMIParticleType.PARTICLE, Material.SPIDER_EYE), - NOTE("note", 53, CMIParticleType.PARTICLE, Material.NOTE_BLOCK), - PORTAL("portal", 54, CMIParticleType.PARTICLE, Material.OBSIDIAN), - FLYING_GLYPH("enchantmenttable", 55, CMIParticleType.PARTICLE, CMIMaterial.ENCHANTING_TABLE.getMaterial()), - FLAME("flame", 56, CMIParticleType.PARTICLE, CMIMaterial.FIRE_CHARGE.getMaterial()), - LAVA_POP("lava", 57, CMIParticleType.PARTICLE, Material.FLINT_AND_STEEL), - FOOTSTEP("footstep", 58, CMIParticleType.PARTICLE, Material.IRON_BOOTS), - SPLASH("splash", "water splash", 59, CMIParticleType.PARTICLE, Material.STICK), - PARTICLE_SMOKE("smoke", "SMOKE_NORMAL", 60, CMIParticleType.PARTICLE, Material.ANVIL), - EXPLOSION_HUGE("hugeexplosion", 61, CMIParticleType.PARTICLE, Material.FURNACE), - EXPLOSION_LARGE("largeexplode", 62, CMIParticleType.PARTICLE, Material.FURNACE), - EXPLOSION("explode", "EXPLOSION_NORMAL", 63, CMIParticleType.PARTICLE, Material.TNT), - VOID_FOG("depthsuspend", "SUSPENDED_DEPTH", 64, CMIParticleType.PARTICLE, CMIMaterial.SALMON.getMaterial()), - SMALL_SMOKE("townaura", 65, CMIParticleType.PARTICLE, CMIMaterial.MYCELIUM.getMaterial()), - CLOUD("cloud", 66, CMIParticleType.PARTICLE, CMIMaterial.COBWEB.getMaterial()), - COLOURED_DUST("reddust", "redstone", 67, CMIParticleType.PARTICLE, Material.REDSTONE, CMIParticleDataType.DustOptions), - SNOWBALL_BREAK("snowballpoof", "SNOWBALL", 68, CMIParticleType.PARTICLE, CMIMaterial.SNOWBALL.getMaterial()), - WATERDRIP("dripWater", "WATER_DROP", 69, CMIParticleType.PARTICLE, Material.WATER_BUCKET), - LAVADRIP("dripLava", 70, CMIParticleType.PARTICLE, Material.LAVA_BUCKET), - SNOW_SHOVEL("snowshovel", 71, CMIParticleType.PARTICLE, CMIMaterial.DIAMOND_SHOVEL.getMaterial()), - SLIME("slime", 72, CMIParticleType.PARTICLE, Material.SLIME_BALL), - HEART("heart", 73, CMIParticleType.PARTICLE, CMIMaterial.ROSE_RED.getMaterial()), - VILLAGER_THUNDERCLOUD("angryVillager", "VILLAGER_ANGRY", 74, CMIParticleType.PARTICLE, Material.EMERALD), - HAPPY_VILLAGER("VILLAGER_HAPPY", 75, CMIParticleType.PARTICLE, Material.BOOK), - LARGE_SMOKE("largesmoke", "SMOKE_LARGE", 76, CMIParticleType.PARTICLE, Material.FURNACE), - ITEM_BREAK("iconcrack", 77, CMIParticleType.NONE, Material.DIAMOND_BOOTS), -// TILE_BREAK("blockcrack", 78, CMIParticleType.PARTICLE, CMIMaterial.MELON.getMaterial(), CMIParticleDataType.MaterialData), -// TILE_DUST("blockdust", 79, CMIParticleType.PARTICLE, CMIMaterial.MELON.getMaterial(), CMIParticleDataType.MaterialData), - - // 1.13 - - WATER_BUBBLE("WATER_BUBBLE", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - WATER_WAKE("WATER_WAKE", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - SUSPENDED("SUSPENDED", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - BARRIER("BARRIER", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), -// ITEM_CRACK("ITEM_CRACK", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.ItemStack), - MOB_APPEARANCE("MOB_APPEARANCE", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - END_ROD("END_ROD", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - DAMAGE_INDICATOR("DAMAGE_INDICATOR", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - SWEEP_ATTACK("SWEEP_ATTACK", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), -// FALLING_DUST("FALLING_DUST", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.BlockData), - TOTEM("TOTEM", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - SPIT("SPIT", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - SQUID_INK("SQUID_INK", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - BUBBLE_POP("BUBBLE_POP", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - CURRENT_DOWN("CURRENT_DOWN", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - BUBBLE_COLUMN_UP("BUBBLE_COLUMN_UP", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - NAUTILUS("NAUTILUS", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void), - DOLPHIN("DOLPHIN", -1, CMIParticleType.PARTICLE, Material.STONE, CMIParticleDataType.Void); - - private String name; - private String secondaryName = ""; - private int id; - private CMIParticleType type; - private Material icon; - private Object particle; - private Effect effect; - private Object EnumParticle; - private int[] extra; - private CMIParticleDataType dataType = CMIParticleDataType.Void; - - CMIParticle(String name, int id, CMIParticleType type) { - this(name, null, id, type, null); - } - - CMIParticle(String name, int id, CMIParticleType type, Material icon) { - this(name, null, id, type, icon); - } - - CMIParticle(String name, String secondaryName, int id, CMIParticleType type, Material icon) { - this(name, secondaryName, id, type, icon, CMIParticleDataType.Void); - } - - CMIParticle(String name, int id, CMIParticleType type, Material icon, CMIParticleDataType dataType) { - this(name, null, id, type, icon, dataType); - } - - CMIParticle(String name, String secondaryName, int id, CMIParticleType type, Material icon, CMIParticleDataType dataType) { - this.name = name; - this.secondaryName = secondaryName; - this.id = id; - this.type = type; - this.icon = icon; - this.dataType = dataType; - } - - public String getName() { - return name; - } - - public int getId() { - return id; - } - - public CMIParticleType getType() { - return type; - } - - public boolean isParticle() { - return type == CMIParticleType.PARTICLE; - } - - public boolean isColored() { - return this.equals(COLOURED_DUST) || this.equals(NOTE); - } - - public static boolean isParticle(Effect effect) { - if (effect == null) - return false; - CMIParticle cmiEffect = getCMIParticle(effect.toString()); - if (cmiEffect == null) - return false; - return cmiEffect.isParticle(); - } - - public static Material getSafeIcon(Effect effect) { - CMIParticle cmiEffect = getCMIParticle(effect.toString()); - if (cmiEffect == null) - return Material.STONE; - return cmiEffect.getIcon() == null ? Material.STONE : cmiEffect.getIcon(); - } - - public Material getSafeIcon() { - return getIcon() == null ? Material.STONE : getIcon(); - } - - public static CMIParticle getCMIParticle(String name) { - CMIParticle cmiEffect = null; - if (name == null) - return null; - name = name.replace("_", "").toLowerCase(); - for (CMIParticle one : CMIParticle.values()) { - if (one.getName() != null && one.getName().equalsIgnoreCase(name)) { - cmiEffect = one; - break; - } - if (!one.getSecondaryName().isEmpty() && one.getSecondaryName().replace("_", "").equalsIgnoreCase(name)) { - cmiEffect = one; - break; - } - if (one.name().replace("_", "").equalsIgnoreCase(name)) { - cmiEffect = one; - break; - } - } - if (cmiEffect != null && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && cmiEffect.getParticle() == null) - return null; - if (Version.isCurrentLower(Version.v1_13_R1) && cmiEffect != null && cmiEffect.getEffect() == null) - return null; - return cmiEffect; - } - -// public static Effect getEffect(String name) { -// CMIParticle cmiEffect = getCMIParticle(name); -//// Bukkit.getConsoleSender().sendMessage("1 "+name); -//// Bukkit.getConsoleSender().sendMessage("2 "+cmiEffect); -// -// if (cmiEffect != null) { -// if (!cmiEffect.getType().equals(CMIParticleType.PARTICLE)) -// return null; -// for (Effect one : Effect.values()) { -// if (one.toString().equalsIgnoreCase(cmiEffect.name())) -// return one; -// if (one.toString().equalsIgnoreCase(cmiEffect.getName())) -// return one; -// } -// } else { -// for (Effect one : Effect.values()) { -// if (one.toString().replace("_", "").equalsIgnoreCase(name)) { -// try { -// if (one.getType() != Type.VISUAL) -// return null; -// } catch (Exception | NoSuchMethodError e) { -// return null; -// } -// return one; -// } -// } -// } -// return null; -// } - - public Effect getEffect() { - if (effect != null) - return effect; - if (!isParticle()) - return null; - for (Effect one : Effect.values()) { - if (one.toString().replace("_", "").equalsIgnoreCase(name().replace("_", ""))) { - effect = one; - return one; - } - if (one.toString().replace("_", "").equalsIgnoreCase(getName())) { - effect = one; - return one; - } - } - - for (Effect one : Effect.values()) { - if (one.toString().replace("_", "").equalsIgnoreCase(name.replace("_", ""))) { - try { - if (one.getType() != Type.VISUAL) - return null; - } catch (Exception | NoSuchMethodError e) { - return null; - } - effect = one; - return one; - } - } - return null; - } - - public Material getIcon() { - return icon == null ? Material.STONE : icon; - } - - public static List getParticleList() { - List ls = new ArrayList<>(); - for (CMIParticle one : CMIParticle.values()) { - if (!one.isParticle()) - continue; - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && one.getParticle() == null) - continue; - if (Version.isCurrentLower(Version.v1_13_R1) && one.getEffect() == null) - continue; - ls.add(one); - } - return ls; - } - - public CMIParticle getNextPartcileEffect() { - - List ls = getParticleList(); - for (int i = 0; i < ls.size(); i++) { - CMIParticle next = ls.get(i); - if (next == null) - continue; - - if (!next.isParticle()) - continue; - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && next.getParticle() == null) - continue; - - if (next.equals(this)) { - if (i == ls.size() - 1) - return ls.get(0); - return ls.get(i + 1); - } - } - return this; - } - - public CMIParticle getPrevParticleEffect() { - List ls = getParticleList(); - for (int i = 0; i < ls.size(); i++) { - CMIParticle next = ls.get(i); - - if (next == null) - continue; - - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && next.getParticle() == null) - continue; - - if (!next.isParticle()) - continue; - if (next.equals(this)) { - if (i == 0) - return ls.get(ls.size() - 1); - return ls.get(i - 1); - } - } - return this; - } - - public String getSecondaryName() { - return secondaryName == null ? "" : secondaryName; - } - - public void setSecondaryName(String secondaryName) { - this.secondaryName = secondaryName; - } - - public org.bukkit.Particle getParticle() { - if (Version.isCurrentEqualOrLower(Version.v1_8_R3)) - return null; - if (particle == null) { - String n = this.toString().replace("_", "").toLowerCase(); - for (org.bukkit.Particle one : org.bukkit.Particle.values()) { - String name = one.toString().toLowerCase().replace("_", ""); - if (name.equalsIgnoreCase(n)) { - particle = one; - break; - } - } - } - if (particle == null) { - String n = name().replace("_", "").toLowerCase(); - for (org.bukkit.Particle one : org.bukkit.Particle.values()) { - String name = one.toString().toLowerCase().replace("_", ""); - if (name.equalsIgnoreCase(n)) { - particle = one; - break; - } - } - } - if (particle == null) { - String n = getName().replace("_", "").toLowerCase(); - for (org.bukkit.Particle one : org.bukkit.Particle.values()) { - String name = one.toString().toLowerCase().replace("_", ""); - if (name.equalsIgnoreCase(n)) { - particle = one; - break; - } - } - } - if (particle == null) { - String n = getSecondaryName().replace("_", "").toLowerCase(); - if (!n.isEmpty()) { - for (org.bukkit.Particle one : org.bukkit.Particle.values()) { - String name = one.toString().toLowerCase().replace("_", ""); - if (name.equalsIgnoreCase(n)) { - particle = one; - break; - } - } - - if (particle == null) - for (org.bukkit.Particle one : org.bukkit.Particle.values()) { - String name = one.toString().toLowerCase().replace("_", ""); - if (name.contains(n)) { - particle = one; - break; - } - } - } - } - return particle == null ? null : (org.bukkit.Particle) particle; - } - - public Object getEnumParticle() { - return EnumParticle; - } - - public void setEnumParticle(Object enumParticle) { - EnumParticle = enumParticle; - } - - public int[] getExtra() { - return extra; - } - - public void setExtra(int[] extra) { - this.extra = extra; - } - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java b/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java deleted file mode 100644 index ee3f57717..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMIEntityType.java +++ /dev/null @@ -1,382 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; - -import org.bukkit.block.CreatureSpawner; -import org.bukkit.entity.EntityType; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.BlockStateMeta; - -public enum CMIEntityType { - - DROPPED_ITEM(1, "Item"), - EXPERIENCE_ORB(2, "Experience Orb"), - AREA_EFFECT_CLOUD(3, "Area Effect Cloud"), - ELDER_GUARDIAN(4, "Elder Guardian", Arrays.asList( - "MWM3OTc0ODJhMTRiZmNiODc3MjU3Y2IyY2ZmMWI2ZTZhOGI4NDEzMzM2ZmZiNGMyOWE2MTM5Mjc4YjQzNmIifX19")), - WITHER_SKELETON(5, "Wither Skeleton", Arrays.asList( - "Nzk1M2I2YzY4NDQ4ZTdlNmI2YmY4ZmIyNzNkNzIwM2FjZDhlMWJlMTllODE0ODFlYWQ1MWY0NWRlNTlhOCJ9fX0=", - "NDk2YmM4ZWJkNGUxM2Y0OTZkOGQ3NGM1NjVkZDU2ZTk5YTRhZjJlMmVhN2EyN2E5NmMxYWJkMjg0MTg0YiJ9fX0=", - "ZjVlYzk2NDY0NWE4ZWZhYzc2YmUyZjE2MGQ3Yzk5NTYzNjJmMzJiNjUxNzM5MGM1OWMzMDg1MDM0ZjA1MGNmZiJ9fX0=")), - STRAY(6, "Stray", Arrays.asList( - "NzhkZGY3NmU1NTVkZDVjNGFhOGEwYTVmYzU4NDUyMGNkNjNkNDg5YzI1M2RlOTY5ZjdmMjJmODVhOWEyZDU2In19fQ==")), - EGG(7, "Thrown Egg"), - LEASH_HITCH(8, "Leash Knot"), - PAINTING(9, "Painting"), - ARROW(10, "Arrow"), - SNOWBALL(11, "Snowball"), - FIREBALL(12, "Fireball"), - SMALL_FIREBALL(13, "Small Fireball"), - ENDER_PEARL(14, "Thrown Ender Pearl"), - ENDER_SIGNAL(15, "End Signal"), - SPLASH_POTION(16, "Splash Potion"), - THROWN_EXP_BOTTLE(17, "Thrown Bottle o' Enchanting"), - ITEM_FRAME(18, "Item Frame"), - WITHER_SKULL(19, "Wither Skull"), - PRIMED_TNT(20, "Primed TNT"), - FALLING_BLOCK(21, "Falling Block"), - FIREWORK(22, "Firework Rocket"), - HUSK(23, "Husk", Arrays.asList( - "Nzc3MDY4MWQxYTI1NWZiNGY3NTQ3OTNhYTA1NWIyMjA0NDFjZGFiOWUxMTQxZGZhNTIzN2I0OTkzMWQ5YjkxYyJ9fX0=")), - SPECTRAL_ARROW(24, "Spectral Arrow"), - SHULKER_BULLET(25, "Shulker Bullet"), - DRAGON_FIREBALL(26, "Dragon Fireball"), - ZOMBIE_VILLAGER(27, "Zombie Villager", Arrays.asList( - "NDRmMDhlYmQ0ZTI1Y2RhM2FkZTQ1Yjg2MzM3OGFkMzc3ZjE4YzUxMGRiNGQyOGU4MmJiMjQ0NTE0MzliMzczNCJ9fX0=", - "OTYxZjE5ZmZkOGFlNDI1NzkyYzRiMTgxNzU2YWRmZjhkNDgxNzRhZWVmNThhMGYzMjdhMjhjNzQyYzcyNDQyIn19fQ==", - "NTI4YzJiYWQ1Mzg5Y2IzNTkyYjU2NWIzYzQ3ZWNjMTg5ZTA1NDJhODc4MzUwMjhkNjE0OGJiZTMzNDU2NDUifX19", - "YTE2MTU1ZmNmMzY2Y2Y0ZTA2Y2U1ZGZmYzQ4Y2E1NGU4ZWE0OGRmZTUyNTM1OGI2MTJkYzQ0ZmQ0MzIifX19", - "Y2ZmMDQ4MmZkMzJmYWIyY2U5ZjVmYTJlMmQ5YjRkYzc1NjFkYTQyMjE1MmM5OWZjODA0YjkxMzljYWYyNTZiIn19fQ==", - "MzdlODM4Y2NjMjY3NzZhMjE3YzY3ODM4NmY2YTY1NzkxZmU4Y2RhYjhjZTljYTRhYzZiMjgzOTdhNGQ4MWMyMiJ9fX0=")), - SKELETON_HORSE(28, "Skeleton Horse", Arrays.asList( - "NDdlZmZjZTM1MTMyYzg2ZmY3MmJjYWU3N2RmYmIxZDIyNTg3ZTk0ZGYzY2JjMjU3MGVkMTdjZjg5NzNhIn19fQ==")), - ZOMBIE_HORSE(29, "Zombie Horse", Arrays.asList( - "ZDIyOTUwZjJkM2VmZGRiMThkZTg2ZjhmNTVhYzUxOGRjZTczZjEyYTZlMGY4NjM2ZDU1MWQ4ZWI0ODBjZWVjIn19fQ==")), - ARMOR_STAND(30, "Armor Stand"), - DONKEY(31, "Donkey", Arrays.asList( - "ZGZiNmMzYzA1MmNmNzg3ZDIzNmEyOTE1ZjgwNzJiNzdjNTQ3NDk3NzE1ZDFkMmY4Y2JjOWQyNDFkODhhIn19fQ==")), - MULE(32, "Mule", Arrays.asList( - "YTA0ODZhNzQyZTdkZGEwYmFlNjFjZTJmNTVmYTEzNTI3ZjFjM2IzMzRjNTdjMDM0YmI0Y2YxMzJmYjVmNWYifX19")), - EVOKER_FANGS(33, "Evoker Fangs"), - EVOKER(34, "Evoker", Arrays.asList( - "YTAwZDNmZmYxNmMyZGNhNTliOWM1OGYwOTY1MjVjODY5NzExNjZkYmFlMTMzYjFiMDUwZTVlZTcxNjQ0MyJ9fX0=")), - VEX(35, "Vex", Arrays.asList( - "NWU3MzMwYzdkNWNkOGEwYTU1YWI5ZTk1MzIxNTM1YWM3YWUzMGZlODM3YzM3ZWE5ZTUzYmVhN2JhMmRlODZiIn19fQ==")), - VINDICATOR(36, "Vindicator", Arrays.asList( - "YTAwZDNmZmYxNmMyZGNhNTliOWM1OGYwOTY1MjVjODY5NzExNjZkYmFlMTMzYjFiMDUwZTVlZTcxNjQ0MyJ9fX0=")), - ILLUSIONER(37, "Illusioner", Arrays.asList( - "NTEyNTEyZTdkMDE2YTIzNDNhN2JmZjFhNGNkMTUzNTdhYjg1MTU3OWYxMzg5YmQ0ZTNhMjRjYmViODhiIn19fQ==", - "MmYyODgyZGQwOTcyM2U0N2MwYWI5NjYzZWFiMDgzZDZhNTk2OTI3MzcwNjExMGM4MjkxMGU2MWJmOGE4ZjA3ZSJ9fX0=")), - MINECART_COMMAND(40, "Minecart with Command Block"), - BOAT(41, "Boat"), - MINECART(42, "Minecart"), - MINECART_CHEST(43, "Minecart with Chest"), - MINECART_FURNACE(44, "Minecart with Furnace"), - MINECART_TNT(45, "Minecart with TNT"), - MINECART_HOPPER(46, "Minecart with Hopper"), - MINECART_MOB_SPAWNER(47, "Minecart with Spawner"), - CREEPER(50, "Creeper", Arrays.asList( - "ZjQyNTQ4MzhjMzNlYTIyN2ZmY2EyMjNkZGRhYWJmZTBiMDIxNWY3MGRhNjQ5ZTk0NDQ3N2Y0NDM3MGNhNjk1MiJ9fX0=", - "YTNmMTcyZDI5Y2Y5NGJjODk1NjA4YjdhNWRjMmFmMGRlNDljNzg4ZDViZWNiMTYwNWYxZjUzNDg4YTAxNzBiOCJ9fX0=")), - SKELETON(51, "Skeleton", Arrays.asList( - "MzAxMjY4ZTljNDkyZGExZjBkODgyNzFjYjQ5MmE0YjMwMjM5NWY1MTVhN2JiZjc3ZjRhMjBiOTVmYzAyZWIyIn19fQ==", - "Yjk1MDc4ZDNiM2IxNzAxZDQ1NzI5ZDNhMTQyMjQ2N2IyOWRiYjJlMWE5MTI4MTMzYTJmMTYzZWJlODVkMmRiOSJ9fX0=")), - SPIDER(52, "Spider", Arrays.asList( - "Y2Q1NDE1NDFkYWFmZjUwODk2Y2QyNThiZGJkZDRjZjgwYzNiYTgxNjczNTcyNjA3OGJmZTM5MzkyN2U1N2YxIn19fQ==")), - GIANT(53, "Giant"), - ZOMBIE(54, "Zombie", Arrays.asList( - "NTZmYzg1NGJiODRjZjRiNzY5NzI5Nzk3M2UwMmI3OWJjMTA2OTg0NjBiNTFhNjM5YzYwZTVlNDE3NzM0ZTExIn19fQ==", - "MzExZGQ5MWVlNGQzMWRkZDU5MWQyODMyZWExZWMwODBmMmVkZWQzM2FiODllZTFkYjhiMDRiMjZhNjhhIn19fQ==")), - SLIME(55, "Slime", Arrays.asList( - "MTZhZDIwZmMyZDU3OWJlMjUwZDNkYjY1OWM4MzJkYTJiNDc4YTczYTY5OGI3ZWExMGQxOGM5MTYyZTRkOWI1In19fQ==")), - GHAST(56, "Ghast", Arrays.asList( - "OGI2YTcyMTM4ZDY5ZmJiZDJmZWEzZmEyNTFjYWJkODcxNTJlNGYxYzk3ZTVmOTg2YmY2ODU1NzFkYjNjYzAifX19")), - PIG_ZOMBIE(57, "Zombie Pigman", Arrays.asList( - "NzRlOWM2ZTk4NTgyZmZkOGZmOGZlYjMzMjJjZDE4NDljNDNmYjE2YjE1OGFiYjExY2E3YjQyZWRhNzc0M2ViIn19fQ==")), - ENDERMAN(58, "Enderman", Arrays.asList( - "N2E1OWJiMGE3YTMyOTY1YjNkOTBkOGVhZmE4OTlkMTgzNWY0MjQ1MDllYWRkNGU2YjcwOWFkYTUwYjljZiJ9fX0=")), - CAVE_SPIDER(59, "Cave Spider", Arrays.asList( - "NDE2NDVkZmQ3N2QwOTkyMzEwN2IzNDk2ZTk0ZWViNWMzMDMyOWY5N2VmYzk2ZWQ3NmUyMjZlOTgyMjQifX19")), - SILVERFISH(60, "Silverfish", Arrays.asList( - "ZGE5MWRhYjgzOTFhZjVmZGE1NGFjZDJjMGIxOGZiZDgxOWI4NjVlMWE4ZjFkNjIzODEzZmE3NjFlOTI0NTQwIn19fQ==")), - BLAZE(61, "Blaze", Arrays.asList( - "Yjc4ZWYyZTRjZjJjNDFhMmQxNGJmZGU5Y2FmZjEwMjE5ZjViMWJmNWIzNWE0OWViNTFjNjQ2Nzg4MmNiNWYwIn19fQ==")), - MAGMA_CUBE(62, "Magma Cube", Arrays.asList( - "Mzg5NTdkNTAyM2M5MzdjNGM0MWFhMjQxMmQ0MzQxMGJkYTIzY2Y3OWE5ZjZhYjM2Yjc2ZmVmMmQ3YzQyOSJ9fX0=")), - ENDER_DRAGON(63, "Ender Dragon"), - WITHER(64, "Wither", Arrays.asList( - "ZGRhZmIyM2VmYzU3ZjI1MTg3OGU1MzI4ZDExY2IwZWVmODdiNzljODdiMjU0YTdlYzcyMjk2ZjkzNjNlZjdjIn19fQ==", - "M2U0ZjQ5NTM1YTI3NmFhY2M0ZGM4NDEzM2JmZTgxYmU1ZjJhNDc5OWE0YzA0ZDlhNGRkYjcyZDgxOWVjMmIyYiJ9fX0=", - "OTY0ZTFjM2UzMTVjOGQ4ZmZmYzM3OTg1YjY2ODFjNWJkMTZhNmY5N2ZmZDA3MTk5ZThhMDVlZmJlZjEwMzc5MyJ9fX0=", - "Y2RmNzRlMzIzZWQ0MTQzNjk2NWY1YzU3ZGRmMjgxNWQ1MzMyZmU5OTllNjhmYmI5ZDZjZjVjOGJkNDEzOWYifX19", - "YTQzNTE2NGMwNWNlYTI5OWEzZjAxNmJiYmVkMDU3MDZlYmI3MjBkYWM5MTJjZTQzNTFjMjI5NjYyNmFlY2Q5YSJ9fX0=")), - BAT(65, "Bat", Arrays.asList( - "NGNmMWIzYjNmNTM5ZDJmNjNjMTcyZTk0Y2FjZmFhMzkxZThiMzg1Y2RkNjMzZjNiOTkxYzc0ZTQ0YjI4In19fQ==")), - WITCH(66, "Witch", Arrays.asList( - "ODllOGI1ZjE1YTliMjlhMWUzODljOTUyMThmZDM3OTVmMzI4NzJlNWFlZTk0NjRhNzY0OTVjNTI3ZDIyNDUifX19")), - ENDERMITE(67, "Endermite", Arrays.asList( - "ODRhYWZmYTRjMDllMmVhZmI4NWQzNTIyMTIyZGIwYWE0NTg3NGJlYTRlM2Y1ZTc1NjZiNGQxNjZjN2RmOCJ9fX0=")), - GUARDIAN(68, "Guardian", Arrays.asList( - "ZGZiNjc1Y2I1YTdlM2ZkMjVlMjlkYTgyNThmMjRmYzAyMGIzZmE5NTAzNjJiOGJjOGViMjUyZTU2ZTc0In19fQ==")), - SHULKER(69, "Shulker", Arrays.asList( - "MWU3MzgzMmUyNzJmODg0NGM0NzY4NDZiYzQyNGEzNDMyZmI2OThjNThlNmVmMmE5ODcxYzdkMjlhZWVhNyJ9fX0=")), - PIG(90, "Pig", Arrays.asList( - "NjIxNjY4ZWY3Y2I3OWRkOWMyMmNlM2QxZjNmNGNiNmUyNTU5ODkzYjZkZjRhNDY5NTE0ZTY2N2MxNmFhNCJ9fX0=", - "YzNhYmQ0NGFlNjdkOWM5MjU0ZDE3N2U5NjU4ZGE4NDg0MzM4OWQ1ZTFmZmQyYWYxZmI1MTIxN2M3NWMyOTgifX19")), - SHEEP(91, "Sheep", Arrays.asList( - "MjZhNDExMmRmMWU0YmNlMmE1ZTI4NDE3ZjNhYWZmNzljZDY2ZTg4NWMzNzI0NTU0MTAyY2VmOGViOCJ9fX0=", - "ZjMxZjljY2M2YjNlMzJlY2YxM2I4YTExYWMyOWNkMzNkMThjOTVmYzczZGI4YTY2YzVkNjU3Y2NiOGJlNzAifX19", - "Y2UxYWM2ODM5OTNiZTM1NTEyZTFiZTMxZDFmNGY5OGU1ODNlZGIxNjU4YTllMjExOTJjOWIyM2I1Y2NjZGMzIn19fQ==", - "ODM5YWY0NzdlYjYyNzgxNWY3MjNhNTY2MjU1NmVjOWRmY2JhYjVkNDk0ZDMzOGJkMjE0MjMyZjIzZTQ0NiJ9fX0=", - "YWU1Mjg2N2FmZWYzOGJiMTRhMjZkMTQyNmM4YzBmMTE2YWQzNDc2MWFjZDkyZTdhYWUyYzgxOWEwZDU1Yjg1In19fQ==", - "MmFjNzRhMmI5YjkxNDUyZTU2ZmExZGRhNWRiODEwNzc4NTZlNDlmMjdjNmUyZGUxZTg0MWU1Yzk1YTZmYzVhYiJ9fX0=", - "ZjA5ODM5N2EyNzBiNGMzZDJiMWU1NzRiOGNmZDNjYzRlYTM0MDkwNjZjZWZlMzFlYTk5MzYzM2M5ZDU3NiJ9fX0=", - "MTgzNjU2NWM3ODk3ZDQ5YTcxYmMxODk4NmQxZWE2NTYxMzIxYTBiYmY3MTFkNDFhNTZjZTNiYjJjMjE3ZTdhIn19fQ==", - "OTJhMjQ0OGY1OGE0OTEzMzI0MzRlODVjNDVkNzg2ZDg3NDM5N2U4MzBhM2E3ODk0ZTZkOTI2OTljNDJiMzAifX19", - "MWM4YTk3YTM4ODU2NTE0YTE2NDEzZTJjOTk1MjEyODlmNGM1MzYzZGM4MmZjOWIyODM0Y2ZlZGFjNzhiODkifX19", - "YTAxNzIxNWM3ZjhkYjgyMDQwYWEyYzQ3Mjk4YjY2NTQxYzJlYjVmN2Y5MzA0MGE1ZDIzZDg4ZjA2ODdkNGIzNCJ9fX0=", - "NDI4N2ViNTAxMzkxZjI3NTM4OWYxNjZlYzlmZWJlYTc1ZWM0YWU5NTFiODhiMzhjYWU4N2RmN2UyNGY0YyJ9fX0=", - "NDZmNmM3ZTdmZDUxNGNlMGFjYzY4NTkzMjI5ZTQwZmNjNDM1MmI4NDE2NDZlNGYwZWJjY2NiMGNlMjNkMTYifX19", - "YTU1YWQ2ZTVkYjU2OTJkODdmNTE1MTFmNGUwOWIzOWZmOWNjYjNkZTdiNDgxOWE3Mzc4ZmNlODU1M2I4In19fQ==", - "ZDllYzIyODE4ZDFmYmZjODE2N2ZiZTM2NzI4YjI4MjQwZTM0ZTE2NDY5YTI5MjlkMDNmZGY1MTFiZjJjYTEifX19", - "MzI2NTIwODNmMjhlZDFiNjFmOWI5NjVkZjFhYmYwMTBmMjM0NjgxYzIxNDM1OTUxYzY3ZDg4MzY0NzQ5ODIyIn19fQ==")), - COW(92, "Cow", Arrays.asList( - "NWQ2YzZlZGE5NDJmN2Y1ZjcxYzMxNjFjNzMwNmY0YWVkMzA3ZDgyODk1ZjlkMmIwN2FiNDUyNTcxOGVkYzUifX19", - "YzVhOWNkNThkNGM2N2JjY2M4ZmIxZjVmNzU2YTJkMzgxYzlmZmFjMjkyNGI3ZjRjYjcxYWE5ZmExM2ZiNWMifX19")), - CHICKEN(93, "Chicken", Arrays.asList( - "MTYzODQ2OWE1OTljZWVmNzIwNzUzNzYwMzI0OGE5YWIxMWZmNTkxZmQzNzhiZWE0NzM1YjM0NmE3ZmFlODkzIn19fQ==")), - SQUID(94, "Squid", Arrays.asList( - "MDE0MzNiZTI0MjM2NmFmMTI2ZGE0MzRiODczNWRmMWViNWIzY2IyY2VkZTM5MTQ1OTc0ZTljNDgzNjA3YmFjIn19fQ==")), - WOLF(95, "Wolf", Arrays.asList( - "ZTk1Y2JiNGY3NWVhODc2MTdmMmY3MTNjNmQ0OWRhYzMyMDliYTFiZDRiOTM2OTY1NGIxNDU5ZWExNTMxNyJ9fX0=")), - MUSHROOM_COW(96, "Mushroom Cow", "Mooshroom", Arrays.asList( - "ZDBiYzYxYjk3NTdhN2I4M2UwM2NkMjUwN2EyMTU3OTEzYzJjZjAxNmU3YzA5NmE0ZDZjZjFmZTFiOGRiIn19fQ==")), - SNOWMAN(97, "Snowman", Arrays.asList( - "MWZkZmQxZjc1MzhjMDQwMjU4YmU3YTkxNDQ2ZGE4OWVkODQ1Y2M1ZWY3MjhlYjVlNjkwNTQzMzc4ZmNmNCJ9fX0=")), - OCELOT(98, "Ocelot", "Cat", Arrays.asList( - "YWI4ODFjMzliM2FmZGNjNzlmOTFmZTVkZTNjZGQwMTViYzMzNTM4NDNmNTkxZjRkMjNjZDMwMjdkZTRlNiJ9fX0=", - "YTc1NWU3ZGYwNGQxOGIzMWQ2M2MxN2Y0YTdiNGM3MzkyNGJkNjI2NWRhNjllMTEzZWRkZDk3NTE2ZmM3In19fQ==", - "ZjJhNjYyZjJhZTdkZWJlZTY1MjkyYzJiZjQyZmJiMDliOTdiMmZmYmRiMjcwNTIwYzJkYjk2ZTUxZDg5NDUifX19", - "NTY1N2NkNWMyOTg5ZmY5NzU3MGZlYzRkZGNkYzY5MjZhNjhhMzM5MzI1MGMxYmUxZjBiMTE0YTFkYjEifX19")), - IRON_GOLEM(99, "Iron Golem", Arrays.asList( - "ODkwOTFkNzllYTBmNTllZjdlZjk0ZDdiYmE2ZTVmMTdmMmY3ZDQ1NzJjNDRmOTBmNzZjNDgxOWE3MTQifX19")), - HORSE(100, "Horse", Arrays.asList( - "NjE5MDI4OTgzMDg3MzBjNDc0NzI5OWNiNWE1ZGE5YzI1ODM4YjFkMDU5ZmU0NmZjMzY4OTZmZWU2NjI3MjkifX19")), - RABBIT(101, "Rabbit", Arrays.asList( - "Y2I4Y2ZmNGIxNWI4Y2EzN2UyNTc1MGYzNDU3MThmMjg5Y2IyMmM1YjNhZDIyNjI3YTcxMjIzZmFjY2MifX19", - "NzJjNTgxMTZhMTQ3ZDFhOWEyNjI2OTIyNGE4YmUxODRmZThlNWYzZjNkZjliNjE3NTEzNjlhZDg3MzgyZWM5In19fQ==", - "Yzk3N2EzMjY2YmYzYjllYWYxN2U1YTAyZWE1ZmJiNDY4MDExNTk4NjNkZDI4OGI5M2U2YzEyYzljYiJ9fX0=")), - POLAR_BEAR(102, "Polar Bear", Arrays.asList( - "ZDQ2ZDIzZjA0ODQ2MzY5ZmEyYTM3MDJjMTBmNzU5MTAxYWY3YmZlODQxOTk2NjQyOTUzM2NkODFhMTFkMmIifX19")), - LLAMA(103, "Llama", Arrays.asList( - "ODAyNzdlNmIzZDlmNzgxOWVmYzdkYTRiNDI3NDVmN2FiOWE2M2JhOGYzNmQ2Yjg0YTdhMjUwYzZkMWEzNThlYiJ9fX0=", - "Y2YyNGU1NmZkOWZmZDcxMzNkYTZkMWYzZTJmNDU1OTUyYjFkYTQ2MjY4NmY3NTNjNTk3ZWU4MjI5OWEifX19", - "YzJiMWVjZmY3N2ZmZTNiNTAzYzMwYTU0OGViMjNhMWEwOGZhMjZmZDY3Y2RmZjM4OTg1NWQ3NDkyMTM2OCJ9fX0=", - "NGQ2N2ZkNGJmZjI5MzI2OWNiOTA4OTc0ZGNhODNjMzM0ODVlNDM1ZWQ1YThlMWRiZDY1MjFjNjE2ODcxNDAifX19")), - LLAMA_SPIT(104, "Llama Spit"), - PARROT(105, "Parrot", Arrays.asList( - "YTRiYThkNjZmZWNiMTk5MmU5NGI4Njg3ZDZhYjRhNTMyMGFiNzU5NGFjMTk0YTI2MTVlZDRkZjgxOGVkYmMzIn19fQ==", - "Yjc4ZTFjNWY0OGE3ZTEyYjI2Mjg1MzU3MWVmMWY1OTdhOTJlZjU4ZGE4ZmFhZmUwN2JiN2MwZTY5ZTkzIn19fQ==", - "YWI5YTM2YzU1ODlmM2EyZTU5YzFjYWE5YjNiODhmYWRhNzY3MzJiZGI0YTc5MjYzODhhOGMwODhiYmJjYiJ9fX0=", - "M2Q2ZjRhMjFlMGQ2MmFmODI0Zjg3MDhhYzYzNDEwZjFhMDFiYmI0MWQ3ZjRhNzAyZDk0NjljNjExMzIyMiJ9fX0=", - "MmI5NGYyMzZjNGE2NDJlYjJiY2RjMzU4OWI5YzNjNGEwYjViZDVkZjljZDVkNjhmMzdmOGM4M2Y4ZTNmMSJ9fX0=", - "ZGFjNjcwM2RlZDQ2ZDkzOWE2MjBmZTIyYzQzZTE4Njc0ZTEzZDIzYzk3NDRiZTAzNmIzNDgzYzFkMWNkZCJ9fX0=", - "ZjBiZmE4NTBmNWRlNGIyOTgxY2NlNzhmNTJmYzJjYzdjZDdiNWM2MmNhZWZlZGRlYjljZjMxMWU4M2Q5MDk3In19fQ==", - "ZjhhODJjOGI3NWRkMWMyY2U4MTMzYzBiYTkzOWI4YzUyZTQ3ZDNlYzM3NDk1MGY0N2RkZGJiZTM0NWUyMCJ9fX0=", - "YWNhNTgwYjA1MWM2M2JlMjlkYTU0NWE5YWE3ZmY3ZTEzNmRmNzdhODFjNjdkYzFlZTllNjE3MGMxNGZiMzEwIn19fQ==")), - VILLAGER(120, "Villager", Arrays.asList( - "ODIyZDhlNzUxYzhmMmZkNGM4OTQyYzQ0YmRiMmY1Y2E0ZDhhZThlNTc1ZWQzZWIzNGMxOGE4NmU5M2IifX19")), - ENDER_CRYSTAL(200, "End Crystal"), - TURTLE(901, "Turtle", Arrays.asList( - "MGE0MDUwZTdhYWNjNDUzOTIwMjY1OGZkYzMzOWRkMTgyZDdlMzIyZjlmYmNjNGQ1Zjk5YjU3MThhIn19fQ==")), - PHANTOM(902, "Phantom", Arrays.asList( - "NDExZDI1YmNkYWJhZmFkNWZkNmUwMTBjNWIxY2Y3YTAwYzljY2E0MGM1YTQ2NzQ3ZjcwNmRjOWNiM2EifX19", - "YWQyZmE1NjE4NDQ3NzYyZTI2MTExZTA2MGRjNTkzZWE2MjJkNWRkZmMzODVkN2U0MjUzMmU0NjMyN2Y4MDdjMCJ9fX0=")), - TRIDENT(903, "Trident"), - COD(904, "Cod", Arrays.asList( - "NmY5OWI1ODBkNDVhNzg0ZTdhOTY0ZTdkM2IxZjk3Y2VjZTc0OTExMTczYmQyMWMxZDdjNTZhY2RjMzg1ZWQ1In19fQ==")), - SALMON(905, "Salmon", Arrays.asList( - "YWRmYzU3ZDA5MDU5ZTQ3OTlmYTkyYzE1ZTI4NTEyYmNmYWExMzE1NTc3ZmUzYTI3YWVkMzg5ZTRmNzUyMjg5YSJ9fX0=")), - PUFFERFISH(906, "Pufferfish", Arrays.asList( - "YTk1NTkzODg5OTNmZTc4MmY2N2JkNThkOThjNGRmNTZiY2Q0MzBlZGNiMmY2NmVmNTc3N2E3M2MyN2RlMyJ9fX0=")), - TROPICAL_FISH(907, "Tropical Fish", Arrays.asList( - "MzZkMTQ5ZTRkNDk5OTI5NjcyZTI3Njg5NDllNjQ3Nzk1OWMyMWU2NTI1NDYxM2IzMjdiNTM4ZGYxZTRkZiJ9fX0=")), - DROWNED(908, "Drowned", Arrays.asList( - "YzNmN2NjZjYxZGJjM2Y5ZmU5YTYzMzNjZGUwYzBlMTQzOTllYjJlZWE3MWQzNGNmMjIzYjNhY2UyMjA1MSJ9fX0=", - "MWY4YmFhNDhiOGY1MTE5OTBlNDdkYjk2ODMyNGMxNTJiZDExNjc3MzFkZGYwMzQ1MzAwNDQ3MzVhNmJkMmVkNCJ9fX0=", - "YzFhNzMyNTI0MDFhNmU5NDZmNjFkYmFjMGUwMjdkMTgzZTBhY2U1ODc1MmZhMTVhNjRkMjQ0OWZjZjUwODdiNyJ9fX0=", - "Yzg0ZGY3OWM0OTEwNGIxOThjZGFkNmQ5OWZkMGQwYmNmMTUzMWM5MmQ0YWI2MjY5ZTQwYjdkM2NiYmI4ZTk4YyJ9fX0=", - "ZmIxNTMxYzA0ZTI1ZDdmYTY0NTc2OTgyNjg0OTFjYjg5NmQzMzAyZDI2ODg0ZmNmZGYxYTBiMmY5MmQ3N2M4ZiJ9fX0=", - "NTZkYWY1MGVhZjc2YzNhNmQ1YWQzOWM5NjZmMjk4NzdiOTFkOTUwZGQxZTM3MTIyZTljODE5NTg1Yzg5ZDkyZSJ9fX0=")), - DOLPHIN(909, "Dolphin", Arrays.asList( - "OGU5Njg4Yjk1MGQ4ODBiNTViN2FhMmNmY2Q3NmU1YTBmYTk0YWFjNmQxNmY3OGU4MzNmNzQ0M2VhMjlmZWQzIn19fQ==")), - LINGERING_POTION(910, "Lingering Potion"), - FISHING_HOOK(911, "Fishing Hook"), - LIGHTNING(912, "Lightning Bolt"), - WEATHER(913, "Weather"), - PLAYER(914, "Player"), - COMPLEX_PART(915, "Complex Part"), - TIPPED_ARROW(916, "Tipped Arrow"), - - PANDA(917, "Panda", Arrays.asList( - "ZDE4OGM5ODBhYWNmYTk0Y2YzMzA4ODUxMmIxYjk1MTdiYTgyNmIxNTRkNGNhZmMyNjJhZmY2OTc3YmU4YSJ9fX0=")), - PILLAGER(918, "Pillager", Arrays.asList( - "NGFlZTZiYjM3Y2JmYzkyYjBkODZkYjVhZGE0NzkwYzY0ZmY0NDY4ZDY4Yjg0OTQyZmRlMDQ0MDVlOGVmNTMzMyJ9fX0=")), - RAVAGER(919, "Ravager", Arrays.asList( - "MWNiOWYxMzlmOTQ4OWQ4NmU0MTBhMDZkOGNiYzY3MGM4MDI4MTM3NTA4ZTNlNGJlZjYxMmZlMzJlZGQ2MDE5MyJ9fX0=", - "M2I2MjUwMWNkMWI4N2IzN2Y2MjgwMTgyMTBlYzU0MDBjYjY1YTRkMWFhYjc0ZTZhM2Y3ZjYyYWE4NWRiOTdlZSJ9fX0=")), - TRADER_LLAMA(920, "Trader Llama", Arrays.asList( - "ODQyNDc4MGIzYzVjNTM1MWNmNDlmYjViZjQxZmNiMjg5NDkxZGY2YzQzMDY4M2M4NGQ3ODQ2MTg4ZGI0Zjg0ZCJ9fX0=", - "NzA4N2E1NTZkNGZmYTk1ZWNkMjg0NGYzNTBkYzQzZTI1NGU1ZDUzNWZhNTk2ZjU0MGQ3ZTc3ZmE2N2RmNDY5NiJ9fX0=", - "YmU0ZDhhMGJjMTVmMjM5OTIxZWZkOGJlMzQ4MGJhNzdhOThlZTdkOWNlMDA3MjhjMGQ3MzNmMGEyZDYxNGQxNiJ9fX0=")), - WANDERING_TRADER(921, "Wandering Trader", Arrays.asList( - "NWYxMzc5YTgyMjkwZDdhYmUxZWZhYWJiYzcwNzEwZmYyZWMwMmRkMzRhZGUzODZiYzAwYzkzMGM0NjFjZjkzMiJ9fX0=")), - FOX(922, "Fox", Arrays.asList( - "YjZmZWI3NjFiMmY1OWZhYmU1Y2MzY2M4MmE5MzRiNTM0ZWE5OWVkYjkxMzJjY2RhOWY0ODRiZDU5ODZkNyJ9fX0=", - "MjRhMDM0NzQzNjQzNGViMTNkNTM3YjllYjZiNDViNmVmNGM1YTc4Zjg2ZTkxODYzZWY2MWQyYjhhNTNiODIifX19", - "MTZkYjdkNTA3Mzg5YTE0YmJlYzM5ZGU2OTIyMTY1YjMyZDQzNjU3YmNiNmFhZjRiNTE4MjgyNWIyMmI0In19fQ==")), - CAT(923, "Cat", Arrays.asList( - "N2M5Yjc0MDllN2I1MzgzYzE5YjM2MmIyYTBjYjQzZDUwOTNiMTNlMmIyMzRlOGExODkxNTYzZTU1ZWFlOWQ2OCJ9fX0=", - "NTg4MDNmMDI3MGY4Y2RmNGUwZmU5NzMyZDQ5NjdjY2NjMGEyZjRmY2QxMThjZDE1MDAwOTc5YjE4ODg1MTQ0ZiJ9fX0=")), - BEE(924, "Bee", Arrays.asList( - "OTQ3MzIyZjgzMWUzYzE2OGNmYmQzZTI4ZmU5MjUxNDRiMjYxZTc5ZWIzOWM3NzEzNDlmYWM1NWE4MTI2NDczIn19fQ==", - "OTlkYzNmMDBlY2FiMjI0OWJiNmExNmM4YzUxMTVjZWI5ZjIzMjA1YTBkNTVjYzBlOWJhYmQyNTYyZjc5NTljNCJ9fX0==", - "ZTZiNzRlMDUyYjc0Mjg4Nzk5YmE2ZDlmMzVjNWQwMjIxY2Y4YjA0MzMxNTQ3ZWMyZjY4ZDczNTk3YWUyYzliIn19fQ==", - "YmIxNzc3NDY2MjUxMmQ3ODdlZjc3YjFhNDZhMDRlMmM2ZmQ2Nzc5NGJmN2Y3Nzk1NjZlYjIxYzgxNDNhYWQ5ZSJ9fX0=")), - - ZOMBIFIED_PIGLIN(929, "Zombified Piglin", Arrays.asList("N2VhYmFlY2M1ZmFlNWE4YTQ5Yzg4NjNmZjQ4MzFhYWEyODQxOThmMWEyMzk4ODkwYzc2NWUwYThkZTE4ZGE4YyJ9fX0=")), - HOGLIN(925, "Hoglin", Arrays.asList("OWJiOWJjMGYwMWRiZDc2MmEwOGQ5ZTc3YzA4MDY5ZWQ3Yzk1MzY0YWEzMGNhMTA3MjIwODU2MWI3MzBlOGQ3NSJ9fX0=")), - PIGLIN(926, "Piglin", Arrays.asList("OWYxODEwN2QyNzVmMWNiM2E5Zjk3M2U1OTI4ZDU4NzlmYTQwMzI4ZmYzMjU4MDU0ZGI2ZGQzZTdjMGNhNjMzMCJ9fX0=")), - STRIDER(927, "Strider", Arrays.asList("MThhOWFkZjc4MGVjN2RkNDYyNWM5YzA3NzkwNTJlNmExNWE0NTE4NjY2MjM1MTFlNGM4MmU5NjU1NzE0YjNjMSJ9fX0=")), - ZOGLIN(928, "Zoglin", Arrays.asList("ZTY3ZTE4NjAyZTAzMDM1YWQ2ODk2N2NlMDkwMjM1ZDg5OTY2NjNmYjllYTQ3NTc4ZDNhN2ViYmM0MmE1Y2NmOSJ9fX0=")), - - // 1.16.2 - PIGLIN_BRUTE(929, "Piglin Brute", Arrays.asList("M2UzMDBlOTAyNzM0OWM0OTA3NDk3NDM4YmFjMjllM2E0Yzg3YTg0OGM1MGIzNGMyMTI0MjcyN2I1N2Y0ZTFjZiJ9fX0=")), - - // if possible we can remove this string for each texture to save up some space - // eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUv - UNKNOWN(999, "Unknown"); - - private int id; - private String name; - private String secondaryName; - EntityType type = null; - public static HashMap cache = new HashMap(); - static HashMap byName = new HashMap(); - - static { - for (CMIEntityType one : CMIEntityType.values()) { - byName.put(one.toString().replace("_", "").toLowerCase(), one); - byName.put(one.getName().replace("_", "").replace(" ", "").toLowerCase(), one); - byName.put(String.valueOf(one.getId()), one); - if (one.secondaryName != null) - byName.put(one.secondaryName.replace("_", "").replace(" ", "").toLowerCase(), one); - } - } - - CMIEntityType(int id, String name, List headTextures) { - this(id, name, null, headTextures); - } - - CMIEntityType(int id, String name) { - this(id, name, null, new ArrayList()); - } - - CMIEntityType(int id, String name, String secondaryName) { - this(id, name, secondaryName, new ArrayList()); - } - - CMIEntityType(int id, String name, String secondaryName, List headTextures) { - this.id = id; - this.name = name; - this.secondaryName = secondaryName; - } - - public int getId() { - return id; - } - - public String getName() { - return name; - } - - public static CMIEntityType getById(int id) { - CMIEntityType ttype = getByName(String.valueOf(id)); - return ttype == null ? CMIEntityType.PIG : ttype; - } - - public static CMIEntityType getByType(EntityType entity) { - return getByName(entity.toString()); - } - - public static CMIEntityType getByItem(ItemStack item) { - if (item == null) - return null; - - if (CMIMaterial.isMonsterEgg(item.getType())) { - String name = item.getType().toString().replace("_SPAWN_EGG", ""); - return getByName(name); - } - - if (CMIMaterial.SPAWNER.equals(item.getType())) { - if (item.getItemMeta() instanceof BlockStateMeta) { - BlockStateMeta bsm = (BlockStateMeta) item.getItemMeta(); - if (bsm.getBlockState() instanceof CreatureSpawner) { - CreatureSpawner bs = (CreatureSpawner) bsm.getBlockState(); - return CMIEntityType.getByType(bs.getSpawnedType()); - } - } - } - return null; - } - - public static CMIEntityType getByName(String name) { - return byName.get(name.toLowerCase().replace("_", "")); - } - - public EntityType getType() { - if (type != null) - return type; - for (EntityType one : EntityType.values()) { - if (one.toString().equalsIgnoreCase(this.name())) { - type = one; - break; - } - } - return type; - } - - public boolean isAlive() { - return getType() == null ? false : getType().isAlive(); - } - - public boolean isSpawnable() { - return getType() == null ? false : getType().isSpawnable(); - } - - public static String getRealNameByType(EntityType type) { - if (type == null) - return null; - CMIEntityType ctype = CMIEntityType.getByType(type); - if (ctype != null) - return ctype.getName(); - String name = type.name(); - - name = name.toLowerCase().replace("_", " "); - name = name.substring(0, 1).toUpperCase() + name.substring(1); - return name; - } - - public CMIMaterial getSpawnEggMaterial() { - - CMIMaterial m = CMIMaterial.get((this.equals(CMIEntityType.MUSHROOM_COW) ? "Mooshroom".toLowerCase() : this.toString().toLowerCase()) + "_spawn_egg"); - - if (m != null && m.isMonsterEgg()) - return m; - - return null; - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java b/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java deleted file mode 100644 index b396aacbd..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMIItemStack.java +++ /dev/null @@ -1,443 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; - -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.EnchantmentStorageMeta; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionData; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -public class CMIItemStack { - - private int id = 0; - private short data = 0; - private short durability = 0; - private int amount = 0; - - private String bukkitName = null; - private String mojangName = null; - private CMIMaterial cmiMaterial = null; - private Material material = null; - private ItemStack item; - - public CMIItemStack(Material material) { - this.material = material; - this.cmiMaterial = CMIMaterial.get(material); - } - - public CMIItemStack(CMIMaterial cmiMaterial) { - this.cmiMaterial = cmiMaterial; - if (cmiMaterial != null) - this.material = cmiMaterial.getMaterial(); - } - - public CMIItemStack(ItemStack item) { - this.setItemStack(item); - } - - @Override - public CMIItemStack clone() { - CMIItemStack cm = new CMIItemStack(material); - cm.setId(id); - cm.setData(data); - cm.setAmount(amount); - cm.setDurability(durability); - cm.setBukkitName(bukkitName); - cm.setMojangName(mojangName); - cm.setCMIMaterial(cmiMaterial); - cm.setMaterial(material); - cm.setItemStack(this.item != null ? this.item.clone() : null); - return cm; - } - - public int getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public short getData() { - return data; - } - - public boolean isTool() { - return getMaxDurability() > 0; - } - - public short getDurability() { - return this.getItemStack().getDurability(); - } - - public short getMaxDurability() { - return this.material.getMaxDurability(); - } - - public void setData(short data) { -// CMIMaterial got = CMIMaterial.get(id, data); -// if (got != null && got.getLegacyData() == data) - this.data = data; - } - - public CMIItemStack setDisplayName(String name) { - ItemMeta meta = this.getItemStack().getItemMeta(); - if (meta != null) { - if (name == null) { - meta.setDisplayName(null); - } else - meta.setDisplayName(CMIChatColor.translate(name)); - } - this.getItemStack().setItemMeta(meta); - return this; - } - - public String getDisplayName() { - ItemMeta meta = this.getItemStack().getItemMeta(); - return meta == null || meta.getDisplayName() == null || meta.getDisplayName().isEmpty() ? getRealName() : meta.getDisplayName(); - } - - public CMIItemStack addLore(String string) { - if (string == null) - return this; - ItemMeta meta = this.getItemStack().getItemMeta(); - List lore = meta.getLore(); - if (lore == null) - lore = new ArrayList(); - lore.add(CMIChatColor.translate(string)); - meta.setLore(lore); - this.getItemStack().setItemMeta(meta); - return this; - } - - public CMIItemStack clearLore() { - ItemMeta meta = this.getItemStack().getItemMeta(); - List t = new ArrayList(); - meta.setLore(t); - this.getItemStack().setItemMeta(meta); - return this; - } - - public CMIItemStack setLore(List lore) { - if (lore == null || lore.isEmpty()) - return this; - ItemMeta meta = this.getItemStack().getItemMeta(); - List t = new ArrayList(); - for (String one : lore) { - t.add(CMIChatColor.translate(one)); - } - meta.setLore(t); - this.getItemStack().setItemMeta(meta); - return this; - } - - public CMIItemStack addEnchant(Enchantment enchant, Integer level) { - if (enchant == null) - return this; - - if (this.getItemStack().getItemMeta() instanceof EnchantmentStorageMeta) { - EnchantmentStorageMeta meta = (EnchantmentStorageMeta) this.getItemStack().getItemMeta(); - meta.addStoredEnchant(enchant, level, true); - this.getItemStack().setItemMeta(meta); - } else { - ItemMeta meta = this.getItemStack().getItemMeta(); - meta.addEnchant(enchant, level, true); - this.getItemStack().setItemMeta(meta); - } - return this; - } - - public CMIItemStack addEnchant(HashMap enchants) { - if (enchants == null || enchants.isEmpty()) - return this; - for (Entry oneEnch : enchants.entrySet()) { - this.addEnchant(oneEnch.getKey(), oneEnch.getValue()); - } - return this; - } - - public CMIItemStack clearEnchants() { - ItemMeta meta = this.getItemStack().getItemMeta(); - meta.getEnchants().clear(); - this.getItemStack().setItemMeta(meta); - return this; - } - - public List getLore() { - ItemMeta meta = this.getItemStack().getItemMeta(); -// List lore = null; - if (meta != null) { - List lore = meta.getLore(); - if (lore == null) { - lore = new ArrayList(); - meta.setLore(lore); -// this.getItemStack().setItemMeta(meta); - } - - return meta.getLore() == null ? new ArrayList() : meta.getLore(); - } - return new ArrayList(); - } - - public String getRealName() { - return this.getCMIType() == null || this.getCMIType() == CMIMaterial.NONE ? this.getType().name() : this.getCMIType().getName(); -// if (this.getItemStack() != null) { -// -//// String translated = CMI.getInstance().getItemManager().getTranslatedName(this.getItemStack()); -//// if (translated != null) -//// return translated; -// try { -// return CMI.getInstance().getRef().getItemMinecraftName(this.getItemStack()); -// } catch (Exception e) { -// } -// } -// return CMI.getInstance().getItemManager().getRealName(this, true).getName(); - } - - public String getBukkitName() { - return bukkitName == null || bukkitName.isEmpty() ? null : bukkitName; - } - - public void setBukkitName(String bukkitName) { - this.bukkitName = bukkitName; - } - - public String getMojangName() { -// if (getCMIType().isSkull() && !Version.isCurrentEqualOrHigher(Version.v1_13_R1)) -// mojangName = "skull"; -// try { -// mojangName = CMI.getInstance().getRef().getItemMinecraftName(getItemStack()).replace("minecraft:", ""); -// } catch (Exception e) { -// -// } - return mojangName == null || mojangName.isEmpty() ? this.getCMIType().getMaterial().name() : mojangName; - } - - public void setMojangName(String mojangName) { - if (mojangName != null) - this.mojangName = mojangName.replace("minecraft:", ""); - } - - public Material getType() { - if (material == null && cmiMaterial != null) - return cmiMaterial.getMaterial(); - return material; - } - - public CMIMaterial getCMIType() { - return cmiMaterial == null ? CMIMaterial.get(material) : cmiMaterial; - } - - @Deprecated - public Material getMaterial() { - return getType(); - } - - public void setMaterial(Material material) { - this.cmiMaterial = CMIMaterial.get(material); - this.material = material; - } - - public void setCMIMaterial(CMIMaterial material) { - this.cmiMaterial = material; - this.material = material == null ? null : material.getMaterial(); - } - - @SuppressWarnings("deprecation") - public ItemStack getItemStack() { - if (item == null) { - if (cmiMaterial.isMonsterEgg()) { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - this.item = new ItemStack(this.getType()); - this.item.setAmount(this.getAmount()); - } else - this.item = new ItemStack(this.getType(), this.amount == 0 ? 1 : this.amount, data == 0 ? (short) 90 : data); - CMIEntityType type = CMIEntityType.getById(data); - } else { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - this.item = new ItemStack(this.getType()); - this.item.setAmount(this.getAmount()); - } else { - this.item = new ItemStack(this.getType(), this.amount == 0 ? 1 : this.amount, data); - } - } - - if (this.getCMIType().isPotion() || item.getType().name().contains("SPLASH_POTION") || item.getType().name().contains("TIPPED_ARROW")) { - PotionMeta potion = (PotionMeta) item.getItemMeta(); - PotionEffectType effect = PotionEffectType.getById(data); - if (effect != null) { - potion.addCustomEffect(new PotionEffect(effect, 60, 0), true); - } - item.setItemMeta(potion); - item.setDurability((short) 0); - potion = (PotionMeta) item.getItemMeta(); - potion.setDisplayName(this.getRealName()); - item.setItemMeta(potion); - } - } - return item; - } - - @SuppressWarnings("deprecation") - public CMIItemStack setItemStack(ItemStack item) { - this.item = item == null ? null : item; - if (item != null) { - this.amount = item.getAmount(); - this.material = item.getType(); - this.cmiMaterial = CMIMaterial.get(this.material); - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) - this.id = item.getType().getId(); - else if (cmiMaterial != null) { - this.id = cmiMaterial.getId(); - } - if ((this.getType().isBlock() || this.getType().isSolid())) { - data = item.getData().getData(); - } - if (item.getType().getMaxDurability() - item.getDurability() < 0) { - data = item.getData().getData(); - } - - if (item.getType().getMaxDurability() > 15) { - data = (short) 0; - } - - if (item.getType() == Material.POTION || item.getType().name().contains("SPLASH_POTION") || item.getType().name().contains("TIPPED_ARROW")) { - PotionMeta potion = (PotionMeta) item.getItemMeta(); - try { - if (potion != null && potion.getBasePotionData() != null && potion.getBasePotionData().getType() != null && potion.getBasePotionData().getType().getEffectType() != null) { - data = (short) potion.getBasePotionData().getType().getEffectType().getId(); - } - } catch (NoSuchMethodError e) { - } - } - } - return this; - } - - public int getAmount() { - return amount <= 0 ? 1 : amount; - } - - public void setAmount(int amount) { - this.amount = amount; - if (item != null) - this.item.setAmount(this.amount == 0 ? item.getAmount() : this.amount); - } - - public boolean isSimilar(ItemStack item) { - return isSimilar(ItemManager.getItem(item)); - } - - public boolean isSimilar(CMIItemStack item) { - - if (item == null) - return false; - - try { - if ((item.getCMIType().isPotion() || item.getCMIType().equals(CMIMaterial.TIPPED_ARROW)) && - (this.getCMIType().isPotion() || this.getCMIType().equals(CMIMaterial.TIPPED_ARROW)) && - this.getType().equals(item.getType())) { - PotionMeta potion = (PotionMeta) item.getItemStack().getItemMeta(); - PotionMeta potion2 = (PotionMeta) this.getItemStack().getItemMeta(); - try { - if (potion != null && potion.getBasePotionData() != null) { - PotionData base1 = potion.getBasePotionData(); - if (base1.getType() != null) { - if (potion2 != null && potion2.getBasePotionData() != null) { - PotionData base2 = potion2.getBasePotionData(); - if (base2.getType() != null) { - if (base1.getType().equals(base2.getType()) && base1.isExtended() == base2.isExtended() && base1.isUpgraded() == base2.isUpgraded()) - return true; - } - } - } - } - return false; - } catch (NoSuchMethodError e) { - } - } - } catch (Exception e) { - e.printStackTrace(); - } - try { - if (this.getItemStack().getItemMeta() instanceof EnchantmentStorageMeta && item.getItemStack().getItemMeta() instanceof EnchantmentStorageMeta) { - - EnchantmentStorageMeta meta1 = (EnchantmentStorageMeta) this.getItemStack().getItemMeta(); - EnchantmentStorageMeta meta2 = (EnchantmentStorageMeta) item.getItemStack().getItemMeta(); - - for (Entry one : meta1.getEnchants().entrySet()) { - if (!meta2.getEnchants().containsKey(one.getKey()) || meta2.getEnchants().get(one.getKey()) != one.getValue()) - return false; - } - - for (Entry one : meta1.getStoredEnchants().entrySet()) { - if (!meta2.getStoredEnchants().containsKey(one.getKey()) || meta2.getStoredEnchants().get(one.getKey()) != one.getValue()) - return false; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - - if ((item.getCMIType() == CMIMaterial.SPAWNER || item.getCMIType().isMonsterEgg()) && (getCMIType() == CMIMaterial.SPAWNER || getCMIType().isMonsterEgg())) { - if (this.cmiMaterial != item.cmiMaterial) - return false; - return true; - } - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) - return this.cmiMaterial == item.cmiMaterial; - return this.cmiMaterial == item.cmiMaterial && this.getData() == item.getData(); - } - - public void setDurability(short durability) { - this.durability = durability; - } - - public String toOneLiner() { - - String liner = this.getType().toString(); - if (this.getCMIType().isPotion() || this.getType().name().contains("TIPPED_ARROW")) { - PotionMeta potion = (PotionMeta) item.getItemMeta(); - try { - if (potion != null && potion.getBasePotionData() != null && potion.getBasePotionData().getType() != null && potion.getBasePotionData().getType().getEffectType() != null) { - liner += ":" + potion.getBasePotionData().getType().getEffectType().getName() + "-" + potion.getBasePotionData().isUpgraded() + "-" + potion.getBasePotionData().isExtended(); - } - } catch (NoSuchMethodError e) { - } - } else { - if (Version.isCurrentLower(Version.v1_13_R1)) - liner += ":" + this.getData(); - } - if (this.getItemStack().getItemMeta() instanceof EnchantmentStorageMeta) { - EnchantmentStorageMeta meta = (EnchantmentStorageMeta) this.getItemStack().getItemMeta(); - String s = ""; - for (Entry one : meta.getStoredEnchants().entrySet()) { - if (!s.isEmpty()) - s += ";"; - s += one.getKey().getName() + "x" + one.getValue(); - } - - for (Entry one : meta.getEnchants().entrySet()) { - if (!s.isEmpty()) - s += ";"; - s += one.getKey().getName() + "x" + one.getValue(); - } - if (!s.isEmpty()) { - liner += ":" + s; - } - } - - return liner; - } - -} diff --git a/src/com/bekvon/bukkit/cmiLib/CMILocation.java b/src/com/bekvon/bukkit/cmiLib/CMILocation.java deleted file mode 100644 index a0fc37775..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMILocation.java +++ /dev/null @@ -1,371 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; -import java.util.Map; - -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.ChunkSnapshot; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Utility; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.data.BlockData; -import org.bukkit.material.MaterialData; - -public class CMILocation extends Location { - - public CMILocation(World world, double x, double y, double z, float yaw, float pitch) { - super(world, x, y, z, yaw, pitch); - this.worldName = world.getName(); - } - - public CMILocation(World world, double x, double y, double z) { - super(world, x, y, z); - if (world != null) - this.worldName = world.getName(); - } - - private String worldName; - - public CMILocation(Location loc) { - super(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch()); - if (loc.getWorld() != null) - this.worldName = loc.getWorld().getName(); - } - - public CMILocation(String world, double x, double y, double z, float yaw, float pitch) { - super(Bukkit.getWorld(world), x, y, z, yaw, pitch); - this.worldName = world; - } - - public CMILocation(String world, double x, double y, double z) { - super(Bukkit.getWorld(world), x, y, z); - this.worldName = world; - } - - public void recheck() { - updateWorld(); - } - - private void updateWorld() { - try { - if (Version.isCurrentEqualOrHigher(Version.v1_16_R1) && super.getWorld() != null && !super.isWorldLoaded()) - return; - } catch (Throwable e) { - } - - try { - if (super.getWorld() == null && worldName != null) { - World w = Bukkit.getWorld(worldName); - if (w != null) { - super.setWorld(w); - this.worldName = super.getWorld().getName(); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public String getWorldName() { - return this.worldName != null ? this.worldName : this.getWorld() == null ? null : this.getWorld().getName(); - } - - public Location getBukkitLoc() { - updateWorld(); - return this; - } - - public boolean isValid() { - updateWorld(); - return this.getWorld() != null && this.getWorld().getName() != null && Bukkit.getWorld(this.getWorld().getUID()) != null; - } - - @Override - public World getWorld() { - updateWorld(); - try { - if (Version.isCurrentEqualOrHigher(Version.v1_16_R1) && !super.isWorldLoaded()) - return null; - } catch (Throwable e) { - } - return super.getWorld(); - } - - @Override - public Chunk getChunk() { - updateWorld(); - return super.getChunk(); - } - - @Override - public Block getBlock() { - updateWorld(); - if (super.getWorld() == null) - return null; - return super.getBlock(); - } - - @Override - public Location add(Location vec) { - updateWorld(); - return super.add(vec); - } - - @Override - public Location subtract(Location vec) { - updateWorld(); - return super.subtract(vec); - } - - @Override - public double distanceSquared(Location o) { - if (o == null) - return Integer.MAX_VALUE; - if (!this.isValid()) - return Integer.MAX_VALUE; - return super.distanceSquared(o); - } - - @Override - public double distance(Location o) { - if (o == null) - return Integer.MAX_VALUE; - if (!this.isValid()) - return Integer.MAX_VALUE; - return super.distance(o); - } - - @Override - public boolean equals(Object obj) { - updateWorld(); - return super.equals(obj); - } - - @Override - public int hashCode() { - updateWorld(); - return super.hashCode(); - } - - @Override - public String toString() { - updateWorld(); - return super.toString(); - } - - @Override - public CMILocation clone() { - updateWorld(); - return new CMILocation(super.clone()); - } - - @Override - @Utility - public Map serialize() { - updateWorld(); - return super.serialize(); - } - - public int getHighestBlockYAt() { -// Location loc = this.getBukkitLoc(); -// if (loc == null) -// return 0; -// return this.getWorld().getHighestBlockYAt(this); - - if (this.getWorld() == null) - return 63; - - ChunkSnapshot chunk = this.getWorld().getEmptyChunkSnapshot(this.getBlockX() >> 4, this.getBlockZ() >> 4, true, true); - - int x = this.getBlockX() % 16; - x = x < 0 ? 16 + x : x; - int z = this.getBlockZ() % 16; - z = z < 0 ? 16 + z : z; - - return chunk.getHighestBlockYAt(x, z); - -// ChunkSnapshot snap = loc.getChunk().getChunkSnapshot(true, false, false); -// -// int x = this.getBlockX() - (snap.getX() * 16); -// int z = this.getBlockZ() - (snap.getZ() * 16); -// -// x = x < 0 ? 0 : x > 15 ? 15 : x; -// z = z < 0 ? 0 : z > 15 ? 15 : z; -// -// return snap.getHighestBlockYAt(x, z); - } - - public Material getBlockType() { - Location loc = this.getBukkitLoc(); - if (loc == null) - return Material.AIR; - - try { - if (Version.isCurrentEqualOrHigher(Version.v1_16_R1) && !super.isWorldLoaded()) - return Material.AIR; - } catch (Throwable e) { - } - return this.getBlock().getType(); - } - - private static MethodHandle getBlockTypeId = null; - private static MethodHandle getBlockData = null; - - public static Material getBlockTypeSafe(Location loc) { - if (loc == null) - return Material.AIR; - - int x = loc.getBlockX(); - int z = loc.getBlockZ(); - int y = loc.getBlockY(); - - int cx = Math.abs(loc.getBlockX() % 16); - int cz = Math.abs(loc.getBlockZ() % 16); - World world = loc.getWorld(); - - ChunkSnapshot chunkSnapshot = null; - - if (!world.getBlockAt(x, 0, z).getChunk().isLoaded()) { - world.getBlockAt(x, 0, z).getChunk().load(); - chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(false, false, false); - world.getBlockAt(x, 0, z).getChunk().unload(); - } else { - chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(); - } - - if (chunkSnapshot == null) - return Material.AIR; - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - BlockData type = chunkSnapshot.getBlockData(cx, y, cz); - return type.getMaterial(); - } - - if (getBlockTypeId == null) { - MethodHandles.Lookup lookup = MethodHandles.lookup(); - try { - getBlockTypeId = lookup.findVirtual(ChunkSnapshot.class, "getBlockTypeId", MethodType.methodType(int.class, int.class, int.class)).asType(MethodType.methodType(int.class, - ChunkSnapshot.class)); - getBlockData = lookup.findVirtual(ChunkSnapshot.class, "getBlockData", MethodType.methodType(int.class, int.class, int.class)).asType(MethodType.methodType(int.class, - ChunkSnapshot.class)); - } catch (NoSuchMethodException | IllegalAccessException e) { - e.printStackTrace(); - } - } - - if (getBlockTypeId == null || getBlockData == null) { - return Material.AIR; - } - try { - int type = (int) getBlockTypeId.invokeExact(chunkSnapshot); - if (type == 0) { - return Material.AIR; - } - int data = (int) getBlockData.invokeExact(chunkSnapshot); - return CMIMaterial.get(type, data).getMaterial(); - } catch (Throwable e) { - e.printStackTrace(); - } - - return Material.AIR; - } - - public CMIMaterial getBlockCMIType() { - Location loc = this.getBukkitLoc(); - if (loc == null) - return CMIMaterial.AIR; - - try { - if (Version.isCurrentEqualOrHigher(Version.v1_16_R1) && !super.isWorldLoaded()) - return CMIMaterial.AIR; - } catch (Throwable e) { - } - - CMIMaterial mat = CMIMaterial.get(this.getBlock()); - return mat == CMIMaterial.NONE ? CMIMaterial.AIR : mat; - } - - public static CMILocation fromString(String map) { - return fromString(map, ";"); - } - - public static CMILocation fromString(String map, String separator) { - CMILocation loc = null; - if (map == null) - return null; - if (!map.contains(separator)) - return null; - - String[] split = map.replace(",", ".").split(separator); - - double x = 0; - double y = 0; - double z = 0; - float yaw = 0; - float pitch = 0; - - if (split.length > 0) - try { - x = Double.parseDouble(split[1]); - } catch (Exception e) { - return loc; - } - - if (split.length > 1) - try { - y = Double.parseDouble(split[2]); - } catch (Exception e) { - return loc; - } - - if (split.length > 2) - try { - z = Double.parseDouble(split[3]); - } catch (Exception e) { - return loc; - } - - if (split.length > 3) - try { - yaw = Float.parseFloat(split[4]); - } catch (Exception e) { - } - - if (split.length > 4) - try { - pitch = Float.parseFloat(split[5]); - } catch (Exception e) { - } - - World world = getWorld(split[0]); - String worldName = world == null ? split[0] : world.getName(); - loc = new CMILocation(worldName, x, y, z); - loc.setYaw(yaw); - loc.setPitch(pitch); - - return loc; - } - - private static World getWorld(String name) { - World w = Bukkit.getWorld(name); - - if (w != null) - return w; - - name = name.replace("_", "").replace(".", "").replace("-", ""); - - for (World one : Bukkit.getWorlds()) { - String n = one.getName().replace("_", "").replace(".", "").replace("-", ""); - if (!n.equalsIgnoreCase(name)) - continue; - return one; - } - - return null; - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java deleted file mode 100644 index 21fb43334..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMIMaterial.java +++ /dev/null @@ -1,2797 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.Skull; -import org.bukkit.inventory.ItemStack; - -public enum CMIMaterial { - NONE(null, "None"), - ACACIA_BOAT(447, 0, 27326, "Acacia Boat", "BOAT_ACACIA"), - ACACIA_BUTTON(13993, "Acacia Button"), - ACACIA_DOOR(430, 0, 23797, "Acacia Door", "ACACIA_DOOR_ITEM"), - ACACIA_FENCE(192, 0, 4569, Arrays.asList(CMIMaterialCriteria.seeThrow), "Acacia Fence"), - ACACIA_FENCE_GATE(187, 0, 14145, Arrays.asList(CMIMaterialCriteria.seeThrow), "Acacia Fence Gate"), - ACACIA_LEAVES(161, 0, 16606, "Acacia Leaves", "LEAVES_2"), - ACACIA_LOG(162, 0, 8385, "Acacia Log", "LOG_2"), - ACACIA_PLANKS(5, 4, 31312, "Acacia Wood Plank", "Acacia Planks"), - ACACIA_PRESSURE_PLATE(17586, "Acacia Pressure Plate"), - ACACIA_SAPLING(6, 4, 20806, "Acacia Sapling"), - ACACIA_SLAB(126, 4, 23730, "Acacia Wood Slab", "Acacia Slab"), - ACACIA_STAIRS(163, 0, 17453, "Acacia Stairs"), - ACACIA_TRAPDOOR(18343, "Acacia Trapdoor"), - ACACIA_WOOD(21861, "Acacia Wood"), - ACTIVATOR_RAIL(157, 0, 5834, "Activator Rail"), - AIR(0, 0, 9648, "Air"), - ALLIUM(38, 2, 6871, "Allium", "RED_ROSE"), - ANDESITE(1, 5, 25975, "Andesite"), - ANVIL(145, 0, 18718, "Anvil"), - APPLE(260, 0, 7720, "Apple"), - ARMOR_STAND(416, 0, 12852, "Armor Stand"), - ARROW(262, 0, 31091, "Arrow"), - ATTACHED_MELON_STEM(30882, "Attached Melon Stem"), - ATTACHED_PUMPKIN_STEM(12724, "Attached Pumpkin Stem"), - AZURE_BLUET(38, 3, 17608, "Azure Bluet"), - BAKED_POTATO(393, 0, 14624, "Baked Potato"), - BARRIER(166, 0, 26453, "Barrier"), - BAT_SPAWN_EGG(383, 65, 14607, "Bat Spawn Egg", "Spawn Bat"), - BEACON(138, 0, 6608, "Beacon"), - BEDROCK(7, 0, 23130, "Bedrock"), - BEEF(363, 0, 4803, "Raw Beef"), - BEETROOT(434, 0, 23305, "Beetroot"), - BEETROOTS(207, 0, 22075, "Beetroots", "BEETROOT_BLOCK"), - BEETROOT_SEEDS(435, 0, 21282, "Beetroot Seeds"), - BEETROOT_SOUP(436, 0, 16036, "Beetroot Soup"), - BIRCH_BOAT(445, 0, 28104, "Birch Boat", "BOAT_BIRCH"), - BIRCH_BUTTON(26934, "Birch Button"), - BIRCH_DOOR(428, 0, 14759, "Birch Door", "BIRCH_DOOR_ITEM"), - BIRCH_FENCE(189, 0, 17347, Arrays.asList(CMIMaterialCriteria.seeThrow), "Birch Fence"), - BIRCH_FENCE_GATE(184, 0, 6322, Arrays.asList(CMIMaterialCriteria.seeThrow), "Birch Fence Gate"), - BIRCH_LEAVES(18, 2, 12601, "Birch Leaves", "LEAVES"), - BIRCH_LOG(17, 2, 26727, "Birch Log", "LOG"), - BIRCH_PLANKS(5, 2, 29322, "Birch Wood Plank"), - BIRCH_PRESSURE_PLATE(9664, "Birch Pressure Plate"), - BIRCH_SAPLING(6, 2, 31533, "Birch Sapling"), - BIRCH_SLAB(126, 2, 13807, "Birch Slab"), - BIRCH_STAIRS(135, 0, 7657, "Birch Wood Stairs"), - BIRCH_TRAPDOOR(32585, "Birch Trapdoor"), - BIRCH_WOOD(20913, "Birch Wood"), - BLACK_BANNER(425, 0, 9365, "Black Banner"), - BLACK_BED(355, 15, 20490, "Black Bed"), - BLACK_CARPET(171, 15, 6056, "Black Carpet", "CARPET"), - BLACK_CONCRETE(251, 15, 13338, "Black Concrete", "CONCRETE"), - BLACK_CONCRETE_POWDER(252, 15, 16150, "Black Concrete Powder", "CONCRETE_POWDER"), - BLACK_GLAZED_TERRACOTTA(250, 0, 29678, "Black Glazed Terracotta"), - BLACK_SHULKER_BOX(234, 0, 24076, "Black Shulker Box"), - BLACK_STAINED_GLASS(95, 15, 13941, Arrays.asList(CMIMaterialCriteria.seeThrow), "Black Stained Glass", "STAINED_GLASS"), - BLACK_STAINED_GLASS_PANE(160, 15, 13201, Arrays.asList(CMIMaterialCriteria.seeThrow), "Black Stained Glass Pane", "STAINED_GLASS_PANE"), - BLACK_TERRACOTTA(159, 15, 26691, "Black Terracotta", "STAINED_CLAY"), - BLACK_WALL_BANNER(117, 0, 4919, "Black Banner"), - BLACK_WOOL(35, 15, 16693, "Black Wool"), - BLAZE_POWDER(377, 0, 18941, "Blaze Powder"), - BLAZE_ROD(369, 0, 8289, "Blaze Rod"), - BLAZE_SPAWN_EGG(383, 61, 4759, "Blaze Spawn Egg", "Spawn Blaze"), - BLUE_BANNER(245, 4, 18481, "Blue Banner"), - BLUE_BED(355, 11, 12714, "Blue Bed"), - BLUE_CARPET(171, 11, 13292, "Blue Carpet"), - BLUE_CONCRETE(251, 11, 18756, "Blue Concrete"), - BLUE_CONCRETE_POWDER(252, 11, 17773, "Blue Concrete Powder"), - BLUE_GLAZED_TERRACOTTA(246, 0, 23823, "Blue Glazed Terracotta"), - BLUE_ICE(22449, "Blue Ice"), - BLUE_ORCHID(38, 1, 13432, "Blue Orchid"), - BLUE_SHULKER_BOX(230, 0, 11476, "Blue Shulker Box"), - BLUE_STAINED_GLASS(95, 11, 7107, Arrays.asList(CMIMaterialCriteria.seeThrow), "Blue Stained Glass"), - BLUE_STAINED_GLASS_PANE(160, 11, 28484, Arrays.asList(CMIMaterialCriteria.seeThrow), "Blue Stained Glass Pane"), - BLUE_TERRACOTTA(159, 11, 5236, "Blue Terracotta"), - BLUE_WALL_BANNER(117, 4, 17757, "Blue Banner"), - BLUE_WOOL(35, 11, 15738, "Blue Wool"), - BONE(352, 0, 5686, "Bone"), - BONE_BLOCK(216, 0, 17312, "Bone Block"), - BONE_MEAL(351, 15, 32458, "Bone Meal"), - BOOK(340, 0, 23097, "Book"), - BOOKSHELF(47, 0, 10069, "Bookshelf"), - BOW(261, 0, 8745, "Bow"), - BOWL(281, 0, 32661, "Bowl"), - BRAIN_CORAL(31316, "Brain Coral"), - BRAIN_CORAL_BLOCK(30618, "Brain Coral Block"), - BRAIN_CORAL_FAN(13849, "Brain Coral Fan"), - BRAIN_CORAL_WALL_FAN(22685, "Brain Coral Wall Fan"), - BREAD(297, 0, 32049, "Bread"), - BREWING_STAND(379, 0, 14539, "Brewing Stand", "BREWING_STAND_ITEM"), - BRICK(336, 0, 6820, "Brick", "claybrick"), - BRICKS(45, 0, 14165, "Bricks"), - BRICK_SLAB(44, 4, 26333, "Brick Slab", "STEP"), - BRICK_STAIRS(108, 0, 21534, "Brick Stairs"), - BROWN_BANNER(425, 3, 11481, "Brown Banner"), - BROWN_BED(355, 12, 25624, "Brown Bed"), - BROWN_CARPET(171, 12, 23352, "Brown Carpet"), - BROWN_CONCRETE(251, 12, 19006, "Brown Concrete"), - BROWN_CONCRETE_POWDER(252, 12, 21485, "Brown Concrete Powder"), - BROWN_GLAZED_TERRACOTTA(247, 0, 5655, "Brown Glazed Terracotta"), - BROWN_MUSHROOM(39, 0, 9665, "Brown Mushroom"), - BROWN_MUSHROOM_BLOCK(99, 0, 6291, "Brown Mushroom Block", "HUGE_MUSHROOM_1"), - BROWN_SHULKER_BOX(231, 0, 24230, "Brown Shulker Box"), - BROWN_STAINED_GLASS(95, 12, 20945, Arrays.asList(CMIMaterialCriteria.seeThrow), "Brown Stained Glass"), - BROWN_STAINED_GLASS_PANE(160, 12, 17557, Arrays.asList(CMIMaterialCriteria.seeThrow), "Brown Stained Glass Pane"), - BROWN_TERRACOTTA(159, 12, 23664, "Brown Terracotta"), - BROWN_WALL_BANNER(117, 3, 14731, "Brown Banner"), - BROWN_WOOL(35, 12, 32638, "Brown Wool"), - BUBBLE_COLUMN(13758, "Bubble Column"), - BUBBLE_CORAL(12464, "Bubble Coral"), - BUBBLE_CORAL_BLOCK(15437, "Bubble Coral Block"), - BUBBLE_CORAL_FAN(10795, "Bubble Coral Fan"), - BUBBLE_CORAL_WALL_FAN(20382, "Bubble Coral Wall Fan"), - BUCKET(325, 0, 15215, "Bucket"), - CACTUS(81, 0, 12191, "Cactus"), - CACTUS_GREEN(351, 2, 17296, "Cactus Green"), - CAKE(354, 0, 27048, "Cake"), - CARROT(141, 0, 22824, "Carrot", "Carrotitem"), - CARROTS(391, 0, 17258, "Carrots"), - CARROT_ON_A_STICK(398, 0, 27809, "Carrot on a Stick", "carrotstick"), - CARVED_PUMPKIN(25833, "Carved Pumpkin"), - CAULDRON(380, 0, 26531, "Cauldron", "CAULDRON_ITEM"), - CAVE_AIR(17422, "Cave Air"), - CAVE_SPIDER_SPAWN_EGG(383, 59, 23341, "Cave Spider Spawn Egg", "Spawn Cave Spider"), - CHAINMAIL_BOOTS(305, 0, 17953, "Chainmail Boots"), - CHAINMAIL_CHESTPLATE(303, 0, 23602, "Chainmail Chestplate"), - CHAINMAIL_HELMET(302, 0, 26114, "Chainmail Helmet"), - CHAINMAIL_LEGGINGS(304, 0, 19087, "Chainmail Leggings"), - CHAIN_COMMAND_BLOCK(26798, "Chain Command Block"), - CHARCOAL(263, 1, 5390, "Charcoal"), - CHEST(54, 0, 22969, "Chest"), - CHEST_MINECART(342, 0, 4497, "Minecart with Chest", "Storageminecart"), - CHICKEN(365, 0, 17281, "Raw Chicken"), - CHICKEN_SPAWN_EGG(383, 93, 5462, "Chicken Spawn Egg", "Spawn Chicken"), - CHIPPED_ANVIL(145, 1, 10623, "Chipped Anvil"), - CHISELED_QUARTZ_BLOCK(155, 1, 30964, "Chiseled Quartz Block"), - CHISELED_RED_SANDSTONE(179, 1, 15529, "Chiseled Red Sandstone"), - CHISELED_SANDSTONE(24, 1, 31763, "Chiseled Sandstone"), - CHISELED_STONE_BRICKS(98, 3, 9087, "Chiseled Stone Bricks", "SMOOTH_BRICK"), - CHORUS_FLOWER(200, 0, 28542, "Chorus Flower"), - CHORUS_FRUIT(432, 0, 7652, "Chorus Fruit"), - CHORUS_PLANT(199, 0, 28243, "Chorus Plant"), - CLAY(82, 0, 27880, "Clay", "Clay Block"), - CLAY_BALL(337, 0, 24603, "Clay Ball"), - CLOCK(347, 0, 14980, "Clock", "watch"), - COAL(263, 0, 29067, "Coal"), - COAL_BLOCK(173, 0, 27968, "Block of Coal"), - COAL_ORE(16, 0, 30965, "Coal Ore"), - COARSE_DIRT(3, 1, 15411, "Coarse Dirt"), - COBBLESTONE(4, 0, 32147, "Cobblestone"), - COBBLESTONE_SLAB(44, 3, 6340, "Cobblestone Slab"), - COBBLESTONE_STAIRS(67, 0, 24715, "Cobblestone Stairs"), - COBBLESTONE_WALL(139, 0, 12616, "Cobblestone Wall", "COBBLE_WALL"), - COBWEB(30, 0, 9469, Arrays.asList(CMIMaterialCriteria.seeThrow), "Cobweb", "WEB"), - COCOA(127, 0, 29709, "Cocoa"), - COCOA_BEANS(351, 3, 27381, "Coco Beans"), - COD(24691, "Raw Cod"), - COD_BUCKET(28601, "Bucket of Cod"), - COD_SPAWN_EGG(27248, "Cod Spawn Egg"), - COMMAND_BLOCK(137, 0, 4355, "Command Block", "COMMAND"), - COMMAND_BLOCK_MINECART(422, 0, 7992, "Minecart with Command Block"), - COMPARATOR(404, 0, 18911, "Redstone Comparator"), - COMPASS(345, 0, 24139, "Compass"), - CONDUIT(5148, "Conduit"), - COOKED_BEEF(364, 0, 21595, "Steak"), - COOKED_CHICKEN(366, 0, 20780, "Cooked Chicken"), - COOKED_COD(350, 0, 9681, "Cooked Fish"), - COOKED_MUTTON(424, 0, 31447, "Cooked Mutton"), - COOKED_PORKCHOP(320, 0, 27231, "Cooked Porkchop", "grilledpork"), - COOKED_RABBIT(412, 0, 4454, "Cooked Rabbit"), - COOKED_SALMON(350, 1, 5615, "Cooked Salmon"), - COOKIE(357, 0, 27431, "Cookie"), - COW_SPAWN_EGG(383, 92, 14761, "Cow Spawn Egg", "Spawn Cow"), - CRACKED_STONE_BRICKS(98, 2, 27869, "Cracked Stone Bricks"), - CRAFTING_TABLE(58, 0, 20706, "Crafting Table", "WORKBENCH", "Table"), - CREEPER_HEAD(397, 4, 29146, "Mob Head (Creeper)"), - CREEPER_SPAWN_EGG(383, 50, 9653, "Creeper Spawn Egg", "Spawn Creeper"), - CREEPER_WALL_HEAD(144, 4, 30123, "Creeper Wall Head"), - CUT_RED_SANDSTONE(26842, "Cut Red Sandstone"), - CUT_SANDSTONE(6118, "Cut Sandstone"), - CYAN_BANNER(425, 6, 9839, "Cyan Banner"), - CYAN_BED(355, 9, 16746, "Cyan Bed"), - CYAN_CARPET(171, 9, 31495, "Cyan Carpet"), - CYAN_CONCRETE(251, 9, 26522, "Cyan Concrete"), - CYAN_CONCRETE_POWDER(252, 9, 15734, "Cyan Concrete Powder"), - CYAN_DYE(351, 6, 8043, "Cyan Dye"), - CYAN_GLAZED_TERRACOTTA(244, 0, 9550, "Cyan Glazed Terracotta"), - CYAN_SHULKER_BOX(228, 0, 28123, "Cyan Shulker Box"), - CYAN_STAINED_GLASS(95, 9, 30604, Arrays.asList(CMIMaterialCriteria.seeThrow), "Cyan Stained Glass"), - CYAN_STAINED_GLASS_PANE(160, 9, 11784, Arrays.asList(CMIMaterialCriteria.seeThrow), "Cyan Stained Glass Pane"), - CYAN_TERRACOTTA(159, 9, 25940, "Cyan Terracotta"), - CYAN_WALL_BANNER(117, 6, 10889, "Cyan Banner"), - CYAN_WOOL(35, 9, 12221, "Cyan Wool"), - DAMAGED_ANVIL(145, 2, 10274, "Damaged Anvil"), - DANDELION(37, 0, 30558, "Dandelion", "YELLOW_FLOWER"), - DANDELION_YELLOW(351, 11, 21789, "Dandelion Yellow"), - DARK_OAK_BOAT(448, 0, 28618, "Dark Oak Boat", "BOAT_DARK_OAK"), - DARK_OAK_BUTTON(6214, "Dark Oak Button"), - DARK_OAK_DOOR(431, 0, 10669, "Dark Oak Door", "DARK_OAK_DOOR_ITEM"), - DARK_OAK_FENCE(191, 0, 21767, Arrays.asList(CMIMaterialCriteria.seeThrow), "Dark Oak Fence"), - DARK_OAK_FENCE_GATE(186, 0, 10679, Arrays.asList(CMIMaterialCriteria.seeThrow), "Dark Oak Fence Gate"), - DARK_OAK_LEAVES(161, 1, 22254, "Dark Oak Leaves"), - DARK_OAK_LOG(162, 1, 14831, "Dark Oak Log"), - DARK_OAK_PLANKS(5, 5, 20869, "Dark Oak Wood Plank"), - DARK_OAK_PRESSURE_PLATE(31375, "Dark Oak Pressure Plate"), - DARK_OAK_SAPLING(6, 5, 14933, "Dark Oak Sapling"), - DARK_OAK_SLAB(126, 5, 28852, "Dark Oak Wood Slab"), - DARK_OAK_STAIRS(164, 0, 22921, "Dark Oak Stairs"), - DARK_OAK_TRAPDOOR(10355, "Dark Oak Trapdoor"), - DARK_OAK_WOOD(16995, "Dark Oak Wood"), - DARK_PRISMARINE(168, 2, 19940, "Dark Prismarine"), - DARK_PRISMARINE_SLAB(7577, "Dark Prismarine Slab"), - DARK_PRISMARINE_STAIRS(26511, "Dark Prismarine Stairs"), - DAYLIGHT_DETECTOR(151, 0, 8864, "Daylight Detector"), - DEAD_BRAIN_CORAL(9116, "Dead Brain Coral"), - DEAD_BRAIN_CORAL_BLOCK(12979, "Dead Brain Coral Block"), - DEAD_BRAIN_CORAL_FAN(26150, "Dead Brain Coral Fan"), - DEAD_BRAIN_CORAL_WALL_FAN(23718, "Dead Brain Coral Wall Fan"), - DEAD_BUBBLE_CORAL(30583, "Dead Bubble Coral"), - DEAD_BUBBLE_CORAL_BLOCK(28220, "Dead Bubble Coral Block"), - DEAD_BUBBLE_CORAL_FAN(17322, "Dead Bubble Coral Fan"), - DEAD_BUBBLE_CORAL_WALL_FAN(18453, "Dead Bubble Coral Wall Fan"), - DEAD_BUSH(32, 0, 22888, "Dead Bush"), - DEAD_FIRE_CORAL(8365, "Dead Fire Coral"), - DEAD_FIRE_CORAL_BLOCK(5307, "Dead Fire Coral Block"), - DEAD_FIRE_CORAL_FAN(27073, "Dead Fire Coral Fan"), - DEAD_FIRE_CORAL_WALL_FAN(23375, "Dead Fire Coral Wall Fan"), - DEAD_HORN_CORAL(5755, "Dead Horn Coral"), - DEAD_HORN_CORAL_BLOCK(15103, "Dead Horn Coral Block"), - DEAD_HORN_CORAL_FAN(11387, "Dead Horn Coral Fan"), - DEAD_HORN_CORAL_WALL_FAN(27550, "Dead Horn Coral Wall Fan"), - DEAD_TUBE_CORAL(18028, "Dead Tube Coral"), - DEAD_TUBE_CORAL_BLOCK(28350, "Dead Tube Coral Block"), - DEAD_TUBE_CORAL_FAN(17628, "Dead Tube Coral Fan"), - DEAD_TUBE_CORAL_WALL_FAN(5128, "Dead Tube Coral Wall Fan"), - DEBUG_STICK(24562, "Debug Stick"), - DETECTOR_RAIL(28, 0, 13475, "Detector Rail"), - DIAMOND(264, 0, 20865, "Diamond"), - DIAMOND_AXE(279, 0, 27277, "Diamond Axe"), - DIAMOND_BLOCK(57, 0, 5944, "Block of Diamond"), - DIAMOND_BOOTS(313, 0, 16522, "Diamond Boots"), - DIAMOND_CHESTPLATE(311, 0, 32099, "Diamond Chestplate"), - DIAMOND_HELMET(310, 0, 10755, "Diamond Helmet"), - DIAMOND_HOE(293, 0, 24050, "Diamond Hoe"), - DIAMOND_HORSE_ARMOR(419, 0, 10321, "Diamond Horse Armor", "Diamond_barding"), - DIAMOND_LEGGINGS(312, 0, 11202, "Diamond Leggings"), - DIAMOND_ORE(56, 0, 9292, "Diamond Ore"), - DIAMOND_PICKAXE(278, 0, 24291, "Diamond Pickaxe"), - DIAMOND_SHOVEL(277, 0, 25415, "Diamond Shovel", "DIAMOND_SPADE"), - DIAMOND_SWORD(276, 0, 27707, "Diamond Sword"), - DIORITE(1, 3, 24688, "Diorite"), - DIRT(3, 0, 10580, "Dirt"), - DISPENSER(23, 0, 20871, "Dispenser"), - DOLPHIN_SPAWN_EGG(20787, "Dolphin Spawn Egg"), - DONKEY_SPAWN_EGG(383, 31, 14513, "Donkey Spawn Egg", "Spawn Donkey"), - DRAGON_BREATH(437, 0, 20154, "Dragon's Breath"), - DRAGON_EGG(122, 0, 29946, "Dragon Egg"), - DRAGON_HEAD(397, 5, 20084, "Dragon Head"), - DRAGON_WALL_HEAD(144, 5, 19818, "Dragon Wall Head"), - DRIED_KELP(21042, "Dried Kelp"), - DRIED_KELP_BLOCK(12966, "Dried Kelp Block"), - DROPPER(158, 0, 31273, "Dropper"), - DROWNED_SPAWN_EGG(19368, "Drowned Spawn Egg"), - EGG(344, 0, 21603, "Egg"), - ELDER_GUARDIAN_SPAWN_EGG(383, 4, 11418, "Elder Guardian Spawn Egg", "Spawn Elder Guardian"), - ELYTRA(443, 0, 23829, "Elytra"), - EMERALD(388, 0, 5654, "Emerald"), - EMERALD_BLOCK(133, 0, 9914, "Emerald Block", "Block of Emerald"), - EMERALD_ORE(129, 0, 16630, "Emerald Ore"), - ENCHANTED_BOOK(403, 0, 11741, "Enchanted Book"), - ENCHANTED_GOLDEN_APPLE(322, 1, 8280, "Enchanted Golden Apple"), - ENCHANTING_TABLE(116, 0, 16255, "Enchanting Table", "ENCHANTMENT_TABLE"), - ENDERMAN_SPAWN_EGG(383, 58, 29488, "Enderman Spawn Egg", "Spawn Enderman"), - ENDERMITE_SPAWN_EGG(383, 67, 16617, "Endermite Spawn Egg", "Spawn Endermite"), - ENDER_CHEST(130, 0, 32349, "Ender Chest"), - ENDER_EYE(381, 0, 24860, "Eye of Ender"), - ENDER_PEARL(368, 0, 5259, "Ender Pearl"), - END_CRYSTAL(426, 0, 19090, "End Crystal"), - END_GATEWAY(209, 0, 26605, "End Gateway"), - END_PORTAL(119, 0, 16782, "End Portal"), - END_PORTAL_FRAME(120, 0, 15480, "End Portal Frame", "ENDER_PORTAL_FRAME"), - END_ROD(198, 0, 24832, "End Rod"), - END_STONE(121, 0, 29686, "End Stone", "ENDER_STONE"), - END_STONE_BRICKS(206, 0, 20314, "End Stone Bricks", "END_BRICKS"), - EVOKER_SPAWN_EGG(383, 34, 21271, "Evoker Spawn Egg", "Spawn Evoker"), - EXPERIENCE_BOTTLE(384, 0, 12858, "Bottle o' Enchanting", "expbottle"), - FARMLAND(60, 0, 31166, "Farmland", "SOIL"), - FEATHER(288, 0, 30548, "Feather"), - FERMENTED_SPIDER_EYE(376, 0, 19386, "Fermented Spider Eye"), - FERN(31, 2, 15794, "Fern", "LONG_GRASS"), - FILLED_MAP(358, 0, 23504, "Map"), - FIRE(51, 0, 16396, "Fire"), - FIREWORK_ROCKET(401, 0, 23841, "Firework Rocket"), - FIREWORK_STAR(402, 0, 12190, "Firework Star", "FIREWORK_CHARGE"), - FIRE_CHARGE(385, 0, 4842, "Fire Charge", "Fireball"), - FIRE_CORAL(29151, "Fire Coral"), - FIRE_CORAL_BLOCK(12119, "Fire Coral Block"), - FIRE_CORAL_FAN(11112, "Fire Coral Fan"), - FIRE_CORAL_WALL_FAN(20100, "Fire Coral Wall Fan"), - FISHING_ROD(346, 0, 4167, "Fishing Rod"), - FLINT(318, 0, 23596, "Flint"), - FLINT_AND_STEEL(259, 0, 28620, "Flint and Steel"), - FLOWER_POT(390, 0, 30567, "Flower Pot", "FLOWER_POT_ITEM"), - FROSTED_ICE(212, 0, 21814, "Frosted Ice"), - FURNACE(61, 0, 8133, "Furnace"), - FURNACE_MINECART(343, 0, 14196, "Minecart with Furnace", "POWERED_MINECART"), - GHAST_SPAWN_EGG(383, 56, 9970, "Ghast Spawn Egg", "Spawn Ghast"), - GHAST_TEAR(370, 0, 18222, "Ghast Tear"), - GLASS(20, 0, 6195, Arrays.asList(CMIMaterialCriteria.seeThrow), "Glass"), - GLASS_BOTTLE(374, 0, 6116, "Glass Bottle"), - GLASS_PANE(102, 0, 5709, Arrays.asList(CMIMaterialCriteria.seeThrow), "Glass Pane", "THIN_GLASS"), - GLISTERING_MELON_SLICE(382, 0, 20158, "Glistering Melon", "speckledmelon"), - GLOWSTONE(89, 0, 32713, "Glowstone"), - GLOWSTONE_DUST(348, 0, 6665, "Glowstone Dust"), - GOLDEN_APPLE(322, 0, 27732, "Golden Apple", "Gold apple"), - GOLDEN_AXE(286, 0, 4878, "Golden Axe", "Gold Axe"), - GOLDEN_BOOTS(317, 0, 7859, "Golden Boots", "Gold Boots"), - GOLDEN_CARROT(396, 0, 5300, "Golden Carrot", "Gold Carrot"), - GOLDEN_CHESTPLATE(315, 0, 4507, "Golden Chestplate", "Gold Chestplate"), - GOLDEN_HELMET(314, 0, 7945, "Golden Helmet", "Gold Helmet"), - GOLDEN_HOE(294, 0, 19337, "Golden Hoe", "Gold Hoe"), - GOLDEN_HORSE_ARMOR(418, 0, 7996, "Golden Horse Armor", "Gold Barding"), - GOLDEN_LEGGINGS(316, 0, 21002, "Golden Leggings", "Gold Leggings"), - GOLDEN_PICKAXE(285, 0, 10901, "Golden Pickaxe", "GOLD_PICKAXE"), - GOLDEN_SHOVEL(284, 0, 15597, "Golden Shovel", "GOLD_SPADE"), - GOLDEN_SWORD(283, 0, 10505, "Golden Sword", "GOLD_SWORD"), - GOLD_BLOCK(41, 0, 27392, "Block of Gold", "GOLD_BLOCK"), - GOLD_INGOT(266, 0, 28927, "Gold Ingot"), - GOLD_NUGGET(371, 0, 28814, "Gold Nugget"), - GOLD_ORE(14, 0, 32625, "Gold Ore"), - GRANITE(1, 1, 21091, "Granite"), - GRASS(31, 1, 6155, "Grass"), - GRASS_BLOCK(2, 0, 28346, "Grass Block"), - GRASS_PATH(208, 0, 8604, "Grass Path"), - GRAVEL(13, 0, 7804, "Gravel"), - GRAY_BANNER(425, 8, 12053, "Gray Banner"), - GRAY_BED(355, 7, 15745, "Gray Bed"), - GRAY_CARPET(171, 7, 26991, "Gray Carpet"), - GRAY_CONCRETE(251, 7, 13959, "Gray Concrete"), - GRAY_CONCRETE_POWDER(252, 7, 13031, "Gray Concrete Powder"), - GRAY_DYE(351, 8, 9184, "Gray Dye"), - GRAY_GLAZED_TERRACOTTA(242, 0, 6256, "Gray Glazed Terracotta"), - GRAY_SHULKER_BOX(226, 0, 12754, "Gray Shulker Box"), - GRAY_STAINED_GLASS(95, 7, 29979, Arrays.asList(CMIMaterialCriteria.seeThrow), "Gray Stained Glass"), - GRAY_STAINED_GLASS_PANE(160, 7, 25272, Arrays.asList(CMIMaterialCriteria.seeThrow), "Gray Stained Glass Pane"), - GRAY_TERRACOTTA(159, 7, 18004, "Gray Terracotta"), - GRAY_WALL_BANNER(117, 8, 24275, "Gray Banner"), - GRAY_WOOL(35, 7, 27209, "Gray Wool"), - GREEN_BANNER(425, 2, 10698, "Green Banner"), - GREEN_BED(355, 13, 13797, "Green Bed"), - GREEN_CARPET(171, 13, 7780, "Green Carpet"), - GREEN_CONCRETE(251, 13, 17949, "Green Concrete"), - GREEN_CONCRETE_POWDER(252, 13, 6904, "Green Concrete Powder"), - GREEN_GLAZED_TERRACOTTA(248, 0, 6958, "Green Glazed Terracotta"), - GREEN_SHULKER_BOX(232, 0, 9377, "Green Shulker Box"), - GREEN_STAINED_GLASS(95, 13, 22503, Arrays.asList(CMIMaterialCriteria.seeThrow), "Green Stained Glass"), - GREEN_STAINED_GLASS_PANE(160, 13, 4767, Arrays.asList(CMIMaterialCriteria.seeThrow), "Green Stained Glass Pane"), - GREEN_TERRACOTTA(159, 13, 4105, "Green Terracotta"), - GREEN_WALL_BANNER(117, 2, 15046, "Green Banner"), - GREEN_WOOL(35, 13, 25085, "Green Wool"), - GUARDIAN_SPAWN_EGG(383, 68, 20113, "Guardian Spawn Egg", "Spawn Guardian"), - GUNPOWDER(289, 0, 29974, "Gunpowder", "SULPHUR"), - HAY_BLOCK(170, 0, 17461, "Hay Bale", "HAY_BLOCK"), - HEART_OF_THE_SEA(11807, "Heart of the Sea"), - HEAVY_WEIGHTED_PRESSURE_PLATE(148, 0, 16970, "Heavy Weighted Pressure Plate", "IRON_PLATE"), - HOPPER(154, 0, 31974, "Hopper"), - HOPPER_MINECART(408, 0, 19024, "Minecart with Hopper"), - HORN_CORAL(19511, "Horn Coral"), - HORN_CORAL_BLOCK(19958, "Horn Coral Block"), - HORN_CORAL_FAN(13610, "Horn Coral Fan"), - HORN_CORAL_WALL_FAN(28883, "Horn Coral Wall Fan"), - HORSE_SPAWN_EGG(383, 100, 25981, "Horse Spawn Egg", "Spawn Horse"), - HUSK_SPAWN_EGG(383, 23, 20178, "Husk Spawn Egg", "Spawn Husk"), - ICE(79, 0, 30428, "Ice"), - INFESTED_CHISELED_STONE_BRICKS(97, 5, 4728, "Infested Chiseled Stone Bricks", "MONSTER_EGGS"), - INFESTED_COBBLESTONE(97, 1, 28798, "Infested Cobblestone"), - INFESTED_CRACKED_STONE_BRICKS(97, 4, 7476, "Infested Cracked Stone Bricks"), - INFESTED_MOSSY_STONE_BRICKS(97, 3, 9850, "Infested Mossy Stone Bricks"), - INFESTED_STONE(97, 0, 18440, "Infested Stone"), - INFESTED_STONE_BRICKS(97, 2, 19749, "Infested Stone Bricks"), - INK_SAC(351, 0, 7184, "Ink Sac", "Ink Sack"), - IRON_AXE(258, 0, 15894, "Iron Axe"), - IRON_BARS(101, 0, 9378, Arrays.asList(CMIMaterialCriteria.seeThrow), "Iron Bars", "IRON_FENCE"), - IRON_BLOCK(42, 0, 24754, "Block of Iron", "IRON_BLOCK"), - IRON_BOOTS(309, 0, 8531, "Iron Boots"), - IRON_CHESTPLATE(307, 0, 28112, "Iron Chestplate"), - IRON_DOOR(330, 0, 4788, "Iron Door"), - IRON_HELMET(306, 0, 12025, "Iron Helmet"), - IRON_HOE(292, 0, 11339, "Iron Hoe"), - IRON_HORSE_ARMOR(417, 0, 30108, "Iron Horse Armor", "Iron_barding"), - IRON_INGOT(265, 0, 24895, "Iron Ingot"), - IRON_LEGGINGS(308, 0, 18951, "Iron Leggings"), - IRON_NUGGET(452, 0, 13715, "Iron Nugget"), - IRON_ORE(15, 0, 19834, "Iron Ore"), - IRON_PICKAXE(257, 0, 8842, "Iron Pickaxe"), - IRON_SHOVEL(256, 0, 30045, "Iron Shovel", "IRON_SPADE"), - IRON_SWORD(267, 0, 10904, "Iron Sword"), - IRON_TRAPDOOR(167, 0, 17095, "Iron Trapdoor"), - ITEM_FRAME(389, 0, 27318, "Item Frame"), - JACK_O_LANTERN(91, 0, 31612, "Jack o'Lantern", "JACK_O_LANTERN"), - JUKEBOX(84, 0, 19264, "Jukebox"), - JUNGLE_BOAT(446, 0, 4495, "Jungle Boat", "BOAT_JUNGLE"), - JUNGLE_BUTTON(25317, "Jungle Button"), - JUNGLE_DOOR(429, 0, 28163, "Jungle Door", "JUNGLE_DOOR_ITEM"), - JUNGLE_FENCE(190, 0, 14358, Arrays.asList(CMIMaterialCriteria.seeThrow), "Jungle Fence"), - JUNGLE_FENCE_GATE(185, 0, 21360, Arrays.asList(CMIMaterialCriteria.seeThrow), "Jungle Fence Gate", "JUNGLE_FENCE_GATE"), - JUNGLE_LEAVES(18, 3, 5133, "Jungle Leaves"), - JUNGLE_LOG(17, 3, 20721, "Jungle Log"), - JUNGLE_PLANKS(5, 3, 26445, "Jungle Wood Plank", "Jungle Planks"), - JUNGLE_PRESSURE_PLATE(11376, "Jungle Pressure Plate"), - JUNGLE_SAPLING(6, 3, 17951, "Jungle Sapling"), - JUNGLE_SLAB(43, 0, 19117, "Double Stone Slab"), - JUNGLE_STAIRS(136, 0, 20636, "Jungle Wood Stairs", "Jungle Stairs"), - JUNGLE_TRAPDOOR(8626, "Jungle Trapdoor"), - JUNGLE_WOOD(10341, "Jungle Wood"), - KELP(21916, "Kelp"), - KELP_PLANT(29697, "Kelp Plant"), - KNOWLEDGE_BOOK(453, 0, 12646, "Knowledge Book"), - LADDER(65, 0, 23599, "Ladder"), - LAPIS_BLOCK(22, 0, 14485, "Lapis Lazuli Block", "LAPIS_BLOCK"), - LAPIS_LAZULI(351, 4, 11075, "Lapis Lazuli"), - LAPIS_ORE(21, 0, 22934, "Lapis Lazuli Ore", "LAPIS_ORE"), - LARGE_FERN(175, 3, 30177, "Large Fern", "DOUBLE_PLANT"), - LAVA(10, 0, 8415, "Flowing Lava"), - LAVA_BUCKET(327, 0, 9228, "Lava Bucket"), - LEAD(420, 0, 29539, "Lead", "Leash"), - LEATHER(334, 0, 16414, "Leather"), - LEATHER_BOOTS(301, 0, 15282, "Leather Boots"), - LEATHER_CHESTPLATE(299, 0, 29275, "Leather Tunic", "LEATHER_CHESTPLATE"), - LEATHER_HELMET(298, 0, 11624, "Leather Cap", "LEATHER_HELMET"), - LEATHER_LEGGINGS(300, 0, 28210, "Leather Pants", "LEATHER_LEGGINGS"), - LEVER(69, 0, 15319, "Lever"), - LIGHT_BLUE_BANNER(425, 12, 18060, "Light Blue Banner"), - LIGHT_BLUE_BED(355, 3, 20957, "Light Blue Bed"), - LIGHT_BLUE_CARPET(171, 3, 21194, "Light Blue Carpet"), - LIGHT_BLUE_CONCRETE(251, 3, 29481, "Light Blue Concrete"), - LIGHT_BLUE_CONCRETE_POWDER(252, 3, 31206, "Light Blue Concrete Powder"), - LIGHT_BLUE_DYE(351, 12, 28738, "Light Blue Dye"), - LIGHT_BLUE_GLAZED_TERRACOTTA(238, 0, 4336, "Light Blue Glazed Terracotta"), - LIGHT_BLUE_SHULKER_BOX(222, 0, 18226, "Light Blue Shulker Box"), - LIGHT_BLUE_STAINED_GLASS(95, 3, 17162, Arrays.asList(CMIMaterialCriteria.seeThrow), "Light Blue Stained Glass"), - LIGHT_BLUE_STAINED_GLASS_PANE(160, 3, 18721, Arrays.asList(CMIMaterialCriteria.seeThrow), "Light Blue Stained Glass Pane"), - LIGHT_BLUE_TERRACOTTA(159, 3, 31779, "Light Blue Terracotta"), - LIGHT_BLUE_WALL_BANNER(117, 12, 12011, "Light Blue Banner"), - LIGHT_BLUE_WOOL(35, 3, 21073, "Light Blue Wool"), - LIGHT_GRAY_BANNER(425, 7, 11417, "Light Gray Banner"), - LIGHT_GRAY_BED(355, 8, 5090, "Light Gray Bed"), - LIGHT_GRAY_CARPET(171, 8, 11317, "Light Gray Carpet"), - LIGHT_GRAY_CONCRETE(251, 8, 14453, "Light Gray Concrete"), - LIGHT_GRAY_CONCRETE_POWDER(252, 8, 21589, "Light Gray Concrete Powder"), - LIGHT_GRAY_DYE(351, 7, 27643, "Light Gray Dye"), - LIGHT_GRAY_GLAZED_TERRACOTTA(243, 0, 10707, "Light Gray Glazed Terracotta", "SILVER_GLAZED_TERRACOTTA"), - LIGHT_GRAY_SHULKER_BOX(227, 0, 21345, "Light Gray Shulker Box", "SILVER_SHULKER_BOX"), - LIGHT_GRAY_STAINED_GLASS(95, 8, 5843, Arrays.asList(CMIMaterialCriteria.seeThrow), "Light Gray Stained Glass"), - LIGHT_GRAY_STAINED_GLASS_PANE(160, 8, 19008, Arrays.asList(CMIMaterialCriteria.seeThrow), "Light Gray Stained Glass Pane"), - LIGHT_GRAY_TERRACOTTA(159, 8, 26388, "Light Gray Terracotta"), - LIGHT_GRAY_WALL_BANNER(117, 7, 31088, "Light Gray Banner"), - LIGHT_GRAY_WOOL(35, 8, 22936, "Light Gray Wool"), - LIGHT_WEIGHTED_PRESSURE_PLATE(147, 0, 14875, "Light Weighted Pressure Plate", "GOLD_PLATE"), - LILAC(175, 1, 22837, "Lilac"), - LILY_PAD(111, 0, 19271, "Lily Pad", "WATER_LILY"), - LIME_BANNER(425, 10, 18887, "Lime Banner"), - LIME_BED(355, 5, 27860, "Lime Bed"), - LIME_CARPET(171, 5, 15443, "Lime Carpet"), - LIME_CONCRETE(251, 5, 5863, "Lime Concrete"), - LIME_CONCRETE_POWDER(252, 5, 28859, "Lime Concrete Powder"), - LIME_DYE(351, 10, 6147, "Lime Dye"), - LIME_GLAZED_TERRACOTTA(240, 0, 13861, "Lime Glazed Terracotta"), - LIME_SHULKER_BOX(224, 0, 28360, "Lime Shulker Box"), - LIME_STAINED_GLASS(95, 5, 24266, Arrays.asList(CMIMaterialCriteria.seeThrow), "Lime Stained Glass"), - LIME_STAINED_GLASS_PANE(160, 5, 10610, Arrays.asList(CMIMaterialCriteria.seeThrow), "Lime Stained Glass Pane"), - LIME_TERRACOTTA(159, 5, 24013, "Lime Terracotta"), - LIME_WALL_BANNER(117, 10, 21422, "Lime Banner"), - LIME_WOOL(35, 5, 10443, "Lime Wool"), - LINGERING_POTION(441, 0, 25857, "Lingering Potion"), - LLAMA_SPAWN_EGG(383, 103, 23640, "Llama Spawn Egg", "Spawn Llama"), - MAGENTA_BANNER(425, 13, 15591, "Magenta Banner"), - MAGENTA_BED(355, 2, 20061, "Magenta Bed"), - MAGENTA_CARPET(171, 2, 6180, "Magenta Carpet"), - MAGENTA_CONCRETE(251, 2, 20591, "Magenta Concrete"), - MAGENTA_CONCRETE_POWDER(252, 2, 8272, "Magenta Concrete Powder"), - MAGENTA_DYE(351, 13, 11788, "Magenta Dye"), - MAGENTA_GLAZED_TERRACOTTA(237, 0, 8067, "Magenta Glazed Terracotta"), - MAGENTA_SHULKER_BOX(221, 0, 21566, "Magenta Shulker Box"), - MAGENTA_STAINED_GLASS(95, 2, 26814, Arrays.asList(CMIMaterialCriteria.seeThrow), "Magenta Stained Glass"), - MAGENTA_STAINED_GLASS_PANE(160, 2, 14082, Arrays.asList(CMIMaterialCriteria.seeThrow), "Magenta Stained Glass Pane"), - MAGENTA_TERRACOTTA(159, 2, 25900, "Magenta Terracotta"), - MAGENTA_WALL_BANNER(117, 13, 23291, "Magenta Banner"), - MAGENTA_WOOL(35, 2, 11853, "Magenta Wool"), - MAGMA_BLOCK(213, 0, 25927, "Magma Block", "MAGMA"), - MAGMA_CREAM(378, 0, 25097, "Magma Cream"), - MAGMA_CUBE_SPAWN_EGG(383, 62, 26638, "Magma Cube Spawn Egg", "Spawn Magma Cube"), - MAP(395, 0, 21655, "Empty Map"), - MELON(103, 0, 25172, "Melon", "Melon_Block"), - MELON_SEEDS(362, 0, 18340, "Melon Seeds"), - MELON_SLICE(360, 0, 5347, "Melon Slice"), - MELON_STEM(105, 0, 8247, "Melon Stem"), - MILK_BUCKET(335, 0, 9680, "Milk Bucket"), - MINECART(328, 0, 14352, "Minecart"), - MOOSHROOM_SPAWN_EGG(383, 96, 22125, "Mooshroom Spawn Egg", "Spawn Mushroom Cow"), - MOSSY_COBBLESTONE(48, 0, 21900, "Mossy Cobblestone", "MOSSY_COBBLESTONE"), - MOSSY_COBBLESTONE_WALL(139, 1, 11536, "Mossy Cobblestone Wall"), - MOSSY_STONE_BRICKS(98, 1, 16415, "Mossy Stone Bricks"), - MOVING_PISTON(36, 0, 13831, "Piston Moving Piece"), - MULE_SPAWN_EGG(383, 32, 11229, "Mule Spawn Egg", "Spawn Mule"), - MUSHROOM_STEM(16543, "Mushroom Stem"), - MUSHROOM_STEW(282, 0, 16336, "Mushroom Stew", "MUSHROOM_SOUP"), - MUSIC_DISC_11(2266, 0, 27426, "11 Disc", "RECORD_11"), - MUSIC_DISC_13(2256, 0, 16359, "13 Disc", "GOLD_RECORD"), - MUSIC_DISC_BLOCKS(2258, 0, 26667, "Blocks Disc", "RECORD_3"), - MUSIC_DISC_CAT(2257, 0, 16246, "Cat Disc", "GREEN_RECORD"), - MUSIC_DISC_CHIRP(2259, 0, 19436, "Chirp Disc", "RECORD_4"), - MUSIC_DISC_FAR(2260, 0, 13823, "Far Disc", "RECORD_5"), - MUSIC_DISC_MALL(2261, 0, 11517, "Mall Disc", "RECORD_6"), - MUSIC_DISC_MELLOHI(2262, 0, 26117, "Mellohi Disc", "RECORD_7"), - MUSIC_DISC_STAL(2263, 0, 14989, "Stal Disc", "RECORD_8"), - MUSIC_DISC_STRAD(2264, 0, 16785, "Strad Disc", "RECORD_9"), - MUSIC_DISC_WAIT(2267, 0, 26499, "Wait Disc", "RECORD_12"), - MUSIC_DISC_WARD(2265, 0, 24026, "Ward Disc", "RECORD_10"), - MUTTON(423, 0, 4792, "Raw Mutton"), - MYCELIUM(110, 0, 9913, "Mycelium", "MYCEL"), - NAME_TAG(421, 0, 30731, "Name Tag"), - NAUTILUS_SHELL(19989, "Nautilus Shell"), - NETHERRACK(87, 0, 23425, "Netherrack"), - NETHER_BRICK(405, 0, 19996, "Nether Brick", "Nether Brick Item"), - NETHER_BRICKS(112, 0, 27802, "Nether Bricks"), - NETHER_BRICK_FENCE(113, 0, 5286, Arrays.asList(CMIMaterialCriteria.seeThrow), "Nether Brick Fence", "NETHER_FENCE"), - NETHER_BRICK_SLAB(44, 6, 26586, "Nether Brick Slab"), - NETHER_BRICK_STAIRS(114, 0, 12085, "Nether Brick Stairs", "NETHER_BRICK_STAIRS"), - NETHER_PORTAL(90, 0, 19469, "Nether Portal", "PORTAL"), - NETHER_QUARTZ_ORE(153, 0, 4807, "Nether Quartz Ore", "QUARTZ_ORE"), - NETHER_STAR(399, 0, 12469, "Nether Star"), - NETHER_WART(372, 0, 29227, "Nether Wart", "NETHER_STALK"), - NETHER_WART_BLOCK(214, 0, 15486, "Nether Wart Block", "NETHER_WART_BLOCK"), - NOTE_BLOCK(25, 0, 20979, "Note Block", "NOTE_BLOCK"), - OAK_BOAT(333, 0, 17570, "Boat", "Oak Boat"), - OAK_BUTTON(143, 0, 13510, "Oak Button", "Wooden_button"), - OAK_DOOR(324, 0, 20341, "Wooden Door", "Wood Door", "Door"), - OAK_FENCE(85, 0, 6442, Arrays.asList(CMIMaterialCriteria.seeThrow), "Oak Fence", "FENCE"), - OAK_FENCE_GATE(107, 0, 16689, Arrays.asList(CMIMaterialCriteria.seeThrow), "Oak Fence Gate", "FENCE_GATE"), - OAK_LEAVES(18, 0, 4385, "Oak Leaves"), - OAK_LOG(17, 0, 26723, "Oak Log"), - OAK_PLANKS(5, 0, 14905, "Oak Wood Plank", "Oak Planks"), - OAK_PRESSURE_PLATE(72, 0, 20108, "Oak Pressure Plate", "Wooden_Presure_Plate"), - OAK_SAPLING(6, 0, 9636, "Oak Sapling"), - OAK_SLAB(126, 0, 12002, "Oak Slab", "Wood step"), - OAK_STAIRS(53, 0, 5449, "Oak Stairs", "WOOD_STAIRS"), - OAK_TRAPDOOR(96, 0, 16927, "Oak Trapdoor", "Trapdoor"), - OAK_WOOD(7378, "Oak Wood"), - OBSERVER(218, 0, 10726, "Observer"), - OBSIDIAN(49, 0, 32723, "Obsidian"), - OCELOT_SPAWN_EGG(383, 98, 30080, "Ocelot Spawn Egg", "Spawn Ocelot"), - ORANGE_BANNER(425, 14, 4839, "Orange Banner"), - ORANGE_BED(355, 1, 11194, "Orange Bed"), - ORANGE_CARPET(171, 1, 24752, "Orange Carpet"), - ORANGE_CONCRETE(251, 1, 19914, "Orange Concrete"), - ORANGE_CONCRETE_POWDER(252, 1, 30159, "Orange Concrete Powder"), - ORANGE_DYE(351, 14, 13866, "Orange Dye"), - ORANGE_GLAZED_TERRACOTTA(236, 0, 27451, "Orange Glazed Terracotta"), - ORANGE_SHULKER_BOX(220, 0, 21673, "Orange Shulker Box"), - ORANGE_STAINED_GLASS(95, 1, 25142, Arrays.asList(CMIMaterialCriteria.seeThrow), "Orange Stained Glass"), - ORANGE_STAINED_GLASS_PANE(160, 1, 21089, Arrays.asList(CMIMaterialCriteria.seeThrow), "Orange Stained Glass Pane"), - ORANGE_TERRACOTTA(159, 1, 18684, "Orange Terracotta"), - ORANGE_TULIP(38, 5, 26038, "Orange Tulip"), - ORANGE_WALL_BANNER(117, 114, 9936, "Orange Banner"), - ORANGE_WOOL(35, 1, 23957, "Orange Wool"), - OXEYE_DAISY(38, 8, 11709, "Oxeye Daisy"), - PACKED_ICE(174, 0, 28993, "Packed Ice"), - PAINTING(321, 0, 23945, "Painting"), - PAPER(339, 0, 9923, "Paper"), - PARROT_SPAWN_EGG(383, 105, 23614, "Parrot Spawn Egg", "Spawn Parrot"), - PEONY(175, 5, 21155, "Peony"), - PETRIFIED_OAK_SLAB(18658, "Petrified Oak Slab"), - PHANTOM_MEMBRANE(18398, "Phantom Membrane"), - PHANTOM_SPAWN_EGG(24648, "Phantom Spawn Egg"), - PIG_SPAWN_EGG(383, 90, 22584, "Spawn Pig", "Pig Spawn Egg"), - PINK_BANNER(425, 9, 19439, "Pink Banner"), - PINK_BED(355, 6, 13795, "Pink Bed"), - PINK_CARPET(171, 6, 30186, "Pink Carpet"), - PINK_CONCRETE(251, 6, 5227, "Pink Concrete"), - PINK_CONCRETE_POWDER(252, 6, 6421, "Pink Concrete Powder"), - PINK_DYE(351, 9, 31151, "Pink Dye"), - PINK_GLAZED_TERRACOTTA(241, 0, 10260, "Pink Glazed Terracotta"), - PINK_SHULKER_BOX(225, 0, 24968, "Pink Shulker Box"), - PINK_STAINED_GLASS(95, 6, 16164, Arrays.asList(CMIMaterialCriteria.seeThrow), "Pink Stained Glass"), - PINK_STAINED_GLASS_PANE(160, 6, 24637, Arrays.asList(CMIMaterialCriteria.seeThrow), "Pink Stained Glass Pane"), - PINK_TERRACOTTA(159, 6, 23727, "Pink Terracotta"), - PINK_TULIP(38, 7, 27319, "Pink Tulip"), - PINK_WALL_BANNER(117, 9, 9421, "Pink Banner"), - PINK_WOOL(35, 6, 7611, "Pink Wool"), - PISTON(33, 0, 21130, "Piston", "PISTON_BASE"), - PISTON_HEAD(34, 0, 30226, "Piston Head", "PISTON_EXTENSION"), - PLAYER_HEAD(397, 3, 21174, "Mob Head (Human)", "Player Head"), - PLAYER_WALL_HEAD(144, 3, 13164, "Player Wall Head"), - PODZOL(3, 2, 24068, "Podzol"), - POISONOUS_POTATO(394, 0, 32640, "Poisonous Potato"), - POLAR_BEAR_SPAWN_EGG(383, 102, 17015, "Polar Bear Spawn Egg", "Spawn Polar Bear"), - POLISHED_ANDESITE(1, 6, 8335, "Polished Andesite"), - POLISHED_DIORITE(1, 4, 31615, "Polished Diorite"), - POLISHED_GRANITE(1, 2, 5477, "Polished Granite"), - POPPED_CHORUS_FRUIT(433, 0, 27844, "Popped Chorus Fruit"), - POPPY(38, 0, 12851, "Poppy"), - PORKCHOP(319, 0, 30896, "Raw Porkchop"), - POTATO(392, 0, 21088, "Potato", "Potatoitem"), - POTATOES(142, 0, 10879, "Potatoes"), - - // Potions - POTION(373, 0, 24020, "Potion"), -// AWKWARD_POTION(373, 16, 24020, "Awkard Potion"), -// THICK_POTION(373, 32, 24020, "Thick Potion"), -// MUNDANE_POTION(373, 64, 24020, "Mundane Potion"), -// REGENERATION_POTION(373, 8193, 24020, "Regeneration Potion"), -// SWIFTNESS_POTION(373, 8194, 24020, "Swiftness Potion"), -// FIRE_RESISTANCE_POTION(373, 8195, 24020, "Fire Resistance Potion"), -// POISON_POTION(373, 8196, 24020, "Poison Potion"), -// HEALING_POTION(373, 8197, 24020, "Healing Potion"), -// NIGHT_VISION_POTION(373, 8198, 24020, "Night Vision Potion"), -// WEAKNESS_POTION(373, 8200, 24020, "Weakness Potion"), -// STRENGTH_POTION(373, 8201, 24020, "Strenght Potion"), -// SLOWNESS_POTION(373, 8202, 24020, "Slowness Potion"), -// HARMING_POTION(373, 8204, 24020, "Harming Potion"), -// WATER_BREATHING_POTION(373, 8205, 24020, "Water Breathing Potion"), -// INVISIBILITY_POTION(373, 8206, 24020, "Invisibility Potion"), -// REGENERATION_POTION2(373, 8225, 24020, "Regeneration Potion"), -// SWIFTNESS_POTION2(373, 8226, 24020, "Swiftness Potion2"), -// POISON_POTION2(373, 8228, 24020, "Poison Potion2"), -// HEALING_POTION2(373, 8229, 24020, "Healing Potion2"), -// STRENGTH_POTION2(373, 8233, 24020, "Strength Potion2"), -// LEAPING_POTION2(373, 8235, 24020, "Leaping Potion2"), -// HARMING_POTION2(373, 8236, 24020, "Harming Potion2"), -// REGENERATION_POTION3(373, 8257, 24020, "Regeneration Potion3"), -// SWIFTNESS_POTION3(373, 8258, 24020, "Swiftness Potion3"), -// FIRE_RESISTANCE_POTION3(373, 8259, 24020, "Fire Resistance potion3"), -// POISON_POTION3(373, 8260, 24020, "Poison Potion3"), -// NIGHT_VISION_POTION2(373, 8262, 24020, "Night Vision Potion2"), -// WEAKNESS_POTION2(373, 8264, 24020, "Weakness Potion2"), -// STRENGTH_POTION3(373, 8265, 24020, "Strength Potion3"), -// SLOWNESS_POTION2(373, 8266, 24020, "Slowness Potion2"), -// LEAPING_POTION3(373, 8267, 24020, "Leaping Potion3"), -// WATER_BREATHING_POTION2(373, 8269, 24020, "Water Breathing Potion2"), -// INVISIBILITY_POTION2(373, 8270, 24020, "Invisibility Potion2"), -// REGENERATION_POTION4(373, 8289, 24020, "Regeneration Potion4"), -// SWIFTNESS_POTION4(373, 8290, 24020, "Swiftness Potion4"), -// POISON_POTION4(373, 8292, 24020, "Poison Potion4"), -// STRENGTH_POTION4(373, 8297, 24020, "Strength Potion4"), - - POTTED_ACACIA_SAPLING(14096, " Acacia Sapling"), - POTTED_ALLIUM(13184, "Potted Allium"), - POTTED_AZURE_BLUET(8754, "Potted Azure Bluet"), - POTTED_BIRCH_SAPLING(32484, "Potted Birch Sapling"), - POTTED_BLUE_ORCHID(6599, "Potted Blue Orchid"), - POTTED_BROWN_MUSHROOM(14481, "Potted Brown Mushroom"), - POTTED_CACTUS(8777, "Potted Cactus"), - POTTED_DANDELION(9727, "Potted Dandelion"), - POTTED_DARK_OAK_SAPLING(6486, "Potted Dark Oak Sapling"), - POTTED_DEAD_BUSH(13020, "Potted Dead Bush"), - POTTED_FERN(23315, "Potted Fern"), - POTTED_JUNGLE_SAPLING(7525, "Potted Jungle Sapling"), - POTTED_OAK_SAPLING(11905, "Potted Oak Sapling"), - POTTED_ORANGE_TULIP(28807, "Potted Orange Tulip"), - POTTED_OXEYE_DAISY(19707, "Potted Oxeye Daisy"), - POTTED_PINK_TULIP(10089, "Potted Pink Tulip"), - POTTED_POPPY(7457, "Potted Poppy"), - POTTED_RED_MUSHROOM(22881, "Potted Red Mushroom"), - POTTED_RED_TULIP(28594, "Potted Red Tulip"), - POTTED_SPRUCE_SAPLING(29498, "Potted Spruce Sapling"), - POTTED_WHITE_TULIP(24330, "Potted White Tulip"), - POWERED_RAIL(27, 0, 11064, "Powered Rail"), - PRISMARINE(168, 0, 7539, "Prismarine"), - PRISMARINE_BRICKS(168, 1, 29118, "Prismarine Bricks"), - PRISMARINE_BRICK_SLAB(26672, "Prismarine Brick Slab"), - PRISMARINE_BRICK_STAIRS(15445, "Prismarine Brick Stairs"), - PRISMARINE_CRYSTALS(410, 0, 31546, "Prismarine Crystals"), - PRISMARINE_SHARD(409, 0, 10993, "Prismarine Shard"), - PRISMARINE_SLAB(31323, "Prismarine Slab"), - PRISMARINE_STAIRS(19217, "Prismarine Stairs"), - PUFFERFISH(349, 3, 8115, "Pufferfish"), - PUFFERFISH_BUCKET(8861, "Bucket of Pufferfish"), - PUFFERFISH_SPAWN_EGG(24573, "Pufferfish Spawn Egg"), - PUMPKIN(86, 0, 19170, "Pumpkin"), - PUMPKIN_PIE(400, 0, 28725, "Pumpkin Pie"), - PUMPKIN_SEEDS(361, 0, 28985, "Pumpkin Seeds"), - PUMPKIN_STEM(104, 0, 19021, "Pumpkin Stem"), - PURPLE_BANNER(425, 5, 29027, "Purple Banner"), - PURPLE_BED(355, 10, 29755, "Purple Bed", "Purple Bed"), - PURPLE_CARPET(171, 10, 5574, "Purple Carpet"), - PURPLE_CONCRETE(251, 10, 20623, "Purple Concrete"), - PURPLE_CONCRETE_POWDER(252, 10, 26808, "Purple Concrete Powder"), - PURPLE_DYE(351, 5, 6347, "Purple Dye"), - PURPLE_GLAZED_TERRACOTTA(245, 0, 4818, "Purple Glazed Terracotta"), - PURPLE_SHULKER_BOX(229, 0, 10373, "Purple Shulker Box"), - PURPLE_STAINED_GLASS(95, 10, 21845, Arrays.asList(CMIMaterialCriteria.seeThrow), "Purple Stained Glass"), - PURPLE_STAINED_GLASS_PANE(160, 10, 10948, Arrays.asList(CMIMaterialCriteria.seeThrow), "Purple Stained Glass Pane"), - PURPLE_TERRACOTTA(159, 10, 10387, "Purple Terracotta"), - PURPLE_WALL_BANNER(117, 5, 14298, "Purple Banner"), - PURPLE_WOOL(35, 10, 11922, "Purple Wool"), - PURPUR_BLOCK(201, 0, 7538, "Purpur Block"), - PURPUR_PILLAR(202, 0, 26718, "Purpur Pillar"), - PURPUR_SLAB(205, 0, 11487, "Purpur Slab"), - PURPUR_STAIRS(203, 0, 8921, "Purpur Stairs"), - QUARTZ(406, 0, 23608, "Nether Quartz"), - QUARTZ_BLOCK(155, 0, 11987, "Block of Quartz"), - QUARTZ_PILLAR(155, 2, 16452, "Quartz Pillar"), - QUARTZ_SLAB(44, 7, 4423, "Quartz Slab"), - QUARTZ_STAIRS(156, 0, 24079, "Quartz Stairs"), - RABBIT(411, 0, 23068, "Raw Rabbit"), - RABBIT_FOOT(414, 0, 13864, "Rabbit's Foot"), - RABBIT_HIDE(415, 0, 12467, "Rabbit Hide"), - RABBIT_SPAWN_EGG(383, 101, 26496, "Rabbit Spawn Egg", "Spawn Rabbit"), - RABBIT_STEW(413, 0, 10611, "Rabbit Stew"), - RAIL(66, 0, 13285, "Rail", "RAILS"), - REDSTONE(331, 0, 11233, "Redstone", "Redstone Dust"), - REDSTONE_BLOCK(152, 0, 19496, "Block of Redstone", "REDSTONE_BLOCK"), - REDSTONE_LAMP(123, 0, 8217, "Redstone Lamp", "REDSTONE_LAMP_OFF"), - REDSTONE_ORE(73, 0, 10887, "Redstone Ore"), - REDSTONE_TORCH(76, 0, 22547, "Redstone Torch(on)", "REDSTONE_TORCH_ON"), - REDSTONE_WALL_TORCH(76, 0, 7595, "Redstone Wall Torch"), - REDSTONE_WIRE(55, 0, 25984, "Redstone Dust", "REDSTONE_WIRE"), - RED_BANNER(425, 1, 26961, "Red Banner"), - RED_BED(355, 14, 30910, "Red Bed", "Red Bed"), - RED_CARPET(171, 14, 5424, "Red Carpet"), - RED_CONCRETE(251, 14, 8032, "Red Concrete"), - RED_CONCRETE_POWDER(252, 14, 13286, "Red Concrete Powder"), - RED_GLAZED_TERRACOTTA(249, 0, 24989, "Red Glazed Terracotta"), - RED_MUSHROOM(40, 0, 19728, "Red Mushroom", "RED_MUSHROOM"), - RED_MUSHROOM_BLOCK(100, 0, 20766, "Red Mushroom Block", "HUGE_MUSHROOM_2"), - RED_NETHER_BRICKS(215, 0, 18056, "Red Nether Bricks", "RED_NETHER_BRICK"), - RED_SAND(12, 1, 16279, "Red Sand"), - RED_SANDSTONE(179, 0, 9092, "Red Sandstone"), - RED_SANDSTONE_SLAB(182, 0, 17550, "Red Sandstone Slab", "STONE_SLAB2"), - RED_SANDSTONE_STAIRS(180, 0, 25466, "Red Sandstone Stairs"), - RED_SHULKER_BOX(233, 0, 32448, "Red Shulker Box"), - RED_STAINED_GLASS(95, 14, 9717, Arrays.asList(CMIMaterialCriteria.seeThrow), "Red Stained Glass"), - RED_STAINED_GLASS_PANE(160, 14, 8630, Arrays.asList(CMIMaterialCriteria.seeThrow), "Red Stained Glass Pane"), - RED_TERRACOTTA(159, 14, 5086, "Red Terracotta"), - RED_TULIP(38, 4, 16781, "Red Tulip"), - RED_WALL_BANNER(117, 1, 4378, "Red Banner"), - RED_WOOL(35, 14, 11621, "Red Wool"), - REPEATER(356, 0, 28823, "Redstone Repeater", "Diode"), - REPEATING_COMMAND_BLOCK(12405, "Repeating Command Block"), - ROSE_BUSH(175, 4, 6080, "Rose Bush"), - ROSE_RED(351, 1, 15694, "Rose Red"), - ROTTEN_FLESH(367, 0, 21591, "Rotten Flesh"), - SADDLE(329, 0, 30206, "Saddle"), - SALMON(349, 1, 18516, "Raw Salmon"), - SALMON_BUCKET(31427, "Bucket of Salmon"), - SALMON_SPAWN_EGG(18739, "Salmon Spawn Egg"), - SAND(12, 0, 11542, "Sand"), - SANDSTONE(24, 0, 13141, "Sandstone"), - SANDSTONE_SLAB(44, 1, 29830, "Sandstone Slab"), - SANDSTONE_STAIRS(128, 0, 18474, "Sandstone Stairs"), - SCUTE(11914, "Scute"), - SEAGRASS(23942, "Seagrass"), - SEA_LANTERN(169, 0, 16984, "Sea Lantern"), - SEA_PICKLE(19562, "Sea Pickle"), - SHEARS(359, 0, 27971, "Shears"), - SHEEP_SPAWN_EGG(383, 91, 24488, "Sheep Spawn Egg", "Spawn Sheep"), - SHIELD(442, 0, 29943, "Shield"), - SHULKER_BOX(229, 0, 7776, "Shulker Box"), - SHULKER_SHELL(450, 0, 27848, "Shulker Shell"), - SHULKER_SPAWN_EGG(383, 69, 31848, "Shulker Spawn Egg", "Spawn Shulker"), - SIGN(323, 0, 16918, "Sign"), - SILVERFISH_SPAWN_EGG(383, 60, 14537, "Silverfish Spawn Egg", "Spawn Silverfish"), - SKELETON_HORSE_SPAWN_EGG(383, 28, 21356, "Skeleton Horse Spawn Egg", "Spawn Skeleton Horse"), - SKELETON_SKULL(397, 0, 13270, "Mob Head (Skeleton)", "Skeleton Skull"), - SKELETON_SPAWN_EGG(383, 51, 15261, "Skeleton Spawn Egg", "Spawn Skeleton"), - SKELETON_WALL_SKULL(144, 0, 31650, "Skeleton Wall Skull"), - SLIME_BALL(341, 0, 5242, "Slimeball"), - SLIME_BLOCK(165, 0, 31892, "Slime Block"), - SLIME_SPAWN_EGG(383, 55, 6550, "Slime Spawn Egg", "Spawn Slime"), - SMOOTH_QUARTZ(14415, "Smooth Quartz"), - SMOOTH_RED_SANDSTONE(179, 2, 25180, "Smooth Red Sandstone"), - SMOOTH_SANDSTONE(24, 2, 30039, "Smooth Sandstone"), - SMOOTH_STONE(21910, "Smooth Stone"), - SNOW(78, 0, 14146, "Snow"), - SNOWBALL(332, 0, 19487, "Snowball"), - SNOW_BLOCK(80, 0, 19913, "Snow Block"), - SOUL_SAND(88, 0, 16841, "Soul Sand"), - SPAWNER(52, 90, 7018, "Spawner", "MOB_SPAWNER"), - SPECTRAL_ARROW(439, 0, 4568, "Spectral Arrow"), - SPIDER_EYE(375, 0, 9318, "Spider Eye"), - SPIDER_SPAWN_EGG(383, 52, 14984, "Spider Spawn Egg", "Spawn Spider"), - SPLASH_POTION(438, 0, 30248, "Splash Potion", "SPLASH_POTION"), - SPONGE(19, 0, 15860, "Sponge", "SPONGE"), - SPRUCE_BOAT(444, 0, 9606, "Spruce Boat", "BOAT_SPRUCE"), - SPRUCE_BUTTON(23281, "Spruce Button"), - SPRUCE_DOOR(427, 0, 10642, "Spruce Door", "SPRUCE_DOOR_ITEM"), - SPRUCE_FENCE(188, 0, 25416, Arrays.asList(CMIMaterialCriteria.seeThrow), "Spruce Fence"), - SPRUCE_FENCE_GATE(183, 0, 26423, Arrays.asList(CMIMaterialCriteria.seeThrow), "Spruce Fence Gate"), - SPRUCE_LEAVES(18, 1, 20039, "Spruce Leaves"), - SPRUCE_LOG(17, 1, 9726, "Spruce Log"), - SPRUCE_PLANKS(5, 1, 14593, "Spruce Wood Plank", "Spruce Planks"), - SPRUCE_PRESSURE_PLATE(15932, "Spruce Pressure Plate"), - SPRUCE_SAPLING(6, 1, 19874, "Spruce Sapling"), - SPRUCE_SLAB(126, 1, 4348, "Spruce Slab"), - SPRUCE_STAIRS(134, 0, 11192, "Spruce Wood Stairs", "Spruce Stairs"), - SPRUCE_TRAPDOOR(10289, "Spruce Trapdoor"), - SPRUCE_WOOD(32328, "Spruce Wood"), - SQUID_SPAWN_EGG(383, 94, 10682, "Squid Spawn Egg", "Spawn Squid"), - STICK(280, 0, 9773, "Stick"), - STICKY_PISTON(29, 0, 18127, "Sticky Piston", "PISTON_STICKY_BASE"), - STONE(1, 0, 22948, "Stone"), - STONE_AXE(275, 0, 6338, "Stone Axe"), - STONE_BRICKS(98, 0, 6962, "Stone Bricks"), - STONE_BRICK_SLAB(44, 5, 19676, "Stone Brick Slab"), - STONE_BRICK_STAIRS(109, 0, 27032, "Stone Brick Stairs", "SMOOTH_STAIRS"), - STONE_BUTTON(77, 0, 12279, "Stone Button"), - STONE_HOE(291, 0, 22855, "Stone Hoe"), - STONE_PICKAXE(274, 0, 14611, "Stone Pickaxe"), - STONE_PRESSURE_PLATE(70, 0, 22591, "Stone Pressure Plate", "STONE_PLATE"), - STONE_SHOVEL(273, 0, 9520, "Stone Shovel", "STONE_SPADE"), - STONE_SLAB(44, 0, 19838, "Stone Slab"), - STONE_SWORD(272, 0, 25084, "Stone Sword"), - STRAY_SPAWN_EGG(383, 6, 30153, "Stray Spawn Egg", "Spawn Stray"), - STRING(287, 0, 12806, "String"), - STRIPPED_ACACIA_LOG(18167, "Stripped Acacia Log"), - STRIPPED_ACACIA_WOOD(27193, "Stripped Acacia Wood"), - STRIPPED_BIRCH_LOG(8838, "Stripped Birch Log"), - STRIPPED_BIRCH_WOOD(22350, "Stripped Birch Wood"), - STRIPPED_DARK_OAK_LOG(6492, "Stripped Dark Oak Log"), - STRIPPED_DARK_OAK_WOOD(16000, "Stripped Dark Oak Wood"), - STRIPPED_JUNGLE_LOG(15476, "Stripped Jungle Log"), - STRIPPED_JUNGLE_WOOD(30315, "Stripped Jungle Wood"), - STRIPPED_OAK_LOG(20523, "Stripped Oak Log"), - STRIPPED_OAK_WOOD(31455, "Stripped Oak Wood"), - STRIPPED_SPRUCE_LOG(6140, "Stripped Spruce Log"), - STRIPPED_SPRUCE_WOOD(6467, "Stripped Spruce Wood"), - STRUCTURE_BLOCK(255, 0, 26831, "Structure Block"), - STRUCTURE_VOID(217, 0, 30806, "Structure Void"), - SUGAR(353, 0, 30638, "Sugar"), - SUGAR_CANE(338, 0, 7726, "Sugar Canes", "Sugar Cane"), - SUNFLOWER(175, 0, 7408, "Sunflower"), - TALL_GRASS(31, 0, 21559, "Tall Grass"), - TALL_SEAGRASS(27189, "Tall Seagrass"), - TERRACOTTA(172, 0, 16544, "Terracotta", "HARD_CLAY"), - TIPPED_ARROW(440, 0, 25164, "Tipped Arrow"), - TNT(46, 0, 7896, "TNT", "TNT"), - TNT_MINECART(407, 0, 4277, "Minecart with TNT", "explosiveminecart"), - TORCH(50, 0, 6063, "Torch"), - TOTEM_OF_UNDYING(449, 0, 10139, "Totem Of Undying", "Totem"), - TRAPPED_CHEST(146, 0, 18970, "Trapped Chest"), - TRIDENT(7534, "Trident"), - TRIPWIRE(132, 0, 8810, "Tripwire"), - TRIPWIRE_HOOK(131, 0, 8130, "Tripwire Hook"), - TROPICAL_FISH(349, 2, 24879, "Tropical Fish"), - TROPICAL_FISH_BUCKET(29995, "Bucket of Tropical Fish"), - TROPICAL_FISH_SPAWN_EGG(19713, "Tropical Fish Spawn Egg"), - TUBE_CORAL(23048, "Tube Coral"), - TUBE_CORAL_BLOCK(23723, "Tube Coral Block"), - TUBE_CORAL_FAN(19929, "Tube Coral Fan"), - TUBE_CORAL_WALL_FAN(25282, "Tube Coral Wall Fan"), - TURTLE_EGG(32101, "Turtle Egg"), - TURTLE_HELMET(30120, "Turtle Shell"), - TURTLE_SPAWN_EGG(17324, "Turtle Spawn Egg"), - VEX_SPAWN_EGG(383, 35, 27751, "Vex Spawn Egg", "Spawn Vex"), - VILLAGER_SPAWN_EGG(383, 120, 30348, "Villager Spawn Egg", "Spawn Villager"), - VINDICATOR_SPAWN_EGG(383, 36, 25324, "Vindicator Spawn Egg", "Spawn Vindicator"), - VINE(106, 0, 14564, Arrays.asList(CMIMaterialCriteria.seeThrow), "Vines", "VINE"), - VOID_AIR(13668, "Void Air"), - WALL_SIGN(68, 0, 10644, "Wall Sign"), - WALL_TORCH(50, 0, 25890, "Wall Torch"), - WATER(8, 0, 24998, "Flowing Water"), - WATER_BUCKET(326, 0, 8802, "Water Bucket"), - WET_SPONGE(19, 1, 9043, "Wet Sponge"), - WHEAT(296, 0, 27709, "Wheat"), - WHEAT_SEEDS(295, 0, 28742, "Wheat Seeds", "SEEDS"), - WHITE_BANNER(425, 15, 17562, "White Banner"), - WHITE_BED(355, 0, 8185, "White Bed", "Bed"), - WHITE_CARPET(171, 0, 15117, "White Carpet"), - WHITE_CONCRETE(251, 0, 6281, "White Concrete"), - WHITE_CONCRETE_POWDER(252, 0, 10363, "White Concrete Powder"), - WHITE_GLAZED_TERRACOTTA(235, 0, 11326, "White Glazed Terracotta"), - WHITE_SHULKER_BOX(219, 0, 31750, "White Shulker Box"), - WHITE_STAINED_GLASS(95, 0, 31190, Arrays.asList(CMIMaterialCriteria.seeThrow), "White Stained Glass"), - WHITE_STAINED_GLASS_PANE(160, 0, 10557, Arrays.asList(CMIMaterialCriteria.seeThrow), "White Stained Glass Pane"), - WHITE_TERRACOTTA(159, 0, 20975, "White Terracotta"), - WHITE_TULIP(38, 6, 9742, "White Tulip"), - WHITE_WALL_BANNER(425, 15, 15967, "White Banner"), - WHITE_WOOL(35, 0, 8624, "White Wool", "Wool"), - WITCH_SPAWN_EGG(383, 66, 11837, "Witch Spawn Egg", "Spawn Witch"), - WITHER_SKELETON_SKULL(397, 1, 31487, "Mob Head (Wither Skeleton)", "Wither Skeleton Skull"), - WITHER_SKELETON_SPAWN_EGG(383, 5, 10073, "Wither Skeleton Spawn Egg", "Spawn Wither Skeleton"), - WITHER_SKELETON_WALL_SKULL(144, 1, 9326, "Wither Skeleton Wall Skull"), - WOLF_SPAWN_EGG(383, 95, 21692, "Wolf Spawn Egg", "Spawn Wolf"), - WOODEN_AXE(271, 0, 6292, "Wooden Axe", "Wood Axe"), - WOODEN_HOE(290, 0, 16043, "Wooden Hoe", "Wood Hoe"), - WOODEN_PICKAXE(270, 0, 12792, "Wooden Pickaxe", "WOOD_PICKAXE"), - WOODEN_SHOVEL(269, 0, 28432, "Wooden Shovel", "WOOD_SPADE"), - WOODEN_SWORD(268, 0, 7175, "Wooden Sword", "WOOD_SWORD"), - WRITABLE_BOOK(386, 0, 13393, "Book and Quill"), - WRITTEN_BOOK(387, 0, 24164, "Written Book"), - YELLOW_BANNER(425, 11, 30382, "Yellow Banner"), - YELLOW_BED(355, 4, 30410, "Yellow Bed"), - YELLOW_CARPET(171, 4, 18149, "Yellow Carpet"), - YELLOW_CONCRETE(251, 4, 15722, "Yellow Concrete"), - YELLOW_CONCRETE_POWDER(252, 4, 10655, "Yellow Concrete Powder"), - YELLOW_GLAZED_TERRACOTTA(239, 0, 10914, "Yellow Glazed Terracotta"), - YELLOW_SHULKER_BOX(223, 0, 28700, "Yellow Shulker Box"), - YELLOW_STAINED_GLASS(95, 4, 12182, Arrays.asList(CMIMaterialCriteria.seeThrow), "Yellow Stained Glass"), - YELLOW_STAINED_GLASS_PANE(160, 4, 20298, Arrays.asList(CMIMaterialCriteria.seeThrow), "Yellow Stained Glass Pane"), - YELLOW_TERRACOTTA(159, 4, 32129, "Yellow Terracotta"), - YELLOW_WALL_BANNER(425, 11, 32004, "Yellow Banner"), - YELLOW_WOOL(35, 4, 29507, "Yellow Wool"), - ZOMBIE_HEAD(397, 2, 9304, "Mob Head (Zombie)", "Zombie Head"), - ZOMBIE_HORSE_SPAWN_EGG(383, 29, 4275, "Zombie Horse Spawn Egg", "Spawn Zombie Horse"), - ZOMBIE_PIGMAN_SPAWN_EGG(383, 57, 11531, "Zombie Pigman Spawn Egg", "Spawn Zombie Pigman"), - ZOMBIE_SPAWN_EGG(383, 54, 5814, "Zombie Spawn Egg", "Spawn Zombie"), - ZOMBIE_VILLAGER_SPAWN_EGG(383, 27, 10311, "Zombie Villager Spawn Egg", "Spawn Zombie Villager"), - ZOMBIE_WALL_HEAD(144, 2, 16296, "Zombie Wall Head"), - - //1.14 - ACACIA_SIGN(29808, "Acacia Sign"), - ACACIA_WALL_SIGN(20316, "Acacia Wall Sign"), - ANDESITE_SLAB(32124, "Andesite Slab"), - ANDESITE_STAIRS(17747, "Andesite Stairs"), - ANDESITE_WALL(14938, "Andesite Wall"), - BAMBOO(18728, "Bamboo"), - BAMBOO_SAPLING(8478, "Bamboo Sapling"), - BARREL(22396, "Barrel"), - BELL(20000, "Bell"), - BIRCH_SIGN(11351, "Birch Sign"), - BIRCH_WALL_SIGN(9887, "Birch Wall Sign"), - BLACK_DYE(6202, "Black Dye"), - BLAST_FURNACE(31157, "Blast Furnace"), - BLUE_DYE(11588, "Blue Dye"), - BRICK_WALL(18995, "Brick Wall"), - BROWN_DYE(7648, "Brown Dye"), - CAMPFIRE(8488, "Campfire"), - CARTOGRAPHY_TABLE(28529, "Cartography Table"), - CAT_SPAWN_EGG(29583, "Cat Spawn Egg"), - CORNFLOWER(15405, "Cornflower"), - CREEPER_BANNER_PATTERN(15774, "Banner Pattern"), - CROSSBOW(4340, "Crossbow"), - CUT_RED_SANDSTONE_SLAB(-11, "Cut Red Sandstone Slab"), - CUT_SANDSTONE_SLAB(-10, "Cut Sandstone Slab"), - DARK_OAK_SIGN(15127, "Dark Oak Sign"), - DARK_OAK_WALL_SIGN(9508, "Dark Oak Wall Sign"), - DIORITE_SLAB(10715, "Diorite Slab"), - DIORITE_STAIRS(13134, "Diorite Stairs"), - DIORITE_WALL(17412, "Diorite Wall"), - END_STONE_BRICK_SLAB(23239, "End Stone Brick Slab"), - END_STONE_BRICK_STAIRS(28831, "End Stone Brick Stairs"), - END_STONE_BRICK_WALL(27225, "End Stone Brick Wall"), - FLETCHING_TABLE(30838, "Fletching Table"), - FLOWER_BANNER_PATTERN(5762, "Banner Pattern"), - FOX_SPAWN_EGG(-1, "Fox Spawn Egg"), - GLOBE_BANNER_PATTERN(-99, "Banner Pattern"), - GRANITE_SLAB(25898, "Granite Slab"), - GRANITE_STAIRS(21840, "Granite Stairs"), - GRANITE_WALL(23279, "Granite Wall"), - GREEN_DYE(23215, "Green Dye"), - GRINDSTONE(26260, "Grindstone"), - JIGSAW(17398, "Jigsaw Block"), - JUNGLE_SIGN(24717, "Jungle Sign"), - JUNGLE_WALL_SIGN(29629, "Jungle Wall Sign"), - LANTERN(5992, "Lantern"), - LEATHER_HORSE_ARMOR(-2, "Leather Horse Armor"), - LECTERN(23490, "Lectern"), - LILY_OF_THE_VALLEY(7185, "Lily of the Valley"), - LOOM(14276, "Loom"), - MOJANG_BANNER_PATTERN(11903, "Banner Pattern"), - MOSSY_COBBLESTONE_SLAB(12139, "Mossy Cobblestone Slab"), - MOSSY_COBBLESTONE_STAIRS(29210, "Mossy Cobblestone Stairs"), - MOSSY_STONE_BRICK_SLAB(14002, "Mossy Stone Brick Slab"), - MOSSY_STONE_BRICK_STAIRS(27578, "Mossy Stone Brick Stairs"), - MOSSY_STONE_BRICK_WALL(18259, "Mossy Stone Brick Wall"), - NETHER_BRICK_WALL(10398, "Nether Brick Wall"), - OAK_SIGN(8192, "Oak Sign"), - OAK_WALL_SIGN(12984, "Oak Wall Sign"), - PANDA_SPAWN_EGG(23759, "Panda Spawn Egg"), - PILLAGER_SPAWN_EGG(28659, "Pillager Spawn Egg"), - POLISHED_ANDESITE_STAIRS(7573, "Polished Andesite Stairs"), - POLISHED_ANDESITE_SLAB(0, "Polished Andesite Slab"), - POLISHED_DIORITE_SLAB(18303, "Polished Diorite Slab"), - POLISHED_DIORITE_STAIRS(4625, "Polished Diorite Stairs"), - POLISHED_GRANITE_SLAB(4521, "Polished Granite Slab"), - POLISHED_GRANITE_STAIRS(29588, "Polished Granite Stairs"), - POTTED_BAMBOO(22542, "Potted Bamboo"), - POTTED_CORNFLOWER(28917, "Potted CornFlower"), - POTTED_LILY_OF_THE_VALLEY(9364, "Potted Lily Of The Valley"), - POTTED_WITHER_ROSE(26876, "Potted Wither Rose"), - PRISMARINE_WALL(18184, "Prismarine Wall"), - RAVAGER_SPAWN_EGG(31284, "Ravager Spawn Egg"), - RED_DYE(5728, "Red Dye"), - RED_NETHER_BRICK_SLAB(12462, "Red Nether Brick Slab"), - RED_NETHER_BRICK_STAIRS(26374, "Red Nether Brick Stairs"), - RED_NETHER_BRICK_WALL(4580, "Red Nether Brick Wall"), - RED_SANDSTONE_WALL(4753, "Red Sandstone Wall"), - SANDSTONE_WALL(18470, "Sandstone Wall"), - SCAFFOLDING(15757, "Scaffolding"), - SKULL_BANNER_PATTERN(7680, "Banner Pattern"), - SMITHING_TABLE(9082, "Smithing Table"), - SMOKER(24781, "Smoker"), - SMOOTH_QUARTZ_SLAB(26543, "Smooth Quartz Slab"), - SMOOTH_QUARTZ_STAIRS(19560, "Smooth Quartz Stairs"), - SMOOTH_RED_SANDSTONE_SLAB(16304, "Smooth Red Sandstone Slab"), - SMOOTH_RED_SANDSTONE_STAIRS(17561, "Smooth Red Sandstone Stairs"), - SMOOTH_SANDSTONE_SLAB(9030, "Smooth Sandstone Slab"), - SMOOTH_SANDSTONE_STAIRS(21183, "Smooth Sandstone Stairs"), - SMOOTH_STONE_SLAB(24129, "Smooth Stone Slab"), - SPRUCE_SIGN(21502, "Spruce Sign"), - SPRUCE_WALL_SIGN(7352, "Spruce Wall Sign"), - STONECUTTER(25170, "Stonecutter"), - STONE_BRICK_WALL(29073, "Stone Brick Wall"), - STONE_STAIRS(23784, "Stone Stairs"), - SUSPICIOUS_STEW(8173, "Suspicious Stew"), - SWEET_BERRIES(19747, "Sweet Berries"), - SWEET_BERRY_BUSH(11958, "Sweet Berry Bush"), - TRADER_LLAMA_SPAWN_EGG(13512, "Trader Llama Spawn Egg"), - WANDERING_TRADER_SPAWN_EGG(12312, "Wandering Trader Spawn Egg"), - WHITE_DYE(10758, "White Dye"), - WITHER_ROSE(8619, "Wither Rose"), - YELLOW_DYE(5952, "Yellow Dye"), - COMPOSTER(-4, "Composter"), - - //1.15 - BEEHIVE("Beehive"), - BEE_NEST("Bee Nest"), - BEE_SPAWN_EGG("Bee Spawn Egg"), - HONEYCOMB("Honeycomb"), - HONEYCOMB_BLOCK("Honeycomb Block"), - HONEY_BLOCK("Honey Block"), - HONEY_BOTTLE("Honey Bottle"), - - //1.16.1 - ANCIENT_DEBRIS("Ancient Debris"), - BASALT("Basalt"), - BLACKSTONE("Blackstone"), - BLACKSTONE_SLAB("Blackstone Slab"), - BLACKSTONE_STAIRS("Blackstone Stairs"), - BLACKSTONE_WALL("Blackstone Wall"), - CHAIN("Chain"), - CHISELED_NETHER_BRICKS("Chiseled Nether Bricks"), - CHISELED_POLISHED_BLACKSTONE("Chiseled Polished Blackstone"), - CRACKED_NETHER_BRICKS("Cracked Nether Bricks"), - CRACKED_POLISHED_BLACKSTONE_BRICKS("Cracked Polished Blackstone Bricks"), - CRIMSON_BUTTON("Crimson Button"), - CRIMSON_DOOR("Crimson Door"), - CRIMSON_FENCE("Crimson Fence"), - CRIMSON_FENCE_GATE("Crimson Fence Gate"), - CRIMSON_FUNGUS("Crimson Fungus"), - CRIMSON_HYPHAE("Crimson Hyphae"), - CRIMSON_NYLIUM("Crimson Nylium"), - CRIMSON_PLANKS("Crimson Planks"), - CRIMSON_PRESSURE_PLATE("Crimson Pressure Plate"), - CRIMSON_ROOTS("Crimson Roots"), - CRIMSON_SIGN("Crimson Sign"), - CRIMSON_SLAB("Crimson Slab"), - CRIMSON_STAIRS("Crimson Stairs"), - CRIMSON_STEM("Crimson Stem"), - CRIMSON_TRAPDOOR("Crimson Trapdoor"), - CRIMSON_WALL_SIGN("Crimson Wall Sign"), - CRYING_OBSIDIAN("Crying Obsidian"), - GILDED_BLACKSTONE("Gilded Blackstone"), - HOGLIN_SPAWN_EGG("Hoglin Spawn Egg"), - LODESTONE("Lodestone"), - MUSIC_DISC_PIGSTEP("Music Disc Pigstep"), - NETHERITE_AXE("Netherite Axe"), - NETHERITE_BLOCK("Netherite Block", "netherite"), - NETHERITE_BOOTS("Netherite Boots"), - NETHERITE_CHESTPLATE("Netherite Chestplate"), - NETHERITE_HELMET("Netherite Helmet"), - NETHERITE_HOE("Netherite Hoe"), - NETHERITE_INGOT("Netherite Ingot"), - NETHERITE_LEGGINGS("Netherite Leggings"), - NETHERITE_PICKAXE("Netherite Pickaxe"), - NETHERITE_SCRAP("Netherite Scrap"), - NETHERITE_SHOVEL("Netherite Shovel"), - NETHERITE_SWORD("Netherite Sword"), - NETHER_GOLD_ORE("Nether Gold Ore"), - NETHER_SPROUTS("Nether Sprouts"), - PIGLIN_BANNER_PATTERN("Piglin Banner Pattern"), - PIGLIN_SPAWN_EGG("Piglin Spawn Egg"), - POLISHED_BASALT("Polished Basalt"), - POLISHED_BLACKSTONE("Polished Blackstone"), - POLISHED_BLACKSTONE_BRICKS("Polished Blackstone Bricks"), - POLISHED_BLACKSTONE_BRICK_SLAB("Polished Blackstone Brick Slab"), - POLISHED_BLACKSTONE_BRICK_STAIRS("Polished Blackstone Brick Stairs"), - POLISHED_BLACKSTONE_BRICK_WALL("Polished Blackstone Brick Wall"), - POLISHED_BLACKSTONE_BUTTON("Polished Blackstone Button"), - POLISHED_BLACKSTONE_PRESSURE_PLATE("Polished Blackstone Pressure Plate"), - POLISHED_BLACKSTONE_SLAB("Polished Blackstone Slab"), - POLISHED_BLACKSTONE_STAIRS("Polished Blackstone Stairs"), - POLISHED_BLACKSTONE_WALL("Polished Blackstone Wall"), - POTTED_CRIMSON_FUNGUS("Potted Crimson Fungus"), - POTTED_CRIMSON_ROOTS("Potted Crimson Roots"), - POTTED_WARPED_FUNGUS("Potted Warped Fungus"), - POTTED_WARPED_ROOTS("Potted Warped Roots"), - QUARTZ_BRICKS("Quartz Bricks"), - RESPAWN_ANCHOR("Respawn Anchor"), - SHROOMLIGHT("Shroomlight"), - SOUL_CAMPFIRE("Soul Campfire"), - SOUL_FIRE("Soul Fire"), - SOUL_LANTERN("Soul Lantern"), - SOUL_SOIL("Soul Soil"), - SOUL_TORCH("Soul Torch"), - SOUL_WALL_TORCH("Soul Wall Torch"), - STRIDER_SPAWN_EGG("Strider Spawn Egg"), - STRIPPED_CRIMSON_HYPHAE("Stripped Crimson Hyphae"), - STRIPPED_CRIMSON_STEM("Stripped Crimson Stem"), - STRIPPED_WARPED_HYPHAE("Stripped Warped Hyphae"), - STRIPPED_WARPED_STEM("Stripped Warped Stem"), - TARGET("Target"), - TWISTING_VINES("Twisting Vines"), - TWISTING_VINES_PLANT("Twisting Vines Plant"), - WARPED_BUTTON("Warped Button"), - WARPED_DOOR("Warped Door"), - WARPED_FENCE("Warped Fence"), - WARPED_FENCE_GATE("Warped Fence Gate"), - WARPED_FUNGUS("Warped Fungus"), - WARPED_FUNGUS_ON_A_STICK("Warped Fungus On A Stick"), - WARPED_HYPHAE("Warped Hyphae"), - WARPED_NYLIUM("Warped Nylium"), - WARPED_PLANKS("Warped Planks"), - WARPED_PRESSURE_PLATE("Warped Pressure Plate"), - WARPED_ROOTS("Warped Roots"), - WARPED_SIGN("Warped Sign"), - WARPED_SLAB("Warped Slab"), - WARPED_STAIRS("Warped Stairs"), - WARPED_STEM("Warped Stem"), - WARPED_TRAPDOOR("Warped Trapdoor"), - WARPED_WALL_SIGN("Warped Wall Sign", "Warped Wall"), - WARPED_WART_BLOCK("Warped Wart Block", "Warped Wart"), - WEEPING_VINES("Weeping Vines"), - WEEPING_VINES_PLANT("Weeping Vines Plant"), - ZOGLIN_SPAWN_EGG("Zoglin Spawn Egg"), - ZOMBIFIED_PIGLIN_SPAWN_EGG("Zombified Piglin Spawn Egg"), - - // 1.16.2 - PIGLIN_BRUTE_SPAWN_EGG("Piglin Brute Spawn Egg"), - - // Legacy - LEGACY_STATIONARY_WATER(9, 0, null, "Stationary Water"), - LEGACY_STATIONARY_LAVA(11, 0, null, "Stationary Lava"), - LEGACY_BURNING_FURNACE(62, 0, null, "Burning Furnace"), - LEGACY_NETHER_WARTS(115, 0, null, "Nether Warts"), - LEGACY_IRON_DOOR_BLOCK(71, 0, null, "Iron Door Block"), - LEGACY_GLOWING_REDSTON_ORE(74, 0, null, "Glowing Redstone Ore"), - LEGACY_SUGAR_CANE_BLOCK(83, 0, null, "Sugar Cane Block"), - LEGACY_RAW_FISH(349, 0, null, "Raw Fish"), - LEGACY_SKULL(144, 0, null, "Skull"), - LEGACY_SIGN_POST(63, 0, null, "Sign Post"), - LEGACY_BED_BLOCK(26, 0, null, "Bed Block"), - LEGACY_REDSTONE_TORCH_OFF(75, 0, null, "Redstone Torch Off"), - LEGACY_REDSTONE_TORCH_ON(76, 0, null, "Redstone Torch On"), - LEGACY_CAKE_BLOCK(92, 0, null, "Cake Block"), - LEGACY_DIODE_BLOCK_OFF(93, 0, null, "Diode Block Off"), - LEGACY_DIODE_BLOCK_ON(94, 0, null, "Diode Block On"), - LEGACY_MELON_BLOCK(103, 0, null, "Melon Block"), - -// LEGACY_BREWING_STAND(117, null, null, "LEGACY_BREWING_STAND", ""), -// LEGACY_CAULDRON(118, 0, null, "LEGACY_CAULDRON", ""), -// LEGACY_REDSTONE_LAMP_ON(124, null, null, "LEGACY_REDSTONE_LAMP_ON", ""), -// LEGACY_WOOD_DOUBLE_STEP(125, null, null, "LEGACY_WOOD_DOUBLE_STEP", ""), -// LEGACY_FLOWER_POT(140, null, null, "LEGACY_FLOWER_POT", ""), - LEGACY_REDSTONE_COMPARATOR_OFF(149, 0, null, "Redstone Comparator Off", ""), - LEGACY_REDSTONE_COMPARATOR_ON(150, 0, null, "Redstone Comparator On", ""), -// LEGACY_STANDING_BANNER(176, null, null, "LEGACY_STANDING_BANNER", ""), -// LEGACY_WALL_BANNER(177, null, null, "LEGACY_WALL_BANNER", ""), -// LEGACY_DAYLIGHT_DETECTOR_INVERTED(178, null, null, "LEGACY_DAYLIGHT_DETECTOR_INVERTED", ""), -// LEGACY_DOUBLE_STONE_SLAB2(181, null, null, "LEGACY_DOUBLE_STONE_SLAB2", ""), - LEGACY_WOODEN_DOOR_BLOCK(64, 0, null, "Wooden Door Block"), - LEGACY_SPRUCE_DOOR(193, 0, null, "Spruce Door Block"), - LEGACY_BIRCH_DOOR(194, 0, null, "Birch Door Block"), - LEGACY_JUNGLE_DOOR(195, 0, null, "Jungle Door Block"), - LEGACY_ACACIA_DOOR(196, 0, null, "Acacia Door Block"), - LEGACY_DARK_OAK_DOOR(197, 0, null, "Dark Oak Door Block"), - LEGACY_GLOWING_REDSTONE_ORE(74, 0, null, "Glowing Redstone Ore"), - LEGACY_BREWING_STAND(117, null, null, "LEGACY_BREWING_STAND"), -// LEGACY_PURPUR_DOUBLE_SLAB(204, null, null, "LEGACY_PURPUR_DOUBLE_SLAB", ""), -// LEGACY_COMMAND_REPEATING(210, null, null, "LEGACY_COMMAND_REPEATING", ""), -// LEGACY_COMMAND_CHAIN(211, null, null, "LEGACY_COMMAND_CHAIN", ""), - LEGACY_WHEAT(59, 0, null, "Wheat Block"); - - private Integer legacyId; - private Integer legacyData; - private Integer id; - private String name; - private List legacyName; - private String bukkitName; - private String mojangName; - private Set criteria; - - Material mat; - - CMIMaterial(Integer id, String name, String... legacyName) { - this(null, null, id, name, legacyName); - } - - CMIMaterial(Integer id, String name) { - this(null, null, id, name, ""); - } - - CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name) { - this(legacyId, legacyData, id, name, ""); - } - - CMIMaterial(String name, String... legacyName) { - this(null, null, null, name, legacyName); - } - - CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name, String... legacyName) { - this(legacyId, legacyData, id, null, name, legacyName); - } - - CMIMaterial(Integer legacyId, Integer legacyData, Integer id, List criteria, String name, String... legacyName) { - - this.legacyId = legacyId; - this.legacyData = legacyData; - this.id = id; - this.name = name; - if (legacyName != null && legacyName.length > 0 && !legacyName[0].isEmpty()) - this.legacyName = Arrays.asList(legacyName); - - if (criteria != null) - this.criteria = new HashSet<>(criteria); - } - - public String getName() { - return name; - } - - @Deprecated - public Integer getLegacyId() { - return this.legacyId == null ? 0 : this.legacyId; - } - - @Deprecated - public Integer getId() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - return this.id == null ? 0 : this.id; - } - return getLegacyId(); - } - - public Material getMaterial() { - return mat == null ? null : mat; - } - - public void updateMaterial() { - if (mat == null) { - for (Material one : Material.class.getEnumConstants()) { - if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.name().replace("_", ""))) - continue; - mat = one; - break; - } - } - if (mat == null) { - for (Material one : Material.class.getEnumConstants()) { - if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.getName().replace(" ", ""))) - continue; - mat = one; - break; - } - } - if (mat == null && !this.getLegacyNames().isEmpty()) { - main: for (Material one : Material.class.getEnumConstants()) { - for (String oneL : this.getLegacyNames()) { - if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(oneL.replace(" ", "").replace("_", ""))) - continue main; - } - mat = one; - break; - } - } - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { - if (mat == null && this.getId() != null) { - for (Material one : Material.class.getEnumConstants()) { - if (one.getId() != this.getId()) - continue; - mat = one; - break; - } - } - } - } - - public ItemStack newItemStack() { - return newItemStack(1); - } - - public ItemStack newItemStack(int amount) { - if (mat == null) { - updateMaterial(); - } - if (mat == null) { - return new ItemStack(Material.STONE); - } - - try { - if (!mat.isItem()) - return new ItemStack(Material.STONE); - } catch (Throwable e) { - } - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat); - stack.setAmount(amount); - return stack; - } - ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat, 1, (short) this.getLegacyData()); - stack.setAmount(amount); - return stack; - } - - public CMIItemStack newCMIItemStack() { - return newCMIItemStack(1); - } - - public CMIItemStack newCMIItemStack(int amount) { - if (mat == null) { - updateMaterial(); - } - if (mat == null) { - return new CMIItemStack(CMIMaterial.STONE); - } - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - CMIItemStack stack = new CMIItemStack(mat == null ? Material.STONE : mat); - stack.setAmount(amount); - return stack; - } - ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat, 1, (short) this.getLegacyData()); - - stack.setAmount(amount); - return new CMIItemStack(stack); - } - - @Deprecated - public short getData() { - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - return 0; - } - return getLegacyData(); - } - - @Deprecated - public short getLegacyData() { - return legacyData == null ? 0 : legacyData.shortValue(); - } - - public static CMIMaterial getRandom(CMIMaterial mat) { - - List ls = new ArrayList(); - - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getLegacyId() == null) - continue; - if (one.getLegacyId() != mat.getLegacyId()) - continue; - ls.add(one); - } - - if (ls.isEmpty() || ls.size() == 1) { - String part = mat.name; - if (part.contains("_")) - part = part.split("_")[part.split("[_]").length - 1]; - for (CMIMaterial one : CMIMaterial.values()) { - if (!one.name().endsWith(part)) - continue; - ls.add(one); - } - } - - Collections.shuffle(ls); - - return ls.isEmpty() ? CMIMaterial.NONE : ls.get(0); - } - - public CMIMaterial getByColorId(int id) { - return getByColorId(this, id); - } - - public static CMIMaterial getByColorId(CMIMaterial mat, int id) { - if (mat == null) - return CMIMaterial.NONE; - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getLegacyId() == null) - continue; - if (one.getLegacyId() != mat.getLegacyId()) - continue; - if (one.getLegacyData() == id) - return one; - } - - return mat; - } - - public static CMIMaterial get(String id) { - - if (id == null) - return CMIMaterial.NONE; - Integer ids = null; - Integer data = null; - id = id.replace("_", "").replace(" ", "").replace("minecraft:", "").toLowerCase(); - - if (id.contains(":")) { - try { - ids = Integer.parseInt(id.split(":")[0]); - data = Integer.parseInt(id.split(":")[1]); - if (ids <= 0) - return CMIMaterial.NONE; - return get(ids, data); - } catch (Exception ex) { - } - - try { - data = Integer.parseInt(id.split(":")[1]); - id = id.split(":")[0]; - CMIMaterial mat = ItemManager.byName.get(id + ":" + data); - if (mat != null) { - return mat; - } - CMIMaterial mat1 = ItemManager.byName.get(id); - if (mat1 != null && mat1.getLegacyId() > 0) { - mat = get(mat1.getLegacyId(), data); - if (mat != null) { - return mat; - } - } - } catch (Exception ex) { - } - } - - CMIMaterial mat = ItemManager.byName.get(id); - - if (mat != null) { - return mat; - } - - try { - mat = ItemManager.byId.get(Integer.parseInt(id)); - if (mat != null) { - return mat; - } - } catch (Exception ex) { - } - - return CMIMaterial.NONE; - } - - public static CMIMaterial get(Material mat) { - if (mat == null) - return CMIMaterial.NONE; - CMIMaterial m = ItemManager.byRealMaterial.get(mat); - if (m != null) - return m; - return get(mat.toString()); - } - - public static CMIMaterial get(int id) { - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getMaterial() == null) - continue; - if (one.getId() == id) { - return one; - } - } - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getLegacyId() == id) { - return one; - } - } - return CMIMaterial.NONE; - } - - public static CMIMaterial get(ItemStack item) { - if (item == null) - return CMIMaterial.NONE; - CMIMaterial mat = null; - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { - mat = Version.isCurrentEqualOrHigher(Version.v1_13_R1) ? get(item.getType().getId()) : get(item.getType().getId(), item.getData().getData()); - if (mat == null) { - mat = ItemManager.byName.get(item.getType().toString().toLowerCase().replace("_", "")); - } - } else { - mat = ItemManager.byRealMaterial.get(item.getType()); - } - - return mat == null ? CMIMaterial.NONE : mat; - } - - public static CMIMaterial get(Block block) { - if (block == null) - return CMIMaterial.NONE; - - try { - if (Bukkit.getWorld(block.getWorld().getUID()) == null) - return CMIMaterial.NONE; - } catch (Throwable e) { - e.printStackTrace(); - } - - if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { - return ItemManager.byRealMaterial.get(block.getType()); - } - - byte data = Version.isCurrentEqualOrLower(Version.v1_13_R1) ? block.getData() : 0; - if (block.getState() instanceof Skull) { - Skull skull = (Skull) block.getState(); - data = (byte) skull.getSkullType().ordinal(); - } - - CMIMaterial mat = null; - - if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { - mat = ItemManager.byRealMaterial.get(block.getType()); - } - - if (mat == null) { - mat = ItemManager.byName.get(block.getType().toString().replace("_", "").toLowerCase()); - } - - if (mat == null && Version.isCurrentEqualOrLower(Version.v1_13_R2)) { - mat = get(block.getType().getId(), Version.isCurrentEqualOrHigher(Version.v1_13_R1) ? 0 : data); - } - - return mat == null ? CMIMaterial.NONE : mat; - } - - public static CMIMaterial get(int id, int data) { - CMIMaterial mat = ItemManager.byName.get(id + ":" + data); - if (mat != null) { - return mat; - } - mat = ItemManager.byId.get(id); - return mat == null ? CMIMaterial.NONE : mat; - } - - public static CMIMaterial getLegacy(int id) { - CMIMaterial mat = ItemManager.byId.get(id); - if (mat != null) - return mat; - return CMIMaterial.NONE; - } - - public short getMaxDurability() { - return this.getMaterial() == null ? 0 : this.getMaterial().getMaxDurability(); - } - - public boolean isBlock() { - return this.getMaterial() == null ? false : this.getMaterial().isBlock(); - } - - public boolean isEquipment() { - return getMaxDurability() > 16; - } - - public boolean isSolid() { - return this.getMaterial() == null ? false : this.getMaterial().isSolid(); - } - - public static boolean isMonsterEgg(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isMonsterEgg(); - } - - public boolean isMonsterEgg() { - switch (this) { - case ELDER_GUARDIAN_SPAWN_EGG: - case WITHER_SKELETON_SPAWN_EGG: - case STRAY_SPAWN_EGG: - case HUSK_SPAWN_EGG: - case ZOMBIE_VILLAGER_SPAWN_EGG: - case SKELETON_HORSE_SPAWN_EGG: - case ZOMBIE_HORSE_SPAWN_EGG: - case DONKEY_SPAWN_EGG: - case MULE_SPAWN_EGG: - case EVOKER_SPAWN_EGG: - case VEX_SPAWN_EGG: - case VINDICATOR_SPAWN_EGG: - case CREEPER_SPAWN_EGG: - case SKELETON_SPAWN_EGG: - case SPIDER_SPAWN_EGG: - case ZOMBIE_SPAWN_EGG: - case SLIME_SPAWN_EGG: - case GHAST_SPAWN_EGG: - case ZOMBIE_PIGMAN_SPAWN_EGG: - case ENDERMAN_SPAWN_EGG: - case CAVE_SPIDER_SPAWN_EGG: - case SILVERFISH_SPAWN_EGG: - case BLAZE_SPAWN_EGG: - case MAGMA_CUBE_SPAWN_EGG: - case BAT_SPAWN_EGG: - case WITCH_SPAWN_EGG: - case ENDERMITE_SPAWN_EGG: - case GUARDIAN_SPAWN_EGG: - case SHULKER_SPAWN_EGG: - case PIG_SPAWN_EGG: - case SHEEP_SPAWN_EGG: - case COW_SPAWN_EGG: - case CHICKEN_SPAWN_EGG: - case SQUID_SPAWN_EGG: - case WOLF_SPAWN_EGG: - case MOOSHROOM_SPAWN_EGG: - case OCELOT_SPAWN_EGG: - case HORSE_SPAWN_EGG: - case RABBIT_SPAWN_EGG: - case POLAR_BEAR_SPAWN_EGG: - case LLAMA_SPAWN_EGG: - case PARROT_SPAWN_EGG: - case VILLAGER_SPAWN_EGG: - case COD_SPAWN_EGG: - case DOLPHIN_SPAWN_EGG: - case DRAGON_EGG: - case DROWNED_SPAWN_EGG: - case PHANTOM_SPAWN_EGG: - case PUFFERFISH_SPAWN_EGG: - case SALMON_SPAWN_EGG: - case TROPICAL_FISH_SPAWN_EGG: - case TURTLE_EGG: - case TURTLE_SPAWN_EGG: - - // 1.14 - case CAT_SPAWN_EGG: - case FOX_SPAWN_EGG: - case PANDA_SPAWN_EGG: - case PILLAGER_SPAWN_EGG: - case RAVAGER_SPAWN_EGG: - case TRADER_LLAMA_SPAWN_EGG: - case WANDERING_TRADER_SPAWN_EGG: - - // 1.15 - case BEE_SPAWN_EGG: - - case HOGLIN_SPAWN_EGG: - case PIGLIN_SPAWN_EGG: - case STRIDER_SPAWN_EGG: - case ZOGLIN_SPAWN_EGG: - case ZOMBIFIED_PIGLIN_SPAWN_EGG: - return true; - default: - break; - } - return false; - } - - public static boolean isBed(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isBed(); - } - - public boolean isBed() { - switch (this) { - case WHITE_BED: - case ORANGE_BED: - case MAGENTA_BED: - case LIGHT_BLUE_BED: - case YELLOW_BED: - case LIME_BED: - case PINK_BED: - case GRAY_BED: - case LIGHT_GRAY_BED: - case CYAN_BED: - case PURPLE_BED: - case BLUE_BED: - case BROWN_BED: - case GREEN_BED: - case RED_BED: - case BLACK_BED: - case LEGACY_BED_BLOCK: - return true; - default: - break; - } - return false; - } - - public static boolean isStairs(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isStairs(); - } - - public boolean isStairs() { - switch (this) { - case ACACIA_STAIRS: - case BIRCH_STAIRS: - case BRICK_STAIRS: - case COBBLESTONE_STAIRS: - case DARK_OAK_STAIRS: - case DARK_PRISMARINE_STAIRS: - case JUNGLE_STAIRS: - case NETHER_BRICK_STAIRS: - case OAK_STAIRS: - case PRISMARINE_BRICK_STAIRS: - case PRISMARINE_STAIRS: - case PURPUR_STAIRS: - case QUARTZ_STAIRS: - case RED_SANDSTONE_STAIRS: - case SANDSTONE_STAIRS: - case SPRUCE_STAIRS: - case STONE_BRICK_STAIRS: - - case ANDESITE_STAIRS: - case DIORITE_STAIRS: - case END_STONE_BRICK_STAIRS: - case GRANITE_STAIRS: - case MOSSY_COBBLESTONE_STAIRS: - case MOSSY_STONE_BRICK_STAIRS: - case POLISHED_ANDESITE_STAIRS: - case POLISHED_DIORITE_STAIRS: - case POLISHED_GRANITE_STAIRS: - case RED_NETHER_BRICK_STAIRS: - case SMOOTH_QUARTZ_STAIRS: - case SMOOTH_RED_SANDSTONE_STAIRS: - case SMOOTH_SANDSTONE_STAIRS: - case STONE_STAIRS: - - case BLACKSTONE_STAIRS: - case CRIMSON_STAIRS: - case POLISHED_BLACKSTONE_BRICK_STAIRS: - case POLISHED_BLACKSTONE_STAIRS: - case WARPED_STAIRS: - return true; - default: - break; - } - return false; - } - - public static boolean isPotion(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isPotion(); - } - - public boolean isPotion() { - switch (this) { - case POTION: - case LINGERING_POTION: - case SPLASH_POTION: - -// case AWKWARD_POTION: -// case THICK_POTION: -// case MUNDANE_POTION: -// case REGENERATION_POTION: -// case SWIFTNESS_POTION: -// case FIRE_RESISTANCE_POTION: -// case POISON_POTION: -// case HEALING_POTION: -// case NIGHT_VISION_POTION: -// case WEAKNESS_POTION: -// case STRENGTH_POTION: -// case SLOWNESS_POTION: -// case HARMING_POTION: -// case WATER_BREATHING_POTION: -// case INVISIBILITY_POTION: -// case REGENERATION_POTION2: -// case SWIFTNESS_POTION2: -// case POISON_POTION2: -// case HEALING_POTION2: -// case STRENGTH_POTION2: -// case LEAPING_POTION2: -// case HARMING_POTION2: -// case REGENERATION_POTION3: -// case SWIFTNESS_POTION3: -// case FIRE_RESISTANCE_POTION3: -// case POISON_POTION3: -// case NIGHT_VISION_POTION2: -// case WEAKNESS_POTION2: -// case STRENGTH_POTION3: -// case SLOWNESS_POTION2: -// case LEAPING_POTION3: -// case WATER_BREATHING_POTION2: -// case INVISIBILITY_POTION2: -// case REGENERATION_POTION4: -// case SWIFTNESS_POTION4: -// case POISON_POTION4: -// case STRENGTH_POTION4: - return true; - default: - break; - } - return false; - } - - public static boolean isBoat(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isBoat(); - } - - public boolean isBoat() { - switch (this) { - case OAK_BOAT: - case ACACIA_BOAT: - case BIRCH_BOAT: - case DARK_OAK_BOAT: - case JUNGLE_BOAT: - case SPRUCE_BOAT: - return true; - default: - break; - } - return false; - } - - public static boolean isSapling(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isSapling(); - } - - public boolean isSapling() { - switch (this) { - case OAK_SAPLING: - case SPRUCE_SAPLING: - case BIRCH_SAPLING: - case JUNGLE_SAPLING: - case ACACIA_SAPLING: - case DARK_OAK_SAPLING: - return true; - default: - break; - } - return false; - } - - public static boolean isButton(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isButton(); - } - - public boolean isButton() { - switch (this) { - case ACACIA_BUTTON: - case BIRCH_BUTTON: - case DARK_OAK_BUTTON: - case JUNGLE_BUTTON: - case OAK_BUTTON: - case SPRUCE_BUTTON: - case STONE_BUTTON: - case POLISHED_BLACKSTONE_BUTTON: - case WARPED_BUTTON: - return true; - default: - break; - } - return false; - } - - public static boolean isWater(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isWater(); - } - - public boolean isWater() { - switch (this) { - case WATER: - case LEGACY_STATIONARY_WATER: - return true; - default: - break; - } - return false; - } - - public static boolean isLava(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isLava(); - } - - public boolean isLava() { - switch (this) { - case LAVA: - case LEGACY_STATIONARY_LAVA: - return true; - default: - break; - } - return false; - } - - public static boolean isPlate(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isPlate(); - } - - public boolean isPlate() { - switch (this) { - case ACACIA_PRESSURE_PLATE: - case BIRCH_PRESSURE_PLATE: - case DARK_OAK_PRESSURE_PLATE: - case HEAVY_WEIGHTED_PRESSURE_PLATE: - case JUNGLE_PRESSURE_PLATE: - case LIGHT_WEIGHTED_PRESSURE_PLATE: - case OAK_PRESSURE_PLATE: - case SPRUCE_PRESSURE_PLATE: - case STONE_PRESSURE_PLATE: - case CRIMSON_PRESSURE_PLATE: - case POLISHED_BLACKSTONE_PRESSURE_PLATE: - case WARPED_PRESSURE_PLATE: - return true; - default: - break; - } - return false; - } - - public static boolean isWool(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isWool(); - } - - public boolean isWool() { - switch (this) { - case BLACK_WOOL: - case BLUE_WOOL: - case BROWN_WOOL: - case CYAN_WOOL: - case GRAY_WOOL: - case GREEN_WOOL: - case LIGHT_BLUE_WOOL: - case LIGHT_GRAY_WOOL: - case LIME_WOOL: - case MAGENTA_WOOL: - case ORANGE_WOOL: - case PINK_WOOL: - case PURPLE_WOOL: - case RED_WOOL: - case WHITE_WOOL: - case YELLOW_WOOL: - return true; - default: - break; - } - return false; - } - - public static boolean isCarpet(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isCarpet(); - } - - public boolean isCarpet() { - switch (this) { - case BLACK_CARPET: - case BLUE_CARPET: - case BROWN_CARPET: - case CYAN_CARPET: - case GRAY_CARPET: - case GREEN_CARPET: - case LIGHT_BLUE_CARPET: - case LIGHT_GRAY_CARPET: - case LIME_CARPET: - case MAGENTA_CARPET: - case ORANGE_CARPET: - case PINK_CARPET: - case PURPLE_CARPET: - case RED_CARPET: - case WHITE_CARPET: - case YELLOW_CARPET: - return true; - default: - break; - } - return false; - } - - public static boolean isShulkerBox(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isShulkerBox(); - } - - public boolean isShulkerBox() { - switch (this) { - case BLACK_SHULKER_BOX: - case BLUE_SHULKER_BOX: - case BROWN_SHULKER_BOX: - case CYAN_SHULKER_BOX: - case GRAY_SHULKER_BOX: - case GREEN_SHULKER_BOX: - case LIGHT_BLUE_SHULKER_BOX: - case LIGHT_GRAY_SHULKER_BOX: - case LIME_SHULKER_BOX: - case MAGENTA_SHULKER_BOX: - case ORANGE_SHULKER_BOX: - case PINK_SHULKER_BOX: - case PURPLE_SHULKER_BOX: - case RED_SHULKER_BOX: - case WHITE_SHULKER_BOX: - case YELLOW_SHULKER_BOX: - case SHULKER_BOX: - return true; - default: - break; - } - return false; - } - - public static boolean isLeatherArmor(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isLeatherArmor(); - } - - public boolean isLeatherArmor() { - switch (this) { - case LEATHER_BOOTS: - case LEATHER_CHESTPLATE: - case LEATHER_HELMET: - case LEATHER_LEGGINGS: - return true; - default: - break; - } - return false; - } - - public static boolean isArmor(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isArmor(); - } - - public boolean isArmor() { - switch (this) { - case NETHERITE_HELMET: - case CHAINMAIL_HELMET: - case DIAMOND_HELMET: - case GOLDEN_HELMET: - case IRON_HELMET: - case LEATHER_HELMET: - - case NETHERITE_CHESTPLATE: - case CHAINMAIL_CHESTPLATE: - case DIAMOND_CHESTPLATE: - case GOLDEN_CHESTPLATE: - case IRON_CHESTPLATE: - case LEATHER_CHESTPLATE: - - case NETHERITE_LEGGINGS: - case CHAINMAIL_LEGGINGS: - case DIAMOND_LEGGINGS: - case GOLDEN_LEGGINGS: - case IRON_LEGGINGS: - case LEATHER_LEGGINGS: - - case NETHERITE_BOOTS: - case CHAINMAIL_BOOTS: - case DIAMOND_BOOTS: - case GOLDEN_BOOTS: - case IRON_BOOTS: - case LEATHER_BOOTS: - - case SHIELD: - case TURTLE_HELMET: - return true; - default: - break; - } - return false; - } - - public static boolean isWeapon(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isWeapon(); - } - - public boolean isWeapon() { - switch (this) { - case DIAMOND_SWORD: - case IRON_SWORD: - case GOLDEN_SWORD: - case STONE_SWORD: - case WOODEN_SWORD: - case BOW: - case CROSSBOW: - case TRIDENT: - case NETHERITE_SWORD: - return true; - default: - break; - } - return false; - } - - public static boolean isTool(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isTool(); - } - - public boolean isTool() { - switch (this) { - case NETHERITE_PICKAXE: - case DIAMOND_PICKAXE: - case GOLDEN_PICKAXE: - case IRON_PICKAXE: - case STONE_PICKAXE: - case WOODEN_PICKAXE: - - case NETHERITE_SHOVEL: - case DIAMOND_SHOVEL: - case GOLDEN_SHOVEL: - case IRON_SHOVEL: - case STONE_SHOVEL: - case WOODEN_SHOVEL: - - case NETHERITE_AXE: - case DIAMOND_AXE: - case GOLDEN_AXE: - case IRON_AXE: - case STONE_AXE: - case WOODEN_AXE: - - case NETHERITE_HOE: - case DIAMOND_HOE: - case GOLDEN_HOE: - case IRON_HOE: - case STONE_HOE: - case WOODEN_HOE: - - case SHEARS: - case FISHING_ROD: - return true; - default: - break; - } - return false; - } - - public static boolean isPickaxe(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isPickaxe(); - } - - public boolean isPickaxe() { - switch (this) { - case NETHERITE_PICKAXE: - case DIAMOND_PICKAXE: - case GOLDEN_PICKAXE: - case IRON_PICKAXE: - case STONE_PICKAXE: - case WOODEN_PICKAXE: - return true; - default: - break; - } - return false; - } - - public static boolean isValidItem(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isValidItem(); - } - - public boolean isValidItem() { - return !this.equals(CMIMaterial.NONE) && !this.isAir() && this.getMaterial() != null; - } - - public boolean isNone() { - return this.equals(CMIMaterial.NONE); - } - - public static boolean isAir(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isAir(); - } - - public boolean isAir() { - switch (this) { - case AIR: - case CAVE_AIR: - case VOID_AIR: - return true; - default: - break; - } - return false; - } - - public static boolean isPotted(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isPotted(); - } - - public boolean isPotted() { - switch (this) { - case POTTED_ACACIA_SAPLING: - case POTTED_ALLIUM: - case POTTED_AZURE_BLUET: - case POTTED_BIRCH_SAPLING: - case POTTED_BLUE_ORCHID: - case POTTED_BROWN_MUSHROOM: - case POTTED_CACTUS: - case POTTED_DANDELION: - case POTTED_DARK_OAK_SAPLING: - case POTTED_DEAD_BUSH: - case POTTED_FERN: - case POTTED_JUNGLE_SAPLING: - case POTTED_OAK_SAPLING: - case POTTED_ORANGE_TULIP: - case POTTED_OXEYE_DAISY: - case POTTED_PINK_TULIP: - case POTTED_POPPY: - case POTTED_RED_MUSHROOM: - case POTTED_RED_TULIP: - case POTTED_SPRUCE_SAPLING: - case POTTED_WHITE_TULIP: - case POTTED_BAMBOO: - case POTTED_CORNFLOWER: - case POTTED_LILY_OF_THE_VALLEY: - case POTTED_WITHER_ROSE: - return true; - default: - break; - } - return false; - } - - public static boolean isAnvil(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isAnvil(); - } - - public boolean isAnvil() { - switch (this) { - case ANVIL: - case CHIPPED_ANVIL: - case DAMAGED_ANVIL: - return true; - default: - break; - } - return false; - } - - public static boolean isDoor(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isDoor(); - } - - public boolean isDoor() { - switch (this) { - case OAK_DOOR: - case IRON_DOOR: - - case LEGACY_SPRUCE_DOOR: - case LEGACY_BIRCH_DOOR: - case LEGACY_JUNGLE_DOOR: - case LEGACY_ACACIA_DOOR: - case LEGACY_DARK_OAK_DOOR: - case LEGACY_WOODEN_DOOR_BLOCK: - -// case SPRUCE_DOOR_ITEM: -// case BIRCH_DOOR_ITEM: -// case JUNGLE_DOOR_ITEM: -// case ACACIA_DOOR_ITEM: -// case DARK_OAK_DOOR_ITEM: -// case WOODEN_DOOR: - case ACACIA_DOOR: - case BIRCH_DOOR: - case DARK_OAK_DOOR: -// case IRON_DOOR_BLOCK: - case JUNGLE_DOOR: - case SPRUCE_DOOR: - case CRIMSON_DOOR: - case WARPED_DOOR: - - return true; - default: - break; - } - return false; - } - - public static boolean isGate(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isGate(); - } - - public boolean isGate() { - switch (this) { - case ACACIA_FENCE_GATE: - case BIRCH_FENCE_GATE: - case DARK_OAK_FENCE_GATE: - case END_GATEWAY: - case JUNGLE_FENCE_GATE: - case OAK_FENCE_GATE: - case SPRUCE_FENCE_GATE: - case CRIMSON_FENCE_GATE: - case WARPED_FENCE_GATE: - return true; - default: - break; - } - return false; - } - - public static boolean isFence(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isFence(); - } - - public boolean isFence() { - switch (this) { - case ACACIA_FENCE: - case BIRCH_FENCE: - case DARK_OAK_FENCE: - case JUNGLE_FENCE: - case NETHER_BRICK_FENCE: - case OAK_FENCE: - case SPRUCE_FENCE: - - case CRIMSON_FENCE: - case WARPED_FENCE: - return true; - default: - break; - } - return false; - } - - public static boolean isRail(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isRail(); - } - - public boolean isRail() { - switch (this) { - case POWERED_RAIL: - case RAIL: - case ACTIVATOR_RAIL: - case DETECTOR_RAIL: - return true; - default: - break; - } - return false; - } - - public static boolean isGlassPane(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isGlassPane(); - } - - public boolean isGlassPane() { - switch (this) { - case BLACK_STAINED_GLASS_PANE: - case BLUE_STAINED_GLASS_PANE: - case BROWN_STAINED_GLASS_PANE: - case CYAN_STAINED_GLASS_PANE: - case GRAY_STAINED_GLASS_PANE: - case GREEN_STAINED_GLASS_PANE: - case LIGHT_BLUE_STAINED_GLASS_PANE: - case LIGHT_GRAY_STAINED_GLASS_PANE: - case LIME_STAINED_GLASS_PANE: - case MAGENTA_STAINED_GLASS_PANE: - case ORANGE_STAINED_GLASS_PANE: - case PINK_STAINED_GLASS_PANE: - case PURPLE_STAINED_GLASS_PANE: - case RED_STAINED_GLASS_PANE: - case WHITE_STAINED_GLASS_PANE: - case YELLOW_STAINED_GLASS_PANE: - case GLASS_PANE: - return true; - default: - break; - } - return false; - } - - public static boolean isSign(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isSign(); - } - - public boolean isSign() { - switch (this) { - case SIGN: - case WALL_SIGN: - case LEGACY_SIGN_POST: - - case ACACIA_SIGN: - case ACACIA_WALL_SIGN: - - case BIRCH_SIGN: - case BIRCH_WALL_SIGN: - - case DARK_OAK_SIGN: - case DARK_OAK_WALL_SIGN: - - case JUNGLE_SIGN: - case JUNGLE_WALL_SIGN: - - case OAK_SIGN: - case OAK_WALL_SIGN: - - case SPRUCE_SIGN: - case SPRUCE_WALL_SIGN: - - case CRIMSON_SIGN: - case CRIMSON_WALL_SIGN: - - case WARPED_SIGN: - case WARPED_WALL_SIGN: - - return true; - default: - break; - } - return false; - } - - public static boolean isWall(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isWall(); - } - - public boolean isWall() { - switch (this) { - case COBBLESTONE_WALL: - case MOSSY_COBBLESTONE_WALL: - - case ANDESITE_WALL: - case BRICK_WALL: - case DIORITE_WALL: - case END_STONE_BRICK_WALL: - case GRANITE_WALL: - case MOSSY_STONE_BRICK_WALL: - case NETHER_BRICK_WALL: - case PRISMARINE_WALL: - case RED_NETHER_BRICK_WALL: - case RED_SANDSTONE_WALL: - case SANDSTONE_WALL: - case STONE_BRICK_WALL: - return true; - default: - break; - } - return false; - } - - public static boolean isTrapDoor(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isTrapDoor(); - } - - public boolean isTrapDoor() { - switch (this) { - case ACACIA_TRAPDOOR: - case BIRCH_TRAPDOOR: - case DARK_OAK_TRAPDOOR: - case IRON_TRAPDOOR: - case JUNGLE_TRAPDOOR: - case OAK_TRAPDOOR: - case SPRUCE_TRAPDOOR: - case CRIMSON_TRAPDOOR: - case WARPED_TRAPDOOR: - return true; - default: - break; - } - return false; - } - - public static boolean isSkull(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isSkull(); - } - - public boolean isSkull() { - switch (this) { - case SKELETON_SKULL: - case WITHER_SKELETON_SKULL: - case SKELETON_WALL_SKULL: - case WITHER_SKELETON_WALL_SKULL: - case PLAYER_HEAD: - case CREEPER_HEAD: - case DRAGON_HEAD: - case ZOMBIE_HEAD: - case LEGACY_SKULL: - return true; - default: - break; - } - return false; - } - - public static boolean isPlayerHead(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isPlayerHead(); - } - - public boolean isPlayerHead() { - switch (this) { - case PLAYER_HEAD: - case LEGACY_SKULL: - case PLAYER_WALL_HEAD: - return true; - default: - break; - } - return false; - } - - public static boolean isDye(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isDye(); - } - - public boolean isDye() { - switch (this) { - case INK_SAC: - case ROSE_RED: - case CACTUS_GREEN: - case COCOA_BEANS: - case LAPIS_LAZULI: - case PURPLE_DYE: - case CYAN_DYE: - case LIGHT_GRAY_DYE: - case GRAY_DYE: - case PINK_DYE: - case LIME_DYE: - case DANDELION_YELLOW: - case LIGHT_BLUE_DYE: - case MAGENTA_DYE: - case ORANGE_DYE: - case BONE_MEAL: - - case BLACK_DYE: - case BLUE_DYE: - case BROWN_DYE: - case GREEN_DYE: - case RED_DYE: - case WHITE_DYE: - case YELLOW_DYE: - return true; - default: - break; - } - return false; - } - - public static boolean isSlab(Material mat) { - CMIMaterial m = CMIMaterial.get(mat); - if (m == null) - return false; - return m.isSlab(); - } - - public boolean isSlab() { - switch (this) { - case ACACIA_SLAB: - case DARK_OAK_SLAB: -// case DOUBLE_STONE_SLAB2: -// case PURPUR_DOUBLE_SLAB: - case BIRCH_SLAB: - case BRICK_SLAB: - case COBBLESTONE_SLAB: - case DARK_PRISMARINE_SLAB: -// case DOUBLE_STONE_SLAB: -// case DOUBLE_SANDSTONE_SLAB: -// case DOUBLE_WOODEN_SLAB: -// case DOUBLE_COBBLESTONE_SLAB: -// case DOUBLE_BRICK_SLAB: -// case DOUBLE_STONE_BRICK_SLAB: -// case DOUBLE_NETHER_BRICK_SLAB: -// case DOUBLE_QUARTZ_SLAB: - case JUNGLE_SLAB: - case NETHER_BRICK_SLAB: - case OAK_SLAB: - case PETRIFIED_OAK_SLAB: - case PRISMARINE_BRICK_SLAB: - case PRISMARINE_SLAB: - case PURPUR_SLAB: - case QUARTZ_SLAB: - case RED_SANDSTONE_SLAB: - case SANDSTONE_SLAB: - case SPRUCE_SLAB: - case STONE_BRICK_SLAB: - case STONE_SLAB: - - case ANDESITE_SLAB: - case CUT_RED_SANDSTONE_SLAB: - case CUT_SANDSTONE_SLAB: - case DIORITE_SLAB: - case END_STONE_BRICK_SLAB: - case GRANITE_SLAB: - case MOSSY_COBBLESTONE_SLAB: - case MOSSY_STONE_BRICK_SLAB: - case POLISHED_ANDESITE_SLAB: - case POLISHED_DIORITE_SLAB: - case POLISHED_GRANITE_SLAB: - case RED_NETHER_BRICK_SLAB: - case SMOOTH_QUARTZ_SLAB: - case SMOOTH_RED_SANDSTONE_SLAB: - case SMOOTH_SANDSTONE_SLAB: - case SMOOTH_STONE_SLAB: - - case BLACKSTONE_SLAB: - case CRIMSON_SLAB: - case POLISHED_BLACKSTONE_BRICK_SLAB: - case POLISHED_BLACKSTONE_SLAB: - case WARPED_SLAB: - return true; - default: - break; - } - return false; - } - - public static CMISlabType getSlabType(Block block) { - if (!isSlab(block.getType())) - return CMISlabType.NOTSLAB; - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - if (block.getBlockData() instanceof org.bukkit.block.data.type.Slab) { - org.bukkit.block.data.type.Slab slab = (org.bukkit.block.data.type.Slab) block.getBlockData(); - switch (slab.getType().toString()) { - case "TOP": - return CMISlabType.TOP; - case "BOTTOM": - return CMISlabType.BOTTOM; - case "DOUBLE": - return CMISlabType.DOUBLE; - } - - } - return CMISlabType.NOTSLAB; - } - if (block.getType().name().contains("STEP")) { - switch (CMIMaterial.get(block).getLegacyId()) { - case 44: - switch (block.getData()) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - return CMISlabType.BOTTOM; - default: - return CMISlabType.DOUBLE; - } - case 126: - switch (block.getData()) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - return CMISlabType.BOTTOM; - default: - return CMISlabType.DOUBLE; - } - case 182: - switch (block.getData()) { - case 0: - return CMISlabType.BOTTOM; - default: - return CMISlabType.DOUBLE; - } - case 205: - switch (block.getData()) { - case 0: - return CMISlabType.BOTTOM; - default: - return CMISlabType.DOUBLE; - } - } - } - - return CMISlabType.NOTSLAB; - } - - public boolean equals(Material mat) { - if (getMaterial() == null) { - return false; - } - return this.getMaterial().equals(mat); - } - - public List getLegacyNames() { - if (legacyName == null) - return new ArrayList(); - return legacyName; - } - - public void addLegacyName(String legacyName) { - if (legacyName == null) - this.legacyName = new ArrayList(); - this.legacyName.add(legacyName); - } - - public String getBukkitName() { - if (bukkitName == null) - bukkitName = getMaterial() == null ? "N/A" : getMaterial().name(); - return bukkitName; - } - - public void setBukkitName(String bukkitName) { - this.bukkitName = bukkitName; - } - - public String getMojangName() { - if (mojangName == null) - mojangName = CMIReflections.getItemMinecraftName(this.newItemStack()); - return mojangName; - } - - public void setMojangName(String mojangName) { - this.mojangName = mojangName; - } - - public Set getCriteria() { - return criteria; - } - - public boolean containsCriteria(CMIMaterialCriteria criteria) { - if (this.criteria == null || criteria == null) - return false; - return this.criteria.contains(criteria); - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIMaterialCriteria.java b/src/com/bekvon/bukkit/cmiLib/CMIMaterialCriteria.java deleted file mode 100644 index 6801941da..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMIMaterialCriteria.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -public enum CMIMaterialCriteria { - - seeThrow, stars, slab, door, carpet, wool, monsteregg - -} diff --git a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java b/src/com/bekvon/bukkit/cmiLib/CMIReflections.java deleted file mode 100644 index 7a8774ed9..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMIReflections.java +++ /dev/null @@ -1,560 +0,0 @@ -/** - * Copyright (C) 2017 Zrips - */ - -package com.bekvon.bukkit.cmiLib; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import org.bukkit.Bukkit; -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -public class CMIReflections { - - private static Class CraftServerClass; - private static Object CraftServer; - private static Class CraftItemStack; - private static Class Item; - private static Class IStack; - private static Class NBTTagCompound; - private static Class CraftContainer; - private static Class CraftContainers; - private static Class PacketPlayOutOpenWindow; - private static Class PacketPlayOutWorldParticles; - private static Class EnumParticle; - private static Class ParticleParam; - private static Class CraftParticle; - private static Class CraftPlayer; - public static Class nmsChatSerializer; - private static Class CraftBeehive; - - static { - initialize(); - } - -// public ItemReflection() { -// initialize(); -// } - - private static void initialize() { - try { - if (!Version.isCurrentHigher(Version.v1_8_R2)) - nmsChatSerializer = getMinecraftClass("ChatSerializer"); - else // 1_8_R2 moved to IChatBaseComponent - nmsChatSerializer = getMinecraftClass("IChatBaseComponent$ChatSerializer"); - } catch (Throwable e) { - e.printStackTrace(); - } - try { - CraftBeehive = getBukkitClass("block.impl.CraftBeehive"); - } catch (Throwable e) { - } - try { - CraftPlayer = getBukkitClass("entity.CraftPlayer"); - } catch (Throwable e) { - e.printStackTrace(); - } - if (Version.isCurrentHigher(Version.v1_12_R1)) { - try { - CraftParticle = getBukkitClass("CraftParticle"); - } catch (Throwable e) { -// e.printStackTrace(); - } - try { - ParticleParam = getMinecraftClass("ParticleParam"); - } catch (Throwable e) { -// e.printStackTrace(); - } - } - try { - CraftContainer = getMinecraftClass("Container"); - } catch (Throwable e) { - } - try { - CraftContainers = getMinecraftClass("Containers"); - } catch (Throwable e) { - } - - try { - PacketPlayOutOpenWindow = getMinecraftClass("PacketPlayOutOpenWindow"); - } catch (Throwable e) { - e.printStackTrace(); - } - try { - PacketPlayOutWorldParticles = getMinecraftClass("PacketPlayOutWorldParticles"); - } catch (Throwable e) { - e.printStackTrace(); - } - try { - if (Version.isCurrentEqualOrLower(Version.v1_12_R1)) - EnumParticle = getMinecraftClass("EnumParticle"); - } catch (Throwable e) { - e.printStackTrace(); - } - try { - NBTTagCompound = getMinecraftClass("NBTTagCompound"); - } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) { - e.printStackTrace(); - } - try { - CraftServerClass = getBukkitClass("CraftServer"); - } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) { - e.printStackTrace(); - } - try { - CraftServer = CraftServerClass.cast(Bukkit.getServer()); - } catch (SecurityException | IllegalArgumentException e) { - e.printStackTrace(); - } - try { - CraftItemStack = getBukkitClass("inventory.CraftItemStack"); - } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) { - e.printStackTrace(); - } - try { - Item = getMinecraftClass("Item"); - } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) { - e.printStackTrace(); - } - try { - IStack = getMinecraftClass("ItemStack"); - } catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) { - e.printStackTrace(); - } - } - - public static String toJson(ItemStack item) { - if (item == null) - return null; - - Object nmsStack = asNMSCopy(item); - - try { - Method meth = IStack.getMethod("save", NBTTagCompound); - Object res = meth.invoke(nmsStack, NBTTagCompound.newInstance()); - return res.toString(); - } catch (Throwable e) { - e.printStackTrace(); - } - - return null; - } - - public static ItemStack HideFlag(ItemStack item, int state) { - Object nmsStack = asNMSCopy(item); - try { - Method methTag = nmsStack.getClass().getMethod("getTag"); - Object tag = methTag.invoke(nmsStack); - if (tag == null) - tag = NBTTagCompound.newInstance(); - - Method meth = tag.getClass().getMethod("setInt", String.class, int.class); - meth.invoke(tag, "HideFlags", state); - Method meth2 = nmsStack.getClass().getMethod("setTag", NBTTagCompound); - meth2.invoke(nmsStack, tag); - return (ItemStack) asBukkitCopy(nmsStack); - } catch (Exception e) { - } - return item; - } - - private static Integer getActiveContainerId(Object entityplayer) { - try { - Field field = entityplayer.getClass().getField("activeContainer"); - Object container = CraftContainer.cast(field.get(entityplayer)); - Field field2 = container.getClass().getField("windowId"); - Object ids = field2.get(container); - return (int) ids; - } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { - e.printStackTrace(); - } - - return null; - } - - private static Object getContainer(String name) { - try { - Field field = CraftContainers.getDeclaredField(name); - return field.get(CraftContainers); - } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) { - e.printStackTrace(); - } - return null; - } - - public static void updateInventoryTitle(Player p, String title) { - if (title.length() > 32) { - title = title.substring(0, 31) + "~"; - } - - try { - - if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { - Object entityplayer = CraftPlayer.getMethod("getHandle").invoke(p); - - Object s = getContainer("GENERIC_9X1"); - switch (p.getOpenInventory().getTopInventory().getSize()) { - case 9: - break; - case 18: - s = getContainer("GENERIC_9X2"); - break; - case 27: - s = getContainer("GENERIC_9X3"); - break; - case 36: - s = getContainer("GENERIC_9X4"); - break; - case 45: - s = getContainer("GENERIC_9X5"); - break; - case 54: - s = getContainer("GENERIC_9X6"); - break; - } - - Constructor packet = PacketPlayOutOpenWindow.getConstructor(int.class, CraftContainers, getMinecraftClass("IChatBaseComponent")); - Object newPack = packet.newInstance(getActiveContainerId(entityplayer), s, textToIChatBaseComponent("{\"text\": \"" + title + "\"}")); - - sendPlayerPacket(p, newPack); - - Field field = entityplayer.getClass().getField("activeContainer"); - Object container = CraftContainer.cast(field.get(entityplayer)); - - Method meth = entityplayer.getClass().getMethod("updateInventory", CraftContainer); - meth.invoke(entityplayer, container); - } else if (Version.isCurrentEqualOrHigher(Version.v1_8_R2)) { - - Object entityplayer = CraftPlayer.getMethod("getHandle").invoke(p); - - Constructor packet = PacketPlayOutOpenWindow.getConstructor(int.class, String.class, getMinecraftClass("IChatBaseComponent"), int.class); - Object newPack = packet.newInstance(getActiveContainerId(entityplayer), "minecraft:chest", textToIChatBaseComponent("{\"text\": \"" + title + "\"}"), p.getOpenInventory().getTopInventory() - .getSize()); - - sendPlayerPacket(p, newPack); - - Field field = entityplayer.getClass().getField("activeContainer"); - Object container = CraftContainer.cast(field.get(entityplayer)); - - Method meth = entityplayer.getClass().getMethod("updateInventory", CraftContainer); - meth.invoke(entityplayer, container); - - } - } catch (Throwable e) { - e.printStackTrace(); - } - } - - public static Object textToIChatBaseComponent(String text) { - try { - Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, CMIChatColor.translate(text)); - return serialized; - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { - e.printStackTrace(); - } - return text; - } - - public static Object getPlayerHandle(Player player) { - Object handle = null; - try { - handle = player.getClass().getMethod("getHandle").invoke(player); - } catch (Exception e) { - e.printStackTrace(); - } - return handle; - } - - private static Object getPlayerConnection(Player player) { - Object connection = null; - try { - Object handle = getPlayerHandle(player); - connection = handle.getClass().getField("playerConnection").get(handle); - } catch (Exception e) { - e.printStackTrace(); - } - return connection; - } - - public static Class getClass(String classname) { - try { - String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3]; - String path = classname.replace("{nms}", "net.minecraft.server." + version) - .replace("{nm}", "net.minecraft." + version) - .replace("{cb}", "org.bukkit.craftbukkit.." + version); - return Class.forName(path); - } catch (Throwable t) { - t.printStackTrace(); - return null; - } - } - - public static void sendPlayerPacket(Player player, Object packet) throws Exception { - Object connection = getPlayerConnection(player); - connection.getClass().getMethod("sendPacket", getClass("{nms}.Packet")).invoke(connection, packet); - } - - private static Class getBukkitClass(String nmsClassString) throws ClassNotFoundException { - return Class.forName("org.bukkit.craftbukkit." + Version.getCurrent() + "." + nmsClassString); - } - - public static Class getMinecraftClass(String nmsClassString) throws ClassNotFoundException { - return Class.forName("net.minecraft.server." + Version.getCurrent() + "." + nmsClassString); - } - - public static ItemStack setNbt(ItemStack item, String path, String value) { - if (item == null) - return null; - try { - Object nmsStack = asNMSCopy(item); - if (nmsStack == null) - return item; - Method methTag = nmsStack.getClass().getMethod("getTag"); - Object tag = methTag.invoke(nmsStack); - if (tag == null) - tag = NBTTagCompound.newInstance(); - Method meth = tag.getClass().getMethod("setString", String.class, String.class); - meth.invoke(tag, path, value); - Method meth2 = nmsStack.getClass().getMethod("setTag", NBTTagCompound); - meth2.invoke(nmsStack, tag); - return (ItemStack) asBukkitCopy(nmsStack); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - public static String getItemMinecraftName(ItemStack item) { - try { - - Object nmsStack = asNMSCopy(item); - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - Object pre = nmsStack.getClass().getMethod("getItem").invoke(nmsStack); - Object n = pre.getClass().getMethod("getName").invoke(pre); - Class ll = Class.forName("net.minecraft.server." + Version.getCurrent() + ".LocaleLanguage"); - Object lla = ll.getMethod("a").invoke(ll); - return (String) lla.getClass().getMethod("a", String.class).invoke(lla, (String) n); - } - - Field field = Item.getField("REGISTRY"); - Object reg = field.get(field); - Method meth = reg.getClass().getMethod("b", Object.class); - meth.setAccessible(true); - Method secmeth = nmsStack.getClass().getMethod("getItem"); - Object res2 = secmeth.invoke(nmsStack); - Object res = meth.invoke(reg, res2); - return res.toString(); - } catch (Exception e) { - return null; - } - } - - public static int getHoneyLevel(Block block) { - if (CMIMaterial.get(block) != CMIMaterial.BEE_NEST && CMIMaterial.get(block) != CMIMaterial.BEEHIVE) - return 0; - try { - Object nb = CraftBeehive.cast(block.getBlockData()); - Method method = nb.getClass().getMethod("getHoneyLevel"); - return (int) method.invoke(nb); - } catch (Throwable e) { - e.printStackTrace(); - } - return 0; - } - - public static int getMaxHoneyLevel(Block block) { - if (CMIMaterial.get(block) != CMIMaterial.BEE_NEST && CMIMaterial.get(block) != CMIMaterial.BEEHIVE) - return 0; - try { - Object nb = CraftBeehive.cast(block.getBlockData()); - Method method = nb.getClass().getMethod("getMaximumHoneyLevel"); - return (int) method.invoke(nb); - } catch (Throwable e) { - e.printStackTrace(); - } - return 5; - } - - public String getItemMinecraftNamePath(ItemStack item) { - try { - Object nmsStack = asNMSCopy(item); - Method itemMeth = Item.getMethod("getById", int.class); - Object res = itemMeth.invoke(Item, item.getType().getId()); - Method nameThingy = Item.getMethod("j", IStack); - Object resThingy = nameThingy.invoke(res, nmsStack); - return resThingy.toString(); - } catch (Exception e) { - return null; - } - } - - public static Object asNMSCopy(ItemStack item) { - try { - Method meth = CraftItemStack.getMethod("asNMSCopy", ItemStack.class); - return meth.invoke(CraftItemStack, item); - } catch (Exception e) { - return null; - } - } - - public static Object asBukkitCopy(Object item) { - try { - Method meth = CraftItemStack.getMethod("asBukkitCopy", IStack); - return meth.invoke(CraftItemStack, item); - } catch (Exception e) { - return null; - } - } - - public Object getCraftServer() { - return CraftServer; - } - - public static Object getNbt(ItemStack item, String path) { - if (item == null) - return null; - try { - Object nbt = getNbt(item); - if (nbt == null) - return null; - - Method meth = nbt.getClass().getMethod("getString", String.class); - Object res = meth.invoke(nbt, path); - return res; - } catch (Throwable e) { - return null; - } - } - - public static Object getNbt(ItemStack item) { - if (item == null) - return null; - try { - Object nmsStack = asNMSCopy(item); - Method methTag = nmsStack.getClass().getMethod("getTag"); - Object tag = methTag.invoke(nmsStack); - return tag; - } catch (Throwable e) { - return null; - } - } - - public static ItemStack getItemInOffHand(Player player) { - if (Version.getCurrent().isLower(Version.v1_9_R1)) - return null; - return player.getInventory().getItemInOffHand(); - } - - public void setEndermiteActive(Entity ent, boolean state) { - - } - - static Constructor effectConstructor = null; - static Method CraftParticleMethod = null; - - public static void playEffect(Player player, Location location, CMIEffect ef) { - if (location == null || ef == null || location.getWorld() == null || player == null || !player.isOnline()) - return; - - if (!location.getWorld().equals(player.getWorld())) - return; - - if (ef.getParticle() == null) - return; - - if (!ef.getParticle().isParticle()) - return; - - try { - - if (Version.isCurrentEqualOrLower(Version.v1_7_R4)) { - - Effect effect = ef.getParticle().getEffect(); - - if (effect == null) - return; - - if (effectConstructor == null) - effectConstructor = PacketPlayOutWorldParticles.getConstructor(String.class, float.class, float.class, float.class, float.class, float.class, float.class, float.class, int.class); - Object newPack = effectConstructor.newInstance(effect.name(), (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), - (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); - sendPlayerPacket(player, newPack); - } else if (Version.isCurrentEqualOrLower(Version.v1_12_R1)) { - - Effect effect = ef.getParticle().getEffect(); - - if (effect == null) - return; - - Object particle = ef.getParticle().getEnumParticle() == null ? null : EnumParticle.cast(ef.getParticle().getEnumParticle()); - int[] extra = ef.getParticle().getExtra(); - if (particle == null) { - for (Object p : EnumParticle.getEnumConstants()) { - if (effect.name().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", ""))) || - ef.getParticle().getSecondaryName().replace("_", "").equalsIgnoreCase((p.toString().replace("_", "")))) { - particle = p; - if (ef.getParticle().getEffect().getData() != null) { - extra = new int[] { (0 << 12) | (0 & 0xFFF) }; - } - break; - } - } - if (extra == null) { - extra = new int[0]; - } - } - - if (particle == null) - return; - - if (ef.getParticle().getEnumParticle() == null) { - ef.getParticle().setEnumParticle(particle); - ef.getParticle().setExtra(extra); - } - - if (effectConstructor == null) - effectConstructor = PacketPlayOutWorldParticles.getConstructor(EnumParticle, boolean.class, float.class, float.class, float.class, float.class, float.class, float.class, float.class, - int.class, int[].class); - Object newPack = effectConstructor.newInstance(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), (float) ef.getOffset().getX(), - (float) ef.getOffset().getY(), - (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount(), extra); - - sendPlayerPacket(player, newPack); - } else { - - org.bukkit.Particle particle = ef.getParticle().getParticle(); - - if (particle == null) - return; - - org.bukkit.Particle.DustOptions dd = null; - if (particle.equals(org.bukkit.Particle.REDSTONE)) - dd = new org.bukkit.Particle.DustOptions(ef.getColor(), ef.getSize()); - - if (CraftParticleMethod == null) - CraftParticleMethod = CraftParticle.getMethod("toNMS", org.bukkit.Particle.class, Object.class); - - if (effectConstructor == null) - effectConstructor = PacketPlayOutWorldParticles.getConstructor(ParticleParam, boolean.class, double.class, double.class, double.class, float.class, float.class, float.class, - float.class, int.class); - - Object packet = effectConstructor.newInstance(CraftParticleMethod.invoke(null, particle, dd), true, location.getX(), location.getY(), location.getZ(), (float) ef - .getOffset().getX(), (float) ef.getOffset().getY(), (float) ef.getOffset().getZ(), ef.getSpeed(), ef.getAmount()); - sendPlayerPacket(player, packet); - - } - } catch (Throwable e) { - e.printStackTrace(); - } - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/CMISlabType.java b/src/com/bekvon/bukkit/cmiLib/CMISlabType.java deleted file mode 100644 index 53f64e4f7..000000000 --- a/src/com/bekvon/bukkit/cmiLib/CMISlabType.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -public enum CMISlabType { - TOP, - BOTTOM, - DOUBLE, - NOTSLAB; -} diff --git a/src/com/bekvon/bukkit/cmiLib/ConfigReader.java b/src/com/bekvon/bukkit/cmiLib/ConfigReader.java deleted file mode 100644 index 045d7711e..000000000 --- a/src/com/bekvon/bukkit/cmiLib/ConfigReader.java +++ /dev/null @@ -1,444 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.PrintWriter; -import java.nio.charset.Charset; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; - -import com.bekvon.bukkit.residence.Residence; -import com.google.common.io.Files; - -/* - * Made by Zrips - */ - -public class ConfigReader extends YamlConfiguration { - private HashMap comments; - private HashMap contents; - YamlConfiguration config; - private String p = null; - private File file = null; - private boolean recordContents = false; - - public ConfigReader(String fileName) throws Exception { - this(new File(Residence.getInstance().getDataFolder(), fileName)); - } - - public ConfigReader(File file) throws Exception { - super(); - comments = new HashMap(); - contents = new HashMap(); - this.file = file; - this.config = getyml(file); - } - - public void load() { - try { - this.load(file); - } catch (IOException | InvalidConfigurationException e) { - e.printStackTrace(); - } - } - - @Override - public void save(String file) throws IOException { - if (file == null) { - throw new IllegalArgumentException("File cannot be null"); - } - - save(new File(file)); - } - - @Override - public void save(File file) throws IOException { - if (file == null) { - throw new IllegalArgumentException("File cannot be null"); - } - Files.createParentDirs(file); - String data = insertComments(saveToString()); - PrintWriter writer = new PrintWriter(file, "UTF-8"); - try { - writer.write(data); - } finally { - writer.close(); - } - } - - private String insertComments(String yaml) { - if (!comments.isEmpty()) { - String[] yamlContents = yaml.split("[" + System.getProperty("line.separator") + "]"); - StringBuilder newContents = new StringBuilder(); - StringBuilder currentPath = new StringBuilder(); - boolean commentedPath = false; - boolean node = false; - int depth = 0; - - boolean firstLine = true; - for (final String line : yamlContents) { - if (firstLine) { - firstLine = false; - if (line.startsWith("#")) { - continue; - } - } - - boolean keyOk = true; - if (line.contains(": ")) { - int index = 0; - index = line.indexOf(": "); - if (index < 0) { - index = line.length() - 1; - } - int whiteSpace = 0; - for (int n = 0; n < line.length(); n++) { - if (line.charAt(n) == ' ') { - whiteSpace++; - } else { - break; - } - } - String key = line.substring(whiteSpace, index); - if (key.contains(" ")) - keyOk = false; - else if (key.contains("&")) - keyOk = false; - else if (key.contains(".")) - keyOk = false; - else if (key.contains("'")) - keyOk = false; - else if (key.contains("\"")) - keyOk = false; - } - - if (line.contains(": ") && keyOk || (line.length() > 1 && line.charAt(line.length() - 1) == ':')) { - commentedPath = false; - node = true; - - int index = 0; - index = line.indexOf(": "); - if (index < 0) { - index = line.length() - 1; - } - if (currentPath.toString().isEmpty()) { - currentPath = new StringBuilder(line.substring(0, index)); - } else { - int whiteSpace = 0; - for (int n = 0; n < line.length(); n++) { - if (line.charAt(n) == ' ') { - whiteSpace++; - } else { - break; - } - } - if (whiteSpace / 2 > depth) { - currentPath.append(".").append(line.substring(whiteSpace, index)); - depth++; - } else if (whiteSpace / 2 < depth) { - int newDepth = whiteSpace / 2; - for (int i = 0; i < depth - newDepth; i++) { - currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), ""); - } - int lastIndex = currentPath.lastIndexOf("."); - if (lastIndex < 0) { - currentPath = new StringBuilder(); - } else { - currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); - } - currentPath.append(line.substring(whiteSpace, index)); - depth = newDepth; - } else { - int lastIndex = currentPath.lastIndexOf("."); - if (lastIndex < 0) { - currentPath = new StringBuilder(); - } else { - currentPath.replace(currentPath.lastIndexOf("."), currentPath.length(), "").append("."); - } - currentPath.append(line.substring(whiteSpace, index)); - } - } - } else { - node = false; - } - StringBuilder newLine = new StringBuilder(line); - if (node) { - String comment = null; - if (!commentedPath) { - comment = comments.get(currentPath.toString()); - } - if (comment != null && !comment.isEmpty()) { - newLine.insert(0, System.getProperty("line.separator")).insert(0, comment); - comment = null; - commentedPath = true; - } - } - newLine.append(System.getProperty("line.separator")); - newContents.append(newLine.toString()); - } - - return newContents.toString(); - } - return yaml; - } - - public void addComment(String path, String... commentLines) { - if (this.p != null) - path = this.p + path; - - StringBuilder commentstring = new StringBuilder(); - String leadingSpaces = ""; - for (int n = 0; n < path.length(); n++) { - if (path.charAt(n) == '.') { - leadingSpaces += " "; - } - } - for (String line : commentLines) { - if (!line.isEmpty()) { - line = leadingSpaces + "# " + line; - } - if (commentstring.length() > 0) { - commentstring.append(System.getProperty("line.separator")); - } - commentstring.append(line); - } - comments.put(path, commentstring.toString()); - } - - public YamlConfiguration getyml(File file) throws Exception { - YamlConfiguration config = new YamlConfiguration(); - FileInputStream fileinputstream = null; - - try { - fileinputstream = new FileInputStream(file); - InputStreamReader str = new InputStreamReader(fileinputstream, Charset.forName("UTF-8")); - - config.load(str); - str.close(); - } catch (FileNotFoundException e) { - } catch (InvalidConfigurationException | IOException e) { - e.printStackTrace(); - saveToBackup(); - throw e; - } finally { - if (fileinputstream != null) - try { - fileinputstream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - return config; - } - - public void saveToBackup() { - File cc = new File(Residence.getInstance().getDataFolder(), "FileBackups"); - if (!cc.isDirectory()) - cc.mkdir(); - - Date date = new Date(); - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss "); - String newFileName = dateFormat.format(date) + file.getName(); - - Residence.getInstance().consoleMessage("&cFailed to load " + file.getName() + "! Backup have been saved into " + Residence.getInstance().getDataFolder().getPath() + File.separator + "FileBackups" - + File.separator + newFileName); - - File f = new File(Residence.getInstance().getDataFolder(), "FileBackups" + File.separator + newFileName); -// file.renameTo(f); - try { - Files.copy(file, f); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void save() { - try { - save(file); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private static void newLn(StringBuilder header) { - header.append(System.lineSeparator()); - } - - private static StringBuilder formStringBuilder(List list) { - StringBuilder header = new StringBuilder(); - for (String one : list) { - header.append(one); - newLn(header); - } - return header; - } - - public void header(List list) { - options().header(formStringBuilder(list).toString()); - } - - String[] waitingComment = null; - - private void checkWaitingComment(String path) { - if (waitingComment == null) - return; - addComment(path, waitingComment); - waitingComment = null; - } - - public YamlConfiguration getC() { - return config; - } - - public void copyDefaults(boolean value) { - getC().options().copyDefaults(value); - } - - public Boolean get(String path, Boolean boo) { - path = process(path, boo); - return config.getBoolean(path); - } - - private String process(String path, Object value) { - if (this.p != null) - path = this.p + path; - checkWaitingComment(path); - config.addDefault(path, value); - copySetting(path); - return path; - } - - public Object get(String path, Location boo) { - path = process(path, boo); - return config.get(path); - } - - public int get(String path, int boo) { - path = process(path, boo); - return config.getInt(path); - } - - public List getIntList(String path, List list) { - path = process(path, list); - return config.getIntegerList(path); - } - - private static String convertUnicode(String st) { - try { - if (!st.contains("\\u")) - return st; - - StringBuilder sb = new StringBuilder(st.length()); - for (int i = 0; i < st.length(); i++) { - char ch = st.charAt(i); - if (ch == '\\') { - char nextChar = (i == st.length() - 1) ? '\\' : st.charAt(i + 1); - if (nextChar >= '0' && nextChar <= '7') { - String code = "" + nextChar; - i++; - if ((i < st.length() - 1) && st.charAt(i + 1) >= '0' && st.charAt(i + 1) <= '7') { - code += st.charAt(i + 1); - i++; - if ((i < st.length() - 1) && st.charAt(i + 1) >= '0' && st.charAt(i + 1) <= '7') { - code += st.charAt(i + 1); - i++; - } - } - sb.append((char) Integer.parseInt(code, 8)); - continue; - } - switch (nextChar) { - case 'u': - if (i >= st.length() - 5) { - ch = 'u'; - break; - } - try { - int code = Integer.parseInt("" + st.charAt(i + 2) + st.charAt(i + 3) + st.charAt(i + 4) + st.charAt(i + 5), 16); - sb.append(Character.toChars(code)); - } catch (NumberFormatException e) { - sb.append("\\"); - continue; - } - i += 5; - continue; - default: - sb.append("\\"); - continue; - } - i++; - } - sb.append(ch); - } - return sb.toString(); - } catch (Exception e) { - e.printStackTrace(); - return st; - } - } - - public List get(String path, List list) { - path = process(path, list); - - if (recordContents) { - contents.put(path, config.isList(path) ? config.getStringList(path) : list); - } - - List ls = config.getStringList(path); - - for (int p = 0; p < ls.size(); p++) { - String st = convertUnicode(ls.get(p)); - ls.set(p, st); - } - - return ls; - } - - public String get(String path, String boo) { - path = process(path, boo); - - if (recordContents) - contents.put(path, config.isString(path) ? config.getString(path) : boo); - - return convertUnicode(config.getString(path)); - } - - public Double get(String path, Double boo) { - path = process(path, boo); - return config.getDouble(path); - } - - private synchronized void copySetting(String path) { - set(path, config.get(path)); - } - - public void resetP() { - p = null; - } - - public void setP(String cmd) { - this.p = cmd; - } - - public String getPath() { - return this.p; - } - - public void setRecordContents(boolean recordContents) { - this.recordContents = recordContents; - } - - public HashMap getContents() { - return contents; - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/ItemManager.java b/src/com/bekvon/bukkit/cmiLib/ItemManager.java deleted file mode 100644 index 1c42b73f2..000000000 --- a/src/com/bekvon/bukkit/cmiLib/ItemManager.java +++ /dev/null @@ -1,299 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.util.HashMap; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.PotionData; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.potion.PotionType; - -public class ItemManager { - - static HashMap byRealMaterial = new HashMap(); - static HashMap byId = new HashMap(); - static HashMap byName = new HashMap(); - - public HashMap idMap() { - return byId; - } - - public HashMap NameMap() { - return byName; - } - - static { - for (CMIMaterial one : CMIMaterial.values()) { - if (one == null) - continue; - one.updateMaterial(); - Material mat = one.getMaterial(); - if (mat == null) { - continue; - } - - Integer id = one.getId(); - short data = one.getLegacyData(); - Integer legacyId = one.getLegacyId(); - String cmiName = one.getName().replace("_", "").replace(" ", "").toLowerCase(); - String materialName = one.toString().replace("_", "").replace(" ", "").toLowerCase(); - - String mojangName = null; - try { - mojangName = CMIReflections.getItemMinecraftName(new ItemStack(mat)); - } catch (Exception e) { - e.printStackTrace(); - } - mojangName = mojangName == null ? mat.toString().replace("_", "").replace(" ", "").toLowerCase() - : mojangName.replace("_", "").replace(" ", "").toLowerCase(); - - if (byName.containsKey(cmiName)) { - byName.put(cmiName + ":" + data, one); - } else - byName.put(cmiName, one); - - if (byName.containsKey(materialName)) - byName.put(materialName + ":" + data, one); - else - byName.put(materialName, one); - - if (!one.getLegacyNames().isEmpty()) { - for (String oneL : one.getLegacyNames()) { - String legacyName = oneL.replace("_", "").replace(" ", "").toLowerCase(); - if (byName.containsKey(legacyName) || data > 0) - byName.put(legacyName + ":" + data, one); - else - byName.put(legacyName, one); - } - } - - if (byName.containsKey(mojangName)) - byName.put(mojangName + ":" + data, one); - else - byName.put(mojangName, one); - - if (byName.containsKey(String.valueOf(id)) || data > 0) - byName.put(id + ":" + data, one); - else - byName.put(String.valueOf(id), one); - - if (byName.containsKey(String.valueOf(legacyId)) || data > 0) - byName.put(legacyId + ":" + data, one); - else - byName.put(String.valueOf(legacyId), one); - - if (!byId.containsKey(id)) - byId.put(id, one); - if (!byId.containsKey(one.getLegacyId())) - byId.put(one.getLegacyId(), one); - if (one.getLegacyData() == 0) - byId.put(one.getLegacyId(), one); - byRealMaterial.put(mat, one); - - } - } - - @Deprecated - public CMIItemStack getItem(Material mat) { - CMIMaterial cmat = CMIMaterial.get(mat); - if (cmat == null || cmat.equals(CMIMaterial.NONE)) - return null; - return new CMIItemStack(cmat); - } - - public static CMIItemStack getItem(CMIMaterial mat) { - if (mat == null || mat.equals(CMIMaterial.NONE)) - return null; - return new CMIItemStack(mat); - } - - public static CMIItemStack getItem(ItemStack item) { - if (item == null) - item = new ItemStack(Material.AIR); - CMIItemStack cm = getItem(CMIMaterial.get(item)); - if (cm == null) - return new CMIItemStack(Material.AIR); - cm.setItemStack(item); - return cm; - } - - HashMap headCache = new HashMap(); - - public CMIItemStack getItem(String name) { -// if (byBukkitName.isEmpty()) -// load(); - CMIItemStack cm = null; - name = name.toLowerCase().replace("minecraft:", ""); - String original = name; - name = name.replace("_", ""); - Integer amount = null; - - String subdata = null; - if (name.contains(":")) { - CMIMaterial mat = byName.get(name); - if (mat != null) - return new CMIItemStack(mat); - subdata = name.split(":")[1]; - } - - if (name.contains("-")) { - String a = name.split("-")[1]; - try { - amount = Integer.parseInt(a); - } catch (NumberFormatException e) { - } - name = name.split("-")[0]; - } - - if (name.contains(">")) { - String a = name.split(">")[1]; - try { - amount = Integer.parseInt(a); - } catch (NumberFormatException e) { - } - name = name.split(">")[0]; - } - - short data = -999; - - if (name.contains(":")) { - try { - data = (short) Integer.parseInt(name.split(":")[1]); - } catch (Exception e) { - } - try { - CMIEntityType e = CMIEntityType.getByName(name.split(":")[1]); - if (e != null) - data = (short) e.getId(); - } catch (Exception e) { - } - name = name.split(":")[0]; - } - - switch (name.toLowerCase()) { - case "skull": - cm = CMIMaterial.SKELETON_SKULL.newCMIItemStack(); - break; - case "door": - cm = CMIMaterial.SPRUCE_DOOR.newCMIItemStack(); - break; - case "head": - cm = CMIMaterial.PLAYER_HEAD.newCMIItemStack(); - data = 3; - - main: if (original.contains(":")) { - - ItemStack old = headCache.get(original); - if (old != null) { - cm.setItemStack(old); - } else { - String d = original.split(":")[1]; - ItemStack skull = CMIMaterial.PLAYER_HEAD.newItemStack(); - SkullMeta skullMeta = (SkullMeta) skull.getItemMeta(); - if (d.length() == 36) { - try { - OfflinePlayer offPlayer = Bukkit.getOfflinePlayer(UUID.fromString(d)); - skullMeta.setOwningPlayer(offPlayer); - } catch (Exception e) { - break main; - } - skull.setItemMeta(skullMeta); - } else { - skullMeta.setOwner(d); - skull.setItemMeta(skullMeta); - } - headCache.put(original, skull); - cm.setItemStack(skull); - } - } - - break; - default: - break; - } - - CMIMaterial cmat = CMIMaterial.get(subdata == null ? name : name + ":" + subdata); - if (cmat == null || cmat.equals(CMIMaterial.NONE)) { - cmat = CMIMaterial.get(name); - } - - if (cmat != null && !cmat.equals(CMIMaterial.NONE)) { - cm = cmat.newCMIItemStack(); - } else - cmat = CMIMaterial.get(subdata == null ? original : original + ":" + subdata); - - if (cmat != null && !cmat.equals(CMIMaterial.NONE)) - cm = cmat.newCMIItemStack(); - - CMIItemStack ncm = null; - if (cm != null) - ncm = cm.clone(); - - if (ncm != null && data != -999) { - if (ncm.getMaxDurability() > 15) - ncm.setData((short) 0); - else { - ncm.setData(data); - } - } - if (ncm != null && amount != null) - ncm.setAmount(amount); - - if (ncm != null && subdata != null) { - if (ncm.getCMIType().isPotion() || ncm.getCMIType().equals(CMIMaterial.SPLASH_POTION) - || ncm.getCMIType().equals(CMIMaterial.TIPPED_ARROW)) { - Integer d = null; - PotionEffectType type = null; - Boolean upgraded = false; - Boolean extended = false; - String[] split = subdata.split("-"); - try { - d = Integer.parseInt(split.length > 0 ? split[0] : subdata); - type = PotionEffectType.getById(d); - } catch (Exception e) { - } - try { - String n = (split.length > 0 ? split[0] : subdata).replace("_", ""); - for (PotionEffectType one : PotionEffectType.values()) { - if (one == null) - continue; - if (n.equalsIgnoreCase(one.getName().replace("_", ""))) { - type = one; - break; - } - } - - if (split.length > 1) { - upgraded = Boolean.parseBoolean(split[1]); - } - if (split.length > 2) { - extended = Boolean.parseBoolean(split[2]); - } - ItemStack item = ncm.getItemStack(); - if (extended && upgraded) - extended = false; - PotionMeta meta = (PotionMeta) item.getItemMeta(); - meta.setBasePotionData(new PotionData(PotionType.getByEffect(type), extended, upgraded)); - item.setItemMeta(meta); - } catch (Exception e) { - e.printStackTrace(); - } - - } - } - - return ncm; - } - - public Material getMaterial(String name) { - CMIItemStack cm = getItem(name); - if (cm == null) - return Material.AIR; - return cm.getType(); - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessage.java b/src/com/bekvon/bukkit/cmiLib/RawMessage.java deleted file mode 100644 index d61161378..000000000 --- a/src/com/bekvon/bukkit/cmiLib/RawMessage.java +++ /dev/null @@ -1,595 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.regex.Matcher; - -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -public class RawMessage { - - List parts = new ArrayList(); - List onlyText = new ArrayList(); - - LinkedHashMap temp = new LinkedHashMap(); - - RawMessageFragment fragment = new RawMessageFragment(); - RawMessageFragment hoverFragment = new RawMessageFragment(); - - private RawMessageFragment frozenFragment = new RawMessageFragment(); - private boolean freezeFormat = false; - - private String combined = ""; - String combinedClean = ""; - - private boolean dontBreakLine = false; - - public void clear() { - parts = new ArrayList(); - onlyText = new ArrayList(); - combined = ""; - combinedClean = ""; - } - - private String textIntoJson(String text, boolean hover) { - if (text.isEmpty()) { - return ""; - } - if (text.equalsIgnoreCase(" ")) { - return " "; - } - text = CMIChatColor.deColorize(text); - - Matcher match = CMIChatColor.fullPattern.matcher(text); - String matcher = null; - - List fragments = new ArrayList(); - - RawMessageFragment f = hover ? hoverFragment : fragment; - - String lastText = ""; - while (match.find()) { - matcher = match.group(); - String[] split = text.split(matcher.replace("#", "\\#").replace("{", "\\{").replace("}", "\\}"), 2); - text = ""; - for (int i = 1; i < split.length; i++) { - text += split[i]; - } - if (split[0] != null && !split[0].isEmpty()) { - String t = split[0]; - - String t2 = lastText; - lastText = t; - - if (t2.endsWith(" ") && t.startsWith(" ")) { - t = t.substring(1); - } - - f.setText(t); - fragments.add(f); - f = new RawMessageFragment(f); - } - CMIChatColor color = CMIChatColor.getColor(matcher); - if (color == null) - continue; - - if (color.isColor()) { - f.setLastColor(color); - } else { - f.addFormat(color); - } - } - - if (!text.isEmpty()) { - - if (lastText.endsWith(" ") && text.startsWith(" ")) - text = text.substring(1); - - RawMessageFragment t = new RawMessageFragment(f); - - t.setText(text); - fragments.add(t); - } - - if (hover) - hoverFragment = f; - else - fragment = f; - - StringBuilder finalText = new StringBuilder(); - - for (RawMessageFragment one : fragments) { - if (!finalText.toString().isEmpty()) - finalText.append("},{"); - StringBuilder options = new StringBuilder(); - for (CMIChatColor format : one.getFormats()) { - if (!options.toString().isEmpty()) - options.append(","); - if (format.equals(CMIChatColor.UNDERLINE)) - options.append("\"underlined\":true"); - else if (format.equals(CMIChatColor.BOLD)) - options.append("\"bold\":true"); - else if (format.equals(CMIChatColor.ITALIC)) - options.append("\"italic\":true"); - else if (format.equals(CMIChatColor.STRIKETHROUGH)) - options.append("\"strikethrough\":true"); - else if (format.equals(CMIChatColor.OBFUSCATED)) - options.append("\"obfuscated\":true"); - } - if (!options.toString().isEmpty()) { - finalText.append(options.toString()); - finalText.append(","); - } - - if (one.getLastColor() != null) { - if (one.getLastColor().getHex() != null) - finalText.append("\"color\":\"#" + one.getLastColor().getHex() + "\","); - else if (one.getLastColor().getName() != null) { - finalText.append("\"color\":\"" + one.getLastColor().getName().toLowerCase() + "\","); - } - } - - String t = one.getText(); - - // Old server support, we need to add colors and formats to the text directly - if (Version.isCurrentLower(Version.v1_16_R1)) { - StringBuilder oldColors = new StringBuilder(); - if (one.getLastColor() != null && one.getLastColor().getName() != null) { - oldColors.append(one.getLastColor().getColorCode()); - } - for (CMIChatColor format : one.getFormats()) { - if (format.equals(CMIChatColor.UNDERLINE)) - oldColors.append("&n"); - else if (format.equals(CMIChatColor.BOLD)) - oldColors.append("&l"); - else if (format.equals(CMIChatColor.ITALIC)) - oldColors.append("&o"); - else if (format.equals(CMIChatColor.STRIKETHROUGH)) - oldColors.append("&m"); - else if (format.equals(CMIChatColor.OBFUSCATED)) - oldColors.append("&k"); - } - t = oldColors.toString() + t; - } - - finalText.append("\"text\":\"" + escape(t, hover ? false : this.isDontBreakLine()) + "\""); - } - - if (finalText.toString().isEmpty()) - return ""; - return "{" + finalText.toString() + "}"; - } - - @Deprecated - public RawMessage add(String text, String hoverText, String command, String suggestion, String url) { - add(text, hoverText, command, suggestion, url, null); - return this; - } - - @Deprecated - public RawMessage add(String text, String hoverText, String command, String suggestion, String url, String insertion) { - this.addText(text); - this.addHover(hoverText); - this.addCommand(command); - this.addSuggestion(suggestion); - this.addUrl(url); - this.addInsertion(insertion); - return this; - } - - @Deprecated - public RawMessage addUrl(String text, String url) { - addUrl(text, url, null); - return this; - } - - @Deprecated - public RawMessage addUrl(String text, String url, String hoverText) { - this.addText(text); - this.addHover(hoverText); - this.addUrl(url); - return this; - } - - @Deprecated - public RawMessage add(String text) { - return add(text, null, null, null, null); - } - - @Deprecated - public RawMessage add(String text, String hoverText) { - return add(text, hoverText, null, null, null); - } - - @Deprecated - public RawMessage add(String text, List hoverText) { - - String hover = ""; - if (hoverText != null) - for (String one : hoverText) { - if (!hover.isEmpty()) - hover += "\n"; - hover += one; - } - return add(text, hover.isEmpty() ? null : hover, null, null, null); - } - - @Deprecated - public RawMessage add(String text, String hoverText, String command) { - return add(text, hoverText, command, null, null); - } - - @Deprecated - public RawMessage add(String text, String hoverText, String command, String suggestion) { - return add(text, hoverText, command, suggestion, null); - } - - @Deprecated - public RawMessage addHoverText(List hoverText) { - return addHover(hoverText); - } - - @Deprecated - public RawMessage addHoverText(String hover) { - return addHover(hover); - } - - public RawMessage addItem(String text, ItemStack item, String command, String suggestion, String insertion) { - this.addText(text); - this.addCommand(command); - this.addSuggestion(suggestion); - this.addInsertion(insertion); - this.addItem(item); - return this; - } - - public RawMessage addText(String text) { - if (text == null || text.isEmpty()) - return this; - if (temp.containsKey(RawMessagePartType.Text)) - build(); - -// if (this.isDontBreakLine()) { - onlyText.add(CMIChatColor.translate(text)); - -// text = escape(text, this.isDontBreakLine()); -// } - text = textIntoJson(text, false); - String f = ""; - if (text.isEmpty()) - f = "\"text\":\"\""; - else if (text.equalsIgnoreCase(" ")) - f = "\"text\":\" \""; - else - f = "\"text\":\"\",\"extra\":[" + CMIChatColor.translate(text).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]"; - temp.put(RawMessagePartType.Text, f); - return this; - } - - public RawMessage addHover(List hoverText) { - StringBuilder hover = new StringBuilder(); - if (hoverText != null) { - for (String one : hoverText) { - if (!hover.toString().isEmpty()) - hover.append("\n"); - hover.append(one); - } - } - return addHover(hover.toString()); - } - - public RawMessage addHover(String hover) { - hoverFragment = new RawMessageFragment(); - if (hover == null || hover.isEmpty()) - return this; - - hover = textIntoJson(hover, true); -// hover = escape(hover, false); - String f = ""; - if (hover.isEmpty()) - f = "\"text\":\"\""; - else if (hover.equalsIgnoreCase(" ")) - f = "\"text\":\" \""; - else - f = "\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(hover).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]}}"; - temp.put(RawMessagePartType.HoverText, f); - return this; - } - - public RawMessage addCommand(String command) { - if (command == null || command.isEmpty()) - return this; - if (!command.startsWith("/")) - command = "/" + command; - command = escape(command, true); - String f = "\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + CMIChatColor.deColorize(command).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "\"}"; - temp.put(RawMessagePartType.ClickCommand, f); - return this; - } - - public RawMessage addSuggestion(String suggestion) { - if (suggestion == null || suggestion.isEmpty()) - return this; - suggestion = escape(suggestion, true); - String f = "\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "\"}"; - temp.put(RawMessagePartType.ClickSuggestion, f); - return this; - } - - public RawMessage addInsertion(String insertion) { - if (insertion == null || insertion.isEmpty()) - return this; - insertion = escape(insertion, true); - String f = "\"insertion\":\"" + CMIChatColor.deColorize(insertion).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "\""; - temp.put(RawMessagePartType.ClickInsertion, f); - return this; - } - - public RawMessage addItem(ItemStack item) { - if (item == null) - return this; - String res = CMIReflections.toJson(item.clone()); - String f = "\"hoverEvent\":{\"action\":\"show_item\",\"value\":\"" + escape(res, true) + "\"}"; - temp.put(RawMessagePartType.HoverItem, f); - return this; - } - - public RawMessage addUrl(String url) { - if (url == null || url.isEmpty()) - return this; - - if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://")) - url = "http://" + url; - - String f = "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + CMIChatColor.deColorize(url).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "\"}"; - - temp.put(RawMessagePartType.ClickLink, f); - return this; - } - - public RawMessage build() { - if (temp.isEmpty()) - return this; - - if (!temp.containsKey(RawMessagePartType.Text)) - return this; - String part = ""; - for (RawMessagePartType one : RawMessagePartType.values()) { - String t = temp.get(one); - if (t == null) - continue; - if (!part.isEmpty()) - part += ","; - part += t; - } - part = "{" + part + "}"; - temp.clear(); - parts.add(part); - return this; - } - - private static String escape(String s, boolean escapeNewLn) { - - if (s == null) - return null; - StringBuffer sb = new StringBuffer(); - escape(s, sb); - if (escapeNewLn) - return sb.toString().replace(nl, "\\\\n"); - return sb.toString().replace(nl, "\\n"); - } - - private static final String nl = "\u00A5n"; - - private static void escape(String s, StringBuffer sb) { - s = s.replace("\n", nl); - s = s.replace("\\n", nl); - for (int i = 0; i < s.length(); i++) { - char ch = s.charAt(i); - - switch (ch) { - case '"': - sb.append("\\\""); - break; - case '\n': - sb.append("\\n"); - break; - case '\\': - sb.append("\\\\"); - break; - case '\b': - sb.append("\\b"); - break; - case '\f': - sb.append("\\f"); - break; - case '\r': - sb.append("\\r"); - break; - case '\t': - sb.append("\\t"); - break; - case '/': - sb.append("\\/"); - break; - default: - if ((ch >= '\u0000' && ch <= '\u001F') || (ch >= '\u007F' && ch <= '\u009F') || (ch >= '\u2000' && ch <= '\u20FF')) { - String ss = Integer.toHexString(ch); - sb.append("\\u"); - for (int k = 0; k < 4 - ss.length(); k++) { - sb.append('0'); - } - sb.append(ss.toUpperCase()); - } else { - sb.append(ch); - } - } - } - -// for (int i = 0; i < s.length(); i++) { -// char ch = s.charAt(i); -// if (String.valueOf(ch).equals(nl)) { -// if (escapeNewLn) { -// sb.append("\\n"); -// } else { -// sb.append("\n"); -// } -// } else -// sb.append(ch); -// -// } - } - - public List softCombine() { - List ls = new ArrayList(); - String f = ""; - for (String part : parts) { - if (f.isEmpty()) - f = "[\"\","; - else { - if (f.length() > 30000) { - ls.add(f + "]"); - f = "[\"\"," + part; - continue; - } - f += ","; - } - f += part; - } - if (!f.isEmpty()) - f += "]"; - ls.add(f); - return ls; - } - - private RawMessage combine() { - String f = ""; - for (String part : parts) { - if (f.isEmpty()) - f = "[\"\","; - else - f += ","; - f += part; - } - if (!f.isEmpty()) - f += "]"; - - if (f.isEmpty()) - f = "{\"text\":\" \"}"; - - combined = f; - return this; - } - - public RawMessage combineClean() { - String f = ""; - for (String part : onlyText) { - f += part.replace("\\\"", "\""); - } - combinedClean = f; - return this; - } - - public RawMessage show(Player player) { - return show(player, true); - } - - public RawMessage show(Player player, boolean softCombined) { - if (player == null) - return this; - if (combined.isEmpty()) { - this.build(); - combine(); - } - - if (!player.isOnline()) - return this; - - if (softCombined) { - for (String one : softCombine()) { - if (one.isEmpty()) - continue; - RawMessageManager.send(player, one); - } - } else { - RawMessageManager.send(player, combined); - } - - return this; - } - - public int getFinalLenght() { - String f = ""; - for (String part : parts) { - if (f.isEmpty()) - f = "[\"\","; - else - f += ","; - f += part; - } - if (!f.isEmpty()) - f += "]"; - return f.length(); - } - - public RawMessage show(CommandSender sender) { - if (combined.isEmpty()) { - this.build(); - combine(); - } - if (sender instanceof Player) { - show((Player) sender); - } else { - sender.sendMessage(this.combineClean().combinedClean); - } - return this; - } - - public String getRaw() { - if (combined.isEmpty()) { - build(); - combine(); - } - return combined; - } - - public void setCombined(String combined) { - this.combined = combined; - } - - public String getShortRaw() { - build(); - String f = ""; - for (String part : parts) { - if (!f.isEmpty()) - f += ","; - f += part; - } - return f; - } - - public boolean isDontBreakLine() { - return dontBreakLine; - } - - public void setDontBreakLine(boolean dontBreakLine) { - this.dontBreakLine = dontBreakLine; - } - - public boolean isFormatFrozen() { - return freezeFormat; - } - - public void freezeFormat() { - frozenFragment = new RawMessageFragment(fragment); - this.freezeFormat = true; - } - - public void unFreezeFormat() { - fragment = new RawMessageFragment(frozenFragment); - this.freezeFormat = false; - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessageFragment.java b/src/com/bekvon/bukkit/cmiLib/RawMessageFragment.java deleted file mode 100644 index 38050bcce..000000000 --- a/src/com/bekvon/bukkit/cmiLib/RawMessageFragment.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.util.HashSet; -import java.util.Set; - -public class RawMessageFragment { - - private CMIChatColor lastColor = null; - private Set formats = new HashSet(); - String font = null; - private String text = ""; - - public RawMessageFragment() { - } - - public RawMessageFragment(RawMessageFragment old) { - this.lastColor = old.lastColor; - this.formats = new HashSet(old.formats); - this.font = old.font; - } - - public CMIChatColor getLastColor() { - return lastColor; - } - - public void setLastColor(CMIChatColor lastColor) { - this.lastColor = lastColor; - formats.clear(); - } - - public Set getFormats() { - return formats; - } - - public void setFormats(Set formats) { - this.formats = formats; - } - - public void addFormat(CMIChatColor format) { - if (format.isReset()) { - this.formats.clear(); - this.lastColor = null; - return; - } - this.formats.add(format); - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessageManager.java b/src/com/bekvon/bukkit/cmiLib/RawMessageManager.java deleted file mode 100644 index 3c54f3c0d..000000000 --- a/src/com/bekvon/bukkit/cmiLib/RawMessageManager.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class RawMessageManager { - - private static Object packet; - private static Method getHandle; - private static Method sendPacket; - private static Field playerConnection; - private static Class nmsChatSerializer; - private static Class nmsIChatBaseComponent; - private static Class packetType; - - private static Class ChatMessageclz; - private static Class sub; - private static Object[] consts; - - static { - Version version = Version.getCurrent(); - try { - packetType = Class.forName("net.minecraft.server." + version + ".PacketPlayOutChat"); - Class typeCraftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer"); - Class typeNMSPlayer = Class.forName("net.minecraft.server." + version + ".EntityPlayer"); - Class typePlayerConnection = Class.forName("net.minecraft.server." + version + ".PlayerConnection"); - nmsChatSerializer = Class.forName(getChatSerializerClasspath()); - nmsIChatBaseComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent"); - getHandle = typeCraftPlayer.getMethod("getHandle"); - playerConnection = typeNMSPlayer.getField("playerConnection"); - sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet")); - if (Version.isCurrentHigher(Version.v1_11_R1)) { - ChatMessageclz = Class.forName("net.minecraft.server." + version + ".ChatMessageType"); - consts = ChatMessageclz.getEnumConstants(); - sub = consts[2].getClass(); - } - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { - Bukkit.getConsoleSender().sendMessage("Error {0} "); - Bukkit.getConsoleSender().sendMessage(ex.toString()); - } - } - - public static void send(CommandSender receivingPacket, String msg) { - if (receivingPacket instanceof Player) - send((Player) receivingPacket, msg); - else - receivingPacket.sendMessage(msg); - } - - public static void send(Player receivingPacket, String json) { - if (receivingPacket == null) - return; - if (!receivingPacket.isOnline()) - return; - if (json == null) - return; - - try { - Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, json); - if (Version.isCurrentHigher(Version.v1_15_R1)) - packet = packetType.getConstructor(nmsIChatBaseComponent, sub, UUID.class).newInstance(serialized, consts[1], receivingPacket.getUniqueId()); - else if (Version.isCurrentHigher(Version.v1_11_R1)) - packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[1]); - else if (Version.isCurrentHigher(Version.v1_7_R4)) { - packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 1); - } else { - packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 1); - } - Object player = getHandle.invoke(receivingPacket); - Object connection = playerConnection.get(player); - sendPacket.invoke(connection, packet); - } catch (Exception ex) { - ex.printStackTrace(); - Bukkit.getConsoleSender().sendMessage("Failed to show json message with packets, using command approach"); - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "minecraft:tellraw \"" + receivingPacket.getName() + "\" " + json); - } - } - - private static String getChatSerializerClasspath() { - if (!Version.isCurrentHigher(Version.v1_8_R2)) - return "net.minecraft.server." + Version.getCurrent() + ".ChatSerializer"; - return "net.minecraft.server." + Version.getCurrent() + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent - } -} diff --git a/src/com/bekvon/bukkit/cmiLib/RawMessagePartType.java b/src/com/bekvon/bukkit/cmiLib/RawMessagePartType.java deleted file mode 100644 index a3ce00383..000000000 --- a/src/com/bekvon/bukkit/cmiLib/RawMessagePartType.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -public enum RawMessagePartType { - Text, HoverText, HoverItem, HoverEntity, HoverAchievement, ClickLink, ClickCommand, ClickSuggestion, ClickInsertion; -} diff --git a/src/com/bekvon/bukkit/cmiLib/TitleMessageManager.java b/src/com/bekvon/bukkit/cmiLib/TitleMessageManager.java deleted file mode 100644 index a00c38ef4..000000000 --- a/src/com/bekvon/bukkit/cmiLib/TitleMessageManager.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.logging.Level; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; - -public class TitleMessageManager { - private static Method getHandle; - private static Method sendPacket; - private static Field playerConnection; - private static Class nmsIChatBaseComponent; - - private static Constructor nmsPacketPlayOutTitle; - private static Constructor nmsPacketPlayOutTimes; - private static Class enumTitleAction; - private static Method fromString; - private static boolean simpleTitleMessages = false; - - static { - if (Version.isCurrentHigher(Version.v1_7_R4)) { - Version version = Version.getCurrent(); - try { - Class typeCraftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer"); - Class typeNMSPlayer = Class.forName("net.minecraft.server." + version + ".EntityPlayer"); - Class typePlayerConnection = Class.forName("net.minecraft.server." + version + ".PlayerConnection"); - nmsIChatBaseComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent"); - getHandle = typeCraftPlayer.getMethod("getHandle"); - playerConnection = typeNMSPlayer.getField("playerConnection"); - sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet")); - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Error {0}", ex); - } - - // Title - try { - Class typePacketPlayOutTitle = Class.forName(getPacketPlayOutTitleClasspath()); - enumTitleAction = Class.forName(getEnumTitleActionClasspath()); - nmsPacketPlayOutTitle = typePacketPlayOutTitle.getConstructor(enumTitleAction, nmsIChatBaseComponent); - nmsPacketPlayOutTimes = typePacketPlayOutTitle.getConstructor(int.class, int.class, int.class); - fromString = Class.forName("org.bukkit.craftbukkit." + version + ".util.CraftChatMessage").getMethod("fromString", String.class); - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException ex) { - simpleTitleMessages = true; - } - } - } - - public static void send(final Player receivingPacket, final Object title, final Object subtitle) { - send(receivingPacket, title, subtitle, 0, 40, 10); - } - - public static void send(final Player receivingPacket, final Object title, final Object subtitle, final int fadeIn, final int keep, final int fadeOut) { - Bukkit.getScheduler().runTaskAsynchronously(Residence.getInstance(), new Runnable() { - @Override - public void run() { - - String t = title == null ? null : CMIChatColor.translate((String) title); - String s = subtitle == null ? null : CMIChatColor.translate((String) subtitle); - - if (Version.isCurrentEqualOrLower(Version.v1_7_R4)) { - ActionBarManager.send(receivingPacket, (t == null ? "" : t) + (s == null ? "" : s)); - return; - } - - if (simpleTitleMessages) { - receivingPacket.sendMessage(t); - receivingPacket.sendMessage(s); - return; - } - try { - switch (Version.getCurrent()) { - case v1_12_R1: - case v1_13_R1: - case v1_13_R2: - case v1_14_R1: - case v1_15_R1: - case v1_16_R1: - default: - receivingPacket.sendTitle(t, s, fadeIn, keep, fadeOut); - break; - case v1_9_R1: - case v1_9_R2: - case v1_10_R1: - case v1_11_R1: - case v1_8_R1: - case v1_8_R2: - case v1_8_R3: - Object packetTimes = nmsPacketPlayOutTimes.newInstance(fadeIn, keep, fadeOut); - sendPacket(receivingPacket, packetTimes); - if (title != null) { - Object packetTitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("TITLE").get(null), ((Object[]) fromString.invoke(null, t))[0]); - sendPacket(receivingPacket, packetTitle); - } - if (subtitle != null) { - if (title == null) { - Object packetTitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("TITLE").get(null), ((Object[]) fromString.invoke(null, ""))[0]); - sendPacket(receivingPacket, packetTitle); - } - Object packetSubtitle = nmsPacketPlayOutTitle.newInstance(enumTitleAction.getField("SUBTITLE").get(null), ((Object[]) fromString.invoke(null, s))[0]); - sendPacket(receivingPacket, packetSubtitle); - } - break; - } - - } catch (SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchFieldException ex) { - simpleTitleMessages = true; - Bukkit.getLogger().log(Level.SEVERE, "Your server can't fully support title messages. They will be shown in chat instead."); - } - return; - } - }); - } - - private static void sendPacket(Player player, Object packet) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { - Object handle = getHandle.invoke(player); - Object connection = playerConnection.get(handle); - sendPacket.invoke(connection, packet); - } - - private static String getPacketPlayOutTitleClasspath() { - return "net.minecraft.server." + Version.getCurrent() + ".PacketPlayOutTitle"; - } - - private static String getEnumTitleActionClasspath() { - return getPacketPlayOutTitleClasspath() + "$EnumTitleAction"; - } - -} diff --git a/src/com/bekvon/bukkit/cmiLib/Version.java b/src/com/bekvon/bukkit/cmiLib/Version.java deleted file mode 100644 index d793abfb6..000000000 --- a/src/com/bekvon/bukkit/cmiLib/Version.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.bekvon.bukkit.cmiLib; - -import org.bukkit.Bukkit; - -public enum Version { - v1_7_R1, - v1_7_R2, - v1_7_R3, - v1_7_R4, - v1_8_R1, - v1_8_R2, - v1_8_R3, - v1_9_R1, - v1_9_R2, - v1_10_R1, - v1_11_R1, - v1_12_R1, - v1_13_R1, - v1_13_R2, - v1_14_R1, - v1_15_R1, - v1_16_R1, - v1_16_R2, - v1_16_R3, - v1_17_R1, - v1_17_R2, - v1_18_R1, - v1_18_R2, - v1_19_R1, - v1_19_R2, - v1_20_R1, - v1_20_R2, - v1_21_R1, - v1_21_R2, - v1_22_R1, - v1_22_R2; - - private Integer value; - private String shortVersion; - private static Version current = null; - - Version() { - try { - this.value = Integer.valueOf(this.name().replaceAll("[^\\d.]", "")); - } catch (Exception e) { - } - shortVersion = this.name().substring(0, this.name().length() - 3); - } - - public Integer getValue() { - return value; - } - - public String getShortVersion() { - return shortVersion; - } - - public static Version getCurrent() { - if (current != null) - return current; - String[] v = Bukkit.getServer().getClass().getPackage().getName().split("\\."); - String vv = v[v.length - 1]; - for (Version one : values()) { - if (one.name().equalsIgnoreCase(vv)) { - current = one; - break; - } - } - return current; - } - - public boolean isLower(Version version) { - return getValue() < version.getValue(); - } - - public boolean isHigher(Version version) { - return getValue() > version.getValue(); - } - - public boolean isEqualOrLower(Version version) { - return getValue() <= version.getValue(); - } - - public boolean isEqualOrHigher(Version version) { - return getValue() >= version.getValue(); - } - - public static boolean isCurrentEqualOrHigher(Version v) { - return getCurrent().getValue() >= v.getValue(); - } - - public static boolean isCurrentHigher(Version v) { - return getCurrent().getValue() > v.getValue(); - } - - public static boolean isCurrentLower(Version v) { - return getCurrent().getValue() < v.getValue(); - } - - public static boolean isCurrentEqualOrLower(Version v) { - return getCurrent().getValue() <= v.getValue(); - } -} \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java deleted file mode 100644 index 03efb8906..000000000 --- a/src/com/bekvon/bukkit/residence/BossBar/BossBarInfo.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.bekvon.bukkit.residence.BossBar; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; -import org.bukkit.boss.BossBar; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.utils.Utils; - -public class BossBarInfo { - private ResidencePlayer user; - private Double percentage = null; - private Double adjustPerc = null; - private Integer keepFor = 60; - private Integer auto = null; - private BossBar bar; - private BarColor startingColor = null; - private BarStyle style = null; - private Integer autoId = null; - private Integer id = null; - private String nameOfBar; - private String titleOfBar = "Title"; - private List cmds = null; - - public BossBarInfo(ResidencePlayer user, String nameOfBar) { - this.user = user; - this.nameOfBar = nameOfBar; - } - - public BossBarInfo(ResidencePlayer user, String nameOfBar, BossBar bar) { - this.user = user; - this.nameOfBar = nameOfBar; - this.bar = bar; - } - - public void setId(Integer id) { -// cancelHideScheduler(); - this.id = id; - } - - public void cancelAutoScheduler() { - if (autoId != null) { - Bukkit.getScheduler().cancelTask(this.autoId); - autoId = null; - } - } - - public void cancelHideScheduler() { - if (id != null) { - Bukkit.getScheduler().cancelTask(this.id); - id = null; - } - } - - public void remove() { - cancelAutoScheduler(); - cancelHideScheduler(); - if (bar != null) - bar.setVisible(false); - user.removeBossBar(this); - } - - public ResidencePlayer getUser() { - return this.user; - } - - public BossBar getBar() { - return this.bar; - } - - public Double getPercentage() { - return percentage; - } - - public void setPercentage(Double max, Double current) { - current = current * 100 / max / 100D; - setPercentage(current); - } - - public void setPercentage(Double percentage) { - if (percentage != null) { - if (percentage < 0) - percentage = 0D; - if (percentage > 1) - percentage = 1D; - } - this.percentage = percentage; - } - - public String getNameOfBar() { - if (nameOfBar == null) - nameOfBar = "CmiBossbar" + (new Random().nextInt(100)); - return nameOfBar; - } - - public void setNameOfBar(String nameOfBar) { - this.nameOfBar = nameOfBar; - } - - public Integer getKeepFor() { - return keepFor; - } - - public void setKeepForTicks(Integer keepFor) { - if (keepFor != null) - this.keepFor = keepFor; - } - - public String getTitleOfBar() { - if (titleOfBar != null && titleOfBar.contains("[autoTimeLeft]")) { - if (this.percentage != null && this.adjustPerc != null && this.auto != null) { - double leftTicks = this.percentage / (this.adjustPerc < 0 ? -this.adjustPerc : this.adjustPerc); - Long totalTicks = (long) (leftTicks * (this.auto < 0 ? -this.auto : this.auto)); - Long mili = totalTicks * 50; - return titleOfBar.replace("[autoTimeLeft]", Utils.to24hourShort(mili + 1000)); - } - } - return titleOfBar == null ? "" : titleOfBar; - } - - public void setTitleOfBar(String titleOfBar) { - if (titleOfBar == null || titleOfBar.isEmpty()) - this.titleOfBar = null; - else - this.titleOfBar = CMIChatColor.translate(titleOfBar); - } - - public void setBar(BossBar bar) { - this.bar = bar; - } - - public BarColor getColor() { - return startingColor; - } - - public void setColor(BarColor startingColor) { -// if (startingColor == null) -// startingColor = BarColor.GREEN; - this.startingColor = startingColor; - } - - public Double getAdjustPerc() { - return adjustPerc; - } - - public void setAdjustPerc(Double adjustPerc) { - this.adjustPerc = adjustPerc; - } - - public BarStyle getStyle() { - return style; - } - - public void setStyle(BarStyle style) { -// if (style == null) -// style = BarStyle.SEGMENTED_10; - this.style = style; - } - - public void setUser(ResidencePlayer user) { - this.user = user; - } - - public Integer getId() { - return id; - } - - public Integer getAuto() { - return auto; - } - - public void setAuto(Integer auto) { - this.auto = auto; - } - - public Integer getAutoId() { - return autoId; - } - - public void setAutoId(Integer autoId) { - this.autoId = autoId; - } - - public void updateCycle() { - - } - -// public List getCommands() { -// return cmds; -// } -// -// public List getCommands(Player player) { -// Snd snd = new Snd(); -// snd.setSender(player); -// snd.setTarget(player); -// return CMI.getInstance().getLM().updateSnd(snd, new ArrayList(cmds)); -// } - -// public void setCmds(List cmds) { -// this.cmds = cmds; -// } -} diff --git a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java b/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java deleted file mode 100644 index 981a56061..000000000 --- a/src/com/bekvon/bukkit/residence/BossBar/BossBarManager.java +++ /dev/null @@ -1,286 +0,0 @@ - -package com.bekvon.bukkit.residence.BossBar; - -import java.util.HashMap; -import java.util.Map.Entry; - -import org.bukkit.Bukkit; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; -import org.bukkit.boss.BossBar; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.CMIGUI.GUIManager; -import com.bekvon.bukkit.cmiLib.Version; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.utils.Debug; - -public class BossBarManager { - - Residence plugin; - - public BossBarManager(Residence plugin) { - this.plugin = plugin; - } - - public synchronized void updateBossBars(ResidencePlayer player) { - if (Version.isCurrentLower(Version.v1_9_R1)) - return; - if (player == null) - return; - HashMap temp = new HashMap(player.getBossBarInfo()); - for (Entry one : temp.entrySet()) { - showBar(one.getValue()); - } - } - - public synchronized void showBar(final BossBarInfo barInfo) { - - if (Version.isCurrentLower(Version.v1_9_R1)) - return; - final ResidencePlayer user = barInfo.getUser(); - - barInfo.cancelHideScheduler(); - barInfo.cancelAutoScheduler(); - - barInfo.setAutoId(Bukkit.getScheduler().scheduleSyncRepeatingTask(Residence.getInstance(), new Runnable() { - @Override - public void run() { - - if (user == null || !user.isOnline()) { - barInfo.cancelAutoScheduler(); - return; - } - - barInfo.updateCycle(); - - BossBar bar = barInfo.getBar(); - - String name = barInfo.getTitleOfBar(); - - boolean isNew = true; - if (bar == null) { - BarColor color = barInfo.getColor(); - if (color == null) - switch (user.getBossBarInfo().size()) { - case 1: - color = BarColor.GREEN; - break; - case 2: - color = BarColor.RED; - break; - case 3: - color = BarColor.WHITE; - break; - case 4: - color = BarColor.YELLOW; - break; - case 5: - color = BarColor.PINK; - break; - case 6: - color = BarColor.PURPLE; - break; - default: - color = BarColor.BLUE; - break; - } - bar = Bukkit.createBossBar(name, color, barInfo.getStyle() != null ? barInfo.getStyle() : BarStyle.SEGMENTED_10); - } else { - bar.setTitle(name); - if (barInfo.getStyle() != null) - bar.setStyle(barInfo.getStyle()); - if (barInfo.getColor() != null) - bar.setColor(barInfo.getColor()); - isNew = false; - } - - Double percentage = barInfo.getPercentage(); - if (percentage == null) - percentage = 1D; - - if (barInfo.getAdjustPerc() != null) { - Double curP = barInfo.getPercentage(); - if (curP != null && curP <= 0 && barInfo.getAdjustPerc() < 0) { - barInfo.cancelAutoScheduler(); - barInfo.getBar().setVisible(false); - barInfo.remove(); - -// if (barInfo.getCommands() != null) { -// plugin.getSpecializedCommandManager().processCmds(barInfo.getCommands(user.getPlayer()), user.getPlayer()); -// } - return; - } - if (curP != null && curP >= 1 && barInfo.getAdjustPerc() > 0) { - barInfo.cancelAutoScheduler(); - barInfo.getBar().setVisible(false); - barInfo.remove(); -// if (barInfo.getCommands() != null) { -// plugin.getSpecializedCommandManager().processCmds(barInfo.getCommands(user.getPlayer()), user.getPlayer()); -// } - return; - } - if (curP == null) - if (barInfo.getAdjustPerc() > 0) - curP = 0D; - else - curP = 1D; - curP += barInfo.getAdjustPerc(); - barInfo.setPercentage(curP); - } else - barInfo.setPercentage(percentage); - - try { - bar.setProgress(barInfo.getPercentage()); - if (isNew) { - Player target = user.getPlayer(); - if (target == null) - return; - bar.addPlayer(target); - bar.setVisible(true); - } - } catch (NoSuchMethodError e) { - e.printStackTrace(); - } - barInfo.setBar(bar); - } - }, barInfo.getAuto(), barInfo.getAuto())); - -// if (barInfo.getKeepFor() > 0) { -// barInfo.setId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { -// @Override -// public void run() { -// barInfo.getBar().setVisible(false); -// barInfo.remove(); -// return; -// } -// }, barInfo.getKeepFor())); -// } - } - -// public synchronized void Show(final BossBarInfo barInfo) { -// if (Version.isCurrentLower(Version.v1_9_R1)) -// return; -// final ResidencePlayer user = barInfo.getUser(); -// -// if (user == null || !user.isOnline()) -// return; -// -// barInfo.updateCycle(); -// -// BossBar bar = barInfo.getBar(); -// -// String name = barInfo.getTitleOfBar(); -// -// boolean isNew = true; -// if (bar == null) { -// BarColor color = barInfo.getColor(); -// if (color == null) -// switch (user.getBossBarInfo().size()) { -// case 1: -// color = BarColor.GREEN; -// break; -// case 2: -// color = BarColor.RED; -// break; -// case 3: -// color = BarColor.WHITE; -// break; -// case 4: -// color = BarColor.YELLOW; -// break; -// case 5: -// color = BarColor.PINK; -// break; -// case 6: -// color = BarColor.PURPLE; -// break; -// default: -// color = BarColor.BLUE; -// break; -// } -// bar = Bukkit.createBossBar(name, color, barInfo.getStyle() != null ? barInfo.getStyle() : BarStyle.SEGMENTED_10); -// } else { -// bar.setTitle(name); -// if (barInfo.getStyle() != null) -// bar.setStyle(barInfo.getStyle()); -// if (barInfo.getColor() != null) -// bar.setColor(barInfo.getColor()); -// isNew = false; -// } -// -// Double percentage = barInfo.getPercentage(); -// if (percentage == null) -// percentage = 1D; -// -// if (barInfo.getAdjustPerc() != null) { -// Double curP = barInfo.getPercentage(); -// if (curP != null && curP <= 0 && barInfo.getAdjustPerc() < 0) { -// barInfo.cancelAutoScheduler(); -//// if (barInfo.getCommands() != null) { -//// plugin.getSpecializedCommandManager().processCmds(barInfo.getCommands(user.getPlayer()), user.getPlayer()); -//// } -// return; -// } -// if (curP != null && curP >= 1 && barInfo.getAdjustPerc() > 0) { -// barInfo.cancelAutoScheduler(); -//// if (barInfo.getCommands() != null) { -//// plugin.getSpecializedCommandManager().processCmds(barInfo.getCommands(user.getPlayer()), user.getPlayer()); -//// } -// return; -// } -// if (curP == null) -// if (barInfo.getAdjustPerc() > 0) -// curP = 0D; -// else -// curP = 1D; -// curP += barInfo.getAdjustPerc(); -// barInfo.setPercentage(curP); -// } else -// barInfo.setPercentage(percentage); -// -// try { -// bar.setProgress(barInfo.getPercentage()); -// if (isNew) { -// Player target = user.getPlayer(); -// if (target == null) -// return; -// bar.addPlayer(target); -// bar.setVisible(true); -// } -// } catch (NoSuchMethodError e) { -// e.printStackTrace(); -// } -// barInfo.setBar(bar); -// -// barInfo.cancelHideScheduler(); -// barInfo.cancelAutoScheduler(); -// -// if (barInfo.getAuto() != null && barInfo.getAuto() > 0) { -// barInfo.setAutoId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { -// @Override -// public void run() { -// -// if (barInfo.getAutoId() != null) { -// Show(barInfo); -// } -// -// return; -// } -// }, barInfo.getAuto())); -// } -// if (barInfo.getKeepFor() > 0) { -// -// barInfo.setId(Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { -// @Override -// public void run() { -// barInfo.getBar().setVisible(false); -// barInfo.remove(); -// return; -// } -// }, barInfo.getKeepFor())); -// } -// } - -} diff --git a/src/com/bekvon/bukkit/residence/CommandFiller.java b/src/com/bekvon/bukkit/residence/CommandFiller.java index 82f32777a..ed3439122 100644 --- a/src/com/bekvon/bukkit/residence/CommandFiller.java +++ b/src/com/bekvon/bukkit/residence/CommandFiller.java @@ -136,9 +136,7 @@ private Class getClass(String cmd) { Class nmsClass = null; try { nmsClass = Class.forName(packagePath + "." + cmd.toLowerCase()); - } catch (ClassNotFoundException e) { - } catch (IllegalArgumentException e) { - } catch (SecurityException e) { + } catch (Throwable e) { } return nmsClass; } diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index f37222649..6fd565bab 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -30,11 +30,13 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.cmiLib.Version; -import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.ConfigReader; + +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Version.Version; + import com.bekvon.bukkit.residence.containers.ELMessageType; import com.bekvon.bukkit.residence.containers.EconomyType; import com.bekvon.bukkit.residence.containers.Flags; @@ -551,7 +553,7 @@ public void UpdateConfigFile() { ConfigReader c = null; try { - c = new ConfigReader("config.yml"); + c = new ConfigReader(Residence.getInstance(), "config.yml"); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/com/bekvon/bukkit/residence/LocaleManager.java b/src/com/bekvon/bukkit/residence/LocaleManager.java index eab43d747..4b3d03dab 100644 --- a/src/com/bekvon/bukkit/residence/LocaleManager.java +++ b/src/com/bekvon/bukkit/residence/LocaleManager.java @@ -20,12 +20,14 @@ import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; -import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.containers.CommandStatus; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; + public class LocaleManager { public HashMap>> CommandTab = new HashMap>>(); @@ -103,12 +105,13 @@ public void LoadLang(String lang) { c = null; try { - c = new ConfigReader("Language" + File.separator + lang + ".yml"); + c = new ConfigReader(Residence.getInstance(), "Language" + File.separator + lang + ".yml"); } catch (Exception e1) { e1.printStackTrace(); } if (c == null) return; + c.load(); c.copyDefaults(true); if (lang.equalsIgnoreCase(plugin.getConfigManager().getLanguage())) @@ -144,7 +147,7 @@ else if (lm.getText() instanceof ArrayList) { c.get("CommandHelp.SubCommands.res.Info", Arrays.asList("&2Use &6/res [command] ? &2to view more help Information.")); for (Entry cmo : plugin.getCommandFiller().getCommandMap().entrySet()) { - c.setP(plugin.getLocaleManager().path + cmo.getKey() + "."); + c.setFullPath(plugin.getLocaleManager().path + cmo.getKey() + "."); try { Class cl = Class.forName(plugin.getCommandFiller().packagePath + "." + cmo.getKey()); if (cmd.class.isAssignableFrom(cl)) { diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 46180b152..20d20ee04 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -42,11 +42,6 @@ import org.kingdoms.main.Kingdoms; import org.kingdoms.manager.game.GameManagement; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.Version; -import com.bekvon.bukkit.cmiLib.VersionChecker; -import com.bekvon.bukkit.residence.BossBar.BossBarManager; import com.bekvon.bukkit.residence.Placeholders.Placeholder; import com.bekvon.bukkit.residence.Placeholders.PlaceholderAPIHook; import com.bekvon.bukkit.residence.allNms.v1_10Events; @@ -122,14 +117,17 @@ import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.Sorting; import com.bekvon.bukkit.residence.utils.TabComplete; +import com.bekvon.bukkit.residence.utils.VersionChecker; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; - import com.earth2me.essentials.Essentials; import com.residence.mcstats.Metrics; import com.residence.zip.ZipLibrary; import fr.crafter.tickleman.realeconomy.RealEconomy; import fr.crafter.tickleman.realplugin.RealPlugin; +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Version.Version; /** * @@ -159,7 +157,6 @@ public class Residence extends JavaPlugin { protected ResidenceCommandListener commandManager; - protected BossBarManager BossBarManager; protected SpigotListener spigotlistener; protected ShopListener shlistener; @@ -291,12 +288,6 @@ public MarketBuyInterface getMarketBuyManagerAPI() { } - public BossBarManager getBossBarManager() { - if (BossBarManager == null) - BossBarManager = new BossBarManager(this); - return BossBarManager; - } - public ChatInterface getResidenceChatAPI() { if (ChatAPI == null) ChatAPI = chatmanager; diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 4657df21e..65da3f5ee 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -16,13 +16,14 @@ import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import com.bekvon.bukkit.residence.utils.Debug; + +import net.Zrips.CMILib.Logs.CMIDebug; +import net.Zrips.CMILib.RawMessages.RawMessage; public class ResidenceCommandListener implements CommandExecutor { @@ -62,7 +63,6 @@ public boolean onCommand(CommandSender sender, Command command, String label, St plugin.msg(sender, lm.General_DisabledWorld); return true; } - if (command.getName().equals("resreload") && args.length == 0) { if (sender instanceof Player) { Player player = (Player) sender; @@ -97,11 +97,11 @@ public boolean onCommand(CommandSender sender, Command command, String label, St sendUsage(sender, command.getName()); return true; } - + if (args.length == 1 && args[0].equals("?")) { - return commandHelp(new String[]{"rc", "?"}, false, sender, command); + return commandHelp(new String[] { "rc", "?" }, false, sender, command); } - + boolean respond = cmdClass.perform(Residence.getInstance(), sender, reduceArgs(args), false); if (!respond) sendUsage(sender, command.getName()); @@ -328,8 +328,10 @@ private boolean commandHelp(String[] args, boolean resadmin, CommandSender sende if (command.getName().equalsIgnoreCase("res")) resadmin = false; - if (plugin.getHelpPages().containesEntry(helppath)) + + if (plugin.getHelpPages().containesEntry(helppath)) { plugin.getHelpPages().printHelp(sender, page, helppath, resadmin); + } return true; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java index 6c18183a2..abdab727a 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java @@ -9,13 +9,14 @@ import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.event.block.BlockPhysicsEvent; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.Version; +import net.Zrips.CMILib.Version.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import net.Zrips.CMILib.Items.CMIMaterial; + public class v1_13Events implements Listener { Residence plugin; diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index e2339258d..79f997972 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -7,7 +7,7 @@ import org.bukkit.Server; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.CMIChatColor; +import net.Zrips.CMILib.Colors.CMIChatColor; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/commands/area.java b/src/com/bekvon/bukkit/residence/commands/area.java index ab20a2e6f..39e4ea892 100644 --- a/src/com/bekvon/bukkit/residence/commands/area.java +++ b/src/com/bekvon/bukkit/residence/commands/area.java @@ -5,7 +5,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -13,6 +12,8 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import net.Zrips.CMILib.FileHandler.ConfigReader; + public class area implements cmd { @Override @@ -127,7 +128,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); // Sub commands - c.setP(c.getPath() + "SubCommands."); + c.setFullPath(c.getPath() + "SubCommands."); c.get("list.Description", "List physical areas in a residence"); c.get("list.Info", Arrays.asList("&eUsage: &6/res area list [residence] ")); LocaleManager.addTabCompleteSub(this, "list", "[residence]"); diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 5cb224ce7..f8ca9416a 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -10,7 +10,7 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 05a83381e..ddcaf2cc7 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/check.java b/src/com/bekvon/bukkit/residence/commands/check.java index d5dfe79c3..25680e5b5 100644 --- a/src/com/bekvon/bukkit/residence/commands/check.java +++ b/src/com/bekvon/bukkit/residence/commands/check.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/clearflags.java b/src/com/bekvon/bukkit/residence/commands/clearflags.java index 5a04263b2..ff7a89eb4 100644 --- a/src/com/bekvon/bukkit/residence/commands/clearflags.java +++ b/src/com/bekvon/bukkit/residence/commands/clearflags.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/command.java b/src/com/bekvon/bukkit/residence/commands/command.java index 7849acf1a..5cd520ccd 100644 --- a/src/com/bekvon/bukkit/residence/commands/command.java +++ b/src/com/bekvon/bukkit/residence/commands/command.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index 0c488f731..5432410c5 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -6,7 +6,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 13c6622df..2eb07140a 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index b1c4abdc6..05a19391b 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/current.java b/src/com/bekvon/bukkit/residence/commands/current.java index 85e2ebfec..6a028a6b0 100644 --- a/src/com/bekvon/bukkit/residence/commands/current.java +++ b/src/com/bekvon/bukkit/residence/commands/current.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; diff --git a/src/com/bekvon/bukkit/residence/commands/defend.java b/src/com/bekvon/bukkit/residence/commands/defend.java index 1ed9131aa..4793ae423 100644 --- a/src/com/bekvon/bukkit/residence/commands/defend.java +++ b/src/com/bekvon/bukkit/residence/commands/defend.java @@ -10,8 +10,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; -import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; @@ -22,6 +20,9 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.raid.RaidDefender; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.RawMessages.RawMessage; + public class defend implements cmd { @Override diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index b997bddd2..c5a449c9b 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index aadce8adb..f3f3fdb5e 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -7,7 +7,7 @@ import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; diff --git a/src/com/bekvon/bukkit/residence/commands/give.java b/src/com/bekvon/bukkit/residence/commands/give.java index f022a66a5..82b751f97 100644 --- a/src/com/bekvon/bukkit/residence/commands/give.java +++ b/src/com/bekvon/bukkit/residence/commands/give.java @@ -5,8 +5,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; -import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -14,6 +12,9 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.RawMessages.RawMessage; + public class give implements cmd { @Override diff --git a/src/com/bekvon/bukkit/residence/commands/gset.java b/src/com/bekvon/bukkit/residence/commands/gset.java index 29d7b487c..2120a08df 100644 --- a/src/com/bekvon/bukkit/residence/commands/gset.java +++ b/src/com/bekvon/bukkit/residence/commands/gset.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 2d7aa9b09..5e4ba7f40 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -8,7 +8,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index ced6f4eff..4b691baaf 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -7,7 +7,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index d6515f279..f187043ae 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -7,7 +7,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -174,7 +174,7 @@ public void getLocale() { "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money.")); // Sub commands - c.setP(c.getPath()+"SubCommands."); + c.setFullPath(c.getPath()+"SubCommands."); c.get("set.Description", "Set the lease time"); c.get("set.Info", Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", "Sets the lease time to a specified number of days, or infinite.")); diff --git a/src/com/bekvon/bukkit/residence/commands/leaveraid.java b/src/com/bekvon/bukkit/residence/commands/leaveraid.java index 4ce5fb90e..c8b380d77 100644 --- a/src/com/bekvon/bukkit/residence/commands/leaveraid.java +++ b/src/com/bekvon/bukkit/residence/commands/leaveraid.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; diff --git a/src/com/bekvon/bukkit/residence/commands/limits.java b/src/com/bekvon/bukkit/residence/commands/limits.java index 80fa937b2..e6f1c14d4 100644 --- a/src/com/bekvon/bukkit/residence/commands/limits.java +++ b/src/com/bekvon/bukkit/residence/commands/limits.java @@ -6,7 +6,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 9bb87fa8a..9744f3e47 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -6,7 +6,7 @@ import org.bukkit.World; import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/listall.java b/src/com/bekvon/bukkit/residence/commands/listall.java index c7ee13000..8717d3ed6 100644 --- a/src/com/bekvon/bukkit/residence/commands/listall.java +++ b/src/com/bekvon/bukkit/residence/commands/listall.java @@ -7,7 +7,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/listallhidden.java b/src/com/bekvon/bukkit/residence/commands/listallhidden.java index 1eccf5916..5ef37d714 100644 --- a/src/com/bekvon/bukkit/residence/commands/listallhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listallhidden.java @@ -4,7 +4,7 @@ import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; diff --git a/src/com/bekvon/bukkit/residence/commands/listhidden.java b/src/com/bekvon/bukkit/residence/commands/listhidden.java index ad2d79763..a1c602b8a 100644 --- a/src/com/bekvon/bukkit/residence/commands/listhidden.java +++ b/src/com/bekvon/bukkit/residence/commands/listhidden.java @@ -4,7 +4,7 @@ import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/lists.java b/src/com/bekvon/bukkit/residence/commands/lists.java index 5548c6e52..2ee408386 100644 --- a/src/com/bekvon/bukkit/residence/commands/lists.java +++ b/src/com/bekvon/bukkit/residence/commands/lists.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -71,7 +71,7 @@ public void getLocale() { c.get("Description", "Predefined permission lists"); c.get("Info", Arrays.asList("Predefined permissions that can be applied to a residence.")); - c.setP(c.getPath() + "SubCommands."); + c.setFullPath(c.getPath() + "SubCommands."); c.get("add.Description", "Add a list"); c.get("add.Info", Arrays.asList("&eUsage: &6/res lists add ")); LocaleManager.addTabCompleteSub(this, "add"); diff --git a/src/com/bekvon/bukkit/residence/commands/lset.java b/src/com/bekvon/bukkit/residence/commands/lset.java index 933fb4c61..ff71be38a 100644 --- a/src/com/bekvon/bukkit/residence/commands/lset.java +++ b/src/com/bekvon/bukkit/residence/commands/lset.java @@ -6,7 +6,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 04836cf1c..d737ee79b 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -9,7 +9,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -414,7 +414,7 @@ public void getLocale() { c.get("Description", "Buy, Sell, or Rent Residences"); c.get("Info", Arrays.asList("&eUsage: &6/res market ? for more Info")); - c.setP(c.getPath() + "SubCommands."); + c.setFullPath(c.getPath() + "SubCommands."); c.get("Info.Description", "Get economy Info on residence"); c.get("Info.Info", Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost.")); diff --git a/src/com/bekvon/bukkit/residence/commands/material.java b/src/com/bekvon/bukkit/residence/commands/material.java index 130b36483..0ed347bff 100644 --- a/src/com/bekvon/bukkit/residence/commands/material.java +++ b/src/com/bekvon/bukkit/residence/commands/material.java @@ -5,8 +5,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 333cc704d..88c8ae1f3 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/mirror.java b/src/com/bekvon/bukkit/residence/commands/mirror.java index 3a2c19f97..2288f16c8 100644 --- a/src/com/bekvon/bukkit/residence/commands/mirror.java +++ b/src/com/bekvon/bukkit/residence/commands/mirror.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/padd.java b/src/com/bekvon/bukkit/residence/commands/padd.java index 6346f8761..5b2546c87 100644 --- a/src/com/bekvon/bukkit/residence/commands/padd.java +++ b/src/com/bekvon/bukkit/residence/commands/padd.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index acf7b88f1..a7f8918ba 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -6,7 +6,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index 0396b18b8..c0aafdc6d 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/raid.java b/src/com/bekvon/bukkit/residence/commands/raid.java index 3f690646b..1251e9dad 100644 --- a/src/com/bekvon/bukkit/residence/commands/raid.java +++ b/src/com/bekvon/bukkit/residence/commands/raid.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; diff --git a/src/com/bekvon/bukkit/residence/commands/raidstatus.java b/src/com/bekvon/bukkit/residence/commands/raidstatus.java index b4ea88aca..d80f869a4 100644 --- a/src/com/bekvon/bukkit/residence/commands/raidstatus.java +++ b/src/com/bekvon/bukkit/residence/commands/raidstatus.java @@ -8,8 +8,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; -import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; @@ -23,6 +21,9 @@ import com.bekvon.bukkit.residence.raid.ResidenceRaid; import com.bekvon.bukkit.residence.utils.Utils; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.RawMessages.RawMessage; + public class raidstatus implements cmd { @Override diff --git a/src/com/bekvon/bukkit/residence/commands/rc.java b/src/com/bekvon/bukkit/residence/commands/rc.java index 5be6fa719..aedd209a7 100644 --- a/src/com/bekvon/bukkit/residence/commands/rc.java +++ b/src/com/bekvon/bukkit/residence/commands/rc.java @@ -5,8 +5,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; @@ -197,7 +197,7 @@ public void getLocale() { c.get("Info", Arrays.asList("&eUsage: &6/res rc (residence)", "Join residence chat channel.")); LocaleManager.addTabCompleteMain(this, "[residence]"); - c.setP(c.getPath() + "SubCommands."); + c.setFullPath(c.getPath() + "SubCommands."); c.get("leave.Description", "Leaves current residence chat channel"); c.get("leave.Info", Arrays.asList("&eUsage: &6/res rc leave", "If you are in residence chat channel then you will leave it")); LocaleManager.addTabCompleteSub(this, "leave"); diff --git a/src/com/bekvon/bukkit/residence/commands/reload.java b/src/com/bekvon/bukkit/residence/commands/reload.java index 625f8e86e..dd4d029d7 100644 --- a/src/com/bekvon/bukkit/residence/commands/reload.java +++ b/src/com/bekvon/bukkit/residence/commands/reload.java @@ -4,7 +4,7 @@ import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 2d6e19d66..079ae8a85 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -5,8 +5,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; -import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -17,6 +15,9 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.RawMessages.RawMessage; + public class remove implements cmd { @Override diff --git a/src/com/bekvon/bukkit/residence/commands/removeall.java b/src/com/bekvon/bukkit/residence/commands/removeall.java index d426c8cd8..b7fc58949 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeall.java +++ b/src/com/bekvon/bukkit/residence/commands/removeall.java @@ -4,7 +4,7 @@ import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index 564ea1605..c38fdbdb8 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -7,7 +7,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/rename.java b/src/com/bekvon/bukkit/residence/commands/rename.java index 44492f6d1..277a80d34 100644 --- a/src/com/bekvon/bukkit/residence/commands/rename.java +++ b/src/com/bekvon/bukkit/residence/commands/rename.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/renamearea.java b/src/com/bekvon/bukkit/residence/commands/renamearea.java index 4093a66c6..e500083b3 100644 --- a/src/com/bekvon/bukkit/residence/commands/renamearea.java +++ b/src/com/bekvon/bukkit/residence/commands/renamearea.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/resadmin.java b/src/com/bekvon/bukkit/residence/commands/resadmin.java index 1fe1c0e55..bb382bddd 100644 --- a/src/com/bekvon/bukkit/residence/commands/resadmin.java +++ b/src/com/bekvon/bukkit/residence/commands/resadmin.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/reset.java b/src/com/bekvon/bukkit/residence/commands/reset.java index 39f242ba4..08d96e59d 100644 --- a/src/com/bekvon/bukkit/residence/commands/reset.java +++ b/src/com/bekvon/bukkit/residence/commands/reset.java @@ -7,7 +7,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index a3780cf2a..b2e25e3c6 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -8,7 +8,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 1c5d8aa22..16e3472e9 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -9,7 +9,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -205,7 +205,7 @@ public void getLocale() { LocaleManager.addTabCompleteSub(this, "[x]", "[y]", "[z]"); // Sub commands - c.setP(c.getPath() + "SubCommands."); + c.setFullPath(c.getPath() + "SubCommands."); c.get("coords.Description", "Display selected coordinates"); c.get("coords.Info", Arrays.asList("&eUsage: &6/res select coords")); diff --git a/src/com/bekvon/bukkit/residence/commands/server.java b/src/com/bekvon/bukkit/residence/commands/server.java index 3ff35f427..e08988ba9 100644 --- a/src/com/bekvon/bukkit/residence/commands/server.java +++ b/src/com/bekvon/bukkit/residence/commands/server.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/set.java b/src/com/bekvon/bukkit/residence/commands/set.java index 9f0af26eb..d52ab4e89 100644 --- a/src/com/bekvon/bukkit/residence/commands/set.java +++ b/src/com/bekvon/bukkit/residence/commands/set.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/setall.java b/src/com/bekvon/bukkit/residence/commands/setall.java index 29bea0877..f5c1430af 100644 --- a/src/com/bekvon/bukkit/residence/commands/setall.java +++ b/src/com/bekvon/bukkit/residence/commands/setall.java @@ -6,7 +6,7 @@ import org.bukkit.World; import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/setallfor.java b/src/com/bekvon/bukkit/residence/commands/setallfor.java index 54084cb63..1f8a40f88 100644 --- a/src/com/bekvon/bukkit/residence/commands/setallfor.java +++ b/src/com/bekvon/bukkit/residence/commands/setallfor.java @@ -4,7 +4,7 @@ import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/setmain.java b/src/com/bekvon/bukkit/residence/commands/setmain.java index 269a29435..b916e26be 100644 --- a/src/com/bekvon/bukkit/residence/commands/setmain.java +++ b/src/com/bekvon/bukkit/residence/commands/setmain.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index 4eb2e0970..e9bb18b68 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -4,7 +4,7 @@ import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index ce5958527..b90d3f451 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -12,9 +12,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.ConfigReader; -import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -28,6 +25,10 @@ import com.bekvon.bukkit.residence.shopStuff.Vote; import com.bekvon.bukkit.residence.text.help.PageInfo; +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.RawMessages.RawMessage; + public class shop implements cmd { @Override @@ -413,7 +414,7 @@ public void getLocale() { c.get("Info", Arrays.asList("Manages residence shop feature")); // Sub commands - c.setP(c.getPath() + "SubCommands."); + c.setFullPath(c.getPath() + "SubCommands."); c.get("list.Description", "Shows list of res shops"); c.get("list.Info", Arrays.asList("&eUsage: &6/res shop list", "Shows full list of all residences with shop flag")); diff --git a/src/com/bekvon/bukkit/residence/commands/show.java b/src/com/bekvon/bukkit/residence/commands/show.java index bba1e9f61..4ac14156e 100644 --- a/src/com/bekvon/bukkit/residence/commands/show.java +++ b/src/com/bekvon/bukkit/residence/commands/show.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/signconvert.java b/src/com/bekvon/bukkit/residence/commands/signconvert.java index 99700e85a..254a69bf2 100644 --- a/src/com/bekvon/bukkit/residence/commands/signconvert.java +++ b/src/com/bekvon/bukkit/residence/commands/signconvert.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; diff --git a/src/com/bekvon/bukkit/residence/commands/signupdate.java b/src/com/bekvon/bukkit/residence/commands/signupdate.java index 75498b1b3..0171d256d 100644 --- a/src/com/bekvon/bukkit/residence/commands/signupdate.java +++ b/src/com/bekvon/bukkit/residence/commands/signupdate.java @@ -4,7 +4,7 @@ import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; diff --git a/src/com/bekvon/bukkit/residence/commands/sublist.java b/src/com/bekvon/bukkit/residence/commands/sublist.java index fa4e399b7..f5d2ceba4 100644 --- a/src/com/bekvon/bukkit/residence/commands/sublist.java +++ b/src/com/bekvon/bukkit/residence/commands/sublist.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/subzone.java b/src/com/bekvon/bukkit/residence/commands/subzone.java index 39d22963a..1e5521107 100644 --- a/src/com/bekvon/bukkit/residence/commands/subzone.java +++ b/src/com/bekvon/bukkit/residence/commands/subzone.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index df59dded1..716bb3099 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -4,7 +4,7 @@ import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index e52dea2db..7ea5ddfdc 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java index c64aa2b92..a152304f8 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java +++ b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; diff --git a/src/com/bekvon/bukkit/residence/commands/tpset.java b/src/com/bekvon/bukkit/residence/commands/tpset.java index 5bd9253a4..bb79bed04 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpset.java +++ b/src/com/bekvon/bukkit/residence/commands/tpset.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index b5dbebc0f..29cb62ce8 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; diff --git a/src/com/bekvon/bukkit/residence/commands/version.java b/src/com/bekvon/bukkit/residence/commands/version.java index 39fff3770..239431b05 100644 --- a/src/com/bekvon/bukkit/residence/commands/version.java +++ b/src/com/bekvon/bukkit/residence/commands/version.java @@ -5,7 +5,7 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; -import com.bekvon.bukkit.cmiLib.ConfigReader; +import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 43589e885..c0f5a6aa4 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -3,7 +3,8 @@ import java.util.HashSet; import java.util.Set; -import com.bekvon.bukkit.cmiLib.CMIMaterial; +import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; public enum Flags { anvil(CMIMaterial.ANVIL, FlagMode.Both, "Allows or denys interaction with anvil", true), @@ -166,7 +167,7 @@ public FlagMode getFlagMode() { } public String getDesc() { - return desc; + return this.desc; } public void setDesc(String desc) { diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index fb6e44d1f..ce7b7d865 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -1,11 +1,9 @@ package com.bekvon.bukkit.residence.containers; import java.util.ArrayList; -import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; -import java.util.Map.Entry; import java.util.Set; import java.util.UUID; @@ -17,7 +15,6 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.BossBar.BossBarInfo; import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener; import com.bekvon.bukkit.residence.permissions.PermissionGroup; @@ -361,82 +358,6 @@ public Player getPlayer() { return player; } - HashMap barMap = new HashMap(); - - public void removeBossBar(BossBarInfo bossBar) { - if (bossBar == null) - return; - if (bossBar.getBar() != null) - bossBar.getBar().setVisible(false); - bossBar.cancelAutoScheduler(); - bossBar.cancelHideScheduler(); - barMap.remove(bossBar.getNameOfBar().toLowerCase()); - } - - public void addBossBar(BossBarInfo barInfo) { - - if (!barMap.containsKey(barInfo.getNameOfBar().toLowerCase())) { - barMap.put(barInfo.getNameOfBar().toLowerCase(), barInfo); - Residence.getInstance().getBossBarManager().showBar(barInfo); - } else { - BossBarInfo old = getBossBar(barInfo.getNameOfBar().toLowerCase()); - if (old != null) { - - if (barInfo.getColor() != null) - old.setColor(barInfo.getColor()); - - if (barInfo.getKeepFor() != null) - old.setKeepForTicks(barInfo.getKeepFor()); - - if (barInfo.getPercentage() != null) - old.setPercentage(barInfo.getPercentage()); - - if (barInfo.getUser() != null) - old.setUser(barInfo.getUser()); - - if (barInfo.getAdjustPerc() != null) - old.setAdjustPerc(barInfo.getAdjustPerc()); - - if (barInfo.getStyle() != null) - old.setStyle(barInfo.getStyle()); - - if (!barInfo.getTitleOfBar().isEmpty()) - old.setTitleOfBar(barInfo.getTitleOfBar()); - - if (barInfo.getBar() != null) - old.setBar(barInfo.getBar()); - - if (barInfo.getId() != null) - old.setId(barInfo.getId()); - - if (barInfo.getAuto() != null) - old.setAuto(barInfo.getAuto()); - } - Residence.getInstance().getBossBarManager().showBar(old); - } - } - - public BossBarInfo getBossBar(String name) { - return barMap.get(name.toLowerCase()); - } - - public synchronized HashMap getBossBarInfo() { - return this.barMap; - } - - public synchronized void hideBossBars() { - for (Entry one : this.barMap.entrySet()) { - one.getValue().getBar().setVisible(false); - } - } - - public void clearBossMaps() { - for (Entry one : barMap.entrySet()) { - one.getValue().cancelHideScheduler(); - } - barMap.clear(); - } - public ClaimedResidence getCurrentlyRaidedResidence() { for (ClaimedResidence one : getResList()) { if (one.getRaid().isUnderRaid() || one.getRaid().isInPreRaid()) { diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index ace6ef074..3c0567541 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -12,7 +12,7 @@ import org.dynmap.markers.MarkerAPI; import org.dynmap.markers.MarkerSet; -import com.bekvon.bukkit.cmiLib.CMIChatColor; +import net.Zrips.CMILib.Colors.CMIChatColor; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.TransactionManager; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index c123c2b1a..fe717e0fc 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -13,7 +13,6 @@ import org.bukkit.World; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.MarketRentInterface; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -29,6 +28,8 @@ import com.bekvon.bukkit.residence.text.help.PageInfo; import com.bekvon.bukkit.residence.utils.GetTime; +import net.Zrips.CMILib.RawMessages.RawMessage; + public class RentManager implements MarketRentInterface { private Set rentedLand; private Set rentableLand; diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java index 1989b7dac..86df4a776 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceChatEvent.java @@ -3,7 +3,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; -import com.bekvon.bukkit.cmiLib.CMIChatColor; +import net.Zrips.CMILib.Colors.CMIChatColor; import com.bekvon.bukkit.residence.protection.ClaimedResidence; public class ResidenceChatEvent extends CancellableResidencePlayerEvent { diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 89d94f543..abfbe0557 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -2,22 +2,22 @@ import java.util.Set; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.CMIGUI.CMIGui; -import com.bekvon.bukkit.CMIGUI.CMIGuiButton; -import com.bekvon.bukkit.CMIGUI.GUIManager.GUIClickType; -import com.bekvon.bukkit.CMIGUI.GUIManager.GUIRows; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.ConfigReader; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.text.help.PageInfo; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.GUI.CMIGui; +import net.Zrips.CMILib.GUI.CMIGuiButton; +import net.Zrips.CMILib.GUI.GUIManager.GUIClickType; +import net.Zrips.CMILib.GUI.GUIManager.GUIRows; +import net.Zrips.CMILib.Items.CMIMaterial; + public class FlagUtil { private FlagData flagData = new FlagData(); @@ -30,7 +30,7 @@ public FlagUtil(Residence plugin) { public void load() { ConfigReader c = null; try { - c = new ConfigReader("flags.yml"); + c = new ConfigReader(Residence.getInstance(), "flags.yml"); } catch (Exception e1) { e1.printStackTrace(); } diff --git a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java index f725b17a6..b51f3587b 100644 --- a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java +++ b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java @@ -15,8 +15,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import com.bekvon.bukkit.CMIGUI.CMIGuiButton; -import com.bekvon.bukkit.CMIGUI.GUIManager.GUIClickType; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; @@ -26,6 +24,10 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.protection.ResidencePermissions; +import net.Zrips.CMILib.GUI.CMIGuiButton; +import net.Zrips.CMILib.GUI.GUIManager.GUIClickType; +import net.Zrips.CMILib.Logs.CMIDebug; + public class setFlagInfo { private ClaimedResidence residence; @@ -71,15 +73,16 @@ private void fillFlagDescriptions() { List lore = new ArrayList(); int i = 0; String sentence = ""; - for (String oneWord : flag.getDesc().split(" ")) { - sentence += oneWord + " "; - if (i > 4) { - lore.add(ChatColor.YELLOW + sentence); - sentence = ""; - i = 0; + + for (String oneWord : flag.getDesc().split(" ")) { + sentence += oneWord + " "; + if (i > 4) { + lore.add(ChatColor.YELLOW + sentence); + sentence = ""; + i = 0; + } + i++; } - i++; - } lore.add(ChatColor.YELLOW + sentence); description.put(flag, lore); } @@ -327,15 +330,14 @@ else if (fp.has(flagName, FlagCombo.OnlyFalse)) } else miscInfo.removeEnchantment(Enchantment.LUCK); - Flags flag = Flags.getFlag(flagName); if (flag != null) flagName = flag.getName(); if (flagName == null) flagName = "Unknown"; - + ItemMeta MiscInfoMeta = miscInfo.getItemMeta(); - + // Can it be null? if (MiscInfoMeta == null) return miscInfo; diff --git a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java index b502ab3ad..2d8c947fc 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/ItemList.java +++ b/src/com/bekvon/bukkit/residence/itemlist/ItemList.java @@ -10,7 +10,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.CMIMaterial; +import net.Zrips.CMILib.Items.CMIMaterial; public class ItemList { diff --git a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java index 7736eb629..8c133a0fb 100644 --- a/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java +++ b/src/com/bekvon/bukkit/residence/itemlist/WorldItemManager.java @@ -9,7 +9,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import com.bekvon.bukkit.cmiLib.CMIMaterial; +import net.Zrips.CMILib.Items.CMIMaterial; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 1fd55c7c5..137a21d2b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -43,10 +43,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; -import com.bekvon.bukkit.cmiLib.ActionBarManager; -import com.bekvon.bukkit.cmiLib.CMIBlock; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.Version; +import com.Zrips.CMI.Modules.ActionBar.ActionBarManager; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.commands.auto.direction; @@ -61,6 +58,11 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.Utils; +import net.Zrips.CMILib.ActionBar.CMIActionBar; +import net.Zrips.CMILib.Container.CMIBlock; +import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Version.Version; + public class ResidenceBlockListener implements Listener { private List MessageInformed = new ArrayList(); @@ -457,7 +459,7 @@ public void onChestPlaceNearResidence(BlockPlaceEvent event) { } if (cancel) { - ActionBarManager.send(player, plugin.msg(lm.General_CantPlaceChest)); + CMIActionBar.send(player, plugin.msg(lm.General_CantPlaceChest)); event.setCancelled(true); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 015a15fda..c2b54d60b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -56,9 +56,7 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; -import com.bekvon.bukkit.cmiLib.ActionBarManager; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.Version; +import com.Zrips.CMI.Modules.ActionBar.ActionBarManager; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -69,6 +67,10 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.Utils; +import net.Zrips.CMILib.ActionBar.CMIActionBar; +import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Version.Version; + public class ResidenceEntityListener implements Listener { Residence plugin; @@ -1062,7 +1064,7 @@ public void onSplashPotion(PotionSplashEvent event) { ClaimedResidence srcarea = plugin.getResidenceManager().getByLoc(attacker.getLocation()); if (srcarea != null && area != null && srcarea.equals(area) && srcarea.getPermissions().playerHas((Player) target, Flags.friendlyfire, FlagCombo.OnlyFalse) && srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { - ActionBarManager.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); + CMIActionBar.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); event.setIntensity(target, 0); } } @@ -1434,7 +1436,7 @@ public static boolean canDamageEntity(Entity damager, Entity victim, boolean inf srcarea.getPermissions().playerHas((Player) victim, Flags.friendlyfire, FlagCombo.OnlyFalse) && srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { - ActionBarManager.send(attacker, Residence.getInstance().getLM().getMessage(lm.General_NoFriendlyFire)); + CMIActionBar.send(attacker, Residence.getInstance().getLM().getMessage(lm.General_NoFriendlyFire)); if (isOnFire) victim.setFireTicks(0); return false; @@ -1572,7 +1574,7 @@ public void onEntityDamage(EntityDamageEvent event) { srcarea.getPermissions().playerHas((Player) ent, Flags.friendlyfire, FlagCombo.OnlyFalse) && srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { - ActionBarManager.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); + CMIActionBar.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); if (isOnFire) ent.setFireTicks(0); event.setCancelled(true); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java index d3e827908..8bb3a06d4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceFixesListener.java @@ -11,7 +11,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.cmiLib.CMIMaterial; +import net.Zrips.CMILib.Items.CMIMaterial; import com.bekvon.bukkit.residence.Residence; public class ResidenceFixesListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java index a5979aa51..b370759d2 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java @@ -13,8 +13,6 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -import com.bekvon.bukkit.cmiLib.CMILocation; -import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; @@ -40,6 +38,9 @@ import com.griefcraft.scripting.event.LWCReloadEvent; import com.griefcraft.scripting.event.LWCSendLocaleEvent; +import net.Zrips.CMILib.Container.CMILocation; +import net.Zrips.CMILib.Version.Version; + public class ResidenceLWCListener implements com.griefcraft.scripting.Module { public static void register(Plugin plugin) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index a8b13ab42..94a81a848 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -52,12 +52,6 @@ import org.bukkit.event.vehicle.VehicleMoveEvent; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.cmiLib.ActionBarManager; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.CMIReflections; -import com.bekvon.bukkit.cmiLib.TitleMessageManager; -import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; @@ -80,10 +74,16 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.Utils; +import net.Zrips.CMILib.CMILib; +import net.Zrips.CMILib.ActionBar.CMIActionBar; +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.TitleMessages.CMITitleMessage; +import net.Zrips.CMILib.Version.Version; + public class ResidencePlayerListener implements Listener { protected Map currentRes; @@ -1513,7 +1513,7 @@ public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { return; if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.dye, FlagCombo.OnlyFalse)) { ItemStack iih = Utils.itemInMainHand(player); - ItemStack iiho = CMIReflections.getItemInOffHand(player); + ItemStack iiho = CMILib.getInstance().getReflectionManager().getItemInOffHand(player); if (iih == null && iiho == null) return; if (iih != null && !CMIMaterial.isDye(iih.getType()) && iiho != null && !CMIMaterial.isDye(iiho.getType())) @@ -1547,7 +1547,7 @@ public void onPlayerShearEntity(PlayerShearEntityEvent event) { if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.shear, FlagCombo.OnlyFalse)) { ItemStack iih = Utils.itemInMainHand(player); - ItemStack iiho = CMIReflections.getItemInOffHand(player); + ItemStack iiho = CMILib.getInstance().getReflectionManager().getItemInOffHand(player); if (iih == null && iiho == null) return; if (iih != null && !CMIMaterial.SHEARS.equals(iih.getType()) && iiho != null && !CMIMaterial.SHEARS.equals(iiho.getType())) @@ -2019,7 +2019,7 @@ public void onPlayerMove(PlayerMoveEvent event) { plugin.getTeleportDelayMap().remove(player.getName()); plugin.msg(player, lm.General_TeleportCanceled); if (plugin.getConfigManager().isTeleportTitleMessage()) - TitleMessageManager.send(player, "", ""); + CMITitleMessage.send(player, "", ""); } } @@ -2072,7 +2072,7 @@ public void onPlayerMoveInVehicle(VehicleMoveEvent event) { plugin.getTeleportDelayMap().remove(player.getName()); plugin.msg(player, lm.General_TeleportCanceled); if (plugin.getConfigManager().isTeleportTitleMessage()) - TitleMessageManager.send(player, "", ""); + CMITitleMessage.send(player, "", ""); } } } @@ -2224,7 +2224,7 @@ public void run() { case TitleBar: FlagPermissions perms = res.getPermissions(); if (perms.has(Flags.title, FlagCombo.TrueOrNone)) - ActionBarManager.send(player, plugin.msg(lm.Raid_cantDo)); + CMIActionBar.send(player, plugin.msg(lm.Raid_cantDo)); break; case ChatBox: plugin.msg(player, lm.Raid_cantDo, orres.getName()); @@ -2279,7 +2279,7 @@ public void run() { case TitleBar: FlagPermissions perms = res.getPermissions(); if (perms.has(Flags.title, FlagCombo.TrueOrNone)) - ActionBarManager.send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); + CMIActionBar.send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); break; case ChatBox: plugin.msg(player, lm.Residence_MoveDeny, orres.getName()); @@ -2379,7 +2379,7 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { if (res.getPermissions().has(Flags.title, FlagCombo.TrueOrNone)) switch (plugin.getConfigManager().getEnterLeaveMessageType()) { case ActionBar: - ActionBarManager.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) + CMIActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) .toString()); break; case ChatBox: @@ -2392,7 +2392,7 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { subtitle = ChatColor.YELLOW + title.split("\\\\n", 2)[1]; title = title.split("\\\\n", 2)[0]; } - TitleMessageManager.send(player, title, subtitle); + CMITitleMessage.send(player, title, subtitle); break; default: break; @@ -2414,10 +2414,10 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { if (plugin.getRentManager().isForRent(from) && !plugin.getRentManager().isRented(from)) { RentableLand rentable = plugin.getRentManager().getRentableLand(from); if (rentable != null) - ActionBarManager.send(player, plugin.msg(lm.Residence_CanBeRented, from.getName(), rentable.cost, rentable.days)); + CMIActionBar.send(player, plugin.msg(lm.Residence_CanBeRented, from.getName(), rentable.cost, rentable.days)); } else if (plugin.getTransactionManager().isForSale(from) && !res.isOwner(player)) { int sale = plugin.getTransactionManager().getSaleAmount(from); - ActionBarManager.send(player, plugin.msg(lm.Residence_CanBeBought, from.getName(), sale)); + CMIActionBar.send(player, plugin.msg(lm.Residence_CanBeBought, from.getName(), sale)); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_15.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_15.java index dd17a69d6..37f270571 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_15.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_15.java @@ -10,14 +10,15 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.CMIReflections; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import net.Zrips.CMILib.CMILib; +import net.Zrips.CMILib.Items.CMIMaterial; + public class ResidencePlayerListener1_15 implements Listener { private Residence plugin; @@ -53,7 +54,7 @@ public void onPlayerInteractBeeHive(PlayerInteractEvent event) { CMIMaterial heldItem = CMIMaterial.get(iih); if (heldItem.equals(CMIMaterial.GLASS_BOTTLE)) { - if (CMIReflections.getHoneyLevel(block) < CMIReflections.getMaxHoneyLevel(block)) { + if (CMILib.getInstance().getReflectionManager().getHoneyLevel(block) < CMILib.getInstance().getReflectionManager().getMaxHoneyLevel(block)) { return; } ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); @@ -67,7 +68,7 @@ public void onPlayerInteractBeeHive(PlayerInteractEvent event) { } if (heldItem.equals(CMIMaterial.SHEARS)) { - if (CMIReflections.getHoneyLevel(block) < CMIReflections.getMaxHoneyLevel(block)) { + if (CMILib.getInstance().getReflectionManager().getHoneyLevel(block) < CMILib.getInstance().getReflectionManager().getMaxHoneyLevel(block)) { return; } ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java index 054151d00..bb74168d6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java @@ -10,7 +10,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; -import com.bekvon.bukkit.cmiLib.Version; +import net.Zrips.CMILib.Version.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 993c59087..716593699 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -26,7 +26,6 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; -import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.PlayerGroup; @@ -34,6 +33,8 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; +import net.Zrips.CMILib.RawMessages.RawMessage; + public class PermissionManager { protected static PermissionsInterface perms; protected LinkedHashMap groups; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 3acb803a4..a726b5e86 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -26,10 +26,7 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.RawMessage; -import com.bekvon.bukkit.cmiLib.TitleMessageManager; +import com.Zrips.CMI.Modules.TitleMessages.TitleMessageManager; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; @@ -59,9 +56,13 @@ import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.text.help.PageInfo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.Utils; +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.RawMessages.RawMessage; +import net.Zrips.CMILib.TitleMessages.CMITitleMessage; + public class ClaimedResidence { private String resName = null; @@ -1389,7 +1390,7 @@ else if (distance == 255) } public void TpTimer(final Player player, final int t) { - TitleMessageManager.send(player, Residence.getInstance().msg(lm.General_TeleportTitle), + CMITitleMessage.send(player, Residence.getInstance().msg(lm.General_TeleportTitle), Residence.getInstance().msg(lm.General_TeleportTitleTime, t)); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { @Override diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 3ad0bf723..a14a9d46c 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -21,9 +21,6 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeFlags; @@ -32,6 +29,10 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.RawMessages.RawMessage; + public class FlagPermissions { protected static ArrayList validFlags = new ArrayList<>(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 23bb47234..7b93dd163 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -22,14 +22,10 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; -import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.RawMessage; -import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.api.ResidenceInterface; import com.bekvon.bukkit.residence.containers.Flags; @@ -48,9 +44,12 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import com.bekvon.bukkit.residence.utils.Debug; import com.bekvon.bukkit.residence.utils.GetTime; +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.RawMessages.RawMessage; +import net.Zrips.CMILib.Version.Version; + public class ResidenceManager implements ResidenceInterface { protected SortedMap residences; protected Map>> chunkResidences; diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java index e39f45bd0..3fcae14d3 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -12,7 +12,6 @@ import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.BossBar.BossBarInfo; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.event.ResidenceRaidEndEvent; @@ -20,6 +19,9 @@ import com.bekvon.bukkit.residence.event.ResidenceRaidStartEvent; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import net.Zrips.CMILib.CMILib; +import net.Zrips.CMILib.BossBar.BossBarInfo; + public class ResidenceRaid { private ClaimedResidence res; @@ -186,9 +188,9 @@ public void showBossBar() { } private void showBossbar(ResidencePlayer rPlayer, BarColor color, lm msg) { - BossBarInfo barInfo = rPlayer.getBossBar(isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent); + BossBarInfo barInfo = CMILib.getInstance().getBossBarManager().getBossBar(rPlayer.getPlayer(), isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent); if (barInfo == null) { - barInfo = new BossBarInfo(rPlayer, isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent) { + barInfo = new BossBarInfo(rPlayer.getPlayer(), isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent) { @Override public void updateCycle() { setTitleOfBar(Residence.getInstance().msg(msg, getDefenders().size(), getAttackers().size())); @@ -203,7 +205,7 @@ public void updateCycle() { barInfo.setStyle(BarStyle.SEGMENTED_20); barInfo.setAuto(20); - rPlayer.addBossBar(barInfo); + CMILib.getInstance().getBossBarManager().addBossBar(rPlayer.getPlayer(), barInfo); } } @@ -221,7 +223,7 @@ public void endRaid() { Bukkit.getScheduler().cancelTask(this.shedRaidStartId); this.shedRaidStartId = -1; } - + if (this.schedBossBarId > 0) { Bukkit.getScheduler().cancelTask(this.schedBossBarId); this.schedBossBarId = -1; @@ -243,17 +245,17 @@ public void endRaid() { ResidencePlayer RPlayer = one.getValue().getPlayer(); if (RPlayer != null) { RPlayer.setLastRaidAttackTimer(System.currentTimeMillis()); - BossBarInfo barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarRaidIdent); + BossBarInfo barInfo = CMILib.getInstance().getBossBarManager().getBossBar(RPlayer.getPlayer(), ResidenceRaid.bossBarRaidIdent); if (barInfo != null) { barInfo.cancelAutoScheduler(); barInfo.remove(); - RPlayer.removeBossBar(barInfo); + CMILib.getInstance().getBossBarManager().removeBossBar(RPlayer.getPlayer(), barInfo); } - barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarPreRaidIdent); + barInfo = CMILib.getInstance().getBossBarManager().getBossBar(RPlayer.getPlayer(), ResidenceRaid.bossBarPreRaidIdent); if (barInfo != null) { barInfo.cancelAutoScheduler(); barInfo.remove(); - RPlayer.removeBossBar(barInfo); + CMILib.getInstance().getBossBarManager().removeBossBar(RPlayer.getPlayer(), barInfo); } } } @@ -261,17 +263,17 @@ public void endRaid() { for (Entry one : getDefenders().entrySet()) { ResidencePlayer RPlayer = one.getValue().getPlayer(); if (RPlayer != null) { - BossBarInfo barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarRaidIdent); + BossBarInfo barInfo = CMILib.getInstance().getBossBarManager().getBossBar(RPlayer.getPlayer(), ResidenceRaid.bossBarRaidIdent); if (barInfo != null) { barInfo.cancelAutoScheduler(); barInfo.remove(); - RPlayer.removeBossBar(barInfo); + CMILib.getInstance().getBossBarManager().removeBossBar(RPlayer.getPlayer(), barInfo); } - barInfo = RPlayer.getBossBar(ResidenceRaid.bossBarPreRaidIdent); + barInfo = CMILib.getInstance().getBossBarManager().getBossBar(RPlayer.getPlayer(), ResidenceRaid.bossBarPreRaidIdent); if (barInfo != null) { barInfo.cancelAutoScheduler(); barInfo.remove(); - RPlayer.removeBossBar(barInfo); + CMILib.getInstance().getBossBarManager().removeBossBar(RPlayer.getPlayer(), barInfo); } } } @@ -337,7 +339,6 @@ public boolean preStartRaid(Player attacker) { return true; } - public boolean startRaid() { if (!isUnderRaid() && !this.isInPreRaid()) diff --git a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java index cadd83eb7..7498069b0 100644 --- a/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SchematicsManager.java @@ -7,7 +7,7 @@ import org.bukkit.Location; import org.bukkit.World; -import com.bekvon.bukkit.cmiLib.Version; +import net.Zrips.CMILib.Version.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 1dea51a30..fe6b26010 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -19,10 +19,6 @@ import org.bukkit.permissions.PermissionDefault; import org.bukkit.util.Vector; -import com.bekvon.bukkit.cmiLib.ActionBarManager; -import com.bekvon.bukkit.cmiLib.CMIEffect; -import com.bekvon.bukkit.cmiLib.CMIEffectManager.CMIParticle; -import com.bekvon.bukkit.cmiLib.CMIReflections; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.SelectionSides; @@ -33,6 +29,11 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import net.Zrips.CMILib.CMILib; +import net.Zrips.CMILib.ActionBar.CMIActionBar; +import net.Zrips.CMILib.Effects.CMIEffect; +import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; + public class SelectionManager { protected Map selections; protected Server server; @@ -472,7 +473,7 @@ public void showSelectionInfoInActionBar(Player player) { if (plugin.getConfigManager().enableEconomy()) Message += " " + plugin.msg(lm.General_LandCost, cuboidArea.getCost(group)); - ActionBarManager.send(player, Message); + CMIActionBar.send(player, Message); } @@ -836,7 +837,7 @@ private void showParticles(List locList, Player player, int timesMore, CMIEffect ef = new CMIEffect(effect); - CMIReflections.playEffect(player, l, ef); + CMILib.getInstance().getReflectionManager().playEffect(player, l, ef); } } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 60f54cf09..04aae00ad 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -21,7 +21,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; -import com.bekvon.bukkit.cmiLib.CMIMaterial; +import net.Zrips.CMILib.Items.CMIMaterial; import com.bekvon.bukkit.residence.CommentedYamlConfiguration; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index e8ed9ef27..c33db8a22 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -10,7 +10,7 @@ import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; -import com.bekvon.bukkit.cmiLib.CMIChatColor; +import net.Zrips.CMILib.Colors.CMIChatColor; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 53ee40f07..cad9ca070 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -17,9 +17,6 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.RawMessage; -import com.bekvon.bukkit.cmiLib.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.commands.pset; @@ -32,6 +29,11 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Logs.CMIDebug; +import net.Zrips.CMILib.RawMessages.RawMessage; +import net.Zrips.CMILib.Version.Version; + public class HelpEntry { protected String name; protected String desc; @@ -70,7 +72,6 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p path = "/" + path.replace(".", " ") + " "; PageInfo pi = new PageInfo(linesPerPage, helplines.size(), page); - if (!pi.isPageOk()) { Residence.getInstance().msg(sender, lm.Invalid_Help); return; diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 9c2c7c4c1..9ae895770 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -18,8 +18,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.CMIChatColor; -import com.bekvon.bukkit.cmiLib.RawMessage; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; @@ -29,6 +27,9 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.GetTime; +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.RawMessages.RawMessage; + public class InformationPager { Residence plugin; diff --git a/src/com/bekvon/bukkit/residence/utils/Debug.java b/src/com/bekvon/bukkit/residence/utils/Debug.java index c8372ac5f..327ab2048 100644 --- a/src/com/bekvon/bukkit/residence/utils/Debug.java +++ b/src/com/bekvon/bukkit/residence/utils/Debug.java @@ -4,7 +4,7 @@ import org.bukkit.ChatColor; import org.bukkit.entity.Player; -import com.bekvon.bukkit.cmiLib.CMIChatColor; +import net.Zrips.CMILib.Colors.CMIChatColor; public class Debug { public static void D(Object message) { diff --git a/src/com/bekvon/bukkit/residence/utils/Utils.java b/src/com/bekvon/bukkit/residence/utils/Utils.java index 755fe1e82..8c4e934c8 100644 --- a/src/com/bekvon/bukkit/residence/utils/Utils.java +++ b/src/com/bekvon/bukkit/residence/utils/Utils.java @@ -25,8 +25,8 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.util.BlockIterator; -import com.bekvon.bukkit.cmiLib.CMIMaterial; -import com.bekvon.bukkit.cmiLib.Version; +import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Version.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; diff --git a/src/com/bekvon/bukkit/cmiLib/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java similarity index 93% rename from src/com/bekvon/bukkit/cmiLib/VersionChecker.java rename to src/com/bekvon/bukkit/residence/utils/VersionChecker.java index 6b5cf49fb..272aefa82 100644 --- a/src/com/bekvon/bukkit/cmiLib/VersionChecker.java +++ b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java @@ -1,4 +1,4 @@ -package com.bekvon.bukkit.cmiLib; +package com.bekvon.bukkit.residence.utils; import java.io.BufferedReader; import java.io.InputStreamReader; @@ -13,6 +13,8 @@ import com.bekvon.bukkit.residence.Residence; +import net.Zrips.CMILib.Version.Version; + public class VersionChecker { Residence plugin; private static int resource = 11480; diff --git a/src/plugin.yml b/src/plugin.yml index e569deb94..a1d31b6e9 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,10 +1,11 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 4.9.3.10 +version: 5.0.0.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 authors: [bekvon,nate302,t00thpick1] +depend: [CMILib] softdepend: [Vault,Essentials,RealPlugin,iConomy,bPermissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI,ServerControlReloaded,Slimefun,CS-CoreLib] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: From 60fadac76279d33a913adb75a3ec3cdf9b1d9603 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 16 Jun 2021 13:51:36 +0300 Subject: [PATCH 0877/1142] Updating player inventory after hanging event cancel --- src/com/bekvon/bukkit/residence/ResidenceCommandListener.java | 1 - .../bukkit/residence/listeners/ResidenceEntityListener.java | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 65da3f5ee..7a9793f58 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -22,7 +22,6 @@ import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; public class ResidenceCommandListener implements CommandExecutor { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index c2b54d60b..e414b74ad 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -593,6 +593,7 @@ public void onHangingPlace(HangingPlaceEvent event) { if (!perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true))) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.place); + player.updateInventory(); } } From a6996333f07ca12fef2c3d68f1df0e2ffda580d3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 16 Jun 2021 14:08:22 +0300 Subject: [PATCH 0878/1142] Supporting glowing item frames --- .../listeners/ResidenceBlockListener.java | 2 +- .../listeners/ResidenceEntityListener.java | 35 ++++++++++++------- .../listeners/ResidencePlayerListener.java | 6 ++-- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 137a21d2b..51fa39aa0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -86,7 +86,7 @@ public void onAnvilInventoryClick(InventoryClickEvent e) { if (inv == null || inv.getType() != InventoryType.ANVIL || e.getInventory().getLocation() == null) return; } catch (Exception | NoSuchMethodError ex) { - return; + return; } Block b = e.getInventory().getLocation().getBlock(); if (b == null || !CMIMaterial.isAnvil(b.getType())) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index e414b74ad..7da9cf6c6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -51,6 +51,7 @@ import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; +import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.MetadataValue; import org.bukkit.potion.PotionEffect; @@ -68,7 +69,9 @@ import com.bekvon.bukkit.residence.utils.Utils; import net.Zrips.CMILib.ActionBar.CMIActionBar; +import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceEntityListener implements Listener { @@ -479,8 +482,8 @@ public void onPhantomSpawn(CreatureSpawnEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onItemSpawnEvent(SpawnerSpawnEvent event) { - } - + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onCreatureSpawn(CreatureSpawnEvent event) { // disabling event on world @@ -676,7 +679,7 @@ public void onHangingBreakEvent(HangingBreakEvent event) { if (!event.getEntity().getType().equals(EntityType.ITEM_FRAME)) return; - + if (!event.getCause().equals(RemoveCause.PHYSICS)) return; @@ -1275,8 +1278,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (event.isCancelled()) return; - if (event.getEntityType() != EntityType.ENDER_CRYSTAL && event.getEntityType() != EntityType.ITEM_FRAME && !Utils.isArmorStandEntity(event - .getEntityType())) + if (event.getEntityType() != EntityType.ENDER_CRYSTAL && !CMIEntity.isItemFrame(event.getEntity()) && !Utils.isArmorStandEntity(event.getEntityType())) return; Entity dmgr = event.getDamager(); @@ -1332,14 +1334,21 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(loc, player); - if (event.getEntityType() == EntityType.ITEM_FRAME) { - ItemFrame it = (ItemFrame) event.getEntity(); - if (it.getItem() != null) { - if (!ResPerm.bypass_container.hasPermission(player, 10000L)) - if (!perms.playerHas(player, Flags.container, true)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container); - } + if (CMIEntity.isItemFrame(event.getEntity())) { + ItemStack stack = null; + if (event.getEntityType() == EntityType.ITEM_FRAME) { + ItemFrame it = (ItemFrame) event.getEntity(); + stack = it.getItem(); + } else { + org.bukkit.entity.GlowItemFrame it = (org.bukkit.entity.GlowItemFrame) event.getEntity(); + stack = it.getItem(); + } + + if (stack != null) { + if (!ResPerm.bypass_container.hasPermission(player, 10000L) && !perms.playerHas(player, Flags.container, true)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.container); + } return; } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 94a81a848..68d0343f0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -80,6 +80,7 @@ import net.Zrips.CMILib.CMILib; import net.Zrips.CMILib.ActionBar.CMIActionBar; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Version.Version; @@ -987,6 +988,7 @@ public static boolean isEmptyBlock(Block block) { case TRIPWIRE: case PAINTING: case ITEM_FRAME: + case GLOW_ITEM_FRAME: case NONE: return true; default: @@ -1592,7 +1594,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { Entity ent = event.getRightClicked(); - if (ent.getType() != EntityType.ITEM_FRAME) { + if (!CMIEntity.isItemFrame(ent)) { return; } @@ -1610,7 +1612,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = resPlayer.getGroup(); - if (!plugin.getItemManager().isAllowed(heldItem, group, world)) { + if (!plugin.getItemManager().isAllowed(heldItem, group, world)) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; From 95321af2d64cd39f7791fe9d95c9acfb705d8f43 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 16 Jun 2021 15:55:41 +0300 Subject: [PATCH 0879/1142] New flag as copper preventing copper manipulation --- .../bukkit/residence/containers/Flags.java | 3 +- .../listeners/ResidenceBlockListener.java | 1 + .../ResidencePlayerListener1_17.java | 79 +++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index c0f5a6aa4..22c98b0ea 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -31,7 +31,8 @@ public enum Flags { commandblock(CMIMaterial.COMMAND_BLOCK, FlagMode.Both, "Allows or denys command block interaction", false), command(CMIMaterial.COMMAND_BLOCK, FlagMode.Both, "Allows or denys comamnd use in residences", false), container(CMIMaterial.CHEST_MINECART, FlagMode.Both, "Allows or denys use of furnaces, chests, dispensers, etc...", false), - coords(CMIMaterial.COMPASS, FlagMode.Residence, "Hides residence coordinates", true), + coords(CMIMaterial.COMPASS, FlagMode.Residence, "Hides residence coordinates", true), + copper(CMIMaterial.IRON_BLOCK, FlagMode.Both, "Allows to modify copper blocks", true), craft(CMIMaterial.STONE, FlagMode.Residence, "Gives table, enchant, brew flags", true), creeper(CMIMaterial.CREEPER_SPAWN_EGG, FlagMode.Residence, "Allow or deny creeper explosions", false), dragongrief(CMIMaterial.DIRT, FlagMode.Residence, "Prevents ender dragon block griefing", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 51fa39aa0..ca2c5db42 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -61,6 +61,7 @@ import net.Zrips.CMILib.ActionBar.CMIActionBar; import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java new file mode 100644 index 000000000..1ed24c6cb --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java @@ -0,0 +1,79 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + +import net.Zrips.CMILib.CMILib; +import net.Zrips.CMILib.Items.CMIMaterial; + +public class ResidencePlayerListener1_17 implements Listener { + + private Residence plugin; + + public ResidencePlayerListener1_17(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerInteractRespawn(PlayerInteractEvent event) { + + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + try { + if (event.getHand() != EquipmentSlot.HAND && event.getHand() != EquipmentSlot.OFF_HAND) + return; + } catch (Exception e) { + } + Player player = event.getPlayer(); + + Block block = event.getClickedBlock(); + if (block == null) + return; + + Material mat = block.getType(); + + if (!CMIMaterial.isCopperBlock(mat)) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (res == null) + return; + + ItemStack item = null; + if (event.getHand() == EquipmentSlot.OFF_HAND) { + item = CMILib.getInstance().getReflectionManager().getItemInOffHand(player); + } else { + item = CMILib.getInstance().getReflectionManager().getItemInMainHand(player); + } + + if (item == null || item.getType().equals(Material.AIR)) + return; + boolean waxed = CMIMaterial.isWaxedCopper(mat); + + if (CMIMaterial.get(item).equals(CMIMaterial.HONEYCOMB) && !waxed || item.getType().toString().contains("_AXE") && waxed && + !res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.copper, FlagCombo.TrueOrNone) && !plugin.isResAdminOn(player)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.copper, res.getName()); + event.setCancelled(true); + } + } +} From 12ea949ad00813ee8c9592cccac4660ac57dee78 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 16 Jun 2021 15:55:58 +0300 Subject: [PATCH 0880/1142] Fix for issue with invalid save file --- src/com/bekvon/bukkit/residence/Residence.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 20d20ee04..a328c1a76 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -80,6 +80,7 @@ import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_14; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_15; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_16; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_17; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_9; import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; @@ -701,6 +702,8 @@ public void run() { pm.registerEvents(new ResidencePlayerListener1_15(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_16_R1)) pm.registerEvents(new ResidencePlayerListener1_16(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_17_R1)) + pm.registerEvents(new ResidencePlayerListener1_17(this), this); elistener = new ResidenceEntityListener(this); flistener = new ResidenceFixesListener(); slistener = new ResidenceRaidListener(); @@ -1362,6 +1365,8 @@ protected boolean loadYml() throws Exception { yml = new YMLSaveHelper(loadFile); yml.load(); + if (yml.getRoot() == null) + continue; if (yml.getRoot().containsKey("Messages")) { HashMap c = getResidenceManager().getCacheMessages().get(worldName); From 9ccc8f2208642703809a0a535d75de4c4bf607b6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 16 Jun 2021 16:24:10 +0300 Subject: [PATCH 0881/1142] Res auto fixing --- .../bukkit/residence/commands/auto.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index f8ca9416a..f8ee2a206 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -11,6 +11,8 @@ import org.bukkit.util.Vector; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; + import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -66,7 +68,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.getSelectionManager().placeLoc2(player, loc.clone(), false); boolean result = resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true, lenght); - + CMIDebug.d(result, plugin.getSelectionManager().getSelectionCuboid(player).getXSize(), plugin.getSelectionManager().getSelectionCuboid(player).getYSize(), plugin.getSelectionManager() + .getSelectionCuboid(player).getZSize()); if (!result) { Residence.getInstance().msg(player, lm.Area_SizeLimit); return true; @@ -100,6 +103,8 @@ private static int getMax(int max) { } private static int getMin(int min, int max) { + if (!Residence.getInstance().getConfigManager().isARCSizeEnabled()) + return min; int percent = (int) (max * (Residence.getInstance().getConfigManager().getARCSizePercentage() / 100D)); int arcmin = Residence.getInstance().getConfigManager().getARCSizeMin(); int arcmax = Residence.getInstance().getConfigManager().getARCSizeMax(); @@ -108,6 +113,10 @@ private static int getMin(int min, int max) { newmin = newmin > arcmax ? arcmin : newmin; newmin = newmin > max ? max : newmin; + if (newmin >= max) { + newmin = (int) (min + ((max - min) * (Residence.getInstance().getConfigManager().getARCSizePercentage() / 100D))); + } + return newmin; } @@ -134,6 +143,8 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, if (max < 0) max = maxX; + CMIDebug.d("Max: ", max); + while (true) { if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { if (dir.equals(direction.Top) || dir.equals(direction.Bottom)) { @@ -189,21 +200,21 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, continue; } - if (max > 0 && max <= c.getXSize() || c.getXSize() > group.getMaxX() - group.getMinX()) { + if (max > 0 && max < c.getXSize() || c.getXSize() > group.getMaxX() - group.getMinX()) { locked.add(dir); dir = dir.getNext(); skipped++; continue; } - if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (max > 0 && max <= c.getYSize() || c.getYSize() > group.getMaxY() - group.getMinY())) { + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (max > 0 && max < c.getYSize() || c.getYSize() > group.getMaxY() - group.getMinY())) { locked.add(dir); dir = dir.getNext(); skipped++; continue; } - if (max > 0 && max <= c.getZSize() || c.getZSize() > group.getMaxZ() - group.getMinZ()) { + if (max > 0 && max < c.getZSize() || c.getZSize() > group.getMaxZ() - group.getMinZ()) { locked.add(dir); dir = dir.getNext(); skipped++; @@ -241,8 +252,10 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, cuboid = plugin.getSelectionManager().getSelectionCuboid(player); - if (cuboid.getXSize() < x || cuboid.getYSize() < y || cuboid.getZSize() < z) + if (cuboid.getXSize() < x || cuboid.getYSize() < y || cuboid.getZSize() < z) { + CMIDebug.d(cuboid.getXSize() < x, cuboid.getYSize() < y, cuboid.getZSize() < z); return false; + } return true; } From 3f761d7a69b8be3d0639b0b32fa2bbb7e2f1320a Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 16 Jun 2021 16:24:24 +0300 Subject: [PATCH 0882/1142] More tab completes --- src/com/bekvon/bukkit/residence/ConfigManager.java | 9 +++++++++ src/com/bekvon/bukkit/residence/commands/confirm.java | 4 +++- src/com/bekvon/bukkit/residence/commands/flags.java | 3 +++ .../residence/listeners/ResidenceBlockListener.java | 8 ++++---- .../residence/listeners/ResidencePlayerListener1_17.java | 5 +++-- src/com/bekvon/bukkit/residence/utils/TabComplete.java | 2 ++ 6 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 6fd565bab..65d80abc5 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -102,6 +102,7 @@ public class ConfigManager { private boolean ARCCheckCollision; private String ARCIncrementFormat; private int ARCSizePercentage; + private boolean ARCSizeEnabled; private int ARCSizeMin; private int ARCSizeMax; @@ -638,6 +639,10 @@ public void UpdateConfigFile() { "Defines new residence name increment when using automatic residence creation command if residence with that name already exist"); ARCIncrementFormat = c.get("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "_[number]"); + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Enabled", + "When enabled we will try to create region by defined bounds"); + ARCSizeEnabled = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Enabled", false); + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Percentage", "Value between 1 and 100 which will define size of residence we will create in percentage depending on players permission group"); ARCSizePercentage = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Percentage", 50); @@ -2086,6 +2091,10 @@ public int getARCSizeMax() { return ARCSizeMax; } + public boolean isARCSizeEnabled() { + return ARCSizeEnabled; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/commands/confirm.java b/src/com/bekvon/bukkit/residence/commands/confirm.java index aaa441f79..50b47525f 100644 --- a/src/com/bekvon/bukkit/residence/commands/confirm.java +++ b/src/com/bekvon/bukkit/residence/commands/confirm.java @@ -3,6 +3,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -23,7 +24,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } @Override - public void getLocale() { + public void getLocale() { + LocaleManager.addTabCompleteMain(this); } } diff --git a/src/com/bekvon/bukkit/residence/commands/flags.java b/src/com/bekvon/bukkit/residence/commands/flags.java index f3f3fdb5e..5bdfffea6 100644 --- a/src/com/bekvon/bukkit/residence/commands/flags.java +++ b/src/com/bekvon/bukkit/residence/commands/flags.java @@ -8,6 +8,8 @@ import org.bukkit.command.CommandSender; import net.Zrips.CMILib.FileHandler.ConfigReader; + +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; @@ -74,5 +76,6 @@ public void getLocale() { c.get(pt + ".Info", Arrays.asList("&eUsage: &6/res " + forSet + " " + fl.getName() + " true/false/remove")); keys.remove(fl.toString()); } + LocaleManager.addTabCompleteMain(this); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index ca2c5db42..0370b0dec 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -87,7 +87,7 @@ public void onAnvilInventoryClick(InventoryClickEvent e) { if (inv == null || inv.getType() != InventoryType.ANVIL || e.getInventory().getLocation() == null) return; } catch (Exception | NoSuchMethodError ex) { - return; + return; } Block b = e.getInventory().getLocation().getBlock(); if (b == null || !CMIMaterial.isAnvil(b.getType())) @@ -193,6 +193,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (!canBreakBlock(event.getPlayer(), event.getBlock(), true)) event.setCancelled(true); } + public static boolean canBreakBlock(Player player, Block block, boolean inform) { if (player == null) @@ -612,7 +613,7 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { - +CMIDebug.d("place event", event.getBlock().getType()); if (!canPlaceBlock(event.getPlayer(), event.getBlock(), true)) event.setCancelled(true); } @@ -657,8 +658,7 @@ public static boolean canPlaceBlock(Player player, Block block, boolean informPl } } - if (!hasplace - && !ResPerm.bypass_build.hasPermission(player, 10000L)) { + if (!hasplace && !ResPerm.bypass_build.hasPermission(player, 10000L)) { if (informPlayer) Residence.getInstance().msg(player, lm.Flag_Deny, Flags.place); return false; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java index 1ed24c6cb..4387c2afd 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java @@ -69,9 +69,10 @@ public void onPlayerInteractRespawn(PlayerInteractEvent event) { if (item == null || item.getType().equals(Material.AIR)) return; boolean waxed = CMIMaterial.isWaxedCopper(mat); - - if (CMIMaterial.get(item).equals(CMIMaterial.HONEYCOMB) && !waxed || item.getType().toString().contains("_AXE") && waxed && + + if ((CMIMaterial.get(item).equals(CMIMaterial.HONEYCOMB) && !waxed || item.getType().toString().contains("_AXE") && CMIMaterial.getCopperStage(mat) > 1) && !res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.copper, FlagCombo.TrueOrNone) && !plugin.isResAdminOn(player)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.copper, res.getName()); event.setCancelled(true); } diff --git a/src/com/bekvon/bukkit/residence/utils/TabComplete.java b/src/com/bekvon/bukkit/residence/utils/TabComplete.java index 4230ec1a9..6af2b6399 100644 --- a/src/com/bekvon/bukkit/residence/utils/TabComplete.java +++ b/src/com/bekvon/bukkit/residence/utils/TabComplete.java @@ -12,6 +12,8 @@ import com.bekvon.bukkit.residence.Residence; +import net.Zrips.CMILib.Logs.CMIDebug; + public class TabComplete implements TabCompleter { @Override From 7f722ce43a38275169a119a0d33e05425979f4e5 Mon Sep 17 00:00:00 2001 From: Zz <55978588+Zz-886@users.noreply.github.com> Date: Thu, 1 Jul 2021 04:55:03 +0800 Subject: [PATCH 0883/1142] Add files via upload --- src/Language/Chinese.yml | 1240 ++++++++++++++++++++++++-------------- 1 file changed, 783 insertions(+), 457 deletions(-) diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml index 9ed0d54e4..ad9b83fca 100644 --- a/src/Language/Chinese.yml +++ b/src/Language/Chinese.yml @@ -1,4 +1,3 @@ -# NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy # of this file and modify that instead. This file will be updated automatically by Residence # when a newer version is detected, and your changes will be overwritten. Once you # have a copy of this file, change the Language: option under the Residence config.yml @@ -7,6 +6,7 @@ Language: Invalid: Player: '&c无效的玩家å...' + PlayerOffline: '&c玩家已离线' World: '&c无效的世界...' Residence: '&c无效的领地...' Subzone: '&c无效的领地å­åŒºåŸŸ...' @@ -20,11 +20,17 @@ Language: Group: '&c无效的æƒé™ç»„...' MessageType: '&c消æ¯ç±»åž‹å¿…须为 enter(进入), leave(离开) 或 remove(移除).' Flag: '&c无效æƒé™...' + FlagType: + Fail: '&c无效标志... 这个标志åªèƒ½ç”¨åœ¨ %1' + Player: 玩家 + Residence: 领地 FlagState: '&c无效æƒé™çŠ¶æ€, 必须为 &6true(t)&c, &6false(f)&c, 或 &6remove(r)' List: '&e未知åå•ç±»åž‹, 必须是 &6blacklist(黑åå•) &e或 &6ignorelist(忽略åå•).' Page: '&e无效页é¢...' Help: '&c无效帮助页é¢...' NameCharacters: '&cå字中包å«æ— æ•ˆå­—符...' + FromConsole: '&cä½ åªèƒ½åœ¨æŽ§åˆ¶å°ä¸­ä½¿ç”¨!' + Ingame: '&cä½ åªèƒ½åœ¨æ¸¸æˆä¸­ä½¿ç”¨!' Area: Exists: '&c区域å已存在.' Create: '&e领地区域创建æˆåŠŸ, ID &6%1' @@ -33,7 +39,6 @@ Language: SubzoneCollision: '&c区域与领地å­åŒºåŸŸ &6%1 &c冲çª.' NonExist: '&c区域ä¸å­˜åœ¨.' InvalidName: '&c无效区域å...' - ToSmallTotal: '&cé€‰ä¸­çš„åŒºåŸŸè¿‡å° (&6%1&c)' ToSmallX: '&c选区 &6X &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' ToSmallY: '&c选区高度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' ToSmallZ: '&c选区 &6Z &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' @@ -43,6 +48,7 @@ Language: Rename: '&e区域 &6%1 &e已被é‡å‘½å为 &6%2' Remove: '&e已删除区域 &6%1&e.' Name: '&eå称: &2%1' + ListAll: '&a{&eID:&c%1 &eP1:&c(%2,%3,%4) &eP2:&c(%5,%6,%7) &e(尺寸:&c%8&e)&a}' RemoveLast: '&cä¸èƒ½ç§»é™¤é¢†åœ°ä¸­çš„最åŽä¸€ä¸ªåŒºåŸŸ.' NotWithinParent: '&c该区域ä¸åœ¨çˆ¶åŒºåŸŸå†….' Update: '&e区域已更新...' @@ -75,23 +81,92 @@ Language: Updated: '&6%1 &e木牌已更新!' TopLine: '[领地市场]' DateFormat: YY/MM/dd HH:mm - ForRentTopLine: '&8出租' - ForRentPriceLine: '&8%1&f/&8%2&f/&8%3' - ForRentResName: '&8%1' + ForRentTopLine: '&0出租' + ForRentPriceLine: '&0%1&f/&0%2&f/&0%3' + ForRentResName: '&0%1' ForRentBottomLine: '&9å¯ç”¨' RentedAutorenewTrue: '&2%1' RentedAutorenewFalse: '&c%1' RentedTopLine: '%1' - RentedPriceLine: '&8%1&f/&8%2&f/&8%3' - RentedResName: '&8%1' + RentedPriceLine: '&0%1&f/&0%2&f/&0%3' + RentedResName: '&0%1' RentedBottomLine: '&1%1' - ForSaleTopLine: '&8出售' - ForSalePriceLine: '&8%1' - ForSaleResName: '&8%1' - ForSaleBottomLine: '&5å¯ç”¨' - LookAt: '&c请将鼠标准星对准木牌.' + ForSaleTopLine: '&0出售' + ForSalePriceLine: '&0%1' + ForSaleResName: '&0%1' + ForSaleBottom: '&0%1m³' + LookAt: '&c请将鼠标准星对准木牌' + ResName: '&0%1' + Owner: '&0%1' + Raid: + NotEnabled: '&c未å¯ç”¨çªè¢­åŠŸèƒ½!' + NotIn: '&cä½ ä¸åœ¨çªå‡»é˜Ÿä¸­!' + CantLeave: '&cä½ ä¸èƒ½ç¦»å¼€ (%1) çªè¢­è‡ªå·±çš„ä½æ‰€!' + CantKick: '&cä¸èƒ½è¸¢ (%1) 领地的所有者!' + Kicked: '&e踢了 &7%1 &e从 &7%2 &e领地çªè¢­!' + StartsIn: '&7çªè¢­å¼€å§‹äºŽ: [autoTimeLeft] &2%1D &4%2A' + EndsIn: '&cçªè¢­ç»“æŸäºŽ: [autoTimeLeft] &2%1D &4%2A' + Ended: '&7çªè¢­ &4%1 &7结æŸäº†!' + cantDo: '&cçªè¢­æ—¶ä¸èƒ½è¿™æ ·åš!' + left: '&7ä½ å·²ç»ç¦»å¼€äº† &4%1 &7çªè¢­' + noFlagChange: '&cçªè¢­æ—¶ä¸èƒ½æ”¹å˜æƒé™' + noRemoval: '&cçªè¢­æ—¶ä¸èƒ½æ‹†é™¤é¢†åœ°' + immune: '&e下一步的å…ç–« %1' + notImmune: '&eä¸å†æœ‰è±å…æƒ' + notInRaid: '&e玩家ä¸åœ¨çªå‡»é˜Ÿä¸­' + attack: + Joined: '&7加入 &2%1 &7çªè¢­!' + Started: '&7çªè¢­å¼€å§‹!' + cooldown: '&c对这座领地进行å¦ä¸€æ¬¡çªè¢­ä¸ºæ—¶è¿‡æ—©! 等待 %1' + immune: '&c这座领地对çªè¢­æ˜¯å…ç–«çš„! 等待 %1' + playerImmune: '&c领地主人对çªè¢­å…·æœ‰å…疫力! 等待 %1' + isOffline: '&c当主人ä¸åœ¨çº¿æ—¶ï¼Œä¸èƒ½çªè¢­!' + noSubzones: '&cä¸èƒ½çªè¢­å­åŒºåŸŸ!' + noSelf: '&cä¸èƒ½çªè¢­è‡ªå·±çš„领地!' + alreadyInAnother: '&cä¸èƒ½å‚加这个活动,你已ç»åœ¨å¦ä¸€ä¸ªæ´»åŠ¨ä¸­äº† (%1)' + defend: + Joined: '&7加入 &2%1 &7çªè¢­é˜²å¾¡!' + Sent: '&7å‘é€åŠ å…¥çªè¢­é˜²å¾¡çš„请求,等待确认' + Join: '&7加盟 &6%1 &7çªè¢­é˜²å¾¡' + Invitation: '&7接å—çªè¢­é˜²å¾¡ï¼Œä»Ž &6%1' + JoinedDef: '&2%1&7 加入çªè¢­é˜²å¾¡!' + IsOffline: '&c当所有者ä¸åœ¨çº¿æ—¶ï¼Œä¸èƒ½åŠ å…¥è¾©æŠ¤å°ç»„!' + noSelf: '&cä½ å·²ç»åœ¨ä¸ºè¿™ä¸ªé¢†åœ°è¾©æŠ¤äº†' + notRaided: '&c领地ä¸åœ¨çªè¢­èŒƒå›´å†…' + alreadyInAnother: '&cä¸èƒ½å‚加这个领地辩护,你已ç»åœ¨å¦ä¸€ä¸ªé¢†åœ°ä¸­äº† (%1)' + status: + title: '&7----------- &f%1(%2) &7-----------' + immune: '&e对下一步的çªè¢­å…ç–«: %1' + starts: '&7çªè¢­å¼€å§‹äºŽ: %1' + attackers: '&7袭击者: &4%1' + defenders: '&7æå«è€…: &4%1' + ends: '&7çªè¢­ç»“æŸäºŽ: %1' + canraid: '&2å¯ä»¥è¢«çªè¢­' + raidin: '&eå¯èƒ½çš„çªè¢­: %1' + stopped: '&eçªè¢­ &6%1 &e被åœæ­¢' + info: + years: '&e%1 &6å¹´ ' + oneYear: '&e%1 &6å¹´ ' + day: '&e%1 &6天 ' + oneDay: '&e%1 &6天 ' + hour: '&e%1 &6å°æ—¶ ' + oneHour: '&e%1 &6å°æ—¶ ' + min: '&e%1 &6分 ' + sec: '&e%1 &6秒 ' + listSplitter: ', ' + click: '&7点击' + clickToConfirm: '&7点击确认' + server: + land: Server_Land Flag: - Set: '&6%2 &eçš„ &6%1 &eæƒé™å·²è®¾ç½®ä¸º &6%3 &e状æ€.' + ownColor: '&4' + p1Color: '&2' + p2Color: '&a' + haveColor: '&2' + havePrefix: '' + denyColor: '&4' + denyPrefix: '' + Set: '&e领地:&6%2 &eçš„ &6%1 &eæƒé™å·²è®¾ç½®ä¸º &6%3 &e状æ€.' SetFailed: '&c你没有æƒé™è®¾ç½® &6%1 &cæƒé™' CheckTrue: '&e玩家 &6%2 &e已在领地 &6%3 &e中将 &6%1 &eæƒé™è®¾ç½®ä¸º &6%4&e.' CheckFalse: '&e玩家 &6%2 &e没有在领地中设置 &6%1 &eæƒé™.' @@ -102,12 +177,17 @@ Language: Deny: '&c你没有 &6%1 &cæƒé™.' SetDeny: '&c所有者ä¸èƒ½è®¾ç½® &6%1 &cæƒé™.' ChangeDeny: '&c此时领地内有 &6%2 &cå玩家, 所以你无法更改 &6%1 &cæƒé™.' + ChangedForOne: '&e改å˜äº† &6%1 &eæƒé™ä¸º &6%2 &e领地' + ChangedFor: '&e改å˜äº† &6%1 &eæƒé™æ¥è‡ª &6%2 &e检查的领地' + reset: '&eé‡ç½®æƒé™ï¼Œç”¨äºŽ &6%1 &e领地' + resetAll: '&eé‡ç½®æƒé™ï¼Œç”¨äºŽ &6%1 &e领地' Bank: NoAccess: '&c你没有æƒé™ä½¿ç”¨é“¶è¡Œ.' Name: ' &e银行: &6%1' NoMoney: '&c你的银行存款ä¸è¶³.' Deposit: '&eä½ å‘领地银行存款 &6%1 &eå…ƒ.' Withdraw: '&e你从领地银行中å–出 &6%1 &eå…ƒ.' + rentedWithdraw: '&cä¸èƒ½ä»Žç§Ÿç”¨çš„领地银行æ款.' Subzone: Rename: '&e领地å­åŒºåŸŸ &6%1 &e已被é‡å‘½å为 &6%2' Remove: '&e已删除领地å­åŒºåŸŸ &6%1&e.' @@ -126,7 +206,8 @@ Language: DeleteConfirm: '&e如果你确定è¦åˆ é™¤å­åŒºåŸŸ &6%1&e, 输入 &6/res confirm &eæ¥ç¡®è®¤æ“作.' OwnerChange: '&e已将å­åŒºåŸŸ &6%1 &e的所有者更改为 &6%2' Residence: - Hidden: ' &e(&6Hidden&e)' + DontOwn: '&e没有什么å¯å±•ç¤ºçš„' + Hidden: ' &e(&6éšè—&e)' Bought: '&eæˆåŠŸè´­ä¹°é¢†åœ° &6%1' Buy: '&6%1 &e购买了你的 &6%2 &e领地.' BuyTooBig: '&c你无法购买尺寸这么大的领地.' @@ -158,7 +239,9 @@ Language: Give: '&e你将领地 &6%1 &eé€ç»™äº† &6%2' Recieve: '&e你收到了 &6%2 &eé€ç»™ä½ çš„ &6%1 &e领地.' ResList: ' &a%1. &e%2 &e- &6%3 %4&6%5' - List: ' &a%1%2 &e- &6世界&e: &6%3' + TrustedResList: ' &a%1. &f%2 &e- &6%3 %4&6%5' + List: ' &e%2 &e- &6%3' + Near: '&e附近的领地: &7%1' TeleportNear: '&e已传é€åˆ°é™„近的领地.' SetTeleportLocation: '&e设置传é€ä½ç½®.' PermissionsApply: '&e领地æƒé™å·²è®¾ç½®.' @@ -167,6 +250,7 @@ Language: NotIn: '&c你此时ä¸åœ¨é¢†åœ°å†….' PlayerNotIn: '&c玩家ä¸åœ¨é¢†åœ°åŒºåŸŸå†…..' Kicked: '&e你被从领地中请出.' + CantKick: '&eä¸èƒ½è¸¢è¿™ä¸ªçŽ©å®¶' In: '&eä½ ç›®å‰ç«™åœ¨é¢†åœ° &6%1 &e中.' OwnerChange: '&e已将领地 &6%1 &e的所有者更改为 &6%2' NonAdmin: '&c你没有领地的管ç†å‘˜æƒé™.' @@ -246,6 +330,7 @@ Language: SellAmount: '&e出售数é‡: &2%1' SellList: ' &6%1&e. &6%2 &e(&6%3&e) - &6%4' LeaseExpire: '&e租约到期时间: &2%1' + LeaseList: '&6%1. &e%2 &2%3 &e%4' Expanding: North: '&eå‘北方扩展 &6%1 &e个方å—' West: '&eå‘西方扩展 &6%1 &e个方å—' @@ -291,24 +376,27 @@ Language: RenewCost: '&7- &e续租æ¯æ–¹å—花费:&3 %1' Gui: Set: - Title: '&l%1 æƒé™' + Title: '&6%1 æƒé™è®¾ç½®èœå•' Pset: - Title: '&l%1 %2 æƒé™' + Title: '&6%1 %2 æƒé™' Actions: - '&2左键å•å‡»å¯ç”¨' - '&cå³é”®å•å‡»ç¦ç”¨' - '&eShift+左键å•å‡»åˆ é™¤' InformationPage: - TopLine: '&e---< &a %1 &e >---' + Top: '&e___/ &a %1 - %2 &e \___' + TopSingle: '&e___/ &a %1 &e \___' Page: '&e-----< &6%1 &e>-----' - NextPage: '&e-----< &6%1 &e>-----' + NextPage2: '&e-----< &6%1 &e>-----' NoNextPage: '&e-----------------------' GeneralList: '&2 %1 &6- &e%2' FlagsList: '&2 %1 &6- &e%2' - Separator: '&6▬▬▬▬▬▬▬▬▬▬' + SmallSeparator: '&6------' Chat: ChatChannelChange: '&e领地èŠå¤©é¢‘é“已更改为 &6%1!' ChatChannelLeave: '&e离开领地èŠå¤©' + ChatMessage: '%1 %2%3: %4%5' + ChatListeningMessage: '&2[å€¾å¬ %6]%1 %2%3: %4%5' JoinFirst: '&4请先加入领地èŠå¤©é¢‘é“.' InvalidChannel: '&4无效频é“.' InvalidColor: '&4颜色代ç é”™è¯¯' @@ -321,7 +409,7 @@ Language: ListTopLine: '&6%1 &e商店列表 - 第 &6%2 &e页, å…± &6%3 %4' List: ' &e%1. &6%2 &e(&6%3&e) %4' ListVoted: '&e%1 (&6%2&e)' - ListLiked: '&e赞: &0%1' + ListLiked: '&7赞: &7%1' VotesTopLine: '&6%1 &e%2 评分列表 &6- &e第 &6%3 &e页, å…± &6%4 %5' VotesList: ' &e%1. &6%2 &e%3 &7%4' NoDesc: '&6没有æè¿°' @@ -329,6 +417,7 @@ Language: &6æè¿°: %1 DescChange: '&6æ述已更改为: %1' + ChantChange: '&4当商店标志被设置为"true"时,ä¸èƒ½æ”¹å˜.' NewBoard: '&6æˆåŠŸæ·»åŠ å•†åº—宣传æ¿' BoardExist: '&c商店宣传æ¿å·²ç»å­˜åœ¨' DeleteBoard: '&6å³å‡»è¦åˆ é™¤çš„宣传æ¿' @@ -356,6 +445,13 @@ Language: IncorrectLocation: '&6无法找到正确的传é€ä½ç½®, 请等待 &e%1 &6秒åŽé‡è¯•.' TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%4 &e秒内ä¸è¦ç§»åŠ¨.' WorldList: '&eå¯ç”¨ä¸–ç•Œ: &6%1' + Disabled: '&c在这个世界上,éšæœºä¼ é€åŠŸèƒ½è¢«ç¦ç”¨' + TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%4 &e秒内ä¸è¦ç§»åŠ¨.' + WorldList: '&eå¯ç”¨ä¸–ç•Œ: &6%1' + Permissions: + variableColor: '&f' + permissionColor: '&6' + cmdPermissionColor: '&2' General: DisabledWorld: '&c该世界已ç¦ç”¨é¢†åœ°.' UseNumbers: '&c请输入数字.' @@ -363,12 +459,15 @@ Language: CantPlaceLava: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置岩浆.' # Replace all text with '' to disable this message CantPlaceWater: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置水.' - NoPermission: '&c你没有执行此æ“作的æƒé™.' + CantPlaceChest: '&cä½ ä¸èƒ½åœ¨è¿™ä¸ªåœ°æ–¹æ‘†æ”¾ç®±å­' + NoPermission: '&c你没有æƒé™è¿™æ ·åš.' + info: + NoPlayerPermission: '&c[playerName] 没有 [permission] æƒé™' NoCmdPermission: '&c你没有æƒé™è¿™ä¹ˆåš' DefaultUsage: '&e输入 &6/%1 ? &e查看帮助信æ¯' MaterialGet: '&eID &6%1 &eçš„ææ–™å称为 &6%2' MarketList: '&e---- &6市场列表 &e----' - Separator: '&e------------------------------------------------' + Separator: '&e----------------------------------------------------' AdminOnly: '&cåªæœ‰ç®¡ç†å‘˜æ‰èƒ½æ‰§è¡Œè¿™ä¸ªå‘½ä»¤.' InfoTool: '&e- ä¿¡æ¯å·¥å…·: &6%1' ListMaterialAdd: '&6%1 &e已被添加到 &6%2 &e领地.' @@ -376,31 +475,58 @@ Language: ItemBlacklisted: '&c此处ç¦æ­¢ä½¿ç”¨è¯¥ç‰©å“.' WorldPVPDisabled: '&c世界 PVP å·²ç¦ç”¨.' NoPVPZone: '&céž PVP 区域.' + NoFriendlyFire: '&cæ— å‹å†›å°„击' InvalidHelp: '&c无效帮助页ç .' TeleportDeny: '&c你没有传é€çš„æƒé™.' TeleportSuccess: '&e已传é€!' - TeleportConfirm: '&cä¼ é€ä¸å®‰å…¨, ä½ å°†æ‘”è½ &6%1 &c个方å—. 如果ä»è¦ä¼ é€, 输入 &6/res tpconfirm &c确认.' - TeleportStarted: '&eå¼€å§‹å‘ &6%1 &eä¼ é€, 在 &6%2 &e秒内ä¸è¦ç§»åŠ¨.' + TeleportConfirmLava: '&c这个传é€å¹¶ä¸å®‰å…¨ï¼Œä½ ä¼šæŽ‰è¿› &6岩浆&c. + 使用 &6/res tpconfirm &c强制传é€.' + TeleportConfirmVoid: '&c这个传é€ä¸å®‰å…¨ï¼Œä½ ä¼šæŽ‰è¿› &6虚空&c. + 使用 &6/res tpconfirm &c强制传é€.' + TeleportConfirm: '&c这个传é€å¹¶ä¸å®‰å…¨ï¼Œä½ å°†ä¼šè½å…¥ &6%1 &cblocks. + 使用 &6/res tpconfirm &c强制传é€.' + TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%4 &e秒内ä¸è¦ç§»åŠ¨.' TeleportTitle: '&eä¼ é€ä¸­..' TeleportTitleTime: '&6%1' TeleportCanceled: '&eä¼ é€è¢«å–消!' NoTeleportConfirm: '&e没有需è¦ç¡®è®¤çš„ä¼ é€è¯·æ±‚!' - HelpPageHeader: '&e领地帮助 - &6%1 &e- é¡µé¢ <&6%2 &e/ &6%3&e>' + HelpPageHeader2: '&eHelp 页数 - &6%1 &e- é¡µç  <&6%2 &eçš„ &6%3&e>' ListExists: '&c列表已存在.' ListRemoved: '&e已删除列表.' ListCreate: '&e已创建列表 &6%1' PhysicalAreas: '&e物ç†åŒºåŸŸ' CurrentArea: '&e当å‰åŒºåŸŸ: &6%1' TotalResSize: '&e总大å°: &6%1m³ (%2m²)' + ResSize: + eastWest: '&e东/西: &6%1' + northSouth: '&e北/å—: &6%1' + upDown: '&e上/下: &6%1' TotalWorth: '&e总价值: &6%1 &e(&6%2&e)' TotalSubzones: '&eå­é¢†åœ°æ•°é‡: &6%1 &e(&6%2&e)' NotOnline: '&e目标玩家ä¸åœ¨çº¿.' - NextInfoPage: '&2| &e下一页 &2>>>' - PrevInfoPage: '&2<<< &e上一页 &2|' + prevPage: '&2----<< &6上一页 ' + prevPageGui: '&6上一页 ' + prevPageClean: '&6上一页 ' + prevPageOff: '&2----<< &7上一页 ' + prevPageHover: '&7<<<' + firstPageHover: '&7|<' + nextPage: '&6 下一页 &2>>----' + nextPageGui: '&6下一页' + nextPageClean: '&6 下一页' + nextPageOff: '&7 下一页 &2>>----' + nextPageHover: '&7>>>' + lastPageHover: '&7>|' + pageCount: '&2%1&7/&2%2' + pageCountHover: '&e%1 æ¡ç›®' GenericPages: '&e页数 &6%1 &e/ &6%2 &e(&6%3&e)' WorldEditNotFound: '&c未检测到 WorldEdit.' CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + CoordsLiner: '&7 (&3%1&7;%2&7)' + AllowedTeleportIcon: '&2T' + BlockedTeleportIcon: '&7T' + AllowedMovementIcon: '&2M' + BlockedMovementIcon: '&7M' AdminToggleTurnOn: '&e自动管ç†æ¨¡å¼&6å¼€å¯' AdminToggleTurnOff: '&e自动管ç†æ¨¡å¼&6关闭' NoSpawn: '&e你没有在出生点的 &6移动 &eæƒé™, 正在é‡æ–°å®šä½.' @@ -432,7 +558,7 @@ Language: Subzones: '&eå­åŒºåŸŸ' # The below lines represent various messages residence sends to the players. # Note that some messages have variables such as %1 that are inserted at runtime. - NewPlayerInfo: '&e如果è¦åˆ›å»ºé¢†åœ°ä»¥ä¿æŠ¤æˆ¿å±‹, 请用木锄选å–ä¿æŠ¤åŒºçš„两个对角, 然åŽæ‰§è¡Œ &2/res create 领地å称 &e命令.' + NewPlayerInfo: '&e如果è¦åˆ›å»ºé¢†åœ°ä»¥ä¿æŠ¤æˆ¿å±‹, 请用选区工具选å–两个对角, 然åŽæ‰§è¡Œ &2/res create 领地å称 &e命令' CommandHelp: Description: 领地的命令帮助 SubCommands: @@ -442,992 +568,1192 @@ CommandHelp: - '&2输入 &6/res [命令] ? <页ç > &2查看更多信æ¯.' SubCommands: auto: - Description: 自动在你站ç€çš„ä½ç½®ä¸ºä¸­å¿ƒï¼Œåˆ›å»ºä½ èƒ½åˆ›å»ºæœ€å¤§çš„领地 Info: - '&e用法: &6/res auto (领地åå­—) (范围)' - select: Description: 选å–命令 + select: Info: - - 该命令选择领地的范围 - - /res select [x] [y] [z] - 选择以你为中心一定范围的方å—. + - 以你为中心选择领地范围 + - /res select [x] [y] [z] - 以你为中心选择领地范围. + Description: 选择命令 SubCommands: coords: - Description: 显示已选择区域的åæ ‡ + Description: 显示选定的åæ ‡ Info: - - '&e用法: &6/res select coords' + - '&e使用方法: &6/res select coords' size: - Description: æ˜¾ç¤ºå·²é€‰æ‹©åŒºåŸŸçš„å¤§å° + Description: 显示选定的尺寸 Info: - - '&e用法: &6/res select size' + - '&e使用方法: &6/res select size' auto: - Description: 打开自动选择工具 + Description: å¼€å¯è‡ªåŠ¨é€‰æ‹©å·¥å…· Info: - - '&e用法: &6/res select auto [玩家]' + - '&e使用方法: &6/res select auto [玩家å称]' cost: - Description: 显示已选择区域的价格 + Description: 显示选定费用 Info: - - '&e用法: &6/res select cost' + - '&e使用方法: &6/res select cost' vert: Description: 纵å‘扩展选区 Info: - - '&e用法: &6/res select vert' + - '&e使用方法: &6/res select vert' - 将选区扩展到地图顶端和底端 sky: Description: 扩展选区到天空 Info: - - '&e用法: &6/res select sky' - - 将选区扩展到地图顶端 + - '&e使用方法: &6/res select sky' + - 将选区扩展到最高点 bedrock: Description: 扩展选区到基岩 Info: - - '&e用法: &6/res select bedrock' + - '&e使用方法: &6/res select bedrock' - 将选区扩展到地图底端 expand: Description: å‘一个方å‘扩展选区 Info: - - '&e用法: &6/res select expand <扩展å•ä½>' - - å‘é¢å¯¹çš„æ–¹å‘扩展 <扩展å•ä½> ä¸ªæ–¹å— + - '&e使用方法: &6/res select expand <扩展å•ä½>' + - 将以你é¢å¯¹çš„æ–¹å‘扩展 <扩展å•ä½> ä¸ªæ–¹å— shift: Description: å‘一个方å‘平移选区 Info: - - '&e用法: &6/res select shift <平移å•ä½>' - - 将选区å‘é¢å¯¹çš„æ–¹å‘平移 <平移å•ä½> ä¸ªæ–¹å— + - '&e使用方法: &6/res select shift <平移å•ä½>' + - 将选区以你é¢å¯¹çš„æ–¹å‘平移 <平移å•ä½> ä¸ªæ–¹å— chunk: Description: 选择你目å‰æ‰€åœ¨çš„åŒºå— Info: - - '&e用法: &6/res select chunk' - - 选择你目å‰æ‰€åœ¨çš„åŒºå— + - '&e使用方法: &6/res select chunk' + - 选择你目å‰æ‰€å¤„çš„åŒºå— residence: Description: 选择领地中一个存在的区域 Info: - - '&e用法: &6/res select residence <领地>' - - 选择 <领地> 中一个存在的区域 + - '&e使用方法: &6/res select residence <领地å称>' + - 选择 <领地å称> 中一个存在的区域 worldedit: - Description: 采用 WorldEdit 的选区 + Description: 使用当å‰WorldEdit(创世神)的选择æ¥è®¾ç½®é€‰åŒº Info: - - '&e用法: &6/res select worldedit' - - å°† WorldEdit ç›®å‰çš„选区作为领地选区 + - '&e使用方法: &6/res select worldedit' + - å°† WorldEdit(创世神) ç›®å‰çš„选区作为领地选区 padd: - Description: å‘领地添加玩家 Info: - - '&e用法: &6/res padd <领地å> [玩家]' + - '&e使用方法: &6/res padd <领地å称> [玩家å称]' - 为玩家添加基本æƒé™ + Description: å‘领地添加玩家 signconvert: - Description: å°† ResidenceSign 的告示牌转æ¢ä¸ºæ–°æ ¼å¼ Info: - - '&e用法: &6/res signconvert' + - '&e使用方法: &6/res signconvert' - å°è¯•è½¬æ¢å·²æœ‰çš„ ResidenceSign 告示牌 + Description: å°† ResidenceSign 的告示牌转æ¢ä¸ºæ–°æ ¼å¼ listallhidden: - Description: 显示所有éšè—领地 Info: - - '&e用法: &6/res listhidden <页ç >' + - '&e使用方法: &6/res listhidden <页ç >' - 显示所有玩家的éšè—领地 + Description: 显示所有éšè—领地 bank: - Description: 管ç†é¢†åœ°é“¶è¡Œ Info: - - '&e用法: &6/res bank [deposit/withdraw] <领地> [æ•°é¢]' + - '&e使用方法: &6/res bank [deposit=存入/withdraw=撤销] <领地å称> [æ•°é¢]' - 你必须站在领地中或者指定领地åå­— - - 你必须拥有 +bank æƒé™ + - 你必须拥有领地 bank æƒé™ + Description: 管ç†é¢†åœ°é“¶è¡Œ create: - Description: 创建领地 Info: - - '&e用法: &6/res create <领地å>' + - '&e使用方法: &6/res create [领地å称]' + Description: 创建领地 listall: - Description: 显示所有领地 Info: - - '&e用法: &6/res listall <页ç >' - - 显示所有玩家的领地 + - '&e使用方法: &6/res listall <页ç > <世界å称> <-a/-f>' + - 列出所有的领地 + Description: 列出所有领地 info: - Description: æ˜¾ç¤ºä¸€ä¸ªé¢†åœ°çš„ä¿¡æ¯ Info: - - '&e用法: &6/res info <领地>' - - 留空 <领地> 表示显示你目å‰æ‰€åœ¨çš„é¢†åœ°ä¿¡æ¯ + - '&e使用方法: &6/res info <领地å称>' + - 留空 <领地å称> 表示显示你目å‰æ‰€åœ¨çš„领地信æ¯. + Description: æ˜¾ç¤ºé¢†åœ°çš„ä¿¡æ¯ area: Description: 管ç†é¢†åœ°ç‰©ç†åŒºåŸŸ + Info: + - '' SubCommands: list: Description: 列出领地的物ç†åŒºåŸŸ Info: - - '&e用法: &6/res area list [领地] <页ç >' + - '&e使用方法: &6/res area list [领地å称] <页ç >' listall: Description: 列出所有区域的åæ ‡å’Œè¯¦ç»†ä¿¡æ¯ Info: - - '&e用法: &6/res area listall [领地] <页ç >' + - '&e使用方法: &6/res area listall [领地å称] <页ç >' add: Description: 为领地添加物ç†åŒºåŸŸ Info: - - '&e用法: &6/res area add [领地] [区域ID]' + - '&e使用方法: &6/res area add [领地å称] [区域ID]' - 你必须先选中两个选å–点 remove: Description: 移除领地的物ç†åŒºåŸŸ Info: - - '&e用法: &6/res area remove [领地] [区域ID]' + - '&e使用方法: &6/res area remove [领地å称] [区域ID]' replace: Description: 替æ¢é¢†åœ°çš„物ç†åŒºåŸŸ Info: - - '&e用法: &6/res area replace [领地] [区域ID]' + - '&e使用方法: &6/res area replace [领地å称] [区域ID]' - 你必须先选中两个选å–点 - - 如果新的区域更大, 二者之间将会被充满 + - 如果新的区域更大, 二者之间将会被充满. give: - Description: 给予一å玩家领地. Info: - - '&e用法: &6/res give <领地å> [玩家]' + - '&e使用方法: &6/res give <领地å称> [玩家å称] <-s>' - 将你拥有的æŸä¸ªé¢†åœ°èµ ä¸ŽæŸçŽ©å®¶ + Description: 给予一å玩家领地 renamearea: - Description: 修改领地åå­— Info: - - '&e用法: &6/res removeworld [领地] [æ—§åå­—] [æ–°åå­—]' + - '&e使用方法: &6/res removeworld [领地å称] [æ—§åå­—] [æ–°åå­—]' + Description: 修改领地åå­— contract: - Description: 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ° Info: - - '&e用法: &6/res contract (领地) [缩å°å•ä½]' + - '&e使用方法: &6/res contract (领地å称) [缩å°å•ä½]' - 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ°è§„模 - 领地å字是å¯é€‰çš„ + Description: 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ° check: - Description: 检查æƒé™çŠ¶æ€ Info: - - '&e用法: &6/res check [领地] [æƒé™] (玩家åå­—)' + - '&e使用方法: &6/res check [领地å称] [æƒé™] (玩家åå­—)' + Description: 检查æƒé™çŠ¶æ€ gset: - Description: 为æŸä¸ªç»„设置领地的特定æƒé™ Info: - - '&e用法: &6/res gset <领地> [组] [æƒé™] [true/false/remove]' + - '&e使用方法: &6/res gset <领地å称> [æƒé™ç»„] [æƒé™] [true/false/remove=移除]' - 输入 /res flags ? 查看æƒé™åˆ—表 + Description: 为æƒé™ç»„设置领地的特定æƒé™ list: - Description: 显示领地列表 Info: - - '&e用法: &6/res list <玩家> <页ç >' + - '&e使用方法: &6/res list <玩家å称> <页ç > <世界å称>' - 列出指定玩家拥有的所有领地 (除了éšè—领地) - 如果显示自己的领地, éšè—领地也会被显示 - - è¦åˆ—出所有玩家的领地, 使用 /res listall 命令 + - è¦åˆ—出所有玩家的领地, 使用命令 /res listall + Description: 显示领地列表 version: - Description: 显示 领地 的版本 Info: - - '&e用法: &6/res version' + - '&e使用方法: &6/res version' + Description: 显示领地æ’件版本 tool: - Description: 显示领地圈地和查看信æ¯çš„工具类型 Info: - - '&e用法: &6/res tool' + - '&e使用方法: &6/res tool' + Description: 显示领地圈地和查看信æ¯çš„工具类型 pdel: - Description: 从领地删除玩家 Info: - - '&e用法: &6/res pdel <领地å> [玩家]' + - '&e使用方法: &6/res pdel <领地å称> [玩家å称]' - 删除玩家的基本æƒé™ + Description: 从领地删除玩家 market: - Description: è´­ä¹°, 出售和出租领地 Info: - - '&e用法: &6/res market ? for more Info' + - '&e使用方法: &6/res market ? 了解更多信æ¯' + Description: è´­ä¹°, 出售和出租领地 SubCommands: Info: Description: 查看领地的ç»æµŽä¿¡æ¯ Info: - - '&e用法: &6/res market Info [领地]' - - 显示领地是å¦æ­£åœ¨å‡ºç§Ÿæˆ–出售, 以åŠé¢†åœ°çš„花费 + - '&e使用方法: &6/res market Info [领地å称]' + - 显示领地是å¦æ­£åœ¨å‡ºç§Ÿæˆ–出售, 以åŠé¢†åœ°çš„费用 list: Description: 显示å¯å‡ºç§Ÿä¸Žå¯å‡ºå”®çš„领地 Info: - - '&e用法: &6/res market list' + - '&e使用方法: &6/res market list [rent=租金/sell=出售]' SubCommands: rent: - Description: 列举å¯ä»¥ç§Ÿç”¨çš„领地 + Description: 列出å¯ä»¥ç§Ÿç”¨çš„领地 Info: - - '&e用法: &6/res market list rent' + - '&e使用方法: &6/res market list rent' sell: - Description: 列举å¯ä»¥å‡ºå”®çš„领地 + Description: 列出å¯ä»¥å‡ºå”®çš„领地 Info: - - '&e用法: &6/res market list sell' + - '&e使用方法: &6/res market list sell' sell: - Description: 出售一个领地 + Description: 出售领地 Info: - - '&e用法: &6/res market sell [领地] [售价]' - - 将领地以 [amount] 元的价格出售 + - '&e使用方法: &6/res market sell [领地å称] [售价]' + - 将领地以 [售价] 元的价格出售 - 其他玩家å¯ä»¥æ‰§è¡Œ /res market buy 命令购买 sign: Description: 设置市场木牌 Info: - - '&e用法: &6/res market sign [领地]' + - '&e使用方法: &6/res market sign [领地å称]' - 将看å‘的木牌设置为领地市场木牌 buy: - Description: 购买一个领地 + Description: 购买领地 Info: - - '&e用法: &6/res market buy [领地]' + - '&e使用方法: &6/res market buy [领地å称]' - 如果该领地正在出售, 则购买这个领地 unsell: Description: å–消出售领地 Info: - - '&e用法: &6/res market unsell [领地]' + - '&e使用方法: &6/res market unsell [领地å称]' rent: - Description: 租用一个领地 + Description: 租用领地 Info: - - '&e用法: &6/res market rent [领地] <自动续租>' - - 租用一个领地. <自动续租> å¯ä»¥æ˜¯ true 或 false. 如果是 true, 并且领地所有者å…许, 领地将会在租约到期之å‰è‡ªåŠ¨ç»­ç§Ÿ + - '&e使用方法: &6/res market rent [领地å称] <自动续租>' + - 租用一个领地. <自动续租> å¯ä»¥æ˜¯ true 或 false. 如果是 true, + 并且领地所有者å…许, 领地将会在租约到期之å‰è‡ªåŠ¨ç»­ç§Ÿ. rentable: Description: 将领地设置为å¯å‡ºç§Ÿ Info: - - '&e用法: &6/res market rentable [领地] [ä»·æ ¼] [天数] <周期>' - - 以 [ä»·æ ¼] 出租领地 [天数] 天. 如果 <周期> 为 true, 领地将会在租约结æŸåŽè‡ªåŠ¨å‡ºç§Ÿ. + - '&e使用方法: &6/res market rentable [领地å称] [ä»·æ ¼] [天数] <å…许续租> + <留在市场> <å…许自动付款>' + - 以 [ä»·æ ¼] 出租领地 [天数] + - 如果 <å…许续租> 等于 "teue" 在租金到期之å‰ï¼Œé¢†åœ°èƒ½å¤Ÿå†æ¬¡è¢«ç§Ÿç”¨ + - 如果 <留在市场> 等于 "teue" 在玩家退租åŽï¼Œé¢†åœ°å°†ç»§ç»­ç•™åœ¨å¸‚场上出租 + - 如果 <å…许自动付款> 等于 "teue" 如果玩家在租用时选择了这个选项,租用的费用就会自动从玩家的余é¢ä¸­æ‰£é™¤ autopay: Description: 开关领地自动支付 Info: - - '&e用法: &6/res market autopay <领地> [true/false]' + - '&e使用方法: &6/res market autopay [领地å称] [true/false]' payrent: Description: 支付租用的领地 Info: - - '&e用法: &6/res market payrent <领地>' + - '&e使用方法: &6/res market payrent [领地å称]' confirm: Description: 领地市场的确认æ“作 Info: - - '&e用法: &6/res market confirm' - release: - Description: å–消领地租èµçŠ¶æ€ + - '&e使用方法: &6/res market confirm' + unrent: + Description: 将领地从出租或å¯å‡ºç§Ÿä¸­ç§»é™¤ Info: - - '&e用法: &6/res market release [领地]' - - 如果你是租用者, 该命令将会退租领地 - - 如果你是所有者, 该命令将会收回领地 + - '&e使用方法: &6/res market unrent [领地å称]' + - 如果你是租用者,这个命令将为你释放领地的租金 + - 如果你是领地所有者,这个命令使领地ä¸å†å‡ºç§Ÿ rc: - Description: 加入当å‰æˆ–者指定的领地èŠå¤©é¢‘é“ Info: - - '&e用法: &6/res rc (领地)' - - 加入当å‰é¢†åœ°æˆ–者指定领地的èŠå¤©é¢‘é“ + - '&e使用方法: &6/res rc (领地å称)' + - 加入领地领地的èŠå¤©é¢‘é“ + Description: 加入领地èŠå¤©é¢‘é“ SubCommands: leave: - Description: 离开当å‰é¢‘é“ + Description: 离开领地èŠå¤©é¢‘é“ Info: - - '&e用法: &6/res rc leave' - - 如果你在一个领地频é“内, ä½ å°†ä¼šç¦»å¼€æ­¤é¢‘é“ + - '&e使用方法: &6/res rc leave' + - 如果你在一个领地èŠå¤©é¢‘é“内, ä½ å°†ä¼šç¦»å¼€æ­¤é¢‘é“ setcolor: - Description: 设置领地频é“文字颜色 + Description: 设置领地èŠå¤©é¢‘é“文字颜色 Info: - - '&e用法: &6/res rc setcolor [颜色代ç ]' - - 设置领地频é“文字颜色 + - '&e使用方法: &6/res rc setcolor [颜色代ç ]' + - 设置领地èŠå¤©é¢‘é“文字颜色 setprefix: - Description: 设置领地频é“å‰ç¼€ + Description: 设置领地èŠå¤©é¢‘é“å‰ç¼€ Info: - - '&e用法: &6/res rc setprefix [æ–°å‰ç¼€]' - - 设置领地频é“å‰ç¼€ + - '&e使用方法: &6/res rc setprefix [å‰ç¼€]' + - 设置领地èŠå¤©é¢‘é“å‰ç¼€ kick: - Description: 从频é“中踢出玩家 + Description: 从èŠå¤©é¢‘é“中踢出玩家 Info: - - '&e用法: &6/res rc kick [玩家]' - - 从领地频é“中踢出æŸçŽ©å®¶ + - '&e使用方法: &6/res rc kick [玩家å称]' + - 从领地èŠå¤©é¢‘é“中踢出æŸçŽ©å®¶ expand: - Description: å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地 Info: - - '&e用法: &6/res expand (领地) [扩展å•ä½]' + - '&e使用方法: &6/res expand (领地å称) [扩展å•ä½]' - å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地规模 - 领地å字是å¯é€‰çš„ + Description: å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地 compass: - Description: 设置指å—者指å‘领地 Info: - - '&e用法: &6/res compass <领地åå­—>' + - '&e使用方法: &6/res compass <领地åå­—>' + Description: 设置指å—者指å‘领地 lists: - Description: 预定义æƒé™åˆ—表 Info: - 预定义的æƒé™åˆ—表å¯ä»¥åº”用到领地上 + Description: 预定义æƒé™åˆ—表 SubCommands: add: Description: 添加一个列表 Info: - - '&e用法: &6/res lists add <列表å>' + - '&e使用方法: &6/res lists add <列表å称>' remove: Description: 删除一个列表 Info: - - '&e用法: &6/res lists remove <列表å>' + - '&e使用方法: &6/res lists remove <列表å称>' apply: Description: 将列表应用于领地 Info: - - '&e用法: &6/res lists apply <列表å> <领地>' + - '&e使用方法: &6/res lists apply <列表å称> <领地å称>' set: - Description: 设置列表全局æƒé™ + Description: 设置列表æƒé™ Info: - - '&e用法: &6/res lists set <列表å> <æƒé™> <值>' + - '&e使用方法: &6/res lists set <列表å称> <æƒé™> <值>' pset: Description: 设置列表玩家æƒé™ Info: - - '&e用法: &6/res lists pset <列表å> <玩家> <æƒé™> <值>' + - '&e使用方法: &6/res lists pset <列表å称> <玩家å称> <æƒé™> <值>' gset: - Description: 设置列表组æƒé™ + Description: 设置一个æƒé™ç»„的列表æƒé™ Info: - - '&e用法: &6/res lists view <列表å>' + - '&e使用方法: &6/res lists gset <列表å称> <æƒé™ç»„> <æƒé™> <值>' view: Description: 查看列表 Info: - - '&eUsage: &6/res lists view <列表å>' + - '&e使用方法: &6/res lists view <列表å称>' reset: - Description: 将领地设置还原为默认值 Info: - - '&e用法: &6/res reset <领地>' - - 将领地的所有æƒé™é‡ç½®. 你必须是领地所有者或者管ç†å‘˜ + - '&e使用方法: &6/res reset <领地å称/all>' + - 将领地的所有æƒé™é‡ç½®ä¸ºé»˜è®¤. 你必须是领地所有者或者管ç†å‘˜ + Description: 将领地é‡ç½®ä¸ºé»˜è®¤æƒé™ listhidden: - Description: 显示éšè—领地列表 Info: - - '&e用法: &6/res listhidden <玩家> <页ç >' - - 列出指定玩家拥有的éšè—领地 - resbank: - Description: 从领地银行借贷 + - '&e使用方法: &6/res listhidden <玩家å称> <页ç >' + - 列出玩家拥有的éšè—领地 + Description: 显示玩家的éšè—领地列表 + raid: Info: - - '&e用法: &6/res resbank [deposit/withdraw] [æ•°é‡]' + - '&e使用方法: &6/res raid start [resname] (玩家å称)' + - '&6/res raid stop [resname]' + - '&6/res raid kick [玩家å称]' + - '&6/res raid immunity [add/take/set/clear] [resname/currentres] [time]' + Description: 管ç†é¢†åœ°çš„çªè¢­ setmain: - Description: 设置主领地 Info: - - '&e用法: &6/res setmain (领地åå­—)' + - '&e使用方法: &6/res setmain (领地åå­—)' + - 将领地设为主è¦çš„ + Description: 设置主领地 server: - Description: 创建æœåŠ¡å™¨é¢†åœ° Info: - - '&e用法: &6/resadmin server [领地]' - - 创建一个属于æœåŠ¡å™¨æ‰€æœ‰çš„领地 + - '&e使用方法: &6/resadmin server [领地å称]' + - 设置一个属于æœåŠ¡å™¨æ‰€æœ‰çš„领地 + Description: 将领地设置æˆæœåŠ¡å™¨æ‰€æœ‰ rt: - Description: ä¼ é€åˆ°ä¸–界上的éšæœºä½ç½® Info: - - '&e用法: &6/res rt' - - 将你传é€åˆ°ä¸–界上的éšæœºä½ç½® + - '&e使用方法: &6/res rt (世界å称) (玩家å称)' + - 将你传é€åˆ°ä¸–界上éšæœºçš„ä½ç½® + Description: 世界éšæœºä¼ é€ mirror: - Description: é•œåƒæƒé™ Info: - - '&e查看 &6/res market ? 获å–帮助' + - '&e使用方法: &6/res mirror [æ¥æºé¢†åœ°] [目标领地]' + - 从一个领地到å¦ä¸€ä¸ªé¢†åœ°çš„æƒé™å…‹éš†,你必须是两个领地的所有人或管ç†å‘˜æ‰èƒ½åšåˆ°è¿™ä¸€ç‚¹ + Description: 克隆æƒé™ shop: Description: 管ç†é¢†åœ°å•†åº— Info: - - 管ç†é¢†åœ°çš„商店功能 + - 管ç†é¢†åœ°å•†åº—的功能 SubCommands: list: Description: 显示领地商店列表 Info: - - '&e用法: &6/res shop list' + - '&e使用方法: &6/res shop list' - 显示所有作为商店的领地 vote: Description: 为领地商店评分 Info: - - '&e用法: &6/res shop vote <领地> [分数]' + - '&e使用方法: &6/res shop vote <领地å称> [分数]' - 为当å‰æˆ–指定领地商店评分 like: Description: 为领地商店点赞 Info: - - '&e用法: &6/res shop like <领地>' + - '&e使用方法: &6/res shop like <领地å称>' - 为领地商店点一个赞 votes: Description: 显示领地商店评分 Info: - - '&e用法: &6/res shop votes <领地> <页ç >' + - '&e使用方法: &6/res shop votes <领地å称> <页ç >' - 显示当å‰æˆ–指定领地商店的评分列表 likes: Description: 显示领地商店的赞 Info: - - '&e用法: &6/res shop likes <领地> <页ç >' + - '&e使用方法: &6/res shop likes <领地å称> <页ç >' - 显示当å‰æˆ–指定领地商店的赞列表 setdesc: Description: 设置领地商店æè¿° Info: - - '&e用法: &6/res shop setdesc [æ述文字]' - - 设置领地商店æè¿°, 支æŒé¢œè‰²ä»£ç , 用 /n 表示æ¢è¡Œ + - '&e使用方法: &6/res shop setdesc [æ述文字]' + - 设置领地商店æè¿°,支æŒé¢œè‰²ä»£ç  + 使用 /n å¯ä»¥æ¢è¡Œ createboard: Description: åˆ›å»ºå•†åº—å®£ä¼ æ¿ Info: - - '&e用法: &6/res shop createboard [ä½ç½®]' + - '&e使用方法: &6/res shop createboard [ä½ç½®]' - 在选区ä½ç½®å»ºç«‹å•†åº—宣传æ¿. [ä½ç½®] 表示宣传æ¿çš„起始ä½ç½® deleteboard: Description: åˆ é™¤å•†åº—å®£ä¼ æ¿ Info: - - '&e用法: &6/res shop deleteboard' + - '&e使用方法: &6/res shop deleteboard' - å³å‡»å®£ä¼ æ¿çš„å‘Šç¤ºç‰Œä»¥åˆ é™¤å®£ä¼ æ¿ lset: Description: 更改黑åå•å’Œå¿½ç•¥åå•é€‰é¡¹ Info: - - '&e用法: &6/res lset <领地> [blacklist/ignorelist] [ææ–™]' - - '&e用法: &6/res lset <领地> Info' + - '&e使用方法: &6/res lset <领地å称> [blacklist=黑åå•/ignorelist=忽略列表] [ææ–™]' + - '&e使用方法: &6/res lset <领地å称> Info' - å°†æŸç‰©å“加入黑åå•ä»¥é˜»æ­¢è¿™ç§ç‰©å“被放置在领地中 - 忽略åå•ä¸­çš„物å“å°†ä¸ä¼šè¢«é¢†åœ°ä¿æŠ¤ + raidstatus: + Description: 查看领地的çªè¢­çŠ¶æ€ + Info: + - '&e使用方法: &6/res raidstatus (resName/玩家å称)' pset: - Description: 为æŸçŽ©å®¶è®¾å®šè¯¥é¢†åœ°çš„特定æƒé™ + Description: 为玩家设定该领地的特定æƒé™ Info: - - '&e用法: &6/res pset <领地> [玩家] [æƒé™] [true/false/remove]' - - '&e用法: &6/res pset <领地> [玩家] removeall' + - '&e使用方法: &6/res pset <领地å称> [玩家å称] [æƒé™] [true/false/remove=移除]' + - '&e使用方法: &6/res pset <领地å称> [玩家å称] removeall' - 输入 /res flags ? 查看æƒé™åˆ—表 show: Description: 显示领地的边界 Info: - - '&e用法: &6/res show <领地>' + - '&e使用方法: &6/res show <领地å称>' flags: Description: 领地æƒé™åˆ—表 Info: - - 对于大部分æƒé™æ¥è¯´, true 表示å…许, false 表示ç¦æ­¢è¿™ä¸€æ“作 + - 大部分æƒé™å¯ä»¥ä½¿ç”¨å‚æ•° true 表示å…许, false 表示ç¦æ­¢ SubCommands: anvil: + Translated: anvil - å…许或ç¦æ­¢ä½¿ç”¨é“ç § Description: å…许或ç¦æ­¢ä½¿ç”¨é“ç § Info: - - '&e用法: &6/res set/pset <领地> anvil true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> anvil true/false/remove=移除' admin: - Description: 玩家å¯ä»¥æ›´æ”¹é¢†åœ°æƒé™ + Translated: admin - 给予玩家设置领地的æƒé™ + Description: 给予玩家设置领地的æƒé™ Info: - - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res pset <领地å称> admin true/false/remove=移除' animalkilling: - Description: å…许或ç¦æ­¢å‡»æ€åŠ¨ç‰© + Translated: animalkilling - å…许或ç¦æ­¢çŽ©å®¶æ€æ­»åŠ¨ç‰© + Description: å…许或ç¦æ­¢çŽ©å®¶æ€æ­»åŠ¨ç‰© Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> animalkilling true/false/remove=移除' animals: + Translated: animals - å…许或ç¦æ­¢åŠ¨ç‰©ç”Ÿæˆ Description: å…许或ç¦æ­¢åŠ¨ç‰©ç”Ÿæˆ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> animals true/false/remove=移除' + anchor: + Translated: anchor - å…许或ä¸å…许使用é‡ç”Ÿé”š + Description: å…许或ä¸å…许使用é‡ç”Ÿé”š + Info: + - '&e使用方法: &6/res set/pset <领地å称> anchor true/false/remove=移除' + anvilbreak: + Translated: anvilbreak - å…许或ä¸å…许在领地断砧 + Description: å…许或ä¸å…许在领地断砧 + Info: + - '&e使用方法: &6/res set <领地å称> anvilbreak true/false/remove=移除' backup: - Description: 设置为Trueå¯ä»¥æ¢å¤åˆ°ä»¥å‰çš„备份 (需è¦WordEdit) + Translated: backup - å…许或ç¦æ­¢çŽ©å®¶åœ¨é¢†åœ°å†…骑马 + Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨é¢†åœ°å†…骑马 Info: - - '&e用法: &6/res set <领地> backup true/false/remove' + - '&e使用方法: &6/res set <领地å称> backup true/false/remove=移除' bank: - Description: å…许或ç¦æ­¢ä½¿ç”¨é¢†åœ°é“¶è¡Œ + Translated: bank - å…许或ç¦æ­¢çŽ©å®¶ä»Žé¢†åœ°é“¶è¡Œå­˜/å–é’± + Description: å…许或ç¦æ­¢çŽ©å®¶ä»Žé¢†åœ°é“¶è¡Œå­˜/å–é’± Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> bank true/false/remove=移除' bed: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ + Translated: bed - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ(ç¡è§‰) + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ(ç¡è§‰) + Info: + - '&e使用方法: &6/res set/pset <领地å称> bed true/false/remove=移除' + honey: + Translated: honey - å…许或ä¸å…许玩家获得蜂蜜 + Description: å…许或ä¸å…许玩家获得蜂蜜 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> honey true/false/remove=移除' + honeycomb: + Translated: honeycomb - å…许或ä¸å…许玩家获得蜂çªçŠ¶ç‰© + Description: å…许或ä¸å…许玩家获得蜂çªçŠ¶ç‰© + Info: + - '&e使用方法: &6/res set/pset <领地å称> honeycomb true/false/remove=移除' beacon: - Description: å…许或者ç¦æ­¢çŽ©å®¶ä½¿ç”¨ä¿¡æ ‡ + Translated: beacon - å…许或ç¦æ­¢çŽ©å®¶ä¸Žä¿¡æ ‡äº¤äº’ + Description: å…许或ç¦æ­¢çŽ©å®¶ä¸Žä¿¡æ ‡äº¤äº’ Info: - - '&e用法: &6/res set/pset <领地> beacon true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> beacon true/false/remove=移除' brew: + Translated: brew - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é…¿é€ å° Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é…¿é€ å° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> brew true/false/remove=移除' build: - Description: å…许或ç¦æ­¢å»ºé€  + Translated: build - å…许或ç¦æ­¢çŽ©å®¶åœ¨é¢†åœ°å†…建筑 + Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨é¢†åœ°å†…建筑 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> build true/false/remove=移除' burn: - Description: å…许或ç¦æ­¢æ€ªç‰©ç‡ƒçƒ§ + Translated: burn - å…许或ç¦æ­¢é¢†åœ°å†…的怪物燃烧 + Description: å…许或ç¦æ­¢é¢†åœ°å†…的怪物燃烧 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> burn true/false/remove=移除' button: + Translated: button - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰é’® Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰é’® Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> button true/false/remove=移除' cake: - Description: å…许或ç¦æ­¢çŽ©å®¶åƒè›‹ç³• + Translated: cake - å…许或ç¦æ­¢çŽ©å®¶é£Ÿç”¨è›‹ç³• + Description: å…许或ç¦æ­¢çŽ©å®¶é£Ÿç”¨è›‹ç³• Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> cake true/false/remove=移除' canimals: - Description: å…许或ç¦æ­¢è‡ªå®šä¹‰åŠ¨ç‰©ç”Ÿæˆ + Translated: canimals - å…许或ç¦æ­¢çŽ©å®¶é£Ÿç”¨è›‹ç³• + Description: å…许或ç¦æ­¢çŽ©å®¶é£Ÿç”¨è›‹ç³• Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> canimals true/false/remove=移除' chorustp: - Description: å…许或者ç¦æ­¢çŽ©å®¶ä½¿ç”¨ç´«å½±æžœ + Translated: chorustp - å…许或ç¦æ­¢çŽ©å®¶é€šè¿‡ç´«é¢‚果传é€åˆ°é¢†åœ° + Description: å…许或ç¦æ­¢çŽ©å®¶é€šè¿‡ç´«é¢‚果传é€åˆ°é¢†åœ° Info: - - '&e用法: &6/res set/pset <领地> chorustp true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> chorustp true/false/remove=移除' chat: - Description: å…许加入领地èŠå¤©é¢‘é“ + Translated: chat - å…许或ç¦æ­¢çŽ©å®¶åŠ å…¥é¢†åœ°èŠå¤©é¢‘é“ + Description: å…许或ç¦æ­¢çŽ©å®¶åŠ å…¥é¢†åœ°èŠå¤©é¢‘é“ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> chat true/false/remove=移除' cmonsters: + Translated: cmonsters - å…许或ç¦æ­¢è‡ªå®šä¹‰æ€ªç‰©ç”Ÿæˆ Description: å…许或ç¦æ­¢è‡ªå®šä¹‰æ€ªç‰©ç”Ÿæˆ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> cmonsters true/false/remove=移除' commandblock: - Description: å…许或ç¦æ­¢ä½¿ç”¨å‘½ä»¤æ–¹å— + Translated: commandblock - å…许或ç¦æ­¢ä¸Žå‘½ä»¤æ–¹å—交互 + Description: å…许或ç¦æ­¢ä¸Žå‘½ä»¤æ–¹å—交互 Info: - - '&e用法: &6/res set/pset <领地> commandblock true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> commandblock true/false/remove=移除' command: - Description: å…许或ç¦æ­¢æ‰§è¡Œå‘½ä»¤ + Translated: command - å…许或ç¦æ­¢åœ¨é¢†åœ°å†…的命令 + Description: å…许或ä¸å…许在领地中使用命令,需è¦ä¸Žcommandblockæƒé™ä¸€èµ·ä½¿ç”¨ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> command true/false/remove=移除' container: - Description: å…许或ç¦æ­¢ä½¿ç”¨ç†”炉, ç®±å­, å‘射器等... + Translated: container - å…许或ç¦æ­¢ä½¿ç”¨ç®±å­ï¼Œå‘射器,熔炉等容器 + Description: å…许或ç¦æ­¢ä½¿ç”¨ç®±å­ï¼Œå‘射器,熔炉等容器... Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> container true/false/remove=移除' coords: - Description: éšè—领地的åæ ‡ + Translated: coords - éšè—领地åæ ‡ + Description: éšè—领地åæ ‡ + Info: + - '&e使用方法: &6/res set <领地å称> coords true/false/remove=移除' + copper: + Translated: copper - å…许或ç¦æ­¢ä¿®æ”¹é“œå— + Description: å…许或ç¦æ­¢ä¿®æ”¹é“œå— Info: - - '&e用法: &6/res set <领地> coords true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> copper true/false/remove=移除' craft: - Description: 给予 table, enchant å’Œ brew æƒé™ + Translated: craft - 给予 table, enchant and brew æƒé™ + Description: 给予 table, enchant and brew æƒé™ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> craft true/false/remove=移除' creeper: - Description: å…许或ç¦æ­¢çˆ¬è¡Œè€…爆炸 + Translated: creeper - å…许或ç¦æ­¢è‹¦åŠ›æ€•çˆ†ç‚¸ + Description: å…许或ç¦æ­¢è‹¦åŠ›æ€•çˆ†ç‚¸ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> creeper true/false/remove=移除' dragongrief: - Description: 防止末影龙破åæ–¹å— + Translated: dragongrief - å…许或ç¦æ­¢æœ«å½±é¾™ç ´åæ–¹å— + Description: å…许或ç¦æ­¢æœ«å½±é¾™ç ´åæ–¹å— Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> dragongrief true/false/remove=移除' day: - Description: 领地ä¿æŒç™½å¤© + Translated: day - 设置领地内的时间 + Description: 设置领地内的时间 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> day true/false/remove=移除' dye: - Description: å…许或ç¦æ­¢ä¸ºç¾Šæ¯›æŸ“色 + Translated: dye - å…许或ç¦æ­¢ç»™ç¾ŠæŸ“色 + Description: å…许或ç¦æ­¢ç»™ç¾ŠæŸ“色 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> dye true/false/remove=移除' damage: - Description: å…许或ç¦æ­¢æ‰€æœ‰å®žä½“伤害 + Translated: damage - å…许或ç¦æ­¢é¢†åœ°å†…的实体造æˆä¼¤å®³ + Description: å…许或ç¦æ­¢é¢†åœ°å†…的实体造æˆä¼¤å®³ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> damage true/false/remove=移除' decay: - Description: å…许或者ç¦æ­¢æ ‘å¶å‡‹æ• + Translated: decay - å…许或ç¦æ­¢é¢†åœ°å†…çš„æ ‘å¶å‡‹è½ + Description: å…许或ç¦æ­¢é¢†åœ°å†…çš„æ ‘å¶å‡‹è½ Info: - - '&e用法: &6/res set <领地> decay true/false/remove' + - '&e使用方法: &6/res set <领地å称> decay true/false/remove=移除' destroy: - Description: åªå…许或ç¦æ­¢ç ´åæ–¹å—, 该æƒé™è¦†ç›– build æƒé™ + Translated: destroy - å…许或ç¦æ­¢ç ´åæ–¹å—,会覆盖buildæƒé™ + Description: å…许或ç¦æ­¢ç ´åæ–¹å—,会覆盖buildæƒé™ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> destroy true/false/remove=移除' dryup: - Description: ä¿æŠ¤è€•åœ°å¤±åŽ»æ°´åˆ† + Translated: dryup - å…许或ç¦æ­¢è€•åœ°å¹²æž¯ + Description: å…许或ç¦æ­¢è€•åœ°å¹²æž¯ Info: - - '&e用法: &6/res set <领地> dryup true/false/remove' + - '&e使用方法: &6/res set <领地å称> dryup true/false/remove=移除' diode: + Translated: diode - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨çº¢çŸ³ä¸­ç»§å™¨ Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨çº¢çŸ³ä¸­ç»§å™¨ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> diode true/false/remove=移除' door: - Description: å…许或ç¦æ­¢çŽ©å®¶å¼€å…³é—¨å’Œæ´»æ¿é—¨ + Translated: door - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é—¨å’Œæ´»æ¿é—¨ + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é—¨å’Œæ´»æ¿é—¨ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> door true/false/remove=移除' egg: - Description: å…许或ç¦æ­¢ç‚¹å‡»æœ«å½±é¾™è›‹ + Translated: egg - å…许或ç¦æ­¢ä¸Žé¾™è›‹äº¤äº’ + Description: å…许或ç¦æ­¢ä¸Žé¾™è›‹äº¤äº’ Info: - - '&e用法: &6/res set/pset <领地> egg true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> egg true/false/remove=移除' enchant: + Translated: enchant - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> enchant true/false/remove=移除' explode: - Description: å…许或ç¦æ­¢çˆ†ç‚¸ + Translated: explode - å…许或ç¦æ­¢é¢†åœ°å†…的爆炸 + Description: å…许或ç¦æ­¢é¢†åœ°å†…的爆炸 + Info: + - '&e使用方法: &6/res set <领地å称> explode true/false/remove=移除' + elytra: + Translated: elytra - å…许或ä¸å…许在领地中使用鞘翅 + Description: å…许或ä¸å…许在领地中使用鞘翅 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> elytra true/false/remove=移除' enderpearl: - Description: å…许或ç¦æ­¢ç”¨æœ«å½±çç ä¼ é€è‡³æ­¤é¢†åœ° + Translated: enderpearl - å…许或ç¦æ­¢é€šè¿‡æœ«å½±çç ä¼ é€åˆ°é¢†åœ° + Description: å…许或ç¦æ­¢é€šè¿‡æœ«å½±çç ä¼ é€åˆ°é¢†åœ° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> enderpearl true/false/remove=移除' fallinprotection: - Description: 防止掉è½çš„æ–¹å—进入领地 + Translated: fallinprotection - å…许或ç¦æ­¢æ–¹å—从领地上方掉è½åˆ°é¢†åœ°å†… + Description: å…许或ç¦æ­¢æ–¹å—从领地上方掉è½åˆ°é¢†åœ°å†…(例如沙å­å’Œæ²™ç ¾) Info: - - '&e用法: &6/res set <领地> fallinprotection true/false/remove' + - '&e使用方法: &6/res set <领地å称> fallinprotection true/false/remove=移除' falldamage: - Description: 开关玩家å è½ä¼¤å®³ + Translated: falldamage - å…许或ç¦æ­¢é¢†åœ°å†…çš„è·Œè½ä¼¤å®³ + Description: å…许或ç¦æ­¢é¢†åœ°å†…çš„è·Œè½ä¼¤å®³ Info: - - '&e用法: &6/res set <领地> falldamage true/false/remove' + - '&e使用方法: &6/res set <领地å称> falldamage true/false/remove=移除' feed: - Description: 为领地内的玩家æ¢å¤é¥±é£Ÿ + Translated: feed - å…许或ç¦æ­¢å–‚食 + Description: 如果å…许将使领地为其居ä½è€…æ供食物 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> feed true/false/remove=移除' + friendlyfire: + Translated: friendlyfire - å…许或ç¦æ­¢å‹å†›å¼€ç«(待实测) + Description: å…许或ä¸å…许å‹å†›å¼€ç«(待实测) + Info: + - '&e使用方法: &6/res pset <领地å称> friendlyfire true/false/remove=移除' fireball: - Description: å…许或ç¦æ­¢ç«ç„°å¼¹ + Translated: fireball - å…许或ç¦æ­¢ç«çƒ + Description: å…许或ç¦æ­¢ç«çƒ,当设置为True或remove的时候为å…许 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> fireball true/false/remove=移除' firespread: - Description: å…许或ç¦æ­¢ç«ç„°è”“延 + Translated: firespread - å…许或ç¦æ­¢ç«ç„°è”“延 + Description: å…许或ç¦æ­¢ç«ç„°è”“延,当设置为True或remove的时候为å…许 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> firespread true/false/remove=移除' flowinprotection: - Description: å…许或ç¦æ­¢æ¶²ä½“æµå…¥é¢†åœ° + Translated: flowinprotection - å…许或ç¦æ­¢æ¶²ä½“从领地外æµå‘领地内 + Description: å…许或ç¦æ­¢æ¶²ä½“从领地外æµå‘领地内,当设置为True或remove的时候为å…许 Info: - - '&e用法: &6/res set <领地> flowinprotection true/false/remove' + - '&e使用方法: &6/res set <领地å称> flowinprotection true/false/remove=移除' flow: + Translated: flow - å…许或ç¦æ­¢æ¶²ä½“æµåŠ¨ Description: å…许或ç¦æ­¢æ¶²ä½“æµåŠ¨ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> flow true/false/remove=移除' flowerpot: - Description: å…许或ç¦æ­¢ç‚¹å‡»èŠ±ç›† + Translated: flowerpot - å…许或ç¦æ­¢ä¸ŽèŠ±ç›†äº¤äº’ + Description: å…许或ç¦æ­¢ä¸ŽèŠ±ç›†äº¤äº’ Info: - - '&e用法: &6/res set/pset <领地> flowerpot true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> flowerpot true/false/remove=移除' grow: - Description: å…许或ç¦æ­¢ä½œç‰©ç”Ÿé•¿ + Translated: grow - å…许或ç¦æ­¢æ¤ç‰©ç”Ÿé•¿ + Description: å…许或ç¦æ­¢æ¤ç‰©ç”Ÿé•¿ Info: - - '&e用法: &6/res set <领地> grow true/false/remove' + - '&e使用方法: &6/res set <领地å称> grow true/false/remove=移除' glow: - Description: 玩家进入领地会有å‘光效果 + Translated: glow - å…许或ç¦æ­¢çŽ©å®¶è¿›å…¥é¢†åœ°æ—¶å‘å…‰ + Description: å…许或ç¦æ­¢çŽ©å®¶è¿›å…¥é¢†åœ°æ—¶å‘å…‰ Info: - - '&e用法: &6/res set <领地> glow true/false/remove' + - '&e使用方法: &6/res set <领地å称> glow true/false/remove=移除' hotfloor: - Description: 开关岩浆å—的伤害 + Translated: hotfloor - å…许或ç¦æ­¢åœ¨å²©æµ†æ–¹å—上行走造æˆçš„伤害 + Description: å…许或ç¦æ­¢åœ¨å²©æµ†æ–¹å—上行走造æˆçš„伤害 Info: - - '&e用法: &6/res set <领地> hotfloor true/false/remove' + - '&e使用方法: &6/res set <领地å称> hotfloor true/false/remove=移除' hidden: - Description: 在 list 或 listall 命令中éšè—此领地 + Translated: hidden - 在"list"或"listall"命令中éšè—此领地 + Description: 在"list"或"listall"命令中éšè—此领地 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> hidden true/false/remove=移除' hook: - Description: å…许或ç¦æ­¢ä½¿ç”¨é±¼ç«¿æ”»å‡»å®žä½“ + Translated: hook - å…许或ç¦æ­¢é±¼ç«¿é’“到实体 + Description: å…许或ç¦æ­¢é±¼ç«¿é’“到实体 Info: - - '&e用法: &6/res set/pset <领地> hook true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> hook true/false/remove=移除' healing: - Description: 为领地内的玩家治疗 + Translated: healing - å…许或ç¦æ­¢é¢†åœ°æ²»ç–—领地居ä½è€… + Description: å…许或ç¦æ­¢é¢†åœ°æ²»ç–—领地居ä½è€… Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> healing true/false/remove=移除' iceform: - Description: 阻止冰霜行者魔咒å‘挥作用 + Translated: iceform - å…许或ç¦æ­¢ç»“冰 + Description: å…许或ç¦æ­¢ç»“冰 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> iceform true/false/remove=移除' icemelt: - Description: 开关冰的èžåŒ– + Translated: icemelt - å…许或ç¦æ­¢å†°èžåŒ– + Description: å…许或ç¦æ­¢å†°èžåŒ– Info: - - '&e用法: &6/res set <领地> icemelt true/false/remove' + - '&e使用方法: &6/res set <领地å称> icemelt true/false/remove=移除' ignite: + Translated: ignite - å…许或ç¦æ­¢ç‚¹ç« Description: å…许或ç¦æ­¢ç‚¹ç« Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> ignite true/false/remove=移除' + itemdrop: + Translated: itemdrop - å…许或ç¦æ­¢ç‰©å“æŽ‰è½ + Description: å…许或ç¦æ­¢ç‰©å“æŽ‰è½ + Info: + - '&e使用方法: &6/res set/pset <领地å称> itemdrop true/false/remove=移除' + itempickup: + Translated: itempickup - å…许或拒ç»é¢†å–ç‰©å“ + Description: å…许或拒ç»é¢†å–ç‰©å“ + Info: + - '&e使用方法: &6/res set/pset <领地å称> itempickup true/false/remove=移除' jump2: - Description: å…许跳2格高 + Translated: jump2 - å…许或ç¦æ­¢çŽ©å®¶è·³è·ƒé«˜åº¦åœ¨ä¸¤ä¸ªæ–¹å—以上 + Description: å…许或ç¦æ­¢çŽ©å®¶è·³è·ƒé«˜åº¦åœ¨ä¸¤ä¸ªæ–¹å—以上 Info: - - '&e用法: &6/res set jump2 true/false/remove' + - '&e使用方法: &6/res set <领地å称> jump2 true/false/remove=移除' jump3: - Description: å…许跳3格高 + Translated: jump3 - å…许或ç¦æ­¢çŽ©å®¶è·³è·ƒé«˜åº¦åœ¨ä¸‰ä¸ªæ–¹å—以上 + Description: å…许或ç¦æ­¢çŽ©å®¶è·³è·ƒé«˜åº¦åœ¨ä¸‰ä¸ªæ–¹å—以上 Info: - - '&e用法: &6/res set jump3 true/false/remove' + - '&e使用方法: &6/res set <领地å称> jump3 true/false/remove=移除' keepinv: - Description: 玩家死亡ä¸ä¼šæŽ‰è½ç‰©å“ + Translated: keepinv - å…许或ç¦æ­¢çŽ©å®¶åœ¨æ­»åŽä¿ç•™èƒŒåŒ… + Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨æ­»åŽä¿ç•™èƒŒåŒ… Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> keepinv true/false/remove=移除' keepexp: - Description: 玩家死亡ä¸ä¼šæŸå¤±ç»éªŒ + Translated: keepexp - å…许或ç¦æ­¢çŽ©å®¶åœ¨æ­»åŽä¿ç•™ç­‰çº§ + Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨æ­»åŽä¿ç•™ç­‰çº§ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> keepexp true/false/remove=移除' lavaflow: - Description: å…许或ç¦æ­¢å²©æµ†æµåŠ¨, 该æƒé™è¦†ç›– flow æƒé™ + Translated: lavaflow - å…许或ç¦æ­¢ç†”浆æµåŠ¨ + Description: å…许或ç¦æ­¢ç†”浆æµåŠ¨,覆盖flowæƒé™ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> lavaflow true/false/remove=移除' leash: - Description: å…许或ç¦æ­¢ç‰µå¼•åŠ¨ç‰© + Translated: leash - å…许或ç¦æ­¢æ‹´ç»³ + Description: å…许或ç¦æ­¢æ‹´ç»³ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> leash true/false/remove=移除' lever: + Translated: lever - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æ‹‰æ† Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æ‹‰æ† Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> lever true/false/remove=移除' mobexpdrop: - Description: 怪物死亡ä¸ä¼šæŽ‰è½ç»éªŒ + Translated: mobexpdrop - å…许或ç¦æ­¢æ€ªç‰©ç»éªŒæŽ‰è½ + Description: å…许或ç¦æ­¢æ€ªç‰©ç»éªŒæŽ‰è½ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> mobexpdrop true/false/remove=移除' mobitemdrop: - Description: 怪物死亡ä¸ä¼šæŽ‰è½ç‰©å“ + Translated: mobitemdrop - å…许或ç¦æ­¢æ€ªç‰©ç‰©å“æŽ‰è½ + Description: å…许或ç¦æ­¢æ€ªç‰©ç‰©å“æŽ‰è½ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> mobitemdrop true/false/remove=移除' mobkilling: - Description: å…许或ç¦æ­¢å‡»æ€æ€ªç‰© + Translated: mobkilling - å…许或ç¦æ­¢æ€æ­»æ€ªç‰© + Description: å…许或ç¦æ­¢æ€æ­»æ€ªç‰© Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> mobkilling true/false/remove=移除' monsters: + Translated: monsters - å…许或ç¦æ­¢æ€ªç‰©ç”Ÿæˆ Description: å…许或ç¦æ­¢æ€ªç‰©ç”Ÿæˆ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> monsters true/false/remove=移除' move: - Description: å…许或ç¦æ­¢ç§»åŠ¨ + Translated: move - å…许或ç¦æ­¢åœ¨é¢†åœ°å†…移动 + Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…移动 + Info: + - '&e使用方法: &6/res set/pset <领地å称> move true/false/remove=移除' + nametag: + Translated: nametag - å…许或ä¸å…许使用å牌(待实测) + Description: å…许或ä¸å…许使用å牌(待实测) Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> nametag true/false/remove=移除' nanimals: - Description: å…许或ç¦æ­¢è‡ªç„¶ç”ŸæˆåŠ¨ç‰© + Translated: nanimals - å…许或ç¦æ­¢è‡ªç„¶çš„åŠ¨ç‰©ç”Ÿæˆ + Description: å…许或ç¦æ­¢è‡ªç„¶çš„åŠ¨ç‰©ç”Ÿæˆ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> nanimals true/false/remove=移除' nmonsters: - Description: å…许或ç¦æ­¢è‡ªç„¶ç”Ÿæˆæ€ªç‰© + Translated: nmonsters - å…许或ç¦æ­¢è‡ªç„¶æ€ªç‰©ç”Ÿæˆ + Description: å…许或ç¦æ­¢è‡ªç„¶æ€ªç‰©ç”Ÿæˆ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> nmonsters true/false/remove=移除' night: - Description: 领地ä¿æŒå¤œé—´ + Translated: night - 设置领地的时间为晚上 + Description: 设置领地的时间为晚上 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> night true/false/remove=移除' nofly: - Description: å…许或ç¦æ­¢é£žè¡Œ + Translated: nofly - å…许或ç¦æ­¢çŽ©å®¶é£žè¿›é¢†åœ° + Description: å…许或ç¦æ­¢çŽ©å®¶é£žè¿›é¢†åœ° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> nofly true/false/remove=移除' fly: - Description: è®¾ç½®é¢†åœ°å†…çš„çŽ©å®¶é£žè¡ŒçŠ¶æ€ + Translated: fly - å…许或ç¦æ­¢é¢†åœ°å†…飞行 + Description: å…许或ç¦æ­¢é¢†åœ°å†…飞行 Info: - - '&e用法: &6/res set/pset <领地> fly true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> fly true/false/remove=移除' nomobs: + Translated: nomobs - å…许或ç¦æ­¢æ€ªç‰©è¿›å…¥é¢†åœ° Description: å…许或ç¦æ­¢æ€ªç‰©è¿›å…¥é¢†åœ° Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> nomobs true/false/remove=移除' note: + Translated: note - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³ç¬¦ç›’ Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³ç¬¦ç›’ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> note true/false/remove=移除' nodurability: - Description: 物å“ä¸ä¼šæŸå¤±è€ä¹… + Translated: nodurability - å…许或ç¦æ­¢ç‰©å“è€ä¹…度æŸè€— + Description: å…许或ç¦æ­¢ç‰©å“è€ä¹…度æŸè€— Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> nodurability true/false/remove=移除' overridepvp: - Description: 覆盖任何æ’件的 PVP ä¿æŠ¤ + Translated: overridepvp - å…许或ç¦æ­¢å…¶ä»–æ’件的PVPä¿æŠ¤ + Description: å…许或ç¦æ­¢å…¶ä»–æ’件的PVPä¿æŠ¤ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> overridepvp true/false/remove=移除' pressure: + Translated: pressure - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åŽ‹åŠ›æ¿ Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åŽ‹åŠ›æ¿ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> pressure true/false/remove=移除' piston: - Description: å…许或ç¦æ­¢æ´»å¡žæŽ¨æ‹‰æ–¹å— + Translated: piston - å…许或ç¦æ­¢ä½¿ç”¨æ´»å¡ž + Description: å…许或ç¦æ­¢ä½¿ç”¨æ´»å¡ž Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> piston true/false/remove=移除' pistonprotection: - Description: å…许或者ç¦æ­¢æ´»å¡žä»Žé¢†åœ°å¤–æŽ¨åŠ¨é¢†åœ°å†…çš„æ–¹å— + Translated: pistonprotection - å…许或ç¦æ­¢é¢†åœ°å¤–的活塞移动至领地内 + Description: å…许或ç¦æ­¢é¢†åœ°å¤–的活塞移动至领地内 Info: - - '&e用法: &6/res set <领地> pistonprotection true/false/remove' + - '&e使用方法: &6/res set <领地å称> pistonprotection true/false/remove=移除' place: - Description: åªå…许或ç¦æ­¢æ”¾ç½®æ–¹å—, 该æƒé™è¦†ç›– build æƒé™ + Translated: place - å…许或ç¦æ­¢æ–¹å—的放置 + Description: å…许或ç¦æ­¢æ–¹å—的放置,覆盖buildæƒé™ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> place true/false/remove=移除' pvp: - Description: å…许或ç¦æ­¢é¢†åœ°å†… PVP + Translated: pvp - å…许或ç¦æ­¢é¢†åœ°ä¸­PVP + Description: å…许或ç¦æ­¢é¢†åœ°ä¸­PVP Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> pvp true/false/remove=移除' rain: - Description: 设置领地天气为下雨 - Info: - - '&e用法: &6/res set <领地> rain true/false/remove' - redstone: - Description: 给予 lever, diode, button, pressure å’Œ note æƒé™ + Translated: rain - 设置领地天气为雨天 + Description: 设置领地天气为雨天 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> rain true/false/remove=移除' respawn: - Description: 自动é‡ç”ŸçŽ©å®¶ + Translated: respawn - å…许或ç¦æ­¢è‡ªåŠ¨å¤æ´»ä¸€ä¸ªçŽ©å®¶ + Description: å…许或ç¦æ­¢è‡ªåŠ¨å¤æ´»ä¸€ä¸ªçŽ©å®¶ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> respawn true/false/remove=移除' riding: - Description: 阻止骑乘马匹 + Translated: riding - å…许或ç¦æ­¢éª‘马 + Description: å…许或ç¦æ­¢éª‘马 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> riding true/false/remove=移除' shoot: - Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…射击 + Translated: shoot - å…许或ç¦æ­¢åœ¨é¢†åœ°å†…使用弓箭 + Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…使用弓箭 Info: - - '&e用法: &6/res set <领地> shoot true/false/remove' + - '&e使用方法: &6/res set <领地å称> shoot true/false/remove=移除' sun: - Description: 设置领地天气为晴天 + Translated: sun - 设置领地内的天气为天晴 + Description: 设置领地内的天气为天晴 Info: - - '&e用法: &6/res set <领地> sun true/false/remove' + - '&e使用方法: &6/res set <领地å称> sun true/false/remove=移除' shop: - Description: 将领地设置为商店 + Translated: shop - 将领地添加到特殊领地商店列表中 + Description: 将领地添加到特殊领地商店列表中 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> shop true/false/remove=移除' snowtrail: - Description: 防止雪傀儡留下雪轨迹 + Translated: snowtrail - å…许或ç¦æ­¢é›ªå‚€å„¡ç§»åŠ¨é€ æˆçš„雪迹 + Description: å…许或ç¦æ­¢é›ªå‚€å„¡ç§»åŠ¨é€ æˆçš„雪迹 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> snowtrail true/false/remove=移除' spread: - Description: 防止方å—扩散 + Translated: spread - å…许或ç¦æ­¢æ–¹å—蔓延 + Description: å…许或ç¦æ­¢æ–¹å—蔓延 Info: - - '&e用法: &6/res set <领地> spread true/false/remove' + - '&e使用方法: &6/res set <领地å称> spread true/false/remove=移除' snowball: - Description: 防止雪çƒå‡»é€€æ•ˆæžœ + Translated: snowball - å…许或ç¦æ­¢é›ªçƒå‡»é€€ + Description: å…许或ç¦æ­¢é›ªçƒå‡»é€€ Info: - - '&e用法: &6/res set <领地> snowball true/false/remove' + - '&e使用方法: &6/res set <领地å称> snowball true/false/remove=移除' sanimals: - Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼å’Œåˆ·æ€ªè›‹ç”ŸæˆåŠ¨ç‰© + Translated: sanimals - å…许或ç¦æ­¢åŠ¨ç‰©çš„蛋生æˆåŠ¨ç‰© + Description: å…许或ç¦æ­¢åŠ¨ç‰©çš„蛋生æˆåŠ¨ç‰© Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> sanimals true/false/remove=移除' shear: + Translated: shear - å…许或ç¦æ­¢å‰ªç¾Šæ¯› Description: å…许或ç¦æ­¢å‰ªç¾Šæ¯› Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> shear true/false/remove=移除' smonsters: - Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼å’Œåˆ·æ€ªè›‹ç”Ÿæˆæ€ªç‰© + Translated: smonsters - å…许或ç¦æ­¢æ€ªç‰©çš„蛋生æˆæ€ªç‰© + Description: å…许或ç¦æ­¢æ€ªç‰©çš„蛋生æˆæ€ªç‰© Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> smonsters true/false/remove=移除' subzone: - Description: å…许玩家建立领地å­åŒºåŸŸ + Translated: subzone - å…许或ç¦æ­¢åˆ›å»ºå­é¢†åœ° + Description: å…许或ç¦æ­¢åˆ›å»ºå­é¢†åœ° Info: - - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> subzone true/false/remove=移除' + title: + Translated: title - 显示或éšè—领地进入/ç¦»å¼€ä¿¡æ¯ + Description: 显示或éšè—领地进入/ç¦»å¼€ä¿¡æ¯ + Info: + - '&e使用方法: &6/res set <领地å称> title true/false/remove=移除' table: + Translated: table - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> table true/false/remove=移除' tnt: - Description: å…许或ç¦æ­¢ TNT 爆炸 + Translated: tnt - å…许或ç¦æ­¢TNT爆炸 + Description: å…许或ç¦æ­¢TNT爆炸 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> tnt true/false/remove=移除' tp: - Description: å…许或ç¦æ­¢ä¼ é€è‡³æ­¤é¢†åœ° + Translated: tp - å…许或ç¦æ­¢ä¼ é€åˆ°é¢†åœ° + Description: å…许或ç¦æ­¢ä¼ é€åˆ°é¢†åœ° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> tp true/false/remove=移除' trade: - Description: å…许或ç¦æ­¢æ‘民交易 + Translated: trade - å…许或ç¦æ­¢åœ¨é¢†åœ°å†…与æ‘民进行交易 + Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…与æ‘民进行交易 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> trade true/false/remove=移除' trample: - Description: å…许或ç¦æ­¢è¸©å耕地 - Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - trusted: - Description: 给予 build, use, move, container å’Œ tp æƒé™ + Translated: trample - å…许或ç¦æ­¢åœ¨é¢†åœ°å†…è·µè¸ä½œç‰© + Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…è·µè¸ä½œç‰© Info: - - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> trample true/false/remove=移除' use: - Description: å…许或ç¦æ­¢ä½¿ç”¨é—¨, 拉æ†, 按钮等... + Translated: use - 控制在领地中的一些交互æƒé™ + Description: å…许或ç¦æ­¢ä½¿ç”¨é—¨ã€æ æ†ã€æŒ‰é’®ç­‰... Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> use true/false/remove=移除' vehicledestroy: + Translated: vehicledestroy - å…许或ç¦æ­¢ç ´å载具 Description: å…许或ç¦æ­¢ç ´å载具 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set/pset <领地å称> vehicledestroy true/false/remove=移除' witherspawn: + Translated: witherspawn - å…许或ç¦æ­¢å‡‹é›¶ç”Ÿæˆ Description: å…许或ç¦æ­¢å‡‹é›¶çš„ç”Ÿæˆ Info: - - '&e用法: &6/res set <领地> witherspawn true/false/remove' + - '&e使用方法: &6/res set <领地å称> witherspawn true/false/remove=移除' + phantomspawn: + Translated: phantomspawn - å…许或ç¦æ­¢å¹»ç¿¼ç”Ÿæˆ + Description: å…许或ç¦æ­¢å¹»ç¿¼ç”Ÿæˆ + Info: + - '&e使用方法: &6/res set <领地å称> phantomspawn true/false/remove=移除' witherdamage: - Description: ç¦æ­¢å‡‹çµé€ æˆä¼¤å®³ + Translated: witherdamage - å…许或ç¦æ­¢é¢†åœ°å†…的凋零造æˆä¼¤å®³ + Description: å…许或ç¦æ­¢é¢†åœ°å†…的凋零造æˆä¼¤å®³ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> witherdamage true/false/remove=移除' witherdestruction: - Description: å…许或ç¦æ­¢å‡‹é›¶ç ´åæ–¹å— + Translated: witherdestruction - å…许或ç¦æ­¢é¢†åœ°å†…凋零破åæ–¹å— + Description: å…许或ç¦æ­¢é¢†åœ°å†…凋零破åæ–¹å— Info: - - '&e用法: &6/res set <领地> witherdestruction true/false/remove' + - '&e使用方法: &6/res set <领地å称> witherdestruction true/false/remove=移除' waterflow: - Description: å…许或ç¦æ­¢æ°´æµåŠ¨, 该æƒé™è¦†ç›– flow æƒé™ + Translated: waterflow - å…许或ç¦æ­¢æ°´æµ + Description: å…许或ç¦æ­¢æ°´æµï¼Œè¦†ç›–flowæƒé™ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + - '&e使用方法: &6/res set <领地å称> waterflow true/false/remove=移除' wspeed1: - Description: 设置领地内玩家的行走速度为 %1 + Translated: wspeed1 - 设置领地内的移动速度为0.25 + Description: 设置领地内的移动速度为0.25 Info: - - '&e用法: &6/res set <领地> wspeed1 true/false/remove' + - '&e使用方法: &6/res set <领地å称> wspeed1 true/false/remove=移除' wspeed2: - Description: 设置领地内玩家的行走速度为 %1 + Translated: wspeed2 - 设置领地内的移动速度为1.0 + Description: 设置领地内的移动速度为1.0 Info: - - '&e用法: &6/res set <领地> wspeed2 true/false/remove' + - '&e使用方法: &6/res set <领地å称> wspeed2 true/false/remove=移除' remove: - Description: 删除领地 Info: - - '&e用法: &6/res remove <领地å>' + - '&e使用方法: &6/res remove [领地å称]' + Description: 删除领地 signupdate: - Description: 更新领地木牌 Info: - - '&e用法: &6/res signupdate' + - '&e使用方法: &6/res signupdate' + Description: 更新领地木牌 current: - Description: 显示你目å‰æ‰€åœ¨çš„领地 Info: - - '&e用法: &6/res current' + - '&e使用方法: &6/res current' + Description: 显示你目å‰æ‰€åœ¨çš„领地 reload: - Description: é‡è½½è¯­è¨€æˆ–é…置文件 Info: - - '&e用法: &6/res reload [config/lang]' + - '&e使用方法: &6/res reload [config/lang/groups/flags]' + Description: é‡è½½é…置或语言文件 + leaveraid: + Info: + - '&e使用方法: &6/res leaveraid' + Description: 离开çªè¢­ setowner: + Info: + - '&e使用方法: &6/resadmin setowner [领地å称] [玩家å称] (-keepflags=ä¿æŒæƒé™)' Description: 改å˜é¢†åœ°æ‰€æœ‰è€… + defend: + Info: + - '&e使用方法: &6/res defend [resName] (玩家å称)' + Description: 加入领地çªè¢­é˜²å¾¡ + attack: Info: - - '&e用法: &6/resadmin setowner [领地] [玩家]' + - '&e使用方法: &6/res attack [resName]' + Description: 开始对领地进行çªè¢­ unstuck: - Description: ä¼ é€åˆ°é¢†åœ°å¤–é¢ Info: - - '&e用法: &6/res unstuck' + - '&e使用方法: &6/res unstuck' + Description: ä¼ é€åˆ°é¢†åœ°å¤–é¢ subzone: - Description: 在领地中创建å­åŒºåŸŸ Info: - - '&e用法: &6/res subzone <领地å> [å­åŒºåŸŸå]' + - '&e使用方法: &6/res subzone <领地å称> [å­åŒºåŸŸå称]' - 如果领地å留空, 将会å°è¯•åœ¨çŽ©å®¶æ‰€å¤„领地中建立å­åŒºåŸŸ + Description: 在领地中创建å­åŒºåŸŸ removeworld: - Description: 删除指定世界中的所有领地 Info: - - '&e用法: &6/res removeworld [世界å]' + - '&e使用方法: &6/res removeworld [世界å称]' - åªèƒ½åœ¨æŽ§åˆ¶å°æ‰§è¡Œæ­¤å‘½ä»¤ + Description: 删除指定世界中的所有领地 limits: - Description: 显示你的领地é™åˆ¶ Info: - - '&e用法: &6/res limits' + - '&e使用方法: &6/res limits (玩家å称)' - 显示你在创建和管ç†é¢†åœ°æ–¹é¢çš„å„ç§é™åˆ¶ + Description: 显示你的领地é™åˆ¶ set: - Description: 为领地设置默认æƒé™ Info: - - '&e用法: &6/res set <领地> [æƒé™] [true/false/remove]' + - '&e使用方法: &6/res set <领地å称> [æƒé™] [true/false/remove=移除]' - 输入 /res flags ? 查看æƒé™åˆ—表 - - 如果没有为æŸçŽ©å®¶æŒ‡å®šè¯¥é¢†åœ°çš„特定æƒé™, 那么这å玩家将会拥有这些默认æƒé™. (å‚è§ /res pset ?) + - 如果没有为玩家指定该领地的特定æƒé™, 那么这å玩家将会拥有这些默认æƒé™. (å‚è§ /res pset ?) + Description: 为领地设置默认æƒé™ clearflags: - Description: 删除领地所有æƒé™ Info: - - '&e用法: &6/res clearflags ' + - '&e使用方法: &6/res clearflags <领地å称>' + Description: 移除领地所有æƒé™ message: - Description: 管ç†é¢†åœ°åŠ å…¥ / ç¦»å¼€æ¶ˆæ¯ Info: - - '&e用法: &6/res message <领地> [enter/leave] [消æ¯]' + - '&e使用方法: &6/res message <领地å称> [enter=进入/leave=离开] [消æ¯]' - 设置领地加入和离开的消æ¯æ–‡æœ¬ - - '&e用法: &6/res message <领地> remove [enter/leave]' + - '&e使用方法: &6/res message <领地å称> remove [enter=进入/leave=离开]' - 移除加入或离开的消æ¯æ–‡æœ¬ + Description: 管ç†é¢†åœ°åŠ å…¥ / ç¦»å¼€æ¶ˆæ¯ command: - Description: 管ç†é¢†åœ°å…许或者ç¦æ­¢çš„命令 Info: - - '&e用法: &6/res command <领地> ' + - '&e使用方法: &6/res command <领地å称> <命令>' + - 想è¦ç§»é™¤æ·»åŠ çš„命令åªéœ€è¦é‡æ–°è¾“入一次å³å¯ç§»é™¤ - 使用 _ æ¥è¡¨ç¤ºå¤šä¸ªå˜é‡ + Description: 管ç†é¢†åœ°å…许或者ç¦æ­¢çš„命令 confirm: Description: 确认删除领地 Info: - - '&e用法: &6/res confirm' + - '&e使用方法: &6/res confirm' - 确认删除一个领地 resadmin: - Description: 关闭或者开å¯é¢†åœ°ç®¡ç† Info: - - '&e用法: &6/res resadmin [on/off]' + - '&e使用方法: &6/res resadmin [on/off]' + Description: 关闭或者开å¯é¢†åœ°ç®¡ç† tpset: - Description: 设定领地的传é€ç‚¹ Info: - - '&e用法: &6/res tpset' + - '&e使用方法: &6/res tpset' - 该命令将会把你站的ä½ç½®è®¾ç½®ä¸ºé¢†åœ°çš„ä¼ é€ç‚¹ - 你必须站在一个领地里æ‰èƒ½ä½¿ç”¨è¿™ä¸ªå‘½ä»¤ - - 你必须是领地的所有者或者拥有领地的 +admin æƒé™ + - 你必须是领地的所有者或者拥有领地的 admin æƒé™ + Description: 设定领地的传é€ç‚¹ tpconfirm: - Description: 忽略ä¸å®‰å…¨ä¼ é€è­¦å‘Š Info: - - '&e用法: &6/res tpconfirm' + - '&e使用方法: &6/res tpconfirm' - 强制传é€åˆ°é¢†åœ°, 忽略传é€ä¸å®‰å…¨çš„警告 + Description: 忽略ä¸å®‰å…¨ä¼ é€è­¦å‘Š removeall: - Description: 移除æŸçŽ©å®¶çš„所有领地 Info: - - '&e用法: &6/res removeall [所有者]' - - 移除特定玩家的所有领地 + - '&e使用方法: &6/res removeall [玩家å称]' + - 移除玩家的所有领地 - 如果是移除其他玩家的领地, 你必须有 /resadmin 命令æƒé™ + Description: 移除玩家的所有领地 material: - Description: 检查æ质是å¦å­˜åœ¨å¯¹åº”çš„ID Info: - - '&e用法: &6/res material [material]' + - '&e使用方法: &6/res material [material]' + Description: 检查æ质是å¦å­˜åœ¨å¯¹åº”çš„ID kick: - Description: 将玩家踢出领地 Info: - - '&e用法: &6/res kick <玩家>' + - '&e使用方法: &6/res kick <玩家å称>' - 你必须是领地所有者或者管ç†å‘˜ - 玩家必须在线 + Description: 将玩家踢出领地 sublist: - Description: 列出所有领地å­åŒºåŸŸ Info: - - '&e用法: &6/res sublist <领地> <页ç >' + - '&e使用方法: &6/res sublist <领地å称> <页ç >' - 列出所有领地å­åŒºåŸŸ + Description: 列出所有领地å­åŒºåŸŸ rename: - Description: é‡å‘½å领地 Info: - - '&e用法: &6/res rename [领地åå­—] [æ–°åå­—]' + - '&e使用方法: &6/res rename [æ—§åå­—] [æ–°åå­—]' - 你必须是领地所有者或者管ç†å‘˜ - - 新领地åå­—ä¸èƒ½ä¸Žå…¶ä»–领地é‡å¤ + - 新领地åå­—ä¸èƒ½ä¸Žå…¶ä»–领地åå­—é‡å¤ + Description: é‡å‘½å领地å称 + setallfor: + Info: + - '&e使用方法: &6/res setallfor [玩家å称] [æƒé™] [true/false/remove=移除]' + Description: 在特定玩家拥有的所有ä½å®…上设置一般æƒé™ lease: - Description: 管ç†é¢†åœ°ç§Ÿçº¦ Info: - - '&e用法: &6/res lease [renew/cost] [领地]' - - /res lease cost 显示续租领地的花费 + - '&e使用方法: &6/res lease [renew/cost] [领地å称]' + - /res lease cost 显示续租领地的费用 - /res lease renew 将会续租指定的领地 + Description: 管ç†é¢†åœ°ç§Ÿçº¦ SubCommands: set: Description: 设置租约时间 Info: - - '&e用法: &6/resadmin lease set [领地] [#days/infinite]' - - 将租约时间设置为特定天数或者无é™åˆ¶ + - '&e使用方法: &6/resadmin lease set [领地å称] [#days=天数/infinite=无期é™]' + - å°†ç§Ÿçº¦æ—¶é—´è®¾ç½®ä¸ºæŒ‡å®šå¤©æ•°æˆ–è€…æ— æœŸé™ renew: Description: 续期租约时间 Info: - - '&e用法: &6/resadmin lease renew <领地>' + - '&e使用方法: &6/resadmin lease renew <领地å称>' - 续期当å‰æˆ–指定的领地租约 + list: + Description: 显示当å‰é¢†åœ°çš„租èµåˆ—表 + Info: + - '&e使用方法: &6/resadmin lease list <领地å称> <页ç >' + - 列出所有å­åŒºåŸŸçš„租èµæ—¶é—´ expires: Description: 租约过期时间 Info: - - '&e用法: &6/resadmin lease expires <领地>' + - '&e使用方法: &6/resadmin lease expires <领地å称>' - 显示领地租约过期的时间 cost: - Description: 显示续租花费 + Description: 显示续租费用 Info: - - '&e用法: &6/resadmin lease cost <领地>' - - 显示续租领地所需的花费 + - '&e使用方法: &6/resadmin lease cost <领地å称>' + - 显示续租领地所需的费用 tp: - Description: ä¼ é€åˆ°ä¸€ä¸ªé¢†åœ° Info: - - '&e用法: &6/res tp [residence]' - - 将你传é€åˆ°ä¸€ä¸ªé¢†åœ°, 你必须是领地所有者或者拥有领地 +tp æƒé™ + - '&e使用方法: &6/res tp [领地å称]' + - 将你传é€åˆ°ä¸€ä¸ªé¢†åœ°, 你必须是领地所有者或者拥有该领地 tp æƒé™. - ä½ çš„æƒé™ç»„也必须在æœåŠ¡å™¨ä¸­æœ‰ä¼ é€æƒé™ + Description: ä¼ é€åˆ°é¢†åœ° + setall: + Info: + - '&e使用方法: &6/res setall [æƒé™] [true/false/remove=移除]' + Description: 在所有领地上设置一般æƒé™ resreload: - Description: é‡è½½ Residence. + Description: é‡è½½é¢†åœ°æ’件 Info: - - '&e用法: &6/resreload' + - '&e使用方法: &6/resreload' resload: Description: 加载领地存档文件 Info: - - '&e用法: &6/resload' - - 该命令ä¸å®‰å…¨! 它ä¸ä¼šå…ˆä¿å­˜é¢†åœ°çŠ¶æ€. - - 对领地åšå‡ºæ”¹å˜åŽé‡æ–°åŠ è½½å­˜æ¡£. + - '&e使用方法: &6/resload' + - 该命令ä¸å®‰å…¨! 它ä¸ä¼šå…ˆä¿å­˜é¢†åœ°çŠ¶æ€ + - 对领地åšå‡ºæ”¹å˜åŽé‡æ–°åŠ è½½å­˜æ¡£ From d60b232b8d559b4bc365e0afd3c6503a2ae2d508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=98=AD=E8=98=AD=E9=9C=B2=20Flandre=5Ftw?= <51469621+gregman98@users.noreply.github.com> Date: Fri, 9 Jul 2021 18:53:08 +0800 Subject: [PATCH 0884/1142] Chinese Traditional translation Hello again, I have completed the Chinese Simplified translation. :) --- src/Language/ChineseTW.yml | 2523 +++++++++++++++++++++--------------- 1 file changed, 1509 insertions(+), 1014 deletions(-) diff --git a/src/Language/ChineseTW.yml b/src/Language/ChineseTW.yml index 86c875cd6..dad373029 100644 --- a/src/Language/ChineseTW.yml +++ b/src/Language/ChineseTW.yml @@ -1,1255 +1,1750 @@ -# NOTE If you want to modify this file, it is HIGHLY recommended that you make a copy -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. +# 此檔案將由 Residence 自動更新, +# 當檢查到更新版本時,你的更改將被覆蓋。 +# 如果你æ“有此檔案的副本, +# 請更改 Residence config.yml 下的 Language:。 +# Translated into Chinese Traditional by Flandre_tw Language: Invalid: - Player: '&c無效的玩家å...' - World: '&c無效的世界...' - Residence: '&c無效的領地...' - Subzone: '&c無效的領地å­å€åŸŸ...' - Direction: '&c無效的方å‘...' - Amount: '&c無效的數é‡...' - Cost: '&c無效的花費...' - Days: '&c無效的天數...' - Material: '&c無效的ææ–™...' - Boolean: '&c無效值, 必須為 &6true(t) &c或者 &6false(f)' - Area: '&c無效的å€åŸŸ...' - Group: '&c無效的許å¯æ¬Šçµ„...' - MessageType: '&c消æ¯é¡žåž‹å¿…須為 enter(進入), leave(離開) 或 remove(移除).' - Flag: '&c無效許å¯æ¬Š...' - FlagState: '&c無效許å¯æ¬Šç‹€æ…‹, 必須為 &6true(t)&c, &6false(f)&c, 或 &6remove(r)' - List: '&e未知å單類型, 必須是 &6blacklist(黑åå–®) &e或 &6ignorelist(忽略åå–®).' - Page: '&e無效é é¢...' - Help: '&c無效説明é é¢...' - NameCharacters: '&cå字中包å«ç„¡æ•ˆå­—å…ƒ...' + Player: '&c無效的玩家å稱……' + PlayerOffline: '&c玩家離線。' + World: '&c無效的世界å稱……' + Residence: '&c無效的領地……' + Subzone: '&c無效的å­å€åŸŸé ˜åœ°â€¦â€¦' + Direction: '&c無效的方å‘……' + Amount: '&c無效的數é‡â€¦â€¦' + Cost: '&c無效的花費……' + Days: '&c無效的天數……' + Material: '&c無效的物å“……' + Boolean: '&c無效的值,值必須為 &6true (t) &c或 &6false (f)。' + Area: '&c無效的å€åŸŸâ€¦â€¦' + Group: '&c無效的權é™çµ„……' + MessageType: '&c訊æ¯é¡žåž‹å¿…須為 enter (進入)〠leave (離開) 或 remove (移除)。' + Flag: '&c無效的權é™â€¦â€¦' + FlagType: + Fail: '&c無效的權é™â€¦â€¦ 這個權é™åªèƒ½ç”¨åœ¨ %1。' + Player: Player + Residence: Residence + FlagState: '&c無效的權é™ç‹€æ…‹ï¼Œç‹€æ…‹å¿…須為 true (t)〠false (f) 或 remove (r)' + List: '&e未知的列表類型,列表必須為 &6blacklist (黑å單) &e或 &6ignorelist (忽略å單)。' + Page: '&e無效的é æ•¸â€¦â€¦' + Help: '&c無效的說明é æ•¸â€¦â€¦' + NameCharacters: '&cå稱包å«ä¸å…許字元……' + FromConsole: '&c該指令åªèƒ½åœ¨æŽ§åˆ¶å°åŸ·è¡Œ ï¼' + Ingame: '&c該指令無法在控制å°åŸ·è¡Œ ï¼' Area: - Exists: '&cå€åŸŸå已存在.' - Create: '&e領地å€åŸŸå‰µå»ºæˆåŠŸ, ID &6%1' - DiffWorld: '&cå€åŸŸèˆ‡é ˜åœ°åœ¨ä¸åŒä¸–ç•Œ.' - Collision: '&cå€åŸŸèˆ‡é ˜åœ° &6%1 &cè¡çª.' - SubzoneCollision: '&cå€åŸŸèˆ‡é ˜åœ°å­å€åŸŸ &6%1 &cè¡çª.' - NonExist: '&cå€åŸŸä¸å­˜åœ¨.' - InvalidName: '&c無效å€åŸŸå...' - ToSmallTotal: '&cé¸ä¸­çš„å€åŸŸéŽå° (&6%1&c)' - ToSmallX: '&cé¸å€ &6X &cæ–¹å‘長度 (&6%1&c) éŽå°. &e該值必須為 &6%2 &e或更大.' - ToSmallY: '&cé¸å€é«˜åº¦ (&6%1&c) éŽå°. &e該值必須為 &6%2 &e或更大.' - ToSmallZ: '&cé¸å€ &6Z &cæ–¹å‘長度 (&6%1&c) éŽå°. &e該值必須為 &6%2 &e或更大.' - Rename: '&eå€åŸŸ &6%1 &e已被é‡å‘½å為 &6%2' - Remove: '&e已刪除å€åŸŸ &6%1&e.' - Name: '&eå稱: &2%1' - RemoveLast: '&cä¸èƒ½ç§»é™¤é ˜åœ°ä¸­çš„最後一個å€åŸŸ.' - NotWithinParent: '&c該å€åŸŸä¸åœ¨çˆ¶å€åŸŸå…§.' - Update: '&eå€åŸŸå·²æ›´æ–°...' - MaxPhysical: '&eå·²é”到領地所å…許的最大空間.' - SizeLimit: '&eå€åŸŸå¤§å°è¶…出了å…許的尺寸上é™.' - HighLimit: '&cä½ ä¸èƒ½ä¿è­·é€™éº¼é«˜çš„領地, 高度上é™ç‚º &6%1' - LowLimit: '&cä½ ä¸èƒ½ä¿è­·é€™éº¼æ·±çš„領地, 深度上é™ç‚º &6%1' + Exists: '&cå€åŸŸå稱已存在。' + Create: '&e已建立領地 ID &6%1。' + DiffWorld: '&cå€åŸŸå’Œé ˜åœ°å­˜åœ¨ä¸åŒçš„世界。' + Collision: '&cå€åŸŸå’Œé ˜åœ° &6%1 &cè¡çªã€‚' + SubzoneCollision: '&cå€åŸŸå’Œå­å€åŸŸé ˜åœ° &6%1 &cè¡çªã€‚' + NonExist: '&cå€åŸŸä¸å­˜åœ¨ã€‚' + InvalidName: '&c無效的å€åŸŸå稱……' + ToSmallX: '&cé¸æ“‡å€åŸŸ &6X &cæ–¹å‘長度 (&6%1&c) éŽå°ã€‚&e該值必須為 &6%2 &e或更大。' + ToSmallY: '&cé¸æ“‡å€åŸŸå€åŸŸ &6X &cæ–¹å‘高度 (&6%1&c) éŽå°ã€‚&e該值必須為 &6%2 &e或更大。' + ToSmallZ: '&cé¸æ“‡å€åŸŸå€åŸŸ &6Z &cæ–¹å‘長度 (&6%1&c) éŽå°ã€‚&e該值必須為 &6%2 &e或更大。' + ToBigX: '&cé¸æ“‡å€åŸŸ &6X &cæ–¹å‘長度 (&6%1&c) éŽå¤§ã€‚&e該值必須為 &6%2 &e或更å°ã€‚' + ToBigY: '&cé¸æ“‡å€åŸŸå€åŸŸ &6X &cæ–¹å‘高度 (&6%1&c) éŽå¤§ã€‚&e該值必須為 &6%2 &e或更å°ã€‚' + ToBigZ: '&cé¸æ“‡å€åŸŸå€åŸŸ &6Z &cæ–¹å‘長度 (&6%1&c) éŽå¤§ã€‚&e該值必須為 &6%2 &e或更å°ã€‚' + Rename: '&eå€åŸŸ &6%1 &e已被é‡æ–°å‘½å為 &6%2。' + Remove: '&e移除å€åŸŸ &6%1……' + Name: '&eå稱 : &2%1。' + ListAll: '&a{&eID : &c%1 &eP1 : &c(%2,%3,%4) &eP2 : &c(%5,%6,%7) &e(尺寸 : &c%8&e)&a}' + RemoveLast: '&c無法移除領地中的最後一個å€åŸŸã€‚' + NotWithinParent: '&cå€åŸŸä¸åœ¨çˆ¶å€åŸŸå…§ã€‚' + Update: '&e已更新å€åŸŸâ€¦â€¦' + MaxPhysical: '&eä½ å·²é”到了領地最大å…許體ç©ã€‚' + SizeLimit: '&eå€åŸŸå¤§å°è¶…出了å…許的尺寸上é™ã€‚' + HighLimit: '&cä½ ä¸èƒ½ä¿è­·é€™éº¼é«˜çš„領地,高度上é™ç‚º &6%1。' + LowLimit: 'ä½ ä¸èƒ½ä¿è­·é€™éº¼æ·±çš„領地,深度上é™ç‚º &6%1。' Select: - Points: '&e執行命令å‰éœ€è¦å…ˆé¸ä¸­å…©å€‹é¸å–點!' - Overlap: '&cé¸å–點與å€åŸŸ &6%1 &cé‡ç–Š!' - WorldGuardOverlap: '&cé¸å–點與 WorldGuard å€åŸŸ &6%1 &cé‡ç–Š!' - Success: '&eé¸å–點æˆåŠŸ!' - Fail: '&c無效的é¸æ“‡å‘½ä»¤...' - Bedrock: '&eå°‡é¸å€æ“´å±•åˆ°æœ€å¤§æ·±åº¦.' - Sky: '&eå°‡é¸å€æ“´å±•åˆ°æœ€å¤§é«˜åº¦.' - Area: '&eå·²é¸æ“‡ &6%2 &e領地的 &6%1 &eå€åŸŸ.' - Tool: '&e- é¸å€å·¥å…·: &6%1' - PrimaryPoint: '&eå·²é¸æ“‡ &6第一個 &eé¸å–點 %1' - SecondaryPoint: '&eå·²é¸æ“‡ &6第二個 &eé¸å–點 %1' - Primary: '&e第一個é¸å–點: &6%1' - Secondary: '&e第二個é¸å–點: &6%1' - TooHigh: '&c警告: é¸å€è¶ŠéŽäº†åœ°åœ–頂部, 並且已被è£å‰ª.' - TooLow: '&c警告: é¸å€è¶ŠéŽäº†åœ°åœ–底部, 並且已被è£å‰ª.' - TotalSize: '&eé¸å€ç¸½å¤§å°: &6%1' - AutoEnabled: '&e自動é¸æ“‡æ¨¡å¼&6é–‹å•Ÿ&e. 輸入 &6/res select auto &e關閉.' - AutoDisabled: '&e自動é¸æ“‡æ¨¡å¼&6關閉&e. 輸入 &6/res select auto &eå†æ¬¡æ‰“é–‹.' - Disabled: '&c你沒有許å¯æ¬Šä½¿ç”¨é¸æ“‡å‘½ä»¤.' + Points: '&e執行指令å‰è¦å…ˆé¸æ“‡å…©å€‹é»ž ï¼' + Overlap: '&cé¸æ“‡é»žå’Œå€åŸŸ &6%1 &cé‡ç–Š ï¼' + WorldGuardOverlap: '&cé¸æ“‡é»žèˆ‡ WorldGuard å€åŸŸ &6%1 &cé‡ç–Š ï¼' + KingdomsOverlap: '&cé¸æ“‡é»žèˆ‡ Kingdoms 領土 &6%1 &cé‡ç–Š ï¼' + Success: '&eé¸æ“‡æˆåŠŸ ï¼' + Fail: '&c無效的é¸æ“‡æŒ‡ä»¤â€¦â€¦' + Bedrock: '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°æœ€ä½Žæ·±åº¦ã€‚' + Sky: '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°æœ€é«˜é«˜åº¦ã€‚' + Area: '&eå·²é¸æ“‡ &6%2 &e領地的 &6%1 &eå€åŸŸã€‚' + Tool: '&e- é¸æ“‡å·¥å…· : &6%1' + PrimaryPoint: '&eå·²é¸æ“‡ &6第一個 &eé¸æ“‡é»ž %1&e。' + SecondaryPoint: '&eå·²é¸æ“‡ &6第二個 &eé¸æ“‡é»ž %1&e。' + Primary: '&e第一個é¸æ“‡é»ž : &6%1。' + Secondary: '&e第二個é¸æ“‡é»ž : &6%1。' + TooHigh: '&c警告,é¸æ“‡å€åŸŸå·²è¶…éŽåœ°åœ–頂端,ç¾åœ¨å·²è£å‰ªã€‚' + TooLow: '&c警告,é¸æ“‡å€åŸŸå·²è¶…éŽåœ°åœ–底部,ç¾åœ¨å·²è£å‰ªã€‚' + TotalSize: '&eé¸æ“‡å€åŸŸç¸½è¨ˆå°ºå¯¸ : &6%1。' + AutoEnabled: '&e自動é¸æ“‡æ¨¡å¼&6é–‹å•Ÿ&e,輸入 &6/res select auto &e關閉。' + AutoDisabled: '&e自動é¸æ“‡æ¨¡å¼&6關閉&e,輸入 &6/res select auto &eå†æ¬¡æ‰“開。' + Disabled: '&c你沒有使用é¸æ“‡æŒ‡ä»¤çš„權é™ã€‚' Sign: - Updated: '&6%1 &e告示牌已更新!' + Updated: '&6%1 &e已更新告示牌 ï¼' TopLine: '[market]' DateFormat: YY/MM/dd HH:mm - ForRentTopLine: '&8For Rent' - ForRentPriceLine: '&8%1&f/&8%2&f/&8%3' - ForRentResName: '&8%1' + ForRentTopLine: '&0出租' + ForRentPriceLine: '&0%1&f/&0%2&f/&0%3' + ForRentResName: '&0%1' ForRentBottomLine: '&9å¯ç”¨' RentedAutorenewTrue: '&2%1' RentedAutorenewFalse: '&c%1' RentedTopLine: '%1' - RentedPriceLine: '&8%1&f/&8%2&f/&8%3' - RentedResName: '&8%1' + RentedPriceLine: '&0%1&f/&0%2&f/&0%3' + RentedResName: '&0%1' RentedBottomLine: '&1%1' - ForSaleTopLine: '&8For Sale' - ForSalePriceLine: '&8%1' - ForSaleResName: '&8%1' - ForSaleBottomLine: '&5å¯ç”¨' - LookAt: '&c請將滑鼠準星å°æº–告示牌.' + ForSaleTopLine: '&0出售' + ForSalePriceLine: '&0%1' + ForSaleResName: '&0%1' + ForSaleBottom: '&0%1 立方公尺' + LookAt: '&cä½ å‰æ–¹æ²’有告示牌' + ResName: '&0%1' + Owner: '&0%1' + Raid: + NotEnabled: '&c尚未開啟çªè¥²æ¨¡å¼ ï¼' + NotIn: '&cä½ ä¸åœ¨çªè¥²ä¸­ ï¼' + CantLeave: '&cä½ ä¸èƒ½åœ¨çªè¥²ä¸­é›¢é–‹é ˜åœ° (%1)ï¼' + CantKick: '&c無法踢出領地æ“有者 (%1)ï¼' + Kicked: '&e從領地 &7%2 çªè¥²ä¸­è¸¢å‡º &7%1 ï¼' + StartsIn: '&7çªè¥²é–‹å§‹ : [autoTimeLeft] &2防守 : %1 &4進攻 : %2' + EndsIn: '&cçªè¥²çµæŸ : [autoTimeLeft] &2防守 : %1 &4進攻 : %2' + Ended: '&7領地çªè¥² &4%1 &7çµæŸ ï¼' + cantDo: '&c無法在領地çªè¥²æ™‚åšé€™ä»¶äº‹æƒ… ï¼' + left: '&7你已離開了領地 &4%1 &7çªè¥² ï¼' + noFlagChange: '&c無法在領地çªè¥²æ™‚切æ›æ¬Šé™ ï¼' + noRemoval: '&c無法在領地çªè¥²æ™‚移除領地 ï¼' + immune: '&eå…除下一個 %1 ï¼' + notImmune: '&eä¸å†å…除 ï¼' + notInRaid: '&e玩家ä¸åœ¨çªè¥²ä¸­ ï¼' + attack: + Joined: '&7已加入 &2%1 &7çªè¥² ï¼' + Started: '&7çªè¥²é–‹å§‹ ï¼' + cooldown: '&c太早進行下一場領地çªè¥² ï¼ è«‹ç­‰å€™ %1 ï¼' + immune: '&c這個領地å…除çªè¥² ï¼ è«‹ç­‰å€™ %1 ï¼' + playerImmune: '&c領地æ“有者å…除çªè¥² ï¼ è«‹ç­‰å€™ %1 ï¼' + isOffline: '&c無法在領地æ“有者離線時çªè¥² ï¼' + noSubzones: '&c無法çªè¥²å­å€åŸŸé ˜åœ° ï¼' + noSelf: '&c無法çªè¥²ä½ è‡ªå·±çš„領地 ï¼' + alreadyInAnother: '&c因為你已在å¦å¤–一場çªè¥² (%1),所以你無法加入這場çªè¥² ï¼' + defend: + Joined: '&7已加入 &2%1 &7防守 ï¼' + Sent: '&7已確èªåŠ å…¥çªè¥²é˜²å®ˆï¼Œæ­£åœ¨ç­‰å¾…確èªã€‚' + Join: '&7加入 &6%1 &7çªè¥²é˜²å®ˆ' + Invitation: '&7從 &6%1 接å—çªè¥²é˜²å®ˆ ï¼' + JoinedDef: '&2%1&7 加入了防守 ï¼' + IsOffline: '&c無法在領地æ“有者離線時加入çªè¥²é˜²å®ˆ ï¼' + noSelf: '&c你已在這個領地中防守' + notRaided: '&c領地目å‰æ²’有é­å—çªè¥² ï¼' + alreadyInAnother: '&c因為你已在å¦å¤–一場çªè¥²é˜²å®ˆ (%1),所以你無法加入這場çªè¥²é˜²å®ˆ ï¼' + status: + title: '&7----------- &f%1 (%2) &7-----------' + immune: '&eå°æŽ¥ä¸‹ä¾†çš„çªè¥²å…除 : %1。' + starts: '&7領地çªè¥²å°‡åœ¨ä»¥ä¸‹æ™‚間後開始 : %1。' + attackers: '&7攻擊者 : &4%1。' + defenders: '&7防守者 : &4%1。' + ends: '&7領地çªè¥²å°‡åœ¨ä»¥ä¸‹æ™‚間後çµæŸ : %1。' + canraid: '&2å¯ä»¥è¢«çªè¥²ã€‚' + raidin: '&eå¯èƒ½çš„çªè¥² : %1。' + stopped: '&eçªè¥²åœ¨ &6%1 &e被åœæ­¢ã€‚' + info: + years: '&e%1 &6å¹´ ' + oneYear: '&e%1 &6å¹´ ' + day: '&e%1 &6天 ' + oneDay: '&e%1 &6天 ' + hour: '&e%1 &6å°æ™‚ ' + oneHour: '&e%1 &6å°æ™‚ ' + min: '&e%1 &6åˆ†é˜ ' + sec: '&e%1 &6秒 ' + listSplitter: ', ' + click: '&7點擊' + clickToConfirm: '&7點擊確èª' + server: + land: Server_Land Flag: - Set: '&6%2 &eçš„ &6%1 &e許å¯æ¬Šå·²è¨­ç½®ç‚º &6%3 &e狀態.' - SetFailed: '&c你沒有許å¯æ¬Šè¨­ç½® &6%1 &c許å¯æ¬Š' - CheckTrue: '&e玩家 &6%2 &e已在領地 &6%3 &e中將 &6%1 &e許å¯æ¬Šè¨­ç½®ç‚º &6%4&e.' - CheckFalse: '&e玩家 &6%2 &e沒有在領地中設置 &6%1 &e許å¯æ¬Š.' - Cleared: '&e許å¯æ¬Šå·²æ¸…除.' - Default: '&e許å¯æ¬Šå·²æ¢å¾©é è¨­å€¼.' - Deny: '&c你沒有 &6%1 &c許å¯æ¬Š.' - SetDeny: '&c所有者ä¸èƒ½è¨­ç½® &6%1 &c許å¯æ¬Š.' - ChangeDeny: '&c此時領地內有 &6%2 &cå玩家, 所以你無法更改 &6%1 &c許å¯æ¬Š.' + ownColor: '&4' + p1Color: '&2' + p2Color: '&a' + haveColor: '&2' + havePrefix: '' + denyColor: '&4' + denyPrefix: '' + Set: '&e領地 &6%2 &eçš„ &6%1 &e權é™å·²è¨­å®šç‚º &6%3 &e狀態。' + SetFailed: '&c你沒有設定 &6%1 &c的權é™ã€‚' + CheckTrue: '&e玩家 &6%2 &e已在領地 &6%3 &e中將 &6%1 &e權é™è¨­å®šç‚º &6%4&e。' + CheckFalse: '&e玩家 &6%2 &e沒有在領地中設定 &6%1 &e權é™ã€‚' + Cleared: '&e已清除權é™ã€‚' + RemovedAll: '&e已清除 &6%1 &e在領地 &6%2 &e的所有權é™ã€‚' + RemovedGroup: '&e已清除 &6%1 &e組在領地 &6%2 &e的所有權é™ã€‚' + Default: '&eå·²æ¢å¾©é è¨­æ¬Šé™ã€‚' + Deny: '&c你沒有 &6%1 &c的權é™ã€‚' + SetDeny: '&cæ“有者ä¸èƒ½è¨­å®š &6%1 &c的權é™ã€‚' + ChangeDeny: '&c因為領地內有 &6%2 &cå玩家,所以你無法更改 &6%1 &c的權é™ã€‚' + ChangedForOne: '&e已為領地 &6%2 &e更改 &6%1 &e的權é™ã€‚' + ChangedFor: '&e已檢查 &6%2 &e領地更改 &6%1 &e的權é™ã€‚' + reset: '&eå·²é‡æ–°è¨­å®šé ˜åœ° &6%1 &e的權é™ã€‚' + resetAll: '&eå·²é‡æ–°è¨­å®šé ˜åœ° &6%1 &e的權é™ã€‚' Bank: - NoAccess: '&c你沒有許å¯æ¬Šä½¿ç”¨éŠ€è¡Œ.' - Name: ' &e銀行: &6%1' - NoMoney: '&c你的銀行存款ä¸è¶³.' - Deposit: '&eä½ å‘領地銀行存款 &6%1 &eå…ƒ.' - Withdraw: '&e你從領地銀行中å–出 &6%1 &eå…ƒ.' + NoAccess: '&c你沒有使用銀行的權é™ã€‚' + Name: ' &e銀行 : &6%1' + NoMoney: '&c銀行存款ä¸è¶³ã€‚' + Deposit: '&eä½ å‘領地銀行存款 &6%1&e。' + Withdraw: '&e你從領地銀行中æ款 &6%1&e。' + rentedWithdraw: '&c無法從出租領地銀行æ款。' Subzone: - Rename: '&e領地å­å€åŸŸ &6%1 &e已被é‡å‘½å為 &6%2' - Remove: '&e已刪除領地å­å€åŸŸ &6%1&e.' - Create: '&eæˆåŠŸå‰µå»ºé ˜åœ°å­å€åŸŸ &6%1&e.' - CreateFail: '&c無法創建領地å­å€åŸŸ &6%1&c.' - Exists: '&c領地å­å€åŸŸ &6%1 &c已存在.' - Collide: '&c領地å­å€åŸŸèˆ‡ &6%1 &cè¡çª.' - MaxDepth: '&cå·²é”到領地å­å€åŸŸå…許的最大分å€æ·±åº¦.' - SelectInside: '&e兩個é¸å–點必須都在åŒä¸€å€‹é ˜åœ°å…§.' - CantCreate: '&c你沒有創建領地å­å€åŸŸçš„許å¯æ¬Š.' - CantDelete: '&c你沒有刪除領地å­å€åŸŸçš„許å¯æ¬Š.' - CantDeleteNotOwnerOfParent: '&cä½ ä¸æ˜¯è©²å­å€åŸŸæ‰€åœ¨é ˜åœ°çš„所有者, 無法刪除å­å€åŸŸ.' - CantContract: '&c你沒有許å¯æ¬Šç¸®å°é ˜åœ°å­å€åŸŸ.' - CantExpand: '&c你沒有許å¯æ¬Šæ“´å¤§é ˜åœ°å­å€åŸŸ.' - DeleteConfirm: '&e如果你確定è¦åˆªé™¤å­å€åŸŸ &6%1&e, 輸入 &6/res confirm &e來確èªæ“作.' - OwnerChange: '&e已將å­å€åŸŸ &6%1 &e的所有者更改為 &6%2' + Rename: '&eå­å€åŸŸé ˜åœ° &6%1 &e已被é‡æ–°å‘½å為 &6%2。' + Remove: '&e已移除å­å€åŸŸé ˜åœ° &6%1&e。' + Create: '&eæˆåŠŸå»ºç«‹å­å€åŸŸé ˜åœ° &6%1&e。' + CreateFail: '&c無法建立å­å€åŸŸé ˜åœ° &6%1&c。' + Exists: '&c已存在å­å€åŸŸé ˜åœ° &6%1 &c。' + Collide: '&cå­å€åŸŸé ˜åœ°èˆ‡ &6%1 &cè¡çªã€‚' + MaxAmount: '&cä½ å·²é”到å­å€åŸŸé ˜åœ°å…許的最大分å€æ•¸é‡ã€‚' + MaxDepth: '&cä½ å·²é”到å­å€åŸŸé ˜åœ°å…許的最大分å€æ·±åº¦ã€‚' + SelectInside: '&e兩個é¸æ“‡é»žå¿…須都在åŒä¸€å€‹é ˜åœ°å…§ã€‚' + CantCreate: '&c你沒有建立å­å€åŸŸé ˜åœ°çš„權é™ã€‚' + CantDelete: '&c你沒有移除å­å€åŸŸé ˜åœ°çš„權é™ã€‚' + CantDeleteNotOwnerOfParent: '&cä½ ä¸æ˜¯è©²å­å€åŸŸæ‰€åœ¨é ˜åœ°çš„æ“有者,無法移除å­å€åŸŸã€‚' + CantContract: '&c你沒有縮å°å­å€åŸŸé ˜åœ°çš„權é™ã€‚' + CantExpand: '&c你沒有擴大å­å€åŸŸé ˜åœ°çš„權é™ã€‚' + DeleteConfirm: '&e如果你確定è¦ç§»é™¤å­å€åŸŸ &6%1&e,輸入 &6/res confirm &e來確定æ“作。' + OwnerChange: '&e已將å­å€åŸŸ &6%1 &eçš„æ“有者更改為 &6%2。' Residence: - Bought: '&eæˆåŠŸè³¼è²·é ˜åœ° &6%1' - Buy: '&6%1 &e購買了你的 &6%2 &e領地.' - BuyTooBig: '&c你無法購買尺寸這麼大的領地.' - NotForSale: '&c該領地目å‰ä¸¦æœªå‡ºå”®.' - ForSale: '&e領地 &6%1 &eç¾åœ¨æ­£ä»¥ &6%2 &e的價格出售.' - StopSelling: '&c該領地已ä¸å†å‡ºå”®.' - TooMany: '&cä½ æ“有的領地數é‡é”到了上é™.' - MaxRent: '&c你租用的領地數é‡é”到了上é™.' - AlreadyRent: '&c領地已經被租用.' - NotForRent: '&c領地沒有在出租.' - NotForRentOrSell: '&c領地沒有在出售或出租.' - NotRented: '&c領地尚未被租出.' - Unrent: '&e領地 &6%1 &eå·²å–消出租.' - RemoveRentable: '&e領地 &6%1 &eä¸å†å¯å‡ºç§Ÿ.' - ForRentSuccess: '&e領地 &6%1 &eå·²è¢«è¨­ç½®ç‚ºæ¯ &6%3 &e天以 &6%2 &e出租.' - RentSuccess: '&e你租用了 &6%1 &e領地 &6%2 &e天.' - EndingRent: '&eRent time is ending for &6%1 &eon &6%2' - AlreadyRented: '&e領地 &6%1 &e已出租給 &6%2' - AlreadyExists: '&c已存在å稱為 &6%1 &c的領地.' - Create: '&e已創建領地 &6%1&e!' - Rename: '&e領地 &6%1 &e已被é‡å‘½å為 &6%2' - Remove: '&e領地 &6%1 &e已刪除.' - MoveDeny: '&c你沒有領地 &6%1 &c的移動許å¯æ¬Š.' - TeleportNoFlag: '&c你沒有該領地的傳é€è¨±å¯æ¬Š.' - FlagDeny: '&c你沒有領地 &6%2 &cçš„ &6%1 &c許å¯æ¬Š.' - GiveLimits: '&c目標玩家超出é™åˆ¶, 無法給予領地.' - Give: '&e你將領地 &6%1 &eé€çµ¦äº† &6%2' - Recieve: '&e你收到了 &6%2 &eé€çµ¦ä½ çš„ &6%1 &e領地.' - List: ' &a%1%2 &e- &6世界&e: &6%3' - TeleportNear: '&e已傳é€åˆ°é™„近的領地.' - SetTeleportLocation: '&e設置傳é€ä½ç½®.' - PermissionsApply: '&e領地許å¯æ¬Šå·²è¨­ç½®.' - NotOwner: '&cä½ ä¸æ˜¯è©²é ˜åœ°çš„所有者.' - RemovePlayersResidences: '&e移除所有屬於 &6%1 &e的領地.' - NotIn: '&c你此時ä¸åœ¨é ˜åœ°å…§.' - PlayerNotIn: '&c玩家ä¸åœ¨é ˜åœ°å€åŸŸå…§..' - Kicked: '&e你被從領地中請出.' - In: '&eä½ ç›®å‰ç«™åœ¨é ˜åœ° &6%1 &e中.' - OwnerChange: '&e已將領地 &6%1 &e的所有者更改為 &6%2' - NonAdmin: '&c你沒有領地的管ç†å“¡è¨±å¯æ¬Š.' - Line: '&e領地: &6%1 ' - RentedBy: '&e租用者: &6%1' - MessageChange: '&e消æ¯æ–‡æœ¬å·²è¨­ç½®.' - CantDeleteResidence: '&c你沒有刪除此領地的許å¯æ¬Š.' - CantExpandResidence: '&c你沒有擴大此領地的許å¯æ¬Š.' - CantContractResidence: '&c你沒有縮å°æ­¤é ˜åœ°çš„許å¯æ¬Š.' - NoResHere: '&c那個ä½ç½®æ²’有領地存在.' - OwnerNoPermission: '&c領地所有者沒有執行這個æ“作的許å¯æ¬Š.' - ParentNoPermission: '&c你沒有許å¯æ¬Šè¨­ç½®çˆ¶å€åŸŸ.' - ChatDisabled: '&e領地內èŠå¤©å·²ç¦ç”¨.' - DeleteConfirm: '&e如果你確定è¦åˆªé™¤é ˜åœ° &6%1&e, 輸入 &6/res confirm &e以確èªæ“作.' + DontOwn: '&e沒有項目å¯ä»¥é¡¯ç¤ºã€‚' + Hidden: ' &e(&6éš±è—n&e)' + Bought: '&e購買領地 &6%1。' + Buy: '&6%1 &e購買了你的 &6%2 &e領地。' + BuyTooBig: '&c你無法購買尺寸這麼大的領地。' + NotForSale: '&c該領地目å‰ä¸¦æœªå‡ºå”®ã€‚' + ForSale: '&e領地 &6%1 &eç¾åœ¨æ­£ä»¥ &6%2 &e的價格出售。' + StopSelling: '&c該領地已ä¸å†å‡ºå”®ã€‚' + TooMany: '&cä½ æ“有的領地數é‡é”到了上é™ã€‚' + MaxRent: '&c你租用的領地數é‡é”到了上é™ã€‚' + AlreadyRent: '&c領地已被租用。' + NotForRent: '&c領地沒有在出租。' + NotForRentOrSell: '&c沒有在出售或出租領地。' + NotRented: '&c領地尚未被租出。' + Unrent: '&e領地 &6%1 &eå·²å–消出租。' + RemoveRentable: '&e領地 &6%1 &eä¸å†å¯å‡ºç§Ÿã€‚' + ForRentSuccess: '&e領地 &6%1 &eå·²è¢«è¨­å®šç‚ºæ¯ &6%3 &e天以 &6%2 &e出租。' + RentSuccess: '&e你租用了 &6%1 &e領地 &6%2 &e天。' + EndingRent: '&e出租給 &6%1 &e的領地 &6%2 已到期。' + AlreadyRented: '&e領地 &6%1 &e已出租給 &6%2。' + CantAutoPay: '&e領地ä¸å…許自動付款,自動付款將設定æˆ&6關閉。' + AlreadyExists: '&c已存在å稱為 &6%1 &c的領地。' + Create: '&e已建立領地 &6%1&e ï¼' + Rename: '&e領地 &6%1 &e已被é‡æ–°å‘½å為 &6%2' + Remove: '&e領地 &6%1 &e已移除……' + CantRemove: '&c領地 &6%1 &c無法移除因為 &6%2 &cå­å€åŸŸé‚„在出租給 &6%3。' + MoveDeny: '&c你沒有領地 &6%1 的移動權é™ã€‚' + TeleportNoFlag: '&c你沒有領地的傳é€æ¬Šé™ã€‚' + FlagDeny: '&c你沒有領地 &6%2 &cçš„ &6%1 &c權é™ã€‚' + GiveLimits: '&c目標玩家領地超éŽé™åˆ¶ï¼Œç„¡æ³•çµ¦äºˆé ˜åœ°ã€‚' + GiveConfirm: '&7點擊確èªå°‡é ˜åœ° &6%1 &7從 &6%2 &7轉移到 &6%3。' + Give: '&e你將領地 &6%1 &e轉移到 &6%2。' + Recieve: '&e你從玩家 &6%2 &e收到領地 &6%1。' + ResList: ' &a%1. &e%2 &e- &6%3 %4&6%5' + TrustedResList: ' &a%1. &f%2 &e- &6%3 %4&6%5' + List: ' &e%2 &e- &6%3' + Near: '&e附近的領地 : &7%1' + TeleportNear: '&e傳é€åˆ°é™„近的領地。' + SetTeleportLocation: '&e設定傳é€é»žä½ç½®â€¦â€¦' + PermissionsApply: '&e已設定領地權é™ã€‚' + NotOwner: '&cä½ ä¸æ˜¯è©²é ˜åœ°çš„æ“有者。' + RemovePlayersResidences: '&e移除所有屬於 &6%1 &e的領地。' + NotIn: '&cä½ ä¸åœ¨é ˜åœ°å…§ã€‚' + PlayerNotIn: '&c玩家ä¸åœ¨é ˜åœ°å€åŸŸå…§ã€‚' + Kicked: '&e你在領地中被踢出。' + CantKick: '&e無法踢出該玩家。' + In: '&eä½ ç›®å‰åœ¨é ˜åœ° &6%1。' + OwnerChange: '&e已將領地 &6%1 &eçš„æ“æœ‰è€…æ›´æ”¹æˆ &6%2' + NonAdmin: '&c你沒有領地的管ç†æ¬Šé™ã€‚' + Line: '&e領地 : &6%1 ' + RentedBy: '&e租用者 : &6%1。' + MessageChange: '&e已設定訊æ¯â€¦â€¦' + CantDeleteResidence: '&c你沒有移除領地的權é™ã€‚' + CantExpandResidence: '&c你沒有擴展領地的權é™ã€‚' + CantContractResidence: '&c你沒有縮å°é ˜åœ°çš„權é™ã€‚' + NoResHere: '&c領地ä¸å­˜åœ¨ã€‚' + OwnerNoPermission: '&c領地æ“有者沒有執行這項æ“作的權é™ã€‚' + ParentNoPermission: '&c你沒有設定父å€åŸŸçš„權é™ã€‚' + ChatDisabled: '&e已關閉領地èŠå¤©â€¦â€¦' + DeleteConfirm: '&e如果你確定è¦ç§»é™¤é ˜åœ° &6%1&e,輸入 &6/res confirm &e來確定æ“作。' + ChangedMain: '&e更改主è¦é ˜åœ°åˆ° &6%1。' + LwcRemoved: '&e在 &6%2 &e毫秒內移除 &6%1 &eLwc ä¿è­·ã€‚' + CanBeRented: '&6%1&e å¯ä»¥è¢«å‡ºç§Ÿçµ¦ &6%2 &6%3 &e天,&6/res market rent。' + CanBeBought: '&6%1&e å¯ä»¥è¢«å‡ºå”®çµ¦ &6%2&e,&6/res market buy。' + IsForRent: '&6(出租)' + IsForSale: '&6(出售)' + IsRented: '&6(已出租)' Rent: - Disabled: '&c領地出租已ç¦ç”¨.' - DisableRenew: '&e領地 &6%1 &eä¸æœƒåœ¨ç§Ÿç´„到期時自動續期.' - EnableRenew: '&e領地 &6%1 &e將會在租約到期時自動續期.' - Expire: '&e租約到期時間: &6%1' - ModifyDeny: '&c無法修改租用的領地.' - Days: '&e租用天數: &6%1' - Rented: ' &6(已出租)' - RentList: ' &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7' + Disabled: '&c已關閉領地出租……' + DisableRenew: '&e領地 &6%1 &eä¸æœƒåœ¨ç§Ÿç´„到期時自動續期。' + EnableRenew: '&e領地 &6%1 &e將會在租約到期時自動續期。' + NotByYou: '&c領地ä¸æ˜¯ä½ ç§Ÿçš„。' + isForRent: '&2å¯ä¾›å‡ºç§Ÿçš„領地。' + MaxRentDays: '&cä½ ä¸èƒ½ä¸€æ¬¡å‡ºç§Ÿè¶…éŽ &6%1 &c天。' + OneTime: '&c無法延長領地的出租時間。' + Extended: '&e已為領地 &6%2 延長租約 &6%1 &e天。' + Expire: '&e租約到期時間 : &6%1。' + AutoPayTurnedOn: '&7å·²&2é–‹å•Ÿ&7自動付款。' + AutoPayTurnedOff: '&7å·²&c關閉&7自動付款。' + ModifyDeny: '&c無法修改租用的領地。' + Days: '&7租用天數 : &6%1。' + Rented: ' &6(已出租)' + RentList: ' &6%1&7. &6%2 &7(&6%3&7/&6%4&7/&6%5&7) - &6%6 &6%7' + EvictConfirm: '&7輸入 &3/res market confirm &7確èªå‡ºç§Ÿäºº &6%1 &7領地。' + UnrentConfirm: '&7輸入 &3/res market confirm &7確èªæ˜¯å¦æ­£ç¢º &6%1 &7領地。' + ReleaseConfirm: '&7輸入 &3/res market confirm &7確èªæ˜¯å¦å¾žå¸‚場中移除 &6%1 &7領地。' + command: + addedAllow: '&7新增領地 &6%1 &7çš„å…許指令。' + removedAllow: '&7移除領地 &6%1 &7çš„å…許指令。' + addedBlock: '&7新增領地 &6%1 &7的拒絕指令。' + removedBlock: '&7移除領地 &6%1 &7的拒絕指令。' + Blocked: '&7拒絕的指令 : &6%1。' + Allowed: '&7å…許的指令 : &6%1。' Rentable: - Land: '&e出租領地: &6' - AutoRenew: '&e自動更新租用狀態: &6%1' - DisableRenew: '&6%1 &eä¸æœƒåœ¨åˆ°æœŸæ™‚自動更新租用狀態.' - EnableRenew: '&6%1 &e將會在到期時自動更新租用狀態.' + Land: '&7出租領地 : &6。' + AllowRenewing: '&7å¯ä»¥çºŒç§Ÿ : &6%1。' + StayInMarket: '&7將出租項目留在市場 : &6%1。' + AllowAutoPay: '&7å…許自動付款 : &6%1。' + DisableRenew: '&6%1 &7ä¸æœƒåœ¨åˆ°æœŸæ™‚自動更新租用狀態。' + EnableRenew: '&6%1 &7將會在到期時自動更新租用狀態。' Economy: - LandForSale: '&e出售領地:' - NotEnoughMoney: '&c你沒有足夠的金錢.' - MoneyCharged: '&e已從你的 &6%2 &e帳戶中支出 &6%1 &eå…ƒ.' - MoneyAdded: '&eä½ çš„ &6%2 &e帳戶增加了 &6%1 &eå…ƒ.' - MoneyCredit: '&eä½ çš„ &6%2 &e帳戶收入了 &6%1 &eå…ƒ.' - RentReleaseInvalid: '&e領地 &6%1 &e沒有被租用或者出租.' - RentSellFail: '&c無法出售正在出租的領地.' - SellRentFail: '&c無法出租正在出售的領地.' - OwnerBuyFail: '&cä¸èƒ½è³¼è²·è‡ªå·±çš„領地!' - OwnerRentFail: '&cä¸èƒ½ç§Ÿç”¨è‡ªå·±çš„領地!' - AlreadySellFail: '&e領地已在出售中!' - LeaseRenew: '&e租約有效期到 &6%1' - LeaseRenewMax: '&eå…許的最大租約續期' - LeaseNotExpire: '&e租約ä¸å­˜åœ¨æˆ–者未éŽæœŸ.' - LeaseRenewalCost: '&e續租 &6%1 &e的花費為 &6%2' - LeaseInfinite: '&e出租時間已設置為無é™.' - MarketDisabled: '&c領地經濟已ç¦ç”¨!' - SellAmount: '&e出售數é‡: &2%1' - SellList: ' &6%1&e. &6%2 &e(&6%3&e) - &6%4' - LeaseExpire: '&e租約到期時間: &2%1' + LandForSale: '&e出售領地 : ' + NotEnoughMoney: '&c你沒有足夠的金錢。' + MoneyCharged: '&7已從你的帳戶中支出 &8%1。' + MoneyAdded: '&7你的帳戶增加了 &8%1。' + MoneyCredit: '&7你的帳戶收到了 &8%1。' + RentReleaseInvalid: '&7領地 &6%1 &7沒有被租用或出租。' + RentSellFail: '&c無法出售正在出租的領地。' + SubzoneRentSellFail: '&c無法出售,此å­å€åŸŸé ˜åœ°å‡ºç§Ÿä¸­ã€‚' + ParentRentSellFail: '&c無法出售出租中的領地。' + SubzoneSellFail: '&c無法出售å­å€åŸŸé ˜åœ°ã€‚' + SellRentFail: '&c無法出租正在出售的領地。' + ParentSellRentFail: '&c無法租用出售中的領地。' + OwnerBuyFail: '&cä¸èƒ½è³¼è²·è‡ªå·±çš„領地。' + OwnerRentFail: '&cä¸èƒ½ç§Ÿç”¨è‡ªå·±çš„領地。' + AlreadySellFail: '&7領地已在出售中。' + LeaseRenew: '&7租約有效期到 &6%1。' + LeaseRenewMax: '&7å…許的最大租約續期。' + LeaseNotExpire: '&7租約ä¸å­˜åœ¨æˆ–未éŽæœŸã€‚' + LeaseRenewalCost: '&7續租 &6%1 &7的花費為 &6%2。' + LeaseInfinite: '&7出租時間已設定為無é™ã€‚' + MarketDisabled: '&c已關閉經濟系統。' + SellAmount: '&7å‡ºå”®æ•¸é‡ ï¼š &2%1。' + SellList: ' &6%1&7. &6%2 &7(&6%3&7) - &6%4。' + LeaseExpire: '&7租約到期時間 : &2%1。' + LeaseList: '&6%1. &7%2 &2%3 &7%4。' Expanding: - North: '&eå‘北方擴展 &6%1 &e個方塊' - West: '&eå‘西方擴展 &6%1 &e個方塊' - South: '&eå‘å—方擴展 &6%1 &e個方塊' - East: '&eå‘æ±æ–¹æ“´å±• &6%1 &e個方塊' - Up: '&eå‘上方擴展 &6%1 &e個方塊' - Down: '&eå‘下方擴展 &6%1 &e個方塊' + North: '&7å‘北方擴展 &6%1 &7個方塊。' + West: '&7å‘西方擴展 &6%1 &7個方塊。' + South: '&7å‘å—方擴展 &6%1 &7個方塊。' + East: '&7å‘æ±æ–¹æ“´å±• &6%1 &7個方塊。' + Up: '&7å‘上方擴展 &6%1 &7個方塊。' + Down: '&7å‘下方擴展 &6%1 &7個方塊。' Contracting: - North: '&eåœ¨åŒ—æ–¹ç¸®å° &6%1 &e個方塊' - West: '&eåœ¨è¥¿æ–¹ç¸®å° &6%1 &e個方塊' - South: '&e在å—æ–¹ç¸®å° &6%1 &e個方塊' - East: '&e在æ±æ–¹ç¸®å° &6%1 &eblocks' - Up: '&eåœ¨ä¸Šæ–¹ç¸®å° &6%1 &e個方塊' - Down: '&eåœ¨ä¸‹æ–¹ç¸®å° &6%1 &e個方塊' + North: '&7å‘åŒ—æ–¹ç¸®å° &6%1 &7個方塊。' + West: '&7å‘è¥¿æ–¹ç¸®å° &6%1 &7個方塊。' + South: '&7å‘å—æ–¹ç¸®å° &6%1 &7個方塊。' + East: '&7å‘æ±æ–¹ç¸®å° &6%1 &7個方塊。' + Up: '&7å‘ä¸Šæ–¹ç¸®å° &6%1 &7個方塊。' + Down: '&7å‘ä¸‹æ–¹ç¸®å° &6%1 &7個方塊。' Shifting: - North: '&eå‘北方平移 &6%1 &e個方塊' - West: '&eå‘西方平移 &6%1 &e個方塊' - South: '&eå‘å—方平移 &6%1 &e個方塊' - East: '&eå‘æ±æ–¹å¹³ç§» &6%1 &e個方塊' - Up: '&eå‘上方平移 &6%1 &e個方塊' - Down: '&eå‘下方平移 &6%1 &e個方塊' + North: '&7å‘北方平移 &6%1 &7個方塊。' + West: '&7å‘西方平移 &6%1 &7個方塊。' + South: '&7å‘å—方平移 &6%1 &7個方塊。' + East: '&7å‘æ±æ–¹å¹³ç§» &6%1 &7個方塊。' + Up: '&7å‘上方平移 &6%1 &7個方塊。' + Down: '&7å‘下方平移 &6%1 &7個方塊。' Limits: - PGroup: '&7- &e許å¯æ¬Šçµ„:&3 %1' - RGroup: '&7- &e領地組:&3 %1' - Admin: '&7- &e領地管ç†å“¡:&3 %1' - CanCreate: '&7- &eå…許創建領地:&3 %1' - MaxRes: '&7- &e最大領地數é‡:&3 %1' - MaxEW: '&7- &eæ±è¥¿æ–¹å‘最大:&3 %1' - MaxNS: '&7- &eå—北方å‘最大:&3 %1' - MaxUD: '&7- &e上下方å‘最大:&3 %1' - MinMax: '&7- &e最å°/最大高度:&3 %1 到 %2' - MaxSub: '&7- &e最大分å€æ·±åº¦:&3 %1' - MaxRents: '&7- &e最多租用:&3 %1' - EnterLeave: '&7- &eå¯è¨­ç½®åŠ å…¥é›¢é–‹è³‡è¨Š:&3 %1' - NumberOwn: '&7- &eæ“有的領地數é‡:&3 %1' - Cost: '&7- &e領地æ¯æ–¹å¡ŠèŠ±è²»:&3 %1' - Sell: '&7- &e領地出售æ¯æ–¹å¡ŠèŠ±è²»:&3 %1' - Flag: '&7- &eå…許的領地許å¯æ¬Š:&3 %1' - MaxDays: '&7- &e最大租約時間:&3 %1' - LeaseTime: '&7- &e租約續期時間:&3 %1' - RenewCost: '&7- &e續租æ¯æ–¹å¡ŠèŠ±è²»:&3 %1' + PGroup: '&7- &7權é™çµ„ : &3%1。' + RGroup: '&7- &7領地組 : &3%1。' + Admin: '&7- &7領地管ç†å“¡ : &3%1。' + CanCreate: '&7- &7å…許建立領地 : &3%1。' + MaxRes: '&7- &7æœ€å¤§é ˜åœ°æ•¸é‡ ï¼š &3%1。' + MaxEW: '&7- &7æ±è¥¿æ–¹å‘最大 : &3%1。' + MaxNS: '&7- &7å—北方å‘最大 : &3%1。' + MaxUD: '&7- &7上下方å‘最大 : &3%1。' + MinMax: '&7- &7最å°/最大高度 : &3%1 到 %2。' + MaxSubzones: '&7- &7最大å­å€åŸŸ : &3%1。' + MaxSubDepth: '&7- &7最大å­å€åŸŸæ·±åº¦ : &3%1。' + MaxRents: '&7- &7最多租用 : &3%1。' + MaxRentDays: ' &7最多租用天數 : &3%1。' + EnterLeave: '&7- &7å¯è¨­å®šåŠ å…¥é›¢é–‹è¨Šæ¯ : &3%1。' + NumberOwn: '&7- &7æ“æœ‰çš„é ˜åœ°æ•¸é‡ ï¼š &3%1。' + Cost: '&7- &7領地æ¯æ–¹å¡ŠèŠ±è²» : &3%1。' + Sell: '&7- &7領地出售æ¯æ–¹å¡ŠèŠ±è²» : &3%1。' + Flag: '&7- &7å…è¨±çš„é ˜åœ°æ¬Šé™ ï¼š &3%1。' + MaxDays: '&7- &7最大租約時間 : &3%1。' + LeaseTime: '&7- &7租約續期時間 : &3%1。' + RenewCost: '&7- &7續租æ¯æ–¹å¡ŠèŠ±è²» : &3%1。' Gui: Set: - Title: '&l%1 許å¯æ¬Š' + Title: '&6%1 權é™' Pset: - Title: '&l%1 %2 許å¯æ¬Š' + Title: '&6%1 %2 權é™' Actions: - - '&2å·¦éµæŒ‰ä¸€ä¸‹å•Ÿç”¨' - - '&c按å³éµç¦ç”¨' - - '&eShift+å·¦éµæŒ‰ä¸€ä¸‹åˆªé™¤' + - '&2點擊左éµä¿®æ”¹ç‚ºé–‹å•Ÿ' + - '&c點擊å³éµä¿®æ”¹ç‚ºé—œé–‰' + - '&6Shift + 點擊左éµä¿®æ”¹ç‚ºæœªè¨­å®š' InformationPage: - TopLine: '&e---< &a %1 &e >---' + Top: '&e___/ &a %1 - %2 &e \___' + TopSingle: '&e___/ &a %1 &e \___' Page: '&e-----< &6%1 &e>-----' - NextPage: '&e-----< &6%1 &e>-----' + NextPage2: '&e-----< &6%1 &e>-----' NoNextPage: '&e-----------------------' + GeneralList: '&2 %1 &6- &e%2' + FlagsList: '&2 %1 &6- &e%2' + SmallSeparator: '&6------' Chat: - ChatChannelChange: '&e領地èŠå¤©é »é“已更改為 &6%1!' - ChatChannelLeave: '&e離開領地èŠå¤©' - JoinFirst: '&4請先加入領地èŠå¤©é »é“.' - InvalidChannel: '&4無效頻é“.' - InvalidColor: '&4é¡è‰²ä»£ç¢¼éŒ¯èª¤' - NotInChannel: '&4玩家ä¸åœ¨é »é“中' - Kicked: '&6%1 &e被 &6%2 &eé »é“踢出' - InvalidPrefixLength: '&4首碼éŽé•·. 最大長度: %1' - ChangedColor: '&e領地頻é“é¡è‰²æ›´æ”¹ç‚º %1' - ChangedPrefix: '&e領地頻é“首碼更改為 %1' + ChatChannelChange: '&e切æ›åˆ°é ˜åœ° &6%1 èŠå¤© ï¼' + ChatChannelLeave: '&e離開領地èŠå¤©ã€‚' + ChatMessage: '%1 %2%3: %4%5' + ChatListeningMessage: '&2[Listening %6]%1 %2%3: %4%5' + JoinFirst: '&4請先加入領地èŠå¤©é »é“……' + InvalidChannel: '&4無效的頻é“……' + InvalidColor: '&4錯誤的é¡è‰²ä»£ç¢¼ã€‚' + NotInChannel: '&4玩家ä¸åœ¨é »é“中。' + Kicked: '&6%1 &eå·²è¢«å¾žé »é“ &6%2 &e踢出。' + InvalidPrefixLength: '&4å‰ç¶´éŽé•·ï¼Œå…許的長度 : %1。' + ChangedColor: '&e領地èŠå¤©é »é“é¡è‰²æ›´æ”¹æˆ %1。' + ChangedPrefix: '&e領地èŠå¤©é »é“å‰ç¶´æ›´æ”¹æˆ %1。' Shop: - ListTopLine: '&6%1 &e商店列表 - 第 &6%2 &eé , å…± &6%3 %4' - List: ' &e%1. &6%2 &e(&6%3&e) %4' - ListVoted: '&e%1 (&6%2&e)' - ListLiked: '&eè´Š: &0%1' - VotesTopLine: '&6%1 &e%2 評分列表 &6- &e第 &6%3 &eé , å…± &6%4 %5' - VotesList: ' &e%1. &6%2 &e%3 &7%4' + ListTopLine: '&6%1 &7商店列表 - 第 &6%2 &7é ï¼Œå…± &6%3 %4。' + List: ' &7%1. &6%2 &7(&6%3&7) %4' + ListVoted: '&7%1 (&6%2&7)' + ListLiked: '&7è´Š: &0%1' + VotesTopLine: '&6%1 &7%2 評分列表 &6- &7第 &6%3 &7é ï¼Œå…± &6%4 %5' + VotesList: ' &7%1. &6%2 &7%3 &7%4' NoDesc: '&6沒有æè¿°' Desc: |- - &6æè¿°: + &6æè¿° : %1 - DescChange: '&6æ述已更改為: %1' - NewBoard: '&6æˆåŠŸæ·»åŠ å•†åº—宣傳æ¿' - DeleteBoard: '&6å³æ“Šè¦åˆªé™¤çš„宣傳æ¿' - DeletedBoard: '&6宣傳æ¿å·²ç§»é™¤' - IncorrectBoard: '&c宣傳æ¿ä¸æ­£ç¢º, è«‹é‡æ–°é»žæ“Šæ­£ç¢ºçš„宣傳æ¿' - InvalidSelection: '&c使用é¸å–工具, 先點擊左上角的告示牌, å†é»žæ“Šå³ä¸‹è§’的告示牌' - VoteChanged: '&6領地 &e%3 &6的評分由 &e%1 &6更改為 &e%2&6.' - Voted: '&6你給 &e%2 &6評了 &e%1 &6分.' - Liked: '&6你贊了 &e%1 &6領地.' - AlreadyLiked: '&6ä½ å·²ç¶“è´ŠéŽ &e%1 &6領地了.' - NoVotes: '&c該領地還沒有評分.' - CantVote: '&c該領地ä¸æ˜¯å•†åº—.' - VotedRange: '&6åªèƒ½çµ¦å‡º &e%1 &6分到 &e%2 &6分.' + DescChange: '&6æ述已更改為 : %1。' + ChantChange: '&4無法更改商店權é™ç‚º true (t)。' + NewBoard: '&6æˆåŠŸæ–°å¢žå•†åº—宣傳é¢æ¿ã€‚' + BoardExist: '&c這個ä½ç½®å·²å­˜åœ¨å•†åº—宣傳é¢æ¿ã€‚' + DeleteBoard: '&6點擊å³éµç§»é™¤å•†åº—宣傳é¢æ¿ã€‚' + DeletedBoard: '&6已移除商店宣傳é¢æ¿ã€‚' + IncorrectBoard: '&c這ä¸æ˜¯å•†åº—宣傳é¢æ¿ï¼Œè«‹é‡æ–°é»žæ“Šæ­£ç¢ºçš„商店宣傳é¢æ¿ã€‚' + InvalidSelection: '&c使用é¸æ“‡å·¥å…·ï¼Œå…ˆé»žæ“Šå·¦ä¸Šè§’的告示牌,å†é»žæ“Šå³ä¸‹è§’的告示牌。' + ToBigSelection: '&cé¸æ“‡çš„範åœå¤ªå¤§ï¼Œæœ€å¤šå…許 16 個方塊。' + ToDeapSelection: '&cé¸æ“‡çš„範åœå¤ªå¤§ï¼Œæœ€å¤§å…許為 16x16x1 的範åœã€‚' + VoteChanged: '&6領地 &7%3 &6的評分由 &7%1 &6更改為 &7%2&6。' + Voted: '&6你給 &7%2 &6評了 &7%1 &6分。' + Liked: '&6ä½ å°é ˜åœ° &7%1 &6按讚。' + AlreadyLiked: '&6ä½ å·²å°é ˜åœ° &7%1 &6按讚éŽäº†ã€‚' + NoVotes: '&c該領地還沒有評分。' + CantVote: '&c領地尚未開啟商店權é™ã€‚' + VotedRange: '&6åªèƒ½è©•å‡º &7%1 &6分到 &7%2 &6分。' SignLines: '1': '&e--== &8%1 &e==--' '2': '&9%1' '3': '&4%1' - '4': '&8%1&e (&8%2&e)' - Likes4: '&9è´Š: &8%2' + '4': '&8%1&e (&8%2&e)' + Likes4: '&9喜歡 : &8%2' RandomTeleport: - TpLimit: '&e請等待 &6%1 &e秒後å†å‚³é€' - TeleportSuccess: '&e傳é€åˆ° X:&6%1&e, Y:&6%2&e, Z:&6%3 &eä½ç½®' - IncorrectLocation: '&6無法找到正確的傳é€ä½ç½®, 請等待 &e%1 &6秒後é‡è©¦.' - TeleportStarted: '&e傳é€å³å°‡é–‹å§‹, 在 &6%4 &e秒內ä¸è¦ç§»å‹•.' - WorldList: '&ePossible worlds: &6%1' + TpLimit: '&7傳é€éŽæ–¼é »ç¹ï¼Œè«‹ç¨ç­‰ &6%1 &7秒後å†æ¬¡å‚³é€ã€‚' + TeleportSuccess: '&7傳é€åˆ° X:&6%1 &7Y:&6%2 &7Z:&6%3 &7座標。' + IncorrectLocation: '&7找ä¸åˆ°æ­£ç¢ºçš„傳é€åº§æ¨™ï¼Œè«‹ç¨ç­‰ &6%1 &7秒後é‡è©¦ã€‚' + Disabled: '&c該世界關閉隨機傳é€ã€‚' + TeleportStarted: '&7傳é€å°‡åœ¨ &6%4 &7秒後開始,ä¸è¦ç§»å‹•ã€‚' + WorldList: '&eå¯ç”¨ä¸–ç•Œ : &6%1。' + Permissions: + variableColor: '&f' + permissionColor: '&6' + cmdPermissionColor: '&2' General: - DisabledWorld: '&c該世界已ç¦ç”¨é ˜åœ°.' - UseNumbers: '&c請輸入數ä½.' - CantPlaceLava: '&cä½ ä¸èƒ½åœ¨é ˜åœ°å¤–高於 &6%1 &c的地方放置岩漿.' - CantPlaceWater: '&cä½ ä¸èƒ½åœ¨é ˜åœ°å¤–高於 &6%1 &c的地方放置水.' - NoPermission: '&c你沒有執行此æ“作的許å¯æ¬Š.' - DefaultUsage: '&e輸入 &6/%1 ? &e查看説明資訊' - MaterialGet: '&eID &6%1 &eçš„ææ–™å稱為 &6%2' - MarketList: '&e---- &6市場列表 &e----' - Separator: '&e------------------------------------------------' - AdminOnly: '&cåªæœ‰ç®¡ç†å“¡æ‰èƒ½åŸ·è¡Œé€™å€‹å‘½ä»¤.' - InfoTool: '&e- 資訊工具: &6%1' - ListMaterialAdd: '&6%1 &e已被添加到 &6%2 &e領地.' - ListMaterialRemove: '&6%1 &e已從 &6%2 &e領地移除.' - ItemBlacklisted: '&c此處ç¦æ­¢ä½¿ç”¨è©²ç‰©å“.' - WorldPVPDisabled: '&c世界 PVP å·²ç¦ç”¨.' - NoPVPZone: '&céž PVP å€åŸŸ.' - InvalidHelp: '&c無效幫助é ç¢¼.' - TeleportDeny: '&c你沒有傳é€çš„許å¯æ¬Š.' - TeleportSuccess: '&e已傳é€!' - TeleportConfirm: '&c傳é€ä¸å®‰å…¨, ä½ å°‡æ‘”è½ &6%1 &c個方塊. 如果ä»è¦å‚³é€, 輸入 &6/res tpconfirm &c確èª.' - TeleportStarted: '&eé–‹å§‹å‘ &6%1 &e傳é€, 在 &6%2 &e秒內ä¸è¦ç§»å‹•.' - TeleportCanceled: '&e傳é€è¢«å–消!' - NoTeleportConfirm: '&e沒有需è¦ç¢ºèªçš„傳é€è«‹æ±‚!' - HelpPageHeader: '&e領地説明 - &6%1 &e- é é¢ <&6%2 &e/ &6%3&e>' - ListExists: '&c列表已存在.' - ListRemoved: '&e已刪除列表.' - ListCreate: '&e已創建列表 &6%1' + DisabledWorld: '&c該世界關閉領地。' + UseNumbers: '&c請使用數字……' + # Replace all text with '' to disable this message + CantPlaceLava: '&c無法在沒有領地的地方放置岩漿。' + # Replace all text with '' to disable this message + CantPlaceWater: '&c無法在沒有領地的地方放置水。' + CantPlaceChest: '&c你沒有放置儲物箱的權é™ã€‚' + NoPermission: '&c你沒有執行此æ“作的權é™ã€‚' + info: + NoPlayerPermission: '&c[playerName] 沒有 [permission] 權é™ã€‚' + NoCmdPermission: '&c沒有這個指令的權é™ã€‚' + DefaultUsage: '&7輸入 &6/%1 ? &7查看説明。' + MaterialGet: '&7ID &6%1 &7的物å“å稱為 &6%2' + MarketList: '&7---- &6市場列表 &7----' + Separator: '&7------------------------------------------------' + AdminOnly: '&cåªæœ‰ç®¡ç†å“¡æ‰èƒ½åŸ·è¡Œé€™å€‹æŒ‡ä»¤ã€‚' + InfoTool: '&7- 資訊工具 : &6%1' + ListMaterialAdd: '&6%1 &7已被新增到領地 &6%2 &7。' + ListMaterialRemove: '&6%1 &7已從領地 &6%2 &7移除。' + ItemBlacklisted: '&c此處ç¦æ­¢ä½¿ç”¨è©²ç‰©å“。' + WorldPVPDisabled: '&c已關閉世界 PVP。' + NoPVPZone: '&céž PVP å€åŸŸã€‚' + NoFriendlyFire: '&cNo friendly fire' + InvalidHelp: '&c無效說明é æ•¸' + TeleportDeny: '&c沒有傳é€çš„權é™' + TeleportSuccess: '&7已傳é€' + TeleportConfirmLava: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰è½é€² &6岩漿&c,若ä»è¦å‚³é€è«‹è¼¸å…¥ &6/res tpconfirm &c來確定æ“作。' + TeleportConfirmVoid: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰è½é€² &6虛空&c,若ä»è¦å‚³é€è«‹è¼¸å…¥ &6/res tpconfirm &c來確定æ“作。' + TeleportConfirm: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰è½ &6%1 &c格高的方塊,若ä»è¦å‚³é€è«‹è¼¸å…¥ &6/res tpconfirm &c來確定æ“作。' + TeleportStarted: '&e已開始傳é€åˆ° &6%1 &e,在 &6%2 &e秒內請勿移動。' + TeleportTitle: '&e傳é€ä¸­ ï¼' + TeleportTitleTime: '&6%1' + TeleportCanceled: '&eå·²å–æ¶ˆå‚³é€ ï¼' + NoTeleportConfirm: '&e沒有需è¦ç¢ºèªçš„å‚³é€ ï¼' + HelpPageHeader2: '&e說明é é¢ - &6%1 &e- é  <&6%2 &eof &6%3&e>' + ListExists: '&c已存在列表……' + ListRemoved: '&e已移除列表……' + ListCreate: '&e已建立列表 &6%1。' PhysicalAreas: '&e物ç†å€åŸŸ' - CurrentArea: '&e當å‰å€åŸŸ: &6%1' - TotalSize: '&e總大å°: &6%1' - TotalWorth: '&e總價值: &6%1 &e(&6%2&e)' - NotOnline: '&e目標玩家ä¸ç·šä¸Š.' - NextPage: '&e下一é ' - NextInfoPage: '&2| &eä¸‹ä¸€é  &2>>>' - PrevInfoPage: '&2<<< &eä¸Šä¸€é  &2|' - GenericPage: '&e第 &6%1 &eé , å…± &6%2' - WorldEditNotFound: '&c未檢測到 WorldEdit.' - CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' - CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' - AdminToggleTurnOn: '&e自動管ç†æ¨¡å¼&6é–‹å•Ÿ' - AdminToggleTurnOff: '&e自動管ç†æ¨¡å¼&6關閉' - NoSpawn: '&e你沒有在出生點的 &6移動 &e許å¯æ¬Š, 正在é‡æ–°å®šä½.' - CompassTargetReset: '&e你的指å—é‡å·²è¢«é‚„原' - CompassTargetSet: '&e你的指å—é‡ç›®å‰æŒ‡å‘ &6%1' - Ignorelist: '&2忽略åå–®:&6' - Blacklist: '&c黑åå–®:&6' - LandCost: '&e領地花費: &6%1' - 'True': '&2是' - 'False': '&cå¦' - Removed: '&6Removed' - FlagState: '&eFlag state: %1' - Land: '&e領地: &6%1' - Cost: '&e花費: æ¯ &6%2 &e天 &6%1' - Status: '&e狀態: %1' + CurrentArea: '&eç›®å‰å€åŸŸ : &6%1' + TotalResSize: '&e總計尺寸 : &6%1 立方公尺 &e(&6%2 平方公尺&e)' + ResSize: + eastWest: '&eæ±/西 : &6%1' + northSouth: '&e北/å— ï¼š &6%1' + upDown: '&e上/下 : &6%1' + TotalWorth: '&e總計價值 : &6%1 &e(&6%2&e)' + TotalSubzones: '&eå­å€åŸŸé ˜åœ° : &6%1 &e(&6%2&e)' + NotOnline: '&e目標玩家一定è¦åœ¨ç·šä¸Šã€‚' + prevPage: '&7----<< &6ä¸Šä¸€é  ' + prevPageGui: '&6ä¸Šä¸€é  ' + prevPageClean: '&6上一個 ' + prevPageOff: '&7----<< &6ä¸Šä¸€é  ' + prevPageHover: '&7<<<' + firstPageHover: '&7|<' + nextPage: ' &6ä¸‹ä¸€é  &7>>----' + nextPageGui: '&6下一é ' + nextPageClean: '&6下一個' + nextPageOff: ' &6ä¸‹ä¸€é  &7>>----' + nextPageHover: '&7>>>' + lastPageHover: '&7>|' + pageCount: '&3%1&7/&3%2' + pageCountHover: '&3%1' + GenericPages: '&7é  &6%1 &7çš„ &6%2 &7(&6%3&7)' + WorldEditNotFound: '&c未åµæ¸¬åˆ° WorldEdit。' + CoordsTop: '&7X:&6%1 &7Y:&6%2 &7Z:&6%3' + CoordsBottom: '&7X:&6%1 &7Y:&6%2 &7Z:&6%3' + CoordsLiner: '&7 (&3%1&7 ï¼› %2&7)' + AllowedTeleportIcon: '&2T' + BlockedTeleportIcon: '&7T' + AllowedMovementIcon: '&2M' + BlockedMovementIcon: '&7M' + AdminToggleTurnOn: '&6已開啟&7自動管ç†æ¨¡å¼' + AdminToggleTurnOff: '&6已關閉&7自動管ç†æ¨¡å¼' + NoSpawn: '&7你沒有é‡ç”Ÿé»ž &6移動 &7的權é™ï¼Œç›®å‰æ­£åœ¨é‡æ–°å®šä½ã€‚' + CompassTargetReset: '&7å·²é‡æ–°è¨­å®šä½ çš„羅盤。' + CompassTargetSet: '&7你的羅盤目å‰æŒ‡å‘ &6%1。' + Ignorelist: '&2忽略åå–® : &6' + Blacklist: '&c黑åå–® :&6' + LandCost: '&e領地花費 : &6%1' + 'True': '&2é–‹å•Ÿ' + 'False': '&c關閉' + Removed: '&6未設定' + FlagState: '&e權é™ç‹€æ…‹ : %1' + Land: '&e領地 : &6%1' + Cost: '&7花費 : æ¯ &6%2 &7天 &6%1' + Status: '&7狀態 : %1' Available: '&2å¯ç”¨' - Size: ' &e大å°: &6%1' - Flags: '&e許å¯æ¬Š: &6%1' - YourFlags: '&e你的許å¯æ¬Š: &6%1' - GroupFlags: '&e組許å¯æ¬Š: &6%1' - OthersFlags: '&e其他人許å¯æ¬Š: &6%1' - Moved: '&e已移動.' - Name: '&eå稱: &6%1' - Lists: '&e列表: &6' - Residences: '&e領地&6' - Owner: '&e所有者: &6%1' - World: '&e世界: &6%1' - Subzones: '&eå­å€åŸŸ' + Size: ' &7尺寸 : &6%1' + ResidenceFlags: '&7é ˜åœ°æ¬Šé™ ï¼š &6%1' + PlayersFlags: '&7çŽ©å®¶æ¬Šé™ ï¼š &6%1' + GroupFlags: '&7çµ„æ¬Šé™ ï¼š &6%1' + OthersFlags: '&7å…¶ä»–äººæ¬Šé™ ï¼š &6%1' + Moved: '&7已移動' + Name: '&7å稱 : &6%1' + Lists: '&7列表 : &6' + Residences: '&7領地&6' + CreatedOn: '&7建立於 : &6%1' + Owner: '&7æ“有者 : &6%1' + World: '&7世界 : &6%1' + Subzones: '&7å­å€åŸŸ' # The below lines represent various messages residence sends to the players. # Note that some messages have variables such as %1 that are inserted at runtime. - NewPlayerInfo: '&e如果è¦å‰µå»ºé ˜åœ°ä¾†ä¿è­·æˆ¿å±‹, 請用木鋤é¸å–ä¿è­·å€çš„兩個å°è§’, 然後執行 &2/res create 領地å稱 &e命令.' + NewPlayerInfo: '&7如果è¦å»ºç«‹é ˜åœ°ï¼Œè«‹ä½¿ç”¨ä¼ºæœå™¨æŒ‡å®šçš„工具,é¸æ“‡é ˜åœ°çš„兩個å°è§’,然後輸入 &3/res create &6[領地å稱] &7指令。' CommandHelp: - Description: 領地的命令幫助 + Description: Contains Help for Residence SubCommands: res: - Description: 領地的主命令 + Description: 領地的主指令 Info: - - '&2輸入 &6/res [命令] ? <é ç¢¼> &2查看更多資訊.' + - '&e輸入 &6/res &6[指令] ? [é æ•¸] &e查看更多資訊' SubCommands: + auto: + Info: + - '&e用法 : &6/res auto &6[領地å稱] [åŠå¾‘]' + Description: 在你周åœå»ºç«‹æœ€å¤§å…許範åœçš„領地 select: - Description: é¸å–命令 Info: - - 該命令é¸æ“‡é ˜åœ°çš„ç¯„åœ - - /res select [x] [y] [z] - é¸æ“‡ä»¥ä½ ç‚ºä¸­å¿ƒä¸€å®šç¯„åœçš„方塊. + - '&e該指令é¸æ“‡é ˜åœ°çš„範åœ' + - '&6/res select &6[x] [y] [z] - &eé¸æ“‡ä»¥ä½ ç‚ºä¸­å¿ƒä¸€å®šç¯„åœçš„方塊' + Description: é¸æ“‡æŒ‡ä»¤ SubCommands: coords: Description: 顯示已é¸æ“‡å€åŸŸçš„座標 Info: - - '&e用法: &6/res select coords' + - '&e用法 : &6/res select coords' size: Description: 顯示已é¸æ“‡å€åŸŸçš„å¤§å° Info: - - '&e用法: &6/res select size' + - '&e用法 : &6/res select size' auto: Description: 打開自動é¸æ“‡å·¥å…· Info: - - '&e用法: &6/res select auto [玩家]' - Args: '[playername]' + - '&e用法 : &6/res select auto &6[玩家]' cost: Description: 顯示已é¸æ“‡å€åŸŸçš„價格 Info: - - '&e用法: &6/res select cost' + - '&e用法 : &6/res select cost' vert: - Description: 縱å‘擴展é¸å€ + Description: 縱å‘擴展é¸æ“‡å€åŸŸ Info: - - '&e用法: &6/res select vert' - - å°‡é¸å€æ“´å±•åˆ°åœ°åœ–頂端和底端 + - '&e用法 : &6/res select vert' + - '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°åœ°åœ–頂端和底端' sky: - Description: 擴展é¸å€åˆ°å¤©ç©º + Description: 擴展é¸æ“‡å€åŸŸåˆ°å¤©ç©º Info: - - '&e用法: &6/res select sky' - - å°‡é¸å€æ“´å±•åˆ°åœ°åœ–頂端 + - '&e用法 : &6/res select sky' + - '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°åœ°åœ–頂端' bedrock: - Description: 擴展é¸å€åˆ°åŸºå²© + Description: 擴展é¸æ“‡å€åŸŸåˆ°åŸºå²© Info: - - '&e用法: &6/res select bedrock' - - å°‡é¸å€æ“´å±•åˆ°åœ°åœ–底端 + - '&e用法 : &6/res select bedrock' + - '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°åœ°åœ–底端' expand: - Description: å‘一個方å‘擴展é¸å€ + Description: å‘一個方å‘擴展é¸æ“‡å€åŸŸ Info: - - '&e用法: &6/res select expand <擴展單ä½>' - - å‘é¢å°çš„æ–¹å‘擴展 <擴展單ä½> 個方塊 + - '&e用法 : &6/res select expand &6[擴展單ä½]' + - '&eå‘é¢å°çš„æ–¹å‘擴展 &6[擴展單ä½] &e個方塊' shift: - Description: å‘一個方å‘平移é¸å€ + Description: å‘一個方å‘平移é¸æ“‡å€åŸŸ Info: - - '&e用法: &6/res select shift <平移單ä½>' - - å°‡é¸å€å‘é¢å°çš„æ–¹å‘平移 <平移單ä½> 個方塊 + - '&e用法 : &6/res select shift &6[平移單ä½]' + - '&eå°‡é¸æ“‡å€åŸŸå‘é¢å°çš„æ–¹å‘平移 &6[平移單ä½] 個方塊' chunk: Description: é¸æ“‡ä½ ç›®å‰æ‰€åœ¨çš„å€å¡Š Info: - - '&e用法: &6/res select chunk' - - é¸æ“‡ä½ ç›®å‰æ‰€åœ¨çš„å€å¡Š + - '&e用法 : &6/res select chunk' + - '&eé¸æ“‡ä½ ç›®å‰æ‰€åœ¨çš„å€å¡Š' residence: Description: é¸æ“‡é ˜åœ°ä¸­ä¸€å€‹å­˜åœ¨çš„å€åŸŸ Info: - - '&e用法: &6/res select residence <領地>' - - é¸æ“‡ <領地> 中一個存在的å€åŸŸ - Args: '[residence]' + - '&e用法 : &6/res select residence &6[領地å稱]' + - '&eé¸æ“‡ &6[領地å稱] &e中一個存在的å€åŸŸ' worldedit: - Description: 採用 WorldEdit çš„é¸å€ + Description: 採用 WorldEdit çš„é¸æ“‡å€åŸŸ Info: - - '&e用法: &6/res select worldedit' - - å°‡ WorldEdit ç›®å‰çš„é¸å€ä½œç‚ºé ˜åœ°é¸å€ + - '&e用法 : &6/res select worldedit' + - '&eå°‡ WorldEdit ç›®å‰çš„é¸æ“‡å€åŸŸä½œç‚ºé ˜åœ°é¸æ“‡å€åŸŸ' + padd: + Info: + - '&e用法 : &6/res padd &6[領地å稱] [玩家]' + - '&e為玩家新增基本權é™' + Description: 從領地新增玩家 + signconvert: + Info: + - '&e用法 : &6/res signconvert' + - '&e嘗試轉æ›å·²æœ‰çš„ ResidenceSign 告示牌' + Description: å°‡ ResidenceSign 的告示牌轉æ›ç‚ºæ–°æ ¼å¼ + listallhidden: + Info: + - '&e用法 : &6/res listhidden &6[é æ•¸]' + - '&e顯示所有玩家的隱è—領地' + Description: 顯示所有隱è—領地 + bank: + Info: + - '&e用法 : &6/res bank &6[deposit/withdraw] [領地å稱] [數é¡]' + - '&e必須站在領地中或指定領地å稱' + - '&eå¿…é ˆæ“有 &6+bank &e權é™' + Description: 管ç†é ˜åœ°éŠ€è¡Œ create: - Description: 創建領地 Info: - - '&e用法: &6/res create <領地å>' - remove: - Description: 刪除領地 + - '&e用法 : &6/res create &6[領地å稱]' + Description: 建立領地 + listall: Info: - - '&e用法: &6/res remove <領地å>' - Args: '[residence]' - padd: - Description: å‘領地添加玩家 + - '&e用法 : &6/res listall &6[é æ•¸]' + - '&e顯示所有玩家的領地' + Description: 顯示所有領地 + info: Info: - - '&e用法: &6/res padd <領地å> [玩家]' - - 為玩家添加基本許å¯æ¬Š - Args: '[residence] [playername]' - pdel: - Description: 從領地刪除玩家 + - '&e用法 : &6/res info &6[領地å稱]' + - '&e留空 &6[領地å稱] &e示顯示你目å‰æ‰€åœ¨çš„領地資訊' + Description: 顯示領地的資訊 + area: + Description: 管ç†é ˜åœ°ç‰©ç†å€åŸŸ Info: - - '&e用法: &6/res pdel <領地å> [玩家]' - - 刪除玩家的基本許å¯æ¬Š - Args: '[residence] [playername]' + - '' + SubCommands: + list: + Description: 列出領地的物ç†å€åŸŸ + Info: + - '&e用法 : &6/res area list &6[領地å稱] [é æ•¸]' + listall: + Description: 列出所有å€åŸŸçš„座標和詳細資訊 + Info: + - '&e用法 : &6/res area listall &6[領地å稱] [é æ•¸]' + add: + Description: 為領地新增物ç†å€åŸŸ + Info: + - '&e用法 : &6/res area add &6[領地å稱] [å€åŸŸ ID]' + - '&e必須先é¸ä¸­å…©å€‹é¸æ“‡é»ž' + remove: + Description: 移除領地的物ç†å€åŸŸ + Info: + - '&e用法 : &6/res area remove &6[領地å稱] [å€åŸŸ ID]' + replace: + Description: 替æ›é ˜åœ°çš„物ç†å€åŸŸ + Info: + - '&e用法 : &6/res area replace &6[領地å稱] [å€åŸŸ ID]' + - '&e必須先é¸ä¸­å…©å€‹é¸æ“‡é»ž' + - '&e如果新的å€åŸŸæ›´å¤§ 二者之間將會被充滿' give: + Info: + - '&e用法 : &6/res give &6[領地å稱] [玩家]' + - '&e將你的領地移轉給目標玩家' Description: 將領地給予其他玩家 + renamearea: Info: - - '&e用法: &6/res give <領地å> [玩家]' - - 將你的領地移轉給目標玩家 - Args: '[residence] [playername]' - info: - Description: 顯示一個領地的資訊 + - '&e用法 : &6/res removeworld &6[領地å稱] [舊å­å€åŸŸ] [æ–°å­å€åŸŸ]' + Description: é‡æ–°å‘½åå­å€åŸŸ + contract: Info: - - '&e用法: &6/res info <領地>' - - 留空 <領地> 表示顯示你目å‰æ‰€åœ¨çš„領地資訊 - Args: '[residence]' - set: - Description: 為領地設置默èªè¨±å¯æ¬Š + - '&e用法 : &6/res contract &6[領地å稱] [縮å°å–®ä½]' + - '&eå‘ä½ é¢å°çš„æ–¹å‘縮å°é ˜åœ°è¦æ¨¡' + - '&e領地å稱是å¯é¸çš„' + Description: å‘ä½ é¢å°çš„æ–¹å‘縮å°é ˜åœ° + check: Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] [true/false/remove]' - - 輸入 /res flags ? 查看許å¯æ¬Šåˆ—表 - - 如果沒有為æŸçŽ©å®¶æŒ‡å®šè©²é ˜åœ°çš„特定許å¯æ¬Š, 那麼這å玩家將會æ“有這些默èªè¨±å¯æ¬Š. (åƒè¦‹ /res pset ?) - Args: '[residence] [flag] [true/false/remove]' - pset: - Description: 為æŸçŽ©å®¶è¨­å®šè©²é ˜åœ°çš„特定許å¯æ¬Š + - '&e用法 : &6/res check &6[領地å稱] [權é™] [玩家]' + Description: 為你檢查權é™ç‹€æ…‹ + gset: Info: - - '&e用法: &6/res pset <領地> [玩家] [許å¯æ¬Š] [true/false/remove]' - - '&e用法: &6/res pset <領地> [玩家] removeall' - - 輸入 /res flags ? 查看許å¯æ¬Šåˆ—表 - Args: '[residence] [playername] [flag] [true/false/remove]' - flags: - Description: 領地許å¯æ¬Šåˆ—表 + - '&e用法 : &6/res gset &6[領地å稱] [組] [權é™] [t/f/r]' + - '&e輸入 &6/res flags ? &e查看權é™åˆ—表' + Description: 為æŸå€‹çµ„è¨­å®šé ˜åœ°çš„ç‰¹å®šæ¬Šé™ + list: + Info: + - '&e用法 : &6/res list &6[玩家] [é æ•¸]' + - '&e列出指定玩家æ“有的所有領地 (除了隱è—領地)' + - '&e如果顯示自己的領地,隱è—領地也會被顯示' + - '&eè¦åˆ—出所有玩家的領地,請使用 &6/res listall &e指令' + Description: 顯示領地列表 + version: + Info: + - '&e用法 : &6/res version' + Description: 顯示領地æ’件版本 + tool: Info: - - å°æ–¼å¤§éƒ¨åˆ†è¨±å¯æ¬Šä¾†èªª, true 表示å…許, false 表示ç¦æ­¢é€™ä¸€æ“作 + - '&e用法 : &6/res tool' + Description: 顯示查看資訊工具與é¸æ“‡ç¯„åœå·¥å…· + pdel: + Info: + - '&e用法 : &6/res pdel &6[領地å稱] [玩家]' + - '&e移除玩家的基本權é™' + Description: 從領地移除玩家 + market: + Info: + - '&e用法 : &6/res market ? &e查看更多訊æ¯' + Description: 購買/出售/出租領地 SubCommands: - build: - Description: å…許或ç¦æ­¢å»ºé€  + Info: + Description: 查看領地的經濟資訊 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - use: - Description: å…許或ç¦æ­¢ä½¿ç”¨é–€, 控制桿, 按鈕等... + - '&e用法 : &6/res market Info &6[領地å稱]' + - '&e顯示領地是å¦æ­£åœ¨å‡ºç§Ÿ/出售以åŠé ˜åœ°çš„花費' + list: + Description: 顯示å¯å‡ºç§Ÿèˆ‡å¯å‡ºå”®çš„領地 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - move: - Description: å…許或ç¦æ­¢ç§»å‹• + - '&e用法 : &6/res market list' + SubCommands: + rent: + Description: 列出å¯ä»¥è¢«ç§Ÿçš„領地. + Info: + - '&e用法 : &6/res market list rent' + sell: + Description: 列出å¯ä»¥è¢«è²·çš„領地. + Info: + - '&e用法 : &6/res market list sell' + sell: + Description: 出售一個領地 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - container: - Description: å…許或ç¦æ­¢ä½¿ç”¨ç†”çˆ, ç®±å­, 發射器等... + - '&e用法 : &6/res market sell &6[領地å稱] [售價]' + - '&e將領地以 &6[amount] &8æš—å¹£ 的價格出售' + - '&e其他玩家å¯ä»¥åŸ·è¡Œ &6/res market buy 指令購買' + sign: + Description: 設定市場告示牌 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - trusted: - Description: 給予 build, use, move, container å’Œ tp 許å¯æ¬Š + - '&e用法 : &6/res market sign &6[領地å稱]' + - '&e將看å‘的告示牌設定為領地市場告示牌' + buy: + Description: 購買一個領地 Info: - - '&e用法: &6/res pset <領地> [許å¯æ¬Š] true/false/remove' - place: - Description: åªå…許或ç¦æ­¢æ”¾ç½®æ–¹å¡Š, 該許å¯æ¬Šè¦†è“‹ build 許å¯æ¬Š + - '&e用法 : &6/res market buy &6[領地å稱]' + - '&e如果該領地正在出售,則購買這個領地' + unsell: + Description: å–消出售領地 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - destroy: - Description: åªå…許或ç¦æ­¢ç ´å£žæ–¹å¡Š, 該許å¯æ¬Šè¦†è“‹ build 許å¯æ¬Š + - '&e用法 : &6/res market unsell &6[領地å稱]' + rent: + Description: 租用一個領地 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - pvp: - Description: å…許或ç¦æ­¢é ˜åœ°å…§ PVP + - '&e用法 : &6/res market rent &6[領地å稱] [自動續租]' + - '&e租用一個領地 &6[自動續租] &eå¯ä»¥æ˜¯ &6true&e/&6false &e如果是 &6true &e並且領地æ“有者å…許 + 領地將會在租約到期之å‰è‡ªå‹•çºŒç§Ÿ' + rentable: + Description: Make a residence rentable. + Info: + - '&e用法 : &6/res market rentable [領地å稱] [花費] [天數] + ' + - 使領地出租以 [天數] 來計算 [花費] + - 如果開啟 ,則在租約到期å‰å¯å†æ¬¡å‡ºç§Ÿ + - 如果開啟 ,則在租約到期後留在市場上 + - 如果開啟 ,則租用時直接從玩家身上扣款 + autopay: + Description: 將領地自動付款設定為開/é—œ + Info: + - '&e用法 : &6/res market autopay &6[領地å稱] [true/false]' + payrent: + Description: 支付定é¡é ˜åœ°çš„租金 + Info: + - '&e用法 : &6/res market payrent &6[領地å稱]' + confirm: + Description: 確èªé ˜åœ° unrent/release 行動 + Info: + - '&e用法 : &6/res market confirm' + unrent: + Description: å–消領地租賃狀態 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - tp: - Description: å…許或ç¦æ­¢å‚³é€è‡³æ­¤é ˜åœ° + - '&e用法 : &6/res market unrent &6[領地å稱]' + - '&e如果你是租用者,該指令將會退租領地' + - '&e如果你是æ“有者,該指令將會收回領地' + rc: + Info: + - '&e用法 : &6/res rc &6[領地]' + - 加入領地èŠå¤©é »é“ + Description: 加入目å‰æˆ–指定的領地èŠå¤©é »é“ + SubCommands: + leave: + Description: 離開目å‰é »é“ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - enderpearl: - Description: å…許或ç¦æ­¢ç”¨çµ‚界之眼傳é€è‡³æ­¤é ˜åœ° + - '&e用法 : &6/res rc leave' + - 如果你在領地èŠå¤©é »é“內,那你將離開領地èŠå¤©é »é“ + setcolor: + Description: 設定領地頻é“文字é¡è‰² Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - admin: - Description: 玩家å¯ä»¥æ›´æ”¹é ˜åœ°è¨±å¯æ¬Š + - '&e用法 : &6/res rc setcolor &6[é¡è‰²ä»£ç¢¼]' + - 設定領地èŠå¤©é »é“文字é¡è‰² + setprefix: + Description: 設定領地èŠå¤©é »é“å‰ç¶´ Info: - - '&e用法: &6/res pset <領地> [許å¯æ¬Š] true/false/remove' - subzone: - Description: å…許玩家建立領地å­å€åŸŸ + - '&e用法 : &6/res rc setprefix &6[æ–°å‰ç¶´]' + - 設定領地èŠå¤©é »é“å‰ç¶´ + kick: + Description: 從頻é“中踢出玩家 Info: - - '&e用法: &6/res pset <領地> [許å¯æ¬Š] true/false/remove' - monsters: - Description: å…許或ç¦æ­¢æ€ªç‰©ç”Ÿæˆ + - '&e用法 : &6/res rc kick &6[玩家]' + - '&e從領地頻é“中踢出æŸçŽ©å®¶' + expand: + Info: + - '&e用法 : &6/res expand &6[領地] [擴展單ä½]' + - '&eå‘ä½ é¢å°çš„æ–¹å‘擴展領地è¦æ¨¡' + Description: å‘ä½ é¢å°çš„æ–¹å‘擴展領地 + compass: + Info: + - '&e用法 : &6/res compass &6[領地å稱]' + Description: 設定羅盤指å‘領地 + lists: + Info: + - '&eé å®šç¾©çš„權é™åˆ—表å¯ä»¥è¢«æ‡‰ç”¨åˆ°é ˜åœ°ä¸Š' + Description: é å®šç¾©æ¬Šé™åˆ—表 + SubCommands: + add: + Description: 新增一個列表 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - cmonsters: - Description: å…許或ç¦æ­¢è‡ªè¨‚æ€ªç‰©ç”Ÿæˆ + - '&e用法 : &6/res lists add &6[列表å稱]' + remove: + Description: 移除一個列表 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - smonsters: - Description: å…許或ç¦æ­¢ç”Ÿæ€ªç£šå’Œç”Ÿæ€ªè›‹ç”Ÿæˆæ€ªç‰© + - '&e用法 : &6/res lists remove &6[列表å稱]' + apply: + Description: 將列表應用到領地 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - nmonsters: - Description: å…許或ç¦æ­¢è‡ªç„¶ç”Ÿæˆæ€ªç‰© + - '&e用法 : &6/res lists apply &6[列表å稱] [領地å稱]' + set: + Description: è¨­å®šåˆ—è¡¨å…¨åŸŸæ¬Šé™ Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - animals: - Description: å…許或ç¦æ­¢å‹•ç‰©ç”Ÿæˆ + - '&e用法 : &6/res lists set &6[列表å稱] [權é™] [值]' + pset: + Description: è¨­å®šåˆ—è¡¨çŽ©å®¶æ¬Šé™ Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - canimals: - Description: å…許或ç¦æ­¢è‡ªè¨‚å‹•ç‰©ç”Ÿæˆ + - '&e用法 : &6/res lists pset &6[列表å稱] [玩家] [權é™] [值]' + gset: + Description: è¨­å®šåˆ—è¡¨çµ„æ¬Šé™ Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - sanimals: - Description: å…許或ç¦æ­¢ç”Ÿæ€ªç£šå’Œç”Ÿæ€ªè›‹ç”Ÿæˆå‹•ç‰© + - '&e用法 : &6/res lists view &6[列表å稱]' + view: + Description: 查看列表 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - nanimals: - Description: å…許或ç¦æ­¢è‡ªç„¶ç”Ÿæˆå‹•ç‰© + - '&e用法 : &6/res lists view &6' + reset: + Info: + - '&e用法 : &6/res reset &6[領地å稱]' + - '&e將領地的所有權é™é‡ç½®' + Description: 將領地設定還原為é è¨­å€¼ + listhidden: + Info: + - '&e用法 : &6/res listhidden &6[玩家] [é æ•¸]' + - '&e列出玩家æ“有的隱è—領地' + Description: 顯示隱è—領地列表 + raid: + Info: + - '&e用法 : &6/res raid start &6[領地å稱] [玩家]' + - '&6/res raid stop &6[領地å稱]' + - '&6/res raid kick &6[玩家]' + - '&6/res raid immunity &6[add/take/set/clear] [領地å稱] [時間]' + Description: 管ç†é ˜åœ°çªè¥² + setmain: + Info: + - '&e用法 : &6/res setmain &6[領地]' + - '&e將定義的領地設為主' + Description: 將定義的領地å稱作為å‰ç¶´é¡¯ç¤ºåœ¨èŠå¤©ä¸­ + server: + Info: + - '&e用法 : &6/resadmin server &6[領地å稱]' + - '&e建立一個屬於伺æœå™¨çš„領地' + Description: 建立伺æœå™¨é ˜åœ° + rt: + Info: + - '&e用法 : &6/res rt' + - '&e傳é€åˆ°ä¸–界上的隨機ä½ç½®' + Description: 傳é€åˆ°ä¸–界上的隨機ä½ç½® + mirror: + Info: + - '&e用法 : &6/res mirror &6[領地å稱] [複製到的領地]' + Description: è¤‡è£½æ¬Šé™ + shop: + Info: + - '&e管ç†é ˜åœ°çš„商店功能' + Description: 管ç†é ˜åœ°å•†åº— + SubCommands: + list: + Description: 顯示領地商店列表 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - animalkilling: - Description: å…許或ç¦æ­¢æ“Šæ®ºå‹•ç‰© + - '&e用法 : &6/res shop list' + - '&e顯示所有作為商店的領地' + vote: + Description: 為領地商店評分 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - mobkilling: - Description: å…許或ç¦æ­¢æ“Šæ®ºæ€ªç‰© + - '&e用法 : &6/res shop vote &6[領地å稱] [分數]' + - '&e為目å‰æˆ–指定領地商店評分' + like: + Description: 為領地商店點贊 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - nofly: - Description: å…許或ç¦æ­¢é£›è¡Œ + - '&e用法 : &6/res shop like &6[領地å稱]' + - '&e為領地商店點一個贊' + votes: + Description: 顯示領地商店評分 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - vehicledestroy: - Description: å…許或ç¦æ­¢ç ´å£žè¼‰å…· + - '&e用法 : &6/res shop votes &6[領地å稱] [é æ•¸]' + - '&e顯示目å‰æˆ–指定領地商店的評分列表' + likes: + Description: 顯示領地商店的贊 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - shear: - Description: å…許或ç¦æ­¢å‰ªç¾Šæ¯› + - '&e用法 : &6/res shop likes &6[領地å稱] [é æ•¸]' + - '&e顯示目å‰æˆ–指定領地商店的贊列表' + setdesc: + Description: 設定領地商店æè¿° Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - dye: - Description: å…許或ç¦æ­¢ç‚ºç¾Šæ¯›æŸ“色 + - '&e用法 : &6/res shop setdesc &6[æ述文字]' + - '&e設定領地商店æè¿° 支æŒé¡è‰²ä»£ç¢¼ 用 /n 表示æ›è¡Œ' + createboard: + Description: 建立商店宣傳é¢æ¿ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - leash: - Description: å…許或ç¦æ­¢ç‰½å¼•å‹•ç‰© + - '&e用法 : &6/res shop createboard &6[ä½ç½®]' + - '&e在é¸æ“‡å€åŸŸä½ç½®å»ºç«‹å•†åº—宣傳é¢æ¿ &6[ä½ç½®] &e表示宣傳é¢æ¿çš„起始ä½ç½®' + deleteboard: + Description: 移除商店宣傳é¢æ¿ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - healing: - Description: 為領地內的玩家治療 + - '&e用法 : &6/res shop deleteboard' + - '&eå³æ“Šå®£å‚³é¢æ¿çš„告示牌以移除宣傳é¢æ¿' + lset: + Info: + - '&e用法 : &6/res lset &6[領地å稱] [blacklist/ignorelist] [物å“]' + - '&e用法 : &6/res lset &6[領地å稱] &6Info' + - '&eå°‡æŸç‰©å“加入黑å單以阻止這種物å“被放置在領地中' + - '&e忽略å單中的物å“å°‡ä¸æœƒè¢«é ˜åœ°ä¿è­·' + Description: 更改黑å單和忽略åå–®é¸é … + raidstatus: + Info: + - '&e用法 : &6/res raidstatus [領地å稱/玩家å稱]' + Description: 查看領地的çªè¥²ç‹€æ…‹ + pset: + Info: + - '&e用法 : &6/res pset &6[領地å稱] [玩家] [權é™] [t/f/r]' + - '&e用法 : &6/res pset &6[領地å稱] [玩家] &6removeall' + - '&e輸入 &6/res flags ? &e查看權é™åˆ—表' + Description: ç‚ºçŽ©å®¶è¨­å®šé ˜åœ°çš„ç‰¹å®šæ¬Šé™ + show: + Info: + - '&e用法 : &6/res show &6[領地å稱]' + Description: 顯示領地邊界 + flags: + Info: + - '&e用法 : &6/res remove &6[領地å稱]' + Description: 權é™åˆ—表 + SubCommands: + anvil: + Translated: 使用éµç § (anvil) + Description: å…許 或 ç¦æ­¢ä½¿ç”¨éµç § Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - feed: - Description: 為領地內的玩家æ¢å¾©é£½é£Ÿ + - '&e用法 : &6/res set/pset anvil true/false/remove' + admin: + Translated: 管ç†æ¬Š (admin) + Description: 給予玩家管ç†å“¡æ¬Šé™æ›´æ”¹é ˜åœ°çš„æ¬Šé™ Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - tnt: - Description: å…許或ç¦æ­¢ TNT 爆炸 + - '&e用法 : &6/res pset admin true/false/remove' + animalkilling: + Translated: 擊殺動物 (animalkilling) + Description: å…許 或 ç¦æ­¢æ“Šæ®ºå‹•ç‰© Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - creeper: - Description: å…許或ç¦æ­¢çˆ¬è¡Œè€…爆炸 + - '&e用法 : &6/res set/pset animalkilling true/false/remove' + animals: + Translated: 生æˆå‹•ç‰© (animals) + Description: å…許 或 ç¦æ­¢ç”Ÿæˆå‹•ç‰© Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - ignite: - Description: å…許或ç¦æ­¢é»žç« + - '&e用法 : &6/res set animals true/false/remove' + anchor: + Translated: 使用é‡ç”ŸéŒ¨ (anchor) + Description: å…許 或 ç¦æ­¢ä½¿ç”¨é‡ç”ŸéŒ¨ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - firespread: - Description: å…許或ç¦æ­¢ç«ç„°è”“延 + - '&e用法 : &6/res set/pset anchor true/false/remove' + anvilbreak: + Translated: éµç §æ壞 (anvilbreak) + Description: å…許 或 ç¦æ­¢é ˜åœ°å…§éµç §æ壞 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - bucket: - Description: å…許或ç¦æ­¢ä½¿ç”¨éµæ¡¶ + - '&e用法 : &6/res set anvilbreak true/false/remove' + backup: + Translated: 備份與還原 (backup) + Description: 如果設定為 true 則æ¢å¾©å…ˆå‰çš„領地外觀 ï¼ˆéœ€è¦ WordEdit) Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - bucketfill: - Description: å…許或ç¦æ­¢ä½¿ç”¨éµæ¡¶ç››è£ + - '&e用法 : &6/res set backup true/false/remove' + bank: + Translated: 使用銀行 (bank) + Description: å…許 或 ç¦æ­¢å¾žé ˜åœ°éŠ€è¡Œå­˜æ¬¾/å–款 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - bucketempty: - Description: å…許或ç¦æ­¢ä½¿ç”¨éµæ¡¶å‚¾å€’ + - '&e用法 : &6/res set/pset bank true/false/remove' + bed: + Translated: 使用床 (bed) + Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - flow: - Description: å…許或ç¦æ­¢æ¶²é«”æµå‹• + - '&e用法 : &6/res set/pset bed true/false/remove' + honey: + Translated: 摘å–蜂蜜 (honey) + Description: å…許 或 ç¦æ­¢çŽ©å®¶æ‘˜å–蜂蜜 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - lavaflow: - Description: å…許或ç¦æ­¢å²©æ¼¿æµå‹•, 該許å¯æ¬Šè¦†è“‹ flow 許å¯æ¬Š + - '&e用法 : &6/res set/pset honey true/false/remove' + honeycomb: + Translated: 摘å–蜂巢 (honeycomb) + Description: å…許 或 ç¦æ­¢çŽ©å®¶æ‘˜å–蜂巢 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - waterflow: - Description: å…許或ç¦æ­¢æ°´æµå‹•, 該許å¯æ¬Šè¦†è“‹ flow 許å¯æ¬Š + - '&e用法 : &6/res set/pset honeycomb true/false/remove' + beacon: + Translated: 使用烽ç«å° (beacon) + Description: å…許 或 ç¦æ­¢ä½¿ç”¨çƒ½ç«å° Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - damage: - Description: å…許或ç¦æ­¢æ‰€æœ‰å¯¦é«”傷害 + - '&e用法 : &6/res set/pset beacon true/false/remove' + brew: + Translated: ä½¿ç”¨é‡€é€ å° ï¼ˆbrew) + Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨é‡€é€ å° Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - piston: - Description: å…許或ç¦æ­¢æ´»å¡žæŽ¨æ‹‰æ–¹å¡Š + - '&e用法 : &6/res set/pset brew true/false/remove' + build: + Translated: 建造 (build) + Description: å…許 或 ç¦æ­¢å»ºé€  Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - pistonprotection: - Description: å…許或ç¦æ­¢æ´»å¡žå°‡æ–¹å¡Šç§»å‡ºæˆ–移入領地內 + - '&e用法 : &6/res set/pset build true/false/remove' + burn: + Translated: 生物燃燒 (burn) + Description: å…許 或 ç¦æ­¢ç”Ÿç‰©åœ¨é ˜åœ°å…§ç‡ƒç‡’ Info: - - '&eUsage: &6/res set [flag] true/false/remove' - hidden: - Description: 在 list 或 listall 命令中隱è—此領地 + - '&e用法 : &6/res set burn true/false/remove' + button: + Translated: 使用按鈕 (button) + Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰éˆ• Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + - '&e用法 : &6/res set/pset button true/false/remove' cake: - Description: å…許或ç¦æ­¢çŽ©å®¶åƒè›‹ç³• + Translated: 食用蛋糕 (cake) + Description: å…許 或 ç¦æ­¢çŽ©å®¶åƒè›‹ç³• Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - lever: - Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŽ§åˆ¶æ¡¿ + - '&e用法 : &6/res set/pset cake true/false/remove' + canimals: + Translated: 生æˆè‡ªå®šç¾©å‹•ç‰© (canimals) + Description: å…許 或 ç¦æ­¢è‡ªè¨‚ç¾©å‹•ç‰©ç”Ÿæˆ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - button: - Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰éˆ• + - '&e用法 : &6/res set canimals true/false/remove' + chorustp: + Translated: 食用歌èŠæžœå‚³é€ (chorustp) + Description: å…許 或 ç¦æ­¢åƒæ­ŒèŠæžœé€²è¡Œå‚³é€ + Info: + - '&e用法 : &6/res set/pset chorustp true/false/remove' + chat: + Translated: èŠå¤© (chat) + Description: å…許玩家加入領地èŠå¤©é »é“ + Info: + - '&e用法 : &6/res set/pset chat true/false/remove' + cmonsters: + Translated: 生æˆè‡ªè¨‚義怪物 (cmonsters) + Description: å…許 或 ç¦æ­¢è‡ªè¨‚ç¾©æ€ªç‰©ç”Ÿæˆ + Info: + - '&e用法 : &6/res set cmonsters true/false/remove' + commandblock: + Translated: 使用指令方塊 (commandblock) + Description: å…許 或 ç¦æ­¢ä½¿ç”¨æŒ‡ä»¤æ–¹å¡Š + Info: + - '&e用法 : &6/res set/pset commandblock true/false/remove' + command: + Translated: 使用指令 (command) + Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨æŒ‡ä»¤ + Info: + - '&e用法 : &6/res set/pset command true/false/remove' + container: + Translated: 使用容器 (container) + Description: å…許 或 ç¦æ­¢ä½¿ç”¨ç†”çˆã€å„²ç‰©ç®±ã€ç™¼å°„器…… + Info: + - '&e用法 : &6/res set/pset container true/false/remove' + coords: + Translated: 顯示座標 (coords) + Description: 顯示領地座標 + Info: + - '&e用法 : &6/res set coords true/false/remove' + copper: + Translated: 修改銅方塊 (copper) + Description: å…許修改銅方塊 + Info: + - '&e用法 : &6/res set/pset copper true/false/remove' + craft: + Translated: 使用工è—ç•Œé¢ ï¼ˆcraft) + Description: 給予工作å°ã€é™„é­”å°ã€é‡€é€ å°â€¦â€¦ æ¬Šé™ + Info: + - '&e用法 : &6/res set craft true/false/remove' + creeper: + Translated: 苦力怕爆炸 (creeper) + Description: å…許 或 ç¦æ­¢è‹¦åŠ›æ€•çˆ†ç‚¸ + Info: + - '&e用法 : &6/res set creeper true/false/remove' + dragongrief: + Translated: 防止終界é¾ç ´å£ž (dragongrief) + Description: 防止終界é¾ç ´å£žæ–¹å¡Š + Info: + - '&e用法 : &6/res set dragongrief true/false/remove' + day: + Translated: 白天 (day) + Description: 設定領地時間為白天 + Info: + - '&e用法 : &6/res set day true/false/remove' + dye: + Translated: 染色羊 (dye) + Description: å…許 或 ç¦æ­¢ç¾ŠæŸ“色 + Info: + - '&e用法 : &6/res set/pset dye true/false/remove' + damage: + Translated: 實體傷害 (damage) + Description: å…許 或 ç¦æ­¢æ‰€æœ‰é ˜åœ°å¯¦é«”傷害 + Info: + - '&e用法 : &6/res set damage true/false/remove' + decay: + Translated: 樹葉è…爛 (decay) + Description: å…許 或 ç¦æ­¢é ˜åœ°å…§æ¨¹è‘‰è…爛 + Info: + - '&e用法 : &6/res set decay true/false/remove' + destroy: + Translated: 破壞 (destroy) + Description: å…許 或 ç¦æ­¢ç ´å£žæ–¹å¡Šï¼ˆå°‡è¦†è“‹ build 權é™ï¼‰ + Info: + - '&e用法 : &6/res set/pset destroy true/false/remove' + dryup: + Translated: 耕地乾涸 (dryup) + Description: 防止耕地乾涸 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + - '&e用法 : &6/res set dryup true/false/remove' diode: - Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨ç´…石中繼器 + Translated: 使用紅石中繼器 (diode) + Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨ç´…石中繼器 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + - '&e用法 : &6/res set/pset diode true/false/remove' door: - Description: å…許或ç¦æ­¢çŽ©å®¶é–‹é—œé–€å’Œåœ°æ¿é–€ + Translated: 使用門 (door) + Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨é–€æˆ–地æ¿é–€ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - table: - Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° + - '&e用法 : &6/res set/pset door true/false/remove' + egg: + Translated: 觸碰é¾è›‹ (egg) + Description: å…許 或 ç¦æ­¢çŽ©å®¶è§¸ç¢°é¾è›‹ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + - '&e用法 : &6/res set/pset egg true/false/remove' enchant: - Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° + Translated: ä½¿ç”¨é™„é­”å° ï¼ˆenchant) + Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - brew: - Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é‡€é€ å° + - '&e用法 : &6/res set/pset enchant true/false/remove' + explode: + Translated: 爆炸 (explode) + Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§çˆ†ç‚¸ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - bed: - Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ + - '&e用法 : &6/res set explode true/false/remove' + elytra: + Translated: 使用鞘翅 (elytra) + Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨éž˜ç¿… Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - pressure: - Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å£“åŠ›æ¿ + - '&e用法 : &6/res set/pset elytra true/false/remove' + enderpearl: + Translated: 使用終界çç å‚³é€ (enderpearl) + Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨çµ‚ç•Œçç å‚³é€ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - note: - Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³éšŽç›’ + - '&e用法 : &6/res set/pset enderpearl true/false/remove' + fallinprotection: + Translated: é˜²æ­¢æ–¹å¡ŠæŽ‰è½ ï¼ˆfallinprotection) + Description: 防止方塊掉è½é ˜åœ°å…§ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - redstone: - Description: 給予 lever, diode, button, pressure å’Œ note 許å¯æ¬Š + - '&e用法 : &6/res set fallinprotection true/false/remove' + falldamage: + Translated: é˜²æ­¢çŽ©å®¶æ‘”è½ ï¼ˆfalldamage) + Description: 防止玩家摔è½å‚·å®³ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - craft: - Description: 給予 table, enchant å’Œ brew 許å¯æ¬Š + - '&e用法 : &6/res set falldamage true/false/remove' + feed: + Translated: 自動回復飽食度 (feed) + Description: 如果設定為 true 則讓在領地內的玩家自動回復飽食度 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - trample: - Description: å…許或ç¦æ­¢è¸©å£žè€•åœ° + - '&e用法 : &6/res set feed true/false/remove' + friendlyfire: + Translated: å‹è»å‚·å®³ (friendlyfire) + Description: å…許 或 ç¦æ­¢å‹è»å‚·å®³ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - trade: - Description: å…許或ç¦æ­¢æ‘民交易 + - '&e用法 : &6/res pset friendlyfire true/false/remove' + fireball: + Translated: 使用ç«ç„°å½ˆ (fireball) + Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨ç«ç„°å½ˆ Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - nomobs: - Description: å…許或ç¦æ­¢æ€ªç‰©é€²å…¥é ˜åœ° + - '&e用法 : &6/res set fireball true/false/remove' + firespread: + Translated: ç«ç„°è”“延 (firespread) + Description: å…許 或 ç¦æ­¢ç«ç„°è”“延 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - explode: - Description: å…許或ç¦æ­¢çˆ†ç‚¸ + - '&e用法 : &6/res set firespread true/false/remove' + flowinprotection: + Translated: 防止外部液體æµå‹• (flowinprotection) + Description: å…許 或 ç¦æ­¢æ¶²é«”æµå…¥é ˜åœ° Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - fireball: - Description: å…許或ç¦æ­¢ç«ç„°å½ˆ + - '&e用法 : &6/res set flowinprotection true/false/remove' + flow: + Translated: 內部液體æµå‹• (flow) + Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§æ¶²é«”æµå‹• + Info: + - '&e用法 : &6/res set flow true/false/remove' + flowerpot: + Translated: 使用花盆 (flowerpot) + Description: å…許 或 ç¦æ­¢ä½¿ç”¨èŠ±ç›† + Info: + - '&e用法 : &6/res set/pset flowerpot true/false/remove' + grow: + Translated: æ¤ç‰©ç”Ÿé•· (grow) + Description: å…許 或 ç¦æ­¢æ¤ç‰©ç”Ÿé•· + Info: + - '&e用法 : &6/res set grow true/false/remove' + glow: + Translated: 玩家發光 (glow) + Description: 玩家進入領地後會開始發光 + Info: + - '&e用法 : &6/res set glow true/false/remove' + hotfloor: + Translated: 防止岩漿塊傷害 (hotfloor) + Description: 防止踩在岩漿塊上的傷害 + Info: + - '&e用法 : &6/res set hotfloor true/false/remove' + hidden: + Translated: éš±è—領地列表 (hidden) + Description: 在 list 或 listall 列表中隱è—領地 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - command: - Description: å…許或ç¦æ­¢åŸ·è¡Œå‘½ä»¤ + - '&e用法 : &6/res set hidden true/false/remove' + hook: + Translated: 使用釣竿釣鉤實體 (hook) + Description: å…許 或 ç¦æ­¢ä½¿ç”¨é‡£ç«¿é‡£é‰¤å¯¦é«” Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - overridepvp: - Description: 覆蓋任何外掛程å¼çš„ PVP ä¿è­· + - '&e用法 : &6/res set/pset hook true/false/remove' + healing: + Translated: è‡ªå‹•å›žå¾©è¡€é‡ ï¼ˆhealing) + Description: 如果設定為 true å‰‡è®“åœ¨é ˜åœ°å…§çš„çŽ©å®¶è‡ªå‹•å›žå¾©è¡€é‡ + Info: + - '&e用法 : &6/res set healing true/false/remove' + iceform: + Translated: 防止çµå†° (iceform) + Description: 防止水çµå†° Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + - '&e用法 : &6/res set iceform true/false/remove' + icemelt: + Translated: 防止èžåŒ– (icemelt) + Description: 防止冰èžåŒ– + Info: + - '&e用法 : &6/res set icemelt true/false/remove' + ignite: + Translated: 使用打ç«çŸ³ (ignite) + Description: å…許 或 ç¦æ­¢ä½¿ç”¨æ‰“ç«çŸ³ + Info: + - '&e用法 : &6/res set/pset ignite true/false/remove' + itemdrop: + Translated: 物å“æŽ‰è½ ï¼ˆitemdrop) + Description: å…許 或 ç¦æ­¢ç‰©å“æŽ‰è½ + Info: + - '&e用法 : &6/res set/pset itemdrop true/false/remove' + itempickup: + Translated: 物å“æ’¿å– ï¼ˆitempickup) + Description: å…許 或 ç¦æ­¢ç‰©å“æ’¿å– + Info: + - '&e用法 : &6/res set/pset itempickup true/false/remove' + jump2: + Translated: å…©æ ¼é«˜è·³èº ï¼ˆjump2) + Description: å…許跳èºå…©æ ¼é«˜ + Info: + - '&e用法 : &6/res set jump2 true/false/remove' + jump3: + Translated: ä¸‰æ ¼é«˜è·³èº ï¼ˆjump3) + Description: å…許跳èºä¸‰æ ¼é«˜ + Info: + - '&e用法 : &6/res set jump3 true/false/remove' keepinv: - Description: 玩家死亡ä¸æœƒæŽ‰è½ç‰©å“ + Translated: é˜²å™´è£ ï¼ˆkeepinv) + Description: 在玩家死後ä¿æŒç‰©å“欄狀態 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' + - '&e用法 : &6/res set keepinv true/false/remove' keepexp: - Description: 玩家死亡ä¸æœƒæ失經驗 + Translated: 防噴經驗 (keepexp) + Description: 在玩家死後ä¿æŒç¶“驗值狀態 Info: - - '&e用法: &6/res set/pset <領地> [許å¯æ¬Š] true/false/remove' - burn: - Description: å…許或ç¦æ­¢æ€ªç‰©ç‡ƒç‡’ + - '&e用法 : &6/res set keepexp true/false/remove' + lavaflow: + Translated: 內部岩漿æµå‹• (lavaflow + Description: å…許 或 ç¦æ­¢å²©æ¼¿æµå‹•ï¼ˆå°‡è¦†è“‹ flow 權é™ï¼‰ Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - bank: - Description: å…許或ç¦æ­¢ä½¿ç”¨é ˜åœ°éŠ€è¡Œ + - '&e用法 : &6/res set lavaflow true/false/remove' + leash: + Translated: 使用拴繩 (leash) + Description: å…許 或 ç¦æ­¢å°å‹•ç‰©ä½¿ç”¨æ‹´ç¹© Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - shop: - Description: 將領地設置為商店 + - '&e用法 : &6/res set/pset leash true/false/remove' + lever: + Translated: 使用控制桿 (lever) + Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŽ§åˆ¶æ¡¿ Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - day: - Description: 領地ä¿æŒç™½å¤© + - '&e用法 : &6/res set/pset lever true/false/remove' + mobexpdrop: + Translated: 防止生物死後掉è½ç¶“é©— (mobexpdrop) + Description: 防止生物在死後掉è½ç¶“é©— + Info: + - '&e用法 : &6/res set mobexpdrop true/false/remove' + mobitemdrop: + Translated: 防止生物死後掉è½ç‰©å“ (mobitemdrop) + Description: 防止生物在死後掉è½ç‰©å“ + Info: + - '&e用法 : &6/res set mobitemdrop true/false/remove' + mobkilling: + Translated: 擊殺生物 (mobkilling) + Description: å…許 或 ç¦æ­¢æ“Šæ®ºç”Ÿç‰© Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + - '&e用法 : &6/res set/pset mobkilling true/false/remove' + monsters: + Translated: 生æˆæ€ªç‰© (monsters) + Description: å…許 或 ç¦æ­¢ç”Ÿæˆæ€ªç‰© + Info: + - '&e用法 : &6/res set monsters true/false/remove' + move: + Translated: 玩家移動 (move) + Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ç§»å‹• + Info: + - '&e用法 : &6/res set/pset move true/false/remove' + nametag: + Translated: 命å (nametag) + Description: å…許 或 ç¦æ­¢ä½¿ç”¨å‘½å牌 + Info: + - '&e用法 : &6/res set/pset nametag true/false/remove' + nanimals: + Translated: åŽŸç‰ˆç”Ÿç‰©ç”Ÿæˆ ï¼ˆnanimals) + Description: å…許 或 ç¦æ­¢åŽŸç‰ˆç”Ÿç‰©ç”Ÿæˆ + Info: + - '&e用法 : &6/res set nanimals true/false/remove' + nmonsters: + Translated: åŽŸç‰ˆæ€ªç‰©ç”Ÿæˆ ï¼ˆnmonsters) + Description: å…許 或 ç¦æ­¢åŽŸç‰ˆæ€ªç‰©ç”Ÿæˆ + Info: + - '&e用法 : &6/res set nmonsters true/false/remove' night: - Description: 領地ä¿æŒå¤œé–“ + Translated: 夜晚 (night) + Description: 設定領地時間為夜晚 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - chat: - Description: å…許加入領地èŠå¤©é »é“ + - '&e用法 : &6/res set night true/false/remove' + nofly: + Translated: 使用飛行 (nofly) + Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§é£›è¡Œ + Info: + - '&e用法 : &6/res set/pset nofly true/false/remove' + fly: + Translated: 自動飛行 (fly) + Description: 自動開啟或關閉領地內的玩家飛行 + Info: + - '&e用法 : &6/res set/pset fly true/false/remove' + nomobs: + Translated: 防止怪物進入 (nomobs) + Description: 防止怪物進入領地,需è¦åœ¨é…置檔案開啟 AutoMobRemoval + Info: + - '&e用法 : &6/res set nomobs true/false/remove' + note: + Translated: 使用音階盒 (note) + Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³éšŽç›’ Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + - '&e用法 : &6/res set/pset note true/false/remove' nodurability: - Description: 物å“ä¸æœƒæ失è€ä¹… + Translated: 防止物å“é™ä½Žè€ä¹…值 (nodurability) + Description: 防止物å“é™ä½Žè€ä¹…值 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - mobitemdrop: - Description: 怪物死亡ä¸æœƒæŽ‰è½ç‰©å“ + - '&e用法 : &6/res set nodurability true/false/remove' + overridepvp: + Translated: 覆蓋戰鬥 (overridepvp) + Description: 覆蓋任何æ’件的戰鬥ä¿è­· Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - mobexpdrop: - Description: 怪物死亡ä¸æœƒæŽ‰è½ç¶“é©— + - '&e用法 : &6/res set overridepvp true/false/remove' + pressure: + Translated: ä½¿ç”¨å£“åŠ›æ¿ ï¼ˆpressure) + Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨å£“åŠ›æ¿ Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - dragongrief: - Description: 防止終界é¾ç ´å£žæ–¹å¡Š + - '&e用法 : &6/res set/pset pressure true/false/remove' + piston: + Translated: 使用活塞 (piston) + Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨æ´»å¡žæŽ¨æˆ–拉 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - snowtrail: - Description: 防止雪人留下雪 + - '&e用法 : &6/res set piston true/false/remove' + pistonprotection: + Translated: 防止外部活塞 (pistonprotection + Description: å…許 或 ç¦æ­¢æ´»å¡žå¾žé ˜åœ°å¤–推或拉領地內的方塊 Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - snowball: - Description: 防止被雪çƒæ“Šé€€ + - '&e用法 : &6/res set pistonprotection true/false/remove' + place: + Translated: 放置 (place) + Description: å…許 或 ç¦æ­¢æ”¾ç½®æ–¹å¡Šï¼ˆå°‡è¦†è“‹ build 權é™ï¼‰ Info: - - '&eUsage: &6/res set [flag] true/false/remove' - iceform: - Description: é˜²æ­¢é›ªçš„å½¢æˆ + - '&e用法 : &6/res set/pset place true/false/remove' + pvp: + Translated: 戰鬥 (pvp) + Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§æˆ°é¬¥ Info: - - '&eUsage: &6/res set [flag] true/false/remove' - icemelt: - Description: 防止雪èžåŒ– + - '&e用法 : &6/res set pvp true/false/remove' + rain: + Translated: 下雨 (rain) + Description: 設定領地天氣為雨天 Info: - - '&eUsage: &6/res set [flag] true/false/remove' + - '&e用法 : &6/res set rain true/false/remove' respawn: + Translated: 自動é‡ç”Ÿ (respawn) Description: 自動é‡ç”ŸçŽ©å®¶ Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' + - '&e用法 : &6/res set respawn true/false/remove' riding: - Description: 防止騎馬 + Translated: 防止騎乘 (riding) + Description: 防止騎乘生物 Info: - - '&eUsage: &6/res set [flag] true/false/remove' - witherdamage: - Description: ç¦æ­¢å‡‹é›¶æ€ªé€ æˆå‚·å®³ + - '&e用法 : &6/res set/pset riding true/false/remove' + shoot: + Translated: 使用射擊 (shoot) + Description: å…許 或 ç¦æ­¢åœ¨å€åŸŸå…§å°„æ“Š Info: - - '&e用法: &6/res set <領地> [許å¯æ¬Š] true/false/remove' - limits: - Description: 顯示你的領地é™åˆ¶ - Info: - - '&e用法: &6/res limits' - - 顯示你在創建和管ç†é ˜åœ°æ–¹é¢çš„å„種é™åˆ¶ - tpset: - Description: 設定領地的傳é€é»ž - Info: - - '&e用法: &6/res tpset' - - 該命令將會把你站的ä½ç½®è¨­ç½®ç‚ºé ˜åœ°çš„傳é€é»ž - - 你必須站在一個領地裡æ‰èƒ½ä½¿ç”¨é€™å€‹å‘½ä»¤ - - 你必須是領地的所有者或者æ“有領地的 +admin 許å¯æ¬Š - tp: - Description: 傳é€åˆ°ä¸€å€‹é ˜åœ° - Info: - - '&e用法: &6/res tp [residence]' - - 將你傳é€åˆ°ä¸€å€‹é ˜åœ°, 你必須是領地所有者或者æ“有領地 +tp 許å¯æ¬Š - - 你的許å¯æ¬Šçµ„也必須在伺æœå™¨ä¸­æœ‰å‚³é€è¨±å¯æ¬Š - Args: '[residence]' - rt: - Description: 傳é€åˆ°ä¸–界上的隨機ä½ç½® - Info: - - '&e用法: &6/res rt' - - 將你傳é€åˆ°ä¸–界上的隨機ä½ç½® - rc: - Description: 加入當å‰æˆ–者指定的領地èŠå¤©é »é“ - Info: - - '&e用法: &6/res rc (領地)' - - 加入當å‰é ˜åœ°æˆ–者指定領地的èŠå¤©é »é“ - SubCommands: - leave: - Description: 離開當å‰é »é“ + - '&e用法 : &6/res set shoot true/false/remove' + sun: + Translated: 晴天 (sun) + Description: 設定領地天氣為晴天 Info: - - '&e用法: &6/res rc leave' - - 如果你在一個領地頻é“å…§, ä½ å°‡æœƒé›¢é–‹æ­¤é »é“ - setcolor: - Description: 設置領地頻é“文字é¡è‰² + - '&e用法 : &6/res set sun true/false/remove' + shop: + Translated: 商店 (shop) + Description: 新增領地到指定的商店列表 Info: - - '&e用法: &6/res rc setcolor [é¡è‰²ä»£ç¢¼]' - - 設置領地頻é“文字é¡è‰² - setprefix: - Description: 設置領地頻é“首碼 + - '&e用法 : &6/res set shop true/false/remove' + snowtrail: + Translated: 防止ç©é›ª (snowtrail) + Description: 防止雪人生æˆç©é›ªè·¯å¾‘ Info: - - '&e用法: &6/res rc setprefix [新首碼]' - - 設置領地頻é“首碼 - kick: - Description: 從頻é“中踢出玩家 + - '&e用法 : &6/res set snowtrail true/false/remove' + spread: + Translated: 防止方塊擴散 (spread) + Description: 防止è‰åœ°æˆ–èŒçµ²åœŸæ“´æ•£ Info: - - '&e用法: &6/res rc kick [玩家]' - - 從領地頻é“中踢出æŸçŽ©å®¶ - expand: - Description: å‘ä½ é¢å°çš„æ–¹å‘擴展領地 - Info: - - '&e用法: &6/res expand (領地) [擴展單ä½]' - - å‘ä½ é¢å°çš„æ–¹å‘擴展領地è¦æ¨¡ - - 領地å字是å¯é¸çš„ - contract: - Description: 從你é¢å°çš„æ–¹å‘縮å°é ˜åœ° - Info: - - '&e用法: &6/res contract (領地) [縮å°å–®ä½]' - - 從你é¢å°çš„æ–¹å‘縮å°é ˜åœ°è¦æ¨¡ - - 領地å字是å¯é¸çš„ - shop: - Description: 管ç†é ˜åœ°å•†åº— - Info: - - 管ç†é ˜åœ°çš„商店功能 - SubCommands: - list: - Description: 顯示領地商店清單 + - '&e用法 : &6/res set spread true/false/remove' + snowball: + Translated: 防止雪çƒæ“Šé€€ (snowball) + Description: 防止雪çƒæ“Šé€€ Info: - - '&e用法: &6/res shop list' - - 顯示所有作為商店的領地 - vote: - Description: 為領地商店評分 + - '&e用法 : &6/res set snowball true/false/remove' + sanimals: + Translated: 使用生怪磚或生怪蛋生æˆå‹•ç‰© (sanimals) + Description: å…許 或 ç¦æ­¢ç”Ÿæ€ªç£šæˆ–生怪蛋生æˆå‹•ç‰© Info: - - '&e用法: &6/res shop vote <領地> [分數]' - - 為當å‰æˆ–指定領地商店評分 - Args: '[residence]' - like: - Description: 為領地商店點贊 + - '&e用法 : &6/res set sanimals true/false/remove' + shear: + Translated: 剪羊毛 (shear) + Description: å…許 或 ç¦æ­¢å‰ªç¾Šæ¯› Info: - - '&e用法: &6/res shop like <領地>' - - 為領地商店點一個贊 - Args: '[residenceshop]' - votes: - Description: 顯示領地商店評分 + - '&e用法 : &6/res set/pset shear true/false/remove' + smonsters: + Translated: 使用生怪磚或生怪蛋生æˆæ€ªç‰© (smonsters) + Description: å…許 或 ç¦æ­¢ç”Ÿæ€ªç£šæˆ–生怪蛋生æˆæ€ªç‰© Info: - - '&e用法: &6/res shop votes <領地> <é ç¢¼>' - - 顯示當å‰æˆ–指定領地商店的評分列表 - Args: '[residenceshop]' - likes: - Description: 顯示領地商店的贊 + - '&e用法 : &6/res set smonsters true/false/remove' + subzone: + Translated: 建立å­å€åŸŸ (subzone) + Description: å…許玩家建立å­å€åŸŸé ˜åœ° Info: - - '&e用法: &6/res shop likes <領地> <é ç¢¼>' - - 顯示當å‰æˆ–指定領地商店的贊列表 - Args: '[residenceshop]' - setdesc: - Description: 設置領地商店æè¿° + - '&e用法 : &6/res set/pset subzone true/false/remove' + title: + Translated: åŠ å…¥æˆ–é›¢é–‹è¨Šæ¯ ï¼ˆtitle) + Description: 顯示 或 éš±è—é ˜åœ°çš„åŠ å…¥è¨Šæ¯ Info: - - '&e用法: &6/res shop setdesc [æ述文字]' - - 設置領地商店æè¿°, 支æŒé¡è‰²ä»£ç¢¼, 用 /n 表示æ›è¡Œ - createboard: - Description: å‰µå»ºå•†åº—å®£å‚³æ¿ + - '&e用法 : &6/res set title true/false/remove' + table: + Translated: ä½¿ç”¨å·¥ä½œå° ï¼ˆtable) + Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° Info: - - '&e用法: &6/res shop createboard [ä½ç½®]' - - 在é¸å€ä½ç½®å»ºç«‹å•†åº—宣傳æ¿. [ä½ç½®] 表示宣傳æ¿çš„起始ä½ç½® - deleteboard: - Description: åˆªé™¤å•†åº—å®£å‚³æ¿ + - '&e用法 : &6/res set/pset table true/false/remove' + tnt: + Translated: TNT 爆炸 (tnt) + Description: å…許 或 ç¦æ­¢ TNT 爆炸 Info: - - '&e用法: &6/res shop deleteboard' - - å³æ“Šå®£å‚³æ¿çš„å‘Šç¤ºç‰Œä»¥åˆªé™¤å®£å‚³æ¿ - tpconfirm: - Description: 忽略ä¸å®‰å…¨å‚³é€è­¦å‘Š - Info: - - '&e用法: &6/res tpconfirm' - - 強制傳é€åˆ°é ˜åœ°, 忽略傳é€ä¸å®‰å…¨çš„警告 - subzone: - Description: 在領地中創建å­å€åŸŸ - Info: - - '&e用法: &6/res subzone <領地å> [å­å€åŸŸå]' - - 如果領地å留空, 將會嘗試在玩家所處領地中建立å­å€åŸŸ - Args: '[residence]' - area: - Description: 管ç†é ˜åœ°ç‰©ç†å€åŸŸ - SubCommands: - list: - Description: 列出領地的物ç†å€åŸŸ + - '&e用法 : &6/res set tnt true/false/remove' + tp: + Translated: å‚³é€ ï¼ˆtp) + Description: å…許 或 ç¦æ­¢å‚³é€åˆ°é ˜åœ° Info: - - '&e用法: &6/res area list [領地] <é ç¢¼>' - Args: '[residence]' - listall: - Description: 列出所有å€åŸŸçš„座標和詳細資訊 + - '&e用法 : &6/res set/pset tp true/false/remove' + trade: + Translated: æ‘民交易 (trade) + Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§èˆ‡æ‘民交易 Info: - - '&e用法: &6/res area listall [領地] <é ç¢¼>' - Args: '[residence]' - add: - Description: 為領地添加物ç†å€åŸŸ + - '&e用法 : &6/res set/pset trade true/false/remove' + trample: + Translated: 踩è¸ç ´å£žè€•åœ° (trample) + Description: å…許 或 ç¦æ­¢è¸©è¸ç ´å£žè€•åœ° Info: - - '&e用法: &6/res area add [領地] [å€åŸŸID]' - - 你必須先é¸ä¸­å…©å€‹é¸å–點 - Args: '[residence]' - remove: - Description: 移除領地的物ç†å€åŸŸ + - '&e用法 : &6/res set trample true/false/remove' + use: + Translated: 使用 (use) + Description: å…許 或 ç¦æ­¢ä½¿ç”¨é–€ã€æŽ§åˆ¶æ¡¿ã€æŒ‰éˆ•â€¦â€¦ Info: - - '&e用法: &6/res area remove [領地] [å€åŸŸID]' - Args: '[residence]' - replace: - Description: 替æ›é ˜åœ°çš„物ç†å€åŸŸ + - '&e用法 : &6/res set/pset use true/false/remove' + vehicledestroy: + Translated: 破壞載具 (vehicledestroy) + Description: å…許 或 ç¦æ­¢ç ´å£žè¼‰å…· Info: - - '&e用法: &6/res area replace [領地] [å€åŸŸID]' - - 你必須先é¸ä¸­å…©å€‹é¸å–點 - - 如果新的å€åŸŸæ›´å¤§, 二者之間將會被充滿 - Args: '[residence]' - message: - Description: 管ç†é ˜åœ°åŠ å…¥ / é›¢é–‹æ¶ˆæ¯ - Info: - - '&e用法: &6/res message <領地> [enter/leave] [消æ¯]' - - 設置領地加入和離開的消æ¯æ–‡æœ¬ - - '&e用法: &6/res message <領地> remove [enter/leave]' - - 移除加入或離開的消æ¯æ–‡æœ¬ - Args: '[residence] [enter/leave]' - lease: - Description: 管ç†é ˜åœ°ç§Ÿç´„ - Info: - - '&e用法: &6/res lease [renew/cost] [領地]' - - /res lease cost 顯示續租領地的花費 - - /res lease renew 將會續租指定的領地 - Args: '[renew/cost] [residence]' - SubCommands: - set: - Description: 設置租約時間 + - '&e用法 : &6/res set/pset vehicledestroy true/false/remove' + witherspawn: + Translated: 生æˆå‡‹é›¶æ€ª (witherspawn) + Description: å…許 或 ç¦æ­¢ç”Ÿæˆå‡‹é›¶æ€ª Info: - - '&e用法: &6/resadmin lease set [領地] [#days/infinite]' - - 將租約時間設置為特定天數或者無é™åˆ¶ - Args: '[residence]' - renew: - Description: 續期租約時間 + - '&e用法 : &6/res set witherspawn true/false/remove' + phantomspawn: + Translated: 生æˆå¤œé­… (phantomspawn) + Description: å…許 或 ç¦æ­¢ç”Ÿæˆå¤œé­… Info: - - '&e用法: &6/resadmin lease renew <領地>' - - 續期當å‰æˆ–指定的領地租約 - Args: '[residence]' - expires: - Description: 租約éŽæœŸæ™‚é–“ + - '&e用法 : &6/res set phantomspawn true/false/remove' + witherdamage: + Translated: 凋零怪傷害 (witherdamage) + Description: å…許 或 ç¦æ­¢å‡‹é›¶æ€ªå‚·å®³ Info: - - '&e用法: &6/resadmin lease expires <領地>' - - 顯示領地租約éŽæœŸçš„時間 - Args: '[residence]' - cost: - Description: 顯示續租花費 + - '&e用法 : &6/res set witherdamage true/false/remove' + witherdestruction: + Translated: 凋零怪破壞方塊 (witherdestruction) + Description: å…許 或 ç¦æ­¢å‡‹é›¶æ€ªç ´å£žæ–¹å¡Š Info: - - '&e用法: &6/resadmin lease cost <領地>' - - 顯示續租領地所需的花費 - Args: '[residence]' - bank: - Description: 管ç†é ˜åœ°éŠ€è¡Œ + - '&e用法 : &6/res set witherdestruction true/false/remove' + waterflow: + Translated: æ°´æµå‹• (waterflow) + Description: å…許 或 ç¦æ­¢æ°´æµå‹•ï¼ˆå°‡è¦†è“‹ flow 權é™ï¼‰ + Info: + - '&e用法 : &6/res set waterflow true/false/remove' + wspeed1: + Translated: 減速 (wspeed1) + Description: 減慢在領地內的玩家行走速度 + Info: + - '&eUsage: &6/res set wspeed1 true/false/remove' + wspeed2: + Translated: 加速 (wspeed2) + Description: 加快在領地內的玩家行走速度 + Info: + - '&e用法 : &6/res set wspeed2 true/false/remove' + remove: Info: - - '&e用法: &6/res bank [deposit/withdraw] <領地> [數é¡]' - - 你必須站在領地中或者指定領地åå­— - - ä½ å¿…é ˆæ“有 +bank 許å¯æ¬Š - Args: '[deposit/withdraw] [residence]' - confirm: - Description: 確èªåˆªé™¤é ˜åœ° + - '&e用法 : &6/res remove &6[領地å稱]' + Description: 移除領地 + signupdate: Info: - - '&e用法: &6/res confirm' - - 確èªåˆªé™¤ä¸€å€‹é ˜åœ° - gset: - Description: 為æŸå€‹çµ„設置領地的特定許å¯æ¬Š + - '&e用法 : &6/res signupdate' + Description: 更新領地告示牌 + current: Info: - - '&e用法: &6/res gset <領地> [組] [許å¯æ¬Š] [true/false/remove]' - - 輸入 /res flags ? 查看許å¯æ¬Šåˆ—表 - lset: - Description: 更改黑å單和忽略åå–®é¸é … + - '&e用法 : &6/res current' + Description: 顯示你目å‰æ‰€åœ¨çš„領地 + reload: Info: - - '&e用法: &6/res lset <領地> [blacklist/ignorelist] [ææ–™]' - - '&e用法: &6/res lset <領地> Info' - - å°‡æŸç‰©å“加入黑å單以阻止這種物å“被放置在領地中 - - 忽略å單中的物å“å°‡ä¸æœƒè¢«é ˜åœ°ä¿è­· - Args: '[residence] [blacklist/ignorelist] [material]' - removeall: - Description: 移除æŸçŽ©å®¶çš„所有領地 + - '&e用法 : &6/res reload &6[config/lang/groups/flags]' + Description: é‡æ–°è¼‰å…¥èªžè¨€/設定檔案 + leaveraid: Info: - - '&e用法: &6/res removeall [所有者]' - - 移除特定玩家的所有領地 - - 如果是移除其他玩家的領地, 你必須有 /resadmin 命令許å¯æ¬Š - Args: '[playername]' - list: - Description: 顯示領地清單 + - '&e用法 : &6/res leaveraid' + Description: 離開領地çªè¥² + setowner: Info: - - '&e用法: &6/res list <玩家> <é ç¢¼>' - - 列出指定玩家æ“有的所有領地 (除了隱è—領地) - - 如果顯示自己的領地, éš±è—領地也會被顯示 - - è¦åˆ—出所有玩家的領地, 使用 /res listall 命令 - Args: '[playername]' - listhidden: - Description: 顯示隱è—領地清單 + - '&e用法 : &6/resadmin setowner &6[領地å稱] [玩家]' + Description: 改變領地æ“有者 + defend: Info: - - '&e用法: &6/res listhidden <玩家> <é ç¢¼>' - - 列出指定玩家æ“有的隱è—領地 - Args: '[playername]' - listall: - Description: 顯示所有領地 + - '&e用法 : &6/res defend [領地å稱] [玩家å稱]' + Description: 加入領地防守 + attack: + Description: 開始領地çªè¥² Info: - - '&e用法: &6/res listall <é ç¢¼>' - - 顯示所有玩家的領地 - listallhidden: - Description: 顯示所有隱è—領地 + - '&e用法 : &6/res attack [領地å稱]' + unstuck: Info: - - '&e用法: &6/res listhidden <é ç¢¼>' - - 顯示所有玩家的隱è—領地 - sublist: - Description: 列出所有領地å­å€åŸŸ + - '&e用法 : &6/res unstuck' + Description: 傳é€è‡³é ˜åœ°å¤– + subzone: Info: - - '&e用法: &6/res sublist <領地> <é ç¢¼>' - - 列出所有領地å­å€åŸŸ - Args: '[residence]' - reset: - Description: 將領地設置還原為é è¨­å€¼ + - '&e用法 : &6/res subzone &6[領地å稱] [å­å€åŸŸå]' + - '如果領地å稱被忽略,將嘗試使用原有的領地å稱' + Description: 在領地中建立å­å€åŸŸ + removeworld: Info: - - '&e用法: &6/res reset <領地>' - - 將領地的所有權é™é‡ç½®. 你必須是領地所有者或者管ç†å“¡ - Args: '[residence]' - rename: - Description: é‡å‘½å領地 + - '&e用法 : &6/res removeworld &6[世界å]' + - '&e該指令åªèƒ½åœ¨æŽ§åˆ¶å°åŸ·è¡Œ' + Description: 移除指定世界中的所有領地 + limits: Info: - - '&e用法: &6/res rename [領地åå­—] [æ–°åå­—]' - - 你必須是領地所有者或者管ç†å“¡ - - 新領地åå­—ä¸èƒ½èˆ‡å…¶ä»–領地é‡è¤‡ - Args: '[residence]' - kick: - Description: 將玩家踢出領地 + - '&e用法 : &6/res limits' + - '&e顯示你在建立和管ç†é ˜åœ°æ–¹é¢çš„å„種é™åˆ¶' + Description: 顯示你的領地é™åˆ¶ + set: Info: - - '&e用法: &6/res kick <玩家>' - - 你必須是領地所有者或者管ç†å“¡ - - 玩家必須線上 - Args: '[playername]' - mirror: - Description: 複製許å¯æ¬Š + - '&e用法 : &6/res set &6[領地å稱] [權é™] [t/f/r]' + - '&e輸入 /res flags ? 查看權é™åˆ—表' + - '&e這些權é™é©ç”¨æ‰€æœ‰çš„玩家' + Description: 為領地設定é è¨­æ¬Šé™ + clearflags: Info: - - '&e用法: &6/res mirror [領地] [複製到的領地]' - Args: '[residence] [residence]' - market: - Description: 購買, 出售和出租領地 - SubCommands: - Info: - Description: 查看領地的經濟資訊 - Info: - - '&e用法: &6/res market Info [領地]' - - 顯示領地是å¦æ­£åœ¨å‡ºç§Ÿæˆ–出售, 以åŠé ˜åœ°çš„花費 - Args: '[residence]' - list: - Description: 顯示å¯å‡ºç§Ÿèˆ‡å¯å‡ºå”®çš„領地 - Info: - - '&e用法: &6/res market list' - SubCommands: - rent: - Description: 列出å¯ä»¥è¢«ç§Ÿçš„領地. - Info: - - '&e用法: &6/res market list rent' - sell: - Description: 列出å¯ä»¥è¢«è²·çš„領地. - Info: - - '&e用法: &6/res market list sell' - sell: - Description: 出售一個領地 - Info: - - '&e用法: &6/res market sell [領地] [售價]' - - 將領地以 [amount] 元的價格出售 - - 其他玩家å¯ä»¥åŸ·è¡Œ /res market buy 命令購買 - Args: '[residence]' - sign: - Description: 設置市場告示牌 - Info: - - '&e用法: &6/res market sign [領地]' - - 將看å‘的告示牌設置為領地市場告示牌 - Args: '[residence]' - buy: - Description: 購買一個領地 - Info: - - '&e用法: &6/res market buy [領地]' - - 如果該領地正在出售, 則購買這個領地 - Args: '[residence]' - unsell: - Description: å–消出售領地 - Info: - - '&e用法: &6/res market unsell [領地]' - Args: '[residence]' - rent: - Description: 租用一個領地 - Info: - - '&e用法: &6/res market rent [領地] <自動續租>' - - 租用一個領地. <自動續租> å¯ä»¥æ˜¯ true 或 false. 如果是 true, 並且領地所有者å…許, 領地將會在租約到期之å‰è‡ªå‹•çºŒç§Ÿ - Args: '[cresidence] [true/false]' - rentable: - Description: 將領地設置為å¯å‡ºç§Ÿ - Info: - - '&e用法: &6/res market rentable [領地] [價格] [天數] <週期>' - - 以 [價格] 出租領地 [天數] 天. 如果 <週期> 為 true, 領地將會在租約çµæŸå¾Œè‡ªå‹•å‡ºç§Ÿ. - Args: '[residence]' - release: - Description: å–消領地租賃狀態 - Info: - - '&e用法: &6/res market release [領地]' - - 如果你是租用者, 該命令將會退租領地 - - 如果你是所有者, 該命令將會收回領地 - Args: '[residence]' - current: - Description: 顯示你目å‰æ‰€åœ¨çš„領地 + - '&e用法 : &6/res clearflags &6[領地å稱]' + Description: ç§»é™¤é ˜åœ°æ‰€æœ‰æ¬Šé™ + message: Info: - - '&e用法: &6/res current' - signupdate: - Description: 更新領地告示牌 + - '&e用法 : &6/res message &6[領地å稱] [enter/leave] [訊æ¯]' + - '&e設定領地加入/離開的訊æ¯' + - '&e用法 : &6/res message &6[領地å稱] &6remove &6[enter/leave]' + - '&e移除加入/離開的訊æ¯' + Description: 管ç†é ˜åœ°åŠ å…¥/é›¢é–‹è¨Šæ¯ + command: Info: - - '&e用法: &6/res signupdate' - reload: - Description: é‡æ–°åŠ è¼‰èªžè¨€æˆ–設定檔案 + - '&e用法 : &6/res command &6[領地å稱] [allow/block/list] [指令]' + - '&e顯示列表 新增或移除領地中å…許或ç¦æ­¢çš„指令' + - '&e使用 _ 包å«å¤šå€‹è®Šé‡çš„指令' + Description: 管ç†å…許或ç¦æ­¢çš„領地指令 + confirm: + Description: 確èªç§»é™¤é ˜åœ° Info: - - '&e用法: &6/res reload [config/lang]' - lists: - Description: é å®šç¾©è¨±å¯æ¬Šåˆ—表 + - '&e用法 : &6/res confirm' + - '&e確èªç§»é™¤é ˜åœ°' + resadmin: + Info: + - '&e用法 : &6/res resadmin &6[on/off]' + Description: 啟用或ç¦ç”¨é ˜åœ°ç®¡ç†å“¡ + tpset: + Info: + - '&e用法 : &6/res tpset' + - '&e把你站的ä½ç½®è¨­å®šç‚ºé ˜åœ°çš„傳é€é»ž' + Description: 設定傳é€é»ž + tpconfirm: + Info: + - '&e用法 : &6/res tpconfirm' + - '&e強制傳é€åˆ°é ˜åœ°' + Description: 忽略ä¸å®‰å…¨å‚³é€è­¦å‘Š + removeall: + Info: + - '&e用法 : &6/res removeall &6[æ“有者]' + - '&e移除自己的所有領地' + Description: 移除指定玩家的所有領地 + material: + Info: + - '&e用法 : &6/res material &6[方塊 ID]' + Description: 檢查物å“是å¦å­˜åœ¨å…¶ ID + kick: + Info: + - '&e用法 : &6/res kick &6[玩家]' + - '&e你必須是領地æ“有者' + - '&e且玩家必須在線上' + Description: 踢出指定玩家 + sublist: + Info: + - '&e用法 : &6/res sublist &6[領地å稱] [é æ•¸]' + - '&e列出所有å­å€åŸŸ' + Description: 列出所有å­å€åŸŸ + rename: + Info: + - '&e用法 : &6/res rename &6[領地å稱] [æ–°å稱]' + - '&e你必須是æ“有者或管ç†å“¡æ‰èƒ½é€²è¡Œæ­¤é …æ“作' + - '&eæ–°å稱ä¸èƒ½èˆ‡ç¾æœ‰é ˜åœ°é‡è¤‡' + Description: é‡æ–°å‘½å領地 + setallfor: Info: - - é å®šç¾©çš„許å¯æ¬Šåˆ—表å¯ä»¥æ‡‰ç”¨åˆ°é ˜åœ°ä¸Š + - '&e用法 : &6/res setallfor &6[玩家] [權é™] [t/f/r]' + Description: åœ¨æŒ‡å®šçŽ©å®¶çš„æ‰€æœ‰é ˜åœ°ä¸Šè¨­å®šé€šç”¨æ¬Šé™ + lease: + Info: + - '&e用法 : &6/res lease &6[renew/cost] [領地å稱]' + - '&6/res lease cost &e顯示續租領地的花費' + - '&6/res lease renew &e將會續租指定的領地' + Description: 管ç†é ˜åœ°ç§Ÿç´„ SubCommands: - add: - Description: 添加一個列表 - Info: - - '&e用法: &6/res lists add <列表å>' - remove: - Description: 刪除一個列表 + set: + Description: 設定租約時間 Info: - - '&e用法: &6/res lists remove <列表å>' - apply: - Description: 將列表應用於領地 + - '&e用法 : &6/resadmin lease set &6[領地å稱] [#days/infinite]' + - '&e將租約時間設定為特定天數或無é™åˆ¶' + renew: + Description: 續期租約時間 Info: - - '&e用法: &6/res lists apply <列表å> <領地>' - set: - Description: 設置列表全域許å¯æ¬Š + - '&e用法 : &6/resadmin lease renew &6[領地å稱]' + - '&e續期目å‰æˆ–指定的領地租約' + list: + Description: 顯示目å‰ä½æ‰€çš„租約列表 Info: - - '&e用法: &6/res lists set <列表å> <許å¯æ¬Š> <值>' - pset: - Description: 設置列表玩家許å¯æ¬Š + - '&e用法 : &6/resadmin lease list &6[領地å稱] [é æ•¸]' + - '&e顯示出目å‰æ‰€æœ‰å­å€åŸŸçš„租約時間' + expires: + Description: 租約éŽæœŸæ™‚é–“ Info: - - '&e用法: &6/res lists pset <列表å> <玩家> <許å¯æ¬Š> <值>' - gset: - Description: 設置列表組許å¯æ¬Š + - '&e用法 : &6/resadmin lease expires &6[領地å稱]' + - '&e顯示領地租約éŽæœŸçš„時間' + cost: + Description: 顯示續租花費 Info: - - '&e用法: &6/res lists view <列表å>' - view: - Description: 查看列表 - server: - Description: 創建伺æœå™¨é ˜åœ° + - '&e用法 : &6/resadmin lease cost &6[領地å稱]' + - '&e顯示續租領地所需的花費' + tp: Info: - - '&e用法: &6/resadmin server [領地]' - - 創建一個屬於伺æœå™¨æ‰€æœ‰çš„領地 - Args: '[cresidence]' - setowner: - Description: 改變領地所有者 + - '&e用法 : &6/res tp &6[領地å稱]' + - '&e傳é€åˆ°ä½ æŒ‡å®šçš„權é™ï¼Œä½ å¿…é ˆæ“有 tp 權é™æˆ–是æ“有者æ‰èƒ½åŸ·è¡Œæ­¤æ“作' + - '伺æœå™¨ç®¡ç†å“¡éœ€è¦çµ¦äºˆä½ è¨­å®šçš„權é™' + Description: 傳é€åˆ°é ˜åœ° + setall: Info: - - '&e用法: &6/resadmin setowner [領地] [玩家]' - Args: '[cresidence]' + - '&e用法 : &6/res setall &6[權é™] [t/f/r]' + Description: åœ¨æ‰€æœ‰çš„é ˜åœ°ä¸Šè¨­å®šé€šç”¨æ¬Šé™ resreload: - Description: é‡è¼‰ Residence. + Description: é‡æ–°è¼‰å…¥é ˜åœ°æ’件 Info: - - '&e用法: &6/resreload' + - '&e用法 : &6/resreload' resload: - Description: 載入領地存檔檔 - Info: - - '&e用法: &6/resload' - - 該命令ä¸å®‰å…¨! 它ä¸æœƒå…ˆä¿å­˜é ˜åœ°ç‹€æ…‹. - - å°é ˜åœ°åšå‡ºæ”¹è®Šå¾Œé‡æ–°è¼‰å…¥å­˜æª”. - removeworld: - Description: 刪除指定世界中的所有領地 - Info: - - '&e用法: &6/res removeworld [世界å]' - - åªèƒ½åœ¨æŽ§åˆ¶å°åŸ·è¡Œæ­¤å‘½ä»¤ - signconvert: - Description: å°‡ ResidenceSign 的告示牌轉æ›ç‚ºæ–°æ ¼å¼ - Info: - - '&e用法: &6/res signconvert' - - 嘗試轉æ›å·²æœ‰çš„ ResidenceSign 告示牌 - version: - Description: 顯示領地æ’件的版本 + Description: 載入領地存檔 Info: - - '&e用法: &6/res version' + - '&e用法 : &6/resload' + - '&e該指令ä¸å®‰å…¨ï¼Œå®ƒä¸æœƒå…ˆä¿å­˜é ˜åœ°ç‹€æ…‹' + - '&eå°é ˜åœ°åšå‡ºæ”¹è®Šå¾Œå†é‡æ–°è¼‰å…¥å­˜æª”' From 1875612ec80347c34a9f328373bd9cc8f855aabe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=98=AD=E8=98=AD=E9=9C=B2=20Flandre=5Ftw?= <51469621+gregman98@users.noreply.github.com> Date: Mon, 12 Jul 2021 22:56:15 +0800 Subject: [PATCH 0885/1142] Update ChineseTW.yml --- src/Language/ChineseTW.yml | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/Language/ChineseTW.yml b/src/Language/ChineseTW.yml index dad373029..5516ff822 100644 --- a/src/Language/ChineseTW.yml +++ b/src/Language/ChineseTW.yml @@ -1,8 +1,7 @@ -# 此檔案將由 Residence 自動更新, -# 當檢查到更新版本時,你的更改將被覆蓋。 -# 如果你æ“有此檔案的副本, -# 請更改 Residence config.yml 下的 Language:。 -# Translated into Chinese Traditional by Flandre_tw +# of this file and modify that instead. This file will be updated automatically by Residence +# when a newer version is detected, and your changes will be overwritten. Once you +# have a copy of this file, change the Language: option under the Residence config.yml +# to whatever you named your copy. Language: Invalid: @@ -56,7 +55,7 @@ Language: MaxPhysical: '&eä½ å·²é”到了領地最大å…許體ç©ã€‚' SizeLimit: '&eå€åŸŸå¤§å°è¶…出了å…許的尺寸上é™ã€‚' HighLimit: '&cä½ ä¸èƒ½ä¿è­·é€™éº¼é«˜çš„領地,高度上é™ç‚º &6%1。' - LowLimit: 'ä½ ä¸èƒ½ä¿è­·é€™éº¼æ·±çš„領地,深度上é™ç‚º &6%1。' + LowLimit: ä½ ä¸èƒ½ä¿è­·é€™éº¼æ·±çš„領地,深度上é™ç‚º &6%1。 Select: Points: '&e執行指令å‰è¦å…ˆé¸æ“‡å…©å€‹é»ž ï¼' Overlap: '&cé¸æ“‡é»žå’Œå€åŸŸ &6%1 &cé‡ç–Š ï¼' @@ -74,7 +73,7 @@ Language: Secondary: '&e第二個é¸æ“‡é»ž : &6%1。' TooHigh: '&c警告,é¸æ“‡å€åŸŸå·²è¶…éŽåœ°åœ–頂端,ç¾åœ¨å·²è£å‰ªã€‚' TooLow: '&c警告,é¸æ“‡å€åŸŸå·²è¶…éŽåœ°åœ–底部,ç¾åœ¨å·²è£å‰ªã€‚' - TotalSize: '&eé¸æ“‡å€åŸŸç¸½è¨ˆå°ºå¯¸ : &6%1。' + TotalSize: '&eé¸æ“‡å€åŸŸç¸½è¨ˆå°ºå¯¸ : &6%1' AutoEnabled: '&e自動é¸æ“‡æ¨¡å¼&6é–‹å•Ÿ&e,輸入 &6/res select auto &e關閉。' AutoDisabled: '&e自動é¸æ“‡æ¨¡å¼&6關閉&e,輸入 &6/res select auto &eå†æ¬¡æ‰“開。' Disabled: '&c你沒有使用é¸æ“‡æŒ‡ä»¤çš„權é™ã€‚' @@ -415,9 +414,7 @@ Language: VotesTopLine: '&6%1 &7%2 評分列表 &6- &7第 &6%3 &7é ï¼Œå…± &6%4 %5' VotesList: ' &7%1. &6%2 &7%3 &7%4' NoDesc: '&6沒有æè¿°' - Desc: |- - &6æè¿° : - %1 + Desc: "&6æè¿° : \n%1" DescChange: '&6æ述已更改為 : %1。' ChantChange: '&4無法更改商店權é™ç‚º true (t)。' NewBoard: '&6æˆåŠŸæ–°å¢žå•†åº—宣傳é¢æ¿ã€‚' @@ -789,8 +786,8 @@ CommandHelp: rentable: Description: Make a residence rentable. Info: - - '&e用法 : &6/res market rentable [領地å稱] [花費] [天數] - ' + - '&e用法 : &6/res market rentable [領地å稱] [花費] [天數] + ' - 使領地出租以 [天數] 來計算 [花費] - 如果開啟 ,則在租約到期å‰å¯å†æ¬¡å‡ºç§Ÿ - 如果開啟 ,則在租約到期後留在市場上 @@ -1612,7 +1609,7 @@ CommandHelp: subzone: Info: - '&e用法 : &6/res subzone &6[領地å稱] [å­å€åŸŸå]' - - '如果領地å稱被忽略,將嘗試使用原有的領地å稱' + - 如果領地å稱被忽略,將嘗試使用原有的領地å稱 Description: 在領地中建立å­å€åŸŸ removeworld: Info: @@ -1732,7 +1729,7 @@ CommandHelp: Info: - '&e用法 : &6/res tp &6[領地å稱]' - '&e傳é€åˆ°ä½ æŒ‡å®šçš„權é™ï¼Œä½ å¿…é ˆæ“有 tp 權é™æˆ–是æ“有者æ‰èƒ½åŸ·è¡Œæ­¤æ“作' - - '伺æœå™¨ç®¡ç†å“¡éœ€è¦çµ¦äºˆä½ è¨­å®šçš„權é™' + - 伺æœå™¨ç®¡ç†å“¡éœ€è¦çµ¦äºˆä½ è¨­å®šçš„æ¬Šé™ Description: 傳é€åˆ°é ˜åœ° setall: Info: From 5d6aae298f22a4b06d279d06a3c61f8ce7a8cdc4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jul 2021 13:04:23 +0300 Subject: [PATCH 0886/1142] Import cleanup --- .../bukkit/residence/listeners/ResidenceBlockListener.java | 4 +--- .../bukkit/residence/listeners/ResidenceEntityListener.java | 2 -- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 1 - 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 0370b0dec..41f401770 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -43,7 +43,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; -import com.Zrips.CMI.Modules.ActionBar.ActionBarManager; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.commands.auto.direction; @@ -61,7 +60,6 @@ import net.Zrips.CMILib.ActionBar.CMIActionBar; import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { @@ -613,7 +611,7 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { -CMIDebug.d("place event", event.getBlock().getType()); + if (!canPlaceBlock(event.getPlayer(), event.getBlock(), true)) event.setCancelled(true); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 7da9cf6c6..a4744f51c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -57,7 +57,6 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; -import com.Zrips.CMI.Modules.ActionBar.ActionBarManager; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -71,7 +70,6 @@ import net.Zrips.CMILib.ActionBar.CMIActionBar; import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceEntityListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index a726b5e86..ed1b424b7 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -26,7 +26,6 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import com.Zrips.CMI.Modules.TitleMessages.TitleMessageManager; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.chat.ChatChannel; From 7c01da13ae21757285d55a416374ce1089f92694 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jul 2021 13:48:27 +0300 Subject: [PATCH 0887/1142] Ignoring capitalization for offline type servers. --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index ed1b424b7..2d484a602 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1952,13 +1952,13 @@ public boolean isOwner(Player p) { if (p == null) return false; if (Residence.getInstance().getConfigManager().isOfflineMode()) - return perms.getOwner().equals(p.getName()); + return perms.getOwner().equalsIgnoreCase(p.getName()); return perms.getOwnerUUID().equals(p.getUniqueId()); } public boolean isOwner(CommandSender sender) { if (Residence.getInstance().getConfigManager().isOfflineMode()) { - return perms.getOwner().equals(sender.getName()); + return perms.getOwner().equalsIgnoreCase(sender.getName()); } if (sender instanceof Player) { return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); From 4e3990cf90c2702b63f42a3b4f74f61d0ef07646 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jul 2021 13:57:38 +0300 Subject: [PATCH 0888/1142] Force updating player group after certain actions --- src/com/bekvon/bukkit/residence/commands/auto.java | 6 ++++-- src/com/bekvon/bukkit/residence/commands/create.java | 6 ++++-- .../bekvon/bukkit/residence/containers/ResidencePlayer.java | 4 ++++ .../bekvon/bukkit/residence/economy/rent/RentManager.java | 1 + .../bukkit/residence/protection/ResidenceManager.java | 5 ++++- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index f8ee2a206..0e424414d 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -54,6 +54,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } } + Residence.getInstance().getPlayerManager().getResidencePlayer(player).forceUpdateGroup(); + Location loc = player.getLocation(); int minY = loc.getBlockY() - 1; @@ -68,8 +70,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.getSelectionManager().placeLoc2(player, loc.clone(), false); boolean result = resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true, lenght); - CMIDebug.d(result, plugin.getSelectionManager().getSelectionCuboid(player).getXSize(), plugin.getSelectionManager().getSelectionCuboid(player).getYSize(), plugin.getSelectionManager() - .getSelectionCuboid(player).getZSize()); + + if (!result) { Residence.getInstance().msg(player, lm.Area_SizeLimit); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 05a19391b..a4426555d 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -36,9 +36,11 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (sender instanceof Player && !plugin.getPermissionManager().isResidenceAdmin(sender) && plugin.isDisabledWorldCommand((plugin.getSelectionManager().getSelection(player)) .getWorld())) { plugin.msg(sender, lm.General_DisabledWorld); - return null; + return null; } + Residence.getInstance().getPlayerManager().getResidencePlayer(player).forceUpdateGroup(); + plugin.getResidenceManager().addResidence(player, args[0], plugin.getSelectionManager().getPlayerLoc1(player), plugin .getSelectionManager().getPlayerLoc2(player), resadmin); return true; @@ -53,6 +55,6 @@ public void getLocale() { // Main command c.get("Description", "Create Residences"); c.get("Info", Arrays.asList("&eUsage: &6/res create [residence_name]")); - LocaleManager.addTabCompleteMain(this); + LocaleManager.addTabCompleteMain(this); } } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index ce7b7d865..6fb487942 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -219,6 +219,10 @@ public PermissionGroup getGroup() { return getGroup(false); } + public PermissionGroup forceUpdateGroup() { + return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), true); + } + public PermissionGroup getGroup(boolean forceUpdate) { updatePlayer(); return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), forceUpdate); diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index fe717e0fc..fbc588472 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -277,6 +277,7 @@ public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean r } ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + rPlayer.forceUpdateGroup(); if (!resadmin && this.getRentCount(player.getName()) >= rPlayer.getMaxRents()) { plugin.msg(player, lm.Residence_MaxRent); return; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 7b93dd163..473b70352 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -318,7 +318,7 @@ public void listResidences(CommandSender sender, String targetplayer, int page, TreeMap ownedResidences = plugin.getPlayerManager().getResidencesMap(targetplayer, hidden, onlyHidden, world); ownedResidences.putAll(plugin.getRentManager().getRentsMap(targetplayer, onlyHidden, world)); ownedResidences.putAll(plugin.getPlayerManager().getTrustedResidencesMap(targetplayer, hidden, onlyHidden, world)); - + plugin.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin, world); } @@ -521,6 +521,9 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole } } + if (rPlayer != null) + rPlayer.forceUpdateGroup(); + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, rPlayer == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); plugin.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) From ff728096c92bf47bec1e11263592131bf5c92b5d Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jul 2021 14:10:57 +0300 Subject: [PATCH 0889/1142] Cleanup --- .../bukkit/residence/ConfigManager.java | 18 ++- .../bekvon/bukkit/residence/Residence.java | 11 +- .../bukkit/residence/commands/auto.java | 7 +- .../bukkit/residence/commands/lease.java | 5 +- .../bukkit/residence/commands/shop.java | 2 +- .../residence/economy/TransactionManager.java | 3 +- .../residence/economy/rent/RentManager.java | 2 +- .../bekvon/bukkit/residence/gui/FlagUtil.java | 2 +- .../listeners/ResidencePlayerListener.java | 3 +- .../permissions/PermissionManager.java | 3 +- .../protection/ClaimedResidence.java | 2 +- .../residence/protection/PlayerManager.java | 3 +- .../bukkit/residence/text/Language.java | 7 +- .../bukkit/residence/text/help/HelpEntry.java | 2 +- .../residence/text/help/InformationPager.java | 1 + .../bukkit/residence/text/help/PageInfo.java | 88 ------------ .../bekvon/bukkit/residence/utils/Debug.java | 17 --- .../residence/utils/VersionChecker.java | 94 ------------ .../bukkit/residence/utils/YmlMaker.java | 136 ------------------ src/plugin.yml | 2 +- 20 files changed, 35 insertions(+), 373 deletions(-) delete mode 100644 src/com/bekvon/bukkit/residence/text/help/PageInfo.java delete mode 100644 src/com/bekvon/bukkit/residence/utils/Debug.java delete mode 100644 src/com/bekvon/bukkit/residence/utils/VersionChecker.java delete mode 100644 src/com/bekvon/bukkit/residence/utils/YmlMaker.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 65d80abc5..42128f03f 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -20,7 +20,6 @@ import java.util.jar.JarFile; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; @@ -30,20 +29,19 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; - -import net.Zrips.CMILib.Colors.CMIChatColor; -import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; -import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Version.Version; - import com.bekvon.bukkit.residence.containers.ELMessageType; import com.bekvon.bukkit.residence.containers.EconomyType; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.RandomTeleport; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import com.bekvon.bukkit.residence.utils.YmlMaker; + +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Locale.YmlMaker; +import net.Zrips.CMILib.Version.Version; public class ConfigManager { protected String defaultGroup; @@ -570,7 +568,7 @@ public void UpdateConfigFile() { UUIDConvertion = c.get("Global.UUIDConvertion", true); c.addComment("Global.OfflineMode", - "If you running offline server, better to check this as true. This will help to solve issues with changing players UUID."); + "If you running offline server. Suggestion would be to keep this at false and base residence ownership from UUID and not on players name"); OfflineMode = c.get("Global.OfflineMode", false); c.addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index a328c1a76..eb74bbf69 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -118,7 +118,6 @@ import com.bekvon.bukkit.residence.utils.RandomTp; import com.bekvon.bukkit.residence.utils.Sorting; import com.bekvon.bukkit.residence.utils.TabComplete; -import com.bekvon.bukkit.residence.utils.VersionChecker; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; import com.earth2me.essentials.Essentials; import com.residence.mcstats.Metrics; @@ -128,6 +127,7 @@ import fr.crafter.tickleman.realplugin.RealPlugin; import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; /** @@ -206,7 +206,6 @@ public class Residence extends JavaPlugin { Metrics metrics = null; protected int autosaveBukkitId = -1; - protected VersionChecker versionChecker; protected boolean initsuccess = false; public Map deleteConfirm; public Map UnrentConfirm = new HashMap(); @@ -420,7 +419,6 @@ public void onEnable() { instance = this; initsuccess = false; - versionChecker = new VersionChecker(this); deleteConfirm = new HashMap(); resadminToggle = new ArrayList(); server = this.getServer(); @@ -821,7 +819,9 @@ public void run() { getShopSignUtilManager().LoadShopVotes(); getShopSignUtilManager().LoadSigns(); getShopSignUtilManager().BoardUpdate(); - getVersionChecker().VersionCheck(null); + + + CMIVersionChecker.VersionCheck(null, 11480, this.getDescription()); } public void parseHelpEntries() { @@ -970,9 +970,6 @@ public Residence getPlugin() { return this; } - public VersionChecker getVersionChecker() { - return versionChecker; - } // public LWC getLwc() { // return lwc; diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 0e424414d..79fd86ec8 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -10,9 +10,6 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Logs.CMIDebug; - import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -21,7 +18,9 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.utils.Debug; + +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; public class auto implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index f187043ae..c7fce46d0 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -7,14 +7,15 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.text.help.PageInfo; + +import net.Zrips.CMILib.Container.PageInfo; +import net.Zrips.CMILib.FileHandler.ConfigReader; public class lease implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index b90d3f451..0382bcaec 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -23,9 +23,9 @@ import com.bekvon.bukkit.residence.shopStuff.ShopListener; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.shopStuff.Vote; -import com.bekvon.bukkit.residence.text.help.PageInfo; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.RawMessages.RawMessage; diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 78af47322..80e4566b7 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -22,7 +22,8 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.text.help.PageInfo; + +import net.Zrips.CMILib.Container.PageInfo; public class TransactionManager implements MarketBuyInterface { private Set sellAmount; diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index fbc588472..303e26085 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -25,9 +25,9 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; -import com.bekvon.bukkit.residence.text.help.PageInfo; import com.bekvon.bukkit.residence.utils.GetTime; +import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.RawMessages.RawMessage; public class RentManager implements MarketRentInterface { diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index abfbe0557..500d51043 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -9,8 +9,8 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.text.help.PageInfo; +import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.GUI.CMIGui; import net.Zrips.CMILib.GUI.CMIGuiButton; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 68d0343f0..07bcfad9f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -83,6 +83,7 @@ import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; +import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; public class ResidencePlayerListener implements Listener { @@ -872,7 +873,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { plugin.getPlayerManager().playerJoin(player); if (ResPerm.versioncheck.hasPermission(player)) { - plugin.getVersionChecker().VersionCheck(player); + CMIVersionChecker.VersionCheck(player, 11480, plugin.getDescription()); } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 716593699..d6c000265 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -34,6 +34,7 @@ import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; import net.Zrips.CMILib.RawMessages.RawMessage; +import net.Zrips.CMILib.Util.CMIVersionChecker; public class PermissionManager { protected static PermissionsInterface perms; @@ -133,7 +134,7 @@ private void checkPermissions() { PluginManager pluginManager = plugin.getServer().getPluginManager(); Plugin pl = pluginManager.getPlugin("LuckPerms"); if (pl != null && pl.isEnabled()) { - Integer ver = plugin.getVersionChecker().convertVersion(pl.getDescription().getVersion()); + Integer ver = CMIVersionChecker.convertVersion(pl.getDescription().getVersion()); if (ver > 50000) { perms = new LuckPerms5Adapter(); Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found LuckPerms5 Plugin!"); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 2d484a602..529a4b158 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -54,10 +54,10 @@ import com.bekvon.bukkit.residence.raid.ResidenceRaid; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.signsStuff.Signs; -import com.bekvon.bukkit.residence.text.help.PageInfo; import com.bekvon.bukkit.residence.utils.Utils; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index fc58cb222..4958a6077 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -4,9 +4,9 @@ import java.util.Collections; import java.util.Iterator; import java.util.Map; +import java.util.Map.Entry; import java.util.TreeMap; import java.util.UUID; -import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; @@ -20,7 +20,6 @@ import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.utils.Debug; public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index c33db8a22..8c0f54de5 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -7,15 +7,14 @@ import java.util.List; import java.util.Set; -import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; -import net.Zrips.CMILib.Colors.CMIChatColor; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; -import com.bekvon.bukkit.residence.utils.Debug; -import com.bekvon.bukkit.residence.utils.YmlMaker; + +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Locale.YmlMaker; public class Language { public FileConfiguration enlocale; diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index cad9ca070..c5b57c809 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -30,7 +30,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import net.Zrips.CMILib.Colors.CMIChatColor; -import net.Zrips.CMILib.Logs.CMIDebug; +import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Version.Version; diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 9ae895770..d43dc1114 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -28,6 +28,7 @@ import com.bekvon.bukkit.residence.utils.GetTime; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.RawMessages.RawMessage; public class InformationPager { diff --git a/src/com/bekvon/bukkit/residence/text/help/PageInfo.java b/src/com/bekvon/bukkit/residence/text/help/PageInfo.java deleted file mode 100644 index eaf458dda..000000000 --- a/src/com/bekvon/bukkit/residence/text/help/PageInfo.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.bekvon.bukkit.residence.text.help; - -public class PageInfo { - - private int totalEntries = 0; - private int totalPages = 0; - private int start = 0; - private int end = 0; - private int currentPage = 0; - - private int currentEntry = 0; - - private int perPage = 6; - - public PageInfo(int perPage, int totalEntries, int currentPage) { - this.perPage = perPage; - this.totalEntries = totalEntries; - this.currentPage = currentPage; - calculate(); - } - - public int getPositionForOutput() { - return currentEntry; - } - - public int getPositionForOutput(int place) { - return this.start + place + 1; - } - - private void calculate() { - this.start = (this.currentPage - 1) * this.perPage; - this.end = this.start + this.perPage - 1; - if (this.end + 1 > this.totalEntries) - this.end = this.totalEntries - 1; - this.totalPages = (int) Math.ceil((double) this.totalEntries / (double) this.perPage); - } - - public boolean isInRange(int place) { - if (place >= start && place <= end) - return true; - return false; - } - - public boolean isContinue() { - return !isEntryOk(); - } - - public boolean isEntryOk() { - currentEntry++; - return currentEntry - 1 >= start && currentEntry - 1 <= end; - } - - public boolean isBreak() { - return currentEntry - 1 > end; - } - - public boolean isPageOk() { - return isPageOk(this.currentPage); - } - - public boolean isPageOk(int page) { - if (this.totalPages < page) - return false; - if (page < 1) - return false; - return true; - } - - public int getStart() { - return start; - } - - public int getEnd() { - return end; - } - - public int getTotalPages() { - return totalPages; - } - - public int getCurrentPage() { - return currentPage; - } - - public int getTotalEntries() { - return totalEntries; - } -} diff --git a/src/com/bekvon/bukkit/residence/utils/Debug.java b/src/com/bekvon/bukkit/residence/utils/Debug.java deleted file mode 100644 index 327ab2048..000000000 --- a/src/com/bekvon/bukkit/residence/utils/Debug.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.bekvon.bukkit.residence.utils; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; - -import net.Zrips.CMILib.Colors.CMIChatColor; - -public class Debug { - public static void D(Object message) { - Player player = Bukkit.getPlayer("Zrips"); - if (player == null) - return; - player.sendMessage(ChatColor.DARK_GRAY + "[Residence Debug] " + ChatColor.DARK_AQUA + CMIChatColor.translate(message == null ? "Null" : message.toString())); - return; - } -} diff --git a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java b/src/com/bekvon/bukkit/residence/utils/VersionChecker.java deleted file mode 100644 index 272aefa82..000000000 --- a/src/com/bekvon/bukkit/residence/utils/VersionChecker.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.bekvon.bukkit.residence.utils; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.net.URL; -import java.net.URLConnection; -import java.util.Arrays; -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; - -import com.bekvon.bukkit.residence.Residence; - -import net.Zrips.CMILib.Version.Version; - -public class VersionChecker { - Residence plugin; - private static int resource = 11480; - - public VersionChecker(Residence plugin) { - this.plugin = plugin; - } - - public Version getVersion() { - return Version.getCurrent(); - } - - public Integer convertVersion(String v) { - v = v.replaceAll("[^\\d.]", ""); - Integer version = 0; - if (v.contains(".")) { - String lVersion = ""; - for (String one : v.split("\\.")) { - String s = one; - if (s.length() == 1) - s = "0" + s; - lVersion += s; - } - - try { - version = Integer.parseInt(lVersion); - } catch (Exception e) { - e.printStackTrace(); - } - } else { - try { - version = Integer.parseInt(v); - } catch (Exception e) { - e.printStackTrace(); - } - } - return version; - } - - public void VersionCheck(final Player player) { - if (!plugin.getConfigManager().versionCheck()) - return; - - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - String currentVersion = plugin.getDescription().getVersion(); - String newVersion = getNewVersion(); - if (newVersion == null || newVersion.equalsIgnoreCase(currentVersion)) - return; - List msg = Arrays.asList( - ChatColor.GREEN + "*********************** " + plugin.getDescription().getName() + " **************************", - ChatColor.GREEN + "* " + newVersion + " is now available! Your version: " + currentVersion, - ChatColor.GREEN + "* " + ChatColor.DARK_GREEN + plugin.getDescription().getWebsite(), - ChatColor.GREEN + "************************************************************"); - for (String one : msg) - if (player != null) - player.sendMessage(one); - else - Bukkit.getConsoleSender().sendMessage(one); - } - }); - } - - public String getNewVersion() { - try { - URLConnection con = new URL("https://api.spigotmc.org/legacy/update.php?resource=" + resource).openConnection(); - String version = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine(); - if (version.length() <= 8) - return version; - } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Failed to check for " + plugin.getDescription().getName() + " update on spigot web page."); - } - return null; - } - -} diff --git a/src/com/bekvon/bukkit/residence/utils/YmlMaker.java b/src/com/bekvon/bukkit/residence/utils/YmlMaker.java deleted file mode 100644 index 783fe8862..000000000 --- a/src/com/bekvon/bukkit/residence/utils/YmlMaker.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.bekvon.bukkit.residence.utils; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.util.logging.Level; - -import org.apache.commons.lang.Validate; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.plugin.java.JavaPlugin; - -import com.bekvon.bukkit.residence.Residence; - -public class YmlMaker { - Residence Plugin; - public String fileName; - private JavaPlugin plugin; - public File ConfigFile; - private FileConfiguration Configuration; - - public YmlMaker(Residence Plugin) { - this.Plugin = Plugin; - } - - public YmlMaker(JavaPlugin plugin, String fileName) { - if (plugin == null) { - throw new IllegalArgumentException("plugin cannot be null"); - } - this.plugin = plugin; - this.fileName = fileName; - File dataFolder = plugin.getDataFolder(); - if (dataFolder == null) { - throw new IllegalStateException(); - } - this.ConfigFile = new File(dataFolder.toString() + File.separatorChar + this.fileName); - } - - private static YamlConfiguration loadConfiguration(InputStreamReader inputStreamReader) { - Validate.notNull(inputStreamReader, "File cannot be null"); - YamlConfiguration config = new YamlConfiguration(); - try { - config.load(inputStreamReader); - } catch (FileNotFoundException ex) { - } catch (IOException ex) { - } catch (InvalidConfigurationException ex) { - return null; - } - return config; - } - - private YamlConfiguration loadConfiguration(InputStream defConfigStream) { - Validate.notNull(defConfigStream, "File cannot be null"); - YamlConfiguration config = new YamlConfiguration(); - try { - config.load(ConfigFile); - } catch (FileNotFoundException ex) { - } catch (IOException ex) { - } catch (InvalidConfigurationException ex) { - return null; - } - return config; - } - - public void reloadConfig() { - InputStreamReader f = null; - try { - f = new InputStreamReader(new FileInputStream(this.ConfigFile), "UTF-8"); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - - if (f != null) - this.Configuration = loadConfiguration(f); - - if (Configuration == null) { - if (f != null) - try { - f.close(); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - - InputStream defConfigStream = this.plugin.getResource(this.fileName); - if (defConfigStream != null) { - YamlConfiguration defConfig = loadConfiguration(defConfigStream); - if (defConfig != null) - this.Configuration.setDefaults(defConfig); - } - if (defConfigStream != null) - try { - defConfigStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - if (f != null) - try { - f.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public FileConfiguration getConfig() { - if (this.Configuration == null) { - reloadConfig(); - } - return this.Configuration; - } - - public void saveConfig() { - if ((this.Configuration == null) || (this.ConfigFile == null)) { - return; - } - try { - getConfig().save(this.ConfigFile); - } catch (IOException ex) { - this.plugin.getLogger().log(Level.SEVERE, "Could not save config to " + this.ConfigFile, ex); - } - } - - public void saveDefaultConfig() { - if (!this.ConfigFile.exists()) { - this.plugin.saveResource(this.fileName, false); - } - } -} diff --git a/src/plugin.yml b/src/plugin.yml index a1d31b6e9..3cfd6626d 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.0.0 +version: 5.0.0.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 1488450f13547ac6c851da6bab5dc7e4eda8c8f8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jul 2021 14:32:17 +0300 Subject: [PATCH 0890/1142] Lets account for expanded height worlds --- .../bukkit/residence/commands/list.java | 7 +++- .../listeners/ResidenceBlockListener.java | 5 ++- .../residence/selection/SelectionManager.java | 42 ++++++++++++++++--- 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 9744f3e47..0a9c7b2c3 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -6,7 +6,10 @@ import org.bukkit.World; import org.bukkit.command.CommandSender; +import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; + import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -22,6 +25,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo World world = null; String target = null; + CMIDebug.d(CMIWorld.getMaxHeight(Bukkit.getWorlds().get(0))); + c: for (int i = 0; i < args.length; i++) { try { page = Integer.parseInt(args[i]); @@ -45,7 +50,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.getResidenceManager().listResidences(sender, target, page, false, false, resadmin, world); - return true; + return true; } @Override diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 41f401770..4c3bff82d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -59,6 +59,7 @@ import net.Zrips.CMILib.ActionBar.CMIActionBar; import net.Zrips.CMILib.Container.CMIBlock; +import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Version.Version; @@ -759,8 +760,8 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { Location origins = event.getBlock().getLocation(); - int lowestY = 255; - int bigestY = 0; + int lowestY = CMIWorld.getMaxHeight(origins.getWorld()); + int bigestY = CMIWorld.getMinHeight(origins.getWorld()); int lowestX = Integer.MAX_VALUE; int lowestZ = Integer.MAX_VALUE; int bigestX = -Integer.MAX_VALUE; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index fe6b26010..7ce307f89 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -31,6 +31,7 @@ import net.Zrips.CMILib.CMILib; import net.Zrips.CMILib.ActionBar.CMIActionBar; +import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Effects.CMIEffect; import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; @@ -41,8 +42,6 @@ public class SelectionManager { private HashMap vMap = new HashMap(); - public static final int MIN_HEIGHT = 0; - Permission ignoreyPermission = new Permission(ResPerm.bypass_ignorey.getPermission(), PermissionDefault.FALSE); Permission ignoreyinsubzonePermission = new Permission(ResPerm.bypass_ignoreyinsubzone.getPermission(), PermissionDefault.FALSE); @@ -124,7 +123,11 @@ public int getMinYAllowed() { case ignoreY: case noLimits: default: - return 0; + try { + return CMIWorld.getMinHeight(this.getBaseLoc1().getWorld()); + } catch (Throwable e) { + return 0; + } case residenceBounds: ClaimedResidence res1 = plugin.getResidenceManager().getByLoc(this.getBaseLoc1()); if (res1 != null) { @@ -134,7 +137,11 @@ public int getMinYAllowed() { } break; } - return 0; + try { + return CMIWorld.getMinHeight(this.getBaseLoc1().getWorld()); + } catch (Throwable e) { + return 0; + } } private boolean inSameResidence() { @@ -287,12 +294,21 @@ private int getMaxWorldHeight(World world) { return plugin.getConfigManager().getSelectionNetherHeight(); case NORMAL: case THE_END: - return 255; + + try { + return CMIWorld.getMaxHeight(world) - 1; + } catch (Throwable e) { + return 255; + } default: break; } - return 255; + try { + return CMIWorld.getMaxHeight(world) - 1; + } catch (Throwable e) { + return 255; + } } public enum Direction { @@ -918,6 +934,14 @@ public void modify(Player player, boolean shift, double amount) { return; } CuboidArea area = this.getSelectionCuboid(player); + + int MIN_HEIGHT = 0; + + try { + MIN_HEIGHT = CMIWorld.getMinHeight(area.getWorld()); + } catch (Throwable e) { + } + switch (d) { case DOWN: double oldy = area.getLowVector().getBlockY(); @@ -1058,6 +1082,12 @@ public boolean contract(Player player, double amount, @SuppressWarnings("unused" plugin.msg(player, lm.Contracting_South, amount); break; case DOWN: + + int MIN_HEIGHT = 0; + try { + MIN_HEIGHT = CMIWorld.getMinHeight(area.getWorld()); + } catch (Throwable e) { + } oldy = area.getLowVector().getBlockY(); oldy = oldy + amount; if (oldy < MIN_HEIGHT) { From e098e973627378c32bdbc8646e3c0aebf6e238a0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jul 2021 16:23:44 +0300 Subject: [PATCH 0891/1142] Protecting fish stealing with bucket with animalkilling flag --- .../bukkit/residence/commands/auto.java | 4 --- .../bukkit/residence/commands/list.java | 8 ++--- .../bukkit/residence/containers/Flags.java | 1 - .../listeners/ResidenceEntityListener.java | 32 ++++++++++++++++++- .../listeners/ResidencePlayerListener.java | 2 ++ .../residence/selection/SelectionManager.java | 1 + 6 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 79fd86ec8..5dba487f8 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -20,7 +20,6 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Logs.CMIDebug; public class auto implements cmd { @@ -144,8 +143,6 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, if (max < 0) max = maxX; - CMIDebug.d("Max: ", max); - while (true) { if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { if (dir.equals(direction.Top) || dir.equals(direction.Bottom)) { @@ -254,7 +251,6 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, cuboid = plugin.getSelectionManager().getSelectionCuboid(player); if (cuboid.getXSize() < x || cuboid.getYSize() < y || cuboid.getZSize() < z) { - CMIDebug.d(cuboid.getXSize() < x, cuboid.getYSize() < y, cuboid.getZSize() < z); return false; } diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index 0a9c7b2c3..ac77f5738 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -6,16 +6,14 @@ import org.bukkit.World; import org.bukkit.command.CommandSender; -import net.Zrips.CMILib.Container.CMIWorld; -import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Logs.CMIDebug; - import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import net.Zrips.CMILib.FileHandler.ConfigReader; + public class list implements cmd { @Override @@ -24,8 +22,6 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo int page = 1; World world = null; String target = null; - - CMIDebug.d(CMIWorld.getMaxHeight(Bukkit.getWorlds().get(0))); c: for (int i = 0; i < args.length; i++) { try { diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 22c98b0ea..0bdf48011 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -4,7 +4,6 @@ import java.util.Set; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; public enum Flags { anvil(CMIMaterial.ANVIL, FlagMode.Both, "Allows or denys interaction with anvil", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index a4744f51c..83a2edea5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -49,6 +49,8 @@ import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.inventory.ItemStack; @@ -69,6 +71,7 @@ import net.Zrips.CMILib.ActionBar.CMIActionBar; import net.Zrips.CMILib.Entities.CMIEntity; +import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Version.Version; @@ -677,7 +680,7 @@ public void onHangingBreakEvent(HangingBreakEvent event) { if (!event.getEntity().getType().equals(EntityType.ITEM_FRAME)) return; - + if (!event.getCause().equals(RemoveCause.PHYSICS)) return; @@ -1658,4 +1661,31 @@ public void onEntityDamage(EntityDamageEvent event) { } } } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerInteractAtFish(PlayerInteractEntityEvent event) { + if (Version.isCurrentLower(Version.v1_12_R1)) + return; + Player player = event.getPlayer(); + if (Residence.getInstance().isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + if (!(ent instanceof org.bukkit.entity.Fish)) + return; + + ItemStack iih = CMIItemStack.getItemInMainHand(player); + if (iih == null) + return; + + if (!CMIMaterial.get(iih).equals(CMIMaterial.WATER_BUCKET)) + return; + + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); + + if (!perms.playerHas(player, Flags.animalkilling, FlagCombo.TrueOrNone)) { + event.setCancelled(true); + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.animalkilling); + } + } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 07bcfad9f..a7f268797 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -82,6 +82,7 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; @@ -1630,6 +1631,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { // disabling event on world + CMIDebug.d("PlayerBucketEmptyEvent"); if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 7ce307f89..b8221e3a3 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -244,6 +244,7 @@ public void selectChunk() { int zcoord = chunk.getZ() * 16; int xmax = xcoord + 15; int zmax = zcoord + 15; + this.setBaseLoc1(new Location(player.getWorld(), xcoord, this.getMinYAllowed(), zcoord)); this.setBaseLoc2(new Location(player.getWorld(), xmax, this.getMaxYAllowed(), zmax)); plugin.msg(player, lm.Select_Success); From 355c0d8e3739afe92e4d2185c5497d8d45857a1e Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jul 2021 17:01:40 +0300 Subject: [PATCH 0892/1142] Moving random teleport into Async for paper type servers --- .../bekvon/bukkit/residence/commands/rt.java | 46 +++-- .../bukkit/residence/utils/RandomTp.java | 178 ++++++++++++++++++ 2 files changed, 210 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index b2e25e3c6..9e6ec583d 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; +import java.util.concurrent.CompletableFuture; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -8,7 +9,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -17,6 +17,9 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; + public class rt implements cmd { @Override @@ -98,21 +101,36 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - Location loc = plugin.getRandomTpManager().getRandomlocation(wname); - plugin.getRandomTeleportMap().put(tPlayer.getName(), System.currentTimeMillis()); + World worldName = wname; + Player player = tPlayer; - if (loc == null) { - plugin.msg(sender, lm.RandomTeleport_IncorrectLocation, sec); - return true; - } + CompletableFuture aloc = plugin.getRandomTpManager().getRandomlocationAsync(worldName); + + aloc.thenApply(lc -> { + + plugin.getRandomTeleportMap().put(player.getName(), System.currentTimeMillis()); + + if (lc == null) { + plugin.msg(sender, lm.RandomTeleport_IncorrectLocation, sec); + return true; + } + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (plugin.getConfigManager().getTeleportDelay() > 0 && !resadmin && !ResPerm.randomtp_delaybypass.hasPermission(sender, false)) { + plugin.msg(player, lm.RandomTeleport_TeleportStarted, lc.getX(), lc.getY(), lc.getZ(), plugin.getConfigManager().getTeleportDelay()); + plugin.getTeleportDelayMap().add(player.getName()); + plugin.getRandomTpManager().performDelaydTp(lc, player); + } else + plugin.getRandomTpManager().performInstantTp(lc, player); + } + }, 1); + + CMIDebug.d(lc.toVector().toString()); - if (plugin.getConfigManager().getTeleportDelay() > 0 && !resadmin && !ResPerm.randomtp_delaybypass.hasPermission(sender, false)) { - plugin.msg(tPlayer, lm.RandomTeleport_TeleportStarted, loc.getX(), loc.getY(), loc - .getZ(), plugin.getConfigManager().getTeleportDelay()); - plugin.getTeleportDelayMap().add(tPlayer.getName()); - plugin.getRandomTpManager().performDelaydTp(loc, tPlayer); - } else - plugin.getRandomTpManager().performInstantTp(loc, tPlayer); + return null; + }); return true; } diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 195d7dfad..612a74ec7 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -1,8 +1,10 @@ package com.bekvon.bukkit.residence.utils; import java.util.Random; +import java.util.concurrent.CompletableFuture; import org.bukkit.Bukkit; +import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -16,6 +18,11 @@ import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import net.Zrips.CMILib.Container.CMIWorld; +import net.Zrips.CMILib.Version.Version; +import net.Zrips.CMILib.Version.PaperMethods.BlockStateSnapshotResult; +import net.Zrips.CMILib.Version.PaperMethods.PaperLib; + public class RandomTp { static int miny = 63; @@ -133,6 +140,177 @@ public Location getRandomlocation(World world) { return loc; } + Random randomX = new Random(System.currentTimeMillis()); + Random randomZ = new Random(System.nanoTime()); + + public CompletableFuture getRandomlocationAsync(World world) { + return CompletableFuture.supplyAsync(() -> {return get(world);}); + } + + private Location get(World world) { + + if (world == null) + return null; + + boolean ok = false; + double x = 0; + double z = 0; + + int tries = 0; + + RandomTeleport rtloc = null; + + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + + if (!one.getCenter().getWorld().equals(world)) + continue; + + rtloc = one; + break; + } + + if (rtloc == null) + return null; + + int inerrange = rtloc.getMinCord(); + int outerrange = rtloc.getMaxCord(); + if (outerrange < 1) + outerrange = 1; + int maxtries = plugin.getConfigManager().getrtMaxTries(); + + int centerX = rtloc.getCenter().getBlockX(); + int centerY = rtloc.getCenter().getBlockZ(); + + Location loc = null; + + int max = rtloc.getCenter().getWorld().getMaxHeight(); + + c: while (!ok) { + tries++; + if (tries > maxtries) + return null; + + try { + x = randomX.nextInt(outerrange * 2) - outerrange + 0.5 + centerX; + + if (x > inerrange * -1 && x < inerrange) + continue; + + z = randomZ.nextInt(outerrange * 2) - outerrange + 0.5 + centerY; + if (z > inerrange * -1 && z < inerrange) + continue; + + loc = new Location(world, x, world.getMaxHeight(), z); + + loc = getDownLocationSimple(loc); + + if (loc == null) { + continue; + } + + if (loc.getY() < CMIWorld.getMinHeight(loc.getWorld()) + 4) { + if (loc.getWorld().getEnvironment().equals(Environment.NETHER)) { + loc.setY(CMIWorld.getMaxHeight(loc.getWorld()) / 2); + } else { + if (Version.isPaper()) { + CompletableFuture chunkFuture = PaperLib.getChunkAtAsync(loc, true); + Chunk chunk = chunkFuture.get(); + int y = chunk.getChunkSnapshot().getHighestBlockYAt(loc.getBlockX() & 0xF, loc.getBlockZ() & 0xF) - 1; + loc.setY(y); + } else { + loc.setY(loc.getWorld().getHighestBlockYAt(loc)); + } + } + } + + if (loc.getWorld().getEnvironment().equals(Environment.NETHER)) { + if (loc.getY() > 128) + continue; + } +// +// +// for (int i = max; i > 0; i--) { +// loc.setY(i); +// Block block = loc.getBlock(); +// Block block2 = loc.clone().add(0, 1, 0).getBlock(); +// Block block3 = loc.clone().add(0, -1, 0).getBlock(); +// if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2)) { +// break; +// } +// if (i <= 3) { +// loc = null; +// continue c; +// } +// } + + if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.LAVA)) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.WATER)) + continue; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + + if (res != null) + continue; + + loc.setY(loc.getY() + 2); + break; + + } catch (Exception | Error e) { +// e.printStackTrace(); + } + } + + if (loc != null) { + int dir = randomZ.nextInt(359); + loc.setYaw(dir); + } + + return loc; + } + + public Location getDownLocationSimple(Location oloc) { + try { + if (oloc == null) + return oloc; + Location loc = oloc.clone(); + + loc.setY(loc.getBlockY()); + + if (!oloc.getWorld().getEnvironment().equals(Environment.NETHER)) { + if (Version.isPaper()) { + CompletableFuture chunkFuture = PaperLib.getChunkAtAsync(loc, true); + Chunk chunk = chunkFuture.get(); + int y = chunk.getChunkSnapshot().getHighestBlockYAt(loc.getBlockX() & 0xF, loc.getBlockZ() & 0xF) - 1; + + if (loc.getY() < y) { + return null; + } + loc.setY(y); + } else { + int y = loc.getWorld().getHighestBlockYAt(loc); + if (loc.getY() < y) { + return null; + } + loc.setY(y); + } + if (oloc.getWorld().getEnvironment().equals(Environment.THE_END) && loc.getY() < 5) + return null; + return loc.add(0, 1, 0); + } + + return null; + + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public void performDelaydTp(final Location loc, final Player targetPlayer) { Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override From a4f81070d304bb5d58f44ea84ae55e253c15c05b Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jul 2021 17:13:39 +0300 Subject: [PATCH 0893/1142] Fixing enderpearl teleportation into residence with move false --- .../bekvon/bukkit/residence/commands/rt.java | 19 +++++++------ .../listeners/ResidencePlayerListener.java | 8 +++--- .../bukkit/residence/utils/RandomTp.java | 27 ++++--------------- 3 files changed, 18 insertions(+), 36 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 9e6ec583d..74b3406d2 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -115,16 +115,15 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (plugin.getConfigManager().getTeleportDelay() > 0 && !resadmin && !ResPerm.randomtp_delaybypass.hasPermission(sender, false)) { - plugin.msg(player, lm.RandomTeleport_TeleportStarted, lc.getX(), lc.getY(), lc.getZ(), plugin.getConfigManager().getTeleportDelay()); - plugin.getTeleportDelayMap().add(player.getName()); - plugin.getRandomTpManager().performDelaydTp(lc, player); - } else - plugin.getRandomTpManager().performInstantTp(lc, player); - } + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { + + if (plugin.getConfigManager().getTeleportDelay() > 0 && !resadmin && !ResPerm.randomtp_delaybypass.hasPermission(sender, false)) { + plugin.msg(player, lm.RandomTeleport_TeleportStarted, lc.getX(), lc.getY(), lc.getZ(), plugin.getConfigManager().getTeleportDelay()); + plugin.getTeleportDelayMap().add(player.getName()); + plugin.getRandomTpManager().performDelaydTp(lc, player); + } else + plugin.getRandomTpManager().performInstantTp(lc, player); + }, 1); CMIDebug.d(lc.toVector().toString()); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index a7f268797..92eec78d4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1614,7 +1614,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = resPlayer.getGroup(); - if (!plugin.getItemManager().isAllowed(heldItem, group, world)) { + if (!plugin.getItemManager().isAllowed(heldItem, group, world)) { plugin.msg(player, lm.General_ItemBlacklisted); event.setCancelled(true); return; @@ -1631,7 +1631,7 @@ public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { // disabling event on world - CMIDebug.d("PlayerBucketEmptyEvent"); + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; Player player = event.getPlayer(); @@ -1739,7 +1739,8 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { plugin.msg(player, lm.Residence_MoveDeny, res.getName()); return; } - } else if (event.getCause() == TeleportCause.ENDER_PEARL && res.getPermissions().playerHas(player, Flags.enderpearl, FlagCombo.OnlyFalse)) { + } else if (event.getCause() == TeleportCause.ENDER_PEARL && (res.getPermissions().playerHas(player, Flags.enderpearl, FlagCombo.OnlyFalse) || res.getPermissions().playerHas(player, Flags.move, + FlagCombo.OnlyFalse))) { event.setCancelled(true); plugin.msg(player, lm.Residence_FlagDeny, Flags.enderpearl, res.getName()); return; @@ -2184,7 +2185,6 @@ public void run() { } if (move) { - if (res.getRaid().isUnderRaid()) { if (res.getRaid().isAttacker(player.getUniqueId()) || res.getRaid().isDefender(player.getUniqueId())) { return true; diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 612a74ec7..43a13ab61 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -42,6 +42,7 @@ public boolean isDefinedRnadomTp(World world) { return false; } + @Deprecated public Location getRandomlocation(World world) { if (world == null) @@ -144,13 +145,13 @@ public Location getRandomlocation(World world) { Random randomZ = new Random(System.nanoTime()); public CompletableFuture getRandomlocationAsync(World world) { - return CompletableFuture.supplyAsync(() -> {return get(world);}); + return CompletableFuture.supplyAsync(() -> get(world)); } private Location get(World world) { if (world == null) - return null; + return null; boolean ok = false; double x = 0; @@ -183,9 +184,7 @@ private Location get(World world) { Location loc = null; - int max = rtloc.getCenter().getWorld().getMaxHeight(); - - c: while (!ok) { + while (!ok) { tries++; if (tries > maxtries) return null; @@ -227,21 +226,6 @@ private Location get(World world) { if (loc.getY() > 128) continue; } -// -// -// for (int i = max; i > 0; i--) { -// loc.setY(i); -// Block block = loc.getBlock(); -// Block block2 = loc.clone().add(0, 1, 0).getBlock(); -// Block block3 = loc.clone().add(0, -1, 0).getBlock(); -// if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2)) { -// break; -// } -// if (i <= 3) { -// loc = null; -// continue c; -// } -// } if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) continue; @@ -261,7 +245,6 @@ private Location get(World world) { break; } catch (Exception | Error e) { -// e.printStackTrace(); } } @@ -273,7 +256,7 @@ private Location get(World world) { return loc; } - public Location getDownLocationSimple(Location oloc) { + private static Location getDownLocationSimple(Location oloc) { try { if (oloc == null) return oloc; From 12ee1c0802fde3a1cff28f0fbc639bb980deb9bc Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Jul 2021 17:22:43 +0300 Subject: [PATCH 0894/1142] Recognizing shulker as mob --- .../residence/listeners/ResidenceEntityListener.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 83a2edea5..11e1281a5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -73,6 +73,7 @@ import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceEntityListener implements Listener { @@ -119,7 +120,7 @@ public void onEntityInteract(EntityInteractEvent event) { } public static boolean isMonster(Entity ent) { - return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast); + return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast || Version.isCurrentEqualOrHigher(Version.v1_11_R1) && ent instanceof org.bukkit.entity.Shulker); } private static boolean isTamed(Entity ent) { @@ -368,6 +369,7 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { return; if (plugin.isDisabledWorldListener(entity.getWorld())) return; + if (!isMonster(entity)) return; @@ -1677,9 +1679,9 @@ public void onPlayerInteractAtFish(PlayerInteractEntityEvent event) { ItemStack iih = CMIItemStack.getItemInMainHand(player); if (iih == null) return; - + if (!CMIMaterial.get(iih).equals(CMIMaterial.WATER_BUCKET)) - return; + return; FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); From 6e6a8fddf61f0c85d402f9bbcbaf97db3b06e0b6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 29 Jul 2021 15:26:35 +0300 Subject: [PATCH 0895/1142] Preventing player from bugging into residence with move false flag --- .../listeners/ResidencePlayerListener.java | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 92eec78d4..9e24d9ce9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1731,6 +1731,17 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res == null) return; + +// if (event.getCause() == TeleportCause.UNKNOWN) { +// if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) +// && !ResPerm.bypass_tp.hasPermission(player, 10000L) && !ResPerm.admin_move.hasPermission(player, 10000L)) { +// event.setCancelled(true); +// Location newLoc = res.getOutsideFreeLoc(loc, player); +// player.teleport(newLoc); +// plugin.msg(player, lm.Residence_MoveDeny, res.getName()); +// return; +// } +// } else if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) @@ -2106,6 +2117,7 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move UUID uuid = player.getUniqueId(); ClaimedResidence ResOld = currentRes.get(uuid); + if (ResOld == null) { currentRes.remove(uuid); } else { @@ -2336,10 +2348,26 @@ public void run() { } } - lastOutsideLoc.put(uuid, loc); + boolean cantMove = res != null && Flags.move.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) + && !ResPerm.admin_move.hasPermission(player, 10000L); + + if (!cantMove) { + lastOutsideLoc.put(uuid, loc); + } if (!currentRes.containsKey(uuid) || ResOld != res) { - currentRes.put(uuid, res); + + if (cantMove) { + Location lastLoc = lastOutsideLoc.get(uuid); + player.closeInventory(); + if (lastLoc != null && CMIMaterial.isAir(lastLoc.getBlock().getType())) + teleport(player, lastLoc); + else + teleport(player, res.getOutsideFreeLoc(loc, player)); + return false; + } else { + currentRes.put(uuid, res); + } // New ResidenceChangedEvent ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, res, player); From d04158af0179b00aa8d966b67fed2d382a210dbb Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 4 Aug 2021 14:39:50 +0300 Subject: [PATCH 0896/1142] Fix for MMOItems compatibility --- .../bukkit/residence/listeners/ResidenceEntityListener.java | 3 ++- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 11e1281a5..c9ed19c72 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -139,11 +139,12 @@ private static boolean damageableProjectile(Entity ent) { } } } - return ent instanceof Arrow || ent.getType().toString().equalsIgnoreCase("Trident") || ent.getType().toString().equalsIgnoreCase("Spectral_Arrow"); + return ent instanceof Projectile || ent.getType().toString().equalsIgnoreCase("Trident") || ent.getType().toString().equalsIgnoreCase("Spectral_Arrow"); } @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(EntityDamageEvent event) { + // Disabling listener if flag disabled globally if (!Flags.animalkilling.isGlobalyEnabled()) return; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 529a4b158..8bdca8d1a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1105,7 +1105,7 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { found = true; loc.add(0.5, 0.1, 0.5); - // Incase empty space is on oposite side + // In case empty space is on opposite side if (Residence.getInstance().getResidenceManager().getByLoc(loc) == this) { loc.add(-1, 0, -1); } From 830590666c7ea783487c6fbe7a562ca5bb760e60 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 5 Aug 2021 12:36:26 +0300 Subject: [PATCH 0897/1142] Preventing endercrystal spawning inside residence without place flag --- .../listeners/ResidenceEntityListener.java | 6 ++ .../listeners/ResidencePlayerListener.java | 79 +++++++++++++++---- 2 files changed, 70 insertions(+), 15 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index c9ed19c72..ea81b741e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -41,6 +41,7 @@ import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityInteractEvent; import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.PlayerLeashEntityEvent; import org.bukkit.event.entity.PotionSplashEvent; @@ -99,6 +100,11 @@ public void onEndermanChangeBlock(EntityChangeBlockEvent event) { } } + @EventHandler(priority = EventPriority.LOWEST) + public void onEntityInteract(EntitySpawnEvent event) { + + } + @EventHandler(priority = EventPriority.LOWEST) public void onEntityInteract(EntityInteractEvent event) { // Disabling listener if flag disabled globally diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9e24d9ce9..92f54c0ab 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -50,6 +50,7 @@ import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.event.vehicle.VehicleMoveEvent; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import com.bekvon.bukkit.residence.ConfigManager; @@ -81,6 +82,7 @@ import net.Zrips.CMILib.ActionBar.CMIActionBar; import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Entities.CMIEntity; +import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; @@ -699,10 +701,8 @@ public void onSignInteract(PlayerInteractEvent event) { } return; } - } else if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - if (ForRent && res.isRented() && plugin.getRentManager().getRentingPlayer(res).equals(player.getName())) { - plugin.getRentManager().payRent(player, res, false); - } + } else if (event.getAction() == Action.LEFT_CLICK_BLOCK && ForRent && res.isRented() && plugin.getRentManager().getRentingPlayer(res).equals(player.getName())) { + plugin.getRentManager().payRent(player, res, false); } } @@ -1010,6 +1010,58 @@ private boolean isCanUseEntity(Material mat, Block block) { return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onPlayerEnderCrystalInteract(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + Block block = event.getClickedBlock(); + + if (block == null) + return; + + if (block.getType() != Material.BEDROCK) + return; + + Player player = event.getPlayer(); + + ItemStack iih = null; + + try { + if (event.getHand() == EquipmentSlot.HAND) + iih = CMIItemStack.getItemInMainHand(player); + else + iih = CMIItemStack.getItemInOffHand(player); + } catch (Throwable e) { + iih = CMIItemStack.getItemInMainHand(player); + } + + if (iih == null) + return; + + if (!iih.getType().toString().equals("END_CRYSTAL")) + return; + + if (player.hasMetadata("NPC")) + return; + if (plugin.isResAdminOn(player)) + return; + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + + boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); + if (hasplace) + return; + + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.build); + return; + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerFireInteract(PlayerInteractEvent event) { if (event.getPlayer() == null) @@ -1915,13 +1967,11 @@ private void checkSpecialFlags(Player player, ClaimedResidence newRes, ClaimedRe } if (newRes != null && oldRes != null && !newRes.equals(oldRes)) { - if (Flags.glow.isGlobalyEnabled()) { - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) { - if (newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(true); - else if (oldRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(false); - } + if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) { + if (newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(true); + else if (oldRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(false); } if (Flags.fly.isGlobalyEnabled()) { @@ -2180,7 +2230,6 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move @Override public void run() { plugin.getAutoSelectionManager().UpdateSelection(player); - return; } }); } @@ -2357,13 +2406,13 @@ public void run() { if (!currentRes.containsKey(uuid) || ResOld != res) { - if (cantMove) { + if (cantMove) { Location lastLoc = lastOutsideLoc.get(uuid); player.closeInventory(); if (lastLoc != null && CMIMaterial.isAir(lastLoc.getBlock().getType())) - teleport(player, lastLoc); + teleport(player, lastLoc); else - teleport(player, res.getOutsideFreeLoc(loc, player)); + teleport(player, res.getOutsideFreeLoc(loc, player)); return false; } else { currentRes.put(uuid, res); From 7ceef87e90215cd74e3d453af90206e35ae23d8f Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 5 Aug 2021 15:55:48 +0300 Subject: [PATCH 0898/1142] Pl3xMap support --- .../bukkit/residence/ConfigManager.java | 75 +++- .../bekvon/bukkit/residence/Residence.java | 38 +- .../residence/pl3xmap/Pl3xMapListeners.java | 74 ++++ .../residence/pl3xmap/Pl3xMapManager.java | 331 ++++++++++++++++++ src/plugin.yml | 2 +- 5 files changed, 506 insertions(+), 14 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapListeners.java create mode 100644 src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 42128f03f..924b38b0f 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence; +import java.awt.Color; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; @@ -267,6 +268,26 @@ public class ConfigManager { public List DynMapHiddenRegions; // DynMap + // Pl3xMap + public boolean Pl3xMapHideByDefault; + public boolean Pl3xMapUse; + + public boolean Pl3xMapShowFlags; + public boolean Pl3xMapExcludeDefaultFlags; + public boolean Pl3xMapHideHidden; + public int Pl3xMapLayerSubZoneDepth; + public Color Pl3xMapBorderColor = new Color(125, 125, 125); + public double Pl3xMapBorderOpacity; + public int Pl3xMapBorderWeight; + public Color Pl3xMapFillColor = new Color(125, 125, 125); + public double Pl3xMapFillOpacity; + public Color Pl3xMapFillForRent = new Color(125, 125, 125); + public Color Pl3xMapFillRented = new Color(125, 125, 125); + public Color Pl3xMapFillForSale = new Color(125, 125, 125); + public List Pl3xMapVisibleRegions; + public List Pl3xMapHiddenRegions; + // Pl3xMap + // Raid public static boolean RaidEnabled = false; public static boolean RaidAttackerBlockBreak = false; @@ -640,7 +661,7 @@ public void UpdateConfigFile() { c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Enabled", "When enabled we will try to create region by defined bounds"); ARCSizeEnabled = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Enabled", false); - + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Percentage", "Value between 1 and 100 which will define size of residence we will create in percentage depending on players permission group"); ARCSizePercentage = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Percentage", 50); @@ -1312,6 +1333,44 @@ public void UpdateConfigFile() { c.addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden in game"); DynMapHiddenRegions = c.get("DynMap.HiddenRegions", new ArrayList()); + c.addComment("Pl3xMap.Use", "Enables or disable Pl3xMap Support"); + Pl3xMapUse = c.get("Pl3xMap.Use", false); + c.addComment("Pl3xMap.HideByDefault", "When set to true we will hide residence areas by default on Pl3xMap window", + "Residences can still be enabled throw provided Pl3xMap option on left top side"); + Pl3xMapHideByDefault = c.get("Pl3xMap.HideByDefault", false); + c.addComment("Pl3xMap.ShowFlags", "Shows or hides residence flags"); + Pl3xMapShowFlags = c.get("Pl3xMap.ShowFlags", true); + c.addComment("Pl3xMap.ExcludeDefaultFlags", "When enabled default flags will not be included in residence overview"); + Pl3xMapExcludeDefaultFlags = c.get("Pl3xMap.ExcludeDefaultFlags", true); + c.addComment("Pl3xMap.HideHidden", "If set true, residence with hidden flag set to true will be hidden from Pl3xMap"); + Pl3xMapHideHidden = c.get("Pl3xMap.HideHidden", true); + +// c.addComment("Pl3xMap.Layer.3dRegions", "Enables 3D zones"); +// Pl3xMapLayer3dRegions = c.get("Pl3xMap.Layer.3dRegions", true); + c.addComment("Pl3xMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); + Pl3xMapLayerSubZoneDepth = c.get("Pl3xMap.Layer.SubZoneDepth", 2); + + c.addComment("Pl3xMap.Border.Color", "Color of border. Pick color from this page http://www.w3schools.com/colors/colors_picker.asp"); + + Pl3xMapFillColor = processColor(c.get("Pl3xMap.Border.Color", "#FF0000")); + + c.addComment("Pl3xMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); + Pl3xMapBorderOpacity = c.get("Pl3xMap.Border.Opacity", 0.3); + c.addComment("Pl3xMap.Border.Weight", "Border thickness"); + Pl3xMapBorderWeight = c.get("Pl3xMap.Border.Weight", 3); + Pl3xMapFillOpacity = c.get("Pl3xMap.Fill.Opacity", 0.3); + + Pl3xMapFillColor = processColor(c.get("Pl3xMap.Fill.Color", "#FF0000")); + + Pl3xMapFillForRent = processColor(c.get("Pl3xMap.Fill.ForRent", "#33cc33")); + Pl3xMapFillRented = processColor(c.get("Pl3xMap.Fill.Rented", "#99ff33")); + Pl3xMapFillForSale = processColor(c.get("Pl3xMap.Fill.ForSale", "#0066ff")); + + c.addComment("Pl3xMap.VisibleRegions", "Shows only regions on this list"); + Pl3xMapVisibleRegions = c.get("Pl3xMap.VisibleRegions", new ArrayList()); + c.addComment("Pl3xMap.HiddenRegions", "Hides region on map even if its not hidden in game"); + Pl3xMapHiddenRegions = c.get("Pl3xMap.HiddenRegions", new ArrayList()); + c.addComment("Raid", "In development"); c.addComment("Raid.Enabled", "Determines if you want to enable raid feature for your server", @@ -1349,6 +1408,20 @@ public void UpdateConfigFile() { c.save(); } + private Color processColor(String cls) { + try { + if (cls.startsWith("#")) { + cls = cls.substring(1); + cls = CMIChatColor.colorCodePrefix + cls + CMIChatColor.colorCodeSuffix; + } + CMIChatColor col = CMIChatColor.getColor(cls); + if (col != null && col.getJavaColor() != null) + return col.getJavaColor(); + } catch (Throwable e) { + } + return new Color(125, 125, 125); + } + public void loadFlags() { FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index eb74bbf69..f9966a116 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -85,6 +85,8 @@ import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; +import com.bekvon.bukkit.residence.pl3xmap.Pl3xMapListeners; +import com.bekvon.bukkit.residence.pl3xmap.Pl3xMapManager; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; @@ -158,7 +160,6 @@ public class Residence extends JavaPlugin { protected ResidenceCommandListener commandManager; - protected SpigotListener spigotlistener; protected ShopListener shlistener; protected TransactionManager tmanager; @@ -178,6 +179,7 @@ public class Residence extends JavaPlugin { // private TownManager townManager; protected RandomTp RandomTpManager; protected DynMapManager DynManager; + protected Pl3xMapManager Pl3xManager; protected Sorting SortingManager; protected AutoSelection AutoSelectionManager; protected WESchematicManager SchematicManager; @@ -357,7 +359,6 @@ public void run() { } catch (IOException e) { e.printStackTrace(); } - return; } }); } @@ -475,11 +476,9 @@ public void onEnable() { String multiworld = getConfigManager().getMultiworldPlugin(); if (multiworld != null) { Plugin plugin = server.getPluginManager().getPlugin(multiworld); - if (plugin != null) { - if (!plugin.isEnabled()) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Enabling multiworld plugin: " + multiworld); - server.getPluginManager().enablePlugin(plugin); - } + if (plugin != null && !plugin.isEnabled()) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Enabling multiworld plugin: " + multiworld); + server.getPluginManager().enablePlugin(plugin); } } @@ -766,6 +765,19 @@ public void run() { e.printStackTrace(); } + try { + // Pl3xMap + Plugin pl3xmap = Bukkit.getPluginManager().getPlugin("Pl3xMap"); + if (pl3xmap != null && getConfigManager().Pl3xMapUse) { + Pl3xManager = new Pl3xMapManager(this); + getServer().getPluginManager().registerEvents(new Pl3xMapListeners(this), this); + getPl3xManager().api = net.pl3x.map.api.Pl3xMapProvider.get(); + getPl3xManager().activate(); + } + } catch (Throwable e) { + e.printStackTrace(); + } + int autosaveInt = getConfigManager().getAutoSaveInterval(); if (autosaveInt < 1) { autosaveInt = 1; @@ -819,8 +831,7 @@ public void run() { getShopSignUtilManager().LoadShopVotes(); getShopSignUtilManager().LoadSigns(); getShopSignUtilManager().BoardUpdate(); - - + CMIVersionChecker.VersionCheck(null, 11480, this.getDescription()); } @@ -970,7 +981,6 @@ public Residence getPlugin() { return this; } - // public LWC getLwc() { // return lwc; // } @@ -1023,6 +1033,10 @@ public DynMapManager getDynManager() { return DynManager; } + public Pl3xMapManager getPl3xManager() { + return Pl3xManager; + } + public WESchematicManager getSchematicManager() { return SchematicManager; } @@ -1799,12 +1813,12 @@ public String getServerLandName() { public String getServerLandUUID() { return ServerLandUUID.toString(); } - + @Deprecated public String getTempUserUUID() { return TempUserUUID.toString(); } - + public UUID getServerUUID() { return ServerLandUUID; } diff --git a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapListeners.java b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapListeners.java new file mode 100644 index 000000000..a96d7c29c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapListeners.java @@ -0,0 +1,74 @@ +package com.bekvon.bukkit.residence.pl3xmap; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.event.ResidenceAreaAddEvent; +import com.bekvon.bukkit.residence.event.ResidenceAreaDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceDeleteEvent; +import com.bekvon.bukkit.residence.event.ResidenceFlagChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceOwnerChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceRenameEvent; +import com.bekvon.bukkit.residence.event.ResidenceRentEvent; +import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; +import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; + +import net.Zrips.CMILib.Logs.CMIDebug; + +public class Pl3xMapListeners implements Listener { + + private Residence plugin; + + public Pl3xMapListeners(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceAreaAdd(ResidenceAreaAddEvent event) { + plugin.getPl3xManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceAreaDelete(ResidenceAreaDeleteEvent event) { + plugin.getPl3xManager().fireUpdateRemove(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceSubZoneCreate(ResidenceSubzoneCreationEvent event) { + plugin.getPl3xManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceFlagChange(ResidenceFlagChangeEvent event) { + plugin.getPl3xManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceDelete(ResidenceDeleteEvent event) { + plugin.getPl3xManager().fireUpdateRemove(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceOwnerChange(ResidenceOwnerChangeEvent event) { + plugin.getPl3xManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceRename(ResidenceRenameEvent event) { + plugin.getPl3xManager().handleResidenceRemove(event.getOldResidenceName(), event.getResidence(), event.getResidence().getSubzoneDeep()); + plugin.getPl3xManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceRent(ResidenceRentEvent event) { + plugin.getPl3xManager().handleResidenceRemove(event.getResidence().getName(), event.getResidence(), event.getResidence().getSubzoneDeep()); + plugin.getPl3xManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onResidenceSizeChange(ResidenceSizeChangeEvent event) { + plugin.getPl3xManager().fireUpdateAdd(event.getResidence(), event.getResidence().getSubzoneDeep()); + } +} diff --git a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java new file mode 100644 index 000000000..e04deaab7 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java @@ -0,0 +1,331 @@ +package com.bekvon.bukkit.residence.pl3xmap; + +import java.awt.Color; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.economy.TransactionManager; +import com.bekvon.bukkit.residence.economy.rent.RentManager; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.ResidencePermissions; +import com.bekvon.bukkit.residence.utils.GetTime; + +import net.Zrips.CMILib.Colors.CMIChatColor; +import net.pl3x.map.api.Key; +import net.pl3x.map.api.LayerProvider; +import net.pl3x.map.api.MapWorld; +import net.pl3x.map.api.Pl3xMap; +import net.pl3x.map.api.Point; +import net.pl3x.map.api.Registry; +import net.pl3x.map.api.SimpleLayerProvider; +import net.pl3x.map.api.marker.Marker; +import net.pl3x.map.api.marker.MarkerOptions; +import net.pl3x.map.api.marker.MarkerOptions.FillRule; +import net.pl3x.map.api.marker.Rectangle; + +public class Pl3xMapManager { + Residence plugin; + + public Pl3xMap api; + + private int schedId = -1; +// SimpleLayerProvider provider = null; + HashMap providers = new HashMap(); + + public Pl3xMapManager(Residence plugin) { + this.plugin = plugin; + } + + public void fireUpdateAdd(final ClaimedResidence res, final int deep) { + if (api == null) + return; + if (res == null) + return; + + if (schedId != -1) + Bukkit.getServer().getScheduler().cancelTask(schedId); + + schedId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + schedId = -1; + + handleResidenceAdd(res.getName(), res, deep); + return; + } + }, 10L); + } + + public void fireUpdateRemove(final ClaimedResidence res, final int deep) { + if (api == null) + return; + if (res == null) + return; + + handleResidenceRemove(res.getName(), res, deep); + } + + private String formatInfoWindow(String resid, ClaimedResidence res, String resName) { + if (res == null) + return null; + if (res.getName() == null) + return null; + if (res.getOwner() == null) + return null; + String v = + "
%regionname%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
"; + + if (plugin.getConfigManager().Pl3xMapShowFlags) { + + ResidencePermissions residencePermissions = res.getPermissions(); + FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); + + StringBuilder flgs = new StringBuilder(); + for (Entry one : residencePermissions.getFlags().entrySet()) { + if (Residence.getInstance().getConfigManager().Pl3xMapExcludeDefaultFlags && gRD.isSet(one.getKey()) && gRD.getFlags().get(one.getKey()).equals(one.getValue())) { + continue; + } + if (!flgs.toString().isEmpty()) + flgs.append("
"); + flgs.append(one.getKey() + ": " + one.getValue()); + } + + if (!flgs.toString().isEmpty()) { + v += CMIChatColor.stripColor(plugin.msg(lm.General_ResidenceFlags, "")) + "
%flags%"; + v = v.replace("%flags%", flgs.toString()); + } + } + + v += "
"; + + if (plugin.getRentManager().isForRent(res.getName())) + v = "
" + + CMIChatColor.stripColor(plugin.msg(lm.Rentable_Land, "")) + "%regionname%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" + + CMIChatColor.stripColor(plugin.msg(lm.Residence_RentedBy, "")) + "%renter%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_LandCost, "")) + "%rent%
" + + CMIChatColor.stripColor(plugin.msg(lm.Rent_Days, "")) + "%rentdays%
" + + CMIChatColor.stripColor(plugin.msg(lm.Rentable_AllowRenewing, "")) + "%renew%
" + + CMIChatColor.stripColor(plugin.msg(lm.Rent_Expire, "")) + "%expire%
"; + + if (plugin.getTransactionManager().isForSale(res.getName())) + v = "
" + + CMIChatColor.stripColor(plugin.msg(lm.Economy_LandForSale, " ")) + + "%regionname%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" + + CMIChatColor.stripColor(plugin.msg(lm.Economy_SellAmount, "")) + "%price%
"; + + v = v.replace("%regionname%", resName); + v = v.replace("%playerowners%", res.getOwner()); + String m = res.getEnterMessage(); + v = v.replace("%entermsg%", (m != null) ? m : ""); + m = res.getLeaveMessage(); + v = v.replace("%leavemsg%", (m != null) ? m : ""); + + RentManager rentmgr = plugin.getRentManager(); + TransactionManager transmgr = plugin.getTransactionManager(); + + if (rentmgr.isForRent(res.getName())) { + boolean isrented = rentmgr.isRented(resid); + v = v.replace("%isrented%", Boolean.toString(isrented)); + String id = ""; + if (isrented) + id = rentmgr.getRentingPlayer(resid); + v = v.replace("%renter%", id); + + v = v.replace("%rent%", rentmgr.getCostOfRent(resid) + ""); + v = v.replace("%rentdays%", rentmgr.getRentDays(resid) + ""); + boolean renew = rentmgr.getRentableRepeatable(resid); + v = v.replace("%renew%", renew + ""); + String expire = ""; + if (isrented) { + long time = rentmgr.getRentedLand(resid).endTime; + if (time != 0L) + expire = GetTime.getTime(time); + } + v = v.replace("%expire%", expire); + } + + if (transmgr.isForSale(res.getName())) { + boolean forsale = transmgr.isForSale(resid); + v = v.replace("%isforsale%", Boolean.toString(transmgr.isForSale(resid))); + String price = ""; + if (forsale) + price = Integer.toString(transmgr.getSaleAmount(resid)); + v = v.replace("%price%", price); + } + + return v; + } + + private boolean isVisible(String id, String worldname) { + List visible = plugin.getConfigManager().Pl3xMapVisibleRegions; + List hidden = plugin.getConfigManager().Pl3xMapHiddenRegions; + if (visible != null && visible.size() > 0) { + if ((visible.contains(id) == false) && (visible.contains("world:" + worldname) == false)) { + return false; + } + } + if (hidden != null && hidden.size() > 0) { + if (hidden.contains(id) || hidden.contains("world:" + worldname)) + return false; + } + return true; + } + + private Color fillColor(String resid) { + if (plugin.getRentManager().isForRent(resid) && !plugin.getRentManager().isRented(resid)) + return plugin.getConfigManager().Pl3xMapFillForRent; + else if (plugin.getRentManager().isForRent(resid) && plugin.getRentManager().isRented(resid)) + return plugin.getConfigManager().Pl3xMapFillRented; + else if (plugin.getTransactionManager().isForSale(resid)) + return plugin.getConfigManager().Pl3xMapFillForSale; + return plugin.getConfigManager().Pl3xMapFillColor; + } + + private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { + + if (res == null) + return; + + boolean hidden = res.getPermissions().has("hidden", false); + if (hidden && plugin.getConfigManager().Pl3xMapHideHidden) { + fireUpdateRemove(res, depth); + return; + } + + World world = Bukkit.getWorld(res.getPermissions().getWorldName()); + + MapWorld mWorld = api.getWorldIfEnabled(world).orElse(null); + + Registry registry = mWorld.layerRegistry(); + SimpleLayerProvider provider = providers.get(res.getPermissions().getWorldName()); + if (registry.hasEntry(Key.of("Residence"))) { + provider = (SimpleLayerProvider) registry.get(Key.of("Residence")); + providers.put(res.getPermissions().getWorldName(), provider); + } + + if (provider == null) { + api.getWorldIfEnabled(world).ifPresent(mapWorld -> { + Key key = Key.of("Residence"); + SimpleLayerProvider prov = SimpleLayerProvider + .builder("Residence") + .showControls(true) + .defaultHidden(false) + .layerPriority(4) + .zIndex(63) + .build(); + mapWorld.layerRegistry().register(key, prov); + providers.put(res.getPermissions().getWorldName(), prov); + }); + } + + provider = providers.get(res.getPermissions().getWorldName()); + + if (provider == null) { + return; + } + + for (Entry oneArea : res.getAreaMap().entrySet()) { + + String id = oneArea.getKey() + "." + resid; + Key key = Key.of(id); + + String resName = res.getName(); + + if (res.getAreaMap().size() > 1) { + resName = res.getName() + " (" + oneArea.getKey() + ")"; + } + + String desc = formatInfoWindow(resid, res, resName); + + if (!isVisible(resid, res.getPermissions().getWorldName())) + return; + + Location l0 = oneArea.getValue().getLowLocation(); + Location l1 = oneArea.getValue().getHighLocation(); + + Point p1 = Point.of(l0.getX(), l0.getZ()); + Point p2 = Point.of(l1.getX() + 1, l1.getZ() + 1); + + Rectangle marker = Marker.rectangle(p1, p2); + + MarkerOptions options = MarkerOptions.builder().fillRule(FillRule.NONZERO).hoverTooltip(desc) + .fillColor(fillColor(resid)) + .strokeColor(plugin.getConfigManager().Pl3xMapBorderColor) + .fillOpacity(plugin.getConfigManager().Pl3xMapFillOpacity) + .strokeOpacity(plugin.getConfigManager().Pl3xMapBorderOpacity) + .strokeWeight(plugin.getConfigManager().Pl3xMapBorderWeight) + .build(); + + marker.markerOptions(options); + provider.addMarker(key, marker); + + if (depth <= plugin.getConfigManager().Pl3xMapLayerSubZoneDepth) { + List subids = res.getSubzones(); + for (ClaimedResidence one : subids) { + handleResidenceAdd(one.getName(), one, depth + 1); + } + } + } + } + + public void handleResidenceRemove(String resid, ClaimedResidence res, int depth) { + + if (resid == null) + return; + if (res == null) + return; + + World world = Bukkit.getWorld(res.getPermissions().getWorldName()); + + MapWorld mWorld = api.getWorldIfEnabled(world).orElse(null); + + Registry registry = mWorld.layerRegistry(); + SimpleLayerProvider provider = providers.get(res.getPermissions().getWorldName()); + if (registry.hasEntry(Key.of("Residence"))) { + provider = (SimpleLayerProvider) registry.get(Key.of("Residence")); + providers.put(res.getPermissions().getWorldName(), provider); + } + + if (provider == null) { + return; + } + + for (Entry oneArea : res.getAreaMap().entrySet()) { + + String id = oneArea.getKey() + "." + resid; + + Key key = Key.of(id); + + provider.removeMarker(key); + + if (depth <= plugin.getConfigManager().Pl3xMapLayerSubZoneDepth + 1) { + List subids = res.getSubzones(); + for (ClaimedResidence one : subids) { + handleResidenceRemove(one.getName(), one, depth + 1); + } + } + } + } + + public void activate() { + + Bukkit.getConsoleSender().sendMessage("[Residence] Pl3xMap residence activated!"); + + for (Entry one : plugin.getResidenceManager().getResidences().entrySet()) { + fireUpdateAdd(one.getValue(), one.getValue().getSubzoneDeep()); + handleResidenceAdd(one.getValue().getName(), one.getValue(), one.getValue().getSubzoneDeep()); + } + } +} diff --git a/src/plugin.yml b/src/plugin.yml index 3cfd6626d..8e342b83b 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -6,7 +6,7 @@ description: Cuboid Residence Plugin api-version: 1.13 authors: [bekvon,nate302,t00thpick1] depend: [CMILib] -softdepend: [Vault,Essentials,RealPlugin,iConomy,bPermissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI,ServerControlReloaded,Slimefun,CS-CoreLib] +softdepend: [Pl3xMap,Vault,Essentials,RealPlugin,iConomy,bPermissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI,ServerControlReloaded,Slimefun,CS-CoreLib] contributors: [lemon42,smbarbour,inorixu,Shayana_fr,Zrips] commands: res: From 40b44e2dd2cde18466692f5200b399a7db019a01 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 5 Aug 2021 16:12:47 +0300 Subject: [PATCH 0899/1142] Minimizing startup log --- src/com/bekvon/bukkit/residence/ConfigManager.java | 4 ++++ src/com/bekvon/bukkit/residence/Residence.java | 10 ++++------ .../bekvon/bukkit/residence/dynmap/DynMapManager.java | 8 +++++--- .../bukkit/residence/pl3xmap/Pl3xMapManager.java | 9 +++++---- .../bukkit/residence/protection/ResidenceManager.java | 2 +- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 924b38b0f..a1d23a9da 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -73,6 +73,7 @@ public class ConfigManager { protected boolean AutoCleanUpRegenerate; protected boolean CanTeleportIncludeOwner; private boolean LoadEveryWorld; + public boolean CleanerStartupLog; protected CMIMaterial selectionTool; protected boolean adminOps; protected boolean AdminFullAccess; @@ -629,6 +630,9 @@ public void UpdateConfigFile() { "Usually only useful when you have multiverse plugin which loads worlds durring server work time"); LoadEveryWorld = c.get("Global.Optimizations.LoadEveryWorld", false); + c.addComment("Global.Optimizations.CleanerStartupLog", "While enabled we will avoid showing extra feedback lines on startup"); + CleanerStartupLog = c.get("Global.Optimizations.CleanerStartupLog", true); + c.addComment("Global.Optimizations.CanTeleportIncludeOwner", "This will slightly change behavior of groups file CanTeleport section which will include server owner into check", "When this is set to false and CanTeleport set to false, players will not have option to teleport to other player residences, only to their own", "When this is set to true and CanTeleport set to false, players will not have option to teleport to residences in general", diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f9966a116..15c19bb95 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -897,9 +897,7 @@ public void parseHelpEntries() { private boolean setupPlaceHolderAPI() { if (!getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) return false; - if ((new PlaceholderAPIHook(this)).register()) - Bukkit.getConsoleSender().sendMessage(this.getPrefix() + " PlaceholderAPI hooked."); - return true; + return new PlaceholderAPIHook(this).register(); } public SignUtil getSignUtil() { @@ -946,7 +944,6 @@ private void setWorldEdit() { Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit " + this.getWorldEdit().getDescription().getVersion()); } else { smanager = new SelectionManager(server, this); - Bukkit.getConsoleSender().sendMessage(getPrefix() + " WorldEdit NOT found!"); } } catch (Exception | Error e) { e.printStackTrace(); @@ -1371,7 +1368,8 @@ protected boolean loadYml() throws Exception { loadFile = new File(worldFolder, saveFilePrefix + worldName + ".yml"); if (loadFile.isFile()) { time = System.currentTimeMillis(); - if (!isDisabledWorld(worldName)) + + if (!isDisabledWorld(worldName) && !this.getConfigManager().CleanerStartupLog) Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading save data for world " + worldName + "..."); yml = new YMLSaveHelper(loadFile); @@ -1420,7 +1418,7 @@ protected boolean loadYml() throws Exception { int pass = (int) (System.currentTimeMillis() - time); String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - if (!isDisabledWorld(worldName)) + if (!isDisabledWorld(worldName) && !this.getConfigManager().CleanerStartupLog) Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loaded " + worldName + " data. (" + PastTime + ")"); } } diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 3c0567541..04b52a711 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -13,6 +13,8 @@ import org.dynmap.markers.MarkerSet; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Messages.CMIMessages; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.TransactionManager; @@ -84,8 +86,8 @@ private String formatInfoWindow(String resid, ClaimedResidence res, String resNa ResidencePermissions residencePermissions = res.getPermissions(); FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); - - StringBuilder flgs = new StringBuilder(); + + StringBuilder flgs = new StringBuilder(); for (Entry one : residencePermissions.getFlags().entrySet()) { if (Residence.getInstance().getConfigManager().DynMapExcludeDefaultFlags && gRD.isSet(one.getKey()) && gRD.getFlags().get(one.getKey()).equals(one.getValue())) { continue; @@ -323,7 +325,7 @@ public void activate() { set.setLayerPriority(1); set.setHideByDefault(plugin.getConfigManager().DynMapHideByDefault); - Bukkit.getConsoleSender().sendMessage("[Residence] DynMap residence activated!"); + CMIMessages.consoleMessage(Residence.getInstance().getPrefix() + " DynMap residence activated!"); for (Entry one : plugin.getResidenceManager().getResidences().entrySet()) { plugin.getDynManager().fireUpdateAdd(one.getValue(), one.getValue().getSubzoneDeep()); diff --git a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java index e04deaab7..d84b2fff0 100644 --- a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java +++ b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java @@ -20,6 +20,8 @@ import com.bekvon.bukkit.residence.utils.GetTime; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Logs.CMIDebug; +import net.Zrips.CMILib.Messages.CMIMessages; import net.pl3x.map.api.Key; import net.pl3x.map.api.LayerProvider; import net.pl3x.map.api.MapWorld; @@ -198,8 +200,7 @@ private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { if (res == null) return; - boolean hidden = res.getPermissions().has("hidden", false); - if (hidden && plugin.getConfigManager().Pl3xMapHideHidden) { + if (res.getPermissions().has("hidden", false) && plugin.getConfigManager().Pl3xMapHideHidden) { fireUpdateRemove(res, depth); return; } @@ -221,7 +222,7 @@ private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { SimpleLayerProvider prov = SimpleLayerProvider .builder("Residence") .showControls(true) - .defaultHidden(false) + .defaultHidden(plugin.getConfigManager().Pl3xMapHideByDefault) .layerPriority(4) .zIndex(63) .build(); @@ -321,7 +322,7 @@ public void handleResidenceRemove(String resid, ClaimedResidence res, int depth) public void activate() { - Bukkit.getConsoleSender().sendMessage("[Residence] Pl3xMap residence activated!"); + CMIMessages.consoleMessage(Residence.getInstance().getPrefix() + " Pl3xMap residence activated!"); for (Entry one : plugin.getResidenceManager().getResidences().entrySet()) { fireUpdateAdd(one.getValue(), one.getValue().getSubzoneDeep()); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 473b70352..23f1a1254 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -995,7 +995,7 @@ public void load(Map root) throws Exception { @SuppressWarnings("unchecked") Map reslist = (Map) root.get(worldName); - if (!plugin.isDisabledWorld(worldName)) + if (!plugin.isDisabledWorld(worldName) && !plugin.getConfigManager().CleanerStartupLog) Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + worldName + " data into memory..."); if (reslist != null) { try { From 536da199adb808c3a90d832a8394d46d2ec4048c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=98=AD=E8=98=AD=E9=9C=B2=20Flandre=5Ftw?= <51469621+gregman98@users.noreply.github.com> Date: Tue, 24 Aug 2021 22:10:59 +0800 Subject: [PATCH 0900/1142] Fix some serious incorrect usage. --- src/Language/ChineseTW.yml | 308 ++++++++++++++++++------------------- 1 file changed, 154 insertions(+), 154 deletions(-) diff --git a/src/Language/ChineseTW.yml b/src/Language/ChineseTW.yml index 5516ff822..d3f3df3e6 100644 --- a/src/Language/ChineseTW.yml +++ b/src/Language/ChineseTW.yml @@ -480,7 +480,7 @@ Language: TeleportConfirmVoid: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰è½é€² &6虛空&c,若ä»è¦å‚³é€è«‹è¼¸å…¥ &6/res tpconfirm &c來確定æ“作。' TeleportConfirm: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰è½ &6%1 &c格高的方塊,若ä»è¦å‚³é€è«‹è¼¸å…¥ &6/res tpconfirm &c來確定æ“作。' TeleportStarted: '&e已開始傳é€åˆ° &6%1 &e,在 &6%2 &e秒內請勿移動。' - TeleportTitle: '&e傳é€ä¸­ ï¼' + TeleportTitle: '&e傳é€ä¸­â€¦â€¦' TeleportTitleTime: '&6%1' TeleportCanceled: '&eå·²å–æ¶ˆå‚³é€ ï¼' NoTeleportConfirm: '&e沒有需è¦ç¢ºèªçš„å‚³é€ ï¼' @@ -989,587 +989,587 @@ CommandHelp: Translated: 使用éµç § (anvil) Description: å…許 或 ç¦æ­¢ä½¿ç”¨éµç § Info: - - '&e用法 : &6/res set/pset anvil true/false/remove' + - '&e用法 : &6/res set/pset <領地> anvil true/false/remove' admin: Translated: 管ç†æ¬Š (admin) Description: 給予玩家管ç†å“¡æ¬Šé™æ›´æ”¹é ˜åœ°çš„æ¬Šé™ Info: - - '&e用法 : &6/res pset admin true/false/remove' + - '&e用法 : &6/res pset <領地> admin true/false/remove' animalkilling: Translated: 擊殺動物 (animalkilling) Description: å…許 或 ç¦æ­¢æ“Šæ®ºå‹•ç‰© Info: - - '&e用法 : &6/res set/pset animalkilling true/false/remove' + - '&e用法 : &6/res set/pset <領地> animalkilling true/false/remove' animals: Translated: 生æˆå‹•ç‰© (animals) Description: å…許 或 ç¦æ­¢ç”Ÿæˆå‹•ç‰© Info: - - '&e用法 : &6/res set animals true/false/remove' + - '&e用法 : &6/res set <領地> animals true/false/remove' anchor: Translated: 使用é‡ç”ŸéŒ¨ (anchor) Description: å…許 或 ç¦æ­¢ä½¿ç”¨é‡ç”ŸéŒ¨ Info: - - '&e用法 : &6/res set/pset anchor true/false/remove' + - '&e用法 : &6/res set/pset <領地> anchor true/false/remove' anvilbreak: Translated: éµç §æ壞 (anvilbreak) Description: å…許 或 ç¦æ­¢é ˜åœ°å…§éµç §æ壞 Info: - - '&e用法 : &6/res set anvilbreak true/false/remove' + - '&e用法 : &6/res set <領地> anvilbreak true/false/remove' backup: Translated: 備份與還原 (backup) - Description: 如果設定為 true 則æ¢å¾©å…ˆå‰çš„領地外觀 ï¼ˆéœ€è¦ WordEdit) + Description: 如果設定為 true,則æ¢å¾©åŽŸç”Ÿçš„領地樣貌 ï¼ˆéœ€è¦ WordEdit) Info: - - '&e用法 : &6/res set backup true/false/remove' + - '&e用法 : &6/res set <領地> backup true/false/remove' bank: Translated: 使用銀行 (bank) Description: å…許 或 ç¦æ­¢å¾žé ˜åœ°éŠ€è¡Œå­˜æ¬¾/å–款 Info: - - '&e用法 : &6/res set/pset bank true/false/remove' + - '&e用法 : &6/res set/pset <領地> bank true/false/remove' bed: Translated: 使用床 (bed) Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ Info: - - '&e用法 : &6/res set/pset bed true/false/remove' + - '&e用法 : &6/res set/pset <領地> bed true/false/remove' honey: Translated: 摘å–蜂蜜 (honey) Description: å…許 或 ç¦æ­¢çŽ©å®¶æ‘˜å–蜂蜜 Info: - - '&e用法 : &6/res set/pset honey true/false/remove' + - '&e用法 : &6/res set/pset <領地> honey true/false/remove' honeycomb: Translated: 摘å–蜂巢 (honeycomb) Description: å…許 或 ç¦æ­¢çŽ©å®¶æ‘˜å–蜂巢 Info: - - '&e用法 : &6/res set/pset honeycomb true/false/remove' + - '&e用法 : &6/res set/pset <領地> honeycomb true/false/remove' beacon: Translated: 使用烽ç«å° (beacon) Description: å…許 或 ç¦æ­¢ä½¿ç”¨çƒ½ç«å° Info: - - '&e用法 : &6/res set/pset beacon true/false/remove' + - '&e用法 : &6/res set/pset <領地> beacon true/false/remove' brew: Translated: ä½¿ç”¨é‡€é€ å° ï¼ˆbrew) Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨é‡€é€ å° Info: - - '&e用法 : &6/res set/pset brew true/false/remove' + - '&e用法 : &6/res set/pset <領地> brew true/false/remove' build: Translated: 建造 (build) Description: å…許 或 ç¦æ­¢å»ºé€  Info: - - '&e用法 : &6/res set/pset build true/false/remove' + - '&e用法 : &6/res set/pset <領地> build true/false/remove' burn: Translated: 生物燃燒 (burn) Description: å…許 或 ç¦æ­¢ç”Ÿç‰©åœ¨é ˜åœ°å…§ç‡ƒç‡’ Info: - - '&e用法 : &6/res set burn true/false/remove' + - '&e用法 : &6/res set <領地> burn true/false/remove' button: Translated: 使用按鈕 (button) Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰éˆ• Info: - - '&e用法 : &6/res set/pset button true/false/remove' + - '&e用法 : &6/res set/pset <領地> button true/false/remove' cake: - Translated: 食用蛋糕 (cake) + Translated: åƒè›‹ç³• (cake) Description: å…許 或 ç¦æ­¢çŽ©å®¶åƒè›‹ç³• Info: - - '&e用法 : &6/res set/pset cake true/false/remove' + - '&e用法 : &6/res set/pset <領地> cake true/false/remove' canimals: Translated: 生æˆè‡ªå®šç¾©å‹•ç‰© (canimals) Description: å…許 或 ç¦æ­¢è‡ªè¨‚ç¾©å‹•ç‰©ç”Ÿæˆ Info: - - '&e用法 : &6/res set canimals true/false/remove' + - '&e用法 : &6/res set <領地> canimals true/false/remove' chorustp: Translated: 食用歌èŠæžœå‚³é€ (chorustp) Description: å…許 或 ç¦æ­¢åƒæ­ŒèŠæžœé€²è¡Œå‚³é€ Info: - - '&e用法 : &6/res set/pset chorustp true/false/remove' + - '&e用法 : &6/res set/pset <領地> chorustp true/false/remove' chat: Translated: èŠå¤© (chat) - Description: å…許玩家加入領地èŠå¤©é »é“ + Description: å…許 或 ç¦æ­¢çŽ©å®¶åŠ å…¥é ˜åœ°èŠå¤©é »é“ Info: - - '&e用法 : &6/res set/pset chat true/false/remove' + - '&e用法 : &6/res set/pset <領地> chat true/false/remove' cmonsters: Translated: 生æˆè‡ªè¨‚義怪物 (cmonsters) Description: å…許 或 ç¦æ­¢è‡ªè¨‚ç¾©æ€ªç‰©ç”Ÿæˆ Info: - - '&e用法 : &6/res set cmonsters true/false/remove' + - '&e用法 : &6/res set <領地> cmonsters true/false/remove' commandblock: Translated: 使用指令方塊 (commandblock) Description: å…許 或 ç¦æ­¢ä½¿ç”¨æŒ‡ä»¤æ–¹å¡Š Info: - - '&e用法 : &6/res set/pset commandblock true/false/remove' + - '&e用法 : &6/res set/pset <領地> commandblock true/false/remove' command: Translated: 使用指令 (command) Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨æŒ‡ä»¤ Info: - - '&e用法 : &6/res set/pset command true/false/remove' + - '&e用法 : &6/res set/pset <領地> command true/false/remove' container: Translated: 使用容器 (container) Description: å…許 或 ç¦æ­¢ä½¿ç”¨ç†”çˆã€å„²ç‰©ç®±ã€ç™¼å°„器…… Info: - - '&e用法 : &6/res set/pset container true/false/remove' + - '&e用法 : &6/res set/pset <領地> container true/false/remove' coords: Translated: 顯示座標 (coords) Description: 顯示領地座標 Info: - - '&e用法 : &6/res set coords true/false/remove' + - '&e用法 : &6/res set <領地> coords true/false/remove' copper: Translated: 修改銅方塊 (copper) Description: å…許修改銅方塊 Info: - - '&e用法 : &6/res set/pset copper true/false/remove' + - '&e用法 : &6/res set/pset <領地> copper true/false/remove' craft: Translated: 使用工è—ç•Œé¢ ï¼ˆcraft) - Description: 給予工作å°ã€é™„é­”å°ã€é‡€é€ å°â€¦â€¦ æ¬Šé™ + Description: 給予工作å°ã€é™„é­”å°ã€é‡€é€ å°â€¦â€¦ çš„æ¬Šé™ Info: - - '&e用法 : &6/res set craft true/false/remove' + - '&e用法 : &6/res set <領地> craft true/false/remove' creeper: Translated: 苦力怕爆炸 (creeper) Description: å…許 或 ç¦æ­¢è‹¦åŠ›æ€•çˆ†ç‚¸ Info: - - '&e用法 : &6/res set creeper true/false/remove' + - '&e用法 : &6/res set <領地> creeper true/false/remove' dragongrief: - Translated: 防止終界é¾ç ´å£ž (dragongrief) - Description: 防止終界é¾ç ´å£žæ–¹å¡Š + Translated: 終界é¾ç ´å£ž (dragongrief) + Description: å…許 或 ç¦æ­¢çµ‚ç•Œé¾ç ´å£žä»»ä½•æ–¹å¡Š Info: - - '&e用法 : &6/res set dragongrief true/false/remove' + - '&e用法 : &6/res set <領地> dragongrief true/false/remove' day: Translated: 白天 (day) Description: 設定領地時間為白天 Info: - - '&e用法 : &6/res set day true/false/remove' + - '&e用法 : &6/res set <領地> day true/false/remove' dye: Translated: 染色羊 (dye) Description: å…許 或 ç¦æ­¢ç¾ŠæŸ“色 Info: - - '&e用法 : &6/res set/pset dye true/false/remove' + - '&e用法 : &6/res set/pset <領地> dye true/false/remove' damage: Translated: 實體傷害 (damage) Description: å…許 或 ç¦æ­¢æ‰€æœ‰é ˜åœ°å¯¦é«”傷害 Info: - - '&e用法 : &6/res set damage true/false/remove' + - '&e用法 : &6/res set <領地> damage true/false/remove' decay: Translated: 樹葉è…爛 (decay) Description: å…許 或 ç¦æ­¢é ˜åœ°å…§æ¨¹è‘‰è…爛 Info: - - '&e用法 : &6/res set decay true/false/remove' + - '&e用法 : &6/res set <領地> decay true/false/remove' destroy: Translated: 破壞 (destroy) Description: å…許 或 ç¦æ­¢ç ´å£žæ–¹å¡Šï¼ˆå°‡è¦†è“‹ build 權é™ï¼‰ Info: - - '&e用法 : &6/res set/pset destroy true/false/remove' + - '&e用法 : &6/res set/pset <領地> destroy true/false/remove' dryup: Translated: 耕地乾涸 (dryup) - Description: 防止耕地乾涸 + Description: å…許 或 ç¦æ­¢è€•åœ°ä¹¾æ¶¸ Info: - - '&e用法 : &6/res set dryup true/false/remove' + - '&e用法 : &6/res set <領地> dryup true/false/remove' diode: Translated: 使用紅石中繼器 (diode) Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨ç´…石中繼器 Info: - - '&e用法 : &6/res set/pset diode true/false/remove' + - '&e用法 : &6/res set/pset <領地> diode true/false/remove' door: Translated: 使用門 (door) Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨é–€æˆ–地æ¿é–€ Info: - - '&e用法 : &6/res set/pset door true/false/remove' + - '&e用法 : &6/res set/pset <領地> door true/false/remove' egg: Translated: 觸碰é¾è›‹ (egg) Description: å…許 或 ç¦æ­¢çŽ©å®¶è§¸ç¢°é¾è›‹ Info: - - '&e用法 : &6/res set/pset egg true/false/remove' + - '&e用法 : &6/res set/pset <領地> egg true/false/remove' enchant: Translated: ä½¿ç”¨é™„é­”å° ï¼ˆenchant) Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° Info: - - '&e用法 : &6/res set/pset enchant true/false/remove' + - '&e用法 : &6/res set/pset <領地> enchant true/false/remove' explode: Translated: 爆炸 (explode) Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§çˆ†ç‚¸ Info: - - '&e用法 : &6/res set explode true/false/remove' + - '&e用法 : &6/res set <領地> explode true/false/remove' elytra: Translated: 使用鞘翅 (elytra) Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨éž˜ç¿… Info: - - '&e用法 : &6/res set/pset elytra true/false/remove' + - '&e用法 : &6/res set/pset <領地> elytra true/false/remove' enderpearl: Translated: 使用終界çç å‚³é€ (enderpearl) Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨çµ‚ç•Œçç å‚³é€ Info: - - '&e用法 : &6/res set/pset enderpearl true/false/remove' + - '&e用法 : &6/res set/pset <領地> enderpearl true/false/remove' fallinprotection: Translated: é˜²æ­¢æ–¹å¡ŠæŽ‰è½ ï¼ˆfallinprotection) Description: 防止方塊掉è½é ˜åœ°å…§ Info: - - '&e用法 : &6/res set fallinprotection true/false/remove' + - '&e用法 : &6/res set <領地> fallinprotection true/false/remove' falldamage: - Translated: é˜²æ­¢çŽ©å®¶æ‘”è½ ï¼ˆfalldamage) - Description: 防止玩家摔è½å‚·å®³ + Translated: çŽ©å®¶æ‘”è½ ï¼ˆfalldamage) + Description: å…許 或 ç¦æ­¢çŽ©å®¶æ‘”è½å‚·å®³ Info: - - '&e用法 : &6/res set falldamage true/false/remove' + - '&e用法 : &6/res set <領地> falldamage true/false/remove' feed: Translated: 自動回復飽食度 (feed) - Description: 如果設定為 true 則讓在領地內的玩家自動回復飽食度 + Description: 如果設定為 true,則讓在領地內的玩家自動回復飽食度 Info: - - '&e用法 : &6/res set feed true/false/remove' + - '&e用法 : &6/res set <領地> feed true/false/remove' friendlyfire: Translated: å‹è»å‚·å®³ (friendlyfire) Description: å…許 或 ç¦æ­¢å‹è»å‚·å®³ Info: - - '&e用法 : &6/res pset friendlyfire true/false/remove' + - '&e用法 : &6/res pset <領地> friendlyfire true/false/remove' fireball: Translated: 使用ç«ç„°å½ˆ (fireball) Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨ç«ç„°å½ˆ Info: - - '&e用法 : &6/res set fireball true/false/remove' + - '&e用法 : &6/res set <領地> fireball true/false/remove' firespread: Translated: ç«ç„°è”“延 (firespread) Description: å…許 或 ç¦æ­¢ç«ç„°è”“延 Info: - - '&e用法 : &6/res set firespread true/false/remove' + - '&e用法 : &6/res set <領地> firespread true/false/remove' flowinprotection: Translated: 防止外部液體æµå‹• (flowinprotection) Description: å…許 或 ç¦æ­¢æ¶²é«”æµå…¥é ˜åœ° Info: - - '&e用法 : &6/res set flowinprotection true/false/remove' + - '&e用法 : &6/res set <領地> flowinprotection true/false/remove' flow: Translated: 內部液體æµå‹• (flow) Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§æ¶²é«”æµå‹• Info: - - '&e用法 : &6/res set flow true/false/remove' + - '&e用法 : &6/res set <領地> flow true/false/remove' flowerpot: Translated: 使用花盆 (flowerpot) Description: å…許 或 ç¦æ­¢ä½¿ç”¨èŠ±ç›† Info: - - '&e用法 : &6/res set/pset flowerpot true/false/remove' + - '&e用法 : &6/res set/pset <領地> flowerpot true/false/remove' grow: Translated: æ¤ç‰©ç”Ÿé•· (grow) Description: å…許 或 ç¦æ­¢æ¤ç‰©ç”Ÿé•· Info: - - '&e用法 : &6/res set grow true/false/remove' + - '&e用法 : &6/res set <領地> grow true/false/remove' glow: Translated: 玩家發光 (glow) Description: 玩家進入領地後會開始發光 Info: - - '&e用法 : &6/res set glow true/false/remove' + - '&e用法 : &6/res set <領地> glow true/false/remove' hotfloor: - Translated: 防止岩漿塊傷害 (hotfloor) - Description: 防止踩在岩漿塊上的傷害 + Translated: 岩漿塊傷害 (hotfloor) + Description: å…許 或 ç¦æ­¢è¸©åœ¨å²©æ¼¿å¡Šä¸Šçš„傷害 Info: - - '&e用法 : &6/res set hotfloor true/false/remove' + - '&e用法 : &6/res set <領地> hotfloor true/false/remove' hidden: Translated: éš±è—領地列表 (hidden) Description: 在 list 或 listall 列表中隱è—領地 Info: - - '&e用法 : &6/res set hidden true/false/remove' + - '&e用法 : &6/res set <領地> hidden true/false/remove' hook: Translated: 使用釣竿釣鉤實體 (hook) Description: å…許 或 ç¦æ­¢ä½¿ç”¨é‡£ç«¿é‡£é‰¤å¯¦é«” Info: - - '&e用法 : &6/res set/pset hook true/false/remove' + - '&e用法 : &6/res set/pset <領地> hook true/false/remove' healing: Translated: è‡ªå‹•å›žå¾©è¡€é‡ ï¼ˆhealing) - Description: 如果設定為 true å‰‡è®“åœ¨é ˜åœ°å…§çš„çŽ©å®¶è‡ªå‹•å›žå¾©è¡€é‡ + Description: 如果設定為 trueï¼Œå‰‡è®“åœ¨é ˜åœ°å…§çš„çŽ©å®¶è‡ªå‹•å›žå¾©è¡€é‡ Info: - - '&e用法 : &6/res set healing true/false/remove' + - '&e用法 : &6/res set <領地> healing true/false/remove' iceform: - Translated: 防止çµå†° (iceform) - Description: 防止水çµå†° + Translated: æ°´çµå†° (iceform) + Description: å…許 或 ç¦æ­¢æ°´çµå†° Info: - - '&e用法 : &6/res set iceform true/false/remove' + - '&e用法 : &6/res set <領地> iceform true/false/remove' icemelt: - Translated: 防止èžåŒ– (icemelt) - Description: 防止冰èžåŒ– + Translated: 冰èžåŒ– (icemelt) + Description: å…許 或 ç¦æ­¢å†°èžåŒ– Info: - - '&e用法 : &6/res set icemelt true/false/remove' + - '&e用法 : &6/res set <領地> icemelt true/false/remove' ignite: Translated: 使用打ç«çŸ³ (ignite) Description: å…許 或 ç¦æ­¢ä½¿ç”¨æ‰“ç«çŸ³ Info: - - '&e用法 : &6/res set/pset ignite true/false/remove' + - '&e用法 : &6/res set/pset <領地> ignite true/false/remove' itemdrop: Translated: 物å“æŽ‰è½ ï¼ˆitemdrop) Description: å…許 或 ç¦æ­¢ç‰©å“æŽ‰è½ Info: - - '&e用法 : &6/res set/pset itemdrop true/false/remove' + - '&e用法 : &6/res set/pset <領地> itemdrop true/false/remove' itempickup: Translated: 物å“æ’¿å– ï¼ˆitempickup) Description: å…許 或 ç¦æ­¢ç‰©å“æ’¿å– Info: - - '&e用法 : &6/res set/pset itempickup true/false/remove' + - '&e用法 : &6/res set/pset <領地> itempickup true/false/remove' jump2: Translated: å…©æ ¼é«˜è·³èº ï¼ˆjump2) - Description: å…許跳èºå…©æ ¼é«˜ + Description: å…許 或 ç¦æ­¢è·³èºå…©æ ¼é«˜ Info: - - '&e用法 : &6/res set jump2 true/false/remove' + - '&e用法 : &6/res set <領地> jump2 true/false/remove' jump3: Translated: ä¸‰æ ¼é«˜è·³èº ï¼ˆjump3) - Description: å…許跳èºä¸‰æ ¼é«˜ + Description: å…許 或 ç¦æ­¢è·³èºä¸‰æ ¼é«˜ Info: - - '&e用法 : &6/res set jump3 true/false/remove' + - '&e用法 : &6/res set <領地> jump3 true/false/remove' keepinv: Translated: é˜²å™´è£ ï¼ˆkeepinv) - Description: 在玩家死後ä¿æŒç‰©å“欄狀態 + Description: å…許 或 ç¦æ­¢åœ¨çŽ©å®¶æ­»å¾Œä¿æŒç‰©å“欄狀態 Info: - - '&e用法 : &6/res set keepinv true/false/remove' + - '&e用法 : &6/res set <領地> keepinv true/false/remove' keepexp: Translated: 防噴經驗 (keepexp) - Description: 在玩家死後ä¿æŒç¶“驗值狀態 + Description: å…許 或 ç¦æ­¢åœ¨çŽ©å®¶æ­»å¾Œä¿æŒç¶“驗值狀態 Info: - - '&e用法 : &6/res set keepexp true/false/remove' + - '&e用法 : &6/res set <領地> keepexp true/false/remove' lavaflow: Translated: 內部岩漿æµå‹• (lavaflow Description: å…許 或 ç¦æ­¢å²©æ¼¿æµå‹•ï¼ˆå°‡è¦†è“‹ flow 權é™ï¼‰ Info: - - '&e用法 : &6/res set lavaflow true/false/remove' + - '&e用法 : &6/res set <領地> lavaflow true/false/remove' leash: Translated: 使用拴繩 (leash) Description: å…許 或 ç¦æ­¢å°å‹•ç‰©ä½¿ç”¨æ‹´ç¹© Info: - - '&e用法 : &6/res set/pset leash true/false/remove' + - '&e用法 : &6/res set/pset <領地> leash true/false/remove' lever: Translated: 使用控制桿 (lever) Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŽ§åˆ¶æ¡¿ Info: - - '&e用法 : &6/res set/pset lever true/false/remove' + - '&e用法 : &6/res set/pset <領地> lever true/false/remove' mobexpdrop: - Translated: 防止生物死後掉è½ç¶“é©— (mobexpdrop) - Description: 防止生物在死後掉è½ç¶“é©— + Translated: 生物死後掉è½ç¶“é©— (mobexpdrop) + Description: å…許 或 ç¦æ­¢ç”Ÿç‰©åœ¨æ­»å¾ŒæŽ‰è½ç¶“é©— Info: - - '&e用法 : &6/res set mobexpdrop true/false/remove' + - '&e用法 : &6/res set <領地> mobexpdrop true/false/remove' mobitemdrop: - Translated: 防止生物死後掉è½ç‰©å“ (mobitemdrop) - Description: 防止生物在死後掉è½ç‰©å“ + Translated: 生物死後掉è½ç‰©å“ (mobitemdrop) + Description: å…許 或 ç¦æ­¢ç”Ÿç‰©åœ¨æ­»å¾ŒæŽ‰è½ç‰©å“ Info: - - '&e用法 : &6/res set mobitemdrop true/false/remove' + - '&e用法 : &6/res set <領地> mobitemdrop true/false/remove' mobkilling: Translated: 擊殺生物 (mobkilling) Description: å…許 或 ç¦æ­¢æ“Šæ®ºç”Ÿç‰© Info: - - '&e用法 : &6/res set/pset mobkilling true/false/remove' + - '&e用法 : &6/res set/pset <領地> mobkilling true/false/remove' monsters: Translated: 生æˆæ€ªç‰© (monsters) Description: å…許 或 ç¦æ­¢ç”Ÿæˆæ€ªç‰© Info: - - '&e用法 : &6/res set monsters true/false/remove' + - '&e用法 : &6/res set <領地> monsters true/false/remove' move: Translated: 玩家移動 (move) Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ç§»å‹• Info: - - '&e用法 : &6/res set/pset move true/false/remove' + - '&e用法 : &6/res set/pset <領地> move true/false/remove' nametag: Translated: 命å (nametag) Description: å…許 或 ç¦æ­¢ä½¿ç”¨å‘½å牌 Info: - - '&e用法 : &6/res set/pset nametag true/false/remove' + - '&e用法 : &6/res set/pset <領地> nametag true/false/remove' nanimals: Translated: åŽŸç‰ˆç”Ÿç‰©ç”Ÿæˆ ï¼ˆnanimals) Description: å…許 或 ç¦æ­¢åŽŸç‰ˆç”Ÿç‰©ç”Ÿæˆ Info: - - '&e用法 : &6/res set nanimals true/false/remove' + - '&e用法 : &6/res set <領地> nanimals true/false/remove' nmonsters: Translated: åŽŸç‰ˆæ€ªç‰©ç”Ÿæˆ ï¼ˆnmonsters) Description: å…許 或 ç¦æ­¢åŽŸç‰ˆæ€ªç‰©ç”Ÿæˆ Info: - - '&e用法 : &6/res set nmonsters true/false/remove' + - '&e用法 : &6/res set <領地> nmonsters true/false/remove' night: Translated: 夜晚 (night) Description: 設定領地時間為夜晚 Info: - - '&e用法 : &6/res set night true/false/remove' + - '&e用法 : &6/res set <領地> night true/false/remove' nofly: Translated: 使用飛行 (nofly) Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§é£›è¡Œ Info: - - '&e用法 : &6/res set/pset nofly true/false/remove' + - '&e用法 : &6/res set/pset <領地> nofly true/false/remove' fly: Translated: 自動飛行 (fly) - Description: 自動開啟或關閉領地內的玩家飛行 + Description: 自動開啟 或 關閉領地內的玩家飛行 Info: - - '&e用法 : &6/res set/pset fly true/false/remove' + - '&e用法 : &6/res set/pset <領地> fly true/false/remove' nomobs: Translated: 防止怪物進入 (nomobs) Description: 防止怪物進入領地,需è¦åœ¨é…置檔案開啟 AutoMobRemoval Info: - - '&e用法 : &6/res set nomobs true/false/remove' + - '&e用法 : &6/res set <領地> nomobs true/false/remove' note: Translated: 使用音階盒 (note) Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³éšŽç›’ Info: - - '&e用法 : &6/res set/pset note true/false/remove' + - '&e用法 : &6/res set/pset <領地> note true/false/remove' nodurability: Translated: 防止物å“é™ä½Žè€ä¹…值 (nodurability) Description: 防止物å“é™ä½Žè€ä¹…值 Info: - - '&e用法 : &6/res set nodurability true/false/remove' + - '&e用法 : &6/res set <領地> nodurability true/false/remove' overridepvp: Translated: 覆蓋戰鬥 (overridepvp) Description: 覆蓋任何æ’件的戰鬥ä¿è­· Info: - - '&e用法 : &6/res set overridepvp true/false/remove' + - '&e用法 : &6/res set <領地> overridepvp true/false/remove' pressure: Translated: ä½¿ç”¨å£“åŠ›æ¿ ï¼ˆpressure) Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨å£“åŠ›æ¿ Info: - - '&e用法 : &6/res set/pset pressure true/false/remove' + - '&e用法 : &6/res set/pset <領地> pressure true/false/remove' piston: Translated: 使用活塞 (piston) Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨æ´»å¡žæŽ¨æˆ–拉 Info: - - '&e用法 : &6/res set piston true/false/remove' + - '&e用法 : &6/res set <領地> piston true/false/remove' pistonprotection: - Translated: 防止外部活塞 (pistonprotection + Translated: 防止外部活塞 (pistonprotection) Description: å…許 或 ç¦æ­¢æ´»å¡žå¾žé ˜åœ°å¤–推或拉領地內的方塊 Info: - - '&e用法 : &6/res set pistonprotection true/false/remove' + - '&e用法 : &6/res set <領地> pistonprotection true/false/remove' place: Translated: 放置 (place) Description: å…許 或 ç¦æ­¢æ”¾ç½®æ–¹å¡Šï¼ˆå°‡è¦†è“‹ build 權é™ï¼‰ Info: - - '&e用法 : &6/res set/pset place true/false/remove' + - '&e用法 : &6/res set/pset <領地> place true/false/remove' pvp: Translated: 戰鬥 (pvp) Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§æˆ°é¬¥ Info: - - '&e用法 : &6/res set pvp true/false/remove' + - '&e用法 : &6/res set <領地> pvp true/false/remove' rain: Translated: 下雨 (rain) Description: 設定領地天氣為雨天 Info: - - '&e用法 : &6/res set rain true/false/remove' + - '&e用法 : &6/res set <領地> rain true/false/remove' respawn: Translated: 自動é‡ç”Ÿ (respawn) Description: 自動é‡ç”ŸçŽ©å®¶ Info: - - '&e用法 : &6/res set respawn true/false/remove' + - '&e用法 : &6/res set <領地> respawn true/false/remove' riding: - Translated: 防止騎乘 (riding) - Description: 防止騎乘生物 + Translated: 騎乘 (riding) + Description: å…許 或 ç¦æ­¢é¨Žä¹˜ç”Ÿç‰© Info: - - '&e用法 : &6/res set/pset riding true/false/remove' + - '&e用法 : &6/res set/pset <領地> riding true/false/remove' shoot: Translated: 使用射擊 (shoot) Description: å…許 或 ç¦æ­¢åœ¨å€åŸŸå…§å°„æ“Š Info: - - '&e用法 : &6/res set shoot true/false/remove' + - '&e用法 : &6/res set <領地> shoot true/false/remove' sun: Translated: 晴天 (sun) Description: 設定領地天氣為晴天 Info: - - '&e用法 : &6/res set sun true/false/remove' + - '&e用法 : &6/res set <領地> sun true/false/remove' shop: Translated: 商店 (shop) Description: 新增領地到指定的商店列表 Info: - - '&e用法 : &6/res set shop true/false/remove' + - '&e用法 : &6/res set <領地> shop true/false/remove' snowtrail: - Translated: 防止ç©é›ª (snowtrail) - Description: 防止雪人生æˆç©é›ªè·¯å¾‘ + Translated: ç©é›ª (snowtrail) + Description: å…許 或 ç¦æ­¢é›ªäººç”Ÿæˆç©é›ªè·¯å¾‘ Info: - - '&e用法 : &6/res set snowtrail true/false/remove' + - '&e用法 : &6/res set <領地> snowtrail true/false/remove' spread: - Translated: 防止方塊擴散 (spread) - Description: 防止è‰åœ°æˆ–èŒçµ²åœŸæ“´æ•£ + Translated: 方塊擴散 (spread) + Description: å…許 或 ç¦æ­¢è‰åœ°æˆ–èŒçµ²åœŸæ“´æ•£ Info: - - '&e用法 : &6/res set spread true/false/remove' + - '&e用法 : &6/res set <領地> spread true/false/remove' snowball: - Translated: 防止雪çƒæ“Šé€€ (snowball) - Description: 防止雪çƒæ“Šé€€ + Translated: 雪çƒæ“Šé€€ (snowball) + Description: å…許 或 ç¦æ­¢é›ªçƒæ“Šé€€ Info: - - '&e用法 : &6/res set snowball true/false/remove' + - '&e用法 : &6/res set <領地> snowball true/false/remove' sanimals: Translated: 使用生怪磚或生怪蛋生æˆå‹•ç‰© (sanimals) Description: å…許 或 ç¦æ­¢ç”Ÿæ€ªç£šæˆ–生怪蛋生æˆå‹•ç‰© Info: - - '&e用法 : &6/res set sanimals true/false/remove' + - '&e用法 : &6/res set <領地> sanimals true/false/remove' shear: Translated: 剪羊毛 (shear) Description: å…許 或 ç¦æ­¢å‰ªç¾Šæ¯› Info: - - '&e用法 : &6/res set/pset shear true/false/remove' + - '&e用法 : &6/res set/pset <領地> shear true/false/remove' smonsters: Translated: 使用生怪磚或生怪蛋生æˆæ€ªç‰© (smonsters) Description: å…許 或 ç¦æ­¢ç”Ÿæ€ªç£šæˆ–生怪蛋生æˆæ€ªç‰© Info: - - '&e用法 : &6/res set smonsters true/false/remove' + - '&e用法 : &6/res set <領地> smonsters true/false/remove' subzone: Translated: 建立å­å€åŸŸ (subzone) - Description: å…許玩家建立å­å€åŸŸé ˜åœ° + Description: å…許 或 ç¦æ­¢çŽ©å®¶å»ºç«‹å­å€åŸŸé ˜åœ° Info: - - '&e用法 : &6/res set/pset subzone true/false/remove' + - '&e用法 : &6/res set/pset <領地> subzone true/false/remove' title: Translated: åŠ å…¥æˆ–é›¢é–‹è¨Šæ¯ ï¼ˆtitle) Description: 顯示 或 éš±è—é ˜åœ°çš„åŠ å…¥è¨Šæ¯ Info: - - '&e用法 : &6/res set title true/false/remove' + - '&e用法 : &6/res set <領地> title true/false/remove' table: Translated: ä½¿ç”¨å·¥ä½œå° ï¼ˆtable) Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° Info: - - '&e用法 : &6/res set/pset table true/false/remove' + - '&e用法 : &6/res set/pset <領地> table true/false/remove' tnt: Translated: TNT 爆炸 (tnt) Description: å…許 或 ç¦æ­¢ TNT 爆炸 Info: - - '&e用法 : &6/res set tnt true/false/remove' + - '&e用法 : &6/res set <領地> tnt true/false/remove' tp: Translated: å‚³é€ ï¼ˆtp) Description: å…許 或 ç¦æ­¢å‚³é€åˆ°é ˜åœ° Info: - - '&e用法 : &6/res set/pset tp true/false/remove' + - '&e用法 : &6/res set/pset <領地> tp true/false/remove' trade: Translated: æ‘民交易 (trade) Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§èˆ‡æ‘民交易 Info: - - '&e用法 : &6/res set/pset trade true/false/remove' + - '&e用法 : &6/res set/pset <領地> trade true/false/remove' trample: Translated: 踩è¸ç ´å£žè€•åœ° (trample) Description: å…許 或 ç¦æ­¢è¸©è¸ç ´å£žè€•åœ° Info: - - '&e用法 : &6/res set trample true/false/remove' + - '&e用法 : &6/res set <領地> trample true/false/remove' use: Translated: 使用 (use) Description: å…許 或 ç¦æ­¢ä½¿ç”¨é–€ã€æŽ§åˆ¶æ¡¿ã€æŒ‰éˆ•â€¦â€¦ Info: - - '&e用法 : &6/res set/pset use true/false/remove' + - '&e用法 : &6/res set/pset <領地> use true/false/remove' vehicledestroy: Translated: 破壞載具 (vehicledestroy) Description: å…許 或 ç¦æ­¢ç ´å£žè¼‰å…· Info: - - '&e用法 : &6/res set/pset vehicledestroy true/false/remove' + - '&e用法 : &6/res set/pset <領地> vehicledestroy true/false/remove' witherspawn: Translated: 生æˆå‡‹é›¶æ€ª (witherspawn) Description: å…許 或 ç¦æ­¢ç”Ÿæˆå‡‹é›¶æ€ª Info: - - '&e用法 : &6/res set witherspawn true/false/remove' + - '&e用法 : &6/res set <領地> witherspawn true/false/remove' phantomspawn: Translated: 生æˆå¤œé­… (phantomspawn) Description: å…許 或 ç¦æ­¢ç”Ÿæˆå¤œé­… Info: - - '&e用法 : &6/res set phantomspawn true/false/remove' + - '&e用法 : &6/res set <領地> phantomspawn true/false/remove' witherdamage: Translated: 凋零怪傷害 (witherdamage) Description: å…許 或 ç¦æ­¢å‡‹é›¶æ€ªå‚·å®³ Info: - - '&e用法 : &6/res set witherdamage true/false/remove' + - '&e用法 : &6/res set <領地> witherdamage true/false/remove' witherdestruction: Translated: 凋零怪破壞方塊 (witherdestruction) Description: å…許 或 ç¦æ­¢å‡‹é›¶æ€ªç ´å£žæ–¹å¡Š Info: - - '&e用法 : &6/res set witherdestruction true/false/remove' + - '&e用法 : &6/res set <領地> witherdestruction true/false/remove' waterflow: Translated: æ°´æµå‹• (waterflow) Description: å…許 或 ç¦æ­¢æ°´æµå‹•ï¼ˆå°‡è¦†è“‹ flow 權é™ï¼‰ Info: - - '&e用法 : &6/res set waterflow true/false/remove' + - '&e用法 : &6/res set <領地> waterflow true/false/remove' wspeed1: Translated: 減速 (wspeed1) Description: 減慢在領地內的玩家行走速度 Info: - - '&eUsage: &6/res set wspeed1 true/false/remove' + - '&eUsage: &6/res set <領地> wspeed1 true/false/remove' wspeed2: Translated: 加速 (wspeed2) Description: 加快在領地內的玩家行走速度 Info: - - '&e用法 : &6/res set wspeed2 true/false/remove' + - '&e用法 : &6/res set <領地> wspeed2 true/false/remove' remove: Info: - '&e用法 : &6/res remove &6[領地å稱]' From a0f30757855740d489179263338880fb0373593c Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 24 Sep 2021 16:24:50 +0300 Subject: [PATCH 0901/1142] SlimeFun support update --- .../residence/slimeFun/SlimeFunResidenceModule.java | 8 +++++--- .../bekvon/bukkit/residence/slimeFun/SlimefunManager.java | 6 +++--- src/plugin.yml | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index e2c57a254..ea65da251 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -13,8 +13,9 @@ import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectableAction; -import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectionModule; +import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.Interaction; +import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.ProtectionModule; +import net.Zrips.CMILib.Logs.CMIDebug; public class SlimeFunResidenceModule implements ProtectionModule { @@ -34,7 +35,7 @@ public void load() { } @Override - public boolean hasPermission(OfflinePlayer op, Location loc, ProtectableAction action) { + public boolean hasPermission(OfflinePlayer op, Location loc, Interaction action) { if (op == null) return false; @@ -64,4 +65,5 @@ public boolean hasPermission(OfflinePlayer op, Location loc, ProtectableAction a return true; } + } diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java index d1f523317..6995d32ff 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java @@ -4,8 +4,8 @@ import com.bekvon.bukkit.residence.Residence; -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.cscorelib2.protection.ProtectionManager; +import io.github.thebusybiscuit.slimefun4.implementation.Slimefun; +import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.ProtectionManager; public class SlimefunManager { @@ -16,7 +16,7 @@ public class SlimefunManager { public static void register(Residence residence) { Bukkit.getServer().getScheduler().runTaskTimer(residence, task -> { - ProtectionManager manager = SlimefunPlugin.getProtectionManager(); + ProtectionManager manager = Slimefun.getProtectionManager(); // Wait for protectionManager to load (loaded on first server tick) if (manager != null) { diff --git a/src/plugin.yml b/src/plugin.yml index 8e342b83b..24f0ebb9d 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.0.1 +version: 5.0.0.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From f7aebe221bb8e2387f0665a2f5806a7360b3bda9 Mon Sep 17 00:00:00 2001 From: myunco Date: Sun, 3 Oct 2021 17:05:49 +0800 Subject: [PATCH 0902/1142] Update Chinese.yml fixed a small error --- src/Language/Chinese.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml index ad9b83fca..bfe2943c8 100644 --- a/src/Language/Chinese.yml +++ b/src/Language/Chinese.yml @@ -443,7 +443,6 @@ Language: TpLimit: '&e请等待 &6%1 &e秒åŽå†ä¼ é€' TeleportSuccess: '&eä¼ é€åˆ° X:&6%1&e, Y:&6%2&e, Z:&6%3 &eä½ç½®' IncorrectLocation: '&6无法找到正确的传é€ä½ç½®, 请等待 &e%1 &6秒åŽé‡è¯•.' - TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%4 &e秒内ä¸è¦ç§»åŠ¨.' WorldList: '&eå¯ç”¨ä¸–ç•Œ: &6%1' Disabled: '&c在这个世界上,éšæœºä¼ é€åŠŸèƒ½è¢«ç¦ç”¨' TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%4 &e秒内ä¸è¦ç§»åŠ¨.' @@ -483,9 +482,9 @@ Language: 使用 &6/res tpconfirm &c强制传é€.' TeleportConfirmVoid: '&c这个传é€ä¸å®‰å…¨ï¼Œä½ ä¼šæŽ‰è¿› &6虚空&c. 使用 &6/res tpconfirm &c强制传é€.' - TeleportConfirm: '&c这个传é€å¹¶ä¸å®‰å…¨ï¼Œä½ å°†ä¼šè½å…¥ &6%1 &cblocks. + TeleportConfirm: '&c这个传é€å¹¶ä¸å®‰å…¨ï¼Œä½ å°†æ‘”è½ &6%1 &c个方å—. 使用 &6/res tpconfirm &c强制传é€.' - TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%4 &e秒内ä¸è¦ç§»åŠ¨.' + TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%2 &e秒内ä¸è¦ç§»åŠ¨.' TeleportTitle: '&eä¼ é€ä¸­..' TeleportTitleTime: '&6%1' TeleportCanceled: '&eä¼ é€è¢«å–消!' From 6ba1f0a253bfdfb7521e182e80b170b23fea3080 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Oct 2021 14:39:41 +0300 Subject: [PATCH 0903/1142] New placeholders command --- .../residence/Placeholders/Placeholder.java | 1 + .../residence/commands/placeholders.java | 101 ++++++++++++++++++ .../bukkit/residence/containers/lm.java | 4 + .../bukkit/residence/text/help/HelpEntry.java | 12 ++- src/plugin.yml | 2 +- 5 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/commands/placeholders.java diff --git a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java index 446ffccc0..a04d4ef3d 100644 --- a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java +++ b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java @@ -15,6 +15,7 @@ import com.bekvon.bukkit.residence.utils.GetTime; import me.clip.placeholderapi.PlaceholderAPI; +import net.Zrips.CMILib.Logs.CMIDebug; public class Placeholder { diff --git a/src/com/bekvon/bukkit/residence/commands/placeholders.java b/src/com/bekvon/bukkit/residence/commands/placeholders.java new file mode 100644 index 000000000..885707717 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/commands/placeholders.java @@ -0,0 +1,101 @@ +package com.bekvon.bukkit.residence.commands; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.bekvon.bukkit.residence.LocaleManager; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.Placeholders.Placeholder.CMIPlaceHolders; +import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.cmd; +import com.bekvon.bukkit.residence.containers.lm; + +import net.Zrips.CMILib.Container.PageInfo; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Locale.LC; +import net.Zrips.CMILib.RawMessages.RawMessage; + +public class placeholders implements cmd { + + @Override + @CommandAnnotation(simple = true, priority = 150, regVar = { 0, 1, 2, 3 }, consoleVar = { 3 }) + public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + + LC.info_Spliter.sendMessage(sender); + + Player player = null; + if (sender instanceof Player) + player = (Player) sender; + + int page = 1; + if (args.length > 0 && args[0].startsWith("-p:")) { + try { + page = Integer.parseInt(args[0].substring("-p:".length(), args[0].length())); + } catch (Exception e) { + } + } + + if (args.length >= 2 && args[0].equalsIgnoreCase("parse")) { + + String placeHolder = null; + for (String one : args) { + if (one.equalsIgnoreCase("parse")) + continue; + if (one.contains("%") || one.contains("{")) { + placeHolder = one; + continue; + } + player = Bukkit.getPlayer(one); + } + + plugin.msg(sender, lm.command_Parsed, plugin.getPlaceholderAPIManager().updatePlaceHolders(player, placeHolder)); + + return true; + } + + PageInfo pi = new PageInfo(player != null ? 10 : CMIPlaceHolders.values().length, CMIPlaceHolders.values().length, page); + + for (CMIPlaceHolders one : CMIPlaceHolders.values()) { + if (pi.isBreak()) + break; + + if (!pi.isEntryOk()) + continue; + + RawMessage rm = new RawMessage(); + String extra = ""; + if (player != null) + extra = plugin.getPlaceholderAPIManager().updatePlaceHolders(player, lm.command_PlacehlderResult.getMessage(one.getFull())); + + String place = one.getFull(); + StringBuilder hover = new StringBuilder(); + if (plugin.isPlaceholderAPIEnabled()) { + place = one.getFull(); + hover.append(one.getFull()); + } + + rm.addText(lm.command_PlacehlderList.getMessage(pi.getPositionForOutput(), place) + extra).addHover(hover.toString()).addSuggestion(one.getFull()); + rm.show(sender); + } + + if (player != null) { + plugin.getInfoPageManager().ShowPagination(sender, pi, "res placeholders", "-p:"); + } + + return true; + } + + @Override + public void getLocale() { + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + // Main command + c.get("Description", "List of placeholders"); + c.get("Info", Arrays.asList("&eUsage: &6/res placeholders (parse) (placeholder) (playerName)")); + c.get("parse", "[result]"); + LocaleManager.addTabCompleteMain(this); + LocaleManager.addTabCompleteMain(this, "parse", "[placeholder]", "[playername]"); + } +} diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 8d4cdd5e0..5f8852fa1 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -311,6 +311,10 @@ public enum lm { command_removedBlock("&eRemoved blocked command for &6%1 &eresidence"), command_Blocked("&eBlocked commands: &6%1"), command_Allowed("&eAllowed commands: &6%1"), + + command_Parsed("%1"), + command_PlacehlderList("&e%1. &6%2"), + command_PlacehlderResult(" &eresult: &6%1"), Rentable_Land("&eRentable Land: &6"), Rentable_AllowRenewing("&eCan Renew: &6%1"), diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index c5b57c809..ee22318bd 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -17,8 +17,10 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; +import com.Zrips.CMI.Modules.Placeholders.Placeholder.CMIPlaceholderType; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; +import com.bekvon.bukkit.residence.Placeholders.Placeholder.CMIPlaceHolders; import com.bekvon.bukkit.residence.commands.pset; import com.bekvon.bukkit.residence.commands.set; import com.bekvon.bukkit.residence.containers.Flags; @@ -294,7 +296,7 @@ public Set getSubCommands(CommandSender sender, String[] args) { neededArgPlace = 0; List ArgsList = new ArrayList(); - + if (args.length > 0) { HashMap> mp = Residence.getInstance().getLocaleManager().CommandTab.get(args[0].toLowerCase()); if (mp != null) { @@ -359,7 +361,6 @@ public Set getSubCommands(CommandSender sender, String[] args) { list.add(NeededArg); } - for (String oneArg : list) { switch (oneArg) { case "[playername]": @@ -429,6 +430,11 @@ public Set getSubCommands(CommandSender sender, String[] args) { subCommands.add(one.getName()); } break; + case "[placeholder]": + for (CMIPlaceHolders one : CMIPlaceHolders.values()) { + subCommands.add(one.getFull()); + } + break; case "[flag]": FlagMode mode = FlagMode.Both; @@ -446,7 +452,7 @@ else if (args[0].equalsIgnoreCase(pset.class.getSimpleName())) for (String one : FlagPermissions.getAllPosibleFlags()) { Flags f = Flags.getFlag(one); - if (f != null) { + if (f != null) { if (f.getFlagMode() != FlagMode.Both && f.getFlagMode() != mode) continue; diff --git a/src/plugin.yml b/src/plugin.yml index 24f0ebb9d..cf33aa1c2 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.0.2 +version: 5.0.0.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 7a0a1edfcf74a28e2fc3881518ebe6d4af639164 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Oct 2021 14:51:34 +0300 Subject: [PATCH 0904/1142] Pl3xMap issue fix --- .../residence/pl3xmap/Pl3xMapManager.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java index d84b2fff0..5411ac7fe 100644 --- a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java +++ b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java @@ -208,6 +208,9 @@ private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { World world = Bukkit.getWorld(res.getPermissions().getWorldName()); MapWorld mWorld = api.getWorldIfEnabled(world).orElse(null); + + if (mWorld == null) + return; Registry registry = mWorld.layerRegistry(); SimpleLayerProvider provider = providers.get(res.getPermissions().getWorldName()); @@ -275,7 +278,11 @@ private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { if (depth <= plugin.getConfigManager().Pl3xMapLayerSubZoneDepth) { List subids = res.getSubzones(); for (ClaimedResidence one : subids) { - handleResidenceAdd(one.getName(), one, depth + 1); + try { + handleResidenceAdd(one.getName(), one, depth + 1); + } catch (Throwable e) { + e.printStackTrace(); + } } } } @@ -291,6 +298,9 @@ public void handleResidenceRemove(String resid, ClaimedResidence res, int depth) World world = Bukkit.getWorld(res.getPermissions().getWorldName()); MapWorld mWorld = api.getWorldIfEnabled(world).orElse(null); + + if (mWorld == null) + return; Registry registry = mWorld.layerRegistry(); SimpleLayerProvider provider = providers.get(res.getPermissions().getWorldName()); @@ -326,7 +336,11 @@ public void activate() { for (Entry one : plugin.getResidenceManager().getResidences().entrySet()) { fireUpdateAdd(one.getValue(), one.getValue().getSubzoneDeep()); - handleResidenceAdd(one.getValue().getName(), one.getValue(), one.getValue().getSubzoneDeep()); + try { + handleResidenceAdd(one.getValue().getName(), one.getValue(), one.getValue().getSubzoneDeep()); + } catch (Throwable e) { + e.printStackTrace(); + } } } } From e702c2db62431c1c4c5fbf94d9e1df176d8e5e3b Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Oct 2021 15:59:26 +0300 Subject: [PATCH 0905/1142] Lets allow area manipulation with admin flag --- .../bukkit/residence/commands/expand.java | 14 ++--- .../protection/ClaimedResidence.java | 60 +++++++++---------- .../protection/ResidencePermissions.java | 8 ++- 3 files changed, 43 insertions(+), 39 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index c5a449c9b..f1eaabcd2 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -9,11 +9,13 @@ import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; public class expand implements cmd { @@ -37,18 +39,18 @@ else if (args.length == 2) { plugin.msg(player, lm.Invalid_Residence); return true; } - + if (res.getRaid().isRaidInitialized()) { plugin.msg(sender, lm.Raid_cantDo); return true; } - + if (res.isSubzone() && !resadmin && !ResPerm.command_expand_subzone.hasPermission(player, lm.Subzone_CantExpand)) return true; if (!res.isSubzone() && !resadmin && !ResPerm.command_$1.hasPermission(player, lm.Residence_CantExpandResidence, this.getClass().getSimpleName())) return true; - + String resName = res.getName(); CuboidArea area = null; String areaName = null; @@ -91,10 +93,8 @@ else if (args.length == 2) plugin.getSelectionManager().modify(player, false, amount); if (plugin.getSelectionManager().hasPlacedBoth(player)) { - if (plugin.getWorldEdit() != null) { - if (plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { - plugin.getSelectionManager().worldEdit(player); - } + if (plugin.getWorldEdit() != null && plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { + plugin.getSelectionManager().worldEdit(player); } res.replaceArea(player, plugin.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 8bdca8d1a..97da569e1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -59,6 +59,7 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; @@ -232,7 +233,7 @@ public void setMainResidence(boolean state) { } public boolean isSubzone() { - return parent == null ? false : true; + return getParent() == null ? false : true; } public int getSubzoneDeep() { @@ -241,8 +242,8 @@ public int getSubzoneDeep() { public int getSubzoneDeep(int deep) { deep++; - if (parent != null) { - return parent.getSubzoneDeep(deep); + if (getParent() != null) { + return getParent().getSubzoneDeep(deep); } return deep; } @@ -375,7 +376,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } return false; } - if (parent == null) { + if (getParent() == null) { String collideResidence = Residence.getInstance().getResidenceManager().checkAreaCollision(area, this); ClaimedResidence cRes = Residence.getInstance().getResidenceManager().getByName(collideResidence); if (cRes != null) { @@ -389,9 +390,9 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa return false; } } else { - String[] szs = parent.listSubzones(); + String[] szs = getParent().listSubzones(); for (String sz : szs) { - ClaimedResidence res = parent.getSubzone(sz); + ClaimedResidence res = getParent().getSubzone(sz); if (res != null && res != this) { if (res.checkCollision(area)) { if (player != null) { @@ -407,13 +408,13 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa Residence.getInstance().msg(player, lm.General_NoPermission); return false; } - if (parent != null) { - if (!parent.containsLoc(area.getHighLocation()) || !parent.containsLoc(area.getLowLocation())) { + if (getParent() != null) { + if (!getParent().containsLoc(area.getHighLocation()) || !getParent().containsLoc(area.getLowLocation())) { Residence.getInstance().msg(player, lm.Area_NotWithinParent); return false; } - if (!parent.getPermissions().hasResidencePermission(player, true) - && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { + if (!getParent().getPermissions().hasResidencePermission(player, true) + && !getParent().getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { Residence.getInstance().msg(player, lm.Residence_ParentNoPermission); return false; } @@ -456,7 +457,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa return false; } - if (chargeMoney && parent == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { + if (chargeMoney && getParent() == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { double chargeamount = area.getCost(group); if (!Residence.getInstance().getTransactionManager().chargeEconomyMoney(player, chargeamount)) { return false; @@ -491,7 +492,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole Residence.getInstance().msg(player, lm.Area_DiffWorld); return false; } - if (parent == null) { + if (getParent() == null) { String collideResidence = Residence.getInstance().getResidenceManager().checkAreaCollision(newarea, this); ClaimedResidence cRes = Residence.getInstance().getResidenceManager().getByName(collideResidence); if (cRes != null && player != null) { @@ -503,9 +504,9 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole return false; } } else { - String[] szs = parent.listSubzones(); + String[] szs = getParent().listSubzones(); for (String sz : szs) { - ClaimedResidence res = parent.getSubzone(sz); + ClaimedResidence res = getParent().getSubzone(sz); if (res != null && res != this) { if (res.checkCollision(newarea)) { if (player != null) { @@ -552,17 +553,18 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole } if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { + + if (!getPermissions().hasResidencePermission(player, true) && !getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue)) { Residence.getInstance().msg(player, lm.General_NoPermission); return false; } - if (parent != null) { - if (!parent.containsLoc(newarea.getHighLocation()) || !parent.containsLoc(newarea.getLowLocation())) { + if (getParent() != null) { + if (!getParent().containsLoc(newarea.getHighLocation()) || !getParent().containsLoc(newarea.getLowLocation())) { Residence.getInstance().msg(player, lm.Area_NotWithinParent); return false; } - if (!parent.getPermissions().hasResidencePermission(player, true) - && !parent.getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { + if (!getParent().getPermissions().hasResidencePermission(player, true) + && !getParent().getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { Residence.getInstance().msg(player, lm.Residence_ParentNoPermission); return false; } @@ -598,12 +600,10 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole return false; } - if (parent == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { + if (getParent() == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { double chargeamount = newarea.getCost(group) - oldarea.getCost(group); - if (chargeamount > 0) { - if (!Residence.getInstance().getTransactionManager().chargeEconomyMoney(player, chargeamount)) { - return false; - } + if (chargeamount > 0 && !Residence.getInstance().getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + return false; } } } @@ -835,8 +835,8 @@ public boolean containsLoc(Location loc) { Collection keys = areas.values(); for (CuboidArea key : keys) { if (key.containsLoc(loc)) { - if (parent != null) - return parent.containsLoc(loc); + if (getParent() != null) + return getParent().containsLoc(loc); return true; } } @@ -852,13 +852,13 @@ public String getTopParentName() { } public ClaimedResidence getTopParent() { - if (parent == null) + if (getParent() == null) return this; - return parent.getTopParent(); + return getParent().getTopParent(); } public boolean isTopArea() { - return parent == null; + return getParent() == null; } public boolean removeSubzone(String name) { @@ -1230,7 +1230,7 @@ public String[] getAreaList() { public int getZoneDepth() { int count = 0; - ClaimedResidence res = parent; + ClaimedResidence res = getParent(); while (res != null) { count++; res = res.getParent(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 81d0400fe..2c0cd85b9 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -26,6 +26,8 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import net.Zrips.CMILib.Logs.CMIDebug; + public class ResidencePermissions extends FlagPermissions { private UUID ownerUUID; @@ -284,8 +286,8 @@ public boolean hasResidencePermission(CommandSender sender, boolean requireOwner ClaimedResidence par = this.residence.getParent(); Player player = (Player) sender; - if (par != null) - if (par.getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue)) + + if (par != null && par.getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue)) return true; if (Residence.getInstance().getConfigManager().enabledRentSystem()) { @@ -301,9 +303,11 @@ public boolean hasResidencePermission(CommandSender sender, boolean requireOwner return (playerHas(player, Flags.admin, FlagCombo.OnlyTrue)); } } + if (requireOwner) { return (this.getOwner().equals(sender.getName())); } + return (playerHas(player, Flags.admin, FlagCombo.OnlyTrue) || this.getOwner().equals(sender.getName())); } From 1464aab5461c8ca24036f1f6051253a6ebdc0319 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Oct 2021 16:53:28 +0300 Subject: [PATCH 0906/1142] Once again updating res auto command --- .../bukkit/residence/ConfigManager.java | 2 +- .../bukkit/residence/commands/auto.java | 61 ++++++++++--------- 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index a1d23a9da..680955602 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -675,7 +675,7 @@ public void UpdateConfigFile() { "Value in blocks. While previous percentage will determine general size, this can be used to avoid having tiny residences", "For example if player has access to 30x30 residence and Percentage is set to 50% then instead of using 15 block size we will use 20 (default)", "Keep in mind that this will not override actual max/min residence sizes player can have"); - ARCSizeMin = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Min", 20); + ARCSizeMin = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Min", 5); ARCSizeMin = ARCSizeMin < 1 ? 1 : ARCSizeMin; c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Max", diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 5dba487f8..7d4c84799 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -53,7 +53,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } Residence.getInstance().getPlayerManager().getResidencePlayer(player).forceUpdateGroup(); - + Location loc = player.getLocation(); int minY = loc.getBlockY() - 1; @@ -68,8 +68,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.getSelectionManager().placeLoc2(player, loc.clone(), false); boolean result = resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true, lenght); - - + if (!result) { Residence.getInstance().msg(player, lm.Area_SizeLimit); return true; @@ -140,15 +139,29 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, int done = 0; int maxX = getMax(group.getMaxX()); - if (max < 0) - max = maxX; + int maxY = getMax(group.getMaxY()); + int maxZ = getMax(group.getMaxZ()); + + if (maxX > max && max > 0) + maxX = max; + if (maxY > max && max > 0) + maxY = max; + if (maxZ > max && max > 0) + maxZ = max; + + if (maxX <= 1) + maxX = (group.getMaxX() - group.getMinX()) / 2 + group.getMinX(); + + if (maxY <= 1) + maxY = (group.getMaxY() - group.getMinY()) / 2 + group.getMinY(); + + if (maxZ <= 1) + maxZ = (group.getMaxZ() - group.getMinZ()) / 2 + group.getMinZ(); while (true) { - if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { - if (dir.equals(direction.Top) || dir.equals(direction.Bottom)) { - dir = dir.getNext(); - continue; - } + if (Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (dir.equals(direction.Top) || dir.equals(direction.Bottom))) { + dir = dir.getNext(); + continue; } done++; @@ -198,21 +211,21 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, continue; } - if (max > 0 && max < c.getXSize() || c.getXSize() > group.getMaxX() - group.getMinX()) { + if (maxX > 0 && maxX < c.getXSize() || c.getXSize() > group.getMaxX()) { locked.add(dir); dir = dir.getNext(); skipped++; continue; } - if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (max > 0 && max < c.getYSize() || c.getYSize() > group.getMaxY() - group.getMinY())) { + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (maxY > 0 && maxY < c.getYSize() || c.getYSize() > group.getMaxY())) { locked.add(dir); dir = dir.getNext(); skipped++; continue; } - if (max > 0 && max < c.getZSize() || c.getZSize() > group.getMaxZ() - group.getMinZ()) { + if (maxZ > 0 && maxZ < c.getZSize() || c.getZSize() > group.getMaxZ()) { locked.add(dir); dir = dir.getNext(); skipped++; @@ -221,13 +234,11 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, skipped = 0; - if (checkBalance) { - if (plugin.getConfigManager().enableEconomy()) { - cost = c.getCost(group); - if (cost > balance) { - plugin.msg(player, lm.Economy_NotEnoughMoney); - break; - } + if (checkBalance && plugin.getConfigManager().enableEconomy()) { + cost = c.getCost(group); + if (cost > balance) { + plugin.msg(player, lm.Economy_NotEnoughMoney); + break; } } @@ -237,20 +248,12 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, dir = dir.getNext(); } - int x = group.getMinX(); - int y = group.getMinY(); - int z = group.getMinZ(); - - x = getMin(x, group.getMaxX()); - y = getMin(y, group.getMaxY()); - z = getMin(z, group.getMaxZ()); - plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); cuboid = plugin.getSelectionManager().getSelectionCuboid(player); - if (cuboid.getXSize() < x || cuboid.getYSize() < y || cuboid.getZSize() < z) { + if (cuboid.getXSize() > group.getMaxX() || cuboid.getYSize() > group.getMaxY() || cuboid.getZSize() > group.getMaxZ()) { return false; } From 3a4c4eb2594488dd508446258622a7b9f473b9bc Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Oct 2021 15:25:47 +0300 Subject: [PATCH 0907/1142] Powdered snow fix --- .../listeners/ResidenceBlockListener.java | 22 +++++++-- .../ResidencePlayerListener1_17.java | 45 ++++++++++++++++++- 2 files changed, 62 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 4c3bff82d..dcca4dbd2 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -12,6 +12,7 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; +import org.bukkit.block.data.BlockData; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -61,6 +62,7 @@ import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { @@ -612,9 +614,22 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { - - if (!canPlaceBlock(event.getPlayer(), event.getBlock(), true)) + if (!canPlaceBlock(event.getPlayer(), event.getBlock(), true)) { event.setCancelled(true); + + if (Version.isCurrentEqualOrHigher(Version.v1_17_R1) && event.getBlock().getType() == Material.POWDER_SNOW) { + + BlockData data = ResidencePlayerListener1_17.powder_snow.remove(event.getBlock().getLocation().toString()); + if (data != null) { + + Block blockUnder = event.getBlock().getLocation().clone().add(0, -1, 0).getBlock(); + + if (data.getMaterial().equals(blockUnder.getType())) { + blockUnder.setBlockData(data); + } + } + } + } } public static boolean canPlaceBlock(Player player, Block block, boolean informPlayer) { @@ -761,7 +776,7 @@ public void onBlockPistonExtend(BlockPistonExtendEvent event) { Location origins = event.getBlock().getLocation(); int lowestY = CMIWorld.getMaxHeight(origins.getWorld()); - int bigestY = CMIWorld.getMinHeight(origins.getWorld()); + int bigestY = CMIWorld.getMinHeight(origins.getWorld()); int lowestX = Integer.MAX_VALUE; int lowestZ = Integer.MAX_VALUE; int bigestX = -Integer.MAX_VALUE; @@ -940,6 +955,7 @@ public void onDispense(BlockDispenseEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLavaWaterFlow(BlockFromToEvent event) { + CMIDebug.d("BlockFromToEvent"); // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java index 4387c2afd..67a65c9c6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java @@ -1,12 +1,17 @@ package com.bekvon.bukkit.residence.listeners; +import java.util.LinkedHashMap; +import java.util.Map; + import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; @@ -28,6 +33,14 @@ public ResidencePlayerListener1_17(Residence plugin) { this.plugin = plugin; } + private static int MAX_ENTRIES = 50; + public static LinkedHashMap powder_snow = new LinkedHashMap(MAX_ENTRIES + 1, .75F, false) { + @Override + protected boolean removeEldestEntry(Map.Entry eldest) { + return size() > MAX_ENTRIES; + } + }; + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onPlayerInteractRespawn(PlayerInteractEvent event) { @@ -67,14 +80,42 @@ public void onPlayerInteractRespawn(PlayerInteractEvent event) { } if (item == null || item.getType().equals(Material.AIR)) - return; + return; boolean waxed = CMIMaterial.isWaxedCopper(mat); - if ((CMIMaterial.get(item).equals(CMIMaterial.HONEYCOMB) && !waxed || item.getType().toString().contains("_AXE") && CMIMaterial.getCopperStage(mat) > 1) && + if ((CMIMaterial.get(item).equals(CMIMaterial.HONEYCOMB) && !waxed || item.getType().toString().contains("_AXE") && CMIMaterial.getCopperStage(mat) > 1) && !res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.copper, FlagCombo.TrueOrNone) && !plugin.isResAdminOn(player)) { plugin.msg(player, lm.Residence_FlagDeny, Flags.copper, res.getName()); event.setCancelled(true); } } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onLandDryPhysics(BlockPhysicsEvent event) { + + // Disabling listener if flag disabled globally + if (!Flags.place.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + if (!event.getSourceBlock().getType().equals(Material.POWDER_SNOW) || event.getBlock().getType().equals(Material.AIR) || event.getBlock().getType().equals(Material.POWDER_SNOW)) + return; + + Block block = event.getBlock(); + if (block == null) + return; + + if (block.getLocation().getY() == event.getSourceBlock().getLocation().getY()) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (res == null) + return; + + powder_snow.put(event.getSourceBlock().getLocation().toString(), block.getBlockData().clone()); + + } } From 96a266443d29babed2f96409e71997323cbb2d6e Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Oct 2021 16:12:12 +0300 Subject: [PATCH 0908/1142] Preventing nether portal creation inside residence from opposite side --- .../bekvon/bukkit/residence/commands/rt.java | 3 - .../bukkit/residence/containers/lm.java | 1 + .../listeners/ResidenceBlockListener.java | 110 +++++++++++++++++- 3 files changed, 109 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 74b3406d2..6536bd64c 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -125,9 +125,6 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.getRandomTpManager().performInstantTp(lc, player); }, 1); - - CMIDebug.d(lc.toVector().toString()); - return null; }); diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 5f8852fa1..e98e0fb03 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -29,6 +29,7 @@ public enum lm { Invalid_Page("&eInvalid Page..."), Invalid_Help("&cInvalid Help Page..."), Invalid_NameCharacters("&cName contained unallowed characters..."), + Invalid_PortalDestination("&cPortal destination is in restricted zone. Portal creation canceled. &7Find new location"), Invalid_FromConsole("&cYou can only use this in the console!"), Invalid_Ingame("&cYou can only use this in game!"), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index dcca4dbd2..f2a9dfdcd 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -9,6 +9,7 @@ import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; @@ -39,10 +40,13 @@ import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.world.PortalCreateEvent; +import org.bukkit.event.world.PortalCreateEvent.CreateReason; import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.Vector; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; @@ -62,7 +66,6 @@ import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { @@ -955,7 +958,7 @@ public void onDispense(BlockDispenseEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLavaWaterFlow(BlockFromToEvent event) { - CMIDebug.d("BlockFromToEvent"); + // disabling event on world if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; @@ -999,6 +1002,109 @@ public void onBlockBurn(BlockBurnEvent event) { event.setCancelled(true); } + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onBlockBurn(PortalCreateEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.build.isGlobalyEnabled()) + return; + + World world = null; + try { + world = event.getBlocks().get(0).getWorld(); + } catch (Throwable e) { + e.printStackTrace(); + } + + // disabling event on world + if (plugin.isDisabledWorldListener(world)) + return; + + if (!event.getReason().equals(CreateReason.NETHER_PAIR)) + return; + + Player player = null; + // Crude attempt to get player object. Older versions will create exception of missing method + try { + if (event.getEntity() instanceof Player) + player = (Player) event.getEntity(); + } catch (Throwable e) { + } + + ArrayList corners = getNetherPortalCorners(event); + + for (Vector one : corners) { + boolean hasBuild = true; + if (player != null) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(new Location(world, one.getX(), one.getY(), one.getZ())); + hasBuild = res.getPermissions().playerHas(player, Flags.build, FlagCombo.TrueOrNone); + if (!hasBuild) { + plugin.msg(player, lm.Invalid_PortalDestination); + } + } else { + FlagPermissions perms = plugin.getPermsByLoc(new Location(world, one.getX(), one.getY(), one.getZ())); + hasBuild = perms.has(Flags.build, true); + } + if (!hasBuild) { + event.setCancelled(true); + return; + } + } + } + + @SuppressWarnings("unchecked") + private static ArrayList getNetherPortalCorners(PortalCreateEvent e) { + ArrayList locs = new ArrayList(); + + List ls = new ArrayList<>(); + try { + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) + ls = (ArrayList) e.getClass().getMethod("getBlocks").invoke(e); + else + ls = (ArrayList) e.getClass().getMethod("getBlocks").invoke(e); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { + e1.printStackTrace(); + } + + int lowestY = 255; + int bigestY = -255; + int lowestX = Integer.MAX_VALUE; + int lowestZ = Integer.MAX_VALUE; + int bigestX = -Integer.MAX_VALUE; + int bigestZ = -Integer.MAX_VALUE; + + for (int i = 0; i < ls.size(); i++) { + Object ob = ls.get(i); + + Location one = Version.isCurrentEqualOrHigher(Version.v1_14_R1) ? ((BlockState) ob).getLocation() : ((Block) ob).getLocation(); + + if (one.getBlockY() < lowestY) + lowestY = one.getBlockY(); + if (one.getBlockX() < lowestX) + lowestX = one.getBlockX(); + if (one.getBlockZ() < lowestZ) + lowestZ = one.getBlockZ(); + + if (one.getBlockY() > bigestY) + bigestY = one.getBlockY(); + if (one.getBlockX() > bigestX) + bigestX = one.getBlockX(); + if (one.getBlockZ() > bigestZ) + bigestZ = one.getBlockZ(); + } + + int height = Math.abs(bigestY - lowestY); + height = height < 0 ? -height : height; + + // If height is 1 then its not a nether portal + if (height < 2) + return locs; + + locs.add(new Vector(lowestX, lowestY, lowestZ)); + locs.add(new Vector(bigestX, bigestY, bigestZ)); + + return locs; + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockIgnite(BlockIgniteEvent event) { // disabling event on world From f277868cde1cbabf2ec67cd66b56adc61c7ff8e0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Oct 2021 16:15:32 +0300 Subject: [PATCH 0909/1142] Moss block and bone meal usage fix --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 92f54c0ab..329f59f30 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1043,10 +1043,10 @@ public void onPlayerEnderCrystalInteract(PlayerInteractEvent event) { if (iih == null) return; - + if (!iih.getType().toString().equals("END_CRYSTAL")) return; - + if (player.hasMetadata("NPC")) return; if (plugin.isResAdminOn(player)) @@ -1276,7 +1276,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (heldItem.isDye()) { CMIMaterial btype = CMIMaterial.get(block); if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || btype == CMIMaterial.GRASS || btype.isSapling()) || - heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD) { + heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD || btype == CMIMaterial.MOSS_BLOCK) { FlagPermissions tperms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!tperms.playerHas(player, Flags.build, true)) { plugin.msg(player, lm.Flag_Deny, Flags.build); From d5501a7d0c50fcbee440658c440dddcbd2c04ba7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Oct 2021 16:26:49 +0300 Subject: [PATCH 0910/1142] removeworld additional variable to except players separator as , can be used to include multiple players, player name or uuid can be used. --- .../residence/commands/removeworld.java | 26 ++++++++++++++++--- .../protection/ResidenceManager.java | 14 +++++++++- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/removeworld.java b/src/com/bekvon/bukkit/residence/commands/removeworld.java index c38fdbdb8..1f88f1964 100644 --- a/src/com/bekvon/bukkit/residence/commands/removeworld.java +++ b/src/com/bekvon/bukkit/residence/commands/removeworld.java @@ -1,6 +1,9 @@ package com.bekvon.bukkit.residence.commands; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; +import java.util.UUID; import org.bukkit.ChatColor; import org.bukkit.command.BlockCommandSender; @@ -19,13 +22,30 @@ public class removeworld implements cmd { @CommandAnnotation(simple = false, priority = 5200) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (args.length != 1) + if (args.length != 1 && args.length != 2) return false; if (sender instanceof Player || sender instanceof BlockCommandSender) { sender.sendMessage(ChatColor.RED + "MUST be run from console."); return false; } - plugin.getResidenceManager().removeAllFromWorld(sender, args[0]); + + List playerExceptions = new ArrayList(); + if (args.length == 2) { + for (String one : args[1].split(",")) { + // Not lowercasing UUID's + if (one.length() == 36) { + try { + if (UUID.fromString(one) != null) + playerExceptions.add(one); + } catch (Throwable e) { + playerExceptions.add(one.toLowerCase()); + } + } else + playerExceptions.add(one.toLowerCase()); + } + } + + plugin.getResidenceManager().removeAllFromWorld(sender, args[0], playerExceptions); return true; } @@ -34,7 +54,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Removes all residences from particular world"); - c.get("Info", Arrays.asList("&eUsage: &6/res removeworld [worldName]")); + c.get("Info", Arrays.asList("&eUsage: &6/res removeworld [worldName] (playerExceptions)")); LocaleManager.addTabCompleteMain(this, "[worldname]"); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 23f1a1254..9650e347a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1231,11 +1231,23 @@ public void giveResidence(Player reqPlayer, String targPlayer, ClaimedResidence } public void removeAllFromWorld(CommandSender sender, String world) { + removeAllFromWorld(sender, world, null); + } + + public void removeAllFromWorld(CommandSender sender, String world, List playerExceptions) { int count = 0; Iterator it = residences.values().iterator(); while (it.hasNext()) { ClaimedResidence next = it.next(); - if (next.getWorld().equals(world)) { + + if (next.getPermissions().getWorldName().equals(world)) { + if (playerExceptions != null && !playerExceptions.isEmpty()) { + if (playerExceptions.contains(next.getOwner().toLowerCase())) + continue; + + if (playerExceptions.contains(next.getOwnerUUID().toString())) + continue; + } it.remove(); count++; } From d44c425035bc8f095ec247c098be0d37d68c707a Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Oct 2021 16:33:29 +0300 Subject: [PATCH 0911/1142] Lets inform when /res auto result collides with another residence --- src/com/bekvon/bukkit/residence/commands/auto.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 7d4c84799..ed063e0dd 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -17,9 +17,11 @@ import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; public class auto implements cmd { @@ -74,6 +76,13 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } + ClaimedResidence collision = Residence.getInstance().getResidenceManager().collidesWithResidence(plugin.getSelectionManager().getSelectionCuboid(player)); + + if (collision != null) { + Residence.getInstance().msg(player, lm.Area_Collision, collision.getResidenceName()); + return null; + } + if (plugin.getResidenceManager().getByName(resName) != null) { for (int i = 1; i < 50; i++) { String tempName = resName + plugin.getConfigManager().ARCIncrementFormat().replace("[number]", i + ""); From 7e088c10be4ab48f3c90b0c7336a17051e7babf3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Oct 2021 16:39:24 +0300 Subject: [PATCH 0912/1142] Raid defender list for raid start events --- .../bukkit/residence/event/ResidenceRaidPreStartEvent.java | 5 +++++ .../bukkit/residence/event/ResidenceRaidStartEvent.java | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceRaidPreStartEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceRaidPreStartEvent.java index bc3032f15..cf31e20bb 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceRaidPreStartEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceRaidPreStartEvent.java @@ -9,6 +9,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.raid.RaidAttacker; +import com.bekvon.bukkit.residence.raid.RaidDefender; public class ResidenceRaidPreStartEvent extends Event implements Cancellable { @@ -49,4 +50,8 @@ public ClaimedResidence getRes() { public HashMap getAttackers() { return attackers; } + + public HashMap getDefenders() { + return res.getRaid().getDefenders(); + } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceRaidStartEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceRaidStartEvent.java index 2c4804a56..af11e2739 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceRaidStartEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceRaidStartEvent.java @@ -9,6 +9,7 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.raid.RaidAttacker; +import com.bekvon.bukkit.residence.raid.RaidDefender; public class ResidenceRaidStartEvent extends Event implements Cancellable { @@ -39,6 +40,7 @@ public boolean isCancelled() { @Override public void setCancelled(boolean bln) { + cancelled = bln; } @@ -49,4 +51,8 @@ public ClaimedResidence getRes() { public HashMap getAttackers() { return attackers; } + + public HashMap getDefenders() { + return res.getRaid().getDefenders(); + } } From 2fb146dc64aa27d8f72c35fc24e35856fef67d2d Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Oct 2021 22:28:33 +0300 Subject: [PATCH 0913/1142] Loaded group amount feedback message --- .../bekvon/bukkit/residence/permissions/PermissionManager.java | 3 +++ src/plugin.yml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index d6c000265..787a5311e 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -186,6 +186,9 @@ private void readConfig() { if (!groups.containsKey(defaultGroup)) { groups.put(defaultGroup, new PermissionGroup(defaultGroup)); } + + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded (" + groups.size() + ") groups"); + if (groupsFile.isConfigurationSection("GroupAssignments")) { Set keys = groupsFile.getConfigurationSection("GroupAssignments").getKeys(false); if (keys != null) { diff --git a/src/plugin.yml b/src/plugin.yml index cf33aa1c2..702501041 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.0.3 +version: 5.0.0.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 0243039a115a7779bd0be85f11170333743dd0e9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 6 Dec 2021 12:37:36 +0200 Subject: [PATCH 0914/1142] Height limit update Tabcomplete for tool command --- src/com/bekvon/bukkit/residence/ConfigManager.java | 6 +++--- src/com/bekvon/bukkit/residence/commands/tool.java | 3 +++ .../residence/listeners/ResidenceBlockListener.java | 4 ++-- .../residence/permissions/PermissionGroup.java | 6 ++++-- .../residence/protection/ClaimedResidence.java | 13 +++++++------ .../residence/selection/SelectionManager.java | 6 +++--- src/groups.yml | 8 ++++---- 7 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 680955602..a18321eaa 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -614,12 +614,12 @@ public void UpdateConfigFile() { c.addComment("Global.Selection.netherHeight", "Defines height of nether when creating residences. This mostly applies when performing commands like /res select vert or /res auto which will expand residence to defined height", - "This cant be higher than 255 or lower than 1"); + "This cant be higher than 319 or lower than 1"); SelectionNetherHeight = c.get("Global.Selection.netherHeight", 128); - SelectionNetherHeight = SelectionNetherHeight > 255 ? 255 : SelectionNetherHeight < 1 ? 1 : SelectionNetherHeight; + SelectionNetherHeight = SelectionNetherHeight > 319 ? 319 : SelectionNetherHeight < 1 ? 1 : SelectionNetherHeight; c.addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", - "This will lower residence price by up to 255 times, so adjust block price BEFORE enabling this"); + "This will lower residence price by up to 319 times, so adjust block price BEFORE enabling this"); NoCostForYBlocks = c.get("Global.Selection.NoCostForYBlocks", false); c.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index 716bb3099..ad58a4450 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -5,6 +5,8 @@ import org.bukkit.command.CommandSender; import net.Zrips.CMILib.FileHandler.ConfigReader; + +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -27,5 +29,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Shows residence selection and info tool names"); c.get("Info", Arrays.asList("&eUsage: &6/res tool")); + LocaleManager.addTabCompleteMain(this); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index f2a9dfdcd..6dd280c08 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -1065,8 +1065,8 @@ private static ArrayList getNetherPortalCorners(PortalCreateEvent e) { e1.printStackTrace(); } - int lowestY = 255; - int bigestY = -255; + int lowestY = CMIWorld.getMaxHeight(e.getWorld()); + int bigestY = -lowestY; int lowestX = Integer.MAX_VALUE; int lowestZ = Integer.MAX_VALUE; int bigestX = -Integer.MAX_VALUE; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index a142ca440..d16b7970c 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -18,6 +18,8 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import net.Zrips.CMILib.Container.CMIWorld; + public class PermissionGroup { private int xmax = 0; private int ymax = 0; @@ -135,7 +137,7 @@ private void parseGroup(ConfigurationSection limits) { if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { ymin = 0; // This needs to be 256 to include entire height where 255 and block 0 - ymax = 256; + ymax = CMIWorld.getMaxHeight(Bukkit.getWorlds().get(0)); } if (limits.contains("Residence.MaxNorthSouth")) @@ -148,7 +150,7 @@ private void parseGroup(ConfigurationSection limits) { minHeight = limits.getInt("Residence.MinHeight", 0); // This needs to be 256 to include entire height where 255 and block 0 if (limits.contains("Residence.MaxHeight")) - maxHeight = limits.getInt("Residence.MaxHeight", 256); + maxHeight = limits.getInt("Residence.MaxHeight", CMIWorld.getMaxHeight(Bukkit.getWorlds().get(0))); if (limits.contains("Residence.CanTeleport")) tpaccess = limits.getBoolean("Residence.CanTeleport", false); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 97da569e1..819d0b219 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -57,6 +57,7 @@ import com.bekvon.bukkit.residence.utils.Utils; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Logs.CMIDebug; @@ -1295,11 +1296,11 @@ public int isSafeTp(Player player) { return 0; Location tempLoc = this.getTeleportLocation(player).clone(); - + int fallDistance = 0; - for (int i = (int) tempLoc.getY(); i >= 0; i--) { + for (int i = (int) tempLoc.getY(); i >= CMIWorld.getMinHeight(tempLoc.getWorld()); i--) { if (i == 0) { - fallDistance = 255; + fallDistance = 555; break; } tempLoc.setY(i); @@ -1309,7 +1310,7 @@ public int isSafeTp(Player player) { } else { if (CMIMaterial.get(block).isLava()) { - fallDistance = 256; + fallDistance = 556; } break; @@ -1359,9 +1360,9 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r if (old == null || !old.equals(this)) { int distance = isSafeTp(reqPlayer); if (distance > 6) { - if (distance == 256) + if (distance == 556) Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirmLava, distance); - else if (distance == 255) + else if (distance == 555) Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirmVoid, distance); else Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirm, distance); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index b8221e3a3..3c2f701a1 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -289,7 +289,7 @@ public CuboidArea getResizedArea() { private int getMaxWorldHeight(World world) { if (world == null) - return 255; + return 319; switch (world.getEnvironment()) { case NETHER: return plugin.getConfigManager().getSelectionNetherHeight(); @@ -299,7 +299,7 @@ private int getMaxWorldHeight(World world) { try { return CMIWorld.getMaxHeight(world) - 1; } catch (Throwable e) { - return 255; + return 319; } default: break; @@ -308,7 +308,7 @@ private int getMaxWorldHeight(World world) { try { return CMIWorld.getMaxHeight(world) - 1; } catch (Throwable e) { - return 255; + return 319; } } diff --git a/src/groups.yml b/src/groups.yml index f4b63a909..41a3e318b 100644 --- a/src/groups.yml +++ b/src/groups.yml @@ -22,13 +22,13 @@ Groups: # (Optional) The minimum number of blocks a Residence can be, North to South (Z). MinNorthSouth: 3 # The maximum number of blocks a Residence can be, High to Low (Y). - MaxUpDown: 255 + MaxUpDown: 320 # (Optional) The minimum number of blocks a Residence can be, High to Low (Y). MinUpDown: 3 # The lowest altitude this group is allowed to protect. MinHeight: 0 # The highest altitude this group is allowed to protect. - MaxHeight: 255 + MaxHeight: 320 # The maximum amount of subzones can current area have. MaxSubzonesInArea: 3 # The maximum recursive depth that subzones can go. @@ -44,7 +44,7 @@ Groups: # (Optional) The minimum number of blocks a Residence Subzone can be, North to South (Z). SubzoneMinNorthSouth: 3 # (Optional) The maximum number of blocks a Residence Subzone can be, High to Low (Y). - SubzoneMaxUpDown: 255 + SubzoneMaxUpDown: 320 # (Optional) The minimum number of blocks a Residence Subzone can be, High to Low (Y). SubzoneMinUpDown: 3 # Whether or not to allow teleporting to Residences. @@ -135,7 +135,7 @@ Groups: MaxNorthSouth: 20 MaxUpDown: 20 MinHeight: 0 - MaxHeight: 255 + MaxHeight: 320 SubzoneDepth: 3 CanTeleport: true Unstuck: true From 5e3812d44fde904abba0a3e81ab02e7325ff94f7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 6 Dec 2021 13:36:52 +0200 Subject: [PATCH 0915/1142] auto command fix --- .../bekvon/bukkit/residence/commands/auto.java | 16 +++++++++------- .../residence/permissions/PermissionGroup.java | 2 +- .../residence/protection/ClaimedResidence.java | 6 +++--- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index ed063e0dd..ea54bb722 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -20,8 +20,8 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Logs.CMIDebug; public class auto implements cmd { @@ -77,7 +77,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } ClaimedResidence collision = Residence.getInstance().getResidenceManager().collidesWithResidence(plugin.getSelectionManager().getSelectionCuboid(player)); - + if (collision != null) { Residence.getInstance().msg(player, lm.Area_Collision, collision.getResidenceName()); return null; @@ -166,6 +166,8 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, if (maxZ <= 1) maxZ = (group.getMaxZ() - group.getMinZ()) / 2 + group.getMinZ(); + + int minY = CMIWorld.getMinHeight(cuboid.getWorld()); while (true) { if (Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (dir.equals(direction.Top) || dir.equals(direction.Bottom))) { @@ -193,8 +195,8 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, c.setLowLocation(cuboid.getLowLocation().clone().add(-dir.getLow().getX(), -dir.getLow().getY(), -dir.getLow().getZ())); c.setHighLocation(cuboid.getHighLocation().clone().add(dir.getHigh().getX(), dir.getHigh().getY(), dir.getHigh().getZ())); - if (c.getLowVector().getY() < 0) { - c.getLowVector().setY(0); + if (c.getLowVector().getY() < minY) { + c.getLowVector().setY(minY); locked.add(dir); dir = dir.getNext(); if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { @@ -227,9 +229,9 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, continue; } - if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (maxY > 0 && maxY < c.getYSize() || c.getYSize() > group.getMaxY())) { + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (maxY > 0 && maxY < c.getYSize() || c.getYSize() > group.getMaxY() + (-group.getMinY()))) { locked.add(dir); - dir = dir.getNext(); + dir = dir.getNext(); skipped++; continue; } @@ -262,7 +264,7 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, cuboid = plugin.getSelectionManager().getSelectionCuboid(player); - if (cuboid.getXSize() > group.getMaxX() || cuboid.getYSize() > group.getMaxY() || cuboid.getZSize() > group.getMaxZ()) { + if (cuboid.getXSize() > group.getMaxX() || cuboid.getYSize() > group.getMaxY() + (-group.getMinY()) || cuboid.getZSize() > group.getMaxZ()) { return false; } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index d16b7970c..cecf20615 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -135,7 +135,7 @@ private void parseGroup(ConfigurationSection limits) { ymin = ymin > ymax ? ymax : ymin; if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { - ymin = 0; + ymin = CMIWorld.getMinHeight(Bukkit.getWorlds().get(0)); // This needs to be 256 to include entire height where 255 and block 0 ymax = CMIWorld.getMaxHeight(Bukkit.getWorlds().get(0)); } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 819d0b219..38ef6be50 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -298,7 +298,7 @@ public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin Residence.getInstance().msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); return false; } - if (area.getYSize() > group.getMaxY()) { + if (area.getYSize() > group.getMaxY() + (-group.getMinY())) { Residence.getInstance().msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); return false; } @@ -318,7 +318,7 @@ public boolean isSmallerThanMaxSubzone(Player player, CuboidArea area, boolean r Residence.getInstance().msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); return false; } - if (area.getYSize() > group.getSubzoneMaxY()) { + if (area.getYSize() > group.getSubzoneMaxY() + (-group.getSubzoneMinY())) { Residence.getInstance().msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); return false; } @@ -1296,7 +1296,7 @@ public int isSafeTp(Player player) { return 0; Location tempLoc = this.getTeleportLocation(player).clone(); - + int fallDistance = 0; for (int i = (int) tempLoc.getY(); i >= CMIWorld.getMinHeight(tempLoc.getWorld()); i--) { if (i == 0) { From fc9c40f07a293140a52b6c97541e7391ecbc1027 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 6 Dec 2021 13:41:45 +0200 Subject: [PATCH 0916/1142] Nether portal permission check fix --- .../residence/listeners/ResidenceBlockListener.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 6dd280c08..dae1e85fc 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -1036,9 +1036,11 @@ public void onBlockBurn(PortalCreateEvent event) { boolean hasBuild = true; if (player != null) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(new Location(world, one.getX(), one.getY(), one.getZ())); - hasBuild = res.getPermissions().playerHas(player, Flags.build, FlagCombo.TrueOrNone); - if (!hasBuild) { - plugin.msg(player, lm.Invalid_PortalDestination); + if (res != null) { + hasBuild = res.getPermissions().playerHas(player, Flags.build, FlagCombo.TrueOrNone); + if (!hasBuild) { + plugin.msg(player, lm.Invalid_PortalDestination); + } } } else { FlagPermissions perms = plugin.getPermsByLoc(new Location(world, one.getX(), one.getY(), one.getZ())); From a5448aef9ee164a75a7972285cf2f551713f6d27 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 6 Dec 2021 15:12:21 +0200 Subject: [PATCH 0917/1142] Version up --- src/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugin.yml b/src/plugin.yml index 702501041..9bde1787e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.0.4 +version: 5.0.1.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 331010711ff7d7371740389d74b49ff2e7f0bd92 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 14 Jan 2022 13:14:45 +0200 Subject: [PATCH 0918/1142] Default groups.yml should go with -64 for Y axis --- src/groups.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/groups.yml b/src/groups.yml index 41a3e318b..463bdbfa3 100644 --- a/src/groups.yml +++ b/src/groups.yml @@ -26,7 +26,7 @@ Groups: # (Optional) The minimum number of blocks a Residence can be, High to Low (Y). MinUpDown: 3 # The lowest altitude this group is allowed to protect. - MinHeight: 0 + MinHeight: -64 # The highest altitude this group is allowed to protect. MaxHeight: 320 # The maximum amount of subzones can current area have. @@ -134,7 +134,7 @@ Groups: MaxEastWest: 20 MaxNorthSouth: 20 MaxUpDown: 20 - MinHeight: 0 + MinHeight: -64 MaxHeight: 320 SubzoneDepth: 3 CanTeleport: true From 74ced3933db8458f93001f6fb3d52ab9f906c193 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 14 Jan 2022 13:27:32 +0200 Subject: [PATCH 0919/1142] Lets move /res rt into sync for older servers --- .../bekvon/bukkit/residence/commands/rt.java | 45 +++++++++++-------- .../bukkit/residence/utils/RandomTp.java | 8 +++- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 6536bd64c..0fb460720 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -18,7 +18,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Logs.CMIDebug; +import net.Zrips.CMILib.Version.Version; public class rt implements cmd { @@ -104,30 +104,37 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo World worldName = wname; Player player = tPlayer; - CompletableFuture aloc = plugin.getRandomTpManager().getRandomlocationAsync(worldName); + if (Version.isCurrentEqualOrLower(Version.v1_12_R1)) { + Location lc = plugin.getRandomTpManager().getRandomlocationSync(worldName); + teleport(sender, player, lc, sec, resadmin); + } else { + CompletableFuture aloc = plugin.getRandomTpManager().getRandomlocationAsync(worldName); + aloc.thenApply(lc -> { + return teleport(sender, player, lc, sec, resadmin); + }); + } - aloc.thenApply(lc -> { + return true; + } - plugin.getRandomTeleportMap().put(player.getName(), System.currentTimeMillis()); + private static boolean teleport(CommandSender sender, Player player, Location lc, int sec, boolean resadmin) { - if (lc == null) { - plugin.msg(sender, lm.RandomTeleport_IncorrectLocation, sec); - return true; - } + Residence.getInstance().getRandomTeleportMap().put(player.getName(), System.currentTimeMillis()); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - - if (plugin.getConfigManager().getTeleportDelay() > 0 && !resadmin && !ResPerm.randomtp_delaybypass.hasPermission(sender, false)) { - plugin.msg(player, lm.RandomTeleport_TeleportStarted, lc.getX(), lc.getY(), lc.getZ(), plugin.getConfigManager().getTeleportDelay()); - plugin.getTeleportDelayMap().add(player.getName()); - plugin.getRandomTpManager().performDelaydTp(lc, player); - } else - plugin.getRandomTpManager().performInstantTp(lc, player); + if (lc == null) { + Residence.getInstance().msg(sender, lm.RandomTeleport_IncorrectLocation, sec); + return true; + } - }, 1); - return null; - }); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), () -> { + if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !resadmin && !ResPerm.randomtp_delaybypass.hasPermission(sender, false)) { + Residence.getInstance().msg(player, lm.RandomTeleport_TeleportStarted, lc.getX(), lc.getY(), lc.getZ(), Residence.getInstance().getConfigManager().getTeleportDelay()); + Residence.getInstance().getTeleportDelayMap().add(player.getName()); + Residence.getInstance().getRandomTpManager().performDelaydTp(lc, player); + } else + Residence.getInstance().getRandomTpManager().performInstantTp(lc, player); + }, 1); return true; } diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 43a13ab61..312bd038a 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -144,6 +144,10 @@ public Location getRandomlocation(World world) { Random randomX = new Random(System.currentTimeMillis()); Random randomZ = new Random(System.nanoTime()); + public Location getRandomlocationSync(World world) { + return get(world); + } + public CompletableFuture getRandomlocationAsync(World world) { return CompletableFuture.supplyAsync(() -> get(world)); } @@ -211,7 +215,7 @@ private Location get(World world) { if (loc.getWorld().getEnvironment().equals(Environment.NETHER)) { loc.setY(CMIWorld.getMaxHeight(loc.getWorld()) / 2); } else { - if (Version.isPaper()) { + if (Version.isPaper() && Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { CompletableFuture chunkFuture = PaperLib.getChunkAtAsync(loc, true); Chunk chunk = chunkFuture.get(); int y = chunk.getChunkSnapshot().getHighestBlockYAt(loc.getBlockX() & 0xF, loc.getBlockZ() & 0xF) - 1; @@ -265,7 +269,7 @@ private static Location getDownLocationSimple(Location oloc) { loc.setY(loc.getBlockY()); if (!oloc.getWorld().getEnvironment().equals(Environment.NETHER)) { - if (Version.isPaper()) { + if (Version.isPaper() && Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { CompletableFuture chunkFuture = PaperLib.getChunkAtAsync(loc, true); Chunk chunk = chunkFuture.get(); int y = chunk.getChunkSnapshot().getHighestBlockYAt(loc.getBlockX() & 0xF, loc.getBlockZ() & 0xF) - 1; From 13e0b0e646607d6a6a32a81ab9b2e22e345f1d31 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 14 Jan 2022 13:44:02 +0200 Subject: [PATCH 0920/1142] Animal damage prevention with harming splash potions --- .../bukkit/residence/allNms/v1_9Events.java | 3 ++- .../listeners/ResidenceEntityListener.java | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index 86a9e2f8f..7fe0fbbb0 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -18,12 +18,13 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import net.Zrips.CMILib.Logs.CMIDebug; + public class v1_9Events implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { ProjectileHitEvent ev = event; - ThrownPotion potion = (ThrownPotion) ev.getEntity(); // disabling event on world diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index ea81b741e..beaccc670 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -1049,14 +1049,26 @@ public void onSplashPotion(PotionSplashEvent event) { } } } + if (!harmfull) return; Entity ent = event.getEntity(); boolean srcpvp = plugin.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + boolean animalKilling = plugin.getPermsByLoc(ent.getLocation()).has(Flags.animalkilling, FlagCombo.TrueOrNone); Iterator it = event.getAffectedEntities().iterator(); + boolean animalDamage = false; while (it.hasNext()) { LivingEntity target = it.next(); + + if (Utils.isAnimal(target)) { + if (!animalKilling) { + event.setIntensity(target, 0); + animalDamage = true; + } + continue; + } + if (target.getType() != EntityType.PLAYER) continue; Boolean tgtpvp = plugin.getPermsByLoc(target.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); @@ -1084,6 +1096,10 @@ public void onSplashPotion(PotionSplashEvent event) { } } } + + if (!animalKilling && animalDamage && shooter instanceof Player) { + Residence.getInstance().msg((Player) shooter, lm.Flag_Deny, Flags.animalkilling); + } } @EventHandler(priority = EventPriority.LOWEST) From ee7d868932bdd5944310f14cbab46d48cc2f998d Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 14 Jan 2022 16:01:56 +0200 Subject: [PATCH 0921/1142] Selection custom event --- .../bukkit/residence/commands/expand.java | 5 +- .../ResidenceSelectionVisualizationEvent.java | 51 +++++++++++++++++++ .../residence/selection/SelectionManager.java | 10 +++- 3 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/event/ResidenceSelectionVisualizationEvent.java diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index f1eaabcd2..05641f4e4 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -5,17 +5,16 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; -import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; -import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + +import net.Zrips.CMILib.FileHandler.ConfigReader; public class expand implements cmd { diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceSelectionVisualizationEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceSelectionVisualizationEvent.java new file mode 100644 index 000000000..37cf0c983 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/event/ResidenceSelectionVisualizationEvent.java @@ -0,0 +1,51 @@ +package com.bekvon.bukkit.residence.event; + +import java.util.List; + +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +import com.bekvon.bukkit.residence.protection.CuboidArea; + +public final class ResidenceSelectionVisualizationEvent extends PlayerEvent implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancel = false; + private List areas; + private List errorAreas; + + public ResidenceSelectionVisualizationEvent(Player player, List areas, List errorAreas) { + super(player); + this.areas = areas; + this.errorAreas = errorAreas; + } + + public final static HandlerList getHandlerList() { + return handlers; + } + + @Override + public final HandlerList getHandlers() { + return handlers; + } + + @Override + public final void setCancelled(final boolean cancel) { + this.cancel = cancel; + } + + @Override + public final boolean isCancelled() { + return cancel; + } + + public List getAreas() { + return areas; + } + + public List getErrorAreas() { + return errorAreas; + } +} diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 3c2f701a1..493e9bd3d 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -19,11 +19,13 @@ import org.bukkit.permissions.PermissionDefault; import org.bukkit.util.Vector; +import com.Zrips.CMI.events.CMISelectionEvent; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.SelectionSides; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.event.ResidenceSelectionVisualizationEvent; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -244,7 +246,7 @@ public void selectChunk() { int zcoord = chunk.getZ() * 16; int xmax = xcoord + 15; int zmax = zcoord + 15; - + this.setBaseLoc1(new Location(player.getWorld(), xcoord, this.getMinYAllowed(), zcoord)); this.setBaseLoc2(new Location(player.getWorld(), xmax, this.getMaxYAllowed(), zmax)); plugin.msg(player, lm.Select_Success); @@ -526,6 +528,12 @@ public void showBounds(final Player player, final Visualizer v) { tv.cancelAll(); } + ResidenceSelectionVisualizationEvent ev = new ResidenceSelectionVisualizationEvent(player, v.getAreas(), v.getErrorAreas()); + Bukkit.getPluginManager().callEvent(ev); + + if (ev.isCancelled()) + return; + vMap.put(player.getUniqueId(), v); if (!plugin.isEnabled()) return; From 713d4dd330a44c0287bee20df9a9d8394de7bd62 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 14 Jan 2022 16:12:42 +0200 Subject: [PATCH 0922/1142] Item dropper fix --- .../bukkit/residence/listeners/ResidenceBlockListener.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index dae1e85fc..4710fd19a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -66,6 +66,7 @@ import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { @@ -929,6 +930,9 @@ public void onDispense(BlockDispenseEvent event) { return; Location location = new Location(event.getBlock().getWorld(), event.getVelocity().getBlockX(), event.getVelocity().getBlockY(), event.getVelocity().getBlockZ()); + Location loc = event.getBlock().getLocation(); + + location.add(loc.clone()); ClaimedResidence targetres = plugin.getResidenceManager().getByLoc(location); From bd94df9cd648ec252eed4421c5ecb64e44606a2b Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 14 Jan 2022 16:30:57 +0200 Subject: [PATCH 0923/1142] Fix for missing area name while removing one --- src/com/bekvon/bukkit/residence/ConfigManager.java | 3 ++- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index a18321eaa..8624ba130 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -936,7 +936,8 @@ public void UpdateConfigFile() { TNTExplodeBelowLevel = c.get("Global.AntiGreef.TNT.level", 62); // Creeper explosions below 63 c.addComment("Global.AntiGreef.Creeper.ExplodeBelow", "When set to true will allow Creeper explode below 62 (default) level outside of residence", - "This will give more realistic game play"); + "This will give more realistic game play", + "For this to work properly you will need to disable creeper explosion in the world in general. This can be done in flags file under global world section"); CreeperExplodeBelow = c.get("Global.AntiGreef.Creeper.ExplodeBelow", false); CreeperExplodeBelowLevel = c.get("Global.AntiGreef.Creeper.level", 62); // Flow diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 38ef6be50..f7b421441 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1489,7 +1489,7 @@ public void removeArea(Player player, String id, boolean resadmin) { removeArea(id); if (player != null) - Residence.getInstance().msg(player, lm.Area_Remove); + Residence.getInstance().msg(player, lm.Area_Remove, id); } else { if (player != null) Residence.getInstance().msg(player, lm.General_NoPermission); From 8fad0972ce376708c8a89f4e97b8012a088df6d4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 14 Jan 2022 17:00:12 +0200 Subject: [PATCH 0924/1142] New harvest flag for berries and glow berries for time being --- .../bukkit/residence/containers/Flags.java | 1 + .../listeners/ResidencePlayerListener.java | 46 +++++++++++++++++++ .../residence/protection/FlagPermissions.java | 8 ++-- src/flags.yml | 4 ++ 4 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 0bdf48011..e06c0ba7e 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -59,6 +59,7 @@ public enum Flags { flowerpot(CMIMaterial.FLOWER_POT, FlagMode.Both, "Allows or denys interaction with flower pot", true), grow(CMIMaterial.WHEAT_SEEDS, FlagMode.Residence, "Allows or denys plant growing", true), glow(CMIMaterial.SEA_LANTERN, FlagMode.Residence, "Players will start glowing when entering residence", true), + harvest(CMIMaterial.SWEET_BERRIES, FlagMode.Both, "Allows harvesting", true), hotfloor(CMIMaterial.MAGMA_BLOCK, FlagMode.Residence, "Prevent damage from magma blocks", true), hidden(CMIMaterial.GLASS_PANE, FlagMode.Residence, "Hides residence from list or listall commands", false), hook(CMIMaterial.FISHING_ROD, FlagMode.Both, "Allows or denys fishing rod hooking entities", false), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 329f59f30..07858721d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1230,6 +1230,51 @@ private static boolean placingMinecart(Block block, ItemStack item) { return block != null && block.getType().name().contains("RAIL") && item != null && item.getType().name().contains("MINECART"); } + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerharvest(PlayerInteractEvent event) { + + if (Version.isCurrentEqualOrLower(Version.v1_16_R1)) + return; + + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + try { + if (event.getHand() != EquipmentSlot.HAND && event.getHand() != EquipmentSlot.OFF_HAND) + return; + } catch (Exception e) { + } + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; + + Block block = event.getClickedBlock(); + if (block == null) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + + if (res != null && res.isOwner(player)) + return; + + CMIMaterial mat = CMIMaterial.get(block); + + if (!mat.equals(CMIMaterial.SWEET_BERRY_BUSH) && !mat.equals(CMIMaterial.CAVE_VINES) && !mat.equals(CMIMaterial.CAVE_VINES_PLANT)) + return; + + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + + if (!perms.playerHas(player, Flags.harvest, true)) { + plugin.msg(player, lm.Flag_Deny, Flags.harvest); + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { @@ -1272,6 +1317,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { CMIMaterial blockM = CMIMaterial.get(block); FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (heldItem.isDye()) { CMIMaterial btype = CMIMaterial.get(block); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index a14a9d46c..dc001a9a5 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -157,8 +157,8 @@ public static void addFlagToFlagGroup(String group, String flag) { if (f != null && !f.isGlobalyEnabled()) { return; } - if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { - validFlagGroups.computeIfAbsent(group, k -> new HashSet()).add(flag); + if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { + validFlagGroups.computeIfAbsent(group, k -> new HashSet()).add(flag); } } @@ -432,7 +432,7 @@ public boolean setPlayerFlag(String player, String flag, FlagState state) { } if (map.isEmpty()) this.removeAllPlayerFlags(player); - + return true; } @@ -799,7 +799,7 @@ protected static FlagPermissions load(Map root, FlagPermissions } for (Entry> one : newperms.playerFlags.entrySet()) { - if (one.getKey().length() != 32) { + if (one.getKey().length() != 32) { continue; } diff --git a/src/flags.yml b/src/flags.yml index a103765d9..21f65bc85 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -380,6 +380,7 @@ Global: pistonprotection: true tp: true explode: false + harvest: false # These are default flags applied to the residence creator of any group. CreatorDefault: build: true @@ -394,6 +395,7 @@ Global: trade: true shear: true leash: true + harvest: true # These are default flags applied to the residence renter of any group. RentedDefault: container: true @@ -409,6 +411,7 @@ Global: leash: true animalkilling: true admin: true + harvest: true # These are grouped flags, so when using /res pset nickname redstone true, player will get all flags in list, same when setting to false or removing them. GroupedFlags: redstone: @@ -434,6 +437,7 @@ Global: - shear - chat - beacon + - harvest fire: - ignite - firespread From 725e93d0e6afe86d38315f83c82a8578a22841ee Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 17 Jan 2022 18:09:40 +0200 Subject: [PATCH 0925/1142] Lets fully utilize UUID when creating residences --- .../residence/api/ResidenceInterface.java | 2 ++ .../bukkit/residence/commands/create.java | 3 +- .../protection/ClaimedResidence.java | 6 ++++ .../protection/ResidenceManager.java | 29 +++++++++++------ .../protection/ResidencePermissions.java | 32 ++++++++++++------- src/flags.yml | 2 +- 6 files changed, 51 insertions(+), 23 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java b/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java index 7c5e177f3..93e68b3ab 100644 --- a/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java +++ b/src/com/bekvon/bukkit/residence/api/ResidenceInterface.java @@ -29,4 +29,6 @@ public interface ResidenceInterface { public boolean addResidence(String name, String owner, Location loc1, Location loc2); public boolean addResidence(Player player, String name, Location loc1, Location loc2, boolean resadmin); + + public boolean addResidence(Player player, String name, boolean resadmin); } diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index a4426555d..140d80e0e 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -41,8 +41,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo Residence.getInstance().getPlayerManager().getResidencePlayer(player).forceUpdateGroup(); - plugin.getResidenceManager().addResidence(player, args[0], plugin.getSelectionManager().getPlayerLoc1(player), plugin - .getSelectionManager().getPlayerLoc2(player), resadmin); + plugin.getResidenceManager().addResidence(player, args[0], resadmin); return true; } plugin.msg(player, lm.Select_Points); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index f7b421441..0c2a605ee 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -207,6 +207,12 @@ public ClaimedResidence(String creationWorld) { this(Residence.getInstance().getServerLandName(), creationWorld); } + public ClaimedResidence(String creator, UUID uuid, String creationWorld) { + perms = new ResidencePermissions(this, creator, uuid, creationWorld); + initialize(); + } + + @Deprecated public ClaimedResidence(String creator, String creationWorld) { perms = new ResidencePermissions(this, creator, creationWorld); initialize(); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 9650e347a..c0bf8f50c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -13,6 +13,7 @@ import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; +import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; @@ -196,7 +197,17 @@ public boolean addResidence(Player player, String name, Location loc1, Location } public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { - if (!plugin.validName(name)) { + return addResidence(player, owner, null, name, loc1, loc2, resadmin); + } + + @Override + public boolean addResidence(Player player, String resName, boolean resadmin) { + return addResidence(player, player.getName(), player.getUniqueId(), resName, plugin.getSelectionManager().getPlayerLoc1(player), plugin + .getSelectionManager().getPlayerLoc2(player), resadmin); + } + + public boolean addResidence(Player player, String owner, UUID ownerUUId, String resName, Location loc1, Location loc2, boolean resadmin) { + if (!plugin.validName(resName)) { plugin.msg(player, lm.Invalid_NameCharacters); return false; } @@ -223,15 +234,15 @@ public boolean addResidence(Player player, String owner, String name, Location l } CuboidArea newArea = new CuboidArea(loc1, loc2); - ClaimedResidence newRes = new ClaimedResidence(owner, loc1.getWorld().getName()); + ClaimedResidence newRes = new ClaimedResidence(owner, ownerUUId, loc1.getWorld().getName()); newRes.getPermissions().applyDefaultFlags(); newRes.setEnterMessage(group.getDefaultEnterMessage()); newRes.setLeaveMessage(group.getDefaultLeaveMessage()); - newRes.setName(name); + newRes.setName(resName); newRes.setCreateTime(); - if (residences.containsKey(name.toLowerCase())) { - plugin.msg(player, lm.Residence_AlreadyExists, residences.get(name.toLowerCase()).getResidenceName()); + if (residences.containsKey(resName.toLowerCase())) { + plugin.msg(player, lm.Residence_AlreadyExists, residences.get(resName.toLowerCase()).getResidenceName()); return false; } @@ -240,7 +251,7 @@ public boolean addResidence(Player player, String owner, String name, Location l if (!newRes.addArea(player, newArea, "main", resadmin, false)) return false; - ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, name, newRes, newArea); + ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, resName, newRes, newArea); plugin.getServ().getPluginManager().callEvent(resevent); if (resevent.isCancelled()) return false; @@ -254,9 +265,9 @@ public boolean addResidence(Player player, String owner, String name, Location l } } - residences.put(name.toLowerCase(), newRes); + residences.put(resName.toLowerCase(), newRes); - calculateChunks(name); + calculateChunks(resName); plugin.getLeaseManager().removeExpireTime(newRes); plugin.getPlayerManager().addResidence(newRes.getOwner(), newRes); @@ -266,7 +277,7 @@ public boolean addResidence(Player player, String owner, String name, Location l plugin.getSelectionManager().showBounds(player, v); plugin.getAutoSelectionManager().getList().remove(player.getUniqueId()); plugin.msg(player, lm.Area_Create, "main"); - plugin.msg(player, lm.Residence_Create, name); + plugin.msg(player, lm.Residence_Create, resName); } if (plugin.getConfigManager().useLeases()) { plugin.getLeaseManager().setExpireTime(player, newRes, group.getLeaseGiveTime()); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 2c0cd85b9..0a987d43b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -8,7 +8,6 @@ import java.util.Set; import java.util.UUID; -import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -26,8 +25,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import net.Zrips.CMILib.Logs.CMIDebug; - public class ResidencePermissions extends FlagPermissions { private UUID ownerUUID; @@ -40,6 +37,19 @@ private ResidencePermissions(ClaimedResidence res) { residence = res; } + public ResidencePermissions(ClaimedResidence res, String creator, UUID creatorUUID, String inworld) { + this(res); + if (creatorUUID == null) + ownerUUID = Residence.getInstance().getPlayerUUID(creator); + else + ownerUUID = creatorUUID; + if (ownerUUID == null) + ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID()); + this.ownerLastKnownName = creator; + world = inworld; + } + + @Deprecated public ResidencePermissions(ClaimedResidence res, String creator, String inworld) { this(res); ownerUUID = Residence.getInstance().getPlayerUUID(creator); @@ -286,9 +296,9 @@ public boolean hasResidencePermission(CommandSender sender, boolean requireOwner ClaimedResidence par = this.residence.getParent(); Player player = (Player) sender; - + if (par != null && par.getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue)) - return true; + return true; if (Residence.getInstance().getConfigManager().enabledRentSystem()) { String resname = residence.getName(); @@ -303,7 +313,7 @@ public boolean hasResidencePermission(CommandSender sender, boolean requireOwner return (playerHas(player, Flags.admin, FlagCombo.OnlyTrue)); } } - + if (requireOwner) { return (this.getOwner().equals(sender.getName())); } @@ -557,6 +567,7 @@ public void applyDefaultFlags() { // Set> dcflags = group.getDefaultCreatorFlags(); Set>> dgflags = group.getDefaultGroupFlags(); this.applyGlobalDefaults(); + for (Entry next : dflags) { if (this.checkValidFlag(next.getKey(), true)) { this.setFlag(next.getKey(), next.getValue() ? FlagState.TRUE : FlagState.FALSE); @@ -628,8 +639,10 @@ public void setOwner(String newOwner, boolean resetFlags) { ownerLastKnownName = newOwner; ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(newOwner); - if (rPlayer != null) + if (rPlayer != null) { this.ownerUUID = rPlayer.getUniqueId(); + ownerLastKnownName = rPlayer.getName(); + } if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase(Residence.getInstance().getServerLandName())) { ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());// the UUID for server owned land @@ -741,10 +754,7 @@ public void applyGlobalDefaults() { FlagPermissions gCD = Residence.getInstance().getConfigManager().getGlobalCreatorDefaultFlags(); Map gGD = Residence.getInstance().getConfigManager().getGlobalGroupDefaultFlags(); for (Entry entry : gRD.cuboidFlags.entrySet()) { - if (entry.getValue()) - this.setFlag(entry.getKey(), FlagState.TRUE); - else - this.setFlag(entry.getKey(), FlagState.FALSE); + this.setFlag(entry.getKey(), entry.getValue() ? FlagState.TRUE : FlagState.FALSE); } for (Entry entry : gCD.cuboidFlags.entrySet()) { if (entry.getValue()) diff --git a/src/flags.yml b/src/flags.yml index 21f65bc85..e5e6829ad 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -378,7 +378,7 @@ Global: shear: false leash: false pistonprotection: true - tp: true + tp: false explode: false harvest: false # These are default flags applied to the residence creator of any group. From 1896066c3961f46fee9fa277de7507eb217bfcc8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 1 Feb 2022 17:28:04 +0200 Subject: [PATCH 0926/1142] Dispensing water fix --- .../bukkit/residence/ConfigManager.java | 10 ++++----- .../listeners/ResidenceBlockListener.java | 21 +++++++------------ src/plugin.yml | 2 +- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 8624ba130..46745fc50 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -944,18 +944,18 @@ public void UpdateConfigFile() { c.addComment("Global.AntiGreef.Flow.Level", "Level from which one to start lava and water flow blocking", "This dont have effect in residence area"); FlowLevel = c.get("Global.AntiGreef.Flow.Level", 63); c.addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); - NoLava = c.get("Global.AntiGreef.Flow.NoLavaFlow", true); + NoLava = c.get("Global.AntiGreef.Flow.NoLavaFlow", false); c.addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); - NoWater = c.get("Global.AntiGreef.Flow.NoWaterFlow", true); + NoWater = c.get("Global.AntiGreef.Flow.NoWaterFlow", false); NoFlowWorlds = c.get("Global.AntiGreef.Flow.Worlds", Arrays.asList(defaultWorldName)); // Place c.addComment("Global.AntiGreef.Place.Level", "Level from which one to start block lava and water place", "This don't have effect in residence area"); PlaceLevel = c.get("Global.AntiGreef.Place.Level", 63); c.addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); - NoLavaPlace = c.get("Global.AntiGreef.Place.NoLavaPlace", true); - c.addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, playrs cant place water outside residence"); - NoWaterPlace = c.get("Global.AntiGreef.Place.NoWaterPlace", true); + NoLavaPlace = c.get("Global.AntiGreef.Place.NoLavaPlace", false); + c.addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, players cant place water outside residence"); + NoWaterPlace = c.get("Global.AntiGreef.Place.NoWaterPlace", false); NoPlaceWorlds = c.get("Global.AntiGreef.Place.Worlds", Arrays.asList(defaultWorldName)); // Sand fall diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 4710fd19a..32f902406 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -930,26 +930,21 @@ public void onDispense(BlockDispenseEvent event) { return; Location location = new Location(event.getBlock().getWorld(), event.getVelocity().getBlockX(), event.getVelocity().getBlockY(), event.getVelocity().getBlockZ()); - Location loc = event.getBlock().getLocation(); - - location.add(loc.clone()); ClaimedResidence targetres = plugin.getResidenceManager().getByLoc(location); if (targetres == null && location.getBlockY() >= plugin.getConfigManager().getPlaceLevel() && plugin.getConfigManager().getNoPlaceWorlds().contains(location .getWorld().getName())) { ItemStack mat = event.getItem(); - if (plugin.getConfigManager().isNoLavaPlace()) - if (mat.getType() == Material.LAVA_BUCKET) { - event.setCancelled(true); - return; - } + if (plugin.getConfigManager().isNoLavaPlace() && mat.getType() == Material.LAVA_BUCKET) { + event.setCancelled(true); + return; + } - if (plugin.getConfigManager().isNoWaterPlace()) - if (mat.getType() == Material.WATER_BUCKET) { - event.setCancelled(true); - return; - } + if (plugin.getConfigManager().isNoWaterPlace() && mat.getType() == Material.WATER_BUCKET) { + event.setCancelled(true); + return; + } } ClaimedResidence sourceres = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); diff --git a/src/plugin.yml b/src/plugin.yml index 9bde1787e..6720f06a8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.1.0 +version: 5.0.1.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 177366d487f47c10a0ed131a3c4f56c557dbb6d1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 4 Feb 2022 15:41:30 +0200 Subject: [PATCH 0927/1142] SlimeFun support fix --- .../slimeFun/SlimeFunResidenceModule.java | 1 - .../residence/slimeFun/SlimefunManager.java | 33 ++++++++++++++----- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index ea65da251..a7b69cf7e 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -15,7 +15,6 @@ import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.Interaction; import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.ProtectionModule; -import net.Zrips.CMILib.Logs.CMIDebug; public class SlimeFunResidenceModule implements ProtectionModule { diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java index 6995d32ff..81051289a 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java @@ -1,11 +1,17 @@ package com.bekvon.bukkit.residence.slimeFun; +import java.lang.reflect.Method; +import java.util.function.Function; + import org.bukkit.Bukkit; +import org.bukkit.Server; +import org.bukkit.plugin.Plugin; import com.bekvon.bukkit.residence.Residence; import io.github.thebusybiscuit.slimefun4.implementation.Slimefun; import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.ProtectionManager; +import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.ProtectionModule; public class SlimefunManager { @@ -15,19 +21,30 @@ public class SlimefunManager { public static void register(Residence residence) { Bukkit.getServer().getScheduler().runTaskTimer(residence, task -> { + ++times; + if (times >= TRIES) { + residence.consoleMessage("&cFailed to initialize SlimeFun support"); + task.cancel(); + } ProtectionManager manager = Slimefun.getProtectionManager(); // Wait for protectionManager to load (loaded on first server tick) if (manager != null) { - manager.registerModule(Bukkit.getServer(), "Residence", plugin -> new SlimeFunResidenceModule(plugin)); - residence.consoleMessage("Enabled compatability with SlimeFun plugin"); - task.cancel(); - } - - if (++times >= TRIES) { - residence.consoleMessage("&cFailed to initialize SlimeFun support"); - task.cancel(); + try { + Method method = manager.getClass().getMethod("registerModule", Server.class, String.class, Function.class); + if (method != null) { + Function m = plugin -> new SlimeFunResidenceModule(plugin); + method.invoke(manager, Bukkit.getServer(), "Residence", m); + residence.consoleMessage("Enabled compatability with SlimeFun plugin"); + task.cancel(); + } + } catch (Throwable e) { + // Going with latest dev build supported approach + manager.registerModule(Bukkit.getServer().getPluginManager(), "Residence", plugin -> new SlimeFunResidenceModule(plugin)); + residence.consoleMessage("Enabled compatability with SlimeFun plugin"); + task.cancel(); + } } }, 20, 20); } From d2bf43ba900eed6d58c6ac1849b6b332688ae91b Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 4 Feb 2022 16:26:02 +0200 Subject: [PATCH 0928/1142] Lets prevent sign interaction with ink sac to prevent colorization --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 07858721d..06e92414d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1293,7 +1293,6 @@ public void onPlayerInteract(PlayerInteractEvent event) { CMIMaterial heldItem = CMIMaterial.get(iih); Material mat = block.getType(); - if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block)) && !heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) && !heldItem.isDye() && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { @@ -1318,11 +1317,11 @@ public void onPlayerInteract(PlayerInteractEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (heldItem.isDye()) { CMIMaterial btype = CMIMaterial.get(block); if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || btype == CMIMaterial.GRASS || btype.isSapling()) || - heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD || btype == CMIMaterial.MOSS_BLOCK) { + heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD || btype == CMIMaterial.MOSS_BLOCK || btype.isSign()) { FlagPermissions tperms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!tperms.playerHas(player, Flags.build, true)) { plugin.msg(player, lm.Flag_Deny, Flags.build); From 9987c8d6b1b82ed28352bed9f20ae642ee7e8e50 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Feb 2022 12:22:45 +0200 Subject: [PATCH 0929/1142] Fix for droppers not dropping water or lava buckets --- .../bukkit/residence/listeners/ResidenceBlockListener.java | 3 +++ .../bukkit/residence/listeners/ResidencePlayerListener.java | 4 ++-- src/plugin.yml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 32f902406..b8d93819b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -933,6 +933,9 @@ public void onDispense(BlockDispenseEvent event) { ClaimedResidence targetres = plugin.getResidenceManager().getByLoc(location); + if (CMIMaterial.get(event.getBlock()) == CMIMaterial.DROPPER) + return; + if (targetres == null && location.getBlockY() >= plugin.getConfigManager().getPlaceLevel() && plugin.getConfigManager().getNoPlaceWorlds().contains(location .getWorld().getName())) { ItemStack mat = event.getItem(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 06e92414d..5662b8b39 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1295,7 +1295,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { Material mat = block.getType(); if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block)) && !heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) - && !heldItem.isDye() && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { + && (!heldItem.isDye() && !heldItem.equals(CMIMaterial.GLOW_INK_SAC)) && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { return; } @@ -1318,7 +1318,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (heldItem.isDye()) { + if (heldItem.isDye() || heldItem.equals(CMIMaterial.GLOW_INK_SAC)) { CMIMaterial btype = CMIMaterial.get(block); if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || btype == CMIMaterial.GRASS || btype.isSapling()) || heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD || btype == CMIMaterial.MOSS_BLOCK || btype.isSign()) { diff --git a/src/plugin.yml b/src/plugin.yml index 6720f06a8..d2d264dd1 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.1.1 +version: 5.0.1.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 7cb9e6b86c700307cc7733f5c99f30217549351a Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Feb 2022 13:15:52 +0200 Subject: [PATCH 0930/1142] Removing bedrock and mob_sapwner from default black list --- src/flags.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/flags.yml b/src/flags.yml index e5e6829ad..c10258b9f 100644 --- a/src/flags.yml +++ b/src/flags.yml @@ -462,9 +462,7 @@ ItemList: # You can look up the material name by item ID in game by typing /res material # Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance Items: - - BEDROCK - LAVA - WATER - STATIONARY_LAVA - STATIONARY_WATER - - MOB_SPAWNER From d6d3bf4a1df32fe360c11163e382eee9bf1ab536 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Feb 2022 13:16:52 +0200 Subject: [PATCH 0931/1142] Axolotl protection from being picked up by water bucket --- .../listeners/ResidencePlayerListener.java | 2 +- .../ResidencePlayerListener1_17.java | 32 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 5662b8b39..9d2f9d0a6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1317,7 +1317,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (heldItem.isDye() || heldItem.equals(CMIMaterial.GLOW_INK_SAC)) { CMIMaterial btype = CMIMaterial.get(block); if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || btype == CMIMaterial.GRASS || btype.isSapling()) || diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java index 67a65c9c6..3d4d1e555 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java @@ -6,12 +6,14 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockPhysicsEvent; +import org.bukkit.event.player.PlayerBucketEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; @@ -20,10 +22,14 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import net.Zrips.CMILib.CMILib; +import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; +import net.Zrips.CMILib.Version.Version; public class ResidencePlayerListener1_17 implements Listener { @@ -41,6 +47,30 @@ protected boolean removeEldestEntry(Map.Entry eldest) { } }; + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerBucketEntityEvent(PlayerBucketEntityEvent event) { + + Player player = event.getPlayer(); + if (Residence.getInstance().isResAdminOn(player)) + return; + + Entity ent = event.getEntity(); + + ItemStack iih = CMIItemStack.getItemInMainHand(player); + if (iih == null) + return; + + if (!CMIMaterial.get(iih).equals(CMIMaterial.WATER_BUCKET)) + return; + + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); + + if (!perms.playerHas(player, Flags.animalkilling, FlagCombo.TrueOrNone)) { + event.setCancelled(true); + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.animalkilling); + } + } + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onPlayerInteractRespawn(PlayerInteractEvent event) { @@ -107,7 +137,7 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { Block block = event.getBlock(); if (block == null) return; - + if (block.getLocation().getY() == event.getSourceBlock().getLocation().getY()) return; From c94e019d5a8a6057a55ea7293f37ebeb7cbb9574 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Feb 2022 14:33:09 +0200 Subject: [PATCH 0932/1142] Nametag flag fix --- .../residence/listeners/ResidencePlayerListener.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9d2f9d0a6..e0d6a043c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1667,7 +1667,16 @@ public void onPlayerInteractAtArmoStand(PlayerInteractEntityEvent event) { return; Entity ent = event.getRightClicked(); - if (!Utils.isArmorStandEntity(ent.getType())) + + ItemStack item = CMIItemStack.getItemInMainHand(player); + + try { + if (event.getHand() == EquipmentSlot.OFF_HAND) + item = CMIItemStack.getItemInOffHand(player); + } catch (Throwable e) { + } + + if (!CMIMaterial.get(item).equals(CMIMaterial.NAME_TAG)) return; FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); From 2cd25c8214d721577d405140b0d8e06ff680910e Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Feb 2022 15:01:28 +0200 Subject: [PATCH 0933/1142] Portal creation listener fix for older servers --- .../residence/listeners/ResidenceBlockListener.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index b8d93819b..042bfb215 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -66,7 +66,6 @@ import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { @@ -1010,12 +1009,7 @@ public void onBlockBurn(PortalCreateEvent event) { if (!Flags.build.isGlobalyEnabled()) return; - World world = null; - try { - world = event.getBlocks().get(0).getWorld(); - } catch (Throwable e) { - e.printStackTrace(); - } + World world = event.getWorld(); // disabling event on world if (plugin.isDisabledWorldListener(world)) From 1ddc0194a41e2944967345883493da19708c9b22 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Feb 2022 17:39:38 +0200 Subject: [PATCH 0934/1142] One more adjustment for auto sub command derping out --- src/com/bekvon/bukkit/residence/commands/auto.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index ea54bb722..e6589ab01 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -166,7 +166,7 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, if (maxZ <= 1) maxZ = (group.getMaxZ() - group.getMinZ()) / 2 + group.getMinZ(); - + int minY = CMIWorld.getMinHeight(cuboid.getWorld()); while (true) { @@ -195,7 +195,7 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, c.setLowLocation(cuboid.getLowLocation().clone().add(-dir.getLow().getX(), -dir.getLow().getY(), -dir.getLow().getZ())); c.setHighLocation(cuboid.getHighLocation().clone().add(dir.getHigh().getX(), dir.getHigh().getY(), dir.getHigh().getZ())); - if (c.getLowVector().getY() < minY) { + if ((dir.equals(direction.Top) || dir.equals(direction.Bottom)) && c.getLowVector().getY() < minY) { c.getLowVector().setY(minY); locked.add(dir); dir = dir.getNext(); @@ -205,7 +205,7 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, continue; } - if (c.getHighVector().getY() >= c.getWorld().getMaxHeight()) { + if ((dir.equals(direction.Top) || dir.equals(direction.Bottom)) && c.getHighVector().getY() >= c.getWorld().getMaxHeight()) { c.getHighVector().setY(c.getWorld().getMaxHeight() - 1); locked.add(dir); dir = dir.getNext(); @@ -231,7 +231,7 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (maxY > 0 && maxY < c.getYSize() || c.getYSize() > group.getMaxY() + (-group.getMinY()))) { locked.add(dir); - dir = dir.getNext(); + dir = dir.getNext(); skipped++; continue; } From a1b30dfb2280e82889abf76c08351292e40a5459 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 14 Feb 2022 12:15:15 +0200 Subject: [PATCH 0935/1142] Optimizing player name getter from UUID --- .../bekvon/bukkit/residence/Residence.java | 28 ++++++++++++++++--- src/plugin.yml | 2 +- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 15c19bb95..e1a180d8a 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -129,6 +129,7 @@ import fr.crafter.tickleman.realplugin.RealPlugin; import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; @@ -214,6 +215,7 @@ public class Residence extends JavaPlugin { public List resadminToggle; private ConcurrentHashMap OfflinePlayerList = new ConcurrentHashMap(); private Map cachedPlayerNameUUIDs = new HashMap(); + private Map cachedPlayerNames = new HashMap(); private com.sk89q.worldedit.bukkit.WorldEditPlugin wep = null; private com.sk89q.worldguard.bukkit.WorldGuardPlugin wg = null; private CMIMaterial wepid; @@ -1368,7 +1370,7 @@ protected boolean loadYml() throws Exception { loadFile = new File(worldFolder, saveFilePrefix + worldName + ".yml"); if (loadFile.isFile()) { time = System.currentTimeMillis(); - + if (!isDisabledWorld(worldName) && !this.getConfigManager().CleanerStartupLog) Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading save data for world " + worldName + "..."); @@ -1785,8 +1787,10 @@ public OfflinePlayer getOfflinePlayer(UUID uuid) { public void addOfflinePlayerToChache(OfflinePlayer player) { if (player == null) return; - if (player.getName() != null) + if (player.getName() != null) { OfflinePlayerList.put(player.getName().toLowerCase(), player); + cachedPlayerNames.put(player.getUniqueId(), player.getName()); + } cachedPlayerNameUUIDs.put(player.getUniqueId(), player); } @@ -1826,13 +1830,29 @@ public UUID getEmptyUserUUID() { } public String getPlayerName(UUID uuid) { + String cache = cachedPlayerNames.get(uuid); + if (cache != null) { + return cache; + } + if (uuid == null) return null; OfflinePlayer p = getServ().getPlayer(uuid); if (p == null) - p = getServ().getOfflinePlayer(uuid); - if (p != null) + p = getOfflinePlayer(uuid); + if (p != null) { + cachedPlayerNames.put(uuid, p.getName()); + return p.getName(); + } + + // Last attempt, slowest one + p = getServ().getOfflinePlayer(uuid); + + if (p != null) { + cachedPlayerNames.put(uuid, p.getName()); return p.getName(); + } + return null; } diff --git a/src/plugin.yml b/src/plugin.yml index d2d264dd1..6c6fdc050 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.1.2 +version: 5.0.1.4 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From d22d41077702ae9537d8d3dc4f7756d7a40fe7d0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Apr 2022 13:04:49 +0300 Subject: [PATCH 0936/1142] Speed up load times Don't include chat color if its white --- .../residence/protection/ClaimedResidence.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 0c2a605ee..65d5d2155 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -258,6 +258,8 @@ public int getSubzoneDeep(int deep) { public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) { if (resadmin) return true; + if (player == null) + return true; ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (area.getXSize() < group.getMinX()) { @@ -278,6 +280,8 @@ public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean resadmin) { if (resadmin) return true; + if (player == null) + return true; ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (area.getXSize() < group.getSubzoneMinX()) { @@ -488,6 +492,7 @@ public boolean replaceArea(CuboidArea neware, String name) { } public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { + if (!areas.containsKey(name)) { if (player != null) Residence.getInstance().msg(player, lm.Area_NonExist); @@ -1565,7 +1570,7 @@ public Map save() { if (!ChatPrefix.equals("")) root.put("ChatPrefix", ChatPrefix); if (!ChannelColor.getCleanName().equals(Residence.getInstance().getConfigManager().getChatColor().getName()) - && !ChannelColor.getName().equals("WHITE")) { + && !ChannelColor.getName().equalsIgnoreCase("WHITE")) { root.put("ChannelColor", ChannelColor.getName()); } @@ -1641,6 +1646,7 @@ private static double convertDouble(String dString) { @SuppressWarnings("unchecked") public static ClaimedResidence load(String worldName, Map root, ClaimedResidence parent, Residence plugin) throws Exception { + ClaimedResidence res = new ClaimedResidence(); if (root == null) throw new Exception("Null residence!"); @@ -1772,13 +1778,15 @@ public static ClaimedResidence load(String worldName, Map root, double yaw = 0.0; try { + if (tpLoc.contains(",")) + tpLoc = tpLoc.replace(",", "."); String[] split = tpLoc.split(":"); if (split.length > 4) - yaw = convertDouble(split[4]); + yaw = Double.parseDouble(split[4]); if (split.length > 3) - pitch = convertDouble(split[3]); + pitch = Double.parseDouble(split[3]); - res.tpLoc = new Vector(convertDouble(split[0]), convertDouble(split[1]), convertDouble(split[2])); + res.tpLoc = new Vector(Double.parseDouble(split[0]), Double.parseDouble(split[1]), Double.parseDouble(split[2])); } catch (Exception e) { } From 2284a5c2837972b145800e6bd17703ff9d35e21c Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Apr 2022 13:29:04 +0300 Subject: [PATCH 0937/1142] Speeding up load process #2 --- src/com/bekvon/bukkit/residence/Residence.java | 7 ++++--- src/com/bekvon/bukkit/residence/commands/tool.java | 6 +++--- .../residence/protection/ClaimedResidence.java | 13 ++++++------- .../residence/protection/FlagPermissions.java | 4 ++++ .../residence/protection/ResidenceManager.java | 3 ++- .../residence/protection/ResidencePermissions.java | 5 +++++ 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index e1a180d8a..12d906153 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1832,7 +1832,7 @@ public UUID getEmptyUserUUID() { public String getPlayerName(UUID uuid) { String cache = cachedPlayerNames.get(uuid); if (cache != null) { - return cache; + return cache.equalsIgnoreCase("_UNKNOWN_") ? null : cache; } if (uuid == null) @@ -1848,8 +1848,9 @@ public String getPlayerName(UUID uuid) { // Last attempt, slowest one p = getServ().getOfflinePlayer(uuid); - if (p != null) { - cachedPlayerNames.put(uuid, p.getName()); + if (p != null) { + String name = p.getName() == null ? "_UNKNOWN_" : p.getName(); + cachedPlayerNames.put(uuid, name); return p.getName(); } diff --git a/src/com/bekvon/bukkit/residence/commands/tool.java b/src/com/bekvon/bukkit/residence/commands/tool.java index ad58a4450..22310ec83 100644 --- a/src/com/bekvon/bukkit/residence/commands/tool.java +++ b/src/com/bekvon/bukkit/residence/commands/tool.java @@ -4,14 +4,14 @@ import org.bukkit.command.CommandSender; -import net.Zrips.CMILib.FileHandler.ConfigReader; - import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import net.Zrips.CMILib.FileHandler.ConfigReader; + public class tool implements cmd { @Override @@ -19,7 +19,7 @@ public class tool implements cmd { public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { plugin.msg(sender, lm.General_Separator); plugin.msg(sender, lm.Select_Tool, plugin.getConfigManager().getSelectionTool().getName()); - plugin.msg(sender, lm.General_InfoTool, plugin.getConfigManager().getInfoTool().getName()); + plugin.msg(sender, lm.General_InfoTool, plugin.getConfigManager().getInfoTool().getName()); plugin.msg(sender, lm.General_Separator); return true; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 65d5d2155..3f82db146 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -281,7 +281,7 @@ public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean re if (resadmin) return true; if (player == null) - return true; + return true; ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); if (area.getXSize() < group.getSubzoneMinX()) { @@ -492,7 +492,7 @@ public boolean replaceArea(CuboidArea neware, String name) { } public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { - + if (!areas.containsKey(name)) { if (player != null) Residence.getInstance().msg(player, lm.Area_NonExist); @@ -1646,7 +1646,6 @@ private static double convertDouble(String dString) { @SuppressWarnings("unchecked") public static ClaimedResidence load(String worldName, Map root, ClaimedResidence parent, Residence plugin) throws Exception { - ClaimedResidence res = new ClaimedResidence(); if (root == null) throw new Exception("Null residence!"); @@ -1718,18 +1717,18 @@ public static ClaimedResidence load(String worldName, Map root, res.BlockSellPrice = 0D; } - World world = Residence.getInstance().getServ().getWorld(res.perms.getWorld()); + World world = Residence.getInstance().getServ().getWorld(res.perms.getWorldName()); if (world == null && !Residence.getInstance().getConfigManager().isLoadEveryWorld()) - throw new Exception("Cant Find World: " + res.perms.getWorld()); + throw new Exception("Cant Find World: " + res.perms.getWorldName()); for (Entry map : areamap.entrySet()) { if (map.getValue() instanceof String) { // loading new same format - res.areas.put(map.getKey(), CuboidArea.newLoad((String) map.getValue(), res.perms.getWorld())); + res.areas.put(map.getKey(), CuboidArea.newLoad((String) map.getValue(), res.perms.getWorldName())); } else { // loading old format - res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), res.perms.getWorld())); + res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), res.perms.getWorldName())); } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index dc001a9a5..46e86cb1c 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -31,6 +31,7 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; public class FlagPermissions { @@ -763,6 +764,7 @@ public static FlagPermissions load(Map root) throws Exception { @SuppressWarnings({ "unchecked", "rawtypes" }) protected static FlagPermissions load(Map root, FlagPermissions newperms) throws Exception { + if (root.containsKey("LastKnownPlayerNames")) newperms.cachedPlayerNameUUIDs = (Map) root.get("LastKnownPlayerNames"); @@ -905,6 +907,7 @@ private void convertFlagsUUIDsToPlayerNames() { } private void convertPlayerNamesToUUIDs(String OwnerName, String owneruuid) { + HashMap converts = new HashMap<>(); List Toremove = new ArrayList(); @@ -933,6 +936,7 @@ else if (OwnerName != null && !OwnerName.equals(keyset)) } } } + for (String one : Toremove) { playerFlags.remove(one); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index c0bf8f50c..e03b54fdd 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -48,6 +48,7 @@ import com.bekvon.bukkit.residence.utils.GetTime; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Version.Version; @@ -1037,7 +1038,7 @@ public Map> loadMap(String worldName, Map res : root.entrySet()) { - if (i == 100 & plugin.getConfigManager().isUUIDConvertion()) + if (i == 100 && plugin.getConfigManager().isUUIDConvertion()) Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " " + worldName + " UUID conversion done: " + y + " of " + root.size()); if (i >= 100) i = 0; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 0a987d43b..6200cc23d 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -25,6 +25,8 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import net.Zrips.CMILib.Logs.CMIDebug; + public class ResidencePermissions extends FlagPermissions { private UUID ownerUUID; @@ -700,6 +702,7 @@ public Map save(String world) { } public static ResidencePermissions load(String worldName, ClaimedResidence res, Map root) throws Exception { + ResidencePermissions newperms = new ResidencePermissions(res); if (root.containsKey("OwnerUUID") || root.containsKey("OwnerLastKnownName")) { @@ -741,10 +744,12 @@ public static ResidencePermissions load(String worldName, ClaimedResidence res, newperms.ownerLastKnownName = Residence.getInstance().getServerLandName(); } newperms.world = worldName; + FlagPermissions.load(root, newperms); if (newperms.getOwner() == null || newperms.world == null || newperms.playerFlags == null || newperms.groupFlags == null || newperms.cuboidFlags == null) throw new Exception("Invalid Residence Permissions..."); + return newperms; } From 7de57e153455701b8cae80eb511a16ce4c797ab7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Apr 2022 14:58:26 +0300 Subject: [PATCH 0938/1142] Fix for /res select auto command and async actions --- .../listeners/ResidencePlayerListener.java | 1 - .../residence/selection/SelectionManager.java | 36 ++++++++++--------- .../selection/WorldEdit7SelectionManager.java | 4 --- 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index e0d6a043c..6db5024cb 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -84,7 +84,6 @@ import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 493e9bd3d..e1bbd6cb4 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -19,7 +19,6 @@ import org.bukkit.permissions.PermissionDefault; import org.bukkit.util.Vector; -import com.Zrips.CMI.events.CMISelectionEvent; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.SelectionSides; @@ -417,6 +416,7 @@ public void afterSelectionUpdate(Player player, boolean force) { v.setLoc(null); v.setAreas(this.getSelectionCuboid(player)); v.setOnce(false); + this.showBounds(player, v); } @@ -527,26 +527,28 @@ public void showBounds(final Player player, final Visualizer v) { if (tv != null) { tv.cancelAll(); } + Bukkit.getScheduler().runTask(plugin, () -> { - ResidenceSelectionVisualizationEvent ev = new ResidenceSelectionVisualizationEvent(player, v.getAreas(), v.getErrorAreas()); - Bukkit.getPluginManager().callEvent(ev); + ResidenceSelectionVisualizationEvent ev = new ResidenceSelectionVisualizationEvent(player, v.getAreas(), v.getErrorAreas()); + Bukkit.getPluginManager().callEvent(ev); - if (ev.isCancelled()) - return; + if (ev.isCancelled()) + return; - vMap.put(player.getUniqueId(), v); - if (!plugin.isEnabled()) - return; - v.setBaseShedId(Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - if (!v.getAreas().isEmpty()) - MakeBorders(player, false); - if (!v.getErrorAreas().isEmpty()) - MakeBorders(player, true); + vMap.put(player.getUniqueId(), v); + if (!plugin.isEnabled()) return; - } - }).getTaskId()); + v.setBaseShedId(Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + if (!v.getAreas().isEmpty()) + MakeBorders(player, false); + if (!v.getErrorAreas().isEmpty()) + MakeBorders(player, true); + } + }).getTaskId()); + + }); } public List getLocations(Location lowLoc, Location loc, Double TX, Double TY, Double TZ, Double Range, boolean StartFromZero) { diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java index d5aa5c8ed..dbbdb7a9f 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java @@ -7,20 +7,16 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.sk89q.worldedit.IncompleteRegionException; -import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldedit.extension.platform.permission.ActorSelectorLimits; import com.sk89q.worldedit.math.BlockVector3; -import com.sk89q.worldedit.math.Vector3; //import com.sk89q.worldedit.bukkit.selections.CuboidSelection; //import com.sk89q.worldedit.bukkit.selections.Selection; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.selector.CuboidRegionSelector; import com.sk89q.worldedit.regions.selector.limit.PermissiveSelectorLimits; -import com.sk89q.worldedit.regions.selector.limit.SelectorLimits; import com.sk89q.worldedit.world.World; public class WorldEdit7SelectionManager extends SelectionManager { From 4404d5aebb624203a73f65d73e97b84a2ee6834f Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Apr 2022 15:09:44 +0300 Subject: [PATCH 0939/1142] Fix for leash removal in residence area --- .../listeners/ResidenceEntityListener.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index beaccc670..224be1755 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -52,6 +52,7 @@ import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.inventory.ItemStack; @@ -442,6 +443,35 @@ public void AnimalLeash(PlayerLeashEntityEvent event) { } } + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onFenceLeashInteract(PlayerInteractEntityEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.leash.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getRightClicked().getWorld())) + return; + Player player = event.getPlayer(); + + Entity entity = event.getRightClicked(); + + if (entity.getType() != EntityType.LEASH_HITCH) + return; + + if (plugin.isResAdminOn(player)) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + if (res.getPermissions().playerHas(player, Flags.leash, FlagCombo.OnlyFalse)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onWitherSpawn(CreatureSpawnEvent event) { From 3856f26fcb66c5645328fa9dac37b687a0a4ab7d Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Apr 2022 15:20:32 +0300 Subject: [PATCH 0940/1142] Extra method to get residences by chunk reference --- .../listeners/ResidencePlayerListener.java | 2 +- .../protection/ResidenceManager.java | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 6db5024cb..f6b172763 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -645,7 +645,7 @@ else if (white == 0) break; } } - + if (white != 0 && white >= black || black == 0) return; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index e03b54fdd..3b304e182 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -19,6 +19,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Chunk; import org.bukkit.ChunkSnapshot; import org.bukkit.Location; import org.bukkit.Material; @@ -115,6 +116,24 @@ public ClaimedResidence getByLoc(Location loc) { return subres; } + public List getByChunk(Chunk chunk) { + List list = new ArrayList(); + if (chunk == null) + return list; + World world = chunk.getWorld(); + if (world == null) + return list; + String worldName = world.getName(); + if (worldName == null) + return list; + if (!chunkResidences.containsKey(worldName)) + return list; + ChunkRef chunkRef = new ChunkRef(chunk.getX(), chunk.getZ()); + Map> ChunkMap = chunkResidences.get(worldName); + List ls = ChunkMap.get(chunkRef); + return ls == null ? list : new ArrayList(ls); + } + @Override public ClaimedResidence getByName(String name) { if (name == null) { From b27b7bae62d840a32725bc429b857de6d7f69577 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Apr 2022 15:30:03 +0300 Subject: [PATCH 0941/1142] Fix for /res rt issue --- src/com/bekvon/bukkit/residence/commands/rt.java | 1 + .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 ++ src/com/bekvon/bukkit/residence/utils/RandomTp.java | 6 +++--- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 0fb460720..a8ae19fbf 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -18,6 +18,7 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class rt implements cmd { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index f6b172763..d65abda90 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -84,6 +84,7 @@ import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; @@ -1002,6 +1003,7 @@ public static boolean isEmptyBlock(Block block) { return true; if (cb.isButton()) return true; + return false; } diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 312bd038a..ea4d6dc34 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -20,7 +20,6 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Version.Version; -import net.Zrips.CMILib.Version.PaperMethods.BlockStateSnapshotResult; import net.Zrips.CMILib.Version.PaperMethods.PaperLib; public class RandomTp { @@ -212,6 +211,7 @@ private Location get(World world) { } if (loc.getY() < CMIWorld.getMinHeight(loc.getWorld()) + 4) { + if (loc.getWorld().getEnvironment().equals(Environment.NETHER)) { loc.setY(CMIWorld.getMaxHeight(loc.getWorld()) / 2); } else { @@ -277,13 +277,13 @@ private static Location getDownLocationSimple(Location oloc) { if (loc.getY() < y) { return null; } - loc.setY(y); + loc.setY(y + 1); } else { int y = loc.getWorld().getHighestBlockYAt(loc); if (loc.getY() < y) { return null; } - loc.setY(y); + loc.setY(y + 1); } if (oloc.getWorld().getEnvironment().equals(Environment.THE_END) && loc.getY() < 5) return null; From c7c562278927a677ff7a8cd8905a3fd0cf52d0b3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 19 Apr 2022 15:58:03 +0300 Subject: [PATCH 0942/1142] Fix for subzone creation when we should ignore Y --- .../residence/listeners/ResidencePlayerListener.java | 1 + .../bukkit/residence/permissions/PermissionGroup.java | 1 + .../bukkit/residence/protection/ClaimedResidence.java | 7 ++++++- .../bekvon/bukkit/residence/selection/AutoSelection.java | 3 ++- .../bukkit/residence/selection/SelectionManager.java | 1 + 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index d65abda90..33f3a82ad 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2280,6 +2280,7 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move } } + if (!plugin.getAutoSelectionManager().getList().isEmpty()) { Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index cecf20615..3ba69d00b 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -19,6 +19,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import net.Zrips.CMILib.Container.CMIWorld; +import net.Zrips.CMILib.Logs.CMIDebug; public class PermissionGroup { private int xmax = 0; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 3f82db146..4662371d1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -328,7 +328,8 @@ public boolean isSmallerThanMaxSubzone(Player player, CuboidArea area, boolean r Residence.getInstance().msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); return false; } - if (area.getYSize() > group.getSubzoneMaxY() + (-group.getSubzoneMinY())) { + + if (area.getYSize() > group.getSubzoneMaxY() + (-group.getMinY())) { Residence.getInstance().msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); return false; } @@ -444,6 +445,9 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa Residence.getInstance().msg(player, lm.Area_MaxPhysical); return false; } + + CuboidArea cuboid = Residence.getInstance().getSelectionManager().getSelectionCuboid(player); + if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { Residence.getInstance().msg(player, lm.Area_SizeLimit); @@ -727,6 +731,7 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l return false; } } + ClaimedResidence newres; if (player != null) { newres = new ClaimedResidence(owner, perms.getWorldName(), this); diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index a57dd562b..0d99a5609 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -14,6 +14,8 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; +import net.Zrips.CMILib.Logs.CMIDebug; + public class AutoSelection { private HashMap list = new HashMap(); @@ -40,7 +42,6 @@ public void UpdateSelection(Player player) { } public void UpdateSelection(Player player, Location targetLoc) { - if (!list.containsKey(player.getUniqueId())) return; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index e1bbd6cb4..321089634 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -35,6 +35,7 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Effects.CMIEffect; import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; +import net.Zrips.CMILib.Logs.CMIDebug; public class SelectionManager { protected Map selections; From fdc4dc8d9546339c903f348947539341e4cdc489 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 6 May 2022 15:39:06 +0300 Subject: [PATCH 0943/1142] Speeding up loadup of residence trusted player lists Fixing issue where replacing residence jar file on live server could result in failed residence save and save file reset Additional API to get list of trusted players for specific residence --- .../bekvon/bukkit/residence/Residence.java | 15 ++++++-- .../residence/containers/ResidencePlayer.java | 15 +++++++- .../permissions/PermissionManager.java | 3 ++ .../protection/ClaimedResidence.java | 34 +++++++++++++++--- .../residence/protection/FlagPermissions.java | 36 ++++++++++--------- .../protection/ResidenceManager.java | 2 +- src/plugin.yml | 2 +- 7 files changed, 81 insertions(+), 26 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 12d906153..d04b4ceca 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -141,6 +141,9 @@ public class Residence extends JavaPlugin { private static Residence instance; + + private boolean fullyLoaded = false; + protected String ResidenceVersion; protected List authlist; protected ResidenceManager rmanager; @@ -835,6 +838,7 @@ public void run() { getShopSignUtilManager().BoardUpdate(); CMIVersionChecker.VersionCheck(null, 11480, this.getDescription()); + fullyLoaded = true; } public void parseHelpEntries() { @@ -1239,7 +1243,8 @@ public boolean isResAdminOn(String player) { private void saveYml() throws IOException { File saveFolder = new File(dataFolder, "Save"); File worldFolder = new File(saveFolder, "Worlds"); - worldFolder.mkdirs(); + if (!worldFolder.isDirectory()) + worldFolder.mkdirs(); YMLSaveHelper yml; Map save = rmanager.save(); for (Entry entry : save.entrySet()) { @@ -1848,8 +1853,8 @@ public String getPlayerName(UUID uuid) { // Last attempt, slowest one p = getServ().getOfflinePlayer(uuid); - if (p != null) { - String name = p.getName() == null ? "_UNKNOWN_" : p.getName(); + if (p != null) { + String name = p.getName() == null ? "_UNKNOWN_" : p.getName(); cachedPlayerNames.put(uuid, name); return p.getName(); } @@ -1986,4 +1991,8 @@ public boolean isSlimefunPresent() { public boolean isLwcPresent() { return lwc; } + + public boolean isFullyLoaded() { + return fullyLoaded; + } } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 6fb487942..84bf83df2 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -222,7 +222,7 @@ public PermissionGroup getGroup() { public PermissionGroup forceUpdateGroup() { return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), true); } - + public PermissionGroup getGroup(boolean forceUpdate) { updatePlayer(); return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), forceUpdate); @@ -443,4 +443,17 @@ public void removeTrustedResidence(ClaimedResidence residence) { public void setUuid(UUID uuid) { this.uuid = uuid; } + + public static ResidencePlayer get(String name) { + return Residence.getInstance().getPlayerManager().getResidencePlayer(name); + } + + public static ResidencePlayer get(Player player) { + return Residence.getInstance().getPlayerManager().getResidencePlayer(player); + } + + public static ResidencePlayer get(UUID uuid) { + return Residence.getInstance().getPlayerManager().getResidencePlayer(uuid); + } + } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 787a5311e..830c554f4 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -33,6 +33,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; @@ -107,6 +108,8 @@ public String getPermissionsGroup(Player player) { public String getPermissionsGroup(String player, String world) { if (perms == null) return plugin.getConfigManager().getDefaultGroup().toLowerCase(); + if (!Residence.getInstance().isFullyLoaded()) + return plugin.getConfigManager().getDefaultGroup().toLowerCase(); try { return perms.getPlayerGroup(player, world).toLowerCase(); } catch (Exception e) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 4662371d1..01bbfb4c9 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -6,6 +6,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; @@ -1521,11 +1522,11 @@ public Map save() { if (createTime != 0L) root.put("CreatedOn", createTime); - if (this.isTopArea() && this.getRaid().isUnderRaidCooldown()) { + if (this.isTopArea() && raid != null && this.getRaid().isUnderRaidCooldown()) { root.put("LastRaid", this.getRaid().getEndsAt()); } - if (this.isTopArea() && this.getRaid().isImmune()) { + if (this.isTopArea() && raid != null && this.getRaid().isImmune()) { root.put("Immunity", this.getRaid().getImmunityUntil()); } @@ -2150,7 +2151,7 @@ public boolean isTrusted(Player player) { trusted = false; break; } - if (f != null && f.isInGroup(padd.groupedFlag) && !this.getPermissions().playerHas(player, f, FlagCombo.OnlyTrue)) { + if (f.isInGroup(padd.groupedFlag) && !this.getPermissions().playerHas(player, f, FlagCombo.OnlyTrue)) { trusted = false; break; } @@ -2167,11 +2168,36 @@ public boolean isTrusted(String playerName) { boolean trusted = true; for (String flag : flags) { Flags f = Flags.getFlag(flag); - if (f != null && f.isInGroup(padd.groupedFlag) && !this.getPermissions().playerHas(playerName, flag, FlagCombo.OnlyTrue)) { + if (f == null) { + trusted = false; + break; + } + if (f.isInGroup(padd.groupedFlag) && !lightWeightFlagCheck(playerName, flag)) { trusted = false; break; } } return trusted; } + + private boolean lightWeightFlagCheck(String playerName, String flag) { + Map flags = this.getPermissions().getPlayerFlags(playerName); + if (flags == null || flags.isEmpty() || !flags.containsKey(flag)) + return false; + return flags.get(flag); + } + + public Set getTrustedPlayers() { + Set trusted = new HashSet(); + Iterator>> iter = this.getPermissions().getPlayerFlags().entrySet().iterator(); + while (iter.hasNext()) { + Entry> entry = iter.next(); + if (isTrusted(entry.getKey())) { + ResidencePlayer rp = ResidencePlayer.get(entry.getKey()); + if (rp != null) + trusted.add(rp); + } + } + return trusted; + } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 46e86cb1c..88910d198 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -22,12 +22,14 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.commands.padd; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.MinimizeFlags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Items.CMIMaterial; @@ -1217,23 +1219,22 @@ public RawMessage listPlayersFlagsRaw(String player, String text) { if (next.equalsIgnoreCase(Residence.getInstance().getServerLandName())) continue; - if (!perms.equals("none")) { - if (random) { - random = false; - if (player.equals(next)) - next = ownColor + next + "&r"; - else - next = p2Color + next + "&r"; - } else { - random = true; - if (player.equals(next)) - next = ownColor + next + "&r"; - else - next = p1Color + next + "&r"; - } - rm.addText(next).addHover(splitBy(5, perms)); - rm.addText(" "); + if (perms.equals("none")) + continue; + + if (player.equals(next)) { + next = ownColor + next; + } else { + if (random) + next = p2Color + next; + else + next = p1Color + next; + random = !random; } + + rm.addText(next + "&r").addHover(splitBy(5, perms)); + rm.addText(" "); + } } @@ -1353,4 +1354,7 @@ public FlagPermissions getParent() { return parent; } + public Map> getPlayerFlags() { + return playerFlags; + } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 3b304e182..c1ee6ca16 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -709,7 +709,7 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi } resNameOwner = CMIChatColor.translate(resNameOwner); - String worldInfo = plugin.msg(lm.General_World, perms.getWorld()); + String worldInfo = plugin.msg(lm.General_World, perms.getWorldName()); if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { CuboidArea area = res.getAreaArray()[0]; diff --git a/src/plugin.yml b/src/plugin.yml index 6c6fdc050..44bf329ec 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.1.4 +version: 5.0.1.5 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 446584db5e440a65b3329435ab1d45f514c6864a Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 6 May 2022 17:06:03 +0300 Subject: [PATCH 0944/1142] Better set/pset GUI icon support --- .../bekvon/bukkit/residence/gui/FlagUtil.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 500d51043..3daf1f1a0 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -2,21 +2,24 @@ import java.util.Set; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import com.Zrips.CMI.CMI; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import net.Zrips.CMILib.CMILib; import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.GUI.CMIGui; import net.Zrips.CMILib.GUI.CMIGuiButton; import net.Zrips.CMILib.GUI.GUIManager.GUIClickType; import net.Zrips.CMILib.GUI.GUIManager.GUIRows; -import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Items.CMIAsyncHead; public class FlagUtil { @@ -46,11 +49,17 @@ public void load() { continue; String value = c.get("Global.FlagGui." + oneFlag, "WHITE_WOOL"); value = value.replace("-", ":"); - CMIMaterial Mat = CMIMaterial.get(value); - if (Mat == null) { - Mat = CMIMaterial.STONE; - } - ItemStack item = Mat.newItemStack(); + + CMIAsyncHead ahead = new CMIAsyncHead() { + @Override + public void afterAsyncUpdate(ItemStack item) { + Bukkit.getScheduler().runTask(CMI.getInstance(), () -> { + flagData.addFlagButton(oneFlag.toLowerCase(), item); + }); + } + }; + + ItemStack item = CMILib.getInstance().getItemManager().getItem(value, ahead).getCMIType().newItemStack(); flagData.addFlagButton(oneFlag.toLowerCase(), item); } } From 3768c039ad321774be2dc22b19b95b8f68a31b15 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 6 May 2022 17:11:18 +0300 Subject: [PATCH 0945/1142] Using CMILib gui buttons for next/prev pages in GUI We will allow to cycle around with page change buttons instead of stopping at first or last entry --- .../bekvon/bukkit/residence/gui/FlagUtil.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 3daf1f1a0..54d86711c 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -83,24 +83,29 @@ private void openUI(setFlagInfo flag, PageInfo pi, Player player, String title) gui.setTitle(title); gui.setInvSize(GUIRows.r6); - if (pi.getCurrentPage() < pi.getTotalPages()) { - ItemStack Item = new ItemStack(Material.ARROW); - CMIGuiButton forward = new CMIGuiButton(53, Item) { + if (pi.getTotalPages() > 1) { + CMIGuiButton forward = new CMIGuiButton(53, CMILib.getInstance().getConfigManager().getGUINextPage()) { @Override public void click(GUIClickType type) { - openUI(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() + 1), player, title); + if (pi.getCurrentPage() == pi.getTotalPages()) + openUI(flag, new PageInfo(45, flag.getButtons().size(), 1), player, title); + else + openUI(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() + 1), player, title); } }; forward.setName(Residence.getInstance().msg(lm.General_nextPageGui)); gui.addButton(forward); } - if (pi.getCurrentPage() > 1) { - ItemStack Item = new ItemStack(Material.ARROW); - CMIGuiButton back = new CMIGuiButton(45, Item) { + if (pi.getTotalPages() > 1) { + CMIGuiButton back = new CMIGuiButton(45, CMILib.getInstance().getConfigManager().getGUIPreviousPage()) { @Override public void click(GUIClickType type) { - openUI(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() - 1), player, title); + + if (pi.getCurrentPage() == 1) + openUI(flag, new PageInfo(45, flag.getButtons().size(), pi.getTotalPages()), player, title); + else + openUI(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() - 1), player, title); } }; back.setName(Residence.getInstance().msg(lm.General_prevPageGui)); From 17d5f34eeda9db1a26c5d9910ad98df692438a4e Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 7 Jul 2022 14:34:41 +0300 Subject: [PATCH 0946/1142] Optimizing placeholder handling Added compatibility for complex placeholders for future updates. --- .../Placeholders/CMIPlaceholderCache.java | 24 + .../residence/Placeholders/Placeholder.java | 475 ++++++++++++++---- .../Placeholders/PlaceholderAPIHook.java | 6 +- .../residence/commands/placeholders.java | 2 + src/plugin.yml | 2 +- 5 files changed, 409 insertions(+), 100 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/Placeholders/CMIPlaceholderCache.java diff --git a/src/com/bekvon/bukkit/residence/Placeholders/CMIPlaceholderCache.java b/src/com/bekvon/bukkit/residence/Placeholders/CMIPlaceholderCache.java new file mode 100644 index 000000000..605014580 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/Placeholders/CMIPlaceholderCache.java @@ -0,0 +1,24 @@ +package com.bekvon.bukkit.residence.Placeholders; + +public class CMIPlaceholderCache { + + private Long time = 0L; + private String result = null; + + public Long getValidUntil() { + return time; + } + + public void setValidUntil(Long time) { + this.time = time; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + +} diff --git a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java index a04d4ef3d..8f3f55974 100644 --- a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java +++ b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java @@ -1,7 +1,12 @@ package com.bekvon.bukkit.residence.Placeholders; import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -15,7 +20,7 @@ import com.bekvon.bukkit.residence.utils.GetTime; import me.clip.placeholderapi.PlaceholderAPI; -import net.Zrips.CMILib.Logs.CMIDebug; +import net.Zrips.CMILib.Chat.ChatFilterRule; public class Placeholder { @@ -25,6 +30,11 @@ public Placeholder(Residence plugin) { this.plugin = plugin; } + private static ChatFilterRule numericalRule = new ChatFilterRule().setPattern("(\\$)(\\d)"); + + static LinkedHashMap byNameStatic = new LinkedHashMap(); + static LinkedHashMap> byNameComplex = new LinkedHashMap>(); + public enum CMIPlaceHolders { residence_user_amount, residence_user_group, @@ -52,39 +62,241 @@ public enum CMIPlaceHolders { residence_user_current_rentedby, residence_user_current_rentdays, residence_user_current_rentends, + residence_user_current_flag_$1("Get flags from current residence by flag name", "flagName"), ; - public static CMIPlaceHolders getByName(String name) { - name = name.replace("_", ""); + static { for (CMIPlaceHolders one : CMIPlaceHolders.values()) { - String n = one.name().replace("_", ""); - if (n.equalsIgnoreCase(name)) { - return one; + String fullName = one.toString(); + if (!one.isComplex()) { + byNameStatic.put(fullName.toLowerCase(), one); + continue; } + String[] split = fullName.split("_"); + String first = split[0] + "_" + split[1]; + LinkedHashSet old = byNameComplex.getOrDefault(first, new LinkedHashSet()); + old.add(one); + byNameComplex.put(first, old); } - name = "residence" + name; - for (CMIPlaceHolders one : CMIPlaceHolders.values()) { - String n = one.name().replace("_", ""); - if (n.equalsIgnoreCase(name)) { - return one; + } + + private String[] vars; + private List groups = new ArrayList(); + private ChatFilterRule rule = null; + private boolean cache = true; + private String desc = null; + + private int cacheForMS = 1000; + + private int MAX_ENTRIES = 20; + LinkedHashMap map = new LinkedHashMap(MAX_ENTRIES + 1, .75F, false) { + @Override + protected boolean removeEldestEntry(Map.Entry eldest) { + return size() > MAX_ENTRIES; + } + }; + + CMIPlaceHolders() { + } + + CMIPlaceHolders(String desc, String... vars) { + this(desc, true, vars); + } + + CMIPlaceHolders(String desc, boolean cache, String... vars) { + this.desc = desc; + this.vars = vars; + this.cache = cache; + + try { + Matcher matcher = numericalRule.getMatcher(this.toString()); + if (matcher != null) { + rule = new ChatFilterRule(); + List ls = new ArrayList<>(); + ls.add("(%)" + this.toString().replaceAll("\\$\\d", "([^\"^%]*)") + "(%)"); + ls.add("(\\{)" + this.toString().replaceAll("\\$\\d", "([^\"^%]*)") + "(\\})"); + rule.setPattern(ls); + while (matcher.find()) { + try { + int id = Integer.parseInt(matcher.group(2)); + + groups.add(id); + } catch (Exception e) { + e.printStackTrace(); + } + } } + } catch (Throwable ex) { + ex.printStackTrace(); } - return null; } - public static CMIPlaceHolders getByNameExact(String name) { - name = name.toLowerCase(); - for (CMIPlaceHolders one : CMIPlaceHolders.values()) { - String n = one.name(); - if (n.equals(name)) - return one; + public Object getCachedValue(UUID uuid) { + if (!this.isCache() || this.isComplex() || uuid == null) + return null; + CMIPlaceholderCache cache = map.get(uuid); + if (cache == null || System.currentTimeMillis() > cache.getValidUntil()) + return null; + return cache.getResult(); + } + + public void addCachedValue(UUID uuid, String value, int validForMiliSeconds) { + if (uuid == null) + return; + CMIPlaceholderCache cache = map.getOrDefault(uuid, new CMIPlaceholderCache()); + cache.setResult(value); + cache.setValidUntil(System.currentTimeMillis() + validForMiliSeconds); + map.put(uuid, cache); + } + + public static CMIPlaceHolders getByName(String name) { + + if (name.startsWith("%") || name.startsWith("{")) + name = name.replaceAll("%|\\{|\\}", ""); + + CMIPlaceHolders got = byNameStatic.get(name); + if (got != null) + return got; + String original = name; + String[] split = name.split("_"); + + if (split.length < 3) { + return null; + } + + String prefix = split[0] + "_" + split[1]; + + Set main = byNameComplex.get(prefix); + + if (main == null) { + return null; + } + + for (CMIPlaceHolders mainOne : main) { + if (!mainOne.getComplexRegexMatchers(original).isEmpty()) { + return mainOne; + } } return null; } + public static CMIPlaceHolders getByNameExact(String name) { + return getByName(name); + } + public String getFull() { + if (this.isComplex()) { + String name = this.name(); + int i = 0; + for (String one : this.name().split("_")) { + if (!one.startsWith("$")) + continue; + if (vars.length >= i - 1) + name = name.replace(one, "[" + vars[i] + "]"); + i++; + } + + return "%" + name + "%"; + } return "%" + this.name() + "%"; } + + public List getComplexRegexMatchers(String text) { + List lsInLs = new ArrayList(); + if (!this.isComplex()) + return lsInLs; + + if (!text.startsWith("%") && !text.endsWith("%")) + text = "%" + text + "%"; + + Matcher matcher = this.getRule().getMatcher(text); + if (matcher == null) + return lsInLs; + while (matcher.find()) { + lsInLs.add(matcher.group()); + } + return lsInLs; + } + + public List getComplexValues(String text) { + + List lsInLs = new ArrayList(); + if (!this.isComplex() || text == null) + return lsInLs; + + if (!text.startsWith("%") && !text.endsWith("%")) + text = "%" + text + "%"; + + Matcher matcher = this.getRule().getMatcher(text); + if (matcher == null) + return lsInLs; + while (matcher.find()) { + try { + for (Integer oneG : groups) { + lsInLs.add(matcher.group(oneG + 1)); + } + } catch (Exception e) { + e.printStackTrace(); + } + break; + } + return lsInLs; + } + + public boolean isComplex() { + return rule != null; + } + + public ChatFilterRule getRule() { + return rule; + } + + public void setRule(ChatFilterRule rule) { + this.rule = rule; + } + + public String getDescription() { + return desc; + } + + public boolean isCache() { + return cache; + } +// public static CMIPlaceHolders getByName(String name) { +// name = name.replace("_", ""); +// for (CMIPlaceHolders one : CMIPlaceHolders.values()) { +// String n = one.name().replace("_", ""); +// if (n.equalsIgnoreCase(name)) { +// return one; +// } +// } +// name = "residence" + name; +// for (CMIPlaceHolders one : CMIPlaceHolders.values()) { +// String n = one.name().replace("_", ""); +// if (n.equalsIgnoreCase(name)) { +// return one; +// } +// } +// return null; +// } +// +// public static CMIPlaceHolders getByNameExact(String name) { +// name = name.toLowerCase(); +// for (CMIPlaceHolders one : CMIPlaceHolders.values()) { +// String n = one.name(); +// if (n.equals(name)) +// return one; +// } +// return null; +// } +// +// public String getFull() { +// return "%" + this.name() + "%"; +// } + + public int getCacheForMS() { + return cacheForMS; + } } public List updatePlaceHolders(Player player, List messages) { @@ -115,12 +327,18 @@ private String translateOwnPlaceHolder(Player player, String message) { if (message.contains("%")) { Matcher match = placeholderPatern.matcher(message); + while (match.find()) { String cmd = match.group(2); if (!message.contains("%")) break; CMIPlaceHolders place = CMIPlaceHolders.getByNameExact(cmd); - String with = this.getValue(player, place); + + if (place == null) + continue; + + String with = this.getValue(player, place, cmd); + if (with == null) continue; message = message.replace(place.getFull(), with); @@ -130,94 +348,157 @@ private String translateOwnPlaceHolder(Player player, String message) { return message; } + @Deprecated public String getValue(Player player, CMIPlaceHolders placeHolder) { - ResidencePlayer user = plugin.getPlayerManager().getResidencePlayer(player); + return getValue(player, placeHolder, null); + } + + public String getValue(Player player, CMIPlaceHolders placeHolder, String value) { + if (placeHolder == null) return null; + + Object cached = placeHolder.getCachedValue(player != null ? player.getUniqueId() : null); + if (cached != null) { + return (String) cached; + } + + ResidencePlayer user = plugin.getPlayerManager().getResidencePlayer(player); + + String result = null; + if (user != null) { - PermissionGroup group = user.getGroup(); - switch (placeHolder) { - case residence_user_admin: - return variable(Residence.getInstance().getPermissionManager().isResidenceAdmin(player)); - case residence_user_amount: - return String.valueOf(user.getResAmount()); - case residence_user_blockcost: - if (Residence.getInstance().getEconomyManager() != null) { - return String.valueOf(group.getCostperarea()); + + if (!placeHolder.isComplex()) { + switch (placeHolder) { + case residence_user_admin: + result = variable(Residence.getInstance().getPermissionManager().isResidenceAdmin(player)); + break; + case residence_user_amount: + result = String.valueOf(user.getResAmount()); + break; + case residence_user_blockcost: + if (Residence.getInstance().getEconomyManager() != null) { + result = String.valueOf(user.getGroup().getCostperarea()); + } + break; + case residence_user_blocksell: + if (Residence.getInstance().getEconomyManager() != null) { + result = String.valueOf(user.getGroup().getSellperarea()); + } + break; + case residence_user_cancreate: + result = variable(user.getGroup().canCreateResidences()); + break; + case residence_user_group: + result = user.getGroup().getGroupName(); + break; + case residence_user_maxew: + PermissionGroup group = user.getGroup(); + result = group.getXmin() + "-" + group.getXmax(); + break; + case residence_user_maxns: + group = user.getGroup(); + result = group.getZmin() + "-" + group.getZmax(); + break; + case residence_user_maxrentdays: + result = String.valueOf(user.getGroup().getMaxRentDays()); + break; + case residence_user_maxrents: + result = String.valueOf(user.getMaxRents()); + break; + case residence_user_maxres: + result = String.valueOf(user.getMaxRes()); + break; + case residence_user_maxsub: + result = String.valueOf(user.getMaxSubzones()); + break; + case residence_user_maxsubdepth: + result = String.valueOf(user.getMaxSubzoneDepth()); + break; + case residence_user_maxud: + group = user.getGroup(); + result = group.getYmin() + "-" + group.getYmax(); + break; + case residence_user_current_owner: + ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "" : res.getOwner(); + break; + case residence_user_current_res: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "" : res.getName(); + break; + case residence_user_current_bank: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "0" : res.getBank().getStoredMoneyFormated(); + break; + case residence_user_current_qsize: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "0" : String.valueOf(res.getTotalSize()); + break; + case residence_user_current_ssize: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "0" : String.valueOf(res.getXZSize()); + break; + case residence_user_current_forsale: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "" : String.valueOf(res.isForSell()); + break; + case residence_user_current_saleprice: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null || !res.isForSell() ? "" : String.valueOf(res.getSellPrice()); + break; + case residence_user_current_rentprice: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().cost); + break; + case residence_user_current_rentdays: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().days); + break; + case residence_user_current_rentedby: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : res.getRentedLand().player; + break; + case residence_user_current_rentends: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : GetTime.getTime(res.getRentedLand().endTime, true); + break; + case residence_user_current_forrent: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "" : String.valueOf(res.isForRent()); + break; + default: + break; } - break; - case residence_user_blocksell: - if (Residence.getInstance().getEconomyManager() != null) { - return String.valueOf(group.getSellperarea()); + if (placeHolder.isCache() && placeHolder.getCachedValue(user.getUniqueId()) == null) { + placeHolder.addCachedValue(user.getUniqueId(), result, placeHolder.getCacheForMS()); } - break; - case residence_user_cancreate: - return variable(group.canCreateResidences()); - case residence_user_group: - return group.getGroupName(); - case residence_user_maxew: - return group.getXmin() + "-" + group.getXmax(); - case residence_user_maxns: - return group.getZmin() + "-" + group.getZmax(); - case residence_user_maxrentdays: - return String.valueOf(group.getMaxRentDays()); - case residence_user_maxrents: - return String.valueOf(user.getMaxRents()); - case residence_user_maxres: - return String.valueOf(user.getMaxRes()); - case residence_user_maxsub: - return String.valueOf(user.getMaxSubzones()); - case residence_user_maxsubdepth: - return String.valueOf(user.getMaxSubzoneDepth()); - case residence_user_maxud: - return group.getYmin() + "-" + group.getYmax(); - case residence_user_current_owner: - ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null ? "" : res.getOwner(); - case residence_user_current_res: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null ? "" : res.getName(); - case residence_user_current_bank: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null ? "0" : res.getBank().getStoredMoneyFormated(); - case residence_user_current_qsize: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null ? "0" : String.valueOf(res.getTotalSize()); - case residence_user_current_ssize: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null ? "0" : String.valueOf(res.getXZSize()); - case residence_user_current_forsale: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null ? "" : String.valueOf(res.isForSell()); - case residence_user_current_saleprice: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null || !res.isForSell() ? "" : String.valueOf(res.getSellPrice()); - case residence_user_current_rentprice: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().cost); - case residence_user_current_rentdays: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().days); - case residence_user_current_rentedby: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : res.getRentedLand().player; - case residence_user_current_rentends: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : GetTime.getTime(res.getRentedLand().endTime, true); - case residence_user_current_forrent: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - return res == null ? "" : String.valueOf(res.isForRent()); - default: - break; + } else { +// if (value != null && player != null) +// switch (placeHolder) { +// case residence_user_current_flag_$1: +// +// List values = placeHolder.getComplexValues(value); +// +// if (values.size() < 1) +// return ""; +// +// ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); +// +// if (res == null) +// return null; +// +// Flags flag = Flags.getFlag(values.get(0)); +// +// break; +// } + } - } - switch (placeHolder) { - default: - break; } - return null; + return result; } private String variable(Boolean state) { diff --git a/src/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java b/src/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java index f87b2fe8a..f6ae22d20 100644 --- a/src/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java +++ b/src/com/bekvon/bukkit/residence/Placeholders/PlaceholderAPIHook.java @@ -6,6 +6,7 @@ import com.bekvon.bukkit.residence.Placeholders.Placeholder.CMIPlaceHolders; import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import net.Zrips.CMILib.Logs.CMIDebug; public class PlaceholderAPIHook extends PlaceholderExpansion { @@ -42,10 +43,11 @@ public String getVersion() { @Override public String onPlaceholderRequest(Player player, String identifier) { - CMIPlaceHolders placeHolder = CMIPlaceHolders.getByName(identifier); + + CMIPlaceHolders placeHolder = CMIPlaceHolders.getByName("residence_" + identifier); if (placeHolder == null) { return null; } - return plugin.getPlaceholderAPIManager().getValue(player, placeHolder); + return plugin.getPlaceholderAPIManager().getValue(player, placeHolder, "residence_" + identifier); } } \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/commands/placeholders.java b/src/com/bekvon/bukkit/residence/commands/placeholders.java index 885707717..866685a8e 100644 --- a/src/com/bekvon/bukkit/residence/commands/placeholders.java +++ b/src/com/bekvon/bukkit/residence/commands/placeholders.java @@ -16,6 +16,7 @@ import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.Locale.LC; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; public class placeholders implements cmd { @@ -67,6 +68,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo RawMessage rm = new RawMessage(); String extra = ""; + if (player != null) extra = plugin.getPlaceholderAPIManager().updatePlaceHolders(player, lm.command_PlacehlderResult.getMessage(one.getFull())); diff --git a/src/plugin.yml b/src/plugin.yml index 44bf329ec..419a86742 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.1.5 +version: 5.0.1.6 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From cd353dcecc457bb0d1a52f377f9ae6ae93df0318 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 8 Jul 2022 13:10:31 +0300 Subject: [PATCH 0947/1142] Fix for issue with invalid flag item material --- src/com/bekvon/bukkit/residence/gui/FlagUtil.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 54d86711c..a1e58c967 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -3,7 +3,6 @@ import java.util.Set; import org.bukkit.Bukkit; -import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -20,6 +19,8 @@ import net.Zrips.CMILib.GUI.GUIManager.GUIClickType; import net.Zrips.CMILib.GUI.GUIManager.GUIRows; import net.Zrips.CMILib.Items.CMIAsyncHead; +import net.Zrips.CMILib.Items.CMIItemStack; +import net.Zrips.CMILib.Items.CMIMaterial; public class FlagUtil { @@ -59,7 +60,12 @@ public void afterAsyncUpdate(ItemStack item) { } }; - ItemStack item = CMILib.getInstance().getItemManager().getItem(value, ahead).getCMIType().newItemStack(); + CMIItemStack i = CMILib.getInstance().getItemManager().getItem(value, ahead); + + if (i == null) + i = new CMIItemStack(CMIMaterial.STONE); + + ItemStack item = i.getItemStack(); flagData.addFlagButton(oneFlag.toLowerCase(), item); } } From 6e0f4ce66caccb590893aa5b949d56736791d087 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 8 Jul 2022 13:31:56 +0300 Subject: [PATCH 0948/1142] /res tp without defined name teleports to main residence of first in line, including rented residences --- src/com/bekvon/bukkit/residence/commands/tp.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index 7ea5ddfdc..f5cfb132a 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -5,7 +5,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -13,6 +12,8 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import net.Zrips.CMILib.FileHandler.ConfigReader; + public class tp implements cmd { @Override @@ -22,10 +23,16 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return false; Player player = (Player) sender; - if (args.length != 1) + if (args.length != 1 && args.length != 0) return false; - ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); + ClaimedResidence res = null; + if (args.length > 0) + res = plugin.getResidenceManager().getByName(args[0]); + + if (res == null && args.length == 0) { + res = plugin.getPlayerManager().getResidencePlayer(player).getMainResidence(); + } if (res == null) { plugin.msg(player, lm.Invalid_Residence); From 66058f24f7c110cd21b634082bae8d2085d35dd7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 8 Jul 2022 14:05:10 +0300 Subject: [PATCH 0949/1142] Exclude command you dont have access for Better tabcomplete for commands with similar names --- .../bukkit/residence/text/help/HelpEntry.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index ee22318bd..2dec6730d 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -32,7 +32,9 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.CMIList; import net.Zrips.CMILib.Container.PageInfo; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Version.Version; @@ -298,8 +300,16 @@ public Set getSubCommands(CommandSender sender, String[] args) { List ArgsList = new ArrayList(); if (args.length > 0) { - HashMap> mp = Residence.getInstance().getLocaleManager().CommandTab.get(args[0].toLowerCase()); - if (mp != null) { + HashMap> mp = new HashMap>(); + List base = new ArrayList(); + for (Entry>> one : Residence.getInstance().getLocaleManager().CommandTab.entrySet()) { + if (one.getKey().startsWith(args[0].toLowerCase())) { + mp.putAll(one.getValue()); + base.add(one.getKey()); + } + } + + if (!mp.isEmpty()) { if (args.length > 1) { if (args[args.length - 1].isEmpty()) { List ls = mp.get(args[1].toLowerCase()); @@ -329,11 +339,13 @@ public Set getSubCommands(CommandSender sender, String[] args) { } } } else { + ArgsList.add(CMIList.listToString(base, "%%")); ArgsList.add(getMp(mp)); } } else { for (String one : Residence.getInstance().getLocaleManager().CommandTab.keySet()) { - subCommands.add(one); + if (ResPerm.command_$1.hasPermission(sender, one)) + subCommands.add(one); } return subCommands; } From 0194107f0a78be39b69a141428696016f9287b52 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 11 Jul 2022 13:49:24 +0300 Subject: [PATCH 0950/1142] NoDurability flag fix and improvement --- .../bukkit/residence/listeners/SpigotListener.java | 10 ++++------ src/plugin.yml | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java index 66ccee6c9..0a69a5a98 100644 --- a/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/SpigotListener.java @@ -15,7 +15,7 @@ import com.bekvon.bukkit.residence.utils.Utils; public class SpigotListener implements Listener { - @SuppressWarnings("deprecation") + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onItemDamage(PlayerItemDamageEvent event) { // disabling event on world @@ -28,15 +28,13 @@ public void onItemDamage(PlayerItemDamageEvent event) { return; ItemStack held = Utils.itemInMainHand(player); - if (held.getType() == Material.AIR || held.getDurability() <= 0) + + if (held.getType() == Material.AIR) return; - if (held.getType().toString().equalsIgnoreCase("TRIDENT")) { + if (held.getType().toString().equalsIgnoreCase("TRIDENT")) return; - } - held.setDurability(held.getDurability()); - player.setItemInHand(held); event.setDamage(0); event.setCancelled(true); } diff --git a/src/plugin.yml b/src/plugin.yml index 419a86742..d9a3eacc3 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.1.6 +version: 5.0.1.7 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From caf455b061a9ab8fc5d4ea40c53dd544c9fedda8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 11 Jul 2022 15:10:33 +0300 Subject: [PATCH 0951/1142] Include all vines into grow flag --- .../bukkit/residence/listeners/ResidenceBlockListener.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 042bfb215..6c6497737 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -66,6 +66,7 @@ import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { @@ -139,7 +140,10 @@ public void onVineGrow(BlockSpreadEvent event) { // Disabling listener if flag disabled globally if (!Flags.grow.isGlobalyEnabled()) return; - if (event.getSource().getType() != Material.VINE) + + CMIMaterial type = CMIMaterial.get(event.getSource().getType()); + + if (!type.equals(CMIMaterial.VINE) && !type.toString().contains("_VINES")) return; if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) return; From 2930847abf6f5e0006460ea4c71e5fe4be4e58e3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 11 Jul 2022 15:29:22 +0300 Subject: [PATCH 0952/1142] Fix for stack overflow due to continuous teleportation --- .../listeners/ResidencePlayerListener.java | 120 +++++++++--------- 1 file changed, 63 insertions(+), 57 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 33f3a82ad..bcfda64ce 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -84,7 +84,6 @@ import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; @@ -646,7 +645,7 @@ else if (white == 0) break; } } - + if (white != 0 && white >= black || black == 0) return; @@ -1003,7 +1002,7 @@ public static boolean isEmptyBlock(Block block) { return true; if (cb.isButton()) return true; - + return false; } @@ -2227,60 +2226,59 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move currentRes.remove(uuid); } else { if (res != null && ResOld.getName().equals(res.getName())) { - if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) - && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { - if (!res.isOwner(player)) { - Location lc = player.getLocation(); - Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); - location.setPitch(lc.getPitch()); - location.setYaw(lc.getYaw()); - int from = location.getBlockY(); - int maxH = from + 3; - if (location.getWorld().getEnvironment() == Environment.NETHER) - maxH = 100; - else - maxH = location.getWorld().getHighestBlockAt(location).getLocation().getBlockY() + 3; - - for (int i = 0; i < maxH; i++) { - location.setY(from - i); - Block block = location.getBlock(); - if (!isEmptyBlock(block)) { - location.setY(from - i + 1); - break; - } - if (location.getBlockY() <= 0) { - Location lastLoc = lastOutsideLoc.get(uuid); - player.closeInventory(); - boolean teleported = false; - if (move) { - if (lastLoc != null) - teleported = teleport(player, lastLoc); - else - teleported = teleport(player, res.getOutsideFreeLoc(loc, player)); - } - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); - if (!teleported) - return false; - return true; - } - } - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); - player.closeInventory(); - if (move) { - boolean teleported = teleport(player, location); - if (!teleported) - return false; - } - player.setFlying(false); - player.setAllowFlight(false); - } - } - lastOutsideLoc.put(uuid, loc); - return true; +// if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) +// && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { +// if (!res.isOwner(player)) { +// Location lc = player.getLocation(); +// Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); +// location.setPitch(lc.getPitch()); +// location.setYaw(lc.getYaw()); +// int from = location.getBlockY(); +// int maxH = from + 3; +// if (location.getWorld().getEnvironment() == Environment.NETHER) +// maxH = 100; +// else +// maxH = location.getWorld().getHighestBlockAt(location).getLocation().getBlockY() + 3; +// +// for (int i = 0; i < maxH; i++) { +// location.setY(from - i); +// Block block = location.getBlock(); +// if (!isEmptyBlock(block)) { +// location.setY(from - i + 1); +// break; +// } +// if (location.getBlockY() <= 0) { +// Location lastLoc = lastOutsideLoc.get(uuid); +// player.closeInventory(); +// boolean teleported = false; +// if (move) { +// if (lastLoc != null) +// teleported = teleport(player, lastLoc); +// else +// teleported = teleport(player, res.getOutsideFreeLoc(loc, player)); +// } +// plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); +// if (!teleported) +// return false; +// return true; +// } +// } +// plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); +// player.closeInventory(); +// if (move) { +// boolean teleported = teleport(player, location); +// if (!teleported) +// return false; +// } +// player.setFlying(false); +// player.setAllowFlight(false); +// } +// } +// lastOutsideLoc.put(uuid, loc); +// return true; } } - if (!plugin.getAutoSelectionManager().getList().isEmpty()) { Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override @@ -2465,10 +2463,18 @@ public void run() { if (cantMove) { Location lastLoc = lastOutsideLoc.get(uuid); player.closeInventory(); - if (lastLoc != null && CMIMaterial.isAir(lastLoc.getBlock().getType())) - teleport(player, lastLoc); - else + if (lastLoc != null && CMIMaterial.isAir(lastLoc.getBlock().getType())) { + Long last = lastUpdate.get(player.getUniqueId()); + // Fail safe in case we are triggering teleportation event check with this teleportion, we should teleport player outside residence instead of its repeating teleportation to avoid stack overflow + if (last != null && System.currentTimeMillis() - last > 45L) { + teleport(player, res.getOutsideFreeLoc(loc, player)); + } else { + this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); + teleport(player, lastLoc); + } + } else { teleport(player, res.getOutsideFreeLoc(loc, player)); + } return false; } else { currentRes.put(uuid, res); From f7546225bf1b57674fc7bd829bd50909be484bb2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 11 Jul 2022 16:16:31 +0300 Subject: [PATCH 0953/1142] nomobs flag optimization Only grabbing mobs from chunks which contain residence Adding one layer of subzone check in case subzone contains nomobs flag while player is located in parent area No more checks for same residences in case there are more than one player --- .../listeners/ResidencePlayerListener.java | 45 +++++++++++++++---- .../protection/ClaimedResidence.java | 12 +++-- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index bcfda64ce..fa8049f05 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1,6 +1,7 @@ package com.bekvon.bukkit.residence.listeners; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -14,6 +15,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.WeatherType; +import org.bukkit.World; import org.bukkit.World.Environment; import org.bukkit.block.Block; import org.bukkit.block.Sign; @@ -71,9 +73,11 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import com.bekvon.bukkit.residence.protection.ResidenceManager.ChunkRef; import com.bekvon.bukkit.residence.signsStuff.Signs; import com.bekvon.bukkit.residence.utils.GetTime; import com.bekvon.bukkit.residence.utils.Utils; @@ -84,6 +88,7 @@ import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; @@ -2646,24 +2651,46 @@ public void DespawnMobs() { return; try { + + Set residences = new HashSet(); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { ClaimedResidence res = getCurrentResidence(player.getUniqueId()); - if (res == null) continue; - if (!res.getPermissions().has(Flags.nomobs, false)) + if (!res.getPermissions().has(Flags.nomobs, false)) { + for (ClaimedResidence sub : res.getSubzonesMap().values()) { + if (!sub.getPermissions().has(Flags.nomobs, false)) { + continue; + } + residences.add(sub); + } + continue; + } + residences.add(res); + } + + for (ClaimedResidence res : residences) { + Set entities = new HashSet(); + + World world = Bukkit.getWorld(res.getWorld()); + + if (world == null) continue; - List entities = Bukkit.getServer().getWorld(res.getWorld()).getEntities(); + for (CuboidArea area : res.getAreaMap().values()) { + for (ChunkRef chunk : area.getChunks()) { + entities.addAll(Arrays.asList(world.getChunkAt(chunk.getX(), chunk.getZ()).getEntities())); + } + } for (Entity ent : entities) { if (!ResidenceEntityListener.isMonster(ent)) continue; - - if (res.containsLoc(ent.getLocation())) { - ClaimedResidence ares = plugin.getResidenceManager().getByLoc(ent.getLocation()); - if (ares.getPermissions().has(Flags.nomobs, FlagCombo.OnlyTrue)) { - ent.remove(); - } + if (!res.containsLoc(ent.getLocation())) + continue; + ClaimedResidence ares = plugin.getResidenceManager().getByLoc(ent.getLocation()); + if (ares.getPermissions().has(Flags.nomobs, FlagCombo.OnlyTrue)) { + ent.remove(); } } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 01bbfb4c9..fbebacbee 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1175,6 +1175,10 @@ public List getSubzones() { return list; } + public Map getSubzonesMap() { + return subzones; + } + public int getSubzonesAmount(Boolean includeChild) { int i = 0; for (Entry res : subzones.entrySet()) { @@ -2179,11 +2183,11 @@ public boolean isTrusted(String playerName) { } return trusted; } - - private boolean lightWeightFlagCheck(String playerName, String flag) { - Map flags = this.getPermissions().getPlayerFlags(playerName); + + private boolean lightWeightFlagCheck(String playerName, String flag) { + Map flags = this.getPermissions().getPlayerFlags(playerName); if (flags == null || flags.isEmpty() || !flags.containsKey(flag)) - return false; + return false; return flags.get(flag); } From 170e06ef94f9889bd980011bd27170e71d07b4c2 Mon Sep 17 00:00:00 2001 From: flandretw <51469621+flandretw@users.noreply.github.com> Date: Wed, 3 Aug 2022 14:41:32 +0800 Subject: [PATCH 0954/1142] Updated ChineseTW language Fixed many wrong grammar and adapted Minecraft 1.18+ punctuation changes. --- src/Language/ChineseTW.yml | 1796 ++++++++++++++++++------------------ 1 file changed, 908 insertions(+), 888 deletions(-) diff --git a/src/Language/ChineseTW.yml b/src/Language/ChineseTW.yml index d3f3df3e6..0697a5d6a 100644 --- a/src/Language/ChineseTW.yml +++ b/src/Language/ChineseTW.yml @@ -15,76 +15,77 @@ Language: Cost: '&c無效的花費……' Days: '&c無效的天數……' Material: '&c無效的物å“……' - Boolean: '&c無效的值,值必須為 &6true (t) &c或 &6false (f)。' + Boolean: '&c無效的值,值必須為 &6true(t)&c或 &6false(f)&c。' Area: '&c無效的å€åŸŸâ€¦â€¦' Group: '&c無效的權é™çµ„……' - MessageType: '&c訊æ¯é¡žåž‹å¿…須為 enter (進入)〠leave (離開) 或 remove (移除)。' + MessageType: '&c訊æ¯é¡žåž‹å¿…須為 enter(進入)ã€leave(離開)或 remove(移除)。' Flag: '&c無效的權é™â€¦â€¦' FlagType: Fail: '&c無效的權é™â€¦â€¦ 這個權é™åªèƒ½ç”¨åœ¨ %1。' Player: Player Residence: Residence - FlagState: '&c無效的權é™ç‹€æ…‹ï¼Œç‹€æ…‹å¿…須為 true (t)〠false (f) 或 remove (r)' - List: '&e未知的列表類型,列表必須為 &6blacklist (黑å單) &e或 &6ignorelist (忽略å單)。' + FlagState: '&c無效的權é™ç‹€æ…‹ï¼Œç‹€æ…‹å¿…須為 &6true(t)&cã€&6false(f)&c或 &6remove(r)&c。' + List: '&e未知的列表類型,列表必須為 &6blacklist(黑å單)&e或 &6ignorelist(忽略å單)&e。' Page: '&e無效的é æ•¸â€¦â€¦' Help: '&c無效的說明é æ•¸â€¦â€¦' NameCharacters: '&cå稱包å«ä¸å…許字元……' - FromConsole: '&c該指令åªèƒ½åœ¨æŽ§åˆ¶å°åŸ·è¡Œ ï¼' - Ingame: '&c該指令無法在控制å°åŸ·è¡Œ ï¼' + PortalDestination: '&c傳é€é–€ç›®çš„地ä½æ–¼ç¦æ­¢å€åŸŸå…§ï¼Œå·²å–消建立傳é€é–€ã€‚&7請尋找新ä½ç½®ã€‚' + FromConsole: '&c該指令åªèƒ½åœ¨æŽ§åˆ¶å°åŸ·è¡Œï¼' + Ingame: '&c該指令無法在控制å°åŸ·è¡Œï¼' Area: - Exists: '&cå€åŸŸå稱已存在。' - Create: '&e已建立領地 ID &6%1。' + Exists: '&c已存在相åŒå€åŸŸå稱。' + Create: '&e已建立領地 ID:&6%1&e。' DiffWorld: '&cå€åŸŸå’Œé ˜åœ°å­˜åœ¨ä¸åŒçš„世界。' Collision: '&cå€åŸŸå’Œé ˜åœ° &6%1 &cè¡çªã€‚' SubzoneCollision: '&cå€åŸŸå’Œå­å€åŸŸé ˜åœ° &6%1 &cè¡çªã€‚' NonExist: '&cå€åŸŸä¸å­˜åœ¨ã€‚' InvalidName: '&c無效的å€åŸŸå稱……' - ToSmallX: '&cé¸æ“‡å€åŸŸ &6X &cæ–¹å‘長度 (&6%1&c) éŽå°ã€‚&e該值必須為 &6%2 &e或更大。' - ToSmallY: '&cé¸æ“‡å€åŸŸå€åŸŸ &6X &cæ–¹å‘高度 (&6%1&c) éŽå°ã€‚&e該值必須為 &6%2 &e或更大。' - ToSmallZ: '&cé¸æ“‡å€åŸŸå€åŸŸ &6Z &cæ–¹å‘長度 (&6%1&c) éŽå°ã€‚&e該值必須為 &6%2 &e或更大。' - ToBigX: '&cé¸æ“‡å€åŸŸ &6X &cæ–¹å‘長度 (&6%1&c) éŽå¤§ã€‚&e該值必須為 &6%2 &e或更å°ã€‚' - ToBigY: '&cé¸æ“‡å€åŸŸå€åŸŸ &6X &cæ–¹å‘高度 (&6%1&c) éŽå¤§ã€‚&e該值必須為 &6%2 &e或更å°ã€‚' - ToBigZ: '&cé¸æ“‡å€åŸŸå€åŸŸ &6Z &cæ–¹å‘長度 (&6%1&c) éŽå¤§ã€‚&e該值必須為 &6%2 &e或更å°ã€‚' - Rename: '&eå€åŸŸ &6%1 &e已被é‡æ–°å‘½å為 &6%2。' - Remove: '&e移除å€åŸŸ &6%1……' - Name: '&eå稱 : &2%1。' - ListAll: '&a{&eID : &c%1 &eP1 : &c(%2,%3,%4) &eP2 : &c(%5,%6,%7) &e(尺寸 : &c%8&e)&a}' - RemoveLast: '&c無法移除領地中的最後一個å€åŸŸã€‚' + ToSmallX: '&cä½ é¸æ“‡çš„å€åŸŸ &6X 軸&cæ–¹å‘長度(&6%1&c)éŽå°ã€‚&e該值必須為 &6%2 &e或更大。' + ToSmallY: '&cä½ é¸æ“‡çš„å€åŸŸ &6Y 軸&cæ–¹å‘高度(&6%1&c)éŽå°ã€‚&e該值必須為 &6%2 &e或更大。' + ToSmallZ: '&cä½ é¸æ“‡çš„å€åŸŸ &6Z 軸&cæ–¹å‘長度(&6%1&c)éŽå°ã€‚&e該值必須為 &6%2 &e或更大。' + ToBigX: '&cä½ é¸æ“‡çš„å€åŸŸ &6X 軸&cæ–¹å‘長度(&6%1&c)éŽå¤§ã€‚&e該值必須為 &6%2 &e或更å°ã€‚' + ToBigY: '&cä½ é¸æ“‡çš„å€åŸŸ &6Y 軸&cæ–¹å‘高度(&6%1&c)éŽå¤§ã€‚&e該值必須為 &6%2 &e或更å°ã€‚' + ToBigZ: '&cä½ é¸æ“‡çš„å€åŸŸ &6Z 軸&cæ–¹å‘長度(&6%1&c)éŽå¤§ã€‚&e該值必須為 &6%2 &e或更å°ã€‚' + Rename: '&eå·²é‡æ–°å‘½åå€åŸŸ &6%1 &e為 &6%2&e。' + Remove: '&e已移除å€åŸŸ &6%1&e……' + Name: '&eå稱:&2%1&e。' + ListAll: '&a{&eID:&c%1 &eP1:&c(%2,%3,%4)&eP2:&c(%5,%6,%7)&e(尺寸:&c%8&e)&a}' + RemoveLast: '&c無法移除領地中的最後å€åŸŸã€‚' NotWithinParent: '&cå€åŸŸä¸åœ¨çˆ¶å€åŸŸå…§ã€‚' Update: '&e已更新å€åŸŸâ€¦â€¦' MaxPhysical: '&eä½ å·²é”到了領地最大å…許體ç©ã€‚' SizeLimit: '&eå€åŸŸå¤§å°è¶…出了å…許的尺寸上é™ã€‚' - HighLimit: '&cä½ ä¸èƒ½ä¿è­·é€™éº¼é«˜çš„領地,高度上é™ç‚º &6%1。' - LowLimit: ä½ ä¸èƒ½ä¿è­·é€™éº¼æ·±çš„領地,深度上é™ç‚º &6%1。 + HighLimit: '&cä½ ä¸èƒ½ä¿è­·é€™éº¼é«˜çš„領地,高度上é™ç‚º &6%1&c。' + LowLimit: '&cä½ ä¸èƒ½ä¿è­·é€™éº¼æ·±çš„領地,深度上é™ç‚º &6%1&c。' Select: - Points: '&e執行指令å‰è¦å…ˆé¸æ“‡å…©å€‹é»ž ï¼' - Overlap: '&cé¸æ“‡é»žå’Œå€åŸŸ &6%1 &cé‡ç–Š ï¼' - WorldGuardOverlap: '&cé¸æ“‡é»žèˆ‡ WorldGuard å€åŸŸ &6%1 &cé‡ç–Š ï¼' - KingdomsOverlap: '&cé¸æ“‡é»žèˆ‡ Kingdoms 領土 &6%1 &cé‡ç–Š ï¼' - Success: '&eé¸æ“‡æˆåŠŸ ï¼' + Points: '&e執行指令å‰è¦å…ˆé¸æ“‡å…©å€‹é»žï¼' + Overlap: '&cé¸æ“‡é»žå’Œå€åŸŸ &6%1 &cé‡ç–Šï¼' + WorldGuardOverlap: '&cé¸æ“‡é»žèˆ‡ WorldGuard å€åŸŸ &6%1 &cé‡ç–Šï¼' + KingdomsOverlap: '&cé¸æ“‡é»žèˆ‡ Kingdoms 領土 &6%1 &cé‡ç–Šï¼' + Success: '&eé¸æ“‡æˆåŠŸï¼' Fail: '&c無效的é¸æ“‡æŒ‡ä»¤â€¦â€¦' Bedrock: '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°æœ€ä½Žæ·±åº¦ã€‚' Sky: '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°æœ€é«˜é«˜åº¦ã€‚' Area: '&eå·²é¸æ“‡ &6%2 &e領地的 &6%1 &eå€åŸŸã€‚' - Tool: '&e- é¸æ“‡å·¥å…· : &6%1' - PrimaryPoint: '&eå·²é¸æ“‡ &6第一個 &eé¸æ“‡é»ž %1&e。' - SecondaryPoint: '&eå·²é¸æ“‡ &6第二個 &eé¸æ“‡é»ž %1&e。' - Primary: '&e第一個é¸æ“‡é»ž : &6%1。' - Secondary: '&e第二個é¸æ“‡é»ž : &6%1。' - TooHigh: '&c警告,é¸æ“‡å€åŸŸå·²è¶…éŽåœ°åœ–頂端,ç¾åœ¨å·²è£å‰ªã€‚' + Tool: '&e- é¸æ“‡å·¥å…·ï¼š&6%1&e。' + PrimaryPoint: '&eå·²é¸æ“‡&6第一個&eé¸æ“‡é»ž %1&e。' + SecondaryPoint: '&eå·²é¸æ“‡&6第二個&eé¸æ“‡é»ž %1&e。' + Primary: '&e第一個é¸æ“‡é»žï¼š&6%1&e。' + Secondary: '&e第二個é¸æ“‡é»žï¼š&6%1&e。' + TooHigh: '&c警告,é¸æ“‡å€åŸŸå·²è¶…éŽåœ°åœ–頂部,ç¾åœ¨å·²è£å‰ªã€‚' TooLow: '&c警告,é¸æ“‡å€åŸŸå·²è¶…éŽåœ°åœ–底部,ç¾åœ¨å·²è£å‰ªã€‚' - TotalSize: '&eé¸æ“‡å€åŸŸç¸½è¨ˆå°ºå¯¸ : &6%1' - AutoEnabled: '&e自動é¸æ“‡æ¨¡å¼&6é–‹å•Ÿ&e,輸入 &6/res select auto &e關閉。' - AutoDisabled: '&e自動é¸æ“‡æ¨¡å¼&6關閉&e,輸入 &6/res select auto &eå†æ¬¡æ‰“開。' + TotalSize: '&eé¸æ“‡å€åŸŸç¸½è¨ˆå°ºå¯¸ï¼š&6%1&e。' + AutoEnabled: '&e自動é¸æ“‡æ¨¡å¼&6é–‹å•Ÿ&e,使用 &6/res select auto &e關閉。' + AutoDisabled: '&e自動é¸æ“‡æ¨¡å¼&6關閉&e,使用 &6/res select auto &eå†æ¬¡æ‰“開。' Disabled: '&c你沒有使用é¸æ“‡æŒ‡ä»¤çš„權é™ã€‚' Sign: - Updated: '&6%1 &e已更新告示牌 ï¼' + Updated: '&6%1 &e已更新告示牌ï¼' TopLine: '[market]' DateFormat: YY/MM/dd HH:mm ForRentTopLine: '&0出租' ForRentPriceLine: '&0%1&f/&0%2&f/&0%3' ForRentResName: '&0%1' - ForRentBottomLine: '&9å¯ç”¨' + ForRentBottomLine: '&9å¯ä¾›ä½¿ç”¨' RentedAutorenewTrue: '&2%1' RentedAutorenewFalse: '&c%1' RentedTopLine: '%1' @@ -95,64 +96,64 @@ Language: ForSalePriceLine: '&0%1' ForSaleResName: '&0%1' ForSaleBottom: '&0%1 立方公尺' - LookAt: '&cä½ å‰æ–¹æ²’有告示牌' + LookAt: '&cä½ å‰æ–¹æ²’有告示牌。' ResName: '&0%1' Owner: '&0%1' Raid: - NotEnabled: '&c尚未開啟çªè¥²æ¨¡å¼ ï¼' - NotIn: '&cä½ ä¸åœ¨çªè¥²ä¸­ ï¼' - CantLeave: '&cä½ ä¸èƒ½åœ¨çªè¥²ä¸­é›¢é–‹é ˜åœ° (%1)ï¼' - CantKick: '&c無法踢出領地æ“有者 (%1)ï¼' - Kicked: '&e從領地 &7%2 çªè¥²ä¸­è¸¢å‡º &7%1 ï¼' - StartsIn: '&7çªè¥²é–‹å§‹ : [autoTimeLeft] &2防守 : %1 &4進攻 : %2' - EndsIn: '&cçªè¥²çµæŸ : [autoTimeLeft] &2防守 : %1 &4進攻 : %2' - Ended: '&7領地çªè¥² &4%1 &7çµæŸ ï¼' - cantDo: '&c無法在領地çªè¥²æ™‚åšé€™ä»¶äº‹æƒ… ï¼' - left: '&7你已離開了領地 &4%1 &7çªè¥² ï¼' - noFlagChange: '&c無法在領地çªè¥²æ™‚切æ›æ¬Šé™ ï¼' - noRemoval: '&c無法在領地çªè¥²æ™‚移除領地 ï¼' - immune: '&eå…除下一個 %1 ï¼' - notImmune: '&eä¸å†å…除 ï¼' - notInRaid: '&e玩家ä¸åœ¨çªè¥²ä¸­ ï¼' + NotEnabled: '&c尚未開啟侵略模å¼ï¼' + NotIn: '&cä½ ä¸åœ¨ä¾µç•¥ä¸­ï¼' + CantLeave: '&cä½ ä¸èƒ½åœ¨ä¾µç•¥ä¸­é›¢é–‹é ˜åœ°ï¼ˆ%1)ï¼' + CantKick: '&c無法踢出領地æ“有者(%1)ï¼' + Kicked: '&e從領地 &7%2 侵略中踢出 &7%1&eï¼' + StartsIn: '&7侵略開始於:[autoTimeLeft] &2防守方:%1 人 &4進攻方:%2 人' + EndsIn: '&c侵略çµæŸæ–¼ï¼š[autoTimeLeft] &2防守方:%1 人 &4進攻方:%2 人' + Ended: '&7領地侵略 &4%1 &7çµæŸï¼' + cantDo: '&c無法在領地侵略時åšé€™ä»¶äº‹æƒ…ï¼' + left: '&7你已離開了領地 &4%1 &7侵略ï¼' + noFlagChange: '&c無法在領地侵略時修改權é™ï¼' + noRemoval: '&c無法在領地侵略時移除領地ï¼' + immune: '&e設定下一波侵略 %1&eï¼' + notImmune: '&eä¸å†é€²è¡Œè¨­å®šï¼' + notInRaid: '&e玩家ä¸åœ¨ä¾µç•¥ä¸­ï¼' attack: - Joined: '&7已加入 &2%1 &7çªè¥² ï¼' - Started: '&7çªè¥²é–‹å§‹ ï¼' - cooldown: '&c太早進行下一場領地çªè¥² ï¼ è«‹ç­‰å€™ %1 ï¼' - immune: '&c這個領地å…除çªè¥² ï¼ è«‹ç­‰å€™ %1 ï¼' - playerImmune: '&c領地æ“有者å…除çªè¥² ï¼ è«‹ç­‰å€™ %1 ï¼' - isOffline: '&c無法在領地æ“有者離線時çªè¥² ï¼' - noSubzones: '&c無法çªè¥²å­å€åŸŸé ˜åœ° ï¼' - noSelf: '&c無法çªè¥²ä½ è‡ªå·±çš„領地 ï¼' - alreadyInAnother: '&c因為你已在å¦å¤–一場çªè¥² (%1),所以你無法加入這場çªè¥² ï¼' + Joined: '&7已加入 &2%1 &7侵略ï¼' + Started: '&7侵略開始ï¼' + cooldown: '&c太早進行下一場領地侵略ï¼è«‹ç­‰å€™ %1ï¼' + immune: '&c這個領地å…除侵略ï¼è«‹ç­‰å€™ %1ï¼' + playerImmune: '&c領地æ“有者å…除侵略ï¼è«‹ç­‰å€™ %1ï¼' + isOffline: '&c無法在領地æ“有者離線時侵略ï¼' + noSubzones: '&c無法侵略å­å€åŸŸé ˜åœ°ï¼' + noSelf: '&c無法侵略你自己的領地ï¼' + alreadyInAnother: '&c因為你已在å¦å¤–一場侵略(%1),所以你無法加入這場侵略ï¼' defend: - Joined: '&7已加入 &2%1 &7防守 ï¼' - Sent: '&7已確èªåŠ å…¥çªè¥²é˜²å®ˆï¼Œæ­£åœ¨ç­‰å¾…確èªã€‚' - Join: '&7加入 &6%1 &7çªè¥²é˜²å®ˆ' - Invitation: '&7從 &6%1 接å—çªè¥²é˜²å®ˆ ï¼' - JoinedDef: '&2%1&7 加入了防守 ï¼' - IsOffline: '&c無法在領地æ“有者離線時加入çªè¥²é˜²å®ˆ ï¼' - noSelf: '&c你已在這個領地中防守' - notRaided: '&c領地目å‰æ²’有é­å—çªè¥² ï¼' - alreadyInAnother: '&c因為你已在å¦å¤–一場çªè¥²é˜²å®ˆ (%1),所以你無法加入這場çªè¥²é˜²å®ˆ ï¼' + Joined: '&7已加入 &2%1 &7防守方ï¼' + Sent: '&7已確èªåŠ å…¥ä¾µç•¥é˜²å®ˆæ–¹ï¼Œæ­£åœ¨ç­‰å¾…確èªã€‚' + Join: '&7加入 &6%1 &7侵略防守方' + Invitation: '&7從 &6%1 &7接å—侵略防守方ï¼' + JoinedDef: '&2%1&7 加入了防守方ï¼' + IsOffline: '&c無法在領地æ“有者離線時加入侵略防守方ï¼' + noSelf: '&c你已在這個領地中防守方' + notRaided: '&c領地目å‰æ²’有正在侵略ï¼' + alreadyInAnother: '&c因為你已在å¦å¤–一場侵略防守方(%1),所以你無法加入這場侵略防守方ï¼' status: - title: '&7----------- &f%1 (%2) &7-----------' - immune: '&eå°æŽ¥ä¸‹ä¾†çš„çªè¥²å…除 : %1。' - starts: '&7領地çªè¥²å°‡åœ¨ä»¥ä¸‹æ™‚間後開始 : %1。' - attackers: '&7攻擊者 : &4%1。' - defenders: '&7防守者 : &4%1。' - ends: '&7領地çªè¥²å°‡åœ¨ä»¥ä¸‹æ™‚間後çµæŸ : %1。' - canraid: '&2å¯ä»¥è¢«çªè¥²ã€‚' - raidin: '&eå¯èƒ½çš„çªè¥² : %1。' - stopped: '&eçªè¥²åœ¨ &6%1 &e被åœæ­¢ã€‚' + title: '&7----------- &f%1(%2)&7-----------' + immune: '&eå°æŽ¥ä¸‹ä¾†çš„侵略å…除:%1&e。' + starts: '&7領地侵略將在以下時間後開始:%1&7。' + attackers: '&7攻擊者:&4%1&7。' + defenders: '&7防守方者:&4%1&7。' + ends: '&7領地侵略將在以下時間後çµæŸï¼š%1&7。' + canraid: '&2å¯ä»¥è¢«ä¾µç•¥ã€‚' + raidin: '&eå¯èƒ½çš„侵略:%1&e。' + stopped: '&e侵略 &6%1 &e被åœæ­¢ã€‚' info: - years: '&e%1 &6å¹´ ' - oneYear: '&e%1 &6å¹´ ' - day: '&e%1 &6天 ' - oneDay: '&e%1 &6天 ' - hour: '&e%1 &6å°æ™‚ ' - oneHour: '&e%1 &6å°æ™‚ ' - min: '&e%1 &6åˆ†é˜ ' - sec: '&e%1 &6秒 ' + years: '&e%1 &6å¹´' + oneYear: '&e%1 &6å¹´' + day: '&e%1 &6天' + oneDay: '&e%1 &6天' + hour: '&e%1 &6å°æ™‚' + oneHour: '&e%1 &6å°æ™‚' + min: '&e%1 &6分é˜' + sec: '&e%1 &6秒' listSplitter: ', ' click: '&7點擊' clickToConfirm: '&7點擊確èª' @@ -166,15 +167,15 @@ Language: havePrefix: '' denyColor: '&4' denyPrefix: '' - Set: '&e領地 &6%2 &eçš„ &6%1 &e權é™å·²è¨­å®šç‚º &6%3 &e狀態。' - SetFailed: '&c你沒有設定 &6%1 &c的權é™ã€‚' + Set: '&e領地 &6%2 &eçš„ &6%1 &e權é™å·²è¨­å®šç‚º &6%3&e。' + SetFailed: '&c你沒有設定&6%1&c的權é™ã€‚' CheckTrue: '&e玩家 &6%2 &e已在領地 &6%3 &e中將 &6%1 &e權é™è¨­å®šç‚º &6%4&e。' CheckFalse: '&e玩家 &6%2 &e沒有在領地中設定 &6%1 &e權é™ã€‚' Cleared: '&e已清除權é™ã€‚' RemovedAll: '&e已清除 &6%1 &e在領地 &6%2 &e的所有權é™ã€‚' RemovedGroup: '&e已清除 &6%1 &e組在領地 &6%2 &e的所有權é™ã€‚' Default: '&eå·²æ¢å¾©é è¨­æ¬Šé™ã€‚' - Deny: '&c你沒有 &6%1 &c的權é™ã€‚' + Deny: '&c你沒有&6%1&c的權é™ã€‚' SetDeny: '&cæ“有者ä¸èƒ½è¨­å®š &6%1 &c的權é™ã€‚' ChangeDeny: '&c因為領地內有 &6%2 &cå玩家,所以你無法更改 &6%1 &c的權é™ã€‚' ChangedForOne: '&e已為領地 &6%2 &e更改 &6%1 &e的權é™ã€‚' @@ -183,13 +184,13 @@ Language: resetAll: '&eå·²é‡æ–°è¨­å®šé ˜åœ° &6%1 &e的權é™ã€‚' Bank: NoAccess: '&c你沒有使用銀行的權é™ã€‚' - Name: ' &e銀行 : &6%1' + Name: ' &e銀行:&6%1' NoMoney: '&c銀行存款ä¸è¶³ã€‚' Deposit: '&eä½ å‘領地銀行存款 &6%1&e。' Withdraw: '&e你從領地銀行中æ款 &6%1&e。' - rentedWithdraw: '&c無法從出租領地銀行æ款。' + rentedWithdraw: '&c無法å‘租用領地進行銀行æ款。' Subzone: - Rename: '&eå­å€åŸŸé ˜åœ° &6%1 &e已被é‡æ–°å‘½å為 &6%2。' + Rename: '&eå­å€åŸŸé ˜åœ° &6%1 &e已被é‡æ–°å‘½å為 &6%2&e。' Remove: '&e已移除å­å€åŸŸé ˜åœ° &6%1&e。' Create: '&eæˆåŠŸå»ºç«‹å­å€åŸŸé ˜åœ° &6%1&e。' CreateFail: '&c無法建立å­å€åŸŸé ˜åœ° &6%1&c。' @@ -197,18 +198,18 @@ Language: Collide: '&cå­å€åŸŸé ˜åœ°èˆ‡ &6%1 &cè¡çªã€‚' MaxAmount: '&cä½ å·²é”到å­å€åŸŸé ˜åœ°å…許的最大分å€æ•¸é‡ã€‚' MaxDepth: '&cä½ å·²é”到å­å€åŸŸé ˜åœ°å…許的最大分å€æ·±åº¦ã€‚' - SelectInside: '&e兩個é¸æ“‡é»žå¿…須都在åŒä¸€å€‹é ˜åœ°å…§ã€‚' + SelectInside: '&e兩個é¸æ“‡é»žå¿…須都在åŒé ˜åœ°å…§ã€‚' CantCreate: '&c你沒有建立å­å€åŸŸé ˜åœ°çš„權é™ã€‚' CantDelete: '&c你沒有移除å­å€åŸŸé ˜åœ°çš„權é™ã€‚' CantDeleteNotOwnerOfParent: '&cä½ ä¸æ˜¯è©²å­å€åŸŸæ‰€åœ¨é ˜åœ°çš„æ“有者,無法移除å­å€åŸŸã€‚' CantContract: '&c你沒有縮å°å­å€åŸŸé ˜åœ°çš„權é™ã€‚' CantExpand: '&c你沒有擴大å­å€åŸŸé ˜åœ°çš„權é™ã€‚' - DeleteConfirm: '&e如果你確定è¦ç§»é™¤å­å€åŸŸ &6%1&e,輸入 &6/res confirm &e來確定æ“作。' - OwnerChange: '&e已將å­å€åŸŸ &6%1 &eçš„æ“有者更改為 &6%2。' + DeleteConfirm: '&e如果你確定è¦ç§»é™¤å­å€åŸŸ &6%1&e,使用 &6/res confirm &e來確定æ“作。' + OwnerChange: '&e已將å­å€åŸŸ &6%1 &eçš„æ“有者更改為 &6%2&e。' Residence: DontOwn: '&e沒有項目å¯ä»¥é¡¯ç¤ºã€‚' - Hidden: ' &e(&6éš±è—n&e)' - Bought: '&e購買領地 &6%1。' + Hidden: '&e(&6éš±è—&e)' + Bought: '&e你已購買領地 &6%1&e。' Buy: '&6%1 &e購買了你的 &6%2 &e領地。' BuyTooBig: '&c你無法購買尺寸這麼大的領地。' NotForSale: '&c該領地目å‰ä¸¦æœªå‡ºå”®ã€‚' @@ -216,34 +217,34 @@ Language: StopSelling: '&c該領地已ä¸å†å‡ºå”®ã€‚' TooMany: '&cä½ æ“有的領地數é‡é”到了上é™ã€‚' MaxRent: '&c你租用的領地數é‡é”到了上é™ã€‚' - AlreadyRent: '&c領地已被租用。' - NotForRent: '&c領地沒有在出租。' - NotForRentOrSell: '&c沒有在出售或出租領地。' - NotRented: '&c領地尚未被租出。' + AlreadyRent: '&c該領地已被出租……' + NotForRent: '&c該領地沒有出租……' + NotForRentOrSell: '&c該領地沒有出售或出租……' + NotRented: '&c該領地還沒被出租。' Unrent: '&e領地 &6%1 &eå·²å–消出租。' - RemoveRentable: '&e領地 &6%1 &eä¸å†å¯å‡ºç§Ÿã€‚' + RemoveRentable: '&e領地 &6%1 &eä¸å†å¯ä¾›å‡ºç§Ÿã€‚' ForRentSuccess: '&e領地 &6%1 &eå·²è¢«è¨­å®šç‚ºæ¯ &6%3 &e天以 &6%2 &e出租。' - RentSuccess: '&e你租用了 &6%1 &e領地 &6%2 &e天。' - EndingRent: '&e出租給 &6%1 &e的領地 &6%2 已到期。' - AlreadyRented: '&e領地 &6%1 &e已出租給 &6%2。' - CantAutoPay: '&e領地ä¸å…許自動付款,自動付款將設定æˆ&6關閉。' + RentSuccess: '&e你租用了領地 &6%1 &6%2 &e天。' + EndingRent: '&e出租給 &6%1 &e的領地 &6%2 &e已到期。' + AlreadyRented: '&e領地 &6%1 &e已出租給 &6%2&e。' + CantAutoPay: '&e領地ä¸å…許自動付款,自動付款將設定為 &6false&e。' AlreadyExists: '&c已存在å稱為 &6%1 &c的領地。' - Create: '&e已建立領地 &6%1&e ï¼' + Create: '&e已建立領地:&6%1&eï¼' Rename: '&e領地 &6%1 &e已被é‡æ–°å‘½å為 &6%2' - Remove: '&e領地 &6%1 &e已移除……' - CantRemove: '&c領地 &6%1 &c無法移除因為 &6%2 &cå­å€åŸŸé‚„在出租給 &6%3。' + Remove: '&e領地 &6%1 &e已被移除……' + CantRemove: '&c領地 &6%1 &c無法移除因為 &6%2 &cå­å€åŸŸé‚„在出租給 &6%3&c。' MoveDeny: '&c你沒有領地 &6%1 的移動權é™ã€‚' TeleportNoFlag: '&c你沒有領地的傳é€æ¬Šé™ã€‚' - FlagDeny: '&c你沒有領地 &6%2 &cçš„ &6%1 &c權é™ã€‚' + FlagDeny: '&c你沒有領地 &6%2 &6%1&c的權é™ã€‚' GiveLimits: '&c目標玩家領地超éŽé™åˆ¶ï¼Œç„¡æ³•çµ¦äºˆé ˜åœ°ã€‚' - GiveConfirm: '&7點擊確èªå°‡é ˜åœ° &6%1 &7從 &6%2 &7轉移到 &6%3。' - Give: '&e你將領地 &6%1 &e轉移到 &6%2。' - Recieve: '&e你從玩家 &6%2 &e收到領地 &6%1。' + GiveConfirm: '&7點擊確èªå°‡é ˜åœ° &6%1 &7從 &6%2 &7轉移到 &6%3&7。' + Give: '&e你將領地 &6%1 &e轉移到 &6%2&e。' + Recieve: '&e你從玩家 &6%2 &e收到領地 &6%1&e。' ResList: ' &a%1. &e%2 &e- &6%3 %4&6%5' TrustedResList: ' &a%1. &f%2 &e- &6%3 %4&6%5' List: ' &e%2 &e- &6%3' - Near: '&e附近的領地 : &7%1' - TeleportNear: '&e傳é€åˆ°é™„近的領地。' + Near: '&e附近的領地:&7%1&e。' + TeleportNear: '&e已傳é€åˆ°é ˜åœ°çš„附近。' SetTeleportLocation: '&e設定傳é€é»žä½ç½®â€¦â€¦' PermissionsApply: '&e已設定領地權é™ã€‚' NotOwner: '&cä½ ä¸æ˜¯è©²é ˜åœ°çš„æ“有者。' @@ -252,11 +253,11 @@ Language: PlayerNotIn: '&c玩家ä¸åœ¨é ˜åœ°å€åŸŸå…§ã€‚' Kicked: '&e你在領地中被踢出。' CantKick: '&e無法踢出該玩家。' - In: '&eä½ ç›®å‰åœ¨é ˜åœ° &6%1。' + In: '&eä½ ç›®å‰åœ¨é ˜åœ° &6%1&e。' OwnerChange: '&e已將領地 &6%1 &eçš„æ“æœ‰è€…æ›´æ”¹æˆ &6%2' NonAdmin: '&c你沒有領地的管ç†æ¬Šé™ã€‚' - Line: '&e領地 : &6%1 ' - RentedBy: '&e租用者 : &6%1。' + Line: '&e領地:&6%1 ' + RentedBy: '&e租用者:&6%1&e' MessageChange: '&e已設定訊æ¯â€¦â€¦' CantDeleteResidence: '&c你沒有移除領地的權é™ã€‚' CantExpandResidence: '&c你沒有擴展領地的權é™ã€‚' @@ -265,116 +266,119 @@ Language: OwnerNoPermission: '&c領地æ“有者沒有執行這項æ“作的權é™ã€‚' ParentNoPermission: '&c你沒有設定父å€åŸŸçš„權é™ã€‚' ChatDisabled: '&e已關閉領地èŠå¤©â€¦â€¦' - DeleteConfirm: '&e如果你確定è¦ç§»é™¤é ˜åœ° &6%1&e,輸入 &6/res confirm &e來確定æ“作。' - ChangedMain: '&e更改主è¦é ˜åœ°åˆ° &6%1。' + DeleteConfirm: '&e如果你確定è¦ç§»é™¤é ˜åœ° &6%1&e,使用 &6/res confirm &e來確定æ“作。' + ChangedMain: '&e更改主è¦é ˜åœ°åˆ° &6%1&e。' LwcRemoved: '&e在 &6%2 &e毫秒內移除 &6%1 &eLwc ä¿è­·ã€‚' - CanBeRented: '&6%1&e å¯ä»¥è¢«å‡ºç§Ÿçµ¦ &6%2 &6%3 &e天,&6/res market rent。' - CanBeBought: '&6%1&e å¯ä»¥è¢«å‡ºå”®çµ¦ &6%2&e,&6/res market buy。' + CanBeRented: '&6%1&e å¯ä»¥è¢«å‡ºç§Ÿçµ¦ &6%2 &6%3 &e天,&6/res market rent&e。' + CanBeBought: '&6%1&e å¯ä»¥è¢«å‡ºå”®çµ¦ &6%2&e,&6/res market buy&e。' IsForRent: '&6(出租)' IsForSale: '&6(出售)' IsRented: '&6(已出租)' Rent: - Disabled: '&c已關閉領地出租……' - DisableRenew: '&e領地 &6%1 &eä¸æœƒåœ¨ç§Ÿç´„到期時自動續期。' - EnableRenew: '&e領地 &6%1 &e將會在租約到期時自動續期。' + Disabled: '&c已關閉出租……' + DisableRenew: '&e領地 &6%1 &eä¸æœƒåœ¨ç§Ÿç´„到期時自動續租。' + EnableRenew: '&e領地 &6%1 &e將會在租約到期時自動續租。' NotByYou: '&c領地ä¸æ˜¯ä½ ç§Ÿçš„。' isForRent: '&2å¯ä¾›å‡ºç§Ÿçš„領地。' MaxRentDays: '&cä½ ä¸èƒ½ä¸€æ¬¡å‡ºç§Ÿè¶…éŽ &6%1 &c天。' OneTime: '&c無法延長領地的出租時間。' - Extended: '&e已為領地 &6%2 延長租約 &6%1 &e天。' - Expire: '&e租約到期時間 : &6%1。' - AutoPayTurnedOn: '&7å·²&2é–‹å•Ÿ&7自動付款。' - AutoPayTurnedOff: '&7å·²&c關閉&7自動付款。' + Extended: '&e已為領地 &6%2 &e延長租約 &6%1 &e天。' + Expire: '&e租約到期時間:&6%1&e。' + AutoPayTurnedOn: '&eå·²&2é–‹å•Ÿ&e自動付款。' + AutoPayTurnedOff: '&eå·²&c關閉&e自動付款。' ModifyDeny: '&c無法修改租用的領地。' - Days: '&7租用天數 : &6%1。' + Days: '&e租用天數:&6%1&e。' Rented: ' &6(已出租)' - RentList: ' &6%1&7. &6%2 &7(&6%3&7/&6%4&7/&6%5&7) - &6%6 &6%7' - EvictConfirm: '&7輸入 &3/res market confirm &7確èªå‡ºç§Ÿäºº &6%1 &7領地。' - UnrentConfirm: '&7輸入 &3/res market confirm &7確èªæ˜¯å¦æ­£ç¢º &6%1 &7領地。' - ReleaseConfirm: '&7輸入 &3/res market confirm &7確èªæ˜¯å¦å¾žå¸‚場中移除 &6%1 &7領地。' + RentList: ' &6%1&e. &6%2&e(&6%3&e/&6%4&e/&6%5&e)- &6%6 &6%7' + EvictConfirm: '&e使用 &3/res market confirm &e確èªå¾žå¸‚場中驅é€é ˜åœ° &6%1 &e。' + UnrentConfirm: '&e使用 &3/res market confirm &e確èªå¾žå¸‚場中å–消出租領地 &6%1 &e。' + ReleaseConfirm: '&e使用 &3/res market confirm &e確èªå¾žå¸‚場中移除領地 &6%1 &e。' command: - addedAllow: '&7新增領地 &6%1 &7çš„å…許指令。' - removedAllow: '&7移除領地 &6%1 &7çš„å…許指令。' - addedBlock: '&7新增領地 &6%1 &7的拒絕指令。' - removedBlock: '&7移除領地 &6%1 &7的拒絕指令。' - Blocked: '&7拒絕的指令 : &6%1。' - Allowed: '&7å…許的指令 : &6%1。' + addedAllow: '&e新增領地 &6%1 &eçš„å…許指令。' + removedAllow: '&e移除領地 &6%1 &eçš„å…許指令。' + addedBlock: '&e新增領地 &6%1 &e的拒絕指令。' + removedBlock: '&e移除領地 &6%1 &e的拒絕指令。' + Blocked: '&e拒絕的指令:&6%1&e。' + Allowed: '&eå…許的指令:&6%1&e。' + Parsed: '%1' + PlacehlderList: '&e%1. &6%2' + PlacehlderResult: ' &eçµæžœï¼š&6%1' Rentable: - Land: '&7出租領地 : &6。' - AllowRenewing: '&7å¯ä»¥çºŒç§Ÿ : &6%1。' - StayInMarket: '&7將出租項目留在市場 : &6%1。' - AllowAutoPay: '&7å…許自動付款 : &6%1。' - DisableRenew: '&6%1 &7ä¸æœƒåœ¨åˆ°æœŸæ™‚自動更新租用狀態。' - EnableRenew: '&6%1 &7將會在到期時自動更新租用狀態。' + Land: '&e出租領地:&6' + AllowRenewing: '&eå¯ä¾›çºŒç§Ÿï¼š&6%1&e。' + StayInMarket: '&eä¿ç•™å‡ºç§Ÿé …目在市場:&6%1&e。' + AllowAutoPay: '&eå…許自動付款:&6%1&e。' + DisableRenew: '&6%1 &eä¸æœƒåœ¨åˆ°æœŸæ™‚自動更新租用狀態。' + EnableRenew: '&6%1 &e將會在到期時自動更新租用狀態。' Economy: - LandForSale: '&e出售領地 : ' + LandForSale: '&e出售領地:' NotEnoughMoney: '&c你沒有足夠的金錢。' - MoneyCharged: '&7已從你的帳戶中支出 &8%1。' - MoneyAdded: '&7你的帳戶增加了 &8%1。' - MoneyCredit: '&7你的帳戶收到了 &8%1。' - RentReleaseInvalid: '&7領地 &6%1 &7沒有被租用或出租。' + MoneyCharged: '&e已從你的帳戶中支出 &8%1&e。' + MoneyAdded: '&e你的帳戶增加了 &8%1&e。' + MoneyCredit: '&e你的帳戶收到了 &8%1&e。' + RentReleaseInvalid: '&e領地 &6%1 &e沒有被租用或出租。' RentSellFail: '&c無法出售正在出租的領地。' - SubzoneRentSellFail: '&c無法出售,此å­å€åŸŸé ˜åœ°å‡ºç§Ÿä¸­ã€‚' + SubzoneRentSellFail: '&c無法出售,該å­å€åŸŸé ˜åœ°å‡ºç§Ÿä¸­ã€‚' ParentRentSellFail: '&c無法出售出租中的領地。' SubzoneSellFail: '&c無法出售å­å€åŸŸé ˜åœ°ã€‚' SellRentFail: '&c無法出租正在出售的領地。' ParentSellRentFail: '&c無法租用出售中的領地。' OwnerBuyFail: '&cä¸èƒ½è³¼è²·è‡ªå·±çš„領地。' OwnerRentFail: '&cä¸èƒ½ç§Ÿç”¨è‡ªå·±çš„領地。' - AlreadySellFail: '&7領地已在出售中。' - LeaseRenew: '&7租約有效期到 &6%1。' - LeaseRenewMax: '&7å…許的最大租約續期。' - LeaseNotExpire: '&7租約ä¸å­˜åœ¨æˆ–未éŽæœŸã€‚' - LeaseRenewalCost: '&7續租 &6%1 &7的花費為 &6%2。' - LeaseInfinite: '&7出租時間已設定為無é™ã€‚' + AlreadySellFail: '&e領地已在出售中。' + LeaseRenew: '&e租約有效期到 &6%1&e。' + LeaseRenewMax: '&eå…許的最大租約續租。' + LeaseNotExpire: '&e租約ä¸å­˜åœ¨æˆ–未éŽæœŸã€‚' + LeaseRenewalCost: '&e續租 &6%1 &e的花費為 &6%2。' + LeaseInfinite: '&e出租時間已設定為無é™â€¦â€¦' MarketDisabled: '&c已關閉經濟系統。' - SellAmount: '&7å‡ºå”®æ•¸é‡ ï¼š &2%1。' - SellList: ' &6%1&7. &6%2 &7(&6%3&7) - &6%4。' - LeaseExpire: '&7租約到期時間 : &2%1。' - LeaseList: '&6%1. &7%2 &2%3 &7%4。' + SellAmount: '&e出售數é‡ï¼š&2%1&e。' + SellList: ' &6%1&e. &6%2&e(&6%3&e)- &6%4&e' + LeaseExpire: '&e租約到期時間:&2%1&e。' + LeaseList: '&6%1. &e%2 &2%3 &e%4' Expanding: - North: '&7å‘北方擴展 &6%1 &7個方塊。' - West: '&7å‘西方擴展 &6%1 &7個方塊。' - South: '&7å‘å—方擴展 &6%1 &7個方塊。' - East: '&7å‘æ±æ–¹æ“´å±• &6%1 &7個方塊。' - Up: '&7å‘上方擴展 &6%1 &7個方塊。' - Down: '&7å‘下方擴展 &6%1 &7個方塊。' + North: '&eå‘北方擴展 &6%1 &e格方塊。' + West: '&eå‘西方擴展 &6%1 &e格方塊。' + South: '&eå‘å—方擴展 &6%1 &e格方塊。' + East: '&eå‘æ±æ–¹æ“´å±• &6%1 &e格方塊。' + Up: '&eå‘上方擴展 &6%1 &e格方塊。' + Down: '&eå‘下方擴展 &6%1 &e格方塊。' Contracting: - North: '&7å‘åŒ—æ–¹ç¸®å° &6%1 &7個方塊。' - West: '&7å‘è¥¿æ–¹ç¸®å° &6%1 &7個方塊。' - South: '&7å‘å—æ–¹ç¸®å° &6%1 &7個方塊。' - East: '&7å‘æ±æ–¹ç¸®å° &6%1 &7個方塊。' - Up: '&7å‘ä¸Šæ–¹ç¸®å° &6%1 &7個方塊。' - Down: '&7å‘ä¸‹æ–¹ç¸®å° &6%1 &7個方塊。' + North: '&eå‘åŒ—æ–¹ç¸®å° &6%1 &e格方塊。' + West: '&eå‘è¥¿æ–¹ç¸®å° &6%1 &e格方塊。' + South: '&eå‘å—æ–¹ç¸®å° &6%1 &e格方塊。' + East: '&eå‘æ±æ–¹ç¸®å° &6%1 &e格方塊。' + Up: '&eå‘ä¸Šæ–¹ç¸®å° &6%1 &e格方塊。' + Down: '&eå‘ä¸‹æ–¹ç¸®å° &6%1 &e格方塊。' Shifting: - North: '&7å‘北方平移 &6%1 &7個方塊。' - West: '&7å‘西方平移 &6%1 &7個方塊。' - South: '&7å‘å—方平移 &6%1 &7個方塊。' - East: '&7å‘æ±æ–¹å¹³ç§» &6%1 &7個方塊。' - Up: '&7å‘上方平移 &6%1 &7個方塊。' - Down: '&7å‘下方平移 &6%1 &7個方塊。' + North: '&eå‘北方平移 &6%1 &e格方塊。' + West: '&eå‘西方平移 &6%1 &e格方塊。' + South: '&eå‘å—方平移 &6%1 &e格方塊。' + East: '&eå‘æ±æ–¹å¹³ç§» &6%1 &e格方塊。' + Up: '&eå‘上方平移 &6%1 &e格方塊。' + Down: '&eå‘下方平移 &6%1 &e格方塊。' Limits: - PGroup: '&7- &7權é™çµ„ : &3%1。' - RGroup: '&7- &7領地組 : &3%1。' - Admin: '&7- &7領地管ç†å“¡ : &3%1。' - CanCreate: '&7- &7å…許建立領地 : &3%1。' - MaxRes: '&7- &7æœ€å¤§é ˜åœ°æ•¸é‡ ï¼š &3%1。' - MaxEW: '&7- &7æ±è¥¿æ–¹å‘最大 : &3%1。' - MaxNS: '&7- &7å—北方å‘最大 : &3%1。' - MaxUD: '&7- &7上下方å‘最大 : &3%1。' - MinMax: '&7- &7最å°/最大高度 : &3%1 到 %2。' - MaxSubzones: '&7- &7最大å­å€åŸŸ : &3%1。' - MaxSubDepth: '&7- &7最大å­å€åŸŸæ·±åº¦ : &3%1。' - MaxRents: '&7- &7最多租用 : &3%1。' - MaxRentDays: ' &7最多租用天數 : &3%1。' - EnterLeave: '&7- &7å¯è¨­å®šåŠ å…¥é›¢é–‹è¨Šæ¯ : &3%1。' - NumberOwn: '&7- &7æ“æœ‰çš„é ˜åœ°æ•¸é‡ ï¼š &3%1。' - Cost: '&7- &7領地æ¯æ–¹å¡ŠèŠ±è²» : &3%1。' - Sell: '&7- &7領地出售æ¯æ–¹å¡ŠèŠ±è²» : &3%1。' - Flag: '&7- &7å…è¨±çš„é ˜åœ°æ¬Šé™ ï¼š &3%1。' - MaxDays: '&7- &7最大租約時間 : &3%1。' - LeaseTime: '&7- &7租約續期時間 : &3%1。' - RenewCost: '&7- &7續租æ¯æ–¹å¡ŠèŠ±è²» : &3%1。' + PGroup: '&7- &e權é™çµ„:&3%1&e' + RGroup: '&7- &e領地組:&3%1&e' + Admin: '&7- &e領地管ç†å“¡ï¼š&3%1&e' + CanCreate: '&7- &eå…許建立領地:&3%1&e' + MaxRes: '&7- &e最大領地數é‡ï¼š&3%1&e' + MaxEW: '&7- &eæ±è¥¿æ–¹å‘最大:&3%1&e' + MaxNS: '&7- &eå—北方å‘最大:&3%1&e' + MaxUD: '&7- &e上下方å‘最大:&3%1&e' + MinMax: '&7- &e最å°/最大高度:&3%1 到 %2&e' + MaxSubzones: '&7- &e最大å­å€åŸŸï¼š&3%1&e' + MaxSubDepth: '&7- &e最大å­å€åŸŸæ·±åº¦ï¼š&3%1&e' + MaxRents: '&7- &e最多租用:&3%1&e' + MaxRentDays: ' &e最多租用天數:&3%1&e' + EnterLeave: '&7- &eå¯è¨­å®šåŠ å…¥é›¢é–‹è¨Šæ¯ï¼š&3%1&e' + NumberOwn: '&7- &eæ“有的領地數é‡ï¼š&3%1&e' + Cost: '&7- &e領地æ¯æ–¹å¡ŠèŠ±è²»ï¼š&3%1&e' + Sell: '&7- &e領地出售æ¯æ–¹å¡ŠèŠ±è²»ï¼š&3%1&e' + Flag: '&7- &e領地權é™ï¼š&3%1&e' + MaxDays: '&7- &e最大租約時間:&3%1&e' + LeaseTime: '&7- &e租約續租時間:&3%1&e' + RenewCost: '&7- &e續租æ¯æ–¹å¡ŠèŠ±è²»ï¼š&3%1&e' Gui: Set: Title: '&6%1 權é™' @@ -383,7 +387,7 @@ Language: Actions: - '&2點擊左éµä¿®æ”¹ç‚ºé–‹å•Ÿ' - '&c點擊å³éµä¿®æ”¹ç‚ºé—œé–‰' - - '&6Shift + 點擊左éµä¿®æ”¹ç‚ºæœªè¨­å®š' + - '&eShift + 點擊左éµä¿®æ”¹ç‚ºæœªè¨­å®š' InformationPage: Top: '&e___/ &a %1 - %2 &e \___' TopSingle: '&e___/ &a %1 &e \___' @@ -394,29 +398,31 @@ Language: FlagsList: '&2 %1 &6- &e%2' SmallSeparator: '&6------' Chat: - ChatChannelChange: '&e切æ›åˆ°é ˜åœ° &6%1 èŠå¤© ï¼' + ChatChannelChange: '&e切æ›åˆ° &6%1 &e領地èŠå¤©ï¼' ChatChannelLeave: '&e離開領地èŠå¤©ã€‚' ChatMessage: '%1 %2%3: %4%5' - ChatListeningMessage: '&2[Listening %6]%1 %2%3: %4%5' + ChatListeningMessage: '&2[æ­£åœ¨å‚¾è½ %6]%1 %2%3: %4%5' JoinFirst: '&4請先加入領地èŠå¤©é »é“……' InvalidChannel: '&4無效的頻é“……' InvalidColor: '&4錯誤的é¡è‰²ä»£ç¢¼ã€‚' NotInChannel: '&4玩家ä¸åœ¨é »é“中。' Kicked: '&6%1 &eå·²è¢«å¾žé »é“ &6%2 &e踢出。' - InvalidPrefixLength: '&4å‰ç¶´éŽé•·ï¼Œå…許的長度 : %1。' - ChangedColor: '&e領地èŠå¤©é »é“é¡è‰²æ›´æ”¹æˆ %1。' - ChangedPrefix: '&e領地èŠå¤©é »é“å‰ç¶´æ›´æ”¹æˆ %1。' + InvalidPrefixLength: '&4å‰ç¶´éŽé•·ï¼Œå…許的長度:%1&4。' + ChangedColor: '&e領地èŠå¤©é »é“é¡è‰²æ›´æ”¹æˆ %1&e。' + ChangedPrefix: '&e領地èŠå¤©é »é“å‰ç¶´æ›´æ”¹æˆ %1&e。' Shop: - ListTopLine: '&6%1 &7商店列表 - 第 &6%2 &7é ï¼Œå…± &6%3 %4。' - List: ' &7%1. &6%2 &7(&6%3&7) %4' - ListVoted: '&7%1 (&6%2&7)' - ListLiked: '&7è´Š: &0%1' - VotesTopLine: '&6%1 &7%2 評分列表 &6- &7第 &6%3 &7é ï¼Œå…± &6%4 %5' - VotesList: ' &7%1. &6%2 &7%3 &7%4' + ListTopLine: '&6%1 &e商店列表 - 第 &6%2 &eé ï¼Œå…± &6%3 %4。' + List: ' &e%1. &6%2&e(&6%3&e)%4' + ListVoted: '&e%1(&6%2&e)' + ListLiked: '&7讚:&7%1' + VotesTopLine: '&6%1 &e%2 投票列表 &6- &e第 &6%3 &eé ï¼Œå…± &6%4 %5' + VotesList: ' &e%1. &6%2 &e%3 &7%4' NoDesc: '&6沒有æè¿°' - Desc: "&6æè¿° : \n%1" - DescChange: '&6æ述已更改為 : %1。' - ChantChange: '&4無法更改商店權é™ç‚º true (t)。' + Desc: |- + &6æ述: + %1 + DescChange: '&6æ述已更改為:%1&6。' + ChantChange: '&4無法更改商店權é™ç‚º true(t)。' NewBoard: '&6æˆåŠŸæ–°å¢žå•†åº—宣傳é¢æ¿ã€‚' BoardExist: '&c這個ä½ç½®å·²å­˜åœ¨å•†åº—宣傳é¢æ¿ã€‚' DeleteBoard: '&6點擊å³éµç§»é™¤å•†åº—宣傳é¢æ¿ã€‚' @@ -424,27 +430,27 @@ Language: IncorrectBoard: '&c這ä¸æ˜¯å•†åº—宣傳é¢æ¿ï¼Œè«‹é‡æ–°é»žæ“Šæ­£ç¢ºçš„商店宣傳é¢æ¿ã€‚' InvalidSelection: '&c使用é¸æ“‡å·¥å…·ï¼Œå…ˆé»žæ“Šå·¦ä¸Šè§’的告示牌,å†é»žæ“Šå³ä¸‹è§’的告示牌。' ToBigSelection: '&cé¸æ“‡çš„範åœå¤ªå¤§ï¼Œæœ€å¤šå…許 16 個方塊。' - ToDeapSelection: '&cé¸æ“‡çš„範åœå¤ªå¤§ï¼Œæœ€å¤§å…許為 16x16x1 的範åœã€‚' - VoteChanged: '&6領地 &7%3 &6的評分由 &7%1 &6更改為 &7%2&6。' - Voted: '&6你給 &7%2 &6評了 &7%1 &6分。' - Liked: '&6ä½ å°é ˜åœ° &7%1 &6按讚。' - AlreadyLiked: '&6ä½ å·²å°é ˜åœ° &7%1 &6按讚éŽäº†ã€‚' - NoVotes: '&c該領地還沒有評分。' - CantVote: '&c領地尚未開啟商店權é™ã€‚' - VotedRange: '&6åªèƒ½è©•å‡º &7%1 &6分到 &7%2 &6分。' + ToDeapSelection: '&cé¸æ“‡çš„範åœå¤ªé«˜ï¼Œæœ€å¤§å…許為 16x16x1 的範åœã€‚' + VoteChanged: '&6領地 &e%3 &6的投票由 &e%1 &6更改為 &e%2&6。' + Voted: '&6你給 &e%2 &6評了 &e%1 &6分。' + Liked: '&6ä½ å°é ˜åœ° &e%1 &6按讚。' + AlreadyLiked: '&6ä½ å·²å°é ˜åœ° &e%1 &6按讚éŽäº†ã€‚' + NoVotes: '&c該領地還沒有投票。' + CantVote: '&c該領地還沒開啟商店權é™ã€‚' + VotedRange: '&6åªèƒ½è©•å‡º &e%1 &6分到 &e%2 &6分。' SignLines: '1': '&e--== &8%1 &e==--' '2': '&9%1' '3': '&4%1' - '4': '&8%1&e (&8%2&e)' - Likes4: '&9喜歡 : &8%2' + '4': '&8%1&e(&8%2&e)' + Likes4: '&9讚:&8%2' RandomTeleport: - TpLimit: '&7傳é€éŽæ–¼é »ç¹ï¼Œè«‹ç¨ç­‰ &6%1 &7秒後å†æ¬¡å‚³é€ã€‚' - TeleportSuccess: '&7傳é€åˆ° X:&6%1 &7Y:&6%2 &7Z:&6%3 &7座標。' - IncorrectLocation: '&7找ä¸åˆ°æ­£ç¢ºçš„傳é€åº§æ¨™ï¼Œè«‹ç¨ç­‰ &6%1 &7秒後é‡è©¦ã€‚' + TpLimit: '&e傳é€éŽæ–¼é »ç¹ï¼Œè«‹ç¨ç­‰ &6%1 &e秒後å†æ¬¡å‚³é€ã€‚' + TeleportSuccess: '&e傳é€åˆ°åº§æ¨™ X:&6%1 &eY:&6%2 &eZ:&6%3 &e。' + IncorrectLocation: '&e找ä¸åˆ°æ­£ç¢ºçš„傳é€åº§æ¨™ï¼Œè«‹ç¨ç­‰ &6%1 &e秒後é‡è©¦ã€‚' Disabled: '&c該世界關閉隨機傳é€ã€‚' - TeleportStarted: '&7傳é€å°‡åœ¨ &6%4 &7秒後開始,ä¸è¦ç§»å‹•ã€‚' - WorldList: '&eå¯ç”¨ä¸–ç•Œ : &6%1。' + TeleportStarted: '&e傳é€å°‡åœ¨ &6%4 &e秒後開始,ä¸è¦ç§»å‹•ã€‚' + WorldList: '&eå¯ä¾›ä½¿ç”¨ä¸–界:&6%1&e。' Permissions: variableColor: '&f' permissionColor: '&6' @@ -457,463 +463,469 @@ Language: # Replace all text with '' to disable this message CantPlaceWater: '&c無法在沒有領地的地方放置水。' CantPlaceChest: '&c你沒有放置儲物箱的權é™ã€‚' - NoPermission: '&c你沒有執行此æ“作的權é™ã€‚' + NoPermission: '&c你沒有執行該æ“作的權é™ã€‚' info: NoPlayerPermission: '&c[playerName] 沒有 [permission] 權é™ã€‚' NoCmdPermission: '&c沒有這個指令的權é™ã€‚' - DefaultUsage: '&7輸入 &6/%1 ? &7查看説明。' - MaterialGet: '&7ID &6%1 &7的物å“å稱為 &6%2' - MarketList: '&7---- &6市場列表 &7----' - Separator: '&7------------------------------------------------' + DefaultUsage: '&e使用 &6/%1 ? &e查看説明。' + MaterialGet: '&eID &6%1 &e的物å“å稱為 &6%2' + MarketList: '&e---- &6市場列表 &e----' + Separator: '&e------------------------------------------------' AdminOnly: '&cåªæœ‰ç®¡ç†å“¡æ‰èƒ½åŸ·è¡Œé€™å€‹æŒ‡ä»¤ã€‚' - InfoTool: '&7- 資訊工具 : &6%1' - ListMaterialAdd: '&6%1 &7已被新增到領地 &6%2 &7。' - ListMaterialRemove: '&6%1 &7已從領地 &6%2 &7移除。' - ItemBlacklisted: '&c此處ç¦æ­¢ä½¿ç”¨è©²ç‰©å“。' + InfoTool: '&e- 資訊工具:&6%1' + ListMaterialAdd: '&6%1 &e已被新增到領地 &6%2&e。' + ListMaterialRemove: '&6%1 &e已從領地 &6%2 &e移除。' + ItemBlacklisted: '&c該處ç¦æ­¢ä½¿ç”¨è©²ç‰©å“。' WorldPVPDisabled: '&c已關閉世界 PVP。' NoPVPZone: '&céž PVP å€åŸŸã€‚' - NoFriendlyFire: '&cNo friendly fire' - InvalidHelp: '&c無效說明é æ•¸' - TeleportDeny: '&c沒有傳é€çš„權é™' - TeleportSuccess: '&7已傳é€' - TeleportConfirmLava: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰è½é€² &6岩漿&c,若ä»è¦å‚³é€è«‹è¼¸å…¥ &6/res tpconfirm &c來確定æ“作。' - TeleportConfirmVoid: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰è½é€² &6虛空&c,若ä»è¦å‚³é€è«‹è¼¸å…¥ &6/res tpconfirm &c來確定æ“作。' - TeleportConfirm: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰è½ &6%1 &c格高的方塊,若ä»è¦å‚³é€è«‹è¼¸å…¥ &6/res tpconfirm &c來確定æ“作。' + NoFriendlyFire: '&céžå‹è»å‚·å®³å€åŸŸã€‚' + InvalidHelp: '&c無效說明é æ•¸ã€‚' + TeleportDeny: '&c沒有傳é€çš„權é™ã€‚' + TeleportSuccess: '&e已傳é€' + TeleportConfirmLava: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰é€²&6岩漿&c,若ä»è¦å‚³é€è«‹ä½¿ç”¨ &6/res tpconfirm &c來確定æ“作。' + TeleportConfirmVoid: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰é€²&6虛空&c,若ä»è¦å‚³é€è«‹ä½¿ç”¨ &6/res tpconfirm &c來確定æ“作。' + TeleportConfirm: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰è½ &6%1 &c格高的方塊,若ä»è¦å‚³é€è«‹ä½¿ç”¨ &6/res tpconfirm &c來確定æ“作。' TeleportStarted: '&e已開始傳é€åˆ° &6%1 &e,在 &6%2 &e秒內請勿移動。' - TeleportTitle: '&e傳é€ä¸­â€¦â€¦' + TeleportTitle: '&e傳é€ä¸­ï¼' TeleportTitleTime: '&6%1' - TeleportCanceled: '&eå·²å–æ¶ˆå‚³é€ ï¼' - NoTeleportConfirm: '&e沒有需è¦ç¢ºèªçš„å‚³é€ ï¼' + TeleportCanceled: '&eå·²å–消傳é€ï¼' + NoTeleportConfirm: '&e沒有需è¦ç¢ºèªçš„傳é€ï¼' HelpPageHeader2: '&e說明é é¢ - &6%1 &e- é  <&6%2 &eof &6%3&e>' ListExists: '&c已存在列表……' ListRemoved: '&e已移除列表……' - ListCreate: '&e已建立列表 &6%1。' - PhysicalAreas: '&e物ç†å€åŸŸ' - CurrentArea: '&eç›®å‰å€åŸŸ : &6%1' - TotalResSize: '&e總計尺寸 : &6%1 立方公尺 &e(&6%2 平方公尺&e)' + ListCreate: '&e已建立列表 &6%1&e。' + PhysicalAreas: '&eå€åŸŸ' + CurrentArea: '&eç›®å‰å€åŸŸï¼š&6%1' + TotalResSize: '&e總計尺寸:&6%1 立方公尺&e(&6%2 平方公尺&e)' ResSize: - eastWest: '&eæ±/西 : &6%1' - northSouth: '&e北/å— ï¼š &6%1' - upDown: '&e上/下 : &6%1' - TotalWorth: '&e總計價值 : &6%1 &e(&6%2&e)' - TotalSubzones: '&eå­å€åŸŸé ˜åœ° : &6%1 &e(&6%2&e)' + eastWest: '&eæ±/西:&6%1' + northSouth: '&e北/å—:&6%1' + upDown: '&e上/下:&6%1' + TotalWorth: '&e總計價值:&6%1&e(&6%2&e)' + TotalSubzones: '&eå­å€åŸŸé ˜åœ°ï¼š&6%1&e(&6%2&e)' NotOnline: '&e目標玩家一定è¦åœ¨ç·šä¸Šã€‚' - prevPage: '&7----<< &6ä¸Šä¸€é  ' + prevPage: '&2----<< &6ä¸Šä¸€é  ' prevPageGui: '&6ä¸Šä¸€é  ' - prevPageClean: '&6上一個 ' - prevPageOff: '&7----<< &6ä¸Šä¸€é  ' + prevPageClean: '&6上 ' + prevPageOff: '&2----<< &7ä¸Šä¸€é  ' prevPageHover: '&7<<<' firstPageHover: '&7|<' - nextPage: ' &6ä¸‹ä¸€é  &7>>----' + nextPage: '&6 ä¸‹ä¸€é  &2>>----' nextPageGui: '&6下一é ' - nextPageClean: '&6下一個' - nextPageOff: ' &6ä¸‹ä¸€é  &7>>----' + nextPageClean: '&6下' + nextPageOff: '&7 ä¸‹ä¸€é  &2>>----' nextPageHover: '&7>>>' lastPageHover: '&7>|' - pageCount: '&3%1&7/&3%2' - pageCountHover: '&3%1' - GenericPages: '&7é  &6%1 &7çš„ &6%2 &7(&6%3&7)' + pageCount: '&2%1&7/&2%2' + pageCountHover: '&e%1' + GenericPages: '&eé  &6%1 &eçš„ &6%2&e(&6%3&e)' WorldEditNotFound: '&c未åµæ¸¬åˆ° WorldEdit。' - CoordsTop: '&7X:&6%1 &7Y:&6%2 &7Z:&6%3' - CoordsBottom: '&7X:&6%1 &7Y:&6%2 &7Z:&6%3' - CoordsLiner: '&7 (&3%1&7 ï¼› %2&7)' + CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + CoordsLiner: '&7(&3%1&7ï¼›%2&7)' AllowedTeleportIcon: '&2T' BlockedTeleportIcon: '&7T' AllowedMovementIcon: '&2M' BlockedMovementIcon: '&7M' - AdminToggleTurnOn: '&6已開啟&7自動管ç†æ¨¡å¼' - AdminToggleTurnOff: '&6已關閉&7自動管ç†æ¨¡å¼' - NoSpawn: '&7你沒有é‡ç”Ÿé»ž &6移動 &7的權é™ï¼Œç›®å‰æ­£åœ¨é‡æ–°å®šä½ã€‚' - CompassTargetReset: '&7å·²é‡æ–°è¨­å®šä½ çš„羅盤。' - CompassTargetSet: '&7你的羅盤目å‰æŒ‡å‘ &6%1。' - Ignorelist: '&2忽略åå–® : &6' - Blacklist: '&c黑åå–® :&6' - LandCost: '&e領地花費 : &6%1' + AdminToggleTurnOn: '&6已開啟&e自動管ç†æ¨¡å¼' + AdminToggleTurnOff: '&6已關閉&e自動管ç†æ¨¡å¼' + NoSpawn: '&e你沒有é‡ç”Ÿé»ž&6移動&e的權é™ï¼Œæ­£åœ¨é‡æ–°å®šä½ã€‚' + CompassTargetReset: '&eå·²é‡æ–°è¨­å®šä½ çš„羅盤。' + CompassTargetSet: '&e你的羅盤目å‰æŒ‡å‘ &6%1&e。' + Ignorelist: '&2忽略å單:&6' + Blacklist: '&c黑å單:&6' + LandCost: '&e領地總共花費:&6%1' 'True': '&2é–‹å•Ÿ' 'False': '&c關閉' Removed: '&6未設定' - FlagState: '&e權é™ç‹€æ…‹ : %1' - Land: '&e領地 : &6%1' - Cost: '&7花費 : æ¯ &6%2 &7天 &6%1' - Status: '&7狀態 : %1' - Available: '&2å¯ç”¨' - Size: ' &7尺寸 : &6%1' - ResidenceFlags: '&7é ˜åœ°æ¬Šé™ ï¼š &6%1' - PlayersFlags: '&7çŽ©å®¶æ¬Šé™ ï¼š &6%1' - GroupFlags: '&7çµ„æ¬Šé™ ï¼š &6%1' - OthersFlags: '&7å…¶ä»–äººæ¬Šé™ ï¼š &6%1' - Moved: '&7已移動' - Name: '&7å稱 : &6%1' - Lists: '&7列表 : &6' - Residences: '&7領地&6' - CreatedOn: '&7建立於 : &6%1' - Owner: '&7æ“有者 : &6%1' - World: '&7世界 : &6%1' - Subzones: '&7å­å€åŸŸ' + FlagState: '&e權é™ç‹€æ…‹ï¼š%1' + Land: '&e領地:&6%1' + Cost: '&eèŠ±è²»ï¼šæ¯ &6%2 &e天 &6%1' + Status: '&e狀態:%1' + Available: '&2å¯ä¾›ä½¿ç”¨' + Size: ' &e尺寸:&6%1' + ResidenceFlags: '&e領地權é™ï¼š&6%1' + PlayersFlags: '&e玩家權é™ï¼š&6%1' + GroupFlags: '&e組權é™ï¼š&6%1' + OthersFlags: '&e其他人權é™ï¼š&6%1' + Moved: '&e已移動……' + Name: '&eå稱:&6%1' + Lists: '&e列表:&6' + Residences: '&e領地&6' + CreatedOn: '&e建立於:&6%1' + Owner: '&eæ“有者:&6%1' + World: '&e世界:&6%1' + Subzones: '&eå­å€åŸŸ' # The below lines represent various messages residence sends to the players. # Note that some messages have variables such as %1 that are inserted at runtime. - NewPlayerInfo: '&7如果è¦å»ºç«‹é ˜åœ°ï¼Œè«‹ä½¿ç”¨ä¼ºæœå™¨æŒ‡å®šçš„工具,é¸æ“‡é ˜åœ°çš„兩個å°è§’,然後輸入 &3/res create &6[領地å稱] &7指令。' + NewPlayerInfo: '&e如果è¦å»ºç«‹é ˜åœ°ï¼Œè«‹ä½¿ç”¨ä¼ºæœå™¨æŒ‡å®šçš„工具,é¸æ“‡é ˜åœ°çš„兩個å°è§’,然後使用 &3/res create [領地å稱] &e指令。' CommandHelp: - Description: Contains Help for Residence + Description: 內涵領地說明 SubCommands: res: - Description: 領地的主指令 + Description: 領地的主è¦æŒ‡ä»¤ Info: - - '&e輸入 &6/res &6[指令] ? [é æ•¸] &e查看更多資訊' + - '&2使用 &6/res [指令] ? <é æ•¸> &2查看更多資訊。' SubCommands: auto: Info: - - '&e用法 : &6/res auto &6[領地å稱] [åŠå¾‘]' + - '&e用法:&6/res auto (領地å稱) (åŠå¾‘)' Description: 在你周åœå»ºç«‹æœ€å¤§å…許範åœçš„領地 select: Info: - - '&e該指令é¸æ“‡é ˜åœ°çš„範åœ' - - '&6/res select &6[x] [y] [z] - &eé¸æ“‡ä»¥ä½ ç‚ºä¸­å¿ƒä¸€å®šç¯„åœçš„方塊' - Description: é¸æ“‡æŒ‡ä»¤ + - '&e該指令用於é¸æ“‡é ˜åœ°çš„範åœ' + - '&6/res select [x] [y] [z] &e- é¸æ“‡ä»¥ä½ ç‚ºä¸­å¿ƒä¸€å®šç¯„åœçš„方塊' + Description: é¸æ“‡å·¥å…·æŒ‡ä»¤ SubCommands: coords: Description: 顯示已é¸æ“‡å€åŸŸçš„座標 Info: - - '&e用法 : &6/res select coords' + - '&e用法:&6/res select coords' size: Description: 顯示已é¸æ“‡å€åŸŸçš„å¤§å° Info: - - '&e用法 : &6/res select size' + - '&e用法:&6/res select size' auto: - Description: 打開自動é¸æ“‡å·¥å…· + Description: 開啟自動é¸æ“‡å·¥å…· Info: - - '&e用法 : &6/res select auto &6[玩家]' + - '&e用法:&6/res select auto [玩家å稱]' cost: Description: 顯示已é¸æ“‡å€åŸŸçš„價格 Info: - - '&e用法 : &6/res select cost' + - '&e用法:&6/res select cost' vert: - Description: 縱å‘擴展é¸æ“‡å€åŸŸ + Description: 垂直擴展é¸æ“‡å€åŸŸ Info: - - '&e用法 : &6/res select vert' - - '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°åœ°åœ–頂端和底端' + - '&e用法:&6/res select vert' + - '&eå°‡é¸æ“‡å€åŸŸæ“´å±•é ‚部和底部' sky: Description: 擴展é¸æ“‡å€åŸŸåˆ°å¤©ç©º Info: - - '&e用法 : &6/res select sky' - - '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°åœ°åœ–頂端' + - '&e用法:&6/res select sky' + - '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°é ‚部' bedrock: Description: 擴展é¸æ“‡å€åŸŸåˆ°åŸºå²© Info: - - '&e用法 : &6/res select bedrock' - - '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°åœ°åœ–底端' + - '&e用法:&6/res select bedrock' + - '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°åº•éƒ¨' expand: - Description: å‘一個方å‘擴展é¸æ“‡å€åŸŸ + Description: å‘é¢å°çš„æ–¹å‘擴展é¸æ“‡å€åŸŸ Info: - - '&e用法 : &6/res select expand &6[擴展單ä½]' - - '&eå‘é¢å°çš„æ–¹å‘擴展 &6[擴展單ä½] &e個方塊' + - '&e用法:&6/res select expand <數é‡>' + - '&eå‘é¢å°çš„æ–¹å‘擴展 &6<數é‡> &e格方塊' shift: - Description: å‘一個方å‘平移é¸æ“‡å€åŸŸ + Description: å‘é¢å°çš„æ–¹å‘平移é¸æ“‡å€åŸŸ Info: - - '&e用法 : &6/res select shift &6[平移單ä½]' - - '&eå°‡é¸æ“‡å€åŸŸå‘é¢å°çš„æ–¹å‘平移 &6[平移單ä½] 個方塊' + - '&e用法:&6/res select shift <數é‡>' + - '&eå‘é¢å°çš„æ–¹å‘平移 &6<數é‡> &e格方塊' chunk: Description: é¸æ“‡ä½ ç›®å‰æ‰€åœ¨çš„å€å¡Š Info: - - '&e用法 : &6/res select chunk' + - '&e用法:&6/res select chunk' - '&eé¸æ“‡ä½ ç›®å‰æ‰€åœ¨çš„å€å¡Š' residence: - Description: é¸æ“‡é ˜åœ°ä¸­ä¸€å€‹å­˜åœ¨çš„å€åŸŸ + Description: é¸æ“‡é ˜åœ°ä¸­å­˜åœ¨çš„å€åŸŸ Info: - - '&e用法 : &6/res select residence &6[領地å稱]' - - '&eé¸æ“‡ &6[領地å稱] &e中一個存在的å€åŸŸ' + - '&e用法:&6/res select residence <領地å稱>' + - '&eé¸æ“‡é ˜åœ°ä¸­å­˜åœ¨çš„å€åŸŸ' worldedit: - Description: 採用 WorldEdit çš„é¸æ“‡å€åŸŸ + Description: 使用 WorldEdit é¸æ“‡å€åŸŸ Info: - - '&e用法 : &6/res select worldedit' - - '&eå°‡ WorldEdit ç›®å‰çš„é¸æ“‡å€åŸŸä½œç‚ºé ˜åœ°é¸æ“‡å€åŸŸ' + - '&e用法:&6/res select worldedit' + - '&e使用 WorldEdit é¸æ“‡å€åŸŸ' padd: Info: - - '&e用法 : &6/res padd &6[領地å稱] [玩家]' - - '&e為玩家新增基本權é™' - Description: 從領地新增玩家 + - '&e用法:&6/res padd <領地å稱> [玩家å稱]' + - '&e新增玩家的基本權é™' + Description: 新增玩家到領地 + placeholders: + Info: + - '&e用法:&6/res placeholders (parse) (placeholder) (玩家å稱)' + Description: 列出 placeholder 列表 + parse: '[result]' signconvert: Info: - - '&e用法 : &6/res signconvert' - - '&e嘗試轉æ›å·²æœ‰çš„ ResidenceSign 告示牌' - Description: å°‡ ResidenceSign 的告示牌轉æ›ç‚ºæ–°æ ¼å¼ + - '&e用法:&6/res signconvert' + - '&e嘗試從第三方æ’件轉æ›å„²å­˜å‘Šç¤ºç‰Œè³‡æ–™' + Description: è½‰æ› ResidenceSign æ’件的告示牌 listallhidden: Info: - - '&e用法 : &6/res listhidden &6[é æ•¸]' - - '&e顯示所有玩家的隱è—領地' - Description: 顯示所有隱è—領地 + - '&e用法:&6/res listhidden <é æ•¸>' + - '&e顯示伺æœå™¨æ‰€æœ‰éš±è—的領地' + Description: 顯示所有隱è—的領地 bank: Info: - - '&e用法 : &6/res bank &6[deposit/withdraw] [領地å稱] [數é¡]' - - '&e必須站在領地中或指定領地å稱' - - '&eå¿…é ˆæ“有 &6+bank &e權é™' + - '&e用法:&6/res bank [deposit/withdraw] <領地å稱> [金é¡]' + - '&e你必須站在領地中或指定領地å稱且' + - '&eæ“有銀行(bank)權é™' Description: 管ç†é ˜åœ°éŠ€è¡Œ create: Info: - - '&e用法 : &6/res create &6[領地å稱]' + - '&e用法:&6/res create [領地å稱]' Description: 建立領地 listall: Info: - - '&e用法 : &6/res listall &6[é æ•¸]' - - '&e顯示所有玩家的領地' - Description: 顯示所有領地 + - '&e用法:&6/res listall <é æ•¸> <世界å稱> <-a/-f>' + - '&e列出所有的領地' + Description: 列出所有的領地 info: Info: - - '&e用法 : &6/res info &6[領地å稱]' - - '&e留空 &6[領地å稱] &e示顯示你目å‰æ‰€åœ¨çš„領地資訊' + - '&e用法:&6/res info <領地å稱>' + - '&e留空 <領地å稱> 以顯示你目å‰æ‰€åœ¨çš„領地資訊' Description: 顯示領地的資訊 area: - Description: 管ç†é ˜åœ°ç‰©ç†å€åŸŸ + Description: 管ç†é ˜åœ°å€åŸŸ Info: - '' SubCommands: list: - Description: 列出領地的物ç†å€åŸŸ + Description: 列出領地å€åŸŸ Info: - - '&e用法 : &6/res area list &6[領地å稱] [é æ•¸]' + - '&e用法:&6/res area list [領地å稱] <é æ•¸>' listall: Description: 列出所有å€åŸŸçš„座標和詳細資訊 Info: - - '&e用法 : &6/res area listall &6[領地å稱] [é æ•¸]' + - '&e用法:&6/res area listall [領地å稱] <é æ•¸>' add: - Description: 為領地新增物ç†å€åŸŸ + Description: 為領地新增å€åŸŸ Info: - - '&e用法 : &6/res area add &6[領地å稱] [å€åŸŸ ID]' + - '&e用法:&6/res area add [領地å稱] [å€åŸŸ ID]' - '&e必須先é¸ä¸­å…©å€‹é¸æ“‡é»ž' remove: - Description: 移除領地的物ç†å€åŸŸ + Description: 移除領地å€åŸŸ Info: - - '&e用法 : &6/res area remove &6[領地å稱] [å€åŸŸ ID]' + - '&e用法:&6/res area remove [領地å稱] [å€åŸŸ ID]' replace: - Description: 替æ›é ˜åœ°çš„物ç†å€åŸŸ + Description: 替æ›é ˜åœ°å€åŸŸ Info: - - '&e用法 : &6/res area replace &6[領地å稱] [å€åŸŸ ID]' + - '&e用法:&6/res area replace [領地å稱] [å€åŸŸ ID]' - '&e必須先é¸ä¸­å…©å€‹é¸æ“‡é»ž' - - '&e如果新的å€åŸŸæ›´å¤§ 二者之間將會被充滿' + - '&e如果新的å€åŸŸæ›´å¤§ï¼ŒäºŒè€…之間將會被填充' give: Info: - - '&e用法 : &6/res give &6[領地å稱] [玩家]' - - '&e將你的領地移轉給目標玩家' - Description: 將領地給予其他玩家 + - '&e用法:&6/res give <領地å稱> [玩家å稱] <-s>' + - '&e將你的領地轉移給目標玩家' + Description: 給予其他玩家領地 renamearea: Info: - - '&e用法 : &6/res removeworld &6[領地å稱] [舊å­å€åŸŸ] [æ–°å­å€åŸŸ]' - Description: é‡æ–°å‘½åå­å€åŸŸ + - '&e用法:&6/res removeworld [領地å稱] [舊å€åŸŸå稱] [æ–°å€åŸŸå稱]' + Description: é‡æ–°å‘½åå€åŸŸ contract: Info: - - '&e用法 : &6/res contract &6[領地å稱] [縮å°å–®ä½]' - - '&eå‘ä½ é¢å°çš„æ–¹å‘縮å°é ˜åœ°è¦æ¨¡' - - '&e領地å稱是å¯é¸çš„' + - '&e用法:&6/res contract (領地å稱) [縮å°å–®ä½]' + - '&eå‘ä½ é¢å°çš„æ–¹å‘縮å°é ˜åœ°ï¼Œ' + - '&e領地å稱是å¯é¸å‘½åçš„' Description: å‘ä½ é¢å°çš„æ–¹å‘縮å°é ˜åœ° check: Info: - - '&e用法 : &6/res check &6[領地å稱] [權é™] [玩家]' + - '&e用法:&6/res check [領地å稱] [權é™] (玩家å稱)' Description: 為你檢查權é™ç‹€æ…‹ gset: Info: - - '&e用法 : &6/res gset &6[領地å稱] [組] [權é™] [t/f/r]' - - '&e輸入 &6/res flags ? &e查看權é™åˆ—表' + - '&e用法:&6/res gset <領地å稱> [群組] [權é™] [true/false/remove]' + - '&e使用 &6/res flags ? &e查看權é™åˆ—表' Description: 為æŸå€‹çµ„è¨­å®šé ˜åœ°çš„ç‰¹å®šæ¬Šé™ list: Info: - - '&e用法 : &6/res list &6[玩家] [é æ•¸]' - - '&e列出指定玩家æ“有的所有領地 (除了隱è—領地)' + - '&e用法:&6/res list <玩家å稱> <é æ•¸> <世界å稱>' + - '&e列出指定玩家æ“有的所有領地(除了隱è—領地)' - '&e如果顯示自己的領地,隱è—領地也會被顯示' - - '&eè¦åˆ—出所有玩家的領地,請使用 &6/res listall &e指令' + - '&e如果è¦åˆ—出所有玩家的領地,請使用指令 &6/res listall' Description: 顯示領地列表 version: Info: - - '&e用法 : &6/res version' + - '&e用法:&6/res version' Description: 顯示領地æ’件版本 tool: Info: - - '&e用法 : &6/res tool' - Description: 顯示查看資訊工具與é¸æ“‡ç¯„åœå·¥å…· + - '&e用法:&6/res tool' + Description: 顯示領地é¸æ“‡å·¥å…·å’Œé ˜åœ°è³‡è¨Šå·¥å…·å稱 pdel: Info: - - '&e用法 : &6/res pdel &6[領地å稱] [玩家]' + - '&e用法:&6/res pdel <領地å稱> [玩家å稱]' - '&e移除玩家的基本權é™' Description: 從領地移除玩家 market: Info: - - '&e用法 : &6/res market ? &e查看更多訊æ¯' - Description: 購買/出售/出租領地 + - '&e用法:&6/res market ? &e查看更多資訊' + Description: 購買ã€å‡ºå”®ã€ç§Ÿç”¨é ˜åœ° SubCommands: Info: Description: 查看領地的經濟資訊 Info: - - '&e用法 : &6/res market Info &6[領地å稱]' - - '&e顯示領地是å¦æ­£åœ¨å‡ºç§Ÿ/出售以åŠé ˜åœ°çš„花費' + - '&e用法:&6/res market Info [領地å稱]' + - '&e顯示領地是å¦æ­£åœ¨å‡ºç§Ÿã€å‡ºå”®ä»¥åŠé ˜åœ°çš„花費' list: Description: 顯示å¯å‡ºç§Ÿèˆ‡å¯å‡ºå”®çš„領地 Info: - - '&e用法 : &6/res market list' + - '&e用法:&6/res market list [rent/sell]' SubCommands: rent: - Description: 列出å¯ä»¥è¢«ç§Ÿçš„領地. + Description: 列出å¯ä»¥è¢«å‡ºç§Ÿçš„領地 Info: - - '&e用法 : &6/res market list rent' + - '&e用法:&6/res market list rent' sell: - Description: 列出å¯ä»¥è¢«è²·çš„領地. + Description: 列出å¯ä»¥è¢«å‡ºå”®çš„領地 Info: - - '&e用法 : &6/res market list sell' + - '&e用法:&6/res market list sell' sell: - Description: 出售一個領地 + Description: 出售領地 Info: - - '&e用法 : &6/res market sell &6[領地å稱] [售價]' - - '&e將領地以 &6[amount] &8æš—å¹£ 的價格出售' - - '&e其他玩家å¯ä»¥åŸ·è¡Œ &6/res market buy 指令購買' + - '&e用法:&6/res market sell [領地å稱] [金é¡]' + - '&e將領地以 &6[金é¡] &e的價格出售' + - '&e其他玩家å¯ä»¥ä½¿ç”¨ &6/res market buy 購買' sign: Description: 設定市場告示牌 Info: - - '&e用法 : &6/res market sign &6[領地å稱]' + - '&e用法:&6/res market sign [領地å稱]' - '&e將看å‘的告示牌設定為領地市場告示牌' buy: - Description: 購買一個領地 + Description: 購買領地 Info: - - '&e用法 : &6/res market buy &6[領地å稱]' + - '&e用法:&6/res market buy [領地å稱]' - '&e如果該領地正在出售,則購買這個領地' unsell: Description: å–消出售領地 Info: - - '&e用法 : &6/res market unsell &6[領地å稱]' + - '&e用法:&6/res market unsell [領地å稱]' rent: - Description: 租用一個領地 + Description: 租用領地 Info: - - '&e用法 : &6/res market rent &6[領地å稱] [自動續租]' - - '&e租用一個領地 &6[自動續租] &eå¯ä»¥æ˜¯ &6true&e/&6false &e如果是 &6true &e並且領地æ“有者å…許 - 領地將會在租約到期之å‰è‡ªå‹•çºŒç§Ÿ' + - '&e用法:&6/res market rent [領地å稱] <自動續租付款>' + - '&e租用領地。自動續租å¯è¨­å®šç‚º true 或 false,如果是 true 並且ç²å¾—領地æ“有者å…許,領地將會在租約到期之å‰è‡ªå‹•çºŒç§Ÿ' rentable: - Description: Make a residence rentable. + Description: 出租領地 Info: - - '&e用法 : &6/res market rentable [領地å稱] [花費] [天數] + - '&e用法:&6/res market rentable [領地å稱] [花費] [天數] ' - - 使領地出租以 [天數] 來計算 [花費] - - 如果開啟 ,則在租約到期å‰å¯å†æ¬¡å‡ºç§Ÿ - - 如果開啟 ,則在租約到期後留在市場上 - - 如果開啟 ,則租用時直接從玩家身上扣款 + - '&e使領地出租以 [天數] 來計算 [花費]' + - '&e如果開啟 ,則在租約到期å‰å¯å†æ¬¡å‡ºç§Ÿ' + - '&e如果開啟 ,則在租約到期後留在市場上' + - '&e如果開啟 ,則出租到期時直接自動續租付款' autopay: - Description: 將領地自動付款設定為開/é—œ + Description: 設定領地自動續租付款 Info: - - '&e用法 : &6/res market autopay &6[領地å稱] [true/false]' + - '&e用法:&6/res market autopay [領地å稱] [true/false]' payrent: Description: 支付定é¡é ˜åœ°çš„租金 Info: - - '&e用法 : &6/res market payrent &6[領地å稱]' + - '&e用法:&6/res market payrent [領地å稱]' confirm: Description: 確èªé ˜åœ° unrent/release 行動 Info: - - '&e用法 : &6/res market confirm' + - '&e用法:&6/res market confirm' unrent: - Description: å–消領地租賃狀態 + Description: å–消領地租用或出租狀態 Info: - - '&e用法 : &6/res market unrent &6[領地å稱]' + - '&e用法:&6/res market unrent [領地å稱]' - '&e如果你是租用者,該指令將會退租領地' - '&e如果你是æ“有者,該指令將會收回領地' rc: Info: - - '&e用法 : &6/res rc &6[領地]' - - 加入領地èŠå¤©é »é“ + - '&e用法:&6/res rc (領地å稱)' + - '&e加入領地èŠå¤©é »é“' Description: 加入目å‰æˆ–指定的領地èŠå¤©é »é“ SubCommands: leave: - Description: 離開目å‰é »é“ + Description: 離開目å‰çš„領地èŠå¤©é »é“ Info: - - '&e用法 : &6/res rc leave' - - 如果你在領地èŠå¤©é »é“內,那你將離開領地èŠå¤©é »é“ + - '&e用法:&6/res rc leave' + - '&e如果你在領地èŠå¤©é »é“內,那你將離開領地èŠå¤©é »é“' setcolor: - Description: 設定領地頻é“文字é¡è‰² + Description: 設定領地èŠå¤©é »é“文字é¡è‰² Info: - - '&e用法 : &6/res rc setcolor &6[é¡è‰²ä»£ç¢¼]' - - 設定領地èŠå¤©é »é“文字é¡è‰² + - '&e用法:&6/res rc setcolor [é¡è‰²ä»£ç¢¼]' + - '&e設定領地èŠå¤©é »é“文字é¡è‰²' setprefix: Description: 設定領地èŠå¤©é »é“å‰ç¶´ Info: - - '&e用法 : &6/res rc setprefix &6[æ–°å‰ç¶´]' - - 設定領地èŠå¤©é »é“å‰ç¶´ + - '&e用法:&6/res rc setprefix [æ–°å‰ç¶´]' + - '&e設定領地èŠå¤©é »é“å‰ç¶´' kick: - Description: 從頻é“中踢出玩家 + Description: 從領地èŠå¤©é »é“中踢出玩家 Info: - - '&e用法 : &6/res rc kick &6[玩家]' - - '&e從領地頻é“中踢出æŸçŽ©å®¶' + - '&e用法:&6/res rc kick [玩家å稱]' + - '&e從領地èŠå¤©é »é“中踢出玩家' expand: Info: - - '&e用法 : &6/res expand &6[領地] [擴展單ä½]' - - '&eå‘ä½ é¢å°çš„æ–¹å‘擴展領地è¦æ¨¡' + - '&e用法:&6/res expand (領地å稱) [擴展單ä½]' + - '&eå‘ä½ é¢å°çš„æ–¹å‘擴展領地è¦æ¨¡ï¼Œ' + - '&e領地å稱是å¯é¸å‘½åçš„' Description: å‘ä½ é¢å°çš„æ–¹å‘擴展領地 compass: Info: - - '&e用法 : &6/res compass &6[領地å稱]' - Description: 設定羅盤指å‘領地 + - '&e用法:&6/res compass <領地å稱>' + Description: 設定指å‘領地的羅盤 lists: Info: - - '&eé å®šç¾©çš„權é™åˆ—表å¯ä»¥è¢«æ‡‰ç”¨åˆ°é ˜åœ°ä¸Š' - Description: é å®šç¾©æ¬Šé™åˆ—表 + - '&eé å…ˆå®šç¾©çš„權é™åˆ—表å¯ä»¥è¢«æ‡‰ç”¨åˆ°é ˜åœ°ä¸Š' + Description: é å…ˆæŒ‡å®šæ¬Šé™åˆ—表 SubCommands: add: - Description: 新增一個列表 + Description: 新增列表 Info: - - '&e用法 : &6/res lists add &6[列表å稱]' + - '&e用法:&6/res lists add <列表å稱>' remove: - Description: 移除一個列表 + Description: 移除列表 Info: - - '&e用法 : &6/res lists remove &6[列表å稱]' + - '&e用法:&6/res lists remove <列表å稱>' apply: - Description: 將列表應用到領地 + Description: 應用領地列表 Info: - - '&e用法 : &6/res lists apply &6[列表å稱] [領地å稱]' + - '&e用法:&6/res lists apply <列表å稱> <領地å稱>' set: - Description: è¨­å®šåˆ—è¡¨å…¨åŸŸæ¬Šé™ + Description: è¨­å®šæ¬Šé™ Info: - - '&e用法 : &6/res lists set &6[列表å稱] [權é™] [值]' + - '&e用法:&6/res lists set <列表å稱> <權é™> [值]' pset: - Description: è¨­å®šåˆ—è¡¨çŽ©å®¶æ¬Šé™ + Description: è¨­å®šçŽ©å®¶æ¬Šé™ Info: - - '&e用法 : &6/res lists pset &6[列表å稱] [玩家] [權é™] [值]' + - '&e用法:&6/res lists pset <列表å稱> <玩家å稱> <權é™> [值]' gset: - Description: è¨­å®šåˆ—è¡¨çµ„æ¬Šé™ + Description: è¨­å®šçµ„æ¬Šé™ Info: - - '&e用法 : &6/res lists view &6[列表å稱]' + - '&e用法:&6/res lists gset <列表å稱> <玩家å稱> <權é™> [值]' view: Description: 查看列表 Info: - - '&e用法 : &6/res lists view &6' + - '&e用法:&6/res lists view <列表å稱>' reset: Info: - - '&e用法 : &6/res reset &6[領地å稱]' + - '&e用法:&6/res reset <領地å稱/all>' - '&e將領地的所有權é™é‡ç½®' Description: 將領地設定還原為é è¨­å€¼ listhidden: Info: - - '&e用法 : &6/res listhidden &6[玩家] [é æ•¸]' + - '&e用法:&6/res listhidden <玩家å稱> <é æ•¸>' - '&e列出玩家æ“有的隱è—領地' - Description: 顯示隱è—領地列表 + Description: 列出隱è—領地 raid: Info: - - '&e用法 : &6/res raid start &6[領地å稱] [玩家]' - - '&6/res raid stop &6[領地å稱]' - - '&6/res raid kick &6[玩家]' - - '&6/res raid immunity &6[add/take/set/clear] [領地å稱] [時間]' - Description: 管ç†é ˜åœ°çªè¥² + - '&e用法:&6/res raid start [領地å稱] (玩家å稱)' + - '&6/res raid stop [領地å稱]' + - '&6/res raid kick [玩家å稱]' + - '&6/res raid immunity [add/take/set/clear] [領地å稱/ç›®å‰æ‰€åœ¨é ˜åœ°] [時間]' + Description: 管ç†é ˜åœ°ä¾µç•¥ setmain: Info: - - '&e用法 : &6/res setmain &6[領地]' - - '&e將定義的領地設為主' + - '&e用法:&6/res setmain (領地å稱)' + - '&e將指定的領地設為 main' Description: 將定義的領地å稱作為å‰ç¶´é¡¯ç¤ºåœ¨èŠå¤©ä¸­ server: Info: - - '&e用法 : &6/resadmin server &6[領地å稱]' - - '&e建立一個屬於伺æœå™¨çš„領地' + - '&e用法:&6/resadmin server [領地å稱]' + - '&e建立伺æœå™¨çš„領地' Description: 建立伺æœå™¨é ˜åœ° rt: Info: - - '&e用法 : &6/res rt' - - '&e傳é€åˆ°ä¸–界上的隨機ä½ç½®' - Description: 傳é€åˆ°ä¸–界上的隨機ä½ç½® + - '&e用法:&6/res rt (世界å稱) (玩家å稱)' + - '&e傳é€åˆ°æŒ‡å®šä¸–界的隨機ä½ç½®' + Description: 傳é€åˆ°ä¸–界的隨機ä½ç½® mirror: Info: - - '&e用法 : &6/res mirror &6[領地å稱] [複製到的領地]' - Description: è¤‡è£½æ¬Šé™ + - '&e用法:&6/res mirror [原領地å稱] [目標領地å稱]' + - '&e將權é™å¾žè©²é ˜åœ°é¡åƒåˆ°å¦ä¸€å€‹é ˜åœ°ï¼Œä½ å¿…須是兩者的所有者或管ç†å“¡æ‰èƒ½åŸ·è¡Œè©²æ“作' + Description: é¡åƒæ¬Šé™ shop: Info: - '&e管ç†é ˜åœ°çš„商店功能' @@ -922,780 +934,788 @@ CommandHelp: list: Description: 顯示領地商店列表 Info: - - '&e用法 : &6/res shop list' + - '&e用法:&6/res shop list' - '&e顯示所有作為商店的領地' vote: - Description: 為領地商店評分 + Description: 為領地商店投票 Info: - - '&e用法 : &6/res shop vote &6[領地å稱] [分數]' - - '&e為目å‰æˆ–指定領地商店評分' + - '&e用法:&6/res shop vote <領地å稱> [票數]' + - '&e為目å‰æˆ–指定領地商店投票' like: - Description: 為領地商店點贊 + Description: 為領地商店按讚 Info: - - '&e用法 : &6/res shop like &6[領地å稱]' - - '&e為領地商店點一個贊' + - '&e用法:&6/res shop like <領地å稱>' + - '&e為領地商店按讚' votes: - Description: 顯示領地商店評分 + Description: 顯示領地商店投票 Info: - - '&e用法 : &6/res shop votes &6[領地å稱] [é æ•¸]' - - '&e顯示目å‰æˆ–指定領地商店的評分列表' + - '&e用法:&6/res shop votes <領地å稱> <é æ•¸>' + - '&e顯示目å‰æˆ–指定領地商店的投票列表' likes: - Description: 顯示領地商店的贊 + Description: 顯示領地商店的按讚 Info: - - '&e用法 : &6/res shop likes &6[領地å稱] [é æ•¸]' - - '&e顯示目å‰æˆ–指定領地商店的贊列表' + - '&e用法:&6/res shop likes <領地å稱> <é æ•¸>' + - '&e顯示目å‰æˆ–指定的領地商店按讚列表' setdesc: Description: 設定領地商店æè¿° Info: - - '&e用法 : &6/res shop setdesc &6[æ述文字]' - - '&e設定領地商店æè¿° 支æŒé¡è‰²ä»£ç¢¼ 用 /n 表示æ›è¡Œ' + - '&e用法:&6/res shop setdesc [文字]' + - '&e設定領地商店æ述,並且支æŒé¡è‰²ä»£ç¢¼ï¼Œç”¨ /n 表示æ›è¡Œ' createboard: Description: 建立商店宣傳é¢æ¿ Info: - - '&e用法 : &6/res shop createboard &6[ä½ç½®]' - - '&e在é¸æ“‡å€åŸŸä½ç½®å»ºç«‹å•†åº—宣傳é¢æ¿ &6[ä½ç½®] &e表示宣傳é¢æ¿çš„起始ä½ç½®' + - '&e用法:&6/res shop createboard [ä½ç½®]' + - '&e在é¸æ“‡å€åŸŸå»ºç«‹å•†åº—宣傳é¢æ¿ï¼Œæ”¾ç½®ä½ç½® - å³å®£å‚³é¢æ¿çš„起始ä½ç½®' deleteboard: Description: 移除商店宣傳é¢æ¿ Info: - - '&e用法 : &6/res shop deleteboard' - - '&eå³æ“Šå®£å‚³é¢æ¿çš„告示牌以移除宣傳é¢æ¿' + - '&e用法:&6/res shop deleteboard' + - '&eå°å®£å‚³é¢æ¿çš„告示牌點擊å³éµä»¥ç§»é™¤å®£å‚³é¢æ¿' lset: Info: - - '&e用法 : &6/res lset &6[領地å稱] [blacklist/ignorelist] [物å“]' - - '&e用法 : &6/res lset &6[領地å稱] &6Info' - - '&eå°‡æŸç‰©å“加入黑å單以阻止這種物å“被放置在領地中' - - '&e忽略å單中的物å“å°‡ä¸æœƒè¢«é ˜åœ°ä¿è­·' + - '&e用法:&6/res lset <領地å稱> [blacklist/ignorelist] [ç‰©å“ ID]' + - '&e用法:&6/res lset <領地å稱> Info' + - '&e將物å“加入黑å單,物å“將被阻止放置在領地中,' + - '&e將物å“加入忽略å單,物å“å°‡ä¸æœƒè¢«é ˜åœ°æ‰€ä¿è­·' Description: 更改黑å單和忽略åå–®é¸é … raidstatus: Info: - - '&e用法 : &6/res raidstatus [領地å稱/玩家å稱]' - Description: 查看領地的çªè¥²ç‹€æ…‹ + - '&e用法:&6/res raidstatus (領地å稱/玩家å稱)' + Description: 查看領地的侵略狀態 pset: Info: - - '&e用法 : &6/res pset &6[領地å稱] [玩家] [權é™] [t/f/r]' - - '&e用法 : &6/res pset &6[領地å稱] [玩家] &6removeall' - - '&e輸入 &6/res flags ? &e查看權é™åˆ—表' + - '&e用法:&6/res pset <領地å稱> [玩家å稱] [權é™] [true/false/remove]' + - '&e用法:&6/res pset <領地å稱> [玩家å稱] removeall' + - '&e使用 &6/res flags ? &e查看權é™åˆ—表' Description: ç‚ºçŽ©å®¶è¨­å®šé ˜åœ°çš„ç‰¹å®šæ¬Šé™ show: Info: - - '&e用法 : &6/res show &6[領地å稱]' + - '&e用法:&6/res show <領地å稱>' Description: 顯示領地邊界 flags: Info: - - '&e用法 : &6/res remove &6[領地å稱]' + - '&e設定領地權é™æ™‚,true çš„æ„æ€ç‚ºå…許æ“作,false çš„æ„æ€ç‚ºç¦æ­¢æ“作' Description: 權é™åˆ—表 SubCommands: anvil: - Translated: 使用éµç § (anvil) - Description: å…許 或 ç¦æ­¢ä½¿ç”¨éµç § + Translated: 使用éµç §ï¼ˆanvil) + Description: å…許或ç¦æ­¢ä½¿ç”¨éµç § Info: - - '&e用法 : &6/res set/pset <領地> anvil true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> anvil true/false/remove' admin: - Translated: 管ç†æ¬Š (admin) + Translated: 管ç†æ¬Šï¼ˆadmin) Description: 給予玩家管ç†å“¡æ¬Šé™æ›´æ”¹é ˜åœ°çš„æ¬Šé™ Info: - - '&e用法 : &6/res pset <領地> admin true/false/remove' + - '&e用法:&6/res pset <領地å稱> admin true/false/remove' animalkilling: - Translated: 擊殺動物 (animalkilling) - Description: å…許 或 ç¦æ­¢æ“Šæ®ºå‹•ç‰© + Translated: 擊殺動物(animalkilling) + Description: å…許或ç¦æ­¢æ“Šæ®ºå‹•ç‰© Info: - - '&e用法 : &6/res set/pset <領地> animalkilling true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> animalkilling true/false/remove' animals: - Translated: 生æˆå‹•ç‰© (animals) - Description: å…許 或 ç¦æ­¢ç”Ÿæˆå‹•ç‰© + Translated: 生æˆå‹•ç‰©ï¼ˆanimals) + Description: å…許或ç¦æ­¢ç”Ÿæˆå‹•ç‰© Info: - - '&e用法 : &6/res set <領地> animals true/false/remove' + - '&e用法:&6/res set <領地å稱> animals true/false/remove' anchor: - Translated: 使用é‡ç”ŸéŒ¨ (anchor) - Description: å…許 或 ç¦æ­¢ä½¿ç”¨é‡ç”ŸéŒ¨ + Translated: 使用é‡ç”ŸéŒ¨ï¼ˆanchor) + Description: å…許或ç¦æ­¢ä½¿ç”¨é‡ç”ŸéŒ¨ Info: - - '&e用法 : &6/res set/pset <領地> anchor true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> anchor true/false/remove' anvilbreak: - Translated: éµç §æ壞 (anvilbreak) - Description: å…許 或 ç¦æ­¢é ˜åœ°å…§éµç §æ壞 + Translated: éµç §æ壞(anvilbreak) + Description: å…許或ç¦æ­¢é ˜åœ°å…§éµç §æ壞 Info: - - '&e用法 : &6/res set <領地> anvilbreak true/false/remove' + - '&e用法:&6/res set <領地å稱> anvilbreak true/false/remove' backup: - Translated: 備份與還原 (backup) - Description: 如果設定為 true,則æ¢å¾©åŽŸç”Ÿçš„領地樣貌 ï¼ˆéœ€è¦ WordEdit) + Translated: 備份與還原(backup) + Description: 如果設定為 trueï¼Œå‰‡å›žå¾©å›žåŽŸæœ¬çš„é ˜åœ°æ¨£è²Œï¼ˆéœ€è¦ WordEdit) Info: - - '&e用法 : &6/res set <領地> backup true/false/remove' + - '&e用法:&6/res set <領地å稱> backup true/false/remove' bank: - Translated: 使用銀行 (bank) - Description: å…許 或 ç¦æ­¢å¾žé ˜åœ°éŠ€è¡Œå­˜æ¬¾/å–款 + Translated: 使用銀行(bank) + Description: å…許或ç¦æ­¢å¾žé ˜åœ°éŠ€è¡Œå­˜æ¬¾/å–款 Info: - - '&e用法 : &6/res set/pset <領地> bank true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> bank true/false/remove' bed: - Translated: 使用床 (bed) - Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ + Translated: 使用床(bed) + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ Info: - - '&e用法 : &6/res set/pset <領地> bed true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> bed true/false/remove' honey: - Translated: 摘å–蜂蜜 (honey) - Description: å…許 或 ç¦æ­¢çŽ©å®¶æ‘˜å–蜂蜜 + Translated: 摘å–蜂蜜(honey) + Description: å…許或ç¦æ­¢çŽ©å®¶æ‘˜å–蜂蜜 Info: - - '&e用法 : &6/res set/pset <領地> honey true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> honey true/false/remove' honeycomb: - Translated: 摘å–蜂巢 (honeycomb) - Description: å…許 或 ç¦æ­¢çŽ©å®¶æ‘˜å–蜂巢 + Translated: 摘å–蜂巢(honeycomb) + Description: å…許或ç¦æ­¢çŽ©å®¶æ‘˜å–蜂巢 Info: - - '&e用法 : &6/res set/pset <領地> honeycomb true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> honeycomb true/false/remove' beacon: - Translated: 使用烽ç«å° (beacon) - Description: å…許 或 ç¦æ­¢ä½¿ç”¨çƒ½ç«å° + Translated: 使用烽ç«å°ï¼ˆbeacon) + Description: å…許或ç¦æ­¢ä½¿ç”¨çƒ½ç«å° Info: - - '&e用法 : &6/res set/pset <領地> beacon true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> beacon true/false/remove' brew: - Translated: ä½¿ç”¨é‡€é€ å° ï¼ˆbrew) - Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨é‡€é€ å° + Translated: 使用釀造å°ï¼ˆbrew) + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é‡€é€ å° Info: - - '&e用法 : &6/res set/pset <領地> brew true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> brew true/false/remove' build: - Translated: 建造 (build) - Description: å…許 或 ç¦æ­¢å»ºé€  + Translated: 建造(build) + Description: å…許或ç¦æ­¢å»ºé€  Info: - - '&e用法 : &6/res set/pset <領地> build true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> build true/false/remove' burn: - Translated: 生物燃燒 (burn) - Description: å…許 或 ç¦æ­¢ç”Ÿç‰©åœ¨é ˜åœ°å…§ç‡ƒç‡’ + Translated: 生物燃燒(burn) + Description: å…許或ç¦æ­¢ç”Ÿç‰©åœ¨é ˜åœ°å…§ç‡ƒç‡’ Info: - - '&e用法 : &6/res set <領地> burn true/false/remove' + - '&e用法:&6/res set <領地å稱> burn true/false/remove' button: - Translated: 使用按鈕 (button) - Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰éˆ• + Translated: 使用按鈕(button) + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰éˆ• Info: - - '&e用法 : &6/res set/pset <領地> button true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> button true/false/remove' cake: - Translated: åƒè›‹ç³• (cake) - Description: å…許 或 ç¦æ­¢çŽ©å®¶åƒè›‹ç³• + Translated: åƒè›‹ç³•ï¼ˆcake) + Description: å…許或ç¦æ­¢çŽ©å®¶åƒè›‹ç³• Info: - - '&e用法 : &6/res set/pset <領地> cake true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> cake true/false/remove' canimals: - Translated: 生æˆè‡ªå®šç¾©å‹•ç‰© (canimals) - Description: å…許 或 ç¦æ­¢è‡ªè¨‚ç¾©å‹•ç‰©ç”Ÿæˆ + Translated: 生æˆè‡ªå®šç¾©å‹•ç‰©ï¼ˆcanimals) + Description: å…許或ç¦æ­¢è‡ªè¨‚ç¾©å‹•ç‰©ç”Ÿæˆ Info: - - '&e用法 : &6/res set <領地> canimals true/false/remove' + - '&e用法:&6/res set <領地å稱> canimals true/false/remove' chorustp: - Translated: 食用歌èŠæžœå‚³é€ (chorustp) - Description: å…許 或 ç¦æ­¢åƒæ­ŒèŠæžœé€²è¡Œå‚³é€ + Translated: åƒæ­ŒèŠæžœå‚³é€ï¼ˆchorustp) + Description: å…許或ç¦æ­¢åƒæ­ŒèŠæžœé€²è¡Œå‚³é€ Info: - - '&e用法 : &6/res set/pset <領地> chorustp true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> chorustp true/false/remove' chat: - Translated: èŠå¤© (chat) - Description: å…許 或 ç¦æ­¢çŽ©å®¶åŠ å…¥é ˜åœ°èŠå¤©é »é“ + Translated: èŠå¤©ï¼ˆchat) + Description: å…許或ç¦æ­¢çŽ©å®¶åŠ å…¥é ˜åœ°èŠå¤©é »é“ Info: - - '&e用法 : &6/res set/pset <領地> chat true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> chat true/false/remove' cmonsters: - Translated: 生æˆè‡ªè¨‚義怪物 (cmonsters) - Description: å…許 或 ç¦æ­¢è‡ªè¨‚ç¾©æ€ªç‰©ç”Ÿæˆ + Translated: 生æˆè‡ªè¨‚義怪物(cmonsters) + Description: å…許或ç¦æ­¢è‡ªè¨‚ç¾©æ€ªç‰©ç”Ÿæˆ Info: - - '&e用法 : &6/res set <領地> cmonsters true/false/remove' + - '&e用法:&6/res set <領地å稱> cmonsters true/false/remove' commandblock: - Translated: 使用指令方塊 (commandblock) - Description: å…許 或 ç¦æ­¢ä½¿ç”¨æŒ‡ä»¤æ–¹å¡Š + Translated: 使用指令方塊(commandblock) + Description: å…許或ç¦æ­¢ä½¿ç”¨æŒ‡ä»¤æ–¹å¡Š Info: - - '&e用法 : &6/res set/pset <領地> commandblock true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> commandblock true/false/remove' command: - Translated: 使用指令 (command) - Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨æŒ‡ä»¤ + Translated: 使用指令(command) + Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨æŒ‡ä»¤ Info: - - '&e用法 : &6/res set/pset <領地> command true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> command true/false/remove' container: - Translated: 使用容器 (container) - Description: å…許 或 ç¦æ­¢ä½¿ç”¨ç†”çˆã€å„²ç‰©ç®±ã€ç™¼å°„器…… + Translated: 使用容器(container) + Description: å…許或ç¦æ­¢ä½¿ç”¨ç†”çˆã€å„²ç‰©ç®±ã€ç™¼å°„器…… Info: - - '&e用法 : &6/res set/pset <領地> container true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> container true/false/remove' coords: - Translated: 顯示座標 (coords) + Translated: 顯示座標(coords) Description: 顯示領地座標 Info: - - '&e用法 : &6/res set <領地> coords true/false/remove' + - '&e用法:&6/res set <領地å稱> coords true/false/remove' copper: - Translated: 修改銅方塊 (copper) + Translated: 修改銅方塊(copper) Description: å…許修改銅方塊 Info: - - '&e用法 : &6/res set/pset <領地> copper true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> copper true/false/remove' craft: - Translated: 使用工è—ç•Œé¢ ï¼ˆcraft) - Description: 給予工作å°ã€é™„é­”å°ã€é‡€é€ å°â€¦â€¦ çš„æ¬Šé™ + Translated: 使用工è—ç•Œé¢ï¼ˆcraft) + Description: 給予工作å°ã€é™„é­”å°ã€é‡€é€ å°ç­‰çš„æ¬Šé™ Info: - - '&e用法 : &6/res set <領地> craft true/false/remove' + - '&e用法:&6/res set <領地å稱> craft true/false/remove' creeper: - Translated: 苦力怕爆炸 (creeper) - Description: å…許 或 ç¦æ­¢è‹¦åŠ›æ€•çˆ†ç‚¸ + Translated: 苦力怕爆炸(creeper) + Description: å…許或ç¦æ­¢è‹¦åŠ›æ€•çˆ†ç‚¸ Info: - - '&e用法 : &6/res set <領地> creeper true/false/remove' + - '&e用法:&6/res set <領地å稱> creeper true/false/remove' dragongrief: - Translated: 終界é¾ç ´å£ž (dragongrief) - Description: å…許 或 ç¦æ­¢çµ‚ç•Œé¾ç ´å£žä»»ä½•æ–¹å¡Š + Translated: 終界é¾ç ´å£žï¼ˆdragongrief) + Description: å…許或ç¦æ­¢çµ‚ç•Œé¾ç ´å£žä»»ä½•æ–¹å¡Š Info: - - '&e用法 : &6/res set <領地> dragongrief true/false/remove' + - '&e用法:&6/res set <領地å稱> dragongrief true/false/remove' day: - Translated: 白天 (day) + Translated: 白天(day) Description: 設定領地時間為白天 Info: - - '&e用法 : &6/res set <領地> day true/false/remove' + - '&e用法:&6/res set <領地å稱> day true/false/remove' dye: - Translated: 染色羊 (dye) - Description: å…許 或 ç¦æ­¢ç¾ŠæŸ“色 + Translated: 染色羊(dye) + Description: å…許或ç¦æ­¢ç¾ŠæŸ“色 Info: - - '&e用法 : &6/res set/pset <領地> dye true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> dye true/false/remove' damage: - Translated: 實體傷害 (damage) - Description: å…許 或 ç¦æ­¢æ‰€æœ‰é ˜åœ°å¯¦é«”傷害 + Translated: 實體傷害(damage) + Description: å…許或ç¦æ­¢æ‰€æœ‰é ˜åœ°å¯¦é«”傷害 Info: - - '&e用法 : &6/res set <領地> damage true/false/remove' + - '&e用法:&6/res set <領地å稱> damage true/false/remove' decay: - Translated: 樹葉è…爛 (decay) - Description: å…許 或 ç¦æ­¢é ˜åœ°å…§æ¨¹è‘‰è…爛 + Translated: 樹葉è…爛(decay) + Description: å…許或ç¦æ­¢é ˜åœ°å…§æ¨¹è‘‰è…爛 Info: - - '&e用法 : &6/res set <領地> decay true/false/remove' + - '&e用法:&6/res set <領地å稱> decay true/false/remove' destroy: - Translated: 破壞 (destroy) - Description: å…許 或 ç¦æ­¢ç ´å£žæ–¹å¡Šï¼ˆå°‡è¦†è“‹ build 權é™ï¼‰ + Translated: 破壞(destroy) + Description: å…許或ç¦æ­¢ç ´å£žæ–¹å¡Šï¼ˆå°‡è¦†è“‹ build 權é™ï¼‰ Info: - - '&e用法 : &6/res set/pset <領地> destroy true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> destroy true/false/remove' dryup: - Translated: 耕地乾涸 (dryup) - Description: å…許 或 ç¦æ­¢è€•åœ°ä¹¾æ¶¸ + Translated: 耕地乾涸(dryup) + Description: å…許或ç¦æ­¢è€•åœ°ä¹¾æ¶¸ Info: - - '&e用法 : &6/res set <領地> dryup true/false/remove' + - '&e用法:&6/res set <領地å稱> dryup true/false/remove' diode: - Translated: 使用紅石中繼器 (diode) - Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨ç´…石中繼器 + Translated: 使用紅石中繼器(diode) + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨ç´…石中繼器 Info: - - '&e用法 : &6/res set/pset <領地> diode true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> diode true/false/remove' door: - Translated: 使用門 (door) - Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨é–€æˆ–地æ¿é–€ + Translated: 使用門(door) + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é–€æˆ–地æ¿é–€ Info: - - '&e用法 : &6/res set/pset <領地> door true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> door true/false/remove' egg: - Translated: 觸碰é¾è›‹ (egg) - Description: å…許 或 ç¦æ­¢çŽ©å®¶è§¸ç¢°é¾è›‹ + Translated: 觸碰傳é€é¾è›‹ï¼ˆegg) + Description: å…許或ç¦æ­¢çŽ©å®¶è§¸ç¢°å‚³é€é¾è›‹ Info: - - '&e用法 : &6/res set/pset <領地> egg true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> egg true/false/remove' enchant: - Translated: ä½¿ç”¨é™„é­”å° ï¼ˆenchant) - Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° + Translated: 使用附魔å°ï¼ˆenchant) + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° Info: - - '&e用法 : &6/res set/pset <領地> enchant true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> enchant true/false/remove' explode: - Translated: 爆炸 (explode) - Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§çˆ†ç‚¸ + Translated: 爆炸(explode) + Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§çˆ†ç‚¸ Info: - - '&e用法 : &6/res set <領地> explode true/false/remove' + - '&e用法:&6/res set <領地å稱> explode true/false/remove' elytra: - Translated: 使用鞘翅 (elytra) - Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨éž˜ç¿… + Translated: 使用鞘翅(elytra) + Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨éž˜ç¿… Info: - - '&e用法 : &6/res set/pset <領地> elytra true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> elytra true/false/remove' enderpearl: - Translated: 使用終界çç å‚³é€ (enderpearl) - Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨çµ‚ç•Œçç å‚³é€ + Translated: 使用終界çç å‚³é€ï¼ˆenderpearl) + Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨çµ‚ç•Œçç å‚³é€ Info: - - '&e用法 : &6/res set/pset <領地> enderpearl true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> enderpearl true/false/remove' fallinprotection: - Translated: é˜²æ­¢æ–¹å¡ŠæŽ‰è½ ï¼ˆfallinprotection) + Translated: 防止方塊掉è½ï¼ˆfallinprotection) Description: 防止方塊掉è½é ˜åœ°å…§ Info: - - '&e用法 : &6/res set <領地> fallinprotection true/false/remove' + - '&e用法:&6/res set <領地å稱> fallinprotection true/false/remove' falldamage: - Translated: çŽ©å®¶æ‘”è½ ï¼ˆfalldamage) - Description: å…許 或 ç¦æ­¢çŽ©å®¶æ‘”è½å‚·å®³ + Translated: 玩家摔è½ï¼ˆfalldamage) + Description: å…許或ç¦æ­¢çŽ©å®¶æ‘”è½å‚·å®³ Info: - - '&e用法 : &6/res set <領地> falldamage true/false/remove' + - '&e用法:&6/res set <領地å稱> falldamage true/false/remove' feed: - Translated: 自動回復飽食度 (feed) + Translated: 自動回復飽食度(feed) Description: 如果設定為 true,則讓在領地內的玩家自動回復飽食度 Info: - - '&e用法 : &6/res set <領地> feed true/false/remove' + - '&e用法:&6/res set <領地å稱> feed true/false/remove' friendlyfire: - Translated: å‹è»å‚·å®³ (friendlyfire) - Description: å…許 或 ç¦æ­¢å‹è»å‚·å®³ + Translated: å‹è»å‚·å®³ï¼ˆfriendlyfire) + Description: å…許或ç¦æ­¢å‹è»å‚·å®³ Info: - - '&e用法 : &6/res pset <領地> friendlyfire true/false/remove' + - '&e用法:&6/res pset <領地å稱> friendlyfire true/false/remove' fireball: - Translated: 使用ç«ç„°å½ˆ (fireball) - Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨ç«ç„°å½ˆ + Translated: 使用ç«ç„°å½ˆï¼ˆfireball) + Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨ç«ç„°å½ˆ Info: - - '&e用法 : &6/res set <領地> fireball true/false/remove' + - '&e用法:&6/res set <領地å稱> fireball true/false/remove' firespread: - Translated: ç«ç„°è”“延 (firespread) - Description: å…許 或 ç¦æ­¢ç«ç„°è”“延 + Translated: ç«ç„°è”“延(firespread) + Description: å…許或ç¦æ­¢ç«ç„°è”“延 Info: - - '&e用法 : &6/res set <領地> firespread true/false/remove' + - '&e用法:&6/res set <領地å稱> firespread true/false/remove' flowinprotection: - Translated: 防止外部液體æµå‹• (flowinprotection) - Description: å…許 或 ç¦æ­¢æ¶²é«”æµå…¥é ˜åœ° + Translated: 防止外部液體æµå‹•ï¼ˆflowinprotection) + Description: å…許或ç¦æ­¢æ¶²é«”æµå…¥é ˜åœ° Info: - - '&e用法 : &6/res set <領地> flowinprotection true/false/remove' + - '&e用法:&6/res set <領地å稱> flowinprotection true/false/remove' flow: - Translated: 內部液體æµå‹• (flow) - Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§æ¶²é«”æµå‹• + Translated: 內部液體æµå‹•ï¼ˆflow) + Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§æ¶²é«”æµå‹• Info: - - '&e用法 : &6/res set <領地> flow true/false/remove' + - '&e用法:&6/res set <領地å稱> flow true/false/remove' flowerpot: - Translated: 使用花盆 (flowerpot) - Description: å…許 或 ç¦æ­¢ä½¿ç”¨èŠ±ç›† + Translated: 使用花盆(flowerpot) + Description: å…許或ç¦æ­¢ä½¿ç”¨èŠ±ç›† Info: - - '&e用法 : &6/res set/pset <領地> flowerpot true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> flowerpot true/false/remove' grow: - Translated: æ¤ç‰©ç”Ÿé•· (grow) - Description: å…許 或 ç¦æ­¢æ¤ç‰©ç”Ÿé•· + Translated: æ¤ç‰©ç”Ÿé•·ï¼ˆgrow) + Description: å…許或ç¦æ­¢æ¤ç‰©ç”Ÿé•· Info: - - '&e用法 : &6/res set <領地> grow true/false/remove' + - '&e用法:&6/res set <領地å稱> grow true/false/remove' glow: - Translated: 玩家發光 (glow) + Translated: 玩家發光(glow) Description: 玩家進入領地後會開始發光 Info: - - '&e用法 : &6/res set <領地> glow true/false/remove' + - '&e用法:&6/res set <領地å稱> glow true/false/remove' + harvest: + Translated: 收割(harvest) + Description: å…許收割作物 + Info: + - '&e用法:&6/res set/pset harvest true/false/remove' hotfloor: - Translated: 岩漿塊傷害 (hotfloor) - Description: å…許 或 ç¦æ­¢è¸©åœ¨å²©æ¼¿å¡Šä¸Šçš„傷害 + Translated: 岩漿塊傷害(hotfloor) + Description: å…許或ç¦æ­¢è¸©åœ¨å²©æ¼¿å¡Šä¸Šçš„傷害 Info: - - '&e用法 : &6/res set <領地> hotfloor true/false/remove' + - '&e用法:&6/res set <領地å稱> hotfloor true/false/remove' hidden: - Translated: éš±è—領地列表 (hidden) + Translated: éš±è—領地列表(hidden) Description: 在 list 或 listall 列表中隱è—領地 Info: - - '&e用法 : &6/res set <領地> hidden true/false/remove' + - '&e用法:&6/res set <領地å稱> hidden true/false/remove' hook: - Translated: 使用釣竿釣鉤實體 (hook) - Description: å…許 或 ç¦æ­¢ä½¿ç”¨é‡£ç«¿é‡£é‰¤å¯¦é«” + Translated: 使用釣竿釣鉤實體(hook) + Description: å…許或ç¦æ­¢ä½¿ç”¨é‡£ç«¿é‡£é‰¤å¯¦é«” Info: - - '&e用法 : &6/res set/pset <領地> hook true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> hook true/false/remove' healing: - Translated: è‡ªå‹•å›žå¾©è¡€é‡ ï¼ˆhealing) + Translated: 自動回復血é‡ï¼ˆhealing) Description: 如果設定為 trueï¼Œå‰‡è®“åœ¨é ˜åœ°å…§çš„çŽ©å®¶è‡ªå‹•å›žå¾©è¡€é‡ Info: - - '&e用法 : &6/res set <領地> healing true/false/remove' + - '&e用法:&6/res set <領地å稱> healing true/false/remove' iceform: - Translated: æ°´çµå†° (iceform) - Description: å…許 或 ç¦æ­¢æ°´çµå†° + Translated: æ°´çµå†°ï¼ˆiceform) + Description: å…許或ç¦æ­¢æ°´çµå†° Info: - - '&e用法 : &6/res set <領地> iceform true/false/remove' + - '&e用法:&6/res set <領地å稱> iceform true/false/remove' icemelt: - Translated: 冰èžåŒ– (icemelt) - Description: å…許 或 ç¦æ­¢å†°èžåŒ– + Translated: 冰èžåŒ–(icemelt) + Description: å…許或ç¦æ­¢å†°èžåŒ– Info: - - '&e用法 : &6/res set <領地> icemelt true/false/remove' + - '&e用法:&6/res set <領地å稱> icemelt true/false/remove' ignite: - Translated: 使用打ç«çŸ³ (ignite) - Description: å…許 或 ç¦æ­¢ä½¿ç”¨æ‰“ç«çŸ³ + Translated: 使用打ç«çŸ³ï¼ˆignite) + Description: å…許或ç¦æ­¢ä½¿ç”¨æ‰“ç«çŸ³ Info: - - '&e用法 : &6/res set/pset <領地> ignite true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> ignite true/false/remove' itemdrop: - Translated: 物å“æŽ‰è½ ï¼ˆitemdrop) - Description: å…許 或 ç¦æ­¢ç‰©å“æŽ‰è½ + Translated: 物å“掉è½ï¼ˆitemdrop) + Description: å…許或ç¦æ­¢ç‰©å“æŽ‰è½ Info: - - '&e用法 : &6/res set/pset <領地> itemdrop true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> itemdrop true/false/remove' itempickup: - Translated: 物å“æ’¿å– ï¼ˆitempickup) - Description: å…許 或 ç¦æ­¢ç‰©å“æ’¿å– + Translated: 物å“æ’¿å–(itempickup) + Description: å…許或ç¦æ­¢ç‰©å“æ’¿å– Info: - - '&e用法 : &6/res set/pset <領地> itempickup true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> itempickup true/false/remove' jump2: - Translated: å…©æ ¼é«˜è·³èº ï¼ˆjump2) - Description: å…許 或 ç¦æ­¢è·³èºå…©æ ¼é«˜ + Translated: 兩格高跳èºï¼ˆjump2) + Description: å…許或ç¦æ­¢è·³èºå…©æ ¼é«˜ Info: - - '&e用法 : &6/res set <領地> jump2 true/false/remove' + - '&e用法:&6/res set <領地å稱> jump2 true/false/remove' jump3: - Translated: ä¸‰æ ¼é«˜è·³èº ï¼ˆjump3) - Description: å…許 或 ç¦æ­¢è·³èºä¸‰æ ¼é«˜ + Translated: 三格高跳èºï¼ˆjump3) + Description: å…許或ç¦æ­¢è·³èºä¸‰æ ¼é«˜ Info: - - '&e用法 : &6/res set <領地> jump3 true/false/remove' + - '&e用法:&6/res set <領地å稱> jump3 true/false/remove' keepinv: - Translated: é˜²å™´è£ ï¼ˆkeepinv) - Description: å…許 或 ç¦æ­¢åœ¨çŽ©å®¶æ­»å¾Œä¿æŒç‰©å“欄狀態 + Translated: 防噴è£ï¼ˆkeepinv) + Description: å…許或ç¦æ­¢åœ¨çŽ©å®¶æ­»å¾Œä¿æŒç‰©å“欄狀態 Info: - - '&e用法 : &6/res set <領地> keepinv true/false/remove' + - '&e用法:&6/res set <領地å稱> keepinv true/false/remove' keepexp: - Translated: 防噴經驗 (keepexp) - Description: å…許 或 ç¦æ­¢åœ¨çŽ©å®¶æ­»å¾Œä¿æŒç¶“驗值狀態 + Translated: 防噴經驗(keepexp) + Description: å…許或ç¦æ­¢åœ¨çŽ©å®¶æ­»å¾Œä¿æŒç¶“驗值狀態 Info: - - '&e用法 : &6/res set <領地> keepexp true/false/remove' + - '&e用法:&6/res set <領地å稱> keepexp true/false/remove' lavaflow: - Translated: 內部岩漿æµå‹• (lavaflow - Description: å…許 或 ç¦æ­¢å²©æ¼¿æµå‹•ï¼ˆå°‡è¦†è“‹ flow 權é™ï¼‰ + Translated: 內部岩漿æµå‹•ï¼ˆlavaflow) + Description: å…許或ç¦æ­¢å²©æ¼¿æµå‹•ï¼ˆå°‡è¦†è“‹ flow 權é™ï¼‰ Info: - - '&e用法 : &6/res set <領地> lavaflow true/false/remove' + - '&e用法:&6/res set <領地å稱> lavaflow true/false/remove' leash: - Translated: 使用拴繩 (leash) - Description: å…許 或 ç¦æ­¢å°å‹•ç‰©ä½¿ç”¨æ‹´ç¹© + Translated: 使用拴繩(leash) + Description: å…許或ç¦æ­¢å°å‹•ç‰©ä½¿ç”¨æ‹´ç¹© Info: - - '&e用法 : &6/res set/pset <領地> leash true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> leash true/false/remove' lever: - Translated: 使用控制桿 (lever) - Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŽ§åˆ¶æ¡¿ + Translated: 使用控制桿(lever) + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŽ§åˆ¶æ¡¿ Info: - - '&e用法 : &6/res set/pset <領地> lever true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> lever true/false/remove' mobexpdrop: - Translated: 生物死後掉è½ç¶“é©— (mobexpdrop) - Description: å…許 或 ç¦æ­¢ç”Ÿç‰©åœ¨æ­»å¾ŒæŽ‰è½ç¶“é©— + Translated: 生物死後掉è½ç¶“驗(mobexpdrop) + Description: å…許或ç¦æ­¢ç”Ÿç‰©åœ¨æ­»å¾ŒæŽ‰è½ç¶“é©— Info: - - '&e用法 : &6/res set <領地> mobexpdrop true/false/remove' + - '&e用法:&6/res set <領地å稱> mobexpdrop true/false/remove' mobitemdrop: - Translated: 生物死後掉è½ç‰©å“ (mobitemdrop) - Description: å…許 或 ç¦æ­¢ç”Ÿç‰©åœ¨æ­»å¾ŒæŽ‰è½ç‰©å“ + Translated: 生物死後掉è½ç‰©å“(mobitemdrop) + Description: å…許或ç¦æ­¢ç”Ÿç‰©åœ¨æ­»å¾ŒæŽ‰è½ç‰©å“ Info: - - '&e用法 : &6/res set <領地> mobitemdrop true/false/remove' + - '&e用法:&6/res set <領地å稱> mobitemdrop true/false/remove' mobkilling: - Translated: 擊殺生物 (mobkilling) - Description: å…許 或 ç¦æ­¢æ“Šæ®ºç”Ÿç‰© + Translated: 擊殺生物(mobkilling) + Description: å…許或ç¦æ­¢æ“Šæ®ºç”Ÿç‰© Info: - - '&e用法 : &6/res set/pset <領地> mobkilling true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> mobkilling true/false/remove' monsters: - Translated: 生æˆæ€ªç‰© (monsters) - Description: å…許 或 ç¦æ­¢ç”Ÿæˆæ€ªç‰© + Translated: 生æˆæ€ªç‰©ï¼ˆmonsters) + Description: å…許或ç¦æ­¢ç”Ÿæˆæ€ªç‰© Info: - - '&e用法 : &6/res set <領地> monsters true/false/remove' + - '&e用法:&6/res set <領地å稱> monsters true/false/remove' move: - Translated: 玩家移動 (move) - Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ç§»å‹• + Translated: 玩家移動(move) + Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§ç§»å‹• Info: - - '&e用法 : &6/res set/pset <領地> move true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> move true/false/remove' nametag: - Translated: 命å (nametag) - Description: å…許 或 ç¦æ­¢ä½¿ç”¨å‘½å牌 + Translated: 命å(nametag) + Description: å…許或ç¦æ­¢ä½¿ç”¨å‘½å牌 Info: - - '&e用法 : &6/res set/pset <領地> nametag true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> nametag true/false/remove' nanimals: - Translated: åŽŸç‰ˆç”Ÿç‰©ç”Ÿæˆ ï¼ˆnanimals) - Description: å…許 或 ç¦æ­¢åŽŸç‰ˆç”Ÿç‰©ç”Ÿæˆ + Translated: 原版生物生æˆï¼ˆnanimals) + Description: å…許或ç¦æ­¢åŽŸç‰ˆç”Ÿç‰©ç”Ÿæˆ Info: - - '&e用法 : &6/res set <領地> nanimals true/false/remove' + - '&e用法:&6/res set <領地å稱> nanimals true/false/remove' nmonsters: - Translated: åŽŸç‰ˆæ€ªç‰©ç”Ÿæˆ ï¼ˆnmonsters) - Description: å…許 或 ç¦æ­¢åŽŸç‰ˆæ€ªç‰©ç”Ÿæˆ + Translated: 原版怪物生æˆï¼ˆnmonsters) + Description: å…許或ç¦æ­¢åŽŸç‰ˆæ€ªç‰©ç”Ÿæˆ Info: - - '&e用法 : &6/res set <領地> nmonsters true/false/remove' + - '&e用法:&6/res set <領地å稱> nmonsters true/false/remove' night: - Translated: 夜晚 (night) + Translated: 夜晚(night) Description: 設定領地時間為夜晚 Info: - - '&e用法 : &6/res set <領地> night true/false/remove' + - '&e用法:&6/res set <領地å稱> night true/false/remove' nofly: - Translated: 使用飛行 (nofly) - Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§é£›è¡Œ + Translated: 使用飛行(nofly) + Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§é£›è¡Œ Info: - - '&e用法 : &6/res set/pset <領地> nofly true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> nofly true/false/remove' fly: - Translated: 自動飛行 (fly) - Description: 自動開啟 或 關閉領地內的玩家飛行 + Translated: 自動飛行(fly) + Description: 自動開啟或關閉領地內的玩家飛行 Info: - - '&e用法 : &6/res set/pset <領地> fly true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> fly true/false/remove' nomobs: - Translated: 防止怪物進入 (nomobs) + Translated: 防止怪物進入(nomobs) Description: 防止怪物進入領地,需è¦åœ¨é…置檔案開啟 AutoMobRemoval Info: - - '&e用法 : &6/res set <領地> nomobs true/false/remove' + - '&e用法:&6/res set <領地å稱> nomobs true/false/remove' note: - Translated: 使用音階盒 (note) - Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³éšŽç›’ + Translated: 使用音階盒(note) + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³éšŽç›’ Info: - - '&e用法 : &6/res set/pset <領地> note true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> note true/false/remove' nodurability: - Translated: 防止物å“é™ä½Žè€ä¹…值 (nodurability) - Description: 防止物å“é™ä½Žè€ä¹…值 + Translated: 防止物å“é™ä½Žè€ä¹…度(nodurability) + Description: 防止物å“é™ä½Žè€ä¹…度 Info: - - '&e用法 : &6/res set <領地> nodurability true/false/remove' + - '&e用法:&6/res set <領地å稱> nodurability true/false/remove' overridepvp: - Translated: 覆蓋戰鬥 (overridepvp) + Translated: 覆蓋戰鬥(overridepvp) Description: 覆蓋任何æ’件的戰鬥ä¿è­· Info: - - '&e用法 : &6/res set <領地> overridepvp true/false/remove' + - '&e用法:&6/res set <領地å稱> overridepvp true/false/remove' pressure: - Translated: ä½¿ç”¨å£“åŠ›æ¿ ï¼ˆpressure) - Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨å£“åŠ›æ¿ + Translated: 使用壓力æ¿ï¼ˆpressure) + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å£“åŠ›æ¿ Info: - - '&e用法 : &6/res set/pset <領地> pressure true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> pressure true/false/remove' piston: - Translated: 使用活塞 (piston) - Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨æ´»å¡žæŽ¨æˆ–拉 + Translated: 使用活塞(piston) + Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨æ´»å¡žæŽ¨æˆ–拉 Info: - - '&e用法 : &6/res set <領地> piston true/false/remove' + - '&e用法:&6/res set <領地å稱> piston true/false/remove' pistonprotection: - Translated: 防止外部活塞 (pistonprotection) - Description: å…許 或 ç¦æ­¢æ´»å¡žå¾žé ˜åœ°å¤–推或拉領地內的方塊 + Translated: 防止外部活塞(pistonprotection) + Description: å…許或ç¦æ­¢æ´»å¡žå¾žé ˜åœ°å¤–推或拉領地內的方塊 Info: - - '&e用法 : &6/res set <領地> pistonprotection true/false/remove' + - '&e用法:&6/res set <領地å稱> pistonprotection true/false/remove' place: - Translated: 放置 (place) - Description: å…許 或 ç¦æ­¢æ”¾ç½®æ–¹å¡Šï¼ˆå°‡è¦†è“‹ build 權é™ï¼‰ + Translated: 放置(place) + Description: å…許或ç¦æ­¢æ”¾ç½®æ–¹å¡Šï¼ˆå°‡è¦†è“‹ build 權é™ï¼‰ Info: - - '&e用法 : &6/res set/pset <領地> place true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> place true/false/remove' pvp: - Translated: 戰鬥 (pvp) - Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§æˆ°é¬¥ + Translated: 戰鬥(pvp) + Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§æˆ°é¬¥ Info: - - '&e用法 : &6/res set <領地> pvp true/false/remove' + - '&e用法:&6/res set <領地å稱> pvp true/false/remove' rain: - Translated: 下雨 (rain) + Translated: 下雨(rain) Description: 設定領地天氣為雨天 Info: - - '&e用法 : &6/res set <領地> rain true/false/remove' + - '&e用法:&6/res set <領地å稱> rain true/false/remove' respawn: - Translated: 自動é‡ç”Ÿ (respawn) + Translated: 自動é‡ç”Ÿï¼ˆrespawn) Description: 自動é‡ç”ŸçŽ©å®¶ Info: - - '&e用法 : &6/res set <領地> respawn true/false/remove' + - '&e用法:&6/res set <領地å稱> respawn true/false/remove' riding: - Translated: 騎乘 (riding) - Description: å…許 或 ç¦æ­¢é¨Žä¹˜ç”Ÿç‰© + Translated: 騎乘(riding) + Description: å…許或ç¦æ­¢é¨Žä¹˜ç”Ÿç‰© Info: - - '&e用法 : &6/res set/pset <領地> riding true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> riding true/false/remove' shoot: - Translated: 使用射擊 (shoot) - Description: å…許 或 ç¦æ­¢åœ¨å€åŸŸå…§å°„æ“Š + Translated: 使用射擊(shoot) + Description: å…許或ç¦æ­¢åœ¨å€åŸŸå…§å°„æ“Š Info: - - '&e用法 : &6/res set <領地> shoot true/false/remove' + - '&e用法:&6/res set <領地å稱> shoot true/false/remove' sun: - Translated: 晴天 (sun) + Translated: 晴天(sun) Description: 設定領地天氣為晴天 Info: - - '&e用法 : &6/res set <領地> sun true/false/remove' + - '&e用法:&6/res set <領地å稱> sun true/false/remove' shop: - Translated: 商店 (shop) + Translated: 商店(shop) Description: 新增領地到指定的商店列表 Info: - - '&e用法 : &6/res set <領地> shop true/false/remove' + - '&e用法:&6/res set <領地å稱> shop true/false/remove' snowtrail: - Translated: ç©é›ª (snowtrail) - Description: å…許 或 ç¦æ­¢é›ªäººç”Ÿæˆç©é›ªè·¯å¾‘ + Translated: ç©é›ªï¼ˆsnowtrail) + Description: å…許或ç¦æ­¢é›ªäººç”Ÿæˆç©é›ªè·¯å¾‘ Info: - - '&e用法 : &6/res set <領地> snowtrail true/false/remove' + - '&e用法:&6/res set <領地å稱> snowtrail true/false/remove' spread: - Translated: 方塊擴散 (spread) - Description: å…許 或 ç¦æ­¢è‰åœ°æˆ–èŒçµ²åœŸæ“´æ•£ + Translated: 方塊擴散(spread) + Description: å…許或ç¦æ­¢è‰åœ°æˆ–èŒçµ²åœŸæ“´æ•£ Info: - - '&e用法 : &6/res set <領地> spread true/false/remove' + - '&e用法:&6/res set <領地å稱> spread true/false/remove' snowball: - Translated: 雪çƒæ“Šé€€ (snowball) - Description: å…許 或 ç¦æ­¢é›ªçƒæ“Šé€€ + Translated: 雪çƒæ“Šé€€ï¼ˆsnowball) + Description: å…許或ç¦æ­¢é›ªçƒæ“Šé€€ Info: - - '&e用法 : &6/res set <領地> snowball true/false/remove' + - '&e用法:&6/res set <領地å稱> snowball true/false/remove' sanimals: - Translated: 使用生怪磚或生怪蛋生æˆå‹•ç‰© (sanimals) - Description: å…許 或 ç¦æ­¢ç”Ÿæ€ªç£šæˆ–生怪蛋生æˆå‹•ç‰© + Translated: 使用生怪磚或生怪蛋生æˆå‹•ç‰©ï¼ˆsanimals) + Description: å…許或ç¦æ­¢ç”Ÿæ€ªç£šæˆ–生怪蛋生æˆå‹•ç‰© Info: - - '&e用法 : &6/res set <領地> sanimals true/false/remove' + - '&e用法:&6/res set <領地å稱> sanimals true/false/remove' shear: - Translated: 剪羊毛 (shear) - Description: å…許 或 ç¦æ­¢å‰ªç¾Šæ¯› + Translated: 剪羊毛(shear) + Description: å…許或ç¦æ­¢å‰ªç¾Šæ¯› Info: - - '&e用法 : &6/res set/pset <領地> shear true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> shear true/false/remove' smonsters: - Translated: 使用生怪磚或生怪蛋生æˆæ€ªç‰© (smonsters) - Description: å…許 或 ç¦æ­¢ç”Ÿæ€ªç£šæˆ–生怪蛋生æˆæ€ªç‰© + Translated: 使用生怪磚或生怪蛋生æˆæ€ªç‰©ï¼ˆsmonsters) + Description: å…許或ç¦æ­¢ç”Ÿæ€ªç£šæˆ–生怪蛋生æˆæ€ªç‰© Info: - - '&e用法 : &6/res set <領地> smonsters true/false/remove' + - '&e用法:&6/res set <領地å稱> smonsters true/false/remove' subzone: - Translated: 建立å­å€åŸŸ (subzone) - Description: å…許 或 ç¦æ­¢çŽ©å®¶å»ºç«‹å­å€åŸŸé ˜åœ° + Translated: 建立å­å€åŸŸï¼ˆsubzone) + Description: å…許或ç¦æ­¢çŽ©å®¶å»ºç«‹å­å€åŸŸé ˜åœ° Info: - - '&e用法 : &6/res set/pset <領地> subzone true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> subzone true/false/remove' title: - Translated: åŠ å…¥æˆ–é›¢é–‹è¨Šæ¯ ï¼ˆtitle) + Translated: 加入或離開訊æ¯ï¼ˆtitle) Description: 顯示 或 éš±è—é ˜åœ°çš„åŠ å…¥è¨Šæ¯ Info: - - '&e用法 : &6/res set <領地> title true/false/remove' + - '&e用法:&6/res set <領地å稱> title true/false/remove' table: - Translated: ä½¿ç”¨å·¥ä½œå° ï¼ˆtable) - Description: å…許 或 ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° + Translated: 使用工作å°ï¼ˆtable) + Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° Info: - - '&e用法 : &6/res set/pset <領地> table true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> table true/false/remove' tnt: - Translated: TNT 爆炸 (tnt) - Description: å…許 或 ç¦æ­¢ TNT 爆炸 + Translated: TNT 爆炸(tnt) + Description: å…許或ç¦æ­¢ TNT 爆炸 Info: - - '&e用法 : &6/res set <領地> tnt true/false/remove' + - '&e用法:&6/res set <領地å稱> tnt true/false/remove' tp: - Translated: å‚³é€ ï¼ˆtp) - Description: å…許 或 ç¦æ­¢å‚³é€åˆ°é ˜åœ° + Translated: 傳é€ï¼ˆtp) + Description: å…許或ç¦æ­¢å‚³é€åˆ°é ˜åœ° Info: - - '&e用法 : &6/res set/pset <領地> tp true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> tp true/false/remove' trade: - Translated: æ‘民交易 (trade) - Description: å…許 或 ç¦æ­¢åœ¨é ˜åœ°å…§èˆ‡æ‘民交易 + Translated: æ‘民交易(trade) + Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§èˆ‡æ‘民交易 Info: - - '&e用法 : &6/res set/pset <領地> trade true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> trade true/false/remove' trample: - Translated: 踩è¸ç ´å£žè€•åœ° (trample) - Description: å…許 或 ç¦æ­¢è¸©è¸ç ´å£žè€•åœ° + Translated: 踩è¸ç ´å£žè€•åœ°ï¼ˆtrample) + Description: å…許或ç¦æ­¢è¸©è¸ç ´å£žè€•åœ° Info: - - '&e用法 : &6/res set <領地> trample true/false/remove' + - '&e用法:&6/res set <領地å稱> trample true/false/remove' use: - Translated: 使用 (use) - Description: å…許 或 ç¦æ­¢ä½¿ç”¨é–€ã€æŽ§åˆ¶æ¡¿ã€æŒ‰éˆ•â€¦â€¦ + Translated: 使用(use) + Description: å…許或ç¦æ­¢ä½¿ç”¨é–€ã€æŽ§åˆ¶æ¡¿ã€æŒ‰éˆ•â€¦â€¦ Info: - - '&e用法 : &6/res set/pset <領地> use true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> use true/false/remove' vehicledestroy: - Translated: 破壞載具 (vehicledestroy) - Description: å…許 或 ç¦æ­¢ç ´å£žè¼‰å…· + Translated: 破壞載具(vehicledestroy) + Description: å…許或ç¦æ­¢ç ´å£žè¼‰å…· Info: - - '&e用法 : &6/res set/pset <領地> vehicledestroy true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> vehicledestroy true/false/remove' witherspawn: - Translated: 生æˆå‡‹é›¶æ€ª (witherspawn) - Description: å…許 或 ç¦æ­¢ç”Ÿæˆå‡‹é›¶æ€ª + Translated: 生æˆå‡‹é›¶æ€ªï¼ˆwitherspawn) + Description: å…許或ç¦æ­¢ç”Ÿæˆå‡‹é›¶æ€ª Info: - - '&e用法 : &6/res set <領地> witherspawn true/false/remove' + - '&e用法:&6/res set <領地å稱> witherspawn true/false/remove' phantomspawn: - Translated: 生æˆå¤œé­… (phantomspawn) - Description: å…許 或 ç¦æ­¢ç”Ÿæˆå¤œé­… + Translated: 生æˆå¤œé­…(phantomspawn) + Description: å…許或ç¦æ­¢ç”Ÿæˆå¤œé­… Info: - - '&e用法 : &6/res set <領地> phantomspawn true/false/remove' + - '&e用法:&6/res set <領地å稱> phantomspawn true/false/remove' witherdamage: - Translated: 凋零怪傷害 (witherdamage) - Description: å…許 或 ç¦æ­¢å‡‹é›¶æ€ªå‚·å®³ + Translated: 凋零怪傷害(witherdamage) + Description: å…許或ç¦æ­¢å‡‹é›¶æ€ªå‚·å®³ Info: - - '&e用法 : &6/res set <領地> witherdamage true/false/remove' + - '&e用法:&6/res set <領地å稱> witherdamage true/false/remove' witherdestruction: - Translated: 凋零怪破壞方塊 (witherdestruction) - Description: å…許 或 ç¦æ­¢å‡‹é›¶æ€ªç ´å£žæ–¹å¡Š + Translated: 凋零怪破壞方塊(witherdestruction) + Description: å…許或ç¦æ­¢å‡‹é›¶æ€ªç ´å£žæ–¹å¡Š Info: - - '&e用法 : &6/res set <領地> witherdestruction true/false/remove' + - '&e用法:&6/res set <領地å稱> witherdestruction true/false/remove' waterflow: - Translated: æ°´æµå‹• (waterflow) - Description: å…許 或 ç¦æ­¢æ°´æµå‹•ï¼ˆå°‡è¦†è“‹ flow 權é™ï¼‰ + Translated: æ°´æµå‹•ï¼ˆwaterflow) + Description: å…許或ç¦æ­¢æ°´æµå‹•ï¼ˆå°‡è¦†è“‹ flow 權é™ï¼‰ Info: - - '&e用法 : &6/res set <領地> waterflow true/false/remove' + - '&e用法:&6/res set <領地å稱> waterflow true/false/remove' wspeed1: - Translated: 減速 (wspeed1) + Translated: 減速(wspeed1) Description: 減慢在領地內的玩家行走速度 Info: - - '&eUsage: &6/res set <領地> wspeed1 true/false/remove' + - '&eUsage: &6/res set <領地å稱> wspeed1 true/false/remove' wspeed2: - Translated: 加速 (wspeed2) + Translated: 加速(wspeed2) Description: 加快在領地內的玩家行走速度 Info: - - '&e用法 : &6/res set <領地> wspeed2 true/false/remove' + - '&e用法:&6/res set <領地å稱> wspeed2 true/false/remove' remove: Info: - - '&e用法 : &6/res remove &6[領地å稱]' + - '&e用法:&6/res remove [領地å稱]' Description: 移除領地 signupdate: Info: - - '&e用法 : &6/res signupdate' + - '&e用法:&6/res signupdate' Description: 更新領地告示牌 current: Info: - - '&e用法 : &6/res current' + - '&e用法:&6/res current' Description: 顯示你目å‰æ‰€åœ¨çš„領地 reload: Info: - - '&e用法 : &6/res reload &6[config/lang/groups/flags]' - Description: é‡æ–°è¼‰å…¥èªžè¨€/設定檔案 + - '&e用法:&6/res reload [config/lang/groups/flags]' + Description: é‡æ–°è¼‰å…¥èªžè¨€æˆ–設定檔案 leaveraid: Info: - - '&e用法 : &6/res leaveraid' - Description: 離開領地çªè¥² + - '&e用法:&6/res leaveraid' + Description: 離開領地侵略 setowner: Info: - - '&e用法 : &6/resadmin setowner &6[領地å稱] [玩家]' - Description: 改變領地æ“有者 + - '&e用法:&6/resadmin setowner [領地å稱] [玩家å稱] (-keepflags)' + Description: 更改領地æ“有者 defend: Info: - - '&e用法 : &6/res defend [領地å稱] [玩家å稱]' - Description: 加入領地防守 + - '&e用法:&6/res defend [領地å稱] (玩家å稱)' + Description: 加入領地侵略防守方 attack: - Description: 開始領地çªè¥² + Description: 開始領地侵略 Info: - - '&e用法 : &6/res attack [領地å稱]' + - '&e用法:&6/res attack [領地å稱]' unstuck: Info: - - '&e用法 : &6/res unstuck' - Description: 傳é€è‡³é ˜åœ°å¤– + - '&e用法:&6/res unstuck' + Description: 傳é€åˆ°é ˜åœ°å¤– subzone: Info: - - '&e用法 : &6/res subzone &6[領地å稱] [å­å€åŸŸå]' - - 如果領地å稱被忽略,將嘗試使用原有的領地å稱 + - '&e用法:&6/res subzone <領地å稱> [å­å€åŸŸå稱]' + - '&e如果領地å稱被忽略,將嘗試使用原有的領地å稱' Description: 在領地中建立å­å€åŸŸ removeworld: Info: - - '&e用法 : &6/res removeworld &6[世界å]' + - '&e用法:&6/res removeworld [世界å稱]' - '&e該指令åªèƒ½åœ¨æŽ§åˆ¶å°åŸ·è¡Œ' Description: 移除指定世界中的所有領地 limits: Info: - - '&e用法 : &6/res limits' + - '&e用法:&6/res limits (玩家å稱)' - '&e顯示你在建立和管ç†é ˜åœ°æ–¹é¢çš„å„種é™åˆ¶' Description: 顯示你的領地é™åˆ¶ set: Info: - - '&e用法 : &6/res set &6[領地å稱] [權é™] [t/f/r]' - - '&e輸入 /res flags ? 查看權é™åˆ—表' - - '&e這些權é™é©ç”¨æ‰€æœ‰çš„玩家' - Description: 為領地設定é è¨­æ¬Šé™ + - '&e用法:&6/res set <領地å稱> [權é™] [true/false/remove]' + - '&e使用 &6/res flags ? &e查看權é™åˆ—表' + - '&e這些權é™é©ç”¨æ‰€æœ‰çš„玩家(詳見 &6/res pset ?&e)' + Description: ç‚ºé ˜åœ°è¨­å®šé€šç”¨æ¬Šé™ clearflags: Info: - - '&e用法 : &6/res clearflags &6[領地å稱]' + - '&e用法:&6/res clearflags <領地å稱>' Description: ç§»é™¤é ˜åœ°æ‰€æœ‰æ¬Šé™ message: Info: - - '&e用法 : &6/res message &6[領地å稱] [enter/leave] [訊æ¯]' - - '&e設定領地加入/離開的訊æ¯' - - '&e用法 : &6/res message &6[領地å稱] &6remove &6[enter/leave]' - - '&e移除加入/離開的訊æ¯' - Description: 管ç†é ˜åœ°åŠ å…¥/é›¢é–‹è¨Šæ¯ + - '&e用法:&6/res message <領地å稱> [enter/leave] [訊æ¯]' + - '&e設定領地加入或離開的訊æ¯' + - '&e用法:&6/res message <領地å稱> remove [enter/leave]' + - '&e移除加入或離開的訊æ¯' + Description: 管ç†é ˜åœ°åŠ å…¥æˆ–é›¢é–‹è¨Šæ¯ command: Info: - - '&e用法 : &6/res command &6[領地å稱] [allow/block/list] [指令]' - - '&e顯示列表 新增或移除領地中å…許或ç¦æ­¢çš„指令' - - '&e使用 _ 包å«å¤šå€‹è®Šé‡çš„指令' + - '&e用法:&6/res command <領地å稱> <指令>' + - '&e顯示列表,新增或移除領地中å…許或ç¦æ­¢çš„指令' + - '&e使用「_ã€å¯åŒ…å«å¤šå€‹è®Šé‡çš„指令' Description: 管ç†å…許或ç¦æ­¢çš„領地指令 confirm: Description: 確èªç§»é™¤é ˜åœ° Info: - - '&e用法 : &6/res confirm' + - '&e用法:&6/res confirm' - '&e確èªç§»é™¤é ˜åœ°' resadmin: Info: - - '&e用法 : &6/res resadmin &6[on/off]' + - '&e用法:&6/res resadmin [on/off]' Description: 啟用或ç¦ç”¨é ˜åœ°ç®¡ç†å“¡ tpset: Info: - - '&e用法 : &6/res tpset' - - '&e把你站的ä½ç½®è¨­å®šç‚ºé ˜åœ°çš„傳é€é»ž' + - '&e用法:&6/res tpset' + - '&e把你站的ä½ç½®è¨­å®šç‚ºé ˜åœ°çš„傳é€é»žï¼Œ' + - '&eå‰æ是你一定è¦åœ¨é ˜åœ°å…§ï¼Œ' + - '&e且你還一定è¦æ˜¯é ˜åœ°æ“有者或者æ“有管ç†å“¡æ¬Šé™' Description: 設定傳é€é»ž tpconfirm: Info: - - '&e用法 : &6/res tpconfirm' - - '&e強制傳é€åˆ°é ˜åœ°' + - '&e用法:&6/res tpconfirm' + - '&eå³ä½¿å‚³é€é»žä¸å®‰å…¨ï¼Œä»ç„¶å¼·åˆ¶å‚³é€åˆ°é ˜åœ°' Description: 忽略ä¸å®‰å…¨å‚³é€è­¦å‘Š removeall: Info: - - '&e用法 : &6/res removeall &6[æ“有者]' + - '&e用法:&6/res removeall [æ“有者]' - '&e移除自己的所有領地' + - '&e如果你å°é™¤ä½ è‡ªå·±ä»¥å¤–çš„ä»»ä½•äººä½¿ç”¨å®ƒï¼Œå‰‡éœ€è¦ /resadmin' Description: 移除指定玩家的所有領地 material: Info: - - '&e用法 : &6/res material &6[方塊 ID]' + - '&e用法:&6/res material [ç‰©å“ ID]' Description: 檢查物å“是å¦å­˜åœ¨å…¶ ID kick: Info: - - '&e用法 : &6/res kick &6[玩家]' + - '&e用法:&6/res kick &6<玩家å稱>' - '&e你必須是領地æ“有者' - '&e且玩家必須在線上' Description: 踢出指定玩家 sublist: Info: - - '&e用法 : &6/res sublist &6[領地å稱] [é æ•¸]' + - '&e用法:&6/res sublist <領地å稱> <é æ•¸>' - '&e列出所有å­å€åŸŸ' Description: 列出所有å­å€åŸŸ rename: Info: - - '&e用法 : &6/res rename &6[領地å稱] [æ–°å稱]' - - '&e你必須是æ“有者或管ç†å“¡æ‰èƒ½é€²è¡Œæ­¤é …æ“作' - - '&eæ–°å稱ä¸èƒ½èˆ‡ç¾æœ‰é ˜åœ°é‡è¤‡' + - '&e用法:&6/res rename [舊領地å稱] [新領地å稱]' + - '&e你必須是æ“有者或管ç†å“¡æ‰èƒ½é€²è¡Œè©²é …æ“作,' + - '&eæ–°å稱ä¸èƒ½èˆ‡ç¾æœ‰é ˜åœ°å稱é‡è¤‡' Description: é‡æ–°å‘½å領地 setallfor: Info: - - '&e用法 : &6/res setallfor &6[玩家] [權é™] [t/f/r]' + - '&e用法:&6/res setallfor [玩家å稱] [權é™] [true/false/remove]' Description: åœ¨æŒ‡å®šçŽ©å®¶çš„æ‰€æœ‰é ˜åœ°ä¸Šè¨­å®šé€šç”¨æ¬Šé™ lease: Info: - - '&e用法 : &6/res lease &6[renew/cost] [領地å稱]' + - '&e用法:&6/res lease [renew/cost] [領地å稱]' - '&6/res lease cost &e顯示續租領地的花費' - '&6/res lease renew &e將會續租指定的領地' Description: 管ç†é ˜åœ°ç§Ÿç´„ @@ -1703,45 +1723,45 @@ CommandHelp: set: Description: 設定租約時間 Info: - - '&e用法 : &6/resadmin lease set &6[領地å稱] [#days/infinite]' + - '&e用法:&6/resadmin lease set [領地å稱] [#days/infinite]' - '&e將租約時間設定為特定天數或無é™åˆ¶' renew: - Description: 續期租約時間 + Description: 續租租約時間 Info: - - '&e用法 : &6/resadmin lease renew &6[領地å稱]' - - '&e續期目å‰æˆ–指定的領地租約' + - '&e用法:&6/resadmin lease renew <領地å稱>' + - '&e續租目å‰æˆ–指定的領地租約' list: Description: 顯示目å‰ä½æ‰€çš„租約列表 Info: - - '&e用法 : &6/resadmin lease list &6[領地å稱] [é æ•¸]' - - '&e顯示出目å‰æ‰€æœ‰å­å€åŸŸçš„租約時間' + - '&e用法:&6/resadmin lease list <領地å稱> <é æ•¸>' + - '&e顯示目å‰æ‰€æœ‰å­å€åŸŸçš„租約時間' expires: - Description: 租約éŽæœŸæ™‚é–“ + Description: 租約到期時間 Info: - - '&e用法 : &6/resadmin lease expires &6[領地å稱]' - - '&e顯示領地租約éŽæœŸçš„時間' + - '&e用法:&6/resadmin lease expires <領地å稱>' + - '&e顯示領地租約到期的時間' cost: Description: 顯示續租花費 Info: - - '&e用法 : &6/resadmin lease cost &6[領地å稱]' + - '&e用法:&6/resadmin lease cost <領地å稱>' - '&e顯示續租領地所需的花費' tp: Info: - - '&e用法 : &6/res tp &6[領地å稱]' - - '&e傳é€åˆ°ä½ æŒ‡å®šçš„權é™ï¼Œä½ å¿…é ˆæ“有 tp 權é™æˆ–是æ“有者æ‰èƒ½åŸ·è¡Œæ­¤æ“作' - - 伺æœå™¨ç®¡ç†å“¡éœ€è¦çµ¦äºˆä½ è¨­å®šçš„æ¬Šé™ + - '&e用法:&6/res tp [領地å稱]' + - '&e傳é€åˆ°ä½ æŒ‡å®šçš„領地,你必須æ“有傳é€ï¼ˆtp)權é™æˆ–是æ“有者æ‰èƒ½åŸ·è¡Œè©²æ“作' + - '&e伺æœå™¨ç®¡ç†å“¡éœ€è¦çµ¦äºˆä½ è¨­å®šçš„權é™' Description: 傳é€åˆ°é ˜åœ° setall: Info: - - '&e用法 : &6/res setall &6[權é™] [t/f/r]' + - '&e用法:&6/res setall [權é™] [true/false/remove]' Description: åœ¨æ‰€æœ‰çš„é ˜åœ°ä¸Šè¨­å®šé€šç”¨æ¬Šé™ resreload: Description: é‡æ–°è¼‰å…¥é ˜åœ°æ’件 Info: - - '&e用法 : &6/resreload' + - '&e用法:&6/resreload' resload: Description: 載入領地存檔 Info: - - '&e用法 : &6/resload' - - '&e該指令ä¸å®‰å…¨ï¼Œå®ƒä¸æœƒå…ˆä¿å­˜é ˜åœ°ç‹€æ…‹' - - '&eå°é ˜åœ°åšå‡ºæ”¹è®Šå¾Œå†é‡æ–°è¼‰å…¥å­˜æª”' + - '&e用法:&6/resload' + - '&e該指令ä¸å®‰å…¨ï¼Œå®ƒä¸æœƒå…ˆä¿å­˜é ˜åœ°ç‹€æ…‹ï¼Œ' + - '&e請確定變更完領地後å†é‡æ–°è¼‰å…¥å­˜æª”' From 1f8d70960329af544961e4cc4d879d22cafd6b36 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 Aug 2022 12:09:42 +0300 Subject: [PATCH 0955/1142] Portal creation reason check fix for older servers --- .../bukkit/residence/listeners/ResidenceBlockListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 6c6497737..930fb5853 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -1019,7 +1019,7 @@ public void onBlockBurn(PortalCreateEvent event) { if (plugin.isDisabledWorldListener(world)) return; - if (!event.getReason().equals(CreateReason.NETHER_PAIR)) + if (!event.getReason().toString().equals("NETHER_PAIR")) return; Player player = null; From 849fe8969bab5176f39508d8f866e7f29e521093 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 Aug 2022 12:17:07 +0300 Subject: [PATCH 0956/1142] Bucket empty on residence border fix --- .../listeners/ResidencePlayerListener.java | 4166 +++++++++-------- 1 file changed, 2084 insertions(+), 2082 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index fa8049f05..10d72dd59 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -106,1742 +106,1744 @@ public class ResidencePlayerListener implements Listener { private Residence plugin; public ResidencePlayerListener(Residence plugin) { - currentRes = new HashMap(); - lastUpdate = new HashMap(); - lastOutsideLoc = new HashMap(); - stuckTeleportCounter = new HashMap(); - playerToggleChat.clear(); - minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval(); - chatenabled = plugin.getConfigManager().chatEnabled(); - for (Player player : Bukkit.getOnlinePlayers()) { - lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); - } - this.plugin = plugin; + currentRes = new HashMap(); + lastUpdate = new HashMap(); + lastOutsideLoc = new HashMap(); + stuckTeleportCounter = new HashMap(); + playerToggleChat.clear(); + minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval(); + chatenabled = plugin.getConfigManager().chatEnabled(); + for (Player player : Bukkit.getOnlinePlayers()) { + lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); + } + this.plugin = plugin; } public void reload() { - currentRes = new HashMap(); - lastUpdate = new HashMap(); - lastOutsideLoc = new HashMap(); - stuckTeleportCounter = new HashMap(); - playerToggleChat.clear(); - minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval(); - chatenabled = plugin.getConfigManager().chatEnabled(); - for (Player player : Bukkit.getOnlinePlayers()) { - lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); - } + currentRes = new HashMap(); + lastUpdate = new HashMap(); + lastOutsideLoc = new HashMap(); + stuckTeleportCounter = new HashMap(); + playerToggleChat.clear(); + minUpdateTime = plugin.getConfigManager().getMinMoveUpdateInterval(); + chatenabled = plugin.getConfigManager().chatEnabled(); + for (Player player : Bukkit.getOnlinePlayers()) { + lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); + } } @EventHandler public void onJump(PlayerMoveEvent event) { - if (!Flags.jump3.isGlobalyEnabled() && !Flags.jump2.isGlobalyEnabled()) - return; + if (!Flags.jump3.isGlobalyEnabled() && !Flags.jump2.isGlobalyEnabled()) + return; - Player player = event.getPlayer(); - if (player.isFlying()) - return; + Player player = event.getPlayer(); + if (player.isFlying()) + return; - if (event.getTo().getY() - event.getFrom().getY() != 0.41999998688697815D) - return; + if (event.getTo().getY() - event.getFrom().getY() != 0.41999998688697815D) + return; - if (player.hasMetadata("NPC")) - return; + if (player.hasMetadata("NPC")) + return; - FlagPermissions perms = plugin.getPermsByLoc(player.getLocation()); - if (Flags.jump2.isGlobalyEnabled() && perms.has(Flags.jump2, FlagCombo.OnlyTrue)) - player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.3))); - else if (Flags.jump3.isGlobalyEnabled() && perms.has(Flags.jump3, FlagCombo.OnlyTrue)) - player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.6))); + FlagPermissions perms = plugin.getPermsByLoc(player.getLocation()); + if (Flags.jump2.isGlobalyEnabled() && perms.has(Flags.jump2, FlagCombo.OnlyTrue)) + player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.3))); + else if (Flags.jump3.isGlobalyEnabled() && perms.has(Flags.jump3, FlagCombo.OnlyTrue)) + player.setVelocity(player.getVelocity().add(player.getVelocity().multiply(0.6))); } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { - if (!Flags.itempickup.isGlobalyEnabled()) - return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getItem().getLocation()); - if (res == null) - return; - if (event.getPlayer().hasMetadata("NPC")) - return; - if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itempickup, FlagCombo.OnlyFalse)) - return; - if (ResPerm.bypass_itempickup.hasPermission(event.getPlayer(), 10000L)) - return; - event.setCancelled(true); - event.getItem().setPickupDelay(plugin.getConfigManager().getItemPickUpDelay() * 20); + if (!Flags.itempickup.isGlobalyEnabled()) + return; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getItem().getLocation()); + if (res == null) + return; + if (event.getPlayer().hasMetadata("NPC")) + return; + if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itempickup, FlagCombo.OnlyFalse)) + return; + if (ResPerm.bypass_itempickup.hasPermission(event.getPlayer(), 10000L)) + return; + event.setCancelled(true); + event.getItem().setPickupDelay(plugin.getConfigManager().getItemPickUpDelay() * 20); } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerDropItemEvent(PlayerDropItemEvent event) { - if (!Flags.itemdrop.isGlobalyEnabled()) - return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation()); - if (res == null) - return; - if (event.getPlayer().hasMetadata("NPC")) - return; - if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itemdrop, FlagCombo.OnlyFalse)) - return; - event.setCancelled(true); + if (!Flags.itemdrop.isGlobalyEnabled()) + return; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation()); + if (res == null) + return; + if (event.getPlayer().hasMetadata("NPC")) + return; + if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itemdrop, FlagCombo.OnlyFalse)) + return; + event.setCancelled(true); } // Adding to chat prefix main residence name @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerGlobalChat(AsyncPlayerChatEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (!plugin.getConfigManager().isGlobalChatEnabled()) - return; - if (!plugin.getConfigManager().isGlobalChatSelfModify()) - return; - Player player = event.getPlayer(); + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (!plugin.getConfigManager().isGlobalChatEnabled()) + return; + if (!plugin.getConfigManager().isGlobalChatSelfModify()) + return; + Player player = event.getPlayer(); - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - if (rPlayer == null) - return; + if (rPlayer == null) + return; - if (rPlayer.getResList().isEmpty()) - return; + if (rPlayer.getResList().isEmpty()) + return; - ClaimedResidence res = rPlayer.getMainResidence(); + ClaimedResidence res = rPlayer.getMainResidence(); - if (res == null) - return; + if (res == null) + return; - String honorific = plugin.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); + String honorific = plugin.getConfigManager().getGlobalChatFormat().replace("%1", res.getTopParentName()); - String format = event.getFormat(); - format = format.replace("%1$s", honorific + "%1$s"); - event.setFormat(format); + String format = event.getFormat(); + format = format.replace("%1$s", honorific + "%1$s"); + event.setFormat(format); } // Changing chat prefix variable to residence name @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerChatGlobalLow(AsyncPlayerChatEvent event) { - procEvent(event); + procEvent(event); } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) private void processNEvent(AsyncPlayerChatEvent event) { - procEvent(event); + procEvent(event); } @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) private void processHEvent(AsyncPlayerChatEvent event) { - procEvent(event); + procEvent(event); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void processHHEvent(AsyncPlayerChatEvent event) { - procEvent(event); + procEvent(event); } private void procEvent(AsyncPlayerChatEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (!plugin.getConfigManager().isGlobalChatEnabled()) - return; - if (plugin.getConfigManager().isGlobalChatSelfModify()) - return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (!plugin.getConfigManager().isGlobalChatEnabled()) + return; + if (plugin.getConfigManager().isGlobalChatSelfModify()) + return; - String format = event.getFormat(); - if (!format.contains("{residence}")) - return; + String format = event.getFormat(); + if (!format.contains("{residence}")) + return; - Player player = event.getPlayer(); + Player player = event.getPlayer(); - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - if (rPlayer == null) - return; + if (rPlayer == null) + return; - ClaimedResidence res = rPlayer.getMainResidence(); + ClaimedResidence res = rPlayer.getMainResidence(); - String honorific = plugin.getConfigManager().getGlobalChatFormat().replace("%1", res == null ? "" : res.getTopParentName()); - if (honorific.equalsIgnoreCase(" ")) - honorific = ""; + String honorific = plugin.getConfigManager().getGlobalChatFormat().replace("%1", res == null ? "" : res.getTopParentName()); + if (honorific.equalsIgnoreCase(" ")) + honorific = ""; - format = format.replace("{residence}", honorific); - event.setFormat(format); + format = format.replace("{residence}", honorific); + event.setFormat(format); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceBackup(ResidenceFlagChangeEvent event) { - if (!event.getFlag().equalsIgnoreCase(Flags.backup.toString())) - return; - Player player = event.getPlayer(); - if (!plugin.getConfigManager().RestoreAfterRentEnds) - return; - if (!plugin.getConfigManager().SchematicsSaveOnFlagChange) - return; - if (plugin.getSchematicManager() == null) - return; - if (player != null && !ResPerm.backup.hasPermission(player)) - event.setCancelled(true); - else - plugin.getSchematicManager().save(event.getResidence()); + if (!event.getFlag().equalsIgnoreCase(Flags.backup.toString())) + return; + Player player = event.getPlayer(); + if (!plugin.getConfigManager().RestoreAfterRentEnds) + return; + if (!plugin.getConfigManager().SchematicsSaveOnFlagChange) + return; + if (plugin.getSchematicManager() == null) + return; + if (player != null && !ResPerm.backup.hasPermission(player)) + event.setCancelled(true); + else + plugin.getSchematicManager().save(event.getResidence()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceBackupRename(ResidenceRenameEvent event) { - if (plugin.getSchematicManager() == null) - return; - plugin.getSchematicManager().rename(event.getResidence(), event.getNewResidenceName()); + if (plugin.getSchematicManager() == null) + return; + plugin.getSchematicManager().rename(event.getResidence(), event.getNewResidenceName()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceDelete(ResidenceDeleteEvent event) { - if (plugin.getSchematicManager() == null) - return; - plugin.getSchematicManager().delete(event.getResidence()); + if (plugin.getSchematicManager() == null) + return; + plugin.getSchematicManager().delete(event.getResidence()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerFirstLogin(PlayerLoginEvent event) { - Player player = event.getPlayer(); - if (!player.hasPlayedBefore()) - ResidenceBlockListener.newPlayers.add(player.getUniqueId()); + Player player = event.getPlayer(); + if (!player.hasPlayedBefore()) + ResidenceBlockListener.newPlayers.add(player.getUniqueId()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerLogin(PlayerLoginEvent event) { - if (!plugin.getConfigManager().isRentInformOnEnding()) - return; - final Player player = event.getPlayer(); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (!player.isOnline()) - return; - List list = plugin.getRentManager().getRentedLandsList(player.getName()); - if (list.isEmpty()) - return; - for (String one : list) { - RentedLand rentedland = plugin.getRentManager().getRentedLand(one); - if (rentedland == null) - continue; - if (rentedland.AutoPay) - continue; - if (rentedland.endTime - System.currentTimeMillis() < plugin.getConfigManager().getRentInformBefore() * 60 * 24 * 7) { - plugin.msg(player, lm.Residence_EndingRent, one, GetTime.getTime(rentedland.endTime)); - } - } - } - }, plugin.getConfigManager().getRentInformDelay() * 20L); + if (!plugin.getConfigManager().isRentInformOnEnding()) + return; + final Player player = event.getPlayer(); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (!player.isOnline()) + return; + List list = plugin.getRentManager().getRentedLandsList(player.getName()); + if (list.isEmpty()) + return; + for (String one : list) { + RentedLand rentedland = plugin.getRentManager().getRentedLand(one); + if (rentedland == null) + continue; + if (rentedland.AutoPay) + continue; + if (rentedland.endTime - System.currentTimeMillis() < plugin.getConfigManager().getRentInformBefore() * 60 * 24 * 7) { + plugin.msg(player, lm.Residence_EndingRent, one, GetTime.getTime(rentedland.endTime)); + } + } + } + }, plugin.getConfigManager().getRentInformDelay() * 20L); } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onFishingRodUse(PlayerFishEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.hook.isGlobalyEnabled()) - return; - if (event == null) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (event.getCaught() == null) - return; - if (Utils.isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { - FlagPermissions perm = plugin.getPermsByLoc(event.getCaught().getLocation()); - ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getCaught().getLocation()); - if (perm.has(Flags.hook, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - if (res != null) - plugin.msg(player, lm.Residence_FlagDeny, Flags.hook, res.getName()); - } - } + // Disabling listener if flag disabled globally + if (!Flags.hook.isGlobalyEnabled()) + return; + if (event == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (event.getCaught() == null) + return; + if (Utils.isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { + FlagPermissions perm = plugin.getPermsByLoc(event.getCaught().getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getCaught().getLocation()); + if (perm.has(Flags.hook, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + if (res != null) + plugin.msg(player, lm.Residence_FlagDeny, Flags.hook, res.getName()); + } + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeDayNight(ResidenceFlagChangeEvent event) { - if (event.isCancelled()) - return; - - if (!event.getFlag().equalsIgnoreCase(Flags.day.toString()) && - !event.getFlag().equalsIgnoreCase(Flags.night.toString())) - return; - - switch (event.getNewState()) { - case NEITHER: - case FALSE: - for (Player one : event.getResidence().getPlayersInResidence()) - one.resetPlayerTime(); - break; - case INVALID: - break; - case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.day.toString())) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setPlayerTime(6000L, false); - if (event.getFlag().equalsIgnoreCase(Flags.night.toString())) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setPlayerTime(14000L, false); - break; - default: - break; - } + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.day.toString()) && + !event.getFlag().equalsIgnoreCase(Flags.night.toString())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + for (Player one : event.getResidence().getPlayersInResidence()) + one.resetPlayerTime(); + break; + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.day.toString())) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setPlayerTime(6000L, false); + if (event.getFlag().equalsIgnoreCase(Flags.night.toString())) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setPlayerTime(14000L, false); + break; + default: + break; + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeGlow(ResidenceFlagChangeEvent event) { - if (event.isCancelled()) - return; - - if (!event.getFlag().equalsIgnoreCase(Flags.glow.toString())) - return; - - switch (event.getNewState()) { - case NEITHER: - case FALSE: - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && event.getFlag().equalsIgnoreCase(Flags.glow.toString())) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setGlowing(false); - break; - case INVALID: - break; - case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.glow.toString()) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) - for (Player one : event.getResidence().getPlayersInResidence()) { - one.setGlowing(true); - } - break; - default: - break; - } + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.glow.toString())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1) && event.getFlag().equalsIgnoreCase(Flags.glow.toString())) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setGlowing(false); + break; + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.glow.toString()) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) + for (Player one : event.getResidence().getPlayersInResidence()) { + one.setGlowing(true); + } + break; + default: + break; + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceDeleteEvent(ResidenceDeleteEvent event) { - if (event.isCancelled()) - return; + if (event.isCancelled()) + return; - ClaimedResidence res = event.getResidence(); - if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setWalkSpeed(0.2F); + ClaimedResidence res = event.getResidence(); + if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(0.2F); - if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) - for (Player one : event.getResidence().getPlayersInResidence()) - one.resetPlayerWeather(); + if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + for (Player one : event.getResidence().getPlayersInResidence()) + one.resetPlayerWeather(); - if (event.getPlayer() != null && res.getPermissions().playerHas(event.getPlayer(), Flags.fly, FlagCombo.OnlyTrue)) - for (Player one : event.getResidence().getPlayersInResidence()) - fly(one, false); + if (event.getPlayer() != null && res.getPermissions().playerHas(event.getPlayer(), Flags.fly, FlagCombo.OnlyTrue)) + for (Player one : event.getResidence().getPlayersInResidence()) + fly(one, false); - if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setGlowing(false); + if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setGlowing(false); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerQuitEvent(PlayerQuitEvent event) { - Player player = event.getPlayer(); + Player player = event.getPlayer(); - plugin.getPermissionManager().removeFromCache(player); + plugin.getPermissionManager().removeFromCache(player); - checkSpecialFlags(player, null, plugin.getResidenceManager().getByLoc(player.getLocation())); + checkSpecialFlags(player, null, plugin.getResidenceManager().getByLoc(player.getLocation())); - plugin.getPlayerManager().getResidencePlayer(player).onQuit(); + plugin.getPlayerManager().getResidencePlayer(player).onQuit(); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeWSpeed(ResidenceFlagChangeEvent event) { - if (event.isCancelled()) - return; - - if (!event.getFlag().equalsIgnoreCase(Flags.wspeed1.toString()) && - !event.getFlag().equalsIgnoreCase(Flags.wspeed2.toString())) - return; - - switch (event.getNewState()) { - case NEITHER: - case FALSE: - for (Player one : event.getResidence().getPlayersInResidence()) - one.setWalkSpeed(0.2F); - break; - case INVALID: - break; - case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.wspeed1.toString())) { - for (Player one : event.getResidence().getPlayersInResidence()) - one.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); - if (event.getResidence().getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - event.getResidence().getPermissions().setFlag(Flags.wspeed2.toString(), FlagState.NEITHER); - } else if (event.getFlag().equalsIgnoreCase(Flags.wspeed2.toString())) { - for (Player one : event.getResidence().getPlayersInResidence()) - one.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); - if (event.getResidence().getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - event.getResidence().getPermissions().setFlag(Flags.wspeed1.toString(), FlagState.NEITHER); - } - break; - default: - break; - } + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.wspeed1.toString()) && + !event.getFlag().equalsIgnoreCase(Flags.wspeed2.toString())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(0.2F); + break; + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.wspeed1.toString())) { + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); + if (event.getResidence().getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + event.getResidence().getPermissions().setFlag(Flags.wspeed2.toString(), FlagState.NEITHER); + } else if (event.getFlag().equalsIgnoreCase(Flags.wspeed2.toString())) { + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); + if (event.getResidence().getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + event.getResidence().getPermissions().setFlag(Flags.wspeed1.toString(), FlagState.NEITHER); + } + break; + default: + break; + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeWSpeed(ResidenceOwnerChangeEvent event) { - if (event.isCancelled()) - return; + if (event.isCancelled()) + return; - ClaimedResidence res = event.getResidence(); - if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setWalkSpeed(0.2F); + ClaimedResidence res = event.getResidence(); + if (res.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setWalkSpeed(0.2F); - if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) - for (Player one : event.getResidence().getPlayersInResidence()) - one.resetPlayerWeather(); + if (res.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || res.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + for (Player one : event.getResidence().getPlayersInResidence()) + one.resetPlayerWeather(); - if (res.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) - for (Player one : event.getResidence().getPlayersInResidence()) - fly(one, false); + if (res.getPermissions().has(Flags.fly, FlagCombo.OnlyTrue)) + for (Player one : event.getResidence().getPlayersInResidence()) + fly(one, false); - if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) - for (Player one : event.getResidence().getPlayersInResidence()) - one.setGlowing(false); + if (res.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) + for (Player one : event.getResidence().getPlayersInResidence()) + one.setGlowing(false); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeJump(ResidenceFlagChangeEvent event) { - if (event.isCancelled()) - return; - - if (!event.getFlag().equalsIgnoreCase(Flags.jump2.toString()) && - !event.getFlag().equalsIgnoreCase(Flags.jump3.toString())) - return; - - switch (event.getNewState()) { - case NEITHER: - case FALSE: - case INVALID: - break; - case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.jump2.toString())) { - if (event.getResidence().getPermissions().has(Flags.jump3, FlagCombo.OnlyTrue)) - event.getResidence().getPermissions().setFlag(Flags.jump3.toString(), FlagState.NEITHER); - } else if (event.getFlag().equalsIgnoreCase(Flags.jump3.toString()) && event.getResidence().getPermissions().has(Flags.jump2, FlagCombo.OnlyTrue)) { - event.getResidence().getPermissions().setFlag(Flags.jump2.toString(), FlagState.NEITHER); - } - break; - default: - break; - } + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.jump2.toString()) && + !event.getFlag().equalsIgnoreCase(Flags.jump3.toString())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.jump2.toString())) { + if (event.getResidence().getPermissions().has(Flags.jump3, FlagCombo.OnlyTrue)) + event.getResidence().getPermissions().setFlag(Flags.jump3.toString(), FlagState.NEITHER); + } else if (event.getFlag().equalsIgnoreCase(Flags.jump3.toString()) && event.getResidence().getPermissions().has(Flags.jump2, FlagCombo.OnlyTrue)) { + event.getResidence().getPermissions().setFlag(Flags.jump2.toString(), FlagState.NEITHER); + } + break; + default: + break; + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeSunRain(ResidenceFlagChangeEvent event) { - if (event.isCancelled()) - return; - - if (!event.getFlag().equalsIgnoreCase(Flags.sun.toString()) && !event.getFlag().equalsIgnoreCase(Flags.rain.toString())) - return; - - switch (event.getNewState()) { - case NEITHER: - case FALSE: - for (Player one : event.getResidence().getPlayersInResidence()) - one.resetPlayerWeather(); - break; - case INVALID: - break; - case TRUE: - if (event.getFlag().equalsIgnoreCase(Flags.sun.toString())) - for (Player player : event.getResidence().getPlayersInResidence()) - player.setPlayerWeather(WeatherType.CLEAR); - if (event.getFlag().equalsIgnoreCase(Flags.rain.toString())) - for (Player player : event.getResidence().getPlayersInResidence()) - player.setPlayerWeather(WeatherType.DOWNFALL); - break; - default: - break; - } + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.sun.toString()) && !event.getFlag().equalsIgnoreCase(Flags.rain.toString())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + for (Player one : event.getResidence().getPlayersInResidence()) + one.resetPlayerWeather(); + break; + case INVALID: + break; + case TRUE: + if (event.getFlag().equalsIgnoreCase(Flags.sun.toString())) + for (Player player : event.getResidence().getPlayersInResidence()) + player.setPlayerWeather(WeatherType.CLEAR); + if (event.getFlag().equalsIgnoreCase(Flags.rain.toString())) + for (Player player : event.getResidence().getPlayersInResidence()) + player.setPlayerWeather(WeatherType.DOWNFALL); + break; + default: + break; + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFlagChangeFly(ResidenceFlagChangeEvent event) { - if (event.isCancelled()) - return; - - if (!event.getFlag().equalsIgnoreCase(Flags.fly.toString())) - return; - - switch (event.getNewState()) { - case NEITHER: - case FALSE: - for (Player one : event.getResidence().getPlayersInResidence()) - fly(one, false); - break; - case INVALID: - break; - case TRUE: - for (Player one : event.getResidence().getPlayersInResidence()) - fly(one, true); - break; - default: - break; - } + if (event.isCancelled()) + return; + + if (!event.getFlag().equalsIgnoreCase(Flags.fly.toString())) + return; + + switch (event.getNewState()) { + case NEITHER: + case FALSE: + for (Player one : event.getResidence().getPlayersInResidence()) + fly(one, false); + break; + case INVALID: + break; + case TRUE: + for (Player one : event.getResidence().getPlayersInResidence()) + fly(one, true); + break; + default: + break; + } } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onCommand(PlayerCommandPreprocessEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.command.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - - ClaimedResidence res = getCurrentResidence(player.getUniqueId()); - - if (res == null) - return; - - if (!res.getPermissions().playerHas(player, Flags.command, FlagCombo.OnlyFalse)) - return; - - if (plugin.getPermissionManager().isResidenceAdmin(player)) - return; - - if (ResPerm.bypass_command.hasPermission(player, 10000L)) - return; - - String msg = event.getMessage().replace(" ", "_").toLowerCase(); - - int white = 0; - int black = 0; - - for (String oneWhite : res.getCmdWhiteList()) { - String t = oneWhite.toLowerCase(); - if (msg.startsWith("/" + t)) { - if (t.contains("_") && t.split("_").length > white) - white = t.split("_").length; - else if (white == 0) - white = 1; - } - } - - for (String oneBlack : res.getCmdBlackList()) { - String t = oneBlack.toLowerCase(); - if (msg.startsWith("/" + t)) { - if (msg.contains("_")) - black = t.split("_").length; - else - black = 1; - break; - } - } - - if (black == 0) - for (String oneBlack : res.getCmdBlackList()) { - String t = oneBlack.toLowerCase(); - if (t.equalsIgnoreCase("*")) { - if (msg.contains("_")) - black = msg.split("_").length; - break; - } - } - - if (white != 0 && white >= black || black == 0) - return; - - event.setCancelled(true); - plugin.msg(player, lm.Residence_FlagDeny, Flags.command, res.getName()); + // Disabling listener if flag disabled globally + if (!Flags.command.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + + ClaimedResidence res = getCurrentResidence(player.getUniqueId()); + + if (res == null) + return; + + if (!res.getPermissions().playerHas(player, Flags.command, FlagCombo.OnlyFalse)) + return; + + if (plugin.getPermissionManager().isResidenceAdmin(player)) + return; + + if (ResPerm.bypass_command.hasPermission(player, 10000L)) + return; + + String msg = event.getMessage().replace(" ", "_").toLowerCase(); + + int white = 0; + int black = 0; + + for (String oneWhite : res.getCmdWhiteList()) { + String t = oneWhite.toLowerCase(); + if (msg.startsWith("/" + t)) { + if (t.contains("_") && t.split("_").length > white) + white = t.split("_").length; + else if (white == 0) + white = 1; + } + } + + for (String oneBlack : res.getCmdBlackList()) { + String t = oneBlack.toLowerCase(); + if (msg.startsWith("/" + t)) { + if (msg.contains("_")) + black = t.split("_").length; + else + black = 1; + break; + } + } + + if (black == 0) + for (String oneBlack : res.getCmdBlackList()) { + String t = oneBlack.toLowerCase(); + if (t.equalsIgnoreCase("*")) { + if (msg.contains("_")) + black = msg.split("_").length; + break; + } + } + + if (white != 0 && white >= black || black == 0) + return; + + event.setCancelled(true); + plugin.msg(player, lm.Residence_FlagDeny, Flags.command, res.getName()); } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignInteract(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - - Block block = event.getClickedBlock(); - - if (block == null || !CMIMaterial.isSign(block.getType())) - return; - - Player player = event.getPlayer(); - if (player.hasMetadata("NPC")) - return; - Location loc = block.getLocation(); - - Signs s = plugin.getSignUtil().getSigns().getResSign(loc); - - if (s == null) - return; - - ClaimedResidence res = s.getResidence(); - - boolean ForSale = res.isForSell(); - boolean ForRent = res.isForRent(); - String landName = res.getName(); - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (ForSale) { - Bukkit.dispatchCommand(player, "res market buy " + landName); - return; - } - - if (ForRent) { - if (res.isRented() && player.isSneaking()) - Bukkit.dispatchCommand(player, "res market release " + landName); - else { - boolean stage = true; - if (player.isSneaking()) - stage = false; - Bukkit.dispatchCommand(player, "res market rent " + landName + " " + stage); - } - return; - } - } else if (event.getAction() == Action.LEFT_CLICK_BLOCK && ForRent && res.isRented() && plugin.getRentManager().getRentingPlayer(res).equals(player.getName())) { - plugin.getRentManager().payRent(player, res, false); - } + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + + Block block = event.getClickedBlock(); + + if (block == null || !CMIMaterial.isSign(block.getType())) + return; + + Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; + Location loc = block.getLocation(); + + Signs s = plugin.getSignUtil().getSigns().getResSign(loc); + + if (s == null) + return; + + ClaimedResidence res = s.getResidence(); + + boolean ForSale = res.isForSell(); + boolean ForRent = res.isForRent(); + String landName = res.getName(); + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (ForSale) { + Bukkit.dispatchCommand(player, "res market buy " + landName); + return; + } + + if (ForRent) { + if (res.isRented() && player.isSneaking()) + Bukkit.dispatchCommand(player, "res market release " + landName); + else { + boolean stage = true; + if (player.isSneaking()) + stage = false; + Bukkit.dispatchCommand(player, "res market rent " + landName + " " + stage); + } + return; + } + } else if (event.getAction() == Action.LEFT_CLICK_BLOCK && ForRent && res.isRented() && plugin.getRentManager().getRentingPlayer(res).equals(player.getName())) { + plugin.getRentManager().payRent(player, res, false); + } } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onSignCreate(SignChangeEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Block block = event.getBlock(); + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Block block = event.getBlock(); - if (!(block.getState() instanceof Sign)) - return; + if (!(block.getState() instanceof Sign)) + return; - Sign sign = (Sign) block.getState(); + Sign sign = (Sign) block.getState(); - if (!CMIChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(plugin.msg(lm.Sign_TopLine))) - return; + if (!CMIChatColor.stripColor(event.getLine(0)).equalsIgnoreCase(plugin.msg(lm.Sign_TopLine))) + return; - Signs signInfo = new Signs(); + Signs signInfo = new Signs(); - Location loc = sign.getLocation(); + Location loc = sign.getLocation(); - Player player = event.getPlayer(); - if (player.hasMetadata("NPC")) - return; - ClaimedResidence res = null; - if (!event.getLine(1).equalsIgnoreCase("")) { + Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; + ClaimedResidence res = null; + if (!event.getLine(1).equalsIgnoreCase("")) { - String resname = event.getLine(1); - if (!event.getLine(2).equalsIgnoreCase("")) - resname += "." + event.getLine(2); - if (!event.getLine(3).equalsIgnoreCase("")) - resname += "." + event.getLine(3); + String resname = event.getLine(1); + if (!event.getLine(2).equalsIgnoreCase("")) + resname += "." + event.getLine(2); + if (!event.getLine(3).equalsIgnoreCase("")) + resname += "." + event.getLine(3); - res = plugin.getResidenceManager().getByName(resname); + res = plugin.getResidenceManager().getByName(resname); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - } else { - res = plugin.getResidenceManager().getByLoc(loc); - } + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + } else { + res = plugin.getResidenceManager().getByLoc(loc); + } - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } - final ClaimedResidence residence = res; + final ClaimedResidence residence = res; - signInfo.setResidence(res); - signInfo.setLocation(loc); - plugin.getSignUtil().getSigns().addSign(signInfo); - plugin.getSignUtil().saveSigns(); + signInfo.setResidence(res); + signInfo.setLocation(loc); + plugin.getSignUtil().getSigns().addSign(signInfo); + plugin.getSignUtil().saveSigns(); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - plugin.getSignUtil().CheckSign(residence); - } - }, 5L); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + plugin.getSignUtil().CheckSign(residence); + } + }, 5L); } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignDestroy(BlockBreakEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.isCancelled()) - return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.isCancelled()) + return; - Block block = event.getBlock(); + Block block = event.getBlock(); - if (block == null) - return; + if (block == null) + return; - if (!CMIMaterial.isSign(block.getType())) - return; + if (!CMIMaterial.isSign(block.getType())) + return; - Location loc = block.getLocation(); - if (event.getPlayer().hasMetadata("NPC")) - return; + Location loc = block.getLocation(); + if (event.getPlayer().hasMetadata("NPC")) + return; - Signs s = plugin.getSignUtil().getSigns().getResSign(loc); - if (s == null) - return; + Signs s = plugin.getSignUtil().getSigns().getResSign(loc); + if (s == null) + return; - plugin.getSignUtil().getSigns().removeSign(s); - if (s.getResidence() != null) - s.getResidence().getSignsInResidence().remove(s); - plugin.getSignUtil().saveSigns(); + plugin.getSignUtil().getSigns().removeSign(s); + if (s.getResidence() != null) + s.getResidence().getSignsInResidence().remove(s); + plugin.getSignUtil().saveSigns(); } @EventHandler(priority = EventPriority.MONITOR) public void onPlayerQuit(PlayerQuitEvent event) { - String pname = event.getPlayer().getName(); - currentRes.remove(event.getPlayer().getUniqueId()); - lastUpdate.remove(event.getPlayer().getUniqueId()); - lastOutsideLoc.remove(event.getPlayer().getUniqueId()); + String pname = event.getPlayer().getName(); + currentRes.remove(event.getPlayer().getUniqueId()); + lastUpdate.remove(event.getPlayer().getUniqueId()); + lastOutsideLoc.remove(event.getPlayer().getUniqueId()); - plugin.getChatManager().removeFromChannel(pname); - plugin.getPlayerListener().removePlayerResidenceChat(event.getPlayer()); - plugin.addOfflinePlayerToChache(event.getPlayer()); + plugin.getChatManager().removeFromChannel(pname); + plugin.getPlayerListener().removePlayerResidenceChat(event.getPlayer()); + plugin.addOfflinePlayerToChache(event.getPlayer()); - plugin.getAutoSelectionManager().getList().remove(event.getPlayer().getUniqueId()); + plugin.getAutoSelectionManager().getList().remove(event.getPlayer().getUniqueId()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerWorldChange(PlayerChangedWorldEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.nofly.isGlobalyEnabled()) - return; - Player player = event.getPlayer(); - if (player.hasMetadata("NPC")) - return; - FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); - - f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) - && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res != null && res.isOwner(player)) - break f; - - Location lc = player.getLocation(); - Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); - location.setPitch(lc.getPitch()); - location.setYaw(lc.getYaw()); - int from = location.getBlockY(); - - int maxH = location.getWorld().getHighestBlockAt(location).getLocation().getBlockY() + 3; - - if (location.getWorld().getEnvironment() == Environment.NETHER) - maxH = 100; - - for (int i = 0; i < maxH; i++) { - location.setY(from - i); - Block block = location.getBlock(); - if (!isEmptyBlock(block)) { - location.setY(from - i + 1); - break; - } - if (location.getBlockY() <= 0) { - player.setFlying(false); - player.setAllowFlight(false); - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, location.getWorld().getName()); - return; - } - } - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, location.getWorld().getName()); - player.closeInventory(); - player.teleport(location); - player.setFlying(false); - player.setAllowFlight(false); - } + // Disabling listener if flag disabled globally + if (!Flags.nofly.isGlobalyEnabled()) + return; + Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; + FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); + + f: if ((player.getAllowFlight() || player.isFlying()) && perms.has(Flags.nofly, false) && !plugin.isResAdminOn(player) + && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res != null && res.isOwner(player)) + break f; + + Location lc = player.getLocation(); + Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); + location.setPitch(lc.getPitch()); + location.setYaw(lc.getYaw()); + int from = location.getBlockY(); + + int maxH = location.getWorld().getHighestBlockAt(location).getLocation().getBlockY() + 3; + + if (location.getWorld().getEnvironment() == Environment.NETHER) + maxH = 100; + + for (int i = 0; i < maxH; i++) { + location.setY(from - i); + Block block = location.getBlock(); + if (!isEmptyBlock(block)) { + location.setY(from - i + 1); + break; + } + if (location.getBlockY() <= 0) { + player.setFlying(false); + player.setAllowFlight(false); + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, location.getWorld().getName()); + return; + } + } + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, location.getWorld().getName()); + player.closeInventory(); + player.teleport(location); + player.setFlying(false); + player.setAllowFlight(false); + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerJoin(PlayerJoinEvent event) { - Player player = event.getPlayer(); - lastUpdate.put(player.getUniqueId(), 0L); - if (plugin.getPermissionManager().isResidenceAdmin(player)) { - plugin.turnResAdminOn(player); - } - handleNewLocation(player, player.getLocation(), true); + Player player = event.getPlayer(); + lastUpdate.put(player.getUniqueId(), 0L); + if (plugin.getPermissionManager().isResidenceAdmin(player)) { + plugin.turnResAdminOn(player); + } + handleNewLocation(player, player.getLocation(), true); - plugin.getPlayerManager().playerJoin(player); + plugin.getPlayerManager().playerJoin(player); - if (ResPerm.versioncheck.hasPermission(player)) { - CMIVersionChecker.VersionCheck(player, 11480, plugin.getDescription()); - } + if (ResPerm.versioncheck.hasPermission(player)) { + CMIVersionChecker.VersionCheck(player, 11480, plugin.getDescription()); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerSpawn(PlayerRespawnEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getRespawnLocation().getWorld())) - return; - Location loc = event.getRespawnLocation(); - Boolean bed = event.isBedSpawn(); - Player player = event.getPlayer(); - if (player.hasMetadata("NPC")) - return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res == null) - return; - - if (!res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse)) { - return; - } - if (bed) { - loc = player.getWorld().getSpawnLocation(); - } - res = plugin.getResidenceManager().getByLoc(loc); - if (res != null && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse)) { - loc = res.getOutsideFreeLoc(loc, player); - } - - plugin.msg(player, lm.General_NoSpawn); - event.setRespawnLocation(loc); + // disabling event on world + if (plugin.isDisabledWorldListener(event.getRespawnLocation().getWorld())) + return; + Location loc = event.getRespawnLocation(); + Boolean bed = event.isBedSpawn(); + Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (res == null) + return; + + if (!res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse)) { + return; + } + if (bed) { + loc = player.getWorld().getSpawnLocation(); + } + res = plugin.getResidenceManager().getByLoc(loc); + if (res != null && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse)) { + loc = res.getOutsideFreeLoc(loc, player); + } + + plugin.msg(player, lm.General_NoSpawn); + event.setRespawnLocation(loc); } private boolean isContainer(Material mat, Block block) { - return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container) - || plugin.getConfigManager().getCustomContainers().contains(CMIMaterial.get(block)); + return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container) + || plugin.getConfigManager().getCustomContainers().contains(CMIMaterial.get(block)); } private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { - switch (mat.name()) { - case "ITEM_FRAME": - case "CAKE": - case "BEACON": - case "FLOWER_POT": - case "COMMAND": - case "ANVIL": - case "LECTERN": - case "CHIPPED_ANVIL": - case "DAMAGED_ANVIL": - case "CAKE_BLOCK": - case "DIODE": - case "DIODE_BLOCK_OFF": - case "DIODE_BLOCK_ON": - case "COMPARATOR": - case "REPEATER": - case "REDSTONE_COMPARATOR": - case "REDSTONE_COMPARATOR_OFF": - case "REDSTONE_COMPARATOR_ON": - case "BED_BLOCK": - case "WORKBENCH": - case "CRAFTING_TABLE": - case "BREWING_STAND": - case "ENCHANTMENT_TABLE": - case "ENCHANTING_TABLE": - case "DAYLIGHT_DETECTOR": - case "DAYLIGHT_DETECTOR_INVERTED": - return true; - default: - break; - } - - CMIMaterial cmat = CMIMaterial.get(mat); - if (cmat != null && cmat.isPotted()) { - return true; - } - - return plugin.getConfigManager().getCustomRightClick().contains(CMIMaterial.get(block)); + switch (mat.name()) { + case "ITEM_FRAME": + case "CAKE": + case "BEACON": + case "FLOWER_POT": + case "COMMAND": + case "ANVIL": + case "LECTERN": + case "CHIPPED_ANVIL": + case "DAMAGED_ANVIL": + case "CAKE_BLOCK": + case "DIODE": + case "DIODE_BLOCK_OFF": + case "DIODE_BLOCK_ON": + case "COMPARATOR": + case "REPEATER": + case "REDSTONE_COMPARATOR": + case "REDSTONE_COMPARATOR_OFF": + case "REDSTONE_COMPARATOR_ON": + case "BED_BLOCK": + case "WORKBENCH": + case "CRAFTING_TABLE": + case "BREWING_STAND": + case "ENCHANTMENT_TABLE": + case "ENCHANTING_TABLE": + case "DAYLIGHT_DETECTOR": + case "DAYLIGHT_DETECTOR_INVERTED": + return true; + default: + break; + } + + CMIMaterial cmat = CMIMaterial.get(mat); + if (cmat != null && cmat.isPotted()) { + return true; + } + + return plugin.getConfigManager().getCustomRightClick().contains(CMIMaterial.get(block)); } public static boolean isCanUseEntity_BothClick(Material mat, Block block) { - CMIMaterial m = CMIMaterial.get(mat); - if (m.isDoor()) - return true; - if (m.isButton()) - return true; - if (m.isGate()) - return true; - if (m.isTrapDoor()) - return true; - - switch (m) { - case LEVER: - case PISTON: - case STICKY_PISTON: - case NOTE_BLOCK: - case DRAGON_EGG: - return true; - default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(CMIMaterial.get(block)); - } + CMIMaterial m = CMIMaterial.get(mat); + if (m.isDoor()) + return true; + if (m.isButton()) + return true; + if (m.isGate()) + return true; + if (m.isTrapDoor()) + return true; + + switch (m) { + case LEVER: + case PISTON: + case STICKY_PISTON: + case NOTE_BLOCK: + case DRAGON_EGG: + return true; + default: + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(CMIMaterial.get(block)); + } } public static boolean isEmptyBlock(Block block) { - CMIMaterial cb = CMIMaterial.get(block); - - switch (cb) { - case COBWEB: - case STRING: - case WALL_SIGN: - case VINE: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case PAINTING: - case ITEM_FRAME: - case GLOW_ITEM_FRAME: - case NONE: - return true; - default: - break; - } - - if (cb.isSapling()) - return true; - if (cb.isAir()) - return true; - if (cb.isButton()) - return true; - - return false; + CMIMaterial cb = CMIMaterial.get(block); + + switch (cb) { + case COBWEB: + case STRING: + case WALL_SIGN: + case VINE: + case TRIPWIRE_HOOK: + case TRIPWIRE: + case PAINTING: + case ITEM_FRAME: + case GLOW_ITEM_FRAME: + case NONE: + return true; + default: + break; + } + + if (cb.isSapling()) + return true; + if (cb.isAir()) + return true; + if (cb.isButton()) + return true; + + return false; } private boolean isCanUseEntity(Material mat, Block block) { - return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); + return isCanUseEntity_BothClick(mat, block) || isCanUseEntity_RClickOnly(mat, block); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerEnderCrystalInteract(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; - Block block = event.getClickedBlock(); + Block block = event.getClickedBlock(); - if (block == null) - return; + if (block == null) + return; - if (block.getType() != Material.BEDROCK) - return; + if (block.getType() != Material.BEDROCK) + return; - Player player = event.getPlayer(); + Player player = event.getPlayer(); - ItemStack iih = null; + ItemStack iih = null; - try { - if (event.getHand() == EquipmentSlot.HAND) - iih = CMIItemStack.getItemInMainHand(player); - else - iih = CMIItemStack.getItemInOffHand(player); - } catch (Throwable e) { - iih = CMIItemStack.getItemInMainHand(player); - } + try { + if (event.getHand() == EquipmentSlot.HAND) + iih = CMIItemStack.getItemInMainHand(player); + else + iih = CMIItemStack.getItemInOffHand(player); + } catch (Throwable e) { + iih = CMIItemStack.getItemInMainHand(player); + } - if (iih == null) - return; + if (iih == null) + return; - if (!iih.getType().toString().equals("END_CRYSTAL")) - return; + if (!iih.getType().toString().equals("END_CRYSTAL")) + return; - if (player.hasMetadata("NPC")) - return; - if (plugin.isResAdminOn(player)) - return; - FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + if (player.hasMetadata("NPC")) + return; + if (plugin.isResAdminOn(player)) + return; + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - if (hasplace) - return; + boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); + if (hasplace) + return; - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.build); - return; + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.build); + return; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerFireInteract(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.getAction() != Action.LEFT_CLICK_BLOCK) - return; + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getAction() != Action.LEFT_CLICK_BLOCK) + return; - Block block = event.getClickedBlock(); + Block block = event.getClickedBlock(); - if (block == null) - return; + if (block == null) + return; - Block relativeBlock = block.getRelative(event.getBlockFace()); + Block relativeBlock = block.getRelative(event.getBlockFace()); - if (relativeBlock == null) - return; + if (relativeBlock == null) + return; - if (relativeBlock.getType() != Material.FIRE) - return; + if (relativeBlock.getType() != Material.FIRE) + return; - Player player = event.getPlayer(); - if (player.hasMetadata("NPC")) - return; - if (plugin.isResAdminOn(player)) - return; - FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; + if (plugin.isResAdminOn(player)) + return; + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - if (hasplace) - return; + boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); + if (hasplace) + return; - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.build); - return; + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.build); + return; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlatePress(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.getAction() != Action.PHYSICAL) - return; - Block block = event.getClickedBlock(); - if (block == null) - return; - Player player = event.getPlayer(); - if (player.hasMetadata("NPC")) - return; - FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - - CMIMaterial mat = CMIMaterial.get(block); - if (!plugin.isResAdminOn(player)) { - boolean hasuse = perms.playerHas(player, Flags.use, true); - boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); - if ((!hasuse && !haspressure || !haspressure) && mat.isPlate() - && !ResPerm.bypass_use.hasPermission(player, 10000L)) { - event.setCancelled(true); - } - } - if (!perms.playerHas(player, Flags.trample, perms.playerHas(player, Flags.build, true)) && (mat == CMIMaterial.FARMLAND || mat == CMIMaterial.SOUL_SAND)) { - event.setCancelled(true); - } + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getAction() != Action.PHYSICAL) + return; + Block block = event.getClickedBlock(); + if (block == null) + return; + Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + + CMIMaterial mat = CMIMaterial.get(block); + if (!plugin.isResAdminOn(player)) { + boolean hasuse = perms.playerHas(player, Flags.use, true); + boolean haspressure = perms.playerHas(player, Flags.pressure, hasuse); + if ((!hasuse && !haspressure || !haspressure) && mat.isPlate() + && !ResPerm.bypass_use.hasPermission(player, 10000L)) { + event.setCancelled(true); + } + } + if (!perms.playerHas(player, Flags.trample, perms.playerHas(player, Flags.build, true)) && (mat == CMIMaterial.FARMLAND || mat == CMIMaterial.SOUL_SAND)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSelection(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - - Player player = event.getPlayer(); - @SuppressWarnings("deprecation") - CMIMaterial heldItem = CMIMaterial.get(player.getItemInHand()); - - if (heldItem != plugin.getConfigManager().getSelectionTool()) { - return; - } - - if (plugin.getWorldEditTool() == plugin.getConfigManager().getSelectionTool()) - return; - - if (player.getGameMode() == GameMode.CREATIVE) - event.setCancelled(true); - - if (player.hasMetadata("NPC")) - return; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - boolean resadmin = plugin.isResAdminOn(player); - if (ResPerm.select.hasPermission(player) || ResPerm.create.hasPermission(player) && !ResPerm.select.hasSetPermission(player) || group - .canCreateResidences() && !ResPerm.create.hasSetPermission(player) && !ResPerm.select.hasSetPermission(player) || resadmin) { - - Block block = event.getClickedBlock(); - - if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - Location loc = block.getLocation(); - plugin.getSelectionManager().placeLoc1(player, loc, true); - plugin.msg(player, lm.Select_PrimaryPoint, plugin.msg(lm.General_CoordsTop, loc.getBlockX(), loc.getBlockY(), - loc.getBlockZ())); - event.setCancelled(true); - } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && Utils.isMainHand(event)) { - Location loc = block.getLocation(); - plugin.getSelectionManager().placeLoc2(player, loc, true); - plugin.msg(player, lm.Select_SecondaryPoint, plugin.msg(lm.General_CoordsBottom, loc.getBlockX(), loc - .getBlockY(), loc.getBlockZ())); - event.setCancelled(true); - } - - if (plugin.getSelectionManager().hasPlacedBoth(player)) { - plugin.getSelectionManager().showSelectionInfoInActionBar(player); - plugin.getSelectionManager().updateLocations(player); - } - } - return; + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + Player player = event.getPlayer(); + @SuppressWarnings("deprecation") + CMIMaterial heldItem = CMIMaterial.get(player.getItemInHand()); + + if (heldItem != plugin.getConfigManager().getSelectionTool()) { + return; + } + + if (plugin.getWorldEditTool() == plugin.getConfigManager().getSelectionTool()) + return; + + if (player.getGameMode() == GameMode.CREATIVE) + event.setCancelled(true); + + if (player.hasMetadata("NPC")) + return; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + boolean resadmin = plugin.isResAdminOn(player); + if (ResPerm.select.hasPermission(player) || ResPerm.create.hasPermission(player) && !ResPerm.select.hasSetPermission(player) || group + .canCreateResidences() && !ResPerm.create.hasSetPermission(player) && !ResPerm.select.hasSetPermission(player) || resadmin) { + + Block block = event.getClickedBlock(); + + if (event.getAction() == Action.LEFT_CLICK_BLOCK) { + Location loc = block.getLocation(); + plugin.getSelectionManager().placeLoc1(player, loc, true); + plugin.msg(player, lm.Select_PrimaryPoint, plugin.msg(lm.General_CoordsTop, loc.getBlockX(), loc.getBlockY(), + loc.getBlockZ())); + event.setCancelled(true); + } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && Utils.isMainHand(event)) { + Location loc = block.getLocation(); + plugin.getSelectionManager().placeLoc2(player, loc, true); + plugin.msg(player, lm.Select_SecondaryPoint, plugin.msg(lm.General_CoordsBottom, loc.getBlockX(), loc + .getBlockY(), loc.getBlockZ())); + event.setCancelled(true); + } + + if (plugin.getSelectionManager().hasPlacedBoth(player)) { + plugin.getSelectionManager().showSelectionInfoInActionBar(player); + plugin.getSelectionManager().updateLocations(player); + } + } + return; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onInfoCheck(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.getAction() != Action.LEFT_CLICK_BLOCK) - return; - Block block = event.getClickedBlock(); - if (block == null) - return; - Player player = event.getPlayer(); + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.getAction() != Action.LEFT_CLICK_BLOCK) + return; + Block block = event.getClickedBlock(); + if (block == null) + return; + Player player = event.getPlayer(); - ItemStack item = event.getItem(); - if (item == null) - return; + ItemStack item = event.getItem(); + if (item == null) + return; - CMIMaterial heldItem = CMIMaterial.get(item); + CMIMaterial heldItem = CMIMaterial.get(item); - if (heldItem != plugin.getConfigManager().getInfoTool()) - return; + if (heldItem != plugin.getConfigManager().getInfoTool()) + return; - if (this.isContainer(block.getType(), block)) - return; - if (player.hasMetadata("NPC")) - return; + if (this.isContainer(block.getType(), block)) + return; + if (player.hasMetadata("NPC")) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - if (res != null) - plugin.getResidenceManager().printAreaInfo(res.getName(), player, false); - else - plugin.msg(player, lm.Residence_NoResHere); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (res != null) + plugin.getResidenceManager().printAreaInfo(res.getName(), player, false); + else + plugin.msg(player, lm.Residence_NoResHere); - event.setCancelled(true); + event.setCancelled(true); } private static boolean placingMinecart(Block block, ItemStack item) { - return block != null && block.getType().name().contains("RAIL") && item != null && item.getType().name().contains("MINECART"); + return block != null && block.getType().name().contains("RAIL") && item != null && item.getType().name().contains("MINECART"); } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onPlayerharvest(PlayerInteractEvent event) { - if (Version.isCurrentEqualOrLower(Version.v1_16_R1)) - return; + if (Version.isCurrentEqualOrLower(Version.v1_16_R1)) + return; - if (event.getPlayer() == null) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; - if (event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - try { - if (event.getHand() != EquipmentSlot.HAND && event.getHand() != EquipmentSlot.OFF_HAND) - return; - } catch (Exception e) { - } - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + try { + if (event.getHand() != EquipmentSlot.HAND && event.getHand() != EquipmentSlot.OFF_HAND) + return; + } catch (Exception e) { + } + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; - Block block = event.getClickedBlock(); - if (block == null) - return; + Block block = event.getClickedBlock(); + if (block == null) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - if (res != null && res.isOwner(player)) - return; + if (res != null && res.isOwner(player)) + return; - CMIMaterial mat = CMIMaterial.get(block); + CMIMaterial mat = CMIMaterial.get(block); - if (!mat.equals(CMIMaterial.SWEET_BERRY_BUSH) && !mat.equals(CMIMaterial.CAVE_VINES) && !mat.equals(CMIMaterial.CAVE_VINES_PLANT)) - return; + if (!mat.equals(CMIMaterial.SWEET_BERRY_BUSH) && !mat.equals(CMIMaterial.CAVE_VINES) && !mat.equals(CMIMaterial.CAVE_VINES_PLANT)) + return; - FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - if (!perms.playerHas(player, Flags.harvest, true)) { - plugin.msg(player, lm.Flag_Deny, Flags.harvest); - event.setCancelled(true); - } + if (!perms.playerHas(player, Flags.harvest, true)) { + plugin.msg(player, lm.Flag_Deny, Flags.harvest); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - - Block block = event.getClickedBlock(); - if (block == null) - return; - - ItemStack iih = event.getItem(); - CMIMaterial heldItem = CMIMaterial.get(iih); - - Material mat = block.getType(); - if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK - || isCanUseEntity_BothClick(mat, block)) && !heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) - && (!heldItem.isDye() && !heldItem.equals(CMIMaterial.GLOW_INK_SAC)) && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { - return; - } - - if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - - boolean resadmin = plugin.isResAdminOn(player); - if (resadmin) - return; - - if (!heldItem.isNone() && heldItem.isValidItem() && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld() - .getName())) { - plugin.msg(player, lm.General_ItemBlacklisted); - event.setCancelled(true); - return; - } - - CMIMaterial blockM = CMIMaterial.get(block); - - FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (heldItem.isDye() || heldItem.equals(CMIMaterial.GLOW_INK_SAC)) { - CMIMaterial btype = CMIMaterial.get(block); - if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || btype == CMIMaterial.GRASS || btype.isSapling()) || - heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD || btype == CMIMaterial.MOSS_BLOCK || btype.isSign()) { - FlagPermissions tperms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!tperms.playerHas(player, Flags.build, true)) { - plugin.msg(player, lm.Flag_Deny, Flags.build); - event.setCancelled(true); - return; - } - } - } - if (heldItem.equals(CMIMaterial.ARMOR_STAND) || heldItem.isBoat()) { - FlagPermissions tperms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); - if (!tperms.playerHas(player, Flags.build, true)) { - plugin.msg(player, lm.Flag_Deny, Flags.build); - event.setCancelled(true); - return; - } - } - if (placingMinecart(block, iih)) { - if (!perms.playerHas(player, Flags.build, true)) { - plugin.msg(player, lm.Flag_Deny, Flags.build); - event.setCancelled(true); - return; - } - } - } - - if (isContainer(mat, block) || isCanUseEntity(mat, block)) { - boolean hasuse = perms.playerHas(player, Flags.use, true); - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - - if (res != null && res.getRaid().isUnderRaid()) { - if (res.getRaid().isDefender(player) && !ConfigManager.RaidDefenderContainerUsage) { - Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); - if (result != null && result.equals(Flags.container)) { - event.setCancelled(true); - plugin.msg(player, lm.Raid_cantDo); - return; - } - } - } - - if (res == null || !res.isOwner(player)) { - - Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); - if (result != null) { - - main: if (!perms.playerHas(player, result, hasuse)) { - - if (hasuse || result.equals(Flags.container)) { - - if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { - break main; - } - if (!ResPerm.bypass_container.hasPermission(player, 10000L)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, result); - } - return; - } - - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - - if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { - break main; - } - - switch (result) { - case door: - if (ResPerm.bypass_door.hasPermission(player, 10000L)) - break main; - break; - case button: - if (ResPerm.bypass_button.hasPermission(player, 10000L)) - break main; - break; - } - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, result); - return; - } - - if (isCanUseEntity_BothClick(mat, block)) { - - if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { - break main; - } - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, result); - } - return; - } - } - } - - if (plugin.getConfigManager().getCustomContainers().contains(blockM)) { - if (!perms.playerHas(player, Flags.container, hasuse) - || !ResPerm.bypass_container.hasPermission(player, 10000L)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container); - return; - } - } - - if (plugin.getConfigManager().getCustomBothClick().contains(blockM) && !hasuse) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use); - return; - } - if (plugin.getConfigManager().getCustomRightClick().contains(blockM) && event.getAction() == Action.RIGHT_CLICK_BLOCK && !hasuse) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use); - } - } + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + + Block block = event.getClickedBlock(); + if (block == null) + return; + + ItemStack iih = event.getItem(); + CMIMaterial heldItem = CMIMaterial.get(iih); + + Material mat = block.getType(); + if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK + || isCanUseEntity_BothClick(mat, block)) && !heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) + && (!heldItem.isDye() && !heldItem.equals(CMIMaterial.GLOW_INK_SAC)) && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { + return; + } + + if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + boolean resadmin = plugin.isResAdminOn(player); + if (resadmin) + return; + + if (!heldItem.isNone() && heldItem.isValidItem() && !plugin.getItemManager().isAllowed(heldItem.getMaterial(), plugin.getPlayerManager().getResidencePlayer(player).getGroup(), player.getWorld() + .getName())) { + plugin.msg(player, lm.General_ItemBlacklisted); + event.setCancelled(true); + return; + } + + CMIMaterial blockM = CMIMaterial.get(block); + + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (heldItem.isDye() || heldItem.equals(CMIMaterial.GLOW_INK_SAC)) { + CMIMaterial btype = CMIMaterial.get(block); + if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || btype == CMIMaterial.GRASS || btype.isSapling()) || + heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD || btype == CMIMaterial.MOSS_BLOCK || btype.isSign()) { + FlagPermissions tperms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!tperms.playerHas(player, Flags.build, true)) { + plugin.msg(player, lm.Flag_Deny, Flags.build); + event.setCancelled(true); + return; + } + } + } + if (heldItem.equals(CMIMaterial.ARMOR_STAND) || heldItem.isBoat()) { + FlagPermissions tperms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); + if (!tperms.playerHas(player, Flags.build, true)) { + plugin.msg(player, lm.Flag_Deny, Flags.build); + event.setCancelled(true); + return; + } + } + if (placingMinecart(block, iih)) { + if (!perms.playerHas(player, Flags.build, true)) { + plugin.msg(player, lm.Flag_Deny, Flags.build); + event.setCancelled(true); + return; + } + } + } + + if (isContainer(mat, block) || isCanUseEntity(mat, block)) { + boolean hasuse = perms.playerHas(player, Flags.use, true); + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + + if (res != null && res.getRaid().isUnderRaid()) { + if (res.getRaid().isDefender(player) && !ConfigManager.RaidDefenderContainerUsage) { + Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); + if (result != null && result.equals(Flags.container)) { + event.setCancelled(true); + plugin.msg(player, lm.Raid_cantDo); + return; + } + } + } + + if (res == null || !res.isOwner(player)) { + + Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); + if (result != null) { + + main: if (!perms.playerHas(player, result, hasuse)) { + + if (hasuse || result.equals(Flags.container)) { + + if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { + break main; + } + if (!ResPerm.bypass_container.hasPermission(player, 10000L)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, result); + } + return; + } + + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + + if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { + break main; + } + + switch (result) { + case door: + if (ResPerm.bypass_door.hasPermission(player, 10000L)) + break main; + break; + case button: + if (ResPerm.bypass_button.hasPermission(player, 10000L)) + break main; + break; + } + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, result); + return; + } + + if (isCanUseEntity_BothClick(mat, block)) { + + if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { + break main; + } + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, result); + } + return; + } + } + } + + if (plugin.getConfigManager().getCustomContainers().contains(blockM)) { + if (!perms.playerHas(player, Flags.container, hasuse) + || !ResPerm.bypass_container.hasPermission(player, 10000L)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.container); + return; + } + } + + if (plugin.getConfigManager().getCustomBothClick().contains(blockM) && !hasuse) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.use); + return; + } + if (plugin.getConfigManager().getCustomRightClick().contains(blockM) && event.getAction() == Action.RIGHT_CLICK_BLOCK && !hasuse) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.use); + } + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; - Entity ent = event.getRightClicked(); - /* Trade */ - if (ent.getType() != EntityType.VILLAGER) - return; + Entity ent = event.getRightClicked(); + /* Trade */ + if (ent.getType() != EntityType.VILLAGER) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); - if (res != null && res.getPermissions().playerHas(player, Flags.trade, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.trade, res.getName()); - event.setCancelled(true); - } + if (res != null && res.getPermissions().playerHas(player, Flags.trade, FlagCombo.OnlyFalse)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.trade, res.getName()); + event.setCancelled(true); + } } private static boolean canRide(EntityType type) { - switch (type.name().toLowerCase()) { - case "horse": - case "donkey": - case "llama": - case "pig": - return true; - } - return false; + switch (type.name().toLowerCase()) { + case "horse": + case "donkey": + case "llama": + case "pig": + return true; + } + return false; } private static boolean canHaveContainer(EntityType type) { - switch (type.name().toLowerCase()) { - case "horse": - case "donkey": - case "llama": - return true; - } - return false; + switch (type.name().toLowerCase()) { + case "horse": + case "donkey": + case "llama": + return true; + } + return false; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - // Disabling listener if flag disabled globally - if (!Flags.container.isGlobalyEnabled()) - return; - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + // Disabling listener if flag disabled globally + if (!Flags.container.isGlobalyEnabled()) + return; + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; - Entity ent = event.getRightClicked(); + Entity ent = event.getRightClicked(); - if (!canHaveContainer(ent.getType())) - return; + if (!canHaveContainer(ent.getType())) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); - if (res == null) - return; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; - boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); - if (!hasContainerBypass && !res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); - event.setCancelled(true); - } + if (!hasContainerBypass && !res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse) && player.isSneaking()) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractWithRidable(PlayerInteractEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.riding.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - - if (!canRide(ent.getType())) - return; - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); - if (res == null) - return; - if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.riding, FlagCombo.TrueOrNone)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.riding, res.getName()); - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.riding.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + + if (!canRide(ent.getType())) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.riding, FlagCombo.TrueOrNone)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.riding, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.container.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; + // Disabling listener if flag disabled globally + if (!Flags.container.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; - Entity ent = event.getRightClicked(); + Entity ent = event.getRightClicked(); - if (ent.getType() != EntityType.MINECART_CHEST && ent.getType() != EntityType.MINECART_HOPPER) - return; + if (ent.getType() != EntityType.MINECART_CHEST && ent.getType() != EntityType.MINECART_HOPPER) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); - if (res == null) - return; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; - boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); - if (!hasContainerBypass && !res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); - event.setCancelled(true); - } + if (!hasContainerBypass && !res.isOwner(player) && res.getPermissions().playerHas(player, Flags.container, FlagCombo.OnlyFalse)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.container, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.riding.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - - if (ent.getType() != EntityType.MINECART && ent.getType() != EntityType.BOAT) - return; - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); - if (res == null) - return; - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.riding, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.riding, res.getName()); - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.riding.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + + if (ent.getType() != EntityType.MINECART && ent.getType() != EntityType.BOAT) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.riding, FlagCombo.OnlyFalse)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.riding, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerDyeSheep(PlayerInteractEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.dye.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; - - Entity ent = event.getRightClicked(); - /* Dye */ - if (ent.getType() != EntityType.SHEEP) - return; - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); - if (res == null) - return; - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.dye, FlagCombo.OnlyFalse)) { - ItemStack iih = Utils.itemInMainHand(player); - ItemStack iiho = CMILib.getInstance().getReflectionManager().getItemInOffHand(player); - if (iih == null && iiho == null) - return; - if (iih != null && !CMIMaterial.isDye(iih.getType()) && iiho != null && !CMIMaterial.isDye(iiho.getType())) - return; - - plugin.msg(player, lm.Residence_FlagDeny, Flags.dye, res.getName()); - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.dye.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; + + Entity ent = event.getRightClicked(); + /* Dye */ + if (ent.getType() != EntityType.SHEEP) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.dye, FlagCombo.OnlyFalse)) { + ItemStack iih = Utils.itemInMainHand(player); + ItemStack iiho = CMILib.getInstance().getReflectionManager().getItemInOffHand(player); + if (iih == null && iiho == null) + return; + if (iih != null && !CMIMaterial.isDye(iih.getType()) && iiho != null && !CMIMaterial.isDye(iiho.getType())) + return; + + plugin.msg(player, lm.Residence_FlagDeny, Flags.dye, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerShearEntity(PlayerShearEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.shear.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - if (event.isCancelled()) - return; - - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; - - Entity ent = event.getEntity(); - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); - if (res == null) - return; - - if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.shear, FlagCombo.OnlyFalse)) { - ItemStack iih = Utils.itemInMainHand(player); - ItemStack iiho = CMILib.getInstance().getReflectionManager().getItemInOffHand(player); - if (iih == null && iiho == null) - return; - if (iih != null && !CMIMaterial.SHEARS.equals(iih.getType()) && iiho != null && !CMIMaterial.SHEARS.equals(iiho.getType())) - return; - plugin.msg(player, lm.Residence_FlagDeny, Flags.shear, res.getName()); - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.shear.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + if (event.isCancelled()) + return; + + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; + + Entity ent = event.getEntity(); + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); + if (res == null) + return; + + if (!res.isOwner(player) && res.getPermissions().playerHas(player, Flags.shear, FlagCombo.OnlyFalse)) { + ItemStack iih = Utils.itemInMainHand(player); + ItemStack iiho = CMILib.getInstance().getReflectionManager().getItemInOffHand(player); + if (iih == null && iiho == null) + return; + if (iih != null && !CMIMaterial.SHEARS.equals(iih.getType()) && iiho != null && !CMIMaterial.SHEARS.equals(iiho.getType())) + return; + plugin.msg(player, lm.Residence_FlagDeny, Flags.shear, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractAtArmoStand(PlayerInteractEntityEvent event) { - Player player = event.getPlayer(); - if (Residence.getInstance().isResAdminOn(player)) - return; + Player player = event.getPlayer(); + if (Residence.getInstance().isResAdminOn(player)) + return; - Entity ent = event.getRightClicked(); + Entity ent = event.getRightClicked(); - ItemStack item = CMIItemStack.getItemInMainHand(player); + ItemStack item = CMIItemStack.getItemInMainHand(player); - try { - if (event.getHand() == EquipmentSlot.OFF_HAND) - item = CMIItemStack.getItemInOffHand(player); - } catch (Throwable e) { - } + try { + if (event.getHand() == EquipmentSlot.OFF_HAND) + item = CMIItemStack.getItemInOffHand(player); + } catch (Throwable e) { + } - if (!CMIMaterial.get(item).equals(CMIMaterial.NAME_TAG)) - return; + if (!CMIMaterial.get(item).equals(CMIMaterial.NAME_TAG)) + return; - FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); - if (perms.playerHas(player, Flags.nametag, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - Residence.getInstance().msg(player, lm.Flag_Deny, Flags.nametag); - } + if (perms.playerHas(player, Flags.nametag, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.nametag); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerItemFrameInteract(PlayerInteractEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.container.isGlobalyEnabled()) - return; + // Disabling listener if flag disabled globally + if (!Flags.container.isGlobalyEnabled()) + return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; - Entity ent = event.getRightClicked(); + Entity ent = event.getRightClicked(); - if (!CMIEntity.isItemFrame(ent)) { - return; - } + if (!CMIEntity.isItemFrame(ent)) { + return; + } - /* Container - ItemFrame protection */ - if (!(ent instanceof Hanging)) - return; + /* Container - ItemFrame protection */ + if (!(ent instanceof Hanging)) + return; // Hanging hanging = (Hanging) ent; - Material heldItem = Utils.itemInMainHand(player).getType(); + Material heldItem = Utils.itemInMainHand(player).getType(); - FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player); - String world = player.getWorld().getName(); + FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player); + String world = player.getWorld().getName(); - ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = resPlayer.getGroup(); + ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(); - if (!plugin.getItemManager().isAllowed(heldItem, group, world)) { - plugin.msg(player, lm.General_ItemBlacklisted); - event.setCancelled(true); - return; - } + if (!plugin.getItemManager().isAllowed(heldItem, group, world)) { + plugin.msg(player, lm.General_ItemBlacklisted); + event.setCancelled(true); + return; + } - boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); + boolean hasContainerBypass = ResPerm.bypass_container.hasPermission(player, 10000L); // - if (!hasContainerBypass && !perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container); - } + if (!hasContainerBypass && !perms.playerHas(player, Flags.container, perms.playerHas(player, Flags.use, true))) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.container); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { - // disabling event on world - - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; - - Location loc = event.getBlockClicked().getLocation(); - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res != null) { - if (plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem()) { - if (plugin.getRentManager().isRented(res.getName())) { - plugin.msg(player, lm.Rent_ModifyDeny); - event.setCancelled(true); - return; - } - } - - Material mat = event.getBucket(); - if ((res.getPermissions().playerHas(player, Flags.build, FlagCombo.OnlyFalse)) - && plugin.getConfigManager().getNoPlaceWorlds().contains(loc.getWorld().getName())) { - if (mat == Material.LAVA_BUCKET || mat == Material.WATER_BUCKET) { - plugin.msg(player, lm.Flag_Deny, Flags.build); - event.setCancelled(true); - return; - } - } - } - - FlagPermissions perms = plugin.getPermsByLocForPlayer(loc, player); - if (!perms.playerHas(player, Flags.build, true)) { - plugin.msg(player, lm.Flag_Deny, Flags.build); - event.setCancelled(true); - return; - } - - Material mat = event.getBucket(); - int level = plugin.getConfigManager().getPlaceLevel(); - if (res == null && plugin.getConfigManager().isNoLavaPlace() && loc.getBlockY() >= level - 1 && plugin.getConfigManager() - .getNoPlaceWorlds().contains(loc.getWorld().getName())) { - if (mat == Material.LAVA_BUCKET) { - if (!plugin.msg(lm.General_CantPlaceLava).equalsIgnoreCase("")) - plugin.msg(player, lm.General_CantPlaceLava, level); - event.setCancelled(true); - return; - } - } - - if (res == null && plugin.getConfigManager().isNoWaterPlace() && loc.getBlockY() >= level - 1 && plugin.getConfigManager() - .getNoPlaceWorlds().contains(loc.getWorld().getName()) && mat == Material.WATER_BUCKET) { - if (!plugin.msg(lm.General_CantPlaceWater).equalsIgnoreCase("")) - plugin.msg(player, lm.General_CantPlaceWater, level); - event.setCancelled(true); - } + // disabling event on world + + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; + + Location loc = event.getBlockClicked().getLocation().clone(); + + loc.add(event.getBlockFace().getDirection()); + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (res != null) { + if (plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem()) { + if (plugin.getRentManager().isRented(res.getName())) { + plugin.msg(player, lm.Rent_ModifyDeny); + event.setCancelled(true); + return; + } + } + + Material mat = event.getBucket(); + if ((res.getPermissions().playerHas(player, Flags.build, FlagCombo.OnlyFalse)) + && plugin.getConfigManager().getNoPlaceWorlds().contains(loc.getWorld().getName())) { + if (mat == Material.LAVA_BUCKET || mat == Material.WATER_BUCKET) { + plugin.msg(player, lm.Flag_Deny, Flags.build); + event.setCancelled(true); + return; + } + } + } + + FlagPermissions perms = plugin.getPermsByLocForPlayer(loc, player); + if (!perms.playerHas(player, Flags.build, true)) { + plugin.msg(player, lm.Flag_Deny, Flags.build); + event.setCancelled(true); + return; + } + + Material mat = event.getBucket(); + int level = plugin.getConfigManager().getPlaceLevel(); + if (res == null && plugin.getConfigManager().isNoLavaPlace() && loc.getBlockY() >= level - 1 && plugin.getConfigManager() + .getNoPlaceWorlds().contains(loc.getWorld().getName())) { + if (mat == Material.LAVA_BUCKET) { + if (!plugin.msg(lm.General_CantPlaceLava).equalsIgnoreCase("")) + plugin.msg(player, lm.General_CantPlaceLava, level); + event.setCancelled(true); + return; + } + } + + if (res == null && plugin.getConfigManager().isNoWaterPlace() && loc.getBlockY() >= level - 1 && plugin.getConfigManager() + .getNoPlaceWorlds().contains(loc.getWorld().getName()) && mat == Material.WATER_BUCKET) { + if (!plugin.msg(lm.General_CantPlaceWater).equalsIgnoreCase("")) + plugin.msg(player, lm.General_CantPlaceWater, level); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerBucketFill(PlayerBucketFillEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); - if (res != null && plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isRented(res.getName())) { - plugin.msg(player, lm.Rent_ModifyDeny); - event.setCancelled(true); - return; - } - - FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); - boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); - if (!hasdestroy) { - plugin.msg(player, lm.Flag_Deny, Flags.destroy); - event.setCancelled(true); - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getBlockClicked().getLocation()); + if (res != null && plugin.getConfigManager().preventRentModify() && plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isRented(res.getName())) { + plugin.msg(player, lm.Rent_ModifyDeny); + event.setCancelled(true); + return; + } + + FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlockClicked().getLocation(), player); + boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); + if (!hasdestroy) { + plugin.msg(player, lm.Flag_Deny, Flags.destroy); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerTeleport(PlayerTeleportEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); - if (player.hasMetadata("NPC")) - return; + if (player.hasMetadata("NPC")) + return; - Location loc = event.getTo(); - handleNewLocation(player, loc, false); - if (plugin.isResAdminOn(player)) { - return; - } + Location loc = event.getTo(); + handleNewLocation(player, loc, false); + if (plugin.isResAdminOn(player)) { + return; + } - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res == null) - return; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (res == null) + return; // if (event.getCause() == TeleportCause.UNKNOWN) { // if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) @@ -1853,384 +1855,384 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { // return; // } // } else - if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event - .getCause() == TeleportCause.PLUGIN) { - if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) - && !ResPerm.bypass_tp.hasPermission(player, 10000L) && !ResPerm.admin_move.hasPermission(player, 10000L)) { - event.setCancelled(true); - plugin.msg(player, lm.Residence_MoveDeny, res.getName()); - return; - } - } else if (event.getCause() == TeleportCause.ENDER_PEARL && (res.getPermissions().playerHas(player, Flags.enderpearl, FlagCombo.OnlyFalse) || res.getPermissions().playerHas(player, Flags.move, - FlagCombo.OnlyFalse))) { - event.setCancelled(true); - plugin.msg(player, lm.Residence_FlagDeny, Flags.enderpearl, res.getName()); - return; - } - if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && plugin.getConfigManager().isBlockAnyTeleportation() && !res.isOwner(player) && res.getPermissions() - .playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player)) { - event.setCancelled(true); - plugin.msg(player, lm.General_TeleportDeny, res.getName()); - return; - } - if (Utils.isChorusTeleport(event.getCause()) && !res.isOwner(player) && res.getPermissions().playerHas(player, Flags.chorustp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission( - player)) { - event.setCancelled(true); - plugin.msg(player, lm.Residence_FlagDeny, Flags.chorustp, res.getName()); - return; - } + if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event + .getCause() == TeleportCause.PLUGIN) { + if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) + && !ResPerm.bypass_tp.hasPermission(player, 10000L) && !ResPerm.admin_move.hasPermission(player, 10000L)) { + event.setCancelled(true); + plugin.msg(player, lm.Residence_MoveDeny, res.getName()); + return; + } + } else if (event.getCause() == TeleportCause.ENDER_PEARL && (res.getPermissions().playerHas(player, Flags.enderpearl, FlagCombo.OnlyFalse) || res.getPermissions().playerHas(player, Flags.move, + FlagCombo.OnlyFalse))) { + event.setCancelled(true); + plugin.msg(player, lm.Residence_FlagDeny, Flags.enderpearl, res.getName()); + return; + } + if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && plugin.getConfigManager().isBlockAnyTeleportation() && !res.isOwner(player) && res.getPermissions() + .playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player)) { + event.setCancelled(true); + plugin.msg(player, lm.General_TeleportDeny, res.getName()); + return; + } + if (Utils.isChorusTeleport(event.getCause()) && !res.isOwner(player) && res.getPermissions().playerHas(player, Flags.chorustp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission( + player)) { + event.setCancelled(true); + plugin.msg(player, lm.Residence_FlagDeny, Flags.chorustp, res.getName()); + return; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerDeath(final PlayerDeathEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - Player player = event.getEntity(); - if (player == null) - return; - if (player.hasMetadata("NPC")) - return; - Location loc = player.getLocation(); - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res == null) - return; - - if (res.getPermissions().has(Flags.keepinv, false)) { - event.setKeepInventory(true); - if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) - event.getDrops().clear(); - } - - if (res.getPermissions().has(Flags.keepexp, false)) { - event.setKeepLevel(true); - event.setDroppedExp(0); - } - - if (res.getPermissions().has(Flags.respawn, false) && Bukkit.getVersion().toString().contains("Spigot")) - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - try { - event.getEntity().spigot().respawn(); - } catch (Exception e) { - } - return; - } - }, 20L); + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + Player player = event.getEntity(); + if (player == null) + return; + if (player.hasMetadata("NPC")) + return; + Location loc = player.getLocation(); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (res == null) + return; + + if (res.getPermissions().has(Flags.keepinv, false)) { + event.setKeepInventory(true); + if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) + event.getDrops().clear(); + } + + if (res.getPermissions().has(Flags.keepexp, false)) { + event.setKeepLevel(true); + event.setDroppedExp(0); + } + + if (res.getPermissions().has(Flags.respawn, false) && Bukkit.getVersion().toString().contains("Spigot")) + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + try { + event.getEntity().spigot().respawn(); + } catch (Exception e) { + } + return; + } + }, 20L); } public static Location getSafeLocation(Location loc) { - int curY = loc.getBlockY(); + int curY = loc.getBlockY(); - for (int i = 0; i <= curY; i++) { - Block block = loc.clone().add(0, -i, 0).getBlock(); - if (!block.isEmpty() && block.getLocation().clone().add(0, 1, 0).getBlock().isEmpty() && block.getLocation().clone().add(0, 2, 0).getBlock().isEmpty()) - return loc.clone().add(0, -i + 1, 0); - } + for (int i = 0; i <= curY; i++) { + Block block = loc.clone().add(0, -i, 0).getBlock(); + if (!block.isEmpty() && block.getLocation().clone().add(0, 1, 0).getBlock().isEmpty() && block.getLocation().clone().add(0, 2, 0).getBlock().isEmpty()) + return loc.clone().add(0, -i + 1, 0); + } - for (int i = 0; i <= loc.getWorld().getMaxHeight() - curY; i++) { - Block block = loc.clone().add(0, i, 0).getBlock(); - if (!block.isEmpty() && block.getLocation().clone().add(0, 1, 0).getBlock().isEmpty() && block.getLocation().clone().add(0, 2, 0).getBlock().isEmpty()) - return loc.clone().add(0, i + 1, 0); - } + for (int i = 0; i <= loc.getWorld().getMaxHeight() - curY; i++) { + Block block = loc.clone().add(0, i, 0).getBlock(); + if (!block.isEmpty() && block.getLocation().clone().add(0, 1, 0).getBlock().isEmpty() && block.getLocation().clone().add(0, 2, 0).getBlock().isEmpty()) + return loc.clone().add(0, i + 1, 0); + } - return null; + return null; } private void fly(Player player, boolean state) { - if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) - return; - if (ResPerm.bypass_fly.hasPermission(player, 10000L)) - return; - if (!state) { - - // Lets not disable fly mode if player has access to fly command from another plugin - if (player.hasPermission("cmi.command.fly") || player.hasPermission("essentials.fly")) - return; - - boolean land = player.isFlying(); - player.setFlying(false); - player.setAllowFlight(false); - if (land) { - Location loc = getSafeLocation(player.getLocation()); - if (loc == null) { - // get defined land location in case no safe landing spot are found - loc = plugin.getConfigManager().getFlyLandLocation(); - if (loc == null) { - // get main world spawn location in case valid location is not found - loc = Bukkit.getWorlds().get(0).getSpawnLocation(); - } - } - if (loc != null) { - player.closeInventory(); - player.teleport(loc); - } - } - player.setFlying(false); - player.setAllowFlight(false); - } else { - player.setAllowFlight(true); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res != null && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && player.isOnline()) { - player.setAllowFlight(true); - } - if (res == null || !res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && player.isOnline()) { - if (player.hasPermission("cmi.command.fly") || player.hasPermission("essentials.fly")) - return; - - player.setFlying(false); - player.setAllowFlight(false); - } - }, 20L); - } + if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) + return; + if (ResPerm.bypass_fly.hasPermission(player, 10000L)) + return; + if (!state) { + + // Lets not disable fly mode if player has access to fly command from another plugin + if (player.hasPermission("cmi.command.fly") || player.hasPermission("essentials.fly")) + return; + + boolean land = player.isFlying(); + player.setFlying(false); + player.setAllowFlight(false); + if (land) { + Location loc = getSafeLocation(player.getLocation()); + if (loc == null) { + // get defined land location in case no safe landing spot are found + loc = plugin.getConfigManager().getFlyLandLocation(); + if (loc == null) { + // get main world spawn location in case valid location is not found + loc = Bukkit.getWorlds().get(0).getSpawnLocation(); + } + } + if (loc != null) { + player.closeInventory(); + player.teleport(loc); + } + } + player.setFlying(false); + player.setAllowFlight(false); + } else { + player.setAllowFlight(true); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res != null && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && player.isOnline()) { + player.setAllowFlight(true); + } + if (res == null || !res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && player.isOnline()) { + if (player.hasPermission("cmi.command.fly") || player.hasPermission("essentials.fly")) + return; + + player.setFlying(false); + player.setAllowFlight(false); + } + }, 20L); + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceChange(ResidenceChangedEvent event) { - ClaimedResidence newRes = event.getTo(); - ClaimedResidence oldRes = event.getFrom(); + ClaimedResidence newRes = event.getTo(); + ClaimedResidence oldRes = event.getFrom(); - Player player = event.getPlayer(); - if (player == null) - return; + Player player = event.getPlayer(); + if (player == null) + return; - checkSpecialFlags(player, newRes, oldRes); + checkSpecialFlags(player, newRes, oldRes); } private void checkSpecialFlags(Player player, ClaimedResidence newRes, ClaimedResidence oldRes) { - if (newRes == null && oldRes != null) { - if (Flags.night.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || Flags.day.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) - player.resetPlayerTime(); - - if (Flags.wspeed1.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || Flags.wspeed2.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.wspeed2, - FlagCombo.OnlyTrue)) { - player.setWalkSpeed(0.2F); - } - - if (Flags.sun.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || Flags.rain.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) - player.resetPlayerWeather(); - - if (Flags.fly.isGlobalyEnabled() && oldRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) { - fly(player, false); - } - - if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && oldRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(false); - - return; - } - - if (newRes != null && oldRes != null && !newRes.equals(oldRes)) { - if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) { - if (newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(true); - else if (oldRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) - player.setGlowing(false); - } - - if (Flags.fly.isGlobalyEnabled()) { - if (newRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) - fly(player, true); - else if (oldRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && !newRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) - fly(player, false); - } - - if (Flags.day.isGlobalyEnabled()) { - if (newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) - player.setPlayerTime(6000L, false); - else if (oldRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) - player.resetPlayerTime(); - } - - if (Flags.night.isGlobalyEnabled()) { - if (newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) - player.setPlayerTime(14000L, false); - else if (oldRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) - player.resetPlayerTime(); - } - - if (Flags.wspeed1.isGlobalyEnabled()) { - if (newRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); - else if (oldRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - player.setWalkSpeed(0.2F); - } - - if (Flags.wspeed2.isGlobalyEnabled()) { - if (newRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) { - player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); - } else if (oldRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - player.setWalkSpeed(0.2F); - } - - if (Flags.sun.isGlobalyEnabled()) { - if (newRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) { - player.setPlayerWeather(WeatherType.CLEAR); - } else if (oldRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) - player.resetPlayerWeather(); - } - - if (Flags.rain.isGlobalyEnabled()) { - if (newRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) { - player.setPlayerWeather(WeatherType.DOWNFALL); - } else if (oldRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) - player.resetPlayerWeather(); - } - return; - } - - if (newRes != null && oldRes == null) { - if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) { - player.setGlowing(true); - } - - if (Flags.fly.isGlobalyEnabled() && newRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) { - fly(player, true); - } - - if (Flags.day.isGlobalyEnabled() && newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) - player.setPlayerTime(6000L, false); - - if (Flags.night.isGlobalyEnabled() && newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) - player.setPlayerTime(14000L, false); - - if (Flags.wspeed1.isGlobalyEnabled() && newRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) - player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); - - if (Flags.wspeed2.isGlobalyEnabled() && newRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) - player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); - - if (Flags.sun.isGlobalyEnabled() && newRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) - player.setPlayerWeather(WeatherType.CLEAR); - - if (Flags.rain.isGlobalyEnabled() && newRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) - player.setPlayerWeather(WeatherType.DOWNFALL); - } + if (newRes == null && oldRes != null) { + if (Flags.night.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || Flags.day.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.resetPlayerTime(); + + if (Flags.wspeed1.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) || Flags.wspeed2.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.wspeed2, + FlagCombo.OnlyTrue)) { + player.setWalkSpeed(0.2F); + } + + if (Flags.sun.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) || Flags.rain.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + player.resetPlayerWeather(); + + if (Flags.fly.isGlobalyEnabled() && oldRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) { + fly(player, false); + } + + if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && oldRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(false); + + return; + } + + if (newRes != null && oldRes != null && !newRes.equals(oldRes)) { + if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1)) { + if (newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(true); + else if (oldRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) + player.setGlowing(false); + } + + if (Flags.fly.isGlobalyEnabled()) { + if (newRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) + fly(player, true); + else if (oldRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && !newRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) + fly(player, false); + } + + if (Flags.day.isGlobalyEnabled()) { + if (newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.setPlayerTime(6000L, false); + else if (oldRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.resetPlayerTime(); + } + + if (Flags.night.isGlobalyEnabled()) { + if (newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + player.setPlayerTime(14000L, false); + else if (oldRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + player.resetPlayerTime(); + } + + if (Flags.wspeed1.isGlobalyEnabled()) { + if (newRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); + else if (oldRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + player.setWalkSpeed(0.2F); + } + + if (Flags.wspeed2.isGlobalyEnabled()) { + if (newRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) { + player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); + } else if (oldRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + player.setWalkSpeed(0.2F); + } + + if (Flags.sun.isGlobalyEnabled()) { + if (newRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) { + player.setPlayerWeather(WeatherType.CLEAR); + } else if (oldRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) + player.resetPlayerWeather(); + } + + if (Flags.rain.isGlobalyEnabled()) { + if (newRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) { + player.setPlayerWeather(WeatherType.DOWNFALL); + } else if (oldRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + player.resetPlayerWeather(); + } + return; + } + + if (newRes != null && oldRes == null) { + if (Flags.glow.isGlobalyEnabled() && Version.isCurrentEqualOrHigher(Version.v1_9_R1) && newRes.getPermissions().has(Flags.glow, FlagCombo.OnlyTrue)) { + player.setGlowing(true); + } + + if (Flags.fly.isGlobalyEnabled() && newRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue)) { + fly(player, true); + } + + if (Flags.day.isGlobalyEnabled() && newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + player.setPlayerTime(6000L, false); + + if (Flags.night.isGlobalyEnabled() && newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + player.setPlayerTime(14000L, false); + + if (Flags.wspeed1.isGlobalyEnabled() && newRes.getPermissions().has(Flags.wspeed1, FlagCombo.OnlyTrue)) + player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed1().floatValue()); + + if (Flags.wspeed2.isGlobalyEnabled() && newRes.getPermissions().has(Flags.wspeed2, FlagCombo.OnlyTrue)) + player.setWalkSpeed(plugin.getConfigManager().getWalkSpeed2().floatValue()); + + if (Flags.sun.isGlobalyEnabled() && newRes.getPermissions().has(Flags.sun, FlagCombo.OnlyTrue)) + player.setPlayerWeather(WeatherType.CLEAR); + + if (Flags.rain.isGlobalyEnabled() && newRes.getPermissions().has(Flags.rain, FlagCombo.OnlyTrue)) + player.setPlayerWeather(WeatherType.DOWNFALL); + } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerMove(PlayerMoveEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - Player player = event.getPlayer(); - if (player == null) - return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + Player player = event.getPlayer(); + if (player == null) + return; - if (player.hasMetadata("NPC")) - return; + if (player.hasMetadata("NPC")) + return; - Location locfrom = event.getFrom(); - Location locto = event.getTo(); - if (locfrom.getBlockX() == locto.getBlockX() && locfrom.getBlockY() == locto.getBlockY() && locfrom.getBlockZ() == locto.getBlockZ()) - return; + Location locfrom = event.getFrom(); + Location locto = event.getTo(); + if (locfrom.getBlockX() == locto.getBlockX() && locfrom.getBlockY() == locto.getBlockY() && locfrom.getBlockZ() == locto.getBlockZ()) + return; - Long last = lastUpdate.get(player.getUniqueId()); - if (last != null && System.currentTimeMillis() - last < plugin.getConfigManager().getMinMoveUpdateInterval()) - return; + Long last = lastUpdate.get(player.getUniqueId()); + if (last != null && System.currentTimeMillis() - last < plugin.getConfigManager().getMinMoveUpdateInterval()) + return; - this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); + this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); - boolean handled = handleNewLocation(player, locto, true); - if (!handled) - event.setCancelled(true); + boolean handled = handleNewLocation(player, locto, true); + if (!handled) + event.setCancelled(true); - if (!plugin.getTeleportDelayMap().isEmpty() && plugin.getConfigManager().getTeleportDelay() > 0 && plugin.getTeleportDelayMap().contains(player - .getName())) { - plugin.getTeleportDelayMap().remove(player.getName()); - plugin.msg(player, lm.General_TeleportCanceled); - if (plugin.getConfigManager().isTeleportTitleMessage()) - CMITitleMessage.send(player, "", ""); - } + if (!plugin.getTeleportDelayMap().isEmpty() && plugin.getConfigManager().getTeleportDelay() > 0 && plugin.getTeleportDelayMap().contains(player + .getName())) { + plugin.getTeleportDelayMap().remove(player.getName()); + plugin.msg(player, lm.General_TeleportCanceled); + if (plugin.getConfigManager().isTeleportTitleMessage()) + CMITitleMessage.send(player, "", ""); + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerMoveInVehicle(VehicleMoveEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getVehicle().getWorld())) - return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getVehicle().getWorld())) + return; - if (event.getVehicle().getPassenger() == null) - return; + if (event.getVehicle().getPassenger() == null) + return; - List ent = new ArrayList(); + List ent = new ArrayList(); - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) - ent.addAll(event.getVehicle().getPassengers()); - else - ent.add(event.getVehicle().getPassenger()); + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) + ent.addAll(event.getVehicle().getPassengers()); + else + ent.add(event.getVehicle().getPassenger()); - for (Entity one : ent) { + for (Entity one : ent) { - if (!(one instanceof Player)) - continue; + if (!(one instanceof Player)) + continue; - Player player = (Player) one; - if (player == null) - continue; + Player player = (Player) one; + if (player == null) + continue; - if (player.hasMetadata("NPC")) - continue; + if (player.hasMetadata("NPC")) + continue; - Location locfrom = event.getFrom(); - Location locto = event.getTo(); - if (locfrom.getBlockX() == locto.getBlockX() && locfrom.getBlockY() == locto.getBlockY() && locfrom.getBlockZ() == locto.getBlockZ()) - continue; + Location locfrom = event.getFrom(); + Location locto = event.getTo(); + if (locfrom.getBlockX() == locto.getBlockX() && locfrom.getBlockY() == locto.getBlockY() && locfrom.getBlockZ() == locto.getBlockZ()) + continue; - Long last = lastUpdate.get(player.getUniqueId()); - if (last != null && System.currentTimeMillis() - last < plugin.getConfigManager().getMinMoveUpdateInterval()) - continue; + Long last = lastUpdate.get(player.getUniqueId()); + if (last != null && System.currentTimeMillis() - last < plugin.getConfigManager().getMinMoveUpdateInterval()) + continue; - this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); + this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); - boolean handled = handleNewLocation(player, locto, true); - if (!handled) { - event.getVehicle().teleport(event.getFrom()); - } + boolean handled = handleNewLocation(player, locto, true); + if (!handled) { + event.getVehicle().teleport(event.getFrom()); + } - if (!plugin.getTeleportDelayMap().isEmpty() && plugin.getConfigManager().getTeleportDelay() > 0 && plugin.getTeleportDelayMap().contains(player - .getName())) { - plugin.getTeleportDelayMap().remove(player.getName()); - plugin.msg(player, lm.General_TeleportCanceled); - if (plugin.getConfigManager().isTeleportTitleMessage()) - CMITitleMessage.send(player, "", ""); - } - } + if (!plugin.getTeleportDelayMap().isEmpty() && plugin.getConfigManager().getTeleportDelay() > 0 && plugin.getTeleportDelayMap().contains(player + .getName())) { + plugin.getTeleportDelayMap().remove(player.getName()); + plugin.msg(player, lm.General_TeleportCanceled); + if (plugin.getConfigManager().isTeleportTitleMessage()) + CMITitleMessage.send(player, "", ""); + } + } } private static boolean teleport(Player player, Location loc) { - if (player == null || !player.isOnline() || loc == null) - return false; + if (player == null || !player.isOnline() || loc == null) + return false; // PlayerTeleportEvent ev = new PlayerTeleportEvent(player, player.getLocation(), loc); // Bukkit.getServer().getPluginManager().callEvent(ev); - return player.teleport(loc); + return player.teleport(loc); } public boolean handleNewLocation(final Player player, Location loc, boolean move) { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - ClaimedResidence orres = res; - if (res != null) { - while (res.getSubzoneByLoc(loc) != null) { - res = res.getSubzoneByLoc(player.getLocation()); - } - } + ClaimedResidence orres = res; + if (res != null) { + while (res.getSubzoneByLoc(loc) != null) { + res = res.getSubzoneByLoc(player.getLocation()); + } + } - UUID uuid = player.getUniqueId(); + UUID uuid = player.getUniqueId(); - ClaimedResidence ResOld = currentRes.get(uuid); + ClaimedResidence ResOld = currentRes.get(uuid); - if (ResOld == null) { - currentRes.remove(uuid); - } else { - if (res != null && ResOld.getName().equals(res.getName())) { + if (ResOld == null) { + currentRes.remove(uuid); + } else { + if (res != null && ResOld.getName().equals(res.getName())) { // if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) // && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { // if (!res.isOwner(player)) { @@ -2281,216 +2283,216 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move // } // lastOutsideLoc.put(uuid, loc); // return true; - } - } - - if (!plugin.getAutoSelectionManager().getList().isEmpty()) { - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - plugin.getAutoSelectionManager().UpdateSelection(player); - } - }); - } - - if (res == null) { - lastOutsideLoc.put(uuid, loc); - if (ResOld != null) { - // New ResidenceChangeEvent - ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); - plugin.getServ().getPluginManager().callEvent(chgEvent); - currentRes.remove(uuid); - } - return true; - } - - if (move) { - if (res.getRaid().isUnderRaid()) { - if (res.getRaid().isAttacker(player.getUniqueId()) || res.getRaid().isDefender(player.getUniqueId())) { - return true; - } - Location lastLoc = lastOutsideLoc.get(uuid); - - if (plugin.getConfigManager().BounceAnimation()) { - Visualizer v = new Visualizer(player); - v.setErrorAreas(res); - v.setOnce(true); - plugin.getSelectionManager().showBounds(player, v); - } - - ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); - boolean teleported = false; - if (preRes != null && Flags.tp.isGlobalyEnabled() && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { - Location newLoc = res.getOutsideFreeLoc(loc, player); - player.closeInventory(); - teleported = teleport(player, newLoc); - } - - if (!teleported) { - if (lastLoc != null) { - StuckInfo info = updateStuckTeleport(player, loc); - player.closeInventory(); - if (info != null && info.getTimesTeleported() > 5) { - Location newLoc = res.getOutsideFreeLoc(loc, player); - teleported = teleport(player, newLoc); - } else { - teleported = teleport(player, lastLoc); - } - } - if (!teleported) { - Location newLoc = res.getOutsideFreeLoc(loc, player); - player.closeInventory(); - teleported = teleport(player, newLoc); - } - } - - switch (plugin.getConfigManager().getEnterLeaveMessageType()) { - case ActionBar: - case TitleBar: - FlagPermissions perms = res.getPermissions(); - if (perms.has(Flags.title, FlagCombo.TrueOrNone)) - CMIActionBar.send(player, plugin.msg(lm.Raid_cantDo)); - break; - case ChatBox: - plugin.msg(player, lm.Raid_cantDo, orres.getName()); - break; - default: - break; - } - return teleported; - } - - if (Flags.move.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move - .hasPermission(player, 10000L)) { - - Location lastLoc = lastOutsideLoc.get(uuid); - - if (plugin.getConfigManager().BounceAnimation()) { - Visualizer v = new Visualizer(player); - v.setErrorAreas(res); - v.setOnce(true); - plugin.getSelectionManager().showBounds(player, v); - } - - ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); - boolean teleported = false; - if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { - Location newLoc = res.getOutsideFreeLoc(loc, player); - player.closeInventory(); - teleported = teleport(player, newLoc); - } - - if (!teleported) { - if (lastLoc != null) { - StuckInfo info = updateStuckTeleport(player, loc); - player.closeInventory(); - if (info != null && info.getTimesTeleported() > 5) { - Location newLoc = res.getOutsideFreeLoc(loc, player); - teleported = teleport(player, newLoc); - } else { - teleported = teleport(player, lastLoc); - } - } - - if (!teleported) { - Location newLoc = res.getOutsideFreeLoc(loc, player); - player.closeInventory(); - teleported = teleport(player, newLoc); - } - } - - switch (plugin.getConfigManager().getEnterLeaveMessageType()) { - case ActionBar: - case TitleBar: - FlagPermissions perms = res.getPermissions(); - if (perms.has(Flags.title, FlagCombo.TrueOrNone)) - CMIActionBar.send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); - break; - case ChatBox: - plugin.msg(player, lm.Residence_MoveDeny, orres.getName()); - break; - default: - break; - } - return teleported; - } - - // Preventing fly in residence only when player has move permission - if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) - && !ResPerm.bypass_nofly.hasPermission(player, 10000L) && res.isOwner(player)) { - - Location lc = player.getLocation(); - Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); - location.setPitch(lc.getPitch()); - location.setYaw(lc.getYaw()); - int from = location.getBlockY(); - int maxH = location.getWorld().getMaxHeight() - 1; - boolean teleported = false; - - for (int i = 0; i < maxH; i++) { - location.setY(from - i); - Block block = location.getBlock(); - if (!isEmptyBlock(block)) { - location.setY(from - i + 1); - break; - } - if (location.getBlockY() <= 0) { - Location lastLoc = lastOutsideLoc.get(uuid); - player.closeInventory(); - if (lastLoc != null) - teleported = teleport(player, lastLoc); - else - teleported = teleport(player, res.getOutsideFreeLoc(loc, player)); - - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); - return teleported; - } - } - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); - player.closeInventory(); - teleported = teleport(player, location); - if (!teleported) - return false; - player.setFlying(false); - player.setAllowFlight(false); - } - } - - boolean cantMove = res != null && Flags.move.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) - && !ResPerm.admin_move.hasPermission(player, 10000L); - - if (!cantMove) { - lastOutsideLoc.put(uuid, loc); - } - - if (!currentRes.containsKey(uuid) || ResOld != res) { - - if (cantMove) { - Location lastLoc = lastOutsideLoc.get(uuid); - player.closeInventory(); - if (lastLoc != null && CMIMaterial.isAir(lastLoc.getBlock().getType())) { - Long last = lastUpdate.get(player.getUniqueId()); - // Fail safe in case we are triggering teleportation event check with this teleportion, we should teleport player outside residence instead of its repeating teleportation to avoid stack overflow - if (last != null && System.currentTimeMillis() - last > 45L) { - teleport(player, res.getOutsideFreeLoc(loc, player)); - } else { - this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); - teleport(player, lastLoc); - } - } else { - teleport(player, res.getOutsideFreeLoc(loc, player)); - } - return false; - } else { - currentRes.put(uuid, res); - } - - // New ResidenceChangedEvent - ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, res, player); - plugin.getServ().getPluginManager().callEvent(chgEvent); - - } - return true; + } + } + + if (!plugin.getAutoSelectionManager().getList().isEmpty()) { + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + plugin.getAutoSelectionManager().UpdateSelection(player); + } + }); + } + + if (res == null) { + lastOutsideLoc.put(uuid, loc); + if (ResOld != null) { + // New ResidenceChangeEvent + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, null, player); + plugin.getServ().getPluginManager().callEvent(chgEvent); + currentRes.remove(uuid); + } + return true; + } + + if (move) { + if (res.getRaid().isUnderRaid()) { + if (res.getRaid().isAttacker(player.getUniqueId()) || res.getRaid().isDefender(player.getUniqueId())) { + return true; + } + Location lastLoc = lastOutsideLoc.get(uuid); + + if (plugin.getConfigManager().BounceAnimation()) { + Visualizer v = new Visualizer(player); + v.setErrorAreas(res); + v.setOnce(true); + plugin.getSelectionManager().showBounds(player, v); + } + + ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); + boolean teleported = false; + if (preRes != null && Flags.tp.isGlobalyEnabled() && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); + teleported = teleport(player, newLoc); + } + + if (!teleported) { + if (lastLoc != null) { + StuckInfo info = updateStuckTeleport(player, loc); + player.closeInventory(); + if (info != null && info.getTimesTeleported() > 5) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + teleported = teleport(player, newLoc); + } else { + teleported = teleport(player, lastLoc); + } + } + if (!teleported) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); + teleported = teleport(player, newLoc); + } + } + + switch (plugin.getConfigManager().getEnterLeaveMessageType()) { + case ActionBar: + case TitleBar: + FlagPermissions perms = res.getPermissions(); + if (perms.has(Flags.title, FlagCombo.TrueOrNone)) + CMIActionBar.send(player, plugin.msg(lm.Raid_cantDo)); + break; + case ChatBox: + plugin.msg(player, lm.Raid_cantDo, orres.getName()); + break; + default: + break; + } + return teleported; + } + + if (Flags.move.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move + .hasPermission(player, 10000L)) { + + Location lastLoc = lastOutsideLoc.get(uuid); + + if (plugin.getConfigManager().BounceAnimation()) { + Visualizer v = new Visualizer(player); + v.setErrorAreas(res); + v.setOnce(true); + plugin.getSelectionManager().showBounds(player, v); + } + + ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); + boolean teleported = false; + if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); + teleported = teleport(player, newLoc); + } + + if (!teleported) { + if (lastLoc != null) { + StuckInfo info = updateStuckTeleport(player, loc); + player.closeInventory(); + if (info != null && info.getTimesTeleported() > 5) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + teleported = teleport(player, newLoc); + } else { + teleported = teleport(player, lastLoc); + } + } + + if (!teleported) { + Location newLoc = res.getOutsideFreeLoc(loc, player); + player.closeInventory(); + teleported = teleport(player, newLoc); + } + } + + switch (plugin.getConfigManager().getEnterLeaveMessageType()) { + case ActionBar: + case TitleBar: + FlagPermissions perms = res.getPermissions(); + if (perms.has(Flags.title, FlagCombo.TrueOrNone)) + CMIActionBar.send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); + break; + case ChatBox: + plugin.msg(player, lm.Residence_MoveDeny, orres.getName()); + break; + default: + break; + } + return teleported; + } + + // Preventing fly in residence only when player has move permission + if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) + && !ResPerm.bypass_nofly.hasPermission(player, 10000L) && res.isOwner(player)) { + + Location lc = player.getLocation(); + Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); + location.setPitch(lc.getPitch()); + location.setYaw(lc.getYaw()); + int from = location.getBlockY(); + int maxH = location.getWorld().getMaxHeight() - 1; + boolean teleported = false; + + for (int i = 0; i < maxH; i++) { + location.setY(from - i); + Block block = location.getBlock(); + if (!isEmptyBlock(block)) { + location.setY(from - i + 1); + break; + } + if (location.getBlockY() <= 0) { + Location lastLoc = lastOutsideLoc.get(uuid); + player.closeInventory(); + if (lastLoc != null) + teleported = teleport(player, lastLoc); + else + teleported = teleport(player, res.getOutsideFreeLoc(loc, player)); + + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); + return teleported; + } + } + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); + player.closeInventory(); + teleported = teleport(player, location); + if (!teleported) + return false; + player.setFlying(false); + player.setAllowFlight(false); + } + } + + boolean cantMove = res != null && Flags.move.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) + && !ResPerm.admin_move.hasPermission(player, 10000L); + + if (!cantMove) { + lastOutsideLoc.put(uuid, loc); + } + + if (!currentRes.containsKey(uuid) || ResOld != res) { + + if (cantMove) { + Location lastLoc = lastOutsideLoc.get(uuid); + player.closeInventory(); + if (lastLoc != null && CMIMaterial.isAir(lastLoc.getBlock().getType())) { + Long last = lastUpdate.get(player.getUniqueId()); + // Fail safe in case we are triggering teleportation event check with this teleportion, we should teleport player outside residence instead of its repeating teleportation to avoid stack overflow + if (last != null && System.currentTimeMillis() - last > 45L) { + teleport(player, res.getOutsideFreeLoc(loc, player)); + } else { + this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); + teleport(player, lastLoc); + } + } else { + teleport(player, res.getOutsideFreeLoc(loc, player)); + } + return false; + } else { + currentRes.put(uuid, res); + } + + // New ResidenceChangedEvent + ResidenceChangedEvent chgEvent = new ResidenceChangedEvent(ResOld, res, player); + plugin.getServ().getPluginManager().callEvent(chgEvent); + + } + return true; } HashMap informar = new HashMap(); @@ -2498,237 +2500,237 @@ public void run() { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { - ClaimedResidence from = event.getFrom(); - ClaimedResidence to = event.getTo(); - String message = null; - - ClaimedResidence res = from == null ? to : from; - - if (from == null && to != null) { - message = to.getEnterMessage(); - res = to; - } - - if (from != null && to == null) { - message = from.getLeaveMessage(); - res = from; - } - - if (from != null && to != null) { - message = to.getEnterMessage(); - res = to; - } - Player player = event.getPlayer(); - if (player.hasMetadata("NPC")) - return; - if (message != null) { - Long time = informar.get(player.getUniqueId()); - if (time == null || time + 100L < System.currentTimeMillis()) { - - if (res.getPermissions().has(Flags.title, FlagCombo.TrueOrNone)) - switch (plugin.getConfigManager().getEnterLeaveMessageType()) { - case ActionBar: - CMIActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) - .toString()); - break; - case ChatBox: - plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res, message)); - break; - case TitleBar: - String title = ChatColor.YELLOW + insertMessages(player, res, message); - String subtitle = ""; - if (title.contains("\\n")) { - subtitle = ChatColor.YELLOW + title.split("\\\\n", 2)[1]; - title = title.split("\\\\n", 2)[0]; - } - CMITitleMessage.send(player, title, subtitle); - break; - default: - break; - } - informar.put(player.getUniqueId(), System.currentTimeMillis()); - } - } - - if (to != null && plugin.getConfigManager().isEnterAnimation() && to.isTopArea() && (from == null || from.getTopParent() != to)) { - to.showBounds(player, true); - } - - if (from == null || res == null) { - return; - } - - if (res != from.getParent() && plugin.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (plugin.getRentManager().isForRent(from) || plugin - .getTransactionManager().isForSale(from))) { - if (plugin.getRentManager().isForRent(from) && !plugin.getRentManager().isRented(from)) { - RentableLand rentable = plugin.getRentManager().getRentableLand(from); - if (rentable != null) - CMIActionBar.send(player, plugin.msg(lm.Residence_CanBeRented, from.getName(), rentable.cost, rentable.days)); - } else if (plugin.getTransactionManager().isForSale(from) && !res.isOwner(player)) { - int sale = plugin.getTransactionManager().getSaleAmount(from); - CMIActionBar.send(player, plugin.msg(lm.Residence_CanBeBought, from.getName(), sale)); - } - } + ClaimedResidence from = event.getFrom(); + ClaimedResidence to = event.getTo(); + String message = null; + + ClaimedResidence res = from == null ? to : from; + + if (from == null && to != null) { + message = to.getEnterMessage(); + res = to; + } + + if (from != null && to == null) { + message = from.getLeaveMessage(); + res = from; + } + + if (from != null && to != null) { + message = to.getEnterMessage(); + res = to; + } + Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; + if (message != null) { + Long time = informar.get(player.getUniqueId()); + if (time == null || time + 100L < System.currentTimeMillis()) { + + if (res.getPermissions().has(Flags.title, FlagCombo.TrueOrNone)) + switch (plugin.getConfigManager().getEnterLeaveMessageType()) { + case ActionBar: + CMIActionBar.send(player, (new StringBuilder()).append(ChatColor.YELLOW).append(insertMessages(player, res, message)) + .toString()); + break; + case ChatBox: + plugin.msg(player, ChatColor.YELLOW + this.insertMessages(player, res, message)); + break; + case TitleBar: + String title = ChatColor.YELLOW + insertMessages(player, res, message); + String subtitle = ""; + if (title.contains("\\n")) { + subtitle = ChatColor.YELLOW + title.split("\\\\n", 2)[1]; + title = title.split("\\\\n", 2)[0]; + } + CMITitleMessage.send(player, title, subtitle); + break; + default: + break; + } + informar.put(player.getUniqueId(), System.currentTimeMillis()); + } + } + + if (to != null && plugin.getConfigManager().isEnterAnimation() && to.isTopArea() && (from == null || from.getTopParent() != to)) { + to.showBounds(player, true); + } + + if (from == null || res == null) { + return; + } + + if (res != from.getParent() && plugin.getConfigManager().isExtraEnterMessage() && !res.isOwner(player) && (plugin.getRentManager().isForRent(from) || plugin + .getTransactionManager().isForSale(from))) { + if (plugin.getRentManager().isForRent(from) && !plugin.getRentManager().isRented(from)) { + RentableLand rentable = plugin.getRentManager().getRentableLand(from); + if (rentable != null) + CMIActionBar.send(player, plugin.msg(lm.Residence_CanBeRented, from.getName(), rentable.cost, rentable.days)); + } else if (plugin.getTransactionManager().isForSale(from) && !res.isOwner(player)) { + int sale = plugin.getTransactionManager().getSaleAmount(from); + CMIActionBar.send(player, plugin.msg(lm.Residence_CanBeBought, from.getName(), sale)); + } + } } private StuckInfo updateStuckTeleport(Player player, Location loc) { - if (loc.getY() >= player.getLocation().getY()) - return null; + if (loc.getY() >= player.getLocation().getY()) + return null; - StuckInfo info = stuckTeleportCounter.get(player.getUniqueId()); - if (info == null) { - info = new StuckInfo(player); - stuckTeleportCounter.put(player.getUniqueId(), info); - } - info.updateLastTp(); - return info; + StuckInfo info = stuckTeleportCounter.get(player.getUniqueId()); + if (info == null) { + info = new StuckInfo(player); + stuckTeleportCounter.put(player.getUniqueId(), info); + } + info.updateLastTp(); + return info; } public String insertMessages(Player player, ClaimedResidence res, String message) { - try { - message = message.replace("%player", player.getName()); - message = message.replace("%owner", res.getPermissions().getOwner()); - message = message.replace("%residence", res.getName()); - message = message.replace("%zone", res.getResidenceName()); - } catch (Exception ex) { - return ""; - } - return message; + try { + message = message.replace("%player", player.getName()); + message = message.replace("%owner", res.getPermissions().getOwner()); + message = message.replace("%residence", res.getName()); + message = message.replace("%zone", res.getResidenceName()); + } catch (Exception ex) { + return ""; + } + return message; } @SuppressWarnings("deprecation") public void doHeals() { - if (!Flags.healing.isGlobalyEnabled()) - return; - try { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (!Flags.healing.isGlobalyEnabled()) + return; + try { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { - ClaimedResidence res = getCurrentResidence(player.getUniqueId()); + ClaimedResidence res = getCurrentResidence(player.getUniqueId()); - if (res == null) - continue; + if (res == null) + continue; - if (!res.getPermissions().has(Flags.healing, false)) - continue; + if (!res.getPermissions().has(Flags.healing, false)) + continue; - Damageable damage = player; - double health = damage.getHealth(); - if (health < damage.getMaxHealth() && !player.isDead()) { - player.setHealth(health + 1); - } - } - } catch (Exception ex) { - } + Damageable damage = player; + double health = damage.getHealth(); + if (health < damage.getMaxHealth() && !player.isDead()) { + player.setHealth(health + 1); + } + } + } catch (Exception ex) { + } } public void feed() { - if (!Flags.feed.isGlobalyEnabled()) - return; - try { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (!Flags.feed.isGlobalyEnabled()) + return; + try { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { - ClaimedResidence res = getCurrentResidence(player.getUniqueId()); + ClaimedResidence res = getCurrentResidence(player.getUniqueId()); - if (res == null) - continue; + if (res == null) + continue; - if (!res.getPermissions().has(Flags.feed, false)) - continue; + if (!res.getPermissions().has(Flags.feed, false)) + continue; - int food = player.getFoodLevel(); - if (food < 20 && !player.isDead()) { - player.setFoodLevel(food + 1); - } - } - } catch (Exception ex) { - } + int food = player.getFoodLevel(); + if (food < 20 && !player.isDead()) { + player.setFoodLevel(food + 1); + } + } + } catch (Exception ex) { + } } public void DespawnMobs() { - if (!Flags.nomobs.isGlobalyEnabled()) - return; - - try { - - Set residences = new HashSet(); - - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - ClaimedResidence res = getCurrentResidence(player.getUniqueId()); - if (res == null) - continue; - if (!res.getPermissions().has(Flags.nomobs, false)) { - for (ClaimedResidence sub : res.getSubzonesMap().values()) { - if (!sub.getPermissions().has(Flags.nomobs, false)) { - continue; - } - residences.add(sub); - } - continue; - } - residences.add(res); - } - - for (ClaimedResidence res : residences) { - Set entities = new HashSet(); - - World world = Bukkit.getWorld(res.getWorld()); - - if (world == null) - continue; - - for (CuboidArea area : res.getAreaMap().values()) { - for (ChunkRef chunk : area.getChunks()) { - entities.addAll(Arrays.asList(world.getChunkAt(chunk.getX(), chunk.getZ()).getEntities())); - } - } - for (Entity ent : entities) { - if (!ResidenceEntityListener.isMonster(ent)) - continue; - if (!res.containsLoc(ent.getLocation())) - continue; - ClaimedResidence ares = plugin.getResidenceManager().getByLoc(ent.getLocation()); - if (ares.getPermissions().has(Flags.nomobs, FlagCombo.OnlyTrue)) { - ent.remove(); - } - } - } - } catch (Exception ex) { - } + if (!Flags.nomobs.isGlobalyEnabled()) + return; + + try { + + Set residences = new HashSet(); + + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + ClaimedResidence res = getCurrentResidence(player.getUniqueId()); + if (res == null) + continue; + if (!res.getPermissions().has(Flags.nomobs, false)) { + for (ClaimedResidence sub : res.getSubzonesMap().values()) { + if (!sub.getPermissions().has(Flags.nomobs, false)) { + continue; + } + residences.add(sub); + } + continue; + } + residences.add(res); + } + + for (ClaimedResidence res : residences) { + Set entities = new HashSet(); + + World world = Bukkit.getWorld(res.getWorld()); + + if (world == null) + continue; + + for (CuboidArea area : res.getAreaMap().values()) { + for (ChunkRef chunk : area.getChunks()) { + entities.addAll(Arrays.asList(world.getChunkAt(chunk.getX(), chunk.getZ()).getEntities())); + } + } + for (Entity ent : entities) { + if (!ResidenceEntityListener.isMonster(ent)) + continue; + if (!res.containsLoc(ent.getLocation())) + continue; + ClaimedResidence ares = plugin.getResidenceManager().getByLoc(ent.getLocation()); + if (ares.getPermissions().has(Flags.nomobs, FlagCombo.OnlyTrue)) { + ent.remove(); + } + } + } + } catch (Exception ex) { + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerChat(AsyncPlayerChatEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; - String pname = event.getPlayer().getName(); - if (!chatenabled || !playerToggleChat.contains(event.getPlayer().getUniqueId())) - return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + String pname = event.getPlayer().getName(); + if (!chatenabled || !playerToggleChat.contains(event.getPlayer().getUniqueId())) + return; - ChatChannel channel = plugin.getChatManager().getPlayerChannel(pname); - if (channel != null) { - channel.chat(pname, event.getMessage()); - } - event.setCancelled(true); + ChatChannel channel = plugin.getChatManager().getPlayerChannel(pname); + if (channel != null) { + channel.chat(pname, event.getMessage()); + } + event.setCancelled(true); } public void tooglePlayerResidenceChat(Player player, String residence) { - playerToggleChat.add(player.getUniqueId()); - plugin.msg(player, lm.Chat_ChatChannelChange, residence); + playerToggleChat.add(player.getUniqueId()); + plugin.msg(player, lm.Chat_ChatChannelChange, residence); } @Deprecated public void removePlayerResidenceChat(String pname) { - removePlayerResidenceChat(Bukkit.getPlayer(pname)); + removePlayerResidenceChat(Bukkit.getPlayer(pname)); } public void removePlayerResidenceChat(Player player) { - if (player == null) - return; - playerToggleChat.remove(player.getUniqueId()); - plugin.msg(player, lm.Chat_ChatChannelLeave); + if (player == null) + return; + playerToggleChat.remove(player.getUniqueId()); + plugin.msg(player, lm.Chat_ChatChannelLeave); } // @Deprecated @@ -2740,6 +2742,6 @@ public void removePlayerResidenceChat(Player player) { // } public ClaimedResidence getCurrentResidence(UUID uuid) { - return currentRes.get(uuid); + return currentRes.get(uuid); } } From 9baf17feb9fc9570a71cec809698da20d1afa30f Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 Aug 2022 14:57:30 +0300 Subject: [PATCH 0957/1142] Item pickup for mobs fix --- .../bekvon/bukkit/residence/Residence.java | 7 ++- .../listeners/ResidencePlayerListener.java | 6 +++ .../ResidencePlayerListener1_12.java | 48 +++++++++++++++++++ .../residence/protection/FlagPermissions.java | 5 +- 4 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_12.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index d04b4ceca..8915e74eb 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -77,6 +77,7 @@ import com.bekvon.bukkit.residence.listeners.ResidenceFixesListener; import com.bekvon.bukkit.residence.listeners.ResidenceLWCListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_12; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_14; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_15; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_16; @@ -696,8 +697,10 @@ public void run() { blistener = new ResidenceBlockListener(this); plistener = new ResidencePlayerListener(this); - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) - pm.registerEvents(new ResidencePlayerListener1_9(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) + pm.registerEvents(new ResidencePlayerListener1_9(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_12_R1)) + pm.registerEvents(new ResidencePlayerListener1_12(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) pm.registerEvents(new ResidencePlayerListener1_14(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_15_R1)) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 10d72dd59..ea3e63595 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -160,6 +160,12 @@ else if (Flags.jump3.isGlobalyEnabled() && perms.has(Flags.jump3, FlagCombo.Only public void onPlayerPickupItemEvent(PlayerPickupItemEvent event) { if (!Flags.itempickup.isGlobalyEnabled()) return; + + // As of 1.12 version EntityPickupItemEvent event needs to be used. This is only for older servers + // New handling located at ResidencePlayerListener1_12 + if (Version.isCurrentEqualOrHigher(Version.v1_12_R1)) + return; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getItem().getLocation()); if (res == null) return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_12.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_12.java new file mode 100644 index 000000000..87b68dcff --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_12.java @@ -0,0 +1,48 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPickupItemEvent; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + +import net.Zrips.CMILib.Logs.CMIDebug; + +public class ResidencePlayerListener1_12 implements Listener { + + private Residence plugin; + + public ResidencePlayerListener1_12(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerPickupItemEvent(EntityPickupItemEvent event) { + if (!Flags.itempickup.isGlobalyEnabled()) + return; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getItem().getLocation()); + if (res == null) + return; + if (event.getEntity().hasMetadata("NPC")) + return; + + if (event.getEntity() instanceof Player) { + Player player = (Player) event.getEntity(); + if (!res.getPermissions().playerHas(player, Flags.itempickup, FlagCombo.OnlyFalse)) + return; + if (ResPerm.bypass_itempickup.hasPermission(player, 10000L)) + return; + } else { + if (!res.getPermissions().has(Flags.itempickup, FlagCombo.OnlyFalse)) + return; + } + event.setCancelled(true); + event.getItem().setPickupDelay(plugin.getConfigManager().getItemPickUpDelay() * 20); + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 88910d198..8f3b0632f 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -1269,10 +1269,11 @@ public String listGroupFlags() { if (!perms.equals("none")) { sbuild .append(next) + .append(ChatColor.WHITE) .append("[") .append(ChatColor.DARK_AQUA) - .append(perms) - .append(ChatColor.RED) + .append(perms) + .append(ChatColor.WHITE) .append("] "); } } From e9eb9e8a65ce9e99820f9553a66b861e95e94255 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 Aug 2022 15:16:15 +0300 Subject: [PATCH 0958/1142] Res auto fix for not having enough money when you have exact amount --- .../bukkit/residence/commands/auto.java | 516 +++++++++--------- .../residence/economy/BlackHoleEconomy.java | 21 +- .../bukkit/residence/economy/CMIEconomy.java | 10 + .../residence/economy/EconomyInterface.java | 2 + .../economy/EssentialsEcoAdapter.java | 148 ++--- .../residence/economy/IConomy6Adapter.java | 79 +-- .../residence/economy/RealShopEconomy.java | 59 +- .../ResidencePlayerListener1_12.java | 2 - .../vaultinterface/ResidenceVaultAdapter.java | 143 ++--- 9 files changed, 513 insertions(+), 467 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index e6589ab01..2544a1a51 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -22,6 +22,7 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; public class auto implements cmd { @@ -29,295 +30,296 @@ public class auto implements cmd { @CommandAnnotation(simple = true, priority = 150, regVar = { 0, 1, 2 }, consoleVar = { 666 }) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - Player player = (Player) sender; + Player player = (Player) sender; - String resName = null; + String resName = null; - int lenght = -1; - if (args.length == 1) - try { - lenght = Integer.parseInt(args[0]); - } catch (Exception | Error e) { + int lenght = -1; + if (args.length == 1) + try { + lenght = Integer.parseInt(args[0]); + } catch (Exception | Error e) { - } + } - if (args.length > 0 && lenght == -1) - resName = args[0]; - else - resName = player.getName(); + if (args.length > 0 && lenght == -1) + resName = args[0]; + else + resName = player.getName(); - if (args.length == 2) { - resName = args[0]; - try { - lenght = Integer.parseInt(args[1]); - } catch (Exception ex) { - } - } + if (args.length == 2) { + resName = args[0]; + try { + lenght = Integer.parseInt(args[1]); + } catch (Exception ex) { + } + } - Residence.getInstance().getPlayerManager().getResidencePlayer(player).forceUpdateGroup(); + Residence.getInstance().getPlayerManager().getResidencePlayer(player).forceUpdateGroup(); - Location loc = player.getLocation(); + Location loc = player.getLocation(); - int minY = loc.getBlockY() - 1; - int maxY = loc.getBlockY() + 1; - if (plugin.getConfigManager().isSelectionIgnoreY()) { - minY = plugin.getSelectionManager().getSelection(player).getMinYAllowed(); - maxY = plugin.getSelectionManager().getSelection(player).getMaxYAllowed(); - } - loc.setY(minY); - plugin.getSelectionManager().placeLoc1(player, loc.clone(), false); - loc.setY(maxY); - plugin.getSelectionManager().placeLoc2(player, loc.clone(), false); + int minY = loc.getBlockY() - 1; + int maxY = loc.getBlockY() + 1; + if (plugin.getConfigManager().isSelectionIgnoreY()) { + minY = plugin.getSelectionManager().getSelection(player).getMinYAllowed(); + maxY = plugin.getSelectionManager().getSelection(player).getMaxYAllowed(); + } + loc.setY(minY); + plugin.getSelectionManager().placeLoc1(player, loc.clone(), false); + loc.setY(maxY); + plugin.getSelectionManager().placeLoc2(player, loc.clone(), false); - boolean result = resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true, lenght); + boolean result = resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true, lenght); - if (!result) { - Residence.getInstance().msg(player, lm.Area_SizeLimit); - return true; - } + if (!result) { + Residence.getInstance().msg(player, lm.Area_SizeLimit); + return true; + } - ClaimedResidence collision = Residence.getInstance().getResidenceManager().collidesWithResidence(plugin.getSelectionManager().getSelectionCuboid(player)); + ClaimedResidence collision = Residence.getInstance().getResidenceManager().collidesWithResidence(plugin.getSelectionManager().getSelectionCuboid(player)); - if (collision != null) { - Residence.getInstance().msg(player, lm.Area_Collision, collision.getResidenceName()); - return null; - } + if (collision != null) { + Residence.getInstance().msg(player, lm.Area_Collision, collision.getResidenceName()); + return null; + } - if (plugin.getResidenceManager().getByName(resName) != null) { - for (int i = 1; i < 50; i++) { - String tempName = resName + plugin.getConfigManager().ARCIncrementFormat().replace("[number]", i + ""); - if (plugin.getResidenceManager().getByName(tempName) == null) { - resName = tempName; - break; - } - } - } + if (plugin.getResidenceManager().getByName(resName) != null) { + for (int i = 1; i < 50; i++) { + String tempName = resName + plugin.getConfigManager().ARCIncrementFormat().replace("[number]", i + ""); + if (plugin.getResidenceManager().getByName(tempName) == null) { + resName = tempName; + break; + } + } + } - if (resName == null) - resName = sender.getName() + (new Random().nextInt(99950) + 50); + if (resName == null) + resName = sender.getName() + (new Random().nextInt(99950) + 50); - player.performCommand((resadmin ? "resadmin" : "res") + " create " + resName); + player.performCommand((resadmin ? "resadmin" : "res") + " create " + resName); - return true; + return true; } private static int getMax(int max) { - int arcmin = Residence.getInstance().getConfigManager().getARCSizeMin(); - int arcmax = Residence.getInstance().getConfigManager().getARCSizeMax(); - int maxV = (int) (max * (Residence.getInstance().getConfigManager().getARCSizePercentage() / 100D)); - maxV = maxV < arcmin && arcmin < max ? arcmin : maxV; - maxV = maxV > arcmax ? arcmax : maxV; - return maxV; + int arcmin = Residence.getInstance().getConfigManager().getARCSizeMin(); + int arcmax = Residence.getInstance().getConfigManager().getARCSizeMax(); + int maxV = (int) (max * (Residence.getInstance().getConfigManager().getARCSizePercentage() / 100D)); + maxV = maxV < arcmin && arcmin < max ? arcmin : maxV; + maxV = maxV > arcmax ? arcmax : maxV; + return maxV; } private static int getMin(int min, int max) { - if (!Residence.getInstance().getConfigManager().isARCSizeEnabled()) - return min; - int percent = (int) (max * (Residence.getInstance().getConfigManager().getARCSizePercentage() / 100D)); - int arcmin = Residence.getInstance().getConfigManager().getARCSizeMin(); - int arcmax = Residence.getInstance().getConfigManager().getARCSizeMax(); - int pmin = arcmin < percent ? percent : arcmin; - int newmin = min < pmin ? pmin : min; - newmin = newmin > arcmax ? arcmin : newmin; - newmin = newmin > max ? max : newmin; - - if (newmin >= max) { - newmin = (int) (min + ((max - min) * (Residence.getInstance().getConfigManager().getARCSizePercentage() / 100D))); - } - - return newmin; + if (!Residence.getInstance().getConfigManager().isARCSizeEnabled()) + return min; + int percent = (int) (max * (Residence.getInstance().getConfigManager().getARCSizePercentage() / 100D)); + int arcmin = Residence.getInstance().getConfigManager().getARCSizeMin(); + int arcmax = Residence.getInstance().getConfigManager().getARCSizeMax(); + int pmin = arcmin < percent ? percent : arcmin; + int newmin = min < pmin ? pmin : min; + newmin = newmin > arcmax ? arcmin : newmin; + newmin = newmin > max ? max : newmin; + + if (newmin >= max) { + newmin = (int) (min + ((max - min) * (Residence.getInstance().getConfigManager().getARCSizePercentage() / 100D))); + } + + return newmin; } public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, boolean checkBalance, int max) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - - double cost = cuboid.getCost(group); - - double balance = 0; - if (plugin.getEconomyManager() != null) - balance = plugin.getEconomyManager().getBalance(player.getName()); - - direction dir = direction.Top; - - List locked = new ArrayList(); - - boolean checkCollision = plugin.getConfigManager().isARCCheckCollision(); - int skipped = 0; - int done = 0; - - int maxX = getMax(group.getMaxX()); - int maxY = getMax(group.getMaxY()); - int maxZ = getMax(group.getMaxZ()); - - if (maxX > max && max > 0) - maxX = max; - if (maxY > max && max > 0) - maxY = max; - if (maxZ > max && max > 0) - maxZ = max; - - if (maxX <= 1) - maxX = (group.getMaxX() - group.getMinX()) / 2 + group.getMinX(); - - if (maxY <= 1) - maxY = (group.getMaxY() - group.getMinY()) / 2 + group.getMinY(); - - if (maxZ <= 1) - maxZ = (group.getMaxZ() - group.getMinZ()) / 2 + group.getMinZ(); - - int minY = CMIWorld.getMinHeight(cuboid.getWorld()); - - while (true) { - if (Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (dir.equals(direction.Top) || dir.equals(direction.Bottom))) { - dir = dir.getNext(); - continue; - } - done++; - - if (skipped >= 6) { - break; - } - - // fail safe if loop keeps going on - if (done > 100000) { - break; - } - - if (locked.contains(dir)) { - dir = dir.getNext(); - skipped++; - continue; - } - - CuboidArea c = new CuboidArea(); - c.setLowLocation(cuboid.getLowLocation().clone().add(-dir.getLow().getX(), -dir.getLow().getY(), -dir.getLow().getZ())); - c.setHighLocation(cuboid.getHighLocation().clone().add(dir.getHigh().getX(), dir.getHigh().getY(), dir.getHigh().getZ())); - - if ((dir.equals(direction.Top) || dir.equals(direction.Bottom)) && c.getLowVector().getY() < minY) { - c.getLowVector().setY(minY); - locked.add(dir); - dir = dir.getNext(); - if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { - skipped++; - } - continue; - } - - if ((dir.equals(direction.Top) || dir.equals(direction.Bottom)) && c.getHighVector().getY() >= c.getWorld().getMaxHeight()) { - c.getHighVector().setY(c.getWorld().getMaxHeight() - 1); - locked.add(dir); - dir = dir.getNext(); - if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { - skipped++; - } - continue; - } - - if (checkCollision && plugin.getResidenceManager().collidesWithResidence(c) != null) { - locked.add(dir); - dir = dir.getNext(); - skipped++; - continue; - } - - if (maxX > 0 && maxX < c.getXSize() || c.getXSize() > group.getMaxX()) { - locked.add(dir); - dir = dir.getNext(); - skipped++; - continue; - } - - if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (maxY > 0 && maxY < c.getYSize() || c.getYSize() > group.getMaxY() + (-group.getMinY()))) { - locked.add(dir); - dir = dir.getNext(); - skipped++; - continue; - } - - if (maxZ > 0 && maxZ < c.getZSize() || c.getZSize() > group.getMaxZ()) { - locked.add(dir); - dir = dir.getNext(); - skipped++; - continue; - } - - skipped = 0; - - if (checkBalance && plugin.getConfigManager().enableEconomy()) { - cost = c.getCost(group); - if (cost > balance) { - plugin.msg(player, lm.Economy_NotEnoughMoney); - break; - } - } - - cuboid.setLowLocation(c.getLowLocation()); - cuboid.setHighLocation(c.getHighLocation()); - - dir = dir.getNext(); - } - - plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); - plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); - - cuboid = plugin.getSelectionManager().getSelectionCuboid(player); - - if (cuboid.getXSize() > group.getMaxX() || cuboid.getYSize() > group.getMaxY() + (-group.getMinY()) || cuboid.getZSize() > group.getMaxZ()) { - return false; - } - - return true; + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + + double cost = cuboid.getCost(group); + + double balance = 0; + if (plugin.getEconomyManager() != null) + balance = plugin.getEconomyManager().getBalance(player.getName()); + + direction dir = direction.Top; + + List locked = new ArrayList(); + + boolean checkCollision = plugin.getConfigManager().isARCCheckCollision(); + int skipped = 0; + int done = 0; + + int maxX = getMax(group.getMaxX()); + int maxY = getMax(group.getMaxY()); + int maxZ = getMax(group.getMaxZ()); + + if (maxX > max && max > 0) + maxX = max; + if (maxY > max && max > 0) + maxY = max; + if (maxZ > max && max > 0) + maxZ = max; + + if (maxX <= 1) + maxX = (group.getMaxX() - group.getMinX()) / 2 + group.getMinX(); + + if (maxY <= 1) + maxY = (group.getMaxY() - group.getMinY()) / 2 + group.getMinY(); + + if (maxZ <= 1) + maxZ = (group.getMaxZ() - group.getMinZ()) / 2 + group.getMinZ(); + + int minY = CMIWorld.getMinHeight(cuboid.getWorld()); + + while (true) { + if (Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (dir.equals(direction.Top) || dir.equals(direction.Bottom))) { + dir = dir.getNext(); + continue; + } + done++; + + if (skipped >= 6) { + break; + } + + // fail safe if loop keeps going on + if (done > 100000) { + break; + } + + if (locked.contains(dir)) { + dir = dir.getNext(); + skipped++; + continue; + } + + CuboidArea c = new CuboidArea(); + c.setLowLocation(cuboid.getLowLocation().clone().add(-dir.getLow().getX(), -dir.getLow().getY(), -dir.getLow().getZ())); + c.setHighLocation(cuboid.getHighLocation().clone().add(dir.getHigh().getX(), dir.getHigh().getY(), dir.getHigh().getZ())); + + if ((dir.equals(direction.Top) || dir.equals(direction.Bottom)) && c.getLowVector().getY() < minY) { + c.getLowVector().setY(minY); + locked.add(dir); + dir = dir.getNext(); + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { + skipped++; + } + continue; + } + + if ((dir.equals(direction.Top) || dir.equals(direction.Bottom)) && c.getHighVector().getY() >= c.getWorld().getMaxHeight()) { + c.getHighVector().setY(c.getWorld().getMaxHeight() - 1); + locked.add(dir); + dir = dir.getNext(); + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { + skipped++; + } + continue; + } + + if (checkCollision && plugin.getResidenceManager().collidesWithResidence(c) != null) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (maxX > 0 && maxX < c.getXSize() || c.getXSize() > group.getMaxX()) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (maxY > 0 && maxY < c.getYSize() || c.getYSize() > group.getMaxY() + (-group.getMinY()))) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (maxZ > 0 && maxZ < c.getZSize() || c.getZSize() > group.getMaxZ()) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + skipped = 0; + + if (checkBalance && plugin.getConfigManager().enableEconomy()) { + cost = c.getCost(group); + + if (!Residence.getInstance().getEconomyManager().canAfford(player, cost)) { + plugin.msg(player, lm.Economy_NotEnoughMoney); + break; + } + } + + cuboid.setLowLocation(c.getLowLocation()); + cuboid.setHighLocation(c.getHighLocation()); + + dir = dir.getNext(); + } + + plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); + plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); + + cuboid = plugin.getSelectionManager().getSelectionCuboid(player); + + if (cuboid.getXSize() > group.getMaxX() || cuboid.getYSize() > group.getMaxY() + (-group.getMinY()) || cuboid.getZSize() > group.getMaxZ()) { + return false; + } + + return true; } public enum direction { - Top(new Vector(0, 1, 0), new Vector(0, 0, 0)), - Bottom(new Vector(0, 0, 0), new Vector(0, 1, 0)), - East(new Vector(1, 0, 0), new Vector(0, 0, 0)), - West(new Vector(0, 0, 0), new Vector(1, 0, 0)), - North(new Vector(0, 0, 1), new Vector(0, 0, 0)), - South(new Vector(0, 0, 0), new Vector(0, 0, 1)); - - private Vector low; - private Vector high; - - direction(Vector low, Vector high) { - this.low = low; - this.high = high; - } - - public Vector getLow() { - return low; - } - - public Vector getHigh() { - return high; - } - - public direction getNext() { - boolean next = false; - direction dir = direction.Top; - for (direction one : direction.values()) { - if (next) { - dir = one; - next = false; - break; - } - if (this.equals(one)) { - next = true; - } - } - return dir; - } + Top(new Vector(0, 1, 0), new Vector(0, 0, 0)), + Bottom(new Vector(0, 0, 0), new Vector(0, 1, 0)), + East(new Vector(1, 0, 0), new Vector(0, 0, 0)), + West(new Vector(0, 0, 0), new Vector(1, 0, 0)), + North(new Vector(0, 0, 1), new Vector(0, 0, 0)), + South(new Vector(0, 0, 0), new Vector(0, 0, 1)); + + private Vector low; + private Vector high; + + direction(Vector low, Vector high) { + this.low = low; + this.high = high; + } + + public Vector getLow() { + return low; + } + + public Vector getHigh() { + return high; + } + + public direction getNext() { + boolean next = false; + direction dir = direction.Top; + for (direction one : direction.values()) { + if (next) { + dir = one; + next = false; + break; + } + if (this.equals(one)) { + next = true; + } + } + return dir; + } } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - // Main command - c.get("Description", "Create maximum allowed residence around you"); - c.get("Info", Arrays.asList("&eUsage: &6/res auto (residence name) (radius)")); - LocaleManager.addTabCompleteMain(this); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + // Main command + c.get("Description", "Create maximum allowed residence around you"); + c.get("Info", Arrays.asList("&eUsage: &6/res auto (residence name) (radius)")); + LocaleManager.addTabCompleteMain(this); } } diff --git a/src/com/bekvon/bukkit/residence/economy/BlackHoleEconomy.java b/src/com/bekvon/bukkit/residence/economy/BlackHoleEconomy.java index 6d18840d4..50b191889 100644 --- a/src/com/bekvon/bukkit/residence/economy/BlackHoleEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/BlackHoleEconomy.java @@ -9,42 +9,47 @@ public BlackHoleEconomy() { @Override public double getBalance(Player player) { - return 0D; + return 0D; } @Override public double getBalance(String playerName) { - return 0D; + return 0D; + } + + @Override + public boolean canAfford(Player player, double amount) { + return false; } @Override public boolean canAfford(String playerName, double amount) { - return false; + return false; } @Override public boolean add(String playerName, double amount) { - return false; + return false; } @Override public boolean subtract(String playerName, double amount) { - return false; + return false; } @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - return false; + return false; } @Override public String getName() { - return "BlackHoleEconomy"; + return "BlackHoleEconomy"; } @Override public String format(double amount) { - return String.valueOf(Math.round(amount * 100) / 100D); + return String.valueOf(Math.round(amount * 100) / 100D); } } \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java b/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java index 4ff69c437..5a6170a25 100644 --- a/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java @@ -22,6 +22,16 @@ public double getBalance(String playerName) { return user == null ? 0D : user.getBalance(); } + + @Override + public boolean canAfford(Player player, double amount) { + CMIUser user = CMI.getInstance().getPlayerManager().getUser(player); + if (user != null && user.getBalance() >= amount) { + return true; + } + return false; + } + @Override public boolean canAfford(String playerName, double amount) { CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); diff --git a/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java b/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java index d9264d65b..220b1130d 100644 --- a/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java +++ b/src/com/bekvon/bukkit/residence/economy/EconomyInterface.java @@ -8,6 +8,8 @@ public interface EconomyInterface { public double getBalance(String playerName); public boolean canAfford(String playerName, double amount); + + public boolean canAfford(Player player, double amount); public boolean add(String playerName, double amount); diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index da60f9887..21aadcfc0 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -1,5 +1,7 @@ package com.bekvon.bukkit.residence.economy; +import java.math.BigDecimal; + import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; @@ -13,109 +15,121 @@ public class EssentialsEcoAdapter implements EconomyInterface { Essentials plugin; public EssentialsEcoAdapter(Essentials p) { - plugin = p; - String serverland = Residence.getInstance().getServerLandName(); - if (!Economy.playerExists(serverland)) { - Economy.createNPC(serverland); - } + plugin = p; + String serverland = Residence.getInstance().getServerLandName(); + if (!Economy.playerExists(serverland)) { + Economy.createNPC(serverland); + } } @Override public double getBalance(Player player) { - try { - if (Economy.playerExists(player.getUniqueId())) { - return Economy.getMoneyExact(player.getUniqueId()).doubleValue(); - } - return 0; - } catch (UserDoesNotExistException ex) { - return 0; - } + try { + if (Economy.playerExists(player.getUniqueId())) { + return Economy.getMoneyExact(player.getUniqueId()).doubleValue(); + } + return 0; + } catch (UserDoesNotExistException ex) { + return 0; + } } @SuppressWarnings("deprecation") @Override public double getBalance(String playerName) { - try { - if (Economy.playerExists(playerName)) { - return Economy.getMoney(playerName); - } - return 0; - } catch (UserDoesNotExistException ex) { - return 0; - } + try { + if (Economy.playerExists(playerName)) { + return Economy.getMoney(playerName); + } + return 0; + } catch (UserDoesNotExistException ex) { + return 0; + } + } + + @Override + public boolean canAfford(Player player, double amount) { + try { + if (Economy.playerExists(player.getUniqueId())) { + return Economy.hasEnough(player.getUniqueId(), BigDecimal.valueOf(amount)); + } + return false; + } catch (UserDoesNotExistException ex) { + return false; + } } @SuppressWarnings("deprecation") @Override public boolean canAfford(String playerName, double amount) { - try { - if (Economy.playerExists(playerName)) { - return Economy.hasEnough(playerName, amount); - } - return false; - } catch (UserDoesNotExistException ex) { - return false; - } + try { + if (Economy.playerExists(playerName)) { + return Economy.hasEnough(playerName, amount); + } + return false; + } catch (UserDoesNotExistException ex) { + return false; + } } @SuppressWarnings("deprecation") @Override public boolean add(String playerName, double amount) { - if (Economy.playerExists(playerName)) { - try { - Economy.add(playerName, amount); - return true; - } catch (UserDoesNotExistException ex) { - return false; - } catch (NoLoanPermittedException ex) { - return false; - } - } - return false; + if (Economy.playerExists(playerName)) { + try { + Economy.add(playerName, amount); + return true; + } catch (UserDoesNotExistException ex) { + return false; + } catch (NoLoanPermittedException ex) { + return false; + } + } + return false; } @SuppressWarnings("deprecation") @Override public boolean subtract(String playerName, double amount) { - if (Economy.playerExists(playerName)) { - try { - Economy.subtract(playerName, amount); - return true; - } catch (UserDoesNotExistException ex) { - return false; - } catch (NoLoanPermittedException ex) { - return false; - } - } - return false; + if (Economy.playerExists(playerName)) { + try { + Economy.subtract(playerName, amount); + return true; + } catch (UserDoesNotExistException ex) { + return false; + } catch (NoLoanPermittedException ex) { + return false; + } + } + return false; } @SuppressWarnings("deprecation") @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - try { - if (Economy.playerExists(playerFrom) && Economy.playerExists(playerTo) && Economy.hasEnough(playerFrom, amount)) { - if (!subtract(playerFrom, amount)) - return false; - if (!add(playerTo, amount)) { - add(playerFrom, amount); - return false; - } - return true; - } - } catch (UserDoesNotExistException ex) { - return false; - } - return false; + try { + if (Economy.playerExists(playerFrom) && Economy.playerExists(playerTo) && Economy.hasEnough(playerFrom, amount)) { + if (!subtract(playerFrom, amount)) + return false; + if (!add(playerTo, amount)) { + add(playerFrom, amount); + return false; + } + return true; + } + } catch (UserDoesNotExistException ex) { + return false; + } + return false; } @Override public String getName() { - return "EssentialsEconomy"; + return "EssentialsEconomy"; } @Override public String format(double amount) { - return Economy.format(amount); + return Economy.format(amount); } } diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java index a4b8f97f9..57e4e161c 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java @@ -11,77 +11,82 @@ public class IConomy6Adapter implements EconomyInterface { iConomy icon; public IConomy6Adapter(iConomy iconomy) { - icon = iconomy; + icon = iconomy; } @Override public double getBalance(Player player) { - checkExist(player.getName()); - return new Accounts().get(player.getName()).getHoldings().getBalance(); + checkExist(player.getName()); + return new Accounts().get(player.getName()).getHoldings().getBalance(); } + @Override public double getBalance(String playerName) { - checkExist(playerName); - return new Accounts().get(playerName).getHoldings().getBalance(); + checkExist(playerName); + return new Accounts().get(playerName).getHoldings().getBalance(); + } + + @Override + public boolean canAfford(Player player, double amount) { + return canAfford(player.getName(), amount); } @Override public boolean canAfford(String playerName, double amount) { - checkExist(playerName); - double holdings = this.getBalance(playerName); - if (holdings >= amount) { - return true; - } - return false; + checkExist(playerName); + double holdings = this.getBalance(playerName); + if (holdings >= amount) { + return true; + } + return false; } @Override public boolean add(String playerName, double amount) { - checkExist(playerName); - new Accounts().get(playerName).getHoldings().add(amount); - return true; + checkExist(playerName); + new Accounts().get(playerName).getHoldings().add(amount); + return true; } @Override public boolean subtract(String playerName, double amount) { - checkExist(playerName); - if (this.canAfford(playerName, amount)) { - new Accounts().get(playerName).getHoldings().subtract(amount); - return true; - } - return false; + checkExist(playerName); + if (this.canAfford(playerName, amount)) { + new Accounts().get(playerName).getHoldings().subtract(amount); + return true; + } + return false; } @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - checkExist(playerTo); - checkExist(playerFrom); - if (this.canAfford(playerFrom, amount)) { - Account p1 = new Accounts().get(playerFrom); - Account p2 = new Accounts().get(playerTo); - p1.getHoldings().subtract(amount); - p2.getHoldings().add(amount); - return true; - } - return false; + checkExist(playerTo); + checkExist(playerFrom); + if (this.canAfford(playerFrom, amount)) { + Account p1 = new Accounts().get(playerFrom); + Account p2 = new Accounts().get(playerTo); + p1.getHoldings().subtract(amount); + p2.getHoldings().add(amount); + return true; + } + return false; } private static void checkExist(String playerName) { - Accounts acc = new Accounts(); - if (!acc.exists(playerName)) { - acc.create(playerName); - } + Accounts acc = new Accounts(); + if (!acc.exists(playerName)) { + acc.create(playerName); + } } @Override public String getName() { - return "iConomy"; + return "iConomy"; } - @Override public String format(double amount) { - return iConomy.format(amount); + return iConomy.format(amount); } } diff --git a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java index c2960fe85..442bad5a5 100644 --- a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java @@ -9,64 +9,69 @@ public class RealShopEconomy implements EconomyInterface { RealEconomy plugin; public RealShopEconomy(RealEconomy e) { - plugin = e; + plugin = e; } @Override public double getBalance(Player player) { - return plugin.getBalance(player.getName()); + return plugin.getBalance(player.getName()); } @Override public double getBalance(String playerName) { - return plugin.getBalance(playerName); + return plugin.getBalance(playerName); + } + + @Override + public boolean canAfford(Player player, double amount) { + return canAfford(player.getName(), amount); } @Override public boolean canAfford(String playerName, double amount) { - if (plugin.getBalance(playerName) >= amount) { - return true; - } - return false; + if (plugin.getBalance(playerName) >= amount) { + return true; + } + return false; } @Override public boolean add(String playerName, double amount) { - plugin.setBalance(playerName, plugin.getBalance(playerName) + amount); - return true; + plugin.setBalance(playerName, plugin.getBalance(playerName) + amount); + return true; } @Override public boolean subtract(String playerName, double amount) { - if (!canAfford(playerName, amount)) { - return false; - } - plugin.setBalance(playerName, plugin.getBalance(playerName) - amount); - return true; + if (!canAfford(playerName, amount)) { + return false; + } + plugin.setBalance(playerName, plugin.getBalance(playerName) - amount); + return true; } @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - if (!canAfford(playerFrom, amount)) { - return false; - } - if (subtract(playerFrom, amount)) { - if (!add(playerTo, amount)) { - add(playerFrom, amount); - return false; - } - return true; - } - return false; + if (!canAfford(playerFrom, amount)) { + return false; + } + if (subtract(playerFrom, amount)) { + if (!add(playerTo, amount)) { + add(playerFrom, amount); + return false; + } + return true; + } + return false; } @Override public String getName() { - return "RealShopEconomy"; + return "RealShopEconomy"; } @Override public String format(double amount) { - return plugin.format(amount); + return plugin.format(amount); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_12.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_12.java index 87b68dcff..c2af33926 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_12.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_12.java @@ -12,8 +12,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import net.Zrips.CMILib.Logs.CMIDebug; - public class ResidencePlayerListener1_12 implements Listener { private Residence plugin; diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index b6d36a974..b092c46df 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -18,150 +18,155 @@ public class ResidenceVaultAdapter implements EconomyInterface, PermissionsInter public static Chat chat = null; public boolean permissionsOK() { - if (permissions != null && !permissions.getName().equalsIgnoreCase("SuperPerms")) { - return true; - } - return false; + if (permissions != null && !permissions.getName().equalsIgnoreCase("SuperPerms")) { + return true; + } + return false; } public boolean economyOK() { - return economy != null; + return economy != null; } public boolean chatOK() { - return chat != null; + return chat != null; } public ResidenceVaultAdapter(Server s) { - setupPermissions(s); - setupEconomy(s); - setupChat(s); + setupPermissions(s); + setupEconomy(s); + setupChat(s); } private static boolean setupPermissions(Server s) { - RegisteredServiceProvider permissionProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); - if (permissionProvider != null) { - permissions = permissionProvider.getProvider(); - } - return (permissions != null); + RegisteredServiceProvider permissionProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); + if (permissionProvider != null) { + permissions = permissionProvider.getProvider(); + } + return (permissions != null); } private static boolean setupChat(Server s) { - RegisteredServiceProvider chatProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); - if (chatProvider != null) { - chat = chatProvider.getProvider(); - } - return (chat != null); + RegisteredServiceProvider chatProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); + if (chatProvider != null) { + chat = chatProvider.getProvider(); + } + return (chat != null); } private static boolean setupEconomy(Server s) { - RegisteredServiceProvider economyProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); - if (economyProvider != null) { - economy = economyProvider.getProvider(); - } - return (economy != null); + RegisteredServiceProvider economyProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); + if (economyProvider != null) { + economy = economyProvider.getProvider(); + } + return (economy != null); } @Override public String getPlayerGroup(Player player) { - String group = permissions.getPrimaryGroup(player).toLowerCase(); - if (group == null) { - return group; - } - return group.toLowerCase(); + String group = permissions.getPrimaryGroup(player).toLowerCase(); + if (group == null) { + return group; + } + return group.toLowerCase(); } @Override public String getPlayerGroup(String player, String world) { - @SuppressWarnings("deprecation") - String group = permissions.getPrimaryGroup(world, player); - if (group == null) { - return group; - } - return group.toLowerCase(); + @SuppressWarnings("deprecation") + String group = permissions.getPrimaryGroup(world, player); + if (group == null) { + return group; + } + return group.toLowerCase(); } public static boolean hasPermission(OfflinePlayer player, String perm, String world) { - if (permissions == null) - return false; - try { - return permissions.playerHas(world, player, perm); - } catch (Exception e) { - return false; - } + if (permissions == null) + return false; + try { + return permissions.playerHas(world, player, perm); + } catch (Exception e) { + return false; + } } @Override public double getBalance(Player player) { - return economy.getBalance(player); + return economy.getBalance(player); } @SuppressWarnings("deprecation") @Override public double getBalance(String playerName) { - return economy.getBalance(playerName); + return economy.getBalance(playerName); + } + + @Override + public boolean canAfford(Player player, double amount) { + return canAfford(player.getName(), amount); } @SuppressWarnings("deprecation") @Override public boolean canAfford(String playerName, double amount) { - return economy.has(playerName, amount); + return economy.has(playerName, amount); } @SuppressWarnings("deprecation") @Override public boolean add(String playerName, double amount) { - return economy.depositPlayer(playerName, amount).transactionSuccess(); + return economy.depositPlayer(playerName, amount).transactionSuccess(); } @SuppressWarnings("deprecation") @Override public boolean subtract(String playerName, double amount) { - return economy.withdrawPlayer(playerName, amount).transactionSuccess(); + return economy.withdrawPlayer(playerName, amount).transactionSuccess(); } @SuppressWarnings("deprecation") @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - if (economy.withdrawPlayer(playerFrom, amount).transactionSuccess()) { - if (economy.depositPlayer(playerTo, amount).transactionSuccess()) { - return true; - } - economy.depositPlayer(playerFrom, amount); - return false; - } - return false; + if (economy.withdrawPlayer(playerFrom, amount).transactionSuccess()) { + if (economy.depositPlayer(playerTo, amount).transactionSuccess()) { + return true; + } + economy.depositPlayer(playerFrom, amount); + return false; + } + return false; } public String getEconomyName() { - if (economy != null) { - return economy.getName(); - } - return ""; + if (economy != null) { + return economy.getName(); + } + return ""; } public String getPermissionsName() { - if (permissions != null) { - return permissions.getName(); - } - return ""; + if (permissions != null) { + return permissions.getName(); + } + return ""; } public String getChatName() { - if (chat != null) { - return chat.getName(); - } - return ""; + if (chat != null) { + return chat.getName(); + } + return ""; } @Override public String getName() { - return "Vault"; + return "Vault"; } @Override public String format(double amount) { - return economy.format(amount); + return economy.format(amount); } } \ No newline at end of file From 563e25f62be2f9c6b1cc4a64a55d6a1c8170197e Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 Aug 2022 15:56:43 +0300 Subject: [PATCH 0959/1142] Complex placeholder processing fix --- .../residence/Placeholders/Placeholder.java | 817 +++---- .../residence/protection/FlagPermissions.java | 2074 ++++++++-------- .../protection/ResidenceManager.java | 2098 ++++++++--------- 3 files changed, 2496 insertions(+), 2493 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java index 8f3f55974..c0a174c1b 100644 --- a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java +++ b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java @@ -13,21 +13,24 @@ import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.GetTime; import me.clip.placeholderapi.PlaceholderAPI; import net.Zrips.CMILib.Chat.ChatFilterRule; +import net.Zrips.CMILib.Logs.CMIDebug; public class Placeholder { private Residence plugin; public Placeholder(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } private static ChatFilterRule numericalRule = new ChatFilterRule().setPattern("(\\$)(\\d)"); @@ -36,232 +39,232 @@ public Placeholder(Residence plugin) { static LinkedHashMap> byNameComplex = new LinkedHashMap>(); public enum CMIPlaceHolders { - residence_user_amount, - residence_user_group, - residence_user_admin, - residence_user_cancreate, - residence_user_maxres, - residence_user_maxew, - residence_user_maxns, - residence_user_maxud, - residence_user_maxsub, - residence_user_maxsubdepth, - residence_user_maxrents, - residence_user_maxrentdays, - residence_user_blockcost, - residence_user_blocksell, - residence_user_current_owner, - residence_user_current_res, - residence_user_current_bank, - residence_user_current_qsize, - residence_user_current_ssize, - residence_user_current_forsale, - residence_user_current_saleprice, - residence_user_current_forrent, - residence_user_current_rentprice, - residence_user_current_rentedby, - residence_user_current_rentdays, - residence_user_current_rentends, - residence_user_current_flag_$1("Get flags from current residence by flag name", "flagName"), - ; - - static { - for (CMIPlaceHolders one : CMIPlaceHolders.values()) { - String fullName = one.toString(); - if (!one.isComplex()) { - byNameStatic.put(fullName.toLowerCase(), one); - continue; - } - String[] split = fullName.split("_"); - String first = split[0] + "_" + split[1]; - LinkedHashSet old = byNameComplex.getOrDefault(first, new LinkedHashSet()); - old.add(one); - byNameComplex.put(first, old); - } - } - - private String[] vars; - private List groups = new ArrayList(); - private ChatFilterRule rule = null; - private boolean cache = true; - private String desc = null; - - private int cacheForMS = 1000; - - private int MAX_ENTRIES = 20; - LinkedHashMap map = new LinkedHashMap(MAX_ENTRIES + 1, .75F, false) { - @Override - protected boolean removeEldestEntry(Map.Entry eldest) { - return size() > MAX_ENTRIES; - } - }; - - CMIPlaceHolders() { - } - - CMIPlaceHolders(String desc, String... vars) { - this(desc, true, vars); - } - - CMIPlaceHolders(String desc, boolean cache, String... vars) { - this.desc = desc; - this.vars = vars; - this.cache = cache; - - try { - Matcher matcher = numericalRule.getMatcher(this.toString()); - if (matcher != null) { - rule = new ChatFilterRule(); - List ls = new ArrayList<>(); - ls.add("(%)" + this.toString().replaceAll("\\$\\d", "([^\"^%]*)") + "(%)"); - ls.add("(\\{)" + this.toString().replaceAll("\\$\\d", "([^\"^%]*)") + "(\\})"); - rule.setPattern(ls); - while (matcher.find()) { - try { - int id = Integer.parseInt(matcher.group(2)); - - groups.add(id); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } catch (Throwable ex) { - ex.printStackTrace(); - } - } - - public Object getCachedValue(UUID uuid) { - if (!this.isCache() || this.isComplex() || uuid == null) - return null; - CMIPlaceholderCache cache = map.get(uuid); - if (cache == null || System.currentTimeMillis() > cache.getValidUntil()) - return null; - return cache.getResult(); - } - - public void addCachedValue(UUID uuid, String value, int validForMiliSeconds) { - if (uuid == null) - return; - CMIPlaceholderCache cache = map.getOrDefault(uuid, new CMIPlaceholderCache()); - cache.setResult(value); - cache.setValidUntil(System.currentTimeMillis() + validForMiliSeconds); - map.put(uuid, cache); - } - - public static CMIPlaceHolders getByName(String name) { - - if (name.startsWith("%") || name.startsWith("{")) - name = name.replaceAll("%|\\{|\\}", ""); - - CMIPlaceHolders got = byNameStatic.get(name); - if (got != null) - return got; - String original = name; - String[] split = name.split("_"); - - if (split.length < 3) { - return null; - } - - String prefix = split[0] + "_" + split[1]; - - Set main = byNameComplex.get(prefix); - - if (main == null) { - return null; - } - - for (CMIPlaceHolders mainOne : main) { - if (!mainOne.getComplexRegexMatchers(original).isEmpty()) { - return mainOne; - } - } - return null; - } - - public static CMIPlaceHolders getByNameExact(String name) { - return getByName(name); - } - - public String getFull() { - if (this.isComplex()) { - String name = this.name(); - int i = 0; - for (String one : this.name().split("_")) { - if (!one.startsWith("$")) - continue; - if (vars.length >= i - 1) - name = name.replace(one, "[" + vars[i] + "]"); - i++; - } - - return "%" + name + "%"; - } - return "%" + this.name() + "%"; - } - - public List getComplexRegexMatchers(String text) { - List lsInLs = new ArrayList(); - if (!this.isComplex()) - return lsInLs; - - if (!text.startsWith("%") && !text.endsWith("%")) - text = "%" + text + "%"; - - Matcher matcher = this.getRule().getMatcher(text); - if (matcher == null) - return lsInLs; - while (matcher.find()) { - lsInLs.add(matcher.group()); - } - return lsInLs; - } - - public List getComplexValues(String text) { - - List lsInLs = new ArrayList(); - if (!this.isComplex() || text == null) - return lsInLs; - - if (!text.startsWith("%") && !text.endsWith("%")) - text = "%" + text + "%"; - - Matcher matcher = this.getRule().getMatcher(text); - if (matcher == null) - return lsInLs; - while (matcher.find()) { - try { - for (Integer oneG : groups) { - lsInLs.add(matcher.group(oneG + 1)); - } - } catch (Exception e) { - e.printStackTrace(); - } - break; - } - return lsInLs; - } - - public boolean isComplex() { - return rule != null; - } - - public ChatFilterRule getRule() { - return rule; - } - - public void setRule(ChatFilterRule rule) { - this.rule = rule; - } - - public String getDescription() { - return desc; - } - - public boolean isCache() { - return cache; - } + residence_user_amount, + residence_user_group, + residence_user_admin, + residence_user_cancreate, + residence_user_maxres, + residence_user_maxew, + residence_user_maxns, + residence_user_maxud, + residence_user_maxsub, + residence_user_maxsubdepth, + residence_user_maxrents, + residence_user_maxrentdays, + residence_user_blockcost, + residence_user_blocksell, + residence_user_current_owner, + residence_user_current_res, + residence_user_current_bank, + residence_user_current_qsize, + residence_user_current_ssize, + residence_user_current_forsale, + residence_user_current_saleprice, + residence_user_current_forrent, + residence_user_current_rentprice, + residence_user_current_rentedby, + residence_user_current_rentdays, + residence_user_current_rentends, + residence_user_current_flag_$1("Get flags from current residence by flag name", "flagName"), + ; + + static { + for (CMIPlaceHolders one : CMIPlaceHolders.values()) { + String fullName = one.toString(); + if (!one.isComplex()) { + byNameStatic.put(fullName.toLowerCase(), one); + continue; + } + String[] split = fullName.split("_"); + String first = split[0] + "_" + split[1]; + LinkedHashSet old = byNameComplex.getOrDefault(first, new LinkedHashSet()); + old.add(one); + byNameComplex.put(first, old); + } + } + + private String[] vars; + private List groups = new ArrayList(); + private ChatFilterRule rule = null; + private boolean cache = true; + private String desc = null; + + private int cacheForMS = 1000; + + private int MAX_ENTRIES = 20; + LinkedHashMap map = new LinkedHashMap(MAX_ENTRIES + 1, .75F, false) { + @Override + protected boolean removeEldestEntry(Map.Entry eldest) { + return size() > MAX_ENTRIES; + } + }; + + CMIPlaceHolders() { + } + + CMIPlaceHolders(String desc, String... vars) { + this(desc, true, vars); + } + + CMIPlaceHolders(String desc, boolean cache, String... vars) { + this.desc = desc; + this.vars = vars; + this.cache = cache; + + try { + Matcher matcher = numericalRule.getMatcher(this.toString()); + if (matcher != null) { + rule = new ChatFilterRule(); + List ls = new ArrayList<>(); + ls.add("(%)" + this.toString().replaceAll("\\$\\d", "([^\"^%]*)") + "(%)"); + ls.add("(\\{)" + this.toString().replaceAll("\\$\\d", "([^\"^%]*)") + "(\\})"); + rule.setPattern(ls); + while (matcher.find()) { + try { + int id = Integer.parseInt(matcher.group(2)); + + groups.add(id); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } catch (Throwable ex) { + ex.printStackTrace(); + } + } + + public Object getCachedValue(UUID uuid) { + if (!this.isCache() || this.isComplex() || uuid == null) + return null; + CMIPlaceholderCache cache = map.get(uuid); + if (cache == null || System.currentTimeMillis() > cache.getValidUntil()) + return null; + return cache.getResult(); + } + + public void addCachedValue(UUID uuid, String value, int validForMiliSeconds) { + if (uuid == null) + return; + CMIPlaceholderCache cache = map.getOrDefault(uuid, new CMIPlaceholderCache()); + cache.setResult(value); + cache.setValidUntil(System.currentTimeMillis() + validForMiliSeconds); + map.put(uuid, cache); + } + + public static CMIPlaceHolders getByName(String name) { + + if (name.startsWith("%") || name.startsWith("{")) + name = name.replaceAll("%|\\{|\\}", ""); + + CMIPlaceHolders got = byNameStatic.get(name); + if (got != null) + return got; + String original = name; + String[] split = name.split("_"); + + if (split.length < 3) { + return null; + } + + String prefix = split[0] + "_" + split[1]; + + Set main = byNameComplex.get(prefix); + + if (main == null) { + return null; + } + + for (CMIPlaceHolders mainOne : main) { + if (!mainOne.getComplexRegexMatchers(original).isEmpty()) { + return mainOne; + } + } + return null; + } + + public static CMIPlaceHolders getByNameExact(String name) { + return getByName(name); + } + + public String getFull() { + if (this.isComplex()) { + String name = this.name(); + int i = 0; + for (String one : this.name().split("_")) { + if (!one.startsWith("$")) + continue; + if (vars.length >= i - 1) + name = name.replace(one, "[" + vars[i] + "]"); + i++; + } + + return "%" + name + "%"; + } + return "%" + this.name() + "%"; + } + + public List getComplexRegexMatchers(String text) { + List lsInLs = new ArrayList(); + if (!this.isComplex()) + return lsInLs; + + if (!text.startsWith("%") && !text.endsWith("%")) + text = "%" + text + "%"; + + Matcher matcher = this.getRule().getMatcher(text); + if (matcher == null) + return lsInLs; + while (matcher.find()) { + lsInLs.add(matcher.group()); + } + return lsInLs; + } + + public List getComplexValues(String text) { + + List lsInLs = new ArrayList(); + if (!this.isComplex() || text == null) + return lsInLs; + + if (!text.startsWith("%") && !text.endsWith("%")) + text = "%" + text + "%"; + + Matcher matcher = this.getRule().getMatcher(text); + if (matcher == null) + return lsInLs; + while (matcher.find()) { + try { + for (Integer oneG : groups) { + lsInLs.add(matcher.group(oneG + 1)); + } + } catch (Exception e) { + e.printStackTrace(); + } + break; + } + return lsInLs; + } + + public boolean isComplex() { + return rule != null; + } + + public ChatFilterRule getRule() { + return rule; + } + + public void setRule(ChatFilterRule rule) { + this.rule = rule; + } + + public String getDescription() { + return desc; + } + + public boolean isCache() { + return cache; + } // public static CMIPlaceHolders getByName(String name) { // name = name.replace("_", ""); // for (CMIPlaceHolders one : CMIPlaceHolders.values()) { @@ -294,214 +297,212 @@ public boolean isCache() { // return "%" + this.name() + "%"; // } - public int getCacheForMS() { - return cacheForMS; - } + public int getCacheForMS() { + return cacheForMS; + } } public List updatePlaceHolders(Player player, List messages) { - List ms = new ArrayList(messages); - for (int i = 0, l = messages.size(); i < l; ++i) { - ms.set(i, updatePlaceHolders(player, messages.get(i))); - } - return ms; + List ms = new ArrayList(messages); + for (int i = 0, l = messages.size(); i < l; ++i) { + ms.set(i, updatePlaceHolders(player, messages.get(i))); + } + return ms; } public String updatePlaceHolders(Player player, String message) { - if (message == null) - return null; - if (message.contains("%")) - message = translateOwnPlaceHolder(player, message); - if (!plugin.isPlaceholderAPIEnabled()) - return message; - if (message.contains("%")) - message = PlaceholderAPI.setPlaceholders(player, message); - return message; + if (message == null) + return null; + if (message.contains("%")) + message = translateOwnPlaceHolder(player, message); + if (!plugin.isPlaceholderAPIEnabled()) + return message; + if (message.contains("%")) + message = PlaceholderAPI.setPlaceholders(player, message); + return message; } Pattern placeholderPatern = Pattern.compile("(%)([^\"^%]*)(%)"); private String translateOwnPlaceHolder(Player player, String message) { - if (message == null) - return null; + if (message == null) + return null; - if (message.contains("%")) { - Matcher match = placeholderPatern.matcher(message); + if (message.contains("%")) { + Matcher match = placeholderPatern.matcher(message); - while (match.find()) { - String cmd = match.group(2); - if (!message.contains("%")) - break; - CMIPlaceHolders place = CMIPlaceHolders.getByNameExact(cmd); + while (match.find()) { + String cmd = match.group(2); + if (!message.contains("%")) + break; + CMIPlaceHolders place = CMIPlaceHolders.getByNameExact(cmd); - if (place == null) - continue; + if (place == null) + continue; - String with = this.getValue(player, place, cmd); + String with = this.getValue(player, place, cmd); - if (with == null) - continue; - message = message.replace(place.getFull(), with); - } - } + if (with == null) + continue; + if (place.isComplex()) { + message = message.replace("%" + cmd + "%", with); + } else + message = message.replace(place.getFull(), with); + } + } - return message; + return message; } @Deprecated public String getValue(Player player, CMIPlaceHolders placeHolder) { - return getValue(player, placeHolder, null); + return getValue(player, placeHolder, null); } public String getValue(Player player, CMIPlaceHolders placeHolder, String value) { - if (placeHolder == null) - return null; - - Object cached = placeHolder.getCachedValue(player != null ? player.getUniqueId() : null); - if (cached != null) { - return (String) cached; - } - - ResidencePlayer user = plugin.getPlayerManager().getResidencePlayer(player); - - String result = null; - - if (user != null) { - - if (!placeHolder.isComplex()) { - switch (placeHolder) { - case residence_user_admin: - result = variable(Residence.getInstance().getPermissionManager().isResidenceAdmin(player)); - break; - case residence_user_amount: - result = String.valueOf(user.getResAmount()); - break; - case residence_user_blockcost: - if (Residence.getInstance().getEconomyManager() != null) { - result = String.valueOf(user.getGroup().getCostperarea()); - } - break; - case residence_user_blocksell: - if (Residence.getInstance().getEconomyManager() != null) { - result = String.valueOf(user.getGroup().getSellperarea()); - } - break; - case residence_user_cancreate: - result = variable(user.getGroup().canCreateResidences()); - break; - case residence_user_group: - result = user.getGroup().getGroupName(); - break; - case residence_user_maxew: - PermissionGroup group = user.getGroup(); - result = group.getXmin() + "-" + group.getXmax(); - break; - case residence_user_maxns: - group = user.getGroup(); - result = group.getZmin() + "-" + group.getZmax(); - break; - case residence_user_maxrentdays: - result = String.valueOf(user.getGroup().getMaxRentDays()); - break; - case residence_user_maxrents: - result = String.valueOf(user.getMaxRents()); - break; - case residence_user_maxres: - result = String.valueOf(user.getMaxRes()); - break; - case residence_user_maxsub: - result = String.valueOf(user.getMaxSubzones()); - break; - case residence_user_maxsubdepth: - result = String.valueOf(user.getMaxSubzoneDepth()); - break; - case residence_user_maxud: - group = user.getGroup(); - result = group.getYmin() + "-" + group.getYmax(); - break; - case residence_user_current_owner: - ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - result = res == null ? "" : res.getOwner(); - break; - case residence_user_current_res: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - result = res == null ? "" : res.getName(); - break; - case residence_user_current_bank: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - result = res == null ? "0" : res.getBank().getStoredMoneyFormated(); - break; - case residence_user_current_qsize: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - result = res == null ? "0" : String.valueOf(res.getTotalSize()); - break; - case residence_user_current_ssize: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - result = res == null ? "0" : String.valueOf(res.getXZSize()); - break; - case residence_user_current_forsale: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - result = res == null ? "" : String.valueOf(res.isForSell()); - break; - case residence_user_current_saleprice: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - result = res == null || !res.isForSell() ? "" : String.valueOf(res.getSellPrice()); - break; - case residence_user_current_rentprice: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - result = res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().cost); - break; - case residence_user_current_rentdays: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - result = res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().days); - break; - case residence_user_current_rentedby: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - result = res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : res.getRentedLand().player; - break; - case residence_user_current_rentends: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - result = res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : GetTime.getTime(res.getRentedLand().endTime, true); - break; - case residence_user_current_forrent: - res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); - result = res == null ? "" : String.valueOf(res.isForRent()); - break; - default: - break; - } - if (placeHolder.isCache() && placeHolder.getCachedValue(user.getUniqueId()) == null) { - placeHolder.addCachedValue(user.getUniqueId(), result, placeHolder.getCacheForMS()); - } - } else { -// if (value != null && player != null) -// switch (placeHolder) { -// case residence_user_current_flag_$1: -// -// List values = placeHolder.getComplexValues(value); -// -// if (values.size() < 1) -// return ""; -// -// ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); -// -// if (res == null) -// return null; -// -// Flags flag = Flags.getFlag(values.get(0)); -// -// break; -// } - - } - - } - - return result; + if (placeHolder == null) + return null; + + Object cached = placeHolder.getCachedValue(player != null ? player.getUniqueId() : null); + if (cached != null) { + return (String) cached; + } + + ResidencePlayer user = plugin.getPlayerManager().getResidencePlayer(player); + + String result = null; + + if (user != null) { + + if (!placeHolder.isComplex()) { + switch (placeHolder) { + case residence_user_admin: + result = variable(Residence.getInstance().getPermissionManager().isResidenceAdmin(player)); + break; + case residence_user_amount: + result = String.valueOf(user.getResAmount()); + break; + case residence_user_blockcost: + if (Residence.getInstance().getEconomyManager() != null) { + result = String.valueOf(user.getGroup().getCostperarea()); + } + break; + case residence_user_blocksell: + if (Residence.getInstance().getEconomyManager() != null) { + result = String.valueOf(user.getGroup().getSellperarea()); + } + break; + case residence_user_cancreate: + result = variable(user.getGroup().canCreateResidences()); + break; + case residence_user_group: + result = user.getGroup().getGroupName(); + break; + case residence_user_maxew: + PermissionGroup group = user.getGroup(); + result = group.getXmin() + "-" + group.getXmax(); + break; + case residence_user_maxns: + group = user.getGroup(); + result = group.getZmin() + "-" + group.getZmax(); + break; + case residence_user_maxrentdays: + result = String.valueOf(user.getGroup().getMaxRentDays()); + break; + case residence_user_maxrents: + result = String.valueOf(user.getMaxRents()); + break; + case residence_user_maxres: + result = String.valueOf(user.getMaxRes()); + break; + case residence_user_maxsub: + result = String.valueOf(user.getMaxSubzones()); + break; + case residence_user_maxsubdepth: + result = String.valueOf(user.getMaxSubzoneDepth()); + break; + case residence_user_maxud: + group = user.getGroup(); + result = group.getYmin() + "-" + group.getYmax(); + break; + case residence_user_current_owner: + ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "" : res.getOwner(); + break; + case residence_user_current_res: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "" : res.getName(); + break; + case residence_user_current_bank: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "0" : res.getBank().getStoredMoneyFormated(); + break; + case residence_user_current_qsize: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "0" : String.valueOf(res.getTotalSize()); + break; + case residence_user_current_ssize: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "0" : String.valueOf(res.getXZSize()); + break; + case residence_user_current_forsale: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "" : String.valueOf(res.isForSell()); + break; + case residence_user_current_saleprice: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null || !res.isForSell() ? "" : String.valueOf(res.getSellPrice()); + break; + case residence_user_current_rentprice: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().cost); + break; + case residence_user_current_rentdays: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null || !res.isForRent() ? "" : String.valueOf(res.getRentable().days); + break; + case residence_user_current_rentedby: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : res.getRentedLand().player; + break; + case residence_user_current_rentends: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null || !res.isForRent() || res.getRentedLand() == null || res.getRentedLand().player == null ? "" : GetTime.getTime(res.getRentedLand().endTime, true); + break; + case residence_user_current_forrent: + res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + result = res == null ? "" : String.valueOf(res.isForRent()); + break; + default: + break; + } + if (placeHolder.isCache() && placeHolder.getCachedValue(user.getUniqueId()) == null) { + placeHolder.addCachedValue(user.getUniqueId(), result, placeHolder.getCacheForMS()); + } + } else { + if (value != null && player != null) { + switch (placeHolder) { + case residence_user_current_flag_$1: + List values = placeHolder.getComplexValues(value); + if (values.size() < 1) + return ""; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); + if (res == null) + return null; + Flags flag = Flags.getFlag(values.get(0)); + if (flag == null) + return ""; + return variable(res.getPermissions().playerHas(player, flag, FlagCombo.TrueOrNone)); + } + } + } + } + + return result; } private String variable(Boolean state) { - return state ? plugin.getLM().getMessage(lm.General_True) : plugin.getLM().getMessage(lm.General_False); + return state ? plugin.getLM().getMessage(lm.General_True) : plugin.getLM().getMessage(lm.General_False); } } \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 8f3b0632f..5ecd172a8 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -50,1312 +50,1314 @@ public class FlagPermissions { protected FlagPermissions parent; public FlagPermissions() { - cuboidFlags = new ConcurrentHashMap(); - playerFlags = new ConcurrentHashMap>(); - groupFlags = new ConcurrentHashMap>(); - cachedPlayerNameUUIDs = new ConcurrentHashMap(); + cuboidFlags = new ConcurrentHashMap(); + playerFlags = new ConcurrentHashMap>(); + groupFlags = new ConcurrentHashMap>(); + cachedPlayerNameUUIDs = new ConcurrentHashMap(); } public static enum FlagCombo { - OnlyTrue, OnlyFalse, TrueOrNone, FalseOrNone + OnlyTrue, OnlyFalse, TrueOrNone, FalseOrNone } public static enum FlagState { - TRUE, FALSE, NEITHER, INVALID; + TRUE, FALSE, NEITHER, INVALID; - public String getName() { - return name().toLowerCase(); - } + public String getName() { + return name().toLowerCase(); + } } public static void addMaterialToUseFlag(Material mat, Flags flag) { - if (mat == null) - return; - matUseFlagList.put(mat, flag); + if (mat == null) + return; + matUseFlagList.put(mat, flag); } public static void removeMaterialFromUseFlag(Material mat) { - if (mat == null) - return; - matUseFlagList.remove(mat); + if (mat == null) + return; + matUseFlagList.remove(mat); } public static EnumMap getMaterialUseFlagList() { - return (EnumMap) matUseFlagList; + return (EnumMap) matUseFlagList; } public static void addFlag(Flags flag) { - addFlag(flag.name()); + addFlag(flag.name()); } public static void addFlag(String flag) { - if (Residence.getInstance() == null) { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Can't add flags (" + flag + ") to residence plugin before it was initialized"); - return; - } - flag = flag.toLowerCase(); - if (!validFlags.contains(flag)) { - validFlags.add(flag); - } - if (validFlagGroups.containsKey(flag)) { - validFlagGroups.remove(flag); - } - - // Checking custom flag - Flags f = Flags.getFlag(flag); - if (f == null) { - Residence.getInstance().getPermissionManager().getAllFlags().setFlag(flag, FlagState.TRUE); - } + if (Residence.getInstance() == null) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Can't add flags (" + flag + ") to residence plugin before it was initialized"); + return; + } + flag = flag.toLowerCase(); + if (!validFlags.contains(flag)) { + validFlags.add(flag); + } + if (validFlagGroups.containsKey(flag)) { + validFlagGroups.remove(flag); + } + + // Checking custom flag + Flags f = Flags.getFlag(flag); + if (f == null) { + Residence.getInstance().getPermissionManager().getAllFlags().setFlag(flag, FlagState.TRUE); + } } public static void addPlayerOrGroupOnlyFlag(Flags flag) { - addPlayerOrGroupOnlyFlag(flag.name()); + addPlayerOrGroupOnlyFlag(flag.name()); } public static void addPlayerOrGroupOnlyFlag(String flag) { - if (Residence.getInstance() == null) { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Can't add flags (" + flag + ") to residence plugin before it was initialized"); - return; - } - flag = flag.toLowerCase(); - if (!validPlayerFlags.contains(flag)) { - validPlayerFlags.add(flag); - } - if (validFlagGroups.containsKey(flag)) { - validFlagGroups.remove(flag); - } - - // Checking custom flag - Flags f = Flags.getFlag(flag); - if (f == null) { - Residence.getInstance().getPermissionManager().getAllFlags().setFlag(flag, FlagState.TRUE); - } + if (Residence.getInstance() == null) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Can't add flags (" + flag + ") to residence plugin before it was initialized"); + return; + } + flag = flag.toLowerCase(); + if (!validPlayerFlags.contains(flag)) { + validPlayerFlags.add(flag); + } + if (validFlagGroups.containsKey(flag)) { + validFlagGroups.remove(flag); + } + + // Checking custom flag + Flags f = Flags.getFlag(flag); + if (f == null) { + Residence.getInstance().getPermissionManager().getAllFlags().setFlag(flag, FlagState.TRUE); + } } public static void addResidenceOnlyFlag(Flags flag) { - addResidenceOnlyFlag(flag.name()); + addResidenceOnlyFlag(flag.name()); } public static void addResidenceOnlyFlag(String flag) { - if (Residence.getInstance() == null) { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Can't add flags (" + flag + ") to residence plugin before it was initialized"); - return; - } - flag = flag.toLowerCase(); - if (!validAreaFlags.contains(flag)) { - validAreaFlags.add(flag); - } - if (validFlagGroups.containsKey(flag)) { - validFlagGroups.remove(flag); - } - // Checking custom flag - Flags f = Flags.getFlag(flag); - if (f == null) { - Residence.getInstance().getPermissionManager().getAllFlags().setFlag(flag, FlagState.TRUE); - } + if (Residence.getInstance() == null) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Can't add flags (" + flag + ") to residence plugin before it was initialized"); + return; + } + flag = flag.toLowerCase(); + if (!validAreaFlags.contains(flag)) { + validAreaFlags.add(flag); + } + if (validFlagGroups.containsKey(flag)) { + validFlagGroups.remove(flag); + } + // Checking custom flag + Flags f = Flags.getFlag(flag); + if (f == null) { + Residence.getInstance().getPermissionManager().getAllFlags().setFlag(flag, FlagState.TRUE); + } } public static void addFlagToFlagGroup(String group, String flag) { - Flags f = Flags.getFlag(flag); - if (f != null && !f.isGlobalyEnabled()) { - return; - } - if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { - validFlagGroups.computeIfAbsent(group, k -> new HashSet()).add(flag); - } + Flags f = Flags.getFlag(flag); + if (f != null && !f.isGlobalyEnabled()) { + return; + } + if (!FlagPermissions.validFlags.contains(group) && !FlagPermissions.validAreaFlags.contains(group) && !FlagPermissions.validPlayerFlags.contains(group)) { + validFlagGroups.computeIfAbsent(group, k -> new HashSet()).add(flag); + } } public static void removeFlagFromFlagGroup(String group, String flag) { - if (validFlagGroups.containsKey(group)) { - Set flags = validFlagGroups.get(group); - flags.remove(flag); - if (flags.isEmpty()) { - validFlagGroups.remove(group); - } - } + if (validFlagGroups.containsKey(group)) { + Set flags = validFlagGroups.get(group); + flags.remove(flag); + if (flags.isEmpty()) { + validFlagGroups.remove(group); + } + } } public static boolean flagGroupExists(String group) { - return validFlagGroups.containsKey(group); + return validFlagGroups.containsKey(group); } public static void initValidFlags() { - validAreaFlags.clear(); - validPlayerFlags.clear(); - validFlags.clear(); - validFlagGroups.clear(); - - for (Flags flag : Flags.values()) { - switch (flag.getFlagMode()) { - case Both: - addFlag(flag); - break; - case Player: - addPlayerOrGroupOnlyFlag(flag); - break; - case Residence: - addResidenceOnlyFlag(flag); - break; - default: - break; - } - } - - Residence.getInstance().getConfigManager().UpdateGroupedFlagsFile(); - - addMaterialToUseFlag(CMIMaterial.REPEATER.getMaterial(), Flags.diode); - addMaterialToUseFlag(CMIMaterial.COMPARATOR.getMaterial(), Flags.diode); - - addMaterialToUseFlag(CMIMaterial.CRAFTING_TABLE.getMaterial(), Flags.table); - - for (CMIMaterial one : CMIMaterial.values()) { - if (one.getMaterial() == null) - continue; - - if (one.isDoor()) - matUseFlagList.put(one.getMaterial(), Flags.door); - - if (one.isGate()) - matUseFlagList.put(one.getMaterial(), Flags.door); - - if (one.isTrapDoor()) - matUseFlagList.put(one.getMaterial(), Flags.door); - - if (one.isShulkerBox()) - matUseFlagList.put(one.getMaterial(), Flags.container); - - if (one.isButton()) - matUseFlagList.put(one.getMaterial(), Flags.button); - - if (one.isBed()) - matUseFlagList.put(one.getMaterial(), Flags.bed); - - if (one.isPotted()) - matUseFlagList.put(one.getMaterial(), Flags.flowerpot); - } - - if (CMIMaterial.DAYLIGHT_DETECTOR.getMaterial() != null) - matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); - - if (CMIMaterial.ENCHANTING_TABLE.getMaterial() != null) - addMaterialToUseFlag(CMIMaterial.ENCHANTING_TABLE.getMaterial(), Flags.enchant); - - addMaterialToUseFlag(Material.LEVER, Flags.lever); - addMaterialToUseFlag(Material.BREWING_STAND, Flags.brew); - addMaterialToUseFlag(Material.CAKE, Flags.cake); - addMaterialToUseFlag(Material.NOTE_BLOCK, Flags.note); - addMaterialToUseFlag(Material.DRAGON_EGG, Flags.egg); - addMaterialToUseFlag(CMIMaterial.COMMAND_BLOCK.getMaterial(), Flags.commandblock); - - addMaterialToUseFlag(CMIMaterial.ANVIL.getMaterial(), Flags.anvil); - addMaterialToUseFlag(CMIMaterial.CHIPPED_ANVIL.getMaterial(), Flags.anvil); - addMaterialToUseFlag(CMIMaterial.DAMAGED_ANVIL.getMaterial(), Flags.anvil); - - addMaterialToUseFlag(Material.FLOWER_POT, Flags.flowerpot); - addMaterialToUseFlag(Material.BEACON, Flags.beacon); - addMaterialToUseFlag(Material.JUKEBOX, Flags.container); - addMaterialToUseFlag(Material.CHEST, Flags.container); - addMaterialToUseFlag(Material.TRAPPED_CHEST, Flags.container); - addMaterialToUseFlag(Material.HOPPER, Flags.container); - addMaterialToUseFlag(Material.DROPPER, Flags.container); - addMaterialToUseFlag(Material.FURNACE, Flags.container); - addMaterialToUseFlag(CMIMaterial.LEGACY_BURNING_FURNACE.getMaterial(), Flags.container); - - addMaterialToUseFlag(CMIMaterial.BARREL.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.BLAST_FURNACE.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.CARTOGRAPHY_TABLE.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.FLETCHING_TABLE.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.GRINDSTONE.getMaterial(), Flags.container); - - addMaterialToUseFlag(CMIMaterial.LECTERN.getMaterial(), Flags.use); - - addMaterialToUseFlag(CMIMaterial.LOOM.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.SMITHING_TABLE.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.SMOKER.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.COMPOSTER.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.STONECUTTER.getMaterial(), Flags.container); - - addMaterialToUseFlag(Material.DISPENSER, Flags.container); + validAreaFlags.clear(); + validPlayerFlags.clear(); + validFlags.clear(); + validFlagGroups.clear(); + + for (Flags flag : Flags.values()) { + switch (flag.getFlagMode()) { + case Both: + addFlag(flag); + break; + case Player: + addPlayerOrGroupOnlyFlag(flag); + break; + case Residence: + addResidenceOnlyFlag(flag); + break; + default: + break; + } + } + + Residence.getInstance().getConfigManager().UpdateGroupedFlagsFile(); + + addMaterialToUseFlag(CMIMaterial.REPEATER.getMaterial(), Flags.diode); + addMaterialToUseFlag(CMIMaterial.COMPARATOR.getMaterial(), Flags.diode); + + addMaterialToUseFlag(CMIMaterial.CRAFTING_TABLE.getMaterial(), Flags.table); + + for (CMIMaterial one : CMIMaterial.values()) { + if (one.getMaterial() == null) + continue; + + if (one.isDoor()) + matUseFlagList.put(one.getMaterial(), Flags.door); + + if (one.isGate()) + matUseFlagList.put(one.getMaterial(), Flags.door); + + if (one.isTrapDoor()) + matUseFlagList.put(one.getMaterial(), Flags.door); + + if (one.isShulkerBox()) + matUseFlagList.put(one.getMaterial(), Flags.container); + + if (one.isButton()) + matUseFlagList.put(one.getMaterial(), Flags.button); + + if (one.isBed()) + matUseFlagList.put(one.getMaterial(), Flags.bed); + + if (one.isPotted()) + matUseFlagList.put(one.getMaterial(), Flags.flowerpot); + } + + if (CMIMaterial.DAYLIGHT_DETECTOR.getMaterial() != null) + matUseFlagList.put(CMIMaterial.DAYLIGHT_DETECTOR.getMaterial(), Flags.diode); + + if (CMIMaterial.ENCHANTING_TABLE.getMaterial() != null) + addMaterialToUseFlag(CMIMaterial.ENCHANTING_TABLE.getMaterial(), Flags.enchant); + + addMaterialToUseFlag(Material.LEVER, Flags.lever); + addMaterialToUseFlag(Material.BREWING_STAND, Flags.brew); + addMaterialToUseFlag(Material.CAKE, Flags.cake); + addMaterialToUseFlag(Material.NOTE_BLOCK, Flags.note); + addMaterialToUseFlag(Material.DRAGON_EGG, Flags.egg); + addMaterialToUseFlag(CMIMaterial.COMMAND_BLOCK.getMaterial(), Flags.commandblock); + + addMaterialToUseFlag(CMIMaterial.ANVIL.getMaterial(), Flags.anvil); + addMaterialToUseFlag(CMIMaterial.CHIPPED_ANVIL.getMaterial(), Flags.anvil); + addMaterialToUseFlag(CMIMaterial.DAMAGED_ANVIL.getMaterial(), Flags.anvil); + + addMaterialToUseFlag(Material.FLOWER_POT, Flags.flowerpot); + addMaterialToUseFlag(Material.BEACON, Flags.beacon); + addMaterialToUseFlag(Material.JUKEBOX, Flags.container); + addMaterialToUseFlag(Material.CHEST, Flags.container); + addMaterialToUseFlag(Material.TRAPPED_CHEST, Flags.container); + addMaterialToUseFlag(Material.HOPPER, Flags.container); + addMaterialToUseFlag(Material.DROPPER, Flags.container); + addMaterialToUseFlag(Material.FURNACE, Flags.container); + addMaterialToUseFlag(CMIMaterial.LEGACY_BURNING_FURNACE.getMaterial(), Flags.container); + + addMaterialToUseFlag(CMIMaterial.BARREL.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.BLAST_FURNACE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.CARTOGRAPHY_TABLE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.FLETCHING_TABLE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.GRINDSTONE.getMaterial(), Flags.container); + + addMaterialToUseFlag(CMIMaterial.LECTERN.getMaterial(), Flags.use); + + addMaterialToUseFlag(CMIMaterial.LOOM.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.SMITHING_TABLE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.SMOKER.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.COMPOSTER.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.STONECUTTER.getMaterial(), Flags.container); + + addMaterialToUseFlag(Material.DISPENSER, Flags.container); // addMaterialToUseFlag(CMIMaterial.CAKE.getMaterial(), Flags.cake); } public static FlagPermissions parseFromConfigNode(String name, ConfigurationSection node) { - FlagPermissions list = new FlagPermissions(); - - if (!node.isConfigurationSection(name)) - return list; - - Set keys = node.getConfigurationSection(name).getKeys(false); - if (keys == null) - return list; - - for (String key : keys) { - boolean state = node.getBoolean(name + "." + key, false); - key = key.toLowerCase(); - Flags f = Flags.getFlag(key); - if (f != null) - f.setEnabled(state); - if (state) { - list.setFlag(key, FlagState.TRUE); - } else { - list.setFlag(key, FlagState.FALSE); - } - } - return list; + FlagPermissions list = new FlagPermissions(); + + if (!node.isConfigurationSection(name)) + return list; + + Set keys = node.getConfigurationSection(name).getKeys(false); + if (keys == null) + return list; + + for (String key : keys) { + boolean state = node.getBoolean(name + "." + key, false); + key = key.toLowerCase(); + Flags f = Flags.getFlag(key); + if (f != null) + f.setEnabled(state); + if (state) { + list.setFlag(key, FlagState.TRUE); + } else { + list.setFlag(key, FlagState.FALSE); + } + } + return list; } public static FlagPermissions parseFromConfigNodeAsList(String node, String stage) { - FlagPermissions list = new FlagPermissions(); - if (node.equalsIgnoreCase("true")) { - list.setFlag(node, FlagState.valueOf(stage)); - } else { - list.setFlag(node, FlagState.FALSE); - } + FlagPermissions list = new FlagPermissions(); + if (node.equalsIgnoreCase("true")) { + list.setFlag(node, FlagState.valueOf(stage)); + } else { + list.setFlag(node, FlagState.FALSE); + } - return list; + return list; } protected Map getPlayerFlags(Player player, boolean allowCreate) { - Map flags = null; - - if (!Residence.getInstance().getConfigManager().isOfflineMode()) { - UUID uuid = player.getUniqueId(); - flags = playerFlags.get(uuid.toString()); - - if (flags == null && allowCreate) { - flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(uuid.toString(), flags); - cachedPlayerNameUUIDs.put(uuid, player.getName()); - } - } else { - for (Entry> one : playerFlags.entrySet()) { - if (!one.getKey().equalsIgnoreCase(player.getName())) - continue; - // Updating players name to correct capitalization - if (!one.getKey().equals(player.getName())) { - Map r = playerFlags.remove(one.getKey()); - playerFlags.put(player.getName(), r); - } - flags = one.getValue(); - break; - } - if (flags == null && allowCreate) { - flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(player.getName(), flags); - } - } - return flags; + Map flags = null; + + if (!Residence.getInstance().getConfigManager().isOfflineMode()) { + UUID uuid = player.getUniqueId(); + flags = playerFlags.get(uuid.toString()); + + if (flags == null && allowCreate) { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(uuid.toString(), flags); + cachedPlayerNameUUIDs.put(uuid, player.getName()); + } + } else { + for (Entry> one : playerFlags.entrySet()) { + if (!one.getKey().equalsIgnoreCase(player.getName())) + continue; + // Updating players name to correct capitalization + if (!one.getKey().equals(player.getName())) { + Map r = playerFlags.remove(one.getKey()); + playerFlags.put(player.getName(), r); + } + flags = one.getValue(); + break; + } + if (flags == null && allowCreate) { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(player.getName(), flags); + } + } + return flags; } protected Map getPlayerFlags(String player, boolean allowCreate)//this function works with uuid in string format as well, instead of player name { - Map flags = null; - - if (!Residence.getInstance().getConfigManager().isOfflineMode()) { - UUID uuid = null; - if (player.length() == 36) { - try { - uuid = UUID.fromString(player); - } catch (Exception e) { - - } - String resolvedName = Residence.getInstance().getPlayerName(uuid); - if (resolvedName != null) - player = resolvedName; - else if (cachedPlayerNameUUIDs.containsKey(uuid)) - player = cachedPlayerNameUUIDs.get(uuid); - } else - uuid = Residence.getInstance().getPlayerUUID(player); - - if (uuid == null) { - Set> values = cachedPlayerNameUUIDs.entrySet(); - for (Entry value : values) { - if (value.getValue().equals(player)) { - uuid = value.getKey(); - break; - } - } - } - - if (uuid != null) - flags = playerFlags.get(uuid.toString()); - if (flags == null) { - flags = playerFlags.get(player); - if (uuid != null && flags != null) { - flags = playerFlags.remove(player); - playerFlags.put(uuid.toString(), flags); - cachedPlayerNameUUIDs.put(uuid, player); - } - } else - cachedPlayerNameUUIDs.put(uuid, player); - - if (flags == null && allowCreate) { - if (uuid != null) { - flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(uuid.toString(), flags); - cachedPlayerNameUUIDs.put(uuid, player); - } else { - flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(player, flags); - } - } - } else { - for (Entry> one : playerFlags.entrySet()) { - if (!one.getKey().equalsIgnoreCase(player)) - continue; - // Updating players name to correct capitalization - if (!one.getKey().equals(player)) { - Map r = playerFlags.remove(one.getKey()); - playerFlags.put(player, r); - } - flags = one.getValue(); - break; - } - if (flags == null && allowCreate) { - flags = Collections.synchronizedMap(new HashMap()); - playerFlags.put(player, flags); - } - } - return flags; + Map flags = null; + + if (!Residence.getInstance().getConfigManager().isOfflineMode()) { + UUID uuid = null; + if (player.length() == 36) { + try { + uuid = UUID.fromString(player); + } catch (Exception e) { + + } + String resolvedName = Residence.getInstance().getPlayerName(uuid); + if (resolvedName != null) + player = resolvedName; + else if (cachedPlayerNameUUIDs.containsKey(uuid)) + player = cachedPlayerNameUUIDs.get(uuid); + } else + uuid = Residence.getInstance().getPlayerUUID(player); + + if (uuid == null) { + Set> values = cachedPlayerNameUUIDs.entrySet(); + for (Entry value : values) { + if (value.getValue().equals(player)) { + uuid = value.getKey(); + break; + } + } + } + + if (uuid != null) + flags = playerFlags.get(uuid.toString()); + if (flags == null) { + flags = playerFlags.get(player); + if (uuid != null && flags != null) { + flags = playerFlags.remove(player); + playerFlags.put(uuid.toString(), flags); + cachedPlayerNameUUIDs.put(uuid, player); + } + } else + cachedPlayerNameUUIDs.put(uuid, player); + + if (flags == null && allowCreate) { + if (uuid != null) { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(uuid.toString(), flags); + cachedPlayerNameUUIDs.put(uuid, player); + } else { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(player, flags); + } + } + } else { + for (Entry> one : playerFlags.entrySet()) { + if (!one.getKey().equalsIgnoreCase(player)) + continue; + // Updating players name to correct capitalization + if (!one.getKey().equals(player)) { + Map r = playerFlags.remove(one.getKey()); + playerFlags.put(player, r); + } + flags = one.getValue(); + break; + } + if (flags == null && allowCreate) { + flags = Collections.synchronizedMap(new HashMap()); + playerFlags.put(player, flags); + } + } + return flags; } public boolean setPlayerFlag(String player, String flag, FlagState state) { - Map map = this.getPlayerFlags(player, state != FlagState.NEITHER); - if (map == null) - return true; - if (state == FlagState.FALSE) { - map.put(flag, false); - } else if (state == FlagState.TRUE) { - map.put(flag, true); - } else if (state == FlagState.NEITHER) { - map.remove(flag); - } - if (map.isEmpty()) - this.removeAllPlayerFlags(player); + Map map = this.getPlayerFlags(player, state != FlagState.NEITHER); + if (map == null) + return true; + if (state == FlagState.FALSE) { + map.put(flag, false); + } else if (state == FlagState.TRUE) { + map.put(flag, true); + } else if (state == FlagState.NEITHER) { + map.remove(flag); + } + if (map.isEmpty()) + this.removeAllPlayerFlags(player); - return true; + return true; } public void removeAllPlayerFlags(String player) {//this function works with uuid in string format as well, instead of player name - // player = player.toLowerCase(); - - if (!Residence.getInstance().getConfigManager().isOfflineMode()) { - UUID uuid = Residence.getInstance().getPlayerUUID(player); - if (uuid == null) - for (Entry entry : cachedPlayerNameUUIDs.entrySet()) - if (entry.getValue().equals(player)) { - uuid = entry.getKey(); - break; - } - - if (uuid != null) { - playerFlags.remove(uuid.toString()); - cachedPlayerNameUUIDs.remove(uuid); - } - return; - } - playerFlags.remove(player); + // player = player.toLowerCase(); + + if (!Residence.getInstance().getConfigManager().isOfflineMode()) { + UUID uuid = Residence.getInstance().getPlayerUUID(player); + if (uuid == null) + for (Entry entry : cachedPlayerNameUUIDs.entrySet()) + if (entry.getValue().equals(player)) { + uuid = entry.getKey(); + break; + } + + if (uuid != null) { + playerFlags.remove(uuid.toString()); + cachedPlayerNameUUIDs.remove(uuid); + } + return; + } + playerFlags.remove(player); } public void removeAllGroupFlags(String group) { - groupFlags.remove(group); + groupFlags.remove(group); } public boolean setGroupFlag(String group, String flag, FlagState state) { - group = group.toLowerCase(); - if (!groupFlags.containsKey(group)) { - groupFlags.put(group, Collections.synchronizedMap(new HashMap())); - } - Map map = groupFlags.get(group); - if (state == FlagState.FALSE) { - map.put(flag, false); - } else if (state == FlagState.TRUE) { - map.put(flag, true); - } else if (state == FlagState.NEITHER) { - map.remove(flag); - } - if (map.isEmpty()) { - groupFlags.remove(group); - } - return true; + group = group.toLowerCase(); + if (!groupFlags.containsKey(group)) { + groupFlags.put(group, Collections.synchronizedMap(new HashMap())); + } + Map map = groupFlags.get(group); + if (state == FlagState.FALSE) { + map.put(flag, false); + } else if (state == FlagState.TRUE) { + map.put(flag, true); + } else if (state == FlagState.NEITHER) { + map.remove(flag); + } + if (map.isEmpty()) { + groupFlags.remove(group); + } + return true; } public boolean setFlag(String flag, FlagState state) { - if (state == FlagState.FALSE) { - cuboidFlags.put(flag, false); - } else if (state == FlagState.TRUE) { - cuboidFlags.put(flag, true); - } else if (state == FlagState.NEITHER) { - cuboidFlags.remove(flag); - } - return true; + if (state == FlagState.FALSE) { + cuboidFlags.put(flag, false); + } else if (state == FlagState.TRUE) { + cuboidFlags.put(flag, true); + } else if (state == FlagState.NEITHER) { + cuboidFlags.remove(flag); + } + return true; } public static FlagState stringToFlagState(String flagstate) { - if (flagstate.equalsIgnoreCase("true") || flagstate.equalsIgnoreCase("t")) { - return FlagState.TRUE; - } else if (flagstate.equalsIgnoreCase("false") || flagstate.equalsIgnoreCase("f")) { - return FlagState.FALSE; - } else if (flagstate.equalsIgnoreCase("remove") || flagstate.equalsIgnoreCase("r")) { - return FlagState.NEITHER; - } else { - return FlagState.INVALID; - } + if (flagstate.equalsIgnoreCase("true") || flagstate.equalsIgnoreCase("t")) { + return FlagState.TRUE; + } else if (flagstate.equalsIgnoreCase("false") || flagstate.equalsIgnoreCase("f")) { + return FlagState.FALSE; + } else if (flagstate.equalsIgnoreCase("remove") || flagstate.equalsIgnoreCase("r")) { + return FlagState.NEITHER; + } else { + return FlagState.INVALID; + } } public boolean playerHas(ResidencePlayer resPlayer, Flags flag, boolean def) { - if (resPlayer == null) - return false; - return this.playerCheck(resPlayer.getPlayer(), flag.toString(), this.groupCheck(resPlayer.getGroup(), flag.toString(), this.has(flag, def))); + if (resPlayer == null) + return false; + return this.playerCheck(resPlayer.getPlayer(), flag.toString(), this.groupCheck(resPlayer.getGroup(), flag.toString(), this.has(flag, def))); } public boolean playerHas(Player player, Flags flag, FlagCombo f) { - switch (f) { - case FalseOrNone: - return !playerHas(player, flag, false); - case OnlyFalse: - return !playerHas(player, flag, true); - case OnlyTrue: - return playerHas(player, flag, false); - case TrueOrNone: - return playerHas(player, flag, true); - default: - return false; - } + switch (f) { + case FalseOrNone: + return !playerHas(player, flag, false); + case OnlyFalse: + return !playerHas(player, flag, true); + case OnlyTrue: + return playerHas(player, flag, false); + case TrueOrNone: + return playerHas(player, flag, true); + default: + return false; + } } public boolean playerHas(Player player, Flags flag, boolean def) { - if (player == null) - return false; + if (player == null) + return false; - ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = resPlayer.getGroup(); - return this.playerCheck(player, flag.toString(), this.groupCheck(group, flag.toString(), this.has(flag, def))); + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(); + return this.playerCheck(player, flag.toString(), this.groupCheck(group, flag.toString(), this.has(flag, def))); } public boolean playerHas(Player player, String world, Flags flag, boolean def) { - if (player == null) - return false; + if (player == null) + return false; - if (!flag.isGlobalyEnabled()) - return true; + if (!flag.isGlobalyEnabled()) + return true; - ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = resPlayer.getGroup(world); - return this.playerCheck(player, flag.toString(), this.groupCheck(group, flag.toString(), this.has(flag, def))); + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(world); + return this.playerCheck(player, flag.toString(), this.groupCheck(group, flag.toString(), this.has(flag, def))); } @Deprecated public boolean playerHas(String player, String world, String flag, boolean def) { - ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = resPlayer.getGroup(world); - return this.playerCheck(player, flag, this.groupCheck(group, flag, this.has(flag, def))); + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(world); + return this.playerCheck(player, flag, this.groupCheck(group, flag, this.has(flag, def))); } public boolean groupHas(String group, String flag, boolean def) { - return this.groupCheck(group, flag, this.has(flag, def)); + return this.groupCheck(group, flag, this.has(flag, def)); } private boolean playerCheck(Player player, String flag, boolean def) { - Map pmap = this.getPlayerFlags(player, false); - if (pmap != null) { - if (pmap.containsKey(flag)) { - return pmap.get(flag); - } - } - if (parent != null) { - return parent.playerCheck(player, flag, def); - } - return def; + Map pmap = this.getPlayerFlags(player, false); + if (pmap != null) { + if (pmap.containsKey(flag)) { + return pmap.get(flag); + } + } + if (parent != null) { + return parent.playerCheck(player, flag, def); + } + return def; } @Deprecated private boolean playerCheck(String player, String flag, boolean def) { - Map pmap = this.getPlayerFlags(player, false); - if (pmap != null) { - if (pmap.containsKey(flag)) { - return pmap.get(flag); - } - } - if (parent != null) { - return parent.playerCheck(player, flag, def); - } - return def; + Map pmap = this.getPlayerFlags(player, false); + if (pmap != null) { + if (pmap.containsKey(flag)) { + return pmap.get(flag); + } + } + if (parent != null) { + return parent.playerCheck(player, flag, def); + } + return def; } private boolean groupCheck(PermissionGroup group, String flag, boolean def) { - if (group == null) - return def; - return groupCheck(group.getGroupName(), flag, def); + if (group == null) + return def; + return groupCheck(group.getGroupName(), flag, def); } private boolean groupCheck(String group, String flag, boolean def) { - if (groupFlags.containsKey(group)) { - Map gmap = groupFlags.get(group); - if (gmap.containsKey(flag)) { - return gmap.get(flag); - } - } - if (parent != null) { - return parent.groupCheck(group, flag, def); - } - return def; + if (groupFlags.containsKey(group)) { + Map gmap = groupFlags.get(group); + if (gmap.containsKey(flag)) { + return gmap.get(flag); + } + } + if (parent != null) { + return parent.groupCheck(group, flag, def); + } + return def; } public boolean has(Flags flag, FlagCombo f) { - switch (f) { - case FalseOrNone: - return !has(flag, false); - case OnlyFalse: - return !has(flag, true); - case OnlyTrue: - return has(flag, false); - case TrueOrNone: - return has(flag, true); - default: - return false; - } + switch (f) { + case FalseOrNone: + return !has(flag, false); + case OnlyFalse: + return !has(flag, true); + case OnlyTrue: + return has(flag, false); + case TrueOrNone: + return has(flag, true); + default: + return false; + } } public boolean has(Flags flag, boolean def) { - return has(flag, def, true); + return has(flag, def, true); } public boolean has(Flags flag, boolean def, boolean checkParent) { - if (cuboidFlags.containsKey(flag.toString())) { - return cuboidFlags.get(flag.toString()); - } - if (checkParent && parent != null) { - return parent.has(flag, def); - } - return def; + if (cuboidFlags.containsKey(flag.toString())) { + return cuboidFlags.get(flag.toString()); + } + if (checkParent && parent != null) { + return parent.has(flag, def); + } + return def; } @Deprecated public boolean has(String flag, boolean def) { - return has(flag, def, true); + return has(flag, def, true); } @Deprecated public boolean has(String flag, boolean def, boolean checkParent) { - if (cuboidFlags.containsKey(flag)) { - return cuboidFlags.get(flag); - } - if (checkParent && parent != null) { - return parent.has(flag, def); - } - return def; + if (cuboidFlags.containsKey(flag)) { + return cuboidFlags.get(flag); + } + if (checkParent && parent != null) { + return parent.has(flag, def); + } + return def; } public boolean isPlayerSet(String player, String flag) { - Map flags = this.getPlayerFlags(player, false); - if (flags == null) - return false; - return flags.containsKey(flag); + Map flags = this.getPlayerFlags(player, false); + if (flags == null) + return false; + return flags.containsKey(flag); } public boolean inheritanceIsPlayerSet(String player, String flag) { - Map flags = this.getPlayerFlags(player, false); - if (flags == null) { - return parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); - } - return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); + Map flags = this.getPlayerFlags(player, false); + if (flags == null) { + return parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); + } + return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsPlayerSet(player, flag); } public boolean isGroupSet(String group, String flag) { - group = group.toLowerCase(); - Map flags = groupFlags.get(group); - if (flags == null) { - return false; - } - return flags.containsKey(flag); + group = group.toLowerCase(); + Map flags = groupFlags.get(group); + if (flags == null) { + return false; + } + return flags.containsKey(flag); } public boolean inheritanceIsGroupSet(String group, String flag) { - group = group.toLowerCase(); - Map flags = groupFlags.get(group); - if (flags == null) { - return parent == null ? false : parent.inheritanceIsGroupSet(group, flag); - } - return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsGroupSet(group, flag); + group = group.toLowerCase(); + Map flags = groupFlags.get(group); + if (flags == null) { + return parent == null ? false : parent.inheritanceIsGroupSet(group, flag); + } + return flags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsGroupSet(group, flag); } public boolean isSet(String flag) { - return cuboidFlags.containsKey(flag); + return cuboidFlags.containsKey(flag); } public boolean inheritanceIsSet(String flag) { - return cuboidFlags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsSet(flag); + return cuboidFlags.containsKey(flag) ? true : parent == null ? false : parent.inheritanceIsSet(flag); } public boolean checkValidFlag(String flag, boolean globalflag) { - if (validFlags.contains(flag)) { - return true; - } - if (globalflag) { - if (validAreaFlags.contains(flag)) { - return true; - } - } else { - if (validPlayerFlags.contains(flag)) { - return true; - } - } - return false; + if (validFlags.contains(flag)) { + return true; + } + if (globalflag) { + if (validAreaFlags.contains(flag)) { + return true; + } + } else { + if (validPlayerFlags.contains(flag)) { + return true; + } + } + return false; } public Map save(String world) { - Map root = new LinkedHashMap<>(); - - // Putting uuid's to main cache for later save - - if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { - Map playerFlagsClone = new HashMap(); - for (Entry> one : playerFlags.entrySet()) { - MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, one.getValue()); - playerFlagsClone.put(one.getKey(), min.getId()); - } - root.put("PlayerFlags", playerFlagsClone); - - if (!groupFlags.isEmpty()) { - Map GroupFlagsClone = new HashMap(); - for (Entry> one : groupFlags.entrySet()) { - MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, one.getValue()); - GroupFlagsClone.put(one.getKey(), min.getId()); - } - root.put("GroupFlags", GroupFlagsClone); - } - - MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, cuboidFlags); - if (min == null) { - // Cloning map to fix issue for yml anchors being created - root.put("AreaFlags", new HashMap(cuboidFlags)); - } else { - root.put("AreaFlags", min.getId()); - } - - } else { - root.put("PlayerFlags", clone(playerFlags)); - if (!groupFlags.isEmpty()) { - root.put("GroupFlags", clone(this.groupFlags)); - } - - // Cloning map to fix issue for yml anchors being created - root.put("AreaFlags", new HashMap(cuboidFlags)); - } - - return root; + Map root = new LinkedHashMap<>(); + + // Putting uuid's to main cache for later save + + if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { + Map playerFlagsClone = new HashMap(); + for (Entry> one : playerFlags.entrySet()) { + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, one.getValue()); + playerFlagsClone.put(one.getKey(), min.getId()); + } + root.put("PlayerFlags", playerFlagsClone); + + if (!groupFlags.isEmpty()) { + Map GroupFlagsClone = new HashMap(); + for (Entry> one : groupFlags.entrySet()) { + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, one.getValue()); + GroupFlagsClone.put(one.getKey(), min.getId()); + } + root.put("GroupFlags", GroupFlagsClone); + } + + MinimizeFlags min = Residence.getInstance().getResidenceManager().addFlagsTempCache(world, cuboidFlags); + if (min == null) { + // Cloning map to fix issue for yml anchors being created + root.put("AreaFlags", new HashMap(cuboidFlags)); + } else { + root.put("AreaFlags", min.getId()); + } + + } else { + root.put("PlayerFlags", clone(playerFlags)); + if (!groupFlags.isEmpty()) { + root.put("GroupFlags", clone(this.groupFlags)); + } + + // Cloning map to fix issue for yml anchors being created + root.put("AreaFlags", new HashMap(cuboidFlags)); + } + + return root; } private static HashMap> clone(Map> map) { - HashMap> nm = new HashMap>(); - for (Entry> one : map.entrySet()) { - nm.put(one.getKey(), new HashMap(one.getValue())); - } - return nm; + HashMap> nm = new HashMap>(); + for (Entry> one : map.entrySet()) { + nm.put(one.getKey(), new HashMap(one.getValue())); + } + return nm; } public static FlagPermissions load(Map root) throws Exception { - FlagPermissions newperms = new FlagPermissions(); - return FlagPermissions.load(root, newperms); + FlagPermissions newperms = new FlagPermissions(); + return FlagPermissions.load(root, newperms); } @SuppressWarnings({ "unchecked", "rawtypes" }) protected static FlagPermissions load(Map root, FlagPermissions newperms) throws Exception { - if (root.containsKey("LastKnownPlayerNames")) - newperms.cachedPlayerNameUUIDs = (Map) root.get("LastKnownPlayerNames"); - - if (root.containsKey("PlayerFlags")) { - boolean old = true; - for (Entry one : ((HashMap) root.get("PlayerFlags")).entrySet()) { - if (one.getValue() instanceof Integer) - old = false; - break; - } - if (old) - newperms.playerFlags = (Map) root.get("PlayerFlags"); - else { - if (newperms instanceof ResidencePermissions) { - Map> t = new HashMap>(); - Map ft = new HashMap(); - for (Entry one : ((HashMap) root.get("PlayerFlags")).entrySet()) { - ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), one.getValue()); - if (ft != null && !ft.isEmpty()) { - if (Residence.getInstance().getConfigManager().isOfflineMode() && one.getKey().length() == 36) { - String name = Residence.getInstance().getPlayerName(UUID.fromString(one.getKey())); - if (name != null) - t.put(name, new HashMap(ft)); - else - t.put(one.getKey(), new HashMap(ft)); - } else - t.put(one.getKey(), new HashMap(ft)); - } - } - if (!t.isEmpty()) - newperms.playerFlags = t; - } - } - } - - for (Entry> one : newperms.playerFlags.entrySet()) { - if (one.getKey().length() != 32) { - continue; - } - - try { - UUID uuid = UUID.fromString(one.getKey()); - OfflinePlayer player = Residence.getInstance().getOfflinePlayer(uuid); - newperms.cachedPlayerNameUUIDs.put(uuid, player.getName()); - } catch (Exception e) { - continue; - } - - } - - if (root.containsKey("GroupFlags")) { - boolean old = true; - for (Entry one : ((HashMap) root.get("GroupFlags")).entrySet()) { - if (one.getValue() instanceof Integer) - old = false; - break; - } - if (old) - newperms.groupFlags = (Map) root.get("GroupFlags"); - else { - if (newperms instanceof ResidencePermissions) { - Map> t = new HashMap>(); - Map ft = new HashMap(); - for (Entry one : ((HashMap) root.get("GroupFlags")).entrySet()) { - ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), one.getValue()); - if (ft != null && !ft.isEmpty()) - t.put(one.getKey(), new HashMap(ft)); - } - if (!t.isEmpty()) { - newperms.groupFlags = t; - } - } - } - } + if (root.containsKey("LastKnownPlayerNames")) + newperms.cachedPlayerNameUUIDs = (Map) root.get("LastKnownPlayerNames"); + + if (root.containsKey("PlayerFlags")) { + boolean old = true; + for (Entry one : ((HashMap) root.get("PlayerFlags")).entrySet()) { + if (one.getValue() instanceof Integer) + old = false; + break; + } + if (old) + newperms.playerFlags = (Map) root.get("PlayerFlags"); + else { + if (newperms instanceof ResidencePermissions) { + Map> t = new HashMap>(); + Map ft = new HashMap(); + for (Entry one : ((HashMap) root.get("PlayerFlags")).entrySet()) { + ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), one.getValue()); + if (ft != null && !ft.isEmpty()) { + if (Residence.getInstance().getConfigManager().isOfflineMode() && one.getKey().length() == 36) { + String name = Residence.getInstance().getPlayerName(UUID.fromString(one.getKey())); + if (name != null) + t.put(name, new HashMap(ft)); + else + t.put(one.getKey(), new HashMap(ft)); + } else + t.put(one.getKey(), new HashMap(ft)); + } + } + if (!t.isEmpty()) + newperms.playerFlags = t; + } + } + } + + for (Entry> one : newperms.playerFlags.entrySet()) { + if (one.getKey().length() != 32) { + continue; + } + + try { + UUID uuid = UUID.fromString(one.getKey()); + OfflinePlayer player = Residence.getInstance().getOfflinePlayer(uuid); + newperms.cachedPlayerNameUUIDs.put(uuid, player.getName()); + } catch (Exception e) { + continue; + } + + } + + if (root.containsKey("GroupFlags")) { + boolean old = true; + for (Entry one : ((HashMap) root.get("GroupFlags")).entrySet()) { + if (one.getValue() instanceof Integer) + old = false; + break; + } + if (old) + newperms.groupFlags = (Map) root.get("GroupFlags"); + else { + if (newperms instanceof ResidencePermissions) { + Map> t = new HashMap>(); + Map ft = new HashMap(); + for (Entry one : ((HashMap) root.get("GroupFlags")).entrySet()) { + ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), one.getValue()); + if (ft != null && !ft.isEmpty()) + t.put(one.getKey(), new HashMap(ft)); + } + if (!t.isEmpty()) { + newperms.groupFlags = t; + } + } + } + } // if (root.containsKey("GroupFlags")) // newperms.groupFlags = (Map) root.get("GroupFlags"); - if (root.containsKey("AreaFlags")) { - boolean old = true; - if (root.get("AreaFlags") instanceof Integer) - old = false; - if (old) - newperms.cuboidFlags = (Map) root.get("AreaFlags"); - else { - if (newperms instanceof ResidencePermissions) { - Map ft = new HashMap(); - ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), (Integer) root.get("AreaFlags")); - if (ft != null && !ft.isEmpty()) - newperms.cuboidFlags = new HashMap(ft); - } - } + if (root.containsKey("AreaFlags")) { + boolean old = true; + if (root.get("AreaFlags") instanceof Integer) + old = false; + if (old) + newperms.cuboidFlags = (Map) root.get("AreaFlags"); + else { + if (newperms instanceof ResidencePermissions) { + Map ft = new HashMap(); + ft = Residence.getInstance().getResidenceManager().getChacheFlags(((ResidencePermissions) newperms).getWorld(), (Integer) root.get("AreaFlags")); + if (ft != null && !ft.isEmpty()) + newperms.cuboidFlags = new HashMap(ft); + } + } // newperms.cuboidFlags = (Map) root.get("AreaFlags"); - } else - newperms.cuboidFlags = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags().getFlags(); + } else + newperms.cuboidFlags = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags().getFlags(); - String ownerName = null; - String uuid = null; + String ownerName = null; + String uuid = null; - if (root.containsKey("OwnerLastKnownName")) { - ownerName = (String) root.get("OwnerLastKnownName"); - if (root.containsKey("OwnerUUID")) - uuid = (String) root.get("OwnerUUID"); - else - uuid = Residence.getInstance().getTempUserUUID(); - } + if (root.containsKey("OwnerLastKnownName")) { + ownerName = (String) root.get("OwnerLastKnownName"); + if (root.containsKey("OwnerUUID")) + uuid = (String) root.get("OwnerUUID"); + else + uuid = Residence.getInstance().getTempUserUUID(); + } - if (Residence.getInstance().getConfigManager().isOfflineMode()) - newperms.convertFlagsUUIDsToPlayerNames(); - else - newperms.convertPlayerNamesToUUIDs(ownerName, uuid); + if (Residence.getInstance().getConfigManager().isOfflineMode()) + newperms.convertFlagsUUIDsToPlayerNames(); + else + newperms.convertPlayerNamesToUUIDs(ownerName, uuid); - return newperms; + return newperms; } private void convertFlagsUUIDsToPlayerNames() { - HashMap converts = new HashMap<>(); - for (String keyset : playerFlags.keySet()) { - if (keyset.length() == 36) { - String uuid = keyset; - if (uuid.equalsIgnoreCase(Residence.getInstance().getServerLandUUID())) - converts.put(uuid, Residence.getInstance().getServerLandName()); - else { - String name = Residence.getInstance().getPlayerName(uuid); - if (name != null) - converts.put(uuid, name); - } - } - } - - for (Entry one : converts.entrySet()) { - if (playerFlags.containsKey(one.getKey())) { - Map replace = playerFlags.get(one.getKey()); - playerFlags.remove(one.getKey()); - playerFlags.put(one.getValue(), replace); - } - } + HashMap converts = new HashMap<>(); + for (String keyset : playerFlags.keySet()) { + if (keyset.length() == 36) { + String uuid = keyset; + if (uuid.equalsIgnoreCase(Residence.getInstance().getServerLandUUID())) + converts.put(uuid, Residence.getInstance().getServerLandName()); + else { + String name = Residence.getInstance().getPlayerName(uuid); + if (name != null) + converts.put(uuid, name); + } + } + } + + for (Entry one : converts.entrySet()) { + if (playerFlags.containsKey(one.getKey())) { + Map replace = playerFlags.get(one.getKey()); + playerFlags.remove(one.getKey()); + playerFlags.put(one.getValue(), replace); + } + } } private void convertPlayerNamesToUUIDs(String OwnerName, String owneruuid) { - HashMap converts = new HashMap<>(); - - List Toremove = new ArrayList(); - - for (String keyset : playerFlags.keySet()) { - if (keyset.length() != 36) { - String uuid = null; - if (OwnerName != null && OwnerName.equals(keyset) && !owneruuid.equals(Residence.getInstance().getTempUserUUID())) - uuid = owneruuid; - else - uuid = Residence.getInstance().getPlayerUUIDString(keyset); - // if (OwnerName.equals(keyset)) { - if (uuid != null) - converts.put(keyset, uuid); - else if (OwnerName != null && !OwnerName.equals(keyset)) - Toremove.add(keyset); - // } - } else { - String pname = Residence.getInstance().getPlayerName(keyset); - if (pname != null) { - try { - UUID uuid = UUID.fromString(keyset); - this.cachedPlayerNameUUIDs.put(uuid, pname); - } catch (Exception e) { - } - } - } - } - - for (String one : Toremove) { - playerFlags.remove(one); - } - for (Entry convert : converts.entrySet()) { - playerFlags.put(convert.getValue(), playerFlags.remove(convert.getKey())); - try { - UUID uuid = UUID.fromString(convert.getValue()); - cachedPlayerNameUUIDs.put(uuid, convert.getKey()); - } catch (Exception e) { - } - } + HashMap converts = new HashMap<>(); + + List Toremove = new ArrayList(); + + for (String keyset : playerFlags.keySet()) { + if (keyset.length() != 36) { + String uuid = null; + if (OwnerName != null && OwnerName.equals(keyset) && !owneruuid.equals(Residence.getInstance().getTempUserUUID())) + uuid = owneruuid; + else + uuid = Residence.getInstance().getPlayerUUIDString(keyset); + // if (OwnerName.equals(keyset)) { + if (uuid != null) + converts.put(keyset, uuid); + else if (OwnerName != null && !OwnerName.equals(keyset)) + Toremove.add(keyset); + // } + } else { + String pname = Residence.getInstance().getPlayerName(keyset); + if (pname != null) { + try { + UUID uuid = UUID.fromString(keyset); + this.cachedPlayerNameUUIDs.put(uuid, pname); + } catch (Exception e) { + } + } + } + } + + for (String one : Toremove) { + playerFlags.remove(one); + } + for (Entry convert : converts.entrySet()) { + playerFlags.put(convert.getValue(), playerFlags.remove(convert.getKey())); + try { + UUID uuid = UUID.fromString(convert.getValue()); + cachedPlayerNameUUIDs.put(uuid, convert.getKey()); + } catch (Exception e) { + } + } } public String listFlags() { - return listFlags(0, 0); + return listFlags(0, 0); } public String listFlags(Integer split) { - return listFlags(split, 0); + return listFlags(split, 0); } public String listFlags(Integer split, Integer totalShow) { - StringBuilder sbuild = new StringBuilder(); - Set> set = cuboidFlags.entrySet(); - - FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); - - synchronized (set) { - Iterator> it = set.iterator(); - int i = -1; - int t = 0; - - String haveColor = Residence.getInstance().getLM().getMessage(lm.Flag_haveColor); - String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_denyColor); - String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); - String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); - - while (it.hasNext()) { - Entry next = it.next(); - - if (Residence.getInstance().getConfigManager().isInfoExcludeDFlags() && gRD.cuboidFlags.get(next.getKey()) != null && gRD.cuboidFlags.get(next.getKey()) == next.getValue()) - continue; - - String fname = next.getKey(); - - Flags flag = Flags.getFlag(fname); - - if (flag != null && !flag.isGlobalyEnabled()) - continue; - if (flag != null) - fname = flag.getName(); - i++; - t++; - - if (totalShow > 0 && t > totalShow) { - break; - } - - if (split > 0 && i >= split) { - i = 0; - sbuild.append("\n"); - } - - if (next.getValue()) { - sbuild.append(haveColor).append(havePrefix).append(fname); - if (it.hasNext()) { - sbuild.append(" "); - } - } else { - sbuild.append(denyColor).append(denyPrefix).append(fname); - if (it.hasNext()) { - sbuild.append(" "); - } - } - - } - } - if (sbuild.length() == 0) { - sbuild.append("none"); - } - return CMIChatColor.translate(sbuild.toString()); + StringBuilder sbuild = new StringBuilder(); + Set> set = cuboidFlags.entrySet(); + + FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); + + synchronized (set) { + Iterator> it = set.iterator(); + int i = -1; + int t = 0; + + String haveColor = Residence.getInstance().getLM().getMessage(lm.Flag_haveColor); + String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_denyColor); + String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); + String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); + + while (it.hasNext()) { + Entry next = it.next(); + + if (Residence.getInstance().getConfigManager().isInfoExcludeDFlags() && gRD.cuboidFlags.get(next.getKey()) != null && gRD.cuboidFlags.get(next.getKey()) == next.getValue()) + continue; + + String fname = next.getKey(); + + Flags flag = Flags.getFlag(fname); + + if (flag != null && !flag.isGlobalyEnabled()) + continue; + if (flag != null) + fname = flag.getName(); + + i++; + t++; + + if (totalShow > 0 && t > totalShow) { + break; + } + + if (split > 0 && i >= split) { + i = 0; + sbuild.append("\n"); + } + + if (next.getValue()) { + sbuild.append(haveColor).append(havePrefix).append(fname); + if (it.hasNext()) { + sbuild.append(" "); + } + } else { + sbuild.append(denyColor).append(denyPrefix).append(fname); + if (it.hasNext()) { + sbuild.append(" "); + } + } + + } + } + if (sbuild.length() == 0) { + sbuild.append("none"); + } + return CMIChatColor.translate(sbuild.toString()); } public Map getFlags() { - return cuboidFlags; + return cuboidFlags; } public Map getPlayerFlags(String player) { - return this.getPlayerFlags(player, false); + return this.getPlayerFlags(player, false); } @Deprecated public Set getposibleFlags() { - return getAllPosibleFlags(); + return getAllPosibleFlags(); } public static Set getAllPosibleFlags() { - Set t = new HashSet(); - t.addAll(FlagPermissions.validFlags); - t.addAll(FlagPermissions.validPlayerFlags); - return t; + Set t = new HashSet(); + t.addAll(FlagPermissions.validFlags); + t.addAll(FlagPermissions.validPlayerFlags); + return t; } public static ArrayList getPosibleAreaFlags() { - return FlagPermissions.validAreaFlags; + return FlagPermissions.validAreaFlags; } public List getPosibleFlags(Player player, boolean residence, boolean resadmin) { - Set flags = new HashSet(); - for (Entry one : Residence.getInstance().getPermissionManager().getAllFlags().getFlags().entrySet()) { - if (!one.getValue() && !resadmin && !ResPerm.flag_$1.hasSetPermission(player, one.getKey().toLowerCase())) - continue; + Set flags = new HashSet(); + for (Entry one : Residence.getInstance().getPermissionManager().getAllFlags().getFlags().entrySet()) { + if (!one.getValue() && !resadmin && !ResPerm.flag_$1.hasSetPermission(player, one.getKey().toLowerCase())) + continue; - if (!residence && !getAllPosibleFlags().contains(one.getKey())) - continue; + if (!residence && !getAllPosibleFlags().contains(one.getKey())) + continue; - String fname = one.getKey(); + String fname = one.getKey(); - Flags flag = Flags.getFlag(fname); + Flags flag = Flags.getFlag(fname); - if (flag != null && !flag.isGlobalyEnabled()) - continue; + if (flag != null && !flag.isGlobalyEnabled()) + continue; - flags.add(one.getKey()); - } + flags.add(one.getKey()); + } - return new ArrayList(flags); + return new ArrayList(flags); } public String listPlayerFlags(String player) { - Map flags = this.getPlayerFlags(player, false); - if (flags != null) { - return this.printPlayerFlags(flags); - } - return "none"; + Map flags = this.getPlayerFlags(player, false); + if (flags != null) { + return this.printPlayerFlags(flags); + } + return "none"; } protected String printPlayerFlags(Map flags) { - StringBuilder sbuild = new StringBuilder(); - if (flags == null) - return "none"; - Set> set = flags.entrySet(); - - String haveColor = Residence.getInstance().getLM().getMessage(lm.Flag_haveColor); - String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_denyColor); - String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); - String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); - - synchronized (flags) { - Iterator> it = set.iterator(); - while (it.hasNext()) { - Entry next = it.next(); - - String fname = next.getKey(); - - Flags flag = Flags.getFlag(next.getKey()); - if (flag != null && !flag.isGlobalyEnabled()) - continue; - if (flag != null) - fname = flag.getName(); - - if (next.getValue()) { - sbuild.append(haveColor).append(havePrefix).append(fname); - if (it.hasNext()) { - sbuild.append(" "); - } - } else { - sbuild.append(denyColor).append(denyPrefix).append(fname); - if (it.hasNext()) { - sbuild.append(" "); - } - } - } - } - if (sbuild.length() == 0) { - sbuild.append("none"); - } - return CMIChatColor.translate(sbuild.toString()); + StringBuilder sbuild = new StringBuilder(); + if (flags == null) + return "none"; + Set> set = flags.entrySet(); + + String haveColor = Residence.getInstance().getLM().getMessage(lm.Flag_haveColor); + String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_denyColor); + String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); + String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); + + synchronized (flags) { + Iterator> it = set.iterator(); + + while (it.hasNext()) { + Entry next = it.next(); + + String fname = next.getKey(); + + Flags flag = Flags.getFlag(next.getKey()); + if (flag != null && !flag.isGlobalyEnabled()) + continue; + if (flag != null) + fname = flag.getName(); + + if (next.getValue()) { + sbuild.append(haveColor).append(havePrefix).append(fname); + if (it.hasNext()) { + sbuild.append(" "); + } + } else { + sbuild.append(denyColor).append(denyPrefix).append(fname); + if (it.hasNext()) { + sbuild.append(" "); + } + } + } + } + if (sbuild.length() == 0) { + sbuild.append("none"); + } + return CMIChatColor.translate(sbuild.toString()); } public String listOtherPlayersFlags(String player) { // player = player.toLowerCase(); - String uuids = Residence.getInstance().getPlayerUUIDString(player); - StringBuilder sbuild = new StringBuilder(); - Set>> set = playerFlags.entrySet(); - synchronized (set) { - Iterator>> it = set.iterator(); - while (it.hasNext()) { - Entry> nextEnt = it.next(); - String next = nextEnt.getKey(); - if (!Residence.getInstance().getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getInstance().getConfigManager().isOfflineMode() && !next - .equals(player)) { - String perms = printPlayerFlags(nextEnt.getValue()); - if (next.length() == 36) { - String resolvedName = Residence.getInstance().getPlayerName(next); - if (resolvedName != null) { - try { - UUID uuid = UUID.fromString(next); - this.cachedPlayerNameUUIDs.put(uuid, resolvedName); - } catch (Exception e) { - } - next = resolvedName; - } - } - if (!perms.equals("none")) { - sbuild.append(next).append(ChatColor.WHITE).append("[").append(perms).append(ChatColor.WHITE).append("] "); - } - } - } - } - return sbuild.toString(); + String uuids = Residence.getInstance().getPlayerUUIDString(player); + StringBuilder sbuild = new StringBuilder(); + Set>> set = playerFlags.entrySet(); + synchronized (set) { + Iterator>> it = set.iterator(); + while (it.hasNext()) { + Entry> nextEnt = it.next(); + String next = nextEnt.getKey(); + if (!Residence.getInstance().getConfigManager().isOfflineMode() && !next.equals(player) && !next.equals(uuids) || Residence.getInstance().getConfigManager().isOfflineMode() && !next + .equals(player)) { + String perms = printPlayerFlags(nextEnt.getValue()); + if (next.length() == 36) { + String resolvedName = Residence.getInstance().getPlayerName(next); + if (resolvedName != null) { + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { + } + next = resolvedName; + } + } + if (!perms.equals("none")) { + sbuild.append(next).append(ChatColor.WHITE).append("[").append(perms).append(ChatColor.WHITE).append("] "); + } + } + } + } + return sbuild.toString(); } public String listPlayersFlags() { - StringBuilder sbuild = new StringBuilder(); - Set>> set = playerFlags.entrySet(); - synchronized (set) { - Iterator>> it = set.iterator(); - while (it.hasNext()) { - Entry> nextEnt = it.next(); - String next = nextEnt.getKey(); - - String perms = printPlayerFlags(nextEnt.getValue()); - if (next.length() == 36) { - String resolvedName = Residence.getInstance().getPlayerName(next); - if (resolvedName != null) { - try { - UUID uuid = UUID.fromString(next); - this.cachedPlayerNameUUIDs.put(uuid, resolvedName); - } catch (Exception e) { - } - next = resolvedName; - } - } - - if (next.equalsIgnoreCase(Residence.getInstance().getServerLandName())) - continue; - - if (!perms.equals("none")) { - sbuild.append(next).append(ChatColor.WHITE).append("[").append(perms).append(ChatColor.WHITE).append("] "); - } - } - } - return sbuild.toString(); + StringBuilder sbuild = new StringBuilder(); + Set>> set = playerFlags.entrySet(); + synchronized (set) { + Iterator>> it = set.iterator(); + while (it.hasNext()) { + Entry> nextEnt = it.next(); + String next = nextEnt.getKey(); + + String perms = printPlayerFlags(nextEnt.getValue()); + if (next.length() == 36) { + String resolvedName = Residence.getInstance().getPlayerName(next); + if (resolvedName != null) { + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { + } + next = resolvedName; + } + } + + if (next.equalsIgnoreCase(Residence.getInstance().getServerLandName())) + continue; + + if (!perms.equals("none")) { + sbuild.append(next).append(ChatColor.WHITE).append("[").append(perms).append(ChatColor.WHITE).append("] "); + } + } + } + return sbuild.toString(); } public RawMessage listPlayersFlagsRaw(String player, String text) { - RawMessage rm = new RawMessage(); - rm.addText(text); - Set>> set = playerFlags.entrySet(); - - synchronized (set) { - Iterator>> it = set.iterator(); - boolean random = true; - - String ownColor = Residence.getInstance().getLM().getMessage(lm.Flag_ownColor); - String p1Color = Residence.getInstance().getLM().getMessage(lm.Flag_p1Color); - String p2Color = Residence.getInstance().getLM().getMessage(lm.Flag_p2Color); - - while (it.hasNext()) { - Entry> nextEnt = it.next(); - String next = nextEnt.getKey(); - - String perms = printPlayerFlags(nextEnt.getValue()); - if (next.length() == 36) { - String resolvedName = Residence.getInstance().getPlayerName(next); - if (resolvedName != null) { - try { - UUID uuid = UUID.fromString(next); - this.cachedPlayerNameUUIDs.put(uuid, resolvedName); - } catch (Exception e) { - } - next = resolvedName; - } - } - - if (next.equalsIgnoreCase(Residence.getInstance().getServerLandName())) - continue; - - if (perms.equals("none")) - continue; - - if (player.equals(next)) { - next = ownColor + next; - } else { - if (random) - next = p2Color + next; - else - next = p1Color + next; - random = !random; - } - - rm.addText(next + "&r").addHover(splitBy(5, perms)); - rm.addText(" "); - - } - } - - return rm; + RawMessage rm = new RawMessage(); + rm.addText(text); + Set>> set = playerFlags.entrySet(); + + synchronized (set) { + Iterator>> it = set.iterator(); + boolean random = true; + + String ownColor = Residence.getInstance().getLM().getMessage(lm.Flag_ownColor); + String p1Color = Residence.getInstance().getLM().getMessage(lm.Flag_p1Color); + String p2Color = Residence.getInstance().getLM().getMessage(lm.Flag_p2Color); + + while (it.hasNext()) { + Entry> nextEnt = it.next(); + String next = nextEnt.getKey(); + + String perms = printPlayerFlags(nextEnt.getValue()); + if (next.length() == 36) { + String resolvedName = Residence.getInstance().getPlayerName(next); + if (resolvedName != null) { + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { + } + next = resolvedName; + } + } + + if (next.equalsIgnoreCase(Residence.getInstance().getServerLandName())) + continue; + + if (perms.equals("none")) + continue; + + if (player.equals(next)) { + next = ownColor + next; + } else { + if (random) + next = p2Color + next; + else + next = p1Color + next; + random = !random; + } + + rm.addText(next + "&r").addHover(splitBy(5, perms)); + rm.addText(" "); + + } + } + + return rm; } protected String splitBy(int by, String perms) { - if (perms.contains(" ")) { - String[] splited = perms.split(" "); - int i = 0; - perms = ""; - for (String one : splited) { - i++; - perms += one + " "; - if (i >= by) { - i = 0; - perms += "\n"; - } - } - } - return perms; + if (perms.contains(" ")) { + String[] splited = perms.split(" "); + int i = 0; + perms = ""; + for (String one : splited) { + i++; + perms += one + " "; + if (i >= by) { + i = 0; + perms += "\n"; + } + } + } + return perms; } public String listGroupFlags() { - StringBuilder sbuild = new StringBuilder(); - Set set = groupFlags.keySet(); - synchronized (set) { - Iterator it = set.iterator(); - while (it.hasNext()) { - String next = it.next(); - String perms = listGroupFlags(next); - if (!perms.equals("none")) { - sbuild - .append(next) - .append(ChatColor.WHITE) - .append("[") - .append(ChatColor.DARK_AQUA) - .append(perms) - .append(ChatColor.WHITE) - .append("] "); - } - } - } - return sbuild.toString(); + StringBuilder sbuild = new StringBuilder(); + Set set = groupFlags.keySet(); + synchronized (set) { + Iterator it = set.iterator(); + while (it.hasNext()) { + String next = it.next(); + String perms = listGroupFlags(next); + if (!perms.equals("none")) { + sbuild + .append(next) + .append(ChatColor.WHITE) + .append("[") + .append(ChatColor.DARK_AQUA) + .append(perms) + .append(ChatColor.WHITE) + .append("] "); + } + } + } + return sbuild.toString(); } public String listGroupFlags(String group) { - group = group.toLowerCase(); - if (groupFlags.containsKey(group)) { - StringBuilder sbuild = new StringBuilder(); - Map get = groupFlags.get(group); - Set> set = get.entrySet(); - - String haveColor = Residence.getInstance().getLM().getMessage(lm.Flag_haveColor); - String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_denyColor); - String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); - String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); - - synchronized (get) { - Iterator> it = set.iterator(); - while (it.hasNext()) { - Entry next = it.next(); - if (next.getValue()) { - sbuild.append(haveColor).append(havePrefix).append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } else { - sbuild.append(denyColor).append(denyPrefix).append(next.getKey()); - if (it.hasNext()) { - sbuild.append(" "); - } - } - } - } - if (sbuild.length() == 0) { - groupFlags.remove(group); - sbuild.append("none"); - } - return CMIChatColor.translate(sbuild.toString()); - } - return "none"; + group = group.toLowerCase(); + if (groupFlags.containsKey(group)) { + StringBuilder sbuild = new StringBuilder(); + Map get = groupFlags.get(group); + Set> set = get.entrySet(); + + String haveColor = Residence.getInstance().getLM().getMessage(lm.Flag_haveColor); + String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_denyColor); + String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); + String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); + + synchronized (get) { + Iterator> it = set.iterator(); + while (it.hasNext()) { + Entry next = it.next(); + if (next.getValue()) { + sbuild.append(haveColor).append(havePrefix).append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } else { + sbuild.append(denyColor).append(denyPrefix).append(next.getKey()); + if (it.hasNext()) { + sbuild.append(" "); + } + } + } + } + if (sbuild.length() == 0) { + groupFlags.remove(group); + sbuild.append("none"); + } + return CMIChatColor.translate(sbuild.toString()); + } + return "none"; } public void clearFlags() { - groupFlags.clear(); - playerFlags.clear(); - cuboidFlags.clear(); + groupFlags.clear(); + playerFlags.clear(); + cuboidFlags.clear(); } public void printFlags(Player player) { - Residence.getInstance().msg(player, lm.General_ResidenceFlags, listFlags()); - Residence.getInstance().msg(player, lm.General_PlayersFlags, listPlayerFlags(player.getName())); - Residence.getInstance().msg(player, lm.General_GroupFlags, listGroupFlags()); - Residence.getInstance().msg(player, lm.General_OthersFlags, listOtherPlayersFlags(player.getName())); + Residence.getInstance().msg(player, lm.General_ResidenceFlags, listFlags()); + Residence.getInstance().msg(player, lm.General_PlayersFlags, listPlayerFlags(player.getName())); + Residence.getInstance().msg(player, lm.General_GroupFlags, listGroupFlags()); + Residence.getInstance().msg(player, lm.General_OthersFlags, listOtherPlayersFlags(player.getName())); } public void copyUserPermissions(String fromUser, String toUser) { - Map get = this.getPlayerFlags(fromUser, false); - if (get != null) { - Map targ = this.getPlayerFlags(toUser, true); - for (Entry entry : get.entrySet()) { - targ.put(entry.getKey(), entry.getValue()); - } - } + Map get = this.getPlayerFlags(fromUser, false); + if (get != null) { + Map targ = this.getPlayerFlags(toUser, true); + for (Entry entry : get.entrySet()) { + targ.put(entry.getKey(), entry.getValue()); + } + } } @Deprecated //Seemed to be a duplicate function of removeAllPlayerFlags()... deprecating public void clearPlayersFlags(String user) { - this.removeAllPlayerFlags(user); + this.removeAllPlayerFlags(user); } public void setParent(FlagPermissions p) { - parent = p; + parent = p; } public FlagPermissions getParent() { - return parent; + return parent; } public Map> getPlayerFlags() { - return playerFlags; + return playerFlags; } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index c1ee6ca16..c6f89e686 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -60,825 +60,825 @@ public class ResidenceManager implements ResidenceInterface { private Residence plugin; public ResidenceManager(Residence plugin) { - residences = new TreeMap(); - chunkResidences = new HashMap>>(); - shops = new ArrayList(); - this.plugin = plugin; + residences = new TreeMap(); + chunkResidences = new HashMap>>(); + shops = new ArrayList(); + this.plugin = plugin; } public boolean isOwnerOfLocation(Player player, Location loc) { - ClaimedResidence res = getByLoc(loc); - if (res != null && res.isOwner(player)) - return true; - return false; + ClaimedResidence res = getByLoc(loc); + if (res != null && res.isOwner(player)) + return true; + return false; } public ClaimedResidence getByLoc(Player player) { - return getByLoc(player.getLocation()); + return getByLoc(player.getLocation()); } @Override public ClaimedResidence getByLoc(Location loc) { - if (loc == null) - return null; - World world = loc.getWorld(); - if (world == null) - return null; - String worldName = world.getName(); - if (worldName == null) - return null; - if (!chunkResidences.containsKey(worldName)) - return null; - ClaimedResidence res = null; - ChunkRef chunk = new ChunkRef(loc); - - Map> ChunkMap = chunkResidences.get(worldName); - - List chunks = ChunkMap.get(chunk); - - if (chunks != null) { - for (ClaimedResidence entry : chunks) { - if (entry == null) - continue; - if (entry.containsLoc(loc)) { - res = entry; - break; - } - } - } - if (res == null) - return null; - - ClaimedResidence subres = res.getSubzoneByLoc(loc); - if (subres == null) - return res; - return subres; + if (loc == null) + return null; + World world = loc.getWorld(); + if (world == null) + return null; + String worldName = world.getName(); + if (worldName == null) + return null; + if (!chunkResidences.containsKey(worldName)) + return null; + ClaimedResidence res = null; + ChunkRef chunk = new ChunkRef(loc); + + Map> ChunkMap = chunkResidences.get(worldName); + + List chunks = ChunkMap.get(chunk); + + if (chunks != null) { + for (ClaimedResidence entry : chunks) { + if (entry == null) + continue; + if (entry.containsLoc(loc)) { + res = entry; + break; + } + } + } + if (res == null) + return null; + + ClaimedResidence subres = res.getSubzoneByLoc(loc); + if (subres == null) + return res; + return subres; } public List getByChunk(Chunk chunk) { - List list = new ArrayList(); - if (chunk == null) - return list; - World world = chunk.getWorld(); - if (world == null) - return list; - String worldName = world.getName(); - if (worldName == null) - return list; - if (!chunkResidences.containsKey(worldName)) - return list; - ChunkRef chunkRef = new ChunkRef(chunk.getX(), chunk.getZ()); - Map> ChunkMap = chunkResidences.get(worldName); - List ls = ChunkMap.get(chunkRef); - return ls == null ? list : new ArrayList(ls); + List list = new ArrayList(); + if (chunk == null) + return list; + World world = chunk.getWorld(); + if (world == null) + return list; + String worldName = world.getName(); + if (worldName == null) + return list; + if (!chunkResidences.containsKey(worldName)) + return list; + ChunkRef chunkRef = new ChunkRef(chunk.getX(), chunk.getZ()); + Map> ChunkMap = chunkResidences.get(worldName); + List ls = ChunkMap.get(chunkRef); + return ls == null ? list : new ArrayList(ls); } @Override public ClaimedResidence getByName(String name) { - if (name == null) { - return null; - } - String[] split = name.split("\\."); - if (split.length == 1) { - return residences.get(name.toLowerCase()); - } - ClaimedResidence res = residences.get(split[0].toLowerCase()); - for (int i = 1; i < split.length; i++) { - if (res != null) { - res = res.getSubzone(split[i].toLowerCase()); - } else { - return null; - } - } - return res; + if (name == null) { + return null; + } + String[] split = name.split("\\."); + if (split.length == 1) { + return residences.get(name.toLowerCase()); + } + ClaimedResidence res = residences.get(split[0].toLowerCase()); + for (int i = 1; i < split.length; i++) { + if (res != null) { + res = res.getSubzone(split[i].toLowerCase()); + } else { + return null; + } + } + return res; } @Override public String getSubzoneNameByRes(ClaimedResidence res) { - Set> set = residences.entrySet(); - for (Entry check : set) { - if (check.getValue() == res) { - return check.getKey(); - } - String n = check.getValue().getSubzoneNameByRes(res); - if (n != null) { - return n; - } - } - return null; + Set> set = residences.entrySet(); + for (Entry check : set) { + if (check.getValue() == res) { + return check.getKey(); + } + String n = check.getValue().getSubzoneNameByRes(res); + if (n != null) { + return n; + } + } + return null; } @Override public void addShop(String resName) { - ClaimedResidence res = getByName(resName); - if (res != null) - shops.add(res); + ClaimedResidence res = getByName(resName); + if (res != null) + shops.add(res); } @Override public void addShop(ClaimedResidence res) { - shops.add(res); + shops.add(res); } @Override public void removeShop(ClaimedResidence res) { - shops.remove(res); + shops.remove(res); } @Override public void removeShop(String resName) { - for (ClaimedResidence one : shops) { - if (one.getName().equalsIgnoreCase(resName)) { - shops.remove(one); - break; - } - } + for (ClaimedResidence one : shops) { + if (one.getName().equalsIgnoreCase(resName)) { + shops.remove(one); + break; + } + } } @Override public List getShops() { - return shops; + return shops; } @Override public boolean addResidence(String name, Location loc1, Location loc2) { - return this.addResidence(name, plugin.getServerLandName(), loc1, loc2); + return this.addResidence(name, plugin.getServerLandName(), loc1, loc2); } @Override public boolean addResidence(String name, String owner, Location loc1, Location loc2) { - return this.addResidence(null, owner, name, loc1, loc2, true); + return this.addResidence(null, owner, name, loc1, loc2, true); } @Override public boolean addResidence(Player player, String name, Location loc1, Location loc2, boolean resadmin) { - return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin); + return this.addResidence(player, player.getName(), name, loc1, loc2, resadmin); } public boolean addResidence(Player player, String owner, String name, Location loc1, Location loc2, boolean resadmin) { - return addResidence(player, owner, null, name, loc1, loc2, resadmin); + return addResidence(player, owner, null, name, loc1, loc2, resadmin); } @Override public boolean addResidence(Player player, String resName, boolean resadmin) { - return addResidence(player, player.getName(), player.getUniqueId(), resName, plugin.getSelectionManager().getPlayerLoc1(player), plugin - .getSelectionManager().getPlayerLoc2(player), resadmin); + return addResidence(player, player.getName(), player.getUniqueId(), resName, plugin.getSelectionManager().getPlayerLoc1(player), plugin + .getSelectionManager().getPlayerLoc2(player), resadmin); } public boolean addResidence(Player player, String owner, UUID ownerUUId, String resName, Location loc1, Location loc2, boolean resadmin) { - if (!plugin.validName(resName)) { - plugin.msg(player, lm.Invalid_NameCharacters); - return false; - } - if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { - plugin.msg(player, lm.Select_Points); - return false; - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - - PermissionGroup group = rPlayer.getGroup(); + if (!plugin.validName(resName)) { + plugin.msg(player, lm.Invalid_NameCharacters); + return false; + } + if (loc1 == null || loc2 == null || !loc1.getWorld().getName().equals(loc2.getWorld().getName())) { + plugin.msg(player, lm.Select_Points); + return false; + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); // PermissionGroup group = plugin.getPermissionManager().getGroup(owner, loc1.getWorld().getName()); - if (!resadmin && !group.canCreateResidences() && !ResPerm.create.hasPermission(player, lm.General_NoPermission)) { - return false; - } - - if (!resadmin && !ResPerm.create.hasPermission(player, true)) { - return false; - } - - if (rPlayer.getResAmount() >= rPlayer.getMaxRes() && !resadmin) { - plugin.msg(player, lm.Residence_TooMany); - return false; - } - - CuboidArea newArea = new CuboidArea(loc1, loc2); - ClaimedResidence newRes = new ClaimedResidence(owner, ownerUUId, loc1.getWorld().getName()); - newRes.getPermissions().applyDefaultFlags(); - newRes.setEnterMessage(group.getDefaultEnterMessage()); - newRes.setLeaveMessage(group.getDefaultLeaveMessage()); - newRes.setName(resName); - newRes.setCreateTime(); - - if (residences.containsKey(resName.toLowerCase())) { - plugin.msg(player, lm.Residence_AlreadyExists, residences.get(resName.toLowerCase()).getResidenceName()); - return false; - } - - newRes.BlockSellPrice = group.getSellPerBlock(); - - if (!newRes.addArea(player, newArea, "main", resadmin, false)) - return false; - - ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, resName, newRes, newArea); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - if (!newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { - double chargeamount = newArea.getCost(group); - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { - // Need to remove area if we can't create residence - newRes.removeArea("main"); - return false; - } - } - - residences.put(resName.toLowerCase(), newRes); - - calculateChunks(resName); - plugin.getLeaseManager().removeExpireTime(newRes); - plugin.getPlayerManager().addResidence(newRes.getOwner(), newRes); - - if (player != null) { - Visualizer v = new Visualizer(player); - v.setAreas(newArea); - plugin.getSelectionManager().showBounds(player, v); - plugin.getAutoSelectionManager().getList().remove(player.getUniqueId()); - plugin.msg(player, lm.Area_Create, "main"); - plugin.msg(player, lm.Residence_Create, resName); - } - if (plugin.getConfigManager().useLeases()) { - plugin.getLeaseManager().setExpireTime(player, newRes, group.getLeaseGiveTime()); - } - return true; + if (!resadmin && !group.canCreateResidences() && !ResPerm.create.hasPermission(player, lm.General_NoPermission)) { + return false; + } + + if (!resadmin && !ResPerm.create.hasPermission(player, true)) { + return false; + } + + if (rPlayer.getResAmount() >= rPlayer.getMaxRes() && !resadmin) { + plugin.msg(player, lm.Residence_TooMany); + return false; + } + + CuboidArea newArea = new CuboidArea(loc1, loc2); + ClaimedResidence newRes = new ClaimedResidence(owner, ownerUUId, loc1.getWorld().getName()); + newRes.getPermissions().applyDefaultFlags(); + newRes.setEnterMessage(group.getDefaultEnterMessage()); + newRes.setLeaveMessage(group.getDefaultLeaveMessage()); + newRes.setName(resName); + newRes.setCreateTime(); + + if (residences.containsKey(resName.toLowerCase())) { + plugin.msg(player, lm.Residence_AlreadyExists, residences.get(resName.toLowerCase()).getResidenceName()); + return false; + } + + newRes.BlockSellPrice = group.getSellPerBlock(); + + if (!newRes.addArea(player, newArea, "main", resadmin, false)) + return false; + + ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, resName, newRes, newArea); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + if (!newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { + double chargeamount = newArea.getCost(group); + if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + // Need to remove area if we can't create residence + newRes.removeArea("main"); + return false; + } + } + + residences.put(resName.toLowerCase(), newRes); + + calculateChunks(resName); + plugin.getLeaseManager().removeExpireTime(newRes); + plugin.getPlayerManager().addResidence(newRes.getOwner(), newRes); + + if (player != null) { + Visualizer v = new Visualizer(player); + v.setAreas(newArea); + plugin.getSelectionManager().showBounds(player, v); + plugin.getAutoSelectionManager().getList().remove(player.getUniqueId()); + plugin.msg(player, lm.Area_Create, "main"); + plugin.msg(player, lm.Residence_Create, resName); + } + if (plugin.getConfigManager().useLeases()) { + plugin.getLeaseManager().setExpireTime(player, newRes, group.getLeaseGiveTime()); + } + return true; } public void listResidences(CommandSender sender) { - this.listResidences(sender, sender.getName(), 1); + this.listResidences(sender, sender.getName(), 1); } public void listResidences(CommandSender sender, boolean resadmin) { - this.listResidences(sender, sender.getName(), 1, false, false, resadmin); + this.listResidences(sender, sender.getName(), 1, false, false, resadmin); } public void listResidences(CommandSender sender, String targetplayer, boolean showhidden) { - this.listResidences(sender, targetplayer, 1, showhidden, false, showhidden); + this.listResidences(sender, targetplayer, 1, showhidden, false, showhidden); } public void listResidences(CommandSender sender, String targetplayer, int page) { - this.listResidences(sender, targetplayer, page, false, false, false); + this.listResidences(sender, targetplayer, page, false, false, false); } public void listResidences(CommandSender sender, int page, boolean showhidden) { - this.listResidences(sender, sender.getName(), page, showhidden, false, showhidden); + this.listResidences(sender, sender.getName(), page, showhidden, false, showhidden); } public void listResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { - this.listResidences(sender, sender.getName(), page, showhidden, onlyHidden, showhidden); + this.listResidences(sender, sender.getName(), page, showhidden, onlyHidden, showhidden); } public void listResidences(CommandSender sender, String string, int page, boolean showhidden) { - this.listResidences(sender, string, page, showhidden, false, showhidden); + this.listResidences(sender, string, page, showhidden, false, showhidden); } public void listResidences(CommandSender sender, String targetplayer, int page, boolean showhidden, boolean onlyHidden, boolean resadmin) { - this.listResidences(sender, targetplayer, page, showhidden, onlyHidden, resadmin, null); + this.listResidences(sender, targetplayer, page, showhidden, onlyHidden, resadmin, null); } public void listResidences(CommandSender sender, String targetplayer, int page, boolean showhidden, boolean onlyHidden, boolean resadmin, World world) { - if (targetplayer == null) - targetplayer = sender.getName(); - if (showhidden && !plugin.isResAdminOn(sender) && !sender.getName().equalsIgnoreCase(targetplayer)) { - showhidden = false; - } else if (sender.getName().equalsIgnoreCase(targetplayer)) - showhidden = true; - boolean hidden = showhidden; - TreeMap ownedResidences = plugin.getPlayerManager().getResidencesMap(targetplayer, hidden, onlyHidden, world); - ownedResidences.putAll(plugin.getRentManager().getRentsMap(targetplayer, onlyHidden, world)); - ownedResidences.putAll(plugin.getPlayerManager().getTrustedResidencesMap(targetplayer, hidden, onlyHidden, world)); + if (targetplayer == null) + targetplayer = sender.getName(); + if (showhidden && !plugin.isResAdminOn(sender) && !sender.getName().equalsIgnoreCase(targetplayer)) { + showhidden = false; + } else if (sender.getName().equalsIgnoreCase(targetplayer)) + showhidden = true; + boolean hidden = showhidden; + TreeMap ownedResidences = plugin.getPlayerManager().getResidencesMap(targetplayer, hidden, onlyHidden, world); + ownedResidences.putAll(plugin.getRentManager().getRentsMap(targetplayer, onlyHidden, world)); + ownedResidences.putAll(plugin.getPlayerManager().getTrustedResidencesMap(targetplayer, hidden, onlyHidden, world)); - plugin.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin, world); + plugin.getInfoPageManager().printListInfo(sender, targetplayer, ownedResidences, page, resadmin, world); } public void listAllResidences(CommandSender sender, int page) { - this.listAllResidences(sender, page, false); + this.listAllResidences(sender, page, false); } public void listAllResidences(CommandSender sender, int page, boolean showhidden, World world) { - TreeMap list = getFromAllResidencesMap(showhidden, false, world); - plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden, world); + TreeMap list = getFromAllResidencesMap(showhidden, false, world); + plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden, world); } public void listAllResidences(CommandSender sender, int page, boolean showhidden) { - this.listAllResidences(sender, page, showhidden, false); + this.listAllResidences(sender, page, showhidden, false); } public void listAllResidences(CommandSender sender, int page, boolean showhidden, boolean onlyHidden) { - TreeMap list = getFromAllResidencesMap(showhidden, onlyHidden, null); - plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden, null); + TreeMap list = getFromAllResidencesMap(showhidden, onlyHidden, null); + plugin.getInfoPageManager().printListInfo(sender, null, list, page, showhidden, null); } public String[] getResidenceList() { - return this.getResidenceList(true, true).toArray(new String[0]); + return this.getResidenceList(true, true).toArray(new String[0]); } public Map getResidenceMapList(String targetplayer, boolean showhidden) { - Map temp = new HashMap(); - for (Entry res : residences.entrySet()) { - if (res.getValue().isOwner(targetplayer)) { - boolean hidden = res.getValue().getPermissions().has("hidden", false); - if ((showhidden) || (!showhidden && !hidden)) { - temp.put(res.getValue().getName().toLowerCase(), res.getValue()); - } - } - } - return temp; + Map temp = new HashMap(); + for (Entry res : residences.entrySet()) { + if (res.getValue().isOwner(targetplayer)) { + boolean hidden = res.getValue().getPermissions().has("hidden", false); + if ((showhidden) || (!showhidden && !hidden)) { + temp.put(res.getValue().getName().toLowerCase(), res.getValue()); + } + } + } + return temp; } public ArrayList getResidenceList(boolean showhidden, boolean showsubzones) { - return this.getResidenceList(null, showhidden, showsubzones, false); + return this.getResidenceList(null, showhidden, showsubzones, false); } public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones) { - return this.getResidenceList(targetplayer, showhidden, showsubzones, false, false); + return this.getResidenceList(targetplayer, showhidden, showsubzones, false, false); } public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean onlyHidden) { - return this.getResidenceList(targetplayer, showhidden, showsubzones, false, onlyHidden); + return this.getResidenceList(targetplayer, showhidden, showsubzones, false, onlyHidden); } public ArrayList getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, boolean formattedOutput, boolean onlyHidden) { - ArrayList list = new ArrayList<>(); - for (Entry res : residences.entrySet()) { - this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), res.getValue(), list, formattedOutput, onlyHidden); - } - return list; + ArrayList list = new ArrayList<>(); + for (Entry res : residences.entrySet()) { + this.getResidenceList(targetplayer, showhidden, showsubzones, "", res.getKey(), res.getValue(), list, formattedOutput, onlyHidden); + } + return list; } public ArrayList getFromAllResidences(boolean showhidden, boolean onlyHidden, World world) { - ArrayList list = new ArrayList<>(); - for (Entry res : residences.entrySet()) { - boolean hidden = res.getValue().getPermissions().has("hidden", false); - if (onlyHidden && !hidden) - continue; - if (world != null && !world.getName().equalsIgnoreCase(res.getValue().getWorld())) - continue; - if ((showhidden) || (!showhidden && !hidden)) { - list.add(res.getValue()); - } - } - return list; + ArrayList list = new ArrayList<>(); + for (Entry res : residences.entrySet()) { + boolean hidden = res.getValue().getPermissions().has("hidden", false); + if (onlyHidden && !hidden) + continue; + if (world != null && !world.getName().equalsIgnoreCase(res.getValue().getWorld())) + continue; + if ((showhidden) || (!showhidden && !hidden)) { + list.add(res.getValue()); + } + } + return list; } public TreeMap getFromAllResidencesMap(boolean showhidden, boolean onlyHidden, World world) { - TreeMap list = new TreeMap(); - for (Entry res : residences.entrySet()) { - boolean hidden = res.getValue().getPermissions().has("hidden", false); - if (onlyHidden && !hidden) - continue; - if (world != null && !world.getName().equalsIgnoreCase(res.getValue().getWorld())) - continue; - if ((showhidden) || (!showhidden && !hidden)) { - list.put(res.getKey(), res.getValue()); - } - } - return list; + TreeMap list = new TreeMap(); + for (Entry res : residences.entrySet()) { + boolean hidden = res.getValue().getPermissions().has("hidden", false); + if (onlyHidden && !hidden) + continue; + if (world != null && !world.getName().equalsIgnoreCase(res.getValue().getWorld())) + continue; + if ((showhidden) || (!showhidden && !hidden)) { + list.put(res.getKey(), res.getValue()); + } + } + return list; } private void getResidenceList(String targetplayer, boolean showhidden, boolean showsubzones, String parentzone, String resname, ClaimedResidence res, - ArrayList list, boolean formattedOutput, boolean onlyHidden) { - boolean hidden = res.getPermissions().has("hidden", false); - - if (onlyHidden && !hidden) - return; - - if ((showhidden) || (!showhidden && !hidden)) { - if (targetplayer == null || res.getPermissions().getOwner().equals(targetplayer)) { - if (formattedOutput) { - list.add(plugin.msg(lm.Residence_List, parentzone, resname, res.getWorld()) + - (hidden ? plugin.msg(lm.Residence_Hidden) : "")); - } else { - list.add(parentzone + resname); - } - } - if (showsubzones) { - for (Entry sz : res.subzones.entrySet()) { - this.getResidenceList(targetplayer, showhidden, showsubzones, parentzone + resname + ".", sz.getKey(), sz.getValue(), list, formattedOutput, - onlyHidden); - } - } - } + ArrayList list, boolean formattedOutput, boolean onlyHidden) { + boolean hidden = res.getPermissions().has("hidden", false); + + if (onlyHidden && !hidden) + return; + + if ((showhidden) || (!showhidden && !hidden)) { + if (targetplayer == null || res.getPermissions().getOwner().equals(targetplayer)) { + if (formattedOutput) { + list.add(plugin.msg(lm.Residence_List, parentzone, resname, res.getWorld()) + + (hidden ? plugin.msg(lm.Residence_Hidden) : "")); + } else { + list.add(parentzone + resname); + } + } + if (showsubzones) { + for (Entry sz : res.subzones.entrySet()) { + this.getResidenceList(targetplayer, showhidden, showsubzones, parentzone + resname + ".", sz.getKey(), sz.getValue(), list, formattedOutput, + onlyHidden); + } + } + } } public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResidence) { - Set> set = residences.entrySet(); - for (Entry entry : set) { - ClaimedResidence check = entry.getValue(); - if (check != parentResidence && check.checkCollision(newarea)) { - return entry.getKey(); - } - } - return null; + Set> set = residences.entrySet(); + for (Entry entry : set) { + ClaimedResidence check = entry.getValue(); + if (check != parentResidence && check.checkCollision(newarea)) { + return entry.getKey(); + } + } + return null; } public ClaimedResidence collidesWithResidence(CuboidArea newarea) { - Set> set = residences.entrySet(); - for (Entry entry : set) { - ClaimedResidence check = entry.getValue(); - if (check.checkCollision(newarea)) { - return entry.getValue(); - } - } - return null; + Set> set = residences.entrySet(); + for (Entry entry : set) { + ClaimedResidence check = entry.getValue(); + if (check.checkCollision(newarea)) { + return entry.getValue(); + } + } + return null; } public void removeResidence(ClaimedResidence res) { - this.removeResidence(null, res.getName(), true); + this.removeResidence(null, res.getName(), true); } public void removeResidence(String name) { - this.removeResidence(null, name, true); + this.removeResidence(null, name, true); } public void removeResidence(CommandSender sender, String name, boolean resadmin) { - if (sender instanceof Player) - removeResidence((Player) sender, name, resadmin); - else - removeResidence(null, name, true); + if (sender instanceof Player) + removeResidence((Player) sender, name, resadmin); + else + removeResidence(null, name, true); } @Deprecated public void removeResidence(Player player, String name, boolean resadmin) { - ClaimedResidence res = this.getByName(name); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - removeResidence(player, res, resadmin); + ClaimedResidence res = this.getByName(name); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + removeResidence(player, res, resadmin); } @Deprecated public void removeResidence(Player player, ClaimedResidence res, boolean resadmin) { - removeResidence(plugin.getPlayerManager().getResidencePlayer(player), res, resadmin); + removeResidence(plugin.getPlayerManager().getResidencePlayer(player), res, resadmin); } public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boolean resadmin) { - removeResidence(rPlayer, res, resadmin, false); + removeResidence(rPlayer, res, resadmin, false); } @SuppressWarnings("deprecation") public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boolean resadmin, boolean regenerate) { - Player player = null; - if (rPlayer != null) - player = rPlayer.getPlayer(); - - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - String name = res.getName(); - - if (plugin.getConfigManager().isRentPreventRemoval() && !resadmin) { - ClaimedResidence rented = res.getRentedSubzone(); - if (rented != null) { - plugin.msg(player, lm.Residence_CantRemove, res.getName(), rented.getName(), rented.getRentedLand().player); - return; - } - if (player != null && res.isRented() && !player.getName().equalsIgnoreCase(res.getRentedLand().player)) { - plugin.msg(player, lm.Residence_CantRemove, res.getName(), res.getName(), res.getRentedLand().player); - return; - } - } - - if (player != null && !resadmin) { - if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin && res.getParent() != null && !res.getParent().isOwner(player)) { - plugin.msg(player, lm.General_NoPermission); - return; - } - } - - if (rPlayer != null) - rPlayer.forceUpdateGroup(); - - ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, rPlayer == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return; - - ClaimedResidence parent = res.getParent(); - if (parent == null) { - removeChunkList(name); - - residences.remove(name.toLowerCase()); - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1) && plugin.getConfigManager().isUseClean() && plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) { - - CuboidArea[] arr = res.getAreaArray(); - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - ChunkSnapshot chunkSnapshot = null; - int chunkX = 0; - int chunkZ = 0; - Set locations = new HashSet(); - for (CuboidArea area : arr) { - Location low = area.getLowLocation().clone(); - Location high = area.getHighLocation().clone(); - - if (high.getBlockY() > plugin.getConfigManager().getCleanLevel()) { - - if (low.getBlockY() < plugin.getConfigManager().getCleanLevel()) - low.setY(plugin.getConfigManager().getCleanLevel()); - World world = low.getWorld(); - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - int hy = world.getHighestBlockYAt(x, z); - if (high.getBlockY() < hy) - hy = high.getBlockY(); - - int cx = Math.abs(x % 16); - int cz = Math.abs(z % 16); - if (chunkSnapshot == null || x >> 4 != chunkX || z >> 4 != chunkZ) { - if (!world.getBlockAt(x, 0, z).getChunk().isLoaded()) { - world.getBlockAt(x, 0, z).getChunk().load(); - chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(false, false, false); - world.getBlockAt(x, 0, z).getChunk().unload(); - } else { - chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(); - } - chunkX = x >> 4; - chunkZ = z >> 4; - } - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - for (int y = low.getBlockY(); y <= hy; y++) { - BlockData type = chunkSnapshot.getBlockData(cx, y, cz); - if (!plugin.getConfigManager().getCleanBlocks().contains(type.getMaterial())) - continue; - locations.add(new Location(world, x, y, z)); - } - } - } - } - } - } - Bukkit.getScheduler().runTask(plugin, () -> { - for (Location one : locations) { - one.getBlock().setType(Material.AIR); - } - }); - } - }); - } - if (plugin.getConfigManager().isRemoveLwcOnDelete() && plugin.isLwcPresent()) - ResidenceLWCListener.removeLwcFromResidence(player, res); - if (regenerate) { - for (CuboidArea one : res.getAreaArray()) { - plugin.getSelectionManager().regenerate(one); - } - } - plugin.msg(player, lm.Residence_Remove, name); - } else { - String[] split = name.split("\\."); - if (player != null) { - parent.removeSubzone(player, split[split.length - 1], true); - } else { - parent.removeSubzone(split[split.length - 1]); - } - } - - plugin.getLeaseManager().removeExpireTime(res); - - for (ClaimedResidence oneSub : res.getSubzones()) { - plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), oneSub); - plugin.getRentManager().removeRentable(name + "." + oneSub.getResidenceName()); - plugin.getTransactionManager().removeFromSale(name + "." + oneSub.getResidenceName()); - } - - plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), res); - plugin.getRentManager().removeRentable(name); - plugin.getTransactionManager().removeFromSale(name); - - if (!res.isServerLand()) - if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { - double chargeamount = res.getWorth(); - if (!res.isOwner(player)) { - plugin.getTransactionManager().giveEconomyMoney(res.getOwner(), chargeamount); - } else { - if (player != null) - plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); - else if (rPlayer != null) - plugin.getTransactionManager().giveEconomyMoney(rPlayer.getPlayerName(), chargeamount); - } - } + Player player = null; + if (rPlayer != null) + player = rPlayer.getPlayer(); + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + String name = res.getName(); + + if (plugin.getConfigManager().isRentPreventRemoval() && !resadmin) { + ClaimedResidence rented = res.getRentedSubzone(); + if (rented != null) { + plugin.msg(player, lm.Residence_CantRemove, res.getName(), rented.getName(), rented.getRentedLand().player); + return; + } + if (player != null && res.isRented() && !player.getName().equalsIgnoreCase(res.getRentedLand().player)) { + plugin.msg(player, lm.Residence_CantRemove, res.getName(), res.getName(), res.getRentedLand().player); + return; + } + } + + if (player != null && !resadmin) { + if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin && res.getParent() != null && !res.getParent().isOwner(player)) { + plugin.msg(player, lm.General_NoPermission); + return; + } + } + + if (rPlayer != null) + rPlayer.forceUpdateGroup(); + + ResidenceDeleteEvent resevent = new ResidenceDeleteEvent(player, res, rPlayer == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; + + ClaimedResidence parent = res.getParent(); + if (parent == null) { + removeChunkList(name); + + residences.remove(name.toLowerCase()); + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1) && plugin.getConfigManager().isUseClean() && plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) { + + CuboidArea[] arr = res.getAreaArray(); + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + ChunkSnapshot chunkSnapshot = null; + int chunkX = 0; + int chunkZ = 0; + Set locations = new HashSet(); + for (CuboidArea area : arr) { + Location low = area.getLowLocation().clone(); + Location high = area.getHighLocation().clone(); + + if (high.getBlockY() > plugin.getConfigManager().getCleanLevel()) { + + if (low.getBlockY() < plugin.getConfigManager().getCleanLevel()) + low.setY(plugin.getConfigManager().getCleanLevel()); + World world = low.getWorld(); + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + int hy = world.getHighestBlockYAt(x, z); + if (high.getBlockY() < hy) + hy = high.getBlockY(); + + int cx = Math.abs(x % 16); + int cz = Math.abs(z % 16); + if (chunkSnapshot == null || x >> 4 != chunkX || z >> 4 != chunkZ) { + if (!world.getBlockAt(x, 0, z).getChunk().isLoaded()) { + world.getBlockAt(x, 0, z).getChunk().load(); + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(false, false, false); + world.getBlockAt(x, 0, z).getChunk().unload(); + } else { + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(); + } + chunkX = x >> 4; + chunkZ = z >> 4; + } + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + for (int y = low.getBlockY(); y <= hy; y++) { + BlockData type = chunkSnapshot.getBlockData(cx, y, cz); + if (!plugin.getConfigManager().getCleanBlocks().contains(type.getMaterial())) + continue; + locations.add(new Location(world, x, y, z)); + } + } + } + } + } + } + Bukkit.getScheduler().runTask(plugin, () -> { + for (Location one : locations) { + one.getBlock().setType(Material.AIR); + } + }); + } + }); + } + if (plugin.getConfigManager().isRemoveLwcOnDelete() && plugin.isLwcPresent()) + ResidenceLWCListener.removeLwcFromResidence(player, res); + if (regenerate) { + for (CuboidArea one : res.getAreaArray()) { + plugin.getSelectionManager().regenerate(one); + } + } + plugin.msg(player, lm.Residence_Remove, name); + } else { + String[] split = name.split("\\."); + if (player != null) { + parent.removeSubzone(player, split[split.length - 1], true); + } else { + parent.removeSubzone(split[split.length - 1]); + } + } + + plugin.getLeaseManager().removeExpireTime(res); + + for (ClaimedResidence oneSub : res.getSubzones()) { + plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), oneSub); + plugin.getRentManager().removeRentable(name + "." + oneSub.getResidenceName()); + plugin.getTransactionManager().removeFromSale(name + "." + oneSub.getResidenceName()); + } + + plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), res); + plugin.getRentManager().removeRentable(name); + plugin.getTransactionManager().removeFromSale(name); + + if (!res.isServerLand()) + if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { + double chargeamount = res.getWorth(); + if (!res.isOwner(player)) { + plugin.getTransactionManager().giveEconomyMoney(res.getOwner(), chargeamount); + } else { + if (player != null) + plugin.getTransactionManager().giveEconomyMoney(player, chargeamount); + else if (rPlayer != null) + plugin.getTransactionManager().giveEconomyMoney(rPlayer.getPlayerName(), chargeamount); + } + } } public void removeAllByOwner(String owner) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(owner); - for (ClaimedResidence oneRes : rPlayer.getResList()) { - removeResidence(rPlayer, oneRes, true); - } + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(owner); + for (ClaimedResidence oneRes : rPlayer.getResList()) { + removeResidence(rPlayer, oneRes, true); + } } public int getOwnedZoneCount(String player) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - return rPlayer.getResAmount(); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + return rPlayer.getResAmount(); } public boolean hasMaxZones(String player, int target) { - return getOwnedZoneCount(player) < target; + return getOwnedZoneCount(player) < target; } public void printAreaInfo(String areaname, CommandSender sender) { - printAreaInfo(areaname, sender, false); + printAreaInfo(areaname, sender, false); } public void printAreaInfo(String areaname, CommandSender sender, boolean resadmin) { - ClaimedResidence res = this.getByName(areaname); - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return; - } - - areaname = res.getName(); - - plugin.msg(sender, lm.General_Separator); - - ResidencePermissions perms = res.getPermissions(); - - String resNameOwner = "&e" + plugin.msg(lm.Residence_Line, areaname); - resNameOwner += plugin.msg(lm.General_Owner, perms.getOwner()); - if (plugin.getConfigManager().enableEconomy()) { - if (res.isOwner(sender) || !(sender instanceof Player) || resadmin) - resNameOwner += plugin.msg(lm.Bank_Name, res.getBank().getStoredMoneyFormated()); - } - resNameOwner = CMIChatColor.translate(resNameOwner); - - String worldInfo = plugin.msg(lm.General_World, perms.getWorldName()); - - if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { - CuboidArea area = res.getAreaArray()[0]; - String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); - String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); - worldInfo += CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); - } - - worldInfo += "\n" + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.createTime)); - - String ResFlagList = perms.listFlags(5); - if (!(sender instanceof Player)) - ResFlagList = perms.listFlags(); - String ResFlagMsg = plugin.msg(lm.General_ResidenceFlags, ResFlagList); - - if (perms.getFlags().size() > 2 && sender instanceof Player) { - ResFlagMsg = plugin.msg(lm.General_ResidenceFlags, perms.listFlags(5, 3)) + "..."; - } - - if (sender instanceof Player) { - RawMessage rm = new RawMessage(); - rm.addText(resNameOwner).addHover(worldInfo); - rm.show(sender); - - rm.clear(); - - rm.addText(ResFlagMsg).addHover(ResFlagList); - rm.show(sender); - } else { - plugin.msg(sender, resNameOwner); - plugin.msg(sender, worldInfo); - plugin.msg(sender, ResFlagMsg); - } - - if (!plugin.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) - sender.sendMessage(plugin.msg(lm.General_PlayersFlags, perms.listPlayersFlags())); - else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) { - - RawMessage rm = perms.listPlayersFlagsRaw(sender.getName(), plugin.msg(lm.General_PlayersFlags, "")); - rm.show(sender); - } - - String groupFlags = perms.listGroupFlags(); - if (groupFlags.length() > 0) - plugin.msg(sender, lm.General_GroupFlags, groupFlags); - - RawMessage rm = new RawMessage(); - rm.addText(plugin.msg(lm.General_TotalResSize, res.getTotalSize(), res.getXZSize())); - - try { - rm.addHover(Arrays.asList( - plugin.msg(lm.General_ResSize_eastWest, res.getMainArea().getXSize()), - plugin.msg(lm.General_ResSize_northSouth, res.getMainArea().getZSize()), - plugin.msg(lm.General_ResSize_upDown, res.getMainArea().getYSize()))); - } catch (Throwable e) { - e.printStackTrace(); - } - - rm.show(sender); - - if (plugin.getEconomyManager() != null) { - plugin.msg(sender, lm.General_TotalWorth, res.getWorthByOwner(), res.getWorth()); - } - - if (res.getSubzonesAmount(false) > 0) - plugin.msg(sender, lm.General_TotalSubzones, res.getSubzonesAmount(false), res.getSubzonesAmount(true)); - - if (plugin.getConfigManager().useLeases() && plugin.getLeaseManager().isLeased(res)) { - String time = plugin.getLeaseManager().getExpireTime(res); - if (time != null) - plugin.msg(sender, lm.Economy_LeaseExpire, time); - } - - if (plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isForRent(areaname) && !plugin.getRentManager().isRented(areaname)) { - String forRentMsg = plugin.msg(lm.Rent_isForRent); - - RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); - StringBuilder rentableString = new StringBuilder(); - if (rentable != null) { - rentableString.append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); - rentableString.append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); - rentableString.append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); - rentableString.append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); - } - if (sender instanceof Player) { - - rm = new RawMessage(); - rm.addText(forRentMsg).addHover(rentableString.toString()); - rm.show(sender); - } else - plugin.msg(sender, forRentMsg); - } else if (plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isRented(areaname)) { - String RentedMsg = plugin.msg(lm.Residence_RentedBy, plugin.getRentManager().getRentingPlayer(areaname)); - - RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); - RentedLand rented = plugin.getRentManager().getRentedLand(areaname); - - StringBuilder rentableString = new StringBuilder(); - if (rented != null) { - rentableString.append(plugin.msg(lm.Rent_Expire, GetTime.getTime(rented.endTime)) + "\n"); - if (rented.player.equals(sender.getName()) || resadmin || res.isOwner(sender)) - rentableString.append((rented.AutoPay ? plugin.msg(lm.Rent_AutoPayTurnedOn) : plugin.msg(lm.Rent_AutoPayTurnedOff)) - + "\n"); - } - - if (rentable != null) { - rentableString.append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); - rentableString.append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); - rentableString.append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); - rentableString.append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); - } - - if (sender instanceof Player) { - - rm = new RawMessage(); - rm.addText(RentedMsg).addHover(rentableString.toString()); - rm.show(sender); - } else - plugin.msg(sender, RentedMsg); - } else if (plugin.getTransactionManager().isForSale(areaname)) { - int amount = plugin.getTransactionManager().getSaleAmount(areaname); - String SellMsg = plugin.msg(lm.Economy_LandForSale) + " " + amount; - plugin.msg(sender, SellMsg); - } - - plugin.msg(sender, lm.General_Separator); + ClaimedResidence res = this.getByName(areaname); + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return; + } + + areaname = res.getName(); + + plugin.msg(sender, lm.General_Separator); + + ResidencePermissions perms = res.getPermissions(); + + String resNameOwner = "&e" + plugin.msg(lm.Residence_Line, areaname); + resNameOwner += plugin.msg(lm.General_Owner, perms.getOwner()); + if (plugin.getConfigManager().enableEconomy()) { + if (res.isOwner(sender) || !(sender instanceof Player) || resadmin) + resNameOwner += plugin.msg(lm.Bank_Name, res.getBank().getStoredMoneyFormated()); + } + resNameOwner = CMIChatColor.translate(resNameOwner); + + String worldInfo = plugin.msg(lm.General_World, perms.getWorldName()); + + if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { + CuboidArea area = res.getAreaArray()[0]; + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); + worldInfo += CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); + } + + worldInfo += "\n" + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.createTime)); + + String ResFlagList = perms.listFlags(5); + if (!(sender instanceof Player)) + ResFlagList = perms.listFlags(); + String ResFlagMsg = plugin.msg(lm.General_ResidenceFlags, ResFlagList); + + if (perms.getFlags().size() > 2 && sender instanceof Player) { + ResFlagMsg = plugin.msg(lm.General_ResidenceFlags, perms.listFlags(5, 3)) + "..."; + } + + if (sender instanceof Player) { + RawMessage rm = new RawMessage(); + rm.addText(resNameOwner).addHover(worldInfo); + rm.show(sender); + + rm = new RawMessage(); + + rm.addText(ResFlagMsg).addHover(ResFlagList); + rm.show(sender); + } else { + plugin.msg(sender, resNameOwner); + plugin.msg(sender, worldInfo); + plugin.msg(sender, ResFlagMsg); + } + + if (!plugin.getConfigManager().isShortInfoUse() || !(sender instanceof Player)) + sender.sendMessage(plugin.msg(lm.General_PlayersFlags, perms.listPlayersFlags())); + else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) { + + RawMessage rm = perms.listPlayersFlagsRaw(sender.getName(), plugin.msg(lm.General_PlayersFlags, "")); + rm.show(sender); + } + + String groupFlags = perms.listGroupFlags(); + if (groupFlags.length() > 0) + plugin.msg(sender, lm.General_GroupFlags, groupFlags); + + RawMessage rm = new RawMessage(); + rm.addText(plugin.msg(lm.General_TotalResSize, res.getTotalSize(), res.getXZSize())); + + try { + rm.addHover(Arrays.asList( + plugin.msg(lm.General_ResSize_eastWest, res.getMainArea().getXSize()), + plugin.msg(lm.General_ResSize_northSouth, res.getMainArea().getZSize()), + plugin.msg(lm.General_ResSize_upDown, res.getMainArea().getYSize()))); + } catch (Throwable e) { + e.printStackTrace(); + } + + rm.show(sender); + + if (plugin.getEconomyManager() != null) { + plugin.msg(sender, lm.General_TotalWorth, res.getWorthByOwner(), res.getWorth()); + } + + if (res.getSubzonesAmount(false) > 0) + plugin.msg(sender, lm.General_TotalSubzones, res.getSubzonesAmount(false), res.getSubzonesAmount(true)); + + if (plugin.getConfigManager().useLeases() && plugin.getLeaseManager().isLeased(res)) { + String time = plugin.getLeaseManager().getExpireTime(res); + if (time != null) + plugin.msg(sender, lm.Economy_LeaseExpire, time); + } + + if (plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isForRent(areaname) && !plugin.getRentManager().isRented(areaname)) { + String forRentMsg = plugin.msg(lm.Rent_isForRent); + + RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); + StringBuilder rentableString = new StringBuilder(); + if (rentable != null) { + rentableString.append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + } + if (sender instanceof Player) { + + rm = new RawMessage(); + rm.addText(forRentMsg).addHover(rentableString.toString()); + rm.show(sender); + } else + plugin.msg(sender, forRentMsg); + } else if (plugin.getConfigManager().enabledRentSystem() && plugin.getRentManager().isRented(areaname)) { + String RentedMsg = plugin.msg(lm.Residence_RentedBy, plugin.getRentManager().getRentingPlayer(areaname)); + + RentableLand rentable = plugin.getRentManager().getRentableLand(areaname); + RentedLand rented = plugin.getRentManager().getRentedLand(areaname); + + StringBuilder rentableString = new StringBuilder(); + if (rented != null) { + rentableString.append(plugin.msg(lm.Rent_Expire, GetTime.getTime(rented.endTime)) + "\n"); + if (rented.player.equals(sender.getName()) || resadmin || res.isOwner(sender)) + rentableString.append((rented.AutoPay ? plugin.msg(lm.Rent_AutoPayTurnedOn) : plugin.msg(lm.Rent_AutoPayTurnedOff)) + + "\n"); + } + + if (rentable != null) { + rentableString.append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket) + "\n"); + rentableString.append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + } + + if (sender instanceof Player) { + + rm = new RawMessage(); + rm.addText(RentedMsg).addHover(rentableString.toString()); + rm.show(sender); + } else + plugin.msg(sender, RentedMsg); + } else if (plugin.getTransactionManager().isForSale(areaname)) { + int amount = plugin.getTransactionManager().getSaleAmount(areaname); + String SellMsg = plugin.msg(lm.Economy_LandForSale) + " " + amount; + plugin.msg(sender, SellMsg); + } + + plugin.msg(sender, lm.General_Separator); } public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { - ClaimedResidence reciever = this.getByName(targetArea); - ClaimedResidence source = this.getByName(sourceArea); - if (source == null || reciever == null) { - plugin.msg(reqPlayer, lm.Invalid_Residence); - return; - } - if (!resadmin) { - if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { - plugin.msg(reqPlayer, lm.General_NoPermission); - return; - } - } - reciever.getPermissions().applyTemplate(reqPlayer, source.getPermissions(), resadmin); + ClaimedResidence reciever = this.getByName(targetArea); + ClaimedResidence source = this.getByName(sourceArea); + if (source == null || reciever == null) { + plugin.msg(reqPlayer, lm.Invalid_Residence); + return; + } + if (!resadmin) { + if (!reciever.getPermissions().hasResidencePermission(reqPlayer, true) || !source.getPermissions().hasResidencePermission(reqPlayer, true)) { + plugin.msg(reqPlayer, lm.General_NoPermission); + return; + } + } + reciever.getPermissions().applyTemplate(reqPlayer, source.getPermissions(), resadmin); } public Map save() { - clearSaveChache(); - Map worldmap = new LinkedHashMap<>(); - for (String worldName : getWorldNames()) { - Map resmap = new LinkedHashMap<>(); - for (Entry res : (new TreeMap(residences)).entrySet()) { - if (!res.getValue().getWorld().equals(worldName)) - continue; - - try { - resmap.put(res.getValue().getResidenceName(), res.getValue().save()); - } catch (Throwable ex) { - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + " Failed to save residence (" + res.getKey() + ")!"); - Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); - } - } - - worldmap.put(worldName, resmap); - } - return worldmap; + clearSaveChache(); + Map worldmap = new LinkedHashMap<>(); + for (String worldName : getWorldNames()) { + Map resmap = new LinkedHashMap<>(); + for (Entry res : (new TreeMap(residences)).entrySet()) { + if (!res.getValue().getWorld().equals(worldName)) + continue; + + try { + resmap.put(res.getValue().getResidenceName(), res.getValue().save()); + } catch (Throwable ex) { + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + " Failed to save residence (" + res.getKey() + ")!"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); + } + } + + worldmap.put(worldName, resmap); + } + return worldmap; } private void clearSaveChache() { - optimizeMessages.clear(); - optimizeFlags.clear(); + optimizeMessages.clear(); + optimizeFlags.clear(); } // Optimizing save file @@ -886,524 +886,524 @@ private void clearSaveChache() { HashMap> optimizeFlags = new HashMap>(); public MinimizeMessages addMessageToTempCache(String world, String enter, String leave) { - List ls = optimizeMessages.get(world); - if (ls == null) - ls = new ArrayList(); - for (MinimizeMessages one : ls) { - if (!one.add(enter, leave)) - continue; - return one; - } - MinimizeMessages m = new MinimizeMessages(ls.size() + 1, enter, leave); - ls.add(m); - optimizeMessages.put(world, ls); - return m; + List ls = optimizeMessages.get(world); + if (ls == null) + ls = new ArrayList(); + for (MinimizeMessages one : ls) { + if (!one.add(enter, leave)) + continue; + return one; + } + MinimizeMessages m = new MinimizeMessages(ls.size() + 1, enter, leave); + ls.add(m); + optimizeMessages.put(world, ls); + return m; } public HashMap getMessageCatch(String world) { - HashMap t = new HashMap(); - List ls = optimizeMessages.get(world); - if (ls == null) - return null; - for (MinimizeMessages one : ls) { - Map root = new HashMap<>(); - root.put("EnterMessage", one.getEnter()); - root.put("LeaveMessage", one.getLeave()); - t.put(one.getId(), root); - } - return t; + HashMap t = new HashMap(); + List ls = optimizeMessages.get(world); + if (ls == null) + return null; + for (MinimizeMessages one : ls) { + Map root = new HashMap<>(); + root.put("EnterMessage", one.getEnter()); + root.put("LeaveMessage", one.getLeave()); + t.put(one.getId(), root); + } + return t; } public MinimizeFlags addFlagsTempCache(String world, Map map) { - if (world == null) - return null; - List ls = optimizeFlags.get(world); - if (ls == null) - ls = new ArrayList(); - for (MinimizeFlags one : ls) { - if (!one.add(map)) - continue; - return one; - } - MinimizeFlags m = new MinimizeFlags(ls.size() + 1, map); - ls.add(m); - optimizeFlags.put(world, ls); - return m; + if (world == null) + return null; + List ls = optimizeFlags.get(world); + if (ls == null) + ls = new ArrayList(); + for (MinimizeFlags one : ls) { + if (!one.add(map)) + continue; + return one; + } + MinimizeFlags m = new MinimizeFlags(ls.size() + 1, map); + ls.add(m); + optimizeFlags.put(world, ls); + return m; } public HashMap getFlagsCatch(String world) { - HashMap t = new HashMap(); - List ls = optimizeFlags.get(world); - if (ls == null) - return null; - for (MinimizeFlags one : ls) { - t.put(one.getId(), one.getFlags()); - } - return t; + HashMap t = new HashMap(); + List ls = optimizeFlags.get(world); + if (ls == null) + return null; + for (MinimizeFlags one : ls) { + t.put(one.getId(), one.getFlags()); + } + return t; } private void clearLoadChache() { - cacheMessages.clear(); - cacheFlags.clear(); + cacheMessages.clear(); + cacheFlags.clear(); } HashMap> cacheMessages = new HashMap>(); HashMap> cacheFlags = new HashMap>(); public HashMap> getCacheMessages() { - return cacheMessages; + return cacheMessages; } public HashMap> getCacheFlags() { - return cacheFlags; + return cacheFlags; } public String getChacheMessageEnter(String world, int id) { - HashMap c = cacheMessages.get(world); - if (c == null) - return null; - MinimizeMessages m = c.get(id); - if (m == null) - return null; - return m.getEnter(); + HashMap c = cacheMessages.get(world); + if (c == null) + return null; + MinimizeMessages m = c.get(id); + if (m == null) + return null; + return m.getEnter(); } public String getChacheMessageLeave(String world, int id) { - HashMap c = cacheMessages.get(world); - if (c == null) - return null; - MinimizeMessages m = c.get(id); - if (m == null) - return null; - return m.getLeave(); + HashMap c = cacheMessages.get(world); + if (c == null) + return null; + MinimizeMessages m = c.get(id); + if (m == null) + return null; + return m.getLeave(); } public Map getChacheFlags(String world, int id) { - HashMap c = cacheFlags.get(world); - if (c == null) - return null; - MinimizeFlags m = c.get(id); - if (m == null) - return null; - return m.getFlags(); + HashMap c = cacheFlags.get(world); + if (c == null) + return null; + MinimizeFlags m = c.get(id); + if (m == null) + return null; + return m.getFlags(); } public Set getWorldNames() { - Set worldnames = new HashSet(); - File saveFolder = new File(plugin.dataFolder, "Save"); - try { - File worldFolder = new File(saveFolder, "Worlds"); - if (plugin.getConfigManager().isLoadEveryWorld()) { - for (File f : worldFolder.listFiles()) { - if (!f.isFile()) - continue; - String name = f.getName(); - if (!name.startsWith(Residence.saveFilePrefix)) - continue; - worldnames.add(name.substring(Residence.saveFilePrefix.length(), name.length() - 4)); - } - - } - plugin.getServ().getWorlds().forEach((w) -> { - worldnames.add(w.getName()); - }); - } catch (Exception ex) { - plugin.getServ().getWorlds().forEach((w) -> { - worldnames.add(w.getName()); - }); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - throw ex; - } - return worldnames; + Set worldnames = new HashSet(); + File saveFolder = new File(plugin.dataFolder, "Save"); + try { + File worldFolder = new File(saveFolder, "Worlds"); + if (plugin.getConfigManager().isLoadEveryWorld()) { + for (File f : worldFolder.listFiles()) { + if (!f.isFile()) + continue; + String name = f.getName(); + if (!name.startsWith(Residence.saveFilePrefix)) + continue; + worldnames.add(name.substring(Residence.saveFilePrefix.length(), name.length() - 4)); + } + + } + plugin.getServ().getWorlds().forEach((w) -> { + worldnames.add(w.getName()); + }); + } catch (Exception ex) { + plugin.getServ().getWorlds().forEach((w) -> { + worldnames.add(w.getName()); + }); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + throw ex; + } + return worldnames; } public void load(Map root) throws Exception { - if (root == null) - return; - residences.clear(); - for (String worldName : getWorldNames()) { - long time = System.currentTimeMillis(); - - @SuppressWarnings("unchecked") - Map reslist = (Map) root.get(worldName); - if (!plugin.isDisabledWorld(worldName) && !plugin.getConfigManager().CleanerStartupLog) - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + worldName + " data into memory..."); - if (reslist != null) { - try { - chunkResidences.put(worldName, loadMap(worldName, reslist)); - } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + "Error in loading save file for world: " + worldName); - if (plugin.getConfigManager().stopOnSaveError()) - throw (ex); - } - } - - long pass = System.currentTimeMillis() - time; - String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - - if (!plugin.isDisabledWorld(worldName)) - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + worldName + " data into memory. (" + PastTime + ") -> " + (reslist == null ? "0" : reslist.size()) - + " residences"); - } - - clearLoadChache(); + if (root == null) + return; + residences.clear(); + for (String worldName : getWorldNames()) { + long time = System.currentTimeMillis(); + + @SuppressWarnings("unchecked") + Map reslist = (Map) root.get(worldName); + if (!plugin.isDisabledWorld(worldName) && !plugin.getConfigManager().CleanerStartupLog) + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + worldName + " data into memory..."); + if (reslist != null) { + try { + chunkResidences.put(worldName, loadMap(worldName, reslist)); + } catch (Exception ex) { + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + "Error in loading save file for world: " + worldName); + if (plugin.getConfigManager().stopOnSaveError()) + throw (ex); + } + } + + long pass = System.currentTimeMillis() - time; + String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; + + if (!plugin.isDisabledWorld(worldName)) + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded " + worldName + " data into memory. (" + PastTime + ") -> " + (reslist == null ? "0" : reslist.size()) + + " residences"); + } + + clearLoadChache(); } public Map> loadMap(String worldName, Map root) throws Exception { - Map> retRes = new HashMap<>(); - if (root == null) - return retRes; - - int i = 0; - int y = 0; - for (Entry res : root.entrySet()) { - if (i == 100 && plugin.getConfigManager().isUUIDConvertion()) - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " " + worldName + " UUID conversion done: " + y + " of " + root.size()); - if (i >= 100) - i = 0; - i++; - y++; - try { - @SuppressWarnings("unchecked") - ClaimedResidence residence = ClaimedResidence.load(worldName, (Map) res.getValue(), null, plugin); - if (residence == null) - continue; - - if (residence.getPermissions().getOwnerUUID().toString().equals(plugin.getServerLandUUID()) && - !residence.getOwner().equalsIgnoreCase("Server land") && - !residence.getOwner().equalsIgnoreCase(plugin.getServerLandName())) - continue; - - if (residence.getOwner().equalsIgnoreCase("Server land")) { - residence.getPermissions().setOwner(plugin.getServerLandName(), false); - } - String resName = res.getKey().toLowerCase(); - - // Checking for duplicated residence names and renaming them - int increment = getNameIncrement(resName); - - if (residence.getResidenceName() == null) - residence.setName(res.getKey()); - - if (increment > 0) { - residence.setName(residence.getResidenceName() + increment); - resName += increment; - } - - for (ChunkRef chunk : getChunks(residence)) { - List ress = new ArrayList<>(); - if (retRes.containsKey(chunk)) { - ress.addAll(retRes.get(chunk)); - } - ress.add(residence); - retRes.put(chunk, ress); - } - - plugin.getPlayerManager().addResidence(residence.getOwner(), residence); - - residences.put(resName.toLowerCase(), residence); - - } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + " Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() - + " Error Log:"); - Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); - if (plugin.getConfigManager().stopOnSaveError()) { - throw (ex); - } - } - } - - return retRes; + Map> retRes = new HashMap<>(); + if (root == null) + return retRes; + + int i = 0; + int y = 0; + for (Entry res : root.entrySet()) { + if (i == 100 && plugin.getConfigManager().isUUIDConvertion()) + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " " + worldName + " UUID conversion done: " + y + " of " + root.size()); + if (i >= 100) + i = 0; + i++; + y++; + try { + @SuppressWarnings("unchecked") + ClaimedResidence residence = ClaimedResidence.load(worldName, (Map) res.getValue(), null, plugin); + if (residence == null) + continue; + + if (residence.getPermissions().getOwnerUUID().toString().equals(plugin.getServerLandUUID()) && + !residence.getOwner().equalsIgnoreCase("Server land") && + !residence.getOwner().equalsIgnoreCase(plugin.getServerLandName())) + continue; + + if (residence.getOwner().equalsIgnoreCase("Server land")) { + residence.getPermissions().setOwner(plugin.getServerLandName(), false); + } + String resName = res.getKey().toLowerCase(); + + // Checking for duplicated residence names and renaming them + int increment = getNameIncrement(resName); + + if (residence.getResidenceName() == null) + residence.setName(res.getKey()); + + if (increment > 0) { + residence.setName(residence.getResidenceName() + increment); + resName += increment; + } + + for (ChunkRef chunk : getChunks(residence)) { + List ress = new ArrayList<>(); + if (retRes.containsKey(chunk)) { + ress.addAll(retRes.get(chunk)); + } + ress.add(residence); + retRes.put(chunk, ress); + } + + plugin.getPlayerManager().addResidence(residence.getOwner(), residence); + + residences.put(resName.toLowerCase(), residence); + + } catch (Exception ex) { + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + " Failed to load residence (" + res.getKey() + ")! Reason:" + ex.getMessage() + + " Error Log:"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); + if (plugin.getConfigManager().stopOnSaveError()) { + throw (ex); + } + } + } + + return retRes; } private int getNameIncrement(String name) { - String orName = name; - int i = 0; - while (i < 1000) { - if (residences.containsKey(name.toLowerCase())) { - i++; - name = orName + i; - } else - break; - } - return i; + String orName = name; + int i = 0; + while (i < 1000) { + if (residences.containsKey(name.toLowerCase())) { + i++; + name = orName + i; + } else + break; + } + return i; } private static List getChunks(ClaimedResidence res) { - List chunks = new ArrayList<>(); - for (CuboidArea area : res.getAreaArray()) { - chunks.addAll(area.getChunks()); - } - return chunks; + List chunks = new ArrayList<>(); + for (CuboidArea area : res.getAreaArray()) { + chunks.addAll(area.getChunks()); + } + return chunks; } public boolean renameResidence(String oldName, String newName) { - return this.renameResidence(null, oldName, newName, true); + return this.renameResidence(null, oldName, newName, true); } public boolean renameResidence(Player player, String oldName, String newName, boolean resadmin) { - if (!ResPerm.rename.hasPermission(player, true)) { - return false; - } + if (!ResPerm.rename.hasPermission(player, true)) { + return false; + } - if (!plugin.validName(newName)) { - plugin.msg(player, lm.Invalid_NameCharacters); - return false; - } - ClaimedResidence res = this.getByName(oldName); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return false; - } + if (!plugin.validName(newName)) { + plugin.msg(player, lm.Invalid_NameCharacters); + return false; + } + ClaimedResidence res = this.getByName(oldName); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return false; + } - if (res.getRaid().isRaidInitialized() && !resadmin) { - plugin.msg(player, lm.Raid_cantDo); - return false; - } + if (res.getRaid().isRaidInitialized() && !resadmin) { + plugin.msg(player, lm.Raid_cantDo); + return false; + } - oldName = res.getName(); - if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { - if (res.getParent() == null) { - if (residences.containsKey(newName.toLowerCase())) { - plugin.msg(player, lm.Residence_AlreadyExists, newName); - return false; - } + oldName = res.getName(); + if (res.getPermissions().hasResidencePermission(player, true) || resadmin) { + if (res.getParent() == null) { + if (residences.containsKey(newName.toLowerCase())) { + plugin.msg(player, lm.Residence_AlreadyExists, newName); + return false; + } - ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); - plugin.getServ().getPluginManager().callEvent(resevent); - removeChunkList(oldName); - res.setName(newName); + ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); + plugin.getServ().getPluginManager().callEvent(resevent); + removeChunkList(oldName); + res.setName(newName); - residences.put(newName.toLowerCase(), res); - residences.remove(oldName.toLowerCase()); + residences.put(newName.toLowerCase(), res); + residences.remove(oldName.toLowerCase()); - calculateChunks(newName); + calculateChunks(newName); - plugin.getSignUtil().updateSignResName(res); + plugin.getSignUtil().updateSignResName(res); - plugin.msg(player, lm.Residence_Rename, oldName, newName); + plugin.msg(player, lm.Residence_Rename, oldName, newName); - return true; - } - String[] oldname = oldName.split("\\."); - ClaimedResidence parent = res.getParent(); + return true; + } + String[] oldname = oldName.split("\\."); + ClaimedResidence parent = res.getParent(); - boolean feed = parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); + boolean feed = parent.renameSubzone(player, oldname[oldname.length - 1], newName, resadmin); - plugin.getSignUtil().updateSignResName(res); + plugin.getSignUtil().updateSignResName(res); - return feed; - } + return feed; + } - plugin.msg(player, lm.General_NoPermission); + plugin.msg(player, lm.General_NoPermission); - return false; + return false; } public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin) { - giveResidence(reqPlayer, targPlayer, residence, resadmin, false); + giveResidence(reqPlayer, targPlayer, residence, resadmin, false); } public void giveResidence(Player reqPlayer, String targPlayer, String residence, boolean resadmin, boolean includeSubzones) { - giveResidence(reqPlayer, targPlayer, getByName(residence), resadmin, includeSubzones); + giveResidence(reqPlayer, targPlayer, getByName(residence), resadmin, includeSubzones); } public void giveResidence(Player reqPlayer, String targPlayer, ClaimedResidence res, boolean resadmin, boolean includeSubzones) { - if (res == null) { - plugin.msg(reqPlayer, lm.Invalid_Residence); - return; - } - - String residence = res.getName(); - - if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { - plugin.msg(reqPlayer, lm.General_NoPermission); - return; - } - Player giveplayer = plugin.getServ().getPlayer(targPlayer); - if (giveplayer == null || !giveplayer.isOnline()) { - plugin.msg(reqPlayer, lm.General_NotOnline); - return; - } - CuboidArea[] areas = res.getAreaArray(); - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(giveplayer); - PermissionGroup group = rPlayer.getGroup(); - - if (areas.length > group.getMaxPhysicalPerResidence() && !resadmin) { - plugin.msg(reqPlayer, lm.Residence_GiveLimits); - return; - } - if (!hasMaxZones(giveplayer.getName(), rPlayer.getMaxRes()) && !resadmin) { - plugin.msg(reqPlayer, lm.Residence_GiveLimits); - return; - } - if (!resadmin) { - for (CuboidArea area : areas) { - if (!res.isSubzone() && !res.isSmallerThanMax(giveplayer, area, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(giveplayer, area, - resadmin)) { - plugin.msg(reqPlayer, lm.Residence_GiveLimits); - return; - } - } - } - - if (!res.getPermissions().setOwner(giveplayer, true)) - return; - // Fix phrases here - plugin.msg(reqPlayer, lm.Residence_Give, residence, giveplayer.getName()); - plugin.msg(giveplayer, lm.Residence_Recieve, residence, reqPlayer.getName()); - plugin.getSignUtil().updateSignResName(res); - if (includeSubzones) - for (ClaimedResidence one : res.getSubzones()) { - giveResidence(reqPlayer, targPlayer, one, resadmin, includeSubzones); - } + if (res == null) { + plugin.msg(reqPlayer, lm.Invalid_Residence); + return; + } + + String residence = res.getName(); + + if (!res.getPermissions().hasResidencePermission(reqPlayer, true) && !resadmin) { + plugin.msg(reqPlayer, lm.General_NoPermission); + return; + } + Player giveplayer = plugin.getServ().getPlayer(targPlayer); + if (giveplayer == null || !giveplayer.isOnline()) { + plugin.msg(reqPlayer, lm.General_NotOnline); + return; + } + CuboidArea[] areas = res.getAreaArray(); + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(giveplayer); + PermissionGroup group = rPlayer.getGroup(); + + if (areas.length > group.getMaxPhysicalPerResidence() && !resadmin) { + plugin.msg(reqPlayer, lm.Residence_GiveLimits); + return; + } + if (!hasMaxZones(giveplayer.getName(), rPlayer.getMaxRes()) && !resadmin) { + plugin.msg(reqPlayer, lm.Residence_GiveLimits); + return; + } + if (!resadmin) { + for (CuboidArea area : areas) { + if (!res.isSubzone() && !res.isSmallerThanMax(giveplayer, area, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(giveplayer, area, + resadmin)) { + plugin.msg(reqPlayer, lm.Residence_GiveLimits); + return; + } + } + } + + if (!res.getPermissions().setOwner(giveplayer, true)) + return; + // Fix phrases here + plugin.msg(reqPlayer, lm.Residence_Give, residence, giveplayer.getName()); + plugin.msg(giveplayer, lm.Residence_Recieve, residence, reqPlayer.getName()); + plugin.getSignUtil().updateSignResName(res); + if (includeSubzones) + for (ClaimedResidence one : res.getSubzones()) { + giveResidence(reqPlayer, targPlayer, one, resadmin, includeSubzones); + } } public void removeAllFromWorld(CommandSender sender, String world) { - removeAllFromWorld(sender, world, null); + removeAllFromWorld(sender, world, null); } public void removeAllFromWorld(CommandSender sender, String world, List playerExceptions) { - int count = 0; - Iterator it = residences.values().iterator(); - while (it.hasNext()) { - ClaimedResidence next = it.next(); - - if (next.getPermissions().getWorldName().equals(world)) { - if (playerExceptions != null && !playerExceptions.isEmpty()) { - if (playerExceptions.contains(next.getOwner().toLowerCase())) - continue; - - if (playerExceptions.contains(next.getOwnerUUID().toString())) - continue; - } - it.remove(); - count++; - } - } - chunkResidences.remove(world); - chunkResidences.put(world, new HashMap>()); - if (count == 0) { - sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW + world); - } else { - sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); - } + int count = 0; + Iterator it = residences.values().iterator(); + while (it.hasNext()) { + ClaimedResidence next = it.next(); + + if (next.getPermissions().getWorldName().equals(world)) { + if (playerExceptions != null && !playerExceptions.isEmpty()) { + if (playerExceptions.contains(next.getOwner().toLowerCase())) + continue; + + if (playerExceptions.contains(next.getOwnerUUID().toString())) + continue; + } + it.remove(); + count++; + } + } + chunkResidences.remove(world); + chunkResidences.put(world, new HashMap>()); + if (count == 0) { + sender.sendMessage(ChatColor.RED + "No residences found in world: " + ChatColor.YELLOW + world); + } else { + sender.sendMessage(ChatColor.RED + "Removed " + ChatColor.YELLOW + count + ChatColor.RED + " residences in world: " + ChatColor.YELLOW + world); + } // plugin.getPlayerManager().fillList(); } public int getResidenceCount() { - return residences.size(); + return residences.size(); } public Map getResidences() { - return residences; + return residences; } public void removeChunkList(String name) { - if (name == null) - return; - name = name.toLowerCase(); - ClaimedResidence res = residences.get(name); - if (res == null) - return; - String world = res.getWorld(); - if (chunkResidences.get(world) == null) - return; - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList<>(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - - ress.remove(res); - chunkResidences.get(world).put(chunk, ress); - } + if (name == null) + return; + name = name.toLowerCase(); + ClaimedResidence res = residences.get(name); + if (res == null) + return; + String world = res.getWorld(); + if (chunkResidences.get(world) == null) + return; + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList<>(); + if (chunkResidences.get(world).containsKey(chunk)) { + ress.addAll(chunkResidences.get(world).get(chunk)); + } + + ress.remove(res); + chunkResidences.get(world).put(chunk, ress); + } } public void calculateChunks(String name) { - if (name == null) - return; - name = name.toLowerCase(); - ClaimedResidence res = residences.get(name); - if (res == null) - return; - String world = res.getWorld(); - if (chunkResidences.get(world) == null) { - chunkResidences.put(world, new HashMap>()); - } - for (ChunkRef chunk : getChunks(res)) { - List ress = new ArrayList<>(); - if (chunkResidences.get(world).containsKey(chunk)) { - ress.addAll(chunkResidences.get(world).get(chunk)); - } - ress.add(res); - chunkResidences.get(world).put(chunk, ress); - } + if (name == null) + return; + name = name.toLowerCase(); + ClaimedResidence res = residences.get(name); + if (res == null) + return; + String world = res.getWorld(); + if (chunkResidences.get(world) == null) { + chunkResidences.put(world, new HashMap>()); + } + for (ChunkRef chunk : getChunks(res)) { + List ress = new ArrayList<>(); + if (chunkResidences.get(world).containsKey(chunk)) { + ress.addAll(chunkResidences.get(world).get(chunk)); + } + ress.add(res); + chunkResidences.get(world).put(chunk, ress); + } } public static final class ChunkRef { - public static int getChunkCoord(final int val) { - // For more info, see CraftBukkit.CraftWorld.getChunkAt( Location ) - return val >> 4; - } - - private final int z; - private final int x; - - public ChunkRef(Location loc) { - this.x = getChunkCoord(loc.getBlockX()); - this.z = getChunkCoord(loc.getBlockZ()); - } - - public ChunkRef(int x, int z) { - this.x = x; - this.z = z; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - ChunkRef other = (ChunkRef) obj; - return this.x == other.x && this.z == other.z; - } - - @Override - public int hashCode() { - return x ^ z; - } - - /** - * Useful for debug - * - * @return - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("{ x: ").append(x).append(", z: ").append(z).append(" }"); - return sb.toString(); - } - - public int getZ() { - return z; - } - - public int getX() { - return x; - } + public static int getChunkCoord(final int val) { + // For more info, see CraftBukkit.CraftWorld.getChunkAt( Location ) + return val >> 4; + } + + private final int z; + private final int x; + + public ChunkRef(Location loc) { + this.x = getChunkCoord(loc.getBlockX()); + this.z = getChunkCoord(loc.getBlockZ()); + } + + public ChunkRef(int x, int z) { + this.x = x; + this.z = z; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ChunkRef other = (ChunkRef) obj; + return this.x == other.x && this.z == other.z; + } + + @Override + public int hashCode() { + return x ^ z; + } + + /** + * Useful for debug + * + * @return + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{ x: ").append(x).append(", z: ").append(z).append(" }"); + return sb.toString(); + } + + public int getZ() { + return z; + } + + public int getX() { + return x; + } } } \ No newline at end of file From f80034c444e97e419cd6eefc2da10755f9211cfa Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 Aug 2022 17:03:54 +0300 Subject: [PATCH 0960/1142] Permission check fix when player object doesn't contain player name --- .../bekvon/bukkit/residence/protection/FlagPermissions.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 5ecd172a8..e3a7dceb6 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -317,8 +317,12 @@ public static FlagPermissions parseFromConfigNodeAsList(String node, String stag protected Map getPlayerFlags(Player player, boolean allowCreate) { + Map flags = null; + if (player == null || player.getName() == null) + return flags; + if (!Residence.getInstance().getConfigManager().isOfflineMode()) { UUID uuid = player.getUniqueId(); flags = playerFlags.get(uuid.toString()); From b7625a2084dcd89a7f82ce998f2c8cdd2479c8d2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Aug 2022 11:52:48 +0300 Subject: [PATCH 0961/1142] Preventing mob spawning if nomobs flag is used in area --- .../bekvon/bukkit/residence/protection/FlagPermissions.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index e3a7dceb6..3ee69cb0c 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -317,12 +317,11 @@ public static FlagPermissions parseFromConfigNodeAsList(String node, String stag protected Map getPlayerFlags(Player player, boolean allowCreate) { - Map flags = null; if (player == null || player.getName() == null) return flags; - + if (!Residence.getInstance().getConfigManager().isOfflineMode()) { UUID uuid = player.getUniqueId(); flags = playerFlags.get(uuid.toString()); From 533ea0ede59a55cf4a8becb420b35885f590300f Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Aug 2022 12:16:50 +0300 Subject: [PATCH 0962/1142] Allow to click on nearby residence to show its information --- .../bukkit/residence/commands/attack.java | 1 + .../bukkit/residence/commands/info.java | 113 ++++++++++-------- 2 files changed, 65 insertions(+), 49 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/attack.java b/src/com/bekvon/bukkit/residence/commands/attack.java index 743dba143..05e574838 100644 --- a/src/com/bekvon/bukkit/residence/commands/attack.java +++ b/src/com/bekvon/bukkit/residence/commands/attack.java @@ -48,6 +48,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + if (resPlayer.getJoinedRaid() != null) { plugin.msg(player, lm.Raid_defend_alreadyInAnother, resPlayer.getJoinedRaid().getRes().getName()); return null; diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 5e4ba7f40..9e5805d9f 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -9,6 +9,10 @@ import org.bukkit.entity.Player; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Locale.LC; +import net.Zrips.CMILib.RawMessages.RawMessage; +import net.Zrips.CMILib.RawMessages.RawMessageCommand; + import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -22,58 +26,69 @@ public class info implements cmd { @CommandAnnotation(simple = true, priority = 600) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (args.length == 0 && sender instanceof Player) { - Player player = (Player) sender; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - - Set nearby = new HashSet(); - - Location loc = player.getLocation(); - for (int x = -9; x <= 9; x = x + 3) { - for (int z = -9; z <= 9; z = z + 3) { - for (int y = -9; y <= 9; y = y + 3) { - if (x == 0 && z == 0 && y == 0) - continue; - Location l = loc.clone().add(x, y, z); - ClaimedResidence nr = plugin.getResidenceManager().getByLoc(l); - if (nr != null) - nearby.add(nr); - } - } - } - nearby.remove(res); - - if (res != null) { - plugin.getResidenceManager().printAreaInfo(res.getName(), sender, resadmin); - } else { - if (nearby.isEmpty()) - plugin.msg(sender, lm.Invalid_Residence); - } - - StringBuilder list = new StringBuilder(); - - if (!nearby.isEmpty()) { - for (ClaimedResidence one : nearby) { - if (!list.toString().isEmpty()) - list.append(", "); - list.append(one.getName()); - } - plugin.msg(sender, lm.Residence_Near, list.toString()); - } - - return true; - } else if (args.length == 1) { - plugin.getResidenceManager().printAreaInfo(args[0], sender, resadmin); - return true; - } - return false; + if (args.length == 0 && sender instanceof Player) { + Player player = (Player) sender; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + + Set nearby = new HashSet(); + + Location loc = player.getLocation(); + for (int x = -9; x <= 9; x = x + 3) { + for (int z = -9; z <= 9; z = z + 3) { + for (int y = -9; y <= 9; y = y + 3) { + if (x == 0 && z == 0 && y == 0) + continue; + Location l = loc.clone().add(x, y, z); + ClaimedResidence nr = plugin.getResidenceManager().getByLoc(l); + if (nr != null) + nearby.add(nr); + } + } + } + nearby.remove(res); + + if (res != null) { + plugin.getResidenceManager().printAreaInfo(res.getName(), sender, resadmin); + } else { + if (nearby.isEmpty()) + plugin.msg(sender, lm.Invalid_Residence); + } + + + RawMessage rm = new RawMessage(); + + if (!nearby.isEmpty()) { + rm.addText(plugin.msg(lm.Residence_Near, "")); + for (ClaimedResidence one : nearby) { + if (rm.getFinalLenght() > 0) + rm.addText(LC.info_ListSpliter.getLocale()); + + rm.addText(one.getName()); + RawMessageCommand rmc = new RawMessageCommand() { + @Override + public void run(CommandSender sender) { + plugin.getResidenceManager().printAreaInfo(one.getName(), sender, resadmin); + } + }; + rm.addHover(LC.info_Click.getLocale()); + rm.addCommand(rmc); + } + rm.show(sender); + } + + return true; + } else if (args.length == 1) { + plugin.getResidenceManager().printAreaInfo(args[0], sender, resadmin); + return true; + } + return false; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Show info on a residence."); - c.get("Info", Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in.")); - LocaleManager.addTabCompleteMain(this, "[residence]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Show info on a residence."); + c.get("Info", Arrays.asList("&eUsage: &6/res info ", "Leave off to display info for the residence your currently in.")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } From 7e6d7f7fd4e2b6768f373edb906efae5594d124e Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Aug 2022 12:18:24 +0300 Subject: [PATCH 0963/1142] Lets not show nearby residence record if its hidden and user isint resadmin --- src/com/bekvon/bukkit/residence/commands/info.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 9e5805d9f..84fb3dd71 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -16,9 +16,11 @@ import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; public class info implements cmd { @@ -40,7 +42,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo continue; Location l = loc.clone().add(x, y, z); ClaimedResidence nr = plugin.getResidenceManager().getByLoc(l); - if (nr != null) + if (nr != null && (nr.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) || resadmin)) nearby.add(nr); } } From de31be3e448d1a4175cdf1a2b5bcb4fe7356aabe Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Aug 2022 14:20:25 +0300 Subject: [PATCH 0964/1142] Own player flag at the beginning of list for info command --- .../bukkit/residence/containers/lm.java | 4 +- .../residence/protection/FlagPermissions.java | 91 ++++++++++++------- 2 files changed, 58 insertions(+), 37 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index e98e0fb03..d590a5e74 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -169,12 +169,12 @@ public enum lm { server_land("Server_Land"), - Flag_ownColor("&4"), + Flag_ownColor("&7"), Flag_p1Color("&2"), Flag_p2Color("&a"), Flag_haveColor("&2"), Flag_havePrefix(""), - Flag_denyColor("&4"), + Flag_denyColor("&c"), Flag_denyPrefix(""), Flag_Set("&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"), Flag_SetFailed("&cYou dont have access to &6%1 &cflag"), diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 3ee69cb0c..286fd20fb 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -1092,7 +1092,7 @@ protected String printPlayerFlags(Map flags) { String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); - synchronized (flags) { + synchronized (set) { Iterator> it = set.iterator(); while (it.hasNext()) { @@ -1191,7 +1191,18 @@ public String listPlayersFlags() { return sbuild.toString(); } + String ownColor = null; + String p1Color = null; + String p2Color = null; + public RawMessage listPlayersFlagsRaw(String player, String text) { + + if (ownColor == null) { + ownColor = lm.Flag_ownColor.getMessage(); + p1Color = lm.Flag_p1Color.getMessage(); + p2Color = lm.Flag_p2Color.getMessage(); + } + RawMessage rm = new RawMessage(); rm.addText(text); Set>> set = playerFlags.entrySet(); @@ -1199,51 +1210,61 @@ public RawMessage listPlayersFlagsRaw(String player, String text) { synchronized (set) { Iterator>> it = set.iterator(); boolean random = true; - - String ownColor = Residence.getInstance().getLM().getMessage(lm.Flag_ownColor); - String p1Color = Residence.getInstance().getLM().getMessage(lm.Flag_p1Color); - String p2Color = Residence.getInstance().getLM().getMessage(lm.Flag_p2Color); + String addedOwn = null; + + ResidencePlayer rplayer = ResidencePlayer.get(player); + if (rplayer != null) { + Map own = playerFlags.get(rplayer.getUniqueId().toString()); + if (own != null) { + addedOwn = rplayer.getUniqueId().toString(); + addPlayerFlagToRM(rm, player, own, random, true); + } + } while (it.hasNext()) { Entry> nextEnt = it.next(); - String next = nextEnt.getKey(); - - String perms = printPlayerFlags(nextEnt.getValue()); - if (next.length() == 36) { - String resolvedName = Residence.getInstance().getPlayerName(next); - if (resolvedName != null) { - try { - UUID uuid = UUID.fromString(next); - this.cachedPlayerNameUUIDs.put(uuid, resolvedName); - } catch (Exception e) { - } - next = resolvedName; - } - } - - if (next.equalsIgnoreCase(Residence.getInstance().getServerLandName())) + if (addedOwn != null && (player.equals(nextEnt.getKey()) || addedOwn.equals(nextEnt.getKey()))) continue; + addPlayerFlagToRM(rm, nextEnt.getKey(), nextEnt.getValue(), random, false); + } + } - if (perms.equals("none")) - continue; + return rm; + } - if (player.equals(next)) { - next = ownColor + next; - } else { - if (random) - next = p2Color + next; - else - next = p1Color + next; - random = !random; + private void addPlayerFlagToRM(RawMessage rm, String next, Map permMap, boolean random, boolean own) { + + String perms = printPlayerFlags(permMap); + if (next.length() == 36) { + String resolvedName = Residence.getInstance().getPlayerName(next); + if (resolvedName != null) { + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { } + next = resolvedName; + } + } - rm.addText(next + "&r").addHover(splitBy(5, perms)); - rm.addText(" "); + if (next.equalsIgnoreCase(Residence.getInstance().getServerLandName())) + return; - } + if (perms.equals("none")) + return; + + if (own) { + next = ownColor + next; + } else { + if (random) + next = p2Color + next; + else + next = p1Color + next; + random = !random; } - return rm; + rm.addText(next + "&r").addHover(splitBy(5, perms)); + rm.addText(" "); } protected String splitBy(int by, String perms) { From f0155ee3b943f5fbabfc71de1ac40c4ae1a792a9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 Aug 2022 17:54:36 +0300 Subject: [PATCH 0965/1142] Cleanup for res info command when we have more players to be shown Current player flags will be prioritized and shown first if there are any Clicking on player list will open new window with all players listed and their flags with auto pagination. Clicking on each line will open pset gui for easy adjustments --- .../bukkit/residence/commands/info.java | 31 ++- .../bukkit/residence/containers/lm.java | 8 +- .../bekvon/bukkit/residence/gui/FlagUtil.java | 2 +- .../residence/protection/FlagPermissions.java | 185 +++++++++++++++--- .../protection/ResidenceManager.java | 28 +++ 5 files changed, 217 insertions(+), 37 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 84fb3dd71..9cbb184b4 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -10,6 +10,7 @@ import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.Locale.LC; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.RawMessages.RawMessageCommand; @@ -27,7 +28,7 @@ public class info implements cmd { @Override @CommandAnnotation(simple = true, priority = 600) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - +CMIDebug.d("?"); if (args.length == 0 && sender instanceof Player) { Player player = (Player) sender; ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); @@ -56,7 +57,6 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.msg(sender, lm.Invalid_Residence); } - RawMessage rm = new RawMessage(); if (!nearby.isEmpty()) { @@ -68,10 +68,10 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo rm.addText(one.getName()); RawMessageCommand rmc = new RawMessageCommand() { @Override - public void run(CommandSender sender) { + public void run(CommandSender sender) { plugin.getResidenceManager().printAreaInfo(one.getName(), sender, resadmin); } - }; + }; rm.addHover(LC.info_Click.getLocale()); rm.addCommand(rmc); } @@ -82,6 +82,29 @@ public void run(CommandSender sender) { } else if (args.length == 1) { plugin.getResidenceManager().printAreaInfo(args[0], sender, resadmin); return true; + } else if (args.length == 2 || args.length == 3) { + + int page = 1; + String playerName = null; + for (int i = 1; i < args.length; i++) { + String arg = args[i]; + if (arg.startsWith("-p:")) + try { + page = Integer.parseInt(arg.replace("-p:", "")); + continue; + } catch (Exception e) { + } + + playerName = arg; + } + + if (playerName == null) + return false; + + if (playerName.equalsIgnoreCase("-players")) { + plugin.getResidenceManager().printAreaPlayers(args[0], sender, page); + } + return true; } return false; } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index d590a5e74..7d5dd202f 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -169,13 +169,13 @@ public enum lm { server_land("Server_Land"), - Flag_ownColor("&7"), Flag_p1Color("&2"), Flag_p2Color("&a"), Flag_haveColor("&2"), Flag_havePrefix(""), - Flag_denyColor("&c"), + Flag_denyColor("&7"), Flag_denyPrefix(""), + Flag_others("&eand &2%1 &eothers"), Flag_Set("&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"), Flag_SetFailed("&cYou dont have access to &6%1 &cflag"), Flag_CheckTrue("&eFlag &6%1 &eapplies to player &6%2 &efor residence &6%3&e, value = &6%4"), @@ -393,8 +393,8 @@ public enum lm { Limits_LeaseTime("&7- &eLease Time Given on Renew:&3 %1"), Limits_RenewCost("&7- &eRenew Cost Per Block:&3 %1"), - Gui_Set_Title("&6%1 flags"), - Gui_Pset_Title("&6%1 %2 flags"), + Gui_Set_Title("&8%1 flags"), + Gui_Pset_Title("&8%1 &7%2 &6flags"), Gui_Actions(new ArrayList(Arrays.asList("&2Left click to enable", "&cRight click to disable", "&eShift + left click to remove"))), InformationPage_Top("&e___/ &a %1 - %2 &e \\___"), diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index a1e58c967..52524f749 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -79,7 +79,7 @@ public void openPsetFlagGui(Player player, String targetPlayer, ClaimedResidence flag.recalculate(); PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); - openUI(flag, pi, player, Residence.getInstance().msg(lm.Gui_Set_Title, res.getName())); + openUI(flag, pi, player, Residence.getInstance().msg(lm.Gui_Pset_Title, res.getName(), targetPlayer)); return; } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 286fd20fb..4c95ede4c 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -18,6 +18,7 @@ import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; @@ -32,7 +33,9 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Locale.LC; import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; @@ -1191,14 +1194,12 @@ public String listPlayersFlags() { return sbuild.toString(); } - String ownColor = null; String p1Color = null; String p2Color = null; public RawMessage listPlayersFlagsRaw(String player, String text) { - if (ownColor == null) { - ownColor = lm.Flag_ownColor.getMessage(); + if (p1Color == null) { p1Color = lm.Flag_p1Color.getMessage(); p2Color = lm.Flag_p2Color.getMessage(); } @@ -1207,6 +1208,9 @@ public RawMessage listPlayersFlagsRaw(String player, String text) { rm.addText(text); Set>> set = playerFlags.entrySet(); + int playersToShow = 5; + int i = 0; + synchronized (set) { Iterator>> it = set.iterator(); boolean random = true; @@ -1217,22 +1221,132 @@ public RawMessage listPlayersFlagsRaw(String player, String text) { Map own = playerFlags.get(rplayer.getUniqueId().toString()); if (own != null) { addedOwn = rplayer.getUniqueId().toString(); - addPlayerFlagToRM(rm, player, own, random, true); + random = addPlayerFlagToRM(rm, player, own, random); + i++; } } + StringBuilder hover = new StringBuilder(); while (it.hasNext()) { Entry> nextEnt = it.next(); if (addedOwn != null && (player.equals(nextEnt.getKey()) || addedOwn.equals(nextEnt.getKey()))) continue; - addPlayerFlagToRM(rm, nextEnt.getKey(), nextEnt.getValue(), random, false); + + i++; + + if (i <= playersToShow) + random = addPlayerFlagToRM(rm, nextEnt.getKey(), nextEnt.getValue(), random); + if (i == playersToShow) { + rm.addText(lm.Flag_others.getMessage(set.size() - i)); + } + + if (i > playersToShow) { + String next = nameUpdate(nextEnt.getKey()); + if (random) + next = p2Color + next; + else + next = p1Color + next; + random = !random; + hover.append(next + " "); + } + } + + if (!hover.toString().isEmpty()) { + rm.addHover(splitBy(5, hover.toString())); } } return rm; } - private void addPlayerFlagToRM(RawMessage rm, String next, Map permMap, boolean random, boolean own) { + private String nameUpdate(String next) { + if (next.length() == 36) { + String resolvedName = Residence.getInstance().getPlayerName(next); + if (resolvedName != null) { + try { + UUID uuid = UUID.fromString(next); + this.cachedPlayerNameUUIDs.put(uuid, resolvedName); + } catch (Exception e) { + } + next = resolvedName; + } + } + return next; + } + + private boolean addPlayerFlagToRM(RawMessage rm, String next, Map permMap, boolean random) { + + String perms = printPlayerFlags(permMap); + + next = nameUpdate(next); + + if (next.equalsIgnoreCase(Residence.getInstance().getServerLandName())) + return random; + + if (perms.equals("none")) + return random; + + if (random) + next = p2Color + next; + else + next = p1Color + next; + random = !random; + + rm.addText(next + "&r").addHover(splitBy(5, perms)); + rm.addText(" "); + return random; + } + + public void listPlayers(CommandSender sender, String text, int page) { + + if (p1Color == null) { + p1Color = lm.Flag_p1Color.getMessage(); + p2Color = lm.Flag_p2Color.getMessage(); + } + + RawMessage rm = new RawMessage(); + if (text != null) + rm.addText(text); + Set>> set = playerFlags.entrySet(); + + PageInfo pi = new PageInfo(10, set.size(), page); + + synchronized (set) { + Iterator>> it = set.iterator(); + String addedOwn = null; + + ResidencePlayer rplayer = ResidencePlayer.get(sender.getName()); + if (rplayer != null) { + Map own = playerFlags.get(rplayer.getUniqueId().toString()); + if (own != null) { + addedOwn = rplayer.getUniqueId().toString(); + if (!pi.isContinue()) { + rm = new RawMessage(); + addPlayerFlags(rm, sender.getName(), own, pi.getPositionForOutput()); + rm.show(sender); + } + } + } + + while (it.hasNext()) { + if (pi.isContinue()) { + it.next(); + continue; + } + if (pi.isBreak()) + break; + Entry> nextEnt = it.next(); + if (addedOwn != null && (sender.getName().equals(nextEnt.getKey()) || addedOwn.equals(nextEnt.getKey()))) + continue; + rm = new RawMessage(); + addPlayerFlags(rm, nextEnt.getKey(), nextEnt.getValue(), pi.getPositionForOutput()); + rm.show(sender); + } + } + + } + + private void addPlayerFlags(RawMessage rm, String next, Map permMap, int position) { String perms = printPlayerFlags(permMap); if (next.length() == 36) { @@ -1253,35 +1367,50 @@ private void addPlayerFlagToRM(RawMessage rm, String next, Map if (perms.equals("none")) return; - if (own) { - next = ownColor + next; - } else { - if (random) - next = p2Color + next; - else - next = p1Color + next; - random = !random; + rm.addText(lm.Residence_ResList.getMessage(position, next, limitTo(5, perms), "", "")); + rm.addCommand("res pset " + next); + rm.addHover(splitBy(6, perms)); + + } + + protected String limitTo(int to, String perms) { + if (!perms.contains(" ")) + return perms; + int i = 0; + StringBuilder str = new StringBuilder(); + for (String one : perms.split(" ")) { + i++; + if (!str.toString().isEmpty()) + str.append(LC.info_ListSpliter.getLocale()); + str.append(one); + if (i >= to) { + str.append("..."); + break; + } } - rm.addText(next + "&r").addHover(splitBy(5, perms)); - rm.addText(" "); + return str.toString(); } protected String splitBy(int by, String perms) { - if (perms.contains(" ")) { - String[] splited = perms.split(" "); - int i = 0; - perms = ""; - for (String one : splited) { - i++; - perms += one + " "; - if (i >= by) { - i = 0; - perms += "\n"; - } + if (!perms.contains(" ")) + return perms; + + String[] splited = perms.split(" "); + int i = 0; + perms = ""; + StringBuilder str = new StringBuilder(); + for (String one : splited) { + i++; + if (!str.toString().isEmpty()) + str.append(" "); + str.append(one); + if (i % by == 0 && i < splited.length) { + str.append("\n"); } } - return perms; + + return str.toString(); } public String listGroupFlags() { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index c6f89e686..1e56ff740 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -48,7 +48,9 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.GetTime; +import net.Zrips.CMILib.CMILib; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Version.Version; @@ -749,6 +751,7 @@ public void printAreaInfo(String areaname, CommandSender sender, boolean resadmi else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) { RawMessage rm = perms.listPlayersFlagsRaw(sender.getName(), plugin.msg(lm.General_PlayersFlags, "")); + rm.addCommand("res info " + res.getName() + " -players"); rm.show(sender); } @@ -838,6 +841,31 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) plugin.msg(sender, lm.General_Separator); } + public void printAreaPlayers(String areaname, CommandSender sender, int page) { + ClaimedResidence res = this.getByName(areaname); + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return; + } + + areaname = res.getName(); + + plugin.msg(sender, lm.General_Separator); + + ResidencePermissions perms = res.getPermissions(); + + perms.listPlayers(sender, null, page); + + PageInfo pi = new PageInfo(10, perms.getPlayerFlags().size(), page) { + @Override + public Boolean pageChange(int page) { + printAreaPlayers(res.getName(), sender, page); + return null; + } + }; + pi.autoPagination(sender, "res info " + areaname + " -players", "-p:"); + } + public void mirrorPerms(Player reqPlayer, String targetArea, String sourceArea, boolean resadmin) { ClaimedResidence reciever = this.getByName(targetArea); ClaimedResidence source = this.getByName(sourceArea); From ef704e7b44cde43236259fd762f8658a21773ea9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Aug 2022 14:11:13 +0300 Subject: [PATCH 0966/1142] option to define residence bank max capacity --- .../bukkit/residence/ConfigManager.java | 2510 +++++++++-------- .../bukkit/residence/containers/lm.java | 5 +- .../residence/economy/ResidenceBank.java | 131 +- .../residence/protection/FlagPermissions.java | 12 +- 4 files changed, 1336 insertions(+), 1322 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 46745fc50..cbdff698b 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -304,6 +304,7 @@ public class ConfigManager { public static int RaidPlayerCooldown = 120; // Raid + public double BankCapacity = 0D; // Schematics public boolean RestoreAfterRentEnds; public boolean SchematicsSaveOnFlagChange; @@ -319,371 +320,371 @@ public class ConfigManager { public ConfigManager(Residence plugin) { // FileConfiguration config = YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "config.yml")); - this.plugin = plugin; - globalCreatorDefaults = new FlagPermissions(); - globalRentedDefaults = new FlagPermissions(); - globalResidenceDefaults = new FlagPermissions(); - globalGroupDefaults = new HashMap(); - UpdateConfigFile(); - this.loadFlags(); + this.plugin = plugin; + globalCreatorDefaults = new FlagPermissions(); + globalRentedDefaults = new FlagPermissions(); + globalResidenceDefaults = new FlagPermissions(); + globalGroupDefaults = new HashMap(); + UpdateConfigFile(); + this.loadFlags(); } public static String Colors(String text) { - return CMIChatColor.translate(text); + return CMIChatColor.translate(text); } public static List getClassesFromPackage(String pckgname, String cleaner) throws ClassNotFoundException { - List result = new ArrayList(); - try { - for (URL jarURL : ((URLClassLoader) Residence.class.getClassLoader()).getURLs()) { - try { - result.addAll(getClassesInSamePackageFromJar(pckgname, jarURL.toURI().getPath(), cleaner)); - } catch (URISyntaxException e) { - e.printStackTrace(); - } - } - } catch (NullPointerException x) { - throw new ClassNotFoundException(pckgname + " does not appear to be a valid package (Null pointer exception)"); - } - return result; + List result = new ArrayList(); + try { + for (URL jarURL : ((URLClassLoader) Residence.class.getClassLoader()).getURLs()) { + try { + result.addAll(getClassesInSamePackageFromJar(pckgname, jarURL.toURI().getPath(), cleaner)); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + } + } catch (NullPointerException x) { + throw new ClassNotFoundException(pckgname + " does not appear to be a valid package (Null pointer exception)"); + } + return result; } private static List getClassesInSamePackageFromJar(String packageName, String jarPath, String cleaner) { - JarFile jarFile = null; - List listOfCommands = new ArrayList(); - try { - jarFile = new JarFile(jarPath); - Enumeration en = jarFile.entries(); - while (en.hasMoreElements()) { - JarEntry entry = en.nextElement(); - String entryName = entry.getName(); - packageName = packageName.replace(".", "/"); - if (entryName != null && entryName.endsWith(".yml") && entryName.startsWith(packageName)) { - String name = entryName.replace(packageName, "").replace(".yml", "").replace("/", ""); - if (name.contains("$")) - name = name.split("\\$")[0]; - if (cleaner != null) - name = name.replace(cleaner, ""); - listOfCommands.add(name); - } - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - if (jarFile != null) - try { - jarFile.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - return listOfCommands; + JarFile jarFile = null; + List listOfCommands = new ArrayList(); + try { + jarFile = new JarFile(jarPath); + Enumeration en = jarFile.entries(); + while (en.hasMoreElements()) { + JarEntry entry = en.nextElement(); + String entryName = entry.getName(); + packageName = packageName.replace(".", "/"); + if (entryName != null && entryName.endsWith(".yml") && entryName.startsWith(packageName)) { + String name = entryName.replace(packageName, "").replace(".yml", "").replace("/", ""); + if (name.contains("$")) + name = name.split("\\$")[0]; + if (cleaner != null) + name = name.replace(cleaner, ""); + listOfCommands.add(name); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (jarFile != null) + try { + jarFile.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + return listOfCommands; } public void copyOverTranslations() { - ArrayList languages = new ArrayList(); - try { - languages.addAll(getClassesFromPackage("Language", null)); - } catch (ClassNotFoundException e1) { - e1.printStackTrace(); - } + ArrayList languages = new ArrayList(); + try { + languages.addAll(getClassesFromPackage("Language", null)); + } catch (ClassNotFoundException e1) { + e1.printStackTrace(); + } - for (String one : languages) { - File file = new File(plugin.getDataFolder(), "Language" + File.separator + one + ".yml"); - if (!file.exists()) { - YmlMaker f = new YmlMaker(plugin, "Language" + File.separator + one + ".yml"); - f.saveDefaultConfig(); - f.ConfigFile.renameTo(file); - } - } + for (String one : languages) { + File file = new File(plugin.getDataFolder(), "Language" + File.separator + one + ".yml"); + if (!file.exists()) { + YmlMaker f = new YmlMaker(plugin, "Language" + File.separator + one + ".yml"); + f.saveDefaultConfig(); + f.ConfigFile.renameTo(file); + } + } } public void ChangeConfig(String path, Boolean stage) { - File f = new File(plugin.getDataFolder(), "config.yml"); + File f = new File(plugin.getDataFolder(), "config.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - if (!conf.isBoolean(path)) - return; + if (!conf.isBoolean(path)) + return; - conf.set(path, stage); + conf.set(path, stage); - try { - conf.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - plugin.getConfigManager().UpdateConfigFile(); + try { + conf.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + plugin.getConfigManager().UpdateConfigFile(); } public static List ColorsArray(List text, Boolean colorize) { - List temp = new ArrayList(); - for (String part : text) { - if (colorize) - part = Colors(part); - temp.add(Colors(part)); - } - return temp; + List temp = new ArrayList(); + for (String part : text) { + if (colorize) + part = Colors(part); + temp.add(Colors(part)); + } + return temp; } void UpdateFlagFile() { - File f = new File(plugin.getDataFolder(), "flags.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + File f = new File(plugin.getDataFolder(), "flags.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); // if (!conf.isConfigurationSection("Global.CompleteDisable")) // conf.crea.createSection("Global.CompleteDisable"); - if (!conf.isList("Global.TotalFlagDisabling")) - conf.set("Global.TotalFlagDisabling", Arrays.asList("Completely", "Disable", "Particular", "Flags")); - - TreeMap sorted = new TreeMap<>(); - for (Flags fl : Flags.values()) { - sorted.put(fl.getName(), fl); - } - - for (Flags fl : sorted.values()) { - if (conf.isBoolean("Global.FlagPermission." + fl)) - continue; - conf.createSection("Global.FlagPermission." + fl); - conf.set("Global.FlagPermission." + fl, fl.isEnabled()); - } - - if (!conf.isConfigurationSection("Global.FlagGui")) { - conf.createSection("Global.FlagGui"); - } - - if (!conf.isConfigurationSection("Global.RentedDefault")) { - for (Entry one : this.getGlobalCreatorDefaultFlags().getFlags().entrySet()) { - conf.set("Global.RentedDefault." + one.getKey(), one.getValue()); - } - conf.set("Global.RentedDefault.admin", true); - } - - ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); - - for (Flags fl : sorted.values()) { - guiSection.set(fl.toString(), guiSection.get(fl.toString(), fl.getIcon().toString())); - } - - try { - conf.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - - ConfigReader cfg = null; - try { - cfg = new ConfigReader(f); - } catch (Exception e) { - e.printStackTrace(); - } - if (cfg == null) - return; - cfg.load(); - cfg.addComment("Global", "These are Global Settings for Residence."); - cfg.addComment("Global.Flags", "These are world flags that are applied when the player is NOT within a residence."); - cfg.addComment("Global.Flags.Global", "these are default for all worlds unless specified below, they can be overridden per group"); - cfg.addComment("Global.FlagPermission", "This gives permission to change certain flags to all groups, unless specifically denied to the group."); - cfg.addComment("Global.FlagGui", "This sets GUI items to represent each flag, if not given, then gray wool will be used"); - cfg.addComment("Global.ResidenceDefault", "These are default flags applied to all residences from any user group."); - cfg.addComment("Global.CreatorDefault", "These are default flags applied to the residence creator of any group."); - cfg.addComment("Global.RentedDefault", "These are default flags applied to the residence renter of any group."); - cfg.addComment("Global.GroupedFlags", "These are grouped flags, so when using /res pset nickname redstone true, player will get all flags in list, same when setting to false or removing them."); - cfg.addComment("Global.TotalFlagDisabling", "Completely disables defined flag which will no longer be accesable even with resadmin command", - "Can save some of the server processing resources if you dont want to utilize specific checks for specific flags"); - cfg.addComment("Global.GroupDefault", "These are default group flags applied to a residence made by a user of any group."); - cfg.addComment("ItemList", "this is where you can create blacklists / whitelists"); - cfg.addComment("ItemList.DefaultList", "list name is not important, as long as it is unique. Its good to use a descripive name."); - cfg.addComment("ItemList.DefaultList.Type", "type of the list, can be blacklist, whitelist, or ignorelist"); - cfg.addComment("ItemList.DefaultList.Items", "If you want, you can have this list only apply to one world, otherwise it applies to all worlds", - "World: world", - "You can also have the list apply only to one group, otherwise it applies for all groups", - "Group: default", - "this is the actual list of material names that this list allows or disallows", - "You can look up the material name by item ID in game by typing /res material ", - "Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance"); - - for (Flags fl : Flags.values()) { - cfg.addComment("Global.FlagPermission." + fl, "Applies to: " + fl.getFlagMode()); - } - - cfg.save(); + if (!conf.isList("Global.TotalFlagDisabling")) + conf.set("Global.TotalFlagDisabling", Arrays.asList("Completely", "Disable", "Particular", "Flags")); + + TreeMap sorted = new TreeMap<>(); + for (Flags fl : Flags.values()) { + sorted.put(fl.getName(), fl); + } + + for (Flags fl : sorted.values()) { + if (conf.isBoolean("Global.FlagPermission." + fl)) + continue; + conf.createSection("Global.FlagPermission." + fl); + conf.set("Global.FlagPermission." + fl, fl.isEnabled()); + } + + if (!conf.isConfigurationSection("Global.FlagGui")) { + conf.createSection("Global.FlagGui"); + } + + if (!conf.isConfigurationSection("Global.RentedDefault")) { + for (Entry one : this.getGlobalCreatorDefaultFlags().getFlags().entrySet()) { + conf.set("Global.RentedDefault." + one.getKey(), one.getValue()); + } + conf.set("Global.RentedDefault.admin", true); + } + + ConfigurationSection guiSection = conf.getConfigurationSection("Global.FlagGui"); + + for (Flags fl : sorted.values()) { + guiSection.set(fl.toString(), guiSection.get(fl.toString(), fl.getIcon().toString())); + } + + try { + conf.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + + ConfigReader cfg = null; + try { + cfg = new ConfigReader(f); + } catch (Exception e) { + e.printStackTrace(); + } + if (cfg == null) + return; + cfg.load(); + cfg.addComment("Global", "These are Global Settings for Residence."); + cfg.addComment("Global.Flags", "These are world flags that are applied when the player is NOT within a residence."); + cfg.addComment("Global.Flags.Global", "these are default for all worlds unless specified below, they can be overridden per group"); + cfg.addComment("Global.FlagPermission", "This gives permission to change certain flags to all groups, unless specifically denied to the group."); + cfg.addComment("Global.FlagGui", "This sets GUI items to represent each flag, if not given, then gray wool will be used"); + cfg.addComment("Global.ResidenceDefault", "These are default flags applied to all residences from any user group."); + cfg.addComment("Global.CreatorDefault", "These are default flags applied to the residence creator of any group."); + cfg.addComment("Global.RentedDefault", "These are default flags applied to the residence renter of any group."); + cfg.addComment("Global.GroupedFlags", "These are grouped flags, so when using /res pset nickname redstone true, player will get all flags in list, same when setting to false or removing them."); + cfg.addComment("Global.TotalFlagDisabling", "Completely disables defined flag which will no longer be accesable even with resadmin command", + "Can save some of the server processing resources if you dont want to utilize specific checks for specific flags"); + cfg.addComment("Global.GroupDefault", "These are default group flags applied to a residence made by a user of any group."); + cfg.addComment("ItemList", "this is where you can create blacklists / whitelists"); + cfg.addComment("ItemList.DefaultList", "list name is not important, as long as it is unique. Its good to use a descripive name."); + cfg.addComment("ItemList.DefaultList.Type", "type of the list, can be blacklist, whitelist, or ignorelist"); + cfg.addComment("ItemList.DefaultList.Items", "If you want, you can have this list only apply to one world, otherwise it applies to all worlds", + "World: world", + "You can also have the list apply only to one group, otherwise it applies for all groups", + "Group: default", + "this is the actual list of material names that this list allows or disallows", + "You can look up the material name by item ID in game by typing /res material ", + "Alternativly, you can simply use the item ID in the list, but its less descriptive and harder to see what the list allows or dissallows at a glance"); + + for (Flags fl : Flags.values()) { + cfg.addComment("Global.FlagPermission." + fl, "Applies to: " + fl.getFlagMode()); + } + + cfg.save(); } public void UpdateGroupedFlagsFile() { - File f = new File(plugin.getDataFolder(), "flags.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - - if (!conf.isConfigurationSection("Global.GroupedFlags")) { - conf.createSection("Global.GroupedFlags"); - conf.set("Global.GroupedFlags.redstone", Arrays.asList( - Flags.note.toString(), - Flags.pressure.toString(), - Flags.lever.toString(), - Flags.button.toString(), - Flags.diode.toString())); - conf.set("Global.GroupedFlags.crafting", Arrays.asList( - Flags.brew.toString(), - Flags.table.toString(), - Flags.enchant.toString())); - conf.set("Global.GroupedFlags.trusted", Arrays.asList( - Flags.use.toString(), - Flags.tp.toString(), - Flags.build.toString(), - Flags.container.toString(), - Flags.move.toString(), - Flags.leash.toString(), - Flags.animalkilling.toString(), - Flags.mobkilling.toString(), - Flags.shear.toString(), - Flags.chat.toString())); - conf.set("Global.GroupedFlags.fire", Arrays.asList( - Flags.ignite.toString(), - Flags.firespread.toString())); - - try { - conf.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - } - - for (Flags one : Flags.values()) { - one.resetGroups(); - } - - for (String oneGroup : conf.getConfigurationSection("Global.GroupedFlags").getKeys(false)) { - for (String oneFlag : conf.getStringList("Global.GroupedFlags." + oneGroup)) { - - Flags flag = Flags.getFlag(oneFlag); - if (flag != null) { - flag.addGroup(oneGroup); - } - - FlagPermissions.addFlagToFlagGroup(oneGroup, oneFlag); - } - } + File f = new File(plugin.getDataFolder(), "flags.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + if (!conf.isConfigurationSection("Global.GroupedFlags")) { + conf.createSection("Global.GroupedFlags"); + conf.set("Global.GroupedFlags.redstone", Arrays.asList( + Flags.note.toString(), + Flags.pressure.toString(), + Flags.lever.toString(), + Flags.button.toString(), + Flags.diode.toString())); + conf.set("Global.GroupedFlags.crafting", Arrays.asList( + Flags.brew.toString(), + Flags.table.toString(), + Flags.enchant.toString())); + conf.set("Global.GroupedFlags.trusted", Arrays.asList( + Flags.use.toString(), + Flags.tp.toString(), + Flags.build.toString(), + Flags.container.toString(), + Flags.move.toString(), + Flags.leash.toString(), + Flags.animalkilling.toString(), + Flags.mobkilling.toString(), + Flags.shear.toString(), + Flags.chat.toString())); + conf.set("Global.GroupedFlags.fire", Arrays.asList( + Flags.ignite.toString(), + Flags.firespread.toString())); + + try { + conf.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + } + + for (Flags one : Flags.values()) { + one.resetGroups(); + } + + for (String oneGroup : conf.getConfigurationSection("Global.GroupedFlags").getKeys(false)) { + for (String oneFlag : conf.getStringList("Global.GroupedFlags." + oneGroup)) { + + Flags flag = Flags.getFlag(oneFlag); + if (flag != null) { + flag.addGroup(oneGroup); + } + + FlagPermissions.addFlagToFlagGroup(oneGroup, oneFlag); + } + } } public void UpdateConfigFile() { - String defaultWorldName = Bukkit.getServer().getWorlds().size() > 0 ? Bukkit.getServer().getWorlds().get(0).getName() : "World"; + String defaultWorldName = Bukkit.getServer().getWorlds().size() > 0 ? Bukkit.getServer().getWorlds().get(0).getName() : "World"; - ConfigReader c = null; - try { - c = new ConfigReader(Residence.getInstance(), "config.yml"); - } catch (Exception e) { - e.printStackTrace(); - } + ConfigReader c = null; + try { + c = new ConfigReader(Residence.getInstance(), "config.yml"); + } catch (Exception e) { + e.printStackTrace(); + } - if (c == null) - return; - - c.copyDefaults(true); - - c.addComment("Global", "These are Global Settings for Residence."); - - c.addComment("Global.UUIDConvertion", "Starts UUID conversion on plugin startup", "DONT change this if you are not sure what you doing"); - UUIDConvertion = c.get("Global.UUIDConvertion", true); - - c.addComment("Global.OfflineMode", - "If you running offline server. Suggestion would be to keep this at false and base residence ownership from UUID and not on players name"); - OfflineMode = c.get("Global.OfflineMode", false); - - c.addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); - versionCheck = c.get("Global.versionCheck", true); - - c.addComment("Global.Language", "This loads the .yml file in the Residence Language folder", - "All Residence text comes from this file. (NOT DONE YET)"); - language = c.get("Global.Language", "English"); - - c.addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", - "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); - selectionTool = CMIMaterial.get(c.get("Global.SelectionToolId", CMIMaterial.WOODEN_HOE.name())); - - c.addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); - SelectionIgnoreY = c.get("Global.Selection.IgnoreY", false); - - c.addComment("Global.Selection.IgnoreYInSubzone", - "When this set to true, selections inside existing residence will be from bottom to top of that residence", - "When this set to false, selections inside existing residence will be exactly as they are"); - SelectionIgnoreYInSubzone = c.get("Global.Selection.IgnoreYInSubzone", false); - - c.addComment("Global.Selection.netherHeight", - "Defines height of nether when creating residences. This mostly applies when performing commands like /res select vert or /res auto which will expand residence to defined height", - "This cant be higher than 319 or lower than 1"); - SelectionNetherHeight = c.get("Global.Selection.netherHeight", 128); - SelectionNetherHeight = SelectionNetherHeight > 319 ? 319 : SelectionNetherHeight < 1 ? 1 : SelectionNetherHeight; - - c.addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", - "This will lower residence price by up to 319 times, so adjust block price BEFORE enabling this"); - NoCostForYBlocks = c.get("Global.Selection.NoCostForYBlocks", false); - - c.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", - "Simply equip this tool and hit a location inside the residence and it will display the info for it."); - infoTool = CMIMaterial.get(c.get("Global.InfoToolId", Material.STRING.toString())); - - c.addComment("Global.Optimizations.LoadEveryWorld", "When enabled we will load data from every single world file even if world doesn't exist but might be loaded later on", - "Usually only useful when you have multiverse plugin which loads worlds durring server work time"); - LoadEveryWorld = c.get("Global.Optimizations.LoadEveryWorld", false); - - c.addComment("Global.Optimizations.CleanerStartupLog", "While enabled we will avoid showing extra feedback lines on startup"); - CleanerStartupLog = c.get("Global.Optimizations.CleanerStartupLog", true); - - c.addComment("Global.Optimizations.CanTeleportIncludeOwner", "This will slightly change behavior of groups file CanTeleport section which will include server owner into check", - "When this is set to false and CanTeleport set to false, players will not have option to teleport to other player residences, only to their own", - "When this is set to true and CanTeleport set to false, players will not have option to teleport to residences in general", - "Keep in mind that this only applies for commands like /res tp"); - CanTeleportIncludeOwner = c.get("Global.Optimizations.CanTeleportIncludeOwner", false); - - c.addComment("Global.Optimizations.DefaultWorld", "Name of your main residence world. Usually normal starting world 'World'. Capitalization essential"); - DefaultWorld = c.get("Global.Optimizations.DefaultWorld", defaultWorldName); - - c.addComment("Global.Optimizations.DisabledWorlds.List", "List Of Worlds where this plugin is disabled"); - DisabledWorldsList = c.get("Global.Optimizations.DisabledWorlds.List", new ArrayList()); - - c.addComment("Global.Optimizations.DisabledWorlds.DisableListeners", "Disables all listeners in included worlds"); - DisableListeners = c.get("Global.Optimizations.DisabledWorlds.DisableListeners", true); - c.addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); - DisableCommands = c.get("Global.Optimizations.DisabledWorlds.DisableCommands", true); - - c.addComment("Global.Optimizations.ItemPickUpDelay", "Delay in seconds between item pickups after residence flag prevents it", "Keep it at arround 10 sec to lower unesecery checks"); - ItemPickUpDelay = c.get("Global.Optimizations.ItemPickUpDelay", 10); - - c.addComment("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", - "When set to true /res auto command will check for new area collision with other residences to avoid overlapping.", - "Set it to false to gain some performace but new residence can often overlap with old ones"); - ARCCheckCollision = c.get("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", true); - - c.addComment("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", - "Defines new residence name increment when using automatic residence creation command if residence with that name already exist"); - ARCIncrementFormat = c.get("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "_[number]"); - - c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Enabled", - "When enabled we will try to create region by defined bounds"); - ARCSizeEnabled = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Enabled", false); - - c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Percentage", - "Value between 1 and 100 which will define size of residence we will create in percentage depending on players permission group"); - ARCSizePercentage = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Percentage", 50); - ARCSizePercentage = ARCSizePercentage < 1 ? 1 : ARCSizePercentage > 100 ? 100 : ARCSizePercentage; - - c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Min", - "Value in blocks. While previous percentage will determine general size, this can be used to avoid having tiny residences", - "For example if player has access to 30x30 residence and Percentage is set to 50% then instead of using 15 block size we will use 20 (default)", - "Keep in mind that this will not override actual max/min residence sizes player can have"); - ARCSizeMin = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Min", 5); - ARCSizeMin = ARCSizeMin < 1 ? 1 : ARCSizeMin; - - c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Max", - "Value in blocks. While previous percentage will determine general size, this can be used to avoid having huge residences", - "For example if player has access to 500x500 residence and Percentage is set to 50% then instead of using 250 block size we will use 100 (default)", - "Keep in mind that this will not override actual max/min residence sizes player can have"); - ARCSizeMax = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Max", 100); - ARCSizeMax = ARCSizeMax < ARCSizeMin ? ARCSizeMin : ARCSizeMax; + if (c == null) + return; + + c.copyDefaults(true); + + c.addComment("Global", "These are Global Settings for Residence."); + + c.addComment("Global.UUIDConvertion", "Starts UUID conversion on plugin startup", "DONT change this if you are not sure what you doing"); + UUIDConvertion = c.get("Global.UUIDConvertion", true); + + c.addComment("Global.OfflineMode", + "If you running offline server. Suggestion would be to keep this at false and base residence ownership from UUID and not on players name"); + OfflineMode = c.get("Global.OfflineMode", false); + + c.addComment("Global.versionCheck", "Players with residence.versioncheck permission node will be noticed about new residence version on login"); + versionCheck = c.get("Global.versionCheck", true); + + c.addComment("Global.Language", "This loads the .yml file in the Residence Language folder", + "All Residence text comes from this file. (NOT DONE YET)"); + language = c.get("Global.Language", "English"); + + c.addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", + "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); + selectionTool = CMIMaterial.get(c.get("Global.SelectionToolId", CMIMaterial.WOODEN_HOE.name())); + + c.addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); + SelectionIgnoreY = c.get("Global.Selection.IgnoreY", false); + + c.addComment("Global.Selection.IgnoreYInSubzone", + "When this set to true, selections inside existing residence will be from bottom to top of that residence", + "When this set to false, selections inside existing residence will be exactly as they are"); + SelectionIgnoreYInSubzone = c.get("Global.Selection.IgnoreYInSubzone", false); + + c.addComment("Global.Selection.netherHeight", + "Defines height of nether when creating residences. This mostly applies when performing commands like /res select vert or /res auto which will expand residence to defined height", + "This cant be higher than 319 or lower than 1"); + SelectionNetherHeight = c.get("Global.Selection.netherHeight", 128); + SelectionNetherHeight = SelectionNetherHeight > 319 ? 319 : SelectionNetherHeight < 1 ? 1 : SelectionNetherHeight; + + c.addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", + "This will lower residence price by up to 319 times, so adjust block price BEFORE enabling this"); + NoCostForYBlocks = c.get("Global.Selection.NoCostForYBlocks", false); + + c.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", + "Simply equip this tool and hit a location inside the residence and it will display the info for it."); + infoTool = CMIMaterial.get(c.get("Global.InfoToolId", Material.STRING.toString())); + + c.addComment("Global.Optimizations.LoadEveryWorld", "When enabled we will load data from every single world file even if world doesn't exist but might be loaded later on", + "Usually only useful when you have multiverse plugin which loads worlds durring server work time"); + LoadEveryWorld = c.get("Global.Optimizations.LoadEveryWorld", false); + + c.addComment("Global.Optimizations.CleanerStartupLog", "While enabled we will avoid showing extra feedback lines on startup"); + CleanerStartupLog = c.get("Global.Optimizations.CleanerStartupLog", true); + + c.addComment("Global.Optimizations.CanTeleportIncludeOwner", "This will slightly change behavior of groups file CanTeleport section which will include server owner into check", + "When this is set to false and CanTeleport set to false, players will not have option to teleport to other player residences, only to their own", + "When this is set to true and CanTeleport set to false, players will not have option to teleport to residences in general", + "Keep in mind that this only applies for commands like /res tp"); + CanTeleportIncludeOwner = c.get("Global.Optimizations.CanTeleportIncludeOwner", false); + + c.addComment("Global.Optimizations.DefaultWorld", "Name of your main residence world. Usually normal starting world 'World'. Capitalization essential"); + DefaultWorld = c.get("Global.Optimizations.DefaultWorld", defaultWorldName); + + c.addComment("Global.Optimizations.DisabledWorlds.List", "List Of Worlds where this plugin is disabled"); + DisabledWorldsList = c.get("Global.Optimizations.DisabledWorlds.List", new ArrayList()); + + c.addComment("Global.Optimizations.DisabledWorlds.DisableListeners", "Disables all listeners in included worlds"); + DisableListeners = c.get("Global.Optimizations.DisabledWorlds.DisableListeners", true); + c.addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); + DisableCommands = c.get("Global.Optimizations.DisabledWorlds.DisableCommands", true); + + c.addComment("Global.Optimizations.ItemPickUpDelay", "Delay in seconds between item pickups after residence flag prevents it", "Keep it at arround 10 sec to lower unesecery checks"); + ItemPickUpDelay = c.get("Global.Optimizations.ItemPickUpDelay", 10); + + c.addComment("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", + "When set to true /res auto command will check for new area collision with other residences to avoid overlapping.", + "Set it to false to gain some performace but new residence can often overlap with old ones"); + ARCCheckCollision = c.get("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", true); + + c.addComment("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", + "Defines new residence name increment when using automatic residence creation command if residence with that name already exist"); + ARCIncrementFormat = c.get("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "_[number]"); + + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Enabled", + "When enabled we will try to create region by defined bounds"); + ARCSizeEnabled = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Enabled", false); + + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Percentage", + "Value between 1 and 100 which will define size of residence we will create in percentage depending on players permission group"); + ARCSizePercentage = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Percentage", 50); + ARCSizePercentage = ARCSizePercentage < 1 ? 1 : ARCSizePercentage > 100 ? 100 : ARCSizePercentage; + + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Min", + "Value in blocks. While previous percentage will determine general size, this can be used to avoid having tiny residences", + "For example if player has access to 30x30 residence and Percentage is set to 50% then instead of using 15 block size we will use 20 (default)", + "Keep in mind that this will not override actual max/min residence sizes player can have"); + ARCSizeMin = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Min", 5); + ARCSizeMin = ARCSizeMin < 1 ? 1 : ARCSizeMin; + + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Size.Max", + "Value in blocks. While previous percentage will determine general size, this can be used to avoid having huge residences", + "For example if player has access to 500x500 residence and Percentage is set to 50% then instead of using 250 block size we will use 100 (default)", + "Keep in mind that this will not override actual max/min residence sizes player can have"); + ARCSizeMax = c.get("Global.Optimizations.AutomaticResidenceCreation.Size.Max", 100); + ARCSizeMax = ARCSizeMax < ARCSizeMin ? ARCSizeMin : ARCSizeMax; // c.addComment("Global.Optimizations.DisabledNoFlagMessage.Use", "Enable if you want to hide no flag error messages in particular worlds", // "You can bypass this with residence.checkbadflags permission node"); @@ -691,1484 +692,1487 @@ public void UpdateConfigFile() { // c.addComment("Global.Optimizations.DisabledNoFlagMessage.Worlds", "List Of Worlds where player wont get error messages"); // DisableNoFlagMessageWorlds = c.get("Global.Optimizations.DisabledNoFlagMessage.Worlds", Arrays.asList(Bukkit.getWorlds().get(0).getName())); - c.addComment("Global.Optimizations.GlobalChat.Enabled", - "Enables or disables chat modification by including players main residence name"); - GlobalChatEnabled = c.get("Global.Optimizations.GlobalChat.Enabled", false); - c.addComment("Global.Optimizations.GlobalChat.SelfModify", - "Modifys chat to add chat titles. If you're using a chat manager, you may add the tag {residence} to your chat format and disable this."); - GlobalChatSelfModify = c.get("Global.Optimizations.GlobalChat.SelfModify", true); - GlobalChatFormat = c.get("Global.Optimizations.GlobalChat.Format", "&c[&e%1&c]"); - - c.addComment("Global.Optimizations.BlockAnyTeleportation", - "When this set to true, any teleportation to residence where player dont have tp flag, action will be denyied", - "This can prevent from teleporting players to residence with 3rd party plugins like esentials /tpa"); - BlockAnyTeleportation = c.get("Global.Optimizations.BlockAnyTeleportation", true); - - c.addComment("Global.Optimizations.OverridePvp", "By setting this to true, regular pvp flag will be acting as overridepvp flag", - "Overridepvp flag tries to ignore any pvp protection in that residence by any other plugin"); - OverridePvp = c.get("Global.Optimizations.OverridePvp", false); - - // residence kick location - c.addComment("Global.Optimizations.KickLocation.Use", - "By setting this to true, when player kicks another player from residence, he will be teleported to this location instead of getting outside residence"); - Boolean UseKick = c.get("Global.Optimizations.KickLocation.Use", false); - String KickLocationWorld = c.get("Global.Optimizations.KickLocation.World", defaultWorldName); - Double KickLocationX = c.get("Global.Optimizations.KickLocation.X", 0.5); - Double KickLocationY = c.get("Global.Optimizations.KickLocation.Y", 63.0); - Double KickLocationZ = c.get("Global.Optimizations.KickLocation.Z", 0.5); - c.addComment("Global.Optimizations.KickLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); - Double KickPitch = c.get("Global.Optimizations.KickLocation.Pitch", 0.0); - c.addComment("Global.Optimizations.KickLocation.Yaw", "Head position to left and right. Range from -180 to 180"); - Double KickYaw = c.get("Global.Optimizations.KickLocation.Yaw", 0.0); - if (UseKick) { - World world = Bukkit.getWorld(KickLocationWorld); - if (world != null) { - KickLocation = new Location(world, KickLocationX, KickLocationY, KickLocationZ); - KickLocation.setPitch(KickPitch.floatValue()); - KickLocation.setYaw(KickYaw.floatValue()); - } - } - - c.addComment("Global.Optimizations.FlyLandLocation.World", "Used when players fly state is being turned to false because of fly flag and there is no solid land where to land for player"); - String FlyLocationWorld = c.get("Global.Optimizations.FlyLandLocation.World", defaultWorldName); - Double FlyLocationX = c.get("Global.Optimizations.FlyLandLocation.X", 0.5); - Double FlyLocationY = c.get("Global.Optimizations.FlyLandLocation.Y", 63.0); - Double FlyLocationZ = c.get("Global.Optimizations.FlyLandLocation.Z", 0.5); - c.addComment("Global.Optimizations.FlyLandLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); - Double FlyPitch = c.get("Global.Optimizations.FlyLandLocation.Pitch", 0.0); - c.addComment("Global.Optimizations.FlyLandLocation.Yaw", "Head position to left and right. Range from -180 to 180"); - Double FlyYaw = c.get("Global.Optimizations.FlyLandLocation.Yaw", 0.0); - World world = Bukkit.getWorld(FlyLocationWorld); - if (world != null) { - FlyLandLocation = new Location(world, FlyLocationX, FlyLocationY, FlyLocationZ); - FlyLandLocation.setPitch(FlyPitch.floatValue()); - FlyLandLocation.setYaw(FlyYaw.floatValue()); - } - - c.addComment("Global.Optimizations.InfoCommand.ShortInformation", - "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); - ShortInfoUse = c.get("Global.Optimizations.InfoCommand.ShortInformation", c.getC().getBoolean("Global.Optimizations.ShortInfo.Use", true)); - - c.addComment("Global.Optimizations.InfoCommand.ExcludeDefaultFlags", - "When set to true default residence flags set in flags.yml file will get excluded from info command output and will not be shown", "If flag gets different state then it will be shown"); - InfoExcludeDFlags = c.get("Global.Optimizations.InfoCommand.ExcludeDefaultFlags", false); - - // Vote range - c.addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); - VoteRangeFrom = c.get("Global.Optimizations.Vote.RangeFrom", 0); - VoteRangeTo = c.get("Global.Optimizations.Vote.RangeTo", 10); - - c.addComment("Global.Optimizations.Vote.OnlyLike", "If this true, players can only give like for shop instead of point voting"); - OnlyLike = c.get("Global.Optimizations.Vote.OnlyLike", false); - - c.addComment("Global.Optimizations.ConsoleLogs.ShowFlagChanges", "If this true, flag changes throw GUI will be recorded in console"); - ConsoleLogsShowFlagChanges = c.get("Global.Optimizations.ConsoleLogs.ShowFlagChanges", true); - - // Healing/Feed interval - c.addComment("Global.Optimizations.Intervals.Heal", "How often in seconds to heal/feed players in residence with appropriate flag", - "Bigger numbers can save some resources"); - HealInterval = c.get("Global.Optimizations.Intervals.Heal", 1); - FeedInterval = c.get("Global.Optimizations.Intervals.Feed", 5); - - // negative potion effect list - c.addComment("Global.Optimizations.NegativePotionEffects", - "Potions containing one of thos effects will be ignored if residence dont have pvp true flag set"); - NegativePotionEffects = c.get("Global.Optimizations.NegativePotionEffects", Arrays.asList("blindness", "confusion", "harm", "hunger", "poison", "slow", - "slow_digging", "weakness", "wither")); - - NegativeLingeringPotionEffects = c.get("Global.Optimizations.NegativeLingeringPotions", Arrays.asList("slowness", "instant_damage", "poison", - "slowness")); - - c.addComment("Global.Optimizations.WalkSpeed", - "Defines speed for particular wspeed1 and wspeed2 flags. It can be from 0 up to 5"); - WalkSpeed1 = c.get("Global.Optimizations.WalkSpeed.1", 0.5D); - WalkSpeed1 = WalkSpeed1 < 0 ? 0 : WalkSpeed1; - WalkSpeed1 = WalkSpeed1 > 5 ? 5 : WalkSpeed1; - WalkSpeed1 = WalkSpeed1 / 5.0; - WalkSpeed2 = c.get("Global.Optimizations.WalkSpeed.2", 2D); - WalkSpeed2 = WalkSpeed2 < 0 ? 0 : WalkSpeed2; - WalkSpeed2 = WalkSpeed2 > 5 ? 5 : WalkSpeed2; - WalkSpeed2 = WalkSpeed2 / 5.0; - - c.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", - "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); - minMoveUpdate = c.get("Global.MoveCheckInterval", 500); - - c.addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); - TeleportDelay = c.get("Global.Tp.TeleportDelay", 3); - c.addComment("Global.Tp.TeleportTitleMessage", "Show aditional message in title message area when player is teleporting to residence"); - TeleportTitleMessage = c.get("Global.Tp.TeleportTitleMessage", true); - - Set worlds = new HashSet(); - - for (int i = 0; i < 3 && i < Bukkit.getWorlds().size(); i++) { - worlds.add(Bukkit.getWorlds().get(i)); - } - - worlds.addAll(Bukkit.getWorlds()); - - RTeleport.clear(); - boolean commented = false; - if (c.getC().isConfigurationSection("Global.RandomTeleportation.Worlds")) { - ConfigurationSection sec = c.getC().getConfigurationSection("Global.RandomTeleportation.Worlds"); - if (sec != null) - for (String one : sec.getKeys(false)) { - String path = "Global.RandomTeleportation.Worlds." + one + "."; - - boolean enabled = c.get(path + "Enabled", true); - - if (!commented) - c.addComment("Global.RandomTeleportation.Worlds." + one, - "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); - - if (!commented) - c.addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); - int MaxCoord = c.get(path + "MaxCoord", 1000); - - if (!commented) - c.addComment(path + "MinCoord", - "If maxcoord set to 1000 and mincoord to 500, then player can be teleported between -1000 to -500 and 500 to 1000 coordinates"); - int MinCoord = c.get(path + "MinCoord", c.getC().getInt(path + "MinCord", 500)); - int CenterX = c.get(path + "CenterX", 0); - int CenterZ = c.get(path + "CenterZ", 0); - - World w = getWorld(one); - - if (w == null) { - plugin.consoleMessage("&cCan't find world with (" + one + ") name"); - continue; - } - - commented = true; - worlds.remove(w); - - if (!enabled) - continue; - RTeleport.add(new RandomTeleport(w, MaxCoord, MinCoord, CenterX, CenterZ)); - } - } - - for (World one : worlds) { - String name = one.getName(); - name = name.replace(".", "_"); - - String path = "Global.RandomTeleportation.Worlds." + name + "."; - boolean enabled = c.get(path + "Enabled", true); - int MaxCoord = c.get(path + "MaxCoord", 1000); - int MinCoord = c.get(path + "MinCoord", c.getC().getInt(path + "MinCord", 500)); - int CenterX = c.get(path + "CenterX", 0); - int CenterZ = c.get(path + "CenterZ", 0); - - if (!enabled) - continue; - RTeleport.add(new RandomTeleport(one, MaxCoord, MinCoord, CenterX, CenterZ)); - } - - c.addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); - rtCooldown = c.get("Global.RandomTeleportation.Cooldown", 5); - - c.addComment("Global.RandomTeleportation.MaxTries", "How many times to try find correct location for teleportation.", - "Keep it at low number, as player always can try again after delay"); - rtMaxTries = c.get("Global.RandomTeleportation.MaxTries", 20); - - c.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); - autoSaveInt = c.get("Global.SaveInterval", 10); - c.addComment("Global.NewSaveMechanic", "New save mechanic can minimize save file couple times and speedup save/load time in general", "Bigger files have bigger impact"); - NewSaveMechanic = c.get("Global.NewSaveMechanic", true); - - c.addComment("Global.Backup.AutoCleanUp.Use", - "Do you want to automatically remove backup files from main backup folder if they are older than defined day amount"); - BackupAutoCleanUpUse = c.get("Global.Backup.AutoCleanUp.Use", false); - BackupAutoCleanUpDays = c.get("Global.Backup.AutoCleanUp.Days", 30); - - c.addComment("Global.Backup.UseZip", "Do you want to backup files by creating zip files in main residence folder in backup folder", - "This wont have effect on regular backuped files made in save folder"); - UseZipBackup = c.get("Global.Backup.UseZip", true); - - BackupWorldFiles = c.get("Global.Backup.IncludeFiles.Worlds", true); - BackupforsaleFile = c.get("Global.Backup.IncludeFiles.forsale", true); - BackupleasesFile = c.get("Global.Backup.IncludeFiles.leases", true); - BackuppermlistsFile = c.get("Global.Backup.IncludeFiles.permlists", true); - BackuprentFile = c.get("Global.Backup.IncludeFiles.rent", true); - BackupflagsFile = c.get("Global.Backup.IncludeFiles.flags", true); - BackupgroupsFile = c.get("Global.Backup.IncludeFiles.groups", true); - BackupconfigFile = c.get("Global.Backup.IncludeFiles.config", true); - - // Auto remove old residences - c.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", - "Players can bypass this with residence.cleanbypass permission node"); - AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); - c.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); - AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); - c.addComment("Global.AutoCleanUp.Regenerate", "Do you want to regenerate old residence area", "This requires world edit to be present"); - AutoCleanUpRegenerate = c.get("Global.AutoCleanUp.Regenerate", false); - c.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); - AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); - - for (int i = 0; i < AutoCleanUpWorlds.size(); i++) { - AutoCleanUpWorlds.set(i, AutoCleanUpWorlds.get(i).toLowerCase()); - } - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - LwcMatList.clear(); - c.addComment("Global.Lwc.OnDelete", "Removes lwc protection from all defined objects when removing residence"); - LwcOnDelete = c.get("Global.Lwc.OnDelete", true); - c.addComment("Global.Lwc.OnBuy", "Removes lwc protection from all defined objects when buying residence"); - LwcOnBuy = c.get("Global.Lwc.OnBuy", true); - c.addComment("Global.Lwc.OnUnrent", "Removes lwc protection from all defined objects when unrenting residence"); - LwcOnUnrent = c.get("Global.Lwc.OnUnrent", true); - - c.addComment("Global.Lwc.MaterialList", "List of blocks you want to remove protection from"); - for (String oneName : c.get("Global.Lwc.MaterialList", Arrays.asList("CHEST", "TRAPPED_CHEST", "furnace", "dispenser"))) { - Material mat = Material.getMaterial(oneName.toUpperCase()); - if (mat != null) - LwcMatList.add(mat); - else - Bukkit.getConsoleSender().sendMessage("Incorrect Lwc material name for " + oneName); - } - } - - // TNT explosions below 63 - c.addComment("Global.AntiGreef.TNT.ExplodeBelow", - "When set to true will allow tnt and minecart with tnt to explode below 62 (default) level outside of residence", - "This will allow mining with tnt and more vanilla play"); - TNTExplodeBelow = c.get("Global.AntiGreef.TNT.ExplodeBelow", false); - TNTExplodeBelowLevel = c.get("Global.AntiGreef.TNT.level", 62); - // Creeper explosions below 63 - c.addComment("Global.AntiGreef.Creeper.ExplodeBelow", "When set to true will allow Creeper explode below 62 (default) level outside of residence", - "This will give more realistic game play", - "For this to work properly you will need to disable creeper explosion in the world in general. This can be done in flags file under global world section"); - CreeperExplodeBelow = c.get("Global.AntiGreef.Creeper.ExplodeBelow", false); - CreeperExplodeBelowLevel = c.get("Global.AntiGreef.Creeper.level", 62); - // Flow - c.addComment("Global.AntiGreef.Flow.Level", "Level from which one to start lava and water flow blocking", "This dont have effect in residence area"); - FlowLevel = c.get("Global.AntiGreef.Flow.Level", 63); - c.addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); - NoLava = c.get("Global.AntiGreef.Flow.NoLavaFlow", false); - c.addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); - NoWater = c.get("Global.AntiGreef.Flow.NoWaterFlow", false); - NoFlowWorlds = c.get("Global.AntiGreef.Flow.Worlds", Arrays.asList(defaultWorldName)); - - // Place - c.addComment("Global.AntiGreef.Place.Level", "Level from which one to start block lava and water place", "This don't have effect in residence area"); - PlaceLevel = c.get("Global.AntiGreef.Place.Level", 63); - c.addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); - NoLavaPlace = c.get("Global.AntiGreef.Place.NoLavaPlace", false); - c.addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, players cant place water outside residence"); - NoWaterPlace = c.get("Global.AntiGreef.Place.NoWaterPlace", false); - NoPlaceWorlds = c.get("Global.AntiGreef.Place.Worlds", Arrays.asList(defaultWorldName)); - - // Sand fall - c.addComment("Global.AntiGreef.BlockFall.Use", "With this set to true, falling blocks will be deleted if they will land in different area"); - useBlockFall = c.get("Global.AntiGreef.BlockFall.Use", true); - c.addComment("Global.AntiGreef.BlockFall.Level", "Level from which one to start block block's fall", - "This don't have effect in residence area or outside"); - BlockFallLevel = c.get("Global.AntiGreef.BlockFall.Level", 62); - BlockFallWorlds = c.get("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName)); - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - // Res cleaning - CleanBlocks.clear(); - c.addComment("Global.AntiGreef.ResCleaning.Use", - "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", - "Effective way to prevent residence creating near greefing target and then remove it", - "ATTENTION! Bigger residence areas could want to create bigger loads on server when cleaning up areas. So dont use this if regular player have access to huge residences. 15 million blocks would be a max limit"); - UseClean = c.get("Global.AntiGreef.ResCleaning.Use", false); - c.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); - CleanLevel = c.get("Global.AntiGreef.ResCleaning.Level", 63); - c.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); - List pls = c.get("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(CMIMaterial.WATER.toString(), CMIMaterial.LAVA.toString())); - for (Object one : pls) { - CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); - if (mat != CMIMaterial.NONE && mat.getMaterial() != null && !mat.isAir()) - CleanBlocks.add(mat.getMaterial()); - } - - CleanWorlds = c.get("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName)); - for (int i = 0; i < CleanWorlds.size(); i++) { - CleanWorlds.set(i, CleanWorlds.get(i).toLowerCase()); - } - } - - c.addComment("Global.AntiGreef.Flags.Prevent", "By setting this to true flags from list will be protected from change while there is some one inside residence besides owner", - "Protects in example from people inviting some one and changing pvp flag to true to kill them"); - PvPFlagPrevent = c.get("Global.AntiGreef.Flags.Prevent", true); - FlagsList = c.get("Global.AntiGreef.Flags.list", Arrays.asList("pvp")); - - c.addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); - defaultGroup = c.get("Global.DefaultGroup", "default"); - - c.addComment("Global.UseLeaseSystem", "Enable / Disable the Lease System."); - useLeases = c.get("Global.UseLeaseSystem", false); - - c.addComment("Global.DateFormat", "Sets date format when shown in example lease or rent expire date", - "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); - DateFormat = c.get("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz"); - - c.addComment("Global.DateFormatShort", "Sets date format when shown in example lease or rent expire date", - "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); - DateFormatShort = c.get("Global.DateFormatShort", "MM.dd hh:mm"); - - c.addComment("Global.TimeZone", "Sets time zone for showing date, useful when server is in different country then main server player base", - "Full list of possible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); - TimeZone = c.get("Global.TimeZone", Calendar.getInstance().getTimeZone().getID()); - - c.addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); - ResMoneyBack = c.get("Global.ResMoneyBack", false); - - c.addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); - leaseCheckInterval = c.get("Global.LeaseCheckInterval", 10); - - c.addComment("Global.LeaseAutoRenew", "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); - leaseAutoRenew = c.get("Global.LeaseAutoRenew", true); - - c.addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); - c.get("Global.EnablePermissions", true); - - c.addComment("Global.EnableEconomy", "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); - enableEconomy = c.get("Global.EnableEconomy", true); - - c.addComment("Global.Type", "Defaults to None which will start by looking to default economy engine throw vault API and if it fails to any supported economy engine", - "Custom economy engines can be defined to access economy directly", "Supported variables: " + EconomyType.toStringLine()); - VaultEconomy = EconomyType.getByName(c.get("Global.Type", "None")); - if (VaultEconomy == null) - - { - plugin.consoleMessage("&cCould not determine economy from " + c.get("Global.Type", "Vault")); - plugin.consoleMessage("&cTrying to find suitable economy system"); - VaultEconomy = EconomyType.None; - } - - c.addComment("Global.ExtraEnterMessage", "When enabled extra message will appear in chat if residence is for rent or for sell to inform how he can rent/buy residence with basic information."); - ExtraEnterMessage = c.get("Global.ExtraEnterMessage", true); - - c.addComment("Global.Sell.Subzone", "If set to true, this will allow to sell subzones. Its recommended to keep it false tho"); - SellSubzone = c.get("Global.Sell.Subzone", false); - - c.addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); - enableRentSystem = c.get("Global.EnableRentSystem", true); + c.addComment("Global.Optimizations.GlobalChat.Enabled", + "Enables or disables chat modification by including players main residence name"); + GlobalChatEnabled = c.get("Global.Optimizations.GlobalChat.Enabled", false); + c.addComment("Global.Optimizations.GlobalChat.SelfModify", + "Modifys chat to add chat titles. If you're using a chat manager, you may add the tag {residence} to your chat format and disable this."); + GlobalChatSelfModify = c.get("Global.Optimizations.GlobalChat.SelfModify", true); + GlobalChatFormat = c.get("Global.Optimizations.GlobalChat.Format", "&c[&e%1&c]"); + + c.addComment("Global.Optimizations.BlockAnyTeleportation", + "When this set to true, any teleportation to residence where player dont have tp flag, action will be denyied", + "This can prevent from teleporting players to residence with 3rd party plugins like esentials /tpa"); + BlockAnyTeleportation = c.get("Global.Optimizations.BlockAnyTeleportation", true); + + c.addComment("Global.Optimizations.OverridePvp", "By setting this to true, regular pvp flag will be acting as overridepvp flag", + "Overridepvp flag tries to ignore any pvp protection in that residence by any other plugin"); + OverridePvp = c.get("Global.Optimizations.OverridePvp", false); + + // residence kick location + c.addComment("Global.Optimizations.KickLocation.Use", + "By setting this to true, when player kicks another player from residence, he will be teleported to this location instead of getting outside residence"); + Boolean UseKick = c.get("Global.Optimizations.KickLocation.Use", false); + String KickLocationWorld = c.get("Global.Optimizations.KickLocation.World", defaultWorldName); + Double KickLocationX = c.get("Global.Optimizations.KickLocation.X", 0.5); + Double KickLocationY = c.get("Global.Optimizations.KickLocation.Y", 63.0); + Double KickLocationZ = c.get("Global.Optimizations.KickLocation.Z", 0.5); + c.addComment("Global.Optimizations.KickLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); + Double KickPitch = c.get("Global.Optimizations.KickLocation.Pitch", 0.0); + c.addComment("Global.Optimizations.KickLocation.Yaw", "Head position to left and right. Range from -180 to 180"); + Double KickYaw = c.get("Global.Optimizations.KickLocation.Yaw", 0.0); + if (UseKick) { + World world = Bukkit.getWorld(KickLocationWorld); + if (world != null) { + KickLocation = new Location(world, KickLocationX, KickLocationY, KickLocationZ); + KickLocation.setPitch(KickPitch.floatValue()); + KickLocation.setYaw(KickYaw.floatValue()); + } + } + + c.addComment("Global.Optimizations.FlyLandLocation.World", "Used when players fly state is being turned to false because of fly flag and there is no solid land where to land for player"); + String FlyLocationWorld = c.get("Global.Optimizations.FlyLandLocation.World", defaultWorldName); + Double FlyLocationX = c.get("Global.Optimizations.FlyLandLocation.X", 0.5); + Double FlyLocationY = c.get("Global.Optimizations.FlyLandLocation.Y", 63.0); + Double FlyLocationZ = c.get("Global.Optimizations.FlyLandLocation.Z", 0.5); + c.addComment("Global.Optimizations.FlyLandLocation.Pitch", "Less than 0 - head up, more than 0 - head down. Range from -90 to 90"); + Double FlyPitch = c.get("Global.Optimizations.FlyLandLocation.Pitch", 0.0); + c.addComment("Global.Optimizations.FlyLandLocation.Yaw", "Head position to left and right. Range from -180 to 180"); + Double FlyYaw = c.get("Global.Optimizations.FlyLandLocation.Yaw", 0.0); + World world = Bukkit.getWorld(FlyLocationWorld); + if (world != null) { + FlyLandLocation = new Location(world, FlyLocationX, FlyLocationY, FlyLocationZ); + FlyLandLocation.setPitch(FlyPitch.floatValue()); + FlyLandLocation.setYaw(FlyYaw.floatValue()); + } + + c.addComment("Global.Optimizations.InfoCommand.ShortInformation", + "By setting this to true, when checking residence info with /res info, you will get only names in list, by hovering on them, you will get flag list"); + ShortInfoUse = c.get("Global.Optimizations.InfoCommand.ShortInformation", c.getC().getBoolean("Global.Optimizations.ShortInfo.Use", true)); + + c.addComment("Global.Optimizations.InfoCommand.ExcludeDefaultFlags", + "When set to true default residence flags set in flags.yml file will get excluded from info command output and will not be shown", "If flag gets different state then it will be shown"); + InfoExcludeDFlags = c.get("Global.Optimizations.InfoCommand.ExcludeDefaultFlags", false); + + // Vote range + c.addComment("Global.Optimizations.Vote.RangeFrom", "Range players can vote to, by default its from 0 to 10 points"); + VoteRangeFrom = c.get("Global.Optimizations.Vote.RangeFrom", 0); + VoteRangeTo = c.get("Global.Optimizations.Vote.RangeTo", 10); + + c.addComment("Global.Optimizations.Vote.OnlyLike", "If this true, players can only give like for shop instead of point voting"); + OnlyLike = c.get("Global.Optimizations.Vote.OnlyLike", false); + + c.addComment("Global.Optimizations.ConsoleLogs.ShowFlagChanges", "If this true, flag changes throw GUI will be recorded in console"); + ConsoleLogsShowFlagChanges = c.get("Global.Optimizations.ConsoleLogs.ShowFlagChanges", true); + + // Healing/Feed interval + c.addComment("Global.Optimizations.Intervals.Heal", "How often in seconds to heal/feed players in residence with appropriate flag", + "Bigger numbers can save some resources"); + HealInterval = c.get("Global.Optimizations.Intervals.Heal", 1); + FeedInterval = c.get("Global.Optimizations.Intervals.Feed", 5); + + // negative potion effect list + c.addComment("Global.Optimizations.NegativePotionEffects", + "Potions containing one of thos effects will be ignored if residence dont have pvp true flag set"); + NegativePotionEffects = c.get("Global.Optimizations.NegativePotionEffects", Arrays.asList("blindness", "confusion", "harm", "hunger", "poison", "slow", + "slow_digging", "weakness", "wither")); + + NegativeLingeringPotionEffects = c.get("Global.Optimizations.NegativeLingeringPotions", Arrays.asList("slowness", "instant_damage", "poison", + "slowness")); + + c.addComment("Global.Optimizations.WalkSpeed", + "Defines speed for particular wspeed1 and wspeed2 flags. It can be from 0 up to 5"); + WalkSpeed1 = c.get("Global.Optimizations.WalkSpeed.1", 0.5D); + WalkSpeed1 = WalkSpeed1 < 0 ? 0 : WalkSpeed1; + WalkSpeed1 = WalkSpeed1 > 5 ? 5 : WalkSpeed1; + WalkSpeed1 = WalkSpeed1 / 5.0; + WalkSpeed2 = c.get("Global.Optimizations.WalkSpeed.2", 2D); + WalkSpeed2 = WalkSpeed2 < 0 ? 0 : WalkSpeed2; + WalkSpeed2 = WalkSpeed2 > 5 ? 5 : WalkSpeed2; + WalkSpeed2 = WalkSpeed2 / 5.0; + + c.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", + "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); + minMoveUpdate = c.get("Global.MoveCheckInterval", 500); + + c.addComment("Global.Tp.TeleportDelay", "The interval, in seconds, for teleportation.", "Use 0 to disable"); + TeleportDelay = c.get("Global.Tp.TeleportDelay", 3); + c.addComment("Global.Tp.TeleportTitleMessage", "Show aditional message in title message area when player is teleporting to residence"); + TeleportTitleMessage = c.get("Global.Tp.TeleportTitleMessage", true); + + Set worlds = new HashSet(); + + for (int i = 0; i < 3 && i < Bukkit.getWorlds().size(); i++) { + worlds.add(Bukkit.getWorlds().get(i)); + } + + worlds.addAll(Bukkit.getWorlds()); + + RTeleport.clear(); + boolean commented = false; + if (c.getC().isConfigurationSection("Global.RandomTeleportation.Worlds")) { + ConfigurationSection sec = c.getC().getConfigurationSection("Global.RandomTeleportation.Worlds"); + if (sec != null) + for (String one : sec.getKeys(false)) { + String path = "Global.RandomTeleportation.Worlds." + one + "."; + + boolean enabled = c.get(path + "Enabled", true); + + if (!commented) + c.addComment("Global.RandomTeleportation.Worlds." + one, + "World name to use this feature. Add annother one with appropriate name to enable random teleportation"); + + if (!commented) + c.addComment(path + "MaxCoord", "Max coordinate to teleport, setting to 1000, player can be teleported between -1000 and 1000 coordinates"); + int MaxCoord = c.get(path + "MaxCoord", 1000); + + if (!commented) + c.addComment(path + "MinCoord", + "If maxcoord set to 1000 and mincoord to 500, then player can be teleported between -1000 to -500 and 500 to 1000 coordinates"); + int MinCoord = c.get(path + "MinCoord", c.getC().getInt(path + "MinCord", 500)); + int CenterX = c.get(path + "CenterX", 0); + int CenterZ = c.get(path + "CenterZ", 0); + + World w = getWorld(one); + + if (w == null) { + plugin.consoleMessage("&cCan't find world with (" + one + ") name"); + continue; + } + + commented = true; + worlds.remove(w); + + if (!enabled) + continue; + RTeleport.add(new RandomTeleport(w, MaxCoord, MinCoord, CenterX, CenterZ)); + } + } + + for (World one : worlds) { + String name = one.getName(); + name = name.replace(".", "_"); + + String path = "Global.RandomTeleportation.Worlds." + name + "."; + boolean enabled = c.get(path + "Enabled", true); + int MaxCoord = c.get(path + "MaxCoord", 1000); + int MinCoord = c.get(path + "MinCoord", c.getC().getInt(path + "MinCord", 500)); + int CenterX = c.get(path + "CenterX", 0); + int CenterZ = c.get(path + "CenterZ", 0); + + if (!enabled) + continue; + RTeleport.add(new RandomTeleport(one, MaxCoord, MinCoord, CenterX, CenterZ)); + } + + c.addComment("Global.RandomTeleportation.Cooldown", "How long force player to wait before using command again."); + rtCooldown = c.get("Global.RandomTeleportation.Cooldown", 5); + + c.addComment("Global.RandomTeleportation.MaxTries", "How many times to try find correct location for teleportation.", + "Keep it at low number, as player always can try again after delay"); + rtMaxTries = c.get("Global.RandomTeleportation.MaxTries", 20); + + c.addComment("Global.SaveInterval", "The interval, in minutes, between residence saves."); + autoSaveInt = c.get("Global.SaveInterval", 10); + c.addComment("Global.NewSaveMechanic", "New save mechanic can minimize save file couple times and speedup save/load time in general", "Bigger files have bigger impact"); + NewSaveMechanic = c.get("Global.NewSaveMechanic", true); + + c.addComment("Global.Backup.AutoCleanUp.Use", + "Do you want to automatically remove backup files from main backup folder if they are older than defined day amount"); + BackupAutoCleanUpUse = c.get("Global.Backup.AutoCleanUp.Use", false); + BackupAutoCleanUpDays = c.get("Global.Backup.AutoCleanUp.Days", 30); + + c.addComment("Global.Backup.UseZip", "Do you want to backup files by creating zip files in main residence folder in backup folder", + "This wont have effect on regular backuped files made in save folder"); + UseZipBackup = c.get("Global.Backup.UseZip", true); + + BackupWorldFiles = c.get("Global.Backup.IncludeFiles.Worlds", true); + BackupforsaleFile = c.get("Global.Backup.IncludeFiles.forsale", true); + BackupleasesFile = c.get("Global.Backup.IncludeFiles.leases", true); + BackuppermlistsFile = c.get("Global.Backup.IncludeFiles.permlists", true); + BackuprentFile = c.get("Global.Backup.IncludeFiles.rent", true); + BackupflagsFile = c.get("Global.Backup.IncludeFiles.flags", true); + BackupgroupsFile = c.get("Global.Backup.IncludeFiles.groups", true); + BackupconfigFile = c.get("Global.Backup.IncludeFiles.config", true); + + // Auto remove old residences + c.addComment("Global.AutoCleanUp.Use", "HIGHLY EXPERIMENTAL residence cleaning on server startup if player is offline for x days.", + "Players can bypass this with residence.cleanbypass permission node"); + AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); + c.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); + AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); + c.addComment("Global.AutoCleanUp.Regenerate", "Do you want to regenerate old residence area", "This requires world edit to be present"); + AutoCleanUpRegenerate = c.get("Global.AutoCleanUp.Regenerate", false); + c.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); + AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); + + for (int i = 0; i < AutoCleanUpWorlds.size(); i++) { + AutoCleanUpWorlds.set(i, AutoCleanUpWorlds.get(i).toLowerCase()); + } + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + LwcMatList.clear(); + c.addComment("Global.Lwc.OnDelete", "Removes lwc protection from all defined objects when removing residence"); + LwcOnDelete = c.get("Global.Lwc.OnDelete", true); + c.addComment("Global.Lwc.OnBuy", "Removes lwc protection from all defined objects when buying residence"); + LwcOnBuy = c.get("Global.Lwc.OnBuy", true); + c.addComment("Global.Lwc.OnUnrent", "Removes lwc protection from all defined objects when unrenting residence"); + LwcOnUnrent = c.get("Global.Lwc.OnUnrent", true); + + c.addComment("Global.Lwc.MaterialList", "List of blocks you want to remove protection from"); + for (String oneName : c.get("Global.Lwc.MaterialList", Arrays.asList("CHEST", "TRAPPED_CHEST", "furnace", "dispenser"))) { + Material mat = Material.getMaterial(oneName.toUpperCase()); + if (mat != null) + LwcMatList.add(mat); + else + Bukkit.getConsoleSender().sendMessage("Incorrect Lwc material name for " + oneName); + } + } + + // TNT explosions below 63 + c.addComment("Global.AntiGreef.TNT.ExplodeBelow", + "When set to true will allow tnt and minecart with tnt to explode below 62 (default) level outside of residence", + "This will allow mining with tnt and more vanilla play"); + TNTExplodeBelow = c.get("Global.AntiGreef.TNT.ExplodeBelow", false); + TNTExplodeBelowLevel = c.get("Global.AntiGreef.TNT.level", 62); + // Creeper explosions below 63 + c.addComment("Global.AntiGreef.Creeper.ExplodeBelow", "When set to true will allow Creeper explode below 62 (default) level outside of residence", + "This will give more realistic game play", + "For this to work properly you will need to disable creeper explosion in the world in general. This can be done in flags file under global world section"); + CreeperExplodeBelow = c.get("Global.AntiGreef.Creeper.ExplodeBelow", false); + CreeperExplodeBelowLevel = c.get("Global.AntiGreef.Creeper.level", 62); + // Flow + c.addComment("Global.AntiGreef.Flow.Level", "Level from which one to start lava and water flow blocking", "This dont have effect in residence area"); + FlowLevel = c.get("Global.AntiGreef.Flow.Level", 63); + c.addComment("Global.AntiGreef.Flow.NoLavaFlow", "With this set to true, lava flow outside residence is blocked"); + NoLava = c.get("Global.AntiGreef.Flow.NoLavaFlow", false); + c.addComment("Global.AntiGreef.Flow.NoWaterFlow", "With this set to true, water flow outside residence is blocked"); + NoWater = c.get("Global.AntiGreef.Flow.NoWaterFlow", false); + NoFlowWorlds = c.get("Global.AntiGreef.Flow.Worlds", Arrays.asList(defaultWorldName)); + + // Place + c.addComment("Global.AntiGreef.Place.Level", "Level from which one to start block lava and water place", "This don't have effect in residence area"); + PlaceLevel = c.get("Global.AntiGreef.Place.Level", 63); + c.addComment("Global.AntiGreef.Place.NoLavaPlace", "With this set to true, playrs cant place lava outside residence"); + NoLavaPlace = c.get("Global.AntiGreef.Place.NoLavaPlace", false); + c.addComment("Global.AntiGreef.Place.NoWaterPlace", "With this set to true, players cant place water outside residence"); + NoWaterPlace = c.get("Global.AntiGreef.Place.NoWaterPlace", false); + NoPlaceWorlds = c.get("Global.AntiGreef.Place.Worlds", Arrays.asList(defaultWorldName)); + + // Sand fall + c.addComment("Global.AntiGreef.BlockFall.Use", "With this set to true, falling blocks will be deleted if they will land in different area"); + useBlockFall = c.get("Global.AntiGreef.BlockFall.Use", true); + c.addComment("Global.AntiGreef.BlockFall.Level", "Level from which one to start block block's fall", + "This don't have effect in residence area or outside"); + BlockFallLevel = c.get("Global.AntiGreef.BlockFall.Level", 62); + BlockFallWorlds = c.get("Global.AntiGreef.BlockFall.Worlds", Arrays.asList(defaultWorldName)); + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + // Res cleaning + CleanBlocks.clear(); + c.addComment("Global.AntiGreef.ResCleaning.Use", + "With this set to true, after player removes its residence, all blocks listed below, will be replaced with air blocks", + "Effective way to prevent residence creating near greefing target and then remove it", + "ATTENTION! Bigger residence areas could want to create bigger loads on server when cleaning up areas. So dont use this if regular player have access to huge residences. 15 million blocks would be a max limit"); + UseClean = c.get("Global.AntiGreef.ResCleaning.Use", false); + c.addComment("Global.AntiGreef.ResCleaning.Level", "Level from whichone you want to replace blocks"); + CleanLevel = c.get("Global.AntiGreef.ResCleaning.Level", 63); + c.addComment("Global.AntiGreef.ResCleaning.Blocks", "Block list to be replaced", "By default only water and lava will be replaced"); + List pls = c.get("Global.AntiGreef.ResCleaning.Blocks", Arrays.asList(CMIMaterial.WATER.toString(), CMIMaterial.LAVA.toString())); + for (Object one : pls) { + CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); + if (mat != CMIMaterial.NONE && mat.getMaterial() != null && !mat.isAir()) + CleanBlocks.add(mat.getMaterial()); + } + + CleanWorlds = c.get("Global.AntiGreef.ResCleaning.Worlds", Arrays.asList(defaultWorldName)); + for (int i = 0; i < CleanWorlds.size(); i++) { + CleanWorlds.set(i, CleanWorlds.get(i).toLowerCase()); + } + } + + c.addComment("Global.AntiGreef.Flags.Prevent", "By setting this to true flags from list will be protected from change while there is some one inside residence besides owner", + "Protects in example from people inviting some one and changing pvp flag to true to kill them"); + PvPFlagPrevent = c.get("Global.AntiGreef.Flags.Prevent", true); + FlagsList = c.get("Global.AntiGreef.Flags.list", Arrays.asList("pvp")); + + c.addComment("Global.DefaultGroup", "The default group to use if Permissions fails to attach or your not using Permissions."); + defaultGroup = c.get("Global.DefaultGroup", "default"); + + c.addComment("Global.UseLeaseSystem", "Enable / Disable the Lease System."); + useLeases = c.get("Global.UseLeaseSystem", false); + + c.addComment("Global.DateFormat", "Sets date format when shown in example lease or rent expire date", + "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); + DateFormat = c.get("Global.DateFormat", "E yyyy.MM.dd 'at' hh:mm:ss a zzz"); + + c.addComment("Global.DateFormatShort", "Sets date format when shown in example lease or rent expire date", + "How to use it properly, more information can be found at http://www.tutorialspoint.com/java/java_date_time.htm"); + DateFormatShort = c.get("Global.DateFormatShort", "MM.dd hh:mm"); + + c.addComment("Global.TimeZone", "Sets time zone for showing date, useful when server is in different country then main server player base", + "Full list of possible time zones can be found at http://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/"); + TimeZone = c.get("Global.TimeZone", Calendar.getInstance().getTimeZone().getID()); + + c.addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); + ResMoneyBack = c.get("Global.ResMoneyBack", false); + + c.addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); + leaseCheckInterval = c.get("Global.LeaseCheckInterval", 10); + + c.addComment("Global.LeaseAutoRenew", "Allows leases to automatically renew so long as the player has the money, if economy is disabled, this setting does nothing."); + leaseAutoRenew = c.get("Global.LeaseAutoRenew", true); + + c.addComment("Global.EnablePermissions", "Whether or not to use the Permissions system in conjunction with this config."); + c.get("Global.EnablePermissions", true); + + c.addComment("Global.EnableEconomy", "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); + enableEconomy = c.get("Global.EnableEconomy", true); + + c.addComment("Global.Type", "Defaults to None which will start by looking to default economy engine throw vault API and if it fails to any supported economy engine", + "Custom economy engines can be defined to access economy directly", "Supported variables: " + EconomyType.toStringLine()); + VaultEconomy = EconomyType.getByName(c.get("Global.Type", "None")); + if (VaultEconomy == null) + + { + plugin.consoleMessage("&cCould not determine economy from " + c.get("Global.Type", "Vault")); + plugin.consoleMessage("&cTrying to find suitable economy system"); + VaultEconomy = EconomyType.None; + } + + c.addComment("Global.ExtraEnterMessage", "When enabled extra message will appear in chat if residence is for rent or for sell to inform how he can rent/buy residence with basic information."); + ExtraEnterMessage = c.get("Global.ExtraEnterMessage", true); + + c.addComment("Global.Sell.Subzone", "If set to true, this will allow to sell subzones. Its recommended to keep it false tho"); + SellSubzone = c.get("Global.Sell.Subzone", false); + + c.addComment("Global.EnableRentSystem", "Enables or disables the Rent System"); + enableRentSystem = c.get("Global.EnableRentSystem", true); // TownEnabled = c.get("Global.Town.Enabled", true); // c.addComment("Global.Town.MinRange", "Range between residences","Protects from building residence near another residence if owner not belonging to same town"); // TownMinRange = c.get("Global.Town.MinRange", 16); - c.addComment("Global.Rent.PreventRemoval", "Prevents residence/subzone removal if its subzone is still rented by some one"); - RentPreventRemoval = c.get("Global.Rent.PreventRemoval", true); - - c.addComment("Global.Rent.DeductFromBank", "When set to true residence rent can be renewed from residence bank"); - DeductFromBank = c.get("Global.Rent.DeductFromBank", false); - c.addComment("Global.Rent.DeductFromBankThenPlayer", - "When set to true residence rent can be renewed from residence bank and if there is not enough money then we will deduct rest of it from player", - "This will override behavior of DeductFromBank"); - DeductFromBankThenPlayer = c.get("Global.Rent.DeductFromBankThenPlayer", false); - - c.addComment("Global.Rent.Inform.OnEnding", "Informs players on rent time ending"); - RentInformOnEnding = c.get("Global.Rent.Inform.OnEnding", true); - c.addComment("Global.Rent.Inform.Before", "Time range in minutes when to start informing about ending rent"); - RentInformBefore = c.get("Global.Rent.Inform.Before", 1440); - c.addComment("Global.Rent.Inform.Delay", "Time range in seconds for how long to wait after player logs in to inform about ending rents"); - RentInformDelay = c.get("Global.Rent.Inform.Delay", 60); - - c.addComment("Global.Rent.DefaultValues.AllowRenewing", "Default values used when putting residence for rent"); - RentAllowRenewing = c.get("Global.Rent.DefaultValues.AllowRenewing", true); - RentStayInMarket = c.get("Global.Rent.DefaultValues.StayInMarket", true); - RentAllowAutoPay = c.get("Global.Rent.DefaultValues.AllowAutoPay", true); - c.addComment("Global.Rent.DefaultValues.PlayerAutoPay", "If set to true, when player is not defining auto pay on renting, then this value will be used"); - RentPlayerAutoPay = c.get("Global.Rent.DefaultValues.PlayerAutoPay", true); - - c.addComment("Global.Rent.Schematics.RestoreAfterRentEnds", "EXPERIMENTAL!!! If set to true, residence will be restored to state it was when backup flag was set to true", - "For securoty reassons only players with aditional residence.backup permission node can set backup flag"); - RestoreAfterRentEnds = c.get("Global.Rent.Schematics.RestoreAfterRentEnds", true); - c.addComment("Global.Rent.Schematics.SaveOnFlagChange", "When set to true, area state will be saved only when setting backup to true value", - "When set to false, area state will be saved before each renting to have always up to date area look", - "Keep in mind that when its set to false, there is slightly bigger server load as it has to save area each time when some one rents it"); - SchematicsSaveOnFlagChange = c.get("Global.Rent.Schematics.SaveOnFlagChange", true); - - c.addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); - rentCheckInterval = c.get("Global.RentCheckInterval", 10); - - ELMessageType old = c.getC().isBoolean("Global.ActionBar.General") && c.getC().getBoolean("Global.ActionBar.General") ? ELMessageType.ActionBar - : ELMessageType.ChatBox; - old = c.getC().isBoolean("Global.TitleBar.EnterLeave") && c.getC().getBoolean("Global.TitleBar.EnterLeave") ? ELMessageType.TitleBar : old; - - c.addComment("Global.Messages.GeneralMessages", "Defines where you want to send residence enter/leave/deny move and similar messages. Possible options: " + ELMessageType.getAllValuesAsString(), - "TitleBar can have %subtitle% variable to define second line"); - EnterLeaveMessageType = ELMessageType.getByName(c.get("Global.Messages.GeneralMessages", old.toString())); - if (EnterLeaveMessageType == null || Version.isCurrentEqualOrLower(Version.v1_7_R4)) - EnterLeaveMessageType = ELMessageType.ChatBox; - - ActionBarOnSelection = c.get("Global.ActionBar.ShowOnSelection", true); - - c.addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); - chatEnable = c.get("Global.ResidenceChatEnable", true); - - c.addComment("Global.ResidenceChatColor", "Color of residence chat."); - try { - chatColor = CMIChatColor.getColor((c.get("Global.ResidenceChatColor", "DARK_PURPLE"))); - } catch (Exception ex) { - chatColor = CMIChatColor.DARK_PURPLE; - } - - c.addComment("Global.ResidenceChatListening", "When enabled players with access to chat flag will be able to listen to residence chat without joining it"); - chatListening = c.get("Global.ResidenceChatListening", false); - - c.addComment("Global.ResidenceChatPrefixLength", "Max lenght of residence chat prefix including color codes"); - chatPrefixLength = c.get("Global.ResidenceChatPrefixLength", 16); - - c.addComment("Global.AdminOnlyCommands", "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); - adminsOnly = c.get("Global.AdminOnlyCommands", false); - - c.addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); - adminOps = c.get("Global.AdminOPs", true); - - c.addComment("Global.AdminFullAccess", - "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); - AdminFullAccess = c.get("Global.AdminFullAccess", false); - - c.addComment("Global.MultiWorldPlugin", "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", - "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); - multiworldPlugin = c.get("Global.MultiWorldPlugin", "Multiverse-Core"); - - c.addComment("Global.ResidenceFlagsInherit", "Setting this to true causes subzones to inherit flags from their parent zones."); - flagsInherit = c.get("Global.ResidenceFlagsInherit", true); - - c.addComment("Global.PreventRentModify", "Setting this to false will allow rented residences to be modified by the renting player."); - preventBuildInRent = c.get("Global.PreventRentModify", true); - - c.addComment("Global.PreventSubZoneRemoval", "Setting this to true will prevent subzone deletion when subzone owner is not same as parent zone owner."); - PreventSubZoneRemoval = c.get("Global.PreventSubZoneRemoval", true); - - c.addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); - stopOnSaveError = c.get("Global.StopOnSaveFault", true); - - c.addComment("This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); - namefix = c.get("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]"); - - c.addComment("Global.ShowIntervalMessages", "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); - showIntervalMessages = c.get("Global.ShowIntervalMessages", false); - - c.addComment("Global.ShowNoobMessage", "Setting this to true sends a tutorial message to the new player when he places chest on ground."); - ShowNoobMessage = c.get("Global.ShowNoobMessage", true); - - c.addComment("Global.NewPlayer", "Setting this to true creates residence around players placed chest if he don't have any.", "Only once every server restart if he still don't have any residence"); - NewPlayerUse = c.get("Global.NewPlayer.Use", false); - c.addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", "By setting to false, money will be taken from player, if he has them"); - NewPlayerFree = c.get("Global.NewPlayer.Free", true); - c.addComment("Global.NewPlayer.Range", "Range from placed chest o both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide"); - NewPlayerRangeX = c.get("Global.NewPlayer.Range.X", 5); - NewPlayerRangeY = c.get("Global.NewPlayer.Range.Y", 5); - NewPlayerRangeZ = c.get("Global.NewPlayer.Range.Z", 5); - - c.addComment("Global.CustomContainers", "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); - List pls = c.get("Global.CustomContainers", new ArrayList()); - for (Object one : pls) { - CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); - if (mat != CMIMaterial.NONE) - customContainers.add(mat); - } - - pls = c.get("Global.CustomBothClick", new ArrayList()); - for (Object one : pls) { - CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); - if (mat != CMIMaterial.NONE) - customBothClick.add(mat); - } - - pls = c.get("Global.CustomRightClick", new ArrayList()); - for (Object one : pls) { - CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); - if (mat != CMIMaterial.NONE) - customRightClick.add(mat); - } - - c.addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundaries"); - useVisualizer = c.get("Global.Visualizer.Use", true); - c.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", "Keep it no more as 30, as player cant see more than 16 blocks"); - VisualizerRange = c.get("Global.Visualizer.Range", 16); - c.addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); - VisualizerShowFor = c.get("Global.Visualizer.ShowFor", 5000); - c.addComment("Global.Visualizer.updateInterval", "How often in ticks to update particles for player"); - VisualizerUpdateInterval = c.get("Global.Visualizer.updateInterval", 20); - c.addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); - VisualizerRowSpacing = c.get("Global.Visualizer.RowSpacing", 2); - if (VisualizerRowSpacing < 1) - VisualizerRowSpacing = 1; - c.addComment("Global.Visualizer.CollumnSpacing", "Spacing in blocks between particle effects for collums"); - VisualizerCollumnSpacing = c.get("Global.Visualizer.CollumnSpacing", 2); - if (VisualizerCollumnSpacing < 1) - VisualizerCollumnSpacing = 1; - - c.addComment("Global.Visualizer.SkipBy", "Defines by how many particles we need to skip", "This will create moving particle effect and will improve overall look of selection", - "By increasing this number, you can decrease update interval"); - VisualizerSkipBy = c.get("Global.Visualizer.SkipBy", 5); - if (VisualizerSkipBy < 1) - VisualizerSkipBy = 1; - - c.addComment("Global.Visualizer.FrameCap", "Maximum amount of frame particles to show for one player"); - VisualizerFrameCap = c.get("Global.Visualizer.FrameCap", 500); - if (VisualizerFrameCap < 1) - VisualizerFrameCap = 1; - - c.addComment("Global.Visualizer.SidesCap", "Maximum amount of sides particles to show for one player"); - VisualizerSidesCap = c.get("Global.Visualizer.SidesCap", 2000); - if (VisualizerSidesCap < 1) - VisualizerSidesCap = 1; - - String effectsList = ""; - for (Effect one : Effect.values()) { - if (one == null) - continue; - if (one.name() == null) - continue; - effectsList += one.name().toLowerCase() + ", "; - } - - c.addComment("Global.Visualizer.Selected", "Particle effect names. possible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", - " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", - " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance", "", - "If using spigot based server different particles can be used:", effectsList); - - // Frame - String efname = c.get("Global.Visualizer.Selected.Frame", "happyVillager"); - SelectedFrame = CMIParticle.getCMIParticle(efname); - if (SelectedFrame == null) { - SelectedFrame = CMIParticle.HAPPY_VILLAGER; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); - } - - // Sides - efname = c.get("Global.Visualizer.Selected.Sides", "reddust"); - SelectedSides = CMIParticle.getCMIParticle(efname); - if (SelectedSides == null) { - SelectedSides = CMIParticle.COLOURED_DUST; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); - } - - efname = c.get("Global.Visualizer.Overlap.Frame", "FLAME"); - OverlapFrame = CMIParticle.getCMIParticle(efname); - if (OverlapFrame == null) { - OverlapFrame = CMIParticle.FLAME; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Overlap Frame with this name, it was set to default"); - } - - efname = c.get("Global.Visualizer.Overlap.Sides", "FLAME"); - OverlapSides = CMIParticle.getCMIParticle(efname); - if (OverlapSides == null) { - OverlapSides = CMIParticle.FLAME; - Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); - } - - c.addComment("Global.Visualizer.EnterAnimation", "Shows particle effect when player enters residence. Only applies to main residence area"); - EnterAnimation = c.get("Global.Visualizer.EnterAnimation", true); - - c.addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); - BounceAnimation = c.get("Global.BounceAnimation", true); - - c.addComment("Global.GUI.Enabled", "Enable or disable flag GUI"); - useFlagGUI = c.get("Global.GUI.Enabled", true); - - c.addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); - - CMIMaterial Mat = CMIMaterial.get(c.get("Global.GUI.setTrue", "GREEN_WOOL")); - if (Mat == null) - Mat = CMIMaterial.GREEN_WOOL; - guiBottonStates.put(FlagState.TRUE, Mat.newItemStack()); - - c.addComment("Global.GUI.setFalse", "Item id and data to use when flag is set to false"); - Mat = CMIMaterial.get(c.get("Global.GUI.setFalse", "RED_WOOL")); - if (Mat == null) - Mat = CMIMaterial.RED_WOOL; - guiBottonStates.put(FlagState.FALSE, Mat.newItemStack()); - - c.addComment("Global.GUI.setRemove", "Item id and data to use when flag is set to remove"); - Mat = CMIMaterial.get(c.get("Global.GUI.setRemove", "LIGHT_GRAY_WOOL")); - if (Mat == null) - Mat = CMIMaterial.LIGHT_GRAY_WOOL; - guiBottonStates.put(FlagState.NEITHER, Mat.newItemStack()); - - c.addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", - "This is quite heavy on server side, so enable only if you really need this feature"); - AutoMobRemoval = c.get("Global.AutoMobRemoval.Use", false); - c.addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); - AutoMobRemovalInterval = c.get("Global.AutoMobRemoval.Interval", 3); - - enforceAreaInsideArea = c.get("Global.EnforceAreaInsideArea", false); - spoutEnable = c.get("Global.EnableSpout", false); - enableLeaseMoneyAccount = c.get("Global.EnableLeaseMoneyAccount", true); - - c.addComment("Global.Couldroncompatibility", - "By setting this to true, partial compatibility for kCouldron servers will be enabled. Action bar messages and selection visualizer will be disabled automatically as off incorrect compatibility"); - Couldroncompatibility = c.get("Global.Couldroncompatibility", false); - if (Couldroncompatibility) { - useVisualizer = false; - EnterLeaveMessageType = ELMessageType.ChatBox; - ActionBarOnSelection = false; - } - - c.addComment("DynMap.Use", "Enables or disable DynMap Support"); - DynMapUse = c.get("DynMap.Use", false); - c.addComment("DynMap.HideByDefault", "When set to true we will hide residence areas by default on dynmap window", "Residences can still be enabled throw provided DynMap option on left top side"); - DynMapHideByDefault = c.get("DynMap.HideByDefault", false); - c.addComment("DynMap.ShowFlags", "Shows or hides residence flags"); - DynMapShowFlags = c.get("DynMap.ShowFlags", true); - c.addComment("DynMap.ExcludeDefaultFlags", "When enabled default flags will not be included in residence overview"); - DynMapExcludeDefaultFlags = c.get("DynMap.ExcludeDefaultFlags", true); - c.addComment("DynMap.HideHidden", "If set true, residence with hidden flag set to true will be hidden from dynmap"); - DynMapHideHidden = c.get("DynMap.HideHidden", true); - - c.addComment("DynMap.Layer.3dRegions", "Enables 3D zones"); - DynMapLayer3dRegions = c.get("DynMap.Layer.3dRegions", true); - c.addComment("DynMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); - DynMapLayerSubZoneDepth = c.get("DynMap.Layer.SubZoneDepth", 2); - - c.addComment("DynMap.Border.Color", "Color of border. Pick color from this page http://www.w3schools.com/colors/colors_picker.asp"); - DynMapBorderColor = c.get("DynMap.Border.Color", "#FF0000"); - c.addComment("DynMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); - DynMapBorderOpacity = c.get("DynMap.Border.Opacity", 0.3); - c.addComment("DynMap.Border.Weight", "Border thickness"); - DynMapBorderWeight = c.get("DynMap.Border.Weight", 3); - DynMapFillOpacity = c.get("DynMap.Fill.Opacity", 0.3); - DynMapFillColor = c.get("DynMap.Fill.Color", "#FFFF00"); - DynMapFillForRent = c.get("DynMap.Fill.ForRent", "#33cc33"); - DynMapFillRented = c.get("DynMap.Fill.Rented", "#99ff33"); - DynMapFillForSale = c.get("DynMap.Fill.ForSale", "#0066ff"); - - c.addComment("DynMap.VisibleRegions", "Shows only regions on this list"); - DynMapVisibleRegions = c.get("DynMap.VisibleRegions", new ArrayList()); - c.addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden in game"); - DynMapHiddenRegions = c.get("DynMap.HiddenRegions", new ArrayList()); - - c.addComment("Pl3xMap.Use", "Enables or disable Pl3xMap Support"); - Pl3xMapUse = c.get("Pl3xMap.Use", false); - c.addComment("Pl3xMap.HideByDefault", "When set to true we will hide residence areas by default on Pl3xMap window", - "Residences can still be enabled throw provided Pl3xMap option on left top side"); - Pl3xMapHideByDefault = c.get("Pl3xMap.HideByDefault", false); - c.addComment("Pl3xMap.ShowFlags", "Shows or hides residence flags"); - Pl3xMapShowFlags = c.get("Pl3xMap.ShowFlags", true); - c.addComment("Pl3xMap.ExcludeDefaultFlags", "When enabled default flags will not be included in residence overview"); - Pl3xMapExcludeDefaultFlags = c.get("Pl3xMap.ExcludeDefaultFlags", true); - c.addComment("Pl3xMap.HideHidden", "If set true, residence with hidden flag set to true will be hidden from Pl3xMap"); - Pl3xMapHideHidden = c.get("Pl3xMap.HideHidden", true); + c.addComment("Global.Rent.PreventRemoval", "Prevents residence/subzone removal if its subzone is still rented by some one"); + RentPreventRemoval = c.get("Global.Rent.PreventRemoval", true); + + c.addComment("Global.Rent.DeductFromBank", "When set to true residence rent can be renewed from residence bank"); + DeductFromBank = c.get("Global.Rent.DeductFromBank", false); + c.addComment("Global.Rent.DeductFromBankThenPlayer", + "When set to true residence rent can be renewed from residence bank and if there is not enough money then we will deduct rest of it from player", + "This will override behavior of DeductFromBank"); + DeductFromBankThenPlayer = c.get("Global.Rent.DeductFromBankThenPlayer", false); + + c.addComment("Global.Rent.Inform.OnEnding", "Informs players on rent time ending"); + RentInformOnEnding = c.get("Global.Rent.Inform.OnEnding", true); + c.addComment("Global.Rent.Inform.Before", "Time range in minutes when to start informing about ending rent"); + RentInformBefore = c.get("Global.Rent.Inform.Before", 1440); + c.addComment("Global.Rent.Inform.Delay", "Time range in seconds for how long to wait after player logs in to inform about ending rents"); + RentInformDelay = c.get("Global.Rent.Inform.Delay", 60); + + c.addComment("Global.Rent.DefaultValues.AllowRenewing", "Default values used when putting residence for rent"); + RentAllowRenewing = c.get("Global.Rent.DefaultValues.AllowRenewing", true); + RentStayInMarket = c.get("Global.Rent.DefaultValues.StayInMarket", true); + RentAllowAutoPay = c.get("Global.Rent.DefaultValues.AllowAutoPay", true); + c.addComment("Global.Rent.DefaultValues.PlayerAutoPay", "If set to true, when player is not defining auto pay on renting, then this value will be used"); + RentPlayerAutoPay = c.get("Global.Rent.DefaultValues.PlayerAutoPay", true); + + c.addComment("Global.Rent.Schematics.RestoreAfterRentEnds", "EXPERIMENTAL!!! If set to true, residence will be restored to state it was when backup flag was set to true", + "For securoty reassons only players with aditional residence.backup permission node can set backup flag"); + RestoreAfterRentEnds = c.get("Global.Rent.Schematics.RestoreAfterRentEnds", true); + c.addComment("Global.Rent.Schematics.SaveOnFlagChange", "When set to true, area state will be saved only when setting backup to true value", + "When set to false, area state will be saved before each renting to have always up to date area look", + "Keep in mind that when its set to false, there is slightly bigger server load as it has to save area each time when some one rents it"); + SchematicsSaveOnFlagChange = c.get("Global.Rent.Schematics.SaveOnFlagChange", true); + + c.addComment("Global.Bank.Capacity", "Defines max amount residence bank can hold", "Setting to 0 will disable limitations"); + BankCapacity = c.get("Global.Bank.Capacity", 0D); + + c.addComment("Global.RentCheckInterval", "The interval, in minutes, between residence rent expiration checks (if the rent system is enabled)."); + rentCheckInterval = c.get("Global.RentCheckInterval", 10); + + ELMessageType old = c.getC().isBoolean("Global.ActionBar.General") && c.getC().getBoolean("Global.ActionBar.General") ? ELMessageType.ActionBar + : ELMessageType.ChatBox; + old = c.getC().isBoolean("Global.TitleBar.EnterLeave") && c.getC().getBoolean("Global.TitleBar.EnterLeave") ? ELMessageType.TitleBar : old; + + c.addComment("Global.Messages.GeneralMessages", "Defines where you want to send residence enter/leave/deny move and similar messages. Possible options: " + ELMessageType.getAllValuesAsString(), + "TitleBar can have %subtitle% variable to define second line"); + EnterLeaveMessageType = ELMessageType.getByName(c.get("Global.Messages.GeneralMessages", old.toString())); + if (EnterLeaveMessageType == null || Version.isCurrentEqualOrLower(Version.v1_7_R4)) + EnterLeaveMessageType = ELMessageType.ChatBox; + + ActionBarOnSelection = c.get("Global.ActionBar.ShowOnSelection", true); + + c.addComment("Global.ResidenceChatEnable", "Enable or disable residence chat channels."); + chatEnable = c.get("Global.ResidenceChatEnable", true); + + c.addComment("Global.ResidenceChatColor", "Color of residence chat."); + try { + chatColor = CMIChatColor.getColor((c.get("Global.ResidenceChatColor", "DARK_PURPLE"))); + } catch (Exception ex) { + chatColor = CMIChatColor.DARK_PURPLE; + } + + c.addComment("Global.ResidenceChatListening", "When enabled players with access to chat flag will be able to listen to residence chat without joining it"); + chatListening = c.get("Global.ResidenceChatListening", false); + + c.addComment("Global.ResidenceChatPrefixLength", "Max lenght of residence chat prefix including color codes"); + chatPrefixLength = c.get("Global.ResidenceChatPrefixLength", 16); + + c.addComment("Global.AdminOnlyCommands", "Whether or not to ignore the usual Permission flags and only allow OPs and groups with 'residence.admin' to change residences."); + adminsOnly = c.get("Global.AdminOnlyCommands", false); + + c.addComment("Global.AdminOPs", "Setting this to true makes server OPs admins."); + adminOps = c.get("Global.AdminOPs", true); + + c.addComment("Global.AdminFullAccess", + "Setting this to true server administration wont need to use /resadmin command to access admin command if they are op or have residence.admin permission node."); + AdminFullAccess = c.get("Global.AdminFullAccess", false); + + c.addComment("Global.MultiWorldPlugin", "This is the name of the plugin you use for multiworld, if you dont have a multiworld plugin you can safely ignore this.", + "The only thing this does is check to make sure the multiworld plugin is enabled BEFORE Residence, to ensure properly loading residences for other worlds."); + multiworldPlugin = c.get("Global.MultiWorldPlugin", "Multiverse-Core"); + + c.addComment("Global.ResidenceFlagsInherit", "Setting this to true causes subzones to inherit flags from their parent zones."); + flagsInherit = c.get("Global.ResidenceFlagsInherit", true); + + c.addComment("Global.PreventRentModify", "Setting this to false will allow rented residences to be modified by the renting player."); + preventBuildInRent = c.get("Global.PreventRentModify", true); + + c.addComment("Global.PreventSubZoneRemoval", "Setting this to true will prevent subzone deletion when subzone owner is not same as parent zone owner."); + PreventSubZoneRemoval = c.get("Global.PreventSubZoneRemoval", true); + + c.addComment("Global.StopOnSaveFault", "Setting this to false will cause residence to continue to load even if a error is detected in the save file."); + stopOnSaveError = c.get("Global.StopOnSaveFault", true); + + c.addComment("This is the residence name filter, that filters out invalid characters. Google 'Java RegEx' or 'Java Regular Expressions' for more info on how they work."); + namefix = c.get("Global.ResidenceNameRegex", "[^a-zA-Z0-9\\-\\_]"); + + c.addComment("Global.ShowIntervalMessages", "Setting this to true sends a message to the console every time Residence does a rent expire check or a lease expire check."); + showIntervalMessages = c.get("Global.ShowIntervalMessages", false); + + c.addComment("Global.ShowNoobMessage", "Setting this to true sends a tutorial message to the new player when he places chest on ground."); + ShowNoobMessage = c.get("Global.ShowNoobMessage", true); + + c.addComment("Global.NewPlayer", "Setting this to true creates residence around players placed chest if he don't have any.", "Only once every server restart if he still don't have any residence"); + NewPlayerUse = c.get("Global.NewPlayer.Use", false); + c.addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", "By setting to false, money will be taken from player, if he has them"); + NewPlayerFree = c.get("Global.NewPlayer.Free", true); + c.addComment("Global.NewPlayer.Range", "Range from placed chest o both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide"); + NewPlayerRangeX = c.get("Global.NewPlayer.Range.X", 5); + NewPlayerRangeY = c.get("Global.NewPlayer.Range.Y", 5); + NewPlayerRangeZ = c.get("Global.NewPlayer.Range.Z", 5); + + c.addComment("Global.CustomContainers", "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); + List pls = c.get("Global.CustomContainers", new ArrayList()); + for (Object one : pls) { + CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); + if (mat != CMIMaterial.NONE) + customContainers.add(mat); + } + + pls = c.get("Global.CustomBothClick", new ArrayList()); + for (Object one : pls) { + CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); + if (mat != CMIMaterial.NONE) + customBothClick.add(mat); + } + + pls = c.get("Global.CustomRightClick", new ArrayList()); + for (Object one : pls) { + CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); + if (mat != CMIMaterial.NONE) + customRightClick.add(mat); + } + + c.addComment("Global.Visualizer.Use", "With this enabled player will see particle effects to mark selection boundaries"); + useVisualizer = c.get("Global.Visualizer.Use", true); + c.addComment("Global.Visualizer.Range", "Range in blocks to draw particle effects for player", "Keep it no more as 30, as player cant see more than 16 blocks"); + VisualizerRange = c.get("Global.Visualizer.Range", 16); + c.addComment("Global.Visualizer.ShowFor", "For how long in miliseconds (5000 = 5sec) to show particle effects"); + VisualizerShowFor = c.get("Global.Visualizer.ShowFor", 5000); + c.addComment("Global.Visualizer.updateInterval", "How often in ticks to update particles for player"); + VisualizerUpdateInterval = c.get("Global.Visualizer.updateInterval", 20); + c.addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); + VisualizerRowSpacing = c.get("Global.Visualizer.RowSpacing", 2); + if (VisualizerRowSpacing < 1) + VisualizerRowSpacing = 1; + c.addComment("Global.Visualizer.CollumnSpacing", "Spacing in blocks between particle effects for collums"); + VisualizerCollumnSpacing = c.get("Global.Visualizer.CollumnSpacing", 2); + if (VisualizerCollumnSpacing < 1) + VisualizerCollumnSpacing = 1; + + c.addComment("Global.Visualizer.SkipBy", "Defines by how many particles we need to skip", "This will create moving particle effect and will improve overall look of selection", + "By increasing this number, you can decrease update interval"); + VisualizerSkipBy = c.get("Global.Visualizer.SkipBy", 5); + if (VisualizerSkipBy < 1) + VisualizerSkipBy = 1; + + c.addComment("Global.Visualizer.FrameCap", "Maximum amount of frame particles to show for one player"); + VisualizerFrameCap = c.get("Global.Visualizer.FrameCap", 500); + if (VisualizerFrameCap < 1) + VisualizerFrameCap = 1; + + c.addComment("Global.Visualizer.SidesCap", "Maximum amount of sides particles to show for one player"); + VisualizerSidesCap = c.get("Global.Visualizer.SidesCap", 2000); + if (VisualizerSidesCap < 1) + VisualizerSidesCap = 1; + + String effectsList = ""; + for (Effect one : Effect.values()) { + if (one == null) + continue; + if (one.name() == null) + continue; + effectsList += one.name().toLowerCase() + ", "; + } + + c.addComment("Global.Visualizer.Selected", "Particle effect names. possible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", + " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", + " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance", "", + "If using spigot based server different particles can be used:", effectsList); + + // Frame + String efname = c.get("Global.Visualizer.Selected.Frame", "happyVillager"); + SelectedFrame = CMIParticle.getCMIParticle(efname); + if (SelectedFrame == null) { + SelectedFrame = CMIParticle.HAPPY_VILLAGER; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Frame with this name, it was set to default"); + } + + // Sides + efname = c.get("Global.Visualizer.Selected.Sides", "reddust"); + SelectedSides = CMIParticle.getCMIParticle(efname); + if (SelectedSides == null) { + SelectedSides = CMIParticle.COLOURED_DUST; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); + } + + efname = c.get("Global.Visualizer.Overlap.Frame", "FLAME"); + OverlapFrame = CMIParticle.getCMIParticle(efname); + if (OverlapFrame == null) { + OverlapFrame = CMIParticle.FLAME; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Overlap Frame with this name, it was set to default"); + } + + efname = c.get("Global.Visualizer.Overlap.Sides", "FLAME"); + OverlapSides = CMIParticle.getCMIParticle(efname); + if (OverlapSides == null) { + OverlapSides = CMIParticle.FLAME; + Bukkit.getConsoleSender().sendMessage("Can't find effect for Selected Sides with this name, it was set to default"); + } + + c.addComment("Global.Visualizer.EnterAnimation", "Shows particle effect when player enters residence. Only applies to main residence area"); + EnterAnimation = c.get("Global.Visualizer.EnterAnimation", true); + + c.addComment("Global.BounceAnimation", "Shows particle effect when player are being pushed back"); + BounceAnimation = c.get("Global.BounceAnimation", true); + + c.addComment("Global.GUI.Enabled", "Enable or disable flag GUI"); + useFlagGUI = c.get("Global.GUI.Enabled", true); + + c.addComment("Global.GUI.setTrue", "Item id and data to use when flag is set to true"); + + CMIMaterial Mat = CMIMaterial.get(c.get("Global.GUI.setTrue", "GREEN_WOOL")); + if (Mat == null) + Mat = CMIMaterial.GREEN_WOOL; + guiBottonStates.put(FlagState.TRUE, Mat.newItemStack()); + + c.addComment("Global.GUI.setFalse", "Item id and data to use when flag is set to false"); + Mat = CMIMaterial.get(c.get("Global.GUI.setFalse", "RED_WOOL")); + if (Mat == null) + Mat = CMIMaterial.RED_WOOL; + guiBottonStates.put(FlagState.FALSE, Mat.newItemStack()); + + c.addComment("Global.GUI.setRemove", "Item id and data to use when flag is set to remove"); + Mat = CMIMaterial.get(c.get("Global.GUI.setRemove", "LIGHT_GRAY_WOOL")); + if (Mat == null) + Mat = CMIMaterial.LIGHT_GRAY_WOOL; + guiBottonStates.put(FlagState.NEITHER, Mat.newItemStack()); + + c.addComment("Global.AutoMobRemoval", "Default = false. Enabling this, residences with flag nomobs will be cleared from monsters in regular intervals.", + "This is quite heavy on server side, so enable only if you really need this feature"); + AutoMobRemoval = c.get("Global.AutoMobRemoval.Use", false); + c.addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); + AutoMobRemovalInterval = c.get("Global.AutoMobRemoval.Interval", 3); + + enforceAreaInsideArea = c.get("Global.EnforceAreaInsideArea", false); + spoutEnable = c.get("Global.EnableSpout", false); + enableLeaseMoneyAccount = c.get("Global.EnableLeaseMoneyAccount", true); + + c.addComment("Global.Couldroncompatibility", + "By setting this to true, partial compatibility for kCouldron servers will be enabled. Action bar messages and selection visualizer will be disabled automatically as off incorrect compatibility"); + Couldroncompatibility = c.get("Global.Couldroncompatibility", false); + if (Couldroncompatibility) { + useVisualizer = false; + EnterLeaveMessageType = ELMessageType.ChatBox; + ActionBarOnSelection = false; + } + + c.addComment("DynMap.Use", "Enables or disable DynMap Support"); + DynMapUse = c.get("DynMap.Use", false); + c.addComment("DynMap.HideByDefault", "When set to true we will hide residence areas by default on dynmap window", "Residences can still be enabled throw provided DynMap option on left top side"); + DynMapHideByDefault = c.get("DynMap.HideByDefault", false); + c.addComment("DynMap.ShowFlags", "Shows or hides residence flags"); + DynMapShowFlags = c.get("DynMap.ShowFlags", true); + c.addComment("DynMap.ExcludeDefaultFlags", "When enabled default flags will not be included in residence overview"); + DynMapExcludeDefaultFlags = c.get("DynMap.ExcludeDefaultFlags", true); + c.addComment("DynMap.HideHidden", "If set true, residence with hidden flag set to true will be hidden from dynmap"); + DynMapHideHidden = c.get("DynMap.HideHidden", true); + + c.addComment("DynMap.Layer.3dRegions", "Enables 3D zones"); + DynMapLayer3dRegions = c.get("DynMap.Layer.3dRegions", true); + c.addComment("DynMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); + DynMapLayerSubZoneDepth = c.get("DynMap.Layer.SubZoneDepth", 2); + + c.addComment("DynMap.Border.Color", "Color of border. Pick color from this page http://www.w3schools.com/colors/colors_picker.asp"); + DynMapBorderColor = c.get("DynMap.Border.Color", "#FF0000"); + c.addComment("DynMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); + DynMapBorderOpacity = c.get("DynMap.Border.Opacity", 0.3); + c.addComment("DynMap.Border.Weight", "Border thickness"); + DynMapBorderWeight = c.get("DynMap.Border.Weight", 3); + DynMapFillOpacity = c.get("DynMap.Fill.Opacity", 0.3); + DynMapFillColor = c.get("DynMap.Fill.Color", "#FFFF00"); + DynMapFillForRent = c.get("DynMap.Fill.ForRent", "#33cc33"); + DynMapFillRented = c.get("DynMap.Fill.Rented", "#99ff33"); + DynMapFillForSale = c.get("DynMap.Fill.ForSale", "#0066ff"); + + c.addComment("DynMap.VisibleRegions", "Shows only regions on this list"); + DynMapVisibleRegions = c.get("DynMap.VisibleRegions", new ArrayList()); + c.addComment("DynMap.HiddenRegions", "Hides region on map even if its not hidden in game"); + DynMapHiddenRegions = c.get("DynMap.HiddenRegions", new ArrayList()); + + c.addComment("Pl3xMap.Use", "Enables or disable Pl3xMap Support"); + Pl3xMapUse = c.get("Pl3xMap.Use", false); + c.addComment("Pl3xMap.HideByDefault", "When set to true we will hide residence areas by default on Pl3xMap window", + "Residences can still be enabled throw provided Pl3xMap option on left top side"); + Pl3xMapHideByDefault = c.get("Pl3xMap.HideByDefault", false); + c.addComment("Pl3xMap.ShowFlags", "Shows or hides residence flags"); + Pl3xMapShowFlags = c.get("Pl3xMap.ShowFlags", true); + c.addComment("Pl3xMap.ExcludeDefaultFlags", "When enabled default flags will not be included in residence overview"); + Pl3xMapExcludeDefaultFlags = c.get("Pl3xMap.ExcludeDefaultFlags", true); + c.addComment("Pl3xMap.HideHidden", "If set true, residence with hidden flag set to true will be hidden from Pl3xMap"); + Pl3xMapHideHidden = c.get("Pl3xMap.HideHidden", true); // c.addComment("Pl3xMap.Layer.3dRegions", "Enables 3D zones"); // Pl3xMapLayer3dRegions = c.get("Pl3xMap.Layer.3dRegions", true); - c.addComment("Pl3xMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); - Pl3xMapLayerSubZoneDepth = c.get("Pl3xMap.Layer.SubZoneDepth", 2); - - c.addComment("Pl3xMap.Border.Color", "Color of border. Pick color from this page http://www.w3schools.com/colors/colors_picker.asp"); - - Pl3xMapFillColor = processColor(c.get("Pl3xMap.Border.Color", "#FF0000")); - - c.addComment("Pl3xMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); - Pl3xMapBorderOpacity = c.get("Pl3xMap.Border.Opacity", 0.3); - c.addComment("Pl3xMap.Border.Weight", "Border thickness"); - Pl3xMapBorderWeight = c.get("Pl3xMap.Border.Weight", 3); - Pl3xMapFillOpacity = c.get("Pl3xMap.Fill.Opacity", 0.3); - - Pl3xMapFillColor = processColor(c.get("Pl3xMap.Fill.Color", "#FF0000")); - - Pl3xMapFillForRent = processColor(c.get("Pl3xMap.Fill.ForRent", "#33cc33")); - Pl3xMapFillRented = processColor(c.get("Pl3xMap.Fill.Rented", "#99ff33")); - Pl3xMapFillForSale = processColor(c.get("Pl3xMap.Fill.ForSale", "#0066ff")); - - c.addComment("Pl3xMap.VisibleRegions", "Shows only regions on this list"); - Pl3xMapVisibleRegions = c.get("Pl3xMap.VisibleRegions", new ArrayList()); - c.addComment("Pl3xMap.HiddenRegions", "Hides region on map even if its not hidden in game"); - Pl3xMapHiddenRegions = c.get("Pl3xMap.HiddenRegions", new ArrayList()); - - c.addComment("Raid", "In development"); - - c.addComment("Raid.Enabled", "Determines if you want to enable raid feature for your server", - "When residence is under raid, attackers can move inside residence even if residence has move false flag"); - RaidEnabled = c.get("Raid.Enabled", false); - c.addComment("Raid.PreTimer", "Time in seconds before raid starts", "This will allow defenders to get back to residence and prepare for attack"); - PreRaidTimer = c.get("Raid.PreTimer", 120); - c.addComment("Raid.Timer", "Time in seconds raid should be", "During this time attackers can steal and kill defenders"); - RaidTimer = c.get("Raid.Timer", 120); - c.addComment("Raid.Cooldown", "Time in seconds residence is immune for next raid", "Default is 79200 seconds which results into 22 hours, this might reset if you have server restart"); - RaidCooldown = c.get("Raid.Cooldown", 79200); - c.addComment("Raid.PlayerCooldown", "Time in seconds player is immune for next raid", "In case player has more than one residence, this can prevent player from being attacked again", - "Default is 79200 seconds which results into 22 hours, this might reset if you have server restart"); - RaidPlayerCooldown = c.get("Raid.PlayerCooldown", 79200); - - c.addComment("Raid.Allow.Attacker.blockBreak", "Allows to break blocks inside raided residence even if it has destroy false", "This only applies for attackers and for raid time"); - RaidAttackerBlockBreak = c.get("Raid.Allow.Attacker.blockBreak", true); - c.addComment("Raid.Allow.Attacker.blockPlace", "Allows to place blocks inside raided residence even if it has place false", "This only applies for attackers and for raid time"); - RaidAttackerBlockPlace = c.get("Raid.Allow.Attacker.blockPlace", true); - c.addComment("Raid.Allow.Defender.blockBreak", "Allows to break blocks inside raided residence even if it has destroy false", "This only applies for defenders and for raid time"); - RaidDefenderBlockBreak = c.get("Raid.Allow.Defender.blockBreak", true); - c.addComment("Raid.Allow.Defender.blockPlace", "Allows to place blocks inside raided residence even if it has place false", "This only applies for defenders and for raid time"); - RaidDefenderBlockPlace = c.get("Raid.Allow.Defender.blockPlace", true); - c.addComment("Raid.Allow.Defender.Teleport", "Allows to teleport into raided residence, includes /res tp and other 3rd party teleport commands", "This only applies for defenders and for raid time", - "keep in mind that attackers will not have this option and will be prevented from teleporting inside raided residence"); - RaidDefenderTeleport = c.get("Raid.Allow.Defender.Teleport", false); - - c.addComment("Raid.Allow.Defender.containerUsage", "Allows to use containers, such as chests, during raid time", "This only applies for defenders and for raid time", - "Keeping this at false might prevent from players moving their items to another residence which is not in raid", "Attackers will have access to any container in your residence during raid"); - RaidDefenderContainerUsage = c.get("Raid.Allow.Defender.containerUsage", false); - - c.addComment("Raid.FriendlyFire", "When set to false players in same teams (attackers or defenders) will not cause each other damage"); - RaidFriendlyFire = c.get("Raid.FriendlyFire", true); - - c.save(); + c.addComment("Pl3xMap.Layer.SubZoneDepth", "How deep to go into subzones to show"); + Pl3xMapLayerSubZoneDepth = c.get("Pl3xMap.Layer.SubZoneDepth", 2); + + c.addComment("Pl3xMap.Border.Color", "Color of border. Pick color from this page http://www.w3schools.com/colors/colors_picker.asp"); + + Pl3xMapFillColor = processColor(c.get("Pl3xMap.Border.Color", "#FF0000")); + + c.addComment("Pl3xMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); + Pl3xMapBorderOpacity = c.get("Pl3xMap.Border.Opacity", 0.3); + c.addComment("Pl3xMap.Border.Weight", "Border thickness"); + Pl3xMapBorderWeight = c.get("Pl3xMap.Border.Weight", 3); + Pl3xMapFillOpacity = c.get("Pl3xMap.Fill.Opacity", 0.3); + + Pl3xMapFillColor = processColor(c.get("Pl3xMap.Fill.Color", "#FF0000")); + + Pl3xMapFillForRent = processColor(c.get("Pl3xMap.Fill.ForRent", "#33cc33")); + Pl3xMapFillRented = processColor(c.get("Pl3xMap.Fill.Rented", "#99ff33")); + Pl3xMapFillForSale = processColor(c.get("Pl3xMap.Fill.ForSale", "#0066ff")); + + c.addComment("Pl3xMap.VisibleRegions", "Shows only regions on this list"); + Pl3xMapVisibleRegions = c.get("Pl3xMap.VisibleRegions", new ArrayList()); + c.addComment("Pl3xMap.HiddenRegions", "Hides region on map even if its not hidden in game"); + Pl3xMapHiddenRegions = c.get("Pl3xMap.HiddenRegions", new ArrayList()); + + c.addComment("Raid", "In development"); + + c.addComment("Raid.Enabled", "Determines if you want to enable raid feature for your server", + "When residence is under raid, attackers can move inside residence even if residence has move false flag"); + RaidEnabled = c.get("Raid.Enabled", false); + c.addComment("Raid.PreTimer", "Time in seconds before raid starts", "This will allow defenders to get back to residence and prepare for attack"); + PreRaidTimer = c.get("Raid.PreTimer", 120); + c.addComment("Raid.Timer", "Time in seconds raid should be", "During this time attackers can steal and kill defenders"); + RaidTimer = c.get("Raid.Timer", 120); + c.addComment("Raid.Cooldown", "Time in seconds residence is immune for next raid", "Default is 79200 seconds which results into 22 hours, this might reset if you have server restart"); + RaidCooldown = c.get("Raid.Cooldown", 79200); + c.addComment("Raid.PlayerCooldown", "Time in seconds player is immune for next raid", "In case player has more than one residence, this can prevent player from being attacked again", + "Default is 79200 seconds which results into 22 hours, this might reset if you have server restart"); + RaidPlayerCooldown = c.get("Raid.PlayerCooldown", 79200); + + c.addComment("Raid.Allow.Attacker.blockBreak", "Allows to break blocks inside raided residence even if it has destroy false", "This only applies for attackers and for raid time"); + RaidAttackerBlockBreak = c.get("Raid.Allow.Attacker.blockBreak", true); + c.addComment("Raid.Allow.Attacker.blockPlace", "Allows to place blocks inside raided residence even if it has place false", "This only applies for attackers and for raid time"); + RaidAttackerBlockPlace = c.get("Raid.Allow.Attacker.blockPlace", true); + c.addComment("Raid.Allow.Defender.blockBreak", "Allows to break blocks inside raided residence even if it has destroy false", "This only applies for defenders and for raid time"); + RaidDefenderBlockBreak = c.get("Raid.Allow.Defender.blockBreak", true); + c.addComment("Raid.Allow.Defender.blockPlace", "Allows to place blocks inside raided residence even if it has place false", "This only applies for defenders and for raid time"); + RaidDefenderBlockPlace = c.get("Raid.Allow.Defender.blockPlace", true); + c.addComment("Raid.Allow.Defender.Teleport", "Allows to teleport into raided residence, includes /res tp and other 3rd party teleport commands", "This only applies for defenders and for raid time", + "keep in mind that attackers will not have this option and will be prevented from teleporting inside raided residence"); + RaidDefenderTeleport = c.get("Raid.Allow.Defender.Teleport", false); + + c.addComment("Raid.Allow.Defender.containerUsage", "Allows to use containers, such as chests, during raid time", "This only applies for defenders and for raid time", + "Keeping this at false might prevent from players moving their items to another residence which is not in raid", "Attackers will have access to any container in your residence during raid"); + RaidDefenderContainerUsage = c.get("Raid.Allow.Defender.containerUsage", false); + + c.addComment("Raid.FriendlyFire", "When set to false players in same teams (attackers or defenders) will not cause each other damage"); + RaidFriendlyFire = c.get("Raid.FriendlyFire", true); + + c.save(); } private Color processColor(String cls) { - try { - if (cls.startsWith("#")) { - cls = cls.substring(1); - cls = CMIChatColor.colorCodePrefix + cls + CMIChatColor.colorCodeSuffix; - } - CMIChatColor col = CMIChatColor.getColor(cls); - if (col != null && col.getJavaColor() != null) - return col.getJavaColor(); - } catch (Throwable e) { - } - return new Color(125, 125, 125); + try { + if (cls.startsWith("#")) { + cls = cls.substring(1); + cls = CMIChatColor.colorCodePrefix + cls + CMIChatColor.colorCodeSuffix; + } + CMIChatColor col = CMIChatColor.getColor(cls); + if (col != null && col.getJavaColor() != null) + return col.getJavaColor(); + } catch (Throwable e) { + } + return new Color(125, 125, 125); } public void loadFlags() { - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); - if (flags.isList("Global.TotalFlagDisabling")) { - List globalDisable = flags.getStringList("Global.TotalFlagDisabling"); + if (flags.isList("Global.TotalFlagDisabling")) { + List globalDisable = flags.getStringList("Global.TotalFlagDisabling"); - // Re enabling all of them before loading flags file - for (Flags one : Flags.values()) { - one.setGlobalyEnabled(true); - } + // Re enabling all of them before loading flags file + for (Flags one : Flags.values()) { + one.setGlobalyEnabled(true); + } - for (String fl : globalDisable) { - Flags flag = Flags.getFlag(fl); - if (flag == null) { - continue; - } - flag.setGlobalyEnabled(false); - } - } + for (String fl : globalDisable) { + Flags flag = Flags.getFlag(fl); + if (flag == null) { + continue; + } + flag.setGlobalyEnabled(false); + } + } - globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", flags.getConfigurationSection("Global")); - globalRentedDefaults = FlagPermissions.parseFromConfigNode("RentedDefault", flags.getConfigurationSection("Global")); - globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", flags.getConfigurationSection("Global")); - loadGroups(); + globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", flags.getConfigurationSection("Global")); + globalRentedDefaults = FlagPermissions.parseFromConfigNode("RentedDefault", flags.getConfigurationSection("Global")); + globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", flags.getConfigurationSection("Global")); + loadGroups(); } public void loadGroups() { - FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); - ConfigurationSection node = groups.getConfigurationSection("Global.GroupDefault"); - if (node != null) { - Set keys = node.getConfigurationSection(defaultGroup).getKeys(false); - if (keys != null) { - for (String key : keys) { - globalGroupDefaults.put(key, FlagPermissions.parseFromConfigNodeAsList(defaultGroup, "false")); - } - } - } + FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); + ConfigurationSection node = groups.getConfigurationSection("Global.GroupDefault"); + if (node != null) { + Set keys = node.getConfigurationSection(defaultGroup).getKeys(false); + if (keys != null) { + for (String key : keys) { + globalGroupDefaults.put(key, FlagPermissions.parseFromConfigNodeAsList(defaultGroup, "false")); + } + } + } } public World getWorld(String name) { - name = name.replace("_", "").replace(".", ""); - for (World one : Bukkit.getWorlds()) { - if (one.getName().replace("_", "").replace(".", "").equalsIgnoreCase(name)) - return one; - } - return null; + name = name.replace("_", "").replace(".", ""); + for (World one : Bukkit.getWorlds()) { + if (one.getName().replace("_", "").replace(".", "").equalsIgnoreCase(name)) + return one; + } + return null; } public boolean isGlobalChatEnabled() { - return GlobalChatEnabled; + return GlobalChatEnabled; } public boolean isGlobalChatSelfModify() { - return GlobalChatSelfModify; + return GlobalChatSelfModify; } public String getGlobalChatFormat() { - return GlobalChatFormat; + return GlobalChatFormat; } public int getRentInformDelay() { - return RentInformDelay; + return RentInformDelay; } public int getRentInformBefore() { - return RentInformBefore; + return RentInformBefore; } public boolean isRentAllowAutoPay() { - return RentAllowAutoPay; + return RentAllowAutoPay; } public boolean isRentPlayerAutoPay() { - return RentPlayerAutoPay; + return RentPlayerAutoPay; } public boolean isRentStayInMarket() { - return RentStayInMarket; + return RentStayInMarket; } public boolean isSellSubzone() { - return SellSubzone; + return SellSubzone; } public boolean isRentAllowRenewing() { - return RentAllowRenewing; + return RentAllowRenewing; } public boolean isRentPreventRemoval() { - return RentPreventRemoval; + return RentPreventRemoval; } public boolean isRentInformOnEnding() { - return RentInformOnEnding; + return RentInformOnEnding; } public boolean isTNTExplodeBelow() { - return TNTExplodeBelow; + return TNTExplodeBelow; } public int getTNTExplodeBelowLevel() { - return TNTExplodeBelowLevel; + return TNTExplodeBelowLevel; } public boolean isCreeperExplodeBelow() { - return CreeperExplodeBelow; + return CreeperExplodeBelow; } public int getCreeperExplodeBelowLevel() { - return CreeperExplodeBelowLevel; + return CreeperExplodeBelowLevel; } public boolean useVisualizer() { - return useVisualizer; + return useVisualizer; } public int getVisualizerRange() { - return VisualizerRange; + return VisualizerRange; } public int getVisualizerShowFor() { - return VisualizerShowFor; + return VisualizerShowFor; } public int getNewPlayerRangeX() { - return NewPlayerRangeX; + return NewPlayerRangeX; } public int getNewPlayerRangeY() { - return NewPlayerRangeY; + return NewPlayerRangeY; } public int getNewPlayerRangeZ() { - return NewPlayerRangeZ; + return NewPlayerRangeZ; } public int getVisualizerRowSpacing() { - return VisualizerRowSpacing; + return VisualizerRowSpacing; } public int getVisualizerCollumnSpacing() { - return VisualizerCollumnSpacing; + return VisualizerCollumnSpacing; } public int getVisualizerSkipBy() { - return VisualizerSkipBy; + return VisualizerSkipBy; } public int getVisualizerUpdateInterval() { - return VisualizerUpdateInterval; + return VisualizerUpdateInterval; } public CMIParticle getSelectedFrame() { - return SelectedFrame; + return SelectedFrame; } public CMIParticle getSelectedSides() { - return SelectedSides; + return SelectedSides; } public CMIParticle getOverlapFrame() { - return OverlapFrame; + return OverlapFrame; } public CMIParticle getOverlapSides() { - return OverlapSides; + return OverlapSides; } @Deprecated public CMIParticle getSelectedSpigotFrame() { - return SelectedFrame; + return SelectedFrame; } @Deprecated public CMIParticle getSelectedSpigotSides() { - return SelectedSides; + return SelectedSides; } @Deprecated public CMIParticle getOverlapSpigotFrame() { - return OverlapFrame; + return OverlapFrame; } @Deprecated public CMIParticle getOverlapSpigotSides() { - return OverlapSides; + return OverlapSides; } public int getTeleportDelay() { - return TeleportDelay; + return TeleportDelay; } public boolean isTeleportTitleMessage() { - return TeleportTitleMessage; + return TeleportTitleMessage; } public String getDefaultGroup() { - return defaultGroup; + return defaultGroup; } public String getResidenceNameRegex() { - return namefix; + return namefix; } public boolean isExtraEnterMessage() { - return ExtraEnterMessage; + return ExtraEnterMessage; } public boolean enableEconomy() { - return enableEconomy && plugin.getEconomyManager() != null; + return enableEconomy && plugin.getEconomyManager() != null; } public boolean enabledRentSystem() { - return enableRentSystem && enableEconomy(); + return enableRentSystem && enableEconomy(); } public boolean useLeases() { - return useLeases; + return useLeases; } public boolean useResMoneyBack() { - return ResMoneyBack; + return ResMoneyBack; } public boolean allowAdminsOnly() { - return adminsOnly; + return adminsOnly; } public boolean allowEmptyResidences() { - return allowEmptyResidences; + return allowEmptyResidences; } public boolean isNoLava() { - return NoLava; + return NoLava; } public boolean isNoWater() { - return NoWater; + return NoWater; } public boolean isNoLavaPlace() { - return NoLavaPlace; + return NoLavaPlace; } public boolean isBlockFall() { - return useBlockFall; + return useBlockFall; } public boolean isNoWaterPlace() { - return NoWaterPlace; + return NoWaterPlace; } public List getLwcMatList() { - return LwcMatList; + return LwcMatList; } public boolean isRemoveLwcOnUnrent() { - return LwcOnUnrent; + return LwcOnUnrent; } public boolean isRemoveLwcOnBuy() { - return LwcOnBuy; + return LwcOnBuy; } public boolean isRemoveLwcOnDelete() { - return LwcOnDelete; + return LwcOnDelete; } public boolean isUseResidenceFileClean() { - return AutoCleanUp; + return AutoCleanUp; } public int getResidenceFileCleanDays() { - return AutoCleanUpDays; + return AutoCleanUpDays; } public boolean isAutoCleanUpRegenerate() { - return AutoCleanUpRegenerate; + return AutoCleanUpRegenerate; } public boolean isUseClean() { - return UseClean; + return UseClean; } public boolean isPvPFlagPrevent() { - return PvPFlagPrevent; + return PvPFlagPrevent; } public boolean isOverridePvp() { - return OverridePvp; + return OverridePvp; } public boolean isBlockAnyTeleportation() { - return BlockAnyTeleportation; + return BlockAnyTeleportation; } @Deprecated public int getInfoToolID() { - return infoTool.getId(); + return infoTool.getId(); } public CMIMaterial getInfoTool() { - return infoTool; + return infoTool; } public CMIMaterial getSelectionTool() { - return selectionTool; + return selectionTool; } @Deprecated public int getSelectionTooldID() { - return selectionTool.getId(); + return selectionTool.getId(); } public boolean getOpsAreAdmins() { - return adminOps; + return adminOps; } public boolean getAdminFullAccess() { - return AdminFullAccess; + return AdminFullAccess; } public String getMultiworldPlugin() { - return multiworldPlugin; + return multiworldPlugin; } public boolean autoRenewLeases() { - return leaseAutoRenew; + return leaseAutoRenew; } public boolean isShortInfoUse() { - return ShortInfoUse; + return ShortInfoUse; } public boolean isOnlyLike() { - return OnlyLike; + return OnlyLike; } public int getRentCheckInterval() { - return rentCheckInterval; + return rentCheckInterval; } public int getChatPrefixLength() { - return chatPrefixLength; + return chatPrefixLength; } public int getLeaseCheckInterval() { - return leaseCheckInterval; + return leaseCheckInterval; } public int getAutoSaveInterval() { - return autoSaveInt; + return autoSaveInt; } public boolean isNewSaveMechanic() { - return NewSaveMechanic; + return NewSaveMechanic; } // backup stuff public boolean BackupAutoCleanUpUse() { - return BackupAutoCleanUpUse; + return BackupAutoCleanUpUse; } public int BackupAutoCleanUpDays() { - return BackupAutoCleanUpDays; + return BackupAutoCleanUpDays; } public boolean UseZipBackup() { - return UseZipBackup; + return UseZipBackup; } public boolean BackupWorldFiles() { - return BackupWorldFiles; + return BackupWorldFiles; } public boolean BackupforsaleFile() { - return BackupforsaleFile; + return BackupforsaleFile; } public boolean BackupleasesFile() { - return BackupleasesFile; + return BackupleasesFile; } public boolean BackuppermlistsFile() { - return BackuppermlistsFile; + return BackuppermlistsFile; } public boolean BackuprentFile() { - return BackuprentFile; + return BackuprentFile; } public boolean BackupflagsFile() { - return BackupflagsFile; + return BackupflagsFile; } public boolean BackupgroupsFile() { - return BackupgroupsFile; + return BackupgroupsFile; } public boolean BackupconfigFile() { - return BackupconfigFile; + return BackupconfigFile; } // backup stuff public int getFlowLevel() { - return FlowLevel; + return FlowLevel; } public int getPlaceLevel() { - return PlaceLevel; + return PlaceLevel; } public int getBlockFallLevel() { - return BlockFallLevel; + return BlockFallLevel; } public int getCleanLevel() { - return CleanLevel; + return CleanLevel; } public boolean flagsInherit() { - return flagsInherit; + return flagsInherit; } public boolean isIgnoreGroupedFlagAcess() { - return ignoreGroupedFlagAcess; + return ignoreGroupedFlagAcess; } public boolean chatEnabled() { - return chatEnable; + return chatEnable; } public boolean useActionBarOnSelection() { - return ActionBarOnSelection; + return ActionBarOnSelection; } public CMIChatColor getChatColor() { - return chatColor; + return chatColor; } public int getMinMoveUpdateInterval() { - return minMoveUpdate; + return minMoveUpdate; } public int getVoteRangeFrom() { - return VoteRangeFrom; + return VoteRangeFrom; } public int getHealInterval() { - return HealInterval; + return HealInterval; } public int getFeedInterval() { - return FeedInterval; + return FeedInterval; } public int getVoteRangeTo() { - return VoteRangeTo; + return VoteRangeTo; } public FlagPermissions getGlobalCreatorDefaultFlags() { - return globalCreatorDefaults; + return globalCreatorDefaults; } public FlagPermissions getGlobalRentedDefaultFlags() { - return globalRentedDefaults; + return globalRentedDefaults; } public FlagPermissions getGlobalResidenceDefaultFlags() { - return globalResidenceDefaults; + return globalResidenceDefaults; } public Map getGlobalGroupDefaultFlags() { - return globalGroupDefaults; + return globalGroupDefaults; } public String getLanguage() { - return language; + return language; } public String getDefaultWorld() { - return DefaultWorld; + return DefaultWorld; } public String getDateFormat() { - return DateFormat; + return DateFormat; } public String getDateFormatShort() { - return DateFormatShort; + return DateFormatShort; } public String getTimeZone() { - return TimeZone; + return TimeZone; } public boolean preventRentModify() { - return preventBuildInRent; + return preventBuildInRent; } public boolean isPreventSubZoneRemoval() { - return PreventSubZoneRemoval; + return PreventSubZoneRemoval; } public boolean stopOnSaveError() { - return stopOnSaveError; + return stopOnSaveError; } public boolean showIntervalMessages() { - return showIntervalMessages; + return showIntervalMessages; } public boolean ShowNoobMessage() { - return ShowNoobMessage; + return ShowNoobMessage; } public boolean isNewPlayerUse() { - return NewPlayerUse; + return NewPlayerUse; } public boolean isNewPlayerFree() { - return NewPlayerFree; + return NewPlayerFree; } public boolean enableSpout() { - return spoutEnable; + return spoutEnable; } public boolean AutoMobRemoval() { - return AutoMobRemoval; + return AutoMobRemoval; } public int AutoMobRemovalInterval() { - return AutoMobRemovalInterval; + return AutoMobRemovalInterval; } public boolean enableLeaseMoneyAccount() { - return enableLeaseMoneyAccount; + return enableLeaseMoneyAccount; } public boolean CouldronCompatibility() { - return Couldroncompatibility; + return Couldroncompatibility; } public boolean debugEnabled() { - return enableDebug; + return enableDebug; } public boolean isSelectionIgnoreY() { - return SelectionIgnoreY; + return SelectionIgnoreY; } public boolean isSelectionIgnoreYInSubzone() { - return SelectionIgnoreYInSubzone; + return SelectionIgnoreYInSubzone; } public boolean isNoCostForYBlocks() { - return NoCostForYBlocks; + return NoCostForYBlocks; } public boolean versionCheck() { - return versionCheck; + return versionCheck; } public boolean isUUIDConvertion() { - return UUIDConvertion; + return UUIDConvertion; } public boolean isOfflineMode() { - return OfflineMode; + return OfflineMode; } public List getCustomContainers() { - return customContainers; + return customContainers; } public List getCustomBothClick() { - return customBothClick; + return customBothClick; } public List getCustomRightClick() { - return customRightClick; + return customRightClick; } public List getCleanBlocks() { - return CleanBlocks; + return CleanBlocks; } public List getNoFlowWorlds() { - return NoFlowWorlds; + return NoFlowWorlds; } public List getAutoCleanUpWorlds() { - return AutoCleanUpWorlds; + return AutoCleanUpWorlds; } public List getNoPlaceWorlds() { - return NoPlaceWorlds; + return NoPlaceWorlds; } public List getBlockFallWorlds() { - return BlockFallWorlds; + return BlockFallWorlds; } public List getNegativePotionEffects() { - return NegativePotionEffects; + return NegativePotionEffects; } public List getNegativeLingeringPotionEffects() { - return NegativeLingeringPotionEffects; + return NegativeLingeringPotionEffects; } public List getCleanWorlds() { - return CleanWorlds; + return CleanWorlds; } public List getProtectedFlagsList() { - return FlagsList; + return FlagsList; } public boolean getEnforceAreaInsideArea() { - return enforceAreaInsideArea; + return enforceAreaInsideArea; } public List getRandomTeleport() { - return RTeleport; + return RTeleport; } public int getrtCooldown() { - return rtCooldown; + return rtCooldown; } public Location getKickLocation() { - return KickLocation; + return KickLocation; } public Location getFlyLandLocation() { - return FlyLandLocation; + return FlyLandLocation; } public int getrtMaxTries() { - return rtMaxTries; + return rtMaxTries; } public boolean useFlagGUI() { - return useFlagGUI; + return useFlagGUI; } public boolean BounceAnimation() { - return BounceAnimation; + return BounceAnimation; } public int getVisualizerFrameCap() { - return VisualizerFrameCap; + return VisualizerFrameCap; } public int getVisualizerSidesCap() { - return VisualizerSidesCap; + return VisualizerSidesCap; } public Double getWalkSpeed1() { - return WalkSpeed1; + return WalkSpeed1; } public Double getWalkSpeed2() { - return WalkSpeed2; + return WalkSpeed2; } public int getItemPickUpDelay() { - return ItemPickUpDelay; + return ItemPickUpDelay; } public boolean isConsoleLogsShowFlagChanges() { - return ConsoleLogsShowFlagChanges; + return ConsoleLogsShowFlagChanges; } public EconomyType getEconomyType() { - return VaultEconomy; + return VaultEconomy; } public boolean isCanTeleportIncludeOwner() { - return CanTeleportIncludeOwner; + return CanTeleportIncludeOwner; } public ELMessageType getEnterLeaveMessageType() { - return EnterLeaveMessageType; + return EnterLeaveMessageType; } public boolean isEnterAnimation() { - return EnterAnimation; + return EnterAnimation; } public boolean isDeductFromBank() { - return DeductFromBank; + return DeductFromBank; } public boolean isDeductFromBankThenPlayer() { - return DeductFromBankThenPlayer; + return DeductFromBankThenPlayer; } public ItemStack getGuiBottonStates(FlagState state) { - return guiBottonStates.get(state); + return guiBottonStates.get(state); } public int getSelectionNetherHeight() { - return SelectionNetherHeight; + return SelectionNetherHeight; } public boolean isInfoExcludeDFlags() { - return InfoExcludeDFlags; + return InfoExcludeDFlags; } public boolean isChatListening() { - return chatListening; + return chatListening; } public boolean isLoadEveryWorld() { - return LoadEveryWorld; + return LoadEveryWorld; } public boolean isARCCheckCollision() { - return ARCCheckCollision; + return ARCCheckCollision; } public String ARCIncrementFormat() { - return ARCIncrementFormat; + return ARCIncrementFormat; } public int getARCSizePercentage() { - return ARCSizePercentage; + return ARCSizePercentage; } public int getARCSizeMin() { - return ARCSizeMin; + return ARCSizeMin; } public int getARCSizeMax() { - return ARCSizeMax; + return ARCSizeMax; } public boolean isARCSizeEnabled() { - return ARCSizeEnabled; + return ARCSizeEnabled; } // public int getTownMinRange() { diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 7d5dd202f..8f523832e 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -173,8 +173,8 @@ public enum lm { Flag_p2Color("&a"), Flag_haveColor("&2"), Flag_havePrefix(""), - Flag_denyColor("&7"), - Flag_denyPrefix(""), + Flag_lackColor("&7"), + Flag_lackPrefix(""), Flag_others("&eand &2%1 &eothers"), Flag_Set("&eFlag (&6%1&e) set for &6%2 &eto &6%3 &estate"), Flag_SetFailed("&cYou dont have access to &6%1 &cflag"), @@ -198,6 +198,7 @@ public enum lm { Bank_Deposit("&eYou deposit &6%1 &einto the residence bank."), Bank_Withdraw("&eYou withdraw &6%1 &efrom the residence bank."), Bank_rentedWithdraw("&cCan't withdraw from rented residence bank."), + Bank_full("&eResidence bank is full!"), Subzone_Rename("&eRenamed subzone &6%1 &eto &6%2"), Subzone_Remove("&eSubzone &6%1 &eremoved."), diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index d235bb067..6cc3f7852 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -15,102 +15,111 @@ public class ResidenceBank { ClaimedResidence res; public ResidenceBank(ClaimedResidence parent) { - storedMoney = 0D; - res = parent; + storedMoney = 0D; + res = parent; } @Deprecated public int getStoredMoney() { - return storedMoney.intValue(); + return storedMoney.intValue(); } public Double getStoredMoneyD() { - return storedMoney; + return storedMoney; } public String getStoredMoneyFormated() { - try { - return Residence.getInstance().getEconomyManager().format(storedMoney); - } catch (Exception e) { - return String.valueOf(this.storedMoney); - } + try { + return Residence.getInstance().getEconomyManager().format(storedMoney); + } catch (Exception e) { + return String.valueOf(this.storedMoney); + } } public void setStoredMoney(double amount) { - storedMoney = amount; + storedMoney = amount; } public void add(double amount) { - storedMoney = storedMoney + amount; + storedMoney = storedMoney + amount; } public boolean hasEnough(double amount) { - if (storedMoney >= amount) - return true; - return false; + if (storedMoney >= amount) + return true; + return false; } public void subtract(double amount) { - storedMoney = storedMoney - amount; - if (storedMoney < 0) - storedMoney = 0D; + storedMoney = storedMoney - amount; + if (storedMoney < 0) + storedMoney = 0D; } @Deprecated public void withdraw(CommandSender sender, int amount, boolean resadmin) { - withdraw(sender, (double) amount, resadmin); + withdraw(sender, (double) amount, resadmin); } public void withdraw(CommandSender sender, double amount, boolean resadmin) { - if (!(sender instanceof Player)) - return; - Player player = (Player) sender; - if (!Residence.getInstance().getConfigManager().enableEconomy()) { - Residence.getInstance().msg(sender, lm.Economy_MarketDisabled); - } - if (!resadmin && !res.getPermissions().playerHas(player, Flags.bank, FlagCombo.OnlyTrue)) { - Residence.getInstance().msg(sender, lm.Bank_NoAccess); - return; - } - if (!hasEnough(amount)) { - Residence.getInstance().msg(sender, lm.Bank_NoMoney); - return; - } - - if (!resadmin && res.isRented() && !res.getRentedLand().player.equalsIgnoreCase(sender.getName())) { - Residence.getInstance().msg(sender, lm.Bank_rentedWithdraw, res.getName()); - return; - } - - if (sender instanceof Player && Residence.getInstance().getEconomyManager().add(sender.getName(), amount) || !(sender instanceof Player)) { - this.subtract(amount); - Residence.getInstance().msg(sender, lm.Bank_Withdraw, String.format("%.2f", amount)); - } + if (!(sender instanceof Player)) + return; + Player player = (Player) sender; + if (!Residence.getInstance().getConfigManager().enableEconomy()) { + Residence.getInstance().msg(sender, lm.Economy_MarketDisabled); + } + if (!resadmin && !res.getPermissions().playerHas(player, Flags.bank, FlagCombo.OnlyTrue)) { + Residence.getInstance().msg(sender, lm.Bank_NoAccess); + return; + } + if (!hasEnough(amount)) { + Residence.getInstance().msg(sender, lm.Bank_NoMoney); + return; + } + + if (!resadmin && res.isRented() && !res.getRentedLand().player.equalsIgnoreCase(sender.getName())) { + Residence.getInstance().msg(sender, lm.Bank_rentedWithdraw, res.getName()); + return; + } + + if (sender instanceof Player && Residence.getInstance().getEconomyManager().add(sender.getName(), amount) || !(sender instanceof Player)) { + this.subtract(amount); + Residence.getInstance().msg(sender, lm.Bank_Withdraw, String.format("%.2f", amount)); + } } @Deprecated public void deposit(CommandSender sender, int amount, boolean resadmin) { - deposit(sender, (double) amount, resadmin); + deposit(sender, (double) amount, resadmin); } public void deposit(CommandSender sender, double amount, boolean resadmin) { - if (!(sender instanceof Player)) - return; - Player player = (Player) sender; - if (!Residence.getInstance().getConfigManager().enableEconomy()) { - Residence.getInstance().msg(sender, lm.Economy_MarketDisabled); - } - if (!resadmin && !res.getPermissions().playerHas(player, Flags.bank, FlagCombo.OnlyTrue)) { - Residence.getInstance().msg(sender, lm.Bank_NoAccess); - return; - } - if (sender instanceof Player && !Residence.getInstance().getEconomyManager().canAfford(sender.getName(), amount)) { - Residence.getInstance().msg(sender, lm.Economy_NotEnoughMoney); - return; - } - if (sender instanceof Player && Residence.getInstance().getEconomyManager().subtract(sender.getName(), amount) || !(sender instanceof Player)) { - this.add(amount); - Residence.getInstance().msg(sender, lm.Bank_Deposit, Residence.getInstance().getEconomyManager().format(amount)); - } + if (!(sender instanceof Player)) + return; + Player player = (Player) sender; + if (!Residence.getInstance().getConfigManager().enableEconomy()) { + Residence.getInstance().msg(sender, lm.Economy_MarketDisabled); + } + if (!resadmin && !res.getPermissions().playerHas(player, Flags.bank, FlagCombo.OnlyTrue)) { + Residence.getInstance().msg(sender, lm.Bank_NoAccess); + return; + } + if (sender instanceof Player && !Residence.getInstance().getEconomyManager().canAfford(sender.getName(), amount)) { + Residence.getInstance().msg(sender, lm.Economy_NotEnoughMoney); + return; + } + + if (Residence.getInstance().getConfigManager().BankCapacity > 0 && this.getStoredMoneyD() + amount > Residence.getInstance().getConfigManager().BankCapacity) { + amount = Residence.getInstance().getConfigManager().BankCapacity - this.getStoredMoneyD(); + Residence.getInstance().msg(sender, lm.Bank_full); + if (amount <= 0) { + return; + } + } + + if (sender instanceof Player && Residence.getInstance().getEconomyManager().subtract(sender.getName(), amount) || !(sender instanceof Player)) { + this.add(amount); + Residence.getInstance().msg(sender, lm.Bank_Deposit, Residence.getInstance().getEconomyManager().format(amount)); + } } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 4c95ede4c..e95676682 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -979,9 +979,9 @@ public String listFlags(Integer split, Integer totalShow) { int t = 0; String haveColor = Residence.getInstance().getLM().getMessage(lm.Flag_haveColor); - String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_denyColor); + String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_lackColor); String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); - String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); + String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_lackPrefix); while (it.hasNext()) { Entry next = it.next(); @@ -1091,9 +1091,9 @@ protected String printPlayerFlags(Map flags) { Set> set = flags.entrySet(); String haveColor = Residence.getInstance().getLM().getMessage(lm.Flag_haveColor); - String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_denyColor); + String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_lackColor); String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); - String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); + String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_lackPrefix); synchronized (set) { Iterator> it = set.iterator(); @@ -1444,9 +1444,9 @@ public String listGroupFlags(String group) { Set> set = get.entrySet(); String haveColor = Residence.getInstance().getLM().getMessage(lm.Flag_haveColor); - String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_denyColor); + String denyColor = Residence.getInstance().getLM().getMessage(lm.Flag_lackColor); String havePrefix = Residence.getInstance().getLM().getMessage(lm.Flag_havePrefix); - String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_denyPrefix); + String denyPrefix = Residence.getInstance().getLM().getMessage(lm.Flag_lackPrefix); synchronized (get) { Iterator> it = set.iterator(); From 1be1798902edf14690b43482539b5e8f8a31903b Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Aug 2022 16:05:01 +0300 Subject: [PATCH 0967/1142] Centralizing pagination method to be used from CMILib instead --- .../bukkit/residence/commands/lease.java | 340 +- .../residence/commands/placeholders.java | 2 +- .../bukkit/residence/commands/shop.java | 4 +- .../bukkit/residence/containers/lm.java | 15 - .../residence/economy/TransactionManager.java | 2 +- .../residence/economy/rent/RentManager.java | 1495 ++++---- .../bekvon/bukkit/residence/gui/FlagUtil.java | 167 +- .../bukkit/residence/gui/setFlagInfo.java | 1 - .../protection/ClaimedResidence.java | 3135 ++++++++--------- .../bukkit/residence/text/help/HelpEntry.java | 5 +- .../residence/text/help/InformationPager.java | 47 +- 11 files changed, 2567 insertions(+), 2646 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/lease.java b/src/com/bekvon/bukkit/residence/commands/lease.java index c7fce46d0..babdbdc0c 100644 --- a/src/com/bekvon/bukkit/residence/commands/lease.java +++ b/src/com/bekvon/bukkit/residence/commands/lease.java @@ -22,179 +22,179 @@ public class lease implements cmd { @Override @CommandAnnotation(simple = true, priority = 3900) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (args.length == 1 || args.length == 2 || args.length == 3) { - - if (args[0].equals("set")) { - if (!resadmin) { - plugin.msg(player, lm.General_NoPermission); - return true; - } - if (args[2].equals("infinite")) { - if (plugin.getLeaseManager().isLeased(plugin.getResidenceManager().getByName(args[1]))) { - plugin.getLeaseManager().removeExpireTime(plugin.getResidenceManager().getByName(args[1])); - plugin.msg(player, lm.Economy_LeaseInfinite); - } else { - plugin.msg(player, lm.Economy_LeaseNotExpire); - } - return true; - } - int days; - try { - days = Integer.parseInt(args[2]); - } catch (Exception ex) { - plugin.msg(player, lm.Invalid_Days); - return true; - } - plugin.getLeaseManager().setExpireTime(player, plugin.getResidenceManager().getByName(args[1]), days); - return true; - } - if (args[0].equals("expires")) { - ClaimedResidence res = null; - if (args.length == 1) { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - plugin.msg(player, lm.Residence_NotIn); - return true; - } - } else { - res = plugin.getResidenceManager().getByName(args[1]); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - } - - String until = plugin.getLeaseManager().getExpireTime(res); - if (until != null) - plugin.msg(player, lm.Economy_LeaseRenew, until); - return true; - } - if (args[0].equals("renew")) { - if (args.length == 2) { - plugin.getLeaseManager().renewArea(plugin.getResidenceManager().getByName(args[1]), player); - } else { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res != null) - plugin.getLeaseManager().renewArea(res, player); - else - return false; - } - return true; - } - if (args[0].equals("list")) { - ClaimedResidence res = null; - int page = -1; - if (args.length > 1) - try { - page = Integer.parseInt(args[1]); - } catch (Exception e) { - res = plugin.getResidenceManager().getByName(args[1]); - } - if (args.length > 2 && page == -1) - try { - page = Integer.parseInt(args[2]); - } catch (Exception e) { - res = plugin.getResidenceManager().getByName(args[2]); - } - - if (res == null) - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - - if (res == null) - return false; - - List list = new ArrayList(); - - if (plugin.getLeaseManager().isLeased(res)) - list.add(res); - - for (ClaimedResidence one : res.getSubzones()) { - if (plugin.getLeaseManager().isLeased(one)) - list.add(one); - } - - PageInfo pi = new PageInfo(3, list.size(), page); - - plugin.msg(player, lm.General_Separator); - for (ClaimedResidence one : list) { - if (!pi.isEntryOk()) - continue; - - if (pi.isBreak()) - break; - - if (res.isOwner(player)) - plugin.msg(player, lm.Economy_LeaseList, pi.getPositionForOutput(), one.getName(), plugin.getLeaseManager().getExpireTime(one), one.getOwner()); - else - plugin.msg(player, lm.Economy_LeaseList, pi.getPositionForOutput(), one.getName(), "", ""); - } - - plugin.getInfoPageManager().ShowPagination(sender, pi, "res lease list " + res.getName()); - - return true; - } - if (args[0].equals("cost")) { - if (args.length == 2) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); - if (res == null || plugin.getLeaseManager().isLeased(res)) { - double cost = plugin.getLeaseManager().getRenewCostD(res); - plugin.msg(player, lm.Economy_LeaseRenewalCost, args[1], plugin.getEconomyManager().format(cost)); - } else { - plugin.msg(player, lm.Economy_LeaseNotExpire); - } - return true; - } - ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - plugin.msg(player, lm.Invalid_Area); - return true; - } - String area = res.getName(); - if (plugin.getLeaseManager().isLeased(res)) { - double cost = plugin.getLeaseManager().getRenewCostD(res); - plugin.msg(player, lm.Economy_LeaseRenewalCost, area, plugin.getEconomyManager().format(cost)); - } else { - plugin.msg(player, lm.Economy_LeaseNotExpire); - } - return true; - } - } - return false; + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length == 1 || args.length == 2 || args.length == 3) { + + if (args[0].equals("set")) { + if (!resadmin) { + plugin.msg(player, lm.General_NoPermission); + return true; + } + if (args[2].equals("infinite")) { + if (plugin.getLeaseManager().isLeased(plugin.getResidenceManager().getByName(args[1]))) { + plugin.getLeaseManager().removeExpireTime(plugin.getResidenceManager().getByName(args[1])); + plugin.msg(player, lm.Economy_LeaseInfinite); + } else { + plugin.msg(player, lm.Economy_LeaseNotExpire); + } + return true; + } + int days; + try { + days = Integer.parseInt(args[2]); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Days); + return true; + } + plugin.getLeaseManager().setExpireTime(player, plugin.getResidenceManager().getByName(args[1]), days); + return true; + } + if (args[0].equals("expires")) { + ClaimedResidence res = null; + if (args.length == 1) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + plugin.msg(player, lm.Residence_NotIn); + return true; + } + } else { + res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + } + + String until = plugin.getLeaseManager().getExpireTime(res); + if (until != null) + plugin.msg(player, lm.Economy_LeaseRenew, until); + return true; + } + if (args[0].equals("renew")) { + if (args.length == 2) { + plugin.getLeaseManager().renewArea(plugin.getResidenceManager().getByName(args[1]), player); + } else { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res != null) + plugin.getLeaseManager().renewArea(res, player); + else + return false; + } + return true; + } + if (args[0].equals("list")) { + ClaimedResidence res = null; + int page = -1; + if (args.length > 1) + try { + page = Integer.parseInt(args[1]); + } catch (Exception e) { + res = plugin.getResidenceManager().getByName(args[1]); + } + if (args.length > 2 && page == -1) + try { + page = Integer.parseInt(args[2]); + } catch (Exception e) { + res = plugin.getResidenceManager().getByName(args[2]); + } + + if (res == null) + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + + if (res == null) + return false; + + List list = new ArrayList(); + + if (plugin.getLeaseManager().isLeased(res)) + list.add(res); + + for (ClaimedResidence one : res.getSubzones()) { + if (plugin.getLeaseManager().isLeased(one)) + list.add(one); + } + + PageInfo pi = new PageInfo(3, list.size(), page); + + plugin.msg(player, lm.General_Separator); + for (ClaimedResidence one : list) { + if (!pi.isEntryOk()) + continue; + + if (pi.isBreak()) + break; + + if (res.isOwner(player)) + plugin.msg(player, lm.Economy_LeaseList, pi.getPositionForOutput(), one.getName(), plugin.getLeaseManager().getExpireTime(one), one.getOwner()); + else + plugin.msg(player, lm.Economy_LeaseList, pi.getPositionForOutput(), one.getName(), "", ""); + } + + pi.autoPagination(sender, "res lease list " + res.getName()); + + return true; + } + if (args[0].equals("cost")) { + if (args.length == 2) { + ClaimedResidence res = plugin.getResidenceManager().getByName(args[1]); + if (res == null || plugin.getLeaseManager().isLeased(res)) { + double cost = plugin.getLeaseManager().getRenewCostD(res); + plugin.msg(player, lm.Economy_LeaseRenewalCost, args[1], plugin.getEconomyManager().format(cost)); + } else { + plugin.msg(player, lm.Economy_LeaseNotExpire); + } + return true; + } + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + plugin.msg(player, lm.Invalid_Area); + return true; + } + String area = res.getName(); + if (plugin.getLeaseManager().isLeased(res)) { + double cost = plugin.getLeaseManager().getRenewCostD(res); + plugin.msg(player, lm.Economy_LeaseRenewalCost, area, plugin.getEconomyManager().format(cost)); + } else { + plugin.msg(player, lm.Economy_LeaseNotExpire); + } + return true; + } + } + return false; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Manage residence leases"); - c.get("Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", - "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money.")); - - // Sub commands - c.setFullPath(c.getPath()+"SubCommands."); - c.get("set.Description", "Set the lease time"); - c.get("set.Info", Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", - "Sets the lease time to a specified number of days, or infinite.")); - LocaleManager.addTabCompleteSub(this, "set", "[residence]"); - - c.get("renew.Description", "Renew the lease time"); - c.get("renew.Info", Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence.")); - LocaleManager.addTabCompleteSub(this, "renew", "[residence]"); - - c.get("list.Description", "Show lease list of current residence"); - c.get("list.Info", Arrays.asList("&eUsage: &6/resadmin lease list ", "Prints out all subzones lease times")); - LocaleManager.addTabCompleteSub(this, "list", "[residence]"); - - c.get("expires.Description", "Lease end date"); - c.get("expires.Info", Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time.")); - LocaleManager.addTabCompleteSub(this, "expires", "[residence]"); - - c.get("cost.Description", "Shows renew cost"); - c.get("cost.Info", Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease.")); - LocaleManager.addTabCompleteSub(this, "cost", "[residence]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Manage residence leases"); + c.get("Info", Arrays.asList("&eUsage: &6/res lease [renew/cost] [residence]", + "/res lease cost will show the cost of renewing a residence lease.", "/res lease renew will renew the residence provided you have enough money.")); + + // Sub commands + c.setFullPath(c.getPath() + "SubCommands."); + c.get("set.Description", "Set the lease time"); + c.get("set.Info", Arrays.asList("&eUsage: &6/resadmin lease set [residence] [#days/infinite]", + "Sets the lease time to a specified number of days, or infinite.")); + LocaleManager.addTabCompleteSub(this, "set", "[residence]"); + + c.get("renew.Description", "Renew the lease time"); + c.get("renew.Info", Arrays.asList("&eUsage: &6/resadmin lease renew ", "Renews the lease time for current or specified residence.")); + LocaleManager.addTabCompleteSub(this, "renew", "[residence]"); + + c.get("list.Description", "Show lease list of current residence"); + c.get("list.Info", Arrays.asList("&eUsage: &6/resadmin lease list ", "Prints out all subzones lease times")); + LocaleManager.addTabCompleteSub(this, "list", "[residence]"); + + c.get("expires.Description", "Lease end date"); + c.get("expires.Info", Arrays.asList("&eUsage: &6/resadmin lease expires ", "Shows when expires residence lease time.")); + LocaleManager.addTabCompleteSub(this, "expires", "[residence]"); + + c.get("cost.Description", "Shows renew cost"); + c.get("cost.Info", Arrays.asList("&eUsage: &6/resadmin lease cost ", "Shows how much money you need to renew residence lease.")); + LocaleManager.addTabCompleteSub(this, "cost", "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/placeholders.java b/src/com/bekvon/bukkit/residence/commands/placeholders.java index 866685a8e..56a8a6dfa 100644 --- a/src/com/bekvon/bukkit/residence/commands/placeholders.java +++ b/src/com/bekvon/bukkit/residence/commands/placeholders.java @@ -84,7 +84,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } if (player != null) { - plugin.getInfoPageManager().ShowPagination(sender, pi, "res placeholders", "-p:"); + pi.autoPagination(sender, "res placeholders", "-p:"); } return true; diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 0382bcaec..85c898a91 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -123,7 +123,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo player.sendMessage(message); } - plugin.getInfoPageManager().ShowPagination(sender, pi, "/res shop votes " + res.getName()); + pi.autoPagination(sender, "/res shop votes " + res.getName()); return true; } @@ -181,7 +181,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo rm.show(sender); } - plugin.getInfoPageManager().ShowPagination(sender, pi, "/res shop list"); + pi.autoPagination(sender, "/res shop list"); return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 8f523832e..0d5192814 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -513,21 +513,6 @@ public enum lm { General_TotalSubzones("&eSubzones in residence: &6%1 &e(&6%2&e)"), General_NotOnline("&eTarget player must be online."), - General_prevPage("&2----<< &6Prev "), - General_prevPageGui("&6Previous page "), - General_prevPageClean("&6Prev "), - General_prevPageOff("&2----<< &7Prev "), - General_prevPageHover("&7<<<"), - General_firstPageHover("&7|<"), - General_nextPage("&6 Next &2>>----"), - General_nextPageGui("&6Next Page"), - General_nextPageClean("&6 Next"), - General_nextPageOff("&7 Next &2>>----"), - General_nextPageHover("&7>>>"), - General_lastPageHover("&7>|"), - General_pageCount("&2%1&7/&2%2"), - General_pageCountHover("&e%1 entries"), - General_GenericPages("&ePage &6%1 &eof &6%2 &e(&6%3&e)"), General_WorldEditNotFound("&cWorldEdit was not detected."), General_CoordsTop("&eX:&6%1 &eY:&6%2 &eZ:&6%3"), diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 80e4566b7..05af21153 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -366,7 +366,7 @@ public void printForSaleResidences(Player player, int page) { for (ClaimedResidence one : toRemove) { sellAmount.remove(one); } - plugin.getInfoPageManager().ShowPagination(player, pi, "/res market list sell"); + pi.autoPagination(player, "/res market list sell"); } public void clearSales() { diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 303e26085..4f5231e5f 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -36,989 +36,988 @@ public class RentManager implements MarketRentInterface { private Residence plugin; public RentManager(Residence plugin) { - this.plugin = plugin; - rentedLand = new HashSet(); - rentableLand = new HashSet(); + this.plugin = plugin; + rentedLand = new HashSet(); + rentableLand = new HashSet(); } @Override public RentedLand getRentedLand(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getRentedLand(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getRentedLand(res); } public RentedLand getRentedLand(ClaimedResidence res) { - if (res == null) - return null; - return res.isRented() ? res.getRentedLand() : null; + if (res == null) + return null; + return res.isRented() ? res.getRentedLand() : null; } @Override public List getRentedLands(String playername) { - return getRentedLands(playername, false); + return getRentedLands(playername, false); } public List getRentedLands(String playername, boolean onlyHidden) { - List rentedLands = new ArrayList(); - if (playername == null) - return rentedLands; - for (ClaimedResidence res : rentedLand) { - if (res == null) - continue; + List rentedLands = new ArrayList(); + if (playername == null) + return rentedLands; + for (ClaimedResidence res : rentedLand) { + if (res == null) + continue; - if (!res.isRented()) - continue; + if (!res.isRented()) + continue; - if (!res.getRentedLand().player.equals(playername)) - continue; + if (!res.getRentedLand().player.equals(playername)) + continue; - String world = " "; - ClaimedResidence topres = res.getTopParent(); - world = topres.getWorld(); + String world = " "; + ClaimedResidence topres = res.getTopParent(); + world = topres.getWorld(); - boolean hidden = topres.getPermissions().has("hidden", false); + boolean hidden = topres.getPermissions().has("hidden", false); - if (onlyHidden && !hidden) - continue; + if (onlyHidden && !hidden) + continue; - rentedLands.add(plugin.msg(lm.Residence_List, "", res.getName(), world) - + plugin.msg(lm.Rent_Rented)); - } - return rentedLands; + rentedLands.add(plugin.msg(lm.Residence_List, "", res.getName(), world) + + plugin.msg(lm.Rent_Rented)); + } + return rentedLands; } public List getRents(String playername) { - return getRents(playername, false); + return getRents(playername, false); } public List getRents(String playername, boolean onlyHidden) { - return getRents(playername, onlyHidden, null); + return getRents(playername, onlyHidden, null); } public List getRents(String playername, boolean onlyHidden, World world) { - List rentedLands = new ArrayList(); - for (ClaimedResidence res : rentedLand) { - if (res == null) - continue; + List rentedLands = new ArrayList(); + for (ClaimedResidence res : rentedLand) { + if (res == null) + continue; - if (!res.isRented()) - continue; + if (!res.isRented()) + continue; - if (!res.getRentedLand().player.equalsIgnoreCase(playername)) - continue; + if (!res.getRentedLand().player.equalsIgnoreCase(playername)) + continue; - ClaimedResidence topres = res.getTopParent(); + ClaimedResidence topres = res.getTopParent(); - boolean hidden = topres.getPermissions().has("hidden", false); + boolean hidden = topres.getPermissions().has("hidden", false); - if (onlyHidden && !hidden) - continue; + if (onlyHidden && !hidden) + continue; - if (world != null && !world.getName().equalsIgnoreCase(res.getWorld())) - continue; - rentedLands.add(res); - } - return rentedLands; + if (world != null && !world.getName().equalsIgnoreCase(res.getWorld())) + continue; + rentedLands.add(res); + } + return rentedLands; } public TreeMap getRentsMap(String playername, boolean onlyHidden, World world) { - TreeMap rentedLands = new TreeMap(); - for (ClaimedResidence res : rentedLand) { - if (res == null) - continue; + TreeMap rentedLands = new TreeMap(); + for (ClaimedResidence res : rentedLand) { + if (res == null) + continue; - if (!res.isRented()) - continue; + if (!res.isRented()) + continue; - if (!res.getRentedLand().player.equalsIgnoreCase(playername)) - continue; + if (!res.getRentedLand().player.equalsIgnoreCase(playername)) + continue; - ClaimedResidence topres = res.getTopParent(); + ClaimedResidence topres = res.getTopParent(); - boolean hidden = topres.getPermissions().has("hidden", false); + boolean hidden = topres.getPermissions().has("hidden", false); - if (onlyHidden && !hidden) - continue; + if (onlyHidden && !hidden) + continue; - if (world != null && !world.getName().equalsIgnoreCase(res.getWorld())) - continue; - rentedLands.put(res.getName(), res); - } - return rentedLands; + if (world != null && !world.getName().equalsIgnoreCase(res.getWorld())) + continue; + rentedLands.put(res.getName(), res); + } + return rentedLands; } public List getRentedLandsList(Player player) { - return getRentedLandsList(player.getName()); + return getRentedLandsList(player.getName()); } public List getRentedLandsList(String playername) { - List rentedLands = new ArrayList(); - for (ClaimedResidence res : rentedLand) { - if (res == null) - continue; - if (!res.isRented()) - continue; - if (!res.getRentedLand().player.equalsIgnoreCase(playername)) - continue; - rentedLands.add(res.getName()); - } - return rentedLands; + List rentedLands = new ArrayList(); + for (ClaimedResidence res : rentedLand) { + if (res == null) + continue; + if (!res.isRented()) + continue; + if (!res.getRentedLand().player.equalsIgnoreCase(playername)) + continue; + rentedLands.add(res.getName()); + } + return rentedLands; } @Override public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean resadmin) { - setForRent(player, landName, amount, days, AllowRenewing, plugin.getConfigManager().isRentStayInMarket(), resadmin); + setForRent(player, landName, amount, days, AllowRenewing, plugin.getConfigManager().isRentStayInMarket(), resadmin); } @Override public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean resadmin) { - setForRent(player, landName, amount, days, AllowRenewing, StayInMarket, plugin.getConfigManager().isRentAllowAutoPay(), resadmin); + setForRent(player, landName, amount, days, AllowRenewing, StayInMarket, plugin.getConfigManager().isRentAllowAutoPay(), resadmin); } @Override public void setForRent(Player player, String landName, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean AllowAutoPay, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - setForRent(player, res, amount, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + setForRent(player, res, amount, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); } public void setForRent(Player player, ClaimedResidence res, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean AllowAutoPay, - boolean resadmin) { - - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - if (res.getRaid().isRaidInitialized() && !resadmin) { - plugin.msg(player, lm.Raid_cantDo); - return; - } - - if (!plugin.getConfigManager().enabledRentSystem()) { - plugin.msg(player, lm.Economy_MarketDisabled); - return; - } - - if (res.isForSell() && !resadmin) { - plugin.msg(player, lm.Economy_SellRentFail); - return; - } - - if (res.isParentForSell() && !resadmin) { - plugin.msg(player, lm.Economy_ParentSellRentFail); - return; - } - - if (!resadmin) { - if (!res.getPermissions().hasResidencePermission(player, true)) { - plugin.msg(player, lm.General_NoPermission); - return; - } - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - - days = group.getMaxRentDays() < days ? group.getMaxRentDays() : days; - - if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { - plugin.msg(player, lm.Residence_MaxRent); - return; - } - } - - if (!rentableLand.contains(res)) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENTABLE); - plugin.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - return; - RentableLand newrent = new RentableLand(); - newrent.days = days; - newrent.cost = amount; - newrent.AllowRenewing = AllowRenewing; - newrent.StayInMarket = StayInMarket; - newrent.AllowAutoPay = AllowAutoPay; - res.setRentable(newrent); - rentableLand.add(res); - - plugin.getSignUtil().CheckSign(res); - - plugin.msg(player, lm.Residence_ForRentSuccess, res.getResidenceName(), amount, days); - } else { - plugin.msg(player, lm.Residence_AlreadyRent); - } + boolean resadmin) { + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + if (res.getRaid().isRaidInitialized() && !resadmin) { + plugin.msg(player, lm.Raid_cantDo); + return; + } + + if (!plugin.getConfigManager().enabledRentSystem()) { + plugin.msg(player, lm.Economy_MarketDisabled); + return; + } + + if (res.isForSell() && !resadmin) { + plugin.msg(player, lm.Economy_SellRentFail); + return; + } + + if (res.isParentForSell() && !resadmin) { + plugin.msg(player, lm.Economy_ParentSellRentFail); + return; + } + + if (!resadmin) { + if (!res.getPermissions().hasResidencePermission(player, true)) { + plugin.msg(player, lm.General_NoPermission); + return; + } + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + + days = group.getMaxRentDays() < days ? group.getMaxRentDays() : days; + + if (this.getRentableCount(player.getName()) >= group.getMaxRentables()) { + plugin.msg(player, lm.Residence_MaxRent); + return; + } + } + + if (!rentableLand.contains(res)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENTABLE); + plugin.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + RentableLand newrent = new RentableLand(); + newrent.days = days; + newrent.cost = amount; + newrent.AllowRenewing = AllowRenewing; + newrent.StayInMarket = StayInMarket; + newrent.AllowAutoPay = AllowAutoPay; + res.setRentable(newrent); + rentableLand.add(res); + + plugin.getSignUtil().CheckSign(res); + + plugin.msg(player, lm.Residence_ForRentSuccess, res.getResidenceName(), amount, days); + } else { + plugin.msg(player, lm.Residence_AlreadyRent); + } } @Override public void rent(Player player, String landName, boolean AutoPay, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - rent(player, res, AutoPay, resadmin); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + rent(player, res, AutoPay, resadmin); } @SuppressWarnings("deprecation") public void rent(Player player, ClaimedResidence res, boolean AutoPay, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - if (res.getRaid().isRaidInitialized() && !resadmin) { - plugin.msg(player, lm.Raid_cantDo); - return; - } - - if (!plugin.getConfigManager().enabledRentSystem()) { - plugin.msg(player, lm.Rent_Disabled); - return; - } - - if (res.isOwner(player)) { - plugin.msg(player, lm.Economy_OwnerRentFail); - return; - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - rPlayer.forceUpdateGroup(); - if (!resadmin && this.getRentCount(player.getName()) >= rPlayer.getMaxRents()) { - plugin.msg(player, lm.Residence_MaxRent); - return; - } - if (!res.isForRent()) { - plugin.msg(player, lm.Residence_NotForRent); - return; - } - if (res.isRented()) { - printRentInfo(player, res.getName()); - return; - } - - RentableLand land = res.getRentable(); - - if (plugin.getEconomyManager().canAfford(player.getName(), land.cost)) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); - plugin.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - return; - - if (!land.AllowAutoPay && AutoPay) { - plugin.msg(player, lm.Residence_CantAutoPay); - AutoPay = false; - } - - if (plugin.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { - RentedLand newrent = new RentedLand(); - newrent.player = player.getName(); - newrent.startTime = System.currentTimeMillis(); - newrent.endTime = System.currentTimeMillis() + daysToMs(land.days); - newrent.AutoPay = AutoPay; - res.setRented(newrent); - rentedLand.add(res); - - plugin.getSignUtil().CheckSign(res); - - Visualizer v = new Visualizer(player); - v.setAreas(res); - plugin.getSelectionManager().showBounds(player, v); - - res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); - res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); - res.getPermissions().applyDefaultRentedFlags(); - plugin.msg(player, lm.Residence_RentSuccess, res.getName(), land.days); - - if (plugin.getSchematicManager() != null && - plugin.getConfigManager().RestoreAfterRentEnds && - !plugin.getConfigManager().SchematicsSaveOnFlagChange && - res.getPermissions().has("backup", true)) { - plugin.getSchematicManager().save(res); - } - - } else { - player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); - } - } else { - plugin.msg(player, lm.Economy_NotEnoughMoney); - } + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + if (res.getRaid().isRaidInitialized() && !resadmin) { + plugin.msg(player, lm.Raid_cantDo); + return; + } + + if (!plugin.getConfigManager().enabledRentSystem()) { + plugin.msg(player, lm.Rent_Disabled); + return; + } + + if (res.isOwner(player)) { + plugin.msg(player, lm.Economy_OwnerRentFail); + return; + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + rPlayer.forceUpdateGroup(); + if (!resadmin && this.getRentCount(player.getName()) >= rPlayer.getMaxRents()) { + plugin.msg(player, lm.Residence_MaxRent); + return; + } + if (!res.isForRent()) { + plugin.msg(player, lm.Residence_NotForRent); + return; + } + if (res.isRented()) { + printRentInfo(player, res.getName()); + return; + } + + RentableLand land = res.getRentable(); + + if (plugin.getEconomyManager().canAfford(player.getName(), land.cost)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); + plugin.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + + if (!land.AllowAutoPay && AutoPay) { + plugin.msg(player, lm.Residence_CantAutoPay); + AutoPay = false; + } + + if (plugin.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { + RentedLand newrent = new RentedLand(); + newrent.player = player.getName(); + newrent.startTime = System.currentTimeMillis(); + newrent.endTime = System.currentTimeMillis() + daysToMs(land.days); + newrent.AutoPay = AutoPay; + res.setRented(newrent); + rentedLand.add(res); + + plugin.getSignUtil().CheckSign(res); + + Visualizer v = new Visualizer(player); + v.setAreas(res); + plugin.getSelectionManager().showBounds(player, v); + + res.getPermissions().copyUserPermissions(res.getPermissions().getOwner(), player.getName()); + res.getPermissions().clearPlayersFlags(res.getPermissions().getOwner()); + res.getPermissions().applyDefaultRentedFlags(); + plugin.msg(player, lm.Residence_RentSuccess, res.getName(), land.days); + + if (plugin.getSchematicManager() != null && + plugin.getConfigManager().RestoreAfterRentEnds && + !plugin.getConfigManager().SchematicsSaveOnFlagChange && + res.getPermissions().has("backup", true)) { + plugin.getSchematicManager().save(res); + } + + } else { + player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); + } + } else { + plugin.msg(player, lm.Economy_NotEnoughMoney); + } } public void payRent(Player player, String landName, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - payRent(player, res, resadmin); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + payRent(player, res, resadmin); } public void payRent(Player player, ClaimedResidence res, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - if (!plugin.getConfigManager().enabledRentSystem()) { - plugin.msg(player, lm.Rent_Disabled); - return; - } - - if (!res.isForRent()) { - plugin.msg(player, lm.Residence_NotForRent); - return; - } - - if (res.isRented() && !getRentingPlayer(res).equals(player.getName()) && !resadmin) { - plugin.msg(player, lm.Rent_NotByYou); - return; - } - - RentableLand land = res.getRentable(); - RentedLand rentedLand = res.getRentedLand(); - - if (rentedLand == null) { - plugin.msg(player, lm.Residence_NotRented); - return; - } - - if (!land.AllowRenewing) { - plugin.msg(player, lm.Rent_OneTime); - return; - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (!resadmin && group.getMaxRentDays() != -1 && - msToDays((rentedLand.endTime - System.currentTimeMillis()) + daysToMs(land.days)) >= group.getMaxRentDays()) { - plugin.msg(player, lm.Rent_MaxRentDays, group.getMaxRentDays()); - return; - } - - if (plugin.getEconomyManager().canAfford(player.getName(), land.cost)) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); - plugin.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - return; - if (plugin.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { - rentedLand.endTime = rentedLand.endTime + daysToMs(land.days); - plugin.getSignUtil().CheckSign(res); - - Visualizer v = new Visualizer(player); - v.setAreas(res); - plugin.getSelectionManager().showBounds(player, v); - - plugin.msg(player, lm.Rent_Extended, land.days, res.getName()); - plugin.msg(player, lm.Rent_Expire, GetTime.getTime(rentedLand.endTime)); - } else { - player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); - } - } else { - plugin.msg(player, lm.Economy_NotEnoughMoney); - } + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + if (!plugin.getConfigManager().enabledRentSystem()) { + plugin.msg(player, lm.Rent_Disabled); + return; + } + + if (!res.isForRent()) { + plugin.msg(player, lm.Residence_NotForRent); + return; + } + + if (res.isRented() && !getRentingPlayer(res).equals(player.getName()) && !resadmin) { + plugin.msg(player, lm.Rent_NotByYou); + return; + } + + RentableLand land = res.getRentable(); + RentedLand rentedLand = res.getRentedLand(); + + if (rentedLand == null) { + plugin.msg(player, lm.Residence_NotRented); + return; + } + + if (!land.AllowRenewing) { + plugin.msg(player, lm.Rent_OneTime); + return; + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (!resadmin && group.getMaxRentDays() != -1 && + msToDays((rentedLand.endTime - System.currentTimeMillis()) + daysToMs(land.days)) >= group.getMaxRentDays()) { + plugin.msg(player, lm.Rent_MaxRentDays, group.getMaxRentDays()); + return; + } + + if (plugin.getEconomyManager().canAfford(player.getName(), land.cost)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.RENT); + plugin.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + if (plugin.getEconomyManager().transfer(player.getName(), res.getPermissions().getOwner(), land.cost)) { + rentedLand.endTime = rentedLand.endTime + daysToMs(land.days); + plugin.getSignUtil().CheckSign(res); + + Visualizer v = new Visualizer(player); + v.setAreas(res); + plugin.getSelectionManager().showBounds(player, v); + + plugin.msg(player, lm.Rent_Extended, land.days, res.getName()); + plugin.msg(player, lm.Rent_Expire, GetTime.getTime(rentedLand.endTime)); + } else { + player.sendMessage(ChatColor.RED + "Error, unable to transfer money..."); + } + } else { + plugin.msg(player, lm.Economy_NotEnoughMoney); + } } @Override public void unrent(Player player, String landName, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - unrent(player, res, resadmin); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + unrent(player, res, resadmin); } public void unrent(Player player, ClaimedResidence res, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - if (res.getRaid().isRaidInitialized() && !resadmin) { - plugin.msg(player, lm.Raid_cantDo); - return; - } - - RentedLand rent = res.getRentedLand(); - if (rent == null) { - plugin.msg(player, lm.Residence_NotRented); - return; - } - - if (resadmin || rent.player.equals(player.getName()) || res.isOwner(player) && ResPerm.market_evict.hasPermission(player)) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENTABLE); - plugin.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - return; - - rentedLand.remove(res); - res.setRented(null); - if (!res.getRentable().AllowRenewing && !res.getRentable().StayInMarket) { - rentableLand.remove(res); - res.setRentable(null); - } - - boolean backup = res.getPermissions().has("backup", false); - - if (plugin.getConfigManager().isRemoveLwcOnUnrent() && plugin.isLwcPresent()) - ResidenceLWCListener.removeLwcFromResidence(player, res); - - res.getPermissions().applyDefaultFlags(); - - if (plugin.getSchematicManager() != null && plugin.getConfigManager().RestoreAfterRentEnds && backup) { - plugin.getSchematicManager().load(res); - // set true if its already exists - res.getPermissions().setFlag("backup", FlagState.TRUE); - } - plugin.getSignUtil().CheckSign(res); - - plugin.msg(player, lm.Residence_Unrent, res.getName()); - } else { - plugin.msg(player, lm.General_NoPermission); - } + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + if (res.getRaid().isRaidInitialized() && !resadmin) { + plugin.msg(player, lm.Raid_cantDo); + return; + } + + RentedLand rent = res.getRentedLand(); + if (rent == null) { + plugin.msg(player, lm.Residence_NotRented); + return; + } + + if (resadmin || rent.player.equals(player.getName()) || res.isOwner(player) && ResPerm.market_evict.hasPermission(player)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENTABLE); + plugin.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + + rentedLand.remove(res); + res.setRented(null); + if (!res.getRentable().AllowRenewing && !res.getRentable().StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + + boolean backup = res.getPermissions().has("backup", false); + + if (plugin.getConfigManager().isRemoveLwcOnUnrent() && plugin.isLwcPresent()) + ResidenceLWCListener.removeLwcFromResidence(player, res); + + res.getPermissions().applyDefaultFlags(); + + if (plugin.getSchematicManager() != null && plugin.getConfigManager().RestoreAfterRentEnds && backup) { + plugin.getSchematicManager().load(res); + // set true if its already exists + res.getPermissions().setFlag("backup", FlagState.TRUE); + } + plugin.getSignUtil().CheckSign(res); + + plugin.msg(player, lm.Residence_Unrent, res.getName()); + } else { + plugin.msg(player, lm.General_NoPermission); + } } private static long daysToMs(int days) { // return (((long) days) * 1000L); - return ((days) * 24L * 60L * 60L * 1000L); + return ((days) * 24L * 60L * 60L * 1000L); } private static int msToDays(long ms) { - return (int) Math.ceil((((ms / 1000D) / 60D) / 60D) / 24D); + return (int) Math.ceil((((ms / 1000D) / 60D) / 60D) / 24D); } @Override public void removeFromForRent(Player player, String landName, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - removeFromForRent(player, res, resadmin); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + removeFromForRent(player, res, resadmin); } public void removeFromForRent(Player player, ClaimedResidence res, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return; - } - - if (rentableLand.contains(res)) { - ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENT); - plugin.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - return; - rentableLand.remove(res); - res.setRentable(null); - res.getPermissions().applyDefaultFlags(); - plugin.getSignUtil().CheckSign(res); - plugin.msg(player, lm.Residence_RemoveRentable, res.getResidenceName()); - } else { - plugin.msg(player, lm.Residence_NotForRent); - } + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + if (!res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return; + } + + if (rentableLand.contains(res)) { + ResidenceRentEvent revent = new ResidenceRentEvent(res, player, RentEventType.UNRENT); + plugin.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + return; + rentableLand.remove(res); + res.setRentable(null); + res.getPermissions().applyDefaultFlags(); + plugin.getSignUtil().CheckSign(res); + plugin.msg(player, lm.Residence_RemoveRentable, res.getResidenceName()); + } else { + plugin.msg(player, lm.Residence_NotForRent); + } } @Override public void removeFromRent(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - removeFromRent(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + removeFromRent(res); } public void removeFromRent(ClaimedResidence res) { - rentedLand.remove(res); + rentedLand.remove(res); } @Override public void removeRentable(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - removeRentable(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + removeRentable(res); } public void removeRentable(ClaimedResidence res) { - if (res == null) - return; - removeFromRent(res); - rentableLand.remove(res); - plugin.getSignUtil().removeSign(res); + if (res == null) + return; + removeFromRent(res); + rentableLand.remove(res); + plugin.getSignUtil().removeSign(res); } @Override public boolean isForRent(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return isForRent(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return isForRent(res); } public boolean isForRent(ClaimedResidence res) { - if (res == null) - return false; - return rentableLand.contains(res); + if (res == null) + return false; + return rentableLand.contains(res); } public RentableLand getRentableLand(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getRentableLand(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getRentableLand(res); } public RentableLand getRentableLand(ClaimedResidence res) { - if (res == null) - return null; - if (res.isForRent()) - return res.getRentable(); - return null; + if (res == null) + return null; + if (res.isForRent()) + return res.getRentable(); + return null; } @Override public boolean isRented(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return isRented(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return isRented(res); } public boolean isRented(ClaimedResidence res) { - if (res == null) - return false; - return rentedLand.contains(res); + if (res == null) + return false; + return rentedLand.contains(res); } @Override public String getRentingPlayer(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getRentingPlayer(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getRentingPlayer(res); } public String getRentingPlayer(ClaimedResidence res) { - if (res == null) - return null; - return res.isRented() ? res.getRentedLand().player : null; + if (res == null) + return null; + return res.isRented() ? res.getRentedLand().player : null; } @Override public int getCostOfRent(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getCostOfRent(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getCostOfRent(res); } public int getCostOfRent(ClaimedResidence res) { - if (res == null) - return 0; - return res.isForRent() ? res.getRentable().cost : 0; + if (res == null) + return 0; + return res.isForRent() ? res.getRentable().cost : 0; } @Override public boolean getRentableRepeatable(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getRentableRepeatable(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getRentableRepeatable(res); } public boolean getRentableRepeatable(ClaimedResidence res) { - if (res == null) - return false; - return res.isForRent() ? res.getRentable().AllowRenewing : false; + if (res == null) + return false; + return res.isForRent() ? res.getRentable().AllowRenewing : false; } @Override public boolean getRentedAutoRepeats(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getRentedAutoRepeats(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getRentedAutoRepeats(res); } public boolean getRentedAutoRepeats(ClaimedResidence res) { - if (res == null) - return false; - return getRentableRepeatable(res) ? (rentedLand.contains(res) ? res.getRentedLand().AutoPay : false) : false; + if (res == null) + return false; + return getRentableRepeatable(res) ? (rentedLand.contains(res) ? res.getRentedLand().AutoPay : false) : false; } @Override public int getRentDays(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return getRentDays(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + return getRentDays(res); } public int getRentDays(ClaimedResidence res) { - if (res == null) - return 0; - return res.isForRent() ? res.getRentable().days : 0; + if (res == null) + return 0; + return res.isForRent() ? res.getRentable().days : 0; } @Override public void checkCurrentRents() { - Set t = new HashSet(); - t.addAll(rentedLand); - for (ClaimedResidence res : t) { - - if (res == null) - continue; - - RentedLand land = res.getRentedLand(); - if (land == null) - continue; - - if (land.endTime > System.currentTimeMillis()) - continue; - - if (plugin.getConfigManager().debugEnabled()) - System.out.println("Rent Check: " + res.getName()); - - ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); - plugin.getServ().getPluginManager().callEvent(revent); - if (revent.isCancelled()) - continue; - - RentableLand rentable = res.getRentable(); - if (!rentable.AllowRenewing) { - if (!rentable.StayInMarket) { - rentableLand.remove(res); - res.setRentable(null); - } - rentedLand.remove(res); - res.setRented(null); - res.getPermissions().applyDefaultFlags(); - plugin.getSignUtil().CheckSign(res); - continue; - } - if (land.AutoPay && rentable.AllowAutoPay) { - - Double money = 0D; - if (plugin.getConfigManager().isDeductFromBankThenPlayer()) { - money += res.getBank().getStoredMoneyD(); - money += plugin.getEconomyManager().getBalance(land.player); - } else if (plugin.getConfigManager().isDeductFromBank()) { - money += res.getBank().getStoredMoneyD(); - } else { - money += plugin.getEconomyManager().getBalance(land.player); - } - - if (money < rentable.cost) { - if (!rentable.StayInMarket) { - rentableLand.remove(res); - res.setRentable(null); - } - rentedLand.remove(res); - res.setRented(null); - res.getPermissions().applyDefaultFlags(); - } else { - - boolean updatedTime = true; - if (plugin.getConfigManager().isDeductFromBankThenPlayer()) { - double deductFromPlayer = rentable.cost; - double leftInBank = res.getBank().getStoredMoneyD(); - if (leftInBank < deductFromPlayer) { - deductFromPlayer = deductFromPlayer - leftInBank; - leftInBank = 0D; - } else { - leftInBank = leftInBank - deductFromPlayer; - deductFromPlayer = 0D; - } - leftInBank = leftInBank < 0 ? 0 : leftInBank; - - if (plugin.getEconomyManager().getBalance(land.player) < deductFromPlayer) { - updatedTime = false; - } else { - if (deductFromPlayer == 0D || plugin.getEconomyManager().subtract(land.player, deductFromPlayer)) { - plugin.getEconomyManager().add(res.getPermissions().getOwner(), rentable.cost); - res.getBank().setStoredMoney(leftInBank); - updatedTime = true; - } - } - } else if (plugin.getConfigManager().isDeductFromBank()) { - double deductFromPlayer = rentable.cost; - double leftInBank = res.getBank().getStoredMoneyD(); - if (leftInBank < deductFromPlayer) { - updatedTime = false; - } else { - res.getBank().setStoredMoney(leftInBank - deductFromPlayer); - plugin.getEconomyManager().add(res.getPermissions().getOwner(), rentable.cost); - updatedTime = true; - } - } else { - updatedTime = plugin.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost); - } - - if (!updatedTime) { - if (!rentable.StayInMarket) { - rentableLand.remove(res); - res.setRentable(null); - } - rentedLand.remove(res); - res.setRented(null); - res.getPermissions().applyDefaultFlags(); - } else { - land.endTime = System.currentTimeMillis() + daysToMs(rentable.days); - } - } - - plugin.getSignUtil().CheckSign(res); - continue; - } - if (!rentable.StayInMarket) { - rentableLand.remove(res); - res.setRentable(null); - } - rentedLand.remove(res); - res.setRented(null); - - boolean backup = res.getPermissions().has("backup", false); - - res.getPermissions().applyDefaultFlags(); - - if (plugin.getSchematicManager() != null && plugin.getConfigManager().RestoreAfterRentEnds && backup) { - plugin.getSchematicManager().load(res); - plugin.getSignUtil().CheckSign(res); - // set true if its already exists - res.getPermissions().setFlag("backup", FlagState.TRUE); - // To avoid lag spikes on multiple residence restores at once, will limit to one residence at time - break; - } - plugin.getSignUtil().CheckSign(res); - } + Set t = new HashSet(); + t.addAll(rentedLand); + for (ClaimedResidence res : t) { + + if (res == null) + continue; + + RentedLand land = res.getRentedLand(); + if (land == null) + continue; + + if (land.endTime > System.currentTimeMillis()) + continue; + + if (plugin.getConfigManager().debugEnabled()) + System.out.println("Rent Check: " + res.getName()); + + ResidenceRentEvent revent = new ResidenceRentEvent(res, null, RentEventType.RENT_EXPIRE); + plugin.getServ().getPluginManager().callEvent(revent); + if (revent.isCancelled()) + continue; + + RentableLand rentable = res.getRentable(); + if (!rentable.AllowRenewing) { + if (!rentable.StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + rentedLand.remove(res); + res.setRented(null); + res.getPermissions().applyDefaultFlags(); + plugin.getSignUtil().CheckSign(res); + continue; + } + if (land.AutoPay && rentable.AllowAutoPay) { + + Double money = 0D; + if (plugin.getConfigManager().isDeductFromBankThenPlayer()) { + money += res.getBank().getStoredMoneyD(); + money += plugin.getEconomyManager().getBalance(land.player); + } else if (plugin.getConfigManager().isDeductFromBank()) { + money += res.getBank().getStoredMoneyD(); + } else { + money += plugin.getEconomyManager().getBalance(land.player); + } + + if (money < rentable.cost) { + if (!rentable.StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + rentedLand.remove(res); + res.setRented(null); + res.getPermissions().applyDefaultFlags(); + } else { + + boolean updatedTime = true; + if (plugin.getConfigManager().isDeductFromBankThenPlayer()) { + double deductFromPlayer = rentable.cost; + double leftInBank = res.getBank().getStoredMoneyD(); + if (leftInBank < deductFromPlayer) { + deductFromPlayer = deductFromPlayer - leftInBank; + leftInBank = 0D; + } else { + leftInBank = leftInBank - deductFromPlayer; + deductFromPlayer = 0D; + } + leftInBank = leftInBank < 0 ? 0 : leftInBank; + + if (plugin.getEconomyManager().getBalance(land.player) < deductFromPlayer) { + updatedTime = false; + } else { + if (deductFromPlayer == 0D || plugin.getEconomyManager().subtract(land.player, deductFromPlayer)) { + plugin.getEconomyManager().add(res.getPermissions().getOwner(), rentable.cost); + res.getBank().setStoredMoney(leftInBank); + updatedTime = true; + } + } + } else if (plugin.getConfigManager().isDeductFromBank()) { + double deductFromPlayer = rentable.cost; + double leftInBank = res.getBank().getStoredMoneyD(); + if (leftInBank < deductFromPlayer) { + updatedTime = false; + } else { + res.getBank().setStoredMoney(leftInBank - deductFromPlayer); + plugin.getEconomyManager().add(res.getPermissions().getOwner(), rentable.cost); + updatedTime = true; + } + } else { + updatedTime = plugin.getEconomyManager().transfer(land.player, res.getPermissions().getOwner(), rentable.cost); + } + + if (!updatedTime) { + if (!rentable.StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + rentedLand.remove(res); + res.setRented(null); + res.getPermissions().applyDefaultFlags(); + } else { + land.endTime = System.currentTimeMillis() + daysToMs(rentable.days); + } + } + + plugin.getSignUtil().CheckSign(res); + continue; + } + if (!rentable.StayInMarket) { + rentableLand.remove(res); + res.setRentable(null); + } + rentedLand.remove(res); + res.setRented(null); + + boolean backup = res.getPermissions().has("backup", false); + + res.getPermissions().applyDefaultFlags(); + + if (plugin.getSchematicManager() != null && plugin.getConfigManager().RestoreAfterRentEnds && backup) { + plugin.getSchematicManager().load(res); + plugin.getSignUtil().CheckSign(res); + // set true if its already exists + res.getPermissions().setFlag("backup", FlagState.TRUE); + // To avoid lag spikes on multiple residence restores at once, will limit to one residence at time + break; + } + plugin.getSignUtil().CheckSign(res); + } } @Override public void setRentRepeatable(Player player, String landName, boolean value, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - setRentRepeatable(player, res, value, resadmin); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + setRentRepeatable(player, res, value, resadmin); } public void setRentRepeatable(Player player, ClaimedResidence res, boolean value, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } - RentableLand land = res.getRentable(); + RentableLand land = res.getRentable(); - if (!res.isOwner(player) && !resadmin) { - plugin.msg(player, lm.Residence_NotOwner); - return; - } + if (!res.isOwner(player) && !resadmin) { + plugin.msg(player, lm.Residence_NotOwner); + return; + } - if (land == null || !res.isOwner(player) && !resadmin) { - plugin.msg(player, lm.Residence_NotOwner); - return; - } + if (land == null || !res.isOwner(player) && !resadmin) { + plugin.msg(player, lm.Residence_NotOwner); + return; + } - land.AllowRenewing = value; - if (!value && this.isRented(res)) - res.getRentedLand().AutoPay = false; + land.AllowRenewing = value; + if (!value && this.isRented(res)) + res.getRentedLand().AutoPay = false; - if (value) - plugin.msg(player, lm.Rentable_EnableRenew, res.getResidenceName()); - else - plugin.msg(player, lm.Rentable_DisableRenew, res.getResidenceName()); + if (value) + plugin.msg(player, lm.Rentable_EnableRenew, res.getResidenceName()); + else + plugin.msg(player, lm.Rentable_DisableRenew, res.getResidenceName()); } @Override public void setRentedRepeatable(Player player, String landName, boolean value, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - setRentedRepeatable(player, res, value, resadmin); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + setRentedRepeatable(player, res, value, resadmin); } public void setRentedRepeatable(Player player, ClaimedResidence res, boolean value, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - RentedLand land = res.getRentedLand(); - - if (land == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - if (!res.getRentable().AllowAutoPay && value) { - plugin.msg(player, lm.Residence_CantAutoPay); - return; - } - - if (!land.player.equals(player.getName()) && !resadmin) { - plugin.msg(player, lm.Residence_NotOwner); - return; - } - - if (!land.player.equals(player.getName()) && !resadmin) { - plugin.msg(player, lm.Residence_NotOwner); - return; - } - - land.AutoPay = value; - if (value) - plugin.msg(player, lm.Rent_EnableRenew, res.getResidenceName()); - else - plugin.msg(player, lm.Rent_DisableRenew, res.getResidenceName()); - - plugin.getSignUtil().CheckSign(res); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + RentedLand land = res.getRentedLand(); + + if (land == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + if (!res.getRentable().AllowAutoPay && value) { + plugin.msg(player, lm.Residence_CantAutoPay); + return; + } + + if (!land.player.equals(player.getName()) && !resadmin) { + plugin.msg(player, lm.Residence_NotOwner); + return; + } + + if (!land.player.equals(player.getName()) && !resadmin) { + plugin.msg(player, lm.Residence_NotOwner); + return; + } + + land.AutoPay = value; + if (value) + plugin.msg(player, lm.Rent_EnableRenew, res.getResidenceName()); + else + plugin.msg(player, lm.Rent_DisableRenew, res.getResidenceName()); + + plugin.getSignUtil().CheckSign(res); } public void printRentInfo(Player player, String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - printRentInfo(player, res); + ClaimedResidence res = plugin.getResidenceManager().getByName(landName); + printRentInfo(player, res); } public void printRentInfo(Player player, ClaimedResidence res) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - RentableLand rentable = res.getRentable(); - RentedLand rented = res.getRentedLand(); - if (rentable != null) { - plugin.msg(player, lm.General_Separator); - plugin.msg(player, lm.General_Land, res.getName()); - plugin.msg(player, lm.General_Cost, rentable.cost, rentable.days); - plugin.msg(player, lm.Rentable_AllowRenewing, rentable.AllowRenewing); - plugin.msg(player, lm.Rentable_StayInMarket, rentable.StayInMarket); - plugin.msg(player, lm.Rentable_AllowAutoPay, rentable.AllowAutoPay); - if (rented != null) { - plugin.msg(player, lm.Residence_RentedBy, rented.player); - - if (rented.player.equals(player.getName()) || res.isOwner(player) || plugin.isResAdminOn(player)) - player.sendMessage((rented.AutoPay ? plugin.msg(lm.Rent_AutoPayTurnedOn) : plugin.msg(lm.Rent_AutoPayTurnedOff)) - + "\n"); - plugin.msg(player, lm.Rent_Expire, GetTime.getTime(rented.endTime)); - } else { - plugin.msg(player, lm.General_Status, plugin.msg(lm.General_Available)); - } - plugin.msg(player, lm.General_Separator); - } else { - plugin.msg(player, lm.General_Separator); - plugin.msg(player, lm.Residence_NotForRent); - plugin.msg(player, lm.General_Separator); - } + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + RentableLand rentable = res.getRentable(); + RentedLand rented = res.getRentedLand(); + if (rentable != null) { + plugin.msg(player, lm.General_Separator); + plugin.msg(player, lm.General_Land, res.getName()); + plugin.msg(player, lm.General_Cost, rentable.cost, rentable.days); + plugin.msg(player, lm.Rentable_AllowRenewing, rentable.AllowRenewing); + plugin.msg(player, lm.Rentable_StayInMarket, rentable.StayInMarket); + plugin.msg(player, lm.Rentable_AllowAutoPay, rentable.AllowAutoPay); + if (rented != null) { + plugin.msg(player, lm.Residence_RentedBy, rented.player); + + if (rented.player.equals(player.getName()) || res.isOwner(player) || plugin.isResAdminOn(player)) + player.sendMessage((rented.AutoPay ? plugin.msg(lm.Rent_AutoPayTurnedOn) : plugin.msg(lm.Rent_AutoPayTurnedOff)) + + "\n"); + plugin.msg(player, lm.Rent_Expire, GetTime.getTime(rented.endTime)); + } else { + plugin.msg(player, lm.General_Status, plugin.msg(lm.General_Available)); + } + plugin.msg(player, lm.General_Separator); + } else { + plugin.msg(player, lm.General_Separator); + plugin.msg(player, lm.Residence_NotForRent); + plugin.msg(player, lm.General_Separator); + } } public void printRentableResidences(Player player, int page) { - plugin.msg(player, lm.Rentable_Land); - StringBuilder sbuild = new StringBuilder(); - sbuild.append(ChatColor.GREEN); - - PageInfo pi = new PageInfo(10, rentableLand.size(), page); - int position = -1; - for (ClaimedResidence res : rentableLand) { - if (res == null) - continue; - - position++; - - if (position > pi.getEnd()) - break; - if (!pi.isInRange(position)) - continue; - boolean rented = res.isRented(); - - if (!res.getRentable().AllowRenewing && rented) - continue; - - String rentedBy = ""; - String hover = ""; - if (rented) { - RentedLand rent = res.getRentedLand(); - rentedBy = plugin.msg(lm.Residence_RentedBy, rent.player); - hover = GetTime.getTime(rent.endTime); - } - - String msg = plugin.msg(lm.Rent_RentList, pi.getPositionForOutput(position), res.getName(), res.getRentable().cost, res.getRentable().days, res.getRentable().AllowRenewing, - res.getOwner(), rentedBy); - - RawMessage rm = new RawMessage(); - rm.addText(msg).addHover("&2" + hover); - - if (!hover.equalsIgnoreCase("")) { - rm.show(player); - } else { - player.sendMessage(msg); - } - } - - plugin.getInfoPageManager().ShowPagination(player, pi, "/res market list rent"); + plugin.msg(player, lm.Rentable_Land); + StringBuilder sbuild = new StringBuilder(); + sbuild.append(ChatColor.GREEN); + + PageInfo pi = new PageInfo(10, rentableLand.size(), page); + int position = -1; + for (ClaimedResidence res : rentableLand) { + if (res == null) + continue; + + position++; + + if (position > pi.getEnd()) + break; + if (!pi.isInRange(position)) + continue; + boolean rented = res.isRented(); + + if (!res.getRentable().AllowRenewing && rented) + continue; + + String rentedBy = ""; + String hover = ""; + if (rented) { + RentedLand rent = res.getRentedLand(); + rentedBy = plugin.msg(lm.Residence_RentedBy, rent.player); + hover = GetTime.getTime(rent.endTime); + } + + String msg = plugin.msg(lm.Rent_RentList, pi.getPositionForOutput(position), res.getName(), res.getRentable().cost, res.getRentable().days, res.getRentable().AllowRenewing, + res.getOwner(), rentedBy); + + RawMessage rm = new RawMessage(); + rm.addText(msg).addHover("&2" + hover); + + if (!hover.equalsIgnoreCase("")) { + rm.show(player); + } else { + player.sendMessage(msg); + } + } + pi.autoPagination(player, "/res market list rent"); } @Override public int getRentCount(String player) { - int count = 0; - for (ClaimedResidence res : rentedLand) { - if (res.getRentedLand().player.equalsIgnoreCase(player)) - count++; - } - return count; + int count = 0; + for (ClaimedResidence res : rentedLand) { + if (res.getRentedLand().player.equalsIgnoreCase(player)) + count++; + } + return count; } @Override public int getRentableCount(String player) { - int count = 0; - for (ClaimedResidence res : rentableLand) { - if (res != null) - if (res.isOwner(player)) - count++; - } - return count; + int count = 0; + for (ClaimedResidence res : rentableLand) { + if (res != null) + if (res.isOwner(player)) + count++; + } + return count; } @Override public Set getRentableResidences() { - return rentableLand; + return rentableLand; } @Override public Set getCurrentlyRentedResidences() { - return rentedLand; + return rentedLand; } @SuppressWarnings("unchecked") public void load(Map root) { - if (root == null) - return; - this.rentableLand.clear(); - - Map rentables = (Map) root.get("Rentables"); - for (Entry rent : rentables.entrySet()) { - RentableLand one = loadRentable((Map) rent.getValue()); - ClaimedResidence res = plugin.getResidenceManager().getByName(rent.getKey()); - if (res != null) { - res.setRentable(one); - this.rentableLand.add(res); - } - } - Map rented = (Map) root.get("Rented"); - for (Entry rent : rented.entrySet()) { - RentedLand one = loadRented((Map) rent.getValue()); - ClaimedResidence res = plugin.getResidenceManager().getByName(rent.getKey()); - if (res != null) { - res.setRented(one); - this.rentedLand.add(res); - } - } + if (root == null) + return; + this.rentableLand.clear(); + + Map rentables = (Map) root.get("Rentables"); + for (Entry rent : rentables.entrySet()) { + RentableLand one = loadRentable((Map) rent.getValue()); + ClaimedResidence res = plugin.getResidenceManager().getByName(rent.getKey()); + if (res != null) { + res.setRentable(one); + this.rentableLand.add(res); + } + } + Map rented = (Map) root.get("Rented"); + for (Entry rent : rented.entrySet()) { + RentedLand one = loadRented((Map) rent.getValue()); + ClaimedResidence res = plugin.getResidenceManager().getByName(rent.getKey()); + if (res != null) { + res.setRented(one); + this.rentedLand.add(res); + } + } } public Map save() { - Map root = new HashMap(); - Map rentables = new HashMap(); - for (ClaimedResidence res : rentableLand) { - if (res == null || res.getRentable() == null) - continue; - rentables.put(res.getName(), res.getRentable().save()); - } - Map rented = new HashMap(); - for (ClaimedResidence res : rentedLand) { - if (res == null || res.getRentedLand() == null) - continue; - rented.put(res.getName(), res.getRentedLand().save()); - } - root.put("Rentables", rentables); - root.put("Rented", rented); - return root; + Map root = new HashMap(); + Map rentables = new HashMap(); + for (ClaimedResidence res : rentableLand) { + if (res == null || res.getRentable() == null) + continue; + rentables.put(res.getName(), res.getRentable().save()); + } + Map rented = new HashMap(); + for (ClaimedResidence res : rentedLand) { + if (res == null || res.getRentedLand() == null) + continue; + rented.put(res.getName(), res.getRentedLand().save()); + } + root.put("Rentables", rentables); + root.put("Rented", rented); + return root; } private static RentableLand loadRentable(Map map) { - RentableLand newland = new RentableLand(); - newland.cost = (Integer) map.get("Cost"); - newland.days = (Integer) map.get("Days"); - newland.AllowRenewing = (Boolean) map.get("Repeatable"); - if (map.containsKey("StayInMarket")) - newland.StayInMarket = (Boolean) map.get("StayInMarket"); - if (map.containsKey("AllowAutoPay")) - newland.AllowAutoPay = (Boolean) map.get("AllowAutoPay"); - return newland; + RentableLand newland = new RentableLand(); + newland.cost = (Integer) map.get("Cost"); + newland.days = (Integer) map.get("Days"); + newland.AllowRenewing = (Boolean) map.get("Repeatable"); + if (map.containsKey("StayInMarket")) + newland.StayInMarket = (Boolean) map.get("StayInMarket"); + if (map.containsKey("AllowAutoPay")) + newland.AllowAutoPay = (Boolean) map.get("AllowAutoPay"); + return newland; } private static RentedLand loadRented(Map map) { - RentedLand newland = new RentedLand(); - newland.player = (String) map.get("Player"); - newland.startTime = (Long) map.get("StartTime"); - newland.endTime = (Long) map.get("EndTime"); - newland.AutoPay = (Boolean) map.get("AutoRefresh"); - return newland; + RentedLand newland = new RentedLand(); + newland.player = (String) map.get("Player"); + newland.startTime = (Long) map.get("StartTime"); + newland.endTime = (Long) map.get("EndTime"); + newland.AutoPay = (Boolean) map.get("AutoRefresh"); + return newland; } } diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 52524f749..4282ddf9c 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -28,117 +28,96 @@ public class FlagUtil { private Residence plugin; public FlagUtil(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } public void load() { - ConfigReader c = null; - try { - c = new ConfigReader(Residence.getInstance(), "flags.yml"); - } catch (Exception e1) { - e1.printStackTrace(); - } - - if (c != null) { - if (!c.getC().isConfigurationSection("Global.FlagPermission")) - return; - - Set allFlags = c.getC().getConfigurationSection("Global.FlagPermission").getKeys(false); - - for (String oneFlag : allFlags) { - if (!c.getC().contains("Global.FlagGui." + oneFlag)) - continue; - String value = c.get("Global.FlagGui." + oneFlag, "WHITE_WOOL"); - value = value.replace("-", ":"); - - CMIAsyncHead ahead = new CMIAsyncHead() { - @Override - public void afterAsyncUpdate(ItemStack item) { - Bukkit.getScheduler().runTask(CMI.getInstance(), () -> { - flagData.addFlagButton(oneFlag.toLowerCase(), item); - }); - } - }; - - CMIItemStack i = CMILib.getInstance().getItemManager().getItem(value, ahead); - - if (i == null) - i = new CMIItemStack(CMIMaterial.STONE); - - ItemStack item = i.getItemStack(); - flagData.addFlagButton(oneFlag.toLowerCase(), item); - } - } + ConfigReader c = null; + try { + c = new ConfigReader(Residence.getInstance(), "flags.yml"); + } catch (Exception e1) { + e1.printStackTrace(); + } + + if (c != null) { + if (!c.getC().isConfigurationSection("Global.FlagPermission")) + return; + + Set allFlags = c.getC().getConfigurationSection("Global.FlagPermission").getKeys(false); + + for (String oneFlag : allFlags) { + if (!c.getC().contains("Global.FlagGui." + oneFlag)) + continue; + String value = c.get("Global.FlagGui." + oneFlag, "WHITE_WOOL"); + value = value.replace("-", ":"); + + CMIAsyncHead ahead = new CMIAsyncHead() { + @Override + public void afterAsyncUpdate(ItemStack item) { + Bukkit.getScheduler().runTask(CMI.getInstance(), () -> { + flagData.addFlagButton(oneFlag.toLowerCase(), item); + }); + } + }; + + CMIItemStack i = CMILib.getInstance().getItemManager().getItem(value, ahead); + + if (i == null) + i = new CMIItemStack(CMIMaterial.STONE); + + ItemStack item = i.getItemStack(); + flagData.addFlagButton(oneFlag.toLowerCase(), item); + } + } } public void openPsetFlagGui(Player player, String targetPlayer, ClaimedResidence res, boolean resadmin, int page) { - if (player == null || !player.isOnline()) - return; + if (player == null || !player.isOnline()) + return; - setFlagInfo flag = new setFlagInfo(res, player, targetPlayer, resadmin); - flag.recalculate(); + setFlagInfo flag = new setFlagInfo(res, player, targetPlayer, resadmin); + flag.recalculate(); - PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); - openUI(flag, pi, player, Residence.getInstance().msg(lm.Gui_Pset_Title, res.getName(), targetPlayer)); - return; + PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); + openUI(flag, pi, player, Residence.getInstance().msg(lm.Gui_Pset_Title, res.getName(), targetPlayer)); + return; } private void openUI(setFlagInfo flag, PageInfo pi, Player player, String title) { - CMIGui gui = new CMIGui(player); - gui.setTitle(title); - gui.setInvSize(GUIRows.r6); - - if (pi.getTotalPages() > 1) { - CMIGuiButton forward = new CMIGuiButton(53, CMILib.getInstance().getConfigManager().getGUINextPage()) { - @Override - public void click(GUIClickType type) { - if (pi.getCurrentPage() == pi.getTotalPages()) - openUI(flag, new PageInfo(45, flag.getButtons().size(), 1), player, title); - else - openUI(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() + 1), player, title); - } - }; - forward.setName(Residence.getInstance().msg(lm.General_nextPageGui)); - gui.addButton(forward); - } - - if (pi.getTotalPages() > 1) { - CMIGuiButton back = new CMIGuiButton(45, CMILib.getInstance().getConfigManager().getGUIPreviousPage()) { - @Override - public void click(GUIClickType type) { - - if (pi.getCurrentPage() == 1) - openUI(flag, new PageInfo(45, flag.getButtons().size(), pi.getTotalPages()), player, title); - else - openUI(flag, new PageInfo(45, flag.getButtons().size(), pi.getCurrentPage() - 1), player, title); - } - }; - back.setName(Residence.getInstance().msg(lm.General_prevPageGui)); - gui.addButton(back); - } - - for (CMIGuiButton one : flag.getButtons()) { - if (pi.isContinue()) - continue; - if (pi.isBreak()) - break; - gui.addButton(one); - } - gui.fillEmptyButtons(); - gui.open(); + CMIGui gui = new CMIGui(player) { + @Override + public void pageChange(int page) { + openUI(flag, new PageInfo(45, flag.getButtons().size(), page), player, title); + } + }; + gui.setTitle(title); + gui.setInvSize(GUIRows.r6); + + for (CMIGuiButton one : flag.getButtons()) { + if (pi.isContinue()) + continue; + if (pi.isBreak()) + break; + gui.addButton(one); + } + gui.addPagination(pi); + + gui.fillEmptyButtons(); + gui.open(); + } public void openSetFlagGui(Player player, ClaimedResidence res, boolean resadmin, int page) { - if (player == null || !player.isOnline()) - return; - setFlagInfo flag = new setFlagInfo(res, player, resadmin); - flag.recalculate(); - PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); - openUI(flag, pi, player, plugin.msg(lm.Gui_Set_Title, res.getName())); + if (player == null || !player.isOnline()) + return; + setFlagInfo flag = new setFlagInfo(res, player, resadmin); + flag.recalculate(); + PageInfo pi = new PageInfo(45, flag.getButtons().size(), page); + openUI(flag, pi, player, plugin.msg(lm.Gui_Set_Title, res.getName())); } public FlagData getFlagData() { - return flagData; + return flagData; } } diff --git a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java index b51f3587b..fa64cfb24 100644 --- a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java +++ b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java @@ -26,7 +26,6 @@ import net.Zrips.CMILib.GUI.CMIGuiButton; import net.Zrips.CMILib.GUI.GUIManager.GUIClickType; -import net.Zrips.CMILib.Logs.CMIDebug; public class setFlagInfo { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index fbebacbee..9f37a34bd 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -104,1160 +104,1159 @@ public class ClaimedResidence { private Set signsInResidence = new HashSet(); public String getResidenceName() { - return resName; + return resName; } public void setName(String name) { - if (name.contains(".")) - resName = name.split("\\.")[name.split("\\.").length - 1]; - else - resName = name; + if (name.contains(".")) + resName = name.split("\\.")[name.split("\\.").length - 1]; + else + resName = name; } public void setCreateTime() { - createTime = System.currentTimeMillis(); + createTime = System.currentTimeMillis(); } public long getCreateTime() { - return createTime; + return createTime; } public Integer getSellPrice() { - return sellPrice; + return sellPrice; } public void setSellPrice(Integer amount) { - sellPrice = amount; + sellPrice = amount; } public boolean isForSell() { - return Residence.getInstance().getTransactionManager().isForSale(this.getName()); + return Residence.getInstance().getTransactionManager().isForSale(this.getName()); } public boolean isForRent() { - return Residence.getInstance().getRentManager().isForRent(this); + return Residence.getInstance().getRentManager().isForRent(this); } public boolean isSubzoneForRent() { - for (Entry one : subzones.entrySet()) { - if (one.getValue().isForRent()) - return true; - if (one.getValue().isSubzoneForRent()) - return true; - } - return false; + for (Entry one : subzones.entrySet()) { + if (one.getValue().isForRent()) + return true; + if (one.getValue().isSubzoneForRent()) + return true; + } + return false; } public boolean isSubzoneRented() { - for (Entry one : subzones.entrySet()) { - if (one.getValue().isRented()) - return true; - if (one.getValue().isSubzoneRented()) - return true; - } - return false; + for (Entry one : subzones.entrySet()) { + if (one.getValue().isRented()) + return true; + if (one.getValue().isSubzoneRented()) + return true; + } + return false; } public ClaimedResidence getRentedSubzone() { - for (Entry one : subzones.entrySet()) { - if (one.getValue().isRented()) - return one.getValue(); - if (one.getValue().getRentedSubzone() != null) - return one.getValue().getRentedSubzone(); - } - return null; + for (Entry one : subzones.entrySet()) { + if (one.getValue().isRented()) + return one.getValue(); + if (one.getValue().getRentedSubzone() != null) + return one.getValue().getRentedSubzone(); + } + return null; } public boolean isParentForRent() { - if (this.getParent() != null) - return this.getParent().isForRent() ? true : this.getParent().isParentForRent(); - return false; + if (this.getParent() != null) + return this.getParent().isForRent() ? true : this.getParent().isParentForRent(); + return false; } public boolean isParentForSell() { - if (this.getParent() != null) - return this.getParent().isForSell() ? true : this.getParent().isParentForSell(); - return false; + if (this.getParent() != null) + return this.getParent().isForSell() ? true : this.getParent().isParentForSell(); + return false; } public boolean isRented() { - return Residence.getInstance().getRentManager().isRented(this); + return Residence.getInstance().getRentManager().isRented(this); } public void setRentable(RentableLand rl) { - this.rentableland = rl; + this.rentableland = rl; } public RentableLand getRentable() { - return this.rentableland; + return this.rentableland; } public void setRented(RentedLand rl) { - this.rentedland = rl; + this.rentedland = rl; } public RentedLand getRentedLand() { - return this.rentedland; + return this.rentedland; } public ClaimedResidence() { - initialize(); + initialize(); } public ClaimedResidence(String creationWorld) { - this(Residence.getInstance().getServerLandName(), creationWorld); + this(Residence.getInstance().getServerLandName(), creationWorld); } public ClaimedResidence(String creator, UUID uuid, String creationWorld) { - perms = new ResidencePermissions(this, creator, uuid, creationWorld); - initialize(); + perms = new ResidencePermissions(this, creator, uuid, creationWorld); + initialize(); } @Deprecated public ClaimedResidence(String creator, String creationWorld) { - perms = new ResidencePermissions(this, creator, creationWorld); - initialize(); + perms = new ResidencePermissions(this, creator, creationWorld); + initialize(); } public ClaimedResidence(String creator, String creationWorld, ClaimedResidence parentResidence) { - this(creator, creationWorld); - parent = parentResidence; + this(creator, creationWorld); + parent = parentResidence; } private void initialize() { - subzones = new HashMap<>(); - areas = new HashMap<>(); - bank = new ResidenceBank(this); - blacklist = new ResidenceItemList(Residence.getInstance(), this, ListType.BLACKLIST); - ignorelist = new ResidenceItemList(Residence.getInstance(), this, ListType.IGNORELIST); + subzones = new HashMap<>(); + areas = new HashMap<>(); + bank = new ResidenceBank(this); + blacklist = new ResidenceItemList(Residence.getInstance(), this, ListType.BLACKLIST); + ignorelist = new ResidenceItemList(Residence.getInstance(), this, ListType.IGNORELIST); } public boolean isMainResidence() { - return mainRes; + return mainRes; } public void setMainResidence(boolean state) { - mainRes = state; + mainRes = state; } public boolean isSubzone() { - return getParent() == null ? false : true; + return getParent() == null ? false : true; } public int getSubzoneDeep() { - return getSubzoneDeep(0); + return getSubzoneDeep(0); } public int getSubzoneDeep(int deep) { - deep++; - if (getParent() != null) { - return getParent().getSubzoneDeep(deep); - } - return deep; + deep++; + if (getParent() != null) { + return getParent().getSubzoneDeep(deep); + } + return deep; } public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - if (player == null) - return true; - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() < group.getMinX()) { - Residence.getInstance().msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); - return false; - } - if (area.getYSize() < group.getMinY()) { - Residence.getInstance().msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); - return false; - } - if (area.getZSize() < group.getMinZ()) { - Residence.getInstance().msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); - return false; - } - return true; + if (resadmin) + return true; + if (player == null) + return true; + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() < group.getMinX()) { + Residence.getInstance().msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); + return false; + } + if (area.getYSize() < group.getMinY()) { + Residence.getInstance().msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); + return false; + } + if (area.getZSize() < group.getMinZ()) { + Residence.getInstance().msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); + return false; + } + return true; } public boolean isBiggerThanMinSubzone(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - if (player == null) - return true; - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() < group.getSubzoneMinX()) { - Residence.getInstance().msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); - return false; - } - if (area.getYSize() < group.getSubzoneMinY()) { - Residence.getInstance().msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); - return false; - } - if (area.getZSize() < group.getSubzoneMinZ()) { - Residence.getInstance().msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); - return false; - } - return true; + if (resadmin) + return true; + if (player == null) + return true; + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() < group.getSubzoneMinX()) { + Residence.getInstance().msg(player, lm.Area_ToSmallX, area.getXSize(), group.getSubzoneMinX()); + return false; + } + if (area.getYSize() < group.getSubzoneMinY()) { + Residence.getInstance().msg(player, lm.Area_ToSmallY, area.getYSize(), group.getSubzoneMinY()); + return false; + } + if (area.getZSize() < group.getSubzoneMinZ()) { + Residence.getInstance().msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getSubzoneMinZ()); + return false; + } + return true; } public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() > group.getMaxX()) { - Residence.getInstance().msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); - return false; - } - if (area.getYSize() > group.getMaxY() + (-group.getMinY())) { - Residence.getInstance().msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); - return false; - } - if (area.getZSize() > group.getMaxZ()) { - Residence.getInstance().msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); - return false; - } - return true; + if (resadmin) + return true; + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() > group.getMaxX()) { + Residence.getInstance().msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); + return false; + } + if (area.getYSize() > group.getMaxY() + (-group.getMinY())) { + Residence.getInstance().msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); + return false; + } + if (area.getZSize() > group.getMaxZ()) { + Residence.getInstance().msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); + return false; + } + return true; } public boolean isSmallerThanMaxSubzone(Player player, CuboidArea area, boolean resadmin) { - if (resadmin) - return true; - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() > group.getSubzoneMaxX()) { - Residence.getInstance().msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); - return false; - } - - if (area.getYSize() > group.getSubzoneMaxY() + (-group.getMinY())) { - Residence.getInstance().msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); - return false; - } - if (area.getZSize() > group.getSubzoneMaxZ()) { - Residence.getInstance().msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); - return false; - } - return true; + if (resadmin) + return true; + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() > group.getSubzoneMaxX()) { + Residence.getInstance().msg(player, lm.Area_ToBigX, area.getXSize(), group.getSubzoneMaxX()); + return false; + } + + if (area.getYSize() > group.getSubzoneMaxY() + (-group.getMinY())) { + Residence.getInstance().msg(player, lm.Area_ToBigY, area.getYSize(), group.getSubzoneMaxY()); + return false; + } + if (area.getZSize() > group.getSubzoneMaxZ()) { + Residence.getInstance().msg(player, lm.Area_ToBigZ, area.getZSize(), group.getSubzoneMaxZ()); + return false; + } + return true; } public boolean addArea(CuboidArea area, String name) { - return addArea(null, area, name, true); + return addArea(null, area, name, true); } public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin) { - return addArea(player, area, name, resadmin, true); + return addArea(player, area, name, resadmin, true); } public boolean addArea(Player player, CuboidArea area, String name, boolean resadmin, boolean chargeMoney) { - if (!Residence.getInstance().validName(name)) { - if (player != null) { - Residence.getInstance().msg(player, lm.Invalid_NameCharacters); - } - return false; - } - - String NName = name; - name = name.toLowerCase(); - - if (areas.containsKey(NName)) { - if (player != null) { - Residence.getInstance().msg(player, lm.Area_Exists); - } - return false; - } - - if (this.isSubzone() && !isBiggerThanMinSubzone(player, area, resadmin) - || !this.isSubzone() && !isBiggerThanMin(player, area, resadmin)) - return false; - - if (!resadmin && Residence.getInstance().getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { - boolean inside = false; - for (CuboidArea are : areas.values()) { - if (are.isAreaWithinArea(area)) { - inside = true; - } - } - if (!inside) { - Residence.getInstance().msg(player, lm.Subzone_SelectInside); - return false; - } - } - if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorldName())) { - if (player != null) { - Residence.getInstance().msg(player, lm.Area_DiffWorld); - } - return false; - } - if (getParent() == null) { - String collideResidence = Residence.getInstance().getResidenceManager().checkAreaCollision(area, this); - ClaimedResidence cRes = Residence.getInstance().getResidenceManager().getByName(collideResidence); - if (cRes != null) { - if (player != null) { - Residence.getInstance().msg(player, lm.Area_Collision, cRes.getName()); - Visualizer v = new Visualizer(player); - v.setAreas(area); - v.setErrorAreas(cRes); - Residence.getInstance().getSelectionManager().showBounds(player, v); - } - return false; - } - } else { - String[] szs = getParent().listSubzones(); - for (String sz : szs) { - ClaimedResidence res = getParent().getSubzone(sz); - if (res != null && res != this) { - if (res.checkCollision(area)) { - if (player != null) { - Residence.getInstance().msg(player, lm.Area_SubzoneCollision, sz); - } - return false; - } - } - } - } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - Residence.getInstance().msg(player, lm.General_NoPermission); - return false; - } - if (getParent() != null) { - if (!getParent().containsLoc(area.getHighLocation()) || !getParent().containsLoc(area.getLowLocation())) { - Residence.getInstance().msg(player, lm.Area_NotWithinParent); - return false; - } - if (!getParent().getPermissions().hasResidencePermission(player, true) - && !getParent().getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { - Residence.getInstance().msg(player, lm.Residence_ParentNoPermission); - return false; - } - } - - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - - PermissionGroup group = rPlayer.getGroup(); - if (!this.isSubzone() && !group.canCreateResidences() && !ResPerm.create.hasPermission(player, true) - || this.isSubzone() && !group.canCreateResidences() - && !ResPerm.create_subzone.hasPermission(player, true)) { - return false; - } - - if (areas.size() >= group.getMaxPhysicalPerResidence()) { - Residence.getInstance().msg(player, lm.Area_MaxPhysical); - return false; - } - - CuboidArea cuboid = Residence.getInstance().getSelectionManager().getSelectionCuboid(player); - - if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) - || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { - Residence.getInstance().msg(player, lm.Area_SizeLimit); - return false; - } - - if (group.getMinHeight() > area.getLowVector().getBlockY()) { - Residence.getInstance().msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); - return false; - } - - if (group.getMaxHeight() < area.getHighVector().getBlockY()) { - Residence.getInstance().msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); - return false; - } - - if (!resadmin) { - if (Residence.getInstance().getWorldGuard() != null && Residence.getInstance().getWorldGuardUtil().isSelectionInArea(player)) - return false; - - if (Residence.getInstance().getKingdomsManager() != null && Residence.getInstance().getKingdomsUtil().isSelectionInArea(player)) - return false; - } - - if (chargeMoney && getParent() == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { - double chargeamount = area.getCost(group); - if (!Residence.getInstance().getTransactionManager().chargeEconomyMoney(player, chargeamount)) { - return false; - } - } - } - - ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, NName, this, area); - Residence.getInstance().getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - Residence.getInstance().getResidenceManager().removeChunkList(this.getName()); - areas.put(name, area); - Residence.getInstance().getResidenceManager().calculateChunks(this.getName()); - return true; + if (!Residence.getInstance().validName(name)) { + if (player != null) { + Residence.getInstance().msg(player, lm.Invalid_NameCharacters); + } + return false; + } + + String NName = name; + name = name.toLowerCase(); + + if (areas.containsKey(NName)) { + if (player != null) { + Residence.getInstance().msg(player, lm.Area_Exists); + } + return false; + } + + if (this.isSubzone() && !isBiggerThanMinSubzone(player, area, resadmin) + || !this.isSubzone() && !isBiggerThanMin(player, area, resadmin)) + return false; + + if (!resadmin && Residence.getInstance().getConfigManager().getEnforceAreaInsideArea() && this.getParent() == null) { + boolean inside = false; + for (CuboidArea are : areas.values()) { + if (are.isAreaWithinArea(area)) { + inside = true; + } + } + if (!inside) { + Residence.getInstance().msg(player, lm.Subzone_SelectInside); + return false; + } + } + if (!area.getWorld().getName().equalsIgnoreCase(perms.getWorldName())) { + if (player != null) { + Residence.getInstance().msg(player, lm.Area_DiffWorld); + } + return false; + } + if (getParent() == null) { + String collideResidence = Residence.getInstance().getResidenceManager().checkAreaCollision(area, this); + ClaimedResidence cRes = Residence.getInstance().getResidenceManager().getByName(collideResidence); + if (cRes != null) { + if (player != null) { + Residence.getInstance().msg(player, lm.Area_Collision, cRes.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(area); + v.setErrorAreas(cRes); + Residence.getInstance().getSelectionManager().showBounds(player, v); + } + return false; + } + } else { + String[] szs = getParent().listSubzones(); + for (String sz : szs) { + ClaimedResidence res = getParent().getSubzone(sz); + if (res != null && res != this) { + if (res.checkCollision(area)) { + if (player != null) { + Residence.getInstance().msg(player, lm.Area_SubzoneCollision, sz); + } + return false; + } + } + } + } + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + Residence.getInstance().msg(player, lm.General_NoPermission); + return false; + } + if (getParent() != null) { + if (!getParent().containsLoc(area.getHighLocation()) || !getParent().containsLoc(area.getLowLocation())) { + Residence.getInstance().msg(player, lm.Area_NotWithinParent); + return false; + } + if (!getParent().getPermissions().hasResidencePermission(player, true) + && !getParent().getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { + Residence.getInstance().msg(player, lm.Residence_ParentNoPermission); + return false; + } + } + + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); + if (!this.isSubzone() && !group.canCreateResidences() && !ResPerm.create.hasPermission(player, true) + || this.isSubzone() && !group.canCreateResidences() + && !ResPerm.create_subzone.hasPermission(player, true)) { + return false; + } + + if (areas.size() >= group.getMaxPhysicalPerResidence()) { + Residence.getInstance().msg(player, lm.Area_MaxPhysical); + return false; + } + + CuboidArea cuboid = Residence.getInstance().getSelectionManager().getSelectionCuboid(player); + + if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) + || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { + Residence.getInstance().msg(player, lm.Area_SizeLimit); + return false; + } + + if (group.getMinHeight() > area.getLowVector().getBlockY()) { + Residence.getInstance().msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); + return false; + } + + if (group.getMaxHeight() < area.getHighVector().getBlockY()) { + Residence.getInstance().msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); + return false; + } + + if (!resadmin) { + if (Residence.getInstance().getWorldGuard() != null && Residence.getInstance().getWorldGuardUtil().isSelectionInArea(player)) + return false; + + if (Residence.getInstance().getKingdomsManager() != null && Residence.getInstance().getKingdomsUtil().isSelectionInArea(player)) + return false; + } + + if (chargeMoney && getParent() == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { + double chargeamount = area.getCost(group); + if (!Residence.getInstance().getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + return false; + } + } + } + + ResidenceAreaAddEvent resevent = new ResidenceAreaAddEvent(player, NName, this, area); + Residence.getInstance().getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + Residence.getInstance().getResidenceManager().removeChunkList(this.getName()); + areas.put(name, area); + Residence.getInstance().getResidenceManager().calculateChunks(this.getName()); + return true; } public boolean replaceArea(CuboidArea neware, String name) { - return this.replaceArea(null, neware, name, true); + return this.replaceArea(null, neware, name, true); } public boolean replaceArea(Player player, CuboidArea newarea, String name, boolean resadmin) { - if (!areas.containsKey(name)) { - if (player != null) - Residence.getInstance().msg(player, lm.Area_NonExist); - return false; - } - CuboidArea oldarea = areas.get(name); - if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorldName())) { - if (player != null) - Residence.getInstance().msg(player, lm.Area_DiffWorld); - return false; - } - if (getParent() == null) { - String collideResidence = Residence.getInstance().getResidenceManager().checkAreaCollision(newarea, this); - ClaimedResidence cRes = Residence.getInstance().getResidenceManager().getByName(collideResidence); - if (cRes != null && player != null) { - Residence.getInstance().msg(player, lm.Area_Collision, cRes.getName()); - Visualizer v = new Visualizer(player); - v.setAreas(this.getAreaArray()); - v.setErrorAreas(cRes.getAreaArray()); - Residence.getInstance().getSelectionManager().showBounds(player, v); - return false; - } - } else { - String[] szs = getParent().listSubzones(); - for (String sz : szs) { - ClaimedResidence res = getParent().getSubzone(sz); - if (res != null && res != this) { - if (res.checkCollision(newarea)) { - if (player != null) { - Residence.getInstance().msg(player, lm.Area_SubzoneCollision, sz); - Visualizer v = new Visualizer(player); - v.setErrorAreas(res.getAreaArray()); - Residence.getInstance().getSelectionManager().showBounds(player, v); - } - return false; - } - } - } - } - // Don't remove subzones that are not in the area anymore, show colliding areas - String[] szs = listSubzones(); - for (String sz : szs) { - ClaimedResidence res = getSubzone(sz); - if (res == null || res == this) - continue; - String[] szareas = res.getAreaList(); - for (String area : szareas) { - if (newarea.isAreaWithinArea(res.getArea(area))) - continue; - - boolean good = false; - for (CuboidArea arae : getAreaArray()) { - if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { - good = true; - } - } - if (!good) { - Residence.getInstance().msg(player, lm.Area_Collision, res.getName()); - Visualizer v = new Visualizer(player); - v.setAreas(this.getAreaArray()); - v.setErrorAreas(res.getAreaArray()); - Residence.getInstance().getSelectionManager().showBounds(player, v); - return false; - } - - } - if (res.getAreaArray().length == 0) { - removeSubzone(sz); - } - } - - if (!resadmin && player != null) { - - if (!getPermissions().hasResidencePermission(player, true) && !getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue)) { - Residence.getInstance().msg(player, lm.General_NoPermission); - return false; - } - if (getParent() != null) { - if (!getParent().containsLoc(newarea.getHighLocation()) || !getParent().containsLoc(newarea.getLowLocation())) { - Residence.getInstance().msg(player, lm.Area_NotWithinParent); - return false; - } - if (!getParent().getPermissions().hasResidencePermission(player, true) - && !getParent().getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { - Residence.getInstance().msg(player, lm.Residence_ParentNoPermission); - return false; - } - } - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (!group.canCreateResidences() && !ResPerm.resize.hasPermission(player, true)) { - return false; - } - - if (oldarea.getSize() < newarea.getSize() - && (!this.isSubzone() && !isSmallerThanMax(player, newarea, resadmin) - || this.isSubzone() && !isSmallerThanMaxSubzone(player, newarea, resadmin))) { - Residence.getInstance().msg(player, lm.Area_SizeLimit); - return false; - } - if (group.getMinHeight() > newarea.getLowVector().getBlockY()) { - Residence.getInstance().msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); - return false; - } - if (group.getMaxHeight() < newarea.getHighVector().getBlockY()) { - Residence.getInstance().msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); - return false; - } - - if (!isBiggerThanMin(player, newarea, resadmin)) - return false; - - if (!resadmin) { - if (Residence.getInstance().getWorldGuard() != null && Residence.getInstance().getWorldGuardUtil().isSelectionInArea(player)) - return false; - if (Residence.getInstance().getKingdomsManager() != null && Residence.getInstance().getKingdomsUtil().isSelectionInArea(player)) - return false; - } - - if (getParent() == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { - double chargeamount = newarea.getCost(group) - oldarea.getCost(group); - if (chargeamount > 0 && !Residence.getInstance().getTransactionManager().chargeEconomyMoney(player, chargeamount)) { - return false; - } - } - } - - ResidenceSizeChangeEvent resevent = new ResidenceSizeChangeEvent(player, this, oldarea, newarea); - Residence.getInstance().getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - if ((!resadmin) && (player != null)) { - int chargeamount = (int) Math - .ceil((newarea.getSize() - oldarea.getSize()) * getBlockSellPrice().doubleValue()); - if ((chargeamount < 0) && (Residence.getInstance().getConfigManager().useResMoneyBack())) { - if (!this.isServerLand()) - Residence.getInstance().getTransactionManager().giveEconomyMoney(player, -chargeamount); - } - } - - Residence.getInstance().getResidenceManager().removeChunkList(this.getName()); - areas.remove(name); - areas.put(name, newarea); - Residence.getInstance().getResidenceManager().calculateChunks(this.getName()); - if (player != null) - Residence.getInstance().msg(player, lm.Area_Update); - return true; + if (!areas.containsKey(name)) { + if (player != null) + Residence.getInstance().msg(player, lm.Area_NonExist); + return false; + } + CuboidArea oldarea = areas.get(name); + if (!newarea.getWorld().getName().equalsIgnoreCase(perms.getWorldName())) { + if (player != null) + Residence.getInstance().msg(player, lm.Area_DiffWorld); + return false; + } + if (getParent() == null) { + String collideResidence = Residence.getInstance().getResidenceManager().checkAreaCollision(newarea, this); + ClaimedResidence cRes = Residence.getInstance().getResidenceManager().getByName(collideResidence); + if (cRes != null && player != null) { + Residence.getInstance().msg(player, lm.Area_Collision, cRes.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(this.getAreaArray()); + v.setErrorAreas(cRes.getAreaArray()); + Residence.getInstance().getSelectionManager().showBounds(player, v); + return false; + } + } else { + String[] szs = getParent().listSubzones(); + for (String sz : szs) { + ClaimedResidence res = getParent().getSubzone(sz); + if (res != null && res != this) { + if (res.checkCollision(newarea)) { + if (player != null) { + Residence.getInstance().msg(player, lm.Area_SubzoneCollision, sz); + Visualizer v = new Visualizer(player); + v.setErrorAreas(res.getAreaArray()); + Residence.getInstance().getSelectionManager().showBounds(player, v); + } + return false; + } + } + } + } + // Don't remove subzones that are not in the area anymore, show colliding areas + String[] szs = listSubzones(); + for (String sz : szs) { + ClaimedResidence res = getSubzone(sz); + if (res == null || res == this) + continue; + String[] szareas = res.getAreaList(); + for (String area : szareas) { + if (newarea.isAreaWithinArea(res.getArea(area))) + continue; + + boolean good = false; + for (CuboidArea arae : getAreaArray()) { + if (arae != oldarea && arae.isAreaWithinArea(res.getArea(area))) { + good = true; + } + } + if (!good) { + Residence.getInstance().msg(player, lm.Area_Collision, res.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(this.getAreaArray()); + v.setErrorAreas(res.getAreaArray()); + Residence.getInstance().getSelectionManager().showBounds(player, v); + return false; + } + + } + if (res.getAreaArray().length == 0) { + removeSubzone(sz); + } + } + + if (!resadmin && player != null) { + + if (!getPermissions().hasResidencePermission(player, true) && !getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue)) { + Residence.getInstance().msg(player, lm.General_NoPermission); + return false; + } + if (getParent() != null) { + if (!getParent().containsLoc(newarea.getHighLocation()) || !getParent().containsLoc(newarea.getLowLocation())) { + Residence.getInstance().msg(player, lm.Area_NotWithinParent); + return false; + } + if (!getParent().getPermissions().hasResidencePermission(player, true) + && !getParent().getPermissions().playerHas(player, Flags.subzone, FlagCombo.OnlyTrue)) { + Residence.getInstance().msg(player, lm.Residence_ParentNoPermission); + return false; + } + } + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (!group.canCreateResidences() && !ResPerm.resize.hasPermission(player, true)) { + return false; + } + + if (oldarea.getSize() < newarea.getSize() + && (!this.isSubzone() && !isSmallerThanMax(player, newarea, resadmin) + || this.isSubzone() && !isSmallerThanMaxSubzone(player, newarea, resadmin))) { + Residence.getInstance().msg(player, lm.Area_SizeLimit); + return false; + } + if (group.getMinHeight() > newarea.getLowVector().getBlockY()) { + Residence.getInstance().msg(player, lm.Area_LowLimit, String.format("%d", group.getMinHeight())); + return false; + } + if (group.getMaxHeight() < newarea.getHighVector().getBlockY()) { + Residence.getInstance().msg(player, lm.Area_HighLimit, String.format("%d", group.getMaxHeight())); + return false; + } + + if (!isBiggerThanMin(player, newarea, resadmin)) + return false; + + if (!resadmin) { + if (Residence.getInstance().getWorldGuard() != null && Residence.getInstance().getWorldGuardUtil().isSelectionInArea(player)) + return false; + if (Residence.getInstance().getKingdomsManager() != null && Residence.getInstance().getKingdomsUtil().isSelectionInArea(player)) + return false; + } + + if (getParent() == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { + double chargeamount = newarea.getCost(group) - oldarea.getCost(group); + if (chargeamount > 0 && !Residence.getInstance().getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + return false; + } + } + } + + ResidenceSizeChangeEvent resevent = new ResidenceSizeChangeEvent(player, this, oldarea, newarea); + Residence.getInstance().getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + if ((!resadmin) && (player != null)) { + int chargeamount = (int) Math + .ceil((newarea.getSize() - oldarea.getSize()) * getBlockSellPrice().doubleValue()); + if ((chargeamount < 0) && (Residence.getInstance().getConfigManager().useResMoneyBack())) { + if (!this.isServerLand()) + Residence.getInstance().getTransactionManager().giveEconomyMoney(player, -chargeamount); + } + } + + Residence.getInstance().getResidenceManager().removeChunkList(this.getName()); + areas.remove(name); + areas.put(name, newarea); + Residence.getInstance().getResidenceManager().calculateChunks(this.getName()); + if (player != null) + Residence.getInstance().msg(player, lm.Area_Update); + return true; } public boolean addSubzone(String name, Location loc1, Location loc2) { - return this.addSubzone(null, loc1, loc2, name, true); + return this.addSubzone(null, loc1, loc2, name, true); } public boolean addSubzone(Player player, Location loc1, Location loc2, String name, boolean resadmin) { - if (player == null) { - return this.addSubzone(null, Residence.getInstance().getServerLandName(), loc1, loc2, name, resadmin); - } - return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); + if (player == null) { + return this.addSubzone(null, Residence.getInstance().getServerLandName(), loc1, loc2, name, resadmin); + } + return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); } public boolean isServerLand() { - return this.getOwnerUUID().toString().equals(Residence.getInstance().getServerLandUUID()); + return this.getOwnerUUID().toString().equals(Residence.getInstance().getServerLandUUID()); } public boolean addSubzone(Player player, String name, boolean resadmin) { - if (Residence.getInstance().getSelectionManager().hasPlacedBoth(player)) { - Location loc1 = Residence.getInstance().getSelectionManager().getPlayerLoc1(player); - Location loc2 = Residence.getInstance().getSelectionManager().getPlayerLoc2(player); - return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); - } - return false; + if (Residence.getInstance().getSelectionManager().hasPlacedBoth(player)) { + Location loc1 = Residence.getInstance().getSelectionManager().getPlayerLoc1(player); + Location loc2 = Residence.getInstance().getSelectionManager().getPlayerLoc2(player); + return this.addSubzone(player, player.getName(), loc1, loc2, name, resadmin); + } + return false; } public boolean addSubzone(Player player, String owner, Location loc1, Location loc2, String name, - boolean resadmin) { - if (!Residence.getInstance().validName(name)) { - if (player != null) { - Residence.getInstance().msg(player, lm.Invalid_NameCharacters); - } - return false; - } - if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { - if (player != null) { - Residence.getInstance().msg(player, lm.Subzone_SelectInside); - } - return false; - } - - String NName = name; - name = name.toLowerCase(); - - if (subzones.containsKey(name)) { - if (player != null) { - Residence.getInstance().msg(player, lm.Subzone_Exists, NName); - } - return false; - } - if (!resadmin && player != null) { - if (!this.perms.hasResidencePermission(player, true)) { - if (!this.perms.playerHas(player.getName(), Flags.subzone, - this.perms.playerHas(player, Flags.admin, false))) { - Residence.getInstance().msg(player, lm.General_NoPermission); - return false; - } - } - - if (this.getSubzoneList().length >= Residence.getInstance().getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { - Residence.getInstance().msg(player, lm.Subzone_MaxAmount); - return false; - } - - if (this.getZoneDepth() >= Residence.getInstance().getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { - Residence.getInstance().msg(player, lm.Subzone_MaxDepth); - return false; - } - } - - CuboidArea newArea = new CuboidArea(loc1, loc2); - - Set> set = subzones.entrySet(); - for (Entry resEntry : set) { - ClaimedResidence res = resEntry.getValue(); - if (res.checkCollision(newArea)) { - if (player != null) { - Residence.getInstance().msg(player, lm.Subzone_Collide, resEntry.getKey()); - Visualizer v = new Visualizer(player); - v.setAreas(newArea); - v.setErrorAreas(res); - Residence.getInstance().getSelectionManager().showBounds(player, v); - } - return false; - } - } - - ClaimedResidence newres; - if (player != null) { - newres = new ClaimedResidence(owner, perms.getWorldName(), this); - newres.addArea(player, newArea, NName, resadmin); - } else { - newres = new ClaimedResidence(owner, perms.getWorldName(), this); - newres.addArea(newArea, NName); - } - - if (newres.getAreaCount() != 0) { - newres.getPermissions().applyDefaultFlags(); - if (player != null) { - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - newres.setEnterMessage(group.getDefaultEnterMessage()); - newres.setLeaveMessage(group.getDefaultLeaveMessage()); - } - if (Residence.getInstance().getConfigManager().flagsInherit()) { - newres.getPermissions().setParent(perms); - } - - newres.resName = NName; - - newres.setCreateTime(); - - ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, NName, newres, newArea); - Residence.getInstance().getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - - subzones.put(name, newres); - if (player != null) { - Residence.getInstance().msg(player, lm.Area_Create, NName); - Residence.getInstance().msg(player, lm.Subzone_Create, NName); - } - return true; - } - if (player != null) { - Residence.getInstance().msg(player, lm.Subzone_CreateFail, NName); - } - return false; + boolean resadmin) { + if (!Residence.getInstance().validName(name)) { + if (player != null) { + Residence.getInstance().msg(player, lm.Invalid_NameCharacters); + } + return false; + } + if (!(this.containsLoc(loc1) && this.containsLoc(loc2))) { + if (player != null) { + Residence.getInstance().msg(player, lm.Subzone_SelectInside); + } + return false; + } + + String NName = name; + name = name.toLowerCase(); + + if (subzones.containsKey(name)) { + if (player != null) { + Residence.getInstance().msg(player, lm.Subzone_Exists, NName); + } + return false; + } + if (!resadmin && player != null) { + if (!this.perms.hasResidencePermission(player, true)) { + if (!this.perms.playerHas(player.getName(), Flags.subzone, + this.perms.playerHas(player, Flags.admin, false))) { + Residence.getInstance().msg(player, lm.General_NoPermission); + return false; + } + } + + if (this.getSubzoneList().length >= Residence.getInstance().getPlayerManager().getResidencePlayer(owner).getMaxSubzones()) { + Residence.getInstance().msg(player, lm.Subzone_MaxAmount); + return false; + } + + if (this.getZoneDepth() >= Residence.getInstance().getPlayerManager().getResidencePlayer(owner).getMaxSubzoneDepth()) { + Residence.getInstance().msg(player, lm.Subzone_MaxDepth); + return false; + } + } + + CuboidArea newArea = new CuboidArea(loc1, loc2); + + Set> set = subzones.entrySet(); + for (Entry resEntry : set) { + ClaimedResidence res = resEntry.getValue(); + if (res.checkCollision(newArea)) { + if (player != null) { + Residence.getInstance().msg(player, lm.Subzone_Collide, resEntry.getKey()); + Visualizer v = new Visualizer(player); + v.setAreas(newArea); + v.setErrorAreas(res); + Residence.getInstance().getSelectionManager().showBounds(player, v); + } + return false; + } + } + + ClaimedResidence newres; + if (player != null) { + newres = new ClaimedResidence(owner, perms.getWorldName(), this); + newres.addArea(player, newArea, NName, resadmin); + } else { + newres = new ClaimedResidence(owner, perms.getWorldName(), this); + newres.addArea(newArea, NName); + } + + if (newres.getAreaCount() != 0) { + newres.getPermissions().applyDefaultFlags(); + if (player != null) { + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + newres.setEnterMessage(group.getDefaultEnterMessage()); + newres.setLeaveMessage(group.getDefaultLeaveMessage()); + } + if (Residence.getInstance().getConfigManager().flagsInherit()) { + newres.getPermissions().setParent(perms); + } + + newres.resName = NName; + + newres.setCreateTime(); + + ResidenceSubzoneCreationEvent resevent = new ResidenceSubzoneCreationEvent(player, NName, newres, newArea); + Residence.getInstance().getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + + subzones.put(name, newres); + if (player != null) { + Residence.getInstance().msg(player, lm.Area_Create, NName); + Residence.getInstance().msg(player, lm.Subzone_Create, NName); + } + return true; + } + if (player != null) { + Residence.getInstance().msg(player, lm.Subzone_CreateFail, NName); + } + return false; } public ClaimedResidence getSubzoneByLoc(Location loc) { - Set> set = subzones.entrySet(); - ClaimedResidence res = null; - for (Entry entry : set) { - if (entry.getValue().containsLoc(loc)) { - res = entry.getValue(); - break; - } - } - if (res == null) - return null; - ClaimedResidence subrez = res.getSubzoneByLoc(loc); - if (subrez == null) { - return res; - } - return subrez; + Set> set = subzones.entrySet(); + ClaimedResidence res = null; + for (Entry entry : set) { + if (entry.getValue().containsLoc(loc)) { + res = entry.getValue(); + break; + } + } + if (res == null) + return null; + ClaimedResidence subrez = res.getSubzoneByLoc(loc); + if (subrez == null) { + return res; + } + return subrez; } public ClaimedResidence getSubzone(String subzonename) { - subzonename = subzonename.toLowerCase(); - - if (!subzonename.contains(".")) { - return subzones.get(subzonename); - } - String split[] = subzonename.split("\\."); - ClaimedResidence get = subzones.get(split[0]); - for (int i = 1; i < split.length; i++) { - if (get == null) { - return null; - } - get = get.getSubzone(split[i]); - } - return get; + subzonename = subzonename.toLowerCase(); + + if (!subzonename.contains(".")) { + return subzones.get(subzonename); + } + String split[] = subzonename.split("\\."); + ClaimedResidence get = subzones.get(split[0]); + for (int i = 1; i < split.length; i++) { + if (get == null) { + return null; + } + get = get.getSubzone(split[i]); + } + return get; } public String getSubzoneNameByRes(ClaimedResidence res) { - Set> set = subzones.entrySet(); - for (Entry entry : set) { - if (entry.getValue() == res) { - return entry.getValue().getResidenceName(); - } - String n = entry.getValue().getSubzoneNameByRes(res); - if (n != null) { - return entry.getValue().getResidenceName() + "." + n; - } - } - return null; + Set> set = subzones.entrySet(); + for (Entry entry : set) { + if (entry.getValue() == res) { + return entry.getValue().getResidenceName(); + } + String n = entry.getValue().getSubzoneNameByRes(res); + if (n != null) { + return entry.getValue().getResidenceName() + "." + n; + } + } + return null; } public String[] getSubzoneList() { - ArrayList zones = new ArrayList<>(); - Set set = subzones.keySet(); - for (String key : set) { - if (key != null) { - zones.add(key); - } - } - return zones.toArray(new String[zones.size()]); + ArrayList zones = new ArrayList<>(); + Set set = subzones.keySet(); + for (String key : set) { + if (key != null) { + zones.add(key); + } + } + return zones.toArray(new String[zones.size()]); } public boolean checkCollision(CuboidArea area) { - Set set = areas.keySet(); - for (String key : set) { - CuboidArea checkarea = areas.get(key); - if (checkarea != null) { - if (checkarea.checkCollision(area)) { - return true; - } - } - } - return false; + Set set = areas.keySet(); + for (String key : set) { + CuboidArea checkarea = areas.get(key); + if (checkarea != null) { + if (checkarea.checkCollision(area)) { + return true; + } + } + } + return false; } public boolean containsLoc(Location loc) { - Collection keys = areas.values(); - for (CuboidArea key : keys) { - if (key.containsLoc(loc)) { - if (getParent() != null) - return getParent().containsLoc(loc); - return true; - } - } - return false; + Collection keys = areas.values(); + for (CuboidArea key : keys) { + if (key.containsLoc(loc)) { + if (getParent() != null) + return getParent().containsLoc(loc); + return true; + } + } + return false; } public ClaimedResidence getParent() { - return parent; + return parent; } public String getTopParentName() { - return this.getTopParent().getName(); + return this.getTopParent().getName(); } public ClaimedResidence getTopParent() { - if (getParent() == null) - return this; - return getParent().getTopParent(); + if (getParent() == null) + return this; + return getParent().getTopParent(); } public boolean isTopArea() { - return getParent() == null; + return getParent() == null; } public boolean removeSubzone(String name) { - return this.removeSubzone(null, name, true); + return this.removeSubzone(null, name, true); } public boolean removeSubzone(Player player, String name, boolean resadmin) { - if (name == null) - return false; - name = name.toLowerCase(); - ClaimedResidence res = subzones.get(name); - if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { - Residence.getInstance().msg(player, lm.General_NoPermission); - return false; - } - subzones.remove(name); - if (player != null) { - Residence.getInstance().msg(player, lm.Subzone_Remove, name); - } - return true; + if (name == null) + return false; + name = name.toLowerCase(); + ClaimedResidence res = subzones.get(name); + if (player != null && !res.perms.hasResidencePermission(player, true) && !resadmin) { + Residence.getInstance().msg(player, lm.General_NoPermission); + return false; + } + subzones.remove(name); + if (player != null) { + Residence.getInstance().msg(player, lm.Subzone_Remove, name); + } + return true; } public long getTotalSize() { - Collection set = areas.values(); - long size = 0; - if (!Residence.getInstance().getConfigManager().isNoCostForYBlocks()) - for (CuboidArea entry : set) { - size += entry.getSize(); - } - else - for (CuboidArea entry : set) { - size += (entry.getXSize() * entry.getZSize()); - } - return size; + Collection set = areas.values(); + long size = 0; + if (!Residence.getInstance().getConfigManager().isNoCostForYBlocks()) + for (CuboidArea entry : set) { + size += entry.getSize(); + } + else + for (CuboidArea entry : set) { + size += (entry.getXSize() * entry.getZSize()); + } + return size; } public long getXZSize() { - Collection set = areas.values(); - long size = 0; - for (CuboidArea entry : set) { - size = size + (entry.getXSize() * entry.getZSize()); - } - return size; + Collection set = areas.values(); + long size = 0; + for (CuboidArea entry : set) { + size = size + (entry.getXSize() * entry.getZSize()); + } + return size; } public CuboidArea[] getAreaArray() { - CuboidArea[] temp = new CuboidArea[areas.size()]; - int i = 0; - for (CuboidArea area : areas.values()) { - temp[i] = area; - i++; - } - return temp; + CuboidArea[] temp = new CuboidArea[areas.size()]; + int i = 0; + for (CuboidArea area : areas.values()) { + temp[i] = area; + i++; + } + return temp; } public Map getAreaMap() { - return areas; + return areas; } public ResidencePermissions getPermissions() { - return perms; + return perms; } public String getEnterMessage() { - return enterMessage; + return enterMessage; } public String getLeaveMessage() { - return leaveMessage; + return leaveMessage; } public String getShopDesc() { - return ShopDesc; + return ShopDesc; } public void setEnterMessage(String message) { - enterMessage = message; + enterMessage = message; } public void setLeaveMessage(String message) { - leaveMessage = message; + leaveMessage = message; } public void setShopDesc(String message) { - ShopDesc = message; + ShopDesc = message; } public void setEnterLeaveMessage(CommandSender sender, String message, boolean enter, boolean resadmin) { - if (message != null) { - message = message.replace("%subtitle%", "\\n"); - if (message.equals("")) { - message = null; - } - } - - if (sender instanceof Player) { - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer((Player) sender); - PermissionGroup group = rPlayer.getGroup(); - if (!group.canSetEnterLeaveMessages() && !resadmin) { - Residence.getInstance().msg(sender, lm.Residence_OwnerNoPermission); - return; - } - if (!perms.hasResidencePermission(sender, false) && !resadmin) { - Residence.getInstance().msg(sender, lm.General_NoPermission); - return; - } - } - if (enter) { - this.setEnterMessage(message); - } else { - this.setLeaveMessage(message); - } - Residence.getInstance().msg(sender, lm.Residence_MessageChange); + if (message != null) { + message = message.replace("%subtitle%", "\\n"); + if (message.equals("")) { + message = null; + } + } + + if (sender instanceof Player) { + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer((Player) sender); + PermissionGroup group = rPlayer.getGroup(); + if (!group.canSetEnterLeaveMessages() && !resadmin) { + Residence.getInstance().msg(sender, lm.Residence_OwnerNoPermission); + return; + } + if (!perms.hasResidencePermission(sender, false) && !resadmin) { + Residence.getInstance().msg(sender, lm.General_NoPermission); + return; + } + } + if (enter) { + this.setEnterMessage(message); + } else { + this.setLeaveMessage(message); + } + Residence.getInstance().msg(sender, lm.Residence_MessageChange); } public Location getMiddleFreeLoc(Location insideLoc, Player player) { - if (insideLoc == null) - return null; - CuboidArea area = this.getAreaByLoc(insideLoc); - if (area == null) { - return insideLoc; - } - - int y = area.getHighVector().getBlockY(); - int lowY = area.getLowVector().getBlockY(); - - int x = area.getLowVector().getBlockX() + area.getXSize() / 2; - int z = area.getLowVector().getBlockZ() + area.getZSize() / 2; - - Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); - boolean found = false; - int it = 1; - int maxIt = newLoc.getBlockY() + 1; - - try { - insideLoc.getChunk().setForceLoaded(true); - } catch (Throwable e) { - } - - try { - while (it < maxIt) { - it++; - - if (newLoc.getBlockY() < lowY) - break; - - newLoc.add(0, -1, 0); - - Block block = newLoc.getBlock(); - Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); - Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); - if (ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2) - && !ResidencePlayerListener.isEmptyBlock(block3)) { - found = true; - break; - } - } - } catch (Throwable e) { - } - - try { - insideLoc.getChunk().setForceLoaded(false); - } catch (Throwable e) { - } - - if (found) { - if (player != null) { - newLoc.setPitch(player.getLocation().getPitch()); - newLoc.setYaw(player.getLocation().getYaw()); - } - return newLoc; - } - return getOutsideFreeLoc(insideLoc, player); + if (insideLoc == null) + return null; + CuboidArea area = this.getAreaByLoc(insideLoc); + if (area == null) { + return insideLoc; + } + + int y = area.getHighVector().getBlockY(); + int lowY = area.getLowVector().getBlockY(); + + int x = area.getLowVector().getBlockX() + area.getXSize() / 2; + int z = area.getLowVector().getBlockZ() + area.getZSize() / 2; + + Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); + boolean found = false; + int it = 1; + int maxIt = newLoc.getBlockY() + 1; + + try { + insideLoc.getChunk().setForceLoaded(true); + } catch (Throwable e) { + } + + try { + while (it < maxIt) { + it++; + + if (newLoc.getBlockY() < lowY) + break; + + newLoc.add(0, -1, 0); + + Block block = newLoc.getBlock(); + Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); + Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); + if (ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2) + && !ResidencePlayerListener.isEmptyBlock(block3)) { + found = true; + break; + } + } + } catch (Throwable e) { + } + + try { + insideLoc.getChunk().setForceLoaded(false); + } catch (Throwable e) { + } + + if (found) { + if (player != null) { + newLoc.setPitch(player.getLocation().getPitch()); + newLoc.setYaw(player.getLocation().getYaw()); + } + return newLoc; + } + return getOutsideFreeLoc(insideLoc, player); } public Location getOutsideFreeLoc(Location insideLoc, Player player) { - CuboidArea area = this.getAreaByLoc(insideLoc); - if (area == null) { - return insideLoc; - } - - List randomLocList = new ArrayList(); - - for (int z = -1; z < area.getZSize() + 2; z++) { - randomLocList.add(new RandomLoc(area.getLowVector().getX(), 0, area.getLowVector().getZ() + z)); - randomLocList.add(new RandomLoc(area.getLowVector().getX() + area.getXSize(), 0, area.getLowVector().getZ() + z)); - } - - for (int x = -1; x < area.getXSize() + 2; x++) { - randomLocList.add(new RandomLoc(area.getLowVector().getX() + x, 0, area.getLowVector().getZ())); - randomLocList.add(new RandomLoc(area.getLowVector().getX() + x, 0, area.getLowVector().getZ() + area.getZSize())); - } - - Location loc = insideLoc.clone(); - - boolean admin = ResPerm.admin_tp.hasPermission(player); - - boolean found = false; - int it = 0; - int maxIt = 15; - while (!found && it < maxIt) { - it++; - - Random ran = new Random(System.currentTimeMillis()); - if (randomLocList.isEmpty()) - break; - int check = ran.nextInt(randomLocList.size()); - RandomLoc place = randomLocList.get(check); - randomLocList.remove(check); - double x = place.getX(); - double z = place.getZ(); - - loc.setX(x); - loc.setZ(z); - loc.setY(area.getHighVector().getBlockY()); - - int max = area.getHighVector().getBlockY(); - max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; - - for (int i = max; i > area.getLowVector().getY(); i--) { - loc.setY(i); - Block block = loc.getBlock(); - Block block2 = loc.clone().add(0, 1, 0).getBlock(); - Block block3 = loc.clone().add(0, -1, 0).getBlock(); - if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) - && ResidencePlayerListener.isEmptyBlock(block2)) { - break; - } - } - - if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) - continue; - - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA) - continue; - - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER) - continue; - - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(loc); - if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) && !admin) - continue; - - found = true; - loc.add(0.5, 0.1, 0.5); - - // In case empty space is on opposite side - if (Residence.getInstance().getResidenceManager().getByLoc(loc) == this) { - loc.add(-1, 0, -1); - } - - break; - } - - if (!found && Residence.getInstance().getConfigManager().getKickLocation() != null) - return Residence.getInstance().getConfigManager().getKickLocation(); - if (player != null) { - loc.setPitch(player.getLocation().getPitch()); - loc.setYaw(player.getLocation().getYaw()); - } - return loc; + CuboidArea area = this.getAreaByLoc(insideLoc); + if (area == null) { + return insideLoc; + } + + List randomLocList = new ArrayList(); + + for (int z = -1; z < area.getZSize() + 2; z++) { + randomLocList.add(new RandomLoc(area.getLowVector().getX(), 0, area.getLowVector().getZ() + z)); + randomLocList.add(new RandomLoc(area.getLowVector().getX() + area.getXSize(), 0, area.getLowVector().getZ() + z)); + } + + for (int x = -1; x < area.getXSize() + 2; x++) { + randomLocList.add(new RandomLoc(area.getLowVector().getX() + x, 0, area.getLowVector().getZ())); + randomLocList.add(new RandomLoc(area.getLowVector().getX() + x, 0, area.getLowVector().getZ() + area.getZSize())); + } + + Location loc = insideLoc.clone(); + + boolean admin = ResPerm.admin_tp.hasPermission(player); + + boolean found = false; + int it = 0; + int maxIt = 15; + while (!found && it < maxIt) { + it++; + + Random ran = new Random(System.currentTimeMillis()); + if (randomLocList.isEmpty()) + break; + int check = ran.nextInt(randomLocList.size()); + RandomLoc place = randomLocList.get(check); + randomLocList.remove(check); + double x = place.getX(); + double z = place.getZ(); + + loc.setX(x); + loc.setZ(z); + loc.setY(area.getHighVector().getBlockY()); + + int max = area.getHighVector().getBlockY(); + max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; + + for (int i = max; i > area.getLowVector().getY(); i--) { + loc.setY(i); + Block block = loc.getBlock(); + Block block2 = loc.clone().add(0, 1, 0).getBlock(); + Block block3 = loc.clone().add(0, -1, 0).getBlock(); + if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) + && ResidencePlayerListener.isEmptyBlock(block2)) { + break; + } + } + + if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER) + continue; + + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(loc); + if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) && !admin) + continue; + + found = true; + loc.add(0.5, 0.1, 0.5); + + // In case empty space is on opposite side + if (Residence.getInstance().getResidenceManager().getByLoc(loc) == this) { + loc.add(-1, 0, -1); + } + + break; + } + + if (!found && Residence.getInstance().getConfigManager().getKickLocation() != null) + return Residence.getInstance().getConfigManager().getKickLocation(); + if (player != null) { + loc.setPitch(player.getLocation().getPitch()); + loc.setYaw(player.getLocation().getYaw()); + } + return loc; } public CuboidArea getMainArea() { - CuboidArea area = areas.get(this.isSubzone() ? this.getResidenceName() : "main"); - if (area == null && !areas.isEmpty()) { - return areas.entrySet().iterator().next().getValue(); - } - return area; + CuboidArea area = areas.get(this.isSubzone() ? this.getResidenceName() : "main"); + if (area == null && !areas.isEmpty()) { + return areas.entrySet().iterator().next().getValue(); + } + return area; } public CuboidArea getAreaByLoc(Location loc) { - for (CuboidArea thisarea : areas.values()) { - if (thisarea.containsLoc(loc)) { - return thisarea; - } - } - return null; + for (CuboidArea thisarea : areas.values()) { + if (thisarea.containsLoc(loc)) { + return thisarea; + } + } + return null; } public String[] listSubzones() { - String list[] = new String[subzones.size()]; - int i = 0; - for (String res : subzones.keySet()) { - list[i] = res; - i++; - } - return list; + String list[] = new String[subzones.size()]; + int i = 0; + for (String res : subzones.keySet()) { + list[i] = res; + i++; + } + return list; } public List getSubzones() { - List list = new ArrayList(); - for (Entry res : subzones.entrySet()) { - list.add(res.getValue()); - } - return list; + List list = new ArrayList(); + for (Entry res : subzones.entrySet()) { + list.add(res.getValue()); + } + return list; } public Map getSubzonesMap() { - return subzones; + return subzones; } public int getSubzonesAmount(Boolean includeChild) { - int i = 0; - for (Entry res : subzones.entrySet()) { - i++; - if (includeChild) - i += res.getValue().getSubzonesAmount(includeChild); - } - return i; + int i = 0; + for (Entry res : subzones.entrySet()) { + i++; + if (includeChild) + i += res.getValue().getSubzonesAmount(includeChild); + } + return i; } public void printSubzoneList(CommandSender sender, int page) { - PageInfo pi = new PageInfo(6, subzones.size(), page); - - if (!pi.isPageOk()) { - sender.sendMessage(ChatColor.RED + Residence.getInstance().msg(lm.Invalid_Page)); - return; - } - - Residence.getInstance().msg(sender, lm.InformationPage_TopSingle, Residence.getInstance().msg(lm.General_Subzones)); - Residence.getInstance().msg(sender, lm.InformationPage_Page, Residence.getInstance().msg(lm.General_GenericPages, String.format("%d", page), - pi.getTotalPages(), pi.getTotalEntries())); - RawMessage rm = new RawMessage(); - for (int i = pi.getStart(); i <= pi.getEnd(); i++) { - ClaimedResidence res = getSubzones().get(i); - if (res == null) - continue; - rm.addText(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " + Residence.getInstance().msg(lm.General_Owner, res.getOwner())) - .addHover("Teleport to " + res.getName()) - .addCommand("res tp " + res.getName()); - rm.show(sender); - rm.clear(); - } - - Residence.getInstance().getInfoPageManager().ShowPagination(sender, pi, "res sublist " + this.getName()); + PageInfo pi = new PageInfo(6, subzones.size(), page); + + if (!pi.isPageOk()) { + sender.sendMessage(ChatColor.RED + Residence.getInstance().msg(lm.Invalid_Page)); + return; + } + + Residence.getInstance().msg(sender, lm.InformationPage_TopSingle, Residence.getInstance().msg(lm.General_Subzones)); + Residence.getInstance().msg(sender, lm.InformationPage_Page, Residence.getInstance().msg(lm.General_GenericPages, String.format("%d", page), + pi.getTotalPages(), pi.getTotalEntries())); + RawMessage rm = new RawMessage(); + for (int i = pi.getStart(); i <= pi.getEnd(); i++) { + ClaimedResidence res = getSubzones().get(i); + if (res == null) + continue; + rm.addText(ChatColor.GREEN + res.getResidenceName() + ChatColor.YELLOW + " - " + Residence.getInstance().msg(lm.General_Owner, res.getOwner())) + .addHover("Teleport to " + res.getName()) + .addCommand("res tp " + res.getName()); + rm.show(sender); + rm.clear(); + } + pi.autoPagination(sender, "res sublist " + this.getName()); } public void printAreaList(Player player, int page) { - ArrayList temp = new ArrayList<>(); - for (String area : areas.keySet()) { - temp.add(area); - } - Residence.getInstance().getInfoPageManager().printInfo(player, "res area list " + this.getName(), - Residence.getInstance().msg(lm.General_PhysicalAreas), temp, page); + ArrayList temp = new ArrayList<>(); + for (String area : areas.keySet()) { + temp.add(area); + } + Residence.getInstance().getInfoPageManager().printInfo(player, "res area list " + this.getName(), + Residence.getInstance().msg(lm.General_PhysicalAreas), temp, page); } public void printAdvancedAreaList(Player player, int page) { - ArrayList temp = new ArrayList<>(); - for (Entry entry : areas.entrySet()) { - CuboidArea a = entry.getValue(); - Location h = a.getHighLocation(); - Location l = a.getLowLocation(); - if (this.getPermissions().has(Flags.coords, FlagCombo.OnlyFalse)) - temp.add(Residence.getInstance().msg(lm.Area_ListAll, entry.getKey(), 0, 0, 0, 0, 0, 0, a.getSize())); - else - temp.add(Residence.getInstance().msg(lm.Area_ListAll, entry.getKey(), h.getBlockX(), h.getBlockY(), h.getBlockZ(), l.getBlockX(), l.getBlockY(), l.getBlockZ(), a.getSize())); - } - Residence.getInstance().getInfoPageManager().printInfo(player, "res area listall " + this.getName(), - Residence.getInstance().msg(lm.General_PhysicalAreas), temp, page); + ArrayList temp = new ArrayList<>(); + for (Entry entry : areas.entrySet()) { + CuboidArea a = entry.getValue(); + Location h = a.getHighLocation(); + Location l = a.getLowLocation(); + if (this.getPermissions().has(Flags.coords, FlagCombo.OnlyFalse)) + temp.add(Residence.getInstance().msg(lm.Area_ListAll, entry.getKey(), 0, 0, 0, 0, 0, 0, a.getSize())); + else + temp.add(Residence.getInstance().msg(lm.Area_ListAll, entry.getKey(), h.getBlockX(), h.getBlockY(), h.getBlockZ(), l.getBlockX(), l.getBlockY(), l.getBlockZ(), a.getSize())); + } + Residence.getInstance().getInfoPageManager().printInfo(player, "res area listall " + this.getName(), + Residence.getInstance().msg(lm.General_PhysicalAreas), temp, page); } public String[] getAreaList() { - String arealist[] = new String[areas.size()]; - int i = 0; - for (Entry entry : areas.entrySet()) { - arealist[i] = entry.getKey(); - i++; - } - return arealist; + String arealist[] = new String[areas.size()]; + int i = 0; + for (Entry entry : areas.entrySet()) { + arealist[i] = entry.getKey(); + i++; + } + return arealist; } public int getZoneDepth() { - int count = 0; - ClaimedResidence res = getParent(); - while (res != null) { - count++; - res = res.getParent(); - } - return count; + int count = 0; + ClaimedResidence res = getParent(); + while (res != null) { + count++; + res = res.getParent(); + } + return count; } // public Location getTeleportLocation() { @@ -1265,274 +1264,274 @@ public int getZoneDepth() { // } public Location getTeleportLocation(Player player) { - if (tpLoc == null) { - if (this.getMainArea() == null) - return null; - Location low = this.getMainArea().getLowLocation(); - Location high = this.getMainArea().getHighLocation(); - Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, - (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); - tpLoc = this.getMiddleFreeLoc(t, player).toVector(); - } - - if (tpLoc != null) { - Location loc = tpLoc.toLocation(this.getMainArea().getLowLocation().getWorld()); - if (PitchYaw != null) { - loc.setPitch((float) PitchYaw.getX()); - loc.setYaw((float) PitchYaw.getY()); - } - return loc; - } - - return null; + if (tpLoc == null) { + if (this.getMainArea() == null) + return null; + Location low = this.getMainArea().getLowLocation(); + Location high = this.getMainArea().getHighLocation(); + Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, + (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); + tpLoc = this.getMiddleFreeLoc(t, player).toVector(); + } + + if (tpLoc != null) { + Location loc = tpLoc.toLocation(this.getMainArea().getLowLocation().getWorld()); + if (PitchYaw != null) { + loc.setPitch((float) PitchYaw.getX()); + loc.setYaw((float) PitchYaw.getY()); + } + return loc; + } + + return null; } public void setTpLoc(Player player, boolean resadmin) { - if (!this.perms.hasResidencePermission(player, false) && !resadmin) { - Residence.getInstance().msg(player, lm.General_NoPermission); - return; - } - if (!this.containsLoc(player.getLocation())) { - Residence.getInstance().msg(player, lm.Residence_NotIn); - return; - } + if (!this.perms.hasResidencePermission(player, false) && !resadmin) { + Residence.getInstance().msg(player, lm.General_NoPermission); + return; + } + if (!this.containsLoc(player.getLocation())) { + Residence.getInstance().msg(player, lm.Residence_NotIn); + return; + } - world = player.getWorld(); - tpLoc = player.getLocation().toVector(); - PitchYaw = new Vector(player.getLocation().getPitch(), player.getLocation().getYaw(), 0); - Residence.getInstance().msg(player, lm.Residence_SetTeleportLocation); + world = player.getWorld(); + tpLoc = player.getLocation().toVector(); + PitchYaw = new Vector(player.getLocation().getPitch(), player.getLocation().getYaw(), 0); + Residence.getInstance().msg(player, lm.Residence_SetTeleportLocation); } public int isSafeTp(Player player) { - if (player.getAllowFlight()) - return 0; + if (player.getAllowFlight()) + return 0; - if (player.getGameMode() == GameMode.CREATIVE) - return 0; + if (player.getGameMode() == GameMode.CREATIVE) + return 0; - if (Utils.isSpectator(player.getGameMode())) - return 0; + if (Utils.isSpectator(player.getGameMode())) + return 0; - if (tpLoc == null) - return 0; + if (tpLoc == null) + return 0; - Location tempLoc = this.getTeleportLocation(player).clone(); + Location tempLoc = this.getTeleportLocation(player).clone(); - int fallDistance = 0; - for (int i = (int) tempLoc.getY(); i >= CMIWorld.getMinHeight(tempLoc.getWorld()); i--) { - if (i == 0) { - fallDistance = 555; - break; - } - tempLoc.setY(i); - Block block = tempLoc.getBlock(); - if (ResidencePlayerListener.isEmptyBlock(block)) { - fallDistance++; - } else { + int fallDistance = 0; + for (int i = (int) tempLoc.getY(); i >= CMIWorld.getMinHeight(tempLoc.getWorld()); i--) { + if (i == 0) { + fallDistance = 555; + break; + } + tempLoc.setY(i); + Block block = tempLoc.getBlock(); + if (ResidencePlayerListener.isEmptyBlock(block)) { + fallDistance++; + } else { - if (CMIMaterial.get(block).isLava()) { - fallDistance = 556; - } + if (CMIMaterial.get(block).isLava()) { + fallDistance = 556; + } - break; - } - } - return fallDistance; + break; + } + } + return fallDistance; } public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { - boolean isAdmin = Residence.getInstance().isResAdminOn(reqPlayer); - - if (this.getRaid().isRaidInitialized()) { - if (this.getRaid().isAttacker(targetPlayer) || this.getRaid().isDefender(targetPlayer) && !ConfigManager.RaidDefenderTeleport || !resadmin) { - Residence.getInstance().msg(reqPlayer, lm.Raid_cantDo); - return; - } - } else { - if (!resadmin && !isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer, 10000L) && !ResPerm.admin_tp.hasPermission(reqPlayer, 10000L) - && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(reqPlayer); - PermissionGroup group = rPlayer.getGroup(); - if (!group.hasTpAccess()) { - Residence.getInstance().msg(reqPlayer, lm.General_TeleportDeny); - return; - } - if (!reqPlayer.equals(targetPlayer)) { - Residence.getInstance().msg(reqPlayer, lm.General_NoPermission); - return; - } - if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { - Residence.getInstance().msg(reqPlayer, lm.Residence_TeleportNoFlag); - return; - } - if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { - Residence.getInstance().msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); - return; - } - } - } - - ClaimedResidence old = Residence.getInstance().getTeleportMap().get(targetPlayer.getName()); - - if (Bukkit.getWorld(this.getPermissions().getWorldName()) == null) - return; - - if (old == null || !old.equals(this)) { - int distance = isSafeTp(reqPlayer); - if (distance > 6) { - if (distance == 556) - Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirmLava, distance); - else if (distance == 555) - Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirmVoid, distance); - else - Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirm, distance); - Residence.getInstance().getTeleportMap().put(reqPlayer.getName(), this); - return; - } - } - - boolean bypassDelay = ResPerm.tpdelaybypass.hasPermission(targetPlayer); - - if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin && !bypassDelay) { - Residence.getInstance().msg(reqPlayer, lm.General_TeleportStarted, this.getName(), - Residence.getInstance().getConfigManager().getTeleportDelay()); - if (Residence.getInstance().getConfigManager().isTeleportTitleMessage()) - TpTimer(reqPlayer, Residence.getInstance().getConfigManager().getTeleportDelay()); - Residence.getInstance().getTeleportDelayMap().add(reqPlayer.getName()); - } - - Location loc = this.getTeleportLocation(targetPlayer); - - if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) - performDelaydTp(loc, targetPlayer, reqPlayer, true); - else - performInstantTp(loc, targetPlayer, reqPlayer, true); + boolean isAdmin = Residence.getInstance().isResAdminOn(reqPlayer); + + if (this.getRaid().isRaidInitialized()) { + if (this.getRaid().isAttacker(targetPlayer) || this.getRaid().isDefender(targetPlayer) && !ConfigManager.RaidDefenderTeleport || !resadmin) { + Residence.getInstance().msg(reqPlayer, lm.Raid_cantDo); + return; + } + } else { + if (!resadmin && !isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer, 10000L) && !ResPerm.admin_tp.hasPermission(reqPlayer, 10000L) + && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(reqPlayer); + PermissionGroup group = rPlayer.getGroup(); + if (!group.hasTpAccess()) { + Residence.getInstance().msg(reqPlayer, lm.General_TeleportDeny); + return; + } + if (!reqPlayer.equals(targetPlayer)) { + Residence.getInstance().msg(reqPlayer, lm.General_NoPermission); + return; + } + if (!this.perms.playerHas(reqPlayer, Flags.tp, FlagCombo.TrueOrNone)) { + Residence.getInstance().msg(reqPlayer, lm.Residence_TeleportNoFlag); + return; + } + if (!this.perms.playerHas(reqPlayer, Flags.move, FlagCombo.TrueOrNone)) { + Residence.getInstance().msg(reqPlayer, lm.Residence_MoveDeny, this.getName()); + return; + } + } + } + + ClaimedResidence old = Residence.getInstance().getTeleportMap().get(targetPlayer.getName()); + + if (Bukkit.getWorld(this.getPermissions().getWorldName()) == null) + return; + + if (old == null || !old.equals(this)) { + int distance = isSafeTp(reqPlayer); + if (distance > 6) { + if (distance == 556) + Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirmLava, distance); + else if (distance == 555) + Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirmVoid, distance); + else + Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirm, distance); + Residence.getInstance().getTeleportMap().put(reqPlayer.getName(), this); + return; + } + } + + boolean bypassDelay = ResPerm.tpdelaybypass.hasPermission(targetPlayer); + + if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin && !bypassDelay) { + Residence.getInstance().msg(reqPlayer, lm.General_TeleportStarted, this.getName(), + Residence.getInstance().getConfigManager().getTeleportDelay()); + if (Residence.getInstance().getConfigManager().isTeleportTitleMessage()) + TpTimer(reqPlayer, Residence.getInstance().getConfigManager().getTeleportDelay()); + Residence.getInstance().getTeleportDelayMap().add(reqPlayer.getName()); + } + + Location loc = this.getTeleportLocation(targetPlayer); + + if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) + performDelaydTp(loc, targetPlayer, reqPlayer, true); + else + performInstantTp(loc, targetPlayer, reqPlayer, true); } public void TpTimer(final Player player, final int t) { - CMITitleMessage.send(player, Residence.getInstance().msg(lm.General_TeleportTitle), - Residence.getInstance().msg(lm.General_TeleportTitleTime, t)); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { - @Override - public void run() { - if (!Residence.getInstance().getTeleportDelayMap().contains(player.getName())) - return; - if (t > 1) - TpTimer(player, t - 1); - } - }, 20L); + CMITitleMessage.send(player, Residence.getInstance().msg(lm.General_TeleportTitle), + Residence.getInstance().msg(lm.General_TeleportTitleTime, t)); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { + @Override + public void run() { + if (!Residence.getInstance().getTeleportDelayMap().contains(player.getName())) + return; + if (t > 1) + TpTimer(player, t - 1); + } + }, 20L); } public void performDelaydTp(final Location targloc, final Player targetPlayer, Player reqPlayer, - final boolean near) { - ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - Residence.getInstance().getServ().getPluginManager().callEvent(tpevent); - if (tpevent.isCancelled()) - return; - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { - @Override - public void run() { - if (targloc == null || targetPlayer == null || !targetPlayer.isOnline()) - return; - if (!Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName()) - && Residence.getInstance().getConfigManager().getTeleportDelay() > 0) - return; - else if (Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName())) - Residence.getInstance().getTeleportDelayMap().remove(targetPlayer.getName()); - targetPlayer.closeInventory(); - targetPlayer.teleport(targloc); - if (near) - Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); - else - Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); - return; - } - }, Residence.getInstance().getConfigManager().getTeleportDelay() * 20L); + final boolean near) { + ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); + Residence.getInstance().getServ().getPluginManager().callEvent(tpevent); + if (tpevent.isCancelled()) + return; + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { + @Override + public void run() { + if (targloc == null || targetPlayer == null || !targetPlayer.isOnline()) + return; + if (!Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName()) + && Residence.getInstance().getConfigManager().getTeleportDelay() > 0) + return; + else if (Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName())) + Residence.getInstance().getTeleportDelayMap().remove(targetPlayer.getName()); + targetPlayer.closeInventory(); + targetPlayer.teleport(targloc); + if (near) + Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); + else + Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); + return; + } + }, Residence.getInstance().getConfigManager().getTeleportDelay() * 20L); } private void performInstantTp(final Location targloc, final Player targetPlayer, Player reqPlayer, - final boolean near) { - ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); - Residence.getInstance().getServ().getPluginManager().callEvent(tpevent); - if (!tpevent.isCancelled()) { - targetPlayer.closeInventory(); - boolean teleported = targetPlayer.teleport(targloc); - - if (teleported) { - if (near) - Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); - else - Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); - } - } + final boolean near) { + ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); + Residence.getInstance().getServ().getPluginManager().callEvent(tpevent); + if (!tpevent.isCancelled()) { + targetPlayer.closeInventory(); + boolean teleported = targetPlayer.teleport(targloc); + + if (teleported) { + if (near) + Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); + else + Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); + } + } } public String getAreaIDbyLoc(Location loc) { - for (Entry area : areas.entrySet()) { - if (area.getValue().containsLoc(loc)) - return area.getKey(); - } - return null; + for (Entry area : areas.entrySet()) { + if (area.getValue().containsLoc(loc)) + return area.getKey(); + } + return null; } public CuboidArea getCuboidAreabyName(String name) { - for (Entry area : areas.entrySet()) { - if (area.getKey().equals(name)) - return area.getValue(); - } - return null; + for (Entry area : areas.entrySet()) { + if (area.getKey().equals(name)) + return area.getValue(); + } + return null; } public void removeArea(String id) { - Residence.getInstance().getResidenceManager().removeChunkList(this.getName()); - areas.remove(id); - Residence.getInstance().getResidenceManager().calculateChunks(this.getName()); + Residence.getInstance().getResidenceManager().removeChunkList(this.getName()); + areas.remove(id); + Residence.getInstance().getResidenceManager().calculateChunks(this.getName()); } public void removeArea(Player player, String id, boolean resadmin) { - if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { - if (!areas.containsKey(id)) { - Residence.getInstance().msg(player, lm.Area_NonExist); - return; - } - if (areas.size() == 1 && !Residence.getInstance().getConfigManager().allowEmptyResidences()) { - Residence.getInstance().msg(player, lm.Area_RemoveLast); - return; - } - - ResidenceAreaDeleteEvent resevent = new ResidenceAreaDeleteEvent(player, this, - player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); - Residence.getInstance().getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return; - - removeArea(id); - if (player != null) - Residence.getInstance().msg(player, lm.Area_Remove, id); - } else { - if (player != null) - Residence.getInstance().msg(player, lm.General_NoPermission); - } + if (this.getPermissions().hasResidencePermission(player, true) || resadmin) { + if (!areas.containsKey(id)) { + Residence.getInstance().msg(player, lm.Area_NonExist); + return; + } + if (areas.size() == 1 && !Residence.getInstance().getConfigManager().allowEmptyResidences()) { + Residence.getInstance().msg(player, lm.Area_RemoveLast); + return; + } + + ResidenceAreaDeleteEvent resevent = new ResidenceAreaDeleteEvent(player, this, + player == null ? DeleteCause.OTHER : DeleteCause.PLAYER_DELETE); + Residence.getInstance().getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return; + + removeArea(id); + if (player != null) + Residence.getInstance().msg(player, lm.Area_Remove, id); + } else { + if (player != null) + Residence.getInstance().msg(player, lm.General_NoPermission); + } } public Map save() { - Map root = new HashMap<>(); - Map areamap = new HashMap<>(); + Map root = new HashMap<>(); + Map areamap = new HashMap<>(); - if (mainRes) - root.put("MainResidence", mainRes); - if (createTime != 0L) - root.put("CreatedOn", createTime); + if (mainRes) + root.put("MainResidence", mainRes); + if (createTime != 0L) + root.put("CreatedOn", createTime); - if (this.isTopArea() && raid != null && this.getRaid().isUnderRaidCooldown()) { - root.put("LastRaid", this.getRaid().getEndsAt()); - } + if (this.isTopArea() && raid != null && this.getRaid().isUnderRaidCooldown()) { + root.put("LastRaid", this.getRaid().getEndsAt()); + } - if (this.isTopArea() && raid != null && this.getRaid().isImmune()) { - root.put("Immunity", this.getRaid().getImmunityUntil()); - } + if (this.isTopArea() && raid != null && this.getRaid().isImmune()) { + root.put("Immunity", this.getRaid().getImmunityUntil()); + } // if (this.getTown() != null && !this.isSubzone()) { // if (this.getTown().getMainResidence().equals(this)) @@ -1541,25 +1540,25 @@ public Map save() { // root.put("Town", this.getTown().getTownName()); // } - if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { - if (enterMessage != null && leaveMessage != null) { - MinimizeMessages min = Residence.getInstance().getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, - leaveMessage); - if (min == null) { - if (enterMessage != null) - root.put("EnterMessage", enterMessage); - if (leaveMessage != null) - root.put("LeaveMessage", leaveMessage); - } else { - root.put("Messages", min.getId()); - } - } - } else { - if (enterMessage != null) - root.put("EnterMessage", enterMessage); - if (leaveMessage != null) - root.put("LeaveMessage", leaveMessage); - } + if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { + if (enterMessage != null && leaveMessage != null) { + MinimizeMessages min = Residence.getInstance().getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, + leaveMessage); + if (min == null) { + if (enterMessage != null) + root.put("EnterMessage", enterMessage); + if (leaveMessage != null) + root.put("LeaveMessage", leaveMessage); + } else { + root.put("Messages", min.getId()); + } + } + } else { + if (enterMessage != null) + root.put("EnterMessage", enterMessage); + if (leaveMessage != null) + root.put("LeaveMessage", leaveMessage); + } // if (enterMessage != null) // root.put("EnterMessage", enterMessage); @@ -1570,138 +1569,138 @@ public Map save() { // root.put("LeaveMessage", id); // } - if (ShopDesc != null) - root.put("ShopDescription", ShopDesc); - if (bank.getStoredMoneyD() != 0) - root.put("StoredMoney", bank.getStoredMoneyD()); - if (BlockSellPrice != 0D) - root.put("BlockSellPrice", BlockSellPrice); - - if (!ChatPrefix.equals("")) - root.put("ChatPrefix", ChatPrefix); - if (!ChannelColor.getCleanName().equals(Residence.getInstance().getConfigManager().getChatColor().getName()) - && !ChannelColor.getName().equalsIgnoreCase("WHITE")) { - root.put("ChannelColor", ChannelColor.getName()); - } - - Map map = blacklist.save(); - if (!map.isEmpty()) - root.put("BlackList", map); - map = ignorelist.save(); - if (!map.isEmpty()) - root.put("IgnoreList", map); - - if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { - for (Entry entry : areas.entrySet()) { - areamap.put(entry.getKey(), entry.getValue().newSave()); - } - } else { - for (Entry entry : areas.entrySet()) { - areamap.put(entry.getKey(), entry.getValue().save()); - } - } - - root.put("Areas", areamap); - Map subzonemap = new HashMap<>(); - for (Entry sz : subzones.entrySet()) { - subzonemap.put(sz.getValue().getResidenceName(), sz.getValue().save()); - } - if (!subzonemap.isEmpty()) - root.put("Subzones", subzonemap); - root.put("Permissions", perms.save(this.getWorld())); - - if (!this.cmdBlackList.isEmpty()) - root.put("cmdBlackList", this.cmdBlackList); - if (!this.cmdWhiteList.isEmpty()) - root.put("cmdWhiteList", this.cmdWhiteList); - - if (tpLoc != null) { - if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { - root.put("TPLoc", - convertDouble(tpLoc.getX()) + ":" + convertDouble(tpLoc.getY()) + ":" - + convertDouble(tpLoc.getZ()) + ":" + convertDouble(PitchYaw == null ? 0 : PitchYaw.getX()) + ":" - + convertDouble(PitchYaw == null ? 0 : PitchYaw.getY())); - } else { - Map tpmap = new HashMap(); - tpmap.put("X", convertDouble(this.tpLoc.getX())); - tpmap.put("Y", convertDouble(this.tpLoc.getY())); - tpmap.put("Z", convertDouble(this.tpLoc.getZ())); - tpmap.put("Pitch", convertDouble(PitchYaw == null ? 0 : this.PitchYaw.getX())); - tpmap.put("Yaw", convertDouble(PitchYaw == null ? 0 : this.PitchYaw.getY())); - root.put("TPLoc", tpmap); - } - } - return root; + if (ShopDesc != null) + root.put("ShopDescription", ShopDesc); + if (bank.getStoredMoneyD() != 0) + root.put("StoredMoney", bank.getStoredMoneyD()); + if (BlockSellPrice != 0D) + root.put("BlockSellPrice", BlockSellPrice); + + if (!ChatPrefix.equals("")) + root.put("ChatPrefix", ChatPrefix); + if (!ChannelColor.getCleanName().equals(Residence.getInstance().getConfigManager().getChatColor().getName()) + && !ChannelColor.getName().equalsIgnoreCase("WHITE")) { + root.put("ChannelColor", ChannelColor.getName()); + } + + Map map = blacklist.save(); + if (!map.isEmpty()) + root.put("BlackList", map); + map = ignorelist.save(); + if (!map.isEmpty()) + root.put("IgnoreList", map); + + if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { + for (Entry entry : areas.entrySet()) { + areamap.put(entry.getKey(), entry.getValue().newSave()); + } + } else { + for (Entry entry : areas.entrySet()) { + areamap.put(entry.getKey(), entry.getValue().save()); + } + } + + root.put("Areas", areamap); + Map subzonemap = new HashMap<>(); + for (Entry sz : subzones.entrySet()) { + subzonemap.put(sz.getValue().getResidenceName(), sz.getValue().save()); + } + if (!subzonemap.isEmpty()) + root.put("Subzones", subzonemap); + root.put("Permissions", perms.save(this.getWorld())); + + if (!this.cmdBlackList.isEmpty()) + root.put("cmdBlackList", this.cmdBlackList); + if (!this.cmdWhiteList.isEmpty()) + root.put("cmdWhiteList", this.cmdWhiteList); + + if (tpLoc != null) { + if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { + root.put("TPLoc", + convertDouble(tpLoc.getX()) + ":" + convertDouble(tpLoc.getY()) + ":" + + convertDouble(tpLoc.getZ()) + ":" + convertDouble(PitchYaw == null ? 0 : PitchYaw.getX()) + ":" + + convertDouble(PitchYaw == null ? 0 : PitchYaw.getY())); + } else { + Map tpmap = new HashMap(); + tpmap.put("X", convertDouble(this.tpLoc.getX())); + tpmap.put("Y", convertDouble(this.tpLoc.getY())); + tpmap.put("Z", convertDouble(this.tpLoc.getZ())); + tpmap.put("Pitch", convertDouble(PitchYaw == null ? 0 : this.PitchYaw.getX())); + tpmap.put("Yaw", convertDouble(PitchYaw == null ? 0 : this.PitchYaw.getY())); + root.put("TPLoc", tpmap); + } + } + return root; } // Converting double with comman to dots format and striping to 2 numbers after // dot private static double convertDouble(double d) { - return convertDouble(String.valueOf(d)); + return convertDouble(String.valueOf(d)); } private static double convertDouble(String dString) { - DecimalFormat formatter = new DecimalFormat("#0.00"); - formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); - dString = dString.replace(",", "."); - Double d = 0D; - try { - d = Double.valueOf(dString); - d = Double.valueOf(formatter.format(d)); - } catch (Exception e) { - } - return d; + DecimalFormat formatter = new DecimalFormat("#0.00"); + formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.getDefault())); + dString = dString.replace(",", "."); + Double d = 0D; + try { + d = Double.valueOf(dString); + d = Double.valueOf(formatter.format(d)); + } catch (Exception e) { + } + return d; } @SuppressWarnings("unchecked") public static ClaimedResidence load(String worldName, Map root, ClaimedResidence parent, - Residence plugin) throws Exception { - ClaimedResidence res = new ClaimedResidence(); - if (root == null) - throw new Exception("Null residence!"); + Residence plugin) throws Exception { + ClaimedResidence res = new ClaimedResidence(); + if (root == null) + throw new Exception("Null residence!"); - if (root.containsKey("CapitalizedName")) - res.resName = ((String) root.get("CapitalizedName")); + if (root.containsKey("CapitalizedName")) + res.resName = ((String) root.get("CapitalizedName")); - if (root.containsKey("CreatedOn")) - res.createTime = ((Long) root.get("CreatedOn")); - else - res.createTime = System.currentTimeMillis(); + if (root.containsKey("CreatedOn")) + res.createTime = ((Long) root.get("CreatedOn")); + else + res.createTime = System.currentTimeMillis(); - if (root.containsKey("LastRaid")) { - res.getRaid().setEndsAt(((Long) root.get("LastRaid"))); - } + if (root.containsKey("LastRaid")) { + res.getRaid().setEndsAt(((Long) root.get("LastRaid"))); + } - if (root.containsKey("Immunity")) { - res.getRaid().setImmunityUntil(((Long) root.get("Immunity"))); - } + if (root.containsKey("Immunity")) { + res.getRaid().setImmunityUntil(((Long) root.get("Immunity"))); + } - if (root.containsKey("ShopDescription")) - res.setShopDesc((String) root.get("ShopDescription")); + if (root.containsKey("ShopDescription")) + res.setShopDesc((String) root.get("ShopDescription")); - if (root.containsKey("StoredMoney")) { - if (root.get("StoredMoney") instanceof Double) - res.bank.setStoredMoney((Double) root.get("StoredMoney")); - else - res.bank.setStoredMoney((Integer) root.get("StoredMoney")); - } + if (root.containsKey("StoredMoney")) { + if (root.get("StoredMoney") instanceof Double) + res.bank.setStoredMoney((Double) root.get("StoredMoney")); + else + res.bank.setStoredMoney((Integer) root.get("StoredMoney")); + } - if (root.containsKey("BlackList")) - res.blacklist = ResidenceItemList.load(plugin, res, (Map) root.get("BlackList")); - if (root.containsKey("IgnoreList")) - res.ignorelist = ResidenceItemList.load(plugin, res, (Map) root.get("IgnoreList")); + if (root.containsKey("BlackList")) + res.blacklist = ResidenceItemList.load(plugin, res, (Map) root.get("BlackList")); + if (root.containsKey("IgnoreList")) + res.ignorelist = ResidenceItemList.load(plugin, res, (Map) root.get("IgnoreList")); - Map areamap = (Map) root.get("Areas"); + Map areamap = (Map) root.get("Areas"); - res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); + res.perms = ResidencePermissions.load(worldName, res, (Map) root.get("Permissions")); - if (res.getPermissions().getOwnerLastKnownName() == null) - return null; - if (res.perms.getOwnerUUID() == null) { + if (res.getPermissions().getOwnerLastKnownName() == null) + return null; + if (res.perms.getOwnerUUID() == null) { - Bukkit.getConsoleSender().sendMessage("Failed to load residence: " + res.getName()); + Bukkit.getConsoleSender().sendMessage("Failed to load residence: " + res.getName()); - } + } // if (root.containsKey("TownCap")) { // String townName = (String) root.get("TownCap"); // Town t = Residence.getInstance().getTownManager().getTown(townName); @@ -1718,387 +1717,387 @@ public static ClaimedResidence load(String worldName, Map root, // res.setTown(t); // } - if (root.containsKey("MainResidence")) - res.mainRes = (Boolean) root.get("MainResidence"); - - if (root.containsKey("BlockSellPrice")) - res.BlockSellPrice = (Double) root.get("BlockSellPrice"); - else { - res.BlockSellPrice = 0D; - } - - World world = Residence.getInstance().getServ().getWorld(res.perms.getWorldName()); - - if (world == null && !Residence.getInstance().getConfigManager().isLoadEveryWorld()) - throw new Exception("Cant Find World: " + res.perms.getWorldName()); - - for (Entry map : areamap.entrySet()) { - if (map.getValue() instanceof String) { - // loading new same format - res.areas.put(map.getKey(), CuboidArea.newLoad((String) map.getValue(), res.perms.getWorldName())); - } else { - // loading old format - res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), res.perms.getWorldName())); - } - } + if (root.containsKey("MainResidence")) + res.mainRes = (Boolean) root.get("MainResidence"); + + if (root.containsKey("BlockSellPrice")) + res.BlockSellPrice = (Double) root.get("BlockSellPrice"); + else { + res.BlockSellPrice = 0D; + } + + World world = Residence.getInstance().getServ().getWorld(res.perms.getWorldName()); + + if (world == null && !Residence.getInstance().getConfigManager().isLoadEveryWorld()) + throw new Exception("Cant Find World: " + res.perms.getWorldName()); + + for (Entry map : areamap.entrySet()) { + if (map.getValue() instanceof String) { + // loading new same format + res.areas.put(map.getKey(), CuboidArea.newLoad((String) map.getValue(), res.perms.getWorldName())); + } else { + // loading old format + res.areas.put(map.getKey(), CuboidArea.load((Map) map.getValue(), res.perms.getWorldName())); + } + } - if (root.containsKey("Subzones")) { - Map subzonemap = (Map) root.get("Subzones"); - for (Entry map : subzonemap.entrySet()) { - ClaimedResidence subres = ClaimedResidence.load(worldName, (Map) map.getValue(), res, - plugin); + if (root.containsKey("Subzones")) { + Map subzonemap = (Map) root.get("Subzones"); + for (Entry map : subzonemap.entrySet()) { + ClaimedResidence subres = ClaimedResidence.load(worldName, (Map) map.getValue(), res, + plugin); - if (subres == null) - continue; + if (subres == null) + continue; - if (subres.getResidenceName() == null) - subres.setName(map.getKey()); + if (subres.getResidenceName() == null) + subres.setName(map.getKey()); - if (Residence.getInstance().getConfigManager().flagsInherit()) - subres.getPermissions().setParent(res.getPermissions()); + if (Residence.getInstance().getConfigManager().flagsInherit()) + subres.getPermissions().setParent(res.getPermissions()); - // Adding subzone owner into hies res list if parent zone owner is not same - // person - if (subres.getParent() != null && !subres.getOwnerUUID().equals(subres.getParent().getOwnerUUID())) - Residence.getInstance().getPlayerManager().addResidence(subres.getOwner(), subres); + // Adding subzone owner into hies res list if parent zone owner is not same + // person + if (subres.getParent() != null && !subres.getOwnerUUID().equals(subres.getParent().getOwnerUUID())) + Residence.getInstance().getPlayerManager().addResidence(subres.getOwner(), subres); - res.subzones.put(map.getKey().toLowerCase(), subres); - } - } + res.subzones.put(map.getKey().toLowerCase(), subres); + } + } - if (root.containsKey("EnterMessage") && root.get("EnterMessage") instanceof String) - res.enterMessage = (String) root.get("EnterMessage"); - if (root.containsKey("LeaveMessage") && root.get("LeaveMessage") instanceof String) - res.leaveMessage = (String) root.get("LeaveMessage"); + if (root.containsKey("EnterMessage") && root.get("EnterMessage") instanceof String) + res.enterMessage = (String) root.get("EnterMessage"); + if (root.containsKey("LeaveMessage") && root.get("LeaveMessage") instanceof String) + res.leaveMessage = (String) root.get("LeaveMessage"); - if (root.containsKey("Messages") && root.get("Messages") instanceof Integer) { - res.enterMessage = Residence.getInstance().getResidenceManager().getChacheMessageEnter(worldName, - (Integer) root.get("Messages")); - res.leaveMessage = Residence.getInstance().getResidenceManager().getChacheMessageLeave(worldName, - (Integer) root.get("Messages")); - } + if (root.containsKey("Messages") && root.get("Messages") instanceof Integer) { + res.enterMessage = Residence.getInstance().getResidenceManager().getChacheMessageEnter(worldName, + (Integer) root.get("Messages")); + res.leaveMessage = Residence.getInstance().getResidenceManager().getChacheMessageLeave(worldName, + (Integer) root.get("Messages")); + } - res.parent = parent; + res.parent = parent; - if (root.get("TPLoc") instanceof String) { - String tpLoc = (String) root.get("TPLoc"); + if (root.get("TPLoc") instanceof String) { + String tpLoc = (String) root.get("TPLoc"); - double pitch = 0.0; - double yaw = 0.0; + double pitch = 0.0; + double yaw = 0.0; - try { - if (tpLoc.contains(",")) - tpLoc = tpLoc.replace(",", "."); - String[] split = tpLoc.split(":"); - if (split.length > 4) - yaw = Double.parseDouble(split[4]); - if (split.length > 3) - pitch = Double.parseDouble(split[3]); + try { + if (tpLoc.contains(",")) + tpLoc = tpLoc.replace(",", "."); + String[] split = tpLoc.split(":"); + if (split.length > 4) + yaw = Double.parseDouble(split[4]); + if (split.length > 3) + pitch = Double.parseDouble(split[3]); - res.tpLoc = new Vector(Double.parseDouble(split[0]), Double.parseDouble(split[1]), Double.parseDouble(split[2])); - } catch (Exception e) { - } + res.tpLoc = new Vector(Double.parseDouble(split[0]), Double.parseDouble(split[1]), Double.parseDouble(split[2])); + } catch (Exception e) { + } - res.PitchYaw = new Vector((float) pitch, (float) yaw, 0); + res.PitchYaw = new Vector((float) pitch, (float) yaw, 0); - } else { - Map tploc = (Map) root.get("TPLoc"); - if (tploc != null) { - double pitch = 0.0; - double yaw = 0.0; + } else { + Map tploc = (Map) root.get("TPLoc"); + if (tploc != null) { + double pitch = 0.0; + double yaw = 0.0; - if (tploc.containsKey("Yaw")) - yaw = convertDouble(tploc.get("Yaw").toString()); + if (tploc.containsKey("Yaw")) + yaw = convertDouble(tploc.get("Yaw").toString()); - if (tploc.containsKey("Pitch")) - pitch = convertDouble(tploc.get("Pitch").toString()); + if (tploc.containsKey("Pitch")) + pitch = convertDouble(tploc.get("Pitch").toString()); - res.tpLoc = new Vector(convertDouble(tploc.get("X").toString()), convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z").toString())); - res.PitchYaw = new Vector((float) pitch, (float) yaw, 0); - } - } + res.tpLoc = new Vector(convertDouble(tploc.get("X").toString()), convertDouble(tploc.get("Y").toString()), convertDouble(tploc.get("Z").toString())); + res.PitchYaw = new Vector((float) pitch, (float) yaw, 0); + } + } - if (root.containsKey("cmdBlackList")) - res.cmdBlackList = (List) root.get("cmdBlackList"); - if (root.containsKey("cmdWhiteList")) - res.cmdWhiteList = (List) root.get("cmdWhiteList"); - - if (root.containsKey("ChatPrefix")) - res.ChatPrefix = (String) root.get("ChatPrefix"); + if (root.containsKey("cmdBlackList")) + res.cmdBlackList = (List) root.get("cmdBlackList"); + if (root.containsKey("cmdWhiteList")) + res.cmdWhiteList = (List) root.get("cmdWhiteList"); + + if (root.containsKey("ChatPrefix")) + res.ChatPrefix = (String) root.get("ChatPrefix"); - if (root.containsKey("ChannelColor")) - res.ChannelColor = CMIChatColor.getColor((String) root.get("ChannelColor")); - else { - res.ChannelColor = Residence.getInstance().getConfigManager().getChatColor(); - } - - return res; + if (root.containsKey("ChannelColor")) + res.ChannelColor = CMIChatColor.getColor((String) root.get("ChannelColor")); + else { + res.ChannelColor = Residence.getInstance().getConfigManager().getChatColor(); + } + + return res; } public int getAreaCount() { - return areas.size(); + return areas.size(); } public boolean renameSubzone(String oldName, String newName) { - return this.renameSubzone(null, oldName, newName, true); + return this.renameSubzone(null, oldName, newName, true); } public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { - if (!Residence.getInstance().validName(newName)) { - Residence.getInstance().msg(player, lm.Invalid_NameCharacters); - return false; - } - if (oldName == null) - return false; - if (newName == null) - return false; - String newN = newName; - oldName = oldName.toLowerCase(); - newName = newName.toLowerCase(); - - ClaimedResidence res = subzones.get(oldName); - if (res == null) { - if (player != null) - Residence.getInstance().msg(player, lm.Invalid_Subzone); - return false; - } - if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { - Residence.getInstance().msg(player, lm.General_NoPermission); - return false; - } - if (subzones.containsKey(newName)) { - if (player != null) - Residence.getInstance().msg(player, lm.Subzone_Exists, newName); - return false; - } - res.setName(newN); - subzones.put(newName, res); - subzones.remove(oldName); - if (player != null) - Residence.getInstance().msg(player, lm.Subzone_Rename, oldName, newName); - return true; + if (!Residence.getInstance().validName(newName)) { + Residence.getInstance().msg(player, lm.Invalid_NameCharacters); + return false; + } + if (oldName == null) + return false; + if (newName == null) + return false; + String newN = newName; + oldName = oldName.toLowerCase(); + newName = newName.toLowerCase(); + + ClaimedResidence res = subzones.get(oldName); + if (res == null) { + if (player != null) + Residence.getInstance().msg(player, lm.Invalid_Subzone); + return false; + } + if (player != null && !res.getPermissions().hasResidencePermission(player, true) && !resadmin) { + Residence.getInstance().msg(player, lm.General_NoPermission); + return false; + } + if (subzones.containsKey(newName)) { + if (player != null) + Residence.getInstance().msg(player, lm.Subzone_Exists, newName); + return false; + } + res.setName(newN); + subzones.put(newName, res); + subzones.remove(oldName); + if (player != null) + Residence.getInstance().msg(player, lm.Subzone_Rename, oldName, newName); + return true; } public boolean renameArea(String oldName, String newName) { - return this.renameArea(null, oldName, newName, true); + return this.renameArea(null, oldName, newName, true); } public boolean renameArea(Player player, String oldName, String newName, boolean resadmin) { - if (!Residence.getInstance().validName(newName)) { - Residence.getInstance().msg(player, lm.Invalid_NameCharacters); - return false; - } - - if (this.getRaid().isRaidInitialized() && !resadmin) { - Residence.getInstance().msg(player, lm.Raid_cantDo); - return false; - } - - if (player == null || perms.hasResidencePermission(player, true) || resadmin) { - if (areas.containsKey(newName)) { - if (player != null) - Residence.getInstance().msg(player, lm.Area_Exists); - return false; - } - CuboidArea area = areas.get(oldName); - if (area == null) { - if (player != null) - Residence.getInstance().msg(player, lm.Area_InvalidName); - return false; - } - areas.put(newName, area); - areas.remove(oldName); - if (player != null) - Residence.getInstance().msg(player, lm.Area_Rename, oldName, newName); - return true; - } - Residence.getInstance().msg(player, lm.General_NoPermission); - return false; + if (!Residence.getInstance().validName(newName)) { + Residence.getInstance().msg(player, lm.Invalid_NameCharacters); + return false; + } + + if (this.getRaid().isRaidInitialized() && !resadmin) { + Residence.getInstance().msg(player, lm.Raid_cantDo); + return false; + } + + if (player == null || perms.hasResidencePermission(player, true) || resadmin) { + if (areas.containsKey(newName)) { + if (player != null) + Residence.getInstance().msg(player, lm.Area_Exists); + return false; + } + CuboidArea area = areas.get(oldName); + if (area == null) { + if (player != null) + Residence.getInstance().msg(player, lm.Area_InvalidName); + return false; + } + areas.put(newName, area); + areas.remove(oldName); + if (player != null) + Residence.getInstance().msg(player, lm.Area_Rename, oldName, newName); + return true; + } + Residence.getInstance().msg(player, lm.General_NoPermission); + return false; } public CuboidArea getArea(String name) { - return areas.get(name); + return areas.get(name); } public String getName() { - String name = this.resName; - if (this.getParent() != null) - name = this.getParent().getName() + "." + name; - if (name == null) - return "Unknown"; - return name; + String name = this.resName; + if (this.getParent() != null) + name = this.getParent().getName() + "." + name; + if (name == null) + return "Unknown"; + return name; } public void remove() { - Residence.getInstance().getResidenceManager().removeResidence(this); - Residence.getInstance().getResidenceManager().removeChunkList(this.getName()); - Residence.getInstance().getPlayerManager().removeResFromPlayer(this); + Residence.getInstance().getResidenceManager().removeResidence(this); + Residence.getInstance().getResidenceManager().removeChunkList(this.getName()); + Residence.getInstance().getPlayerManager().removeResFromPlayer(this); } public ResidenceBank getBank() { - return bank; + return bank; } @Deprecated public String getWorld() { - return perms.getWorldName(); + return perms.getWorldName(); } @Deprecated public String getWorldName() { - return perms.getWorldName(); + return perms.getWorldName(); } public ResidencePlayer getRPlayer() { - return Residence.getInstance().getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); + return Residence.getInstance().getPlayerManager().getResidencePlayer(this.getPermissions().getOwner()); } public PermissionGroup getOwnerGroup() { - return getRPlayer().getGroup(getPermissions().getWorldName()); + return getRPlayer().getGroup(getPermissions().getWorldName()); } public String getOwner() { - return perms.getOwner(); + return perms.getOwner(); } public boolean isOwner(String name) { - Player player = Bukkit.getPlayer(name); - if (player != null) - return isOwner(player); - return perms.getOwner().equalsIgnoreCase(name); + Player player = Bukkit.getPlayer(name); + if (player != null) + return isOwner(player); + return perms.getOwner().equalsIgnoreCase(name); } public boolean isOwner(UUID uuid) { - return perms.getOwnerUUID().toString().equals(uuid.toString()); + return perms.getOwnerUUID().toString().equals(uuid.toString()); } public boolean isOwner(Player p) { - if (p == null) - return false; - if (Residence.getInstance().getConfigManager().isOfflineMode()) - return perms.getOwner().equalsIgnoreCase(p.getName()); - return perms.getOwnerUUID().equals(p.getUniqueId()); + if (p == null) + return false; + if (Residence.getInstance().getConfigManager().isOfflineMode()) + return perms.getOwner().equalsIgnoreCase(p.getName()); + return perms.getOwnerUUID().equals(p.getUniqueId()); } public boolean isOwner(CommandSender sender) { - if (Residence.getInstance().getConfigManager().isOfflineMode()) { - return perms.getOwner().equalsIgnoreCase(sender.getName()); - } - if (sender instanceof Player) { - return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); - } - return true; + if (Residence.getInstance().getConfigManager().isOfflineMode()) { + return perms.getOwner().equalsIgnoreCase(sender.getName()); + } + if (sender instanceof Player) { + return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); + } + return true; } public void setChatPrefix(String ChatPrefix) { - this.ChatPrefix = ChatPrefix; + this.ChatPrefix = ChatPrefix; } public String getChatPrefix() { - return this.ChatPrefix == null ? "" : this.ChatPrefix; + return this.ChatPrefix == null ? "" : this.ChatPrefix; } public void setChannelColor(CMIChatColor ChannelColor) { - this.ChannelColor = ChannelColor; + this.ChannelColor = ChannelColor; } public ChatChannel getChatChannel() { - return Residence.getInstance().getChatManager().getChannel(this.getName()); + return Residence.getInstance().getChatManager().getChannel(this.getName()); } public CMIChatColor getChannelColor() { - return ChannelColor; + return ChannelColor; } public UUID getOwnerUUID() { - return perms.getOwnerUUID(); + return perms.getOwnerUUID(); } public ResidenceItemList getItemBlacklist() { - return blacklist; + return blacklist; } public ResidenceItemList getItemIgnoreList() { - return ignorelist; + return ignorelist; } public List getCmdBlackList() { - return this.cmdBlackList; + return this.cmdBlackList; } public List getCmdWhiteList() { - return this.cmdWhiteList; + return this.cmdWhiteList; } public boolean addCmdBlackList(String cmd) { - if (cmd.contains("/")) - cmd = cmd.replace("/", ""); - if (!this.cmdBlackList.contains(cmd.toLowerCase())) { - this.cmdBlackList.add(cmd.toLowerCase()); - return true; - } - this.cmdBlackList.remove(cmd.toLowerCase()); - return false; + if (cmd.contains("/")) + cmd = cmd.replace("/", ""); + if (!this.cmdBlackList.contains(cmd.toLowerCase())) { + this.cmdBlackList.add(cmd.toLowerCase()); + return true; + } + this.cmdBlackList.remove(cmd.toLowerCase()); + return false; } public boolean addCmdWhiteList(String cmd) { - if (cmd.contains("/")) - cmd = cmd.replace("/", ""); - if (!this.cmdWhiteList.contains(cmd.toLowerCase())) { - this.cmdWhiteList.add(cmd.toLowerCase()); - return true; - } - this.cmdWhiteList.remove(cmd.toLowerCase()); - return false; + if (cmd.contains("/")) + cmd = cmd.replace("/", ""); + if (!this.cmdWhiteList.contains(cmd.toLowerCase())) { + this.cmdWhiteList.add(cmd.toLowerCase()); + return true; + } + this.cmdWhiteList.remove(cmd.toLowerCase()); + return false; } public Double getBlockSellPrice() { - return BlockSellPrice; + return BlockSellPrice; } public ArrayList getPlayersInResidence() { - ArrayList within = new ArrayList<>(); - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (this.containsLoc(player.getLocation())) { - within.add(player); - } - } - return within; + ArrayList within = new ArrayList<>(); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (this.containsLoc(player.getLocation())) { + within.add(player); + } + } + return within; } public List GetShopVotes() { - return ShopVoteList; + return ShopVoteList; } public void clearShopVotes() { - ShopVoteList.clear(); + ShopVoteList.clear(); } public void addShopVote(List ShopVotes) { - ShopVoteList.addAll(ShopVotes); + ShopVoteList.addAll(ShopVotes); } public void addShopVote(ShopVote ShopVote) { - ShopVoteList.add(ShopVote); + ShopVoteList.add(ShopVote); } public Long getLeaseExpireTime() { - return leaseExpireTime; + return leaseExpireTime; } public void setLeaseExpireTime(Long leaseExpireTime) { - this.leaseExpireTime = leaseExpireTime; + this.leaseExpireTime = leaseExpireTime; } public boolean kickFromResidence(Player player) { - if (!this.containsLoc(player.getLocation())) - return false; - Location loc = Residence.getInstance().getConfigManager().getKickLocation(); - player.closeInventory(); - if (loc != null) { - return player.teleport(loc); - } - return player.teleport(getOutsideFreeLoc(player.getLocation(), player)); + if (!this.containsLoc(player.getLocation())) + return false; + Location loc = Residence.getInstance().getConfigManager().getKickLocation(); + player.closeInventory(); + if (loc != null) { + return player.teleport(loc); + } + return player.teleport(getOutsideFreeLoc(player.getLocation(), player)); } // public Town getTown() { // return town; @@ -2109,99 +2108,99 @@ public boolean kickFromResidence(Player player) { // } public ResidenceRaid getRaid() { - if (raid == null) - raid = new ResidenceRaid(this); - return raid; + if (raid == null) + raid = new ResidenceRaid(this); + return raid; } @Override public boolean equals(Object obj) { - if (obj == null) - return false; - return this == obj; + if (obj == null) + return false; + return this == obj; } public Set getSignsInResidence() { - return signsInResidence; + return signsInResidence; } public void setSignsInResidence(Set signsInResidence) { - this.signsInResidence = signsInResidence; + this.signsInResidence = signsInResidence; } public double getWorthByOwner() { - return (int) ((getTotalSize() * getOwnerGroup().getCostPerBlock()) * 100) / 100D; + return (int) ((getTotalSize() * getOwnerGroup().getCostPerBlock()) * 100) / 100D; } public double getWorth() { - return (int) ((getTotalSize() * getBlockSellPrice()) * 100) / 100.0; + return (int) ((getTotalSize() * getBlockSellPrice()) * 100) / 100.0; } public void showBounds(Player player, boolean showOneTime) { - Visualizer v = new Visualizer(player); - v.setAreas(getAreaArray()); - v.setOnce(showOneTime); - Residence.getInstance().getSelectionManager().showBounds(player, v); + Visualizer v = new Visualizer(player); + v.setAreas(getAreaArray()); + v.setOnce(showOneTime); + Residence.getInstance().getSelectionManager().showBounds(player, v); } public boolean isTrusted(Player player) { - Set flags = FlagPermissions.validFlagGroups.get(padd.groupedFlag); - if (flags == null || flags.isEmpty() || player == null) - return false; - boolean trusted = true; - for (String flag : flags) { - Flags f = Flags.getFlag(flag); - if (f == null) { - trusted = false; - break; - } - if (f.isInGroup(padd.groupedFlag) && !this.getPermissions().playerHas(player, f, FlagCombo.OnlyTrue)) { - trusted = false; - break; - } - } - return trusted; + Set flags = FlagPermissions.validFlagGroups.get(padd.groupedFlag); + if (flags == null || flags.isEmpty() || player == null) + return false; + boolean trusted = true; + for (String flag : flags) { + Flags f = Flags.getFlag(flag); + if (f == null) { + trusted = false; + break; + } + if (f.isInGroup(padd.groupedFlag) && !this.getPermissions().playerHas(player, f, FlagCombo.OnlyTrue)) { + trusted = false; + break; + } + } + return trusted; } @Deprecated public boolean isTrusted(String playerName) { - Set flags = FlagPermissions.validFlagGroups.get(padd.groupedFlag); - - if (flags == null || flags.isEmpty() || playerName == null) - return false; - boolean trusted = true; - for (String flag : flags) { - Flags f = Flags.getFlag(flag); - if (f == null) { - trusted = false; - break; - } - if (f.isInGroup(padd.groupedFlag) && !lightWeightFlagCheck(playerName, flag)) { - trusted = false; - break; - } - } - return trusted; + Set flags = FlagPermissions.validFlagGroups.get(padd.groupedFlag); + + if (flags == null || flags.isEmpty() || playerName == null) + return false; + boolean trusted = true; + for (String flag : flags) { + Flags f = Flags.getFlag(flag); + if (f == null) { + trusted = false; + break; + } + if (f.isInGroup(padd.groupedFlag) && !lightWeightFlagCheck(playerName, flag)) { + trusted = false; + break; + } + } + return trusted; } private boolean lightWeightFlagCheck(String playerName, String flag) { - Map flags = this.getPermissions().getPlayerFlags(playerName); - if (flags == null || flags.isEmpty() || !flags.containsKey(flag)) - return false; - return flags.get(flag); + Map flags = this.getPermissions().getPlayerFlags(playerName); + if (flags == null || flags.isEmpty() || !flags.containsKey(flag)) + return false; + return flags.get(flag); } public Set getTrustedPlayers() { - Set trusted = new HashSet(); - Iterator>> iter = this.getPermissions().getPlayerFlags().entrySet().iterator(); - while (iter.hasNext()) { - Entry> entry = iter.next(); - if (isTrusted(entry.getKey())) { - ResidencePlayer rp = ResidencePlayer.get(entry.getKey()); - if (rp != null) - trusted.add(rp); - } - } - return trusted; + Set trusted = new HashSet(); + Iterator>> iter = this.getPermissions().getPlayerFlags().entrySet().iterator(); + while (iter.hasNext()) { + Entry> entry = iter.next(); + if (isTrusted(entry.getKey())) { + ResidencePlayer rp = ResidencePlayer.get(entry.getKey()); + if (rp != null) + trusted.add(rp); + } + } + return trusted; } } diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 2dec6730d..6a8efcad1 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -108,12 +108,11 @@ public void printHelp(CommandSender sender, int page, boolean resadmin, String p } else sender.sendMessage(CMIChatColor.translate("&6" + helplines.get(i).getDesc())); - } String baseCmd = resadmin ? "resadmin" : "res"; - String cmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ? " : "/" + baseCmd + " ? "; - Residence.getInstance().getInfoPageManager().ShowPagination(sender, pi, cmd); + String cmd = !name.equalsIgnoreCase("res") ? "/" + baseCmd + " " + name + " ?" : "/" + baseCmd + " ?"; + pi.autoPagination(sender, cmd); } public void printHelp(CommandSender sender, int page, String path, boolean resadmin) { diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index d43dc1114..74add5823 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -58,7 +58,8 @@ public void printInfo(CommandSender sender, String command, String title, List ownedResidences, int page, boolean resadmin, World world) { @@ -166,9 +167,9 @@ public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, final int start, final boolean resadmin) { @@ -315,44 +316,4 @@ public void run() { } }); } - - public void ShowPagination(CommandSender sender, PageInfo pi, String cmd) { - ShowPagination(sender, pi, cmd, null); - } - - public void ShowPagination(CommandSender sender, PageInfo pi, Object cmd, String pagePref) { - ShowPagination(sender, pi.getTotalPages(), pi.getCurrentPage(), pi.getTotalEntries(), plugin.getCommandManager().getLabel() + " " + cmd.getClass().getSimpleName(), pagePref); - } - - public void ShowPagination(CommandSender sender, PageInfo pi, String cmd, String pagePref) { - ShowPagination(sender, pi.getTotalPages(), pi.getCurrentPage(), pi.getTotalEntries(), cmd, pagePref); - } - - public void ShowPagination(CommandSender sender, int pageCount, int CurrentPage, int totalEntries, String cmd, String pagePref) { - if (!(sender instanceof Player)) - return; - if (!cmd.startsWith("/")) - cmd = "/" + cmd; - - if (pageCount == 1) - return; - - String pagePrefix = pagePref == null ? "" : pagePref; - - int NextPage = CurrentPage + 1; - NextPage = CurrentPage < pageCount ? NextPage : CurrentPage; - int Prevpage = CurrentPage - 1; - Prevpage = CurrentPage > 1 ? Prevpage : CurrentPage; - - RawMessage rm = new RawMessage(); - rm.addText((CurrentPage > 1 ? plugin.msg(lm.General_prevPage) : plugin.msg(lm.General_prevPageOff))).addHover( - CurrentPage > 1 ? plugin.msg(lm.General_prevPageHover) : plugin.msg(lm.General_lastPageHover)).addCommand( - CurrentPage > 1 ? cmd + " " + pagePrefix + Prevpage : cmd + " " + pagePrefix + pageCount); - rm.addText(plugin.msg(lm.General_pageCount, CurrentPage, pageCount)).addHover(plugin.msg(lm.General_pageCountHover, totalEntries)); - rm.addText(plugin.msg(pageCount > CurrentPage ? lm.General_nextPage : lm.General_nextPageOff)).addHover( - pageCount > CurrentPage ? plugin.msg(lm.General_nextPageHover) : plugin.msg(lm.General_firstPageHover)).addCommand( - pageCount > CurrentPage ? cmd + " " + pagePrefix + NextPage : cmd + " " + pagePrefix + 1); - if (pageCount != 0) - rm.show(sender); - } } From b4c9a575c42371d9dc7302e2cf82562ed50b83ab Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Aug 2022 16:05:25 +0300 Subject: [PATCH 0968/1142] dryup flag fix for older servers which could have caused stackoverflow --- .../listeners/ResidenceBlockListener.java | 1824 +++++++++-------- 1 file changed, 913 insertions(+), 911 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 930fb5853..744ce97f3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -79,1065 +79,1067 @@ public class ResidenceBlockListener implements Listener { private Residence plugin; public ResidenceBlockListener(Residence residence) { - this.plugin = residence; + this.plugin = residence; } @EventHandler(priority = EventPriority.LOWEST) public void onAnvilInventoryClick(InventoryClickEvent e) { - // Disabling listener if flag disabled globally - if (!Flags.anvilbreak.isGlobalyEnabled()) - return; - Inventory inv = e.getInventory(); - try { - if (inv == null || inv.getType() != InventoryType.ANVIL || e.getInventory().getLocation() == null) - return; - } catch (Exception | NoSuchMethodError ex) { - return; - } - Block b = e.getInventory().getLocation().getBlock(); - if (b == null || !CMIMaterial.isAnvil(b.getType())) - return; - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(e.getInventory().getLocation()); - if (res == null) - return; - // Fix anvil only when item is picked up - if (e.getRawSlot() != 2) - return; - if (e.getCurrentItem() == null || e.getCurrentItem().getType() == Material.AIR) - return; - if (!res.getPermissions().has(Flags.anvilbreak, FlagCombo.OnlyFalse)) - return; - - if (Version.isCurrentLower(Version.v1_13_R1)) { - try { - b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 1); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { - e1.printStackTrace(); - } - } else { - // Need to fix roTation issue - b.setType(CMIMaterial.ANVIL.getMaterial()); - } + // Disabling listener if flag disabled globally + if (!Flags.anvilbreak.isGlobalyEnabled()) + return; + Inventory inv = e.getInventory(); + try { + if (inv == null || inv.getType() != InventoryType.ANVIL || e.getInventory().getLocation() == null) + return; + } catch (Exception | NoSuchMethodError ex) { + return; + } + Block b = e.getInventory().getLocation().getBlock(); + if (b == null || !CMIMaterial.isAnvil(b.getType())) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(e.getInventory().getLocation()); + if (res == null) + return; + // Fix anvil only when item is picked up + if (e.getRawSlot() != 2) + return; + if (e.getCurrentItem() == null || e.getCurrentItem().getType() == Material.AIR) + return; + if (!res.getPermissions().has(Flags.anvilbreak, FlagCombo.OnlyFalse)) + return; + + if (Version.isCurrentLower(Version.v1_13_R1)) { + try { + b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 1); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { + e1.printStackTrace(); + } + } else { + // Need to fix roTation issue + b.setType(CMIMaterial.ANVIL.getMaterial()); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlantGrow(BlockGrowEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.grow.isGlobalyEnabled()) - return; - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.grow, true)) { - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.grow.isGlobalyEnabled()) + return; + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.grow, true)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onVineGrow(BlockSpreadEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.grow.isGlobalyEnabled()) - return; - - CMIMaterial type = CMIMaterial.get(event.getSource().getType()); - - if (!type.equals(CMIMaterial.VINE) && !type.toString().contains("_VINES")) - return; - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.grow, true)) { - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.grow.isGlobalyEnabled()) + return; + + CMIMaterial type = CMIMaterial.get(event.getSource().getType()); + + if (!type.equals(CMIMaterial.VINE) && !type.toString().contains("_VINES")) + return; + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.grow, true)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onleaveDecay(LeavesDecayEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.decay.isGlobalyEnabled()) - return; - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.decay, true)) { - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.decay.isGlobalyEnabled()) + return; + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.decay, true)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onTreeGrowt(StructureGrowEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.grow.isGlobalyEnabled()) - return; - if (plugin.isDisabledWorldListener(event.getWorld())) - return; - FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); - if (!perms.has(Flags.grow, true)) { - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.grow.isGlobalyEnabled()) + return; + if (plugin.isDisabledWorldListener(event.getWorld())) + return; + FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); + if (!perms.has(Flags.grow, true)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onTreeGrow(StructureGrowEvent event) { - if (plugin.isDisabledWorldListener(event.getWorld())) - return; + if (plugin.isDisabledWorldListener(event.getWorld())) + return; - ClaimedResidence startRes = plugin.getResidenceManager().getByLoc(event.getLocation()); - List blocks = event.getBlocks(); + ClaimedResidence startRes = plugin.getResidenceManager().getByLoc(event.getLocation()); + List blocks = event.getBlocks(); - for (BlockState one : new ArrayList(blocks)) { - ClaimedResidence targetRes = plugin.getResidenceManager().getByLoc(one.getLocation()); - if (startRes == null && targetRes != null || targetRes != null && startRes != null && !startRes.getName().equals(targetRes.getName()) && !startRes.isOwner(targetRes.getOwner())) { - blocks.remove(one); - } - } + for (BlockState one : new ArrayList(blocks)) { + ClaimedResidence targetRes = plugin.getResidenceManager().getByLoc(one.getLocation()); + if (startRes == null && targetRes != null || targetRes != null && startRes != null && !startRes.getName().equals(targetRes.getName()) && !startRes.isOwner(targetRes.getOwner())) { + blocks.remove(one); + } + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { - if (!canBreakBlock(event.getPlayer(), event.getBlock(), true)) - event.setCancelled(true); + if (!canBreakBlock(event.getPlayer(), event.getBlock(), true)) + event.setCancelled(true); } public static boolean canBreakBlock(Player player, Block block, boolean inform) { - if (player == null) - return true; - - // disabling event on world - if (Residence.getInstance().isDisabledWorldListener(block.getWorld())) - return true; - - if (Residence.getInstance().isResAdminOn(player)) { - return true; - } - - Material mat = block.getType(); - String world = block.getWorld().getName(); - - ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = resPlayer.getGroup(); - if (Residence.getInstance().getItemManager().isIgnored(mat, group, world)) { - return true; - } - - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(block.getLocation()); - - if (res != null && res.getItemIgnoreList().isListed(mat)) - return true; - - if (Residence.getInstance().getConfigManager().enabledRentSystem() && res != null) { - if (Residence.getInstance().getConfigManager().preventRentModify() && res.isRented()) { - if (inform) - Residence.getInstance().msg(player, lm.Rent_ModifyDeny); - return false; - } - } - - FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(block.getLocation(), player); - - boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); - - if (res != null && res.getRaid().isUnderRaid()) { - if (res.getRaid().isAttacker(player.getUniqueId()) && ConfigManager.RaidAttackerBlockBreak || res.getRaid().isDefender(player.getUniqueId()) && ConfigManager.RaidDefenderBlockBreak) { - hasdestroy = true; - } - } - - if (!hasdestroy && !ResPerm.bypass_destroy.hasPermission(player, 10000L)) { - if (inform) - Residence.getInstance().msg(player, lm.Flag_Deny, Flags.destroy); - return false; - } else if (mat == Material.CHEST && !perms.playerHas(player, Flags.container, true)) { - if (inform) - Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container); - return false; - } - return true; + if (player == null) + return true; + + // disabling event on world + if (Residence.getInstance().isDisabledWorldListener(block.getWorld())) + return true; + + if (Residence.getInstance().isResAdminOn(player)) { + return true; + } + + Material mat = block.getType(); + String world = block.getWorld().getName(); + + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(); + if (Residence.getInstance().getItemManager().isIgnored(mat, group, world)) { + return true; + } + + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(block.getLocation()); + + if (res != null && res.getItemIgnoreList().isListed(mat)) + return true; + + if (Residence.getInstance().getConfigManager().enabledRentSystem() && res != null) { + if (Residence.getInstance().getConfigManager().preventRentModify() && res.isRented()) { + if (inform) + Residence.getInstance().msg(player, lm.Rent_ModifyDeny); + return false; + } + } + + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(block.getLocation(), player); + + boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); + + if (res != null && res.getRaid().isUnderRaid()) { + if (res.getRaid().isAttacker(player.getUniqueId()) && ConfigManager.RaidAttackerBlockBreak || res.getRaid().isDefender(player.getUniqueId()) && ConfigManager.RaidDefenderBlockBreak) { + hasdestroy = true; + } + } + + if (!hasdestroy && !ResPerm.bypass_destroy.hasPermission(player, 10000L)) { + if (inform) + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.destroy); + return false; + } else if (mat == Material.CHEST && !perms.playerHas(player, Flags.container, true)) { + if (inform) + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container); + return false; + } + return true; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockForm(BlockFormEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.snowtrail.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - if (!(event instanceof EntityBlockFormEvent)) - return; - - if (((EntityBlockFormEvent) event).getEntity() instanceof Snowman) { - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.snowtrail, true)) { - event.setCancelled(true); - } - } + // Disabling listener if flag disabled globally + if (!Flags.snowtrail.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + if (!(event instanceof EntityBlockFormEvent)) + return; + + if (((EntityBlockFormEvent) event).getEntity() instanceof Snowman) { + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.snowtrail, true)) { + event.setCancelled(true); + } + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onIceForm(BlockFormEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.iceform.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - - Material ice = Material.getMaterial("FROSTED_ICE"); - - if (event.getNewState().getType() != Material.SNOW && event.getNewState().getType() != Material.ICE && ice != null && ice != event.getNewState().getType()) - return; - - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.iceform, true)) { - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.iceform.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + Material ice = Material.getMaterial("FROSTED_ICE"); + + if (event.getNewState().getType() != Material.SNOW && event.getNewState().getType() != Material.ICE && ice != null && ice != event.getNewState().getType()) + return; + + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.iceform, true)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onIceMelt(BlockFadeEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.icemelt.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - - if (!CMIMaterial.get(event.getNewState().getType()).equals(CMIMaterial.WATER) && event.getBlock().getState().getType() != Material.SNOW && event.getBlock().getState() - .getType() != Material.SNOW_BLOCK) - return; - - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.icemelt, true)) { - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.icemelt.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + if (!CMIMaterial.get(event.getNewState().getType()).equals(CMIMaterial.WATER) && event.getBlock().getState().getType() != Material.SNOW && event.getBlock().getState() + .getType() != Material.SNOW_BLOCK) + return; + + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.icemelt, true)) { + event.setCancelled(true); + } } public static final String SourceResidenceName = "SourceResidenceName"; @EventHandler public void onEntityChangeBlock(EntityChangeBlockEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.fallinprotection.isGlobalyEnabled()) - return; - if (event.getEntityType() != EntityType.FALLING_BLOCK) - return; - Entity ent = event.getEntity(); - if (!ent.hasMetadata(SourceResidenceName)) { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); - String resName = res == null ? "NULL" : res.getName(); - ent.setMetadata(SourceResidenceName, new FixedMetadataValue(plugin, resName)); - } else { - String saved = ent.getMetadata(SourceResidenceName).get(0).asString(); - ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); - - if (res != null && res.getPermissions().has(Flags.fallinprotection, FlagCombo.OnlyFalse)) - return; - - String resName = res == null ? "NULL" : res.getName(); - if (!saved.equalsIgnoreCase(resName)) { - event.setCancelled(true); - ent.remove(); - } - } + // Disabling listener if flag disabled globally + if (!Flags.fallinprotection.isGlobalyEnabled()) + return; + if (event.getEntityType() != EntityType.FALLING_BLOCK) + return; + Entity ent = event.getEntity(); + if (!ent.hasMetadata(SourceResidenceName)) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); + String resName = res == null ? "NULL" : res.getName(); + ent.setMetadata(SourceResidenceName, new FixedMetadataValue(plugin, resName)); + } else { + String saved = ent.getMetadata(SourceResidenceName).get(0).asString(); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); + + if (res != null && res.getPermissions().has(Flags.fallinprotection, FlagCombo.OnlyFalse)) + return; + + String resName = res == null ? "NULL" : res.getName(); + if (!saved.equalsIgnoreCase(resName)) { + event.setCancelled(true); + ent.remove(); + } + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockFall(EntityChangeBlockEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.fallinprotection.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - if (!plugin.getConfigManager().isBlockFall()) - return; - - if ((event.getEntityType() != EntityType.FALLING_BLOCK)) - return; - - if (event.getTo().hasGravity()) - return; - - Block block = event.getBlock(); - - if (block == null) - return; - - if (!plugin.getConfigManager().getBlockFallWorlds().contains(block.getLocation().getWorld().getName())) - return; - - if (block.getY() <= plugin.getConfigManager().getBlockFallLevel()) - return; - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - Location loc = new Location(block.getLocation().getWorld(), block.getX(), block.getY(), block.getZ()); - for (int i = loc.getBlockY() - 1; i >= plugin.getConfigManager().getBlockFallLevel() - 1; i--) { - loc.setY(i); - if (loc.getBlock().getType() != Material.AIR) { - ClaimedResidence targetRes = plugin.getResidenceManager().getByLoc(loc); - if (targetRes == null) - continue; - if (res != null && !res.getName().equals(targetRes.getName())) { - if (targetRes.getPermissions().has(Flags.fallinprotection, FlagCombo.OnlyFalse)) - continue; - event.setCancelled(true); - block.setType(Material.AIR); - } - return; - } - } + // Disabling listener if flag disabled globally + if (!Flags.fallinprotection.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + if (!plugin.getConfigManager().isBlockFall()) + return; + + if ((event.getEntityType() != EntityType.FALLING_BLOCK)) + return; + + if (event.getTo().hasGravity()) + return; + + Block block = event.getBlock(); + + if (block == null) + return; + + if (!plugin.getConfigManager().getBlockFallWorlds().contains(block.getLocation().getWorld().getName())) + return; + + if (block.getY() <= plugin.getConfigManager().getBlockFallLevel()) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + Location loc = new Location(block.getLocation().getWorld(), block.getX(), block.getY(), block.getZ()); + for (int i = loc.getBlockY() - 1; i >= plugin.getConfigManager().getBlockFallLevel() - 1; i--) { + loc.setY(i); + if (loc.getBlock().getType() != Material.AIR) { + ClaimedResidence targetRes = plugin.getResidenceManager().getByLoc(loc); + if (targetRes == null) + continue; + if (res != null && !res.getName().equals(targetRes.getName())) { + if (targetRes.getPermissions().has(Flags.fallinprotection, FlagCombo.OnlyFalse)) + continue; + event.setCancelled(true); + block.setType(Material.AIR); + } + return; + } + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestPlace(BlockPlaceEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - if (!plugin.getConfigManager().ShowNoobMessage()) - return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + if (!plugin.getConfigManager().ShowNoobMessage()) + return; - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; - Block block = event.getBlock(); - if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) - return; + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; + Block block = event.getBlock(); + if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) + return; - if (plugin.getPlayerManager().getResidenceCount(player.getUniqueId()) != 0) - return; + if (plugin.getPlayerManager().getResidenceCount(player.getUniqueId()) != 0) + return; - if (MessageInformed.contains(player.getName())) - return; + if (MessageInformed.contains(player.getName())) + return; - if (!ResPerm.newguyresidence.hasPermission(player)) - return; + if (!ResPerm.newguyresidence.hasPermission(player)) + return; - plugin.msg(player, lm.General_NewPlayerInfo); + plugin.msg(player, lm.General_NewPlayerInfo); - MessageInformed.add(player.getName()); + MessageInformed.add(player.getName()); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onChestPlaceNearResidence(BlockPlaceEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; - - Block block = event.getBlock(); - if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) - return; - - ClaimedResidence orRes = plugin.getResidenceManager().getByLoc(block.getLocation()); - - boolean cancel = false; - - ClaimedResidence res = null; - Block b = block.getLocation().clone().add(0, 0, -1).getBlock(); - if (b.getType() == block.getType()) { - res = plugin.getResidenceManager().getByLoc(b.getLocation()); - if (res != null && !res.equals(orRes)) - cancel = true; - } - b = block.getLocation().clone().add(0, 0, 1).getBlock(); - if (b.getType() == block.getType()) { - res = plugin.getResidenceManager().getByLoc(b.getLocation()); - if (res != null && !res.equals(orRes)) - cancel = true; - } - b = block.getLocation().clone().add(1, 0, 0).getBlock(); - if (b.getType() == block.getType()) { - res = plugin.getResidenceManager().getByLoc(b.getLocation()); - if (res != null && !res.equals(orRes)) - cancel = true; - } - b = block.getLocation().clone().add(-1, 0, 0).getBlock(); - if (b.getType() == block.getType()) { - res = plugin.getResidenceManager().getByLoc(b.getLocation()); - if (res != null && !res.equals(orRes)) - cancel = true; - } - - if (cancel) { - CMIActionBar.send(player, plugin.msg(lm.General_CantPlaceChest)); - event.setCancelled(true); - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; + + Block block = event.getBlock(); + if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) + return; + + ClaimedResidence orRes = plugin.getResidenceManager().getByLoc(block.getLocation()); + + boolean cancel = false; + + ClaimedResidence res = null; + Block b = block.getLocation().clone().add(0, 0, -1).getBlock(); + if (b.getType() == block.getType()) { + res = plugin.getResidenceManager().getByLoc(b.getLocation()); + if (res != null && !res.equals(orRes)) + cancel = true; + } + b = block.getLocation().clone().add(0, 0, 1).getBlock(); + if (b.getType() == block.getType()) { + res = plugin.getResidenceManager().getByLoc(b.getLocation()); + if (res != null && !res.equals(orRes)) + cancel = true; + } + b = block.getLocation().clone().add(1, 0, 0).getBlock(); + if (b.getType() == block.getType()) { + res = plugin.getResidenceManager().getByLoc(b.getLocation()); + if (res != null && !res.equals(orRes)) + cancel = true; + } + b = block.getLocation().clone().add(-1, 0, 0).getBlock(); + if (b.getType() == block.getType()) { + res = plugin.getResidenceManager().getByLoc(b.getLocation()); + if (res != null && !res.equals(orRes)) + cancel = true; + } + + if (cancel) { + CMIActionBar.send(player, plugin.msg(lm.General_CantPlaceChest)); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChestPlaceCreateRes(BlockPlaceEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - if (!plugin.getConfigManager().isNewPlayerUse()) - return; - - Player player = event.getPlayer(); - if (plugin.isResAdminOn(player)) - return; - Block block = event.getBlock(); - if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) - return; - - if (plugin.getPlayerManager().getResidenceCount(player.getUniqueId()) != 0) - return; - - if (ResCreated.contains(player.getUniqueId())) - return; - - if (!newPlayers.contains(player.getUniqueId())) - return; - - Location loc = block.getLocation(); - - plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), loc.getBlockX() - 1, loc.getBlockY() - 1, loc.getBlockZ() - 1), true); - plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), loc.getBlockX() + 1, loc.getBlockY() + 1, loc.getBlockZ() + 1), true); - - resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), !plugin.getConfigManager().isNewPlayerFree(), - plugin.getConfigManager().getNewPlayerRangeX() * 2, - plugin.getConfigManager().getNewPlayerRangeY() * 2, - plugin.getConfigManager().getNewPlayerRangeZ() * 2); - - boolean created = plugin.getResidenceManager().addResidence(player, player.getName(), plugin.getSelectionManager().getPlayerLoc1(player), - plugin.getSelectionManager().getPlayerLoc2(player), plugin.getConfigManager().isNewPlayerFree()); - if (created) { - ResCreated.add(player.getUniqueId()); - newPlayers.remove(player.getUniqueId()); - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + if (!plugin.getConfigManager().isNewPlayerUse()) + return; + + Player player = event.getPlayer(); + if (plugin.isResAdminOn(player)) + return; + Block block = event.getBlock(); + if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) + return; + + if (plugin.getPlayerManager().getResidenceCount(player.getUniqueId()) != 0) + return; + + if (ResCreated.contains(player.getUniqueId())) + return; + + if (!newPlayers.contains(player.getUniqueId())) + return; + + Location loc = block.getLocation(); + + plugin.getSelectionManager().placeLoc1(player, new Location(loc.getWorld(), loc.getBlockX() - 1, loc.getBlockY() - 1, loc.getBlockZ() - 1), true); + plugin.getSelectionManager().placeLoc2(player, new Location(loc.getWorld(), loc.getBlockX() + 1, loc.getBlockY() + 1, loc.getBlockZ() + 1), true); + + resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), !plugin.getConfigManager().isNewPlayerFree(), + plugin.getConfigManager().getNewPlayerRangeX() * 2, + plugin.getConfigManager().getNewPlayerRangeY() * 2, + plugin.getConfigManager().getNewPlayerRangeZ() * 2); + + boolean created = plugin.getResidenceManager().addResidence(player, player.getName(), plugin.getSelectionManager().getPlayerLoc1(player), + plugin.getSelectionManager().getPlayerLoc2(player), plugin.getConfigManager().isNewPlayerFree()); + if (created) { + ResCreated.add(player.getUniqueId()); + newPlayers.remove(player.getUniqueId()); + } } public static void resize(Residence plugin, Player player, CuboidArea cuboid, boolean checkBalance, int maxX, int maxY, int maxZ) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - - double cost = cuboid.getCost(group); - - double balance = 0; - if (plugin.getEconomyManager() != null) - balance = plugin.getEconomyManager().getBalance(player.getName()); - - direction dir = direction.Top; - - List locked = new ArrayList(); - - boolean checkCollision = plugin.getConfigManager().isARCCheckCollision(); - int skipped = 0; - int done = 0; - while (true) { - done++; - - if (skipped >= 6) { - break; - } - - // fail safe if loop keeps going on - if (done > 10000) - break; - - if (locked.contains(dir)) { - dir = dir.getNext(); - skipped++; - continue; - } - - CuboidArea c = new CuboidArea(); - c.setLowLocation(cuboid.getLowLocation().clone().add(-dir.getLow().getX(), -dir.getLow().getY(), -dir.getLow().getZ())); - c.setHighLocation(cuboid.getHighLocation().clone().add(dir.getHigh().getX(), dir.getHigh().getY(), dir.getHigh().getZ())); - - if (c.getLowVector().getY() < 0) { - c.getLowVector().setY(0); - locked.add(dir); - dir = dir.getNext(); - skipped++; - continue; - } - - if (c.getHighVector().getY() >= c.getWorld().getMaxHeight()) { - c.getHighVector().setY(c.getWorld().getMaxHeight() - 1); - locked.add(dir); - dir = dir.getNext(); - skipped++; - continue; - } - - if (checkCollision && plugin.getResidenceManager().collidesWithResidence(c) != null) { - locked.add(dir); - dir = dir.getNext(); - skipped++; - continue; - } - - if (c.getXSize() >= maxX - group.getMinX()) { - locked.add(dir); - dir = dir.getNext(); - skipped++; - continue; - } - - if (c.getYSize() >= maxY - group.getMinY()) { - locked.add(dir); - dir = dir.getNext(); - skipped++; - continue; - } - - if (c.getZSize() >= maxZ - group.getMinZ()) { - locked.add(dir); - dir = dir.getNext(); - skipped++; - continue; - } - - skipped = 0; - - if (checkBalance) { - if (plugin.getConfigManager().enableEconomy()) { - cost = c.getCost(group); - if (cost > balance) - break; - } - } - - cuboid.setLowLocation(c.getLowLocation()); - cuboid.setHighLocation(c.getHighLocation()); - - dir = dir.getNext(); - } - - plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); - plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + + double cost = cuboid.getCost(group); + + double balance = 0; + if (plugin.getEconomyManager() != null) + balance = plugin.getEconomyManager().getBalance(player.getName()); + + direction dir = direction.Top; + + List locked = new ArrayList(); + + boolean checkCollision = plugin.getConfigManager().isARCCheckCollision(); + int skipped = 0; + int done = 0; + while (true) { + done++; + + if (skipped >= 6) { + break; + } + + // fail safe if loop keeps going on + if (done > 10000) + break; + + if (locked.contains(dir)) { + dir = dir.getNext(); + skipped++; + continue; + } + + CuboidArea c = new CuboidArea(); + c.setLowLocation(cuboid.getLowLocation().clone().add(-dir.getLow().getX(), -dir.getLow().getY(), -dir.getLow().getZ())); + c.setHighLocation(cuboid.getHighLocation().clone().add(dir.getHigh().getX(), dir.getHigh().getY(), dir.getHigh().getZ())); + + if (c.getLowVector().getY() < 0) { + c.getLowVector().setY(0); + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (c.getHighVector().getY() >= c.getWorld().getMaxHeight()) { + c.getHighVector().setY(c.getWorld().getMaxHeight() - 1); + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (checkCollision && plugin.getResidenceManager().collidesWithResidence(c) != null) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (c.getXSize() >= maxX - group.getMinX()) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (c.getYSize() >= maxY - group.getMinY()) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + if (c.getZSize() >= maxZ - group.getMinZ()) { + locked.add(dir); + dir = dir.getNext(); + skipped++; + continue; + } + + skipped = 0; + + if (checkBalance) { + if (plugin.getConfigManager().enableEconomy()) { + cost = c.getCost(group); + if (cost > balance) + break; + } + } + + cuboid.setLowLocation(c.getLowLocation()); + cuboid.setHighLocation(c.getHighLocation()); + + dir = dir.getNext(); + } + + plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); + plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { - if (!canPlaceBlock(event.getPlayer(), event.getBlock(), true)) { - event.setCancelled(true); + if (!canPlaceBlock(event.getPlayer(), event.getBlock(), true)) { + event.setCancelled(true); - if (Version.isCurrentEqualOrHigher(Version.v1_17_R1) && event.getBlock().getType() == Material.POWDER_SNOW) { + if (Version.isCurrentEqualOrHigher(Version.v1_17_R1) && event.getBlock().getType() == Material.POWDER_SNOW) { - BlockData data = ResidencePlayerListener1_17.powder_snow.remove(event.getBlock().getLocation().toString()); - if (data != null) { + BlockData data = ResidencePlayerListener1_17.powder_snow.remove(event.getBlock().getLocation().toString()); + if (data != null) { - Block blockUnder = event.getBlock().getLocation().clone().add(0, -1, 0).getBlock(); + Block blockUnder = event.getBlock().getLocation().clone().add(0, -1, 0).getBlock(); - if (data.getMaterial().equals(blockUnder.getType())) { - blockUnder.setBlockData(data); - } - } - } - } + if (data.getMaterial().equals(blockUnder.getType())) { + blockUnder.setBlockData(data); + } + } + } + } } public static boolean canPlaceBlock(Player player, Block block, boolean informPlayer) { - // disabling event on world - if (Residence.getInstance().isDisabledWorldListener(block.getWorld())) - return true; - - if (Residence.getInstance().isResAdminOn(player)) { - return true; - } - - Material mat = block.getType(); - String world = block.getWorld().getName(); - - ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = resPlayer.getGroup(); - if (Residence.getInstance().getItemManager().isIgnored(mat, group, world)) { - return true; - } - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(block.getLocation()); - if (Residence.getInstance().getConfigManager().enabledRentSystem() && res != null) { - String resname = res.getName(); - if (Residence.getInstance().getConfigManager().preventRentModify() && Residence.getInstance().getRentManager().isRented(resname)) { - if (informPlayer) - Residence.getInstance().msg(player, lm.Rent_ModifyDeny); - return false; - } - } - if (!CMIMaterial.get(mat).isNone() && res != null && !res.getItemBlacklist().isAllowed(mat)) { - if (informPlayer) - Residence.getInstance().msg(player, lm.General_ItemBlacklisted); - return false; - } - FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(block.getLocation(), player); - boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - - if (res != null && res.getRaid().isUnderRaid()) { - if (res.getRaid().isAttacker(player.getUniqueId()) && ConfigManager.RaidAttackerBlockPlace || res.getRaid().isDefender(player.getUniqueId()) && ConfigManager.RaidDefenderBlockPlace) { - hasplace = true; - } - } - - if (!hasplace && !ResPerm.bypass_build.hasPermission(player, 10000L)) { - if (informPlayer) - Residence.getInstance().msg(player, lm.Flag_Deny, Flags.place); - return false; - } - - if (CMIMaterial.isBed(mat)) { - CMIBlock cb = new CMIBlock(block); - Block sec = cb.getSecondaryBedBlock(); - if (sec != null) { - perms = Residence.getInstance().getPermsByLocForPlayer(sec.getLocation(), player); - hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - if (!hasplace - && !ResPerm.bypass_build.hasPermission(player, 10000L)) { - if (informPlayer) - Residence.getInstance().msg(player, lm.Flag_Deny, Flags.place); - return false; - } - } - } - return true; + // disabling event on world + if (Residence.getInstance().isDisabledWorldListener(block.getWorld())) + return true; + + if (Residence.getInstance().isResAdminOn(player)) { + return true; + } + + Material mat = block.getType(); + String world = block.getWorld().getName(); + + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(); + if (Residence.getInstance().getItemManager().isIgnored(mat, group, world)) { + return true; + } + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(block.getLocation()); + if (Residence.getInstance().getConfigManager().enabledRentSystem() && res != null) { + String resname = res.getName(); + if (Residence.getInstance().getConfigManager().preventRentModify() && Residence.getInstance().getRentManager().isRented(resname)) { + if (informPlayer) + Residence.getInstance().msg(player, lm.Rent_ModifyDeny); + return false; + } + } + if (!CMIMaterial.get(mat).isNone() && res != null && !res.getItemBlacklist().isAllowed(mat)) { + if (informPlayer) + Residence.getInstance().msg(player, lm.General_ItemBlacklisted); + return false; + } + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(block.getLocation(), player); + boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); + + if (res != null && res.getRaid().isUnderRaid()) { + if (res.getRaid().isAttacker(player.getUniqueId()) && ConfigManager.RaidAttackerBlockPlace || res.getRaid().isDefender(player.getUniqueId()) && ConfigManager.RaidDefenderBlockPlace) { + hasplace = true; + } + } + + if (!hasplace && !ResPerm.bypass_build.hasPermission(player, 10000L)) { + if (informPlayer) + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.place); + return false; + } + + if (CMIMaterial.isBed(mat)) { + CMIBlock cb = new CMIBlock(block); + Block sec = cb.getSecondaryBedBlock(); + if (sec != null) { + perms = Residence.getInstance().getPermsByLocForPlayer(sec.getLocation(), player); + hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); + if (!hasplace + && !ResPerm.bypass_build.hasPermission(player, 10000L)) { + if (informPlayer) + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.place); + return false; + } + } + } + return true; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockSpread(BlockSpreadEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.spread.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - Location loc = event.getBlock().getLocation(); - FlagPermissions perms = plugin.getPermsByLoc(loc); - if (!perms.has(Flags.spread, true)) { - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.spread.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + Location loc = event.getBlock().getLocation(); + FlagPermissions perms = plugin.getPermsByLoc(loc); + if (!perms.has(Flags.spread, true)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPistonRetract(BlockPistonRetractEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - - // Disabling listener if flag disabled globally - if (!Flags.piston.isGlobalyEnabled()) - return; - - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.piston, true)) { - event.setCancelled(true); - return; - } - - // Disabling listener if flag disabled globally - if (!Flags.pistonprotection.isGlobalyEnabled()) - return; - - List blocks = Utils.getPistonRetractBlocks(event); - - if (!event.isSticky()) - return; - - ClaimedResidence pistonRes = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); - - for (Block block : blocks) { - Location locFrom = block.getLocation(); - ClaimedResidence blockFrom = plugin.getResidenceManager().getByLoc(locFrom); - if (blockFrom == null) - continue; - if (blockFrom == pistonRes) - continue; - if (pistonRes != null && blockFrom.isOwner(pistonRes.getOwner())) - continue; - if (!blockFrom.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue)) - continue; - event.setCancelled(true); - break; - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + // Disabling listener if flag disabled globally + if (!Flags.piston.isGlobalyEnabled()) + return; + + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.piston, true)) { + event.setCancelled(true); + return; + } + + // Disabling listener if flag disabled globally + if (!Flags.pistonprotection.isGlobalyEnabled()) + return; + + List blocks = Utils.getPistonRetractBlocks(event); + + if (!event.isSticky()) + return; + + ClaimedResidence pistonRes = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); + + for (Block block : blocks) { + Location locFrom = block.getLocation(); + ClaimedResidence blockFrom = plugin.getResidenceManager().getByLoc(locFrom); + if (blockFrom == null) + continue; + if (blockFrom == pistonRes) + continue; + if (pistonRes != null && blockFrom.isOwner(pistonRes.getOwner())) + continue; + if (!blockFrom.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue)) + continue; + event.setCancelled(true); + break; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPistonExtend(BlockPistonExtendEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - - // Disabling listener if flag disabled globally - if (!Flags.piston.isGlobalyEnabled()) - return; - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.piston, true)) { - event.setCancelled(true); - return; - } - - // Disabling listener if flag disabled globally - if (!Flags.pistonprotection.isGlobalyEnabled()) - return; - - Location origins = event.getBlock().getLocation(); - - int lowestY = CMIWorld.getMaxHeight(origins.getWorld()); - int bigestY = CMIWorld.getMinHeight(origins.getWorld()); - int lowestX = Integer.MAX_VALUE; - int lowestZ = Integer.MAX_VALUE; - int bigestX = -Integer.MAX_VALUE; - int bigestZ = -Integer.MAX_VALUE; - - BlockFace dir = event.getDirection(); - - for (Block block : event.getBlocks()) { - Location one = block.getLocation().clone().add(dir.getModX(), dir.getModY(), dir.getModZ()); - if (one.getBlockY() < lowestY) - lowestY = one.getBlockY(); - if (one.getBlockX() < lowestX) - lowestX = one.getBlockX(); - if (one.getBlockZ() < lowestZ) - lowestZ = one.getBlockZ(); - if (one.getBlockY() > bigestY) - bigestY = one.getBlockY(); - if (one.getBlockX() > bigestX) - bigestX = one.getBlockX(); - if (one.getBlockZ() > bigestZ) - bigestZ = one.getBlockZ(); - } - - ClaimedResidence pistonRes = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); - - if (pistonRes != null && pistonRes.containsLoc(new Location(origins.getWorld(), lowestX, lowestY, lowestZ)) && pistonRes.containsLoc(new Location(origins.getWorld(), bigestX, bigestY, bigestZ))) { - return; - } - - for (int i = event.getBlocks().size() - 1; i >= 0; i--) { - Block block = event.getBlocks().get(i); - Location locTo = block.getLocation().clone().add(dir.getModX(), dir.getModY(), dir.getModZ()); - ClaimedResidence blockTo = plugin.getResidenceManager().getByLoc(locTo); - boolean hasPerm = blockTo != null && blockTo.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue); - if (pistonRes == null && hasPerm || blockTo != null && pistonRes != null && !blockTo.isOwner(pistonRes.getOwner()) && hasPerm) { - event.setCancelled(true); - return; - } - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + // Disabling listener if flag disabled globally + if (!Flags.piston.isGlobalyEnabled()) + return; + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.piston, true)) { + event.setCancelled(true); + return; + } + + // Disabling listener if flag disabled globally + if (!Flags.pistonprotection.isGlobalyEnabled()) + return; + + Location origins = event.getBlock().getLocation(); + + int lowestY = CMIWorld.getMaxHeight(origins.getWorld()); + int bigestY = CMIWorld.getMinHeight(origins.getWorld()); + int lowestX = Integer.MAX_VALUE; + int lowestZ = Integer.MAX_VALUE; + int bigestX = -Integer.MAX_VALUE; + int bigestZ = -Integer.MAX_VALUE; + + BlockFace dir = event.getDirection(); + + for (Block block : event.getBlocks()) { + Location one = block.getLocation().clone().add(dir.getModX(), dir.getModY(), dir.getModZ()); + if (one.getBlockY() < lowestY) + lowestY = one.getBlockY(); + if (one.getBlockX() < lowestX) + lowestX = one.getBlockX(); + if (one.getBlockZ() < lowestZ) + lowestZ = one.getBlockZ(); + if (one.getBlockY() > bigestY) + bigestY = one.getBlockY(); + if (one.getBlockX() > bigestX) + bigestX = one.getBlockX(); + if (one.getBlockZ() > bigestZ) + bigestZ = one.getBlockZ(); + } + + ClaimedResidence pistonRes = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); + + if (pistonRes != null && pistonRes.containsLoc(new Location(origins.getWorld(), lowestX, lowestY, lowestZ)) && pistonRes.containsLoc(new Location(origins.getWorld(), bigestX, bigestY, bigestZ))) { + return; + } + + for (int i = event.getBlocks().size() - 1; i >= 0; i--) { + Block block = event.getBlocks().get(i); + Location locTo = block.getLocation().clone().add(dir.getModX(), dir.getModY(), dir.getModZ()); + ClaimedResidence blockTo = plugin.getResidenceManager().getByLoc(locTo); + boolean hasPerm = blockTo != null && blockTo.getPermissions().has(Flags.pistonprotection, FlagCombo.OnlyTrue); + if (pistonRes == null && hasPerm || blockTo != null && pistonRes != null && !blockTo.isOwner(pistonRes.getOwner()) && hasPerm) { + event.setCancelled(true); + return; + } + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockFromTo(BlockFromToEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - - ClaimedResidence fromRes = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); - ClaimedResidence toRes = plugin.getResidenceManager().getByLoc(event.getToBlock().getLocation()); - - FlagPermissions perms = plugin.getPermsByLoc(event.getToBlock().getLocation()); - boolean hasflow = perms.has(Flags.flow, FlagCombo.TrueOrNone); - Material mat = event.getBlock().getType(); - - if (perms.has(Flags.flowinprotection, FlagCombo.TrueOrNone)) - if (fromRes == null && toRes != null || fromRes != null && toRes != null && !fromRes.equals(toRes) && !fromRes.isOwner(toRes.getOwner())) { - event.setCancelled(true); - return; - } - - if (perms.has(Flags.flow, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } - - if (mat == Material.LAVA) { - if (!perms.has(Flags.lavaflow, hasflow)) { - event.setCancelled(true); - } - return; - } - if (mat == Material.WATER) { - if (!perms.has(Flags.waterflow, hasflow)) { - event.setCancelled(true); - } - return; - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + ClaimedResidence fromRes = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); + ClaimedResidence toRes = plugin.getResidenceManager().getByLoc(event.getToBlock().getLocation()); + + FlagPermissions perms = plugin.getPermsByLoc(event.getToBlock().getLocation()); + boolean hasflow = perms.has(Flags.flow, FlagCombo.TrueOrNone); + Material mat = event.getBlock().getType(); + + if (perms.has(Flags.flowinprotection, FlagCombo.TrueOrNone)) + if (fromRes == null && toRes != null || fromRes != null && toRes != null && !fromRes.equals(toRes) && !fromRes.isOwner(toRes.getOwner())) { + event.setCancelled(true); + return; + } + + if (perms.has(Flags.flow, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + + if (mat == Material.LAVA) { + if (!perms.has(Flags.lavaflow, hasflow)) { + event.setCancelled(true); + } + return; + } + if (mat == Material.WATER) { + if (!perms.has(Flags.waterflow, hasflow)) { + event.setCancelled(true); + } + return; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLandDryFade(BlockFadeEvent event) { - // Moved to separate class - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) - return; - // Disabling listener if flag disabled globally - if (!Flags.dryup.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - - CMIMaterial mat = CMIMaterial.get(event.getBlock()); - if (!mat.equals(CMIMaterial.FARMLAND)) - return; - - FlagPermissions perms = plugin.getPermsByLoc(event.getNewState().getLocation()); - if (!perms.has(Flags.dryup, true)) { - Block b = event.getBlock(); - try { - b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { - e1.printStackTrace(); - } - event.setCancelled(true); - return; - } + // Moved to separate class + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + return; + // Disabling listener if flag disabled globally + if (!Flags.dryup.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + CMIMaterial mat = CMIMaterial.get(event.getBlock()); + if (!mat.equals(CMIMaterial.FARMLAND)) + return; + + FlagPermissions perms = plugin.getPermsByLoc(event.getNewState().getLocation()); + if (!perms.has(Flags.dryup, true)) { + Block b = event.getBlock(); + try { + b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { + e1.printStackTrace(); + } + event.setCancelled(true); + return; + } } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onLandDryPhysics(BlockPhysicsEvent event) { - // Moved to separate class - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) - return; - // Disabling listener if flag disabled globally - if (!Flags.dryup.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - - if (!event.getBlock().getWorld().isChunkLoaded((int) Math.floor(event.getBlock().getLocation().getX()) >> 4, ((int) Math.floor(event.getBlock().getLocation().getZ()) >> 4))) - return; - - CMIMaterial mat = CMIMaterial.get(event.getBlock()); - if (!mat.equals(CMIMaterial.FARMLAND)) - return; - - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (perms.has(Flags.dryup, FlagCombo.OnlyFalse)) { - Block b = event.getBlock(); - try { - b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { - e1.printStackTrace(); - } - event.setCancelled(true); - return; - } + // Moved to separate class + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + return; + // Disabling listener if flag disabled globally + if (!Flags.dryup.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + if (!event.getBlock().getWorld().isChunkLoaded((int) Math.floor(event.getBlock().getLocation().getX()) >> 4, ((int) Math.floor(event.getBlock().getLocation().getZ()) >> 4))) + return; + + CMIMaterial mat = CMIMaterial.get(event.getBlock()); + if (!mat.equals(CMIMaterial.FARMLAND)) + return; + + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (perms.has(Flags.dryup, FlagCombo.OnlyFalse)) { + Block b = event.getBlock(); + try { + byte value = (byte) b.getClass().getMethod("getData").invoke(b); + if (value != (byte) 7) + b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); + } catch (Throwable e1) { + e1.printStackTrace(); + } + event.setCancelled(true); + return; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onDispense(BlockDispenseEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - if (event.isCancelled()) - return; - - Location location = new Location(event.getBlock().getWorld(), event.getVelocity().getBlockX(), event.getVelocity().getBlockY(), event.getVelocity().getBlockZ()); - - ClaimedResidence targetres = plugin.getResidenceManager().getByLoc(location); - - if (CMIMaterial.get(event.getBlock()) == CMIMaterial.DROPPER) - return; - - if (targetres == null && location.getBlockY() >= plugin.getConfigManager().getPlaceLevel() && plugin.getConfigManager().getNoPlaceWorlds().contains(location - .getWorld().getName())) { - ItemStack mat = event.getItem(); - if (plugin.getConfigManager().isNoLavaPlace() && mat.getType() == Material.LAVA_BUCKET) { - event.setCancelled(true); - return; - } - - if (plugin.getConfigManager().isNoWaterPlace() && mat.getType() == Material.WATER_BUCKET) { - event.setCancelled(true); - return; - } - } - - ClaimedResidence sourceres = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); - - if ((sourceres == null && targetres != null || sourceres != null && targetres == null || sourceres != null && targetres != null && !sourceres.getName().equals( - targetres.getName())) && (event.getItem().getType() == Material.LAVA_BUCKET || event.getItem().getType() == Material.WATER_BUCKET)) { - event.setCancelled(true); - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + if (event.isCancelled()) + return; + + Location location = new Location(event.getBlock().getWorld(), event.getVelocity().getBlockX(), event.getVelocity().getBlockY(), event.getVelocity().getBlockZ()); + + ClaimedResidence targetres = plugin.getResidenceManager().getByLoc(location); + + if (CMIMaterial.get(event.getBlock()) == CMIMaterial.DROPPER) + return; + + if (targetres == null && location.getBlockY() >= plugin.getConfigManager().getPlaceLevel() && plugin.getConfigManager().getNoPlaceWorlds().contains(location + .getWorld().getName())) { + ItemStack mat = event.getItem(); + if (plugin.getConfigManager().isNoLavaPlace() && mat.getType() == Material.LAVA_BUCKET) { + event.setCancelled(true); + return; + } + + if (plugin.getConfigManager().isNoWaterPlace() && mat.getType() == Material.WATER_BUCKET) { + event.setCancelled(true); + return; + } + } + + ClaimedResidence sourceres = plugin.getResidenceManager().getByLoc(event.getBlock().getLocation()); + + if ((sourceres == null && targetres != null || sourceres != null && targetres == null || sourceres != null && targetres != null && !sourceres.getName().equals( + targetres.getName())) && (event.getItem().getType() == Material.LAVA_BUCKET || event.getItem().getType() == Material.WATER_BUCKET)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLavaWaterFlow(BlockFromToEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - Material mat = event.getBlock().getType(); + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + Material mat = event.getBlock().getType(); - Location location = event.getToBlock().getLocation(); - if (!plugin.getConfigManager().getNoFlowWorlds().contains(location.getWorld().getName())) - return; + Location location = event.getToBlock().getLocation(); + if (!plugin.getConfigManager().getNoFlowWorlds().contains(location.getWorld().getName())) + return; - if (location.getBlockY() < plugin.getConfigManager().getFlowLevel()) - return; + if (location.getBlockY() < plugin.getConfigManager().getFlowLevel()) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(location); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(location); - if (res != null) - return; + if (res != null) + return; - if (plugin.getConfigManager().isNoLava()) - if (mat == Material.LAVA) { - event.setCancelled(true); - return; - } + if (plugin.getConfigManager().isNoLava()) + if (mat == Material.LAVA) { + event.setCancelled(true); + return; + } - if (plugin.getConfigManager().isNoWater()) - if (mat == Material.WATER) { - event.setCancelled(true); - return; - } + if (plugin.getConfigManager().isNoWater()) + if (mat == Material.WATER) { + event.setCancelled(true); + return; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockBurn(BlockBurnEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.firespread.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.firespread, true)) - event.setCancelled(true); + // Disabling listener if flag disabled globally + if (!Flags.firespread.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.firespread, true)) + event.setCancelled(true); } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onBlockBurn(PortalCreateEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.build.isGlobalyEnabled()) - return; - - World world = event.getWorld(); - - // disabling event on world - if (plugin.isDisabledWorldListener(world)) - return; - - if (!event.getReason().toString().equals("NETHER_PAIR")) - return; - - Player player = null; - // Crude attempt to get player object. Older versions will create exception of missing method - try { - if (event.getEntity() instanceof Player) - player = (Player) event.getEntity(); - } catch (Throwable e) { - } - - ArrayList corners = getNetherPortalCorners(event); - - for (Vector one : corners) { - boolean hasBuild = true; - if (player != null) { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(new Location(world, one.getX(), one.getY(), one.getZ())); - if (res != null) { - hasBuild = res.getPermissions().playerHas(player, Flags.build, FlagCombo.TrueOrNone); - if (!hasBuild) { - plugin.msg(player, lm.Invalid_PortalDestination); - } - } - } else { - FlagPermissions perms = plugin.getPermsByLoc(new Location(world, one.getX(), one.getY(), one.getZ())); - hasBuild = perms.has(Flags.build, true); - } - if (!hasBuild) { - event.setCancelled(true); - return; - } - } + // Disabling listener if flag disabled globally + if (!Flags.build.isGlobalyEnabled()) + return; + + World world = event.getWorld(); + + // disabling event on world + if (plugin.isDisabledWorldListener(world)) + return; + + if (!event.getReason().toString().equals("NETHER_PAIR")) + return; + + Player player = null; + // Crude attempt to get player object. Older versions will create exception of missing method + try { + if (event.getEntity() instanceof Player) + player = (Player) event.getEntity(); + } catch (Throwable e) { + } + + ArrayList corners = getNetherPortalCorners(event); + + for (Vector one : corners) { + boolean hasBuild = true; + if (player != null) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(new Location(world, one.getX(), one.getY(), one.getZ())); + if (res != null) { + hasBuild = res.getPermissions().playerHas(player, Flags.build, FlagCombo.TrueOrNone); + if (!hasBuild) { + plugin.msg(player, lm.Invalid_PortalDestination); + } + } + } else { + FlagPermissions perms = plugin.getPermsByLoc(new Location(world, one.getX(), one.getY(), one.getZ())); + hasBuild = perms.has(Flags.build, true); + } + if (!hasBuild) { + event.setCancelled(true); + return; + } + } } @SuppressWarnings("unchecked") private static ArrayList getNetherPortalCorners(PortalCreateEvent e) { - ArrayList locs = new ArrayList(); - - List ls = new ArrayList<>(); - try { - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) - ls = (ArrayList) e.getClass().getMethod("getBlocks").invoke(e); - else - ls = (ArrayList) e.getClass().getMethod("getBlocks").invoke(e); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { - e1.printStackTrace(); - } - - int lowestY = CMIWorld.getMaxHeight(e.getWorld()); - int bigestY = -lowestY; - int lowestX = Integer.MAX_VALUE; - int lowestZ = Integer.MAX_VALUE; - int bigestX = -Integer.MAX_VALUE; - int bigestZ = -Integer.MAX_VALUE; - - for (int i = 0; i < ls.size(); i++) { - Object ob = ls.get(i); - - Location one = Version.isCurrentEqualOrHigher(Version.v1_14_R1) ? ((BlockState) ob).getLocation() : ((Block) ob).getLocation(); - - if (one.getBlockY() < lowestY) - lowestY = one.getBlockY(); - if (one.getBlockX() < lowestX) - lowestX = one.getBlockX(); - if (one.getBlockZ() < lowestZ) - lowestZ = one.getBlockZ(); - - if (one.getBlockY() > bigestY) - bigestY = one.getBlockY(); - if (one.getBlockX() > bigestX) - bigestX = one.getBlockX(); - if (one.getBlockZ() > bigestZ) - bigestZ = one.getBlockZ(); - } - - int height = Math.abs(bigestY - lowestY); - height = height < 0 ? -height : height; - - // If height is 1 then its not a nether portal - if (height < 2) - return locs; - - locs.add(new Vector(lowestX, lowestY, lowestZ)); - locs.add(new Vector(bigestX, bigestY, bigestZ)); - - return locs; + ArrayList locs = new ArrayList(); + + List ls = new ArrayList<>(); + try { + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) + ls = (ArrayList) e.getClass().getMethod("getBlocks").invoke(e); + else + ls = (ArrayList) e.getClass().getMethod("getBlocks").invoke(e); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { + e1.printStackTrace(); + } + + int lowestY = CMIWorld.getMaxHeight(e.getWorld()); + int bigestY = -lowestY; + int lowestX = Integer.MAX_VALUE; + int lowestZ = Integer.MAX_VALUE; + int bigestX = -Integer.MAX_VALUE; + int bigestZ = -Integer.MAX_VALUE; + + for (int i = 0; i < ls.size(); i++) { + Object ob = ls.get(i); + + Location one = Version.isCurrentEqualOrHigher(Version.v1_14_R1) ? ((BlockState) ob).getLocation() : ((Block) ob).getLocation(); + + if (one.getBlockY() < lowestY) + lowestY = one.getBlockY(); + if (one.getBlockX() < lowestX) + lowestX = one.getBlockX(); + if (one.getBlockZ() < lowestZ) + lowestZ = one.getBlockZ(); + + if (one.getBlockY() > bigestY) + bigestY = one.getBlockY(); + if (one.getBlockX() > bigestX) + bigestX = one.getBlockX(); + if (one.getBlockZ() > bigestZ) + bigestZ = one.getBlockZ(); + } + + int height = Math.abs(bigestY - lowestY); + height = height < 0 ? -height : height; + + // If height is 1 then its not a nether portal + if (height < 2) + return locs; + + locs.add(new Vector(lowestX, lowestY, lowestZ)); + locs.add(new Vector(bigestX, bigestY, bigestZ)); + + return locs; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockIgnite(BlockIgniteEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - IgniteCause cause = event.getCause(); - if (cause == IgniteCause.SPREAD) { - // Disabling listener if flag disabled globally - if (!Flags.firespread.isGlobalyEnabled()) - return; - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.firespread, true)) - event.setCancelled(true); - } else if (cause == IgniteCause.FLINT_AND_STEEL) { - // Disabling listener if flag disabled globally - if (!Flags.ignite.isGlobalyEnabled()) - return; - Player player = event.getPlayer(); - FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlock().getLocation(), player); - if (player != null && !perms.playerHas(player, Flags.ignite, true) && !plugin.isResAdminOn(player)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.ignite); - } - } else { - // Disabling listener if flag disabled globally - if (!Flags.ignite.isGlobalyEnabled()) - return; - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.ignite, true)) { - event.setCancelled(true); - } - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + IgniteCause cause = event.getCause(); + if (cause == IgniteCause.SPREAD) { + // Disabling listener if flag disabled globally + if (!Flags.firespread.isGlobalyEnabled()) + return; + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.firespread, true)) + event.setCancelled(true); + } else if (cause == IgniteCause.FLINT_AND_STEEL) { + // Disabling listener if flag disabled globally + if (!Flags.ignite.isGlobalyEnabled()) + return; + Player player = event.getPlayer(); + FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getBlock().getLocation(), player); + if (player != null && !perms.playerHas(player, Flags.ignite, true) && !plugin.isResAdminOn(player)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.ignite); + } + } else { + // Disabling listener if flag disabled globally + if (!Flags.ignite.isGlobalyEnabled()) + return; + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.ignite, true)) { + event.setCancelled(true); + } + } } } From ba20612f1e00a45f7c33a97043d7a67b5af8bc28 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Aug 2022 16:15:39 +0300 Subject: [PATCH 0969/1142] Turtle egg destruction in residence fix --- .../bekvon/bukkit/residence/Residence.java | 7 +++-- .../listeners/ResidencePlayerListener.java | 1 - .../ResidencePlayerListener1_13.java | 27 +++++++++++++++++++ 3 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_13.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 8915e74eb..37a6da07c 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -78,6 +78,7 @@ import com.bekvon.bukkit.residence.listeners.ResidenceLWCListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_12; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_13; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_14; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_15; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_16; @@ -699,8 +700,10 @@ public void run() { plistener = new ResidencePlayerListener(this); if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) pm.registerEvents(new ResidencePlayerListener1_9(this), this); - if (Version.isCurrentEqualOrHigher(Version.v1_12_R1)) - pm.registerEvents(new ResidencePlayerListener1_12(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_12_R1)) + pm.registerEvents(new ResidencePlayerListener1_12(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + pm.registerEvents(new ResidencePlayerListener1_13(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) pm.registerEvents(new ResidencePlayerListener1_14(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_15_R1)) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ea3e63595..783a57ab9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -667,7 +667,6 @@ else if (white == 0) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignInteract(PlayerInteractEvent event) { - if (event.getPlayer() == null) return; // disabling event on world diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_13.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_13.java new file mode 100644 index 000000000..bc18a3d1c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_13.java @@ -0,0 +1,27 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; + +import com.bekvon.bukkit.residence.Residence; + +public class ResidencePlayerListener1_13 implements Listener { + + private Residence plugin; + + public ResidencePlayerListener1_13(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onSignInteract(PlayerInteractEvent event) { + if (!event.getAction().equals(Action.PHYSICAL) || !event.getClickedBlock().getType().equals(Material.TURTLE_EGG)) + return; + if (!ResidenceBlockListener.canBreakBlock(event.getPlayer(), event.getClickedBlock(), true)) + event.setCancelled(true); + } +} From 4914e6e3855b8ffaacb5492c72b0c8440b28a673 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 11 Aug 2022 16:50:14 +0300 Subject: [PATCH 0970/1142] Prevent residence creation in defined range around existing ones --- .../bukkit/residence/ConfigManager.java | 8 +++ .../bukkit/residence/containers/lm.java | 1 + .../protection/ClaimedResidence.java | 49 +++++++++++++++++++ .../protection/ResidenceManager.java | 12 +++++ 4 files changed, 70 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index cbdff698b..94473b303 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -201,6 +201,8 @@ public class ConfigManager { // protected boolean DisableNoFlagMessageUse; // protected List DisableNoFlagMessageWorlds = new ArrayList(); + public int AntiGreefRangeGap = 16; + protected boolean TNTExplodeBelow; protected int TNTExplodeBelowLevel; protected boolean CreeperExplodeBelow; @@ -929,6 +931,12 @@ public void UpdateConfigFile() { } } + // TNT explosions below 63 + c.addComment("Global.AntiGreef.RangeGap", + "Distance in blocks between residences to be left out", "This will prevent from residences being created back to back", + "In case owner of old residence and new one is the same this range restriction wont be taken into effect", "Set to 0 if you want to disable this"); + AntiGreefRangeGap = c.get("Global.AntiGreef.RangeGap", 16); + // TNT explosions below 63 c.addComment("Global.AntiGreef.TNT.ExplodeBelow", "When set to true will allow tnt and minecart with tnt to explode below 62 (default) level outside of residence", diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 0d5192814..6c547dd17 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -38,6 +38,7 @@ public enum lm { Area_Create("&eResidence Area created, ID &6%1"), Area_DiffWorld("&cArea is in a different world from residence."), Area_Collision("&cArea collides with residence &6%1"), + Area_TooClose("&cToo close to another residence. You need atleast &e%1 &cblock gap."), Area_SubzoneCollision("&cArea collides with subzone &6%1"), Area_NonExist("&cNo such area exists."), Area_InvalidName("&cInvalid Area Name..."), diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 9f37a34bd..904a7bb18 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -402,6 +402,31 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } return false; } + + if (Residence.getInstance().getConfigManager().AntiGreefRangeGap > 0) { + Location low = area.getLowLocation().clone(); + Location high = area.getHighLocation().clone(); + + int gap = Residence.getInstance().getConfigManager().AntiGreefRangeGap; + low.add(-gap, -gap, -gap); + high.add(gap, gap, gap); + + CuboidArea expanded = new CuboidArea(low, high); + + collideResidence = Residence.getInstance().getResidenceManager().checkAreaCollision(expanded, this, player == null ? null : player.getUniqueId()); + cRes = Residence.getInstance().getResidenceManager().getByName(collideResidence); + if (cRes != null) { + if (player != null) { + Residence.getInstance().msg(player, lm.Area_TooClose, gap, cRes.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(area); + v.setErrorAreas(cRes); + Residence.getInstance().getSelectionManager().showBounds(player, v); + } + return false; + } + } + } else { String[] szs = getParent().listSubzones(); for (String sz : szs) { @@ -520,6 +545,30 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole Residence.getInstance().getSelectionManager().showBounds(player, v); return false; } + + if (Residence.getInstance().getConfigManager().AntiGreefRangeGap > 0) { + Location low = newarea.getLowLocation().clone(); + Location high = newarea.getHighLocation().clone(); + + int gap = Residence.getInstance().getConfigManager().AntiGreefRangeGap; + low.add(-gap, -gap, -gap); + high.add(gap, gap, gap); + + CuboidArea expanded = new CuboidArea(low, high); + + collideResidence = Residence.getInstance().getResidenceManager().checkAreaCollision(expanded, this, player == null ? null : player.getUniqueId()); + cRes = Residence.getInstance().getResidenceManager().getByName(collideResidence); + if (cRes != null) { + if (player != null) { + Residence.getInstance().msg(player, lm.Area_TooClose, gap, cRes.getName()); + Visualizer v = new Visualizer(player); + v.setAreas(getAreaArray()); + v.setErrorAreas(cRes); + Residence.getInstance().getSelectionManager().showBounds(player, v); + } + return false; + } + } } else { String[] szs = getParent().listSubzones(); for (String sz : szs) { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1e56ff740..381902aa9 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -476,6 +476,18 @@ public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResi return null; } + public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResidence, UUID ignoredOwner) { + Set> set = residences.entrySet(); + for (Entry entry : set) { + ClaimedResidence check = entry.getValue(); + if (check != parentResidence && check.checkCollision(newarea)) { + if (ignoredOwner == null || !entry.getValue().isOwner(ignoredOwner)) + return entry.getKey(); + } + } + return null; + } + public ClaimedResidence collidesWithResidence(CuboidArea newarea) { Set> set = residences.entrySet(); for (Entry entry : set) { From 764a9a64e6742c513b3d66aae7c0b710026bfdee Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 6 Sep 2022 17:38:32 +0300 Subject: [PATCH 0971/1142] Faster way to check for cuboid collisions --- .../protection/ClaimedResidence.java | 10 +- .../residence/protection/CuboidArea.java | 369 +++++++++--------- .../protection/ResidenceManager.java | 25 +- src/plugin.yml | 2 +- 4 files changed, 212 insertions(+), 194 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 904a7bb18..87549975c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -886,13 +886,9 @@ public String[] getSubzoneList() { } public boolean checkCollision(CuboidArea area) { - Set set = areas.keySet(); - for (String key : set) { - CuboidArea checkarea = areas.get(key); - if (checkarea != null) { - if (checkarea.checkCollision(area)) { - return true; - } + for (CuboidArea checkarea : areas.values()) { + if (checkarea != null && checkarea.checkCollision(area)) { + return true; } } return false; diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index cda1eb918..7bf8365c9 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -3,6 +3,9 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ResidenceManager.ChunkRef; + +import net.Zrips.CMILib.Logs.CMIDebug; + import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; @@ -24,281 +27,283 @@ public class CuboidArea { protected World world; public CuboidArea(Location startLoc, Location endLoc) { - - if (startLoc == null || endLoc == null) - return; - - int highx, highy, highz, lowx, lowy, lowz; - - if (startLoc.getBlockX() > endLoc.getBlockX()) { - highx = startLoc.getBlockX(); - lowx = endLoc.getBlockX(); - } else { - highx = endLoc.getBlockX(); - lowx = startLoc.getBlockX(); - } - if (startLoc.getBlockY() > endLoc.getBlockY()) { - highy = startLoc.getBlockY(); - lowy = endLoc.getBlockY(); - } else { - highy = endLoc.getBlockY(); - lowy = startLoc.getBlockY(); - } - if (startLoc.getBlockZ() > endLoc.getBlockZ()) { - highz = startLoc.getBlockZ(); - lowz = endLoc.getBlockZ(); - } else { - highz = endLoc.getBlockZ(); - lowz = startLoc.getBlockZ(); - } - highPoints = new Vector(highx, highy, highz); - lowPoints = new Vector(lowx, lowy, lowz); - - world = startLoc.getWorld() != null ? startLoc.getWorld() : startLoc.getWorld() != null ? startLoc.getWorld() : null; - - worldName = world != null ? world.getName() : null; + + if (startLoc == null || endLoc == null) + return; + + int highx, highy, highz, lowx, lowy, lowz; + + if (startLoc.getBlockX() > endLoc.getBlockX()) { + highx = startLoc.getBlockX(); + lowx = endLoc.getBlockX(); + } else { + highx = endLoc.getBlockX(); + lowx = startLoc.getBlockX(); + } + if (startLoc.getBlockY() > endLoc.getBlockY()) { + highy = startLoc.getBlockY(); + lowy = endLoc.getBlockY(); + } else { + highy = endLoc.getBlockY(); + lowy = startLoc.getBlockY(); + } + if (startLoc.getBlockZ() > endLoc.getBlockZ()) { + highz = startLoc.getBlockZ(); + lowz = endLoc.getBlockZ(); + } else { + highz = endLoc.getBlockZ(); + lowz = startLoc.getBlockZ(); + } + + highPoints = new Vector(highx, highy, highz); + lowPoints = new Vector(lowx, lowy, lowz); + + world = startLoc.getWorld() != null ? startLoc.getWorld() : startLoc.getWorld() != null ? startLoc.getWorld() : null; + + worldName = world != null ? world.getName() : null; } public CuboidArea() { } public boolean isAreaWithinArea(CuboidArea area) { - return (this.containsLoc(area.highPoints, area.getWorldName()) && this.containsLoc(area.lowPoints, area.getWorldName())); + return (this.containsLoc(area.highPoints, area.getWorldName()) && this.containsLoc(area.lowPoints, area.getWorldName())); } public boolean containsLoc(Location loc) { - return containsLoc(loc.toVector(), loc.getWorld().getName()); + return containsLoc(loc.toVector(), loc.getWorld().getName()); } public boolean containsLoc(Vector loc, String world) { - if (loc == null) - return false; + if (loc == null) + return false; - if (!world.equals(worldName)) - return false; + if (!world.equals(worldName)) + return false; - if (lowPoints.getBlockX() > loc.getBlockX()) - return false; + if (lowPoints.getBlockX() > loc.getBlockX()) + return false; - if (highPoints.getBlockX() < loc.getBlockX()) - return false; + if (highPoints.getBlockX() < loc.getBlockX()) + return false; - if (lowPoints.getBlockZ() > loc.getBlockZ()) - return false; + if (lowPoints.getBlockZ() > loc.getBlockZ()) + return false; - if (highPoints.getBlockZ() < loc.getBlockZ()) - return false; + if (highPoints.getBlockZ() < loc.getBlockZ()) + return false; - if (lowPoints.getBlockY() > loc.getBlockY()) - return false; + if (lowPoints.getBlockY() > loc.getBlockY()) + return false; - if (highPoints.getBlockY() < loc.getBlockY()) - return false; + if (highPoints.getBlockY() < loc.getBlockY()) + return false; - return true; + return true; } public boolean checkCollision(CuboidArea area) { - if (!area.getWorld().equals(this.getWorld())) { - return false; - } - if (area.containsLoc(lowPoints, getWorldName()) || area.containsLoc(highPoints, getWorldName()) || this.containsLoc(area.highPoints, getWorldName()) || this.containsLoc(area.lowPoints, - getWorldName())) { - return true; - } - return advCuboidCheckCollision(highPoints, lowPoints, area.highPoints, area.lowPoints); + if (!area.getWorld().equals(this.getWorld())) { + return false; + } + if (area.containsLoc(lowPoints, getWorldName()) || area.containsLoc(highPoints, getWorldName()) || this.containsLoc(area.highPoints, getWorldName()) || this.containsLoc(area.lowPoints, + getWorldName())) { + return true; + } + return advCuboidCheckCollision(highPoints, lowPoints, area.highPoints, area.lowPoints); } private static boolean advCuboidCheckCollision(Vector A1High, Vector A1Low, Vector A2High, Vector A2Low) { - int A1HX = A1High.getBlockX(); - int A1LX = A1Low.getBlockX(); - int A1HY = A1High.getBlockY(); - int A1LY = A1Low.getBlockY(); - int A1HZ = A1High.getBlockZ(); - int A1LZ = A1Low.getBlockZ(); - int A2HX = A2High.getBlockX(); - int A2LX = A2Low.getBlockX(); - int A2HY = A2High.getBlockY(); - int A2LY = A2Low.getBlockY(); - int A2HZ = A2High.getBlockZ(); - int A2LZ = A2Low.getBlockZ(); - if ((A1HX >= A2LX && A1HX <= A2HX) || (A1LX >= A2LX && A1LX <= A2HX) || (A2HX >= A1LX && A2HX <= A1HX) || (A2LX >= A1LX && A2LX <= A1HX)) { - if ((A1HY >= A2LY && A1HY <= A2HY) || (A1LY >= A2LY && A1LY <= A2HY) || (A2HY >= A1LY && A2HY <= A1HY) || (A2LY >= A1LY && A2LY <= A1HY)) { - if ((A1HZ >= A2LZ && A1HZ <= A2HZ) || (A1LZ >= A2LZ && A1LZ <= A2HZ) || (A2HZ >= A1LZ && A2HZ <= A1HZ) || (A2LZ >= A1LZ && A2LZ <= A1HZ)) { - return true; - } - } - } - return false; + int A1HX = A1High.getBlockX(); + int A1LX = A1Low.getBlockX(); + int A2HX = A2High.getBlockX(); + int A2LX = A2Low.getBlockX(); + if ((A1HX >= A2LX && A1HX <= A2HX) || (A1LX >= A2LX && A1LX <= A2HX) || (A2HX >= A1LX && A2HX <= A1HX) || (A2LX >= A1LX && A2LX <= A1HX)) { + int A1HY = A1High.getBlockY(); + int A1LY = A1Low.getBlockY(); + int A2HY = A2High.getBlockY(); + int A2LY = A2Low.getBlockY(); + if ((A1HY >= A2LY && A1HY <= A2HY) || (A1LY >= A2LY && A1LY <= A2HY) || (A2HY >= A1LY && A2HY <= A1HY) || (A2LY >= A1LY && A2LY <= A1HY)) { + int A1HZ = A1High.getBlockZ(); + int A1LZ = A1Low.getBlockZ(); + int A2HZ = A2High.getBlockZ(); + int A2LZ = A2Low.getBlockZ(); + if ((A1HZ >= A2LZ && A1HZ <= A2HZ) || (A1LZ >= A2LZ && A1LZ <= A2HZ) || (A2HZ >= A1LZ && A2HZ <= A1HZ) || (A2LZ >= A1LZ && A2LZ <= A1HZ)) { + return true; + } + } + } + + return false; } public long getSize() { - int xsize = (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; - int zsize = (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; - if (!Residence.getInstance().getConfigManager().isNoCostForYBlocks()) { - int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; - return xsize * ysize * zsize; - } - return xsize * zsize; + int xsize = (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; + int zsize = (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; + if (!Residence.getInstance().getConfigManager().isNoCostForYBlocks()) { + int ysize = (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; + return xsize * ysize * zsize; + } + return xsize * zsize; } public int getXSize() { - return (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; + return (highPoints.getBlockX() - lowPoints.getBlockX()) + 1; } public int getYSize() { - return (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; + return (highPoints.getBlockY() - lowPoints.getBlockY()) + 1; } public int getZSize() { - return (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; + return (highPoints.getBlockZ() - lowPoints.getBlockZ()) + 1; } public Vector getHighVector() { - return highPoints; + return highPoints; } public Vector getLowVector() { - return lowPoints; + return lowPoints; } @Deprecated public Location getHighLoc() { - return getHighLocation(); + return getHighLocation(); } @Deprecated public Location getLowLoc() { - return getLowLocation(); + return getLowLocation(); } public Location getHighLocation() { - return highPoints.toLocation(getWorld()); + return highPoints.toLocation(getWorld()); } public Location getLowLocation() { - return lowPoints.toLocation(getWorld()); + return lowPoints.toLocation(getWorld()); } public World getWorld() { - return world; + return world; } public String getWorldName() { - return world != null ? world.getName() : worldName; + return world != null ? world.getName() : worldName; } public void save(DataOutputStream out) throws IOException { - out.writeUTF(getWorldName()); - out.writeInt(highPoints.getBlockX()); - out.writeInt(highPoints.getBlockY()); - out.writeInt(highPoints.getBlockZ()); - out.writeInt(lowPoints.getBlockX()); - out.writeInt(lowPoints.getBlockY()); - out.writeInt(lowPoints.getBlockZ()); + out.writeUTF(getWorldName()); + out.writeInt(highPoints.getBlockX()); + out.writeInt(highPoints.getBlockY()); + out.writeInt(highPoints.getBlockZ()); + out.writeInt(lowPoints.getBlockX()); + out.writeInt(lowPoints.getBlockY()); + out.writeInt(lowPoints.getBlockZ()); } public CuboidArea load(DataInputStream in) throws IOException { - CuboidArea newArea = new CuboidArea(); - Server server = Residence.getInstance().getServ(); - int highx = in.readInt(); - int highy = in.readInt(); - int highz = in.readInt(); - int lowx = in.readInt(); - int lowy = in.readInt(); - int lowz = in.readInt(); - newArea.highPoints = new Vector(highx, highy, highz); - newArea.lowPoints = new Vector(lowx, lowy, lowz); - newArea.worldName = in.readUTF(); - newArea.world = Bukkit.getWorld(newArea.worldName); - return newArea; + CuboidArea newArea = new CuboidArea(); + Server server = Residence.getInstance().getServ(); + int highx = in.readInt(); + int highy = in.readInt(); + int highz = in.readInt(); + int lowx = in.readInt(); + int lowy = in.readInt(); + int lowz = in.readInt(); + newArea.highPoints = new Vector(highx, highy, highz); + newArea.lowPoints = new Vector(lowx, lowy, lowz); + newArea.worldName = in.readUTF(); + newArea.world = Bukkit.getWorld(newArea.worldName); + return newArea; } public Map save() { - Map root = new LinkedHashMap<>(); - root.put("X1", this.highPoints.getBlockX()); - root.put("Y1", this.highPoints.getBlockY()); - root.put("Z1", this.highPoints.getBlockZ()); - root.put("X2", this.lowPoints.getBlockX()); - root.put("Y2", this.lowPoints.getBlockY()); - root.put("Z2", this.lowPoints.getBlockZ()); - return root; + Map root = new LinkedHashMap<>(); + root.put("X1", this.highPoints.getBlockX()); + root.put("Y1", this.highPoints.getBlockY()); + root.put("Z1", this.highPoints.getBlockZ()); + root.put("X2", this.lowPoints.getBlockX()); + root.put("Y2", this.lowPoints.getBlockY()); + root.put("Z2", this.lowPoints.getBlockZ()); + return root; } public String newSave() { - return lowPoints.getBlockX() + ":" + lowPoints.getBlockY() + ":" + lowPoints.getBlockZ() + ":" + highPoints.getBlockX() + ":" + highPoints.getBlockY() + ":" + highPoints.getBlockZ(); + return lowPoints.getBlockX() + ":" + lowPoints.getBlockY() + ":" + lowPoints.getBlockZ() + ":" + highPoints.getBlockX() + ":" + highPoints.getBlockY() + ":" + highPoints.getBlockZ(); } public static CuboidArea newLoad(String root, String world) throws Exception { - if (root == null || !root.contains(":")) { - throw new Exception("Invalid residence physical location..."); - } - CuboidArea newArea = new CuboidArea(); - String[] split = root.split(":"); - try { - int x1 = Integer.parseInt(split[0]); - int y1 = Integer.parseInt(split[1]); - int z1 = Integer.parseInt(split[2]); - int x2 = Integer.parseInt(split[3]); - int y2 = Integer.parseInt(split[4]); - int z2 = Integer.parseInt(split[5]); - newArea.lowPoints = new Vector(x1, y1, z1); - newArea.highPoints = new Vector(x2, y2, z2); - newArea.worldName = world; - newArea.world = Bukkit.getWorld(newArea.worldName); - } catch (Exception e) { - throw new Exception("Invalid residence physical location..."); - } - - return newArea; + if (root == null || !root.contains(":")) { + throw new Exception("Invalid residence physical location..."); + } + CuboidArea newArea = new CuboidArea(); + String[] split = root.split(":"); + try { + int x1 = Integer.parseInt(split[0]); + int y1 = Integer.parseInt(split[1]); + int z1 = Integer.parseInt(split[2]); + int x2 = Integer.parseInt(split[3]); + int y2 = Integer.parseInt(split[4]); + int z2 = Integer.parseInt(split[5]); + newArea.lowPoints = new Vector(x1, y1, z1); + newArea.highPoints = new Vector(x2, y2, z2); + newArea.worldName = world; + newArea.world = Bukkit.getWorld(newArea.worldName); + } catch (Exception e) { + throw new Exception("Invalid residence physical location..."); + } + + return newArea; } public static CuboidArea load(Map root, String world) throws Exception { - if (root == null) { - throw new Exception("Invalid residence physical location..."); - } - CuboidArea newArea = new CuboidArea(); - int x1 = (Integer) root.get("X1"); - int y1 = (Integer) root.get("Y1"); - int z1 = (Integer) root.get("Z1"); - int x2 = (Integer) root.get("X2"); - int y2 = (Integer) root.get("Y2"); - int z2 = (Integer) root.get("Z2"); - newArea.highPoints = new Vector(x1, y1, z1); - newArea.lowPoints = new Vector(x2, y2, z2); - newArea.worldName = world; - newArea.world = Bukkit.getWorld(newArea.worldName); - return newArea; + if (root == null) { + throw new Exception("Invalid residence physical location..."); + } + CuboidArea newArea = new CuboidArea(); + int x1 = (Integer) root.get("X1"); + int y1 = (Integer) root.get("Y1"); + int z1 = (Integer) root.get("Z1"); + int x2 = (Integer) root.get("X2"); + int y2 = (Integer) root.get("Y2"); + int z2 = (Integer) root.get("Z2"); + newArea.highPoints = new Vector(x1, y1, z1); + newArea.lowPoints = new Vector(x2, y2, z2); + newArea.worldName = world; + newArea.world = Bukkit.getWorld(newArea.worldName); + return newArea; } public List getChunks() { - List chunks = new ArrayList<>(); - Vector high = this.highPoints; - Vector low = this.lowPoints; - int lowX = ChunkRef.getChunkCoord(low.getBlockX()); - int lowZ = ChunkRef.getChunkCoord(low.getBlockZ()); - int highX = ChunkRef.getChunkCoord(high.getBlockX()); - int highZ = ChunkRef.getChunkCoord(high.getBlockZ()); - - for (int x = lowX; x <= highX; x++) { - for (int z = lowZ; z <= highZ; z++) { - chunks.add(new ChunkRef(x, z)); - } - } - return chunks; + List chunks = new ArrayList<>(); + Vector high = this.highPoints; + Vector low = this.lowPoints; + int lowX = ChunkRef.getChunkCoord(low.getBlockX()); + int lowZ = ChunkRef.getChunkCoord(low.getBlockZ()); + int highX = ChunkRef.getChunkCoord(high.getBlockX()); + int highZ = ChunkRef.getChunkCoord(high.getBlockZ()); + + for (int x = lowX; x <= highX; x++) { + for (int z = lowZ; z <= highZ; z++) { + chunks.add(new ChunkRef(x, z)); + } + } + return chunks; } public void setHighLocation(Location highLocation) { - this.highPoints = highLocation.toVector(); - this.world = highLocation.getWorld(); + this.highPoints = highLocation.toVector(); + this.world = highLocation.getWorld(); } public void setLowLocation(Location lowLocation) { - this.lowPoints = lowLocation.toVector(); - this.world = lowLocation.getWorld(); + this.lowPoints = lowLocation.toVector(); + this.world = lowLocation.getWorld(); } public double getCost(PermissionGroup group) { - return (int) (getSize() * group.getCostPerBlock() * 100) / 100D; + return (int) (getSize() * group.getCostPerBlock() * 100) / 100D; } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 381902aa9..70478fab1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -488,12 +488,29 @@ public String checkAreaCollision(CuboidArea newarea, ClaimedResidence parentResi return null; } + public Set getResidences(String worldName, List chunks) { + + Map> refs = chunkResidences.get(worldName); + + Set resSet = new HashSet(); + + if (refs == null) + return resSet; + + for (ChunkRef one : chunks) { + List res = refs.get(one); + if (res != null) + resSet.addAll(res); + } + + return resSet; + } + public ClaimedResidence collidesWithResidence(CuboidArea newarea) { - Set> set = residences.entrySet(); - for (Entry entry : set) { - ClaimedResidence check = entry.getValue(); + Set res = getResidences(newarea.getWorldName(), newarea.getChunks()); + for (ClaimedResidence check : res) { if (check.checkCollision(newarea)) { - return entry.getValue(); + return check; } } return null; diff --git a/src/plugin.yml b/src/plugin.yml index d9a3eacc3..7de4d7547 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.1.7 +version: 5.0.2.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 0f08127e9edf8152280ff4608d7398a5d699f1a8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Sep 2022 13:37:12 +0300 Subject: [PATCH 0972/1142] Optimized resize method for res auto command --- .../bukkit/residence/ConfigManager.java | 9 + .../bukkit/residence/commands/auto.java | 274 +++++++++++++++++- .../bukkit/residence/commands/create.java | 3 +- .../residence/protection/CuboidArea.java | 8 + 4 files changed, 290 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 94473b303..79b0d25c8 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -100,6 +100,7 @@ public class ConfigManager { protected boolean NewSaveMechanic; private int ItemPickUpDelay; private boolean ARCCheckCollision; + private boolean ARCOldMethod; private String ARCIncrementFormat; private int ARCSizePercentage; private boolean ARCSizeEnabled; @@ -661,6 +662,10 @@ public void UpdateConfigFile() { "Set it to false to gain some performace but new residence can often overlap with old ones"); ARCCheckCollision = c.get("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", true); + c.addComment("Global.Optimizations.AutomaticResidenceCreation.OldMethod", + "Enabled this will switch to old method for calculating new residence area", "Old method is allot less efficient, so its not recomended to be used when you have residence areas over 100"); + ARCOldMethod = c.get("Global.Optimizations.AutomaticResidenceCreation.OldMethod", false); + c.addComment("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "Defines new residence name increment when using automatic residence creation command if residence with that name already exist"); ARCIncrementFormat = c.get("Global.Optimizations.AutomaticResidenceCreation.IncrementFormat", "_[number]"); @@ -2183,6 +2188,10 @@ public boolean isARCSizeEnabled() { return ARCSizeEnabled; } + public boolean isARCOldMethod() { + return ARCOldMethod; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 2544a1a51..f3e663888 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Random; @@ -59,8 +60,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo Location loc = player.getLocation(); - int minY = loc.getBlockY() - 1; - int maxY = loc.getBlockY() + 1; + int minY = loc.getBlockY(); + int maxY = loc.getBlockY(); if (plugin.getConfigManager().isSelectionIgnoreY()) { minY = plugin.getSelectionManager().getSelection(player).getMinYAllowed(); maxY = plugin.getSelectionManager().getSelection(player).getMaxYAllowed(); @@ -70,7 +71,16 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo loc.setY(maxY); plugin.getSelectionManager().placeLoc2(player, loc.clone(), false); - boolean result = resize(plugin, player, plugin.getSelectionManager().getSelectionCuboid(player), true, lenght); + CuboidArea cuboid = plugin.getSelectionManager().getSelectionCuboid(player); + + boolean result = false; + + if (plugin.getConfigManager().isARCOldMethod()) + result = resize(plugin, player, cuboid, true, lenght); + else + result = optimizedResize(plugin, player, cuboid, true, lenght); + + plugin.getSelectionManager().afterSelectionUpdate(player, true); if (!result) { Residence.getInstance().msg(player, lm.Area_SizeLimit); @@ -260,12 +270,269 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, dir = dir.getNext(); } + CMIDebug.d("Cycles: ", done); + plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); + plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); + + cuboid = plugin.getSelectionManager().getSelectionCuboid(player); + + if (cuboid.getXSize() > group.getMaxX() || cuboid.getYSize() > group.getMaxY() + (-group.getMinY()) || cuboid.getZSize() > group.getMaxZ()) { + return false; + } + + return true; + } + + private static void fillMaps(HashMap directionMap, HashMap maxMap, direction dir, int max, int cubeSize) { + int maxV = (int) ((max / 2D) - (cubeSize / 2D)); + directionMap.put(dir, maxV); + maxMap.put(dir, maxV); + } + + public static boolean optimizedResize(Residence plugin, Player player, CuboidArea cuboid, boolean checkBalance, int max) { + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + + direction dir = direction.Top; + + List locked = new ArrayList(); + + boolean checkCollision = plugin.getConfigManager().isARCCheckCollision(); + + if (checkCollision && plugin.getResidenceManager().collidesWithResidence(cuboid) != null) { + return false; + } + + int skipped = 0; + int done = 0; + + int maxWorldY = group.getMaxY(); + int minWorldY = group.getMinY(); + + int maxX = getMax(group.getMaxX()); + int maxY = getMax(group.getMaxY()); + int maxZ = getMax(group.getMaxZ()); + + if (maxX > max && max > 0) + maxX = max; + if (maxY > max && max > 0) + maxY = max; + if (maxZ > max && max > 0) + maxZ = max; + + if (maxX <= 1) + maxX = (group.getMaxX() - group.getMinX()) / 2 + group.getMinX(); + + if (maxY <= 1) + maxY = (group.getMaxY() - group.getMinY()) / 2 + group.getMinY(); + + if (maxZ <= 1) + maxZ = (group.getMaxZ() - group.getMinZ()) / 2 + group.getMinZ(); + + HashMap directionMap = new HashMap(); + HashMap maxMap = new HashMap(); + CuboidArea originalCuboid = new CuboidArea(cuboid.getLowLocation(), cuboid.getHighLocation()); + + int smallestRange = maxX - cuboid.getXSize() < maxY - cuboid.getYSize() ? maxX - cuboid.getXSize() : maxY - cuboid.getYSize(); + smallestRange = smallestRange < maxZ - cuboid.getZSize() ? smallestRange : maxZ - cuboid.getZSize(); + smallestRange = smallestRange / 4; + + while (true) { + done++; + + // fail safe if loop keeps going on + if (done > 100) { + break; + } + + if (Math.abs(smallestRange) < 1) { + break; + } + + CuboidArea c = new CuboidArea(); + c.setLowLocation(cuboid.getLowLocation().clone().add(-smallestRange, -smallestRange, -smallestRange)); + c.setHighLocation(cuboid.getHighLocation().clone().add(smallestRange, smallestRange, smallestRange)); + + if (c.getHighVector().getBlockY() > maxWorldY) { + c.setHighVector(c.getHighVector().setY(maxWorldY)); + } + + if (c.getLowVector().getBlockY() > maxWorldY - 1) { + c.setLowVector(c.getLowVector().setY(maxWorldY - 1)); + } else if (c.getLowVector().getBlockY() < minWorldY) { + c.setLowVector(c.getLowVector().setY(minWorldY)); + } + if (checkCollision) { + if (plugin.getResidenceManager().collidesWithResidence(c) != null) { + smallestRange = (int) -(Math.ceil(Math.abs(smallestRange) / 2D)); + cuboid.setLowLocation(c.getLowLocation()); + cuboid.setHighLocation(c.getHighLocation()); + continue; + } + + if (smallestRange == -1) { + cuboid.setLowLocation(cuboid.getLowLocation().clone().add(1, 1, 1)); + cuboid.setHighLocation(cuboid.getHighLocation().clone().add(-1, -1, -1)); + break; + } + } + + int sr = (int) Math.ceil(Math.abs(smallestRange) / 2D); + + if (maxX > 0 && maxX < c.getXSize() || c.getXSize() > group.getMaxX()) { + break; + } + + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (maxY > 0 && maxY < c.getYSize() || c.getYSize() > group.getMaxY() + (-group.getMinY()))) { + break; + } + + if (maxZ > 0 && maxZ < c.getZSize() || c.getZSize() > group.getMaxZ()) { + break; + } + + cuboid.setLowLocation(c.getLowLocation()); + cuboid.setHighLocation(c.getHighLocation()); + smallestRange = sr; + } + + if (cuboid.getXSize() < 1) { + int center = (int) (originalCuboid.getLowVector().getX() + ((originalCuboid.getHighVector().getX() - originalCuboid.getLowVector().getX()) / 2)); + cuboid.getLowVector().setX(center); + cuboid.getHighVector().setX(center); + } + + if (cuboid.getZSize() < 1) { + int center = (int) (originalCuboid.getLowVector().getZ() + ((originalCuboid.getHighVector().getZ() - originalCuboid.getLowVector().getZ()) / 2)); + cuboid.getLowVector().setZ(center); + cuboid.getHighVector().setZ(center); + } + + if (cuboid.getYSize() < 1) { + int center = (int) (originalCuboid.getLowVector().getY() + ((originalCuboid.getHighVector().getY() - originalCuboid.getLowVector().getY()) / 2)); + cuboid.getLowVector().setY(center); + cuboid.getHighVector().setY(center); + } + + CMIDebug.c(cuboid.getHighVector().getBlockY(), maxWorldY); + + fillMaps(directionMap, maxMap, direction.East, maxX, cuboid.getXSize()); + fillMaps(directionMap, maxMap, direction.West, maxX, cuboid.getXSize()); + + fillMaps(directionMap, maxMap, direction.South, maxZ, cuboid.getZSize()); + fillMaps(directionMap, maxMap, direction.North, maxZ, cuboid.getZSize()); + + fillMaps(directionMap, maxMap, direction.Top, maxY, cuboid.getYSize()); + fillMaps(directionMap, maxMap, direction.Bottom, maxY, cuboid.getYSize()); + + while (true) { + if (Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (dir.equals(direction.Top) || dir.equals(direction.Bottom))) { + dir = dir.getNext(); + continue; + } + done++; + + if (skipped >= 6) { + break; + } + + // fail safe if loop keeps going on + if (done > 100) { + break; + } + + if (locked.contains(dir)) { + dir = dir.getNext(); + skipped++; + continue; + } + skipped = 0; + + Integer offset = directionMap.get(dir); + + if (Math.abs(offset) == 0) { + locked.add(dir); + dir = dir.getNext(); + continue; + } + + CuboidArea c = new CuboidArea(); + c.setLowLocation(cuboid.getLowLocation().clone().add(-dir.getLow().getX() * offset, -dir.getLow().getY() * offset, -dir.getLow().getZ() * offset)); + c.setHighLocation(cuboid.getHighLocation().clone().add(dir.getHigh().getX() * offset, dir.getHigh().getY() * offset, dir.getHigh().getZ() * offset)); + + if (c.getHighVector().getBlockY() > maxWorldY) { + + c.setHighVector(c.getHighVector().setY(maxWorldY)); + } + + if (c.getLowVector().getBlockY() > maxWorldY - 1) { + c.setLowVector(c.getLowVector().setY(maxWorldY - 1)); + } else if (c.getLowVector().getBlockY() < minWorldY) { + c.setLowVector(c.getLowVector().setY(minWorldY)); + } + + if (checkCollision) { + if (plugin.getResidenceManager().collidesWithResidence(c) != null) { + + int newOffset = (int) Math.ceil(Math.abs(offset) / 2D); + + if (newOffset < 1) + newOffset = 1; + + directionMap.put(dir, -(newOffset)); + + cuboid.setLowLocation(c.getLowLocation()); + cuboid.setHighLocation(c.getHighLocation()); + continue; + } + } + + if (maxMap.get(dir).equals(Math.abs(offset))) { + locked.add(dir); + } + + directionMap.put(dir, (int) (Math.abs(offset) / 2D)); + + if (maxX > 0 && maxX < c.getXSize() || c.getXSize() > group.getMaxX()) { + locked.add(dir); + dir = dir.getNext(); + continue; + } + + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (maxY > 0 && maxY < c.getYSize() || c.getYSize() > group.getMaxY() + (-group.getMinY()))) { + locked.add(dir); + dir = dir.getNext(); + continue; + } + + if (maxZ > 0 && maxZ < c.getZSize() || c.getZSize() > group.getMaxZ()) { + locked.add(dir); + dir = dir.getNext(); + continue; + } + + if (checkBalance && plugin.getConfigManager().enableEconomy()) { + if (!Residence.getInstance().getEconomyManager().canAfford(player, c.getCost(group))) { + plugin.msg(player, lm.Economy_NotEnoughMoney); + break; + } + } + + cuboid.setLowLocation(c.getLowLocation()); + cuboid.setHighLocation(c.getHighLocation()); + + dir = dir.getNext(); + } + CMIDebug.d("Cycles: ", done); plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); cuboid = plugin.getSelectionManager().getSelectionCuboid(player); + CMIDebug.d("Height: ", cuboid.getHighLocation().getBlockY(), cuboid.getLowLocation().getBlockY(), "max: ", maxWorldY); + if (cuboid.getXSize() > group.getMaxX() || cuboid.getYSize() > group.getMaxY() + (-group.getMinY()) || cuboid.getZSize() > group.getMaxZ()) { return false; } @@ -312,6 +579,7 @@ public direction getNext() { } return dir; } + } @Override diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index 140d80e0e..fbca1b452 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -5,13 +5,14 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; +import net.Zrips.CMILib.FileHandler.ConfigReader; + public class create implements cmd { @Override diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index 7bf8365c9..2315347db 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -298,11 +298,19 @@ public void setHighLocation(Location highLocation) { this.world = highLocation.getWorld(); } + public void setHighVector(Vector highLocation) { + this.highPoints = highLocation; + } + public void setLowLocation(Location lowLocation) { this.lowPoints = lowLocation.toVector(); this.world = lowLocation.getWorld(); } + public void setLowVector(Vector lowLocation) { + this.lowPoints = lowLocation; + } + public double getCost(PermissionGroup group) { return (int) (getSize() * group.getCostPerBlock() * 100) / 100D; } From 26011f2a1cb6c36145fa7aeffdb56c5258d524b2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Sep 2022 14:08:45 +0300 Subject: [PATCH 0973/1142] Option to define players residence max X and Z with permission --- .../residence/Placeholders/Placeholder.java | 6 +- .../bukkit/residence/commands/auto.java | 44 +- .../residence/containers/ResidencePlayer.java | 493 ++++++++------- .../permissions/PermissionGroup.java | 562 +++++++++--------- .../permissions/PermissionManager.java | 2 + .../protection/ClaimedResidence.java | 8 +- .../residence/selection/AutoSelection.java | 6 +- 7 files changed, 584 insertions(+), 537 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java index c0a174c1b..e7b3495af 100644 --- a/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java +++ b/src/com/bekvon/bukkit/residence/Placeholders/Placeholder.java @@ -401,11 +401,11 @@ public String getValue(Player player, CMIPlaceHolders placeHolder, String value) break; case residence_user_maxew: PermissionGroup group = user.getGroup(); - result = group.getXmin() + "-" + group.getXmax(); + result = group.getMinX() + "-" + user.getMaxX(); break; case residence_user_maxns: group = user.getGroup(); - result = group.getZmin() + "-" + group.getZmax(); + result = group.getMinZ() + "-" + user.getMaxZ(); break; case residence_user_maxrentdays: result = String.valueOf(user.getGroup().getMaxRentDays()); @@ -424,7 +424,7 @@ public String getValue(Player player, CMIPlaceHolders placeHolder, String value) break; case residence_user_maxud: group = user.getGroup(); - result = group.getYmin() + "-" + group.getYmax(); + result = group.getMinY() + "-" + group.getMaxY(); break; case residence_user_current_owner: ClaimedResidence res = plugin.getResidenceManager().getByLoc(user.getPlayer().getLocation()); diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index f3e663888..6fe14af1f 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -158,9 +158,12 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, int skipped = 0; int done = 0; - int maxX = getMax(group.getMaxX()); + int groupMaxX = rPlayer.getMaxX(); + int groupMaxZ = rPlayer.getMaxZ(); + + int maxX = getMax(groupMaxX); int maxY = getMax(group.getMaxY()); - int maxZ = getMax(group.getMaxZ()); + int maxZ = getMax(groupMaxZ); if (maxX > max && max > 0) maxX = max; @@ -170,13 +173,13 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, maxZ = max; if (maxX <= 1) - maxX = (group.getMaxX() - group.getMinX()) / 2 + group.getMinX(); + maxX = (rPlayer.getMaxX() - group.getMinX()) / 2 + group.getMinX(); if (maxY <= 1) maxY = (group.getMaxY() - group.getMinY()) / 2 + group.getMinY(); if (maxZ <= 1) - maxZ = (group.getMaxZ() - group.getMinZ()) / 2 + group.getMinZ(); + maxZ = (rPlayer.getMaxZ() - group.getMinZ()) / 2 + group.getMinZ(); int minY = CMIWorld.getMinHeight(cuboid.getWorld()); @@ -233,7 +236,7 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, continue; } - if (maxX > 0 && maxX < c.getXSize() || c.getXSize() > group.getMaxX()) { + if (maxX > 0 && maxX < c.getXSize() || c.getXSize() > groupMaxX) { locked.add(dir); dir = dir.getNext(); skipped++; @@ -247,7 +250,7 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, continue; } - if (maxZ > 0 && maxZ < c.getZSize() || c.getZSize() > group.getMaxZ()) { + if (maxZ > 0 && maxZ < c.getZSize() || c.getZSize() > groupMaxZ) { locked.add(dir); dir = dir.getNext(); skipped++; @@ -270,13 +273,13 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, dir = dir.getNext(); } - CMIDebug.d("Cycles: ", done); + plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); cuboid = plugin.getSelectionManager().getSelectionCuboid(player); - if (cuboid.getXSize() > group.getMaxX() || cuboid.getYSize() > group.getMaxY() + (-group.getMinY()) || cuboid.getZSize() > group.getMaxZ()) { + if (cuboid.getXSize() > groupMaxX || cuboid.getYSize() > group.getMaxY() + (-group.getMinY()) || cuboid.getZSize() > groupMaxZ) { return false; } @@ -310,9 +313,12 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre int maxWorldY = group.getMaxY(); int minWorldY = group.getMinY(); - int maxX = getMax(group.getMaxX()); + int groupMaxX = rPlayer.getMaxX(); + int groupMaxZ = rPlayer.getMaxZ(); + + int maxX = getMax(groupMaxX); int maxY = getMax(group.getMaxY()); - int maxZ = getMax(group.getMaxZ()); + int maxZ = getMax(groupMaxZ); if (maxX > max && max > 0) maxX = max; @@ -322,13 +328,13 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre maxZ = max; if (maxX <= 1) - maxX = (group.getMaxX() - group.getMinX()) / 2 + group.getMinX(); + maxX = (groupMaxX - group.getMinX()) / 2 + group.getMinX(); if (maxY <= 1) maxY = (group.getMaxY() - group.getMinY()) / 2 + group.getMinY(); if (maxZ <= 1) - maxZ = (group.getMaxZ() - group.getMinZ()) / 2 + group.getMinZ(); + maxZ = (groupMaxZ - group.getMinZ()) / 2 + group.getMinZ(); HashMap directionMap = new HashMap(); HashMap maxMap = new HashMap(); @@ -380,7 +386,7 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre int sr = (int) Math.ceil(Math.abs(smallestRange) / 2D); - if (maxX > 0 && maxX < c.getXSize() || c.getXSize() > group.getMaxX()) { + if (maxX > 0 && maxX < c.getXSize() || c.getXSize() > groupMaxX) { break; } @@ -388,7 +394,7 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre break; } - if (maxZ > 0 && maxZ < c.getZSize() || c.getZSize() > group.getMaxZ()) { + if (maxZ > 0 && maxZ < c.getZSize() || c.getZSize() > groupMaxZ) { break; } @@ -495,7 +501,7 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre directionMap.put(dir, (int) (Math.abs(offset) / 2D)); - if (maxX > 0 && maxX < c.getXSize() || c.getXSize() > group.getMaxX()) { + if (maxX > 0 && maxX < c.getXSize() || c.getXSize() > groupMaxX) { locked.add(dir); dir = dir.getNext(); continue; @@ -507,7 +513,7 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre continue; } - if (maxZ > 0 && maxZ < c.getZSize() || c.getZSize() > group.getMaxZ()) { + if (maxZ > 0 && maxZ < c.getZSize() || c.getZSize() > groupMaxZ) { locked.add(dir); dir = dir.getNext(); continue; @@ -525,15 +531,13 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre dir = dir.getNext(); } - CMIDebug.d("Cycles: ", done); + plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); cuboid = plugin.getSelectionManager().getSelectionCuboid(player); - CMIDebug.d("Height: ", cuboid.getHighLocation().getBlockY(), cuboid.getLowLocation().getBlockY(), "max: ", maxWorldY); - - if (cuboid.getXSize() > group.getMaxX() || cuboid.getYSize() > group.getMaxY() + (-group.getMinY()) || cuboid.getZSize() > group.getMaxZ()) { + if (cuboid.getXSize() > groupMaxX || cuboid.getYSize() > group.getMaxY() + (-group.getMinY()) || cuboid.getZSize() > groupMaxZ) { return false; } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 84bf83df2..69653e788 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -41,6 +41,9 @@ public class ResidencePlayer { private int maxSubzones = -1; private int maxSubzoneDepth = -1; + private int maxX = -1; + private int maxZ = -1; + private int maxValue = 9999; private Long lastRaidAttackTimer = 0L; @@ -49,411 +52,441 @@ public class ResidencePlayer { private ResidenceRaid raid = null; public ResidencePlayer(OfflinePlayer off) { - if (off == null) - return; - this.uuid = off.getUniqueId(); - this.userName = off.getName(); - Residence.getInstance().addOfflinePlayerToChache(off); - this.updatePlayer(); + if (off == null) + return; + this.uuid = off.getUniqueId(); + this.userName = off.getName(); + Residence.getInstance().addOfflinePlayerToChache(off); + this.updatePlayer(); } public ResidencePlayer(Player player) { - if (player == null) - return; - Residence.getInstance().addOfflinePlayerToChache(player); - this.updatePlayer(player); + if (player == null) + return; + Residence.getInstance().addOfflinePlayerToChache(player); + this.updatePlayer(player); } public boolean isOnline() { - this.updatePlayer(); - if (this.player != null && this.player.isOnline()) - return true; - return false; + this.updatePlayer(); + if (this.player != null && this.player.isOnline()) + return true; + return false; } public ResidencePlayer(String userName, UUID uuid) { - this.userName = userName; - this.uuid = uuid; + this.userName = userName; + this.uuid = uuid; } public ResidencePlayer(String userName) { - this.userName = userName; + this.userName = userName; } public void setMainResidence(ClaimedResidence res) { - if (mainResidence != null) - mainResidence.setMainResidence(false); - mainResidence = res; + if (mainResidence != null) + mainResidence.setMainResidence(false); + mainResidence = res; } public ClaimedResidence getMainResidence() { - if (mainResidence == null || !mainResidence.isOwner(this.getPlayerName())) { - for (ClaimedResidence one : ResidenceList) { - if (one == null) - continue; - if (one.isMainResidence()) { - mainResidence = one; - return mainResidence; - } - } - for (String one : Residence.getInstance().getRentManager().getRentedLands(this.userName)) { - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByName(one); - if (res != null) { - mainResidence = res; - return mainResidence; - } - } - for (ClaimedResidence one : ResidenceList) { - if (one == null) - continue; - mainResidence = one; - return mainResidence; - } - } - return mainResidence; + if (mainResidence == null || !mainResidence.isOwner(this.getPlayerName())) { + for (ClaimedResidence one : ResidenceList) { + if (one == null) + continue; + if (one.isMainResidence()) { + mainResidence = one; + return mainResidence; + } + } + for (String one : Residence.getInstance().getRentManager().getRentedLands(this.userName)) { + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByName(one); + if (res != null) { + mainResidence = res; + return mainResidence; + } + } + for (ClaimedResidence one : ResidenceList) { + if (one == null) + continue; + mainResidence = one; + return mainResidence; + } + } + return mainResidence; + } + + public void recountMaxX() { + int m = this.getGroup().getMaxX(); + m = m == -1 ? maxX : m; + this.maxX = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_res_maxx_$1).getMaxValue(m); + } + + public void recountMaxZ() { + int m = this.getGroup().getMaxZ(); + m = m == -1 ? maxZ : m; + this.maxZ = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_res_maxz_$1).getMaxValue(m); } public void recountMaxRes() { - if (player != null && player.isOnline()) { - if (ResPerm.max_res_unlimited.hasSetPermission(player)) { - this.maxRes = maxValue; - return; - } - } else if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_res_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { - this.maxRes = maxValue; - return; - } + if (player != null && player.isOnline()) { + if (ResPerm.max_res_unlimited.hasSetPermission(player)) { + this.maxRes = maxValue; + return; + } + } else if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_res_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { + this.maxRes = maxValue; + return; + } - int m = this.getGroup().getMaxZones(); - m = m == -1 ? maxValue : m; + int m = this.getGroup().getMaxZones(); + m = m == -1 ? maxValue : m; - this.maxRes = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_res_$1).getMaxValue(m); + this.maxRes = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_res_$1).getMaxValue(m); } public void recountMaxRents() { - if (player != null) { - if (ResPerm.max_rents_unlimited.hasSetPermission(player)) { - this.maxRents = maxValue; - return; - } - } else { - if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_rents_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { - this.maxRents = maxValue; - return; - } - } + if (player != null) { + if (ResPerm.max_rents_unlimited.hasSetPermission(player)) { + this.maxRents = maxValue; + return; + } + } else { + if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_rents_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { + this.maxRents = maxValue; + return; + } + } - int m = this.getGroup().getMaxRents(); - m = m == -1 ? maxValue : m; + int m = this.getGroup().getMaxRents(); + m = m == -1 ? maxValue : m; - this.maxRents = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_rents_$1).getMaxValue(m); + this.maxRents = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_rents_$1).getMaxValue(m); } public int getMaxRents() { - recountMaxRents(); - return this.maxRents; + recountMaxRents(); + return this.maxRents; } public void recountMaxSubzones() { - if (player != null) { - if (ResPerm.max_subzones_unlimited.hasSetPermission(player)) { - this.maxSubzones = maxValue; - return; - } - } else { - if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzones_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { - this.maxSubzones = maxValue; - return; - } - } + if (player != null) { + if (ResPerm.max_subzones_unlimited.hasSetPermission(player)) { + this.maxSubzones = maxValue; + return; + } + } else { + if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzones_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { + this.maxSubzones = maxValue; + return; + } + } - int m = this.getGroup().getMaxSubzones(); - m = m == -1 ? maxValue : m; - this.maxSubzones = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_subzones_$1).getMaxValue(m); + int m = this.getGroup().getMaxSubzones(); + m = m == -1 ? maxValue : m; + this.maxSubzones = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_subzones_$1).getMaxValue(m); } public int getMaxSubzones() { - recountMaxSubzones(); - return this.maxSubzones; + recountMaxSubzones(); + return this.maxSubzones; } public void recountMaxSubzoneDepth() { - if (player != null) { - if (ResPerm.max_subzonedepth_unlimited.hasSetPermission(player)) { - this.maxSubzoneDepth = maxValue; - return; - } - } else { - if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzonedepth_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { - this.maxSubzoneDepth = maxValue; - return; - } - } + if (player != null) { + if (ResPerm.max_subzonedepth_unlimited.hasSetPermission(player)) { + this.maxSubzoneDepth = maxValue; + return; + } + } else { + if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzonedepth_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { + this.maxSubzoneDepth = maxValue; + return; + } + } - int m = this.getGroup().getMaxSubzoneDepth(); - m = m == -1 ? maxValue : m; + int m = this.getGroup().getMaxSubzoneDepth(); + m = m == -1 ? maxValue : m; - this.maxSubzoneDepth = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_subzonedepth_$1).getMaxValue(m); + this.maxSubzoneDepth = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_subzonedepth_$1).getMaxValue(m); } public int getMaxSubzoneDepth() { - recountMaxSubzoneDepth(); - return this.maxSubzoneDepth; + recountMaxSubzoneDepth(); + return this.maxSubzoneDepth; } public int getMaxRes() { - recountMaxRes(); - PermissionGroup g = getGroup(); - if (this.maxRes < g.getMaxZones()) { - return g.getMaxZones(); - } - return this.maxRes; + recountMaxRes(); + PermissionGroup g = getGroup(); + if (this.maxRes < g.getMaxZones()) { + return g.getMaxZones(); + } + return this.maxRes; + } + + public int getMaxX() { + recountMaxX(); + PermissionGroup g = getGroup(); + if (this.maxX < g.getMaxX()) { + return g.getMaxX(); + } + return this.maxX; + } + + public int getMaxZ() { + recountMaxZ(); + PermissionGroup g = getGroup(); + if (this.maxZ < g.getMaxZ()) { + return g.getMaxZ(); + } + return this.maxZ; } public PermissionGroup getGroup() { - return getGroup(false); + return getGroup(false); } public PermissionGroup forceUpdateGroup() { - return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), true); + return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), true); } public PermissionGroup getGroup(boolean forceUpdate) { - updatePlayer(); - return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), forceUpdate); + updatePlayer(); + return getGroup(this.player != null ? player.getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld(), forceUpdate); } public PermissionGroup getGroup(String world) { - return getGroup(world, false); + return getGroup(world, false); } public PermissionGroup getGroup(String world, boolean force) { - if (groups == null) - groups = new PlayerGroup(this); - groups.updateGroup(world, force); - PermissionGroup group = groups.getGroup(world); - if (group == null) - group = Residence.getInstance().getPermissionManager().getDefaultGroup(); - return group; + if (groups == null) + groups = new PlayerGroup(this); + groups.updateGroup(world, force); + PermissionGroup group = groups.getGroup(world); + if (group == null) + group = Residence.getInstance().getPermissionManager().getDefaultGroup(); + return group; } private boolean updated = false; public ResidencePlayer updatePlayer(Player player) { - if (updated) - return this; - if (player.isOnline()) - updated = true; - this.player = player; - this.uuid = player.getUniqueId(); - this.userName = player.getName(); - this.ofPlayer = player; - return this; + if (updated) + return this; + if (player.isOnline()) + updated = true; + this.player = player; + this.uuid = player.getUniqueId(); + this.userName = player.getName(); + this.ofPlayer = player; + return this; } public void onQuit() { - this.ofPlayer = null; - this.player = null; - updated = false; + this.ofPlayer = null; + this.player = null; + updated = false; } private void updatePlayer() { - player = Bukkit.getPlayer(this.uuid); - if (player != null) - updatePlayer(player); - if (player != null && player.isOnline()) - return; - if (this.uuid != null && Bukkit.getPlayer(this.uuid) != null) { - player = Bukkit.getPlayer(this.uuid); - this.userName = player.getName(); - return; - } - - if (this.userName != null) { - player = Bukkit.getPlayer(this.userName); - } - if (player != null) { - this.userName = player.getName(); - this.uuid = player.getUniqueId(); - this.ofPlayer = player; - return; - } - if (this.player == null && ofPlayer == null) - ofPlayer = Residence.getInstance().getOfflinePlayer(userName); - if (ofPlayer != null) { - this.userName = ofPlayer.getName(); - this.uuid = ofPlayer.getUniqueId(); - return; - } + player = Bukkit.getPlayer(this.uuid); + if (player != null) + updatePlayer(player); + if (player != null && player.isOnline()) + return; + if (this.uuid != null && Bukkit.getPlayer(this.uuid) != null) { + player = Bukkit.getPlayer(this.uuid); + this.userName = player.getName(); + return; + } + + if (this.userName != null) { + player = Bukkit.getPlayer(this.userName); + } + if (player != null) { + this.userName = player.getName(); + this.uuid = player.getUniqueId(); + this.ofPlayer = player; + return; + } + if (this.player == null && ofPlayer == null) + ofPlayer = Residence.getInstance().getOfflinePlayer(userName); + if (ofPlayer != null) { + this.userName = ofPlayer.getName(); + this.uuid = ofPlayer.getUniqueId(); + return; + } } public void addResidence(ClaimedResidence residence) { - if (residence == null) - return; - // Exclude subzones - if (residence.isSubzone()) - return; - residence.getPermissions().setOwnerUUID(uuid); - if (this.userName != null) - residence.getPermissions().setOwnerLastKnownName(userName); - this.ResidenceList.add(residence); + if (residence == null) + return; + // Exclude subzones + if (residence.isSubzone()) + return; + residence.getPermissions().setOwnerUUID(uuid); + if (this.userName != null) + residence.getPermissions().setOwnerLastKnownName(userName); + this.ResidenceList.add(residence); } public void removeResidence(ClaimedResidence residence) { - if (residence == null) - return; - boolean rem = this.ResidenceList.remove(residence); - // in case its fails to remove, double check by name - if (rem == false) { - Iterator iter = this.ResidenceList.iterator(); - while (iter.hasNext()) { - ClaimedResidence one = iter.next(); - if (one.getName().equalsIgnoreCase(residence.getName())) { - iter.remove(); - break; - } - } - } + if (residence == null) + return; + boolean rem = this.ResidenceList.remove(residence); + // in case its fails to remove, double check by name + if (rem == false) { + Iterator iter = this.ResidenceList.iterator(); + while (iter.hasNext()) { + ClaimedResidence one = iter.next(); + if (one.getName().equalsIgnoreCase(residence.getName())) { + iter.remove(); + break; + } + } + } } public int getResAmount() { - int i = 0; - for (ClaimedResidence one : ResidenceList) { - if (one.isSubzone()) - continue; - i++; - } - return i; + int i = 0; + for (ClaimedResidence one : ResidenceList) { + if (one.isSubzone()) + continue; + i++; + } + return i; } public List getResList() { - List ls = new ArrayList(); - ls.addAll(ResidenceList); - return ls; + List ls = new ArrayList(); + ls.addAll(ResidenceList); + return ls; } @Deprecated public String getPlayerName() { - return getName(); + return getName(); } public String getName() { - this.updatePlayer(); - return userName; + this.updatePlayer(); + return userName; } public UUID getUniqueId() { - return uuid; + return uuid; } @Deprecated public UUID getUuid() { - return getUniqueId(); + return getUniqueId(); } public Player getPlayer() { - this.updatePlayer(); - return player; + this.updatePlayer(); + return player; } public ClaimedResidence getCurrentlyRaidedResidence() { - for (ClaimedResidence one : getResList()) { - if (one.getRaid().isUnderRaid() || one.getRaid().isInPreRaid()) { - return one; - } - } - return null; + for (ClaimedResidence one : getResList()) { + if (one.getRaid().isUnderRaid() || one.getRaid().isInPreRaid()) { + return one; + } + } + return null; } public Long getLastRaidAttackTimer() { - return lastRaidAttackTimer; + return lastRaidAttackTimer; } public void setLastRaidAttackTimer(Long lastRaidAttackTimer) { - this.lastRaidAttackTimer = lastRaidAttackTimer; + this.lastRaidAttackTimer = lastRaidAttackTimer; } public Long getLastRaidDefendTimer() { - return lastRaidDefendTimer; + return lastRaidDefendTimer; } public void setLastRaidDefendTimer(Long lastRaidDefendTimer) { - this.lastRaidDefendTimer = lastRaidDefendTimer; + this.lastRaidDefendTimer = lastRaidDefendTimer; } public ResidenceRaid getJoinedRaid() { - return raid; + return raid; } public void setJoinedRaid(ResidenceRaid raid) { - this.raid = raid; + this.raid = raid; } public PlayerGroup getGroups() { - return groups; + return groups; } @Deprecated public boolean canBreakBlock(Location loc, boolean inform) { - return canBreakBlock(loc.getBlock(), inform); + return canBreakBlock(loc.getBlock(), inform); } public boolean canBreakBlock(Block block, boolean inform) { - return ResidenceBlockListener.canBreakBlock(this.getPlayer(), block, inform); + return ResidenceBlockListener.canBreakBlock(this.getPlayer(), block, inform); } @Deprecated public boolean canPlaceBlock(Location loc, boolean inform) { - return canPlaceBlock(loc.getBlock(), inform); + return canPlaceBlock(loc.getBlock(), inform); } public boolean canPlaceBlock(Block block, boolean inform) { - return ResidenceBlockListener.canPlaceBlock(this.getPlayer(), block, inform); + return ResidenceBlockListener.canPlaceBlock(this.getPlayer(), block, inform); } public boolean canDamageEntity(Entity entity, boolean inform) { - return ResidenceEntityListener.canDamageEntity(this.getPlayer(), entity, inform); + return ResidenceEntityListener.canDamageEntity(this.getPlayer(), entity, inform); } public Set getTrustedResidenceList() { - return trustedList; + return trustedList; } public void addTrustedResidence(ClaimedResidence residence) { - if (residence == null) - return; - this.trustedList.add(residence); + if (residence == null) + return; + this.trustedList.add(residence); } public void removeTrustedResidence(ClaimedResidence residence) { - if (residence == null) - return; - this.trustedList.remove(residence); + if (residence == null) + return; + this.trustedList.remove(residence); } // public boolean canDamagePlayer(Player player, boolean inform) { // // } public void setUuid(UUID uuid) { - this.uuid = uuid; + this.uuid = uuid; } public static ResidencePlayer get(String name) { - return Residence.getInstance().getPlayerManager().getResidencePlayer(name); + return Residence.getInstance().getPlayerManager().getResidencePlayer(name); } public static ResidencePlayer get(Player player) { - return Residence.getInstance().getPlayerManager().getResidencePlayer(player); + return Residence.getInstance().getPlayerManager().getResidencePlayer(player); } public static ResidencePlayer get(UUID uuid) { - return Residence.getInstance().getPlayerManager().getResidencePlayer(uuid); + return Residence.getInstance().getPlayerManager().getResidencePlayer(uuid); } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 3ba69d00b..4a296f0be 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -73,189 +73,189 @@ public class PermissionGroup { protected int priority = 0; public PermissionGroup(String name) { - flagPerms = new FlagPermissions(); - creatorDefaultFlags = new HashMap(); + flagPerms = new FlagPermissions(); + creatorDefaultFlags = new HashMap(); // rentedDefaultFlags = new HashMap(); - residenceDefaultFlags = new HashMap(); - groupDefaultFlags = new HashMap>(); - groupname = name; + residenceDefaultFlags = new HashMap(); + groupDefaultFlags = new HashMap>(); + groupname = name; } public void setPriority(int number) { - this.priority = number; + this.priority = number; } public int getPriority() { - return this.priority; + return this.priority; } public PermissionGroup(String name, ConfigurationSection node) { - this(name); - this.parseGroup(node); + this(name); + this.parseGroup(node); } public PermissionGroup(String name, ConfigurationSection node, FlagPermissions parentFlagPerms) { - this(name, node); - flagPerms.setParent(parentFlagPerms); + this(name, node); + flagPerms.setParent(parentFlagPerms); } public PermissionGroup(String name, ConfigurationSection node, FlagPermissions parentFlagPerms, int priority) { - this(name, node); - flagPerms.setParent(parentFlagPerms); - this.priority = priority; + this(name, node); + flagPerms.setParent(parentFlagPerms); + this.priority = priority; } public void mirrorIn(ConfigurationSection limits) { - parseGroup(limits); + parseGroup(limits); } private void parseGroup(ConfigurationSection limits) { - if (limits == null) { - return; - } - if (limits.contains("Residence.CanCreate")) - cancreate = limits.getBoolean("Residence.CanCreate", false); - - if (limits.contains("Residence.MaxResidences")) - resmax = limits.getInt("Residence.MaxResidences", 0); - - if (limits.contains("Residence.MaxAreasPerResidence")) - maxPhysical = limits.getInt("Residence.MaxAreasPerResidence", 2); - - if (limits.contains("Residence.MaxEastWest")) - xmax = limits.getInt("Residence.MaxEastWest", 0); - if (limits.contains("Residence.MinEastWest")) - xmin = limits.getInt("Residence.MinEastWest", 0); - - xmin = getXmin() > getXmax() ? getXmax() : getXmin(); - - if (limits.contains("Residence.MaxUpDown")) - ymax = limits.getInt("Residence.MaxUpDown", 0); - if (limits.contains("Residence.MinUpDown")) - ymin = limits.getInt("Residence.MinUpDown", 0); - ymin = ymin > ymax ? ymax : ymin; - - if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { - ymin = CMIWorld.getMinHeight(Bukkit.getWorlds().get(0)); - // This needs to be 256 to include entire height where 255 and block 0 - ymax = CMIWorld.getMaxHeight(Bukkit.getWorlds().get(0)); - } - - if (limits.contains("Residence.MaxNorthSouth")) - zmax = limits.getInt("Residence.MaxNorthSouth", 0); - if (limits.contains("Residence.MinNorthSouth")) - zmin = limits.getInt("Residence.MinNorthSouth", 0); - zmin = zmin > zmax ? zmax : zmin; - - if (limits.contains("Residence.MinHeight")) - minHeight = limits.getInt("Residence.MinHeight", 0); - // This needs to be 256 to include entire height where 255 and block 0 - if (limits.contains("Residence.MaxHeight")) - maxHeight = limits.getInt("Residence.MaxHeight", CMIWorld.getMaxHeight(Bukkit.getWorlds().get(0))); - - if (limits.contains("Residence.CanTeleport")) - tpaccess = limits.getBoolean("Residence.CanTeleport", false); - - if (limits.contains("Residence.MaxSubzonesInArea")) - maxSubzones = limits.getInt("Residence.MaxSubzonesInArea", 3); - - if (limits.contains("Residence.SubzoneDepth")) - subzonedepth = limits.getInt("Residence.SubzoneDepth", 0); - - if (limits.contains("Residence.SubzoneMaxEastWest")) - Subzonexmax = limits.getInt("Residence.SubzoneMaxEastWest", getXmax()); - else - Subzonexmax = getXmax(); - Subzonexmax = getXmax() < Subzonexmax ? getXmax() : Subzonexmax; - - if (limits.contains("Residence.SubzoneMinEastWest")) - Subzonexmin = limits.getInt("Residence.SubzoneMinEastWest", 0); - Subzonexmin = Subzonexmin > Subzonexmax ? Subzonexmax : Subzonexmin; - - if (limits.contains("Residence.SubzoneMaxUpDown")) - Subzoneymax = limits.getInt("Residence.SubzoneMaxUpDown", ymax); - else - Subzoneymax = getYmax(); - - Subzoneymax = ymax < Subzoneymax ? ymax : Subzoneymax; - if (limits.contains("Residence.SubzoneMinUpDown")) - Subzoneymin = limits.getInt("Residence.SubzoneMinUpDown", 0); - Subzoneymin = Subzoneymin > Subzoneymax ? Subzoneymax : Subzoneymin; - - if (limits.contains("Residence.SubzoneMaxNorthSouth")) - Subzonezmax = limits.getInt("Residence.SubzoneMaxNorthSouth", zmax); - else - Subzonezmax = getZmax(); - Subzonezmax = zmax < Subzonezmax ? zmax : Subzonezmax; - if (limits.contains("Residence.SubzoneMinNorthSouth")) - Subzonezmin = limits.getInt("Residence.SubzoneMinNorthSouth", 0); - Subzonezmin = Subzonezmin > Subzonezmax ? Subzonezmax : Subzonezmin; - - if (limits.contains("Messaging.CanChange")) - messageperms = limits.getBoolean("Messaging.CanChange", false); - if (limits.contains("Messaging.DefaultEnter")) - defaultEnterMessage = limits.getString("Messaging.DefaultEnter", null); - if (limits.contains("Messaging.DefaultLeave")) - defaultLeaveMessage = limits.getString("Messaging.DefaultLeave", null); - if (limits.contains("Lease.MaxDays")) - maxLeaseTime = limits.getInt("Lease.MaxDays", 16); - if (limits.contains("Lease.RenewIncrement")) - leaseGiveTime = limits.getInt("Lease.RenewIncrement", 14); - if (limits.contains("Rent.MaxRents")) - maxRents = limits.getInt("Rent.MaxRents", 0); - - if (limits.contains("Rent.MaxRentDays")) - MaxRentDays = limits.getInt("Rent.MaxRentDays", -1); - - if (limits.contains("Rent.MaxRentables")) - maxRentables = limits.getInt("Rent.MaxRentables", 0); - if (limits.contains("Economy.RenewCost")) - renewcostperarea = limits.getDouble("Economy.RenewCost", 0.02D); - if (limits.contains("Economy.CanBuy")) - canBuy = limits.getBoolean("Economy.CanBuy", false); - if (limits.contains("Economy.CanSell")) - canSell = limits.getBoolean("Economy.CanSell", false); - if (limits.contains("Economy.IgnoreLimits")) - buyIgnoreLimits = limits.getBoolean("Economy.IgnoreLimits", false); - if (limits.contains("Economy.BuyCost")) - costperarea = limits.getDouble("Economy.BuyCost", 0); - - if (limits.contains("Economy.SellCost")) - sellperarea = limits.getDouble("Economy.SellCost", 0); - - if (limits.isBoolean("Residence.Unstuck")) - unstuck = limits.getBoolean("Residence.Unstuck", false); - if (limits.contains("Residence.Kick")) - kick = limits.getBoolean("Residence.Kick", false); - if (limits.contains("Residence.SelectCommandAccess")) - selectCommandAccess = limits.getBoolean("Residence.SelectCommandAccess", true); - if (limits.contains("Residence.ItemListAccess")) - itemListAccess = limits.getBoolean("Residence.ItemListAccess", true); - ConfigurationSection node = limits.getConfigurationSection("Flags.Permission"); - Set flags = null; - if (node != null) { - flags = node.getKeys(false); - } - if (flags != null) { - Iterator flagit = flags.iterator(); - while (flagit.hasNext()) { - String flagname = flagit.next(); - boolean access = limits.getBoolean("Flags.Permission." + flagname, false); - flagPerms.setFlag(flagname, access ? FlagState.TRUE : FlagState.FALSE); - } - } - node = limits.getConfigurationSection("Flags.CreatorDefault"); - if (node != null) { - flags = node.getKeys(false); - } - if (flags != null) { - Iterator flagit = flags.iterator(); - while (flagit.hasNext()) { - String flagname = flagit.next(); - boolean access = limits.getBoolean("Flags.CreatorDefault." + flagname, false); - creatorDefaultFlags.put(flagname, access); - } - } + if (limits == null) { + return; + } + if (limits.contains("Residence.CanCreate")) + cancreate = limits.getBoolean("Residence.CanCreate", false); + + if (limits.contains("Residence.MaxResidences")) + resmax = limits.getInt("Residence.MaxResidences", 0); + + if (limits.contains("Residence.MaxAreasPerResidence")) + maxPhysical = limits.getInt("Residence.MaxAreasPerResidence", 2); + + if (limits.contains("Residence.MaxEastWest")) + xmax = limits.getInt("Residence.MaxEastWest", 0); + if (limits.contains("Residence.MinEastWest")) + xmin = limits.getInt("Residence.MinEastWest", 0); + + xmin = getXmin() > getXmax() ? getXmax() : getXmin(); + + if (limits.contains("Residence.MaxUpDown")) + ymax = limits.getInt("Residence.MaxUpDown", 0); + if (limits.contains("Residence.MinUpDown")) + ymin = limits.getInt("Residence.MinUpDown", 0); + ymin = ymin > ymax ? ymax : ymin; + + if (Residence.getInstance().getConfigManager().isSelectionIgnoreY()) { + ymin = CMIWorld.getMinHeight(Bukkit.getWorlds().get(0)); + // This needs to be 256 to include entire height where 255 and block 0 + ymax = CMIWorld.getMaxHeight(Bukkit.getWorlds().get(0)); + } + + if (limits.contains("Residence.MaxNorthSouth")) + zmax = limits.getInt("Residence.MaxNorthSouth", 0); + if (limits.contains("Residence.MinNorthSouth")) + zmin = limits.getInt("Residence.MinNorthSouth", 0); + zmin = zmin > zmax ? zmax : zmin; + + if (limits.contains("Residence.MinHeight")) + minHeight = limits.getInt("Residence.MinHeight", 0); + // This needs to be 256 to include entire height where 255 and block 0 + if (limits.contains("Residence.MaxHeight")) + maxHeight = limits.getInt("Residence.MaxHeight", CMIWorld.getMaxHeight(Bukkit.getWorlds().get(0))); + + if (limits.contains("Residence.CanTeleport")) + tpaccess = limits.getBoolean("Residence.CanTeleport", false); + + if (limits.contains("Residence.MaxSubzonesInArea")) + maxSubzones = limits.getInt("Residence.MaxSubzonesInArea", 3); + + if (limits.contains("Residence.SubzoneDepth")) + subzonedepth = limits.getInt("Residence.SubzoneDepth", 0); + + if (limits.contains("Residence.SubzoneMaxEastWest")) + Subzonexmax = limits.getInt("Residence.SubzoneMaxEastWest", getXmax()); + else + Subzonexmax = getXmax(); + Subzonexmax = getXmax() < Subzonexmax ? getXmax() : Subzonexmax; + + if (limits.contains("Residence.SubzoneMinEastWest")) + Subzonexmin = limits.getInt("Residence.SubzoneMinEastWest", 0); + Subzonexmin = Subzonexmin > Subzonexmax ? Subzonexmax : Subzonexmin; + + if (limits.contains("Residence.SubzoneMaxUpDown")) + Subzoneymax = limits.getInt("Residence.SubzoneMaxUpDown", ymax); + else + Subzoneymax = getYmax(); + + Subzoneymax = ymax < Subzoneymax ? ymax : Subzoneymax; + if (limits.contains("Residence.SubzoneMinUpDown")) + Subzoneymin = limits.getInt("Residence.SubzoneMinUpDown", 0); + Subzoneymin = Subzoneymin > Subzoneymax ? Subzoneymax : Subzoneymin; + + if (limits.contains("Residence.SubzoneMaxNorthSouth")) + Subzonezmax = limits.getInt("Residence.SubzoneMaxNorthSouth", zmax); + else + Subzonezmax = getZmax(); + Subzonezmax = zmax < Subzonezmax ? zmax : Subzonezmax; + if (limits.contains("Residence.SubzoneMinNorthSouth")) + Subzonezmin = limits.getInt("Residence.SubzoneMinNorthSouth", 0); + Subzonezmin = Subzonezmin > Subzonezmax ? Subzonezmax : Subzonezmin; + + if (limits.contains("Messaging.CanChange")) + messageperms = limits.getBoolean("Messaging.CanChange", false); + if (limits.contains("Messaging.DefaultEnter")) + defaultEnterMessage = limits.getString("Messaging.DefaultEnter", null); + if (limits.contains("Messaging.DefaultLeave")) + defaultLeaveMessage = limits.getString("Messaging.DefaultLeave", null); + if (limits.contains("Lease.MaxDays")) + maxLeaseTime = limits.getInt("Lease.MaxDays", 16); + if (limits.contains("Lease.RenewIncrement")) + leaseGiveTime = limits.getInt("Lease.RenewIncrement", 14); + if (limits.contains("Rent.MaxRents")) + maxRents = limits.getInt("Rent.MaxRents", 0); + + if (limits.contains("Rent.MaxRentDays")) + MaxRentDays = limits.getInt("Rent.MaxRentDays", -1); + + if (limits.contains("Rent.MaxRentables")) + maxRentables = limits.getInt("Rent.MaxRentables", 0); + if (limits.contains("Economy.RenewCost")) + renewcostperarea = limits.getDouble("Economy.RenewCost", 0.02D); + if (limits.contains("Economy.CanBuy")) + canBuy = limits.getBoolean("Economy.CanBuy", false); + if (limits.contains("Economy.CanSell")) + canSell = limits.getBoolean("Economy.CanSell", false); + if (limits.contains("Economy.IgnoreLimits")) + buyIgnoreLimits = limits.getBoolean("Economy.IgnoreLimits", false); + if (limits.contains("Economy.BuyCost")) + costperarea = limits.getDouble("Economy.BuyCost", 0); + + if (limits.contains("Economy.SellCost")) + sellperarea = limits.getDouble("Economy.SellCost", 0); + + if (limits.isBoolean("Residence.Unstuck")) + unstuck = limits.getBoolean("Residence.Unstuck", false); + if (limits.contains("Residence.Kick")) + kick = limits.getBoolean("Residence.Kick", false); + if (limits.contains("Residence.SelectCommandAccess")) + selectCommandAccess = limits.getBoolean("Residence.SelectCommandAccess", true); + if (limits.contains("Residence.ItemListAccess")) + itemListAccess = limits.getBoolean("Residence.ItemListAccess", true); + ConfigurationSection node = limits.getConfigurationSection("Flags.Permission"); + Set flags = null; + if (node != null) { + flags = node.getKeys(false); + } + if (flags != null) { + Iterator flagit = flags.iterator(); + while (flagit.hasNext()) { + String flagname = flagit.next(); + boolean access = limits.getBoolean("Flags.Permission." + flagname, false); + flagPerms.setFlag(flagname, access ? FlagState.TRUE : FlagState.FALSE); + } + } + node = limits.getConfigurationSection("Flags.CreatorDefault"); + if (node != null) { + flags = node.getKeys(false); + } + if (flags != null) { + Iterator flagit = flags.iterator(); + while (flagit.hasNext()) { + String flagname = flagit.next(); + boolean access = limits.getBoolean("Flags.CreatorDefault." + flagname, false); + creatorDefaultFlags.put(flagname, access); + } + } // node = limits.getConfigurationSection("Flags.RentedDefault"); // if (node == null) { @@ -276,190 +276,190 @@ private void parseGroup(ConfigurationSection limits) { // } // } - node = limits.getConfigurationSection("Flags.Default"); - if (node != null) { - flags = node.getKeys(false); - } - if (flags != null) { - Iterator flagit = flags.iterator(); - while (flagit.hasNext()) { - String flagname = flagit.next(); - boolean access = limits.getBoolean("Flags.Default." + flagname, false); - residenceDefaultFlags.put(flagname, access); - } - } - node = limits.getConfigurationSection("Flags.GroupDefault"); - Set groupDef = null; - if (node != null) { - groupDef = node.getKeys(false); - } - if (groupDef != null) { - Iterator groupit = groupDef.iterator(); - while (groupit.hasNext()) { - String name = groupit.next(); - Map gflags = new HashMap(); - flags = limits.getConfigurationSection("Flags.GroupDefault." + name).getKeys(false); - Iterator flagit = flags.iterator(); - while (flagit.hasNext()) { - String flagname = flagit.next(); - boolean access = limits.getBoolean("Flags.GroupDefault." + name + "." + flagname, false); - gflags.put(flagname, access); - } - groupDefaultFlags.put(name, gflags); - } - } + node = limits.getConfigurationSection("Flags.Default"); + if (node != null) { + flags = node.getKeys(false); + } + if (flags != null) { + Iterator flagit = flags.iterator(); + while (flagit.hasNext()) { + String flagname = flagit.next(); + boolean access = limits.getBoolean("Flags.Default." + flagname, false); + residenceDefaultFlags.put(flagname, access); + } + } + node = limits.getConfigurationSection("Flags.GroupDefault"); + Set groupDef = null; + if (node != null) { + groupDef = node.getKeys(false); + } + if (groupDef != null) { + Iterator groupit = groupDef.iterator(); + while (groupit.hasNext()) { + String name = groupit.next(); + Map gflags = new HashMap(); + flags = limits.getConfigurationSection("Flags.GroupDefault." + name).getKeys(false); + Iterator flagit = flags.iterator(); + while (flagit.hasNext()) { + String flagname = flagit.next(); + boolean access = limits.getBoolean("Flags.GroupDefault." + name + "." + flagname, false); + gflags.put(flagname, access); + } + groupDefaultFlags.put(name, gflags); + } + } } public String getGroupName() { - return groupname; + return groupname; } public int getMaxX() { - return getXmax(); + return xmax; } public int getMaxY() { - return ymax; + return ymax; } public int getMaxZ() { - return zmax; + return zmax; } public int getMinX() { - return getXmin(); + return xmin; } public int getMinY() { - return ymin; + return ymin; } public int getMinZ() { - return zmin; + return zmin; } public int getSubzoneMaxX() { - return Subzonexmax; + return Subzonexmax; } public int getSubzoneMaxY() { - return Subzoneymax; + return Subzoneymax; } public int getSubzoneMaxZ() { - return Subzonezmax; + return Subzonezmax; } public int getSubzoneMinX() { - return Subzonexmin; + return Subzonexmin; } public int getSubzoneMinY() { - return Subzoneymin; + return Subzoneymin; } public int getSubzoneMinZ() { - return Subzonezmin; + return Subzonezmin; } public int getMinHeight() { - return minHeight; + return minHeight; } public int getMaxHeight() { - return maxHeight; + return maxHeight; } public int getMaxZones() { - return resmax; + return resmax; } public double getCostPerBlock() { - return costperarea; + return costperarea; } public double getSellPerBlock() { - return sellperarea; + return sellperarea; } public boolean hasTpAccess() { - return tpaccess; + return tpaccess; } public int getMaxSubzoneDepth() { - return subzonedepth; + return subzonedepth; } public int getMaxSubzones() { - return maxSubzones; + return maxSubzones; } public boolean canSetEnterLeaveMessages() { - return messageperms; + return messageperms; } public String getDefaultEnterMessage() { - return defaultEnterMessage; + return defaultEnterMessage; } public String getDefaultLeaveMessage() { - return defaultLeaveMessage; + return defaultLeaveMessage; } public int getMaxLeaseTime() { - return maxLeaseTime; + return maxLeaseTime; } public int getLeaseGiveTime() { - return leaseGiveTime; + return leaseGiveTime; } public double getLeaseRenewCost() { - return renewcostperarea; + return renewcostperarea; } public boolean canBuyLand() { - return canBuy; + return canBuy; } public boolean canSellLand() { - return canSell; + return canSell; } public int getMaxRents() { - return maxRents; + return maxRents; } public int getMaxRentDays() { - return MaxRentDays; + return MaxRentDays; } public int getMaxRentables() { - return maxRentables; + return maxRentables; } public boolean buyLandIgnoreLimits() { - return buyIgnoreLimits; + return buyIgnoreLimits; } public boolean hasUnstuckAccess() { - return unstuck; + return unstuck; } public boolean hasKickAccess() { - return kick; + return kick; } public int getMaxPhysicalPerResidence() { - return maxPhysical; + return maxPhysical; } public Set> getDefaultResidenceFlags() { - return residenceDefaultFlags.entrySet(); + return residenceDefaultFlags.entrySet(); } public Set> getDefaultCreatorFlags() { - return creatorDefaultFlags.entrySet(); + return creatorDefaultFlags.entrySet(); } // public Set> getDefaultRentedFlags() { @@ -467,20 +467,20 @@ public Set> getDefaultCreatorFlags() { // } public Set>> getDefaultGroupFlags() { - return groupDefaultFlags.entrySet(); + return groupDefaultFlags.entrySet(); } public boolean canCreateResidences() { - return cancreate; + return cancreate; } public boolean hasFlagAccess(Flags flag) { - return flagPerms.has(flag, false); + return flagPerms.has(flag, false); } @Deprecated public boolean hasFlagAccess(String flag) { - return flagPerms.has(flag, false); + return flagPerms.has(flag, false); } // public boolean inLimits(CuboidArea area) { @@ -498,80 +498,86 @@ public boolean hasFlagAccess(String flag) { // } public boolean selectCommandAccess() { - return selectCommandAccess; + return selectCommandAccess; } public boolean itemListAccess() { - return itemListAccess; + return itemListAccess; } public void printLimits(CommandSender player, OfflinePlayer target, boolean resadmin) { - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(target.getName()); - rPlayer.getGroup(true); - PermissionGroup group = rPlayer.getGroup(); - - Residence.getInstance().msg(player, lm.General_Separator); - Residence.getInstance().msg(player, lm.Limits_PGroup, Residence.getInstance().getPermissionManager().getPermissionsGroup(target.getName(), - target.isOnline() ? Bukkit.getPlayer(target.getName()).getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld())); - Residence.getInstance().msg(player, lm.Limits_RGroup, group.getGroupName()); - if (target.isOnline() && resadmin) - Residence.getInstance().msg(player, lm.Limits_Admin, Residence.getInstance().getPermissionManager().isResidenceAdmin(player)); - Residence.getInstance().msg(player, lm.Limits_CanCreate, group.canCreateResidences()); - Residence.getInstance().msg(player, lm.Limits_MaxRes, rPlayer.getMaxRes()); - Residence.getInstance().msg(player, lm.Limits_NumberOwn, rPlayer.getResAmount()); - Residence.getInstance().msg(player, lm.Limits_MaxEW, group.xmin + "-" + group.xmax); - Residence.getInstance().msg(player, lm.Limits_MaxNS, group.zmin + "-" + group.zmax); - Residence.getInstance().msg(player, lm.Limits_MaxUD, group.ymin + "-" + group.ymax); - Residence.getInstance().msg(player, lm.Limits_MinMax, group.minHeight, group.maxHeight); - Residence.getInstance().msg(player, lm.Limits_MaxSubzones, rPlayer.getMaxSubzones()); - Residence.getInstance().msg(player, lm.Limits_MaxSubDepth, rPlayer.getMaxSubzoneDepth()); - Residence.getInstance().msg(player, lm.Limits_MaxRents, rPlayer.getMaxRents() + (getMaxRentDays() != -1 ? Residence.getInstance().msg(lm.Limits_MaxRentDays, getMaxRentDays()) - : "")); - Residence.getInstance().msg(player, lm.Limits_EnterLeave, group.messageperms); - if (Residence.getInstance().getEconomyManager() != null) { - Residence.getInstance().msg(player, lm.Limits_Cost, group.costperarea); - Residence.getInstance().msg(player, lm.Limits_Sell, group.sellperarea); - } - Residence.getInstance().msg(player, lm.Limits_Flag, group.flagPerms.listFlags()); - if (Residence.getInstance().getConfigManager().useLeases()) { - Residence.getInstance().msg(player, lm.Limits_MaxDays, group.maxLeaseTime); - Residence.getInstance().msg(player, lm.Limits_LeaseTime, group.leaseGiveTime); - Residence.getInstance().msg(player, lm.Limits_RenewCost, group.renewcostperarea); - } - Residence.getInstance().msg(player, lm.General_Separator); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(target.getName()); + rPlayer.getGroup(true); + PermissionGroup group = rPlayer.getGroup(); + + Residence.getInstance().msg(player, lm.General_Separator); + Residence.getInstance().msg(player, lm.Limits_PGroup, Residence.getInstance().getPermissionManager().getPermissionsGroup(target.getName(), + target.isOnline() ? Bukkit.getPlayer(target.getName()).getWorld().getName() : Residence.getInstance().getConfigManager().getDefaultWorld())); + Residence.getInstance().msg(player, lm.Limits_RGroup, group.getGroupName()); + if (target.isOnline() && resadmin) + Residence.getInstance().msg(player, lm.Limits_Admin, Residence.getInstance().getPermissionManager().isResidenceAdmin(player)); + Residence.getInstance().msg(player, lm.Limits_CanCreate, group.canCreateResidences()); + Residence.getInstance().msg(player, lm.Limits_MaxRes, rPlayer.getMaxRes()); + Residence.getInstance().msg(player, lm.Limits_NumberOwn, rPlayer.getResAmount()); + Residence.getInstance().msg(player, lm.Limits_MaxEW, group.getMinX() + "-" + rPlayer.getMaxX()); + Residence.getInstance().msg(player, lm.Limits_MaxNS, group.getMinZ() + "-" + rPlayer.getMaxZ()); + Residence.getInstance().msg(player, lm.Limits_MaxUD, group.getMinY() + "-" + group.getMaxY()); + Residence.getInstance().msg(player, lm.Limits_MinMax, group.getMinHeight(), group.getMaxHeight()); + Residence.getInstance().msg(player, lm.Limits_MaxSubzones, rPlayer.getMaxSubzones()); + Residence.getInstance().msg(player, lm.Limits_MaxSubDepth, rPlayer.getMaxSubzoneDepth()); + Residence.getInstance().msg(player, lm.Limits_MaxRents, rPlayer.getMaxRents() + (getMaxRentDays() != -1 ? Residence.getInstance().msg(lm.Limits_MaxRentDays, getMaxRentDays()) + : "")); + Residence.getInstance().msg(player, lm.Limits_EnterLeave, group.messageperms); + if (Residence.getInstance().getEconomyManager() != null) { + Residence.getInstance().msg(player, lm.Limits_Cost, group.costperarea); + Residence.getInstance().msg(player, lm.Limits_Sell, group.sellperarea); + } + Residence.getInstance().msg(player, lm.Limits_Flag, group.flagPerms.listFlags()); + if (Residence.getInstance().getConfigManager().useLeases()) { + Residence.getInstance().msg(player, lm.Limits_MaxDays, group.maxLeaseTime); + Residence.getInstance().msg(player, lm.Limits_LeaseTime, group.leaseGiveTime); + Residence.getInstance().msg(player, lm.Limits_RenewCost, group.renewcostperarea); + } + Residence.getInstance().msg(player, lm.General_Separator); } public double getCostperarea() { - return costperarea; + return costperarea; } public double getSellperarea() { - return sellperarea; + return sellperarea; } + @Deprecated public int getXmin() { - return xmin; + return xmin; } + @Deprecated public int getXmax() { - return xmax; + return xmax; } + @Deprecated public int getZmin() { - return zmin; + return zmin; } + @Deprecated public int getYmin() { - return ymin; + return ymin; } + @Deprecated public int getYmax() { - return ymax; + return ymax; } + @Deprecated public int getZmax() { - return zmax; + return zmax; } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 830c554f4..01743a3c3 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -247,6 +247,8 @@ public enum ResPerm { bypass_itempickup("Allows to bypass itempickup flag"), buy("Allows to buy residence"), sell("Allows to sell residence"), + max_res_maxx_$1("Defines residence size limit on X axis", "number"), + max_res_maxz_$1("Defines residence size limit on X axis", "number"), max_res_unlimited("Defines residence limit as unlimited"), max_res_$1("Defines residence limit", "number"), max_subzones_unlimited("Defines subzone limit as unlimited"), diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 87549975c..7f11fbe27 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -305,16 +305,16 @@ public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin return true; ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); - if (area.getXSize() > group.getMaxX()) { - Residence.getInstance().msg(player, lm.Area_ToBigX, area.getXSize(), group.getMaxX()); + if (area.getXSize() > rPlayer.getMaxX()) { + Residence.getInstance().msg(player, lm.Area_ToBigX, area.getXSize(), rPlayer.getMaxX()); return false; } if (area.getYSize() > group.getMaxY() + (-group.getMinY())) { Residence.getInstance().msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); return false; } - if (area.getZSize() > group.getMaxZ()) { - Residence.getInstance().msg(player, lm.Area_ToBigZ, area.getZSize(), group.getMaxZ()); + if (area.getZSize() > rPlayer.getMaxZ()) { + Residence.getInstance().msg(player, lm.Area_ToBigZ, area.getZSize(), rPlayer.getMaxZ()); return false; } return true; diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index 0d99a5609..68a4e877a 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -46,6 +46,8 @@ public void UpdateSelection(Player player, Location targetLoc) { return; AutoSelector AutoSelector = list.get(player.getUniqueId()); + + ResidencePlayer rplayer = ResidencePlayer.get(player); int Curenttime = (int) (System.currentTimeMillis() - AutoSelector.getTime()) / 1000; @@ -108,7 +110,7 @@ public void UpdateSelection(Player player, Location targetLoc) { PermissionGroup group = AutoSelector.getGroup(); - if (area.getXSize() > group.getMaxX()) { + if (area.getXSize() > rplayer.getMaxX()) { return; } @@ -116,7 +118,7 @@ public void UpdateSelection(Player player, Location targetLoc) { return; } - if (area.getZSize() > group.getMaxZ()) { + if (area.getZSize() > rplayer.getMaxZ()) { return; } From a324089d0651fbaea098820dfdd2cc42bb16377f Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Sep 2022 14:13:23 +0300 Subject: [PATCH 0974/1142] Fix performance issue when checking offline player permission (sandtechnology) --- .../bekvon/bukkit/residence/containers/ResidencePlayer.java | 3 ++- .../bukkit/residence/slimeFun/SlimeFunResidenceModule.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 69653e788..e6fcee8e5 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -319,7 +319,8 @@ private void updatePlayer() { if (this.player == null && ofPlayer == null) ofPlayer = Residence.getInstance().getOfflinePlayer(userName); if (ofPlayer != null) { - this.userName = ofPlayer.getName(); + // Update the userName from cache, avoid reading NBT cost + this.userName = Residence.getInstance().getPlayerName(uuid); this.uuid = ofPlayer.getUniqueId(); return; } diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index a7b69cf7e..2646ddd8d 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -43,7 +43,7 @@ public boolean hasPermission(OfflinePlayer op, Location loc, Interaction action) case INTERACT_BLOCK: ClaimedResidence res = residence.getResidenceManager().getByLoc(loc); if (res != null) { - boolean allow = res.getPermissions().playerHas(new ResidencePlayer(op), Flags.container, false); + boolean allow = res.getPermissions().playerHas(ResidencePlayer.get(op.getUniqueId()), Flags.container, false); if (!allow) residence.msg(op.getPlayer(), lm.Flag_Deny, Flags.container); From 23b0b75eeb19b206ecc8f37e6eb88d7904a5c798 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Sep 2022 16:01:24 +0300 Subject: [PATCH 0975/1142] Using capitalized owner name if possible --- .../bukkit/residence/protection/ResidencePermissions.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 6200cc23d..1185c5045 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -644,18 +644,19 @@ public void setOwner(String newOwner, boolean resetFlags) { if (rPlayer != null) { this.ownerUUID = rPlayer.getUniqueId(); ownerLastKnownName = rPlayer.getName(); + } - if (newOwner.equalsIgnoreCase("Server Land") || newOwner.equalsIgnoreCase(Residence.getInstance().getServerLandName())) { + if (ownerLastKnownName.equalsIgnoreCase("Server Land") || ownerLastKnownName.equalsIgnoreCase(Residence.getInstance().getServerLandName())) { ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());// the UUID for server owned land } else { - UUID playerUUID = Residence.getInstance().getPlayerUUID(newOwner); + UUID playerUUID = Residence.getInstance().getPlayerUUID(ownerLastKnownName); if (playerUUID != null) ownerUUID = playerUUID; else ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it } - Residence.getInstance().getPlayerManager().addResidence(newOwner, residence); + Residence.getInstance().getPlayerManager().addResidence(ownerLastKnownName, residence); if (resetFlags) this.applyDefaultFlags(); } From 5a7bbfe6672060cfc5d08601371170ffa92617b2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Sep 2022 16:04:48 +0300 Subject: [PATCH 0976/1142] Null check for yml file root load --- .../bekvon/bukkit/residence/Residence.java | 2553 +++++++++-------- 1 file changed, 1280 insertions(+), 1273 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 37a6da07c..849e89a51 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -239,19 +239,19 @@ public class Residence extends JavaPlugin { private String prefix = ChatColor.GREEN + "[" + ChatColor.GOLD + "Residence" + ChatColor.GREEN + "]" + ChatColor.GRAY; public boolean isSpigot() { - return spigotPlatform; + return spigotPlatform; } public HashMap getTeleportMap() { - return teleportMap; + return teleportMap; } public List getTeleportDelayMap() { - return teleportDelayMap; + return teleportDelayMap; } public HashMap getRandomTeleportMap() { - return rtMap; + return rtMap; } // API @@ -263,215 +263,215 @@ public HashMap getRandomTeleportMap() { private ChatInterface ChatAPI = null; public ResidencePlayerInterface getPlayerManagerAPI() { - if (PlayerAPI == null) - PlayerAPI = PlayerManager; - return PlayerAPI; + if (PlayerAPI == null) + PlayerAPI = PlayerManager; + return PlayerAPI; } public ResidenceInterface getResidenceManagerAPI() { - if (ResidenceAPI == null) - ResidenceAPI = rmanager; - return ResidenceAPI; + if (ResidenceAPI == null) + ResidenceAPI = rmanager; + return ResidenceAPI; } public Placeholder getPlaceholderAPIManager() { - if (Placeholder == null) - Placeholder = new Placeholder(this); - return Placeholder; + if (Placeholder == null) + Placeholder = new Placeholder(this); + return Placeholder; } public boolean isPlaceholderAPIEnabled() { - return PlaceholderAPIEnabled; + return PlaceholderAPIEnabled; } public MarketRentInterface getMarketRentManagerAPI() { - if (MarketRentAPI == null) - MarketRentAPI = rentmanager; - return MarketRentAPI; + if (MarketRentAPI == null) + MarketRentAPI = rentmanager; + return MarketRentAPI; } public MarketBuyInterface getMarketBuyManagerAPI() { - if (MarketBuyAPI == null) - MarketBuyAPI = tmanager; - return MarketBuyAPI; + if (MarketBuyAPI == null) + MarketBuyAPI = tmanager; + return MarketBuyAPI; } public ChatInterface getResidenceChatAPI() { - if (ChatAPI == null) - ChatAPI = chatmanager; - return ChatAPI; + if (ChatAPI == null) + ChatAPI = chatmanager; + return ChatAPI; } public ResidenceCommandListener getCommandManager() { - if (commandManager == null) - commandManager = new ResidenceCommandListener(this); - return commandManager; + if (commandManager == null) + commandManager = new ResidenceCommandListener(this); + return commandManager; } public ResidenceApi getAPI() { - return API; + return API; } // API end private Runnable doHeals = new Runnable() { - @Override - public void run() { - plistener.doHeals(); - } + @Override + public void run() { + plistener.doHeals(); + } }; private Runnable doFeed = new Runnable() { - @Override - public void run() { - plistener.feed(); - } + @Override + public void run() { + plistener.feed(); + } }; private Runnable DespawnMobs = new Runnable() { - @Override - public void run() { - plistener.DespawnMobs(); - } + @Override + public void run() { + plistener.DespawnMobs(); + } }; private Runnable rentExpire = new Runnable() { - @Override - public void run() { - rentmanager.checkCurrentRents(); - if (getConfigManager().showIntervalMessages()) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Rent Expirations checked!"); - } - } + @Override + public void run() { + rentmanager.checkCurrentRents(); + if (getConfigManager().showIntervalMessages()) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Rent Expirations checked!"); + } + } }; private Runnable leaseExpire = new Runnable() { - @Override - public void run() { - leasemanager.doExpirations(); - if (getConfigManager().showIntervalMessages()) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Lease Expirations checked!"); - } - } + @Override + public void run() { + leasemanager.doExpirations(); + if (getConfigManager().showIntervalMessages()) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Lease Expirations checked!"); + } + } }; private Runnable autoSave = new Runnable() { - @Override - public void run() { - try { - if (initsuccess) { - Bukkit.getScheduler().runTaskAsynchronously(Residence.this, new Runnable() { - @Override - public void run() { - try { - saveYml(); - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } - } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, getPrefix() + " SEVERE SAVE ERROR", ex); - } - } + @Override + public void run() { + try { + if (initsuccess) { + Bukkit.getScheduler().runTaskAsynchronously(Residence.this, new Runnable() { + @Override + public void run() { + try { + saveYml(); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + } catch (Exception ex) { + Logger.getLogger("Minecraft").log(Level.SEVERE, getPrefix() + " SEVERE SAVE ERROR", ex); + } + } }; public void reloadPlugin() { - this.onDisable(); - this.reloadConfig(); - this.onEnable(); + this.onDisable(); + this.reloadConfig(); + this.onEnable(); } @Override public void onDisable() { - server.getScheduler().cancelTask(autosaveBukkitId); - server.getScheduler().cancelTask(healBukkitId); - server.getScheduler().cancelTask(feedBukkitId); - - server.getScheduler().cancelTask(DespawnMobsBukkitId); - - this.getPermissionManager().stopCacheClearScheduler(); - - this.getSelectionManager().onDisable(); - - if (this.metrics != null) - try { - metrics.disable(); - } catch (IOException e) { - e.printStackTrace(); - } - if (getConfigManager().useLeases()) { - server.getScheduler().cancelTask(leaseBukkitId); - } - if (getConfigManager().enabledRentSystem()) { - server.getScheduler().cancelTask(rentBukkitId); - } - - if (getDynManager() != null && getDynManager().getMarkerSet() != null) - getDynManager().getMarkerSet().deleteMarkerSet(); - - if (initsuccess) { - try { - saveYml(); - if (zip != null) - zip.backup(); - } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); - } - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Disabled!"); - } + server.getScheduler().cancelTask(autosaveBukkitId); + server.getScheduler().cancelTask(healBukkitId); + server.getScheduler().cancelTask(feedBukkitId); + + server.getScheduler().cancelTask(DespawnMobsBukkitId); + + this.getPermissionManager().stopCacheClearScheduler(); + + this.getSelectionManager().onDisable(); + + if (this.metrics != null) + try { + metrics.disable(); + } catch (IOException e) { + e.printStackTrace(); + } + if (getConfigManager().useLeases()) { + server.getScheduler().cancelTask(leaseBukkitId); + } + if (getConfigManager().enabledRentSystem()) { + server.getScheduler().cancelTask(rentBukkitId); + } + + if (getDynManager() != null && getDynManager().getMarkerSet() != null) + getDynManager().getMarkerSet().deleteMarkerSet(); + + if (initsuccess) { + try { + saveYml(); + if (zip != null) + zip.backup(); + } catch (Exception ex) { + Logger.getLogger("Minecraft").log(Level.SEVERE, "[Residence] SEVERE SAVE ERROR", ex); + } + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Disabled!"); + } } @Override public void onEnable() { - try { - instance = this; + try { + instance = this; - initsuccess = false; - deleteConfirm = new HashMap(); - resadminToggle = new ArrayList(); - server = this.getServer(); - dataFolder = this.getDataFolder(); + initsuccess = false; + deleteConfirm = new HashMap(); + resadminToggle = new ArrayList(); + server = this.getServer(); + dataFolder = this.getDataFolder(); - ResidenceVersion = this.getDescription().getVersion(); - authlist = this.getDescription().getAuthors(); + ResidenceVersion = this.getDescription().getVersion(); + authlist = this.getDescription().getAuthors(); - cmdFiller = new CommandFiller(); - cmdFiller.fillCommands(); + cmdFiller = new CommandFiller(); + cmdFiller.fillCommands(); - SortingManager = new Sorting(); + SortingManager = new Sorting(); - if (!dataFolder.isDirectory()) { - dataFolder.mkdirs(); - } + if (!dataFolder.isDirectory()) { + dataFolder.mkdirs(); + } - if (!new File(dataFolder, "groups.yml").isFile() && !new File(dataFolder, "flags.yml").isFile() && new File(dataFolder, "config.yml").isFile()) { - this.ConvertFile(); - } + if (!new File(dataFolder, "groups.yml").isFile() && !new File(dataFolder, "flags.yml").isFile() && new File(dataFolder, "config.yml").isFile()) { + this.ConvertFile(); + } - if (!new File(dataFolder, "uuids.yml").isFile()) { - File file = new File(this.getDataFolder(), "uuids.yml"); - file.createNewFile(); - } + if (!new File(dataFolder, "uuids.yml").isFile()) { + File file = new File(this.getDataFolder(), "uuids.yml"); + file.createNewFile(); + } - if (!new File(dataFolder, "flags.yml").isFile()) { - this.writeDefaultFlagsFromJar(); - } - if (!new File(dataFolder, "groups.yml").isFile()) { - this.writeDefaultGroupsFromJar(); - } + if (!new File(dataFolder, "flags.yml").isFile()) { + this.writeDefaultFlagsFromJar(); + } + if (!new File(dataFolder, "groups.yml").isFile()) { + this.writeDefaultGroupsFromJar(); + } - this.getCommand("res").setExecutor(getCommandManager()); - this.getCommand("resadmin").setExecutor(getCommandManager()); - this.getCommand("residence").setExecutor(getCommandManager()); + this.getCommand("res").setExecutor(getCommandManager()); + this.getCommand("resadmin").setExecutor(getCommandManager()); + this.getCommand("residence").setExecutor(getCommandManager()); - this.getCommand("rc").setExecutor(getCommandManager()); - this.getCommand("resreload").setExecutor(getCommandManager()); - this.getCommand("resload").setExecutor(getCommandManager()); + this.getCommand("rc").setExecutor(getCommandManager()); + this.getCommand("resreload").setExecutor(getCommandManager()); + this.getCommand("resload").setExecutor(getCommandManager()); - TabComplete tab = new TabComplete(); - this.getCommand("res").setTabCompleter(tab); - this.getCommand("resadmin").setTabCompleter(tab); - this.getCommand("residence").setTabCompleter(tab); + TabComplete tab = new TabComplete(); + this.getCommand("res").setTabCompleter(tab); + this.getCommand("resadmin").setTabCompleter(tab); + this.getCommand("residence").setTabCompleter(tab); // Residence.getConfigManager().UpdateConfigFile(); @@ -480,514 +480,514 @@ public void onEnable() { // this.getConfig().load("config.yml"); // System.out.println("[Residence] Config Invalid, wrote default..."); // } - String multiworld = getConfigManager().getMultiworldPlugin(); - if (multiworld != null) { - Plugin plugin = server.getPluginManager().getPlugin(multiworld); - if (plugin != null && !plugin.isEnabled()) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Enabling multiworld plugin: " + multiworld); - server.getPluginManager().enablePlugin(plugin); - } - } + String multiworld = getConfigManager().getMultiworldPlugin(); + if (multiworld != null) { + Plugin plugin = server.getPluginManager().getPlugin(multiworld); + if (plugin != null && !plugin.isEnabled()) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Enabling multiworld plugin: " + multiworld); + server.getPluginManager().enablePlugin(plugin); + } + } - getConfigManager().UpdateFlagFile(); + getConfigManager().UpdateFlagFile(); - getFlagUtilManager().load(); + getFlagUtilManager().load(); - try { - Class c = Class.forName("org.bukkit.entity.Player"); - for (Method one : c.getDeclaredMethods()) { - if (one.getName().equalsIgnoreCase("Spigot")) - spigotPlatform = true; - } - } catch (Exception e) { - } + try { + Class c = Class.forName("org.bukkit.entity.Player"); + for (Method one : c.getDeclaredMethods()) { + if (one.getName().equalsIgnoreCase("Spigot")) + spigotPlatform = true; + } + } catch (Exception e) { + } - this.getPermissionManager().startCacheClearScheduler(); + this.getPermissionManager().startCacheClearScheduler(); - imanager = new WorldItemManager(this); - wmanager = new WorldFlagManager(this); + imanager = new WorldItemManager(this); + wmanager = new WorldFlagManager(this); - chatmanager = new ChatManager(); - rentmanager = new RentManager(this); + chatmanager = new ChatManager(); + rentmanager = new RentManager(this); - LocaleManager = new LocaleManager(this); + LocaleManager = new LocaleManager(this); - PlayerManager = new PlayerManager(this); - ShopSignUtilManager = new ShopSignUtil(this); - RandomTpManager = new RandomTp(this); + PlayerManager = new PlayerManager(this); + ShopSignUtilManager = new ShopSignUtil(this); + RandomTpManager = new RandomTp(this); // townManager = new TownManager(this); - InformationPagerManager = new InformationPager(this); - - zip = new ZipLibrary(this); - - Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); - try { - if (lwcp != null) { - try { - ResidenceLWCListener.register(this); - Bukkit.getConsoleSender().sendMessage(this.getPrefix() + " LWC hooked."); - lwc = true; - } catch (Throwable e) { - e.printStackTrace(); - } - } - } catch (Throwable e) { - e.printStackTrace(); - } - - SlimeFun = Bukkit.getPluginManager().getPlugin("Slimefun") != null; - - if (SlimeFun) { - try { - SlimefunManager.register(this); - } catch (Throwable e) { - SlimeFun = false; - e.printStackTrace(); - } - } - - this.getConfigManager().copyOverTranslations(); - - parseHelpEntries(); - - economy = null; - if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Scanning for economy systems..."); - switch (this.getConfigManager().getEconomyType()) { - case CMIEconomy: - this.loadCMIEconomy(); - break; - case Essentials: - this.loadEssentialsEconomy(); - break; - case None: - if (this.getPermissionManager().getPermissionsPlugin() instanceof ResidenceVaultAdapter) { - ResidenceVaultAdapter vault = (ResidenceVaultAdapter) this.getPermissionManager().getPermissionsPlugin(); - if (vault.economyOK()) { - economy = vault; - consoleMessage("Found Vault using economy system: &5" + vault.getEconomyName()); - } - } - if (economy == null) { - this.loadVaultEconomy(); - } - if (economy == null) { - this.loadCMIEconomy(); - } - if (economy == null) { - this.loadEssentialsEconomy(); - } - if (economy == null) { - this.loadRealEconomy(); - } - if (economy == null) { - this.loadIConomy(); - } - break; - case RealEconomy: - this.loadRealEconomy(); - break; - case Vault: - if (this.getPermissionManager().getPermissionsPlugin() instanceof ResidenceVaultAdapter) { - ResidenceVaultAdapter vault = (ResidenceVaultAdapter) this.getPermissionManager().getPermissionsPlugin(); - if (vault.economyOK()) { - economy = vault; - consoleMessage("Found Vault using economy system: &5" + vault.getEconomyName()); - } - } - if (economy == null) { - this.loadVaultEconomy(); - } - break; - case iConomy: - this.loadIConomy(); - break; - default: - break; - } - - if (economy == null) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Unable to find an economy system..."); - economy = new BlackHoleEconomy(); - } - } - - // Only fill if we need to convert player data - if (getConfigManager().isUUIDConvertion()) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading (" + Bukkit.getOfflinePlayers().length + ") player data"); - for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { - if (player == null) - continue; - String name = player.getName(); - if (name == null) - continue; - this.addOfflinePlayerToChache(player); - } - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Player data loaded: " + OfflinePlayerList.size()); - } else { - Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { - @Override - public void run() { - for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { - if (player == null) - continue; - String name = player.getName(); - if (name == null) - continue; - addOfflinePlayerToChache(player); - } - } - }); - } - - rmanager = new ResidenceManager(this); - - leasemanager = new LeaseManager(this); - - tmanager = new TransactionManager(this); - - pmanager = new PermissionListManager(this); - - getLocaleManager().LoadLang(getConfigManager().getLanguage()); - getLM().LanguageReload(); - - if (firstenable) { - if (!this.isEnabled()) { - return; - } - - File f = new File(getDataFolder(), "flags.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - for (String oneFlag : conf.getStringList("Global.GroupedFlags." + padd.groupedFlag)) { - Flags flag = Flags.getFlag(oneFlag); - if (flag != null) { - flag.addGroup(padd.groupedFlag); - } - FlagPermissions.addFlagToFlagGroup(padd.groupedFlag, oneFlag); - } - - } - - try { - this.loadYml(); - } catch (Exception e) { - this.getLogger().log(Level.SEVERE, "Unable to load save file", e); - throw e; - } - - signmanager = new SignUtil(this); - getSignUtil().LoadSigns(); - - if (getConfigManager().isUseResidenceFileClean()) - (new FileCleanUp(this)).cleanOldResidence(); - - if (firstenable) { - if (!this.isEnabled()) { - return; - } - FlagPermissions.initValidFlags(); - - if (smanager == null) - setWorldEdit(); - setWorldGuard(); - - setKingdoms(); - - PluginManager pm = getServer().getPluginManager(); - - blistener = new ResidenceBlockListener(this); - plistener = new ResidencePlayerListener(this); + InformationPagerManager = new InformationPager(this); + + zip = new ZipLibrary(this); + + Plugin lwcp = Bukkit.getPluginManager().getPlugin("LWC"); + try { + if (lwcp != null) { + try { + ResidenceLWCListener.register(this); + Bukkit.getConsoleSender().sendMessage(this.getPrefix() + " LWC hooked."); + lwc = true; + } catch (Throwable e) { + e.printStackTrace(); + } + } + } catch (Throwable e) { + e.printStackTrace(); + } + + SlimeFun = Bukkit.getPluginManager().getPlugin("Slimefun") != null; + + if (SlimeFun) { + try { + SlimefunManager.register(this); + } catch (Throwable e) { + SlimeFun = false; + e.printStackTrace(); + } + } + + this.getConfigManager().copyOverTranslations(); + + parseHelpEntries(); + + economy = null; + if (this.getConfig().getBoolean("Global.EnableEconomy", false)) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Scanning for economy systems..."); + switch (this.getConfigManager().getEconomyType()) { + case CMIEconomy: + this.loadCMIEconomy(); + break; + case Essentials: + this.loadEssentialsEconomy(); + break; + case None: + if (this.getPermissionManager().getPermissionsPlugin() instanceof ResidenceVaultAdapter) { + ResidenceVaultAdapter vault = (ResidenceVaultAdapter) this.getPermissionManager().getPermissionsPlugin(); + if (vault.economyOK()) { + economy = vault; + consoleMessage("Found Vault using economy system: &5" + vault.getEconomyName()); + } + } + if (economy == null) { + this.loadVaultEconomy(); + } + if (economy == null) { + this.loadCMIEconomy(); + } + if (economy == null) { + this.loadEssentialsEconomy(); + } + if (economy == null) { + this.loadRealEconomy(); + } + if (economy == null) { + this.loadIConomy(); + } + break; + case RealEconomy: + this.loadRealEconomy(); + break; + case Vault: + if (this.getPermissionManager().getPermissionsPlugin() instanceof ResidenceVaultAdapter) { + ResidenceVaultAdapter vault = (ResidenceVaultAdapter) this.getPermissionManager().getPermissionsPlugin(); + if (vault.economyOK()) { + economy = vault; + consoleMessage("Found Vault using economy system: &5" + vault.getEconomyName()); + } + } + if (economy == null) { + this.loadVaultEconomy(); + } + break; + case iConomy: + this.loadIConomy(); + break; + default: + break; + } + + if (economy == null) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Unable to find an economy system..."); + economy = new BlackHoleEconomy(); + } + } + + // Only fill if we need to convert player data + if (getConfigManager().isUUIDConvertion()) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading (" + Bukkit.getOfflinePlayers().length + ") player data"); + for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { + if (player == null) + continue; + String name = player.getName(); + if (name == null) + continue; + this.addOfflinePlayerToChache(player); + } + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Player data loaded: " + OfflinePlayerList.size()); + } else { + Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { + @Override + public void run() { + for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { + if (player == null) + continue; + String name = player.getName(); + if (name == null) + continue; + addOfflinePlayerToChache(player); + } + } + }); + } + + rmanager = new ResidenceManager(this); + + leasemanager = new LeaseManager(this); + + tmanager = new TransactionManager(this); + + pmanager = new PermissionListManager(this); + + getLocaleManager().LoadLang(getConfigManager().getLanguage()); + getLM().LanguageReload(); + + if (firstenable) { + if (!this.isEnabled()) { + return; + } + + File f = new File(getDataFolder(), "flags.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + for (String oneFlag : conf.getStringList("Global.GroupedFlags." + padd.groupedFlag)) { + Flags flag = Flags.getFlag(oneFlag); + if (flag != null) { + flag.addGroup(padd.groupedFlag); + } + FlagPermissions.addFlagToFlagGroup(padd.groupedFlag, oneFlag); + } + + } + + try { + this.loadYml(); + } catch (Exception e) { + this.getLogger().log(Level.SEVERE, "Unable to load save file", e); + throw e; + } + + signmanager = new SignUtil(this); + getSignUtil().LoadSigns(); + + if (getConfigManager().isUseResidenceFileClean()) + (new FileCleanUp(this)).cleanOldResidence(); + + if (firstenable) { + if (!this.isEnabled()) { + return; + } + FlagPermissions.initValidFlags(); + + if (smanager == null) + setWorldEdit(); + setWorldGuard(); + + setKingdoms(); + + PluginManager pm = getServer().getPluginManager(); + + blistener = new ResidenceBlockListener(this); + plistener = new ResidencePlayerListener(this); if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) pm.registerEvents(new ResidencePlayerListener1_9(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_12_R1)) pm.registerEvents(new ResidencePlayerListener1_12(this), this); - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) - pm.registerEvents(new ResidencePlayerListener1_13(this), this); - if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) - pm.registerEvents(new ResidencePlayerListener1_14(this), this); - if (Version.isCurrentEqualOrHigher(Version.v1_15_R1)) - pm.registerEvents(new ResidencePlayerListener1_15(this), this); - if (Version.isCurrentEqualOrHigher(Version.v1_16_R1)) - pm.registerEvents(new ResidencePlayerListener1_16(this), this); - if (Version.isCurrentEqualOrHigher(Version.v1_17_R1)) - pm.registerEvents(new ResidencePlayerListener1_17(this), this); - elistener = new ResidenceEntityListener(this); - flistener = new ResidenceFixesListener(); - slistener = new ResidenceRaidListener(); - - shlistener = new ShopListener(this); - spigotlistener = new SpigotListener(); - - pm.registerEvents(blistener, this); - pm.registerEvents(plistener, this); - pm.registerEvents(elistener, this); - pm.registerEvents(flistener, this); - pm.registerEvents(shlistener, this); - pm.registerEvents(slistener, this); - - // 1.8 event - if (Version.isCurrentEqualOrHigher(Version.v1_8_R1)) - pm.registerEvents(new v1_8Events(), this); - - // 1.9 event - if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) - pm.registerEvents(new v1_9Events(), this); - - // 1.10 event - if (Version.isCurrentEqualOrHigher(Version.v1_10_R1)) - pm.registerEvents(new v1_10Events(), this); - - // 1.13 event - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) - pm.registerEvents(new v1_13Events(this), this); - - firstenable = false; - } else { - plistener.reload(); - } - - AutoSelectionManager = new AutoSelection(this); - - try { - Class.forName("org.bukkit.event.player.PlayerItemDamageEvent"); - getServer().getPluginManager().registerEvents(spigotlistener, this); - } catch (Exception e) { - } - - if (setupPlaceHolderAPI()) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " PlaceholderAPI was found - Enabling capabilities."); - PlaceholderAPIEnabled = true; - } - - if (getServer().getPluginManager().getPlugin("CrackShot") != null) - getServer().getPluginManager().registerEvents(new CrackShot(this), this); - - try { - // DynMap - Plugin dynmap = Bukkit.getPluginManager().getPlugin("dynmap"); - if (dynmap != null && getConfigManager().DynMapUse) { - DynManager = new DynMapManager(this); - getServer().getPluginManager().registerEvents(new DynMapListeners(this), this); - getDynManager().api = (DynmapAPI) dynmap; - getDynManager().activate(); - } - } catch (Throwable e) { - e.printStackTrace(); - } - - try { - // Pl3xMap - Plugin pl3xmap = Bukkit.getPluginManager().getPlugin("Pl3xMap"); - if (pl3xmap != null && getConfigManager().Pl3xMapUse) { - Pl3xManager = new Pl3xMapManager(this); - getServer().getPluginManager().registerEvents(new Pl3xMapListeners(this), this); - getPl3xManager().api = net.pl3x.map.api.Pl3xMapProvider.get(); - getPl3xManager().activate(); - } - } catch (Throwable e) { - e.printStackTrace(); - } - - int autosaveInt = getConfigManager().getAutoSaveInterval(); - if (autosaveInt < 1) { - autosaveInt = 1; - } - autosaveInt = autosaveInt * 60 * 20; - autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); - healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, getConfigManager().getHealInterval() * 20); - feedBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doFeed, 20, getConfigManager().getFeedInterval() * 20); - if (getConfigManager().AutoMobRemoval()) - DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * getConfigManager().AutoMobRemovalInterval(), 20 - * getConfigManager().AutoMobRemovalInterval()); - - if (getConfigManager().useLeases()) { - int leaseInterval = getConfigManager().getLeaseCheckInterval(); - if (leaseInterval < 1) { - leaseInterval = 1; - } - leaseInterval = leaseInterval * 60 * 20; - leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval); - } - if (getConfigManager().enabledRentSystem()) { - int rentint = getConfigManager().getRentCheckInterval(); - if (rentint < 1) { - rentint = 1; - } - rentint = rentint * 60 * 20; - rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); - } - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (getPermissionManager().isResidenceAdmin(player)) { - turnResAdminOn(player); - } - } - try { - metrics = new Metrics(this); - metrics.start(); - } catch (IOException e) { - // Failed to submit the stats :-( - } - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Enabled! Version " + this.getDescription().getVersion() + " by Zrips"); - initsuccess = true; - - } catch (Exception ex) { - initsuccess = false; - getServer().getPluginManager().disablePlugin(this); - Bukkit.getConsoleSender().sendMessage(getPrefix() + " - FAILED INITIALIZATION! DISABLED! ERROR:"); - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - Bukkit.getServer().shutdown(); - } - - getShopSignUtilManager().LoadShopVotes(); - getShopSignUtilManager().LoadSigns(); - getShopSignUtilManager().BoardUpdate(); - - CMIVersionChecker.VersionCheck(null, 11480, this.getDescription()); - fullyLoaded = true; + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + pm.registerEvents(new ResidencePlayerListener1_13(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) + pm.registerEvents(new ResidencePlayerListener1_14(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_15_R1)) + pm.registerEvents(new ResidencePlayerListener1_15(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_16_R1)) + pm.registerEvents(new ResidencePlayerListener1_16(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_17_R1)) + pm.registerEvents(new ResidencePlayerListener1_17(this), this); + elistener = new ResidenceEntityListener(this); + flistener = new ResidenceFixesListener(); + slistener = new ResidenceRaidListener(); + + shlistener = new ShopListener(this); + spigotlistener = new SpigotListener(); + + pm.registerEvents(blistener, this); + pm.registerEvents(plistener, this); + pm.registerEvents(elistener, this); + pm.registerEvents(flistener, this); + pm.registerEvents(shlistener, this); + pm.registerEvents(slistener, this); + + // 1.8 event + if (Version.isCurrentEqualOrHigher(Version.v1_8_R1)) + pm.registerEvents(new v1_8Events(), this); + + // 1.9 event + if (Version.isCurrentEqualOrHigher(Version.v1_9_R1)) + pm.registerEvents(new v1_9Events(), this); + + // 1.10 event + if (Version.isCurrentEqualOrHigher(Version.v1_10_R1)) + pm.registerEvents(new v1_10Events(), this); + + // 1.13 event + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + pm.registerEvents(new v1_13Events(this), this); + + firstenable = false; + } else { + plistener.reload(); + } + + AutoSelectionManager = new AutoSelection(this); + + try { + Class.forName("org.bukkit.event.player.PlayerItemDamageEvent"); + getServer().getPluginManager().registerEvents(spigotlistener, this); + } catch (Exception e) { + } + + if (setupPlaceHolderAPI()) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " PlaceholderAPI was found - Enabling capabilities."); + PlaceholderAPIEnabled = true; + } + + if (getServer().getPluginManager().getPlugin("CrackShot") != null) + getServer().getPluginManager().registerEvents(new CrackShot(this), this); + + try { + // DynMap + Plugin dynmap = Bukkit.getPluginManager().getPlugin("dynmap"); + if (dynmap != null && getConfigManager().DynMapUse) { + DynManager = new DynMapManager(this); + getServer().getPluginManager().registerEvents(new DynMapListeners(this), this); + getDynManager().api = (DynmapAPI) dynmap; + getDynManager().activate(); + } + } catch (Throwable e) { + e.printStackTrace(); + } + + try { + // Pl3xMap + Plugin pl3xmap = Bukkit.getPluginManager().getPlugin("Pl3xMap"); + if (pl3xmap != null && getConfigManager().Pl3xMapUse) { + Pl3xManager = new Pl3xMapManager(this); + getServer().getPluginManager().registerEvents(new Pl3xMapListeners(this), this); + getPl3xManager().api = net.pl3x.map.api.Pl3xMapProvider.get(); + getPl3xManager().activate(); + } + } catch (Throwable e) { + e.printStackTrace(); + } + + int autosaveInt = getConfigManager().getAutoSaveInterval(); + if (autosaveInt < 1) { + autosaveInt = 1; + } + autosaveInt = autosaveInt * 60 * 20; + autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); + healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, getConfigManager().getHealInterval() * 20); + feedBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doFeed, 20, getConfigManager().getFeedInterval() * 20); + if (getConfigManager().AutoMobRemoval()) + DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * getConfigManager().AutoMobRemovalInterval(), 20 + * getConfigManager().AutoMobRemovalInterval()); + + if (getConfigManager().useLeases()) { + int leaseInterval = getConfigManager().getLeaseCheckInterval(); + if (leaseInterval < 1) { + leaseInterval = 1; + } + leaseInterval = leaseInterval * 60 * 20; + leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval); + } + if (getConfigManager().enabledRentSystem()) { + int rentint = getConfigManager().getRentCheckInterval(); + if (rentint < 1) { + rentint = 1; + } + rentint = rentint * 60 * 20; + rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); + } + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (getPermissionManager().isResidenceAdmin(player)) { + turnResAdminOn(player); + } + } + try { + metrics = new Metrics(this); + metrics.start(); + } catch (IOException e) { + // Failed to submit the stats :-( + } + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Enabled! Version " + this.getDescription().getVersion() + " by Zrips"); + initsuccess = true; + + } catch (Exception ex) { + initsuccess = false; + getServer().getPluginManager().disablePlugin(this); + Bukkit.getConsoleSender().sendMessage(getPrefix() + " - FAILED INITIALIZATION! DISABLED! ERROR:"); + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + Bukkit.getServer().shutdown(); + } + + getShopSignUtilManager().LoadShopVotes(); + getShopSignUtilManager().LoadSigns(); + getShopSignUtilManager().BoardUpdate(); + + CMIVersionChecker.VersionCheck(null, 11480, this.getDescription()); + fullyLoaded = true; } public void parseHelpEntries() { - try { - File langFile = new File(new File(dataFolder, "Language"), getConfigManager().getLanguage() + ".yml"); - - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - - if (langFile.isFile()) { - FileConfiguration langconfig = new YamlConfiguration(); - langconfig.load(in); - helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - } else { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Language file does not exist..."); - } - if (in != null) - in.close(); - } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Failed to load language file: " + getConfigManager().getLanguage() - + ".yml setting to default - English"); - - File langFile = new File(new File(dataFolder, "Language"), "English.yml"); - - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - - try { - if (langFile.isFile()) { - FileConfiguration langconfig = new YamlConfiguration(); - langconfig.load(in); - helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); - } else { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Language file does not exist..."); - } - } catch (Throwable e) { - - } finally { - if (in != null) - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } + try { + File langFile = new File(new File(dataFolder, "Language"), getConfigManager().getLanguage() + ".yml"); + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + if (langFile.isFile()) { + FileConfiguration langconfig = new YamlConfiguration(); + langconfig.load(in); + helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); + } else { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Language file does not exist..."); + } + if (in != null) + in.close(); + } catch (Exception ex) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Failed to load language file: " + getConfigManager().getLanguage() + + ".yml setting to default - English"); + + File langFile = new File(new File(dataFolder, "Language"), "English.yml"); + + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + + try { + if (langFile.isFile()) { + FileConfiguration langconfig = new YamlConfiguration(); + langconfig.load(in); + helppages = HelpEntry.parseHelp(langconfig, "CommandHelp"); + } else { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Language file does not exist..."); + } + } catch (Throwable e) { + + } finally { + if (in != null) + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } } private boolean setupPlaceHolderAPI() { - if (!getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) - return false; - return new PlaceholderAPIHook(this).register(); + if (!getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) + return false; + return new PlaceholderAPIHook(this).register(); } public SignUtil getSignUtil() { - return signmanager; + return signmanager; } public void consoleMessage(String message) { - Bukkit.getConsoleSender().sendMessage(CMIChatColor.translate(getPrefix() + " " + message)); + Bukkit.getConsoleSender().sendMessage(CMIChatColor.translate(getPrefix() + " " + message)); } public boolean validName(String name) { - if (name.contains(":") || name.contains(".") || name.contains("|")) { - return false; - } - if (getConfigManager().getResidenceNameRegex() == null) { - return true; - } - String namecheck = name.replaceAll(getConfigManager().getResidenceNameRegex(), ""); - return name.equals(namecheck); + if (name.contains(":") || name.contains(".") || name.contains("|")) { + return false; + } + if (getConfigManager().getResidenceNameRegex() == null) { + return true; + } + String namecheck = name.replaceAll(getConfigManager().getResidenceNameRegex(), ""); + return name.equals(namecheck); } private void setWorldEdit() { - try { - Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); - if (plugin != null) { - this.wep = (com.sk89q.worldedit.bukkit.WorldEditPlugin) plugin; - try { - Class.forName("com.sk89q.worldedit.bukkit.selections.Selection"); - smanager = new WorldEditSelectionManager(server, this); - if (wep != null) - SchematicManager = new SchematicsManager(this); - } catch (ClassNotFoundException e) { - smanager = new WorldEdit7SelectionManager(server, this); - if (wep != null) - SchematicManager = new Schematics7Manager(this); - } - if (smanager == null) - smanager = new SelectionManager(server, this); - if (this.getWorldEdit().getConfig().isInt("wand-item")) - wepid = CMIMaterial.get(this.getWorldEdit().getConfig().getInt("wand-item")); - else - wepid = CMIMaterial.get((String) this.getWorldEdit().getConfig().get("wand-item")); - - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit " + this.getWorldEdit().getDescription().getVersion()); - } else { - smanager = new SelectionManager(server, this); - } - } catch (Exception | Error e) { - e.printStackTrace(); - } + try { + Plugin plugin = server.getPluginManager().getPlugin("WorldEdit"); + if (plugin != null) { + this.wep = (com.sk89q.worldedit.bukkit.WorldEditPlugin) plugin; + try { + Class.forName("com.sk89q.worldedit.bukkit.selections.Selection"); + smanager = new WorldEditSelectionManager(server, this); + if (wep != null) + SchematicManager = new SchematicsManager(this); + } catch (ClassNotFoundException e) { + smanager = new WorldEdit7SelectionManager(server, this); + if (wep != null) + SchematicManager = new Schematics7Manager(this); + } + if (smanager == null) + smanager = new SelectionManager(server, this); + if (this.getWorldEdit().getConfig().isInt("wand-item")) + wepid = CMIMaterial.get(this.getWorldEdit().getConfig().getInt("wand-item")); + else + wepid = CMIMaterial.get((String) this.getWorldEdit().getConfig().get("wand-item")); + + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldEdit " + this.getWorldEdit().getDescription().getVersion()); + } else { + smanager = new SelectionManager(server, this); + } + } catch (Exception | Error e) { + e.printStackTrace(); + } } private GameManagement kingdomsmanager = null; private void setKingdoms() { - if (Bukkit.getPluginManager().getPlugin("Kingdoms") != null) { - try { - kingdomsmanager = Kingdoms.getManagers(); - } catch (Throwable e) { - this.consoleMessage("Failed to recognize Kingdoms plugin. Compatability disabled"); - } - } + if (Bukkit.getPluginManager().getPlugin("Kingdoms") != null) { + try { + kingdomsmanager = Kingdoms.getManagers(); + } catch (Throwable e) { + this.consoleMessage("Failed to recognize Kingdoms plugin. Compatability disabled"); + } + } } public GameManagement getKingdomsManager() { - return kingdomsmanager; + return kingdomsmanager; } private void setWorldGuard() { - Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); - if (wgplugin != null) { - wg = (com.sk89q.worldguard.bukkit.WorldGuardPlugin) wgplugin; - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldGuard " + wg.getDescription().getVersion()); - } + Plugin wgplugin = server.getPluginManager().getPlugin("WorldGuard"); + if (wgplugin != null) { + wg = (com.sk89q.worldguard.bukkit.WorldGuardPlugin) wgplugin; + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Found WorldGuard " + wg.getDescription().getVersion()); + } } public Residence getPlugin() { - return this; + return this; } // public LWC getLwc() { @@ -995,485 +995,492 @@ public Residence getPlugin() { // } public File getDataLocation() { - return dataFolder; + return dataFolder; } public ShopSignUtil getShopSignUtilManager() { - if (ShopSignUtilManager == null) - ShopSignUtilManager = new ShopSignUtil(this); - return ShopSignUtilManager; + if (ShopSignUtilManager == null) + ShopSignUtilManager = new ShopSignUtil(this); + return ShopSignUtilManager; } public CommandFiller getCommandFiller() { - if (cmdFiller == null) { - cmdFiller = new CommandFiller(); - cmdFiller.fillCommands(); - } - return cmdFiller; + if (cmdFiller == null) { + cmdFiller = new CommandFiller(); + cmdFiller.fillCommands(); + } + return cmdFiller; } public ResidenceManager getResidenceManager() { - return rmanager; + return rmanager; } public SelectionManager getSelectionManager() { - if (smanager == null) - setWorldEdit(); - return smanager; + if (smanager == null) + setWorldEdit(); + return smanager; } public FlagUtil getFlagUtilManager() { - if (FlagUtilManager == null) - FlagUtilManager = new FlagUtil(this); - return FlagUtilManager; + if (FlagUtilManager == null) + FlagUtilManager = new FlagUtil(this); + return FlagUtilManager; } public PermissionManager getPermissionManager() { - if (gmanager == null) - gmanager = new PermissionManager(this); - return gmanager; + if (gmanager == null) + gmanager = new PermissionManager(this); + return gmanager; } public PermissionListManager getPermissionListManager() { - return pmanager; + return pmanager; } public DynMapManager getDynManager() { - return DynManager; + return DynManager; } public Pl3xMapManager getPl3xManager() { - return Pl3xManager; + return Pl3xManager; } public WESchematicManager getSchematicManager() { - return SchematicManager; + return SchematicManager; } public AutoSelection getAutoSelectionManager() { - return AutoSelectionManager; + return AutoSelectionManager; } public Sorting getSortingManager() { - return SortingManager; + return SortingManager; } public RandomTp getRandomTpManager() { - return RandomTpManager; + return RandomTpManager; } public EconomyInterface getEconomyManager() { - return economy; + return economy; } public Server getServ() { - return server; + return server; } public LeaseManager getLeaseManager() { - return leasemanager; + return leasemanager; } public PlayerManager getPlayerManager() { - return PlayerManager; + return PlayerManager; } public HelpEntry getHelpPages() { - return helppages; + return helppages; } @Deprecated public void setConfigManager(ConfigManager cm) { - configManager = cm; + configManager = cm; } public ConfigManager getConfigManager() { - if (configManager == null) - configManager = new ConfigManager(this); - return configManager; + if (configManager == null) + configManager = new ConfigManager(this); + return configManager; } public TransactionManager getTransactionManager() { - return tmanager; + return tmanager; } public WorldItemManager getItemManager() { - return imanager; + return imanager; } public WorldFlagManager getWorldFlags() { - return wmanager; + return wmanager; } public RentManager getRentManager() { - return rentmanager; + return rentmanager; } public LocaleManager getLocaleManager() { - return LocaleManager; + return LocaleManager; } public Language getLM() { - if (newLanguageManager == null) { - newLanguageManager = new Language(this); - newLanguageManager.LanguageReload(); - } - return newLanguageManager; + if (newLanguageManager == null) { + newLanguageManager = new Language(this); + newLanguageManager.LanguageReload(); + } + return newLanguageManager; } public ResidencePlayerListener getPlayerListener() { - return plistener; + return plistener; } public ResidenceBlockListener getBlockListener() { - return blistener; + return blistener; } public ResidenceEntityListener getEntityListener() { - return elistener; + return elistener; } public ChatManager getChatManager() { - return chatmanager; + return chatmanager; } public String getResidenceVersion() { - return ResidenceVersion; + return ResidenceVersion; } public List getAuthors() { - return authlist; + return authlist; } public FlagPermissions getPermsByLoc(Location loc) { - ClaimedResidence res = rmanager.getByLoc(loc); - if (res != null) { - return res.getPermissions(); - } - return wmanager.getPerms(loc.getWorld().getName()); + ClaimedResidence res = rmanager.getByLoc(loc); + if (res != null) { + return res.getPermissions(); + } + return wmanager.getPerms(loc.getWorld().getName()); } public FlagPermissions getPermsByLocForPlayer(Location loc, Player player) { - ClaimedResidence res = rmanager.getByLoc(loc); - if (res != null) { - return res.getPermissions(); - } - if (player != null) - return wmanager.getPerms(player); + ClaimedResidence res = rmanager.getByLoc(loc); + if (res != null) { + return res.getPermissions(); + } + if (player != null) + return wmanager.getPerms(player); - return wmanager.getPerms(loc.getWorld().getName()); + return wmanager.getPerms(loc.getWorld().getName()); } private void loadIConomy() { - Plugin p = getServer().getPluginManager().getPlugin("iConomy"); - if (p != null) { - if (p.getDescription().getVersion().startsWith("6")) { - economy = new IConomy6Adapter((com.iCo6.iConomy) p); - } else { - consoleMessage("UNKNOWN iConomy version!"); - return; - } - consoleMessage("Successfully linked with &5iConomy"); - consoleMessage("Version: " + p.getDescription().getVersion()); - } else { - consoleMessage("iConomy NOT found!"); - } + Plugin p = getServer().getPluginManager().getPlugin("iConomy"); + if (p != null) { + if (p.getDescription().getVersion().startsWith("6")) { + economy = new IConomy6Adapter((com.iCo6.iConomy) p); + } else { + consoleMessage("UNKNOWN iConomy version!"); + return; + } + consoleMessage("Successfully linked with &5iConomy"); + consoleMessage("Version: " + p.getDescription().getVersion()); + } else { + consoleMessage("iConomy NOT found!"); + } } private void loadEssentialsEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("Essentials"); - if (p != null) { - economy = new EssentialsEcoAdapter((Essentials) p); - consoleMessage("Successfully linked with &5Essentials Economy"); - } else { - consoleMessage("Essentials Economy NOT found!"); - } + Plugin p = getServer().getPluginManager().getPlugin("Essentials"); + if (p != null) { + economy = new EssentialsEcoAdapter((Essentials) p); + consoleMessage("Successfully linked with &5Essentials Economy"); + } else { + consoleMessage("Essentials Economy NOT found!"); + } } private void loadCMIEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("CMI"); - if (p != null) { - economy = new CMIEconomy(); - consoleMessage("Successfully linked with &5CMIEconomy"); - } else { - consoleMessage("CMIEconomy NOT found!"); - } + Plugin p = getServer().getPluginManager().getPlugin("CMI"); + if (p != null) { + economy = new CMIEconomy(); + consoleMessage("Successfully linked with &5CMIEconomy"); + } else { + consoleMessage("CMIEconomy NOT found!"); + } } private void loadRealEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); - if (p != null) { - economy = new RealShopEconomy(new RealEconomy((RealPlugin) p)); - consoleMessage("Successfully linked with &5RealShop Economy"); - } else { - consoleMessage("RealShop Economy NOT found!"); - } + Plugin p = getServer().getPluginManager().getPlugin("RealPlugin"); + if (p != null) { + economy = new RealShopEconomy(new RealEconomy((RealPlugin) p)); + consoleMessage("Successfully linked with &5RealShop Economy"); + } else { + consoleMessage("RealShop Economy NOT found!"); + } } private void loadVaultEconomy() { - Plugin p = getServer().getPluginManager().getPlugin("Vault"); - if (p != null) { - ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); - if (vault.economyOK()) { - consoleMessage("Found Vault using economy: &5" + vault.getEconomyName()); - economy = vault; - } else { - consoleMessage("Found Vault, but Vault reported no usable economy system..."); - } - } else { - consoleMessage("Vault NOT found!"); - } + Plugin p = getServer().getPluginManager().getPlugin("Vault"); + if (p != null) { + ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer()); + if (vault.economyOK()) { + consoleMessage("Found Vault using economy: &5" + vault.getEconomyName()); + economy = vault; + } else { + consoleMessage("Found Vault, but Vault reported no usable economy system..."); + } + } else { + consoleMessage("Vault NOT found!"); + } } public boolean isResAdminOn(CommandSender sender) { - if (sender instanceof Player) - return isResAdminOn((Player) sender); - return true; + if (sender instanceof Player) + return isResAdminOn((Player) sender); + return true; } public boolean isResAdminOn(Player player) { - if (player == null) - return true; - return resadminToggle.contains(player.getName()); + if (player == null) + return true; + return resadminToggle.contains(player.getName()); } public void turnResAdminOn(Player player) { - resadminToggle.add(player.getName()); + resadminToggle.add(player.getName()); } public boolean isResAdminOn(String player) { - return resadminToggle.contains(player); + return resadminToggle.contains(player); } private void saveYml() throws IOException { - File saveFolder = new File(dataFolder, "Save"); - File worldFolder = new File(saveFolder, "Worlds"); - if (!worldFolder.isDirectory()) - worldFolder.mkdirs(); - YMLSaveHelper yml; - Map save = rmanager.save(); - for (Entry entry : save.entrySet()) { - File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); - File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - World world = server.getWorld(entry.getKey()); - if (world != null) - yml.getRoot().put("Seed", world.getSeed()); - if (this.getResidenceManager().getMessageCatch(entry.getKey()) != null) - yml.getRoot().put("Messages", this.getResidenceManager().getMessageCatch(entry.getKey())); - if (this.getResidenceManager().getFlagsCatch(entry.getKey()) != null) - yml.getRoot().put("Flags", this.getResidenceManager().getFlagsCatch(entry.getKey())); - yml.getRoot().put("Residences", entry.getValue()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(worldFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - } - - // For Sale save - File ymlSaveLoc = new File(saveFolder, "forsale.yml"); - File tmpFile = new File(saveFolder, "tmp_forsale.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.save(); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("Economy", tmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "forsale.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // Leases save - ymlSaveLoc = new File(saveFolder, "leases.yml"); - tmpFile = new File(saveFolder, "tmp_leases.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("Leases", leasemanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "leases.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // permlist save - ymlSaveLoc = new File(saveFolder, "permlists.yml"); - tmpFile = new File(saveFolder, "tmp_permlists.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("PermissionLists", pmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "permlists.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - // rent save - ymlSaveLoc = new File(saveFolder, "rent.yml"); - tmpFile = new File(saveFolder, "tmp_rent.yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - yml.getRoot().put("RentSystem", rentmanager.save()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(saveFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "rent.yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); - - if (getConfigManager().showIntervalMessages()) { - System.out.println("[Residence] - Saved Residences..."); - } + File saveFolder = new File(dataFolder, "Save"); + File worldFolder = new File(saveFolder, "Worlds"); + if (!worldFolder.isDirectory()) + worldFolder.mkdirs(); + YMLSaveHelper yml; + Map save = rmanager.save(); + for (Entry entry : save.entrySet()) { + File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); + File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + World world = server.getWorld(entry.getKey()); + if (world != null) + yml.getRoot().put("Seed", world.getSeed()); + if (this.getResidenceManager().getMessageCatch(entry.getKey()) != null) + yml.getRoot().put("Messages", this.getResidenceManager().getMessageCatch(entry.getKey())); + if (this.getResidenceManager().getFlagsCatch(entry.getKey()) != null) + yml.getRoot().put("Flags", this.getResidenceManager().getFlagsCatch(entry.getKey())); + yml.getRoot().put("Residences", entry.getValue()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(worldFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + } + + // For Sale save + File ymlSaveLoc = new File(saveFolder, "forsale.yml"); + File tmpFile = new File(saveFolder, "tmp_forsale.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.save(); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("Economy", tmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "forsale.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // Leases save + ymlSaveLoc = new File(saveFolder, "leases.yml"); + tmpFile = new File(saveFolder, "tmp_leases.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("Leases", leasemanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "leases.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // permlist save + ymlSaveLoc = new File(saveFolder, "permlists.yml"); + tmpFile = new File(saveFolder, "tmp_permlists.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("PermissionLists", pmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "permlists.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + // rent save + ymlSaveLoc = new File(saveFolder, "rent.yml"); + tmpFile = new File(saveFolder, "tmp_rent.yml"); + yml = new YMLSaveHelper(tmpFile); + yml.getRoot().put("Version", saveVersion); + yml.getRoot().put("RentSystem", rentmanager.save()); + yml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(saveFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "rent.yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + tmpFile.renameTo(ymlSaveLoc); + + if (getConfigManager().showIntervalMessages()) { + System.out.println("[Residence] - Saved Residences..."); + } } public final static String saveFilePrefix = "res_"; @SuppressWarnings({ "rawtypes", "unchecked" }) protected boolean loadYml() throws Exception { - File saveFolder = new File(dataFolder, "Save"); - try { - File worldFolder = new File(saveFolder, "Worlds"); - if (!saveFolder.isDirectory()) { - saveFolder.mkdir(); - if (!saveFolder.isDirectory()) { - this.getLogger().warning("Save directory does not exist..."); - this.getLogger().warning("Please restart server"); - return true; - } - } - long time; - YMLSaveHelper yml; - File loadFile; - HashMap worlds = new HashMap<>(); - - for (String worldName : this.getResidenceManager().getWorldNames()) { - loadFile = new File(worldFolder, saveFilePrefix + worldName + ".yml"); - if (loadFile.isFile()) { - time = System.currentTimeMillis(); - - if (!isDisabledWorld(worldName) && !this.getConfigManager().CleanerStartupLog) - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading save data for world " + worldName + "..."); - - yml = new YMLSaveHelper(loadFile); - yml.load(); - if (yml.getRoot() == null) - continue; - - if (yml.getRoot().containsKey("Messages")) { - HashMap c = getResidenceManager().getCacheMessages().get(worldName); - if (c == null) - c = new HashMap(); - Map ms = (Map) yml.getRoot().get("Messages"); - if (ms != null) { - for (Entry one : ms.entrySet()) { - try { - Map msgs = (Map) one.getValue(); - c.put(one.getKey(), new MinimizeMessages(one.getKey(), msgs.get("EnterMessage"), msgs.get("LeaveMessage"))); - } catch (Exception e) { - - } - } - getResidenceManager().getCacheMessages().put(worldName, c); - } - } - - if (yml.getRoot().containsKey("Flags")) { - HashMap c = getResidenceManager().getCacheFlags().get(worldName); - if (c == null) - c = new HashMap(); - Map ms = (Map) yml.getRoot().get("Flags"); - if (ms != null) { - for (Entry one : ms.entrySet()) { - try { - HashMap msgs = (HashMap) one.getValue(); - c.put(one.getKey(), new MinimizeFlags(one.getKey(), msgs)); - } catch (Exception e) { - - } - } - getResidenceManager().getCacheFlags().put(worldName, c); - } - } - - worlds.put(worldName, yml.getRoot().get("Residences")); - - int pass = (int) (System.currentTimeMillis() - time); - String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - - if (!isDisabledWorld(worldName) && !this.getConfigManager().CleanerStartupLog) - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loaded " + worldName + " data. (" + PastTime + ")"); - } - } - - getResidenceManager().load(worlds); - - // Getting shop residences - Map resList = rmanager.getResidences(); - for (Entry one : resList.entrySet()) { - addShops(one.getValue()); - } - - if (getConfigManager().isUUIDConvertion()) { - getConfigManager().ChangeConfig("Global.UUIDConvertion", false); - } - - loadFile = new File(saveFolder, "forsale.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - tmanager = new TransactionManager(this); - tmanager.load((Map) yml.getRoot().get("Economy")); - } - loadFile = new File(saveFolder, "leases.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - leasemanager = getLeaseManager().load((Map) yml.getRoot().get("Leases")); - } - loadFile = new File(saveFolder, "permlists.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); - pmanager = getPermissionListManager().load((Map) yml.getRoot().get("PermissionLists")); - } - loadFile = new File(saveFolder, "rent.yml"); - if (loadFile.isFile()) { - yml = new YMLSaveHelper(loadFile); - yml.load(); -// rentmanager = new RentManager(); - rentmanager.load((Map) yml.getRoot().get("RentSystem")); - } + File saveFolder = new File(dataFolder, "Save"); + try { + File worldFolder = new File(saveFolder, "Worlds"); + if (!saveFolder.isDirectory()) { + saveFolder.mkdir(); + if (!saveFolder.isDirectory()) { + this.getLogger().warning("Save directory does not exist..."); + this.getLogger().warning("Please restart server"); + return true; + } + } + long time; + YMLSaveHelper yml; + File loadFile; + HashMap worlds = new HashMap<>(); + + for (String worldName : this.getResidenceManager().getWorldNames()) { + loadFile = new File(worldFolder, saveFilePrefix + worldName + ".yml"); + if (loadFile.isFile()) { + time = System.currentTimeMillis(); + + if (!isDisabledWorld(worldName) && !this.getConfigManager().CleanerStartupLog) + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading save data for world " + worldName + "..."); + + yml = new YMLSaveHelper(loadFile); + yml.load(); + if (yml.getRoot() == null) + continue; + + if (yml.getRoot().containsKey("Messages")) { + HashMap c = getResidenceManager().getCacheMessages().get(worldName); + if (c == null) + c = new HashMap(); + Map ms = (Map) yml.getRoot().get("Messages"); + if (ms != null) { + for (Entry one : ms.entrySet()) { + try { + Map msgs = (Map) one.getValue(); + c.put(one.getKey(), new MinimizeMessages(one.getKey(), msgs.get("EnterMessage"), msgs.get("LeaveMessage"))); + } catch (Exception e) { + + } + } + getResidenceManager().getCacheMessages().put(worldName, c); + } + } + + if (yml.getRoot().containsKey("Flags")) { + HashMap c = getResidenceManager().getCacheFlags().get(worldName); + if (c == null) + c = new HashMap(); + Map ms = (Map) yml.getRoot().get("Flags"); + if (ms != null) { + for (Entry one : ms.entrySet()) { + try { + HashMap msgs = (HashMap) one.getValue(); + c.put(one.getKey(), new MinimizeFlags(one.getKey(), msgs)); + } catch (Exception e) { + + } + } + getResidenceManager().getCacheFlags().put(worldName, c); + } + } + + worlds.put(worldName, yml.getRoot().get("Residences")); + + int pass = (int) (System.currentTimeMillis() - time); + String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; + + if (!isDisabledWorld(worldName) && !this.getConfigManager().CleanerStartupLog) + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loaded " + worldName + " data. (" + PastTime + ")"); + } + } + + getResidenceManager().load(worlds); + + // Getting shop residences + Map resList = rmanager.getResidences(); + for (Entry one : resList.entrySet()) { + addShops(one.getValue()); + } + + if (getConfigManager().isUUIDConvertion()) { + getConfigManager().ChangeConfig("Global.UUIDConvertion", false); + } + + loadFile = new File(saveFolder, "forsale.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + tmanager = new TransactionManager(this); + Map root = yml.getRoot(); + if (root != null) + tmanager.load((Map) root.get("Economy")); + } + loadFile = new File(saveFolder, "leases.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + Map root = yml.getRoot(); + if (root != null) + leasemanager = getLeaseManager().load((Map) root.get("Leases")); + } + loadFile = new File(saveFolder, "permlists.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + Map root = yml.getRoot(); + if (root != null) + pmanager = getPermissionListManager().load((Map) root.get("PermissionLists")); + } + loadFile = new File(saveFolder, "rent.yml"); + if (loadFile.isFile()) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + Map root = yml.getRoot(); + if (root != null) + rentmanager.load((Map) root.get("RentSystem")); + } // for (Player one : Bukkit.getOnlinePlayers()) { // ResidencePlayer rplayer = getPlayerManager().getResidencePlayer(one); @@ -1481,167 +1488,167 @@ protected boolean loadYml() throws Exception { // rplayer.recountRes(); // } - // System.out.print("[Residence] Loaded..."); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - throw ex; - } + // System.out.print("[Residence] Loaded..."); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + throw ex; + } } private void addShops(ClaimedResidence res) { - ResidencePermissions perms = res.getPermissions(); - if (perms.has(Flags.shop, FlagCombo.OnlyTrue, false)) - rmanager.addShop(res); - for (ClaimedResidence one : res.getSubzones()) { - addShops(one); - } + ResidencePermissions perms = res.getPermissions(); + if (perms.has(Flags.shop, FlagCombo.OnlyTrue, false)) + rmanager.addShop(res); + for (ClaimedResidence one : res.getSubzones()) { + addShops(one); + } } private void writeDefaultGroupsFromJar() { - if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "groups.yml"), "groups.yml", true)) { - System.out.println("[Residence] Wrote default groups..."); - } + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "groups.yml"), "groups.yml", true)) { + System.out.println("[Residence] Wrote default groups..."); + } } private void writeDefaultFlagsFromJar() { - if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "flags.yml"), "flags.yml", true)) { - System.out.println("[Residence] Wrote default flags..."); - } + if (this.writeDefaultFileFromJar(new File(this.getDataFolder(), "flags.yml"), "flags.yml", true)) { + System.out.println("[Residence] Wrote default flags..."); + } } private void ConvertFile() { - File file = new File(this.getDataFolder(), "config.yml"); - - File file_old = new File(this.getDataFolder(), "config_old.yml"); - - File newfile = new File(this.getDataFolder(), "groups.yml"); - - File newTempFlags = new File(this.getDataFolder(), "flags.yml"); - - try { - copy(file, file_old); - } catch (IOException e1) { - e1.printStackTrace(); - } - - try { - copy(file, newfile); - } catch (IOException e1) { - e1.printStackTrace(); - } - - try { - copy(file, newTempFlags); - } catch (IOException e1) { - e1.printStackTrace(); - } - - File newGroups = new File(this.getDataFolder(), "config.yml"); - - List list = new ArrayList(); - list.add("ResidenceVersion"); - list.add("Global.Flags"); - list.add("Global.FlagPermission"); - list.add("Global.ResidenceDefault"); - list.add("Global.CreatorDefault"); - list.add("Global.GroupDefault"); - list.add("Groups"); - list.add("GroupAssignments"); - list.add("ItemList"); - - try { - remove(newGroups, list); - } catch (IOException e) { - e.printStackTrace(); - } - - File newConfig = new File(this.getDataFolder(), "groups.yml"); - list.clear(); - list = new ArrayList(); - list.add("ResidenceVersion"); - list.add("Global"); - list.add("ItemList"); - - try { - remove(newConfig, list); - } catch (IOException e) { - e.printStackTrace(); - } - - File newFlags = new File(this.getDataFolder(), "flags.yml"); - list.clear(); - list = new ArrayList(); - list.add("ResidenceVersion"); - list.add("GroupAssignments"); - list.add("Groups"); - list.add("Global.Language"); - list.add("Global.SelectionToolId"); - list.add("Global.InfoToolId"); - list.add("Global.MoveCheckInterval"); - list.add("Global.SaveInterval"); - list.add("Global.DefaultGroup"); - list.add("Global.UseLeaseSystem"); - list.add("Global.LeaseCheckInterval"); - list.add("Global.LeaseAutoRenew"); - list.add("Global.EnablePermissions"); - list.add("Global.LegacyPermissions"); - list.add("Global.EnableEconomy"); - list.add("Global.EnableRentSystem"); - list.add("Global.RentCheckInterval"); - list.add("Global.ResidenceChatEnable"); - list.add("Global.UseActionBar"); - list.add("Global.ResidenceChatColor"); - list.add("Global.AdminOnlyCommands"); - list.add("Global.AdminOPs"); - list.add("Global.MultiWorldPlugin"); - list.add("Global.ResidenceFlagsInherit"); - list.add("Global.PreventRentModify"); - list.add("Global.StopOnSaveFault"); - list.add("Global.ResidenceNameRegex"); - list.add("Global.ShowIntervalMessages"); - list.add("Global.VersionCheck"); - list.add("Global.CustomContainers"); - list.add("Global.CustomBothClick"); - list.add("Global.CustomRightClick"); - - try { - remove(newFlags, list); - } catch (IOException e) { - e.printStackTrace(); - } + File file = new File(this.getDataFolder(), "config.yml"); + + File file_old = new File(this.getDataFolder(), "config_old.yml"); + + File newfile = new File(this.getDataFolder(), "groups.yml"); + + File newTempFlags = new File(this.getDataFolder(), "flags.yml"); + + try { + copy(file, file_old); + } catch (IOException e1) { + e1.printStackTrace(); + } + + try { + copy(file, newfile); + } catch (IOException e1) { + e1.printStackTrace(); + } + + try { + copy(file, newTempFlags); + } catch (IOException e1) { + e1.printStackTrace(); + } + + File newGroups = new File(this.getDataFolder(), "config.yml"); + + List list = new ArrayList(); + list.add("ResidenceVersion"); + list.add("Global.Flags"); + list.add("Global.FlagPermission"); + list.add("Global.ResidenceDefault"); + list.add("Global.CreatorDefault"); + list.add("Global.GroupDefault"); + list.add("Groups"); + list.add("GroupAssignments"); + list.add("ItemList"); + + try { + remove(newGroups, list); + } catch (IOException e) { + e.printStackTrace(); + } + + File newConfig = new File(this.getDataFolder(), "groups.yml"); + list.clear(); + list = new ArrayList(); + list.add("ResidenceVersion"); + list.add("Global"); + list.add("ItemList"); + + try { + remove(newConfig, list); + } catch (IOException e) { + e.printStackTrace(); + } + + File newFlags = new File(this.getDataFolder(), "flags.yml"); + list.clear(); + list = new ArrayList(); + list.add("ResidenceVersion"); + list.add("GroupAssignments"); + list.add("Groups"); + list.add("Global.Language"); + list.add("Global.SelectionToolId"); + list.add("Global.InfoToolId"); + list.add("Global.MoveCheckInterval"); + list.add("Global.SaveInterval"); + list.add("Global.DefaultGroup"); + list.add("Global.UseLeaseSystem"); + list.add("Global.LeaseCheckInterval"); + list.add("Global.LeaseAutoRenew"); + list.add("Global.EnablePermissions"); + list.add("Global.LegacyPermissions"); + list.add("Global.EnableEconomy"); + list.add("Global.EnableRentSystem"); + list.add("Global.RentCheckInterval"); + list.add("Global.ResidenceChatEnable"); + list.add("Global.UseActionBar"); + list.add("Global.ResidenceChatColor"); + list.add("Global.AdminOnlyCommands"); + list.add("Global.AdminOPs"); + list.add("Global.MultiWorldPlugin"); + list.add("Global.ResidenceFlagsInherit"); + list.add("Global.PreventRentModify"); + list.add("Global.StopOnSaveFault"); + list.add("Global.ResidenceNameRegex"); + list.add("Global.ShowIntervalMessages"); + list.add("Global.VersionCheck"); + list.add("Global.CustomContainers"); + list.add("Global.CustomBothClick"); + list.add("Global.CustomRightClick"); + + try { + remove(newFlags, list); + } catch (IOException e) { + e.printStackTrace(); + } } private static void remove(File newGroups, List list) throws IOException { - YamlConfiguration conf = YamlConfiguration.loadConfiguration(newGroups); - conf.options().copyDefaults(true); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(newGroups); + conf.options().copyDefaults(true); - for (String one : list) { - conf.set(one, null); - } - try { - conf.save(newGroups); - } catch (IOException e) { - e.printStackTrace(); - } + for (String one : list) { + conf.set(one, null); + } + try { + conf.save(newGroups); + } catch (IOException e) { + e.printStackTrace(); + } } private static void copy(File source, File target) throws IOException { - InputStream in = new FileInputStream(source); - OutputStream out = new FileOutputStream(target); - try { - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - } catch (Throwable e) { - e.printStackTrace(); - } finally { - in.close(); - out.close(); - } + InputStream in = new FileInputStream(source); + OutputStream out = new FileOutputStream(target); + try { + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + } catch (Throwable e) { + e.printStackTrace(); + } finally { + in.close(); + out.close(); + } } // private void writeDefaultLanguageFile(String lang) { @@ -1677,328 +1684,328 @@ private static void copy(File source, File target) throws IOException { // } private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) { - try { - File fileBackup = new File(this.getDataFolder(), "backup-" + writeName); - File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile(); - if (jarloc.isFile()) { - JarFile jar = new JarFile(jarloc); - try { - JarEntry entry = jar.getJarEntry(jarPath); - if (entry != null && !entry.isDirectory()) { - InputStream in = jar.getInputStream(entry); - InputStreamReader isr = new InputStreamReader(in, "UTF8"); - if (writeName.isFile()) { - if (backupOld) { - if (fileBackup.isFile()) { - fileBackup.delete(); - } - writeName.renameTo(fileBackup); - } else { - writeName.delete(); - } - } - FileOutputStream out = new FileOutputStream(writeName); - OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); - try { - char[] tempbytes = new char[512]; - int readbytes = isr.read(tempbytes, 0, 512); - while (readbytes > -1) { - osw.write(tempbytes, 0, readbytes); - readbytes = isr.read(tempbytes, 0, 512); - } - } catch (Throwable e) { - e.printStackTrace(); - } finally { - osw.close(); - isr.close(); - out.close(); - } - return true; - } - } catch (Throwable ex) { - ex.printStackTrace(); - } finally { - jar.close(); - } - } - return false; - } catch (Exception ex) { - System.out.println("[Residence] Failed to write file: " + writeName); - return false; - } + try { + File fileBackup = new File(this.getDataFolder(), "backup-" + writeName); + File jarloc = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getCanonicalFile(); + if (jarloc.isFile()) { + JarFile jar = new JarFile(jarloc); + try { + JarEntry entry = jar.getJarEntry(jarPath); + if (entry != null && !entry.isDirectory()) { + InputStream in = jar.getInputStream(entry); + InputStreamReader isr = new InputStreamReader(in, "UTF8"); + if (writeName.isFile()) { + if (backupOld) { + if (fileBackup.isFile()) { + fileBackup.delete(); + } + writeName.renameTo(fileBackup); + } else { + writeName.delete(); + } + } + FileOutputStream out = new FileOutputStream(writeName); + OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); + try { + char[] tempbytes = new char[512]; + int readbytes = isr.read(tempbytes, 0, 512); + while (readbytes > -1) { + osw.write(tempbytes, 0, readbytes); + readbytes = isr.read(tempbytes, 0, 512); + } + } catch (Throwable e) { + e.printStackTrace(); + } finally { + osw.close(); + isr.close(); + out.close(); + } + return true; + } + } catch (Throwable ex) { + ex.printStackTrace(); + } finally { + jar.close(); + } + } + return false; + } catch (Exception ex) { + System.out.println("[Residence] Failed to write file: " + writeName); + return false; + } } public boolean isPlayerExist(CommandSender sender, String name, boolean inform) { - if (getPlayerUUID(name) != null) - return true; - if (inform) - sender.sendMessage(msg(lm.Invalid_Player)); - @SuppressWarnings("unused") - String a = "%%__USER__%%"; - @SuppressWarnings("unused") - String b = "%%__RESOURCE__%%"; - @SuppressWarnings("unused") - String c = "%%__NONCE__%%"; - return false; + if (getPlayerUUID(name) != null) + return true; + if (inform) + sender.sendMessage(msg(lm.Invalid_Player)); + @SuppressWarnings("unused") + String a = "%%__USER__%%"; + @SuppressWarnings("unused") + String b = "%%__RESOURCE__%%"; + @SuppressWarnings("unused") + String c = "%%__NONCE__%%"; + return false; } public UUID getPlayerUUID(String playername) { // if (Residence.getConfigManager().isOfflineMode()) // return null; - Player p = getServ().getPlayer(playername); - if (p == null) { - OfflinePlayer po = OfflinePlayerList.get(playername.toLowerCase()); - if (po != null) - return po.getUniqueId(); - } else - return p.getUniqueId(); - return null; + Player p = getServ().getPlayer(playername); + if (p == null) { + OfflinePlayer po = OfflinePlayerList.get(playername.toLowerCase()); + if (po != null) + return po.getUniqueId(); + } else + return p.getUniqueId(); + return null; } public OfflinePlayer getOfflinePlayer(String Name) { - if (Name == null) - return null; - OfflinePlayer offPlayer = OfflinePlayerList.get(Name.toLowerCase()); - if (offPlayer != null) - return offPlayer; + if (Name == null) + return null; + OfflinePlayer offPlayer = OfflinePlayerList.get(Name.toLowerCase()); + if (offPlayer != null) + return offPlayer; - Player player = Bukkit.getPlayer(Name); - if (player != null) - return player; + Player player = Bukkit.getPlayer(Name); + if (player != null) + return player; // offPlayer = Bukkit.getOfflinePlayer(Name); // if (offPlayer != null) // addOfflinePlayerToChache(offPlayer); - return offPlayer; + return offPlayer; } public String getPlayerUUIDString(String playername) { - UUID playerUUID = getPlayerUUID(playername); - if (playerUUID != null) - return playerUUID.toString(); - return null; + UUID playerUUID = getPlayerUUID(playername); + if (playerUUID != null) + return playerUUID.toString(); + return null; } public OfflinePlayer getOfflinePlayer(UUID uuid) { - OfflinePlayer offPlayer = cachedPlayerNameUUIDs.get(uuid); - if (offPlayer != null) - return offPlayer; + OfflinePlayer offPlayer = cachedPlayerNameUUIDs.get(uuid); + if (offPlayer != null) + return offPlayer; - Player player = Bukkit.getPlayer(uuid); - if (player != null) - return player; + Player player = Bukkit.getPlayer(uuid); + if (player != null) + return player; // offPlayer = Bukkit.getOfflinePlayer(uuid); // if (offPlayer != null) // addOfflinePlayerToChache(offPlayer); - return offPlayer; + return offPlayer; } public void addOfflinePlayerToChache(OfflinePlayer player) { - if (player == null) - return; - if (player.getName() != null) { - OfflinePlayerList.put(player.getName().toLowerCase(), player); - cachedPlayerNames.put(player.getUniqueId(), player.getName()); - } - cachedPlayerNameUUIDs.put(player.getUniqueId(), player); + if (player == null) + return; + if (player.getName() != null) { + OfflinePlayerList.put(player.getName().toLowerCase(), player); + cachedPlayerNames.put(player.getUniqueId(), player.getName()); + } + cachedPlayerNameUUIDs.put(player.getUniqueId(), player); } public String getPlayerName(String uuid) { - try { - return getPlayerName(UUID.fromString(uuid)); - } catch (IllegalArgumentException ex) { - } - return null; + try { + return getPlayerName(UUID.fromString(uuid)); + } catch (IllegalArgumentException ex) { + } + return null; } @Deprecated public String getServerLandname() { - return getServerLandName(); + return getServerLandName(); } public String getServerLandName() { - return this.getLM().getMessage(lm.server_land); + return this.getLM().getMessage(lm.server_land); } @Deprecated public String getServerLandUUID() { - return ServerLandUUID.toString(); + return ServerLandUUID.toString(); } @Deprecated public String getTempUserUUID() { - return TempUserUUID.toString(); + return TempUserUUID.toString(); } public UUID getServerUUID() { - return ServerLandUUID; + return ServerLandUUID; } public UUID getEmptyUserUUID() { - return TempUserUUID; + return TempUserUUID; } public String getPlayerName(UUID uuid) { - String cache = cachedPlayerNames.get(uuid); - if (cache != null) { - return cache.equalsIgnoreCase("_UNKNOWN_") ? null : cache; - } + String cache = cachedPlayerNames.get(uuid); + if (cache != null) { + return cache.equalsIgnoreCase("_UNKNOWN_") ? null : cache; + } - if (uuid == null) - return null; - OfflinePlayer p = getServ().getPlayer(uuid); - if (p == null) - p = getOfflinePlayer(uuid); - if (p != null) { - cachedPlayerNames.put(uuid, p.getName()); - return p.getName(); - } + if (uuid == null) + return null; + OfflinePlayer p = getServ().getPlayer(uuid); + if (p == null) + p = getOfflinePlayer(uuid); + if (p != null) { + cachedPlayerNames.put(uuid, p.getName()); + return p.getName(); + } - // Last attempt, slowest one - p = getServ().getOfflinePlayer(uuid); + // Last attempt, slowest one + p = getServ().getOfflinePlayer(uuid); - if (p != null) { - String name = p.getName() == null ? "_UNKNOWN_" : p.getName(); - cachedPlayerNames.put(uuid, name); - return p.getName(); - } + if (p != null) { + String name = p.getName() == null ? "_UNKNOWN_" : p.getName(); + cachedPlayerNames.put(uuid, name); + return p.getName(); + } - return null; + return null; } public boolean isDisabledWorld(World world) { - return isDisabledWorld(world.getName()); + return isDisabledWorld(world.getName()); } public boolean isDisabledWorld(String worldname) { - return getConfigManager().DisabledWorldsList.contains(worldname); + return getConfigManager().DisabledWorldsList.contains(worldname); } public boolean isDisabledWorldListener(World world) { - return isDisabledWorldListener(world.getName()); + return isDisabledWorldListener(world.getName()); } public boolean isDisabledWorldListener(String worldname) { - return getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableListeners; + return getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableListeners; } public boolean isDisabledWorldCommand(World world) { - return isDisabledWorldCommand(world.getName()); + return isDisabledWorldCommand(world.getName()); } public boolean isDisabledWorldCommand(String worldname) { - return getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableCommands; + return getConfigManager().DisabledWorldsList.contains(worldname) && getConfigManager().DisableCommands; } public String msg(String path) { - return getLM().getMessage(path); + return getLM().getMessage(path); } public void msg(CommandSender sender, String text) { - if (sender != null && text.length() > 0) - sender.sendMessage(CMIChatColor.translate(text)); + if (sender != null && text.length() > 0) + sender.sendMessage(CMIChatColor.translate(text)); } public void msg(Player player, String text) { - if (player != null && !text.isEmpty()) - player.sendMessage(CMIChatColor.translate(text)); + if (player != null && !text.isEmpty()) + player.sendMessage(CMIChatColor.translate(text)); } public void msg(CommandSender sender, lm lm, Object... variables) { - if (sender == null) - return; + if (sender == null) + return; - if (getLM().containsKey(lm.getPath())) { - String msg = getLM().getMessage(lm, variables); - if (msg.length() > 0) - sender.sendMessage(msg); - } else { - String msg = lm.getPath(); - if (msg.length() > 0) - sender.sendMessage(lm.getPath()); - } + if (getLM().containsKey(lm.getPath())) { + String msg = getLM().getMessage(lm, variables); + if (msg.length() > 0) + sender.sendMessage(msg); + } else { + String msg = lm.getPath(); + if (msg.length() > 0) + sender.sendMessage(lm.getPath()); + } } public List msgL(lm lm) { - return getLM().getMessageList(lm); + return getLM().getMessageList(lm); } public String msg(lm lm, Object... variables) { - return getLM().getMessage(lm, variables); + return getLM().getMessage(lm, variables); } public InformationPager getInfoPageManager() { - return InformationPagerManager; + return InformationPagerManager; } public com.sk89q.worldedit.bukkit.WorldEditPlugin getWorldEdit() { - return wep; + return wep; } public com.sk89q.worldguard.bukkit.WorldGuardPlugin getWorldGuard() { - return wg; + return wg; } public CMIMaterial getWorldEditTool() { - if (wepid == null) - wepid = CMIMaterial.NONE; - return wepid; + if (wepid == null) + wepid = CMIMaterial.NONE; + return wepid; } public WorldGuardInterface getWorldGuardUtil() { - if (worldGuardUtil == null) { - - int version = 6; - try { - version = Integer.parseInt(wg.getDescription().getVersion().substring(0, 1)); - } catch (Exception | Error e) { - } - if (version >= 7) { - wepVersion = version; - worldGuardUtil = new WorldGuard7Util(this); - } else { - worldGuardUtil = new WorldGuardUtil(this); - } - } - return worldGuardUtil; + if (worldGuardUtil == null) { + + int version = 6; + try { + version = Integer.parseInt(wg.getDescription().getVersion().substring(0, 1)); + } catch (Exception | Error e) { + } + if (version >= 7) { + wepVersion = version; + worldGuardUtil = new WorldGuard7Util(this); + } else { + worldGuardUtil = new WorldGuardUtil(this); + } + } + return worldGuardUtil; } public KingdomsUtil getKingdomsUtil() { - if (kingdomsUtil == null) - kingdomsUtil = new KingdomsUtil(this); - return kingdomsUtil; + if (kingdomsUtil == null) + kingdomsUtil = new KingdomsUtil(this); + return kingdomsUtil; } public static Residence getInstance() { - return instance; + return instance; } public String getPrefix() { - return prefix; + return prefix; } public String[] reduceArgs(String[] args) { - if (args.length <= 1) - return new String[0]; - return Arrays.copyOfRange(args, 1, args.length); + if (args.length <= 1) + return new String[0]; + return Arrays.copyOfRange(args, 1, args.length); } public int getWorldGuardVersion() { - return wepVersion; + return wepVersion; } public boolean isSlimefunPresent() { - return SlimeFun; + return SlimeFun; } public boolean isLwcPresent() { - return lwc; + return lwc; } public boolean isFullyLoaded() { - return fullyLoaded; + return fullyLoaded; } } From 500f11f1151c6c6ceb2b51260dff3b8415e17c27 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Sep 2022 17:01:23 +0300 Subject: [PATCH 0977/1142] Permission check by offline player --- .../bukkit/residence/allNms/v1_9Events.java | 2 - .../bukkit/residence/commands/auto.java | 3 - .../bukkit/residence/commands/info.java | 15 ++- .../bukkit/residence/commands/list.java | 2 +- .../residence/commands/placeholders.java | 1 - .../bekvon/bukkit/residence/commands/rt.java | 1 - .../residence/containers/PlayerGroup.java | 2 +- .../residence/containers/ResidencePlayer.java | 12 ++- .../listeners/ResidenceBlockListener.java | 2 - .../listeners/ResidencePlayerListener.java | 1 - .../ResidencePlayerListener1_17.java | 2 - .../permissions/BPermissionsAdapter.java | 34 ++++--- .../permissions/LuckPerms5Adapter.java | 45 ++++++--- .../permissions/PermissionGroup.java | 1 - .../permissions/PermissionManager.java | 25 ++--- .../permissions/PermissionsInterface.java | 3 + .../residence/pl3xmap/Pl3xMapListeners.java | 2 - .../residence/pl3xmap/Pl3xMapManager.java | 1 - .../bukkit/residence/utils/FileCleanUp.java | 96 ++++++++++--------- .../vaultinterface/ResidenceVaultAdapter.java | 3 +- 20 files changed, 137 insertions(+), 116 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index 7fe0fbbb0..67050a217 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -18,8 +18,6 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import net.Zrips.CMILib.Logs.CMIDebug; - public class v1_9Events implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 6fe14af1f..1a75cef3a 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -23,7 +23,6 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Logs.CMIDebug; public class auto implements cmd { @@ -421,8 +420,6 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre cuboid.getHighVector().setY(center); } - CMIDebug.c(cuboid.getHighVector().getBlockY(), maxWorldY); - fillMaps(directionMap, maxMap, direction.East, maxX, cuboid.getXSize()); fillMaps(directionMap, maxMap, direction.West, maxX, cuboid.getXSize()); diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 9cbb184b4..519ba93fe 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -8,12 +8,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Locale.LC; -import net.Zrips.CMILib.Logs.CMIDebug; -import net.Zrips.CMILib.RawMessages.RawMessage; -import net.Zrips.CMILib.RawMessages.RawMessageCommand; - import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -23,12 +17,17 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Locale.LC; +import net.Zrips.CMILib.RawMessages.RawMessage; +import net.Zrips.CMILib.RawMessages.RawMessageCommand; + public class info implements cmd { @Override @CommandAnnotation(simple = true, priority = 600) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { -CMIDebug.d("?"); + if (args.length == 0 && sender instanceof Player) { Player player = (Player) sender; ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); @@ -59,7 +58,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo RawMessage rm = new RawMessage(); - if (!nearby.isEmpty()) { + if (!nearby.isEmpty()) { rm.addText(plugin.msg(lm.Residence_Near, "")); for (ClaimedResidence one : nearby) { if (rm.getFinalLenght() > 0) diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index ac77f5738..b24ea4d18 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -45,7 +45,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; plugin.getResidenceManager().listResidences(sender, target, page, false, false, resadmin, world); - + return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/placeholders.java b/src/com/bekvon/bukkit/residence/commands/placeholders.java index 56a8a6dfa..d61409f0e 100644 --- a/src/com/bekvon/bukkit/residence/commands/placeholders.java +++ b/src/com/bekvon/bukkit/residence/commands/placeholders.java @@ -16,7 +16,6 @@ import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.Locale.LC; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; public class placeholders implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index a8ae19fbf..0fb460720 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -18,7 +18,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class rt implements cmd { diff --git a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java index d76c4bc9a..977137b03 100644 --- a/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java +++ b/src/com/bekvon/bukkit/residence/containers/PlayerGroup.java @@ -98,7 +98,7 @@ private PermissionGroup getPermissionGroup() { } else { OfflinePlayer offlineP = Residence.getInstance().getOfflinePlayer(resPlayer.getName()); if (offlineP != null) - if (ResidenceVaultAdapter.hasPermission(offlineP, ResPerm.group_$1.getPermission(one.getKey()), Residence.getInstance().getConfigManager().getDefaultWorld())) + if (Residence.getInstance().getPermissionManager().getPermissionsPlugin().hasPermission(offlineP, ResPerm.group_$1.getPermission(one.getKey()), Residence.getInstance().getConfigManager().getDefaultWorld())) group = one.getValue(); } } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index e6fcee8e5..4b169db19 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -135,7 +135,8 @@ public void recountMaxRes() { this.maxRes = maxValue; return; } - } else if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_res_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { + } else if (ofPlayer != null && Residence.getInstance().getPermissionManager().getPermissionsPlugin().hasPermission(this.ofPlayer, ResPerm.max_res_unlimited.getPermission(), Residence.getInstance() + .getConfigManager().getDefaultWorld())) { this.maxRes = maxValue; return; } @@ -154,7 +155,8 @@ public void recountMaxRents() { return; } } else { - if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_rents_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { + if (ofPlayer != null && Residence.getInstance().getPermissionManager().getPermissionsPlugin().hasPermission(this.ofPlayer, ResPerm.max_rents_unlimited.getPermission(), Residence.getInstance() + .getConfigManager().getDefaultWorld())) { this.maxRents = maxValue; return; } @@ -179,7 +181,8 @@ public void recountMaxSubzones() { return; } } else { - if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzones_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { + if (ofPlayer != null && Residence.getInstance().getPermissionManager().getPermissionsPlugin().hasPermission(this.ofPlayer, ResPerm.max_subzones_unlimited.getPermission(), Residence + .getInstance().getConfigManager().getDefaultWorld())) { this.maxSubzones = maxValue; return; } @@ -203,7 +206,8 @@ public void recountMaxSubzoneDepth() { return; } } else { - if (ofPlayer != null && ResidenceVaultAdapter.hasPermission(this.ofPlayer, ResPerm.max_subzonedepth_unlimited.getPermission(), Residence.getInstance().getConfigManager().getDefaultWorld())) { + if (ofPlayer != null && Residence.getInstance().getPermissionManager().getPermissionsPlugin().hasPermission(this.ofPlayer, ResPerm.max_subzonedepth_unlimited.getPermission(), Residence + .getInstance().getConfigManager().getDefaultWorld())) { this.maxSubzoneDepth = maxValue; return; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 744ce97f3..d95e78186 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -41,7 +41,6 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.world.PortalCreateEvent; -import org.bukkit.event.world.PortalCreateEvent.CreateReason; import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -66,7 +65,6 @@ import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 783a57ab9..7435257b3 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -88,7 +88,6 @@ import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java index 3d4d1e555..1ef8a8289 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_17.java @@ -28,8 +28,6 @@ import net.Zrips.CMILib.CMILib; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; -import net.Zrips.CMILib.Version.Version; public class ResidencePlayerListener1_17 implements Listener { diff --git a/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java b/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java index 9d3583f55..647fdfc2b 100644 --- a/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java +++ b/src/com/bekvon/bukkit/residence/permissions/BPermissionsAdapter.java @@ -1,8 +1,11 @@ package com.bekvon.bukkit.residence.permissions; -import com.bekvon.bukkit.residence.Residence; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; + import de.bananaco.bpermissions.api.ApiLayer; import de.bananaco.bpermissions.api.util.CalculableType; @@ -14,21 +17,26 @@ public BPermissionsAdapter() { @Override public String getPlayerGroup(Player player) { - return this.getPlayerGroup(player.getName(), player.getWorld().getName()); + return this.getPlayerGroup(player.getName(), player.getWorld().getName()); } @Override public String getPlayerGroup(String player, String world) { - String[] groups = ApiLayer.getGroups(world, CalculableType.USER, player); - PermissionManager pmanager = Residence.getInstance().getPermissionManager(); - for (String group : groups) { - if (pmanager.hasGroup(group)) { - return group.toLowerCase(); - } - } - if (groups.length > 0) { - return groups[0].toLowerCase(); - } - return null; + String[] groups = ApiLayer.getGroups(world, CalculableType.USER, player); + PermissionManager pmanager = Residence.getInstance().getPermissionManager(); + for (String group : groups) { + if (pmanager.hasGroup(group)) { + return group.toLowerCase(); + } + } + if (groups.length > 0) { + return groups[0].toLowerCase(); + } + return null; + } + + @Override + public boolean hasPermission(OfflinePlayer player, String permission, String world) { + return ResidenceVaultAdapter.permissions.playerHas(world, player, permission); } } diff --git a/src/com/bekvon/bukkit/residence/permissions/LuckPerms5Adapter.java b/src/com/bekvon/bukkit/residence/permissions/LuckPerms5Adapter.java index 2fc4cde45..ce0fc9ab7 100644 --- a/src/com/bekvon/bukkit/residence/permissions/LuckPerms5Adapter.java +++ b/src/com/bekvon/bukkit/residence/permissions/LuckPerms5Adapter.java @@ -1,6 +1,9 @@ package com.bekvon.bukkit.residence.permissions; +import java.util.UUID; + import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.plugin.RegisteredServiceProvider; @@ -9,29 +12,45 @@ public class LuckPerms5Adapter implements PermissionsInterface { - LuckPerms api = null; + static LuckPerms api = null; public LuckPerms5Adapter() { - RegisteredServiceProvider provider = Bukkit.getServicesManager().getRegistration(LuckPerms.class); - if (provider != null) { - api = provider.getProvider(); - } + RegisteredServiceProvider provider = Bukkit.getServicesManager().getRegistration(LuckPerms.class); + if (provider != null) { + api = provider.getProvider(); + } } @Override public String getPlayerGroup(Player player) { - User user = api.getUserManager().getUser(player.getUniqueId()); - if (user == null) - return ""; - return user.getPrimaryGroup(); + User user = api.getUserManager().getUser(player.getUniqueId()); + if (user == null) + return ""; + + return user.getPrimaryGroup(); } @Override public String getPlayerGroup(String player, String world) { - User user = api.getUserManager().getUser(player); - if (user == null) - return ""; - return user.getPrimaryGroup(); + User user = api.getUserManager().getUser(player); + if (user == null) + return ""; + return user.getPrimaryGroup(); + } + + @Override + public boolean hasPermission(OfflinePlayer player, String permission, String world) { + User user = api.getUserManager().getUser(player.getUniqueId()); + if (user == null) + api.getUserManager().loadUser(player.getUniqueId()); + user = api.getUserManager().getUser(player.getUniqueId()); + if (user == null) + return false; + return user.getCachedData().getPermissionData().checkPermission(permission).asBoolean(); } + public static void loadUser(UUID uuid) { + if (!api.getUserManager().isLoaded(uuid)) + api.getUserManager().loadUser(uuid); + } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 4a296f0be..29cfb2a61 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -19,7 +19,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import net.Zrips.CMILib.Container.CMIWorld; -import net.Zrips.CMILib.Logs.CMIDebug; public class PermissionGroup { private int xmax = 0; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 01743a3c3..dba111e49 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -33,7 +33,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; @@ -123,6 +122,19 @@ public boolean isResidenceAdmin(CommandSender sender) { private void checkPermissions() { Server server = plugin.getServ(); + + PluginManager pluginManager = plugin.getServer().getPluginManager(); + Plugin pl = pluginManager.getPlugin("LuckPerms"); + if (pl != null && pl.isEnabled()) { + Integer ver = CMIVersionChecker.convertVersion(pl.getDescription().getVersion()); + if (ver > 50000) { + perms = new LuckPerms5Adapter(); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found LuckPerms5 Plugin!"); + return; + } + plugin.consoleMessage("&cLuckPerms plugin was found but its outdated"); + } + Plugin p = server.getPluginManager().getPlugin("Vault"); if (p != null) { ResidenceVaultAdapter vault = new ResidenceVaultAdapter(server); @@ -134,17 +146,6 @@ private void checkPermissions() { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Vault, but Vault reported no usable permissions system..."); } - PluginManager pluginManager = plugin.getServer().getPluginManager(); - Plugin pl = pluginManager.getPlugin("LuckPerms"); - if (pl != null && pl.isEnabled()) { - Integer ver = CMIVersionChecker.convertVersion(pl.getDescription().getVersion()); - if (ver > 50000) { - perms = new LuckPerms5Adapter(); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found LuckPerms5 Plugin!"); - return; - } - plugin.consoleMessage("&cLuckPerms plugin was found but its outdated"); - } p = server.getPluginManager().getPlugin("bPermissions"); if (p != null) { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java b/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java index 31248a8dd..193dc38a2 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionsInterface.java @@ -1,9 +1,12 @@ package com.bekvon.bukkit.residence.permissions; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; public interface PermissionsInterface { public String getPlayerGroup(Player player); public String getPlayerGroup(String player, String world); + + public boolean hasPermission(OfflinePlayer player, String permission, String world); } diff --git a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapListeners.java b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapListeners.java index a96d7c29c..b58e333c3 100644 --- a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapListeners.java +++ b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapListeners.java @@ -15,8 +15,6 @@ import com.bekvon.bukkit.residence.event.ResidenceSizeChangeEvent; import com.bekvon.bukkit.residence.event.ResidenceSubzoneCreationEvent; -import net.Zrips.CMILib.Logs.CMIDebug; - public class Pl3xMapListeners implements Listener { private Residence plugin; diff --git a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java index 5411ac7fe..219a02c59 100644 --- a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java +++ b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java @@ -20,7 +20,6 @@ import com.bekvon.bukkit.residence.utils.GetTime; import net.Zrips.CMILib.Colors.CMIChatColor; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Messages.CMIMessages; import net.pl3x.map.api.Key; import net.pl3x.map.api.LayerProvider; diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index f5285c16c..cafa807a7 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -10,79 +10,81 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.permissions.LuckPerms5Adapter; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; -import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; + +import net.Zrips.CMILib.Logs.CMIDebug; public class FileCleanUp { private Residence plugin; public FileCleanUp(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } public void cleanOldResidence() { - Map resNameList = new HashMap(plugin.getResidenceManager().getResidences()); - int i = 0; + Map resNameList = new HashMap(plugin.getResidenceManager().getResidences()); + int i = 0; - OfflinePlayer[] offplayer = Bukkit.getOfflinePlayers(); + OfflinePlayer[] offplayer = Bukkit.getOfflinePlayers(); - HashMap playerMapUUID = new HashMap(); - HashMap playerMapNane = new HashMap(); + HashMap playerMapUUID = new HashMap(); - for (OfflinePlayer one : offplayer) { - playerMapUUID.put(one.getUniqueId(), one); - playerMapNane.put(one.getName(), one); - } + boolean lp = plugin.getPermissionManager().getPermissionsPlugin() instanceof LuckPerms5Adapter; - int interval = plugin.getConfigManager().getResidenceFileCleanDays(); - long time = System.currentTimeMillis(); + for (OfflinePlayer one : offplayer) { + playerMapUUID.put(one.getUniqueId(), one); + if (lp) { + LuckPerms5Adapter.loadUser(one.getUniqueId()); + } + } - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Starting auto CleanUp (" + playerMapUUID.size() + "/" + resNameList.size() + ")!"); + int interval = plugin.getConfigManager().getResidenceFileCleanDays(); + long time = System.currentTimeMillis(); - int skipped = 0; - try { - for (Entry oneName : resNameList.entrySet()) { - ClaimedResidence res = oneName.getValue(); - if (res == null) - continue; + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Starting auto CleanUp (" + playerMapUUID.size() + "/" + resNameList.size() + ")!"); - OfflinePlayer player = playerMapUUID.get(res.getOwnerUUID()); + int skipped = 0; + try { + for (Entry oneName : resNameList.entrySet()) { + ClaimedResidence res = oneName.getValue(); + if (res == null) + continue; - if (player == null) - player = playerMapNane.get(res.getOwner()); + OfflinePlayer player = playerMapUUID.get(res.getOwnerUUID()); - if (player == null) { - skipped++; - continue; - } + if (player == null) { + skipped++; + continue; + } - if (!plugin.getConfigManager().getAutoCleanUpWorlds().contains(res.getPermissions().getWorldName().toLowerCase())) - continue; + if (!plugin.getConfigManager().getAutoCleanUpWorlds().contains(res.getPermissions().getWorldName().toLowerCase())) + continue; - if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(plugin.getServerLandName())) - continue; + if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(plugin.getServerLandName())) + continue; - long lastPlayed = player.getLastPlayed(); - int dif = (int) ((time - lastPlayed) / 1000 / 60 / 60 / 24); - if (dif < interval) - continue; + long lastPlayed = player.getLastPlayed(); + int dif = (int) ((time - lastPlayed) / 1000 / 60 / 60 / 24); + if (dif < interval) + continue; - if (ResidenceVaultAdapter.hasPermission(player, ResPerm.cleanbypass.getPermission(), res.getPermissions().getWorldName().toLowerCase())) - continue; + if (plugin.getPermissionManager().getPermissionsPlugin().hasPermission(player, ResPerm.cleanbypass.getPermission(), res.getPermissions().getWorldName().toLowerCase())) + continue; - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getName(), player.getUniqueId()); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getUniqueId()); - plugin.getResidenceManager().removeResidence(rPlayer, oneName.getValue(), true, plugin.getConfigManager().isAutoCleanUpRegenerate()); - i++; - } - } catch (Throwable e) { - e.printStackTrace(); - } - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Auto CleanUp deleted " + i + " residences!"); - if (skipped > 0) - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Skipped " + skipped + " residences due to inability to determine residence owner."); + plugin.getResidenceManager().removeResidence(rPlayer, oneName.getValue(), true, plugin.getConfigManager().isAutoCleanUpRegenerate()); + i++; + } + } catch (Throwable e) { + e.printStackTrace(); + } + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Auto CleanUp deleted " + i + " residences!"); + if (skipped > 0) + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Skipped " + skipped + " residences due to inability to determine residence owner."); } } diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index b092c46df..2cc0c2a33 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -81,7 +81,8 @@ public String getPlayerGroup(String player, String world) { return group.toLowerCase(); } - public static boolean hasPermission(OfflinePlayer player, String perm, String world) { + @Override + public boolean hasPermission(OfflinePlayer player, String perm, String world) { if (permissions == null) return false; try { From b4bf9e598d0395b481bd0f54b7c45f559e74a999 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Sep 2022 18:08:52 +0300 Subject: [PATCH 0978/1142] Checking players location every 15 seconds for additional protection --- .../bekvon/bukkit/residence/Residence.java | 1 - .../listeners/ResidencePlayerListener.java | 29 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 849e89a51..df7c3d42a 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -131,7 +131,6 @@ import fr.crafter.tickleman.realplugin.RealPlugin; import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 7435257b3..253960759 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -54,6 +54,7 @@ import org.bukkit.event.vehicle.VehicleMoveEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; @@ -104,6 +105,29 @@ public class ResidencePlayerListener implements Listener { private Residence plugin; + private int locationChangeCheckId = -1; + + protected Map lastCheck = new HashMap(); + protected Map lastLocation = new HashMap(); + + private Runnable locationChangeCheck = new Runnable() { + @Override + public void run() { + for (Player player : Bukkit.getOnlinePlayers()) { + Vector locfrom = lastLocation.getOrDefault(player.getUniqueId(), player.getLocation().toVector()); + Vector locto = player.getLocation().toVector(); + lastLocation.put(player.getUniqueId(), locto); + if (locfrom.getBlockX() == locto.getBlockX() && locfrom.getBlockY() == locto.getBlockY() && locfrom.getBlockZ() == locto.getBlockZ()) + continue; + Long time = lastCheck.getOrDefault(player.getUniqueId(), 0L); + if (time + 1000L > System.currentTimeMillis()) + continue; + lastCheck.put(player.getUniqueId(), System.currentTimeMillis()); + handleNewLocation(player, player.getLocation(), true); + } + } + }; + public ResidencePlayerListener(Residence plugin) { currentRes = new HashMap(); lastUpdate = new HashMap(); @@ -116,6 +140,8 @@ public ResidencePlayerListener(Residence plugin) { lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); } this.plugin = plugin; + + locationChangeCheckId = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, locationChangeCheck, 20L, 15 * 20L); } public void reload() { @@ -129,6 +155,8 @@ public void reload() { for (Player player : Bukkit.getOnlinePlayers()) { lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); } + lastCheck.clear(); + lastLocation.clear(); } @EventHandler @@ -2418,6 +2446,7 @@ public void run() { default: break; } + return teleported; } From 28570d3aaab454b5520db053372434f93164456c Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 16 Sep 2022 18:13:35 +0300 Subject: [PATCH 0979/1142] Simplified permission node --- .../bekvon/bukkit/residence/containers/ResidencePlayer.java | 4 ++-- .../bukkit/residence/permissions/PermissionManager.java | 4 ++-- src/plugin.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 4b169db19..e2bccbc8d 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -119,13 +119,13 @@ public ClaimedResidence getMainResidence() { public void recountMaxX() { int m = this.getGroup().getMaxX(); m = m == -1 ? maxX : m; - this.maxX = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_res_maxx_$1).getMaxValue(m); + this.maxX = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_res_x_$1).getMaxValue(m); } public void recountMaxZ() { int m = this.getGroup().getMaxZ(); m = m == -1 ? maxZ : m; - this.maxZ = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_res_maxz_$1).getMaxValue(m); + this.maxZ = Residence.getInstance().getPermissionManager().getPermissionInfo(this.getUniqueId(), ResPerm.max_res_z_$1).getMaxValue(m); } public void recountMaxRes() { diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index dba111e49..2d852a5e2 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -248,8 +248,8 @@ public enum ResPerm { bypass_itempickup("Allows to bypass itempickup flag"), buy("Allows to buy residence"), sell("Allows to sell residence"), - max_res_maxx_$1("Defines residence size limit on X axis", "number"), - max_res_maxz_$1("Defines residence size limit on X axis", "number"), + max_res_x_$1("Defines residence size limit on X axis", "number"), + max_res_z_$1("Defines residence size limit on X axis", "number"), max_res_unlimited("Defines residence limit as unlimited"), max_res_$1("Defines residence limit", "number"), max_subzones_unlimited("Defines subzone limit as unlimited"), diff --git a/src/plugin.yml b/src/plugin.yml index 7de4d7547..1f9ed616f 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.2.1 +version: 5.0.3.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 0a1d1a1046b05a6e0f29adbcfb55a1f1e64b28d5 Mon Sep 17 00:00:00 2001 From: kqakqakqa <58761476+kqakqakqa@users.noreply.github.com> Date: Sat, 17 Sep 2022 02:31:12 +0800 Subject: [PATCH 0980/1142] Add files via upload --- src/Language/Chinese.yml | 391 +++++++++++++++++++-------------------- 1 file changed, 193 insertions(+), 198 deletions(-) diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml index bfe2943c8..0f741e8e5 100644 --- a/src/Language/Chinese.yml +++ b/src/Language/Chinese.yml @@ -376,9 +376,9 @@ Language: RenewCost: '&7- &e续租æ¯æ–¹å—花费:&3 %1' Gui: Set: - Title: '&6%1 æƒé™è®¾ç½®èœå•' + Title: '&6%1 çš„æƒé™' Pset: - Title: '&6%1 %2 æƒé™' + Title: '&6%1 在 %2 çš„æƒé™' Actions: - '&2左键å•å‡»å¯ç”¨' - '&cå³é”®å•å‡»ç¦ç”¨' @@ -919,7 +919,7 @@ CommandHelp: mirror: Info: - '&e使用方法: &6/res mirror [æ¥æºé¢†åœ°] [目标领地]' - - 从一个领地到å¦ä¸€ä¸ªé¢†åœ°çš„æƒé™å…‹éš†,你必须是两个领地的所有人或管ç†å‘˜æ‰èƒ½åšåˆ°è¿™ä¸€ç‚¹ + - 从一个领地到å¦ä¸€ä¸ªé¢†åœ°çš„æƒé™å…‹éš†, 你必须是两个领地的所有人或管ç†å‘˜æ‰èƒ½åšåˆ°è¿™ä¸€ç‚¹ Description: 克隆æƒé™ shop: Description: 管ç†é¢†åœ°å•†åº— @@ -955,7 +955,7 @@ CommandHelp: Description: 设置领地商店æè¿° Info: - '&e使用方法: &6/res shop setdesc [æ述文字]' - - 设置领地商店æè¿°,支æŒé¢œè‰²ä»£ç  + - 设置领地商店æè¿°, 支æŒé¢œè‰²ä»£ç  使用 /n å¯ä»¥æ¢è¡Œ createboard: Description: åˆ›å»ºå•†åº—å®£ä¼ æ¿ @@ -994,132 +994,127 @@ CommandHelp: - 大部分æƒé™å¯ä»¥ä½¿ç”¨å‚æ•° true 表示å…许, false 表示ç¦æ­¢ SubCommands: anvil: - Translated: anvil - å…许或ç¦æ­¢ä½¿ç”¨é“ç § + Translated: anvil - 使用é“ç § Description: å…许或ç¦æ­¢ä½¿ç”¨é“ç § Info: - '&e使用方法: &6/res set/pset <领地å称> anvil true/false/remove=移除' admin: - Translated: admin - 给予玩家设置领地的æƒé™ + Translated: admin - 管ç†å‘˜æƒé™ Description: 给予玩家设置领地的æƒé™ Info: - '&e使用方法: &6/res pset <领地å称> admin true/false/remove=移除' animalkilling: - Translated: animalkilling - å…许或ç¦æ­¢çŽ©å®¶æ€æ­»åŠ¨ç‰© - Description: å…许或ç¦æ­¢çŽ©å®¶æ€æ­»åŠ¨ç‰© + Translated: animalkilling - æ€æ­»åŠ¨ç‰© + Description: å…许或ç¦æ­¢æ€æ­»åŠ¨ç‰© Info: - '&e使用方法: &6/res set/pset <领地å称> animalkilling true/false/remove=移除' animals: - Translated: animals - å…许或ç¦æ­¢åŠ¨ç‰©ç”Ÿæˆ - Description: å…许或ç¦æ­¢åŠ¨ç‰©ç”Ÿæˆ + Translated: animals - 生æˆåŠ¨ç‰© + Description: å…许或ç¦æ­¢ç”ŸæˆåŠ¨ç‰© Info: - '&e使用方法: &6/res set <领地å称> animals true/false/remove=移除' anchor: - Translated: anchor - å…许或ä¸å…许使用é‡ç”Ÿé”š - Description: å…许或ä¸å…许使用é‡ç”Ÿé”š + Translated: anchor - 使用é‡ç”Ÿé”š + Description: å…许或ç¦æ­¢ä½¿ç”¨é‡ç”Ÿé”š Info: - '&e使用方法: &6/res set/pset <领地å称> anchor true/false/remove=移除' anvilbreak: - Translated: anvilbreak - å…许或ä¸å…许在领地断砧 - Description: å…许或ä¸å…许在领地断砧 + Translated: anvilbreak - å¼€å¯æˆ–关闭é“ç §æŸå + Description: å¼€å¯æˆ–关闭é“ç §æŸå Info: - '&e使用方法: &6/res set <领地å称> anvilbreak true/false/remove=移除' - backup: - Translated: backup - å…许或ç¦æ­¢çŽ©å®¶åœ¨é¢†åœ°å†…骑马 - Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨é¢†åœ°å†…骑马 - Info: - - '&e使用方法: &6/res set <领地å称> backup true/false/remove=移除' bank: - Translated: bank - å…许或ç¦æ­¢çŽ©å®¶ä»Žé¢†åœ°é“¶è¡Œå­˜/å–é’± - Description: å…许或ç¦æ­¢çŽ©å®¶ä»Žé¢†åœ°é“¶è¡Œå­˜/å–é’± + Translated: bank - 使用领地银行 + Description: å…许或ç¦æ­¢ä»Žé¢†åœ°é“¶è¡Œå­˜/å–é’± Info: - '&e使用方法: &6/res set/pset <领地å称> bank true/false/remove=移除' bed: - Translated: bed - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ(ç¡è§‰) - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ(ç¡è§‰) + Translated: bed - 使用床(ç¡è§‰) + Description: å…许或ç¦æ­¢ä½¿ç”¨åºŠ(ç¡è§‰) Info: - '&e使用方法: &6/res set/pset <领地å称> bed true/false/remove=移除' honey: - Translated: honey - å…许或ä¸å…许玩家获得蜂蜜 - Description: å…许或ä¸å…许玩家获得蜂蜜 + Translated: honey - 获得蜂蜜 + Description: å…许或ç¦æ­¢èŽ·å¾—蜂蜜 Info: - '&e使用方法: &6/res set/pset <领地å称> honey true/false/remove=移除' honeycomb: - Translated: honeycomb - å…许或ä¸å…许玩家获得蜂çªçŠ¶ç‰© - Description: å…许或ä¸å…许玩家获得蜂çªçŠ¶ç‰© + Translated: honeycomb - 获得蜜脾 + Description: å…许或ç¦æ­¢èŽ·å¾—蜜脾 Info: - '&e使用方法: &6/res set/pset <领地å称> honeycomb true/false/remove=移除' beacon: - Translated: beacon - å…许或ç¦æ­¢çŽ©å®¶ä¸Žä¿¡æ ‡äº¤äº’ - Description: å…许或ç¦æ­¢çŽ©å®¶ä¸Žä¿¡æ ‡äº¤äº’ + Translated: beacon - 与信标交互 + Description: å…许或ç¦æ­¢ä¸Žä¿¡æ ‡äº¤äº’ Info: - '&e使用方法: &6/res set/pset <领地å称> beacon true/false/remove=移除' brew: - Translated: brew - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é…¿é€ å° - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é…¿é€ å° + Translated: brew - ä½¿ç”¨é…¿é€ å° + Description: å…许或ç¦æ­¢ä½¿ç”¨é…¿é€ å° Info: - '&e使用方法: &6/res set/pset <领地å称> brew true/false/remove=移除' build: - Translated: build - å…许或ç¦æ­¢çŽ©å®¶åœ¨é¢†åœ°å†…建筑 - Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨é¢†åœ°å†…建筑 + Translated: build - 建造 + Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…建造 Info: - '&e使用方法: &6/res set/pset <领地å称> build true/false/remove=移除' burn: - Translated: burn - å…许或ç¦æ­¢é¢†åœ°å†…的怪物燃烧 - Description: å…许或ç¦æ­¢é¢†åœ°å†…的怪物燃烧 + Translated: burn - 怪物燃烧 + Description: å¼€å¯æˆ–关闭怪物燃烧 Info: - '&e使用方法: &6/res set <领地å称> burn true/false/remove=移除' button: - Translated: button - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰é’® - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰é’® + Translated: button - 使用按钮 + Description: å…许或ç¦æ­¢ä½¿ç”¨æŒ‰é’® Info: - '&e使用方法: &6/res set/pset <领地å称> button true/false/remove=移除' cake: - Translated: cake - å…许或ç¦æ­¢çŽ©å®¶é£Ÿç”¨è›‹ç³• - Description: å…许或ç¦æ­¢çŽ©å®¶é£Ÿç”¨è›‹ç³• + Translated: cake - 食用蛋糕 + Description: å…许或ç¦æ­¢é£Ÿç”¨è›‹ç³• Info: - '&e使用方法: &6/res set/pset <领地å称> cake true/false/remove=移除' canimals: - Translated: canimals - å…许或ç¦æ­¢çŽ©å®¶é£Ÿç”¨è›‹ç³• - Description: å…许或ç¦æ­¢çŽ©å®¶é£Ÿç”¨è›‹ç³• + Translated: canimals - è‡ªå®šä¹‰åŠ¨ç‰©ç”Ÿæˆ + Description: å…许或ç¦æ­¢è‡ªå®šä¹‰åŠ¨ç‰©ç”Ÿæˆ Info: - '&e使用方法: &6/res set <领地å称> canimals true/false/remove=移除' chorustp: - Translated: chorustp - å…许或ç¦æ­¢çŽ©å®¶é€šè¿‡ç´«é¢‚果传é€åˆ°é¢†åœ° - Description: å…许或ç¦æ­¢çŽ©å®¶é€šè¿‡ç´«é¢‚果传é€åˆ°é¢†åœ° + Translated: chorustp - ä½¿ç”¨ç´«é¢‚æžœä¼ é€ + Description: å…许或ç¦æ­¢ä½¿ç”¨ç´«é¢‚果传é€åˆ°é¢†åœ° Info: - '&e使用方法: &6/res set/pset <领地å称> chorustp true/false/remove=移除' chat: - Translated: chat - å…许或ç¦æ­¢çŽ©å®¶åŠ å…¥é¢†åœ°èŠå¤©é¢‘é“ - Description: å…许或ç¦æ­¢çŽ©å®¶åŠ å…¥é¢†åœ°èŠå¤©é¢‘é“ + Translated: chat - 加入领地èŠå¤©é¢‘é“ + Description: å…许或ç¦æ­¢åŠ å…¥é¢†åœ°èŠå¤©é¢‘é“ Info: - '&e使用方法: &6/res set/pset <领地å称> chat true/false/remove=移除' cmonsters: - Translated: cmonsters - å…许或ç¦æ­¢è‡ªå®šä¹‰æ€ªç‰©ç”Ÿæˆ + Translated: cmonsters - è‡ªå®šä¹‰æ€ªç‰©ç”Ÿæˆ Description: å…许或ç¦æ­¢è‡ªå®šä¹‰æ€ªç‰©ç”Ÿæˆ Info: - '&e使用方法: &6/res set <领地å称> cmonsters true/false/remove=移除' commandblock: - Translated: commandblock - å…许或ç¦æ­¢ä¸Žå‘½ä»¤æ–¹å—交互 + Translated: commandblock - 与命令方å—交互 Description: å…许或ç¦æ­¢ä¸Žå‘½ä»¤æ–¹å—交互 Info: - '&e使用方法: &6/res set/pset <领地å称> commandblock true/false/remove=移除' command: - Translated: command - å…许或ç¦æ­¢åœ¨é¢†åœ°å†…的命令 - Description: å…许或ä¸å…许在领地中使用命令,需è¦ä¸Žcommandblockæƒé™ä¸€èµ·ä½¿ç”¨ + Translated: command - 使用命令 + Description: å…许或ç¦æ­¢åœ¨é¢†åœ°ä¸­ä½¿ç”¨å‘½ä»¤, 需è¦ä¸Žcommandblockæƒé™ä¸€èµ·ä½¿ç”¨ Info: - '&e使用方法: &6/res set/pset <领地å称> command true/false/remove=移除' container: - Translated: container - å…许或ç¦æ­¢ä½¿ç”¨ç®±å­ï¼Œå‘射器,熔炉等容器 - Description: å…许或ç¦æ­¢ä½¿ç”¨ç®±å­ï¼Œå‘射器,熔炉等容器... + Translated: container - 使用容器 + Description: å…许或ç¦æ­¢ä½¿ç”¨ç®±å­, å‘射器, 熔炉等容器... Info: - '&e使用方法: &6/res set/pset <领地å称> container true/false/remove=移除' coords: - Translated: coords - éšè—领地åæ ‡ - Description: éšè—领地åæ ‡ + Translated: coords - 显示或éšè—领地åæ ‡ + Description: 显示或éšè—领地åæ ‡ Info: - '&e使用方法: &6/res set <领地å称> coords true/false/remove=移除' copper: - Translated: copper - å…许或ç¦æ­¢ä¿®æ”¹é“œå— + Translated: copper - ä¿®æ”¹é“œå— Description: å…许或ç¦æ­¢ä¿®æ”¹é“œå— Info: - '&e使用方法: &6/res set/pset <领地å称> copper true/false/remove=移除' @@ -1129,313 +1124,313 @@ CommandHelp: Info: - '&e使用方法: &6/res set <领地å称> craft true/false/remove=移除' creeper: - Translated: creeper - å…许或ç¦æ­¢è‹¦åŠ›æ€•çˆ†ç‚¸ + Translated: creeper - 苦力怕爆炸 Description: å…许或ç¦æ­¢è‹¦åŠ›æ€•çˆ†ç‚¸ Info: - '&e使用方法: &6/res set <领地å称> creeper true/false/remove=移除' dragongrief: - Translated: dragongrief - å…许或ç¦æ­¢æœ«å½±é¾™ç ´åæ–¹å— + Translated: dragongrief - 末影龙破å Description: å…许或ç¦æ­¢æœ«å½±é¾™ç ´åæ–¹å— Info: - '&e使用方法: &6/res set <领地å称> dragongrief true/false/remove=移除' day: - Translated: day - 设置领地内的时间 - Description: 设置领地内的时间 + Translated: day - 设置领地时间为白天 + Description: 设置领地时间为白天 Info: - '&e使用方法: &6/res set <领地å称> day true/false/remove=移除' dye: - Translated: dye - å…许或ç¦æ­¢ç»™ç¾ŠæŸ“色 + Translated: dye - 给羊染色 Description: å…许或ç¦æ­¢ç»™ç¾ŠæŸ“色 Info: - '&e使用方法: &6/res set/pset <领地å称> dye true/false/remove=移除' damage: - Translated: damage - å…许或ç¦æ­¢é¢†åœ°å†…的实体造æˆä¼¤å®³ - Description: å…许或ç¦æ­¢é¢†åœ°å†…的实体造æˆä¼¤å®³ + Translated: damage - 实体伤害 + Description: å…许或ç¦æ­¢å®žä½“造æˆä¼¤å®³ Info: - '&e使用方法: &6/res set <领地å称> damage true/false/remove=移除' decay: - Translated: decay - å…许或ç¦æ­¢é¢†åœ°å†…çš„æ ‘å¶å‡‹è½ - Description: å…许或ç¦æ­¢é¢†åœ°å†…çš„æ ‘å¶å‡‹è½ + Translated: decay - æ ‘å¶å‡‹è½ + Description: å¼€å¯æˆ–关闭树å¶å‡‹è½ Info: - '&e使用方法: &6/res set <领地å称> decay true/false/remove=移除' destroy: - Translated: destroy - å…许或ç¦æ­¢ç ´åæ–¹å—,会覆盖buildæƒé™ - Description: å…许或ç¦æ­¢ç ´åæ–¹å—,会覆盖buildæƒé™ + Translated: destroy - ç ´åæ–¹å—, 覆盖buildæƒé™ + Description: å…许或ç¦æ­¢ç ´åæ–¹å—, 覆盖buildæƒé™ Info: - '&e使用方法: &6/res set/pset <领地å称> destroy true/false/remove=移除' dryup: - Translated: dryup - å…许或ç¦æ­¢è€•åœ°å¹²æž¯ - Description: å…许或ç¦æ­¢è€•åœ°å¹²æž¯ + Translated: dryup - 耕地干涸 + Description: å…许或ç¦æ­¢è€•åœ°å¹²æ¶¸ Info: - '&e使用方法: &6/res set <领地å称> dryup true/false/remove=移除' diode: - Translated: diode - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨çº¢çŸ³ä¸­ç»§å™¨ - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨çº¢çŸ³ä¸­ç»§å™¨ + Translated: diode - 使用红石中继器 + Description: å…许或ç¦æ­¢ä½¿ç”¨çº¢çŸ³ä¸­ç»§å™¨ Info: - '&e使用方法: &6/res set/pset <领地å称> diode true/false/remove=移除' door: - Translated: door - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é—¨å’Œæ´»æ¿é—¨ - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é—¨å’Œæ´»æ¿é—¨ + Translated: door - 使用门和活æ¿é—¨ + Description: å…许或ç¦æ­¢ä½¿ç”¨é—¨å’Œæ´»æ¿é—¨ Info: - '&e使用方法: &6/res set/pset <领地å称> door true/false/remove=移除' egg: - Translated: egg - å…许或ç¦æ­¢ä¸Žé¾™è›‹äº¤äº’ + Translated: egg - 与龙蛋交互 Description: å…许或ç¦æ­¢ä¸Žé¾™è›‹äº¤äº’ Info: - '&e使用方法: &6/res set/pset <领地å称> egg true/false/remove=移除' enchant: - Translated: enchant - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° + Translated: enchant - ä½¿ç”¨é™„é­”å° + Description: å…许或ç¦æ­¢ä½¿ç”¨é™„é­”å° Info: - '&e使用方法: &6/res set/pset <领地å称> enchant true/false/remove=移除' explode: - Translated: explode - å…许或ç¦æ­¢é¢†åœ°å†…的爆炸 - Description: å…许或ç¦æ­¢é¢†åœ°å†…的爆炸 + Translated: explode - 爆炸 + Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…爆炸 Info: - '&e使用方法: &6/res set <领地å称> explode true/false/remove=移除' elytra: - Translated: elytra - å…许或ä¸å…许在领地中使用鞘翅 - Description: å…许或ä¸å…许在领地中使用鞘翅 + Translated: elytra - 使用鞘翅 + Description: å…许或ç¦æ­¢åœ¨é¢†åœ°ä¸­ä½¿ç”¨éž˜ç¿… Info: - '&e使用方法: &6/res set/pset <领地å称> elytra true/false/remove=移除' enderpearl: - Translated: enderpearl - å…许或ç¦æ­¢é€šè¿‡æœ«å½±çç ä¼ é€åˆ°é¢†åœ° - Description: å…许或ç¦æ­¢é€šè¿‡æœ«å½±çç ä¼ é€åˆ°é¢†åœ° + Translated: enderpearl - 使用末影çç ä¼ é€ + Description: å…许或ç¦æ­¢ä½¿ç”¨æœ«å½±çç ä¼ é€åˆ°é¢†åœ° Info: - '&e使用方法: &6/res set/pset <领地å称> enderpearl true/false/remove=移除' fallinprotection: - Translated: fallinprotection - å…许或ç¦æ­¢æ–¹å—从领地上方掉è½åˆ°é¢†åœ°å†… - Description: å…许或ç¦æ­¢æ–¹å—从领地上方掉è½åˆ°é¢†åœ°å†…(例如沙å­å’Œæ²™ç ¾) + Translated: fallinprotection - 阻止方å—从领地外掉è½åˆ°é¢†åœ°å†… + Description: 阻止或å…许方å—从领地外掉è½åˆ°é¢†åœ°å†…(例如沙å­å’Œæ²™ç ¾) Info: - '&e使用方法: &6/res set <领地å称> fallinprotection true/false/remove=移除' falldamage: - Translated: falldamage - å…许或ç¦æ­¢é¢†åœ°å†…çš„è·Œè½ä¼¤å®³ - Description: å…许或ç¦æ­¢é¢†åœ°å†…çš„è·Œè½ä¼¤å®³ + Translated: falldamage - è·Œè½ä¼¤å®³ + Description: å¼€å¯æˆ–关闭跌è½ä¼¤å®³ Info: - '&e使用方法: &6/res set <领地å称> falldamage true/false/remove=移除' feed: - Translated: feed - å…许或ç¦æ­¢å–‚食 - Description: 如果å…许将使领地为其居ä½è€…æ供食物 + Translated: feed - 自动回å¤é¥±é£Ÿåº¦ + Description: å¼€å¯æˆ–关闭为领地内玩家自动回å¤é¥±é£Ÿåº¦ Info: - '&e使用方法: &6/res set <领地å称> feed true/false/remove=移除' friendlyfire: - Translated: friendlyfire - å…许或ç¦æ­¢å‹å†›å¼€ç«(待实测) - Description: å…许或ä¸å…许å‹å†›å¼€ç«(待实测) + Translated: friendlyfire - 队å‹ä¼¤å®³(待实测) + Description: å¼€å¯æˆ–关闭队å‹ä¼¤å®³(待实测) Info: - '&e使用方法: &6/res pset <领地å称> friendlyfire true/false/remove=移除' fireball: - Translated: fireball - å…许或ç¦æ­¢ç«çƒ - Description: å…许或ç¦æ­¢ç«çƒ,当设置为True或remove的时候为å…许 + Translated: fireball - 使用ç«ç„°å¼¹ + Description: å…许或ç¦æ­¢ç«ç„°å¼¹, 当设置为True或remove的时候为å…许 Info: - '&e使用方法: &6/res set <领地å称> fireball true/false/remove=移除' firespread: - Translated: firespread - å…许或ç¦æ­¢ç«ç„°è”“延 - Description: å…许或ç¦æ­¢ç«ç„°è”“延,当设置为True或remove的时候为å…许 + Translated: firespread - ç«ç„°è”“延 + Description: å…许或ç¦æ­¢ç«ç„°è”“延, 当设置为True或remove的时候为å…许 Info: - '&e使用方法: &6/res set <领地å称> firespread true/false/remove=移除' flowinprotection: - Translated: flowinprotection - å…许或ç¦æ­¢æ¶²ä½“从领地外æµå‘领地内 - Description: å…许或ç¦æ­¢æ¶²ä½“从领地外æµå‘领地内,当设置为True或remove的时候为å…许 + Translated: flowinprotection - 阻止液体从领地外æµå‘领地内 + Description: 阻止或å…许液体从领地外æµå‘领地内, 当设置为True或remove的时候为å…许 Info: - '&e使用方法: &6/res set <领地å称> flowinprotection true/false/remove=移除' flow: - Translated: flow - å…许或ç¦æ­¢æ¶²ä½“æµåŠ¨ - Description: å…许或ç¦æ­¢æ¶²ä½“æµåŠ¨ + Translated: flow - 液体æµåŠ¨ + Description: å…许或ç¦æ­¢é¢†åœ°å†…液体扩散 Info: - '&e使用方法: &6/res set <领地å称> flow true/false/remove=移除' flowerpot: - Translated: flowerpot - å…许或ç¦æ­¢ä¸ŽèŠ±ç›†äº¤äº’ + Translated: flowerpot - 与花盆交互 Description: å…许或ç¦æ­¢ä¸ŽèŠ±ç›†äº¤äº’ Info: - '&e使用方法: &6/res set/pset <领地å称> flowerpot true/false/remove=移除' grow: - Translated: grow - å…许或ç¦æ­¢æ¤ç‰©ç”Ÿé•¿ + Translated: grow - æ¤ç‰©ç”Ÿé•¿ Description: å…许或ç¦æ­¢æ¤ç‰©ç”Ÿé•¿ Info: - '&e使用方法: &6/res set <领地å称> grow true/false/remove=移除' glow: - Translated: glow - å…许或ç¦æ­¢çŽ©å®¶è¿›å…¥é¢†åœ°æ—¶å‘å…‰ - Description: å…许或ç¦æ­¢çŽ©å®¶è¿›å…¥é¢†åœ°æ—¶å‘å…‰ + Translated: glow - 使玩家进入领地时å‘å…‰ + Description: 使玩家进入领地时å‘å…‰ Info: - '&e使用方法: &6/res set <领地å称> glow true/false/remove=移除' hotfloor: - Translated: hotfloor - å…许或ç¦æ­¢åœ¨å²©æµ†æ–¹å—上行走造æˆçš„伤害 - Description: å…许或ç¦æ­¢åœ¨å²©æµ†æ–¹å—上行走造æˆçš„伤害 + Translated: hotfloor - 岩浆å—伤害 + Description: å¼€å¯æˆ–关闭岩浆å—造æˆçš„伤害 Info: - '&e使用方法: &6/res set <领地å称> hotfloor true/false/remove=移除' hidden: - Translated: hidden - 在"list"或"listall"命令中éšè—此领地 + Translated: hidden - 在领地列表中éšè—此领地 Description: 在"list"或"listall"命令中éšè—此领地 Info: - '&e使用方法: &6/res set <领地å称> hidden true/false/remove=移除' hook: - Translated: hook - å…许或ç¦æ­¢é±¼ç«¿é’“到实体 - Description: å…许或ç¦æ­¢é±¼ç«¿é’“到实体 + Translated: hook - 使用鱼竿钓到实体 + Description: å…许或ç¦æ­¢ä½¿ç”¨é±¼ç«¿é’“到实体 Info: - '&e使用方法: &6/res set/pset <领地å称> hook true/false/remove=移除' healing: - Translated: healing - å…许或ç¦æ­¢é¢†åœ°æ²»ç–—领地居ä½è€… - Description: å…许或ç¦æ­¢é¢†åœ°æ²»ç–—领地居ä½è€… + Translated: healing - 自动回å¤ç”Ÿå‘½å€¼ + Description: å¼€å¯æˆ–关闭为领地内玩家自动回å¤ç”Ÿå‘½å€¼ Info: - '&e使用方法: &6/res set <领地å称> healing true/false/remove=移除' iceform: - Translated: iceform - å…许或ç¦æ­¢ç»“冰 - Description: å…许或ç¦æ­¢ç»“冰 + Translated: iceform - 水结冰 + Description: å…许或ç¦æ­¢æ°´ç»“冰 Info: - '&e使用方法: &6/res set <领地å称> iceform true/false/remove=移除' icemelt: - Translated: icemelt - å…许或ç¦æ­¢å†°èžåŒ– + Translated: icemelt - 冰èžåŒ– Description: å…许或ç¦æ­¢å†°èžåŒ– Info: - '&e使用方法: &6/res set <领地å称> icemelt true/false/remove=移除' ignite: - Translated: ignite - å…许或ç¦æ­¢ç‚¹ç« + Translated: ignite - ç‚¹ç« Description: å…许或ç¦æ­¢ç‚¹ç« Info: - '&e使用方法: &6/res set/pset <领地å称> ignite true/false/remove=移除' itemdrop: - Translated: itemdrop - å…许或ç¦æ­¢ç‰©å“æŽ‰è½ + Translated: itemdrop - 物å“æŽ‰è½ Description: å…许或ç¦æ­¢ç‰©å“æŽ‰è½ Info: - '&e使用方法: &6/res set/pset <领地å称> itemdrop true/false/remove=移除' itempickup: - Translated: itempickup - å…许或拒ç»é¢†å–ç‰©å“ - Description: å…许或拒ç»é¢†å–ç‰©å“ + Translated: itempickup - æ¡èµ·ç‰©å“ + Description: å…许或ç¦æ­¢æ¡èµ·ç‰©å“ Info: - '&e使用方法: &6/res set/pset <领地å称> itempickup true/false/remove=移除' jump2: - Translated: jump2 - å…许或ç¦æ­¢çŽ©å®¶è·³è·ƒé«˜åº¦åœ¨ä¸¤ä¸ªæ–¹å—以上 + Translated: jump2 - 跳跃两格高 Description: å…许或ç¦æ­¢çŽ©å®¶è·³è·ƒé«˜åº¦åœ¨ä¸¤ä¸ªæ–¹å—以上 Info: - '&e使用方法: &6/res set <领地å称> jump2 true/false/remove=移除' jump3: - Translated: jump3 - å…许或ç¦æ­¢çŽ©å®¶è·³è·ƒé«˜åº¦åœ¨ä¸‰ä¸ªæ–¹å—以上 + Translated: jump3 - 跳跃三格高 Description: å…许或ç¦æ­¢çŽ©å®¶è·³è·ƒé«˜åº¦åœ¨ä¸‰ä¸ªæ–¹å—以上 Info: - '&e使用方法: &6/res set <领地å称> jump3 true/false/remove=移除' keepinv: - Translated: keepinv - å…许或ç¦æ­¢çŽ©å®¶åœ¨æ­»åŽä¿ç•™èƒŒåŒ… - Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨æ­»åŽä¿ç•™èƒŒåŒ… + Translated: keepinv - 物å“æ ä¸æŽ‰è½ + Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨æ­»åŽä¿ç•™ç‰©å“æ  Info: - '&e使用方法: &6/res set <领地å称> keepinv true/false/remove=移除' keepexp: - Translated: keepexp - å…许或ç¦æ­¢çŽ©å®¶åœ¨æ­»åŽä¿ç•™ç­‰çº§ - Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨æ­»åŽä¿ç•™ç­‰çº§ + Translated: keepexp - ç»éªŒå€¼ä¸æŽ‰è½ + Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨æ­»åŽä¿ç•™ç»éªŒå€¼ Info: - '&e使用方法: &6/res set <领地å称> keepexp true/false/remove=移除' lavaflow: - Translated: lavaflow - å…许或ç¦æ­¢ç†”浆æµåŠ¨ - Description: å…许或ç¦æ­¢ç†”浆æµåŠ¨,覆盖flowæƒé™ + Translated: lavaflow - 岩浆æµåŠ¨, 覆盖flowæƒé™ + Description: å…许或ç¦æ­¢é¢†åœ°å†…岩浆扩散, 覆盖flowæƒé™ Info: - '&e使用方法: &6/res set <领地å称> lavaflow true/false/remove=移除' leash: - Translated: leash - å…许或ç¦æ­¢æ‹´ç»³ - Description: å…许或ç¦æ­¢æ‹´ç»³ + Translated: leash - 使用拴绳 + Description: å…许或ç¦æ­¢å¯¹åŠ¨ç‰©ä½¿ç”¨æ‹´ç»³ Info: - '&e使用方法: &6/res set/pset <领地å称> leash true/false/remove=移除' lever: - Translated: lever - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æ‹‰æ† - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æ‹‰æ† + Translated: lever - ä½¿ç”¨æ‹‰æ† + Description: å…许或ç¦æ­¢ä½¿ç”¨æ‹‰æ† Info: - '&e使用方法: &6/res set/pset <领地å称> lever true/false/remove=移除' mobexpdrop: - Translated: mobexpdrop - å…许或ç¦æ­¢æ€ªç‰©ç»éªŒæŽ‰è½ - Description: å…许或ç¦æ­¢æ€ªç‰©ç»éªŒæŽ‰è½ + Translated: mobexpdrop - 怪物掉è½ç»éªŒ + Description: å…许或ç¦æ­¢æ€ªç‰©æŽ‰è½ç»éªŒ Info: - '&e使用方法: &6/res set <领地å称> mobexpdrop true/false/remove=移除' mobitemdrop: - Translated: mobitemdrop - å…许或ç¦æ­¢æ€ªç‰©ç‰©å“æŽ‰è½ - Description: å…许或ç¦æ­¢æ€ªç‰©ç‰©å“æŽ‰è½ + Translated: mobitemdrop - 怪物掉è½ç‰©å“ + Description: å…许或ç¦æ­¢æ€ªç‰©æŽ‰è½ç‰©å“ Info: - '&e使用方法: &6/res set <领地å称> mobitemdrop true/false/remove=移除' mobkilling: - Translated: mobkilling - å…许或ç¦æ­¢æ€æ­»æ€ªç‰© + Translated: mobkilling - æ€æ­»æ€ªç‰© Description: å…许或ç¦æ­¢æ€æ­»æ€ªç‰© Info: - '&e使用方法: &6/res set/pset <领地å称> mobkilling true/false/remove=移除' monsters: - Translated: monsters - å…许或ç¦æ­¢æ€ªç‰©ç”Ÿæˆ + Translated: monsters - æ€ªç‰©ç”Ÿæˆ Description: å…许或ç¦æ­¢æ€ªç‰©ç”Ÿæˆ Info: - '&e使用方法: &6/res set <领地å称> monsters true/false/remove=移除' move: - Translated: move - å…许或ç¦æ­¢åœ¨é¢†åœ°å†…移动 + Translated: move - 在领地内移动 Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…移动 Info: - '&e使用方法: &6/res set/pset <领地å称> move true/false/remove=移除' nametag: - Translated: nametag - å…许或ä¸å…许使用å牌(待实测) - Description: å…许或ä¸å…许使用å牌(待实测) + Translated: nametag - 使用命å牌(待实测) + Description: å…许或ç¦æ­¢ä½¿ç”¨å‘½å牌(待实测) Info: - '&e使用方法: &6/res set/pset <领地å称> nametag true/false/remove=移除' nanimals: - Translated: nanimals - å…许或ç¦æ­¢è‡ªç„¶çš„åŠ¨ç‰©ç”Ÿæˆ - Description: å…许或ç¦æ­¢è‡ªç„¶çš„åŠ¨ç‰©ç”Ÿæˆ + Translated: nanimals - 自然生æˆåŠ¨ç‰© + Description: å…许或ç¦æ­¢è‡ªç„¶ç”ŸæˆåŠ¨ç‰© Info: - '&e使用方法: &6/res set <领地å称> nanimals true/false/remove=移除' nmonsters: - Translated: nmonsters - å…许或ç¦æ­¢è‡ªç„¶æ€ªç‰©ç”Ÿæˆ - Description: å…许或ç¦æ­¢è‡ªç„¶æ€ªç‰©ç”Ÿæˆ + Translated: nmonsters - 自然生æˆæ€ªç‰© + Description: å…许或ç¦æ­¢è‡ªç„¶ç”Ÿæˆæ€ªç‰© Info: - '&e使用方法: &6/res set <领地å称> nmonsters true/false/remove=移除' night: - Translated: night - 设置领地的时间为晚上 - Description: 设置领地的时间为晚上 + Translated: night - 设置领地时间为晚上 + Description: 设置领地时间为晚上 Info: - '&e使用方法: &6/res set <领地å称> night true/false/remove=移除' nofly: - Translated: nofly - å…许或ç¦æ­¢çŽ©å®¶é£žè¿›é¢†åœ° - Description: å…许或ç¦æ­¢çŽ©å®¶é£žè¿›é¢†åœ° + Translated: nofly - ç¦æ­¢åœ¨é¢†åœ°å†…飞行 + Description: ç¦æ­¢æˆ–å…许在领地内飞行 Info: - '&e使用方法: &6/res set/pset <领地å称> nofly true/false/remove=移除' fly: - Translated: fly - å…许或ç¦æ­¢é¢†åœ°å†…飞行 - Description: å…许或ç¦æ­¢é¢†åœ°å†…飞行 + Translated: fly - 自动开å¯é£žè¡Œ + Description: å¼€å¯æˆ–关闭在领地内自动开å¯é£žè¡Œ Info: - '&e使用方法: &6/res set/pset <领地å称> fly true/false/remove=移除' nomobs: - Translated: nomobs - å…许或ç¦æ­¢æ€ªç‰©è¿›å…¥é¢†åœ° - Description: å…许或ç¦æ­¢æ€ªç‰©è¿›å…¥é¢†åœ° + Translated: nomobs - 阻止怪物进入领地 + Description: 阻止或å…许怪物进入领地 Info: - '&e使用方法: &6/res set <领地å称> nomobs true/false/remove=移除' note: - Translated: note - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³ç¬¦ç›’ - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³ç¬¦ç›’ + Translated: note - 使用音符盒 + Description: å…许或ç¦æ­¢ä½¿ç”¨éŸ³ç¬¦ç›’ Info: - '&e使用方法: &6/res set/pset <领地å称> note true/false/remove=移除' nodurability: - Translated: nodurability - å…许或ç¦æ­¢ç‰©å“è€ä¹…度æŸè€— - Description: å…许或ç¦æ­¢ç‰©å“è€ä¹…度æŸè€— + Translated: nodurability - 关闭物å“è€ä¹…度æŸè€— + Description: 关闭或开å¯ç‰©å“è€ä¹…度æŸè€— Info: - '&e使用方法: &6/res set <领地å称> nodurability true/false/remove=移除' overridepvp: - Translated: overridepvp - å…许或ç¦æ­¢å…¶ä»–æ’件的PVPä¿æŠ¤ - Description: å…许或ç¦æ­¢å…¶ä»–æ’件的PVPä¿æŠ¤ + Translated: overridepvp - 其他æ’件的PVPä¿æŠ¤ + Description: å¼€å¯æˆ–关闭其他æ’件的PVPä¿æŠ¤ Info: - '&e使用方法: &6/res set <领地å称> overridepvp true/false/remove=移除' pressure: - Translated: pressure - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åŽ‹åŠ›æ¿ - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åŽ‹åŠ›æ¿ + Translated: pressure - ä½¿ç”¨åŽ‹åŠ›æ¿ + Description: å…许或ç¦æ­¢ä½¿ç”¨åŽ‹åŠ›æ¿ Info: - '&e使用方法: &6/res set/pset <领地å称> pressure true/false/remove=移除' piston: - Translated: piston - å…许或ç¦æ­¢ä½¿ç”¨æ´»å¡ž - Description: å…许或ç¦æ­¢ä½¿ç”¨æ´»å¡ž + Translated: piston - 使用活塞 + Description: å…许或ç¦æ­¢æ´»å¡žå·¥ä½œ Info: - '&e使用方法: &6/res set <领地å称> piston true/false/remove=移除' pistonprotection: - Translated: pistonprotection - å…许或ç¦æ­¢é¢†åœ°å¤–的活塞移动至领地内 - Description: å…许或ç¦æ­¢é¢†åœ°å¤–的活塞移动至领地内 + Translated: pistonprotection - 阻止领地外的活塞推/拉至领地内 + Description: 阻止或å…许领地外的活塞推/拉至领地内 Info: - '&e使用方法: &6/res set <领地å称> pistonprotection true/false/remove=移除' place: - Translated: place - å…许或ç¦æ­¢æ–¹å—的放置 - Description: å…许或ç¦æ­¢æ–¹å—的放置,覆盖buildæƒé™ + Translated: place - 放置方å—, 覆盖buildæƒé™ + Description: å…许或ç¦æ­¢æ”¾ç½®æ–¹å—, 覆盖buildæƒé™ Info: - '&e使用方法: &6/res set/pset <领地å称> place true/false/remove=移除' pvp: - Translated: pvp - å…许或ç¦æ­¢é¢†åœ°ä¸­PVP - Description: å…许或ç¦æ­¢é¢†åœ°ä¸­PVP + Translated: pvp - PVP + Description: å…许或ç¦æ­¢PVP Info: - '&e使用方法: &6/res set <领地å称> pvp true/false/remove=移除' rain: @@ -1444,23 +1439,23 @@ CommandHelp: Info: - '&e使用方法: &6/res set <领地å称> rain true/false/remove=移除' respawn: - Translated: respawn - å…许或ç¦æ­¢è‡ªåŠ¨å¤æ´»ä¸€ä¸ªçŽ©å®¶ + Translated: respawn - 自动å¤æ´»ä¸€ä¸ªçŽ©å®¶ Description: å…许或ç¦æ­¢è‡ªåŠ¨å¤æ´»ä¸€ä¸ªçŽ©å®¶ Info: - '&e使用方法: &6/res set <领地å称> respawn true/false/remove=移除' riding: - Translated: riding - å…许或ç¦æ­¢éª‘马 + Translated: riding - 骑马 Description: å…许或ç¦æ­¢éª‘马 Info: - '&e使用方法: &6/res set/pset <领地å称> riding true/false/remove=移除' shoot: - Translated: shoot - å…许或ç¦æ­¢åœ¨é¢†åœ°å†…使用弓箭 - Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…使用弓箭 + Translated: shoot - 使用弓箭射击 + Description: å…许或ç¦æ­¢ä½¿ç”¨å¼“箭射击 Info: - '&e使用方法: &6/res set <领地å称> shoot true/false/remove=移除' sun: - Translated: sun - 设置领地内的天气为天晴 - Description: 设置领地内的天气为天晴 + Translated: sun - 设置领地天气为晴天 + Description: 设置领地天气为晴天 Info: - '&e使用方法: &6/res set <领地å称> sun true/false/remove=移除' shop: @@ -1469,12 +1464,12 @@ CommandHelp: Info: - '&e使用方法: &6/res set <领地å称> shop true/false/remove=移除' snowtrail: - Translated: snowtrail - å…许或ç¦æ­¢é›ªå‚€å„¡ç§»åŠ¨é€ æˆçš„雪迹 - Description: å…许或ç¦æ­¢é›ªå‚€å„¡ç§»åŠ¨é€ æˆçš„雪迹 + Translated: snowtrail - 雪傀儡生æˆé›ªè¿¹ + Description: å…许或ç¦æ­¢é›ªå‚€å„¡ç”Ÿæˆé›ªè¿¹ Info: - '&e使用方法: &6/res set <领地å称> snowtrail true/false/remove=移除' spread: - Translated: spread - å…许或ç¦æ­¢æ–¹å—蔓延 + Translated: spread - æ–¹å—蔓延 Description: å…许或ç¦æ­¢æ–¹å—蔓延 Info: - '&e使用方法: &6/res set <领地å称> spread true/false/remove=移除' @@ -1484,22 +1479,22 @@ CommandHelp: Info: - '&e使用方法: &6/res set <领地å称> snowball true/false/remove=移除' sanimals: - Translated: sanimals - å…许或ç¦æ­¢åŠ¨ç‰©çš„蛋生æˆåŠ¨ç‰© - Description: å…许或ç¦æ­¢åŠ¨ç‰©çš„蛋生æˆåŠ¨ç‰© + Translated: sanimals - 刷怪笼或刷怪蛋生æˆåŠ¨ç‰© + Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼æˆ–刷怪蛋生æˆåŠ¨ç‰© Info: - '&e使用方法: &6/res set <领地å称> sanimals true/false/remove=移除' shear: - Translated: shear - å…许或ç¦æ­¢å‰ªç¾Šæ¯› + Translated: shear - 剪羊毛 Description: å…许或ç¦æ­¢å‰ªç¾Šæ¯› Info: - '&e使用方法: &6/res set/pset <领地å称> shear true/false/remove=移除' smonsters: - Translated: smonsters - å…许或ç¦æ­¢æ€ªç‰©çš„蛋生æˆæ€ªç‰© - Description: å…许或ç¦æ­¢æ€ªç‰©çš„蛋生æˆæ€ªç‰© + Translated: smonsters - 刷怪笼或刷怪蛋生æˆæ€ªç‰© + Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼æˆ–刷怪蛋生æˆæ€ªç‰© Info: - '&e使用方法: &6/res set <领地å称> smonsters true/false/remove=移除' subzone: - Translated: subzone - å…许或ç¦æ­¢åˆ›å»ºå­é¢†åœ° + Translated: subzone - 创建å­é¢†åœ° Description: å…许或ç¦æ­¢åˆ›å»ºå­é¢†åœ° Info: - '&e使用方法: &6/res set/pset <领地å称> subzone true/false/remove=移除' @@ -1509,28 +1504,28 @@ CommandHelp: Info: - '&e使用方法: &6/res set <领地å称> title true/false/remove=移除' table: - Translated: table - å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° + Translated: table - ä½¿ç”¨å·¥ä½œå° + Description: å…许或ç¦æ­¢ä½¿ç”¨å·¥ä½œå° Info: - '&e使用方法: &6/res set/pset <领地å称> table true/false/remove=移除' tnt: - Translated: tnt - å…许或ç¦æ­¢TNT爆炸 + Translated: tnt - TNT爆炸 Description: å…许或ç¦æ­¢TNT爆炸 Info: - '&e使用方法: &6/res set <领地å称> tnt true/false/remove=移除' tp: - Translated: tp - å…许或ç¦æ­¢ä¼ é€åˆ°é¢†åœ° + Translated: tp - ä¼ é€åˆ°é¢†åœ° Description: å…许或ç¦æ­¢ä¼ é€åˆ°é¢†åœ° Info: - '&e使用方法: &6/res set/pset <领地å称> tp true/false/remove=移除' trade: - Translated: trade - å…许或ç¦æ­¢åœ¨é¢†åœ°å†…与æ‘民进行交易 - Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…与æ‘民进行交易 + Translated: trade - 与æ‘民交易 + Description: å…许或ç¦æ­¢ä¸Žæ‘民交易 Info: - '&e使用方法: &6/res set/pset <领地å称> trade true/false/remove=移除' trample: - Translated: trample - å…许或ç¦æ­¢åœ¨é¢†åœ°å†…è·µè¸ä½œç‰© - Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…è·µè¸ä½œç‰© + Translated: trample - 踩è¸è€•åœ° + Description: å…许或ç¦æ­¢è¸©è¸è€•åœ° Info: - '&e使用方法: &6/res set <领地å称> trample true/false/remove=移除' use: @@ -1539,13 +1534,13 @@ CommandHelp: Info: - '&e使用方法: &6/res set/pset <领地å称> use true/false/remove=移除' vehicledestroy: - Translated: vehicledestroy - å…许或ç¦æ­¢ç ´å载具 + Translated: vehicledestroy - ç ´å载具 Description: å…许或ç¦æ­¢ç ´å载具 Info: - '&e使用方法: &6/res set/pset <领地å称> vehicledestroy true/false/remove=移除' witherspawn: Translated: witherspawn - å…许或ç¦æ­¢å‡‹é›¶ç”Ÿæˆ - Description: å…许或ç¦æ­¢å‡‹é›¶çš„ç”Ÿæˆ + Description: å…许或ç¦æ­¢å‡‹é›¶ç”Ÿæˆ Info: - '&e使用方法: &6/res set <领地å称> witherspawn true/false/remove=移除' phantomspawn: @@ -1554,28 +1549,28 @@ CommandHelp: Info: - '&e使用方法: &6/res set <领地å称> phantomspawn true/false/remove=移除' witherdamage: - Translated: witherdamage - å…许或ç¦æ­¢é¢†åœ°å†…的凋零造æˆä¼¤å®³ - Description: å…许或ç¦æ­¢é¢†åœ°å†…的凋零造æˆä¼¤å®³ + Translated: witherdamage - å…许或ç¦æ­¢å‡‹é›¶é€ æˆä¼¤å®³ + Description: å…许或ç¦æ­¢å‡‹é›¶é€ æˆä¼¤å®³ Info: - '&e使用方法: &6/res set <领地å称> witherdamage true/false/remove=移除' witherdestruction: - Translated: witherdestruction - å…许或ç¦æ­¢é¢†åœ°å†…凋零破åæ–¹å— - Description: å…许或ç¦æ­¢é¢†åœ°å†…凋零破åæ–¹å— + Translated: witherdestruction - å…许或ç¦æ­¢å‡‹é›¶ç ´åæ–¹å— + Description: å…许或ç¦æ­¢å‡‹é›¶ç ´åæ–¹å— Info: - '&e使用方法: &6/res set <领地å称> witherdestruction true/false/remove=移除' waterflow: - Translated: waterflow - å…许或ç¦æ­¢æ°´æµ - Description: å…许或ç¦æ­¢æ°´æµï¼Œè¦†ç›–flowæƒé™ + Translated: waterflow - æ°´æµåŠ¨, 覆盖flowæƒé™ + Description: å…许或ç¦æ­¢æ°´æ‰©æ•£, 覆盖flowæƒé™ Info: - '&e使用方法: &6/res set <领地å称> waterflow true/false/remove=移除' wspeed1: - Translated: wspeed1 - 设置领地内的移动速度为0.25 - Description: 设置领地内的移动速度为0.25 + Translated: wspeed1 - 设置移动速度为0.25 + Description: 设置移动速度为0.25 Info: - '&e使用方法: &6/res set <领地å称> wspeed1 true/false/remove=移除' wspeed2: - Translated: wspeed2 - 设置领地内的移动速度为1.0 - Description: 设置领地内的移动速度为1.0 + Translated: wspeed2 - 设置移动速度为1.0 + Description: 设置移动速度为1.0 Info: - '&e使用方法: &6/res set <领地å称> wspeed2 true/false/remove=移除' remove: From 689a218d798c6295a106db580f665dfb4e1025f7 Mon Sep 17 00:00:00 2001 From: kqakqakqa <58761476+kqakqakqa@users.noreply.github.com> Date: Sat, 17 Sep 2022 02:32:25 +0800 Subject: [PATCH 0981/1142] Updated Chinese language From be3025bfe94101e83fbc08a7d3da7b453455aecd Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 29 Sep 2022 12:30:23 +0300 Subject: [PATCH 0982/1142] Optimizing player update --- .../bukkit/residence/containers/ResidencePlayer.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index e2bccbc8d..d33bc46c5 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -68,10 +68,7 @@ public ResidencePlayer(Player player) { } public boolean isOnline() { - this.updatePlayer(); - if (this.player != null && this.player.isOnline()) - return true; - return false; + return this.player != null && this.player.isOnline() || Bukkit.getPlayer(this.uuid) != null; } public ResidencePlayer(String userName, UUID uuid) { @@ -381,7 +378,8 @@ public String getPlayerName() { } public String getName() { - this.updatePlayer(); + if (player == null) + this.updatePlayer(); return userName; } @@ -396,7 +394,8 @@ public UUID getUuid() { } public Player getPlayer() { - this.updatePlayer(); + if (player == null) + this.updatePlayer(); return player; } From 8a4d2d96604c9a85d0ac610c842e96f0ae6310e1 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 20 Oct 2022 15:46:01 +0300 Subject: [PATCH 0983/1142] Not saving ChannelColor if its default one --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 7f11fbe27..0e3554aaa 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1623,7 +1623,7 @@ public Map save() { if (!ChatPrefix.equals("")) root.put("ChatPrefix", ChatPrefix); - if (!ChannelColor.getCleanName().equals(Residence.getInstance().getConfigManager().getChatColor().getName()) + if (!ChannelColor.getName().equalsIgnoreCase(Residence.getInstance().getConfigManager().getChatColor().getName()) && !ChannelColor.getName().equalsIgnoreCase("WHITE")) { root.put("ChannelColor", ChannelColor.getName()); } From 806c37ab323ea3d431715005092d525993cda0df Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 20 Oct 2022 15:52:43 +0300 Subject: [PATCH 0984/1142] Only saving messages ID if its over 1, defaulting to 1 if not present --- .../residence/protection/ClaimedResidence.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 0e3554aaa..ca90206be 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1595,7 +1595,8 @@ public Map save() { if (leaveMessage != null) root.put("LeaveMessage", leaveMessage); } else { - root.put("Messages", min.getId()); + if (min.getId() > 1) + root.put("Messages", min.getId()); } } } else { @@ -1816,10 +1817,12 @@ public static ClaimedResidence load(String worldName, Map root, res.leaveMessage = (String) root.get("LeaveMessage"); if (root.containsKey("Messages") && root.get("Messages") instanceof Integer) { - res.enterMessage = Residence.getInstance().getResidenceManager().getChacheMessageEnter(worldName, - (Integer) root.get("Messages")); - res.leaveMessage = Residence.getInstance().getResidenceManager().getChacheMessageLeave(worldName, - (Integer) root.get("Messages")); + res.enterMessage = Residence.getInstance().getResidenceManager().getChacheMessageEnter(worldName, (Integer) root.get("Messages")); + res.leaveMessage = Residence.getInstance().getResidenceManager().getChacheMessageLeave(worldName, (Integer) root.get("Messages")); + } else { + // Defaulting to first one if not present + res.enterMessage = Residence.getInstance().getResidenceManager().getChacheMessageEnter(worldName, 1); + res.leaveMessage = Residence.getInstance().getResidenceManager().getChacheMessageLeave(worldName, 1); } res.parent = parent; From f1f0ba73772e9f4688778b1501e428e9cb05c1b7 Mon Sep 17 00:00:00 2001 From: Floris Date: Fri, 28 Oct 2022 12:30:48 +0200 Subject: [PATCH 0985/1142] Create README.md - add missing readme.md - adding credits, and links to current resources/oinfo --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..57f207c04 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Residence + +Residence is different from most protection plugins in that it aims for the users to be able to protect their own homes without having to bother the admin to do it. + +Residence has support for a variety of different protection types including preventing movement through areas, all of which can be configured by the land owner, and limited by the admin. + +## Credit + +Original plugin created by bekvon, made premium with their permission to help further developement. + +## Source and Downloads + +- Github Source code: https://github.com/Zrips/Residence +- Premium release on SpigotMC: https://www.spigotmc.org/resources/11480/ +- Precompiled builds: https://zrips.net/Residence/ + +## Misc. + +More information about this plugin, changelogs, wiki: + +- Release thread on SpigotMC: https://www.spigotmc.org/resources/11480/ +- Changelogs: https://www.spigotmc.org/resources/11480/updates +- Documentation: https://www.zrips.net/residence/ From 5965d93729a83f66acc700c337eebb1ea80ed621 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 31 Oct 2022 15:26:37 +0200 Subject: [PATCH 0986/1142] Splitting files to be in smaller chunks. --- .../bukkit/residence/ConfigManager.java | 11 + .../bekvon/bukkit/residence/Residence.java | 228 ++++++++++++------ 2 files changed, 169 insertions(+), 70 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 79b0d25c8..dd35911a8 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -98,6 +98,7 @@ public class ConfigManager { protected int leaseCheckInterval; protected int autoSaveInt; protected boolean NewSaveMechanic; + private boolean saveFileSplit; private int ItemPickUpDelay; private boolean ARCCheckCollision; private boolean ARCOldMethod; @@ -884,6 +885,12 @@ public void UpdateConfigFile() { c.addComment("Global.NewSaveMechanic", "New save mechanic can minimize save file couple times and speedup save/load time in general", "Bigger files have bigger impact"); NewSaveMechanic = c.get("Global.NewSaveMechanic", true); + // Defaulting to true from 1.19 version due to snakeyaml limiting file size to 3MB + c.addComment("Global.saveFileSplit", "When enabled we will split residence save files and separate residence messages and flags into their own files", + "This only applies while using NewSaveMechanic", + "STRONGLY recommended to be used on 1.19+ servers"); + saveFileSplit = c.get("Global.saveFileSplit", Version.isCurrentEqualOrHigher(Version.v1_19_R1)); + c.addComment("Global.Backup.AutoCleanUp.Use", "Do you want to automatically remove backup files from main backup folder if they are older than defined day amount"); BackupAutoCleanUpUse = c.get("Global.Backup.AutoCleanUp.Use", false); @@ -2192,6 +2199,10 @@ public boolean isARCOldMethod() { return ARCOldMethod; } + public boolean isSaveFileSplit() { + return saveFileSplit; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index df7c3d42a..262b1148a 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -87,6 +87,7 @@ import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; +import com.bekvon.bukkit.residence.persistance.YMLSaveHelper; import com.bekvon.bukkit.residence.pl3xmap.Pl3xMapListeners; import com.bekvon.bukkit.residence.pl3xmap.Pl3xMapManager; import com.bekvon.bukkit.residence.protection.ClaimedResidence; @@ -1245,39 +1246,86 @@ public boolean isResAdminOn(String player) { return resadminToggle.contains(player); } + + + + private final String flagsFileSuffix = "_Flags"; + private final String messagesFileSuffix = "_Messages"; + + private static void saveFile(File worldFolder, String fileName, String key, Object value) throws IOException { + File ymlFlagsSaveLoc = new File(worldFolder, "res_" + fileName + ".yml"); + File tmpFlagsFile = new File(worldFolder, "tmp_res_" + fileName + ".yml"); + + // Separate Flags file + YMLSaveHelper flagsTemp = new YMLSaveHelper(tmpFlagsFile); + flagsTemp.getRoot().put(key, value); + flagsTemp.save(); + + if (ymlFlagsSaveLoc.isFile()) { + File backupFolder = new File(worldFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "res_" + fileName + ".yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlFlagsSaveLoc.renameTo(backupFile); + } + tmpFlagsFile.renameTo(ymlFlagsSaveLoc); + } + private void saveYml() throws IOException { File saveFolder = new File(dataFolder, "Save"); File worldFolder = new File(saveFolder, "Worlds"); if (!worldFolder.isDirectory()) worldFolder.mkdirs(); - YMLSaveHelper yml; + YMLSaveHelper syml; Map save = rmanager.save(); for (Entry entry : save.entrySet()) { - File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); - File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); - yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); - World world = server.getWorld(entry.getKey()); - if (world != null) - yml.getRoot().put("Seed", world.getSeed()); - if (this.getResidenceManager().getMessageCatch(entry.getKey()) != null) - yml.getRoot().put("Messages", this.getResidenceManager().getMessageCatch(entry.getKey())); - if (this.getResidenceManager().getFlagsCatch(entry.getKey()) != null) - yml.getRoot().put("Flags", this.getResidenceManager().getFlagsCatch(entry.getKey())); - yml.getRoot().put("Residences", entry.getValue()); - yml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(worldFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); - if (backupFile.isFile()) { - backupFile.delete(); + + if (Residence.getInstance().getConfigManager().isSaveFileSplit()) { + + saveFile(worldFolder, entry.getKey(), "Residences", entry.getValue()); + + // Separate Flags file + if (this.getResidenceManager().getFlagsCatch(entry.getKey()) != null) + saveFile(worldFolder, entry.getKey() + flagsFileSuffix, "Flags", this.getResidenceManager().getFlagsCatch(entry.getKey())); + + // Separate Messages file + if (this.getResidenceManager().getMessageCatch(entry.getKey()) != null) + saveFile(worldFolder, entry.getKey() + messagesFileSuffix, "Messages", this.getResidenceManager().getMessageCatch(entry.getKey())); + + } else { + // Older method saving messages and flags into same file + + File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); + File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); + + syml = new YMLSaveHelper(tmpFile); + syml.getRoot().put("Version", saveVersion); + World world = server.getWorld(entry.getKey()); + if (world != null) + syml.getRoot().put("Seed", world.getSeed()); + if (this.getResidenceManager().getMessageCatch(entry.getKey()) != null) + syml.getRoot().put("Messages", this.getResidenceManager().getMessageCatch(entry.getKey())); + if (this.getResidenceManager().getFlagsCatch(entry.getKey()) != null) + syml.getRoot().put("Flags", this.getResidenceManager().getFlagsCatch(entry.getKey())); + + syml.getRoot().put("Residences", entry.getValue()); + syml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(worldFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); } - ymlSaveLoc.renameTo(backupFile); + tmpFile.renameTo(ymlSaveLoc); } - tmpFile.renameTo(ymlSaveLoc); } + YMLSaveHelper yml; // For Sale save File ymlSaveLoc = new File(saveFolder, "forsale.yml"); File tmpFile = new File(saveFolder, "tmp_forsale.yml"); @@ -1358,6 +1406,79 @@ private void saveYml() throws IOException { public final static String saveFilePrefix = "res_"; + private void loadFlags(String worldName, YMLSaveHelper yml) { + if (!yml.getRoot().containsKey("Flags")) + return; + + HashMap c = getResidenceManager().getCacheFlags().get(worldName); + if (c == null) + c = new HashMap(); + Map ms = (Map) yml.getRoot().get("Flags"); + if (ms == null) + return; + + for (Entry one : ms.entrySet()) { + try { + HashMap msgs = (HashMap) one.getValue(); + c.put(one.getKey(), new MinimizeFlags(one.getKey(), msgs)); + } catch (Exception e) { + + } + } + getResidenceManager().getCacheFlags().put(worldName, c); + } + + private void loadMessages(String worldName, YMLSaveHelper yml) { + if (!yml.getRoot().containsKey("Messages")) + return; + + HashMap c = getResidenceManager().getCacheMessages().get(worldName); + if (c == null) + c = new HashMap(); + Map ms = (Map) yml.getRoot().get("Messages"); + if (ms == null) + return; + + for (Entry one : ms.entrySet()) { + try { + Map msgs = (Map) one.getValue(); + c.put(one.getKey(), new MinimizeMessages(one.getKey(), msgs.get("EnterMessage"), msgs.get("LeaveMessage"))); + } catch (Exception e) { + + } + } + getResidenceManager().getCacheMessages().put(worldName, c); + } + + private void loadMessagesAndFlags(String worldName, YMLSaveHelper yml, File worldFolder) { + loadMessages(worldName, yml); + loadFlags(worldName, yml); + + File flagsFile = new File(worldFolder, saveFilePrefix + worldName + flagsFileSuffix + ".yml"); + if (flagsFile.isFile()) { + try { + yml = new YMLSaveHelper(flagsFile); + yml.load(); + if (yml.getRoot() != null) + loadFlags(worldName, yml); + } catch (IOException e) { + e.printStackTrace(); + } + } + + File messagesFile = new File(worldFolder, saveFilePrefix + worldName + messagesFileSuffix + ".yml"); + if (messagesFile.isFile()) { + try { + yml = new YMLSaveHelper(messagesFile); + yml.load(); + if (yml.getRoot() != null) + loadMessages(worldName, yml); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + @SuppressWarnings({ "rawtypes", "unchecked" }) protected boolean loadYml() throws Exception { File saveFolder = new File(dataFolder, "Save"); @@ -1378,61 +1499,28 @@ protected boolean loadYml() throws Exception { for (String worldName : this.getResidenceManager().getWorldNames()) { loadFile = new File(worldFolder, saveFilePrefix + worldName + ".yml"); - if (loadFile.isFile()) { - time = System.currentTimeMillis(); + if (!loadFile.isFile()) + continue; - if (!isDisabledWorld(worldName) && !this.getConfigManager().CleanerStartupLog) - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading save data for world " + worldName + "..."); + time = System.currentTimeMillis(); - yml = new YMLSaveHelper(loadFile); - yml.load(); - if (yml.getRoot() == null) - continue; - - if (yml.getRoot().containsKey("Messages")) { - HashMap c = getResidenceManager().getCacheMessages().get(worldName); - if (c == null) - c = new HashMap(); - Map ms = (Map) yml.getRoot().get("Messages"); - if (ms != null) { - for (Entry one : ms.entrySet()) { - try { - Map msgs = (Map) one.getValue(); - c.put(one.getKey(), new MinimizeMessages(one.getKey(), msgs.get("EnterMessage"), msgs.get("LeaveMessage"))); - } catch (Exception e) { - - } - } - getResidenceManager().getCacheMessages().put(worldName, c); - } - } + if (!isDisabledWorld(worldName) && !this.getConfigManager().CleanerStartupLog) + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loading save data for world " + worldName + "..."); - if (yml.getRoot().containsKey("Flags")) { - HashMap c = getResidenceManager().getCacheFlags().get(worldName); - if (c == null) - c = new HashMap(); - Map ms = (Map) yml.getRoot().get("Flags"); - if (ms != null) { - for (Entry one : ms.entrySet()) { - try { - HashMap msgs = (HashMap) one.getValue(); - c.put(one.getKey(), new MinimizeFlags(one.getKey(), msgs)); - } catch (Exception e) { + yml = new YMLSaveHelper(loadFile); + yml.load(); + if (yml.getRoot() == null) + continue; - } - } - getResidenceManager().getCacheFlags().put(worldName, c); - } - } + loadMessagesAndFlags(worldName, yml, worldFolder); - worlds.put(worldName, yml.getRoot().get("Residences")); + worlds.put(worldName, yml.getRoot().get("Residences")); - int pass = (int) (System.currentTimeMillis() - time); - String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; + int pass = (int) (System.currentTimeMillis() - time); + String PastTime = pass > 1000 ? String.format("%.2f", (pass / 1000F)) + " sec" : pass + " ms"; - if (!isDisabledWorld(worldName) && !this.getConfigManager().CleanerStartupLog) - Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loaded " + worldName + " data. (" + PastTime + ")"); - } + if (!isDisabledWorld(worldName) && !this.getConfigManager().CleanerStartupLog) + Bukkit.getConsoleSender().sendMessage(getPrefix() + " Loaded " + worldName + " data. (" + PastTime + ")"); } getResidenceManager().load(worlds); From e4e5d23eb641bcb57b6336a364f8b607cee6d512 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 31 Oct 2022 15:35:15 +0200 Subject: [PATCH 0987/1142] Resreload command fix --- .../residence/ResidenceCommandListener.java | 571 +++++++++--------- 1 file changed, 288 insertions(+), 283 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 7a9793f58..1e9a0a787 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -22,6 +22,8 @@ import com.bekvon.bukkit.residence.event.ResidenceCommandEvent; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import net.Zrips.CMILib.Logs.CMIDebug; +import net.Zrips.CMILib.Messages.CMIMessages; import net.Zrips.CMILib.RawMessages.RawMessage; public class ResidenceCommandListener implements CommandExecutor { @@ -30,19 +32,19 @@ public class ResidenceCommandListener implements CommandExecutor { private static final String label = "res"; public String getLabel() { - return label; + return label; } public static List getAdminCommands() { - if (AdminCommands.size() == 0) - AdminCommands = Residence.getInstance().getCommandFiller().getCommands(false); - return AdminCommands; + if (AdminCommands.size() == 0) + AdminCommands = Residence.getInstance().getCommandFiller().getCommands(false); + return AdminCommands; } private Residence plugin; public ResidenceCommandListener(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } @Override @@ -51,300 +53,303 @@ public boolean onCommand(CommandSender sender, Command command, String label, St // if (args.length < 3) // return true; - ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender); - Bukkit.getPluginManager().callEvent(cevent); - if (cevent.isCancelled()) { - return true; - } - - if (sender instanceof Player && !plugin.getPermissionManager().isResidenceAdmin(sender) && plugin.isDisabledWorldCommand(((Player) sender) - .getWorld())) { - plugin.msg(sender, lm.General_DisabledWorld); - return true; - } - if (command.getName().equals("resreload") && args.length == 0) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (plugin.getPermissionManager().isResidenceAdmin(player) && ResPerm.topadmin.hasPermission(player)) { - plugin.reloadPlugin(); - sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); - System.out.println("[Residence] Reloaded by " + player.getName() + "."); - } else - plugin.msg(player, lm.General_NoPermission); - } else { - plugin.reloadPlugin(); - System.out.println("[Residence] Reloaded by console."); - } - return true; - } - if (command.getName().equals("resload")) { - if (!(sender instanceof Player) || sender instanceof Player && plugin.getPermissionManager().isResidenceAdmin(sender) && ResPerm.topadmin.hasPermission(sender)) { - try { - plugin.loadYml(); - sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); - } catch (Exception ex) { - sender.sendMessage(ChatColor.RED + "[Residence] Unable to reload the save file, exception occured!"); - sender.sendMessage(ChatColor.RED + ex.getMessage()); - Logger.getLogger(Residence.getInstance().getClass().getName()).log(Level.SEVERE, null, ex); - } - } else - plugin.msg(sender, lm.General_NoPermission); - return true; - } else if (command.getName().equals("rc")) { - cmd cmdClass = getCmdClass(new String[] { "rc" }); - if (cmdClass == null) { - sendUsage(sender, command.getName()); - return true; - } - - if (args.length == 1 && args[0].equals("?")) { - return commandHelp(new String[] { "rc", "?" }, false, sender, command); - } - - boolean respond = cmdClass.perform(Residence.getInstance(), sender, reduceArgs(args), false); - if (!respond) - sendUsage(sender, command.getName()); - return true; - } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) { - boolean resadmin = false; - if (sender instanceof Player) { - if (command.getName().equals("resadmin") && plugin.getPermissionManager().isResidenceAdmin(sender)) { - resadmin = true; - } - if (command.getName().equals("resadmin") && !plugin.getPermissionManager().isResidenceAdmin(sender)) { - ((Player) sender).sendMessage(plugin.msg(lm.Residence_NonAdmin)); - return true; - } - if (command.getName().equals("res") && plugin.getPermissionManager().isResidenceAdmin(sender) && plugin.getConfigManager().getAdminFullAccess()) { - resadmin = true; - } - } else { - resadmin = true; - } - if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { - return commandHelp(args, resadmin, sender, command); - } - - Player player = null; - if (sender instanceof Player) { - player = (Player) sender; - } else { - resadmin = true; - } - if (plugin.getConfigManager().allowAdminsOnly()) { - if (!resadmin && player != null) { - plugin.msg(player, lm.General_AdminOnly); - return true; - } - } - if (args.length == 0) { - args = new String[1]; - args[0] = "?"; - } - - String cmd = args[0].toLowerCase(); - - switch (cmd) { - case "delete": - cmd = "remove"; - break; - case "sz": - cmd = "subzone"; - break; - } - - cmd cmdClass = getCmdClass(args); - if (cmdClass == null) { - return commandHelp(new String[] { "?" }, resadmin, sender, command); - } - - if (!resadmin && !ResPerm.command_$1.hasPermission(sender, args[0].toLowerCase())) { - RawMessage rm = new RawMessage(); - rm.add(plugin.msg(lm.General_NoPermission), "&7" + ResPerm.command_$1.getPermission(args[0].toLowerCase())); - rm.show(sender); - - ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); - plugin.msg(console, plugin.msg(lm.General_NoPermission) + " " + ResPerm.command_$1.getPermission(args[0].toLowerCase())); - return true; - } - - if (!resadmin && player != null && plugin.resadminToggle.contains(player.getName())) { - if (!plugin.getPermissionManager().isResidenceAdmin(player)) { - plugin.resadminToggle.remove(player.getName()); - } - } - - String[] targ = reduceArgs(args); - - for (Method met : cmdClass.getClass().getMethods()) { - if (!met.isAnnotationPresent(CommandAnnotation.class)) - continue; - CommandAnnotation cs = met.getAnnotation(CommandAnnotation.class); - - varCheck: if (sender instanceof Player) { - int[] regVar = cs.regVar(); - List list = new ArrayList(); - boolean more = true; - for (int one : regVar) { - if (one < 0) - more = false; - list.add(one); - } - - int size = targ.length; - - boolean good = true; - - if (list.isEmpty()) - break varCheck; - - if (list.contains(666) || list.contains(-666)) { - plugin.msg(sender, lm.Invalid_FromConsole); - return false; - } - - if (list.contains(-size)) - good = false; - - if (list.contains(size)) - good = true; - - if (list.contains(-100) && size == 0) - good = false; - - if (more && !list.contains(size)) - good = false; - - if (!good) { - String[] tempArray = new String[args.length + 1]; - for (int i = 0; i < args.length; i++) { - tempArray[i] = args[i]; - } - tempArray[args.length] = "?"; - args = tempArray; - return commandHelp(args, resadmin, sender, command); - } - } else { - - int[] consoleVar = cs.consoleVar(); - List list = new ArrayList(); - boolean more = true; - for (int one : consoleVar) { - if (one < 0) - more = false; - list.add(one); - } - int size = targ.length; - boolean good = true; - - if (list.isEmpty()) - break varCheck; - - if (list.contains(666) || list.contains(-666)) { - plugin.msg(sender, lm.Invalid_Ingame); - return false; - } - - if (list.contains(-size)) - good = false; - - if (list.contains(size)) - good = true; - - if (list.contains(-100) && size == 0) - good = false; - - if (more && !list.contains(size)) - good = false; - if (!good) { - String[] tempArray = new String[args.length + 1]; - for (int i = 0; i < args.length; i++) { - tempArray[i] = args[i]; - } - tempArray[args.length] = "?"; - args = tempArray; - return commandHelp(args, resadmin, sender, command); - } - } - } - - Boolean respond = cmdClass.perform(Residence.getInstance(), sender, targ, resadmin); - - if (respond != null && !respond) { - String[] tempArray = new String[args.length + 1]; - for (int i = 0; i < args.length; i++) { - tempArray[i] = args[i]; - } - tempArray[args.length] = "?"; - args = tempArray; - return commandHelp(args, resadmin, sender, command); - } - - return respond == null || !respond ? false : true; - } - return this.onCommand(sender, command, label, args); + String cmdName = command.getName().toLowerCase(); + + ResidenceCommandEvent cevent = new ResidenceCommandEvent(cmdName, args, sender); + Bukkit.getPluginManager().callEvent(cevent); + if (cevent.isCancelled()) { + return true; + } + + if (sender instanceof Player && !plugin.getPermissionManager().isResidenceAdmin(sender) && plugin.isDisabledWorldCommand(((Player) sender) + .getWorld())) { + plugin.msg(sender, lm.General_DisabledWorld); + return true; + } + if (cmdName.equals("resreload")) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (plugin.getPermissionManager().isResidenceAdmin(player) && ResPerm.topadmin.hasPermission(player)) { + plugin.reloadPlugin(); + sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded config."); + CMIMessages.consoleMessage("[Residence] Reloaded by " + player.getName() + "."); + } else + plugin.msg(player, lm.General_NoPermission); + } else { + plugin.reloadPlugin(); + CMIMessages.consoleMessage("[Residence] Reloaded by console."); + } + return true; + } + if (cmdName.equals("resload")) { + if (!(sender instanceof Player) || sender instanceof Player && plugin.getPermissionManager().isResidenceAdmin(sender) && ResPerm.topadmin.hasPermission(sender)) { + try { + plugin.loadYml(); + sender.sendMessage(ChatColor.GREEN + "[Residence] Reloaded save file..."); + } catch (Exception ex) { + sender.sendMessage(ChatColor.RED + "[Residence] Unable to reload the save file, exception occured!"); + sender.sendMessage(ChatColor.RED + ex.getMessage()); + Logger.getLogger(Residence.getInstance().getClass().getName()).log(Level.SEVERE, null, ex); + } + } else + plugin.msg(sender, lm.General_NoPermission); + return true; + } else if (cmdName.equals("rc")) { + cmd cmdClass = getCmdClass(new String[] { "rc" }); + if (cmdClass == null) { + sendUsage(sender, cmdName); + return true; + } + + if (args.length == 1 && args[0].equals("?")) { + return commandHelp(new String[] { "rc", "?" }, false, sender, command); + } + + boolean respond = cmdClass.perform(Residence.getInstance(), sender, reduceArgs(args), false); + if (!respond) + sendUsage(sender, cmdName); + return true; + } else if (cmdName.equals("res") || cmdName.equals("residence") || cmdName.equals("resadmin")) { + boolean resadmin = false; + if (sender instanceof Player) { + if (cmdName.equals("resadmin") && plugin.getPermissionManager().isResidenceAdmin(sender)) { + resadmin = true; + } + if (cmdName.equals("resadmin") && !plugin.getPermissionManager().isResidenceAdmin(sender)) { + ((Player) sender).sendMessage(plugin.msg(lm.Residence_NonAdmin)); + return true; + } + if (cmdName.equals("res") && plugin.getPermissionManager().isResidenceAdmin(sender) && plugin.getConfigManager().getAdminFullAccess()) { + resadmin = true; + } + } else { + resadmin = true; + } + if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?")) { + return commandHelp(args, resadmin, sender, command); + } + + Player player = null; + if (sender instanceof Player) { + player = (Player) sender; + } else { + resadmin = true; + } + if (plugin.getConfigManager().allowAdminsOnly() && !resadmin && player != null) { + plugin.msg(player, lm.General_AdminOnly); + return true; + } + + if (args.length == 0) { + args = new String[1]; + args[0] = "?"; + } + + String cmd = args[0].toLowerCase(); + + switch (cmd) { + case "delete": + cmd = "remove"; + break; + case "sz": + cmd = "subzone"; + break; + } + + cmd cmdClass = getCmdClass(args); + if (cmdClass == null) { + return commandHelp(new String[] { "?" }, resadmin, sender, command); + } + + if (!resadmin && !ResPerm.command_$1.hasPermission(sender, args[0].toLowerCase())) { + RawMessage rm = new RawMessage(); + rm.addText(plugin.msg(lm.General_NoPermission)) + .addHover("&7" + ResPerm.command_$1.getPermission(args[0].toLowerCase())); + rm.show(sender); + + ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); + plugin.msg(console, plugin.msg(lm.General_NoPermission) + " " + ResPerm.command_$1.getPermission(args[0].toLowerCase())); + return true; + } + + if (!resadmin && player != null && plugin.resadminToggle.contains(player.getName())) { + if (!plugin.getPermissionManager().isResidenceAdmin(player)) { + plugin.resadminToggle.remove(player.getName()); + } + } + + String[] targ = reduceArgs(args); + + for (Method met : cmdClass.getClass().getMethods()) { + if (!met.isAnnotationPresent(CommandAnnotation.class)) + continue; + CommandAnnotation cs = met.getAnnotation(CommandAnnotation.class); + + varCheck: if (sender instanceof Player) { + int[] regVar = cs.regVar(); + List list = new ArrayList(); + boolean more = true; + for (int one : regVar) { + if (one < 0) + more = false; + list.add(one); + } + + int size = targ.length; + + boolean good = true; + + if (list.isEmpty()) + break varCheck; + + if (list.contains(666) || list.contains(-666)) { + plugin.msg(sender, lm.Invalid_FromConsole); + return false; + } + + if (list.contains(-size)) + good = false; + + if (list.contains(size)) + good = true; + + if (list.contains(-100) && size == 0) + good = false; + + if (more && !list.contains(size)) + good = false; + + if (!good) { + String[] tempArray = new String[args.length + 1]; + for (int i = 0; i < args.length; i++) { + tempArray[i] = args[i]; + } + tempArray[args.length] = "?"; + args = tempArray; + return commandHelp(args, resadmin, sender, command); + } + } else { + + int[] consoleVar = cs.consoleVar(); + List list = new ArrayList(); + boolean more = true; + for (int one : consoleVar) { + if (one < 0) + more = false; + list.add(one); + } + int size = targ.length; + boolean good = true; + + if (list.isEmpty()) + break varCheck; + + if (list.contains(666) || list.contains(-666)) { + plugin.msg(sender, lm.Invalid_Ingame); + return false; + } + + if (list.contains(-size)) + good = false; + + if (list.contains(size)) + good = true; + + if (list.contains(-100) && size == 0) + good = false; + + if (more && !list.contains(size)) + good = false; + if (!good) { + String[] tempArray = new String[args.length + 1]; + for (int i = 0; i < args.length; i++) { + tempArray[i] = args[i]; + } + tempArray[args.length] = "?"; + args = tempArray; + return commandHelp(args, resadmin, sender, command); + } + } + } + + Boolean respond = cmdClass.perform(Residence.getInstance(), sender, targ, resadmin); + + if (respond != null && !respond) { + String[] tempArray = new String[args.length + 1]; + for (int i = 0; i < args.length; i++) { + tempArray[i] = args[i]; + } + tempArray[args.length] = "?"; + args = tempArray; + return commandHelp(args, resadmin, sender, command); + } + + return respond == null || !respond ? false : true; + } + + return this.onCommand(sender, command, label, args); } private static String[] reduceArgs(String[] args) { - if (args.length <= 1) - return new String[0]; + if (args.length <= 1) + return new String[0]; - return Arrays.copyOfRange(args, 1, args.length); + return Arrays.copyOfRange(args, 1, args.length); } private static cmd getCmdClass(String[] args) { - cmd cmdClass = null; - try { - Class nmsClass; - nmsClass = Class.forName("com.bekvon.bukkit.residence.commands." + args[0].toLowerCase()); - if (cmd.class.isAssignableFrom(nmsClass)) { - cmdClass = (cmd) nmsClass.getConstructor().newInstance(); - } - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException - | SecurityException e) { - } - return cmdClass; + cmd cmdClass = null; + try { + Class nmsClass; + nmsClass = Class.forName("com.bekvon.bukkit.residence.commands." + args[0].toLowerCase()); + if (cmd.class.isAssignableFrom(nmsClass)) { + cmdClass = (cmd) nmsClass.getConstructor().newInstance(); + } + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException + | SecurityException e) { + } + return cmdClass; } public void sendUsage(CommandSender sender, String command) { - plugin.msg(sender, lm.General_DefaultUsage, command); + plugin.msg(sender, lm.General_DefaultUsage, command); } private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender, Command command) { - if (plugin.getHelpPages() == null) - return false; - - String helppath = getHelpPath(args); - - int page = 1; - if (!args[args.length - 1].equalsIgnoreCase("?")) { - try { - page = Integer.parseInt(args[args.length - 1]); - } catch (Exception ex) { - plugin.msg(sender, lm.General_InvalidHelp); - } - } - - if (command.getName().equalsIgnoreCase("res")) - resadmin = false; - - if (plugin.getHelpPages().containesEntry(helppath)) { - plugin.getHelpPages().printHelp(sender, page, helppath, resadmin); - } - return true; + if (plugin.getHelpPages() == null) + return false; + + String helppath = getHelpPath(args); + + int page = 1; + if (!args[args.length - 1].equalsIgnoreCase("?")) { + try { + page = Integer.parseInt(args[args.length - 1]); + } catch (Exception ex) { + plugin.msg(sender, lm.General_InvalidHelp); + } + } + + if (command.getName().equalsIgnoreCase("res")) + resadmin = false; + + if (plugin.getHelpPages().containesEntry(helppath)) { + plugin.getHelpPages().printHelp(sender, page, helppath, resadmin); + } + return true; } private String getHelpPath(String[] args) { - String helppath = "res"; - for (int i = 0; i < args.length; i++) { - if (args[i].equalsIgnoreCase("?")) { - break; - } - helppath = helppath + "." + args[i]; - } - if (!plugin.getHelpPages().containesEntry(helppath) && args.length > 0) - return getHelpPath(Arrays.copyOf(args, args.length - 1)); - return helppath; + String helppath = "res"; + for (int i = 0; i < args.length; i++) { + if (args[i].equalsIgnoreCase("?")) { + break; + } + helppath = helppath + "." + args[i]; + } + if (!plugin.getHelpPages().containesEntry(helppath) && args.length > 0) + return getHelpPath(Arrays.copyOf(args, args.length - 1)); + return helppath; } } From 7c82cbb6e4e1d56d91470eb83ef2813ceae1dffb Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 31 Oct 2022 15:59:53 +0200 Subject: [PATCH 0988/1142] Version bump --- src/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugin.yml b/src/plugin.yml index 1f9ed616f..fa0c068be 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.0.3.0 +version: 5.1.0.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From a3cd3c9d0f4c920e4a4388395aa25cc7ed0219b3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 18 Nov 2022 16:11:17 +0200 Subject: [PATCH 0989/1142] Yaml file size limitation fix --- .../residence/persistance/YMLSaveHelper.java | 73 ++++++++++++------- .../protection/ClaimedResidence.java | 1 + 2 files changed, 48 insertions(+), 26 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java index 50d1a9b97..114052a82 100644 --- a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java +++ b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java @@ -9,52 +9,73 @@ import java.util.LinkedHashMap; import java.util.Map; +import org.bukkit.configuration.file.YamlConstructor; +import org.bukkit.configuration.file.YamlRepresenter; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.DumperOptions.FlowStyle; +import org.yaml.snakeyaml.LoaderOptions; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.reader.ReaderException; public class YMLSaveHelper { File f; - Yaml yml; + Yaml yml = null; Map root; public YMLSaveHelper(File ymlfile) throws IOException { - DumperOptions options = new DumperOptions(); - options.setDefaultFlowStyle(FlowStyle.BLOCK); - options.setAllowUnicode(true); - yml = new Yaml(options); - - root = new LinkedHashMap(); - if (ymlfile == null) - throw new IOException("YMLSaveHelper: null file..."); - f = ymlfile; + + final YamlConstructor constructor = new YamlConstructor(); + final YamlRepresenter representer = new YamlRepresenter(); + representer.setDefaultFlowStyle(FlowStyle.BLOCK); + + final DumperOptions dumperOptions = new DumperOptions(); + dumperOptions.setDefaultFlowStyle(FlowStyle.BLOCK); + dumperOptions.setIndent(2); + dumperOptions.setAllowUnicode(true); + dumperOptions.setWidth(4096); + + try { + Class.forName("org.yaml.snakeyaml.LoaderOptions"); + final LoaderOptions loaderOptions = new LoaderOptions(); + loaderOptions.setMaxAliasesForCollections(Integer.MAX_VALUE); + loaderOptions.getClass().getMethod("setCodePointLimit", int.class).invoke(loaderOptions, Integer.MAX_VALUE); + yml = new Yaml(constructor, representer, dumperOptions, loaderOptions); + } catch (Throwable e) { + } + + if (yml == null) + yml = new Yaml(constructor, representer, dumperOptions); + + root = new LinkedHashMap(); + if (ymlfile == null) + throw new IOException("YMLSaveHelper: null file..."); + f = ymlfile; } public void save() throws IOException { - if (f.getParentFile() != null && !f.getParentFile().exists()) - f.getParentFile().mkdirs(); - if (f.isFile()) - f.delete(); - FileOutputStream fout = new FileOutputStream(f); - OutputStreamWriter osw = new OutputStreamWriter(fout, "UTF8"); - yml.dump(root, osw); - osw.close(); + if (f.getParentFile() != null && !f.getParentFile().exists()) + f.getParentFile().mkdirs(); + if (f.isFile()) + f.delete(); + FileOutputStream fout = new FileOutputStream(f); + OutputStreamWriter osw = new OutputStreamWriter(fout, "UTF8"); + yml.dump(root, osw); + osw.close(); } @SuppressWarnings("unchecked") public void load() throws IOException { - InputStream fis = new FileInputStream(f); - try { - root = (Map) yml.load(fis); - } catch (ReaderException e) { - System.out.println("[Residence] - Failed to load " + yml.getName() + " file!"); - } - fis.close(); + InputStream fis = new FileInputStream(f); + try { + root = (Map) yml.load(fis); + } catch (ReaderException e) { + System.out.println("[Residence] - Failed to load " + yml.getName() + " file!"); + } + fis.close(); } public Map getRoot() { - return root; + return root; } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index ca90206be..f3ec5b3f6 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1891,6 +1891,7 @@ public boolean renameSubzone(String oldName, String newName) { } public boolean renameSubzone(Player player, String oldName, String newName, boolean resadmin) { + if (!Residence.getInstance().validName(newName)) { Residence.getInstance().msg(player, lm.Invalid_NameCharacters); return false; From 4b0127a8d67e0c07b125a76e02ac951e9f7744c7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 9 Dec 2022 13:09:27 +0200 Subject: [PATCH 0990/1142] Extra options for residence creation and manipulation money charge --- .../bukkit/residence/ConfigManager.java | 25 +++++++++++++++++++ .../protection/ClaimedResidence.java | 6 ++--- .../protection/ResidenceManager.java | 2 +- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index dd35911a8..18fec8800 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -49,6 +49,9 @@ public class ConfigManager { protected boolean useLeases; protected boolean ResMoneyBack; protected boolean enableEconomy; + protected boolean chargeOnCreation; + protected boolean chargeOnExpansion; + protected boolean chargeOnAreaAdd; private EconomyType VaultEconomy; protected boolean ExtraEnterMessage; protected boolean adminsOnly; @@ -1048,6 +1051,16 @@ public void UpdateConfigFile() { c.addComment("Global.EnableEconomy", "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); enableEconomy = c.get("Global.EnableEconomy", true); + + + c.addComment("Global.ChargeWhen", "Defines when we should charge money. Only works if economy is enabled"); + c.addComment("Global.ChargeWhen.Creating", "Charges money on residence creation, this includes /res create and /res auto"); + chargeOnCreation = c.get("Global.ChargeWhen.Creating", true); + c.addComment("Global.ChargeWhen.Expanding", "Charges money on residence area expansion"); + chargeOnExpansion = c.get("Global.ChargeWhen.Expanding", true); + c.addComment("Global.ChargeWhen.AreaAdd", "Charges money on area addition"); + chargeOnAreaAdd = c.get("Global.ChargeWhen.AreaAdd", true); + c.addComment("Global.Type", "Defaults to None which will start by looking to default economy engine throw vault API and if it fails to any supported economy engine", "Custom economy engines can be defined to access economy directly", "Supported variables: " + EconomyType.toStringLine()); @@ -2203,6 +2216,18 @@ public boolean isSaveFileSplit() { return saveFileSplit; } + public boolean isChargeOnCreation() { + return chargeOnCreation; + } + + public boolean isChargeOnExpansion() { + return chargeOnExpansion; + } + + public boolean isChargeOnAreaAdd() { + return chargeOnAreaAdd; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index f3ec5b3f6..829ebda32 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -472,8 +472,6 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa return false; } - CuboidArea cuboid = Residence.getInstance().getSelectionManager().getSelectionCuboid(player); - if (!this.isSubzone() && !isSmallerThanMax(player, area, resadmin) || this.isSubzone() && !isSmallerThanMaxSubzone(player, area, resadmin)) { Residence.getInstance().msg(player, lm.Area_SizeLimit); @@ -498,7 +496,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa return false; } - if (chargeMoney && getParent() == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { + if (Residence.getInstance().getConfigManager().isChargeOnAreaAdd() && chargeMoney && getParent() == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { double chargeamount = area.getCost(group); if (!Residence.getInstance().getTransactionManager().chargeEconomyMoney(player, chargeamount)) { return false; @@ -666,7 +664,7 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole return false; } - if (getParent() == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { + if (Residence.getInstance().getConfigManager().isChargeOnExpansion() && getParent() == null && Residence.getInstance().getConfigManager().enableEconomy() && !resadmin) { double chargeamount = newarea.getCost(group) - oldarea.getCost(group); if (chargeamount > 0 && !Residence.getInstance().getTransactionManager().chargeEconomyMoney(player, chargeamount)) { return false; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 70478fab1..4847183f8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -278,7 +278,7 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String if (resevent.isCancelled()) return false; - if (!newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { + if (Residence.getInstance().getConfigManager().isChargeOnCreation() && !newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { double chargeamount = newArea.getCost(group); if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { // Need to remove area if we can't create residence From 558ef50cd0a4f6dcbeec958ac65948ec00c929e6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 9 Dec 2022 14:55:59 +0200 Subject: [PATCH 0991/1142] Going back to unified files due to snakeyaml fix allowing big files again --- .../bukkit/residence/ConfigManager.java | 2 +- .../bekvon/bukkit/residence/Residence.java | 106 ++++++++---------- 2 files changed, 47 insertions(+), 61 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 18fec8800..2ed0b515f 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -1191,7 +1191,7 @@ public void UpdateConfigFile() { NewPlayerUse = c.get("Global.NewPlayer.Use", false); c.addComment("Global.NewPlayer.Free", "Setting this to true, residence will be created for free", "By setting to false, money will be taken from player, if he has them"); NewPlayerFree = c.get("Global.NewPlayer.Free", true); - c.addComment("Global.NewPlayer.Range", "Range from placed chest o both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide"); + c.addComment("Global.NewPlayer.Range", "Range from placed chest to both sides. By setting to 5, residence will be 5+5+1 = 11 blocks wide in total"); NewPlayerRangeX = c.get("Global.NewPlayer.Range.X", 5); NewPlayerRangeY = c.get("Global.NewPlayer.Range.Y", 5); NewPlayerRangeZ = c.get("Global.NewPlayer.Range.Z", 5); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 262b1148a..7ea5c632f 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1246,9 +1246,6 @@ public boolean isResAdminOn(String player) { return resadminToggle.contains(player); } - - - private final String flagsFileSuffix = "_Flags"; private final String messagesFileSuffix = "_Messages"; @@ -1282,47 +1279,32 @@ private void saveYml() throws IOException { Map save = rmanager.save(); for (Entry entry : save.entrySet()) { - if (Residence.getInstance().getConfigManager().isSaveFileSplit()) { - - saveFile(worldFolder, entry.getKey(), "Residences", entry.getValue()); - - // Separate Flags file - if (this.getResidenceManager().getFlagsCatch(entry.getKey()) != null) - saveFile(worldFolder, entry.getKey() + flagsFileSuffix, "Flags", this.getResidenceManager().getFlagsCatch(entry.getKey())); - - // Separate Messages file - if (this.getResidenceManager().getMessageCatch(entry.getKey()) != null) - saveFile(worldFolder, entry.getKey() + messagesFileSuffix, "Messages", this.getResidenceManager().getMessageCatch(entry.getKey())); - - } else { - // Older method saving messages and flags into same file - - File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); - File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); - - syml = new YMLSaveHelper(tmpFile); - syml.getRoot().put("Version", saveVersion); - World world = server.getWorld(entry.getKey()); - if (world != null) - syml.getRoot().put("Seed", world.getSeed()); - if (this.getResidenceManager().getMessageCatch(entry.getKey()) != null) - syml.getRoot().put("Messages", this.getResidenceManager().getMessageCatch(entry.getKey())); - if (this.getResidenceManager().getFlagsCatch(entry.getKey()) != null) - syml.getRoot().put("Flags", this.getResidenceManager().getFlagsCatch(entry.getKey())); - - syml.getRoot().put("Residences", entry.getValue()); - syml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(worldFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); + File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); + File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); + + syml = new YMLSaveHelper(tmpFile); + syml.getRoot().put("Version", saveVersion); + World world = server.getWorld(entry.getKey()); + if (world != null) + syml.getRoot().put("Seed", world.getSeed()); + if (this.getResidenceManager().getMessageCatch(entry.getKey()) != null) + syml.getRoot().put("Messages", this.getResidenceManager().getMessageCatch(entry.getKey())); + if (this.getResidenceManager().getFlagsCatch(entry.getKey()) != null) + syml.getRoot().put("Flags", this.getResidenceManager().getFlagsCatch(entry.getKey())); + + syml.getRoot().put("Residences", entry.getValue()); + syml.save(); + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(worldFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); + if (backupFile.isFile()) { + backupFile.delete(); } - tmpFile.renameTo(ymlSaveLoc); + ymlSaveLoc.renameTo(backupFile); } + tmpFile.renameTo(ymlSaveLoc); + } YMLSaveHelper yml; @@ -1454,27 +1436,31 @@ private void loadMessagesAndFlags(String worldName, YMLSaveHelper yml, File worl loadMessages(worldName, yml); loadFlags(worldName, yml); - File flagsFile = new File(worldFolder, saveFilePrefix + worldName + flagsFileSuffix + ".yml"); - if (flagsFile.isFile()) { - try { - yml = new YMLSaveHelper(flagsFile); - yml.load(); - if (yml.getRoot() != null) - loadFlags(worldName, yml); - } catch (IOException e) { - e.printStackTrace(); + if (!yml.getRoot().containsKey("Flags")) { + File flagsFile = new File(worldFolder, saveFilePrefix + worldName + flagsFileSuffix + ".yml"); + if (flagsFile.isFile()) { + try { + yml = new YMLSaveHelper(flagsFile); + yml.load(); + if (yml.getRoot() != null) + loadFlags(worldName, yml); + } catch (IOException e) { + e.printStackTrace(); + } } } - File messagesFile = new File(worldFolder, saveFilePrefix + worldName + messagesFileSuffix + ".yml"); - if (messagesFile.isFile()) { - try { - yml = new YMLSaveHelper(messagesFile); - yml.load(); - if (yml.getRoot() != null) - loadMessages(worldName, yml); - } catch (IOException e) { - e.printStackTrace(); + if (!yml.getRoot().containsKey("Messages")) { + File messagesFile = new File(worldFolder, saveFilePrefix + worldName + messagesFileSuffix + ".yml"); + if (messagesFile.isFile()) { + try { + yml = new YMLSaveHelper(messagesFile); + yml.load(); + if (yml.getRoot() != null) + loadMessages(worldName, yml); + } catch (IOException e) { + e.printStackTrace(); + } } } } From 199629ff601dbb2ec8404c4b78e4aa5633a112db Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 9 Dec 2022 15:02:58 +0200 Subject: [PATCH 0992/1142] Bucket empty listener fix for older servers --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 253960759..d0834c3bd 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1783,7 +1783,11 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { Location loc = event.getBlockClicked().getLocation().clone(); - loc.add(event.getBlockFace().getDirection()); + if (Version.isCurrentHigher(Version.v1_12_R1)) + try { + loc.add(event.getBlockFace().getDirection()); + } catch (Throwable e) { + } ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null) { From 4daa3eb9844c66773a28f90400873643df91a289 Mon Sep 17 00:00:00 2001 From: justtos Date: Sun, 1 Jan 2023 05:35:46 +0200 Subject: [PATCH 0993/1142] [Fix] Chest protection on residence edge Fixes an issue, where in two residences where a player is trusted, it's not possible to place a chest on the edge. --- .../residence/listeners/ResidenceBlockListener.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index d95e78186..fda0a1aa0 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -444,25 +444,25 @@ public void onChestPlaceNearResidence(BlockPlaceEvent event) { Block b = block.getLocation().clone().add(0, 0, -1).getBlock(); if (b.getType() == block.getType()) { res = plugin.getResidenceManager().getByLoc(b.getLocation()); - if (res != null && !res.equals(orRes)) + if (res != null && !res.equals(orRes) && !res.isTrusted(player)) cancel = true; } b = block.getLocation().clone().add(0, 0, 1).getBlock(); if (b.getType() == block.getType()) { res = plugin.getResidenceManager().getByLoc(b.getLocation()); - if (res != null && !res.equals(orRes)) + if (res != null && !res.equals(orRes) && !res.isTrusted(player)) cancel = true; } b = block.getLocation().clone().add(1, 0, 0).getBlock(); if (b.getType() == block.getType()) { res = plugin.getResidenceManager().getByLoc(b.getLocation()); - if (res != null && !res.equals(orRes)) + if (res != null && !res.equals(orRes) && !res.isTrusted(player)) cancel = true; } b = block.getLocation().clone().add(-1, 0, 0).getBlock(); if (b.getType() == block.getType()) { res = plugin.getResidenceManager().getByLoc(b.getLocation()); - if (res != null && !res.equals(orRes)) + if (res != null && !res.equals(orRes) && !res.isTrusted(player)) cancel = true; } From 3b202b85efa1898daa84ca4cd30beefccce14b81 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 10 Jan 2023 14:19:54 +0200 Subject: [PATCH 0994/1142] Version up --- src/com/bekvon/bukkit/residence/ConfigManager.java | 11 ++++++++--- src/plugin.yml | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 2ed0b515f..da0eac071 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -42,6 +42,7 @@ import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Locale.YmlMaker; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ConfigManager { @@ -1251,19 +1252,23 @@ public void UpdateConfigFile() { if (VisualizerSidesCap < 1) VisualizerSidesCap = 1; - String effectsList = ""; + StringBuilder effectsList = new StringBuilder(); + for (Effect one : Effect.values()) { if (one == null) continue; if (one.name() == null) continue; - effectsList += one.name().toLowerCase() + ", "; + if (!effectsList.toString().isEmpty()) + effectsList.append(", "); + effectsList.append(one.name().toLowerCase()); } + c.addComment("Global.Visualizer.Selected", "Particle effect names. possible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance", "", - "If using spigot based server different particles can be used:", effectsList); + "If using spigot based server different particles can be used:", effectsList.toString()); // Frame String efname = c.get("Global.Visualizer.Selected.Frame", "happyVillager"); diff --git a/src/plugin.yml b/src/plugin.yml index fa0c068be..37e01e00c 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.0.0 +version: 5.1.0.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 6c0798cb30678d4118ad4e396a1762f6d1bda166 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 10 Jan 2023 14:35:23 +0200 Subject: [PATCH 0995/1142] Improvements on chest place near residence edge mechanic We should allow if player is trusted or owner --- .../listeners/ResidenceBlockListener.java | 52 ++++++++----------- 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index fda0a1aa0..de7eaa352 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -2,6 +2,7 @@ import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -421,6 +422,20 @@ public void onChestPlace(BlockPlaceEvent event) { MessageInformed.add(player.getName()); } + private boolean checkBlock(ClaimedResidence orRes, Location loc, Vector offset, Material type, Player player) { + Block b = loc.clone().add(offset).getBlock(); + if (b.getType() != type) + return false; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(b.getLocation()); + return res != null && !res.equals(orRes) && !res.isOwner(player) && !res.isTrusted(player); + } + + private static final List chestVectors = new ArrayList(Arrays.asList( + new Vector(0, 0, -1), + new Vector(0, 0, 1), + new Vector(1, 0, 0), + new Vector(-1, 0, 0))); + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onChestPlaceNearResidence(BlockPlaceEvent event) { @@ -433,42 +448,21 @@ public void onChestPlaceNearResidence(BlockPlaceEvent event) { return; Block block = event.getBlock(); - if (block.getType() != Material.CHEST && block.getType() != Material.TRAPPED_CHEST) + + Material type = block.getType(); + + if (type != Material.CHEST && type != Material.TRAPPED_CHEST) return; ClaimedResidence orRes = plugin.getResidenceManager().getByLoc(block.getLocation()); - boolean cancel = false; - - ClaimedResidence res = null; - Block b = block.getLocation().clone().add(0, 0, -1).getBlock(); - if (b.getType() == block.getType()) { - res = plugin.getResidenceManager().getByLoc(b.getLocation()); - if (res != null && !res.equals(orRes) && !res.isTrusted(player)) - cancel = true; - } - b = block.getLocation().clone().add(0, 0, 1).getBlock(); - if (b.getType() == block.getType()) { - res = plugin.getResidenceManager().getByLoc(b.getLocation()); - if (res != null && !res.equals(orRes) && !res.isTrusted(player)) - cancel = true; - } - b = block.getLocation().clone().add(1, 0, 0).getBlock(); - if (b.getType() == block.getType()) { - res = plugin.getResidenceManager().getByLoc(b.getLocation()); - if (res != null && !res.equals(orRes) && !res.isTrusted(player)) - cancel = true; - } - b = block.getLocation().clone().add(-1, 0, 0).getBlock(); - if (b.getType() == block.getType()) { - res = plugin.getResidenceManager().getByLoc(b.getLocation()); - if (res != null && !res.equals(orRes) && !res.isTrusted(player)) - cancel = true; - } + for (Vector vector : chestVectors) { + if (!checkBlock(orRes, block.getLocation(), vector, type, player)) + continue; - if (cancel) { CMIActionBar.send(player, plugin.msg(lm.General_CantPlaceChest)); event.setCancelled(true); + return; } } From 60cc900bfe811c8a83b3bc711ab64af6e84c81b5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 10 Jan 2023 16:01:12 +0200 Subject: [PATCH 0996/1142] Not splitting files anymore --- .../bukkit/residence/ConfigManager.java | 19 +++++-------------- .../residence/containers/ResidencePlayer.java | 7 ++----- 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index da0eac071..16c74b409 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -102,7 +102,7 @@ public class ConfigManager { protected int leaseCheckInterval; protected int autoSaveInt; protected boolean NewSaveMechanic; - private boolean saveFileSplit; + private int ItemPickUpDelay; private boolean ARCCheckCollision; private boolean ARCOldMethod; @@ -889,12 +889,6 @@ public void UpdateConfigFile() { c.addComment("Global.NewSaveMechanic", "New save mechanic can minimize save file couple times and speedup save/load time in general", "Bigger files have bigger impact"); NewSaveMechanic = c.get("Global.NewSaveMechanic", true); - // Defaulting to true from 1.19 version due to snakeyaml limiting file size to 3MB - c.addComment("Global.saveFileSplit", "When enabled we will split residence save files and separate residence messages and flags into their own files", - "This only applies while using NewSaveMechanic", - "STRONGLY recommended to be used on 1.19+ servers"); - saveFileSplit = c.get("Global.saveFileSplit", Version.isCurrentEqualOrHigher(Version.v1_19_R1)); - c.addComment("Global.Backup.AutoCleanUp.Use", "Do you want to automatically remove backup files from main backup folder if they are older than defined day amount"); BackupAutoCleanUpUse = c.get("Global.Backup.AutoCleanUp.Use", false); @@ -947,10 +941,11 @@ public void UpdateConfigFile() { } } - // TNT explosions below 63 c.addComment("Global.AntiGreef.RangeGap", - "Distance in blocks between residences to be left out", "This will prevent from residences being created back to back", - "In case owner of old residence and new one is the same this range restriction wont be taken into effect", "Set to 0 if you want to disable this"); + "Distance in blocks between residences to be left out", + "This will prevent from residences being created back to back", + "In case owner of old residence and new one is the same this range restriction wont be taken into effect", + "Set to 0 if you want to disable this"); AntiGreefRangeGap = c.get("Global.AntiGreef.RangeGap", 16); // TNT explosions below 63 @@ -2217,10 +2212,6 @@ public boolean isARCOldMethod() { return ARCOldMethod; } - public boolean isSaveFileSplit() { - return saveFileSplit; - } - public boolean isChargeOnCreation() { return chargeOnCreation; } diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index d33bc46c5..0440574d5 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -21,7 +21,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.raid.ResidenceRaid; -import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; public class ResidencePlayer { @@ -44,7 +43,7 @@ public class ResidencePlayer { private int maxX = -1; private int maxZ = -1; - private int maxValue = 9999; + private static final int maxValue = 9999; private Long lastRaidAttackTimer = 0L; private Long lastRaidDefendTimer = 0L; @@ -367,9 +366,7 @@ public int getResAmount() { } public List getResList() { - List ls = new ArrayList(); - ls.addAll(ResidenceList); - return ls; + return new ArrayList(ResidenceList); } @Deprecated From 1b41febfa6154958308591a9374eee379f1267ce Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 10 Jan 2023 16:22:39 +0200 Subject: [PATCH 0997/1142] Residence range gaps by world --- .../bukkit/residence/ConfigManager.java | 56 ++++++++++++++----- .../protection/ClaimedResidence.java | 8 +-- 2 files changed, 47 insertions(+), 17 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 16c74b409..129a6580b 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -198,8 +198,6 @@ public class ConfigManager { protected boolean DisableListeners; protected boolean DisableCommands; - private boolean ignoreGroupedFlagAccess = false; - //Town // private boolean TownEnabled = false; // private int TownMinRange = 0; @@ -207,7 +205,7 @@ public class ConfigManager { // protected boolean DisableNoFlagMessageUse; // protected List DisableNoFlagMessageWorlds = new ArrayList(); - public int AntiGreefRangeGap = 16; + private HashMap AntiGreefRangeGaps = new HashMap(); protected boolean TNTExplodeBelow; protected int TNTExplodeBelowLevel; @@ -941,12 +939,35 @@ public void UpdateConfigFile() { } } - c.addComment("Global.AntiGreef.RangeGap", - "Distance in blocks between residences to be left out", + c.addComment("Global.AntiGreef.RangeGaps", + "Distance in blocks between residences to be left out", "This will prevent from residences being created back to back", - "In case owner of old residence and new one is the same this range restriction wont be taken into effect", - "Set to 0 if you want to disable this"); - AntiGreefRangeGap = c.get("Global.AntiGreef.RangeGap", 16); + "In case owner of old residence and new one is the same this range restriction wont be taken into effect", + "Set to 0 or an empty list if you want to disable this", + "Use 'all' if you want to use same limitation on all worlds", + "Use specific world name if you only want to use this limitation on this world", + "Specific world name will override 'all' value"); + + List ls = new ArrayList(); + if (c.getC().isInt("Global.AntiGreef.RangeGap")) { + ls.add("all-" + c.getC().getInt("Global.AntiGreef.RangeGap")); + c.get("Global.AntiGreef.RangeGaps", Arrays.asList("all-" + c.getC().getInt("Global.AntiGreef.RangeGap"))); + } else + ls = c.get("Global.AntiGreef.RangeGaps", Arrays.asList("all-16")); + + for (String one : ls) { + String[] split = one.split("-"); + if (split.length < 2) + continue; + try { + String worldName = one.substring(0, one.length() - split[split.length - 1].length() - 1); + int range = Integer.parseInt(split[split.length - 1]); + AntiGreefRangeGaps.put(worldName.toLowerCase(), range); + CMIDebug.d(worldName, range); + } catch (Throwable e) { + continue; + } + } // TNT explosions below 63 c.addComment("Global.AntiGreef.TNT.ExplodeBelow", @@ -1047,8 +1068,7 @@ public void UpdateConfigFile() { c.addComment("Global.EnableEconomy", "Enable / Disable Residence's Economy System (iConomy, MineConomy, Essentials, BOSEconomy, and RealEconomy supported)."); enableEconomy = c.get("Global.EnableEconomy", true); - - + c.addComment("Global.ChargeWhen", "Defines when we should charge money. Only works if economy is enabled"); c.addComment("Global.ChargeWhen.Creating", "Charges money on residence creation, this includes /res create and /res auto"); chargeOnCreation = c.get("Global.ChargeWhen.Creating", true); @@ -1056,7 +1076,6 @@ public void UpdateConfigFile() { chargeOnExpansion = c.get("Global.ChargeWhen.Expanding", true); c.addComment("Global.ChargeWhen.AreaAdd", "Charges money on area addition"); chargeOnAreaAdd = c.get("Global.ChargeWhen.AreaAdd", true); - c.addComment("Global.Type", "Defaults to None which will start by looking to default economy engine throw vault API and if it fails to any supported economy engine", "Custom economy engines can be defined to access economy directly", "Supported variables: " + EconomyType.toStringLine()); @@ -1256,10 +1275,9 @@ public void UpdateConfigFile() { continue; if (!effectsList.toString().isEmpty()) effectsList.append(", "); - effectsList.append(one.name().toLowerCase()); + effectsList.append(one.name().toLowerCase()); } - c.addComment("Global.Visualizer.Selected", "Particle effect names. possible: explode, largeexplode, hugeexplosion, fireworksSpark, splash, wake, crit, magicCrit", " smoke, largesmoke, spell, instantSpell, mobSpell, mobSpellAmbient, witchMagic, dripWater, dripLava, angryVillager, happyVillager, townaura", " note, portal, enchantmenttable, flame, lava, footstep, cloud, reddust, snowballpoof, snowshovel, slime, heart, barrier", " droplet, take, mobappearance", "", @@ -2224,6 +2242,18 @@ public boolean isChargeOnAreaAdd() { return chargeOnAreaAdd; } + public int getAntiGreefRangeGaps(String worldName) { + if (AntiGreefRangeGaps.isEmpty() || worldName == null) + return 0; + Integer specific = AntiGreefRangeGaps.get(worldName.toLowerCase()); + if (specific != null) + return specific; + Integer all = AntiGreefRangeGaps.get("all"); + if (all != null) + return all; + return 0; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 829ebda32..3ac4ffc4f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -403,11 +403,11 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa return false; } - if (Residence.getInstance().getConfigManager().AntiGreefRangeGap > 0) { + if (Residence.getInstance().getConfigManager().getAntiGreefRangeGaps(area.getWorldName()) > 0) { Location low = area.getLowLocation().clone(); Location high = area.getHighLocation().clone(); - int gap = Residence.getInstance().getConfigManager().AntiGreefRangeGap; + int gap = Residence.getInstance().getConfigManager().getAntiGreefRangeGaps(area.getWorldName()); low.add(-gap, -gap, -gap); high.add(gap, gap, gap); @@ -544,11 +544,11 @@ public boolean replaceArea(Player player, CuboidArea newarea, String name, boole return false; } - if (Residence.getInstance().getConfigManager().AntiGreefRangeGap > 0) { + if (Residence.getInstance().getConfigManager().getAntiGreefRangeGaps(newarea.getWorldName()) > 0) { Location low = newarea.getLowLocation().clone(); Location high = newarea.getHighLocation().clone(); - int gap = Residence.getInstance().getConfigManager().AntiGreefRangeGap; + int gap = Residence.getInstance().getConfigManager().getAntiGreefRangeGaps(newarea.getWorldName()); low.add(-gap, -gap, -gap); high.add(gap, gap, gap); From da958556f3680c819f521b3a36a78146c66041d6 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 10 Jan 2023 16:42:58 +0200 Subject: [PATCH 0998/1142] WorldEdit CUI support --- .../selection/WorldEdit7SelectionManager.java | 135 ++++++++++-------- 1 file changed, 74 insertions(+), 61 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java index dbbdb7a9f..2c51d0202 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java @@ -7,126 +7,139 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.CuboidArea; import com.sk89q.worldedit.IncompleteRegionException; +import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.bukkit.BukkitPlayer; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.math.BlockVector3; //import com.sk89q.worldedit.bukkit.selections.CuboidSelection; //import com.sk89q.worldedit.bukkit.selections.Selection; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; +import com.sk89q.worldedit.regions.RegionSelector; import com.sk89q.worldedit.regions.selector.CuboidRegionSelector; import com.sk89q.worldedit.regions.selector.limit.PermissiveSelectorLimits; import com.sk89q.worldedit.world.World; +import net.Zrips.CMILib.Logs.CMIDebug; + public class WorldEdit7SelectionManager extends SelectionManager { public WorldEdit7SelectionManager(Server serv, Residence plugin) { - super(serv, plugin); + super(serv, plugin); } @Override public boolean worldEdit(Player player) { - WorldEditPlugin wep = (WorldEditPlugin) this.server.getPluginManager().getPlugin("WorldEdit"); - Region sel = null; - try { - World w = wep.getSession(player).getSelectionWorld(); - if (w != null) - sel = wep.getSession(player).getSelection(w); - if (sel != null) { - try { - Location pos1 = new Location(player.getWorld(), sel.getMinimumPoint().getX(), sel.getMinimumPoint().getY(), sel.getMinimumPoint().getZ()); - Location pos2 = new Location(player.getWorld(), sel.getMaximumPoint().getX(), sel.getMaximumPoint().getY(), sel.getMaximumPoint().getZ()); - this.updateLocations(player, pos1, pos2); - } catch (Exception e) { - } - return true; - } - } catch (IncompleteRegionException e1) { - e1.printStackTrace(); - } - return false; + WorldEditPlugin wep = (WorldEditPlugin) this.server.getPluginManager().getPlugin("WorldEdit"); + Region sel = null; + try { + World w = wep.getSession(player).getSelectionWorld(); + if (w != null) + sel = wep.getSession(player).getSelection(w); + if (sel != null) { + try { + Location pos1 = new Location(player.getWorld(), sel.getMinimumPoint().getX(), sel.getMinimumPoint().getY(), sel.getMinimumPoint().getZ()); + Location pos2 = new Location(player.getWorld(), sel.getMaximumPoint().getX(), sel.getMaximumPoint().getY(), sel.getMaximumPoint().getZ()); + this.updateLocations(player, pos1, pos2); + } catch (Exception e) { + } + return true; + } + } catch (IncompleteRegionException e1) { + e1.printStackTrace(); + } + return false; } @Override public boolean worldEditUpdate(Player player) { - if (!hasPlacedBoth(player)) - return false; - - World w = BukkitAdapter.adapt(player.getWorld()); - - try { - plugin.getWorldEdit().getSession(player).getRegionSelector(w).selectPrimary(BlockVector3.at(getPlayerLoc1(player).getBlockX(), getPlayerLoc1(player).getBlockY(), getPlayerLoc1(player) - .getBlockZ()), PermissiveSelectorLimits.getInstance()); - plugin.getWorldEdit().getSession(player).getRegionSelector(w).selectSecondary(BlockVector3.at(getPlayerLoc2(player).getBlockX(), getPlayerLoc2(player).getBlockY(), getPlayerLoc2(player) - .getBlockZ()), PermissiveSelectorLimits.getInstance()); - } catch (Exception | Error e) { - return false; - } + if (!hasPlacedBoth(player)) + return false; + + World w = BukkitAdapter.adapt(player.getWorld()); + + try { + Location p1 = getPlayerLoc1(player); + Location p2 = getPlayerLoc2(player); + + LocalSession session = plugin.getWorldEdit().getSession(player); + + RegionSelector selector = session.getRegionSelector(w); + selector.selectPrimary(BlockVector3.at(p1.getBlockX(), p1.getBlockY(), p1.getBlockZ()), PermissiveSelectorLimits.getInstance()); + selector.selectSecondary(BlockVector3.at(p2.getBlockX(), p2.getBlockY(), p2.getBlockZ()), PermissiveSelectorLimits.getInstance()); + + if (session.hasCUISupport()) + session.dispatchCUISelection(new BukkitPlayer(player)); + + } catch (Exception | Error e) { + return false; + } // CuboidSelection selection = new CuboidSelection(player.getWorld(), getPlayerLoc1(player), getPlayerLoc2(player)); // plugin.getWorldEdit().getSession(player).setRegionSelector(plugin.getWorldEdit().getSession(player).getSelectionWorld(), selection.getRegionSelector()); - return true; + return true; } @Override public void placeLoc1(Player player, Location loc, boolean show) { - super.placeLoc1(player, loc, show); - this.worldEditUpdate(player); + super.placeLoc1(player, loc, show); + this.worldEditUpdate(player); } @Override public void placeLoc2(Player player, Location loc, boolean show) { - super.placeLoc2(player, loc, show); - this.worldEditUpdate(player); + super.placeLoc2(player, loc, show); + this.worldEditUpdate(player); } @Override public void sky(Player player, boolean resadmin) { - super.sky(player, resadmin); - this.worldEditUpdate(player); + super.sky(player, resadmin); + this.worldEditUpdate(player); } @Override public void bedrock(Player player, boolean resadmin) { - super.bedrock(player, resadmin); - this.worldEditUpdate(player); + super.bedrock(player, resadmin); + this.worldEditUpdate(player); } @Override public void modify(Player player, boolean shift, double amount) { - super.modify(player, shift, amount); - this.worldEditUpdate(player); + super.modify(player, shift, amount); + this.worldEditUpdate(player); } @Override public void selectChunk(Player player) { - super.selectChunk(player); - this.worldEditUpdate(player); + super.selectChunk(player); + this.worldEditUpdate(player); } @Override public void showSelectionInfo(Player player) { - super.showSelectionInfo(player); - this.worldEditUpdate(player); + super.showSelectionInfo(player); + this.worldEditUpdate(player); } @Override public void regenerate(CuboidArea area) { - // Create new selector - CuboidRegionSelector sellection = new CuboidRegionSelector(BukkitAdapter.adapt(area.getWorld())); - - // set up selector - try { - sellection.selectPrimary(BlockVector3.at(area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()), PermissiveSelectorLimits.getInstance()); - sellection.selectSecondary(BlockVector3.at(area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()), PermissiveSelectorLimits.getInstance()); - } catch (Exception | Error e) { - return; - } - // set up CuboidSelection - CuboidRegion cuboid = sellection.getIncompleteRegion(); + // Create new selector + CuboidRegionSelector sellection = new CuboidRegionSelector(BukkitAdapter.adapt(area.getWorld())); + + // set up selector + try { + sellection.selectPrimary(BlockVector3.at(area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()), PermissiveSelectorLimits.getInstance()); + sellection.selectSecondary(BlockVector3.at(area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()), PermissiveSelectorLimits.getInstance()); + } catch (Exception | Error e) { + return; + } + // set up CuboidSelection + CuboidRegion cuboid = sellection.getIncompleteRegion(); // Region region = selection..getRegionSelector().getRegion(); - cuboid.getWorld().regenerate(cuboid, WorldEdit.getInstance().getEditSessionFactory().getEditSession(cuboid.getWorld(), -1)); + cuboid.getWorld().regenerate(cuboid, WorldEdit.getInstance().getEditSessionFactory().getEditSession(cuboid.getWorld(), -1)); } } From 55d0bfb027bbac0e003952508bfd4120eaa93bd5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 11 Jan 2023 15:15:09 +0200 Subject: [PATCH 0999/1142] Improving res auto to fill in entire target area --- .../bukkit/residence/commands/auto.java | 136 +++++++++++++----- 1 file changed, 97 insertions(+), 39 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 1a75cef3a..357d137fc 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -20,9 +20,12 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.selection.SelectionManager.Selection; +import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; public class auto implements cmd { @@ -74,10 +77,17 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo boolean result = false; + CMIDebug.d("----------------"); + CMIDebug.it(); if (plugin.getConfigManager().isARCOldMethod()) result = resize(plugin, player, cuboid, true, lenght); else result = optimizedResize(plugin, player, cuboid, true, lenght); + CMIDebug.d(CMIDebug.getIT(), "ms"); + + Selection selection = plugin.getSelectionManager().getSelection(player); + + CMIDebug.d("X:", selection.getBaseArea().getXSize(), " Y:", selection.getBaseArea().getYSize(), " Z:", selection.getBaseArea().getZSize()); plugin.getSelectionManager().afterSelectionUpdate(player, true); @@ -299,6 +309,7 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre direction dir = direction.Top; List locked = new ArrayList(); + List permaLocked = new ArrayList(); boolean checkCollision = plugin.getConfigManager().isARCCheckCollision(); @@ -343,6 +354,9 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre smallestRange = smallestRange < maxZ - cuboid.getZSize() ? smallestRange : maxZ - cuboid.getZSize(); smallestRange = smallestRange / 4; + int minYaltitude = group.getMinHeight(); + int maxYaltitude = group.getMaxHeight(); + while (true) { done++; @@ -359,14 +373,14 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre c.setLowLocation(cuboid.getLowLocation().clone().add(-smallestRange, -smallestRange, -smallestRange)); c.setHighLocation(cuboid.getHighLocation().clone().add(smallestRange, smallestRange, smallestRange)); - if (c.getHighVector().getBlockY() > maxWorldY) { - c.setHighVector(c.getHighVector().setY(maxWorldY)); + if (c.getHighVector().getBlockY() > maxYaltitude) { + c.setHighVector(c.getHighVector().setY(maxYaltitude)); } if (c.getLowVector().getBlockY() > maxWorldY - 1) { c.setLowVector(c.getLowVector().setY(maxWorldY - 1)); - } else if (c.getLowVector().getBlockY() < minWorldY) { - c.setLowVector(c.getLowVector().setY(minWorldY)); + } else if (c.getLowVector().getBlockY() < minYaltitude) { + c.setLowVector(c.getLowVector().setY(minYaltitude)); } if (checkCollision) { if (plugin.getResidenceManager().collidesWithResidence(c) != null) { @@ -421,13 +435,13 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre } fillMaps(directionMap, maxMap, direction.East, maxX, cuboid.getXSize()); - fillMaps(directionMap, maxMap, direction.West, maxX, cuboid.getXSize()); + fillMaps(directionMap, maxMap, direction.West, maxX + 1, cuboid.getXSize()); fillMaps(directionMap, maxMap, direction.South, maxZ, cuboid.getZSize()); - fillMaps(directionMap, maxMap, direction.North, maxZ, cuboid.getZSize()); + fillMaps(directionMap, maxMap, direction.North, maxZ + 1, cuboid.getZSize()); fillMaps(directionMap, maxMap, direction.Top, maxY, cuboid.getYSize()); - fillMaps(directionMap, maxMap, direction.Bottom, maxY, cuboid.getYSize()); + fillMaps(directionMap, maxMap, direction.Bottom, maxY + 1, cuboid.getYSize()); while (true) { if (Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (dir.equals(direction.Top) || dir.equals(direction.Bottom))) { @@ -456,6 +470,41 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre Integer offset = directionMap.get(dir); if (Math.abs(offset) == 0) { + + if (dir == direction.East && locked.contains(direction.West) && !permaLocked.contains(direction.West)) { + maxMap.put(direction.West, maxX - (player.getLocation().getBlockX() - cuboid.getHighVector().getBlockX())); + directionMap.put(direction.West, maxMap.get(direction.West) / 2); + locked.remove(direction.West); + permaLocked.add(dir); + } + + if (dir == direction.West && locked.contains(direction.East) && !permaLocked.contains(direction.East)) { + maxMap.put(direction.East, maxX - (player.getLocation().getBlockX() - cuboid.getHighVector().getBlockX())); + directionMap.put(direction.East, maxMap.get(direction.East) / 2); + locked.remove(direction.East); + permaLocked.add(dir); + } + + if (dir == direction.North && locked.contains(direction.South) && !permaLocked.contains(direction.South)) { + maxMap.put(direction.South, maxX - (player.getLocation().getBlockZ() - cuboid.getHighVector().getBlockZ())); + directionMap.put(direction.South, maxMap.get(direction.South) / 2); + locked.remove(direction.South); + permaLocked.add(dir); + } + + if (dir == direction.South && locked.contains(direction.North) && !permaLocked.contains(direction.North)) { + maxMap.put(direction.North, maxX - (player.getLocation().getBlockZ() - cuboid.getHighVector().getBlockZ())); + directionMap.put(direction.North, maxMap.get(direction.North) / 2); + locked.remove(direction.North); + permaLocked.add(dir); + } + + if (dir == direction.Top && !locked.contains(direction.Bottom) && !permaLocked.contains(direction.Bottom)) { + maxMap.put(direction.Bottom, maxY - Math.abs(player.getLocation().getBlockY() - cuboid.getLowVector().getBlockY())); + directionMap.put(direction.Bottom, maxMap.get(direction.Bottom) / 2); + permaLocked.add(dir); + } + locked.add(dir); dir = dir.getNext(); continue; @@ -465,62 +514,75 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre c.setLowLocation(cuboid.getLowLocation().clone().add(-dir.getLow().getX() * offset, -dir.getLow().getY() * offset, -dir.getLow().getZ() * offset)); c.setHighLocation(cuboid.getHighLocation().clone().add(dir.getHigh().getX() * offset, dir.getHigh().getY() * offset, dir.getHigh().getZ() * offset)); - if (c.getHighVector().getBlockY() > maxWorldY) { - - c.setHighVector(c.getHighVector().setY(maxWorldY)); + if (c.getHighVector().getBlockY() > maxYaltitude) { + c.setHighVector(c.getHighVector().setY(maxYaltitude)); + if (locked.contains(direction.Top) && !locked.contains(direction.Bottom) && !permaLocked.contains(direction.Top)) { + maxMap.put(direction.Top, maxY - Math.abs(c.getHighVector().getBlockY() - player.getLocation().getBlockY())); + directionMap.put(direction.Top, maxMap.get(direction.Top) / 2); + locked.remove(direction.Top); + permaLocked.add(direction.Bottom); + } } - if (c.getLowVector().getBlockY() > maxWorldY - 1) { - c.setLowVector(c.getLowVector().setY(maxWorldY - 1)); - } else if (c.getLowVector().getBlockY() < minWorldY) { - c.setLowVector(c.getLowVector().setY(minWorldY)); + if (c.getLowVector().getBlockY() > maxYaltitude - 1) { + c.setLowVector(c.getLowVector().setY(maxYaltitude - 1)); + } else if (c.getLowVector().getBlockY() < minYaltitude) { + c.setLowVector(c.getLowVector().setY(minYaltitude)); + if (!locked.contains(direction.Top) && !locked.contains(direction.Bottom) && !permaLocked.contains(direction.Bottom)) { + maxMap.put(direction.Bottom, maxY - Math.abs(player.getLocation().getBlockY() - c.getLowVector().getBlockY())); + directionMap.put(direction.Bottom, maxMap.get(direction.Bottom) / 2); + permaLocked.add(direction.Top); + } } - if (checkCollision) { - if (plugin.getResidenceManager().collidesWithResidence(c) != null) { + if (checkCollision && plugin.getResidenceManager().collidesWithResidence(c) != null) { - int newOffset = (int) Math.ceil(Math.abs(offset) / 2D); + int newOffset = (int) (Math.abs(offset) / 2D); - if (newOffset < 1) - newOffset = 1; + if (newOffset < 1) + newOffset = 1; - directionMap.put(dir, -(newOffset)); + directionMap.put(dir, -(newOffset)); - cuboid.setLowLocation(c.getLowLocation()); - cuboid.setHighLocation(c.getHighLocation()); - continue; - } + cuboid.setLowLocation(c.getLowLocation()); + cuboid.setHighLocation(c.getHighLocation()); + continue; } if (maxMap.get(dir).equals(Math.abs(offset))) { locked.add(dir); } - directionMap.put(dir, (int) (Math.abs(offset) / 2D)); + double newOffset = (Math.abs(offset) / 2D); + + offset = newOffset > 1 ? (int) Math.ceil(newOffset) : (int) newOffset; + + directionMap.put(dir, offset); if (maxX > 0 && maxX < c.getXSize() || c.getXSize() > groupMaxX) { - locked.add(dir); + if (Math.abs(offset) < 1) + locked.add(dir); dir = dir.getNext(); continue; } if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (maxY > 0 && maxY < c.getYSize() || c.getYSize() > group.getMaxY() + (-group.getMinY()))) { - locked.add(dir); + if (Math.abs(offset) < 1) + locked.add(dir); dir = dir.getNext(); continue; } if (maxZ > 0 && maxZ < c.getZSize() || c.getZSize() > groupMaxZ) { - locked.add(dir); + if (Math.abs(offset) < 1) + locked.add(dir); dir = dir.getNext(); continue; } - if (checkBalance && plugin.getConfigManager().enableEconomy()) { - if (!Residence.getInstance().getEconomyManager().canAfford(player, c.getCost(group))) { - plugin.msg(player, lm.Economy_NotEnoughMoney); - break; - } + if (checkBalance && plugin.getConfigManager().enableEconomy() && !Residence.getInstance().getEconomyManager().canAfford(player, c.getCost(group))) { + plugin.msg(player, lm.Economy_NotEnoughMoney); + break; } cuboid.setLowLocation(c.getLowLocation()); @@ -528,17 +590,13 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre dir = dir.getNext(); } - + plugin.getSelectionManager().placeLoc1(player, cuboid.getLowLocation()); plugin.getSelectionManager().placeLoc2(player, cuboid.getHighLocation()); cuboid = plugin.getSelectionManager().getSelectionCuboid(player); - if (cuboid.getXSize() > groupMaxX || cuboid.getYSize() > group.getMaxY() + (-group.getMinY()) || cuboid.getZSize() > groupMaxZ) { - return false; - } - - return true; + return cuboid.getXSize() <= groupMaxX && cuboid.getYSize() <= group.getMaxY() + (-group.getMinY()) && cuboid.getZSize() <= groupMaxZ; } public enum direction { From a2984834a556a5a836becf448fc41f58e12da2e9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 11 Jan 2023 15:34:38 +0200 Subject: [PATCH 1000/1142] Res auto taking into consideration residence gaps --- .../bukkit/residence/commands/auto.java | 67 ++++++++++++------- 1 file changed, 41 insertions(+), 26 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 357d137fc..ca8f6a9ce 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -22,7 +22,6 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import com.bekvon.bukkit.residence.selection.SelectionManager.Selection; -import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.Logs.CMIDebug; @@ -83,11 +82,6 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo result = resize(plugin, player, cuboid, true, lenght); else result = optimizedResize(plugin, player, cuboid, true, lenght); - CMIDebug.d(CMIDebug.getIT(), "ms"); - - Selection selection = plugin.getSelectionManager().getSelection(player); - - CMIDebug.d("X:", selection.getBaseArea().getXSize(), " Y:", selection.getBaseArea().getYSize(), " Z:", selection.getBaseArea().getZSize()); plugin.getSelectionManager().afterSelectionUpdate(player, true); @@ -105,7 +99,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (plugin.getResidenceManager().getByName(resName) != null) { for (int i = 1; i < 50; i++) { - String tempName = resName + plugin.getConfigManager().ARCIncrementFormat().replace("[number]", i + ""); + String tempName = resName + plugin.getConfigManager().ARCIncrementFormat().replace("[number]", String.valueOf(i)); if (plugin.getResidenceManager().getByName(tempName) == null) { resName = tempName; break; @@ -114,7 +108,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } if (resName == null) - resName = sender.getName() + (new Random().nextInt(99950) + 50); + resName = sender.getName() + plugin.getConfigManager().ARCIncrementFormat().replace("[number]", String.valueOf((new Random().nextInt(99950) + 50))); + player.performCommand((resadmin ? "resadmin" : "res") + " create " + resName); @@ -346,6 +341,8 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre if (maxZ <= 1) maxZ = (groupMaxZ - group.getMinZ()) / 2 + group.getMinZ(); + int gap = plugin.getConfigManager().getAntiGreefRangeGaps(cuboid.getWorldName()); + HashMap directionMap = new HashMap(); HashMap maxMap = new HashMap(); CuboidArea originalCuboid = new CuboidArea(cuboid.getLowLocation(), cuboid.getHighLocation()); @@ -383,11 +380,24 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre c.setLowVector(c.getLowVector().setY(minYaltitude)); } if (checkCollision) { - if (plugin.getResidenceManager().collidesWithResidence(c) != null) { - smallestRange = (int) -(Math.ceil(Math.abs(smallestRange) / 2D)); - cuboid.setLowLocation(c.getLowLocation()); - cuboid.setHighLocation(c.getHighLocation()); - continue; + + if (gap > 0) { + CuboidArea temp = new CuboidArea(c.getLowLocation().clone().add(-gap, -gap, -gap), c.getHighLocation().clone().add(gap, gap, gap)); + + if (plugin.getResidenceManager().collidesWithResidence(temp) != null) { + smallestRange = (int) -(Math.ceil(Math.abs(smallestRange) / 2D)); + cuboid.setLowLocation(c.getLowLocation()); + cuboid.setHighLocation(c.getHighLocation()); + continue; + } + + } else { + if (plugin.getResidenceManager().collidesWithResidence(c) != null) { + smallestRange = (int) -(Math.ceil(Math.abs(smallestRange) / 2D)); + cuboid.setLowLocation(c.getLowLocation()); + cuboid.setHighLocation(c.getHighLocation()); + continue; + } } if (smallestRange == -1) { @@ -504,7 +514,7 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre directionMap.put(direction.Bottom, maxMap.get(direction.Bottom) / 2); permaLocked.add(dir); } - + locked.add(dir); dir = dir.getNext(); continue; @@ -535,18 +545,23 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre } } - if (checkCollision && plugin.getResidenceManager().collidesWithResidence(c) != null) { - - int newOffset = (int) (Math.abs(offset) / 2D); - - if (newOffset < 1) - newOffset = 1; - - directionMap.put(dir, -(newOffset)); - - cuboid.setLowLocation(c.getLowLocation()); - cuboid.setHighLocation(c.getHighLocation()); - continue; + if (checkCollision) { + boolean collides = false; + if (gap > 0) { + CuboidArea temp = new CuboidArea(c.getLowLocation().clone().add(-gap, -gap, -gap), c.getHighLocation().clone().add(gap, gap, gap)); + collides = plugin.getResidenceManager().collidesWithResidence(temp) != null; + } else { + collides = plugin.getResidenceManager().collidesWithResidence(c) != null; + } + if (collides) { + int newOffset = (int) (Math.abs(offset) / 2D); + if (newOffset < 1) + newOffset = 1; + directionMap.put(dir, -(newOffset)); + cuboid.setLowLocation(c.getLowLocation()); + cuboid.setHighLocation(c.getHighLocation()); + continue; + } } if (maxMap.get(dir).equals(Math.abs(offset))) { From 8df92890e583fd990998b30a1e3733daa27e941e Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 11 Jan 2023 16:09:32 +0200 Subject: [PATCH 1001/1142] Residence auto ratio warning and confirmation message --- .../bukkit/residence/ConfigManager.java | 30 +++++++++++ .../bukkit/residence/commands/auto.java | 54 +++++++++++++++++-- .../bukkit/residence/containers/lm.java | 3 ++ 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 129a6580b..63ee24633 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -104,6 +104,10 @@ public class ConfigManager { protected boolean NewSaveMechanic; private int ItemPickUpDelay; + + private boolean ARCRatioInform; + private boolean ARCRatioConfirmation; + private int ARCRatioValue; private boolean ARCCheckCollision; private boolean ARCOldMethod; private String ARCIncrementFormat; @@ -665,6 +669,20 @@ public void UpdateConfigFile() { "Set it to false to gain some performace but new residence can often overlap with old ones"); ARCCheckCollision = c.get("Global.Optimizations.AutomaticResidenceCreation.CheckCollision", true); + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Ratio", + "Weird shaped residence detection when using automatic residence creation", + "This will inform player about residence shape being iregular cuboid before creation of it"); + ARCRatioInform = c.get("Global.Optimizations.AutomaticResidenceCreation.Ratio.Inform", true); + + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Confirmation", + "While enabled player will be required to click on chat message or perform /res create [resName] to finalize creation of residence when its in a weird shape"); + ARCRatioConfirmation = c.get("Global.Optimizations.AutomaticResidenceCreation.Ratio.Confirmation", true); + + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Ratio.Value", + "Defines value of ration when residence will be counted as weird shaped ones", + "Value of 3 will mean that one of the sides of cuboid is atleast 3 times bigger than one of the remaining ones"); + ARCRatioValue = c.get("Global.Optimizations.AutomaticResidenceCreation.Ratio.Value", 3); + c.addComment("Global.Optimizations.AutomaticResidenceCreation.OldMethod", "Enabled this will switch to old method for calculating new residence area", "Old method is allot less efficient, so its not recomended to be used when you have residence areas over 100"); ARCOldMethod = c.get("Global.Optimizations.AutomaticResidenceCreation.OldMethod", false); @@ -2254,6 +2272,18 @@ public int getAntiGreefRangeGaps(String worldName) { return 0; } + public boolean isARCRatioInform() { + return ARCRatioInform; + } + + public int getARCRatioValue() { + return ARCRatioValue; + } + + public boolean isARCRatioConfirmation() { + return ARCRatioConfirmation; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index ca8f6a9ce..0d811a8a1 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -24,7 +24,7 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Logs.CMIDebug; +import net.Zrips.CMILib.RawMessages.RawMessage; public class auto implements cmd { @@ -76,8 +76,6 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo boolean result = false; - CMIDebug.d("----------------"); - CMIDebug.it(); if (plugin.getConfigManager().isARCOldMethod()) result = resize(plugin, player, cuboid, true, lenght); else @@ -110,12 +108,62 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (resName == null) resName = sender.getName() + plugin.getConfigManager().ARCIncrementFormat().replace("[number]", String.valueOf((new Random().nextInt(99950) + 50))); + Selection selection = plugin.getSelectionManager().getSelection(player); + + double ratioX = getRatio(selection.getBaseArea().getXSize(), selection.getBaseArea().getYSize(), selection.getBaseArea().getZSize()); + double ratioY = getRatio(selection.getBaseArea().getYSize(), selection.getBaseArea().getXSize(), selection.getBaseArea().getZSize()); + double ratioZ = getRatio(selection.getBaseArea().getZSize(), selection.getBaseArea().getXSize(), selection.getBaseArea().getZSize()); + + String maxSide = ""; + String minSide = ""; + + double maxRatio = 0; + + if (ratioX > maxRatio) { + maxSide = "Z"; + minSide = "X"; + maxRatio = ratioX; + } + + if (ratioZ > maxRatio) { + maxSide = "X"; + minSide = "Z"; + maxRatio = ratioZ; + } + + if (ratioY > maxRatio) { + maxSide = "X"; + minSide = "Y"; + maxRatio = ratioY; + } + + if (maxRatio > plugin.getConfigManager().getARCRatioValue()) { + if (plugin.getConfigManager().isARCRatioInform()) { + Residence.getInstance().msg(player, lm.Area_WeirdShape, maxSide, (int) (maxRatio * 100) / 100D, minSide); + } + + if (plugin.getConfigManager().isARCRatioConfirmation()) { + RawMessage rm = new RawMessage(); + rm.addText(Residence.getInstance().msg(lm.info_clickToConfirm)); + rm.addHover(Residence.getInstance().msg(lm.info_clickToConfirm)); + rm.addCommand((resadmin ? "resadmin" : "res") + " create " + resName); + rm.show(sender); + return true; + } + } player.performCommand((resadmin ? "resadmin" : "res") + " create " + resName); return true; } + private double getRatio(int v1, int v2, int v3) { + double ratio = v2 / (double) v1; + if (v3 / v1 > ratio) + ratio = v3 / (double) v1; + return ratio; + } + private static int getMax(int max) { int arcmin = Residence.getInstance().getConfigManager().getARCSizeMin(); int arcmax = Residence.getInstance().getConfigManager().getARCSizeMax(); diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 6c547dd17..15c20ba7b 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -62,6 +62,9 @@ public enum lm { Area_SizeLimit("&eArea size is not within your allowed limits."), Area_HighLimit("&cYou cannot protect this high up, your limit is &6%1"), Area_LowLimit("&cYou cannot protect this deep, your limit is &6%1"), + + Area_WeirdShape("&3Residence is out of regular shape. &6%1 &3side is &6%2 &3times bigger than &6%3 &3side"), + Select_Points("&eSelect two points first before using this command!"), Select_Overlap("&cSelected points overlap with &6%1 &cregion!"), From 6e1527957d162143230476fcaffa814095e56089 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 11 Jan 2023 17:07:41 +0200 Subject: [PATCH 1002/1142] lower capitalization for offline servers --- src/com/bekvon/bukkit/residence/ConfigManager.java | 1 + src/com/bekvon/bukkit/residence/commands/auto.java | 2 +- .../residence/protection/ClaimedResidence.java | 9 +++++---- .../bukkit/residence/protection/PlayerManager.java | 12 ++++++------ .../residence/protection/ResidencePermissions.java | 2 +- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 63ee24633..751d2add7 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -601,6 +601,7 @@ public void UpdateConfigFile() { UUIDConvertion = c.get("Global.UUIDConvertion", true); c.addComment("Global.OfflineMode", + "STRONGLY not recomended to be used anymore. Only enable if you are sure you want to use this", "If you running offline server. Suggestion would be to keep this at false and base residence ownership from UUID and not on players name"); OfflineMode = c.get("Global.OfflineMode", false); diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 0d811a8a1..0618af72f 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -43,7 +43,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } catch (Exception | Error e) { } - + if (args.length > 0 && lenght == -1) resName = args[0]; else diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 3ac4ffc4f..dced64f41 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -2022,17 +2022,18 @@ public boolean isOwner(Player p) { if (p == null) return false; if (Residence.getInstance().getConfigManager().isOfflineMode()) - return perms.getOwner().equalsIgnoreCase(p.getName()); + return perms.getOwner().equalsIgnoreCase(p.getName()) || perms.getOwnerUUID().equals(p.getUniqueId()); return perms.getOwnerUUID().equals(p.getUniqueId()); } public boolean isOwner(CommandSender sender) { + if (sender instanceof Player) + return isOwner((Player) sender); + if (Residence.getInstance().getConfigManager().isOfflineMode()) { return perms.getOwner().equalsIgnoreCase(sender.getName()); } - if (sender instanceof Player) { - return perms.getOwnerUUID().equals(((Player) sender).getUniqueId()); - } + return true; } diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 4958a6077..ae9c0635d 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -118,7 +118,7 @@ public ArrayList getResidenceList(String name) { if (player != null) return getResidenceList(player.getUniqueId()); ArrayList temp = new ArrayList(); - ResidencePlayer resPlayer = this.getResidencePlayer(name.toLowerCase()); + ResidencePlayer resPlayer = this.getResidencePlayer(name); if (resPlayer != null) { for (ClaimedResidence one : resPlayer.getResList()) { temp.add(one.getName()); @@ -136,7 +136,7 @@ public ArrayList getResidenceList(String player, boolean showhidden) { public ArrayList getResidenceList(String player, boolean showhidden, boolean onlyHidden) { ArrayList temp = new ArrayList(); // playerJoin(player, false); - ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); + ResidencePlayer resPlayer = this.getResidencePlayer(player); if (resPlayer == null) return temp; for (ClaimedResidence one : resPlayer.getResList()) { @@ -165,7 +165,7 @@ public ArrayList getResidences(String player, boolean showhidd // All 3 methods could be compacted into one, if needed public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden, World world) { ArrayList temp = new ArrayList(); - ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); + ResidencePlayer resPlayer = this.getResidencePlayer(player); if (resPlayer == null) return temp; for (ClaimedResidence one : resPlayer.getResList()) { @@ -184,7 +184,7 @@ public ArrayList getResidences(String player, boolean showhidd public TreeMap getResidencesMap(String player, boolean showhidden, boolean onlyHidden, World world) { TreeMap temp = new TreeMap(); - ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); + ResidencePlayer resPlayer = this.getResidencePlayer(player); if (resPlayer == null) { return temp; } @@ -205,7 +205,7 @@ public TreeMap getResidencesMap(String player, boolean public TreeMap getTrustedResidencesMap(String player, boolean showhidden, boolean onlyHidden, World world) { TreeMap temp = new TreeMap(); - ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); + ResidencePlayer resPlayer = this.getResidencePlayer(player); if (resPlayer == null) { return temp; } @@ -411,7 +411,7 @@ public void removeResFromPlayer(Player player, ClaimedResidence residence) { } public void removeResFromPlayer(String player, ClaimedResidence residence) { - ResidencePlayer resPlayer = this.getResidencePlayer(player.toLowerCase()); + ResidencePlayer resPlayer = this.getResidencePlayer(player); if (resPlayer != null) { resPlayer.removeResidence(residence); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 1185c5045..82b0607cc 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -246,7 +246,7 @@ public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) if (!Residence.getInstance().getConfigManager().isOfflineMode() && !player.getUniqueId().toString().equals(ownerUUID.toString())) { Residence.getInstance().msg(player, lm.General_NoPermission); return; - } else if (!player.getName().equals(ownerLastKnownName)) { + } else if (!player.getName().equalsIgnoreCase(ownerLastKnownName)) { Residence.getInstance().msg(player, lm.General_NoPermission); return; } From 2a1d939e26def3af5a7aa2305a266a24402c6f50 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 28 Feb 2023 13:45:22 +0200 Subject: [PATCH 1003/1142] Res auto double money message fix --- src/com/bekvon/bukkit/residence/ConfigManager.java | 1 - src/com/bekvon/bukkit/residence/commands/auto.java | 7 ++++--- .../bukkit/residence/selection/SelectionManager.java | 1 - src/plugin.yml | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 751d2add7..0c64a425f 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -982,7 +982,6 @@ public void UpdateConfigFile() { String worldName = one.substring(0, one.length() - split[split.length - 1].length() - 1); int range = Integer.parseInt(split[split.length - 1]); AntiGreefRangeGaps.put(worldName.toLowerCase(), range); - CMIDebug.d(worldName, range); } catch (Throwable e) { continue; } diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 0618af72f..3fea0b285 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -24,6 +24,7 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; public class auto implements cmd { @@ -80,7 +81,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo result = resize(plugin, player, cuboid, true, lenght); else result = optimizedResize(plugin, player, cuboid, true, lenght); - +CMIDebug.d(result); plugin.getSelectionManager().afterSelectionUpdate(player, true); if (!result) { @@ -316,7 +317,7 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, if (!Residence.getInstance().getEconomyManager().canAfford(player, cost)) { plugin.msg(player, lm.Economy_NotEnoughMoney); - break; + return false; } } @@ -645,7 +646,7 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre if (checkBalance && plugin.getConfigManager().enableEconomy() && !Residence.getInstance().getEconomyManager().canAfford(player, c.getCost(group))) { plugin.msg(player, lm.Economy_NotEnoughMoney); - break; + return false; } cuboid.setLowLocation(c.getLowLocation()); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 321089634..e1bbd6cb4 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -35,7 +35,6 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Effects.CMIEffect; import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; -import net.Zrips.CMILib.Logs.CMIDebug; public class SelectionManager { protected Map selections; diff --git a/src/plugin.yml b/src/plugin.yml index 37e01e00c..6700ce5b8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.0.1 +version: 5.1.1.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From fb776e8377a63bdc9977514e66d5c2a35561a134 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 28 Feb 2023 15:01:55 +0200 Subject: [PATCH 1004/1142] residence.bypass.itemdrop permission node --- src/com/bekvon/bukkit/residence/commands/auto.java | 2 +- .../residence/listeners/ResidenceBlockListener.java | 3 ++- .../bukkit/residence/permissions/PermissionGroup.java | 10 ++++++++++ .../residence/permissions/PermissionManager.java | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 3fea0b285..e6fe80378 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -81,7 +81,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo result = resize(plugin, player, cuboid, true, lenght); else result = optimizedResize(plugin, player, cuboid, true, lenght); -CMIDebug.d(result); + plugin.getSelectionManager().afterSelectionUpdate(player, true); if (!result) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index de7eaa352..ac10772c9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -66,6 +66,7 @@ import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { @@ -664,7 +665,7 @@ public static boolean canPlaceBlock(Player player, Block block, boolean informPl } FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(block.getLocation(), player); boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - + if (res != null && res.getRaid().isUnderRaid()) { if (res.getRaid().isAttacker(player.getUniqueId()) && ConfigManager.RaidAttackerBlockPlace || res.getRaid().isDefender(player.getUniqueId()) && ConfigManager.RaidDefenderBlockPlace) { hasplace = true; diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 29cfb2a61..0b431811d 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -48,6 +48,12 @@ public class PermissionGroup { // protected Map rentedDefaultFlags; protected Map> groupDefaultFlags; protected Map residenceDefaultFlags; + + + protected Map> groupperms; + protected Map worldperms; + + protected boolean messageperms = false; protected String defaultEnterMessage = null; protected String defaultLeaveMessage = null; @@ -77,6 +83,10 @@ public PermissionGroup(String name) { // rentedDefaultFlags = new HashMap(); residenceDefaultFlags = new HashMap(); groupDefaultFlags = new HashMap>(); + + worldperms = new HashMap<>(); + groupperms = new HashMap<>(); + groupname = name; } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 2d852a5e2..8ece1e586 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -246,6 +246,7 @@ public enum ResPerm { bypass_tp("Allows to bypass command flag"), bypass_command("Allows to bypass command flag"), bypass_itempickup("Allows to bypass itempickup flag"), + bypass_itemdrop("Allows to bypass itemdrop flag"), buy("Allows to buy residence"), sell("Allows to sell residence"), max_res_x_$1("Defines residence size limit on X axis", "number"), From 04e0dab4d9a9388eae86559f1807734847186344 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 28 Feb 2023 15:02:23 +0200 Subject: [PATCH 1005/1142] Follow Up --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index d0834c3bd..8c298d649 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -217,6 +217,10 @@ public void onPlayerDropItemEvent(PlayerDropItemEvent event) { return; if (!res.getPermissions().playerHas(event.getPlayer(), Flags.itemdrop, FlagCombo.OnlyFalse)) return; + + if (ResPerm.bypass_itemdrop.hasPermission(event.getPlayer(), 10000L)) + return; + event.setCancelled(true); } From 8fc40002d85914f16b70c46b57ebe6582a17ea4a Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 28 Feb 2023 15:21:03 +0200 Subject: [PATCH 1006/1142] Option to disable WorldEdit selection integration --- src/com/bekvon/bukkit/residence/ConfigManager.java | 8 ++++++++ src/com/bekvon/bukkit/residence/Residence.java | 7 +++++-- .../residence/listeners/ResidencePlayerListener.java | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 0c64a425f..680a64b98 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -198,6 +198,7 @@ public class ConfigManager { protected boolean SelectionIgnoreYInSubzone = false; private int SelectionNetherHeight = 128; protected boolean NoCostForYBlocks = false; + protected boolean WorldEditIntegration = false; protected boolean useVisualizer; protected boolean DisableListeners; protected boolean DisableCommands; @@ -633,6 +634,9 @@ public void UpdateConfigFile() { c.addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", "This will lower residence price by up to 319 times, so adjust block price BEFORE enabling this"); NoCostForYBlocks = c.get("Global.Selection.NoCostForYBlocks", false); + + c.addComment("Global.Selection.WorldEditIntegration", "Enable or disable world edit integration into Residence plugin"); + WorldEditIntegration = c.get("Global.Selection.WorldEditIntegration", true); c.addComment("Global.InfoToolId", "This determins which tool you can use to see info on residences, default is String.", "Simply equip this tool and hit a location inside the residence and it will display the info for it."); @@ -2284,6 +2288,10 @@ public boolean isARCRatioConfirmation() { return ARCRatioConfirmation; } + public boolean isWorldEditIntegration() { + return WorldEditIntegration; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 7ea5c632f..a6c158a8d 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -938,11 +938,14 @@ private void setWorldEdit() { this.wep = (com.sk89q.worldedit.bukkit.WorldEditPlugin) plugin; try { Class.forName("com.sk89q.worldedit.bukkit.selections.Selection"); - smanager = new WorldEditSelectionManager(server, this); + + if (getConfigManager().isWorldEditIntegration()) + smanager = new WorldEditSelectionManager(server, this); if (wep != null) SchematicManager = new SchematicsManager(this); } catch (ClassNotFoundException e) { - smanager = new WorldEdit7SelectionManager(server, this); + if (getConfigManager().isWorldEditIntegration()) + smanager = new WorldEdit7SelectionManager(server, this); if (wep != null) SchematicManager = new Schematics7Manager(this); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 8c298d649..5e4b43356 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -89,6 +89,7 @@ import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; From 465a25e16e1d41b4b6db3c9ab45825c45eb22bde Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 28 Feb 2023 15:24:15 +0200 Subject: [PATCH 1007/1142] worldedit.selection.pos permission requirement for selection with WE --- .../bukkit/residence/selection/WorldEdit7SelectionManager.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java index 2c51d0202..45c998bcd 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java @@ -58,6 +58,9 @@ public boolean worldEditUpdate(Player player) { if (!hasPlacedBoth(player)) return false; + if (!player.hasPermission("worldedit.selection.pos")) + return false; + World w = BukkitAdapter.adapt(player.getWorld()); try { From 55f240da65287c5e41032033e4ed6cbc7eed00cf Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 28 Feb 2023 15:44:28 +0200 Subject: [PATCH 1008/1142] StackOverflowError teleport fix --- .../listeners/ResidencePlayerListener.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 5e4b43356..86e4607b8 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2514,11 +2514,22 @@ public void run() { player.closeInventory(); if (lastLoc != null && CMIMaterial.isAir(lastLoc.getBlock().getType())) { Long last = lastUpdate.get(player.getUniqueId()); - // Fail safe in case we are triggering teleportation event check with this teleportion, we should teleport player outside residence instead of its repeating teleportation to avoid stack overflow + // Fail safe in case we are triggering teleportation event check with this teleportation, we should teleport player outside residence instead of its repeating teleportation to avoid stack overflow if (last != null && System.currentTimeMillis() - last > 45L) { teleport(player, res.getOutsideFreeLoc(loc, player)); } else { this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); + + ClaimedResidence outsideRes = plugin.getResidenceManager().getByLoc(lastLoc); + + if (outsideRes != null && !Flags.move.isGlobalyEnabled() && outsideRes.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) + && !outsideRes.isOwner(player) && !ResPerm.admin_move.hasPermission(player, 10000L)) { + return false; + } + + if (!plugin.getPermsByLoc(lastLoc).playerHas(player, Flags.move, FlagCombo.OnlyFalse)) + return false; + teleport(player, lastLoc); } } else { From 0385a57f9aea4da6058c7a6191c29a00d7ea86bf Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 28 Feb 2023 16:02:50 +0200 Subject: [PATCH 1009/1142] Concurent sign modification fix --- .../bukkit/residence/commands/market.java | 864 +++++++++--------- .../protection/ClaimedResidence.java | 3 +- .../bukkit/residence/signsStuff/SignUtil.java | 5 +- 3 files changed, 438 insertions(+), 434 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index d737ee79b..d32b1e539 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -27,457 +27,457 @@ public class market implements cmd { @Override @CommandAnnotation(simple = true, priority = 2600) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - this.plugin = plugin; - if (!(sender instanceof Player)) - return false; - - if (args.length == 0) { - return false; - } - - Player player = (Player) sender; - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - - switch (args[0].toLowerCase()) { - - case "list": - return commandResMarketList(args, player, page); - case "autopay": - return commandResMarketAutoPay(args, resadmin, player); - case "payrent": - return commandResMarketPayRent(args, resadmin, player); - case "rentable": - return commandResMarketRentable(args, resadmin, player); - case "rent": - return commandResMarketRent(args, resadmin, player); - case "release": - case "unrent": - if (args.length != 2 && args.length != 1) - return false; - - ClaimedResidence res = null; - - if (args.length == 1) - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else - res = plugin.getResidenceManager().getByName(args[1]); - - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - - if (res.isRented()) { - if (resadmin || plugin.isResAdminOn(player) || ResPerm.market_evict.hasPermission(player)) { - plugin.UnrentConfirm.put(player.getName(), res.getName()); - plugin.msg(sender, lm.Rent_EvictConfirm, res.getName()); - } else if (plugin.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sender.getName())) { - plugin.UnrentConfirm.put(player.getName(), res.getName()); - plugin.msg(sender, lm.Rent_UnrentConfirm, res.getName()); - } else - plugin.getRentManager().printRentInfo(player, res); - } else { - plugin.UnrentConfirm.put(player.getName(), res.getName()); - plugin.msg(sender, lm.Rent_ReleaseConfirm, res.getName()); - } - - return true; - - case "confirm": - if (!plugin.UnrentConfirm.containsKey(player.getName())) { - plugin.msg(player, lm.Invalid_Residence); - return false; - } - String area = plugin.UnrentConfirm.remove(player.getName()); - res = plugin.getResidenceManager().getByName(area); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - - if (!res.isRented()) { - plugin.getRentManager().removeFromForRent(player, res, resadmin); - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - if (rPlayer != null && rPlayer.getMainResidence() == res) { - rPlayer.setMainResidence(null); - } - } else - plugin.getRentManager().unrent(player, area, resadmin); - return true; - case "sign": - if (args.length != 2) { - return false; - } - Block block = Utils.getTargetBlock(player, 10); - - if (!(block.getState() instanceof Sign)) { - plugin.msg(player, lm.Sign_LookAt); - return true; - } - - Sign sign = (Sign) block.getState(); - - Signs signInfo = new Signs(); - - Signs oldSign = plugin.getSignUtil().getSignFromLoc(sign.getLocation()); - - if (oldSign != null) - signInfo = oldSign; - - Location loc = sign.getLocation(); - - ClaimedResidence CurrentRes = plugin.getResidenceManager().getByLoc(sign.getLocation()); - - if (CurrentRes != null && !CurrentRes.isOwner(player) && !resadmin) { - plugin.msg(player, lm.Residence_NotOwner); - return true; - } - - res = plugin.getResidenceManager().getByName(args[1]); - - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - - boolean ForSale = res.isForSell(); - boolean ForRent = res.isForRent(); - - if (ForSale || ForRent) { - signInfo.setResidence(res); - signInfo.setLocation(loc); - plugin.getSignUtil().getSigns().addSign(signInfo); - plugin.getSignUtil().saveSigns(); - } else { - plugin.msg(player, lm.Residence_NotForRentOrSell); - return true; - } - - plugin.getSignUtil().CheckSign(res, 5); - - return true; - - case "info": - res = null; - if (args.length == 1) - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 2) - res = plugin.getResidenceManager().getByName(args[1]); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - boolean sell = plugin.getTransactionManager().viewSaleInfo(res, player); - if (plugin.getConfigManager().enabledRentSystem() && res.isForRent()) { - plugin.getRentManager().printRentInfo(player, res); - } else if (!sell) { - plugin.msg(sender, lm.Residence_NotForRentOrSell); - } - return true; - case "buy": - res = null; - if (args.length == 1) - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 2) - res = plugin.getResidenceManager().getByName(args[1]); - - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - - sell = plugin.getTransactionManager().viewSaleInfo(res, player); - if (sell) { - plugin.getTransactionManager().buyPlot(res, player, resadmin); - } else { - plugin.msg(sender, lm.Residence_NotForRentOrSell); - } - return true; - case "unsell": - if (args.length != 2) - return false; - - plugin.getTransactionManager().removeFromSale(player, args[1], resadmin); - return true; - - case "sell": - if (args.length != 3) - return false; - - int amount; - try { - amount = Integer.parseInt(args[2]); - } catch (Exception ex) { - plugin.msg(player, lm.Invalid_Amount); - return true; - } - plugin.getTransactionManager().putForSale(args[1], player, amount, resadmin); - return true; - default: - return false; - } + this.plugin = plugin; + if (!(sender instanceof Player)) + return false; + + if (args.length == 0) { + return false; + } + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + + switch (args[0].toLowerCase()) { + + case "list": + return commandResMarketList(args, player, page); + case "autopay": + return commandResMarketAutoPay(args, resadmin, player); + case "payrent": + return commandResMarketPayRent(args, resadmin, player); + case "rentable": + return commandResMarketRentable(args, resadmin, player); + case "rent": + return commandResMarketRent(args, resadmin, player); + case "release": + case "unrent": + if (args.length != 2 && args.length != 1) + return false; + + ClaimedResidence res = null; + + if (args.length == 1) + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + else + res = plugin.getResidenceManager().getByName(args[1]); + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + if (res.isRented()) { + if (resadmin || plugin.isResAdminOn(player) || ResPerm.market_evict.hasPermission(player)) { + plugin.UnrentConfirm.put(player.getName(), res.getName()); + plugin.msg(sender, lm.Rent_EvictConfirm, res.getName()); + } else if (plugin.getRentManager().getRentingPlayer(res).equalsIgnoreCase(sender.getName())) { + plugin.UnrentConfirm.put(player.getName(), res.getName()); + plugin.msg(sender, lm.Rent_UnrentConfirm, res.getName()); + } else + plugin.getRentManager().printRentInfo(player, res); + } else { + plugin.UnrentConfirm.put(player.getName(), res.getName()); + plugin.msg(sender, lm.Rent_ReleaseConfirm, res.getName()); + } + + return true; + + case "confirm": + if (!plugin.UnrentConfirm.containsKey(player.getName())) { + plugin.msg(player, lm.Invalid_Residence); + return false; + } + String area = plugin.UnrentConfirm.remove(player.getName()); + res = plugin.getResidenceManager().getByName(area); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + if (!res.isRented()) { + plugin.getRentManager().removeFromForRent(player, res, resadmin); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + if (rPlayer != null && rPlayer.getMainResidence() == res) { + rPlayer.setMainResidence(null); + } + } else + plugin.getRentManager().unrent(player, area, resadmin); + return true; + case "sign": + if (args.length != 2) { + return false; + } + Block block = Utils.getTargetBlock(player, 10); + + if (!(block.getState() instanceof Sign)) { + plugin.msg(player, lm.Sign_LookAt); + return true; + } + + Sign sign = (Sign) block.getState(); + + Signs signInfo = new Signs(); + + Signs oldSign = plugin.getSignUtil().getSignFromLoc(sign.getLocation()); + + if (oldSign != null) + signInfo = oldSign; + + Location loc = sign.getLocation(); + + ClaimedResidence CurrentRes = plugin.getResidenceManager().getByLoc(sign.getLocation()); + + if (CurrentRes != null && !CurrentRes.isOwner(player) && !resadmin) { + plugin.msg(player, lm.Residence_NotOwner); + return true; + } + + res = plugin.getResidenceManager().getByName(args[1]); + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + boolean ForSale = res.isForSell(); + boolean ForRent = res.isForRent(); + + if (ForSale || ForRent) { + signInfo.setResidence(res); + signInfo.setLocation(loc); + plugin.getSignUtil().getSigns().addSign(signInfo); + plugin.getSignUtil().saveSigns(); + } else { + plugin.msg(player, lm.Residence_NotForRentOrSell); + return true; + } + + plugin.getSignUtil().CheckSign(res, 5); + + return true; + + case "info": + res = null; + if (args.length == 1) + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 2) + res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + boolean sell = plugin.getTransactionManager().viewSaleInfo(res, player); + if (plugin.getConfigManager().enabledRentSystem() && res.isForRent()) { + plugin.getRentManager().printRentInfo(player, res); + } else if (!sell) { + plugin.msg(sender, lm.Residence_NotForRentOrSell); + } + return true; + case "buy": + res = null; + if (args.length == 1) + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 2) + res = plugin.getResidenceManager().getByName(args[1]); + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + sell = plugin.getTransactionManager().viewSaleInfo(res, player); + if (sell) { + plugin.getTransactionManager().buyPlot(res, player, resadmin); + } else { + plugin.msg(sender, lm.Residence_NotForRentOrSell); + } + return true; + case "unsell": + if (args.length != 2) + return false; + + plugin.getTransactionManager().removeFromSale(player, args[1], resadmin); + return true; + + case "sell": + if (args.length != 3) + return false; + + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Amount); + return true; + } + plugin.getTransactionManager().putForSale(args[1], player, amount, resadmin); + return true; + default: + return false; + } } private boolean commandResMarketRent(String[] args, boolean resadmin, Player player) { - if (args.length < 1 || args.length > 3) { - return false; - } - boolean repeat = plugin.getConfigManager().isRentPlayerAutoPay(); - - ClaimedResidence res = null; - - if (args.length == 3) { - if (args[2].equalsIgnoreCase("t") || args[2].equalsIgnoreCase("true")) { - repeat = true; - } else if (args[2].equalsIgnoreCase("f") || args[2].equalsIgnoreCase("false")) { - repeat = false; - } else { - plugin.msg(player, lm.Invalid_Boolean); - return true; - } - } - - if (args.length == 1) - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length > 1) - res = plugin.getResidenceManager().getByName(args[1]); - - if (res != null) { - plugin.getRentManager().rent(player, res, repeat, resadmin); - } else - plugin.msg(player, lm.Invalid_Residence); - - return true; + if (args.length < 1 || args.length > 3) { + return false; + } + boolean repeat = plugin.getConfigManager().isRentPlayerAutoPay(); + + ClaimedResidence res = null; + + if (args.length == 3) { + if (args[2].equalsIgnoreCase("t") || args[2].equalsIgnoreCase("true")) { + repeat = true; + } else if (args[2].equalsIgnoreCase("f") || args[2].equalsIgnoreCase("false")) { + repeat = false; + } else { + plugin.msg(player, lm.Invalid_Boolean); + return true; + } + } + + if (args.length == 1) + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length > 1) + res = plugin.getResidenceManager().getByName(args[1]); + + if (res != null) { + plugin.getRentManager().rent(player, res, repeat, resadmin); + } else + plugin.msg(player, lm.Invalid_Residence); + + return true; } private boolean commandResMarketPayRent(String[] args, boolean resadmin, Player player) { - if (args.length != 1 && args.length != 2) { - return false; - } - - ClaimedResidence res = null; - - if (args.length == 1) - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else - res = plugin.getResidenceManager().getByName(args[1]); - - if (res != null) - plugin.getRentManager().payRent(player, res, resadmin); - else - plugin.msg(player, lm.Invalid_Residence); - return true; + if (args.length != 1 && args.length != 2) { + return false; + } + + ClaimedResidence res = null; + + if (args.length == 1) + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + else + res = plugin.getResidenceManager().getByName(args[1]); + + if (res != null) + plugin.getRentManager().payRent(player, res, resadmin); + else + plugin.msg(player, lm.Invalid_Residence); + return true; } private boolean commandResMarketRentable(String[] args, boolean resadmin, Player player) { - if (args.length < 4 || args.length > 7) { - return false; - } - if (!plugin.getConfigManager().enabledRentSystem()) { - plugin.msg(player, lm.Rent_Disabled); - return true; - } - int days; - int cost; - try { - cost = Integer.parseInt(args[2]); - } catch (Exception ex) { - plugin.msg(player, lm.Invalid_Cost); - return true; - } - try { - days = Integer.parseInt(args[3]); - } catch (Exception ex) { - plugin.msg(player, lm.Invalid_Days); - return true; - } - boolean AllowRenewing = plugin.getConfigManager().isRentAllowRenewing(); - if (args.length >= 5) { - String ag = args[4]; - if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { - AllowRenewing = true; - } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { - AllowRenewing = false; - } else { - plugin.msg(player, lm.Invalid_Boolean); - return true; - } - } - - boolean StayInMarket = plugin.getConfigManager().isRentStayInMarket(); - if (args.length >= 6) { - String ag = args[5]; - if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { - StayInMarket = true; - } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { - StayInMarket = false; - } else { - plugin.msg(player, lm.Invalid_Boolean); - return true; - } - } - - boolean AllowAutoPay = plugin.getConfigManager().isRentAllowAutoPay(); - if (args.length >= 7) { - String ag = args[6]; - if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { - AllowAutoPay = true; - } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { - AllowAutoPay = false; - } else { - plugin.msg(player, lm.Invalid_Boolean); - return true; - } - } - - plugin.getRentManager().setForRent(player, args[1], cost, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); - return true; + if (args.length < 4 || args.length > 7) { + return false; + } + if (!plugin.getConfigManager().enabledRentSystem()) { + plugin.msg(player, lm.Rent_Disabled); + return true; + } + int days; + int cost; + try { + cost = Integer.parseInt(args[2]); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Cost); + return true; + } + try { + days = Integer.parseInt(args[3]); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Days); + return true; + } + boolean AllowRenewing = plugin.getConfigManager().isRentAllowRenewing(); + if (args.length >= 5) { + String ag = args[4]; + if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { + AllowRenewing = true; + } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { + AllowRenewing = false; + } else { + plugin.msg(player, lm.Invalid_Boolean); + return true; + } + } + + boolean StayInMarket = plugin.getConfigManager().isRentStayInMarket(); + if (args.length >= 6) { + String ag = args[5]; + if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { + StayInMarket = true; + } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { + StayInMarket = false; + } else { + plugin.msg(player, lm.Invalid_Boolean); + return true; + } + } + + boolean AllowAutoPay = plugin.getConfigManager().isRentAllowAutoPay(); + if (args.length >= 7) { + String ag = args[6]; + if (ag.equalsIgnoreCase("t") || ag.equalsIgnoreCase("true")) { + AllowAutoPay = true; + } else if (ag.equalsIgnoreCase("f") || ag.equalsIgnoreCase("false")) { + AllowAutoPay = false; + } else { + plugin.msg(player, lm.Invalid_Boolean); + return true; + } + } + + plugin.getRentManager().setForRent(player, args[1], cost, days, AllowRenewing, StayInMarket, AllowAutoPay, resadmin); + return true; } private boolean commandResMarketAutoPay(String[] args, boolean resadmin, Player player) { - if (!plugin.getConfigManager().enableEconomy()) { - plugin.msg(player, lm.Economy_MarketDisabled); - return true; - } - if (args.length != 2 && args.length != 3) { - return false; - } - - boolean value; - - String barg = ""; - ClaimedResidence res = null; - if (args.length == 2) { - barg = args[1]; - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - } else { - barg = args[2]; - res = plugin.getResidenceManager().getByName(args[1]); - } - - if (barg.equalsIgnoreCase("true") || barg.equalsIgnoreCase("t")) { - value = true; - } else if (barg.equalsIgnoreCase("false") || barg.equalsIgnoreCase("f")) { - value = false; - } else { - plugin.msg(player, lm.Invalid_Boolean); - return true; - } - - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - - if (res.isRented() && res.getRentedLand().player.equalsIgnoreCase(player.getName())) { - plugin.getRentManager().setRentedRepeatable(player, res.getName(), value, resadmin); - } else if (res.isForRent()) { - plugin.getRentManager().setRentRepeatable(player, res.getName(), value, resadmin); - } else { - plugin.msg(player, lm.Economy_RentReleaseInvalid, ChatColor.YELLOW + res.getName() + ChatColor.RED); - } - return true; + if (!plugin.getConfigManager().enableEconomy()) { + plugin.msg(player, lm.Economy_MarketDisabled); + return true; + } + if (args.length != 2 && args.length != 3) { + return false; + } + + boolean value; + + String barg = ""; + ClaimedResidence res = null; + if (args.length == 2) { + barg = args[1]; + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + } else { + barg = args[2]; + res = plugin.getResidenceManager().getByName(args[1]); + } + + if (barg.equalsIgnoreCase("true") || barg.equalsIgnoreCase("t")) { + value = true; + } else if (barg.equalsIgnoreCase("false") || barg.equalsIgnoreCase("f")) { + value = false; + } else { + plugin.msg(player, lm.Invalid_Boolean); + return true; + } + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + if (res.isRented() && res.getRentedLand().player.equalsIgnoreCase(player.getName())) { + plugin.getRentManager().setRentedRepeatable(player, res.getName(), value, resadmin); + } else if (res.isForRent()) { + plugin.getRentManager().setRentRepeatable(player, res.getName(), value, resadmin); + } else { + plugin.msg(player, lm.Economy_RentReleaseInvalid, ChatColor.YELLOW + res.getName() + ChatColor.RED); + } + return true; } private boolean commandResMarketList(String[] args, Player player, int page) { - if (!plugin.getConfigManager().enableEconomy()) { - plugin.msg(player, lm.Economy_MarketDisabled); - return true; - } - plugin.msg(player, lm.General_MarketList); - if (args.length < 2) - return false; - - if (args[1].equalsIgnoreCase("sell")) { - plugin.getTransactionManager().printForSaleResidences(player, page); - return true; - } - if (args[1].equalsIgnoreCase("rent")) { - if (plugin.getConfigManager().enabledRentSystem()) { - plugin.getRentManager().printRentableResidences(player, page); - } - return true; - } - return false; + if (!plugin.getConfigManager().enableEconomy()) { + plugin.msg(player, lm.Economy_MarketDisabled); + return true; + } + plugin.msg(player, lm.General_MarketList); + if (args.length < 2) + return false; + + if (args[1].equalsIgnoreCase("sell")) { + plugin.getTransactionManager().printForSaleResidences(player, page); + return true; + } + if (args[1].equalsIgnoreCase("rent")) { + if (plugin.getConfigManager().enabledRentSystem()) { + plugin.getRentManager().printRentableResidences(player, page); + } + return true; + } + return false; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - - c.get("Description", "Buy, Sell, or Rent Residences"); - c.get("Info", Arrays.asList("&eUsage: &6/res market ? for more Info")); - - c.setFullPath(c.getPath() + "SubCommands."); - - c.get("Info.Description", "Get economy Info on residence"); - c.get("Info.Info", Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost.")); - LocaleManager.addTabCompleteSub(this, "Info", "[residence]"); - - c.get("list.Description", "Lists rentable and for sale residences."); - c.get("list.Info", Arrays.asList("&eUsage: &6/res market list [rent/sell]")); - LocaleManager.addTabCompleteSub(this, "list", "rent%%sell"); - - c.get("list.SubCommands.rent.Description", "Lists rentable residences."); - c.get("list.SubCommands.rent.Info", Arrays.asList("&eUsage: &6/res market list rent")); - - c.get("list.SubCommands.sell.Description", "Lists for sale residences."); - c.get("list.SubCommands.sell.Info", Arrays.asList("&eUsage: &6/res market list sell")); - - c.get("sell.Description", "Sell a residence"); - c.get("sell.Info", Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", - "Another player can buy the residence with /res market buy")); - LocaleManager.addTabCompleteSub(this, "sell", "[residence]"); - - c.get("sign.Description", "Set market sign"); - c.get("sign.Info", Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at.")); - LocaleManager.addTabCompleteSub(this, "sign", "[residence]"); - - c.get("buy.Description", "Buy a residence"); - c.get("buy.Info", Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale.")); - LocaleManager.addTabCompleteSub(this, "buy", "[residence]"); - - c.get("unsell.Description", "Stops selling a residence"); - c.get("unsell.Info", Arrays.asList("&eUsage: &6/res market unsell [residence]")); - LocaleManager.addTabCompleteSub(this, "unsell", "[residence]"); - - c.get("rent.Description", "ent a residence"); - c.get("rent.Info", Arrays.asList("&eUsage: &6/res market rent [residence] ", - "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.")); - LocaleManager.addTabCompleteSub(this, "rent", "[cresidence]", "true%%false"); - - c.get("rentable.Description", "Make a residence rentable."); - c.get("rentable.Info", Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", - "Makes a residence rentable for [cost] money for every [days] number of days.", - "If is true, the residence will be able to be rented again before rent expires.", - "If is true, the residence will stay in market after last renter will be removed.", - "If is true, money for rent will be automaticaly taken from players balance if he chosen that option when renting")); - LocaleManager.addTabCompleteSub(this, "rentable", "[residence]", "1000", "7", "true", "true", "true"); - - c.get("autopay.Description", "Sets residence AutoPay to given value"); - c.get("autopay.Info", Arrays.asList("&eUsage: &6/res market autopay [residence] [true/false]")); - LocaleManager.addTabCompleteSub(this, "autopay", "[residence]%%true%%false", "true%%false"); - - c.get("payrent.Description", "Pays rent for defined residence"); - c.get("payrent.Info", Arrays.asList("&eUsage: &6/res market payrent [residence]")); - LocaleManager.addTabCompleteSub(this, "payrent", "[residence]"); - - c.get("confirm.Description", "Confirms residence unrent/release action"); - c.get("confirm.Info", Arrays.asList("&eUsage: &6/res market confirm")); - LocaleManager.addTabCompleteSub(this, "confirm"); - - c.get("unrent.Description", "Remove a residence from rent or rentable."); - c.get("unrent.Info", Arrays.asList("&eUsage: &6/res market unrent [residence]", - "If you are the renter, this command releases the rent on the house for you.", - "If you are the owner, this command makes the residence not for rent anymore.")); - LocaleManager.addTabCompleteSub(this, "release", "[residence]"); - LocaleManager.addTabCompleteSub(this, "unrent", "[residence]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + + c.get("Description", "Buy, Sell, or Rent Residences"); + c.get("Info", Arrays.asList("&eUsage: &6/res market ? for more Info")); + + c.setFullPath(c.getPath() + "SubCommands."); + + c.get("Info.Description", "Get economy Info on residence"); + c.get("Info.Info", Arrays.asList("&eUsage: &6/res market Info [residence]", "Shows if the Residence is for sale or for rent, and the cost.")); + LocaleManager.addTabCompleteSub(this, "Info", "[residence]"); + + c.get("list.Description", "Lists rentable and for sale residences."); + c.get("list.Info", Arrays.asList("&eUsage: &6/res market list [rent/sell]")); + LocaleManager.addTabCompleteSub(this, "list", "rent%%sell"); + + c.get("list.SubCommands.rent.Description", "Lists rentable residences."); + c.get("list.SubCommands.rent.Info", Arrays.asList("&eUsage: &6/res market list rent")); + + c.get("list.SubCommands.sell.Description", "Lists for sale residences."); + c.get("list.SubCommands.sell.Info", Arrays.asList("&eUsage: &6/res market list sell")); + + c.get("sell.Description", "Sell a residence"); + c.get("sell.Info", Arrays.asList("&eUsage: &6/res market sell [residence] [amount]", "Puts a residence for sale for [amount] of money.", + "Another player can buy the residence with /res market buy")); + LocaleManager.addTabCompleteSub(this, "sell", "[residence]"); + + c.get("sign.Description", "Set market sign"); + c.get("sign.Info", Arrays.asList("&eUsage: &6/res market sign [residence]", "Sets market sign you are looking at.")); + LocaleManager.addTabCompleteSub(this, "sign", "[residence]"); + + c.get("buy.Description", "Buy a residence"); + c.get("buy.Info", Arrays.asList("&eUsage: &6/res market buy [residence]", "Buys a Residence if its for sale.")); + LocaleManager.addTabCompleteSub(this, "buy", "[residence]"); + + c.get("unsell.Description", "Stops selling a residence"); + c.get("unsell.Info", Arrays.asList("&eUsage: &6/res market unsell [residence]")); + LocaleManager.addTabCompleteSub(this, "unsell", "[residence]"); + + c.get("rent.Description", "ent a residence"); + c.get("rent.Info", Arrays.asList("&eUsage: &6/res market rent [residence] ", + "Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.")); + LocaleManager.addTabCompleteSub(this, "rent", "[cresidence]", "true%%false"); + + c.get("rentable.Description", "Make a residence rentable."); + c.get("rentable.Info", Arrays.asList("&eUsage: &6/res market rentable [residence] [cost] [days] ", + "Makes a residence rentable for [cost] money for every [days] number of days.", + "If is true, the residence will be able to be rented again before rent expires.", + "If is true, the residence will stay in market after last renter will be removed.", + "If is true, money for rent will be automaticaly taken from players balance if he chosen that option when renting")); + LocaleManager.addTabCompleteSub(this, "rentable", "[residence]", "1000", "7", "true", "true", "true"); + + c.get("autopay.Description", "Sets residence AutoPay to given value"); + c.get("autopay.Info", Arrays.asList("&eUsage: &6/res market autopay [residence] [true/false]")); + LocaleManager.addTabCompleteSub(this, "autopay", "[residence]%%true%%false", "true%%false"); + + c.get("payrent.Description", "Pays rent for defined residence"); + c.get("payrent.Info", Arrays.asList("&eUsage: &6/res market payrent [residence]")); + LocaleManager.addTabCompleteSub(this, "payrent", "[residence]"); + + c.get("confirm.Description", "Confirms residence unrent/release action"); + c.get("confirm.Info", Arrays.asList("&eUsage: &6/res market confirm")); + LocaleManager.addTabCompleteSub(this, "confirm"); + + c.get("unrent.Description", "Remove a residence from rent or rentable."); + c.get("unrent.Info", Arrays.asList("&eUsage: &6/res market unrent [residence]", + "If you are the renter, this command releases the rent on the house for you.", + "If you are the owner, this command makes the residence not for rent anymore.")); + LocaleManager.addTabCompleteSub(this, "release", "[residence]"); + LocaleManager.addTabCompleteSub(this, "unrent", "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index dced64f41..1da54858c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -4,6 +4,7 @@ import java.text.DecimalFormatSymbols; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -101,7 +102,7 @@ public class ClaimedResidence { private ResidenceRaid raid; - private Set signsInResidence = new HashSet(); + private Set signsInResidence = Collections.synchronizedSet(new HashSet()); public String getResidenceName() { return resName; diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 04aae00ad..335430257 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -5,11 +5,14 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TimeZone; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentHashMap.KeySetView; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -163,7 +166,7 @@ public void removeSign(ClaimedResidence res) { } } - public void updateSignResName(ClaimedResidence res) { + public void updateSignResName(ClaimedResidence res) { for (Signs one : res.getSignsInResidence()) { if (res != one.getResidence()) continue; From 283dce09d451d660316a6886da48ab20a5254862 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 28 Feb 2023 16:16:27 +0200 Subject: [PATCH 1010/1142] Limit residence sign count per residence to 5 by default --- .../bukkit/residence/ConfigManager.java | 12 +- .../bukkit/residence/commands/market.java | 6 + .../bukkit/residence/containers/lm.java | 48 +- .../listeners/ResidencePlayerListener.java | 5 + .../bukkit/residence/signsStuff/SignUtil.java | 580 +++++++++--------- 5 files changed, 344 insertions(+), 307 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 680a64b98..ec852c371 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -230,8 +230,9 @@ public class ConfigManager { protected List FlagsList; protected List NegativePotionEffects; protected List NegativeLingeringPotionEffects; - private Double WalkSpeed1; - private Double WalkSpeed2; + private double WalkSpeed1; + private double WalkSpeed2; + private int SignsMaxPerResidence; protected Location KickLocation; protected Location FlyLandLocation; @@ -823,6 +824,9 @@ public void UpdateConfigFile() { WalkSpeed2 = WalkSpeed2 < 0 ? 0 : WalkSpeed2; WalkSpeed2 = WalkSpeed2 > 5 ? 5 : WalkSpeed2; WalkSpeed2 = WalkSpeed2 / 5.0; + + SignsMaxPerResidence = c.get("Global.Signs.MaxPerResidence", 5); + SignsMaxPerResidence = SignsMaxPerResidence < 0 ? 0 : SignsMaxPerResidence; c.addComment("Global.MoveCheckInterval", "The interval, in milliseconds, between movement checks.", "Reducing this will increase the load on the server.", "Increasing this will allow players to move further in movement restricted zones before they are teleported out."); @@ -2291,6 +2295,10 @@ public boolean isARCRatioConfirmation() { public boolean isWorldEditIntegration() { return WorldEditIntegration; } + + public int getSignsMaxPerResidence() { + return SignsMaxPerResidence; + } // public int getTownMinRange() { // return TownMinRange; diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index d32b1e539..457bfc8ac 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -150,6 +150,12 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo boolean ForRent = res.isForRent(); if (ForSale || ForRent) { + + if (res.getSignsInResidence().size() >= plugin.getConfigManager().getSignsMaxPerResidence()) { + lm.Sign_TooMany.sendMessage(player); + return true; + } + signInfo.setResidence(res); signInfo.setLocation(loc); plugin.getSignUtil().getSigns().addSign(signInfo); diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 15c20ba7b..434a26873 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -3,6 +3,8 @@ import java.util.ArrayList; import java.util.Arrays; +import org.bukkit.command.CommandSender; + import com.bekvon.bukkit.residence.Residence; public enum lm { @@ -62,9 +64,8 @@ public enum lm { Area_SizeLimit("&eArea size is not within your allowed limits."), Area_HighLimit("&cYou cannot protect this high up, your limit is &6%1"), Area_LowLimit("&cYou cannot protect this deep, your limit is &6%1"), - + Area_WeirdShape("&3Residence is out of regular shape. &6%1 &3side is &6%2 &3times bigger than &6%3 &3side"), - Select_Points("&eSelect two points first before using this command!"), Select_Overlap("&cSelected points overlap with &6%1 &cregion!"), @@ -105,6 +106,7 @@ public enum lm { Sign_ForSaleResName("&0%1"), Sign_ForSaleBottom("&0%1m\u00B3"), Sign_LookAt("&cYou are not looking at sign"), + Sign_TooMany("&cToo many signs for this residence"), Sign_ResName("&0%1"), Sign_Owner("&0%1"), @@ -317,7 +319,7 @@ public enum lm { command_removedBlock("&eRemoved blocked command for &6%1 &eresidence"), command_Blocked("&eBlocked commands: &6%1"), command_Allowed("&eAllowed commands: &6%1"), - + command_Parsed("%1"), command_PlacehlderList("&e%1. &6%2"), command_PlacehlderResult(" &eresult: &6%1"), @@ -556,34 +558,50 @@ public enum lm { General_World("&eWorld: &6%1"), General_Subzones("&eSubzones"), General_NewPlayerInfo( - "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", - "The below lines represent various messages residence sends to the players.", - "Note that some messages have variables such as %1 that are inserted at runtime."); + "&eIf you want to create protected area for your house, please use wooden axe to select opposite sides of your home and execute command &2/res create YourResidenceName", + "The below lines represent various messages residence sends to the players.", + "Note that some messages have variables such as %1 that are inserted at runtime."); private Object text; private String[] comments; private lm(Object text, String... comments) { - this.text = text; - this.comments = comments; + this.text = text; + this.comments = comments; } public Object getText() { - return text; + return text; } public String[] getComments() { - return comments; + return comments; } public String getPath() { - String path = this.name(); - if (!this.name().contains("Language.") && !this.name().contains("CommandHelp.")) - path = "Language." + this.name(); - return path.replace("_", "."); + String path = this.name(); + if (!this.name().contains("Language.") && !this.name().contains("CommandHelp.")) + path = "Language." + this.name(); + return path.replace("_", "."); } public String getMessage(Object... variables) { - return Residence.getInstance().getLM().getMessage(this, variables); + return Residence.getInstance().getLM().getMessage(this, variables); + } + + public void sendMessage(CommandSender sender, Object... variables) { + + if (sender == null) + return; + + if (Residence.getInstance().getLM().containsKey(getPath())) { + String msg = Residence.getInstance().getLM().getMessage(this, variables); + if (msg.length() > 0) + sender.sendMessage(msg); + } else { + String msg = getPath(); + if (msg.length() > 0) + sender.sendMessage(getPath()); + } } } \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 86e4607b8..45dd611f4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -793,6 +793,11 @@ public void onSignCreate(SignChangeEvent event) { return; } + if (res.getSignsInResidence().size() >= plugin.getConfigManager().getSignsMaxPerResidence()) { + lm.Sign_TooMany.sendMessage(player); + return; + } + final ClaimedResidence residence = res; signInfo.setResidence(res); diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 335430257..f86617853 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -38,369 +38,369 @@ public class SignUtil { public SignInfo Signs = new SignInfo(); public SignUtil(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } public SignInfo getSigns() { - return Signs; + return Signs; } public int updateAllSigns() { - ConcurrentHashMap temp = new ConcurrentHashMap(); - temp.putAll(Signs.GetAllSigns()); - for (Entry one : temp.entrySet()) { - SignUpdate(one.getValue()); - } - saveSigns(); - return temp.size(); + ConcurrentHashMap temp = new ConcurrentHashMap(); + temp.putAll(Signs.GetAllSigns()); + for (Entry one : temp.entrySet()) { + SignUpdate(one.getValue()); + } + saveSigns(); + return temp.size(); } // Sign file public void LoadSigns() { - Signs.GetAllSigns().clear(); - File file = new File(plugin.getDataFolder(), "Signs.yml"); - YamlConfiguration f = YamlConfiguration.loadConfiguration(file); - - if (!f.isConfigurationSection("Signs")) - return; - - ConfigurationSection ConfCategory = f.getConfigurationSection("Signs"); - ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); - if (categoriesList.size() == 0) - return; - for (String category : categoriesList) { - ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); - Signs newTemp = new Signs(); - - ClaimedResidence res = plugin.getResidenceManager().getByName(NameSection.contains("Residence") ? NameSection.getString("Residence") : NameSection.getString("Res")); - - if (res == null) - continue; - - newTemp.setResidence(res); - - if (NameSection.contains("World")) { - World w = Bukkit.getWorld(NameSection.getString("World")); - if (w == null) - continue; - double x = NameSection.getDouble("X"); - double y = NameSection.getDouble("Y"); - double z = NameSection.getDouble("Z"); - Location loc = new Location(w, x, y, z); - newTemp.setLocation(loc); - } else { - Location loc = Utils.convertStringToLocation(NameSection.getString("Loc")); - newTemp.setLocation(loc); - } - - Signs.addSign(newTemp); - } - return; + Signs.GetAllSigns().clear(); + File file = new File(plugin.getDataFolder(), "Signs.yml"); + YamlConfiguration f = YamlConfiguration.loadConfiguration(file); + + if (!f.isConfigurationSection("Signs")) + return; + + ConfigurationSection ConfCategory = f.getConfigurationSection("Signs"); + ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); + if (categoriesList.size() == 0) + return; + for (String category : categoriesList) { + ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); + Signs newTemp = new Signs(); + + ClaimedResidence res = plugin.getResidenceManager().getByName(NameSection.contains("Residence") ? NameSection.getString("Residence") : NameSection.getString("Res")); + + if (res == null) + continue; + + newTemp.setResidence(res); + + if (NameSection.contains("World")) { + World w = Bukkit.getWorld(NameSection.getString("World")); + if (w == null) + continue; + double x = NameSection.getDouble("X"); + double y = NameSection.getDouble("Y"); + double z = NameSection.getDouble("Z"); + Location loc = new Location(w, x, y, z); + newTemp.setLocation(loc); + } else { + Location loc = Utils.convertStringToLocation(NameSection.getString("Loc")); + newTemp.setLocation(loc); + } + + Signs.addSign(newTemp); + } + return; } // Signs save file public void saveSigns() { - File f = new File(plugin.getDataFolder(), "Signs.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + File f = new File(plugin.getDataFolder(), "Signs.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); - writer.addComment("Signs", "DO NOT EDIT THIS FILE BY HAND!"); + writer.addComment("Signs", "DO NOT EDIT THIS FILE BY HAND!"); - if (!conf.isConfigurationSection("Signs")) - conf.createSection("Signs"); + if (!conf.isConfigurationSection("Signs")) + conf.createSection("Signs"); - int i = 0; - for (Entry one : new ConcurrentHashMap(Signs.GetAllSigns()).entrySet()) { - Signs s = one.getValue(); - ++i; - String path = "Signs." + i; - writer.set(path + ".Res", s.getResidence().getName()); - writer.set(path + ".Loc", Utils.convertLocToStringTiny(s.getLocation())); - } + int i = 0; + for (Entry one : new ConcurrentHashMap(Signs.GetAllSigns()).entrySet()) { + Signs s = one.getValue(); + ++i; + String path = "Signs." + i; + writer.set(path + ".Res", s.getResidence().getName()); + writer.set(path + ".Loc", Utils.convertLocToStringTiny(s.getLocation())); + } - try { - writer.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - return; + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + return; } public Signs getSignFromLoc(Location loc) { - return this.getSigns().getResSign(loc); + return this.getSigns().getResSign(loc); } public void CheckSign(final ClaimedResidence res, int time) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { - @Override - public void run() { - CheckSign(res); - } - }, time * 1L); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + CheckSign(res); + } + }, time * 1L); } public void CheckSign(ClaimedResidence res) { - for (Signs one : res.getSignsInResidence()) { - if (res != one.getResidence()) - continue; - this.SignUpdate(one); - } - saveSigns(); + for (Signs one : res.getSignsInResidence()) { + if (res != one.getResidence()) + continue; + this.SignUpdate(one); + } + saveSigns(); } @Deprecated public void removeSign(String res) { - if (res != null) - removeSign(plugin.getResidenceManager().getByName(res)); + if (res != null) + removeSign(plugin.getResidenceManager().getByName(res)); } public void removeSign(ClaimedResidence res) { - for (Signs one : res.getSignsInResidence()) { - if (res != one.getResidence()) - continue; - this.SignUpdate(one); - } + for (Signs one : res.getSignsInResidence()) { + if (res != one.getResidence()) + continue; + this.SignUpdate(one); + } } - public void updateSignResName(ClaimedResidence res) { - for (Signs one : res.getSignsInResidence()) { - if (res != one.getResidence()) - continue; - this.SignUpdate(one); - saveSigns(); - break; - } + public void updateSignResName(ClaimedResidence res) { + for (Signs one : res.getSignsInResidence()) { + if (res != one.getResidence()) + continue; + this.SignUpdate(one); + saveSigns(); + break; + } } public boolean SignUpdate(Signs Sign) { - ClaimedResidence res = Sign.getResidence(); - - if (res == null) - return false; - - boolean ForSale = res.isForSell(); - boolean ForRent = res.isForRent(); - - Location nloc = Sign.getLocation(); - - if (nloc == null) { - Signs.removeSign(Sign); - res.getSignsInResidence().remove(Sign); - return false; - } - - Block block = nloc.getBlock(); - - if (!CMIMaterial.isSign(block.getType())) { - Signs.removeSign(Sign); - res.getSignsInResidence().remove(Sign); - return false; - } - - Sign sign = (Sign) block.getState(); - - String landName = res.getName(); - if (landName == null) - return false; - if (!ForRent && !ForSale) { - String shortName = fixResName(landName); - String secondLine = null; - if (shortName.contains("~")) { - String[] lines = fixDoubleResName(landName); - shortName = lines[0]; - secondLine = lines[1]; - } - sign.setLine(0, plugin.msg(lm.Sign_ResName, shortName)); - if (secondLine != null) - sign.setLine(1, plugin.msg(lm.Sign_ResName, secondLine)); - sign.setLine(2, ""); - sign.setLine(3, ""); - sign.setLine(secondLine == null ? 1 : 2, plugin.msg(lm.Sign_Owner, res.getOwner())); - sign.update(); + ClaimedResidence res = Sign.getResidence(); + + if (res == null) + return false; + + boolean ForSale = res.isForSell(); + boolean ForRent = res.isForRent(); + + Location nloc = Sign.getLocation(); + + if (nloc == null) { + Signs.removeSign(Sign); + res.getSignsInResidence().remove(Sign); + return false; + } + + Block block = nloc.getBlock(); + + if (!CMIMaterial.isSign(block.getType())) { + Signs.removeSign(Sign); + res.getSignsInResidence().remove(Sign); + return false; + } + + Sign sign = (Sign) block.getState(); + + String landName = res.getName(); + if (landName == null) + return false; + if (!ForRent && !ForSale) { + String shortName = fixResName(landName); + String secondLine = null; + if (shortName.contains("~")) { + String[] lines = fixDoubleResName(landName); + shortName = lines[0]; + secondLine = lines[1]; + } + sign.setLine(0, plugin.msg(lm.Sign_ResName, shortName)); + if (secondLine != null) + sign.setLine(1, plugin.msg(lm.Sign_ResName, secondLine)); + sign.setLine(2, ""); + sign.setLine(3, ""); + sign.setLine(secondLine == null ? 1 : 2, plugin.msg(lm.Sign_Owner, res.getOwner())); + sign.update(); // block.breakNaturally(); // Signs.removeSign(Sign); - return true; - } - - if (ForRent) { - - boolean rented = res.isRented(); - - RentedLand rentedPlace = res.getRentedLand(); - long time = 0L; - if (rentedPlace != null) - time = rentedPlace.endTime; - - SimpleDateFormat formatter = new SimpleDateFormat(plugin.msg(lm.Sign_DateFormat)); - formatter.setTimeZone(TimeZone.getTimeZone(plugin.getConfigManager().getTimeZone())); - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(time); - String timeString = formatter.format(calendar.getTime()); - - String endDate = timeString; - if (time == 0L) - endDate = "Unknown"; - - if (plugin.getRentManager().getRentedAutoRepeats(res)) - endDate = plugin.msg(lm.Sign_RentedAutorenewTrue, endDate); - else - endDate = plugin.msg(lm.Sign_RentedAutorenewFalse, endDate); - - String TopLine = rented ? plugin.msg(lm.Sign_RentedTopLine, endDate) : plugin.msg(lm.Sign_ForRentTopLine); - sign.setLine(0, TopLine); - - String infoLine = plugin.msg(rented ? lm.Sign_RentedPriceLine : lm.Sign_ForRentPriceLine, plugin.getRentManager().getCostOfRent(res), plugin - .getRentManager().getRentDays(res), plugin.getRentManager().getRentableRepeatable(res)); - - sign.setLine(1, infoLine); - String shortName = fixResName(landName); - sign.setLine(2, rented ? plugin.msg(lm.Sign_RentedResName, shortName) - : plugin.msg(lm.Sign_RentedResName, shortName)); - sign.setLine(3, rented ? plugin.msg(lm.Sign_RentedBottomLine, plugin.getRentManager().getRentingPlayer(landName)) - : plugin.msg(lm.Sign_ForRentBottomLine)); - sign.update(); - } - - if (ForSale) { - String shortName = fixResName(landName); - String secondLine = null; - if (shortName.contains("~")) { - String[] lines = fixDoubleResName(landName); - shortName = lines[0]; - secondLine = lines[1]; - } - - sign.setLine(0, plugin.msg(lm.Sign_ForSaleTopLine)); - String infoLine = plugin.msg(lm.Sign_ForSalePriceLine, res.getSellPrice()); - sign.setLine(1, infoLine); - sign.setLine(2, plugin.msg(lm.Sign_RentedResName, shortName)); - - if (secondLine != null) - sign.setLine(3, plugin.msg(lm.Sign_RentedResName, secondLine)); - else - sign.setLine(3, plugin.msg(lm.Sign_ForSaleBottom, res.getTotalSize())); - sign.update(); - } - - return true; + return true; + } + + if (ForRent) { + + boolean rented = res.isRented(); + + RentedLand rentedPlace = res.getRentedLand(); + long time = 0L; + if (rentedPlace != null) + time = rentedPlace.endTime; + + SimpleDateFormat formatter = new SimpleDateFormat(plugin.msg(lm.Sign_DateFormat)); + formatter.setTimeZone(TimeZone.getTimeZone(plugin.getConfigManager().getTimeZone())); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time); + String timeString = formatter.format(calendar.getTime()); + + String endDate = timeString; + if (time == 0L) + endDate = "Unknown"; + + if (plugin.getRentManager().getRentedAutoRepeats(res)) + endDate = plugin.msg(lm.Sign_RentedAutorenewTrue, endDate); + else + endDate = plugin.msg(lm.Sign_RentedAutorenewFalse, endDate); + + String TopLine = rented ? plugin.msg(lm.Sign_RentedTopLine, endDate) : plugin.msg(lm.Sign_ForRentTopLine); + sign.setLine(0, TopLine); + + String infoLine = plugin.msg(rented ? lm.Sign_RentedPriceLine : lm.Sign_ForRentPriceLine, plugin.getRentManager().getCostOfRent(res), plugin + .getRentManager().getRentDays(res), plugin.getRentManager().getRentableRepeatable(res)); + + sign.setLine(1, infoLine); + String shortName = fixResName(landName); + sign.setLine(2, rented ? plugin.msg(lm.Sign_RentedResName, shortName) + : plugin.msg(lm.Sign_RentedResName, shortName)); + sign.setLine(3, rented ? plugin.msg(lm.Sign_RentedBottomLine, plugin.getRentManager().getRentingPlayer(landName)) + : plugin.msg(lm.Sign_ForRentBottomLine)); + sign.update(); + } + + if (ForSale) { + String shortName = fixResName(landName); + String secondLine = null; + if (shortName.contains("~")) { + String[] lines = fixDoubleResName(landName); + shortName = lines[0]; + secondLine = lines[1]; + } + + sign.setLine(0, plugin.msg(lm.Sign_ForSaleTopLine)); + String infoLine = plugin.msg(lm.Sign_ForSalePriceLine, res.getSellPrice()); + sign.setLine(1, infoLine); + sign.setLine(2, plugin.msg(lm.Sign_RentedResName, shortName)); + + if (secondLine != null) + sign.setLine(3, plugin.msg(lm.Sign_RentedResName, secondLine)); + else + sign.setLine(3, plugin.msg(lm.Sign_ForSaleBottom, res.getTotalSize())); + sign.update(); + } + + return true; } public void convertSigns(CommandSender sender) { - File file = new File("plugins/ResidenceSigns/signs.yml"); - if (!file.exists()) { - sender.sendMessage(ChatColor.GOLD + "Can't find ResidenceSign file"); - return; - } - YamlConfiguration conf = YamlConfiguration.loadConfiguration(file); + File file = new File("plugins/ResidenceSigns/signs.yml"); + if (!file.exists()) { + sender.sendMessage(ChatColor.GOLD + "Can't find ResidenceSign file"); + return; + } + YamlConfiguration conf = YamlConfiguration.loadConfiguration(file); - if (!conf.contains("signs")) { - sender.sendMessage(ChatColor.GOLD + "Incorrect format of signs file"); - return; - } + if (!conf.contains("signs")) { + sender.sendMessage(ChatColor.GOLD + "Incorrect format of signs file"); + return; + } - Set sectionname = conf.getConfigurationSection("signs").getKeys(false); - ConfigurationSection section = conf.getConfigurationSection("signs"); + Set sectionname = conf.getConfigurationSection("signs").getKeys(false); + ConfigurationSection section = conf.getConfigurationSection("signs"); - long time = System.currentTimeMillis(); + long time = System.currentTimeMillis(); - int i = 0; - for (String one : sectionname) { - Signs signs = new Signs(); - String resname = section.getString(one + ".resName"); + int i = 0; + for (String one : sectionname) { + Signs signs = new Signs(); + String resname = section.getString(one + ".resName"); - ClaimedResidence res = plugin.getResidenceManager().getByName(resname); + ClaimedResidence res = plugin.getResidenceManager().getByName(resname); - if (res == null) - continue; + if (res == null) + continue; - signs.setResidence(res); + signs.setResidence(res); - List loc = section.getStringList(one + ".loc"); + List loc = section.getStringList(one + ".loc"); - if (loc.size() != 4) - continue; + if (loc.size() != 4) + continue; - World world = Bukkit.getWorld(loc.get(0)); - if (world == null) - continue; + World world = Bukkit.getWorld(loc.get(0)); + if (world == null) + continue; - int x = 0; - int y = 0; - int z = 0; + int x = 0; + int y = 0; + int z = 0; - try { - x = Integer.parseInt(loc.get(1)); - y = Integer.parseInt(loc.get(2)); - z = Integer.parseInt(loc.get(3)); - } catch (Exception ex) { - continue; - } + try { + x = Integer.parseInt(loc.get(1)); + y = Integer.parseInt(loc.get(2)); + z = Integer.parseInt(loc.get(3)); + } catch (Exception ex) { + continue; + } - signs.setLocation(new Location(world, x, y, z)); + signs.setLocation(new Location(world, x, y, z)); - Signs s = this.getSigns().getResSign(signs.getLocation()); - if (s == null) - continue; + Signs s = this.getSigns().getResSign(signs.getLocation()); + if (s == null) + continue; - Location nloc = signs.getLocation(); - Block block = nloc.getBlock(); + Location nloc = signs.getLocation(); + Block block = nloc.getBlock(); - if (!(block.getState() instanceof Sign)) - continue; + if (!(block.getState() instanceof Sign)) + continue; - this.getSigns().addSign(signs); - this.SignUpdate(signs); - i++; - } + this.getSigns().addSign(signs); + this.SignUpdate(signs); + i++; + } - this.saveSigns(); + this.saveSigns(); - sender.sendMessage(ChatColor.GOLD + "" + i + ChatColor.YELLOW + " signs have being converted to new format! It took " + ChatColor.GOLD + (System - .currentTimeMillis() - time) + ChatColor.YELLOW + " ms!"); + sender.sendMessage(ChatColor.GOLD + "" + i + ChatColor.YELLOW + " signs have being converted to new format! It took " + ChatColor.GOLD + (System + .currentTimeMillis() - time) + ChatColor.YELLOW + " ms!"); } public String fixResName(String name) { - if (name.length() > 15 && !name.contains(".")) - name = "~" + name.substring(name.length() - 14); - else if (name.length() > 15 && name.contains(".")) { - String[] splited = name.split("\\."); - name = ""; - for (int i = 0; i < splited.length; i++) { - String tempName = name + "." + splited[i]; - if (tempName.length() < 15) - name = tempName; - else - name = "~" + tempName.substring(tempName.length() - 14); - } - } - return name; + if (name.length() > 15 && !name.contains(".")) + name = "~" + name.substring(name.length() - 14); + else if (name.length() > 15 && name.contains(".")) { + String[] splited = name.split("\\."); + name = ""; + for (int i = 0; i < splited.length; i++) { + String tempName = name + "." + splited[i]; + if (tempName.length() < 15) + name = tempName; + else + name = "~" + tempName.substring(tempName.length() - 14); + } + } + return name; } public String[] fixDoubleResName(String name) { - String SecondLine = name.substring(name.length() - 15); - String FirstLine = name.replace(SecondLine, ""); - if (FirstLine.length() > 15 && !FirstLine.contains(".")) - FirstLine = "~" + FirstLine.substring(name.length() - 14); - else if (FirstLine.length() > 15 && FirstLine.contains(".")) { - String[] splited = FirstLine.split("\\."); - FirstLine = ""; - for (int i = 0; i < splited.length; i++) { - String tempName = FirstLine + "." + splited[i]; - if (tempName.length() < 15) - FirstLine = tempName; - else - FirstLine = "~" + tempName.substring(tempName.length() - 14); - } - } - String[] lines = new String[2]; - lines[0] = FirstLine; - lines[1] = SecondLine; - return lines; + String SecondLine = name.substring(name.length() - 15); + String FirstLine = name.replace(SecondLine, ""); + if (FirstLine.length() > 15 && !FirstLine.contains(".")) + FirstLine = "~" + FirstLine.substring(name.length() - 14); + else if (FirstLine.length() > 15 && FirstLine.contains(".")) { + String[] splited = FirstLine.split("\\."); + FirstLine = ""; + for (int i = 0; i < splited.length; i++) { + String tempName = FirstLine + "." + splited[i]; + if (tempName.length() < 15) + FirstLine = tempName; + else + FirstLine = "~" + tempName.substring(tempName.length() - 14); + } + } + String[] lines = new String[2]; + lines[0] = FirstLine; + lines[1] = SecondLine; + return lines; } } \ No newline at end of file From 09f4b59fe55ab3e8e3f299fce5a89faa09685381 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 13 Mar 2023 15:04:15 +0200 Subject: [PATCH 1011/1142] Multithread save file load by Dan28 --- .../bukkit/residence/ConfigManager.java | 2 +- .../protection/ClaimedResidence.java | 18 ++- .../residence/protection/CuboidArea.java | 51 ++------ .../protection/ResidenceManager.java | 122 +++++++++++++++++- src/plugin.yml | 2 +- 5 files changed, 142 insertions(+), 53 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index ec852c371..0a8726b5a 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -980,7 +980,7 @@ public void UpdateConfigFile() { ls.add("all-" + c.getC().getInt("Global.AntiGreef.RangeGap")); c.get("Global.AntiGreef.RangeGaps", Arrays.asList("all-" + c.getC().getInt("Global.AntiGreef.RangeGap"))); } else - ls = c.get("Global.AntiGreef.RangeGaps", Arrays.asList("all-16")); + ls = c.get("Global.AntiGreef.RangeGaps", Arrays.asList("all-8")); for (String one : ls) { String[] split = one.split("-"); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 1da54858c..74c731c2b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -967,13 +967,17 @@ public long getXZSize() { } public CuboidArea[] getAreaArray() { - CuboidArea[] temp = new CuboidArea[areas.size()]; - int i = 0; - for (CuboidArea area : areas.values()) { - temp[i] = area; - i++; - } - return temp; + + return areas.values().toArray(new CuboidArea[0]); + + +// CuboidArea[] temp = new CuboidArea[areas.size()]; +// int i = 0; +// for (CuboidArea area : areas.values()) { +// temp[i] = area; +// i++; +// } +// return temp; } public Map getAreaMap() { diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index 2315347db..8daa0961d 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -1,14 +1,5 @@ package com.bekvon.bukkit.residence.protection; -import com.bekvon.bukkit.residence.Residence; -import com.bekvon.bukkit.residence.permissions.PermissionGroup; -import com.bekvon.bukkit.residence.protection.ResidenceManager.ChunkRef; - -import net.Zrips.CMILib.Logs.CMIDebug; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -16,10 +7,13 @@ import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.Server; import org.bukkit.World; import org.bukkit.util.Vector; +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import com.bekvon.bukkit.residence.protection.ResidenceManager.ChunkRef; + public class CuboidArea { private Vector highPoints; private Vector lowPoints; @@ -31,7 +25,12 @@ public CuboidArea(Location startLoc, Location endLoc) { if (startLoc == null || endLoc == null) return; - int highx, highy, highz, lowx, lowy, lowz; + int highx; + int highy; + int highz; + int lowx; + int lowy; + int lowz; if (startLoc.getBlockX() > endLoc.getBlockX()) { highx = startLoc.getBlockX(); @@ -186,6 +185,8 @@ public Location getLowLocation() { } public World getWorld() { + if (world == null && worldName != null) + world = Bukkit.getWorld(worldName); return world; } @@ -193,32 +194,6 @@ public String getWorldName() { return world != null ? world.getName() : worldName; } - public void save(DataOutputStream out) throws IOException { - out.writeUTF(getWorldName()); - out.writeInt(highPoints.getBlockX()); - out.writeInt(highPoints.getBlockY()); - out.writeInt(highPoints.getBlockZ()); - out.writeInt(lowPoints.getBlockX()); - out.writeInt(lowPoints.getBlockY()); - out.writeInt(lowPoints.getBlockZ()); - } - - public CuboidArea load(DataInputStream in) throws IOException { - CuboidArea newArea = new CuboidArea(); - Server server = Residence.getInstance().getServ(); - int highx = in.readInt(); - int highy = in.readInt(); - int highz = in.readInt(); - int lowx = in.readInt(); - int lowy = in.readInt(); - int lowz = in.readInt(); - newArea.highPoints = new Vector(highx, highy, highz); - newArea.lowPoints = new Vector(lowx, lowy, lowz); - newArea.worldName = in.readUTF(); - newArea.world = Bukkit.getWorld(newArea.worldName); - return newArea; - } - public Map save() { Map root = new LinkedHashMap<>(); root.put("X1", this.highPoints.getBlockX()); @@ -250,7 +225,7 @@ public static CuboidArea newLoad(String root, String world) throws Exception { newArea.lowPoints = new Vector(x1, y1, z1); newArea.highPoints = new Vector(x2, y2, z2); newArea.worldName = world; - newArea.world = Bukkit.getWorld(newArea.worldName); +// newArea.world = Bukkit.getWorld(newArea.worldName); } catch (Exception e) { throw new Exception("Invalid residence physical location..."); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 4847183f8..b8aa73a11 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -14,6 +14,11 @@ import java.util.SortedMap; import java.util.TreeMap; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.logging.Level; import java.util.logging.Logger; @@ -50,19 +55,20 @@ import net.Zrips.CMILib.CMILib; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.CMINumber; import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Version.Version; public class ResidenceManager implements ResidenceInterface { - protected SortedMap residences; + protected ConcurrentHashMap residences; protected Map>> chunkResidences; protected List shops = new ArrayList(); private Residence plugin; public ResidenceManager(Residence plugin) { - residences = new TreeMap(); + residences = new ConcurrentHashMap(); chunkResidences = new HashMap>>(); shops = new ArrayList(); this.plugin = plugin; @@ -1087,7 +1093,7 @@ public void load(Map root) throws Exception { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loading " + worldName + " data into memory..."); if (reslist != null) { try { - chunkResidences.put(worldName, loadMap(worldName, reslist)); + chunkResidences.put(worldName, multithreadLoadMap(worldName, reslist)); } catch (Exception ex) { Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + "Error in loading save file for world: " + worldName); if (plugin.getConfigManager().stopOnSaveError()) @@ -1106,6 +1112,112 @@ public void load(Map root) throws Exception { clearLoadChache(); } + int chunkCount = 0; + + public Map> multithreadLoadMap(String worldName, Map root) throws InterruptedException, ExecutionException { + Map> retRes = new ConcurrentHashMap<>(); + + if (root == null) { + return retRes; + } + + chunkCount = 0; + + int numCores = Runtime.getRuntime().availableProcessors(); + ExecutorService executorService = Executors.newFixedThreadPool(numCores); + + List> futures = new ArrayList<>(); + int batchSize = (int) Math.ceil(root.entrySet().size() / (double) numCores); + + batchSize = CMINumber.clamp(batchSize, 500, root.entrySet().size()); + + int i = 0; + + List> batch = new ArrayList<>(); + + int total = root.entrySet().size() - 1; + + for (Entry entry : root.entrySet()) { + batch.add(entry); + + if (batch.size() < batchSize && i < total) { + i++; + continue; + } + + List> currentBatch = batch; + batch = new ArrayList<>(); + i++; + + Future future = executorService.submit(() -> { + for (Entry currentEntry : currentBatch) { + try { + ClaimedResidence residence = ClaimedResidence.load(worldName, (Map) currentEntry.getValue(), null, plugin); + + if (residence == null) { + continue; + } + + if (residence.getPermissions().getOwnerUUID().toString().equals(plugin.getServerLandUUID()) && + !residence.getOwner().equalsIgnoreCase("Server land") && + !residence.getOwner().equalsIgnoreCase(plugin.getServerLandName())) { + continue; + } + + if (residence.getOwner().equalsIgnoreCase("Server land")) { + residence.getPermissions().setOwner(plugin.getServerLandName(), false); + } + + String resName = currentEntry.getKey().toLowerCase(); + + int increment = getNameIncrement(resName); + + if (residence.getResidenceName() == null) + residence.setName(currentEntry.getKey()); + + if (increment > 0) { + residence.setName(residence.getResidenceName() + increment); + resName += increment; + } + + for (ChunkRef chunk : getChunks(residence)) { + retRes.compute(chunk, (k, v) -> { + if (v == null) { + v = new ArrayList<>(); + } + v.add(residence); + return v; + }); + } + + plugin.getPlayerManager().addResidence(residence.getOwner(), residence); + + residences.put(resName, residence); + } catch (Exception ex) { + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + ChatColor.RED + " Failed to load residence (" + currentEntry.getKey() + ")! Reason:" + ex.getMessage() + + " Error Log:"); + Logger.getLogger(ResidenceManager.class.getName()).log(Level.SEVERE, null, ex); + if (plugin.getConfigManager().stopOnSaveError()) { + throw new RuntimeException(ex); + } + } + } + return null; + }); + + futures.add(future); + } + + for (Future future : futures) { + future.get(); + } + + executorService.shutdown(); + + return retRes; + } + + // Old method for single core loading public Map> loadMap(String worldName, Map root) throws Exception { Map> retRes = new HashMap<>(); if (root == null) @@ -1188,9 +1300,7 @@ private int getNameIncrement(String name) { private static List getChunks(ClaimedResidence res) { List chunks = new ArrayList<>(); - for (CuboidArea area : res.getAreaArray()) { - chunks.addAll(area.getChunks()); - } + res.getAreaMap().values().forEach(area -> chunks.addAll(area.getChunks())); return chunks; } diff --git a/src/plugin.yml b/src/plugin.yml index 6700ce5b8..e016265f7 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.1.0 +version: 5.1.1.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From f87709a0cf09556d72ea3364b734b831f76cd7f0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 17 Mar 2023 14:00:00 +0200 Subject: [PATCH 1012/1142] Improving residence detection by location speed --- .../listeners/ResidenceBlockListener.java | 6 +- .../protection/ClaimedResidence.java | 3 +- .../protection/ResidenceManager.java | 34 +++++------ .../slimeFun/SlimeFunResidenceModule.java | 59 ++++++++++--------- 4 files changed, 49 insertions(+), 53 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index ac10772c9..3a586179f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -224,8 +224,10 @@ public static boolean canBreakBlock(Player player, Block block, boolean inform) return true; } + CMIDebug.it(); ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(block.getLocation()); - + CMIDebug.d(String.format("%,.4f", CMIDebug.getIT()), "ms"); + if (res != null && res.getItemIgnoreList().isListed(mat)) return true; @@ -665,7 +667,7 @@ public static boolean canPlaceBlock(Player player, Block block, boolean informPl } FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(block.getLocation(), player); boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - + if (res != null && res.getRaid().isUnderRaid()) { if (res.getRaid().isAttacker(player.getUniqueId()) && ConfigManager.RaidAttackerBlockPlace || res.getRaid().isDefender(player.getUniqueId()) && ConfigManager.RaidDefenderBlockPlace) { hasplace = true; diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 74c731c2b..73c1cd8fc 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -894,8 +894,7 @@ public boolean checkCollision(CuboidArea area) { } public boolean containsLoc(Location loc) { - Collection keys = areas.values(); - for (CuboidArea key : keys) { + for (CuboidArea key : areas.values()) { if (key.containsLoc(loc)) { if (getParent() != null) return getParent().containsLoc(loc); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index b8aa73a11..ca5e7c076 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -96,32 +96,26 @@ public ClaimedResidence getByLoc(Location loc) { String worldName = world.getName(); if (worldName == null) return null; - if (!chunkResidences.containsKey(worldName)) - return null; - ClaimedResidence res = null; - ChunkRef chunk = new ChunkRef(loc); Map> ChunkMap = chunkResidences.get(worldName); - List chunks = ChunkMap.get(chunk); + if (ChunkMap == null) + return null; - if (chunks != null) { - for (ClaimedResidence entry : chunks) { - if (entry == null) - continue; - if (entry.containsLoc(loc)) { - res = entry; - break; - } - } - } - if (res == null) + List residences = ChunkMap.get(new ChunkRef(loc)); + + if (residences == null) return null; - ClaimedResidence subres = res.getSubzoneByLoc(loc); - if (subres == null) - return res; - return subres; + for (ClaimedResidence residence : residences) { + if (residence == null) + continue; + if (residence.containsLoc(loc)) { + ClaimedResidence subres = residence.getSubzoneByLoc(loc); + return subres == null ? residence : subres; + } + } + return null; } public List getByChunk(Chunk chunk) { diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index 2646ddd8d..11de90a2e 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -15,18 +15,19 @@ import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.Interaction; import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.ProtectionModule; +import net.Zrips.CMILib.Logs.CMIDebug; public class SlimeFunResidenceModule implements ProtectionModule { private final Residence residence; public SlimeFunResidenceModule(Plugin plugin) { - this.residence = (Residence) plugin; + this.residence = (Residence) plugin; } @Override public Plugin getPlugin() { - return this.residence; + return this.residence; } @Override @@ -36,33 +37,33 @@ public void load() { @Override public boolean hasPermission(OfflinePlayer op, Location loc, Interaction action) { - if (op == null) - return false; - - switch (action) { - case INTERACT_BLOCK: - ClaimedResidence res = residence.getResidenceManager().getByLoc(loc); - if (res != null) { - boolean allow = res.getPermissions().playerHas(ResidencePlayer.get(op.getUniqueId()), Flags.container, false); - - if (!allow) - residence.msg(op.getPlayer(), lm.Flag_Deny, Flags.container); - - return allow; - } - break; - case BREAK_BLOCK: - Player player = Bukkit.getPlayer(op.getUniqueId()); - - if (player == null) - return false; - - return ResidenceBlockListener.canBreakBlock(player, loc.getBlock(), true); - default: - break; - } - - return true; + if (op == null) + return false; + + switch (action) { + case INTERACT_BLOCK: + CMIDebug.d(action); + ClaimedResidence res = residence.getResidenceManager().getByLoc(loc); + if (res != null) { + CMIDebug.d("?", action); + boolean allow = res.getPermissions().playerHas(ResidencePlayer.get(op.getUniqueId()), Flags.container, false); + if (!allow) + residence.msg(op.getPlayer(), lm.Flag_Deny, Flags.container); + return allow; + } + break; + case BREAK_BLOCK: + Player player = Bukkit.getPlayer(op.getUniqueId()); + if (player == null) + return false; + boolean state = ResidenceBlockListener.canBreakBlock(player, loc.getBlock(), true); + + return state; + default: + break; + } + + return true; } } From a29ab1533911b9aa9d6ffdd4794813e69dc42bf4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2023 13:20:01 +0300 Subject: [PATCH 1013/1142] Fix for shop board creation --- .../bukkit/residence/commands/select.java | 2 + .../bukkit/residence/commands/shop.java | 808 +++++++++--------- .../listeners/ResidenceBlockListener.java | 4 +- .../listeners/ResidencePlayerListener.java | 3 +- .../protection/ClaimedResidence.java | 27 +- .../protection/ResidenceManager.java | 4 + .../residence/selection/SelectionManager.java | 1 + .../slimeFun/SlimeFunResidenceModule.java | 5 +- 8 files changed, 425 insertions(+), 429 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 16e3472e9..1b88f1f4d 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -10,6 +10,8 @@ import org.bukkit.entity.Player; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; + import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 85c898a91..6d624290d 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -27,6 +27,7 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; public class shop implements cmd { @@ -34,415 +35,416 @@ public class shop implements cmd { @Override @CommandAnnotation(simple = true, priority = 1700) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - int page = 1; - try { - if (args.length > 0) { - page = Integer.parseInt(args[args.length - 1]); - } - } catch (Exception ex) { - } - - if ((args.length == 1 || args.length == 2 || args.length == 3) && (args[0].equalsIgnoreCase("votes") || args[0].equalsIgnoreCase("likes"))) { - - int VotePage = 1; - - ClaimedResidence res = null; - if (args.length == 1) { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - plugin.msg(player, lm.Residence_NotIn); - return true; - } - } else if (args.length == 2) { - res = plugin.getResidenceManager().getByName(args[1]); - if (res == null) { - try { - VotePage = Integer.parseInt(args[1]); - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - plugin.msg(player, lm.Residence_NotIn); - return true; - } - } catch (Exception ex) { - plugin.msg(player, lm.General_UseNumbers); - return true; - } - } - - } else if (args.length == 3) { - res = plugin.getResidenceManager().getByName(args[1]); - if (res == null) { - plugin.msg(player, lm.Residence_NotIn); - return true; - } - try { - VotePage = Integer.parseInt(args[2]); - } catch (Exception ex) { - plugin.msg(player, lm.General_UseNumbers); - return true; - } - } - - if (res == null) { - plugin.msg(player, lm.Residence_NotIn); - return true; - } - - List VoteList = res.GetShopVotes(); - - String separator = plugin.msg(lm.InformationPage_SmallSeparator); - - PageInfo pi = new PageInfo(10, VoteList.size(), page); - - if (!pi.isPageOk()) { - plugin.msg(sender, lm.Shop_NoVotes); - return true; - } - - plugin.msg(player, lm.Shop_VotesTopLine, separator, res.getName(), VotePage, pi.getTotalPages(), separator); - - int position = -1; - for (ShopVote one : VoteList) { - position++; - if (position > pi.getEnd()) - break; - if (!pi.isInRange(position)) - continue; - - Date dNow = new Date(one.getTime()); - SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss"); - ft.setTimeZone(TimeZone.getTimeZone(plugin.getConfigManager().getTimeZone())); - String timeString = ft.format(dNow); - - String message = plugin.msg(lm.Shop_VotesList, pi.getStart() + position + 1, one.getName(), (plugin.getConfigManager().isOnlyLike() - ? "" : one.getVote()), timeString); - player.sendMessage(message); - } - - pi.autoPagination(sender, "/res shop votes " + res.getName()); - - return true; - } - if ((args.length == 1 || args.length == 2) && args[0].equalsIgnoreCase("list")) { - - int Shoppage = 1; - - if (args.length == 2) { - try { - Shoppage = Integer.parseInt(args[1]); - } catch (Exception ex) { - plugin.msg(player, lm.General_UseNumbers); - return true; - } - } - - Map ShopList = plugin.getShopSignUtilManager().getSortedShopList(); - - String separator = plugin.msg(lm.InformationPage_SmallSeparator); - - PageInfo pi = new PageInfo(10, ShopList.size(), page); - - if (!pi.isPageOk()) { - plugin.msg(sender, lm.Shop_NoVotes); - return true; - } - - plugin.msg(player, lm.Shop_ListTopLine, separator, Shoppage, pi.getTotalPages(), separator); - - for (Entry one : ShopList.entrySet()) { - if (!pi.isEntryOk()) - continue; - if (pi.isBreak()) - break; - ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); - if (res == null) - continue; - - Vote vote = plugin.getShopSignUtilManager().getAverageVote(one.getKey()); - String votestat = ""; - - if (plugin.getConfigManager().isOnlyLike()) { - votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListLiked, plugin.getShopSignUtilManager().getLikes(one.getKey())); - } else - votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListVoted, vote.getVote(), vote.getAmount()); - - String owner = res.getOwner(); - String message = plugin.msg(lm.Shop_List, pi.getPositionForOutput(), one.getKey(), owner, votestat); - - String desc = res.getShopDesc() == null ? plugin.msg(lm.Shop_NoDesc) : plugin.msg( - lm.Shop_Desc, CMIChatColor.translate(res.getShopDesc().replace("/n", "\n"))); - - RawMessage rm = new RawMessage(); - rm.addText(" " + message).addHover(desc).addCommand("/res tp " + one.getKey()); - rm.show(sender); - } - - pi.autoPagination(sender, "/res shop list"); - - return true; - } - - if (args.length == 1 && args[0].equalsIgnoreCase("DeleteBoard")) { - - if (!resadmin) { - plugin.msg(player, lm.General_AdminOnly); - return true; - } - - ShopListener.Delete.add(player.getName()); - plugin.msg(player, lm.Shop_DeleteBoard); - return true; - } - if (args.length > 1 && args[0].equalsIgnoreCase("setdesc")) { - - ClaimedResidence res = null; - - String desc = ""; - if (args.length >= 1) { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - plugin.msg(player, lm.Residence_NotIn); - return true; - } - for (int i = 2; i < args.length; i++) { - desc += args[i]; - if (i < args.length - 1) - desc += " "; - } - } - - if (res == null) - return true; - - if (!res.isOwner(player) && !resadmin) { - plugin.msg(player, lm.Residence_NonAdmin); - return true; - } - - res.setShopDesc(desc); - plugin.msg(player, lm.Shop_DescChange, CMIChatColor.translate(desc)); - return true; - } - if (args.length == 2 && args[0].equalsIgnoreCase("createboard")) { - - if (!resadmin) { - plugin.msg(player, lm.General_AdminOnly); - return true; - } - - if (!plugin.getSelectionManager().hasPlacedBoth(player)) { - plugin.msg(player, lm.Select_Points); - return true; - } - - int place = 1; - try { - place = Integer.parseInt(args[1]); - } catch (Exception ex) { - plugin.msg(player, lm.General_UseNumbers); - return true; - } - - if (place < 1) - place = 1; - - CuboidArea cuboid = plugin.getSelectionManager().getSelectionCuboid(player); - - if (cuboid.getXSize() > 16 || cuboid.getYSize() > 16 || cuboid.getZSize() > 16) { - plugin.msg(player, lm.Shop_ToBigSelection); - return true; - } - - if (cuboid.getXSize() != 1 && cuboid.getZSize() != 1) { - plugin.msg(player, lm.Shop_ToDeapSelection); - return true; - } - - Location loc1 = plugin.getSelectionManager().getPlayerLoc1(player); - Location loc2 = plugin.getSelectionManager().getPlayerLoc2(player); - - if (loc1.getBlockY() < loc2.getBlockY()) { - plugin.msg(player, lm.Shop_InvalidSelection); - return true; - } - - Board newTemp = new Board(); - newTemp.setStartPlace(place); - newTemp.setTopLoc(loc1); - newTemp.setBottomLoc(loc2); - - if (plugin.getShopSignUtilManager().exist(newTemp)) { - sender.sendMessage(plugin.msg(lm.Shop_BoardExist)); - return true; - } - - plugin.getShopSignUtilManager().addBoard(newTemp); - plugin.msg(player, lm.Shop_NewBoard); - - plugin.getShopSignUtilManager().BoardUpdate(); - plugin.getShopSignUtilManager().saveSigns(); - - return true; - - } - if ((args.length == 1 || args.length == 2 || args.length == 3) && (args[0].equalsIgnoreCase("vote") || args[0].equalsIgnoreCase("like"))) { - String resName = ""; - int vote = 5; - ClaimedResidence res = null; - if (args.length == 2) { - - if (plugin.getConfigManager().isOnlyLike()) { - - res = plugin.getResidenceManager().getByName(args[1]); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - vote = plugin.getConfigManager().getVoteRangeTo(); - - } else { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - plugin.msg(player, lm.Residence_NotIn); - return true; - } - - try { - vote = Integer.parseInt(args[1]); - } catch (Exception ex) { - plugin.msg(player, lm.General_UseNumbers); - return true; - } - } - } else if (args.length == 1 && plugin.getConfigManager().isOnlyLike()) { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - plugin.msg(player, lm.Residence_NotIn); - return true; - } - vote = plugin.getConfigManager().getVoteRangeTo(); - } else if (args.length == 3 && !plugin.getConfigManager().isOnlyLike()) { - res = plugin.getResidenceManager().getByName(args[1]); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - try { - vote = Integer.parseInt(args[2]); - } catch (Exception ex) { - plugin.msg(player, lm.General_UseNumbers); - return true; - } - } else if (args.length == 2 && !plugin.getConfigManager().isOnlyLike()) { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - try { - vote = Integer.parseInt(args[2]); - } catch (Exception ex) { - plugin.msg(player, lm.General_UseNumbers); - return true; - } - } else { - return false; - } - - resName = res.getName(); - - if (!res.getPermissions().has("shop", false)) { - plugin.msg(player, lm.Shop_CantVote); - return true; - } - - if (vote < plugin.getConfigManager().getVoteRangeFrom() || vote > plugin.getConfigManager().getVoteRangeTo()) { - plugin.msg(player, lm.Shop_VotedRange, plugin.getConfigManager().getVoteRangeFrom(), plugin.getConfigManager().getVoteRangeTo()); - return true; - } + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + int page = 1; + try { + if (args.length > 0) { + page = Integer.parseInt(args[args.length - 1]); + } + } catch (Exception ex) { + } + + if ((args.length == 1 || args.length == 2 || args.length == 3) && (args[0].equalsIgnoreCase("votes") || args[0].equalsIgnoreCase("likes"))) { + + int VotePage = 1; + + ClaimedResidence res = null; + if (args.length == 1) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + plugin.msg(player, lm.Residence_NotIn); + return true; + } + } else if (args.length == 2) { + res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) { + try { + VotePage = Integer.parseInt(args[1]); + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + plugin.msg(player, lm.Residence_NotIn); + return true; + } + } catch (Exception ex) { + plugin.msg(player, lm.General_UseNumbers); + return true; + } + } + + } else if (args.length == 3) { + res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) { + plugin.msg(player, lm.Residence_NotIn); + return true; + } + try { + VotePage = Integer.parseInt(args[2]); + } catch (Exception ex) { + plugin.msg(player, lm.General_UseNumbers); + return true; + } + } + + if (res == null) { + plugin.msg(player, lm.Residence_NotIn); + return true; + } + + List VoteList = res.GetShopVotes(); + + String separator = plugin.msg(lm.InformationPage_SmallSeparator); + + PageInfo pi = new PageInfo(10, VoteList.size(), page); + + if (!pi.isPageOk()) { + plugin.msg(sender, lm.Shop_NoVotes); + return true; + } + + plugin.msg(player, lm.Shop_VotesTopLine, separator, res.getName(), VotePage, pi.getTotalPages(), separator); + + int position = -1; + for (ShopVote one : VoteList) { + position++; + if (position > pi.getEnd()) + break; + if (!pi.isInRange(position)) + continue; + + Date dNow = new Date(one.getTime()); + SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss"); + ft.setTimeZone(TimeZone.getTimeZone(plugin.getConfigManager().getTimeZone())); + String timeString = ft.format(dNow); + + String message = plugin.msg(lm.Shop_VotesList, pi.getStart() + position + 1, one.getName(), (plugin.getConfigManager().isOnlyLike() + ? "" : one.getVote()), timeString); + player.sendMessage(message); + } + + pi.autoPagination(sender, "/res shop votes " + res.getName()); + + return true; + } + if ((args.length == 1 || args.length == 2) && args[0].equalsIgnoreCase("list")) { + + int Shoppage = 1; + + if (args.length == 2) { + try { + Shoppage = Integer.parseInt(args[1]); + } catch (Exception ex) { + plugin.msg(player, lm.General_UseNumbers); + return true; + } + } + + Map ShopList = plugin.getShopSignUtilManager().getSortedShopList(); + + String separator = plugin.msg(lm.InformationPage_SmallSeparator); + + PageInfo pi = new PageInfo(10, ShopList.size(), page); + + if (!pi.isPageOk()) { + plugin.msg(sender, lm.Shop_NoVotes); + return true; + } + + plugin.msg(player, lm.Shop_ListTopLine, separator, Shoppage, pi.getTotalPages(), separator); + + for (Entry one : ShopList.entrySet()) { + if (!pi.isEntryOk()) + continue; + if (pi.isBreak()) + break; + ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); + if (res == null) + continue; + + Vote vote = plugin.getShopSignUtilManager().getAverageVote(one.getKey()); + String votestat = ""; + + if (plugin.getConfigManager().isOnlyLike()) { + votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListLiked, plugin.getShopSignUtilManager().getLikes(one.getKey())); + } else + votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListVoted, vote.getVote(), vote.getAmount()); + + String owner = res.getOwner(); + String message = plugin.msg(lm.Shop_List, pi.getPositionForOutput(), one.getKey(), owner, votestat); + + String desc = res.getShopDesc() == null ? plugin.msg(lm.Shop_NoDesc) : plugin.msg( + lm.Shop_Desc, CMIChatColor.translate(res.getShopDesc().replace("/n", "\n"))); + + RawMessage rm = new RawMessage(); + rm.addText(" " + message).addHover(desc).addCommand("/res tp " + one.getKey()); + rm.show(sender); + } + + pi.autoPagination(sender, "/res shop list"); + + return true; + } + + if (args.length == 1 && args[0].equalsIgnoreCase("DeleteBoard")) { + + if (!resadmin) { + plugin.msg(player, lm.General_AdminOnly); + return true; + } + + ShopListener.Delete.add(player.getName()); + plugin.msg(player, lm.Shop_DeleteBoard); + return true; + } + if (args.length > 1 && args[0].equalsIgnoreCase("setdesc")) { + + ClaimedResidence res = null; + + String desc = ""; + if (args.length >= 1) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + plugin.msg(player, lm.Residence_NotIn); + return true; + } + for (int i = 2; i < args.length; i++) { + desc += args[i]; + if (i < args.length - 1) + desc += " "; + } + } + + if (res == null) + return true; + + if (!res.isOwner(player) && !resadmin) { + plugin.msg(player, lm.Residence_NonAdmin); + return true; + } + + res.setShopDesc(desc); + plugin.msg(player, lm.Shop_DescChange, CMIChatColor.translate(desc)); + return true; + } + if (args.length == 2 && args[0].equalsIgnoreCase("createboard")) { + + if (!resadmin) { + plugin.msg(player, lm.General_AdminOnly); + return true; + } + + if (!plugin.getSelectionManager().hasPlacedBoth(player)) { + plugin.msg(player, lm.Select_Points); + return true; + } + + int place = 1; + try { + place = Integer.parseInt(args[1]); + } catch (Exception ex) { + plugin.msg(player, lm.General_UseNumbers); + return true; + } + + if (place < 1) + place = 1; + + CuboidArea cuboid = plugin.getSelectionManager().getSelectionCuboid(player); + + if (cuboid.getXSize() > 16 || cuboid.getYSize() > 16 || cuboid.getZSize() > 16) { + plugin.msg(player, lm.Shop_ToBigSelection); + return true; + } + + if (cuboid.getXSize() != 1 && cuboid.getZSize() != 1) { + plugin.msg(player, lm.Shop_ToDeapSelection); + return true; + } + + Location loc1 = plugin.getSelectionManager().getSelection(player).getBaseArea().getHighLocation(); + Location loc2 = plugin.getSelectionManager().getSelection(player).getBaseArea().getLowLocation(); + + if (loc1.getBlockY() < loc2.getBlockY()) { + plugin.msg(player, lm.Shop_InvalidSelection); + return true; + } + + Board newTemp = new Board(); + newTemp.setStartPlace(place); + newTemp.setTopLoc(loc1); + newTemp.setBottomLoc(loc2); + + if (plugin.getShopSignUtilManager().exist(newTemp)) { + sender.sendMessage(plugin.msg(lm.Shop_BoardExist)); + return true; + } + + plugin.getShopSignUtilManager().addBoard(newTemp); + plugin.msg(player, lm.Shop_NewBoard); + + plugin.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().saveSigns(); + + return true; + + } + if ((args.length == 1 || args.length == 2 || args.length == 3) && (args[0].equalsIgnoreCase("vote") || args[0].equalsIgnoreCase("like"))) { + String resName = ""; + int vote = 5; + ClaimedResidence res = null; + if (args.length == 2) { + + if (plugin.getConfigManager().isOnlyLike()) { + + res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + vote = plugin.getConfigManager().getVoteRangeTo(); + + } else { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + plugin.msg(player, lm.Residence_NotIn); + return true; + } + + try { + vote = Integer.parseInt(args[1]); + } catch (Exception ex) { + plugin.msg(player, lm.General_UseNumbers); + return true; + } + } + } else if (args.length == 1 && plugin.getConfigManager().isOnlyLike()) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + plugin.msg(player, lm.Residence_NotIn); + return true; + } + vote = plugin.getConfigManager().getVoteRangeTo(); + } else if (args.length == 3 && !plugin.getConfigManager().isOnlyLike()) { + res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + try { + vote = Integer.parseInt(args[2]); + } catch (Exception ex) { + plugin.msg(player, lm.General_UseNumbers); + return true; + } + } else if (args.length == 2 && !plugin.getConfigManager().isOnlyLike()) { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + try { + vote = Integer.parseInt(args[2]); + } catch (Exception ex) { + plugin.msg(player, lm.General_UseNumbers); + return true; + } + } else { + return false; + } + + resName = res.getName(); + + if (!res.getPermissions().has("shop", false)) { + plugin.msg(player, lm.Shop_CantVote); + return true; + } + + if (vote < plugin.getConfigManager().getVoteRangeFrom() || vote > plugin.getConfigManager().getVoteRangeTo()) { + plugin.msg(player, lm.Shop_VotedRange, plugin.getConfigManager().getVoteRangeFrom(), plugin.getConfigManager().getVoteRangeTo()); + return true; + } // ConcurrentHashMap> VoteList = plugin.getShopSignUtilManager().GetAllVoteList(); - if (!res.GetShopVotes().isEmpty()) { - List list = res.GetShopVotes(); - boolean found = false; - for (ShopVote OneVote : list) { - if (OneVote.getName().equalsIgnoreCase(player.getName()) || OneVote.getUuid() != null && OneVote.getUuid() == player.getUniqueId()) { - if (plugin.getConfigManager().isOnlyLike()) { - plugin.msg(player, lm.Shop_AlreadyLiked, resName); - return true; - } - plugin.msg(player, lm.Shop_VoteChanged, OneVote.getVote(), vote, resName); - OneVote.setVote(vote); - OneVote.setName(player.getName()); - OneVote.setTime(System.currentTimeMillis()); - found = true; - break; - } - } - if (!found) { - ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); - list.add(newVote); - if (plugin.getConfigManager().isOnlyLike()) - plugin.msg(player, lm.Shop_Liked, resName); - else - plugin.msg(player, lm.Shop_Voted, vote, resName); - } - } else { - ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); - res.addShopVote(newVote); - if (plugin.getConfigManager().isOnlyLike()) - plugin.msg(player, lm.Shop_Liked, resName); - else - plugin.msg(player, lm.Shop_Voted, vote, resName); - } - plugin.getShopSignUtilManager().saveShopVotes(); - plugin.getShopSignUtilManager().BoardUpdate(); - return true; - } - return false; + if (!res.GetShopVotes().isEmpty()) { + List list = res.GetShopVotes(); + boolean found = false; + for (ShopVote OneVote : list) { + if (OneVote.getName().equalsIgnoreCase(player.getName()) || OneVote.getUuid() != null && OneVote.getUuid() == player.getUniqueId()) { + if (plugin.getConfigManager().isOnlyLike()) { + plugin.msg(player, lm.Shop_AlreadyLiked, resName); + return true; + } + plugin.msg(player, lm.Shop_VoteChanged, OneVote.getVote(), vote, resName); + OneVote.setVote(vote); + OneVote.setName(player.getName()); + OneVote.setTime(System.currentTimeMillis()); + found = true; + break; + } + } + if (!found) { + ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); + list.add(newVote); + if (plugin.getConfigManager().isOnlyLike()) + plugin.msg(player, lm.Shop_Liked, resName); + else + plugin.msg(player, lm.Shop_Voted, vote, resName); + } + } else { + ShopVote newVote = new ShopVote(player.getName(), player.getUniqueId(), vote, System.currentTimeMillis()); + res.addShopVote(newVote); + if (plugin.getConfigManager().isOnlyLike()) + plugin.msg(player, lm.Shop_Liked, resName); + else + plugin.msg(player, lm.Shop_Voted, vote, resName); + } + plugin.getShopSignUtilManager().saveShopVotes(); + plugin.getShopSignUtilManager().BoardUpdate(); + return true; + } + return false; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Manage residence shop"); - c.get("Info", Arrays.asList("Manages residence shop feature")); - - // Sub commands - c.setFullPath(c.getPath() + "SubCommands."); - c.get("list.Description", "Shows list of res shops"); - c.get("list.Info", Arrays.asList("&eUsage: &6/res shop list", "Shows full list of all residences with shop flag")); - - c.get("vote.Description", "Vote for residence shop"); - c.get("vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", "Votes for current or defined residence")); - LocaleManager.addTabCompleteSub(this, "vote", "[residence]", "10"); - - c.get("like.Description", "Give like for residence shop"); - c.get("like.Info", Arrays.asList("&eUsage: &6/res shop like ", "Gives like for residence shop")); - LocaleManager.addTabCompleteSub(this, "like", "[residenceshop]"); - - c.get("votes.Description", "Shows res shop votes"); - c.get("votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", "Shows full vote list of current or defined residence shop")); - LocaleManager.addTabCompleteSub(this, "votes", "[residenceshop]"); - - c.get("likes.Description", "Shows res shop likes"); - c.get("likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", "Shows full like list of current or defined residence shop")); - LocaleManager.addTabCompleteSub(this, "likes", "[residenceshop]"); - - c.get("setdesc.Description", "Sets residence shop description"); - c.get("setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n")); - - c.get("createboard.Description", "Create res shop board"); - c.get("createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", - "Creates res shop board from selected area. Place - position from which to start filling board")); - LocaleManager.addTabCompleteSub(this, "createboard", "1"); - - c.get("deleteboard.Description", "Deletes res shop board"); - c.get("deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", "Deletes res shop board bi right clicking on one of signs")); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Manage residence shop"); + c.get("Info", Arrays.asList("Manages residence shop feature")); + + // Sub commands + c.setFullPath(c.getPath() + "SubCommands."); + c.get("list.Description", "Shows list of res shops"); + c.get("list.Info", Arrays.asList("&eUsage: &6/res shop list", "Shows full list of all residences with shop flag")); + + c.get("vote.Description", "Vote for residence shop"); + c.get("vote.Info", Arrays.asList("&eUsage: &6/res shop vote [amount]", "Votes for current or defined residence")); + LocaleManager.addTabCompleteSub(this, "vote", "[residence]", "10"); + + c.get("like.Description", "Give like for residence shop"); + c.get("like.Info", Arrays.asList("&eUsage: &6/res shop like ", "Gives like for residence shop")); + LocaleManager.addTabCompleteSub(this, "like", "[residenceshop]"); + + c.get("votes.Description", "Shows res shop votes"); + c.get("votes.Info", Arrays.asList("&eUsage: &6/res shop votes ", "Shows full vote list of current or defined residence shop")); + LocaleManager.addTabCompleteSub(this, "votes", "[residenceshop]"); + + c.get("likes.Description", "Shows res shop likes"); + c.get("likes.Info", Arrays.asList("&eUsage: &6/res shop likes ", "Shows full like list of current or defined residence shop")); + LocaleManager.addTabCompleteSub(this, "likes", "[residenceshop]"); + + c.get("setdesc.Description", "Sets residence shop description"); + c.get("setdesc.Info", Arrays.asList("&eUsage: &6/res shop setdesc [text]", "Sets residence shop description. Color code supported. For new line use /n")); + + c.get("createboard.Description", "Create res shop board"); + c.get("createboard.Info", Arrays.asList("&eUsage: &6/res shop createboard [place]", + "Creates res shop board from selected area. Place - position from which to start filling board")); + LocaleManager.addTabCompleteSub(this, "createboard", "1"); + + c.get("deleteboard.Description", "Deletes res shop board"); + c.get("deleteboard.Info", Arrays.asList("&eUsage: &6/res shop deleteboard", "Deletes res shop board bi right clicking on one of signs")); + LocaleManager.addTabCompleteSub(this, "deleteboard", "1"); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 3a586179f..f35d68a61 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -224,10 +224,8 @@ public static boolean canBreakBlock(Player player, Block block, boolean inform) return true; } - CMIDebug.it(); ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(block.getLocation()); - CMIDebug.d(String.format("%,.4f", CMIDebug.getIT()), "ms"); - + if (res != null && res.getItemIgnoreList().isListed(mat)) return true; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 45dd611f4..cf23c9c98 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1179,8 +1179,9 @@ public void onPlatePress(PlayerInteractEvent event) { } } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + @EventHandler(priority = EventPriority.LOWEST) public void onSelection(PlayerInteractEvent event) { + if (event.getPlayer() == null) return; // disabling event on world diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 73c1cd8fc..ba83bce22 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -825,21 +825,13 @@ public boolean addSubzone(Player player, String owner, Location loc1, Location l } public ClaimedResidence getSubzoneByLoc(Location loc) { - Set> set = subzones.entrySet(); - ClaimedResidence res = null; - for (Entry entry : set) { - if (entry.getValue().containsLoc(loc)) { - res = entry.getValue(); - break; - } - } - if (res == null) - return null; - ClaimedResidence subrez = res.getSubzoneByLoc(loc); - if (subrez == null) { - return res; + for (Entry entry : subzones.entrySet()) { + if (!entry.getValue().containsLoc(loc)) + continue; + ClaimedResidence subrez = entry.getValue().getSubzoneByLoc(loc); + return subrez == null ? entry.getValue() : subrez; } - return subrez; + return null; } public ClaimedResidence getSubzone(String subzonename) { @@ -966,10 +958,9 @@ public long getXZSize() { } public CuboidArea[] getAreaArray() { - + return areas.values().toArray(new CuboidArea[0]); - - + // CuboidArea[] temp = new CuboidArea[areas.size()]; // int i = 0; // for (CuboidArea area : areas.values()) { @@ -2037,7 +2028,7 @@ public boolean isOwner(CommandSender sender) { if (Residence.getInstance().getConfigManager().isOfflineMode()) { return perms.getOwner().equalsIgnoreCase(sender.getName()); } - + return true; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index ca5e7c076..53028f5c0 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -90,10 +90,14 @@ public ClaimedResidence getByLoc(Location loc) { if (loc == null) return null; + World world = loc.getWorld(); + if (world == null) return null; + String worldName = world.getName(); + if (worldName == null) return null; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index e1bbd6cb4..321089634 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -35,6 +35,7 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Effects.CMIEffect; import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; +import net.Zrips.CMILib.Logs.CMIDebug; public class SelectionManager { protected Map selections; diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index 11de90a2e..1072756c8 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -45,7 +45,6 @@ public boolean hasPermission(OfflinePlayer op, Location loc, Interaction action) CMIDebug.d(action); ClaimedResidence res = residence.getResidenceManager().getByLoc(loc); if (res != null) { - CMIDebug.d("?", action); boolean allow = res.getPermissions().playerHas(ResidencePlayer.get(op.getUniqueId()), Flags.container, false); if (!allow) residence.msg(op.getPlayer(), lm.Flag_Deny, Flags.container); @@ -56,9 +55,7 @@ public boolean hasPermission(OfflinePlayer op, Location loc, Interaction action) Player player = Bukkit.getPlayer(op.getUniqueId()); if (player == null) return false; - boolean state = ResidenceBlockListener.canBreakBlock(player, loc.getBlock(), true); - - return state; + return ResidenceBlockListener.canBreakBlock(player, loc.getBlock(), true); default: break; } From a0ca56bb34b8168b009bed2463aab68696f7c1ce Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2023 14:10:12 +0300 Subject: [PATCH 1014/1142] Minimizing effects from projectiles hitting wooden buttons in residence you dont have permission in --- .../listeners/ResidenceBlockListener.java | 62 ++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index f35d68a61..3cac07fe6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -8,6 +8,7 @@ import java.util.Set; import java.util.UUID; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -22,6 +23,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockDispenseEvent; @@ -35,10 +37,12 @@ import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.block.BlockRedstoneEvent; import org.bukkit.event.block.BlockSpreadEvent; import org.bukkit.event.block.EntityBlockFormEvent; import org.bukkit.event.block.LeavesDecayEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.world.PortalCreateEvent; @@ -82,6 +86,63 @@ public ResidenceBlockListener(Residence residence) { this.plugin = residence; } + @EventHandler(priority = EventPriority.LOWEST) + public void onAnvilInventoryClick(ProjectileHitEvent e) { + // Disabling listener if flag disabled globally + if (!Flags.button.isGlobalyEnabled()) + return; + + if (e.getHitBlock() == null) + return; + + if (plugin.isDisabledWorldListener(e.getHitBlock().getWorld())) + return; + + if (!(e.getEntity().getShooter() instanceof Player)) + return; + + Player player = (Player) e.getEntity().getShooter(); + + Block block = e.getHitBlock().getLocation().clone().add(e.getHitBlockFace().getDirection()).getBlock(); + + if (!CMIMaterial.isButton(block.getType())) + return; + + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + + boolean hasuse = perms.playerHas(player, Flags.use, true); + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + + Flags result = FlagPermissions.getMaterialUseFlagList().get(block.getType()); + if (result != null) { + main: if (!perms.playerHas(player, result, hasuse)) { + + if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { + break main; + } + + switch (result) { + case button: + if (ResPerm.bypass_button.hasPermission(player, 10000L)) + break main; + break; + } + + e.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, result); + Bukkit.getScheduler().runTask(plugin, () -> { + Location loc = block.getLocation().clone(); + loc.add(e.getHitBlockFace().getDirection()); + e.getEntity().teleport(loc); + e.getEntity().setVelocity(e.getEntity().getVelocity().multiply(-1)); + }); + + return; + } + } + } + @EventHandler(priority = EventPriority.LOWEST) public void onAnvilInventoryClick(InventoryClickEvent e) { // Disabling listener if flag disabled globally @@ -119,7 +180,6 @@ public void onAnvilInventoryClick(InventoryClickEvent e) { // Need to fix roTation issue b.setType(CMIMaterial.ANVIL.getMaterial()); } - } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) From 560325dc22a6de676789a203be54a954da86a0c4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2023 14:47:37 +0300 Subject: [PATCH 1015/1142] New flag as safezone which will periodically remove negative potion effects from players --- .../bukkit/residence/ConfigManager.java | 16 +++++++++---- .../bekvon/bukkit/residence/Residence.java | 19 +++++++++++++-- .../bukkit/residence/containers/Flags.java | 1 + .../listeners/ResidenceBlockListener.java | 7 ++---- .../listeners/ResidencePlayerListener.java | 23 +++++++++++++++++++ 5 files changed, 54 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 0a8726b5a..f6c164d14 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -163,6 +163,7 @@ public class ConfigManager { protected int VoteRangeFrom; protected int HealInterval; protected int FeedInterval; + protected int BadEffectRemoveInterval; protected int VoteRangeTo; protected FlagPermissions globalCreatorDefaults; protected FlagPermissions globalRentedDefaults; @@ -635,7 +636,7 @@ public void UpdateConfigFile() { c.addComment("Global.Selection.NoCostForYBlocks", "By setting this to true, player will only pay for x*z blocks ignoring height", "This will lower residence price by up to 319 times, so adjust block price BEFORE enabling this"); NoCostForYBlocks = c.get("Global.Selection.NoCostForYBlocks", false); - + c.addComment("Global.Selection.WorldEditIntegration", "Enable or disable world edit integration into Residence plugin"); WorldEditIntegration = c.get("Global.Selection.WorldEditIntegration", true); @@ -679,7 +680,7 @@ public void UpdateConfigFile() { "Weird shaped residence detection when using automatic residence creation", "This will inform player about residence shape being iregular cuboid before creation of it"); ARCRatioInform = c.get("Global.Optimizations.AutomaticResidenceCreation.Ratio.Inform", true); - + c.addComment("Global.Optimizations.AutomaticResidenceCreation.Confirmation", "While enabled player will be required to click on chat message or perform /res create [resName] to finalize creation of residence when its in a weird shape"); ARCRatioConfirmation = c.get("Global.Optimizations.AutomaticResidenceCreation.Ratio.Confirmation", true); @@ -801,9 +802,10 @@ public void UpdateConfigFile() { // Healing/Feed interval c.addComment("Global.Optimizations.Intervals.Heal", "How often in seconds to heal/feed players in residence with appropriate flag", - "Bigger numbers can save some resources"); + "Bigger numbers can save some server resources", "Set to 0 if you want to disable specific checks entirely. Recommended in case you are not using specific flags"); HealInterval = c.get("Global.Optimizations.Intervals.Heal", 1); FeedInterval = c.get("Global.Optimizations.Intervals.Feed", 5); + BadEffectRemoveInterval = c.get("Global.Optimizations.Intervals.BadEffectRemoval", 3); // negative potion effect list c.addComment("Global.Optimizations.NegativePotionEffects", @@ -824,7 +826,7 @@ public void UpdateConfigFile() { WalkSpeed2 = WalkSpeed2 < 0 ? 0 : WalkSpeed2; WalkSpeed2 = WalkSpeed2 > 5 ? 5 : WalkSpeed2; WalkSpeed2 = WalkSpeed2 / 5.0; - + SignsMaxPerResidence = c.get("Global.Signs.MaxPerResidence", 5); SignsMaxPerResidence = SignsMaxPerResidence < 0 ? 0 : SignsMaxPerResidence; @@ -1964,6 +1966,10 @@ public int getFeedInterval() { return FeedInterval; } + public int getBadEffectRemoveInterval() { + return BadEffectRemoveInterval; + } + public int getVoteRangeTo() { return VoteRangeTo; } @@ -2299,7 +2305,7 @@ public boolean isWorldEditIntegration() { public int getSignsMaxPerResidence() { return SignsMaxPerResidence; } - + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index a6c158a8d..e2e955849 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -206,6 +206,7 @@ public class Residence extends JavaPlugin { protected int rentBukkitId = -1; protected int healBukkitId = -1; protected int feedBukkitId = -1; + protected int effectRemoveBukkitId = -1; protected int DespawnMobsBukkitId = -1; @@ -328,6 +329,13 @@ public void run() { } }; + private Runnable removeBadEffects = new Runnable() { + @Override + public void run() { + plistener.badEffects(); + } + }; + private Runnable DespawnMobs = new Runnable() { @Override public void run() { @@ -386,6 +394,7 @@ public void onDisable() { server.getScheduler().cancelTask(autosaveBukkitId); server.getScheduler().cancelTask(healBukkitId); server.getScheduler().cancelTask(feedBukkitId); + server.getScheduler().cancelTask(effectRemoveBukkitId); server.getScheduler().cancelTask(DespawnMobsBukkitId); @@ -795,8 +804,14 @@ public void run() { } autosaveInt = autosaveInt * 60 * 20; autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); - healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, getConfigManager().getHealInterval() * 20); - feedBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doFeed, 20, getConfigManager().getFeedInterval() * 20); + + if (getConfigManager().getHealInterval() > 0) + healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, getConfigManager().getHealInterval() * 20); + if (getConfigManager().getFeedInterval() > 0) + feedBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doFeed, 20, getConfigManager().getFeedInterval() * 20); + if (getConfigManager().getBadEffectRemoveInterval() > 0) + effectRemoveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, removeBadEffects, 20, getConfigManager().getBadEffectRemoveInterval() * 20); + if (getConfigManager().AutoMobRemoval()) DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * getConfigManager().AutoMobRemovalInterval(), 20 * getConfigManager().AutoMobRemovalInterval()); diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index e06c0ba7e..ca07f6277 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -12,6 +12,7 @@ public enum Flags { animals(CMIMaterial.PIG_SPAWN_EGG, FlagMode.Residence, "Allows or denys animal spawns", true), anchor(CMIMaterial.RESPAWN_ANCHOR, FlagMode.Both, "Allows or denys respawn anchor usage", true), anvilbreak(CMIMaterial.ANVIL, FlagMode.Residence, "Allows or denys anvil break in residence", true), + safezone(CMIMaterial.APPLE, FlagMode.Residence, "Setting to true makes the residence clean bad effects from its occupants", false), backup(CMIMaterial.BOOKSHELF, FlagMode.Residence, "If set to true, restores previous look of area (WordEdit required)", false), bank(CMIMaterial.ENDER_CHEST, FlagMode.Both, "Allows or denys deposit/withdraw money from res bank", true), bed(CMIMaterial.WHITE_BED, FlagMode.Both, "Allows or denys players to use beds", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 3cac07fe6..4309bea55 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -23,7 +23,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockDispenseEvent; @@ -37,7 +36,6 @@ import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.block.BlockRedstoneEvent; import org.bukkit.event.block.BlockSpreadEvent; import org.bukkit.event.block.EntityBlockFormEvent; import org.bukkit.event.block.LeavesDecayEvent; @@ -70,7 +68,6 @@ import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { @@ -121,7 +118,7 @@ public void onAnvilInventoryClick(ProjectileHitEvent e) { if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { break main; } - + switch (result) { case button: if (ResPerm.bypass_button.hasPermission(player, 10000L)) @@ -137,7 +134,7 @@ public void onAnvilInventoryClick(ProjectileHitEvent e) { e.getEntity().teleport(loc); e.getEntity().setVelocity(e.getEntity().getVelocity().multiply(-1)); }); - + return; } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index cf23c9c98..70d8620e8 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -54,6 +55,7 @@ import org.bukkit.event.vehicle.VehicleMoveEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; import org.bukkit.util.Vector; import com.bekvon.bukkit.residence.ConfigManager; @@ -2707,6 +2709,27 @@ public void feed() { } } + public void badEffects() { + if (!Flags.safezone.isGlobalyEnabled()) + return; + try { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + ClaimedResidence res = getCurrentResidence(player.getUniqueId()); + if (res == null) + continue; + if (!res.getPermissions().has(Flags.safezone, FlagCombo.OnlyTrue)) + continue; + if (player.getActivePotionEffects().isEmpty()) + continue; + for (PotionEffect one : player.getActivePotionEffects()) { + if (plugin.getConfigManager().getNegativePotionEffects().contains(one.getType().getName().toLowerCase())) + player.removePotionEffect(one.getType()); + } + } + } catch (Exception ex) { + } + } + public void DespawnMobs() { if (!Flags.nomobs.isGlobalyEnabled()) return; From f1294a47dc5c910c4f006132d75234d85cf64987 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2023 14:49:45 +0300 Subject: [PATCH 1016/1142] SafeZone --- src/com/bekvon/bukkit/residence/ConfigManager.java | 8 ++++---- src/com/bekvon/bukkit/residence/Residence.java | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index f6c164d14..a6e1a7ec1 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -163,7 +163,7 @@ public class ConfigManager { protected int VoteRangeFrom; protected int HealInterval; protected int FeedInterval; - protected int BadEffectRemoveInterval; + protected int SafeZoneInterval; protected int VoteRangeTo; protected FlagPermissions globalCreatorDefaults; protected FlagPermissions globalRentedDefaults; @@ -805,7 +805,7 @@ public void UpdateConfigFile() { "Bigger numbers can save some server resources", "Set to 0 if you want to disable specific checks entirely. Recommended in case you are not using specific flags"); HealInterval = c.get("Global.Optimizations.Intervals.Heal", 1); FeedInterval = c.get("Global.Optimizations.Intervals.Feed", 5); - BadEffectRemoveInterval = c.get("Global.Optimizations.Intervals.BadEffectRemoval", 3); + SafeZoneInterval = c.get("Global.Optimizations.Intervals.SafeZone", 3); // negative potion effect list c.addComment("Global.Optimizations.NegativePotionEffects", @@ -1966,8 +1966,8 @@ public int getFeedInterval() { return FeedInterval; } - public int getBadEffectRemoveInterval() { - return BadEffectRemoveInterval; + public int getSafeZoneInterval() { + return SafeZoneInterval; } public int getVoteRangeTo() { diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index e2e955849..f5fcccb0d 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -809,8 +809,8 @@ public void run() { healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, getConfigManager().getHealInterval() * 20); if (getConfigManager().getFeedInterval() > 0) feedBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doFeed, 20, getConfigManager().getFeedInterval() * 20); - if (getConfigManager().getBadEffectRemoveInterval() > 0) - effectRemoveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, removeBadEffects, 20, getConfigManager().getBadEffectRemoveInterval() * 20); + if (getConfigManager().getSafeZoneInterval() > 0) + effectRemoveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, removeBadEffects, 20, getConfigManager().getSafeZoneInterval() * 20); if (getConfigManager().AutoMobRemoval()) DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * getConfigManager().AutoMobRemovalInterval(), 20 From 5143c1d66304b03cf0625bcd58cf1d0b839d88e4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2023 14:58:10 +0300 Subject: [PATCH 1017/1142] Allow async ResidenceFlagCheckEvent calls --- .../bekvon/bukkit/residence/commands/info.java | 4 ++-- .../bukkit/residence/event/ResidenceEvent.java | 18 ++++++++++++------ .../event/ResidenceFlagCheckEvent.java | 4 ++-- .../residence/event/ResidenceFlagEvent.java | 9 ++++++++- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/info.java b/src/com/bekvon/bukkit/residence/commands/info.java index 519ba93fe..a1d4653da 100644 --- a/src/com/bekvon/bukkit/residence/commands/info.java +++ b/src/com/bekvon/bukkit/residence/commands/info.java @@ -58,7 +58,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo RawMessage rm = new RawMessage(); - if (!nearby.isEmpty()) { + if (!nearby.isEmpty()) { rm.addText(plugin.msg(lm.Residence_Near, "")); for (ClaimedResidence one : nearby) { if (rm.getFinalLenght() > 0) @@ -102,7 +102,7 @@ public void run(CommandSender sender) { if (playerName.equalsIgnoreCase("-players")) { plugin.getResidenceManager().printAreaPlayers(args[0], sender, page); - } + } return true; } return false; diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java index cdfebdad3..79184b112 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java @@ -11,25 +11,31 @@ public class ResidenceEvent extends Event { @Override public HandlerList getHandlers() { - return handlers; + return handlers; } public static HandlerList getHandlerList() { - return handlers; + return handlers; } ClaimedResidence res; + public ResidenceEvent(String eventName, ClaimedResidence resref, boolean async) { + super(async); + message = eventName; + res = resref; + } + public ResidenceEvent(String eventName, ClaimedResidence resref) { - message = eventName; - res = resref; + message = eventName; + res = resref; } public String getMessage() { - return message; + return message; } public ClaimedResidence getResidence() { - return res; + return res; } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java index 9b4406645..10f395839 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java @@ -18,9 +18,9 @@ public static HandlerList getHandlerList() { private boolean override; private boolean overridevalue; boolean defaultvalue; - + public ResidenceFlagCheckEvent(ClaimedResidence resref, String flag, FlagType type, String target, boolean defaultValue) { - super("RESIDENCE_FLAG_CHECK", resref, flag, type, target); + super("RESIDENCE_FLAG_CHECK", resref, flag, type, target, true); defaultvalue = defaultValue; override = false; } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceFlagEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceFlagEvent.java index 089fc6b89..0fb6a2507 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceFlagEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceFlagEvent.java @@ -25,7 +25,14 @@ public enum FlagType { FlagType flagtype; FlagState flagstate; String flagtarget; - + + public ResidenceFlagEvent(String eventName, ClaimedResidence resref, String flag, FlagType type, String target, boolean async) { + super(eventName, resref, async); + flagname = flag; + flagtype = type; + flagtarget = target; + } + public ResidenceFlagEvent(String eventName, ClaimedResidence resref, String flag, FlagType type, String target) { super(eventName, resref); flagname = flag; From 999edc595df1930d397a0492476532bbf2b6b9cb Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2023 16:45:39 +0300 Subject: [PATCH 1018/1142] Not calling flag check event when it comes from slime fun in async --- .../residence/event/ResidenceEvent.java | 18 +- .../event/ResidenceFlagCheckEvent.java | 4 +- .../residence/event/ResidenceFlagEvent.java | 9 +- .../protection/ResidencePermissions.java | 1232 +++++++++-------- 4 files changed, 645 insertions(+), 618 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java index 79184b112..cdfebdad3 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceEvent.java @@ -11,31 +11,25 @@ public class ResidenceEvent extends Event { @Override public HandlerList getHandlers() { - return handlers; + return handlers; } public static HandlerList getHandlerList() { - return handlers; + return handlers; } ClaimedResidence res; - public ResidenceEvent(String eventName, ClaimedResidence resref, boolean async) { - super(async); - message = eventName; - res = resref; - } - public ResidenceEvent(String eventName, ClaimedResidence resref) { - message = eventName; - res = resref; + message = eventName; + res = resref; } public String getMessage() { - return message; + return message; } public ClaimedResidence getResidence() { - return res; + return res; } } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java index 10f395839..9b4406645 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceFlagCheckEvent.java @@ -18,9 +18,9 @@ public static HandlerList getHandlerList() { private boolean override; private boolean overridevalue; boolean defaultvalue; - + public ResidenceFlagCheckEvent(ClaimedResidence resref, String flag, FlagType type, String target, boolean defaultValue) { - super("RESIDENCE_FLAG_CHECK", resref, flag, type, target, true); + super("RESIDENCE_FLAG_CHECK", resref, flag, type, target); defaultvalue = defaultValue; override = false; } diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceFlagEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceFlagEvent.java index 0fb6a2507..089fc6b89 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceFlagEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceFlagEvent.java @@ -25,14 +25,7 @@ public enum FlagType { FlagType flagtype; FlagState flagstate; String flagtarget; - - public ResidenceFlagEvent(String eventName, ClaimedResidence resref, String flag, FlagType type, String target, boolean async) { - super(eventName, resref, async); - flagname = flag; - flagtype = type; - flagtarget = target; - } - + public ResidenceFlagEvent(String eventName, ClaimedResidence resref, String flag, FlagType type, String target) { super(eventName, resref); flagname = flag; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 82b0607cc..ed2b2de61 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -34,547 +34,579 @@ public class ResidencePermissions extends FlagPermissions { private String world; private ClaimedResidence residence; + private static boolean suspendEventCalls = false; + private ResidencePermissions(ClaimedResidence res) { - super(); - residence = res; + super(); + residence = res; } public ResidencePermissions(ClaimedResidence res, String creator, UUID creatorUUID, String inworld) { - this(res); - if (creatorUUID == null) - ownerUUID = Residence.getInstance().getPlayerUUID(creator); - else - ownerUUID = creatorUUID; - if (ownerUUID == null) - ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID()); - this.ownerLastKnownName = creator; - world = inworld; + this(res); + if (creatorUUID == null) + ownerUUID = Residence.getInstance().getPlayerUUID(creator); + else + ownerUUID = creatorUUID; + if (ownerUUID == null) + ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID()); + this.ownerLastKnownName = creator; + world = inworld; } @Deprecated public ResidencePermissions(ClaimedResidence res, String creator, String inworld) { - this(res); - ownerUUID = Residence.getInstance().getPlayerUUID(creator); - if (ownerUUID == null) - ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID()); - this.ownerLastKnownName = creator; - world = inworld; + this(res); + ownerUUID = Residence.getInstance().getPlayerUUID(creator); + if (ownerUUID == null) + ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID()); + this.ownerLastKnownName = creator; + world = inworld; } public boolean playerHas(CommandSender sender, Flags flag, boolean def) { - if (sender instanceof Player) - return playerHas((Player) sender, flag, def); - return true; + if (sender instanceof Player) + return playerHas((Player) sender, flag, def); + return true; } @Override public boolean playerHas(Player player, Flags flag, boolean def) { - return playerHas(player, world, flag, def); + return playerHas(player, world, flag, def); } @Deprecated public boolean playerHas(Player player, String flag, boolean def) { - return this.playerHas(player.getName(), world, flag, def); + return this.playerHas(player.getName(), world, flag, def); } public boolean playerHas(String player, Flags flag, boolean def) { - return playerHas(player, flag.toString(), def); + return playerHas(player, flag.toString(), def); } @Deprecated public boolean playerHas(String player, String flag, boolean def) { - return this.playerHas(player, world, flag, def); + return this.playerHas(player, world, flag, def); } public boolean playerHas(Player player, Flags flag, FlagCombo f) { - switch (f) { - case FalseOrNone: - return !this.playerHas(player, world, flag, false); - case OnlyFalse: - return !this.playerHas(player, world, flag, true); - case OnlyTrue: - return this.playerHas(player, world, flag, false); - case TrueOrNone: - return this.playerHas(player, world, flag, true); - default: - return false; - } + switch (f) { + case FalseOrNone: + return !this.playerHas(player, world, flag, false); + case OnlyFalse: + return !this.playerHas(player, world, flag, true); + case OnlyTrue: + return this.playerHas(player, world, flag, false); + case TrueOrNone: + return this.playerHas(player, world, flag, true); + default: + return false; + } } public boolean playerHas(ResidencePlayer player, Flags flag, FlagCombo f) { - switch (f) { - case FalseOrNone: - return !this.playerHas(player, flag, false); - case OnlyFalse: - return !this.playerHas(player, flag, true); - case OnlyTrue: - return this.playerHas(player, flag, false); - case TrueOrNone: - return this.playerHas(player, flag, true); - default: - return false; - } + switch (f) { + case FalseOrNone: + return !this.playerHas(player, flag, false); + case OnlyFalse: + return !this.playerHas(player, flag, true); + case OnlyTrue: + return this.playerHas(player, flag, false); + case TrueOrNone: + return this.playerHas(player, flag, true); + default: + return false; + } } @Override public boolean playerHas(ResidencePlayer player, Flags flag, boolean def) { - if (player == null) - return false; - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag.toString(), FlagType.PLAYER, player.getName(), def); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isOverriden()) - return fc.getOverrideValue(); - return super.playerHas(player, flag, def); + if (player == null) + return false; + if (!isEventCallsSuspended()) { + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag.toString(), FlagType.PLAYER, player.getName(), def); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + } + return super.playerHas(player, flag, def); } @Deprecated public boolean playerHas(String player, String flag, FlagCombo f) { - switch (f) { - case FalseOrNone: - return !this.playerHas(player, world, flag, false); - case OnlyFalse: - return !this.playerHas(player, world, flag, true); - case OnlyTrue: - return this.playerHas(player, world, flag, false); - case TrueOrNone: - return this.playerHas(player, world, flag, true); - default: - return false; - } + switch (f) { + case FalseOrNone: + return !this.playerHas(player, world, flag, false); + case OnlyFalse: + return !this.playerHas(player, world, flag, true); + case OnlyTrue: + return this.playerHas(player, world, flag, false); + case TrueOrNone: + return this.playerHas(player, world, flag, true); + default: + return false; + } } @Override public boolean playerHas(Player player, String world, Flags flag, boolean def) { - if (player == null) - return false; - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag.toString(), FlagType.PLAYER, player.getName(), def); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isOverriden()) - return fc.getOverrideValue(); - return super.playerHas(player, world, flag, def); + if (player == null) + return false; + if (!isEventCallsSuspended()) { + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag.toString(), FlagType.PLAYER, player.getName(), def); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + } + return super.playerHas(player, world, flag, def); } @Override @Deprecated public boolean playerHas(String player, String world, String flag, boolean def) { - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER, player, def); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isOverriden()) - return fc.getOverrideValue(); - return super.playerHas(player, world, flag, def); + if (!isEventCallsSuspended()) { + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.PLAYER, player, def); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + } + + return super.playerHas(player, world, flag, def); } @Override public boolean groupHas(String group, String flag, boolean def) { - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.GROUP, group, def); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isOverriden()) - return fc.getOverrideValue(); - return super.groupHas(group, flag, def); + if (!isEventCallsSuspended()) { + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.GROUP, group, def); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + } + return super.groupHas(group, flag, def); } @Override public boolean has(Flags flag, FlagCombo f) { - return has(flag, f, true); + return has(flag, f, true); } public boolean has(Flags flag, FlagCombo f, boolean checkParent) { - switch (f) { - case FalseOrNone: - return !has(flag, false, checkParent); - case OnlyFalse: - return !has(flag, true, checkParent); - case OnlyTrue: - return has(flag, false, checkParent); - case TrueOrNone: - return has(flag, true, checkParent); - default: - return false; - } + switch (f) { + case FalseOrNone: + return !has(flag, false, checkParent); + case OnlyFalse: + return !has(flag, true, checkParent); + case OnlyTrue: + return has(flag, false, checkParent); + case TrueOrNone: + return has(flag, true, checkParent); + default: + return false; + } } @Deprecated public boolean has(String flag, FlagCombo f) { - return has(flag, f, true); + return has(flag, f, true); } @Deprecated public boolean has(String flag, FlagCombo f, boolean checkParent) { - switch (f) { - case FalseOrNone: - return !has(flag, false, checkParent); - case OnlyFalse: - return !has(flag, true, checkParent); - case OnlyTrue: - return has(flag, false, checkParent); - case TrueOrNone: - return has(flag, true, checkParent); - default: - return false; - } + switch (f) { + case FalseOrNone: + return !has(flag, false, checkParent); + case OnlyFalse: + return !has(flag, true, checkParent); + case OnlyTrue: + return has(flag, false, checkParent); + case TrueOrNone: + return has(flag, true, checkParent); + default: + return false; + } } @Override public boolean has(Flags flag, boolean def) { - return has(flag.toString(), def, true); + return has(flag.toString(), def, true); } @Override public boolean has(String flag, boolean def) { - return has(flag, def, true); + return has(flag, def, true); } @Override public boolean has(String flag, boolean def, boolean checkParent) { - ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isOverriden()) - return fc.getOverrideValue(); - return super.has(flag, def, checkParent); + if (!isEventCallsSuspended()) { + ResidenceFlagCheckEvent fc = new ResidenceFlagCheckEvent(residence, flag, FlagType.RESIDENCE, null, def); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isOverriden()) + return fc.getOverrideValue(); + } + return super.has(flag, def, checkParent); } public boolean hasApplicableFlag(String player, String flag) { - return super.inheritanceIsPlayerSet(player, flag) || - super.inheritanceIsGroupSet(Residence.getInstance().getPlayerManager().getResidencePlayer(player).getGroup(world).getGroupName(), flag) || - super.inheritanceIsSet(flag); + return super.inheritanceIsPlayerSet(player, flag) || + super.inheritanceIsGroupSet(Residence.getInstance().getPlayerManager().getResidencePlayer(player).getGroup(world).getGroupName(), flag) || + super.inheritanceIsSet(flag); } public void applyTemplate(Player player, FlagPermissions list, boolean resadmin) { - if (player != null) { - if (!resadmin) { - if (!Residence.getInstance().getConfigManager().isOfflineMode() && !player.getUniqueId().toString().equals(ownerUUID.toString())) { - Residence.getInstance().msg(player, lm.General_NoPermission); - return; - } else if (!player.getName().equalsIgnoreCase(ownerLastKnownName)) { - Residence.getInstance().msg(player, lm.General_NoPermission); - return; - } - } - } else { - resadmin = true; - } - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(this.getOwner()); - PermissionGroup group = rPlayer.getGroup(world); - - for (Entry flag : list.cuboidFlags.entrySet()) { - if (group.hasFlagAccess(flag.getKey()) || resadmin) { - this.cuboidFlags.put(flag.getKey(), flag.getValue()); - } else { - if (player != null) - Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); - } - } - for (Entry> plists : list.playerFlags.entrySet()) { - Map map = this.getPlayerFlags(plists.getKey(), true); - for (Entry flag : plists.getValue().entrySet()) { - if (group.hasFlagAccess(flag.getKey()) || resadmin) { - map.put(flag.getKey(), flag.getValue()); - } else { - if (player != null) - Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); - } - } - } - for (Entry> glists : list.groupFlags.entrySet()) { - for (Entry flag : glists.getValue().entrySet()) { - if (group.hasFlagAccess(flag.getKey()) || resadmin) { - if (!this.groupFlags.containsKey(glists.getKey())) - this.groupFlags.put(glists.getKey(), Collections.synchronizedMap(new HashMap())); - this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue()); - } else { - if (player != null) - Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); - } - } - } - if (player != null) - Residence.getInstance().msg(player, lm.Residence_PermissionsApply); + if (player != null) { + if (!resadmin) { + if (!Residence.getInstance().getConfigManager().isOfflineMode() && !player.getUniqueId().toString().equals(ownerUUID.toString())) { + Residence.getInstance().msg(player, lm.General_NoPermission); + return; + } else if (!player.getName().equalsIgnoreCase(ownerLastKnownName)) { + Residence.getInstance().msg(player, lm.General_NoPermission); + return; + } + } + } else { + resadmin = true; + } + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(this.getOwner()); + PermissionGroup group = rPlayer.getGroup(world); + + for (Entry flag : list.cuboidFlags.entrySet()) { + if (group.hasFlagAccess(flag.getKey()) || resadmin) { + this.cuboidFlags.put(flag.getKey(), flag.getValue()); + } else { + if (player != null) + Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); + } + } + for (Entry> plists : list.playerFlags.entrySet()) { + Map map = this.getPlayerFlags(plists.getKey(), true); + for (Entry flag : plists.getValue().entrySet()) { + if (group.hasFlagAccess(flag.getKey()) || resadmin) { + map.put(flag.getKey(), flag.getValue()); + } else { + if (player != null) + Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); + } + } + } + for (Entry> glists : list.groupFlags.entrySet()) { + for (Entry flag : glists.getValue().entrySet()) { + if (group.hasFlagAccess(flag.getKey()) || resadmin) { + if (!this.groupFlags.containsKey(glists.getKey())) + this.groupFlags.put(glists.getKey(), Collections.synchronizedMap(new HashMap())); + this.groupFlags.get(glists.getKey()).put(flag.getKey(), flag.getValue()); + } else { + if (player != null) + Residence.getInstance().msg(player, lm.Flag_SetDeny, flag.getKey()); + } + } + } + if (player != null) + Residence.getInstance().msg(player, lm.Residence_PermissionsApply); } public boolean hasResidencePermission(CommandSender sender, boolean requireOwner) { - if (!(sender instanceof Player)) - return true; + if (!(sender instanceof Player)) + return true; - ClaimedResidence par = this.residence.getParent(); - Player player = (Player) sender; + ClaimedResidence par = this.residence.getParent(); + Player player = (Player) sender; - if (par != null && par.getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue)) - return true; + if (par != null && par.getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue)) + return true; - if (Residence.getInstance().getConfigManager().enabledRentSystem()) { - String resname = residence.getName(); - if (Residence.getInstance().getRentManager().isRented(resname)) { - if (requireOwner) { - return false; - } - String renter = Residence.getInstance().getRentManager().getRentingPlayer(resname); - if (sender.getName().equals(renter)) { - return true; - } - return (playerHas(player, Flags.admin, FlagCombo.OnlyTrue)); - } - } + if (Residence.getInstance().getConfigManager().enabledRentSystem()) { + String resname = residence.getName(); + if (Residence.getInstance().getRentManager().isRented(resname)) { + if (requireOwner) { + return false; + } + String renter = Residence.getInstance().getRentManager().getRentingPlayer(resname); + if (sender.getName().equals(renter)) { + return true; + } + return (playerHas(player, Flags.admin, FlagCombo.OnlyTrue)); + } + } - if (requireOwner) { - return (this.getOwner().equals(sender.getName())); - } + if (requireOwner) { + return (this.getOwner().equals(sender.getName())); + } - return (playerHas(player, Flags.admin, FlagCombo.OnlyTrue) || this.getOwner().equals(sender.getName())); + return (playerHas(player, Flags.admin, FlagCombo.OnlyTrue) || this.getOwner().equals(sender.getName())); } private boolean checkCanSetFlag(CommandSender sender, String flag, FlagState state, boolean globalflag, boolean resadmin) { - Flags f = Flags.getFlag(flag); - if (f != null) - flag = f.toString(); - if (!checkValidFlag(flag, globalflag)) { - if (f != null) - Residence.getInstance().msg(sender, lm.Invalid_FlagType_Fail, f.getFlagMode() == FlagMode.Residence ? Residence.getInstance().getLM().getMessage(lm.Invalid_FlagType_Residence) : Residence - .getInstance().getLM().getMessage(lm.Invalid_FlagType_Player)); - else - Residence.getInstance().msg(sender, lm.Invalid_Flag); - return false; - } - if (state == FlagState.INVALID) { - Residence.getInstance().msg(sender, lm.Invalid_FlagState); - return false; - } - if (!resadmin) { - if (!this.hasResidencePermission(sender, false)) { - Residence.getInstance().msg(sender, lm.General_NoPermission); - return false; - } - if (!hasFlagAccess(this.getOwner(), flag) && !ResPerm.flag_$1.hasPermission(sender, 10000L, flag.toLowerCase())) { - Residence.getInstance().msg(sender, lm.Flag_SetFailed, flag); - return false; - } - } - return true; + Flags f = Flags.getFlag(flag); + if (f != null) + flag = f.toString(); + if (!checkValidFlag(flag, globalflag)) { + if (f != null) + Residence.getInstance().msg(sender, lm.Invalid_FlagType_Fail, f.getFlagMode() == FlagMode.Residence ? Residence.getInstance().getLM().getMessage(lm.Invalid_FlagType_Residence) : Residence + .getInstance().getLM().getMessage(lm.Invalid_FlagType_Player)); + else + Residence.getInstance().msg(sender, lm.Invalid_Flag); + return false; + } + if (state == FlagState.INVALID) { + Residence.getInstance().msg(sender, lm.Invalid_FlagState); + return false; + } + if (!resadmin) { + if (!this.hasResidencePermission(sender, false)) { + Residence.getInstance().msg(sender, lm.General_NoPermission); + return false; + } + if (!hasFlagAccess(this.getOwner(), flag) && !ResPerm.flag_$1.hasPermission(sender, 10000L, flag.toLowerCase())) { + Residence.getInstance().msg(sender, lm.Flag_SetFailed, flag); + return false; + } + } + return true; } private boolean hasFlagAccess(String player, String flag) { - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(world); - return group.hasFlagAccess(flag); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(world); + return group.hasFlagAccess(flag); } public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String flag, String flagstate, boolean resadmin, boolean Show) { - if (Residence.getInstance().getPlayerUUID(targetPlayer) == null) { - sender.sendMessage("No player by this name"); - return false; - } - - if (this.residence.getRaid().isRaidInitialized() && !resadmin) { - Residence.getInstance().msg(sender, lm.Raid_noFlagChange); - return false; - } - - Flags f = Flags.getFlag(flag); - if (f != null) - flag = f.toString(); - if (validFlagGroups.containsKey(flag)) { - return this.setFlagGroupOnPlayer(sender, targetPlayer, flag, flagstate, resadmin); - } - FlagState state = FlagPermissions.stringToFlagState(flagstate); - if (checkCanSetFlag(sender, flag, state, false, resadmin)) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, sender instanceof Player ? (Player) sender : null, flag, - ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - if (super.setPlayerFlag(targetPlayer, flag, state)) { - if (Show) - Residence.getInstance().msg(sender, lm.Flag_Set, flag, residence.getName(), flagstate); - - if ((f == null || f.isInGroup(padd.groupedFlag)) && targetPlayer != null) { - boolean trusted = this.residence.isTrusted(targetPlayer); - if (!state.equals(FlagState.TRUE) && !trusted) { - ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(targetPlayer); - if (rplayer != null) { - rplayer.removeTrustedResidence(this.residence); - } - } else if (state.equals(FlagState.TRUE) && trusted) { - ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(targetPlayer); - if (rplayer != null) { - rplayer.addTrustedResidence(this.residence); - } - } - } - - return true; - } - } - return false; + if (Residence.getInstance().getPlayerUUID(targetPlayer) == null) { + sender.sendMessage("No player by this name"); + return false; + } + + if (this.residence.getRaid().isRaidInitialized() && !resadmin) { + Residence.getInstance().msg(sender, lm.Raid_noFlagChange); + return false; + } + + Flags f = Flags.getFlag(flag); + if (f != null) + flag = f.toString(); + if (validFlagGroups.containsKey(flag)) { + return this.setFlagGroupOnPlayer(sender, targetPlayer, flag, flagstate, resadmin); + } + FlagState state = FlagPermissions.stringToFlagState(flagstate); + if (checkCanSetFlag(sender, flag, state, false, resadmin)) { + + if (!isEventCallsSuspended()) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, sender instanceof Player ? (Player) sender : null, flag, + ResidenceFlagChangeEvent.FlagType.PLAYER, state, targetPlayer); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + } + + if (super.setPlayerFlag(targetPlayer, flag, state)) { + if (Show) + Residence.getInstance().msg(sender, lm.Flag_Set, flag, residence.getName(), flagstate); + + if ((f == null || f.isInGroup(padd.groupedFlag)) && targetPlayer != null) { + boolean trusted = this.residence.isTrusted(targetPlayer); + if (!state.equals(FlagState.TRUE) && !trusted) { + ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(targetPlayer); + if (rplayer != null) { + rplayer.removeTrustedResidence(this.residence); + } + } else if (state.equals(FlagState.TRUE) && trusted) { + ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(targetPlayer); + if (rplayer != null) { + rplayer.addTrustedResidence(this.residence); + } + } + } + + return true; + } + } + return false; } public boolean setGroupFlag(Player player, String group, String flag, String flagstate, boolean resadmin) { - Flags f = Flags.getFlag(flag); - if (f != null) - flag = f.toString(); - - if (this.residence.getRaid().isRaidInitialized() && !resadmin) { - Residence.getInstance().msg(player, lm.Raid_noFlagChange); - return false; - } - - group = group.toLowerCase(); - if (validFlagGroups.containsKey(flag)) - return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin); - FlagState state = FlagPermissions.stringToFlagState(flagstate); - if (checkCanSetFlag(player, flag, state, false, resadmin)) { - if (Residence.getInstance().getPermissionManager().hasGroup(group)) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - if (super.setGroupFlag(group, flag, state)) { - Residence.getInstance().msg(player, lm.Flag_Set, flag, residence.getName(), flagstate); - return true; - } - } else { - Residence.getInstance().msg(player, lm.Invalid_Group); - return false; - } - } - return false; + Flags f = Flags.getFlag(flag); + if (f != null) + flag = f.toString(); + + if (this.residence.getRaid().isRaidInitialized() && !resadmin) { + Residence.getInstance().msg(player, lm.Raid_noFlagChange); + return false; + } + + group = group.toLowerCase(); + if (validFlagGroups.containsKey(flag)) + return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin); + FlagState state = FlagPermissions.stringToFlagState(flagstate); + if (checkCanSetFlag(player, flag, state, false, resadmin)) { + if (Residence.getInstance().getPermissionManager().hasGroup(group)) { + + if (!isEventCallsSuspended()) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + } + if (super.setGroupFlag(group, flag, state)) { + Residence.getInstance().msg(player, lm.Flag_Set, flag, residence.getName(), flagstate); + return true; + } + } else { + Residence.getInstance().msg(player, lm.Invalid_Group); + return false; + } + } + return false; } @Deprecated public boolean setFlag(CommandSender sender, String flag, String flagstate, boolean resadmin) { - return setFlag(sender, flag, FlagPermissions.stringToFlagState(flagstate), resadmin); + return setFlag(sender, flag, FlagPermissions.stringToFlagState(flagstate), resadmin); } public boolean setFlag(CommandSender sender, String flag, FlagState state, boolean resadmin) { - return setFlag(sender, flag, state, resadmin, true); + return setFlag(sender, flag, state, resadmin, true); } public boolean setFlag(CommandSender sender, String flag, FlagState state, boolean resadmin, boolean inform) { - Flags f = Flags.getFlag(flag); - if (f != null) - flag = f.toString(); - - if (this.residence.getRaid().isRaidInitialized() && !resadmin) { - Residence.getInstance().msg(sender, lm.Raid_noFlagChange); - return false; - } - - if (validFlagGroups.containsKey(flag)) - return this.setFlagGroup(sender, flag, state, resadmin); - - if (Residence.getInstance().getConfigManager().isPvPFlagPrevent()) { - for (String oneFlag : Residence.getInstance().getConfigManager().getProtectedFlagsList()) { - if (!flag.equalsIgnoreCase(oneFlag)) - continue; - - ArrayList players = this.residence.getPlayersInResidence(); - if (!resadmin && (players.size() > 1 || players.size() == 1 && !players.get(0).getName().equals(this.getOwner()))) { - int size = 0; - for (Player one : players) { - if (!one.getName().equals(this.getOwner())) - size++; - } - if (inform) - Residence.getInstance().msg(sender, lm.Flag_ChangeDeny, flag, size); - return false; - } - } - } - - if (checkCanSetFlag(sender, flag, state, true, resadmin)) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(this.residence, sender instanceof Player ? (Player) sender : null, flag, - ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - if (super.setFlag(flag, state)) { - if (inform) - Residence.getInstance().msg(sender, lm.Flag_Set, flag, this.residence.getName(), state.name()); - return true; - } - } - return false; + Flags f = Flags.getFlag(flag); + if (f != null) + flag = f.toString(); + + if (this.residence.getRaid().isRaidInitialized() && !resadmin) { + Residence.getInstance().msg(sender, lm.Raid_noFlagChange); + return false; + } + + if (validFlagGroups.containsKey(flag)) + return this.setFlagGroup(sender, flag, state, resadmin); + + if (Residence.getInstance().getConfigManager().isPvPFlagPrevent()) { + for (String oneFlag : Residence.getInstance().getConfigManager().getProtectedFlagsList()) { + if (!flag.equalsIgnoreCase(oneFlag)) + continue; + + ArrayList players = this.residence.getPlayersInResidence(); + if (!resadmin && (players.size() > 1 || players.size() == 1 && !players.get(0).getName().equals(this.getOwner()))) { + int size = 0; + for (Player one : players) { + if (!one.getName().equals(this.getOwner())) + size++; + } + if (inform) + Residence.getInstance().msg(sender, lm.Flag_ChangeDeny, flag, size); + return false; + } + } + } + + if (checkCanSetFlag(sender, flag, state, true, resadmin)) { + if (!isEventCallsSuspended()) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(this.residence, sender instanceof Player ? (Player) sender : null, flag, + ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + } + if (super.setFlag(flag, state)) { + if (inform) + Residence.getInstance().msg(sender, lm.Flag_Set, flag, this.residence.getName(), state.name()); + return true; + } + } + return false; } public boolean removeAllPlayerFlags(CommandSender sender, String targetPlayer, boolean resadmin) { - if (this.hasResidencePermission(sender, false) || resadmin) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(this.residence, sender instanceof Player ? (Player) sender : null, "ALL", - ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) { - return false; - } - super.removeAllPlayerFlags(targetPlayer); - Residence.getInstance().msg(sender, lm.Flag_RemovedAll, targetPlayer, this.residence.getName()); - return true; - } - return false; + if (this.hasResidencePermission(sender, false) || resadmin) { + + if (!isEventCallsSuspended()) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(this.residence, sender instanceof Player ? (Player) sender : null, "ALL", + ResidenceFlagChangeEvent.FlagType.RESIDENCE, FlagState.NEITHER, null); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) { + return false; + } + } + super.removeAllPlayerFlags(targetPlayer); + Residence.getInstance().msg(sender, lm.Flag_RemovedAll, targetPlayer, this.residence.getName()); + return true; + } + return false; } public boolean removeAllGroupFlags(Player player, String group, boolean resadmin) { - if (this.hasResidencePermission(player, false) || resadmin) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) { - return false; - } - super.removeAllGroupFlags(group); - Residence.getInstance().msg(player, lm.Flag_RemovedGroup, group, this.residence.getName()); - return true; - } - return false; + if (this.hasResidencePermission(player, false) || resadmin) { + if (!isEventCallsSuspended()) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, "ALL", ResidenceFlagChangeEvent.FlagType.GROUP, FlagState.NEITHER, null); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) { + return false; + } + } + super.removeAllGroupFlags(group); + Residence.getInstance().msg(player, lm.Flag_RemovedGroup, group, this.residence.getName()); + return true; + } + return false; } @Override public boolean setFlag(String flag, FlagState state) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - return super.setFlag(flag, state); + if (!isEventCallsSuspended()) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + } + return super.setFlag(flag, state); } @Override public boolean setGroupFlag(String group, String flag, FlagState state) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - return super.setGroupFlag(group, flag, state); + if (!isEventCallsSuspended()) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + } + return super.setGroupFlag(group, flag, state); } @Override public boolean setPlayerFlag(String player, String flag, FlagState state) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, player); - Residence.getInstance().getServ().getPluginManager().callEvent(fc); - if (fc.isCancelled()) - return false; - - return super.setPlayerFlag(player, flag, state); + if (!isEventCallsSuspended()) { + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, null, flag, ResidenceFlagChangeEvent.FlagType.PLAYER, state, player); + Residence.getInstance().getServ().getPluginManager().callEvent(fc); + if (fc.isCancelled()) + return false; + } + return super.setPlayerFlag(player, flag, state); } public void applyDefaultFlags(Player player, boolean resadmin) { - if (this.hasResidencePermission(player, true) || resadmin) { - this.applyDefaultFlags(); - Residence.getInstance().msg(player, lm.Flag_Default); - } else - Residence.getInstance().msg(player, lm.General_NoPermission); + if (this.hasResidencePermission(player, true) || resadmin) { + this.applyDefaultFlags(); + Residence.getInstance().msg(player, lm.Flag_Default); + } else + Residence.getInstance().msg(player, lm.General_NoPermission); } public void applyDefaultFlags() { - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(this.getOwner()); - PermissionGroup group = rPlayer.getGroup(world); - Set> dflags = group.getDefaultResidenceFlags(); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(this.getOwner()); + PermissionGroup group = rPlayer.getGroup(world); + Set> dflags = group.getDefaultResidenceFlags(); // Set> dcflags = group.getDefaultCreatorFlags(); - Set>> dgflags = group.getDefaultGroupFlags(); - this.applyGlobalDefaults(); + Set>> dgflags = group.getDefaultGroupFlags(); + this.applyGlobalDefaults(); - for (Entry next : dflags) { - if (this.checkValidFlag(next.getKey(), true)) { - this.setFlag(next.getKey(), next.getValue() ? FlagState.TRUE : FlagState.FALSE); - } - } + for (Entry next : dflags) { + if (this.checkValidFlag(next.getKey(), true)) { + this.setFlag(next.getKey(), next.getValue() ? FlagState.TRUE : FlagState.FALSE); + } + } // for (Entry next : dcflags) { // if (this.checkValidFlag(next.getKey(), false)) { @@ -585,267 +617,275 @@ public void applyDefaultFlags() { // } // } // } - for (Entry> entry : dgflags) { - Map value = entry.getValue(); - for (Entry flag : value.entrySet()) { - this.setGroupFlag(entry.getKey(), flag.getKey(), flag.getValue() ? FlagState.TRUE : FlagState.FALSE); - } - } + for (Entry> entry : dgflags) { + Map value = entry.getValue(); + for (Entry flag : value.entrySet()) { + this.setGroupFlag(entry.getKey(), flag.getKey(), flag.getValue() ? FlagState.TRUE : FlagState.FALSE); + } + } } public void applyDefaultRentedFlags() { - if (!this.residence.isRented()) - return; - FlagPermissions dflags = Residence.getInstance().getConfigManager().getGlobalRentedDefaultFlags(); - Map dgflags = dflags.getFlags(); - if (this.residence.rentedland == null || this.residence.rentedland.player == null) - return; - this.removeAllPlayerFlags(this.residence.rentedland.player); - String player = this.residence.rentedland.player; - for (Entry entry : dgflags.entrySet()) { - this.setPlayerFlag(player, entry.getKey(), entry.getValue() ? FlagState.TRUE : FlagState.FALSE); - } + if (!this.residence.isRented()) + return; + FlagPermissions dflags = Residence.getInstance().getConfigManager().getGlobalRentedDefaultFlags(); + Map dgflags = dflags.getFlags(); + if (this.residence.rentedland == null || this.residence.rentedland.player == null) + return; + this.removeAllPlayerFlags(this.residence.rentedland.player); + String player = this.residence.rentedland.player; + for (Entry entry : dgflags.entrySet()) { + this.setPlayerFlag(player, entry.getKey(), entry.getValue() ? FlagState.TRUE : FlagState.FALSE); + } } public boolean setOwner(Player player, boolean resetFlags) { - ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, player); - Residence.getInstance().getServ().getPluginManager().callEvent(ownerchange); + ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, player); + Residence.getInstance().getServ().getPluginManager().callEvent(ownerchange); - // Dont change owner if event is canceled - if (ownerchange.isCancelled()) - return false; + // Dont change owner if event is canceled + if (ownerchange.isCancelled()) + return false; - Residence.getInstance().getPlayerManager().removeResFromPlayer(residence.getOwnerUUID(), residence); - Residence.getInstance().getPlayerManager().addResidence(player, residence); + Residence.getInstance().getPlayerManager().removeResFromPlayer(residence.getOwnerUUID(), residence); + Residence.getInstance().getPlayerManager().addResidence(player, residence); - ownerLastKnownName = player.getName(); - ownerUUID = player.getUniqueId(); + ownerLastKnownName = player.getName(); + ownerUUID = player.getUniqueId(); - if (resetFlags) - this.applyDefaultFlags(); + if (resetFlags) + this.applyDefaultFlags(); - return true; + return true; } public void setOwner(String newOwner, boolean resetFlags) { - ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); - Residence.getInstance().getServ().getPluginManager().callEvent(ownerchange); - - // Dont change owner if event is canceled - if (ownerchange.isCancelled()) - return; - - Residence.getInstance().getPlayerManager().removeResFromPlayer(residence.getOwnerUUID(), residence); - - ownerLastKnownName = newOwner; - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(newOwner); - if (rPlayer != null) { - this.ownerUUID = rPlayer.getUniqueId(); - ownerLastKnownName = rPlayer.getName(); - - } - - if (ownerLastKnownName.equalsIgnoreCase("Server Land") || ownerLastKnownName.equalsIgnoreCase(Residence.getInstance().getServerLandName())) { - ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());// the UUID for server owned land - } else { - UUID playerUUID = Residence.getInstance().getPlayerUUID(ownerLastKnownName); - if (playerUUID != null) - ownerUUID = playerUUID; - else - ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it - } - Residence.getInstance().getPlayerManager().addResidence(ownerLastKnownName, residence); - if (resetFlags) - this.applyDefaultFlags(); + ResidenceOwnerChangeEvent ownerchange = new ResidenceOwnerChangeEvent(residence, newOwner); + Residence.getInstance().getServ().getPluginManager().callEvent(ownerchange); + + // Dont change owner if event is canceled + if (ownerchange.isCancelled()) + return; + + Residence.getInstance().getPlayerManager().removeResFromPlayer(residence.getOwnerUUID(), residence); + + ownerLastKnownName = newOwner; + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(newOwner); + if (rPlayer != null) { + this.ownerUUID = rPlayer.getUniqueId(); + ownerLastKnownName = rPlayer.getName(); + + } + + if (ownerLastKnownName.equalsIgnoreCase("Server Land") || ownerLastKnownName.equalsIgnoreCase(Residence.getInstance().getServerLandName())) { + ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());// the UUID for server owned land + } else { + UUID playerUUID = Residence.getInstance().getPlayerUUID(ownerLastKnownName); + if (playerUUID != null) + ownerUUID = playerUUID; + else + ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//the fake UUID used when unable to find the real one, will be updated with players real UUID when its possible to find it + } + Residence.getInstance().getPlayerManager().addResidence(ownerLastKnownName, residence); + if (resetFlags) + this.applyDefaultFlags(); } public String getOwner() { - if (Residence.getInstance().getConfigManager().isOfflineMode()) { - return ownerLastKnownName == null ? "Unknown" : ownerLastKnownName; - } - if (ownerUUID != null && - ownerUUID.toString().equals(Residence.getInstance().getServerLandUUID())) //check for server land - return Residence.getInstance().getServerLandName(); - String name = Residence.getInstance().getPlayerName(ownerUUID);//try to find the owner's name - if (name == null) - return ownerLastKnownName == null ? "Unknown" : ownerLastKnownName;//return last known if we cannot find it - ownerLastKnownName = name;//update last known if we did find it - return name; + if (Residence.getInstance().getConfigManager().isOfflineMode()) { + return ownerLastKnownName == null ? "Unknown" : ownerLastKnownName; + } + if (ownerUUID != null && + ownerUUID.toString().equals(Residence.getInstance().getServerLandUUID())) //check for server land + return Residence.getInstance().getServerLandName(); + String name = Residence.getInstance().getPlayerName(ownerUUID);//try to find the owner's name + if (name == null) + return ownerLastKnownName == null ? "Unknown" : ownerLastKnownName;//return last known if we cannot find it + ownerLastKnownName = name;//update last known if we did find it + return name; } public UUID getOwnerUUID() { - return ownerUUID; + return ownerUUID; } public void setOwnerUUID(UUID ownerUUID) { - if (ownerUUID != null) - this.ownerUUID = ownerUUID; + if (ownerUUID != null) + this.ownerUUID = ownerUUID; } @Deprecated public String getWorld() { - return world; + return world; } public String getWorldName() { - return world; + return world; } @Override public Map save(String world) { - Map root = super.save(this.world); - if (!ownerUUID.toString().equals(Residence.getInstance().getTempUserUUID())) - root.put("OwnerUUID", ownerUUID.toString()); - root.put("OwnerLastKnownName", ownerLastKnownName); - return root; + Map root = super.save(this.world); + if (!ownerUUID.toString().equals(Residence.getInstance().getTempUserUUID())) + root.put("OwnerUUID", ownerUUID.toString()); + root.put("OwnerLastKnownName", ownerLastKnownName); + return root; } public static ResidencePermissions load(String worldName, ClaimedResidence res, Map root) throws Exception { - - ResidencePermissions newperms = new ResidencePermissions(res); - - if (root.containsKey("OwnerUUID") || root.containsKey("OwnerLastKnownName")) { - if (!root.containsKey("OwnerUUID")) - newperms.ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//get empty owner UUID - else - newperms.ownerUUID = UUID.fromString((String) root.get("OwnerUUID"));//get owner UUID - - newperms.ownerLastKnownName = (String) root.get("OwnerLastKnownName");//otherwise load last known name from file - - OfflinePlayer p = null; - if (newperms.ownerLastKnownName == null) - p = Residence.getInstance().getOfflinePlayer(newperms.ownerUUID); - - if (p != null) - newperms.ownerLastKnownName = p.getName(); - - if (newperms.ownerLastKnownName == null) - return newperms; - - if (newperms.ownerLastKnownName.equalsIgnoreCase("Server land") || newperms.ownerLastKnownName.equalsIgnoreCase(Residence.getInstance().getServerLandName())) { - newperms.ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());//UUID for server land - newperms.ownerLastKnownName = Residence.getInstance().getServerLandName(); - } else if (newperms.ownerUUID.toString().equals(Residence.getInstance().getTempUserUUID())) //check for fake UUID - { - UUID realUUID = Residence.getInstance().getPlayerUUID(newperms.ownerLastKnownName);//try to find the real UUID of the player if possible now - if (realUUID != null) - newperms.ownerUUID = realUUID; - } - } else if (root.containsKey("Owner")) //convert old owner name save format into uuid format - { - String owner = (String) root.get("Owner"); - newperms.ownerLastKnownName = owner; - newperms.ownerUUID = Residence.getInstance().getPlayerUUID(owner); - if (newperms.ownerUUID == null) - newperms.ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//set fake UUID until we can find real one for last known player - } else { - newperms.ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());//cant determine owner name or UUID... setting zero UUID which is server land - newperms.ownerLastKnownName = Residence.getInstance().getServerLandName(); - } - newperms.world = worldName; - - FlagPermissions.load(root, newperms); - - if (newperms.getOwner() == null || newperms.world == null || newperms.playerFlags == null || newperms.groupFlags == null || newperms.cuboidFlags == null) - throw new Exception("Invalid Residence Permissions..."); - - return newperms; + + ResidencePermissions newperms = new ResidencePermissions(res); + + if (root.containsKey("OwnerUUID") || root.containsKey("OwnerLastKnownName")) { + if (!root.containsKey("OwnerUUID")) + newperms.ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//get empty owner UUID + else + newperms.ownerUUID = UUID.fromString((String) root.get("OwnerUUID"));//get owner UUID + + newperms.ownerLastKnownName = (String) root.get("OwnerLastKnownName");//otherwise load last known name from file + + OfflinePlayer p = null; + if (newperms.ownerLastKnownName == null) + p = Residence.getInstance().getOfflinePlayer(newperms.ownerUUID); + + if (p != null) + newperms.ownerLastKnownName = p.getName(); + + if (newperms.ownerLastKnownName == null) + return newperms; + + if (newperms.ownerLastKnownName.equalsIgnoreCase("Server land") || newperms.ownerLastKnownName.equalsIgnoreCase(Residence.getInstance().getServerLandName())) { + newperms.ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());//UUID for server land + newperms.ownerLastKnownName = Residence.getInstance().getServerLandName(); + } else if (newperms.ownerUUID.toString().equals(Residence.getInstance().getTempUserUUID())) //check for fake UUID + { + UUID realUUID = Residence.getInstance().getPlayerUUID(newperms.ownerLastKnownName);//try to find the real UUID of the player if possible now + if (realUUID != null) + newperms.ownerUUID = realUUID; + } + } else if (root.containsKey("Owner")) //convert old owner name save format into uuid format + { + String owner = (String) root.get("Owner"); + newperms.ownerLastKnownName = owner; + newperms.ownerUUID = Residence.getInstance().getPlayerUUID(owner); + if (newperms.ownerUUID == null) + newperms.ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID());//set fake UUID until we can find real one for last known player + } else { + newperms.ownerUUID = UUID.fromString(Residence.getInstance().getServerLandUUID());//cant determine owner name or UUID... setting zero UUID which is server land + newperms.ownerLastKnownName = Residence.getInstance().getServerLandName(); + } + newperms.world = worldName; + + FlagPermissions.load(root, newperms); + + if (newperms.getOwner() == null || newperms.world == null || newperms.playerFlags == null || newperms.groupFlags == null || newperms.cuboidFlags == null) + throw new Exception("Invalid Residence Permissions..."); + + return newperms; } public void applyGlobalDefaults() { - this.clearFlags(); - FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); - FlagPermissions gCD = Residence.getInstance().getConfigManager().getGlobalCreatorDefaultFlags(); - Map gGD = Residence.getInstance().getConfigManager().getGlobalGroupDefaultFlags(); - for (Entry entry : gRD.cuboidFlags.entrySet()) { - this.setFlag(entry.getKey(), entry.getValue() ? FlagState.TRUE : FlagState.FALSE); - } - for (Entry entry : gCD.cuboidFlags.entrySet()) { - if (entry.getValue()) - this.setPlayerFlag(this.getOwner(), entry.getKey(), FlagState.TRUE); - else - this.setPlayerFlag(this.getOwner(), entry.getKey(), FlagState.FALSE); - } - for (Entry entry : gGD.entrySet()) { - for (Entry flag : entry.getValue().cuboidFlags.entrySet()) { - if (flag.getValue()) - this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); - else - this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); - } - } + this.clearFlags(); + FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); + FlagPermissions gCD = Residence.getInstance().getConfigManager().getGlobalCreatorDefaultFlags(); + Map gGD = Residence.getInstance().getConfigManager().getGlobalGroupDefaultFlags(); + for (Entry entry : gRD.cuboidFlags.entrySet()) { + this.setFlag(entry.getKey(), entry.getValue() ? FlagState.TRUE : FlagState.FALSE); + } + for (Entry entry : gCD.cuboidFlags.entrySet()) { + if (entry.getValue()) + this.setPlayerFlag(this.getOwner(), entry.getKey(), FlagState.TRUE); + else + this.setPlayerFlag(this.getOwner(), entry.getKey(), FlagState.FALSE); + } + for (Entry entry : gGD.entrySet()) { + for (Entry flag : entry.getValue().cuboidFlags.entrySet()) { + if (flag.getValue()) + this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.TRUE); + else + this.setGroupFlag(entry.getKey(), flag.getKey(), FlagState.FALSE); + } + } } @Deprecated public boolean setFlagGroup(CommandSender sender, String flaggroup, String state, boolean resadmin) { - return setFlagGroup(sender, flaggroup, FlagPermissions.stringToFlagState(state), resadmin); + return setFlagGroup(sender, flaggroup, FlagPermissions.stringToFlagState(state), resadmin); } public boolean setFlagGroup(CommandSender sender, String flaggroup, FlagState state, boolean resadmin) { - if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { - Set flags = FlagPermissions.validFlagGroups.get(flaggroup); - boolean changed = false; + if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { + Set flags = FlagPermissions.validFlagGroups.get(flaggroup); + boolean changed = false; - for (String flag : flags) { - if (this.setFlag(sender, flag, state, resadmin)) { - changed = true; - } - } - return changed; - } - return false; + for (String flag : flags) { + if (this.setFlag(sender, flag, state, resadmin)) { + changed = true; + } + } + return changed; + } + return false; } public boolean setFlagGroupOnGroup(Player player, String flaggroup, String group, String state, boolean resadmin) { - if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { - Set flags = FlagPermissions.validFlagGroups.get(flaggroup); - boolean changed = false; - for (String flag : flags) { - if (this.setGroupFlag(player, group, flag, state, resadmin)) { - changed = true; - } - } - return changed; - } - return false; + if (FlagPermissions.validFlagGroups.containsKey(flaggroup)) { + Set flags = FlagPermissions.validFlagGroups.get(flaggroup); + boolean changed = false; + for (String flag : flags) { + if (this.setGroupFlag(player, group, flag, state, resadmin)) { + changed = true; + } + } + return changed; + } + return false; } public boolean setFlagGroupOnPlayer(CommandSender sender, String target, String flaggroup, String state, boolean resadmin) { - if (!FlagPermissions.validFlagGroups.containsKey(flaggroup)) - return false; - - Set flags = FlagPermissions.validFlagGroups.get(flaggroup); - boolean changed = false; - boolean changedAll = true; - StringBuilder flagString = new StringBuilder(); - - for (String flag : flags) { - if (this.setPlayerFlag(sender, target, flag, state, resadmin, false)) { - changed = true; - if (!flagString.toString().isEmpty()) - flagString.append(lm.info_listSplitter.getMessage()); - flagString.append(flag); - } else - changedAll = false; - } - if (changedAll) { - ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(target); - if (rplayer != null) { - rplayer.addTrustedResidence(this.residence); - } - } - if (!flagString.toString().isEmpty()) - Residence.getInstance().msg(sender, lm.Flag_Set, flagString, target, state); - return changed; + if (!FlagPermissions.validFlagGroups.containsKey(flaggroup)) + return false; + + Set flags = FlagPermissions.validFlagGroups.get(flaggroup); + boolean changed = false; + boolean changedAll = true; + StringBuilder flagString = new StringBuilder(); + + for (String flag : flags) { + if (this.setPlayerFlag(sender, target, flag, state, resadmin, false)) { + changed = true; + if (!flagString.toString().isEmpty()) + flagString.append(lm.info_listSplitter.getMessage()); + flagString.append(flag); + } else + changedAll = false; + } + if (changedAll) { + ResidencePlayer rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(target); + if (rplayer != null) { + rplayer.addTrustedResidence(this.residence); + } + } + if (!flagString.toString().isEmpty()) + Residence.getInstance().msg(sender, lm.Flag_Set, flagString, target, state); + return changed; } public String getOwnerLastKnownName() { - return ownerLastKnownName; + return ownerLastKnownName; } public void setOwnerLastKnownName(String ownerLastKnownName) { - this.ownerLastKnownName = ownerLastKnownName; + this.ownerLastKnownName = ownerLastKnownName; + } + + public static boolean isEventCallsSuspended() { + return suspendEventCalls; + } + + public static void setEventCallsSuspended(boolean suspendEventCalls) { + ResidencePermissions.suspendEventCalls = suspendEventCalls; } } From 88a74a106f481383f3647467d5ce0b879b6ffc57 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 9 May 2023 16:59:10 +0300 Subject: [PATCH 1019/1142] Fix for bed flag --- .../residence/listeners/ResidencePlayerListener.java | 12 ++++++++---- .../bukkit/residence/protection/FlagPermissions.java | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 70d8620e8..519fc4b94 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1014,6 +1014,9 @@ public static boolean isCanUseEntity_BothClick(Material mat, Block block) { if (m.isTrapDoor()) return true; + if (m.isBed()) + return true; + switch (m) { case LEVER: case PISTON: @@ -1343,6 +1346,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { CMIMaterial heldItem = CMIMaterial.get(iih); Material mat = block.getType(); + if (!(event.getAction() == Action.PHYSICAL || (isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block)) && !heldItem.equals(plugin.getConfigManager().getSelectionTool()) && !heldItem.equals(plugin.getConfigManager().getInfoTool()) && (!heldItem.isDye() && !heldItem.equals(CMIMaterial.GLOW_INK_SAC)) && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { @@ -2716,14 +2720,14 @@ public void badEffects() { for (Player player : Bukkit.getServer().getOnlinePlayers()) { ClaimedResidence res = getCurrentResidence(player.getUniqueId()); if (res == null) - continue; + continue; if (!res.getPermissions().has(Flags.safezone, FlagCombo.OnlyTrue)) - continue; + continue; if (player.getActivePotionEffects().isEmpty()) continue; - for (PotionEffect one : player.getActivePotionEffects()) { + for (PotionEffect one : player.getActivePotionEffects()) { if (plugin.getConfigManager().getNegativePotionEffects().contains(one.getType().getName().toLowerCase())) - player.removePotionEffect(one.getType()); + player.removePotionEffect(one.getType()); } } } catch (Exception ex) { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index e95676682..d4188d6c3 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -230,8 +230,9 @@ public static void initValidFlags() { if (one.isButton()) matUseFlagList.put(one.getMaterial(), Flags.button); - if (one.isBed()) + if (one.isBed()) { matUseFlagList.put(one.getMaterial(), Flags.bed); + } if (one.isPotted()) matUseFlagList.put(one.getMaterial(), Flags.flowerpot); From 10d52c9552195dfed525c67251fd3d0b67a4c157 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 May 2023 13:13:09 +0300 Subject: [PATCH 1020/1142] Lowering command block check priority to grab original command --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 519fc4b94..ff3eb53f6 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -631,7 +631,7 @@ public void onFlagChangeFly(ResidenceFlagChangeEvent event) { } } - @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onCommand(PlayerCommandPreprocessEvent event) { // Disabling listener if flag disabled globally if (!Flags.command.isGlobalyEnabled()) From 2a6ccb2823cbb944d126480587ce2b53f0b54e0e Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 May 2023 13:31:52 +0300 Subject: [PATCH 1021/1142] Better check for outside free location on kick --- .../listeners/ResidencePlayerListener.java | 6 +----- .../residence/protection/ClaimedResidence.java | 13 +++++++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ff3eb53f6..3fb812d6c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2258,13 +2258,9 @@ public void onPlayerMoveInVehicle(VehicleMoveEvent event) { } } - private static boolean teleport(Player player, Location loc) { + private boolean teleport(Player player, Location loc) { if (player == null || !player.isOnline() || loc == null) return false; - -// PlayerTeleportEvent ev = new PlayerTeleportEvent(player, player.getLocation(), loc); -// Bukkit.getServer().getPluginManager().callEvent(ev); - return player.teleport(loc); } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index ba83bce22..f34ea5859 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1093,7 +1093,7 @@ public Location getMiddleFreeLoc(Location insideLoc, Player player) { public Location getOutsideFreeLoc(Location insideLoc, Player player) { CuboidArea area = this.getAreaByLoc(insideLoc); if (area == null) { - return insideLoc; + return player.getWorld().getSpawnLocation(); } List randomLocList = new ArrayList(); @@ -1155,7 +1155,8 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { continue; ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(loc); - if (res != null && player != null && !res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) && !admin) + if (res != null && player != null && (!res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) || !res.getPermissions().playerHas(player, Flags.move, FlagCombo.TrueOrNone)) + && !admin) continue; found = true; @@ -1169,8 +1170,12 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { break; } - if (!found && Residence.getInstance().getConfigManager().getKickLocation() != null) - return Residence.getInstance().getConfigManager().getKickLocation(); + if (!found) { + if (Residence.getInstance().getConfigManager().getKickLocation() != null) + return Residence.getInstance().getConfigManager().getKickLocation(); + // Fail safe for kick out location + return player.getWorld().getSpawnLocation(); + } if (player != null) { loc.setPitch(player.getLocation().getPitch()); loc.setYaw(player.getLocation().getYaw()); From 4f986cd3a662fa592249bd865ed0bfc1f5db02d3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 May 2023 14:12:50 +0300 Subject: [PATCH 1022/1142] dryup flag extra check --- .../bukkit/residence/allNms/v1_13Events.java | 110 +++++++++--------- .../listeners/ResidenceBlockListener.java | 7 +- .../residence/protection/PlayerManager.java | 3 +- 3 files changed, 65 insertions(+), 55 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java index abdab727a..4f0c3be1d 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java @@ -16,75 +16,81 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; public class v1_13Events implements Listener { Residence plugin; public v1_13Events(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLandDryFade(BlockFadeEvent event) { - if (Version.isCurrentLower(Version.v1_13_R1)) - return; - // Disabling listener if flag disabled globally - if (!Flags.dryup.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; + if (Version.isCurrentLower(Version.v1_13_R1)) + return; + // Disabling listener if flag disabled globally + if (!Flags.dryup.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + CMIMaterial mat = CMIMaterial.get(event.getBlock()); + if (!mat.equals(CMIMaterial.FARMLAND)) + return; - CMIMaterial mat = CMIMaterial.get(event.getBlock()); - if (!mat.equals(CMIMaterial.FARMLAND)) - return; - - FlagPermissions perms = plugin.getPermsByLoc(event.getNewState().getLocation()); - if (perms.has(Flags.dryup, FlagCombo.OnlyFalse)) { - Block b = event.getBlock(); - try { - BlockData data = b.getBlockData(); - Farmland farm = (Farmland) data; - farm.setMoisture(7); - b.setBlockData(farm); - } catch (NoClassDefFoundError e) { - } - event.setCancelled(true); - return; - } + FlagPermissions perms = plugin.getPermsByLoc(event.getNewState().getLocation()); + if (perms.has(Flags.dryup, FlagCombo.OnlyFalse)) { + Block b = event.getBlock(); + try { + BlockData data = b.getBlockData(); + Farmland farm = (Farmland) data; + if (farm.getMoisture() < 7) { + farm.setMoisture(7); + b.setBlockData(farm); + } + } catch (NoClassDefFoundError e) { + } + event.setCancelled(true); + return; + } } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onLandDryPhysics(BlockPhysicsEvent event) { - if (Version.isCurrentLower(Version.v1_13_R1)) - return; - // Disabling listener if flag disabled globally - if (!Flags.dryup.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - try { + if (Version.isCurrentLower(Version.v1_13_R1)) + return; + // Disabling listener if flag disabled globally + if (!Flags.dryup.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + try { + + if (!event.getChangedType().toString().equalsIgnoreCase("FARMLAND")) + return; - if (!event.getChangedType().toString().equalsIgnoreCase("FARMLAND")) - return; + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (perms.has(Flags.dryup, FlagCombo.OnlyFalse)) { + Block b = event.getBlock(); + try { + BlockData data = b.getBlockData(); + Farmland farm = (Farmland) data; - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (perms.has(Flags.dryup, FlagCombo.OnlyFalse)) { - Block b = event.getBlock(); - try { - BlockData data = b.getBlockData(); - Farmland farm = (Farmland) data; - farm.setMoisture(7); - b.setBlockData(farm); - } catch (NoClassDefFoundError e) { - } - event.setCancelled(true); - return; - } - } catch (Exception | Error e) { + CMIDebug.d(farm.getMoisture(), b.getLocation().toVector().toString()); + if (farm.getMoisture() < 7) { + farm.setMoisture(7); + b.setBlockData(farm); + } + } catch (NoClassDefFoundError e) { + } + event.setCancelled(true); + return; + } + } catch (Exception | Error e) { - } + } } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 4309bea55..a87fa0f40 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -68,6 +68,7 @@ import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { @@ -933,7 +934,9 @@ public void onLandDryFade(BlockFadeEvent event) { if (!perms.has(Flags.dryup, true)) { Block b = event.getBlock(); try { - b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); + byte value = (byte) b.getClass().getMethod("getData").invoke(b); + if (value < (byte) 7) + b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { e1.printStackTrace(); } @@ -966,7 +969,7 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { Block b = event.getBlock(); try { byte value = (byte) b.getClass().getMethod("getData").invoke(b); - if (value != (byte) 7) + if (value < (byte) 7) b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); } catch (Throwable e1) { e1.printStackTrace(); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index ae9c0635d..02634112e 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -191,8 +191,9 @@ public TreeMap getResidencesMap(String player, boolean for (ClaimedResidence one : resPlayer.getResList()) { boolean hidden = one.getPermissions().has(Flags.hidden, false); - if (!showhidden && hidden) + if (!showhidden && hidden) { continue; + } if (onlyHidden && !hidden) continue; if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) From ed3046ea0a4a2ae1112e81ae9aa3e8b7aef48a05 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 May 2023 14:23:56 +0300 Subject: [PATCH 1023/1142] Lower instances when to wet farmland --- src/com/bekvon/bukkit/residence/allNms/v1_13Events.java | 7 ++----- .../bukkit/residence/listeners/ResidenceBlockListener.java | 5 ++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java index 4f0c3be1d..656a4e074 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_13Events.java @@ -16,7 +16,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; public class v1_13Events implements Listener { @@ -46,7 +45,7 @@ public void onLandDryFade(BlockFadeEvent event) { try { BlockData data = b.getBlockData(); Farmland farm = (Farmland) data; - if (farm.getMoisture() < 7) { + if (farm.getMoisture() < 2) { farm.setMoisture(7); b.setBlockData(farm); } @@ -78,9 +77,7 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { try { BlockData data = b.getBlockData(); Farmland farm = (Farmland) data; - - CMIDebug.d(farm.getMoisture(), b.getLocation().toVector().toString()); - if (farm.getMoisture() < 7) { + if (farm.getMoisture() < 2) { farm.setMoisture(7); b.setBlockData(farm); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index a87fa0f40..e5186dd4f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -68,7 +68,6 @@ import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { @@ -935,7 +934,7 @@ public void onLandDryFade(BlockFadeEvent event) { Block b = event.getBlock(); try { byte value = (byte) b.getClass().getMethod("getData").invoke(b); - if (value < (byte) 7) + if (value < (byte) 2) b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e1) { e1.printStackTrace(); @@ -969,7 +968,7 @@ public void onLandDryPhysics(BlockPhysicsEvent event) { Block b = event.getBlock(); try { byte value = (byte) b.getClass().getMethod("getData").invoke(b); - if (value < (byte) 7) + if (value < (byte) 2) b.getClass().getMethod("setData", byte.class).invoke(b, (byte) 7); } catch (Throwable e1) { e1.printStackTrace(); From 93515a5c472392ba8e3f04c3ca2f4139b18ef64a Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 10 May 2023 14:56:11 +0300 Subject: [PATCH 1024/1142] Unifying file encoding --- src/com/bekvon/bukkit/residence/ConfigManager.java | 2 +- src/com/bekvon/bukkit/residence/Residence.java | 13 +++++-------- src/com/bekvon/bukkit/residence/commands/list.java | 2 +- .../bukkit/residence/persistance/YMLSaveHelper.java | 3 ++- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index a6e1a7ec1..c3e3c3939 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -660,7 +660,7 @@ public void UpdateConfigFile() { c.addComment("Global.Optimizations.DefaultWorld", "Name of your main residence world. Usually normal starting world 'World'. Capitalization essential"); DefaultWorld = c.get("Global.Optimizations.DefaultWorld", defaultWorldName); - c.addComment("Global.Optimizations.DisabledWorlds.List", "List Of Worlds where this plugin is disabled"); + c.addComment("Global.Optimizations.DisabledWorlds.List", "List Of Worlds where this plugin is disabled", "Make sure that world names capitalization is correct"); DisabledWorldsList = c.get("Global.Optimizations.DisabledWorlds.List", new ArrayList()); c.addComment("Global.Optimizations.DisabledWorlds.DisableListeners", "Disables all listeners in included worlds"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index f5fcccb0d..2d59c8ec7 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -12,6 +12,7 @@ import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.lang.reflect.Method; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -869,9 +870,7 @@ public void parseHelpEntries() { BufferedReader in = null; try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); + in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), StandardCharsets.UTF_8)); } catch (FileNotFoundException e1) { e1.printStackTrace(); } @@ -893,9 +892,7 @@ public void parseHelpEntries() { BufferedReader in = null; try { - in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), "UTF8")); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); + in = new BufferedReader(new InputStreamReader(new FileInputStream(langFile), StandardCharsets.UTF_8)); } catch (FileNotFoundException e1) { e1.printStackTrace(); } @@ -1784,7 +1781,7 @@ private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean JarEntry entry = jar.getJarEntry(jarPath); if (entry != null && !entry.isDirectory()) { InputStream in = jar.getInputStream(entry); - InputStreamReader isr = new InputStreamReader(in, "UTF8"); + InputStreamReader isr = new InputStreamReader(in, StandardCharsets.UTF_8); if (writeName.isFile()) { if (backupOld) { if (fileBackup.isFile()) { @@ -1796,7 +1793,7 @@ private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean } } FileOutputStream out = new FileOutputStream(writeName); - OutputStreamWriter osw = new OutputStreamWriter(out, "UTF8"); + OutputStreamWriter osw = new OutputStreamWriter(out, StandardCharsets.UTF_8); try { char[] tempbytes = new char[512]; int readbytes = isr.read(tempbytes, 0, 512); diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index b24ea4d18..ac31cc34d 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -22,7 +22,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo int page = 1; World world = null; String target = null; - + c: for (int i = 0; i < args.length; i++) { try { page = Integer.parseInt(args[i]); diff --git a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java index 114052a82..227b08ad5 100644 --- a/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java +++ b/src/com/bekvon/bukkit/residence/persistance/YMLSaveHelper.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; +import java.nio.charset.StandardCharsets; import java.util.LinkedHashMap; import java.util.Map; @@ -59,7 +60,7 @@ public void save() throws IOException { if (f.isFile()) f.delete(); FileOutputStream fout = new FileOutputStream(f); - OutputStreamWriter osw = new OutputStreamWriter(fout, "UTF8"); + OutputStreamWriter osw = new OutputStreamWriter(fout, StandardCharsets.UTF_8); yml.dump(root, osw); osw.close(); } From e89686a37dbe322e4ed31d41d92f08816f52007d Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 25 May 2023 12:24:44 +0300 Subject: [PATCH 1025/1142] More fail safes while saving residences in case information is not properly set we should ignore none essential parts --- .../bukkit/residence/ConfigManager.java | 5 + .../bekvon/bukkit/residence/Residence.java | 31 ----- .../protection/ClaimedResidence.java | 129 ++++++++++++------ src/plugin.yml | 2 +- 4 files changed, 90 insertions(+), 77 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index c3e3c3939..4dcedc35d 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -43,6 +43,7 @@ import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Locale.YmlMaker; import net.Zrips.CMILib.Logs.CMIDebug; +import net.Zrips.CMILib.Messages.CMIMessages; import net.Zrips.CMILib.Version.Version; public class ConfigManager { @@ -1188,6 +1189,10 @@ public void UpdateConfigFile() { } catch (Exception ex) { chatColor = CMIChatColor.DARK_PURPLE; } + if (chatColor == null) { + CMIMessages.consoleMessage("&cCan't find color by name for ResidenceChatColor"); + chatColor = CMIChatColor.DARK_PURPLE; + } c.addComment("Global.ResidenceChatListening", "When enabled players with access to chat flag will be able to listen to residence chat without joining it"); chatListening = c.get("Global.ResidenceChatListening", false); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 2d59c8ec7..98d46a15f 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1261,9 +1261,6 @@ public boolean isResAdminOn(String player) { return resadminToggle.contains(player); } - private final String flagsFileSuffix = "_Flags"; - private final String messagesFileSuffix = "_Messages"; - private static void saveFile(File worldFolder, String fileName, String key, Object value) throws IOException { File ymlFlagsSaveLoc = new File(worldFolder, "res_" + fileName + ".yml"); File tmpFlagsFile = new File(worldFolder, "tmp_res_" + fileName + ".yml"); @@ -1450,34 +1447,6 @@ private void loadMessages(String worldName, YMLSaveHelper yml) { private void loadMessagesAndFlags(String worldName, YMLSaveHelper yml, File worldFolder) { loadMessages(worldName, yml); loadFlags(worldName, yml); - - if (!yml.getRoot().containsKey("Flags")) { - File flagsFile = new File(worldFolder, saveFilePrefix + worldName + flagsFileSuffix + ".yml"); - if (flagsFile.isFile()) { - try { - yml = new YMLSaveHelper(flagsFile); - yml.load(); - if (yml.getRoot() != null) - loadFlags(worldName, yml); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - if (!yml.getRoot().containsKey("Messages")) { - File messagesFile = new File(worldFolder, saveFilePrefix + worldName + messagesFileSuffix + ".yml"); - if (messagesFile.isFile()) { - try { - yml = new YMLSaveHelper(messagesFile); - yml.load(); - if (yml.getRoot() != null) - loadMessages(worldName, yml); - } catch (IOException e) { - e.printStackTrace(); - } - } - } } @SuppressWarnings({ "rawtypes", "unchecked" }) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index f34ea5859..33fa67b55 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -74,7 +74,7 @@ public class ClaimedResidence { protected Map subzones; protected ResidencePermissions perms; protected ResidenceBank bank; - protected Double BlockSellPrice = 0.0; + protected double BlockSellPrice = 0.0; protected Vector tpLoc; protected Vector PitchYaw; protected World world; @@ -1500,6 +1500,12 @@ private void performInstantTp(final Location targloc, final Player targetPlayer, Residence.getInstance().getServ().getPluginManager().callEvent(tpevent); if (!tpevent.isCancelled()) { targetPlayer.closeInventory(); + + try { + targloc.getChunk().load(); + } catch (Throwable e) { + } + boolean teleported = targetPlayer.teleport(targloc); if (teleported) { @@ -1583,25 +1589,30 @@ public Map save() { // root.put("Town", this.getTown().getTownName()); // } - if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { - if (enterMessage != null && leaveMessage != null) { - MinimizeMessages min = Residence.getInstance().getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, - leaveMessage); - if (min == null) { - if (enterMessage != null) - root.put("EnterMessage", enterMessage); - if (leaveMessage != null) - root.put("LeaveMessage", leaveMessage); - } else { - if (min.getId() > 1) - root.put("Messages", min.getId()); + try { + if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { + if (enterMessage != null && leaveMessage != null) { + MinimizeMessages min = Residence.getInstance().getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, + leaveMessage); + if (min == null) { + if (enterMessage != null) + root.put("EnterMessage", enterMessage); + if (leaveMessage != null) + root.put("LeaveMessage", leaveMessage); + } else { + if (min.getId() > 1) + root.put("Messages", min.getId()); + } } + } else { + if (enterMessage != null) + root.put("EnterMessage", enterMessage); + if (leaveMessage != null) + root.put("LeaveMessage", leaveMessage); } - } else { - if (enterMessage != null) - root.put("EnterMessage", enterMessage); - if (leaveMessage != null) - root.put("LeaveMessage", leaveMessage); + } catch (Throwable e) { + Bukkit.getConsoleSender().sendMessage(Residence.getInstance().getPrefix() + ChatColor.RED + " Failed to save residence (" + getName() + ")!"); + e.printStackTrace(); } // if (enterMessage != null) @@ -1613,26 +1624,49 @@ public Map save() { // root.put("LeaveMessage", id); // } - if (ShopDesc != null) - root.put("ShopDescription", ShopDesc); + try { + if (ShopDesc != null) + root.put("ShopDescription", ShopDesc); + } catch (Throwable e) { + e.printStackTrace(); + } + if (bank.getStoredMoneyD() != 0) root.put("StoredMoney", bank.getStoredMoneyD()); if (BlockSellPrice != 0D) root.put("BlockSellPrice", BlockSellPrice); - if (!ChatPrefix.equals("")) - root.put("ChatPrefix", ChatPrefix); - if (!ChannelColor.getName().equalsIgnoreCase(Residence.getInstance().getConfigManager().getChatColor().getName()) - && !ChannelColor.getName().equalsIgnoreCase("WHITE")) { - root.put("ChannelColor", ChannelColor.getName()); + try { + if (!ChatPrefix.equals("")) + root.put("ChatPrefix", ChatPrefix); + } catch (Throwable e) { + e.printStackTrace(); } - Map map = blacklist.save(); - if (!map.isEmpty()) - root.put("BlackList", map); - map = ignorelist.save(); - if (!map.isEmpty()) - root.put("IgnoreList", map); + try { + if (!ChannelColor.getName().equalsIgnoreCase(Residence.getInstance().getConfigManager().getChatColor().getName()) + && !ChannelColor.getName().equalsIgnoreCase("WHITE")) { + root.put("ChannelColor", ChannelColor.getName()); + } + } catch (Throwable e) { + e.printStackTrace(); + } + + try { + Map map = blacklist.save(); + if (!map.isEmpty()) + root.put("BlackList", map); + } catch (Throwable e) { + e.printStackTrace(); + } + + try { + Map map = ignorelist.save(); + if (!map.isEmpty()) + root.put("IgnoreList", map); + } catch (Throwable e) { + e.printStackTrace(); + } if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { for (Entry entry : areas.entrySet()) { @@ -1658,22 +1692,27 @@ public Map save() { if (!this.cmdWhiteList.isEmpty()) root.put("cmdWhiteList", this.cmdWhiteList); - if (tpLoc != null) { - if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { - root.put("TPLoc", - convertDouble(tpLoc.getX()) + ":" + convertDouble(tpLoc.getY()) + ":" - + convertDouble(tpLoc.getZ()) + ":" + convertDouble(PitchYaw == null ? 0 : PitchYaw.getX()) + ":" - + convertDouble(PitchYaw == null ? 0 : PitchYaw.getY())); - } else { - Map tpmap = new HashMap(); - tpmap.put("X", convertDouble(this.tpLoc.getX())); - tpmap.put("Y", convertDouble(this.tpLoc.getY())); - tpmap.put("Z", convertDouble(this.tpLoc.getZ())); - tpmap.put("Pitch", convertDouble(PitchYaw == null ? 0 : this.PitchYaw.getX())); - tpmap.put("Yaw", convertDouble(PitchYaw == null ? 0 : this.PitchYaw.getY())); - root.put("TPLoc", tpmap); + try { + if (tpLoc != null) { + if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { + root.put("TPLoc", + convertDouble(tpLoc.getX()) + ":" + convertDouble(tpLoc.getY()) + ":" + + convertDouble(tpLoc.getZ()) + ":" + convertDouble(PitchYaw == null ? 0 : PitchYaw.getX()) + ":" + + convertDouble(PitchYaw == null ? 0 : PitchYaw.getY())); + } else { + Map tpmap = new HashMap(); + tpmap.put("X", convertDouble(this.tpLoc.getX())); + tpmap.put("Y", convertDouble(this.tpLoc.getY())); + tpmap.put("Z", convertDouble(this.tpLoc.getZ())); + tpmap.put("Pitch", convertDouble(PitchYaw == null ? 0 : this.PitchYaw.getX())); + tpmap.put("Yaw", convertDouble(PitchYaw == null ? 0 : this.PitchYaw.getY())); + root.put("TPLoc", tpmap); + } } + } catch (Throwable e) { + e.printStackTrace(); } + return root; } diff --git a/src/plugin.yml b/src/plugin.yml index e016265f7..cb28cd129 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.1.1 +version: 5.1.1.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 8610a45c2f4ec8beeaee4b378d5f84c99d525717 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 25 May 2023 12:38:14 +0300 Subject: [PATCH 1026/1142] TP overflow fix --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 3fb812d6c..56417008d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2516,14 +2516,16 @@ public void run() { } if (!currentRes.containsKey(uuid) || ResOld != res) { - if (cantMove) { Location lastLoc = lastOutsideLoc.get(uuid); player.closeInventory(); + if (!move) + return false; + if (lastLoc != null && CMIMaterial.isAir(lastLoc.getBlock().getType())) { Long last = lastUpdate.get(player.getUniqueId()); // Fail safe in case we are triggering teleportation event check with this teleportation, we should teleport player outside residence instead of its repeating teleportation to avoid stack overflow - if (last != null && System.currentTimeMillis() - last > 45L) { + if (last != null && System.currentTimeMillis() - last < 45L) { teleport(player, res.getOutsideFreeLoc(loc, player)); } else { this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); From 11789366886172ffe0dfc8badcd056f3806cf7be Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 25 May 2023 13:15:32 +0300 Subject: [PATCH 1027/1142] Enter Leave Message fix --- .../protection/ClaimedResidence.java | 26 +++++++++++++------ .../residence/protection/LeaseManager.java | 12 ++++----- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 33fa67b55..e582a5e09 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -88,7 +88,7 @@ public class ClaimedResidence { protected boolean mainRes = false; protected long createTime = 0L; - private Long leaseExpireTime = null; + private long leaseExpireTime = 0; protected List cmdWhiteList = new ArrayList(); protected List cmdBlackList = new ArrayList(); @@ -98,7 +98,7 @@ public class ClaimedResidence { protected RentableLand rentableland = null; protected RentedLand rentedland = null; - protected Integer sellPrice = -1; + protected int sellPrice = -1; private ResidenceRaid raid; @@ -1630,7 +1630,7 @@ public Map save() { } catch (Throwable e) { e.printStackTrace(); } - + if (bank.getStoredMoneyD() != 0) root.put("StoredMoney", bank.getStoredMoneyD()); if (BlockSellPrice != 0D) @@ -1848,20 +1848,30 @@ public static ClaimedResidence load(String worldName, Map root, } } - if (root.containsKey("EnterMessage") && root.get("EnterMessage") instanceof String) + CMIDebug.c(root.containsKey("EnterMessage"), root.containsKey("LeaveMessage"), root.get("EnterMessage") instanceof String); + + if (root.containsKey("EnterMessage") && root.get("EnterMessage") instanceof String) { res.enterMessage = (String) root.get("EnterMessage"); - if (root.containsKey("LeaveMessage") && root.get("LeaveMessage") instanceof String) + } + if (root.containsKey("LeaveMessage") && root.get("LeaveMessage") instanceof String) { res.leaveMessage = (String) root.get("LeaveMessage"); + } if (root.containsKey("Messages") && root.get("Messages") instanceof Integer) { res.enterMessage = Residence.getInstance().getResidenceManager().getChacheMessageEnter(worldName, (Integer) root.get("Messages")); res.leaveMessage = Residence.getInstance().getResidenceManager().getChacheMessageLeave(worldName, (Integer) root.get("Messages")); } else { + + // Defaulting to first one if not present - res.enterMessage = Residence.getInstance().getResidenceManager().getChacheMessageEnter(worldName, 1); - res.leaveMessage = Residence.getInstance().getResidenceManager().getChacheMessageLeave(worldName, 1); + if (res.enterMessage == null) + res.enterMessage = Residence.getInstance().getResidenceManager().getChacheMessageEnter(worldName, 1); + if (res.leaveMessage == null) + res.leaveMessage = Residence.getInstance().getResidenceManager().getChacheMessageLeave(worldName, 1); } + CMIDebug.c(res.enterMessage, res.leaveMessage); + res.parent = parent; if (root.get("TPLoc") instanceof String) { @@ -2172,7 +2182,7 @@ public Long getLeaseExpireTime() { return leaseExpireTime; } - public void setLeaseExpireTime(Long leaseExpireTime) { + public void setLeaseExpireTime(long leaseExpireTime) { this.leaseExpireTime = leaseExpireTime; } diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index 2dc8fa1f5..e073a62ad 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -39,7 +39,7 @@ public boolean leaseExpires(ClaimedResidence res) { public boolean isLeased(ClaimedResidence res) { if (res == null) return false; - return res.getLeaseExpireTime() != null; + return res.getLeaseExpireTime() > 0; } @Deprecated @@ -50,8 +50,8 @@ public boolean leaseExpires(String area) { public String getExpireTime(ClaimedResidence res) { if (res == null) return null; - Long time = res.getLeaseExpireTime(); - if (time != null) { + long time = res.getLeaseExpireTime(); + if (time > 0) { return GetTime.getTime(time); } return null; @@ -143,8 +143,8 @@ public void renewArea(ClaimedResidence res, Player player) { plugin.msg(player, lm.Economy_LeaseRenewMax); return; } - Long get = res.getLeaseExpireTime(); - if (get != null) { + long get = res.getLeaseExpireTime(); + if (get > 0) { get = get + daysToMs(add); res.setLeaseExpireTime(get); @@ -181,7 +181,7 @@ private static int msToDays(long ms) { private static int daysRemaining(ClaimedResidence res) { if (res == null) return 999; - Long get = res.getLeaseExpireTime(); + long get = res.getLeaseExpireTime(); if (get <= System.currentTimeMillis()) return 0; return msToDays((int) (get - System.currentTimeMillis())); From 0702a2e52fc1822bdb853196716e77c00855a346 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 25 May 2023 13:24:47 +0300 Subject: [PATCH 1028/1142] Picking default enter leave messages from default group when not defined --- .../residence/protection/ClaimedResidence.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e582a5e09..d7a184d19 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1848,8 +1848,6 @@ public static ClaimedResidence load(String worldName, Map root, } } - CMIDebug.c(root.containsKey("EnterMessage"), root.containsKey("LeaveMessage"), root.get("EnterMessage") instanceof String); - if (root.containsKey("EnterMessage") && root.get("EnterMessage") instanceof String) { res.enterMessage = (String) root.get("EnterMessage"); } @@ -1861,13 +1859,16 @@ public static ClaimedResidence load(String worldName, Map root, res.enterMessage = Residence.getInstance().getResidenceManager().getChacheMessageEnter(worldName, (Integer) root.get("Messages")); res.leaveMessage = Residence.getInstance().getResidenceManager().getChacheMessageLeave(worldName, (Integer) root.get("Messages")); } else { - - + + PermissionGroup defaultGroup = Residence.getInstance().getPermissionManager().getDefaultGroup(); + // Defaulting to first one if not present - if (res.enterMessage == null) - res.enterMessage = Residence.getInstance().getResidenceManager().getChacheMessageEnter(worldName, 1); - if (res.leaveMessage == null) - res.leaveMessage = Residence.getInstance().getResidenceManager().getChacheMessageLeave(worldName, 1); + if (defaultGroup != null) { + if (res.enterMessage == null) + res.enterMessage = defaultGroup.getDefaultEnterMessage(); + if (res.leaveMessage == null) + res.leaveMessage = defaultGroup.getDefaultLeaveMessage(); + } } CMIDebug.c(res.enterMessage, res.leaveMessage); From 3817fb6888be3e296d2f47a52b236b4b657a3716 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 25 May 2023 15:27:32 +0300 Subject: [PATCH 1029/1142] Taking into consideration explosion flag for custom explosions --- .../listeners/ResidenceEntityListener.java | 2848 +++++++++-------- 1 file changed, 1436 insertions(+), 1412 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 224be1755..4261fe77a 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -50,9 +50,7 @@ import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; -import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; -import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.inventory.ItemStack; @@ -61,6 +59,7 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; +import com.Zrips.CMI.CMI; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -83,440 +82,463 @@ public class ResidenceEntityListener implements Listener { Residence plugin; public ResidenceEntityListener(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } private final static String CrossbowShooter = "CrossbowShooter"; @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEndermanChangeBlock(EntityChangeBlockEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) - return; - if (event.getEntityType() != EntityType.ENDERMAN) - return; - FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); - if (!perms.has(Flags.destroy, true)) { - event.setCancelled(true); - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + if (event.getEntityType() != EntityType.ENDERMAN) + return; + FlagPermissions perms = plugin.getPermsByLoc(event.getBlock().getLocation()); + if (!perms.has(Flags.destroy, true)) { + event.setCancelled(true); + } } - @EventHandler(priority = EventPriority.LOWEST) - public void onEntityInteract(EntitySpawnEvent event) { + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onEntitySpawnEvent(EntitySpawnEvent event) { + + // Disabling listener if flag disabled globally + if (!Flags.nomobs.isGlobalyEnabled()) + return; + + Entity entity = event.getEntity(); + if (entity == null) + return; + + if (!(entity instanceof LivingEntity)) + return; + + if (!isMonster(entity)) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(entity.getWorld())) + return; + + FlagPermissions perms = plugin.getPermsByLoc(entity.getLocation()); + + if (perms.has(Flags.nomobs, FlagCombo.OnlyTrue)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST) public void onEntityInteract(EntityInteractEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.trample.isGlobalyEnabled()) - return; - // disabling event on world - Block block = event.getBlock(); - if (block == null) - return; - if (plugin.isDisabledWorldListener(block.getWorld())) - return; - CMIMaterial mat = CMIMaterial.get(block); - Entity entity = event.getEntity(); - FlagPermissions perms = plugin.getPermsByLoc(block.getLocation()); - boolean hastrample = perms.has(Flags.trample, perms.has(Flags.build, true)); - if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat.equals(CMIMaterial.FARMLAND) || mat.equals(CMIMaterial.SOUL_SAND))) { - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.trample.isGlobalyEnabled()) + return; + // disabling event on world + Block block = event.getBlock(); + if (block == null) + return; + if (plugin.isDisabledWorldListener(block.getWorld())) + return; + CMIMaterial mat = CMIMaterial.get(block); + Entity entity = event.getEntity(); + FlagPermissions perms = plugin.getPermsByLoc(block.getLocation()); + boolean hastrample = perms.has(Flags.trample, perms.has(Flags.build, true)); + if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat.equals(CMIMaterial.FARMLAND) || mat.equals(CMIMaterial.SOUL_SAND))) { + event.setCancelled(true); + } } public static boolean isMonster(Entity ent) { - return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast || Version.isCurrentEqualOrHigher(Version.v1_11_R1) && ent instanceof org.bukkit.entity.Shulker); + return (ent instanceof Monster || ent instanceof Slime || ent instanceof Ghast || Version.isCurrentEqualOrHigher(Version.v1_11_R1) && ent instanceof org.bukkit.entity.Shulker); } private static boolean isTamed(Entity ent) { - return (ent instanceof Tameable ? ((Tameable) ent).isTamed() : false); + return (ent instanceof Tameable ? ((Tameable) ent).isTamed() : false); } private static boolean damageableProjectile(Entity ent) { - if (ent instanceof Projectile && ent.getType().toString().equalsIgnoreCase("Splash_potion")) { - - if (((ThrownPotion) ent).getEffects().isEmpty()) - return true; - for (PotionEffect one : ((ThrownPotion) ent).getEffects()) { - for (String oneHarm : Residence.getInstance().getConfigManager().getNegativePotionEffects()) { - if (oneHarm.equalsIgnoreCase(one.getType().getName())) - return true; - } - } - } - return ent instanceof Projectile || ent.getType().toString().equalsIgnoreCase("Trident") || ent.getType().toString().equalsIgnoreCase("Spectral_Arrow"); + if (ent instanceof Projectile && ent.getType().toString().equalsIgnoreCase("Splash_potion")) { + + if (((ThrownPotion) ent).getEffects().isEmpty()) + return true; + for (PotionEffect one : ((ThrownPotion) ent).getEffects()) { + for (String oneHarm : Residence.getInstance().getConfigManager().getNegativePotionEffects()) { + if (oneHarm.equalsIgnoreCase(one.getType().getName())) + return true; + } + } + } + return ent instanceof Projectile || ent.getType().toString().equalsIgnoreCase("Trident") || ent.getType().toString().equalsIgnoreCase("Spectral_Arrow"); } @EventHandler(priority = EventPriority.LOWEST) public void AnimalKilling(EntityDamageEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.animalkilling.isGlobalyEnabled()) - return; - // disabling event on world - Entity entity = event.getEntity(); - if (entity == null) - return; - if (plugin.isDisabledWorldListener(entity.getWorld())) - return; - if (!Utils.isAnimal(entity)) - return; + // Disabling listener if flag disabled globally + if (!Flags.animalkilling.isGlobalyEnabled()) + return; + Entity entity = event.getEntity(); + if (entity == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(entity.getWorld())) + return; + if (!Utils.isAnimal(entity)) + return; - if (event.getCause() == DamageCause.LIGHTNING || event.getCause() == DamageCause.FIRE_TICK) { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); - if (res != null && res.getPermissions().has(Flags.animalkilling, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - } - return; - } + if (event.getCause() == DamageCause.LIGHTNING || event.getCause() == DamageCause.FIRE_TICK) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); + if (res != null && res.getPermissions().has(Flags.animalkilling, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + } + return; + } - if (!(event instanceof EntityDamageByEntityEvent)) - return; + if (!(event instanceof EntityDamageByEntityEvent)) + return; - EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; - Entity damager = attackevent.getDamager(); + EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; + Entity damager = attackevent.getDamager(); - boolean damageable = damageableProjectile(damager); + boolean damageable = damageableProjectile(damager); - if (!damageable && !(damager instanceof Player)) - return; + if (!damageable && !(damager instanceof Player)) + return; - if (damageable && !(((Projectile) damager).getShooter() instanceof Player)) - return; + if (damageable && !(((Projectile) damager).getShooter() instanceof Player)) + return; - Player cause = null; + Player cause = null; - if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Projectile) damager).getShooter(); - } + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Projectile) damager).getShooter(); + } - if (cause == null) - return; + if (cause == null) + return; - if (plugin.isResAdminOn(cause)) - return; + if (plugin.isResAdminOn(cause)) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); - if (res == null) - return; + if (res == null) + return; - if (res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { - plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling, res.getName()); - attackevent.setCancelled(true); - } + if (res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { + plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling, res.getName()); + attackevent.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST) public void AnimalKillingByFlame(EntityCombustByEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.animalkilling.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; + // Disabling listener if flag disabled globally + if (!Flags.animalkilling.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; - Entity entity = event.getEntity(); - if (entity == null) - return; - if (!Utils.isAnimal(entity)) - return; + Entity entity = event.getEntity(); + if (entity == null) + return; + if (!Utils.isAnimal(entity)) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); - if (res == null) - return; + if (res == null) + return; - Entity damager = event.getCombuster(); + Entity damager = event.getCombuster(); - if (!damageableProjectile(damager) && !(damager instanceof Player)) - return; + if (!damageableProjectile(damager) && !(damager instanceof Player)) + return; - if (damageableProjectile(damager) && !(((Projectile) damager).getShooter() instanceof Player)) - return; + if (damageableProjectile(damager) && !(((Projectile) damager).getShooter() instanceof Player)) + return; - Player cause = null; + Player cause = null; - if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Projectile) damager).getShooter(); - } + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Projectile) damager).getShooter(); + } - if (cause == null) - return; + if (cause == null) + return; - if (plugin.isResAdminOn(cause)) - return; + if (plugin.isResAdminOn(cause)) + return; - if (res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { - plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling, res.getName()); - event.setCancelled(true); - } + if (res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { + plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST) public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.animalkilling.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - Entity entity = event.getEntity(); - if (entity == null) - return; - if (!Utils.isAnimal(entity)) - return; - - Entity damager = event.getDamager(); - - if (damager instanceof Projectile && ((Projectile) damager).getShooter() instanceof Player || damager instanceof Player) - return; - - FlagPermissions perms = plugin.getPermsByLoc(entity.getLocation()); - FlagPermissions world = plugin.getWorldFlags().getPerms(entity.getWorld().getName()); - if (!perms.has(Flags.animalkilling, world.has(Flags.animalkilling, true))) { - event.setCancelled(true); - return; - } + // Disabling listener if flag disabled globally + if (!Flags.animalkilling.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + Entity entity = event.getEntity(); + if (entity == null) + return; + if (!Utils.isAnimal(entity)) + return; + + Entity damager = event.getDamager(); + + if (damager instanceof Projectile && ((Projectile) damager).getShooter() instanceof Player || damager instanceof Player) + return; + + FlagPermissions perms = plugin.getPermsByLoc(entity.getLocation()); + FlagPermissions world = plugin.getWorldFlags().getPerms(entity.getWorld().getName()); + if (!perms.has(Flags.animalkilling, world.has(Flags.animalkilling, true))) { + event.setCancelled(true); + return; + } } @EventHandler(priority = EventPriority.LOWEST) public void OnEntityDeath(EntityDeathEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.mobitemdrop.isGlobalyEnabled() && !Flags.mobexpdrop.isGlobalyEnabled()) - return; - // disabling event on world - LivingEntity ent = event.getEntity(); - if (ent == null) - return; - if (plugin.isDisabledWorldListener(ent.getWorld())) - return; - if (ent instanceof Player) - return; - Location loc = ent.getLocation(); - FlagPermissions perms = plugin.getPermsByLoc(loc); - if (!perms.has(Flags.mobitemdrop, true)) { - event.getDrops().clear(); - } - if (!perms.has(Flags.mobexpdrop, true)) { - event.setDroppedExp(0); - } + // Disabling listener if flag disabled globally + if (!Flags.mobitemdrop.isGlobalyEnabled() && !Flags.mobexpdrop.isGlobalyEnabled()) + return; + // disabling event on world + LivingEntity ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + if (ent instanceof Player) + return; + Location loc = ent.getLocation(); + FlagPermissions perms = plugin.getPermsByLoc(loc); + if (!perms.has(Flags.mobitemdrop, true)) { + event.getDrops().clear(); + } + if (!perms.has(Flags.mobexpdrop, true)) { + event.setDroppedExp(0); + } } @EventHandler(priority = EventPriority.LOWEST) public void VehicleDestroy(VehicleDestroyEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.vehicledestroy.isGlobalyEnabled()) - return; - // disabling event on world - Entity damager = event.getAttacker(); - if (damager == null) - return; + // Disabling listener if flag disabled globally + if (!Flags.vehicledestroy.isGlobalyEnabled()) + return; + // disabling event on world + Entity damager = event.getAttacker(); + if (damager == null) + return; - if (plugin.isDisabledWorldListener(damager.getWorld())) - return; + if (plugin.isDisabledWorldListener(damager.getWorld())) + return; - Vehicle vehicle = event.getVehicle(); + Vehicle vehicle = event.getVehicle(); - if (vehicle == null) - return; + if (vehicle == null) + return; - if (damager instanceof Projectile && !(((Projectile) damager).getShooter() instanceof Player) || !(damager instanceof Player)) { - FlagPermissions perms = plugin.getPermsByLoc(vehicle.getLocation()); - if (!perms.has(Flags.vehicledestroy, true)) { - event.setCancelled(true); - return; - } - } + if (damager instanceof Projectile && !(((Projectile) damager).getShooter() instanceof Player) || !(damager instanceof Player)) { + FlagPermissions perms = plugin.getPermsByLoc(vehicle.getLocation()); + if (!perms.has(Flags.vehicledestroy, true)) { + event.setCancelled(true); + return; + } + } - Player cause = null; + Player cause = null; - if (damager instanceof Player) { - cause = (Player) damager; - } else if (damager instanceof Projectile && ((Projectile) damager).getShooter() instanceof Player) { - cause = (Player) ((Projectile) damager).getShooter(); - } + if (damager instanceof Player) { + cause = (Player) damager; + } else if (damager instanceof Projectile && ((Projectile) damager).getShooter() instanceof Player) { + cause = (Player) ((Projectile) damager).getShooter(); + } - if (cause == null) - return; + if (cause == null) + return; - if (plugin.isResAdminOn(cause)) - return; + if (plugin.isResAdminOn(cause)) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(vehicle.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(vehicle.getLocation()); - if (res == null) - return; + if (res == null) + return; - if (res.getPermissions().playerHas(cause, Flags.vehicledestroy, FlagCombo.OnlyFalse)) { - plugin.msg(cause, lm.Residence_FlagDeny, Flags.vehicledestroy, res.getName()); - event.setCancelled(true); - } + if (res.getPermissions().playerHas(cause, Flags.vehicledestroy, FlagCombo.OnlyFalse)) { + plugin.msg(cause, lm.Residence_FlagDeny, Flags.vehicledestroy, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST) public void MonsterKilling(EntityDamageByEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.mobkilling.isGlobalyEnabled()) - return; - // disabling event on world - Entity entity = event.getEntity(); - if (entity == null) - return; - if (plugin.isDisabledWorldListener(entity.getWorld())) - return; + // Disabling listener if flag disabled globally + if (!Flags.mobkilling.isGlobalyEnabled()) + return; + // disabling event on world + Entity entity = event.getEntity(); + if (entity == null) + return; + if (plugin.isDisabledWorldListener(entity.getWorld())) + return; - if (!isMonster(entity)) - return; + if (!isMonster(entity)) + return; - Entity damager = event.getDamager(); + Entity damager = event.getDamager(); - if (!damageableProjectile(damager) && !(damager instanceof Player)) - return; + if (!damageableProjectile(damager) && !(damager instanceof Player)) + return; - if (damageableProjectile(damager) && !(((Projectile) damager).getShooter() instanceof Player)) - return; + if (damageableProjectile(damager) && !(((Projectile) damager).getShooter() instanceof Player)) + return; - Player cause = null; + Player cause = null; - if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Projectile) damager).getShooter(); - } + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Projectile) damager).getShooter(); + } - if (cause == null) - return; + if (cause == null) + return; - if (plugin.isResAdminOn(cause)) - return; + if (plugin.isResAdminOn(cause)) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); - if (res == null) - return; + if (res == null) + return; - if (res.getPermissions().playerHas(cause, Flags.mobkilling, FlagCombo.OnlyFalse)) { - plugin.msg(cause, lm.Residence_FlagDeny, Flags.mobkilling, res.getName()); - event.setCancelled(true); - } + if (res.getPermissions().playerHas(cause, Flags.mobkilling, FlagCombo.OnlyFalse)) { + plugin.msg(cause, lm.Residence_FlagDeny, Flags.mobkilling, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST) public void AnimalLeash(PlayerLeashEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.leash.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - Player player = event.getPlayer(); + // Disabling listener if flag disabled globally + if (!Flags.leash.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + Player player = event.getPlayer(); - Entity entity = event.getEntity(); + Entity entity = event.getEntity(); - if (!Utils.isAnimal(entity)) - return; + if (!Utils.isAnimal(entity)) + return; - if (plugin.isResAdminOn(player)) - return; + if (plugin.isResAdminOn(player)) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); - if (res == null) - return; + if (res == null) + return; - if (res.getPermissions().playerHas(player, Flags.leash, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); - event.setCancelled(true); - } + if (res.getPermissions().playerHas(player, Flags.leash, FlagCombo.OnlyFalse)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onFenceLeashInteract(PlayerInteractEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.leash.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getRightClicked().getWorld())) - return; - Player player = event.getPlayer(); + // Disabling listener if flag disabled globally + if (!Flags.leash.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getRightClicked().getWorld())) + return; + Player player = event.getPlayer(); - Entity entity = event.getRightClicked(); + Entity entity = event.getRightClicked(); - if (entity.getType() != EntityType.LEASH_HITCH) - return; + if (entity.getType() != EntityType.LEASH_HITCH) + return; - if (plugin.isResAdminOn(player)) - return; + if (plugin.isResAdminOn(player)) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); - if (res == null) - return; + if (res == null) + return; - if (res.getPermissions().playerHas(player, Flags.leash, FlagCombo.OnlyFalse)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); - event.setCancelled(true); - } + if (res.getPermissions().playerHas(player, Flags.leash, FlagCombo.OnlyFalse)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); + event.setCancelled(true); + } } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onWitherSpawn(CreatureSpawnEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.witherspawn.isGlobalyEnabled()) - return; - // disabling event on world - Entity ent = event.getEntity(); - if (ent == null) - return; - if (plugin.isDisabledWorldListener(ent.getWorld())) - return; - - if (ent.getType() != EntityType.WITHER) - return; - - FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); - if (perms.has(Flags.witherspawn, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } + // Disabling listener if flag disabled globally + if (!Flags.witherspawn.isGlobalyEnabled()) + return; + // disabling event on world + Entity ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + + if (ent.getType() != EntityType.WITHER) + return; + + FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); + if (perms.has(Flags.witherspawn, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPhantomSpawn(CreatureSpawnEvent event) { - if (Version.isCurrentLower(Version.v1_13_R1)) - return; - // Disabling listener if flag disabled globally - if (!Flags.phantomspawn.isGlobalyEnabled()) - return; - // disabling event on world - Entity ent = event.getEntity(); - if (ent == null) - return; - if (plugin.isDisabledWorldListener(ent.getWorld())) - return; - - if (ent.getType() != EntityType.PHANTOM) - return; - - FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); - if (perms.has(Flags.phantomspawn, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } + if (Version.isCurrentLower(Version.v1_13_R1)) + return; + // Disabling listener if flag disabled globally + if (!Flags.phantomspawn.isGlobalyEnabled()) + return; + // disabling event on world + Entity ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + + if (ent.getType() != EntityType.PHANTOM) + return; + + FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); + if (perms.has(Flags.phantomspawn, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -526,1221 +548,1223 @@ public void onItemSpawnEvent(SpawnerSpawnEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onCreatureSpawn(CreatureSpawnEvent event) { - // disabling event on world - Entity ent = event.getEntity(); - if (ent == null) - return; - if (plugin.isDisabledWorldListener(ent.getWorld())) - return; - FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); - if (Utils.isAnimal(ent)) { - if (!perms.has(Flags.animals, true)) { - event.setCancelled(true); - return; - } - switch (event.getSpawnReason()) { - case BUILD_WITHER: - break; - case BUILD_IRONGOLEM: - case BUILD_SNOWMAN: - case CUSTOM: - case DEFAULT: - if (perms.has(Flags.canimals, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } - break; - case BREEDING: - case CHUNK_GEN: - case CURED: - case DISPENSE_EGG: - case EGG: - case JOCKEY: - case MOUNT: - case VILLAGE_INVASION: - case VILLAGE_DEFENSE: - case NETHER_PORTAL: - case OCELOT_BABY: - case NATURAL: - if (perms.has(Flags.nanimals, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } - break; - case SPAWNER_EGG: - case SPAWNER: - if (perms.has(Flags.sanimals, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } - break; - default: - break; - } - } else if (isMonster(ent)) { - if (perms.has(Flags.monsters, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } - switch (event.getSpawnReason()) { - case BUILD_WITHER: - case CUSTOM: - case DEFAULT: - if (perms.has(Flags.cmonsters, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } - break; - case CHUNK_GEN: - case CURED: - case DISPENSE_EGG: - case INFECTION: - case JOCKEY: - case MOUNT: - case NETHER_PORTAL: - case SILVERFISH_BLOCK: - case SLIME_SPLIT: - case LIGHTNING: - case NATURAL: - if (perms.has(Flags.nmonsters, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } - break; - case SPAWNER_EGG: - case SPAWNER: - if (perms.has(Flags.smonsters, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } - break; - default: - break; - } - } + // disabling event on world + Entity ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + FlagPermissions perms = plugin.getPermsByLoc(event.getLocation()); + if (Utils.isAnimal(ent)) { + if (!perms.has(Flags.animals, true)) { + event.setCancelled(true); + return; + } + switch (event.getSpawnReason()) { + case BUILD_WITHER: + break; + case BUILD_IRONGOLEM: + case BUILD_SNOWMAN: + case CUSTOM: + case DEFAULT: + if (perms.has(Flags.canimals, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + break; + case BREEDING: + case CHUNK_GEN: + case CURED: + case DISPENSE_EGG: + case EGG: + case JOCKEY: + case MOUNT: + case VILLAGE_INVASION: + case VILLAGE_DEFENSE: + case NETHER_PORTAL: + case OCELOT_BABY: + case NATURAL: + if (perms.has(Flags.nanimals, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + break; + case SPAWNER_EGG: + case SPAWNER: + if (perms.has(Flags.sanimals, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + break; + default: + break; + } + } else if (isMonster(ent)) { + if (perms.has(Flags.monsters, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + switch (event.getSpawnReason()) { + case BUILD_WITHER: + case CUSTOM: + case DEFAULT: + if (perms.has(Flags.cmonsters, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + break; + case CHUNK_GEN: + case CURED: + case DISPENSE_EGG: + case INFECTION: + case JOCKEY: + case MOUNT: + case NETHER_PORTAL: + case SILVERFISH_BLOCK: + case SLIME_SPLIT: + case LIGHTNING: + case NATURAL: + if (perms.has(Flags.nmonsters, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + break; + case SPAWNER_EGG: + case SPAWNER: + if (perms.has(Flags.smonsters, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + break; + default: + break; + } + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingPlace(HangingPlaceEvent event) { - // disabling event on world - Player player = event.getPlayer(); - if (player == null) - return; - if (plugin.isDisabledWorldListener(player.getWorld())) - return; - if (plugin.isResAdminOn(player)) - return; - - FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getEntity().getLocation(), player); - if (!perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true))) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.place); - player.updateInventory(); - } + // disabling event on world + Player player = event.getPlayer(); + if (player == null) + return; + if (plugin.isDisabledWorldListener(player.getWorld())) + return; + if (plugin.isResAdminOn(player)) + return; + + FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getEntity().getLocation(), player); + if (!perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true))) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.place); + player.updateInventory(); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onProjectileLaunch(ProjectileLaunchEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.shoot.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - - if (event.getEntityType().equals(EntityType.THROWN_EXP_BOTTLE)) - return; - - if (event.getEntity().getShooter() instanceof Player) { - if (plugin.isResAdminOn((Player) event.getEntity().getShooter())) - return; - } - FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); - if (perms.has(Flags.shoot, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - if (event.getEntity().getShooter() instanceof Player) - plugin.msg((Player) event.getEntity().getShooter(), lm.Flag_Deny, Flags.shoot); - } + // Disabling listener if flag disabled globally + if (!Flags.shoot.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + + if (event.getEntityType().equals(EntityType.THROWN_EXP_BOTTLE)) + return; + + if (event.getEntity().getShooter() instanceof Player) { + if (plugin.isResAdminOn((Player) event.getEntity().getShooter())) + return; + } + FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); + if (perms.has(Flags.shoot, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + if (event.getEntity().getShooter() instanceof Player) + plugin.msg((Player) event.getEntity().getShooter(), lm.Flag_Deny, Flags.shoot); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreak(HangingBreakByEntityEvent event) { - // disabling event on world - Hanging ent = event.getEntity(); - if (ent == null) - return; - if (plugin.isDisabledWorldListener(ent.getWorld())) - return; - - if (!(event.getRemover() instanceof Player)) - return; - - Player player = (Player) event.getRemover(); - if (plugin.isResAdminOn(player)) - return; - - if (plugin.getResidenceManager().isOwnerOfLocation(player, ent.getLocation())) - return; - - FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player); - if (!perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true))) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.destroy); - } + // disabling event on world + Hanging ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + + if (!(event.getRemover() instanceof Player)) + return; + + Player player = (Player) event.getRemover(); + if (plugin.isResAdminOn(player)) + return; + + if (plugin.getResidenceManager().isOwnerOfLocation(player, ent.getLocation())) + return; + + FlagPermissions perms = plugin.getPermsByLocForPlayer(ent.getLocation(), player); + if (!perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true))) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.destroy); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreakEventByExplosion(HangingBreakEvent event) { - // disabling event on world - Hanging ent = event.getEntity(); - if (ent == null) - return; - if (plugin.isDisabledWorldListener(ent.getWorld())) - return; - - if (!event.getCause().equals(RemoveCause.EXPLOSION)) - return; - - FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); - if (perms.has(Flags.explode, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - } + // disabling event on world + Hanging ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + + if (!event.getCause().equals(RemoveCause.EXPLOSION)) + return; + + FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); + if (perms.has(Flags.explode, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreakEvent(HangingBreakEvent event) { - // disabling event on world - Hanging ent = event.getEntity(); - if (ent == null) - return; - if (plugin.isDisabledWorldListener(ent.getWorld())) - return; - - if (!event.getEntity().getType().equals(EntityType.ITEM_FRAME)) - return; - - if (!event.getCause().equals(RemoveCause.PHYSICS)) - return; - - FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); - if (!perms.has(Flags.destroy, perms.has(Flags.build, true))) { - event.setCancelled(true); - } + // disabling event on world + Hanging ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + + if (!event.getEntity().getType().equals(EntityType.ITEM_FRAME)) + return; + + if (!event.getCause().equals(RemoveCause.PHYSICS)) + return; + + FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); + if (!perms.has(Flags.destroy, perms.has(Flags.build, true))) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { - // disabling event on world - Hanging ent = event.getEntity(); - if (ent == null) - return; - if (plugin.isDisabledWorldListener(ent.getWorld())) - return; - - if (event.getRemover() instanceof Player) - return; - - FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); - if (!perms.has(Flags.destroy, perms.has(Flags.build, true))) { - event.setCancelled(true); - } + // disabling event on world + Hanging ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + + if (event.getRemover() instanceof Player) + return; + + FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); + if (!perms.has(Flags.destroy, perms.has(Flags.build, true))) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityCombust(EntityCombustEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.burn.isGlobalyEnabled()) - return; - // disabling event on world - Entity ent = event.getEntity(); - if (ent == null) - return; - if (plugin.isDisabledWorldListener(ent.getWorld())) - return; - FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); - if (!perms.has(Flags.burn, true)) { - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.burn.isGlobalyEnabled()) + return; + // disabling event on world + Entity ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); + if (!perms.has(Flags.burn, true)) { + event.setCancelled(true); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onExplosionPrime(ExplosionPrimeEvent event) { - // disabling event on world - Entity ent = event.getEntity(); - if (ent == null) - return; - if (plugin.isDisabledWorldListener(ent.getWorld())) - return; - EntityType entity = event.getEntityType(); - FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); - - switch (entity) { - case CREEPER: - - // Disabling listener if flag disabled globally - if (!Flags.creeper.isGlobalyEnabled()) - break; - if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) { - if (plugin.getConfigManager().isCreeperExplodeBelow()) { - if (ent.getLocation().getBlockY() >= plugin.getConfigManager().getCreeperExplodeBelowLevel()) { - event.setCancelled(true); - ent.remove(); - } else { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); - if (res != null) { - event.setCancelled(true); - ent.remove(); - } - } - } else { - event.setCancelled(true); - ent.remove(); - } - } - break; - case PRIMED_TNT: - case MINECART_TNT: - - // Disabling listener if flag disabled globally - if (!Flags.tnt.isGlobalyEnabled()) - break; - if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { - if (plugin.getConfigManager().isTNTExplodeBelow()) { - if (ent.getLocation().getBlockY() >= plugin.getConfigManager().getTNTExplodeBelowLevel()) { - event.setCancelled(true); - ent.remove(); - } else { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); - if (res != null) { - event.setCancelled(true); - ent.remove(); - } - } - } else { - event.setCancelled(true); - ent.remove(); - } - } - break; - case SMALL_FIREBALL: - case FIREBALL: - // Disabling listener if flag disabled globally - if (!Flags.explode.isGlobalyEnabled()) - break; - if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - ent.remove(); - } - break; - case WITHER_SKULL: - // Disabling listener if flag disabled globally - if (!Flags.explode.isGlobalyEnabled()) - break; - if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - ent.remove(); - } - break; - case WITHER: - break; - default: - if (perms.has(Flags.destroy, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - ent.remove(); - } - break; - } + // disabling event on world + Entity ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + EntityType entity = event.getEntityType(); + FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); + + switch (entity) { + case CREEPER: + + // Disabling listener if flag disabled globally + if (!Flags.creeper.isGlobalyEnabled()) + break; + if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) { + if (plugin.getConfigManager().isCreeperExplodeBelow()) { + if (ent.getLocation().getBlockY() >= plugin.getConfigManager().getCreeperExplodeBelowLevel()) { + event.setCancelled(true); + ent.remove(); + } else { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); + if (res != null) { + event.setCancelled(true); + ent.remove(); + } + } + } else { + event.setCancelled(true); + ent.remove(); + } + } + break; + case PRIMED_TNT: + case MINECART_TNT: + + // Disabling listener if flag disabled globally + if (!Flags.tnt.isGlobalyEnabled()) + break; + + if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { + if (plugin.getConfigManager().isTNTExplodeBelow()) { + if (ent.getLocation().getBlockY() >= plugin.getConfigManager().getTNTExplodeBelowLevel()) { + event.setCancelled(true); + ent.remove(); + } else { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); + if (res != null) { + event.setCancelled(true); + ent.remove(); + } + } + } else { + event.setCancelled(true); + ent.remove(); + } + } + break; + case SMALL_FIREBALL: + case FIREBALL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + break; + if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + ent.remove(); + } + break; + case WITHER_SKULL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + break; + if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + ent.remove(); + } + break; + case WITHER: + break; + default: + if (perms.has(Flags.destroy, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + ent.remove(); + } + break; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent event) { - // disabling event on world - Location loc = event.getLocation(); - if (plugin.isDisabledWorldListener(loc.getWorld())) - return; - if (event.isCancelled()) - return; - - Entity ent = event.getEntity(); - - Boolean cancel = false; - Boolean remove = true; - FlagPermissions perms = plugin.getPermsByLoc(loc); - FlagPermissions world = plugin.getWorldFlags().getPerms(loc.getWorld().getName()); - - if (ent != null) { - switch (event.getEntityType()) { - case CREEPER: - // Disabling listener if flag disabled globally - if (!Flags.creeper.isGlobalyEnabled()) - break; - if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) - if (plugin.getConfigManager().isCreeperExplodeBelow()) { - if (loc.getBlockY() >= plugin.getConfigManager().getCreeperExplodeBelowLevel()) - cancel = true; - else { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res != null) - cancel = true; - } - } else - cancel = true; - break; - case PRIMED_TNT: - case MINECART_TNT: - // Disabling listener if flag disabled globally - if (!Flags.tnt.isGlobalyEnabled()) - break; - if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { - if (plugin.getConfigManager().isTNTExplodeBelow()) { - if (loc.getBlockY() >= plugin.getConfigManager().getTNTExplodeBelowLevel()) - cancel = true; - else { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res != null) - cancel = true; - } - } else - cancel = true; - } - break; - case SMALL_FIREBALL: - case FIREBALL: - // Disabling listener if flag disabled globally - if (!Flags.explode.isGlobalyEnabled()) - return; - if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) - cancel = true; - break; - case WITHER: - case WITHER_SKULL: - // Disabling listener if flag disabled globally - if (!Flags.explode.isGlobalyEnabled()) - break; - if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) - cancel = true; - break; - case ENDER_DRAGON: - remove = false; - break; - default: - if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) { - cancel = true; - remove = false; - } - break; - } - } else if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) { - cancel = true; - } - - if (cancel) { - event.setCancelled(true); - if (ent != null && remove) { - if (!event.getEntityType().equals(EntityType.WITHER)) - ent.remove(); - } - return; - } - - List preserve = new ArrayList(); - for (Block block : event.blockList()) { - FlagPermissions blockperms = plugin.getPermsByLoc(block.getLocation()); - - if (ent != null) { - switch (event.getEntityType()) { - case CREEPER: - // Disabling listener if flag disabled globally - if (!Flags.creeper.isGlobalyEnabled()) - continue; - if (!blockperms.has(Flags.creeper, blockperms.has(Flags.explode, true))) - if (plugin.getConfigManager().isCreeperExplodeBelow()) { - if (block.getY() >= plugin.getConfigManager().getCreeperExplodeBelowLevel()) - preserve.add(block); - else { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - if (res != null) - preserve.add(block); - } - } else - preserve.add(block); - continue; - case PRIMED_TNT: - case MINECART_TNT: - // Disabling listener if flag disabled globally - if (!Flags.tnt.isGlobalyEnabled()) - continue; - if (!blockperms.has(Flags.tnt, blockperms.has(Flags.explode, true))) { - if (plugin.getConfigManager().isTNTExplodeBelow()) { - if (block.getY() >= plugin.getConfigManager().getTNTExplodeBelowLevel()) - preserve.add(block); - else { - ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - if (res != null) - preserve.add(block); - } - } else - preserve.add(block); - } - continue; - case ENDER_DRAGON: - // Disabling listener if flag disabled globally - if (!Flags.dragongrief.isGlobalyEnabled()) - break; - if (blockperms.has(Flags.dragongrief, FlagCombo.OnlyFalse)) - preserve.add(block); - break; - case ENDER_CRYSTAL: - // Disabling listener if flag disabled globally - if (!Flags.explode.isGlobalyEnabled()) - continue; - if (blockperms.has(Flags.explode, FlagCombo.OnlyFalse)) - preserve.add(block); - continue; - case SMALL_FIREBALL: - case FIREBALL: - // Disabling listener if flag disabled globally - if (!Flags.explode.isGlobalyEnabled()) - continue; - if (blockperms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) - preserve.add(block); - continue; - case WITHER: - case WITHER_SKULL: - // Disabling listener if flag disabled globally - if (!Flags.explode.isGlobalyEnabled()) - break; - if (blockperms.has(Flags.explode, FlagCombo.OnlyFalse) || blockperms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) - preserve.add(block); - break; - default: - if (blockperms.has(Flags.destroy, FlagCombo.OnlyFalse)) - preserve.add(block); - continue; - } - } else { - if (!blockperms.has(Flags.destroy, world.has(Flags.destroy, true))) { - preserve.add(block); - } - } - } - - for (Block block : preserve) { - event.blockList().remove(block); - } + + // disabling event on world + Location loc = event.getLocation(); + if (plugin.isDisabledWorldListener(loc.getWorld())) + return; + if (event.isCancelled()) + return; + + Entity ent = event.getEntity(); + + Boolean cancel = false; + Boolean remove = true; + FlagPermissions perms = plugin.getPermsByLoc(loc); + FlagPermissions world = plugin.getWorldFlags().getPerms(loc.getWorld().getName()); + + if (ent != null) { + switch (event.getEntityType()) { + case CREEPER: + // Disabling listener if flag disabled globally + if (!Flags.creeper.isGlobalyEnabled()) + break; + if (!perms.has(Flags.creeper, perms.has(Flags.explode, true))) + if (plugin.getConfigManager().isCreeperExplodeBelow()) { + if (loc.getBlockY() >= plugin.getConfigManager().getCreeperExplodeBelowLevel()) + cancel = true; + else { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (res != null) + cancel = true; + } + } else + cancel = true; + break; + case PRIMED_TNT: + case MINECART_TNT: + // Disabling listener if flag disabled globally + if (!Flags.tnt.isGlobalyEnabled()) + break; + if (!perms.has(Flags.tnt, perms.has(Flags.explode, true))) { + if (plugin.getConfigManager().isTNTExplodeBelow()) { + if (loc.getBlockY() >= plugin.getConfigManager().getTNTExplodeBelowLevel()) + cancel = true; + else { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (res != null) + cancel = true; + } + } else + cancel = true; + } + break; + case SMALL_FIREBALL: + case FIREBALL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + return; + if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) + cancel = true; + break; + case WITHER: + case WITHER_SKULL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + break; + if (perms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) + cancel = true; + break; + case ENDER_DRAGON: + remove = false; + break; + default: + if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) { + cancel = true; + remove = false; + } + break; + } + } else if (!perms.has(Flags.destroy, world.has(Flags.destroy, true))) { + cancel = true; + } + + if (cancel) { + event.setCancelled(true); + if (ent != null && remove) { + if (!event.getEntityType().equals(EntityType.WITHER)) + ent.remove(); + } + return; + } + + List preserve = new ArrayList(); + for (Block block : event.blockList()) { + FlagPermissions blockperms = plugin.getPermsByLoc(block.getLocation()); + + if (ent != null) { + switch (event.getEntityType()) { + case CREEPER: + // Disabling listener if flag disabled globally + if (!Flags.creeper.isGlobalyEnabled()) + continue; + if (!blockperms.has(Flags.creeper, blockperms.has(Flags.explode, true))) + if (plugin.getConfigManager().isCreeperExplodeBelow()) { + if (block.getY() >= plugin.getConfigManager().getCreeperExplodeBelowLevel()) + preserve.add(block); + else { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (res != null) + preserve.add(block); + } + } else + preserve.add(block); + continue; + case PRIMED_TNT: + case MINECART_TNT: + // Disabling listener if flag disabled globally + if (!Flags.tnt.isGlobalyEnabled()) + continue; + if (!blockperms.has(Flags.tnt, blockperms.has(Flags.explode, true))) { + if (plugin.getConfigManager().isTNTExplodeBelow()) { + if (block.getY() >= plugin.getConfigManager().getTNTExplodeBelowLevel()) + preserve.add(block); + else { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (res != null) + preserve.add(block); + } + } else + preserve.add(block); + } + continue; + case ENDER_DRAGON: + // Disabling listener if flag disabled globally + if (!Flags.dragongrief.isGlobalyEnabled()) + break; + if (blockperms.has(Flags.dragongrief, FlagCombo.OnlyFalse)) + preserve.add(block); + break; + case ENDER_CRYSTAL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + continue; + if (blockperms.has(Flags.explode, FlagCombo.OnlyFalse)) + preserve.add(block); + continue; + case SMALL_FIREBALL: + case FIREBALL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + continue; + if (blockperms.has(Flags.explode, FlagCombo.OnlyFalse) || perms.has(Flags.fireball, FlagCombo.OnlyFalse)) + preserve.add(block); + continue; + case WITHER: + case WITHER_SKULL: + // Disabling listener if flag disabled globally + if (!Flags.explode.isGlobalyEnabled()) + break; + if (blockperms.has(Flags.explode, FlagCombo.OnlyFalse) || blockperms.has(Flags.witherdestruction, FlagCombo.OnlyFalse)) + preserve.add(block); + break; + default: + if (blockperms.has(Flags.destroy, FlagCombo.OnlyFalse) || blockperms.has(Flags.explode, FlagCombo.OnlyFalse)) + preserve.add(block); + continue; + } + } else { + if (!blockperms.has(Flags.destroy, world.has(Flags.destroy, true))) { + preserve.add(block); + } + } + } + + for (Block block : preserve) { + event.blockList().remove(block); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSplashPotion(EntityChangeBlockEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.witherdestruction.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; + // Disabling listener if flag disabled globally + if (!Flags.witherdestruction.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; - Entity ent = event.getEntity(); + Entity ent = event.getEntity(); - if (ent.getType() != EntityType.WITHER) - return; + if (ent.getType() != EntityType.WITHER) + return; - if (!plugin.getPermsByLoc(event.getBlock().getLocation()).has(Flags.witherdestruction, FlagCombo.OnlyFalse)) - return; + if (!plugin.getPermsByLoc(event.getBlock().getLocation()).has(Flags.witherdestruction, FlagCombo.OnlyFalse)) + return; - event.setCancelled(true); + event.setCancelled(true); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSplashPotion(PotionSplashEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.pvp.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - ProjectileSource shooter = event.getPotion().getShooter(); - - if (shooter instanceof Witch) - return; - - boolean harmfull = false; - - mein: for (PotionEffect one : event.getPotion().getEffects()) { - for (String oneHarm : plugin.getConfigManager().getNegativePotionEffects()) { - if (oneHarm.equalsIgnoreCase(one.getType().getName())) { - harmfull = true; - break mein; - } - } - } - - if (!harmfull) - return; - - Entity ent = event.getEntity(); - boolean srcpvp = plugin.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); - boolean animalKilling = plugin.getPermsByLoc(ent.getLocation()).has(Flags.animalkilling, FlagCombo.TrueOrNone); - Iterator it = event.getAffectedEntities().iterator(); - boolean animalDamage = false; - while (it.hasNext()) { - LivingEntity target = it.next(); - - if (Utils.isAnimal(target)) { - if (!animalKilling) { - event.setIntensity(target, 0); - animalDamage = true; - } - continue; - } - - if (target.getType() != EntityType.PLAYER) - continue; - Boolean tgtpvp = plugin.getPermsByLoc(target.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); - if (!srcpvp || !tgtpvp) { - event.setIntensity(target, 0); - continue; - } - - ClaimedResidence area = plugin.getResidenceManager().getByLoc(target.getLocation()); - - if ((target instanceof Player) && (shooter instanceof Player)) { - Player attacker = null; - if (shooter instanceof Player) { - attacker = (Player) shooter; - } - if (attacker != null) { - if (!(target instanceof Player)) - return; - ClaimedResidence srcarea = plugin.getResidenceManager().getByLoc(attacker.getLocation()); - if (srcarea != null && area != null && srcarea.equals(area) && srcarea.getPermissions().playerHas((Player) target, Flags.friendlyfire, FlagCombo.OnlyFalse) && - srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { - CMIActionBar.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); - event.setIntensity(target, 0); - } - } - } - } - - if (!animalKilling && animalDamage && shooter instanceof Player) { - Residence.getInstance().msg((Player) shooter, lm.Flag_Deny, Flags.animalkilling); - } + // Disabling listener if flag disabled globally + if (!Flags.pvp.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + ProjectileSource shooter = event.getPotion().getShooter(); + + if (shooter instanceof Witch) + return; + + boolean harmfull = false; + + mein: for (PotionEffect one : event.getPotion().getEffects()) { + for (String oneHarm : plugin.getConfigManager().getNegativePotionEffects()) { + if (oneHarm.equalsIgnoreCase(one.getType().getName())) { + harmfull = true; + break mein; + } + } + } + + if (!harmfull) + return; + + Entity ent = event.getEntity(); + boolean srcpvp = plugin.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + boolean animalKilling = plugin.getPermsByLoc(ent.getLocation()).has(Flags.animalkilling, FlagCombo.TrueOrNone); + Iterator it = event.getAffectedEntities().iterator(); + boolean animalDamage = false; + while (it.hasNext()) { + LivingEntity target = it.next(); + + if (Utils.isAnimal(target)) { + if (!animalKilling) { + event.setIntensity(target, 0); + animalDamage = true; + } + continue; + } + + if (target.getType() != EntityType.PLAYER) + continue; + Boolean tgtpvp = plugin.getPermsByLoc(target.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + if (!srcpvp || !tgtpvp) { + event.setIntensity(target, 0); + continue; + } + + ClaimedResidence area = plugin.getResidenceManager().getByLoc(target.getLocation()); + + if ((target instanceof Player) && (shooter instanceof Player)) { + Player attacker = null; + if (shooter instanceof Player) { + attacker = (Player) shooter; + } + if (attacker != null) { + if (!(target instanceof Player)) + return; + ClaimedResidence srcarea = plugin.getResidenceManager().getByLoc(attacker.getLocation()); + if (srcarea != null && area != null && srcarea.equals(area) && srcarea.getPermissions().playerHas((Player) target, Flags.friendlyfire, FlagCombo.OnlyFalse) && + srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { + CMIActionBar.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); + event.setIntensity(target, 0); + } + } + } + } + + if (!animalKilling && animalDamage && shooter instanceof Player) { + Residence.getInstance().msg((Player) shooter, lm.Flag_Deny, Flags.animalkilling); + } } @EventHandler(priority = EventPriority.LOWEST) public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.pvp.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - Entity entity = event.getEntity(); - if (entity == null) - return; - if (!(entity instanceof Player)) - return; - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); - - if (res == null) - return; - - Entity damager = event.getCombuster(); - - if (!damageableProjectile(damager) && !(damager instanceof Player)) - return; - - if (damageableProjectile(damager) && !(((Projectile) damager).getShooter() instanceof Player)) - return; - - Player cause = null; - - if (damager instanceof Player) { - cause = (Player) damager; - } else { - cause = (Player) ((Projectile) damager).getShooter(); - } - - if (cause == null) - return; - - Boolean srcpvp = plugin.getPermsByLoc(cause.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); - Boolean tgtpvp = plugin.getPermsByLoc(entity.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); - if (!srcpvp || !tgtpvp) - event.setCancelled(true); + // Disabling listener if flag disabled globally + if (!Flags.pvp.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + Entity entity = event.getEntity(); + if (entity == null) + return; + if (!(entity instanceof Player)) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + Entity damager = event.getCombuster(); + + if (!damageableProjectile(damager) && !(damager instanceof Player)) + return; + + if (damageableProjectile(damager) && !(((Projectile) damager).getShooter() instanceof Player)) + return; + + Player cause = null; + + if (damager instanceof Player) { + cause = (Player) damager; + } else { + cause = (Player) ((Projectile) damager).getShooter(); + } + + if (cause == null) + return; + + Boolean srcpvp = plugin.getPermsByLoc(cause.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + Boolean tgtpvp = plugin.getPermsByLoc(entity.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + if (!srcpvp || !tgtpvp) + event.setCancelled(true); } @EventHandler public void OnFallDamage(EntityDamageEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.falldamage.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - if (event.getCause() != DamageCause.FALL) - return; - Entity ent = event.getEntity(); - if (!(ent instanceof Player)) - return; - - if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.falldamage, FlagCombo.TrueOrNone)) { - event.setCancelled(true); - } + // Disabling listener if flag disabled globally + if (!Flags.falldamage.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + if (event.getCause() != DamageCause.FALL) + return; + Entity ent = event.getEntity(); + if (!(ent instanceof Player)) + return; + + if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.falldamage, FlagCombo.TrueOrNone)) { + event.setCancelled(true); + } } @EventHandler public void OnArmorStandFlameDamage(EntityDamageEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - if (event.getCause() != DamageCause.FIRE_TICK) - return; - - Entity ent = event.getEntity(); - if (!Utils.isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) - return; - - if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { - event.setCancelled(true); - ent.setFireTicks(0); - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + if (event.getCause() != DamageCause.FIRE_TICK) + return; + + Entity ent = event.getEntity(); + if (!Utils.isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) + return; + + if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { + event.setCancelled(true); + ent.setFireTicks(0); + } } @EventHandler public void OnArmorStandExplosion(EntityDamageEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - if (event.getCause() != DamageCause.BLOCK_EXPLOSION && event.getCause() != DamageCause.ENTITY_EXPLOSION) - return; - Entity ent = event.getEntity(); - if (!Utils.isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) - return; - - if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { - event.setCancelled(true); - ent.setFireTicks(0); - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + if (event.getCause() != DamageCause.BLOCK_EXPLOSION && event.getCause() != DamageCause.ENTITY_EXPLOSION) + return; + Entity ent = event.getEntity(); + if (!Utils.isArmorStandEntity(ent.getType()) && !(ent instanceof Arrow)) + return; + + if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.destroy, true)) { + event.setCancelled(true); + ent.setFireTicks(0); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityCatchingFire(EntityDamageByEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.pvp.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; + // Disabling listener if flag disabled globally + if (!Flags.pvp.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; - if (!damageableProjectile(event.getDamager())) - return; + if (!damageableProjectile(event.getDamager())) + return; - if (event.getEntity() == null || !(event.getEntity() instanceof Player)) - return; + if (event.getEntity() == null || !(event.getEntity() instanceof Player)) + return; - Projectile projectile = (Projectile) event.getDamager(); + Projectile projectile = (Projectile) event.getDamager(); - FlagPermissions perms = plugin.getPermsByLoc(projectile.getLocation()); + FlagPermissions perms = plugin.getPermsByLoc(projectile.getLocation()); - if (!perms.has(Flags.pvp, FlagCombo.TrueOrNone)) - projectile.setFireTicks(0); + if (!perms.has(Flags.pvp, FlagCombo.TrueOrNone)) + projectile.setFireTicks(0); } @EventHandler public void OnPlayerDamageByLightning(EntityDamageEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.pvp.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - if (event.getCause() != DamageCause.LIGHTNING) - return; - Entity ent = event.getEntity(); - if (!(ent instanceof Player)) - return; - if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone)) - event.setCancelled(true); + // Disabling listener if flag disabled globally + if (!Flags.pvp.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + if (event.getCause() != DamageCause.LIGHTNING) + return; + Entity ent = event.getEntity(); + if (!(ent instanceof Player)) + return; + if (!plugin.getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone)) + event.setCancelled(true); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByFireballEvent(EntityDamageByEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.fireball.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - Entity dmgr = event.getDamager(); - if (dmgr.getType() != EntityType.SMALL_FIREBALL && dmgr.getType() != EntityType.FIREBALL) - return; - - FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); - if (perms.has(Flags.fireball, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } + // Disabling listener if flag disabled globally + if (!Flags.fireball.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + Entity dmgr = event.getDamager(); + if (dmgr.getType() != EntityType.SMALL_FIREBALL && dmgr.getType() != EntityType.FIREBALL) + return; + + FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); + if (perms.has(Flags.fireball, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByWitherEvent(EntityDamageByEntityEvent event) { - // Disabling listener if flag disabled globally - if (!Flags.witherdamage.isGlobalyEnabled()) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - Entity dmgr = event.getDamager(); - if (dmgr.getType() != EntityType.WITHER && dmgr.getType() != EntityType.WITHER_SKULL) - return; - - FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); - if (perms.has(Flags.witherdamage, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } + // Disabling listener if flag disabled globally + if (!Flags.witherdamage.isGlobalyEnabled()) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + Entity dmgr = event.getDamager(); + if (dmgr.getType() != EntityType.WITHER && dmgr.getType() != EntityType.WITHER_SKULL) + return; + + FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); + if (perms.has(Flags.witherdamage, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - if (event.isCancelled()) - return; - - if (event.getEntityType() != EntityType.ENDER_CRYSTAL && !CMIEntity.isItemFrame(event.getEntity()) && !Utils.isArmorStandEntity(event.getEntityType())) - return; - - Entity dmgr = event.getDamager(); - - Player player = null; - if (dmgr instanceof Player) { - player = (Player) event.getDamager(); - } else if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { - player = (Player) ((Projectile) dmgr).getShooter(); - } else if ((dmgr instanceof Projectile) && (!(((Projectile) dmgr).getShooter() instanceof Player))) { - Location loc = event.getEntity().getLocation(); - FlagPermissions perm = plugin.getPermsByLoc(loc); - if (perm.has(Flags.destroy, FlagCombo.OnlyFalse)) - event.setCancelled(true); - return; - } else if (dmgr.getType() == EntityType.PRIMED_TNT || dmgr.getType() == EntityType.MINECART_TNT) { - - // Disabling listener if flag disabled globally - if (Flags.explode.isGlobalyEnabled()) { - FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); - if (perms.has(Flags.explode, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } - } - } else if (dmgr.getType() == EntityType.WITHER_SKULL || dmgr.getType() == EntityType.WITHER) { - - // Disabling listener if flag disabled globally - if (Flags.witherdamage.isGlobalyEnabled()) { - FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); - if (perms.has(Flags.witherdamage, FlagCombo.OnlyFalse)) { - event.setCancelled(true); - return; - } - } - } - - Location loc = event.getEntity().getLocation(); - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res == null) - return; - - if (isMonster(dmgr) && !res.getPermissions().has(Flags.destroy, false)) { - event.setCancelled(true); - return; - } - - if (player == null) - return; - - if (plugin.isResAdminOn(player)) - return; - - FlagPermissions perms = plugin.getPermsByLocForPlayer(loc, player); - - if (CMIEntity.isItemFrame(event.getEntity())) { - ItemStack stack = null; - if (event.getEntityType() == EntityType.ITEM_FRAME) { - ItemFrame it = (ItemFrame) event.getEntity(); - stack = it.getItem(); - } else { - org.bukkit.entity.GlowItemFrame it = (org.bukkit.entity.GlowItemFrame) event.getEntity(); - stack = it.getItem(); - } - - if (stack != null) { - if (!ResPerm.bypass_container.hasPermission(player, 10000L) && !perms.playerHas(player, Flags.container, true)) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.container); - } - return; - } - } - - if (!perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true))) { - event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.destroy); - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + if (event.isCancelled()) + return; + + if (event.getEntityType() != EntityType.ENDER_CRYSTAL && !CMIEntity.isItemFrame(event.getEntity()) && !Utils.isArmorStandEntity(event.getEntityType())) + return; + + Entity dmgr = event.getDamager(); + + Player player = null; + if (dmgr instanceof Player) { + player = (Player) event.getDamager(); + } else if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { + player = (Player) ((Projectile) dmgr).getShooter(); + } else if ((dmgr instanceof Projectile) && (!(((Projectile) dmgr).getShooter() instanceof Player))) { + Location loc = event.getEntity().getLocation(); + FlagPermissions perm = plugin.getPermsByLoc(loc); + if (perm.has(Flags.destroy, FlagCombo.OnlyFalse)) + event.setCancelled(true); + return; + } else if (dmgr.getType() == EntityType.PRIMED_TNT || dmgr.getType() == EntityType.MINECART_TNT) { + + // Disabling listener if flag disabled globally + if (Flags.explode.isGlobalyEnabled()) { + FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); + if (perms.has(Flags.explode, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + } + } else if (dmgr.getType() == EntityType.WITHER_SKULL || dmgr.getType() == EntityType.WITHER) { + + // Disabling listener if flag disabled globally + if (Flags.witherdamage.isGlobalyEnabled()) { + FlagPermissions perms = plugin.getPermsByLoc(event.getEntity().getLocation()); + if (perms.has(Flags.witherdamage, FlagCombo.OnlyFalse)) { + event.setCancelled(true); + return; + } + } + } + + Location loc = event.getEntity().getLocation(); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (res == null) + return; + + if (isMonster(dmgr) && !res.getPermissions().has(Flags.destroy, false)) { + event.setCancelled(true); + return; + } + + if (player == null) + return; + + if (plugin.isResAdminOn(player)) + return; + + FlagPermissions perms = plugin.getPermsByLocForPlayer(loc, player); + + if (CMIEntity.isItemFrame(event.getEntity())) { + ItemStack stack = null; + if (event.getEntityType() == EntityType.ITEM_FRAME) { + ItemFrame it = (ItemFrame) event.getEntity(); + stack = it.getItem(); + } else { + org.bukkit.entity.GlowItemFrame it = (org.bukkit.entity.GlowItemFrame) event.getEntity(); + stack = it.getItem(); + } + + if (stack != null) { + if (!ResPerm.bypass_container.hasPermission(player, 10000L) && !perms.playerHas(player, Flags.container, true)) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.container); + } + return; + } + } + + if (!perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true))) { + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.destroy); + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityShootBowEvent(EntityShootBowEvent event) { - if (Version.isCurrentEqualOrLower(Version.v1_14_R1)) - return; + if (Version.isCurrentEqualOrLower(Version.v1_14_R1)) + return; - if (event.getBow() == null) - return; + if (event.getBow() == null) + return; - if (event.getBow().getType() != Material.CROSSBOW) - return; + if (event.getBow().getType() != Material.CROSSBOW) + return; - if (!(event.getEntity() instanceof Player)) - return; + if (!(event.getEntity() instanceof Player)) + return; - if (event.getProjectile().getType() == EntityType.FIREWORK) - event.getProjectile().setMetadata(CrossbowShooter, new FixedMetadataValue(plugin, event.getEntity().getUniqueId())); + if (event.getProjectile().getType() == EntityType.FIREWORK) + event.getProjectile().setMetadata(CrossbowShooter, new FixedMetadataValue(plugin, event.getEntity().getUniqueId())); } public static boolean canDamageEntity(Entity damager, Entity victim, boolean inform) { - boolean tamedAnimal = isTamed(victim); - ClaimedResidence area = Residence.getInstance().getResidenceManager().getByLoc(victim.getLocation()); - - if (area != null && victim instanceof Player && damager instanceof Player) { - if (area.getPermissions().has(Flags.overridepvp, false) || Residence.getInstance().getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, - FlagCombo.OnlyFalse)) { - return false; - } - } - - ClaimedResidence srcarea = null; - if (damager != null) { - srcarea = Residence.getInstance().getResidenceManager().getByLoc(damager.getLocation()); - } - boolean srcpvp = true; - boolean allowSnowBall = false; - boolean isSnowBall = false; - boolean isOnFire = false; - if (srcarea != null) { - srcpvp = srcarea.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone); - } + boolean tamedAnimal = isTamed(victim); + ClaimedResidence area = Residence.getInstance().getResidenceManager().getByLoc(victim.getLocation()); + + if (area != null && victim instanceof Player && damager instanceof Player) { + if (area.getPermissions().has(Flags.overridepvp, false) || Residence.getInstance().getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, + FlagCombo.OnlyFalse)) { + return false; + } + } + + ClaimedResidence srcarea = null; + if (damager != null) { + srcarea = Residence.getInstance().getResidenceManager().getByLoc(damager.getLocation()); + } + boolean srcpvp = true; + boolean allowSnowBall = false; + boolean isSnowBall = false; + boolean isOnFire = false; + if (srcarea != null) { + srcpvp = srcarea.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone); + } // ent = attackevent.getEntity(); - if ((victim instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) - .getShooter() instanceof Player))) || damager instanceof Firework) { - - Player attacker = null; - if (damager instanceof Player) { - attacker = (Player) damager; - } else if (damager instanceof Projectile) { - Projectile project = (Projectile) damager; - if (project.getType() == EntityType.SNOWBALL && srcarea != null) { - isSnowBall = true; - allowSnowBall = srcarea.getPermissions().has(Flags.snowball, FlagCombo.TrueOrNone); - } - if (project.getFireTicks() > 0) - isOnFire = true; - - attacker = (Player) ((Projectile) damager).getShooter(); - } else if (damager instanceof Firework) { - List meta = damager.getMetadata(CrossbowShooter); - if (meta != null && !meta.isEmpty()) { - try { - String uid = meta.get(0).asString(); - attacker = Bukkit.getPlayer(UUID.fromString(uid)); - } catch (Throwable e) { - } - } - } - - if (!(victim instanceof Player)) - return true; - - if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.getRaid().isUnderRaid() && area.getRaid().onSameTeam(attacker, (Player) victim) - && !ConfigManager.RaidFriendlyFire) { - return false; - } - - if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.getRaid().isUnderRaid() && !area.getRaid().onSameTeam(attacker, (Player) victim)) { - return true; - } - - if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && - srcarea.getPermissions().playerHas((Player) victim, Flags.friendlyfire, FlagCombo.OnlyFalse) && - srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { - - CMIActionBar.send(attacker, Residence.getInstance().getLM().getMessage(lm.General_NoFriendlyFire)); - if (isOnFire) - victim.setFireTicks(0); - return false; - } - - if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { - if (attacker != null && inform) - Residence.getInstance().msg(attacker, lm.General_NoPVPZone); - if (isOnFire) - victim.setFireTicks(0); - return false; - } - - /* Check for Player vs Player */ - if (area == null) { - /* World PvP */ - if (damager != null) - if (!Residence.getInstance().getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, FlagCombo.TrueOrNone)) { - if (attacker != null && inform) - Residence.getInstance().msg(attacker, lm.General_WorldPVPDisabled); - return false; - } - - /* Attacking from safe zone */ - if (attacker != null) { - FlagPermissions aPerm = Residence.getInstance().getPermsByLoc(attacker.getLocation()); - if (!aPerm.has(Flags.pvp, FlagCombo.TrueOrNone)) { - if (inform) - Residence.getInstance().msg(attacker, lm.General_NoPVPZone); - return false; - } - } - } else { - /* Normal PvP */ - if (!isSnowBall && !area.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone) || isSnowBall && !allowSnowBall) { - if (attacker != null) - if (inform) - Residence.getInstance().msg(attacker, lm.General_NoPVPZone); - return false; - } - } - return true; - } else if ((victim instanceof Player || tamedAnimal) && (damager instanceof Creeper)) { - if (area == null && !Residence.getInstance().getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.creeper, true) || area != null && !area.getPermissions().has(Flags.creeper, - true)) { - return false; - } - } - return true; + if ((victim instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) + .getShooter() instanceof Player))) || damager instanceof Firework) { + + Player attacker = null; + if (damager instanceof Player) { + attacker = (Player) damager; + } else if (damager instanceof Projectile) { + Projectile project = (Projectile) damager; + if (project.getType() == EntityType.SNOWBALL && srcarea != null) { + isSnowBall = true; + allowSnowBall = srcarea.getPermissions().has(Flags.snowball, FlagCombo.TrueOrNone); + } + if (project.getFireTicks() > 0) + isOnFire = true; + + attacker = (Player) ((Projectile) damager).getShooter(); + } else if (damager instanceof Firework) { + List meta = damager.getMetadata(CrossbowShooter); + if (meta != null && !meta.isEmpty()) { + try { + String uid = meta.get(0).asString(); + attacker = Bukkit.getPlayer(UUID.fromString(uid)); + } catch (Throwable e) { + } + } + } + + if (!(victim instanceof Player)) + return true; + + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.getRaid().isUnderRaid() && area.getRaid().onSameTeam(attacker, (Player) victim) + && !ConfigManager.RaidFriendlyFire) { + return false; + } + + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.getRaid().isUnderRaid() && !area.getRaid().onSameTeam(attacker, (Player) victim)) { + return true; + } + + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && + srcarea.getPermissions().playerHas((Player) victim, Flags.friendlyfire, FlagCombo.OnlyFalse) && + srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { + + CMIActionBar.send(attacker, Residence.getInstance().getLM().getMessage(lm.General_NoFriendlyFire)); + if (isOnFire) + victim.setFireTicks(0); + return false; + } + + if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { + if (attacker != null && inform) + Residence.getInstance().msg(attacker, lm.General_NoPVPZone); + if (isOnFire) + victim.setFireTicks(0); + return false; + } + + /* Check for Player vs Player */ + if (area == null) { + /* World PvP */ + if (damager != null) + if (!Residence.getInstance().getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, FlagCombo.TrueOrNone)) { + if (attacker != null && inform) + Residence.getInstance().msg(attacker, lm.General_WorldPVPDisabled); + return false; + } + + /* Attacking from safe zone */ + if (attacker != null) { + FlagPermissions aPerm = Residence.getInstance().getPermsByLoc(attacker.getLocation()); + if (!aPerm.has(Flags.pvp, FlagCombo.TrueOrNone)) { + if (inform) + Residence.getInstance().msg(attacker, lm.General_NoPVPZone); + return false; + } + } + } else { + /* Normal PvP */ + if (!isSnowBall && !area.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone) || isSnowBall && !allowSnowBall) { + if (attacker != null) + if (inform) + Residence.getInstance().msg(attacker, lm.General_NoPVPZone); + return false; + } + } + return true; + } else if ((victim instanceof Player || tamedAnimal) && (damager instanceof Creeper)) { + if (area == null && !Residence.getInstance().getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.creeper, true) || area != null && !area.getPermissions().has(Flags.creeper, + true)) { + return false; + } + } + return true; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamage(EntityDamageEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; - Entity ent = event.getEntity(); - if (ent.hasMetadata("NPC")) - return; - - boolean tamedAnimal = isTamed(ent); - ClaimedResidence area = plugin.getResidenceManager().getByLoc(ent.getLocation()); - /* Living Entities */ - if (event instanceof EntityDamageByEntityEvent) { - EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; - Entity damager = attackevent.getDamager(); - - if (area != null && ent instanceof Player && damager instanceof Player) { - if (area.getPermissions().has(Flags.overridepvp, false) || plugin.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, - FlagCombo.OnlyFalse)) { - Player player = (Player) ent; - Damageable damage = player; - damage.damage(event.getDamage()); - damage.setVelocity(damager.getLocation().getDirection()); - event.setCancelled(true); - return; - } - } - - ClaimedResidence srcarea = null; - if (damager != null) { - srcarea = plugin.getResidenceManager().getByLoc(damager.getLocation()); - } - boolean srcpvp = true; - boolean allowSnowBall = false; - boolean isSnowBall = false; - boolean isOnFire = false; - if (srcarea != null) { - srcpvp = srcarea.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone); - } - - ent = attackevent.getEntity(); - if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) - .getShooter() instanceof Player))) && event.getCause() != DamageCause.FALL || damager instanceof Firework) { - - Player attacker = null; - if (damager instanceof Player) { - attacker = (Player) damager; - } else if (damager instanceof Projectile) { - Projectile project = (Projectile) damager; - if (project.getType() == EntityType.SNOWBALL && srcarea != null) { - isSnowBall = true; - allowSnowBall = srcarea.getPermissions().has(Flags.snowball, FlagCombo.TrueOrNone); - } - if (project.getFireTicks() > 0) - isOnFire = true; - - ProjectileSource shooter = ((Projectile) damager).getShooter(); - if (shooter instanceof Player) - attacker = (Player) shooter; - } else if (damager instanceof Firework) { - List meta = damager.getMetadata(CrossbowShooter); - if (meta != null && !meta.isEmpty()) { - try { - String uid = meta.get(0).asString(); - attacker = Bukkit.getPlayer(UUID.fromString(uid)); - } catch (Throwable e) { - } - } - } - - if (!(ent instanceof Player)) - return; - - if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.getRaid().isUnderRaid() && area.getRaid().onSameTeam(attacker, (Player) ent) - && !ConfigManager.RaidFriendlyFire) { - event.setCancelled(true); - } - - if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.getRaid().isUnderRaid() && !area.getRaid().onSameTeam(attacker, (Player) ent)) { - return; - } - - if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && - srcarea.getPermissions().playerHas((Player) ent, Flags.friendlyfire, FlagCombo.OnlyFalse) && - srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { - - CMIActionBar.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); - } - - if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { - if (attacker != null) - plugin.msg(attacker, lm.General_NoPVPZone); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); - return; - } - - /* Check for Player vs Player */ - if (area == null) { - /* World PvP */ - if (damager != null) - if (!plugin.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, FlagCombo.TrueOrNone)) { - if (attacker != null) - plugin.msg(attacker, lm.General_WorldPVPDisabled); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); - return; - } - - /* Attacking from safe zone */ - if (attacker != null) { - FlagPermissions aPerm = plugin.getPermsByLoc(attacker.getLocation()); - if (!aPerm.has(Flags.pvp, FlagCombo.TrueOrNone)) { - plugin.msg(attacker, lm.General_NoPVPZone); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); - return; - } - } - } else { - /* Normal PvP */ - if (!isSnowBall && !area.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone) || isSnowBall && !allowSnowBall) { - if (attacker != null) - plugin.msg(attacker, lm.General_NoPVPZone); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); - return; - } - } - return; - } else if ((ent instanceof Player || tamedAnimal) && (damager instanceof Creeper)) { - if (area == null && !plugin.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.creeper, true)) { - event.setCancelled(true); - } else if (area != null && !area.getPermissions().has(Flags.creeper, true)) { - event.setCancelled(true); - } - } - } - if (area == null) { - if (!plugin.getWorldFlags().getPerms(ent.getWorld().getName()).has(Flags.damage, true) && (ent instanceof Player || tamedAnimal)) { - event.setCancelled(true); - } - } else { - if (!area.getPermissions().has(Flags.damage, true) && (ent instanceof Player || tamedAnimal)) { - event.setCancelled(true); - } - } - if (event.isCancelled()) { - /* Put out a fire on a player */ - if ((ent instanceof Player || tamedAnimal) && (event.getCause() == EntityDamageEvent.DamageCause.FIRE || event - .getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) { - ent.setFireTicks(0); - } - } + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; + Entity ent = event.getEntity(); + if (ent.hasMetadata("NPC")) + return; + + boolean tamedAnimal = isTamed(ent); + ClaimedResidence area = plugin.getResidenceManager().getByLoc(ent.getLocation()); + /* Living Entities */ + if (event instanceof EntityDamageByEntityEvent) { + EntityDamageByEntityEvent attackevent = (EntityDamageByEntityEvent) event; + Entity damager = attackevent.getDamager(); + + if (area != null && ent instanceof Player && damager instanceof Player) { + if (area.getPermissions().has(Flags.overridepvp, false) || plugin.getConfigManager().isOverridePvp() && area.getPermissions().has(Flags.pvp, + FlagCombo.OnlyFalse)) { + Player player = (Player) ent; + Damageable damage = player; + damage.damage(event.getDamage()); + damage.setVelocity(damager.getLocation().getDirection()); + event.setCancelled(true); + return; + } + } + + ClaimedResidence srcarea = null; + if (damager != null) { + srcarea = plugin.getResidenceManager().getByLoc(damager.getLocation()); + } + boolean srcpvp = true; + boolean allowSnowBall = false; + boolean isSnowBall = false; + boolean isOnFire = false; + if (srcarea != null) { + srcpvp = srcarea.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone); + } + + ent = attackevent.getEntity(); + if ((ent instanceof Player || tamedAnimal) && (damager instanceof Player || (damager instanceof Projectile && (((Projectile) damager) + .getShooter() instanceof Player))) && event.getCause() != DamageCause.FALL || damager instanceof Firework) { + + Player attacker = null; + if (damager instanceof Player) { + attacker = (Player) damager; + } else if (damager instanceof Projectile) { + Projectile project = (Projectile) damager; + if (project.getType() == EntityType.SNOWBALL && srcarea != null) { + isSnowBall = true; + allowSnowBall = srcarea.getPermissions().has(Flags.snowball, FlagCombo.TrueOrNone); + } + if (project.getFireTicks() > 0) + isOnFire = true; + + ProjectileSource shooter = ((Projectile) damager).getShooter(); + if (shooter instanceof Player) + attacker = (Player) shooter; + } else if (damager instanceof Firework) { + List meta = damager.getMetadata(CrossbowShooter); + if (meta != null && !meta.isEmpty()) { + try { + String uid = meta.get(0).asString(); + attacker = Bukkit.getPlayer(UUID.fromString(uid)); + } catch (Throwable e) { + } + } + } + + if (!(ent instanceof Player)) + return; + + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.getRaid().isUnderRaid() && area.getRaid().onSameTeam(attacker, (Player) ent) + && !ConfigManager.RaidFriendlyFire) { + event.setCancelled(true); + } + + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && area.getRaid().isUnderRaid() && !area.getRaid().onSameTeam(attacker, (Player) ent)) { + return; + } + + if (srcarea != null && area != null && srcarea.equals(area) && attacker != null && + srcarea.getPermissions().playerHas((Player) ent, Flags.friendlyfire, FlagCombo.OnlyFalse) && + srcarea.getPermissions().playerHas(attacker, Flags.friendlyfire, FlagCombo.OnlyFalse)) { + + CMIActionBar.send(attacker, plugin.getLM().getMessage(lm.General_NoFriendlyFire)); + if (isOnFire) + ent.setFireTicks(0); + event.setCancelled(true); + } + + if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { + if (attacker != null) + plugin.msg(attacker, lm.General_NoPVPZone); + if (isOnFire) + ent.setFireTicks(0); + event.setCancelled(true); + return; + } + + /* Check for Player vs Player */ + if (area == null) { + /* World PvP */ + if (damager != null) + if (!plugin.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, FlagCombo.TrueOrNone)) { + if (attacker != null) + plugin.msg(attacker, lm.General_WorldPVPDisabled); + if (isOnFire) + ent.setFireTicks(0); + event.setCancelled(true); + return; + } + + /* Attacking from safe zone */ + if (attacker != null) { + FlagPermissions aPerm = plugin.getPermsByLoc(attacker.getLocation()); + if (!aPerm.has(Flags.pvp, FlagCombo.TrueOrNone)) { + plugin.msg(attacker, lm.General_NoPVPZone); + if (isOnFire) + ent.setFireTicks(0); + event.setCancelled(true); + return; + } + } + } else { + /* Normal PvP */ + if (!isSnowBall && !area.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone) || isSnowBall && !allowSnowBall) { + if (attacker != null) + plugin.msg(attacker, lm.General_NoPVPZone); + if (isOnFire) + ent.setFireTicks(0); + event.setCancelled(true); + return; + } + } + return; + } else if ((ent instanceof Player || tamedAnimal) && (damager instanceof Creeper)) { + if (area == null && !plugin.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.creeper, true)) { + event.setCancelled(true); + } else if (area != null && !area.getPermissions().has(Flags.creeper, true)) { + event.setCancelled(true); + } + } + } + if (area == null) { + if (!plugin.getWorldFlags().getPerms(ent.getWorld().getName()).has(Flags.damage, true) && (ent instanceof Player || tamedAnimal)) { + event.setCancelled(true); + } + } else { + if (!area.getPermissions().has(Flags.damage, true) && (ent instanceof Player || tamedAnimal)) { + event.setCancelled(true); + } + } + if (event.isCancelled()) { + /* Put out a fire on a player */ + if ((ent instanceof Player || tamedAnimal) && (event.getCause() == EntityDamageEvent.DamageCause.FIRE || event + .getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) { + ent.setFireTicks(0); + } + } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerInteractAtFish(PlayerInteractEntityEvent event) { - if (Version.isCurrentLower(Version.v1_12_R1)) - return; - Player player = event.getPlayer(); - if (Residence.getInstance().isResAdminOn(player)) - return; + if (Version.isCurrentLower(Version.v1_12_R1)) + return; + Player player = event.getPlayer(); + if (Residence.getInstance().isResAdminOn(player)) + return; - Entity ent = event.getRightClicked(); - if (!(ent instanceof org.bukkit.entity.Fish)) - return; + Entity ent = event.getRightClicked(); + if (!(ent instanceof org.bukkit.entity.Fish)) + return; - ItemStack iih = CMIItemStack.getItemInMainHand(player); - if (iih == null) - return; + ItemStack iih = CMIItemStack.getItemInMainHand(player); + if (iih == null) + return; - if (!CMIMaterial.get(iih).equals(CMIMaterial.WATER_BUCKET)) - return; + if (!CMIMaterial.get(iih).equals(CMIMaterial.WATER_BUCKET)) + return; - FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(ent.getLocation(), player); - if (!perms.playerHas(player, Flags.animalkilling, FlagCombo.TrueOrNone)) { - event.setCancelled(true); - Residence.getInstance().msg(player, lm.Flag_Deny, Flags.animalkilling); - } + if (!perms.playerHas(player, Flags.animalkilling, FlagCombo.TrueOrNone)) { + event.setCancelled(true); + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.animalkilling); + } } } From e9ce5b79ad1c3389b66c3323e9bfa2bcaed322b7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 25 May 2023 15:38:17 +0300 Subject: [PATCH 1030/1142] Lets make more clear which flag group is used for padd sub command --- src/com/bekvon/bukkit/residence/ConfigManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 4dcedc35d..d84ab872b 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -506,6 +506,7 @@ void UpdateFlagFile() { cfg.addComment("Global.CreatorDefault", "These are default flags applied to the residence creator of any group."); cfg.addComment("Global.RentedDefault", "These are default flags applied to the residence renter of any group."); cfg.addComment("Global.GroupedFlags", "These are grouped flags, so when using /res pset nickname redstone true, player will get all flags in list, same when setting to false or removing them."); + cfg.addComment("Global.GroupedFlags.trusted", "This group of flags will be used for padd sub command"); cfg.addComment("Global.TotalFlagDisabling", "Completely disables defined flag which will no longer be accesable even with resadmin command", "Can save some of the server processing resources if you dont want to utilize specific checks for specific flags"); cfg.addComment("Global.GroupDefault", "These are default group flags applied to a residence made by a user of any group."); From e5426859660ac9171bcc93caf068d9c138a42650 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 25 May 2023 16:37:40 +0300 Subject: [PATCH 1031/1142] Improvement for gset command --- .../bukkit/residence/commands/gset.java | 90 +++++++++++++------ .../residence/protection/FlagPermissions.java | 2 +- .../protection/ResidencePermissions.java | 32 +++++-- 3 files changed, 88 insertions(+), 36 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/gset.java b/src/com/bekvon/bukkit/residence/commands/gset.java index 2120a08df..1cf126850 100644 --- a/src/com/bekvon/bukkit/residence/commands/gset.java +++ b/src/com/bekvon/bukkit/residence/commands/gset.java @@ -5,48 +5,84 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; + +import net.Zrips.CMILib.FileHandler.ConfigReader; public class gset implements cmd { @Override @CommandAnnotation(simple = true, priority = 4500) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - if (args.length == 3) { - ClaimedResidence area = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().setGroupFlag(player, args[0], args[1], args[2], resadmin); - } else { - plugin.msg(player, lm.Invalid_Area); - } - return true; - } else if (args.length == 4) { - ClaimedResidence area = plugin.getResidenceManager().getByName(args[0]); - if (area != null) { - area.getPermissions().setGroupFlag(player, args[1], args[2], args[3], resadmin); - } else { - plugin.msg(player, lm.Invalid_Residence); - } - return true; - } - return false; + if (!(sender instanceof Player)) + return false; + + String residenceName = null; + String flagGroup = null; + Flags flag = null; + FlagState state = null; + + for (String one : args) { + + if (flagGroup == null && plugin.getPermissionManager().hasGroup(one)) { + flagGroup = one; + continue; + } + + if (flag == null) { + flag = Flags.getFlag(one); + if (flag != null) + continue; + } + + if (state == null) { + FlagState s = FlagPermissions.stringToFlagState(one); + if (!s.equals(FlagState.INVALID)) { + state = s; + continue; + } + } + + if (residenceName == null) + residenceName = one; + } + + ClaimedResidence area = null; + Player player = (Player) sender; + + if (residenceName != null) + area = plugin.getResidenceManager().getByName(args[0]); + else + area = plugin.getResidenceManager().getByLoc(player.getLocation()); + + if (area == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + if (flagGroup == null) { + Residence.getInstance().msg(player, lm.Invalid_Group); + return true; + } + + area.getPermissions().setGroupFlag(player, flagGroup, flag, state, resadmin); + + return true; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Set flags on a specific group for a Residence."); - c.get("Info", Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?")); - LocaleManager.addTabCompleteMain(this, "[residence]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Set flags on a specific group for a Residence."); + c.get("Info", Arrays.asList("&eUsage: &6/res gset [group] [flag] [true/false/remove]", "To see a list of flags, use /res flags ?")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index d4188d6c3..7748b2139 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -179,7 +179,7 @@ public static void removeFlagFromFlagGroup(String group, String flag) { } public static boolean flagGroupExists(String group) { - return validFlagGroups.containsKey(group); + return validFlagGroups.containsKey(group.toLowerCase()); } public static void initValidFlags() { diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index ed2b2de61..bcc368a58 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -425,30 +425,46 @@ public boolean setPlayerFlag(CommandSender sender, String targetPlayer, String f } public boolean setGroupFlag(Player player, String group, String flag, String flagstate, boolean resadmin) { - Flags f = Flags.getFlag(flag); + FlagState state = FlagPermissions.stringToFlagState(flagstate); + return setGroupFlag(player, group, f, state, resadmin); + } + + public boolean setGroupFlag(Player player, String group, Flags f, FlagState flagstate, boolean resadmin) { + + String flag = null; if (f != null) flag = f.toString(); + if (flag == null) { + Residence.getInstance().msg(player, lm.Invalid_Flag); + return false; + } + + if (flagstate.equals(FlagState.INVALID)) { + Residence.getInstance().msg(player, lm.Invalid_FlagState); + return false; + } + if (this.residence.getRaid().isRaidInitialized() && !resadmin) { Residence.getInstance().msg(player, lm.Raid_noFlagChange); return false; } group = group.toLowerCase(); - if (validFlagGroups.containsKey(flag)) - return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin); - FlagState state = FlagPermissions.stringToFlagState(flagstate); - if (checkCanSetFlag(player, flag, state, false, resadmin)) { - if (Residence.getInstance().getPermissionManager().hasGroup(group)) { + if (validFlagGroups.containsKey(flag)) { + return this.setFlagGroupOnGroup(player, flag, group, flagstate.toString(), resadmin); + } + if (checkCanSetFlag(player, flag, flagstate, false, resadmin)) { + if (Residence.getInstance().getPermissionManager().hasGroup(group)) { if (!isEventCallsSuspended()) { - ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group); + ResidenceFlagChangeEvent fc = new ResidenceFlagChangeEvent(residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, flagstate, group); Residence.getInstance().getServ().getPluginManager().callEvent(fc); if (fc.isCancelled()) return false; } - if (super.setGroupFlag(group, flag, state)) { + if (super.setGroupFlag(group, flag, flagstate)) { Residence.getInstance().msg(player, lm.Flag_Set, flag, residence.getName(), flagstate); return true; } From 264667b632ad90762c34d691e7db8281b5991b17 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 12 Jun 2023 15:23:53 +0300 Subject: [PATCH 1032/1142] Sign edit inside residence protection for 1.20 servers --- .../bekvon/bukkit/residence/Residence.java | 4 ++ .../listeners/ResidencePlayerListener.java | 1 + .../ResidencePlayerListener1_20.java | 52 +++++++++++++++++++ .../protection/ClaimedResidence.java | 2 - src/plugin.yml | 2 +- 5 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 98d46a15f..b9270b75e 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -84,6 +84,7 @@ import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_15; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_16; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_17; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_20; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_9; import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; @@ -722,6 +723,9 @@ public void run() { pm.registerEvents(new ResidencePlayerListener1_16(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_17_R1)) pm.registerEvents(new ResidencePlayerListener1_17(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_20_R1)) + pm.registerEvents(new ResidencePlayerListener1_20(this), this); + elistener = new ResidenceEntityListener(this); flistener = new ResidenceFixesListener(); slistener = new ResidenceRaidListener(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 56417008d..98a9e938c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -751,6 +751,7 @@ public void onSignInteract(PlayerInteractEvent event) { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onSignCreate(SignChangeEvent event) { + // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java new file mode 100644 index 000000000..dd11f6939 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java @@ -0,0 +1,52 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractEvent; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.FlagPermissions; + +import net.Zrips.CMILib.Items.CMIMaterial; + +public class ResidencePlayerListener1_20 implements Listener { + + private Residence plugin; + + public ResidencePlayerListener1_20(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onSignInteract(PlayerInteractEvent event) { + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + + Block block = event.getClickedBlock(); + + if (block == null || !CMIMaterial.isSign(block.getType())) + return; + + Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; + + FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + + boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); + if (hasplace) + return; + + event.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, Flags.build); + + } +} diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index d7a184d19..76521e550 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1871,8 +1871,6 @@ public static ClaimedResidence load(String worldName, Map root, } } - CMIDebug.c(res.enterMessage, res.leaveMessage); - res.parent = parent; if (root.get("TPLoc") instanceof String) { diff --git a/src/plugin.yml b/src/plugin.yml index cb28cd129..7f2433c44 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.1.2 +version: 5.1.1.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 8f365401ba4cff04c8ea879ab1700c259b87b23e Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2023 11:58:48 +0300 Subject: [PATCH 1033/1142] Requiring container flag for bookshelf's --- src/com/bekvon/bukkit/residence/protection/FlagPermissions.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 7748b2139..ad6eb1656 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -278,6 +278,8 @@ public static void initValidFlags() { addMaterialToUseFlag(CMIMaterial.SMOKER.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.COMPOSTER.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.STONECUTTER.getMaterial(), Flags.container); + + addMaterialToUseFlag(CMIMaterial.CHISELED_BOOKSHELF.getMaterial(), Flags.container); addMaterialToUseFlag(Material.DISPENSER, Flags.container); // addMaterialToUseFlag(CMIMaterial.CAKE.getMaterial(), Flags.cake); From c98483b9166a0822c76787cf2dd4ab28f6e5450f Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2023 12:06:40 +0300 Subject: [PATCH 1034/1142] Returning money to res owner from res bank on removal --- .../bekvon/bukkit/residence/ConfigManager.java | 8 ++++++++ .../residence/protection/ResidenceManager.java | 15 ++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index d84ab872b..34310b302 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -50,6 +50,7 @@ public class ConfigManager { protected String defaultGroup; protected boolean useLeases; protected boolean ResMoneyBack; + private boolean ResBankBack; protected boolean enableEconomy; protected boolean chargeOnCreation; protected boolean chargeOnExpansion; @@ -1086,6 +1087,9 @@ public void UpdateConfigFile() { c.addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); ResMoneyBack = c.get("Global.ResMoneyBack", false); + + c.addComment("Global.ResBankBack", "Enable / Disable money returning from residence bank on residence removal."); + ResBankBack = c.get("Global.ResBankBack", true); c.addComment("Global.LeaseCheckInterval", "The interval, in minutes, between residence lease checks (if leases are enabled)."); leaseCheckInterval = c.get("Global.LeaseCheckInterval", 10); @@ -2312,6 +2316,10 @@ public int getSignsMaxPerResidence() { return SignsMaxPerResidence; } + public boolean isResBankBack() { + return ResBankBack; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 53028f5c0..b400ba901 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -90,14 +90,14 @@ public ClaimedResidence getByLoc(Location loc) { if (loc == null) return null; - + World world = loc.getWorld(); - + if (world == null) return null; - + String worldName = world.getName(); - + if (worldName == null) return null; @@ -689,7 +689,7 @@ public void run() { plugin.getRentManager().removeRentable(name); plugin.getTransactionManager().removeFromSale(name); - if (!res.isServerLand()) + if (!res.isServerLand()) { if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { double chargeamount = res.getWorth(); if (!res.isOwner(player)) { @@ -701,6 +701,11 @@ else if (rPlayer != null) plugin.getTransactionManager().giveEconomyMoney(rPlayer.getPlayerName(), chargeamount); } } + + if (res.getBank().getStoredMoneyD() > 0 && plugin.getConfigManager().isResBankBack()) { + plugin.getTransactionManager().giveEconomyMoney(res.getOwner(), res.getBank().getStoredMoneyD()); + } + } } public void removeAllByOwner(String owner) { From a7962c867d0042a038c5bef9f7fbea161659b347 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2023 12:12:01 +0300 Subject: [PATCH 1035/1142] Fix for list command while performed from console --- .../bekvon/bukkit/residence/protection/PlayerManager.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 02634112e..ebbda0c31 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -21,6 +21,8 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.permissions.PermissionGroup; +import net.Zrips.CMILib.Logs.CMIDebug; + public class PlayerManager implements ResidencePlayerInterface { private ConcurrentHashMap players = new ConcurrentHashMap(); private ConcurrentHashMap playersUuid = new ConcurrentHashMap(); @@ -296,6 +298,10 @@ public ResidencePlayer getResidencePlayer(Player player) { public ResidencePlayer getResidencePlayer(String player) { if (player == null) return null; + + if (player.equalsIgnoreCase("CONSOLE")) + return null; + Player p = Bukkit.getPlayer(player); if (p != null) return getResidencePlayer(p); From c86e3ede93cab61b4f85180343b3ebd8dbc4f00c Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2023 12:26:35 +0300 Subject: [PATCH 1036/1142] %playerDisplay for enter/leave messages --- .../residence/listeners/ResidencePlayerListener.java | 1 + src/groups.yml | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 98a9e938c..250518ce9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2654,6 +2654,7 @@ private StuckInfo updateStuckTeleport(Player player, Location loc) { public String insertMessages(Player player, ClaimedResidence res, String message) { try { + message = message.replace("%playerDisplay", player.getDisplayName()); message = message.replace("%player", player.getName()); message = message.replace("%owner", res.getPermissions().getOwner()); message = message.replace("%residence", res.getName()); diff --git a/src/groups.yml b/src/groups.yml index 463bdbfa3..e50ed689f 100644 --- a/src/groups.yml +++ b/src/groups.yml @@ -66,7 +66,12 @@ Groups: # Leaving the message blank will disable it. DefaultEnter: "Welcome %player to %residence, owned by %owner." # The default leave message to apply to new Residences created by players in this group. - # Use %zone if you want to include only current residence name without including parent zones into name + # %player if you want to include players name + # %playerDisplay if you want to include players display name + # %owner if you want to include residence owner name + # %residence if you want to include residence name + # %zone if you want to include only current residence name without including parent zones into name + # # Leaving the message blank will disable it. DefaultLeave: "Now leaving %residence." # Options relating to the Lease system. From 88b9810986e53e0612a50b7e535555d80422b663 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2023 12:49:02 +0300 Subject: [PATCH 1037/1142] New brush flag. --- .../bukkit/residence/containers/Flags.java | 1 + .../listeners/ResidencePlayerListener.java | 38 ++++++++++++------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index ca07f6277..2ae31e787 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -23,6 +23,7 @@ public enum Flags { build(CMIMaterial.BRICKS, FlagMode.Both, "Allows or denys building", false), burn(CMIMaterial.TORCH, FlagMode.Residence, "Allows or denys Mob combustion in residences", true), button(CMIMaterial.OAK_BUTTON, FlagMode.Both, "Allows or denys players to use buttons", true), + brush(CMIMaterial.BRUSH, FlagMode.Both, "Allows or denys block brushing", true), cake(CMIMaterial.CAKE, FlagMode.Both, "Allows or denys players to eat cake", true), canimals(CMIMaterial.SHEEP_SPAWN_EGG, FlagMode.Residence, "Allows or denys custom animal spawns", true), chorustp(CMIMaterial.CHORUS_FRUIT, FlagMode.Both, "Allow or disallow teleporting to the residence with chorus fruit", true), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 250518ce9..ccd2a3ab2 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -751,7 +751,7 @@ public void onSignInteract(PlayerInteractEvent event) { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onSignCreate(SignChangeEvent event) { - + // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -964,6 +964,7 @@ private boolean isContainer(Material mat, Block block) { } private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { + switch (mat.name()) { case "ITEM_FRAME": case "CAKE": @@ -991,6 +992,8 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { case "ENCHANTING_TABLE": case "DAYLIGHT_DETECTOR": case "DAYLIGHT_DETECTOR_INVERTED": + case "SUSPICIOUS_GRAVEL": + case "SUSPICIOUS_SAND": return true; default: break; @@ -1353,7 +1356,6 @@ public void onPlayerInteract(PlayerInteractEvent event) { && (!heldItem.isDye() && !heldItem.equals(CMIMaterial.GLOW_INK_SAC)) && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { return; } - if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; @@ -1393,13 +1395,23 @@ public void onPlayerInteract(PlayerInteractEvent event) { return; } } - if (placingMinecart(block, iih)) { - if (!perms.playerHas(player, Flags.build, true)) { - plugin.msg(player, lm.Flag_Deny, Flags.build); + if (placingMinecart(block, iih) && !perms.playerHas(player, Flags.build, true)) { + plugin.msg(player, lm.Flag_Deny, Flags.build); + event.setCancelled(true); + return; + + } + + if (heldItem.equals(CMIMaterial.BRUSH)) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (res != null && !res.getPermissions().playerHas(player, Flags.brush, FlagCombo.OnlyTrue)) { + plugin.msg(player, lm.Flag_Deny, Flags.brush); event.setCancelled(true); return; + } } + } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { @@ -1407,14 +1419,12 @@ public void onPlayerInteract(PlayerInteractEvent event) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - if (res != null && res.getRaid().isUnderRaid()) { - if (res.getRaid().isDefender(player) && !ConfigManager.RaidDefenderContainerUsage) { - Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); - if (result != null && result.equals(Flags.container)) { - event.setCancelled(true); - plugin.msg(player, lm.Raid_cantDo); - return; - } + if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isDefender(player) && !ConfigManager.RaidDefenderContainerUsage) { + Flags result = FlagPermissions.getMaterialUseFlagList().get(mat); + if (result != null && result.equals(Flags.container)) { + event.setCancelled(true); + plugin.msg(player, lm.Raid_cantDo); + return; } } @@ -2522,7 +2532,7 @@ public void run() { player.closeInventory(); if (!move) return false; - + if (lastLoc != null && CMIMaterial.isAir(lastLoc.getBlock().getType())) { Long last = lastUpdate.get(player.getUniqueId()); // Fail safe in case we are triggering teleportation event check with this teleportation, we should teleport player outside residence instead of its repeating teleportation to avoid stack overflow From 202ceccd18e1b9b9539b6239602f86113734d5cb Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2023 12:57:59 +0300 Subject: [PATCH 1038/1142] UUID null check --- .../bekvon/bukkit/residence/containers/ResidencePlayer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 0440574d5..5b1100aef 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -296,7 +296,8 @@ public void onQuit() { } private void updatePlayer() { - player = Bukkit.getPlayer(this.uuid); + if (this.uuid != null) + player = Bukkit.getPlayer(this.uuid); if (player != null) updatePlayer(player); if (player != null && player.isOnline()) From 1e40dc86115ba403806b1c9d798094037143a047 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2023 13:11:16 +0300 Subject: [PATCH 1039/1142] Fix for issue with higher money charge amounts --- .../bukkit/residence/commands/expand.java | 171 +++++++++--------- .../residence/protection/CuboidArea.java | 2 +- 2 files changed, 87 insertions(+), 86 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 05641f4e4..0d38e6622 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -15,101 +15,102 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; public class expand implements cmd { @Override @CommandAnnotation(simple = true, priority = 2000) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - ClaimedResidence res = null; - if (args.length == 1) - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - else if (args.length == 2) { - res = plugin.getResidenceManager().getByName(args[0]); - } else - return false; - - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - - if (res.getRaid().isRaidInitialized()) { - plugin.msg(sender, lm.Raid_cantDo); - return true; - } - - if (res.isSubzone() && !resadmin && !ResPerm.command_expand_subzone.hasPermission(player, lm.Subzone_CantExpand)) - return true; - - if (!res.isSubzone() && !resadmin && !ResPerm.command_$1.hasPermission(player, lm.Residence_CantExpandResidence, this.getClass().getSimpleName())) - return true; - - String resName = res.getName(); - CuboidArea area = null; - String areaName = null; - - if (args.length == 1) { - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - } else if (args.length == 2) { - areaName = res.isSubzone() ? plugin.getResidenceManager().getSubzoneNameByRes(res) : "main"; - area = res.getCuboidAreabyName(areaName); - } - - if (area != null) { - plugin.getSelectionManager().placeLoc1(player, area.getHighLocation(), false); - plugin.getSelectionManager().placeLoc2(player, area.getLowLocation(), false); - plugin.msg(player, lm.Select_Area, areaName, resName); - } else { - plugin.msg(player, lm.Area_NonExist); - return true; - } - int amount = -1; - try { - if (args.length == 1) - amount = Integer.parseInt(args[0]); - else if (args.length == 2) - amount = Integer.parseInt(args[1]); - } catch (Exception ex) { - plugin.msg(player, lm.Invalid_Amount); - return true; - } - - if (amount > 1000) { - plugin.msg(player, lm.Invalid_Amount); - return true; - } - - if (amount < 0) - amount = 1; - - plugin.getSelectionManager().modify(player, false, amount); - - if (plugin.getSelectionManager().hasPlacedBoth(player)) { - if (plugin.getWorldEdit() != null && plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { - plugin.getSelectionManager().worldEdit(player); - } - - res.replaceArea(player, plugin.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); - return true; - } - plugin.msg(player, lm.Select_Points); - - return false; + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + ClaimedResidence res = null; + if (args.length == 1) + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + else if (args.length == 2) { + res = plugin.getResidenceManager().getByName(args[0]); + } else + return false; + + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + + if (res.getRaid().isRaidInitialized()) { + plugin.msg(sender, lm.Raid_cantDo); + return true; + } + + if (res.isSubzone() && !resadmin && !ResPerm.command_expand_subzone.hasPermission(player, lm.Subzone_CantExpand)) + return true; + + if (!res.isSubzone() && !resadmin && !ResPerm.command_$1.hasPermission(player, lm.Residence_CantExpandResidence, this.getClass().getSimpleName())) + return true; + + String resName = res.getName(); + CuboidArea area = null; + String areaName = null; + + if (args.length == 1) { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } else if (args.length == 2) { + areaName = res.isSubzone() ? plugin.getResidenceManager().getSubzoneNameByRes(res) : "main"; + area = res.getCuboidAreabyName(areaName); + } + + if (area != null) { + plugin.getSelectionManager().placeLoc1(player, area.getHighLocation(), false); + plugin.getSelectionManager().placeLoc2(player, area.getLowLocation(), false); + plugin.msg(player, lm.Select_Area, areaName, resName); + } else { + plugin.msg(player, lm.Area_NonExist); + return true; + } + int amount = -1; + try { + if (args.length == 1) + amount = Integer.parseInt(args[0]); + else if (args.length == 2) + amount = Integer.parseInt(args[1]); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Amount); + return true; + } + + if (amount > 1000) { + plugin.msg(player, lm.Invalid_Amount); + return true; + } + + if (amount < 0) + amount = 1; + + plugin.getSelectionManager().modify(player, false, amount); + + if (plugin.getSelectionManager().hasPlacedBoth(player)) { + if (plugin.getWorldEdit() != null && plugin.getWorldEditTool().equals(plugin.getConfigManager().getSelectionTool())) { + plugin.getSelectionManager().worldEdit(player); + } + + res.replaceArea(player, plugin.getSelectionManager().getSelectionCuboid(player), areaName, resadmin); + return true; + } + plugin.msg(player, lm.Select_Points); + + return false; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Expands residence in direction you looking"); - c.get("Info", Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); - LocaleManager.addTabCompleteMain(this, "[residence]%%1", "1"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Expands residence in direction you looking"); + c.get("Info", Arrays.asList("&eUsage: &6/res expand (residence) [amount]", "Expands residence in direction you looking.", "Residence name is optional")); + LocaleManager.addTabCompleteMain(this, "[residence]%%1", "1"); } } diff --git a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java index 8daa0961d..e9216cc26 100644 --- a/src/com/bekvon/bukkit/residence/protection/CuboidArea.java +++ b/src/com/bekvon/bukkit/residence/protection/CuboidArea.java @@ -287,6 +287,6 @@ public void setLowVector(Vector lowLocation) { } public double getCost(PermissionGroup group) { - return (int) (getSize() * group.getCostPerBlock() * 100) / 100D; + return (long) (getSize() * group.getCostPerBlock() * 100) / 100D; } } From 5cd3d3c37dec44d99479a6d5841810986d0f4f89 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2023 13:14:12 +0300 Subject: [PATCH 1040/1142] Better info for residence worth values --- .../bekvon/bukkit/residence/protection/ResidenceManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index b400ba901..8d60e2341 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -812,7 +812,7 @@ else if (plugin.getConfigManager().isShortInfoUse() || sender instanceof Player) rm.show(sender); if (plugin.getEconomyManager() != null) { - plugin.msg(sender, lm.General_TotalWorth, res.getWorthByOwner(), res.getWorth()); + plugin.msg(sender, lm.General_TotalWorth, plugin.getEconomyManager().format(res.getWorthByOwner()), plugin.getEconomyManager().format(res.getWorth())); } if (res.getSubzonesAmount(false) > 0) From 168f2193624900f1e2774e73e0978c9ce5eeff4a Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2023 13:20:48 +0300 Subject: [PATCH 1041/1142] "Fix" for button hit check on older server versions --- .../bukkit/residence/listeners/ResidenceBlockListener.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index e5186dd4f..a519f6248 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -84,11 +84,14 @@ public ResidenceBlockListener(Residence residence) { } @EventHandler(priority = EventPriority.LOWEST) - public void onAnvilInventoryClick(ProjectileHitEvent e) { + public void onButtonHitWithProjectile(ProjectileHitEvent e) { // Disabling listener if flag disabled globally if (!Flags.button.isGlobalyEnabled()) return; + if (Version.isCurrentEqualOrLower(Version.v1_12_R1)) + return; + if (e.getHitBlock() == null) return; From b735a42d1d556c54c7bcd320507ce106625a7825 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2023 13:27:41 +0300 Subject: [PATCH 1042/1142] Including dripleafs under build flag when interacting with bone meal --- src/com/bekvon/bukkit/residence/ConfigManager.java | 3 +-- .../residence/listeners/ResidencePlayerListener.java | 12 ++++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 34310b302..eeba6c3d7 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -618,8 +618,7 @@ public void UpdateConfigFile() { "All Residence text comes from this file. (NOT DONE YET)"); language = c.get("Global.Language", "English"); - c.addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence.", - "You can change it to another item ID listed here: http://www.minecraftwiki.net/wiki/Data_values"); + c.addComment("Global.SelectionToolId", "Wooden Hoe is the default selection tool for Residence."); selectionTool = CMIMaterial.get(c.get("Global.SelectionToolId", CMIMaterial.WOODEN_HOE.name())); c.addComment("Global.Selection.IgnoreY", "By setting this to true, all selections will be made from bedrock to sky ignoring Y coordinates"); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ccd2a3ab2..b471c8319 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1377,8 +1377,16 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (heldItem.isDye() || heldItem.equals(CMIMaterial.GLOW_INK_SAC)) { CMIMaterial btype = CMIMaterial.get(block); - if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || btype == CMIMaterial.GRASS || btype.isSapling()) || - heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD || btype == CMIMaterial.MOSS_BLOCK || btype.isSign()) { + if (heldItem.equals(CMIMaterial.BONE_MEAL) && ( + btype == CMIMaterial.GRASS_BLOCK || + btype == CMIMaterial.GRASS || + btype.isSapling()) || + heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD || + btype == CMIMaterial.MOSS_BLOCK || + btype == CMIMaterial.BIG_DRIPLEAF_STEM || + btype == CMIMaterial.BIG_DRIPLEAF || + btype == CMIMaterial.SMALL_DRIPLEAF || + btype.isSign()) { FlagPermissions tperms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!tperms.playerHas(player, Flags.build, true)) { plugin.msg(player, lm.Flag_Deny, Flags.build); From c5d5e5db50a6ac77c129053e81da20be1d1fd84b Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Jun 2023 16:27:55 +0300 Subject: [PATCH 1043/1142] New Pl3xMap API support --- .../bukkit/residence/ConfigManager.java | 44 +- .../bekvon/bukkit/residence/Residence.java | 3 +- .../residence/pl3xmap/Pl3xMapLayer.java | 22 + .../residence/pl3xmap/Pl3xMapManager.java | 549 +++++++++--------- 4 files changed, 327 insertions(+), 291 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapLayer.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index eeba6c3d7..efc0ca806 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -38,6 +38,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.CMINumber; import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.Items.CMIMaterial; @@ -292,14 +293,16 @@ public class ConfigManager { public boolean Pl3xMapExcludeDefaultFlags; public boolean Pl3xMapHideHidden; public int Pl3xMapLayerSubZoneDepth; - public Color Pl3xMapBorderColor = new Color(125, 125, 125); - public double Pl3xMapBorderOpacity; + public int Pl3xBorderColor = 0; + public int Pl3xFillColor = 0; +// public Color Pl3xMapBorderColor = new Color(125, 125, 125); +// public double Pl3xMapBorderOpacity; public int Pl3xMapBorderWeight; - public Color Pl3xMapFillColor = new Color(125, 125, 125); - public double Pl3xMapFillOpacity; - public Color Pl3xMapFillForRent = new Color(125, 125, 125); - public Color Pl3xMapFillRented = new Color(125, 125, 125); - public Color Pl3xMapFillForSale = new Color(125, 125, 125); +// public Color Pl3xMapFillColor = new Color(125, 125, 125); +// public double Pl3xMapFillOpacity; + public int Pl3xMapFillForRent = 0; + public int Pl3xMapFillRented = 0; + public int Pl3xMapFillForSale = 0; public List Pl3xMapVisibleRegions; public List Pl3xMapHiddenRegions; // Pl3xMap @@ -443,6 +446,10 @@ public static List ColorsArray(List text, Boolean colorize) { return temp; } + private static int argb(int alpha, Color color) { + return alpha << 24 | color.getRed() << 16 | color.getGreen() << 8 | color.getBlue(); + } + void UpdateFlagFile() { File f = new File(plugin.getDataFolder(), "flags.yml"); @@ -1086,7 +1093,7 @@ public void UpdateConfigFile() { c.addComment("Global.ResMoneyBack", "Enable / Disable money returning on residence removal."); ResMoneyBack = c.get("Global.ResMoneyBack", false); - + c.addComment("Global.ResBankBack", "Enable / Disable money returning from residence bank on residence removal."); ResBankBack = c.get("Global.ResBankBack", true); @@ -1449,20 +1456,27 @@ public void UpdateConfigFile() { c.addComment("Pl3xMap.Border.Color", "Color of border. Pick color from this page http://www.w3schools.com/colors/colors_picker.asp"); - Pl3xMapFillColor = processColor(c.get("Pl3xMap.Border.Color", "#FF0000")); + Color Pl3xFill = processColor(c.get("Pl3xMap.Border.Color", "#FF0000")); c.addComment("Pl3xMap.Border.Opacity", "Transparency. 0.3 means that only 30% of color will be visible"); - Pl3xMapBorderOpacity = c.get("Pl3xMap.Border.Opacity", 0.3); + Double Pl3xMapBorderOpacity = c.get("Pl3xMap.Border.Opacity", 0.3); + + Pl3xFillColor = argb(CMINumber.clamp((int) (Pl3xMapBorderOpacity * 255), 0, 255), Pl3xFill); + c.addComment("Pl3xMap.Border.Weight", "Border thickness"); Pl3xMapBorderWeight = c.get("Pl3xMap.Border.Weight", 3); - Pl3xMapFillOpacity = c.get("Pl3xMap.Fill.Opacity", 0.3); + Double Pl3xMapFillOpacity = c.get("Pl3xMap.Fill.Opacity", 0.3); - Pl3xMapFillColor = processColor(c.get("Pl3xMap.Fill.Color", "#FF0000")); + Color Pl3xMapFillColor = processColor(c.get("Pl3xMap.Fill.Color", "#FF0000")); - Pl3xMapFillForRent = processColor(c.get("Pl3xMap.Fill.ForRent", "#33cc33")); - Pl3xMapFillRented = processColor(c.get("Pl3xMap.Fill.Rented", "#99ff33")); - Pl3xMapFillForSale = processColor(c.get("Pl3xMap.Fill.ForSale", "#0066ff")); + Pl3xBorderColor = argb(CMINumber.clamp((int) (Pl3xMapFillOpacity * 255), 0, 255), Pl3xMapFillColor); + Pl3xMapFillForRent = argb(CMINumber.clamp((int) (Pl3xMapFillOpacity * 255), 0, 255), processColor(c.get("Pl3xMap.Fill.ForRent", "#33cc33"))); + Pl3xMapFillRented = argb(CMINumber.clamp((int) (Pl3xMapFillOpacity * 255), 0, 255), processColor(c.get("Pl3xMap.Fill.Rented", "#99ff33"))); + Pl3xMapFillForSale = argb(CMINumber.clamp((int) (Pl3xMapFillOpacity * 255), 0, 255), processColor(c.get("Pl3xMap.Fill.ForSale", "#0066ff"))); + + CMIDebug.d(Pl3xFillColor, Pl3xMapFillForRent, Pl3xMapFillRented, Pl3xMapFillForSale); + c.addComment("Pl3xMap.VisibleRegions", "Shows only regions on this list"); Pl3xMapVisibleRegions = c.get("Pl3xMap.VisibleRegions", new ArrayList()); c.addComment("Pl3xMap.HiddenRegions", "Hides region on map even if its not hidden in game"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index b9270b75e..b087e9668 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -136,6 +136,7 @@ import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; +import net.pl3x.map.core.Pl3xMap; /** * @@ -796,7 +797,7 @@ public void run() { if (pl3xmap != null && getConfigManager().Pl3xMapUse) { Pl3xManager = new Pl3xMapManager(this); getServer().getPluginManager().registerEvents(new Pl3xMapListeners(this), this); - getPl3xManager().api = net.pl3x.map.api.Pl3xMapProvider.get(); + getPl3xManager().api = Pl3xMap.api(); getPl3xManager().activate(); } } catch (Throwable e) { diff --git a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapLayer.java b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapLayer.java new file mode 100644 index 000000000..43e3f59f4 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapLayer.java @@ -0,0 +1,22 @@ +package com.bekvon.bukkit.residence.pl3xmap; + +import com.bekvon.bukkit.residence.Residence; + +import libs.org.wildfly.common.annotation.NotNull; +import net.pl3x.map.core.markers.layer.WorldLayer; +import net.pl3x.map.core.world.World; + +public class Pl3xMapLayer extends WorldLayer { + + public static final String ID = "Residence"; + + public Pl3xMapLayer(@NotNull World world) { + super(ID, world, () -> ID); + + setShowControls(true); + setDefaultHidden(Residence.getInstance().getConfigManager().Pl3xMapHideByDefault); + setPriority(4); + setZIndex(63); + } + +} diff --git a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java index 219a02c59..fa33be362 100644 --- a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java +++ b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java @@ -1,6 +1,5 @@ package com.bekvon.bukkit.residence.pl3xmap; -import java.awt.Color; import java.util.HashMap; import java.util.List; import java.util.Map.Entry; @@ -21,17 +20,18 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Messages.CMIMessages; -import net.pl3x.map.api.Key; -import net.pl3x.map.api.LayerProvider; -import net.pl3x.map.api.MapWorld; -import net.pl3x.map.api.Pl3xMap; -import net.pl3x.map.api.Point; -import net.pl3x.map.api.Registry; -import net.pl3x.map.api.SimpleLayerProvider; -import net.pl3x.map.api.marker.Marker; -import net.pl3x.map.api.marker.MarkerOptions; -import net.pl3x.map.api.marker.MarkerOptions.FillRule; -import net.pl3x.map.api.marker.Rectangle; +import net.pl3x.map.core.Pl3xMap; +import net.pl3x.map.core.markers.Point; +import net.pl3x.map.core.markers.layer.Layer; +import net.pl3x.map.core.markers.layer.SimpleLayer; +import net.pl3x.map.core.markers.marker.Marker; +import net.pl3x.map.core.markers.marker.Rectangle; +import net.pl3x.map.core.markers.option.Fill; +import net.pl3x.map.core.markers.option.Fill.Type; +import net.pl3x.map.core.markers.option.Options; +import net.pl3x.map.core.markers.option.Stroke; +import net.pl3x.map.core.markers.option.Tooltip; +import net.pl3x.map.core.registry.Registry; public class Pl3xMapManager { Residence plugin; @@ -39,307 +39,306 @@ public class Pl3xMapManager { public Pl3xMap api; private int schedId = -1; -// SimpleLayerProvider provider = null; - HashMap providers = new HashMap(); + HashMap providers = new HashMap(); public Pl3xMapManager(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } public void fireUpdateAdd(final ClaimedResidence res, final int deep) { - if (api == null) - return; - if (res == null) - return; - - if (schedId != -1) - Bukkit.getServer().getScheduler().cancelTask(schedId); - - schedId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { - @Override - public void run() { - schedId = -1; - - handleResidenceAdd(res.getName(), res, deep); - return; - } - }, 10L); + if (api == null) + return; + if (res == null) + return; + + if (schedId != -1) + Bukkit.getServer().getScheduler().cancelTask(schedId); + + schedId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + schedId = -1; + + handleResidenceAdd(res.getName(), res, deep); + return; + } + }, 10L); } public void fireUpdateRemove(final ClaimedResidence res, final int deep) { - if (api == null) - return; - if (res == null) - return; + if (api == null) + return; + if (res == null) + return; - handleResidenceRemove(res.getName(), res, deep); + handleResidenceRemove(res.getName(), res, deep); } private String formatInfoWindow(String resid, ClaimedResidence res, String resName) { - if (res == null) - return null; - if (res.getName() == null) - return null; - if (res.getOwner() == null) - return null; - String v = - "
%regionname%
" - + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
"; - - if (plugin.getConfigManager().Pl3xMapShowFlags) { - - ResidencePermissions residencePermissions = res.getPermissions(); - FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); - - StringBuilder flgs = new StringBuilder(); - for (Entry one : residencePermissions.getFlags().entrySet()) { - if (Residence.getInstance().getConfigManager().Pl3xMapExcludeDefaultFlags && gRD.isSet(one.getKey()) && gRD.getFlags().get(one.getKey()).equals(one.getValue())) { - continue; - } - if (!flgs.toString().isEmpty()) - flgs.append("
"); - flgs.append(one.getKey() + ": " + one.getValue()); - } - - if (!flgs.toString().isEmpty()) { - v += CMIChatColor.stripColor(plugin.msg(lm.General_ResidenceFlags, "")) + "
%flags%"; - v = v.replace("%flags%", flgs.toString()); - } - } - - v += "
"; - - if (plugin.getRentManager().isForRent(res.getName())) - v = "
" - + CMIChatColor.stripColor(plugin.msg(lm.Rentable_Land, "")) + "%regionname%
" - + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" - + CMIChatColor.stripColor(plugin.msg(lm.Residence_RentedBy, "")) + "%renter%
" - + CMIChatColor.stripColor(plugin.msg(lm.General_LandCost, "")) + "%rent%
" - + CMIChatColor.stripColor(plugin.msg(lm.Rent_Days, "")) + "%rentdays%
" - + CMIChatColor.stripColor(plugin.msg(lm.Rentable_AllowRenewing, "")) + "%renew%
" - + CMIChatColor.stripColor(plugin.msg(lm.Rent_Expire, "")) + "%expire%
"; - - if (plugin.getTransactionManager().isForSale(res.getName())) - v = "
" - + CMIChatColor.stripColor(plugin.msg(lm.Economy_LandForSale, " ")) - + "%regionname%
" - + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" - + CMIChatColor.stripColor(plugin.msg(lm.Economy_SellAmount, "")) + "%price%
"; - - v = v.replace("%regionname%", resName); - v = v.replace("%playerowners%", res.getOwner()); - String m = res.getEnterMessage(); - v = v.replace("%entermsg%", (m != null) ? m : ""); - m = res.getLeaveMessage(); - v = v.replace("%leavemsg%", (m != null) ? m : ""); - - RentManager rentmgr = plugin.getRentManager(); - TransactionManager transmgr = plugin.getTransactionManager(); - - if (rentmgr.isForRent(res.getName())) { - boolean isrented = rentmgr.isRented(resid); - v = v.replace("%isrented%", Boolean.toString(isrented)); - String id = ""; - if (isrented) - id = rentmgr.getRentingPlayer(resid); - v = v.replace("%renter%", id); - - v = v.replace("%rent%", rentmgr.getCostOfRent(resid) + ""); - v = v.replace("%rentdays%", rentmgr.getRentDays(resid) + ""); - boolean renew = rentmgr.getRentableRepeatable(resid); - v = v.replace("%renew%", renew + ""); - String expire = ""; - if (isrented) { - long time = rentmgr.getRentedLand(resid).endTime; - if (time != 0L) - expire = GetTime.getTime(time); - } - v = v.replace("%expire%", expire); - } - - if (transmgr.isForSale(res.getName())) { - boolean forsale = transmgr.isForSale(resid); - v = v.replace("%isforsale%", Boolean.toString(transmgr.isForSale(resid))); - String price = ""; - if (forsale) - price = Integer.toString(transmgr.getSaleAmount(resid)); - v = v.replace("%price%", price); - } - - return v; + if (res == null) + return null; + if (res.getName() == null) + return null; + if (res.getOwner() == null) + return null; + String v = + "
%regionname%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
"; + + if (plugin.getConfigManager().Pl3xMapShowFlags) { + + ResidencePermissions residencePermissions = res.getPermissions(); + FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); + + StringBuilder flgs = new StringBuilder(); + for (Entry one : residencePermissions.getFlags().entrySet()) { + if (Residence.getInstance().getConfigManager().Pl3xMapExcludeDefaultFlags && gRD.isSet(one.getKey()) && gRD.getFlags().get(one.getKey()).equals(one.getValue())) { + continue; + } + if (!flgs.toString().isEmpty()) + flgs.append("
"); + flgs.append(one.getKey() + ": " + one.getValue()); + } + + if (!flgs.toString().isEmpty()) { + v += CMIChatColor.stripColor(plugin.msg(lm.General_ResidenceFlags, "")) + "
%flags%"; + v = v.replace("%flags%", flgs.toString()); + } + } + + v += "
"; + + if (plugin.getRentManager().isForRent(res.getName())) + v = "
" + + CMIChatColor.stripColor(plugin.msg(lm.Rentable_Land, "")) + "%regionname%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" + + CMIChatColor.stripColor(plugin.msg(lm.Residence_RentedBy, "")) + "%renter%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_LandCost, "")) + "%rent%
" + + CMIChatColor.stripColor(plugin.msg(lm.Rent_Days, "")) + "%rentdays%
" + + CMIChatColor.stripColor(plugin.msg(lm.Rentable_AllowRenewing, "")) + "%renew%
" + + CMIChatColor.stripColor(plugin.msg(lm.Rent_Expire, "")) + "%expire%
"; + + if (plugin.getTransactionManager().isForSale(res.getName())) + v = "
" + + CMIChatColor.stripColor(plugin.msg(lm.Economy_LandForSale, " ")) + + "%regionname%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" + + CMIChatColor.stripColor(plugin.msg(lm.Economy_SellAmount, "")) + "%price%
"; + + v = v.replace("%regionname%", resName); + v = v.replace("%playerowners%", res.getOwner()); + String m = res.getEnterMessage(); + v = v.replace("%entermsg%", (m != null) ? m : ""); + m = res.getLeaveMessage(); + v = v.replace("%leavemsg%", (m != null) ? m : ""); + + RentManager rentmgr = plugin.getRentManager(); + TransactionManager transmgr = plugin.getTransactionManager(); + + if (rentmgr.isForRent(res.getName())) { + boolean isrented = rentmgr.isRented(resid); + v = v.replace("%isrented%", Boolean.toString(isrented)); + String id = ""; + if (isrented) + id = rentmgr.getRentingPlayer(resid); + v = v.replace("%renter%", id); + + v = v.replace("%rent%", rentmgr.getCostOfRent(resid) + ""); + v = v.replace("%rentdays%", rentmgr.getRentDays(resid) + ""); + boolean renew = rentmgr.getRentableRepeatable(resid); + v = v.replace("%renew%", renew + ""); + String expire = ""; + if (isrented) { + long time = rentmgr.getRentedLand(resid).endTime; + if (time != 0L) + expire = GetTime.getTime(time); + } + v = v.replace("%expire%", expire); + } + + if (transmgr.isForSale(res.getName())) { + boolean forsale = transmgr.isForSale(resid); + v = v.replace("%isforsale%", Boolean.toString(transmgr.isForSale(resid))); + String price = ""; + if (forsale) + price = Integer.toString(transmgr.getSaleAmount(resid)); + v = v.replace("%price%", price); + } + + return v; } private boolean isVisible(String id, String worldname) { - List visible = plugin.getConfigManager().Pl3xMapVisibleRegions; - List hidden = plugin.getConfigManager().Pl3xMapHiddenRegions; - if (visible != null && visible.size() > 0) { - if ((visible.contains(id) == false) && (visible.contains("world:" + worldname) == false)) { - return false; - } - } - if (hidden != null && hidden.size() > 0) { - if (hidden.contains(id) || hidden.contains("world:" + worldname)) - return false; - } - return true; + List visible = plugin.getConfigManager().Pl3xMapVisibleRegions; + List hidden = plugin.getConfigManager().Pl3xMapHiddenRegions; + if (visible != null && visible.size() > 0) { + if ((visible.contains(id) == false) && (visible.contains("world:" + worldname) == false)) { + return false; + } + } + if (hidden != null && hidden.size() > 0) { + if (hidden.contains(id) || hidden.contains("world:" + worldname)) + return false; + } + return true; } - private Color fillColor(String resid) { - if (plugin.getRentManager().isForRent(resid) && !plugin.getRentManager().isRented(resid)) - return plugin.getConfigManager().Pl3xMapFillForRent; - else if (plugin.getRentManager().isForRent(resid) && plugin.getRentManager().isRented(resid)) - return plugin.getConfigManager().Pl3xMapFillRented; - else if (plugin.getTransactionManager().isForSale(resid)) - return plugin.getConfigManager().Pl3xMapFillForSale; - return plugin.getConfigManager().Pl3xMapFillColor; + private int fillColor(String resid) { + if (plugin.getRentManager().isForRent(resid) && !plugin.getRentManager().isRented(resid)) + return plugin.getConfigManager().Pl3xMapFillForRent; + else if (plugin.getRentManager().isForRent(resid) && plugin.getRentManager().isRented(resid)) + return plugin.getConfigManager().Pl3xMapFillRented; + else if (plugin.getTransactionManager().isForSale(resid)) + return plugin.getConfigManager().Pl3xMapFillForSale; + return plugin.getConfigManager().Pl3xFillColor; } private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { - if (res == null) - return; - - if (res.getPermissions().has("hidden", false) && plugin.getConfigManager().Pl3xMapHideHidden) { - fireUpdateRemove(res, depth); - return; - } - - World world = Bukkit.getWorld(res.getPermissions().getWorldName()); - - MapWorld mWorld = api.getWorldIfEnabled(world).orElse(null); - - if (mWorld == null) - return; - - Registry registry = mWorld.layerRegistry(); - SimpleLayerProvider provider = providers.get(res.getPermissions().getWorldName()); - if (registry.hasEntry(Key.of("Residence"))) { - provider = (SimpleLayerProvider) registry.get(Key.of("Residence")); - providers.put(res.getPermissions().getWorldName(), provider); - } - - if (provider == null) { - api.getWorldIfEnabled(world).ifPresent(mapWorld -> { - Key key = Key.of("Residence"); - SimpleLayerProvider prov = SimpleLayerProvider - .builder("Residence") - .showControls(true) - .defaultHidden(plugin.getConfigManager().Pl3xMapHideByDefault) - .layerPriority(4) - .zIndex(63) - .build(); - mapWorld.layerRegistry().register(key, prov); - providers.put(res.getPermissions().getWorldName(), prov); - }); - } - - provider = providers.get(res.getPermissions().getWorldName()); - - if (provider == null) { - return; - } - - for (Entry oneArea : res.getAreaMap().entrySet()) { - - String id = oneArea.getKey() + "." + resid; - Key key = Key.of(id); - - String resName = res.getName(); - - if (res.getAreaMap().size() > 1) { - resName = res.getName() + " (" + oneArea.getKey() + ")"; - } - - String desc = formatInfoWindow(resid, res, resName); - - if (!isVisible(resid, res.getPermissions().getWorldName())) - return; - - Location l0 = oneArea.getValue().getLowLocation(); - Location l1 = oneArea.getValue().getHighLocation(); - - Point p1 = Point.of(l0.getX(), l0.getZ()); - Point p2 = Point.of(l1.getX() + 1, l1.getZ() + 1); - - Rectangle marker = Marker.rectangle(p1, p2); - - MarkerOptions options = MarkerOptions.builder().fillRule(FillRule.NONZERO).hoverTooltip(desc) - .fillColor(fillColor(resid)) - .strokeColor(plugin.getConfigManager().Pl3xMapBorderColor) - .fillOpacity(plugin.getConfigManager().Pl3xMapFillOpacity) - .strokeOpacity(plugin.getConfigManager().Pl3xMapBorderOpacity) - .strokeWeight(plugin.getConfigManager().Pl3xMapBorderWeight) - .build(); - - marker.markerOptions(options); - provider.addMarker(key, marker); - - if (depth <= plugin.getConfigManager().Pl3xMapLayerSubZoneDepth) { - List subids = res.getSubzones(); - for (ClaimedResidence one : subids) { - try { - handleResidenceAdd(one.getName(), one, depth + 1); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - } + if (res == null) + return; + + if (res.getPermissions().has("hidden", false) && plugin.getConfigManager().Pl3xMapHideHidden) { + fireUpdateRemove(res, depth); + return; + } + + World world = Bukkit.getWorld(res.getPermissions().getWorldName()); + + net.pl3x.map.core.world.World mWorld = api.getWorldRegistry().get(world.getName()); + + if (mWorld == null) { + return; + } + + Registry registry = mWorld.getLayerRegistry(); + SimpleLayer provider = providers.get(res.getPermissions().getWorldName()); + if (registry.has("Residence")) { + provider = (SimpleLayer) registry.get("Residence"); + providers.put(res.getPermissions().getWorldName(), provider); + } + + if (provider == null) { + Pl3xMapLayer prov = new Pl3xMapLayer(mWorld); + mWorld.getLayerRegistry().register("Residence", prov); + providers.put(res.getPermissions().getWorldName(), prov); + } + + provider = providers.get(res.getPermissions().getWorldName()); + + if (provider == null) { + return; + } + + for (Entry oneArea : res.getAreaMap().entrySet()) { + + String id = oneArea.getKey() + "." + resid; + + String resName = res.getName(); + + if (res.getAreaMap().size() > 1) { + resName = res.getName() + " (" + oneArea.getKey() + ")"; + } + + String desc = formatInfoWindow(resid, res, resName); + + if (!isVisible(resid, res.getPermissions().getWorldName())) + return; + + Location l0 = oneArea.getValue().getLowLocation(); + Location l1 = oneArea.getValue().getHighLocation(); + + Point p1 = Point.of(l0.getX(), l0.getZ()); + Point p2 = Point.of(l1.getX() + 1, l1.getZ() + 1); + + Rectangle marker = Marker.rectangle(id, p1, p2); + + Options options = new Options(); + + Tooltip tooltip = new Tooltip(); + + tooltip.setContent(desc); + + options.setTooltip(tooltip); + + Fill fill = new Fill(); + fill.setColor(fillColor(resid)); + fill.setType(Type.NONZERO); + options.setFill(fill); + + Stroke stroke = new Stroke(); + stroke.setColor(plugin.getConfigManager().Pl3xBorderColor); + stroke.setWeight(plugin.getConfigManager().Pl3xMapBorderWeight); + options.setStroke(stroke); + + marker.setOptions(options); + + provider.addMarker(marker); + + if (depth <= plugin.getConfigManager().Pl3xMapLayerSubZoneDepth) { + List subids = res.getSubzones(); + for (ClaimedResidence one : subids) { + try { + handleResidenceAdd(one.getName(), one, depth + 1); + } catch (Throwable e) { + e.printStackTrace(); + } + } + } + } } public void handleResidenceRemove(String resid, ClaimedResidence res, int depth) { - if (resid == null) - return; - if (res == null) - return; + if (resid == null) + return; + if (res == null) + return; - World world = Bukkit.getWorld(res.getPermissions().getWorldName()); + World world = Bukkit.getWorld(res.getPermissions().getWorldName()); - MapWorld mWorld = api.getWorldIfEnabled(world).orElse(null); - - if (mWorld == null) - return; + net.pl3x.map.core.world.World mWorld = api.getWorldRegistry().get(world.getName()); - Registry registry = mWorld.layerRegistry(); - SimpleLayerProvider provider = providers.get(res.getPermissions().getWorldName()); - if (registry.hasEntry(Key.of("Residence"))) { - provider = (SimpleLayerProvider) registry.get(Key.of("Residence")); - providers.put(res.getPermissions().getWorldName(), provider); - } + if (mWorld == null) + return; - if (provider == null) { - return; - } + Registry registry = mWorld.getLayerRegistry(); + SimpleLayer provider = providers.get(res.getPermissions().getWorldName()); + if (registry.has("Residence")) { + provider = (SimpleLayer) registry.get("Residence"); + providers.put(res.getPermissions().getWorldName(), provider); + } - for (Entry oneArea : res.getAreaMap().entrySet()) { + if (provider == null) { + return; + } - String id = oneArea.getKey() + "." + resid; + for (Entry oneArea : res.getAreaMap().entrySet()) { - Key key = Key.of(id); + String id = oneArea.getKey() + "." + resid; - provider.removeMarker(key); + provider.removeMarker(id); - if (depth <= plugin.getConfigManager().Pl3xMapLayerSubZoneDepth + 1) { - List subids = res.getSubzones(); - for (ClaimedResidence one : subids) { - handleResidenceRemove(one.getName(), one, depth + 1); - } - } - } + if (depth <= plugin.getConfigManager().Pl3xMapLayerSubZoneDepth + 1) { + List subids = res.getSubzones(); + for (ClaimedResidence one : subids) { + handleResidenceRemove(one.getName(), one, depth + 1); + } + } + } } public void activate() { - CMIMessages.consoleMessage(Residence.getInstance().getPrefix() + " Pl3xMap residence activated!"); + CMIMessages.consoleMessage(Residence.getInstance().getPrefix() + " Pl3xMap residence activated!"); - for (Entry one : plugin.getResidenceManager().getResidences().entrySet()) { - fireUpdateAdd(one.getValue(), one.getValue().getSubzoneDeep()); - try { - handleResidenceAdd(one.getValue().getName(), one.getValue(), one.getValue().getSubzoneDeep()); - } catch (Throwable e) { - e.printStackTrace(); - } - } + for (Entry one : plugin.getResidenceManager().getResidences().entrySet()) { + fireUpdateAdd(one.getValue(), one.getValue().getSubzoneDeep()); + try { + handleResidenceAdd(one.getValue().getName(), one.getValue(), one.getValue().getSubzoneDeep()); + } catch (Throwable e) { + e.printStackTrace(); + } + } } } From 70e97595a655ed437d8d437e1270b72177e34791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=98=AD=E8=98=AD=E9=9C=B2?= <51469621+flandretw@users.noreply.github.com> Date: Sun, 9 Jul 2023 14:29:47 +0800 Subject: [PATCH 1044/1142] Update ChineseTW.yml --- src/Language/ChineseTW.yml | 425 ++++++++++++++++++------------------- 1 file changed, 212 insertions(+), 213 deletions(-) diff --git a/src/Language/ChineseTW.yml b/src/Language/ChineseTW.yml index 0697a5d6a..1c5a2ad89 100644 --- a/src/Language/ChineseTW.yml +++ b/src/Language/ChineseTW.yml @@ -1,7 +1,8 @@ -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. +# ç¹é«”中文由 flandretw 翻譯,你å¯ä»¥åœ¨ GitHubã€Crowdinã€Discord 甚至是 Youtube 上找到我。 +# 注æ„如果你想修改此文件,強烈建議你複製一份這個檔案並修改它。 +# 此文件將由 Residence 自動更新。當檢查到新版本時,你的變更將被覆蓋。 +# 當æ“有此檔案的副本時,變更 Residence config.yml 下的 Language: 為 ChineseTW +# 或是你所修改éŽå¾Œçš„檔案å稱。 Language: Invalid: @@ -30,22 +31,23 @@ Language: Help: '&c無效的說明é æ•¸â€¦â€¦' NameCharacters: '&cå稱包å«ä¸å…許字元……' PortalDestination: '&c傳é€é–€ç›®çš„地ä½æ–¼ç¦æ­¢å€åŸŸå…§ï¼Œå·²å–消建立傳é€é–€ã€‚&7請尋找新ä½ç½®ã€‚' - FromConsole: '&c該指令åªèƒ½åœ¨æŽ§åˆ¶å°åŸ·è¡Œï¼' - Ingame: '&c該指令無法在控制å°åŸ·è¡Œï¼' + FromConsole: '&c此指令åªèƒ½åœ¨æŽ§åˆ¶å°åŸ·è¡Œï¼' + Ingame: '&c此指令無法在控制å°åŸ·è¡Œï¼' Area: Exists: '&c已存在相åŒå€åŸŸå稱。' Create: '&e已建立領地 ID:&6%1&e。' DiffWorld: '&cå€åŸŸå’Œé ˜åœ°å­˜åœ¨ä¸åŒçš„世界。' Collision: '&cå€åŸŸå’Œé ˜åœ° &6%1 &cè¡çªã€‚' + TooClose: '&c太é è¿‘å¦å¤–一個領地了。你需è¦è‡³å°‘ &e%1 &c格方塊的間è·ã€‚' SubzoneCollision: '&cå€åŸŸå’Œå­å€åŸŸé ˜åœ° &6%1 &cè¡çªã€‚' NonExist: '&cå€åŸŸä¸å­˜åœ¨ã€‚' InvalidName: '&c無效的å€åŸŸå稱……' - ToSmallX: '&cä½ é¸æ“‡çš„å€åŸŸ &6X 軸&cæ–¹å‘長度(&6%1&c)éŽå°ã€‚&e該值必須為 &6%2 &e或更大。' - ToSmallY: '&cä½ é¸æ“‡çš„å€åŸŸ &6Y 軸&cæ–¹å‘高度(&6%1&c)éŽå°ã€‚&e該值必須為 &6%2 &e或更大。' - ToSmallZ: '&cä½ é¸æ“‡çš„å€åŸŸ &6Z 軸&cæ–¹å‘長度(&6%1&c)éŽå°ã€‚&e該值必須為 &6%2 &e或更大。' - ToBigX: '&cä½ é¸æ“‡çš„å€åŸŸ &6X 軸&cæ–¹å‘長度(&6%1&c)éŽå¤§ã€‚&e該值必須為 &6%2 &e或更å°ã€‚' - ToBigY: '&cä½ é¸æ“‡çš„å€åŸŸ &6Y 軸&cæ–¹å‘高度(&6%1&c)éŽå¤§ã€‚&e該值必須為 &6%2 &e或更å°ã€‚' - ToBigZ: '&cä½ é¸æ“‡çš„å€åŸŸ &6Z 軸&cæ–¹å‘長度(&6%1&c)éŽå¤§ã€‚&e該值必須為 &6%2 &e或更å°ã€‚' + ToSmallX: '&cä½ é¸æ“‡çš„å€åŸŸ &6X 軸&cæ–¹å‘長度(&6%1&c)éŽå°ã€‚&e此值必須為 &6%2 &e或更大。' + ToSmallY: '&cä½ é¸æ“‡çš„å€åŸŸ &6Y 軸&cæ–¹å‘高度(&6%1&c)éŽå°ã€‚&e此值必須為 &6%2 &e或更大。' + ToSmallZ: '&cä½ é¸æ“‡çš„å€åŸŸ &6Z 軸&cæ–¹å‘長度(&6%1&c)éŽå°ã€‚&e此值必須為 &6%2 &e或更大。' + ToBigX: '&cä½ é¸æ“‡çš„å€åŸŸ &6X 軸&cæ–¹å‘長度(&6%1&c)éŽå¤§ã€‚&e此值必須為 &6%2 &e或更å°ã€‚' + ToBigY: '&cä½ é¸æ“‡çš„å€åŸŸ &6Y 軸&cæ–¹å‘高度(&6%1&c)éŽå¤§ã€‚&e此值必須為 &6%2 &e或更å°ã€‚' + ToBigZ: '&cä½ é¸æ“‡çš„å€åŸŸ &6Z 軸&cæ–¹å‘長度(&6%1&c)éŽå¤§ã€‚&e此值必須為 &6%2 &e或更å°ã€‚' Rename: '&eå·²é‡æ–°å‘½åå€åŸŸ &6%1 &e為 &6%2&e。' Remove: '&e已移除å€åŸŸ &6%1&e……' Name: '&eå稱:&2%1&e。' @@ -57,6 +59,7 @@ Language: SizeLimit: '&eå€åŸŸå¤§å°è¶…出了å…許的尺寸上é™ã€‚' HighLimit: '&cä½ ä¸èƒ½ä¿è­·é€™éº¼é«˜çš„領地,高度上é™ç‚º &6%1&c。' LowLimit: '&cä½ ä¸èƒ½ä¿è­·é€™éº¼æ·±çš„領地,深度上é™ç‚º &6%1&c。' + WeirdShape: '&3領地大å°ä¸è¦å‰‡ã€‚&6%1 &3邊比 &6%3 &3邊大 &6%2 &3å€ã€‚' Select: Points: '&e執行指令å‰è¦å…ˆé¸æ“‡å…©å€‹é»žï¼' Overlap: '&cé¸æ“‡é»žå’Œå€åŸŸ &6%1 &cé‡ç–Šï¼' @@ -75,8 +78,8 @@ Language: TooHigh: '&c警告,é¸æ“‡å€åŸŸå·²è¶…éŽåœ°åœ–頂部,ç¾åœ¨å·²è£å‰ªã€‚' TooLow: '&c警告,é¸æ“‡å€åŸŸå·²è¶…éŽåœ°åœ–底部,ç¾åœ¨å·²è£å‰ªã€‚' TotalSize: '&eé¸æ“‡å€åŸŸç¸½è¨ˆå°ºå¯¸ï¼š&6%1&e。' - AutoEnabled: '&e自動é¸æ“‡æ¨¡å¼&6é–‹å•Ÿ&e,使用 &6/res select auto &e關閉。' - AutoDisabled: '&e自動é¸æ“‡æ¨¡å¼&6關閉&e,使用 &6/res select auto &eå†æ¬¡æ‰“開。' + AutoEnabled: '&e自動é¸æ“‡æ¨¡å¼&6啟用&e,使用 &6/res select auto &eåœç”¨ã€‚' + AutoDisabled: '&e自動é¸æ“‡æ¨¡å¼&6åœç”¨&e,使用 &6/res select auto &eå†æ¬¡æ‰“開。' Disabled: '&c你沒有使用é¸æ“‡æŒ‡ä»¤çš„權é™ã€‚' Sign: Updated: '&6%1 &e已更新告示牌ï¼' @@ -95,12 +98,13 @@ Language: ForSaleTopLine: '&0出售' ForSalePriceLine: '&0%1' ForSaleResName: '&0%1' - ForSaleBottom: '&0%1 立方公尺' + ForSaleBottom: '&0%1 立方格' LookAt: '&cä½ å‰æ–¹æ²’有告示牌。' + TooMany: '&c此領地有太多的告示牌。' ResName: '&0%1' Owner: '&0%1' Raid: - NotEnabled: '&c尚未開啟侵略模å¼ï¼' + NotEnabled: '&c尚未啟用侵略模å¼ï¼' NotIn: '&cä½ ä¸åœ¨ä¾µç•¥ä¸­ï¼' CantLeave: '&cä½ ä¸èƒ½åœ¨ä¾µç•¥ä¸­é›¢é–‹é ˜åœ°ï¼ˆ%1)ï¼' CantKick: '&c無法踢出領地æ“有者(%1)ï¼' @@ -108,9 +112,9 @@ Language: StartsIn: '&7侵略開始於:[autoTimeLeft] &2防守方:%1 人 &4進攻方:%2 人' EndsIn: '&c侵略çµæŸæ–¼ï¼š[autoTimeLeft] &2防守方:%1 人 &4進攻方:%2 人' Ended: '&7領地侵略 &4%1 &7çµæŸï¼' - cantDo: '&c無法在領地侵略時åšé€™ä»¶äº‹æƒ…ï¼' + cantDo: '&c無法在領地侵略時åšæ­¤äº‹æƒ…ï¼' left: '&7你已離開了領地 &4%1 &7侵略ï¼' - noFlagChange: '&c無法在領地侵略時修改權é™ï¼' + noFlagChange: '&c無法在領地侵略時變更權é™ï¼' noRemoval: '&c無法在領地侵略時移除領地ï¼' immune: '&e設定下一波侵略 %1&eï¼' notImmune: '&eä¸å†é€²è¡Œè¨­å®šï¼' @@ -118,9 +122,9 @@ Language: attack: Joined: '&7已加入 &2%1 &7侵略ï¼' Started: '&7侵略開始ï¼' - cooldown: '&c太早進行下一場領地侵略ï¼è«‹ç­‰å€™ %1ï¼' - immune: '&c這個領地å…除侵略ï¼è«‹ç­‰å€™ %1ï¼' - playerImmune: '&c領地æ“有者å…除侵略ï¼è«‹ç­‰å€™ %1ï¼' + cooldown: '&c太早進行下一場領地侵略ï¼è«‹ç¨å€™ %1ï¼' + immune: '&c這個領地å…除侵略ï¼è«‹ç¨å€™ %1ï¼' + playerImmune: '&c領地æ“有者å…除侵略ï¼è«‹ç¨å€™ %1ï¼' isOffline: '&c無法在領地æ“有者離線時侵略ï¼' noSubzones: '&c無法侵略å­å€åŸŸé ˜åœ°ï¼' noSelf: '&c無法侵略你自己的領地ï¼' @@ -140,7 +144,7 @@ Language: immune: '&eå°æŽ¥ä¸‹ä¾†çš„侵略å…除:%1&e。' starts: '&7領地侵略將在以下時間後開始:%1&7。' attackers: '&7攻擊者:&4%1&7。' - defenders: '&7防守方者:&4%1&7。' + defenders: '&7防守方:&4%1&7。' ends: '&7領地侵略將在以下時間後çµæŸï¼š%1&7。' canraid: '&2å¯ä»¥è¢«ä¾µç•¥ã€‚' raidin: '&eå¯èƒ½çš„侵略:%1&e。' @@ -160,28 +164,28 @@ Language: server: land: Server_Land Flag: - ownColor: '&4' p1Color: '&2' p2Color: '&a' haveColor: '&2' havePrefix: '' - denyColor: '&4' - denyPrefix: '' + lackColor: '&7' + lackPrefix: '' + others: '&eå’Œ &2%1 &e其他' Set: '&e領地 &6%2 &eçš„ &6%1 &e權é™å·²è¨­å®šç‚º &6%3&e。' - SetFailed: '&c你沒有設定&6%1&c的權é™ã€‚' + SetFailed: '&c你沒有設定 &6%1&c 的權é™ã€‚' CheckTrue: '&e玩家 &6%2 &e已在領地 &6%3 &e中將 &6%1 &e權é™è¨­å®šç‚º &6%4&e。' CheckFalse: '&e玩家 &6%2 &e沒有在領地中設定 &6%1 &e權é™ã€‚' Cleared: '&e已清除權é™ã€‚' RemovedAll: '&e已清除 &6%1 &e在領地 &6%2 &e的所有權é™ã€‚' RemovedGroup: '&e已清除 &6%1 &e組在領地 &6%2 &e的所有權é™ã€‚' Default: '&eå·²æ¢å¾©é è¨­æ¬Šé™ã€‚' - Deny: '&c你沒有&6%1&c的權é™ã€‚' + Deny: '&c你沒有 &6%1&c 的權é™ã€‚' SetDeny: '&cæ“有者ä¸èƒ½è¨­å®š &6%1 &c的權é™ã€‚' ChangeDeny: '&c因為領地內有 &6%2 &cå玩家,所以你無法更改 &6%1 &c的權é™ã€‚' ChangedForOne: '&e已為領地 &6%2 &e更改 &6%1 &e的權é™ã€‚' ChangedFor: '&e已檢查 &6%2 &e領地更改 &6%1 &e的權é™ã€‚' - reset: '&eå·²é‡æ–°è¨­å®šé ˜åœ° &6%1 &e的權é™ã€‚' - resetAll: '&eå·²é‡æ–°è¨­å®šé ˜åœ° &6%1 &e的權é™ã€‚' + reset: '&eå·²é‡è¨­é ˜åœ° &6%1 &e的權é™ã€‚' + resetAll: '&eå·²é‡è¨­é ˜åœ° &6%1 &e的權é™ã€‚' Bank: NoAccess: '&c你沒有使用銀行的權é™ã€‚' Name: ' &e銀行:&6%1' @@ -189,6 +193,7 @@ Language: Deposit: '&eä½ å‘領地銀行存款 &6%1&e。' Withdraw: '&e你從領地銀行中æ款 &6%1&e。' rentedWithdraw: '&c無法å‘租用領地進行銀行æ款。' + full: '&e領地銀行已滿ï¼' Subzone: Rename: '&eå­å€åŸŸé ˜åœ° &6%1 &e已被é‡æ–°å‘½å為 &6%2&e。' Remove: '&e已移除å­å€åŸŸé ˜åœ° &6%1&e。' @@ -201,26 +206,26 @@ Language: SelectInside: '&e兩個é¸æ“‡é»žå¿…須都在åŒé ˜åœ°å…§ã€‚' CantCreate: '&c你沒有建立å­å€åŸŸé ˜åœ°çš„權é™ã€‚' CantDelete: '&c你沒有移除å­å€åŸŸé ˜åœ°çš„權é™ã€‚' - CantDeleteNotOwnerOfParent: '&cä½ ä¸æ˜¯è©²å­å€åŸŸæ‰€åœ¨é ˜åœ°çš„æ“有者,無法移除å­å€åŸŸã€‚' + CantDeleteNotOwnerOfParent: '&cä½ ä¸æ˜¯æ­¤å­å€åŸŸæ‰€åœ¨é ˜åœ°çš„æ“有者,無法移除å­å€åŸŸã€‚' CantContract: '&c你沒有縮å°å­å€åŸŸé ˜åœ°çš„權é™ã€‚' CantExpand: '&c你沒有擴大å­å€åŸŸé ˜åœ°çš„權é™ã€‚' DeleteConfirm: '&e如果你確定è¦ç§»é™¤å­å€åŸŸ &6%1&e,使用 &6/res confirm &e來確定æ“作。' OwnerChange: '&e已將å­å€åŸŸ &6%1 &eçš„æ“有者更改為 &6%2&e。' Residence: - DontOwn: '&e沒有項目å¯ä»¥é¡¯ç¤ºã€‚' - Hidden: '&e(&6éš±è—&e)' + DontOwn: '&e沒有å¯ä¾›é¡¯ç¤ºçš„內容。' + Hidden: ' &e(&6éš±è—&e)' Bought: '&e你已購買領地 &6%1&e。' Buy: '&6%1 &e購買了你的 &6%2 &e領地。' BuyTooBig: '&c你無法購買尺寸這麼大的領地。' - NotForSale: '&c該領地目å‰ä¸¦æœªå‡ºå”®ã€‚' + NotForSale: '&c此領地目å‰ä¸¦æœªå‡ºå”®ã€‚' ForSale: '&e領地 &6%1 &eç¾åœ¨æ­£ä»¥ &6%2 &e的價格出售。' - StopSelling: '&c該領地已ä¸å†å‡ºå”®ã€‚' + StopSelling: '&c此領地已ä¸å†å‡ºå”®ã€‚' TooMany: '&cä½ æ“有的領地數é‡é”到了上é™ã€‚' MaxRent: '&c你租用的領地數é‡é”到了上é™ã€‚' - AlreadyRent: '&c該領地已被出租……' - NotForRent: '&c該領地沒有出租……' - NotForRentOrSell: '&c該領地沒有出售或出租……' - NotRented: '&c該領地還沒被出租。' + AlreadyRent: '&c此領地已被出租……' + NotForRent: '&c此領地沒有出租……' + NotForRentOrSell: '&c此領地沒有出售或出租……' + NotRented: '&c此領地還沒被出租。' Unrent: '&e領地 &6%1 &eå·²å–消出租。' RemoveRentable: '&e領地 &6%1 &eä¸å†å¯ä¾›å‡ºç§Ÿã€‚' ForRentSuccess: '&e領地 &6%1 &eå·²è¢«è¨­å®šç‚ºæ¯ &6%3 &e天以 &6%2 &e出租。' @@ -233,9 +238,9 @@ Language: Rename: '&e領地 &6%1 &e已被é‡æ–°å‘½å為 &6%2' Remove: '&e領地 &6%1 &e已被移除……' CantRemove: '&c領地 &6%1 &c無法移除因為 &6%2 &cå­å€åŸŸé‚„在出租給 &6%3&c。' - MoveDeny: '&c你沒有領地 &6%1 的移動權é™ã€‚' - TeleportNoFlag: '&c你沒有領地的傳é€æ¬Šé™ã€‚' - FlagDeny: '&c你沒有領地 &6%2 &6%1&c的權é™ã€‚' + MoveDeny: '&c你沒有領地 &6%1 的移動(move)權é™ã€‚' + TeleportNoFlag: '&c你沒有領地的傳é€ï¼ˆtp)權é™ã€‚' + FlagDeny: '&c你沒有領地 &6%2 &6%1&c 的權é™ã€‚' GiveLimits: '&c目標玩家領地超éŽé™åˆ¶ï¼Œç„¡æ³•çµ¦äºˆé ˜åœ°ã€‚' GiveConfirm: '&7點擊確èªå°‡é ˜åœ° &6%1 &7從 &6%2 &7轉移到 &6%3&7。' Give: '&e你將領地 &6%1 &e轉移到 &6%2&e。' @@ -247,12 +252,12 @@ Language: TeleportNear: '&e已傳é€åˆ°é ˜åœ°çš„附近。' SetTeleportLocation: '&e設定傳é€é»žä½ç½®â€¦â€¦' PermissionsApply: '&e已設定領地權é™ã€‚' - NotOwner: '&cä½ ä¸æ˜¯è©²é ˜åœ°çš„æ“有者。' + NotOwner: '&cä½ ä¸æ˜¯æ­¤é ˜åœ°çš„æ“有者。' RemovePlayersResidences: '&e移除所有屬於 &6%1 &e的領地。' NotIn: '&cä½ ä¸åœ¨é ˜åœ°å…§ã€‚' PlayerNotIn: '&c玩家ä¸åœ¨é ˜åœ°å€åŸŸå…§ã€‚' Kicked: '&e你在領地中被踢出。' - CantKick: '&e無法踢出該玩家。' + CantKick: '&e無法踢出此玩家。' In: '&eä½ ç›®å‰åœ¨é ˜åœ° &6%1&e。' OwnerChange: '&e已將領地 &6%1 &eçš„æ“æœ‰è€…æ›´æ”¹æˆ &6%2' NonAdmin: '&c你沒有領地的管ç†æ¬Šé™ã€‚' @@ -265,7 +270,7 @@ Language: NoResHere: '&c領地ä¸å­˜åœ¨ã€‚' OwnerNoPermission: '&c領地æ“有者沒有執行這項æ“作的權é™ã€‚' ParentNoPermission: '&c你沒有設定父å€åŸŸçš„權é™ã€‚' - ChatDisabled: '&e已關閉領地èŠå¤©â€¦â€¦' + ChatDisabled: '&eå·²åœç”¨é ˜åœ°èŠå¤©â€¦â€¦' DeleteConfirm: '&e如果你確定è¦ç§»é™¤é ˜åœ° &6%1&e,使用 &6/res confirm &e來確定æ“作。' ChangedMain: '&e更改主è¦é ˜åœ°åˆ° &6%1&e。' LwcRemoved: '&e在 &6%2 &e毫秒內移除 &6%1 &eLwc ä¿è­·ã€‚' @@ -275,7 +280,7 @@ Language: IsForSale: '&6(出售)' IsRented: '&6(已出租)' Rent: - Disabled: '&c已關閉出租……' + Disabled: '&cå·²åœç”¨å‡ºç§Ÿâ€¦â€¦' DisableRenew: '&e領地 &6%1 &eä¸æœƒåœ¨ç§Ÿç´„到期時自動續租。' EnableRenew: '&e領地 &6%1 &e將會在租約到期時自動續租。' NotByYou: '&c領地ä¸æ˜¯ä½ ç§Ÿçš„。' @@ -284,9 +289,9 @@ Language: OneTime: '&c無法延長領地的出租時間。' Extended: '&e已為領地 &6%2 &e延長租約 &6%1 &e天。' Expire: '&e租約到期時間:&6%1&e。' - AutoPayTurnedOn: '&eå·²&2é–‹å•Ÿ&e自動付款。' - AutoPayTurnedOff: '&eå·²&c關閉&e自動付款。' - ModifyDeny: '&c無法修改租用的領地。' + AutoPayTurnedOn: '&eå·²&2啟用&e自動付款。' + AutoPayTurnedOff: '&eå·²&cåœç”¨&e自動付款。' + ModifyDeny: '&c無法變更租用的領地。' Days: '&e租用天數:&6%1&e。' Rented: ' &6(已出租)' RentList: ' &6%1&e. &6%2&e(&6%3&e/&6%4&e/&6%5&e)- &6%6 &6%7' @@ -318,7 +323,7 @@ Language: MoneyCredit: '&e你的帳戶收到了 &8%1&e。' RentReleaseInvalid: '&e領地 &6%1 &e沒有被租用或出租。' RentSellFail: '&c無法出售正在出租的領地。' - SubzoneRentSellFail: '&c無法出售,該å­å€åŸŸé ˜åœ°å‡ºç§Ÿä¸­ã€‚' + SubzoneRentSellFail: '&c無法出售,此å­å€åŸŸé ˜åœ°å‡ºç§Ÿä¸­ã€‚' ParentRentSellFail: '&c無法出售出租中的領地。' SubzoneSellFail: '&c無法出售å­å€åŸŸé ˜åœ°ã€‚' SellRentFail: '&c無法出租正在出售的領地。' @@ -331,7 +336,7 @@ Language: LeaseNotExpire: '&e租約ä¸å­˜åœ¨æˆ–未éŽæœŸã€‚' LeaseRenewalCost: '&e續租 &6%1 &e的花費為 &6%2。' LeaseInfinite: '&e出租時間已設定為無é™â€¦â€¦' - MarketDisabled: '&c已關閉經濟系統。' + MarketDisabled: '&cå·²åœç”¨ç¶“濟系統。' SellAmount: '&e出售數é‡ï¼š&2%1&e。' SellList: ' &6%1&e. &6%2&e(&6%3&e)- &6%4&e' LeaseExpire: '&e租約到期時間:&2%1&e。' @@ -385,9 +390,9 @@ Language: Pset: Title: '&6%1 %2 權é™' Actions: - - '&2點擊左éµä¿®æ”¹ç‚ºé–‹å•Ÿ' - - '&c點擊å³éµä¿®æ”¹ç‚ºé—œé–‰' - - '&eShift + 點擊左éµä¿®æ”¹ç‚ºæœªè¨­å®š' + - '&2點擊左éµè®Šæ›´ç‚ºå•Ÿç”¨' + - '&c點擊å³éµè®Šæ›´ç‚ºåœç”¨' + - '&eShift + 點擊左éµè®Šæ›´ç‚ºæœªè¨­å®š' InformationPage: Top: '&e___/ &a %1 - %2 &e \___' TopSingle: '&e___/ &a %1 &e \___' @@ -435,8 +440,8 @@ Language: Voted: '&6你給 &e%2 &6評了 &e%1 &6分。' Liked: '&6ä½ å°é ˜åœ° &e%1 &6按讚。' AlreadyLiked: '&6ä½ å·²å°é ˜åœ° &e%1 &6按讚éŽäº†ã€‚' - NoVotes: '&c該領地還沒有投票。' - CantVote: '&c該領地還沒開啟商店權é™ã€‚' + NoVotes: '&c此領地還沒有投票。' + CantVote: '&c此領地還沒啟用商店權é™ã€‚' VotedRange: '&6åªèƒ½è©•å‡º &e%1 &6分到 &e%2 &6分。' SignLines: '1': '&e--== &8%1 &e==--' @@ -445,25 +450,25 @@ Language: '4': '&8%1&e(&8%2&e)' Likes4: '&9讚:&8%2' RandomTeleport: - TpLimit: '&e傳é€éŽæ–¼é »ç¹ï¼Œè«‹ç¨ç­‰ &6%1 &e秒後å†æ¬¡å‚³é€ã€‚' - TeleportSuccess: '&e傳é€åˆ°åº§æ¨™ X:&6%1 &eY:&6%2 &eZ:&6%3 &e。' - IncorrectLocation: '&e找ä¸åˆ°æ­£ç¢ºçš„傳é€åº§æ¨™ï¼Œè«‹ç¨ç­‰ &6%1 &e秒後é‡è©¦ã€‚' - Disabled: '&c該世界關閉隨機傳é€ã€‚' + TpLimit: '&e傳é€éŽæ–¼é »ç¹ï¼Œè«‹ç¨å€™ &6%1 &e秒後å†æ¬¡å‚³é€ã€‚' + TeleportSuccess: '&e已傳é€åˆ°åº§æ¨™ X:&6%1 &eY:&6%2 &eZ:&6%3&e。' + IncorrectLocation: '&e找ä¸åˆ°æ­£ç¢ºçš„傳é€åº§æ¨™ï¼Œè«‹ç¨å€™ &6%1 &e秒後å†è©¦ã€‚' + Disabled: '&c此世界åœç”¨éš¨æ©Ÿå‚³é€ã€‚' TeleportStarted: '&e傳é€å°‡åœ¨ &6%4 &e秒後開始,ä¸è¦ç§»å‹•ã€‚' - WorldList: '&eå¯ä¾›ä½¿ç”¨ä¸–界:&6%1&e。' + WorldList: '&eå¯ä¾›ä½¿ç”¨çš„世界:&6%1&e。' Permissions: variableColor: '&f' permissionColor: '&6' cmdPermissionColor: '&2' General: - DisabledWorld: '&c該世界關閉領地。' + DisabledWorld: '&c此世界åœç”¨é ˜åœ°ã€‚' UseNumbers: '&c請使用數字……' - # Replace all text with '' to disable this message + # 將所有文字替æ›ç‚º '' å°‡åœç”¨æ­¤è¨Šæ¯ CantPlaceLava: '&c無法在沒有領地的地方放置岩漿。' - # Replace all text with '' to disable this message + # 將所有文字替æ›ç‚º '' å°‡åœç”¨æ­¤è¨Šæ¯ CantPlaceWater: '&c無法在沒有領地的地方放置水。' CantPlaceChest: '&c你沒有放置儲物箱的權é™ã€‚' - NoPermission: '&c你沒有執行該æ“作的權é™ã€‚' + NoPermission: '&c你沒有執行此æ“作的權é™ã€‚' info: NoPlayerPermission: '&c[playerName] 沒有 [permission] 權é™ã€‚' NoCmdPermission: '&c沒有這個指令的權é™ã€‚' @@ -475,13 +480,13 @@ Language: InfoTool: '&e- 資訊工具:&6%1' ListMaterialAdd: '&6%1 &e已被新增到領地 &6%2&e。' ListMaterialRemove: '&6%1 &e已從領地 &6%2 &e移除。' - ItemBlacklisted: '&c該處ç¦æ­¢ä½¿ç”¨è©²ç‰©å“。' - WorldPVPDisabled: '&c已關閉世界 PVP。' + ItemBlacklisted: '&c此處ç¦æ­¢ä½¿ç”¨æ­¤ç‰©å“。' + WorldPVPDisabled: '&cå·²åœç”¨ä¸–ç•Œ PVP。' NoPVPZone: '&céž PVP å€åŸŸã€‚' NoFriendlyFire: '&céžå‹è»å‚·å®³å€åŸŸã€‚' InvalidHelp: '&c無效說明é æ•¸ã€‚' TeleportDeny: '&c沒有傳é€çš„權é™ã€‚' - TeleportSuccess: '&e已傳é€' + TeleportSuccess: '&e已傳é€ã€‚' TeleportConfirmLava: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰é€²&6岩漿&c,若ä»è¦å‚³é€è«‹ä½¿ç”¨ &6/res tpconfirm &c來確定æ“作。' TeleportConfirmVoid: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰é€²&6虛空&c,若ä»è¦å‚³é€è«‹ä½¿ç”¨ &6/res tpconfirm &c來確定æ“作。' TeleportConfirm: '&c傳é€ä¸å®‰å…¨ï¼Œä½ å°‡æœƒæŽ‰è½ &6%1 &c格高的方塊,若ä»è¦å‚³é€è«‹ä½¿ç”¨ &6/res tpconfirm &c來確定æ“作。' @@ -496,28 +501,14 @@ Language: ListCreate: '&e已建立列表 &6%1&e。' PhysicalAreas: '&eå€åŸŸ' CurrentArea: '&eç›®å‰å€åŸŸï¼š&6%1' - TotalResSize: '&e總計尺寸:&6%1 立方公尺&e(&6%2 平方公尺&e)' + TotalResSize: '&e總計尺寸:&6%1 立方格&e(&6%2 平方格&e)' ResSize: - eastWest: '&eæ±/西:&6%1' - northSouth: '&e北/å—:&6%1' - upDown: '&e上/下:&6%1' - TotalWorth: '&e總計價值:&6%1&e(&6%2&e)' + eastWest: '&eæ±/西:&6%1 æ ¼' + northSouth: '&e北/å—:&6%1 æ ¼' + upDown: '&e上/下:&6%1 æ ¼' + TotalWorth: '&e總計價值:&6立方格價為 %1&e(&6平方格價為 %2&e)' TotalSubzones: '&eå­å€åŸŸé ˜åœ°ï¼š&6%1&e(&6%2&e)' NotOnline: '&e目標玩家一定è¦åœ¨ç·šä¸Šã€‚' - prevPage: '&2----<< &6ä¸Šä¸€é  ' - prevPageGui: '&6ä¸Šä¸€é  ' - prevPageClean: '&6上 ' - prevPageOff: '&2----<< &7ä¸Šä¸€é  ' - prevPageHover: '&7<<<' - firstPageHover: '&7|<' - nextPage: '&6 ä¸‹ä¸€é  &2>>----' - nextPageGui: '&6下一é ' - nextPageClean: '&6下' - nextPageOff: '&7 ä¸‹ä¸€é  &2>>----' - nextPageHover: '&7>>>' - lastPageHover: '&7>|' - pageCount: '&2%1&7/&2%2' - pageCountHover: '&e%1' GenericPages: '&eé  &6%1 &eçš„ &6%2&e(&6%3&e)' WorldEditNotFound: '&c未åµæ¸¬åˆ° WorldEdit。' CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' @@ -527,16 +518,16 @@ Language: BlockedTeleportIcon: '&7T' AllowedMovementIcon: '&2M' BlockedMovementIcon: '&7M' - AdminToggleTurnOn: '&6已開啟&e自動管ç†æ¨¡å¼' - AdminToggleTurnOff: '&6已關閉&e自動管ç†æ¨¡å¼' - NoSpawn: '&e你沒有é‡ç”Ÿé»ž&6移動&e的權é™ï¼Œæ­£åœ¨é‡æ–°å®šä½ã€‚' - CompassTargetReset: '&eå·²é‡æ–°è¨­å®šä½ çš„羅盤。' + AdminToggleTurnOn: '&6已啟用&e自動管ç†æ¨¡å¼' + AdminToggleTurnOff: '&6å·²åœç”¨&e自動管ç†æ¨¡å¼' + NoSpawn: '&e你沒有é‡ç”Ÿé»ž &6移動(move) &e的權é™ï¼Œæ­£åœ¨é‡æ–°å®šä½ã€‚' + CompassTargetReset: '&eå·²é‡è¨­ä½ çš„羅盤。' CompassTargetSet: '&e你的羅盤目å‰æŒ‡å‘ &6%1&e。' Ignorelist: '&2忽略å單:&6' Blacklist: '&c黑å單:&6' - LandCost: '&e領地總共花費:&6%1' - 'True': '&2é–‹å•Ÿ' - 'False': '&c關閉' + LandCost: '&e領地總計花費:&6%1' + 'True': '&2啟用' + 'False': '&cåœç”¨' Removed: '&6未設定' FlagState: '&e權é™ç‹€æ…‹ï¼š%1' Land: '&e領地:&6%1' @@ -556,9 +547,9 @@ Language: Owner: '&eæ“有者:&6%1' World: '&e世界:&6%1' Subzones: '&eå­å€åŸŸ' - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - NewPlayerInfo: '&e如果è¦å»ºç«‹é ˜åœ°ï¼Œè«‹ä½¿ç”¨ä¼ºæœå™¨æŒ‡å®šçš„工具,é¸æ“‡é ˜åœ°çš„兩個å°è§’,然後使用 &3/res create [領地å稱] &e指令。' + # 下é¢çš„幾行代表了領地傳é€çµ¦çŽ©å®¶çš„å„種訊æ¯ã€‚ + # 請注æ„,æŸäº›è¨Šæ¯å…·æœ‰åœ¨é‹è¡Œæ™‚æ’入的變é‡ï¼Œä¾‹å¦‚ %1。 + NewPlayerInfo: '&e如果è¦å»ºç«‹é ˜åœ°ï¼Œè«‹ä½¿ç”¨ä¼ºæœå™¨æŒ‡å®šçš„工具é¸æ“‡é ˜åœ°çš„兩個å°è§’,然後使用指令 &2/res create [領地å稱]&e。' CommandHelp: Description: 內涵領地說明 SubCommands: @@ -573,9 +564,9 @@ CommandHelp: Description: 在你周åœå»ºç«‹æœ€å¤§å…許範åœçš„領地 select: Info: - - '&e該指令用於é¸æ“‡é ˜åœ°çš„範åœ' - - '&6/res select [x] [y] [z] &e- é¸æ“‡ä»¥ä½ ç‚ºä¸­å¿ƒä¸€å®šç¯„åœçš„方塊' - Description: é¸æ“‡å·¥å…·æŒ‡ä»¤ + - 此指令用於é¸æ“‡é ˜åœ°çš„範åœã€‚ + - /res select [x] [y] [z] - é¸æ“‡ä»¥ä½ ç‚ºä¸­å¿ƒä¸€å®šç¯„åœçš„方塊。 + Description: é¸æ“‡æŒ‡ä»¤ SubCommands: coords: Description: 顯示已é¸æ“‡å€åŸŸçš„座標 @@ -586,7 +577,7 @@ CommandHelp: Info: - '&e用法:&6/res select size' auto: - Description: 開啟自動é¸æ“‡å·¥å…· + Description: 啟用自動é¸æ“‡å·¥å…· Info: - '&e用法:&6/res select auto [玩家å稱]' cost: @@ -597,67 +588,67 @@ CommandHelp: Description: 垂直擴展é¸æ“‡å€åŸŸ Info: - '&e用法:&6/res select vert' - - '&eå°‡é¸æ“‡å€åŸŸæ“´å±•é ‚部和底部' + - å°‡é¸æ“‡å€åŸŸæ“´å±•é ‚部和底部。 sky: Description: 擴展é¸æ“‡å€åŸŸåˆ°å¤©ç©º Info: - '&e用法:&6/res select sky' - - '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°é ‚部' + - å°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°é ‚部。 bedrock: Description: 擴展é¸æ“‡å€åŸŸåˆ°åŸºå²© Info: - '&e用法:&6/res select bedrock' - - '&eå°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°åº•éƒ¨' + - å°‡é¸æ“‡å€åŸŸæ“´å±•åˆ°åº•éƒ¨ã€‚ expand: Description: å‘é¢å°çš„æ–¹å‘擴展é¸æ“‡å€åŸŸ Info: - '&e用法:&6/res select expand <數é‡>' - - '&eå‘é¢å°çš„æ–¹å‘擴展 &6<數é‡> &e格方塊' + - å‘é¢å°çš„æ–¹å‘擴展 <數é‡> 格方塊。 shift: Description: å‘é¢å°çš„æ–¹å‘平移é¸æ“‡å€åŸŸ Info: - '&e用法:&6/res select shift <數é‡>' - - '&eå‘é¢å°çš„æ–¹å‘平移 &6<數é‡> &e格方塊' + - å‘é¢å°çš„æ–¹å‘平移 <數é‡> 格方塊。 chunk: Description: é¸æ“‡ä½ ç›®å‰æ‰€åœ¨çš„å€å¡Š Info: - '&e用法:&6/res select chunk' - - '&eé¸æ“‡ä½ ç›®å‰æ‰€åœ¨çš„å€å¡Š' + - é¸æ“‡ä½ ç›®å‰æ‰€åœ¨çš„å€å¡Šã€‚ residence: Description: é¸æ“‡é ˜åœ°ä¸­å­˜åœ¨çš„å€åŸŸ Info: - '&e用法:&6/res select residence <領地å稱>' - - '&eé¸æ“‡é ˜åœ°ä¸­å­˜åœ¨çš„å€åŸŸ' + - é¸æ“‡é ˜åœ°ä¸­å­˜åœ¨çš„å€åŸŸã€‚ worldedit: Description: 使用 WorldEdit é¸æ“‡å€åŸŸ Info: - '&e用法:&6/res select worldedit' - - '&e使用 WorldEdit é¸æ“‡å€åŸŸ' + - 使用 WorldEdit é¸æ“‡å€åŸŸã€‚ padd: Info: - '&e用法:&6/res padd <領地å稱> [玩家å稱]' - - '&e新增玩家的基本權é™' + - 新增玩家的基本權é™ã€‚ Description: 新增玩家到領地 placeholders: Info: - '&e用法:&6/res placeholders (parse) (placeholder) (玩家å稱)' - Description: 列出 placeholder 列表 + Description: 列出 Placeholder 列表 parse: '[result]' signconvert: Info: - '&e用法:&6/res signconvert' - - '&e嘗試從第三方æ’件轉æ›å„²å­˜å‘Šç¤ºç‰Œè³‡æ–™' + - 嘗試從第三方æ’件轉æ›å„²å­˜å‘Šç¤ºç‰Œè³‡æ–™ã€‚ Description: è½‰æ› ResidenceSign æ’件的告示牌 listallhidden: Info: - - '&e用法:&6/res listhidden <é æ•¸>' - - '&e顯示伺æœå™¨æ‰€æœ‰éš±è—的領地' + - 用法:&6/res listhidden <é æ•¸> + - 顯示伺æœå™¨æ‰€æœ‰éš±è—的領地。 Description: 顯示所有隱è—的領地 bank: Info: - '&e用法:&6/res bank [deposit/withdraw] <領地å稱> [金é¡]' - - '&e你必須站在領地中或指定領地å稱且' - - '&eæ“有銀行(bank)權é™' + - 你必須站在領地中或指定領地å稱, + - 且æ“有銀行(bank)權é™ã€‚ Description: 管ç†é ˜åœ°éŠ€è¡Œ create: Info: @@ -666,15 +657,15 @@ CommandHelp: listall: Info: - '&e用法:&6/res listall <é æ•¸> <世界å稱> <-a/-f>' - - '&e列出所有的領地' + - 列出所有的領地 Description: 列出所有的領地 info: Info: - '&e用法:&6/res info <領地å稱>' - - '&e留空 <領地å稱> 以顯示你目å‰æ‰€åœ¨çš„領地資訊' + - 留空 <領地å稱> 會顯示你目å‰æ‰€åœ¨çš„領地資訊。 Description: 顯示領地的資訊 area: - Description: 管ç†é ˜åœ°å€åŸŸ + Description: 管ç†é ˜åœ°å€åŸŸã€‚ Info: - '' SubCommands: @@ -690,7 +681,7 @@ CommandHelp: Description: 為領地新增å€åŸŸ Info: - '&e用法:&6/res area add [領地å稱] [å€åŸŸ ID]' - - '&e必須先é¸ä¸­å…©å€‹é¸æ“‡é»ž' + - 必須先é¸ä¸­å…©å€‹é¸æ“‡é»žã€‚ remove: Description: 移除領地å€åŸŸ Info: @@ -699,12 +690,12 @@ CommandHelp: Description: 替æ›é ˜åœ°å€åŸŸ Info: - '&e用法:&6/res area replace [領地å稱] [å€åŸŸ ID]' - - '&e必須先é¸ä¸­å…©å€‹é¸æ“‡é»ž' - - '&e如果新的å€åŸŸæ›´å¤§ï¼ŒäºŒè€…之間將會被填充' + - 必須先é¸ä¸­å…©å€‹é¸æ“‡é»žã€‚ + - 如果新的å€åŸŸæ›´å¤§ï¼ŒäºŒè€…之間將會被填充。 give: Info: - '&e用法:&6/res give <領地å稱> [玩家å稱] <-s>' - - '&e將你的領地轉移給目標玩家' + - 將你的領地轉移給目標玩家。 Description: 給予其他玩家領地 renamearea: Info: @@ -713,8 +704,8 @@ CommandHelp: contract: Info: - '&e用法:&6/res contract (領地å稱) [縮å°å–®ä½]' - - '&eå‘ä½ é¢å°çš„æ–¹å‘縮å°é ˜åœ°ï¼Œ' - - '&e領地å稱是å¯é¸å‘½åçš„' + - å‘ä½ é¢å°çš„æ–¹å‘縮å°é ˜åœ°ï¼Œ + - 領地å稱是å¯é¸çš„。 Description: å‘ä½ é¢å°çš„æ–¹å‘縮å°é ˜åœ° check: Info: @@ -723,14 +714,14 @@ CommandHelp: gset: Info: - '&e用法:&6/res gset <領地å稱> [群組] [權é™] [true/false/remove]' - - '&e使用 &6/res flags ? &e查看權é™åˆ—表' + - 使用 /res flags ? 查看權é™åˆ—表。 Description: 為æŸå€‹çµ„è¨­å®šé ˜åœ°çš„ç‰¹å®šæ¬Šé™ list: Info: - '&e用法:&6/res list <玩家å稱> <é æ•¸> <世界å稱>' - - '&e列出指定玩家æ“有的所有領地(除了隱è—領地)' - - '&e如果顯示自己的領地,隱è—領地也會被顯示' - - '&e如果è¦åˆ—出所有玩家的領地,請使用指令 &6/res listall' + - 列出指定玩家æ“有的所有領地(除了隱è—領地)。 + - 如果顯示自己的領地,隱è—領地也會被顯示。 + - 如果è¦åˆ—出所有玩家的領地,請使用指令 /res listall。 Description: 顯示領地列表 version: Info: @@ -743,18 +734,18 @@ CommandHelp: pdel: Info: - '&e用法:&6/res pdel <領地å稱> [玩家å稱]' - - '&e移除玩家的基本權é™' + - 移除玩家的基本權é™ã€‚ Description: 從領地移除玩家 market: Info: - - '&e用法:&6/res market ? &e查看更多資訊' + - '&e用法:&6/res market ? &e查看更多資訊。' Description: 購買ã€å‡ºå”®ã€ç§Ÿç”¨é ˜åœ° SubCommands: Info: Description: 查看領地的經濟資訊 Info: - '&e用法:&6/res market Info [領地å稱]' - - '&e顯示領地是å¦æ­£åœ¨å‡ºç§Ÿã€å‡ºå”®ä»¥åŠé ˜åœ°çš„花費' + - 顯示領地是å¦æ­£åœ¨å‡ºç§Ÿã€å‡ºå”®ä»¥åŠé ˜åœ°çš„花費。 list: Description: 顯示å¯å‡ºç§Ÿèˆ‡å¯å‡ºå”®çš„領地 Info: @@ -772,18 +763,18 @@ CommandHelp: Description: 出售領地 Info: - '&e用法:&6/res market sell [領地å稱] [金é¡]' - - '&e將領地以 &6[金é¡] &e的價格出售' - - '&e其他玩家å¯ä»¥ä½¿ç”¨ &6/res market buy 購買' + - 將領地以 [金é¡] 的價格出售。 + - 其他玩家å¯ä»¥ä½¿ç”¨ /res market buy 購買。 sign: Description: 設定市場告示牌 Info: - '&e用法:&6/res market sign [領地å稱]' - - '&e將看å‘的告示牌設定為領地市場告示牌' + - 將看å‘的告示牌設定為領地市場告示牌。 buy: Description: 購買領地 Info: - '&e用法:&6/res market buy [領地å稱]' - - '&e如果該領地正在出售,則購買這個領地' + - 如果此領地正在出售,則購買這個領地。 unsell: Description: å–消出售領地 Info: @@ -792,16 +783,15 @@ CommandHelp: Description: 租用領地 Info: - '&e用法:&6/res market rent [領地å稱] <自動續租付款>' - - '&e租用領地。自動續租å¯è¨­å®šç‚º true 或 false,如果是 true 並且ç²å¾—領地æ“有者å…許,領地將會在租約到期之å‰è‡ªå‹•çºŒç§Ÿ' + - 租用領地。自動續租å¯è¨­å®šç‚º true 或 false,如果是 true 並且ç²å¾—領地æ“有者å…許,領地將會在租約到期之å‰è‡ªå‹•çºŒç§Ÿã€‚ rentable: Description: 出租領地 Info: - - '&e用法:&6/res market rentable [領地å稱] [花費] [天數] - ' - - '&e使領地出租以 [天數] 來計算 [花費]' - - '&e如果開啟 ,則在租約到期å‰å¯å†æ¬¡å‡ºç§Ÿ' - - '&e如果開啟 ,則在租約到期後留在市場上' - - '&e如果開啟 ,則出租到期時直接自動續租付款' + - '&e用法:&6/res market rentable [領地å稱] [花費] [天數] ' + - 使領地出租以 [天數] 來計算 [花費] + - 如果啟用 ,則在租約到期å‰å¯å†æ¬¡å‡ºç§Ÿã€‚ + - 如果啟用 ,則在租約到期後留在市場上。 + - 如果啟用 ,則出租到期時直接自動續租付款。 autopay: Description: 設定領地自動續租付款 Info: @@ -818,39 +808,39 @@ CommandHelp: Description: å–消領地租用或出租狀態 Info: - '&e用法:&6/res market unrent [領地å稱]' - - '&e如果你是租用者,該指令將會退租領地' - - '&e如果你是æ“有者,該指令將會收回領地' + - 如果你是租用者,此指令將會退租領地。 + - 如果你是æ“有者,此指令將會收回領地。 rc: Info: - '&e用法:&6/res rc (領地å稱)' - - '&e加入領地èŠå¤©é »é“' + - 加入領地èŠå¤©é »é“。 Description: 加入目å‰æˆ–指定的領地èŠå¤©é »é“ SubCommands: leave: Description: 離開目å‰çš„領地èŠå¤©é »é“ Info: - '&e用法:&6/res rc leave' - - '&e如果你在領地èŠå¤©é »é“內,那你將離開領地èŠå¤©é »é“' + - 如果你在領地èŠå¤©é »é“內,那你將離開領地èŠå¤©é »é“。 setcolor: Description: 設定領地èŠå¤©é »é“文字é¡è‰² Info: - '&e用法:&6/res rc setcolor [é¡è‰²ä»£ç¢¼]' - - '&e設定領地èŠå¤©é »é“文字é¡è‰²' + - 設定領地èŠå¤©é »é“文字é¡è‰²ã€‚ setprefix: Description: 設定領地èŠå¤©é »é“å‰ç¶´ Info: - '&e用法:&6/res rc setprefix [æ–°å‰ç¶´]' - - '&e設定領地èŠå¤©é »é“å‰ç¶´' + - 設定領地èŠå¤©é »é“å‰ç¶´ã€‚ kick: Description: 從領地èŠå¤©é »é“中踢出玩家 Info: - '&e用法:&6/res rc kick [玩家å稱]' - - '&e從領地èŠå¤©é »é“中踢出玩家' + - 從領地èŠå¤©é »é“中踢出玩家。 expand: Info: - '&e用法:&6/res expand (領地å稱) [擴展單ä½]' - - '&eå‘ä½ é¢å°çš„æ–¹å‘擴展領地è¦æ¨¡ï¼Œ' - - '&e領地å稱是å¯é¸å‘½åçš„' + - å‘ä½ é¢å°çš„æ–¹å‘擴展領地è¦æ¨¡ï¼Œ + - 領地å稱是å¯é¸çš„。 Description: å‘ä½ é¢å°çš„æ–¹å‘擴展領地 compass: Info: @@ -858,7 +848,7 @@ CommandHelp: Description: 設定指å‘領地的羅盤 lists: Info: - - '&eé å…ˆå®šç¾©çš„權é™åˆ—表å¯ä»¥è¢«æ‡‰ç”¨åˆ°é ˜åœ°ä¸Š' + - é å…ˆå®šç¾©çš„權é™åˆ—表å¯ä»¥è¢«æ‡‰ç”¨åˆ°é ˜åœ°ä¸Šã€‚ Description: é å…ˆæŒ‡å®šæ¬Šé™åˆ—表 SubCommands: add: @@ -892,12 +882,12 @@ CommandHelp: reset: Info: - '&e用法:&6/res reset <領地å稱/all>' - - '&e將領地的所有權é™é‡ç½®' + - 將領地的所有權é™é‡è¨­ã€‚ Description: 將領地設定還原為é è¨­å€¼ listhidden: Info: - '&e用法:&6/res listhidden <玩家å稱> <é æ•¸>' - - '&e列出玩家æ“有的隱è—領地' + - 列出玩家æ“有的隱è—領地。 Description: 列出隱è—領地 raid: Info: @@ -909,92 +899,92 @@ CommandHelp: setmain: Info: - '&e用法:&6/res setmain (領地å稱)' - - '&e將指定的領地設為 main' + - 將指定的領地設為 main。 Description: 將定義的領地å稱作為å‰ç¶´é¡¯ç¤ºåœ¨èŠå¤©ä¸­ server: Info: - '&e用法:&6/resadmin server [領地å稱]' - - '&e建立伺æœå™¨çš„領地' + - 建立伺æœå™¨çš„領地。 Description: 建立伺æœå™¨é ˜åœ° rt: Info: - '&e用法:&6/res rt (世界å稱) (玩家å稱)' - - '&e傳é€åˆ°æŒ‡å®šä¸–界的隨機ä½ç½®' + - 傳é€åˆ°æŒ‡å®šä¸–界的隨機ä½ç½®ã€‚ Description: 傳é€åˆ°ä¸–界的隨機ä½ç½® mirror: Info: - '&e用法:&6/res mirror [原領地å稱] [目標領地å稱]' - - '&e將權é™å¾žè©²é ˜åœ°é¡åƒåˆ°å¦ä¸€å€‹é ˜åœ°ï¼Œä½ å¿…須是兩者的所有者或管ç†å“¡æ‰èƒ½åŸ·è¡Œè©²æ“作' + - 將權é™å¾žæ­¤é ˜åœ°é¡åƒåˆ°å¦ä¸€å€‹é ˜åœ°ï¼Œä½ å¿…須是兩者的所有者或管ç†å“¡æ‰èƒ½åŸ·è¡Œæ­¤æ“作。 Description: é¡åƒæ¬Šé™ shop: Info: - - '&e管ç†é ˜åœ°çš„商店功能' + - 管ç†é ˜åœ°çš„商店功能。 Description: 管ç†é ˜åœ°å•†åº— SubCommands: list: Description: 顯示領地商店列表 Info: - '&e用法:&6/res shop list' - - '&e顯示所有作為商店的領地' + - 顯示所有作為商店的領地。 vote: Description: 為領地商店投票 Info: - '&e用法:&6/res shop vote <領地å稱> [票數]' - - '&e為目å‰æˆ–指定領地商店投票' + - 為目å‰æˆ–指定領地商店投票。 like: Description: 為領地商店按讚 Info: - '&e用法:&6/res shop like <領地å稱>' - - '&e為領地商店按讚' + - 為領地商店按讚。 votes: Description: 顯示領地商店投票 Info: - '&e用法:&6/res shop votes <領地å稱> <é æ•¸>' - - '&e顯示目å‰æˆ–指定領地商店的投票列表' + - 顯示目å‰æˆ–指定領地商店的投票列表。 likes: Description: 顯示領地商店的按讚 Info: - '&e用法:&6/res shop likes <領地å稱> <é æ•¸>' - - '&e顯示目å‰æˆ–指定的領地商店按讚列表' + - 顯示目å‰æˆ–指定的領地商店按讚列表。 setdesc: Description: 設定領地商店æè¿° Info: - '&e用法:&6/res shop setdesc [文字]' - - '&e設定領地商店æ述,並且支æŒé¡è‰²ä»£ç¢¼ï¼Œç”¨ /n 表示æ›è¡Œ' + - 設定領地商店æ述,並且支æ´é¡è‰²ä»£ç¢¼ï¼Œç”¨ /n 表示æ›è¡Œã€‚ createboard: Description: 建立商店宣傳é¢æ¿ Info: - '&e用法:&6/res shop createboard [ä½ç½®]' - - '&e在é¸æ“‡å€åŸŸå»ºç«‹å•†åº—宣傳é¢æ¿ï¼Œæ”¾ç½®ä½ç½® - å³å®£å‚³é¢æ¿çš„起始ä½ç½®' + - 在é¸æ“‡å€åŸŸå»ºç«‹å•†åº—宣傳é¢æ¿ï¼Œæ”¾ç½®ä½ç½® - å³å®£å‚³é¢æ¿çš„起始ä½ç½®ã€‚ deleteboard: Description: 移除商店宣傳é¢æ¿ Info: - '&e用法:&6/res shop deleteboard' - - '&eå°å®£å‚³é¢æ¿çš„告示牌點擊å³éµä»¥ç§»é™¤å®£å‚³é¢æ¿' + - å°å®£å‚³é¢æ¿çš„告示牌點擊å³éµä»¥ç§»é™¤å®£å‚³é¢æ¿ã€‚ lset: Info: - '&e用法:&6/res lset <領地å稱> [blacklist/ignorelist] [ç‰©å“ ID]' - '&e用法:&6/res lset <領地å稱> Info' - - '&e將物å“加入黑å單,物å“將被阻止放置在領地中,' - - '&e將物å“加入忽略å單,物å“å°‡ä¸æœƒè¢«é ˜åœ°æ‰€ä¿è­·' + - 將物å“加入黑å單,物å“將被阻止放置在領地中, + - 將物å“加入忽略å單,物å“å°‡ä¸æœƒè¢«é ˜åœ°æ‰€ä¿è­·ã€‚ Description: 更改黑å單和忽略åå–®é¸é … raidstatus: Info: - - '&e用法:&6/res raidstatus (領地å稱/玩家å稱)' + - 用法:&6/res raidstatus (領地å稱/玩家å稱)。 Description: 查看領地的侵略狀態 pset: Info: - '&e用法:&6/res pset <領地å稱> [玩家å稱] [權é™] [true/false/remove]' - '&e用法:&6/res pset <領地å稱> [玩家å稱] removeall' - - '&e使用 &6/res flags ? &e查看權é™åˆ—表' + - 使用 /res flags ? 查看權é™åˆ—表。 Description: ç‚ºçŽ©å®¶è¨­å®šé ˜åœ°çš„ç‰¹å®šæ¬Šé™ show: Info: - - '&e用法:&6/res show <領地å稱>' + - 用法:&6/res show <領地å稱>。 Description: 顯示領地邊界 flags: Info: - - '&e設定領地權é™æ™‚,true çš„æ„æ€ç‚ºå…許æ“作,false çš„æ„æ€ç‚ºç¦æ­¢æ“作' + - 設定領地權é™æ™‚,true çš„æ„æ€ç‚ºå…許æ“作,false çš„æ„æ€ç‚ºç¦æ­¢æ“作。 Description: 權é™åˆ—表 SubCommands: anvil: @@ -1027,6 +1017,11 @@ CommandHelp: Description: å…許或ç¦æ­¢é ˜åœ°å…§éµç §æ壞 Info: - '&e用法:&6/res set <領地å稱> anvilbreak true/false/remove' + safezone: + Translated: 安全å€åŸŸï¼ˆsafezone) + Description: 設定為 true 會使領地清除æˆå“¡è² é¢æ•ˆæžœ + Info: + - '&eUsage: &6/res set safezone true/false/remove' backup: Translated: 備份與還原(backup) Description: 如果設定為 trueï¼Œå‰‡å›žå¾©å›žåŽŸæœ¬çš„é ˜åœ°æ¨£è²Œï¼ˆéœ€è¦ WordEdit) @@ -1077,6 +1072,11 @@ CommandHelp: Description: å…許或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰éˆ• Info: - '&e用法:&6/res set/pset <領地å稱> button true/false/remove' + brush: + Translated: 使用刷å­ï¼ˆbrush) + Description: å…許或ç¦æ­¢åˆ·æŽƒæ–¹å¡Š + Info: + - '&e用法: &6/res set/pset <領地å稱> brush true/false/remove' cake: Translated: åƒè›‹ç³•ï¼ˆcake) Description: å…許或ç¦æ­¢çŽ©å®¶åƒè›‹ç³• @@ -1123,8 +1123,8 @@ CommandHelp: Info: - '&e用法:&6/res set <領地å稱> coords true/false/remove' copper: - Translated: 修改銅方塊(copper) - Description: å…許修改銅方塊 + Translated: 變更銅方塊(copper) + Description: å…許變更銅方塊 Info: - '&e用法:&6/res set/pset <領地å稱> copper true/false/remove' craft: @@ -1148,7 +1148,7 @@ CommandHelp: Info: - '&e用法:&6/res set <領地å稱> day true/false/remove' dye: - Translated: 染色羊(dye) + Translated: 羊染色(dye) Description: å…許或ç¦æ­¢ç¾ŠæŸ“色 Info: - '&e用法:&6/res set/pset <領地å稱> dye true/false/remove' @@ -1393,18 +1393,18 @@ CommandHelp: Info: - '&e用法:&6/res set <領地å稱> night true/false/remove' nofly: - Translated: 使用飛行(nofly) + Translated: ç¦æ­¢é£›è¡Œï¼ˆnofly) Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§é£›è¡Œ Info: - '&e用法:&6/res set/pset <領地å稱> nofly true/false/remove' fly: Translated: 自動飛行(fly) - Description: 自動開啟或關閉領地內的玩家飛行 + Description: 自動啟用或åœç”¨é ˜åœ°å…§çš„玩家飛行 Info: - '&e用法:&6/res set/pset <領地å稱> fly true/false/remove' nomobs: Translated: 防止怪物進入(nomobs) - Description: 防止怪物進入領地,需è¦åœ¨é…置檔案開啟 AutoMobRemoval + Description: 防止怪物進入領地,需è¦åœ¨é…置檔案啟用 AutoMobRemoval Info: - '&e用法:&6/res set <領地å稱> nomobs true/false/remove' note: @@ -1429,7 +1429,6 @@ CommandHelp: - '&e用法:&6/res set/pset <領地å稱> pressure true/false/remove' piston: Translated: 使用活塞(piston) - Description: å…許或ç¦æ­¢åœ¨é ˜åœ°å…§ä½¿ç”¨æ´»å¡žæŽ¨æˆ–拉 Info: - '&e用法:&6/res set <領地å稱> piston true/false/remove' pistonprotection: @@ -1463,7 +1462,7 @@ CommandHelp: Info: - '&e用法:&6/res set/pset <領地å稱> riding true/false/remove' shoot: - Translated: 使用射擊(shoot) + Translated: 射擊(shoot) Description: å…許或ç¦æ­¢åœ¨å€åŸŸå…§å°„æ“Š Info: - '&e用法:&6/res set <領地å稱> shoot true/false/remove' @@ -1626,23 +1625,23 @@ CommandHelp: subzone: Info: - '&e用法:&6/res subzone <領地å稱> [å­å€åŸŸå稱]' - - '&e如果領地å稱被忽略,將嘗試使用原有的領地å稱' + - 如果領地å稱被忽略,將嘗試使用原有的領地å稱。 Description: 在領地中建立å­å€åŸŸ removeworld: Info: - '&e用法:&6/res removeworld [世界å稱]' - - '&e該指令åªèƒ½åœ¨æŽ§åˆ¶å°åŸ·è¡Œ' + - 此指令åªèƒ½åœ¨æŽ§åˆ¶å°åŸ·è¡Œã€‚ Description: 移除指定世界中的所有領地 limits: Info: - '&e用法:&6/res limits (玩家å稱)' - - '&e顯示你在建立和管ç†é ˜åœ°æ–¹é¢çš„å„種é™åˆ¶' + - 顯示你在建立和管ç†é ˜åœ°æ–¹é¢çš„å„種é™åˆ¶ã€‚ Description: 顯示你的領地é™åˆ¶ set: Info: - '&e用法:&6/res set <領地å稱> [權é™] [true/false/remove]' - - '&e使用 &6/res flags ? &e查看權é™åˆ—表' - - '&e這些權é™é©ç”¨æ‰€æœ‰çš„玩家(詳見 &6/res pset ?&e)' + - 使用 &6/res flags ? 查看權é™åˆ—表, + - 這些權é™é©ç”¨æ‰€æœ‰çš„玩家(詳見 /res pset ?)。 Description: ç‚ºé ˜åœ°è¨­å®šé€šç”¨æ¬Šé™ clearflags: Info: @@ -1651,21 +1650,21 @@ CommandHelp: message: Info: - '&e用法:&6/res message <領地å稱> [enter/leave] [訊æ¯]' - - '&e設定領地加入或離開的訊æ¯' + - 設定領地加入或離開的訊æ¯ã€‚ - '&e用法:&6/res message <領地å稱> remove [enter/leave]' - - '&e移除加入或離開的訊æ¯' + - 移除加入或離開的訊æ¯ã€‚ Description: 管ç†é ˜åœ°åŠ å…¥æˆ–é›¢é–‹è¨Šæ¯ command: Info: - '&e用法:&6/res command <領地å稱> <指令>' - - '&e顯示列表,新增或移除領地中å…許或ç¦æ­¢çš„指令' - - '&e使用「_ã€å¯åŒ…å«å¤šå€‹è®Šé‡çš„指令' + - 顯示列表,新增或移除領地中å…許或ç¦æ­¢çš„指令。 + - 使用「_ã€å¯åŒ…å«å¤šå€‹è®Šé‡çš„指令。 Description: 管ç†å…許或ç¦æ­¢çš„領地指令 confirm: Description: 確èªç§»é™¤é ˜åœ° Info: - '&e用法:&6/res confirm' - - '&e確èªç§»é™¤é ˜åœ°' + - 確èªç§»é™¤é ˜åœ°ã€‚ resadmin: Info: - '&e用法:&6/res resadmin [on/off]' @@ -1673,20 +1672,20 @@ CommandHelp: tpset: Info: - '&e用法:&6/res tpset' - - '&e把你站的ä½ç½®è¨­å®šç‚ºé ˜åœ°çš„傳é€é»žï¼Œ' - - '&eå‰æ是你一定è¦åœ¨é ˜åœ°å…§ï¼Œ' - - '&e且你還一定è¦æ˜¯é ˜åœ°æ“有者或者æ“有管ç†å“¡æ¬Šé™' + - 把你站的ä½ç½®è¨­å®šç‚ºé ˜åœ°çš„傳é€é»žã€‚ + - å‰æ是你一定è¦åœ¨é ˜åœ°å…§ï¼Œ + - 且你還一定è¦æ˜¯é ˜åœ°æ“有者或者æ“有管ç†å“¡æ¬Šé™ã€‚ Description: 設定傳é€é»ž tpconfirm: Info: - '&e用法:&6/res tpconfirm' - - '&eå³ä½¿å‚³é€é»žä¸å®‰å…¨ï¼Œä»ç„¶å¼·åˆ¶å‚³é€åˆ°é ˜åœ°' + - å³ä½¿å‚³é€é»žä¸å®‰å…¨ï¼Œä»ç„¶å¼·åˆ¶å‚³é€åˆ°é ˜åœ°ã€‚ Description: 忽略ä¸å®‰å…¨å‚³é€è­¦å‘Š removeall: Info: - '&e用法:&6/res removeall [æ“有者]' - - '&e移除自己的所有領地' - - '&e如果你å°é™¤ä½ è‡ªå·±ä»¥å¤–çš„ä»»ä½•äººä½¿ç”¨å®ƒï¼Œå‰‡éœ€è¦ /resadmin' + - 移除自己的所有領地。 + - 如果你å°é™¤ä½ è‡ªå·±ä»¥å¤–çš„ä»»ä½•äººä½¿ç”¨å®ƒï¼Œå‰‡éœ€è¦ /resadmin。 Description: 移除指定玩家的所有領地 material: Info: @@ -1695,19 +1694,19 @@ CommandHelp: kick: Info: - '&e用法:&6/res kick &6<玩家å稱>' - - '&e你必須是領地æ“有者' - - '&e且玩家必須在線上' + - 你必須是領地æ“有者, + - 且玩家必須在線上。 Description: 踢出指定玩家 sublist: Info: - '&e用法:&6/res sublist <領地å稱> <é æ•¸>' - - '&e列出所有å­å€åŸŸ' + - 列出所有å­å€åŸŸã€‚ Description: 列出所有å­å€åŸŸ rename: Info: - '&e用法:&6/res rename [舊領地å稱] [新領地å稱]' - - '&e你必須是æ“有者或管ç†å“¡æ‰èƒ½é€²è¡Œè©²é …æ“作,' - - '&eæ–°å稱ä¸èƒ½èˆ‡ç¾æœ‰é ˜åœ°å稱é‡è¤‡' + - 你必須是æ“有者或管ç†å“¡æ‰èƒ½é€²è¡Œæ­¤é …æ“作, + - æ–°å稱ä¸èƒ½èˆ‡ç¾æœ‰é ˜åœ°å稱é‡è¤‡ã€‚ Description: é‡æ–°å‘½å領地 setallfor: Info: @@ -1716,40 +1715,40 @@ CommandHelp: lease: Info: - '&e用法:&6/res lease [renew/cost] [領地å稱]' - - '&6/res lease cost &e顯示續租領地的花費' - - '&6/res lease renew &e將會續租指定的領地' + - /res lease cost 顯示續租領地的花費。 + - /res lease renew 將會續租指定的領地。 Description: 管ç†é ˜åœ°ç§Ÿç´„ SubCommands: set: Description: 設定租約時間 Info: - '&e用法:&6/resadmin lease set [領地å稱] [#days/infinite]' - - '&e將租約時間設定為特定天數或無é™åˆ¶' + - 將租約時間設定為特定天數或無é™åˆ¶ã€‚ renew: Description: 續租租約時間 Info: - '&e用法:&6/resadmin lease renew <領地å稱>' - - '&e續租目å‰æˆ–指定的領地租約' + - 續租目å‰æˆ–指定的領地租約。 list: Description: 顯示目å‰ä½æ‰€çš„租約列表 Info: - '&e用法:&6/resadmin lease list <領地å稱> <é æ•¸>' - - '&e顯示目å‰æ‰€æœ‰å­å€åŸŸçš„租約時間' + - 顯示目å‰æ‰€æœ‰å­å€åŸŸçš„租約時間。 expires: Description: 租約到期時間 Info: - '&e用法:&6/resadmin lease expires <領地å稱>' - - '&e顯示領地租約到期的時間' + - 顯示領地租約到期的時間。 cost: Description: 顯示續租花費 Info: - '&e用法:&6/resadmin lease cost <領地å稱>' - - '&e顯示續租領地所需的花費' + - 顯示續租領地所需的花費。 tp: Info: - '&e用法:&6/res tp [領地å稱]' - - '&e傳é€åˆ°ä½ æŒ‡å®šçš„領地,你必須æ“有傳é€ï¼ˆtp)權é™æˆ–是æ“有者æ‰èƒ½åŸ·è¡Œè©²æ“作' - - '&e伺æœå™¨ç®¡ç†å“¡éœ€è¦çµ¦äºˆä½ è¨­å®šçš„權é™' + - 傳é€åˆ°ä½ æŒ‡å®šçš„領地,你必須æ“有傳é€ï¼ˆtp)權é™æˆ–是æ“有者æ‰èƒ½åŸ·è¡Œæ­¤æ“作。 + - 伺æœå™¨ç®¡ç†å“¡éœ€è¦çµ¦äºˆä½ è¨­å®šçš„權é™ã€‚ Description: 傳é€åˆ°é ˜åœ° setall: Info: @@ -1763,5 +1762,5 @@ CommandHelp: Description: 載入領地存檔 Info: - '&e用法:&6/resload' - - '&e該指令ä¸å®‰å…¨ï¼Œå®ƒä¸æœƒå…ˆä¿å­˜é ˜åœ°ç‹€æ…‹ï¼Œ' - - '&e請確定變更完領地後å†é‡æ–°è¼‰å…¥å­˜æª”' + - 此指令ä¸å®‰å…¨ï¼Œå®ƒä¸æœƒå…ˆä¿å­˜é ˜åœ°ç‹€æ…‹ï¼Œ + - 請確定變更完領地後å†é‡æ–°è¼‰å…¥å­˜æª”。 From 60f1776f50cf59bcebb6fd0b3eebd9e35ee09873 Mon Sep 17 00:00:00 2001 From: Clexus <62130504+Clexus@users.noreply.github.com> Date: Sat, 15 Jul 2023 21:56:38 +0800 Subject: [PATCH 1045/1142] Add files via upload --- src/Language/Chinese.yml | 3529 +++++++++++++++++++------------------- 1 file changed, 1776 insertions(+), 1753 deletions(-) diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml index 0f741e8e5..dbe5d72d0 100644 --- a/src/Language/Chinese.yml +++ b/src/Language/Chinese.yml @@ -1,1753 +1,1776 @@ -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. - -Language: - Invalid: - Player: '&c无效的玩家å...' - PlayerOffline: '&c玩家已离线' - World: '&c无效的世界...' - Residence: '&c无效的领地...' - Subzone: '&c无效的领地å­åŒºåŸŸ...' - Direction: '&c无效的方å‘...' - Amount: '&c无效的数é‡...' - Cost: '&c无效的花费...' - Days: '&c无效的天数...' - Material: '&c无效的ææ–™...' - Boolean: '&c无效值, 必须为 &6true(t) &c或者 &6false(f)' - Area: '&c无效的区域...' - Group: '&c无效的æƒé™ç»„...' - MessageType: '&c消æ¯ç±»åž‹å¿…须为 enter(进入), leave(离开) 或 remove(移除).' - Flag: '&c无效æƒé™...' - FlagType: - Fail: '&c无效标志... 这个标志åªèƒ½ç”¨åœ¨ %1' - Player: 玩家 - Residence: 领地 - FlagState: '&c无效æƒé™çŠ¶æ€, 必须为 &6true(t)&c, &6false(f)&c, 或 &6remove(r)' - List: '&e未知åå•ç±»åž‹, 必须是 &6blacklist(黑åå•) &e或 &6ignorelist(忽略åå•).' - Page: '&e无效页é¢...' - Help: '&c无效帮助页é¢...' - NameCharacters: '&cå字中包å«æ— æ•ˆå­—符...' - FromConsole: '&cä½ åªèƒ½åœ¨æŽ§åˆ¶å°ä¸­ä½¿ç”¨!' - Ingame: '&cä½ åªèƒ½åœ¨æ¸¸æˆä¸­ä½¿ç”¨!' - Area: - Exists: '&c区域å已存在.' - Create: '&e领地区域创建æˆåŠŸ, ID &6%1' - DiffWorld: '&c区域与领地在ä¸åŒä¸–ç•Œ.' - Collision: '&c区域与领地 &6%1 &c冲çª.' - SubzoneCollision: '&c区域与领地å­åŒºåŸŸ &6%1 &c冲çª.' - NonExist: '&c区域ä¸å­˜åœ¨.' - InvalidName: '&c无效区域å...' - ToSmallX: '&c选区 &6X &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' - ToSmallY: '&c选区高度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' - ToSmallZ: '&c选区 &6Z &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' - ToBigX: '&c你选择的 &6X &cåæ ‡ (&6%1&c) 太大了. &e请ä¿è¯é€‰æ‹©å¤§å°åœ¨ &6%2 &e之内' - ToBigY: '&c你选择的 &6Y &cåæ ‡ (&6%1&c) 太大了. &e请ä¿è¯é€‰æ‹©å¤§å°åœ¨ &6%2 &e之内' - ToBigZ: '&c你选择的 &6Z &cåæ ‡ (&6%1&c) 太大了. &e请ä¿è¯é€‰æ‹©å¤§å°åœ¨ &6%2 &e之内' - Rename: '&e区域 &6%1 &e已被é‡å‘½å为 &6%2' - Remove: '&e已删除区域 &6%1&e.' - Name: '&eå称: &2%1' - ListAll: '&a{&eID:&c%1 &eP1:&c(%2,%3,%4) &eP2:&c(%5,%6,%7) &e(尺寸:&c%8&e)&a}' - RemoveLast: '&cä¸èƒ½ç§»é™¤é¢†åœ°ä¸­çš„最åŽä¸€ä¸ªåŒºåŸŸ.' - NotWithinParent: '&c该区域ä¸åœ¨çˆ¶åŒºåŸŸå†….' - Update: '&e区域已更新...' - MaxPhysical: '&e已达到领地所å…许的最大空间.' - SizeLimit: '&e区域大å°è¶…出了å…许的尺寸上é™.' - HighLimit: '&cä½ ä¸èƒ½ä¿æŠ¤è¿™ä¹ˆé«˜çš„领地, 高度上é™ä¸º &6%1' - LowLimit: '&cä½ ä¸èƒ½ä¿æŠ¤è¿™ä¹ˆæ·±çš„领地, 深度上é™ä¸º &6%1' - Select: - Points: '&e执行命令å‰éœ€è¦å…ˆé€‰ä¸­ä¸¤ä¸ªé€‰å–点!' - Overlap: '&c选å–点与区域 &6%1 &cé‡å !' - WorldGuardOverlap: '&c选å–点与 WorldGuard 区域 &6%1 &cé‡å !' - KingdomsOverlap: '&c你选择的å标和 &6%1 &c王国的土地产生了冲çªï¼' - Success: '&e选å–点æˆåŠŸ!' - Fail: '&c无效的选择命令...' - Bedrock: '&e将选区扩展到最大深度.' - Sky: '&e将选区扩展到最大高度.' - Area: '&e已选择 &6%2 &e领地的 &6%1 &e区域.' - Tool: '&e- 选区工具: &6%1' - PrimaryPoint: '&e已选择 &6第一个 &e选å–点 %1' - SecondaryPoint: '&e已选择 &6第二个 &e选å–点 %1' - Primary: '&e第一个选å–点: &6%1' - Secondary: '&e第二个选å–点: &6%1' - TooHigh: '&c警告: 选区越过了地图顶部, 并且已被è£å‰ª.' - TooLow: '&c警告: 选区越过了地图底部, 并且已被è£å‰ª.' - TotalSize: '&e选区总大å°: &6%1' - AutoEnabled: '&e自动选择模å¼&6å¼€å¯&e. 输入 &6/res select auto &e关闭.' - AutoDisabled: '&e自动选择模å¼&6关闭&e. 输入 &6/res select auto &eå†æ¬¡æ‰“å¼€.' - Disabled: '&c你没有æƒé™ä½¿ç”¨é€‰æ‹©å‘½ä»¤.' - Sign: - Updated: '&6%1 &e木牌已更新!' - TopLine: '[领地市场]' - DateFormat: YY/MM/dd HH:mm - ForRentTopLine: '&0出租' - ForRentPriceLine: '&0%1&f/&0%2&f/&0%3' - ForRentResName: '&0%1' - ForRentBottomLine: '&9å¯ç”¨' - RentedAutorenewTrue: '&2%1' - RentedAutorenewFalse: '&c%1' - RentedTopLine: '%1' - RentedPriceLine: '&0%1&f/&0%2&f/&0%3' - RentedResName: '&0%1' - RentedBottomLine: '&1%1' - ForSaleTopLine: '&0出售' - ForSalePriceLine: '&0%1' - ForSaleResName: '&0%1' - ForSaleBottom: '&0%1m³' - LookAt: '&c请将鼠标准星对准木牌' - ResName: '&0%1' - Owner: '&0%1' - Raid: - NotEnabled: '&c未å¯ç”¨çªè¢­åŠŸèƒ½!' - NotIn: '&cä½ ä¸åœ¨çªå‡»é˜Ÿä¸­!' - CantLeave: '&cä½ ä¸èƒ½ç¦»å¼€ (%1) çªè¢­è‡ªå·±çš„ä½æ‰€!' - CantKick: '&cä¸èƒ½è¸¢ (%1) 领地的所有者!' - Kicked: '&e踢了 &7%1 &e从 &7%2 &e领地çªè¢­!' - StartsIn: '&7çªè¢­å¼€å§‹äºŽ: [autoTimeLeft] &2%1D &4%2A' - EndsIn: '&cçªè¢­ç»“æŸäºŽ: [autoTimeLeft] &2%1D &4%2A' - Ended: '&7çªè¢­ &4%1 &7结æŸäº†!' - cantDo: '&cçªè¢­æ—¶ä¸èƒ½è¿™æ ·åš!' - left: '&7ä½ å·²ç»ç¦»å¼€äº† &4%1 &7çªè¢­' - noFlagChange: '&cçªè¢­æ—¶ä¸èƒ½æ”¹å˜æƒé™' - noRemoval: '&cçªè¢­æ—¶ä¸èƒ½æ‹†é™¤é¢†åœ°' - immune: '&e下一步的å…ç–« %1' - notImmune: '&eä¸å†æœ‰è±å…æƒ' - notInRaid: '&e玩家ä¸åœ¨çªå‡»é˜Ÿä¸­' - attack: - Joined: '&7加入 &2%1 &7çªè¢­!' - Started: '&7çªè¢­å¼€å§‹!' - cooldown: '&c对这座领地进行å¦ä¸€æ¬¡çªè¢­ä¸ºæ—¶è¿‡æ—©! 等待 %1' - immune: '&c这座领地对çªè¢­æ˜¯å…ç–«çš„! 等待 %1' - playerImmune: '&c领地主人对çªè¢­å…·æœ‰å…疫力! 等待 %1' - isOffline: '&c当主人ä¸åœ¨çº¿æ—¶ï¼Œä¸èƒ½çªè¢­!' - noSubzones: '&cä¸èƒ½çªè¢­å­åŒºåŸŸ!' - noSelf: '&cä¸èƒ½çªè¢­è‡ªå·±çš„领地!' - alreadyInAnother: '&cä¸èƒ½å‚加这个活动,你已ç»åœ¨å¦ä¸€ä¸ªæ´»åŠ¨ä¸­äº† (%1)' - defend: - Joined: '&7加入 &2%1 &7çªè¢­é˜²å¾¡!' - Sent: '&7å‘é€åŠ å…¥çªè¢­é˜²å¾¡çš„请求,等待确认' - Join: '&7加盟 &6%1 &7çªè¢­é˜²å¾¡' - Invitation: '&7接å—çªè¢­é˜²å¾¡ï¼Œä»Ž &6%1' - JoinedDef: '&2%1&7 加入çªè¢­é˜²å¾¡!' - IsOffline: '&c当所有者ä¸åœ¨çº¿æ—¶ï¼Œä¸èƒ½åŠ å…¥è¾©æŠ¤å°ç»„!' - noSelf: '&cä½ å·²ç»åœ¨ä¸ºè¿™ä¸ªé¢†åœ°è¾©æŠ¤äº†' - notRaided: '&c领地ä¸åœ¨çªè¢­èŒƒå›´å†…' - alreadyInAnother: '&cä¸èƒ½å‚加这个领地辩护,你已ç»åœ¨å¦ä¸€ä¸ªé¢†åœ°ä¸­äº† (%1)' - status: - title: '&7----------- &f%1(%2) &7-----------' - immune: '&e对下一步的çªè¢­å…ç–«: %1' - starts: '&7çªè¢­å¼€å§‹äºŽ: %1' - attackers: '&7袭击者: &4%1' - defenders: '&7æå«è€…: &4%1' - ends: '&7çªè¢­ç»“æŸäºŽ: %1' - canraid: '&2å¯ä»¥è¢«çªè¢­' - raidin: '&eå¯èƒ½çš„çªè¢­: %1' - stopped: '&eçªè¢­ &6%1 &e被åœæ­¢' - info: - years: '&e%1 &6å¹´ ' - oneYear: '&e%1 &6å¹´ ' - day: '&e%1 &6天 ' - oneDay: '&e%1 &6天 ' - hour: '&e%1 &6å°æ—¶ ' - oneHour: '&e%1 &6å°æ—¶ ' - min: '&e%1 &6分 ' - sec: '&e%1 &6秒 ' - listSplitter: ', ' - click: '&7点击' - clickToConfirm: '&7点击确认' - server: - land: Server_Land - Flag: - ownColor: '&4' - p1Color: '&2' - p2Color: '&a' - haveColor: '&2' - havePrefix: '' - denyColor: '&4' - denyPrefix: '' - Set: '&e领地:&6%2 &eçš„ &6%1 &eæƒé™å·²è®¾ç½®ä¸º &6%3 &e状æ€.' - SetFailed: '&c你没有æƒé™è®¾ç½® &6%1 &cæƒé™' - CheckTrue: '&e玩家 &6%2 &e已在领地 &6%3 &e中将 &6%1 &eæƒé™è®¾ç½®ä¸º &6%4&e.' - CheckFalse: '&e玩家 &6%2 &e没有在领地中设置 &6%1 &eæƒé™.' - Cleared: '&eæƒé™å·²æ¸…除.' - RemovedAll: '&e玩家 &6%1 &e在 &6%2 &e领地内的所有æƒé™å‡å·²åˆ é™¤' - RemovedGroup: '&e用户组 &6%1 &e在 &6%2 &e领地内的所有æƒé™å‡å·²åˆ é™¤' - Default: '&eæƒé™å·²æ¢å¤é»˜è®¤å€¼.' - Deny: '&c你没有 &6%1 &cæƒé™.' - SetDeny: '&c所有者ä¸èƒ½è®¾ç½® &6%1 &cæƒé™.' - ChangeDeny: '&c此时领地内有 &6%2 &cå玩家, 所以你无法更改 &6%1 &cæƒé™.' - ChangedForOne: '&e改å˜äº† &6%1 &eæƒé™ä¸º &6%2 &e领地' - ChangedFor: '&e改å˜äº† &6%1 &eæƒé™æ¥è‡ª &6%2 &e检查的领地' - reset: '&eé‡ç½®æƒé™ï¼Œç”¨äºŽ &6%1 &e领地' - resetAll: '&eé‡ç½®æƒé™ï¼Œç”¨äºŽ &6%1 &e领地' - Bank: - NoAccess: '&c你没有æƒé™ä½¿ç”¨é“¶è¡Œ.' - Name: ' &e银行: &6%1' - NoMoney: '&c你的银行存款ä¸è¶³.' - Deposit: '&eä½ å‘领地银行存款 &6%1 &eå…ƒ.' - Withdraw: '&e你从领地银行中å–出 &6%1 &eå…ƒ.' - rentedWithdraw: '&cä¸èƒ½ä»Žç§Ÿç”¨çš„领地银行æ款.' - Subzone: - Rename: '&e领地å­åŒºåŸŸ &6%1 &e已被é‡å‘½å为 &6%2' - Remove: '&e已删除领地å­åŒºåŸŸ &6%1&e.' - Create: '&eæˆåŠŸåˆ›å»ºé¢†åœ°å­åŒºåŸŸ &6%1&e.' - CreateFail: '&c无法创建领地å­åŒºåŸŸ &6%1&c.' - Exists: '&c领地å­åŒºåŸŸ &6%1 &c已存在.' - Collide: '&c领地å­åŒºåŸŸä¸Ž &6%1 &c冲çª.' - MaxAmount: '&c已达到该å­é¢†åœ°çš„最大数é‡.' - MaxDepth: '&c已达到领地å­åŒºåŸŸå…许的最大分区深度.' - SelectInside: '&e两个选å–点必须都在åŒä¸€ä¸ªé¢†åœ°å†….' - CantCreate: '&c你没有创建领地å­åŒºåŸŸçš„æƒé™.' - CantDelete: '&c你没有删除领地å­åŒºåŸŸçš„æƒé™.' - CantDeleteNotOwnerOfParent: '&cä½ ä¸æ˜¯è¯¥å­åŒºåŸŸæ‰€åœ¨é¢†åœ°çš„所有者, 无法删除å­åŒºåŸŸ.' - CantContract: '&c你没有æƒé™ç¼©å°é¢†åœ°å­åŒºåŸŸ.' - CantExpand: '&c你没有æƒé™æ‰©å¤§é¢†åœ°å­åŒºåŸŸ.' - DeleteConfirm: '&e如果你确定è¦åˆ é™¤å­åŒºåŸŸ &6%1&e, 输入 &6/res confirm &eæ¥ç¡®è®¤æ“作.' - OwnerChange: '&e已将å­åŒºåŸŸ &6%1 &e的所有者更改为 &6%2' - Residence: - DontOwn: '&e没有什么å¯å±•ç¤ºçš„' - Hidden: ' &e(&6éšè—&e)' - Bought: '&eæˆåŠŸè´­ä¹°é¢†åœ° &6%1' - Buy: '&6%1 &e购买了你的 &6%2 &e领地.' - BuyTooBig: '&c你无法购买尺寸这么大的领地.' - NotForSale: '&c该领地目å‰å¹¶æœªå‡ºå”®.' - ForSale: '&e领地 &6%1 &e现在正以 &6%2 &e的价格出售.' - StopSelling: '&c该领地已ä¸å†å‡ºå”®.' - TooMany: '&c你拥有的领地数é‡è¾¾åˆ°äº†ä¸Šé™.' - MaxRent: '&c你租用的领地数é‡è¾¾åˆ°äº†ä¸Šé™.' - AlreadyRent: '&c领地已ç»è¢«ç§Ÿç”¨.' - NotForRent: '&c领地没有在出租.' - NotForRentOrSell: '&c领地没有在出售或出租.' - NotRented: '&c领地尚未被租出.' - Unrent: '&e领地 &6%1 &eå·²å–消出租.' - RemoveRentable: '&e领地 &6%1 &eä¸å†å¯å‡ºç§Ÿ.' - ForRentSuccess: '&e领地 &6%1 &eå·²è¢«è®¾ç½®ä¸ºæ¯ &6%3 &e天以 &6%2 &e出租.' - RentSuccess: '&e你租用了 &6%1 &e领地 &6%2 &e天.' - EndingRent: '&e租用时间已ç»è¿‡æœŸ &6%1 &eon &6%2' - AlreadyRented: '&e领地 &6%1 &e已出租给 &6%2' - CantAutoPay: '&e领地ä¸å…许自动支付,已设置为 &6false' - AlreadyExists: '&c已存在å称为 &6%1 &c的领地.' - Create: '&e已创建领地 &6%1&e!' - Rename: '&e领地 &6%1 &e已被é‡å‘½å为 &6%2' - Remove: '&e领地 &6%1 &e已删除.' - CantRemove: '&c领地 &6%1 &c无法被删除,因为 &6%2 &cå­é¢†åœ°æ­£åœ¨è¢«å‡ºç§Ÿç»™çŽ©å®¶ &6%3' - MoveDeny: '&c你没有领地 &6%1 &c的移动æƒé™.' - TeleportNoFlag: '&c你没有该领地的传é€æƒé™.' - FlagDeny: '&c你没有领地 &6%2 &cçš„ &6%1 &cæƒé™.' - GiveLimits: '&c目标玩家超出é™åˆ¶, 无法给予领地.' - Give: '&e你将领地 &6%1 &eé€ç»™äº† &6%2' - Recieve: '&e你收到了 &6%2 &eé€ç»™ä½ çš„ &6%1 &e领地.' - ResList: ' &a%1. &e%2 &e- &6%3 %4&6%5' - TrustedResList: ' &a%1. &f%2 &e- &6%3 %4&6%5' - List: ' &e%2 &e- &6%3' - Near: '&e附近的领地: &7%1' - TeleportNear: '&e已传é€åˆ°é™„近的领地.' - SetTeleportLocation: '&e设置传é€ä½ç½®.' - PermissionsApply: '&e领地æƒé™å·²è®¾ç½®.' - NotOwner: '&cä½ ä¸æ˜¯è¯¥é¢†åœ°çš„所有者.' - RemovePlayersResidences: '&e移除所有属于 &6%1 &e的领地.' - NotIn: '&c你此时ä¸åœ¨é¢†åœ°å†….' - PlayerNotIn: '&c玩家ä¸åœ¨é¢†åœ°åŒºåŸŸå†…..' - Kicked: '&e你被从领地中请出.' - CantKick: '&eä¸èƒ½è¸¢è¿™ä¸ªçŽ©å®¶' - In: '&eä½ ç›®å‰ç«™åœ¨é¢†åœ° &6%1 &e中.' - OwnerChange: '&e已将领地 &6%1 &e的所有者更改为 &6%2' - NonAdmin: '&c你没有领地的管ç†å‘˜æƒé™.' - Line: '&e领地: &6%1 ' - RentedBy: '&e租用者: &6%1' - MessageChange: '&e消æ¯æ–‡æœ¬å·²è®¾ç½®.' - CantDeleteResidence: '&c你没有删除此领地的æƒé™.' - CantExpandResidence: '&c你没有扩大此领地的æƒé™.' - CantContractResidence: '&c你没有缩å°æ­¤é¢†åœ°çš„æƒé™.' - NoResHere: '&c那个ä½ç½®æ²¡æœ‰é¢†åœ°å­˜åœ¨.' - OwnerNoPermission: '&c领地所有者没有执行这个æ“作的æƒé™.' - ParentNoPermission: '&c你没有æƒé™è®¾ç½®çˆ¶åŒºåŸŸ.' - ChatDisabled: '&e领地内èŠå¤©å·²ç¦ç”¨.' - DeleteConfirm: '&e如果你确定è¦åˆ é™¤é¢†åœ° &6%1&e, 输入 &6/res confirm &e以确认æ“作.' - ChangedMain: '&e已将主领地修改为 &6%1' - LwcRemoved: '&e已删除 &6%1 &eçš„LWCä¿æŠ¤ï¼Œè€—æ—¶ &6%2ms' - CanBeRented: '&6%1&e å¯ä»¥å‡ºç§Ÿç»™ &6%2 &eæ¯ &6%3 &e天. &6/res market rent' - CanBeBought: '&6%1&e å¯ä»¥å‡ºå”®ç»™ &6%2&e. &6/res market buy' - IsForRent: '&6(出租)' - IsForSale: '&6(出售)' - IsRented: '&6(已出租)' - Rent: - Disabled: '&c领地出租已ç¦ç”¨.' - DisableRenew: '&e领地 &6%1 &eä¸ä¼šåœ¨ç§Ÿçº¦åˆ°æœŸæ—¶è‡ªåŠ¨ç»­æœŸ.' - EnableRenew: '&e领地 &6%1 &e将会在租约到期时自动续期.' - NotByYou: '&c领地没有出租给你.' - isForRent: '&2这个领地å¯ä»¥è¢«ç§Ÿç”¨' - MaxRentDays: '&c你无法一次租用超过 &6%1 &c天' - OneTime: '&cä½ ç›®å‰æ— æ³•ç»­è´¹ç§Ÿç”¨æ—¶é•¿' - Extended: '&e租用时长增加了 &6%1 &e天给领地 &6%2' - Expire: '&e租约到期时间: &6%1' - AutoPayTurnedOn: '&e自动支付设置为&2å¼€å¯' - AutoPayTurnedOff: '&e自动支付设置为 &c关闭' - ModifyDeny: '&c无法修改租用的领地.' - Days: '&e租用天数: &6%1' - Rented: ' &6(已出租)' - RentList: ' &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7' - EvictConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤ç§Ÿç”¨é¢†åœ° &6%1' - UnrentConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤å–消租用领地 &6%1' - ReleaseConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤ä»Žå¸‚场内删除领地 &6%1' - command: - addedAllow: '&e增加了一个新的å…许的命令给 &6%1 &e领地' - removedAllow: '&e删除了一个å…许的命令给 &6%1 &e领地' - addedBlock: '&e增加了一个新的ç¦ç”¨çš„命令给 &6%1 &e领地' - removedBlock: '&e删除了一个ç¦ç”¨çš„命令给 &6%1 &e领地' - Blocked: '&eç¦ç”¨çš„命令: &6%1' - Allowed: '&eå…许的命令: &6%1' - Rentable: - Land: '&e出租领地: &6' - AllowRenewing: '&eå¯ä»¥ç»­è´¹: &6%1' - StayInMarket: '&eå¯ä»¥å‡ºç§Ÿ: &6%1' - AllowAutoPay: '&eå¯ä»¥è‡ªåŠ¨æ”¯ä»˜: &6%1' - DisableRenew: '&6%1 &eä¸ä¼šåœ¨åˆ°æœŸæ—¶è‡ªåŠ¨æ›´æ–°ç§Ÿç”¨çŠ¶æ€.' - EnableRenew: '&6%1 &e将会在到期时自动更新租用状æ€.' - Economy: - LandForSale: '&e出售领地:' - NotEnoughMoney: '&c你没有足够的金钱.' - MoneyCharged: '&e已从你的 &6%2 &e账户中支出 &6%1 &eå…ƒ.' - MoneyAdded: '&eä½ çš„ &6%2 &e账户增加了 &6%1 &eå…ƒ.' - MoneyCredit: '&eä½ çš„ &6%2 &e账户收入了 &6%1 &eå…ƒ.' - RentReleaseInvalid: '&e领地 &6%1 &e没有被租用或者出租.' - RentSellFail: '&c无法出售正在出租的领地.' - SubzoneRentSellFail: '&c无法出售领地,因为其中一个å­é¢†åœ°æ­£åœ¨å‡ºç§Ÿ' - ParentRentSellFail: '&c无法出租领地,因为其中的一部分正在出售/出租' - SubzoneSellFail: '&c无法出售一个å­é¢†åœ°' - SellRentFail: '&c无法出租正在出售的领地.' - ParentSellRentFail: '&c由于这个领地的一部分正在被出售,所以无法出租' - OwnerBuyFail: '&cä¸èƒ½è´­ä¹°è‡ªå·±çš„领地!' - OwnerRentFail: '&cä¸èƒ½ç§Ÿç”¨è‡ªå·±çš„领地!' - AlreadySellFail: '&e领地已在出售中!' - LeaseRenew: '&e租约有效期到 &6%1' - LeaseRenewMax: '&eå…许的最大租约续期' - LeaseNotExpire: '&e租约ä¸å­˜åœ¨æˆ–者未过期.' - LeaseRenewalCost: '&e续租 &6%1 &e的花费为 &6%2' - LeaseInfinite: '&e出租时间已设置为无é™.' - MarketDisabled: '&c领地ç»æµŽå·²ç¦ç”¨!' - SellAmount: '&e出售数é‡: &2%1' - SellList: ' &6%1&e. &6%2 &e(&6%3&e) - &6%4' - LeaseExpire: '&e租约到期时间: &2%1' - LeaseList: '&6%1. &e%2 &2%3 &e%4' - Expanding: - North: '&eå‘北方扩展 &6%1 &e个方å—' - West: '&eå‘西方扩展 &6%1 &e个方å—' - South: '&eå‘å—方扩展 &6%1 &e个方å—' - East: '&eå‘东方扩展 &6%1 &e个方å—' - Up: '&eå‘上方扩展 &6%1 &e个方å—' - Down: '&eå‘下方扩展 &6%1 &e个方å—' - Contracting: - North: '&eåœ¨åŒ—æ–¹ç¼©å° &6%1 &e个方å—' - West: '&eåœ¨è¥¿æ–¹ç¼©å° &6%1 &e个方å—' - South: '&e在å—æ–¹ç¼©å° &6%1 &e个方å—' - East: '&eåœ¨ä¸œæ–¹ç¼©å° &6%1 &e个方å—' - Up: '&eåœ¨ä¸Šæ–¹ç¼©å° &6%1 &e个方å—' - Down: '&eåœ¨ä¸‹æ–¹ç¼©å° &6%1 &e个方å—' - Shifting: - North: '&eå‘北方平移 &6%1 &e个方å—' - West: '&eå‘西方平移 &6%1 &e个方å—' - South: '&eå‘å—方平移 &6%1 &e个方å—' - East: '&eå‘东方平移 &6%1 &e个方å—' - Up: '&eå‘上方平移 &6%1 &e个方å—' - Down: '&eå‘下方平移 &6%1 &e个方å—' - Limits: - PGroup: '&7- &eæƒé™ç»„:&3 %1' - RGroup: '&7- &e领地组:&3 %1' - Admin: '&7- &e领地管ç†å‘˜:&3 %1' - CanCreate: '&7- &eå…许创建领地:&3 %1' - MaxRes: '&7- &e最大领地数é‡:&3 %1' - MaxEW: '&7- &e东西方å‘最大:&3 %1' - MaxNS: '&7- &eå—北方å‘最大:&3 %1' - MaxUD: '&7- &e上下方å‘最大:&3 %1' - MinMax: '&7- &e最å°/最大高度:&3 %1 到 %2' - MaxSubzones: '&7- &e最大å­é¢†åœ°æ•°é‡:&3 %1' - MaxSubDepth: '&7- &e最大å­é¢†åœ°æ·±åº¦:&3 %1' - MaxRents: '&7- &e最多租用:&3 %1' - MaxRentDays: ' &e最大出租天数:&3 %1' - EnterLeave: '&7- &eå¯è®¾ç½®åŠ å…¥ç¦»å¼€ä¿¡æ¯:&3 %1' - NumberOwn: '&7- &e拥有的领地数é‡:&3 %1' - Cost: '&7- &e领地æ¯æ–¹å—花费:&3 %1' - Sell: '&7- &e领地出售æ¯æ–¹å—花费:&3 %1' - Flag: '&7- &eå…许的领地æƒé™:&3 %1' - MaxDays: '&7- &e最大租约时间:&3 %1' - LeaseTime: '&7- &e租约续期时间:&3 %1' - RenewCost: '&7- &e续租æ¯æ–¹å—花费:&3 %1' - Gui: - Set: - Title: '&6%1 çš„æƒé™' - Pset: - Title: '&6%1 在 %2 çš„æƒé™' - Actions: - - '&2左键å•å‡»å¯ç”¨' - - '&cå³é”®å•å‡»ç¦ç”¨' - - '&eShift+左键å•å‡»åˆ é™¤' - InformationPage: - Top: '&e___/ &a %1 - %2 &e \___' - TopSingle: '&e___/ &a %1 &e \___' - Page: '&e-----< &6%1 &e>-----' - NextPage2: '&e-----< &6%1 &e>-----' - NoNextPage: '&e-----------------------' - GeneralList: '&2 %1 &6- &e%2' - FlagsList: '&2 %1 &6- &e%2' - SmallSeparator: '&6------' - Chat: - ChatChannelChange: '&e领地èŠå¤©é¢‘é“已更改为 &6%1!' - ChatChannelLeave: '&e离开领地èŠå¤©' - ChatMessage: '%1 %2%3: %4%5' - ChatListeningMessage: '&2[å€¾å¬ %6]%1 %2%3: %4%5' - JoinFirst: '&4请先加入领地èŠå¤©é¢‘é“.' - InvalidChannel: '&4无效频é“.' - InvalidColor: '&4颜色代ç é”™è¯¯' - NotInChannel: '&4玩家ä¸åœ¨é¢‘é“中' - Kicked: '&6%1 &e被 &6%2 &e频é“踢出' - InvalidPrefixLength: '&4å‰ç¼€è¿‡é•¿. 最大长度: %1' - ChangedColor: '&e领地频é“颜色更改为 %1' - ChangedPrefix: '&e领地频é“å‰ç¼€æ›´æ”¹ä¸º %1' - Shop: - ListTopLine: '&6%1 &e商店列表 - 第 &6%2 &e页, å…± &6%3 %4' - List: ' &e%1. &6%2 &e(&6%3&e) %4' - ListVoted: '&e%1 (&6%2&e)' - ListLiked: '&7赞: &7%1' - VotesTopLine: '&6%1 &e%2 评分列表 &6- &e第 &6%3 &e页, å…± &6%4 %5' - VotesList: ' &e%1. &6%2 &e%3 &7%4' - NoDesc: '&6没有æè¿°' - Desc: |- - &6æè¿°: - %1 - DescChange: '&6æ述已更改为: %1' - ChantChange: '&4当商店标志被设置为"true"时,ä¸èƒ½æ”¹å˜.' - NewBoard: '&6æˆåŠŸæ·»åŠ å•†åº—宣传æ¿' - BoardExist: '&c商店宣传æ¿å·²ç»å­˜åœ¨' - DeleteBoard: '&6å³å‡»è¦åˆ é™¤çš„宣传æ¿' - DeletedBoard: '&6宣传æ¿å·²ç§»é™¤' - IncorrectBoard: '&c宣传æ¿ä¸æ­£ç¡®, 请é‡æ–°ç‚¹å‡»æ­£ç¡®çš„宣传æ¿' - InvalidSelection: '&c使用选å–工具, 先点击左上角的告示牌, å†ç‚¹å‡»å³ä¸‹è§’的告示牌' - ToBigSelection: '&c你选择的范围太大了,最大å…许16æ ¼' - ToDeapSelection: '&c你选择的太深了,最大å…许16X1X16' - VoteChanged: '&6领地 &e%3 &6的评分由 &e%1 &6更改为 &e%2&6.' - Voted: '&6ä½ ç»™ &e%2 &6评了 &e%1 &6分.' - Liked: '&6你赞了 &e%1 &6领地.' - AlreadyLiked: '&6ä½ å·²ç»èµžè¿‡ &e%1 &6领地了.' - NoVotes: '&c该领地还没有评分.' - CantVote: '&c该领地ä¸æ˜¯å•†åº—.' - VotedRange: '&6åªèƒ½ç»™å‡º &e%1 &6分到 &e%2 &6分.' - SignLines: - '1': '&e--== &8%1 &e==--' - '2': '&9%1' - '3': '&4%1' - '4': '&8%1&e (&8%2&e)' - Likes4: '&9赞: &8%2' - RandomTeleport: - TpLimit: '&e请等待 &6%1 &e秒åŽå†ä¼ é€' - TeleportSuccess: '&eä¼ é€åˆ° X:&6%1&e, Y:&6%2&e, Z:&6%3 &eä½ç½®' - IncorrectLocation: '&6无法找到正确的传é€ä½ç½®, 请等待 &e%1 &6秒åŽé‡è¯•.' - WorldList: '&eå¯ç”¨ä¸–ç•Œ: &6%1' - Disabled: '&c在这个世界上,éšæœºä¼ é€åŠŸèƒ½è¢«ç¦ç”¨' - TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%4 &e秒内ä¸è¦ç§»åŠ¨.' - WorldList: '&eå¯ç”¨ä¸–ç•Œ: &6%1' - Permissions: - variableColor: '&f' - permissionColor: '&6' - cmdPermissionColor: '&2' - General: - DisabledWorld: '&c该世界已ç¦ç”¨é¢†åœ°.' - UseNumbers: '&c请输入数字.' - # Replace all text with '' to disable this message - CantPlaceLava: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置岩浆.' - # Replace all text with '' to disable this message - CantPlaceWater: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置水.' - CantPlaceChest: '&cä½ ä¸èƒ½åœ¨è¿™ä¸ªåœ°æ–¹æ‘†æ”¾ç®±å­' - NoPermission: '&c你没有æƒé™è¿™æ ·åš.' - info: - NoPlayerPermission: '&c[playerName] 没有 [permission] æƒé™' - NoCmdPermission: '&c你没有æƒé™è¿™ä¹ˆåš' - DefaultUsage: '&e输入 &6/%1 ? &e查看帮助信æ¯' - MaterialGet: '&eID &6%1 &eçš„ææ–™å称为 &6%2' - MarketList: '&e---- &6市场列表 &e----' - Separator: '&e----------------------------------------------------' - AdminOnly: '&cåªæœ‰ç®¡ç†å‘˜æ‰èƒ½æ‰§è¡Œè¿™ä¸ªå‘½ä»¤.' - InfoTool: '&e- ä¿¡æ¯å·¥å…·: &6%1' - ListMaterialAdd: '&6%1 &e已被添加到 &6%2 &e领地.' - ListMaterialRemove: '&6%1 &e已从 &6%2 &e领地移除.' - ItemBlacklisted: '&c此处ç¦æ­¢ä½¿ç”¨è¯¥ç‰©å“.' - WorldPVPDisabled: '&c世界 PVP å·²ç¦ç”¨.' - NoPVPZone: '&céž PVP 区域.' - NoFriendlyFire: '&cæ— å‹å†›å°„击' - InvalidHelp: '&c无效帮助页ç .' - TeleportDeny: '&c你没有传é€çš„æƒé™.' - TeleportSuccess: '&e已传é€!' - TeleportConfirmLava: '&c这个传é€å¹¶ä¸å®‰å…¨ï¼Œä½ ä¼šæŽ‰è¿› &6岩浆&c. - 使用 &6/res tpconfirm &c强制传é€.' - TeleportConfirmVoid: '&c这个传é€ä¸å®‰å…¨ï¼Œä½ ä¼šæŽ‰è¿› &6虚空&c. - 使用 &6/res tpconfirm &c强制传é€.' - TeleportConfirm: '&c这个传é€å¹¶ä¸å®‰å…¨ï¼Œä½ å°†æ‘”è½ &6%1 &c个方å—. - 使用 &6/res tpconfirm &c强制传é€.' - TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%2 &e秒内ä¸è¦ç§»åŠ¨.' - TeleportTitle: '&eä¼ é€ä¸­..' - TeleportTitleTime: '&6%1' - TeleportCanceled: '&eä¼ é€è¢«å–消!' - NoTeleportConfirm: '&e没有需è¦ç¡®è®¤çš„ä¼ é€è¯·æ±‚!' - HelpPageHeader2: '&eHelp 页数 - &6%1 &e- é¡µç  <&6%2 &eçš„ &6%3&e>' - ListExists: '&c列表已存在.' - ListRemoved: '&e已删除列表.' - ListCreate: '&e已创建列表 &6%1' - PhysicalAreas: '&e物ç†åŒºåŸŸ' - CurrentArea: '&e当å‰åŒºåŸŸ: &6%1' - TotalResSize: '&e总大å°: &6%1m³ (%2m²)' - ResSize: - eastWest: '&e东/西: &6%1' - northSouth: '&e北/å—: &6%1' - upDown: '&e上/下: &6%1' - TotalWorth: '&e总价值: &6%1 &e(&6%2&e)' - TotalSubzones: '&eå­é¢†åœ°æ•°é‡: &6%1 &e(&6%2&e)' - NotOnline: '&e目标玩家ä¸åœ¨çº¿.' - prevPage: '&2----<< &6上一页 ' - prevPageGui: '&6上一页 ' - prevPageClean: '&6上一页 ' - prevPageOff: '&2----<< &7上一页 ' - prevPageHover: '&7<<<' - firstPageHover: '&7|<' - nextPage: '&6 下一页 &2>>----' - nextPageGui: '&6下一页' - nextPageClean: '&6 下一页' - nextPageOff: '&7 下一页 &2>>----' - nextPageHover: '&7>>>' - lastPageHover: '&7>|' - pageCount: '&2%1&7/&2%2' - pageCountHover: '&e%1 æ¡ç›®' - GenericPages: '&e页数 &6%1 &e/ &6%2 &e(&6%3&e)' - WorldEditNotFound: '&c未检测到 WorldEdit.' - CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' - CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' - CoordsLiner: '&7 (&3%1&7;%2&7)' - AllowedTeleportIcon: '&2T' - BlockedTeleportIcon: '&7T' - AllowedMovementIcon: '&2M' - BlockedMovementIcon: '&7M' - AdminToggleTurnOn: '&e自动管ç†æ¨¡å¼&6å¼€å¯' - AdminToggleTurnOff: '&e自动管ç†æ¨¡å¼&6关闭' - NoSpawn: '&e你没有在出生点的 &6移动 &eæƒé™, 正在é‡æ–°å®šä½.' - CompassTargetReset: '&e你的指å—针已被还原' - CompassTargetSet: '&e你的指å—针目å‰æŒ‡å‘ &6%1' - Ignorelist: '&2忽略åå•:&6' - Blacklist: '&c黑åå•:&6' - LandCost: '&e领地花费: &6%1' - 'True': '&2是' - 'False': '&cå¦' - Removed: '&6未设置' - FlagState: '&eæƒé™çŠ¶æ€: %1' - Land: '&e领地: &6%1' - Cost: '&e花费: æ¯ &6%2 &e天 &6%1' - Status: '&e状æ€: %1' - Available: '&2å¯ç”¨' - Size: ' &e大å°: &6%1' - ResidenceFlags: '&e领地公共æƒé™: &6%1' - PlayersFlags: '&e玩家æƒé™: &6%1' - GroupFlags: '&e组æƒé™: &6%1' - OthersFlags: '&e其他人æƒé™: &6%1' - Moved: '&e已移动.' - Name: '&eå称: &6%1' - Lists: '&e列表: &6' - Residences: '&e领地&6' - CreatedOn: '&e建造于: &6%1' - Owner: '&e所有者: &6%1' - World: '&e世界: &6%1' - Subzones: '&eå­åŒºåŸŸ' - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - NewPlayerInfo: '&e如果è¦åˆ›å»ºé¢†åœ°ä»¥ä¿æŠ¤æˆ¿å±‹, 请用选区工具选å–两个对角, 然åŽæ‰§è¡Œ &2/res create 领地å称 &e命令' -CommandHelp: - Description: 领地的命令帮助 - SubCommands: - res: - Description: 领地的主命令 - Info: - - '&2输入 &6/res [命令] ? <页ç > &2查看更多信æ¯.' - SubCommands: - auto: - Info: - - '&e用法: &6/res auto (领地åå­—) (范围)' - Description: 选å–命令 - select: - Info: - - 以你为中心选择领地范围 - - /res select [x] [y] [z] - 以你为中心选择领地范围. - Description: 选择命令 - SubCommands: - coords: - Description: 显示选定的åæ ‡ - Info: - - '&e使用方法: &6/res select coords' - size: - Description: 显示选定的尺寸 - Info: - - '&e使用方法: &6/res select size' - auto: - Description: å¼€å¯è‡ªåŠ¨é€‰æ‹©å·¥å…· - Info: - - '&e使用方法: &6/res select auto [玩家å称]' - cost: - Description: 显示选定费用 - Info: - - '&e使用方法: &6/res select cost' - vert: - Description: 纵å‘扩展选区 - Info: - - '&e使用方法: &6/res select vert' - - 将选区扩展到地图顶端和底端 - sky: - Description: 扩展选区到天空 - Info: - - '&e使用方法: &6/res select sky' - - 将选区扩展到最高点 - bedrock: - Description: 扩展选区到基岩 - Info: - - '&e使用方法: &6/res select bedrock' - - 将选区扩展到地图底端 - expand: - Description: å‘一个方å‘扩展选区 - Info: - - '&e使用方法: &6/res select expand <扩展å•ä½>' - - 将以你é¢å¯¹çš„æ–¹å‘扩展 <扩展å•ä½> ä¸ªæ–¹å— - shift: - Description: å‘一个方å‘平移选区 - Info: - - '&e使用方法: &6/res select shift <平移å•ä½>' - - 将选区以你é¢å¯¹çš„æ–¹å‘平移 <平移å•ä½> ä¸ªæ–¹å— - chunk: - Description: 选择你目å‰æ‰€åœ¨çš„åŒºå— - Info: - - '&e使用方法: &6/res select chunk' - - 选择你目å‰æ‰€å¤„çš„åŒºå— - residence: - Description: 选择领地中一个存在的区域 - Info: - - '&e使用方法: &6/res select residence <领地å称>' - - 选择 <领地å称> 中一个存在的区域 - worldedit: - Description: 使用当å‰WorldEdit(创世神)的选择æ¥è®¾ç½®é€‰åŒº - Info: - - '&e使用方法: &6/res select worldedit' - - å°† WorldEdit(创世神) ç›®å‰çš„选区作为领地选区 - padd: - Info: - - '&e使用方法: &6/res padd <领地å称> [玩家å称]' - - 为玩家添加基本æƒé™ - Description: å‘领地添加玩家 - signconvert: - Info: - - '&e使用方法: &6/res signconvert' - - å°è¯•è½¬æ¢å·²æœ‰çš„ ResidenceSign 告示牌 - Description: å°† ResidenceSign 的告示牌转æ¢ä¸ºæ–°æ ¼å¼ - listallhidden: - Info: - - '&e使用方法: &6/res listhidden <页ç >' - - 显示所有玩家的éšè—领地 - Description: 显示所有éšè—领地 - bank: - Info: - - '&e使用方法: &6/res bank [deposit=存入/withdraw=撤销] <领地å称> [æ•°é¢]' - - 你必须站在领地中或者指定领地åå­— - - 你必须拥有领地 bank æƒé™ - Description: 管ç†é¢†åœ°é“¶è¡Œ - create: - Info: - - '&e使用方法: &6/res create [领地å称]' - Description: 创建领地 - listall: - Info: - - '&e使用方法: &6/res listall <页ç > <世界å称> <-a/-f>' - - 列出所有的领地 - Description: 列出所有领地 - info: - Info: - - '&e使用方法: &6/res info <领地å称>' - - 留空 <领地å称> 表示显示你目å‰æ‰€åœ¨çš„领地信æ¯. - Description: æ˜¾ç¤ºé¢†åœ°çš„ä¿¡æ¯ - area: - Description: 管ç†é¢†åœ°ç‰©ç†åŒºåŸŸ - Info: - - '' - SubCommands: - list: - Description: 列出领地的物ç†åŒºåŸŸ - Info: - - '&e使用方法: &6/res area list [领地å称] <页ç >' - listall: - Description: 列出所有区域的åæ ‡å’Œè¯¦ç»†ä¿¡æ¯ - Info: - - '&e使用方法: &6/res area listall [领地å称] <页ç >' - add: - Description: 为领地添加物ç†åŒºåŸŸ - Info: - - '&e使用方法: &6/res area add [领地å称] [区域ID]' - - 你必须先选中两个选å–点 - remove: - Description: 移除领地的物ç†åŒºåŸŸ - Info: - - '&e使用方法: &6/res area remove [领地å称] [区域ID]' - replace: - Description: 替æ¢é¢†åœ°çš„物ç†åŒºåŸŸ - Info: - - '&e使用方法: &6/res area replace [领地å称] [区域ID]' - - 你必须先选中两个选å–点 - - 如果新的区域更大, 二者之间将会被充满. - give: - Info: - - '&e使用方法: &6/res give <领地å称> [玩家å称] <-s>' - - 将你拥有的æŸä¸ªé¢†åœ°èµ ä¸ŽæŸçŽ©å®¶ - Description: 给予一å玩家领地 - renamearea: - Info: - - '&e使用方法: &6/res removeworld [领地å称] [æ—§åå­—] [æ–°åå­—]' - Description: 修改领地åå­— - contract: - Info: - - '&e使用方法: &6/res contract (领地å称) [缩å°å•ä½]' - - 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ°è§„模 - - 领地å字是å¯é€‰çš„ - Description: 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ° - check: - Info: - - '&e使用方法: &6/res check [领地å称] [æƒé™] (玩家åå­—)' - Description: 检查æƒé™çŠ¶æ€ - gset: - Info: - - '&e使用方法: &6/res gset <领地å称> [æƒé™ç»„] [æƒé™] [true/false/remove=移除]' - - 输入 /res flags ? 查看æƒé™åˆ—表 - Description: 为æƒé™ç»„设置领地的特定æƒé™ - list: - Info: - - '&e使用方法: &6/res list <玩家å称> <页ç > <世界å称>' - - 列出指定玩家拥有的所有领地 (除了éšè—领地) - - 如果显示自己的领地, éšè—领地也会被显示 - - è¦åˆ—出所有玩家的领地, 使用命令 /res listall - Description: 显示领地列表 - version: - Info: - - '&e使用方法: &6/res version' - Description: 显示领地æ’件版本 - tool: - Info: - - '&e使用方法: &6/res tool' - Description: 显示领地圈地和查看信æ¯çš„工具类型 - pdel: - Info: - - '&e使用方法: &6/res pdel <领地å称> [玩家å称]' - - 删除玩家的基本æƒé™ - Description: 从领地删除玩家 - market: - Info: - - '&e使用方法: &6/res market ? 了解更多信æ¯' - Description: è´­ä¹°, 出售和出租领地 - SubCommands: - Info: - Description: 查看领地的ç»æµŽä¿¡æ¯ - Info: - - '&e使用方法: &6/res market Info [领地å称]' - - 显示领地是å¦æ­£åœ¨å‡ºç§Ÿæˆ–出售, 以åŠé¢†åœ°çš„费用 - list: - Description: 显示å¯å‡ºç§Ÿä¸Žå¯å‡ºå”®çš„领地 - Info: - - '&e使用方法: &6/res market list [rent=租金/sell=出售]' - SubCommands: - rent: - Description: 列出å¯ä»¥ç§Ÿç”¨çš„领地 - Info: - - '&e使用方法: &6/res market list rent' - sell: - Description: 列出å¯ä»¥å‡ºå”®çš„领地 - Info: - - '&e使用方法: &6/res market list sell' - sell: - Description: 出售领地 - Info: - - '&e使用方法: &6/res market sell [领地å称] [售价]' - - 将领地以 [售价] 元的价格出售 - - 其他玩家å¯ä»¥æ‰§è¡Œ /res market buy 命令购买 - sign: - Description: 设置市场木牌 - Info: - - '&e使用方法: &6/res market sign [领地å称]' - - 将看å‘的木牌设置为领地市场木牌 - buy: - Description: 购买领地 - Info: - - '&e使用方法: &6/res market buy [领地å称]' - - 如果该领地正在出售, 则购买这个领地 - unsell: - Description: å–消出售领地 - Info: - - '&e使用方法: &6/res market unsell [领地å称]' - rent: - Description: 租用领地 - Info: - - '&e使用方法: &6/res market rent [领地å称] <自动续租>' - - 租用一个领地. <自动续租> å¯ä»¥æ˜¯ true 或 false. 如果是 true, - 并且领地所有者å…许, 领地将会在租约到期之å‰è‡ªåŠ¨ç»­ç§Ÿ. - rentable: - Description: 将领地设置为å¯å‡ºç§Ÿ - Info: - - '&e使用方法: &6/res market rentable [领地å称] [ä»·æ ¼] [天数] <å…许续租> - <留在市场> <å…许自动付款>' - - 以 [ä»·æ ¼] 出租领地 [天数] - - 如果 <å…许续租> 等于 "teue" 在租金到期之å‰ï¼Œé¢†åœ°èƒ½å¤Ÿå†æ¬¡è¢«ç§Ÿç”¨ - - 如果 <留在市场> 等于 "teue" 在玩家退租åŽï¼Œé¢†åœ°å°†ç»§ç»­ç•™åœ¨å¸‚场上出租 - - 如果 <å…许自动付款> 等于 "teue" 如果玩家在租用时选择了这个选项,租用的费用就会自动从玩家的余é¢ä¸­æ‰£é™¤ - autopay: - Description: 开关领地自动支付 - Info: - - '&e使用方法: &6/res market autopay [领地å称] [true/false]' - payrent: - Description: 支付租用的领地 - Info: - - '&e使用方法: &6/res market payrent [领地å称]' - confirm: - Description: 领地市场的确认æ“作 - Info: - - '&e使用方法: &6/res market confirm' - unrent: - Description: 将领地从出租或å¯å‡ºç§Ÿä¸­ç§»é™¤ - Info: - - '&e使用方法: &6/res market unrent [领地å称]' - - 如果你是租用者,这个命令将为你释放领地的租金 - - 如果你是领地所有者,这个命令使领地ä¸å†å‡ºç§Ÿ - rc: - Info: - - '&e使用方法: &6/res rc (领地å称)' - - 加入领地领地的èŠå¤©é¢‘é“ - Description: 加入领地èŠå¤©é¢‘é“ - SubCommands: - leave: - Description: 离开领地èŠå¤©é¢‘é“ - Info: - - '&e使用方法: &6/res rc leave' - - 如果你在一个领地èŠå¤©é¢‘é“内, ä½ å°†ä¼šç¦»å¼€æ­¤é¢‘é“ - setcolor: - Description: 设置领地èŠå¤©é¢‘é“文字颜色 - Info: - - '&e使用方法: &6/res rc setcolor [颜色代ç ]' - - 设置领地èŠå¤©é¢‘é“文字颜色 - setprefix: - Description: 设置领地èŠå¤©é¢‘é“å‰ç¼€ - Info: - - '&e使用方法: &6/res rc setprefix [å‰ç¼€]' - - 设置领地èŠå¤©é¢‘é“å‰ç¼€ - kick: - Description: 从èŠå¤©é¢‘é“中踢出玩家 - Info: - - '&e使用方法: &6/res rc kick [玩家å称]' - - 从领地èŠå¤©é¢‘é“中踢出æŸçŽ©å®¶ - expand: - Info: - - '&e使用方法: &6/res expand (领地å称) [扩展å•ä½]' - - å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地规模 - - 领地å字是å¯é€‰çš„ - Description: å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地 - compass: - Info: - - '&e使用方法: &6/res compass <领地åå­—>' - Description: 设置指å—者指å‘领地 - lists: - Info: - - 预定义的æƒé™åˆ—表å¯ä»¥åº”用到领地上 - Description: 预定义æƒé™åˆ—表 - SubCommands: - add: - Description: 添加一个列表 - Info: - - '&e使用方法: &6/res lists add <列表å称>' - remove: - Description: 删除一个列表 - Info: - - '&e使用方法: &6/res lists remove <列表å称>' - apply: - Description: 将列表应用于领地 - Info: - - '&e使用方法: &6/res lists apply <列表å称> <领地å称>' - set: - Description: 设置列表æƒé™ - Info: - - '&e使用方法: &6/res lists set <列表å称> <æƒé™> <值>' - pset: - Description: 设置列表玩家æƒé™ - Info: - - '&e使用方法: &6/res lists pset <列表å称> <玩家å称> <æƒé™> <值>' - gset: - Description: 设置一个æƒé™ç»„的列表æƒé™ - Info: - - '&e使用方法: &6/res lists gset <列表å称> <æƒé™ç»„> <æƒé™> <值>' - view: - Description: 查看列表 - Info: - - '&e使用方法: &6/res lists view <列表å称>' - reset: - Info: - - '&e使用方法: &6/res reset <领地å称/all>' - - 将领地的所有æƒé™é‡ç½®ä¸ºé»˜è®¤. 你必须是领地所有者或者管ç†å‘˜ - Description: 将领地é‡ç½®ä¸ºé»˜è®¤æƒé™ - listhidden: - Info: - - '&e使用方法: &6/res listhidden <玩家å称> <页ç >' - - 列出玩家拥有的éšè—领地 - Description: 显示玩家的éšè—领地列表 - raid: - Info: - - '&e使用方法: &6/res raid start [resname] (玩家å称)' - - '&6/res raid stop [resname]' - - '&6/res raid kick [玩家å称]' - - '&6/res raid immunity [add/take/set/clear] [resname/currentres] [time]' - Description: 管ç†é¢†åœ°çš„çªè¢­ - setmain: - Info: - - '&e使用方法: &6/res setmain (领地åå­—)' - - 将领地设为主è¦çš„ - Description: 设置主领地 - server: - Info: - - '&e使用方法: &6/resadmin server [领地å称]' - - 设置一个属于æœåŠ¡å™¨æ‰€æœ‰çš„领地 - Description: 将领地设置æˆæœåŠ¡å™¨æ‰€æœ‰ - rt: - Info: - - '&e使用方法: &6/res rt (世界å称) (玩家å称)' - - 将你传é€åˆ°ä¸–界上éšæœºçš„ä½ç½® - Description: 世界éšæœºä¼ é€ - mirror: - Info: - - '&e使用方法: &6/res mirror [æ¥æºé¢†åœ°] [目标领地]' - - 从一个领地到å¦ä¸€ä¸ªé¢†åœ°çš„æƒé™å…‹éš†, 你必须是两个领地的所有人或管ç†å‘˜æ‰èƒ½åšåˆ°è¿™ä¸€ç‚¹ - Description: 克隆æƒé™ - shop: - Description: 管ç†é¢†åœ°å•†åº— - Info: - - 管ç†é¢†åœ°å•†åº—的功能 - SubCommands: - list: - Description: 显示领地商店列表 - Info: - - '&e使用方法: &6/res shop list' - - 显示所有作为商店的领地 - vote: - Description: 为领地商店评分 - Info: - - '&e使用方法: &6/res shop vote <领地å称> [分数]' - - 为当å‰æˆ–指定领地商店评分 - like: - Description: 为领地商店点赞 - Info: - - '&e使用方法: &6/res shop like <领地å称>' - - 为领地商店点一个赞 - votes: - Description: 显示领地商店评分 - Info: - - '&e使用方法: &6/res shop votes <领地å称> <页ç >' - - 显示当å‰æˆ–指定领地商店的评分列表 - likes: - Description: 显示领地商店的赞 - Info: - - '&e使用方法: &6/res shop likes <领地å称> <页ç >' - - 显示当å‰æˆ–指定领地商店的赞列表 - setdesc: - Description: 设置领地商店æè¿° - Info: - - '&e使用方法: &6/res shop setdesc [æ述文字]' - - 设置领地商店æè¿°, 支æŒé¢œè‰²ä»£ç  - 使用 /n å¯ä»¥æ¢è¡Œ - createboard: - Description: åˆ›å»ºå•†åº—å®£ä¼ æ¿ - Info: - - '&e使用方法: &6/res shop createboard [ä½ç½®]' - - 在选区ä½ç½®å»ºç«‹å•†åº—宣传æ¿. [ä½ç½®] 表示宣传æ¿çš„起始ä½ç½® - deleteboard: - Description: åˆ é™¤å•†åº—å®£ä¼ æ¿ - Info: - - '&e使用方法: &6/res shop deleteboard' - - å³å‡»å®£ä¼ æ¿çš„å‘Šç¤ºç‰Œä»¥åˆ é™¤å®£ä¼ æ¿ - lset: - Description: 更改黑åå•å’Œå¿½ç•¥åå•é€‰é¡¹ - Info: - - '&e使用方法: &6/res lset <领地å称> [blacklist=黑åå•/ignorelist=忽略列表] [ææ–™]' - - '&e使用方法: &6/res lset <领地å称> Info' - - å°†æŸç‰©å“加入黑åå•ä»¥é˜»æ­¢è¿™ç§ç‰©å“被放置在领地中 - - 忽略åå•ä¸­çš„物å“å°†ä¸ä¼šè¢«é¢†åœ°ä¿æŠ¤ - raidstatus: - Description: 查看领地的çªè¢­çŠ¶æ€ - Info: - - '&e使用方法: &6/res raidstatus (resName/玩家å称)' - pset: - Description: 为玩家设定该领地的特定æƒé™ - Info: - - '&e使用方法: &6/res pset <领地å称> [玩家å称] [æƒé™] [true/false/remove=移除]' - - '&e使用方法: &6/res pset <领地å称> [玩家å称] removeall' - - 输入 /res flags ? 查看æƒé™åˆ—表 - show: - Description: 显示领地的边界 - Info: - - '&e使用方法: &6/res show <领地å称>' - flags: - Description: 领地æƒé™åˆ—表 - Info: - - 大部分æƒé™å¯ä»¥ä½¿ç”¨å‚æ•° true 表示å…许, false 表示ç¦æ­¢ - SubCommands: - anvil: - Translated: anvil - 使用é“ç § - Description: å…许或ç¦æ­¢ä½¿ç”¨é“ç § - Info: - - '&e使用方法: &6/res set/pset <领地å称> anvil true/false/remove=移除' - admin: - Translated: admin - 管ç†å‘˜æƒé™ - Description: 给予玩家设置领地的æƒé™ - Info: - - '&e使用方法: &6/res pset <领地å称> admin true/false/remove=移除' - animalkilling: - Translated: animalkilling - æ€æ­»åŠ¨ç‰© - Description: å…许或ç¦æ­¢æ€æ­»åŠ¨ç‰© - Info: - - '&e使用方法: &6/res set/pset <领地å称> animalkilling true/false/remove=移除' - animals: - Translated: animals - 生æˆåŠ¨ç‰© - Description: å…许或ç¦æ­¢ç”ŸæˆåŠ¨ç‰© - Info: - - '&e使用方法: &6/res set <领地å称> animals true/false/remove=移除' - anchor: - Translated: anchor - 使用é‡ç”Ÿé”š - Description: å…许或ç¦æ­¢ä½¿ç”¨é‡ç”Ÿé”š - Info: - - '&e使用方法: &6/res set/pset <领地å称> anchor true/false/remove=移除' - anvilbreak: - Translated: anvilbreak - å¼€å¯æˆ–关闭é“ç §æŸå - Description: å¼€å¯æˆ–关闭é“ç §æŸå - Info: - - '&e使用方法: &6/res set <领地å称> anvilbreak true/false/remove=移除' - bank: - Translated: bank - 使用领地银行 - Description: å…许或ç¦æ­¢ä»Žé¢†åœ°é“¶è¡Œå­˜/å–é’± - Info: - - '&e使用方法: &6/res set/pset <领地å称> bank true/false/remove=移除' - bed: - Translated: bed - 使用床(ç¡è§‰) - Description: å…许或ç¦æ­¢ä½¿ç”¨åºŠ(ç¡è§‰) - Info: - - '&e使用方法: &6/res set/pset <领地å称> bed true/false/remove=移除' - honey: - Translated: honey - 获得蜂蜜 - Description: å…许或ç¦æ­¢èŽ·å¾—蜂蜜 - Info: - - '&e使用方法: &6/res set/pset <领地å称> honey true/false/remove=移除' - honeycomb: - Translated: honeycomb - 获得蜜脾 - Description: å…许或ç¦æ­¢èŽ·å¾—蜜脾 - Info: - - '&e使用方法: &6/res set/pset <领地å称> honeycomb true/false/remove=移除' - beacon: - Translated: beacon - 与信标交互 - Description: å…许或ç¦æ­¢ä¸Žä¿¡æ ‡äº¤äº’ - Info: - - '&e使用方法: &6/res set/pset <领地å称> beacon true/false/remove=移除' - brew: - Translated: brew - ä½¿ç”¨é…¿é€ å° - Description: å…许或ç¦æ­¢ä½¿ç”¨é…¿é€ å° - Info: - - '&e使用方法: &6/res set/pset <领地å称> brew true/false/remove=移除' - build: - Translated: build - 建造 - Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…建造 - Info: - - '&e使用方法: &6/res set/pset <领地å称> build true/false/remove=移除' - burn: - Translated: burn - 怪物燃烧 - Description: å¼€å¯æˆ–关闭怪物燃烧 - Info: - - '&e使用方法: &6/res set <领地å称> burn true/false/remove=移除' - button: - Translated: button - 使用按钮 - Description: å…许或ç¦æ­¢ä½¿ç”¨æŒ‰é’® - Info: - - '&e使用方法: &6/res set/pset <领地å称> button true/false/remove=移除' - cake: - Translated: cake - 食用蛋糕 - Description: å…许或ç¦æ­¢é£Ÿç”¨è›‹ç³• - Info: - - '&e使用方法: &6/res set/pset <领地å称> cake true/false/remove=移除' - canimals: - Translated: canimals - è‡ªå®šä¹‰åŠ¨ç‰©ç”Ÿæˆ - Description: å…许或ç¦æ­¢è‡ªå®šä¹‰åŠ¨ç‰©ç”Ÿæˆ - Info: - - '&e使用方法: &6/res set <领地å称> canimals true/false/remove=移除' - chorustp: - Translated: chorustp - ä½¿ç”¨ç´«é¢‚æžœä¼ é€ - Description: å…许或ç¦æ­¢ä½¿ç”¨ç´«é¢‚果传é€åˆ°é¢†åœ° - Info: - - '&e使用方法: &6/res set/pset <领地å称> chorustp true/false/remove=移除' - chat: - Translated: chat - 加入领地èŠå¤©é¢‘é“ - Description: å…许或ç¦æ­¢åŠ å…¥é¢†åœ°èŠå¤©é¢‘é“ - Info: - - '&e使用方法: &6/res set/pset <领地å称> chat true/false/remove=移除' - cmonsters: - Translated: cmonsters - è‡ªå®šä¹‰æ€ªç‰©ç”Ÿæˆ - Description: å…许或ç¦æ­¢è‡ªå®šä¹‰æ€ªç‰©ç”Ÿæˆ - Info: - - '&e使用方法: &6/res set <领地å称> cmonsters true/false/remove=移除' - commandblock: - Translated: commandblock - 与命令方å—交互 - Description: å…许或ç¦æ­¢ä¸Žå‘½ä»¤æ–¹å—交互 - Info: - - '&e使用方法: &6/res set/pset <领地å称> commandblock true/false/remove=移除' - command: - Translated: command - 使用命令 - Description: å…许或ç¦æ­¢åœ¨é¢†åœ°ä¸­ä½¿ç”¨å‘½ä»¤, 需è¦ä¸Žcommandblockæƒé™ä¸€èµ·ä½¿ç”¨ - Info: - - '&e使用方法: &6/res set/pset <领地å称> command true/false/remove=移除' - container: - Translated: container - 使用容器 - Description: å…许或ç¦æ­¢ä½¿ç”¨ç®±å­, å‘射器, 熔炉等容器... - Info: - - '&e使用方法: &6/res set/pset <领地å称> container true/false/remove=移除' - coords: - Translated: coords - 显示或éšè—领地åæ ‡ - Description: 显示或éšè—领地åæ ‡ - Info: - - '&e使用方法: &6/res set <领地å称> coords true/false/remove=移除' - copper: - Translated: copper - ä¿®æ”¹é“œå— - Description: å…许或ç¦æ­¢ä¿®æ”¹é“œå— - Info: - - '&e使用方法: &6/res set/pset <领地å称> copper true/false/remove=移除' - craft: - Translated: craft - 给予 table, enchant and brew æƒé™ - Description: 给予 table, enchant and brew æƒé™ - Info: - - '&e使用方法: &6/res set <领地å称> craft true/false/remove=移除' - creeper: - Translated: creeper - 苦力怕爆炸 - Description: å…许或ç¦æ­¢è‹¦åŠ›æ€•çˆ†ç‚¸ - Info: - - '&e使用方法: &6/res set <领地å称> creeper true/false/remove=移除' - dragongrief: - Translated: dragongrief - 末影龙破å - Description: å…许或ç¦æ­¢æœ«å½±é¾™ç ´åæ–¹å— - Info: - - '&e使用方法: &6/res set <领地å称> dragongrief true/false/remove=移除' - day: - Translated: day - 设置领地时间为白天 - Description: 设置领地时间为白天 - Info: - - '&e使用方法: &6/res set <领地å称> day true/false/remove=移除' - dye: - Translated: dye - 给羊染色 - Description: å…许或ç¦æ­¢ç»™ç¾ŠæŸ“色 - Info: - - '&e使用方法: &6/res set/pset <领地å称> dye true/false/remove=移除' - damage: - Translated: damage - 实体伤害 - Description: å…许或ç¦æ­¢å®žä½“造æˆä¼¤å®³ - Info: - - '&e使用方法: &6/res set <领地å称> damage true/false/remove=移除' - decay: - Translated: decay - æ ‘å¶å‡‹è½ - Description: å¼€å¯æˆ–关闭树å¶å‡‹è½ - Info: - - '&e使用方法: &6/res set <领地å称> decay true/false/remove=移除' - destroy: - Translated: destroy - ç ´åæ–¹å—, 覆盖buildæƒé™ - Description: å…许或ç¦æ­¢ç ´åæ–¹å—, 覆盖buildæƒé™ - Info: - - '&e使用方法: &6/res set/pset <领地å称> destroy true/false/remove=移除' - dryup: - Translated: dryup - 耕地干涸 - Description: å…许或ç¦æ­¢è€•åœ°å¹²æ¶¸ - Info: - - '&e使用方法: &6/res set <领地å称> dryup true/false/remove=移除' - diode: - Translated: diode - 使用红石中继器 - Description: å…许或ç¦æ­¢ä½¿ç”¨çº¢çŸ³ä¸­ç»§å™¨ - Info: - - '&e使用方法: &6/res set/pset <领地å称> diode true/false/remove=移除' - door: - Translated: door - 使用门和活æ¿é—¨ - Description: å…许或ç¦æ­¢ä½¿ç”¨é—¨å’Œæ´»æ¿é—¨ - Info: - - '&e使用方法: &6/res set/pset <领地å称> door true/false/remove=移除' - egg: - Translated: egg - 与龙蛋交互 - Description: å…许或ç¦æ­¢ä¸Žé¾™è›‹äº¤äº’ - Info: - - '&e使用方法: &6/res set/pset <领地å称> egg true/false/remove=移除' - enchant: - Translated: enchant - ä½¿ç”¨é™„é­”å° - Description: å…许或ç¦æ­¢ä½¿ç”¨é™„é­”å° - Info: - - '&e使用方法: &6/res set/pset <领地å称> enchant true/false/remove=移除' - explode: - Translated: explode - 爆炸 - Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…爆炸 - Info: - - '&e使用方法: &6/res set <领地å称> explode true/false/remove=移除' - elytra: - Translated: elytra - 使用鞘翅 - Description: å…许或ç¦æ­¢åœ¨é¢†åœ°ä¸­ä½¿ç”¨éž˜ç¿… - Info: - - '&e使用方法: &6/res set/pset <领地å称> elytra true/false/remove=移除' - enderpearl: - Translated: enderpearl - 使用末影çç ä¼ é€ - Description: å…许或ç¦æ­¢ä½¿ç”¨æœ«å½±çç ä¼ é€åˆ°é¢†åœ° - Info: - - '&e使用方法: &6/res set/pset <领地å称> enderpearl true/false/remove=移除' - fallinprotection: - Translated: fallinprotection - 阻止方å—从领地外掉è½åˆ°é¢†åœ°å†… - Description: 阻止或å…许方å—从领地外掉è½åˆ°é¢†åœ°å†…(例如沙å­å’Œæ²™ç ¾) - Info: - - '&e使用方法: &6/res set <领地å称> fallinprotection true/false/remove=移除' - falldamage: - Translated: falldamage - è·Œè½ä¼¤å®³ - Description: å¼€å¯æˆ–关闭跌è½ä¼¤å®³ - Info: - - '&e使用方法: &6/res set <领地å称> falldamage true/false/remove=移除' - feed: - Translated: feed - 自动回å¤é¥±é£Ÿåº¦ - Description: å¼€å¯æˆ–关闭为领地内玩家自动回å¤é¥±é£Ÿåº¦ - Info: - - '&e使用方法: &6/res set <领地å称> feed true/false/remove=移除' - friendlyfire: - Translated: friendlyfire - 队å‹ä¼¤å®³(待实测) - Description: å¼€å¯æˆ–关闭队å‹ä¼¤å®³(待实测) - Info: - - '&e使用方法: &6/res pset <领地å称> friendlyfire true/false/remove=移除' - fireball: - Translated: fireball - 使用ç«ç„°å¼¹ - Description: å…许或ç¦æ­¢ç«ç„°å¼¹, 当设置为True或remove的时候为å…许 - Info: - - '&e使用方法: &6/res set <领地å称> fireball true/false/remove=移除' - firespread: - Translated: firespread - ç«ç„°è”“延 - Description: å…许或ç¦æ­¢ç«ç„°è”“延, 当设置为True或remove的时候为å…许 - Info: - - '&e使用方法: &6/res set <领地å称> firespread true/false/remove=移除' - flowinprotection: - Translated: flowinprotection - 阻止液体从领地外æµå‘领地内 - Description: 阻止或å…许液体从领地外æµå‘领地内, 当设置为True或remove的时候为å…许 - Info: - - '&e使用方法: &6/res set <领地å称> flowinprotection true/false/remove=移除' - flow: - Translated: flow - 液体æµåŠ¨ - Description: å…许或ç¦æ­¢é¢†åœ°å†…液体扩散 - Info: - - '&e使用方法: &6/res set <领地å称> flow true/false/remove=移除' - flowerpot: - Translated: flowerpot - 与花盆交互 - Description: å…许或ç¦æ­¢ä¸ŽèŠ±ç›†äº¤äº’ - Info: - - '&e使用方法: &6/res set/pset <领地å称> flowerpot true/false/remove=移除' - grow: - Translated: grow - æ¤ç‰©ç”Ÿé•¿ - Description: å…许或ç¦æ­¢æ¤ç‰©ç”Ÿé•¿ - Info: - - '&e使用方法: &6/res set <领地å称> grow true/false/remove=移除' - glow: - Translated: glow - 使玩家进入领地时å‘å…‰ - Description: 使玩家进入领地时å‘å…‰ - Info: - - '&e使用方法: &6/res set <领地å称> glow true/false/remove=移除' - hotfloor: - Translated: hotfloor - 岩浆å—伤害 - Description: å¼€å¯æˆ–关闭岩浆å—造æˆçš„伤害 - Info: - - '&e使用方法: &6/res set <领地å称> hotfloor true/false/remove=移除' - hidden: - Translated: hidden - 在领地列表中éšè—此领地 - Description: 在"list"或"listall"命令中éšè—此领地 - Info: - - '&e使用方法: &6/res set <领地å称> hidden true/false/remove=移除' - hook: - Translated: hook - 使用鱼竿钓到实体 - Description: å…许或ç¦æ­¢ä½¿ç”¨é±¼ç«¿é’“到实体 - Info: - - '&e使用方法: &6/res set/pset <领地å称> hook true/false/remove=移除' - healing: - Translated: healing - 自动回å¤ç”Ÿå‘½å€¼ - Description: å¼€å¯æˆ–关闭为领地内玩家自动回å¤ç”Ÿå‘½å€¼ - Info: - - '&e使用方法: &6/res set <领地å称> healing true/false/remove=移除' - iceform: - Translated: iceform - 水结冰 - Description: å…许或ç¦æ­¢æ°´ç»“冰 - Info: - - '&e使用方法: &6/res set <领地å称> iceform true/false/remove=移除' - icemelt: - Translated: icemelt - 冰èžåŒ– - Description: å…许或ç¦æ­¢å†°èžåŒ– - Info: - - '&e使用方法: &6/res set <领地å称> icemelt true/false/remove=移除' - ignite: - Translated: ignite - ç‚¹ç« - Description: å…许或ç¦æ­¢ç‚¹ç« - Info: - - '&e使用方法: &6/res set/pset <领地å称> ignite true/false/remove=移除' - itemdrop: - Translated: itemdrop - 物å“æŽ‰è½ - Description: å…许或ç¦æ­¢ç‰©å“æŽ‰è½ - Info: - - '&e使用方法: &6/res set/pset <领地å称> itemdrop true/false/remove=移除' - itempickup: - Translated: itempickup - æ¡èµ·ç‰©å“ - Description: å…许或ç¦æ­¢æ¡èµ·ç‰©å“ - Info: - - '&e使用方法: &6/res set/pset <领地å称> itempickup true/false/remove=移除' - jump2: - Translated: jump2 - 跳跃两格高 - Description: å…许或ç¦æ­¢çŽ©å®¶è·³è·ƒé«˜åº¦åœ¨ä¸¤ä¸ªæ–¹å—以上 - Info: - - '&e使用方法: &6/res set <领地å称> jump2 true/false/remove=移除' - jump3: - Translated: jump3 - 跳跃三格高 - Description: å…许或ç¦æ­¢çŽ©å®¶è·³è·ƒé«˜åº¦åœ¨ä¸‰ä¸ªæ–¹å—以上 - Info: - - '&e使用方法: &6/res set <领地å称> jump3 true/false/remove=移除' - keepinv: - Translated: keepinv - 物å“æ ä¸æŽ‰è½ - Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨æ­»åŽä¿ç•™ç‰©å“æ  - Info: - - '&e使用方法: &6/res set <领地å称> keepinv true/false/remove=移除' - keepexp: - Translated: keepexp - ç»éªŒå€¼ä¸æŽ‰è½ - Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨æ­»åŽä¿ç•™ç»éªŒå€¼ - Info: - - '&e使用方法: &6/res set <领地å称> keepexp true/false/remove=移除' - lavaflow: - Translated: lavaflow - 岩浆æµåŠ¨, 覆盖flowæƒé™ - Description: å…许或ç¦æ­¢é¢†åœ°å†…岩浆扩散, 覆盖flowæƒé™ - Info: - - '&e使用方法: &6/res set <领地å称> lavaflow true/false/remove=移除' - leash: - Translated: leash - 使用拴绳 - Description: å…许或ç¦æ­¢å¯¹åŠ¨ç‰©ä½¿ç”¨æ‹´ç»³ - Info: - - '&e使用方法: &6/res set/pset <领地å称> leash true/false/remove=移除' - lever: - Translated: lever - ä½¿ç”¨æ‹‰æ† - Description: å…许或ç¦æ­¢ä½¿ç”¨æ‹‰æ† - Info: - - '&e使用方法: &6/res set/pset <领地å称> lever true/false/remove=移除' - mobexpdrop: - Translated: mobexpdrop - 怪物掉è½ç»éªŒ - Description: å…许或ç¦æ­¢æ€ªç‰©æŽ‰è½ç»éªŒ - Info: - - '&e使用方法: &6/res set <领地å称> mobexpdrop true/false/remove=移除' - mobitemdrop: - Translated: mobitemdrop - 怪物掉è½ç‰©å“ - Description: å…许或ç¦æ­¢æ€ªç‰©æŽ‰è½ç‰©å“ - Info: - - '&e使用方法: &6/res set <领地å称> mobitemdrop true/false/remove=移除' - mobkilling: - Translated: mobkilling - æ€æ­»æ€ªç‰© - Description: å…许或ç¦æ­¢æ€æ­»æ€ªç‰© - Info: - - '&e使用方法: &6/res set/pset <领地å称> mobkilling true/false/remove=移除' - monsters: - Translated: monsters - æ€ªç‰©ç”Ÿæˆ - Description: å…许或ç¦æ­¢æ€ªç‰©ç”Ÿæˆ - Info: - - '&e使用方法: &6/res set <领地å称> monsters true/false/remove=移除' - move: - Translated: move - 在领地内移动 - Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…移动 - Info: - - '&e使用方法: &6/res set/pset <领地å称> move true/false/remove=移除' - nametag: - Translated: nametag - 使用命å牌(待实测) - Description: å…许或ç¦æ­¢ä½¿ç”¨å‘½å牌(待实测) - Info: - - '&e使用方法: &6/res set/pset <领地å称> nametag true/false/remove=移除' - nanimals: - Translated: nanimals - 自然生æˆåŠ¨ç‰© - Description: å…许或ç¦æ­¢è‡ªç„¶ç”ŸæˆåŠ¨ç‰© - Info: - - '&e使用方法: &6/res set <领地å称> nanimals true/false/remove=移除' - nmonsters: - Translated: nmonsters - 自然生æˆæ€ªç‰© - Description: å…许或ç¦æ­¢è‡ªç„¶ç”Ÿæˆæ€ªç‰© - Info: - - '&e使用方法: &6/res set <领地å称> nmonsters true/false/remove=移除' - night: - Translated: night - 设置领地时间为晚上 - Description: 设置领地时间为晚上 - Info: - - '&e使用方法: &6/res set <领地å称> night true/false/remove=移除' - nofly: - Translated: nofly - ç¦æ­¢åœ¨é¢†åœ°å†…飞行 - Description: ç¦æ­¢æˆ–å…许在领地内飞行 - Info: - - '&e使用方法: &6/res set/pset <领地å称> nofly true/false/remove=移除' - fly: - Translated: fly - 自动开å¯é£žè¡Œ - Description: å¼€å¯æˆ–关闭在领地内自动开å¯é£žè¡Œ - Info: - - '&e使用方法: &6/res set/pset <领地å称> fly true/false/remove=移除' - nomobs: - Translated: nomobs - 阻止怪物进入领地 - Description: 阻止或å…许怪物进入领地 - Info: - - '&e使用方法: &6/res set <领地å称> nomobs true/false/remove=移除' - note: - Translated: note - 使用音符盒 - Description: å…许或ç¦æ­¢ä½¿ç”¨éŸ³ç¬¦ç›’ - Info: - - '&e使用方法: &6/res set/pset <领地å称> note true/false/remove=移除' - nodurability: - Translated: nodurability - 关闭物å“è€ä¹…度æŸè€— - Description: 关闭或开å¯ç‰©å“è€ä¹…度æŸè€— - Info: - - '&e使用方法: &6/res set <领地å称> nodurability true/false/remove=移除' - overridepvp: - Translated: overridepvp - 其他æ’件的PVPä¿æŠ¤ - Description: å¼€å¯æˆ–关闭其他æ’件的PVPä¿æŠ¤ - Info: - - '&e使用方法: &6/res set <领地å称> overridepvp true/false/remove=移除' - pressure: - Translated: pressure - ä½¿ç”¨åŽ‹åŠ›æ¿ - Description: å…许或ç¦æ­¢ä½¿ç”¨åŽ‹åŠ›æ¿ - Info: - - '&e使用方法: &6/res set/pset <领地å称> pressure true/false/remove=移除' - piston: - Translated: piston - 使用活塞 - Description: å…许或ç¦æ­¢æ´»å¡žå·¥ä½œ - Info: - - '&e使用方法: &6/res set <领地å称> piston true/false/remove=移除' - pistonprotection: - Translated: pistonprotection - 阻止领地外的活塞推/拉至领地内 - Description: 阻止或å…许领地外的活塞推/拉至领地内 - Info: - - '&e使用方法: &6/res set <领地å称> pistonprotection true/false/remove=移除' - place: - Translated: place - 放置方å—, 覆盖buildæƒé™ - Description: å…许或ç¦æ­¢æ”¾ç½®æ–¹å—, 覆盖buildæƒé™ - Info: - - '&e使用方法: &6/res set/pset <领地å称> place true/false/remove=移除' - pvp: - Translated: pvp - PVP - Description: å…许或ç¦æ­¢PVP - Info: - - '&e使用方法: &6/res set <领地å称> pvp true/false/remove=移除' - rain: - Translated: rain - 设置领地天气为雨天 - Description: 设置领地天气为雨天 - Info: - - '&e使用方法: &6/res set <领地å称> rain true/false/remove=移除' - respawn: - Translated: respawn - 自动å¤æ´»ä¸€ä¸ªçŽ©å®¶ - Description: å…许或ç¦æ­¢è‡ªåŠ¨å¤æ´»ä¸€ä¸ªçŽ©å®¶ - Info: - - '&e使用方法: &6/res set <领地å称> respawn true/false/remove=移除' - riding: - Translated: riding - 骑马 - Description: å…许或ç¦æ­¢éª‘马 - Info: - - '&e使用方法: &6/res set/pset <领地å称> riding true/false/remove=移除' - shoot: - Translated: shoot - 使用弓箭射击 - Description: å…许或ç¦æ­¢ä½¿ç”¨å¼“箭射击 - Info: - - '&e使用方法: &6/res set <领地å称> shoot true/false/remove=移除' - sun: - Translated: sun - 设置领地天气为晴天 - Description: 设置领地天气为晴天 - Info: - - '&e使用方法: &6/res set <领地å称> sun true/false/remove=移除' - shop: - Translated: shop - 将领地添加到特殊领地商店列表中 - Description: 将领地添加到特殊领地商店列表中 - Info: - - '&e使用方法: &6/res set <领地å称> shop true/false/remove=移除' - snowtrail: - Translated: snowtrail - 雪傀儡生æˆé›ªè¿¹ - Description: å…许或ç¦æ­¢é›ªå‚€å„¡ç”Ÿæˆé›ªè¿¹ - Info: - - '&e使用方法: &6/res set <领地å称> snowtrail true/false/remove=移除' - spread: - Translated: spread - æ–¹å—蔓延 - Description: å…许或ç¦æ­¢æ–¹å—蔓延 - Info: - - '&e使用方法: &6/res set <领地å称> spread true/false/remove=移除' - snowball: - Translated: snowball - å…许或ç¦æ­¢é›ªçƒå‡»é€€ - Description: å…许或ç¦æ­¢é›ªçƒå‡»é€€ - Info: - - '&e使用方法: &6/res set <领地å称> snowball true/false/remove=移除' - sanimals: - Translated: sanimals - 刷怪笼或刷怪蛋生æˆåŠ¨ç‰© - Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼æˆ–刷怪蛋生æˆåŠ¨ç‰© - Info: - - '&e使用方法: &6/res set <领地å称> sanimals true/false/remove=移除' - shear: - Translated: shear - 剪羊毛 - Description: å…许或ç¦æ­¢å‰ªç¾Šæ¯› - Info: - - '&e使用方法: &6/res set/pset <领地å称> shear true/false/remove=移除' - smonsters: - Translated: smonsters - 刷怪笼或刷怪蛋生æˆæ€ªç‰© - Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼æˆ–刷怪蛋生æˆæ€ªç‰© - Info: - - '&e使用方法: &6/res set <领地å称> smonsters true/false/remove=移除' - subzone: - Translated: subzone - 创建å­é¢†åœ° - Description: å…许或ç¦æ­¢åˆ›å»ºå­é¢†åœ° - Info: - - '&e使用方法: &6/res set/pset <领地å称> subzone true/false/remove=移除' - title: - Translated: title - 显示或éšè—领地进入/ç¦»å¼€ä¿¡æ¯ - Description: 显示或éšè—领地进入/ç¦»å¼€ä¿¡æ¯ - Info: - - '&e使用方法: &6/res set <领地å称> title true/false/remove=移除' - table: - Translated: table - ä½¿ç”¨å·¥ä½œå° - Description: å…许或ç¦æ­¢ä½¿ç”¨å·¥ä½œå° - Info: - - '&e使用方法: &6/res set/pset <领地å称> table true/false/remove=移除' - tnt: - Translated: tnt - TNT爆炸 - Description: å…许或ç¦æ­¢TNT爆炸 - Info: - - '&e使用方法: &6/res set <领地å称> tnt true/false/remove=移除' - tp: - Translated: tp - ä¼ é€åˆ°é¢†åœ° - Description: å…许或ç¦æ­¢ä¼ é€åˆ°é¢†åœ° - Info: - - '&e使用方法: &6/res set/pset <领地å称> tp true/false/remove=移除' - trade: - Translated: trade - 与æ‘民交易 - Description: å…许或ç¦æ­¢ä¸Žæ‘民交易 - Info: - - '&e使用方法: &6/res set/pset <领地å称> trade true/false/remove=移除' - trample: - Translated: trample - 踩è¸è€•åœ° - Description: å…许或ç¦æ­¢è¸©è¸è€•åœ° - Info: - - '&e使用方法: &6/res set <领地å称> trample true/false/remove=移除' - use: - Translated: use - 控制在领地中的一些交互æƒé™ - Description: å…许或ç¦æ­¢ä½¿ç”¨é—¨ã€æ æ†ã€æŒ‰é’®ç­‰... - Info: - - '&e使用方法: &6/res set/pset <领地å称> use true/false/remove=移除' - vehicledestroy: - Translated: vehicledestroy - ç ´å载具 - Description: å…许或ç¦æ­¢ç ´å载具 - Info: - - '&e使用方法: &6/res set/pset <领地å称> vehicledestroy true/false/remove=移除' - witherspawn: - Translated: witherspawn - å…许或ç¦æ­¢å‡‹é›¶ç”Ÿæˆ - Description: å…许或ç¦æ­¢å‡‹é›¶ç”Ÿæˆ - Info: - - '&e使用方法: &6/res set <领地å称> witherspawn true/false/remove=移除' - phantomspawn: - Translated: phantomspawn - å…许或ç¦æ­¢å¹»ç¿¼ç”Ÿæˆ - Description: å…许或ç¦æ­¢å¹»ç¿¼ç”Ÿæˆ - Info: - - '&e使用方法: &6/res set <领地å称> phantomspawn true/false/remove=移除' - witherdamage: - Translated: witherdamage - å…许或ç¦æ­¢å‡‹é›¶é€ æˆä¼¤å®³ - Description: å…许或ç¦æ­¢å‡‹é›¶é€ æˆä¼¤å®³ - Info: - - '&e使用方法: &6/res set <领地å称> witherdamage true/false/remove=移除' - witherdestruction: - Translated: witherdestruction - å…许或ç¦æ­¢å‡‹é›¶ç ´åæ–¹å— - Description: å…许或ç¦æ­¢å‡‹é›¶ç ´åæ–¹å— - Info: - - '&e使用方法: &6/res set <领地å称> witherdestruction true/false/remove=移除' - waterflow: - Translated: waterflow - æ°´æµåŠ¨, 覆盖flowæƒé™ - Description: å…许或ç¦æ­¢æ°´æ‰©æ•£, 覆盖flowæƒé™ - Info: - - '&e使用方法: &6/res set <领地å称> waterflow true/false/remove=移除' - wspeed1: - Translated: wspeed1 - 设置移动速度为0.25 - Description: 设置移动速度为0.25 - Info: - - '&e使用方法: &6/res set <领地å称> wspeed1 true/false/remove=移除' - wspeed2: - Translated: wspeed2 - 设置移动速度为1.0 - Description: 设置移动速度为1.0 - Info: - - '&e使用方法: &6/res set <领地å称> wspeed2 true/false/remove=移除' - remove: - Info: - - '&e使用方法: &6/res remove [领地å称]' - Description: 删除领地 - signupdate: - Info: - - '&e使用方法: &6/res signupdate' - Description: 更新领地木牌 - current: - Info: - - '&e使用方法: &6/res current' - Description: 显示你目å‰æ‰€åœ¨çš„领地 - reload: - Info: - - '&e使用方法: &6/res reload [config/lang/groups/flags]' - Description: é‡è½½é…置或语言文件 - leaveraid: - Info: - - '&e使用方法: &6/res leaveraid' - Description: 离开çªè¢­ - setowner: - Info: - - '&e使用方法: &6/resadmin setowner [领地å称] [玩家å称] (-keepflags=ä¿æŒæƒé™)' - Description: 改å˜é¢†åœ°æ‰€æœ‰è€… - defend: - Info: - - '&e使用方法: &6/res defend [resName] (玩家å称)' - Description: 加入领地çªè¢­é˜²å¾¡ - attack: - Info: - - '&e使用方法: &6/res attack [resName]' - Description: 开始对领地进行çªè¢­ - unstuck: - Info: - - '&e使用方法: &6/res unstuck' - Description: ä¼ é€åˆ°é¢†åœ°å¤–é¢ - subzone: - Info: - - '&e使用方法: &6/res subzone <领地å称> [å­åŒºåŸŸå称]' - - 如果领地å留空, 将会å°è¯•åœ¨çŽ©å®¶æ‰€å¤„领地中建立å­åŒºåŸŸ - Description: 在领地中创建å­åŒºåŸŸ - removeworld: - Info: - - '&e使用方法: &6/res removeworld [世界å称]' - - åªèƒ½åœ¨æŽ§åˆ¶å°æ‰§è¡Œæ­¤å‘½ä»¤ - Description: 删除指定世界中的所有领地 - limits: - Info: - - '&e使用方法: &6/res limits (玩家å称)' - - 显示你在创建和管ç†é¢†åœ°æ–¹é¢çš„å„ç§é™åˆ¶ - Description: 显示你的领地é™åˆ¶ - set: - Info: - - '&e使用方法: &6/res set <领地å称> [æƒé™] [true/false/remove=移除]' - - 输入 /res flags ? 查看æƒé™åˆ—表 - - 如果没有为玩家指定该领地的特定æƒé™, 那么这å玩家将会拥有这些默认æƒé™. (å‚è§ /res pset ?) - Description: 为领地设置默认æƒé™ - clearflags: - Info: - - '&e使用方法: &6/res clearflags <领地å称>' - Description: 移除领地所有æƒé™ - message: - Info: - - '&e使用方法: &6/res message <领地å称> [enter=进入/leave=离开] [消æ¯]' - - 设置领地加入和离开的消æ¯æ–‡æœ¬ - - '&e使用方法: &6/res message <领地å称> remove [enter=进入/leave=离开]' - - 移除加入或离开的消æ¯æ–‡æœ¬ - Description: 管ç†é¢†åœ°åŠ å…¥ / ç¦»å¼€æ¶ˆæ¯ - command: - Info: - - '&e使用方法: &6/res command <领地å称> <命令>' - - 想è¦ç§»é™¤æ·»åŠ çš„命令åªéœ€è¦é‡æ–°è¾“入一次å³å¯ç§»é™¤ - - 使用 _ æ¥è¡¨ç¤ºå¤šä¸ªå˜é‡ - Description: 管ç†é¢†åœ°å…许或者ç¦æ­¢çš„命令 - confirm: - Description: 确认删除领地 - Info: - - '&e使用方法: &6/res confirm' - - 确认删除一个领地 - resadmin: - Info: - - '&e使用方法: &6/res resadmin [on/off]' - Description: 关闭或者开å¯é¢†åœ°ç®¡ç† - tpset: - Info: - - '&e使用方法: &6/res tpset' - - 该命令将会把你站的ä½ç½®è®¾ç½®ä¸ºé¢†åœ°çš„ä¼ é€ç‚¹ - - 你必须站在一个领地里æ‰èƒ½ä½¿ç”¨è¿™ä¸ªå‘½ä»¤ - - 你必须是领地的所有者或者拥有领地的 admin æƒé™ - Description: 设定领地的传é€ç‚¹ - tpconfirm: - Info: - - '&e使用方法: &6/res tpconfirm' - - 强制传é€åˆ°é¢†åœ°, 忽略传é€ä¸å®‰å…¨çš„警告 - Description: 忽略ä¸å®‰å…¨ä¼ é€è­¦å‘Š - removeall: - Info: - - '&e使用方法: &6/res removeall [玩家å称]' - - 移除玩家的所有领地 - - 如果是移除其他玩家的领地, 你必须有 /resadmin 命令æƒé™ - Description: 移除玩家的所有领地 - material: - Info: - - '&e使用方法: &6/res material [material]' - Description: 检查æ质是å¦å­˜åœ¨å¯¹åº”çš„ID - kick: - Info: - - '&e使用方法: &6/res kick <玩家å称>' - - 你必须是领地所有者或者管ç†å‘˜ - - 玩家必须在线 - Description: 将玩家踢出领地 - sublist: - Info: - - '&e使用方法: &6/res sublist <领地å称> <页ç >' - - 列出所有领地å­åŒºåŸŸ - Description: 列出所有领地å­åŒºåŸŸ - rename: - Info: - - '&e使用方法: &6/res rename [æ—§åå­—] [æ–°åå­—]' - - 你必须是领地所有者或者管ç†å‘˜ - - 新领地åå­—ä¸èƒ½ä¸Žå…¶ä»–领地åå­—é‡å¤ - Description: é‡å‘½å领地å称 - setallfor: - Info: - - '&e使用方法: &6/res setallfor [玩家å称] [æƒé™] [true/false/remove=移除]' - Description: 在特定玩家拥有的所有ä½å®…上设置一般æƒé™ - lease: - Info: - - '&e使用方法: &6/res lease [renew/cost] [领地å称]' - - /res lease cost 显示续租领地的费用 - - /res lease renew 将会续租指定的领地 - Description: 管ç†é¢†åœ°ç§Ÿçº¦ - SubCommands: - set: - Description: 设置租约时间 - Info: - - '&e使用方法: &6/resadmin lease set [领地å称] [#days=天数/infinite=无期é™]' - - å°†ç§Ÿçº¦æ—¶é—´è®¾ç½®ä¸ºæŒ‡å®šå¤©æ•°æˆ–è€…æ— æœŸé™ - renew: - Description: 续期租约时间 - Info: - - '&e使用方法: &6/resadmin lease renew <领地å称>' - - 续期当å‰æˆ–指定的领地租约 - list: - Description: 显示当å‰é¢†åœ°çš„租èµåˆ—表 - Info: - - '&e使用方法: &6/resadmin lease list <领地å称> <页ç >' - - 列出所有å­åŒºåŸŸçš„租èµæ—¶é—´ - expires: - Description: 租约过期时间 - Info: - - '&e使用方法: &6/resadmin lease expires <领地å称>' - - 显示领地租约过期的时间 - cost: - Description: 显示续租费用 - Info: - - '&e使用方法: &6/resadmin lease cost <领地å称>' - - 显示续租领地所需的费用 - tp: - Info: - - '&e使用方法: &6/res tp [领地å称]' - - 将你传é€åˆ°ä¸€ä¸ªé¢†åœ°, 你必须是领地所有者或者拥有该领地 tp æƒé™. - - ä½ çš„æƒé™ç»„也必须在æœåŠ¡å™¨ä¸­æœ‰ä¼ é€æƒé™ - Description: ä¼ é€åˆ°é¢†åœ° - setall: - Info: - - '&e使用方法: &6/res setall [æƒé™] [true/false/remove=移除]' - Description: 在所有领地上设置一般æƒé™ - resreload: - Description: é‡è½½é¢†åœ°æ’件 - Info: - - '&e使用方法: &6/resreload' - resload: - Description: 加载领地存档文件 - Info: - - '&e使用方法: &6/resload' - - 该命令ä¸å®‰å…¨! 它ä¸ä¼šå…ˆä¿å­˜é¢†åœ°çŠ¶æ€ - - 对领地åšå‡ºæ”¹å˜åŽé‡æ–°åŠ è½½å­˜æ¡£ +# of this file and modify that instead. This file will be updated automatically by Residence +# when a newer version is detected, and your changes will be overwritten. Once you +# have a copy of this file, change the Language: option under the Residence config.yml +# to whatever you named your copy. + +Language: + Invalid: + Player: '&c无效的玩家å...' + World: '&c无效的世界...' + Residence: '&c无效的领地...' + Subzone: '&c无效的领地å­åŒºåŸŸ...' + Direction: '&c无效的方å‘...' + Amount: '&c无效的数é‡...' + Cost: '&c无效的花费...' + Days: '&c无效的天数...' + Material: '&c无效的ææ–™...' + Boolean: '&c无效值, 必须为 &6true(t) &c或者 &6false(f)' + Area: '&c无效的区域...' + Group: '&c无效的æƒé™ç»„...' + MessageType: '&c消æ¯ç±»åž‹å¿…须为 enter(进入), leave(离开) 或 remove(移除).' + Flag: '&c无效æƒé™...' + FlagState: '&c无效æƒé™çŠ¶æ€, 必须为 &6true(t)&c, &6false(f)&c, 或 &6remove(r)' + List: '&e未知åå•ç±»åž‹, 必须是 &6blacklist(黑åå•) &e或 &6ignorelist(忽略åå•).' + Page: '&e无效页é¢...' + Help: '&c无效帮助页é¢...' + NameCharacters: '&cå字中包å«æ— æ•ˆå­—符...' + PlayerOffline: '&c玩家ä¸åœ¨çº¿' + FlagType: + Fail: '&c无效标志... 此标志åªèƒ½åœ¨ %1 使用' + Player: 玩家 + Residence: 领地 + PortalDestination: '&cä¼ é€ç‚¹ä½äºŽé™åˆ¶åŒºåŸŸä¸­. ä¼ é€ç‚¹åˆ›å»ºå·²å–消. &7请寻找新地点' + FromConsole: '&c此功能åªèƒ½åœ¨æŽ§åˆ¶å°ä½¿ç”¨!' + Ingame: '&c此功能åªèƒ½åœ¨æ¸¸æˆä¸­ä½¿ç”¨!' + Area: + Exists: '&c区域å已存在.' + Create: '&e领地区域创建æˆåŠŸ, ID &6%1' + DiffWorld: '&c区域与领地在ä¸åŒä¸–ç•Œ.' + Collision: '&c区域与领地 &6%1 &c冲çª.' + SubzoneCollision: '&c区域与领地å­åŒºåŸŸ &6%1 &c冲çª.' + NonExist: '&c区域ä¸å­˜åœ¨.' + InvalidName: '&c无效区域å...' + ToSmallX: '&c选区 &6X &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' + ToSmallY: '&c选区高度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' + ToSmallZ: '&c选区 &6Z &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' + ToBigX: '&c你选择的 &6X &cåæ ‡ (&6%1&c) 太大了. &e请ä¿è¯é€‰æ‹©å¤§å°åœ¨ &6%2 &e之内' + ToBigY: '&c你选择的 &6Y &cåæ ‡ (&6%1&c) 太大了. &e请ä¿è¯é€‰æ‹©å¤§å°åœ¨ &6%2 &e之内' + ToBigZ: '&c你选择的 &6Z &cåæ ‡ (&6%1&c) 太大了. &e请ä¿è¯é€‰æ‹©å¤§å°åœ¨ &6%2 &e之内' + Rename: '&e区域 &6%1 &e已被é‡å‘½å为 &6%2' + Remove: '&e已删除区域 &6%1&e.' + Name: '&eå称: &2%1' + RemoveLast: '&cä¸èƒ½ç§»é™¤é¢†åœ°ä¸­çš„最åŽä¸€ä¸ªåŒºåŸŸ.' + NotWithinParent: '&c该区域ä¸åœ¨çˆ¶åŒºåŸŸå†….' + Update: '&e区域已更新...' + MaxPhysical: '&e已达到领地所å…许的最大空间.' + SizeLimit: '&e区域大å°è¶…出了å…许的尺寸上é™.' + HighLimit: '&cä½ ä¸èƒ½ä¿æŠ¤è¿™ä¹ˆé«˜çš„领地, 高度上é™ä¸º &6%1' + LowLimit: '&cä½ ä¸èƒ½ä¿æŠ¤è¿™ä¹ˆæ·±çš„领地, 深度上é™ä¸º &6%1' + TooClose: '&cé å¾—离å¦ä¸€ä¸ªé¢†åœ°å¤ªè¿‘了. 你需è¦è‡³å°‘ &e%1 &c格宽.' + ListAll: '&a{&eID:&c%1 &e点1:&c(%2,%3,%4) &e点2:&c(%5,%6,%7) &e(é¢ç§¯:&c%8&e)&a}' + WeirdShape: '&3领地形状ä¸æ­£ç¡®.&6%1&3边比&6%3&3边大&6%2&3å€' + Select: + Points: '&e执行命令å‰éœ€è¦å…ˆé€‰ä¸­ä¸¤ä¸ªé€‰å–点!' + Overlap: '&c选å–点与区域 &6%1 &cé‡å !' + WorldGuardOverlap: '&c选å–点与 WorldGuard 区域 &6%1 &cé‡å !' + KingdomsOverlap: '&c你选择的å标和 &6%1 &c王国的土地产生了冲çªï¼' + Success: '&e选å–点æˆåŠŸ!' + Fail: '&c无效的选择命令...' + Bedrock: '&e将选区扩展到最大深度.' + Sky: '&e将选区扩展到最大高度.' + Area: '&e已选择 &6%2 &e领地的 &6%1 &e区域.' + Tool: '&e- 选区工具: &6%1' + PrimaryPoint: '&e已选择 &6第一个 &e选å–点 %1' + SecondaryPoint: '&e已选择 &6第二个 &e选å–点 %1' + Primary: '&e第一个选å–点: &6%1' + Secondary: '&e第二个选å–点: &6%1' + TooHigh: '&c警告: 选区越过了地图顶部, 并且已被è£å‰ª.' + TooLow: '&c警告: 选区越过了地图底部, 并且已被è£å‰ª.' + TotalSize: '&e选区总大å°: &6%1' + AutoEnabled: '&e自动选择模å¼&6å¼€å¯&e. 输入 &6/res select auto &e关闭.' + AutoDisabled: '&e自动选择模å¼&6关闭&e. 输入 &6/res select auto &eå†æ¬¡æ‰“å¼€.' + Disabled: '&c你没有æƒé™ä½¿ç”¨é€‰æ‹©å‘½ä»¤.' + Sign: + Updated: '&6%1 &e木牌已更新!' + TopLine: '[领地市场]' + DateFormat: YY/MM/dd HH:mm + ForRentTopLine: '&8出租' + ForRentPriceLine: '&8%1&f/&8%2&f/&8%3' + ForRentResName: '&8%1' + ForRentBottomLine: '&9å¯ç”¨' + RentedAutorenewTrue: '&2%1' + RentedAutorenewFalse: '&c%1' + RentedTopLine: '%1' + RentedPriceLine: '&8%1&f/&8%2&f/&8%3' + RentedResName: '&8%1' + RentedBottomLine: '&1%1' + ForSaleTopLine: '&8出售' + ForSalePriceLine: '&8%1' + ForSaleResName: '&8%1' + ForSaleBottomLine: '&5å¯ç”¨' + LookAt: '&c请将鼠标准星对准木牌.' + ForSaleBottom: '&0%1m³' + TooMany: '&c此领地的告示牌太多了' + ResName: '&0%1' + Owner: '&0%1' + Flag: + Set: '&6%2 &eçš„ &6%1 &eæƒé™å·²è®¾ç½®ä¸º &6%3 &e状æ€.' + SetFailed: '&c你没有æƒé™è®¾ç½® &6%1 &cæƒé™' + CheckTrue: '&e玩家 &6%2 &e已在领地 &6%3 &e中将 &6%1 &eæƒé™è®¾ç½®ä¸º &6%4&e.' + CheckFalse: '&e玩家 &6%2 &e没有在领地中设置 &6%1 &eæƒé™.' + Cleared: '&eæƒé™å·²æ¸…除.' + RemovedAll: '&e玩家 &6%1 &e在 &6%2 &e领地内的所有æƒé™å‡å·²åˆ é™¤' + RemovedGroup: '&e用户组 &6%1 &e在 &6%2 &e领地内的所有æƒé™å‡å·²åˆ é™¤' + Default: '&eæƒé™å·²æ¢å¤é»˜è®¤å€¼.' + Deny: '&c你没有 &6%1 &cæƒé™.' + SetDeny: '&c所有者ä¸èƒ½è®¾ç½® &6%1 &cæƒé™.' + ChangeDeny: '&c此时领地内有 &6%2 &cå玩家, 所以你无法更改 &6%1 &cæƒé™.' + p1Color: '&2' + p2Color: '&a' + haveColor: '&2' + havePrefix: '' + lackColor: '&7' + lackPrefix: '' + others: '&e和其他 &2%1 &e个' + ChangedForOne: '&e为 &6%2 &e领地更改了 &6%1 &e个标志' + ChangedFor: '&e为 &6%2 &e个检查的领地更改了 &6%1 &e个标志' + reset: '&e为 &6%1 &e领地é‡ç½®äº†æ ‡å¿—' + resetAll: '&e为 &6%1 &e个领地é‡ç½®äº†æ ‡å¿—' + Bank: + NoAccess: '&c你没有æƒé™ä½¿ç”¨é“¶è¡Œ.' + Name: ' &e银行: &6%1' + NoMoney: '&c你的银行存款ä¸è¶³.' + Deposit: '&eä½ å‘领地银行存款 &6%1 &eå…ƒ.' + Withdraw: '&e你从领地银行中å–出 &6%1 &eå…ƒ.' + rentedWithdraw: '&cä¸èƒ½ä»Žç§Ÿå€Ÿçš„领地å–é’±.' + full: '&e领地银行已满!' + Subzone: + Rename: '&e领地å­åŒºåŸŸ &6%1 &e已被é‡å‘½å为 &6%2' + Remove: '&e已删除领地å­åŒºåŸŸ &6%1&e.' + Create: '&eæˆåŠŸåˆ›å»ºé¢†åœ°å­åŒºåŸŸ &6%1&e.' + CreateFail: '&c无法创建领地å­åŒºåŸŸ &6%1&c.' + Exists: '&c领地å­åŒºåŸŸ &6%1 &c已存在.' + Collide: '&c领地å­åŒºåŸŸä¸Ž &6%1 &c冲çª.' + MaxAmount: '&c已达到该å­é¢†åœ°çš„最大数é‡.' + MaxDepth: '&c已达到领地å­åŒºåŸŸå…许的最大分区深度.' + SelectInside: '&e两个选å–点必须都在åŒä¸€ä¸ªé¢†åœ°å†….' + CantCreate: '&c你没有创建领地å­åŒºåŸŸçš„æƒé™.' + CantDelete: '&c你没有删除领地å­åŒºåŸŸçš„æƒé™.' + CantDeleteNotOwnerOfParent: '&cä½ ä¸æ˜¯è¯¥å­åŒºåŸŸæ‰€åœ¨é¢†åœ°çš„所有者, 无法删除å­åŒºåŸŸ.' + CantContract: '&c你没有æƒé™ç¼©å°é¢†åœ°å­åŒºåŸŸ.' + CantExpand: '&c你没有æƒé™æ‰©å¤§é¢†åœ°å­åŒºåŸŸ.' + DeleteConfirm: '&e如果你确定è¦åˆ é™¤å­åŒºåŸŸ &6%1&e, 输入 &6/res confirm &eæ¥ç¡®è®¤æ“作.' + OwnerChange: '&e已将å­åŒºåŸŸ &6%1 &e的所有者更改为 &6%2' + Residence: + DontOwn: '&e没什么å¯æ˜¾ç¤ºçš„' + Hidden: ' &e(&6éšè—&e)' + Bought: '&eæˆåŠŸè´­ä¹°é¢†åœ° &6%1' + Buy: '&6%1 &e购买了你的 &6%2 &e领地.' + BuyTooBig: '&c你无法购买尺寸这么大的领地.' + NotForSale: '&c该领地目å‰å¹¶æœªå‡ºå”®.' + ForSale: '&e领地 &6%1 &e现在正以 &6%2 &e的价格出售.' + StopSelling: '&c该领地已ä¸å†å‡ºå”®.' + TooMany: '&c你拥有的领地数é‡è¾¾åˆ°äº†ä¸Šé™.' + MaxRent: '&c你租用的领地数é‡è¾¾åˆ°äº†ä¸Šé™.' + AlreadyRent: '&c领地已ç»è¢«ç§Ÿç”¨.' + NotForRent: '&c领地没有在出租.' + NotForRentOrSell: '&c领地没有在出售或出租.' + NotRented: '&c领地尚未被租出.' + Unrent: '&e领地 &6%1 &eå·²å–消出租.' + RemoveRentable: '&e领地 &6%1 &eä¸å†å¯å‡ºç§Ÿ.' + ForRentSuccess: '&e领地 &6%1 &eå·²è¢«è®¾ç½®ä¸ºæ¯ &6%3 &e天以 &6%2 &e出租.' + RentSuccess: '&e你租用了 &6%1 &e领地 &6%2 &e天.' + EndingRent: '&e租用时间已ç»è¿‡æœŸ &6%1 &eon &6%2' + AlreadyRented: '&e领地 &6%1 &e已出租给 &6%2' + CantAutoPay: '&e领地ä¸å…许自动支付,已设置为 &6false' + AlreadyExists: '&c已存在å称为 &6%1 &c的领地.' + Create: '&e已创建领地 &6%1&e!' + Rename: '&e领地 &6%1 &e已被é‡å‘½å为 &6%2' + Remove: '&e领地 &6%1 &e已删除.' + CantRemove: '&c领地 &6%1 &c无法被删除,因为 &6%2 &cå­é¢†åœ°æ­£åœ¨è¢«å‡ºç§Ÿç»™çŽ©å®¶ &6%3' + MoveDeny: '&c你没有领地 &6%1 &c的移动æƒé™.' + TeleportNoFlag: '&c你没有该领地的传é€æƒé™.' + FlagDeny: '&c你没有领地 &6%2 &cçš„ &6%1 &cæƒé™.' + GiveLimits: '&c目标玩家超出é™åˆ¶, 无法给予领地.' + Give: '&e你将领地 &6%1 &eé€ç»™äº† &6%2' + Recieve: '&e你收到了 &6%2 &eé€ç»™ä½ çš„ &6%1 &e领地.' + ResList: ' &a%1. &e%2 &e- &6%3 %4&6%5' + List: ' &a%1%2 &e- &6世界&e: &6%3' + TeleportNear: '&e已传é€åˆ°é™„近的领地.' + SetTeleportLocation: '&e设置传é€ä½ç½®.' + PermissionsApply: '&e领地æƒé™å·²è®¾ç½®.' + NotOwner: '&cä½ ä¸æ˜¯è¯¥é¢†åœ°çš„所有者.' + RemovePlayersResidences: '&e移除所有属于 &6%1 &e的领地.' + NotIn: '&c你此时ä¸åœ¨é¢†åœ°å†….' + PlayerNotIn: '&c玩家ä¸åœ¨é¢†åœ°åŒºåŸŸå†…..' + Kicked: '&e你被从领地中请出.' + In: '&eä½ ç›®å‰ç«™åœ¨é¢†åœ° &6%1 &e中.' + OwnerChange: '&e已将领地 &6%1 &e的所有者更改为 &6%2' + NonAdmin: '&c你没有领地的管ç†å‘˜æƒé™.' + Line: '&e领地: &6%1 ' + RentedBy: '&e租用者: &6%1' + MessageChange: '&e消æ¯æ–‡æœ¬å·²è®¾ç½®.' + CantDeleteResidence: '&c你没有删除此领地的æƒé™.' + CantExpandResidence: '&c你没有扩大此领地的æƒé™.' + CantContractResidence: '&c你没有缩å°æ­¤é¢†åœ°çš„æƒé™.' + NoResHere: '&c那个ä½ç½®æ²¡æœ‰é¢†åœ°å­˜åœ¨.' + OwnerNoPermission: '&c领地所有者没有执行这个æ“作的æƒé™.' + ParentNoPermission: '&c你没有æƒé™è®¾ç½®çˆ¶åŒºåŸŸ.' + ChatDisabled: '&e领地内èŠå¤©å·²ç¦ç”¨.' + DeleteConfirm: '&e如果你确定è¦åˆ é™¤é¢†åœ° &6%1&e, 输入 &6/res confirm &e以确认æ“作.' + ChangedMain: '&e已将主领地修改为 &6%1' + LwcRemoved: '&e已删除 &6%1 &eçš„LWCä¿æŠ¤ï¼Œè€—æ—¶ &6%2ms' + CanBeRented: '&6%1&e å¯ä»¥å‡ºç§Ÿç»™ &6%2 &eæ¯ &6%3 &e天. &6/res market rent' + CanBeBought: '&6%1&e å¯ä»¥å‡ºå”®ç»™ &6%2&e. &6/res market buy' + IsForRent: '&6(出租)' + IsForSale: '&6(出售)' + IsRented: '&6(已出租)' + GiveConfirm: '&7点击确认将领地 &6%1 &7从&6%2&7转移到&6%3' + TrustedResList: ' &a%1. &f%2 &e- &6%3 %4&6%5' + Near: '&e附近的领地: &7%1' + CantKick: '&eä¸èƒ½è¸¢å‡ºè¿™ä¸ªçŽ©å®¶' + Rent: + Disabled: '&c领地出租已ç¦ç”¨.' + DisableRenew: '&e领地 &6%1 &eä¸ä¼šåœ¨ç§Ÿçº¦åˆ°æœŸæ—¶è‡ªåŠ¨ç»­æœŸ.' + EnableRenew: '&e领地 &6%1 &e将会在租约到期时自动续期.' + NotByYou: '&c领地没有出租给你.' + isForRent: '&2这个领地å¯ä»¥è¢«ç§Ÿç”¨' + MaxRentDays: '&c你无法一次租用超过 &6%1 &c天' + OneTime: '&cä½ ç›®å‰æ— æ³•ç»­è´¹ç§Ÿç”¨æ—¶é•¿' + Extended: '&e租用时长增加了 &6%1 &e天给领地 &6%2' + Expire: '&e租约到期时间: &6%1' + AutoPayTurnedOn: '&e自动支付设置为&2å¼€å¯' + AutoPayTurnedOff: '&e自动支付设置为 &c关闭' + ModifyDeny: '&c无法修改租用的领地.' + Days: '&e租用天数: &6%1' + Rented: ' &6(已出租)' + RentList: ' &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7' + EvictConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤ç§Ÿç”¨é¢†åœ° &6%1' + UnrentConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤å–消租用领地 &6%1' + ReleaseConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤ä»Žå¸‚场内删除领地 &6%1' + command: + addedAllow: '&e增加了一个新的å…许的命令给 &6%1 &e领地' + removedAllow: '&e删除了一个å…许的命令给 &6%1 &e领地' + addedBlock: '&e增加了一个新的ç¦ç”¨çš„命令给 &6%1 &e领地' + removedBlock: '&e删除了一个ç¦ç”¨çš„命令给 &6%1 &e领地' + Blocked: '&eç¦ç”¨çš„命令: &6%1' + Allowed: '&eå…许的命令: &6%1' + Parsed: '%1' + PlacehlderList: '&e%1. &6%2' + PlacehlderResult: ' &eresult: &6%1' + Rentable: + Land: '&e出租领地: &6' + AllowRenewing: '&eå¯ä»¥ç»­è´¹: &6%1' + StayInMarket: '&eå¯ä»¥å‡ºç§Ÿ: &6%1' + AllowAutoPay: '&eå¯ä»¥è‡ªåŠ¨æ”¯ä»˜: &6%1' + DisableRenew: '&6%1 &eä¸ä¼šåœ¨åˆ°æœŸæ—¶è‡ªåŠ¨æ›´æ–°ç§Ÿç”¨çŠ¶æ€.' + EnableRenew: '&6%1 &e将会在到期时自动更新租用状æ€.' + Economy: + LandForSale: '&e出售领地:' + NotEnoughMoney: '&c你没有足够的金钱.' + MoneyCharged: '&e已从你的 &6%2 &e账户中支出 &6%1 &eå…ƒ.' + MoneyAdded: '&eä½ çš„ &6%2 &e账户增加了 &6%1 &eå…ƒ.' + MoneyCredit: '&eä½ çš„ &6%2 &e账户收入了 &6%1 &eå…ƒ.' + RentReleaseInvalid: '&e领地 &6%1 &e没有被租用或者出租.' + RentSellFail: '&c无法出售正在出租的领地.' + SubzoneRentSellFail: '&c无法出售领地,因为其中一个å­é¢†åœ°æ­£åœ¨å‡ºç§Ÿ' + ParentRentSellFail: '&c无法出租领地,因为其中的一部分正在出售/出租' + SubzoneSellFail: '&c无法出售一个å­é¢†åœ°' + SellRentFail: '&c无法出租正在出售的领地.' + ParentSellRentFail: '&c由于这个领地的一部分正在被出售,所以无法出租' + OwnerBuyFail: '&cä¸èƒ½è´­ä¹°è‡ªå·±çš„领地!' + OwnerRentFail: '&cä¸èƒ½ç§Ÿç”¨è‡ªå·±çš„领地!' + AlreadySellFail: '&e领地已在出售中!' + LeaseRenew: '&e租约有效期到 &6%1' + LeaseRenewMax: '&eå…许的最大租约续期' + LeaseNotExpire: '&e租约ä¸å­˜åœ¨æˆ–者未过期.' + LeaseRenewalCost: '&e续租 &6%1 &e的花费为 &6%2' + LeaseInfinite: '&e出租时间已设置为无é™.' + MarketDisabled: '&c领地ç»æµŽå·²ç¦ç”¨!' + SellAmount: '&e出售数é‡: &2%1' + SellList: ' &6%1&e. &6%2 &e(&6%3&e) - &6%4' + LeaseExpire: '&e租约到期时间: &2%1' + LeaseList: '&6%1. &e%2 &2%3 &e%4' + Expanding: + North: '&eå‘北方扩展 &6%1 &e个方å—' + West: '&eå‘西方扩展 &6%1 &e个方å—' + South: '&eå‘å—方扩展 &6%1 &e个方å—' + East: '&eå‘东方扩展 &6%1 &e个方å—' + Up: '&eå‘上方扩展 &6%1 &e个方å—' + Down: '&eå‘下方扩展 &6%1 &e个方å—' + Contracting: + North: '&eåœ¨åŒ—æ–¹ç¼©å° &6%1 &e个方å—' + West: '&eåœ¨è¥¿æ–¹ç¼©å° &6%1 &e个方å—' + South: '&e在å—æ–¹ç¼©å° &6%1 &e个方å—' + East: '&eåœ¨ä¸œæ–¹ç¼©å° &6%1 &e个方å—' + Up: '&eåœ¨ä¸Šæ–¹ç¼©å° &6%1 &e个方å—' + Down: '&eåœ¨ä¸‹æ–¹ç¼©å° &6%1 &e个方å—' + Shifting: + North: '&eå‘北方平移 &6%1 &e个方å—' + West: '&eå‘西方平移 &6%1 &e个方å—' + South: '&eå‘å—方平移 &6%1 &e个方å—' + East: '&eå‘东方平移 &6%1 &e个方å—' + Up: '&eå‘上方平移 &6%1 &e个方å—' + Down: '&eå‘下方平移 &6%1 &e个方å—' + Limits: + PGroup: '&7- &eæƒé™ç»„:&3 %1' + RGroup: '&7- &e领地组:&3 %1' + Admin: '&7- &e领地管ç†å‘˜:&3 %1' + CanCreate: '&7- &eå…许创建领地:&3 %1' + MaxRes: '&7- &e最大领地数é‡:&3 %1' + MaxEW: '&7- &e东西方å‘最大:&3 %1' + MaxNS: '&7- &eå—北方å‘最大:&3 %1' + MaxUD: '&7- &e上下方å‘最大:&3 %1' + MinMax: '&7- &e最å°/最大高度:&3 %1 到 %2' + MaxSubzones: '&7- &e最大å­é¢†åœ°æ•°é‡:&3 %1' + MaxSubDepth: '&7- &e最大å­é¢†åœ°æ·±åº¦:&3 %1' + MaxRents: '&7- &e最多租用:&3 %1' + MaxRentDays: ' &e最大出租天数:&3 %1' + EnterLeave: '&7- &eå¯è®¾ç½®åŠ å…¥ç¦»å¼€ä¿¡æ¯:&3 %1' + NumberOwn: '&7- &e拥有的领地数é‡:&3 %1' + Cost: '&7- &e领地æ¯æ–¹å—花费:&3 %1' + Sell: '&7- &e领地出售æ¯æ–¹å—花费:&3 %1' + Flag: '&7- &eå…许的领地æƒé™:&3 %1' + MaxDays: '&7- &e最大租约时间:&3 %1' + LeaseTime: '&7- &e租约续期时间:&3 %1' + RenewCost: '&7- &e续租æ¯æ–¹å—花费:&3 %1' + Gui: + Set: + Title: '&l%1 æƒé™' + Pset: + Title: '&l%1 %2 æƒé™' + Actions: + - '&2左键å•å‡»å¯ç”¨' + - '&cå³é”®å•å‡»ç¦ç”¨' + - '&eShift+左键å•å‡»åˆ é™¤' + InformationPage: + TopLine: '&e---< &a %1 &e >---' + Page: '&e-----< &6%1 &e>-----' + NextPage: '&e-----< &6%1 &e>-----' + NoNextPage: '&e-----------------------' + GeneralList: '&2 %1 &6- &e%2' + FlagsList: '&2 %1 &6- &e%2' + SmallSeparator: '&6------' + Top: '&e___/ &a %1 - %2 &e \___' + TopSingle: '&e___/ &a %1 &e \___' + NextPage2: '&e-----< &6%1 &e>-----' + Chat: + ChatChannelChange: '&e领地èŠå¤©é¢‘é“已更改为 &6%1!' + ChatChannelLeave: '&e离开领地èŠå¤©' + JoinFirst: '&4请先加入领地èŠå¤©é¢‘é“.' + InvalidChannel: '&4无效频é“.' + InvalidColor: '&4颜色代ç é”™è¯¯' + NotInChannel: '&4玩家ä¸åœ¨é¢‘é“中' + Kicked: '&6%1 &e被 &6%2 &e频é“踢出' + InvalidPrefixLength: '&4å‰ç¼€è¿‡é•¿. 最大长度: %1' + ChangedColor: '&e领地频é“颜色更改为 %1' + ChangedPrefix: '&e领地频é“å‰ç¼€æ›´æ”¹ä¸º %1' + ChatMessage: '%1 %2%3: %4%5' + ChatListeningMessage: '&2[ç›‘å¬ %6]%1 %2%3: %4%5' + Shop: + ListTopLine: '&6%1 &e商店列表 - 第 &6%2 &e页, å…± &6%3 %4' + List: ' &e%1. &6%2 &e(&6%3&e) %4' + ListVoted: '&e%1 (&6%2&e)' + ListLiked: '&e赞: &0%1' + VotesTopLine: '&6%1 &e%2 评分列表 &6- &e第 &6%3 &e页, å…± &6%4 %5' + VotesList: ' &e%1. &6%2 &e%3 &7%4' + NoDesc: '&6没有æè¿°' + Desc: |- + &6æè¿°: + %1 + DescChange: '&6æ述已更改为: %1' + NewBoard: '&6æˆåŠŸæ·»åŠ å•†åº—宣传æ¿' + BoardExist: '&c商店宣传æ¿å·²ç»å­˜åœ¨' + DeleteBoard: '&6å³å‡»è¦åˆ é™¤çš„宣传æ¿' + DeletedBoard: '&6宣传æ¿å·²ç§»é™¤' + IncorrectBoard: '&c宣传æ¿ä¸æ­£ç¡®, 请é‡æ–°ç‚¹å‡»æ­£ç¡®çš„宣传æ¿' + InvalidSelection: '&c使用选å–工具, 先点击左上角的告示牌, å†ç‚¹å‡»å³ä¸‹è§’的告示牌' + ToBigSelection: '&c你选择的范围太大了,最大å…许16æ ¼' + ToDeapSelection: '&c你选择的太深了,最大å…许16X1X16' + VoteChanged: '&6领地 &e%3 &6的评分由 &e%1 &6更改为 &e%2&6.' + Voted: '&6ä½ ç»™ &e%2 &6评了 &e%1 &6分.' + Liked: '&6你赞了 &e%1 &6领地.' + AlreadyLiked: '&6ä½ å·²ç»èµžè¿‡ &e%1 &6领地了.' + NoVotes: '&c该领地还没有评分.' + CantVote: '&c该领地ä¸æ˜¯å•†åº—.' + VotedRange: '&6åªèƒ½ç»™å‡º &e%1 &6分到 &e%2 &6分.' + SignLines: + '1': '&e--== &8%1 &e==--' + '2': '&9%1' + '3': '&4%1' + '4': '&8%1&e (&8%2&e)' + Likes4: '&9赞: &8%2' + ChantChange: '&4Can''t change while shop flag is set to true' + RandomTeleport: + TpLimit: '&e请等待 &6%1 &e秒åŽå†ä¼ é€' + TeleportSuccess: '&eä¼ é€åˆ° X:&6%1&e, Y:&6%2&e, Z:&6%3 &eä½ç½®' + IncorrectLocation: '&6无法找到正确的传é€ä½ç½®, 请等待 &e%1 &6秒åŽé‡è¯•.' + Disabled: '&c此世界的éšæœºä¼ é€å·²å…³é—­' + TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%4 &e秒内ä¸è¦ç§»åŠ¨.' + WorldList: '&eå¯ç”¨ä¸–ç•Œ: &6%1' + General: + DisabledWorld: '&c该世界已ç¦ç”¨é¢†åœ°.' + UseNumbers: '&c请输入数字.' + # Replace all text with '' to disable this message + CantPlaceLava: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置岩浆.' + # Replace all text with '' to disable this message + CantPlaceWater: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置水.' + NoPermission: '&c你没有执行此æ“作的æƒé™.' + NoCmdPermission: '&c你没有æƒé™è¿™ä¹ˆåš' + DefaultUsage: '&e输入 &6/%1 ? &e查看帮助信æ¯' + MaterialGet: '&eID &6%1 &eçš„ææ–™å称为 &6%2' + MarketList: '&e---- &6市场列表 &e----' + Separator: '&e------------------------------------------------' + AdminOnly: '&cåªæœ‰ç®¡ç†å‘˜æ‰èƒ½æ‰§è¡Œè¿™ä¸ªå‘½ä»¤.' + InfoTool: '&e- ä¿¡æ¯å·¥å…·: &6%1' + ListMaterialAdd: '&6%1 &e已被添加到 &6%2 &e领地.' + ListMaterialRemove: '&6%1 &e已从 &6%2 &e领地移除.' + ItemBlacklisted: '&c此处ç¦æ­¢ä½¿ç”¨è¯¥ç‰©å“.' + WorldPVPDisabled: '&c世界 PVP å·²ç¦ç”¨.' + NoPVPZone: '&céž PVP 区域.' + InvalidHelp: '&c无效帮助页ç .' + TeleportDeny: '&c你没有传é€çš„æƒé™.' + TeleportSuccess: '&e已传é€!' + TeleportConfirm: '&cä¼ é€ä¸å®‰å…¨, ä½ å°†æ‘”è½ &6%1 &c个方å—. 如果ä»è¦ä¼ é€, 输入 &6/res tpconfirm &c确认.' + TeleportStarted: '&eå¼€å§‹å‘ &6%1 &eä¼ é€, 在 &6%2 &e秒内ä¸è¦ç§»åŠ¨.' + TeleportTitle: '&eä¼ é€ä¸­..' + TeleportTitleTime: '&6%1' + TeleportCanceled: '&eä¼ é€è¢«å–消!' + NoTeleportConfirm: '&e没有需è¦ç¡®è®¤çš„ä¼ é€è¯·æ±‚!' + HelpPageHeader: '&e领地帮助 - &6%1 &e- é¡µé¢ <&6%2 &e/ &6%3&e>' + ListExists: '&c列表已存在.' + ListRemoved: '&e已删除列表.' + ListCreate: '&e已创建列表 &6%1' + PhysicalAreas: '&e物ç†åŒºåŸŸ' + CurrentArea: '&e当å‰åŒºåŸŸ: &6%1' + TotalResSize: '&e总大å°: &6%1m³ (%2m²)' + TotalWorth: '&e总价值: &6%1 &e(&6%2&e)' + TotalSubzones: '&eå­é¢†åœ°æ•°é‡: &6%1 &e(&6%2&e)' + NotOnline: '&e目标玩家ä¸åœ¨çº¿.' + NextInfoPage: '&2| &e下一页 &2>>>' + PrevInfoPage: '&2<<< &e上一页 &2|' + GenericPages: '&e页数 &6%1 &e/ &6%2 &e(&6%3&e)' + WorldEditNotFound: '&c未检测到 WorldEdit.' + CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + AdminToggleTurnOn: '&e自动管ç†æ¨¡å¼&6å¼€å¯' + AdminToggleTurnOff: '&e自动管ç†æ¨¡å¼&6关闭' + NoSpawn: '&e你没有在出生点的 &6移动 &eæƒé™, 正在é‡æ–°å®šä½.' + CompassTargetReset: '&e你的指å—针已被还原' + CompassTargetSet: '&e你的指å—针目å‰æŒ‡å‘ &6%1' + Ignorelist: '&2忽略åå•:&6' + Blacklist: '&c黑åå•:&6' + LandCost: '&e领地花费: &6%1' + 'True': '&2是' + 'False': '&cå¦' + Removed: '&6未设置' + FlagState: '&eæƒé™çŠ¶æ€: %1' + Land: '&e领地: &6%1' + Cost: '&e花费: æ¯ &6%2 &e天 &6%1' + Status: '&e状æ€: %1' + Available: '&2å¯ç”¨' + Size: ' &e大å°: &6%1' + ResidenceFlags: '&e领地公共æƒé™: &6%1' + PlayersFlags: '&e玩家æƒé™: &6%1' + GroupFlags: '&e组æƒé™: &6%1' + OthersFlags: '&e其他人æƒé™: &6%1' + Moved: '&e已移动.' + Name: '&eå称: &6%1' + Lists: '&e列表: &6' + Residences: '&e领地&6' + CreatedOn: '&e建造于: &6%1' + Owner: '&e所有者: &6%1' + World: '&e世界: &6%1' + Subzones: '&eå­åŒºåŸŸ' + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. + NewPlayerInfo: '&e如果è¦åˆ›å»ºé¢†åœ°ä»¥ä¿æŠ¤æˆ¿å±‹, 请用木锄选å–ä¿æŠ¤åŒºçš„两个对角, 然åŽæ‰§è¡Œ &2/res create 领地å称 &e命令.' + CantPlaceChest: '&cä½ ä¸èƒ½åœ¨è¿™æ”¾ç½®ç®±å­' + info: + NoPlayerPermission: '&c[playerName] 没有 [permission] æƒé™' + NoFriendlyFire: '&c没有å‹ä¼¤' + TeleportConfirmLava: '&c这个传é€ç‚¹ä¸å®‰å…¨ï¼Œä½ å°†ä¼šæŽ‰åˆ°&6岩浆&c里. + 输入&6/res tpconfirm &cæ¥ç¡®è®¤ä¼ é€' + TeleportConfirmVoid: '&c这个传é€ç‚¹ä¸å®‰å…¨ï¼Œä½ å°†ä¼šæŽ‰åˆ°&6虚空&c里. + 输入&6/res tpconfirm &cæ¥ç¡®è®¤ä¼ é€' + HelpPageHeader2: '&eå¸®åŠ©é¡µé¢ - &6页é¢%1 &e- <&6%3é¢ä¸­çš„第&6%2é¢&e>' + ResSize: + eastWest: '&e东/西: &6%1' + northSouth: '&e北/å—: &6%1' + upDown: '&e上/下: &6%1' + CoordsLiner: '&7 (&3%1&7;%2&7)' + AllowedTeleportIcon: '&2ä¼ é€' + BlockedTeleportIcon: '&7ä¼ é€' + AllowedMovementIcon: '&2移动' + BlockedMovementIcon: '&7移动' + Raid: + NotEnabled: '&c袭击特性未开å¯!' + NotIn: '&cä½ ä¸åœ¨ä¸€åœºè¢­å‡»ä¸­!' + CantLeave: '&cä½ ä¸èƒ½ç¦»å¼€ (%1) 你自己领地的袭击!' + CantKick: '&cä¸èƒ½è¸¢å‡º (%1) 领地主人!' + Kicked: '&eå°† &7%1 &e从 &7%2 &e领地的袭击中踢出!' + StartsIn: '&7袭击将在以下时间åŽå¼€å§‹: [autoTimeLeft] &2%1D &4%2A' + EndsIn: '&c袭击将在以下时间åŽç»“æŸ: [autoTimeLeft] &2%1D &4%2A' + Ended: '&7针对 &4%1 &7å‘动的袭击已结æŸ!' + cantDo: '&c袭击中ä¸èƒ½å¹²è¿™ä¸ªäº‹!' + left: '&7你离开了 &4%1 &7的袭击' + noFlagChange: '&c袭击中ä¸èƒ½æ›´æ”¹æ ‡å¿—' + noRemoval: '&c袭击中ä¸èƒ½ç§»é™¤é¢†åœ°' + immune: '&e对接下æ¥çš„ %1 场袭击å…ç–«' + notImmune: '&eä¸å†å…疫袭击' + notInRaid: '&e玩家ä¸åœ¨è¢­å‡»ä¸­' + attack: + Joined: '&7加入了 &2%1 &7的袭击!' + Started: '&7袭击开始!' + cooldown: '&c对这个领地å‘起下一场袭击还太早了! 请等待 %1' + immune: '&c此领地ä¸èƒ½è¢«è¢­å‡»! 请等待 %1' + playerImmune: '&c领地的主人å…疫袭击! 请等待 %1' + isOffline: '&c领地主人ä¸åœ¨çš„时候ä¸èƒ½å‘动袭击!' + noSubzones: '&cä¸èƒ½å¯¹å­é¢†åœ°å‘动袭击!' + noSelf: '&c大水冲了龙王庙å‘您嘞!' + alreadyInAnother: '&cä¸èƒ½åŠ å…¥è¿™åœºè¢­å‡»ï¼Œä½ å·²ç»å¤„于一场袭击中了 (%1)' + defend: + Joined: '&7加入了 &2%1 &7çš„ä¿å«æ–¹!' + Sent: '&7å·²å‘é€ä¿å«è¯·æ±‚, 请等待åŒæ„' + Join: '&7加入了 &6%1 &7çš„ä¿å«æ–¹' + Invitation: '&7接å—了 &6%1 &7çš„ä¿å«è¯·æ±‚' + JoinedDef: '&2%1&7 加入了ä¿å«æ–¹!' + IsOffline: '&c领地主人ä¸åœ¨çº¿æ—¶ä¸èƒ½åŠ å…¥!' + noSelf: '&cä½ å·²ç»åŠ å…¥è¿™ä¸ªé¢†åœ°çš„ä¿å«æ–¹äº†' + notRaided: '&c这个领地没有被袭击' + alreadyInAnother: '&cä¸èƒ½åŠ å…¥è¢­å‡»ä¿å«ï¼Œä½ å·²ç»åœ¨ä¿å«ä¸€ä¸ªé¢†åœ°äº† (%1)' + status: + title: '&7----------- &f%1(%2) &7-----------' + immune: '&e对接下æ¥çš„%1场袭击å…ç–«' + starts: '&7袭击将在%1åŽå¼€å§‹' + attackers: '&7攻击者: &4%1' + defenders: '&7ä¿å«è€…: &4%1' + ends: '&7袭击将在%1åŽç»“æŸ' + canraid: '&2å¯ä»¥è¢«è¢­å‡»' + raidin: '&e下一场袭击å¯èƒ½åœ¨%1åŽå¼€å§‹' + stopped: '&e对 &6%1 &e的袭击已åœæ­¢' + info: + years: '&e%1 &6å¹´ ' + oneYear: '&e%1 &6å¹´ ' + day: '&e%1 &6天 ' + oneDay: '&e%1 &6天 ' + hour: '&e%1 &6å°æ—¶ ' + oneHour: '&e%1 &6å°æ—¶ ' + min: '&e%1 &6分钟 ' + sec: '&e%1 &6秒 ' + listSplitter: ', ' + click: '&7点击' + clickToConfirm: '&7点击确定' + server: + land: Server_Land + Permissions: + variableColor: '&f' + permissionColor: '&6' + cmdPermissionColor: '&2' +CommandHelp: + Description: 领地的命令帮助 + SubCommands: + res: + Description: 领地的主命令 + Info: + - '&2输入 &6/res [命令] ? <页ç > &2查看更多信æ¯.' + SubCommands: + auto: + Description: 自动在你站ç€çš„ä½ç½®ä¸ºä¸­å¿ƒï¼Œåˆ›å»ºä½ èƒ½åˆ›å»ºæœ€å¤§çš„领地 + Info: + - '&e用法: &6/res auto (领地åå­—) (范围)' + select: + Description: 选å–命令 + Info: + - 该命令选择领地的范围 + - /res select [x] [y] [z] - 选择以你为中心一定范围的方å—. + SubCommands: + coords: + Description: 显示已选择区域的åæ ‡ + Info: + - '&e用法: &6/res select coords' + size: + Description: æ˜¾ç¤ºå·²é€‰æ‹©åŒºåŸŸçš„å¤§å° + Info: + - '&e用法: &6/res select size' + auto: + Description: 打开自动选择工具 + Info: + - '&e用法: &6/res select auto [玩家]' + cost: + Description: 显示已选择区域的价格 + Info: + - '&e用法: &6/res select cost' + vert: + Description: 纵å‘扩展选区 + Info: + - '&e用法: &6/res select vert' + - 将选区扩展到地图顶端和底端 + sky: + Description: 扩展选区到天空 + Info: + - '&e用法: &6/res select sky' + - 将选区扩展到地图顶端 + bedrock: + Description: 扩展选区到基岩 + Info: + - '&e用法: &6/res select bedrock' + - 将选区扩展到地图底端 + expand: + Description: å‘一个方å‘扩展选区 + Info: + - '&e用法: &6/res select expand <扩展å•ä½>' + - å‘é¢å¯¹çš„æ–¹å‘扩展 <扩展å•ä½> ä¸ªæ–¹å— + shift: + Description: å‘一个方å‘平移选区 + Info: + - '&e用法: &6/res select shift <平移å•ä½>' + - 将选区å‘é¢å¯¹çš„æ–¹å‘平移 <平移å•ä½> ä¸ªæ–¹å— + chunk: + Description: 选择你目å‰æ‰€åœ¨çš„åŒºå— + Info: + - '&e用法: &6/res select chunk' + - 选择你目å‰æ‰€åœ¨çš„åŒºå— + residence: + Description: 选择领地中一个存在的区域 + Info: + - '&e用法: &6/res select residence <领地>' + - 选择 <领地> 中一个存在的区域 + worldedit: + Description: 采用 WorldEdit 的选区 + Info: + - '&e用法: &6/res select worldedit' + - å°† WorldEdit ç›®å‰çš„选区作为领地选区 + padd: + Description: å‘领地添加玩家 + Info: + - '&e用法: &6/res padd <领地å> [玩家]' + - 为玩家添加基本æƒé™ + signconvert: + Description: å°† ResidenceSign 的告示牌转æ¢ä¸ºæ–°æ ¼å¼ + Info: + - '&e用法: &6/res signconvert' + - å°è¯•è½¬æ¢å·²æœ‰çš„ ResidenceSign 告示牌 + listallhidden: + Description: 显示所有éšè—领地 + Info: + - '&e用法: &6/res listhidden <页ç >' + - 显示所有玩家的éšè—领地 + bank: + Description: 管ç†é¢†åœ°é“¶è¡Œ + Info: + - '&e用法: &6/res bank [deposit/withdraw] <领地> [æ•°é¢]' + - 你必须站在领地中或者指定领地åå­— + - 你必须拥有 +bank æƒé™ + create: + Description: 创建领地 + Info: + - '&e用法: &6/res create <领地å>' + listall: + Description: 显示所有领地 + Info: + - '&e用法: &6/res listall <页ç >' + - 显示所有玩家的领地 + info: + Description: æ˜¾ç¤ºä¸€ä¸ªé¢†åœ°çš„ä¿¡æ¯ + Info: + - '&e用法: &6/res info <领地>' + - 留空 <领地> 表示显示你目å‰æ‰€åœ¨çš„é¢†åœ°ä¿¡æ¯ + area: + Description: 管ç†é¢†åœ°ç‰©ç†åŒºåŸŸ + SubCommands: + list: + Description: 列出领地的物ç†åŒºåŸŸ + Info: + - '&e用法: &6/res area list [领地] <页ç >' + listall: + Description: 列出所有区域的åæ ‡å’Œè¯¦ç»†ä¿¡æ¯ + Info: + - '&e用法: &6/res area listall [领地] <页ç >' + add: + Description: 为领地添加物ç†åŒºåŸŸ + Info: + - '&e用法: &6/res area add [领地] [区域ID]' + - 你必须先选中两个选å–点 + remove: + Description: 移除领地的物ç†åŒºåŸŸ + Info: + - '&e用法: &6/res area remove [领地] [区域ID]' + replace: + Description: 替æ¢é¢†åœ°çš„物ç†åŒºåŸŸ + Info: + - '&e用法: &6/res area replace [领地] [区域ID]' + - 你必须先选中两个选å–点 + - 如果新的区域更大, 二者之间将会被充满 + Info: + - '' + give: + Description: 给予一å玩家领地. + Info: + - '&e用法: &6/res give <领地å> [玩家]' + - 将你拥有的æŸä¸ªé¢†åœ°èµ ä¸ŽæŸçŽ©å®¶ + renamearea: + Description: 修改领地åå­— + Info: + - '&e用法: &6/res removeworld [领地] [æ—§åå­—] [æ–°åå­—]' + contract: + Description: 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ° + Info: + - '&e用法: &6/res contract (领地) [缩å°å•ä½]' + - 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ°è§„模 + - 领地å字是å¯é€‰çš„ + check: + Description: 检查æƒé™çŠ¶æ€ + Info: + - '&e用法: &6/res check [领地] [æƒé™] (玩家åå­—)' + gset: + Description: 为æŸä¸ªç»„设置领地的特定æƒé™ + Info: + - '&e用法: &6/res gset <领地> [组] [æƒé™] [true/false/remove]' + - 输入 /res flags ? 查看æƒé™åˆ—表 + list: + Description: 显示领地列表 + Info: + - '&e用法: &6/res list <玩家> <页ç >' + - 列出指定玩家拥有的所有领地 (除了éšè—领地) + - 如果显示自己的领地, éšè—领地也会被显示 + - è¦åˆ—出所有玩家的领地, 使用 /res listall 命令 + version: + Description: 显示 领地 的版本 + Info: + - '&e用法: &6/res version' + tool: + Description: 显示领地圈地和查看信æ¯çš„工具类型 + Info: + - '&e用法: &6/res tool' + pdel: + Description: 从领地删除玩家 + Info: + - '&e用法: &6/res pdel <领地å> [玩家]' + - 删除玩家的基本æƒé™ + market: + Description: è´­ä¹°, 出售和出租领地 + Info: + - '&e用法: &6/res market ? for more Info' + SubCommands: + Info: + Description: 查看领地的ç»æµŽä¿¡æ¯ + Info: + - '&e用法: &6/res market Info [领地]' + - 显示领地是å¦æ­£åœ¨å‡ºç§Ÿæˆ–出售, 以åŠé¢†åœ°çš„花费 + list: + Description: 显示å¯å‡ºç§Ÿä¸Žå¯å‡ºå”®çš„领地 + Info: + - '&e用法: &6/res market list' + SubCommands: + rent: + Description: 列举å¯ä»¥ç§Ÿç”¨çš„领地 + Info: + - '&e用法: &6/res market list rent' + sell: + Description: 列举å¯ä»¥å‡ºå”®çš„领地 + Info: + - '&e用法: &6/res market list sell' + sell: + Description: 出售一个领地 + Info: + - '&e用法: &6/res market sell [领地] [售价]' + - 将领地以 [amount] 元的价格出售 + - 其他玩家å¯ä»¥æ‰§è¡Œ /res market buy 命令购买 + sign: + Description: 设置市场木牌 + Info: + - '&e用法: &6/res market sign [领地]' + - 将看å‘的木牌设置为领地市场木牌 + buy: + Description: 购买一个领地 + Info: + - '&e用法: &6/res market buy [领地]' + - 如果该领地正在出售, 则购买这个领地 + unsell: + Description: å–消出售领地 + Info: + - '&e用法: &6/res market unsell [领地]' + rent: + Description: 租用一个领地 + Info: + - '&e用法: &6/res market rent [领地] <自动续租>' + - 租用一个领地. <自动续租> å¯ä»¥æ˜¯ true 或 false. 如果是 true, 并且领地所有者å…许, 领地将会在租约到期之å‰è‡ªåŠ¨ç»­ç§Ÿ + rentable: + Description: 将领地设置为å¯å‡ºç§Ÿ + Info: + - '&e用法: &6/res market rentable [领地] [ä»·æ ¼] [天数] <周期>' + - 以 [ä»·æ ¼] 出租领地 [天数] 天. 如果 <周期> 为 true, 领地将会在租约结æŸåŽè‡ªåŠ¨å‡ºç§Ÿ. + autopay: + Description: 开关领地自动支付 + Info: + - '&e用法: &6/res market autopay <领地> [true/false]' + payrent: + Description: 支付租用的领地 + Info: + - '&e用法: &6/res market payrent <领地>' + confirm: + Description: 领地市场的确认æ“作 + Info: + - '&e用法: &6/res market confirm' + unrent: + Description: 将领地从å¯ç§Ÿç”¨åˆ‡æ¢ä¸ºä¸å¯ç§Ÿç”¨. + Info: + - '&e用法: &6/res market unrent [领地]' + - 如果你是租借方, 这个命令会释放你租用的区域. + - 如果你是领地拥有者,这个命令会让你的领地ä¸å¯å†è¢«ç§Ÿç”¨. + rc: + Description: 加入当å‰æˆ–者指定的领地èŠå¤©é¢‘é“ + Info: + - '&e用法: &6/res rc (领地)' + - 加入当å‰é¢†åœ°æˆ–者指定领地的èŠå¤©é¢‘é“ + SubCommands: + leave: + Description: 离开当å‰é¢‘é“ + Info: + - '&e用法: &6/res rc leave' + - 如果你在一个领地频é“内, ä½ å°†ä¼šç¦»å¼€æ­¤é¢‘é“ + setcolor: + Description: 设置领地频é“文字颜色 + Info: + - '&e用法: &6/res rc setcolor [颜色代ç ]' + - 设置领地频é“文字颜色 + setprefix: + Description: 设置领地频é“å‰ç¼€ + Info: + - '&e用法: &6/res rc setprefix [æ–°å‰ç¼€]' + - 设置领地频é“å‰ç¼€ + kick: + Description: 从频é“中踢出玩家 + Info: + - '&e用法: &6/res rc kick [玩家]' + - 从领地频é“中踢出æŸçŽ©å®¶ + expand: + Description: å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地 + Info: + - '&e用法: &6/res expand (领地) [扩展å•ä½]' + - å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地规模 + - 领地å字是å¯é€‰çš„ + compass: + Description: 设置指å—者指å‘领地 + Info: + - '&e用法: &6/res compass <领地åå­—>' + lists: + Description: 预定义æƒé™åˆ—表 + Info: + - 预定义的æƒé™åˆ—表å¯ä»¥åº”用到领地上 + SubCommands: + add: + Description: 添加一个列表 + Info: + - '&e用法: &6/res lists add <列表å>' + remove: + Description: 删除一个列表 + Info: + - '&e用法: &6/res lists remove <列表å>' + apply: + Description: 将列表应用于领地 + Info: + - '&e用法: &6/res lists apply <列表å> <领地>' + set: + Description: 设置列表全局æƒé™ + Info: + - '&e用法: &6/res lists set <列表å> <æƒé™> <值>' + pset: + Description: 设置列表玩家æƒé™ + Info: + - '&e用法: &6/res lists pset <列表å> <玩家> <æƒé™> <值>' + gset: + Description: 设置列表组æƒé™ + Info: + - '&e用法: &6/res lists view <列表å>' + view: + Description: 查看列表 + Info: + - '&e用法: &6/res lists view <列表å>' + reset: + Description: 将领地设置还原为默认值 + Info: + - '&e用法: &6/res reset <领地>' + - 将领地的所有æƒé™é‡ç½®. 你必须是领地所有者或者管ç†å‘˜ + listhidden: + Description: 显示éšè—领地列表 + Info: + - '&e用法: &6/res listhidden <玩家> <页ç >' + - 列出指定玩家拥有的éšè—领地 + setmain: + Description: 设置主领地 + Info: + - '&e用法: &6/res setmain (领地åå­—)' + server: + Description: 创建æœåŠ¡å™¨é¢†åœ° + Info: + - '&e用法: &6/resadmin server [领地]' + - 创建一个属于æœåŠ¡å™¨æ‰€æœ‰çš„领地 + rt: + Description: ä¼ é€åˆ°ä¸–界上的éšæœºä½ç½® + Info: + - '&e用法: &6/res rt' + - 将你传é€åˆ°ä¸–界上的éšæœºä½ç½® + mirror: + Description: é•œåƒæƒé™ + Info: + - '&e查看 &6/res market ? 获å–帮助' + shop: + Description: 管ç†é¢†åœ°å•†åº— + Info: + - 管ç†é¢†åœ°çš„商店功能 + SubCommands: + list: + Description: 显示领地商店列表 + Info: + - '&e用法: &6/res shop list' + - 显示所有作为商店的领地 + vote: + Description: 为领地商店评分 + Info: + - '&e用法: &6/res shop vote <领地> [分数]' + - 为当å‰æˆ–指定领地商店评分 + like: + Description: 为领地商店点赞 + Info: + - '&e用法: &6/res shop like <领地>' + - 为领地商店点一个赞 + votes: + Description: 显示领地商店评分 + Info: + - '&e用法: &6/res shop votes <领地> <页ç >' + - 显示当å‰æˆ–指定领地商店的评分列表 + likes: + Description: 显示领地商店的赞 + Info: + - '&e用法: &6/res shop likes <领地> <页ç >' + - 显示当å‰æˆ–指定领地商店的赞列表 + setdesc: + Description: 设置领地商店æè¿° + Info: + - '&e用法: &6/res shop setdesc [æ述文字]' + - 设置领地商店æè¿°, 支æŒé¢œè‰²ä»£ç , 用 /n 表示æ¢è¡Œ + createboard: + Description: åˆ›å»ºå•†åº—å®£ä¼ æ¿ + Info: + - '&e用法: &6/res shop createboard [ä½ç½®]' + - 在选区ä½ç½®å»ºç«‹å•†åº—宣传æ¿. [ä½ç½®] 表示宣传æ¿çš„起始ä½ç½® + deleteboard: + Description: åˆ é™¤å•†åº—å®£ä¼ æ¿ + Info: + - '&e用法: &6/res shop deleteboard' + - å³å‡»å®£ä¼ æ¿çš„å‘Šç¤ºç‰Œä»¥åˆ é™¤å®£ä¼ æ¿ + lset: + Description: 更改黑åå•å’Œå¿½ç•¥åå•é€‰é¡¹ + Info: + - '&e用法: &6/res lset <领地> [blacklist/ignorelist] [ææ–™]' + - '&e用法: &6/res lset <领地> Info' + - å°†æŸç‰©å“加入黑åå•ä»¥é˜»æ­¢è¿™ç§ç‰©å“被放置在领地中 + - 忽略åå•ä¸­çš„物å“å°†ä¸ä¼šè¢«é¢†åœ°ä¿æŠ¤ + pset: + Description: 为æŸçŽ©å®¶è®¾å®šè¯¥é¢†åœ°çš„特定æƒé™ + Info: + - '&e用法: &6/res pset <领地> [玩家] [æƒé™] [true/false/remove]' + - '&e用法: &6/res pset <领地> [玩家] removeall' + - 输入 /res flags ? 查看æƒé™åˆ—表 + show: + Description: 显示领地的边界 + Info: + - '&e用法: &6/res show <领地>' + flags: + Description: 领地æƒé™åˆ—表 + Info: + - 对于大部分æƒé™æ¥è¯´, true 表示å…许, false 表示ç¦æ­¢è¿™ä¸€æ“作 + SubCommands: + anvil: + Description: å…许或ç¦æ­¢ä½¿ç”¨é“ç § + Info: + - '&e用法: &6/res set/pset <领地> anvil true/false/remove' + Translated: anvil + admin: + Description: 玩家å¯ä»¥æ›´æ”¹é¢†åœ°æƒé™ + Info: + - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' + Translated: admin + animalkilling: + Description: å…许或ç¦æ­¢å‡»æ€åŠ¨ç‰© + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: animalkilling + animals: + Description: å…许或ç¦æ­¢åŠ¨ç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: animals + anvilbreak: + Description: Allows or denys anvil break in residence + Info: + - '&e用法: &6/res set <领地> anvilbreak true/false/remove' + Translated: anvilbreak + backup: + Description: 设置为Trueå¯ä»¥æ¢å¤åˆ°ä»¥å‰çš„备份 (需è¦WordEdit) + Info: + - '&e用法: &6/res set <领地> backup true/false/remove' + Translated: backup + bank: + Description: å…许或ç¦æ­¢ä½¿ç”¨é¢†åœ°é“¶è¡Œ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: bank + bed: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: bed + beacon: + Description: å…许或者ç¦æ­¢çŽ©å®¶ä½¿ç”¨ä¿¡æ ‡ + Info: + - '&e用法: &6/res set/pset <领地> beacon true/false/remove' + Translated: beacon + brew: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é…¿é€ å° + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: brew + build: + Description: å…许或ç¦æ­¢å»ºé€  + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: build + burn: + Description: å…许或ç¦æ­¢æ€ªç‰©ç‡ƒçƒ§ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: burn + button: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰é’® + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: button + cake: + Description: å…许或ç¦æ­¢çŽ©å®¶åƒè›‹ç³• + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: cake + canimals: + Description: å…许或ç¦æ­¢è‡ªå®šä¹‰åŠ¨ç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: canimals + chorustp: + Description: å…许或者ç¦æ­¢çŽ©å®¶ä½¿ç”¨ç´«å½±æžœ + Info: + - '&e用法: &6/res set/pset <领地> chorustp true/false/remove' + Translated: chorustp + chat: + Description: å…许加入领地èŠå¤©é¢‘é“ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: chat + cmonsters: + Description: å…许或ç¦æ­¢è‡ªå®šä¹‰æ€ªç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: cmonsters + commandblock: + Description: å…许或ç¦æ­¢ä½¿ç”¨å‘½ä»¤æ–¹å— + Info: + - '&e用法: &6/res set/pset <领地> commandblock true/false/remove' + Translated: commandblock + command: + Description: å…许或ç¦æ­¢æ‰§è¡Œå‘½ä»¤ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: command + container: + Description: å…许或ç¦æ­¢ä½¿ç”¨ç†”炉, ç®±å­, å‘射器等... + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: container + coords: + Description: éšè—领地的åæ ‡ + Info: + - '&e用法: &6/res set <领地> coords true/false/remove' + Translated: coords + craft: + Description: 给予 table, enchant å’Œ brew æƒé™ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: craft + creeper: + Description: å…许或ç¦æ­¢çˆ¬è¡Œè€…爆炸 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: creeper + dragongrief: + Description: 防止末影龙破åæ–¹å— + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: dragongrief + day: + Description: 领地ä¿æŒç™½å¤© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: day + dye: + Description: å…许或ç¦æ­¢ä¸ºç¾Šæ¯›æŸ“色 + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: dye + damage: + Description: å…许或ç¦æ­¢æ‰€æœ‰å®žä½“伤害 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: damage + decay: + Description: å…许或者ç¦æ­¢æ ‘å¶å‡‹æ• + Info: + - '&e用法: &6/res set <领地> decay true/false/remove' + Translated: decay + destroy: + Description: åªå…许或ç¦æ­¢ç ´åæ–¹å—, 该æƒé™è¦†ç›– build æƒé™ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: destroy + dryup: + Description: ä¿æŠ¤è€•åœ°å¤±åŽ»æ°´åˆ† + Info: + - '&e用法: &6/res set <领地> dryup true/false/remove' + Translated: dryup + diode: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨çº¢çŸ³ä¸­ç»§å™¨ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: diode + door: + Description: å…许或ç¦æ­¢çŽ©å®¶å¼€å…³é—¨å’Œæ´»æ¿é—¨ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: door + egg: + Description: å…许或ç¦æ­¢ç‚¹å‡»æœ«å½±é¾™è›‹ + Info: + - '&e用法: &6/res set/pset <领地> egg true/false/remove' + Translated: egg + enchant: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: enchant + explode: + Description: å…许或ç¦æ­¢çˆ†ç‚¸ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: explode + enderpearl: + Description: å…许或ç¦æ­¢ç”¨æœ«å½±çç ä¼ é€è‡³æ­¤é¢†åœ° + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: enderpearl + fallinprotection: + Description: 防止掉è½çš„æ–¹å—进入领地 + Info: + - '&e用法: &6/res set <领地> fallinprotection true/false/remove' + Translated: fallinprotection + falldamage: + Description: 开关玩家å è½ä¼¤å®³ + Info: + - '&e用法: &6/res set <领地> falldamage true/false/remove' + Translated: falldamage + feed: + Description: 为领地内的玩家æ¢å¤é¥±é£Ÿ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: feed + fireball: + Description: å…许或ç¦æ­¢ç«ç„°å¼¹ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: fireball + firespread: + Description: å…许或ç¦æ­¢ç«ç„°è”“延 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: firespread + flowinprotection: + Description: å…许或ç¦æ­¢æ¶²ä½“æµå…¥é¢†åœ° + Info: + - '&e用法: &6/res set <领地> flowinprotection true/false/remove' + Translated: flowinprotection + flow: + Description: å…许或ç¦æ­¢æ¶²ä½“æµåŠ¨ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: flow + flowerpot: + Description: å…许或ç¦æ­¢ç‚¹å‡»èŠ±ç›† + Info: + - '&e用法: &6/res set/pset <领地> flowerpot true/false/remove' + Translated: flowerpot + grow: + Description: å…许或ç¦æ­¢ä½œç‰©ç”Ÿé•¿ + Info: + - '&e用法: &6/res set <领地> grow true/false/remove' + Translated: grow + glow: + Description: 玩家进入领地会有å‘光效果 + Info: + - '&e用法: &6/res set <领地> glow true/false/remove' + Translated: glow + hotfloor: + Description: 开关岩浆å—的伤害 + Info: + - '&e用法: &6/res set <领地> hotfloor true/false/remove' + Translated: hotfloor + hidden: + Description: 在 list 或 listall 命令中éšè—此领地 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: hidden + hook: + Description: å…许或ç¦æ­¢ä½¿ç”¨é±¼ç«¿æ”»å‡»å®žä½“ + Info: + - '&e用法: &6/res set/pset <领地> hook true/false/remove' + Translated: hook + healing: + Description: 为领地内的玩家治疗 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: healing + iceform: + Description: 阻止冰霜行者魔咒å‘挥作用 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: iceform + icemelt: + Description: 开关冰的èžåŒ– + Info: + - '&e用法: &6/res set <领地> icemelt true/false/remove' + Translated: icemelt + ignite: + Description: å…许或ç¦æ­¢ç‚¹ç« + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: ignite + itemdrop: + Description: å…许或阻止物å“æŽ‰è½ + Info: + - '&e用法: &6/res set/pset <领地> itemdrop true/false/remove' + Translated: itemdrop + itempickup: + Description: å…许或阻止物å“æ¡èµ· + Info: + - '&e用法: &6/res set/pset <领地> itempickup true/false/remove' + Translated: itempickup + jump2: + Description: å…许跳2格高 + Info: + - '&e用法: &6/res set <领地> jump2 true/false/remove' + Translated: jump2 + jump3: + Description: å…许跳3格高 + Info: + - '&e用法: &6/res set <领地> jump3 true/false/remove' + Translated: jump3 + keepinv: + Description: 玩家死亡ä¸ä¼šæŽ‰è½ç‰©å“ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: keepinv + keepexp: + Description: 玩家死亡ä¸ä¼šæŸå¤±ç»éªŒ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: keepexp + lavaflow: + Description: å…许或ç¦æ­¢å²©æµ†æµåŠ¨, 该æƒé™è¦†ç›– flow æƒé™ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: lavaflow + leash: + Description: å…许或ç¦æ­¢ç‰µå¼•åŠ¨ç‰© + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: leash + lever: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æ‹‰æ† + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: lever + mobexpdrop: + Description: 怪物死亡ä¸ä¼šæŽ‰è½ç»éªŒ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: mobexpdrop + mobitemdrop: + Description: 怪物死亡ä¸ä¼šæŽ‰è½ç‰©å“ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: mobitemdrop + mobkilling: + Description: å…许或ç¦æ­¢å‡»æ€æ€ªç‰© + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: mobkilling + monsters: + Description: å…许或ç¦æ­¢æ€ªç‰©ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: monsters + move: + Description: å…许或ç¦æ­¢ç§»åŠ¨ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: move + nanimals: + Description: å…许或ç¦æ­¢è‡ªç„¶ç”ŸæˆåŠ¨ç‰© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: nanimals + nmonsters: + Description: å…许或ç¦æ­¢è‡ªç„¶ç”Ÿæˆæ€ªç‰© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: nmonsters + night: + Description: 领地ä¿æŒå¤œé—´ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: night + nofly: + Description: å…许或ç¦æ­¢é£žè¡Œ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: nofly + fly: + Description: è®¾ç½®é¢†åœ°å†…çš„çŽ©å®¶é£žè¡ŒçŠ¶æ€ + Info: + - '&e用法: &6/res set/pset <领地> fly true/false/remove' + Translated: fly + nomobs: + Description: å…许或ç¦æ­¢æ€ªç‰©è¿›å…¥é¢†åœ° + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: nomobs + note: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³ç¬¦ç›’ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: note + nodurability: + Description: 物å“ä¸ä¼šæŸå¤±è€ä¹… + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: nodurability + overridepvp: + Description: 覆盖任何æ’件的 PVP ä¿æŠ¤ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: overridepvp + pressure: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åŽ‹åŠ›æ¿ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: pressure + piston: + Description: å…许或ç¦æ­¢æ´»å¡žæŽ¨æ‹‰æ–¹å— + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: piston + pistonprotection: + Description: å…许或者ç¦æ­¢æ´»å¡žä»Žé¢†åœ°å¤–æŽ¨åŠ¨é¢†åœ°å†…çš„æ–¹å— + Info: + - '&e用法: &6/res set <领地> pistonprotection true/false/remove' + Translated: pistonprotection + place: + Description: åªå…许或ç¦æ­¢æ”¾ç½®æ–¹å—, 该æƒé™è¦†ç›– build æƒé™ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: place + pvp: + Description: å…许或ç¦æ­¢é¢†åœ°å†… PVP + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: pvp + rain: + Description: 设置领地天气为下雨 + Info: + - '&e用法: &6/res set <领地> rain true/false/remove' + Translated: rain + redstone: + Description: 给予 lever, diode, button, pressure å’Œ note æƒé™ + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + respawn: + Description: 自动é‡ç”ŸçŽ©å®¶ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: respawn + riding: + Description: 阻止骑乘马匹 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: riding + shoot: + Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…射击 + Info: + - '&e用法: &6/res set <领地> shoot true/false/remove' + Translated: shoot + sun: + Description: 设置领地天气为晴天 + Info: + - '&e用法: &6/res set <领地> sun true/false/remove' + Translated: sun + shop: + Description: 将领地设置为商店 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: shop + snowtrail: + Description: 防止雪傀儡留下雪轨迹 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: snowtrail + spread: + Description: 防止方å—扩散 + Info: + - '&e用法: &6/res set <领地> spread true/false/remove' + Translated: spread + snowball: + Description: 防止雪çƒå‡»é€€æ•ˆæžœ + Info: + - '&e用法: &6/res set <领地> snowball true/false/remove' + Translated: snowball + sanimals: + Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼å’Œåˆ·æ€ªè›‹ç”ŸæˆåŠ¨ç‰© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: sanimals + shear: + Description: å…许或ç¦æ­¢å‰ªç¾Šæ¯› + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: shear + smonsters: + Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼å’Œåˆ·æ€ªè›‹ç”Ÿæˆæ€ªç‰© + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: smonsters + subzone: + Description: å…许玩家建立领地å­åŒºåŸŸ + Info: + - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' + Translated: subzone + table: + Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: table + tnt: + Description: å…许或ç¦æ­¢ TNT 爆炸 + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: tnt + tp: + Description: å…许或ç¦æ­¢ä¼ é€è‡³æ­¤é¢†åœ° + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: tp + trade: + Description: å…许或ç¦æ­¢æ‘民交易 + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: trade + trample: + Description: å…许或ç¦æ­¢è¸©å耕地 + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: trample + trusted: + Description: 给予 build, use, move, container å’Œ tp æƒé™ + Info: + - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' + use: + Description: å…许或ç¦æ­¢ä½¿ç”¨é—¨, 拉æ†, 按钮等... + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: use + vehicledestroy: + Description: å…许或ç¦æ­¢ç ´å载具 + Info: + - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + Translated: vehicledestroy + witherspawn: + Description: å…许或ç¦æ­¢å‡‹é›¶çš„ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> witherspawn true/false/remove' + Translated: witherspawn + witherdamage: + Description: ç¦æ­¢å‡‹çµé€ æˆä¼¤å®³ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: witherdamage + witherdestruction: + Description: å…许或ç¦æ­¢å‡‹é›¶ç ´åæ–¹å— + Info: + - '&e用法: &6/res set <领地> witherdestruction true/false/remove' + Translated: witherdestruction + waterflow: + Description: å…许或ç¦æ­¢æ°´æµåŠ¨, 该æƒé™è¦†ç›– flow æƒé™ + Info: + - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' + Translated: waterflow + wspeed1: + Description: 设置领地内玩家的行走速度为 %1 + Info: + - '&e用法: &6/res set <领地> wspeed1 true/false/remove' + Translated: wspeed1 + wspeed2: + Description: 设置领地内玩家的行走速度为 %1 + Info: + - '&e用法: &6/res set <领地> wspeed2 true/false/remove' + Translated: wspeed2 + anchor: + Translated: anchor + Description: å…许或阻止玩家使用é‡ç”Ÿé”š + Info: + - '&e用法: &6/res set/pset <领地> anchor true/false/remove' + safezone: + Translated: safezone + Description: 设置为trueæ¥è®©çŽ©å®¶å…é­è´Ÿé¢è¯æ°´æ•ˆæžœå½±å“ + Info: + - '&e用法: &6/res set <领地> safezone true/false/remove' + honey: + Translated: honey + Description: å…许或阻止玩家获得蜂蜜 + Info: + - '&e用法: &6/res set/pset <领地> honey true/false/remove' + honeycomb: + Translated: honeycomb + Description: å…许或阻止玩家获得蜂巢 + Info: + - '&e用法: &6/res set/pset <领地> honeycomb true/false/remove' + brush: + Translated: brush + Description: å…许或阻止方å—笔刷的使用 + Info: + - '&e用法: &6/res set/pset <领地> brush true/false/remove' + copper: + Translated: copper + Description: å…许或阻止改å˜é“œå—çŠ¶æ€ + Info: + - '&e用法: &6/res set/pset <领地> copper true/false/remove' + elytra: + Translated: elytra + Description: å…许或阻止玩家在领地使用鞘翅 + Info: + - '&e用法: &6/res set/pset <领地> elytra true/false/remove' + friendlyfire: + Translated: friendlyfire + Description: å…许或阻止å‹ä¼¤ + Info: + - '&e用法: &6/res pset <领地> friendlyfire true/false/remove' + harvest: + Translated: harvest + Description: å…许收获作物 + Info: + - '&e用法: &6/res set/pset <领地> harvest true/false/remove' + nametag: + Translated: nametag + Description: å…许或阻止命å牌的使用 + Info: + - '&e用法: &6/res set/pset <领地> nametag true/false/remove' + title: + Translated: title + Description: 显示或éšè—é¢†åœ°çš„è¿›å‡ºä¿¡æ¯ + Info: + - '&e用法: &6/res set <领地> title true/false/remove' + phantomspawn: + Translated: phantomspawn + Description: å…è®¸æˆ–é˜»æ­¢å¹»ç¿¼ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地> phantomspawn true/false/remove' + remove: + Description: 删除领地 + Info: + - '&e用法: &6/res remove <领地å>' + signupdate: + Description: 更新领地木牌 + Info: + - '&e用法: &6/res signupdate' + current: + Description: 显示你目å‰æ‰€åœ¨çš„领地 + Info: + - '&e用法: &6/res current' + reload: + Description: é‡è½½è¯­è¨€æˆ–é…置文件 + Info: + - '&e用法: &6/res reload [config/lang]' + setowner: + Description: 改å˜é¢†åœ°æ‰€æœ‰è€… + Info: + - '&e用法: &6/resadmin setowner [领地] [玩家]' + unstuck: + Description: ä¼ é€åˆ°é¢†åœ°å¤–é¢ + Info: + - '&e用法: &6/res unstuck' + subzone: + Description: 在领地中创建å­åŒºåŸŸ + Info: + - '&e用法: &6/res subzone <领地å> [å­åŒºåŸŸå]' + - 如果领地å留空, 将会å°è¯•åœ¨çŽ©å®¶æ‰€å¤„领地中建立å­åŒºåŸŸ + removeworld: + Description: 删除指定世界中的所有领地 + Info: + - '&e用法: &6/res removeworld [世界å]' + - åªèƒ½åœ¨æŽ§åˆ¶å°æ‰§è¡Œæ­¤å‘½ä»¤ + limits: + Description: 显示你的领地é™åˆ¶ + Info: + - '&e用法: &6/res limits' + - 显示你在创建和管ç†é¢†åœ°æ–¹é¢çš„å„ç§é™åˆ¶ + set: + Description: 为领地设置默认æƒé™ + Info: + - '&e用法: &6/res set <领地> [æƒé™] [true/false/remove]' + - 输入 /res flags ? 查看æƒé™åˆ—表 + - 如果没有为æŸçŽ©å®¶æŒ‡å®šè¯¥é¢†åœ°çš„特定æƒé™, 那么这å玩家将会拥有这些默认æƒé™. (å‚è§ /res pset ?) + clearflags: + Description: 删除领地所有æƒé™ + Info: + - '&e用法: &6/res clearflags <领地>' + message: + Description: 管ç†é¢†åœ°åŠ å…¥ / ç¦»å¼€æ¶ˆæ¯ + Info: + - '&e用法: &6/res message <领地> [enter/leave] [消æ¯]' + - 设置领地加入和离开的消æ¯æ–‡æœ¬ + - '&e用法: &6/res message <领地> remove [enter/leave]' + - 移除加入或离开的消æ¯æ–‡æœ¬ + command: + Description: 管ç†é¢†åœ°å…许或者ç¦æ­¢çš„命令 + Info: + - '&e用法: &6/res command <领地> ' + - 使用 _ æ¥è¡¨ç¤ºå¤šä¸ªå˜é‡ + confirm: + Description: 确认删除领地 + Info: + - '&e用法: &6/res confirm' + - 确认删除一个领地 + resadmin: + Description: 关闭或者开å¯é¢†åœ°ç®¡ç† + Info: + - '&e用法: &6/res resadmin [on/off]' + tpset: + Description: 设定领地的传é€ç‚¹ + Info: + - '&e用法: &6/res tpset' + - 该命令将会把你站的ä½ç½®è®¾ç½®ä¸ºé¢†åœ°çš„ä¼ é€ç‚¹ + - 你必须站在一个领地里æ‰èƒ½ä½¿ç”¨è¿™ä¸ªå‘½ä»¤ + - 你必须是领地的所有者或者拥有领地的 +admin æƒé™ + tpconfirm: + Description: 忽略ä¸å®‰å…¨ä¼ é€è­¦å‘Š + Info: + - '&e用法: &6/res tpconfirm' + - 强制传é€åˆ°é¢†åœ°, 忽略传é€ä¸å®‰å…¨çš„警告 + removeall: + Description: 移除æŸçŽ©å®¶çš„所有领地 + Info: + - '&e用法: &6/res removeall [所有者]' + - 移除特定玩家的所有领地 + - 如果是移除其他玩家的领地, 你必须有 /resadmin 命令æƒé™ + material: + Description: 检查æ质是å¦å­˜åœ¨å¯¹åº”çš„ID + Info: + - '&e用法: &6/res material [material]' + kick: + Description: 将玩家踢出领地 + Info: + - '&e用法: &6/res kick <玩家>' + - 你必须是领地所有者或者管ç†å‘˜ + - 玩家必须在线 + sublist: + Description: 列出所有领地å­åŒºåŸŸ + Info: + - '&e用法: &6/res sublist <领地> <页ç >' + - 列出所有领地å­åŒºåŸŸ + rename: + Description: é‡å‘½å领地 + Info: + - '&e用法: &6/res rename [领地åå­—] [æ–°åå­—]' + - 你必须是领地所有者或者管ç†å‘˜ + - 新领地åå­—ä¸èƒ½ä¸Žå…¶ä»–领地é‡å¤ + lease: + Description: 管ç†é¢†åœ°ç§Ÿçº¦ + Info: + - '&e用法: &6/res lease [renew/cost] [领地]' + - /res lease cost 显示续租领地的花费 + - /res lease renew 将会续租指定的领地 + SubCommands: + set: + Description: 设置租约时间 + Info: + - '&e用法: &6/resadmin lease set [领地] [#days/infinite]' + - 将租约时间设置为特定天数或者无é™åˆ¶ + renew: + Description: 续期租约时间 + Info: + - '&e用法: &6/resadmin lease renew <领地>' + - 续期当å‰æˆ–指定的领地租约 + list: + Description: 显示当å‰é¢†åœ°çš„租借列表 + Info: + - '&e用法: &6/resadmin lease list <领地> ' + - Prints out all subzones lease times + expires: + Description: 租约过期时间 + Info: + - '&e用法: &6/resadmin lease expires <领地>' + - 显示领地租约过期的时间 + cost: + Description: 显示续租花费 + Info: + - '&e用法: &6/resadmin lease cost <领地>' + - 显示续租领地所需的花费 + tp: + Description: ä¼ é€åˆ°ä¸€ä¸ªé¢†åœ° + Info: + - '&e用法: &6/res tp [residence]' + - 将你传é€åˆ°ä¸€ä¸ªé¢†åœ°, 你必须是领地所有者或者拥有领地 +tp æƒé™ + - ä½ çš„æƒé™ç»„也必须在æœåŠ¡å™¨ä¸­æœ‰ä¼ é€æƒé™ + resreload: + Description: é‡è½½ Residence. + Info: + - '&e用法: &6/resreload' + resload: + Description: 加载领地存档文件 + Info: + - '&e用法: &6/resload' + - 该命令ä¸å®‰å…¨! 它ä¸ä¼šå…ˆä¿å­˜é¢†åœ°çŠ¶æ€. + - 对领地åšå‡ºæ”¹å˜åŽé‡æ–°åŠ è½½å­˜æ¡£. + placeholders: + Info: + - '&e用法: &6/res placeholders (parse) (å˜é‡) (玩家å)' + Description: 列出å˜é‡ + parse: '[result]' + raid: + Info: + - '&e用法: &6/res raid start [resname] (playerName)' + - '&6/res raid stop [resname]' + - '&6/res raid kick [playerName]' + - '&6/res raid immunity [add/take/set/clear] [resname/currentres] [time]' + Description: 控制领地的袭击 + raidstatus: + Info: + - '&e用法: &6/res raidstatus (resName/playerName)' + Description: æ£€æŸ¥ä¸€ä¸ªé¢†åœ°çš„è¢­å‡»çŠ¶æ€ + leaveraid: + Info: + - '&e用法: &6/res leaveraid' + Description: 离开袭击 + defend: + Info: + - '&e用法: &6/res defend [resName] (playerName)' + Description: 加入一个领地的袭击ä¿å« + attack: + Description: 开始一个领地的袭击 + Info: + - '&e用法: &6/res attack [resName]' + setallfor: + Info: + - '&e用法: &6/res setallfor [playerName] [flag] [true/false/remove]' + Description: 设置æŸä¸ªçŽ©å®¶æ‰€æœ‰é¢†åœ°çš„标志 + setall: + Info: + - '&e用法: &6/res setall [flag] [true/false/remove]' + Description: 设置所有领地的标志 From 99620e5e18e0fd1a65c4656ebdebc87d4b4a80b9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 24 Jul 2023 16:41:48 +0300 Subject: [PATCH 1046/1142] Sign interactions should be handled by use flag and not place --- .../bukkit/residence/commands/kick.java | 2 ++ .../listeners/ResidencePlayerListener.java | 28 ++++++++++++------- .../ResidencePlayerListener1_20.java | 9 ++++-- src/plugin.yml | 2 +- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 4b691baaf..171a0c46c 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -41,10 +41,12 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); + if (!group.hasKickAccess() && !resadmin) { plugin.msg(player, lm.General_NoPermission); return true; } + ClaimedResidence res = plugin.getResidenceManager().getByLoc(targetplayer.getLocation()); if (res == null || !res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b471c8319..b7b0110d5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1356,6 +1356,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { && (!heldItem.isDye() && !heldItem.equals(CMIMaterial.GLOW_INK_SAC)) && !heldItem.equals(CMIMaterial.ARMOR_STAND) && !heldItem.isBoat() && !placingMinecart(block, iih)) { return; } + if (event.getAction() != Action.LEFT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; @@ -1375,18 +1376,18 @@ public void onPlayerInteract(PlayerInteractEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + + CMIMaterial btype = CMIMaterial.get(block); + if (heldItem.isDye() || heldItem.equals(CMIMaterial.GLOW_INK_SAC)) { - CMIMaterial btype = CMIMaterial.get(block); - if (heldItem.equals(CMIMaterial.BONE_MEAL) && ( - btype == CMIMaterial.GRASS_BLOCK || - btype == CMIMaterial.GRASS || + if (heldItem.equals(CMIMaterial.BONE_MEAL) && (btype == CMIMaterial.GRASS_BLOCK || + btype == CMIMaterial.GRASS || btype.isSapling()) || - heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD || - btype == CMIMaterial.MOSS_BLOCK || - btype == CMIMaterial.BIG_DRIPLEAF_STEM || - btype == CMIMaterial.BIG_DRIPLEAF || - btype == CMIMaterial.SMALL_DRIPLEAF || - btype.isSign()) { + heldItem == CMIMaterial.COCOA_BEANS && blockM == CMIMaterial.JUNGLE_WOOD || + btype == CMIMaterial.MOSS_BLOCK || + btype == CMIMaterial.BIG_DRIPLEAF_STEM || + btype == CMIMaterial.BIG_DRIPLEAF || + btype == CMIMaterial.SMALL_DRIPLEAF) { FlagPermissions tperms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!tperms.playerHas(player, Flags.build, true)) { plugin.msg(player, lm.Flag_Deny, Flags.build); @@ -1410,6 +1411,13 @@ public void onPlayerInteract(PlayerInteractEvent event) { } + if (btype.isSign() && !perms.playerHas(player, Flags.use, true)) { + plugin.msg(player, lm.Flag_Deny, Flags.use); + event.setCancelled(true); + return; + + } + if (heldItem.equals(CMIMaterial.BRUSH)) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); if (res != null && !res.getPermissions().playerHas(player, Flags.brush, FlagCombo.OnlyTrue)) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java index dd11f6939..99a72d178 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java @@ -11,6 +11,7 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import net.Zrips.CMILib.Items.CMIMaterial; @@ -24,6 +25,7 @@ public ResidencePlayerListener1_20(Residence plugin) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignInteract(PlayerInteractEvent event) { + if (event.getPlayer() == null) return; // disabling event on world @@ -41,12 +43,13 @@ public void onSignInteract(PlayerInteractEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); - boolean hasplace = perms.playerHas(player, Flags.place, perms.playerHas(player, Flags.build, true)); - if (hasplace) + boolean hasuse = perms.playerHas(player, Flags.use, FlagCombo.TrueOrNone); + + if (hasuse) return; event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.build); + plugin.msg(player, lm.Flag_Deny, Flags.use); } } diff --git a/src/plugin.yml b/src/plugin.yml index 7f2433c44..c03063dce 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.1.3 +version: 5.1.2.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 0ed8d606dfd54836761c5378df9e463ae4428762 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Aug 2023 16:47:45 +0300 Subject: [PATCH 1047/1142] Removed enter/leave messages should remain removed We should check first variable in message command and not reduce input --- .../bukkit/residence/commands/message.java | 154 +++++++++--------- .../listeners/ResidenceBlockListener.java | 5 +- .../listeners/ResidencePlayerListener.java | 2 +- .../ResidencePlayerListener1_20.java | 34 ++++ .../protection/ClaimedResidence.java | 6 +- 5 files changed, 118 insertions(+), 83 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/message.java b/src/com/bekvon/bukkit/residence/commands/message.java index 88c8ae1f3..5c0292eb0 100644 --- a/src/com/bekvon/bukkit/residence/commands/message.java +++ b/src/com/bekvon/bukkit/residence/commands/message.java @@ -5,7 +5,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -14,88 +13,93 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import net.Zrips.CMILib.FileHandler.ConfigReader; + public class message implements cmd { @Override @CommandAnnotation(simple = true, priority = 1000) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - ClaimedResidence res = null; - String message = null; - Boolean enter = null; - - c: for (String one : plugin.reduceArgs(args)) { - if (message == null) - switch (one.toLowerCase()) { - case "enter": - if (enter == null) { - enter = true; - continue; - } - break; - case "leave": - if (enter == null) { - enter = false; - continue; - } - break; - case "remove": - break c; - } - - if (res == null && enter == null) { - res = plugin.getResidenceManager().getByName(one); - if (res != null) - continue; - } - - if (message == null) - message = ""; - if (!message.isEmpty()) - message += " "; - message += one; - } - - if (res == null && sender instanceof Player) { - res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); - } - - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return true; - } - - if (enter == null) { - plugin.msg(sender, lm.Invalid_MessageType); - return true; - } - - if (enter && !ResPerm.command_message_enter.hasPermission(sender)) { - return true; - } - - if (!enter && !ResPerm.command_message_leave.hasPermission(sender)) { - return true; - } - - if (message == null && enter && !ResPerm.command_message_enter_remove.hasPermission(sender)) { - return true; - } - - if (message == null && !enter && !ResPerm.command_message_leave_remove.hasPermission(sender)) { - return true; - } - - res.setEnterLeaveMessage(sender, message, enter, resadmin); - - return true; + ClaimedResidence res = null; + String message = null; + Boolean enter = null; + + c: for (String one : args) { + if (message == null) + switch (one.toLowerCase()) { + case "enter": + if (enter == null) { + enter = true; + continue; + } + break; + case "leave": + if (enter == null) { + enter = false; + continue; + } + break; + case "remove": + break c; + } + + if (res == null && enter == null) { + res = plugin.getResidenceManager().getByName(one); + if (res != null) + continue; + } + + if (message == null) + message = ""; + if (!message.isEmpty()) + message += " "; + message += one; + } + + if (res == null && sender instanceof Player) { + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); + } + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; + } + + if (enter == null) { + plugin.msg(sender, lm.Invalid_MessageType); + return true; + } + + if (enter && !ResPerm.command_message_enter.hasPermission(sender)) { + return true; + } + + if (!enter && !ResPerm.command_message_leave.hasPermission(sender)) { + return true; + } + + if (message == null && enter && !ResPerm.command_message_enter_remove.hasPermission(sender)) { + return true; + } + + if (message == null && !enter && !ResPerm.command_message_leave_remove.hasPermission(sender)) { + return true; + } + + if (message == null) + message = ""; + + res.setEnterLeaveMessage(sender, message, enter, resadmin); + + return true; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Manage residence enter / leave messages"); - c.get("Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", - "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); - LocaleManager.addTabCompleteMain(this, "[cresidence]", "enter%%leave%%remove", "[enter]%%[leave]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Manage residence enter / leave messages"); + c.get("Info", Arrays.asList("&eUsage: &6/res message [enter/leave] [message]", + "Set the enter or leave message of a residence.", "&eUsage: &6/res message remove [enter/leave]", "Removes a enter or leave message.")); + LocaleManager.addTabCompleteMain(this, "[cresidence]", "enter%%leave%%remove", "[enter]%%[leave]"); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index a519f6248..4403c1129 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -68,6 +68,7 @@ import net.Zrips.CMILib.Container.CMIBlock; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceBlockListener implements Listener { @@ -91,7 +92,7 @@ public void onButtonHitWithProjectile(ProjectileHitEvent e) { if (Version.isCurrentEqualOrLower(Version.v1_12_R1)) return; - + if (e.getHitBlock() == null) return; @@ -306,7 +307,6 @@ public static boolean canBreakBlock(Player player, Block block, boolean inform) hasdestroy = true; } } - if (!hasdestroy && !ResPerm.bypass_destroy.hasPermission(player, 10000L)) { if (inform) Residence.getInstance().msg(player, lm.Flag_Deny, Flags.destroy); @@ -316,6 +316,7 @@ public static boolean canBreakBlock(Player player, Block block, boolean inform) Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container); return false; } + return true; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b7b0110d5..4c7b985eb 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2613,7 +2613,7 @@ public void onResidenceChangeMessagePrint(ResidenceChangedEvent event) { Player player = event.getPlayer(); if (player.hasMetadata("NPC")) return; - if (message != null) { + if (message != null && !message.isEmpty()) { Long time = informar.get(player.getUniqueId()); if (time == null || time + 100L < System.currentTimeMillis()) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java index 99a72d178..1406b5821 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java @@ -1,10 +1,13 @@ package com.bekvon.bukkit.residence.listeners; +import org.bukkit.Bukkit; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.SignChangeEvent; +import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.PlayerInteractEvent; import com.bekvon.bukkit.residence.Residence; @@ -49,7 +52,38 @@ public void onSignInteract(PlayerInteractEvent event) { return; event.setCancelled(true); + +// Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { +// if (player.getOpenInventory().getType().equals(InventoryType.CRAFTING)) { +// player.closeInventory(); +// } +// }, 0L); + plugin.msg(player, lm.Flag_Deny, Flags.use); } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onSignModifyEvent(SignChangeEvent event) { + +// // disabling event on world +// if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) +// return; +// +// Player player = event.getPlayer(); +// if (player.hasMetadata("NPC")) +// return; +// +// Block block = event.getBlock(); +// +// FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); +// +// boolean hasuse = perms.playerHas(player, Flags.use, FlagCombo.TrueOrNone); +// +// if (hasuse) +// return; +// +// event.setCancelled(true); +// plugin.msg(player, lm.Flag_Deny, Flags.use); + } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 76521e550..1369b2071 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -62,7 +62,6 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; @@ -1005,9 +1004,6 @@ public void setShopDesc(String message) { public void setEnterLeaveMessage(CommandSender sender, String message, boolean enter, boolean resadmin) { if (message != null) { message = message.replace("%subtitle%", "\\n"); - if (message.equals("")) { - message = null; - } } if (sender instanceof Player) { @@ -2057,7 +2053,7 @@ public String getOwner() { public boolean isOwner(String name) { Player player = Bukkit.getPlayer(name); - if (player != null) + if (player != null && player.getName().equalsIgnoreCase(name)) return isOwner(player); return perms.getOwner().equalsIgnoreCase(name); } From cc40f884a6afbac4d9ebffa92333886daf7a43c9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Aug 2023 16:53:22 +0300 Subject: [PATCH 1048/1142] Allow hook flag bypass if you have resadmin on --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 4c7b985eb..9b39b5095 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -388,7 +388,7 @@ public void onFishingRodUse(PlayerFishEvent event) { Player player = event.getPlayer(); if (event.getCaught() == null) return; - if (Utils.isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) { + if ((Utils.isArmorStandEntity(event.getCaught().getType()) || event.getCaught() instanceof Boat || event.getCaught() instanceof LivingEntity) && !plugin.isResAdminOn(player)) { FlagPermissions perm = plugin.getPermsByLoc(event.getCaught().getLocation()); ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getCaught().getLocation()); if (perm.has(Flags.hook, FlagCombo.OnlyFalse)) { From fe3d5d335a2040471bc68e1ff9bbce4461759e01 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Aug 2023 17:01:37 +0300 Subject: [PATCH 1049/1142] Lets use new sign open event for 1.20 servers to properly handle sign edits --- .../ResidencePlayerListener1_20.java | 49 ++----------------- 1 file changed, 4 insertions(+), 45 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java index 1406b5821..f32681424 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java @@ -1,14 +1,10 @@ package com.bekvon.bukkit.residence.listeners; -import org.bukkit.Bukkit; -import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.block.SignChangeEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerSignOpenEvent; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -16,8 +12,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import net.Zrips.CMILib.Items.CMIMaterial; - public class ResidencePlayerListener1_20 implements Listener { private Residence plugin; @@ -27,7 +21,7 @@ public ResidencePlayerListener1_20(Residence plugin) { } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onSignInteract(PlayerInteractEvent event) { + public void onSignInteract(PlayerSignOpenEvent event) { if (event.getPlayer() == null) return; @@ -35,55 +29,20 @@ public void onSignInteract(PlayerInteractEvent event) { if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; - Block block = event.getClickedBlock(); - - if (block == null || !CMIMaterial.isSign(block.getType())) - return; - Player player = event.getPlayer(); if (player.hasMetadata("NPC")) return; - FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getSign().getLocation(), player); boolean hasuse = perms.playerHas(player, Flags.use, FlagCombo.TrueOrNone); - if (hasuse) + if (hasuse || plugin.isResAdminOn(player)) return; event.setCancelled(true); -// Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { -// if (player.getOpenInventory().getType().equals(InventoryType.CRAFTING)) { -// player.closeInventory(); -// } -// }, 0L); - plugin.msg(player, lm.Flag_Deny, Flags.use); } - - @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) - public void onSignModifyEvent(SignChangeEvent event) { - -// // disabling event on world -// if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) -// return; -// -// Player player = event.getPlayer(); -// if (player.hasMetadata("NPC")) -// return; -// -// Block block = event.getBlock(); -// -// FlagPermissions perms = plugin.getPermsByLocForPlayer(block.getLocation(), player); -// -// boolean hasuse = perms.playerHas(player, Flags.use, FlagCombo.TrueOrNone); -// -// if (hasuse) -// return; -// -// event.setCancelled(true); -// plugin.msg(player, lm.Flag_Deny, Flags.use); - } } From 36a8f245b19c310000b099da1e8bb4806e337b4d Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Aug 2023 17:08:24 +0300 Subject: [PATCH 1050/1142] Fix for \n in enter and leave messages while using titlemessage mode --- .../bukkit/residence/protection/ClaimedResidence.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 1369b2071..efd62cb86 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1860,10 +1860,11 @@ public static ClaimedResidence load(String worldName, Map root, // Defaulting to first one if not present if (defaultGroup != null) { - if (res.enterMessage == null) - res.enterMessage = defaultGroup.getDefaultEnterMessage(); + if (res.enterMessage == null) { + res.enterMessage = defaultGroup.getDefaultEnterMessage().replace("\n", "\\n"); + } if (res.leaveMessage == null) - res.leaveMessage = defaultGroup.getDefaultLeaveMessage(); + res.leaveMessage = defaultGroup.getDefaultLeaveMessage().replace("\n", "\\n"); } } From 44b4ad9a0dc5055e9677a7b608d66924b1478fb2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Aug 2023 17:32:28 +0300 Subject: [PATCH 1051/1142] Fix for error while performing lists command --- .../bukkit/residence/commands/lists.java | 189 +++++++++++------- .../protection/ClaimedResidence.java | 4 +- 2 files changed, 121 insertions(+), 72 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/lists.java b/src/com/bekvon/bukkit/residence/commands/lists.java index 2ee408386..e5b6abc5d 100644 --- a/src/com/bekvon/bukkit/residence/commands/lists.java +++ b/src/com/bekvon/bukkit/residence/commands/lists.java @@ -5,7 +5,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -13,92 +12,142 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.FlagPermissions; +import net.Zrips.CMILib.FileHandler.ConfigReader; + public class lists implements cmd { + private enum Action { + list, view, remove, add, apply, set, gset, pset; + + public static Action getByName(String name) { + for (Action one : Action.values()) { + if (one.name().equalsIgnoreCase(name)) + return one; + } + return null; + } + } @Override @CommandAnnotation(simple = true, priority = 4900) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (args.length == 1) { - if (args[0].equals("list")) { - plugin.getPermissionListManager().printLists(player); - return true; - } - } else if (args.length == 2) { - if (args[0].equals("view")) { - plugin.getPermissionListManager().printList(player, args[1]); - return true; - } else if (args[0].equals("remove")) { - plugin.getPermissionListManager().removeList(player, args[1]); - return true; - } else if (args[0].equals("add")) { - plugin.getPermissionListManager().makeList(player, args[1]); - return true; - } - } else if (args.length == 3) { - if (args[0].equals("apply")) { - plugin.getPermissionListManager().applyListToResidence(player, args[1], args[2], resadmin); - return true; - } - } else if (args.length == 4) { - if (args[0].equals("set")) { - plugin.getPermissionListManager().getList(player.getName(), args[1]).setFlag(args[2], FlagPermissions.stringToFlagState(args[3])); - plugin.msg(player, lm.Flag_Set, args[2], args[1], FlagPermissions.stringToFlagState(args[3])); - return true; - } - } else if (args.length == 5) { - if (args[0].equals("gset")) { - plugin.getPermissionListManager().getList(player.getName(), args[1]).setGroupFlag(args[2], args[3], FlagPermissions.stringToFlagState(args[4])); - plugin.msg(player, lm.Flag_Set, args[2], args[1], FlagPermissions.stringToFlagState(args[3])); - return true; - } else if (args[0].equals("pset")) { - plugin.getPermissionListManager().getList(player.getName(), args[1]).setPlayerFlag(args[2], args[3], FlagPermissions.stringToFlagState(args[4])); - plugin.msg(player, lm.Flag_Set, args[2], args[1], FlagPermissions.stringToFlagState(args[3])); - return true; - } - } - return false; + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + Action action = null; + String listName = null; + + for (String one : args) { + if (action == null) { + action = Action.getByName(one); + if (action != null) + continue; + } + + if (listName == null) { + listName = one; + continue; + } + } + + if (action == null) + return false; + + switch (action) { + case add: + if (listName == null) + return false; + plugin.getPermissionListManager().makeList(player, listName); + break; + case apply: + if (listName == null || args.length < 3) + return false; + plugin.getPermissionListManager().applyListToResidence(player, listName, args[2], resadmin); + break; + case gset: + if (listName == null || args.length < 5) + return false; + FlagPermissions list = plugin.getPermissionListManager().getList(player.getName(), listName); + if (list == null) + return false; + list.setGroupFlag(args[2], args[3], FlagPermissions.stringToFlagState(args[4])); + plugin.msg(player, lm.Flag_Set, args[2], args[1], FlagPermissions.stringToFlagState(args[3])); + break; + case list: + plugin.getPermissionListManager().printLists(player); + break; + case pset: + + list = plugin.getPermissionListManager().getList(player.getName(), listName); + if (list == null) + return false; + + list.setPlayerFlag(args[2], args[3], FlagPermissions.stringToFlagState(args[4])); + plugin.msg(player, lm.Flag_Set, args[2], listName, FlagPermissions.stringToFlagState(args[3])); + break; + case remove: + if (listName == null) + return false; + plugin.getPermissionListManager().removeList(player, listName); + break; + case set: + if (listName == null || args.length < 4) + return false; + + list = plugin.getPermissionListManager().getList(player.getName(), listName); + if (list == null) + return false; + + list.setFlag(args[2], FlagPermissions.stringToFlagState(args[3])); + plugin.msg(player, lm.Flag_Set, args[2], listName, FlagPermissions.stringToFlagState(args[3])); + break; + case view: + if (listName == null) + return false; + plugin.getPermissionListManager().printList(player, listName); + break; + default: + break; + } + + return false; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Predefined permission lists"); - c.get("Info", Arrays.asList("Predefined permissions that can be applied to a residence.")); + c.get("Description", "Predefined permission lists"); + c.get("Info", Arrays.asList("Predefined permissions that can be applied to a residence.")); - c.setFullPath(c.getPath() + "SubCommands."); - c.get("add.Description", "Add a list"); - c.get("add.Info", Arrays.asList("&eUsage: &6/res lists add ")); - LocaleManager.addTabCompleteSub(this, "add"); + c.setFullPath(c.getPath() + "SubCommands."); + c.get("add.Description", "Add a list"); + c.get("add.Info", Arrays.asList("&eUsage: &6/res lists add ")); + LocaleManager.addTabCompleteSub(this, "add"); - c.get("remove.Description", "Remove a list"); - c.get("remove.Info", Arrays.asList("&eUsage: &6/res lists remove ")); - LocaleManager.addTabCompleteSub(this, "remove"); + c.get("remove.Description", "Remove a list"); + c.get("remove.Info", Arrays.asList("&eUsage: &6/res lists remove ")); + LocaleManager.addTabCompleteSub(this, "remove"); - c.get("apply.Description", "Apply a list to a residence"); - c.get("apply.Info", Arrays.asList("&eUsage: &6/res lists apply ")); - LocaleManager.addTabCompleteSub(this, "apply", "", "[cresidence]"); + c.get("apply.Description", "Apply a list to a residence"); + c.get("apply.Info", Arrays.asList("&eUsage: &6/res lists apply ")); + LocaleManager.addTabCompleteSub(this, "apply", "", "[cresidence]"); - c.get("set.Description", "Set a flag"); - c.get("set.Info", Arrays.asList("&eUsage: &6/res lists set ")); - LocaleManager.addTabCompleteSub(this, "set", "", "[flag]", "true%%false%%remove"); + c.get("set.Description", "Set a flag"); + c.get("set.Info", Arrays.asList("&eUsage: &6/res lists set ")); + LocaleManager.addTabCompleteSub(this, "set", "", "[flag]", "true%%false%%remove"); - c.get("pset.Description", "Set a player flag"); - c.get("pset.Info", Arrays.asList("&eUsage: &6/res lists pset ")); - LocaleManager.addTabCompleteSub(this, "pset", "", "[flag]", "true%%false%%remove"); + c.get("pset.Description", "Set a player flag"); + c.get("pset.Info", Arrays.asList("&eUsage: &6/res lists pset ")); + LocaleManager.addTabCompleteSub(this, "pset", "", "[flag]", "true%%false%%remove"); - c.get("gset.Description", "Set a group flag"); - c.get("gset.Info", Arrays.asList("&eUsage: &6/res lists gset ")); - LocaleManager.addTabCompleteSub(this, "gset", "", "", "[flag]", "true%%false%%remove"); + c.get("gset.Description", "Set a group flag"); + c.get("gset.Info", Arrays.asList("&eUsage: &6/res lists gset ")); + LocaleManager.addTabCompleteSub(this, "gset", "", "", "[flag]", "true%%false%%remove"); - c.get("view.Description", "View a list."); - c.get("view.Info", Arrays.asList("&eUsage: &6/res lists view ")); - LocaleManager.addTabCompleteSub(this, "view"); + c.get("view.Description", "View a list."); + c.get("view.Info", Arrays.asList("&eUsage: &6/res lists view ")); + LocaleManager.addTabCompleteSub(this, "view"); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index efd62cb86..6e0e266bb 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1861,10 +1861,10 @@ public static ClaimedResidence load(String worldName, Map root, // Defaulting to first one if not present if (defaultGroup != null) { if (res.enterMessage == null) { - res.enterMessage = defaultGroup.getDefaultEnterMessage().replace("\n", "\\n"); + res.enterMessage = defaultGroup.getDefaultEnterMessage().replace("\n", "\\n").replace("%subtitle%", "\\n"); } if (res.leaveMessage == null) - res.leaveMessage = defaultGroup.getDefaultLeaveMessage().replace("\n", "\\n"); + res.leaveMessage = defaultGroup.getDefaultLeaveMessage().replace("\n", "\\n").replace("%subtitle%", "\\n"); } } From 52972fd09a53aa6662b2367b2a07951b70cd391f Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 8 Aug 2023 18:09:35 +0300 Subject: [PATCH 1052/1142] Cake, candle and candled cake support. CMILib update required. --- .../listeners/ResidencePlayerListener.java | 17 ++++++++++++++--- .../residence/protection/FlagPermissions.java | 10 ++++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9b39b5095..095d28c7b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -967,7 +967,6 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { switch (mat.name()) { case "ITEM_FRAME": - case "CAKE": case "BEACON": case "FLOWER_POT": case "COMMAND": @@ -1000,8 +999,19 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { } CMIMaterial cmat = CMIMaterial.get(mat); - if (cmat != null && cmat.isPotted()) { - return true; + if (cmat != null) { + + if (cmat.isPotted()) + return true; + + if (cmat.isCake()) + return true; + + if (cmat.isCandle()) + return true; + + if (cmat.isCandleCake()) + return true; } return plugin.getConfigManager().getCustomRightClick().contains(CMIMaterial.get(block)); @@ -1431,6 +1441,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } if (isContainer(mat, block) || isCanUseEntity(mat, block)) { + boolean hasuse = perms.playerHas(player, Flags.use, true); ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index ad6eb1656..c7eca18dc 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -236,6 +236,13 @@ public static void initValidFlags() { if (one.isPotted()) matUseFlagList.put(one.getMaterial(), Flags.flowerpot); + + if (one.isCake()) + addMaterialToUseFlag(one.getMaterial(), Flags.cake); + + if (one.isCandle()) + addMaterialToUseFlag(one.getMaterial(), Flags.use); + } if (CMIMaterial.DAYLIGHT_DETECTOR.getMaterial() != null) @@ -246,7 +253,6 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.LEVER, Flags.lever); addMaterialToUseFlag(Material.BREWING_STAND, Flags.brew); - addMaterialToUseFlag(Material.CAKE, Flags.cake); addMaterialToUseFlag(Material.NOTE_BLOCK, Flags.note); addMaterialToUseFlag(Material.DRAGON_EGG, Flags.egg); addMaterialToUseFlag(CMIMaterial.COMMAND_BLOCK.getMaterial(), Flags.commandblock); @@ -278,7 +284,7 @@ public static void initValidFlags() { addMaterialToUseFlag(CMIMaterial.SMOKER.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.COMPOSTER.getMaterial(), Flags.container); addMaterialToUseFlag(CMIMaterial.STONECUTTER.getMaterial(), Flags.container); - + addMaterialToUseFlag(CMIMaterial.CHISELED_BOOKSHELF.getMaterial(), Flags.container); addMaterialToUseFlag(Material.DISPENSER, Flags.container); From 3f59d199713a396f475b9532d1c97a09811c28c7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Aug 2023 13:17:22 +0300 Subject: [PATCH 1053/1142] More efficient way to check residence areas for mob removal --- .../bekvon/bukkit/residence/gui/FlagUtil.java | 1 - .../listeners/ResidencePlayerListener.java | 17 ++++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 4282ddf9c..0af57b3ab 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -16,7 +16,6 @@ import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.GUI.CMIGui; import net.Zrips.CMILib.GUI.CMIGuiButton; -import net.Zrips.CMILib.GUI.GUIManager.GUIClickType; import net.Zrips.CMILib.GUI.GUIManager.GUIRows; import net.Zrips.CMILib.Items.CMIAsyncHead; import net.Zrips.CMILib.Items.CMIItemStack; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 095d28c7b..03b8582d9 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -56,6 +57,7 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; +import org.bukkit.util.BoundingBox; import org.bukkit.util.Vector; import com.bekvon.bukkit.residence.ConfigManager; @@ -2795,6 +2797,8 @@ public void DespawnMobs() { residences.add(res); } + CMIDebug.d(residences.size()); + for (ClaimedResidence res : residences) { Set entities = new HashSet(); @@ -2803,11 +2807,18 @@ public void DespawnMobs() { if (world == null) continue; - for (CuboidArea area : res.getAreaMap().values()) { - for (ChunkRef chunk : area.getChunks()) { - entities.addAll(Arrays.asList(world.getChunkAt(chunk.getX(), chunk.getZ()).getEntities())); + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + for (CuboidArea area : res.getAreaMap().values()) { + entities.addAll(world.getNearbyEntities(BoundingBox.of(area.getLowVector(), area.getHighVector()))); + } + } else { + for (CuboidArea area : res.getAreaMap().values()) { + for (ChunkRef chunk : area.getChunks()) { + entities.addAll(Arrays.asList(world.getChunkAt(chunk.getX(), chunk.getZ()).getEntities())); + } } } + for (Entity ent : entities) { if (!ResidenceEntityListener.isMonster(ent)) continue; From 0c3f27d46a7ac68b7c156a752bc7b07424638006 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Aug 2023 15:12:34 +0300 Subject: [PATCH 1054/1142] Camp fire and soul camp fire under Use flag --- .../listeners/ResidencePlayerListener.java | 13 ++--- .../residence/protection/FlagPermissions.java | 51 ++++++++++++------- .../protection/ResidenceManager.java | 13 +++-- .../slimeFun/SlimeFunResidenceModule.java | 1 - 4 files changed, 47 insertions(+), 31 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 03b8582d9..2d308c7ac 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1014,6 +1014,9 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { if (cmat.isCandleCake()) return true; + + if (cmat.equals(CMIMaterial.CAMPFIRE) || cmat.equals(CMIMaterial.SOUL_CAMPFIRE)) + return true; } return plugin.getConfigManager().getCustomRightClick().contains(CMIMaterial.get(block)); @@ -2395,6 +2398,9 @@ public void run() { return true; } + boolean cantMove = res != null && Flags.move.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) + && !ResPerm.admin_move.hasPermission(player, 10000L); + if (move) { if (res.getRaid().isUnderRaid()) { if (res.getRaid().isAttacker(player.getUniqueId()) || res.getRaid().isDefender(player.getUniqueId())) { @@ -2451,8 +2457,7 @@ public void run() { return teleported; } - if (Flags.move.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move - .hasPermission(player, 10000L)) { + if (cantMove) { Location lastLoc = lastOutsideLoc.get(uuid); @@ -2548,8 +2553,6 @@ public void run() { } } - boolean cantMove = res != null && Flags.move.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) - && !ResPerm.admin_move.hasPermission(player, 10000L); if (!cantMove) { lastOutsideLoc.put(uuid, loc); @@ -2797,8 +2800,6 @@ public void DespawnMobs() { residences.add(res); } - CMIDebug.d(residences.size()); - for (ClaimedResidence res : residences) { Set entities = new HashSet(); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index c7eca18dc..9b4ca8529 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -34,10 +34,12 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.PageInfo; +import net.Zrips.CMILib.Items.CMIMC; import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Locale.LC; import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; +import net.Zrips.CMILib.Version.Version; public class FlagPermissions { @@ -237,12 +239,17 @@ public static void initValidFlags() { if (one.isPotted()) matUseFlagList.put(one.getMaterial(), Flags.flowerpot); - if (one.isCake()) + if (one.containsCriteria(CMIMC.CAKE)) addMaterialToUseFlag(one.getMaterial(), Flags.cake); - - if (one.isCandle()) - addMaterialToUseFlag(one.getMaterial(), Flags.use); - + + if (Version.isCurrentEqualOrHigher(Version.v1_17_R1)) { + if (one.isCandle()) + addMaterialToUseFlag(one.getMaterial(), Flags.use); + + if (one.containsCriteria(CMIMC.CANDLECAKE)) + addMaterialToUseFlag(one.getMaterial(), Flags.cake); + } + } if (CMIMaterial.DAYLIGHT_DETECTOR.getMaterial() != null) @@ -271,21 +278,31 @@ public static void initValidFlags() { addMaterialToUseFlag(Material.FURNACE, Flags.container); addMaterialToUseFlag(CMIMaterial.LEGACY_BURNING_FURNACE.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.BARREL.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.BLAST_FURNACE.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.CARTOGRAPHY_TABLE.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.FLETCHING_TABLE.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.GRINDSTONE.getMaterial(), Flags.container); + if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) { + addMaterialToUseFlag(CMIMaterial.LECTERN.getMaterial(), Flags.use); - addMaterialToUseFlag(CMIMaterial.LECTERN.getMaterial(), Flags.use); + addMaterialToUseFlag(CMIMaterial.BARREL.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.BLAST_FURNACE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.CARTOGRAPHY_TABLE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.FLETCHING_TABLE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.GRINDSTONE.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.LOOM.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.SMITHING_TABLE.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.SMOKER.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.COMPOSTER.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.STONECUTTER.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.LOOM.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.SMITHING_TABLE.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.SMOKER.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.COMPOSTER.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.STONECUTTER.getMaterial(), Flags.container); - addMaterialToUseFlag(CMIMaterial.CHISELED_BOOKSHELF.getMaterial(), Flags.container); + addMaterialToUseFlag(CMIMaterial.CAMPFIRE.getMaterial(), Flags.use); + } + + if (Version.isCurrentEqualOrHigher(Version.v1_16_R1)) { + addMaterialToUseFlag(CMIMaterial.SOUL_CAMPFIRE.getMaterial(), Flags.use); + } + + if (Version.isCurrentEqualOrHigher(Version.v1_20_R1)) { + addMaterialToUseFlag(CMIMaterial.CHISELED_BOOKSHELF.getMaterial(), Flags.container); + } addMaterialToUseFlag(Material.DISPENSER, Flags.container); // addMaterialToUseFlag(CMIMaterial.CAKE.getMaterial(), Flags.cake); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 8d60e2341..67cd4e839 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -11,7 +11,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import java.util.SortedMap; import java.util.TreeMap; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -53,11 +52,9 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import com.bekvon.bukkit.residence.utils.GetTime; -import net.Zrips.CMILib.CMILib; import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.CMINumber; import net.Zrips.CMILib.Container.PageInfo; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Version.Version; @@ -114,10 +111,12 @@ public ClaimedResidence getByLoc(Location loc) { for (ClaimedResidence residence : residences) { if (residence == null) continue; - if (residence.containsLoc(loc)) { - ClaimedResidence subres = residence.getSubzoneByLoc(loc); - return subres == null ? residence : subres; - } + if (!residence.containsLoc(loc)) + continue; + + ClaimedResidence subres = residence.getSubzoneByLoc(loc); + return subres == null ? residence : subres; + } return null; } diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index 1072756c8..788ec9e97 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -42,7 +42,6 @@ public boolean hasPermission(OfflinePlayer op, Location loc, Interaction action) switch (action) { case INTERACT_BLOCK: - CMIDebug.d(action); ClaimedResidence res = residence.getResidenceManager().getByLoc(loc); if (res != null) { boolean allow = res.getPermissions().playerHas(ResidencePlayer.get(op.getUniqueId()), Flags.container, false); From 3acfb85ee5e4c18ac5f15f40ba31a0d8c79ae9c7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Aug 2023 15:31:17 +0300 Subject: [PATCH 1055/1142] Lets pick fallback location based on residence world and not players --- .../bukkit/residence/protection/ClaimedResidence.java | 11 +++++++---- .../residence/protection/ResidencePermissions.java | 6 ++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 6e0e266bb..e57861135 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -76,7 +76,6 @@ public class ClaimedResidence { protected double BlockSellPrice = 0.0; protected Vector tpLoc; protected Vector PitchYaw; - protected World world; protected String enterMessage; protected String leaveMessage; protected String ShopDesc = null; @@ -1089,7 +1088,8 @@ public Location getMiddleFreeLoc(Location insideLoc, Player player) { public Location getOutsideFreeLoc(Location insideLoc, Player player) { CuboidArea area = this.getAreaByLoc(insideLoc); if (area == null) { - return player.getWorld().getSpawnLocation(); + World bw = this.getPermissions().getBukkitWorld(); + return bw != null ? bw.getSpawnLocation() != null ? bw.getSpawnLocation() : player.getWorld().getSpawnLocation() : player.getWorld().getSpawnLocation(); } List randomLocList = new ArrayList(); @@ -1170,7 +1170,10 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { if (Residence.getInstance().getConfigManager().getKickLocation() != null) return Residence.getInstance().getConfigManager().getKickLocation(); // Fail safe for kick out location - return player.getWorld().getSpawnLocation(); + + World bw = this.getPermissions().getBukkitWorld(); + + return bw != null ? bw.getSpawnLocation() != null ? bw.getSpawnLocation() : player.getWorld().getSpawnLocation() : player.getWorld().getSpawnLocation(); } if (player != null) { loc.setPitch(player.getLocation().getPitch()); @@ -1335,7 +1338,7 @@ public void setTpLoc(Player player, boolean resadmin) { return; } - world = player.getWorld(); +// world = player.getWorld(); tpLoc = player.getLocation().toVector(); PitchYaw = new Vector(player.getLocation().getPitch(), player.getLocation().getYaw(), 0); Residence.getInstance().msg(player, lm.Residence_SetTeleportLocation); diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index bcc368a58..43d8c79bc 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -8,7 +8,9 @@ import java.util.Set; import java.util.UUID; +import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; +import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -741,6 +743,10 @@ public String getWorldName() { return world; } + public World getBukkitWorld() { + return Bukkit.getWorld(world); + } + @Override public Map save(String world) { Map root = super.save(this.world); From b628825f225997c063820d3d12fd982a7c459053 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Aug 2023 15:48:59 +0300 Subject: [PATCH 1056/1142] Residence teleport location limit under 30 000 000 coordinates Lets recalculate residence tp location if it became outside of residence due to residence shifting --- .../bukkit/residence/protection/ClaimedResidence.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e57861135..1fa48e5e8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1306,9 +1306,10 @@ public int getZoneDepth() { // } public Location getTeleportLocation(Player player) { - if (tpLoc == null) { + if (tpLoc == null || this.getMainArea() != null && !this.containsLoc(new Location(this.getMainArea().getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()))) { + if (this.getMainArea() == null) - return null; + return null; Location low = this.getMainArea().getLowLocation(); Location high = this.getMainArea().getHighLocation(); Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, @@ -1445,6 +1446,11 @@ else if (distance == 555) Location loc = this.getTeleportLocation(targetPlayer); + if (Math.abs(loc.getBlockX()) > 30000000 || Math.abs(loc.getBlockY()) > 30000000) { + Residence.getInstance().msg(reqPlayer, lm.Invalid_Area); + return; + } + if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) performDelaydTp(loc, targetPlayer, reqPlayer, true); else From 2cf03e348dfda442f72a4f31ff89537a5ed89f89 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Aug 2023 15:53:25 +0300 Subject: [PATCH 1057/1142] lets not allow residence creation outside 30 000 000 coordinate bounds --- .../residence/protection/ClaimedResidence.java | 14 +++++++++++--- .../residence/protection/ResidenceManager.java | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 1fa48e5e8..c04565e0a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -356,6 +356,14 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa return false; } + if (Math.abs(area.getLowVector().getBlockX()) > 30000000 || Math.abs(area.getHighVector().getBlockX()) > 30000000 || + Math.abs(area.getLowVector().getBlockZ()) > 30000000 || Math.abs(area.getHighVector().getBlockZ()) > 30000000) { + if (player != null) { + Residence.getInstance().msg(player, lm.Invalid_Area); + } + return false; + } + String NName = name; name = name.toLowerCase(); @@ -1307,9 +1315,9 @@ public int getZoneDepth() { public Location getTeleportLocation(Player player) { if (tpLoc == null || this.getMainArea() != null && !this.containsLoc(new Location(this.getMainArea().getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()))) { - + if (this.getMainArea() == null) - return null; + return null; Location low = this.getMainArea().getLowLocation(); Location high = this.getMainArea().getHighLocation(); Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, @@ -1446,7 +1454,7 @@ else if (distance == 555) Location loc = this.getTeleportLocation(targetPlayer); - if (Math.abs(loc.getBlockX()) > 30000000 || Math.abs(loc.getBlockY()) > 30000000) { + if (Math.abs(loc.getBlockX()) > 30000000 || Math.abs(loc.getBlockZ()) > 30000000) { Residence.getInstance().msg(reqPlayer, lm.Invalid_Area); return; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 67cd4e839..1e6a97966 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -270,6 +270,8 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String plugin.msg(player, lm.Residence_AlreadyExists, residences.get(resName.toLowerCase()).getResidenceName()); return false; } + + newRes.BlockSellPrice = group.getSellPerBlock(); From a5d95f6054e2aaa9ca57594e7d39bc31112361cb Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Aug 2023 16:24:35 +0300 Subject: [PATCH 1058/1142] Enter leave messages Id start from 1 --- .../containers/MinimizeMessages.java | 31 +++++++------------ .../protection/ClaimedResidence.java | 6 ++-- .../protection/ResidenceManager.java | 2 +- 3 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/MinimizeMessages.java b/src/com/bekvon/bukkit/residence/containers/MinimizeMessages.java index be3c3f7a3..8ab09ea04 100644 --- a/src/com/bekvon/bukkit/residence/containers/MinimizeMessages.java +++ b/src/com/bekvon/bukkit/residence/containers/MinimizeMessages.java @@ -5,43 +5,36 @@ public class MinimizeMessages { private String enter = ""; private String leave = ""; -// private int repeat = 0; private int id = 0; public MinimizeMessages(int id, String enter, String leave) { - this.id = id; - this.enter = enter; - this.leave = leave; -// repeat++; + this.id = id; + this.enter = enter; + this.leave = leave; } public boolean same(String enter, String leave) { - return this.enter.equals(enter) && this.leave.equals(leave); + return this.enter.equals(enter) && this.leave.equals(leave); } public boolean add(String enter, String leave) { - if (!same(enter, leave)) - return false; - this.enter = enter; - this.leave = leave; -// repeat++; - return true; + if (!same(enter, leave)) + return false; + this.enter = enter; + this.leave = leave; + return true; } -// public int getRepeat() { -// return repeat; -// } - public int getId() { - return id; + return id; } public String getEnter() { - return enter; + return enter; } public String getLeave() { - return leave; + return leave; } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index c04565e0a..d4813768a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -76,8 +76,8 @@ public class ClaimedResidence { protected double BlockSellPrice = 0.0; protected Vector tpLoc; protected Vector PitchYaw; - protected String enterMessage; - protected String leaveMessage; + protected String enterMessage = null; + protected String leaveMessage = null; protected String ShopDesc = null; protected String ChatPrefix = ""; protected CMIChatColor ChannelColor = CMIChatColor.WHITE; @@ -1613,7 +1613,7 @@ public Map save() { if (leaveMessage != null) root.put("LeaveMessage", leaveMessage); } else { - if (min.getId() > 1) + if (min.getId() > 0) root.put("Messages", min.getId()); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 1e6a97966..25b7dea02 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -973,7 +973,7 @@ public HashMap getMessageCatch(String world) { if (ls == null) return null; for (MinimizeMessages one : ls) { - Map root = new HashMap<>(); + Map root = new HashMap<>(); root.put("EnterMessage", one.getEnter()); root.put("LeaveMessage", one.getLeave()); t.put(one.getId(), root); From a7870cce2ba49f90512d16d4ee4d8ad7dc150483 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 9 Aug 2023 16:34:53 +0300 Subject: [PATCH 1059/1142] Version up --- .../bekvon/bukkit/residence/containers/MinimizeMessages.java | 4 ++-- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 2 +- src/plugin.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/MinimizeMessages.java b/src/com/bekvon/bukkit/residence/containers/MinimizeMessages.java index 8ab09ea04..f41307bc8 100644 --- a/src/com/bekvon/bukkit/residence/containers/MinimizeMessages.java +++ b/src/com/bekvon/bukkit/residence/containers/MinimizeMessages.java @@ -9,8 +9,8 @@ public class MinimizeMessages { public MinimizeMessages(int id, String enter, String leave) { this.id = id; - this.enter = enter; - this.leave = leave; + this.enter = enter == null ? "" : enter; + this.leave = leave == null ? "" : leave; } public boolean same(String enter, String leave) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index d4813768a..b04aafc2f 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1604,7 +1604,7 @@ public Map save() { try { if (Residence.getInstance().getConfigManager().isNewSaveMechanic()) { - if (enterMessage != null && leaveMessage != null) { + if (enterMessage != null || leaveMessage != null) { MinimizeMessages min = Residence.getInstance().getResidenceManager().addMessageToTempCache(this.getWorld(), enterMessage, leaveMessage); if (min == null) { diff --git a/src/plugin.yml b/src/plugin.yml index c03063dce..23b7d3e18 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.2.1 +version: 5.1.2.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 70ba899949c2007e626950c2c5f9039241e5457f Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 11 Aug 2023 11:42:31 +0300 Subject: [PATCH 1060/1142] Lets default messages to empty ones --- src/com/bekvon/bukkit/residence/commands/contract.java | 2 +- src/com/bekvon/bukkit/residence/commands/expand.java | 2 +- .../bekvon/bukkit/residence/permissions/PermissionGroup.java | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/contract.java b/src/com/bekvon/bukkit/residence/commands/contract.java index 2eb07140a..45489995c 100644 --- a/src/com/bekvon/bukkit/residence/commands/contract.java +++ b/src/com/bekvon/bukkit/residence/commands/contract.java @@ -78,7 +78,7 @@ else if (args.length == 2) return true; } - if (amount > 1000) { + if (amount > 100) { plugin.msg(player, lm.Invalid_Amount); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 0d38e6622..424bc39bc 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -82,7 +82,7 @@ else if (args.length == 2) return true; } - if (amount > 1000) { + if (amount > 100) { plugin.msg(player, lm.Invalid_Amount); return true; } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 0b431811d..3a3428398 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -408,10 +408,14 @@ public boolean canSetEnterLeaveMessages() { } public String getDefaultEnterMessage() { + if (defaultEnterMessage == null) + return ""; return defaultEnterMessage; } public String getDefaultLeaveMessage() { + if (defaultLeaveMessage == null) + return ""; return defaultLeaveMessage; } From bfb2032d9a845f3b039e9bce25bfb0d4bc017602 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 11 Aug 2023 11:58:52 +0300 Subject: [PATCH 1061/1142] Lets not teleport to spawn if we can't determine tp location --- .../bukkit/residence/containers/lm.java | 1 + .../protection/ClaimedResidence.java | 30 +++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 434a26873..eb362ba65 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -21,6 +21,7 @@ public enum lm { Invalid_Boolean("&cInvalid value, must be &6true(t) &cor &6false(f)"), Invalid_Area("&cInvalid Area..."), Invalid_Group("&cInvalid Group..."), + Invalid_Location("&cInvalid Location..."), Invalid_MessageType("&cMessage type must be enter or remove."), Invalid_Flag("&cInvalid Flag..."), Invalid_FlagType_Fail("&cInvalid Flag... This flag can only be used on %1"), diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index b04aafc2f..96c2ba6ec 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1034,6 +1034,10 @@ public void setEnterLeaveMessage(CommandSender sender, String message, boolean e } public Location getMiddleFreeLoc(Location insideLoc, Player player) { + return getMiddleFreeLoc(insideLoc, player, true); + } + + public Location getMiddleFreeLoc(Location insideLoc, Player player, boolean toSpawnOnFail) { if (insideLoc == null) return null; CuboidArea area = this.getAreaByLoc(insideLoc); @@ -1090,12 +1094,19 @@ public Location getMiddleFreeLoc(Location insideLoc, Player player) { } return newLoc; } - return getOutsideFreeLoc(insideLoc, player); + return getOutsideFreeLoc(insideLoc, player, toSpawnOnFail); } + @Deprecated public Location getOutsideFreeLoc(Location insideLoc, Player player) { + return getOutsideFreeLoc(insideLoc, player, true); + } + + public Location getOutsideFreeLoc(Location insideLoc, Player player, boolean toSpawnOnFail) { CuboidArea area = this.getAreaByLoc(insideLoc); if (area == null) { + if (!toSpawnOnFail) + return null; World bw = this.getPermissions().getBukkitWorld(); return bw != null ? bw.getSpawnLocation() != null ? bw.getSpawnLocation() : player.getWorld().getSpawnLocation() : player.getWorld().getSpawnLocation(); } @@ -1179,6 +1190,9 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player) { return Residence.getInstance().getConfigManager().getKickLocation(); // Fail safe for kick out location + if (!toSpawnOnFail) + return null; + World bw = this.getPermissions().getBukkitWorld(); return bw != null ? bw.getSpawnLocation() != null ? bw.getSpawnLocation() : player.getWorld().getSpawnLocation() : player.getWorld().getSpawnLocation(); @@ -1313,7 +1327,12 @@ public int getZoneDepth() { // return getTeleportLocation(null); // } + @Deprecated public Location getTeleportLocation(Player player) { + return getTeleportLocation(player, true); + } + + public Location getTeleportLocation(Player player, boolean toSpawnOnFail) { if (tpLoc == null || this.getMainArea() != null && !this.containsLoc(new Location(this.getMainArea().getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()))) { if (this.getMainArea() == null) @@ -1322,7 +1341,7 @@ public Location getTeleportLocation(Player player) { Location high = this.getMainArea().getHighLocation(); Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); - tpLoc = this.getMiddleFreeLoc(t, player).toVector(); + tpLoc = this.getMiddleFreeLoc(t, player, toSpawnOnFail).toVector(); } if (tpLoc != null) { @@ -1452,7 +1471,12 @@ else if (distance == 555) Residence.getInstance().getTeleportDelayMap().add(reqPlayer.getName()); } - Location loc = this.getTeleportLocation(targetPlayer); + Location loc = this.getTeleportLocation(targetPlayer, false); + + if (loc == null) { + Residence.getInstance().msg(reqPlayer, lm.Invalid_Location); + return; + } if (Math.abs(loc.getBlockX()) > 30000000 || Math.abs(loc.getBlockZ()) > 30000000) { Residence.getInstance().msg(reqPlayer, lm.Invalid_Area); From 976b0dae0f1edb16f08771a25521ff2c948aec2d Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 11 Aug 2023 12:12:02 +0300 Subject: [PATCH 1062/1142] Cleanup --- .../bukkit/residence/commands/compass.java | 64 +++++----- .../bukkit/residence/commands/kick.java | 117 +++++++++--------- .../bukkit/residence/commands/unstuck.java | 49 ++++---- .../listeners/ResidencePlayerListener.java | 30 ++--- .../protection/ClaimedResidence.java | 32 +++-- .../bukkit/residence/raid/ResidenceRaid.java | 2 +- 6 files changed, 156 insertions(+), 138 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index 5432410c5..b63d2581e 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -22,41 +22,41 @@ public class compass implements cmd { @CommandAnnotation(simple = true, priority = 3200, consoleVar = { 666 }) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - Player player = (Player) sender; - - if (args.length != 1) { - player.setCompassTarget(player.getWorld().getSpawnLocation()); - plugin.msg(player, lm.General_CompassTargetReset); - return true; - } - - if (!ResPerm.command_$1.hasPermission(sender, this.getClass().getSimpleName())) - return null; - - ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); - - if (res == null || !res.getWorld().equalsIgnoreCase(player.getWorld().getName())) { - plugin.msg(player, lm.Invalid_Residence); - return null; - } - - CuboidArea area = res.getMainArea(); - if (area == null) - return false; - Location loc = res.getTeleportLocation(player); - if (loc == null) - return false; - player.setCompassTarget(loc); - plugin.msg(player, lm.General_CompassTargetSet, args[0]); - - return true; + Player player = (Player) sender; + + if (args.length != 1) { + player.setCompassTarget(player.getWorld().getSpawnLocation()); + plugin.msg(player, lm.General_CompassTargetReset); + return true; + } + + if (!ResPerm.command_$1.hasPermission(sender, this.getClass().getSimpleName())) + return null; + + ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); + + if (res == null || !res.getWorld().equalsIgnoreCase(player.getWorld().getName())) { + plugin.msg(player, lm.Invalid_Residence); + return null; + } + + CuboidArea area = res.getMainArea(); + if (area == null) + return false; + Location loc = res.getTeleportLocation(player, false); + if (loc == null) + return false; + player.setCompassTarget(loc); + plugin.msg(player, lm.General_CompassTargetSet, args[0]); + + return true; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Set compass pointer to residence location"); - c.get("Info", Arrays.asList("&eUsage: &6/res compass ")); - LocaleManager.addTabCompleteMain(this, "[residence]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Set compass pointer to residence location"); + c.get("Info", Arrays.asList("&eUsage: &6/res compass ")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 171a0c46c..e1341e061 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -24,66 +24,69 @@ public class kick implements cmd { @Override @CommandAnnotation(simple = true, priority = 2200) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - if (args.length != 1) - return false; - - Player targetplayer = Bukkit.getPlayer(args[0]); - if (targetplayer == null || !player.canSee(targetplayer)) { - plugin.msg(player, lm.General_NotOnline); - return true; - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - - PermissionGroup group = rPlayer.getGroup(); - - if (!group.hasKickAccess() && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return true; - } - - ClaimedResidence res = plugin.getResidenceManager().getByLoc(targetplayer.getLocation()); - - if (res == null || !res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { - plugin.msg(player, lm.Residence_PlayerNotIn); - return true; - } - - if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.admin, false)) - return false; - - if (res.getRaid().isRaidInitialized()) { - plugin.msg(sender, lm.Raid_cantDo); - return true; - } - - if (res.getPlayersInResidence().contains(targetplayer)) { - - if (ResPerm.command_kick_bypass.hasPermission(targetplayer)) { - plugin.msg(sender, lm.Residence_CantKick); - return true; - } - Location loc = plugin.getConfigManager().getKickLocation(); - targetplayer.closeInventory(); - if (loc != null) - targetplayer.teleport(loc); - else - targetplayer.teleport(res.getOutsideFreeLoc(player.getLocation(), player)); - plugin.msg(targetplayer, lm.Residence_Kicked); - } - return true; + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + if (args.length != 1) + return false; + + Player targetplayer = Bukkit.getPlayer(args[0]); + if (targetplayer == null || !player.canSee(targetplayer)) { + plugin.msg(player, lm.General_NotOnline); + return true; + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); + + if (!group.hasKickAccess() && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return true; + } + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(targetplayer.getLocation()); + + if (res == null || !res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { + plugin.msg(player, lm.Residence_PlayerNotIn); + return true; + } + + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.admin, false)) + return false; + + if (res.getRaid().isRaidInitialized()) { + plugin.msg(sender, lm.Raid_cantDo); + return true; + } + + if (res.getPlayersInResidence().contains(targetplayer)) { + + if (ResPerm.command_kick_bypass.hasPermission(targetplayer)) { + plugin.msg(sender, lm.Residence_CantKick); + return true; + } + Location loc = plugin.getConfigManager().getKickLocation(); + targetplayer.closeInventory(); + if (loc != null) + targetplayer.teleport(loc); + else { + loc = res.getOutsideFreeLoc(player.getLocation(), player, true); + if (loc != null) + targetplayer.teleport(loc); + } + plugin.msg(targetplayer, lm.Residence_Kicked); + } + return true; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Kicks player from residence."); - c.get("Info", Arrays.asList("&eUsage: &6/res kick ", "You must be the owner or an admin to do this.", "Player should be online.")); - LocaleManager.addTabCompleteMain(this, "[playername]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Kicks player from residence."); + c.get("Info", Arrays.asList("&eUsage: &6/res kick ", "You must be the owner or an admin to do this.", "Player should be online.")); + LocaleManager.addTabCompleteMain(this, "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index 29cb62ce8..0b05e64de 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -2,6 +2,7 @@ import java.util.Arrays; +import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -19,32 +20,34 @@ public class unstuck implements cmd { @Override @CommandAnnotation(simple = true, priority = 4000) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - - if (!group.hasUnstuckAccess() && !plugin.isResAdminOn(player)) { - plugin.msg(player, lm.General_NoPermission); - return true; - } - ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (res == null) { - plugin.msg(player, lm.Residence_NotIn); - } else { - plugin.msg(player, lm.General_Moved); - player.teleport(res.getOutsideFreeLoc(player.getLocation(), player)); - } - return true; + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + + if (!group.hasUnstuckAccess() && !plugin.isResAdminOn(player)) { + plugin.msg(player, lm.General_NoPermission); + return true; + } + ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { + plugin.msg(player, lm.Residence_NotIn); + } else { + plugin.msg(player, lm.General_Moved); + Location loc = res.getOutsideFreeLoc(player.getLocation(), player, true); + if (loc != null) + player.teleport(loc); + } + return true; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Teleports outside of residence"); - c.get("Info", Arrays.asList("&eUsage: &6/res unstuck")); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Teleports outside of residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res unstuck")); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 2d308c7ac..eaa54539b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -952,11 +952,12 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { } res = plugin.getResidenceManager().getByLoc(loc); if (res != null && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse)) { - loc = res.getOutsideFreeLoc(loc, player); + loc = res.getOutsideFreeLoc(loc, player, true); } plugin.msg(player, lm.General_NoSpawn); - event.setRespawnLocation(loc); + if (loc != null) + event.setRespawnLocation(loc); } @@ -1014,9 +1015,9 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { if (cmat.isCandleCake()) return true; - + if (cmat.equals(CMIMaterial.CAMPFIRE) || cmat.equals(CMIMaterial.SOUL_CAMPFIRE)) - return true; + return true; } return plugin.getConfigManager().getCustomRightClick().contains(CMIMaterial.get(block)); @@ -2400,7 +2401,7 @@ public void run() { boolean cantMove = res != null && Flags.move.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !plugin.isResAdminOn(player) && !res.isOwner(player) && !ResPerm.admin_move.hasPermission(player, 10000L); - + if (move) { if (res.getRaid().isUnderRaid()) { if (res.getRaid().isAttacker(player.getUniqueId()) || res.getRaid().isDefender(player.getUniqueId())) { @@ -2418,7 +2419,7 @@ public void run() { ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); boolean teleported = false; if (preRes != null && Flags.tp.isGlobalyEnabled() && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { - Location newLoc = res.getOutsideFreeLoc(loc, player); + Location newLoc = res.getOutsideFreeLoc(loc, player, true); player.closeInventory(); teleported = teleport(player, newLoc); } @@ -2428,14 +2429,14 @@ public void run() { StuckInfo info = updateStuckTeleport(player, loc); player.closeInventory(); if (info != null && info.getTimesTeleported() > 5) { - Location newLoc = res.getOutsideFreeLoc(loc, player); + Location newLoc = res.getOutsideFreeLoc(loc, player, true); teleported = teleport(player, newLoc); } else { teleported = teleport(player, lastLoc); } } if (!teleported) { - Location newLoc = res.getOutsideFreeLoc(loc, player); + Location newLoc = res.getOutsideFreeLoc(loc, player, true); player.closeInventory(); teleported = teleport(player, newLoc); } @@ -2471,7 +2472,7 @@ public void run() { ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); boolean teleported = false; if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { - Location newLoc = res.getOutsideFreeLoc(loc, player); + Location newLoc = res.getOutsideFreeLoc(loc, player, true); player.closeInventory(); teleported = teleport(player, newLoc); } @@ -2481,7 +2482,7 @@ public void run() { StuckInfo info = updateStuckTeleport(player, loc); player.closeInventory(); if (info != null && info.getTimesTeleported() > 5) { - Location newLoc = res.getOutsideFreeLoc(loc, player); + Location newLoc = res.getOutsideFreeLoc(loc, player, true); teleported = teleport(player, newLoc); } else { teleported = teleport(player, lastLoc); @@ -2489,7 +2490,7 @@ public void run() { } if (!teleported) { - Location newLoc = res.getOutsideFreeLoc(loc, player); + Location newLoc = res.getOutsideFreeLoc(loc, player, true); player.closeInventory(); teleported = teleport(player, newLoc); } @@ -2537,7 +2538,7 @@ public void run() { if (lastLoc != null) teleported = teleport(player, lastLoc); else - teleported = teleport(player, res.getOutsideFreeLoc(loc, player)); + teleported = teleport(player, res.getOutsideFreeLoc(loc, player, true)); plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); return teleported; @@ -2553,7 +2554,6 @@ public void run() { } } - if (!cantMove) { lastOutsideLoc.put(uuid, loc); } @@ -2569,7 +2569,7 @@ public void run() { Long last = lastUpdate.get(player.getUniqueId()); // Fail safe in case we are triggering teleportation event check with this teleportation, we should teleport player outside residence instead of its repeating teleportation to avoid stack overflow if (last != null && System.currentTimeMillis() - last < 45L) { - teleport(player, res.getOutsideFreeLoc(loc, player)); + teleport(player, res.getOutsideFreeLoc(loc, player, true)); } else { this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); @@ -2586,7 +2586,7 @@ public void run() { teleport(player, lastLoc); } } else { - teleport(player, res.getOutsideFreeLoc(loc, player)); + teleport(player, res.getOutsideFreeLoc(loc, player, true)); } return false; } else { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 96c2ba6ec..1c71e0a78 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1323,10 +1323,6 @@ public int getZoneDepth() { return count; } -// public Location getTeleportLocation() { -// return getTeleportLocation(null); -// } - @Deprecated public Location getTeleportLocation(Player player) { return getTeleportLocation(player, true); @@ -1337,11 +1333,18 @@ public Location getTeleportLocation(Player player, boolean toSpawnOnFail) { if (this.getMainArea() == null) return null; - Location low = this.getMainArea().getLowLocation(); - Location high = this.getMainArea().getHighLocation(); - Location t = new Location(low.getWorld(), (low.getBlockX() + high.getBlockX()) / 2, + Vector low = this.getMainArea().getLowVector(); + Vector high = this.getMainArea().getHighVector(); + + Location t = new Location(this.getMainArea().getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); - tpLoc = this.getMiddleFreeLoc(t, player, toSpawnOnFail).toVector(); + + t = this.getMiddleFreeLoc(t, player, toSpawnOnFail); + + if (t == null) + return null; + + tpLoc = t.toVector(); } if (tpLoc != null) { @@ -1385,7 +1388,10 @@ public int isSafeTp(Player player) { if (tpLoc == null) return 0; - Location tempLoc = this.getTeleportLocation(player).clone(); + Location tempLoc = this.getTeleportLocation(player, false); + + if (tempLoc == null) + return 0; int fallDistance = 0; for (int i = (int) tempLoc.getY(); i >= CMIWorld.getMinHeight(tempLoc.getWorld()); i--) { @@ -2231,7 +2237,13 @@ public boolean kickFromResidence(Player player) { if (loc != null) { return player.teleport(loc); } - return player.teleport(getOutsideFreeLoc(player.getLocation(), player)); + + loc = getOutsideFreeLoc(player.getLocation(), player, true); + + if (loc == null) + return false; + + return player.teleport(loc); } // public Town getTown() { // return town; diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java index 3fcae14d3..ce765cd00 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -236,7 +236,7 @@ public void endRaid() { if (player == null) continue; Residence.getInstance().msg(player, lm.Raid_Ended, res.getName()); - Location outside = res.getOutsideFreeLoc(player.getLocation(), player); + Location outside = res.getOutsideFreeLoc(player.getLocation(), player, true); if (outside != null) player.teleport(outside); } From 281bc6df4c8493769eb9d240e08b40133b228466 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 11 Aug 2023 12:15:01 +0300 Subject: [PATCH 1063/1142] More particles by default --- src/com/bekvon/bukkit/residence/ConfigManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index efc0ca806..dd2d8ee2c 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -1286,17 +1286,17 @@ public void UpdateConfigFile() { c.addComment("Global.Visualizer.updateInterval", "How often in ticks to update particles for player"); VisualizerUpdateInterval = c.get("Global.Visualizer.updateInterval", 20); c.addComment("Global.Visualizer.RowSpacing", "Spacing in blocks between particle effects for rows"); - VisualizerRowSpacing = c.get("Global.Visualizer.RowSpacing", 2); + VisualizerRowSpacing = c.get("Global.Visualizer.RowSpacing", 1); if (VisualizerRowSpacing < 1) VisualizerRowSpacing = 1; c.addComment("Global.Visualizer.CollumnSpacing", "Spacing in blocks between particle effects for collums"); - VisualizerCollumnSpacing = c.get("Global.Visualizer.CollumnSpacing", 2); + VisualizerCollumnSpacing = c.get("Global.Visualizer.CollumnSpacing", 1); if (VisualizerCollumnSpacing < 1) VisualizerCollumnSpacing = 1; c.addComment("Global.Visualizer.SkipBy", "Defines by how many particles we need to skip", "This will create moving particle effect and will improve overall look of selection", "By increasing this number, you can decrease update interval"); - VisualizerSkipBy = c.get("Global.Visualizer.SkipBy", 5); + VisualizerSkipBy = c.get("Global.Visualizer.SkipBy", 2); if (VisualizerSkipBy < 1) VisualizerSkipBy = 1; @@ -1476,7 +1476,7 @@ public void UpdateConfigFile() { Pl3xMapFillForSale = argb(CMINumber.clamp((int) (Pl3xMapFillOpacity * 255), 0, 255), processColor(c.get("Pl3xMap.Fill.ForSale", "#0066ff"))); CMIDebug.d(Pl3xFillColor, Pl3xMapFillForRent, Pl3xMapFillRented, Pl3xMapFillForSale); - + c.addComment("Pl3xMap.VisibleRegions", "Shows only regions on this list"); Pl3xMapVisibleRegions = c.get("Pl3xMap.VisibleRegions", new ArrayList()); c.addComment("Pl3xMap.HiddenRegions", "Hides region on map even if its not hidden in game"); From a10564badcad3c61633f9aee8db84ba97fd790f3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 11 Aug 2023 15:51:44 +0300 Subject: [PATCH 1064/1142] Initial Folia support --- .../bekvon/bukkit/residence/Residence.java | 91 +- .../bukkit/residence/chat/ChatChannel.java | 4 +- .../bukkit/residence/commands/kick.java | 6 +- .../bekvon/bukkit/residence/commands/rt.java | 217 +- .../bukkit/residence/commands/shop.java | 4 +- .../bukkit/residence/commands/unstuck.java | 4 +- .../residence/containers/Visualizer.java | 144 +- .../residence/dynmap/DynMapManager.java | 499 +++-- .../bekvon/bukkit/residence/gui/FlagUtil.java | 5 +- .../listeners/ResidenceBlockListener.java | 6 +- .../listeners/ResidenceLWCListener.java | 177 +- .../listeners/ResidencePlayerListener.java | 359 ++-- .../listeners/ResidencePlayerListener1_9.java | 99 +- .../permissions/PermissionManager.java | 952 +++++---- .../residence/pl3xmap/Pl3xMapManager.java | 18 +- .../protection/ClaimedResidence.java | 89 +- .../protection/ResidenceManager.java | 93 +- .../bukkit/residence/raid/ResidenceRaid.java | 447 ++-- .../residence/selection/SelectionManager.java | 1832 ++++++++--------- .../residence/shopStuff/ShopListener.java | 16 +- .../residence/shopStuff/ShopSignUtil.java | 526 +++-- .../bukkit/residence/signsStuff/SignUtil.java | 9 +- .../residence/slimeFun/SlimefunManager.java | 57 +- .../residence/text/help/InformationPager.java | 500 +++-- .../bukkit/residence/utils/RandomTp.java | 420 ++-- src/com/residence/mcstats/Metrics.java | 788 ++++--- src/plugin.yml | 1 + 27 files changed, 3668 insertions(+), 3695 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index b087e9668..fd0ed0c27 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -136,6 +136,8 @@ import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Schedulers.CMITask; import net.pl3x.map.core.Pl3xMap; /** @@ -205,19 +207,18 @@ public class Residence extends JavaPlugin { protected EconomyInterface economy; private int saveVersion = 1; public File dataFolder; - protected int leaseBukkitId = -1; - protected int rentBukkitId = -1; - protected int healBukkitId = -1; - protected int feedBukkitId = -1; - protected int effectRemoveBukkitId = -1; - - protected int DespawnMobsBukkitId = -1; + protected CMITask leaseBukkitId = null; + protected CMITask rentBukkitId = null; + protected CMITask healBukkitId = null; + protected CMITask feedBukkitId = null; + protected CMITask effectRemoveBukkitId = null; + protected CMITask DespawnMobsBukkitId = null; + protected CMITask autosaveBukkitId = null; private boolean SlimeFun = false; private boolean lwc = false; Metrics metrics = null; - protected int autosaveBukkitId = -1; protected boolean initsuccess = false; public Map deleteConfirm; public Map UnrentConfirm = new HashMap(); @@ -369,14 +370,11 @@ public void run() { public void run() { try { if (initsuccess) { - Bukkit.getScheduler().runTaskAsynchronously(Residence.this, new Runnable() { - @Override - public void run() { - try { - saveYml(); - } catch (IOException e) { - e.printStackTrace(); - } + CMIScheduler.runTaskAsynchronously(() -> { + try { + saveYml(); + } catch (IOException e) { + e.printStackTrace(); } }); } @@ -394,12 +392,16 @@ public void reloadPlugin() { @Override public void onDisable() { - server.getScheduler().cancelTask(autosaveBukkitId); - server.getScheduler().cancelTask(healBukkitId); - server.getScheduler().cancelTask(feedBukkitId); - server.getScheduler().cancelTask(effectRemoveBukkitId); - - server.getScheduler().cancelTask(DespawnMobsBukkitId); + if (autosaveBukkitId != null) + autosaveBukkitId.cancel(); + if (healBukkitId != null) + healBukkitId.cancel(); + if (feedBukkitId != null) + feedBukkitId.cancel(); + if (effectRemoveBukkitId != null) + effectRemoveBukkitId.cancel(); + if (DespawnMobsBukkitId != null) + DespawnMobsBukkitId.cancel(); this.getPermissionManager().stopCacheClearScheduler(); @@ -411,11 +413,11 @@ public void onDisable() { } catch (IOException e) { e.printStackTrace(); } - if (getConfigManager().useLeases()) { - server.getScheduler().cancelTask(leaseBukkitId); + if (getConfigManager().useLeases() && leaseBukkitId != null) { + leaseBukkitId.cancel(); } - if (getConfigManager().enabledRentSystem()) { - server.getScheduler().cancelTask(rentBukkitId); + if (getConfigManager().enabledRentSystem() && rentBukkitId != null) { + rentBukkitId.cancel(); } if (getDynManager() != null && getDynManager().getMarkerSet() != null) @@ -638,17 +640,14 @@ public void onEnable() { } Bukkit.getConsoleSender().sendMessage(getPrefix() + " Player data loaded: " + OfflinePlayerList.size()); } else { - Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() { - @Override - public void run() { - for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { - if (player == null) - continue; - String name = player.getName(); - if (name == null) - continue; - addOfflinePlayerToChache(player); - } + CMIScheduler.runTaskAsynchronously(() -> { + for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { + if (player == null) + continue; + String name = player.getName(); + if (name == null) + continue; + addOfflinePlayerToChache(player); } }); } @@ -726,7 +725,7 @@ public void run() { pm.registerEvents(new ResidencePlayerListener1_17(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_20_R1)) pm.registerEvents(new ResidencePlayerListener1_20(this), this); - + elistener = new ResidenceEntityListener(this); flistener = new ResidenceFixesListener(); slistener = new ResidenceRaidListener(); @@ -809,17 +808,17 @@ public void run() { autosaveInt = 1; } autosaveInt = autosaveInt * 60 * 20; - autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); + autosaveBukkitId = CMIScheduler.scheduleSyncRepeatingTask(autoSave, autosaveInt, autosaveInt); if (getConfigManager().getHealInterval() > 0) - healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, getConfigManager().getHealInterval() * 20); + healBukkitId = CMIScheduler.scheduleSyncRepeatingTask(doHeals, 20, getConfigManager().getHealInterval() * 20); if (getConfigManager().getFeedInterval() > 0) - feedBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doFeed, 20, getConfigManager().getFeedInterval() * 20); + feedBukkitId = CMIScheduler.scheduleSyncRepeatingTask(doFeed, 20, getConfigManager().getFeedInterval() * 20); if (getConfigManager().getSafeZoneInterval() > 0) - effectRemoveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, removeBadEffects, 20, getConfigManager().getSafeZoneInterval() * 20); + effectRemoveBukkitId = CMIScheduler.scheduleSyncRepeatingTask(removeBadEffects, 20, getConfigManager().getSafeZoneInterval() * 20); if (getConfigManager().AutoMobRemoval()) - DespawnMobsBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, DespawnMobs, 20 * getConfigManager().AutoMobRemovalInterval(), 20 + DespawnMobsBukkitId = CMIScheduler.scheduleSyncRepeatingTask(DespawnMobs, 20 * getConfigManager().AutoMobRemovalInterval(), 20 * getConfigManager().AutoMobRemovalInterval()); if (getConfigManager().useLeases()) { @@ -828,7 +827,7 @@ public void run() { leaseInterval = 1; } leaseInterval = leaseInterval * 60 * 20; - leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval); + leaseBukkitId = CMIScheduler.scheduleSyncRepeatingTask(leaseExpire, leaseInterval, leaseInterval); } if (getConfigManager().enabledRentSystem()) { int rentint = getConfigManager().getRentCheckInterval(); @@ -836,7 +835,7 @@ public void run() { rentint = 1; } rentint = rentint * 60 * 20; - rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); + rentBukkitId = CMIScheduler.scheduleSyncRepeatingTask(rentExpire, rentint, rentint); } for (Player player : Bukkit.getServer().getOnlinePlayers()) { if (getPermissionManager().isResidenceAdmin(player)) { @@ -862,7 +861,7 @@ public void run() { getShopSignUtilManager().LoadShopVotes(); getShopSignUtilManager().LoadSigns(); - getShopSignUtilManager().BoardUpdate(); + getShopSignUtilManager().boardUpdate(); CMIVersionChecker.VersionCheck(null, 11480, this.getDescription()); fullyLoaded = true; diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index 79f997972..a154dae73 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -8,6 +8,8 @@ import org.bukkit.entity.Player; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; @@ -41,7 +43,7 @@ public void setChannelColor(CMIChatColor ChannelColor) { } public void chat(String sourcePlayer, String message) { - Bukkit.getScheduler().runTask(Residence.getInstance(), () -> { + CMIScheduler.runTask(() -> { Server serv = Residence.getInstance().getServ(); ResidenceChatEvent cevent = new ResidenceChatEvent(Residence.getInstance().getResidenceManager().getByName(channelName), serv.getPlayer(sourcePlayer), this.ChatPrefix, message, this.ChannelColor); diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index e1341e061..70283a4ee 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -8,6 +8,8 @@ import org.bukkit.entity.Player; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; + import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -71,11 +73,11 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo Location loc = plugin.getConfigManager().getKickLocation(); targetplayer.closeInventory(); if (loc != null) - targetplayer.teleport(loc); + CMITeleporter.teleportAsync(targetplayer, loc); else { loc = res.getOutsideFreeLoc(player.getLocation(), player, true); if (loc != null) - targetplayer.teleport(loc); + CMITeleporter.teleportAsync(targetplayer, loc); } plugin.msg(targetplayer, lm.Residence_Kicked); } diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 0fb460720..828cdf05c 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -19,130 +19,131 @@ import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.Version.Version; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; public class rt implements cmd { @Override @CommandAnnotation(simple = true, priority = 2500) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (args.length != 0 && args.length != 1 && args.length != 2) { - return false; - } - - if (!resadmin && !ResPerm.randomtp.hasPermission(sender)) - return true; - - World wname = null; - - Player tPlayer = null; - - if (args.length > 0) { - c: for (int i = 0; i < args.length; i++) { - for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { - if (!one.getCenter().getWorld().getName().equalsIgnoreCase(args[i])) - continue; - wname = one.getCenter().getWorld(); - continue c; - } - Player p = Bukkit.getPlayer(args[i]); - if (p != null) - tPlayer = p; - } - } - - if (args.length > 0 && wname == null && tPlayer == null) { - plugin.msg(sender, lm.Invalid_World); - String worlds = ""; - for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { - if (!worlds.isEmpty()) - worlds += ", "; - worlds += one.getCenter().getWorld().getName(); - break; - } - plugin.msg(sender, lm.RandomTeleport_WorldList, worlds); - return true; - } - - if (tPlayer == null && sender instanceof Player) - tPlayer = (Player) sender; - - if (wname == null && tPlayer != null) - wname = tPlayer.getLocation().getWorld(); - - if (wname == null && tPlayer == null) { - plugin.msg(sender, lm.Invalid_World); - String worlds = ""; - for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { - if (!worlds.isEmpty()) - worlds += ", "; - worlds += one.getCenter().getWorld().getName(); - break; - } - plugin.msg(sender, lm.RandomTeleport_WorldList, worlds); - return true; - } - - if (tPlayer == null) - return false; - - if (!sender.getName().equalsIgnoreCase(tPlayer.getName()) && !ResPerm.randomtp_admin.hasPermission(sender)) - return false; - - int sec = plugin.getConfigManager().getrtCooldown(); - if (plugin.getRandomTeleportMap().containsKey(tPlayer.getName()) && !resadmin && !ResPerm.randomtp_cooldownbypass.hasPermission(sender, false)) { - if (plugin.getRandomTeleportMap().get(tPlayer.getName()) + (sec * 1000) > System.currentTimeMillis()) { - int left = (int) (sec - ((System.currentTimeMillis() - plugin.getRandomTeleportMap().get(tPlayer.getName())) / 1000)); - plugin.msg(tPlayer, lm.RandomTeleport_TpLimit, left); - return true; - } - } - if (!plugin.getRandomTpManager().isDefinedRnadomTp(wname)) { - plugin.msg(sender, lm.RandomTeleport_Disabled); - return true; - } - - World worldName = wname; - Player player = tPlayer; - - if (Version.isCurrentEqualOrLower(Version.v1_12_R1)) { - Location lc = plugin.getRandomTpManager().getRandomlocationSync(worldName); - teleport(sender, player, lc, sec, resadmin); - } else { - CompletableFuture aloc = plugin.getRandomTpManager().getRandomlocationAsync(worldName); - aloc.thenApply(lc -> { - return teleport(sender, player, lc, sec, resadmin); - }); - } - - return true; + if (args.length != 0 && args.length != 1 && args.length != 2) { + return false; + } + + if (!resadmin && !ResPerm.randomtp.hasPermission(sender)) + return true; + + World wname = null; + + Player tPlayer = null; + + if (args.length > 0) { + c: for (int i = 0; i < args.length; i++) { + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + if (!one.getCenter().getWorld().getName().equalsIgnoreCase(args[i])) + continue; + wname = one.getCenter().getWorld(); + continue c; + } + Player p = Bukkit.getPlayer(args[i]); + if (p != null) + tPlayer = p; + } + } + + if (args.length > 0 && wname == null && tPlayer == null) { + plugin.msg(sender, lm.Invalid_World); + String worlds = ""; + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + if (!worlds.isEmpty()) + worlds += ", "; + worlds += one.getCenter().getWorld().getName(); + break; + } + plugin.msg(sender, lm.RandomTeleport_WorldList, worlds); + return true; + } + + if (tPlayer == null && sender instanceof Player) + tPlayer = (Player) sender; + + if (wname == null && tPlayer != null) + wname = tPlayer.getLocation().getWorld(); + + if (wname == null && tPlayer == null) { + plugin.msg(sender, lm.Invalid_World); + String worlds = ""; + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + if (!worlds.isEmpty()) + worlds += ", "; + worlds += one.getCenter().getWorld().getName(); + break; + } + plugin.msg(sender, lm.RandomTeleport_WorldList, worlds); + return true; + } + + if (tPlayer == null) + return false; + + if (!sender.getName().equalsIgnoreCase(tPlayer.getName()) && !ResPerm.randomtp_admin.hasPermission(sender)) + return false; + + int sec = plugin.getConfigManager().getrtCooldown(); + if (plugin.getRandomTeleportMap().containsKey(tPlayer.getName()) && !resadmin && !ResPerm.randomtp_cooldownbypass.hasPermission(sender, false)) { + if (plugin.getRandomTeleportMap().get(tPlayer.getName()) + (sec * 1000) > System.currentTimeMillis()) { + int left = (int) (sec - ((System.currentTimeMillis() - plugin.getRandomTeleportMap().get(tPlayer.getName())) / 1000)); + plugin.msg(tPlayer, lm.RandomTeleport_TpLimit, left); + return true; + } + } + if (!plugin.getRandomTpManager().isDefinedRnadomTp(wname)) { + plugin.msg(sender, lm.RandomTeleport_Disabled); + return true; + } + + World worldName = wname; + Player player = tPlayer; + + if (Version.isCurrentEqualOrLower(Version.v1_12_R1)) { + Location lc = plugin.getRandomTpManager().getRandomlocationSync(worldName); + teleport(sender, player, lc, sec, resadmin); + } else { + CompletableFuture aloc = plugin.getRandomTpManager().getRandomlocationAsync(worldName); + aloc.thenApply(lc -> { + return teleport(sender, player, lc, sec, resadmin); + }); + } + + return true; } private static boolean teleport(CommandSender sender, Player player, Location lc, int sec, boolean resadmin) { - Residence.getInstance().getRandomTeleportMap().put(player.getName(), System.currentTimeMillis()); + Residence.getInstance().getRandomTeleportMap().put(player.getName(), System.currentTimeMillis()); - if (lc == null) { - Residence.getInstance().msg(sender, lm.RandomTeleport_IncorrectLocation, sec); - return true; - } + if (lc == null) { + Residence.getInstance().msg(sender, lm.RandomTeleport_IncorrectLocation, sec); + return true; + } - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), () -> { - if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !resadmin && !ResPerm.randomtp_delaybypass.hasPermission(sender, false)) { - Residence.getInstance().msg(player, lm.RandomTeleport_TeleportStarted, lc.getX(), lc.getY(), lc.getZ(), Residence.getInstance().getConfigManager().getTeleportDelay()); - Residence.getInstance().getTeleportDelayMap().add(player.getName()); - Residence.getInstance().getRandomTpManager().performDelaydTp(lc, player); - } else - Residence.getInstance().getRandomTpManager().performInstantTp(lc, player); + CMIScheduler.runAtLocationLater(lc, () -> { + if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !resadmin && !ResPerm.randomtp_delaybypass.hasPermission(sender, false)) { + Residence.getInstance().msg(player, lm.RandomTeleport_TeleportStarted, lc.getX(), lc.getY(), lc.getZ(), Residence.getInstance().getConfigManager().getTeleportDelay()); + Residence.getInstance().getTeleportDelayMap().add(player.getName()); + Residence.getInstance().getRandomTpManager().performDelaydTp(lc, player); + } else + Residence.getInstance().getRandomTpManager().performInstantTp(lc, player); - }, 1); - return true; + }, 1); + return true; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Teleports to random location in world"); - c.get("Info", Arrays.asList("&eUsage: &6/res rt (worldname) (playerName)", "Teleports you to random location in defined world.")); - LocaleManager.addTabCompleteMain(this, "[worldname]", "[playername]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Teleports to random location in world"); + c.get("Info", Arrays.asList("&eUsage: &6/res rt (worldname) (playerName)", "Teleports you to random location in defined world.")); + LocaleManager.addTabCompleteMain(this, "[worldname]", "[playername]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/shop.java b/src/com/bekvon/bukkit/residence/commands/shop.java index 6d624290d..c0f3006d0 100644 --- a/src/com/bekvon/bukkit/residence/commands/shop.java +++ b/src/com/bekvon/bukkit/residence/commands/shop.java @@ -284,7 +284,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.getShopSignUtilManager().addBoard(newTemp); plugin.msg(player, lm.Shop_NewBoard); - plugin.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().boardUpdate(); plugin.getShopSignUtilManager().saveSigns(); return true; @@ -402,7 +402,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.msg(player, lm.Shop_Voted, vote, resName); } plugin.getShopSignUtilManager().saveShopVotes(); - plugin.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().boardUpdate(); return true; } return false; diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index 0b05e64de..8b6f66a55 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -7,6 +7,8 @@ import org.bukkit.entity.Player; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -39,7 +41,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.msg(player, lm.General_Moved); Location loc = res.getOutsideFreeLoc(player.getLocation(), player, true); if (loc != null) - player.teleport(loc); + CMITeleporter.teleportAsync(player, loc); } return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/Visualizer.java b/src/com/bekvon/bukkit/residence/containers/Visualizer.java index d1237f465..f71c90e9f 100644 --- a/src/com/bekvon/bukkit/residence/containers/Visualizer.java +++ b/src/com/bekvon/bukkit/residence/containers/Visualizer.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.concurrent.CompletableFuture; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -11,14 +12,16 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import net.Zrips.CMILib.Version.Schedulers.CMITask; + public class Visualizer { private Player player; private long start; private List areas = new ArrayList(); private List errorAreas = new ArrayList(); - private int id = -1; - private int errorId = -1; - private int baseShedId = -1; + private CMITask mainSchduler = null; + private CMITask errorScheduler = null; + private CompletableFuture baseSheduler = null; private boolean once = false; private int starting = 0; private int currentSkip = 0; @@ -30,183 +33,186 @@ public class Visualizer { private Location loc = null; public Visualizer(Player player) { - this.player = player; - this.start = System.currentTimeMillis(); + this.player = player; + this.start = System.currentTimeMillis(); } public void cancelAll() { - if (id != -1) { - Bukkit.getScheduler().cancelTask(id); - } - if (errorId != -1) { - Bukkit.getScheduler().cancelTask(errorId); - } - if (baseShedId != -1) { - Bukkit.getScheduler().cancelTask(baseShedId); - } + if (mainSchduler != null) { + mainSchduler.cancel(); + mainSchduler = null; + } + if (errorScheduler != null) { + errorScheduler.cancel(); + errorScheduler = null; + } + if (baseSheduler != null) { + baseSheduler.cancel(true); + baseSheduler = null; + } } public boolean isSameLoc() { - if (loc == null) - return false; - if (loc.getWorld() != player.getWorld()) - return false; - if (!errorAreas.isEmpty() && errorLocations.isEmpty()) - return false; - if (loc.distance(player.getLocation()) > 1) - return false; + if (loc == null) + return false; + if (loc.getWorld() != player.getWorld()) + return false; + if (!errorAreas.isEmpty() && errorLocations.isEmpty()) + return false; + if (loc.distance(player.getLocation()) > 1) + return false; - return true; + return true; } public long getStart() { - return start; + return start; } public void setStart(long start) { - this.start = start; + this.start = start; } public Player getPlayer() { - return player; + return player; } public void setPlayer(Player player) { - this.player = player; + this.player = player; } public List getAreas() { - return areas; + return areas; } public void setAreas(ClaimedResidence res) { - if (res != null) - this.areas = Arrays.asList(res.getAreaArray()); + if (res != null) + this.areas = Arrays.asList(res.getAreaArray()); } public void setAreas(CuboidArea[] areas) { - this.areas = Arrays.asList(areas); + this.areas = Arrays.asList(areas); } public void setAreas(ArrayList areas) { - this.areas = areas; + this.areas = areas; } public void setAreas(CuboidArea area) { - areas = new ArrayList(); - this.areas.add(area); + areas = new ArrayList(); + this.areas.add(area); } public List getErrorAreas() { - return errorAreas; + return errorAreas; } public void setErrorAreas(ClaimedResidence res) { - if (res != null) - this.errorAreas = Arrays.asList(res.getAreaArray()); + if (res != null) + this.errorAreas = Arrays.asList(res.getAreaArray()); } public void setErrorAreas(CuboidArea[] errorAreas) { - this.errorAreas = Arrays.asList(errorAreas); + this.errorAreas = Arrays.asList(errorAreas); } public void setErrorAreas(ArrayList errorAreas) { - this.errorAreas = errorAreas; + this.errorAreas = errorAreas; } public void setErrorAreas(CuboidArea errorArea) { - this.errorAreas.add(errorArea); + this.errorAreas.add(errorArea); } - public int getId() { - return id; + public CMITask getScheduler() { + return mainSchduler; } - public void setId(int id) { - this.id = id; + public void setScheduler(CMITask scheduler) { + this.mainSchduler = scheduler; } - public int getErrorId() { - return errorId; + public CMITask getErrorId() { + return errorScheduler; } - public void setErrorId(int errorId) { - this.errorId = errorId; + public void setErrorId(CMITask errorId) { + this.errorScheduler = errorId; } public boolean isOnce() { - return once; + return once; } public void setOnce(boolean once) { - this.once = once; + this.once = once; } public List getLocations() { - return locations; + return locations; } public void setLocations(List locations) { - this.locations = locations; + this.locations = locations; } public List getLocations2() { - return locations2; + return locations2; } public void setLocations2(List locations) { - this.locations2 = locations; + this.locations2 = locations; } public List getErrorLocations() { - return errorLocations; + return errorLocations; } public void setErrorLocations(List errorLocations) { - this.errorLocations = errorLocations; + this.errorLocations = errorLocations; } public List getErrorLocations2() { - return errorLocations2; + return errorLocations2; } public void setErrorLocations2(List errorLocations) { - this.errorLocations2 = errorLocations; + this.errorLocations2 = errorLocations; } public Location getLoc() { - return loc; + return loc; } public void setLoc(Location loc) { - this.loc = loc; + this.loc = loc; } public int getStarting() { - return starting; + return starting; } public void setStarting(int starting) { - this.starting = starting; + this.starting = starting; } - public int getBaseShedId() { - return baseShedId; + public CompletableFuture getBaseSheduler() { + return baseSheduler; } - public void setBaseShedId(int baseShedId) { - this.baseShedId = baseShedId; + public void setBaseSheduler(CompletableFuture scheduler) { + this.baseSheduler = scheduler; } public int getCurrentSkip() { - return currentSkip; + return currentSkip; } public void setCurrentSkip(int currentSkip) { - this.currentSkip = currentSkip; + this.currentSkip = currentSkip; } public void addCurrentSkip() { - this.currentSkip++; + this.currentSkip++; } } diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 04b52a711..0587ec923 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -14,6 +14,8 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Messages.CMIMessages; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Schedulers.CMITask; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; @@ -32,304 +34,297 @@ public class DynMapManager { MarkerAPI markerapi; MarkerSet set; private Map resareas = new HashMap(); - private int schedId = -1; + private CMITask scheduler = null; public DynMapManager(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } public MarkerSet getMarkerSet() { - return set; + return set; } public void fireUpdateAdd(final ClaimedResidence res, final int deep) { - if (api == null || set == null) - return; - if (res == null) - return; - - if (schedId != -1) - Bukkit.getServer().getScheduler().cancelTask(schedId); - - schedId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { - @Override - public void run() { - schedId = -1; - - handleResidenceAdd(res.getName(), res, deep); - return; - } - }, 10L); + if (api == null || set == null) + return; + if (res == null) + return; + + if (scheduler != null) { + scheduler.cancel(); + } + + scheduler = CMIScheduler.runTaskLater(() -> handleResidenceAdd(res.getName(), res, deep), 10L); } public void fireUpdateRemove(final ClaimedResidence res, final int deep) { - if (api == null || set == null) - return; - if (res == null) - return; + if (api == null || set == null) + return; + if (res == null) + return; - handleResidenceRemove(res.getName(), res, deep); + handleResidenceRemove(res.getName(), res, deep); } private String formatInfoWindow(String resid, ClaimedResidence res, String resName) { - if (res == null) - return null; - if (res.getName() == null) - return null; - if (res.getOwner() == null) - return null; - String v = - "
%regionname%
" - + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
"; - - if (plugin.getConfigManager().DynMapShowFlags) { - - ResidencePermissions residencePermissions = res.getPermissions(); - FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); - - StringBuilder flgs = new StringBuilder(); - for (Entry one : residencePermissions.getFlags().entrySet()) { - if (Residence.getInstance().getConfigManager().DynMapExcludeDefaultFlags && gRD.isSet(one.getKey()) && gRD.getFlags().get(one.getKey()).equals(one.getValue())) { - continue; - } - if (!flgs.toString().isEmpty()) - flgs.append("
"); - flgs.append(one.getKey() + ": " + one.getValue()); - } - - if (!flgs.toString().isEmpty()) { - v += CMIChatColor.stripColor(plugin.msg(lm.General_ResidenceFlags, "")) + "
%flags%"; - v = v.replace("%flags%", flgs.toString()); - } - } - - v += "
"; - - if (plugin.getRentManager().isForRent(res.getName())) - v = "
" - + CMIChatColor.stripColor(plugin.msg(lm.Rentable_Land, "")) + "%regionname%
" - + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" - + CMIChatColor.stripColor(plugin.msg(lm.Residence_RentedBy, "")) + "%renter%
" - + CMIChatColor.stripColor(plugin.msg(lm.General_LandCost, "")) + "%rent%
" - + CMIChatColor.stripColor(plugin.msg(lm.Rent_Days, "")) + "%rentdays%
" - + CMIChatColor.stripColor(plugin.msg(lm.Rentable_AllowRenewing, "")) + "%renew%
" - + CMIChatColor.stripColor(plugin.msg(lm.Rent_Expire, "")) + "%expire%
"; - - if (plugin.getTransactionManager().isForSale(res.getName())) - v = "
" - + CMIChatColor.stripColor(plugin.msg(lm.Economy_LandForSale, " ")) - + "%regionname%
" - + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" - + CMIChatColor.stripColor(plugin.msg(lm.Economy_SellAmount, "")) + "%price%
"; - - v = v.replace("%regionname%", resName); - v = v.replace("%playerowners%", res.getOwner()); - String m = res.getEnterMessage(); - v = v.replace("%entermsg%", (m != null) ? m : ""); - m = res.getLeaveMessage(); - v = v.replace("%leavemsg%", (m != null) ? m : ""); - - RentManager rentmgr = plugin.getRentManager(); - TransactionManager transmgr = plugin.getTransactionManager(); - - if (rentmgr.isForRent(res.getName())) { - boolean isrented = rentmgr.isRented(resid); - v = v.replace("%isrented%", Boolean.toString(isrented)); - String id = ""; - if (isrented) - id = rentmgr.getRentingPlayer(resid); - v = v.replace("%renter%", id); - - v = v.replace("%rent%", rentmgr.getCostOfRent(resid) + ""); - v = v.replace("%rentdays%", rentmgr.getRentDays(resid) + ""); - boolean renew = rentmgr.getRentableRepeatable(resid); - v = v.replace("%renew%", renew + ""); - String expire = ""; - if (isrented) { - long time = rentmgr.getRentedLand(resid).endTime; - if (time != 0L) - expire = GetTime.getTime(time); - } - v = v.replace("%expire%", expire); - } - - if (transmgr.isForSale(res.getName())) { - boolean forsale = transmgr.isForSale(resid); - v = v.replace("%isforsale%", Boolean.toString(transmgr.isForSale(resid))); - String price = ""; - if (forsale) - price = Integer.toString(transmgr.getSaleAmount(resid)); - v = v.replace("%price%", price); - } - - return v; + if (res == null) + return null; + if (res.getName() == null) + return null; + if (res.getOwner() == null) + return null; + String v = + "
%regionname%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
"; + + if (plugin.getConfigManager().DynMapShowFlags) { + + ResidencePermissions residencePermissions = res.getPermissions(); + FlagPermissions gRD = Residence.getInstance().getConfigManager().getGlobalResidenceDefaultFlags(); + + StringBuilder flgs = new StringBuilder(); + for (Entry one : residencePermissions.getFlags().entrySet()) { + if (Residence.getInstance().getConfigManager().DynMapExcludeDefaultFlags && gRD.isSet(one.getKey()) && gRD.getFlags().get(one.getKey()).equals(one.getValue())) { + continue; + } + if (!flgs.toString().isEmpty()) + flgs.append("
"); + flgs.append(one.getKey() + ": " + one.getValue()); + } + + if (!flgs.toString().isEmpty()) { + v += CMIChatColor.stripColor(plugin.msg(lm.General_ResidenceFlags, "")) + "
%flags%"; + v = v.replace("%flags%", flgs.toString()); + } + } + + v += "
"; + + if (plugin.getRentManager().isForRent(res.getName())) + v = "
" + + CMIChatColor.stripColor(plugin.msg(lm.Rentable_Land, "")) + "%regionname%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" + + CMIChatColor.stripColor(plugin.msg(lm.Residence_RentedBy, "")) + "%renter%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_LandCost, "")) + "%rent%
" + + CMIChatColor.stripColor(plugin.msg(lm.Rent_Days, "")) + "%rentdays%
" + + CMIChatColor.stripColor(plugin.msg(lm.Rentable_AllowRenewing, "")) + "%renew%
" + + CMIChatColor.stripColor(plugin.msg(lm.Rent_Expire, "")) + "%expire%
"; + + if (plugin.getTransactionManager().isForSale(res.getName())) + v = "
" + + CMIChatColor.stripColor(plugin.msg(lm.Economy_LandForSale, " ")) + + "%regionname%
" + + CMIChatColor.stripColor(plugin.msg(lm.General_Owner, "")) + "%playerowners%
" + + CMIChatColor.stripColor(plugin.msg(lm.Economy_SellAmount, "")) + "%price%
"; + + v = v.replace("%regionname%", resName); + v = v.replace("%playerowners%", res.getOwner()); + String m = res.getEnterMessage(); + v = v.replace("%entermsg%", (m != null) ? m : ""); + m = res.getLeaveMessage(); + v = v.replace("%leavemsg%", (m != null) ? m : ""); + + RentManager rentmgr = plugin.getRentManager(); + TransactionManager transmgr = plugin.getTransactionManager(); + + if (rentmgr.isForRent(res.getName())) { + boolean isrented = rentmgr.isRented(resid); + v = v.replace("%isrented%", Boolean.toString(isrented)); + String id = ""; + if (isrented) + id = rentmgr.getRentingPlayer(resid); + v = v.replace("%renter%", id); + + v = v.replace("%rent%", rentmgr.getCostOfRent(resid) + ""); + v = v.replace("%rentdays%", rentmgr.getRentDays(resid) + ""); + boolean renew = rentmgr.getRentableRepeatable(resid); + v = v.replace("%renew%", renew + ""); + String expire = ""; + if (isrented) { + long time = rentmgr.getRentedLand(resid).endTime; + if (time != 0L) + expire = GetTime.getTime(time); + } + v = v.replace("%expire%", expire); + } + + if (transmgr.isForSale(res.getName())) { + boolean forsale = transmgr.isForSale(resid); + v = v.replace("%isforsale%", Boolean.toString(transmgr.isForSale(resid))); + String price = ""; + if (forsale) + price = Integer.toString(transmgr.getSaleAmount(resid)); + v = v.replace("%price%", price); + } + + return v; } private boolean isVisible(String id, String worldname) { - List visible = plugin.getConfigManager().DynMapVisibleRegions; - List hidden = plugin.getConfigManager().DynMapHiddenRegions; - if (visible != null && visible.size() > 0) { - if ((visible.contains(id) == false) && (visible.contains("world:" + worldname) == false)) { - return false; - } - } - if (hidden != null && hidden.size() > 0) { - if (hidden.contains(id) || hidden.contains("world:" + worldname)) - return false; - } - return true; + List visible = plugin.getConfigManager().DynMapVisibleRegions; + List hidden = plugin.getConfigManager().DynMapHiddenRegions; + if (visible != null && visible.size() > 0) { + if ((visible.contains(id) == false) && (visible.contains("world:" + worldname) == false)) { + return false; + } + } + if (hidden != null && hidden.size() > 0) { + if (hidden.contains(id) || hidden.contains("world:" + worldname)) + return false; + } + return true; } private void addStyle(String resid, AreaMarker m) { - AreaStyle as = new AreaStyle(); - int sc = 0xFF0000; - int fc = 0xFF0000; - try { - sc = Integer.parseInt(as.strokecolor.substring(1), 16); - if (plugin.getRentManager().isForRent(resid) && !plugin.getRentManager().isRented(resid)) - fc = Integer.parseInt(as.forrentstrokecolor.substring(1), 16); - else if (plugin.getRentManager().isForRent(resid) && plugin.getRentManager().isRented(resid)) - fc = Integer.parseInt(as.rentedstrokecolor.substring(1), 16); - else if (plugin.getTransactionManager().isForSale(resid)) - fc = Integer.parseInt(as.forsalestrokecolor.substring(1), 16); - else - fc = Integer.parseInt(as.fillcolor.substring(1), 16); - } catch (NumberFormatException nfx) { - } - m.setLineStyle(as.strokeweight, as.strokeopacity, sc); - m.setFillStyle(as.fillopacity, fc); - m.setRangeY(as.y, as.y); + AreaStyle as = new AreaStyle(); + int sc = 0xFF0000; + int fc = 0xFF0000; + try { + sc = Integer.parseInt(as.strokecolor.substring(1), 16); + if (plugin.getRentManager().isForRent(resid) && !plugin.getRentManager().isRented(resid)) + fc = Integer.parseInt(as.forrentstrokecolor.substring(1), 16); + else if (plugin.getRentManager().isForRent(resid) && plugin.getRentManager().isRented(resid)) + fc = Integer.parseInt(as.rentedstrokecolor.substring(1), 16); + else if (plugin.getTransactionManager().isForSale(resid)) + fc = Integer.parseInt(as.forsalestrokecolor.substring(1), 16); + else + fc = Integer.parseInt(as.fillcolor.substring(1), 16); + } catch (NumberFormatException nfx) { + } + m.setLineStyle(as.strokeweight, as.strokeopacity, sc); + m.setFillStyle(as.fillopacity, fc); + m.setRangeY(as.y, as.y); } private void handleResidenceAdd(String resid, ClaimedResidence res, int depth) { - if (res == null) - return; + if (res == null) + return; - boolean hidden = res.getPermissions().has("hidden", false); - if (hidden && plugin.getConfigManager().DynMapHideHidden) { - fireUpdateRemove(res, depth); - return; - } + boolean hidden = res.getPermissions().has("hidden", false); + if (hidden && plugin.getConfigManager().DynMapHideHidden) { + fireUpdateRemove(res, depth); + return; + } - for (Entry oneArea : res.getAreaMap().entrySet()) { + for (Entry oneArea : res.getAreaMap().entrySet()) { - String id = oneArea.getKey() + "." + resid; + String id = oneArea.getKey() + "." + resid; - String name = res.getName(); - double[] x = new double[4]; - double[] z = new double[4]; + String name = res.getName(); + double[] x = new double[4]; + double[] z = new double[4]; - String resName = res.getName(); + String resName = res.getName(); - if (res.getAreaMap().size() > 1) { - resName = res.getName() + " (" + oneArea.getKey() + ")"; - } + if (res.getAreaMap().size() > 1) { + resName = res.getName() + " (" + oneArea.getKey() + ")"; + } - String desc = formatInfoWindow(resid, res, resName); + String desc = formatInfoWindow(resid, res, resName); - if (!isVisible(resid, res.getWorld())) - return; + if (!isVisible(resid, res.getWorld())) + return; - Location l0 = oneArea.getValue().getLowLocation(); - Location l1 = oneArea.getValue().getHighLocation(); + Location l0 = oneArea.getValue().getLowLocation(); + Location l1 = oneArea.getValue().getHighLocation(); // x[0] = l0.getX(); // z[0] = l0.getZ(); // x[1] = l1.getX() + 1.0; // z[1] = l1.getZ() + 1.0; - x[0] = l0.getX(); - z[0] = l0.getZ(); - x[1] = l0.getX(); - z[1] = l1.getZ() + 1.0; - x[2] = l1.getX() + 1.0; - z[2] = l1.getZ() + 1.0; - x[3] = l1.getX() + 1.0; - z[3] = l0.getZ(); - - AreaMarker marker = null; - - if (resareas.containsKey(id)) { - marker = resareas.get(id); - resareas.remove(id); - marker.deleteMarker(); - } - - marker = set.createAreaMarker(id, name, true, res.getWorld(), x, z, true); - if (marker == null) - return; - - if (plugin.getConfigManager().DynMapLayer3dRegions) - marker.setRangeY(l1.getY(), l0.getY()); - - marker.setDescription(desc); - addStyle(resid, marker); - resareas.put(id, marker); - - if (depth <= plugin.getConfigManager().DynMapLayerSubZoneDepth) { - List subids = res.getSubzones(); - for (ClaimedResidence one : subids) { - handleResidenceAdd(one.getName(), one, depth + 1); - } - } - } + x[0] = l0.getX(); + z[0] = l0.getZ(); + x[1] = l0.getX(); + z[1] = l1.getZ() + 1.0; + x[2] = l1.getX() + 1.0; + z[2] = l1.getZ() + 1.0; + x[3] = l1.getX() + 1.0; + z[3] = l0.getZ(); + + AreaMarker marker = null; + + if (resareas.containsKey(id)) { + marker = resareas.get(id); + resareas.remove(id); + marker.deleteMarker(); + } + + marker = set.createAreaMarker(id, name, true, res.getWorld(), x, z, true); + if (marker == null) + return; + + if (plugin.getConfigManager().DynMapLayer3dRegions) + marker.setRangeY(l1.getY(), l0.getY()); + + marker.setDescription(desc); + addStyle(resid, marker); + resareas.put(id, marker); + + if (depth <= plugin.getConfigManager().DynMapLayerSubZoneDepth) { + List subids = res.getSubzones(); + for (ClaimedResidence one : subids) { + handleResidenceAdd(one.getName(), one, depth + 1); + } + } + } } public void handleResidenceRemove(String resid, ClaimedResidence res, int depth) { - if (resid == null) - return; - if (res == null) - return; - - for (Entry oneArea : res.getAreaMap().entrySet()) { - String id = oneArea.getKey() + "." + resid; - if (resareas.containsKey(id)) { - AreaMarker marker = resareas.remove(id); - marker.deleteMarker(); - } - if (depth <= plugin.getConfigManager().DynMapLayerSubZoneDepth + 1) { - List subids = res.getSubzones(); - for (ClaimedResidence one : subids) { - handleResidenceRemove(one.getName(), one, depth + 1); - } - } - } + if (resid == null) + return; + if (res == null) + return; + + for (Entry oneArea : res.getAreaMap().entrySet()) { + String id = oneArea.getKey() + "." + resid; + if (resareas.containsKey(id)) { + AreaMarker marker = resareas.remove(id); + marker.deleteMarker(); + } + if (depth <= plugin.getConfigManager().DynMapLayerSubZoneDepth + 1) { + List subids = res.getSubzones(); + for (ClaimedResidence one : subids) { + handleResidenceRemove(one.getName(), one, depth + 1); + } + } + } } public void activate() { - try { - markerapi = api.getMarkerAPI(); - } catch (Exception e) { - } - if (markerapi == null) { - Bukkit.getConsoleSender().sendMessage("[Residence] Error loading dynmap marker API!"); - return; - } - - if (set != null) { - set.deleteMarkerSet(); - set = null; - } - set = markerapi.getMarkerSet("residence.markerset"); - if (set == null) - set = markerapi.createMarkerSet("residence.markerset", "Residence", null, false); - else - set.setMarkerSetLabel("Residence"); - - if (set == null) { - Bukkit.getConsoleSender().sendMessage("Error creating marker set"); - return; - } - set.setLayerPriority(1); - set.setHideByDefault(plugin.getConfigManager().DynMapHideByDefault); - - CMIMessages.consoleMessage(Residence.getInstance().getPrefix() + " DynMap residence activated!"); - - for (Entry one : plugin.getResidenceManager().getResidences().entrySet()) { - plugin.getDynManager().fireUpdateAdd(one.getValue(), one.getValue().getSubzoneDeep()); - handleResidenceAdd(one.getValue().getName(), one.getValue(), one.getValue().getSubzoneDeep()); - } + try { + markerapi = api.getMarkerAPI(); + } catch (Exception e) { + } + if (markerapi == null) { + Bukkit.getConsoleSender().sendMessage("[Residence] Error loading dynmap marker API!"); + return; + } + + if (set != null) { + set.deleteMarkerSet(); + set = null; + } + set = markerapi.getMarkerSet("residence.markerset"); + if (set == null) + set = markerapi.createMarkerSet("residence.markerset", "Residence", null, false); + else + set.setMarkerSetLabel("Residence"); + + if (set == null) { + Bukkit.getConsoleSender().sendMessage("Error creating marker set"); + return; + } + set.setLayerPriority(1); + set.setHideByDefault(plugin.getConfigManager().DynMapHideByDefault); + + CMIMessages.consoleMessage(Residence.getInstance().getPrefix() + " DynMap residence activated!"); + + for (Entry one : plugin.getResidenceManager().getResidences().entrySet()) { + plugin.getDynManager().fireUpdateAdd(one.getValue(), one.getValue().getSubzoneDeep()); + handleResidenceAdd(one.getValue().getName(), one.getValue(), one.getValue().getSubzoneDeep()); + } } } diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 0af57b3ab..565abc57e 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -20,6 +20,7 @@ import net.Zrips.CMILib.Items.CMIAsyncHead; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; public class FlagUtil { @@ -53,9 +54,7 @@ public void load() { CMIAsyncHead ahead = new CMIAsyncHead() { @Override public void afterAsyncUpdate(ItemStack item) { - Bukkit.getScheduler().runTask(CMI.getInstance(), () -> { - flagData.addFlagButton(oneFlag.toLowerCase(), item); - }); + CMIScheduler.runTask(() -> flagData.addFlagButton(oneFlag.toLowerCase(), item)); } }; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 4403c1129..3a3ca08b4 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -70,6 +70,8 @@ import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; public class ResidenceBlockListener implements Listener { @@ -132,10 +134,10 @@ public void onButtonHitWithProjectile(ProjectileHitEvent e) { e.setCancelled(true); plugin.msg(player, lm.Flag_Deny, result); - Bukkit.getScheduler().runTask(plugin, () -> { + CMIScheduler.runAtLocation(block.getLocation(), () -> { Location loc = block.getLocation().clone(); loc.add(e.getHitBlockFace().getDirection()); - e.getEntity().teleport(loc); + CMITeleporter.teleportAsync(e.getEntity(), loc); e.getEntity().setVelocity(e.getEntity().getVelocity().multiply(-1)); }); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java index b370759d2..fb5a326ca 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java @@ -40,96 +40,93 @@ import net.Zrips.CMILib.Container.CMILocation; import net.Zrips.CMILib.Version.Version; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; public class ResidenceLWCListener implements com.griefcraft.scripting.Module { public static void register(Plugin plugin) { - com.griefcraft.lwc.LWC.getInstance().getModuleLoader().registerModule(plugin, new ResidenceLWCListener()); + com.griefcraft.lwc.LWC.getInstance().getModuleLoader().registerModule(plugin, new ResidenceLWCListener()); } public static void removeLwcFromResidence(final Player player, final ClaimedResidence res) { - if (Version.isCurrentLower(Version.v1_13_R1)) - return; - - Bukkit.getScheduler().runTaskAsynchronously(Residence.getInstance(), new Runnable() { - @Override - public void run() { - long time = System.currentTimeMillis(); - com.griefcraft.lwc.LWC lwc = com.griefcraft.lwc.LWC.getInstance(); - if (lwc == null) - return; - if (res == null) - return; - int i = 0; - - com.griefcraft.cache.ProtectionCache cache = lwc.getProtectionCache(); - - List list = Residence.getInstance().getConfigManager().getLwcMatList(); - - List block = new ArrayList(); - - try { - ChunkSnapshot chunkSnapshot = null; - int chunkX = 0; - int chunkZ = 0; - for (CuboidArea area : res.getAreaArray()) { - Location low = area.getLowLocation(); - Location high = area.getHighLocation(); - World world = low.getWorld(); - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - int hy = world.getHighestBlockYAt(x, z); - if (high.getBlockY() < hy) - hy = high.getBlockY(); - int cx = Math.abs(x % 16); - int cz = Math.abs(z % 16); - if (chunkSnapshot == null || x >> 4 != chunkX || z >> 4 != chunkZ) { - if (!world.getBlockAt(x, 0, z).getChunk().isLoaded()) { - world.getBlockAt(x, 0, z).getChunk().load(); - chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(false, false, false); - world.getBlockAt(x, 0, z).getChunk().unload(); - } else { - chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(); - } - chunkX = x >> 4; - chunkZ = z >> 4; - } - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - for (int y = low.getBlockY(); y <= hy; y++) { - BlockData type = chunkSnapshot.getBlockData(cx, y, cz); - if (!list.contains(type.getMaterial())) - continue; - block.add(world.getBlockAt(x, y, z)); - } - } else { - for (int y = low.getBlockY(); y <= hy; y++) { - Material type = CMILocation.getBlockTypeSafe(new Location(world, x, y, z)); - if (!list.contains(type)) - continue; - block.add(world.getBlockAt(x, y, z)); - } - } - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } - - for (Block b : block) { - com.griefcraft.model.Protection prot = cache.getProtection(b); - if (prot == null) - continue; - prot.remove(); - i++; - } - - if (i > 0) - Residence.getInstance().msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); - return; - } - }); + if (Version.isCurrentLower(Version.v1_13_R1)) + return; + + CMIScheduler.runTaskAsynchronously(() -> { + long time = System.currentTimeMillis(); + com.griefcraft.lwc.LWC lwc = com.griefcraft.lwc.LWC.getInstance(); + if (lwc == null) + return; + if (res == null) + return; + int i = 0; + + com.griefcraft.cache.ProtectionCache cache = lwc.getProtectionCache(); + + List list = Residence.getInstance().getConfigManager().getLwcMatList(); + + List block = new ArrayList(); + + try { + ChunkSnapshot chunkSnapshot = null; + int chunkX = 0; + int chunkZ = 0; + for (CuboidArea area : res.getAreaArray()) { + Location low = area.getLowLocation(); + Location high = area.getHighLocation(); + World world = low.getWorld(); + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + int hy = world.getHighestBlockYAt(x, z); + if (high.getBlockY() < hy) + hy = high.getBlockY(); + int cx = Math.abs(x % 16); + int cz = Math.abs(z % 16); + if (chunkSnapshot == null || x >> 4 != chunkX || z >> 4 != chunkZ) { + if (!world.getBlockAt(x, 0, z).getChunk().isLoaded()) { + world.getBlockAt(x, 0, z).getChunk().load(); + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(false, false, false); + world.getBlockAt(x, 0, z).getChunk().unload(); + } else { + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(); + } + chunkX = x >> 4; + chunkZ = z >> 4; + } + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + for (int y = low.getBlockY(); y <= hy; y++) { + BlockData type = chunkSnapshot.getBlockData(cx, y, cz); + if (!list.contains(type.getMaterial())) + continue; + block.add(world.getBlockAt(x, y, z)); + } + } else { + for (int y = low.getBlockY(); y <= hy; y++) { + Material type = CMILocation.getBlockTypeSafe(new Location(world, x, y, z)); + if (!list.contains(type)) + continue; + block.add(world.getBlockAt(x, y, z)); + } + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + for (Block b : block) { + com.griefcraft.model.Protection prot = cache.getProtection(b); + if (prot == null) + continue; + prot.remove(); + i++; + } + + if (i > 0) + Residence.getInstance().msg(player, lm.Residence_LwcRemoved, i, System.currentTimeMillis() - time); + }); } @Override @@ -170,13 +167,13 @@ public void onBlockInteract(LWCBlockInteractEvent event) { @Override public void onRegisterProtection(LWCProtectionRegisterEvent event) { - Player player = event.getPlayer(); - FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(event.getBlock().getLocation(), player); - boolean hasuse = perms.playerHas(player, Flags.use, true); - if (!perms.playerHas(player, Flags.container, hasuse) && !ResPerm.bypass_container.hasPermission(player, 10000L)) { - event.setCancelled(true); - Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container); - } + Player player = event.getPlayer(); + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(event.getBlock().getLocation(), player); + boolean hasuse = perms.playerHas(player, Flags.use, true); + if (!perms.playerHas(player, Flags.container, hasuse) && !ResPerm.bypass_container.hasPermission(player, 10000L)) { + event.setCancelled(true); + Residence.getInstance().msg(player, lm.Flag_Deny, Flags.container); + } } @Override diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index eaa54539b..9d60eef4c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2,14 +2,13 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.concurrent.CompletableFuture; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -93,10 +92,11 @@ import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; public class ResidencePlayerListener implements Listener { @@ -110,26 +110,21 @@ public class ResidencePlayerListener implements Listener { private Residence plugin; - private int locationChangeCheckId = -1; - protected Map lastCheck = new HashMap(); protected Map lastLocation = new HashMap(); - private Runnable locationChangeCheck = new Runnable() { - @Override - public void run() { - for (Player player : Bukkit.getOnlinePlayers()) { - Vector locfrom = lastLocation.getOrDefault(player.getUniqueId(), player.getLocation().toVector()); - Vector locto = player.getLocation().toVector(); - lastLocation.put(player.getUniqueId(), locto); - if (locfrom.getBlockX() == locto.getBlockX() && locfrom.getBlockY() == locto.getBlockY() && locfrom.getBlockZ() == locto.getBlockZ()) - continue; - Long time = lastCheck.getOrDefault(player.getUniqueId(), 0L); - if (time + 1000L > System.currentTimeMillis()) - continue; - lastCheck.put(player.getUniqueId(), System.currentTimeMillis()); - handleNewLocation(player, player.getLocation(), true); - } + private Runnable locationChangeCheck = () -> { + for (Player player : Bukkit.getOnlinePlayers()) { + Vector locfrom = lastLocation.getOrDefault(player.getUniqueId(), player.getLocation().toVector()); + Vector locto = player.getLocation().toVector(); + lastLocation.put(player.getUniqueId(), locto); + if (locfrom.getBlockX() == locto.getBlockX() && locfrom.getBlockY() == locto.getBlockY() && locfrom.getBlockZ() == locto.getBlockZ()) + continue; + Long time = lastCheck.getOrDefault(player.getUniqueId(), 0L); + if (time + 1000L > System.currentTimeMillis()) + continue; + lastCheck.put(player.getUniqueId(), System.currentTimeMillis()); + handleNewLocation(player, player.getLocation(), true); } }; @@ -146,7 +141,7 @@ public ResidencePlayerListener(Residence plugin) { } this.plugin = plugin; - locationChangeCheckId = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, locationChangeCheck, 20L, 15 * 20L); + CMIScheduler.scheduleSyncRepeatingTask(locationChangeCheck, 20L, 15 * 20L); } public void reload() { @@ -355,23 +350,20 @@ public void onPlayerLogin(PlayerLoginEvent event) { if (!plugin.getConfigManager().isRentInformOnEnding()) return; final Player player = event.getPlayer(); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (!player.isOnline()) - return; - List list = plugin.getRentManager().getRentedLandsList(player.getName()); - if (list.isEmpty()) - return; - for (String one : list) { - RentedLand rentedland = plugin.getRentManager().getRentedLand(one); - if (rentedland == null) - continue; - if (rentedland.AutoPay) - continue; - if (rentedland.endTime - System.currentTimeMillis() < plugin.getConfigManager().getRentInformBefore() * 60 * 24 * 7) { - plugin.msg(player, lm.Residence_EndingRent, one, GetTime.getTime(rentedland.endTime)); - } + CMIScheduler.runTaskLater(() -> { + if (!player.isOnline()) + return; + List list = plugin.getRentManager().getRentedLandsList(player.getName()); + if (list.isEmpty()) + return; + for (String one : list) { + RentedLand rentedland = plugin.getRentManager().getRentedLand(one); + if (rentedland == null) + continue; + if (rentedland.AutoPay) + continue; + if (rentedland.endTime - System.currentTimeMillis() < plugin.getConfigManager().getRentInformBefore() * 60 * 24 * 7) { + plugin.msg(player, lm.Residence_EndingRent, one, GetTime.getTime(rentedland.endTime)); } } }, plugin.getConfigManager().getRentInformDelay() * 20L); @@ -810,12 +802,7 @@ public void onSignCreate(SignChangeEvent event) { plugin.getSignUtil().getSigns().addSign(signInfo); plugin.getSignUtil().saveSigns(); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - plugin.getSignUtil().CheckSign(residence); - } - }, 5L); + CMIScheduler.runLaterAsync(() -> plugin.getSignUtil().CheckSign(residence), 5L); } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @@ -907,7 +894,7 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { } plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, location.getWorld().getName()); player.closeInventory(); - player.teleport(location); + CMITeleporter.teleportAsync(player, location); player.setFlying(false); player.setAllowFlight(false); } @@ -2007,15 +1994,11 @@ public void onPlayerDeath(final PlayerDeathEvent event) { event.setDroppedExp(0); } - if (res.getPermissions().has(Flags.respawn, false) && Bukkit.getVersion().toString().contains("Spigot")) - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - try { - event.getEntity().spigot().respawn(); - } catch (Exception e) { - } - return; + if (res.getPermissions().has(Flags.respawn, false) && Version.isSpigot()) + CMIScheduler.runTaskLater(() -> { + try { + event.getEntity().spigot().respawn(); + } catch (Throwable e) { } }, 20L); } @@ -2065,14 +2048,14 @@ private void fly(Player player, boolean state) { } if (loc != null) { player.closeInventory(); - player.teleport(loc); + CMITeleporter.teleportAsync(player, loc); } } player.setFlying(false); player.setAllowFlight(false); } else { player.setAllowFlight(true); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { + CMIScheduler.runAtEntityLater(player, () -> { ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && player.isOnline()) { player.setAllowFlight(true); @@ -2289,7 +2272,7 @@ public void onPlayerMoveInVehicle(VehicleMoveEvent event) { boolean handled = handleNewLocation(player, locto, true); if (!handled) { - event.getVehicle().teleport(event.getFrom()); + CMITeleporter.teleportAsync(event.getVehicle(), event.getFrom()); } if (!plugin.getTeleportDelayMap().isEmpty() && plugin.getConfigManager().getTeleportDelay() > 0 && plugin.getTeleportDelayMap().contains(player @@ -2305,7 +2288,13 @@ public void onPlayerMoveInVehicle(VehicleMoveEvent event) { private boolean teleport(Player player, Location loc) { if (player == null || !player.isOnline() || loc == null) return false; - return player.teleport(loc); + + if (Version.isFolia()) { + CMITeleporter.teleportAsync(player, loc); + return true; + } + + return CMITeleporter.teleport(player, loc); } public boolean handleNewLocation(final Player player, Location loc, boolean move) { @@ -2380,12 +2369,7 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move } if (!plugin.getAutoSelectionManager().getList().isEmpty()) { - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - plugin.getAutoSelectionManager().UpdateSelection(player); - } - }); + CMIScheduler.runTaskAsynchronously(() -> plugin.getAutoSelectionManager().UpdateSelection(player)); } if (res == null) { @@ -2403,154 +2387,159 @@ public void run() { && !ResPerm.admin_move.hasPermission(player, 10000L); if (move) { - if (res.getRaid().isUnderRaid()) { - if (res.getRaid().isAttacker(player.getUniqueId()) || res.getRaid().isDefender(player.getUniqueId())) { - return true; - } - Location lastLoc = lastOutsideLoc.get(uuid); + try { + if (res.getRaid().isUnderRaid()) { + if (res.getRaid().isAttacker(player.getUniqueId()) || res.getRaid().isDefender(player.getUniqueId())) { + return true; + } + Location lastLoc = lastOutsideLoc.get(uuid); - if (plugin.getConfigManager().BounceAnimation()) { - Visualizer v = new Visualizer(player); - v.setErrorAreas(res); - v.setOnce(true); - plugin.getSelectionManager().showBounds(player, v); - } + if (plugin.getConfigManager().BounceAnimation()) { + Visualizer v = new Visualizer(player); + v.setErrorAreas(res); + v.setOnce(true); + plugin.getSelectionManager().showBounds(player, v); + } - ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); - boolean teleported = false; - if (preRes != null && Flags.tp.isGlobalyEnabled() && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { - Location newLoc = res.getOutsideFreeLoc(loc, player, true); - player.closeInventory(); - teleported = teleport(player, newLoc); - } + ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); + boolean teleported = false; - if (!teleported) { - if (lastLoc != null) { - StuckInfo info = updateStuckTeleport(player, loc); + if (preRes != null && Flags.tp.isGlobalyEnabled() && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { + Location newLoc = res.getOutsideFreeLoc(loc, player, true); player.closeInventory(); - if (info != null && info.getTimesTeleported() > 5) { + teleported = teleport(player, newLoc); + } + + if (!teleported) { + if (lastLoc != null) { + StuckInfo info = updateStuckTeleport(player, loc); + player.closeInventory(); + if (info != null && info.getTimesTeleported() > 5) { + Location newLoc = res.getOutsideFreeLoc(loc, player, true); + teleported = teleport(player, newLoc); + } else { + teleported = teleport(player, lastLoc); + } + } + if (!teleported) { Location newLoc = res.getOutsideFreeLoc(loc, player, true); + player.closeInventory(); teleported = teleport(player, newLoc); - } else { - teleported = teleport(player, lastLoc); } } - if (!teleported) { - Location newLoc = res.getOutsideFreeLoc(loc, player, true); - player.closeInventory(); - teleported = teleport(player, newLoc); - } - } - switch (plugin.getConfigManager().getEnterLeaveMessageType()) { - case ActionBar: - case TitleBar: - FlagPermissions perms = res.getPermissions(); - if (perms.has(Flags.title, FlagCombo.TrueOrNone)) - CMIActionBar.send(player, plugin.msg(lm.Raid_cantDo)); - break; - case ChatBox: - plugin.msg(player, lm.Raid_cantDo, orres.getName()); - break; - default: - break; + switch (plugin.getConfigManager().getEnterLeaveMessageType()) { + case ActionBar: + case TitleBar: + FlagPermissions perms = res.getPermissions(); + if (perms.has(Flags.title, FlagCombo.TrueOrNone)) + CMIActionBar.send(player, plugin.msg(lm.Raid_cantDo)); + break; + case ChatBox: + plugin.msg(player, lm.Raid_cantDo, orres.getName()); + break; + default: + break; + } + return teleported; } - return teleported; - } - - if (cantMove) { - Location lastLoc = lastOutsideLoc.get(uuid); - - if (plugin.getConfigManager().BounceAnimation()) { - Visualizer v = new Visualizer(player); - v.setErrorAreas(res); - v.setOnce(true); - plugin.getSelectionManager().showBounds(player, v); - } + if (cantMove) { - ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); - boolean teleported = false; - if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { - Location newLoc = res.getOutsideFreeLoc(loc, player, true); - player.closeInventory(); - teleported = teleport(player, newLoc); - } + Location lastLoc = lastOutsideLoc.get(uuid); - if (!teleported) { - if (lastLoc != null) { - StuckInfo info = updateStuckTeleport(player, loc); - player.closeInventory(); - if (info != null && info.getTimesTeleported() > 5) { - Location newLoc = res.getOutsideFreeLoc(loc, player, true); - teleported = teleport(player, newLoc); - } else { - teleported = teleport(player, lastLoc); - } + if (plugin.getConfigManager().BounceAnimation()) { + Visualizer v = new Visualizer(player); + v.setErrorAreas(res); + v.setOnce(true); + plugin.getSelectionManager().showBounds(player, v); } - if (!teleported) { + ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); + boolean teleported = false; + if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { Location newLoc = res.getOutsideFreeLoc(loc, player, true); player.closeInventory(); teleported = teleport(player, newLoc); } - } - switch (plugin.getConfigManager().getEnterLeaveMessageType()) { - case ActionBar: - case TitleBar: - FlagPermissions perms = res.getPermissions(); - if (perms.has(Flags.title, FlagCombo.TrueOrNone)) - CMIActionBar.send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); - break; - case ChatBox: - plugin.msg(player, lm.Residence_MoveDeny, orres.getName()); - break; - default: - break; - } + if (!teleported) { + if (lastLoc != null) { + StuckInfo info = updateStuckTeleport(player, loc); + player.closeInventory(); + if (info != null && info.getTimesTeleported() > 5) { + Location newLoc = res.getOutsideFreeLoc(loc, player, true); + teleported = teleport(player, newLoc); + } else { + teleported = teleport(player, lastLoc); + } + } - return teleported; - } + if (!teleported) { + Location newLoc = res.getOutsideFreeLoc(loc, player, true); + player.closeInventory(); + teleported = teleport(player, newLoc); + } + } - // Preventing fly in residence only when player has move permission - if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) - && !ResPerm.bypass_nofly.hasPermission(player, 10000L) && res.isOwner(player)) { - - Location lc = player.getLocation(); - Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); - location.setPitch(lc.getPitch()); - location.setYaw(lc.getYaw()); - int from = location.getBlockY(); - int maxH = location.getWorld().getMaxHeight() - 1; - boolean teleported = false; - - for (int i = 0; i < maxH; i++) { - location.setY(from - i); - Block block = location.getBlock(); - if (!isEmptyBlock(block)) { - location.setY(from - i + 1); + switch (plugin.getConfigManager().getEnterLeaveMessageType()) { + case ActionBar: + case TitleBar: + FlagPermissions perms = res.getPermissions(); + if (perms.has(Flags.title, FlagCombo.TrueOrNone)) + CMIActionBar.send(player, plugin.msg(lm.Residence_MoveDeny, orres.getName())); + break; + case ChatBox: + plugin.msg(player, lm.Residence_MoveDeny, orres.getName()); + break; + default: break; } - if (location.getBlockY() <= 0) { - Location lastLoc = lastOutsideLoc.get(uuid); - player.closeInventory(); - if (lastLoc != null) - teleported = teleport(player, lastLoc); - else - teleported = teleport(player, res.getOutsideFreeLoc(loc, player, true)); - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); - return teleported; + return teleported; + } + + // Preventing fly in residence only when player has move permission + if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) + && !ResPerm.bypass_nofly.hasPermission(player, 10000L) && res.isOwner(player)) { + + Location lc = player.getLocation(); + Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); + location.setPitch(lc.getPitch()); + location.setYaw(lc.getYaw()); + int from = location.getBlockY(); + int maxH = location.getWorld().getMaxHeight() - 1; + boolean teleported = false; + + for (int i = 0; i < maxH; i++) { + location.setY(from - i); + Block block = location.getBlock(); + if (!isEmptyBlock(block)) { + location.setY(from - i + 1); + break; + } + if (location.getBlockY() <= 0) { + Location lastLoc = lastOutsideLoc.get(uuid); + player.closeInventory(); + if (lastLoc != null) + teleported = teleport(player, lastLoc); + else + teleported = teleport(player, res.getOutsideFreeLoc(loc, player, true)); + + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); + return teleported; + } } + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); + player.closeInventory(); + teleported = teleport(player, location); + if (!teleported) + return false; + player.setFlying(false); + player.setAllowFlight(false); } - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); - player.closeInventory(); - teleported = teleport(player, location); - if (!teleported) - return false; - player.setFlying(false); - player.setAllowFlight(false); + } catch (Throwable e) { + e.printStackTrace(); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java index 13e05085d..dba7ab270 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java @@ -16,76 +16,77 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; + public class ResidencePlayerListener1_9 implements Listener { private Residence plugin; public ResidencePlayerListener1_9(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } @EventHandler public void EntityToggleGlideEvent(EntityToggleGlideEvent event) { - // disabling event on world - if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) - return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) + return; - if (!(event.getEntity() instanceof Player)) - return; + if (!(event.getEntity() instanceof Player)) + return; - if (plugin.isResAdminOn(event.getEntity())) { - return; - } + if (plugin.isResAdminOn(event.getEntity())) { + return; + } - Player player = (Player) event.getEntity(); + Player player = (Player) event.getEntity(); - FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); + FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); - if (perms.playerHas(player, Flags.elytra, FlagCombo.TrueOrNone)) - return; + if (perms.playerHas(player, Flags.elytra, FlagCombo.TrueOrNone)) + return; - plugin.msg(player, lm.Flag_Deny, Flags.elytra); + plugin.msg(player, lm.Flag_Deny, Flags.elytra); - event.setCancelled(true); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - player.setGliding(false); - }, 2L); + event.setCancelled(true); + CMIScheduler.runAtEntityLater(player, () -> player.setGliding(false), 2L); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onResidenceChange(ResidenceChangedEvent event) { - ClaimedResidence newRes = event.getTo(); - - Player player = event.getPlayer(); - if (player == null) - return; - - if (!player.isGliding()) - return; - - if (newRes == null) - return; - - if (newRes.getPermissions().playerHas(player, Flags.elytra, FlagCombo.TrueOrNone)) - return; - - player.setGliding(false); - - Location loc = ResidencePlayerListener.getSafeLocation(player.getLocation()); - if (loc == null) { - // get defined land location in case no safe landing spot are found - loc = plugin.getConfigManager().getFlyLandLocation(); - if (loc == null) { - // get main world spawn location in case valid location is not found - loc = Bukkit.getWorlds().get(0).getSpawnLocation(); - } - } - if (loc != null) { - plugin.msg(player, lm.Flag_Deny, Flags.elytra); - player.closeInventory(); - player.teleport(loc); - } + ClaimedResidence newRes = event.getTo(); + + Player player = event.getPlayer(); + if (player == null) + return; + + if (!player.isGliding()) + return; + + if (newRes == null) + return; + + if (newRes.getPermissions().playerHas(player, Flags.elytra, FlagCombo.TrueOrNone)) + return; + + player.setGliding(false); + + Location loc = ResidencePlayerListener.getSafeLocation(player.getLocation()); + if (loc == null) { + // get defined land location in case no safe landing spot are found + loc = plugin.getConfigManager().getFlyLandLocation(); + if (loc == null) { + // get main world spawn location in case valid location is not found + loc = Bukkit.getWorlds().get(0).getSpawnLocation(); + } + } + if (loc != null) { + plugin.msg(player, lm.Flag_Deny, Flags.elytra); + player.closeInventory(); + CMITeleporter.teleportAsync(player, loc); + } } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 8ece1e586..ce70b50b2 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -35,6 +35,8 @@ import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Schedulers.CMITask; public class PermissionManager { protected static PermissionsInterface perms; @@ -46,83 +48,83 @@ public class PermissionManager { private PermissionGroup defaultGroup = null; private Residence plugin; - private int autoCacheClearId = 0; + private CMITask autoCacheClear = null; private static final int cacheClearDelay = 600; public PermissionManager(Residence plugin) { - this.plugin = plugin; - try { - groups = new LinkedHashMap(); - playersGroup = Collections.synchronizedMap(new HashMap()); - globalFlagPerms = new FlagPermissions(); - this.readConfig(); - checkPermissions(); - } catch (Exception ex) { - Logger.getLogger(PermissionManager.class.getName()).log(Level.SEVERE, null, ex); - } + this.plugin = plugin; + try { + groups = new LinkedHashMap(); + playersGroup = Collections.synchronizedMap(new HashMap()); + globalFlagPerms = new FlagPermissions(); + this.readConfig(); + checkPermissions(); + } catch (Exception ex) { + Logger.getLogger(PermissionManager.class.getName()).log(Level.SEVERE, null, ex); + } } public void startCacheClearScheduler() { - autoCacheClearId = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, cacheClear, cacheClearDelay * 20L, cacheClearDelay * 20L); + autoCacheClear = CMIScheduler.scheduleSyncRepeatingTask(cacheClear, cacheClearDelay * 20L, cacheClearDelay * 20L); } public void stopCacheClearScheduler() { - try { - if (autoCacheClearId > 0) - Bukkit.getScheduler().cancelTask(autoCacheClearId); - } catch (Throwable e) { - } + try { + if (autoCacheClear != null) + autoCacheClear.cancel(); + } catch (Throwable e) { + } } public FlagPermissions getAllFlags() { - return this.globalFlagPerms; + return this.globalFlagPerms; } public Map getPlayersGroups() { - return playersGroup; + return playersGroup; } public Map getGroups() { - return groups; + return groups; } public PermissionGroup getDefaultGroup() { - if (defaultGroup == null) - defaultGroup = groups.get(Residence.getInstance().getConfigManager().getDefaultGroup().toLowerCase()); - return defaultGroup; + if (defaultGroup == null) + defaultGroup = groups.get(Residence.getInstance().getConfigManager().getDefaultGroup().toLowerCase()); + return defaultGroup; } public PermissionGroup getGroupByName(String group) { - group = group.toLowerCase(); - if (!groups.containsKey(group)) { - return getDefaultGroup(); - } - return groups.get(group); + group = group.toLowerCase(); + if (!groups.containsKey(group)) { + return getDefaultGroup(); + } + return groups.get(group); } public String getPermissionsGroup(Player player) { - return this.getPermissionsGroup(player.getName(), player.getWorld().getName()).toLowerCase(); + return this.getPermissionsGroup(player.getName(), player.getWorld().getName()).toLowerCase(); } public String getPermissionsGroup(String player, String world) { - if (perms == null) - return plugin.getConfigManager().getDefaultGroup().toLowerCase(); - if (!Residence.getInstance().isFullyLoaded()) - return plugin.getConfigManager().getDefaultGroup().toLowerCase(); - try { - return perms.getPlayerGroup(player, world).toLowerCase(); - } catch (Exception e) { - return plugin.getConfigManager().getDefaultGroup().toLowerCase(); - } + if (perms == null) + return plugin.getConfigManager().getDefaultGroup().toLowerCase(); + if (!Residence.getInstance().isFullyLoaded()) + return plugin.getConfigManager().getDefaultGroup().toLowerCase(); + try { + return perms.getPlayerGroup(player, world).toLowerCase(); + } catch (Exception e) { + return plugin.getConfigManager().getDefaultGroup().toLowerCase(); + } } public boolean isResidenceAdmin(CommandSender sender) { - return (ResPerm.admin.hasPermission(sender) || (sender.isOp() && plugin.getConfigManager().getOpsAreAdmins())); + return (ResPerm.admin.hasPermission(sender) || (sender.isOp() && plugin.getConfigManager().getOpsAreAdmins())); } private void checkPermissions() { - Server server = plugin.getServ(); - + Server server = plugin.getServ(); + PluginManager pluginManager = plugin.getServer().getPluginManager(); Plugin pl = pluginManager.getPlugin("LuckPerms"); if (pl != null && pl.isEnabled()) { @@ -134,297 +136,296 @@ private void checkPermissions() { } plugin.consoleMessage("&cLuckPerms plugin was found but its outdated"); } - - Plugin p = server.getPluginManager().getPlugin("Vault"); - if (p != null) { - ResidenceVaultAdapter vault = new ResidenceVaultAdapter(server); - if (vault.permissionsOK()) { - perms = vault; - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Vault using permissions plugin:" + vault.getPermissionsName()); - return; - } - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Vault, but Vault reported no usable permissions system..."); - } + Plugin p = server.getPluginManager().getPlugin("Vault"); + if (p != null) { + ResidenceVaultAdapter vault = new ResidenceVaultAdapter(server); + if (vault.permissionsOK()) { + perms = vault; + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Vault using permissions plugin:" + vault.getPermissionsName()); + return; + } + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found Vault, but Vault reported no usable permissions system..."); + } - p = server.getPluginManager().getPlugin("bPermissions"); - if (p != null) { - perms = new BPermissionsAdapter(); - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found bPermissions Plugin!"); - return; - } + p = server.getPluginManager().getPlugin("bPermissions"); + if (p != null) { + perms = new BPermissionsAdapter(); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Found bPermissions Plugin!"); + return; + } - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Permissions plugin NOT FOUND!"); + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Permissions plugin NOT FOUND!"); } private void readConfig() { - FileConfiguration groupsFile = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); - - String defaultGroup = plugin.getConfigManager().getDefaultGroup().toLowerCase(); - globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", flags.getConfigurationSection("Global")); - ConfigurationSection nodes = groupsFile.getConfigurationSection("Groups"); - if (nodes != null) { - Set entrys = nodes.getKeys(false); - int i = 0; - for (String key : entrys) { - try { - i++; - - PermissionGroup old = groups.getOrDefault(key.toLowerCase(), new PermissionGroup(key.toLowerCase(), null, globalFlagPerms, i)); - - old.mirrorIn(nodes.getConfigurationSection(key)); - - groups.put(key.toLowerCase(), old); - List mirrors = nodes.getConfigurationSection(key).getStringList("Mirror"); - for (String group : mirrors) { - groups.put(group.toLowerCase(), new PermissionGroup(group.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms, i)); - } - } catch (Exception ex) { - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Error parsing group from config:" + key + " Exception:" + ex); - } - } - } - - if (!groups.containsKey(defaultGroup)) { - groups.put(defaultGroup, new PermissionGroup(defaultGroup)); - } - - Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded (" + groups.size() + ") groups"); - - if (groupsFile.isConfigurationSection("GroupAssignments")) { - Set keys = groupsFile.getConfigurationSection("GroupAssignments").getKeys(false); - if (keys != null) { - for (String key : keys) { - playersGroup.put(key.toLowerCase(), groupsFile.getString("GroupAssignments." + key, defaultGroup).toLowerCase()); - } - } - } + FileConfiguration groupsFile = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); + + String defaultGroup = plugin.getConfigManager().getDefaultGroup().toLowerCase(); + globalFlagPerms = FlagPermissions.parseFromConfigNode("FlagPermission", flags.getConfigurationSection("Global")); + ConfigurationSection nodes = groupsFile.getConfigurationSection("Groups"); + if (nodes != null) { + Set entrys = nodes.getKeys(false); + int i = 0; + for (String key : entrys) { + try { + i++; + + PermissionGroup old = groups.getOrDefault(key.toLowerCase(), new PermissionGroup(key.toLowerCase(), null, globalFlagPerms, i)); + + old.mirrorIn(nodes.getConfigurationSection(key)); + + groups.put(key.toLowerCase(), old); + List mirrors = nodes.getConfigurationSection(key).getStringList("Mirror"); + for (String group : mirrors) { + groups.put(group.toLowerCase(), new PermissionGroup(group.toLowerCase(), nodes.getConfigurationSection(key), globalFlagPerms, i)); + } + } catch (Exception ex) { + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Error parsing group from config:" + key + " Exception:" + ex); + } + } + } + + if (!groups.containsKey(defaultGroup)) { + groups.put(defaultGroup, new PermissionGroup(defaultGroup)); + } + + Bukkit.getConsoleSender().sendMessage(plugin.getPrefix() + " Loaded (" + groups.size() + ") groups"); + + if (groupsFile.isConfigurationSection("GroupAssignments")) { + Set keys = groupsFile.getConfigurationSection("GroupAssignments").getKeys(false); + if (keys != null) { + for (String key : keys) { + playersGroup.put(key.toLowerCase(), groupsFile.getString("GroupAssignments." + key, defaultGroup).toLowerCase()); + } + } + } } public boolean hasGroup(String group) { - group = group.toLowerCase(); - return groups.containsKey(group); + group = group.toLowerCase(); + return groups.containsKey(group); } public PermissionsInterface getPermissionsPlugin() { - return perms; + return perms; } public enum ResPerm { - chatcolor("Allows to change residence chat color"), - chatprefix("Allows to change residence chat prefix"), - chatkick("Allows to kick player from residence chat"), - permisiononerror("Allows to see missing permission on error message"), - - command_message_enter("Allows to change residence enter message"), - command_message_leave("Allows to change residence leave message"), - command_message_enter_remove("Allows to remove residence enter message"), - command_message_leave_remove("Allows to remove residence leave message"), - - cleanbypass("Prevents residence from ebing removed on automatic cleanup"), - worldguard_$1("Allows to create residence inside region", "region"), - flag_$1("Gives access to defined flag", "flagName"), - tpdelaybypass("Allows to bypass teleport delay"), - backup("Allows to use backup flag to save residence into schematics"), - admin_tp("Allows teleportation into residence where its not allowed"), - topadmin("Defines as residence top admin"), - admin("Defines as residence admin"), - admin_move("Allows movement in residence where its not allowed"), - newguyresidence("Creates residence on first chest place"), - bypass_ignorey("Allows to ignore Y corrdiante restrictions"), - bypass_ignoreyinsubzone("Allows to ignore subzone limitations"), - bypass_destroy("Allows to bypass destroy flag"), - bypass_build("Allows to bypass build flag"), - bypass_container("Allows to bypass container flag"), - bypass_use("Allows to bypass use flag"), - bypass_door("Allows to bypass door flag"), - bypass_button("Allows to bypass button flag"), - bypass_fly("Allows to bypass fly flag"), - bypass_nofly("Allows to bypass nofly flag"), - bypass_tp("Allows to bypass command flag"), - bypass_command("Allows to bypass command flag"), - bypass_itempickup("Allows to bypass itempickup flag"), + chatcolor("Allows to change residence chat color"), + chatprefix("Allows to change residence chat prefix"), + chatkick("Allows to kick player from residence chat"), + permisiononerror("Allows to see missing permission on error message"), + + command_message_enter("Allows to change residence enter message"), + command_message_leave("Allows to change residence leave message"), + command_message_enter_remove("Allows to remove residence enter message"), + command_message_leave_remove("Allows to remove residence leave message"), + + cleanbypass("Prevents residence from ebing removed on automatic cleanup"), + worldguard_$1("Allows to create residence inside region", "region"), + flag_$1("Gives access to defined flag", "flagName"), + tpdelaybypass("Allows to bypass teleport delay"), + backup("Allows to use backup flag to save residence into schematics"), + admin_tp("Allows teleportation into residence where its not allowed"), + topadmin("Defines as residence top admin"), + admin("Defines as residence admin"), + admin_move("Allows movement in residence where its not allowed"), + newguyresidence("Creates residence on first chest place"), + bypass_ignorey("Allows to ignore Y corrdiante restrictions"), + bypass_ignoreyinsubzone("Allows to ignore subzone limitations"), + bypass_destroy("Allows to bypass destroy flag"), + bypass_build("Allows to bypass build flag"), + bypass_container("Allows to bypass container flag"), + bypass_use("Allows to bypass use flag"), + bypass_door("Allows to bypass door flag"), + bypass_button("Allows to bypass button flag"), + bypass_fly("Allows to bypass fly flag"), + bypass_nofly("Allows to bypass nofly flag"), + bypass_tp("Allows to bypass command flag"), + bypass_command("Allows to bypass command flag"), + bypass_itempickup("Allows to bypass itempickup flag"), bypass_itemdrop("Allows to bypass itemdrop flag"), - buy("Allows to buy residence"), - sell("Allows to sell residence"), + buy("Allows to buy residence"), + sell("Allows to sell residence"), max_res_x_$1("Defines residence size limit on X axis", "number"), max_res_z_$1("Defines residence size limit on X axis", "number"), - max_res_unlimited("Defines residence limit as unlimited"), - max_res_$1("Defines residence limit", "number"), - max_subzones_unlimited("Defines subzone limit as unlimited"), - max_subzones_$1("Defines subzone limit", "number"), - max_subzonedepth_unlimited("Defines subzone depth limit as unlimited"), - max_subzonedepth_$1("Defines subzone depth limit", "number"), - max_rents_unlimited("Defines residence rent limit as unlimited"), - max_rents_$1("Defines residence rent limit", "number"), - group_$1("Defines players residence group", "groupName"), - market_evict("Allows to evict players from rented residences"), - rename("Allows to rename residence"), - select("Allows to select residence area"), - select_auto_others("Allows to toggle auto selection for others"), - resize("Allows to resize residence"), - create("Allows to create residence"), - create_subzone("Allows to create residence subzones"), - randomtp("Allows to use rt command"), - randomtp_admin("Allows to use rt command on another player"), - randomtp_cooldownbypass("Allows to bypass random teleport command cooldown"), - randomtp_delaybypass("Allows to bypass random teleport command delay"), - delete("Allows to delete residence"), - delete_subzone("Allows to delete subzone"), - command_kick_bypass("Allows to bypass kick from residence"), - command_contract_subzone("Allows to contract subzones"), - command_expand_subzone("Allows to expand subzones"), - versioncheck("Shows when we have new version of plugin"), - command_$1("Gives access to particular command", "commandName"), - command_$1_others("Allows to perform command on another player", "commandName"); - - private Boolean show = true; - private String desc; - private String[] wars; - private String fixedPermission = null; - - ResPerm(String desc, Boolean show) { - this.desc = desc; - this.show = show; - } - - ResPerm(String desc) { - this.desc = desc; - } - - ResPerm(String desc, String... wars) { - this.desc = desc; - this.wars = wars; - } - - public String getDesc() { - return desc; - } - - public void setDesc(String desc) { - this.desc = desc; - } - - public String getPermissionForShow() { - return getPermissionForShow(false); - } - - public String getPermissionForShow(boolean cmd) { - if (this.getWars() == null) - return getPermission(""); - - String[] w = new String[this.getWars().length]; - - for (int i = 0; i < this.getWars().length; i++) { - w[i] = Residence.getInstance().getLM().getMessage(lm.Permissions_variableColor) + "[" + this.getWars()[i] + "]" + (!cmd ? Residence.getInstance().getLM().getMessage( - lm.Permissions_permissionColor) : Residence.getInstance().getLM().getMessage(lm.Permissions_cmdPermissionColor)); - } - - return getPermission(w); - } - - public String getPermission() { - return getPermission(""); - } - - public String getPermission(String... extra) { - if (fixedPermission != null) - return fixedPermission; - - String perm = this.name().replace("_", "."); - int i = 0; - for (String one : extra) { - i++; - if (one == null || one.isEmpty()) - continue; - perm = perm.replace("$" + i, one.toLowerCase()); - } - perm = perm.replace("$star", "*"); - - if (!this.name().contains("$")) { - fixedPermission = "residence." + perm; - } - - return "residence." + perm; - } - - public boolean hasPermission(CommandSender sender) { - return hasPermission(sender, false); - } - - public boolean hasPermission(CommandSender sender, Integer... extra) { - String[] ex = new String[extra.length]; - for (int i = 0; i < extra.length; i++) { - ex[i] = String.valueOf(extra[i]); - } - return hasPermission(sender, false, ex); - } - - public boolean hasPermission(CommandSender sender, lm lm) { - return hasPermission(sender, true, true, null, lm); - } - - public boolean hasPermission(CommandSender sender, lm lm, String... extra) { - return hasPermission(sender, true, true, null, lm, extra); - } - - public boolean hasPermission(CommandSender sender, Flags flag) { - return hasPermission(sender, false, flag.toString()); - } - - public boolean hasPermission(CommandSender sender, String... extra) { - return hasPermission(sender, false, extra); - } - - public boolean hasPermission(CommandSender sender, Long delay, String... extra) { - return hasPermission(sender, false, true, delay, null, extra); - } - - public boolean hasPermission(CommandSender sender, boolean inform, String... extra) { - return hasPermission(sender, inform, true, extra); - } - - public boolean hasPermission(CommandSender sender, boolean inform, boolean informConsole, String... extra) { - return hasPermission(sender, inform, informConsole, null, null, extra); - } - - public boolean hasPermission(CommandSender sender, boolean inform, Long delayInMiliSeconds) { - return hasPermission(sender, inform, true, delayInMiliSeconds, null); - } - - public boolean hasPermission(CommandSender sender, boolean inform, boolean informConsole, Long delay, lm lms, String... extra) { - if (sender == null) - return false; - - if (!(sender instanceof Player)) { - return true; - } - - String perm = this.getPermission(extra); - - Player player = (Player) sender; - - PermissionInfo info = Residence.getInstance().getPermissionManager().getFromCache(player, perm); - boolean has = false; - if (info != null && info.getDelay() + info.getLastChecked() > System.currentTimeMillis()) { - has = info.isEnabled(); - } else { - has = sender.hasPermission(perm); - Residence.getInstance().getPermissionManager().addToCache(player, perm, has, delay == null ? 200L : delay); - } - - if (!has && inform) { - boolean showPerm = ResPerm.permisiononerror.hasPermission(sender, 50000L); - RawMessage rm = new RawMessage(); - rm.addText(Residence.getInstance().getLM().getMessage(lms == null ? lm.General_NoPermission : lms)).addHover(showPerm ? perm : null); - rm.show(sender); - - informConsole(sender, perm, informConsole); - } - return has; - } + max_res_unlimited("Defines residence limit as unlimited"), + max_res_$1("Defines residence limit", "number"), + max_subzones_unlimited("Defines subzone limit as unlimited"), + max_subzones_$1("Defines subzone limit", "number"), + max_subzonedepth_unlimited("Defines subzone depth limit as unlimited"), + max_subzonedepth_$1("Defines subzone depth limit", "number"), + max_rents_unlimited("Defines residence rent limit as unlimited"), + max_rents_$1("Defines residence rent limit", "number"), + group_$1("Defines players residence group", "groupName"), + market_evict("Allows to evict players from rented residences"), + rename("Allows to rename residence"), + select("Allows to select residence area"), + select_auto_others("Allows to toggle auto selection for others"), + resize("Allows to resize residence"), + create("Allows to create residence"), + create_subzone("Allows to create residence subzones"), + randomtp("Allows to use rt command"), + randomtp_admin("Allows to use rt command on another player"), + randomtp_cooldownbypass("Allows to bypass random teleport command cooldown"), + randomtp_delaybypass("Allows to bypass random teleport command delay"), + delete("Allows to delete residence"), + delete_subzone("Allows to delete subzone"), + command_kick_bypass("Allows to bypass kick from residence"), + command_contract_subzone("Allows to contract subzones"), + command_expand_subzone("Allows to expand subzones"), + versioncheck("Shows when we have new version of plugin"), + command_$1("Gives access to particular command", "commandName"), + command_$1_others("Allows to perform command on another player", "commandName"); + + private Boolean show = true; + private String desc; + private String[] wars; + private String fixedPermission = null; + + ResPerm(String desc, Boolean show) { + this.desc = desc; + this.show = show; + } + + ResPerm(String desc) { + this.desc = desc; + } + + ResPerm(String desc, String... wars) { + this.desc = desc; + this.wars = wars; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getPermissionForShow() { + return getPermissionForShow(false); + } + + public String getPermissionForShow(boolean cmd) { + if (this.getWars() == null) + return getPermission(""); + + String[] w = new String[this.getWars().length]; + + for (int i = 0; i < this.getWars().length; i++) { + w[i] = Residence.getInstance().getLM().getMessage(lm.Permissions_variableColor) + "[" + this.getWars()[i] + "]" + (!cmd ? Residence.getInstance().getLM().getMessage( + lm.Permissions_permissionColor) : Residence.getInstance().getLM().getMessage(lm.Permissions_cmdPermissionColor)); + } + + return getPermission(w); + } + + public String getPermission() { + return getPermission(""); + } + + public String getPermission(String... extra) { + if (fixedPermission != null) + return fixedPermission; + + String perm = this.name().replace("_", "."); + int i = 0; + for (String one : extra) { + i++; + if (one == null || one.isEmpty()) + continue; + perm = perm.replace("$" + i, one.toLowerCase()); + } + perm = perm.replace("$star", "*"); + + if (!this.name().contains("$")) { + fixedPermission = "residence." + perm; + } + + return "residence." + perm; + } + + public boolean hasPermission(CommandSender sender) { + return hasPermission(sender, false); + } + + public boolean hasPermission(CommandSender sender, Integer... extra) { + String[] ex = new String[extra.length]; + for (int i = 0; i < extra.length; i++) { + ex[i] = String.valueOf(extra[i]); + } + return hasPermission(sender, false, ex); + } + + public boolean hasPermission(CommandSender sender, lm lm) { + return hasPermission(sender, true, true, null, lm); + } + + public boolean hasPermission(CommandSender sender, lm lm, String... extra) { + return hasPermission(sender, true, true, null, lm, extra); + } + + public boolean hasPermission(CommandSender sender, Flags flag) { + return hasPermission(sender, false, flag.toString()); + } + + public boolean hasPermission(CommandSender sender, String... extra) { + return hasPermission(sender, false, extra); + } + + public boolean hasPermission(CommandSender sender, Long delay, String... extra) { + return hasPermission(sender, false, true, delay, null, extra); + } + + public boolean hasPermission(CommandSender sender, boolean inform, String... extra) { + return hasPermission(sender, inform, true, extra); + } + + public boolean hasPermission(CommandSender sender, boolean inform, boolean informConsole, String... extra) { + return hasPermission(sender, inform, informConsole, null, null, extra); + } + + public boolean hasPermission(CommandSender sender, boolean inform, Long delayInMiliSeconds) { + return hasPermission(sender, inform, true, delayInMiliSeconds, null); + } + + public boolean hasPermission(CommandSender sender, boolean inform, boolean informConsole, Long delay, lm lms, String... extra) { + if (sender == null) + return false; + + if (!(sender instanceof Player)) { + return true; + } + + String perm = this.getPermission(extra); + + Player player = (Player) sender; + + PermissionInfo info = Residence.getInstance().getPermissionManager().getFromCache(player, perm); + boolean has = false; + if (info != null && info.getDelay() + info.getLastChecked() > System.currentTimeMillis()) { + has = info.isEnabled(); + } else { + has = sender.hasPermission(perm); + Residence.getInstance().getPermissionManager().addToCache(player, perm, has, delay == null ? 200L : delay); + } + + if (!has && inform) { + boolean showPerm = ResPerm.permisiononerror.hasPermission(sender, 50000L); + RawMessage rm = new RawMessage(); + rm.addText(Residence.getInstance().getLM().getMessage(lms == null ? lm.General_NoPermission : lms)).addHover(showPerm ? perm : null); + rm.show(sender); + + informConsole(sender, perm, informConsole); + } + return has; + } // public boolean hasPermission(Player player, String inName) { // @@ -443,243 +444,238 @@ public boolean hasPermission(CommandSender sender, boolean inform, boolean infor // } // } - private static void informConsole(CommandSender sender, String permission, boolean informConsole) { - if (informConsole) { - ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); - Residence.getInstance().msg(console, Residence.getInstance().getLM().getMessage(lm.General_NoPermission, "[playerName]", sender.getName(), "[permission]", permission)); - } - } - - public boolean hasSetPermission(CommandSender sender, String... extra) { - return hasSetPermission(sender, false, extra); - } - - public boolean hasSetPermission(CommandSender sender, boolean inform, String... extra) { - return hasSetPermission(sender, this.getPermission(extra), inform); - } - - public static boolean hasSetPermission(CommandSender sender, String perm, boolean inform) { - boolean has = Residence.getInstance().getPermissionManager().isSetPermission(sender, perm); - if (!has && inform) { - boolean showPerm = ResPerm.permisiononerror.hasPermission(sender); - RawMessage rm = new RawMessage(); - rm.addText(Residence.getInstance().getLM().getMessage(lm.General_NoPermission)).addHover(showPerm ? perm : null); - rm.show(sender); - - informConsole(sender, perm, true); - } - return has; - } - - public String[] getWars() { - return wars; - } - - public void setWars(String[] wars) { - this.wars = wars; - } - - public Boolean getShow() { - return show; - } - - public void setShow(Boolean show) { - this.show = show; - } - - public static boolean hasPermission(CommandSender sender, String permision, Boolean output) { - return hasPermission(sender, permision, output, true); - } - - public static boolean hasPermission(CommandSender sender, String permision, Boolean output, boolean informConsole) { - if (!(sender instanceof Player)) { - return true; - } - Player player = (Player) sender; - if (player.hasPermission(permision)) { - return true; - } - if (output) { - boolean showPerm = ResPerm.permisiononerror.hasPermission(sender); - RawMessage rm = new RawMessage(); - rm.addText(Residence.getInstance().getLM().getMessage(lm.General_NoPermission)).addHover(showPerm ? permision : null); - rm.show(sender); - - informConsole(sender, permision, informConsole); - } - return false; - } - } - - private Runnable cacheClear = new Runnable() { - @Override - public void run() { - cache.clear(); - } - }; + private static void informConsole(CommandSender sender, String permission, boolean informConsole) { + if (informConsole) { + ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); + Residence.getInstance().msg(console, Residence.getInstance().getLM().getMessage(lm.General_NoPermission, "[playerName]", sender.getName(), "[permission]", permission)); + } + } + + public boolean hasSetPermission(CommandSender sender, String... extra) { + return hasSetPermission(sender, false, extra); + } + + public boolean hasSetPermission(CommandSender sender, boolean inform, String... extra) { + return hasSetPermission(sender, this.getPermission(extra), inform); + } + + public static boolean hasSetPermission(CommandSender sender, String perm, boolean inform) { + boolean has = Residence.getInstance().getPermissionManager().isSetPermission(sender, perm); + if (!has && inform) { + boolean showPerm = ResPerm.permisiononerror.hasPermission(sender); + RawMessage rm = new RawMessage(); + rm.addText(Residence.getInstance().getLM().getMessage(lm.General_NoPermission)).addHover(showPerm ? perm : null); + rm.show(sender); + + informConsole(sender, perm, true); + } + return has; + } + + public String[] getWars() { + return wars; + } + + public void setWars(String[] wars) { + this.wars = wars; + } + + public Boolean getShow() { + return show; + } + + public void setShow(Boolean show) { + this.show = show; + } + + public static boolean hasPermission(CommandSender sender, String permision, Boolean output) { + return hasPermission(sender, permision, output, true); + } + + public static boolean hasPermission(CommandSender sender, String permision, Boolean output, boolean informConsole) { + if (!(sender instanceof Player)) { + return true; + } + Player player = (Player) sender; + if (player.hasPermission(permision)) { + return true; + } + if (output) { + boolean showPerm = ResPerm.permisiononerror.hasPermission(sender); + RawMessage rm = new RawMessage(); + rm.addText(Residence.getInstance().getLM().getMessage(lm.General_NoPermission)).addHover(showPerm ? permision : null); + rm.show(sender); + + informConsole(sender, permision, informConsole); + } + return false; + } + } private HashMap> cache = new HashMap>(); + private Runnable cacheClear = () -> cache.clear(); + public void removeFromCache(Player player) { - cache.remove(player.getUniqueId()); + cache.remove(player.getUniqueId()); } public PermissionInfo getFromCache(Player player, String perm) { - HashMap old = cache.get(player.getUniqueId()); - if (old == null) { - return null; - } - return old.get(perm); + HashMap old = cache.get(player.getUniqueId()); + if (old == null) { + return null; + } + return old.get(perm); } public PermissionInfo addToCache(Player player, String perm, boolean has, Long delayInMiliseconds) { - HashMap old = cache.get(player.getUniqueId()); - if (old == null) { - old = new HashMap(); - } + HashMap old = cache.get(player.getUniqueId()); + if (old == null) { + old = new HashMap(); + } - PermissionInfo info = new PermissionInfo(perm, delayInMiliseconds); - info.setLastChecked(System.currentTimeMillis()); - info.setEnabled(has); + PermissionInfo info = new PermissionInfo(perm, delayInMiliseconds); + info.setLastChecked(System.currentTimeMillis()); + info.setEnabled(has); - old.put(perm, info); - cache.put(player.getUniqueId(), old); + old.put(perm, info); + cache.put(player.getUniqueId(), old); - return info; + return info; } public PermissionAttachmentInfo getSetPermission(CommandSender sender, String perm) { - if (sender instanceof Player) - for (PermissionAttachmentInfo permission : ((Player) sender).getEffectivePermissions()) { - if (permission.getPermission().equalsIgnoreCase(perm)) { - return permission; - } - } - return null; + if (sender instanceof Player) + for (PermissionAttachmentInfo permission : ((Player) sender).getEffectivePermissions()) { + if (permission.getPermission().equalsIgnoreCase(perm)) { + return permission; + } + } + return null; } public boolean isSetPermission(CommandSender sender, String perm) { - if (sender instanceof Player) - return isSetPermission((Player) sender, perm); - return true; + if (sender instanceof Player) + return isSetPermission((Player) sender, perm); + return true; } public boolean isSetPermission(Player player, String perm) { - return player.hasPermission(new Permission(perm, PermissionDefault.FALSE)); + return player.hasPermission(new Permission(perm, PermissionDefault.FALSE)); } @Deprecated public PermissionInfo getPermissionInfo(Player player, String perm, Long delayInMiliseconds) { - return getPermissionInfo(player, perm, false, delayInMiliseconds); + return getPermissionInfo(player, perm, false, delayInMiliseconds); } @Deprecated public PermissionInfo getPermissionInfo(Player player, ResPerm perm) { - return getPermissionInfo(player, perm, 1000L); + return getPermissionInfo(player, perm, 1000L); } public PermissionInfo getPermissionInfo(UUID uuid, ResPerm perm) { - return getPermissionInfo(uuid, perm, 1000L); + return getPermissionInfo(uuid, perm, 1000L); } @Deprecated public PermissionInfo getPermissionInfo(Player player, ResPerm perm, Long delayInMiliseconds) { - return getPermissionInfo(player.getUniqueId(), perm, delayInMiliseconds); + return getPermissionInfo(player.getUniqueId(), perm, delayInMiliseconds); } public PermissionInfo getPermissionInfo(UUID uuid, ResPerm perm, Long delayInMiliseconds) { - String permission = perm.getPermission(" "); - if (permission.endsWith(" ")) - permission = permission.replace(" ", ""); - if (permission.endsWith(".")) - permission = permission.substring(0, permission.length() - 1); - return getPermissionInfo(uuid, permission, false, delayInMiliseconds); + String permission = perm.getPermission(" "); + if (permission.endsWith(" ")) + permission = permission.replace(" ", ""); + if (permission.endsWith(".")) + permission = permission.substring(0, permission.length() - 1); + return getPermissionInfo(uuid, permission, false, delayInMiliseconds); } @Deprecated public PermissionInfo getPermissionInfo(Player player, String perm) { - return getPermissionInfo(player, perm, false, 1000L); + return getPermissionInfo(player, perm, false, 1000L); } @Deprecated public PermissionInfo getPermissionInfo(Player player, String perm, boolean force) { - return getPermissionInfo(player, perm, force, 1000L); + return getPermissionInfo(player, perm, force, 1000L); } @Deprecated public PermissionInfo getPermissionInfo(Player player, String perm, boolean force, Long delay) { - return getPermissionInfo(player.getUniqueId(), perm, force, delay); + return getPermissionInfo(player.getUniqueId(), perm, force, delay); } public PermissionInfo getPermissionInfo(UUID uuid, String perm, boolean force, Long delay) { - perm = perm.toLowerCase(); - if (!perm.endsWith(".")) - perm += "."; + perm = perm.toLowerCase(); + if (!perm.endsWith(".")) + perm += "."; - if (uuid == null) - return new PermissionInfo(perm, delay); + if (uuid == null) + return new PermissionInfo(perm, delay); - HashMap c = cache.get(uuid); - if (c == null) - c = new HashMap(); + HashMap c = cache.get(uuid); + if (c == null) + c = new HashMap(); - PermissionInfo p = c.get(perm); + PermissionInfo p = c.get(perm); - if (p == null) - p = new PermissionInfo(perm, delay); + if (p == null) + p = new PermissionInfo(perm, delay); - if (delay != null) - p.setDelay(delay); + if (delay != null) + p.setDelay(delay); - String pref = perm.contains(".") ? perm.split("\\.")[0] : perm; + String pref = perm.contains(".") ? perm.split("\\.")[0] : perm; - if (force || p.isTimeToRecalculate()) { - Player player = Bukkit.getPlayer(uuid); - if (player != null) { - HashMap all = getAll(player, pref); + if (force || p.isTimeToRecalculate()) { + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + HashMap all = getAll(player, pref); - Double max = null; - Double min = null; - for (Entry uno : all.entrySet()) { - if (!uno.getValue()) - continue; + Double max = null; + Double min = null; + for (Entry uno : all.entrySet()) { + if (!uno.getValue()) + continue; - if (!uno.getKey().startsWith(perm)) - continue; + if (!uno.getKey().startsWith(perm)) + continue; - String value = uno.getKey().replace(perm, ""); + String value = uno.getKey().replace(perm, ""); - p.addValue(value); - try { - double t = Double.parseDouble(value); + p.addValue(value); + try { + double t = Double.parseDouble(value); - if (max == null || t > max) - max = t; + if (max == null || t > max) + max = t; - if (min == null || t < min) - min = t; - } catch (Exception e) { - } + if (min == null || t < min) + min = t; + } catch (Exception e) { + } - } + } - p.setMaxValue(max); - p.setMinValue(min); - } - } - p.setLastChecked(System.currentTimeMillis()); - c.put(perm, p); - cache.put(uuid, c); - return p; + p.setMaxValue(max); + p.setMinValue(min); + } + } + p.setLastChecked(System.currentTimeMillis()); + c.put(perm, p); + cache.put(uuid, c); + return p; } private static HashMap getAll(Player player, String pref) { - pref = pref.endsWith(".") ? pref : pref + "."; - HashMap mine = new HashMap(); - for (PermissionAttachmentInfo permission : player.getEffectivePermissions()) { - if (permission.getPermission().startsWith(pref)) - mine.put(permission.getPermission(), permission.getValue()); - } - return mine; + pref = pref.endsWith(".") ? pref : pref + "."; + HashMap mine = new HashMap(); + for (PermissionAttachmentInfo permission : player.getEffectivePermissions()) { + if (permission.getPermission().startsWith(pref)) + mine.put(permission.getPermission(), permission.getValue()); + } + return mine; } } diff --git a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java index fa33be362..4f34ecebf 100644 --- a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java +++ b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java @@ -20,6 +20,8 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Messages.CMIMessages; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Schedulers.CMITask; import net.pl3x.map.core.Pl3xMap; import net.pl3x.map.core.markers.Point; import net.pl3x.map.core.markers.layer.Layer; @@ -38,7 +40,7 @@ public class Pl3xMapManager { public Pl3xMap api; - private int schedId = -1; + private CMITask scheduler = null; HashMap providers = new HashMap(); public Pl3xMapManager(Residence plugin) { @@ -51,18 +53,10 @@ public void fireUpdateAdd(final ClaimedResidence res, final int deep) { if (res == null) return; - if (schedId != -1) - Bukkit.getServer().getScheduler().cancelTask(schedId); + if (scheduler != null) + scheduler.cancel(); - schedId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { - @Override - public void run() { - schedId = -1; - - handleResidenceAdd(res.getName(), res, deep); - return; - } - }, 10L); + scheduler = CMIScheduler.runTaskLater(() -> handleResidenceAdd(res.getName(), res, deep), 10L); } public void fireUpdateRemove(final ClaimedResidence res, final int deep) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 1c71e0a78..e80cb4870 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -15,6 +15,8 @@ import java.util.Random; import java.util.Set; import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -64,6 +66,9 @@ import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; +import net.Zrips.CMILib.Version.Version; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; public class ClaimedResidence { @@ -1498,14 +1503,11 @@ else if (distance == 555) public void TpTimer(final Player player, final int t) { CMITitleMessage.send(player, Residence.getInstance().msg(lm.General_TeleportTitle), Residence.getInstance().msg(lm.General_TeleportTitleTime, t)); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { - @Override - public void run() { - if (!Residence.getInstance().getTeleportDelayMap().contains(player.getName())) - return; - if (t > 1) - TpTimer(player, t - 1); - } + CMIScheduler.runTaskLater(() -> { + if (!Residence.getInstance().getTeleportDelayMap().contains(player.getName())) + return; + if (t > 1) + TpTimer(player, t - 1); }, 20L); } @@ -1516,24 +1518,20 @@ public void performDelaydTp(final Location targloc, final Player targetPlayer, P if (tpevent.isCancelled()) return; - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { - @Override - public void run() { - if (targloc == null || targetPlayer == null || !targetPlayer.isOnline()) - return; - if (!Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName()) - && Residence.getInstance().getConfigManager().getTeleportDelay() > 0) - return; - else if (Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName())) - Residence.getInstance().getTeleportDelayMap().remove(targetPlayer.getName()); - targetPlayer.closeInventory(); - targetPlayer.teleport(targloc); - if (near) - Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); - else - Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); + CMIScheduler.runAtLocationLater(targloc, () -> { + if (targloc == null || targetPlayer == null || !targetPlayer.isOnline()) return; - } + if (!Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName()) + && Residence.getInstance().getConfigManager().getTeleportDelay() > 0) + return; + else if (Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName())) + Residence.getInstance().getTeleportDelayMap().remove(targetPlayer.getName()); + targetPlayer.closeInventory(); + CMITeleporter.teleportAsync(targetPlayer, targloc); + if (near) + Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); + else + Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); }, Residence.getInstance().getConfigManager().getTeleportDelay() * 20L); } @@ -1549,14 +1547,29 @@ private void performInstantTp(final Location targloc, final Player targetPlayer, } catch (Throwable e) { } - boolean teleported = targetPlayer.teleport(targloc); + if (Version.isFolia()) { - if (teleported) { - if (near) - Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); - else - Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); + CompletableFuture future = CMITeleporter.teleportAsync(targetPlayer, targloc); + future.thenAccept(result -> { + if (result) { + if (near) + Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); + else + Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); + } + }); + + } else { + boolean teleported = targetPlayer.teleport(targloc); + + if (teleported) { + if (near) + Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); + else + Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); + } } + } } @@ -2235,7 +2248,12 @@ public boolean kickFromResidence(Player player) { Location loc = Residence.getInstance().getConfigManager().getKickLocation(); player.closeInventory(); if (loc != null) { - return player.teleport(loc); + try { + return CMITeleporter.teleport(player, loc); + } catch (Throwable e) { + e.printStackTrace(); + return false; + } } loc = getOutsideFreeLoc(player.getLocation(), player, true); @@ -2243,7 +2261,12 @@ public boolean kickFromResidence(Player player) { if (loc == null) return false; - return player.teleport(loc); + try { + return CMITeleporter.teleport(player, loc); + } catch (Throwable e) { + e.printStackTrace(); + return false; + } } // public Town getTown() { // return town; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 25b7dea02..aa8599e61 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -57,6 +57,7 @@ import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Version.Version; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; public class ResidenceManager implements ResidenceInterface { protected ConcurrentHashMap residences; @@ -270,8 +271,6 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String plugin.msg(player, lm.Residence_AlreadyExists, residences.get(resName.toLowerCase()).getResidenceName()); return false; } - - newRes.BlockSellPrice = group.getSellPerBlock(); @@ -605,60 +604,58 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole if (Version.isCurrentEqualOrHigher(Version.v1_13_R1) && plugin.getConfigManager().isUseClean() && plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) { CuboidArea[] arr = res.getAreaArray(); - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - ChunkSnapshot chunkSnapshot = null; - int chunkX = 0; - int chunkZ = 0; - Set locations = new HashSet(); - for (CuboidArea area : arr) { - Location low = area.getLowLocation().clone(); - Location high = area.getHighLocation().clone(); - - if (high.getBlockY() > plugin.getConfigManager().getCleanLevel()) { - - if (low.getBlockY() < plugin.getConfigManager().getCleanLevel()) - low.setY(plugin.getConfigManager().getCleanLevel()); - World world = low.getWorld(); - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - int hy = world.getHighestBlockYAt(x, z); - if (high.getBlockY() < hy) - hy = high.getBlockY(); - - int cx = Math.abs(x % 16); - int cz = Math.abs(z % 16); - if (chunkSnapshot == null || x >> 4 != chunkX || z >> 4 != chunkZ) { - if (!world.getBlockAt(x, 0, z).getChunk().isLoaded()) { - world.getBlockAt(x, 0, z).getChunk().load(); - chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(false, false, false); - world.getBlockAt(x, 0, z).getChunk().unload(); - } else { - chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(); - } - chunkX = x >> 4; - chunkZ = z >> 4; + CMIScheduler.runTaskAsynchronously(() -> { + ChunkSnapshot chunkSnapshot = null; + int chunkX = 0; + int chunkZ = 0; + Set locations = new HashSet(); + for (CuboidArea area : arr) { + Location low = area.getLowLocation().clone(); + Location high = area.getHighLocation().clone(); + + if (high.getBlockY() > plugin.getConfigManager().getCleanLevel()) { + + if (low.getBlockY() < plugin.getConfigManager().getCleanLevel()) + low.setY(plugin.getConfigManager().getCleanLevel()); + World world = low.getWorld(); + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + int hy = world.getHighestBlockYAt(x, z); + if (high.getBlockY() < hy) + hy = high.getBlockY(); + + int cx = Math.abs(x % 16); + int cz = Math.abs(z % 16); + if (chunkSnapshot == null || x >> 4 != chunkX || z >> 4 != chunkZ) { + if (!world.getBlockAt(x, 0, z).getChunk().isLoaded()) { + world.getBlockAt(x, 0, z).getChunk().load(); + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(false, false, false); + world.getBlockAt(x, 0, z).getChunk().unload(); + } else { + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(); } + chunkX = x >> 4; + chunkZ = z >> 4; + } - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - for (int y = low.getBlockY(); y <= hy; y++) { - BlockData type = chunkSnapshot.getBlockData(cx, y, cz); - if (!plugin.getConfigManager().getCleanBlocks().contains(type.getMaterial())) - continue; - locations.add(new Location(world, x, y, z)); - } + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + for (int y = low.getBlockY(); y <= hy; y++) { + BlockData type = chunkSnapshot.getBlockData(cx, y, cz); + if (!plugin.getConfigManager().getCleanBlocks().contains(type.getMaterial())) + continue; + locations.add(new Location(world, x, y, z)); } } } } } - Bukkit.getScheduler().runTask(plugin, () -> { - for (Location one : locations) { - one.getBlock().setType(Material.AIR); - } - }); } + CMIScheduler.runTask(() -> { + for (Location one : locations) { + CMIScheduler.runAtLocation(one, () -> one.getBlock().setType(Material.AIR)); + } + }); + }); } if (plugin.getConfigManager().isRemoveLwcOnDelete() && plugin.isLwcPresent()) diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java index ce765cd00..9886f8ae3 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -21,6 +21,9 @@ import net.Zrips.CMILib.CMILib; import net.Zrips.CMILib.BossBar.BossBarInfo; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Schedulers.CMITask; +import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; public class ResidenceRaid { @@ -32,32 +35,32 @@ public class ResidenceRaid { private HashMap attackers = new HashMap(); private HashMap defenders = new HashMap(); - private int schedRaidEndId = -1; - private int shedRaidStartId = -1; - private int schedBossBarId = -1; + private CMITask schedRaidEndId = null; + private CMITask shedRaidStartId = null; + private CMITask schedBossBarId = null; public ResidenceRaid(ClaimedResidence res) { - this.res = res; + this.res = res; } public boolean onSameTeam(Player player1, Player player2) { - return attackers.containsKey(player1.getUniqueId()) && attackers.containsKey(player2.getUniqueId()) || defenders.containsKey(player1.getUniqueId()) && defenders.containsKey(player2.getUniqueId()); + return attackers.containsKey(player1.getUniqueId()) && attackers.containsKey(player2.getUniqueId()) || defenders.containsKey(player1.getUniqueId()) && defenders.containsKey(player2.getUniqueId()); } public Long getEndsAt() { - return endsAt; + return endsAt; } public Long getCooldownEnd() { - return endsAt + (ConfigManager.RaidCooldown * 1000); + return endsAt + (ConfigManager.RaidCooldown * 1000); } public void setEndsAt(Long endsAt) { - this.endsAt = endsAt; + this.endsAt = endsAt; } public boolean isEnded() { - return getEndsAt() < System.currentTimeMillis(); + return getEndsAt() < System.currentTimeMillis(); } // public Long getLastSiegeEnded() { // return lastSiegeEnded; @@ -68,93 +71,93 @@ public boolean isEnded() { // } public ClaimedResidence getRes() { - return res; + return res; } public HashMap getDefenders() { - return defenders; + return defenders; } public void addDefender(Player defender) { - addDefender(Residence.getInstance().getPlayerManager().getResidencePlayer(defender)); + addDefender(Residence.getInstance().getPlayerManager().getResidencePlayer(defender)); } public void addDefender(ResidencePlayer defender) { - this.attackers.remove(defender.getUniqueId()); - this.defenders.put(defender.getUniqueId(), new RaidDefender(defender)); - defender.setJoinedRaid(this); + this.attackers.remove(defender.getUniqueId()); + this.defenders.put(defender.getUniqueId(), new RaidDefender(defender)); + defender.setJoinedRaid(this); } public boolean isDefender(Player player) { - return isDefender(player.getUniqueId()); + return isDefender(player.getUniqueId()); } public boolean isDefender(UUID uuid) { - return defenders.containsKey(uuid); + return defenders.containsKey(uuid); } public void removeDefender(Player defender) { - removeDefender(Residence.getInstance().getPlayerManager().getResidencePlayer(defender)); + removeDefender(Residence.getInstance().getPlayerManager().getResidencePlayer(defender)); } public void removeDefender(ResidencePlayer defender) { - this.defenders.remove(defender.getUniqueId()); - defender.setJoinedRaid(null); + this.defenders.remove(defender.getUniqueId()); + defender.setJoinedRaid(null); } public boolean isAttacker(Player player) { - return isAttacker(player.getUniqueId()); + return isAttacker(player.getUniqueId()); } public boolean isAttacker(UUID uuid) { - return attackers.containsKey(uuid); + return attackers.containsKey(uuid); } public HashMap getAttackers() { - return attackers; + return attackers; } public void clearAttackers() { - for (Entry one : this.attackers.entrySet()) { - one.getValue().getPlayer().setJoinedRaid(null); - } - this.attackers.clear(); + for (Entry one : this.attackers.entrySet()) { + one.getValue().getPlayer().setJoinedRaid(null); + } + this.attackers.clear(); } public void clearDefenders() { - for (Entry one : this.defenders.entrySet()) { - one.getValue().getPlayer().setJoinedRaid(null); - } - this.defenders.clear(); + for (Entry one : this.defenders.entrySet()) { + one.getValue().getPlayer().setJoinedRaid(null); + } + this.defenders.clear(); } public void addAttacker(Player attacker) { - addAttacker(Residence.getInstance().getPlayerManager().getResidencePlayer(attacker)); + addAttacker(Residence.getInstance().getPlayerManager().getResidencePlayer(attacker)); } public void addAttacker(ResidencePlayer attacker) { - this.defenders.remove(attacker.getUniqueId()); - this.attackers.put(attacker.getUniqueId(), new RaidAttacker(attacker)); + this.defenders.remove(attacker.getUniqueId()); + this.attackers.put(attacker.getUniqueId(), new RaidAttacker(attacker)); - attacker.setJoinedRaid(this); + attacker.setJoinedRaid(this); } public void removeAttacker(Player attacker) { - this.attackers.remove(attacker.getUniqueId()); - removeAttacker(Residence.getInstance().getPlayerManager().getResidencePlayer(attacker)); + this.attackers.remove(attacker.getUniqueId()); + removeAttacker(Residence.getInstance().getPlayerManager().getResidencePlayer(attacker)); } public void removeAttacker(ResidencePlayer attacker) { - attacker.setJoinedRaid(null); - this.attackers.remove(attacker.getUniqueId()); + attacker.setJoinedRaid(null); + this.attackers.remove(attacker.getUniqueId()); } public Long getStartsAt() { - return startsAt; + return startsAt; } public void setStartsAt(Long startsAt) { - this.startsAt = startsAt; + this.startsAt = startsAt; } public static final String bossBarPreRaidIdent = "ResidencePreRaid"; @@ -162,243 +165,233 @@ public void setStartsAt(Long startsAt) { public void showBossBar() { - if (isUnderRaid()) { - for (Entry one : getAttackers().entrySet()) { - ResidencePlayer rPlayer = one.getValue().getPlayer(); - if (rPlayer.isOnline()) - showBossbar(rPlayer, BarColor.BLUE, lm.Raid_EndsIn); - } - for (Entry one : getDefenders().entrySet()) { - ResidencePlayer rOwner = one.getValue().getPlayer(); - if (rOwner.isOnline()) - showBossbar(rOwner, BarColor.BLUE, lm.Raid_EndsIn); - } - } else if (isInPreRaid()) { - for (Entry one : getAttackers().entrySet()) { - ResidencePlayer rPlayer = one.getValue().getPlayer(); - if (rPlayer.isOnline()) - showBossbar(rPlayer, BarColor.GREEN, lm.Raid_StartsIn); - } - for (Entry one : getDefenders().entrySet()) { - ResidencePlayer rOwner = one.getValue().getPlayer(); - if (rOwner.isOnline()) - showBossbar(rOwner, BarColor.GREEN, lm.Raid_StartsIn); - } - } + if (isUnderRaid()) { + for (Entry one : getAttackers().entrySet()) { + ResidencePlayer rPlayer = one.getValue().getPlayer(); + if (rPlayer.isOnline()) + showBossbar(rPlayer, BarColor.BLUE, lm.Raid_EndsIn); + } + for (Entry one : getDefenders().entrySet()) { + ResidencePlayer rOwner = one.getValue().getPlayer(); + if (rOwner.isOnline()) + showBossbar(rOwner, BarColor.BLUE, lm.Raid_EndsIn); + } + } else if (isInPreRaid()) { + for (Entry one : getAttackers().entrySet()) { + ResidencePlayer rPlayer = one.getValue().getPlayer(); + if (rPlayer.isOnline()) + showBossbar(rPlayer, BarColor.GREEN, lm.Raid_StartsIn); + } + for (Entry one : getDefenders().entrySet()) { + ResidencePlayer rOwner = one.getValue().getPlayer(); + if (rOwner.isOnline()) + showBossbar(rOwner, BarColor.GREEN, lm.Raid_StartsIn); + } + } } private void showBossbar(ResidencePlayer rPlayer, BarColor color, lm msg) { - BossBarInfo barInfo = CMILib.getInstance().getBossBarManager().getBossBar(rPlayer.getPlayer(), isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent); - if (barInfo == null) { - barInfo = new BossBarInfo(rPlayer.getPlayer(), isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent) { - @Override - public void updateCycle() { - setTitleOfBar(Residence.getInstance().msg(msg, getDefenders().size(), getAttackers().size())); - } - }; - Double secLeft = ((isUnderRaid() ? getEndsAt() : getStartsAt()) - System.currentTimeMillis()) / 1000D; - barInfo.setKeepForTicks(22); - barInfo.setColor(color); - barInfo.setTitleOfBar(Residence.getInstance().msg(msg, getDefenders().size(), getAttackers().size())); - barInfo.setAdjustPerc(-(1D / secLeft)); - barInfo.setPercentage(secLeft, secLeft); - barInfo.setStyle(BarStyle.SEGMENTED_20); - barInfo.setAuto(20); - - CMILib.getInstance().getBossBarManager().addBossBar(rPlayer.getPlayer(), barInfo); - } + BossBarInfo barInfo = CMILib.getInstance().getBossBarManager().getBossBar(rPlayer.getPlayer(), isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent); + if (barInfo == null) { + barInfo = new BossBarInfo(rPlayer.getPlayer(), isUnderRaid() ? bossBarRaidIdent : bossBarPreRaidIdent) { + @Override + public void updateCycle() { + setTitleOfBar(Residence.getInstance().msg(msg, getDefenders().size(), getAttackers().size())); + } + }; + Double secLeft = ((isUnderRaid() ? getEndsAt() : getStartsAt()) - System.currentTimeMillis()) / 1000D; + barInfo.setKeepForTicks(22); + barInfo.setColor(color); + barInfo.setTitleOfBar(Residence.getInstance().msg(msg, getDefenders().size(), getAttackers().size())); + barInfo.setAdjustPerc(-(1D / secLeft)); + barInfo.setPercentage(secLeft, secLeft); + barInfo.setStyle(BarStyle.SEGMENTED_20); + barInfo.setAuto(20); + + CMILib.getInstance().getBossBarManager().addBossBar(rPlayer.getPlayer(), barInfo); + } } public void endRaid() { - setEndsAt(System.currentTimeMillis()); - - if (this.schedRaidEndId > 0) { - ResidenceRaidEndEvent End = new ResidenceRaidEndEvent(res); - Bukkit.getPluginManager().callEvent(End); - Bukkit.getScheduler().cancelTask(this.schedRaidEndId); - this.schedRaidEndId = -1; - } - - if (this.shedRaidStartId > 0) { - Bukkit.getScheduler().cancelTask(this.shedRaidStartId); - this.shedRaidStartId = -1; - } - - if (this.schedBossBarId > 0) { - Bukkit.getScheduler().cancelTask(this.schedBossBarId); - this.schedBossBarId = -1; - } - - setStartsAt(0L); - - for (Entry one : getAttackers().entrySet()) { - Player player = Bukkit.getPlayer(one.getKey()); - if (player == null) - continue; - Residence.getInstance().msg(player, lm.Raid_Ended, res.getName()); - Location outside = res.getOutsideFreeLoc(player.getLocation(), player, true); - if (outside != null) - player.teleport(outside); - } - - for (Entry one : getAttackers().entrySet()) { - ResidencePlayer RPlayer = one.getValue().getPlayer(); - if (RPlayer != null) { - RPlayer.setLastRaidAttackTimer(System.currentTimeMillis()); - BossBarInfo barInfo = CMILib.getInstance().getBossBarManager().getBossBar(RPlayer.getPlayer(), ResidenceRaid.bossBarRaidIdent); - if (barInfo != null) { - barInfo.cancelAutoScheduler(); - barInfo.remove(); - CMILib.getInstance().getBossBarManager().removeBossBar(RPlayer.getPlayer(), barInfo); - } - barInfo = CMILib.getInstance().getBossBarManager().getBossBar(RPlayer.getPlayer(), ResidenceRaid.bossBarPreRaidIdent); - if (barInfo != null) { - barInfo.cancelAutoScheduler(); - barInfo.remove(); - CMILib.getInstance().getBossBarManager().removeBossBar(RPlayer.getPlayer(), barInfo); - } - } - } - - for (Entry one : getDefenders().entrySet()) { - ResidencePlayer RPlayer = one.getValue().getPlayer(); - if (RPlayer != null) { - BossBarInfo barInfo = CMILib.getInstance().getBossBarManager().getBossBar(RPlayer.getPlayer(), ResidenceRaid.bossBarRaidIdent); - if (barInfo != null) { - barInfo.cancelAutoScheduler(); - barInfo.remove(); - CMILib.getInstance().getBossBarManager().removeBossBar(RPlayer.getPlayer(), barInfo); - } - barInfo = CMILib.getInstance().getBossBarManager().getBossBar(RPlayer.getPlayer(), ResidenceRaid.bossBarPreRaidIdent); - if (barInfo != null) { - barInfo.cancelAutoScheduler(); - barInfo.remove(); - CMILib.getInstance().getBossBarManager().removeBossBar(RPlayer.getPlayer(), barInfo); - } - } - } - - res.getRPlayer().setLastRaidDefendTimer(System.currentTimeMillis()); - - clearAttackers(); - clearDefenders(); + setEndsAt(System.currentTimeMillis()); + + if (this.schedRaidEndId != null) { + ResidenceRaidEndEvent End = new ResidenceRaidEndEvent(res); + Bukkit.getPluginManager().callEvent(End); + schedRaidEndId.cancel(); + schedRaidEndId = null; + } + + if (this.shedRaidStartId != null) { + shedRaidStartId.cancel(); + schedRaidEndId = null; + } + + if (this.schedBossBarId != null) { + schedBossBarId.cancel(); + schedRaidEndId = null; + } + + setStartsAt(0L); + + for (Entry one : getAttackers().entrySet()) { + Player player = Bukkit.getPlayer(one.getKey()); + if (player == null) + continue; + Residence.getInstance().msg(player, lm.Raid_Ended, res.getName()); + Location outside = res.getOutsideFreeLoc(player.getLocation(), player, true); + if (outside != null) + CMITeleporter.teleportAsync(player, outside); + } + + for (Entry one : getAttackers().entrySet()) { + ResidencePlayer RPlayer = one.getValue().getPlayer(); + if (RPlayer != null) { + RPlayer.setLastRaidAttackTimer(System.currentTimeMillis()); + BossBarInfo barInfo = CMILib.getInstance().getBossBarManager().getBossBar(RPlayer.getPlayer(), ResidenceRaid.bossBarRaidIdent); + if (barInfo != null) { + barInfo.cancelAutoScheduler(); + barInfo.remove(); + CMILib.getInstance().getBossBarManager().removeBossBar(RPlayer.getPlayer(), barInfo); + } + barInfo = CMILib.getInstance().getBossBarManager().getBossBar(RPlayer.getPlayer(), ResidenceRaid.bossBarPreRaidIdent); + if (barInfo != null) { + barInfo.cancelAutoScheduler(); + barInfo.remove(); + CMILib.getInstance().getBossBarManager().removeBossBar(RPlayer.getPlayer(), barInfo); + } + } + } + + for (Entry one : getDefenders().entrySet()) { + ResidencePlayer RPlayer = one.getValue().getPlayer(); + if (RPlayer != null) { + BossBarInfo barInfo = CMILib.getInstance().getBossBarManager().getBossBar(RPlayer.getPlayer(), ResidenceRaid.bossBarRaidIdent); + if (barInfo != null) { + barInfo.cancelAutoScheduler(); + barInfo.remove(); + CMILib.getInstance().getBossBarManager().removeBossBar(RPlayer.getPlayer(), barInfo); + } + barInfo = CMILib.getInstance().getBossBarManager().getBossBar(RPlayer.getPlayer(), ResidenceRaid.bossBarPreRaidIdent); + if (barInfo != null) { + barInfo.cancelAutoScheduler(); + barInfo.remove(); + CMILib.getInstance().getBossBarManager().removeBossBar(RPlayer.getPlayer(), barInfo); + } + } + } + + res.getRPlayer().setLastRaidDefendTimer(System.currentTimeMillis()); + + clearAttackers(); + clearDefenders(); } public boolean isImmune() { - return immunityUntil == null ? false : immunityUntil > System.currentTimeMillis(); + return immunityUntil == null ? false : immunityUntil > System.currentTimeMillis(); } public Long getPlayerImmunityUntil() { - ResidencePlayer rplayer = this.res.getRPlayer(); - if (rplayer == null) - return 0L; - return rplayer.getLastRaidDefendTimer() == null ? 0L : rplayer.getLastRaidDefendTimer() + (ConfigManager.RaidPlayerCooldown * 1000L); + ResidencePlayer rplayer = this.res.getRPlayer(); + if (rplayer == null) + return 0L; + return rplayer.getLastRaidDefendTimer() == null ? 0L : rplayer.getLastRaidDefendTimer() + (ConfigManager.RaidPlayerCooldown * 1000L); } public boolean isPlayerImmune() { - return getPlayerImmunityUntil() > System.currentTimeMillis(); + return getPlayerImmunityUntil() > System.currentTimeMillis(); } public Long getImmunityUntil() { - return immunityUntil; + return immunityUntil; } public void setImmunityUntil(Long immunityUntil) { - if (immunityUntil != null && immunityUntil > System.currentTimeMillis()) - this.immunityUntil = immunityUntil; - else - this.immunityUntil = null; + if (immunityUntil != null && immunityUntil > System.currentTimeMillis()) + this.immunityUntil = immunityUntil; + else + this.immunityUntil = null; } public boolean preStartRaid(Player attacker) { - if (isUnderRaid() || this.isInPreRaid()) - return false; + if (isUnderRaid() || this.isInPreRaid()) + return false; - if (getCooldownEnd() > System.currentTimeMillis()) - return false; + if (getCooldownEnd() > System.currentTimeMillis()) + return false; - if (attacker != null) - addAttacker(attacker); - addDefender(res.getRPlayer().getPlayer()); - setStartsAt(System.currentTimeMillis() + (ConfigManager.PreRaidTimer * 1000)); - setEndsAt(getStartsAt() + (ConfigManager.RaidTimer * 1000)); + if (attacker != null) + addAttacker(attacker); + addDefender(res.getRPlayer().getPlayer()); + setStartsAt(System.currentTimeMillis() + (ConfigManager.PreRaidTimer * 1000)); + setEndsAt(getStartsAt() + (ConfigManager.RaidTimer * 1000)); - ResidenceRaidPreStartEvent start = new ResidenceRaidPreStartEvent(res, getAttackers()); + ResidenceRaidPreStartEvent start = new ResidenceRaidPreStartEvent(res, getAttackers()); - Bukkit.getPluginManager().callEvent(start); - if (start.isCancelled()) - return false; + Bukkit.getPluginManager().callEvent(start); + if (start.isCancelled()) + return false; - if (attacker != null) - Residence.getInstance().getPlayerManager().getResidencePlayer(attacker).setLastRaidAttackTimer(System.currentTimeMillis()); - res.getRPlayer().setLastRaidDefendTimer(System.currentTimeMillis()); - setImmunityUntil(ConfigManager.RaidCooldown * 1000L); + if (attacker != null) + Residence.getInstance().getPlayerManager().getResidencePlayer(attacker).setLastRaidAttackTimer(System.currentTimeMillis()); + res.getRPlayer().setLastRaidDefendTimer(System.currentTimeMillis()); + setImmunityUntil(ConfigManager.RaidCooldown * 1000L); - return true; + return true; } public boolean startRaid() { - if (!isUnderRaid() && !this.isInPreRaid()) - return false; - - ResidenceRaidStartEvent start = new ResidenceRaidStartEvent(res, getAttackers()); - this.shedRaidStartId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { - @Override - public void run() { - Bukkit.getPluginManager().callEvent(start); - if (start.isCancelled()) - start.getRes().getRaid().endRaid(); - } - }, ((getStartsAt() - System.currentTimeMillis()) / 50)); - - schedBossBarId = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(Residence.getInstance(), new Runnable() { - @Override - public void run() { - if (!isUnderRaid() && !isInPreRaid()) { - Bukkit.getServer().getScheduler().cancelTask(schedBossBarId); - return; - } - showBossBar(); - } - }, this.isUnderRaid() ? 20L : 0L, 20L); - - this.schedRaidEndId = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Residence.getInstance(), new Runnable() { - @Override - public void run() { - endRaid(); - } - }, ((getEndsAt() - System.currentTimeMillis()) / 50)); - - return true; + if (!isUnderRaid() && !this.isInPreRaid()) + return false; + + ResidenceRaidStartEvent start = new ResidenceRaidStartEvent(res, getAttackers()); + this.shedRaidStartId = CMIScheduler.runTaskLater(() -> { + Bukkit.getPluginManager().callEvent(start); + if (start.isCancelled()) + start.getRes().getRaid().endRaid(); + }, ((getStartsAt() - System.currentTimeMillis()) / 50)); + + schedBossBarId = CMIScheduler.scheduleSyncRepeatingTask(() -> { + if (!isUnderRaid() && !isInPreRaid()) { + schedBossBarId.cancel(); + return; + } + showBossBar(); + + }, this.isUnderRaid() ? 20L : 0L, 20L); + + this.schedRaidEndId = CMIScheduler.runTaskLater(() -> endRaid(), ((getEndsAt() - System.currentTimeMillis()) / 50)); + + return true; } public boolean isUnderRaid() { - return getEndsAt() > System.currentTimeMillis() - && getStartsAt() < System.currentTimeMillis(); + return getEndsAt() > System.currentTimeMillis() + && getStartsAt() < System.currentTimeMillis(); } public boolean isRaidInitialized() { - if (isUnderRaid() || isInPreRaid()) - return true; - if (res.getParent() != null) - return res.getParent().getRaid().isRaidInitialized(); - return false; + if (isUnderRaid() || isInPreRaid()) + return true; + if (res.getParent() != null) + return res.getParent().getRaid().isRaidInitialized(); + return false; } public boolean isInPreRaid() { - return getEndsAt() > System.currentTimeMillis() - && getStartsAt() > System.currentTimeMillis(); + return getEndsAt() > System.currentTimeMillis() + && getStartsAt() > System.currentTimeMillis(); } public boolean canRaid() { - return !isUnderRaid() && getCooldownEnd() < System.currentTimeMillis(); + return !isUnderRaid() && getCooldownEnd() < System.currentTimeMillis(); } public boolean isUnderRaidCooldown() { - return getCooldownEnd() > System.currentTimeMillis(); + return getCooldownEnd() > System.currentTimeMillis(); } } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 321089634..58ddfa571 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -35,7 +35,8 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Effects.CMIEffect; import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; -import net.Zrips.CMILib.Logs.CMIDebug; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Schedulers.CMITask; public class SelectionManager { protected Map selections; @@ -48,1113 +49,1104 @@ public class SelectionManager { Permission ignoreyinsubzonePermission = new Permission(ResPerm.bypass_ignoreyinsubzone.getPermission(), PermissionDefault.FALSE); public enum selectionType { - noLimits, ignoreY, residenceBounds; + noLimits, ignoreY, residenceBounds; } public class Selection { - private Player player; - private Location loc1; - private Location loc2; - - public Selection(Player player) { - this.player = player; - } - - public Location getBaseLoc1() { - return loc1 == null ? null : loc1.clone(); - } - - public void setBaseLoc1(Location loc1) { - this.loc1 = loc1.clone(); - } - - public World getWorld() { - if (loc1 != null) - return loc1.getWorld(); - if (loc2 != null) - return loc2.getWorld(); - return player.getWorld(); - } - - public Location getBaseLoc2() { - return loc2 == null ? null : loc2.clone(); - } - - public void setBaseLoc2(Location loc2) { - this.loc2 = loc2.clone(); - } - - public selectionType getSelectionRestrictions() { - if (inSameResidence()) { - if (plugin.getConfigManager().isSelectionIgnoreYInSubzone()) { - if (hasPlacedBoth() && !player.hasPermission(ignoreyinsubzonePermission)) { - return selectionType.residenceBounds; - } - } - } else { - if (plugin.getConfigManager().isSelectionIgnoreY()) { - if (hasPlacedBoth() && !player.hasPermission(ignoreyPermission)) { - return selectionType.ignoreY; - } - } - } - return selectionType.noLimits; - } - - public int getMaxYAllowed() { - switch (getSelectionRestrictions()) { - case ignoreY: - case noLimits: - default: - return getMaxWorldHeight(getWorld()); - case residenceBounds: - ClaimedResidence res1 = plugin.getResidenceManager().getByLoc(this.getBaseLoc2()); - if (res1 != null) { - CuboidArea area = res1.getAreaByLoc(this.getBaseLoc2()); - if (area != null) { - return area.getHighVector().getBlockY(); - } - } - break; - } - return getMaxWorldHeight(getWorld()); - } - - public int getMinYAllowed() { - switch (getSelectionRestrictions()) { - case ignoreY: - case noLimits: - default: - try { - return CMIWorld.getMinHeight(this.getBaseLoc1().getWorld()); - } catch (Throwable e) { - return 0; - } - case residenceBounds: - ClaimedResidence res1 = plugin.getResidenceManager().getByLoc(this.getBaseLoc1()); - if (res1 != null) { - CuboidArea area = res1.getAreaByLoc(getBaseLoc1()); - if (area != null) - return area.getLowVector().getBlockY(); - } - break; - } - try { - return CMIWorld.getMinHeight(this.getBaseLoc1().getWorld()); - } catch (Throwable e) { - return 0; - } - } - - private boolean inSameResidence() { - if (!hasPlacedBoth()) - return false; - - ClaimedResidence res1 = plugin.getResidenceManager().getByLoc(this.getBaseLoc1()); - - if (res1 == null) - return false; - - ClaimedResidence res2 = plugin.getResidenceManager().getByLoc(this.getBaseLoc2()); - - if (res2 == null) - return false; - return res1.getName().equals(res2.getName()); - } - - public void vert(boolean resadmin) { - if (hasPlacedBoth()) { - sky(resadmin); - bedrock(resadmin); - } else { - plugin.msg(player, lm.Select_Points); - } - } - - private void shadowSky(CuboidArea area) { - if (!hasPlacedBoth()) - return; - area.setHighLocation(this.getBaseArea().getHighLocation()); - area.getHighVector().setY(this.getMaxYAllowed()); - } - - private void shadowBedrock(CuboidArea area) { - if (!hasPlacedBoth()) - return; - area.setLowLocation(this.getBaseArea().getLowLocation()); - area.getLowVector().setY(this.getMinYAllowed()); - } - - public void sky(boolean resadmin) { - if (hasPlacedBoth()) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(this.getPlayer()); - PermissionGroup group = rPlayer.getGroup(); - - CuboidArea base = this.getBaseArea(); - - int y1 = base.getLowVector().getBlockY(); - - int newy = this.getMaxYAllowed(); - - if (!resadmin) { - if (group.getMaxHeight() < newy) - newy = group.getMaxHeight(); - if (newy - y1 > (group.getMaxY() - 1)) - newy = y1 + (group.getMaxY() - 1); - } - - loc1 = base.getLowLocation(); - loc2 = base.getHighLocation(); - loc2.setY(newy); - - plugin.msg(player, lm.Select_Sky); - } else { - plugin.msg(player, lm.Select_Points); - } - } - - public void bedrock(boolean resadmin) { - if (hasPlacedBoth()) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(this.getPlayer()); - PermissionGroup group = rPlayer.getGroup(); - - CuboidArea base = this.getBaseArea(); - - int y2 = base.getHighVector().getBlockY(); - - int newy = this.getMinYAllowed(); - if (!resadmin) { - if (newy < group.getMinHeight()) - newy = group.getMinHeight(); - if (y2 - newy > (group.getMaxY() - 1)) - newy = y2 - (group.getMaxY() - 1); - } - - loc1 = base.getLowLocation(); - loc2 = base.getHighLocation(); - loc1.setY(newy); - - plugin.msg(player, lm.Select_Bedrock); - } else { - plugin.msg(player, lm.Select_Points); - } - } - - public void selectChunk() { - Chunk chunk = player.getWorld().getChunkAt(player.getLocation()); - int xcoord = chunk.getX() * 16; - int zcoord = chunk.getZ() * 16; - int xmax = xcoord + 15; - int zmax = zcoord + 15; - - this.setBaseLoc1(new Location(player.getWorld(), xcoord, this.getMinYAllowed(), zcoord)); - this.setBaseLoc2(new Location(player.getWorld(), xmax, this.getMaxYAllowed(), zmax)); - plugin.msg(player, lm.Select_Success); - } - - public boolean hasPlacedBoth() { - return this.getBaseLoc1() != null && this.getBaseLoc2() != null; - } - - public Player getPlayer() { - return player; - } - - public void setPlayer(Player player) { - this.player = player; - } - - public CuboidArea getBaseArea() { - if (!this.hasPlacedBoth()) - return null; - return new CuboidArea(this.loc1, this.loc2); - } - - public CuboidArea getResizedArea() { - - CuboidArea area = this.getBaseArea(); - switch (getSelectionRestrictions()) { - case noLimits: - break; - case residenceBounds: - case ignoreY: - shadowSky(area); - shadowBedrock(area); - break; - default: - break; - } - - return area; - } + private Player player; + private Location loc1; + private Location loc2; + + public Selection(Player player) { + this.player = player; + } + + public Location getBaseLoc1() { + return loc1 == null ? null : loc1.clone(); + } + + public void setBaseLoc1(Location loc1) { + this.loc1 = loc1.clone(); + } + + public World getWorld() { + if (loc1 != null) + return loc1.getWorld(); + if (loc2 != null) + return loc2.getWorld(); + return player.getWorld(); + } + + public Location getBaseLoc2() { + return loc2 == null ? null : loc2.clone(); + } + + public void setBaseLoc2(Location loc2) { + this.loc2 = loc2.clone(); + } + + public selectionType getSelectionRestrictions() { + if (inSameResidence()) { + if (plugin.getConfigManager().isSelectionIgnoreYInSubzone()) { + if (hasPlacedBoth() && !player.hasPermission(ignoreyinsubzonePermission)) { + return selectionType.residenceBounds; + } + } + } else { + if (plugin.getConfigManager().isSelectionIgnoreY()) { + if (hasPlacedBoth() && !player.hasPermission(ignoreyPermission)) { + return selectionType.ignoreY; + } + } + } + return selectionType.noLimits; + } + + public int getMaxYAllowed() { + switch (getSelectionRestrictions()) { + case ignoreY: + case noLimits: + default: + return getMaxWorldHeight(getWorld()); + case residenceBounds: + ClaimedResidence res1 = plugin.getResidenceManager().getByLoc(this.getBaseLoc2()); + if (res1 != null) { + CuboidArea area = res1.getAreaByLoc(this.getBaseLoc2()); + if (area != null) { + return area.getHighVector().getBlockY(); + } + } + break; + } + return getMaxWorldHeight(getWorld()); + } + + public int getMinYAllowed() { + switch (getSelectionRestrictions()) { + case ignoreY: + case noLimits: + default: + try { + return CMIWorld.getMinHeight(this.getBaseLoc1().getWorld()); + } catch (Throwable e) { + return 0; + } + case residenceBounds: + ClaimedResidence res1 = plugin.getResidenceManager().getByLoc(this.getBaseLoc1()); + if (res1 != null) { + CuboidArea area = res1.getAreaByLoc(getBaseLoc1()); + if (area != null) + return area.getLowVector().getBlockY(); + } + break; + } + try { + return CMIWorld.getMinHeight(this.getBaseLoc1().getWorld()); + } catch (Throwable e) { + return 0; + } + } + + private boolean inSameResidence() { + if (!hasPlacedBoth()) + return false; + + ClaimedResidence res1 = plugin.getResidenceManager().getByLoc(this.getBaseLoc1()); + + if (res1 == null) + return false; + + ClaimedResidence res2 = plugin.getResidenceManager().getByLoc(this.getBaseLoc2()); + + if (res2 == null) + return false; + return res1.getName().equals(res2.getName()); + } + + public void vert(boolean resadmin) { + if (hasPlacedBoth()) { + sky(resadmin); + bedrock(resadmin); + } else { + plugin.msg(player, lm.Select_Points); + } + } + + private void shadowSky(CuboidArea area) { + if (!hasPlacedBoth()) + return; + area.setHighLocation(this.getBaseArea().getHighLocation()); + area.getHighVector().setY(this.getMaxYAllowed()); + } + + private void shadowBedrock(CuboidArea area) { + if (!hasPlacedBoth()) + return; + area.setLowLocation(this.getBaseArea().getLowLocation()); + area.getLowVector().setY(this.getMinYAllowed()); + } + + public void sky(boolean resadmin) { + if (hasPlacedBoth()) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(this.getPlayer()); + PermissionGroup group = rPlayer.getGroup(); + + CuboidArea base = this.getBaseArea(); + + int y1 = base.getLowVector().getBlockY(); + + int newy = this.getMaxYAllowed(); + + if (!resadmin) { + if (group.getMaxHeight() < newy) + newy = group.getMaxHeight(); + if (newy - y1 > (group.getMaxY() - 1)) + newy = y1 + (group.getMaxY() - 1); + } + + loc1 = base.getLowLocation(); + loc2 = base.getHighLocation(); + loc2.setY(newy); + + plugin.msg(player, lm.Select_Sky); + } else { + plugin.msg(player, lm.Select_Points); + } + } + + public void bedrock(boolean resadmin) { + if (hasPlacedBoth()) { + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(this.getPlayer()); + PermissionGroup group = rPlayer.getGroup(); + + CuboidArea base = this.getBaseArea(); + + int y2 = base.getHighVector().getBlockY(); + + int newy = this.getMinYAllowed(); + if (!resadmin) { + if (newy < group.getMinHeight()) + newy = group.getMinHeight(); + if (y2 - newy > (group.getMaxY() - 1)) + newy = y2 - (group.getMaxY() - 1); + } + + loc1 = base.getLowLocation(); + loc2 = base.getHighLocation(); + loc1.setY(newy); + + plugin.msg(player, lm.Select_Bedrock); + } else { + plugin.msg(player, lm.Select_Points); + } + } + + public void selectChunk() { + Chunk chunk = player.getWorld().getChunkAt(player.getLocation()); + int xcoord = chunk.getX() * 16; + int zcoord = chunk.getZ() * 16; + int xmax = xcoord + 15; + int zmax = zcoord + 15; + + this.setBaseLoc1(new Location(player.getWorld(), xcoord, this.getMinYAllowed(), zcoord)); + this.setBaseLoc2(new Location(player.getWorld(), xmax, this.getMaxYAllowed(), zmax)); + plugin.msg(player, lm.Select_Success); + } + + public boolean hasPlacedBoth() { + return this.getBaseLoc1() != null && this.getBaseLoc2() != null; + } + + public Player getPlayer() { + return player; + } + + public void setPlayer(Player player) { + this.player = player; + } + + public CuboidArea getBaseArea() { + if (!this.hasPlacedBoth()) + return null; + return new CuboidArea(this.loc1, this.loc2); + } + + public CuboidArea getResizedArea() { + + CuboidArea area = this.getBaseArea(); + switch (getSelectionRestrictions()) { + case noLimits: + break; + case residenceBounds: + case ignoreY: + shadowSky(area); + shadowBedrock(area); + break; + default: + break; + } + + return area; + } } private int getMaxWorldHeight(World world) { - if (world == null) - return 319; - switch (world.getEnvironment()) { - case NETHER: - return plugin.getConfigManager().getSelectionNetherHeight(); - case NORMAL: - case THE_END: - - try { - return CMIWorld.getMaxHeight(world) - 1; - } catch (Throwable e) { - return 319; - } - default: - break; - } - - try { - return CMIWorld.getMaxHeight(world) - 1; - } catch (Throwable e) { - return 319; - } + if (world == null) + return 319; + switch (world.getEnvironment()) { + case NETHER: + return plugin.getConfigManager().getSelectionNetherHeight(); + case NORMAL: + case THE_END: + + try { + return CMIWorld.getMaxHeight(world) - 1; + } catch (Throwable e) { + return 319; + } + default: + break; + } + + try { + return CMIWorld.getMaxHeight(world) - 1; + } catch (Throwable e) { + return 319; + } } public enum Direction { - UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ; - - public Direction getOpposite() { - switch (this) { - case DOWN: - return UP; - case MINUSX: - return PLUSX; - case MINUSZ: - return PLUSZ; - case PLUSX: - return MINUSX; - case PLUSZ: - return MINUSZ; - case UP: - return DOWN; - default: - break; - } - return this; - } + UP, DOWN, PLUSX, PLUSZ, MINUSX, MINUSZ; + + public Direction getOpposite() { + switch (this) { + case DOWN: + return UP; + case MINUSX: + return PLUSX; + case MINUSZ: + return PLUSZ; + case PLUSX: + return MINUSX; + case PLUSZ: + return MINUSZ; + case UP: + return DOWN; + default: + break; + } + return this; + } } public SelectionManager(Server server, Residence plugin) { - this.plugin = plugin; - this.server = server; - selections = Collections.synchronizedMap(new HashMap()); + this.plugin = plugin; + this.server = server; + selections = Collections.synchronizedMap(new HashMap()); } public Selection getSelection(Player player) { - Selection s = selections.get(player.getUniqueId()); - if (s == null) { - s = new Selection(player); - selections.put(player.getUniqueId(), s); - } - return s; + Selection s = selections.get(player.getUniqueId()); + if (s == null) { + s = new Selection(player); + selections.put(player.getUniqueId(), s); + } + return s; } public void updateLocations(Player player) { - Selection s = selections.get(player.getUniqueId()); - if (s != null) { - updateLocations(player, this.getSelection(player).getBaseLoc1(), this.getSelection(player).getBaseLoc2(), true); - } + Selection s = selections.get(player.getUniqueId()); + if (s != null) { + updateLocations(player, this.getSelection(player).getBaseLoc1(), this.getSelection(player).getBaseLoc2(), true); + } } public void updateLocations(Player player, Location loc1, Location loc2) { - updateLocations(player, loc1, loc2, false); + updateLocations(player, loc1, loc2, false); } public void updateLocations(Player player, Location loc1, Location loc2, boolean force) { - Selection selection = getSelection(player); - if (loc1 != null) - selection.setBaseLoc1(loc1); - if (loc2 != null) - selection.setBaseLoc2(loc2); - this.afterSelectionUpdate(player, force); + Selection selection = getSelection(player); + if (loc1 != null) + selection.setBaseLoc1(loc1); + if (loc2 != null) + selection.setBaseLoc2(loc2); + this.afterSelectionUpdate(player, force); } public void placeLoc1(Player player, Location loc) { - placeLoc1(player, loc, false); + placeLoc1(player, loc, false); } public void placeLoc1(Player player, Location loc, boolean show) { - if (loc != null) { - getSelection(player).setBaseLoc1(loc); - if (show) { - this.afterSelectionUpdate(player); - } - } + if (loc != null) { + getSelection(player).setBaseLoc1(loc); + if (show) { + this.afterSelectionUpdate(player); + } + } } public void placeLoc2(Player player, Location loc) { - placeLoc2(player, loc, false); + placeLoc2(player, loc, false); } public void placeLoc2(Player player, Location loc, boolean show) { - if (loc != null) { - getSelection(player).setBaseLoc2(loc); - if (show) { - this.afterSelectionUpdate(player); - } - } + if (loc != null) { + getSelection(player).setBaseLoc2(loc); + if (show) { + this.afterSelectionUpdate(player); + } + } } public void afterSelectionUpdate(Player player) { - afterSelectionUpdate(player, false); + afterSelectionUpdate(player, false); } public void afterSelectionUpdate(Player player, boolean force) { - if (!this.hasPlacedBoth(player)) - return; - Visualizer v = vMap.get(player.getUniqueId()); - if (v == null) { - v = new Visualizer(player); - vMap.put(player.getUniqueId(), v); - } - v.setStart(System.currentTimeMillis()); - v.cancelAll(); - if (force) - v.setLoc(null); - v.setAreas(this.getSelectionCuboid(player)); - v.setOnce(false); - - this.showBounds(player, v); + if (!this.hasPlacedBoth(player)) + return; + Visualizer v = vMap.get(player.getUniqueId()); + if (v == null) { + v = new Visualizer(player); + vMap.put(player.getUniqueId(), v); + } + v.setStart(System.currentTimeMillis()); + v.cancelAll(); + if (force) + v.setLoc(null); + v.setAreas(this.getSelectionCuboid(player)); + v.setOnce(false); + + this.showBounds(player, v); } public Location getPlayerLoc1(Player player) { - if (player == null) - return null; - Selection sel = getSelection(player); - if (sel == null) - return null; - CuboidArea area = sel.getResizedArea(); - if (area == null) - return null; - return area.getLowLocation(); + if (player == null) + return null; + Selection sel = getSelection(player); + if (sel == null) + return null; + CuboidArea area = sel.getResizedArea(); + if (area == null) + return null; + return area.getLowLocation(); } @Deprecated public Location getPlayerLoc1(String player) { - return getPlayerLoc1(Bukkit.getPlayer(player)); + return getPlayerLoc1(Bukkit.getPlayer(player)); } public Location getPlayerLoc2(Player player) { - if (player == null) - return null; - Selection sel = getSelection(player); - if (sel == null) - return null; - CuboidArea area = sel.getResizedArea(); - if (area == null) - return null; - return area.getHighLocation(); + if (player == null) + return null; + Selection sel = getSelection(player); + if (sel == null) + return null; + CuboidArea area = sel.getResizedArea(); + if (area == null) + return null; + return area.getHighLocation(); } @Deprecated public Location getPlayerLoc2(String player) { - return getPlayerLoc2(Bukkit.getPlayer(player)); + return getPlayerLoc2(Bukkit.getPlayer(player)); } public CuboidArea getSelectionCuboid(Player player) { - if (player == null) - return null; - return getSelection(player).getResizedArea(); + if (player == null) + return null; + return getSelection(player).getResizedArea(); } @Deprecated public CuboidArea getSelectionCuboid(String player) { - if (!hasPlacedBoth(player)) - return null; - return getSelectionCuboid(Bukkit.getPlayer(player)); + if (!hasPlacedBoth(player)) + return null; + return getSelectionCuboid(Bukkit.getPlayer(player)); } public boolean hasPlacedBoth(Player player) { - if (player == null) - return false; - return getSelection(player).hasPlacedBoth(); + if (player == null) + return false; + return getSelection(player).hasPlacedBoth(); } @Deprecated public boolean hasPlacedBoth(String player) { - return hasPlacedBoth(Bukkit.getPlayer(player)); + return hasPlacedBoth(Bukkit.getPlayer(player)); } public void showSelectionInfoInActionBar(Player player) { - if (!plugin.getConfigManager().useActionBarOnSelection()) - return; + if (!plugin.getConfigManager().useActionBarOnSelection()) + return; - CuboidArea cuboidArea = this.getSelectionCuboid(player); + CuboidArea cuboidArea = this.getSelectionCuboid(player); - String Message = plugin.msg(lm.Select_TotalSize, cuboidArea.getSize()); + String Message = plugin.msg(lm.Select_TotalSize, cuboidArea.getSize()); - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (plugin.getConfigManager().enableEconomy()) - Message += " " + plugin.msg(lm.General_LandCost, cuboidArea.getCost(group)); + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (plugin.getConfigManager().enableEconomy()) + Message += " " + plugin.msg(lm.General_LandCost, cuboidArea.getCost(group)); - CMIActionBar.send(player, Message); + CMIActionBar.send(player, Message); } public void showSelectionInfo(Player player) { - if (hasPlacedBoth(player)) { - plugin.msg(player, lm.General_Separator); - CuboidArea cuboidArea = this.getSelectionCuboid(player); - plugin.msg(player, lm.Select_TotalSize, cuboidArea.getSize()); - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - - if (plugin.getConfigManager().enableEconomy()) - plugin.msg(player, lm.General_LandCost, cuboidArea.getCost(group)); - player.sendMessage(ChatColor.YELLOW + "X" + plugin.msg(lm.General_Size, cuboidArea.getXSize())); - player.sendMessage(ChatColor.YELLOW + "Y" + plugin.msg(lm.General_Size, cuboidArea.getYSize())); - player.sendMessage(ChatColor.YELLOW + "Z" + plugin.msg(lm.General_Size, cuboidArea.getZSize())); - plugin.msg(player, lm.General_Separator); - Visualizer v = new Visualizer(player); - v.setAreas(this.getSelectionCuboid(player)); - this.showBounds(player, v); - } else - plugin.msg(player, lm.Select_Points); + if (hasPlacedBoth(player)) { + plugin.msg(player, lm.General_Separator); + CuboidArea cuboidArea = this.getSelectionCuboid(player); + plugin.msg(player, lm.Select_TotalSize, cuboidArea.getSize()); + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + + if (plugin.getConfigManager().enableEconomy()) + plugin.msg(player, lm.General_LandCost, cuboidArea.getCost(group)); + player.sendMessage(ChatColor.YELLOW + "X" + plugin.msg(lm.General_Size, cuboidArea.getXSize())); + player.sendMessage(ChatColor.YELLOW + "Y" + plugin.msg(lm.General_Size, cuboidArea.getYSize())); + player.sendMessage(ChatColor.YELLOW + "Z" + plugin.msg(lm.General_Size, cuboidArea.getZSize())); + plugin.msg(player, lm.General_Separator); + Visualizer v = new Visualizer(player); + v.setAreas(this.getSelectionCuboid(player)); + this.showBounds(player, v); + } else + plugin.msg(player, lm.Select_Points); } public void showBounds(final Player player, final Visualizer v) { - if (!plugin.getConfigManager().useVisualizer()) - return; - - Visualizer tv = vMap.get(player.getUniqueId()); - if (tv != null) { - tv.cancelAll(); - } - Bukkit.getScheduler().runTask(plugin, () -> { - - ResidenceSelectionVisualizationEvent ev = new ResidenceSelectionVisualizationEvent(player, v.getAreas(), v.getErrorAreas()); - Bukkit.getPluginManager().callEvent(ev); - - if (ev.isCancelled()) - return; - - vMap.put(player.getUniqueId(), v); - if (!plugin.isEnabled()) - return; - v.setBaseShedId(Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - if (!v.getAreas().isEmpty()) - MakeBorders(player, false); - if (!v.getErrorAreas().isEmpty()) - MakeBorders(player, true); - } - }).getTaskId()); - - }); + if (!plugin.getConfigManager().useVisualizer()) + return; + + Visualizer tv = vMap.get(player.getUniqueId()); + if (tv != null) { + tv.cancelAll(); + } + CMIScheduler.runTask(() -> { + + ResidenceSelectionVisualizationEvent ev = new ResidenceSelectionVisualizationEvent(player, v.getAreas(), v.getErrorAreas()); + Bukkit.getPluginManager().callEvent(ev); + + if (ev.isCancelled()) + return; + + vMap.put(player.getUniqueId(), v); + if (!plugin.isEnabled()) + return; + v.setBaseSheduler(CMIScheduler.runTaskAsynchronously(() -> { + if (!v.getAreas().isEmpty()) + MakeBorders(player, false); + if (!v.getErrorAreas().isEmpty()) + MakeBorders(player, true); + })); + + }); } public List getLocations(Location lowLoc, Location loc, Double TX, Double TY, Double TZ, Double Range, boolean StartFromZero) { - double eachCollumn = plugin.getConfigManager().getVisualizerRowSpacing(); - double eachRow = plugin.getConfigManager().getVisualizerCollumnSpacing(); - - if (TX == 0D) - TX = eachCollumn + eachCollumn * 0.1; - if (TY == 0D) - TY = eachRow + eachRow * 0.1; - if (TZ == 0D) - TZ = eachCollumn + eachCollumn * 0.1; - - double CollumnStart = eachCollumn; - double RowStart = eachRow; - - if (StartFromZero) { - CollumnStart = 0; - RowStart = 0; - } - - List locList = new ArrayList(); - - if (lowLoc.getWorld() != loc.getWorld()) - return locList; - - for (double x = CollumnStart; x < TX; x += eachCollumn) { - Location CurrentX = lowLoc.clone(); - if (TX > eachCollumn + eachCollumn * 0.1) - CurrentX.add(x, 0, 0); - for (double y = RowStart; y < TY; y += eachRow) { - Location CurrentY = CurrentX.clone(); - if (TY > eachRow + eachRow * 0.1) - CurrentY.add(0, y, 0); - for (double z = CollumnStart; z < TZ; z += eachCollumn) { - Location CurrentZ = CurrentY.clone(); - if (TZ > eachCollumn + eachCollumn * 0.1) - CurrentZ.add(0, 0, z); - double dist = loc.distance(CurrentZ); - if (dist < Range) - locList.add(CurrentZ.clone()); - } - } - } - - return locList; + double eachCollumn = plugin.getConfigManager().getVisualizerRowSpacing(); + double eachRow = plugin.getConfigManager().getVisualizerCollumnSpacing(); + + if (TX == 0D) + TX = eachCollumn + eachCollumn * 0.1; + if (TY == 0D) + TY = eachRow + eachRow * 0.1; + if (TZ == 0D) + TZ = eachCollumn + eachCollumn * 0.1; + + double CollumnStart = eachCollumn; + double RowStart = eachRow; + + if (StartFromZero) { + CollumnStart = 0; + RowStart = 0; + } + + List locList = new ArrayList(); + + if (lowLoc.getWorld() != loc.getWorld()) + return locList; + + for (double x = CollumnStart; x < TX; x += eachCollumn) { + Location CurrentX = lowLoc.clone(); + if (TX > eachCollumn + eachCollumn * 0.1) + CurrentX.add(x, 0, 0); + for (double y = RowStart; y < TY; y += eachRow) { + Location CurrentY = CurrentX.clone(); + if (TY > eachRow + eachRow * 0.1) + CurrentY.add(0, y, 0); + for (double z = CollumnStart; z < TZ; z += eachCollumn) { + Location CurrentZ = CurrentY.clone(); + if (TZ > eachCollumn + eachCollumn * 0.1) + CurrentZ.add(0, 0, z); + double dist = loc.distance(CurrentZ); + if (dist < Range) + locList.add(CurrentZ.clone()); + } + } + } + + return locList; } public List GetLocationsWallsByData(Location loc, Double TX, Double TY, Double TZ, Location lowLoc, SelectionSides Sides, - double Range) { - List locList = new ArrayList(); + double Range) { + List locList = new ArrayList(); - // North wall - if (Sides.ShowNorthSide()) - locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, TY, 0D, Range, false)); + // North wall + if (Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, TY, 0D, Range, false)); - // South wall - if (Sides.ShowSouthSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), TX, TY, 0D, Range, false)); + // South wall + if (Sides.ShowSouthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), TX, TY, 0D, Range, false)); - // West wall - if (Sides.ShowWestSide()) - locList.addAll(getLocations(lowLoc.clone(), loc.clone(), 0D, TY, TZ, Range, false)); + // West wall + if (Sides.ShowWestSide()) + locList.addAll(getLocations(lowLoc.clone(), loc.clone(), 0D, TY, TZ, Range, false)); - // East wall - if (Sides.ShowEastSide()) - locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, TY, TZ, Range, false)); + // East wall + if (Sides.ShowEastSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, TY, TZ, Range, false)); - // Roof wall - if (Sides.ShowTopSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), TX, 0D, TZ, Range, false)); + // Roof wall + if (Sides.ShowTopSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), TX, 0D, TZ, Range, false)); - // Ground wall - if (Sides.ShowBottomSide()) - locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, 0D, TZ, Range, false)); + // Ground wall + if (Sides.ShowBottomSide()) + locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, 0D, TZ, Range, false)); - return locList; + return locList; } public List GetLocationsCornersByData(Location loc, Double TX, Double TY, Double TZ, Location lowLoc, SelectionSides Sides, - double Range) { - List locList = new ArrayList(); + double Range) { + List locList = new ArrayList(); - // North bottom line - if (Sides.ShowBottomSide() && Sides.ShowNorthSide()) - locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, 0D, 0D, Range, true)); + // North bottom line + if (Sides.ShowBottomSide() && Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone(), loc.clone(), TX, 0D, 0D, Range, true)); - // North top line - if (Sides.ShowTopSide() && Sides.ShowNorthSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), TX, 0D, 0D, Range, true)); + // North top line + if (Sides.ShowTopSide() && Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), TX, 0D, 0D, Range, true)); - // South bottom line - if (Sides.ShowBottomSide() && Sides.ShowSouthSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), TX, 0D, 0D, Range, true)); + // South bottom line + if (Sides.ShowBottomSide() && Sides.ShowSouthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), TX, 0D, 0D, Range, true)); - // South top line - if (Sides.ShowTopSide() && Sides.ShowSouthSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, TY, TZ), loc.clone(), TX, 0D, 0D, Range, true)); + // South top line + if (Sides.ShowTopSide() && Sides.ShowSouthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, TY, TZ), loc.clone(), TX, 0D, 0D, Range, true)); - // North - West corner - if (Sides.ShowWestSide() && Sides.ShowNorthSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, 0, 0), loc.clone(), 0D, TY, 0D, Range, true)); + // North - West corner + if (Sides.ShowWestSide() && Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, 0), loc.clone(), 0D, TY, 0D, Range, true)); - // North - East corner - if (Sides.ShowEastSide() && Sides.ShowNorthSide()) - locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, TY, 0D, Range, true)); + // North - East corner + if (Sides.ShowEastSide() && Sides.ShowNorthSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, TY, 0D, Range, true)); - // South - West corner - if (Sides.ShowSouthSide() && Sides.ShowWestSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), 0D, TY, 0D, Range, true)); + // South - West corner + if (Sides.ShowSouthSide() && Sides.ShowWestSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, TZ), loc.clone(), 0D, TY, 0D, Range, true)); - // South - East corner - if (Sides.ShowSouthSide() && Sides.ShowEastSide()) - locList.addAll(getLocations(lowLoc.clone().add(TX, 0, TZ), loc.clone(), 0D, TY + 1, 0D, Range, true)); + // South - East corner + if (Sides.ShowSouthSide() && Sides.ShowEastSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, TZ), loc.clone(), 0D, TY + 1, 0D, Range, true)); - // West bottom corner - if (Sides.ShowWestSide() && Sides.ShowBottomSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, 0, 0), loc.clone(), 0D, 0D, TZ, Range, true)); + // West bottom corner + if (Sides.ShowWestSide() && Sides.ShowBottomSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, 0, 0), loc.clone(), 0D, 0D, TZ, Range, true)); - // East bottom corner - if (Sides.ShowEastSide() && Sides.ShowBottomSide()) - locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, 0D, TZ, Range, true)); + // East bottom corner + if (Sides.ShowEastSide() && Sides.ShowBottomSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, 0, 0), loc.clone(), 0D, 0D, TZ, Range, true)); - // West top corner - if (Sides.ShowWestSide() && Sides.ShowTopSide()) - locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), 0D, 0D, TZ, Range, true)); + // West top corner + if (Sides.ShowWestSide() && Sides.ShowTopSide()) + locList.addAll(getLocations(lowLoc.clone().add(0, TY, 0), loc.clone(), 0D, 0D, TZ, Range, true)); - // East top corner - if (Sides.ShowEastSide() && Sides.ShowTopSide()) - locList.addAll(getLocations(lowLoc.clone().add(TX, TY, 0), loc.clone(), 0D, 0D, TZ, Range, true)); + // East top corner + if (Sides.ShowEastSide() && Sides.ShowTopSide()) + locList.addAll(getLocations(lowLoc.clone().add(TX, TY, 0), loc.clone(), 0D, 0D, TZ, Range, true)); - return locList; + return locList; } public boolean MakeBorders(final Player player, final boolean error) { - final Visualizer v = vMap.get(player.getUniqueId()); - - if (v == null) - return false; - - List areas = null; - - if (!error) - areas = v.getAreas(); - else - areas = v.getErrorAreas(); - - Location loc = player.getLocation(); - int Range = plugin.getConfigManager().getVisualizerRange(); - - final List locList = new ArrayList(); - final List errorLocList = new ArrayList(); - - final boolean same = v.isSameLoc(); - if (!same) { - for (CuboidArea area : areas) { - if (area == null) - continue; - CuboidArea cuboidArea = new CuboidArea(area.getLowLocation(), area.getHighLocation()); - cuboidArea.getHighVector().add(new Vector(1, 1, 1)); - - SelectionSides Sides = new SelectionSides(); - - double PLLX = loc.getBlockX() - Range; - double PLLZ = loc.getBlockZ() - Range; - double PLLY = loc.getBlockY() - Range; - double PLHX = loc.getBlockX() + Range; - double PLHZ = loc.getBlockZ() + Range; - double PLHY = loc.getBlockY() + Range; - - if (cuboidArea.getLowVector().getBlockX() < PLLX) { - cuboidArea.getLowVector().setX(PLLX); - Sides.setWestSide(false); - } - - if (cuboidArea.getHighVector().getBlockX() > PLHX) { - cuboidArea.getHighVector().setX(PLHX); - Sides.setEastSide(false); - } - - if (cuboidArea.getLowVector().getBlockZ() < PLLZ) { - cuboidArea.getLowVector().setZ(PLLZ); - Sides.setNorthSide(false); - } - - if (cuboidArea.getHighVector().getBlockZ() > PLHZ) { - cuboidArea.getHighVector().setZ(PLHZ); - Sides.setSouthSide(false); - } - - if (cuboidArea.getLowVector().getBlockY() < PLLY) { - cuboidArea.getLowVector().setY(PLLY); - Sides.setBottomSide(false); - } - - if (cuboidArea.getHighVector().getBlockY() > PLHY) { - cuboidArea.getHighVector().setY(PLHY); - Sides.setTopSide(false); - } - - double TX = cuboidArea.getXSize() - 1; - double TY = cuboidArea.getYSize() - 1; - double TZ = cuboidArea.getZSize() - 1; - - if (!error && v.getId() != -1) { - Bukkit.getScheduler().cancelTask(v.getId()); - } else if (error && v.getErrorId() != -1) { - Bukkit.getScheduler().cancelTask(v.getErrorId()); - } - - locList.addAll(GetLocationsWallsByData(loc, TX, TY, TZ, cuboidArea.getLowLocation().clone(), Sides, Range)); - errorLocList.addAll(GetLocationsCornersByData(loc, TX, TY, TZ, cuboidArea.getLowLocation().clone(), Sides, Range)); - } - v.setLoc(player.getLocation()); - } else { - if (error) { - locList.addAll(v.getErrorLocations()); - errorLocList.addAll(v.getErrorLocations2()); - } else { - locList.addAll(v.getLocations()); - errorLocList.addAll(v.getLocations2()); - } - } - - if (!plugin.isEnabled()) - return false; - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - - int size = locList.size(); - int errorSize = errorLocList.size(); - - int timesMore = 1; - int errorTimesMore = 1; - - if (size > plugin.getConfigManager().getVisualizerSidesCap()) { - timesMore = size / plugin.getConfigManager().getVisualizerSidesCap() + 1; - } - if (errorSize > plugin.getConfigManager().getVisualizerFrameCap()) { - errorTimesMore = errorSize / plugin.getConfigManager().getVisualizerFrameCap() + 1; - } - - v.addCurrentSkip(); - if (v.getCurrentSkip() > plugin.getConfigManager().getVisualizerSkipBy()) - v.setCurrentSkip(1); - - try { - showParticles(locList, player, timesMore, error, true, v.getCurrentSkip()); - showParticles(errorLocList, player, errorTimesMore, error, false, v.getCurrentSkip()); - } catch (Exception e) { - return; - } - - if (error) { - v.setErrorLocations(locList); - v.setErrorLocations2(errorLocList); - } else { - v.setLocations(locList); - v.setLocations2(errorLocList); - } - - return; - } - }); - - if (v.isOnce()) - return true; - - if (v.getStart() + plugin.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) - return false; - - int scid = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (player.isOnline()) { - MakeBorders(player, error); - } - return; - } - }, plugin.getConfigManager().getVisualizerUpdateInterval() * 1L); - if (!error) - v.setId(scid); - else - v.setErrorId(scid); - - return true; + final Visualizer v = vMap.get(player.getUniqueId()); + + if (v == null) + return false; + + List areas = null; + + if (!error) + areas = v.getAreas(); + else + areas = v.getErrorAreas(); + + Location loc = player.getLocation(); + int Range = plugin.getConfigManager().getVisualizerRange(); + + final List locList = new ArrayList(); + final List errorLocList = new ArrayList(); + + final boolean same = v.isSameLoc(); + if (!same) { + for (CuboidArea area : areas) { + if (area == null) + continue; + CuboidArea cuboidArea = new CuboidArea(area.getLowLocation(), area.getHighLocation()); + cuboidArea.getHighVector().add(new Vector(1, 1, 1)); + + SelectionSides Sides = new SelectionSides(); + + double PLLX = loc.getBlockX() - Range; + double PLLZ = loc.getBlockZ() - Range; + double PLLY = loc.getBlockY() - Range; + double PLHX = loc.getBlockX() + Range; + double PLHZ = loc.getBlockZ() + Range; + double PLHY = loc.getBlockY() + Range; + + if (cuboidArea.getLowVector().getBlockX() < PLLX) { + cuboidArea.getLowVector().setX(PLLX); + Sides.setWestSide(false); + } + + if (cuboidArea.getHighVector().getBlockX() > PLHX) { + cuboidArea.getHighVector().setX(PLHX); + Sides.setEastSide(false); + } + + if (cuboidArea.getLowVector().getBlockZ() < PLLZ) { + cuboidArea.getLowVector().setZ(PLLZ); + Sides.setNorthSide(false); + } + + if (cuboidArea.getHighVector().getBlockZ() > PLHZ) { + cuboidArea.getHighVector().setZ(PLHZ); + Sides.setSouthSide(false); + } + + if (cuboidArea.getLowVector().getBlockY() < PLLY) { + cuboidArea.getLowVector().setY(PLLY); + Sides.setBottomSide(false); + } + + if (cuboidArea.getHighVector().getBlockY() > PLHY) { + cuboidArea.getHighVector().setY(PLHY); + Sides.setTopSide(false); + } + + double TX = cuboidArea.getXSize() - 1; + double TY = cuboidArea.getYSize() - 1; + double TZ = cuboidArea.getZSize() - 1; + + if (!error && v.getScheduler() != null) { + v.getScheduler().cancel(); + } else if (error && v.getErrorId() != null) { + v.getErrorId().cancel(); + } + + locList.addAll(GetLocationsWallsByData(loc, TX, TY, TZ, cuboidArea.getLowLocation().clone(), Sides, Range)); + errorLocList.addAll(GetLocationsCornersByData(loc, TX, TY, TZ, cuboidArea.getLowLocation().clone(), Sides, Range)); + } + v.setLoc(player.getLocation()); + } else { + if (error) { + locList.addAll(v.getErrorLocations()); + errorLocList.addAll(v.getErrorLocations2()); + } else { + locList.addAll(v.getLocations()); + errorLocList.addAll(v.getLocations2()); + } + } + + if (!plugin.isEnabled()) + return false; + CMIScheduler.runTaskAsynchronously(() -> { + + int size = locList.size(); + int errorSize = errorLocList.size(); + + int timesMore = 1; + int errorTimesMore = 1; + + if (size > plugin.getConfigManager().getVisualizerSidesCap()) { + timesMore = size / plugin.getConfigManager().getVisualizerSidesCap() + 1; + } + if (errorSize > plugin.getConfigManager().getVisualizerFrameCap()) { + errorTimesMore = errorSize / plugin.getConfigManager().getVisualizerFrameCap() + 1; + } + + v.addCurrentSkip(); + if (v.getCurrentSkip() > plugin.getConfigManager().getVisualizerSkipBy()) + v.setCurrentSkip(1); + + try { + showParticles(locList, player, timesMore, error, true, v.getCurrentSkip()); + showParticles(errorLocList, player, errorTimesMore, error, false, v.getCurrentSkip()); + } catch (Exception e) { + return; + } + + if (error) { + v.setErrorLocations(locList); + v.setErrorLocations2(errorLocList); + } else { + v.setLocations(locList); + v.setLocations2(errorLocList); + } + + return; + }); + + if (v.isOnce()) + return true; + + if (v.getStart() + plugin.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) + return false; + + CMITask scid = CMIScheduler.runTaskLater(() -> { + if (player.isOnline()) { + MakeBorders(player, error); + } + return; + }, plugin.getConfigManager().getVisualizerUpdateInterval() * 1L); + if (!error) + v.setScheduler(scid); + else + v.setErrorId(scid); + + return true; } private void showParticles(List locList, Player player, int timesMore, boolean error, boolean sides, int currentSkipBy) { - int s = 0; + int s = 0; - for (int i = 0; i < locList.size(); i += timesMore) { - s++; + for (int i = 0; i < locList.size(); i += timesMore) { + s++; - if (s > plugin.getConfigManager().getVisualizerSkipBy()) - s = 1; + if (s > plugin.getConfigManager().getVisualizerSkipBy()) + s = 1; - if (s != currentSkipBy) - continue; + if (s != currentSkipBy) + continue; - Location l = locList.get(i); + Location l = locList.get(i); - CMIParticle effect = null; - if (sides) { - effect = error ? plugin.getConfigManager().getOverlapSides() : plugin.getConfigManager().getSelectedSides(); - } else { - effect = error ? plugin.getConfigManager().getOverlapFrame() : plugin.getConfigManager().getSelectedFrame(); - } + CMIParticle effect = null; + if (sides) { + effect = error ? plugin.getConfigManager().getOverlapSides() : plugin.getConfigManager().getSelectedSides(); + } else { + effect = error ? plugin.getConfigManager().getOverlapFrame() : plugin.getConfigManager().getSelectedFrame(); + } - CMIEffect ef = new CMIEffect(effect); + CMIEffect ef = new CMIEffect(effect); - CMILib.getInstance().getReflectionManager().playEffect(player, l, ef); - } + CMILib.getInstance().getReflectionManager().playEffect(player, l, ef); + } } public void vert(Player player, boolean resadmin) { - if (hasPlacedBoth(player)) { - this.sky(player, resadmin); - this.bedrock(player, resadmin); - } else { - plugin.msg(player, lm.Select_Points); - } + if (hasPlacedBoth(player)) { + this.sky(player, resadmin); + this.bedrock(player, resadmin); + } else { + plugin.msg(player, lm.Select_Points); + } } public void sky(Player player, boolean resadmin) { - Selection selection = this.getSelection(player); - selection.sky(resadmin); + Selection selection = this.getSelection(player); + selection.sky(resadmin); } public void bedrock(Player player, boolean resadmin) { - Selection selection = this.getSelection(player); - selection.bedrock(resadmin); + Selection selection = this.getSelection(player); + selection.bedrock(resadmin); } public void clearSelection(Player player) { - selections.remove(player.getUniqueId()); + selections.remove(player.getUniqueId()); } @Deprecated public void selectChunk(Player player) { - Selection selection = this.getSelection(player); - selection.selectChunk(); + Selection selection = this.getSelection(player); + selection.selectChunk(); } public boolean worldEdit(Player player) { - plugin.msg(player, lm.General_WorldEditNotFound); - return false; + plugin.msg(player, lm.General_WorldEditNotFound); + return false; } public boolean worldEditUpdate(Player player) { - plugin.msg(player, lm.General_WorldEditNotFound); - return false; + plugin.msg(player, lm.General_WorldEditNotFound); + return false; } public void selectBySize(Player player, int xsize, int ysize, int zsize) { - Location myloc = player.getLocation(); - Location loc1 = new Location(myloc.getWorld(), myloc.getBlockX() + xsize, myloc.getBlockY() + ysize, myloc.getBlockZ() + zsize); - Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize); + Location myloc = player.getLocation(); + Location loc1 = new Location(myloc.getWorld(), myloc.getBlockX() + xsize, myloc.getBlockY() + ysize, myloc.getBlockZ() + zsize); + Location loc2 = new Location(myloc.getWorld(), myloc.getBlockX() - xsize, myloc.getBlockY() - ysize, myloc.getBlockZ() - zsize); - CuboidArea area = new CuboidArea(loc1, loc2); + CuboidArea area = new CuboidArea(loc1, loc2); - placeLoc1(player, loc1, false); - placeLoc2(player, loc2, false); + placeLoc1(player, loc1, false); + placeLoc2(player, loc2, false); - Selection selection = this.getSelection(player); + Selection selection = this.getSelection(player); - if (selection.getMaxYAllowed() < area.getHighVector().getBlockY()) - selection.getBaseLoc2().setY(selection.getMaxYAllowed()); + if (selection.getMaxYAllowed() < area.getHighVector().getBlockY()) + selection.getBaseLoc2().setY(selection.getMaxYAllowed()); - if (selection.getMinYAllowed() > area.getLowVector().getBlockY()) - selection.getBaseLoc1().setY(selection.getMinYAllowed()); + if (selection.getMinYAllowed() > area.getLowVector().getBlockY()) + selection.getBaseLoc1().setY(selection.getMinYAllowed()); // selection.updateBaseArea(); // selection.updateShadowLocations(); // selection.updateShadowArea(); - this.afterSelectionUpdate(player); - plugin.msg(player, lm.Select_Success); - showSelectionInfo(player); + this.afterSelectionUpdate(player); + plugin.msg(player, lm.Select_Success); + showSelectionInfo(player); } public void modify(Player player, boolean shift, double amount) { - if (!hasPlacedBoth(player)) { - plugin.msg(player, lm.Select_Points); - return; - } - Direction d = getDirection(player); - if (d == null) { - plugin.msg(player, lm.Invalid_Direction); - return; - } - CuboidArea area = this.getSelectionCuboid(player); - - int MIN_HEIGHT = 0; - - try { - MIN_HEIGHT = CMIWorld.getMinHeight(area.getWorld()); - } catch (Throwable e) { - } - - switch (d) { - case DOWN: - double oldy = area.getLowVector().getBlockY(); - oldy = oldy - amount; - if (oldy < MIN_HEIGHT) { - plugin.msg(player, lm.Select_TooLow); - oldy = MIN_HEIGHT; - } - area.getLowVector().setY(oldy); - if (shift) { - double oldy2 = area.getHighVector().getBlockY(); - oldy2 = oldy2 - amount; - area.getHighVector().setY(oldy2); - plugin.msg(player, lm.Shifting_Down, amount); - } else - plugin.msg(player, lm.Expanding_Down, amount); - break; - case MINUSX: - double oldx = area.getLowVector().getBlockX(); - oldx = oldx - amount; - area.getLowVector().setX(oldx); - if (shift) { - double oldx2 = area.getHighVector().getBlockX(); - oldx2 = oldx2 - amount; - area.getHighVector().setX(oldx2); - plugin.msg(player, lm.Shifting_West, amount); - } else - plugin.msg(player, lm.Expanding_West, amount); - break; - case MINUSZ: - double oldz = area.getLowVector().getBlockZ(); - oldz = oldz - amount; - area.getLowVector().setZ(oldz); - if (shift) { - double oldz2 = area.getHighVector().getBlockZ(); - oldz2 = oldz2 - amount; - area.getHighVector().setZ(oldz2); - plugin.msg(player, lm.Shifting_North, amount); - } else - plugin.msg(player, lm.Expanding_North, amount); - break; - case PLUSX: - oldx = area.getHighVector().getBlockX(); - oldx = oldx + amount; - area.getHighVector().setX(oldx); - if (shift) { - double oldx2 = area.getLowVector().getBlockX(); - oldx2 = oldx2 + amount; - area.getLowVector().setX(oldx2); - plugin.msg(player, lm.Shifting_East, amount); - } else - plugin.msg(player, lm.Expanding_East, amount); - break; - case PLUSZ: - oldz = area.getHighVector().getBlockZ(); - oldz = oldz + amount; - area.getHighVector().setZ(oldz); - if (shift) { - double oldz2 = area.getLowVector().getBlockZ(); - oldz2 = oldz2 + amount; - area.getLowVector().setZ(oldz2); - plugin.msg(player, lm.Shifting_South, amount); - } else - plugin.msg(player, lm.Expanding_South, amount); - break; - case UP: - oldy = area.getHighVector().getBlockY(); - oldy = oldy + amount; - if (oldy > getMaxWorldHeight(player.getLocation().getWorld()) - 1) { - plugin.msg(player, lm.Select_TooHigh); - oldy = getMaxWorldHeight(player.getLocation().getWorld()) - 1; - } - area.getHighVector().setY(oldy); - if (shift) { - double oldy2 = area.getLowVector().getBlockY(); - oldy2 = oldy2 + amount; - area.getLowVector().setY(oldy2); - plugin.msg(player, lm.Shifting_Up, amount); - } else - plugin.msg(player, lm.Expanding_Up, amount); - break; - default: - break; - } - updateLocations(player, area.getHighLocation(), area.getLowLocation(), true); + if (!hasPlacedBoth(player)) { + plugin.msg(player, lm.Select_Points); + return; + } + Direction d = getDirection(player); + if (d == null) { + plugin.msg(player, lm.Invalid_Direction); + return; + } + CuboidArea area = this.getSelectionCuboid(player); + + int MIN_HEIGHT = 0; + + try { + MIN_HEIGHT = CMIWorld.getMinHeight(area.getWorld()); + } catch (Throwable e) { + } + + switch (d) { + case DOWN: + double oldy = area.getLowVector().getBlockY(); + oldy = oldy - amount; + if (oldy < MIN_HEIGHT) { + plugin.msg(player, lm.Select_TooLow); + oldy = MIN_HEIGHT; + } + area.getLowVector().setY(oldy); + if (shift) { + double oldy2 = area.getHighVector().getBlockY(); + oldy2 = oldy2 - amount; + area.getHighVector().setY(oldy2); + plugin.msg(player, lm.Shifting_Down, amount); + } else + plugin.msg(player, lm.Expanding_Down, amount); + break; + case MINUSX: + double oldx = area.getLowVector().getBlockX(); + oldx = oldx - amount; + area.getLowVector().setX(oldx); + if (shift) { + double oldx2 = area.getHighVector().getBlockX(); + oldx2 = oldx2 - amount; + area.getHighVector().setX(oldx2); + plugin.msg(player, lm.Shifting_West, amount); + } else + plugin.msg(player, lm.Expanding_West, amount); + break; + case MINUSZ: + double oldz = area.getLowVector().getBlockZ(); + oldz = oldz - amount; + area.getLowVector().setZ(oldz); + if (shift) { + double oldz2 = area.getHighVector().getBlockZ(); + oldz2 = oldz2 - amount; + area.getHighVector().setZ(oldz2); + plugin.msg(player, lm.Shifting_North, amount); + } else + plugin.msg(player, lm.Expanding_North, amount); + break; + case PLUSX: + oldx = area.getHighVector().getBlockX(); + oldx = oldx + amount; + area.getHighVector().setX(oldx); + if (shift) { + double oldx2 = area.getLowVector().getBlockX(); + oldx2 = oldx2 + amount; + area.getLowVector().setX(oldx2); + plugin.msg(player, lm.Shifting_East, amount); + } else + plugin.msg(player, lm.Expanding_East, amount); + break; + case PLUSZ: + oldz = area.getHighVector().getBlockZ(); + oldz = oldz + amount; + area.getHighVector().setZ(oldz); + if (shift) { + double oldz2 = area.getLowVector().getBlockZ(); + oldz2 = oldz2 + amount; + area.getLowVector().setZ(oldz2); + plugin.msg(player, lm.Shifting_South, amount); + } else + plugin.msg(player, lm.Expanding_South, amount); + break; + case UP: + oldy = area.getHighVector().getBlockY(); + oldy = oldy + amount; + if (oldy > getMaxWorldHeight(player.getLocation().getWorld()) - 1) { + plugin.msg(player, lm.Select_TooHigh); + oldy = getMaxWorldHeight(player.getLocation().getWorld()) - 1; + } + area.getHighVector().setY(oldy); + if (shift) { + double oldy2 = area.getLowVector().getBlockY(); + oldy2 = oldy2 + amount; + area.getLowVector().setY(oldy2); + plugin.msg(player, lm.Shifting_Up, amount); + } else + plugin.msg(player, lm.Expanding_Up, amount); + break; + default: + break; + } + updateLocations(player, area.getHighLocation(), area.getLowLocation(), true); } public boolean contract(Player player, double amount) { - return contract(player, amount, false); + return contract(player, amount, false); } public boolean contract(Player player, double amount, @SuppressWarnings("unused") boolean resadmin) { - if (!hasPlacedBoth(player)) { - plugin.msg(player, lm.Select_Points); - return false; - } - Direction d = getDirection(player); - if (d == null) { - plugin.msg(player, lm.Invalid_Direction); - return false; - } - d = d.getOpposite(); - - CuboidArea area = this.getSelectionCuboid(player); - switch (d) { - case UP: - double oldy = area.getHighVector().getBlockY(); - oldy = oldy - amount; - if (oldy > getMaxWorldHeight(player.getLocation().getWorld()) - 1) { - plugin.msg(player, lm.Select_TooHigh); - oldy = getMaxWorldHeight(player.getLocation().getWorld()) - 1; - } - area.getHighVector().setY(oldy); - plugin.msg(player, lm.Contracting_Down, amount); - break; - case PLUSX: - double oldx = area.getHighVector().getBlockX(); - oldx = oldx - amount; - area.getHighVector().setX(oldx); - plugin.msg(player, lm.Contracting_West, amount); - break; - case PLUSZ: - double oldz = area.getHighVector().getBlockZ(); - oldz = oldz - amount; - area.getHighVector().setZ(oldz); - plugin.msg(player, lm.Contracting_North, amount); - break; - case MINUSX: - oldx = area.getLowVector().getBlockX(); - oldx = oldx + amount; - area.getLowVector().setX(oldx); - plugin.msg(player, lm.Contracting_East, amount); - break; - case MINUSZ: - oldz = area.getLowVector().getBlockZ(); - oldz = oldz + amount; - area.getLowVector().setZ(oldz); - plugin.msg(player, lm.Contracting_South, amount); - break; - case DOWN: - - int MIN_HEIGHT = 0; - try { - MIN_HEIGHT = CMIWorld.getMinHeight(area.getWorld()); - } catch (Throwable e) { - } - oldy = area.getLowVector().getBlockY(); - oldy = oldy + amount; - if (oldy < MIN_HEIGHT) { - plugin.msg(player, lm.Select_TooLow); - oldy = MIN_HEIGHT; - } - area.getLowVector().setY(oldy); - plugin.msg(player, lm.Contracting_Up, amount); - break; - default: - break; - } + if (!hasPlacedBoth(player)) { + plugin.msg(player, lm.Select_Points); + return false; + } + Direction d = getDirection(player); + if (d == null) { + plugin.msg(player, lm.Invalid_Direction); + return false; + } + d = d.getOpposite(); + + CuboidArea area = this.getSelectionCuboid(player); + switch (d) { + case UP: + double oldy = area.getHighVector().getBlockY(); + oldy = oldy - amount; + if (oldy > getMaxWorldHeight(player.getLocation().getWorld()) - 1) { + plugin.msg(player, lm.Select_TooHigh); + oldy = getMaxWorldHeight(player.getLocation().getWorld()) - 1; + } + area.getHighVector().setY(oldy); + plugin.msg(player, lm.Contracting_Down, amount); + break; + case PLUSX: + double oldx = area.getHighVector().getBlockX(); + oldx = oldx - amount; + area.getHighVector().setX(oldx); + plugin.msg(player, lm.Contracting_West, amount); + break; + case PLUSZ: + double oldz = area.getHighVector().getBlockZ(); + oldz = oldz - amount; + area.getHighVector().setZ(oldz); + plugin.msg(player, lm.Contracting_North, amount); + break; + case MINUSX: + oldx = area.getLowVector().getBlockX(); + oldx = oldx + amount; + area.getLowVector().setX(oldx); + plugin.msg(player, lm.Contracting_East, amount); + break; + case MINUSZ: + oldz = area.getLowVector().getBlockZ(); + oldz = oldz + amount; + area.getLowVector().setZ(oldz); + plugin.msg(player, lm.Contracting_South, amount); + break; + case DOWN: + + int MIN_HEIGHT = 0; + try { + MIN_HEIGHT = CMIWorld.getMinHeight(area.getWorld()); + } catch (Throwable e) { + } + oldy = area.getLowVector().getBlockY(); + oldy = oldy + amount; + if (oldy < MIN_HEIGHT) { + plugin.msg(player, lm.Select_TooLow); + oldy = MIN_HEIGHT; + } + area.getLowVector().setY(oldy); + plugin.msg(player, lm.Contracting_Up, amount); + break; + default: + break; + } // if (!ClaimedResidence.isBiggerThanMinSubzone(player, area, resadmin)) // return false; - updateLocations(player, area.getHighLocation(), area.getLowLocation(), true); - return true; + updateLocations(player, area.getHighLocation(), area.getLowLocation(), true); + return true; } private static Direction getDirection(Player player) { - int yaw = (int) player.getLocation().getYaw(); - - if (yaw < 0) - yaw += 360; - - yaw += 45; - yaw %= 360; - - int facing = yaw / 90; - - float pitch = player.getLocation().getPitch(); - if (pitch < -50) - return Direction.UP; - if (pitch > 50) - return Direction.DOWN; - if (facing == 1) // east - return Direction.MINUSX; - if (facing == 3) // west - return Direction.PLUSX; - if (facing == 2) // north - return Direction.MINUSZ; - if (facing == 0) // south - return Direction.PLUSZ; - return null; + int yaw = (int) player.getLocation().getYaw(); + + if (yaw < 0) + yaw += 360; + + yaw += 45; + yaw %= 360; + + int facing = yaw / 90; + + float pitch = player.getLocation().getPitch(); + if (pitch < -50) + return Direction.UP; + if (pitch > 50) + return Direction.DOWN; + if (facing == 1) // east + return Direction.MINUSX; + if (facing == 3) // west + return Direction.PLUSX; + if (facing == 2) // north + return Direction.MINUSZ; + if (facing == 0) // south + return Direction.PLUSZ; + return null; } public void regenerate(CuboidArea area) { } public void onDisable() { - for (Entry one : vMap.entrySet()) { - one.getValue().cancelAll(); - } - vMap.clear(); + for (Entry one : vMap.entrySet()) { + one.getValue().cancelAll(); + } + vMap.clear(); } } diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java index e2ccad790..25ea49428 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopListener.java @@ -53,7 +53,7 @@ public void onSignInteract(PlayerInteractEvent event) { if (Delete.contains(player.getName())) { Board Found = null; - for (Board one : plugin.getShopSignUtilManager().GetAllBoards()) { + for (Board one : plugin.getShopSignUtilManager().getAllBoards()) { for (Location location : one.GetLocations()) { if (!loc.getWorld().getName().equalsIgnoreCase(location.getWorld().getName())) @@ -73,7 +73,7 @@ public void onSignInteract(PlayerInteractEvent event) { break; } if (Found != null) { - plugin.getShopSignUtilManager().GetAllBoards().remove(Found); + plugin.getShopSignUtilManager().getAllBoards().remove(Found); plugin.getShopSignUtilManager().saveSigns(); plugin.msg(player, lm.Shop_DeletedBoard); } else { @@ -84,7 +84,7 @@ public void onSignInteract(PlayerInteractEvent event) { } String resName = null; - for (Board one : plugin.getShopSignUtilManager().GetAllBoards()) { + for (Board one : plugin.getShopSignUtilManager().getAllBoards()) { resName = one.getResNameByLoc(loc); if (resName != null) break; @@ -107,7 +107,7 @@ public void onFlagChangeShop(ResidenceFlagChangeEvent event) { case NEITHER: case FALSE: plugin.getResidenceManager().removeShop(event.getResidence()); - plugin.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().boardUpdate(); plugin.getShopSignUtilManager().saveSigns(); break; case INVALID: @@ -117,7 +117,7 @@ public void onFlagChangeShop(ResidenceFlagChangeEvent event) { event.getResidence().getPermissions().setFlag("tp", FlagState.TRUE); event.getResidence().getPermissions().setFlag("move", FlagState.TRUE); event.getResidence().getPermissions().setFlag("pvp", FlagState.FALSE); - plugin.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().boardUpdate(); plugin.getShopSignUtilManager().saveSigns(); break; default: @@ -131,7 +131,7 @@ public void onResidenceRename(ResidenceRenameEvent event) { plugin.getResidenceManager().addShop(event.getResidence()); plugin.getResidenceManager().removeShop(event.getOldResidenceName()); plugin.getShopSignUtilManager().saveShopVotes(); - plugin.getShopSignUtilManager().BoardUpdateDelayed(); + plugin.getShopSignUtilManager().boardUpdateDelayed(); plugin.getShopSignUtilManager().saveSigns(); } } @@ -171,7 +171,7 @@ public void onResidenceCreate(ResidenceCreationEvent event) { plugin.getResidenceManager().addShop(event.getResidence().getName()); - plugin.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().boardUpdate(); plugin.getShopSignUtilManager().saveSigns(); } @@ -184,7 +184,7 @@ public void onResidenceRemove(ResidenceDeleteEvent event) { return; plugin.getResidenceManager().removeShop(event.getResidence()); - plugin.getShopSignUtilManager().BoardUpdate(); + plugin.getShopSignUtilManager().boardUpdate(); plugin.getShopSignUtilManager().saveSigns(); } } diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index a8b39fa38..f35466ae0 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -24,6 +24,8 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; + public class ShopSignUtil { List AllBoards = new ArrayList(); @@ -31,366 +33,360 @@ public class ShopSignUtil { private Residence plugin; public ShopSignUtil(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } public void setAllSigns(List AllBoards) { - this.AllBoards = AllBoards; + this.AllBoards = AllBoards; } - public List GetAllBoards() { - return AllBoards; + public List getAllBoards() { + return AllBoards; } public void removeBoard(Board Board) { - AllBoards.remove(Board); + AllBoards.remove(Board); } public void addBoard(Board Board) { - AllBoards.add(Board); + AllBoards.add(Board); } public boolean exist(Board board) { - List loc2 = board.GetLocations(); - for (Board one : AllBoards) { - List loc1 = one.GetLocations(); - for (Location oneL : loc1) { - if (!loc2.contains(oneL)) - continue; - return true; - } - } - return false; + List loc2 = board.GetLocations(); + for (Board one : AllBoards) { + List loc1 = one.GetLocations(); + for (Location oneL : loc1) { + if (!loc2.contains(oneL)) + continue; + return true; + } + } + return false; } // Res Shop vote file public void LoadShopVotes() { - File file = new File(plugin.getDataFolder(), "ShopVotes.yml"); - YamlConfiguration f = YamlConfiguration.loadConfiguration(file); - - if (!file.exists()) { - try { - file.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - return; - } - - if (!f.isConfigurationSection("ShopVotes")) - return; - - ConfigurationSection ConfCategory = f.getConfigurationSection("ShopVotes"); - ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); - if (categoriesList.size() == 0) - return; - - for (String category : categoriesList) { - List List = ConfCategory.getStringList(category); - List VoteList = new ArrayList(); - for (String oneEntry : List) { - if (!oneEntry.contains("%")) - continue; - - String name = oneEntry.split("%")[0]; - UUID uuid = null; - - if (name.contains(":")) { - try { - uuid = UUID.fromString(name.split(":")[1]); - } catch (Exception e) { - } - name = name.split(":")[0]; - } - - int vote = -1; - - try { - String voteString = oneEntry.split("%")[1]; - if (voteString.contains("!")) { - voteString = oneEntry.split("%")[1].split("!")[0]; - } - vote = Integer.parseInt(voteString); - } catch (Exception ex) { - continue; - } - if (vote < 0) - vote = 0; - else if (vote > 10) - vote = 10; - - long time = 0L; - - if (oneEntry.contains("!")) - try { - time = Long.parseLong(oneEntry.split("!")[1]); - } catch (Exception ex) { - time = System.currentTimeMillis(); - } - - VoteList.add(new ShopVote(name, uuid, vote, time)); - - } - - ClaimedResidence res = plugin.getResidenceManager().getByName(category.replace("_", ".")); - - if (res == null) - continue; - res.clearShopVotes(); - res.addShopVote(VoteList); - } - return; + File file = new File(plugin.getDataFolder(), "ShopVotes.yml"); + YamlConfiguration f = YamlConfiguration.loadConfiguration(file); + + if (!file.exists()) { + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + return; + } + + if (!f.isConfigurationSection("ShopVotes")) + return; + + ConfigurationSection ConfCategory = f.getConfigurationSection("ShopVotes"); + ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); + if (categoriesList.size() == 0) + return; + + for (String category : categoriesList) { + List List = ConfCategory.getStringList(category); + List VoteList = new ArrayList(); + for (String oneEntry : List) { + if (!oneEntry.contains("%")) + continue; + + String name = oneEntry.split("%")[0]; + UUID uuid = null; + + if (name.contains(":")) { + try { + uuid = UUID.fromString(name.split(":")[1]); + } catch (Exception e) { + } + name = name.split(":")[0]; + } + + int vote = -1; + + try { + String voteString = oneEntry.split("%")[1]; + if (voteString.contains("!")) { + voteString = oneEntry.split("%")[1].split("!")[0]; + } + vote = Integer.parseInt(voteString); + } catch (Exception ex) { + continue; + } + if (vote < 0) + vote = 0; + else if (vote > 10) + vote = 10; + + long time = 0L; + + if (oneEntry.contains("!")) + try { + time = Long.parseLong(oneEntry.split("!")[1]); + } catch (Exception ex) { + time = System.currentTimeMillis(); + } + + VoteList.add(new ShopVote(name, uuid, vote, time)); + + } + + ClaimedResidence res = plugin.getResidenceManager().getByName(category.replace("_", ".")); + + if (res == null) + continue; + res.clearShopVotes(); + res.addShopVote(VoteList); + } + return; } // Signs save file public void saveShopVotes() { - File f = new File(plugin.getDataFolder(), "ShopVotes.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + File f = new File(plugin.getDataFolder(), "ShopVotes.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); - writer.addComment("ShopVotes", "DO NOT EDIT THIS FILE BY HAND!"); + writer.addComment("ShopVotes", "DO NOT EDIT THIS FILE BY HAND!"); - if (!conf.isConfigurationSection("ShopVotes")) - conf.createSection("ShopVotes"); + if (!conf.isConfigurationSection("ShopVotes")) + conf.createSection("ShopVotes"); - for (ClaimedResidence res : plugin.getResidenceManager().getShops()) { + for (ClaimedResidence res : plugin.getResidenceManager().getShops()) { - if (res == null || res.GetShopVotes().isEmpty()) - continue; + if (res == null || res.GetShopVotes().isEmpty()) + continue; - String path = "ShopVotes." + res.getName().replace(".", "_"); + String path = "ShopVotes." + res.getName().replace(".", "_"); - List list = new ArrayList(); + List list = new ArrayList(); - for (ShopVote oneVote : res.GetShopVotes()) { - list.add(oneVote.getName() + ":" + oneVote.getUuid().toString() + "%" + oneVote.getVote() + "!" + oneVote.getTime()); - } - writer.set(path, list); - } + for (ShopVote oneVote : res.GetShopVotes()) { + list.add(oneVote.getName() + ":" + oneVote.getUuid().toString() + "%" + oneVote.getVote() + "!" + oneVote.getTime()); + } + writer.set(path, list); + } - try { - writer.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - return; + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + return; } // Res Shop vote file public Vote getAverageVote(String resName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(resName); - return getAverageVote(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(resName); + return getAverageVote(res); } public Vote getAverageVote(ClaimedResidence res) { - if (res == null || res.GetShopVotes().isEmpty()) - return new Vote(plugin.getConfigManager().getVoteRangeTo() / 2, 0); + if (res == null || res.GetShopVotes().isEmpty()) + return new Vote(plugin.getConfigManager().getVoteRangeTo() / 2, 0); - List votes = res.GetShopVotes(); + List votes = res.GetShopVotes(); - double total = 0; - for (ShopVote oneVote : votes) { - total += oneVote.getVote(); - } + double total = 0; + for (ShopVote oneVote : votes) { + total += oneVote.getVote(); + } - double vote = ((int) ((total / votes.size()) * 100)) / 100.0; + double vote = ((int) ((total / votes.size()) * 100)) / 100.0; - return new Vote(vote, votes.size()); + return new Vote(vote, votes.size()); } // Res Shop vote file public int getLikes(String resName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(resName); - return getLikes(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(resName); + return getLikes(res); } public int getLikes(ClaimedResidence res) { - if (res == null || res.GetShopVotes().isEmpty()) - return 0; + if (res == null || res.GetShopVotes().isEmpty()) + return 0; - List votes = res.GetShopVotes(); + List votes = res.GetShopVotes(); - int likes = 0; - for (ShopVote oneVote : votes) { - if (oneVote.getVote() >= plugin.getConfigManager().getVoteRangeTo() / 2) - likes++; - } + int likes = 0; + for (ShopVote oneVote : votes) { + if (oneVote.getVote() >= plugin.getConfigManager().getVoteRangeTo() / 2) + likes++; + } - return likes; + return likes; } public Map getSortedShopList() { - Map allvotes = new HashMap(); + Map allvotes = new HashMap(); - List shops = plugin.getResidenceManager().getShops(); + List shops = plugin.getResidenceManager().getShops(); - for (ClaimedResidence one : shops) { - if (plugin.getConfigManager().isOnlyLike()) - allvotes.put(one.getName(), (double) getLikes(one)); - else - allvotes.put(one.getName(), getAverageVote(one).getVote()); - } + for (ClaimedResidence one : shops) { + if (plugin.getConfigManager().isOnlyLike()) + allvotes.put(one.getName(), (double) getLikes(one)); + else + allvotes.put(one.getName(), getAverageVote(one).getVote()); + } - allvotes = sortByComparator(allvotes); + allvotes = sortByComparator(allvotes); - return allvotes; + return allvotes; } private static Map sortByComparator(Map allvotes) { - List> list = new LinkedList>(allvotes.entrySet()); - - Collections.sort(list, new Comparator>() { - @Override - public int compare(Map.Entry o1, Map.Entry o2) { - return (o2.getValue()).compareTo(o1.getValue()); - } - }); - Map sortedMap = new LinkedHashMap(); - for (Iterator> it = list.iterator(); it.hasNext();) { - Map.Entry entry = it.next(); - sortedMap.put(entry.getKey(), entry.getValue()); - } - return sortedMap; + List> list = new LinkedList>(allvotes.entrySet()); + + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return (o2.getValue()).compareTo(o1.getValue()); + } + }); + Map sortedMap = new LinkedHashMap(); + for (Iterator> it = list.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; } // Shop Sign file public void LoadSigns() { - GetAllBoards().clear(); - File file = new File(plugin.getDataFolder(), "ShopSigns.yml"); - YamlConfiguration f = YamlConfiguration.loadConfiguration(file); + getAllBoards().clear(); + File file = new File(plugin.getDataFolder(), "ShopSigns.yml"); + YamlConfiguration f = YamlConfiguration.loadConfiguration(file); - if (!f.isConfigurationSection("ShopSigns")) - return; + if (!f.isConfigurationSection("ShopSigns")) + return; - ConfigurationSection ConfCategory = f.getConfigurationSection("ShopSigns"); - ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); - if (categoriesList.size() == 0) - return; - for (String category : categoriesList) { - ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); - Board newTemp = new Board(); - newTemp.setStartPlace(NameSection.getInt("StartPlace")); + ConfigurationSection ConfCategory = f.getConfigurationSection("ShopSigns"); + ArrayList categoriesList = new ArrayList(ConfCategory.getKeys(false)); + if (categoriesList.size() == 0) + return; + for (String category : categoriesList) { + ConfigurationSection NameSection = ConfCategory.getConfigurationSection(category); + Board newTemp = new Board(); + newTemp.setStartPlace(NameSection.getInt("StartPlace")); - World w = Bukkit.getWorld(NameSection.getString("World")); + World w = Bukkit.getWorld(NameSection.getString("World")); - if (w == null) - continue; + if (w == null) + continue; - Location loc1 = new Location(w, NameSection.getInt("TX"), NameSection.getInt("TY"), NameSection.getInt("TZ")); - Location loc2 = new Location(w, NameSection.getInt("BX"), NameSection.getInt("BY"), NameSection.getInt("BZ")); + Location loc1 = new Location(w, NameSection.getInt("TX"), NameSection.getInt("TY"), NameSection.getInt("TZ")); + Location loc2 = new Location(w, NameSection.getInt("BX"), NameSection.getInt("BY"), NameSection.getInt("BZ")); - newTemp.setTopLoc(loc1); - newTemp.setBottomLoc(loc2); + newTemp.setTopLoc(loc1); + newTemp.setBottomLoc(loc2); - addBoard(newTemp); - } - return; + addBoard(newTemp); + } + return; } // Signs save file public void saveSigns() { - File f = new File(plugin.getDataFolder(), "ShopSigns.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - - CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); - conf.options().copyDefaults(true); - - writer.addComment("ShopSigns", "DO NOT EDIT THIS FILE BY HAND!"); - - if (!conf.isConfigurationSection("ShopSigns")) - conf.createSection("ShopSigns"); - - int cat = 0; - for (Board one : GetAllBoards()) { - cat++; - String path = "ShopSigns." + cat; - writer.set(path + ".StartPlace", one.GetStartPlace()); - writer.set(path + ".World", one.GetWorld()); - writer.set(path + ".TX", one.getTopLoc().getBlockX()); - writer.set(path + ".TY", one.getTopLoc().getBlockY()); - writer.set(path + ".TZ", one.getTopLoc().getBlockZ()); - writer.set(path + ".BX", one.getBottomLoc().getBlockX()); - writer.set(path + ".BY", one.getBottomLoc().getBlockY()); - writer.set(path + ".BZ", one.getBottomLoc().getBlockZ()); - } - - try { - writer.save(f); - } catch (IOException e) { - e.printStackTrace(); - } - return; + File f = new File(plugin.getDataFolder(), "ShopSigns.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + + CommentedYamlConfiguration writer = new CommentedYamlConfiguration(); + conf.options().copyDefaults(true); + + writer.addComment("ShopSigns", "DO NOT EDIT THIS FILE BY HAND!"); + + if (!conf.isConfigurationSection("ShopSigns")) + conf.createSection("ShopSigns"); + + int cat = 0; + for (Board one : getAllBoards()) { + cat++; + String path = "ShopSigns." + cat; + writer.set(path + ".StartPlace", one.GetStartPlace()); + writer.set(path + ".World", one.GetWorld()); + writer.set(path + ".TX", one.getTopLoc().getBlockX()); + writer.set(path + ".TY", one.getTopLoc().getBlockY()); + writer.set(path + ".TZ", one.getTopLoc().getBlockZ()); + writer.set(path + ".BX", one.getBottomLoc().getBlockX()); + writer.set(path + ".BY", one.getBottomLoc().getBlockY()); + writer.set(path + ".BZ", one.getBottomLoc().getBlockZ()); + } + + try { + writer.save(f); + } catch (IOException e) { + e.printStackTrace(); + } + return; } - public boolean BoardUpdateDelayed() { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - BoardUpdate(); - return; - } - }, 20L); - return true; + public boolean boardUpdateDelayed() { + CMIScheduler.runTaskLater(() -> boardUpdate(), 20L); + return true; } - public boolean BoardUpdate() { - for (Board board : GetAllBoards()) { - board.clearSignLoc(); - List SignsLocation = board.GetLocations(); + public boolean boardUpdate() { + for (Board board : getAllBoards()) { + board.clearSignLoc(); + List SignsLocation = board.GetLocations(); - ArrayList ShopNames = new ArrayList(getSortedShopList().keySet()); + ArrayList ShopNames = new ArrayList(getSortedShopList().keySet()); - int Start = board.GetStartPlace(); - for (Location OneSignLoc : SignsLocation) { + int Start = board.GetStartPlace(); + for (Location OneSignLoc : SignsLocation) { - Block block = OneSignLoc.getBlock(); + Block block = OneSignLoc.getBlock(); - if (!(block.getState() instanceof Sign)) - continue; + if (!(block.getState() instanceof Sign)) + continue; - String Shop = ""; - if (ShopNames.size() > Start) - Shop = ShopNames.get(Start); + String Shop = ""; + if (ShopNames.size() > Start) + Shop = ShopNames.get(Start); - ClaimedResidence res = plugin.getResidenceManager().getByName(Shop); + ClaimedResidence res = plugin.getResidenceManager().getByName(Shop); - Sign sign = (Sign) block.getState(); + Sign sign = (Sign) block.getState(); - if (res == null || Shop == null || Shop.equalsIgnoreCase("")) { - sign.setLine(0, ""); - sign.setLine(1, ""); - sign.setLine(2, ""); - sign.setLine(3, ""); - sign.update(); - continue; - } + if (res == null || Shop == null || Shop.equalsIgnoreCase("")) { + sign.setLine(0, ""); + sign.setLine(1, ""); + sign.setLine(2, ""); + sign.setLine(3, ""); + sign.update(); + continue; + } - Vote vote = null; - String votestat = ""; - if (plugin.getResidenceManager().getShops().size() >= Start) { - vote = getAverageVote(ShopNames.get(Start)); + Vote vote = null; + String votestat = ""; + if (plugin.getResidenceManager().getShops().size() >= Start) { + vote = getAverageVote(ShopNames.get(Start)); - if (plugin.getConfigManager().isOnlyLike()) { - votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListLiked, getLikes(ShopNames.get(Start))); - } else - votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_SignLines_4, vote.getVote(), vote.getAmount()); - } + if (plugin.getConfigManager().isOnlyLike()) { + votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_ListLiked, getLikes(ShopNames.get(Start))); + } else + votestat = vote.getAmount() == 0 ? "" : plugin.msg(lm.Shop_SignLines_4, vote.getVote(), vote.getAmount()); + } - sign.setLine(0, plugin.msg(lm.Shop_SignLines_1, Start + 1)); - sign.setLine(1, plugin.msg(lm.Shop_SignLines_2, res.getName())); - sign.setLine(2, plugin.msg(lm.Shop_SignLines_3, res.getOwner())); - sign.setLine(3, votestat); - sign.update(); - board.addSignLoc(res.getName(), sign.getLocation()); + sign.setLine(0, plugin.msg(lm.Shop_SignLines_1, Start + 1)); + sign.setLine(1, plugin.msg(lm.Shop_SignLines_2, res.getName())); + sign.setLine(2, plugin.msg(lm.Shop_SignLines_3, res.getOwner())); + sign.setLine(3, votestat); + sign.update(); + board.addSignLoc(res.getName(), sign.getLocation()); - Start++; - } - } - return true; + Start++; + } + } + return true; } } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index f86617853..3831d44d5 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -25,6 +25,8 @@ import org.bukkit.configuration.file.YamlConfiguration; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; + import com.bekvon.bukkit.residence.CommentedYamlConfiguration; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; @@ -135,12 +137,7 @@ public Signs getSignFromLoc(Location loc) { } public void CheckSign(final ClaimedResidence res, int time) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { - @Override - public void run() { - CheckSign(res); - } - }, time * 1L); + CMIScheduler.runTaskLater(() -> CheckSign(res), time * 1L); } public void CheckSign(ClaimedResidence res) { diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java index 81051289a..de4109d70 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java @@ -12,40 +12,43 @@ import io.github.thebusybiscuit.slimefun4.implementation.Slimefun; import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.ProtectionManager; import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.ProtectionModule; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Schedulers.CMITask; public class SlimefunManager { // Fail safe to avoid infinite checks private final static int TRIES = 60; private static int times = 0; + private static CMITask task = null; public static void register(Residence residence) { - Bukkit.getServer().getScheduler().runTaskTimer(residence, task -> { - ++times; - if (times >= TRIES) { - residence.consoleMessage("&cFailed to initialize SlimeFun support"); - task.cancel(); - } - - ProtectionManager manager = Slimefun.getProtectionManager(); - - // Wait for protectionManager to load (loaded on first server tick) - if (manager != null) { - try { - Method method = manager.getClass().getMethod("registerModule", Server.class, String.class, Function.class); - if (method != null) { - Function m = plugin -> new SlimeFunResidenceModule(plugin); - method.invoke(manager, Bukkit.getServer(), "Residence", m); - residence.consoleMessage("Enabled compatability with SlimeFun plugin"); - task.cancel(); - } - } catch (Throwable e) { - // Going with latest dev build supported approach - manager.registerModule(Bukkit.getServer().getPluginManager(), "Residence", plugin -> new SlimeFunResidenceModule(plugin)); - residence.consoleMessage("Enabled compatability with SlimeFun plugin"); - task.cancel(); - } - } - }, 20, 20); + task = CMIScheduler.scheduleSyncRepeatingTask(() -> { + ++times; + if (times >= TRIES) { + residence.consoleMessage("&cFailed to initialize SlimeFun support"); + task.cancel(); + } + + ProtectionManager manager = Slimefun.getProtectionManager(); + + // Wait for protectionManager to load (loaded on first server tick) + if (manager != null) { + try { + Method method = manager.getClass().getMethod("registerModule", Server.class, String.class, Function.class); + if (method != null) { + Function m = plugin -> new SlimeFunResidenceModule(plugin); + method.invoke(manager, Bukkit.getServer(), "Residence", m); + residence.consoleMessage("Enabled compatability with SlimeFun plugin"); + task.cancel(); + } + } catch (Throwable e) { + // Going with latest dev build supported approach + manager.registerModule(Bukkit.getServer().getPluginManager(), "Residence", plugin -> new SlimeFunResidenceModule(plugin)); + residence.consoleMessage("Enabled compatability with SlimeFun plugin"); + task.cancel(); + } + } + }, 20, 20); } } diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index 74add5823..e0fce88ba 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -30,290 +30,282 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.RawMessages.RawMessage; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; public class InformationPager { Residence plugin; public InformationPager(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } public void printInfo(CommandSender sender, String command, String title, String[] lines, int page) { - printInfo(sender, command, title, Arrays.asList(lines), page); + printInfo(sender, command, title, Arrays.asList(lines), page); } public void printInfo(CommandSender sender, String command, String title, List lines, int page) { - PageInfo pi = new PageInfo(6, lines.size(), page); + PageInfo pi = new PageInfo(6, lines.size(), page); - if (!pi.isPageOk()) { - sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); - return; - } - plugin.msg(sender, lm.InformationPage_TopSingle, title); - plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), - pi.getTotalPages(), lines.size())); - for (int i = pi.getStart(); i <= pi.getEnd(); i++) { - if (lines.size() > i) - sender.sendMessage(ChatColor.GREEN + lines.get(i)); - } + if (!pi.isPageOk()) { + sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); + return; + } + plugin.msg(sender, lm.InformationPage_TopSingle, title); + plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), + pi.getTotalPages(), lines.size())); + for (int i = pi.getStart(); i <= pi.getEnd(); i++) { + if (lines.size() > i) + sender.sendMessage(ChatColor.GREEN + lines.get(i)); + } - pi.autoPagination(sender, command); + pi.autoPagination(sender, command); } public void printListInfo(CommandSender sender, String targetPlayer, TreeMap ownedResidences, int page, boolean resadmin, World world) { - int perPage = 20; - if (sender instanceof Player) - perPage = 6; - - if (ownedResidences.isEmpty()) { - plugin.msg(sender, lm.Residence_DontOwn, targetPlayer); - return; - } - - PageInfo pi = new PageInfo(perPage, ownedResidences.size(), page); - - if (!(sender instanceof Player) && page == -1) { - printListWithDelay(sender, ownedResidences, 0, resadmin); - return; - } - if (!(sender instanceof Player) && page == -2) { - printListToFile(ownedResidences, resadmin); - return; - } - - if (!pi.isPageOk()) { - sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); - return; - } - - if (targetPlayer != null) - plugin.msg(sender, lm.InformationPage_Top, plugin.msg(lm.General_Residences), targetPlayer); + int perPage = 20; + if (sender instanceof Player) + perPage = 6; + + if (ownedResidences.isEmpty()) { + plugin.msg(sender, lm.Residence_DontOwn, targetPlayer); + return; + } + + PageInfo pi = new PageInfo(perPage, ownedResidences.size(), page); + + if (!(sender instanceof Player) && page == -1) { + printListWithDelay(sender, ownedResidences, 0, resadmin); + return; + } + if (!(sender instanceof Player) && page == -2) { + printListToFile(ownedResidences, resadmin); + return; + } + + if (!pi.isPageOk()) { + sender.sendMessage(ChatColor.RED + plugin.msg(lm.Invalid_Page)); + return; + } + + if (targetPlayer != null) + plugin.msg(sender, lm.InformationPage_Top, plugin.msg(lm.General_Residences), targetPlayer); // plugin.msg(sender, lm.InformationPage_Page, plugin.msg(lm.General_GenericPages, String.format("%d", page), pi.getTotalPages(), ownedResidences.size())); - String cmd = "res"; - if (resadmin) - cmd = "resadmin"; - - int y = -1; - - for (Entry resT : ownedResidences.entrySet()) { - y++; - if (y > pi.getEnd()) - break; - if (!pi.isInRange(y)) - continue; - - ClaimedResidence res = resT.getValue(); - StringBuilder StringB = new StringBuilder(); - StringB.append(plugin.msg(lm.General_Owner, res.getOwner())); - - if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { - StringB.append("\n"); - CuboidArea area = res.getAreaArray()[0]; - String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); - String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); - String worldInfo = CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); - StringB.append(worldInfo); - } - - StringB.append("\n").append(plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); - - String ExtraString = ""; - if (res.isForRent()) { - if (res.isRented()) { - ExtraString = " " + plugin.msg(lm.Residence_IsRented); - StringB.append("\n").append(plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); - } else { - ExtraString = " " + plugin.msg(lm.Residence_IsForRent); - } - RentableLand rentable = res.getRentable(); - StringB.append("\n").append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); - StringB.append("\n").append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); - StringB.append("\n").append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); - StringB.append("\n").append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); - } - - if (res.isForSell()) { - ExtraString = " " + plugin.msg(lm.Residence_IsForSale); - StringB.append("\n " + plugin.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); - } - - String tpFlag = ""; - String moveFlag = ""; - String msg = plugin.msg(lm.Residence_ResList, y + 1, res.getName(), res.getWorld(), tpFlag + moveFlag, ExtraString); - - if (sender instanceof Player && !res.isOwner(sender)) { - tpFlag = res.getPermissions().playerHas((Player) sender, Flags.tp, true) ? plugin.msg(lm.General_AllowedTeleportIcon) : plugin.msg(lm.General_BlockedTeleportIcon); - moveFlag = res.getPermissions().playerHas(sender.getName(), Flags.move, true) ? plugin.msg(lm.General_AllowedMovementIcon) : plugin.msg(lm.General_BlockedMovementIcon); - - if (res.isTrusted((Player) sender)) - msg = plugin.msg(lm.Residence_TrustedResList, y + 1, res.getName(), res.getWorld(), tpFlag + moveFlag, ExtraString); - } - - RawMessage rm = new RawMessage(); - if (sender instanceof Player) - rm.addText(msg).addHover(StringB.toString()).addCommand(cmd + " tp " + res.getName()); - else - rm.addText(msg + " " + StringB.toString().replace("\n", "")); - - rm.show(sender); - } - - String worldName = ""; - if (world != null) - worldName = " " + world.getName(); - - if (targetPlayer != null) - pi.autoPagination(sender, cmd + " list " + targetPlayer + worldName); - else + String cmd = "res"; + if (resadmin) + cmd = "resadmin"; + + int y = -1; + + for (Entry resT : ownedResidences.entrySet()) { + y++; + if (y > pi.getEnd()) + break; + if (!pi.isInRange(y)) + continue; + + ClaimedResidence res = resT.getValue(); + StringBuilder StringB = new StringBuilder(); + StringB.append(plugin.msg(lm.General_Owner, res.getOwner())); + + if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { + StringB.append("\n"); + CuboidArea area = res.getAreaArray()[0]; + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); + String worldInfo = CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); + StringB.append(worldInfo); + } + + StringB.append("\n").append(plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); + + String ExtraString = ""; + if (res.isForRent()) { + if (res.isRented()) { + ExtraString = " " + plugin.msg(lm.Residence_IsRented); + StringB.append("\n").append(plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); + } else { + ExtraString = " " + plugin.msg(lm.Residence_IsForRent); + } + RentableLand rentable = res.getRentable(); + StringB.append("\n").append(plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); + StringB.append("\n").append(plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); + StringB.append("\n").append(plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); + StringB.append("\n").append(plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + } + + if (res.isForSell()) { + ExtraString = " " + plugin.msg(lm.Residence_IsForSale); + StringB.append("\n " + plugin.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); + } + + String tpFlag = ""; + String moveFlag = ""; + String msg = plugin.msg(lm.Residence_ResList, y + 1, res.getName(), res.getWorld(), tpFlag + moveFlag, ExtraString); + + if (sender instanceof Player && !res.isOwner(sender)) { + tpFlag = res.getPermissions().playerHas((Player) sender, Flags.tp, true) ? plugin.msg(lm.General_AllowedTeleportIcon) : plugin.msg(lm.General_BlockedTeleportIcon); + moveFlag = res.getPermissions().playerHas(sender.getName(), Flags.move, true) ? plugin.msg(lm.General_AllowedMovementIcon) : plugin.msg(lm.General_BlockedMovementIcon); + + if (res.isTrusted((Player) sender)) + msg = plugin.msg(lm.Residence_TrustedResList, y + 1, res.getName(), res.getWorld(), tpFlag + moveFlag, ExtraString); + } + + RawMessage rm = new RawMessage(); + if (sender instanceof Player) + rm.addText(msg).addHover(StringB.toString()).addCommand(cmd + " tp " + res.getName()); + else + rm.addText(msg + " " + StringB.toString().replace("\n", "")); + + rm.show(sender); + } + + String worldName = ""; + if (world != null) + worldName = " " + world.getName(); + + if (targetPlayer != null) + pi.autoPagination(sender, cmd + " list " + targetPlayer + worldName); + else pi.autoPagination(sender, cmd + " listall" + worldName); } private void printListWithDelay(final CommandSender sender, final TreeMap ownedResidences, final int start, final boolean resadmin) { - int i = start; - int y = 0; - for (Entry resT : ownedResidences.entrySet()) { - y++; - if (y < i) - continue; - i++; - if (i >= start + 100) - break; - if (ownedResidences.size() < i) - break; - - ClaimedResidence res = resT.getValue(); - StringBuilder StringB = new StringBuilder(); - StringB.append(plugin.msg(lm.General_Owner, res.getOwner())); - - if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { - CuboidArea area = res.getAreaArray()[0]; - String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); - String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); - String worldInfo = CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); - StringB.append("\n" + worldInfo); - } - - StringB.append("\n" + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); - - String ExtraString = ""; - if (res.isForRent()) { - if (res.isRented()) { - ExtraString = " " + plugin.msg(lm.Residence_IsRented); - StringB.append("\n " + plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); - } else { - ExtraString = " " + plugin.msg(lm.Residence_IsForRent); - } - RentableLand rentable = res.getRentable(); - StringB.append("\n" + plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); - StringB.append("\n" + plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); - StringB.append("\n" + plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); - StringB.append("\n" + plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); - } - - if (res.isForSell()) { - ExtraString = " " + plugin.msg(lm.Residence_IsForSale); - StringB.append("\n" + plugin.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); - } - - String msg = plugin.msg(lm.Residence_ResList, i, res.getName(), res.getWorld(), "", ExtraString); - - msg = CMIChatColor.stripColor(msg + " " + StringB.toString().replace("\n", "")); - msg = msg.replaceAll("\\s{2}", " "); - sender.sendMessage(msg); - } - - if (ownedResidences.isEmpty()) { - return; - } - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - printListWithDelay(sender, ownedResidences, start + 100, resadmin); - return; - } - }, 5L); + int i = start; + int y = 0; + for (Entry resT : ownedResidences.entrySet()) { + y++; + if (y < i) + continue; + i++; + if (i >= start + 100) + break; + if (ownedResidences.size() < i) + break; + + ClaimedResidence res = resT.getValue(); + StringBuilder StringB = new StringBuilder(); + StringB.append(plugin.msg(lm.General_Owner, res.getOwner())); + + if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { + CuboidArea area = res.getAreaArray()[0]; + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); + String worldInfo = CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); + StringB.append("\n" + worldInfo); + } + + StringB.append("\n" + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); + + String ExtraString = ""; + if (res.isForRent()) { + if (res.isRented()) { + ExtraString = " " + plugin.msg(lm.Residence_IsRented); + StringB.append("\n " + plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); + } else { + ExtraString = " " + plugin.msg(lm.Residence_IsForRent); + } + RentableLand rentable = res.getRentable(); + StringB.append("\n" + plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); + StringB.append("\n" + plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); + StringB.append("\n" + plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); + StringB.append("\n" + plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + } + + if (res.isForSell()) { + ExtraString = " " + plugin.msg(lm.Residence_IsForSale); + StringB.append("\n" + plugin.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); + } + + String msg = plugin.msg(lm.Residence_ResList, i, res.getName(), res.getWorld(), "", ExtraString); + + msg = CMIChatColor.stripColor(msg + " " + StringB.toString().replace("\n", "")); + msg = msg.replaceAll("\\s{2}", " "); + sender.sendMessage(msg); + } + + if (ownedResidences.isEmpty()) { + return; + } + + CMIScheduler.runTaskLater(() -> printListWithDelay(sender, ownedResidences, start + 100, resadmin), 5L); } private void printListToFile(final TreeMap ownedResidences, final boolean resadmin) { - Bukkit.getConsoleSender().sendMessage("Saving"); - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - int y = 0; - final StringBuilder sb = new StringBuilder(); - for (Entry resT : ownedResidences.entrySet()) { - y++; - if (ownedResidences.size() < y) - break; - - ClaimedResidence res = resT.getValue(); - StringBuilder StringB = new StringBuilder(); - StringB.append(" " + plugin.msg(lm.General_Owner, res.getOwner())); - - if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { - CuboidArea area = res.getAreaArray()[0]; - String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); - String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); - String worldInfo = CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); - StringB.append("\n" + worldInfo); - } - - StringB.append("\n " + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); - - String ExtraString = ""; - if (res.isForRent()) { - if (res.isRented()) { - ExtraString = " " + plugin.msg(lm.Residence_IsRented); - StringB.append("\n " + plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); - } else { - ExtraString = " " + plugin.msg(lm.Residence_IsForRent); - } - RentableLand rentable = res.getRentable(); - StringB.append("\n " + plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); - StringB.append("\n " + plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); - StringB.append("\n " + plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); - StringB.append("\n " + plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); - } - - if (res.isForSell()) { - ExtraString = " " + plugin.msg(lm.Residence_IsForSale); - StringB.append("\n " + plugin.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); - } - - String msg = plugin.msg(lm.Residence_ResList, y, res.getName(), res.getWorld(), "", ExtraString); - - msg = CMIChatColor.stripColor(msg + " " + StringB.toString().replace("\n", "")); - msg = msg.replaceAll("\\s{2}", " "); - - sb.append(msg); - sb.append(" \n"); - } - - File BackupDir = new File(Residence.getInstance().getDataLocation(), "FullLists"); - if (!BackupDir.isDirectory()) - BackupDir.mkdir(); - Date date = new Date(); - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); - - File file = new File(BackupDir, dateFormat.format(date) + ".txt"); - try ( - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), StandardCharsets.UTF_8));) { - writer.append(sb.toString()); - writer.flush(); - } catch (Exception e) { - e.printStackTrace(); - } - - Bukkit.getConsoleSender().sendMessage("Saved file to FullLists folder with " + file.getName() + " name"); - } - }); + Bukkit.getConsoleSender().sendMessage("Saving"); + CMIScheduler.runTaskAsynchronously(() -> { + int y = 0; + final StringBuilder sb = new StringBuilder(); + for (Entry resT : ownedResidences.entrySet()) { + y++; + if (ownedResidences.size() < y) + break; + + ClaimedResidence res = resT.getValue(); + StringBuilder StringB = new StringBuilder(); + StringB.append(" " + plugin.msg(lm.General_Owner, res.getOwner())); + + if (res.getAreaArray().length > 0 && (res.getPermissions().has(Flags.hidden, FlagCombo.FalseOrNone) && res.getPermissions().has(Flags.coords, FlagCombo.TrueOrNone) || resadmin)) { + CuboidArea area = res.getAreaArray()[0]; + String cord1 = plugin.msg(lm.General_CoordsTop, area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()); + String cord2 = plugin.msg(lm.General_CoordsBottom, area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()); + String worldInfo = CMIChatColor.translate(plugin.msg(lm.General_CoordsLiner, cord1, cord2)); + StringB.append("\n" + worldInfo); + } + + StringB.append("\n " + plugin.msg(lm.General_CreatedOn, GetTime.getTime(res.getCreateTime()))); + + String ExtraString = ""; + if (res.isForRent()) { + if (res.isRented()) { + ExtraString = " " + plugin.msg(lm.Residence_IsRented); + StringB.append("\n " + plugin.msg(lm.Residence_RentedBy, res.getRentedLand().player)); + } else { + ExtraString = " " + plugin.msg(lm.Residence_IsForRent); + } + RentableLand rentable = res.getRentable(); + StringB.append("\n " + plugin.msg(lm.General_Cost, rentable.cost, rentable.days)); + StringB.append("\n " + plugin.msg(lm.Rentable_AllowRenewing, rentable.AllowRenewing)); + StringB.append("\n " + plugin.msg(lm.Rentable_StayInMarket, rentable.StayInMarket)); + StringB.append("\n " + plugin.msg(lm.Rentable_AllowAutoPay, rentable.AllowAutoPay)); + } + + if (res.isForSell()) { + ExtraString = " " + plugin.msg(lm.Residence_IsForSale); + StringB.append("\n " + plugin.msg(lm.Economy_LandForSale) + " " + res.getSellPrice()); + } + + String msg = plugin.msg(lm.Residence_ResList, y, res.getName(), res.getWorld(), "", ExtraString); + + msg = CMIChatColor.stripColor(msg + " " + StringB.toString().replace("\n", "")); + msg = msg.replaceAll("\\s{2}", " "); + + sb.append(msg); + sb.append(" \n"); + } + + File BackupDir = new File(Residence.getInstance().getDataLocation(), "FullLists"); + if (!BackupDir.isDirectory()) + BackupDir.mkdir(); + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); + + File file = new File(BackupDir, dateFormat.format(date) + ".txt"); + try ( + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), StandardCharsets.UTF_8));) { + writer.append(sb.toString()); + writer.flush(); + } catch (Exception e) { + e.printStackTrace(); + } + + Bukkit.getConsoleSender().sendMessage("Saved file to FullLists folder with " + file.getName() + " name"); + }); } } diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index ea4d6dc34..83f427dc8 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -21,6 +21,8 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Version.Version; import net.Zrips.CMILib.Version.PaperMethods.PaperLib; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; public class RandomTp { @@ -29,294 +31,304 @@ public class RandomTp { private Residence plugin; public RandomTp(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } public boolean isDefinedRnadomTp(World world) { - for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { - if (!one.getCenter().getWorld().equals(world)) - continue; - return true; - } - return false; + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + if (!one.getCenter().getWorld().equals(world)) + continue; + return true; + } + return false; } @Deprecated public Location getRandomlocation(World world) { - if (world == null) - return null; + if (world == null) + return null; - Random randomX = new Random(System.currentTimeMillis()); - Random randomZ = new Random(System.nanoTime()); + Random randomX = new Random(System.currentTimeMillis()); + Random randomZ = new Random(System.nanoTime()); - boolean ok = false; - double x = 0; - double z = 0; + boolean ok = false; + double x = 0; + double z = 0; - int tries = 0; + int tries = 0; - RandomTeleport rtloc = null; + RandomTeleport rtloc = null; - for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { - if (!one.getCenter().getWorld().equals(world)) - continue; + if (!one.getCenter().getWorld().equals(world)) + continue; - rtloc = one; - break; - } + rtloc = one; + break; + } - if (rtloc == null) - return null; + if (rtloc == null) + return null; - int inerrange = rtloc.getMinCord(); - int outerrange = rtloc.getMaxCord(); - if (outerrange < 1) - outerrange = 1; - int maxtries = plugin.getConfigManager().getrtMaxTries(); + int inerrange = rtloc.getMinCord(); + int outerrange = rtloc.getMaxCord(); + if (outerrange < 1) + outerrange = 1; + int maxtries = plugin.getConfigManager().getrtMaxTries(); - int centerX = rtloc.getCenter().getBlockX(); - int centerY = rtloc.getCenter().getBlockZ(); + int centerX = rtloc.getCenter().getBlockX(); + int centerY = rtloc.getCenter().getBlockZ(); - Location loc = null; + Location loc = null; - c: while (!ok) { - tries++; - if (tries > maxtries) - return null; + c: while (!ok) { + tries++; + if (tries > maxtries) + return null; - x = randomX.nextInt(outerrange * 2) - outerrange + 0.5 + centerX; + x = randomX.nextInt(outerrange * 2) - outerrange + 0.5 + centerX; - if (x > inerrange * -1 && x < inerrange) - continue; + if (x > inerrange * -1 && x < inerrange) + continue; - z = randomZ.nextInt(outerrange * 2) - outerrange + 0.5 + centerY; - if (z > inerrange * -1 && z < inerrange) - continue; + z = randomZ.nextInt(outerrange * 2) - outerrange + 0.5 + centerY; + if (z > inerrange * -1 && z < inerrange) + continue; - loc = new Location(world, x, world.getMaxHeight(), z); + loc = new Location(world, x, world.getMaxHeight(), z); - int max = loc.getWorld().getMaxHeight(); - max = loc.getWorld().getEnvironment().equals(Environment.NETHER) ? 100 : world.getHighestBlockAt(loc).getY() + 1; + int max = loc.getWorld().getMaxHeight(); + max = loc.getWorld().getEnvironment().equals(Environment.NETHER) ? 100 : world.getHighestBlockAt(loc).getY() + 1; - for (int i = max; i > 0; i--) { - loc.setY(i); - Block block = loc.getBlock(); - Block block2 = loc.clone().add(0, 1, 0).getBlock(); - Block block3 = loc.clone().add(0, -1, 0).getBlock(); - if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2)) { - break; - } - if (i <= 3) { - loc = null; - continue c; - } - } + for (int i = max; i > 0; i--) { + loc.setY(i); + Block block = loc.getBlock(); + Block block2 = loc.clone().add(0, 1, 0).getBlock(); + Block block3 = loc.clone().add(0, -1, 0).getBlock(); + if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2)) { + break; + } + if (i <= 3) { + loc = null; + continue c; + } + } - if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) - continue; + if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) + continue; - if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.LAVA)) - continue; + if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.LAVA)) + continue; - if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.WATER)) - continue; + if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.WATER)) + continue; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - if (res != null) - continue; + if (res != null) + continue; - loc.setY(loc.getY() + 2); - break; - } + loc.setY(loc.getY() + 2); + break; + } - if (loc != null) { - int dir = randomZ.nextInt(359); - loc.setYaw(dir); - } + if (loc != null) { + int dir = randomZ.nextInt(359); + loc.setYaw(dir); + } - return loc; + return loc; } Random randomX = new Random(System.currentTimeMillis()); Random randomZ = new Random(System.nanoTime()); public Location getRandomlocationSync(World world) { - return get(world); + return get(world); } public CompletableFuture getRandomlocationAsync(World world) { - return CompletableFuture.supplyAsync(() -> get(world)); + if (Version.isFolia()) { + CompletableFuture future = new CompletableFuture(); + future.complete(get(world)); + return future; + } + return CompletableFuture.supplyAsync(() -> get(world)); } private Location get(World world) { - if (world == null) - return null; + if (world == null) + return null; - boolean ok = false; - double x = 0; - double z = 0; + boolean ok = false; + double x = 0; + double z = 0; - int tries = 0; + int tries = 0; - RandomTeleport rtloc = null; + RandomTeleport rtloc = null; - for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { - if (!one.getCenter().getWorld().equals(world)) - continue; + if (!one.getCenter().getWorld().equals(world)) + continue; - rtloc = one; - break; - } + rtloc = one; + break; + } - if (rtloc == null) - return null; + if (rtloc == null) + return null; - int inerrange = rtloc.getMinCord(); - int outerrange = rtloc.getMaxCord(); - if (outerrange < 1) - outerrange = 1; - int maxtries = plugin.getConfigManager().getrtMaxTries(); + int inerrange = rtloc.getMinCord(); + int outerrange = rtloc.getMaxCord(); + if (outerrange < 1) + outerrange = 1; + int maxtries = plugin.getConfigManager().getrtMaxTries(); - int centerX = rtloc.getCenter().getBlockX(); - int centerY = rtloc.getCenter().getBlockZ(); + int centerX = rtloc.getCenter().getBlockX(); + int centerY = rtloc.getCenter().getBlockZ(); - Location loc = null; + Location loc = null; - while (!ok) { - tries++; - if (tries > maxtries) - return null; + while (!ok) { + tries++; + if (tries > maxtries) + return null; - try { - x = randomX.nextInt(outerrange * 2) - outerrange + 0.5 + centerX; + try { + x = randomX.nextInt(outerrange * 2) - outerrange + 0.5 + centerX; - if (x > inerrange * -1 && x < inerrange) - continue; + if (x > inerrange * -1 && x < inerrange) + continue; - z = randomZ.nextInt(outerrange * 2) - outerrange + 0.5 + centerY; - if (z > inerrange * -1 && z < inerrange) - continue; + z = randomZ.nextInt(outerrange * 2) - outerrange + 0.5 + centerY; + if (z > inerrange * -1 && z < inerrange) + continue; - loc = new Location(world, x, world.getMaxHeight(), z); + loc = new Location(world, x, world.getMaxHeight(), z); - loc = getDownLocationSimple(loc); + loc = getDownLocationSimple(loc); - if (loc == null) { - continue; - } + if (loc == null) { + continue; + } - if (loc.getY() < CMIWorld.getMinHeight(loc.getWorld()) + 4) { + if (loc.getY() < CMIWorld.getMinHeight(loc.getWorld()) + 4) { - if (loc.getWorld().getEnvironment().equals(Environment.NETHER)) { - loc.setY(CMIWorld.getMaxHeight(loc.getWorld()) / 2); - } else { - if (Version.isPaper() && Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - CompletableFuture chunkFuture = PaperLib.getChunkAtAsync(loc, true); - Chunk chunk = chunkFuture.get(); - int y = chunk.getChunkSnapshot().getHighestBlockYAt(loc.getBlockX() & 0xF, loc.getBlockZ() & 0xF) - 1; - loc.setY(y); - } else { - loc.setY(loc.getWorld().getHighestBlockYAt(loc)); - } - } - } + if (loc.getWorld().getEnvironment().equals(Environment.NETHER)) { + loc.setY(CMIWorld.getMaxHeight(loc.getWorld()) / 2); + } else { + if (Version.isPaper() && Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + CompletableFuture chunkFuture = PaperLib.getChunkAtAsync(loc, false); + Chunk chunk = chunkFuture.get(); - if (loc.getWorld().getEnvironment().equals(Environment.NETHER)) { - if (loc.getY() > 128) - continue; - } + if (chunk == null) + continue; - if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) - continue; + int y = chunk.getChunkSnapshot().getHighestBlockYAt(loc.getBlockX() & 0xF, loc.getBlockZ() & 0xF) - 1; + loc.setY(y); + } else { + loc.setY(loc.getWorld().getHighestBlockYAt(loc)); + } + } + } - if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.LAVA)) - continue; + if (loc.getWorld().getEnvironment().equals(Environment.NETHER)) { + if (loc.getY() > 128) + continue; + } - if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.WATER)) - continue; + if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) + continue; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); + if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.LAVA)) + continue; - if (res != null) - continue; + if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.WATER)) + continue; - loc.setY(loc.getY() + 2); - break; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); - } catch (Exception | Error e) { - } - } + if (res != null) + continue; - if (loc != null) { - int dir = randomZ.nextInt(359); - loc.setYaw(dir); - } + loc.setY(loc.getY() + 2); + break; - return loc; + } catch (Exception | Error e) { + } + } + + if (loc != null) { + int dir = randomZ.nextInt(359); + loc.setYaw(dir); + } + + return loc; } private static Location getDownLocationSimple(Location oloc) { - try { - if (oloc == null) - return oloc; - Location loc = oloc.clone(); - - loc.setY(loc.getBlockY()); - - if (!oloc.getWorld().getEnvironment().equals(Environment.NETHER)) { - if (Version.isPaper() && Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - CompletableFuture chunkFuture = PaperLib.getChunkAtAsync(loc, true); - Chunk chunk = chunkFuture.get(); - int y = chunk.getChunkSnapshot().getHighestBlockYAt(loc.getBlockX() & 0xF, loc.getBlockZ() & 0xF) - 1; - - if (loc.getY() < y) { - return null; - } - loc.setY(y + 1); - } else { - int y = loc.getWorld().getHighestBlockYAt(loc); - if (loc.getY() < y) { - return null; - } - loc.setY(y + 1); - } - if (oloc.getWorld().getEnvironment().equals(Environment.THE_END) && loc.getY() < 5) - return null; - return loc.add(0, 1, 0); - } - - return null; - - } catch (Exception e) { - e.printStackTrace(); - } - return null; + try { + if (oloc == null) + return oloc; + Location loc = oloc.clone(); + + loc.setY(loc.getBlockY()); + + if (!oloc.getWorld().getEnvironment().equals(Environment.NETHER)) { + if (Version.isPaper() && Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + CompletableFuture chunkFuture = PaperLib.getChunkAtAsync(loc, false); + Chunk chunk = chunkFuture.get(); + + if (chunk == null) + return null; + + int y = chunk.getChunkSnapshot().getHighestBlockYAt(loc.getBlockX() & 0xF, loc.getBlockZ() & 0xF) - 1; + + if (loc.getY() < y) { + return null; + } + loc.setY(y + 1); + } else { + int y = loc.getWorld().getHighestBlockYAt(loc); + if (loc.getY() < y) { + return null; + } + loc.setY(y + 1); + } + if (oloc.getWorld().getEnvironment().equals(Environment.THE_END) && loc.getY() < 5) + return null; + return loc.add(0, 1, 0); + } + + return null; + + } catch (Exception e) { + e.printStackTrace(); + } + return null; } public void performDelaydTp(final Location loc, final Player targetPlayer) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) && plugin.getConfigManager().getTeleportDelay() > 0) - return; - else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) - plugin.getTeleportDelayMap().remove(targetPlayer.getName()); - targetPlayer.closeInventory(); - targetPlayer.teleport(loc); - plugin.msg(targetPlayer, lm.RandomTeleport_TeleportSuccess, loc.getX(), loc.getY(), loc.getZ()); - return; - } - }, plugin.getConfigManager().getTeleportDelay() * 20L); + CMIScheduler.runAtLocationLater(loc, () -> { + if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) && plugin.getConfigManager().getTeleportDelay() > 0) + return; + else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) + plugin.getTeleportDelayMap().remove(targetPlayer.getName()); + targetPlayer.closeInventory(); + CMITeleporter.teleportAsync(targetPlayer, loc); + plugin.msg(targetPlayer, lm.RandomTeleport_TeleportSuccess, loc.getX(), loc.getY(), loc.getZ()); + }, plugin.getConfigManager().getTeleportDelay() * 20L); } public void performInstantTp(Location loc, Player targetPlayer) { - targetPlayer.closeInventory(); - targetPlayer.teleport(loc); - plugin.msg(targetPlayer, lm.RandomTeleport_TeleportSuccess, loc.getX(), loc.getY(), loc.getZ()); + targetPlayer.closeInventory(); + CMITeleporter.teleportAsync(targetPlayer, loc); + + plugin.msg(targetPlayer, lm.RandomTeleport_TeleportSuccess, loc.getX(), loc.getY(), loc.getZ()); } } diff --git a/src/com/residence/mcstats/Metrics.java b/src/com/residence/mcstats/Metrics.java index dc07bd832..677f5cd96 100644 --- a/src/com/residence/mcstats/Metrics.java +++ b/src/com/residence/mcstats/Metrics.java @@ -35,6 +35,9 @@ import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.scheduler.BukkitTask; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Schedulers.CMITask; + import java.io.BufferedReader; import java.io.File; import java.io.IOException; @@ -120,33 +123,33 @@ public class Metrics { /** * The scheduled task */ - private volatile BukkitTask task = null; + private volatile CMITask task = null; public Metrics(final Plugin plugin) throws IOException { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - - this.plugin = plugin; - - // load the config - configurationFile = getConfigFile(); - configuration = YamlConfiguration.loadConfiguration(configurationFile); - - // add some defaults - configuration.addDefault("opt-out", false); - configuration.addDefault("guid", UUID.randomUUID().toString()); - configuration.addDefault("debug", false); - - // Do we need to create the file? - if (configuration.get("guid", null) == null) { - configuration.options().header("http://mcstats.org").copyDefaults(true); - configuration.save(configurationFile); - } - - // Load the guid then - guid = configuration.getString("guid"); - debug = configuration.getBoolean("debug", false); + if (plugin == null) { + throw new IllegalArgumentException("Plugin cannot be null"); + } + + this.plugin = plugin; + + // load the config + configurationFile = getConfigFile(); + configuration = YamlConfiguration.loadConfiguration(configurationFile); + + // add some defaults + configuration.addDefault("opt-out", false); + configuration.addDefault("guid", UUID.randomUUID().toString()); + configuration.addDefault("debug", false); + + // Do we need to create the file? + if (configuration.get("guid", null) == null) { + configuration.options().header("http://mcstats.org").copyDefaults(true); + configuration.save(configurationFile); + } + + // Load the guid then + guid = configuration.getString("guid"); + debug = configuration.getBoolean("debug", false); } /** @@ -157,18 +160,18 @@ public Metrics(final Plugin plugin) throws IOException { * @return Graph object created. Will never return NULL under normal circumstances unless bad parameters are given */ public Graph createGraph(final String name) { - if (name == null) { - throw new IllegalArgumentException("Graph name cannot be null"); - } + if (name == null) { + throw new IllegalArgumentException("Graph name cannot be null"); + } - // Construct the graph object - final Graph graph = new Graph(name); + // Construct the graph object + final Graph graph = new Graph(name); - // Now we can add our graph - graphs.add(graph); + // Now we can add our graph + graphs.add(graph); - // and return back - return graph; + // and return back + return graph; } /** @@ -177,11 +180,11 @@ public Graph createGraph(final String name) { * @param graph The name of the graph */ public void addGraph(final Graph graph) { - if (graph == null) { - throw new IllegalArgumentException("Graph cannot be null"); - } + if (graph == null) { + throw new IllegalArgumentException("Graph cannot be null"); + } - graphs.add(graph); + graphs.add(graph); } /** @@ -190,15 +193,15 @@ public void addGraph(final Graph graph) { * @param plotter The plotter to use to plot custom data */ public void addCustomData(final Plotter plotter) { - if (plotter == null) { - throw new IllegalArgumentException("Plotter cannot be null"); - } + if (plotter == null) { + throw new IllegalArgumentException("Plotter cannot be null"); + } - // Add the plotter to the graph o/ - defaultGraph.addPlotter(plotter); + // Add the plotter to the graph o/ + defaultGraph.addPlotter(plotter); - // Ensure the default graph is included in the submitted graphs - graphs.add(defaultGraph); + // Ensure the default graph is included in the submitted graphs + graphs.add(defaultGraph); } /** @@ -209,56 +212,35 @@ public void addCustomData(final Plotter plotter) { * @return True if statistics measuring is running, otherwise false. */ public boolean start() { - synchronized (optOutLock) { - // Did we opt out? - if (isOptOut()) { - return false; - } - - // Is metrics already running? - if (task != null) { - return true; - } - - // Begin hitting the server with glorious data - task = plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() { - - private boolean firstPost = true; - - @Override - public void run() { - try { - // This has to be synchronized or it can collide with the disable method. - synchronized (optOutLock) { - // Disable Task, if it is running and the server owner decided to opt-out - if (isOptOut() && task != null) { - task.cancel(); - task = null; - // Tell all plotters to stop gathering information. - for (Graph graph : graphs) { - graph.onOptOut(); - } - } - } - - // We use the inverse of firstPost because if it is the first time we are posting, - // it is not a interval ping, so it evaluates to FALSE - // Each time thereafter it will evaluate to TRUE, i.e PING! - postPlugin(!firstPost); - - // After the first post we set firstPost to false - // Each post thereafter will be a ping - firstPost = false; - } catch (IOException e) { - if (debug) { - Bukkit.getLogger().log(Level.INFO, "[Metrics] " + e.getMessage()); - } - } - } - }, 0, PING_INTERVAL * 1200); - - return true; - } + synchronized (optOutLock) { + // Did we opt out? + if (isOptOut()) { + return false; + } + + // Is metrics already running? + if (task != null) { + return true; + } + + // Begin hitting the server with glorious data + task = CMIScheduler.runTimerAsync(() -> { + // This has to be synchronized or it can collide with the disable method. + synchronized (optOutLock) { + // Disable Task, if it is running and the server owner decided to opt-out + if (isOptOut() && task != null) { + task.cancel(); + task = null; + // Tell all plotters to stop gathering information. + for (Graph graph : graphs) { + graph.onOptOut(); + } + } + } + }, 0, PING_INTERVAL * 1200); + + return true; + } } /** @@ -267,23 +249,23 @@ public void run() { * @return true if metrics should be opted out of it */ public boolean isOptOut() { - synchronized (optOutLock) { - try { - // Reload the metrics file - configuration.load(getConfigFile()); - } catch (IOException ex) { - if (debug) { - Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); - } - return true; - } catch (InvalidConfigurationException ex) { - if (debug) { - Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); - } - return true; - } - return configuration.getBoolean("opt-out", false); - } + synchronized (optOutLock) { + try { + // Reload the metrics file + configuration.load(getConfigFile()); + } catch (IOException ex) { + if (debug) { + Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); + } + return true; + } catch (InvalidConfigurationException ex) { + if (debug) { + Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage()); + } + return true; + } + return configuration.getBoolean("opt-out", false); + } } /** @@ -292,19 +274,19 @@ public boolean isOptOut() { * @throws java.io.IOException */ public void enable() throws IOException { - // This has to be synchronized or it can collide with the check in the task. - synchronized (optOutLock) { - // Check if the server owner has already set opt-out, if not, set it. - if (isOptOut()) { - configuration.set("opt-out", false); - configuration.save(configurationFile); - } - - // Enable Task, if it is not running - if (task == null) { - start(); - } - } + // This has to be synchronized or it can collide with the check in the task. + synchronized (optOutLock) { + // Check if the server owner has already set opt-out, if not, set it. + if (isOptOut()) { + configuration.set("opt-out", false); + configuration.save(configurationFile); + } + + // Enable Task, if it is not running + if (task == null) { + start(); + } + } } /** @@ -313,20 +295,20 @@ public void enable() throws IOException { * @throws java.io.IOException */ public void disable() throws IOException { - // This has to be synchronized or it can collide with the check in the task. - synchronized (optOutLock) { - // Check if the server owner has already set opt-out, if not, set it. - if (!isOptOut()) { - configuration.set("opt-out", true); - configuration.save(configurationFile); - } - - // Disable Task, if it is running - if (task != null) { - task.cancel(); - task = null; - } - } + // This has to be synchronized or it can collide with the check in the task. + synchronized (optOutLock) { + // Check if the server owner has already set opt-out, if not, set it. + if (!isOptOut()) { + configuration.set("opt-out", true); + configuration.save(configurationFile); + } + + // Disable Task, if it is running + if (task != null) { + task.cancel(); + task = null; + } + } } /** @@ -335,139 +317,139 @@ public void disable() throws IOException { * @return the File object for the config file */ public File getConfigFile() { - // I believe the easiest way to get the base folder (e.g craftbukkit set via -P) for plugins to use - // is to abuse the plugin object we already have - // plugin.getDataFolder() => base/plugins/PluginA/ - // pluginsFolder => base/plugins/ - // The base is not necessarily relative to the startup directory. - File pluginsFolder = plugin.getDataFolder().getParentFile(); - - // return => base/plugins/PluginMetrics/config.yml - return new File(new File(pluginsFolder, "PluginMetrics"), "config.yml"); + // I believe the easiest way to get the base folder (e.g craftbukkit set via -P) for plugins to use + // is to abuse the plugin object we already have + // plugin.getDataFolder() => base/plugins/PluginA/ + // pluginsFolder => base/plugins/ + // The base is not necessarily relative to the startup directory. + File pluginsFolder = plugin.getDataFolder().getParentFile(); + + // return => base/plugins/PluginMetrics/config.yml + return new File(new File(pluginsFolder, "PluginMetrics"), "config.yml"); } /** * Generic method that posts a plugin to the metrics website */ private void postPlugin(final boolean isPing) throws IOException { - // Server software specific section - PluginDescriptionFile description = plugin.getDescription(); - String pluginName = description.getName(); - boolean onlineMode = Bukkit.getServer().getOnlineMode();// TRUE if online mode is enabled - String pluginVersion = description.getVersion(); - String serverVersion = Bukkit.getVersion(); - int playersOnline = 0; - for (@SuppressWarnings("unused") - Player one : Bukkit.getOnlinePlayers()) { - playersOnline++; - } - - // END server software specific section -- all code below does not use any code outside of this class / Java - - // Construct the post data - final StringBuilder data = new StringBuilder(); - - // The plugin's description file containg all of the plugin data such as name, version, author, etc - data.append(encode("guid")).append('=').append(encode(guid)); - encodeDataPair(data, "version", pluginVersion); - encodeDataPair(data, "server", serverVersion); - encodeDataPair(data, "players", Integer.toString(playersOnline)); - encodeDataPair(data, "revision", String.valueOf(REVISION)); - - // New data as of R6 - String osname = System.getProperty("os.name"); - String osarch = System.getProperty("os.arch"); - String osversion = System.getProperty("os.version"); - String java_version = System.getProperty("java.version"); - int coreCount = Runtime.getRuntime().availableProcessors(); - - // normalize os arch .. amd64 -> x86_64 - if (osarch.equals("amd64")) { - osarch = "x86_64"; - } - - encodeDataPair(data, "osname", osname); - encodeDataPair(data, "osarch", osarch); - encodeDataPair(data, "osversion", osversion); - encodeDataPair(data, "cores", Integer.toString(coreCount)); - encodeDataPair(data, "online-mode", Boolean.toString(onlineMode)); - encodeDataPair(data, "java_version", java_version); - - // If we're pinging, append it - if (isPing) { - encodeDataPair(data, "ping", "true"); - } - - // Acquire a lock on the graphs, which lets us make the assumption we also lock everything - // inside of the graph (e.g plotters) - synchronized (graphs) { - final Iterator iter = graphs.iterator(); - - while (iter.hasNext()) { - final Graph graph = iter.next(); - - for (Plotter plotter : graph.getPlotters()) { - // The key name to send to the metrics server - // The format is C-GRAPHNAME-PLOTTERNAME where separator - is defined at the top - // Legacy (R4) submitters use the format Custom%s, or CustomPLOTTERNAME - final String key = String.format("C%s%s%s%s", CUSTOM_DATA_SEPARATOR, graph.getName(), CUSTOM_DATA_SEPARATOR, plotter.getColumnName()); - - // The value to send, which for the foreseeable future is just the string - // value of plotter.getValue() - final String value = Integer.toString(plotter.getValue()); - - // Add it to the http post data :) - encodeDataPair(data, key, value); - } - } - } - - // Create the url - URL url = new URL(BASE_URL + String.format(REPORT_URL, encode(pluginName))); - - // Connect to the website - URLConnection connection; - - // Mineshafter creates a socks proxy, so we can safely bypass it - // It does not reroute POST requests so we need to go around it - if (isMineshafterPresent()) { - connection = url.openConnection(Proxy.NO_PROXY); - } else { - connection = url.openConnection(); - } - - connection.setDoOutput(true); - - // Write the data - final OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); - writer.write(data.toString()); - writer.flush(); - - // Now read the response - final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - final String response = reader.readLine(); - - // close resources - writer.close(); - reader.close(); - - if (response == null || response.startsWith("ERR")) { - throw new IOException(response);//Throw the exception - } - // Is this the first update this hour? - if (response.contains("OK This is your first update this hour")) { - synchronized (graphs) { - final Iterator iter = graphs.iterator(); - - while (iter.hasNext()) { - final Graph graph = iter.next(); - - for (Plotter plotter : graph.getPlotters()) { - plotter.reset(); - } - } - } - } + // Server software specific section + PluginDescriptionFile description = plugin.getDescription(); + String pluginName = description.getName(); + boolean onlineMode = Bukkit.getServer().getOnlineMode();// TRUE if online mode is enabled + String pluginVersion = description.getVersion(); + String serverVersion = Bukkit.getVersion(); + int playersOnline = 0; + for (@SuppressWarnings("unused") + Player one : Bukkit.getOnlinePlayers()) { + playersOnline++; + } + + // END server software specific section -- all code below does not use any code outside of this class / Java + + // Construct the post data + final StringBuilder data = new StringBuilder(); + + // The plugin's description file containg all of the plugin data such as name, version, author, etc + data.append(encode("guid")).append('=').append(encode(guid)); + encodeDataPair(data, "version", pluginVersion); + encodeDataPair(data, "server", serverVersion); + encodeDataPair(data, "players", Integer.toString(playersOnline)); + encodeDataPair(data, "revision", String.valueOf(REVISION)); + + // New data as of R6 + String osname = System.getProperty("os.name"); + String osarch = System.getProperty("os.arch"); + String osversion = System.getProperty("os.version"); + String java_version = System.getProperty("java.version"); + int coreCount = Runtime.getRuntime().availableProcessors(); + + // normalize os arch .. amd64 -> x86_64 + if (osarch.equals("amd64")) { + osarch = "x86_64"; + } + + encodeDataPair(data, "osname", osname); + encodeDataPair(data, "osarch", osarch); + encodeDataPair(data, "osversion", osversion); + encodeDataPair(data, "cores", Integer.toString(coreCount)); + encodeDataPair(data, "online-mode", Boolean.toString(onlineMode)); + encodeDataPair(data, "java_version", java_version); + + // If we're pinging, append it + if (isPing) { + encodeDataPair(data, "ping", "true"); + } + + // Acquire a lock on the graphs, which lets us make the assumption we also lock everything + // inside of the graph (e.g plotters) + synchronized (graphs) { + final Iterator iter = graphs.iterator(); + + while (iter.hasNext()) { + final Graph graph = iter.next(); + + for (Plotter plotter : graph.getPlotters()) { + // The key name to send to the metrics server + // The format is C-GRAPHNAME-PLOTTERNAME where separator - is defined at the top + // Legacy (R4) submitters use the format Custom%s, or CustomPLOTTERNAME + final String key = String.format("C%s%s%s%s", CUSTOM_DATA_SEPARATOR, graph.getName(), CUSTOM_DATA_SEPARATOR, plotter.getColumnName()); + + // The value to send, which for the foreseeable future is just the string + // value of plotter.getValue() + final String value = Integer.toString(plotter.getValue()); + + // Add it to the http post data :) + encodeDataPair(data, key, value); + } + } + } + + // Create the url + URL url = new URL(BASE_URL + String.format(REPORT_URL, encode(pluginName))); + + // Connect to the website + URLConnection connection; + + // Mineshafter creates a socks proxy, so we can safely bypass it + // It does not reroute POST requests so we need to go around it + if (isMineshafterPresent()) { + connection = url.openConnection(Proxy.NO_PROXY); + } else { + connection = url.openConnection(); + } + + connection.setDoOutput(true); + + // Write the data + final OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); + writer.write(data.toString()); + writer.flush(); + + // Now read the response + final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + final String response = reader.readLine(); + + // close resources + writer.close(); + reader.close(); + + if (response == null || response.startsWith("ERR")) { + throw new IOException(response);//Throw the exception + } + // Is this the first update this hour? + if (response.contains("OK This is your first update this hour")) { + synchronized (graphs) { + final Iterator iter = graphs.iterator(); + + while (iter.hasNext()) { + final Graph graph = iter.next(); + + for (Plotter plotter : graph.getPlotters()) { + plotter.reset(); + } + } + } + } } /** @@ -476,12 +458,12 @@ private void postPlugin(final boolean isPing) throws IOException { * @return true if mineshafter is installed on the server */ private static boolean isMineshafterPresent() { - try { - Class.forName("mineshafter.MineServer"); - return true; - } catch (Exception e) { - return false; - } + try { + Class.forName("mineshafter.MineServer"); + return true; + } catch (Exception e) { + return false; + } } /** @@ -498,7 +480,7 @@ private static boolean isMineshafterPresent() { * @param value the value */ private static void encodeDataPair(final StringBuilder buffer, final String key, final String value) throws UnsupportedEncodingException { - buffer.append('&').append(encode(key)).append('=').append(encode(value)); + buffer.append('&').append(encode(key)).append('=').append(encode(value)); } /** @@ -508,7 +490,7 @@ private static void encodeDataPair(final StringBuilder buffer, final String key, * @return the encoded text, as UTF-8 */ private static String encode(final String text) throws UnsupportedEncodingException { - return URLEncoder.encode(text, "UTF-8"); + return URLEncoder.encode(text, "UTF-8"); } /** @@ -516,76 +498,76 @@ private static String encode(final String text) throws UnsupportedEncodingExcept */ public static class Graph { - /** - * The graph's name, alphanumeric and spaces only :) If it does not comply to the above when submitted, it is - * rejected - */ - private final String name; - /** - * The set of plotters that are contained within this graph - */ - private final Set plotters = new LinkedHashSet(); - - private Graph(final String name) { - this.name = name; - } - - /** - * Gets the graph's name - * - * @return the Graph's name - */ - public String getName() { - return name; - } - - /** - * Add a plotter to the graph, which will be used to plot entries - * - * @param plotter the plotter to add to the graph - */ - public void addPlotter(final Plotter plotter) { - plotters.add(plotter); - } - - /** - * Remove a plotter from the graph - * - * @param plotter the plotter to remove from the graph - */ - public void removePlotter(final Plotter plotter) { - plotters.remove(plotter); - } - - /** - * Gets an unmodifiable set of the plotter objects in the graph - * - * @return an unmodifiable {@link java.util.Set} of the plotter objects - */ - public Set getPlotters() { - return Collections.unmodifiableSet(plotters); - } - - @Override - public int hashCode() { - return name.hashCode(); - } - - @Override - public boolean equals(final Object object) { - if (!(object instanceof Graph)) { - return false; - } - - final Graph graph = (Graph) object; - return graph.name.equals(name); - } - - /** - * Called when the server owner decides to opt-out of BukkitMetrics while the server is running. - */ - protected void onOptOut() { - } + /** + * The graph's name, alphanumeric and spaces only :) If it does not comply to the above when submitted, it is + * rejected + */ + private final String name; + /** + * The set of plotters that are contained within this graph + */ + private final Set plotters = new LinkedHashSet(); + + private Graph(final String name) { + this.name = name; + } + + /** + * Gets the graph's name + * + * @return the Graph's name + */ + public String getName() { + return name; + } + + /** + * Add a plotter to the graph, which will be used to plot entries + * + * @param plotter the plotter to add to the graph + */ + public void addPlotter(final Plotter plotter) { + plotters.add(plotter); + } + + /** + * Remove a plotter from the graph + * + * @param plotter the plotter to remove from the graph + */ + public void removePlotter(final Plotter plotter) { + plotters.remove(plotter); + } + + /** + * Gets an unmodifiable set of the plotter objects in the graph + * + * @return an unmodifiable {@link java.util.Set} of the plotter objects + */ + public Set getPlotters() { + return Collections.unmodifiableSet(plotters); + } + + @Override + public int hashCode() { + return name.hashCode(); + } + + @Override + public boolean equals(final Object object) { + if (!(object instanceof Graph)) { + return false; + } + + final Graph graph = (Graph) object; + return graph.name.equals(name); + } + + /** + * Called when the server owner decides to opt-out of BukkitMetrics while the server is running. + */ + protected void onOptOut() { + } } /** @@ -593,64 +575,64 @@ protected void onOptOut() { */ public static abstract class Plotter { - /** - * The plot's name - */ - private final String name; - - /** - * Construct a plotter with the default plot name - */ - public Plotter() { - this("Default"); - } - - /** - * Construct a plotter with a specific plot name - * - * @param name the name of the plotter to use, which will show up on the website - */ - public Plotter(final String name) { - this.name = name; - } - - /** - * Get the current value for the plotted point. Since this function defers to an external function it may or may - * not return immediately thus cannot be guaranteed to be thread friendly or safe. This function can be called - * from any thread so care should be taken when accessing resources that need to be synchronized. - * - * @return the current value for the point to be plotted. - */ - public abstract int getValue(); - - /** - * Get the column name for the plotted point - * - * @return the plotted point's column name - */ - public String getColumnName() { - return name; - } - - /** - * Called after the website graphs have been updated - */ - public void reset() { - } - - @Override - public int hashCode() { - return getColumnName().hashCode(); - } - - @Override - public boolean equals(final Object object) { - if (!(object instanceof Plotter)) { - return false; - } - - final Plotter plotter = (Plotter) object; - return plotter.name.equals(name) && plotter.getValue() == getValue(); - } + /** + * The plot's name + */ + private final String name; + + /** + * Construct a plotter with the default plot name + */ + public Plotter() { + this("Default"); + } + + /** + * Construct a plotter with a specific plot name + * + * @param name the name of the plotter to use, which will show up on the website + */ + public Plotter(final String name) { + this.name = name; + } + + /** + * Get the current value for the plotted point. Since this function defers to an external function it may or may + * not return immediately thus cannot be guaranteed to be thread friendly or safe. This function can be called + * from any thread so care should be taken when accessing resources that need to be synchronized. + * + * @return the current value for the point to be plotted. + */ + public abstract int getValue(); + + /** + * Get the column name for the plotted point + * + * @return the plotted point's column name + */ + public String getColumnName() { + return name; + } + + /** + * Called after the website graphs have been updated + */ + public void reset() { + } + + @Override + public int hashCode() { + return getColumnName().hashCode(); + } + + @Override + public boolean equals(final Object object) { + if (!(object instanceof Plotter)) { + return false; + } + + final Plotter plotter = (Plotter) object; + return plotter.name.equals(name) && plotter.getValue() == getValue(); + } } } \ No newline at end of file diff --git a/src/plugin.yml b/src/plugin.yml index 23b7d3e18..b925c1fd8 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -4,6 +4,7 @@ version: 5.1.2.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 +folia-supported: true authors: [bekvon,nate302,t00thpick1] depend: [CMILib] softdepend: [Pl3xMap,Vault,Essentials,RealPlugin,iConomy,bPermissions,WorldEdit,WorldGuard,CrackShot,Multiverse-Core,MultiWorld,My_Worlds,TheWorld,dynmap,LWC,Kingdoms,PlaceholderAPI,CMI,ServerControlReloaded,Slimefun,CS-CoreLib] From a917ba82d17ee635eaa3482641d71215aa43c408 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 31 Aug 2023 13:20:05 +0300 Subject: [PATCH 1065/1142] Lets check by use and build flags for sign editing --- src/com/bekvon/bukkit/residence/commands/unstuck.java | 2 ++ .../residence/listeners/ResidencePlayerListener1_20.java | 8 ++++++-- src/plugin.yml | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index 8b6f66a55..f0d0d2c4c 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -9,6 +9,7 @@ import net.Zrips.CMILib.FileHandler.ConfigReader; import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; +import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.ResidencePlayer; @@ -51,5 +52,6 @@ public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Teleports outside of residence"); c.get("Info", Arrays.asList("&eUsage: &6/res unstuck")); + LocaleManager.addTabCompleteMain(this); } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java index f32681424..0098a51ff 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java @@ -36,13 +36,17 @@ public void onSignInteract(PlayerSignOpenEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(event.getSign().getLocation(), player); boolean hasuse = perms.playerHas(player, Flags.use, FlagCombo.TrueOrNone); + boolean hasBuild = perms.playerHas(player, Flags.build, FlagCombo.TrueOrNone); - if (hasuse || plugin.isResAdminOn(player)) + if (hasuse && hasBuild || plugin.isResAdminOn(player)) return; event.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, Flags.use); + if (!hasuse) + plugin.msg(player, lm.Flag_Deny, Flags.use); + else + plugin.msg(player, lm.Flag_Deny, Flags.build); } } diff --git a/src/plugin.yml b/src/plugin.yml index b925c1fd8..3ec6b610e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.2.2 +version: 5.1.3.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 982d06fdca8fdf33789526e3f781599624ac489d Mon Sep 17 00:00:00 2001 From: kqakqakqa <58761476+kqakqakqa@users.noreply.github.com> Date: Sun, 3 Sep 2023 00:22:26 +0800 Subject: [PATCH 1066/1142] Update Chinese.yml Complete and fix inaccurate translations. --- src/Language/Chinese.yml | 2114 +++++++++++++++++++------------------- 1 file changed, 1064 insertions(+), 1050 deletions(-) diff --git a/src/Language/Chinese.yml b/src/Language/Chinese.yml index dbe5d72d0..80031609a 100644 --- a/src/Language/Chinese.yml +++ b/src/Language/Chinese.yml @@ -1,338 +1,404 @@ -# of this file and modify that instead. This file will be updated automatically by Residence -# when a newer version is detected, and your changes will be overwritten. Once you -# have a copy of this file, change the Language: option under the Residence config.yml -# to whatever you named your copy. +# 注æ„: +# 如果您想修改此文件, 强烈建议您å¤åˆ¶æ­¤æ–‡ä»¶ä¸ºå‰¯æœ¬å¹¶ä¿®æ”¹é‚£ä¸ªå‰¯æœ¬ã€‚ +# 当检测到更新的版本时, Residence 将自动更新此文件, 您对此文件的所有更改将被覆盖。 +# 在您创建此文件的副本åŽ, 请将 Residence config.yml 下的 Language: option 更改为您创建的副本的å称。 +# 以下内容表示 Residence å‘玩家å‘é€çš„å„ç§æ¶ˆæ¯ã€‚ +# 请注æ„,有些消æ¯åŒ…å«åœ¨è¿è¡Œä¸­èµ‹å€¼çš„å˜é‡ï¼Œå¦‚ %1。 Language: Invalid: - Player: '&c无效的玩家å...' - World: '&c无效的世界...' - Residence: '&c无效的领地...' - Subzone: '&c无效的领地å­åŒºåŸŸ...' - Direction: '&c无效的方å‘...' - Amount: '&c无效的数é‡...' - Cost: '&c无效的花费...' - Days: '&c无效的天数...' - Material: '&c无效的ææ–™...' - Boolean: '&c无效值, 必须为 &6true(t) &c或者 &6false(f)' - Area: '&c无效的区域...' - Group: '&c无效的æƒé™ç»„...' - MessageType: '&c消æ¯ç±»åž‹å¿…须为 enter(进入), leave(离开) 或 remove(移除).' - Flag: '&c无效æƒé™...' - FlagState: '&c无效æƒé™çŠ¶æ€, 必须为 &6true(t)&c, &6false(f)&c, 或 &6remove(r)' - List: '&e未知åå•ç±»åž‹, 必须是 &6blacklist(黑åå•) &e或 &6ignorelist(忽略åå•).' - Page: '&e无效页é¢...' - Help: '&c无效帮助页é¢...' - NameCharacters: '&cå字中包å«æ— æ•ˆå­—符...' - PlayerOffline: '&c玩家ä¸åœ¨çº¿' + Player: '&c无效的玩家å。' + PlayerOffline: '&c玩家ä¸åœ¨çº¿ã€‚' + World: '&c无效的世界。' + Residence: '&c无效的领地。' + Subzone: '&c无效的å­é¢†åœ°ã€‚' + Direction: '&c无效的方å‘。' + Amount: '&c无效的数é‡ã€‚' + Cost: '&c无效的价格。' + Days: '&c无效的天数。' + Material: '&c无效的æ料。' + Boolean: '&c无效值, 必须为 &6true(t) &c或 &6false(f)&c。' + Area: '&c无效的区域。' + Group: '&c无效的æƒé™ç»„。' + Location: '&c无效的ä½ç½®ã€‚' + MessageType: '&c消æ¯ç±»åž‹å¿…须为 enter(进入), leave(离开) 或 remove(清除消æ¯)。' + Flag: '&c无效的æƒé™ã€‚' FlagType: - Fail: '&c无效标志... 此标志åªèƒ½åœ¨ %1 使用' + Fail: '&c无效的æƒé™ã€‚该æƒé™åªèƒ½åœ¨ %1 使用。' Player: 玩家 Residence: 领地 - PortalDestination: '&cä¼ é€ç‚¹ä½äºŽé™åˆ¶åŒºåŸŸä¸­. ä¼ é€ç‚¹åˆ›å»ºå·²å–消. &7请寻找新地点' - FromConsole: '&c此功能åªèƒ½åœ¨æŽ§åˆ¶å°ä½¿ç”¨!' - Ingame: '&c此功能åªèƒ½åœ¨æ¸¸æˆä¸­ä½¿ç”¨!' + FlagState: '&c无效的æƒé™çŠ¶æ€, 必须为 &6true(t)&c, &6false(f)&c, 或 &6remove(r)&c。' + List: '&e未知åå•ç±»åž‹, 必须为 &6blacklist(黑åå•) &e或 &6ignorelist(忽略åå•)。' + Page: '&e无效的页é¢ã€‚' + Help: '&c无效的帮助页é¢ã€‚' + NameCharacters: '&cå称中包å«æ— æ•ˆå­—符。' + PortalDestination: '&cä¼ é€é—¨ç›®çš„地ä½äºŽé™åˆ¶åŒºåŸŸä¸­ã€‚å·²å–消传é€é—¨åˆ›å»ºã€‚&7请寻找新ä½ç½®ã€‚' + FromConsole: '&cåªèƒ½åœ¨æŽ§åˆ¶å°æ‰§è¡Œæ­¤å‘½ä»¤!' + Ingame: '&cåªèƒ½åœ¨æ¸¸æˆä¸­æ‰§è¡Œæ­¤å‘½ä»¤!' Area: - Exists: '&c区域å已存在.' - Create: '&e领地区域创建æˆåŠŸ, ID &6%1' - DiffWorld: '&c区域与领地在ä¸åŒä¸–ç•Œ.' - Collision: '&c区域与领地 &6%1 &c冲çª.' - SubzoneCollision: '&c区域与领地å­åŒºåŸŸ &6%1 &c冲çª.' - NonExist: '&c区域ä¸å­˜åœ¨.' - InvalidName: '&c无效区域å...' - ToSmallX: '&c选区 &6X &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' - ToSmallY: '&c选区高度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' - ToSmallZ: '&c选区 &6Z &cæ–¹å‘长度 (&6%1&c) 过å°. &e该值必须为 &6%2 &e或更大.' - ToBigX: '&c你选择的 &6X &cåæ ‡ (&6%1&c) 太大了. &e请ä¿è¯é€‰æ‹©å¤§å°åœ¨ &6%2 &e之内' - ToBigY: '&c你选择的 &6Y &cåæ ‡ (&6%1&c) 太大了. &e请ä¿è¯é€‰æ‹©å¤§å°åœ¨ &6%2 &e之内' - ToBigZ: '&c你选择的 &6Z &cåæ ‡ (&6%1&c) 太大了. &e请ä¿è¯é€‰æ‹©å¤§å°åœ¨ &6%2 &e之内' - Rename: '&e区域 &6%1 &e已被é‡å‘½å为 &6%2' - Remove: '&e已删除区域 &6%1&e.' + Exists: '&c此区域å已存在。' + Create: '&e你创建了领地区域, ID为 &6%1&c。' + DiffWorld: '&c区域与领地在ä¸åŒçš„世界。' + Collision: '&c区域与领地 &6%1 &c冲çªã€‚' + TooClose: '&c与å¦ä¸€ä¸ªé¢†åœ°è·ç¦»å¤ªé è¿‘。需è¦è‡³å°‘ &e%1 &c格间è·ã€‚' + SubzoneCollision: '&c区域与å­é¢†åœ° &6%1 &c冲çªã€‚' + NonExist: '&c该区域ä¸å­˜åœ¨ã€‚' + InvalidName: '&c无效的区域å。' + # ToSmallTotal: '&c选区过å°, å°äºŽå…许的最å°å€¼ (&6%1&c)。' + ToSmallX: '&c选区 &6X &cæ–¹å‘长度 (&6%1&c) 过å°ã€‚&e该值必须为 &6%2 &e或更大。' + ToSmallY: '&c选区高度 (&6%1&c) 过å°ã€‚&e该值必须为 &6%2 &e或更大。' + ToSmallZ: '&c选区 &6Z &cæ–¹å‘长度 (&6%1&c) 过å°ã€‚&e该值必须为 &6%2 &e或更大。' + ToBigX: '&c选区 &6X &cæ–¹å‘长度 (&6%1&c) 过大。&e该值必须为 &6%2 &e或更å°ã€‚' + ToBigY: '&c选区高度 (&6%1&c) 过大。&e该值必须为 &6%2 &e或更å°ã€‚' + ToBigZ: '&c选区 &6Z &cæ–¹å‘长度 (&6%1&c) 过大。&e该值必须为 &6%2 &e或更å°ã€‚' + Rename: '&e已将区域 &6%1 &eé‡å‘½å为 &6%2&e。' + Remove: '&e已将区域 &6%1 &e删除。' Name: '&eå称: &2%1' - RemoveLast: '&cä¸èƒ½ç§»é™¤é¢†åœ°ä¸­çš„最åŽä¸€ä¸ªåŒºåŸŸ.' - NotWithinParent: '&c该区域ä¸åœ¨çˆ¶åŒºåŸŸå†….' - Update: '&e区域已更新...' - MaxPhysical: '&e已达到领地所å…许的最大空间.' - SizeLimit: '&e区域大å°è¶…出了å…许的尺寸上é™.' - HighLimit: '&cä½ ä¸èƒ½ä¿æŠ¤è¿™ä¹ˆé«˜çš„领地, 高度上é™ä¸º &6%1' - LowLimit: '&cä½ ä¸èƒ½ä¿æŠ¤è¿™ä¹ˆæ·±çš„领地, 深度上é™ä¸º &6%1' - TooClose: '&cé å¾—离å¦ä¸€ä¸ªé¢†åœ°å¤ªè¿‘了. 你需è¦è‡³å°‘ &e%1 &c格宽.' - ListAll: '&a{&eID:&c%1 &e点1:&c(%2,%3,%4) &e点2:&c(%5,%6,%7) &e(é¢ç§¯:&c%8&e)&a}' - WeirdShape: '&3领地形状ä¸æ­£ç¡®.&6%1&3边比&6%3&3边大&6%2&3å€' + ListAll: '&a{&eID:&c%1 &e点1:&c(%2,%3,%4) &e点2:&c(%5,%6,%7) &e(大å°:&c%8&e)&a}' + RemoveLast: '&cä¸èƒ½åˆ é™¤é¢†åœ°çš„最åŽä¸€ä¸ªåŒºåŸŸã€‚' + NotWithinParent: '&c此区域ä¸åœ¨çˆ¶åŒºåŸŸå†…。' + Update: '&e已更新区域。' + MaxPhysical: '&e已达到领地所å…许的最大空间。' + SizeLimit: '&e区域大å°è¶…出了å…许的尺寸上é™ã€‚' + HighLimit: '&cä½ ä¸èƒ½ä¿æŠ¤åˆ°è¿™ä¹ˆé«˜, 高度上é™ä¸º &6%1&c。' + LowLimit: '&cä½ ä¸èƒ½ä¿æŠ¤åˆ°è¿™ä¹ˆæ·±, 深度下é™ä¸º &6%1&c。' + WeirdShape: '&3领地形状超出规则。&6%1 &3边比 &6%3 &3边大 &6%2 &3å€ã€‚' Select: - Points: '&e执行命令å‰éœ€è¦å…ˆé€‰ä¸­ä¸¤ä¸ªé€‰å–点!' + Points: '&e执行此命令å‰éœ€è¦å…ˆé€‰ä¸­ä¸¤ä¸ªé€‰å–点!' Overlap: '&c选å–点与区域 &6%1 &cé‡å !' WorldGuardOverlap: '&c选å–点与 WorldGuard 区域 &6%1 &cé‡å !' - KingdomsOverlap: '&c你选择的å标和 &6%1 &c王国的土地产生了冲çªï¼' + KingdomsOverlap: '&c选å–点与 &6%1 &c王国的土地é‡å !' Success: '&e选å–点æˆåŠŸ!' - Fail: '&c无效的选择命令...' - Bedrock: '&e将选区扩展到最大深度.' - Sky: '&e将选区扩展到最大高度.' - Area: '&e已选择 &6%2 &e领地的 &6%1 &e区域.' + Fail: '&c无效的选择命令。' + Bedrock: '&e已将选区扩展到最大深度。' + Sky: '&e已将选区扩展到最大高度。' + Area: '&e已选择领地 &6%2 &eçš„ &6%1 &e区域。' Tool: '&e- 选区工具: &6%1' PrimaryPoint: '&e已选择 &6第一个 &e选å–点 %1' SecondaryPoint: '&e已选择 &6第二个 &e选å–点 %1' Primary: '&e第一个选å–点: &6%1' Secondary: '&e第二个选å–点: &6%1' - TooHigh: '&c警告: 选区越过了地图顶部, 并且已被è£å‰ª.' - TooLow: '&c警告: 选区越过了地图底部, 并且已被è£å‰ª.' + TooHigh: '&c警告: 选区超过了世界顶部, 超出的部分已被缩é™ã€‚' + TooLow: '&c警告: 选区超过了世界底部, 超出的部分已被缩é™ã€‚' TotalSize: '&e选区总大å°: &6%1' - AutoEnabled: '&e自动选择模å¼&6å¼€å¯&e. 输入 &6/res select auto &e关闭.' - AutoDisabled: '&e自动选择模å¼&6关闭&e. 输入 &6/res select auto &eå†æ¬¡æ‰“å¼€.' - Disabled: '&c你没有æƒé™ä½¿ç”¨é€‰æ‹©å‘½ä»¤.' + AutoEnabled: '&6å·²å¼€å¯ &e自动选择模å¼ã€‚输入 &6/res select auto &e关闭。' + AutoDisabled: '&6已关闭 &e自动选择模å¼ã€‚输入 &6/res select auto &eå†æ¬¡æ‰“开。' + Disabled: '&c你没有æƒé™ä½¿ç”¨é€‰æ‹©å‘½ä»¤ã€‚' Sign: - Updated: '&6%1 &e木牌已更新!' + Updated: '&6%1 &e已更新告示牌!' TopLine: '[领地市场]' - DateFormat: YY/MM/dd HH:mm - ForRentTopLine: '&8出租' - ForRentPriceLine: '&8%1&f/&8%2&f/&8%3' - ForRentResName: '&8%1' + DateFormat: 'YY/MM/dd HH:mm' + ForRentTopLine: '&0出租' + ForRentPriceLine: '&0%1&f/&0%2&f/&0%3' + ForRentResName: '&0%1' ForRentBottomLine: '&9å¯ç”¨' RentedAutorenewTrue: '&2%1' RentedAutorenewFalse: '&c%1' RentedTopLine: '%1' - RentedPriceLine: '&8%1&f/&8%2&f/&8%3' - RentedResName: '&8%1' + RentedPriceLine: '&0%1&f/&0%2&f/&0%3' + RentedResName: '&0%1' RentedBottomLine: '&1%1' - ForSaleTopLine: '&8出售' - ForSalePriceLine: '&8%1' - ForSaleResName: '&8%1' - ForSaleBottomLine: '&5å¯ç”¨' - LookAt: '&c请将鼠标准星对准木牌.' + ForSaleTopLine: '&0出售' + ForSalePriceLine: '&0%1' + ForSaleResName: '&0%1' ForSaleBottom: '&0%1m³' - TooMany: '&c此领地的告示牌太多了' + LookAt: '&c请é¢å‘告示牌。' + TooMany: '&c这个领地有太多告示牌' ResName: '&0%1' Owner: '&0%1' + Raid: + NotEnabled: '&c袭击功能未开å¯!' + NotIn: '&cä½ ä¸åœ¨è¢­å‡»ä¸­!' + CantLeave: '&cä½ ä¸èƒ½ç¦»å¼€ (%1) 对你自己的领地的袭击!' + CantKick: '&cä¸èƒ½è¸¢å‡º (%1) 领地的所有者!' + Kicked: '&eå°† &7%1 &e从对 &7%2 &e的袭击中踢出!' + StartsIn: '&7袭击将在以下时间åŽå¼€å§‹: [autoTimeLeft] &2%1D &4%2A' + EndsIn: '&c袭击将在以下时间åŽç»“æŸ: [autoTimeLeft] &2%1D &4%2A' + Ended: '&7对 &4%1 &7的袭击已结æŸ!' + cantDo: '&c在袭击过程中ä¸èƒ½åšè¿™ä»¶äº‹!' + left: '&7你离开了对 &4%1 &7的袭击' + noFlagChange: '&c在袭击过程中ä¸èƒ½æ›´æ”¹æƒé™' + noRemoval: '&c在袭击过程中ä¸èƒ½åˆ é™¤é¢†åœ°' + immune: '&eå…å—接下æ¥çš„ %1 场袭击' + notImmune: '&eä¸å†å…å—袭击' + notInRaid: '&e玩家ä¸åœ¨è¢­å‡»ä¸­' + attack: + Joined: '&7你加入了对 &2%1 &7的袭击!' + Started: '&7袭击开始!' + cooldown: '&c对这个领地å‘起下一场袭击还太早了! 请等待 %1' + immune: '&c这个领地当å‰å…å—袭击! 请等待 %1' + playerImmune: '&c领地的所有者当å‰å…å—袭击! 请等待 %1' + isOffline: '&c领地的所有者ä¸åœ¨çº¿, ä¸èƒ½å‘动袭击!' + noSubzones: '&cä¸èƒ½å¯¹å­é¢†åœ°å‘动袭击!' + noSelf: '&cä¸èƒ½å¯¹è‡ªå·±çš„领地å‘动袭击!' + alreadyInAnother: '&cä¸èƒ½åŠ å…¥è¿™åœºè¢­å‡», ä½ å·²ç»åŠ å…¥å¦å¤–一场袭击了 (%1)' + defend: + Joined: '&7你加入了 &2%1 &7的防守方!' + Sent: '&7å·²å‘é€é˜²å®ˆè¯·æ±‚, 请等待åŒæ„' + Join: '&7加入 &6%1 &7的防守方' + Invitation: '&7æŽ¥å— &6%1 &7的防守请求' + JoinedDef: '&2%1&7 加入了防守方!' + IsOffline: '&c领地的所有者ä¸åœ¨çº¿, ä¸èƒ½åŠ å…¥é˜²å®ˆæ–¹!' + noSelf: '&cä½ å·²ç»åœ¨é˜²å®ˆè¿™ä¸ªé¢†åœ°äº†' + notRaided: '&c这个领地没有被袭击' + alreadyInAnother: '&cä¸èƒ½åŠ å…¥é¢†åœ°é˜²å®ˆ, ä½ å·²ç»åŠ å…¥å¦å¤–一场防守了 (%1)' + status: + title: '&7----------- &f%1(%2) &7-----------' + immune: '&eå…å—接下æ¥çš„ %1 场袭击' + starts: '&7袭击将在 %1 åŽå¼€å§‹' + attackers: '&7袭击方: &4%1' + defenders: '&7防守方: &4%1' + ends: '&7袭击将在 %1 åŽç»“æŸ' + canraid: '&2å¯ä»¥è¢«è¢­å‡»' + raidin: '&e下一场袭击å¯èƒ½åœ¨ %1 åŽå¼€å§‹' + stopped: '&e对 &6%1 &e的袭击已åœæ­¢' + info: + years: '&e%1 &6å¹´ ' + oneYear: '&e%1 &6å¹´ ' + day: '&e%1 &6天 ' + oneDay: '&e%1 &6天 ' + hour: '&e%1 &6å°æ—¶ ' + oneHour: '&e%1 &6å°æ—¶ ' + min: '&e%1 &6分钟 ' + sec: '&e%1 &6秒 ' + listSplitter: ', ' + click: '&7点击' + clickToConfirm: '&7点击确认' + server: + land: Server_Land Flag: - Set: '&6%2 &eçš„ &6%1 &eæƒé™å·²è®¾ç½®ä¸º &6%3 &e状æ€.' - SetFailed: '&c你没有æƒé™è®¾ç½® &6%1 &cæƒé™' - CheckTrue: '&e玩家 &6%2 &e已在领地 &6%3 &e中将 &6%1 &eæƒé™è®¾ç½®ä¸º &6%4&e.' - CheckFalse: '&e玩家 &6%2 &e没有在领地中设置 &6%1 &eæƒé™.' - Cleared: '&eæƒé™å·²æ¸…除.' - RemovedAll: '&e玩家 &6%1 &e在 &6%2 &e领地内的所有æƒé™å‡å·²åˆ é™¤' - RemovedGroup: '&e用户组 &6%1 &e在 &6%2 &e领地内的所有æƒé™å‡å·²åˆ é™¤' - Default: '&eæƒé™å·²æ¢å¤é»˜è®¤å€¼.' - Deny: '&c你没有 &6%1 &cæƒé™.' - SetDeny: '&c所有者ä¸èƒ½è®¾ç½® &6%1 &cæƒé™.' - ChangeDeny: '&c此时领地内有 &6%2 &cå玩家, 所以你无法更改 &6%1 &cæƒé™.' + ownColor: '&4' p1Color: '&2' p2Color: '&a' haveColor: '&2' havePrefix: '' lackColor: '&7' lackPrefix: '' + denyColor: '&4' + denyPrefix: '' others: '&e和其他 &2%1 &e个' - ChangedForOne: '&e为 &6%2 &e领地更改了 &6%1 &e个标志' - ChangedFor: '&e为 &6%2 &e个检查的领地更改了 &6%1 &e个标志' - reset: '&e为 &6%1 &e领地é‡ç½®äº†æ ‡å¿—' - resetAll: '&e为 &6%1 &e个领地é‡ç½®äº†æ ‡å¿—' + Set: '&e已将领地 &6%2 &eçš„ &6%1 &eæƒé™è®¾ç½®ä¸º &6%3 &e。' + SetFailed: '&c你没有æƒé™è®¾ç½® &6%1 &cæƒé™' + CheckTrue: '&e已将玩家 &6%2 &e在领地 &6%3 &eçš„ &6%1 &eæƒé™è®¾ç½®ä¸º &6%4&e。' + CheckFalse: '&e玩家 &6%2 &e没有被设置 &6%1 &eæƒé™ã€‚' + Cleared: '&e已清除æƒé™ã€‚' + RemovedAll: '&e已清除玩家 &6%1 &e在领地 &6%2 &e的所有æƒé™ã€‚' + RemovedGroup: '&e已清除用户组 &6%1 &e在领地 &6%2 &e的所有æƒé™ã€‚' + Default: '&e已将æƒé™é‡ç½®ä¸ºé»˜è®¤å€¼ã€‚' + Deny: '&c你没有 &6%1 &cæƒé™ã€‚' + SetDeny: '&c领地的所有者没有æƒé™è®¾ç½® &6%1 &cæƒé™ã€‚' + ChangeDeny: '&cä½ ä¸èƒ½æ›´æ”¹ &6%1 &cæƒé™, 因为领地内有 &6%2 &cå玩家。' + ChangedForOne: '&e已为领地 &6%2 &e更改了 &6%1 &e个æƒé™ã€‚' + ChangedFor: '&e已为选中的 &6%2 &e个领地更改了 &6%1 &e个æƒé™ã€‚' + reset: '&e为领地 &6%1 &eé‡ç½®æƒé™' + resetAll: '&e为 &6%1 &e个领地é‡ç½®æƒé™' Bank: - NoAccess: '&c你没有æƒé™ä½¿ç”¨é“¶è¡Œ.' + NoAccess: '&c你没有æƒé™ä½¿ç”¨é“¶è¡Œã€‚' Name: ' &e银行: &6%1' - NoMoney: '&c你的银行存款ä¸è¶³.' - Deposit: '&eä½ å‘领地银行存款 &6%1 &eå…ƒ.' - Withdraw: '&e你从领地银行中å–出 &6%1 &eå…ƒ.' - rentedWithdraw: '&cä¸èƒ½ä»Žç§Ÿå€Ÿçš„领地å–é’±.' + NoMoney: '&c银行存款ä¸è¶³ã€‚' + Deposit: '&eä½ å‘领地银行存款 &6%1 &e。' + Withdraw: '&e你从领地银行å–出 &6%1 &e。' + rentedWithdraw: '&cä¸èƒ½ä»Žç§Ÿç”¨çš„领地å–钱。' full: '&e领地银行已满!' Subzone: - Rename: '&e领地å­åŒºåŸŸ &6%1 &e已被é‡å‘½å为 &6%2' - Remove: '&e已删除领地å­åŒºåŸŸ &6%1&e.' - Create: '&eæˆåŠŸåˆ›å»ºé¢†åœ°å­åŒºåŸŸ &6%1&e.' - CreateFail: '&c无法创建领地å­åŒºåŸŸ &6%1&c.' - Exists: '&c领地å­åŒºåŸŸ &6%1 &c已存在.' - Collide: '&c领地å­åŒºåŸŸä¸Ž &6%1 &c冲çª.' - MaxAmount: '&c已达到该å­é¢†åœ°çš„最大数é‡.' - MaxDepth: '&c已达到领地å­åŒºåŸŸå…许的最大分区深度.' - SelectInside: '&e两个选å–点必须都在åŒä¸€ä¸ªé¢†åœ°å†….' - CantCreate: '&c你没有创建领地å­åŒºåŸŸçš„æƒé™.' - CantDelete: '&c你没有删除领地å­åŒºåŸŸçš„æƒé™.' - CantDeleteNotOwnerOfParent: '&cä½ ä¸æ˜¯è¯¥å­åŒºåŸŸæ‰€åœ¨é¢†åœ°çš„所有者, 无法删除å­åŒºåŸŸ.' - CantContract: '&c你没有æƒé™ç¼©å°é¢†åœ°å­åŒºåŸŸ.' - CantExpand: '&c你没有æƒé™æ‰©å¤§é¢†åœ°å­åŒºåŸŸ.' - DeleteConfirm: '&e如果你确定è¦åˆ é™¤å­åŒºåŸŸ &6%1&e, 输入 &6/res confirm &eæ¥ç¡®è®¤æ“作.' - OwnerChange: '&e已将å­åŒºåŸŸ &6%1 &e的所有者更改为 &6%2' + Rename: '&e已将å­é¢†åœ° &6%1 &eé‡å‘½å为 &6%2&e。' + Remove: '&e已将å­é¢†åœ° &6%1 &e删除。' + Create: '&e你创建了å­é¢†åœ° &6%1。' + CreateFail: '&c无法创建å­é¢†åœ° &6%1。' + Exists: '&cå­é¢†åœ° &6%1 &c已存在。' + Collide: '&c该å­é¢†åœ°ä¸Žå­é¢†åœ° &6%1 &c冲çªã€‚' + MaxAmount: '&c已达到此领地å…许的最大å­é¢†åœ°æ•°é‡ã€‚' + MaxDepth: '&c已达到此领地å…许的最大å­é¢†åœ°åµŒå¥—深度。' + SelectInside: '&e两个选å–点都必须在此领地内。' + CantCreate: '&c你没有æƒé™åˆ›å»ºå­é¢†åœ°ã€‚' + CantDelete: '&c你没有æƒé™åˆ é™¤å­é¢†åœ°ã€‚' + CantDeleteNotOwnerOfParent: '&cä½ ä¸æ˜¯çˆ¶é¢†åœ°çš„所有者, ä¸èƒ½åˆ é™¤æ­¤å­é¢†åœ°ã€‚' + CantContract: '&c你没有æƒé™ç¼©å°å­é¢†åœ°ã€‚' + CantExpand: '&c你没有æƒé™æ‰©å±•å­é¢†åœ°ã€‚' + DeleteConfirm: '&e输入 &6/res confirm &eæ¥ç¡®è®¤åˆ é™¤å­é¢†åœ° &6%1&e。' + OwnerChange: '&e已将å­é¢†åœ° &6%1 &e的所有者更改为 &6%2&e。' Residence: - DontOwn: '&e没什么å¯æ˜¾ç¤ºçš„' + DontOwn: '&e这里空空如也' Hidden: ' &e(&6éšè—&e)' - Bought: '&eæˆåŠŸè´­ä¹°é¢†åœ° &6%1' - Buy: '&6%1 &e购买了你的 &6%2 &e领地.' - BuyTooBig: '&c你无法购买尺寸这么大的领地.' - NotForSale: '&c该领地目å‰å¹¶æœªå‡ºå”®.' - ForSale: '&e领地 &6%1 &e现在正以 &6%2 &e的价格出售.' - StopSelling: '&c该领地已ä¸å†å‡ºå”®.' - TooMany: '&c你拥有的领地数é‡è¾¾åˆ°äº†ä¸Šé™.' - MaxRent: '&c你租用的领地数é‡è¾¾åˆ°äº†ä¸Šé™.' - AlreadyRent: '&c领地已ç»è¢«ç§Ÿç”¨.' - NotForRent: '&c领地没有在出租.' - NotForRentOrSell: '&c领地没有在出售或出租.' - NotRented: '&c领地尚未被租出.' - Unrent: '&e领地 &6%1 &eå·²å–消出租.' - RemoveRentable: '&e领地 &6%1 &eä¸å†å¯å‡ºç§Ÿ.' - ForRentSuccess: '&e领地 &6%1 &eå·²è¢«è®¾ç½®ä¸ºæ¯ &6%3 &e天以 &6%2 &e出租.' - RentSuccess: '&e你租用了 &6%1 &e领地 &6%2 &e天.' - EndingRent: '&e租用时间已ç»è¿‡æœŸ &6%1 &eon &6%2' - AlreadyRented: '&e领地 &6%1 &e已出租给 &6%2' - CantAutoPay: '&e领地ä¸å…许自动支付,已设置为 &6false' - AlreadyExists: '&c已存在å称为 &6%1 &c的领地.' - Create: '&e已创建领地 &6%1&e!' - Rename: '&e领地 &6%1 &e已被é‡å‘½å为 &6%2' - Remove: '&e领地 &6%1 &e已删除.' - CantRemove: '&c领地 &6%1 &c无法被删除,因为 &6%2 &cå­é¢†åœ°æ­£åœ¨è¢«å‡ºç§Ÿç»™çŽ©å®¶ &6%3' - MoveDeny: '&c你没有领地 &6%1 &c的移动æƒé™.' - TeleportNoFlag: '&c你没有该领地的传é€æƒé™.' - FlagDeny: '&c你没有领地 &6%2 &cçš„ &6%1 &cæƒé™.' - GiveLimits: '&c目标玩家超出é™åˆ¶, 无法给予领地.' - Give: '&e你将领地 &6%1 &eé€ç»™äº† &6%2' - Recieve: '&e你收到了 &6%2 &eé€ç»™ä½ çš„ &6%1 &e领地.' + Bought: '&e你购买了领地 &6%1&e。' + Buy: '&6%1 &e购买了你的领地 &6%2 &e。' + BuyTooBig: '&cä½ ä¸èƒ½è´­ä¹°å°ºå¯¸è¿™ä¹ˆå¤§çš„领地。' + NotForSale: '&c该领地当å‰ä¸åœ¨å‡ºå”®ã€‚' + ForSale: '&e领地 &6%1 &e正在以 &6%2 &e的价格出售。' + StopSelling: '&c该领地已ä¸å†åœ¨å”®ã€‚' + TooMany: '&c你拥有的领地数é‡è¾¾åˆ°äº†ä¸Šé™ã€‚' + MaxRent: '&c你租用的领地数é‡è¾¾åˆ°äº†ä¸Šé™ã€‚' + AlreadyRent: '&c该领地已ç»è¢«ç§Ÿç”¨ã€‚' + NotForRent: '&c该领地没有在出租。' + NotForRentOrSell: '&c该领地当å‰ä¸åœ¨å‡ºå”®æˆ–出租。' + NotRented: '&c该领地尚未被租用。' + Unrent: '&e领地 &6%1 &eå·²å–消租用。' + RemoveRentable: '&e领地 &6%1 &eä¸å†å‡ºç§Ÿã€‚' + ForRentSuccess: '&e领地 &6%1 &eæ­£åœ¨ä»¥æ¯ &6%3 &e天 &6%2 &e的价格出租。' + RentSuccess: '&e你租用了 &6%1 &e领地 &6%2 &e天。' + EndingRent: '&e出租给 &6%1 &e的领地 &6%2 &e已到期。' + AlreadyRented: '&e领地 &6%1 &e已出租给 &6%2&e。' + CantAutoPay: '&e领地ä¸èƒ½è‡ªåŠ¨ç»­ç§Ÿ, 已设置为 &6false&e。' + AlreadyExists: '&c已存在å称为 &6%1 &c的领地。' + Create: '&e你创建了领地 &6%1&e!' + Rename: '&e已将领地 &6%1 &eé‡å‘½å为 &6%2&e。' + Remove: '&e已将领地 &6%1 &e删除。' + CantRemove: '&c领地 &6%1 &c无法删除, 因为å­é¢†åœ° &6%2 &c正在出租给玩家 &6%3&c。' + MoveDeny: '&c你没有领地 &6%1 &c的移动æƒé™ã€‚' + TeleportNoFlag: '&c你没有该领地的传é€æƒé™ã€‚' + FlagDeny: '&c你没有领地 &6%2 &cçš„ &6%1 &cæƒé™ã€‚' + GiveLimits: '&c无法给予领地, 因为超出了目标玩家的é™åˆ¶ã€‚' + GiveConfirm: '&7点击确认将领地 &6%1 &7从 &6%2 &7给予 &6%3&7。' + Give: '&e你将领地 &6%1 &e给予了 &6%2&e。' + Recieve: '&e你收到了 &6%2 &e给予你的领地 &6%1 &e。' ResList: ' &a%1. &e%2 &e- &6%3 %4&6%5' + TrustedResList: ' &a%1. &f%2 &e- &6%3 %4&6%5' List: ' &a%1%2 &e- &6世界&e: &6%3' - TeleportNear: '&e已传é€åˆ°é™„近的领地.' - SetTeleportLocation: '&e设置传é€ä½ç½®.' - PermissionsApply: '&e领地æƒé™å·²è®¾ç½®.' - NotOwner: '&cä½ ä¸æ˜¯è¯¥é¢†åœ°çš„所有者.' - RemovePlayersResidences: '&e移除所有属于 &6%1 &e的领地.' - NotIn: '&c你此时ä¸åœ¨é¢†åœ°å†….' - PlayerNotIn: '&c玩家ä¸åœ¨é¢†åœ°åŒºåŸŸå†…..' - Kicked: '&e你被从领地中请出.' - In: '&eä½ ç›®å‰ç«™åœ¨é¢†åœ° &6%1 &e中.' - OwnerChange: '&e已将领地 &6%1 &e的所有者更改为 &6%2' - NonAdmin: '&c你没有领地的管ç†å‘˜æƒé™.' - Line: '&e领地: &6%1 ' + Near: '&e附近的领地: &7%1' + TeleportNear: '&e已传é€åˆ°é¢†åœ°é™„近。' + SetTeleportLocation: '&e已设置传é€ä½ç½®ã€‚' + PermissionsApply: '&e已设置领地æƒé™ã€‚' + NotOwner: '&cä½ ä¸æ˜¯è¯¥é¢†åœ°çš„所有者。' + RemovePlayersResidences: '&e已删除所有属于 &6%1 &e的领地。' + NotIn: '&cä½ ä¸åœ¨é¢†åœ°å†…。' + PlayerNotIn: '&c玩家ä¸åœ¨é¢†åœ°å†…。' + Kicked: '&e你被踢出领地。' + CantKick: '&e无法踢出这个玩家。' + In: '&e你正站在领地 &6%1 &e中。' + OwnerChange: '&e已将领地 &6%1 &e的所有者更改为 &6%2&e。' + NonAdmin: '&c你没有领地的管ç†å‘˜æƒé™ã€‚' + Line: '&e领地: &6%1' RentedBy: '&e租用者: &6%1' - MessageChange: '&e消æ¯æ–‡æœ¬å·²è®¾ç½®.' - CantDeleteResidence: '&c你没有删除此领地的æƒé™.' - CantExpandResidence: '&c你没有扩大此领地的æƒé™.' - CantContractResidence: '&c你没有缩å°æ­¤é¢†åœ°çš„æƒé™.' - NoResHere: '&c那个ä½ç½®æ²¡æœ‰é¢†åœ°å­˜åœ¨.' - OwnerNoPermission: '&c领地所有者没有执行这个æ“作的æƒé™.' - ParentNoPermission: '&c你没有æƒé™è®¾ç½®çˆ¶åŒºåŸŸ.' - ChatDisabled: '&e领地内èŠå¤©å·²ç¦ç”¨.' - DeleteConfirm: '&e如果你确定è¦åˆ é™¤é¢†åœ° &6%1&e, 输入 &6/res confirm &e以确认æ“作.' - ChangedMain: '&e已将主领地修改为 &6%1' - LwcRemoved: '&e已删除 &6%1 &eçš„LWCä¿æŠ¤ï¼Œè€—æ—¶ &6%2ms' - CanBeRented: '&6%1&e å¯ä»¥å‡ºç§Ÿç»™ &6%2 &eæ¯ &6%3 &e天. &6/res market rent' - CanBeBought: '&6%1&e å¯ä»¥å‡ºå”®ç»™ &6%2&e. &6/res market buy' + MessageChange: '&e已设置æ示消æ¯æ–‡æœ¬ã€‚' + CantDeleteResidence: '&c你没有æƒé™åˆ é™¤è¯¥é¢†åœ°ã€‚' + CantExpandResidence: '&c你没有æƒé™æ‰©å±•è¯¥é¢†åœ°ã€‚' + CantContractResidence: '&c你没有æƒé™ç¼©å°è¯¥é¢†åœ°ã€‚' + NoResHere: '&c那个ä½ç½®æ²¡æœ‰é¢†åœ°å­˜åœ¨ã€‚' + OwnerNoPermission: '&c领地的所有者没有æƒé™æ‰§è¡Œè¿™ä¸ªæ“作。' + ParentNoPermission: '&c你没有æƒé™è®¾ç½®çˆ¶åŒºåŸŸã€‚' + ChatDisabled: '&e领地内èŠå¤©å·²ç¦ç”¨ã€‚' + DeleteConfirm: '&e输入 &6/res confirm &eæ¥ç¡®è®¤åˆ é™¤é¢†åœ° &6%1&e。' + ChangedMain: '&e已将主领地改为 &6%1&e。' + LwcRemoved: '&e已删除 &6%1 &eçš„LWCä¿æŠ¤, 耗时 &6%2ms。' + CanBeRented: '&e领地 &6%1 &eæ­£åœ¨ä»¥æ¯ &6%3 &e天 &6%2 &e的价格出租。&6/res market rent' + CanBeBought: '&e领地 &6%1 &e正在以 &6%2 &e的价格出售。&6/res market buy' IsForRent: '&6(出租)' IsForSale: '&6(出售)' IsRented: '&6(已出租)' - GiveConfirm: '&7点击确认将领地 &6%1 &7从&6%2&7转移到&6%3' - TrustedResList: ' &a%1. &f%2 &e- &6%3 %4&6%5' - Near: '&e附近的领地: &7%1' - CantKick: '&eä¸èƒ½è¸¢å‡ºè¿™ä¸ªçŽ©å®¶' Rent: - Disabled: '&c领地出租已ç¦ç”¨.' - DisableRenew: '&e领地 &6%1 &eä¸ä¼šåœ¨ç§Ÿçº¦åˆ°æœŸæ—¶è‡ªåŠ¨ç»­æœŸ.' - EnableRenew: '&e领地 &6%1 &e将会在租约到期时自动续期.' - NotByYou: '&c领地没有出租给你.' - isForRent: '&2这个领地å¯ä»¥è¢«ç§Ÿç”¨' - MaxRentDays: '&c你无法一次租用超过 &6%1 &c天' - OneTime: '&cä½ ç›®å‰æ— æ³•ç»­è´¹ç§Ÿç”¨æ—¶é•¿' - Extended: '&e租用时长增加了 &6%1 &e天给领地 &6%2' + Disabled: '&c领地出租已ç¦ç”¨ã€‚' + DisableRenew: '&e领地 &6%1 &eå°†ä¸ä¼šåœ¨ç§Ÿçº¦åˆ°æœŸæ—¶è‡ªåŠ¨ç»­ç§Ÿã€‚' + EnableRenew: '&e领地 &6%1 &e将会在租约到期时自动续租。' + NotByYou: '&c领地没有出租给你。' + isForRent: '&2这个领地å¯ä»¥ç§Ÿç”¨ã€‚' + MaxRentDays: '&cä½ ä¸èƒ½ä¸€æ¬¡ç§Ÿç”¨è¶…过 &6%1 &c天。' + OneTime: '&c这个领地ä¸èƒ½ç»­ç§Ÿã€‚' + Extended: '&e领地 &6%2 &e续租了 &6%1 &e天。' Expire: '&e租约到期时间: &6%1' - AutoPayTurnedOn: '&e自动支付设置为&2å¼€å¯' - AutoPayTurnedOff: '&e自动支付设置为 &c关闭' - ModifyDeny: '&c无法修改租用的领地.' + AutoPayTurnedOn: '&e自动续租已 &2å¼€å¯' + AutoPayTurnedOff: '&e自动续租已 &c关闭' + ModifyDeny: '&cä¸èƒ½ä¿®æ”¹ç§Ÿç”¨çš„领地。' Days: '&e租用天数: &6%1' - Rented: ' &6(已出租)' + Rented: ' &6(已租用)' RentList: ' &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7' - EvictConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤ç§Ÿç”¨é¢†åœ° &6%1' - UnrentConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤å–消租用领地 &6%1' - ReleaseConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤ä»Žå¸‚场内删除领地 &6%1' + EvictConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤ç§Ÿç”¨é¢†åœ° &6%1&e。' + UnrentConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤é€€ç§Ÿé¢†åœ° &6%1&e。' + ReleaseConfirm: '&e输入 &6/res market confirm &eæ¥ç¡®è®¤ä»Žå¸‚场撤下领地 &6%1&e。' command: - addedAllow: '&e增加了一个新的å…许的命令给 &6%1 &e领地' - removedAllow: '&e删除了一个å…许的命令给 &6%1 &e领地' - addedBlock: '&e增加了一个新的ç¦ç”¨çš„命令给 &6%1 &e领地' - removedBlock: '&e删除了一个ç¦ç”¨çš„命令给 &6%1 &e领地' + addedAllow: '&e已增加一个å…许的命令给领地 &6%1 &e。' + removedAllow: '&e已删除一个å…许的命令于领地 &6%1 &e。' + addedBlock: '&e已增加一个ç¦ç”¨çš„命令给领地 &6%1 &e。' + removedBlock: '&e已删除一个ç¦ç”¨çš„命令于领地 &6%1 &e。' Blocked: '&eç¦ç”¨çš„命令: &6%1' Allowed: '&eå…许的命令: &6%1' Parsed: '%1' PlacehlderList: '&e%1. &6%2' PlacehlderResult: ' &eresult: &6%1' Rentable: - Land: '&e出租领地: &6' - AllowRenewing: '&eå¯ä»¥ç»­è´¹: &6%1' - StayInMarket: '&eå¯ä»¥å‡ºç§Ÿ: &6%1' - AllowAutoPay: '&eå¯ä»¥è‡ªåŠ¨æ”¯ä»˜: &6%1' - DisableRenew: '&6%1 &eä¸ä¼šåœ¨åˆ°æœŸæ—¶è‡ªåŠ¨æ›´æ–°ç§Ÿç”¨çŠ¶æ€.' - EnableRenew: '&6%1 &e将会在到期时自动更新租用状æ€.' + Land: '&eå¯ç§Ÿç”¨é¢†åœ°: &6' + AllowRenewing: '&eå¯ç»­ç§Ÿ: &6%1' + StayInMarket: '&eå¯ç§Ÿç”¨: &6%1' + AllowAutoPay: '&eå¯è‡ªåŠ¨ç»­ç§Ÿ: &6%1' + DisableRenew: '&6%1 &eå°†ä¸ä¼šåœ¨åˆ°æœŸæ—¶è‡ªåŠ¨æ›´æ–°ç§Ÿç”¨çŠ¶æ€ã€‚' + EnableRenew: '&6%1 &e将会在到期时自动更新租用状æ€ã€‚' Economy: - LandForSale: '&e出售领地:' - NotEnoughMoney: '&c你没有足够的金钱.' - MoneyCharged: '&e已从你的 &6%2 &e账户中支出 &6%1 &eå…ƒ.' - MoneyAdded: '&eä½ çš„ &6%2 &e账户增加了 &6%1 &eå…ƒ.' - MoneyCredit: '&eä½ çš„ &6%2 &e账户收入了 &6%1 &eå…ƒ.' - RentReleaseInvalid: '&e领地 &6%1 &e没有被租用或者出租.' - RentSellFail: '&c无法出售正在出租的领地.' - SubzoneRentSellFail: '&c无法出售领地,因为其中一个å­é¢†åœ°æ­£åœ¨å‡ºç§Ÿ' - ParentRentSellFail: '&c无法出租领地,因为其中的一部分正在出售/出租' - SubzoneSellFail: '&c无法出售一个å­é¢†åœ°' - SellRentFail: '&c无法出租正在出售的领地.' - ParentSellRentFail: '&c由于这个领地的一部分正在被出售,所以无法出租' + LandForSale: '&e在出售领地:' + NotEnoughMoney: '&c你没有足够的金钱。' + MoneyCharged: '&e已从你的 &6%2 &e账户中支出 &6%1 &e。' + MoneyAdded: '&eä½ çš„ &6%2 &e账户增加了 &6%1 &e。' + MoneyCredit: '&eä½ çš„ &6%2 &e账户收入了 &6%1 &e。' + RentReleaseInvalid: '&e领地 &6%1 &e没有被租用或在出租。' + RentSellFail: '&cä¸èƒ½å‡ºå”®æ­£åœ¨å‡ºç§Ÿçš„领地。' + SubzoneRentSellFail: '&c无法出售领地, 因为其å­é¢†åœ°æ­£åœ¨å‡ºç§Ÿã€‚' + ParentRentSellFail: '&c无法出售领地, 因为其父领地正在出租。' + SubzoneSellFail: '&c无法出售å­é¢†åœ°ã€‚' + SellRentFail: '&c无法出租领地, 因为该领地正在出售。' + ParentSellRentFail: '&c无法出租领地, 因为其父领地正在出售。' OwnerBuyFail: '&cä¸èƒ½è´­ä¹°è‡ªå·±çš„领地!' OwnerRentFail: '&cä¸èƒ½ç§Ÿç”¨è‡ªå·±çš„领地!' AlreadySellFail: '&e领地已在出售中!' - LeaseRenew: '&e租约有效期到 &6%1' - LeaseRenewMax: '&eå…许的最大租约续期' - LeaseNotExpire: '&e租约ä¸å­˜åœ¨æˆ–者未过期.' - LeaseRenewalCost: '&e续租 &6%1 &e的花费为 &6%2' - LeaseInfinite: '&e出租时间已设置为无é™.' + LeaseRenew: '&e租约有效期é™åˆ° &6%1&e。' + LeaseRenewMax: '&eå…许的最大续租时长' + LeaseNotExpire: '&e租约ä¸å­˜åœ¨æˆ–未到期。' + LeaseRenewalCost: '&6%1 &e的续租价格为 &6%2&e。' + LeaseInfinite: '&e已将出租时长设置为无é™ã€‚' MarketDisabled: '&c领地ç»æµŽå·²ç¦ç”¨!' SellAmount: '&e出售数é‡: &2%1' SellList: ' &6%1&e. &6%2 &e(&6%3&e) - &6%4' LeaseExpire: '&e租约到期时间: &2%1' LeaseList: '&6%1. &e%2 &2%3 &e%4' Expanding: - North: '&eå‘北方扩展 &6%1 &e个方å—' - West: '&eå‘西方扩展 &6%1 &e个方å—' - South: '&eå‘å—方扩展 &6%1 &e个方å—' - East: '&eå‘东方扩展 &6%1 &e个方å—' - Up: '&eå‘上方扩展 &6%1 &e个方å—' - Down: '&eå‘下方扩展 &6%1 &e个方å—' + North: '&eå‘北方 (-Z) 扩展 &6%1 &eæ ¼' + West: '&eå‘西方 (-X) 扩展 &6%1 &eæ ¼' + South: '&eå‘å—æ–¹ (+Z) 扩展 &6%1 &eæ ¼' + East: '&eå‘东方 (+X) 扩展 &6%1 &eæ ¼' + Up: '&eå‘上方扩展 &6%1 &eæ ¼' + Down: '&eå‘下方扩展 &6%1 &eæ ¼' Contracting: - North: '&eåœ¨åŒ—æ–¹ç¼©å° &6%1 &e个方å—' - West: '&eåœ¨è¥¿æ–¹ç¼©å° &6%1 &e个方å—' - South: '&e在å—æ–¹ç¼©å° &6%1 &e个方å—' - East: '&eåœ¨ä¸œæ–¹ç¼©å° &6%1 &e个方å—' - Up: '&eåœ¨ä¸Šæ–¹ç¼©å° &6%1 &e个方å—' - Down: '&eåœ¨ä¸‹æ–¹ç¼©å° &6%1 &e个方å—' + North: '&e从北方 (-Z) ç¼©å° &6%1 &eæ ¼' + West: '&e从西方 (-X) ç¼©å° &6%1 &eæ ¼' + South: '&e从å—æ–¹ (+Z) ç¼©å° &6%1 &eæ ¼' + East: '&e从东方 (+X) ç¼©å° &6%1 &eæ ¼' + Up: '&eä»Žä¸Šæ–¹ç¼©å° &6%1 &eæ ¼' + Down: '&eä»Žä¸‹æ–¹ç¼©å° &6%1 &eæ ¼' Shifting: - North: '&eå‘北方平移 &6%1 &e个方å—' - West: '&eå‘西方平移 &6%1 &e个方å—' - South: '&eå‘å—方平移 &6%1 &e个方å—' - East: '&eå‘东方平移 &6%1 &e个方å—' - Up: '&eå‘上方平移 &6%1 &e个方å—' - Down: '&eå‘下方平移 &6%1 &e个方å—' + North: '&eå‘北方平移 &6%1 &eæ ¼' + West: '&eå‘西方平移 &6%1 &eæ ¼' + South: '&eå‘å—方平移 &6%1 &eæ ¼' + East: '&eå‘东方平移 &6%1 &eæ ¼' + Up: '&eå‘上方平移 &6%1 &eæ ¼' + Down: '&eå‘下方平移 &6%1 &eæ ¼' Limits: PGroup: '&7- &eæƒé™ç»„:&3 %1' RGroup: '&7- &e领地组:&3 %1' Admin: '&7- &e领地管ç†å‘˜:&3 %1' CanCreate: '&7- &eå…许创建领地:&3 %1' MaxRes: '&7- &e最大领地数é‡:&3 %1' - MaxEW: '&7- &e东西方å‘最大:&3 %1' - MaxNS: '&7- &eå—北方å‘最大:&3 %1' + MaxEW: '&7- &e东西 (X) æ–¹å‘最大:&3 %1' + MaxNS: '&7- &eå—北 (Z) æ–¹å‘最大:&3 %1' MaxUD: '&7- &e上下方å‘最大:&3 %1' MinMax: '&7- &e最å°/最大高度:&3 %1 到 %2' MaxSubzones: '&7- &e最大å­é¢†åœ°æ•°é‡:&3 %1' MaxSubDepth: '&7- &e最大å­é¢†åœ°æ·±åº¦:&3 %1' - MaxRents: '&7- &e最多租用:&3 %1' - MaxRentDays: ' &e最大出租天数:&3 %1' - EnterLeave: '&7- &eå¯è®¾ç½®åŠ å…¥ç¦»å¼€ä¿¡æ¯:&3 %1' + MaxRents: '&7- &e最大租用数é‡:&3 %1' + MaxRentDays: ' &e最大租用天数:&3 %1' + EnterLeave: '&7- &eå¯è®¾ç½®åŠ å…¥/离开æ示消æ¯:&3 %1' NumberOwn: '&7- &e拥有的领地数é‡:&3 %1' - Cost: '&7- &e领地æ¯æ–¹å—花费:&3 %1' - Sell: '&7- &e领地出售æ¯æ–¹å—花费:&3 %1' + Cost: '&7- &e领地æ¯æ–¹å—ä»·æ ¼:&3 %1' + Sell: '&7- &e领地出售æ¯æ–¹å—ä»·æ ¼:&3 %1' Flag: '&7- &eå…许的领地æƒé™:&3 %1' MaxDays: '&7- &e最大租约时间:&3 %1' - LeaseTime: '&7- &e租约续期时间:&3 %1' - RenewCost: '&7- &e续租æ¯æ–¹å—花费:&3 %1' + LeaseTime: '&7- &e续租时间:&3 %1' + RenewCost: '&7- &e领地续租æ¯æ–¹å—ä»·æ ¼:&3 %1' Gui: Set: - Title: '&l%1 æƒé™' + Title: '&8%1 æƒé™' Pset: - Title: '&l%1 %2 æƒé™' + Title: '&8%2 在 %1 çš„æƒé™' Actions: - '&2左键å•å‡»å¯ç”¨' - '&cå³é”®å•å‡»ç¦ç”¨' - - '&eShift+左键å•å‡»åˆ é™¤' + - '&eShift+左键å•å‡»æ¸…除' InformationPage: TopLine: '&e---< &a %1 &e >---' Page: '&e-----< &6%1 &e>-----' @@ -345,18 +411,18 @@ Language: TopSingle: '&e___/ &a %1 &e \___' NextPage2: '&e-----< &6%1 &e>-----' Chat: - ChatChannelChange: '&e领地èŠå¤©é¢‘é“已更改为 &6%1!' - ChatChannelLeave: '&e离开领地èŠå¤©' - JoinFirst: '&4请先加入领地èŠå¤©é¢‘é“.' - InvalidChannel: '&4无效频é“.' - InvalidColor: '&4颜色代ç é”™è¯¯' - NotInChannel: '&4玩家ä¸åœ¨é¢‘é“中' - Kicked: '&6%1 &e被 &6%2 &e频é“踢出' - InvalidPrefixLength: '&4å‰ç¼€è¿‡é•¿. 最大长度: %1' - ChangedColor: '&e领地频é“颜色更改为 %1' - ChangedPrefix: '&e领地频é“å‰ç¼€æ›´æ”¹ä¸º %1' + ChatChannelChange: '&e领地èŠå¤©é¢‘é“已更改为 &6%1&e!' + ChatChannelLeave: '&e离开领地èŠå¤©ã€‚' ChatMessage: '%1 %2%3: %4%5' ChatListeningMessage: '&2[ç›‘å¬ %6]%1 %2%3: %4%5' + JoinFirst: '&4请先加入领地èŠå¤©é¢‘é“。' + InvalidChannel: '&4无效的频é“。' + InvalidColor: '&4颜色代ç é”™è¯¯ã€‚' + NotInChannel: '&4玩家ä¸åœ¨é¢‘é“中。' + Kicked: '&6%1 &e被踢出 &6%2 &e频é“。' + InvalidPrefixLength: '&4å‰ç¼€è¿‡é•¿ã€‚最大长度: %1。' + ChangedColor: '&e领地èŠå¤©é¢‘é“颜色已更改为 %1。' + ChangedPrefix: '&e领地èŠå¤©é¢‘é“å‰ç¼€å·²æ›´æ”¹ä¸º %1。' Shop: ListTopLine: '&6%1 &e商店列表 - 第 &6%2 &e页, å…± &6%3 %4' List: ' &e%1. &6%2 &e(&6%3&e) %4' @@ -368,1409 +434,1357 @@ Language: Desc: |- &6æè¿°: %1 - DescChange: '&6æ述已更改为: %1' - NewBoard: '&6æˆåŠŸæ·»åŠ å•†åº—宣传æ¿' - BoardExist: '&c商店宣传æ¿å·²ç»å­˜åœ¨' - DeleteBoard: '&6å³å‡»è¦åˆ é™¤çš„宣传æ¿' - DeletedBoard: '&6宣传æ¿å·²ç§»é™¤' - IncorrectBoard: '&c宣传æ¿ä¸æ­£ç¡®, 请é‡æ–°ç‚¹å‡»æ­£ç¡®çš„宣传æ¿' - InvalidSelection: '&c使用选å–工具, 先点击左上角的告示牌, å†ç‚¹å‡»å³ä¸‹è§’的告示牌' - ToBigSelection: '&c你选择的范围太大了,最大å…许16æ ¼' - ToDeapSelection: '&c你选择的太深了,最大å…许16X1X16' - VoteChanged: '&6领地 &e%3 &6的评分由 &e%1 &6更改为 &e%2&6.' - Voted: '&6ä½ ç»™ &e%2 &6评了 &e%1 &6分.' - Liked: '&6你赞了 &e%1 &6领地.' - AlreadyLiked: '&6ä½ å·²ç»èµžè¿‡ &e%1 &6领地了.' - NoVotes: '&c该领地还没有评分.' - CantVote: '&c该领地ä¸æ˜¯å•†åº—.' - VotedRange: '&6åªèƒ½ç»™å‡º &e%1 &6分到 &e%2 &6分.' + DescChange: '&6已更改æ述为: %1。' + ChantChange: '&4shop æƒé™è®¾ç½®ä¸º true 时无法更改。' + NewBoard: '&6已添加商店宣传æ¿ã€‚' + BoardExist: '&c商店宣传æ¿å·²ç»å­˜åœ¨ã€‚' + DeleteBoard: '&6å³é”®å•å‡»è¦ç§»é™¤çš„宣传æ¿ã€‚' + DeletedBoard: '&6已移除商店宣传æ¿ã€‚' + IncorrectBoard: '&c宣传æ¿ä¸æ­£ç¡®, 请é‡æ–°è¾“入命令并点击正确的宣传æ¿ã€‚' + InvalidSelection: '&c使用选区工具, 先左键å•å‡»å·¦ä¸Šè§’的告示牌, å†å³é”®å•å‡»å³ä¸‹è§’的告示牌。' + ToBigSelection: '&c你选择的范围太大了, 最大å…许 16 格。' + ToDeapSelection: '&c你选择的范围太深了, 最大å…许 16x1x16。' + VoteChanged: '&6领地 &e%3 &6的评分由 &e%1 &6更改为 &e%2&6。' + Voted: '&6你给领地 &e%2 &6评了 &e%1 &6分。' + Liked: '&6你点赞了领地 &e%1 &6。' + AlreadyLiked: '&6ä½ å·²ç»ç‚¹èµžäº†é¢†åœ° &e%1 &6。' + NoVotes: '&c该领地还没有评分。' + CantVote: '&c该领地ä¸æ˜¯å•†åº—。' + VotedRange: '&6åªèƒ½ç»™å‡º &e%1 &6分到 &e%2 &6分。' SignLines: '1': '&e--== &8%1 &e==--' '2': '&9%1' '3': '&4%1' '4': '&8%1&e (&8%2&e)' Likes4: '&9赞: &8%2' - ChantChange: '&4Can''t change while shop flag is set to true' RandomTeleport: - TpLimit: '&e请等待 &6%1 &e秒åŽå†ä¼ é€' - TeleportSuccess: '&eä¼ é€åˆ° X:&6%1&e, Y:&6%2&e, Z:&6%3 &eä½ç½®' - IncorrectLocation: '&6无法找到正确的传é€ä½ç½®, 请等待 &e%1 &6秒åŽé‡è¯•.' - Disabled: '&c此世界的éšæœºä¼ é€å·²å…³é—­' - TeleportStarted: '&eä¼ é€å³å°†å¼€å§‹, 在 &6%4 &e秒内ä¸è¦ç§»åŠ¨.' + TpLimit: '&eä¼ é€å¤ªé¢‘ç¹, 请等待 &6%1 &e秒åŽé‡è¯•ã€‚' + TeleportSuccess: '&eä¼ é€åˆ° X:&6%1&e, Y:&6%2&e, Z:&6%3 &eä½ç½®ã€‚' + IncorrectLocation: '&6无法找到正确的传é€ä½ç½®, 请等待 &e%1 &6秒åŽé‡è¯•ã€‚' + Disabled: '&c该世界的éšæœºä¼ é€å·²ç¦ç”¨ã€‚' + TeleportStarted: '&eå³å°†å¼€å§‹ä¼ é€, 在 &6%4 &e秒内ä¸è¦ç§»åŠ¨ã€‚' WorldList: '&eå¯ç”¨ä¸–ç•Œ: &6%1' + Permissions: + variableColor: '&f' + permissionColor: '&6' + cmdPermissionColor: '&2' General: - DisabledWorld: '&c该世界已ç¦ç”¨é¢†åœ°.' - UseNumbers: '&c请输入数字.' - # Replace all text with '' to disable this message - CantPlaceLava: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置岩浆.' - # Replace all text with '' to disable this message - CantPlaceWater: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置水.' - NoPermission: '&c你没有执行此æ“作的æƒé™.' - NoCmdPermission: '&c你没有æƒé™è¿™ä¹ˆåš' - DefaultUsage: '&e输入 &6/%1 ? &e查看帮助信æ¯' - MaterialGet: '&eID &6%1 &eçš„ææ–™å称为 &6%2' + DisabledWorld: '&c该世界已ç¦ç”¨é¢†åœ°ã€‚' + UseNumbers: '&c请使用数字。' + CantPlaceLava: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置岩浆。' + CantPlaceWater: '&cä½ ä¸èƒ½åœ¨é¢†åœ°å¤–高于 &6%1 &c的地方放置水。' + CantPlaceChest: '&cä½ ä¸èƒ½åœ¨è¿™é‡Œæ”¾ç½®ç®±å­ã€‚' + NoPermission: '&c你没有æƒé™æ‰§è¡Œæ­¤æ“作。' + info: + NoPlayerPermission: '&c[playerName] 没有 [permission] æƒé™ã€‚' + NoCmdPermission: '&c你没有æƒé™æ‰§è¡Œæ­¤å‘½ä»¤ã€‚' + DefaultUsage: '&e输入 &6/%1 ? &e查看帮助信æ¯ã€‚' + MaterialGet: '&eID &6%1 &eçš„ææ–™å称为 &6%2&e。' MarketList: '&e---- &6市场列表 &e----' Separator: '&e------------------------------------------------' - AdminOnly: '&cåªæœ‰ç®¡ç†å‘˜æ‰èƒ½æ‰§è¡Œè¿™ä¸ªå‘½ä»¤.' + AdminOnly: '&cåªæœ‰ç®¡ç†å‘˜æ‰èƒ½æ‰§è¡Œæ­¤å‘½ä»¤ã€‚' InfoTool: '&e- ä¿¡æ¯å·¥å…·: &6%1' - ListMaterialAdd: '&6%1 &e已被添加到 &6%2 &e领地.' - ListMaterialRemove: '&6%1 &e已从 &6%2 &e领地移除.' - ItemBlacklisted: '&c此处ç¦æ­¢ä½¿ç”¨è¯¥ç‰©å“.' - WorldPVPDisabled: '&c世界 PVP å·²ç¦ç”¨.' - NoPVPZone: '&céž PVP 区域.' - InvalidHelp: '&c无效帮助页ç .' - TeleportDeny: '&c你没有传é€çš„æƒé™.' + ListMaterialAdd: '&e已将 &6%1 &e添加到领地 &6%2 &e。' + ListMaterialRemove: '&e已将 &6%1 &e从领地 &6%2 &e移除。' + ItemBlacklisted: '&cä½ ä¸èƒ½åœ¨è¿™é‡Œä½¿ç”¨è¯¥ç‰©å“。' + WorldPVPDisabled: '&c世界 PVP å·²ç¦ç”¨ã€‚' + NoPVPZone: '&céž PVP 区域。' + NoFriendlyFire: '&c无队å‹ä¼¤å®³ã€‚' + InvalidHelp: '&c无效的帮助页ç ã€‚' + TeleportDeny: '&c你没有æƒé™ä¼ é€ã€‚' TeleportSuccess: '&e已传é€!' - TeleportConfirm: '&cä¼ é€ä¸å®‰å…¨, ä½ å°†æ‘”è½ &6%1 &c个方å—. 如果ä»è¦ä¼ é€, 输入 &6/res tpconfirm &c确认.' - TeleportStarted: '&eå¼€å§‹å‘ &6%1 &eä¼ é€, 在 &6%2 &e秒内ä¸è¦ç§»åŠ¨.' - TeleportTitle: '&eä¼ é€ä¸­..' + TeleportConfirmLava: '&cä¼ é€ä¸å®‰å…¨, 你将掉入&6岩浆&c。如果ä»è¦ä¼ é€, 输入&6/res tpconfirm &c确认。' + TeleportConfirmVoid: '&cä¼ é€ä¸å®‰å…¨, 你将掉入&6虚空&c。如果ä»è¦ä¼ é€, 输入&6/res tpconfirm &c确认。' + TeleportConfirm: '&cä¼ é€ä¸å®‰å…¨, ä½ å°†æ‘”è½ &6%1 &c格。如果ä»è¦ä¼ é€, 输入 &6/res tpconfirm &c确认。' + TeleportStarted: '&eå³å°†å¼€å§‹å‘ &6%1 &eä¼ é€, 在 &6%2 &e秒内ä¸è¦ç§»åŠ¨ã€‚' + TeleportTitle: '&eä¼ é€ä¸­!' TeleportTitleTime: '&6%1' - TeleportCanceled: '&eä¼ é€è¢«å–消!' - NoTeleportConfirm: '&e没有需è¦ç¡®è®¤çš„ä¼ é€è¯·æ±‚!' - HelpPageHeader: '&e领地帮助 - &6%1 &e- é¡µé¢ <&6%2 &e/ &6%3&e>' - ListExists: '&c列表已存在.' - ListRemoved: '&e已删除列表.' + TeleportCanceled: '&eä¼ é€å·²å–消!' + NoTeleportConfirm: '&e没有待确认的传é€è¯·æ±‚!' + HelpPageHeader2: '&eå¸®åŠ©é¡µé¢ - &6%1 &e- <第 &6%2 &e页, å…± &6%3 &e页>' + HelpPageHeader: '&eå¸®åŠ©é¡µé¢ - &6%1 &e- <第 &6%2 &e页, å…± &6%3 &e页>' + ListExists: '&c列表已存在。' + ListRemoved: '&e已删除列表。' ListCreate: '&e已创建列表 &6%1' - PhysicalAreas: '&e物ç†åŒºåŸŸ' + PhysicalAreas: '&e区域' CurrentArea: '&e当å‰åŒºåŸŸ: &6%1' TotalResSize: '&e总大å°: &6%1m³ (%2m²)' + ResSize: + eastWest: '&e东西 (X) æ–¹å‘: &6%1' + northSouth: '&eå—北 (Z) æ–¹å‘: &6%1' + upDown: '&e上下方å‘: &6%1' TotalWorth: '&e总价值: &6%1 &e(&6%2&e)' TotalSubzones: '&eå­é¢†åœ°æ•°é‡: &6%1 &e(&6%2&e)' - NotOnline: '&e目标玩家ä¸åœ¨çº¿.' + NotOnline: '&e目标玩家ä¸åœ¨çº¿ã€‚' + prevPage: '&2----<< &6上一页 ' + prevPageGui: '&6上一页 ' + prevPageClean: '&6上一页 ' + prevPageOff: '&2----<< &7上一页 ' + prevPageHover: '&7<<<' + firstPageHover: '&7|<' + nextPage: '&6 下一页 &2>>----' + nextPageGui: '&6下一页' + nextPageClean: '&6 下一页' + nextPageOff: '&7 下一页 &2>>----' + nextPageHover: '&7>>>' + lastPageHover: '&7>|' + pageCount: '&2%1&7/&2%2' + pageCountHover: '&e%1 æ¡ç›®' + GenericPages: '&e页数 &6%1 &e/ &6%2 &e(&6%3&e)' NextInfoPage: '&2| &e下一页 &2>>>' PrevInfoPage: '&2<<< &e上一页 &2|' - GenericPages: '&e页数 &6%1 &e/ &6%2 &e(&6%3&e)' - WorldEditNotFound: '&c未检测到 WorldEdit.' + WorldEditNotFound: '&c未检测到 WorldEdit。' CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' - AdminToggleTurnOn: '&e自动管ç†æ¨¡å¼&6å¼€å¯' - AdminToggleTurnOff: '&e自动管ç†æ¨¡å¼&6关闭' - NoSpawn: '&e你没有在出生点的 &6移动 &eæƒé™, 正在é‡æ–°å®šä½.' - CompassTargetReset: '&e你的指å—针已被还原' - CompassTargetSet: '&e你的指å—针目å‰æŒ‡å‘ &6%1' - Ignorelist: '&2忽略åå•:&6' - Blacklist: '&c黑åå•:&6' - LandCost: '&e领地花费: &6%1' + CoordsLiner: '&7 (&3%1&7;%2&7)' + AllowedTeleportIcon: '&2ä¼ é€ ' + BlockedTeleportIcon: '&7ä¼ é€ ' + AllowedMovementIcon: '&2移动 ' + BlockedMovementIcon: '&7移动 ' + AdminToggleTurnOn: '&6已开å¯&e自动管ç†æ¨¡å¼ã€‚' + AdminToggleTurnOff: '&6已关闭&e自动管ç†æ¨¡å¼ã€‚' + NoSpawn: '&e你没有é‡ç”Ÿç‚¹çš„ &6移动 &eæƒé™, 正在é‡æ–°å®šä½ã€‚' + CompassTargetReset: '&eå·²é‡ç½®ä½ çš„指å—针。' + CompassTargetSet: '&e已将你的指å—é’ˆæŒ‡å‘ &6%1&e。' + Ignorelist: '&2忽略åå•: &6' + Blacklist: '&c黑åå•: &6' + LandCost: '&e领地价格: &6%1' 'True': '&2是' 'False': '&cå¦' Removed: '&6未设置' FlagState: '&eæƒé™çŠ¶æ€: %1' Land: '&e领地: &6%1' - Cost: '&e花费: æ¯ &6%2 &e天 &6%1' + Cost: '&eä»·æ ¼: æ¯ &6%2 &e天 &6%1' Status: '&e状æ€: %1' Available: '&2å¯ç”¨' Size: ' &e大å°: &6%1' - ResidenceFlags: '&e领地公共æƒé™: &6%1' + ResidenceFlags: '&e领地æƒé™: &6%1' PlayersFlags: '&e玩家æƒé™: &6%1' GroupFlags: '&e组æƒé™: &6%1' - OthersFlags: '&e其他人æƒé™: &6%1' - Moved: '&e已移动.' + OthersFlags: '&e其他玩家æƒé™: &6%1' + Moved: '&e已移动。' Name: '&eå称: &6%1' Lists: '&e列表: &6' Residences: '&e领地&6' - CreatedOn: '&e建造于: &6%1' + CreatedOn: '&e创建于: &6%1' Owner: '&e所有者: &6%1' World: '&e世界: &6%1' - Subzones: '&eå­åŒºåŸŸ' - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. - NewPlayerInfo: '&e如果è¦åˆ›å»ºé¢†åœ°ä»¥ä¿æŠ¤æˆ¿å±‹, 请用木锄选å–ä¿æŠ¤åŒºçš„两个对角, 然åŽæ‰§è¡Œ &2/res create 领地å称 &e命令.' - CantPlaceChest: '&cä½ ä¸èƒ½åœ¨è¿™æ”¾ç½®ç®±å­' - info: - NoPlayerPermission: '&c[playerName] 没有 [permission] æƒé™' - NoFriendlyFire: '&c没有å‹ä¼¤' - TeleportConfirmLava: '&c这个传é€ç‚¹ä¸å®‰å…¨ï¼Œä½ å°†ä¼šæŽ‰åˆ°&6岩浆&c里. - 输入&6/res tpconfirm &cæ¥ç¡®è®¤ä¼ é€' - TeleportConfirmVoid: '&c这个传é€ç‚¹ä¸å®‰å…¨ï¼Œä½ å°†ä¼šæŽ‰åˆ°&6虚空&c里. - 输入&6/res tpconfirm &cæ¥ç¡®è®¤ä¼ é€' - HelpPageHeader2: '&eå¸®åŠ©é¡µé¢ - &6页é¢%1 &e- <&6%3é¢ä¸­çš„第&6%2é¢&e>' - ResSize: - eastWest: '&e东/西: &6%1' - northSouth: '&e北/å—: &6%1' - upDown: '&e上/下: &6%1' - CoordsLiner: '&7 (&3%1&7;%2&7)' - AllowedTeleportIcon: '&2ä¼ é€' - BlockedTeleportIcon: '&7ä¼ é€' - AllowedMovementIcon: '&2移动' - BlockedMovementIcon: '&7移动' - Raid: - NotEnabled: '&c袭击特性未开å¯!' - NotIn: '&cä½ ä¸åœ¨ä¸€åœºè¢­å‡»ä¸­!' - CantLeave: '&cä½ ä¸èƒ½ç¦»å¼€ (%1) 你自己领地的袭击!' - CantKick: '&cä¸èƒ½è¸¢å‡º (%1) 领地主人!' - Kicked: '&eå°† &7%1 &e从 &7%2 &e领地的袭击中踢出!' - StartsIn: '&7袭击将在以下时间åŽå¼€å§‹: [autoTimeLeft] &2%1D &4%2A' - EndsIn: '&c袭击将在以下时间åŽç»“æŸ: [autoTimeLeft] &2%1D &4%2A' - Ended: '&7针对 &4%1 &7å‘动的袭击已结æŸ!' - cantDo: '&c袭击中ä¸èƒ½å¹²è¿™ä¸ªäº‹!' - left: '&7你离开了 &4%1 &7的袭击' - noFlagChange: '&c袭击中ä¸èƒ½æ›´æ”¹æ ‡å¿—' - noRemoval: '&c袭击中ä¸èƒ½ç§»é™¤é¢†åœ°' - immune: '&e对接下æ¥çš„ %1 场袭击å…ç–«' - notImmune: '&eä¸å†å…疫袭击' - notInRaid: '&e玩家ä¸åœ¨è¢­å‡»ä¸­' - attack: - Joined: '&7加入了 &2%1 &7的袭击!' - Started: '&7袭击开始!' - cooldown: '&c对这个领地å‘起下一场袭击还太早了! 请等待 %1' - immune: '&c此领地ä¸èƒ½è¢«è¢­å‡»! 请等待 %1' - playerImmune: '&c领地的主人å…疫袭击! 请等待 %1' - isOffline: '&c领地主人ä¸åœ¨çš„时候ä¸èƒ½å‘动袭击!' - noSubzones: '&cä¸èƒ½å¯¹å­é¢†åœ°å‘动袭击!' - noSelf: '&c大水冲了龙王庙å‘您嘞!' - alreadyInAnother: '&cä¸èƒ½åŠ å…¥è¿™åœºè¢­å‡»ï¼Œä½ å·²ç»å¤„于一场袭击中了 (%1)' - defend: - Joined: '&7加入了 &2%1 &7çš„ä¿å«æ–¹!' - Sent: '&7å·²å‘é€ä¿å«è¯·æ±‚, 请等待åŒæ„' - Join: '&7加入了 &6%1 &7çš„ä¿å«æ–¹' - Invitation: '&7接å—了 &6%1 &7çš„ä¿å«è¯·æ±‚' - JoinedDef: '&2%1&7 加入了ä¿å«æ–¹!' - IsOffline: '&c领地主人ä¸åœ¨çº¿æ—¶ä¸èƒ½åŠ å…¥!' - noSelf: '&cä½ å·²ç»åŠ å…¥è¿™ä¸ªé¢†åœ°çš„ä¿å«æ–¹äº†' - notRaided: '&c这个领地没有被袭击' - alreadyInAnother: '&cä¸èƒ½åŠ å…¥è¢­å‡»ä¿å«ï¼Œä½ å·²ç»åœ¨ä¿å«ä¸€ä¸ªé¢†åœ°äº† (%1)' - status: - title: '&7----------- &f%1(%2) &7-----------' - immune: '&e对接下æ¥çš„%1场袭击å…ç–«' - starts: '&7袭击将在%1åŽå¼€å§‹' - attackers: '&7攻击者: &4%1' - defenders: '&7ä¿å«è€…: &4%1' - ends: '&7袭击将在%1åŽç»“æŸ' - canraid: '&2å¯ä»¥è¢«è¢­å‡»' - raidin: '&e下一场袭击å¯èƒ½åœ¨%1åŽå¼€å§‹' - stopped: '&e对 &6%1 &e的袭击已åœæ­¢' - info: - years: '&e%1 &6å¹´ ' - oneYear: '&e%1 &6å¹´ ' - day: '&e%1 &6天 ' - oneDay: '&e%1 &6天 ' - hour: '&e%1 &6å°æ—¶ ' - oneHour: '&e%1 &6å°æ—¶ ' - min: '&e%1 &6分钟 ' - sec: '&e%1 &6秒 ' - listSplitter: ', ' - click: '&7点击' - clickToConfirm: '&7点击确定' - server: - land: Server_Land - Permissions: - variableColor: '&f' - permissionColor: '&6' - cmdPermissionColor: '&2' + Subzones: '&eå­é¢†åœ°' + NewPlayerInfo: '&e如果你è¦åˆ›å»ºé¢†åœ°æ¥ä¿æŠ¤ä½ çš„建筑, 请使用选区工具 (&2/res tool &e以查看) 点选你è¦ä¿æŠ¤çš„范围的两个对角, 然åŽæ‰§è¡Œå‘½ä»¤: &2/res create 领地å称 &e。' CommandHelp: Description: 领地的命令帮助 SubCommands: res: Description: 领地的主命令 Info: - - '&2输入 &6/res [命令] ? <页ç > &2查看更多信æ¯.' + - '&2输入 &6/res [命令] ? <页ç > &2查看更多信æ¯' SubCommands: auto: - Description: 自动在你站ç€çš„ä½ç½®ä¸ºä¸­å¿ƒï¼Œåˆ›å»ºä½ èƒ½åˆ›å»ºæœ€å¤§çš„领地 + Description: '以你的ä½ç½®ä¸ºä¸­å¿ƒ, 创建你能创建最大的领地' Info: - - '&e用法: &6/res auto (领地åå­—) (范围)' + - '&e用法: &6/res auto [领地å称] [范围]' select: - Description: 选å–命令 + Description: '选区命令' Info: - - 该命令选择领地的范围 - - /res select [x] [y] [z] - 选择以你为中心一定范围的方å—. + - '&e用法: &6/res select [x] [y] [z]' + - '以你的ä½ç½®ä¸ºä¸­å¿ƒ, 创建大å°ä¸º [x] [y] [z] 的领地' SubCommands: coords: - Description: 显示已选择区域的åæ ‡ + Description: 显示选区的åæ ‡ Info: - '&e用法: &6/res select coords' size: - Description: æ˜¾ç¤ºå·²é€‰æ‹©åŒºåŸŸçš„å¤§å° + Description: 显示选区的尺寸 Info: - '&e用法: &6/res select size' auto: - Description: 打开自动选择工具 + Description: å¼€å¯è‡ªåŠ¨é€‰åŒºå·¥å…· Info: - - '&e用法: &6/res select auto [玩家]' + - '&e用法: &6/res select auto [玩家å称]' cost: - Description: 显示已选择区域的价格 + Description: 显示选区的价格 Info: - '&e用法: &6/res select cost' vert: Description: 纵å‘扩展选区 Info: - '&e用法: &6/res select vert' - - 将选区扩展到地图顶端和底端 + - 将选区扩展到最大高度和深度 sky: - Description: 扩展选区到天空 + Description: 将选区扩展到最大高度 Info: - '&e用法: &6/res select sky' - - 将选区扩展到地图顶端 bedrock: - Description: 扩展选区到基岩 + Description: 将选区扩展到最大深度 Info: - '&e用法: &6/res select bedrock' - - 将选区扩展到地图底端 expand: Description: å‘一个方å‘扩展选区 Info: - - '&e用法: &6/res select expand <扩展å•ä½>' - - å‘é¢å¯¹çš„æ–¹å‘扩展 <扩展å•ä½> ä¸ªæ–¹å— + - '&e用法: &6/res select expand <长度>' + - '将选区å‘ä½ é¢å¯¹çš„æ–¹å‘扩展 <长度> æ ¼' shift: Description: å‘一个方å‘平移选区 Info: - - '&e用法: &6/res select shift <平移å•ä½>' - - 将选区å‘é¢å¯¹çš„æ–¹å‘平移 <平移å•ä½> ä¸ªæ–¹å— + - '&e用法: &6/res select shift <è·ç¦»>' + - '将选区å‘ä½ é¢å¯¹çš„æ–¹å‘平移 <è·ç¦»> æ ¼' chunk: - Description: 选择你目å‰æ‰€åœ¨çš„åŒºå— + Description: é€‰æ‹©ä½ æ‰€åœ¨çš„åŒºå— Info: - '&e用法: &6/res select chunk' - - 选择你目å‰æ‰€åœ¨çš„åŒºå— residence: Description: 选择领地中一个存在的区域 Info: - - '&e用法: &6/res select residence <领地>' - - 选择 <领地> 中一个存在的区域 + - '&e用法: &6/res select residence <领地å称>' + - '选择 <领地å称> 中一个存在的区域' worldedit: - Description: 采用 WorldEdit 的选区 + Description: '以 WorldEdit 当å‰çš„选区作为领地选区' Info: - '&e用法: &6/res select worldedit' - - å°† WorldEdit ç›®å‰çš„选区作为领地选区 padd: Description: å‘领地添加玩家 Info: - - '&e用法: &6/res padd <领地å> [玩家]' - - 为玩家添加基本æƒé™ + - '&e用法: &6/res padd <领地å称> [玩家å称]' + - '为 [玩家å称] 添加 <领地å称> 的基本æƒé™' signconvert: - Description: å°† ResidenceSign 的告示牌转æ¢ä¸ºæ–°æ ¼å¼ + Description: 'è½¬æ¢ ResidenceSign 的告示牌' Info: - '&e用法: &6/res signconvert' - - å°è¯•è½¬æ¢å·²æœ‰çš„ ResidenceSign 告示牌 + - 'å°è¯•è½¬æ¢å·²æœ‰çš„ ResidenceSign æ’件的告示牌' listallhidden: - Description: 显示所有éšè—领地 + Description: 列出æœåŠ¡å™¨ä¸­çš„所有éšè—领地 Info: - '&e用法: &6/res listhidden <页ç >' - - 显示所有玩家的éšè—领地 bank: Description: 管ç†é¢†åœ°é“¶è¡Œ Info: - - '&e用法: &6/res bank [deposit/withdraw] <领地> [æ•°é¢]' - - 你必须站在领地中或者指定领地åå­— - - 你必须拥有 +bank æƒé™ + - '&e用法: &6/res bank [deposit(存入)/withdraw(å–出)] <领地å称> [æ•°é¢]' + - 你必须站在领地中或者指定领地å称 + - '你必须拥有领地 bank æƒé™' create: Description: 创建领地 Info: - - '&e用法: &6/res create <领地å>' + - '&e用法: &6/res create [领地å称]' listall: - Description: 显示所有领地 + Description: 列出所有的领地 Info: - - '&e用法: &6/res listall <页ç >' - - 显示所有玩家的领地 + - '&e用法: &6/res listall <页ç > <世界å称> <-a/-f>' info: - Description: æ˜¾ç¤ºä¸€ä¸ªé¢†åœ°çš„ä¿¡æ¯ + Description: æ˜¾ç¤ºé¢†åœ°çš„ä¿¡æ¯ Info: - - '&e用法: &6/res info <领地>' - - 留空 <领地> 表示显示你目å‰æ‰€åœ¨çš„é¢†åœ°ä¿¡æ¯ + - '&e用法: &6/res info <领地å称>' + - '留空 <领地å称> 则显示你所在的领地的信æ¯' area: - Description: 管ç†é¢†åœ°ç‰©ç†åŒºåŸŸ + Description: 管ç†é¢†åœ°çš„区域 + Info: + - '' SubCommands: list: - Description: 列出领地的物ç†åŒºåŸŸ + Description: 列出领地的区域 Info: - - '&e用法: &6/res area list [领地] <页ç >' + - '&e用法: &6/res area list [领地å称] <页ç >' listall: - Description: 列出所有区域的åæ ‡å’Œè¯¦ç»†ä¿¡æ¯ + Description: 列出领地区域的åæ ‡å’Œè¯¦ç»†ä¿¡æ¯ Info: - - '&e用法: &6/res area listall [领地] <页ç >' + - '&e用法: &6/res area listall [领地å称] <页ç >' add: - Description: 为领地添加物ç†åŒºåŸŸ + Description: 为领地添加区域 Info: - - '&e用法: &6/res area add [领地] [区域ID]' + - '&e用法: &6/res area add [领地å称] [区域ID]' - 你必须先选中两个选å–点 remove: - Description: 移除领地的物ç†åŒºåŸŸ + Description: 删除领地的区域 Info: - - '&e用法: &6/res area remove [领地] [区域ID]' + - '&e用法: &6/res area remove [领地å称] [区域ID]' replace: - Description: 替æ¢é¢†åœ°çš„物ç†åŒºåŸŸ + Description: 替æ¢é¢†åœ°çš„区域 Info: - - '&e用法: &6/res area replace [领地] [区域ID]' + - '&e用法: &6/res area replace [领地å称] [区域ID]' - 你必须先选中两个选å–点 - - 如果新的区域更大, 二者之间将会被充满 - Info: - - '' + - '如果新的区域更大, 二者之间将会被充满' give: - Description: 给予一å玩家领地. + Description: 将你拥有的指定领地给予指定玩家 Info: - - '&e用法: &6/res give <领地å> [玩家]' - - 将你拥有的æŸä¸ªé¢†åœ°èµ ä¸ŽæŸçŽ©å®¶ + - '&e用法: &6/res give <领地å称> [玩家å称] <-s>' renamearea: - Description: 修改领地åå­— + Description: 修改领地区域å称 Info: - - '&e用法: &6/res removeworld [领地] [æ—§åå­—] [æ–°åå­—]' + - '&e用法: &6/res renamearea [领地å称] [区域旧å称] [区域新å称]' contract: Description: 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ° Info: - - '&e用法: &6/res contract (领地) [缩å°å•ä½]' - - 从你é¢å¯¹çš„æ–¹å‘缩å°é¢†åœ°è§„模 - - 领地å字是å¯é€‰çš„ + - '&e用法: &6/res contract <领地å称> [长度]' + - '将指定或当å‰é¢†åœ°ä»Žä½ é¢å¯¹çš„æ–¹å‘ç¼©å° [长度] æ ¼' check: - Description: 检查æƒé™çŠ¶æ€ + Description: 查看æƒé™çŠ¶æ€ Info: - - '&e用法: &6/res check [领地] [æƒé™] (玩家åå­—)' + - '&e用法: &6/res check [领地å称] [æƒé™] <玩家å称>' gset: - Description: 为æŸä¸ªç»„设置领地的特定æƒé™ + Description: 为æƒé™ç»„设置领地的特定æƒé™ Info: - - '&e用法: &6/res gset <领地> [组] [æƒé™] [true/false/remove]' - - 输入 /res flags ? 查看æƒé™åˆ—表 + - '&e用法: &6/res gset <领地å称> [æƒé™ç»„] [æƒé™] [true/false/remove]' + - 'è¦æŸ¥çœ‹æƒé™åˆ—表, 输入: /res flags ?' list: Description: 显示领地列表 Info: - - '&e用法: &6/res list <玩家> <页ç >' - - 列出指定玩家拥有的所有领地 (除了éšè—领地) - - 如果显示自己的领地, éšè—领地也会被显示 - - è¦åˆ—出所有玩家的领地, 使用 /res listall 命令 + - '&e用法: &6/res list <玩家å称> <页ç > <世界å称>' + - '列出 <玩家å称> 拥有的所有领地 (除了éšè—领地)' + - '列出自己的领地时, 会显示éšè—领地' + - 'è¦åˆ—出所有玩家的领地, 使用命令: /res listall' version: - Description: 显示 领地 的版本 + Description: 显示领地æ’件版本 Info: - '&e用法: &6/res version' tool: - Description: 显示领地圈地和查看信æ¯çš„工具类型 + Description: 显示用于领地选区和查看领地信æ¯çš„工具的å称 Info: - '&e用法: &6/res tool' pdel: Description: 从领地删除玩家 Info: - - '&e用法: &6/res pdel <领地å> [玩家]' - - 删除玩家的基本æƒé™ + - '&e用法: &6/res pdel <领地å称> [玩家å称]' + - åªä¼šåˆ é™¤çŽ©å®¶çš„基本æƒé™ market: - Description: è´­ä¹°, 出售和出租领地 + Description: 'è´­ä¹°, 出售和出租领地' Info: - - '&e用法: &6/res market ? for more Info' + - '&e用法: &6/res market ?' + - '以了解更多信æ¯' SubCommands: Info: Description: 查看领地的ç»æµŽä¿¡æ¯ Info: - - '&e用法: &6/res market Info [领地]' - - 显示领地是å¦æ­£åœ¨å‡ºç§Ÿæˆ–出售, 以åŠé¢†åœ°çš„花费 + - '&e用法: &6/res market Info [领地å称]' + - '显示领地是å¦æ­£åœ¨å‡ºç§Ÿæˆ–出售, åŠå…¶ä»·æ ¼' list: - Description: 显示å¯å‡ºç§Ÿä¸Žå¯å‡ºå”®çš„领地 + Description: 列出正在出租与正在出售的领地 Info: - - '&e用法: &6/res market list' + - '&e用法: &6/res market list [rent(出租)/sell(出售)]' SubCommands: rent: - Description: 列举å¯ä»¥ç§Ÿç”¨çš„领地 + Description: 列出正在出租的领地 Info: - '&e用法: &6/res market list rent' sell: - Description: 列举å¯ä»¥å‡ºå”®çš„领地 + Description: 列出正在出售的领地 Info: - '&e用法: &6/res market list sell' sell: - Description: 出售一个领地 + Description: 出售领地 Info: - - '&e用法: &6/res market sell [领地] [售价]' - - 将领地以 [amount] 元的价格出售 - - 其他玩家å¯ä»¥æ‰§è¡Œ /res market buy 命令购买 + - '&e用法: &6/res market sell [领地å称] [售价]' + - '将领地以 [售价] 的价格出售' + - '其他玩家å¯ä»¥æ‰§è¡Œ /res market buy 命令购买' sign: - Description: 设置市场木牌 + Description: 设置市场告示牌 Info: - - '&e用法: &6/res market sign [领地]' - - 将看å‘的木牌设置为领地市场木牌 + - '&e用法: &6/res market sign [领地å称]' + - å°†é¢å‘的告示牌设置为领地市场告示牌 buy: - Description: 购买一个领地 + Description: 购买领地 Info: - - '&e用法: &6/res market buy [领地]' - - 如果该领地正在出售, 则购买这个领地 + - '&e用法: &6/res market buy [领地å称]' + - '如果该领地正在出售, 则购买这个领地' unsell: Description: å–消出售领地 Info: - - '&e用法: &6/res market unsell [领地]' + - '&e用法: &6/res market unsell [领地å称]' rent: - Description: 租用一个领地 + Description: 租用领地 Info: - - '&e用法: &6/res market rent [领地] <自动续租>' - - 租用一个领地. <自动续租> å¯ä»¥æ˜¯ true 或 false. 如果是 true, 并且领地所有者å…许, 领地将会在租约到期之å‰è‡ªåŠ¨ç»­ç§Ÿ + - '&e用法: &6/res market rent [领地å称] <自动续租>' + - '<自动续租> å¯ä»¥è®¾ç½®ä¸º true 或 false。如果设置为 true, 并且领地所有者å…许, 领地将会在租约到期之å‰è‡ªåŠ¨ç»­ç§Ÿ' rentable: - Description: 将领地设置为å¯å‡ºç§Ÿ + Description: 将领地设置为正在出租 Info: - - '&e用法: &6/res market rentable [领地] [ä»·æ ¼] [天数] <周期>' - - 以 [ä»·æ ¼] 出租领地 [天数] 天. 如果 <周期> 为 true, 领地将会在租约结æŸåŽè‡ªåŠ¨å‡ºç§Ÿ. + - '&e用法: &6/res market rentable [领地å称] [ä»·æ ¼] [天数] <å¯ç»­ç§Ÿ> <留在市场> <å¯è‡ªåŠ¨ç»­ç§Ÿ>' + - '<å¯ç»­ç§Ÿ> <留在市场> <å¯è‡ªåŠ¨ç»­ç§Ÿ> å¯ä»¥è®¾ç½®ä¸º true 或 false' + - '<å¯ç»­ç§Ÿ> 设置为 true æ—¶, 在租约到期之å‰, 玩家å¯ä»¥ç»­ç§Ÿé¢†åœ°' + - '<留在市场> 设置为 true æ—¶, 在玩家退租åŽ, 领地将继续留在市场上出租' + - '<å¯è‡ªåŠ¨ç»­ç§Ÿ> 设置为 true æ—¶, 玩家å¯ä»¥é€‰æ‹©å¼€å¯ 自动续租, 将租金自动从玩家的余é¢ä¸­æ‰£é™¤' autopay: - Description: 开关领地自动支付 + Description: 开关领地自动续租 Info: - - '&e用法: &6/res market autopay <领地> [true/false]' + - '&e用法: &6/res market autopay [领地å称] [true/false]' payrent: - Description: 支付租用的领地 + Description: 支付租金 Info: - - '&e用法: &6/res market payrent <领地>' + - '&e用法: &6/res market payrent [领地å称]' confirm: - Description: 领地市场的确认æ“作 + Description: 确认退租æ“作 Info: - '&e用法: &6/res market confirm' unrent: - Description: 将领地从å¯ç§Ÿç”¨åˆ‡æ¢ä¸ºä¸å¯ç§Ÿç”¨. + Description: ç§»é™¤é¢†åœ°çš„è¢«ç§Ÿç”¨æˆ–æ­£åœ¨å‡ºç§ŸçŠ¶æ€ Info: - - '&e用法: &6/res market unrent [领地]' - - 如果你是租借方, 这个命令会释放你租用的区域. - - 如果你是领地拥有者,这个命令会让你的领地ä¸å¯å†è¢«ç§Ÿç”¨. + - '&e用法: &6/res market unrent [领地å称]' + - '如果你是领地租用者, 这个命令将使你退租该领地' + - '如果你是领地所有者, 这个命令将使你ä¸å†å‡ºç§Ÿè¯¥é¢†åœ°' rc: - Description: 加入当å‰æˆ–者指定的领地èŠå¤©é¢‘é“ + Description: 加入领地èŠå¤©é¢‘é“ Info: - - '&e用法: &6/res rc (领地)' - - 加入当å‰é¢†åœ°æˆ–者指定领地的èŠå¤©é¢‘é“ + - '&e用法: &6/res rc [领地å称]' + - 加入指定或当å‰é¢†åœ°çš„èŠå¤©é¢‘é“ SubCommands: leave: - Description: 离开当å‰é¢‘é“ + Description: 离开领地èŠå¤©é¢‘é“ Info: - '&e用法: &6/res rc leave' - - 如果你在一个领地频é“内, ä½ å°†ä¼šç¦»å¼€æ­¤é¢‘é“ + - '如果你在一个领地èŠå¤©é¢‘é“内, 你将会离开此频é“' setcolor: - Description: 设置领地频é“文字颜色 + Description: 设置领地èŠå¤©é¢‘é“的文字颜色 Info: - '&e用法: &6/res rc setcolor [颜色代ç ]' - - 设置领地频é“文字颜色 setprefix: - Description: 设置领地频é“å‰ç¼€ + Description: 设置领地èŠå¤©é¢‘é“çš„å‰ç¼€ Info: - - '&e用法: &6/res rc setprefix [æ–°å‰ç¼€]' - - 设置领地频é“å‰ç¼€ + - '&e用法: &6/res rc setprefix [å‰ç¼€]' kick: - Description: 从频é“中踢出玩家 + Description: 从领地èŠå¤©é¢‘é“中踢出指定玩家 Info: - - '&e用法: &6/res rc kick [玩家]' - - 从领地频é“中踢出æŸçŽ©å®¶ + - '&e用法: &6/res rc kick [玩家å称]' expand: Description: å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地 Info: - - '&e用法: &6/res expand (领地) [扩展å•ä½]' - - å‘ä½ é¢å¯¹çš„æ–¹å‘扩展领地规模 - - 领地å字是å¯é€‰çš„ + - '&e用法: &6/res expand <领地å称> [长度]' + - '将指定或当å‰é¢†åœ°å‘ä½ é¢å¯¹çš„æ–¹å‘扩展 [长度] æ ¼' compass: - Description: 设置指å—者指å‘领地 + Description: 将指å—针指å‘领地 Info: - - '&e用法: &6/res compass <领地åå­—>' + - '&e用法: &6/res compass <领地å称>' lists: Description: 预定义æƒé™åˆ—表 Info: - - 预定义的æƒé™åˆ—表å¯ä»¥åº”用到领地上 + - å¯ä»¥å°†é¢„定义æƒé™åˆ—表应用于领地上 SubCommands: add: Description: 添加一个列表 Info: - - '&e用法: &6/res lists add <列表å>' + - '&e用法: &6/res lists add <列表å称>' remove: Description: 删除一个列表 Info: - - '&e用法: &6/res lists remove <列表å>' + - '&e用法: &6/res lists remove <列表å称>' apply: Description: 将列表应用于领地 Info: - - '&e用法: &6/res lists apply <列表å> <领地>' + - '&e用法: &6/res lists apply <列表å称> <领地å称>' set: - Description: 设置列表全局æƒé™ + Description: 设置列表公共æƒé™ Info: - - '&e用法: &6/res lists set <列表å> <æƒé™> <值>' + - '&e用法: &6/res lists set <列表å称> <æƒé™> ' pset: Description: 设置列表玩家æƒé™ Info: - - '&e用法: &6/res lists pset <列表å> <玩家> <æƒé™> <值>' + - '&e用法: &6/res lists pset <列表å称> <玩家å称> <æƒé™> ' gset: - Description: 设置列表组æƒé™ + Description: 设置列表æƒé™ç»„æƒé™ Info: - - '&e用法: &6/res lists view <列表å>' + - '&e用法: &6/res lists gset <列表å称> <æƒé™ç»„> <æƒé™> ' view: - Description: 查看列表 + Description: 查看一个列表 Info: - - '&e用法: &6/res lists view <列表å>' + - '&e用法: &6/res lists view <列表å称>' reset: - Description: 将领地设置还原为默认值 + Description: 将领地é‡ç½®ä¸ºé»˜è®¤æƒé™ Info: - - '&e用法: &6/res reset <领地>' - - 将领地的所有æƒé™é‡ç½®. 你必须是领地所有者或者管ç†å‘˜ + - '&e用法: &6/res reset <领地å称/all(全部)>' + - '将领地的所有æƒé™é‡ç½®ä¸ºé»˜è®¤ã€‚你必须是领地所有者或者管ç†å‘˜' listhidden: Description: 显示éšè—领地列表 Info: - - '&e用法: &6/res listhidden <玩家> <页ç >' - - 列出指定玩家拥有的éšè—领地 + - '&e用法: &6/res listhidden <玩家å称> <页ç >' + - 列出 <玩家å称> 拥有的éšè—领地 + raid: + Description: 管ç†é¢†åœ°çš„袭击 + Info: + - '&e用法: &6/res raid start [领地å称] <玩家å称>' + - '&6/res raid stop [领地å称]' + - '&6/res raid kick [玩家å称]' + - '&6/res raid immunity [add/take/set/clear] [领地å称/当å‰é¢†åœ°] [时长]' setmain: - Description: 设置主领地 + Description: 设置为主领地 Info: - - '&e用法: &6/res setmain (领地åå­—)' + - '&e用法: &6/res setmain <领地å称>' + - 将领地设置为主领地以作为èŠå¤©å‰ç¼€ server: - Description: 创建æœåŠ¡å™¨é¢†åœ° + Description: 将领地设置为æœåŠ¡å™¨æ‹¥æœ‰ Info: - - '&e用法: &6/resadmin server [领地]' - - 创建一个属于æœåŠ¡å™¨æ‰€æœ‰çš„领地 + - '&e用法: &6/resadmin server [领地å称]' rt: - Description: ä¼ é€åˆ°ä¸–界上的éšæœºä½ç½® + Description: éšæœºä¼ é€ Info: - - '&e用法: &6/res rt' - - 将你传é€åˆ°ä¸–界上的éšæœºä½ç½® + - '&e用法: &6/res rt <世界å称> <玩家å称>' + - 将你传é€åˆ°æŒ‡å®šä¸–界上的éšæœºä½ç½® mirror: - Description: é•œåƒæƒé™ + Description: æƒé™å…‹éš† Info: - - '&e查看 &6/res market ? 获å–帮助' + - '&e用法: &6/res mirror [æ¥æºé¢†åœ°] [目标领地]' + - 'å°† [æ¥æºé¢†åœ°] çš„æƒé™è®¾ç½®å…‹éš†åˆ°åˆ° [目标领地]。你必须是两个领地的所有者或管ç†å‘˜æ‰èƒ½è¿™æ ·åš' shop: Description: 管ç†é¢†åœ°å•†åº— Info: - - 管ç†é¢†åœ°çš„商店功能 + - 管ç†é¢†åœ°å•†åº—的功能 SubCommands: list: Description: 显示领地商店列表 Info: - '&e用法: &6/res shop list' - - 显示所有作为商店的领地 + - 列出所有作为商店的领地 vote: Description: 为领地商店评分 Info: - - '&e用法: &6/res shop vote <领地> [分数]' - - 为当å‰æˆ–指定领地商店评分 + - '&e用法: &6/res shop vote <领地å称> [分数]' + - 为指定或当å‰é¢†åœ°å•†åº—评分 like: Description: 为领地商店点赞 Info: - - '&e用法: &6/res shop like <领地>' - - 为领地商店点一个赞 + - '&e用法: &6/res shop like <领地å称>' votes: - Description: 显示领地商店评分 + Description: 列出领地商店的评分 Info: - - '&e用法: &6/res shop votes <领地> <页ç >' - - 显示当å‰æˆ–指定领地商店的评分列表 + - '&e用法: &6/res shop votes <领地å称> <页ç >' + - 显示指定或当å‰é¢†åœ°å•†åº—的评分列表 likes: - Description: 显示领地商店的赞 + Description: 列出领地商店的赞 Info: - - '&e用法: &6/res shop likes <领地> <页ç >' - - 显示当å‰æˆ–指定领地商店的赞列表 + - '&e用法: &6/res shop likes <领地å称> <页ç >' + - 显示指定或当å‰é¢†åœ°å•†åº—的赞列表 setdesc: - Description: 设置领地商店æè¿° + Description: 设置领地商店的æè¿° Info: - '&e用法: &6/res shop setdesc [æ述文字]' - - 设置领地商店æè¿°, 支æŒé¢œè‰²ä»£ç , 用 /n 表示æ¢è¡Œ + - '设置领地商店的æè¿°, 支æŒé¢œè‰²ä»£ç ã€‚使用 /n å¯ä»¥æ¢è¡Œ' createboard: Description: åˆ›å»ºå•†åº—å®£ä¼ æ¿ Info: - '&e用法: &6/res shop createboard [ä½ç½®]' - - 在选区ä½ç½®å»ºç«‹å•†åº—宣传æ¿. [ä½ç½®] 表示宣传æ¿çš„起始ä½ç½® + - '在选区ä½ç½®å»ºç«‹å•†åº—宣传æ¿ã€‚[ä½ç½®] 表示宣传æ¿çš„起始书写ä½ç½®' deleteboard: - Description: åˆ é™¤å•†åº—å®£ä¼ æ¿ + Description: ç§»é™¤å•†åº—å®£ä¼ æ¿ Info: - '&e用法: &6/res shop deleteboard' - - å³å‡»å®£ä¼ æ¿çš„å‘Šç¤ºç‰Œä»¥åˆ é™¤å®£ä¼ æ¿ + - å³é”®å•å‡»å®£ä¼ æ¿çš„å‘Šç¤ºç‰Œä»¥ç§»é™¤å®£ä¼ æ¿ lset: Description: 更改黑åå•å’Œå¿½ç•¥åå•é€‰é¡¹ Info: - - '&e用法: &6/res lset <领地> [blacklist/ignorelist] [ææ–™]' - - '&e用法: &6/res lset <领地> Info' - - å°†æŸç‰©å“加入黑åå•ä»¥é˜»æ­¢è¿™ç§ç‰©å“被放置在领地中 - - 忽略åå•ä¸­çš„物å“å°†ä¸ä¼šè¢«é¢†åœ°ä¿æŠ¤ + - '&e用法: &6/res lset <领地å称> [blacklist(黑åå•)/ignorelist(忽略åå•)] [物å“]' + - '将指定物å“加入黑åå•, 以阻止其被放置在领地中' + - '将指定物å“加入忽略åå•ä¸­çš„物å“, 以使其ä¸ä¼šè¢«é¢†åœ°ä¿æŠ¤' + - '&e用法: &6/res lset <领地å称> info' + raidstatus: + Description: æŸ¥çœ‹é¢†åœ°çš„è¢­å‡»çŠ¶æ€ + Info: + - '&e用法: &6/res raidstatus <领地å称/玩家å称>' pset: - Description: 为æŸçŽ©å®¶è®¾å®šè¯¥é¢†åœ°çš„特定æƒé™ + Description: 为玩家设置指定领地的特定æƒé™ Info: - - '&e用法: &6/res pset <领地> [玩家] [æƒé™] [true/false/remove]' - - '&e用法: &6/res pset <领地> [玩家] removeall' - - 输入 /res flags ? 查看æƒé™åˆ—表 + - '&e用法: &6/res pset <领地å称> [玩家å称] [æƒé™] [true/false/remove]' + - '&e用法: &6/res pset <领地å称> [玩家å称] removeall' + - '输入 /res flags ? 查看æƒé™åˆ—表' show: Description: 显示领地的边界 Info: - - '&e用法: &6/res show <领地>' + - '&e用法: &6/res show <领地å称>' flags: Description: 领地æƒé™åˆ—表 Info: - - 对于大部分æƒé™æ¥è¯´, true 表示å…许, false 表示ç¦æ­¢è¿™ä¸€æ“作 + - '大部分æƒé™å¯ä»¥ä½¿ç”¨å‚æ•° true 表示å…许, false 表示ç¦æ­¢' SubCommands: anvil: + Translated: 'anvil - 使用é“ç §' Description: å…许或ç¦æ­¢ä½¿ç”¨é“ç § Info: - - '&e用法: &6/res set/pset <领地> anvil true/false/remove' - Translated: anvil + - '&e用法: &6/res set/pset <领地å称> anvil true/false/remove' admin: - Description: 玩家å¯ä»¥æ›´æ”¹é¢†åœ°æƒé™ + Translated: 'admin - 管ç†å‘˜æƒé™' + Description: 给予玩家设置领地的æƒé™ Info: - - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' - Translated: admin + - '&e用法: &6/res pset <领地å称> admin true/false/remove' animalkilling: + Translated: 'animalkilling - 击æ€åŠ¨ç‰©' Description: å…许或ç¦æ­¢å‡»æ€åŠ¨ç‰© Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: animalkilling + - '&e用法: &6/res set/pset <领地å称> animalkilling true/false/remove' animals: + Translated: 'animals - 动物生æˆ' Description: å…许或ç¦æ­¢åŠ¨ç‰©ç”Ÿæˆ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: animals + - '&e用法: &6/res set <领地å称> animals true/false/remove' + anchor: + Translated: 'anchor - 使用é‡ç”Ÿé”š' + Description: å…许或ç¦æ­¢ä½¿ç”¨é‡ç”Ÿé”š + Info: + - '&e用法: &6/res set/pset <领地å称> anchor true/false/remove' anvilbreak: - Description: Allows or denys anvil break in residence + Translated: 'anvilbreak - é“ç §æŸå' + Description: å¼€å¯æˆ–关闭é“ç §æŸå Info: - - '&e用法: &6/res set <领地> anvilbreak true/false/remove' - Translated: anvilbreak + - '&e用法: &6/res set <领地å称> anvilbreak true/false/remove' backup: - Description: 设置为Trueå¯ä»¥æ¢å¤åˆ°ä»¥å‰çš„备份 (需è¦WordEdit) + Translated: 'backup - 备份' + Description: 'å…许或ç¦æ­¢æ¢å¤åˆ°ä»¥å‰çš„备份 (éœ€è¦ WorldEdit)' Info: - '&e用法: &6/res set <领地> backup true/false/remove' - Translated: backup bank: + Translated: 'bank - 使用领地银行' Description: å…许或ç¦æ­¢ä½¿ç”¨é¢†åœ°é“¶è¡Œ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: bank + - '&e用法: &6/res set/pset <领地å称> bank true/false/remove' bed: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åºŠ + Translated: 'bed - 使用床' + Description: å…许或ç¦æ­¢ä½¿ç”¨åºŠç¡è§‰ + Info: + - '&e用法: &6/res set/pset <领地å称> bed true/false/remove' + honey: + Translated: 'honey - 获得蜂蜜' + Description: å…许或ç¦æ­¢èŽ·å¾—蜂蜜 + Info: + - '&e用法: &6/res set/pset <领地å称> honey true/false/remove' + honeycomb: + Translated: 'honeycomb - 获得蜜脾' + Description: å…许或ç¦æ­¢èŽ·å¾—蜜脾 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: bed + - '&e用法: &6/res set/pset <领地å称> honeycomb true/false/remove' beacon: - Description: å…许或者ç¦æ­¢çŽ©å®¶ä½¿ç”¨ä¿¡æ ‡ + Translated: 'beacon - 与信标交互' + Description: å…许或ç¦æ­¢ä¸Žä¿¡æ ‡äº¤äº’ Info: - - '&e用法: &6/res set/pset <领地> beacon true/false/remove' - Translated: beacon + - '&e用法: &6/res set/pset <领地å称> beacon true/false/remove' brew: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é…¿é€ å° + Translated: 'brew - 使用酿造å°' + Description: å…许或ç¦æ­¢ä½¿ç”¨é…¿é€ å° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: brew + - '&e用法: &6/res set/pset <领地å称> brew true/false/remove' build: - Description: å…许或ç¦æ­¢å»ºé€  + Translated: 'build - 建造' + Description: å…许或ç¦æ­¢æ”¾ç½®å’Œç ´å Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: build + - '&e用法: &6/res set/pset <领地å称> build true/false/remove' burn: - Description: å…许或ç¦æ­¢æ€ªç‰©ç‡ƒçƒ§ + Translated: 'burn - 怪物燃烧' + Description: å¼€å¯æˆ–关闭怪物燃烧 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: burn + - '&e用法: &6/res set <领地å称> burn true/false/remove' button: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æŒ‰é’® + Translated: 'button - 使用按钮' + Description: å…许或ç¦æ­¢ä½¿ç”¨æŒ‰é’® Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: button + - '&e用法: &6/res set/pset <领地å称> button true/false/remove' cake: - Description: å…许或ç¦æ­¢çŽ©å®¶åƒè›‹ç³• + Translated: 'cake - 食用蛋糕' + Description: å…许或ç¦æ­¢é£Ÿç”¨è›‹ç³• Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: cake + - '&e用法: &6/res set/pset <领地å称> cake true/false/remove' canimals: + Translated: 'canimals - 自定义动物生æˆ' Description: å…许或ç¦æ­¢è‡ªå®šä¹‰åŠ¨ç‰©ç”Ÿæˆ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: canimals + - '&e用法: &6/res set <领地å称> canimals true/false/remove' chorustp: - Description: å…许或者ç¦æ­¢çŽ©å®¶ä½¿ç”¨ç´«å½±æžœ + Translated: 'chorustp - 紫颂果传é€' + Description: å…许或ç¦æ­¢ä½¿ç”¨ç´«é¢‚果传é€åˆ°é¢†åœ° Info: - - '&e用法: &6/res set/pset <领地> chorustp true/false/remove' - Translated: chorustp + - '&e用法: &6/res set/pset <领地å称> chorustp true/false/remove' chat: - Description: å…许加入领地èŠå¤©é¢‘é“ + Translated: 'chat - 领地èŠå¤©' + Description: å…许或ç¦æ­¢åŠ å…¥é¢†åœ°èŠå¤©é¢‘é“ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: chat + - '&e用法: &6/res set/pset <领地å称> chat true/false/remove' cmonsters: + Translated: 'cmonsters - 自定义怪物生æˆ' Description: å…许或ç¦æ­¢è‡ªå®šä¹‰æ€ªç‰©ç”Ÿæˆ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: cmonsters + - '&e用法: &6/res set <领地å称> cmonsters true/false/remove' commandblock: - Description: å…许或ç¦æ­¢ä½¿ç”¨å‘½ä»¤æ–¹å— + Translated: 'commandblock - 与命令方å—交互' + Description: å…许或ç¦æ­¢ä¸Žå‘½ä»¤æ–¹å—交互 Info: - - '&e用法: &6/res set/pset <领地> commandblock true/false/remove' - Translated: commandblock + - '&e用法: &6/res set/pset <领地å称> commandblock true/false/remove' command: - Description: å…许或ç¦æ­¢æ‰§è¡Œå‘½ä»¤ + Translated: 'command - 执行命令' + Description: 'å…许或ç¦æ­¢æ‰§è¡Œå‘½ä»¤, 需è¦ä¸Žcommandblockæƒé™ä¸€èµ·ä½¿ç”¨' Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: command + - '&e用法: &6/res set/pset <领地å称> command true/false/remove' container: - Description: å…许或ç¦æ­¢ä½¿ç”¨ç†”炉, ç®±å­, å‘射器等... + Translated: 'container - 使用容器' + Description: 'å…许或ç¦æ­¢ä½¿ç”¨ç®±å­, å‘射器, 熔炉等容器' Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: container + - '&e用法: &6/res set/pset <领地å称> container true/false/remove' coords: - Description: éšè—领地的åæ ‡ + Translated: 'coords - 领地åæ ‡' + Description: 显示或éšè—领地åæ ‡ Info: - - '&e用法: &6/res set <领地> coords true/false/remove' - Translated: coords + - '&e用法: &6/res set <领地å称> coords true/false/remove' + copper: + Translated: 'copper - 修改铜å—' + Description: å…许或ç¦æ­¢æ”¹å˜é“œå—çŠ¶æ€ + Info: + - '&e用法: &6/res set/pset <领地å称> copper true/false/remove' craft: - Description: 给予 table, enchant å’Œ brew æƒé™ + Translated: 'craft - 给予 table, enchant and brew æƒé™' + Description: '给予 table, enchant and brew æƒé™' Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: craft + - '&e用法: &6/res set <领地å称> craft true/false/remove' creeper: - Description: å…许或ç¦æ­¢çˆ¬è¡Œè€…爆炸 + Translated: 'creeper - 苦力怕爆炸' + Description: å…许或ç¦æ­¢è‹¦åŠ›æ€•çˆ†ç‚¸ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: creeper + - '&e用法: &6/res set <领地å称> creeper true/false/remove' dragongrief: - Description: 防止末影龙破åæ–¹å— + Translated: 'dragongrief - 末影龙破å' + Description: å…许或ç¦æ­¢æœ«å½±é¾™ç ´åæ–¹å— Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: dragongrief + - '&e用法: &6/res set <领地å称> dragongrief true/false/remove' day: + Translated: 'day - ä¿æŒç™½å¤©' Description: 领地ä¿æŒç™½å¤© Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: day + - '&e用法: &6/res set <领地å称> day true/false/remove' dye: - Description: å…许或ç¦æ­¢ä¸ºç¾Šæ¯›æŸ“色 + Translated: 'dye - 给羊染色' + Description: å…许或ç¦æ­¢ç»™ç¾ŠæŸ“色 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: dye + - '&e用法: &6/res set/pset <领地å称> dye true/false/remove' damage: - Description: å…许或ç¦æ­¢æ‰€æœ‰å®žä½“伤害 + Translated: 'damage - 实体伤害' + Description: å¼€å¯æˆ–关闭实体伤害 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: damage + - '&e用法: &6/res set <领地å称> damage true/false/remove' decay: - Description: å…许或者ç¦æ­¢æ ‘å¶å‡‹æ• + Translated: 'decay - æ ‘å¶å‡‹è½' + Description: å¼€å¯æˆ–关闭树å¶å‡‹è½ Info: - - '&e用法: &6/res set <领地> decay true/false/remove' - Translated: decay + - '&e用法: &6/res set <领地å称> decay true/false/remove' destroy: - Description: åªå…许或ç¦æ­¢ç ´åæ–¹å—, 该æƒé™è¦†ç›– build æƒé™ + Translated: 'destroy - ç ´å' + Description: 'å…许或ç¦æ­¢ç ´åæ–¹å—, 该æƒé™è¦†ç›– build æƒé™' Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: destroy + - '&e用法: &6/res set/pset <领地å称> destroy true/false/remove' dryup: - Description: ä¿æŠ¤è€•åœ°å¤±åŽ»æ°´åˆ† + Translated: 'dryup - 耕地干涸' + Description: 'å¼€å¯æˆ–关闭耕地干涸' Info: - - '&e用法: &6/res set <领地> dryup true/false/remove' - Translated: dryup + - '&e用法: &6/res set <领地å称> dryup true/false/remove' diode: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨çº¢çŸ³ä¸­ç»§å™¨ + Translated: 'diode - 红石中继器' + Description: å…许或ç¦æ­¢ä½¿ç”¨çº¢çŸ³ä¸­ç»§å™¨ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: diode + - '&e用法: &6/res set/pset <领地å称> diode true/false/remove' door: - Description: å…许或ç¦æ­¢çŽ©å®¶å¼€å…³é—¨å’Œæ´»æ¿é—¨ + Translated: 'door - é—¨' + Description: å…许或ç¦æ­¢ä½¿ç”¨é—¨å’Œæ´»æ¿é—¨ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: door + - '&e用法: &6/res set/pset <领地å称> door true/false/remove' egg: - Description: å…许或ç¦æ­¢ç‚¹å‡»æœ«å½±é¾™è›‹ + Translated: 'egg - 与龙蛋交互' + Description: å…许或ç¦æ­¢ä¸Žé¾™è›‹äº¤äº’ Info: - - '&e用法: &6/res set/pset <领地> egg true/false/remove' - Translated: egg + - '&e用法: &6/res set/pset <领地å称> egg true/false/remove' enchant: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨é™„é­”å° + Translated: 'enchant - 使用附魔å°' + Description: å…许或ç¦æ­¢ä½¿ç”¨é™„é­”å° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: enchant + - '&e用法: &6/res set/pset <领地å称> enchant true/false/remove' explode: + Translated: 'explode - 爆炸' Description: å…许或ç¦æ­¢çˆ†ç‚¸ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: explode + - '&e用法: &6/res set <领地å称> explode true/false/remove' + elytra: + Translated: 'elytra - 使用鞘翅' + Description: å…许或ç¦æ­¢ä½¿ç”¨éž˜ç¿… + Info: + - '&e用法: &6/res set/pset <领地å称> elytra true/false/remove' enderpearl: - Description: å…许或ç¦æ­¢ç”¨æœ«å½±çç ä¼ é€è‡³æ­¤é¢†åœ° + Translated: 'enderpearl - 末影çç ä¼ é€' + Description: å…许或ç¦æ­¢ä½¿ç”¨æœ«å½±çç ä¼ é€åˆ°é¢†åœ° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: enderpearl + - '&e用法: &6/res set/pset <领地å称> enderpearl true/false/remove' fallinprotection: - Description: 防止掉è½çš„æ–¹å—进入领地 + Translated: 'fallinprotection - 阻止方å—从领地外掉è½åˆ°é¢†åœ°å†…' + Description: '阻止或å…è®¸æ–¹å— (例如沙å­å’Œæ²™ç ¾) 从领地外掉è½åˆ°é¢†åœ°å†…, True表示阻止' Info: - - '&e用法: &6/res set <领地> fallinprotection true/false/remove' - Translated: fallinprotection + - '&e用法: &6/res set <领地å称> fallinprotection true/false/remove' falldamage: - Description: 开关玩家å è½ä¼¤å®³ + Translated: 'falldamage - è·Œè½ä¼¤å®³' + Description: å¼€å¯æˆ–关闭跌è½ä¼¤å®³ Info: - - '&e用法: &6/res set <领地> falldamage true/false/remove' - Translated: falldamage + - '&e用法: &6/res set <领地å称> falldamage true/false/remove' feed: - Description: 为领地内的玩家æ¢å¤é¥±é£Ÿ + Translated: 'feed - 自动回å¤é¥±é£Ÿåº¦' + Description: å¼€å¯æˆ–关闭自动为领地内玩家回å¤é¥±é£Ÿåº¦ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: feed + - '&e用法: &6/res set <领地å称> feed true/false/remove' + friendlyfire: + Translated: 'friendlyfire - 队å‹ä¼¤å®³ (待实测)' + Description: 'å¼€å¯æˆ–关闭队å‹ä¼¤å®³ (待实测)' + Info: + - '&e用法: &6/res pset <领地å称> friendlyfire true/false/remove' fireball: - Description: å…许或ç¦æ­¢ç«ç„°å¼¹ + Translated: 'fireball - 使用ç«ç„°å¼¹' + Description: 'å…许或ç¦æ­¢ç«ç„°å¼¹, True或Remove表示å…许' Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: fireball + - '&e用法: &6/res set <领地å称> fireball true/false/remove' firespread: - Description: å…许或ç¦æ­¢ç«ç„°è”“延 + Translated: 'firespread - ç«ç„°è”“延' + Description: 'å…许或ç¦æ­¢ç«ç„°è”“延, True或Remove表示å…许' Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: firespread + - '&e用法: &6/res set <领地å称> firespread true/false/remove' flowinprotection: - Description: å…许或ç¦æ­¢æ¶²ä½“æµå…¥é¢†åœ° + Translated: 'flowinprotection - 阻止æµä½“从领地外æµå‘领地内' + Description: '阻止或å…许æµä½“从领地外æµå‘领地内, True表示阻止' Info: - - '&e用法: &6/res set <领地> flowinprotection true/false/remove' - Translated: flowinprotection + - '&e用法: &6/res set <领地å称> flowinprotection true/false/remove' flow: - Description: å…许或ç¦æ­¢æ¶²ä½“æµåŠ¨ + Translated: 'flow - æµä½“æµåŠ¨' + Description: å…许或ç¦æ­¢é¢†åœ°å†…æµä½“扩散 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: flow + - '&e用法: &6/res set <领地å称> flow true/false/remove' flowerpot: - Description: å…许或ç¦æ­¢ç‚¹å‡»èŠ±ç›† + Translated: 'flowerpot - 与花盆交互' + Description: å…许或ç¦æ­¢ä¸ŽèŠ±ç›†äº¤äº’ Info: - - '&e用法: &6/res set/pset <领地> flowerpot true/false/remove' - Translated: flowerpot + - '&e用法: &6/res set/pset <领地å称> flowerpot true/false/remove' grow: - Description: å…许或ç¦æ­¢ä½œç‰©ç”Ÿé•¿ + Translated: 'grow - æ¤ç‰©ç”Ÿé•¿' + Description: å…许或ç¦æ­¢æ¤ç‰©ç”Ÿé•¿ Info: - - '&e用法: &6/res set <领地> grow true/false/remove' - Translated: grow + - '&e用法: &6/res set <领地å称> grow true/false/remove' glow: - Description: 玩家进入领地会有å‘光效果 + Translated: 'glow - å‘å…‰' + Description: 使玩家进入领地时有å‘光效果 Info: - - '&e用法: &6/res set <领地> glow true/false/remove' - Translated: glow + - '&e用法: &6/res set <领地å称> glow true/false/remove' hotfloor: - Description: 开关岩浆å—的伤害 + Translated: 'hotfloor - 岩浆å—伤害' + Description: å¼€å¯æˆ–关闭岩浆å—造æˆçš„伤害 Info: - - '&e用法: &6/res set <领地> hotfloor true/false/remove' - Translated: hotfloor + - '&e用法: &6/res set <领地å称> hotfloor true/false/remove' hidden: - Description: 在 list 或 listall 命令中éšè—此领地 + Translated: 'hidden - éšè—领地' + Description: '在 list 或 listall 命令中éšè—此领地, True表示éšè—' Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: hidden + - '&e用法: &6/res set <领地å称> hidden true/false/remove' hook: - Description: å…许或ç¦æ­¢ä½¿ç”¨é±¼ç«¿æ”»å‡»å®žä½“ + Translated: 'hook - 使用鱼竿钩ä½å®žä½“' + Description: å…许或ç¦æ­¢ä½¿ç”¨é±¼ç«¿é’©ä½å®žä½“ Info: - - '&e用法: &6/res set/pset <领地> hook true/false/remove' - Translated: hook + - '&e用法: &6/res set/pset <领地å称> hook true/false/remove' healing: - Description: 为领地内的玩家治疗 + Translated: 'healing - 自动回å¤ç”Ÿå‘½å€¼' + Description: å¼€å¯æˆ–关闭为领地内玩家自动回å¤ç”Ÿå‘½å€¼ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: healing + - '&e用法: &6/res set <领地å称> healing true/false/remove' iceform: - Description: 阻止冰霜行者魔咒å‘挥作用 + Translated: 'iceform - 结冰' + Description: å…许或ç¦æ­¢æ°´ç»“冰 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: iceform + - '&e用法: &6/res set <领地å称> iceform true/false/remove' icemelt: - Description: 开关冰的èžåŒ– + Translated: 'icemelt - 冰èžåŒ–' + Description: å…许或ç¦æ­¢å†°èžåŒ– Info: - - '&e用法: &6/res set <领地> icemelt true/false/remove' - Translated: icemelt + - '&e用法: &6/res set <领地å称> icemelt true/false/remove' ignite: + Translated: 'ignite - 点ç«' Description: å…许或ç¦æ­¢ç‚¹ç« Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: ignite + - '&e用法: &6/res set/pset <领地å称> ignite true/false/remove' itemdrop: - Description: å…许或阻止物å“æŽ‰è½ + Translated: 'itemdrop - 物å“掉è½' + Description: å…许或ç¦æ­¢ç‰©å“æŽ‰è½ Info: - - '&e用法: &6/res set/pset <领地> itemdrop true/false/remove' - Translated: itemdrop + - '&e用法: &6/res set/pset <领地å称> itemdrop true/false/remove' itempickup: - Description: å…许或阻止物å“æ¡èµ· + Translated: 'itempickup - æ¡èµ·ç‰©å“' + Description: å…许或ç¦æ­¢æ¡èµ·ç‰©å“ Info: - - '&e用法: &6/res set/pset <领地> itempickup true/false/remove' - Translated: itempickup + - '&e用法: &6/res set/pset <领地å称> itempickup true/false/remove' jump2: - Description: å…许跳2格高 + Translated: 'jump2 - 跳跃两格高' + Description: å…许或ç¦æ­¢çŽ©å®¶è·³è·ƒé«˜åº¦åœ¨ä¸¤æ ¼ä»¥ä¸Š Info: - - '&e用法: &6/res set <领地> jump2 true/false/remove' - Translated: jump2 + - '&e用法: &6/res set <领地å称> jump2 true/false/remove' jump3: - Description: å…许跳3格高 + Translated: 'jump3 - 跳跃三格高' + Description: å…许或ç¦æ­¢çŽ©å®¶è·³è·ƒé«˜åº¦åœ¨ä¸‰æ ¼ä»¥ä¸Š Info: - - '&e用法: &6/res set <领地> jump3 true/false/remove' - Translated: jump3 + - '&e用法: &6/res set <领地å称> jump3 true/false/remove' keepinv: - Description: 玩家死亡ä¸ä¼šæŽ‰è½ç‰©å“ + Translated: 'keepinv - 物å“死亡ä¸æŽ‰è½' + Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨é¢†åœ°å†…死亡åŽä¿ç•™ç‰©å“æ  Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: keepinv + - '&e用法: &6/res set <领地å称> keepinv true/false/remove' keepexp: - Description: 玩家死亡ä¸ä¼šæŸå¤±ç»éªŒ + Translated: 'keepexp - ç»éªŒå€¼æ­»äº¡ä¸æŽ‰è½' + Description: å…许或ç¦æ­¢çŽ©å®¶åœ¨é¢†åœ°å†…死亡åŽä¿ç•™ç»éªŒå€¼ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: keepexp + - '&e用法: &6/res set <领地å称> keepexp true/false/remove' lavaflow: - Description: å…许或ç¦æ­¢å²©æµ†æµåŠ¨, 该æƒé™è¦†ç›– flow æƒé™ + Translated: 'lavaflow - 岩浆æµåŠ¨' + Description: 'å…许或ç¦æ­¢é¢†åœ°å†…岩浆扩散, 该æƒé™è¦†ç›– flow æƒé™' Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: lavaflow + - '&e用法: &6/res set <领地å称> lavaflow true/false/remove' leash: - Description: å…许或ç¦æ­¢ç‰µå¼•åŠ¨ç‰© + Translated: 'leash - 使用拴绳' + Description: å…许或ç¦æ­¢ä½¿ç”¨æ‹´ç»³ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: leash + - '&e用法: &6/res set/pset <领地å称> leash true/false/remove' lever: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨æ‹‰æ† + Translated: 'lever - 使用拉æ†' + Description: å…许或ç¦æ­¢ä½¿ç”¨æ‹‰æ† Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: lever + - '&e用法: &6/res set/pset <领地å称> lever true/false/remove' mobexpdrop: - Description: 怪物死亡ä¸ä¼šæŽ‰è½ç»éªŒ + Translated: 'mobexpdrop - 怪物掉è½ç»éªŒ' + Description: 'å…许或ç¦æ­¢æ€ªç‰©æŽ‰è½ç»éªŒ, True或Remove表示å…许' Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: mobexpdrop + - '&e用法: &6/res set <领地å称> mobexpdrop true/false/remove' mobitemdrop: - Description: 怪物死亡ä¸ä¼šæŽ‰è½ç‰©å“ + Translated: 'mobitemdrop - 怪物掉è½ç‰©å“' + Description: 'å…许或ç¦æ­¢æ€ªç‰©æŽ‰è½ç‰©å“, True或Remove表示å…许' Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: mobitemdrop + - '&e用法: &6/res set <领地å称> mobitemdrop true/false/remove' mobkilling: + Translated: 'mobkilling - 击æ€æ€ªç‰©' Description: å…许或ç¦æ­¢å‡»æ€æ€ªç‰© Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: mobkilling + - '&e用法: &6/res set/pset <领地å称> mobkilling true/false/remove' monsters: + Translated: 'monsters - 怪物生æˆ' Description: å…许或ç¦æ­¢æ€ªç‰©ç”Ÿæˆ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: monsters + - '&e用法: &6/res set <领地å称> monsters true/false/remove' move: + Translated: 'move - 移动' Description: å…许或ç¦æ­¢ç§»åŠ¨ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: move + - '&e用法: &6/res set/pset <领地å称> move true/false/remove' + nametag: + Translated: 'nametag - 使用命å牌 (待实测)' + Description: 'å…许或ç¦æ­¢ä½¿ç”¨å‘½å牌 (待实测)' + Info: + - '&e用法: &6/res set/pset <领地å称> nametag true/false/remove' nanimals: + Translated: 'nanimals - 自然生æˆåŠ¨ç‰©' Description: å…许或ç¦æ­¢è‡ªç„¶ç”ŸæˆåŠ¨ç‰© Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: nanimals + - '&e用法: &6/res set <领地å称> nanimals true/false/remove' nmonsters: + Translated: 'nmonsters - 自然生æˆæ€ªç‰©' Description: å…许或ç¦æ­¢è‡ªç„¶ç”Ÿæˆæ€ªç‰© Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: nmonsters + - '&e用法: &6/res set <领地å称> nmonsters true/false/remove' night: - Description: 领地ä¿æŒå¤œé—´ + Translated: 'night - ä¿æŒå¤œæ™š' + Description: 领地ä¿æŒå¤œæ™š Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: night + - '&e用法: &6/res set <领地å称> night true/false/remove' nofly: - Description: å…许或ç¦æ­¢é£žè¡Œ + Translated: 'nofly - ç¦æ­¢é£žè¡Œ' + Description: 'ç¦æ­¢æˆ–å…许飞行, True表示ç¦æ­¢' Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: nofly + - '&e用法: &6/res set/pset <领地å称> nofly true/false/remove' fly: - Description: è®¾ç½®é¢†åœ°å†…çš„çŽ©å®¶é£žè¡ŒçŠ¶æ€ + Translated: 'fly - 进入飞行' + Description: å¼€å¯æˆ–å…³é—­è‡ªåŠ¨è¿›å…¥é£žè¡ŒçŠ¶æ€ Info: - - '&e用法: &6/res set/pset <领地> fly true/false/remove' - Translated: fly + - '&e用法: &6/res set/pset <领地å称> fly true/false/remove' nomobs: - Description: å…许或ç¦æ­¢æ€ªç‰©è¿›å…¥é¢†åœ° + Translated: 'nomobs - 阻止怪物进入领地' + Description: '阻止或å…许怪物进入领地, True表示阻止' Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: nomobs + - '&e用法: &6/res set <领地å称> nomobs true/false/remove' note: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨éŸ³ç¬¦ç›’ + Translated: 'note - 使用音符盒' + Description: å…许或ç¦æ­¢ä½¿ç”¨éŸ³ç¬¦ç›’ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: note + - '&e用法: &6/res set/pset <领地å称> note true/false/remove' nodurability: - Description: 物å“ä¸ä¼šæŸå¤±è€ä¹… + Translated: 'nodurability - è€ä¹…ä¸æŸè€—' + Description: 'ä¿æŒæˆ–ä¸ä¿æŒç‰©å“è€ä¹…度' Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: nodurability + - '&e用法: &6/res set <领地å称> nodurability true/false/remove' overridepvp: - Description: 覆盖任何æ’件的 PVP ä¿æŠ¤ + Translated: 'overridepvp - 覆盖其他æ’件PVP' + Description: 覆盖或ä¸è¦†ç›–其他æ’件的PVPä¿æŠ¤ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: overridepvp + - '&e用法: &6/res set <领地å称> overridepvp true/false/remove' pressure: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨åŽ‹åŠ›æ¿ + Translated: 'pressure - 使用压力æ¿' + Description: å…许或ç¦æ­¢ä½¿ç”¨åŽ‹åŠ›æ¿ Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: pressure + - '&e用法: &6/res set/pset <领地å称> pressure true/false/remove' piston: - Description: å…许或ç¦æ­¢æ´»å¡žæŽ¨æ‹‰æ–¹å— + Translated: 'piston - 使用活塞' + Description: å…许或ç¦æ­¢æ´»å¡žå·¥ä½œ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: piston + - '&e用法: &6/res set <领地å称> piston true/false/remove' pistonprotection: - Description: å…许或者ç¦æ­¢æ´»å¡žä»Žé¢†åœ°å¤–æŽ¨åŠ¨é¢†åœ°å†…çš„æ–¹å— + Translated: 'pistonprotection - 阻止领地外活塞' + Description: '阻止或å…许领地外的活塞推/拉至领地内, True表示阻止' Info: - - '&e用法: &6/res set <领地> pistonprotection true/false/remove' - Translated: pistonprotection + - '&e用法: &6/res set <领地å称> pistonprotection true/false/remove' place: - Description: åªå…许或ç¦æ­¢æ”¾ç½®æ–¹å—, 该æƒé™è¦†ç›– build æƒé™ + Translated: 'place - 放置' + Description: 'å…许或ç¦æ­¢æ”¾ç½®æ–¹å—, 该æƒé™è¦†ç›– build æƒé™' Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: place + - '&e用法: &6/res set/pset <领地å称> place true/false/remove' pvp: - Description: å…许或ç¦æ­¢é¢†åœ°å†… PVP + Translated: 'pvp - PVP' + Description: å…许或ç¦æ­¢PVP Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: pvp + - '&e用法: &6/res set <领地å称> pvp true/false/remove' rain: - Description: 设置领地天气为下雨 + Translated: 'rain - ä¿æŒé›¨å¤©' + Description: 领地ä¿æŒé›¨å¤© Info: - - '&e用法: &6/res set <领地> rain true/false/remove' - Translated: rain + - '&e用法: &6/res set <领地å称> rain true/false/remove' redstone: - Description: 给予 lever, diode, button, pressure å’Œ note æƒé™ + Translated: 'redstone - 红石' + Description: '给予 lever, diode, button, pressure å’Œ note æƒé™' Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' + - '&e用法: &6/res set/pset <领地> redstone true/false/remove' respawn: - Description: 自动é‡ç”ŸçŽ©å®¶ + Translated: 'respawn - 自动å¤æ´»' + Description: å…许或ç¦æ­¢è‡ªåŠ¨å¤æ´»çŽ©å®¶ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: respawn + - '&e用法: &6/res set <领地å称> respawn true/false/remove' riding: - Description: 阻止骑乘马匹 + Translated: 'riding - 骑马' + Description: å…许或ç¦æ­¢éª‘马 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: riding + - '&e用法: &6/res set/pset <领地å称> riding true/false/remove' shoot: - Description: å…许或ç¦æ­¢åœ¨é¢†åœ°å†…射击 + Translated: 'shoot - 射击' + Description: å…许或ç¦æ­¢ä½¿ç”¨å¼“箭射击, 使用喷溅型è¯æ°´ç­‰ Info: - - '&e用法: &6/res set <领地> shoot true/false/remove' - Translated: shoot + - '&e用法: &6/res set <领地å称> shoot true/false/remove' sun: - Description: 设置领地天气为晴天 + Translated: 'sun - ä¿æŒæ™´å¤©' + Description: 领地ä¿æŒæ™´å¤© Info: - - '&e用法: &6/res set <领地> sun true/false/remove' - Translated: sun + - '&e用法: &6/res set <领地å称> sun true/false/remove' shop: - Description: 将领地设置为商店 + Translated: 'shop - 领地商店' + Description: 将领地添加到领地商店列表中 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: shop + - '&e用法: &6/res set <领地å称> shop true/false/remove' snowtrail: - Description: 防止雪傀儡留下雪轨迹 + Translated: 'snowtrail - 雪傀儡生æˆé›ªè¿¹' + Description: å…许或ç¦æ­¢é›ªå‚€å„¡ç”Ÿæˆé›ªè¿¹ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: snowtrail + - '&e用法: &6/res set <领地å称> snowtrail true/false/remove' spread: - Description: 防止方å—扩散 + Translated: 'spread - æ–¹å—蔓延' + Description: å…许或ç¦æ­¢æ–¹å—蔓延 Info: - - '&e用法: &6/res set <领地> spread true/false/remove' - Translated: spread + - '&e用法: &6/res set <领地å称> spread true/false/remove' snowball: - Description: 防止雪çƒå‡»é€€æ•ˆæžœ + Translated: 'snowball - 雪çƒå‡»é€€' + Description: å…许或ç¦æ­¢é›ªçƒå‡»é€€ Info: - - '&e用法: &6/res set <领地> snowball true/false/remove' - Translated: snowball + - '&e用法: &6/res set <领地å称> snowball true/false/remove' sanimals: - Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼å’Œåˆ·æ€ªè›‹ç”ŸæˆåŠ¨ç‰© + Translated: 'sanimals - 刷怪笼或刷怪蛋生æˆåŠ¨ç‰©' + Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼æˆ–刷怪蛋生æˆåŠ¨ç‰© Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: sanimals + - '&e用法: &6/res set <领地å称> sanimals true/false/remove' shear: + Translated: 'shear - 剪羊毛' Description: å…许或ç¦æ­¢å‰ªç¾Šæ¯› Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: shear + - '&e用法: &6/res set/pset <领地å称> shear true/false/remove' smonsters: - Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼å’Œåˆ·æ€ªè›‹ç”Ÿæˆæ€ªç‰© + Translated: 'smonsters - 刷怪笼或刷怪蛋生æˆæ€ªç‰©' + Description: å…许或ç¦æ­¢åˆ·æ€ªç¬¼æˆ–刷怪蛋生æˆæ€ªç‰© Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: smonsters + - '&e用法: &6/res set <领地å称> smonsters true/false/remove' subzone: - Description: å…许玩家建立领地å­åŒºåŸŸ + Translated: 'subzone - 创建å­é¢†åœ°' + Description: å…许或ç¦æ­¢åˆ›å»ºå­é¢†åœ° Info: - - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' - Translated: subzone + - '&e用法: &6/res set/pset <领地å称> subzone true/false/remove' + title: + Translated: 'title - æ示消æ¯' + Description: 显示或éšè—领地进入/离开æç¤ºæ¶ˆæ¯ + Info: + - '&e用法: &6/res set <领地å称> title true/false/remove' table: - Description: å…许或ç¦æ­¢çŽ©å®¶ä½¿ç”¨å·¥ä½œå° + Translated: 'table - 工作å°' + Description: å…许或ç¦æ­¢ä½¿ç”¨å·¥ä½œå° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: table + - '&e用法: &6/res set/pset <领地å称> table true/false/remove' tnt: - Description: å…许或ç¦æ­¢ TNT 爆炸 + Translated: 'tnt - TNT爆炸' + Description: å…许或ç¦æ­¢TNT爆炸 Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: tnt + - '&e用法: &6/res set <领地å称> tnt true/false/remove' tp: - Description: å…许或ç¦æ­¢ä¼ é€è‡³æ­¤é¢†åœ° + Translated: 'tp - ä¼ é€åˆ°é¢†åœ°' + Description: å…许或ç¦æ­¢ä¼ é€åˆ°é¢†åœ° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: tp + - '&e用法: &6/res set/pset <领地å称> tp true/false/remove' trade: - Description: å…许或ç¦æ­¢æ‘民交易 + Translated: 'trade - 与æ‘民交易' + Description: å…许或ç¦æ­¢ä¸Žæ‘民交易 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: trade + - '&e用法: &6/res set/pset <领地å称> trade true/false/remove' trample: - Description: å…许或ç¦æ­¢è¸©å耕地 + Translated: 'trample - 踩è¸è€•åœ°' + Description: å…许或ç¦æ­¢è¸©è¸è€•åœ° Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: trample + - '&e用法: &6/res set <领地å称> trample true/false/remove' trusted: - Description: 给予 build, use, move, container å’Œ tp æƒé™ + Translated: 'trusted - ä¿¡ä»»' + Description: '给予 build, use, move, container å’Œ tp æƒé™' Info: - '&e用法: &6/res pset <领地> [æƒé™] true/false/remove' use: - Description: å…许或ç¦æ­¢ä½¿ç”¨é—¨, 拉æ†, 按钮等... + Translated: 'use - 控制一些交互æƒé™' + Description: å…许或ç¦æ­¢ä½¿ç”¨é—¨, æ æ†, 按钮等 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: use + - '&e用法: &6/res set/pset <领地å称> use true/false/remove' vehicledestroy: + Translated: 'vehicledestroy - ç ´å载具' Description: å…许或ç¦æ­¢ç ´å载具 Info: - - '&e用法: &6/res set/pset <领地> [æƒé™] true/false/remove' - Translated: vehicledestroy + - '&e用法: &6/res set/pset <领地å称> vehicledestroy true/false/remove' witherspawn: - Description: å…许或ç¦æ­¢å‡‹é›¶çš„ç”Ÿæˆ + Translated: 'witherspawn - 凋零生æˆ' + Description: å…许或ç¦æ­¢å‡‹é›¶ç”Ÿæˆ Info: - - '&e用法: &6/res set <领地> witherspawn true/false/remove' - Translated: witherspawn + - '&e用法: &6/res set <领地å称> witherspawn true/false/remove' + phantomspawn: + Translated: 'phantomspawn - 幻翼生æˆ' + Description: å…许或ç¦æ­¢å¹»ç¿¼ç”Ÿæˆ + Info: + - '&e用法: &6/res set <领地å称> phantomspawn true/false/remove' witherdamage: - Description: ç¦æ­¢å‡‹çµé€ æˆä¼¤å®³ + Translated: 'witherdamage - 凋零伤害' + Description: å…许或ç¦æ­¢å‡‹é›¶é€ æˆä¼¤å®³ Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: witherdamage + - '&e用法: &6/res set <领地å称> witherdamage true/false/remove' witherdestruction: + Translated: 'witherdestruction - 凋零破å' Description: å…许或ç¦æ­¢å‡‹é›¶ç ´åæ–¹å— Info: - - '&e用法: &6/res set <领地> witherdestruction true/false/remove' - Translated: witherdestruction + - '&e用法: &6/res set <领地å称> witherdestruction true/false/remove' waterflow: - Description: å…许或ç¦æ­¢æ°´æµåŠ¨, 该æƒé™è¦†ç›– flow æƒé™ + Translated: 'waterflow - æ°´æµåŠ¨' + Description: 'å…许或ç¦æ­¢æ°´æ‰©æ•£, 该æƒé™è¦†ç›– flow æƒé™' Info: - - '&e用法: &6/res set <领地> [æƒé™] true/false/remove' - Translated: waterflow + - '&e用法: &6/res set <领地å称> waterflow true/false/remove' wspeed1: - Description: 设置领地内玩家的行走速度为 %1 + Translated: 'wspeed1 - 移动速度' + Description: '设置移动速度为 %1' Info: - - '&e用法: &6/res set <领地> wspeed1 true/false/remove' - Translated: wspeed1 + - '&e用法: &6/res set <领地å称> wspeed1 true/false/remove' wspeed2: - Description: 设置领地内玩家的行走速度为 %1 + Translated: 'wspeed2 - 移动速度' + Description: '设置移动速度为 %1' Info: - - '&e用法: &6/res set <领地> wspeed2 true/false/remove' - Translated: wspeed2 - anchor: - Translated: anchor - Description: å…许或阻止玩家使用é‡ç”Ÿé”š - Info: - - '&e用法: &6/res set/pset <领地> anchor true/false/remove' + - '&e用法: &6/res set <领地å称> wspeed2 true/false/remove' safezone: - Translated: safezone - Description: 设置为trueæ¥è®©çŽ©å®¶å…é­è´Ÿé¢è¯æ°´æ•ˆæžœå½±å“ + Translated: 'safezone - 安全区域' + Description: '清除玩家的负é¢è¯æ°´æ•ˆæžœ' Info: - '&e用法: &6/res set <领地> safezone true/false/remove' - honey: - Translated: honey - Description: å…许或阻止玩家获得蜂蜜 - Info: - - '&e用法: &6/res set/pset <领地> honey true/false/remove' - honeycomb: - Translated: honeycomb - Description: å…许或阻止玩家获得蜂巢 - Info: - - '&e用法: &6/res set/pset <领地> honeycomb true/false/remove' brush: - Translated: brush - Description: å…许或阻止方å—笔刷的使用 + Translated: 'brush - æ–¹å—笔刷' + Description: å…许或ç¦æ­¢ä½¿ç”¨æ–¹å—笔刷 Info: - '&e用法: &6/res set/pset <领地> brush true/false/remove' - copper: - Translated: copper - Description: å…许或阻止改å˜é“œå—çŠ¶æ€ - Info: - - '&e用法: &6/res set/pset <领地> copper true/false/remove' - elytra: - Translated: elytra - Description: å…许或阻止玩家在领地使用鞘翅 - Info: - - '&e用法: &6/res set/pset <领地> elytra true/false/remove' - friendlyfire: - Translated: friendlyfire - Description: å…许或阻止å‹ä¼¤ - Info: - - '&e用法: &6/res pset <领地> friendlyfire true/false/remove' harvest: - Translated: harvest - Description: å…许收获作物 + Translated: 'harvest - 收获作物' + Description: å…许或ç¦æ­¢æ”¶èŽ·ä½œç‰© Info: - '&e用法: &6/res set/pset <领地> harvest true/false/remove' - nametag: - Translated: nametag - Description: å…许或阻止命å牌的使用 - Info: - - '&e用法: &6/res set/pset <领地> nametag true/false/remove' - title: - Translated: title - Description: 显示或éšè—é¢†åœ°çš„è¿›å‡ºä¿¡æ¯ - Info: - - '&e用法: &6/res set <领地> title true/false/remove' - phantomspawn: - Translated: phantomspawn - Description: å…è®¸æˆ–é˜»æ­¢å¹»ç¿¼ç”Ÿæˆ - Info: - - '&e用法: &6/res set <领地> phantomspawn true/false/remove' remove: Description: 删除领地 Info: - - '&e用法: &6/res remove <领地å>' + - '&e用法: &6/res remove [领地å称]' signupdate: - Description: 更新领地木牌 + Description: 更新领地告示牌 Info: - '&e用法: &6/res signupdate' current: - Description: 显示你目å‰æ‰€åœ¨çš„领地 + Description: 显示你当å‰æ‰€åœ¨çš„领地 Info: - '&e用法: &6/res current' reload: - Description: é‡è½½è¯­è¨€æˆ–é…置文件 + Description: é‡æ–°åŠ è½½é…置或语言文件 Info: - - '&e用法: &6/res reload [config/lang]' + - '&e用法: &6/res reload [config(é…ç½®)/lang(语言)/groups(组)/flags(æƒé™)]' + leaveraid: + Description: 离开袭击 + Info: + - '&e用法: &6/res leaveraid' setowner: Description: 改å˜é¢†åœ°æ‰€æœ‰è€… Info: - - '&e用法: &6/resadmin setowner [领地] [玩家]' + - '&e用法: &6/resadmin setowner [领地å称] [玩家å称] (-keepflags(ä¿æŒæƒé™))' + defend: + Description: 加入领地袭击的防守 + Info: + - '&e用法: &6/res defend [领地å称] <玩家å称>' + attack: + Description: 开始对领地进行袭击 + Info: + - '&e用法: &6/res attack [领地å称]' unstuck: Description: ä¼ é€åˆ°é¢†åœ°å¤–é¢ Info: - '&e用法: &6/res unstuck' subzone: - Description: 在领地中创建å­åŒºåŸŸ + Description: 在领地中创建å­é¢†åœ° Info: - - '&e用法: &6/res subzone <领地å> [å­åŒºåŸŸå]' - - 如果领地å留空, 将会å°è¯•åœ¨çŽ©å®¶æ‰€å¤„领地中建立å­åŒºåŸŸ + - '&e用法: &6/res subzone <领地å称> [å­é¢†åœ°å称]' + - '将在指定或当å‰é¢†åœ°ä¸­å»ºç«‹å­é¢†åœ°' removeworld: Description: 删除指定世界中的所有领地 Info: - - '&e用法: &6/res removeworld [世界å]' + - '&e用法: &6/res removeworld [世界å称] <例外玩家>' - åªèƒ½åœ¨æŽ§åˆ¶å°æ‰§è¡Œæ­¤å‘½ä»¤ limits: Description: 显示你的领地é™åˆ¶ Info: - - '&e用法: &6/res limits' + - '&e用法: &6/res limits <玩家å称>' - 显示你在创建和管ç†é¢†åœ°æ–¹é¢çš„å„ç§é™åˆ¶ set: - Description: 为领地设置默认æƒé™ + Description: 为领地设置公共æƒé™ Info: - - '&e用法: &6/res set <领地> [æƒé™] [true/false/remove]' - - 输入 /res flags ? 查看æƒé™åˆ—表 - - 如果没有为æŸçŽ©å®¶æŒ‡å®šè¯¥é¢†åœ°çš„特定æƒé™, 那么这å玩家将会拥有这些默认æƒé™. (å‚è§ /res pset ?) + - '&e用法: &6/res set <领地å称> [æƒé™] [true/false/remove]' + - '输入 /res flags ? 查看æƒé™åˆ—表' + - '如果没有为玩家指定该领地的特定æƒé™, 那么这å玩家将会拥有这些公共æƒé™ã€‚(å‚è§ /res pset ?)' clearflags: - Description: 删除领地所有æƒé™ + Description: 清除领地所有æƒé™ Info: - - '&e用法: &6/res clearflags <领地>' + - '&e用法: &6/res clearflags <领地å称>' message: - Description: 管ç†é¢†åœ°åŠ å…¥ / ç¦»å¼€æ¶ˆæ¯ - Info: - - '&e用法: &6/res message <领地> [enter/leave] [消æ¯]' - - 设置领地加入和离开的消æ¯æ–‡æœ¬ - - '&e用法: &6/res message <领地> remove [enter/leave]' - - 移除加入或离开的消æ¯æ–‡æœ¬ + Description: '管ç†åŠ å…¥/离开领地时的æ示消æ¯' + Info: + - '&e用法: &6/res message <领地å称> [enter(进入)/leave(离开)] [消æ¯æ–‡æœ¬]' + - '&e用法: &6/res message <领地å称> remove [enter(进入)/leave(离开)]' + - '清除进入/离开时的æ示消æ¯' + - '%player 表示玩家å称' + - '%playerDisplay 表示玩家的展示å称' + - '%owner 表示领地所有者å称' + - '%residence 表示领地å称' + - '%zone 表示ä¸åŒ…å«çˆ¶é¢†åœ°å称的领地å称' + - '消æ¯æ–‡æœ¬ç•™ç©ºè¡¨ç¤ºç¦ç”¨æ示消æ¯' command: Description: 管ç†é¢†åœ°å…许或者ç¦æ­¢çš„命令 Info: - - '&e用法: &6/res command <领地> ' - - 使用 _ æ¥è¡¨ç¤ºå¤šä¸ªå˜é‡ + - '&e用法: &6/res command <领地å称> <命令>' + - 想è¦ç§»é™¤æ·»åŠ çš„命令åªéœ€è¦é‡æ–°è¾“入一次å³å¯ç§»é™¤ + - '使用 _ æ¥è¡¨ç¤ºå¤šä¸ªå˜é‡' + - '&e用法: &6/res command <领地å称> ' confirm: Description: 确认删除领地 Info: - '&e用法: &6/res confirm' - - 确认删除一个领地 + - 确认删除指定领地 resadmin: - Description: 关闭或者开å¯é¢†åœ°ç®¡ç† + Description: 关闭或者开å¯é¢†åœ°ç®¡ç†å‘˜ Info: - '&e用法: &6/res resadmin [on/off]' tpset: - Description: 设定领地的传é€ç‚¹ + Description: 设置领地的传é€ç‚¹ Info: - '&e用法: &6/res tpset' - - 该命令将会把你站的ä½ç½®è®¾ç½®ä¸ºé¢†åœ°çš„ä¼ é€ç‚¹ + - 该命令将会把你所在的ä½ç½®è®¾ç½®ä¸ºé¢†åœ°çš„ä¼ é€ç‚¹ - 你必须站在一个领地里æ‰èƒ½ä½¿ç”¨è¿™ä¸ªå‘½ä»¤ - - 你必须是领地的所有者或者拥有领地的 +admin æƒé™ + - '你必须是领地所有者或者管ç†å‘˜' tpconfirm: - Description: 忽略ä¸å®‰å…¨ä¼ é€è­¦å‘Š + Description: 忽略传é€è­¦å‘Š Info: - '&e用法: &6/res tpconfirm' - - 强制传é€åˆ°é¢†åœ°, 忽略传é€ä¸å®‰å…¨çš„警告 + - '忽略传é€ä¸å®‰å…¨çš„警告, ä¼ é€åˆ°æŒ‡å®šé¢†åœ°' removeall: - Description: 移除æŸçŽ©å®¶çš„所有领地 + Description: 删除玩家的所有领地 Info: - - '&e用法: &6/res removeall [所有者]' - - 移除特定玩家的所有领地 - - 如果是移除其他玩家的领地, 你必须有 /resadmin 命令æƒé™ + - '&e用法: &6/res removeall [玩家å称]' + - 删除玩家拥有的所有领地 + - '如果è¦åˆ é™¤å…¶ä»–玩家的领地, 你必须有 /resadmin 命令æƒé™' material: - Description: 检查æ质是å¦å­˜åœ¨å¯¹åº”çš„ID + Description: 通过ID查看是å¦å­˜åœ¨å¯¹åº”çš„ææ–™ Info: - - '&e用法: &6/res material [material]' + - '&e用法: &6/res material [ææ–™ID]' kick: Description: 将玩家踢出领地 Info: - - '&e用法: &6/res kick <玩家>' + - '&e用法: &6/res kick <玩家å称>' - 你必须是领地所有者或者管ç†å‘˜ - 玩家必须在线 sublist: - Description: 列出所有领地å­åŒºåŸŸ + Description: 列出指定领地的所有å­é¢†åœ° Info: - - '&e用法: &6/res sublist <领地> <页ç >' - - 列出所有领地å­åŒºåŸŸ + - '&e用法: &6/res sublist <领地å称> <页ç >' rename: Description: é‡å‘½å领地 Info: - - '&e用法: &6/res rename [领地åå­—] [æ–°åå­—]' + - '&e用法: &6/res rename [æ—§å称] [æ–°å称]' - 你必须是领地所有者或者管ç†å‘˜ - - 新领地åå­—ä¸èƒ½ä¸Žå…¶ä»–领地é‡å¤ + - 新领地å称ä¸èƒ½ä¸Žå…¶ä»–领地é‡å¤ + setallfor: + Description: 设置指定玩家的所有领地的公共æƒé™ + Info: + - '&e用法: &6/res setallfor [玩家å称] [æƒé™] [true/false/remove]' lease: Description: 管ç†é¢†åœ°ç§Ÿçº¦ Info: - - '&e用法: &6/res lease [renew/cost] [领地]' - - /res lease cost 显示续租领地的花费 - - /res lease renew 将会续租指定的领地 + - '&e用法: &6/res lease cost [领地å称]' + - '显示续租的价格' + - '&e用法: &6/res lease renew [领地å称]' + - '续租指定的领地' SubCommands: set: - Description: 设置租约时间 + Description: 设置租用时间 Info: - - '&e用法: &6/resadmin lease set [领地] [#days/infinite]' - - 将租约时间设置为特定天数或者无é™åˆ¶ + - '&e用法: &6/resadmin lease set [领地å称] [天数/infinite(æ— é™)]' + - å°†ç§Ÿç”¨æ—¶é—´è®¾ç½®ä¸ºæŒ‡å®šå¤©æ•°æˆ–è€…æ— é™ renew: - Description: 续期租约时间 + Description: 续租领地 Info: - - '&e用法: &6/resadmin lease renew <领地>' - - 续期当å‰æˆ–指定的领地租约 + - '&e用法: &6/resadmin lease renew <领地å称>' + - 续租指定或当å‰é¢†åœ° list: - Description: 显示当å‰é¢†åœ°çš„租借列表 + Description: 显示领地的租用列表 Info: - - '&e用法: &6/resadmin lease list <领地> ' - - Prints out all subzones lease times + - '&e用法: &6/resadmin lease list <领地å称> <页ç >' + - 列出当å‰é¢†åœ°çš„所有å­é¢†åœ°çš„租用时间 expires: - Description: 租约过期时间 + Description: 租约到期时间 Info: - - '&e用法: &6/resadmin lease expires <领地>' - - 显示领地租约过期的时间 + - '&e用法: &6/resadmin lease expires <领地å称>' + - 显示领地租约到期的时间 cost: - Description: 显示续租花费 + Description: 显示续租价格 Info: - - '&e用法: &6/resadmin lease cost <领地>' - - 显示续租领地所需的花费 + - '&e用法: &6/resadmin lease cost <领地å称>' tp: - Description: ä¼ é€åˆ°ä¸€ä¸ªé¢†åœ° + Description: ä¼ é€åˆ°é¢†åœ° Info: - - '&e用法: &6/res tp [residence]' - - 将你传é€åˆ°ä¸€ä¸ªé¢†åœ°, 你必须是领地所有者或者拥有领地 +tp æƒé™ + - '&e用法: &6/res tp [领地å称]' + - '将你传é€åˆ°ä¸€ä¸ªé¢†åœ°, 你必须是领地所有者或者拥有该领地 tp æƒé™' - ä½ çš„æƒé™ç»„也必须在æœåŠ¡å™¨ä¸­æœ‰ä¼ é€æƒé™ + setall: + Description: 设置所有领地的公共æƒé™ + Info: + - '&e用法: &6/res setall [æƒé™] [true/false/remove]' resreload: - Description: é‡è½½ Residence. + Description: é‡æ–°åŠ è½½é¢†åœ°æ’件 Info: - '&e用法: &6/resreload' resload: Description: 加载领地存档文件 Info: - '&e用法: &6/resload' - - 该命令ä¸å®‰å…¨! 它ä¸ä¼šå…ˆä¿å­˜é¢†åœ°çŠ¶æ€. - - 对领地åšå‡ºæ”¹å˜åŽé‡æ–°åŠ è½½å­˜æ¡£. + - 在对领地åšå‡ºæ”¹å˜åŽé‡æ–°åŠ è½½å­˜æ¡£ + - '该命令ä¸å®‰å…¨! 它ä¸ä¼šå…ˆä¿å­˜é¢†åœ°çŠ¶æ€' placeholders: + Description: 列出 Placeholder 列表 Info: - - '&e用法: &6/res placeholders (parse) (å˜é‡) (玩家å)' - Description: 列出å˜é‡ - parse: '[result]' - raid: - Info: - - '&e用法: &6/res raid start [resname] (playerName)' - - '&6/res raid stop [resname]' - - '&6/res raid kick [playerName]' - - '&6/res raid immunity [add/take/set/clear] [resname/currentres] [time]' - Description: 控制领地的袭击 - raidstatus: - Info: - - '&e用法: &6/res raidstatus (resName/playerName)' - Description: æ£€æŸ¥ä¸€ä¸ªé¢†åœ°çš„è¢­å‡»çŠ¶æ€ - leaveraid: - Info: - - '&e用法: &6/res leaveraid' - Description: 离开袭击 - defend: - Info: - - '&e用法: &6/res defend [resName] (playerName)' - Description: 加入一个领地的袭击ä¿å« - attack: - Description: 开始一个领地的袭击 - Info: - - '&e用法: &6/res attack [resName]' - setallfor: - Info: - - '&e用法: &6/res setallfor [playerName] [flag] [true/false/remove]' - Description: 设置æŸä¸ªçŽ©å®¶æ‰€æœ‰é¢†åœ°çš„标志 - setall: - Info: - - '&e用法: &6/res setall [flag] [true/false/remove]' - Description: 设置所有领地的标志 + - '&e用法:&6/res placeholders <玩家å称>' + parse: '[result]' \ No newline at end of file From 12049abb7b14095f16cc35a8818831275f17b20f Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 20 Sep 2023 20:16:53 +0300 Subject: [PATCH 1067/1142] Ukrainian locale update by stefanbanderovych --- src/Language/Ukrainian.yml | 1824 ++++++++++++++++++++++++++++++++++++ 1 file changed, 1824 insertions(+) create mode 100644 src/Language/Ukrainian.yml diff --git a/src/Language/Ukrainian.yml b/src/Language/Ukrainian.yml new file mode 100644 index 000000000..c0ed62065 --- /dev/null +++ b/src/Language/Ukrainian.yml @@ -0,0 +1,1824 @@ +# of this file and modify that instead. This file will be updated automatically by Residence +# when a newer version is detected, and your changes will be overwritten. Once you +# have a copy of this file, change the Language: option under the Residence config.yml +# to whatever you named your copy. + +Language: + Invalid: + Player: '&cÐедійÑне ім''Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ...' + PlayerOffline: '&cГравець офлайн' + World: '&cÐедійÑний Ñвіт...' + Residence: '&cÐедійÑне міÑце проживаннÑ...' + Subzone: '&cÐедійÑна підзона...' + Direction: '&cÐедійÑний напрÑмок...' + Amount: '&cÐедійÑна Ñума...' + Cost: '&cÐедійÑна вартіÑÑ‚ÑŒ...' + Days: '&cÐедійÑна кількіÑÑ‚ÑŒ днів...' + Material: '&cÐедійÑний матеріал...' + Boolean: '&cÐедійÑне значеннÑ, має бути &6true(t) &cабо &6false(f)' + Area: '&cÐедійÑна облаÑÑ‚ÑŒ...' + Group: '&cÐедійÑна група...' + MessageType: '&cТип Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути enter або remove.' + Flag: '&cÐедійÑний прапор...' + FlagType: + Fail: '&cÐедійÑний прапор... Цей прапор можна викориÑтовувати лише на %1' + Player: Гравець + Residence: Ð ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ + FlagState: '&cÐедійÑний Ñтан прапора, має бути &6true(t)&c, &6false(f)&c, або &6remove(r)' + List: '&eÐевідомий тип ÑпиÑку, має бути &6blacklist &eабо &6ignorelist.' + Page: '&eÐедійÑна Ñторінка...' + Help: '&cÐедійÑна Ñторінка довідки...' + NameCharacters: '&cÐазва міÑтить недозволені Ñимволи...' + PortalDestination: '&cПункт Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ð°Ð»Ñƒ знаходитьÑÑ Ð² зоні обмеженого доÑтупу. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ð°Ð»Ñƒ + ÑкаÑовано. &7Знайти нове міÑце' + FromConsole: '&cВи можете викориÑтовувати це лише в конÑолі!' + Ingame: '&cВи можете викориÑтовувати це лише в грі!' + Location: '&cÐедійÑне розташуваннÑ...' + Area: + Exists: '&cÐазва облаÑÑ‚Ñ– вже Ñ–Ñнує.' + Create: '&eРайон Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ñтворено, ID &6%1' + DiffWorld: '&cРайон знаходитьÑÑ Ð² іншому Ñвіті, ніж міÑце проживаннÑ.' + Collision: '&cÐ¢ÐµÑ€Ð¸Ñ‚Ð¾Ñ€Ñ–Ñ ÑтикаєтьÑÑ Ð· міÑцем Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ &6%1' + TooClose: '&cÐадто близько до іншого помешканнÑ. Вам потрібен принаймні &e%1 &cпроміжок блоків.' + SubzoneCollision: '&cОблаÑÑ‚ÑŒ ÑтикаєтьÑÑ Ð· підзоною &6%1' + NonExist: '&cТакої території не Ñ–Ñнує.' + InvalidName: '&cÐедійÑна назва облаÑÑ‚Ñ–...' + ToSmallX: '&cВаша &6X &cдовжина вибору (&6%1&c) замала. &eДозволено &6%2 + &eÑ– більше.' + ToSmallY: '&cВаша виÑота Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ (&6%1&c) замала. &eДозволено &6%2 &eÑ– + більше.' + ToSmallZ: '&cВаша &6Z &cдовжина Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ (&6%1&c) замала. &eДозволено &6%2 + &eÑ– більше.' + ToBigX: '&cВаша &6X &cдовжина Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ (&6%1&c) завелика. &eДозволено &6%2 &eÑ– + менше.' + ToBigY: '&cВаша виÑота Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ (&6%1&c) завелика. &eДозволено &6%2 &eÑ– менше.' + ToBigZ: '&cВаша &6Z &cдовжина Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ (&6%1&c) завелика. &eДозволено &6%2 &eÑ– + менше.' + Rename: '&eПерейменовано облаÑÑ‚ÑŒ &6%1 &eна &6%2' + Remove: '&eВидалено облаÑÑ‚ÑŒ &6%1...' + Name: '&eІм''Ñ: &2%1' + ListAll: '&a{&eID:&c%1 &eP1:&c(%2,%3,%4) &eP2:&c(%5,%6,%7) &e(Розмір:&c%8&e)&a}' + RemoveLast: '&cÐеможливо видалити оÑтанню облаÑÑ‚ÑŒ у резиденції.' + NotWithinParent: '&cОблаÑÑ‚ÑŒ не входить до батьківÑької облаÑÑ‚Ñ–.' + Update: '&eПлоща оновлена...' + MaxPhysical: '&eВи доÑÑгли макÑимальної фізичної площі, дозволеної Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ проживаннÑ.' + SizeLimit: '&eРозмір облаÑÑ‚Ñ– не входить у ваші дозволені обмеженнÑ.' + HighLimit: '&cВи не можете захиÑтити цю виÑоту, ваш ліміт Ñтановить &6%1' + LowLimit: '&cВи не можете захиÑтити цю глибину, ваш ліміт Ñтановить &6%1' + WeirdShape: '&3Ð ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð½Ðµ в правильному виглÑді. &6%1 &3Ñторона дорівнює &6%2 &3разів + більше ніж &6%3 &3Ñторона' + Select: + Points: '&eПерш ніж викориÑтовувати цю команду, виберіть дві точки!' + Overlap: '&cВибрані точки збігаютьÑÑ Ð· &6%1 &cрегіоном!' + WorldGuardOverlap: '&cВибрані точки збігаютьÑÑ Ð· регіоном &6%1 &cWorldGuard!' + KingdomsOverlap: '&cВибрані точки збігаютьÑÑ Ð· &6%1 &cKingdoms land!' + Success: '&eВибір уÑпішний!' + Fail: '&cÐедійÑна команда вибору...' + Bedrock: '&eВибір розширено до найнижчої дозволеної межі.' + Sky: '&eВибір розширено до макÑимально допуÑтимої межі.' + Area: '&eВибрана ділÑнка &6%1 &eÐ¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ &6%2' + Tool: '&e- ІнÑтрумент виділеннÑ: &6%1' + PrimaryPoint: '&eРозміщено &6ОÑновну &eТочку вибору %1' + SecondaryPoint: '&eРозміщено &6Додаткову &eТочку вибору %1' + Primary: '&eПервинний вибір: &6%1' + Secondary: '&eВторинний вибір: &6%1' + TooHigh: '&cПопередженнÑ, виділено вище верхньої чаÑтини карти, обмеженнÑ.' + TooLow: '&cПопередженнÑ, вибір опуÑтивÑÑ Ð½Ð¸Ð¶Ñ‡Ðµ нижньої чаÑтини карти, обмеженнÑ.' + TotalSize: '&eЗагальний розмір вибору: &6%1' + AutoEnabled: '&eРежим автоматичного вибору &6УВІМК&e. Щоб вимкнути його, напишіть &6/res + select auto' + AutoDisabled: '&eРежим автоматичного вибору &6ВИМК&e. Щоб увімкнути його, напишіть + &6/res select auto' + Disabled: '&cВи не маєте доÑтупу до команд вибору' + Sign: + Updated: '&6%1 &eзнаки оновлені!' + TopLine: '[market]' + DateFormat: YY/MM/dd HH:mm + ForRentTopLine: '&0Ð’ оренду' + ForRentPriceLine: '&0%1&f/&0%2&f/&0%3' + ForRentResName: '&0%1' + ForRentBottomLine: '&9ДоÑтупний' + RentedAutorenewTrue: '&2%1' + RentedAutorenewFalse: '&c%1' + RentedTopLine: '%1' + RentedPriceLine: '&0%1&f/&0%2&f/&0%3' + RentedResName: '&0%1' + RentedBottomLine: '&1%1' + ForSaleTopLine: '&0Ðа продаж' + ForSalePriceLine: '&0%1' + ForSaleResName: '&0%1' + ForSaleBottom: '&0%1m³' + LookAt: '&cВи не дивитеÑÑŒ на знак' + TooMany: '&cЗабагато знаків Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— резиденції' + ResName: '&0%1' + Owner: '&0%1' + Raid: + NotEnabled: '&cÐ¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ñ€ÐµÐ¹Ð´Ñƒ не ввімкнена!' + NotIn: '&cВи не в рейді!' + CantLeave: '&cВи не можете залишити (%1) влаÑну рейдову резиденцію!' + CantKick: '&cÐе можу вигнати (%1) влаÑника резиденції!' + Kicked: '&eВигнано &7%1 &eз &7%2 &eрейду резиденції!' + StartsIn: '&7Рейд починаєтьÑÑ Ñ‡ÐµÑ€ÐµÐ·: [autoTimeLeft] &2%1D &4%2A' + EndsIn: '&cРейд закінчуєтьÑÑ Ñ‡ÐµÑ€ÐµÐ·: [autoTimeLeft] &2%1D &4%2A' + Ended: '&7Рейд на &4%1 &7завершено!' + cantDo: '&cÐе можна це робити під Ñ‡Ð°Ñ Ñ€ÐµÐ¹Ð´Ñƒ!' + left: '&7Ви залишили &4%1 &7рейж' + noFlagChange: '&cÐеможливо змінити прапори під Ñ‡Ð°Ñ Ñ€ÐµÐ¹Ð´Ñƒ' + noRemoval: '&cÐеможливо видалити резиденцію під Ñ‡Ð°Ñ Ñ€ÐµÐ¹Ð´Ñƒ' + immune: '&eІмунітет Ð´Ð»Ñ Ð½Ð°Ñтупного %1' + notImmune: '&eБільше немає імунітету' + notInRaid: '&eГравець не в рейді' + attack: + Joined: '&7ПриєднавÑÑ Ð´Ð¾ &2%1 &7рейду!' + Started: '&7Рейд розпочато!' + cooldown: '&cЗанадто швидко Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ рейду на цю резиденцію! Зачекайте %1' + immune: '&cÐ¦Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð° від рейдів! Зачекайте %1' + playerImmune: '&cВлаÑник резиденції захищений від рейдерÑтва! Зачекайте %1' + isOffline: '&cÐеможливо провеÑти рейд, поки влаÑник офлайн!' + noSubzones: '&cÐе можна здійÑнювати набіги на підзони!' + noSelf: '&cÐе можна здійÑнити набіг на влаÑну резиденцію!' + alreadyInAnother: '&cÐеможливо приєднатиÑÑ Ð´Ð¾ цього рейду, ви вже в іншому (%1)' + defend: + Joined: '&7ПриєднавÑÑ Ð´Ð¾ &2%1 &7оборонних Ñил!' + Sent: '&7ЗаÑвка на учаÑÑ‚ÑŒ у рейдовій обороні відправлена, чекайте підтвердженнÑ' + Join: '&7ПриєднуйтеÑÑ Ð´Ð¾ &6%1 &7оборони рейду' + Invitation: '&7ПрийнÑти рейдовий захиÑÑ‚ від &6%1' + JoinedDef: '&2%1&7 приєднавÑÑ Ð´Ð¾ Ñил оборони!' + IsOffline: '&cÐеможливо приєднатиÑÑ Ð´Ð¾ команди захиÑту, поки влаÑник офлайн!' + noSelf: '&cВи вже захищаєте цю резиденцію' + notRaided: '&cМіÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð½Ðµ під рейдом' + alreadyInAnother: '&cÐе можна приєднатиÑÑ Ð´Ð¾ цієї резиденційної оборони, ви в іншій + одній (%1)' + status: + title: '&7----------- &f%1(%2) &7-----------' + immune: '&eІмунітет до рейдів Ð´Ð»Ñ Ð½Ð°Ñтупних: %1' + starts: '&7Рейд починаєтьÑÑ Ñ‡ÐµÑ€ÐµÐ·: %1' + attackers: '&7Рейдери: &4%1' + defenders: '&7ЗахиÑники: &4%1' + ends: '&7Рейд закінчуєтьÑÑ Ñ‡ÐµÑ€ÐµÐ·: %1' + canraid: '&2Можна провеÑти рейд' + raidin: '&eМожливий рейд у: %1' + stopped: '&eРейд на &6%1 &eзупинено' + info: + years: '&e%1 &6років ' + oneYear: '&e%1 &6рік ' + day: '&e%1 &6днів ' + oneDay: '&e%1 &6день ' + hour: '&e%1 &6години ' + oneHour: '&e%1 &6година ' + min: '&e%1 &6хв ' + sec: '&e%1 &6Ñек ' + listSplitter: ', ' + click: '&7ÐатиÑніть' + clickToConfirm: '&7ÐатиÑніть Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ' + server: + land: Server_Land + Flag: + p1Color: '&2' + p2Color: '&a' + haveColor: '&2' + havePrefix: '' + lackColor: '&7' + lackPrefix: '' + others: '&eта &2%1 &eінші' + Set: '&eПрапор (&6%1&e) вÑтановлено Ð´Ð»Ñ &6%2 &eна &6%3 &eÑтан' + SetFailed: '&cВи не маєте доÑтупу до &cфлагу &6%1' + CheckTrue: '&eПрапор &6%1 &eзаÑтоÑовуєтьÑÑ Ð´Ð»Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ &6%2 &eÐ´Ð»Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ &6%3&e, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ + = &6%4' + CheckFalse: '&eПрапор &6%1 &eне ÑтоÑуєтьÑÑ Ð³Ñ€Ð°Ð²Ñ†Ñ &6%2 &eÐ´Ð»Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ.' + Cleared: '&eПрапори видалено.' + RemovedAll: '&eУÑÑ– флаги видалено Ð´Ð»Ñ &6%1 &eу &6%2 &eрезиденції.' + RemovedGroup: '&eУÑÑ– позначки видалено Ð´Ð»Ñ &6%1 &eгрупи у &6%2 &eрезиденції.' + Default: '&eПрапори вÑтановлені за замовчуваннÑм.' + Deny: '&cУ Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” &6%1 &cдозвола<ів> тут.' + SetDeny: '&cВлаÑник не має доÑтупу до прапора &6%1' + ChangeDeny: '&cВи не можете змінити Ñтан прапора &6%1 &cпоки Ñ” &6%2 &cгравець(Ñ–) + вÑередині.' + ChangedForOne: '&eЗмінено прапор &6%1 &eÐ´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ— &6%2' + ChangedFor: '&eЗмінено &6%1 &eфлаг з &6%2 &eрезиденцій' + reset: '&eСкинути прапори Ð´Ð»Ñ &6%1 &eрезиденції' + resetAll: '&eСкинути вÑÑ– прапори Ð´Ð»Ñ &6%1 &eрезиденції' + Bank: + NoAccess: '&cУ Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” доÑтупу до банку.' + Name: ' &eБанк: &6%1' + NoMoney: '&cÐедоÑтатньо грошей у банку.' + Deposit: '&eВи вноÑли &6%1 &eв резидентний банк.' + Withdraw: '&eВи знÑли &6%1 &eіз резидентного банку.' + rentedWithdraw: '&cÐе можна вийти з банку орендованого житла.' + full: '&eБанк резиденції заповнений!' + Subzone: + Rename: '&eПерейменовано підзону &6%1 &eна &6%2' + Remove: '&eПідзону &6%1 &eвидалено.' + Create: '&eСтворено підзону &6%1' + CreateFail: '&cÐе вдалоÑÑ Ñтворити підзону &6%1' + Exists: '&cПідзона &6%1 &cвже Ñ–Ñнує.' + Collide: '&cПідзона ÑтикаєтьÑÑ Ð· підзоною &6%1' + MaxAmount: '&cВи доÑÑгли макÑимально дозволеної кількоÑÑ‚Ñ– підзон Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— резиденції.' + MaxDepth: '&cВи доÑÑгли макÑимально дозволеної глибини підзони.' + SelectInside: '&eОбидві точки відбору повинні бути вÑередині резиденції.' + CantCreate: '&cВи не маєте дозволу на ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´Ð·Ð¾Ð½Ð¸ резиденції.' + CantDelete: '&cУ Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” дозволу на Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´Ð·Ð¾Ð½Ð¸ резиденції.' + CantDeleteNotOwnerOfParent: '&cВи не Ñ” влаÑником батьківÑької резиденції, щоб видалити + підзону.' + CantContract: '&cВи не маєте дозволу на ÑƒÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ Ð´Ð¾Ð³Ð¾Ð²Ð¾Ñ€Ñƒ підзони проживаннÑ.' + CantExpand: '&cВи не маєте дозволу на Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´Ð·Ð¾Ð½Ð¸ проживаннÑ.' + DeleteConfirm: '&eВи впевнені, що хочете видалити підзону &6%1&e, викориÑтовуйте &6/res confirm + &eщоб підтвердити.' + OwnerChange: '&eВлаÑника підзони &6%1 &eзмінено на &6%2' + Residence: + DontOwn: '&eÐічого показати' + Hidden: ' &e(&6Прихований&e)' + Bought: '&eВи купили резиденцію &6%1' + Buy: '&6%1 &eкупив у Ð²Ð°Ñ &6%2 &eрезиденцію.' + BuyTooBig: '&cÐ¦Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð¼Ð°Ñ” площу, Ñка перевищує ваш дозволений макÑимум.' + NotForSale: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð½Ðµ продаєтьÑÑ.' + ForSale: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ &6%1 &eзараз продаєтьÑÑ Ð·Ð° &6%2' + StopSelling: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð±Ñ–Ð»ÑŒÑˆÐµ не продаєтьÑÑ.' + TooMany: '&cВи вже володієте макÑимальною дозволеною кількіÑÑ‚ÑŽ резиденцій.' + MaxRent: '&cВи вже орендуєте макÑимальну дозволену кількіÑÑ‚ÑŒ резиденцій + .' + AlreadyRent: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð²Ð¶Ðµ здана...' + NotForRent: '&cЖитло не здаєтьÑÑ...' + NotForRentOrSell: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð½Ðµ здаєтьÑÑ Ñ‡Ð¸ не продаєтьÑÑ...' + NotRented: '&cЖитло не здаєтьÑÑ.' + Unrent: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ &6%1 &eне здана в оренду.' + RemoveRentable: '&eРезиденцію &6%1 &eбільше не можна орендувати.' + ForRentSuccess: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ &6%1 &eзараз здаєтьÑÑ Ð² оренду за &6%2 &eкожні &6%3 &eдні.' + RentSuccess: '&eВи орендували резиденцію &6%1 &eна &6%2 &eдні.' + EndingRent: '&eТермін оренди закінчуєтьÑÑ Ð´Ð»Ñ &6%1 &eна &6%2' + AlreadyRented: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ &6%1 &eнаразі здана в оренду &6%2' + CantAutoPay: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð½Ðµ дозволÑÑ” автоматичну оплату, Ð´Ð»Ñ Ð½ÐµÑ— буде вÑтановлено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ &6false' + AlreadyExists: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð¿Ñ–Ð´ назвою &6%1 &cвже Ñ–Ñнує.' + Create: '&eВи Ñтворили резиденцію &6%1&e!' + Rename: '&eПерейменовано резиденцію &6%1 &eна &6%2' + Remove: '&eРезиденцію &6%1 &eбуло видалено...' + CantRemove: '&cРезиденцію &6%1 &cнеможливо видалити, оÑкільки підзона &6%2 &cвÑе ще орендована + гравцем &6%3' + MoveDeny: '&cВи не маєте дозволу на переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ Резиденції &6%1' + TeleportNoFlag: '&cУ Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” доÑтупу до телепорту до цієї резиденції.' + FlagDeny: '&cВи не маєте &6%1 &cна &6%2 &cрезиденцію' + GiveLimits: '&cÐеможливо надати міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ñ†Ñ–Ð»ÑŒÐ¾Ð²Ð¾Ð¼Ñƒ гравцеві, оÑкільки воно виходить за межі + цільових гравців.' + GiveConfirm: '&7ÐатиÑніть, щоб підтвердити &6%1 &7перенеÑÐµÐ½Ð½Ñ Ñ€ÐµÐ·ÐµÐ´ÐµÐ½Ñ†Ñ–Ñ &6%2 &7на &6%3' + Give: '&eВи надаєте резиденцію &6%1 &eгравцеві &6%2' + Recieve: '&eВи отримали резиденцію &6%1 &eвід Ð³Ñ€Ð°Ð²Ñ†Ñ &6%2' + ResList: ' &a%1. &e%2 &e- &6%3 %4&6%5' + TrustedResList: ' &a%1. &f%2 &e- &6%3 %4&6%5' + List: ' &e%2 &e- &6%3' + Near: '&eÐайближчі резиденції: &7%1' + TeleportNear: '&eТелепортовано до найближчої резиденції.' + SetTeleportLocation: '&eÐ’Ñтановлено міÑÑ†ÐµÐ·Ð½Ð°Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ‚ÐµÐ»ÐµÐ¿Ð¾Ñ€Ñ‚Ñƒ...' + PermissionsApply: '&eДозволи на проживаннÑ.' + NotOwner: '&cВи не влаÑник цієї резиденції' + RemovePlayersResidences: '&eВидалено вÑÑ– Ð¿Ð¾Ð¼ÐµÑˆÐºÐ°Ð½Ð½Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ &6%1' + NotIn: '&cВи не в резиденції.' + PlayerNotIn: '&cГравець, Ñкий Ñтоїть не в зоні вашої резиденції.' + Kicked: '&eÐ’Ð°Ñ Ð²Ð¸Ð³Ð½Ð°Ð»Ð¸ з міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ' + CantKick: '&eÐе можна вигнати цього гравцÑ' + In: '&eВи Ñтоїте в Резиденції &6%1' + OwnerChange: '&eРезиденцію &6%1 &eвлаÑника змінено на &6%2' + NonAdmin: '&cВи не Ñ” адмініÑтратором резиденції.' + Line: '&eРезиденціÑ: &6%1 ' + RentedBy: '&eЗдано в оренду: &6%1' + MessageChange: '&eÐабір повідомлень...' + CantDeleteResidence: '&cВи не маєте дозволу на Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ.' + CantExpandResidence: '&cВи не маєте дозволу на Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ.' + CantContractResidence: '&cВи не маєте дозволу на Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð·Ð° договором.' + NoResHere: '&cЖодної резиденції там немає.' + OwnerNoPermission: '&cВлаÑник не має на це дозволу.' + ParentNoPermission: '&cВи не маєте дозволу вноÑити зміни в батьківÑький елемент + зони.' + ChatDisabled: '&eЧат Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾...' + DeleteConfirm: '&eВи впевнені, що хочете видалити міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ &6%1&e, викориÑтайте &6/res + confirm &eщоб підтвердити.' + ChangedMain: '&eЗмінено оÑновне міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð½Ð° &6%1' + LwcRemoved: '&eВидалено захиÑÑ‚ &6%1 &eLwc через &6%2ms' + CanBeRented: '&6%1&e можна орендувати за &6%2 &eза &6%3 &eдні. &6/res market rent' + CanBeBought: '&6%1&e можна купити за &6%2&e. &6/res market buy' + IsForRent: '&6(Ð’ оренду)' + IsForSale: '&6(Ðа продаж)' + IsRented: '&6(Зданий в оренду)' + Rent: + Disabled: '&cОренда відключена...' + DisableRenew: '&eРезиденцію &6%1 &eбільше не можна повторно орендувати піÑÐ»Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ‚ÐµÑ€Ð¼Ñ–Ð½Ñƒ.' + EnableRenew: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ &6%1 &eтепер автоматично повторно орендуватиметьÑÑ Ð¿Ñ–ÑÐ»Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ‚ÐµÑ€Ð¼Ñ–Ð½Ñƒ.' + NotByYou: '&cРезиденцію знімаєте не ви.' + isForRent: '&2Можлива оренда помешканнÑ.' + MaxRentDays: '&cВи можете орендувати більше ніж на &6%1 &cднів одночаÑно.' + OneTime: '&cÐеможливо продовжити термін оренди цього житла.' + Extended: '&eОренду продовжено ще на &6%1 &eднів Ð´Ð»Ñ &6%2 &eрезиденції' + Expire: '&eТермін дії оренди: &6%1' + AutoPayTurnedOn: '&eÐвтоматичну оплату &2УВІМК' + AutoPayTurnedOff: '&eÐвтоматичну оплату &cВИМК' + ModifyDeny: '&cÐе можна змінити орендоване житло.' + Days: '&eДні оренди: &6%1' + Rented: ' &6(Зданий в оренду)' + RentList: ' &6%1&e. &6%2 &e(&6%3&e/&6%4&e/&6%5&e) - &6%6 &6%7' + EvictConfirm: '&eÐапишіть &6/res market confirm &eвиÑелити Ð¾Ñ€ÐµÐ½Ð´Ð°Ñ€Ñ Ð· &6%1 &eпомешканнÑ' + UnrentConfirm: '&eÐапишіть &6/res market confirm &eзнÑти в оренду &6%1 &eпомешканнÑ' + ReleaseConfirm: '&eÐапишіть &6/res market confirm &eвидалити &6%1 &eміÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + з ринку' + command: + addedAllow: '&eДодано нову дозволену команду Ð´Ð»Ñ &6%1 &eміÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ' + removedAllow: '&eВидалено дозволену команду Ð´Ð»Ñ &6%1 &eміÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ' + addedBlock: '&eДодано нову заблоковану команду Ð´Ð»Ñ &6%1 &eміÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ' + removedBlock: '&eВидалено заблоковану команду Ð´Ð»Ñ &6%1 &eміÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ' + Blocked: '&eЗаблоковані команди: &6%1' + Allowed: '&eДозволені команди: &6%1' + Parsed: '%1' + PlacehlderList: '&e%1. &6%2' + PlacehlderResult: ' &eрезультат: &6%1' + Rentable: + Land: '&eОрендна землÑ: &6' + AllowRenewing: '&eМожна поновити: &6%1' + StayInMarket: '&eОрендуване Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° ринку: &6%1' + AllowAutoPay: '&eRentable дозволÑÑ” автоматично оплачувати: &6%1' + DisableRenew: '&6%1 &eбільше не поновлюватиме ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¾Ñ€ÐµÐ½Ð´Ð¸ піÑÐ»Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ‚ÐµÑ€Ð¼Ñ–Ð½Ñƒ дії.' + EnableRenew: '&6%1 &eтепер автоматично поновлюватиме ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¾Ñ€ÐµÐ½Ð´Ð¸ піÑÐ»Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ‚ÐµÑ€Ð¼Ñ–Ð½Ñƒ дії.' + Economy: + LandForSale: '&eÐ—ÐµÐ¼Ð»Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð°Ð¶Ñƒ:' + NotEnoughMoney: '&cВам не виÑтачає грошей.' + MoneyCharged: '&eСтÑгнено &6%1 &eна ваш &eрахунок &6%2.' + MoneyAdded: '&eОтримано &6%1 &eдо вашого &eоблікового запиÑу &6%2.' + MoneyCredit: '&eЗараховано &6%1 &eна ваш &6%2 &eрахунок.' + RentReleaseInvalid: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ &6%1 &eне здаєтьÑÑ Ñ– не здаєтьÑÑ.' + RentSellFail: '&cÐе можна продати житло, Ñкщо воно здаєтьÑÑ Ð² оренду.' + SubzoneRentSellFail: '&cÐеможливо продати резиденцію, Ñкщо Ñ—Ñ— підзона здаєтьÑÑ Ð² оренду.' + ParentRentSellFail: '&cÐе можна продати резиденцію, Ñкщо Ñ—Ñ— головна зона здаєтьÑÑ Ð² оренду.' + SubzoneSellFail: '&cÐеможливо продати підзону.' + SellRentFail: '&cÐе можна орендувати резиденцію, Ñкщо вона продаєтьÑÑ.' + ParentSellRentFail: '&cÐе можна орендувати резиденцію, Ñкщо Ñ—Ñ— головна зона продаєтьÑÑ.' + OwnerBuyFail: '&cÐе можна купити влаÑну землю!' + OwnerRentFail: '&cÐе можна орендувати влаÑну землю!' + AlreadySellFail: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð²Ð¶Ðµ в продажу!' + LeaseRenew: '&eДоговір оренди до &6%1' + LeaseRenewMax: '&eОренду продовжено до макÑимально дозволеного' + LeaseNotExpire: '&eÐемає такої оренди, або оренда не закінчуєтьÑÑ.' + LeaseRenewalCost: '&eВартіÑÑ‚ÑŒ Ð¿Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¾Ð±Ð»Ð°ÑÑ‚Ñ– &6%1 &eÑтановить &6%2' + LeaseInfinite: '&eТермін оренди вÑтановлено на безÑтроковий...' + MarketDisabled: '&cЕкономіка відключена!' + SellAmount: '&eСума продажу: &2%1' + SellList: ' &6%1&e. &6%2 &e(&6%3&e) - &6%4' + LeaseExpire: '&eТермін дії договору оренди: &2%1' + LeaseList: '&6%1. &e%2 &2%3 &e%4' + Expanding: + North: '&eÐ Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð½Ð° північ &6%1 &eблоків' + West: '&eÐ Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð—Ð°Ñ…Ñ–Ð´Ð½Ð¸Ñ… &6%1 &eблоків' + South: '&eÐ Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ÐŸÑ–Ð²Ð´ÐµÐ½Ð½Ð¸Ñ… &6%1 &eблоків' + East: '&eÐ Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñхідних &6%1 &eблоків' + Up: '&eÐ Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ &6%1 &eблоків' + Down: '&eÐ Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð²Ð½Ð¸Ð· &6%1 &eблоків' + Contracting: + North: '&eÐ¡ÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ–Ð²Ð½Ñ–Ñ‡Ð½Ð¸Ñ… &6%1 &eблоків' + West: '&eПідрÑдний Захід &6%1 &eблоків' + South: '&eПідрÑдний південь &6%1 &eблоків' + East: '&eКонтрактуючи Східний &6%1 &eблоки' + Up: '&eЗроÑÑ‚Ð°Ð½Ð½Ñ &6%1 &eблоків' + Down: '&eÐ¡ÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð²Ð½Ð¸Ð· &6%1 &eблоків' + Shifting: + North: '&eÐ—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð½Ð° північ &6%1 &eблоків' + West: '&eЗÑув на захід &6%1 &eблоків' + South: '&eЗÑув на південь &6%1 &eблоків' + East: '&eÐ—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð½Ð° Ñхід &6%1 &eблоків' + Up: '&eÐ—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ð³Ð¾Ñ€Ñƒ &6%1 &eблоків' + Down: '&eЗÑув вниз &6%1 &eблоків' + Limits: + PGroup: '&7- &eГрупа дозволів:&3 %1' + RGroup: '&7- &eГрупа проживаннÑ:&3 %1' + Admin: '&7- &eÐдмініÑтратор резиденції:&3 %1' + CanCreate: '&7- &eМожна Ñтворювати резиденції:&3 %1' + MaxRes: '&7- &eÐœÐ°ÐºÑ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ð¹:&3 %1' + MaxEW: '&7- &eМакÑ. Ñхід/захід розмір:&3 %1' + MaxNS: '&7- &eМакÑимальний розмір північ/південь:&3 %1' + MaxUD: '&7- &eМакÑимальний розмір вгору/вниз:&3 %1' + MinMax: '&7- &eМінімальна/макÑимальна виÑота захиÑту:&3 %1 to %2' + MaxSubzones: '&7- &eМакÑ. підзони:&3 %1' + MaxSubDepth: '&7- &eМакÑимальна глибина підзони:&3 %1' + MaxRents: '&7- &eМакÑимальна орендна плата:&3 %1' + MaxRentDays: ' &eМакÑимальна кількіÑÑ‚ÑŒ днів оренди:&3 %1' + EnterLeave: '&7- &eМожна вÑтановити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ/виходу:&3 %1' + NumberOwn: '&7- &eКількіÑÑ‚ÑŒ резиденцій, Ñкими ви володієте:&3 %1' + Cost: '&7- &eВартіÑÑ‚ÑŒ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð·Ð° блок:&3 %1' + Sell: '&7- &eВартіÑÑ‚ÑŒ продажу за блок:&3 %1' + Flag: '&7- &eПозначити дозволи:&3 %1' + MaxDays: '&7- &eМакÑимальна кількіÑÑ‚ÑŒ днів оренди:&3 %1' + LeaseTime: '&7- &eТермін оренди, наданий при поновленні:&3 %1' + RenewCost: '&7- &eВартіÑÑ‚ÑŒ Ð¿Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð° блок:&3 %1' + Gui: + Set: + Title: '&8%1 прапори' + Pset: + Title: '&8%1 &7%2 &6прапори' + Actions: + - '&2ЛКМ, щоб увімкнути' + - '&cПКМ, щоб вимкнути' + - '&eShift + ЛКМ, щоб видалити' + InformationPage: + Top: '&e___/ &a %1 - %2 &e \___' + TopSingle: '&e___/ &a %1 &e \___' + Page: '&e-----< &6%1 &e>-----' + NextPage2: '&e-----< &6%1 &e>-----' + NoNextPage: '&e-----------------------' + GeneralList: '&2 %1 &6- &e%2' + FlagsList: '&2 %1 &6- &e%2' + SmallSeparator: '&6------' + Chat: + ChatChannelChange: '&eКанал чату міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ на &6%1!' + ChatChannelLeave: '&eВийшов з чату міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ' + ChatMessage: '%1 %2%3: %4%5' + ChatListeningMessage: '&2[Ð¡Ð»ÑƒÑ…Ð°Ð½Ð½Ñ %6]%1 %2%3: %4%5' + JoinFirst: '&4Спочатку приєднайтеÑÑ Ð´Ð¾ каналу чату проживаннÑ...' + InvalidChannel: '&4ÐедійÑний канал...' + InvalidColor: '&4Ðеправильний код кольору' + NotInChannel: '&4Гравець не на каналі' + Kicked: '&6%1 &eбув виключений з каналу &6%2' + InvalidPrefixLength: '&4ÐŸÑ€ÐµÑ„Ñ–ÐºÑ Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ довгий. Дозволена довжина: %1' + ChangedColor: '&eКолір каналу чату Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ на %1' + ChangedPrefix: '&eÐŸÑ€ÐµÑ„Ñ–ÐºÑ ÐºÐ°Ð½Ð°Ð»Ñƒ чату Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ на %1' + Shop: + ListTopLine: '&6%1 &eСпиÑок магазинів - Сторінка &6%2 &eз &6%3 %4' + List: ' &e%1. &6%2 &e(&6%3&e) %4' + ListVoted: '&e%1 (&6%2&e)' + ListLiked: '&7Лайків: &7%1' + VotesTopLine: '&6%1 &e%2 ÑпиÑок голоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° резиденцією &6- &eСторінка &6%3 &eз &6%4 %5' + VotesList: ' &e%1. &6%2 &e%3 &7%4' + NoDesc: '&6Без опиÑу' + Desc: |- + &6ОпиÑ: + %1 + DescChange: '&6ÐžÐ¿Ð¸Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ на: %1' + ChantChange: '&4Ðеможливо змінити, Ñкщо Ð´Ð»Ñ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ð° магазину вÑтановлено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ true' + NewBoard: '&6УÑпішно додано нову вивіÑку магазину' + BoardExist: '&cДошка магазину вже Ñ–Ñнує в цьому міÑці' + DeleteBoard: '&6ПКМ по знаку дошки, Ñку потрібно видалити' + DeletedBoard: '&6ВивіÑка знÑта' + IncorrectBoard: '&cЦе не табличка, Ñпробуйте виконати команду ще раз Ñ– натиÑнути + правильний знак' + InvalidSelection: '&cЛКМ за допомогою верхнього лівого знака інÑтрумента виділеннÑ, а потім клацніть правою кнопкою + миші внизу праворуч' + ToBigSelection: '&cВаш вибір завеликий, макÑимально дозволено 16 блоків' + ToDeapSelection: '&cВаш вибір занадто глибокий, макÑимальний дозволений блок – 16x16x1' + VoteChanged: '&6ГолоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ з &e%1 &6на &e%2 &6за &e%3 &6міÑце проживаннÑ' + Voted: '&6Ви проголоÑували та віддали &e%1 &6голоÑи &e%2 &6резиденції' + Liked: '&6Вам ÑподобалаÑÑ &e%1 &6резиденціÑ' + AlreadyLiked: '&6Ви вже вподобали &e%1 &6резиденцію' + NoVotes: '&cÐемає зареєÑтрованих голоÑів Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— резиденції' + CantVote: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð½Ðµ має прапора магазину, вÑтановленого на true' + VotedRange: '&6Діапазон голоÑів від &e%1 &6до &e%2' + SignLines: + '1': '&e--== &8%1 &e==--' + '2': '&9%1' + '3': '&4%1' + '4': '&8%1&e (&8%2&e)' + Likes4: '&9Лайки: &8%2' + RandomTeleport: + TpLimit: '&eВи не можете телепортуватиÑÑ Ñ‚Ð°Ðº швидко, зачекайте &6%1 &eÑекунд Ñ– повторіть Ñпробу' + TeleportSuccess: '&eТелепортовано до X:&6%1&e, Y:&6%2&e, Z:&6%3 &eлокації' + IncorrectLocation: '&6Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ правильне міÑце телепорту, зачекайте &e%1 + &6Ñекунд та повторіть Ñпробу.' + Disabled: '&cВипадкова Ñ‚ÐµÐ»ÐµÐ¿Ð¾Ñ€Ñ‚Ð°Ñ†Ñ–Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð° в цьому Ñвіті' + TeleportStarted: '&eТелепортацію розпочато, не рухайтеÑÑ Ð¿Ñ€Ð¾Ñ‚Ñгом наÑтупних &6%4 &eÑекунд.' + WorldList: '&eМожливі Ñвіти: &6%1' + Permissions: + variableColor: '&f' + permissionColor: '&6' + cmdPermissionColor: '&2' + General: + DisabledWorld: '&cПлагін Residence вимкнено в цьому Ñвіті' + UseNumbers: '&cБудь лаÑка, викориÑтовуйте цифри...' + # Replace all text with '' to disable this message + CantPlaceLava: '&cВи не можете розміщувати лаву за межами Ð¿Ð¾Ð¼ÐµÑˆÐºÐ°Ð½Ð½Ñ Ñ‚Ð° вище Ñ€Ñ–Ð²Ð½Ñ &6%1 + &cблоку' + # Replace all text with '' to disable this message + CantPlaceWater: '&cВи не можете розміщувати Воду за межами Ð¿Ð¾Ð¼ÐµÑˆÐºÐ°Ð½Ð½Ñ Ñ‚Ð° вище Ñ€Ñ–Ð²Ð½Ñ &6%1 + &cблоку' + CantPlaceChest: '&cВи не можете поÑтавити Ñкриню на цьому міÑці' + NoPermission: '&cВи не маєте на це дозволу.' + info: + NoPlayerPermission: '&c[playerName] не має дозволу [permission]' + NoCmdPermission: '&cВи не маєте дозволу на цю команду.' + DefaultUsage: '&eВведіть &6/%1 ? &eÐ´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— інформації' + MaterialGet: '&eÐазва матеріалу Ð´Ð»Ñ ID &6%1 &eÑ” &6%2' + MarketList: '&e---- &6СпиÑок ринку &e----' + Separator: '&e----------------------------------------------------' + AdminOnly: '&cТільки адмініÑтратори мають доÑтуп до цієї команди.' + InfoTool: '&e- ІнÑтрумент інформації: &6%1' + ListMaterialAdd: '&6%1 &eдодано до резиденції &6%2' + ListMaterialRemove: '&6%1 &eвилучено з міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ &6%2' + ItemBlacklisted: '&cВи внеÑені до чорного ÑпиÑку викориÑÑ‚Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ предмета тут.' + WorldPVPDisabled: '&cСвіт PVP вимкнено.' + NoPVPZone: '&cБез зони PVP.' + NoFriendlyFire: '&cБез дружнього вогню' + InvalidHelp: '&cÐедійÑна Ñторінка довідки.' + TeleportDeny: '&cУ Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” доÑтупу до телепорту.' + TeleportSuccess: '&eТелепортовано!' + TeleportConfirmLava: '&cЦей телепорт небезпечний, ви потрапите в &6лаву&c. + ВикориÑтайте &6/res tpconfirm &cщоб вÑе одно виконати телепортацію.' + TeleportConfirmVoid: '&cЦей телепорт небезпечний, ви потрапите в &6пуÑтоту&c. + ВикориÑтайте &6/res tpconfirm &cщоб вÑе одно виконати телепортацію.' + TeleportConfirm: '&cЦей телепорт небезпечний, ви впадете в &6%1 &cблоки. + ВикориÑтайте &6/res tpconfirm &cщоб вÑе одно виконати телепортацію.' + TeleportStarted: '&eÐ¢ÐµÐ»ÐµÐ¿Ð¾Ñ€Ñ‚Ð°Ñ†Ñ–Ñ Ð´Ð¾ &6%1 &eрозпочато, не рухайтеÑÑ Ð½Ð°Ñтупні &6%2 + &eÑек.' + TeleportTitle: '&eТелепортаціÑ!' + TeleportTitleTime: '&6%1' + TeleportCanceled: '&eТелепортацію ÑкаÑовано!' + NoTeleportConfirm: '&eÐемає жодних телепортів, Ñкі очікують підтвердженнÑ!' + HelpPageHeader2: '&eСторінки довідки - &6%1 &e- Сторінка <&6%2 &eз &6%3&e>' + ListExists: '&cСпиÑок вже Ñ”...' + ListRemoved: '&eСпиÑок видалено...' + ListCreate: '&eСтворено ÑпиÑок &6%1' + PhysicalAreas: '&eФізичні зони' + CurrentArea: '&eПоточна площа: &6%1' + TotalResSize: '&eПоточна площа: &6%1m³ (%2m²)' + ResSize: + eastWest: '&eЗ заходу/на Ñхід: &6%1' + northSouth: '&eЗ заходу/на Ñхід: &6%1' + upDown: '&eВверх/вниз: &6%1' + TotalWorth: '&eЗагальна вартіÑÑ‚ÑŒ проживаннÑ: &6%1 &e(&6%2&e)' + TotalSubzones: '&eПідзони в резиденції: &6%1 &e(&6%2&e)' + NotOnline: '&eЦільовий гравець має бути онлайн.' + GenericPages: '&eСторінка &6%1 &eз &6%2 &e(&6%3&e)' + WorldEditNotFound: '&cWorldEdit не виÑвлено.' + CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' + CoordsLiner: '&7 (&3%1&7;%2&7)' + AllowedTeleportIcon: '&2T' + BlockedTeleportIcon: '&7T' + AllowedMovementIcon: '&2M' + BlockedMovementIcon: '&7M' + AdminToggleTurnOn: '&eПеремикач автоматичного повторного адмініÑÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ &6УВІМК' + AdminToggleTurnOff: '&eПеремикач автоматичного повторного адмініÑÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ &6ВИМК' + NoSpawn: '&eУ Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” прав на &6Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ &eв точці поÑви. Переїзд' + CompassTargetReset: '&eВаш ÐºÐ¾Ð¼Ð¿Ð°Ñ Ñкинуто' + CompassTargetSet: '&eВаш ÐºÐ¾Ð¼Ð¿Ð°Ñ Ñ‚ÐµÐ¿ÐµÑ€ вказує на &6%1' + Ignorelist: '&2СпиÑок ігноруваннÑ:&6' + Blacklist: '&cЧорний ÑпиÑок:&6' + LandCost: '&eВартіÑÑ‚ÑŒ землі: &6%1' + 'True': '&2True' + 'False': '&cFalse' + Removed: '&6Видалено' + FlagState: '&eДержава прапора: %1' + Land: '&eЗемлÑ: &6%1' + Cost: '&eВартіÑÑ‚ÑŒ: &6%1 &eза &6%2 &eдні' + Status: '&eСтатуÑ: %1' + Available: '&2ДоÑтупний' + Size: ' &eРозмір: &6%1' + ResidenceFlags: '&eПрапори резиденції: &6%1' + PlayersFlags: '&eПрапори гравців: &6%1' + GroupFlags: '&eПрапори груп: &6%1' + OthersFlags: '&eІнші прапори: &6%1' + Moved: '&eПереїхав...' + Name: '&eІм''Ñ: &6%1' + Lists: '&eСпиÑки: &6' + Residences: '&eРезиденції&6' + CreatedOn: '&eДата ÑтвореннÑ: &6%1' + Owner: '&eВлаÑник: &6%1' + World: '&eСвіт: &6%1' + Subzones: '&eПідзони' + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. + NewPlayerInfo: '&eЯкщо ви хочете Ñтворити охоронену територію Ð´Ð»Ñ Ñвого будинку, будь лаÑка + викориÑтовуйте дерев''Ñну Ñокиру, щоб вибрати протилежні Ñторони вашого будинку та виконайте команду &2/res + create Ім''ÑВашоїРезиденції' +CommandHelp: + Description: Довідка Residence + SubCommands: + res: + Description: Головні команди резиденції + Info: + - '&2ВикориÑтайте &6/res [command] ? <Ñторінка> &2щоб переглÑнути додаткову довідкову інформацію.' + SubCommands: + auto: + Info: + - '&eВикориÑтаннÑ: &6/res auto (ім''Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ—) (радіуÑ)' + Description: Створіть макÑимально дозволене міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð½Ð°Ð²ÐºÐ¾Ð»Ð¾ Ñебе + select: + Info: + - Ð¦Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° вибирає зони Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð· проживаннÑм. + - /res select [x] [y] [z] - вибирає Ñ€Ð°Ð´Ñ–ÑƒÑ Ð±Ð»Ð¾ÐºÑ–Ð² із вами + поÑередині. + Description: Команди вибору + SubCommands: + coords: + Description: Показати вибрані координати + Info: + - '&eВикориÑтаннÑ: &6/res select coords' + size: + Description: Показати вибраний розмір + Info: + - '&eВикориÑтаннÑ: &6/res select size' + auto: + Description: Вмикає інÑтрумент автоматичного вибору + Info: + - '&eВикориÑтаннÑ: &6/res select auto [ім''ÑгравцÑ]' + cost: + Description: ВартіÑÑ‚ÑŒ вибору диÑÐ¿Ð»ÐµÑ + Info: + - '&eВикориÑтаннÑ: &6/res select cost' + vert: + Description: Розгорнути Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾ вертикалі + Info: + - '&eВикориÑтаннÑ: &6/res select vert' + - Розширить вибір наÑтільки виÑоко, наÑкільки дозволено. + sky: + Description: Розгорнути Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð´Ð¾ неба + Info: + - '&eВикориÑтаннÑ: &6/res select sky' + - Розширює наÑтільки, наÑкільки вам дозволено. + bedrock: + Description: Розширити вибір до бедрока + Info: + - '&eВикориÑтаннÑ: &6/res select bedrock' + - Розгортає наÑтільки низько, наÑкільки вам дозволено. + expand: + Description: Розширити Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð² напрÑмку. + Info: + - '&eВикориÑтаннÑ: &6/res select expand <кількіÑÑ‚ÑŒ>' + - Розгортає <кількіÑÑ‚ÑŒ> у напрÑмку, у Ñкому ви дивитеÑÑŒ. + shift: + Description: Ð—Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð² напрÑмку + Info: + - '&eВикориÑтаннÑ: &6/res select shift <кількіÑÑ‚ÑŒ>' + - Зміщує ваш вибір на <кількіÑÑ‚ÑŒ> у напрÑмку, у Ñкому ви дивитеÑÑŒ. + chunk: + Description: Виберіть чанк, на Ñкому ви зараз. + Info: + - '&eВикориÑтаннÑ: &6/res select chunk' + - Вибирає чанк, на Ñкому ви зараз перебуваєте. + residence: + Description: Виберіть Ñ–Ñнуючу територію в резиденції. + Info: + - '&eВикориÑтаннÑ: &6/res select residence <резиденціÑ>' + - Вибирає наÑвну територію в резиденції. + worldedit: + Description: Ð’Ñтановіть Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð·Ð° допомогою поточного вибору WorldEdit. + Info: + - '&eВикориÑтаннÑ: &6/res select worldedit' + - Ð’Ñтановлює облаÑÑ‚ÑŒ Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð·Ð° допомогою поточного Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ WorldEdit. + padd: + Info: + - '&eВикориÑтаннÑ: &6/res padd <резиденціÑ> [гравець]' + - Додає важливі прапори Ð´Ð»Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ + Description: Додайте Ð³Ñ€Ð°Ð²Ñ†Ñ Ð² резиденцію. + placeholders: + Info: + - '&eВикориÑтаннÑ: &6/res placeholders (розбір) (заповнювач) (ім''ÑгравцÑ)' + Description: СпиÑок заповнювачів + parse: '[result]' + signconvert: + Info: + - '&eВикориÑтаннÑ: &6/res signconvert' + - Спробуємо конвертувати збережені дані знаків із Ñтороннього плагіна + Description: Перетворює вивіÑки з плагіна ResidenceSign + listallhidden: + Info: + - '&eВикориÑтаннÑ: &6/res listhidden <Ñторінка>' + - Перелічує вÑÑ– приховані резиденції на Ñервері. + Description: СпиÑок уÑÑ–Ñ… прихованих резиденцій + bank: + Info: + - '&eВикориÑтаннÑ: &6/res bank [deposit/withdraw] <резиденціÑ> [кількіÑÑ‚ÑŒ]' + - Ви повинні проживати в резиденції або вказати ім''Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + - Ви повинні мати позначку +bank. + Description: РозпорÑджайтеÑÑ Ð³Ñ€Ð¾ÑˆÐ¸Ð¼Ð° в резиденції + create: + Info: + - '&eВикориÑтаннÑ: &6/res create [назва_резиденції]' + Description: Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ð¹ + listall: + Info: + - '&eВикориÑтаннÑ: &6/res listall <Ñторінка> <Ім''ÑСвіту> <-a/-f>' + - Перелічує вÑÑ– Ð¿Ð¾Ð¼ÐµÑˆÐºÐ°Ð½Ð½Ñ + Description: СпиÑок уÑÑ–Ñ… резиденцій + info: + Info: + - '&eВикориÑтаннÑ: &6/res info <резиденціÑ>' + - Залиште <резиденціÑ>, щоб відобразити інформацію про резиденцію, де ви зараз + проживаєте. + Description: Показати інформацію про резиденцію. + area: + Description: Ð£Ð¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ñ„Ñ–Ð·Ð¸Ñ‡Ð½Ð¸Ð¼Ð¸ площами Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ. + Info: + - '' + SubCommands: + list: + Description: Перелічіть фізичні площі в резиденції + Info: + - '&eВикориÑтаннÑ: &6/res area list [резиденціÑ] <Ñторінка>' + listall: + Description: СпиÑок координат та іншої інформації Ð´Ð»Ñ Ð¾Ð±Ð»Ð°Ñтей + Info: + - '&eВикориÑтаннÑ: &6/res area listall [резиденціÑ] <Ñторінка>' + add: + Description: Додайте фізичні території до Ð¿Ð¾Ð¼ÐµÑˆÐºÐ°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res area add [резиденціÑ] [areaID]' + - Спочатку потрібно вибрати дві точки. + remove: + Description: Видалити фізичні території з Ð¿Ð¾Ð¼ÐµÑˆÐºÐ°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res area remove [резиденціÑ] [areaID]' + replace: + Description: Замінити фізичні площі в резиденції + Info: + - '&eВикориÑтаннÑ: &6/res area replace [резиденціÑ] [areaID]' + - Спочатку потрібно вибрати дві точки. + - Заміна облаÑÑ‚Ñ– ÑÑ‚Ñгує різницю в розмірі, Ñкщо нова облаÑÑ‚ÑŒ + більша. + give: + Info: + - '&eВикориÑтаннÑ: &6/res give <ім''Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ—> [гравець] <-s>' + - Ðадає ваше житло цільовому гравцеві + Description: Ðадайте міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð³Ñ€Ð°Ð²Ñ†ÐµÐ²Ñ–. + renamearea: + Info: + - '&eВикориÑтаннÑ: &6/res removeworld [резиденціÑ] [oldAreaName] [newAreaName]' + Description: Перейменувати резиденцію + contract: + Info: + - '&eВикориÑтаннÑ: &6/res contract (резиденціÑ) [кількіÑÑ‚ÑŒ]' + - Контракт на Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð² тому напрÑмку, в Ñкому ви дивитеÑÑŒ. + - Ім''Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ— необов''Ñзкове + Description: Контракт на Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð² тому напрÑмку, в Ñкому ви дивитеÑÑŒ + check: + Info: + - '&eВикориÑтаннÑ: &6/res check [резиденціÑ] [прапор] (ім''ÑгравÑÑ)' + Description: Перевірте ваш Ñтан прапора + gset: + Info: + - '&eВикориÑтаннÑ: &6/res gset <резиденціÑ> [група] [прапор] [true/false/remove]' + - Щоб переглÑнути ÑпиÑок прапорів, викориÑтовуйте /res flags ? + Description: Ð’Ñтановіть прапор Ð´Ð»Ñ Ð¿ÐµÐ²Ð½Ð¾Ñ— групи резиденції. + list: + Info: + - '&eВикориÑтаннÑ: &6/res list <гравець> <Ñторінка> <Ім''ÑÑвіту>' + - Перелічує вÑÑ– помешканнÑ, Ñкими володіє гравець (крім прихованих). + - Якщо вказано ваші влаÑні резиденції, також буде показано приховані. + - Щоб отримати ÑпиÑок уÑÑ–Ñ… резиденцій, викориÑтовуйте /res listall. + Description: СпиÑок резиденцій + version: + Info: + - '&eВикориÑтаннÑ: &6/res version' + Description: верÑÑ–Ñ Residence + tool: + Info: + - '&eВикориÑтаннÑ: &6/res tool' + Description: Показує вибір міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ñ‚Ð° назви інформаційних інÑтрументів + pdel: + Info: + - '&eВикориÑтаннÑ: &6/res pdel <резиденціÑ> [гравець]' + - ВидалÑÑ” важливі прапори з Ð³Ñ€Ð°Ð²Ñ†Ñ + Description: Видалити Ð³Ñ€Ð°Ð²Ñ†Ñ Ð· міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ. + market: + Info: + - '&eВикориÑтаннÑ: &6/res market ? Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— інформації' + Description: Купити, продати або орендувати резиденцію + SubCommands: + Info: + Description: Отримати економічну інформацію про резиденцію + Info: + - '&eВикориÑтаннÑ: &6/res market Info [резиденціÑ]' + - Показує, чи продаєтьÑÑ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ñ‡Ð¸ здаєтьÑÑ Ð² оренду, а також вартіÑÑ‚ÑŒ. + list: + Description: СпиÑки житла, що здаєтьÑÑ Ð² оренду та на продаж. + Info: + - '&eВикориÑтаннÑ: &6/res market list [rent/sell]' + SubCommands: + rent: + Description: СпиÑки орендованих резиденцій. + Info: + - '&eВикориÑтаннÑ: &6/res market list rent' + sell: + Description: СпиÑки на продаж резиденцій. + Info: + - '&eВикориÑтаннÑ: &6/res market list sell' + sell: + Description: Продати житло + Info: + - '&eВикориÑтаннÑ: &6/res market sell [резиденціÑ] [Ñума]' + - ВиÑтавлÑÑ” резиденцію на продаж за [Ñуму] грошей. + - Інший гравець може купити резиденцію за допомогою /res market buy + sign: + Description: Ð’Ñтановити знак ринку + Info: + - '&eВикориÑтаннÑ: &6/res market sign [резиденціÑ]' + - Ð’Ñтановлює знак ринку, на Ñкий ви дивитеÑÑŒ. + buy: + Description: Купити резиденцію + Info: + - '&eВикориÑтаннÑ: &6/res market buy [резиденціÑ]' + - Купує резиденцію, Ñкщо вона продаєтьÑÑ. + unsell: + Description: ПрипинÑÑ” продаж житла + Info: + - '&eВикориÑтаннÑ: &6/res market unsell [резиденціÑ]' + rent: + Description: ЗнÑти житло + Info: + - '&eВикориÑтаннÑ: &6/res market rent [резиденціÑ] ' + - Здає резиденцію. Ðвтоматичне Ð¿Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ðµ мати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ true або false. Якщо true, + житло буде автоматично повторно орендовано піÑÐ»Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ‚ÐµÑ€Ð¼Ñ–Ð½Ñƒ, + Ñкщо влаÑник Ð¿Ð¾Ð¼ÐµÑˆÐºÐ°Ð½Ð½Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»Ð¸Ð² це. + rentable: + Description: Здати житло в оренду + Info: + - '&eВикориÑтаннÑ: &6/res market rentable [резиденціÑ] [вартіÑÑ‚ÑŒ] [дні] + ' + - Орендує житло за [вартіÑÑ‚ÑŒ] грошей на кожні [дні] кількіÑÑ‚ÑŒ + днів. + - Якщо має Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ true, резиденцію можна буде знову + орендувати до Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ‚ÐµÑ€Ð¼Ñ–Ð½Ñƒ оренди. + - Якщо має Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ true, Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð·Ð°Ð»Ð¸ÑˆÐ¸Ñ‚ÑŒÑÑ Ð½Ð° ринку + піÑÐ»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¾Ñтаннього орендарÑ. + - If має Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ true, гроші за оренду будуть автоматично зніматиÑÑ + з баланÑу гравцÑ, Ñкщо він вибрав цю опцію під Ñ‡Ð°Ñ Ð¾Ñ€ÐµÐ½Ð´Ð¸ + autopay: + Description: Ð’Ñтановлює задане Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ AutoPay Ð´Ð»Ñ Ð¼Ñ–ÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res market autopay [резиденціÑ] [true/false]' + payrent: + Description: Сплачує орендну плату за визначене міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res market payrent [резиденціÑ]' + confirm: + Description: Підтверджує дії щодо ÑкаÑуваннÑ/Ð·Ð²Ñ–Ð»ÑŒÐ½ÐµÐ½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res market confirm' + unrent: + Description: ЗнÑти житло в оренду чи оренду. + Info: + - '&eВикориÑтаннÑ: &6/res market unrent [резиденціÑ]' + - Якщо ви Ñ” орендарем, Ñ†Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° зніме Ð´Ð»Ñ Ð²Ð°Ñ Ð¾Ñ€ÐµÐ½Ð´Ð½Ñƒ плату + за будинок. + - Якщо ви Ñ” влаÑником, Ñ†Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° робить резиденцію не здаєтьÑÑ + в оренду. + rc: + Info: + - '&eВикориÑтаннÑ: &6/res rc (резиденціÑ)' + - ПриєднуйтеÑÑ Ð´Ð¾ каналу чату проживаннÑ. + Description: ПриєднуєтьÑÑ Ð´Ð¾ поточного або визначеного каналу чату за міÑцем Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + SubCommands: + leave: + Description: Залишає поточний канал чату за міÑцем Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res rc leave' + - Якщо ви перебуваєте в каналі чату Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ, ви залишите його + setcolor: + Description: Ð’Ñтановлює колір текÑту каналу чату міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res rc setcolor [colorCode]' + - Ð’Ñтановлює колір текÑту каналу чату міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + setprefix: + Description: Ð’Ñтановлює Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ ÐºÐ°Ð½Ð°Ð»Ñƒ чату міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res rc setprefix [newName]' + - Ð’Ñтановлює Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ ÐºÐ°Ð½Ð°Ð»Ñƒ чату міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + kick: + Description: Викидає Ð³Ñ€Ð°Ð²Ñ†Ñ Ð· каналу + Info: + - '&eВикориÑтаннÑ: &6/res rc kick [гравець]' + - Викидає Ð³Ñ€Ð°Ð²Ñ†Ñ Ð· каналу + expand: + Info: + - '&eВикориÑтаннÑ: &6/res expand (резиденціÑ) [кількіÑÑ‚ÑŒ]' + - Розширює міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð² тому напрÑмку, у Ñкому ви дивитеÑÑ. + - Ім'Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð½ÐµÐ¾Ð±Ð¾Ð²'Ñзкове + Description: Розширює міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð² тому напрÑмку, у Ñкому ви дивитеÑÑ + compass: + Info: + - '&eВикориÑтаннÑ: &6/res compass <резиденціÑ>' + Description: Ð’Ñтановіть покажчик компаÑа на міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + lists: + Info: + - Попередньо визначені дозволи, Ñкі можна заÑтоÑувати до резиденції. + Description: Попередньо визначені ÑпиÑки дозволів + SubCommands: + add: + Description: Додайте ÑпиÑок + Info: + - '&eВикориÑтаннÑ: &6/res lists add ' + remove: + Description: Видалити ÑпиÑок + Info: + - '&eВикориÑтаннÑ: &6/res lists remove ' + apply: + Description: ЗаÑтоÑувати ÑпиÑок до міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res lists apply <резиденціÑ>' + set: + Description: Ð’Ñтановити прапор + Info: + - '&eВикориÑтаннÑ: &6/res lists set <флаг> ' + pset: + Description: Ð’Ñтановити прапор Ð³Ñ€Ð°Ð²Ñ†Ñ + Info: + - '&eВикориÑтаннÑ: &6/res lists pset <гравець> <флаг> ' + gset: + Description: Ð’Ñтановіть прапор групи + Info: + - '&eВикориÑтаннÑ: &6/res lists gset <флаг> ' + view: + Description: ПереглÑнути ÑпиÑок. + Info: + - '&eВикориÑтаннÑ: &6/res lists view ' + reset: + Info: + - '&eВикориÑтаннÑ: &6/res reset <резиденціÑ/all>' + - Скидає прапори на резиденції до Ñтандартних. Щоб це зробити, ви повинні + бути влаÑником або адмініÑтратором. + Description: Скинути прапори міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð·Ð° замовчуваннÑм. + listhidden: + Info: + - '&eВикориÑтаннÑ: &6/res listhidden <гравець> <Ñторінка>' + - Перераховує приховані резиденції Ð´Ð»Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ. + Description: СпиÑок прихованих резиденцій + raid: + Info: + - '&eВикориÑтаннÑ: &6/res raid start [resname] (playerName)' + - '&6/res raid stop [resname]' + - '&6/res raid kick [playerName]' + - '&6/res raid immunity [add/take/set/clear] [resname/currentres] [time]' + Description: Керуйте рейдом у резиденції + setmain: + Info: + - '&eВикориÑтаннÑ: &6/res setmain (резиденціÑ)' + - Ð’Ñтановити визначене міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ñк оÑновне. + Description: Ð’Ñтановлює визначене міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ñк оÑновне Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð² чаті Ñк Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ + server: + Info: + - '&eВикориÑтаннÑ: &6/resadmin server [резиденціÑ]' + - Зробіть поÑтійний Ñервер влаÑником. + Description: Зробіть наземний Ñервер влаÑніÑÑ‚ÑŽ. + rt: + Info: + - '&eВикориÑтаннÑ: &6/res rt (worldname) (playerName)' + - Телепортує Ð²Ð°Ñ Ñƒ випадкове міÑце у визначеному Ñвіті. + Description: ТелепортуєтьÑÑ Ñƒ випадкове міÑце у Ñвіті + mirror: + Info: + - '&eВикориÑтаннÑ: &6/res mirror [Source Residence] [Target Residence]' + - Дзеркала прапорів від однієї резиденції до іншої. Щоб це зробити, ви повинні + бути влаÑником обох або адмініÑтратором. + Description: Дзеркала Прапори + shop: + Info: + - Керує функцією резидентного магазину + Description: Керувати домашнім магазином + SubCommands: + list: + Description: Відображає ÑпиÑок магазинів реÑурÑів + Info: + - '&eВикориÑтаннÑ: &6/res shop list' + - Показує повний ÑпиÑок уÑÑ–Ñ… резиденцій із прапором магазину + vote: + Description: ГолоÑуйте за магазин за міÑцем Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res shop vote <резиденціÑ> [кількіÑÑ‚ÑŒ]' + - ГолоÑує за поточне або визначене міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + like: + Description: ПоÑтавте лайк Ð´Ð»Ñ Ð¿Ð¾Ñтійного магазину + Info: + - '&eВикориÑтаннÑ: &6/res shop like <резиденціÑ>' + - ЗдаєтьÑÑ Ð¿Ñ–Ð´ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð¼Ð°Ð³Ð°Ð·Ð¸Ð½ + votes: + Description: Показує голоÑи res shop + Info: + - '&eВикориÑтаннÑ: &6/res shop votes <резиденціÑ> <Ñторінка>' + - Показує повний ÑпиÑок голоÑів поточного або визначеного магазину Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + likes: + Description: Показує лайки res shop + Info: + - '&eВикориÑтаннÑ: &6/res shop likes <резиденціÑ> <Ñторінка>' + - Показує повний ÑпиÑок лайків поточного або визначеного магазину Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + setdesc: + Description: Ð’Ñтановлює Ð¾Ð¿Ð¸Ñ Ð¼Ð°Ð³Ð°Ð·Ð¸Ð½Ñƒ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res shop setdesc [текÑÑ‚]' + - Ð’Ñтановлює Ð¾Ð¿Ð¸Ñ Ð¼Ð°Ð³Ð°Ð·Ð¸Ð½Ñƒ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ. ПідтримуєтьÑÑ ÐºÐ¾Ð´ кольору. Ð”Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ñдка + викориÑтовуйте /n + createboard: + Description: Створіть дошку магазину res + Info: + - '&eВикориÑтаннÑ: &6/res shop createboard [place]' + - Створює дошку магазину res з вибраної облаÑÑ‚Ñ–. МіÑце - позиціÑ, + з Ñкої починаєтьÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð´Ð¾ÑˆÐºÐ¸ + deleteboard: + Description: ВидалÑÑ” дошку res shop + Info: + - '&eВикориÑтаннÑ: &6/res shop deleteboard' + - ВидалÑÑ” дошку res shop, клацнувши правою кнопкою миші на одному зі знаків + lset: + Info: + - '&eВикориÑтаннÑ: &6/res lset <резиденціÑ> [blacklist/ignorelist] [material]' + - '&eВикориÑтаннÑ: &6/res lset <резиденціÑ> Info' + - ЗанеÑÐµÐ½Ð½Ñ Ð¼Ð°Ñ‚ÐµÑ€Ñ–Ð°Ð»Ñƒ в чорний ÑпиÑок запобігає його розміщенню в резиденції. + - Ignorelist призводить до того, що певний матеріал не захищений Residence. + Description: Змінити параметри чорного ÑпиÑку та ÑпиÑку Ñ–Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ + raidstatus: + Info: + - '&eВикориÑтаннÑ: &6/res raidstatus (resName/playerName)' + Description: Перевірте ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€ÐµÐ¹Ð´Ñƒ на міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + pset: + Info: + - '&eВикориÑтаннÑ: &6/res pset <резиденціÑ> [гравець] [флаг] [true/false/remove]' + - '&eВикориÑтаннÑ: &6/res pset <резиденціÑ> [гравець] removeall' + - Щоб переглÑнути ÑпиÑок прапорів, викориÑтовуйте /res flags ? + Description: Ð’Ñтановіть прапори на певного Ð³Ñ€Ð°Ð²Ñ†Ñ Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ—. + show: + Info: + - '&eВикориÑтаннÑ: &6/res show <резиденціÑ>' + Description: Показати межі Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + flags: + Info: + - Ð”Ð»Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ прапорів зазвичай true дозволÑÑ” дію, а false заборонÑÑ” дію. + Description: СпиÑок прапорів + SubCommands: + anvil: + Translated: ковадло + Description: ДозволÑÑ” або заборонÑÑ” взаємодіÑти з ковадлом + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> anvil true/false/remove' + admin: + Translated: адмін + Description: Дає гравцеві дозвіл змінювати прапори на резиденції + Info: + - '&eВикориÑтаннÑ: &6/res pset <резиденціÑ> admin true/false/remove' + animalkilling: + Translated: вбивÑтвотварин + Description: ДозволÑÑ” або заборонÑÑ” вбивати тварин + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> animalkilling true/false/remove' + animals: + Translated: тварини + Description: ДозволÑÑ” або заборонÑÑ” Ñпавн тварин + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> animals true/false/remove' + anchor: + Translated: anchor + Description: ДозволÑÑ” або заборонÑÑ” викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸Ð²'Ñзки Ð²Ñ–Ð´Ñ€Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> anchor true/false/remove' + anvilbreak: + Translated: зламатиковадло + Description: ДозволÑÑ” або заборонÑÑ” зламати ковадло в резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> anvilbreak true/false/remove' + safezone: + Translated: безпечназона + Description: Якщо вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ true, Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð¾Ñ‡Ð¸Ñ‰Ð°Ñ” погані + наÑлідки Ñ—Ñ— мешканців + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> safezone true/false/remove' + backup: + Translated: Ñ€ÐµÐ·ÐµÑ€Ð²Ð½ÐµÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ + Description: Якщо вÑтановлено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ true, відновлюєтьÑÑ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¹ виглÑд облаÑÑ‚Ñ– (потрібен + WordEdit) + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> backup true/false/remove' + bank: + Translated: банк + Description: ДозволÑÑ” або заборонÑÑ” депозит/знÑÑ‚Ñ‚Ñ Ð³Ñ€Ð¾ÑˆÐµÐ¹ із банку резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> bank true/false/remove' + bed: + Translated: ліжко + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм викориÑтовувати ліжка + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> bed true/false/remove' + honey: + Translated: мед + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм отримувати мед + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> honey true/false/remove' + honeycomb: + Translated: Ñтільниковий + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм отримувати Ñтільники + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> honeycomb true/false/remove' + beacon: + Translated: маÑк + Description: ДозволÑÑ” або заборонÑÑ” взаємодіÑти з маÑком + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> beacon true/false/remove' + brew: + Translated: варити + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм викориÑтовувати підÑтавки Ð´Ð»Ñ Ð²Ð°Ñ€Ñ–Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> brew true/false/remove' + build: + Translated: будувати + Description: ДозволÑÑ” або заборонÑÑ” будівництво + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> build true/false/remove' + burn: + Translated: Ñпалювати + Description: ДозволÑÑ” або заборонÑÑ” ÑÐ¿Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ñ‚Ð¾Ð²Ð¿Ñƒ в помешканнÑÑ… + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> burn true/false/remove' + button: + Translated: кнопка + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм викориÑтовувати кнопки + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> button true/false/remove' + cake: + Translated: торт + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм Ñ—Ñти торт + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> cake true/false/remove' + canimals: + Translated: тварини + Description: ДозволÑÑ” або заборонÑÑ” неÑтандартну поÑву тварин + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> canimals true/false/remove' + chorustp: + Translated: хоруÑи + Description: Дозволити або заборонити телепортацію до резиденції за допомогою + хоруÑів + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> chorustp true/false/remove' + chat: + Translated: чат + Description: ДозволÑÑ” приєднатиÑÑ Ð´Ð¾ кімнати чату резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> chat true/false/remove' + cmonsters: + Translated: монÑтри + Description: ДозволÑÑ” або заборонÑÑ” поÑву Ñпеціальних монÑтрів + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> cmonsters true/false/remove' + commandblock: + Translated: команднийблок + Description: ДозволÑÑ” або заборонÑÑ” взаємодію з командним блоком + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> commandblock true/false/remove' + command: + Translated: команда + Description: ДозволÑÑ” або заборонÑÑ” команду, що викориÑтовуєтьÑÑ Ð² резиденціÑÑ… + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> command true/false/remove' + container: + Translated: відкрити + Description: ДозволÑÑ” або заборонÑÑ” викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿ÐµÑ‡ÐµÐ¹, Ñкринь, дозаторів тощо... + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> container true/false/remove' + coords: + Translated: коорди + Description: Приховує координати Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> coords true/false/remove' + copper: + Translated: мідь + Description: ДозволÑÑ” модифікувати мідні блоки + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> copper true/false/remove' + craft: + Translated: крафт + Description: Дає Ñтіл, зачаровує, варить прапори + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> craft true/false/remove' + creeper: + Translated: кріпер + Description: Дозволити або заборонити вибухи криперів + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> creeper true/false/remove' + dragongrief: + Translated: драконовапечаль + Description: Запобігає горю блоку ендерÑького дракона + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> dragongrief true/false/remove' + day: + Translated: день + Description: Ð’Ñтановлює Ñ‡Ð°Ñ Ð´Ð½Ñ Ð² резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> day true/false/remove' + dye: + Translated: барвник + Description: ДозволÑÑ” або заборонÑÑ” Ñ„Ð°Ñ€Ð±ÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð²ÐµÑ†ÑŒ + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> dye true/false/remove' + damage: + Translated: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ + Description: ДозволÑÑ” або заборонÑÑ” нанеÑÐµÐ½Ð½Ñ Ð±ÑƒÐ´ÑŒ-Ñкої шкоди об’єктам у резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> damage true/false/remove' + decay: + Translated: розпад + Description: ДозволÑÑ” або заборонÑÑ” Ð³Ð½Ð¸Ñ‚Ñ‚Ñ Ð»Ð¸ÑÑ‚Ñ Ð² резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> decay true/false/remove' + destroy: + Translated: знищити + Description: ДозволÑÑ” або заборонÑÑ” лише Ð·Ð½Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð², ÑкаÑовує + прапор збірки + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> destroy true/false/remove' + dryup: + Translated: виÑихати + Description: Запобігає виÑиханню землі + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> dryup true/false/remove' + diode: + Translated: діод + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм викориÑтовувати повторювачі червоного каменю + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> diode true/false/remove' + door: + Translated: двері + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм викориÑтовувати двері та люки + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> door true/false/remove' + egg: + Translated: Ñйце + Description: ДозволÑÑ” або заборонÑÑ” взаємодію з Ñйцем дракона + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> egg true/false/remove' + enchant: + Translated: зачарувати + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм викориÑтовувати чарівні Ñтоли + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> enchant true/false/remove' + explode: + Translated: вибухи + Description: ДозволÑÑ” або заборонÑÑ” вибухи в помешканнÑÑ… + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> explode true/false/remove' + elytra: + Translated: елітри + Description: ДозволÑÑ” або заборонÑÑ” викориÑÑ‚Ð°Ð½Ð½Ñ ÐµÐ»Ñ–Ñ‚Ñ€Ñ–Ð² у помешканнÑÑ… + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> elytra true/false/remove' + enderpearl: + Translated: ендерÑькаперлина + Description: Дозволити або заборонити телепортацію до резиденції за допомогою enderpearl + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> enderpearl true/false/remove' + fallinprotection: + Translated: Ð¿Ð°Ð´Ñ–Ð½Ð½Ñ + Description: Захищає від Ð¿Ð°Ð´Ñ–Ð½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð² у Ð¿Ð¾Ð¼ÐµÑˆÐºÐ°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> fallinprotection true/false/remove' + falldamage: + Translated: пошкодженнÑприпадінні + Description: Захищає гравців від пошкоджень при падінні + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> falldamage true/false/remove' + feed: + Translated: їжа + Description: Якщо вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ true, Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð³Ð¾Ð´ÑƒÑ” Ñвоїх мешканців + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> feed true/false/remove' + friendlyfire: + Translated: дружнійвогонь + Description: Дозволити або заборонити дружній вогонь + Info: + - '&eВикориÑтаннÑ: &6/res pset <резиденціÑ> friendlyfire true/false/remove' + fireball: + Translated: вогнÑÐ½Ð°ÐºÑƒÐ»Ñ + Description: ДозволÑÑ” або заборонÑÑ” вогнÑні кулі в помешканнÑÑ… + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> fireball true/false/remove' + firespread: + Translated: поширеннÑпожежі + Description: ДозволÑÑ” або заборонÑÑ” Ð¿Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¶ÐµÐ¶Ñ– + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> firespread true/false/remove' + flowinprotection: + Translated: захиÑтвідтечії + Description: ДозволÑÑ” або заборонÑÑ” Ð½Ð°Ð´Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ€Ñ–Ð´Ð¸Ð½Ð¸ до Ð¿Ð¾Ð¼ÐµÑˆÐºÐ°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> flowinprotection true/false/remove' + flow: + Translated: потік + Description: ДозволÑÑ” або заборонÑÑ” потік рідини + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> flow true/false/remove' + flowerpot: + Translated: квітковийгорщик + Description: ДозволÑÑ” або заборонÑÑ” взаємодію з квітковим горщиком + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> flowerpot true/false/remove' + grow: + Translated: роÑти + Description: ДозволÑÑ” або заборонÑÑ” вирощувати роÑлини + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> grow true/false/remove' + glow: + Translated: ÑÐ²Ñ–Ñ‚Ñ–Ð½Ð½Ñ + Description: Гравці почнуть ÑвітитиÑÑ Ð¿Ñ€Ð¸ вході в резиденцію + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> glow true/false/remove' + harvest: + Translated: врожай + Description: ДозволÑÑ” збирати врожай + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> harvest true/false/remove' + hotfloor: + Translated: магма + Description: Запобігайте пошкодженню від блоків магми + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> hotfloor true/false/remove' + hidden: + Translated: прихований + Description: Приховує міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð² ÑпиÑку вÑÑ–Ñ… команд + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> hidden true/false/remove' + hook: + Translated: вудка + Description: ДозволÑÑ” або заборонÑÑ” об'єкти, що підхоплюють вудку + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> hook true/false/remove' + healing: + Translated: Ð·Ñ†Ñ–Ð»ÐµÐ½Ð½Ñ + Description: Якщо вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ true, Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ Ð·Ñ†Ñ–Ð»ÑŽÑ” Ñвоїх мешканців + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> healing true/false/remove' + iceform: + Translated: крижанаформа + Description: Запобігає утворенню льоду + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> iceform true/false/remove' + icemelt: + Translated: таненнÑльоду + Description: Запобігає таненню льоду + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> icemelt true/false/remove' + ignite: + Translated: запалити + Description: ДозволÑÑ” або заборонÑÑ” Ð·Ð°Ð¹Ð¼Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> ignite true/false/remove' + itemdrop: + Translated: падіннÑпредмета + Description: ДозволÑÑ” або заборонÑÑ” ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ñ–Ð² + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> itemdrop true/false/remove' + itempickup: + Translated: Ñамовивізтовару + Description: ДозволÑÑ” або заборонÑÑ” Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ‚Ð¾Ð²Ð°Ñ€Ñƒ + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> itempickup true/false/remove' + jump2: + Translated: Ñтрибок2 + Description: ДозволÑÑ” Ñтрибнути на 2 блоки у виÑоту + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> jump2 true/false/remove' + jump3: + Translated: Ñтрибок3 + Description: ДозволÑÑ” Ñтрибнути на 3 блоки у виÑоту + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> jump3 true/false/remove' + keepinv: + Translated: зберігатиінвентар + Description: Гравці зберігають інвентар піÑÐ»Ñ Ñмерті + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> keepinv true/false/remove' + keepexp: + Translated: зберігатидоÑвід + Description: Гравці зберігають доÑвід піÑÐ»Ñ Ñмерті + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> keepexp true/false/remove' + lavaflow: + Translated: лавовийпотік + Description: ДозволÑÑ” або заборонÑÑ” потік лави, перекриває потік + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> lavaflow true/false/remove' + leash: + Translated: повідець + Description: ДозволÑÑ” або заборонÑÑ” прив'Ñзувати тварин + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> leash true/false/remove' + lever: + Translated: важіль + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм викориÑтовувати важелі + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> lever true/false/remove' + mobexpdrop: + Translated: падіннÑдоÑвідумобу + Description: Запобігає випаданню доÑвіду натовпу піÑÐ»Ñ Ñмерті + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> mobexpdrop true/false/remove' + mobitemdrop: + Translated: падіннÑпредметівмобу + Description: Запобігає Ñкиданню предметів натовпу піÑÐ»Ñ Ñмерті + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> mobitemdrop true/false/remove' + mobkilling: + Translated: вбивÑтвомобів + Description: ДозволÑÑ” або заборонÑÑ” вбивати натовп + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> mobkilling true/false/remove' + monsters: + Translated: монÑтри + Description: ДозволÑÑ” або заборонÑÑ” поÑву монÑтрів + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> monsters true/false/remove' + move: + Translated: рухатиÑÑ + Description: ДозволÑÑ” або заборонÑÑ” переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð² резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> move true/false/remove' + nametag: + Translated: іменнатабличка + Description: ДозволÑÑ” або заборонÑÑ” викориÑÑ‚Ð°Ð½Ð½Ñ Ñ‚ÐµÐ³Ñƒ імені + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> nametag true/false/remove' + nanimals: + Translated: тварини3 + Description: ДозволÑÑ” або заборонÑÑ” природне Ð²Ñ–Ð´Ñ€Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð²Ð°Ñ€Ð¸Ð½ + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> nanimals true/false/remove' + nmonsters: + Translated: монÑтри3 + Description: ДозволÑÑ” або заборонÑÑ” поÑву природних монÑтрів + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> nmonsters true/false/remove' + night: + Translated: ніч + Description: Ð’Ñтановлює нічний Ñ‡Ð°Ñ Ñƒ резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> night true/false/remove' + nofly: + Translated: нелітати + Description: ДозволÑÑ” або заборонÑÑ” літати в резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> nofly true/false/remove' + fly: + Translated: літати + Description: Перемикає політ Ð´Ð»Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ–Ð² у резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> fly true/false/remove' + nomobs: + Translated: немаємобів + Description: Запобігає проникненню монÑтрів у помешканнÑ. Потрібно + ввімкнути AutoMobRemoval + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> nomobs true/false/remove' + note: + Translated: примітка + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм викориÑтовувати блоки нотаток + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> note true/false/remove' + nodurability: + Translated: неÑтійкіÑÑ‚ÑŒ + Description: Запобігає втраті міцноÑÑ‚Ñ– виробу + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> nodurability true/false/remove' + overridepvp: + Translated: перевизначитиpvp + Description: Замінює будь-Ñкий захиÑÑ‚ плагіна pvp + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> overridepvp true/false/remove' + pressure: + Translated: тиÑк + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм викориÑтовувати натиÑкні плаÑтини + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> pressure true/false/remove' + piston: + Translated: поршень + Description: Дозволити або заборонити поршнÑм штовхати або Ñ‚Ñгнути + блоки в резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> piston true/false/remove' + pistonprotection: + Translated: поршневийзахиÑÑ‚ + Description: Вмикає або вимикає рух поршневого блоку вÑередину або з міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> pistonprotection true/false/remove' + place: + Translated: place + Description: ДозволÑÑ” або заборонÑÑ” лише Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð², ÑкаÑовує + прапор збірки + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> place true/false/remove' + pvp: + Translated: pvp + Description: Дозволити або заборонити пвп у резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> pvp true/false/remove' + rain: + Translated: дощ + Description: Ð’Ñтановлює дощову погоду в резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> rain true/false/remove' + respawn: + Translated: реÑпаун + Description: Ðвтоматично реÑпаунить Ð³Ñ€Ð°Ð²Ñ†Ñ + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> respawn true/false/remove' + riding: + Translated: їздаверхи + Description: Запобігайте їзді на коні + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> riding true/false/remove' + shoot: + Translated: ÑтрілÑнина + Description: ДозволÑÑ” або заборонÑÑ” Ñтрільбу ÑнарÑдом у зоні + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> shoot true/false/remove' + sun: + Translated: ÑонÑчно + Description: Ð’Ñтановлює ÑонÑчну погоду в резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> sun true/false/remove' + shop: + Translated: ÐºÑ€Ð°Ð¼Ð½Ð¸Ñ†Ñ + Description: Додає резиденцію до ÑпиÑку Ñпеціальних магазинів резиденцій + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> shop true/false/remove' + snowtrail: + Translated: ÑніговаÑтежка + Description: Запобігає утворенню Ñнігових Ñлідів від Ñніговика + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> snowtrail true/false/remove' + spread: + Translated: Ð¿Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ + Description: Запобігає розповÑюдженню блоків + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> spread true/false/remove' + snowball: + Translated: ÑÐ½Ñ–Ð³Ð¾Ð²Ð°ÐºÑƒÐ»Ñ + Description: Запобігає зворотному удару Ñнігової кулі + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> snowball true/false/remove' + sanimals: + Translated: тварини4 + Description: ДозволÑÑ” або заборонÑÑ” нереÑÑ‚ нереÑтовика або ікринок тварин + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> sanimals true/false/remove' + shear: + Translated: Ñтрижка + Description: ДозволÑÑ” або заборонÑÑ” Ñтрижку овець + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> shear true/false/remove' + smonsters: + Translated: монÑÑ‚Ñ€Ð¸Ñ + Description: ДозволÑÑ” або заборонÑÑ” нереÑÑ‚ нереÑтовика або ікри монÑтра + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> smonsters true/false/remove' + subzone: + Translated: підзони + Description: Дозволити гравцеві Ñтворювати підзони в резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> subzone true/false/remove' + title: + Translated: показ + Description: Показує або приховує Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вхід/вихід з резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> title true/false/remove' + table: + Translated: Ñтіл + Description: ДозволÑÑ” або заборонÑÑ” гравцÑм викориÑтовувати робочі Ñтоли + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> table true/false/remove' + tnt: + Translated: tnt + Description: Дозволити або заборонити вибухи ТÐТ + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> tnt true/false/remove' + tp: + Translated: tp + Description: Дозволити або заборонити телепортацію до резиденції + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> tp true/false/remove' + trade: + Translated: Ñ‚Ð¾Ñ€Ð³Ñ–Ð²Ð»Ñ + Description: ДозволÑÑ” або заборонÑÑ” ÑелÑнам здійÑнювати торгівлю за міÑцем Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> trade true/false/remove' + trample: + Translated: розтоптати + Description: ДозволÑÑ” або заборонÑÑ” Ð²Ð¸Ñ‚Ð¾Ð¿Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñівів на території Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> trample true/false/remove' + use: + Translated: викориÑÑ‚Ð°Ð½Ð½Ñ + Description: ДозволÑÑ” або заборонÑÑ” викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ð²ÐµÑ€ÐµÐ¹, важелів, кнопок тощо... + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> use true/false/remove' + vehicledestroy: + Translated: знищеннÑавтотранÑпорту + Description: ДозволÑÑ” або заборонÑÑ” Ð·Ð½Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ñ€Ð°Ð½Ñпортного заÑобу + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> vehicledestroy true/false/remove' + witherspawn: + Translated: візерÑпаун + Description: ДозволÑÑ” або заборонÑÑ” візера + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> witherspawn true/false/remove' + phantomspawn: + Translated: фантомÑпаун + Description: ДозволÑÑ” або заборонÑÑ” фантомний Ñпавн + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> phantomspawn true/false/remove' + witherdamage: + Translated: пошкодженнÑвізера + Description: ДозволÑÑ” або заборонÑÑ” Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ в'Ñненні + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> witherdamage true/false/remove' + witherdestruction: + Translated: witherdestruction + Description: ДозволÑÑ” або заборонÑÑ” Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð² в'ÑÐ½ÐµÐ½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> witherdestruction true/false/remove' + waterflow: + Translated: потікводи + Description: ДозволÑÑ” або заборонÑÑ” потік води, перекриває потік + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> waterflow true/false/remove' + wspeed1: + Translated: wspeed1 + Description: Змінити швидкіÑÑ‚ÑŒ ходьби гравців у резиденції на %1 + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> wspeed1 true/false/remove' + wspeed2: + Translated: wspeed2 + Description: Змінити швидкіÑÑ‚ÑŒ ходьби гравців у резиденції на %1 + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> wspeed2 true/false/remove' + brush: + Translated: пензлик + Description: ДозволÑÑ” або заборонÑÑ” Ñ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð² + Info: + - '&eВикориÑтаннÑ: &6/res set/pset <резиденціÑ> brush true/false/remove' + remove: + Info: + - '&eВикориÑтаннÑ: &6/res remove [residence_name]' + Description: Видалити резиденції. + signupdate: + Info: + - '&eВикориÑтаннÑ: &6/res signupdate' + Description: Оновлені вивіÑки про міÑце Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + current: + Info: + - '&eВикориÑтаннÑ: &6/res current' + Description: Покажіть міÑце проживаннÑ, в Ñкому ви зараз перебуваєте. + reload: + Info: + - '&eВикориÑтаннÑ: &6/res reload [config/lang/groups/flags]' + Description: перезавантажити файли перекладу, або конфігурації + leaveraid: + Info: + - '&eВикориÑтаннÑ: &6/res leaveraid' + Description: Залишаште рейд. + setowner: + Info: + - '&eВикориÑтаннÑ: &6/resadmin setowner [резиденціÑ] [player] (-keepflags)' + Description: Змінити влаÑника житла. + defend: + Info: + - '&eВикориÑтаннÑ: &6/res defend [resName] (playerName)' + Description: ПриєднуйтеÑÑŒ до захиÑту від рейдерÑтва за міÑцем Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + attack: + Description: Початок рейду за міÑцем Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/res attack [resName]' + unstuck: + Info: + - '&eВикориÑтаннÑ: &6/res unstuck' + Description: ТелепортуєтьÑÑ Ð·Ð° межі міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + subzone: + Info: + - '&eВикориÑтаннÑ: &6/res subzone <резиденціÑ> [subzone name]' + - Якщо ви не введете назву міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ, ми Ñпробуємо викориÑтати міÑце проживаннÑ, + в Ñкому ви перебуваєте. + Description: Створюйте підзони в резиденціÑÑ…. + removeworld: + Info: + - '&eВикориÑтаннÑ: &6/res removeworld [worldname]' + - Можна викориÑтовувати тільки в конÑолі + Description: Видалити вÑÑ– резиденції зі Ñвіту + limits: + Info: + - '&eВикориÑтаннÑ: &6/res limits (playerName)' + - Показує обмеженнÑ, Ñкі ви маєте при Ñтворенні та управлінні резиденціÑми. + Description: Покажіть Ñвої межі. + set: + Info: + - '&eВикориÑтаннÑ: &6/res set <резиденціÑ> [flag] [true/false/remove]' + - Щоб переглÑнути ÑпиÑок прапорів, ÑкориÑтайтеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ /res flags ? + - Ці прапори заÑтоÑовуютьÑÑ Ð´Ð¾ вÑÑ–Ñ… гравців, Ñкі не мають прапора, заÑтоÑованого + Ñпеціально Ð´Ð»Ñ Ð½Ð¸Ñ…. (див /res pset ?) + Description: Ð’Ñтановіть загальні прапори на резиденції + clearflags: + Info: + - '&eВикориÑтаннÑ: &6/res clearflags <резиденціÑ>' + Description: Приберіть уÑÑ– прапори з резиденцій + message: + Info: + - '&eВикориÑтаннÑ: &6/res message <резиденціÑ> [enter/leave] [message]' + - Ð’Ñтановіть Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вхід або вихід з резиденції. + - '&eВикориÑтаннÑ: &6/res message <резиденціÑ> remove [enter/leave]' + - ВидалÑÑ” Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вхід або вихід. + Description: ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ”ÑŽ вхід / Ð·Ð°Ð»Ð¸ÑˆÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ + command: + Info: + - '&eВикориÑтаннÑ: &6/res command <резиденціÑ> <команда>' + - Показує ÑпиÑок, додає або видалÑÑ” дозволені або заборонені команди в резиденції + - ВикориÑтовуйте _ Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ з декількома змінними + Description: Керує дозволеними або заблокованими командами в резиденції + confirm: + Description: Підтверджує Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ. + Info: + - '&eВикориÑтаннÑ: &6/res confirm' + - Підтверджує Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ. + resadmin: + Info: + - '&eВикориÑтаннÑ: &6/res resadmin [on/off]' + Description: Увімкнути або вимкнути адмініÑтратора резиденції + tpset: + Info: + - '&eВикориÑтаннÑ: &6/res tpset' + - Це вÑтановить міÑце телепортації Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ— на те міÑце, де ви перебуваєте. + - Щоб ÑкориÑтатиÑÑ Ñ†Ñ–Ñ”ÑŽ командою, ви повинні знаходитиÑÑ Ð² резиденції. + - Ви також повинні бути влаÑником або мати прапор +admin Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ—. + Description: Ð’Ñтановити міÑце телепортації резиденції + tpconfirm: + Info: + - '&eВикориÑтаннÑ: &6/res tpconfirm' + - Телепортує Ð²Ð°Ñ Ð´Ð¾ міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ, коли Ñ‚ÐµÐ»ÐµÐ¿Ð¾Ñ€Ñ‚Ð°Ñ†Ñ–Ñ Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð°. + Description: Ігнорувати Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ небезпечну телепортацію + removeall: + Info: + - '&eВикориÑтаннÑ: &6/res removeall [owner]' + - ВидалÑÑ” вÑÑ– резиденції, що належать певному гравцеві.' + - Потрібен /resadmin, Ñкщо ви викориÑтовуєте його не Ð´Ð»Ñ Ñебе, а Ð´Ð»Ñ ÐºÐ¾Ð³Ð¾ÑÑŒ іншого. + Description: Видалити вÑÑ– резиденції, Ñкими володіє гравець. + material: + Info: + - '&eВикориÑтаннÑ: &6/res material [material]' + Description: Перевірка наÑвноÑÑ‚Ñ– матеріалу за його ідентифікатором + kick: + Info: + - '&eВикориÑтаннÑ: &6/res kick <гравець>' + - Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ ви повинні бути влаÑником або адмініÑтратором. + - Гравець повинен бути онлайн. + Description: ВиганÑÑ” Ð³Ñ€Ð°Ð²Ñ†Ñ Ð· резиденції. + sublist: + Info: + - '&eВикориÑтаннÑ: &6/res sublist <резиденціÑ> <Ñторінка>' + - Перелічіть підзони в межах резиденції. + Description: Перелік підзон резиденції + rename: + Info: + - '&eВикориÑтаннÑ: &6/res rename [OldName] [NewName]' + - Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ ви повинні бути влаÑником або адмініÑтратором. + - Ðазва не повинна бути зайнÑта іншою резиденцією. + Description: Перейменовує міÑце проживаннÑ. + setallfor: + Info: + - '&eВикориÑтаннÑ: &6/res setallfor [playerName] [flag] [true/false/remove]' + Description: Ð’Ñтановити загальні прапори на вÑÑ–Ñ… резиденціÑÑ…, що належать певному гравцеві + lease: + Info: + - '&eВикориÑтаннÑ: &6/res lease [renew/cost] [residence]' + - /res lease cost покаже вартіÑÑ‚ÑŒ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ð¾Ñ€ÐµÐ½Ð´Ð¸ житла. + - /res lease renew продовжить Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð·Ð° умови, що у Ð²Ð°Ñ Ñ” доÑтатньо коштів. + Description: Керуйте орендою житла + SubCommands: + set: + Description: Ð’Ñтановіть термін оренди + Info: + - '&eВикориÑтаннÑ: &6/resadmin lease set [residence] [#days/infinite]' + - Ð’Ñтановлює Ñ‡Ð°Ñ Ð¾Ñ€ÐµÐ½Ð´Ð¸ на певну кількіÑÑ‚ÑŒ днів або неÑкінченно. + renew: + Description: ÐŸÑ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ñ‚ÐµÑ€Ð¼Ñ–Ð½Ñƒ оренди + Info: + - '&eВикориÑтаннÑ: &6/resadmin lease renew <резиденціÑ>' + - ÐŸÑ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ñ‚ÐµÑ€Ð¼Ñ–Ð½Ñƒ оренди Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ або вказаного міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ. + list: + Description: Показати ÑпиÑок договорів оренди поточного міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/resadmin lease list <резиденціÑ> ' + - Виводить вÑÑ– терміни оренди підзон + expires: + Description: Дата Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ð¾Ñ€ÐµÐ½Ð´Ð¸ + Info: + - '&eВикориÑтаннÑ: &6/resadmin lease expires <резиденціÑ>' + - Показує, коли закінчуєтьÑÑ Ñ‚ÐµÑ€Ð¼Ñ–Ð½ оренди житла. + cost: + Description: Показує вартіÑÑ‚ÑŒ Ð¿Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ + Info: + - '&eВикориÑтаннÑ: &6/resadmin lease cost <резиденціÑ>' + - Показує, Ñкільки грошей вам потрібно Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ð¾Ñ€ÐµÐ½Ð´Ð¸ житла. + tp: + Info: + - '&eВикориÑтаннÑ: &6/res tp [резиденціÑ]' + - Переміщує Ð²Ð°Ñ Ð´Ð¾ резиденції, ви повинні мати доÑтуп до прапора +tp + або бути влаÑником. + - ÐдмініÑтратор Ñервера також повинен дозволити вашій групі доÑтупу телепортуватиÑÑ. + Description: ТелепортуйтеÑÑ Ð´Ð¾ міÑÑ†Ñ Ð¿Ñ€Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ + setall: + Info: + - '&eВикориÑтаннÑ: &6/res setall [flag] [true/false/remove]' + Description: Ð’Ñтановіть загальні прапори на вÑÑ–Ñ… резиденціÑÑ… + resreload: + Description: Перезавантажити резиденцію. + Info: + - '&eВикориÑтаннÑ: &6/resreload' + resload: + Description: Завантажте файл Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ—. + Info: + - '&eВикориÑтаннÑ: &6/resload' + - Команда UNSAFE не зберігає житлові будинки в першу чергу. + - Завантажує файл Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ñ–Ñ— піÑÐ»Ñ Ð²Ð½ÐµÑÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½. From 1162810e3367cf25d3f631c9d1933f5ae37f7288 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 16 Oct 2023 13:09:39 +0300 Subject: [PATCH 1068/1142] Lets not save empty files --- .../bekvon/bukkit/residence/Residence.java | 49 ++++++++++++------- .../bekvon/bukkit/residence/gui/FlagUtil.java | 2 +- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index fd0ed0c27..075a26a90 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -134,6 +135,7 @@ import fr.crafter.tickleman.realplugin.RealPlugin; import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; @@ -205,7 +207,6 @@ public class Residence extends JavaPlugin { protected boolean firstenable = true; protected EconomyInterface economy; - private int saveVersion = 1; public File dataFolder; protected CMITask leaseBukkitId = null; protected CMITask rentBukkitId = null; @@ -1286,6 +1287,18 @@ private static void saveFile(File worldFolder, String fileName, String key, Obje tmpFlagsFile.renameTo(ymlFlagsSaveLoc); } + private static void saveBackup(File ymlSaveLoc, String worldName, File worldFolder) { + if (ymlSaveLoc.isFile()) { + File backupFolder = new File(worldFolder, "Backup"); + backupFolder.mkdirs(); + File backupFile = new File(backupFolder, "res_" + worldName + ".yml"); + if (backupFile.isFile()) { + backupFile.delete(); + } + ymlSaveLoc.renameTo(backupFile); + } + } + private void saveYml() throws IOException { File saveFolder = new File(dataFolder, "Save"); File worldFolder = new File(saveFolder, "Worlds"); @@ -1295,14 +1308,23 @@ private void saveYml() throws IOException { Map save = rmanager.save(); for (Entry entry : save.entrySet()) { + boolean emptyRecord = false; + // Not saving files without any records in them. Mainly for servers with many small temporary worlds + try { + emptyRecord = ((LinkedHashMap) entry.getValue()).isEmpty(); + } catch (Throwable e) { + } + File ymlSaveLoc = new File(worldFolder, "res_" + entry.getKey() + ".yml"); + + if (emptyRecord) { + saveBackup(ymlSaveLoc, entry.getKey(), worldFolder); + continue; + } + File tmpFile = new File(worldFolder, "tmp_res_" + entry.getKey() + ".yml"); syml = new YMLSaveHelper(tmpFile); - syml.getRoot().put("Version", saveVersion); - World world = server.getWorld(entry.getKey()); - if (world != null) - syml.getRoot().put("Seed", world.getSeed()); if (this.getResidenceManager().getMessageCatch(entry.getKey()) != null) syml.getRoot().put("Messages", this.getResidenceManager().getMessageCatch(entry.getKey())); if (this.getResidenceManager().getFlagsCatch(entry.getKey()) != null) @@ -1310,17 +1332,10 @@ private void saveYml() throws IOException { syml.getRoot().put("Residences", entry.getValue()); syml.save(); - if (ymlSaveLoc.isFile()) { - File backupFolder = new File(worldFolder, "Backup"); - backupFolder.mkdirs(); - File backupFile = new File(backupFolder, "res_" + entry.getKey() + ".yml"); - if (backupFile.isFile()) { - backupFile.delete(); - } - ymlSaveLoc.renameTo(backupFile); - } - tmpFile.renameTo(ymlSaveLoc); + saveBackup(ymlSaveLoc, entry.getKey(), worldFolder); + + tmpFile.renameTo(ymlSaveLoc); } YMLSaveHelper yml; @@ -1329,7 +1344,6 @@ private void saveYml() throws IOException { File tmpFile = new File(saveFolder, "tmp_forsale.yml"); yml = new YMLSaveHelper(tmpFile); yml.save(); - yml.getRoot().put("Version", saveVersion); yml.getRoot().put("Economy", tmanager.save()); yml.save(); if (ymlSaveLoc.isFile()) { @@ -1347,7 +1361,6 @@ private void saveYml() throws IOException { ymlSaveLoc = new File(saveFolder, "leases.yml"); tmpFile = new File(saveFolder, "tmp_leases.yml"); yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); yml.getRoot().put("Leases", leasemanager.save()); yml.save(); if (ymlSaveLoc.isFile()) { @@ -1365,7 +1378,6 @@ private void saveYml() throws IOException { ymlSaveLoc = new File(saveFolder, "permlists.yml"); tmpFile = new File(saveFolder, "tmp_permlists.yml"); yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); yml.getRoot().put("PermissionLists", pmanager.save()); yml.save(); if (ymlSaveLoc.isFile()) { @@ -1383,7 +1395,6 @@ private void saveYml() throws IOException { ymlSaveLoc = new File(saveFolder, "rent.yml"); tmpFile = new File(saveFolder, "tmp_rent.yml"); yml = new YMLSaveHelper(tmpFile); - yml.getRoot().put("Version", saveVersion); yml.getRoot().put("RentSystem", rentmanager.save()); yml.save(); if (ymlSaveLoc.isFile()) { diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 565abc57e..6c75f91cd 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -60,7 +60,7 @@ public void afterAsyncUpdate(ItemStack item) { CMIItemStack i = CMILib.getInstance().getItemManager().getItem(value, ahead); - if (i == null) + if (i == null || i.getType() == null) i = new CMIItemStack(CMIMaterial.STONE); ItemStack item = i.getItemStack(); From 21a9cfe9666da1ad3ace2e98305f0620997a7855 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 16 Oct 2023 15:25:51 +0300 Subject: [PATCH 1069/1142] Lets use long as trimming value instead of int --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index e80cb4870..fbbc186af 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -2298,11 +2298,11 @@ public void setSignsInResidence(Set signsInResidence) { } public double getWorthByOwner() { - return (int) ((getTotalSize() * getOwnerGroup().getCostPerBlock()) * 100) / 100D; + return (long) ((getTotalSize() * getOwnerGroup().getCostPerBlock()) * 100L) / 100D; } public double getWorth() { - return (int) ((getTotalSize() * getBlockSellPrice()) * 100) / 100.0; + return (long) ((getTotalSize() * getBlockSellPrice()) * 100L) / 100D; } public void showBounds(Player player, boolean showOneTime) { From bd826bc7a9326e1ce320abbf03627509e32f1bcd Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 16 Oct 2023 15:37:33 +0300 Subject: [PATCH 1070/1142] glowing item frame addition to hanging break event check --- .../residence/listeners/ResidenceEntityListener.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 4261fe77a..b4a92c20f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -72,6 +72,7 @@ import net.Zrips.CMILib.ActionBar.CMIActionBar; import net.Zrips.CMILib.Entities.CMIEntity; +import net.Zrips.CMILib.Entities.CMIEntityType; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Logs.CMIDebug; @@ -738,8 +739,10 @@ public void onHangingBreakEvent(HangingBreakEvent event) { return; if (plugin.isDisabledWorldListener(ent.getWorld())) return; + + CMIEntityType type = CMIEntityType.getByType(event.getEntity().getType()); - if (!event.getEntity().getType().equals(EntityType.ITEM_FRAME)) + if (!type.equals(CMIEntityType.ITEM_FRAME) && !type.equals(CMIEntityType.GLOW_ITEM_FRAME)) return; if (!event.getCause().equals(RemoveCause.PHYSICS)) @@ -1040,7 +1043,7 @@ public void onEntityExplode(EntityExplodeEvent event) { break; default: if (blockperms.has(Flags.destroy, FlagCombo.OnlyFalse) || blockperms.has(Flags.explode, FlagCombo.OnlyFalse)) - preserve.add(block); + preserve.add(block); continue; } } else { From f1f1cb652ddda390a6a7fa0a9eeda06b4aee72e3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 17 Oct 2023 12:53:00 +0300 Subject: [PATCH 1071/1142] Folia teleportion better support --- .../bukkit/residence/ConfigManager.java | 2 +- .../residence/containers/ValidLocation.java | 5 ++ .../protection/ClaimedResidence.java | 44 +++++++--- .../bukkit/residence/utils/RandomTp.java | 85 ++++++++++++++++--- 4 files changed, 109 insertions(+), 27 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/containers/ValidLocation.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index dd2d8ee2c..e9a7bec2f 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -1389,7 +1389,7 @@ public void UpdateConfigFile() { "This is quite heavy on server side, so enable only if you really need this feature"); AutoMobRemoval = c.get("Global.AutoMobRemoval.Use", false); c.addComment("Global.AutoMobRemoval.Interval", "How often in seconds to check for monsters in residences. Keep it at reasonable amount"); - AutoMobRemovalInterval = c.get("Global.AutoMobRemoval.Interval", 3); + AutoMobRemovalInterval = c.get("Global.AutoMobRemoval.Interval", 5); enforceAreaInsideArea = c.get("Global.EnforceAreaInsideArea", false); spoutEnable = c.get("Global.EnableSpout", false); diff --git a/src/com/bekvon/bukkit/residence/containers/ValidLocation.java b/src/com/bekvon/bukkit/residence/containers/ValidLocation.java new file mode 100644 index 000000000..df56516eb --- /dev/null +++ b/src/com/bekvon/bukkit/residence/containers/ValidLocation.java @@ -0,0 +1,5 @@ +package com.bekvon.bukkit.residence.containers; + +public class ValidLocation { + public boolean valid = true; +} diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index fbbc186af..aa7850f7c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -38,6 +38,7 @@ import com.bekvon.bukkit.residence.containers.MinimizeMessages; import com.bekvon.bukkit.residence.containers.RandomLoc; import com.bekvon.bukkit.residence.containers.ResidencePlayer; +import com.bekvon.bukkit.residence.containers.ValidLocation; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.ResidenceBank; @@ -64,6 +65,7 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Version.Version; @@ -1062,7 +1064,8 @@ public Location getMiddleFreeLoc(Location insideLoc, Player player, boolean toSp int maxIt = newLoc.getBlockY() + 1; try { - insideLoc.getChunk().setForceLoaded(true); + if (!Version.isFolia()) + insideLoc.getChunk().setForceLoaded(true); } catch (Throwable e) { } @@ -1078,7 +1081,11 @@ public Location getMiddleFreeLoc(Location insideLoc, Player player, boolean toSp Block block = newLoc.getBlock(); Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); - if (ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2) + + if (Version.isFolia()) { + found = true; + break; + } else if (ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2) && !ResidencePlayerListener.isEmptyBlock(block3)) { found = true; break; @@ -1088,7 +1095,8 @@ public Location getMiddleFreeLoc(Location insideLoc, Player player, boolean toSp } try { - insideLoc.getChunk().setForceLoaded(false); + if (!Version.isFolia()) + insideLoc.getChunk().setForceLoaded(false); } catch (Throwable e) { } @@ -1159,7 +1167,10 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player, boolean toS Block block = loc.getBlock(); Block block2 = loc.clone().add(0, 1, 0).getBlock(); Block block3 = loc.clone().add(0, -1, 0).getBlock(); - if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) + if (Version.isFolia()) { + found = true; + break; + } else if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2)) { break; } @@ -1352,16 +1363,15 @@ public Location getTeleportLocation(Player player, boolean toSpawnOnFail) { tpLoc = t.toVector(); } - if (tpLoc != null) { - Location loc = tpLoc.toLocation(this.getMainArea().getLowLocation().getWorld()); - if (PitchYaw != null) { - loc.setPitch((float) PitchYaw.getX()); - loc.setYaw((float) PitchYaw.getY()); - } - return loc; - } + if (tpLoc == null) + return null; - return null; + Location loc = tpLoc.toLocation(this.getMainArea().getLowLocation().getWorld()); + if (PitchYaw != null) { + loc.setPitch((float) PitchYaw.getX()); + loc.setYaw((float) PitchYaw.getY()); + } + return loc; } public void setTpLoc(Player player, boolean resadmin) { @@ -1483,6 +1493,11 @@ else if (distance == 555) } Location loc = this.getTeleportLocation(targetPlayer, false); + finalizeTP(loc, reqPlayer, targetPlayer, resadmin, bypassDelay); + + } + + private void finalizeTP(Location loc, Player reqPlayer, Player targetPlayer, boolean isAdmin, boolean bypassDelay) { if (loc == null) { Residence.getInstance().msg(reqPlayer, lm.Invalid_Location); @@ -1543,7 +1558,8 @@ private void performInstantTp(final Location targloc, final Player targetPlayer, targetPlayer.closeInventory(); try { - targloc.getChunk().load(); + if (!Version.isFolia()) + targloc.getChunk().load(); } catch (Throwable e) { } diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 83f427dc8..e1155e3d7 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -14,11 +14,13 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.RandomTeleport; +import com.bekvon.bukkit.residence.containers.ValidLocation; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.protection.ClaimedResidence; import net.Zrips.CMILib.Container.CMIWorld; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; import net.Zrips.CMILib.Version.PaperMethods.PaperLib; import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; @@ -150,14 +152,20 @@ public Location getRandomlocationSync(World world) { } public CompletableFuture getRandomlocationAsync(World world) { - if (Version.isFolia()) { - CompletableFuture future = new CompletableFuture(); - future.complete(get(world)); - return future; - } return CompletableFuture.supplyAsync(() -> get(world)); } + private RandomTeleport getRandomTeleport(World world) { + if (world == null) + return null; + for (RandomTeleport one : plugin.getConfigManager().getRandomTeleport()) { + if (!one.getCenter().getWorld().equals(world)) + continue; + return one; + } + return null; + } + private Location get(World world) { if (world == null) @@ -196,6 +204,7 @@ private Location get(World world) { while (!ok) { tries++; + if (tries > maxtries) return null; @@ -222,7 +231,20 @@ private Location get(World world) { if (loc.getWorld().getEnvironment().equals(Environment.NETHER)) { loc.setY(CMIWorld.getMaxHeight(loc.getWorld()) / 2); } else { - if (Version.isPaper() && Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + if (Version.isFolia()) { + + Location location = loc; + + CompletableFuture fut = CMIScheduler.runAtLocation(loc, () -> { + Chunk chunk = location.getChunk(); + int y = chunk.getChunkSnapshot().getHighestBlockYAt(location.getBlockX() & 0xF, location.getBlockZ() & 0xF) - 1; + location.setY(y); + }); + fut.get(); + + loc = location; + + } else if (Version.isPaper() && Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { CompletableFuture chunkFuture = PaperLib.getChunkAtAsync(loc, false); Chunk chunk = chunkFuture.get(); @@ -242,15 +264,39 @@ private Location get(World world) { continue; } - if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) - continue; + ValidLocation empty = new ValidLocation(); - if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.LAVA)) - continue; + if (Version.isFolia()) { + Location location = loc; + CompletableFuture fut = CMIScheduler.runAtLocation(loc, () -> { + empty.valid = ResidencePlayerListener.isEmptyBlock(location.getBlock()); - if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.WATER)) + if (!empty.valid) + return; + + empty.valid = !location.clone().add(0, -1, 0).getBlock().getType().equals(Material.LAVA); + + if (!empty.valid) + return; + + empty.valid = !location.clone().add(0, -1, 0).getBlock().getType().equals(Material.WATER); + }); + fut.get(); + } else { + empty.valid = ResidencePlayerListener.isEmptyBlock(loc.getBlock()); + } + + if (!empty.valid) continue; + if (!Version.isFolia()) { + if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.LAVA)) + continue; + + if (loc.clone().add(0, -1, 0).getBlock().getType().equals(Material.WATER)) + continue; + } + ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null) @@ -280,8 +326,22 @@ private static Location getDownLocationSimple(Location oloc) { loc.setY(loc.getBlockY()); if (!oloc.getWorld().getEnvironment().equals(Environment.NETHER)) { - if (Version.isPaper() && Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + if (Version.isFolia()) { + + Location location = loc.clone(); + + CompletableFuture fut = CMIScheduler.runAtLocation(loc, () -> { + Chunk chunk = location.getChunk(); + int y = chunk.getChunkSnapshot().getHighestBlockYAt(location.getBlockX() & 0xF, location.getBlockZ() & 0xF) - 1; + location.setY(y + 1); + }); + fut.get(); + + loc = location; + + } else if (Version.isPaper() && Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { CompletableFuture chunkFuture = PaperLib.getChunkAtAsync(loc, false); + Chunk chunk = chunkFuture.get(); if (chunk == null) @@ -302,6 +362,7 @@ private static Location getDownLocationSimple(Location oloc) { } if (oloc.getWorld().getEnvironment().equals(Environment.THE_END) && loc.getY() < 5) return null; + return loc.add(0, 1, 0); } From 78fba06462390c6c428fe41cd98f20378668859b Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 17 Oct 2023 13:07:42 +0300 Subject: [PATCH 1072/1142] Fix for random teleportations not working on paper servers on not pregenerated maps --- src/com/bekvon/bukkit/residence/utils/RandomTp.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index e1155e3d7..32d7cb466 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -252,6 +252,7 @@ private Location get(World world) { continue; int y = chunk.getChunkSnapshot().getHighestBlockYAt(loc.getBlockX() & 0xF, loc.getBlockZ() & 0xF) - 1; + loc.setY(y); } else { loc.setY(loc.getWorld().getHighestBlockYAt(loc)); @@ -340,7 +341,7 @@ private static Location getDownLocationSimple(Location oloc) { loc = location; } else if (Version.isPaper() && Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - CompletableFuture chunkFuture = PaperLib.getChunkAtAsync(loc, false); + CompletableFuture chunkFuture = PaperLib.getChunkAtAsync(loc, true); Chunk chunk = chunkFuture.get(); From 0fee7784492e74e68e53e18f2787f241def1f7ad Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 17 Oct 2023 13:35:20 +0300 Subject: [PATCH 1073/1142] Lets allow residence ownership transfer of autocleanup action --- .../bekvon/bukkit/residence/ConfigManager.java | 16 ++++++++++++++++ .../bukkit/residence/commands/setowner.java | 8 ++++---- .../bukkit/residence/utils/FileCleanUp.java | 12 +++++++++++- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index e9a7bec2f..6da1e69d7 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -228,6 +228,8 @@ public class ConfigManager { protected List NoFlowWorlds; protected List AutoCleanUpWorlds; + private boolean AutoCleanTrasnferToUser; + private String AutoCleanUserName; protected List NoPlaceWorlds; protected List BlockFallWorlds; protected List CleanWorlds; @@ -958,6 +960,12 @@ public void UpdateConfigFile() { AutoCleanUpWorlds.set(i, AutoCleanUpWorlds.get(i).toLowerCase()); } + c.addComment("Global.AutoCleanUp.TrasnferToUser", "When enabled we will transfer residence to defined user instead of removing it", "Defined user will be excluded from cleanup operation"); + AutoCleanTrasnferToUser = c.get("Global.AutoCleanUp.TrasnferToUser", false); + + c.addComment("Global.AutoCleanUp.UserName", "Worlds to be included in check list"); + AutoCleanUserName = c.get("Global.AutoCleanUp.UserName", "Server_Land"); + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { LwcMatList.clear(); c.addComment("Global.Lwc.OnDelete", "Removes lwc protection from all defined objects when removing residence"); @@ -2333,6 +2341,14 @@ public boolean isResBankBack() { return ResBankBack; } + public boolean isAutoCleanTrasnferToUser() { + return AutoCleanTrasnferToUser; + } + + public String getAutoCleanUserName() { + return AutoCleanUserName; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/commands/setowner.java b/src/com/bekvon/bukkit/residence/commands/setowner.java index e9bb18b68..cadf353ac 100644 --- a/src/com/bekvon/bukkit/residence/commands/setowner.java +++ b/src/com/bekvon/bukkit/residence/commands/setowner.java @@ -47,10 +47,10 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } area.getPermissions().setOwner(args[1], !keepFlags); - if (plugin.getRentManager().isForRent(area.getName())) - plugin.getRentManager().removeRentable(area.getName()); - if (plugin.getTransactionManager().isForSale(area.getName())) - plugin.getTransactionManager().removeFromSale(area.getName()); + if (plugin.getRentManager().isForRent(area)) + plugin.getRentManager().removeRentable(area); + if (plugin.getTransactionManager().isForSale(area)) + plugin.getTransactionManager().removeFromSale(area); if (!keepFlags) area.getPermissions().applyDefaultFlags(); diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index cafa807a7..9ecfeffbf 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -67,6 +67,9 @@ public void cleanOldResidence() { if (res.getOwner().equalsIgnoreCase("server land") || res.getOwner().equalsIgnoreCase(plugin.getServerLandName())) continue; + if (res.getOwner().equalsIgnoreCase(plugin.getConfigManager().getAutoCleanUserName())) + continue; + long lastPlayed = player.getLastPlayed(); int dif = (int) ((time - lastPlayed) / 1000 / 60 / 60 / 24); if (dif < interval) @@ -77,7 +80,14 @@ public void cleanOldResidence() { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getUniqueId()); - plugin.getResidenceManager().removeResidence(rPlayer, oneName.getValue(), true, plugin.getConfigManager().isAutoCleanUpRegenerate()); + if (plugin.getConfigManager().isAutoCleanTrasnferToUser() && res.getOwner().equalsIgnoreCase(plugin.getConfigManager().getAutoCleanUserName())) { + res.getPermissions().setOwner(plugin.getConfigManager().getAutoCleanUserName(), true); + if (plugin.getRentManager().isForRent(res)) + plugin.getRentManager().removeRentable(res); + if (plugin.getTransactionManager().isForSale(res)) + plugin.getTransactionManager().removeFromSale(res); + } else + plugin.getResidenceManager().removeResidence(rPlayer, oneName.getValue(), true, plugin.getConfigManager().isAutoCleanUpRegenerate()); i++; } } catch (Throwable e) { From 336ac00a715fcabec379c594d4903296d88d09a2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 17 Oct 2023 14:38:26 +0300 Subject: [PATCH 1074/1142] VersionUp --- src/com/bekvon/bukkit/residence/commands/auto.java | 3 +-- .../bukkit/residence/protection/ResidencePermissions.java | 6 ++---- .../bukkit/residence/slimeFun/SlimeFunResidenceModule.java | 1 - src/plugin.yml | 2 +- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index e6fe80378..fa1e7f3ec 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -24,7 +24,6 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; public class auto implements cmd { @@ -373,7 +372,7 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre int maxX = getMax(groupMaxX); int maxY = getMax(group.getMaxY()); int maxZ = getMax(groupMaxZ); - + if (maxX > max && max > 0) maxX = max; if (maxY > max && max > 0) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 43d8c79bc..38bfaaf2a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -27,8 +27,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; -import net.Zrips.CMILib.Logs.CMIDebug; - public class ResidencePermissions extends FlagPermissions { private UUID ownerUUID; @@ -50,7 +48,7 @@ public ResidencePermissions(ClaimedResidence res, String creator, UUID creatorUU else ownerUUID = creatorUUID; if (ownerUUID == null) - ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID()); + ownerUUID = Residence.getInstance().getEmptyUserUUID(); this.ownerLastKnownName = creator; world = inworld; } @@ -60,7 +58,7 @@ public ResidencePermissions(ClaimedResidence res, String creator, String inworld this(res); ownerUUID = Residence.getInstance().getPlayerUUID(creator); if (ownerUUID == null) - ownerUUID = UUID.fromString(Residence.getInstance().getTempUserUUID()); + ownerUUID = Residence.getInstance().getEmptyUserUUID(); this.ownerLastKnownName = creator; world = inworld; } diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index 788ec9e97..6878e07f6 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -15,7 +15,6 @@ import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.Interaction; import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.ProtectionModule; -import net.Zrips.CMILib.Logs.CMIDebug; public class SlimeFunResidenceModule implements ProtectionModule { diff --git a/src/plugin.yml b/src/plugin.yml index 3ec6b610e..1b6198f36 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.3.0 +version: 5.1.4.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 970b32cd18925515f9a58d51de290d12d6504c2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E7=88=B1?= <21982139+ShallowAi@users.noreply.github.com> Date: Wed, 18 Oct 2023 16:30:50 +0800 Subject: [PATCH 1075/1142] Fix lease expiration time overflow When lease expire time minus current time over 2147483647 will return wrong value. --- src/com/bekvon/bukkit/residence/protection/LeaseManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java index e073a62ad..e927fd540 100644 --- a/src/com/bekvon/bukkit/residence/protection/LeaseManager.java +++ b/src/com/bekvon/bukkit/residence/protection/LeaseManager.java @@ -184,7 +184,7 @@ private static int daysRemaining(ClaimedResidence res) { long get = res.getLeaseExpireTime(); if (get <= System.currentTimeMillis()) return 0; - return msToDays((int) (get - System.currentTimeMillis())); + return msToDays(get - System.currentTimeMillis()); } public void doExpirations() { From d43bfebf0df4db78442f32433a467577d4928ae9 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 15 Dec 2023 12:57:36 +0200 Subject: [PATCH 1076/1142] Sign updates should happen in sync --- .../listeners/ResidencePlayerListener.java | 2 +- .../permissions/PermissionManager.java | 2 +- .../bukkit/residence/signsStuff/SignUtil.java | 158 +++++++++--------- 3 files changed, 81 insertions(+), 81 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 9d60eef4c..bd90cd87e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -802,7 +802,7 @@ public void onSignCreate(SignChangeEvent event) { plugin.getSignUtil().getSigns().addSign(signInfo); plugin.getSignUtil().saveSigns(); - CMIScheduler.runLaterAsync(() -> plugin.getSignUtil().CheckSign(residence), 5L); + CMIScheduler.runTaskLater(() -> plugin.getSignUtil().CheckSign(residence), 5L); } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index ce70b50b2..cf26dbf5e 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -251,7 +251,7 @@ public enum ResPerm { buy("Allows to buy residence"), sell("Allows to sell residence"), max_res_x_$1("Defines residence size limit on X axis", "number"), - max_res_z_$1("Defines residence size limit on X axis", "number"), + max_res_z_$1("Defines residence size limit on Z axis", "number"), max_res_unlimited("Defines residence limit as unlimited"), max_res_$1("Defines residence limit", "number"), max_subzones_unlimited("Defines subzone limit as unlimited"), diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 3831d44d5..3ab6c75f2 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -191,99 +191,99 @@ public boolean SignUpdate(Signs Sign) { return false; } - Block block = nloc.getBlock(); - - if (!CMIMaterial.isSign(block.getType())) { - Signs.removeSign(Sign); - res.getSignsInResidence().remove(Sign); - return false; - } - - Sign sign = (Sign) block.getState(); + CMIScheduler.runAtLocation(nloc, () -> { + Block block = nloc.getBlock(); - String landName = res.getName(); - if (landName == null) - return false; - if (!ForRent && !ForSale) { - String shortName = fixResName(landName); - String secondLine = null; - if (shortName.contains("~")) { - String[] lines = fixDoubleResName(landName); - shortName = lines[0]; - secondLine = lines[1]; + if (!CMIMaterial.isSign(block.getType())) { + Signs.removeSign(Sign); + res.getSignsInResidence().remove(Sign); + return; } - sign.setLine(0, plugin.msg(lm.Sign_ResName, shortName)); - if (secondLine != null) - sign.setLine(1, plugin.msg(lm.Sign_ResName, secondLine)); - sign.setLine(2, ""); - sign.setLine(3, ""); - sign.setLine(secondLine == null ? 1 : 2, plugin.msg(lm.Sign_Owner, res.getOwner())); - sign.update(); - -// block.breakNaturally(); -// Signs.removeSign(Sign); - return true; - } - if (ForRent) { + Sign sign = (Sign) block.getState(); + + String landName = res.getName(); + if (landName == null) + return; + if (!ForRent && !ForSale) { + String shortName = fixResName(landName); + String secondLine = null; + if (shortName.contains("~")) { + String[] lines = fixDoubleResName(landName); + shortName = lines[0]; + secondLine = lines[1]; + } + sign.setLine(0, plugin.msg(lm.Sign_ResName, shortName)); + if (secondLine != null) + sign.setLine(1, plugin.msg(lm.Sign_ResName, secondLine)); + sign.setLine(2, ""); + sign.setLine(3, ""); + sign.setLine(secondLine == null ? 1 : 2, plugin.msg(lm.Sign_Owner, res.getOwner())); + sign.update(); + + return; + } - boolean rented = res.isRented(); + if (ForRent) { - RentedLand rentedPlace = res.getRentedLand(); - long time = 0L; - if (rentedPlace != null) - time = rentedPlace.endTime; + boolean rented = res.isRented(); - SimpleDateFormat formatter = new SimpleDateFormat(plugin.msg(lm.Sign_DateFormat)); - formatter.setTimeZone(TimeZone.getTimeZone(plugin.getConfigManager().getTimeZone())); - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(time); - String timeString = formatter.format(calendar.getTime()); + RentedLand rentedPlace = res.getRentedLand(); + long time = 0L; + if (rentedPlace != null) + time = rentedPlace.endTime; - String endDate = timeString; - if (time == 0L) - endDate = "Unknown"; + SimpleDateFormat formatter = new SimpleDateFormat(plugin.msg(lm.Sign_DateFormat)); + formatter.setTimeZone(TimeZone.getTimeZone(plugin.getConfigManager().getTimeZone())); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time); + String timeString = formatter.format(calendar.getTime()); - if (plugin.getRentManager().getRentedAutoRepeats(res)) - endDate = plugin.msg(lm.Sign_RentedAutorenewTrue, endDate); - else - endDate = plugin.msg(lm.Sign_RentedAutorenewFalse, endDate); + String endDate = timeString; + if (time == 0L) + endDate = "Unknown"; - String TopLine = rented ? plugin.msg(lm.Sign_RentedTopLine, endDate) : plugin.msg(lm.Sign_ForRentTopLine); - sign.setLine(0, TopLine); + if (plugin.getRentManager().getRentedAutoRepeats(res)) + endDate = plugin.msg(lm.Sign_RentedAutorenewTrue, endDate); + else + endDate = plugin.msg(lm.Sign_RentedAutorenewFalse, endDate); - String infoLine = plugin.msg(rented ? lm.Sign_RentedPriceLine : lm.Sign_ForRentPriceLine, plugin.getRentManager().getCostOfRent(res), plugin - .getRentManager().getRentDays(res), plugin.getRentManager().getRentableRepeatable(res)); + String TopLine = rented ? plugin.msg(lm.Sign_RentedTopLine, endDate) : plugin.msg(lm.Sign_ForRentTopLine); + sign.setLine(0, TopLine); - sign.setLine(1, infoLine); - String shortName = fixResName(landName); - sign.setLine(2, rented ? plugin.msg(lm.Sign_RentedResName, shortName) - : plugin.msg(lm.Sign_RentedResName, shortName)); - sign.setLine(3, rented ? plugin.msg(lm.Sign_RentedBottomLine, plugin.getRentManager().getRentingPlayer(landName)) - : plugin.msg(lm.Sign_ForRentBottomLine)); - sign.update(); - } + String infoLine = plugin.msg(rented ? lm.Sign_RentedPriceLine : lm.Sign_ForRentPriceLine, plugin.getRentManager().getCostOfRent(res), plugin + .getRentManager().getRentDays(res), plugin.getRentManager().getRentableRepeatable(res)); - if (ForSale) { - String shortName = fixResName(landName); - String secondLine = null; - if (shortName.contains("~")) { - String[] lines = fixDoubleResName(landName); - shortName = lines[0]; - secondLine = lines[1]; + sign.setLine(1, infoLine); + String shortName = fixResName(landName); + sign.setLine(2, rented ? plugin.msg(lm.Sign_RentedResName, shortName) + : plugin.msg(lm.Sign_RentedResName, shortName)); + sign.setLine(3, rented ? plugin.msg(lm.Sign_RentedBottomLine, plugin.getRentManager().getRentingPlayer(landName)) + : plugin.msg(lm.Sign_ForRentBottomLine)); + sign.update(); } - sign.setLine(0, plugin.msg(lm.Sign_ForSaleTopLine)); - String infoLine = plugin.msg(lm.Sign_ForSalePriceLine, res.getSellPrice()); - sign.setLine(1, infoLine); - sign.setLine(2, plugin.msg(lm.Sign_RentedResName, shortName)); - - if (secondLine != null) - sign.setLine(3, plugin.msg(lm.Sign_RentedResName, secondLine)); - else - sign.setLine(3, plugin.msg(lm.Sign_ForSaleBottom, res.getTotalSize())); - sign.update(); - } + if (ForSale) { + String shortName = fixResName(landName); + String secondLine = null; + if (shortName.contains("~")) { + String[] lines = fixDoubleResName(landName); + shortName = lines[0]; + secondLine = lines[1]; + } + + sign.setLine(0, plugin.msg(lm.Sign_ForSaleTopLine)); + String infoLine = plugin.msg(lm.Sign_ForSalePriceLine, res.getSellPrice()); + sign.setLine(1, infoLine); + sign.setLine(2, plugin.msg(lm.Sign_RentedResName, shortName)); + + if (secondLine != null) + sign.setLine(3, plugin.msg(lm.Sign_RentedResName, secondLine)); + else + sign.setLine(3, plugin.msg(lm.Sign_ForSaleBottom, res.getTotalSize())); + sign.update(); + } + }); return true; } From f55ee51085c352d8f62abfbf8b8ad7d1ee52d88d Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 15 Dec 2023 12:59:51 +0200 Subject: [PATCH 1077/1142] Ownership transfer on cleanup fix --- src/com/bekvon/bukkit/residence/utils/FileCleanUp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java index 9ecfeffbf..3e8c10620 100644 --- a/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java +++ b/src/com/bekvon/bukkit/residence/utils/FileCleanUp.java @@ -80,7 +80,7 @@ public void cleanOldResidence() { ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player.getUniqueId()); - if (plugin.getConfigManager().isAutoCleanTrasnferToUser() && res.getOwner().equalsIgnoreCase(plugin.getConfigManager().getAutoCleanUserName())) { + if (plugin.getConfigManager().isAutoCleanTrasnferToUser() && !res.getOwner().equalsIgnoreCase(plugin.getConfigManager().getAutoCleanUserName())) { res.getPermissions().setOwner(plugin.getConfigManager().getAutoCleanUserName(), true); if (plugin.getRentManager().isForRent(res)) plugin.getRentManager().removeRentable(res); From 90ca8e138db5aecc855519095e228461a5778e84 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 15 Dec 2023 13:08:13 +0200 Subject: [PATCH 1078/1142] Use max group limits for res auto when size limit disabled in config --- .../bekvon/bukkit/residence/commands/auto.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index fa1e7f3ec..3cb42602c 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -36,15 +36,15 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo String resName = null; - int lenght = -1; + int length = -1; if (args.length == 1) try { - lenght = Integer.parseInt(args[0]); + length = Integer.parseInt(args[0]); } catch (Exception | Error e) { } - if (args.length > 0 && lenght == -1) + if (args.length > 0 && length == -1) resName = args[0]; else resName = player.getName(); @@ -52,7 +52,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (args.length == 2) { resName = args[0]; try { - lenght = Integer.parseInt(args[1]); + length = Integer.parseInt(args[1]); } catch (Exception ex) { } } @@ -77,9 +77,9 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo boolean result = false; if (plugin.getConfigManager().isARCOldMethod()) - result = resize(plugin, player, cuboid, true, lenght); + result = resize(plugin, player, cuboid, true, length); else - result = optimizedResize(plugin, player, cuboid, true, lenght); + result = optimizedResize(plugin, player, cuboid, true, length); plugin.getSelectionManager().afterSelectionUpdate(player, true); @@ -164,7 +164,9 @@ private double getRatio(int v1, int v2, int v3) { return ratio; } - private static int getMax(int max) { + private static int getMax(int max) { + if (!Residence.getInstance().getConfigManager().isARCSizeEnabled()) + return max; int arcmin = Residence.getInstance().getConfigManager().getARCSizeMin(); int arcmax = Residence.getInstance().getConfigManager().getARCSizeMax(); int maxV = (int) (max * (Residence.getInstance().getConfigManager().getARCSizePercentage() / 100D)); From e6ef19843196c848c65db416f69fc0e3d12e3fab Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 15 Dec 2023 13:47:59 +0200 Subject: [PATCH 1079/1142] World Edit area regen fix --- .../bukkit/residence/ConfigManager.java | 6 ++- .../bukkit/residence/commands/show.java | 45 ++++++++--------- .../selection/WorldEdit7SelectionManager.java | 48 ++++++++++++++++--- 3 files changed, 68 insertions(+), 31 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 6da1e69d7..ab9aedb28 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -951,7 +951,9 @@ public void UpdateConfigFile() { AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); c.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); - c.addComment("Global.AutoCleanUp.Regenerate", "Do you want to regenerate old residence area", "This requires world edit to be present"); + c.addComment("Global.AutoCleanUp.Regenerate", "Extra heavy on server and will lag it out while regeneration is ongoing", + "Do you want to regenerate old residence area", + "This requires world edit to be present"); AutoCleanUpRegenerate = c.get("Global.AutoCleanUp.Regenerate", false); c.addComment("Global.AutoCleanUp.Worlds", "Worlds to be included in check list"); AutoCleanUpWorlds = c.get("Global.AutoCleanUp.Worlds", Arrays.asList(defaultWorldName)); @@ -963,7 +965,7 @@ public void UpdateConfigFile() { c.addComment("Global.AutoCleanUp.TrasnferToUser", "When enabled we will transfer residence to defined user instead of removing it", "Defined user will be excluded from cleanup operation"); AutoCleanTrasnferToUser = c.get("Global.AutoCleanUp.TrasnferToUser", false); - c.addComment("Global.AutoCleanUp.UserName", "Worlds to be included in check list"); + c.addComment("Global.AutoCleanUp.UserName", "Name of the user which receives removed residence"); AutoCleanUserName = c.get("Global.AutoCleanUp.UserName", "Server_Land"); if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { diff --git a/src/com/bekvon/bukkit/residence/commands/show.java b/src/com/bekvon/bukkit/residence/commands/show.java index 4ac14156e..fa8e79528 100644 --- a/src/com/bekvon/bukkit/residence/commands/show.java +++ b/src/com/bekvon/bukkit/residence/commands/show.java @@ -5,7 +5,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -14,41 +13,43 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import net.Zrips.CMILib.FileHandler.ConfigReader; + public class show implements cmd { @Override @CommandAnnotation(simple = true, priority = 3300) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; + if (!(sender instanceof Player)) + return false; - Player player = (Player) sender; + Player player = (Player) sender; - ClaimedResidence res = null; + ClaimedResidence res = null; - if (args.length == 1) { - res = plugin.getResidenceManager().getByName(args[0]); - } else { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - } + if (args.length == 1) { + res = plugin.getResidenceManager().getByName(args[0]); + } else { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + } - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return true; - } + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; + } - Visualizer v = new Visualizer(player); - v.setAreas(res.getAreaArray()); - plugin.getSelectionManager().showBounds(player, v); + Visualizer v = new Visualizer(player); + v.setAreas(res.getAreaArray()); + plugin.getSelectionManager().showBounds(player, v); - return true; + return true; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Show residence boundaries"); - c.get("Info", Arrays.asList("&eUsage: &6/res show ")); - LocaleManager.addTabCompleteMain(this, "[residence]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Show residence boundaries"); + c.get("Info", Arrays.asList("&eUsage: &6/res show ")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java index 45c998bcd..0d6f0e727 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java @@ -1,11 +1,16 @@ package com.bekvon.bukkit.residence.selection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.entity.Player; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.IncompleteRegionException; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.WorldEdit; @@ -23,6 +28,8 @@ import com.sk89q.worldedit.world.World; import net.Zrips.CMILib.Logs.CMIDebug; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Schedulers.CMITask; public class WorldEdit7SelectionManager extends SelectionManager { @@ -127,22 +134,49 @@ public void showSelectionInfo(Player player) { this.worldEditUpdate(player); } + Set queue = new HashSet(); + CMITask task = null; + @Override public void regenerate(CuboidArea area) { + queue.add(area); + + if (task == null) + task = CMIScheduler.runTaskLater(this::nextInQueue, 1); + } + + private void nextInQueue() { + + + if (queue.isEmpty()) { + task = null; + return; + } + + Iterator iter = queue.iterator(); + + CuboidArea area = iter.next(); + iter.remove(); + // Create new selector CuboidRegionSelector sellection = new CuboidRegionSelector(BukkitAdapter.adapt(area.getWorld())); - + EditSession session = null; // set up selector try { sellection.selectPrimary(BlockVector3.at(area.getLowVector().getBlockX(), area.getLowVector().getBlockY(), area.getLowVector().getBlockZ()), PermissiveSelectorLimits.getInstance()); sellection.selectSecondary(BlockVector3.at(area.getHighVector().getBlockX(), area.getHighVector().getBlockY(), area.getHighVector().getBlockZ()), PermissiveSelectorLimits.getInstance()); - } catch (Exception | Error e) { - return; + + // set up CuboidSelection + CuboidRegion cuboid = sellection.getIncompleteRegion(); + session = WorldEdit.getInstance().newEditSessionBuilder().world(cuboid.getWorld()).build(); + cuboid.getWorld().regenerate(cuboid, session); + + } catch (Throwable e) { + } finally { + if (session != null) + session.close(); } - // set up CuboidSelection - CuboidRegion cuboid = sellection.getIncompleteRegion(); -// Region region = selection..getRegionSelector().getRegion(); - cuboid.getWorld().regenerate(cuboid, WorldEdit.getInstance().getEditSessionFactory().getEditSession(cuboid.getWorld(), -1)); + task = CMIScheduler.runTaskLater(this::nextInQueue, 20); } } From f551af94dc92eec1cfe3fb5f569f517e07382525 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 15 Dec 2023 15:02:06 +0200 Subject: [PATCH 1080/1142] fix for blocked command not processing * variable properly Allow to block commands on all worlds outside residence --- .../bukkit/residence/containers/lm.java | 1 + .../listeners/ResidencePlayerListener.java | 22 ++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index eb362ba65..d22c1cfcf 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -253,6 +253,7 @@ public enum lm { Residence_MoveDeny("&cYou dont have movement permission for Residence &6%1"), Residence_TeleportNoFlag("&cYou dont have teleport access for that residence."), Residence_FlagDeny("&cYou dont have &6%1 &cpermission for &6%2 &cresidence"), + Residence_BaseFlagDeny("&cYou dont have &6%1 &cpermission"), Residence_GiveLimits("&cCannot give residence to target player, because it is outside the target players limits."), Residence_GiveConfirm("&7Click to confirm &6%1 &7residence transfer from &6%2 &7to &6%3"), Residence_Give("&eYou give residence &6%1 &eto player &6%2"), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index bd90cd87e..befe9a15f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -92,6 +92,7 @@ import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; @@ -635,12 +636,9 @@ public void onCommand(PlayerCommandPreprocessEvent event) { return; Player player = event.getPlayer(); - ClaimedResidence res = getCurrentResidence(player.getUniqueId()); - - if (res == null) - return; + FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); - if (!res.getPermissions().playerHas(player, Flags.command, FlagCombo.OnlyFalse)) + if (!perms.playerHas(player, Flags.command, FlagCombo.OnlyFalse)) return; if (plugin.getPermissionManager().isResidenceAdmin(player)) @@ -649,11 +647,16 @@ public void onCommand(PlayerCommandPreprocessEvent event) { if (ResPerm.bypass_command.hasPermission(player, 10000L)) return; - String msg = event.getMessage().replace(" ", "_").toLowerCase(); + ClaimedResidence res = getCurrentResidence(player.getUniqueId()); - int white = 0; - int black = 0; + if (res == null) { + event.setCancelled(true); + plugin.msg(player, lm.Residence_BaseFlagDeny, Flags.command); + return; + } + String msg = event.getMessage().replace(" ", "_").toLowerCase(); + int white = 0; for (String oneWhite : res.getCmdWhiteList()) { String t = oneWhite.toLowerCase(); if (msg.startsWith("/" + t)) { @@ -664,6 +667,7 @@ else if (white == 0) } } + int black = 0; for (String oneBlack : res.getCmdBlackList()) { String t = oneBlack.toLowerCase(); if (msg.startsWith("/" + t)) { @@ -681,6 +685,8 @@ else if (white == 0) if (t.equalsIgnoreCase("*")) { if (msg.contains("_")) black = msg.split("_").length; + else + black = 1; break; } } From 9883a633691741f9ac366496fd659e46786f8e04 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 15 Dec 2023 15:31:16 +0200 Subject: [PATCH 1081/1142] Separate list for white/black list of commands for global/world command flag --- .../bukkit/residence/ConfigManager.java | 24 +++++- .../listeners/ResidencePlayerListener.java | 81 ++++++++++--------- .../residence/protection/FlagPermissions.java | 22 +++++ 3 files changed, 88 insertions(+), 39 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index ab9aedb28..b080da37a 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -463,6 +463,12 @@ void UpdateFlagFile() { if (!conf.isList("Global.TotalFlagDisabling")) conf.set("Global.TotalFlagDisabling", Arrays.asList("Completely", "Disable", "Particular", "Flags")); + if (!conf.isList("Global.CommandLimits.WhiteList")) + conf.set("Global.CommandLimits.WhiteList", Arrays.asList("some allowed command")); + + if (!conf.isList("Global.CommandLimits.BlackList")) + conf.set("Global.CommandLimits.BlackList", Arrays.asList("some blocked command")); + TreeMap sorted = new TreeMap<>(); for (Flags fl : Flags.values()) { sorted.put(fl.getName(), fl); @@ -509,7 +515,13 @@ void UpdateFlagFile() { cfg.load(); cfg.addComment("Global", "These are Global Settings for Residence."); cfg.addComment("Global.Flags", "These are world flags that are applied when the player is NOT within a residence."); - cfg.addComment("Global.Flags.Global", "these are default for all worlds unless specified below, they can be overridden per group"); + cfg.addComment("Global.Flags.Global", "these are default for all worlds unless specified below, they can be overridden per group", + "Using command: false flag will allow you to disable and allow predefined commands. Command list can be difined under CommandLimits section"); + + cfg.addComment("Global.CommandLimits", "Provide list of commands you want to allow or block", "This is when using 'command: false' flag for global/world flags", + "For example 'res create' under allow section and '*' would block everything except 'res create' command", + "This will NOT apply inside residences. Inside residence command limits are based on residence command flag and its set commands limits"); + cfg.addComment("Global.FlagPermission", "This gives permission to change certain flags to all groups, unless specifically denied to the group."); cfg.addComment("Global.FlagGui", "This sets GUI items to represent each flag, if not given, then gray wool will be used"); cfg.addComment("Global.ResidenceDefault", "These are default flags applied to all residences from any user group."); @@ -951,7 +963,7 @@ public void UpdateConfigFile() { AutoCleanUp = c.get("Global.AutoCleanUp.Use", false); c.addComment("Global.AutoCleanUp.Days", "For how long player should be offline to delete hes residence"); AutoCleanUpDays = c.get("Global.AutoCleanUp.Days", 60); - c.addComment("Global.AutoCleanUp.Regenerate", "Extra heavy on server and will lag it out while regeneration is ongoing", + c.addComment("Global.AutoCleanUp.Regenerate", "Extra heavy on server and will lag it out while regeneration is ongoing", "Do you want to regenerate old residence area", "This requires world edit to be present"); AutoCleanUpRegenerate = c.get("Global.AutoCleanUp.Regenerate", false); @@ -1563,6 +1575,14 @@ public void loadFlags() { } } + try { + if (flags.isConfigurationSection("Global.CommandLimits")) { + FlagPermissions.parseCommandLimits(flags.getConfigurationSection("Global.CommandLimits")); + } + } catch (Throwable e) { + e.printStackTrace(); + } + globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", flags.getConfigurationSection("Global")); globalRentedDefaults = FlagPermissions.parseFromConfigNode("RentedDefault", flags.getConfigurationSection("Global")); globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", flags.getConfigurationSection("Global")); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index befe9a15f..ea3fc33bd 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -626,6 +626,45 @@ public void onFlagChangeFly(ResidenceFlagChangeEvent event) { } } + private boolean canUseCommand(String command, List whiteListed, List blackListed) { + int white = 0; + for (String oneWhite : whiteListed) { + String t = oneWhite.toLowerCase(); + if (command.startsWith("/" + t)) { + if (t.contains("_") && t.split("_").length > white) + white = t.split("_").length; + else if (white == 0) + white = 1; + } + } + + int black = 0; + for (String oneBlack : blackListed) { + String t = oneBlack.toLowerCase(); + if (command.startsWith("/" + t)) { + if (command.contains("_")) + black = t.split("_").length; + else + black = 1; + break; + } + } + + if (black == 0) + for (String oneBlack : blackListed) { + String t = oneBlack.toLowerCase(); + if (t.equalsIgnoreCase("*")) { + if (command.contains("_")) + black = command.split("_").length; + else + black = 1; + break; + } + } + + return white != 0 && white >= black || black == 0; + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onCommand(PlayerCommandPreprocessEvent event) { // Disabling listener if flag disabled globally @@ -649,49 +688,17 @@ public void onCommand(PlayerCommandPreprocessEvent event) { ClaimedResidence res = getCurrentResidence(player.getUniqueId()); + String msg = event.getMessage().replace(" ", "_").toLowerCase(); + if (res == null) { + if (canUseCommand(msg, FlagPermissions.getGlobalCMDWhiteList(), FlagPermissions.getGlobalCMDBlackList())) + return; event.setCancelled(true); plugin.msg(player, lm.Residence_BaseFlagDeny, Flags.command); return; } - String msg = event.getMessage().replace(" ", "_").toLowerCase(); - int white = 0; - for (String oneWhite : res.getCmdWhiteList()) { - String t = oneWhite.toLowerCase(); - if (msg.startsWith("/" + t)) { - if (t.contains("_") && t.split("_").length > white) - white = t.split("_").length; - else if (white == 0) - white = 1; - } - } - - int black = 0; - for (String oneBlack : res.getCmdBlackList()) { - String t = oneBlack.toLowerCase(); - if (msg.startsWith("/" + t)) { - if (msg.contains("_")) - black = t.split("_").length; - else - black = 1; - break; - } - } - - if (black == 0) - for (String oneBlack : res.getCmdBlackList()) { - String t = oneBlack.toLowerCase(); - if (t.equalsIgnoreCase("*")) { - if (msg.contains("_")) - black = msg.split("_").length; - else - black = 1; - break; - } - } - - if (white != 0 && white >= black || black == 0) + if (canUseCommand(msg, res.getCmdWhiteList(), res.getCmdBlackList())) return; event.setCancelled(true); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 9b4ca8529..d542583f1 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -13,6 +13,7 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -47,6 +48,10 @@ public class FlagPermissions { protected static ArrayList validPlayerFlags = new ArrayList<>(); protected static ArrayList validAreaFlags = new ArrayList<>(); protected static HashMap> validFlagGroups = new HashMap<>(); + + private static List globalCMDWhiteList = new ArrayList<>(); + private static List globalCMDBlackList = new ArrayList<>(); + final static Map matUseFlagList = new EnumMap<>(Material.class); protected Map cachedPlayerNameUUIDs = new ConcurrentHashMap(); protected Map> playerFlags = new ConcurrentHashMap>(); @@ -308,6 +313,15 @@ public static void initValidFlags() { // addMaterialToUseFlag(CMIMaterial.CAKE.getMaterial(), Flags.cake); } + public static void parseCommandLimits(ConfigurationSection node) { + if (node.isList("WhiteList")) { + globalCMDWhiteList = node.getStringList("WhiteList").stream().map(str -> str.replace(" ", "_").replaceAll("^/+", "")).collect(Collectors.toList()); + } + if (node.isList("BlackList")) { + globalCMDBlackList = node.getStringList("BlackList").stream().map(str -> str.replace(" ", "_").replaceAll("^/+", "")).collect(Collectors.toList()); + } + } + public static FlagPermissions parseFromConfigNode(String name, ConfigurationSection node) { FlagPermissions list = new FlagPermissions(); @@ -1539,4 +1553,12 @@ public FlagPermissions getParent() { public Map> getPlayerFlags() { return playerFlags; } + + public static List getGlobalCMDWhiteList() { + return globalCMDWhiteList; + } + + public static List getGlobalCMDBlackList() { + return globalCMDBlackList; + } } From c1e883e3e69c462d095b2d9d9f2d31f3f3a0a285 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 15 Dec 2023 16:46:43 +0200 Subject: [PATCH 1082/1142] Inheritance --- .../bukkit/residence/ConfigManager.java | 26 +- .../listeners/ResidencePlayerListener.java | 26 +- .../residence/protection/FlagPermissions.java | 26 +- .../protection/WorldFlagManager.java | 236 ++++++++++-------- 4 files changed, 180 insertions(+), 134 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index b080da37a..360778ba5 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -463,11 +463,14 @@ void UpdateFlagFile() { if (!conf.isList("Global.TotalFlagDisabling")) conf.set("Global.TotalFlagDisabling", Arrays.asList("Completely", "Disable", "Particular", "Flags")); - if (!conf.isList("Global.CommandLimits.WhiteList")) - conf.set("Global.CommandLimits.WhiteList", Arrays.asList("some allowed command")); + if (!conf.isBoolean("Global.CommandLimits.Global.Inherit")) + conf.set("Global.CommandLimits.Global.Inherit", false); - if (!conf.isList("Global.CommandLimits.BlackList")) - conf.set("Global.CommandLimits.BlackList", Arrays.asList("some blocked command")); + if (!conf.isList("Global.CommandLimits.Global.WhiteList")) + conf.set("Global.CommandLimits.Global.WhiteList", Arrays.asList("some allowed command")); + + if (!conf.isList("Global.CommandLimits.Global.BlackList")) + conf.set("Global.CommandLimits.Global.BlackList", Arrays.asList("some blocked command")); TreeMap sorted = new TreeMap<>(); for (Flags fl : Flags.values()) { @@ -519,8 +522,11 @@ void UpdateFlagFile() { "Using command: false flag will allow you to disable and allow predefined commands. Command list can be difined under CommandLimits section"); cfg.addComment("Global.CommandLimits", "Provide list of commands you want to allow or block", "This is when using 'command: false' flag for global/world flags", - "For example 'res create' under allow section and '*' would block everything except 'res create' command", - "This will NOT apply inside residences. Inside residence command limits are based on residence command flag and its set commands limits"); + "For example 'res create' under allow section and '*' would block everything except 'res create' command", "Can be defined per world just like world flags can be", + "This will NOT apply inside residences. Inside residence command limits are based on residence command flag and its set commands limits", + "Residence itself will need to have 'command: false' to override global command limits with specific to that residence ones"); + + cfg.addComment("Global.CommandLimits.Global.Inherit", "When enabled allowed and blocked commands inside residence will be inherited from global list and combined with residence command limits"); cfg.addComment("Global.FlagPermission", "This gives permission to change certain flags to all groups, unless specifically denied to the group."); cfg.addComment("Global.FlagGui", "This sets GUI items to represent each flag, if not given, then gray wool will be used"); @@ -1575,14 +1581,6 @@ public void loadFlags() { } } - try { - if (flags.isConfigurationSection("Global.CommandLimits")) { - FlagPermissions.parseCommandLimits(flags.getConfigurationSection("Global.CommandLimits")); - } - } catch (Throwable e) { - e.printStackTrace(); - } - globalCreatorDefaults = FlagPermissions.parseFromConfigNode("CreatorDefault", flags.getConfigurationSection("Global")); globalRentedDefaults = FlagPermissions.parseFromConfigNode("RentedDefault", flags.getConfigurationSection("Global")); globalResidenceDefaults = FlagPermissions.parseFromConfigNode("ResidenceDefault", flags.getConfigurationSection("Global")); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index ea3fc33bd..87a181484 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -677,7 +677,11 @@ public void onCommand(PlayerCommandPreprocessEvent event) { FlagPermissions perms = plugin.getPermsByLocForPlayer(player.getLocation(), player); - if (!perms.playerHas(player, Flags.command, FlagCombo.OnlyFalse)) + FlagPermissions globalPerm = plugin.getWorldFlags().getPerms(player); + boolean globalLimited = globalPerm.playerHas(player, Flags.command, FlagCombo.OnlyFalse); + boolean areaLimited = perms.playerHas(player, Flags.command, FlagCombo.OnlyFalse); + + if (!globalLimited && !areaLimited) return; if (plugin.getPermissionManager().isResidenceAdmin(player)) @@ -691,14 +695,30 @@ public void onCommand(PlayerCommandPreprocessEvent event) { String msg = event.getMessage().replace(" ", "_").toLowerCase(); if (res == null) { - if (canUseCommand(msg, FlagPermissions.getGlobalCMDWhiteList(), FlagPermissions.getGlobalCMDBlackList())) + if (!globalLimited) + return; + if (canUseCommand(msg, globalPerm.getCMDWhiteList(), globalPerm.getCMDBlackList())) return; event.setCancelled(true); plugin.msg(player, lm.Residence_BaseFlagDeny, Flags.command); return; } - if (canUseCommand(msg, res.getCmdWhiteList(), res.getCmdBlackList())) + List w = new ArrayList(res.getCmdWhiteList()); + List b = new ArrayList(res.getCmdBlackList()); + + if (!areaLimited) { + w.clear(); + b.clear(); + } + + if (globalPerm.isInheritCMDLimits()) { + w.addAll(globalPerm.getCMDWhiteList()); + b.removeAll(globalPerm.getCMDWhiteList()); + b.addAll(globalPerm.getCMDBlackList()); + } + + if (canUseCommand(msg, w, b)) return; event.setCancelled(true); diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index d542583f1..7de3e4b2a 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -49,8 +49,9 @@ public class FlagPermissions { protected static ArrayList validAreaFlags = new ArrayList<>(); protected static HashMap> validFlagGroups = new HashMap<>(); - private static List globalCMDWhiteList = new ArrayList<>(); - private static List globalCMDBlackList = new ArrayList<>(); + private List CMDWhiteList = new ArrayList<>(); + private List CMDBlackList = new ArrayList<>(); + private boolean inherit = false; final static Map matUseFlagList = new EnumMap<>(Material.class); protected Map cachedPlayerNameUUIDs = new ConcurrentHashMap(); @@ -313,12 +314,15 @@ public static void initValidFlags() { // addMaterialToUseFlag(CMIMaterial.CAKE.getMaterial(), Flags.cake); } - public static void parseCommandLimits(ConfigurationSection node) { + public void parseCommandLimits(ConfigurationSection node) { if (node.isList("WhiteList")) { - globalCMDWhiteList = node.getStringList("WhiteList").stream().map(str -> str.replace(" ", "_").replaceAll("^/+", "")).collect(Collectors.toList()); + CMDWhiteList = node.getStringList("WhiteList").stream().map(str -> str.replace(" ", "_").replaceAll("^/+", "")).collect(Collectors.toList()); } if (node.isList("BlackList")) { - globalCMDBlackList = node.getStringList("BlackList").stream().map(str -> str.replace(" ", "_").replaceAll("^/+", "")).collect(Collectors.toList()); + CMDBlackList = node.getStringList("BlackList").stream().map(str -> str.replace(" ", "_").replaceAll("^/+", "")).collect(Collectors.toList()); + } + if (node.isBoolean("Inherit")) { + inherit = node.getBoolean("Inherit"); } } @@ -1554,11 +1558,15 @@ public Map> getPlayerFlags() { return playerFlags; } - public static List getGlobalCMDWhiteList() { - return globalCMDWhiteList; + public List getCMDWhiteList() { + return CMDWhiteList; + } + + public List getCMDBlackList() { + return CMDBlackList; } - public static List getGlobalCMDBlackList() { - return globalCMDBlackList; + public boolean isInheritCMDLimits() { + return inherit; } } diff --git a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java index 23e2b58d8..07ebf5420 100644 --- a/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java +++ b/src/com/bekvon/bukkit/residence/protection/WorldFlagManager.java @@ -24,125 +24,145 @@ public class WorldFlagManager { private Residence plugin; public WorldFlagManager(Residence plugin) { - this.plugin = plugin; - globaldefaults = new FlagPermissions(); - worldperms = new HashMap<>(); - groupperms = new HashMap<>(); - this.parsePerms(); + this.plugin = plugin; + globaldefaults = new FlagPermissions(); + worldperms = new HashMap<>(); + groupperms = new HashMap<>(); + this.parsePerms(); } public FlagPermissions getPerms(Player player) { - ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); - return this.getPerms(player.getWorld().getName(), resPlayer.getGroup().getGroupName()); + ResidencePlayer resPlayer = plugin.getPlayerManager().getResidencePlayer(player); + return this.getPerms(player.getWorld().getName(), resPlayer.getGroup().getGroupName()); } public FlagPermissions getPerms(String world, String group) { - world = world.toLowerCase(); - group = group.toLowerCase(); - Map groupworldperms = groupperms.get(group); - if (groupworldperms == null) { - return this.getPerms(world); - } - FlagPermissions list = groupworldperms.get(world); - if (list == null) { - list = groupworldperms.get("global." + world); - if (list == null) { - list = groupworldperms.get("global"); - } - if (list == null) { - return this.getPerms(world); - } - } - return list; + world = world.toLowerCase(); + group = group.toLowerCase(); + Map groupworldperms = groupperms.get(group); + if (groupworldperms == null) { + return this.getPerms(world); + } + FlagPermissions list = groupworldperms.get(world); + if (list == null) { + list = groupworldperms.get("global." + world); + if (list == null) { + list = groupworldperms.get("global"); + } + if (list == null) { + return this.getPerms(world); + } + } + return list; } public FlagPermissions getPerms(String world) { - world = world.toLowerCase(); - FlagPermissions list = worldperms.get(world); - if (list == null) { - if (globaldefaults == null) - return new FlagPermissions(); - return globaldefaults; - } - return list; + world = world.toLowerCase(); + FlagPermissions list = worldperms.get(world); + if (list == null) { + if (globaldefaults == null) + return new FlagPermissions(); + return globaldefaults; + } + return list; } public final void parsePerms() { - try { - FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); - FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); - - if (flags.isConfigurationSection("Global.Flags")) { - Set keys = flags.getConfigurationSection("Global.Flags").getKeys(false); - if (keys != null) { - for (String key : keys) { - if (key.equalsIgnoreCase("Global")) { - globaldefaults = FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags")); - } else { - worldperms.put(key.toLowerCase(), FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags"))); - } - } - } - } - for (Entry entry : worldperms.entrySet()) { - entry.getValue().setParent(globaldefaults); - } - - if (!groups.isConfigurationSection("Groups")) { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Your groups.yml file is incorrect!"); - return; - } - - if (flags.isConfigurationSection("Groups")) { - Set keys = groups.getConfigurationSection("Groups").getKeys(false); - if (keys != null) { - for (String key : keys) { - if (!groups.contains("Groups." + key + ".Flags")) - continue; - if (!groups.contains("Groups." + key + ".Flags.World")) - continue; - if (key == null) - continue; - Set worldkeys = groups.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false); - - if (worldkeys == null) - continue; - - Map perms = new HashMap<>(); - for (String wkey : worldkeys) { - FlagPermissions list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); - if (wkey.equalsIgnoreCase("global")) { - list.setParent(globaldefaults); - perms.put(wkey.toLowerCase(), list); - for (Entry worldperm : worldperms.entrySet()) { - list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); - list.setParent(worldperm.getValue()); - perms.put("global." + worldperm.getKey().toLowerCase(), list); - } - } else { - perms.put(wkey.toLowerCase(), list); - } - } - for (Entry entry : perms.entrySet()) { - String wkey = entry.getKey(); - FlagPermissions list = entry.getValue(); - if (!wkey.startsWith("global.")) { - list.setParent(perms.get("global." + wkey)); - if (list.getParent() == null) { - list.setParent(worldperms.get(wkey)); - } - if (list.getParent() == null) { - list.setParent(globaldefaults); - } - } - } - groupperms.put(key.toLowerCase(), perms); - - } - } - } - } catch (Exception ex) { - Logger.getLogger(WorldFlagManager.class.getName()).log(Level.SEVERE, null, ex); - } + try { + FileConfiguration flags = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "flags.yml")); + FileConfiguration groups = YamlConfiguration.loadConfiguration(new File(plugin.dataFolder, "groups.yml")); + + if (flags.isConfigurationSection("Global.Flags")) { + Set keys = flags.getConfigurationSection("Global.Flags").getKeys(false); + if (keys != null) { + for (String key : keys) { + if (key.equalsIgnoreCase("Global")) { + globaldefaults = FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags")); + } else { + worldperms.put(key.toLowerCase(), FlagPermissions.parseFromConfigNode(key, flags.getConfigurationSection("Global.Flags"))); + } + } + } + } + + try { + if (flags.isConfigurationSection("Global.CommandLimits")) { + Set keys = flags.getConfigurationSection("Global.CommandLimits").getKeys(false); + if (keys != null) { + for (String key : keys) { + if (key.equalsIgnoreCase("Global") && globaldefaults != null) { + globaldefaults.parseCommandLimits(flags.getConfigurationSection("Global.CommandLimits." + key)); + } else { + FlagPermissions existing = worldperms.get(key.toLowerCase()); + if (existing != null) + existing.parseCommandLimits(flags.getConfigurationSection("Global.CommandLimits." + key)); + } + } + } + } + } catch (Throwable e) { + e.printStackTrace(); + } + + for (Entry entry : worldperms.entrySet()) { + entry.getValue().setParent(globaldefaults); + } + + if (!groups.isConfigurationSection("Groups")) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Your groups.yml file is incorrect!"); + return; + } + + if (flags.isConfigurationSection("Groups")) { + Set keys = groups.getConfigurationSection("Groups").getKeys(false); + if (keys != null) { + for (String key : keys) { + if (!groups.contains("Groups." + key + ".Flags")) + continue; + if (!groups.contains("Groups." + key + ".Flags.World")) + continue; + if (key == null) + continue; + Set worldkeys = groups.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false); + + if (worldkeys == null) + continue; + + Map perms = new HashMap<>(); + for (String wkey : worldkeys) { + FlagPermissions list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); + if (wkey.equalsIgnoreCase("global")) { + list.setParent(globaldefaults); + perms.put(wkey.toLowerCase(), list); + for (Entry worldperm : worldperms.entrySet()) { + list = FlagPermissions.parseFromConfigNode(wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World")); + list.setParent(worldperm.getValue()); + perms.put("global." + worldperm.getKey().toLowerCase(), list); + } + } else { + perms.put(wkey.toLowerCase(), list); + } + } + for (Entry entry : perms.entrySet()) { + String wkey = entry.getKey(); + FlagPermissions list = entry.getValue(); + if (!wkey.startsWith("global.")) { + list.setParent(perms.get("global." + wkey)); + if (list.getParent() == null) { + list.setParent(worldperms.get(wkey)); + } + if (list.getParent() == null) { + list.setParent(globaldefaults); + } + } + } + groupperms.put(key.toLowerCase(), perms); + + } + } + } + } catch (Exception ex) { + Logger.getLogger(WorldFlagManager.class.getName()).log(Level.SEVERE, null, ex); + } } } From 78932505d0eb1707a8ebb7a6ab869e926fccf27f Mon Sep 17 00:00:00 2001 From: TheLittle_Yang <2570984321@qq.com> Date: Sun, 21 Jan 2024 02:43:15 +0800 Subject: [PATCH 1083/1142] fix logic error --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 87a181484..63c18544c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -2534,7 +2534,7 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move // Preventing fly in residence only when player has move permission if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) - && !ResPerm.bypass_nofly.hasPermission(player, 10000L) && res.isOwner(player)) { + && !ResPerm.bypass_nofly.hasPermission(player, 10000L) && !res.isOwner(player)) { Location lc = player.getLocation(); Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); From b3306ec7272af87536b2425a5a035cc873fda04c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=92=D0=B8?= =?UTF-8?q?=D0=B4=D0=B5=D0=BC=D0=B0=D0=BD?= <41009944+AlekseyVideman@users.noreply.github.com> Date: Fri, 2 Feb 2024 11:06:29 +0700 Subject: [PATCH 1084/1142] Update Russian.yml --- src/Language/Russian.yml | 244 +++++++++++++++++++++++++++++++++------ 1 file changed, 206 insertions(+), 38 deletions(-) diff --git a/src/Language/Russian.yml b/src/Language/Russian.yml index 32ef5fb18..760c35459 100644 --- a/src/Language/Russian.yml +++ b/src/Language/Russian.yml @@ -7,8 +7,8 @@ Language: Invalid: Player: '&cÐеверное Ð¸Ð¼Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ°...' World: '&cÐеверный мир...' - Residence: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ...' - Subzone: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐŸÐ¾Ð´Ð·Ð¾Ð½Ð°...' + Residence: '&cРезиденций не найдено...' + Subzone: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð¿Ð¾Ð´Ð·Ð¾Ð½Ð°...' Direction: '&cÐеверное направление...' Amount: '&cÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ñумма...' Cost: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÑтоимоÑÑ‚ÑŒ...' @@ -25,25 +25,34 @@ Language: Page: '&eÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñтраница...' Help: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñтраница помощи...' NameCharacters: '&cÐ˜Ð¼Ñ Ñодержит недопуÑтимые Ñимволы...' + PlayerOffline: '&cИгрок не в Ñети' + FlagType: + Fail: '&cÐверный флаг... Этот флаг можно иÑпользовать только над %1' + Player: игроком + Residence: резиденцией + PortalDestination: '&cТочка выхода портала выходит на запретную территорию. Создание портала отменено. &7Ðайдите новое раÑположение' + FromConsole: '&cÐ’Ñ‹ можете иÑпользовать Ñто только в конÑоли!' + Ingame: '&cÐ’Ñ‹ можете иÑпользовать Ñто только в игре!' + Location: '&cÐверное раÑположение...' Area: Exists: '&cÐазвание облаÑти уже ÑущеÑтвует.' Create: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ñоздана, ID &6%1' - DiffWorld: '&cРайон находитÑÑ Ð² другом мире от Резиденции' + DiffWorld: '&cРайон находитÑÑ Ð² другом мире от резиденции' Collision: '&cОблаÑÑ‚ÑŒ переÑекаетÑÑ Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸ÐµÐ¹ &6%1' SubzoneCollision: '&cОблаÑÑ‚ÑŒ переÑекаетÑÑ Ñ Ð¿Ð¾Ð´Ð·Ð¾Ð½Ð¾Ð¹ &6%1' NonExist: '&cТакой облаÑти не ÑущеÑтвует.' InvalidName: '&cÐеверное название облаÑти...' - ToSmallX: '&cВаша длина выбора &6X &c(&6%1&c) Ñлишком мала. &eРазрешаетÑÑ &6%2 + ToSmallX: '&cВаша длина Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ &6X &c(&6%1&c) Ñлишком мала. &eРазрешаетÑÑ &6%2 &eи больше.' - ToSmallY: '&cВаша выÑота выбора (&6%1&c) Ñлишком мала. &eРазрешаетÑÑ &6%2 &eи + ToSmallY: '&cВаша выÑота Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ (&6%1&c) Ñлишком мала. &eРазрешаетÑÑ &6%2 &eи больше.' - ToSmallZ: '&cВаша длина выбора &6Z (&6%1&c) Ñлишком мала. &eРазрешаетÑÑ &6%2 &eи + ToSmallZ: '&cВаша длина Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ &6Z (&6%1&c) Ñлишком мала. &eРазрешаетÑÑ &6%2 &eи больше.' - ToBigX: '&cВаша длина выбора &6X (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 + ToBigX: '&cВаша длина Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ &6X (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 &eи меньше.' - ToBigY: '&cВаша выÑота выбора (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 &eи + ToBigY: '&cВаша выÑота Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 &eи меньше.' - ToBigZ: '&cВаша длина выбора &6Z (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 + ToBigZ: '&cВаша длина Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ &6Z (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 &eи меньше.' Rename: '&eПереименована облаÑÑ‚ÑŒ &6%1 &eв &6%2' Remove: '&eУдалена облаÑÑ‚ÑŒ &6%1...' @@ -55,6 +64,10 @@ Language: SizeLimit: '&eРазмер облаÑти не находитÑÑ Ð² ваших допуÑтимых пределах.' HighLimit: '&cÐ’Ñ‹ не можете защитить так выÑоко, ваш предел &6%1' LowLimit: '&cÐ’Ñ‹ не можете защитить так глубоко, ваш предел &6%1' + TooClose: '&cСлишком близко к другой резиденции. Вам нужно отойти Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ на &e%1 &cблоков.' + ListAll: '&a{&eID:&c%1 &eP1:&c(%2,%3,%4) &eP2:&c(%5,%6,%7) &e(Размер:&c%8&e)&a}' + WeirdShape: '&3Ð ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð¸Ð¼ÐµÐµÑ‚ неумеÑтную форму контуров. &6%1 &3Ñторона &3в &6%2 &3раз + больше Ñтороны &6%3' Select: Points: '&eСначала выберите две точки перед иÑпользованием Ñтой команды!' Overlap: '&cВыбранные точки переÑекаетÑÑ Ñ Ñ€ÐµÐ³Ð¸Ð¾Ð½Ð¾Ð¼ &6%1 &c!' @@ -62,23 +75,23 @@ Language: &c!' KingdomsOverlap: '&cВыбранные точки переÑекаетÑÑ Ñ Kingdoms землей &6%1 &c!' Success: '&eВыбор уÑпешен!' - Fail: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° выбора...' + Fail: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° выделениÑ...' Bedrock: '&eВыбор раÑширен до минимально допуÑтимого.' Sky: '&eВыбор раÑширен до макÑимально допуÑтимого предела.' Area: '&eВыбрана облаÑÑ‚ÑŒ &6%1 &eрезиденции &6%2' - Tool: '&e- ИнÑтрумент выбора: &6%1' - PrimaryPoint: '&eВыделена &6ÐŸÐµÑ€Ð²Ð°Ñ &eточка выбора %1' - SecondaryPoint: '&eВыделена &6Ð’Ñ‚Ð¾Ñ€Ð°Ñ &eточка выбора %1' + Tool: '&e- ИнÑтрумент выделениÑ: &6%1' + PrimaryPoint: '&eВыделена &6ÐŸÐµÑ€Ð²Ð°Ñ &eточка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ %1' + SecondaryPoint: '&eВыделена &6Ð’Ñ‚Ð¾Ñ€Ð°Ñ &eточка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ %1' Primary: '&eÐŸÐµÑ€Ð²Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ°: &6%1' Secondary: '&eÐ’Ñ‚Ð¾Ñ€Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ°: &6%1' TooHigh: '&cВнимание, выбор был выше вершины карты, ограничение.' TooLow: '&cВнимание, выбор был ниже нижней чаÑти карты, ограничение.' - TotalSize: '&eОбщий размер выбора: &6%1' - AutoEnabled: '&eРежим автоматичеÑкого выбора &6ВКЛ&e. Чтобы отключить &6/res + TotalSize: '&eОбщий размер выделениÑ: &6%1' + AutoEnabled: '&eРежим автоматичеÑкого Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ &6ВКЛ&e. Чтобы отключить &6/res select auto' - AutoDisabled: '&eРежим автоматичеÑкого выбора &6ВЫКЛ&e. Чтобы включить &6/res + AutoDisabled: '&eРежим автоматичеÑкого Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ &6ВЫКЛ&e. Чтобы включить &6/res select auto' - Disabled: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ доÑтупа к командам выбора' + Disabled: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ доÑтупа к командам выделениÑ' Sign: Updated: '&6%1 &eтабличка обновлена!' TopLine: '[market]' @@ -97,9 +110,10 @@ Language: ForSalePriceLine: '&8%1' ForSaleResName: '&8%1' ForSaleBottom: '&5%1m³' - LookAt: '&cÐ’Ñ‹ не Ñмотрите на табличку' + LookAt: '&cÐаведите курÑор на табличку' ResName: '&8%1' Owner: '&5%1' + TooMany: '&cСлишком много табилчек Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ резиденции' Siege: Started: '&7ОÑада началаÑÑŒ!' noSelf: '&cÐе могу оÑадить Ñвою резиденцию!' @@ -115,6 +129,8 @@ Language: min: '&e%1 &6мин ' sec: '&e%1 &6Ñек ' click: '&7Клик' + listSplitter: ', ' + clickToConfirm: '&7Ðажмите, чтобы подтвердить' server: land: Server_Land Flag: @@ -134,7 +150,7 @@ Language: RemovedAll: '&eÐ’Ñе флаги удалены &6%1 &eв &6%2 &eрезиденции.' RemovedGroup: '&eÐ’Ñе флаги удалены Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ &6%1 &eв резиденции &6%2 &e.' Default: '&eФлаги уÑтановлены по умолчанию.' - Deny: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ здеÑÑŒ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ &6%1 &c.' + Deny: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ здеÑÑŒ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ &6%1&c.' SetDeny: '&cВладелец не имеет доÑтупа к флагу &6%1' ChangeDeny: '&cÐ’Ñ‹ не можете изменить ÑоÑтоÑние флага &6%1 &c, пока внутри находÑÑ‚ÑÑ &6%2 &cигрок(ов).' @@ -142,12 +158,17 @@ Language: ChangedFor: '&e&eУÑтановлен флаг &6%1 &eÐ´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%2' reset: '&eУдален флаг Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%1' resetAll: '&eУдален флаг Ð´Ð»Ñ &6%1 &eрезиденций' + lackColor: '&7' + lackPrefix: '' + others: '&eи &2%1 &eдругих' Bank: NoAccess: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ доÑтупа к банку.' Name: ' &eБанк: &6%1' NoMoney: '&cÐедоÑтаточно денег в банке.' Deposit: '&eÐ’Ñ‹ внеÑли &6%1 &eв банк резиденции.' Withdraw: '&eÐ’Ñ‹ ÑнÑли &6%1 &eиз банка резиденции.' + rentedWithdraw: '&cС банка арендуемой резиденции Ð½ÐµÐ»ÑŒÐ·Ñ ÑнÑÑ‚ÑŒ деньги.' + full: '&eБанк резиденции полон!' Subzone: Rename: '&eПереименована подзона &6%1 &eв &6%2' Remove: '&eПодзона &6%1 &eудалена.' @@ -157,7 +178,7 @@ Language: Collide: '&cПодзона переÑекаетÑÑ Ñ Ð¿Ð¾Ð´Ð·Ð¾Ð½Ð¾Ð¹ &6%1' MaxAmount: '&cÐ’Ñ‹ доÑтигли макÑимально допуÑтимой Ñуммы подзоны Ð´Ð»Ñ Ñтой резиденции.' MaxDepth: '&cÐ’Ñ‹ доÑтигли макÑимально допуÑтимой глубины подзоны.' - SelectInside: '&eОбе точки выбора должны быть внутри резиденции.' + SelectInside: '&eОбе точки Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ быть внутри резиденции.' CantCreate: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° Ñоздание подзоны резиденции.' CantDelete: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° удаление подзоны резиденции.' CantDeleteNotOwnerOfParent: '&cÐ’Ñ‹ не ÑвлÑетеÑÑŒ владельцем родительÑкой резиденции @@ -178,9 +199,9 @@ Language: StopSelling: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð±Ð¾Ð»ÑŒÑˆÐµ не продаетÑÑ.' TooMany: '&cÐ’Ñ‹ уже владеете макÑимальным количеÑтвом резиденций, которые вам разрешено.' MaxRent: '&cÐ’Ñ‹ уже арендуете макÑимальное количеÑтво резиденций, которое вам разрешено.' - AlreadyRent: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ ÑƒÐ¶Ðµ Ñдана в аренду ...' - NotForRent: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ ÑдаетÑÑ ...' - NotForRentOrSell: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ Ð´Ð»Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹ или продажи ...' + AlreadyRent: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ ÑƒÐ¶Ðµ Ñдана в аренду...' + NotForRent: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ ÑдаетÑÑ...' + NotForRentOrSell: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ Ð´Ð»Ñ Ð°Ñ€ÐµÐ½Ð´Ñ‹ или продажи...' NotRented: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ Ñдана в аренду.' Unrent: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eне Ñдана' RemoveRentable: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eбольше не ÑдаетÑÑ Ð² аренду.' @@ -225,7 +246,7 @@ Language: CantDeleteResidence: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° удаление резиденции.' CantExpandResidence: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° раÑширение резиденции.' CantContractResidence: '&cÐ’Ñ‹ не имеете Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° контракт Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸.' - NoResHere: '&cТам нет резиденции.' + NoResHere: '&cЗдеÑÑŒ нет резиденции.' OwnerNoPermission: '&cВладелец не имеет Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° Ñто.' ParentNoPermission: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ прав вноÑить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² родительÑкую зону.' ChatDisabled: '&eЧат резиденции отключен...' @@ -239,8 +260,11 @@ Language: IsForRent: '&6(Ð’ аренду)' IsForSale: '&6(ПродаетÑÑ)' IsRented: '&6(Ðрендована)' + TrustedResList: ' &a%1. &f%2 &e- &6%3 %4&6%5' + Near: '&eРезиденции поблизоÑти: &7%1' + BaseFlagDeny: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ &6%1' Rent: - Disabled: '&cÐренда отключена ...' + Disabled: '&cÐренда отключена...' DisableRenew: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eбольше не будет ÑдаватьÑÑ Ð¿Ð¾ иÑтечении Ñрока.' EnableRenew: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eбудет автоматичеÑки продлена по иÑтечении Ñрока.' NotByYou: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ ÑдаетÑÑ Ð½Ðµ вам.' @@ -267,8 +291,11 @@ Language: removedBlock: '&eУдалена Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð´Ð»Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ &6%1 ' Blocked: '&eЗаблокированные команды: &6%1' Allowed: '&eРазрешенные команды: &6%1' + Parsed: '%1' + PlacehlderList: '&e%1. &6%2' + PlacehlderResult: ' &eрезультат: &6%1' Rentable: - Land: '&eÐÑ€ÐµÐ½Ð´ÑƒÐµÐ¼Ð°Ñ Ð—ÐµÐ¼Ð»Ñ: &6' + Land: '&eÐÑ€ÐµÐ½Ð´ÑƒÐµÐ¼Ð°Ñ Ð·ÐµÐ¼Ð»Ñ: &6' AllowRenewing: '&eМожно обновить: &6%1' StayInMarket: '&eÐрендуемое пребывание на рынке: &6%1' AllowAutoPay: '&eÐÑ€ÐµÐ½Ð´Ð½Ð°Ñ Ð¿Ð»Ð°Ñ‚Ð° позволÑет автооплату: &6%1' @@ -365,6 +392,9 @@ Language: GeneralList: '&2 %1 &6- &e%2' FlagsList: '&2 %1 &6- &e%2' SmallSeparator: '&6------' + Top: '&e___/ &a %1 - %2 &e \___' + TopSingle: '&e___/ &a %1 &e \___' + NextPage2: '&e-----< &6%1 &e>-----' Chat: ChatChannelChange: '&eИзменен канал чата резиденции на &6%1!' ChatChannelLeave: '&eВыход из чата зезиденции' @@ -376,6 +406,8 @@ Language: InvalidPrefixLength: '&4ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ð¹. ДопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð°: %1' ChangedColor: '&eЦвет канала чата резиденции изменен на %1' ChangedPrefix: '&eÐŸÑ€ÐµÑ„Ð¸ÐºÑ ÐºÐ°Ð½Ð°Ð»Ð° чата резиденции изменен на %1' + ChatMessage: '%1 %2%3: %4%5' + ChatListeningMessage: '&2[Listening %6]%1 %2%3: %4%5' Shop: ListTopLine: '&6%1 &eСпиÑок магазинов - Страница &6%2 &eиз &6%3 %4' List: ' &e%1. &6%2 &e(&6%3&e) %4' @@ -412,6 +444,7 @@ Language: '3': '&4%1' '4': '&8%1&e (&8%2&e)' Likes4: '&9Лайки: &8%2' + ChantChange: '&4Это Ð½ÐµÐ»ÑŒÐ·Ñ Ð¼ÐµÐ½ÑÑ‚ÑŒ, пока уÑтановлен флаг shop' RandomTeleport: TpLimit: '&eÐ’Ñ‹ не можете телепортироватьÑÑ Ñ‚Ð°Ðº быÑтро, пожалуйÑта, подождите &6%1 &eÑекунд и попробуйте Ñнова' @@ -427,17 +460,17 @@ Language: cmdPermissionColor: '&2' General: DisabledWorld: '&cПлагин Residence отключен в Ñтом мире' - UseNumbers: '&cПожалуйÑта, иÑпользуйте номер...' + UseNumbers: '&cПожалуйÑта, иÑпользуйте челые чиÑла...' # Replace all text with '' to disable this message CantPlaceLava: '&cÐ’Ñ‹ не можете размеÑтить лаву за пределами резиденции и выше - ÑƒÑ€Ð¾Ð²Ð½Ñ Ð±Ð»Ð¾ÐºÐ° &6%1 ' + &6%1 блоков' # Replace all text with '' to disable this message CantPlaceWater: '&cÐ’Ñ‹ не можете размеÑтить воду за пределами резиденции и выше - ÑƒÑ€Ð¾Ð²Ð½Ñ Ð±Ð»Ð¾ÐºÐ° &6%1 ' - CantPlaceChest: '&cÐ’Ñ‹ не можете размеÑтить Ñундук в Ñтом меÑте' + &6%1 блоков' + CantPlaceChest: '&cÐ’Ñ‹ не можете размеÑтить Ñундук на Ñтом меÑте' NoPermission: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° Ñто.' info: - NoPlayerPermission: '&c[playerName] не имеет Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ [permission]' + NoPlayerPermission: '&c[игрок] не имеет Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ [permission]' NoCmdPermission: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° Ñту команду.' DefaultUsage: '&eПишите &6/%1 ? &eÐ´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации' MaterialGet: '&eÐ˜Ð¼Ñ Ð¼Ð°Ñ‚ÐµÑ€Ð¸Ð°Ð»Ð° Ð´Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° &6%1 &eÑоÑтавлÑет &6%2' @@ -448,8 +481,8 @@ Language: ListMaterialAdd: '&6%1 &eдобавлен в резиденцию &6%2' ListMaterialRemove: '&6%1 &eудален из резиденции &6%2' ItemBlacklisted: '&cÐ’Ñ‹ попали в черный ÑпиÑок из за иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого предмета' - WorldPVPDisabled: '&cPVP в мире откл.' - NoPVPZone: '&cÐет PVP зоны.' + WorldPVPDisabled: '&cПВП в мире откл.' + NoPVPZone: '&cÐ’ Ñтой зоне ПВП выключено.' NoFriendlyFire: '&cОгонь по Ñвоим отключен' InvalidHelp: '&cÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñтраница Ñправки.' TeleportDeny: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ доÑтупа к телепорту.' @@ -495,10 +528,10 @@ Language: Available: '&2ДоÑтупно' Size: ' &eРазмер: &6%1' ResidenceFlags: '&eФлаги резиденции: &6%1' - PlayersFlags: '&Флаги игроков: &6%1' + PlayersFlags: '&eФлаги игроков: &6%1' GroupFlags: '&eГрупповые флаги: &6%1' OthersFlags: '&eДругие флаги: &6%1' - Moved: '&eДвижение...' + Moved: '&eПеремещено...' Name: '&eÐазвание: &6%1' Lists: '&eСпиÑки: &6' Residences: '&eРезиденции&6' @@ -511,6 +544,66 @@ Language: NewPlayerInfo: '&eЕÑли вы хотите Ñоздать охранÑемую территорию Ð´Ð»Ñ Ñвоего дома, иÑпользуйте деревÑнный топор, чтобы выбрать противоположные Ñтороны вашего дома, и выполните команду /res create ÐазваниеВашейРезиденции' + TeleportConfirmLava: '&cМеÑто Ð¿Ñ€Ð¸Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ безопаÑно, вы упадете в &6лаву&c. + ИÑпользуйте &6/res tpconfirm&c, чтобы вÑÑ‘ же телепортироватьÑÑ.' + TeleportConfirmVoid: '&cМеÑто Ð¿Ñ€Ð¸Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ безопаÑно, вы упадете в &6бездну&c. + ИÑпользуйте &6/res tpconfirm&c, чтобы вÑÑ‘ же телепортироватьÑÑ.' + HelpPageHeader2: '&eСтраниц Ñправочника - &6%1 &e- Страница <&6%2 &eиз &6%3&e>' + ResSize: + eastWest: '&eВоÑток/Запад: &6%1' + northSouth: '&eСевер/Юг: &6%1' + upDown: '&eВерх/Ðиз: &6%1' + CoordsLiner: '&7 (&3%1&7;%2&7)' + AllowedTeleportIcon: '&2T' + BlockedTeleportIcon: '&7T' + AllowedMovementIcon: '&2M' + BlockedMovementIcon: '&7M' + Raid: + NotEnabled: '&cÐ¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ€ÐµÐ¹Ð´Ð¾Ð² выключена!' + NotIn: '&cÐ’Ñ‹ не учаÑтвуете в рейде!' + CantLeave: '&cYou cant leave (%1) your own residence raid!' + CantKick: '&cCant kick (%1) residence owner!' + Kicked: '&eИгрок &7%1 &eиÑключен из рейда &7%2&e!' + StartsIn: '&7Рейд начнётÑÑ Ñ‡ÐµÑ€ÐµÐ·: [autoTimeLeft] &2%1D &4%2A' + EndsIn: '&cРейд окончитÑÑ Ñ‡ÐµÑ€ÐµÐ·: [autoTimeLeft] &2%1D &4%2A' + Ended: '&7Рейд на резиденцию &4%1 &7окончен!' + cantDo: '&cÐ’Ñ‹ не можете делать Ñто во Ð²Ñ€ÐµÐ¼Ñ Ñ€ÐµÐ¹Ð´Ð°!' + left: '&7Ð’Ñ‹ покинули рейд &4%1' + noFlagChange: '&cÐÐµÐ»ÑŒÐ·Ñ Ð¼ÐµÐ½ÑÑ‚ÑŒ флаги во Ð²Ñ€ÐµÐ¼Ñ Ñ€ÐµÐ¹Ð´Ð°' + noRemoval: '&cÐÐµÐ»ÑŒÐ·Ñ ÑƒÐ´Ð°Ð»ÑÑ‚ÑŒ резиденцию во Ð²Ñ€ÐµÐ¼Ñ Ñ€ÐµÐ¹Ð´Ð°' + immune: '&eИммунитет на %1' + notImmune: '&eИммунитет закончилÑÑ' + notInRaid: '&eИгрок не учаÑтвует в рейде' + attack: + Joined: '&7ПриÑоединение к рейду &2%1!' + Started: '&7Рейд началÑÑ!' + cooldown: '&cРейд только началÑÑ! Подождите %1' + immune: '&cЭта Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð¸Ð¼ÐµÐµÑ‚ иммунитет к рейдам! Подождите %1' + playerImmune: '&cВладелец резиденции имеет иммунитет к рейдам! Подождите %1' + isOffline: '&cВладелец резиденции не в Ñети, поÑтому рейд уÑтроить не получитÑÑ!' + noSubzones: '&cÐÐµÐ»ÑŒÐ·Ñ ÑƒÑтраивать рейд на подзоны!' + noSelf: '&cÐÐµÐ»ÑŒÐ·Ñ ÑƒÑтраивать рейд на Ñвою резиденцию!' + alreadyInAnother: '&cÐ’Ñ‹ не можете приÑоединитьÑÑ Ðº рейду, потому что учаÑтвуете в рейде (%1)' + defend: + Joined: '&7ПриÑоединение к рейду &2%1 &7в качеÑтве оборонительной Ñилы!' + Sent: '&7Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° приÑоединнение на оборонительную Ñторону отправлен, ожидайте подтверждениÑ' + Join: '&7ПриÑоединитьÑÑ Ðº рейду &6%1 &7в качеÑтве оборонительной Ñилы' + Invitation: '&7ПринÑÑ‚ÑŒ &6%1 &6в оборонительные Ñилы' + JoinedDef: '&2%1&7 вÑтупил в оборонительные Ñилы!' + IsOffline: '&cÐÐµÐ»ÑŒÐ·Ñ Ð²Ñтупить в оборонительные Ñилы, пока владелец не в Ñети!' + noSelf: '&cÐ’Ñ‹ уже оборонÑете Ñту резиденцию' + notRaided: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ подвергаетÑÑ Ñ€ÐµÐ¹Ð´Ñƒ' + alreadyInAnother: '&cÐ’Ñ‹ не можете вÑтупить в оборонительные Ñилы, потому что учаÑтвуете в рейде (%1)' + status: + title: '&7----------- &f%1(%2) &7-----------' + immune: '&eИммунитет к рейдам на: %1' + starts: '&7Рейд начнётÑÑ Ñ‡ÐµÑ€ÐµÐ·: %1' + attackers: '&7Ðападающих: &4%1' + defenders: '&7Защищающих: &4%1' + ends: '&7Рейд окончитÑÑ Ñ‡ÐµÑ€ÐµÐ·: %1' + canraid: '&2Ðевозможно уÑтроить рейд' + raidin: '&eРейд можно уÑтроить через: %1' + stopped: '&eРейд на резиденцию &6%1 &eокончен' CommandHelp: Description: Содержит помощь Ð´Ð»Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð° Residence SubCommands: @@ -538,11 +631,11 @@ CommandHelp: Info: - '&eПишите: &6/res select size' auto: - Description: Включает инÑтрумент автоматичеÑкого выбора + Description: Включает инÑтрумент автоматичеÑкого Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Info: - '&eПишите: &6/res select auto [playername]' cost: - Description: Показать ÑтоимоÑÑ‚ÑŒ выбора + Description: Показать ÑтоимоÑÑ‚ÑŒ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Info: - '&eПишите: &6/res select cost' vert: @@ -566,7 +659,7 @@ CommandHelp: - '&eПишите: &6/res select expand <количеÑтво>' - Увеличивает <количеÑтво> в направлении вашего взглÑда. shift: - Description: Сдвиг выбора в направлении + Description: Сдвиг Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð² направлении Info: - '&eПишите: &6/res select shift <количеÑтво>' - Выдвигает ваш выбор на <количеÑтво> в направлении вашего взглÑда. @@ -648,6 +741,8 @@ CommandHelp: - Сначала вы должны выбрать две точки. - Замена облаÑти будет взимать разницу в размере, еÑли Ð½Ð¾Ð²Ð°Ñ Ð¾Ð±Ð»Ð°ÑÑ‚ÑŒ больше. + Info: + - '' give: Description: Дайте резиденцию игроку. Info: @@ -1525,6 +1620,51 @@ CommandHelp: %1 Info: - '&eПишите: &6/res set <резиденциÑ> wspeed2 true/false/remove' + anchor: + Translated: anchor + Description: Разрешает или запрещает иÑпользовать Ñкорь Ð²Ð¾Ð·Ñ€Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> anchor true/false/remove' + honey: + Translated: honey + Description: Разрешает или запрещает Ñобирать мёд + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> honey true/false/remove' + honeycomb: + Translated: honeycomb + Description: Allows or denys players to get honeycomb + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> honeycomb true/false/remove' + copper: + Translated: copper + Description: Разрешает изменÑÑ‚ÑŒ медные блоки + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> copper true/false/remove' + elytra: + Translated: elytra + Description: Разрешает или запрещает иÑпользовать Ñлитры в резиденции + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> elytra true/false/remove' + harvest: + Translated: harvest + Description: Разрешает Ñобирать урожай + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> harvest true/false/remove' + nametag: + Translated: nametag + Description: Разрешает или запрещает иÑпользовать бирки + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> nametag true/false/remove' + safezone: + Translated: safezone + Description: Предотвращает резиденцию от Ð½Ð°Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñффекта дурного Ð·Ð½Ð°Ð¼ÐµÐ½Ð¸Ñ + Info: + - '&eПишите: &6/res set <резиденциÑ> safezone true/false/remove' + brush: + Translated: brush + Description: ПозволÑет или запрещает риÑовать блоками + Info: + - '&eПишите: &6/res set/pset <резиденциÑ> brush true/false/remove' remove: Description: Удалить резиденцию. Info: @@ -1697,3 +1837,31 @@ CommandHelp: - '&eПишите: &6/resload' - ÐЕБЕЗОПÐСÐÐЯ команда, перед выполнением не ÑохранÑет резиденции. - Загружает файл ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð¸ поÑле внеÑÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹. + placeholders: + Info: + - '&eПишите: &6/res placeholders (parse) (плейÑхолдер) (игрок)' + Description: СпиÑок плейÑхолдеров + parse: '[result]' + raid: + Info: + - '&eПишите: &6/res raid start [резиденциÑ] (игроок)' + - '&6/res raid stop [резиденциÑ]' + - '&6/res raid kick [игрок]' + - '&6/res raid immunity [add/take/set/clear] [резиденциÑ/currentres] [времÑ]' + Description: Управление рейдами на резиденцию + raidstatus: + Info: + - '&eПишите: &6/res raidstatus (резиденциÑ/игрок)' + Description: Проверить ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€ÐµÐ¹Ð´Ð° резиденции + leaveraid: + Info: + - '&eПишите: &6/res leaveraid' + Description: Покинуть рейд + defend: + Info: + - '&eПишите: &6/res defend [резиденциÑ] (игрок)' + Description: Ð’Ñтупить в оборонительные Ñилы резиденции + attack: + Description: Ðачать рейд на резиденцию + Info: + - '&eПишите: &6/res attack [резиденциÑ]' From 29b5c46ef8e4f2cbb0ab4312dedd22ecb2ebff5d Mon Sep 17 00:00:00 2001 From: RENaa_FD <92320175+lRENyaaa@users.noreply.github.com> Date: Tue, 13 Feb 2024 13:40:03 +0800 Subject: [PATCH 1085/1142] Money exploit fix --- src/com/bekvon/bukkit/residence/commands/bank.java | 5 +++++ src/com/bekvon/bukkit/residence/commands/market.java | 8 ++++++++ src/com/bekvon/bukkit/residence/economy/CMIEconomy.java | 5 +++++ .../bukkit/residence/economy/EssentialsEcoAdapter.java | 5 +++++ .../bekvon/bukkit/residence/economy/IConomy6Adapter.java | 4 ++++ .../bekvon/bukkit/residence/economy/RealShopEconomy.java | 4 ++++ .../bekvon/bukkit/residence/economy/rent/RentManager.java | 1 + .../residence/vaultinterface/ResidenceVaultAdapter.java | 4 ++++ 8 files changed, 36 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index ddcaf2cc7..8fdc28165 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -44,6 +44,11 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.msg(sender, lm.Invalid_Amount); return null; } + + if (amount <= 0){ + plugin.msg(sender, lm.Invalid_Amount); + return null; + } switch(args[0].toLowerCase()) { case "deposit": diff --git a/src/com/bekvon/bukkit/residence/commands/market.java b/src/com/bekvon/bukkit/residence/commands/market.java index 457bfc8ac..ffc19975d 100644 --- a/src/com/bekvon/bukkit/residence/commands/market.java +++ b/src/com/bekvon/bukkit/residence/commands/market.java @@ -297,12 +297,20 @@ private boolean commandResMarketRentable(String[] args, boolean resadmin, Player plugin.msg(player, lm.Invalid_Cost); return true; } + if (cost <= 0) { + plugin.msg(player, lm.Invalid_Cost); + return true; + } try { days = Integer.parseInt(args[3]); } catch (Exception ex) { plugin.msg(player, lm.Invalid_Days); return true; } + if (days <= 0) { + plugin.msg(player, lm.Invalid_Days); + return true; + } boolean AllowRenewing = plugin.getConfigManager().isRentAllowRenewing(); if (args.length >= 5) { String ag = args[4]; diff --git a/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java b/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java index 5a6170a25..ab325fc5c 100644 --- a/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java @@ -25,6 +25,7 @@ public double getBalance(String playerName) { @Override public boolean canAfford(Player player, double amount) { + if (amount <= 0) return false; CMIUser user = CMI.getInstance().getPlayerManager().getUser(player); if (user != null && user.getBalance() >= amount) { return true; @@ -34,6 +35,7 @@ public boolean canAfford(Player player, double amount) { @Override public boolean canAfford(String playerName, double amount) { + if (amount <= 0) return false; CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); if (user != null && user.getBalance() >= amount) { return true; @@ -43,6 +45,7 @@ public boolean canAfford(String playerName, double amount) { @Override public boolean add(String playerName, double amount) { + if (amount <= 0) return false; CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); if (user != null) user.deposit(amount); @@ -51,6 +54,7 @@ public boolean add(String playerName, double amount) { @Override public boolean subtract(String playerName, double amount) { + if (amount <= 0) return false; if (!canAfford(playerName, amount)) { return false; } @@ -62,6 +66,7 @@ public boolean subtract(String playerName, double amount) { @Override public boolean transfer(String playerFrom, String playerTo, double amount) { + if (amount <= 0) return false; if (!canAfford(playerFrom, amount)) { return false; } diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index 21aadcfc0..f5e6c2ff4 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -49,6 +49,7 @@ public double getBalance(String playerName) { @Override public boolean canAfford(Player player, double amount) { + if (amount <= 0) return false; try { if (Economy.playerExists(player.getUniqueId())) { return Economy.hasEnough(player.getUniqueId(), BigDecimal.valueOf(amount)); @@ -62,6 +63,7 @@ public boolean canAfford(Player player, double amount) { @SuppressWarnings("deprecation") @Override public boolean canAfford(String playerName, double amount) { + if (amount <= 0) return false; try { if (Economy.playerExists(playerName)) { return Economy.hasEnough(playerName, amount); @@ -75,6 +77,7 @@ public boolean canAfford(String playerName, double amount) { @SuppressWarnings("deprecation") @Override public boolean add(String playerName, double amount) { + if (amount <= 0) return false; if (Economy.playerExists(playerName)) { try { Economy.add(playerName, amount); @@ -91,6 +94,7 @@ public boolean add(String playerName, double amount) { @SuppressWarnings("deprecation") @Override public boolean subtract(String playerName, double amount) { + if (amount <= 0) return false; if (Economy.playerExists(playerName)) { try { Economy.subtract(playerName, amount); @@ -107,6 +111,7 @@ public boolean subtract(String playerName, double amount) { @SuppressWarnings("deprecation") @Override public boolean transfer(String playerFrom, String playerTo, double amount) { + if (amount <= 0) return false; try { if (Economy.playerExists(playerFrom) && Economy.playerExists(playerTo) && Economy.hasEnough(playerFrom, amount)) { if (!subtract(playerFrom, amount)) diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java index 57e4e161c..c4ffa76fa 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java @@ -33,6 +33,7 @@ public boolean canAfford(Player player, double amount) { @Override public boolean canAfford(String playerName, double amount) { + if (amount <= 0) return false; checkExist(playerName); double holdings = this.getBalance(playerName); if (holdings >= amount) { @@ -43,6 +44,7 @@ public boolean canAfford(String playerName, double amount) { @Override public boolean add(String playerName, double amount) { + if (amount <= 0) return false; checkExist(playerName); new Accounts().get(playerName).getHoldings().add(amount); return true; @@ -50,6 +52,7 @@ public boolean add(String playerName, double amount) { @Override public boolean subtract(String playerName, double amount) { + if (amount <= 0) return false; checkExist(playerName); if (this.canAfford(playerName, amount)) { new Accounts().get(playerName).getHoldings().subtract(amount); @@ -60,6 +63,7 @@ public boolean subtract(String playerName, double amount) { @Override public boolean transfer(String playerFrom, String playerTo, double amount) { + if (amount <= 0) return false; checkExist(playerTo); checkExist(playerFrom); if (this.canAfford(playerFrom, amount)) { diff --git a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java index 442bad5a5..3e41a8716 100644 --- a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java @@ -29,6 +29,7 @@ public boolean canAfford(Player player, double amount) { @Override public boolean canAfford(String playerName, double amount) { + if (amount <= 0) return false; if (plugin.getBalance(playerName) >= amount) { return true; } @@ -37,12 +38,14 @@ public boolean canAfford(String playerName, double amount) { @Override public boolean add(String playerName, double amount) { + if (amount <= 0) return false; plugin.setBalance(playerName, plugin.getBalance(playerName) + amount); return true; } @Override public boolean subtract(String playerName, double amount) { + if (amount <= 0) return false; if (!canAfford(playerName, amount)) { return false; } @@ -52,6 +55,7 @@ public boolean subtract(String playerName, double amount) { @Override public boolean transfer(String playerFrom, String playerTo, double amount) { + if (amount <= 0) return false; if (!canAfford(playerFrom, amount)) { return false; } diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index 4f5231e5f..c581719ad 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -183,6 +183,7 @@ public void setForRent(Player player, String landName, int amount, int days, boo public void setForRent(Player player, ClaimedResidence res, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean AllowAutoPay, boolean resadmin) { + if (amount < 0) return; if (res == null) { plugin.msg(player, lm.Invalid_Residence); diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index 2cc0c2a33..b37d209de 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -111,24 +111,28 @@ public boolean canAfford(Player player, double amount) { @SuppressWarnings("deprecation") @Override public boolean canAfford(String playerName, double amount) { + if (amount <= 0) return false; return economy.has(playerName, amount); } @SuppressWarnings("deprecation") @Override public boolean add(String playerName, double amount) { + if (amount <= 0) return false; return economy.depositPlayer(playerName, amount).transactionSuccess(); } @SuppressWarnings("deprecation") @Override public boolean subtract(String playerName, double amount) { + if (amount <= 0) return false; return economy.withdrawPlayer(playerName, amount).transactionSuccess(); } @SuppressWarnings("deprecation") @Override public boolean transfer(String playerFrom, String playerTo, double amount) { + if (amount <= 0) return false; if (economy.withdrawPlayer(playerFrom, amount).transactionSuccess()) { if (economy.depositPlayer(playerTo, amount).transactionSuccess()) { return true; From 56e3d605ae6132e06559620edd9b02b0b99e85bb Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Feb 2024 13:23:31 +0200 Subject: [PATCH 1086/1142] Goathorn flag. To note, sound is still being played at source player side even with canceled event --- .../bukkit/residence/ConfigManager.java | 2 - .../bekvon/bukkit/residence/Residence.java | 3 + .../bukkit/residence/commands/bank.java | 90 +++++++++---------- .../bukkit/residence/commands/expand.java | 1 - .../bukkit/residence/containers/Flags.java | 1 + .../listeners/ResidenceEntityListener.java | 4 +- .../listeners/ResidencePlayerListener.java | 6 +- .../ResidencePlayerListener1_19.java | 63 +++++++++++++ src/plugin.yml | 2 +- 9 files changed, 117 insertions(+), 55 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_19.java diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 360778ba5..c18e8bfdb 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -1503,8 +1503,6 @@ public void UpdateConfigFile() { Pl3xMapFillRented = argb(CMINumber.clamp((int) (Pl3xMapFillOpacity * 255), 0, 255), processColor(c.get("Pl3xMap.Fill.Rented", "#99ff33"))); Pl3xMapFillForSale = argb(CMINumber.clamp((int) (Pl3xMapFillOpacity * 255), 0, 255), processColor(c.get("Pl3xMap.Fill.ForSale", "#0066ff"))); - CMIDebug.d(Pl3xFillColor, Pl3xMapFillForRent, Pl3xMapFillRented, Pl3xMapFillForSale); - c.addComment("Pl3xMap.VisibleRegions", "Shows only regions on this list"); Pl3xMapVisibleRegions = c.get("Pl3xMap.VisibleRegions", new ArrayList()); c.addComment("Pl3xMap.HiddenRegions", "Hides region on map even if its not hidden in game"); diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 075a26a90..eb6a1a3da 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -85,6 +85,7 @@ import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_15; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_16; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_17; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_19; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_20; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_9; import com.bekvon.bukkit.residence.listeners.SpigotListener; @@ -724,6 +725,8 @@ public void onEnable() { pm.registerEvents(new ResidencePlayerListener1_16(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_17_R1)) pm.registerEvents(new ResidencePlayerListener1_17(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_19_R1)) + pm.registerEvents(new ResidencePlayerListener1_19(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_20_R1)) pm.registerEvents(new ResidencePlayerListener1_20(this), this); diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 8fdc28165..21c82e3cc 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -19,56 +19,56 @@ public class bank implements cmd { @CommandAnnotation(simple = true, priority = 3400, regVar = { 2, 3 }, consoleVar = { 2, 3 }) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - ClaimedResidence res = null; + ClaimedResidence res = null; - if (args.length == 3) { - res = plugin.getResidenceManager().getByName(args[1]); - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return null; - } - } else if (sender instanceof Player) { - res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); - } - if (res == null) { - plugin.msg(sender, lm.Residence_NotIn); - return null; - } - double amount = 0D; - try { - if (args.length == 2) - amount = Double.parseDouble(args[1]); - else - amount = Double.parseDouble(args[2]); - } catch (Exception ex) { - plugin.msg(sender, lm.Invalid_Amount); - return null; - } + if (args.length == 3) { + res = plugin.getResidenceManager().getByName(args[1]); + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return null; + } + } else if (sender instanceof Player) { + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); + } + if (res == null) { + plugin.msg(sender, lm.Residence_NotIn); + return null; + } + double amount = 0D; + try { + if (args.length == 2) + amount = Double.parseDouble(args[1]); + else + amount = Double.parseDouble(args[2]); + } catch (Exception ex) { + plugin.msg(sender, lm.Invalid_Amount); + return null; + } - if (amount <= 0){ - plugin.msg(sender, lm.Invalid_Amount); - return null; - } - - switch(args[0].toLowerCase()) { - case "deposit": - res.getBank().deposit(sender, amount, resadmin); - return true; - case "withdraw": - res.getBank().withdraw(sender, amount, resadmin); - return true; - } - - return false; + if (amount <= 0) { + plugin.msg(sender, lm.Invalid_Amount); + return null; + } + + switch (args[0].toLowerCase()) { + case "deposit": + res.getBank().deposit(sender, amount, resadmin); + return true; + case "withdraw": + res.getBank().withdraw(sender, amount, resadmin); + return true; + } + + return false; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Manage money in a Residence"); - c.get("Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", - "You must be standing in a Residence or provide residence name", - "You must have the +bank flag.")); - LocaleManager.addTabCompleteMain(this, "deposit%%withdraw", "[residence]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Manage money in a Residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", + "You must be standing in a Residence or provide residence name", + "You must have the +bank flag.")); + LocaleManager.addTabCompleteMain(this, "deposit%%withdraw", "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 424bc39bc..2c2a393bd 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -15,7 +15,6 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Logs.CMIDebug; public class expand implements cmd { diff --git a/src/com/bekvon/bukkit/residence/containers/Flags.java b/src/com/bekvon/bukkit/residence/containers/Flags.java index 2ae31e787..49e2f9233 100644 --- a/src/com/bekvon/bukkit/residence/containers/Flags.java +++ b/src/com/bekvon/bukkit/residence/containers/Flags.java @@ -61,6 +61,7 @@ public enum Flags { flowerpot(CMIMaterial.FLOWER_POT, FlagMode.Both, "Allows or denys interaction with flower pot", true), grow(CMIMaterial.WHEAT_SEEDS, FlagMode.Residence, "Allows or denys plant growing", true), glow(CMIMaterial.SEA_LANTERN, FlagMode.Residence, "Players will start glowing when entering residence", true), + goathorn(CMIMaterial.GOAT_HORN, FlagMode.Both, "Allows or denys goat horn usage", true), harvest(CMIMaterial.SWEET_BERRIES, FlagMode.Both, "Allows harvesting", true), hotfloor(CMIMaterial.MAGMA_BLOCK, FlagMode.Residence, "Prevent damage from magma blocks", true), hidden(CMIMaterial.GLASS_PANE, FlagMode.Residence, "Hides residence from list or listall commands", false), diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index b4a92c20f..6921e5d42 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -50,8 +50,8 @@ import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; -import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.hanging.HangingPlaceEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; @@ -59,7 +59,6 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; -import com.Zrips.CMI.CMI; import com.bekvon.bukkit.residence.ConfigManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -75,7 +74,6 @@ import net.Zrips.CMILib.Entities.CMIEntityType; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceEntityListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 63c18544c..e2aaf1255 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -706,8 +706,8 @@ public void onCommand(PlayerCommandPreprocessEvent event) { List w = new ArrayList(res.getCmdWhiteList()); List b = new ArrayList(res.getCmdBlackList()); - - if (!areaLimited) { + + if (!areaLimited) { w.clear(); b.clear(); } @@ -717,7 +717,7 @@ public void onCommand(PlayerCommandPreprocessEvent event) { b.removeAll(globalPerm.getCMDWhiteList()); b.addAll(globalPerm.getCMDBlackList()); } - + if (canUseCommand(msg, w, b)) return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_19.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_19.java new file mode 100644 index 000000000..c2cc18b0c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_19.java @@ -0,0 +1,63 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + +public class ResidencePlayerListener1_19 implements Listener { + + private Residence plugin; + + public ResidencePlayerListener1_19(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onSignInteract(PlayerInteractEvent event) { + + if (!Flags.goathorn.isGlobalyEnabled()) + return; + + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; + + Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) + return; + + ItemStack horn = event.getItem(); + + if (horn == null) + return; + + if (!horn.getType().equals(Material.GOAT_HORN)) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(event.getPlayer().getLocation()); + if (res == null) + return; + + if (event.getPlayer().hasMetadata("NPC")) + return; + + if (res.getPermissions().playerHas(event.getPlayer(), Flags.goathorn, FlagCombo.TrueOrNone)) + return; + + event.setCancelled(true); + + plugin.msg(player, lm.Residence_FlagDeny, Flags.goathorn, res.getName()); + } +} diff --git a/src/plugin.yml b/src/plugin.yml index 1b6198f36..8c7a60d87 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.4.0 +version: 5.1.4.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 020b7e4d2eb159f39e61257803c331709fe45196 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Feb 2024 13:54:58 +0200 Subject: [PATCH 1087/1142] Residence creation limitation based on specific blacklisted worlds --- src/com/bekvon/bukkit/residence/ConfigManager.java | 11 +++++++++-- src/com/bekvon/bukkit/residence/containers/lm.java | 1 + src/com/bekvon/bukkit/residence/gui/FlagUtil.java | 2 -- .../bukkit/residence/protection/ResidenceManager.java | 5 +++++ 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index c18e8bfdb..69c40c777 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -206,6 +206,7 @@ public class ConfigManager { protected boolean useVisualizer; protected boolean DisableListeners; protected boolean DisableCommands; + private boolean DisableResidenceCreation; //Town // private boolean TownEnabled = false; @@ -690,12 +691,14 @@ public void UpdateConfigFile() { DefaultWorld = c.get("Global.Optimizations.DefaultWorld", defaultWorldName); c.addComment("Global.Optimizations.DisabledWorlds.List", "List Of Worlds where this plugin is disabled", "Make sure that world names capitalization is correct"); - DisabledWorldsList = c.get("Global.Optimizations.DisabledWorlds.List", new ArrayList()); + DisabledWorldsList = c.get("Global.Optimizations.DisabledWorlds.List", Arrays.asList("worldNamesHere")); c.addComment("Global.Optimizations.DisabledWorlds.DisableListeners", "Disables all listeners in included worlds"); DisableListeners = c.get("Global.Optimizations.DisabledWorlds.DisableListeners", true); - c.addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disabled any command usage in included worlds"); + c.addComment("Global.Optimizations.DisabledWorlds.DisableCommands", "Disables any command usage in included worlds"); DisableCommands = c.get("Global.Optimizations.DisabledWorlds.DisableCommands", true); + c.addComment("Global.Optimizations.DisabledWorlds.DisableResidenceCreation", "Disables residence creation in included worlds"); + DisableResidenceCreation = c.get("Global.Optimizations.DisabledWorlds.DisableResidenceCreation", true); c.addComment("Global.Optimizations.ItemPickUpDelay", "Delay in seconds between item pickups after residence flag prevents it", "Keep it at arround 10 sec to lower unesecery checks"); ItemPickUpDelay = c.get("Global.Optimizations.ItemPickUpDelay", 10); @@ -2367,6 +2370,10 @@ public String getAutoCleanUserName() { return AutoCleanUserName; } + public boolean isDisableResidenceCreation() { + return DisableResidenceCreation; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index d22c1cfcf..699412fd6 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -475,6 +475,7 @@ public enum lm { Permissions_cmdPermissionColor("&2"), General_DisabledWorld("&cResidence plugin is disabled in this world"), + General_CantCreate("&cCan't create residences in this world"), General_UseNumbers("&cPlease use numbers..."), General_CantPlaceLava("&cYou can't place lava outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), General_CantPlaceWater("&cYou can't place Water outside residence and higher than &6%1 &cblock level", "Replace all text with '' to disable this message"), diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 6c75f91cd..6e3ba7c3f 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -2,11 +2,9 @@ import java.util.Set; -import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import com.Zrips.CMI.CMI; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index aa8599e61..63679dbe9 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -241,6 +241,11 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String plugin.msg(player, lm.Select_Points); return false; } + + if (plugin.isDisabledWorld(loc1.getWorld()) && plugin.getConfigManager().isDisableResidenceCreation()) { + plugin.msg(player, lm.General_CantCreate); + return false; + } ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); From 87b2a9363519937ba26b06869931d6fcb04be33a Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 20 Feb 2024 17:59:43 +0200 Subject: [PATCH 1088/1142] Better nofly handling --- .../listeners/ResidencePlayerListener.java | 163 +++++++----------- .../residence/selection/SelectionManager.java | 5 + 2 files changed, 72 insertions(+), 96 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index e2aaf1255..e32df6ccf 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -8,7 +8,6 @@ import java.util.Map; import java.util.Set; import java.util.UUID; -import java.util.concurrent.CompletableFuture; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -89,10 +88,10 @@ import net.Zrips.CMILib.CMILib; import net.Zrips.CMILib.ActionBar.CMIActionBar; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; @@ -928,6 +927,7 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, location.getWorld().getName()); player.closeInventory(); CMITeleporter.teleportAsync(player, location); + player.setFlying(false); player.setAllowFlight(false); } @@ -1262,14 +1262,12 @@ public void onSelection(PlayerInteractEvent event) { if (event.getAction() == Action.LEFT_CLICK_BLOCK) { Location loc = block.getLocation(); plugin.getSelectionManager().placeLoc1(player, loc, true); - plugin.msg(player, lm.Select_PrimaryPoint, plugin.msg(lm.General_CoordsTop, loc.getBlockX(), loc.getBlockY(), - loc.getBlockZ())); + plugin.msg(player, lm.Select_PrimaryPoint, plugin.msg(lm.General_CoordsTop, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); event.setCancelled(true); } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && Utils.isMainHand(event)) { Location loc = block.getLocation(); plugin.getSelectionManager().placeLoc2(player, loc, true); - plugin.msg(player, lm.Select_SecondaryPoint, plugin.msg(lm.General_CoordsBottom, loc.getBlockX(), loc - .getBlockY(), loc.getBlockZ())); + plugin.msg(player, lm.Select_SecondaryPoint, plugin.msg(lm.General_CoordsBottom, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); event.setCancelled(true); } @@ -2065,7 +2063,6 @@ private void fly(Player player, boolean state) { // Lets not disable fly mode if player has access to fly command from another plugin if (player.hasPermission("cmi.command.fly") || player.hasPermission("essentials.fly")) return; - boolean land = player.isFlying(); player.setFlying(false); player.setAllowFlight(false); @@ -2319,6 +2316,7 @@ public void onPlayerMoveInVehicle(VehicleMoveEvent event) { } private boolean teleport(Player player, Location loc) { + if (player == null || !player.isOnline() || loc == null) return false; @@ -2330,6 +2328,62 @@ private boolean teleport(Player player, Location loc) { return CMITeleporter.teleport(player, loc); } + private boolean checkNoFly(Player player, ClaimedResidence res, ClaimedResidence orres, Location loc) { + + UUID uuid = player.getUniqueId(); + Location location = player.getLocation().clone(); + + int from = location.getBlockY(); + int to = CMIWorld.getMinHeight(loc.getWorld()); + boolean teleported = false; + + for (int i = from; i > to; i--) { + location.setY(i); + Block block = location.getBlock(); + if (!isEmptyBlock(block)) { + break; + } + } + + int distance = (int) (player.getLocation().getY() - location.getY()); + + if (distance > 4) { + Location lastLoc = lastOutsideLoc.get(uuid); + player.closeInventory(); + + if (lastLoc != null) { + res = plugin.getResidenceManager().getByLoc(lastLoc); + if (res != null) { + if (Flags.tp.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { + teleported = teleport(player, res.getOutsideFreeLoc(lastLoc, player, true)); + } else { + player.setFlying(false); + player.setAllowFlight(false); + } + } else { + teleported = teleport(player, lastLoc); + } + } else { + teleported = teleport(player, res.getOutsideFreeLoc(loc, player, true)); + } + if (teleported) { + player.setFlying(false); + player.setAllowFlight(false); + } + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); + + return teleported; + } + + plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); + player.closeInventory(); + + player.setFlying(false); + player.setAllowFlight(false); + + return true; + } + public boolean handleNewLocation(final Player player, Location loc, boolean move) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); @@ -2348,56 +2402,11 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move currentRes.remove(uuid); } else { if (res != null && ResOld.getName().equals(res.getName())) { -// if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) -// && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { -// if (!res.isOwner(player)) { -// Location lc = player.getLocation(); -// Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); -// location.setPitch(lc.getPitch()); -// location.setYaw(lc.getYaw()); -// int from = location.getBlockY(); -// int maxH = from + 3; -// if (location.getWorld().getEnvironment() == Environment.NETHER) -// maxH = 100; -// else -// maxH = location.getWorld().getHighestBlockAt(location).getLocation().getBlockY() + 3; -// -// for (int i = 0; i < maxH; i++) { -// location.setY(from - i); -// Block block = location.getBlock(); -// if (!isEmptyBlock(block)) { -// location.setY(from - i + 1); -// break; -// } -// if (location.getBlockY() <= 0) { -// Location lastLoc = lastOutsideLoc.get(uuid); -// player.closeInventory(); -// boolean teleported = false; -// if (move) { -// if (lastLoc != null) -// teleported = teleport(player, lastLoc); -// else -// teleported = teleport(player, res.getOutsideFreeLoc(loc, player)); -// } -// plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); -// if (!teleported) -// return false; -// return true; -// } -// } -// plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); -// player.closeInventory(); -// if (move) { -// boolean teleported = teleport(player, location); -// if (!teleported) -// return false; -// } -// player.setFlying(false); -// player.setAllowFlight(false); -// } -// } -// lastOutsideLoc.put(uuid, loc); -// return true; + if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) + && !res.isOwner(player) && !ResPerm.bypass_nofly.hasPermission(player, 10000L)) { + return checkNoFly(player, res, orres, loc); + } + return true; } } @@ -2535,51 +2544,13 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move // Preventing fly in residence only when player has move permission if (Flags.nofly.isGlobalyEnabled() && player.isFlying() && res.getPermissions().playerHas(player, Flags.nofly, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player) && !ResPerm.bypass_nofly.hasPermission(player, 10000L) && !res.isOwner(player)) { - - Location lc = player.getLocation(); - Location location = new Location(lc.getWorld(), lc.getX(), lc.getBlockY(), lc.getZ()); - location.setPitch(lc.getPitch()); - location.setYaw(lc.getYaw()); - int from = location.getBlockY(); - int maxH = location.getWorld().getMaxHeight() - 1; - boolean teleported = false; - - for (int i = 0; i < maxH; i++) { - location.setY(from - i); - Block block = location.getBlock(); - if (!isEmptyBlock(block)) { - location.setY(from - i + 1); - break; - } - if (location.getBlockY() <= 0) { - Location lastLoc = lastOutsideLoc.get(uuid); - player.closeInventory(); - if (lastLoc != null) - teleported = teleport(player, lastLoc); - else - teleported = teleport(player, res.getOutsideFreeLoc(loc, player, true)); - - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); - return teleported; - } - } - plugin.msg(player, lm.Residence_FlagDeny, Flags.nofly, orres.getName()); - player.closeInventory(); - teleported = teleport(player, location); - if (!teleported) - return false; - player.setFlying(false); - player.setAllowFlight(false); + return checkNoFly(player, res, orres, loc); } } catch (Throwable e) { e.printStackTrace(); } } - if (!cantMove) { - lastOutsideLoc.put(uuid, loc); - } - if (!currentRes.containsKey(uuid) || ResOld != res) { if (cantMove) { Location lastLoc = lastOutsideLoc.get(uuid); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 58ddfa571..5607f4896 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -35,6 +35,7 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Effects.CMIEffect; import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; import net.Zrips.CMILib.Version.Schedulers.CMITask; @@ -86,6 +87,7 @@ public void setBaseLoc2(Location loc2) { } public selectionType getSelectionRestrictions() { + CMIDebug.d("restrictions", inSameResidence()); if (inSameResidence()) { if (plugin.getConfigManager().isSelectionIgnoreYInSubzone()) { if (hasPlacedBoth() && !player.hasPermission(ignoreyinsubzonePermission)) { @@ -94,7 +96,10 @@ public selectionType getSelectionRestrictions() { } } else { if (plugin.getConfigManager().isSelectionIgnoreY()) { + + CMIDebug.d("ignore Y"); if (hasPlacedBoth() && !player.hasPermission(ignoreyPermission)) { + CMIDebug.d("return ignore Y", selectionType.ignoreY); return selectionType.ignoreY; } } From ef96fa1ce2d0a2d929d5faa05b16a85995b67cca Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Feb 2024 14:53:52 +0200 Subject: [PATCH 1089/1142] We should allow 0 money checks and transfers in case costs are at 0 --- .../bukkit/residence/commands/auto.java | 68 ++++++++++----- .../bukkit/residence/commands/create.java | 2 +- .../bukkit/residence/economy/CMIEconomy.java | 84 ++++++++++--------- .../economy/EssentialsEcoAdapter.java | 10 +-- .../residence/economy/IConomy6Adapter.java | 8 +- .../residence/economy/RealShopEconomy.java | 8 +- .../residence/economy/ResidenceBank.java | 2 +- .../residence/economy/TransactionManager.java | 2 +- .../protection/ResidenceManager.java | 10 ++- .../residence/selection/SelectionManager.java | 6 +- .../vaultinterface/ResidenceVaultAdapter.java | 12 ++- src/plugin.yml | 2 +- 12 files changed, 121 insertions(+), 93 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 3cb42602c..71e696a2e 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -24,6 +24,7 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; public class auto implements cmd { @@ -43,7 +44,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } catch (Exception | Error e) { } - + if (args.length > 0 && length == -1) resName = args[0]; else @@ -110,31 +111,50 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo Selection selection = plugin.getSelectionManager().getSelection(player); - double ratioX = getRatio(selection.getBaseArea().getXSize(), selection.getBaseArea().getYSize(), selection.getBaseArea().getZSize()); - double ratioY = getRatio(selection.getBaseArea().getYSize(), selection.getBaseArea().getXSize(), selection.getBaseArea().getZSize()); - double ratioZ = getRatio(selection.getBaseArea().getZSize(), selection.getBaseArea().getXSize(), selection.getBaseArea().getZSize()); - String maxSide = ""; String minSide = ""; - double maxRatio = 0; - if (ratioX > maxRatio) { - maxSide = "Z"; - minSide = "X"; - maxRatio = ratioX; - } + if (plugin.getConfigManager().isSelectionIgnoreY()) { - if (ratioZ > maxRatio) { - maxSide = "X"; - minSide = "Z"; - maxRatio = ratioZ; - } + double ratioX = getRatio(selection.getBaseArea().getXSize(), selection.getBaseArea().getXSize(), selection.getBaseArea().getZSize()); + double ratioZ = getRatio(selection.getBaseArea().getZSize(), selection.getBaseArea().getXSize(), selection.getBaseArea().getXSize()); + + if (ratioX > maxRatio) { + maxSide = "Z"; + minSide = "X"; + maxRatio = ratioX; + } + + if (ratioZ > maxRatio) { + maxSide = "X"; + minSide = "Z"; + maxRatio = ratioZ; + } - if (ratioY > maxRatio) { - maxSide = "X"; - minSide = "Y"; - maxRatio = ratioY; + } else { + + double ratioX = getRatio(selection.getBaseArea().getXSize(), selection.getBaseArea().getYSize(), selection.getBaseArea().getZSize()); + double ratioY = getRatio(selection.getBaseArea().getYSize(), selection.getBaseArea().getZSize(), selection.getBaseArea().getXSize()); + double ratioZ = getRatio(selection.getBaseArea().getZSize(), selection.getBaseArea().getYSize(), selection.getBaseArea().getXSize()); + + if (ratioX > maxRatio) { + maxSide = "Z"; + minSide = "X"; + maxRatio = ratioX; + } + + if (ratioZ > maxRatio) { + maxSide = "X"; + minSide = "Z"; + maxRatio = ratioZ; + } + + if (ratioY > maxRatio) { + maxSide = "X"; + minSide = "Y"; + maxRatio = ratioY; + } } if (maxRatio > plugin.getConfigManager().getARCRatioValue()) { @@ -164,7 +184,7 @@ private double getRatio(int v1, int v2, int v3) { return ratio; } - private static int getMax(int max) { + private static int getMax(int max) { if (!Residence.getInstance().getConfigManager().isARCSizeEnabled()) return max; int arcmin = Residence.getInstance().getConfigManager().getARCSizeMin(); @@ -318,7 +338,7 @@ public static boolean resize(Residence plugin, Player player, CuboidArea cuboid, if (!Residence.getInstance().getEconomyManager().canAfford(player, cost)) { plugin.msg(player, lm.Economy_NotEnoughMoney); - return false; + return false; } } @@ -374,7 +394,7 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre int maxX = getMax(groupMaxX); int maxY = getMax(group.getMaxY()); int maxZ = getMax(groupMaxZ); - + if (maxX > max && max > 0) maxX = max; if (maxY > max && max > 0) @@ -503,6 +523,8 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre fillMaps(directionMap, maxMap, direction.Top, maxY, cuboid.getYSize()); fillMaps(directionMap, maxMap, direction.Bottom, maxY + 1, cuboid.getYSize()); + CMIDebug.d("?"); + while (true) { if (Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (dir.equals(direction.Top) || dir.equals(direction.Bottom))) { dir = dir.getNext(); diff --git a/src/com/bekvon/bukkit/residence/commands/create.java b/src/com/bekvon/bukkit/residence/commands/create.java index fbca1b452..8d2da3353 100644 --- a/src/com/bekvon/bukkit/residence/commands/create.java +++ b/src/com/bekvon/bukkit/residence/commands/create.java @@ -30,7 +30,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (plugin.getWorldEditTool() == plugin.getConfigManager().getSelectionTool()) { plugin.getSelectionManager().worldEdit(player); } - } + } if (plugin.getSelectionManager().hasPlacedBoth(player)) { diff --git a/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java b/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java index ab325fc5c..2d663641d 100644 --- a/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java @@ -12,81 +12,85 @@ public CMIEconomy() { @Override public double getBalance(Player player) { - CMIUser user = CMI.getInstance().getPlayerManager().getUser(player); - return user == null ? 0D : user.getBalance(); + CMIUser user = CMI.getInstance().getPlayerManager().getUser(player); + return user == null ? 0D : user.getBalance(); } @Override public double getBalance(String playerName) { - CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); - return user == null ? 0D : user.getBalance(); + CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); + return user == null ? 0D : user.getBalance(); } - @Override public boolean canAfford(Player player, double amount) { - if (amount <= 0) return false; + if (amount < 0) + return false; CMIUser user = CMI.getInstance().getPlayerManager().getUser(player); if (user != null && user.getBalance() >= amount) { return true; } return false; } - + @Override public boolean canAfford(String playerName, double amount) { - if (amount <= 0) return false; - CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); - if (user != null && user.getBalance() >= amount) { - return true; - } - return false; + if (amount < 0) + return false; + CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); + if (user != null && user.getBalance() >= amount) { + return true; + } + return false; } @Override public boolean add(String playerName, double amount) { - if (amount <= 0) return false; - CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); - if (user != null) - user.deposit(amount); - return true; + if (amount < 0) + return false; + CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); + if (user != null) + user.deposit(amount); + return true; } @Override public boolean subtract(String playerName, double amount) { - if (amount <= 0) return false; - if (!canAfford(playerName, amount)) { - return false; - } - CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); - if (user != null) - user.withdraw(amount); - return true; + if (amount < 0) + return false; + if (!canAfford(playerName, amount)) { + return false; + } + CMIUser user = CMI.getInstance().getPlayerManager().getUser(playerName); + if (user != null) + user.withdraw(amount); + return true; } @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - if (amount <= 0) return false; - if (!canAfford(playerFrom, amount)) { - return false; - } - if (subtract(playerFrom, amount)) { - if (!add(playerTo, amount)) { - add(playerFrom, amount); - return false; - } - return true; - } - return false; + if (amount <= 0) + return false; + if (!canAfford(playerFrom, amount)) { + return false; + } + if (subtract(playerFrom, amount)) { + if (!add(playerTo, amount)) { + add(playerFrom, amount); + return false; + } + return true; + } + return false; } @Override public String getName() { - return "CMIEconomy"; + return "CMIEconomy"; } @Override public String format(double amount) { - return CMI.getInstance().getEconomyManager().format(amount); + return CMI.getInstance().getEconomyManager().format(amount); } } diff --git a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java index f5e6c2ff4..ef02191c0 100644 --- a/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java +++ b/src/com/bekvon/bukkit/residence/economy/EssentialsEcoAdapter.java @@ -49,7 +49,7 @@ public double getBalance(String playerName) { @Override public boolean canAfford(Player player, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; try { if (Economy.playerExists(player.getUniqueId())) { return Economy.hasEnough(player.getUniqueId(), BigDecimal.valueOf(amount)); @@ -63,7 +63,7 @@ public boolean canAfford(Player player, double amount) { @SuppressWarnings("deprecation") @Override public boolean canAfford(String playerName, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; try { if (Economy.playerExists(playerName)) { return Economy.hasEnough(playerName, amount); @@ -77,7 +77,7 @@ public boolean canAfford(String playerName, double amount) { @SuppressWarnings("deprecation") @Override public boolean add(String playerName, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; if (Economy.playerExists(playerName)) { try { Economy.add(playerName, amount); @@ -94,7 +94,7 @@ public boolean add(String playerName, double amount) { @SuppressWarnings("deprecation") @Override public boolean subtract(String playerName, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; if (Economy.playerExists(playerName)) { try { Economy.subtract(playerName, amount); @@ -111,7 +111,7 @@ public boolean subtract(String playerName, double amount) { @SuppressWarnings("deprecation") @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; try { if (Economy.playerExists(playerFrom) && Economy.playerExists(playerTo) && Economy.hasEnough(playerFrom, amount)) { if (!subtract(playerFrom, amount)) diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java index c4ffa76fa..bf35e207e 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java @@ -33,7 +33,7 @@ public boolean canAfford(Player player, double amount) { @Override public boolean canAfford(String playerName, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; checkExist(playerName); double holdings = this.getBalance(playerName); if (holdings >= amount) { @@ -44,7 +44,7 @@ public boolean canAfford(String playerName, double amount) { @Override public boolean add(String playerName, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; checkExist(playerName); new Accounts().get(playerName).getHoldings().add(amount); return true; @@ -52,7 +52,7 @@ public boolean add(String playerName, double amount) { @Override public boolean subtract(String playerName, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; checkExist(playerName); if (this.canAfford(playerName, amount)) { new Accounts().get(playerName).getHoldings().subtract(amount); @@ -63,7 +63,7 @@ public boolean subtract(String playerName, double amount) { @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; checkExist(playerTo); checkExist(playerFrom); if (this.canAfford(playerFrom, amount)) { diff --git a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java index 3e41a8716..4004fc85f 100644 --- a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java @@ -29,7 +29,7 @@ public boolean canAfford(Player player, double amount) { @Override public boolean canAfford(String playerName, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; if (plugin.getBalance(playerName) >= amount) { return true; } @@ -38,14 +38,14 @@ public boolean canAfford(String playerName, double amount) { @Override public boolean add(String playerName, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; plugin.setBalance(playerName, plugin.getBalance(playerName) + amount); return true; } @Override public boolean subtract(String playerName, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; if (!canAfford(playerName, amount)) { return false; } @@ -55,7 +55,7 @@ public boolean subtract(String playerName, double amount) { @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - if (amount <= 0) return false; + if (amount < 0) return false; if (!canAfford(playerFrom, amount)) { return false; } diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index 6cc3f7852..b7d7b9573 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -112,7 +112,7 @@ public void deposit(CommandSender sender, double amount, boolean resadmin) { if (Residence.getInstance().getConfigManager().BankCapacity > 0 && this.getStoredMoneyD() + amount > Residence.getInstance().getConfigManager().BankCapacity) { amount = Residence.getInstance().getConfigManager().BankCapacity - this.getStoredMoneyD(); Residence.getInstance().msg(sender, lm.Bank_full); - if (amount <= 0) { + if (amount < 0) { return; } } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 05af21153..3fe9bc645 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -131,7 +131,7 @@ public void putForSale(ClaimedResidence res, Player player, int amount, boolean plugin.msg(player, lm.General_NoPermission); return; } - if (amount <= 0) { + if (amount < 0) { plugin.msg(player, lm.Invalid_Amount); return; } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 63679dbe9..cedb6d837 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -55,6 +55,7 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.CMINumber; import net.Zrips.CMILib.Container.PageInfo; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Version.Version; import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; @@ -241,8 +242,8 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String plugin.msg(player, lm.Select_Points); return false; } - - if (plugin.isDisabledWorld(loc1.getWorld()) && plugin.getConfigManager().isDisableResidenceCreation()) { + + if (plugin.isDisabledWorld(loc1.getWorld()) && plugin.getConfigManager().isDisableResidenceCreation()) { plugin.msg(player, lm.General_CantCreate); return false; } @@ -275,7 +276,7 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String if (residences.containsKey(resName.toLowerCase())) { plugin.msg(player, lm.Residence_AlreadyExists, residences.get(resName.toLowerCase()).getResidenceName()); return false; - } + } newRes.BlockSellPrice = group.getSellPerBlock(); @@ -289,7 +290,8 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String if (Residence.getInstance().getConfigManager().isChargeOnCreation() && !newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { double chargeamount = newArea.getCost(group); - if (!plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { + + if (chargeamount > 0 && !plugin.getTransactionManager().chargeEconomyMoney(player, chargeamount)) { // Need to remove area if we can't create residence newRes.removeArea("main"); return false; diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 5607f4896..ea7e5b979 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -87,7 +87,6 @@ public void setBaseLoc2(Location loc2) { } public selectionType getSelectionRestrictions() { - CMIDebug.d("restrictions", inSameResidence()); if (inSameResidence()) { if (plugin.getConfigManager().isSelectionIgnoreYInSubzone()) { if (hasPlacedBoth() && !player.hasPermission(ignoreyinsubzonePermission)) { @@ -96,10 +95,7 @@ public selectionType getSelectionRestrictions() { } } else { if (plugin.getConfigManager().isSelectionIgnoreY()) { - - CMIDebug.d("ignore Y"); if (hasPlacedBoth() && !player.hasPermission(ignoreyPermission)) { - CMIDebug.d("return ignore Y", selectionType.ignoreY); return selectionType.ignoreY; } } @@ -380,7 +376,7 @@ public void updateLocations(Player player, Location loc1, Location loc2, boolean } public void placeLoc1(Player player, Location loc) { - placeLoc1(player, loc, false); + placeLoc1(player, loc, false); } public void placeLoc1(Player player, Location loc, boolean show) { diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index b37d209de..fed866834 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -111,28 +111,32 @@ public boolean canAfford(Player player, double amount) { @SuppressWarnings("deprecation") @Override public boolean canAfford(String playerName, double amount) { - if (amount <= 0) return false; + if (amount < 0) + return false; return economy.has(playerName, amount); } @SuppressWarnings("deprecation") @Override public boolean add(String playerName, double amount) { - if (amount <= 0) return false; + if (amount < 0) + return false; return economy.depositPlayer(playerName, amount).transactionSuccess(); } @SuppressWarnings("deprecation") @Override public boolean subtract(String playerName, double amount) { - if (amount <= 0) return false; + if (amount < 0) + return false; return economy.withdrawPlayer(playerName, amount).transactionSuccess(); } @SuppressWarnings("deprecation") @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - if (amount <= 0) return false; + if (amount < 0) + return false; if (economy.withdrawPlayer(playerFrom, amount).transactionSuccess()) { if (economy.depositPlayer(playerTo, amount).transactionSuccess()) { return true; diff --git a/src/plugin.yml b/src/plugin.yml index 8c7a60d87..52f242515 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.4.1 +version: 5.1.4.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 6e42071da93179193b144d518c8eeb59be05739e Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Feb 2024 17:04:18 +0200 Subject: [PATCH 1090/1142] BigDoors plugin support --- .../bekvon/bukkit/residence/Residence.java | 13 ++++ .../residence/bigDoors/BigDoorsDef.java | 24 +++++++ .../residence/bigDoors/BigDoorsManager.java | 53 ++++++++++++++++ .../residence/bigDoors/BigDoorsModule.java | 49 +++++++++++++++ .../bukkit/residence/commands/auto.java | 2 - .../listeners/ResidenceBlockListener.java | 62 +++++++++++-------- .../slimeFun/SlimeFunResidenceModule.java | 2 +- .../residence/slimeFun/SlimefunManager.java | 2 +- 8 files changed, 177 insertions(+), 30 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/bigDoors/BigDoorsDef.java create mode 100644 src/com/bekvon/bukkit/residence/bigDoors/BigDoorsManager.java create mode 100644 src/com/bekvon/bukkit/residence/bigDoors/BigDoorsModule.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index eb6a1a3da..bf2b1bcf0 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -56,6 +56,7 @@ import com.bekvon.bukkit.residence.api.ResidenceApi; import com.bekvon.bukkit.residence.api.ResidenceInterface; import com.bekvon.bukkit.residence.api.ResidencePlayerInterface; +import com.bekvon.bukkit.residence.bigDoors.BigDoorsManager; import com.bekvon.bukkit.residence.chat.ChatManager; import com.bekvon.bukkit.residence.commands.padd; import com.bekvon.bukkit.residence.containers.Flags; @@ -218,6 +219,7 @@ public class Residence extends JavaPlugin { protected CMITask autosaveBukkitId = null; private boolean SlimeFun = false; + private boolean BigDoors = false; private boolean lwc = false; Metrics metrics = null; @@ -563,6 +565,17 @@ public void onEnable() { } } + BigDoors = Bukkit.getPluginManager().getPlugin("BigDoors") != null; + + if (BigDoors) { + try { + BigDoorsManager.register(this); + } catch (Throwable e) { + BigDoors = false; + e.printStackTrace(); + } + } + this.getConfigManager().copyOverTranslations(); parseHelpEntries(); diff --git a/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsDef.java b/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsDef.java new file mode 100644 index 000000000..bf81e969a --- /dev/null +++ b/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsDef.java @@ -0,0 +1,24 @@ +package com.bekvon.bukkit.residence.bigDoors; + +import nl.pim16aap2.bigDoors.compatibility.IProtectionCompat; +import nl.pim16aap2.bigDoors.compatibility.IProtectionCompatDefinition; + +public class BigDoorsDef implements IProtectionCompatDefinition { + + private final String name; + + public BigDoorsDef(String name) { + this.name = name; + } + + @Override + public Class getClass(String arg0) { + return null; + } + + @Override + public String getName() { + return name; + } + +} diff --git a/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsManager.java b/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsManager.java new file mode 100644 index 000000000..9cc79bac2 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsManager.java @@ -0,0 +1,53 @@ +package com.bekvon.bukkit.residence.bigDoors; + +import java.lang.reflect.Method; + +import com.bekvon.bukkit.residence.Residence; + +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; +import net.Zrips.CMILib.Version.Schedulers.CMITask; +import nl.pim16aap2.bigDoors.BigDoors; +import nl.pim16aap2.bigDoors.compatibility.IProtectionCompat; +import nl.pim16aap2.bigDoors.compatibility.ProtectionCompatManager; + +public class BigDoorsManager { + + // Fail safe to avoid infinite checks + private final static int TRIES = 3; + private static int times = 0; + private static CMITask task = null; + + public static void register(Residence residence) { + task = CMIScheduler.scheduleSyncRepeatingTask(() -> { + ++times; + if (times >= TRIES) { + residence.consoleMessage("&cFailed to initialize BigDoors support"); + task.cancel(); + } + + ProtectionCompatManager manager = BigDoors.get().getProtectionCompatManager(); + + // Wait for protectionManager to load (loaded on first server tick) + if (manager != null) { + try { + + manager.registerProtectionCompatDefinition(new BigDoorsDef("Residence") { + @Override + public Class getClass(String version) { + return BigDoorsModule.class; + } + }); + + Method method = manager.getClass().getDeclaredMethod("addProtectionCompat", IProtectionCompat.class); + method.setAccessible(true); + method.invoke(manager, new BigDoorsModule()); + + residence.consoleMessage("Enabled compatability with BigDoors plugin"); + task.cancel(); + } catch (Throwable e) { + e.printStackTrace(); + } + } + }, 20, 20); + } +} diff --git a/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsModule.java b/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsModule.java new file mode 100644 index 000000000..b0d4af8e9 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsModule.java @@ -0,0 +1,49 @@ +package com.bekvon.bukkit.residence.bigDoors; + +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; +import com.bekvon.bukkit.residence.protection.CuboidArea; + +import nl.pim16aap2.bigDoors.compatibility.IProtectionCompat; + +public class BigDoorsModule implements IProtectionCompat { + + @Override + public boolean canBreakBlock(Player player, Location loc) { + return ResidenceBlockListener.canBreakBlock(player, loc, false); + } + + @Override + public boolean canBreakBlocksBetweenLocs(Player player, Location loc1, Location loc2) { + + CuboidArea area = new CuboidArea(loc1, loc2); + + Vector min = area.getLowVector(); + Vector max = area.getHighVector(); + + for (int xPos = min.getBlockX(); xPos <= max.getBlockX(); xPos++) { + for (int yPos = min.getBlockY(); yPos <= max.getBlockY(); yPos++) { + for (int zPos = min.getBlockZ(); zPos <= max.getBlockZ(); zPos++) { + if (!ResidenceBlockListener.canBreakBlock(player, new Location(loc1.getWorld(), xPos, yPos, zPos), false)) { + return false; + } + } + } + } + + return true; + } + + @Override + public String getName() { + return "Residence"; + } + + @Override + public boolean success() { + return true; + } +} diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 71e696a2e..0c38b0c5a 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -523,8 +523,6 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre fillMaps(directionMap, maxMap, direction.Top, maxY, cuboid.getYSize()); fillMaps(directionMap, maxMap, direction.Bottom, maxY + 1, cuboid.getYSize()); - CMIDebug.d("?"); - while (true) { if (Residence.getInstance().getConfigManager().isSelectionIgnoreY() && (dir.equals(direction.Top) || dir.equals(direction.Bottom))) { dir = dir.getNext(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 3a3ca08b4..1926aab27 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -265,32 +265,25 @@ public void onBlockBreak(BlockBreakEvent event) { event.setCancelled(true); } + @Deprecated public static boolean canBreakBlock(Player player, Block block, boolean inform) { + return canBreakBlock(player, block.getLocation(), inform); + } + + public static boolean canBreakBlock(Player player, Location loc, boolean inform) { if (player == null) return true; // disabling event on world - if (Residence.getInstance().isDisabledWorldListener(block.getWorld())) + if (Residence.getInstance().isDisabledWorldListener(loc.getWorld())) return true; if (Residence.getInstance().isResAdminOn(player)) { return true; } - Material mat = block.getType(); - String world = block.getWorld().getName(); - - ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); - PermissionGroup group = resPlayer.getGroup(); - if (Residence.getInstance().getItemManager().isIgnored(mat, group, world)) { - return true; - } - - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(block.getLocation()); - - if (res != null && res.getItemIgnoreList().isListed(mat)) - return true; + ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(loc); if (Residence.getInstance().getConfigManager().enabledRentSystem() && res != null) { if (Residence.getInstance().getConfigManager().preventRentModify() && res.isRented()) { @@ -300,7 +293,7 @@ public static boolean canBreakBlock(Player player, Block block, boolean inform) } } - FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(block.getLocation(), player); + FlagPermissions perms = Residence.getInstance().getPermsByLocForPlayer(loc, player); boolean hasdestroy = perms.playerHas(player, Flags.destroy, perms.playerHas(player, Flags.build, true)); @@ -309,6 +302,21 @@ public static boolean canBreakBlock(Player player, Block block, boolean inform) hasdestroy = true; } } + Material mat = null; + + if (!hasdestroy) { + mat = loc.getBlock().getType(); + String world = loc.getWorld().getName(); + + ResidencePlayer resPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); + PermissionGroup group = resPlayer.getGroup(); + if (Residence.getInstance().getItemManager().isIgnored(mat, group, world)) { + return true; + } + if (res != null && res.getItemIgnoreList().isListed(mat)) + return true; + } + if (!hasdestroy && !ResPerm.bypass_destroy.hasPermission(player, 10000L)) { if (inform) Residence.getInstance().msg(player, lm.Flag_Deny, Flags.destroy); @@ -677,21 +685,23 @@ public static void resize(Residence plugin, Player player, CuboidArea cuboid, bo @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { - if (!canPlaceBlock(event.getPlayer(), event.getBlock(), true)) { - event.setCancelled(true); - if (Version.isCurrentEqualOrHigher(Version.v1_17_R1) && event.getBlock().getType() == Material.POWDER_SNOW) { + if (canPlaceBlock(event.getPlayer(), event.getBlock(), true)) + return; - BlockData data = ResidencePlayerListener1_17.powder_snow.remove(event.getBlock().getLocation().toString()); - if (data != null) { + event.setCancelled(true); - Block blockUnder = event.getBlock().getLocation().clone().add(0, -1, 0).getBlock(); + if (!Version.isCurrentEqualOrHigher(Version.v1_17_R1) || event.getBlock().getType() != Material.POWDER_SNOW) + return; - if (data.getMaterial().equals(blockUnder.getType())) { - blockUnder.setBlockData(data); - } - } - } + BlockData data = ResidencePlayerListener1_17.powder_snow.remove(event.getBlock().getLocation().toString()); + if (data == null) + return; + + Block blockUnder = event.getBlock().getLocation().clone().add(0, -1, 0).getBlock(); + + if (data.getMaterial().equals(blockUnder.getType())) { + blockUnder.setBlockData(data); } } diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index 6878e07f6..4b9dcad30 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -53,7 +53,7 @@ public boolean hasPermission(OfflinePlayer op, Location loc, Interaction action) Player player = Bukkit.getPlayer(op.getUniqueId()); if (player == null) return false; - return ResidenceBlockListener.canBreakBlock(player, loc.getBlock(), true); + return ResidenceBlockListener.canBreakBlock(player, loc, true); default: break; } diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java index de4109d70..ff8cdb988 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java @@ -18,7 +18,7 @@ public class SlimefunManager { // Fail safe to avoid infinite checks - private final static int TRIES = 60; + private final static int TRIES = 3; private static int times = 0; private static CMITask task = null; From 124e135edfd43cd1e999ba54ca3415c3cbb6fd1f Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Feb 2024 17:29:48 +0200 Subject: [PATCH 1091/1142] decorative pot should be included into container flag group as of 1.20.4 --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 2 ++ .../bekvon/bukkit/residence/protection/FlagPermissions.java | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index e32df6ccf..e07336e22 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -92,6 +92,7 @@ import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; @@ -1020,6 +1021,7 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { default: break; } + CMIMaterial cmat = CMIMaterial.get(mat); if (cmat != null) { diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 7de3e4b2a..987542f5f 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -235,6 +235,9 @@ public static void initValidFlags() { if (one.isShulkerBox()) matUseFlagList.put(one.getMaterial(), Flags.container); + if (one.equals(CMIMaterial.DECORATED_POT)) + matUseFlagList.put(one.getMaterial(), Flags.container); + if (one.isButton()) matUseFlagList.put(one.getMaterial(), Flags.button); From a0e678fd11e07b39b04c9f67b12e484f9794a44e Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Feb 2024 17:33:35 +0200 Subject: [PATCH 1092/1142] when ignoreY is enabled we should skip checking for Y limit by required size --- src/com/bekvon/bukkit/residence/commands/auto.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 0c38b0c5a..4e2d59b3b 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -397,7 +397,7 @@ public static boolean optimizedResize(Residence plugin, Player player, CuboidAre if (maxX > max && max > 0) maxX = max; - if (maxY > max && max > 0) + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && maxY > max && max > 0) maxY = max; if (maxZ > max && max > 0) maxZ = max; From 4e78dac0fb4f98e1650015bee9dc70a3121db607 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Feb 2024 18:08:16 +0200 Subject: [PATCH 1093/1142] Fix for day/night flags --- .../listeners/ResidencePlayerListener.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index e07336e22..48f29b57f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1021,7 +1021,6 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { default: break; } - CMIMaterial cmat = CMIMaterial.get(mat); if (cmat != null) { @@ -1944,6 +1943,7 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerTeleport(PlayerTeleportEvent event) { + // disabling event on world if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) return; @@ -1972,6 +1972,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { // return; // } // } else + if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.NETHER_PORTAL || event .getCause() == TeleportCause.PLUGIN) { if (res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse) && !res.isOwner(player) @@ -2117,6 +2118,7 @@ public void onResidenceChange(ResidenceChangedEvent event) { } private void checkSpecialFlags(Player player, ClaimedResidence newRes, ClaimedResidence oldRes) { + if (newRes == null && oldRes != null) { if (Flags.night.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) || Flags.day.isGlobalyEnabled() && oldRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) player.resetPlayerTime(); @@ -2154,18 +2156,22 @@ else if (oldRes.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue fly(player, false); } + boolean updated = false; if (Flags.day.isGlobalyEnabled()) { - if (newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + if (newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) { + updated = true; player.setPlayerTime(6000L, false); - else if (oldRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) + } else if (oldRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.day, FlagCombo.OnlyTrue)) { player.resetPlayerTime(); + } } if (Flags.night.isGlobalyEnabled()) { - if (newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + if (newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) { player.setPlayerTime(14000L, false); - else if (oldRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) + } else if (!updated && oldRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue) && !newRes.getPermissions().has(Flags.night, FlagCombo.OnlyTrue)) { player.resetPlayerTime(); + } } if (Flags.wspeed1.isGlobalyEnabled()) { From 75e58548489884ffbee09e5353d25fe0153e8d8b Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 28 Feb 2024 18:21:59 +0200 Subject: [PATCH 1094/1142] Decorative port protection from projectiles --- .../ResidencePlayerListener1_20.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java index 0098a51ff..1228af03c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java @@ -1,9 +1,11 @@ package com.bekvon.bukkit.residence.listeners; import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.player.PlayerSignOpenEvent; import com.bekvon.bukkit.residence.Residence; @@ -49,4 +51,29 @@ public void onSignInteract(PlayerSignOpenEvent event) { plugin.msg(player, lm.Flag_Deny, Flags.build); } + + // For objects like decorative pots + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPotBreak(EntityChangeBlockEvent event) { + + // disabling event on world + if (plugin.isDisabledWorldListener(event.getBlock().getWorld())) + return; + + if (!(event.getEntity() instanceof Projectile)) + return; + + Projectile projectile = (Projectile) event.getEntity(); + + Player player = null; + + if (projectile.getShooter() instanceof Player) + player = (Player) projectile.getShooter(); + + if (player != null && player.hasMetadata("NPC")) + return; + + if (!ResidenceBlockListener.canBreakBlock(player, event.getBlock().getLocation(), true)) + event.setCancelled(true); + } } From fcb2da71a98bbcd0986d8c3d255cc9e185513623 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 7 Mar 2024 11:33:06 +0200 Subject: [PATCH 1095/1142] Residence expansion to world ceiling fix --- .../bukkit/residence/commands/expand.java | 1 + .../bukkit/residence/commands/select.java | 5 +- .../residence/selection/SelectionManager.java | 90 ++++++++----------- src/plugin.yml | 2 +- 4 files changed, 40 insertions(+), 58 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/expand.java b/src/com/bekvon/bukkit/residence/commands/expand.java index 2c2a393bd..424bc39bc 100644 --- a/src/com/bekvon/bukkit/residence/commands/expand.java +++ b/src/com/bekvon/bukkit/residence/commands/expand.java @@ -15,6 +15,7 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; public class expand implements cmd { diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index 1b88f1f4d..f0a07394b 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -9,9 +9,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Logs.CMIDebug; - import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -23,6 +20,8 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.CuboidArea; +import net.Zrips.CMILib.FileHandler.ConfigReader; + public class select implements cmd { @Override diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index ea7e5b979..0c235c84d 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -35,7 +35,6 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Effects.CMIEffect; import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; import net.Zrips.CMILib.Version.Schedulers.CMITask; @@ -376,7 +375,7 @@ public void updateLocations(Player player, Location loc1, Location loc2, boolean } public void placeLoc1(Player player, Location loc) { - placeLoc1(player, loc, false); + placeLoc1(player, loc, false); } public void placeLoc1(Player player, Location loc, boolean show) { @@ -928,7 +927,12 @@ public void selectBySize(Player player, int xsize, int ysize, int zsize) { showSelectionInfo(player); } + @Deprecated public void modify(Player player, boolean shift, double amount) { + modify(player, shift, (int) amount); + } + + public void modify(Player player, boolean shift, int amount) { if (!hasPlacedBoth(player)) { plugin.msg(player, lm.Select_Points); return; @@ -949,25 +953,21 @@ public void modify(Player player, boolean shift, double amount) { switch (d) { case DOWN: - double oldy = area.getLowVector().getBlockY(); - oldy = oldy - amount; + int oldy = area.getLowVector().getBlockY() - amount; + if (oldy < MIN_HEIGHT) { plugin.msg(player, lm.Select_TooLow); oldy = MIN_HEIGHT; } area.getLowVector().setY(oldy); if (shift) { - double oldy2 = area.getHighVector().getBlockY(); - oldy2 = oldy2 - amount; - area.getHighVector().setY(oldy2); + area.getHighVector().setY(area.getHighVector().getBlockY() - amount); plugin.msg(player, lm.Shifting_Down, amount); } else plugin.msg(player, lm.Expanding_Down, amount); break; case MINUSX: - double oldx = area.getLowVector().getBlockX(); - oldx = oldx - amount; - area.getLowVector().setX(oldx); + area.getLowVector().setX(area.getLowVector().getBlockX() - amount); if (shift) { double oldx2 = area.getHighVector().getBlockX(); oldx2 = oldx2 - amount; @@ -977,53 +977,38 @@ public void modify(Player player, boolean shift, double amount) { plugin.msg(player, lm.Expanding_West, amount); break; case MINUSZ: - double oldz = area.getLowVector().getBlockZ(); - oldz = oldz - amount; - area.getLowVector().setZ(oldz); + area.getLowVector().setZ(area.getLowVector().getBlockZ() - amount); if (shift) { - double oldz2 = area.getHighVector().getBlockZ(); - oldz2 = oldz2 - amount; - area.getHighVector().setZ(oldz2); + area.getHighVector().setZ(area.getHighVector().getBlockZ() - amount); plugin.msg(player, lm.Shifting_North, amount); } else plugin.msg(player, lm.Expanding_North, amount); break; case PLUSX: - oldx = area.getHighVector().getBlockX(); - oldx = oldx + amount; - area.getHighVector().setX(oldx); + area.getHighVector().setX(area.getHighVector().getBlockX() + amount); if (shift) { - double oldx2 = area.getLowVector().getBlockX(); - oldx2 = oldx2 + amount; - area.getLowVector().setX(oldx2); + area.getLowVector().setX(area.getLowVector().getBlockX() + amount); plugin.msg(player, lm.Shifting_East, amount); } else plugin.msg(player, lm.Expanding_East, amount); break; case PLUSZ: - oldz = area.getHighVector().getBlockZ(); - oldz = oldz + amount; - area.getHighVector().setZ(oldz); + area.getHighVector().setZ(area.getHighVector().getBlockZ() + amount); if (shift) { - double oldz2 = area.getLowVector().getBlockZ(); - oldz2 = oldz2 + amount; - area.getLowVector().setZ(oldz2); + area.getLowVector().setZ(area.getLowVector().getBlockZ() + amount); plugin.msg(player, lm.Shifting_South, amount); } else plugin.msg(player, lm.Expanding_South, amount); break; case UP: - oldy = area.getHighVector().getBlockY(); - oldy = oldy + amount; - if (oldy > getMaxWorldHeight(player.getLocation().getWorld()) - 1) { + oldy = area.getHighVector().getBlockY() + amount; + if (oldy > getMaxWorldHeight(player.getLocation().getWorld())) { plugin.msg(player, lm.Select_TooHigh); - oldy = getMaxWorldHeight(player.getLocation().getWorld()) - 1; + oldy = getMaxWorldHeight(player.getLocation().getWorld()); } area.getHighVector().setY(oldy); if (shift) { - double oldy2 = area.getLowVector().getBlockY(); - oldy2 = oldy2 + amount; - area.getLowVector().setY(oldy2); + area.getLowVector().setY(area.getLowVector().getBlockY() + amount); plugin.msg(player, lm.Shifting_Up, amount); } else plugin.msg(player, lm.Expanding_Up, amount); @@ -1034,11 +1019,17 @@ public void modify(Player player, boolean shift, double amount) { updateLocations(player, area.getHighLocation(), area.getLowLocation(), true); } + @Deprecated public boolean contract(Player player, double amount) { return contract(player, amount, false); } - public boolean contract(Player player, double amount, @SuppressWarnings("unused") boolean resadmin) { + @Deprecated + public boolean contract(Player player, double amount, @SuppressWarnings("unused") @Deprecated boolean resadmin) { + return contract(player, (int) amount); + } + + public boolean contract(Player player, int amount) { if (!hasPlacedBoth(player)) { plugin.msg(player, lm.Select_Points); return false; @@ -1053,37 +1044,28 @@ public boolean contract(Player player, double amount, @SuppressWarnings("unused" CuboidArea area = this.getSelectionCuboid(player); switch (d) { case UP: - double oldy = area.getHighVector().getBlockY(); - oldy = oldy - amount; - if (oldy > getMaxWorldHeight(player.getLocation().getWorld()) - 1) { + double oldy = area.getHighVector().getBlockY() - amount; + if (oldy > getMaxWorldHeight(player.getLocation().getWorld())) { plugin.msg(player, lm.Select_TooHigh); - oldy = getMaxWorldHeight(player.getLocation().getWorld()) - 1; + oldy = getMaxWorldHeight(player.getLocation().getWorld()); } area.getHighVector().setY(oldy); plugin.msg(player, lm.Contracting_Down, amount); break; case PLUSX: - double oldx = area.getHighVector().getBlockX(); - oldx = oldx - amount; - area.getHighVector().setX(oldx); + area.getHighVector().setX(area.getHighVector().getBlockX() - amount); plugin.msg(player, lm.Contracting_West, amount); break; case PLUSZ: - double oldz = area.getHighVector().getBlockZ(); - oldz = oldz - amount; - area.getHighVector().setZ(oldz); + area.getHighVector().setZ(area.getHighVector().getBlockZ() - amount); plugin.msg(player, lm.Contracting_North, amount); break; case MINUSX: - oldx = area.getLowVector().getBlockX(); - oldx = oldx + amount; - area.getLowVector().setX(oldx); + area.getLowVector().setX(area.getLowVector().getBlockX() + amount); plugin.msg(player, lm.Contracting_East, amount); break; case MINUSZ: - oldz = area.getLowVector().getBlockZ(); - oldz = oldz + amount; - area.getLowVector().setZ(oldz); + area.getLowVector().setZ(area.getLowVector().getBlockZ() + amount); plugin.msg(player, lm.Contracting_South, amount); break; case DOWN: @@ -1093,8 +1075,8 @@ public boolean contract(Player player, double amount, @SuppressWarnings("unused" MIN_HEIGHT = CMIWorld.getMinHeight(area.getWorld()); } catch (Throwable e) { } - oldy = area.getLowVector().getBlockY(); - oldy = oldy + amount; + oldy = area.getLowVector().getBlockY() + amount; + if (oldy < MIN_HEIGHT) { plugin.msg(player, lm.Select_TooLow); oldy = MIN_HEIGHT; diff --git a/src/plugin.yml b/src/plugin.yml index 52f242515..e82fb03e9 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.4.2 +version: 5.1.4.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From cc62d59e2d97909202897037435b61e3ca9ec2e0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 3 May 2024 17:22:09 +0300 Subject: [PATCH 1096/1142] 1.20.5+ support --- .../residence/ResidenceCommandListener.java | 5 + .../bukkit/residence/allNms/v1_9Events.java | 145 ++++++++++-------- .../bukkit/residence/gui/setFlagInfo.java | 6 +- .../listeners/ResidenceEntityListener.java | 43 +++--- .../listeners/ResidencePlayerListener.java | 8 +- 5 files changed, 118 insertions(+), 89 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index 1e9a0a787..ef60df16f 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -316,6 +316,8 @@ public void sendUsage(CommandSender sender, String command) { } private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender, Command command) { + + if (plugin.getHelpPages() == null) return false; @@ -333,9 +335,12 @@ private boolean commandHelp(String[] args, boolean resadmin, CommandSender sende if (command.getName().equalsIgnoreCase("res")) resadmin = false; + CMIDebug.d("on commands ", 1, helppath); if (plugin.getHelpPages().containesEntry(helppath)) { + CMIDebug.d("on commands ", 0); plugin.getHelpPages().printHelp(sender, page, helppath, resadmin); } + CMIDebug.d("on commands ", 2); return true; } diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index 67050a217..ced72be24 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -1,5 +1,6 @@ package com.bekvon.bukkit.residence.allNms; +import java.lang.reflect.Method; import java.util.Iterator; import org.bukkit.entity.Entity; @@ -18,74 +19,98 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import net.Zrips.CMILib.Version.Version; + public class v1_9Events implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { - ProjectileHitEvent ev = event; - ThrownPotion potion = (ThrownPotion) ev.getEntity(); - - // disabling event on world - if (Residence.getInstance().isDisabledWorldListener(potion.getWorld())) - return; - if (event.isCancelled()) - return; - - boolean harmfull = false; - mein: for (PotionEffect one : potion.getEffects()) { - for (String oneHarm : Residence.getInstance().getConfigManager().getNegativePotionEffects()) { - if (oneHarm.equalsIgnoreCase(one.getType().getName())) { - harmfull = true; - break mein; - } - } - } - if (!harmfull) - return; - - Entity ent = potion; - boolean srcpvp = Residence.getInstance().getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); - if (!srcpvp) - event.setCancelled(true); + ProjectileHitEvent ev = event; + ThrownPotion potion = (ThrownPotion) ev.getEntity(); + + // disabling event on world + if (Residence.getInstance().isDisabledWorldListener(potion.getWorld())) + return; + if (event.isCancelled()) + return; + + boolean harmfull = false; + mein: for (PotionEffect one : potion.getEffects()) { + for (String oneHarm : Residence.getInstance().getConfigManager().getNegativePotionEffects()) { + if (oneHarm.equalsIgnoreCase(one.getType().getName())) { + harmfull = true; + break mein; + } + } + } + if (!harmfull) + return; + + Entity ent = potion; + boolean srcpvp = Residence.getInstance().getPermsByLoc(ent.getLocation()).has(Flags.pvp, FlagCombo.TrueOrNone); + if (!srcpvp) + event.setCancelled(true); } + Method basePotionData = null; + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { - // disabling event on world - if (Residence.getInstance().isDisabledWorldListener(event.getEntity().getWorld())) - return; - - boolean harmfull = false; - - // Temporally fail safe to avoid console spam for getting base potion data until fix roles out - try { - for (String oneHarm : Residence.getInstance().getConfigManager().getNegativeLingeringPotionEffects()) { - if (event.getEntity().getBasePotionData().getType().name().equalsIgnoreCase(oneHarm)) { - harmfull = true; - break; - } - } - } catch (Exception e) { - return; - } - - if (!harmfull) - return; - - Entity ent = event.getEntity(); - boolean srcpvp = Residence.getInstance().getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); - Iterator it = event.getAffectedEntities().iterator(); - while (it.hasNext()) { - LivingEntity target = it.next(); - if (!(target instanceof Player)) - continue; - Boolean tgtpvp = Residence.getInstance().getPermsByLoc(target.getLocation()).has(Flags.pvp, true); - if (!srcpvp || !tgtpvp) { - event.getAffectedEntities().remove(target); - event.getEntity().remove(); - break; - } - } + // disabling event on world + if (Residence.getInstance().isDisabledWorldListener(event.getEntity().getWorld())) + return; + + boolean harmfull = false; + + // Temporally fail safe to avoid console spam for getting base potion data until fix roles out + try { + + if (Version.isCurrentEqualOrHigher(Version.v1_20_R4)) { + for (String oneHarm : Residence.getInstance().getConfigManager().getNegativeLingeringPotionEffects()) { + if (!event.getEntity().getBasePotionType().name().equalsIgnoreCase(oneHarm)) + continue; + harmfull = true; + break; + } + } else { + try { + if (basePotionData == null) { + Method tempMethod = event.getEntity().getClass().getMethod("getBasePotionData"); + basePotionData = tempMethod.invoke(event.getEntity()).getClass().getMethod("getType"); + } + + for (String oneHarm : Residence.getInstance().getConfigManager().getNegativeLingeringPotionEffects()) { + org.bukkit.potion.PotionType type = (org.bukkit.potion.PotionType) basePotionData.invoke(event.getEntity()); + if (type.name().equalsIgnoreCase(oneHarm)) { + harmfull = true; + break; + } + } + } catch (Throwable e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + return; + } + + if (!harmfull) + return; + + Entity ent = event.getEntity(); + boolean srcpvp = Residence.getInstance().getPermsByLoc(ent.getLocation()).has(Flags.pvp, true); + Iterator it = event.getAffectedEntities().iterator(); + while (it.hasNext()) { + LivingEntity target = it.next(); + if (!(target instanceof Player)) + continue; + Boolean tgtpvp = Residence.getInstance().getPermsByLoc(target.getLocation()).has(Flags.pvp, true); + if (!srcpvp || !tgtpvp) { + event.getAffectedEntities().remove(target); + event.getEntity().remove(); + break; + } + } } } diff --git a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java index fa64cfb24..de4849354 100644 --- a/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java +++ b/src/com/bekvon/bukkit/residence/gui/setFlagInfo.java @@ -10,7 +10,6 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -24,6 +23,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; import com.bekvon.bukkit.residence.protection.ResidencePermissions; +import net.Zrips.CMILib.Enchants.CMIEnchantEnum; import net.Zrips.CMILib.GUI.CMIGuiButton; import net.Zrips.CMILib.GUI.GUIManager.GUIClickType; @@ -323,11 +323,11 @@ else if (fp.has(flagName, FlagCombo.OnlyFalse)) if (state == FlagState.TRUE) { ItemMeta im = miscInfo.getItemMeta(); if (im != null) { - im.addEnchant(Enchantment.LUCK, 1, true); + im.addEnchant(CMIEnchantEnum.LUCK_OF_THE_SEA.getEnchantment(), 1, true); miscInfo.setItemMeta(im); } } else - miscInfo.removeEnchantment(Enchantment.LUCK); + miscInfo.removeEnchantment(CMIEnchantEnum.LUCK_OF_THE_SEA.getEnchantment()); Flags flag = Flags.getFlag(flagName); if (flag != null) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 6921e5d42..d0c300d6f 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -46,7 +46,6 @@ import org.bukkit.event.entity.PlayerLeashEntityEvent; import org.bukkit.event.entity.PotionSplashEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; -import org.bukkit.event.entity.SpawnerSpawnEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; @@ -476,7 +475,7 @@ public void onFenceLeashInteract(PlayerInteractEntityEvent event) { Entity entity = event.getRightClicked(); - if (entity.getType() != EntityType.LEASH_HITCH) + if (CMIEntityType.get(entity.getType()) != CMIEntityType.LEASH_KNOT) return; if (plugin.isResAdminOn(player)) @@ -540,11 +539,6 @@ public void onPhantomSpawn(CreatureSpawnEvent event) { } } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onItemSpawnEvent(SpawnerSpawnEvent event) { - - } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onCreatureSpawn(CreatureSpawnEvent event) { // disabling event on world @@ -670,7 +664,7 @@ public void onProjectileLaunch(ProjectileLaunchEvent event) { if (plugin.isDisabledWorldListener(event.getEntity().getWorld())) return; - if (event.getEntityType().equals(EntityType.THROWN_EXP_BOTTLE)) + if (CMIEntityType.get(event.getEntity()) == CMIEntityType.EXPERIENCE_BOTTLE) return; if (event.getEntity().getShooter() instanceof Player) { @@ -737,8 +731,8 @@ public void onHangingBreakEvent(HangingBreakEvent event) { return; if (plugin.isDisabledWorldListener(ent.getWorld())) return; - - CMIEntityType type = CMIEntityType.getByType(event.getEntity().getType()); + + CMIEntityType type = CMIEntityType.get(event.getEntity().getType()); if (!type.equals(CMIEntityType.ITEM_FRAME) && !type.equals(CMIEntityType.GLOW_ITEM_FRAME)) return; @@ -798,7 +792,7 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { EntityType entity = event.getEntityType(); FlagPermissions perms = plugin.getPermsByLoc(ent.getLocation()); - switch (entity) { + switch (CMIEntityType.get(entity)) { case CREEPER: // Disabling listener if flag disabled globally @@ -822,8 +816,8 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { } } break; - case PRIMED_TNT: - case MINECART_TNT: + case TNT: + case TNT_MINECART: // Disabling listener if flag disabled globally if (!Flags.tnt.isGlobalyEnabled()) @@ -895,7 +889,7 @@ public void onEntityExplode(EntityExplodeEvent event) { FlagPermissions world = plugin.getWorldFlags().getPerms(loc.getWorld().getName()); if (ent != null) { - switch (event.getEntityType()) { + switch (CMIEntityType.get(event.getEntityType())) { case CREEPER: // Disabling listener if flag disabled globally if (!Flags.creeper.isGlobalyEnabled()) @@ -912,8 +906,8 @@ public void onEntityExplode(EntityExplodeEvent event) { } else cancel = true; break; - case PRIMED_TNT: - case MINECART_TNT: + case TNT: + case TNT_MINECART: // Disabling listener if flag disabled globally if (!Flags.tnt.isGlobalyEnabled()) break; @@ -974,7 +968,7 @@ public void onEntityExplode(EntityExplodeEvent event) { FlagPermissions blockperms = plugin.getPermsByLoc(block.getLocation()); if (ent != null) { - switch (event.getEntityType()) { + switch (CMIEntityType.get(event.getEntityType())) { case CREEPER: // Disabling listener if flag disabled globally if (!Flags.creeper.isGlobalyEnabled()) @@ -991,8 +985,8 @@ public void onEntityExplode(EntityExplodeEvent event) { } else preserve.add(block); continue; - case PRIMED_TNT: - case MINECART_TNT: + case TNT: + case TNT_MINECART: // Disabling listener if flag disabled globally if (!Flags.tnt.isGlobalyEnabled()) continue; @@ -1359,12 +1353,15 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (event.isCancelled()) return; - if (event.getEntityType() != EntityType.ENDER_CRYSTAL && !CMIEntity.isItemFrame(event.getEntity()) && !Utils.isArmorStandEntity(event.getEntityType())) + if (CMIEntityType.get(event.getEntityType()) != CMIEntityType.ENDER_CRYSTAL && !CMIEntity.isItemFrame(event.getEntity()) && !Utils.isArmorStandEntity(event.getEntityType())) return; Entity dmgr = event.getDamager(); Player player = null; + + CMIEntityType type = CMIEntityType.get(event.getEntityType()); + if (dmgr instanceof Player) { player = (Player) event.getDamager(); } else if (dmgr instanceof Projectile && ((Projectile) dmgr).getShooter() instanceof Player) { @@ -1375,7 +1372,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (perm.has(Flags.destroy, FlagCombo.OnlyFalse)) event.setCancelled(true); return; - } else if (dmgr.getType() == EntityType.PRIMED_TNT || dmgr.getType() == EntityType.MINECART_TNT) { + } else if (type == CMIEntityType.TNT || type == CMIEntityType.TNT_MINECART) { // Disabling listener if flag disabled globally if (Flags.explode.isGlobalyEnabled()) { @@ -1385,7 +1382,7 @@ public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { return; } } - } else if (dmgr.getType() == EntityType.WITHER_SKULL || dmgr.getType() == EntityType.WITHER) { + } else if (type == CMIEntityType.WITHER_SKULL || type == CMIEntityType.WITHER) { // Disabling listener if flag disabled globally if (Flags.witherdamage.isGlobalyEnabled()) { @@ -1455,7 +1452,7 @@ public void onEntityShootBowEvent(EntityShootBowEvent event) { if (!(event.getEntity() instanceof Player)) return; - if (event.getProjectile().getType() == EntityType.FIREWORK) + if (CMIEntityType.get(event.getProjectile()) == CMIEntityType.FIREWORK_ROCKET) event.getProjectile().setMetadata(CrossbowShooter, new FixedMetadataValue(plugin, event.getEntity().getUniqueId())); } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 48f29b57f..19357cb4b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -90,9 +90,9 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Entities.CMIEntity; +import net.Zrips.CMILib.Entities.CMIEntityType; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; @@ -1668,7 +1668,9 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) Entity ent = event.getRightClicked(); - if (ent.getType() != EntityType.MINECART_CHEST && ent.getType() != EntityType.MINECART_HOPPER) + CMIEntityType type = CMIEntityType.get(ent); + + if (type != CMIEntityType.CHEST_MINECART && type != CMIEntityType.HOPPER_MINECART) return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); @@ -1953,7 +1955,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { return; Location loc = event.getTo(); - handleNewLocation(player, loc, false); + boolean handled = handleNewLocation(player, loc, false); if (plugin.isResAdminOn(player)) { return; } From 37be0a22f176daf2995d4600a1f01dc538bf6a7c Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 7 May 2024 15:31:01 +0300 Subject: [PATCH 1097/1142] Residence rename event cancellation and option to change name --- .../residence/event/ResidenceRenameEvent.java | 22 +++++++++++-------- .../protection/ResidenceManager.java | 6 +++++ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/event/ResidenceRenameEvent.java b/src/com/bekvon/bukkit/residence/event/ResidenceRenameEvent.java index ac19f7607..8aaf7bb53 100644 --- a/src/com/bekvon/bukkit/residence/event/ResidenceRenameEvent.java +++ b/src/com/bekvon/bukkit/residence/event/ResidenceRenameEvent.java @@ -2,28 +2,32 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; -public class ResidenceRenameEvent extends ResidenceEvent { - protected String NewResName; +public class ResidenceRenameEvent extends CancellableResidenceEvent { + private String NewResName; protected String OldResName; protected ClaimedResidence res; public ResidenceRenameEvent(ClaimedResidence resref, String NewName, String OldName) { - super("RESIDENCE_RENAME", resref); - NewResName = NewName; - OldResName = OldName; - res = resref; + super("RESIDENCE_RENAME", resref); + NewResName = NewName; + OldResName = OldName; + res = resref; } public String getNewResidenceName() { - return NewResName; + return NewResName; + } + + public void setNewResidenceName(String newResName) { + NewResName = newResName; } public String getOldResidenceName() { - return OldResName; + return OldResName; } @Override public ClaimedResidence getResidence() { - return res; + return res; } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index cedb6d837..a8958a218 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -1346,6 +1346,12 @@ public boolean renameResidence(Player player, String oldName, String newName, bo ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); plugin.getServ().getPluginManager().callEvent(resevent); + + if (resevent.isCancelled()) + return false; + + newName = resevent.getNewResidenceName(); + removeChunkList(oldName); res.setName(newName); From 2f8bb41218eb7e565dc61211520a692779dc25fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=98=AD=E8=98=AD=E9=9C=B2?= <51469621+flandretw@users.noreply.github.com> Date: Sat, 11 May 2024 20:34:43 +0800 Subject: [PATCH 1098/1142] Update ChineseTW.yml --- src/Language/ChineseTW.yml | 144 ++++++++++++++++++++----------------- 1 file changed, 77 insertions(+), 67 deletions(-) diff --git a/src/Language/ChineseTW.yml b/src/Language/ChineseTW.yml index 1c5a2ad89..83fabc50d 100644 --- a/src/Language/ChineseTW.yml +++ b/src/Language/ChineseTW.yml @@ -1,6 +1,6 @@ -# ç¹é«”中文由 flandretw 翻譯,你å¯ä»¥åœ¨ GitHubã€Crowdinã€Discord 甚至是 Youtube 上找到我。 -# 注æ„如果你想修改此文件,強烈建議你複製一份這個檔案並修改它。 -# 此文件將由 Residence 自動更新。當檢查到新版本時,你的變更將被覆蓋。 +# ç¹é«”中文由 flandretw 翻譯,你å¯ä»¥åœ¨ GitHubã€Crowdinã€Discord 甚至是 YouTube 上找到我。 +# 注æ„如果你想修改此檔案,強烈建議你先複製一份å†ä¿®æ”¹å®ƒã€‚ +# 此檔案將由 Residence 自動更新。當檢查到新版本時,你的變更將被覆蓋。 # 當æ“有此檔案的副本時,變更 Residence config.yml 下的 Language: 為 ChineseTW # 或是你所修改éŽå¾Œçš„檔案å稱。 @@ -19,10 +19,11 @@ Language: Boolean: '&c無效的值,值必須為 &6true(t)&c或 &6false(f)&c。' Area: '&c無效的å€åŸŸâ€¦â€¦' Group: '&c無效的權é™çµ„……' + Location: '&c無效的ä½ç½®â€¦â€¦' MessageType: '&c訊æ¯é¡žåž‹å¿…須為 enter(進入)ã€leave(離開)或 remove(移除)。' Flag: '&c無效的權é™â€¦â€¦' FlagType: - Fail: '&c無效的權é™â€¦â€¦ 這個權é™åªèƒ½ç”¨åœ¨ %1。' + Fail: '&c無效的權é™â€¦â€¦æ­¤æ¬Šé™åªèƒ½ç”¨åœ¨ %1。' Player: Player Residence: Residence FlagState: '&c無效的權é™ç‹€æ…‹ï¼Œç‹€æ…‹å¿…須為 &6true(t)&cã€&6false(f)&c或 &6remove(r)&c。' @@ -113,17 +114,17 @@ Language: EndsIn: '&c侵略çµæŸæ–¼ï¼š[autoTimeLeft] &2防守方:%1 人 &4進攻方:%2 人' Ended: '&7領地侵略 &4%1 &7çµæŸï¼' cantDo: '&c無法在領地侵略時åšæ­¤äº‹æƒ…ï¼' - left: '&7你已離開了領地 &4%1 &7侵略ï¼' - noFlagChange: '&c無法在領地侵略時變更權é™ï¼' - noRemoval: '&c無法在領地侵略時移除領地ï¼' - immune: '&e設定下一波侵略 %1&eï¼' - notImmune: '&eä¸å†é€²è¡Œè¨­å®šï¼' - notInRaid: '&e玩家ä¸åœ¨ä¾µç•¥ä¸­ï¼' + left: '&7你已離開了 &4%1 &7侵略。' + noFlagChange: '&c無法在領地侵略時變更權é™ã€‚' + noRemoval: '&c無法在領地侵略時移除領地' + immune: '&e設定下一波侵略 %1&e。' + notImmune: '&eä¸å†é€²è¡Œè¨­å®šã€‚' + notInRaid: '&e玩家ä¸åœ¨ä¾µç•¥ä¸­ã€‚' attack: Joined: '&7已加入 &2%1 &7侵略ï¼' Started: '&7侵略開始ï¼' cooldown: '&c太早進行下一場領地侵略ï¼è«‹ç¨å€™ %1ï¼' - immune: '&c這個領地å…除侵略ï¼è«‹ç¨å€™ %1ï¼' + immune: '&c此領地å…除侵略ï¼è«‹ç¨å€™ %1ï¼' playerImmune: '&c領地æ“有者å…除侵略ï¼è«‹ç¨å€™ %1ï¼' isOffline: '&c無法在領地æ“有者離線時侵略ï¼' noSubzones: '&c無法侵略å­å€åŸŸé ˜åœ°ï¼' @@ -136,7 +137,7 @@ Language: Invitation: '&7從 &6%1 &7接å—侵略防守方ï¼' JoinedDef: '&2%1&7 加入了防守方ï¼' IsOffline: '&c無法在領地æ“有者離線時加入侵略防守方ï¼' - noSelf: '&c你已在這個領地中防守方' + noSelf: '&c你已在此領地中防守方' notRaided: '&c領地目å‰æ²’有正在侵略ï¼' alreadyInAnother: '&c因為你已在å¦å¤–一場侵略防守方(%1),所以你無法加入這場侵略防守方ï¼' status: @@ -150,15 +151,15 @@ Language: raidin: '&eå¯èƒ½çš„侵略:%1&e。' stopped: '&e侵略 &6%1 &e被åœæ­¢ã€‚' info: - years: '&e%1 &6å¹´' - oneYear: '&e%1 &6å¹´' - day: '&e%1 &6天' - oneDay: '&e%1 &6天' - hour: '&e%1 &6å°æ™‚' - oneHour: '&e%1 &6å°æ™‚' - min: '&e%1 &6分é˜' - sec: '&e%1 &6秒' - listSplitter: ', ' + years: '&e%1 &6å¹´ ' + oneYear: '&e%1 &6å¹´ ' + day: '&e%1 &6天 ' + oneDay: '&e%1 &6天 ' + hour: '&e%1 &6å°æ™‚ ' + oneHour: '&e%1 &6å°æ™‚ ' + min: '&e%1 &6åˆ†é˜ ' + sec: '&e%1 &6秒 ' + listSplitter: 〠click: '&7點擊' clickToConfirm: '&7點擊確èª' server: @@ -170,7 +171,7 @@ Language: havePrefix: '' lackColor: '&7' lackPrefix: '' - others: '&eå’Œ &2%1 &e其他' + others: '&eå’Œ &2%1 &e其它' Set: '&e領地 &6%2 &eçš„ &6%1 &e權é™å·²è¨­å®šç‚º &6%3&e。' SetFailed: '&c你沒有設定 &6%1&c 的權é™ã€‚' CheckTrue: '&e玩家 &6%2 &e已在領地 &6%3 &e中將 &6%1 &e權é™è¨­å®šç‚º &6%4&e。' @@ -241,6 +242,7 @@ Language: MoveDeny: '&c你沒有領地 &6%1 的移動(move)權é™ã€‚' TeleportNoFlag: '&c你沒有領地的傳é€ï¼ˆtp)權é™ã€‚' FlagDeny: '&c你沒有領地 &6%2 &6%1&c 的權é™ã€‚' + BaseFlagDeny: '&c你沒有 &6%1 &c的權é™ã€‚' GiveLimits: '&c目標玩家領地超éŽé™åˆ¶ï¼Œç„¡æ³•çµ¦äºˆé ˜åœ°ã€‚' GiveConfirm: '&7點擊確èªå°‡é ˜åœ° &6%1 &7從 &6%2 &7轉移到 &6%3&7。' Give: '&e你將領地 &6%1 &e轉移到 &6%2&e。' @@ -259,7 +261,7 @@ Language: Kicked: '&e你在領地中被踢出。' CantKick: '&e無法踢出此玩家。' In: '&eä½ ç›®å‰åœ¨é ˜åœ° &6%1&e。' - OwnerChange: '&e已將領地 &6%1 &eçš„æ“æœ‰è€…æ›´æ”¹æˆ &6%2' + OwnerChange: '&e已將領地 &6%1 &eçš„æ“æœ‰è€…æ›´æ”¹æˆ &6%2&e。' NonAdmin: '&c你沒有領地的管ç†æ¬Šé™ã€‚' Line: '&e領地:&6%1 ' RentedBy: '&e租用者:&6%1&e' @@ -371,7 +373,7 @@ Language: MaxEW: '&7- &eæ±è¥¿æ–¹å‘最大:&3%1&e' MaxNS: '&7- &eå—北方å‘最大:&3%1&e' MaxUD: '&7- &e上下方å‘最大:&3%1&e' - MinMax: '&7- &e最å°/最大高度:&3%1 到 %2&e' + MinMax: '&7- &eæœ€å° / 最大高度:&3%1 到 %2&e' MaxSubzones: '&7- &e最大å­å€åŸŸï¼š&3%1&e' MaxSubDepth: '&7- &e最大å­å€åŸŸæ·±åº¦ï¼š&3%1&e' MaxRents: '&7- &e最多租用:&3%1&e' @@ -429,7 +431,7 @@ Language: DescChange: '&6æ述已更改為:%1&6。' ChantChange: '&4無法更改商店權é™ç‚º true(t)。' NewBoard: '&6æˆåŠŸæ–°å¢žå•†åº—宣傳é¢æ¿ã€‚' - BoardExist: '&c這個ä½ç½®å·²å­˜åœ¨å•†åº—宣傳é¢æ¿ã€‚' + BoardExist: '&cæ­¤ä½ç½®å·²å­˜åœ¨å•†åº—宣傳é¢æ¿ã€‚' DeleteBoard: '&6點擊å³éµç§»é™¤å•†åº—宣傳é¢æ¿ã€‚' DeletedBoard: '&6已移除商店宣傳é¢æ¿ã€‚' IncorrectBoard: '&c這ä¸æ˜¯å•†åº—宣傳é¢æ¿ï¼Œè«‹é‡æ–°é»žæ“Šæ­£ç¢ºçš„商店宣傳é¢æ¿ã€‚' @@ -462,21 +464,22 @@ Language: cmdPermissionColor: '&2' General: DisabledWorld: '&c此世界åœç”¨é ˜åœ°ã€‚' + CantCreate: '&c無法在此世界建立領地。' UseNumbers: '&c請使用數字……' - # 將所有文字替æ›ç‚º '' å°‡åœç”¨æ­¤è¨Šæ¯ + # Replace all text with '' to disable this message CantPlaceLava: '&c無法在沒有領地的地方放置岩漿。' - # 將所有文字替æ›ç‚º '' å°‡åœç”¨æ­¤è¨Šæ¯ + # Replace all text with '' to disable this message CantPlaceWater: '&c無法在沒有領地的地方放置水。' CantPlaceChest: '&c你沒有放置儲物箱的權é™ã€‚' NoPermission: '&c你沒有執行此æ“作的權é™ã€‚' info: NoPlayerPermission: '&c[playerName] 沒有 [permission] 權é™ã€‚' - NoCmdPermission: '&c沒有這個指令的權é™ã€‚' + NoCmdPermission: '&c沒有此指令的權é™ã€‚' DefaultUsage: '&e使用 &6/%1 ? &e查看説明。' MaterialGet: '&eID &6%1 &e的物å“å稱為 &6%2' MarketList: '&e---- &6市場列表 &e----' Separator: '&e------------------------------------------------' - AdminOnly: '&cåªæœ‰ç®¡ç†å“¡æ‰èƒ½åŸ·è¡Œé€™å€‹æŒ‡ä»¤ã€‚' + AdminOnly: '&cåªæœ‰ç®¡ç†å“¡æ‰èƒ½åŸ·è¡Œæ­¤æŒ‡ä»¤ã€‚' InfoTool: '&e- 資訊工具:&6%1' ListMaterialAdd: '&6%1 &e已被新增到領地 &6%2&e。' ListMaterialRemove: '&6%1 &e已從領地 &6%2 &e移除。' @@ -503,13 +506,13 @@ Language: CurrentArea: '&eç›®å‰å€åŸŸï¼š&6%1' TotalResSize: '&e總計尺寸:&6%1 立方格&e(&6%2 平方格&e)' ResSize: - eastWest: '&eæ±/西:&6%1 æ ¼' - northSouth: '&e北/å—:&6%1 æ ¼' - upDown: '&e上/下:&6%1 æ ¼' + eastWest: '&eæ± / 西:&6%1 æ ¼' + northSouth: '&e北 / å—:&6%1 æ ¼' + upDown: '&e上 / 下:&6%1 æ ¼' TotalWorth: '&e總計價值:&6立方格價為 %1&e(&6平方格價為 %2&e)' TotalSubzones: '&eå­å€åŸŸé ˜åœ°ï¼š&6%1&e(&6%2&e)' NotOnline: '&e目標玩家一定è¦åœ¨ç·šä¸Šã€‚' - GenericPages: '&eé  &6%1 &eçš„ &6%2&e(&6%3&e)' + GenericPages: '&e第 &6%1 &eé ï¼ˆå…± &6%2 &eé ï¼‰ï¼ˆ&6%3&e é ï¼‰' WorldEditNotFound: '&c未åµæ¸¬åˆ° WorldEdit。' CoordsTop: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' CoordsBottom: '&eX:&6%1 &eY:&6%2 &eZ:&6%3' @@ -547,8 +550,8 @@ Language: Owner: '&eæ“有者:&6%1' World: '&e世界:&6%1' Subzones: '&eå­å€åŸŸ' - # 下é¢çš„幾行代表了領地傳é€çµ¦çŽ©å®¶çš„å„種訊æ¯ã€‚ - # 請注æ„,æŸäº›è¨Šæ¯å…·æœ‰åœ¨é‹è¡Œæ™‚æ’入的變é‡ï¼Œä¾‹å¦‚ %1。 + # The below lines represent various messages residence sends to the players. + # Note that some messages have variables such as %1 that are inserted at runtime. NewPlayerInfo: '&e如果è¦å»ºç«‹é ˜åœ°ï¼Œè«‹ä½¿ç”¨ä¼ºæœå™¨æŒ‡å®šçš„工具é¸æ“‡é ˜åœ°çš„兩個å°è§’,然後使用指令 &2/res create [領地å稱]&e。' CommandHelp: Description: 內涵領地說明 @@ -641,7 +644,7 @@ CommandHelp: Description: è½‰æ› ResidenceSign æ’件的告示牌 listallhidden: Info: - - 用法:&6/res listhidden <é æ•¸> + - '&e用法:&6/res listhidden <é æ•¸>' - 顯示伺æœå™¨æ‰€æœ‰éš±è—的領地。 Description: 顯示所有隱è—的領地 bank: @@ -665,7 +668,7 @@ CommandHelp: - 留空 <領地å稱> 會顯示你目å‰æ‰€åœ¨çš„領地資訊。 Description: 顯示領地的資訊 area: - Description: 管ç†é ˜åœ°å€åŸŸã€‚ + Description: 管ç†é ˜åœ°å€åŸŸ Info: - '' SubCommands: @@ -707,15 +710,15 @@ CommandHelp: - å‘ä½ é¢å°çš„æ–¹å‘縮å°é ˜åœ°ï¼Œ - 領地å稱是å¯é¸çš„。 Description: å‘ä½ é¢å°çš„æ–¹å‘縮å°é ˜åœ° - check: - Info: - - '&e用法:&6/res check [領地å稱] [權é™] (玩家å稱)' - Description: 為你檢查權é™ç‹€æ…‹ gset: Info: - '&e用法:&6/res gset <領地å稱> [群組] [權é™] [true/false/remove]' - 使用 /res flags ? 查看權é™åˆ—表。 Description: 為æŸå€‹çµ„è¨­å®šé ˜åœ°çš„ç‰¹å®šæ¬Šé™ + check: + Info: + - '&e用法:&6/res check [領地å稱] [權é™] (玩家å稱)' + Description: 為你檢查權é™ç‹€æ…‹ list: Info: - '&e用法:&6/res list <玩家å稱> <é æ•¸> <世界å稱>' @@ -774,7 +777,7 @@ CommandHelp: Description: 購買領地 Info: - '&e用法:&6/res market buy [領地å稱]' - - 如果此領地正在出售,則購買這個領地。 + - 如果此領地正在出售,則購買此領地。 unsell: Description: å–消出售領地 Info: @@ -787,7 +790,8 @@ CommandHelp: rentable: Description: 出租領地 Info: - - '&e用法:&6/res market rentable [領地å稱] [花費] [天數] ' + - '&e用法:&6/res market rentable [領地å稱] [花費] [天數] + ' - 使領地出租以 [天數] 來計算 [花費] - 如果啟用 ,則在租約到期å‰å¯å†æ¬¡å‡ºç§Ÿã€‚ - 如果啟用 ,則在租約到期後留在市場上。 @@ -968,19 +972,19 @@ CommandHelp: - 將物å“加入黑å單,物å“將被阻止放置在領地中, - 將物å“加入忽略å單,物å“å°‡ä¸æœƒè¢«é ˜åœ°æ‰€ä¿è­·ã€‚ Description: 更改黑å單和忽略åå–®é¸é … - raidstatus: - Info: - - 用法:&6/res raidstatus (領地å稱/玩家å稱)。 - Description: 查看領地的侵略狀態 pset: Info: - '&e用法:&6/res pset <領地å稱> [玩家å稱] [權é™] [true/false/remove]' - '&e用法:&6/res pset <領地å稱> [玩家å稱] removeall' - 使用 /res flags ? 查看權é™åˆ—表。 Description: ç‚ºçŽ©å®¶è¨­å®šé ˜åœ°çš„ç‰¹å®šæ¬Šé™ + raidstatus: + Info: + - '&e用法:&6/res raidstatus (領地å稱/玩家å稱)。' + Description: 查看領地的侵略狀態 show: Info: - - 用法:&6/res show <領地å稱>。 + - '&e用法:&6/res show <領地å稱>。' Description: 顯示領地邊界 flags: Info: @@ -1021,7 +1025,7 @@ CommandHelp: Translated: 安全å€åŸŸï¼ˆsafezone) Description: 設定為 true 會使領地清除æˆå“¡è² é¢æ•ˆæžœ Info: - - '&eUsage: &6/res set safezone true/false/remove' + - '&e用法:&6/res set <領地å稱> safezone true/false/remove' backup: Translated: 備份與還原(backup) Description: 如果設定為 trueï¼Œå‰‡å›žå¾©å›žåŽŸæœ¬çš„é ˜åœ°æ¨£è²Œï¼ˆéœ€è¦ WordEdit) @@ -1076,7 +1080,7 @@ CommandHelp: Translated: 使用刷å­ï¼ˆbrush) Description: å…許或ç¦æ­¢åˆ·æŽƒæ–¹å¡Š Info: - - '&e用法: &6/res set/pset <領地å稱> brush true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> brush true/false/remove' cake: Translated: åƒè›‹ç³•ï¼ˆcake) Description: å…許或ç¦æ­¢çŽ©å®¶åƒè›‹ç³• @@ -1262,11 +1266,16 @@ CommandHelp: Description: 玩家進入領地後會開始發光 Info: - '&e用法:&6/res set <領地å稱> glow true/false/remove' + goathorn: + Translated: å¹å¥å±±ç¾Šè§’(goathorn) + Description: å…許或ç¦æ­¢ä½¿ç”¨å±±ç¾Šè§’ + Info: + - '&e用法:&6/res set/pset <領地å稱> goathorn true/false/remove' harvest: Translated: 收割(harvest) Description: å…許收割作物 Info: - - '&e用法:&6/res set/pset harvest true/false/remove' + - '&e用法:&6/res set/pset <領地å稱> harvest true/false/remove' hotfloor: Translated: 岩漿塊傷害(hotfloor) Description: å…許或ç¦æ­¢è¸©åœ¨å²©æ¼¿å¡Šä¸Šçš„傷害 @@ -1429,11 +1438,12 @@ CommandHelp: - '&e用法:&6/res set/pset <領地å稱> pressure true/false/remove' piston: Translated: 使用活塞(piston) + Description: å…許或ç¦æ­¢æ´»å¡žåœ¨é ˜åœ°å…§æŽ¨å‹•æˆ–拉動方塊 Info: - '&e用法:&6/res set <領地å稱> piston true/false/remove' pistonprotection: Translated: 防止外部活塞(pistonprotection) - Description: å…許或ç¦æ­¢æ´»å¡žå¾žé ˜åœ°å¤–推或拉領地內的方塊 + Description: å…許或ç¦æ­¢æ´»å¡žå¾žé ˜åœ°å¤–é¢æŽ¨å‹•æˆ–拉動領地內的方塊 Info: - '&e用法:&6/res set <領地å稱> pistonprotection true/false/remove' place: @@ -1580,7 +1590,7 @@ CommandHelp: Translated: 減速(wspeed1) Description: 減慢在領地內的玩家行走速度 Info: - - '&eUsage: &6/res set <領地å稱> wspeed1 true/false/remove' + - '&e用法:&6/res set <領地å稱> wspeed1 true/false/remove' wspeed2: Translated: 加速(wspeed2) Description: 加快在領地內的玩家行走速度 @@ -1598,6 +1608,10 @@ CommandHelp: Info: - '&e用法:&6/res current' Description: 顯示你目å‰æ‰€åœ¨çš„領地 + setowner: + Info: + - '&e用法:&6/resadmin setowner [領地å稱] [玩家å稱] (-keepflags)' + Description: 更改領地æ“有者 reload: Info: - '&e用法:&6/res reload [config/lang/groups/flags]' @@ -1606,10 +1620,6 @@ CommandHelp: Info: - '&e用法:&6/res leaveraid' Description: 離開領地侵略 - setowner: - Info: - - '&e用法:&6/resadmin setowner [領地å稱] [玩家å稱] (-keepflags)' - Description: 更改領地æ“有者 defend: Info: - '&e用法:&6/res defend [領地å稱] (玩家å稱)' @@ -1665,10 +1675,6 @@ CommandHelp: Info: - '&e用法:&6/res confirm' - 確èªç§»é™¤é ˜åœ°ã€‚ - resadmin: - Info: - - '&e用法:&6/res resadmin [on/off]' - Description: 啟用或ç¦ç”¨é ˜åœ°ç®¡ç†å“¡ tpset: Info: - '&e用法:&6/res tpset' @@ -1676,6 +1682,10 @@ CommandHelp: - å‰æ是你一定è¦åœ¨é ˜åœ°å…§ï¼Œ - 且你還一定è¦æ˜¯é ˜åœ°æ“有者或者æ“有管ç†å“¡æ¬Šé™ã€‚ Description: 設定傳é€é»ž + resadmin: + Info: + - '&e用法:&6/res resadmin [on/off]' + Description: 啟用或ç¦ç”¨é ˜åœ°ç®¡ç†å“¡ tpconfirm: Info: - '&e用法:&6/res tpconfirm' @@ -1693,21 +1703,21 @@ CommandHelp: Description: 檢查物å“是å¦å­˜åœ¨å…¶ ID kick: Info: - - '&e用法:&6/res kick &6<玩家å稱>' + - '&e用法:&6/res kick <玩家å稱>' - 你必須是領地æ“有者, - 且玩家必須在線上。 Description: 踢出指定玩家 - sublist: - Info: - - '&e用法:&6/res sublist <領地å稱> <é æ•¸>' - - 列出所有å­å€åŸŸã€‚ - Description: 列出所有å­å€åŸŸ rename: Info: - '&e用法:&6/res rename [舊領地å稱] [新領地å稱]' - 你必須是æ“有者或管ç†å“¡æ‰èƒ½é€²è¡Œæ­¤é …æ“作, - æ–°å稱ä¸èƒ½èˆ‡ç¾æœ‰é ˜åœ°å稱é‡è¤‡ã€‚ Description: é‡æ–°å‘½å領地 + sublist: + Info: + - '&e用法:&6/res sublist <領地å稱> <é æ•¸>' + - 列出所有å­å€åŸŸã€‚ + Description: 列出所有å­å€åŸŸ setallfor: Info: - '&e用法:&6/res setallfor [玩家å稱] [權é™] [true/false/remove]' From cda53f46776581875573a46c7233fd106a52db1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=98=AD=E8=98=AD=E9=9C=B2?= <51469621+flandretw@users.noreply.github.com> Date: Sat, 11 May 2024 20:48:54 +0800 Subject: [PATCH 1099/1142] Update ChineseTW.yml --- src/Language/ChineseTW.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Language/ChineseTW.yml b/src/Language/ChineseTW.yml index 83fabc50d..5bc91e799 100644 --- a/src/Language/ChineseTW.yml +++ b/src/Language/ChineseTW.yml @@ -159,7 +159,7 @@ Language: oneHour: '&e%1 &6å°æ™‚ ' min: '&e%1 &6åˆ†é˜ ' sec: '&e%1 &6秒 ' - listSplitter: 〠+ listSplitter: 'ã€' click: '&7點擊' clickToConfirm: '&7點擊確èª' server: @@ -466,9 +466,9 @@ Language: DisabledWorld: '&c此世界åœç”¨é ˜åœ°ã€‚' CantCreate: '&c無法在此世界建立領地。' UseNumbers: '&c請使用數字……' - # Replace all text with '' to disable this message + # 將所有文字替æ›ç‚º '' 以åœç”¨æ­¤è¨Šæ¯ CantPlaceLava: '&c無法在沒有領地的地方放置岩漿。' - # Replace all text with '' to disable this message + # 將所有文字替æ›ç‚º '' 以åœç”¨æ­¤è¨Šæ¯ CantPlaceWater: '&c無法在沒有領地的地方放置水。' CantPlaceChest: '&c你沒有放置儲物箱的權é™ã€‚' NoPermission: '&c你沒有執行此æ“作的權é™ã€‚' @@ -550,8 +550,8 @@ Language: Owner: '&eæ“有者:&6%1' World: '&e世界:&6%1' Subzones: '&eå­å€åŸŸ' - # The below lines represent various messages residence sends to the players. - # Note that some messages have variables such as %1 that are inserted at runtime. + # 以下幾行代表 Residence 傳é€çµ¦çŽ©å®¶çš„å„種訊æ¯ã€‚ + # 請注æ„,æŸäº›è¨Šæ¯å…·æœ‰åœ¨åŸ·è¡Œæ™‚æ’入的變數,例如 %1。 NewPlayerInfo: '&e如果è¦å»ºç«‹é ˜åœ°ï¼Œè«‹ä½¿ç”¨ä¼ºæœå™¨æŒ‡å®šçš„工具é¸æ“‡é ˜åœ°çš„兩個å°è§’,然後使用指令 &2/res create [領地å稱]&e。' CommandHelp: Description: 內涵領地說明 From b356a0339aaf7c36819bcf3888b361c21b016ade Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 27 May 2024 11:45:17 +0300 Subject: [PATCH 1100/1142] Defaulting to stone on flag icon set --- src/com/bekvon/bukkit/residence/gui/FlagData.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/gui/FlagData.java b/src/com/bekvon/bukkit/residence/gui/FlagData.java index 4e999e850..342cd2122 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagData.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagData.java @@ -3,24 +3,26 @@ import java.util.HashMap; import org.bukkit.inventory.ItemStack; +import net.Zrips.CMILib.Items.CMIMaterial; + public class FlagData { private HashMap items = new HashMap(); public void addFlagButton(String flag, ItemStack item) { - this.items.put(flag, item); + this.items.put(flag, item == null ? CMIMaterial.STONE.newItemStack() : item); } public void removeFlagButton(String flag) { - this.items.remove(flag); + this.items.remove(flag); } public boolean contains(String flag) { - return items.containsKey(flag); + return items.containsKey(flag); } public ItemStack getItem(String flag) { - return items.get(flag); + return items.get(flag); } } From dc2add90991203e2c9f5ecb839adeffed11e7ad4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 27 May 2024 16:04:15 +0300 Subject: [PATCH 1101/1142] WaterLog block handling fix --- .../residence/ResidenceCommandListener.java | 5 +---- .../listeners/ResidencePlayerListener.java | 20 +++++++++++++------ .../bukkit/residence/text/help/HelpEntry.java | 2 -- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java index ef60df16f..19f21c24f 100644 --- a/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java +++ b/src/com/bekvon/bukkit/residence/ResidenceCommandListener.java @@ -317,7 +317,6 @@ public void sendUsage(CommandSender sender, String command) { private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender, Command command) { - if (plugin.getHelpPages() == null) return false; @@ -335,12 +334,10 @@ private boolean commandHelp(String[] args, boolean resadmin, CommandSender sende if (command.getName().equalsIgnoreCase("res")) resadmin = false; - CMIDebug.d("on commands ", 1, helppath); if (plugin.getHelpPages().containesEntry(helppath)) { - CMIDebug.d("on commands ", 0); plugin.getHelpPages().printHelp(sender, page, helppath, resadmin); } - CMIDebug.d("on commands ", 2); + return true; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 19357cb4b..1339a3409 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -93,6 +93,7 @@ import net.Zrips.CMILib.Entities.CMIEntityType; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; @@ -1669,7 +1670,7 @@ public void onPlayerInteractWithMinecartStorage(PlayerInteractEntityEvent event) Entity ent = event.getRightClicked(); CMIEntityType type = CMIEntityType.get(ent); - + if (type != CMIEntityType.CHEST_MINECART && type != CMIEntityType.HOPPER_MINECART) return; @@ -1865,11 +1866,18 @@ public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { Location loc = event.getBlockClicked().getLocation().clone(); - if (Version.isCurrentHigher(Version.v1_12_R1)) - try { - loc.add(event.getBlockFace().getDirection()); - } catch (Throwable e) { - } + if (Version.isCurrentHigher(Version.v1_12_R1)) { + + if (Version.isCurrentHigher(Version.v1_13_R1) && event.getBlockClicked().getBlockData() instanceof org.bukkit.block.data.Waterlogged) { + org.bukkit.block.data.Waterlogged waterloggedBlock = (org.bukkit.block.data.Waterlogged) event.getBlockClicked().getBlockData(); + if (waterloggedBlock.isWaterlogged()) + loc.add(event.getBlockFace().getDirection()); + } else + try { + loc.add(event.getBlockFace().getDirection()); + } catch (Throwable e) { + } + } ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null) { diff --git a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java index 6a8efcad1..add0c5868 100644 --- a/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java +++ b/src/com/bekvon/bukkit/residence/text/help/HelpEntry.java @@ -17,7 +17,6 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; -import com.Zrips.CMI.Modules.Placeholders.Placeholder.CMIPlaceholderType; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.ResidenceCommandListener; import com.bekvon.bukkit.residence.Placeholders.Placeholder.CMIPlaceHolders; @@ -34,7 +33,6 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.CMIList; import net.Zrips.CMILib.Container.PageInfo; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Version.Version; From 08cdb27189695f514190b1a61f03e9bcbf9a734c Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 29 May 2024 10:58:00 +0300 Subject: [PATCH 1102/1142] ResidenceCreationEvent should go after economy check --- .../residence/protection/ResidenceManager.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index a8958a218..2f491a58b 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -276,18 +276,13 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String if (residences.containsKey(resName.toLowerCase())) { plugin.msg(player, lm.Residence_AlreadyExists, residences.get(resName.toLowerCase()).getResidenceName()); return false; - } + } newRes.BlockSellPrice = group.getSellPerBlock(); if (!newRes.addArea(player, newArea, "main", resadmin, false)) return false; - ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, resName, newRes, newArea); - plugin.getServ().getPluginManager().callEvent(resevent); - if (resevent.isCancelled()) - return false; - if (Residence.getInstance().getConfigManager().isChargeOnCreation() && !newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { double chargeamount = newArea.getCost(group); @@ -298,6 +293,11 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String } } + ResidenceCreationEvent resevent = new ResidenceCreationEvent(player, resName, newRes, newArea); + plugin.getServ().getPluginManager().callEvent(resevent); + if (resevent.isCancelled()) + return false; + residences.put(resName.toLowerCase(), newRes); calculateChunks(resName); @@ -1346,12 +1346,12 @@ public boolean renameResidence(Player player, String oldName, String newName, bo ResidenceRenameEvent resevent = new ResidenceRenameEvent(res, newName, oldName); plugin.getServ().getPluginManager().callEvent(resevent); - + if (resevent.isCancelled()) return false; - + newName = resevent.getNewResidenceName(); - + removeChunkList(oldName); res.setName(newName); From 9a451d2a97979664a7697c4209c5f9be1688882a Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 29 May 2024 13:22:26 +0300 Subject: [PATCH 1103/1142] Removing player residence records on world cleanup --- .../residence/containers/ResidencePlayer.java | 19 +- .../residence/economy/TransactionManager.java | 608 +++++++++--------- .../residence/economy/rent/RentManager.java | 19 +- .../protection/ClaimedResidence.java | 4 + .../residence/protection/PlayerManager.java | 549 ++++++++-------- .../protection/ResidenceManager.java | 150 +++-- 6 files changed, 687 insertions(+), 662 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index 5b1100aef..d074903c0 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -342,16 +342,17 @@ public void addResidence(ClaimedResidence residence) { public void removeResidence(ClaimedResidence residence) { if (residence == null) return; - boolean rem = this.ResidenceList.remove(residence); + boolean removed = this.ResidenceList.remove(residence); // in case its fails to remove, double check by name - if (rem == false) { - Iterator iter = this.ResidenceList.iterator(); - while (iter.hasNext()) { - ClaimedResidence one = iter.next(); - if (one.getName().equalsIgnoreCase(residence.getName())) { - iter.remove(); - break; - } + if (removed) + return; + + Iterator iter = this.ResidenceList.iterator(); + while (iter.hasNext()) { + ClaimedResidence one = iter.next(); + if (one.getName().equalsIgnoreCase(residence.getName())) { + iter.remove(); + break; } } } diff --git a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java index 3fe9bc645..c3c130dc3 100644 --- a/src/com/bekvon/bukkit/residence/economy/TransactionManager.java +++ b/src/com/bekvon/bukkit/residence/economy/TransactionManager.java @@ -30,392 +30,396 @@ public class TransactionManager implements MarketBuyInterface { private Residence plugin; public TransactionManager(Residence plugin) { - this.plugin = plugin; - sellAmount = new HashSet(); + this.plugin = plugin; + sellAmount = new HashSet(); } public boolean chargeEconomyMoney(Player player, double chargeamount) { - EconomyInterface econ = plugin.getEconomyManager(); - if (econ == null) { - plugin.msg(player, lm.Economy_MarketDisabled); - return false; - } - if (!econ.canAfford(player.getName(), chargeamount)) { - plugin.msg(player, lm.Economy_NotEnoughMoney); - return false; - } - econ.subtract(player.getName(), chargeamount); - try { - if (chargeamount != 0D) - plugin.msg(player, lm.Economy_MoneyCharged, plugin.getEconomyManager().format(chargeamount), econ.getName()); - } catch (Exception e) { - } - return true; + EconomyInterface econ = plugin.getEconomyManager(); + if (econ == null) { + plugin.msg(player, lm.Economy_MarketDisabled); + return false; + } + if (!econ.canAfford(player.getName(), chargeamount)) { + plugin.msg(player, lm.Economy_NotEnoughMoney); + return false; + } + econ.subtract(player.getName(), chargeamount); + try { + if (chargeamount != 0D) + plugin.msg(player, lm.Economy_MoneyCharged, plugin.getEconomyManager().format(chargeamount), econ.getName()); + } catch (Exception e) { + } + return true; } public boolean giveEconomyMoney(Player player, double amount) { - if (player == null) - return false; - if (amount == 0) - return true; - EconomyInterface econ = plugin.getEconomyManager(); - if (econ == null) { - plugin.msg(player, lm.Economy_MarketDisabled); - return false; - } - - econ.add(player.getName(), amount); - plugin.msg(player, lm.Economy_MoneyAdded, plugin.getEconomyManager().format(amount), econ.getName()); - return true; + if (player == null) + return false; + if (amount == 0) + return true; + EconomyInterface econ = plugin.getEconomyManager(); + if (econ == null) { + plugin.msg(player, lm.Economy_MarketDisabled); + return false; + } + + econ.add(player.getName(), amount); + plugin.msg(player, lm.Economy_MoneyAdded, plugin.getEconomyManager().format(amount), econ.getName()); + return true; } @Deprecated public boolean giveEconomyMoney(String playerName, double amount) { - if (playerName == null) - return false; - if (amount == 0) - return true; - EconomyInterface econ = plugin.getEconomyManager(); - if (econ == null) { - return false; - } - econ.add(playerName, amount); - return true; + if (playerName == null) + return false; + if (amount == 0) + return true; + EconomyInterface econ = plugin.getEconomyManager(); + if (econ == null) { + return false; + } + econ.add(playerName, amount); + return true; } public void putForSale(String areaname, Player player, int amount, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - putForSale(res, player, amount, resadmin); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + putForSale(res, player, amount, resadmin); } public void putForSale(ClaimedResidence res, Player player, int amount, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - if (plugin.getConfigManager().enabledRentSystem()) { - if (!resadmin) { - if (res.isForRent()) { - plugin.msg(player, lm.Economy_RentSellFail); - return; - } - if (res.isSubzoneForRent()) { - plugin.msg(player, lm.Economy_SubzoneRentSellFail); - return; - } - if (res.isParentForRent()) { - plugin.msg(player, lm.Economy_ParentRentSellFail); - return; - } - } - } - - if (!plugin.getConfigManager().isSellSubzone()) { - if (res.isSubzone()) { - plugin.msg(player, lm.Economy_SubzoneSellFail); - return; - } - } - - if (!resadmin) { - if (!plugin.getConfigManager().enableEconomy() || plugin.getEconomyManager() == null) { - plugin.msg(player, lm.Economy_MarketDisabled); - return; - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - - if (!resadmin && !(rPlayer.getGroup().canSellLand() || ResPerm.sell.hasPermission(player))) { - plugin.msg(player, lm.General_NoPermission); - return; - } - if (amount < 0) { - plugin.msg(player, lm.Invalid_Amount); - return; - } - } - - if (!res.isOwner(player) && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return; - } - if (sellAmount.contains(res)) { - plugin.msg(player, lm.Economy_AlreadySellFail); - return; - } - res.setSellPrice(amount); - sellAmount.add(res); - plugin.getSignUtil().CheckSign(res); - plugin.msg(player, lm.Residence_ForSale, res.getName(), amount); + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + if (plugin.getConfigManager().enabledRentSystem()) { + if (!resadmin) { + if (res.isForRent()) { + plugin.msg(player, lm.Economy_RentSellFail); + return; + } + if (res.isSubzoneForRent()) { + plugin.msg(player, lm.Economy_SubzoneRentSellFail); + return; + } + if (res.isParentForRent()) { + plugin.msg(player, lm.Economy_ParentRentSellFail); + return; + } + } + } + + if (!plugin.getConfigManager().isSellSubzone()) { + if (res.isSubzone()) { + plugin.msg(player, lm.Economy_SubzoneSellFail); + return; + } + } + + if (!resadmin) { + if (!plugin.getConfigManager().enableEconomy() || plugin.getEconomyManager() == null) { + plugin.msg(player, lm.Economy_MarketDisabled); + return; + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + + if (!resadmin && !(rPlayer.getGroup().canSellLand() || ResPerm.sell.hasPermission(player))) { + plugin.msg(player, lm.General_NoPermission); + return; + } + if (amount < 0) { + plugin.msg(player, lm.Invalid_Amount); + return; + } + } + + if (!res.isOwner(player) && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return; + } + if (sellAmount.contains(res)) { + plugin.msg(player, lm.Economy_AlreadySellFail); + return; + } + res.setSellPrice(amount); + sellAmount.add(res); + plugin.getSignUtil().CheckSign(res); + plugin.msg(player, lm.Residence_ForSale, res.getName(), amount); } @Override public boolean putForSale(String areaname, int amount) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - return putForSale(res, amount); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + return putForSale(res, amount); } public boolean putForSale(ClaimedResidence res, int amount) { - if (res == null) - return false; + if (res == null) + return false; - if (plugin.getConfigManager().enabledRentSystem() && (res.isForRent() || res.isSubzoneForRent() || res.isParentForRent())) - return false; + if (plugin.getConfigManager().enabledRentSystem() && (res.isForRent() || res.isSubzoneForRent() || res.isParentForRent())) + return false; - if (sellAmount.contains(res)) - return false; + if (sellAmount.contains(res)) + return false; - res.setSellPrice(amount); - sellAmount.add(res); - return true; + res.setSellPrice(amount); + sellAmount.add(res); + return true; } @Override public void buyPlot(String areaname, Player player, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - buyPlot(res, player, resadmin); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + buyPlot(res, player, resadmin); } public void buyPlot(ClaimedResidence res, Player player, boolean resadmin) { - if (res == null || !res.isForSell()) { - plugin.msg(player, lm.Invalid_Residence); - return; - } - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - PermissionGroup group = rPlayer.getGroup(); - if (!resadmin) { - if (!plugin.getConfigManager().enableEconomy() || plugin.getEconomyManager() == null) { - plugin.msg(player, lm.Economy_MarketDisabled); - return; - } - boolean canbuy = group.canBuyLand() || ResPerm.buy.hasPermission(player); - if (!canbuy && !resadmin) { - plugin.msg(player, lm.General_NoPermission); - return; - } - } - - if (res.getPermissions().getOwner().equals(player.getName())) { - plugin.msg(player, lm.Economy_OwnerBuyFail); - return; - } - if (plugin.getResidenceManager().getOwnedZoneCount(player.getName()) >= rPlayer.getMaxRes() && !resadmin && !group.buyLandIgnoreLimits()) { - plugin.msg(player, lm.Residence_TooMany); - return; - } - Server serv = plugin.getServ(); - int amount = res.getSellPrice(); - - if (!resadmin && !group.buyLandIgnoreLimits()) { - CuboidArea[] areas = res.getAreaArray(); - for (CuboidArea thisarea : areas) { - if (!res.isSubzone() && !res.isSmallerThanMax(player, thisarea, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(player, thisarea, - resadmin)) { - plugin.msg(player, lm.Residence_BuyTooBig); - return; - } - } - } - - EconomyInterface econ = plugin.getEconomyManager(); - if (econ == null) { - plugin.msg(player, lm.Economy_MarketDisabled); - return; - } - - String buyerName = player.getName(); - String sellerName = res.getPermissions().getOwner(); - Player sellerNameFix = plugin.getServ().getPlayer(sellerName); - if (sellerNameFix != null) { - sellerName = sellerNameFix.getName(); - } - - if (econ.canAfford(buyerName, amount)) { - if (!econ.transfer(buyerName, sellerName, amount)) { - player.sendMessage(ChatColor.RED + "Error, could not transfer " + amount + " from " + buyerName + " to " + sellerName); - return; - } - res.getPermissions().setOwner(player, true); - res.getPermissions().applyDefaultFlags(); - removeFromSale(res); - - if (plugin.getConfigManager().isRemoveLwcOnBuy() && plugin.isLwcPresent()) - ResidenceLWCListener.removeLwcFromResidence(player, res); - - plugin.getSignUtil().CheckSign(res); - - Visualizer v = new Visualizer(player); - v.setAreas(res); - plugin.getSelectionManager().showBounds(player, v); - - plugin.msg(player, lm.Economy_MoneyCharged, plugin.getEconomyManager().format(amount), econ.getName()); - plugin.msg(player, lm.Residence_Bought, res.getResidenceName()); - Player seller = serv.getPlayer(sellerName); - if (seller != null && seller.isOnline()) { - seller.sendMessage(plugin.msg(lm.Residence_Buy, player.getName(), res.getResidenceName())); - seller.sendMessage(plugin.msg(lm.Economy_MoneyCredit, plugin.getEconomyManager().format(amount), econ.getName())); - } - } else { - plugin.msg(player, lm.Economy_NotEnoughMoney); - } + if (res == null || !res.isForSell()) { + plugin.msg(player, lm.Invalid_Residence); + return; + } + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + PermissionGroup group = rPlayer.getGroup(); + if (!resadmin) { + if (!plugin.getConfigManager().enableEconomy() || plugin.getEconomyManager() == null) { + plugin.msg(player, lm.Economy_MarketDisabled); + return; + } + boolean canbuy = group.canBuyLand() || ResPerm.buy.hasPermission(player); + if (!canbuy && !resadmin) { + plugin.msg(player, lm.General_NoPermission); + return; + } + } + + if (res.getPermissions().getOwner().equals(player.getName())) { + plugin.msg(player, lm.Economy_OwnerBuyFail); + return; + } + if (plugin.getResidenceManager().getOwnedZoneCount(player.getName()) >= rPlayer.getMaxRes() && !resadmin && !group.buyLandIgnoreLimits()) { + plugin.msg(player, lm.Residence_TooMany); + return; + } + Server serv = plugin.getServ(); + int amount = res.getSellPrice(); + + if (!resadmin && !group.buyLandIgnoreLimits()) { + CuboidArea[] areas = res.getAreaArray(); + for (CuboidArea thisarea : areas) { + if (!res.isSubzone() && !res.isSmallerThanMax(player, thisarea, resadmin) || res.isSubzone() && !res.isSmallerThanMaxSubzone(player, thisarea, + resadmin)) { + plugin.msg(player, lm.Residence_BuyTooBig); + return; + } + } + } + + EconomyInterface econ = plugin.getEconomyManager(); + if (econ == null) { + plugin.msg(player, lm.Economy_MarketDisabled); + return; + } + + String buyerName = player.getName(); + String sellerName = res.getPermissions().getOwner(); + Player sellerNameFix = plugin.getServ().getPlayer(sellerName); + if (sellerNameFix != null) { + sellerName = sellerNameFix.getName(); + } + + if (econ.canAfford(buyerName, amount)) { + if (!econ.transfer(buyerName, sellerName, amount)) { + player.sendMessage(ChatColor.RED + "Error, could not transfer " + amount + " from " + buyerName + " to " + sellerName); + return; + } + res.getPermissions().setOwner(player, true); + res.getPermissions().applyDefaultFlags(); + removeFromSale(res); + + if (plugin.getConfigManager().isRemoveLwcOnBuy() && plugin.isLwcPresent()) + ResidenceLWCListener.removeLwcFromResidence(player, res); + + plugin.getSignUtil().CheckSign(res); + + Visualizer v = new Visualizer(player); + v.setAreas(res); + plugin.getSelectionManager().showBounds(player, v); + + plugin.msg(player, lm.Economy_MoneyCharged, plugin.getEconomyManager().format(amount), econ.getName()); + plugin.msg(player, lm.Residence_Bought, res.getResidenceName()); + Player seller = serv.getPlayer(sellerName); + if (seller != null && seller.isOnline()) { + seller.sendMessage(plugin.msg(lm.Residence_Buy, player.getName(), res.getResidenceName())); + seller.sendMessage(plugin.msg(lm.Economy_MoneyCredit, plugin.getEconomyManager().format(amount), econ.getName())); + } + } else { + plugin.msg(player, lm.Economy_NotEnoughMoney); + } } public void removeFromSale(Player player, String areaname, boolean resadmin) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - removeFromSale(player, res, resadmin); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + removeFromSale(player, res, resadmin); } public void removeFromSale(Player player, ClaimedResidence res, boolean resadmin) { - if (res == null) { - plugin.msg(player, lm.Invalid_Area); - return; - } - - if (!res.isForSell()) { - plugin.msg(player, lm.Residence_NotForSale); - return; - } - if (res.isOwner(player) || resadmin) { - removeFromSale(res); - plugin.getSignUtil().CheckSign(res); - plugin.msg(player, lm.Residence_StopSelling); - } else { - plugin.msg(player, lm.General_NoPermission); - } + if (res == null) { + plugin.msg(player, lm.Invalid_Area); + return; + } + + if (!res.isForSell()) { + plugin.msg(player, lm.Residence_NotForSale); + return; + } + if (res.isOwner(player) || resadmin) { + removeFromSale(res); + plugin.getSignUtil().CheckSign(res); + plugin.msg(player, lm.Residence_StopSelling); + } else { + plugin.msg(player, lm.General_NoPermission); + } } @Override public void removeFromSale(String areaname) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - removeFromSale(res); + removeFromSale(ClaimedResidence.getByName(areaname)); } public void removeFromSale(ClaimedResidence res) { - if (res == null) - return; - sellAmount.remove(res); - plugin.getSignUtil().removeSign(res); + removeFromSale(res, true); + } + + public void removeFromSale(ClaimedResidence res, boolean removeSigns) { + if (res == null) + return; + sellAmount.remove(res); + if (removeSigns) + plugin.getSignUtil().removeSign(res); } @Override public boolean isForSale(String areaname) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - return isForSale(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + return isForSale(res); } public boolean isForSale(ClaimedResidence res) { - if (res == null) - return false; - return sellAmount.contains(res); + if (res == null) + return false; + return sellAmount.contains(res); } public boolean viewSaleInfo(String areaname, Player player) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - return viewSaleInfo(res, player); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + return viewSaleInfo(res, player); } public boolean viewSaleInfo(ClaimedResidence res, Player player) { - if (res == null || !res.isForSell()) { - return false; - } - - if (!sellAmount.contains(res)) - return false; - - plugin.msg(player, lm.General_Separator); - plugin.msg(player, lm.Area_Name, res.getName()); - plugin.msg(player, lm.Economy_SellAmount, res.getSellPrice()); - if (plugin.getConfigManager().useLeases()) { - String etime = plugin.getLeaseManager().getExpireTime(res); - if (etime != null) { - plugin.msg(player, lm.Economy_LeaseExpire, etime); - } - } - plugin.msg(player, lm.General_Separator); - return true; + if (res == null || !res.isForSell()) { + return false; + } + + if (!sellAmount.contains(res)) + return false; + + plugin.msg(player, lm.General_Separator); + plugin.msg(player, lm.Area_Name, res.getName()); + plugin.msg(player, lm.Economy_SellAmount, res.getSellPrice()); + if (plugin.getConfigManager().useLeases()) { + String etime = plugin.getLeaseManager().getExpireTime(res); + if (etime != null) { + plugin.msg(player, lm.Economy_LeaseExpire, etime); + } + } + plugin.msg(player, lm.General_Separator); + return true; } public void printForSaleResidences(Player player, int page) { - List toRemove = new ArrayList(); - plugin.msg(player, lm.Economy_LandForSale); - StringBuilder sbuild = new StringBuilder(); - sbuild.append(ChatColor.GREEN); - - PageInfo pi = new PageInfo(10, sellAmount.size(), page); - - int position = -1; - for (ClaimedResidence res : sellAmount) { - position++; - if (position > pi.getEnd()) - break; - if (!pi.isInRange(position)) - continue; - - if (res == null) { - toRemove.add(res); - continue; - } - plugin.msg(player, lm.Economy_SellList, pi.getPositionForOutput(position), res.getName(), res.getSellPrice(), res.getOwner()); - } - - for (ClaimedResidence one : toRemove) { - sellAmount.remove(one); - } - pi.autoPagination(player, "/res market list sell"); + List toRemove = new ArrayList(); + plugin.msg(player, lm.Economy_LandForSale); + StringBuilder sbuild = new StringBuilder(); + sbuild.append(ChatColor.GREEN); + + PageInfo pi = new PageInfo(10, sellAmount.size(), page); + + int position = -1; + for (ClaimedResidence res : sellAmount) { + position++; + if (position > pi.getEnd()) + break; + if (!pi.isInRange(position)) + continue; + + if (res == null) { + toRemove.add(res); + continue; + } + plugin.msg(player, lm.Economy_SellList, pi.getPositionForOutput(position), res.getName(), res.getSellPrice(), res.getOwner()); + } + + for (ClaimedResidence one : toRemove) { + sellAmount.remove(one); + } + pi.autoPagination(player, "/res market list sell"); } public void clearSales() { - for (ClaimedResidence res : sellAmount) { - if (res == null) - continue; - res.setSellPrice(-1); - } - sellAmount.clear(); - System.out.println("[Residence] - ReInit land selling."); + for (ClaimedResidence res : sellAmount) { + if (res == null) + continue; + res.setSellPrice(-1); + } + sellAmount.clear(); + System.out.println("[Residence] - ReInit land selling."); } @Override public int getSaleAmount(String areaname) { - ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); - return getSaleAmount(res); + ClaimedResidence res = plugin.getResidenceManager().getByName(areaname); + return getSaleAmount(res); } public int getSaleAmount(ClaimedResidence res) { - if (res == null) - return -1; - return res.getSellPrice(); + if (res == null) + return -1; + return res.getSellPrice(); } public void load(Map root) { - if (root == null) - return; - - for (Entry one : root.entrySet()) { - ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); - if (res == null) - continue; - res.setSellPrice(one.getValue()); - sellAmount.add(res); - } + if (root == null) + return; + + for (Entry one : root.entrySet()) { + ClaimedResidence res = plugin.getResidenceManager().getByName(one.getKey()); + if (res == null) + continue; + res.setSellPrice(one.getValue()); + sellAmount.add(res); + } } @Override public Map getBuyableResidences() { - Map list = new HashMap(); - for (ClaimedResidence res : sellAmount) { - if (res == null) - continue; - list.put(res.getName(), res.getSellPrice()); - } - return list; + Map list = new HashMap(); + for (ClaimedResidence res : sellAmount) { + if (res == null) + continue; + list.put(res.getName(), res.getSellPrice()); + } + return list; } public Map save() { - return getBuyableResidences(); + return getBuyableResidences(); } } \ No newline at end of file diff --git a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java index c581719ad..e06e9b228 100644 --- a/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java +++ b/src/com/bekvon/bukkit/residence/economy/rent/RentManager.java @@ -183,7 +183,8 @@ public void setForRent(Player player, String landName, int amount, int days, boo public void setForRent(Player player, ClaimedResidence res, int amount, int days, boolean AllowRenewing, boolean StayInMarket, boolean AllowAutoPay, boolean resadmin) { - if (amount < 0) return; + if (amount < 0) + return; if (res == null) { plugin.msg(player, lm.Invalid_Residence); @@ -508,8 +509,7 @@ public void removeFromForRent(Player player, ClaimedResidence res, boolean resad @Override public void removeFromRent(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - removeFromRent(res); + removeFromRent(ClaimedResidence.getByName(landName)); } public void removeFromRent(ClaimedResidence res) { @@ -518,22 +518,25 @@ public void removeFromRent(ClaimedResidence res) { @Override public void removeRentable(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - removeRentable(res); + removeRentable(ClaimedResidence.getByName(landName)); } public void removeRentable(ClaimedResidence res) { + removeRentable(res, true); + } + + public void removeRentable(ClaimedResidence res, boolean removeSigns) { if (res == null) return; removeFromRent(res); rentableLand.remove(res); - plugin.getSignUtil().removeSign(res); + if (removeSigns) + plugin.getSignUtil().removeSign(res); } @Override public boolean isForRent(String landName) { - ClaimedResidence res = plugin.getResidenceManager().getByName(landName); - return isForRent(res); + return isForRent(ClaimedResidence.getByName(landName)); } public boolean isForRent(ClaimedResidence res) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index aa7850f7c..3370f039e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -2388,4 +2388,8 @@ public Set getTrustedPlayers() { } return trusted; } + + public static ClaimedResidence getByName(String landName) { + return Residence.getInstance().getResidenceManager().getByName(landName); + } } diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index ebbda0c31..2b03ed512 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -29,252 +29,252 @@ public class PlayerManager implements ResidencePlayerInterface { private Residence plugin; public PlayerManager(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } public void addPlayer(ResidencePlayer resPlayer) { - if (resPlayer == null) - return; - addPlayer(resPlayer.getName(), resPlayer.getUniqueId(), resPlayer); + if (resPlayer == null) + return; + addPlayer(resPlayer.getName(), resPlayer.getUniqueId(), resPlayer); } public void addPlayer(Player player, ResidencePlayer resPlayer) { - if (player == null) - return; - addPlayer(player.getName(), player.getUniqueId(), resPlayer); + if (player == null) + return; + addPlayer(player.getName(), player.getUniqueId(), resPlayer); } public void addPlayer(String name, UUID uuid, ResidencePlayer resPlayer) { - if (name != null) - players.put(name.toLowerCase(), resPlayer); - if (uuid != null) - playersUuid.put(uuid.toString(), resPlayer); + if (name != null) + players.put(name.toLowerCase(), resPlayer); + if (uuid != null) + playersUuid.put(uuid.toString(), resPlayer); } public ResidencePlayer playerJoin(Player player) { - ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId().toString()); - if (resPlayer == null) { - resPlayer = new ResidencePlayer(player); - addPlayer(resPlayer); - } else { - resPlayer.updatePlayer(player); - } - return resPlayer; + ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId().toString()); + if (resPlayer == null) { + resPlayer = new ResidencePlayer(player); + addPlayer(resPlayer); + } else { + resPlayer.updatePlayer(player); + } + return resPlayer; } public ResidencePlayer playerJoin(UUID uuid) { - ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); - if (resPlayer == null) { - OfflinePlayer off = Bukkit.getOfflinePlayer(uuid); - if (off != null) { - resPlayer = new ResidencePlayer(off); - addPlayer(resPlayer); - } - } - return resPlayer; + ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); + if (resPlayer == null) { + OfflinePlayer off = Bukkit.getOfflinePlayer(uuid); + if (off != null) { + resPlayer = new ResidencePlayer(off); + addPlayer(resPlayer); + } + } + return resPlayer; } public ResidencePlayer playerJoin(String player) { - if (!players.containsKey(player.toLowerCase())) { - ResidencePlayer resPlayer = new ResidencePlayer(player); - addPlayer(resPlayer); - return resPlayer; - } - return null; + if (!players.containsKey(player.toLowerCase())) { + ResidencePlayer resPlayer = new ResidencePlayer(player); + addPlayer(resPlayer); + return resPlayer; + } + return null; } public ResidencePlayer playerJoin(String player, UUID uuid) { - if (!players.containsKey(player.toLowerCase())) { - ResidencePlayer resPlayer = new ResidencePlayer(player, uuid); - addPlayer(resPlayer); - return resPlayer; - } - return null; + if (!players.containsKey(player.toLowerCase())) { + ResidencePlayer resPlayer = new ResidencePlayer(player, uuid); + addPlayer(resPlayer); + return resPlayer; + } + return null; } public int getResidenceCount(UUID uuid) { - ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); - if (resPlayer != null) { - return resPlayer.getResList().size(); - } - return 0; + ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); + if (resPlayer != null) { + return resPlayer.getResList().size(); + } + return 0; } @Override public ArrayList getResidenceList(UUID uuid) { - ArrayList temp = new ArrayList(); + ArrayList temp = new ArrayList(); // playerJoin(player, false); - ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); - if (resPlayer != null) { - for (ClaimedResidence one : resPlayer.getResList()) { - temp.add(one.getName()); - } - return temp; - } - return temp; + ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); + if (resPlayer != null) { + for (ClaimedResidence one : resPlayer.getResList()) { + temp.add(one.getName()); + } + return temp; + } + return temp; } @Override public ArrayList getResidenceList(String name) { - Player player = Bukkit.getPlayer(name); - if (player != null) - return getResidenceList(player.getUniqueId()); - ArrayList temp = new ArrayList(); - ResidencePlayer resPlayer = this.getResidencePlayer(name); - if (resPlayer != null) { - for (ClaimedResidence one : resPlayer.getResList()) { - temp.add(one.getName()); - } - return temp; - } - return temp; + Player player = Bukkit.getPlayer(name); + if (player != null) + return getResidenceList(player.getUniqueId()); + ArrayList temp = new ArrayList(); + ResidencePlayer resPlayer = this.getResidencePlayer(name); + if (resPlayer != null) { + for (ClaimedResidence one : resPlayer.getResList()) { + temp.add(one.getName()); + } + return temp; + } + return temp; } @Override public ArrayList getResidenceList(String player, boolean showhidden) { - return getResidenceList(player, showhidden, false); + return getResidenceList(player, showhidden, false); } public ArrayList getResidenceList(String player, boolean showhidden, boolean onlyHidden) { - ArrayList temp = new ArrayList(); + ArrayList temp = new ArrayList(); // playerJoin(player, false); - ResidencePlayer resPlayer = this.getResidencePlayer(player); - if (resPlayer == null) - return temp; - for (ClaimedResidence one : resPlayer.getResList()) { - boolean hidden = one.getPermissions().has("hidden", false); - if (!showhidden && hidden) - continue; + ResidencePlayer resPlayer = this.getResidencePlayer(player); + if (resPlayer == null) + return temp; + for (ClaimedResidence one : resPlayer.getResList()) { + boolean hidden = one.getPermissions().has("hidden", false); + if (!showhidden && hidden) + continue; - if (onlyHidden && !hidden) - continue; + if (onlyHidden && !hidden) + continue; - temp.add(plugin.msg(lm.Residence_List, "", one.getName(), one.getWorld()) + - (hidden ? plugin.msg(lm.Residence_Hidden) : "")); - } - Collections.sort(temp, String.CASE_INSENSITIVE_ORDER); - return temp; + temp.add(plugin.msg(lm.Residence_List, "", one.getName(), one.getWorld()) + + (hidden ? plugin.msg(lm.Residence_Hidden) : "")); + } + Collections.sort(temp, String.CASE_INSENSITIVE_ORDER); + return temp; } public ArrayList getResidences(String player, boolean showhidden) { - return getResidences(player, showhidden, false); + return getResidences(player, showhidden, false); } public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden) { - return getResidences(player, showhidden, onlyHidden, null); + return getResidences(player, showhidden, onlyHidden, null); } // All 3 methods could be compacted into one, if needed public ArrayList getResidences(String player, boolean showhidden, boolean onlyHidden, World world) { - ArrayList temp = new ArrayList(); - ResidencePlayer resPlayer = this.getResidencePlayer(player); - if (resPlayer == null) - return temp; - for (ClaimedResidence one : resPlayer.getResList()) { - boolean hidden = one.getPermissions().has(Flags.hidden, false); - if (!showhidden && hidden) - continue; - if (onlyHidden && !hidden) - continue; - if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) - continue; - temp.add(one); - } - return temp; + ArrayList temp = new ArrayList(); + ResidencePlayer resPlayer = this.getResidencePlayer(player); + if (resPlayer == null) + return temp; + for (ClaimedResidence one : resPlayer.getResList()) { + boolean hidden = one.getPermissions().has(Flags.hidden, false); + if (!showhidden && hidden) + continue; + if (onlyHidden && !hidden) + continue; + if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) + continue; + temp.add(one); + } + return temp; } public TreeMap getResidencesMap(String player, boolean showhidden, boolean onlyHidden, World world) { - TreeMap temp = new TreeMap(); - - ResidencePlayer resPlayer = this.getResidencePlayer(player); - if (resPlayer == null) { - return temp; - } - - for (ClaimedResidence one : resPlayer.getResList()) { - boolean hidden = one.getPermissions().has(Flags.hidden, false); - if (!showhidden && hidden) { - continue; - } - if (onlyHidden && !hidden) - continue; - if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) - continue; - temp.put(one.getName(), one); - } - return temp; + TreeMap temp = new TreeMap(); + + ResidencePlayer resPlayer = this.getResidencePlayer(player); + if (resPlayer == null) { + return temp; + } + + for (ClaimedResidence one : resPlayer.getResList()) { + boolean hidden = one.getPermissions().has(Flags.hidden, false); + if (!showhidden && hidden) { + continue; + } + if (onlyHidden && !hidden) + continue; + if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) + continue; + temp.put(one.getName(), one); + } + return temp; } public TreeMap getTrustedResidencesMap(String player, boolean showhidden, boolean onlyHidden, World world) { - TreeMap temp = new TreeMap(); - - ResidencePlayer resPlayer = this.getResidencePlayer(player); - if (resPlayer == null) { - return temp; - } - - Iterator iter = resPlayer.getTrustedResidenceList().iterator(); - while (iter.hasNext()) { - ClaimedResidence one = iter.next(); - boolean hidden = one.getPermissions().has(Flags.hidden, false); - if (!showhidden && hidden) - continue; - if (onlyHidden && !hidden) - continue; - if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) - continue; - if (!one.isTrusted(player)) { - iter.remove(); - continue; - } - temp.put(one.getName(), one); - } - return temp; + TreeMap temp = new TreeMap(); + + ResidencePlayer resPlayer = this.getResidencePlayer(player); + if (resPlayer == null) { + return temp; + } + + Iterator iter = resPlayer.getTrustedResidenceList().iterator(); + while (iter.hasNext()) { + ClaimedResidence one = iter.next(); + boolean hidden = one.getPermissions().has(Flags.hidden, false); + if (!showhidden && hidden) + continue; + if (onlyHidden && !hidden) + continue; + if (world != null && !world.getName().equalsIgnoreCase(one.getWorld())) + continue; + if (!one.isTrusted(player)) { + iter.remove(); + continue; + } + temp.put(one.getName(), one); + } + return temp; } @Override public PermissionGroup getGroup(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); - if (resPlayer != null) { - return resPlayer.getGroup(); - } - return null; + ResidencePlayer resPlayer = getResidencePlayer(player); + if (resPlayer != null) { + return resPlayer.getGroup(); + } + return null; } @Override public int getMaxResidences(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); - if (resPlayer != null) { - return resPlayer.getMaxRes(); - } - return -1; + ResidencePlayer resPlayer = getResidencePlayer(player); + if (resPlayer != null) { + return resPlayer.getMaxRes(); + } + return -1; } @Override public int getMaxSubzones(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); - if (resPlayer != null) { - return resPlayer.getMaxSubzones(); - } - return -1; + ResidencePlayer resPlayer = getResidencePlayer(player); + if (resPlayer != null) { + return resPlayer.getMaxSubzones(); + } + return -1; } @Override public int getMaxSubzoneDepth(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); - if (resPlayer != null) { - return resPlayer.getMaxSubzoneDepth(); - } - return -1; + ResidencePlayer resPlayer = getResidencePlayer(player); + if (resPlayer != null) { + return resPlayer.getMaxSubzoneDepth(); + } + return -1; } @Override public int getMaxRents(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); - if (resPlayer != null) { - return resPlayer.getMaxRents(); - } - return -1; + ResidencePlayer resPlayer = getResidencePlayer(player); + if (resPlayer != null) { + return resPlayer.getMaxRents(); + } + return -1; } // public ResidencePlayer getResidencePlayer(Player player) { @@ -282,145 +282,148 @@ public int getMaxRents(String player) { // } public ResidencePlayer getResidencePlayer(Player player) { - ResidencePlayer resPlayer = null; - if (player == null) - return null; - resPlayer = playersUuid.get(player.getUniqueId().toString()); - if (resPlayer != null) { - resPlayer.updatePlayer(player); - } else { - resPlayer = playerJoin(player); - } - return resPlayer; + ResidencePlayer resPlayer = null; + if (player == null) + return null; + resPlayer = playersUuid.get(player.getUniqueId().toString()); + if (resPlayer != null) { + resPlayer.updatePlayer(player); + } else { + resPlayer = playerJoin(player); + } + return resPlayer; } @Override public ResidencePlayer getResidencePlayer(String player) { - if (player == null) - return null; - - if (player.equalsIgnoreCase("CONSOLE")) - return null; - - Player p = Bukkit.getPlayer(player); - if (p != null) - return getResidencePlayer(p); - ResidencePlayer rplayer = players.get(player.toLowerCase()); - if (rplayer != null) { - return rplayer; - } - return playerJoin(player); + if (player == null) + return null; + + if (player.equalsIgnoreCase("CONSOLE")) + return null; + + Player p = Bukkit.getPlayer(player); + if (p != null) + return getResidencePlayer(p); + ResidencePlayer rplayer = players.get(player.toLowerCase()); + if (rplayer != null) { + return rplayer; + } + return playerJoin(player); } public ResidencePlayer getResidencePlayer(UUID uuid) { - Player p = Bukkit.getPlayer(uuid); - if (p != null) - return getResidencePlayer(p); - ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); - if (resPlayer != null) { - return resPlayer; - } - return playerJoin(uuid); + if (uuid == null) + return null; + + Player p = Bukkit.getPlayer(uuid); + if (p != null) + return getResidencePlayer(p); + ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); + if (resPlayer != null) { + return resPlayer; + } + return playerJoin(uuid); } public ResidencePlayer getResidencePlayer(String name, UUID uuid) { - if (uuid.toString().equals(plugin.getServerLandUUID())) - return null; - Player p = Bukkit.getPlayer(uuid); - if (p != null) { - return getResidencePlayer(p); - } - ResidencePlayer resPlayer = this.playersUuid.get(uuid.toString()); - if (resPlayer != null) { - return resPlayer; - } - - if (name != null) { - resPlayer = this.players.get(name.toLowerCase()); - if (resPlayer != null && resPlayer.getUniqueId() == null) { - resPlayer.setUuid(uuid); - this.playersUuid.put(uuid.toString(), resPlayer); - } - } - if (resPlayer != null) - return resPlayer; - - return playerJoin(name, uuid); + if (uuid.toString().equals(plugin.getServerLandUUID())) + return null; + Player p = Bukkit.getPlayer(uuid); + if (p != null) { + return getResidencePlayer(p); + } + ResidencePlayer resPlayer = this.playersUuid.get(uuid.toString()); + if (resPlayer != null) { + return resPlayer; + } + + if (name != null) { + resPlayer = this.players.get(name.toLowerCase()); + if (resPlayer != null && resPlayer.getUniqueId() == null) { + resPlayer.setUuid(uuid); + this.playersUuid.put(uuid.toString(), resPlayer); + } + } + if (resPlayer != null) + return resPlayer; + + return playerJoin(name, uuid); } public void addResidence(UUID uuid, ClaimedResidence residence) { - ResidencePlayer resPlayer = getResidencePlayer(uuid); - if (resPlayer != null) { - resPlayer.addResidence(residence); - } - return; + ResidencePlayer resPlayer = getResidencePlayer(uuid); + if (resPlayer != null) { + resPlayer.addResidence(residence); + } + return; } public void addResidence(Player player, ClaimedResidence residence) { - addResidence(player.getUniqueId(), residence); + addResidence(player.getUniqueId(), residence); } public void addResidence(String player, ClaimedResidence residence) { - ResidencePlayer resPlayer = getResidencePlayer(player, residence.getOwnerUUID()); - if (resPlayer != null) { - - if (resPlayer.getUniqueId() == null) { - Bukkit.getConsoleSender().sendMessage(" <--------------------- " + resPlayer.getUniqueId() + " " + residence.getOwnerUUID()); - } - - resPlayer.addResidence(residence); - } - - // Adding trusted residences - try { - if (residence.perms.playerFlags != null) { - for (Entry> one : residence.perms.playerFlags.entrySet()) { - String name = one.getKey(); - if (name.length() == 36) - name = residence.perms.cachedPlayerNameUUIDs.get(UUID.fromString(one.getKey())); - - if (!residence.isTrusted(name)) - continue; - ResidencePlayer rplayer = null; - if (one.getKey().length() == 36) - rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(UUID.fromString(one.getKey())); - else - rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(name); - if (rplayer == null) - continue; - rplayer.addTrustedResidence(residence); - } - } - } catch (Throwable e) { - e.printStackTrace(); - } + ResidencePlayer resPlayer = getResidencePlayer(player, residence.getOwnerUUID()); + if (resPlayer != null) { + + if (resPlayer.getUniqueId() == null) { + Bukkit.getConsoleSender().sendMessage(" <--------------------- " + resPlayer.getUniqueId() + " " + residence.getOwnerUUID()); + } + + resPlayer.addResidence(residence); + } + + // Adding trusted residences + try { + if (residence.perms.playerFlags != null) { + for (Entry> one : residence.perms.playerFlags.entrySet()) { + String name = one.getKey(); + if (name.length() == 36) + name = residence.perms.cachedPlayerNameUUIDs.get(UUID.fromString(one.getKey())); + + if (!residence.isTrusted(name)) + continue; + ResidencePlayer rplayer = null; + if (one.getKey().length() == 36) + rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(UUID.fromString(one.getKey())); + else + rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer(name); + if (rplayer == null) + continue; + rplayer.addTrustedResidence(residence); + } + } + } catch (Throwable e) { + e.printStackTrace(); + } } public void removeResFromPlayer(ClaimedResidence residence) { - if (residence == null) - return; - removeResFromPlayer(residence.getOwnerUUID(), residence); + if (residence == null) + return; + removeResFromPlayer(residence.getOwnerUUID(), residence); } public void removeResFromPlayer(UUID uuid, ClaimedResidence residence) { - ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); - if (resPlayer != null) { - resPlayer.removeResidence(residence); - } + ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); + if (resPlayer != null) { + resPlayer.removeResidence(residence); + } } public void removeResFromPlayer(OfflinePlayer player, ClaimedResidence residence) { - removeResFromPlayer(player.getUniqueId(), residence); + removeResFromPlayer(player.getUniqueId(), residence); } public void removeResFromPlayer(Player player, ClaimedResidence residence) { - removeResFromPlayer(player.getUniqueId(), residence); + removeResFromPlayer(player.getUniqueId(), residence); } public void removeResFromPlayer(String player, ClaimedResidence residence) { - ResidencePlayer resPlayer = this.getResidencePlayer(player); - if (resPlayer != null) { - resPlayer.removeResidence(residence); - } + ResidencePlayer resPlayer = this.getResidencePlayer(player); + if (resPlayer != null) { + resPlayer.removeResidence(residence); + } } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 2f491a58b..7d720aede 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -608,63 +608,8 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole residences.remove(name.toLowerCase()); - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1) && plugin.getConfigManager().isUseClean() && plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) { - - CuboidArea[] arr = res.getAreaArray(); - CMIScheduler.runTaskAsynchronously(() -> { - ChunkSnapshot chunkSnapshot = null; - int chunkX = 0; - int chunkZ = 0; - Set locations = new HashSet(); - for (CuboidArea area : arr) { - Location low = area.getLowLocation().clone(); - Location high = area.getHighLocation().clone(); - - if (high.getBlockY() > plugin.getConfigManager().getCleanLevel()) { - - if (low.getBlockY() < plugin.getConfigManager().getCleanLevel()) - low.setY(plugin.getConfigManager().getCleanLevel()); - World world = low.getWorld(); - for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { - for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { - int hy = world.getHighestBlockYAt(x, z); - if (high.getBlockY() < hy) - hy = high.getBlockY(); - - int cx = Math.abs(x % 16); - int cz = Math.abs(z % 16); - if (chunkSnapshot == null || x >> 4 != chunkX || z >> 4 != chunkZ) { - if (!world.getBlockAt(x, 0, z).getChunk().isLoaded()) { - world.getBlockAt(x, 0, z).getChunk().load(); - chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(false, false, false); - world.getBlockAt(x, 0, z).getChunk().unload(); - } else { - chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(); - } - chunkX = x >> 4; - chunkZ = z >> 4; - } - - if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - for (int y = low.getBlockY(); y <= hy; y++) { - BlockData type = chunkSnapshot.getBlockData(cx, y, cz); - if (!plugin.getConfigManager().getCleanBlocks().contains(type.getMaterial())) - continue; - locations.add(new Location(world, x, y, z)); - } - } - } - } - } - } - CMIScheduler.runTask(() -> { - for (Location one : locations) { - CMIScheduler.runAtLocation(one, () -> one.getBlock().setType(Material.AIR)); - } - }); + regenerateArea(res); - }); - } if (plugin.getConfigManager().isRemoveLwcOnDelete() && plugin.isLwcPresent()) ResidenceLWCListener.removeLwcFromResidence(player, res); if (regenerate) { @@ -682,17 +627,7 @@ public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boole } } - plugin.getLeaseManager().removeExpireTime(res); - - for (ClaimedResidence oneSub : res.getSubzones()) { - plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), oneSub); - plugin.getRentManager().removeRentable(name + "." + oneSub.getResidenceName()); - plugin.getTransactionManager().removeFromSale(name + "." + oneSub.getResidenceName()); - } - - plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), res); - plugin.getRentManager().removeRentable(name); - plugin.getTransactionManager().removeFromSale(name); + cleanResidenceRecords(res, true); if (!res.isServerLand()) { if (parent == null && plugin.getConfigManager().enableEconomy() && plugin.getConfigManager().useResMoneyBack()) { @@ -713,16 +648,74 @@ else if (rPlayer != null) } } + private void regenerateArea(ClaimedResidence res) { + if (Version.isCurrentLower(Version.v1_13_R1) || !plugin.getConfigManager().isUseClean() || !plugin.getConfigManager().getCleanWorlds().contains(res.getWorld())) + return; + + CuboidArea[] arr = res.getAreaArray(); + CMIScheduler.runTaskAsynchronously(() -> { + ChunkSnapshot chunkSnapshot = null; + int chunkX = 0; + int chunkZ = 0; + Set locations = new HashSet(); + for (CuboidArea area : arr) { + Location low = area.getLowLocation().clone(); + Location high = area.getHighLocation().clone(); + + if (high.getBlockY() <= plugin.getConfigManager().getCleanLevel()) + continue; + + if (low.getBlockY() < plugin.getConfigManager().getCleanLevel()) + low.setY(plugin.getConfigManager().getCleanLevel()); + World world = low.getWorld(); + for (int x = low.getBlockX(); x <= high.getBlockX(); x++) { + for (int z = low.getBlockZ(); z <= high.getBlockZ(); z++) { + int hy = world.getHighestBlockYAt(x, z); + if (high.getBlockY() < hy) + hy = high.getBlockY(); + + int cx = Math.abs(x % 16); + int cz = Math.abs(z % 16); + if (chunkSnapshot == null || x >> 4 != chunkX || z >> 4 != chunkZ) { + if (!world.getBlockAt(x, 0, z).getChunk().isLoaded()) { + world.getBlockAt(x, 0, z).getChunk().load(); + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(false, false, false); + world.getBlockAt(x, 0, z).getChunk().unload(); + } else { + chunkSnapshot = world.getBlockAt(x, 0, z).getChunk().getChunkSnapshot(); + } + chunkX = x >> 4; + chunkZ = z >> 4; + } + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + for (int y = low.getBlockY(); y <= hy; y++) { + BlockData type = chunkSnapshot.getBlockData(cx, y, cz); + if (!plugin.getConfigManager().getCleanBlocks().contains(type.getMaterial())) + continue; + locations.add(new Location(world, x, y, z)); + } + } + } + } + } + CMIScheduler.runTask(() -> { + for (Location one : locations) { + CMIScheduler.runAtLocation(one, () -> one.getBlock().setType(Material.AIR)); + } + }); + }); + } + public void removeAllByOwner(String owner) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(owner); + ResidencePlayer rPlayer = ResidencePlayer.get(owner); for (ClaimedResidence oneRes : rPlayer.getResList()) { removeResidence(rPlayer, oneRes, true); } } public int getOwnedZoneCount(String player) { - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - return rPlayer.getResAmount(); + return ResidencePlayer.get(player).getResAmount(); } public boolean hasMaxZones(String player, int target) { @@ -1460,6 +1453,9 @@ public void removeAllFromWorld(CommandSender sender, String world, List if (playerExceptions.contains(next.getOwnerUUID().toString())) continue; } + + cleanResidenceRecords(next, false); + it.remove(); count++; } @@ -1475,6 +1471,20 @@ public void removeAllFromWorld(CommandSender sender, String world, List // plugin.getPlayerManager().fillList(); } + private void cleanResidenceRecords(ClaimedResidence res, boolean removeSigns) { + String name = res.getName(); + + plugin.getLeaseManager().removeExpireTime(res); + for (ClaimedResidence oneSub : res.getSubzones()) { + plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), oneSub); + plugin.getRentManager().removeRentable(ClaimedResidence.getByName(name + "." + oneSub.getResidenceName()), removeSigns); + plugin.getTransactionManager().removeFromSale(ClaimedResidence.getByName(name + "." + oneSub.getResidenceName()), removeSigns); + } + plugin.getPlayerManager().removeResFromPlayer(res.getOwnerUUID(), res); + plugin.getRentManager().removeRentable(ClaimedResidence.getByName(name), removeSigns); + plugin.getTransactionManager().removeFromSale(ClaimedResidence.getByName(name), removeSigns); + } + public int getResidenceCount() { return residences.size(); } From 812b6e598abb1da97aba5e78c1fca373d262b502 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 29 May 2024 15:17:45 +0300 Subject: [PATCH 1104/1142] Residence create limit check fix --- .../bukkit/residence/commands/select.java | 450 +++++++++--------- .../protection/ClaimedResidence.java | 8 +- .../protection/ResidenceManager.java | 2 +- 3 files changed, 234 insertions(+), 226 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/select.java b/src/com/bekvon/bukkit/residence/commands/select.java index f0a07394b..2d73a9294 100644 --- a/src/com/bekvon/bukkit/residence/commands/select.java +++ b/src/com/bekvon/bukkit/residence/commands/select.java @@ -21,239 +21,243 @@ import com.bekvon.bukkit.residence.protection.CuboidArea; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; public class select implements cmd { @Override @CommandAnnotation(simple = true, priority = 1300) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; - - Player player = (Player) sender; - - ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); - - PermissionGroup group = rPlayer.getGroup(); - if (!group.selectCommandAccess() && !resadmin) { - plugin.msg(player, lm.Select_Disabled); - return true; - } - if (!group.canCreateResidences() && rPlayer.getMaxSubzones() <= 0 && !resadmin) { - plugin.msg(player, lm.Select_Disabled); - return true; - } - if (!ResPerm.create.hasPermission(player) && !ResPerm.select.hasPermission(player) && !resadmin) { - plugin.msg(player, lm.Select_Disabled); - return true; - } - - if (args.length == 1) { - switch (args[0].toLowerCase()) { - case "size": - case "cost": - if (plugin.getSelectionManager().hasPlacedBoth(player) || plugin.getSelectionManager().worldEdit(player)) { - try { - plugin.getSelectionManager().showSelectionInfo(player); - return true; - } catch (Exception ex) { - Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); - return true; - } - } - return false; - case "vert": - plugin.getSelectionManager().vert(player, resadmin); - plugin.getSelectionManager().afterSelectionUpdate(player, true); - return true; - case "sky": - plugin.getSelectionManager().sky(player, resadmin); - plugin.getSelectionManager().afterSelectionUpdate(player, true); - return true; - case "bedrock": - plugin.getSelectionManager().bedrock(player, resadmin); - plugin.getSelectionManager().afterSelectionUpdate(player, true); - return true; - case "coords": - plugin.msg(player, lm.General_Separator); - - if (!plugin.getSelectionManager().hasPlacedBoth(player)) { - plugin.msg(player, lm.Select_Points); - return true; - } - - Location playerLoc1 = plugin.getSelectionManager().getPlayerLoc1(player); - if (playerLoc1 != null) { - plugin.msg(player, lm.Select_Primary, plugin.msg(lm.General_CoordsTop, playerLoc1.getBlockX(), playerLoc1 - .getBlockY(), playerLoc1.getBlockZ())); - } - Location playerLoc2 = plugin.getSelectionManager().getPlayerLoc2(player); - if (playerLoc2 != null) { - plugin.msg(player, lm.Select_Secondary, plugin.msg(lm.General_CoordsBottom, playerLoc2.getBlockX(), - playerLoc2.getBlockY(), playerLoc2.getBlockZ())); - } - plugin.msg(player, lm.General_Separator); - plugin.getSelectionManager().afterSelectionUpdate(player, false); - return true; - case "chunk": - plugin.getSelectionManager().getSelection(player).selectChunk(); - plugin.getSelectionManager().afterSelectionUpdate(player, true); - return true; - case "worldedit": - if (plugin.getSelectionManager().worldEdit(player)) { - plugin.msg(player, lm.Select_Success); - plugin.getSelectionManager().afterSelectionUpdate(player, false); - } - return true; - } - } else if (args.length == 2) { - int amount = 0; - switch (args[0].toLowerCase()) { - case "expand": - case "contract": - case "shift": - try { - amount = Integer.parseInt(args[1]); - } catch (Exception ex) { - plugin.msg(player, lm.Invalid_Amount); - return true; - } - } - - switch (args[0].toLowerCase()) { - case "expand": - plugin.getSelectionManager().modify(player, false, amount); - return true; - case "contract": - plugin.getSelectionManager().contract(player, amount); - return true; - case "shift": - if (amount > 100) - amount = 100; - if (amount < -100) - amount = -100; - plugin.getSelectionManager().modify(player, true, amount); - return true; - } - } - if ((args.length == 1 || args.length == 2) && args[0].equals("auto")) { - Player target = player; - if (args.length == 2) { - if (!ResPerm.select_auto_others.hasPermission(player, true)) { - return true; - } - target = Bukkit.getPlayer(args[1]); - if (target == null) { - plugin.msg(player, lm.General_NotOnline); - return true; - } - } - plugin.getSelectionManager().clearSelection(target); - - plugin.getSelectionManager().placeLoc1(player, player.getLocation().clone(), false); - plugin.getSelectionManager().placeLoc2(player, player.getLocation().clone().add(0, 1, 0), true); - - plugin.getAutoSelectionManager().switchAutoSelection(target); - return true; - } - if (args.length > 0 && args[0].equals("residence")) { - String resName; - String areaName; - ClaimedResidence res = null; - if (args.length > 1) { - res = plugin.getResidenceManager().getByName(args[1]); - } else { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - } - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } - resName = res.getName(); - CuboidArea area = null; - if (args.length > 2) { - area = res.getArea(args[2]); - areaName = args[2]; - } else { - areaName = res.getAreaIDbyLoc(player.getLocation()); - area = res.getArea(areaName); - } - if (area != null) { - plugin.getSelectionManager().placeLoc1(player, area.getHighLocation(), false); - plugin.getSelectionManager().placeLoc2(player, area.getLowLocation(), true); - plugin.msg(player, lm.Select_Area, areaName, resName); - } else { - plugin.msg(player, lm.Area_NonExist); - } - return true; - } - try { - plugin.getSelectionManager().selectBySize(player, Integer.parseInt(args[0]), Integer.parseInt(args[1]), Integer.parseInt(args[2])); - return true; - } catch (Exception ex) { + + if (!(sender instanceof Player)) + return false; + + Player player = (Player) sender; + + ResidencePlayer rPlayer = plugin.getPlayerManager().getResidencePlayer(player); + + PermissionGroup group = rPlayer.getGroup(); + + if (!group.selectCommandAccess() && !resadmin) { + plugin.msg(player, lm.Select_Disabled); + return true; + } + + if (!group.canCreateResidences() && rPlayer.getMaxSubzones() <= 0 && !resadmin) { + plugin.msg(player, lm.Select_Disabled); + return true; + } + + if (!ResPerm.create.hasPermission(player) && !ResPerm.select.hasPermission(player) && !resadmin) { + plugin.msg(player, lm.Select_Disabled); + return true; + } + if (args.length == 1) { + switch (args[0].toLowerCase()) { + case "size": + case "cost": + if (plugin.getSelectionManager().hasPlacedBoth(player) || plugin.getSelectionManager().worldEdit(player)) { + try { + plugin.getSelectionManager().showSelectionInfo(player); + return true; + } catch (Exception ex) { + Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex); + return true; + } + } + return false; + case "vert": + plugin.getSelectionManager().vert(player, resadmin); + plugin.getSelectionManager().afterSelectionUpdate(player, true); + return true; + case "sky": + plugin.getSelectionManager().sky(player, resadmin); + plugin.getSelectionManager().afterSelectionUpdate(player, true); + return true; + case "bedrock": + plugin.getSelectionManager().bedrock(player, resadmin); + plugin.getSelectionManager().afterSelectionUpdate(player, true); + return true; + case "coords": + plugin.msg(player, lm.General_Separator); + + if (!plugin.getSelectionManager().hasPlacedBoth(player)) { + plugin.msg(player, lm.Select_Points); + return true; + } + + Location playerLoc1 = plugin.getSelectionManager().getPlayerLoc1(player); + if (playerLoc1 != null) { + plugin.msg(player, lm.Select_Primary, plugin.msg(lm.General_CoordsTop, playerLoc1.getBlockX(), playerLoc1 + .getBlockY(), playerLoc1.getBlockZ())); + } + Location playerLoc2 = plugin.getSelectionManager().getPlayerLoc2(player); + if (playerLoc2 != null) { + plugin.msg(player, lm.Select_Secondary, plugin.msg(lm.General_CoordsBottom, playerLoc2.getBlockX(), + playerLoc2.getBlockY(), playerLoc2.getBlockZ())); + } + plugin.msg(player, lm.General_Separator); + plugin.getSelectionManager().afterSelectionUpdate(player, false); + return true; + case "chunk": + plugin.getSelectionManager().getSelection(player).selectChunk(); + plugin.getSelectionManager().afterSelectionUpdate(player, true); + return true; + case "worldedit": + if (plugin.getSelectionManager().worldEdit(player)) { + plugin.msg(player, lm.Select_Success); + plugin.getSelectionManager().afterSelectionUpdate(player, false); + } + return true; + } + } else if (args.length == 2) { + int amount = 0; + switch (args[0].toLowerCase()) { + case "expand": + case "contract": + case "shift": + try { + amount = Integer.parseInt(args[1]); + } catch (Exception ex) { + plugin.msg(player, lm.Invalid_Amount); + return true; + } + } + + switch (args[0].toLowerCase()) { + case "expand": + plugin.getSelectionManager().modify(player, false, amount); + return true; + case "contract": + plugin.getSelectionManager().contract(player, amount); + return true; + case "shift": + if (amount > 100) + amount = 100; + if (amount < -100) + amount = -100; + plugin.getSelectionManager().modify(player, true, amount); + return true; + } + } + if ((args.length == 1 || args.length == 2) && args[0].equals("auto")) { + Player target = player; + if (args.length == 2) { + if (!ResPerm.select_auto_others.hasPermission(player, true)) { + return true; + } + target = Bukkit.getPlayer(args[1]); + if (target == null) { + plugin.msg(player, lm.General_NotOnline); + return true; + } + } + plugin.getSelectionManager().clearSelection(target); + + plugin.getSelectionManager().placeLoc1(player, player.getLocation().clone(), false); + plugin.getSelectionManager().placeLoc2(player, player.getLocation().clone().add(0, 1, 0), true); + + plugin.getAutoSelectionManager().switchAutoSelection(target); + return true; + } + if (args.length > 0 && args[0].equals("residence")) { + String resName; + String areaName; + ClaimedResidence res = null; + if (args.length > 1) { + res = plugin.getResidenceManager().getByName(args[1]); + } else { + res = plugin.getResidenceManager().getByLoc(player.getLocation()); + } + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } + resName = res.getName(); + CuboidArea area = null; + if (args.length > 2) { + area = res.getArea(args[2]); + areaName = args[2]; + } else { + areaName = res.getAreaIDbyLoc(player.getLocation()); + area = res.getArea(areaName); + } + if (area != null) { + plugin.getSelectionManager().placeLoc1(player, area.getHighLocation(), false); + plugin.getSelectionManager().placeLoc2(player, area.getLowLocation(), true); + plugin.msg(player, lm.Select_Area, areaName, resName); + } else { + plugin.msg(player, lm.Area_NonExist); + } + return true; + } + try { + plugin.getSelectionManager().selectBySize(player, Integer.parseInt(args[0]), Integer.parseInt(args[1]), Integer.parseInt(args[2])); + return true; + } catch (Exception ex) { // plugin.msg(player, lm.Select_Fail); - return false; - } + return false; + } } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - // Main command - c.get("Description", "Selection Commands"); - c.get("Info", Arrays.asList("This command selects areas for usage with residence.", - "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle.")); - LocaleManager.addTabCompleteSub(this, "[x]", "[y]", "[z]"); - - // Sub commands - c.setFullPath(c.getPath() + "SubCommands."); - - c.get("coords.Description", "Display selected coordinates"); - c.get("coords.Info", Arrays.asList("&eUsage: &6/res select coords")); - LocaleManager.addTabCompleteSub(this, "coords"); - - c.get("size.Description", "Display selected size"); - c.get("size.Info", Arrays.asList("&eUsage: &6/res select size")); - LocaleManager.addTabCompleteSub(this, "size"); - - c.get("auto.Description", "Turns on auto selection tool"); - c.get("auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]")); - LocaleManager.addTabCompleteSub(this, "auto", "[playername]"); - - c.get("cost.Description", "Display selection cost"); - c.get("cost.Info", Arrays.asList("&eUsage: &6/res select cost")); - LocaleManager.addTabCompleteSub(this, "cost"); - - c.get("vert.Description", "Expand Selection Vertically"); - c.get("vert.Info", Arrays.asList("&eUsage: &6/res select vert", "Will expand selection as high and as low as allowed.")); - LocaleManager.addTabCompleteSub(this, "vert"); - - c.get("sky.Description", "Expand Selection to Sky"); - c.get("sky.Info", Arrays.asList("&eUsage: &6/res select sky", "Expands as high as your allowed to go.")); - LocaleManager.addTabCompleteSub(this, "sky"); - - c.get("bedrock.Description", "Expand Selection to Bedrock"); - c.get("bedrock.Info", Arrays.asList("&eUsage: &6/res select bedrock", "Expands as low as your allowed to go.")); - LocaleManager.addTabCompleteSub(this, "bedrock"); - - c.get("expand.Description", "Expand selection in a direction."); - c.get("expand.Info", Arrays.asList("&eUsage: &6/res select expand ", "Expands in the direction your looking.")); - LocaleManager.addTabCompleteSub(this, "expand", "5"); - - c.get("shift.Description", "Shift selection in a direction"); - c.get("shift.Info", Arrays.asList("&eUsage: &6/res select shift ", "Pushes your selection by in the direction your looking.")); - LocaleManager.addTabCompleteSub(this, "shift", "5"); - - c.get("chunk.Description", "Select the chunk your currently in."); - c.get("chunk.Info", Arrays.asList("&eUsage: &6/res select chunk", "Selects the chunk your currently standing in.")); - LocaleManager.addTabCompleteSub(this, "chunk"); - - c.get("residence.Description", "Select a existing area in a residence."); - c.get("residence.Info", Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence.")); - LocaleManager.addTabCompleteSub(this, "residence", "[residence]"); - - c.get("worldedit.Description", "Set selection using the current WorldEdit selection."); - c.get("worldedit.Info", Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection.")); - LocaleManager.addTabCompleteSub(this, "worldedit"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + // Main command + c.get("Description", "Selection Commands"); + c.get("Info", Arrays.asList("This command selects areas for usage with residence.", + "/res select [x] [y] [z] - selects a radius of blocks, with you in the middle.")); + LocaleManager.addTabCompleteSub(this, "[x]", "[y]", "[z]"); + + // Sub commands + c.setFullPath(c.getPath() + "SubCommands."); + + c.get("coords.Description", "Display selected coordinates"); + c.get("coords.Info", Arrays.asList("&eUsage: &6/res select coords")); + LocaleManager.addTabCompleteSub(this, "coords"); + + c.get("size.Description", "Display selected size"); + c.get("size.Info", Arrays.asList("&eUsage: &6/res select size")); + LocaleManager.addTabCompleteSub(this, "size"); + + c.get("auto.Description", "Turns on auto selection tool"); + c.get("auto.Info", Arrays.asList("&eUsage: &6/res select auto [playername]")); + LocaleManager.addTabCompleteSub(this, "auto", "[playername]"); + + c.get("cost.Description", "Display selection cost"); + c.get("cost.Info", Arrays.asList("&eUsage: &6/res select cost")); + LocaleManager.addTabCompleteSub(this, "cost"); + + c.get("vert.Description", "Expand Selection Vertically"); + c.get("vert.Info", Arrays.asList("&eUsage: &6/res select vert", "Will expand selection as high and as low as allowed.")); + LocaleManager.addTabCompleteSub(this, "vert"); + + c.get("sky.Description", "Expand Selection to Sky"); + c.get("sky.Info", Arrays.asList("&eUsage: &6/res select sky", "Expands as high as your allowed to go.")); + LocaleManager.addTabCompleteSub(this, "sky"); + + c.get("bedrock.Description", "Expand Selection to Bedrock"); + c.get("bedrock.Info", Arrays.asList("&eUsage: &6/res select bedrock", "Expands as low as your allowed to go.")); + LocaleManager.addTabCompleteSub(this, "bedrock"); + + c.get("expand.Description", "Expand selection in a direction."); + c.get("expand.Info", Arrays.asList("&eUsage: &6/res select expand ", "Expands in the direction your looking.")); + LocaleManager.addTabCompleteSub(this, "expand", "5"); + + c.get("shift.Description", "Shift selection in a direction"); + c.get("shift.Info", Arrays.asList("&eUsage: &6/res select shift ", "Pushes your selection by in the direction your looking.")); + LocaleManager.addTabCompleteSub(this, "shift", "5"); + + c.get("chunk.Description", "Select the chunk your currently in."); + c.get("chunk.Info", Arrays.asList("&eUsage: &6/res select chunk", "Selects the chunk your currently standing in.")); + LocaleManager.addTabCompleteSub(this, "chunk"); + + c.get("residence.Description", "Select a existing area in a residence."); + c.get("residence.Info", Arrays.asList("&eUsage: &6/res select residence ", "Selects a existing area in a residence.")); + LocaleManager.addTabCompleteSub(this, "residence", "[residence]"); + + c.get("worldedit.Description", "Set selection using the current WorldEdit selection."); + c.get("worldedit.Info", Arrays.asList("&eUsage: &6/res select worldedit", "Sets selection area using the current WorldEdit selection.")); + LocaleManager.addTabCompleteSub(this, "worldedit"); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 3370f039e..40e86317a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -311,14 +311,17 @@ public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin return true; ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(player); PermissionGroup group = rPlayer.getGroup(); + if (area.getXSize() > rPlayer.getMaxX()) { Residence.getInstance().msg(player, lm.Area_ToBigX, area.getXSize(), rPlayer.getMaxX()); return false; } - if (area.getYSize() > group.getMaxY() + (-group.getMinY())) { + + if (area.getYSize() > group.getMaxY()) { Residence.getInstance().msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); return false; } + if (area.getZSize() > rPlayer.getMaxZ()) { Residence.getInstance().msg(player, lm.Area_ToBigZ, area.getZSize(), rPlayer.getMaxZ()); return false; @@ -403,6 +406,7 @@ public boolean addArea(Player player, CuboidArea area, String name, boolean resa } return false; } + if (getParent() == null) { String collideResidence = Residence.getInstance().getResidenceManager().checkAreaCollision(area, this); ClaimedResidence cRes = Residence.getInstance().getResidenceManager().getByName(collideResidence); @@ -2390,6 +2394,6 @@ public Set getTrustedPlayers() { } public static ClaimedResidence getByName(String landName) { - return Residence.getInstance().getResidenceManager().getByName(landName); + return Residence.getInstance().getResidenceManager().getByName(landName); } } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 7d720aede..885d105a8 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -277,7 +277,7 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String plugin.msg(player, lm.Residence_AlreadyExists, residences.get(resName.toLowerCase()).getResidenceName()); return false; } - + newRes.BlockSellPrice = group.getSellPerBlock(); if (!newRes.addArea(player, newArea, "main", resadmin, false)) From 0c451d855cae945b18120791211ca965c292245f Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 29 May 2024 15:30:06 +0300 Subject: [PATCH 1105/1142] Removing some else's residence now needs residence.admin permission node --- .../bukkit/residence/commands/remove.java | 159 +++++++++--------- .../permissions/PermissionManager.java | 1 + 2 files changed, 81 insertions(+), 79 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/remove.java b/src/com/bekvon/bukkit/residence/commands/remove.java index 079ae8a85..2ae1aa285 100644 --- a/src/com/bekvon/bukkit/residence/commands/remove.java +++ b/src/com/bekvon/bukkit/residence/commands/remove.java @@ -16,6 +16,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; public class remove implements cmd { @@ -24,88 +25,88 @@ public class remove implements cmd { @CommandAnnotation(simple = true, priority = 2300) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - ClaimedResidence res = null; - String senderName = sender.getName(); - if (args.length == 1) { - res = plugin.getResidenceManager().getByName(args[0]); - } else if (sender instanceof Player && args.length == 0) { - res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); - } - - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return true; - } - - if (res.isSubzone() && !resadmin && !ResPerm.delete_subzone.hasPermission(sender, lm.Subzone_CantDelete)) { - return true; - } - - Player player = null; - if (sender instanceof Player) - player = (Player) sender; - - if (player != null && res.isSubzone() && - !resadmin && - plugin.getConfigManager().isPreventSubZoneRemoval() && - !res.getParent().isOwner(sender) && - !res.getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue) && - ResPerm.delete_subzone.hasPermission(sender, lm.Subzone_CantDeleteNotOwnerOfParent)) { - return true; - } - - if (!res.isSubzone() && - !resadmin && - !res.isOwner(sender) && - ResPerm.delete.hasPermission(sender, lm.Residence_CantDeleteResidence)) { - return true; - } - - if (!res.isSubzone() && !resadmin && !ResPerm.delete.hasPermission(sender, lm.Residence_CantDeleteResidence)) { - return true; - } - - if (res.getRaid().isRaidInitialized() && !resadmin) { - plugin.msg(sender, lm.Raid_noRemoval); - return true; - } - - plugin.deleteConfirm.remove(senderName); - - String resname = res.getName(); - - if (!plugin.deleteConfirm.containsKey(senderName) || !resname.equalsIgnoreCase(plugin.deleteConfirm.get(senderName))) { - String cmd = "res"; - if (resadmin) - cmd = "resadmin"; - if (sender instanceof Player) { - RawMessage rm = new RawMessage(); - if (res.isSubzone()) { - rm.addText(plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName())).addHover(plugin.msg(lm.info_clickToConfirm)).addCommand(cmd + " confirm"); - } else { - rm.addText(plugin.msg(lm.Residence_DeleteConfirm, res.getResidenceName())).addHover(plugin.msg(lm.info_clickToConfirm)).addCommand(cmd + " confirm"); - } - if (plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()).length() > 0) - rm.show(sender); - } else { - if (res.isSubzone()) - plugin.msg(sender, lm.Subzone_DeleteConfirm, res.getResidenceName()); - else - plugin.msg(sender, lm.Residence_DeleteConfirm, res.getResidenceName()); - } - plugin.deleteConfirm.put(senderName, resname); - } else { - plugin.getResidenceManager().removeResidence(sender, resname, resadmin); - } - return true; + ClaimedResidence res = null; + String senderName = sender.getName(); + if (args.length == 1) { + res = plugin.getResidenceManager().getByName(args[0]); + } else if (sender instanceof Player && args.length == 0) { + res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); + } + + if (res == null) { + plugin.msg(sender, lm.Invalid_Residence); + return true; + } + + if (res.isSubzone() && !resadmin && !ResPerm.delete_subzone.hasPermission(sender, lm.Subzone_CantDelete)) { + return true; + } + Player player = null; + if (sender instanceof Player) + player = (Player) sender; + + if (player != null && + res.isSubzone() && + !resadmin && + plugin.getConfigManager().isPreventSubZoneRemoval() && + !res.getParent().isOwner(sender) && + !res.getPermissions().playerHas(player, Flags.admin, FlagCombo.OnlyTrue) && + ResPerm.delete_subzone.hasPermission(sender, lm.Subzone_CantDeleteNotOwnerOfParent)) { + return true; + } + + if (!res.isSubzone() && + !resadmin && + !res.isOwner(sender) && + !ResPerm.admin.hasPermission(sender, lm.Residence_CantDeleteResidence)) { + return true; + } + + if (!res.isSubzone() && !resadmin && !ResPerm.delete.hasPermission(sender, lm.Residence_CantDeleteResidence)) { + return true; + } + + if (res.getRaid().isRaidInitialized() && !resadmin) { + plugin.msg(sender, lm.Raid_noRemoval); + return true; + } + + plugin.deleteConfirm.remove(senderName); + + String resname = res.getName(); + + if (!plugin.deleteConfirm.containsKey(senderName) || !resname.equalsIgnoreCase(plugin.deleteConfirm.get(senderName))) { + String cmd = "res"; + if (resadmin) + cmd = "resadmin"; + if (sender instanceof Player) { + RawMessage rm = new RawMessage(); + if (res.isSubzone()) { + rm.addText(plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName())).addHover(plugin.msg(lm.info_clickToConfirm)).addCommand(cmd + " confirm"); + } else { + rm.addText(plugin.msg(lm.Residence_DeleteConfirm, res.getResidenceName())).addHover(plugin.msg(lm.info_clickToConfirm)).addCommand(cmd + " confirm"); + } + if (plugin.msg(lm.Subzone_DeleteConfirm, res.getResidenceName()).length() > 0) + rm.show(sender); + } else { + if (res.isSubzone()) + plugin.msg(sender, lm.Subzone_DeleteConfirm, res.getResidenceName()); + else + plugin.msg(sender, lm.Residence_DeleteConfirm, res.getResidenceName()); + } + plugin.deleteConfirm.put(senderName, resname); + } else { + plugin.getResidenceManager().removeResidence(sender, resname, resadmin); + } + return true; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - // Main command - c.get("Description", "Remove residences."); - c.get("Info", Arrays.asList("&eUsage: &6/res remove [residence_name]")); - LocaleManager.addTabCompleteMain(this, "[residence]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + // Main command + c.get("Description", "Remove residences."); + c.get("Info", Arrays.asList("&eUsage: &6/res remove [residence_name]")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index cf26dbf5e..493cd8a41 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -33,6 +33,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; From 1b47b4e2799dd5f1ce537bf251259f1a1b810d61 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 29 May 2024 15:37:33 +0300 Subject: [PATCH 1106/1142] Using Material instead of CMIMaterial for custom blocks --- .../bukkit/residence/ConfigManager.java | 31 ++++++++++--------- .../listeners/ResidencePlayerListener.java | 12 +++---- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 69c40c777..6345661e9 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -37,6 +37,7 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; +import net.Zrips.CMILib.CMILib; import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.CMINumber; import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; @@ -222,9 +223,9 @@ public class ConfigManager { protected boolean CreeperExplodeBelow; protected int CreeperExplodeBelowLevel; - protected List customContainers = new ArrayList(); - protected List customBothClick = new ArrayList(); - protected List customRightClick = new ArrayList(); + protected List customContainers = new ArrayList(); + protected List customBothClick = new ArrayList(); + protected List customRightClick = new ArrayList(); protected List CleanBlocks = new ArrayList(); protected List NoFlowWorlds; @@ -1288,23 +1289,23 @@ public void UpdateConfigFile() { c.addComment("Global.CustomContainers", "Experimental - The following settings are lists of block IDs to be used as part of the checks for the 'container' and 'use' flags when using mods."); List pls = c.get("Global.CustomContainers", new ArrayList()); - for (Object one : pls) { - CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); - if (mat != CMIMaterial.NONE) + for (String one : pls) { + Material mat = CMILib.getInstance().getItemManager().getMaterial(one); + if (mat != null) customContainers.add(mat); } pls = c.get("Global.CustomBothClick", new ArrayList()); - for (Object one : pls) { - CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); - if (mat != CMIMaterial.NONE) + for (String one : pls) { + Material mat = CMILib.getInstance().getItemManager().getMaterial(one); + if (mat != null) customBothClick.add(mat); } pls = c.get("Global.CustomRightClick", new ArrayList()); - for (Object one : pls) { - CMIMaterial mat = CMIMaterial.get(String.valueOf(one)); - if (mat != CMIMaterial.NONE) + for (String one : pls) { + Material mat = CMILib.getInstance().getItemManager().getMaterial(one); + if (mat != null) customRightClick.add(mat); } @@ -2138,15 +2139,15 @@ public boolean isOfflineMode() { return OfflineMode; } - public List getCustomContainers() { + public List getCustomContainers() { return customContainers; } - public List getCustomBothClick() { + public List getCustomBothClick() { return customBothClick; } - public List getCustomRightClick() { + public List getCustomRightClick() { return customRightClick; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 1339a3409..eb03a02b5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -985,7 +985,7 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { private boolean isContainer(Material mat, Block block) { return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals(Flags.container) - || plugin.getConfigManager().getCustomContainers().contains(CMIMaterial.get(block)); + || plugin.getConfigManager().getCustomContainers().contains(block.getType()); } private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { @@ -1042,7 +1042,7 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { return true; } - return plugin.getConfigManager().getCustomRightClick().contains(CMIMaterial.get(block)); + return plugin.getConfigManager().getCustomRightClick().contains(block.getType()); } public static boolean isCanUseEntity_BothClick(Material mat, Block block) { @@ -1067,7 +1067,7 @@ public static boolean isCanUseEntity_BothClick(Material mat, Block block) { case DRAGON_EGG: return true; default: - return Residence.getInstance().getConfigManager().getCustomBothClick().contains(CMIMaterial.get(block)); + return Residence.getInstance().getConfigManager().getCustomBothClick().contains(block.getType()); } } @@ -1534,7 +1534,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } - if (plugin.getConfigManager().getCustomContainers().contains(blockM)) { + if (plugin.getConfigManager().getCustomContainers().contains(mat)) { if (!perms.playerHas(player, Flags.container, hasuse) || !ResPerm.bypass_container.hasPermission(player, 10000L)) { event.setCancelled(true); @@ -1543,12 +1543,12 @@ public void onPlayerInteract(PlayerInteractEvent event) { } } - if (plugin.getConfigManager().getCustomBothClick().contains(blockM) && !hasuse) { + if (plugin.getConfigManager().getCustomBothClick().contains(mat) && !hasuse) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.use); return; } - if (plugin.getConfigManager().getCustomRightClick().contains(blockM) && event.getAction() == Action.RIGHT_CLICK_BLOCK && !hasuse) { + if (plugin.getConfigManager().getCustomRightClick().contains(mat) && event.getAction() == Action.RIGHT_CLICK_BLOCK && !hasuse) { event.setCancelled(true); plugin.msg(player, lm.Flag_Deny, Flags.use); } From fbe116862f9fd9cedda4ed7b6b8150750b13521a Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 29 May 2024 15:56:16 +0300 Subject: [PATCH 1107/1142] Prevent redstone right clicking without permission --- .../ResidencePlayerListener1_16.java | 64 +++++++++++-------- .../protection/ClaimedResidence.java | 14 ++-- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java index bb74168d6..1e9e623ac 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_16.java @@ -10,6 +10,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -22,43 +23,52 @@ public class ResidencePlayerListener1_16 implements Listener { private Residence plugin; public ResidencePlayerListener1_16(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onPlayerInteractRespawn(PlayerInteractEvent event) { - if (event.getPlayer() == null) - return; - // disabling event on world - if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) - return; + if (event.getPlayer() == null) + return; + // disabling event on world + if (plugin.isDisabledWorldListener(event.getPlayer().getWorld())) + return; - if (event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - try { - if (Version.isCurrentHigher(Version.v1_8_R3) && event.getHand() != EquipmentSlot.HAND) - return; - } catch (Exception e) { - } - Player player = event.getPlayer(); + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + try { + if (Version.isCurrentHigher(Version.v1_8_R3) && event.getHand() != EquipmentSlot.HAND) + return; + } catch (Exception e) { + } + Player player = event.getPlayer(); - Block block = event.getClickedBlock(); - if (block == null) - return; + Block block = event.getClickedBlock(); + if (block == null) + return; - Material mat = block.getType(); + Material mat = block.getType(); - if (!mat.equals(Material.RESPAWN_ANCHOR)) - return; + if (mat.equals(Material.RESPAWN_ANCHOR)) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (res == null) + return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - if (res == null) - return; + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.anchor, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.anchor, res.getName()); + event.setCancelled(true); + } + } else if (mat.equals(Material.REDSTONE_WIRE)) { - if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.anchor, FlagCombo.OnlyTrue) && !plugin.isResAdminOn(player)) { - plugin.msg(player, lm.Residence_FlagDeny, Flags.anchor, res.getName()); - event.setCancelled(true); - } + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); + if (res == null) + return; + + if (!res.isOwner(player) && !res.getPermissions().playerHas(player, Flags.build, FlagCombo.TrueOrNone) && !plugin.isResAdminOn(player)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.build, res.getName()); + event.setCancelled(true); + } + } } } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 40e86317a..a75e557a1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1476,11 +1476,12 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r int distance = isSafeTp(reqPlayer); if (distance > 6) { if (distance == 556) - Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirmLava, distance); + lm.General_TeleportConfirmLava.sendMessage(reqPlayer, distance); else if (distance == 555) - Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirmVoid, distance); + lm.General_TeleportConfirmVoid.sendMessage(reqPlayer, distance); else - Residence.getInstance().msg(reqPlayer, lm.General_TeleportConfirm, distance); + lm.General_TeleportConfirm.sendMessage(reqPlayer, distance); + Residence.getInstance().getTeleportMap().put(reqPlayer.getName(), this); return; } @@ -1489,6 +1490,7 @@ else if (distance == 555) boolean bypassDelay = ResPerm.tpdelaybypass.hasPermission(targetPlayer); if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin && !bypassDelay) { + Residence.getInstance().msg(reqPlayer, lm.General_TeleportStarted, this.getName(), Residence.getInstance().getConfigManager().getTeleportDelay()); if (Residence.getInstance().getConfigManager().isTeleportTitleMessage()) @@ -1540,17 +1542,19 @@ public void performDelaydTp(final Location targloc, final Player targetPlayer, P CMIScheduler.runAtLocationLater(targloc, () -> { if (targloc == null || targetPlayer == null || !targetPlayer.isOnline()) return; - if (!Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName()) - && Residence.getInstance().getConfigManager().getTeleportDelay() > 0) + + if (!Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName()) && Residence.getInstance().getConfigManager().getTeleportDelay() > 0) return; else if (Residence.getInstance().getTeleportDelayMap().contains(targetPlayer.getName())) Residence.getInstance().getTeleportDelayMap().remove(targetPlayer.getName()); + targetPlayer.closeInventory(); CMITeleporter.teleportAsync(targetPlayer, targloc); if (near) Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); else Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); + }, Residence.getInstance().getConfigManager().getTeleportDelay() * 20L); } From 2cae67d94532f04b2ac1f69d22f4fb0cb39d131c Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 29 May 2024 16:38:04 +0300 Subject: [PATCH 1108/1142] Preventing spawn eggs from spawning falling blocks inside residence without disabled fallinprotection flag --- .../residence/listeners/ResidenceBlockListener.java | 12 +++++++++--- .../residence/listeners/ResidenceEntityListener.java | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 1926aab27..d8d4ddcf7 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -398,18 +398,25 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { if (event.getEntityType() != EntityType.FALLING_BLOCK) return; Entity ent = event.getEntity(); - if (!ent.hasMetadata(SourceResidenceName)) { + + if (!ent.hasMetadata(SourceResidenceName) && /* Equals to air when generic falling block is spawned, not when falling block originates from spawnegg */ event.getTo() == Material.AIR) { + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); String resName = res == null ? "NULL" : res.getName(); ent.setMetadata(SourceResidenceName, new FixedMetadataValue(plugin, resName)); } else { - String saved = ent.getMetadata(SourceResidenceName).get(0).asString(); + ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); if (res != null && res.getPermissions().has(Flags.fallinprotection, FlagCombo.OnlyFalse)) return; String resName = res == null ? "NULL" : res.getName(); + + String saved = "NULL"; + if (ent.hasMetadata(SourceResidenceName)) + saved = ent.getMetadata(SourceResidenceName).get(0).asString(); + if (!saved.equalsIgnoreCase(resName)) { event.setCancelled(true); ent.remove(); @@ -444,7 +451,6 @@ public void onBlockFall(EntityChangeBlockEvent event) { if (block.getY() <= plugin.getConfigManager().getBlockFallLevel()) return; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); Location loc = new Location(block.getLocation().getWorld(), block.getX(), block.getY(), block.getZ()); for (int i = loc.getBlockY() - 1; i >= plugin.getConfigManager().getBlockFallLevel() - 1; i--) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index d0c300d6f..f152d902c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -104,7 +104,7 @@ public void onEntitySpawnEvent(EntitySpawnEvent event) { // Disabling listener if flag disabled globally if (!Flags.nomobs.isGlobalyEnabled()) return; - + Entity entity = event.getEntity(); if (entity == null) return; @@ -141,7 +141,7 @@ public void onEntityInteract(EntityInteractEvent event) { Entity entity = event.getEntity(); FlagPermissions perms = plugin.getPermsByLoc(block.getLocation()); boolean hastrample = perms.has(Flags.trample, perms.has(Flags.build, true)); - if (!hastrample && !(entity.getType() == EntityType.FALLING_BLOCK) && (mat.equals(CMIMaterial.FARMLAND) || mat.equals(CMIMaterial.SOUL_SAND))) { + if (!hastrample && entity.getType() != EntityType.FALLING_BLOCK && (mat.equals(CMIMaterial.FARMLAND) || mat.equals(CMIMaterial.SOUL_SAND))) { event.setCancelled(true); } } From ffccdfc93e1108295452d7bf687b9a3b9120187e Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 29 May 2024 17:54:30 +0300 Subject: [PATCH 1109/1142] New command variable to check bank balance --- .../bukkit/residence/commands/bank.java | 92 ++++++++++++++----- .../bukkit/residence/containers/lm.java | 2 + .../bukkit/residence/economy/CMIEconomy.java | 7 +- .../residence/economy/IConomy6Adapter.java | 6 +- .../residence/economy/RealShopEconomy.java | 17 ++-- .../residence/economy/ResidenceBank.java | 19 +++- .../vaultinterface/ResidenceVaultAdapter.java | 22 +---- 7 files changed, 99 insertions(+), 66 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/bank.java b/src/com/bekvon/bukkit/residence/commands/bank.java index 21c82e3cc..117e6956f 100644 --- a/src/com/bekvon/bukkit/residence/commands/bank.java +++ b/src/com/bekvon/bukkit/residence/commands/bank.java @@ -5,7 +5,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -13,16 +12,72 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import net.Zrips.CMILib.Container.CMINumber; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; + public class bank implements cmd { + private enum Action { + deposit, withdraw, balance; + + public static Action get(String name) { + for (Action one : Action.values()) { + if (one.name().equalsIgnoreCase(name)) + return one; + } + return null; + } + } + @Override - @CommandAnnotation(simple = true, priority = 3400, regVar = { 2, 3 }, consoleVar = { 2, 3 }) + @CommandAnnotation(simple = true, priority = 3400, regVar = { 1, 2, 3 }, consoleVar = { 2, 3 }) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { + String resName = null; ClaimedResidence res = null; + Action action = null; + double amount = 0D; + + for (String one : args) { + + if (action == null) { + action = Action.get(one); + continue; + } + + if (resName == null) { + resName = one; + continue; + } + + try { + if (amount <= 0) + amount = Double.parseDouble(one); + } catch (Exception ex) { + } + } + + if (action == null) + action = Action.balance; + + if (!action.equals(Action.balance) && amount == 0) { + try { + amount = Double.parseDouble(resName); + } catch (Exception ex) { + } + resName = null; + } + + amount = CMINumber.clamp(amount, 0, Double.MAX_VALUE); + + if (!action.equals(Action.balance) && amount == 0) { + plugin.msg(sender, lm.Invalid_Amount); + return null; + } + if (resName != null) { + res = plugin.getResidenceManager().getByName(resName); - if (args.length == 3) { - res = plugin.getResidenceManager().getByName(args[1]); if (res == null) { plugin.msg(sender, lm.Invalid_Residence); return null; @@ -30,33 +85,22 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo } else if (sender instanceof Player) { res = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); } + if (res == null) { plugin.msg(sender, lm.Residence_NotIn); return null; } - double amount = 0D; - try { - if (args.length == 2) - amount = Double.parseDouble(args[1]); - else - amount = Double.parseDouble(args[2]); - } catch (Exception ex) { - plugin.msg(sender, lm.Invalid_Amount); - return null; - } - if (amount <= 0) { - plugin.msg(sender, lm.Invalid_Amount); - return null; - } - - switch (args[0].toLowerCase()) { - case "deposit": + switch (action) { + case deposit: res.getBank().deposit(sender, amount, resadmin); return true; - case "withdraw": + case withdraw: res.getBank().withdraw(sender, amount, resadmin); return true; + case balance: + res.getBank().showBalance(sender, resadmin); + return true; } return false; @@ -66,9 +110,9 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo public void getLocale() { ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); c.get("Description", "Manage money in a Residence"); - c.get("Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw] [amount]", + c.get("Info", Arrays.asList("&eUsage: &6/res bank [deposit/withdraw/balance] ", "You must be standing in a Residence or provide residence name", "You must have the +bank flag.")); - LocaleManager.addTabCompleteMain(this, "deposit%%withdraw", "[residence]"); + LocaleManager.addTabCompleteMain(this, "deposit%%withdraw%%balance", "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 699412fd6..5ed1e4fc0 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -288,6 +288,8 @@ public enum lm { Residence_ChangedMain("&eChanged main residence to &6%1"), Residence_LwcRemoved("&eRemoved &6%1 &eLwc protections in &6%2ms"), + Residence_Balance("&eBalance: &6%1"), + Residence_CanBeRented("&6%1&e can be rented for &6%2 &eper &6%3 &edays. &6/res market rent"), Residence_CanBeBought("&6%1&e can be bought for &6%2&e. &6/res market buy"), diff --git a/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java b/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java index 2d663641d..92d11fc6f 100644 --- a/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/CMIEconomy.java @@ -26,11 +26,8 @@ public double getBalance(String playerName) { public boolean canAfford(Player player, double amount) { if (amount < 0) return false; - CMIUser user = CMI.getInstance().getPlayerManager().getUser(player); - if (user != null && user.getBalance() >= amount) { - return true; - } - return false; + CMIUser user = CMIUser.getUser(player); + return user != null && user.getBalance() >= amount; } @Override diff --git a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java index bf35e207e..9fdeacc3d 100644 --- a/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java +++ b/src/com/bekvon/bukkit/residence/economy/IConomy6Adapter.java @@ -35,11 +35,7 @@ public boolean canAfford(Player player, double amount) { public boolean canAfford(String playerName, double amount) { if (amount < 0) return false; checkExist(playerName); - double holdings = this.getBalance(playerName); - if (holdings >= amount) { - return true; - } - return false; + return this.getBalance(playerName) >= amount; } @Override diff --git a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java index 4004fc85f..f34a4cba2 100644 --- a/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java +++ b/src/com/bekvon/bukkit/residence/economy/RealShopEconomy.java @@ -29,23 +29,23 @@ public boolean canAfford(Player player, double amount) { @Override public boolean canAfford(String playerName, double amount) { - if (amount < 0) return false; - if (plugin.getBalance(playerName) >= amount) { - return true; - } - return false; + if (amount < 0) + return false; + return plugin.getBalance(playerName) >= amount; } @Override public boolean add(String playerName, double amount) { - if (amount < 0) return false; + if (amount < 0) + return false; plugin.setBalance(playerName, plugin.getBalance(playerName) + amount); return true; } @Override public boolean subtract(String playerName, double amount) { - if (amount < 0) return false; + if (amount < 0) + return false; if (!canAfford(playerName, amount)) { return false; } @@ -55,7 +55,8 @@ public boolean subtract(String playerName, double amount) { @Override public boolean transfer(String playerFrom, String playerTo, double amount) { - if (amount < 0) return false; + if (amount < 0) + return false; if (!canAfford(playerFrom, amount)) { return false; } diff --git a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java index b7d7b9573..75ec7cfef 100644 --- a/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java +++ b/src/com/bekvon/bukkit/residence/economy/ResidenceBank.java @@ -45,9 +45,7 @@ public void add(double amount) { } public boolean hasEnough(double amount) { - if (storedMoney >= amount) - return true; - return false; + return storedMoney >= amount; } public void subtract(double amount) { @@ -122,4 +120,19 @@ public void deposit(CommandSender sender, double amount, boolean resadmin) { Residence.getInstance().msg(sender, lm.Bank_Deposit, Residence.getInstance().getEconomyManager().format(amount)); } } + + public void showBalance(CommandSender sender, boolean resadmin) { + + if (!Residence.getInstance().getConfigManager().enableEconomy()) { + Residence.getInstance().msg(sender, lm.Economy_MarketDisabled); + } + + if (sender instanceof Player && !resadmin && !res.isOwner(sender) && !res.getPermissions().playerHas((Player) sender, Flags.bank, FlagCombo.OnlyTrue)) { + Residence.getInstance().msg(sender, lm.Bank_NoAccess); + return; + } + + lm.Residence_Balance.sendMessage(sender, Residence.getInstance().getEconomyManager().format(getStoredMoneyD())); + + } } diff --git a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java index fed866834..dc50c2937 100644 --- a/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java +++ b/src/com/bekvon/bukkit/residence/vaultinterface/ResidenceVaultAdapter.java @@ -15,7 +15,7 @@ public class ResidenceVaultAdapter implements EconomyInterface, PermissionsInter public static Permission permissions = null; public static Economy economy = null; - public static Chat chat = null; +// public static Chat chat = null; public boolean permissionsOK() { if (permissions != null && !permissions.getName().equalsIgnoreCase("SuperPerms")) { @@ -28,14 +28,9 @@ public boolean economyOK() { return economy != null; } - public boolean chatOK() { - return chat != null; - } - public ResidenceVaultAdapter(Server s) { setupPermissions(s); setupEconomy(s); - setupChat(s); } private static boolean setupPermissions(Server s) { @@ -46,14 +41,6 @@ private static boolean setupPermissions(Server s) { return (permissions != null); } - private static boolean setupChat(Server s) { - RegisteredServiceProvider chatProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); - if (chatProvider != null) { - chat = chatProvider.getProvider(); - } - return (chat != null); - } - private static boolean setupEconomy(Server s) { RegisteredServiceProvider economyProvider = s.getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); if (economyProvider != null) { @@ -161,13 +148,6 @@ public String getPermissionsName() { return ""; } - public String getChatName() { - if (chat != null) { - return chat.getName(); - } - return ""; - } - @Override public String getName() { return "Vault"; From 61803eb8afc4a6d2033ce3cc4b25cd1ffd5629e2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Tue, 11 Jun 2024 10:16:05 +0300 Subject: [PATCH 1110/1142] Lets ignore tp safety check for folia for time being --- .../bekvon/bukkit/residence/protection/ClaimedResidence.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index a75e557a1..10df2890e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1406,6 +1406,10 @@ public int isSafeTp(Player player) { if (tpLoc == null) return 0; + + // Temp fix for Folia. + if (Version.isFolia()) + return 0; Location tempLoc = this.getTeleportLocation(player, false); From f14814b1392f673fb00f20d08f3faba7049609a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=92=D0=B8?= =?UTF-8?q?=D0=B4=D0=B5=D0=BC=D0=B0=D0=BD?= <41009944+AlekseyVideman@users.noreply.github.com> Date: Sat, 13 Jul 2024 12:21:42 +0700 Subject: [PATCH 1111/1142] Update Russian.yml --- src/Language/Russian.yml | 48 +++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/src/Language/Russian.yml b/src/Language/Russian.yml index 760c35459..cc7151e2e 100644 --- a/src/Language/Russian.yml +++ b/src/Language/Russian.yml @@ -30,7 +30,8 @@ Language: Fail: '&cÐверный флаг... Этот флаг можно иÑпользовать только над %1' Player: игроком Residence: резиденцией - PortalDestination: '&cТочка выхода портала выходит на запретную территорию. Создание портала отменено. &7Ðайдите новое раÑположение' + PortalDestination: '&cТочка выхода портала выходит на запретную территорию. Создание + портала отменено. &7Ðайдите новое раÑположение' FromConsole: '&cÐ’Ñ‹ можете иÑпользовать Ñто только в конÑоли!' Ingame: '&cÐ’Ñ‹ можете иÑпользовать Ñто только в игре!' Location: '&cÐверное раÑположение...' @@ -46,12 +47,12 @@ Language: &eи больше.' ToSmallY: '&cВаша выÑота Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ (&6%1&c) Ñлишком мала. &eРазрешаетÑÑ &6%2 &eи больше.' - ToSmallZ: '&cВаша длина Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ &6Z (&6%1&c) Ñлишком мала. &eРазрешаетÑÑ &6%2 &eи - больше.' + ToSmallZ: '&cВаша длина Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ &6Z (&6%1&c) Ñлишком мала. &eРазрешаетÑÑ &6%2 + &eи больше.' ToBigX: '&cВаша длина Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ &6X (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 &eи меньше.' - ToBigY: '&cВаша выÑота Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 &eи - меньше.' + ToBigY: '&cВаша выÑота Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 + &eи меньше.' ToBigZ: '&cВаша длина Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ &6Z (&6%1&c) Ñлишком большаÑ. &eРазрешаетÑÑ &6%2 &eи меньше.' Rename: '&eПереименована облаÑÑ‚ÑŒ &6%1 &eв &6%2' @@ -64,10 +65,11 @@ Language: SizeLimit: '&eРазмер облаÑти не находитÑÑ Ð² ваших допуÑтимых пределах.' HighLimit: '&cÐ’Ñ‹ не можете защитить так выÑоко, ваш предел &6%1' LowLimit: '&cÐ’Ñ‹ не можете защитить так глубоко, ваш предел &6%1' - TooClose: '&cСлишком близко к другой резиденции. Вам нужно отойти Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ на &e%1 &cблоков.' + TooClose: '&cСлишком близко к другой резиденции. Вам нужно отойти Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ на &e%1 + &cблоков.' ListAll: '&a{&eID:&c%1 &eP1:&c(%2,%3,%4) &eP2:&c(%5,%6,%7) &e(Размер:&c%8&e)&a}' - WeirdShape: '&3Ð ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð¸Ð¼ÐµÐµÑ‚ неумеÑтную форму контуров. &6%1 &3Ñторона &3в &6%2 &3раз - больше Ñтороны &6%3' + WeirdShape: '&3Ð ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð¸Ð¼ÐµÐµÑ‚ неумеÑтную форму контуров. &6%1 &3Ñторона &3в + &6%2 &3раз больше Ñтороны &6%3' Select: Points: '&eСначала выберите две точки перед иÑпользованием Ñтой команды!' Overlap: '&cВыбранные точки переÑекаетÑÑ Ñ Ñ€ÐµÐ³Ð¸Ð¾Ð½Ð¾Ð¼ &6%1 &c!' @@ -263,6 +265,7 @@ Language: TrustedResList: ' &a%1. &f%2 &e- &6%3 %4&6%5' Near: '&eРезиденции поблизоÑти: &7%1' BaseFlagDeny: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ &6%1' + Balance: '&eBalance: &6%1' Rent: Disabled: '&cÐренда отключена...' DisableRenew: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eбольше не будет ÑдаватьÑÑ Ð¿Ð¾ иÑтечении Ñрока.' @@ -304,10 +307,10 @@ Language: EnableRenew: '&6%1 &eтеперь будет автоматичеÑки обновлÑÑ‚ÑŒ арендный ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾ иÑтечении Ñрока.' Economy: - LandForSale: '&eÐ—ÐµÐ¼Ð»Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð°Ð¶Ð¸:' + LandForSale: '&eÐ—ÐµÐ¼Ð»Ñ Ð¿Ð¾Ð´ продажу:' NotEnoughMoney: '&cÐ’Ñ‹ не имеете доÑтаточно денег.' - MoneyCharged: '&eÐачиÑлено &6%1 &eна ваш Ñчет &6%2 &e.' - MoneyAdded: '&eПолучено &6%1 &eна ваш Ñчет &6%2 &e.' + MoneyCharged: '&eСнÑто &6%1 &eÑ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñчет &6%2 &e.' + MoneyAdded: '&eПрибавлено &6%1 &eк вашему Ñчету &6%2 &e.' MoneyCredit: '&eЗачиÑлено &6%1 &eна ваш Ñчет &6%2 &e.' RentReleaseInvalid: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eне Ñдана и не ÑдаетÑÑ.' RentSellFail: '&cÐевозможно продать резиденцию, еÑли она ÑдаетÑÑ Ð² аренду.' @@ -460,7 +463,7 @@ Language: cmdPermissionColor: '&2' General: DisabledWorld: '&cПлагин Residence отключен в Ñтом мире' - UseNumbers: '&cПожалуйÑта, иÑпользуйте челые чиÑла...' + UseNumbers: '&cПожалуйÑта, иÑпользуйте целые чиÑла...' # Replace all text with '' to disable this message CantPlaceLava: '&cÐ’Ñ‹ не можете размеÑтить лаву за пределами резиденции и выше &6%1 блоков' @@ -470,7 +473,7 @@ Language: CantPlaceChest: '&cÐ’Ñ‹ не можете размеÑтить Ñундук на Ñтом меÑте' NoPermission: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° Ñто.' info: - NoPlayerPermission: '&c[игрок] не имеет Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ [permission]' + NoPlayerPermission: '&c[playerName] не имеет Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ [permission]' NoCmdPermission: '&cУ Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° Ñту команду.' DefaultUsage: '&eПишите &6/%1 ? &eÐ´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации' MaterialGet: '&eÐ˜Ð¼Ñ Ð¼Ð°Ñ‚ÐµÑ€Ð¸Ð°Ð»Ð° Ð´Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° &6%1 &eÑоÑтавлÑет &6%2' @@ -544,8 +547,8 @@ Language: NewPlayerInfo: '&eЕÑли вы хотите Ñоздать охранÑемую территорию Ð´Ð»Ñ Ñвоего дома, иÑпользуйте деревÑнный топор, чтобы выбрать противоположные Ñтороны вашего дома, и выполните команду /res create ÐазваниеВашейРезиденции' - TeleportConfirmLava: '&cМеÑто Ð¿Ñ€Ð¸Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ безопаÑно, вы упадете в &6лаву&c. - ИÑпользуйте &6/res tpconfirm&c, чтобы вÑÑ‘ же телепортироватьÑÑ.' + TeleportConfirmLava: '&cМеÑто Ð¿Ñ€Ð¸Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ безопаÑно, вы упадете в &6лаву&c. ИÑпользуйте + &6/res tpconfirm&c, чтобы вÑÑ‘ же телепортироватьÑÑ.' TeleportConfirmVoid: '&cМеÑто Ð¿Ñ€Ð¸Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ безопаÑно, вы упадете в &6бездну&c. ИÑпользуйте &6/res tpconfirm&c, чтобы вÑÑ‘ же телепортироватьÑÑ.' HelpPageHeader2: '&eСтраниц Ñправочника - &6%1 &e- Страница <&6%2 &eиз &6%3&e>' @@ -558,6 +561,7 @@ Language: BlockedTeleportIcon: '&7T' AllowedMovementIcon: '&2M' BlockedMovementIcon: '&7M' + CantCreate: '&cCan''t create residences in this world' Raid: NotEnabled: '&cÐ¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ€ÐµÐ¹Ð´Ð¾Ð² выключена!' NotIn: '&cÐ’Ñ‹ не учаÑтвуете в рейде!' @@ -583,17 +587,20 @@ Language: isOffline: '&cВладелец резиденции не в Ñети, поÑтому рейд уÑтроить не получитÑÑ!' noSubzones: '&cÐÐµÐ»ÑŒÐ·Ñ ÑƒÑтраивать рейд на подзоны!' noSelf: '&cÐÐµÐ»ÑŒÐ·Ñ ÑƒÑтраивать рейд на Ñвою резиденцию!' - alreadyInAnother: '&cÐ’Ñ‹ не можете приÑоединитьÑÑ Ðº рейду, потому что учаÑтвуете в рейде (%1)' + alreadyInAnother: '&cÐ’Ñ‹ не можете приÑоединитьÑÑ Ðº рейду, потому что учаÑтвуете + в рейде (%1)' defend: Joined: '&7ПриÑоединение к рейду &2%1 &7в качеÑтве оборонительной Ñилы!' - Sent: '&7Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° приÑоединнение на оборонительную Ñторону отправлен, ожидайте подтверждениÑ' + Sent: '&7Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° приÑоединнение на оборонительную Ñторону отправлен, ожидайте + подтверждениÑ' Join: '&7ПриÑоединитьÑÑ Ðº рейду &6%1 &7в качеÑтве оборонительной Ñилы' Invitation: '&7ПринÑÑ‚ÑŒ &6%1 &6в оборонительные Ñилы' JoinedDef: '&2%1&7 вÑтупил в оборонительные Ñилы!' IsOffline: '&cÐÐµÐ»ÑŒÐ·Ñ Ð²Ñтупить в оборонительные Ñилы, пока владелец не в Ñети!' noSelf: '&cÐ’Ñ‹ уже оборонÑете Ñту резиденцию' notRaided: '&cÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ подвергаетÑÑ Ñ€ÐµÐ¹Ð´Ñƒ' - alreadyInAnother: '&cÐ’Ñ‹ не можете вÑтупить в оборонительные Ñилы, потому что учаÑтвуете в рейде (%1)' + alreadyInAnother: '&cÐ’Ñ‹ не можете вÑтупить в оборонительные Ñилы, потому что + учаÑтвуете в рейде (%1)' status: title: '&7----------- &f%1(%2) &7-----------' immune: '&eИммунитет к рейдам на: %1' @@ -1665,6 +1672,11 @@ CommandHelp: Description: ПозволÑет или запрещает риÑовать блоками Info: - '&eПишите: &6/res set/pset <резиденциÑ> brush true/false/remove' + goathorn: + Translated: goathorn + Description: Allows or denys goat horn usage + Info: + - '&eUsage: &6/res set/pset goathorn true/false/remove' remove: Description: Удалить резиденцию. Info: From ccc06ef93c774dc56fb808ad81ca1e06d0a626d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=92=D0=B8?= =?UTF-8?q?=D0=B4=D0=B5=D0=BC=D0=B0=D0=BD?= <41009944+AlekseyVideman@users.noreply.github.com> Date: Sat, 13 Jul 2024 12:24:29 +0700 Subject: [PATCH 1112/1142] Update Russian.yml --- src/Language/Russian.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Language/Russian.yml b/src/Language/Russian.yml index cc7151e2e..596ab09af 100644 --- a/src/Language/Russian.yml +++ b/src/Language/Russian.yml @@ -1674,9 +1674,9 @@ CommandHelp: - '&eПишите: &6/res set/pset <резиденциÑ> brush true/false/remove' goathorn: Translated: goathorn - Description: Allows or denys goat horn usage + Description: ПозволÑет или запрещает иÑпользовать козий рог Info: - - '&eUsage: &6/res set/pset goathorn true/false/remove' + - '&eПишите: &6/res set/pset <резиденциÑ> goathorn true/false/remove' remove: Description: Удалить резиденцию. Info: From 07e7e18348a7b2591963c7a7900da35158d33032 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=92=D0=B8?= =?UTF-8?q?=D0=B4=D0=B5=D0=BC=D0=B0=D0=BD?= <41009944+AlekseyVideman@users.noreply.github.com> Date: Sat, 13 Jul 2024 12:26:42 +0700 Subject: [PATCH 1113/1142] Update Russian.yml final typo fix --- src/Language/Russian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Language/Russian.yml b/src/Language/Russian.yml index 596ab09af..2f716c8cf 100644 --- a/src/Language/Russian.yml +++ b/src/Language/Russian.yml @@ -309,7 +309,7 @@ Language: Economy: LandForSale: '&eÐ—ÐµÐ¼Ð»Ñ Ð¿Ð¾Ð´ продажу:' NotEnoughMoney: '&cÐ’Ñ‹ не имеете доÑтаточно денег.' - MoneyCharged: '&eСнÑто &6%1 &eÑ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñчет &6%2 &e.' + MoneyCharged: '&eСнÑто &6%1 &eÑ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñчета &6%2 &e.' MoneyAdded: '&eПрибавлено &6%1 &eк вашему Ñчету &6%2 &e.' MoneyCredit: '&eЗачиÑлено &6%1 &eна ваш Ñчет &6%2 &e.' RentReleaseInvalid: '&eÐ ÐµÐ·Ð¸Ð´ÐµÐ½Ñ†Ð¸Ñ &6%1 &eне Ñдана и не ÑдаетÑÑ.' From fd1326fa9181cdb757eae33e037fce44e65b693e Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Jul 2024 14:34:11 +0300 Subject: [PATCH 1114/1142] Sand fall fix --- .../listeners/ResidenceBlockListener.java | 22 +++++-------------- src/plugin.yml | 2 +- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index d8d4ddcf7..2e6c86bcb 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -417,7 +417,7 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { if (ent.hasMetadata(SourceResidenceName)) saved = ent.getMetadata(SourceResidenceName).get(0).asString(); - if (!saved.equalsIgnoreCase(resName)) { + if (res != null && !saved.equalsIgnoreCase(resName)) { event.setCancelled(true); ent.remove(); } @@ -451,23 +451,11 @@ public void onBlockFall(EntityChangeBlockEvent event) { if (block.getY() <= plugin.getConfigManager().getBlockFallLevel()) return; + ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); - Location loc = new Location(block.getLocation().getWorld(), block.getX(), block.getY(), block.getZ()); - for (int i = loc.getBlockY() - 1; i >= plugin.getConfigManager().getBlockFallLevel() - 1; i--) { - loc.setY(i); - if (loc.getBlock().getType() != Material.AIR) { - ClaimedResidence targetRes = plugin.getResidenceManager().getByLoc(loc); - if (targetRes == null) - continue; - if (res != null && !res.getName().equals(targetRes.getName())) { - if (targetRes.getPermissions().has(Flags.fallinprotection, FlagCombo.OnlyFalse)) - continue; - event.setCancelled(true); - block.setType(Material.AIR); - } - return; - } - } + + if (res != null) + event.getEntity().setMetadata(SourceResidenceName, new FixedMetadataValue(plugin, res.getName())); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) diff --git a/src/plugin.yml b/src/plugin.yml index e82fb03e9..362c3e2be 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.4.3 +version: 5.1.5.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 60390337529938870d5ae0aec427737a2e56eb6e Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Jul 2024 14:55:35 +0300 Subject: [PATCH 1115/1142] Fix an issue with effect cloud potion checks on older servers --- .../bekvon/bukkit/residence/allNms/v1_9Events.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java index ced72be24..5fbe8e90c 100644 --- a/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java +++ b/src/com/bekvon/bukkit/residence/allNms/v1_9Events.java @@ -19,6 +19,7 @@ import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class v1_9Events implements Listener { @@ -52,7 +53,8 @@ public void onLingeringSplashPotion(LingeringPotionSplashEvent event) { event.setCancelled(true); } - Method basePotionData = null; + private static Method basePotionData = null; + private static Method basePotionType = null; @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { @@ -75,13 +77,15 @@ public void onLingeringEffectApply(AreaEffectCloudApplyEvent event) { } } else { try { + if (basePotionData == null) { - Method tempMethod = event.getEntity().getClass().getMethod("getBasePotionData"); - basePotionData = tempMethod.invoke(event.getEntity()).getClass().getMethod("getType"); + basePotionData = event.getEntity().getClass().getMethod("getBasePotionData"); + Object data = basePotionData.invoke(event.getEntity()); + basePotionType = data.getClass().getMethod("getType"); } - + Object data = basePotionData.invoke(event.getEntity()); + org.bukkit.potion.PotionType type = (org.bukkit.potion.PotionType) basePotionType.invoke(data); for (String oneHarm : Residence.getInstance().getConfigManager().getNegativeLingeringPotionEffects()) { - org.bukkit.potion.PotionType type = (org.bukkit.potion.PotionType) basePotionData.invoke(event.getEntity()); if (type.name().equalsIgnoreCase(oneHarm)) { harmfull = true; break; From a26dbf08def3bba576b9a72dc28f901757556a21 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Jul 2024 16:05:47 +0300 Subject: [PATCH 1116/1142] Fix for incorrect kick command processing --- .../bukkit/residence/commands/kick.java | 45 ++++++++++++------- .../protection/ClaimedResidence.java | 3 +- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 70283a4ee..5f6582736 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -8,6 +8,8 @@ import org.bukkit.entity.Player; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Locale.LC; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; import com.bekvon.bukkit.residence.LocaleManager; @@ -64,23 +66,34 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - if (res.getPlayersInResidence().contains(targetplayer)) { - - if (ResPerm.command_kick_bypass.hasPermission(targetplayer)) { - plugin.msg(sender, lm.Residence_CantKick); - return true; - } - Location loc = plugin.getConfigManager().getKickLocation(); - targetplayer.closeInventory(); - if (loc != null) - CMITeleporter.teleportAsync(targetplayer, loc); - else { - loc = res.getOutsideFreeLoc(player.getLocation(), player, true); - if (loc != null) - CMITeleporter.teleportAsync(targetplayer, loc); - } - plugin.msg(targetplayer, lm.Residence_Kicked); + if (!res.getPlayersInResidence().contains(targetplayer)) + return false; + + if (ResPerm.command_kick_bypass.hasPermission(targetplayer)) { + plugin.msg(sender, lm.Residence_CantKick); + return true; + } + + Location loc = plugin.getConfigManager().getKickLocation(); + targetplayer.closeInventory(); + + if (loc == null) { + loc = res.getOutsideFreeLoc(targetplayer.getLocation(), targetplayer, true); } + + if (loc == null) { + LC.info_IncorrectLocation.getLocale(); + return true; + } + + CMITeleporter.teleportAsync(targetplayer, loc).thenApply(success -> { + if (success) + plugin.msg(targetplayer, lm.Residence_Kicked); + else + plugin.msg(targetplayer, lm.General_TeleportCanceled); + return null; + }); + return true; } diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 10df2890e..f561be1d1 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1206,8 +1206,9 @@ public Location getOutsideFreeLoc(Location insideLoc, Player player, boolean toS } if (!found) { - if (Residence.getInstance().getConfigManager().getKickLocation() != null) + if (Residence.getInstance().getConfigManager().getKickLocation() != null) { return Residence.getInstance().getConfigManager().getKickLocation(); + } // Fail safe for kick out location if (!toSpawnOnFail) From aa69848cdef092640ecb4e710fefb51068cfb654 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 15 Jul 2024 16:49:49 +0300 Subject: [PATCH 1117/1142] Fix for residence creation when ignoreY is enabled --- .../bukkit/residence/commands/auto.java | 3 ++- .../bukkit/residence/commands/kick.java | 14 +++++------- .../protection/ClaimedResidence.java | 9 ++++---- .../protection/ResidenceManager.java | 3 +-- .../protection/ResidencePermissions.java | 1 - .../residence/selection/AutoSelection.java | 3 --- .../residence/selection/SelectionManager.java | 22 ++++++++++--------- 7 files changed, 25 insertions(+), 30 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/auto.java b/src/com/bekvon/bukkit/residence/commands/auto.java index 4e2d59b3b..2bac70807 100644 --- a/src/com/bekvon/bukkit/residence/commands/auto.java +++ b/src/com/bekvon/bukkit/residence/commands/auto.java @@ -24,7 +24,6 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; public class auto implements cmd { @@ -64,10 +63,12 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo int minY = loc.getBlockY(); int maxY = loc.getBlockY(); + if (plugin.getConfigManager().isSelectionIgnoreY()) { minY = plugin.getSelectionManager().getSelection(player).getMinYAllowed(); maxY = plugin.getSelectionManager().getSelection(player).getMaxYAllowed(); } + loc.setY(minY); plugin.getSelectionManager().placeLoc1(player, loc.clone(), false); loc.setY(maxY); diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index 5f6582736..fdab4761f 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -7,11 +7,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Locale.LC; -import net.Zrips.CMILib.Logs.CMIDebug; -import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; - import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -23,10 +18,14 @@ import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Locale.LC; +import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; + public class kick implements cmd { @Override - @CommandAnnotation(simple = true, priority = 2200) + @CommandAnnotation(priority = 2200) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { if (!(sender instanceof Player)) return false; @@ -77,9 +76,8 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo Location loc = plugin.getConfigManager().getKickLocation(); targetplayer.closeInventory(); - if (loc == null) { + if (loc == null) loc = res.getOutsideFreeLoc(targetplayer.getLocation(), targetplayer, true); - } if (loc == null) { LC.info_IncorrectLocation.getLocale(); diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index f561be1d1..a6f165f8a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -16,7 +16,6 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -38,7 +37,6 @@ import com.bekvon.bukkit.residence.containers.MinimizeMessages; import com.bekvon.bukkit.residence.containers.RandomLoc; import com.bekvon.bukkit.residence.containers.ResidencePlayer; -import com.bekvon.bukkit.residence.containers.ValidLocation; import com.bekvon.bukkit.residence.containers.Visualizer; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.economy.ResidenceBank; @@ -65,7 +63,6 @@ import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Version.Version; @@ -273,10 +270,12 @@ public boolean isBiggerThanMin(Player player, CuboidArea area, boolean resadmin) Residence.getInstance().msg(player, lm.Area_ToSmallX, area.getXSize(), group.getMinX()); return false; } + if (area.getYSize() < group.getMinY()) { Residence.getInstance().msg(player, lm.Area_ToSmallY, area.getYSize(), group.getMinY()); return false; } + if (area.getZSize() < group.getMinZ()) { Residence.getInstance().msg(player, lm.Area_ToSmallZ, area.getZSize(), group.getMinZ()); return false; @@ -317,7 +316,7 @@ public boolean isSmallerThanMax(Player player, CuboidArea area, boolean resadmin return false; } - if (area.getYSize() > group.getMaxY()) { + if (!Residence.getInstance().getConfigManager().isSelectionIgnoreY() && area.getYSize() > group.getMaxY()) { Residence.getInstance().msg(player, lm.Area_ToBigY, area.getYSize(), group.getMaxY()); return false; } @@ -1407,7 +1406,7 @@ public int isSafeTp(Player player) { if (tpLoc == null) return 0; - + // Temp fix for Folia. if (Version.isFolia()) return 0; diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 885d105a8..8cd17997a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -55,7 +55,6 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.CMINumber; import net.Zrips.CMILib.Container.PageInfo; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Version.Version; import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; @@ -277,7 +276,7 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String plugin.msg(player, lm.Residence_AlreadyExists, residences.get(resName.toLowerCase()).getResidenceName()); return false; } - + newRes.BlockSellPrice = group.getSellPerBlock(); if (!newRes.addArea(player, newArea, "main", resadmin, false)) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java index 38bfaaf2a..8a2a8b81c 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidencePermissions.java @@ -692,7 +692,6 @@ public void setOwner(String newOwner, boolean resetFlags) { if (rPlayer != null) { this.ownerUUID = rPlayer.getUniqueId(); ownerLastKnownName = rPlayer.getName(); - } if (ownerLastKnownName.equalsIgnoreCase("Server Land") || ownerLastKnownName.equalsIgnoreCase(Residence.getInstance().getServerLandName())) { diff --git a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java index 68a4e877a..775d98b32 100644 --- a/src/com/bekvon/bukkit/residence/selection/AutoSelection.java +++ b/src/com/bekvon/bukkit/residence/selection/AutoSelection.java @@ -5,7 +5,6 @@ import org.bukkit.Location; import org.bukkit.entity.Player; -import org.bukkit.util.Vector; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.AutoSelector; @@ -14,8 +13,6 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.CuboidArea; -import net.Zrips.CMILib.Logs.CMIDebug; - public class AutoSelection { private HashMap list = new HashMap(); diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 0c235c84d..5f57c4b6b 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -379,11 +379,12 @@ public void placeLoc1(Player player, Location loc) { } public void placeLoc1(Player player, Location loc, boolean show) { - if (loc != null) { - getSelection(player).setBaseLoc1(loc); - if (show) { - this.afterSelectionUpdate(player); - } + if (loc == null) + return; + + getSelection(player).setBaseLoc1(loc); + if (show) { + this.afterSelectionUpdate(player); } } @@ -392,11 +393,12 @@ public void placeLoc2(Player player, Location loc) { } public void placeLoc2(Player player, Location loc, boolean show) { - if (loc != null) { - getSelection(player).setBaseLoc2(loc); - if (show) { - this.afterSelectionUpdate(player); - } + if (loc == null) + return; + + getSelection(player).setBaseLoc2(loc); + if (show) { + this.afterSelectionUpdate(player); } } From fee751fd1dd734437ef38ffc17587682c1ba52e0 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 18 Jul 2024 15:48:02 +0300 Subject: [PATCH 1118/1142] Weaving potion effect fix --- .../ResidencePlayerListener1_20.java | 32 +++++++++++++++++++ src/plugin.yml | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java index 1228af03c..887732e64 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java @@ -1,12 +1,17 @@ package com.bekvon.bukkit.residence.listeners; +import org.bukkit.Location; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.player.PlayerSignOpenEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -14,6 +19,8 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import net.Zrips.CMILib.Version.Version; + public class ResidencePlayerListener1_20 implements Listener { private Residence plugin; @@ -76,4 +83,29 @@ public void onPotBreak(EntityChangeBlockEvent event) { if (!ResidenceBlockListener.canBreakBlock(player, event.getBlock().getLocation(), true)) event.setCancelled(true); } + + @EventHandler(priority = EventPriority.LOWEST) + public void OnEntityDeath(EntityDeathEvent event) { + if (Version.isCurrentLower(Version.v1_20_R3)) + return; + // Disabling listener if flag disabled globally + if (!Flags.build.isGlobalyEnabled()) + return; + // disabling event on world + LivingEntity ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + if (!ent.hasPotionEffect(PotionEffectType.WEAVING)) + return; + + Location loc = ent.getLocation(); + FlagPermissions perms = plugin.getPermsByLoc(loc); + if (perms.has(Flags.build, FlagCombo.TrueOrNone)) + return; + + // Removing weaving effect on death as there is no other way to properly handle this effect inside residence + ent.removePotionEffect(PotionEffectType.WEAVING); + } } diff --git a/src/plugin.yml b/src/plugin.yml index 362c3e2be..3b6e5965a 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.5.0 +version: 5.1.5.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 583539e89476bb7526f74fc7f0164d235a0760d8 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 22 Jul 2024 15:26:22 +0300 Subject: [PATCH 1119/1142] Wieving effect should only apply as of 1.21 --- .../bekvon/bukkit/residence/Residence.java | 3 ++ .../ResidencePlayerListener1_20.java | 32 ----------- .../ResidencePlayerListener1_21.java | 54 +++++++++++++++++++ src/plugin.yml | 2 +- 4 files changed, 58 insertions(+), 33 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_21.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index bf2b1bcf0..bf5d1e753 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -88,6 +88,7 @@ import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_17; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_19; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_20; +import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_21; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener1_9; import com.bekvon.bukkit.residence.listeners.SpigotListener; import com.bekvon.bukkit.residence.permissions.PermissionManager; @@ -742,6 +743,8 @@ public void onEnable() { pm.registerEvents(new ResidencePlayerListener1_19(this), this); if (Version.isCurrentEqualOrHigher(Version.v1_20_R1)) pm.registerEvents(new ResidencePlayerListener1_20(this), this); + if (Version.isCurrentEqualOrHigher(Version.v1_21_R1)) + pm.registerEvents(new ResidencePlayerListener1_21(this), this); elistener = new ResidenceEntityListener(this); flistener = new ResidenceFixesListener(); diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java index 887732e64..1228af03c 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_20.java @@ -1,17 +1,12 @@ package com.bekvon.bukkit.residence.listeners; -import org.bukkit.Location; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityChangeBlockEvent; -import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.player.PlayerSignOpenEvent; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; @@ -19,8 +14,6 @@ import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; -import net.Zrips.CMILib.Version.Version; - public class ResidencePlayerListener1_20 implements Listener { private Residence plugin; @@ -83,29 +76,4 @@ public void onPotBreak(EntityChangeBlockEvent event) { if (!ResidenceBlockListener.canBreakBlock(player, event.getBlock().getLocation(), true)) event.setCancelled(true); } - - @EventHandler(priority = EventPriority.LOWEST) - public void OnEntityDeath(EntityDeathEvent event) { - if (Version.isCurrentLower(Version.v1_20_R3)) - return; - // Disabling listener if flag disabled globally - if (!Flags.build.isGlobalyEnabled()) - return; - // disabling event on world - LivingEntity ent = event.getEntity(); - if (ent == null) - return; - if (plugin.isDisabledWorldListener(ent.getWorld())) - return; - if (!ent.hasPotionEffect(PotionEffectType.WEAVING)) - return; - - Location loc = ent.getLocation(); - FlagPermissions perms = plugin.getPermsByLoc(loc); - if (perms.has(Flags.build, FlagCombo.TrueOrNone)) - return; - - // Removing weaving effect on death as there is no other way to properly handle this effect inside residence - ent.removePotionEffect(PotionEffectType.WEAVING); - } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_21.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_21.java new file mode 100644 index 000000000..f955792a1 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_21.java @@ -0,0 +1,54 @@ +package com.bekvon.bukkit.residence.listeners; + +import org.bukkit.Location; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.player.PlayerSignOpenEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + +import net.Zrips.CMILib.Version.Version; + +public class ResidencePlayerListener1_21 implements Listener { + + private Residence plugin; + + public ResidencePlayerListener1_21(Residence plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.LOWEST) + public void OnEntityDeath(EntityDeathEvent event) { + // Disabling listener if flag disabled globally + if (!Flags.build.isGlobalyEnabled()) + return; + // disabling event on world + LivingEntity ent = event.getEntity(); + if (ent == null) + return; + if (plugin.isDisabledWorldListener(ent.getWorld())) + return; + if (!ent.hasPotionEffect(PotionEffectType.WEAVING)) + return; + + Location loc = ent.getLocation(); + FlagPermissions perms = plugin.getPermsByLoc(loc); + if (perms.has(Flags.build, FlagCombo.TrueOrNone)) + return; + + // Removing weaving effect on death as there is no other way to properly handle this effect inside residence + ent.removePotionEffect(PotionEffectType.WEAVING); + } +} diff --git a/src/plugin.yml b/src/plugin.yml index 3b6e5965a..23ba2ce57 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.5.1 +version: 5.1.5.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From 5c53b95ee9138c32ef639051d1a3bf5798a037b2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 29 Jul 2024 14:49:07 +0300 Subject: [PATCH 1120/1142] Adding crafter to the table flag --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 1 + .../bekvon/bukkit/residence/protection/FlagPermissions.java | 3 +++ src/plugin.yml | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index eb03a02b5..eec76a681 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1011,6 +1011,7 @@ private boolean isCanUseEntity_RClickOnly(Material mat, Block block) { case "BED_BLOCK": case "WORKBENCH": case "CRAFTING_TABLE": + case "CRAFTER": case "BREWING_STAND": case "ENCHANTMENT_TABLE": case "ENCHANTING_TABLE": diff --git a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java index 987542f5f..53e7cd5b3 100644 --- a/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java +++ b/src/com/bekvon/bukkit/residence/protection/FlagPermissions.java @@ -219,6 +219,9 @@ public static void initValidFlags() { addMaterialToUseFlag(CMIMaterial.CRAFTING_TABLE.getMaterial(), Flags.table); + if (Version.isCurrentEqualOrHigher(Version.v1_21_R1)) + addMaterialToUseFlag(CMIMaterial.CRAFTER.getMaterial(), Flags.table); + for (CMIMaterial one : CMIMaterial.values()) { if (one.getMaterial() == null) continue; diff --git a/src/plugin.yml b/src/plugin.yml index 23ba2ce57..70fa2620b 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.5.2 +version: 5.1.5.3 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From f65e6a3bd5c0bfb0e535b1f5608aaa898e15b360 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 9 Aug 2024 12:10:40 +0300 Subject: [PATCH 1121/1142] Preventing vehicle combustion in protected area --- .../listeners/ResidenceEntityListener.java | 50 ++++++++++++++++--- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index f152d902c..45741caba 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -104,7 +104,7 @@ public void onEntitySpawnEvent(EntitySpawnEvent event) { // Disabling listener if flag disabled globally if (!Flags.nomobs.isGlobalyEnabled()) return; - + Entity entity = event.getEntity(); if (entity == null) return; @@ -337,9 +337,11 @@ public void OnEntityDeath(EntityDeathEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void VehicleDestroy(VehicleDestroyEvent event) { + // Disabling listener if flag disabled globally if (!Flags.vehicledestroy.isGlobalyEnabled()) return; + // disabling event on world Entity damager = event.getAttacker(); if (damager == null) @@ -350,14 +352,42 @@ public void VehicleDestroy(VehicleDestroyEvent event) { Vehicle vehicle = event.getVehicle(); - if (vehicle == null) + if (!vehicleDamageable(damager, vehicle)) + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void vehicleCombust(EntityCombustByEntityEvent event) { + + // Disabling listener if flag disabled globally + if (!Flags.vehicledestroy.isGlobalyEnabled()) + return; + + // disabling event on world + Entity damager = event.getCombuster(); + if (damager == null) + return; + + if (plugin.isDisabledWorldListener(damager.getWorld())) + return; + + if (!(event.getEntity() instanceof Vehicle)) return; + Vehicle vehicle = (Vehicle) event.getEntity(); + + if (!vehicleDamageable(damager, vehicle)) + event.setCancelled(true); + } + + private boolean vehicleDamageable(Entity damager, Vehicle vehicle) { + if (vehicle == null) + return true; + if (damager instanceof Projectile && !(((Projectile) damager).getShooter() instanceof Player) || !(damager instanceof Player)) { FlagPermissions perms = plugin.getPermsByLoc(vehicle.getLocation()); if (!perms.has(Flags.vehicledestroy, true)) { - event.setCancelled(true); - return; + return false; } } @@ -370,20 +400,22 @@ public void VehicleDestroy(VehicleDestroyEvent event) { } if (cause == null) - return; + return true; if (plugin.isResAdminOn(cause)) - return; + return true; ClaimedResidence res = plugin.getResidenceManager().getByLoc(vehicle.getLocation()); if (res == null) - return; + return true; if (res.getPermissions().playerHas(cause, Flags.vehicledestroy, FlagCombo.OnlyFalse)) { plugin.msg(cause, lm.Residence_FlagDeny, Flags.vehicledestroy, res.getName()); - event.setCancelled(true); + return false; } + + return true; } @EventHandler(priority = EventPriority.LOWEST) @@ -1153,6 +1185,7 @@ public void onSplashPotion(PotionSplashEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { + // Disabling listener if flag disabled globally if (!Flags.pvp.isGlobalyEnabled()) return; @@ -1199,6 +1232,7 @@ public void PlayerKillingByFlame(EntityCombustByEntityEvent event) { @EventHandler public void OnFallDamage(EntityDamageEvent event) { + // Disabling listener if flag disabled globally if (!Flags.falldamage.isGlobalyEnabled()) return; From 9efad58f85a935696832e93a63c41cee575c6e1a Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 9 Aug 2024 12:16:14 +0300 Subject: [PATCH 1122/1142] Riding should check by boat instance --- .../bukkit/residence/listeners/ResidencePlayerListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index eec76a681..f3fbf2b2d 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -1700,8 +1700,8 @@ public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { return; Entity ent = event.getRightClicked(); - - if (ent.getType() != EntityType.MINECART && ent.getType() != EntityType.BOAT) + + if (ent.getType() != EntityType.MINECART && !(ent instanceof Boat)) return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); From 0f6f98ac94c3077647123656e0d40670840fee34 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 9 Aug 2024 12:36:36 +0300 Subject: [PATCH 1123/1142] Disabling boat leashing on 1.21+ servers --- .../ResidencePlayerListener1_21.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_21.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_21.java index f955792a1..96eb7f887 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_21.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_21.java @@ -1,6 +1,8 @@ package com.bekvon.bukkit.residence.listeners; import org.bukkit.Location; +import org.bukkit.entity.Boat; +import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; @@ -9,6 +11,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerSignOpenEvent; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -16,9 +19,12 @@ import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.Flags; import com.bekvon.bukkit.residence.containers.lm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; import com.bekvon.bukkit.residence.protection.FlagPermissions; import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; +import net.Zrips.CMILib.Entities.CMIEntityType; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidencePlayerListener1_21 implements Listener { @@ -51,4 +57,36 @@ public void OnEntityDeath(EntityDeathEvent event) { // Removing weaving effect on death as there is no other way to properly handle this effect inside residence ent.removePotionEffect(PotionEffectType.WEAVING); } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onFenceLeashInteract(PlayerInteractEntityEvent event) { + + // Disabling listener if flag disabled globally + if (!Flags.leash.isGlobalyEnabled()) + return; + + // disabling event on world + if (plugin.isDisabledWorldListener(event.getRightClicked().getWorld())) + return; + Player player = event.getPlayer(); + + Entity entity = event.getRightClicked(); + + if (!(entity instanceof Boat)) + return; + + if (plugin.isResAdminOn(player)) + return; + + ClaimedResidence res = plugin.getResidenceManager().getByLoc(entity.getLocation()); + + if (res == null) + return; + + if (res.getPermissions().playerHas(player, Flags.leash, FlagCombo.OnlyFalse)) { + plugin.msg(player, lm.Residence_FlagDeny, Flags.leash, res.getName()); + event.setCancelled(true); + player.updateInventory(); + } + } } From 02ec4118dd9ffcdc612596e1e7313b54fb359e5b Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 9 Aug 2024 13:23:52 +0300 Subject: [PATCH 1124/1142] Option to block residence teleport located in specific worlds --- .../bukkit/residence/ConfigManager.java | 10 ++++ .../bekvon/bukkit/residence/commands/tp.java | 57 ++++++++++--------- .../bukkit/residence/containers/lm.java | 1 + 3 files changed, 42 insertions(+), 26 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/ConfigManager.java b/src/com/bekvon/bukkit/residence/ConfigManager.java index 6345661e9..b318fd247 100644 --- a/src/com/bekvon/bukkit/residence/ConfigManager.java +++ b/src/com/bekvon/bukkit/residence/ConfigManager.java @@ -39,6 +39,7 @@ import net.Zrips.CMILib.CMILib; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.CMIList; import net.Zrips.CMILib.Container.CMINumber; import net.Zrips.CMILib.Effects.CMIEffectManager.CMIParticle; import net.Zrips.CMILib.FileHandler.ConfigReader; @@ -147,6 +148,7 @@ public class ConfigManager { protected int VisualizerUpdateInterval; protected int TeleportDelay; protected boolean TeleportTitleMessage; + private List TeleportBlockedWorlds; protected int VisualizerRowSpacing; protected int VisualizerCollumnSpacing; protected int VisualizerSkipBy; @@ -871,6 +873,10 @@ public void UpdateConfigFile() { TeleportDelay = c.get("Global.Tp.TeleportDelay", 3); c.addComment("Global.Tp.TeleportTitleMessage", "Show aditional message in title message area when player is teleporting to residence"); TeleportTitleMessage = c.get("Global.Tp.TeleportTitleMessage", true); + + c.addComment("Global.Tp.BlockedWorlds", "List of worlds where teleportation using /res tp is not allowed","This only blocks teleportation to those worlds, not from them"); + TeleportBlockedWorlds = c.get("Global.Tp.BlockedWorlds", Arrays.asList("SomeWorldNames")); + CMIList.toLowerCase(TeleportBlockedWorlds); Set worlds = new HashSet(); @@ -2375,6 +2381,10 @@ public boolean isDisableResidenceCreation() { return DisableResidenceCreation; } + public List getTeleportBlockedWorlds() { + return TeleportBlockedWorlds; + } + // public int getTownMinRange() { // return TownMinRange; // } diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index f5cfb132a..6f3c80351 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -19,41 +19,46 @@ public class tp implements cmd { @Override @CommandAnnotation(simple = true, priority = 1400) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player)) - return false; + if (!(sender instanceof Player)) + return false; - Player player = (Player) sender; - if (args.length != 1 && args.length != 0) - return false; + Player player = (Player) sender; + if (args.length != 1 && args.length != 0) + return false; - ClaimedResidence res = null; - if (args.length > 0) - res = plugin.getResidenceManager().getByName(args[0]); + ClaimedResidence res = null; + if (args.length > 0) + res = plugin.getResidenceManager().getByName(args[0]); - if (res == null && args.length == 0) { - res = plugin.getPlayerManager().getResidencePlayer(player).getMainResidence(); - } + if (res == null && args.length == 0) { + res = plugin.getPlayerManager().getResidencePlayer(player).getMainResidence(); + } - if (res == null) { - plugin.msg(player, lm.Invalid_Residence); - return true; - } + if (res == null) { + plugin.msg(player, lm.Invalid_Residence); + return true; + } - if (res.getRaid().isRaidInitialized() && res.getRaid().isAttacker(player)) { - plugin.msg(player, lm.Raid_cantDo); - return true; - } + if (res.getRaid().isRaidInitialized() && res.getRaid().isAttacker(player)) { + plugin.msg(player, lm.Raid_cantDo); + return true; + } - res.tpToResidence(player, player, resadmin); - return true; + if (plugin.getConfigManager().getTeleportBlockedWorlds().contains(res.getPermissions().getWorldName().toLowerCase())) { + plugin.msg(player, lm.Residence_TeleportBlockedWorlds); + return true; + } + + res.tpToResidence(player, player, resadmin); + return true; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Teleport to a residence"); - c.get("Info", Arrays.asList("&eUsage: &6/res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", - "Your permission group must also be allowed to teleport by the server admin.")); - LocaleManager.addTabCompleteMain(this, "[residence]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Teleport to a residence"); + c.get("Info", Arrays.asList("&eUsage: &6/res tp [residence]", "Teleports you to a residence, you must have +tp flag access or be the owner.", + "Your permission group must also be allowed to teleport by the server admin.")); + LocaleManager.addTabCompleteMain(this, "[residence]"); } } diff --git a/src/com/bekvon/bukkit/residence/containers/lm.java b/src/com/bekvon/bukkit/residence/containers/lm.java index 5ed1e4fc0..da612e067 100644 --- a/src/com/bekvon/bukkit/residence/containers/lm.java +++ b/src/com/bekvon/bukkit/residence/containers/lm.java @@ -264,6 +264,7 @@ public enum lm { Residence_Near("&eNearby residences: &7%1"), Residence_TeleportNear("&eTeleported to near residence."), Residence_SetTeleportLocation("&eTeleport Location Set..."), + Residence_TeleportBlockedWorlds("&cCan't teleport to residence in blocked world"), Residence_PermissionsApply("&ePermissions applied to residence."), Residence_NotOwner("&cYou are not owner of this residence"), Residence_RemovePlayersResidences("&eRemoved all residences belonging to player &6%1"), From 3943189ce456315e647dbde0aeb7adc47cafe759 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 9 Aug 2024 13:30:48 +0300 Subject: [PATCH 1125/1142] Not firing flag check event when check originates from SlimeFun --- .../bukkit/residence/slimeFun/SlimeFunResidenceModule.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java index 4b9dcad30..02054ab51 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimeFunResidenceModule.java @@ -12,6 +12,7 @@ import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.ResidencePermissions; import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.Interaction; import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.ProtectionModule; @@ -53,7 +54,10 @@ public boolean hasPermission(OfflinePlayer op, Location loc, Interaction action) Player player = Bukkit.getPlayer(op.getUniqueId()); if (player == null) return false; - return ResidenceBlockListener.canBreakBlock(player, loc, true); + ResidencePermissions.setEventCallsSuspended(true); + boolean result = ResidenceBlockListener.canBreakBlock(player, loc, true); + ResidencePermissions.setEventCallsSuspended(false); + return result; default: break; } From 6910c245ececfcc9d9629eb9d912e0656f6a6088 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 12 Aug 2024 12:37:36 +0300 Subject: [PATCH 1126/1142] Reworking teleportation handling to be in async when possible --- .../bekvon/bukkit/residence/Residence.java | 5 +- .../bukkit/residence/commands/compass.java | 14 +- .../bukkit/residence/commands/kick.java | 23 +- .../bekvon/bukkit/residence/commands/tp.java | 3 +- .../bukkit/residence/commands/tpconfirm.java | 6 +- .../bukkit/residence/commands/unstuck.java | 16 +- .../residence/containers/RandomLoc.java | 17 +- .../listeners/ResidenceBlockListener.java | 45 +- .../listeners/ResidencePlayerListener.java | 42 +- .../protection/ClaimedResidence.java | 422 +++++---------- .../bukkit/residence/raid/ResidenceRaid.java | 6 +- .../bukkit/residence/utils/LocationCheck.java | 31 ++ .../bukkit/residence/utils/LocationUtil.java | 484 ++++++++++++++++++ .../residence/utils/LocationValidity.java | 5 + .../residence/utils/PositionRelativeData.java | 53 ++ .../residence/utils/SafeLocationCache.java | 40 ++ 16 files changed, 814 insertions(+), 398 deletions(-) create mode 100644 src/com/bekvon/bukkit/residence/utils/LocationCheck.java create mode 100644 src/com/bekvon/bukkit/residence/utils/LocationUtil.java create mode 100644 src/com/bekvon/bukkit/residence/utils/LocationValidity.java create mode 100644 src/com/bekvon/bukkit/residence/utils/PositionRelativeData.java create mode 100644 src/com/bekvon/bukkit/residence/utils/SafeLocationCache.java diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index bf5d1e753..abde3b3cf 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -127,6 +127,7 @@ import com.bekvon.bukkit.residence.utils.CrackShot; import com.bekvon.bukkit.residence.utils.FileCleanUp; import com.bekvon.bukkit.residence.utils.RandomTp; +import com.bekvon.bukkit.residence.utils.SafeLocationCache; import com.bekvon.bukkit.residence.utils.Sorting; import com.bekvon.bukkit.residence.utils.TabComplete; import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter; @@ -241,7 +242,7 @@ public class Residence extends JavaPlugin { public HashMap rtMap = new HashMap(); public List teleportDelayMap = new ArrayList(); - public HashMap teleportMap = new HashMap(); + public HashMap teleportMap = new HashMap(); private Placeholder Placeholder; private boolean PlaceholderAPIEnabled = false; @@ -252,7 +253,7 @@ public boolean isSpigot() { return spigotPlatform; } - public HashMap getTeleportMap() { + public HashMap getTeleportMap() { return teleportMap; } diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index b63d2581e..c3bb5a92d 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -1,12 +1,15 @@ package com.bekvon.bukkit.residence.commands; import java.util.Arrays; +import java.util.concurrent.CompletableFuture; import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; + import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -43,11 +46,14 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo CuboidArea area = res.getMainArea(); if (area == null) return false; - Location loc = res.getTeleportLocation(player, false); - if (loc == null) + CompletableFuture future = res.getTeleportLocationASYNC(player, false); + if (future == null) return false; - player.setCompassTarget(loc); - plugin.msg(player, lm.General_CompassTargetSet, args[0]); + + future.thenAccept(loc1 -> { + CMIScheduler.runAtEntity(player, () -> player.setCompassTarget(loc1)); + plugin.msg(player, lm.General_CompassTargetSet, args[0]); + }); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/kick.java b/src/com/bekvon/bukkit/residence/commands/kick.java index fdab4761f..678f70561 100644 --- a/src/com/bekvon/bukkit/residence/commands/kick.java +++ b/src/com/bekvon/bukkit/residence/commands/kick.java @@ -3,7 +3,6 @@ import java.util.Arrays; import org.bukkit.Bukkit; -import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -19,8 +18,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence; import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Locale.LC; -import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; public class kick implements cmd { @@ -72,25 +69,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo plugin.msg(sender, lm.Residence_CantKick); return true; } - - Location loc = plugin.getConfigManager().getKickLocation(); - targetplayer.closeInventory(); - - if (loc == null) - loc = res.getOutsideFreeLoc(targetplayer.getLocation(), targetplayer, true); - - if (loc == null) { - LC.info_IncorrectLocation.getLocale(); - return true; - } - - CMITeleporter.teleportAsync(targetplayer, loc).thenApply(success -> { - if (success) - plugin.msg(targetplayer, lm.Residence_Kicked); - else - plugin.msg(targetplayer, lm.General_TeleportCanceled); - return null; - }); + res.kickFromResidence(targetplayer); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/tp.java b/src/com/bekvon/bukkit/residence/commands/tp.java index 6f3c80351..db6abbc05 100644 --- a/src/com/bekvon/bukkit/residence/commands/tp.java +++ b/src/com/bekvon/bukkit/residence/commands/tp.java @@ -44,11 +44,12 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } - if (plugin.getConfigManager().getTeleportBlockedWorlds().contains(res.getPermissions().getWorldName().toLowerCase())) { + if (plugin.getConfigManager().getTeleportBlockedWorlds().contains(res.getPermissions().getWorldName().toLowerCase())) { plugin.msg(player, lm.Residence_TeleportBlockedWorlds); return true; } + plugin.getTeleportMap().remove(player.getUniqueId()); res.tpToResidence(player, player, resadmin); return true; } diff --git a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java index a152304f8..3fed3dbb5 100644 --- a/src/com/bekvon/bukkit/residence/commands/tpconfirm.java +++ b/src/com/bekvon/bukkit/residence/commands/tpconfirm.java @@ -23,9 +23,9 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (args.length != 0) { return false; } - if (plugin.getTeleportMap().containsKey(player.getName())) { - plugin.getTeleportMap().get(player.getName()).tpToResidence(player, player, resadmin); - plugin.getTeleportMap().remove(player.getName()); + if (plugin.getTeleportMap().containsKey(player.getUniqueId())) { + plugin.getTeleportMap().get(player.getUniqueId()).getResidence().tpToResidence(player, player, resadmin); + plugin.getTeleportMap().remove(player.getUniqueId()); } else plugin.msg(player, lm.General_NoTeleportConfirm); return true; diff --git a/src/com/bekvon/bukkit/residence/commands/unstuck.java b/src/com/bekvon/bukkit/residence/commands/unstuck.java index f0d0d2c4c..697336441 100644 --- a/src/com/bekvon/bukkit/residence/commands/unstuck.java +++ b/src/com/bekvon/bukkit/residence/commands/unstuck.java @@ -2,13 +2,9 @@ import java.util.Arrays; -import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; - import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; @@ -18,6 +14,8 @@ import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import net.Zrips.CMILib.FileHandler.ConfigReader; + public class unstuck implements cmd { @Override @@ -36,14 +34,14 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; } ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); + if (res == null) { plugin.msg(player, lm.Residence_NotIn); - } else { - plugin.msg(player, lm.General_Moved); - Location loc = res.getOutsideFreeLoc(player.getLocation(), player, true); - if (loc != null) - CMITeleporter.teleportAsync(player, loc); + return true; } + + res.kickFromResidence(player); + return true; } diff --git a/src/com/bekvon/bukkit/residence/containers/RandomLoc.java b/src/com/bekvon/bukkit/residence/containers/RandomLoc.java index 525a4975e..21376dbdf 100644 --- a/src/com/bekvon/bukkit/residence/containers/RandomLoc.java +++ b/src/com/bekvon/bukkit/residence/containers/RandomLoc.java @@ -6,21 +6,26 @@ public class RandomLoc { double y = 0D; double z = 0D; + public RandomLoc(double x, double z) { + this.x = x; + this.z = z; + } + public RandomLoc(double x, double y, double z) { - this.x = x; - this.y = y; - this.z = z; + this.x = x; + this.y = y; + this.z = z; } public double getX() { - return x; + return x; } public double getY() { - return y; + return y; } public double getZ() { - return z; + return z; } } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 2e6c86bcb..2dc83ae80 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -8,7 +8,6 @@ import java.util.Set; import java.util.UUID; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -118,32 +117,33 @@ public void onButtonHitWithProjectile(ProjectileHitEvent e) { ClaimedResidence res = plugin.getResidenceManager().getByLoc(block.getLocation()); Flags result = FlagPermissions.getMaterialUseFlagList().get(block.getType()); - if (result != null) { - main: if (!perms.playerHas(player, result, hasuse)) { - - if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { - break main; - } + if (result == null) + return; - switch (result) { - case button: - if (ResPerm.bypass_button.hasPermission(player, 10000L)) - break main; - break; - } + if (perms.playerHas(player, result, hasuse)) + return; - e.setCancelled(true); - plugin.msg(player, lm.Flag_Deny, result); - CMIScheduler.runAtLocation(block.getLocation(), () -> { - Location loc = block.getLocation().clone(); - loc.add(e.getHitBlockFace().getDirection()); - CMITeleporter.teleportAsync(e.getEntity(), loc); - e.getEntity().setVelocity(e.getEntity().getVelocity().multiply(-1)); - }); + if (res != null && res.getRaid().isUnderRaid() && res.getRaid().isAttacker(player)) { + return; + } + switch (result) { + case button: + if (ResPerm.bypass_button.hasPermission(player, 10000L)) return; - } + break; } + + e.setCancelled(true); + plugin.msg(player, lm.Flag_Deny, result); + CMIScheduler.runAtLocation(block.getLocation(), () -> { + Location loc = block.getLocation().clone(); + loc.add(e.getHitBlockFace().getDirection()); + CMITeleporter.teleportAsync(e.getEntity(), loc); + e.getEntity().setVelocity(e.getEntity().getVelocity().multiply(-1)); + }); + + return; } @EventHandler(priority = EventPriority.LOWEST) @@ -956,6 +956,7 @@ public void onLandDryFade(BlockFadeEvent event) { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onLandDryPhysics(BlockPhysicsEvent event) { + // Moved to separate class if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) return; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index f3fbf2b2d..226979f17 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -93,7 +93,6 @@ import net.Zrips.CMILib.Entities.CMIEntityType; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; @@ -486,6 +485,7 @@ public void onPlayerQuitEvent(PlayerQuitEvent event) { checkSpecialFlags(player, null, plugin.getResidenceManager().getByLoc(player.getLocation())); plugin.getPlayerManager().getResidencePlayer(player).onQuit(); + plugin.getTeleportMap().remove(player.getUniqueId()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -974,7 +974,7 @@ public void onPlayerSpawn(PlayerRespawnEvent event) { } res = plugin.getResidenceManager().getByLoc(loc); if (res != null && res.getPermissions().playerHas(player, Flags.move, FlagCombo.OnlyFalse)) { - loc = res.getOutsideFreeLoc(loc, player, true); + res.kickFromResidence(player); } plugin.msg(player, lm.General_NoSpawn); @@ -1700,7 +1700,7 @@ public void onPlayerInteractWithMinecart(PlayerInteractEntityEvent event) { return; Entity ent = event.getRightClicked(); - + if (ent.getType() != EntityType.MINECART && !(ent instanceof Boat)) return; @@ -2339,7 +2339,7 @@ private boolean teleport(Player player, Location loc) { if (player == null || !player.isOnline() || loc == null) return false; - if (Version.isFolia()) { + if (Version.isAsyncProcessing()) { CMITeleporter.teleportAsync(player, loc); return true; } @@ -2374,7 +2374,8 @@ private boolean checkNoFly(Player player, ClaimedResidence res, ClaimedResidence res = plugin.getResidenceManager().getByLoc(lastLoc); if (res != null) { if (Flags.tp.isGlobalyEnabled() && res.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { - teleported = teleport(player, res.getOutsideFreeLoc(lastLoc, player, true)); + res.kickFromResidence(player); + teleported = true; } else { player.setFlying(false); player.setAllowFlight(false); @@ -2383,7 +2384,8 @@ private boolean checkNoFly(Player player, ClaimedResidence res, ClaimedResidence teleported = teleport(player, lastLoc); } } else { - teleported = teleport(player, res.getOutsideFreeLoc(loc, player, true)); + res.kickFromResidence(player); + teleported = true; } if (teleported) { player.setFlying(false); @@ -2466,9 +2468,9 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move boolean teleported = false; if (preRes != null && Flags.tp.isGlobalyEnabled() && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { - Location newLoc = res.getOutsideFreeLoc(loc, player, true); + res.kickFromResidence(player); player.closeInventory(); - teleported = teleport(player, newLoc); + teleported = true; } if (!teleported) { @@ -2476,16 +2478,16 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move StuckInfo info = updateStuckTeleport(player, loc); player.closeInventory(); if (info != null && info.getTimesTeleported() > 5) { - Location newLoc = res.getOutsideFreeLoc(loc, player, true); - teleported = teleport(player, newLoc); + res.kickFromResidence(player); + teleported = true; } else { teleported = teleport(player, lastLoc); } } if (!teleported) { - Location newLoc = res.getOutsideFreeLoc(loc, player, true); + res.kickFromResidence(player); player.closeInventory(); - teleported = teleport(player, newLoc); + teleported = true; } } @@ -2519,9 +2521,9 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move ClaimedResidence preRes = plugin.getResidenceManager().getByLoc(lastLoc); boolean teleported = false; if (preRes != null && preRes.getPermissions().playerHas(player, Flags.tp, FlagCombo.OnlyFalse) && !ResPerm.admin_tp.hasPermission(player, 10000L)) { - Location newLoc = res.getOutsideFreeLoc(loc, player, true); + res.kickFromResidence(player); player.closeInventory(); - teleported = teleport(player, newLoc); + teleported = true; } if (!teleported) { @@ -2529,17 +2531,17 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move StuckInfo info = updateStuckTeleport(player, loc); player.closeInventory(); if (info != null && info.getTimesTeleported() > 5) { - Location newLoc = res.getOutsideFreeLoc(loc, player, true); - teleported = teleport(player, newLoc); + res.kickFromResidence(player); + teleported = true; } else { teleported = teleport(player, lastLoc); } } if (!teleported) { - Location newLoc = res.getOutsideFreeLoc(loc, player, true); + res.kickFromResidence(player); player.closeInventory(); - teleported = teleport(player, newLoc); + teleported = true; } } @@ -2581,7 +2583,7 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move Long last = lastUpdate.get(player.getUniqueId()); // Fail safe in case we are triggering teleportation event check with this teleportation, we should teleport player outside residence instead of its repeating teleportation to avoid stack overflow if (last != null && System.currentTimeMillis() - last < 45L) { - teleport(player, res.getOutsideFreeLoc(loc, player, true)); + res.kickFromResidence(player); } else { this.lastUpdate.put(player.getUniqueId(), System.currentTimeMillis()); @@ -2598,7 +2600,7 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move teleport(player, lastLoc); } } else { - teleport(player, res.getOutsideFreeLoc(loc, player, true)); + res.kickFromResidence(player); } return false; } else { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index a6f165f8a..54900aa36 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -19,6 +19,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Chunk; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; @@ -50,6 +51,7 @@ import com.bekvon.bukkit.residence.event.ResidenceTPEvent; import com.bekvon.bukkit.residence.itemlist.ItemList.ListType; import com.bekvon.bukkit.residence.itemlist.ResidenceItemList; +import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener; import com.bekvon.bukkit.residence.listeners.ResidencePlayerListener; import com.bekvon.bukkit.residence.permissions.PermissionGroup; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; @@ -57,15 +59,24 @@ import com.bekvon.bukkit.residence.raid.ResidenceRaid; import com.bekvon.bukkit.residence.shopStuff.ShopVote; import com.bekvon.bukkit.residence.signsStuff.Signs; +import com.bekvon.bukkit.residence.utils.LocationCheck; +import com.bekvon.bukkit.residence.utils.LocationUtil; +import com.bekvon.bukkit.residence.utils.LocationValidity; +import com.bekvon.bukkit.residence.utils.SafeLocationCache; import com.bekvon.bukkit.residence.utils.Utils; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.CMINumber; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Container.PageInfo; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Locale.LC; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Version.Version; +import net.Zrips.CMILib.Version.PaperMethods.CMIChunkSnapShot; +import net.Zrips.CMILib.Version.PaperMethods.PaperLib; import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; import net.Zrips.CMILib.Version.Teleporters.CMITeleporter; @@ -78,8 +89,8 @@ public class ClaimedResidence { protected ResidencePermissions perms; protected ResidenceBank bank; protected double BlockSellPrice = 0.0; - protected Vector tpLoc; - protected Vector PitchYaw; + public Vector tpLoc; + public Vector PitchYaw; protected String enterMessage = null; protected String leaveMessage = null; protected String ShopDesc = null; @@ -974,16 +985,7 @@ public long getXZSize() { } public CuboidArea[] getAreaArray() { - return areas.values().toArray(new CuboidArea[0]); - -// CuboidArea[] temp = new CuboidArea[areas.size()]; -// int i = 0; -// for (CuboidArea area : areas.values()) { -// temp[i] = area; -// i++; -// } -// return temp; } public Map getAreaMap() { @@ -1043,187 +1045,6 @@ public void setEnterLeaveMessage(CommandSender sender, String message, boolean e Residence.getInstance().msg(sender, lm.Residence_MessageChange); } - public Location getMiddleFreeLoc(Location insideLoc, Player player) { - return getMiddleFreeLoc(insideLoc, player, true); - } - - public Location getMiddleFreeLoc(Location insideLoc, Player player, boolean toSpawnOnFail) { - if (insideLoc == null) - return null; - CuboidArea area = this.getAreaByLoc(insideLoc); - if (area == null) { - return insideLoc; - } - - int y = area.getHighVector().getBlockY(); - int lowY = area.getLowVector().getBlockY(); - - int x = area.getLowVector().getBlockX() + area.getXSize() / 2; - int z = area.getLowVector().getBlockZ() + area.getZSize() / 2; - - Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); - boolean found = false; - int it = 1; - int maxIt = newLoc.getBlockY() + 1; - - try { - if (!Version.isFolia()) - insideLoc.getChunk().setForceLoaded(true); - } catch (Throwable e) { - } - - try { - while (it < maxIt) { - it++; - - if (newLoc.getBlockY() < lowY) - break; - - newLoc.add(0, -1, 0); - - Block block = newLoc.getBlock(); - Block block2 = newLoc.clone().add(0, 1, 0).getBlock(); - Block block3 = newLoc.clone().add(0, -1, 0).getBlock(); - - if (Version.isFolia()) { - found = true; - break; - } else if (ResidencePlayerListener.isEmptyBlock(block) && ResidencePlayerListener.isEmptyBlock(block2) - && !ResidencePlayerListener.isEmptyBlock(block3)) { - found = true; - break; - } - } - } catch (Throwable e) { - } - - try { - if (!Version.isFolia()) - insideLoc.getChunk().setForceLoaded(false); - } catch (Throwable e) { - } - - if (found) { - if (player != null) { - newLoc.setPitch(player.getLocation().getPitch()); - newLoc.setYaw(player.getLocation().getYaw()); - } - return newLoc; - } - return getOutsideFreeLoc(insideLoc, player, toSpawnOnFail); - } - - @Deprecated - public Location getOutsideFreeLoc(Location insideLoc, Player player) { - return getOutsideFreeLoc(insideLoc, player, true); - } - - public Location getOutsideFreeLoc(Location insideLoc, Player player, boolean toSpawnOnFail) { - CuboidArea area = this.getAreaByLoc(insideLoc); - if (area == null) { - if (!toSpawnOnFail) - return null; - World bw = this.getPermissions().getBukkitWorld(); - return bw != null ? bw.getSpawnLocation() != null ? bw.getSpawnLocation() : player.getWorld().getSpawnLocation() : player.getWorld().getSpawnLocation(); - } - - List randomLocList = new ArrayList(); - - for (int z = -1; z < area.getZSize() + 2; z++) { - randomLocList.add(new RandomLoc(area.getLowVector().getX(), 0, area.getLowVector().getZ() + z)); - randomLocList.add(new RandomLoc(area.getLowVector().getX() + area.getXSize(), 0, area.getLowVector().getZ() + z)); - } - - for (int x = -1; x < area.getXSize() + 2; x++) { - randomLocList.add(new RandomLoc(area.getLowVector().getX() + x, 0, area.getLowVector().getZ())); - randomLocList.add(new RandomLoc(area.getLowVector().getX() + x, 0, area.getLowVector().getZ() + area.getZSize())); - } - - Location loc = insideLoc.clone(); - - boolean admin = ResPerm.admin_tp.hasPermission(player); - - boolean found = false; - int it = 0; - int maxIt = 15; - while (!found && it < maxIt) { - it++; - - Random ran = new Random(System.currentTimeMillis()); - if (randomLocList.isEmpty()) - break; - int check = ran.nextInt(randomLocList.size()); - RandomLoc place = randomLocList.get(check); - randomLocList.remove(check); - double x = place.getX(); - double z = place.getZ(); - - loc.setX(x); - loc.setZ(z); - loc.setY(area.getHighVector().getBlockY()); - - int max = area.getHighVector().getBlockY(); - max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; - - for (int i = max; i > area.getLowVector().getY(); i--) { - loc.setY(i); - Block block = loc.getBlock(); - Block block2 = loc.clone().add(0, 1, 0).getBlock(); - Block block3 = loc.clone().add(0, -1, 0).getBlock(); - if (Version.isFolia()) { - found = true; - break; - } else if (!ResidencePlayerListener.isEmptyBlock(block3) && ResidencePlayerListener.isEmptyBlock(block) - && ResidencePlayerListener.isEmptyBlock(block2)) { - break; - } - } - - if (!ResidencePlayerListener.isEmptyBlock(loc.getBlock())) - continue; - - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.LAVA) - continue; - - if (loc.clone().add(0, -1, 0).getBlock().getState().getType() == Material.WATER) - continue; - - ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(loc); - if (res != null && player != null && (!res.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) || !res.getPermissions().playerHas(player, Flags.move, FlagCombo.TrueOrNone)) - && !admin) - continue; - - found = true; - loc.add(0.5, 0.1, 0.5); - - // In case empty space is on opposite side - if (Residence.getInstance().getResidenceManager().getByLoc(loc) == this) { - loc.add(-1, 0, -1); - } - - break; - } - - if (!found) { - if (Residence.getInstance().getConfigManager().getKickLocation() != null) { - return Residence.getInstance().getConfigManager().getKickLocation(); - } - // Fail safe for kick out location - - if (!toSpawnOnFail) - return null; - - World bw = this.getPermissions().getBukkitWorld(); - - return bw != null ? bw.getSpawnLocation() != null ? bw.getSpawnLocation() : player.getWorld().getSpawnLocation() : player.getWorld().getSpawnLocation(); - } - if (player != null) { - loc.setPitch(player.getLocation().getPitch()); - loc.setYaw(player.getLocation().getYaw()); - } - return loc; - } - public CuboidArea getMainArea() { CuboidArea area = areas.get(this.isSubzone() ? this.getResidenceName() : "main"); if (area == null && !areas.isEmpty()) { @@ -1349,6 +1170,7 @@ public Location getTeleportLocation(Player player) { } public Location getTeleportLocation(Player player, boolean toSpawnOnFail) { + if (tpLoc == null || this.getMainArea() != null && !this.containsLoc(new Location(this.getMainArea().getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ()))) { if (this.getMainArea() == null) @@ -1358,12 +1180,6 @@ public Location getTeleportLocation(Player player, boolean toSpawnOnFail) { Location t = new Location(this.getMainArea().getWorld(), (low.getBlockX() + high.getBlockX()) / 2, (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); - - t = this.getMiddleFreeLoc(t, player, toSpawnOnFail); - - if (t == null) - return null; - tpLoc = t.toVector(); } @@ -1378,6 +1194,10 @@ public Location getTeleportLocation(Player player, boolean toSpawnOnFail) { return loc; } + public CompletableFuture getTeleportLocationASYNC(Player player, boolean toSpawnOnFail) { + return LocationUtil.getTeleportLocationASYNC(this, player, toSpawnOnFail); + } + public void setTpLoc(Player player, boolean resadmin) { if (!this.perms.hasResidencePermission(player, false) && !resadmin) { Residence.getInstance().msg(player, lm.General_NoPermission); @@ -1388,67 +1208,22 @@ public void setTpLoc(Player player, boolean resadmin) { return; } -// world = player.getWorld(); tpLoc = player.getLocation().toVector(); PitchYaw = new Vector(player.getLocation().getPitch(), player.getLocation().getYaw(), 0); Residence.getInstance().msg(player, lm.Residence_SetTeleportLocation); } - public int isSafeTp(Player player) { - if (player.getAllowFlight()) - return 0; - - if (player.getGameMode() == GameMode.CREATIVE) - return 0; - - if (Utils.isSpectator(player.getGameMode())) - return 0; - - if (tpLoc == null) - return 0; - - // Temp fix for Folia. - if (Version.isFolia()) - return 0; - - Location tempLoc = this.getTeleportLocation(player, false); - - if (tempLoc == null) - return 0; - - int fallDistance = 0; - for (int i = (int) tempLoc.getY(); i >= CMIWorld.getMinHeight(tempLoc.getWorld()); i--) { - if (i == 0) { - fallDistance = 555; - break; - } - tempLoc.setY(i); - Block block = tempLoc.getBlock(); - if (ResidencePlayerListener.isEmptyBlock(block)) { - fallDistance++; - } else { - - if (CMIMaterial.get(block).isLava()) { - fallDistance = 556; - } - - break; - } - } - return fallDistance; - } - - public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean resadmin) { + public void tpToResidence(final Player reqPlayer, final Player targetPlayer, final boolean resadmin) { - boolean isAdmin = Residence.getInstance().isResAdminOn(reqPlayer); + boolean isAdmin = Residence.getInstance().isResAdminOn(reqPlayer) || resadmin; if (this.getRaid().isRaidInitialized()) { - if (this.getRaid().isAttacker(targetPlayer) || this.getRaid().isDefender(targetPlayer) && !ConfigManager.RaidDefenderTeleport || !resadmin) { + if (this.getRaid().isAttacker(targetPlayer) || this.getRaid().isDefender(targetPlayer) && !ConfigManager.RaidDefenderTeleport || !isAdmin) { Residence.getInstance().msg(reqPlayer, lm.Raid_cantDo); return; } } else { - if (!resadmin && !isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer, 10000L) && !ResPerm.admin_tp.hasPermission(reqPlayer, 10000L) + if (!isAdmin && !ResPerm.bypass_tp.hasPermission(reqPlayer, 10000L) && !ResPerm.admin_tp.hasPermission(reqPlayer, 10000L) && (!this.isOwner(targetPlayer) || this.isOwner(targetPlayer) && Residence.getInstance().getConfigManager().isCanTeleportIncludeOwner())) { ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(reqPlayer); PermissionGroup group = rPlayer.getGroup(); @@ -1471,29 +1246,47 @@ public void tpToResidence(Player reqPlayer, final Player targetPlayer, boolean r } } - ClaimedResidence old = Residence.getInstance().getTeleportMap().get(targetPlayer.getName()); + SafeLocationCache old = Residence.getInstance().getTeleportMap().get(targetPlayer.getUniqueId()); if (Bukkit.getWorld(this.getPermissions().getWorldName()) == null) return; - if (old == null || !old.equals(this)) { - int distance = isSafeTp(reqPlayer); - if (distance > 6) { - if (distance == 556) - lm.General_TeleportConfirmLava.sendMessage(reqPlayer, distance); - else if (distance == 555) - lm.General_TeleportConfirmVoid.sendMessage(reqPlayer, distance); - else - lm.General_TeleportConfirm.sendMessage(reqPlayer, distance); - - Residence.getInstance().getTeleportMap().put(reqPlayer.getName(), this); + if (old == null || !old.getResidence().equals(this)) { + CompletableFuture future = LocationUtil.isSafeTeleportASYNC(this, reqPlayer); + future.thenAccept(result -> { + validityCheck(reqPlayer, targetPlayer, resadmin, result); return; - } + }); + + return; + } + + continueTeleport(reqPlayer, targetPlayer, resadmin); + Residence.getInstance().getTeleportMap().remove(targetPlayer.getUniqueId()); + } + + private void validityCheck(Player reqPlayer, final Player targetPlayer, boolean resadmin, LocationCheck result) { + SafeLocationCache safety = new SafeLocationCache(this); + safety.setValidity(result); + Residence.getInstance().getTeleportMap().put(reqPlayer.getUniqueId(), safety); + + if (result.getValidity().equals(LocationValidity.Valid)) { + continueTeleport(reqPlayer, targetPlayer, resadmin); + return; } + if (result.getValidity().equals(LocationValidity.Lava)) + lm.General_TeleportConfirmLava.sendMessage(reqPlayer, result.getFallDistance()); + else if (result.getValidity().equals(LocationValidity.Void)) + lm.General_TeleportConfirmVoid.sendMessage(reqPlayer, result.getFallDistance()); + else + lm.General_TeleportConfirm.sendMessage(reqPlayer, result.getFallDistance()); + } + + private void continueTeleport(Player reqPlayer, final Player targetPlayer, boolean isAdmin) { boolean bypassDelay = ResPerm.tpdelaybypass.hasPermission(targetPlayer); - if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !resadmin && !bypassDelay) { + if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) { Residence.getInstance().msg(reqPlayer, lm.General_TeleportStarted, this.getName(), Residence.getInstance().getConfigManager().getTeleportDelay()); @@ -1502,9 +1295,11 @@ else if (distance == 555) Residence.getInstance().getTeleportDelayMap().add(reqPlayer.getName()); } - Location loc = this.getTeleportLocation(targetPlayer, false); - finalizeTP(loc, reqPlayer, targetPlayer, resadmin, bypassDelay); + CompletableFuture future = this.getTeleportLocationASYNC(targetPlayer, false); + future.thenAccept(loc -> { + finalizeTP(loc, reqPlayer, targetPlayer, isAdmin, bypassDelay); + }); } private void finalizeTP(Location loc, Player reqPlayer, Player targetPlayer, boolean isAdmin, boolean bypassDelay) { @@ -1519,10 +1314,12 @@ private void finalizeTP(Location loc, Player reqPlayer, Player targetPlayer, boo return; } - if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) - performDelaydTp(loc, targetPlayer, reqPlayer, true); - else - performInstantTp(loc, targetPlayer, reqPlayer, true); + CMIScheduler.runTask(() -> { + if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) + performDelaydTp(loc, targetPlayer, reqPlayer, true); + else + performInstantTp(loc, targetPlayer, reqPlayer, true); + }); } public void TpTimer(final Player player, final int t) { @@ -1566,39 +1363,40 @@ private void performInstantTp(final Location targloc, final Player targetPlayer, final boolean near) { ResidenceTPEvent tpevent = new ResidenceTPEvent(this, targloc, targetPlayer, reqPlayer); Residence.getInstance().getServ().getPluginManager().callEvent(tpevent); - if (!tpevent.isCancelled()) { - targetPlayer.closeInventory(); - - try { - if (!Version.isFolia()) - targloc.getChunk().load(); - } catch (Throwable e) { - } + if (tpevent.isCancelled()) + return; - if (Version.isFolia()) { + targetPlayer.closeInventory(); - CompletableFuture future = CMITeleporter.teleportAsync(targetPlayer, targloc); - future.thenAccept(result -> { - if (result) { - if (near) - Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); - else - Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); - } - }); + try { + if (!Version.isFolia()) + targloc.getChunk().load(); + } catch (Throwable e) { + } - } else { - boolean teleported = targetPlayer.teleport(targloc); + if (Version.isAsyncProcessing()) { - if (teleported) { + CompletableFuture future = CMITeleporter.teleportAsync(targetPlayer, targloc); + future.thenAccept(result -> { + if (result) { if (near) Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); else Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); } - } - + }); + return; } + + boolean teleported = targetPlayer.teleport(targloc); + if (!teleported) + return; + + if (near) + Residence.getInstance().msg(targetPlayer, lm.Residence_TeleportNear); + else + Residence.getInstance().msg(targetPlayer, lm.General_TeleportSuccess); + } public String getAreaIDbyLoc(Location loc) { @@ -2273,29 +2071,41 @@ public void setLeaseExpireTime(long leaseExpireTime) { public boolean kickFromResidence(Player player) { if (!this.containsLoc(player.getLocation())) return false; + Location loc = Residence.getInstance().getConfigManager().getKickLocation(); player.closeInventory(); - if (loc != null) { - try { - return CMITeleporter.teleport(player, loc); - } catch (Throwable e) { - e.printStackTrace(); - return false; - } - } - loc = getOutsideFreeLoc(player.getLocation(), player, true); + if (loc == null) { + CompletableFuture future = LocationUtil.getOutsideFreeLocASYNC(this, player, true); - if (loc == null) - return false; + future.thenAccept(loc1 -> { - try { - return CMITeleporter.teleport(player, loc); - } catch (Throwable e) { - e.printStackTrace(); - return false; + if (loc1 == null) { + LC.info_IncorrectLocation.getLocale(); + return; + } + + CMITeleporter.teleportAsync(player, loc1).thenApply(success -> { + if (success) + Residence.getInstance().msg(player, lm.Residence_Kicked); + else + Residence.getInstance().msg(player, lm.General_TeleportCanceled); + return null; + }); + }); + return true; } + + CMITeleporter.teleportAsync(player, loc).thenApply(success -> { + if (success) + Residence.getInstance().msg(player, lm.Residence_Kicked); + else + Residence.getInstance().msg(player, lm.General_TeleportCanceled); + return null; + }); + return true; } + // public Town getTown() { // return town; // } diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java index 9886f8ae3..3d33dcaac 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -239,9 +239,9 @@ public void endRaid() { if (player == null) continue; Residence.getInstance().msg(player, lm.Raid_Ended, res.getName()); - Location outside = res.getOutsideFreeLoc(player.getLocation(), player, true); - if (outside != null) - CMITeleporter.teleportAsync(player, outside); + + res.kickFromResidence(player); + } for (Entry one : getAttackers().entrySet()) { diff --git a/src/com/bekvon/bukkit/residence/utils/LocationCheck.java b/src/com/bekvon/bukkit/residence/utils/LocationCheck.java new file mode 100644 index 000000000..063db7f72 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/LocationCheck.java @@ -0,0 +1,31 @@ +package com.bekvon.bukkit.residence.utils; + +public class LocationCheck { + private boolean permissionPass = true; + private int fallDistance = 0; + private LocationValidity validity = LocationValidity.Valid; + + public boolean isPermissionPass() { + return permissionPass; + } + + public void setPermissionPass(boolean permissionPass) { + this.permissionPass = permissionPass; + } + + public int getFallDistance() { + return fallDistance; + } + + public void setFallDistance(int fallDistance) { + this.fallDistance = fallDistance; + } + + public LocationValidity getValidity() { + return validity; + } + + public void setValidity(LocationValidity validity) { + this.validity = validity; + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/LocationUtil.java b/src/com/bekvon/bukkit/residence/utils/LocationUtil.java new file mode 100644 index 000000000..2970d1fb8 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/LocationUtil.java @@ -0,0 +1,484 @@ +package com.bekvon.bukkit.residence.utils; + +import java.lang.reflect.Method; +import java.util.Random; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +import org.bukkit.Chunk; +import org.bukkit.ChunkSnapshot; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.World.Environment; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import com.bekvon.bukkit.residence.Residence; +import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.RandomLoc; +import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.CuboidArea; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagCombo; + +import net.Zrips.CMILib.Container.CMIWorld; +import net.Zrips.CMILib.Items.CMIMC; +import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Messages.CMIMessages; +import net.Zrips.CMILib.Version.Version; +import net.Zrips.CMILib.Version.PaperMethods.CMIChunkSnapShot; +import net.Zrips.CMILib.Version.PaperMethods.PaperLib; +import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; + +public class LocationUtil { + static Method getBlockTypeId = null; + + private static CMIMaterial getBlockType(ChunkSnapshot snap, World world, int localX, int localY, int localZ) { + return getBlockType(snap, new PositionRelativeData(world, localX, localY, localZ)); + } + + private static CMIMaterial getBlockType(ChunkSnapshot snap, Location loc) { + return getBlockType(snap, new PositionRelativeData(loc)); + } + + private static CMIMaterial getBlockType(ChunkSnapshot snap, PositionRelativeData data) { + return getBlockType(snap, data.getLocalY(), data); + } + + @SuppressWarnings("deprecation") + private static CMIMaterial getBlockType(ChunkSnapshot snap, int localY, PositionRelativeData data) { + if (localY > data.getMaxWorldY() || localY < data.getMinWorldY()) + return CMIMaterial.AIR; + + if (snap == null) + return CMIMaterial.AIR; + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { + + if (localY >= data.getMaxWorldY()) + return CMIMaterial.AIR; + + return CMIMaterial.get(snap.getBlockType(data.getLocalX(), localY, data.getLocalZ())); + } + + if (snap.getHighestBlockYAt(data.getLocalX(), data.getLocalZ()) < localY) + return CMIMaterial.AIR; + + if (getBlockTypeId == null) + try { + getBlockTypeId = snap.getClass().getMethod("getBlockTypeId", int.class, int.class, int.class); + } catch (Throwable e) { + e.printStackTrace(); + } + + try { + return CMIMaterial.get((int) getBlockTypeId.invoke(snap, data.getLocalX(), localY, data.getLocalZ())); + } catch (Throwable e) { + e.printStackTrace(); + } + return CMIMaterial.AIR; + } + + private static boolean isEmptyBlock(CMIChunkSnapShot chunk, Location loc) { + + if (chunk == null) + return false; + + CMIMaterial material = getBlockType(chunk.getSnapshot(), loc); + + return isEmptyBlock(material); + } + + private static boolean isEmptyBlock(Material material) { + return isEmptyBlock(CMIMaterial.get(material)); + } + + private static boolean isEmptyBlock(CMIMaterial material) { + return material.containsCriteria(CMIMC.NOCOLLISIONBOX); + } + + private static boolean isValidLocation(CMIChunkSnapShot chunk, Location loc) { + + if (chunk == null) + return false; + + int chunkX = loc.getBlockX() & 0xF; + int chunkZ = loc.getBlockZ() & 0xF; + + CMIMaterial material = getBlockType(chunk.getSnapshot(), loc.getWorld(), chunkX, loc.getBlockY(), chunkZ); + + if (!isEmptyBlock(material)) + return false; + + CMIMaterial material1 = getBlockType(chunk.getSnapshot(), loc.getWorld(), chunkX, loc.getBlockY() + 1, chunkZ); + + if (!isEmptyBlock(material1)) + return false; + + CMIMaterial material2 = getBlockType(chunk.getSnapshot(), loc.getWorld(), chunkX, loc.getBlockY() - 1, chunkZ); + + if (material2 == CMIMaterial.LAVA) + return false; + + if (isEmptyBlock(material2)) + return false; + + return true; + } + + public static CompletableFuture getOutsideFreeLocASYNC(ClaimedResidence res, Player player, boolean toSpawnOnFail) { + return getOutsideFreeLocASYNC(res, player.getLocation(), player, toSpawnOnFail); + } + + public static CompletableFuture getOutsideFreeLocASYNC(ClaimedResidence res, Location insideLoc, Player player, boolean toSpawnOnFail) { + return CompletableFuture.supplyAsync(() -> getOutsideFreeLoc(res, insideLoc, player, toSpawnOnFail)); + } + + static Random ran = new Random(System.currentTimeMillis()); + + private static RandomLoc getRandomEdge(CuboidArea area, int it) { + switch (it % 4) { + case 0: + return new RandomLoc(area.getLowVector().getX() - 1, area.getLowVector().getZ() - 1 + ran.nextInt(area.getZSize() + 2)); + case 1: + return new RandomLoc(area.getHighVector().getX() + 1, area.getLowVector().getZ() - 1 + ran.nextInt(area.getZSize() + 2)); + case 2: + return new RandomLoc(area.getLowVector().getX() + ran.nextInt(area.getXSize()), area.getLowVector().getZ() - 1); + case 3: + default: + return new RandomLoc(area.getLowVector().getX() + ran.nextInt(area.getXSize()), area.getHighVector().getZ() + 1); + } + } + + private static Location getOutsideFreeLoc(ClaimedResidence res, Location insideLoc, Player player, boolean toSpawnOnFail) { + + CuboidArea area = res.getAreaByLoc(insideLoc); + if (area == null) { + if (!toSpawnOnFail) + return null; + World bw = res.getPermissions().getBukkitWorld(); + + return bw != null ? bw.getSpawnLocation() != null ? bw.getSpawnLocation() : player.getWorld().getSpawnLocation() : player.getWorld().getSpawnLocation(); + } + + int maxIt = 15; + + Location loc = insideLoc.clone(); + + boolean admin = ResPerm.admin_tp.hasPermission(player); + + boolean found = false; + int it = 0; + while (!found && it < maxIt) { + + it++; + + RandomLoc place = getRandomEdge(area, it); + + double x = place.getX(); + double z = place.getZ(); + + loc.setX(x); + loc.setZ(z); + loc.setY(area.getHighVector().getBlockY()); + + int max = area.getHighVector().getBlockY(); + max = loc.getWorld().getEnvironment() == Environment.NETHER ? 100 : max; + + CompletableFuture cs = getSnapshot(loc, true, false); + + CMIChunkSnapShot chunk = cs.join(); + + if (chunk.getSnapshot() == null) + continue; + + for (int i = max; i > area.getLowVector().getY(); i--) { + loc.setY(i); + try { + if (isValidLocation(chunk, loc)) { + break; + } + if (!isEmptyBlock(chunk, loc)) { + loc.setY(area.getLowVector().getY()); + break; + } + } catch (Throwable e) { + e.printStackTrace(); + } + } + + if (loc.getY() - 1 <= area.getLowVector().getY()) + continue; + + LocationCheck permissionCheck = new LocationCheck(); + + CMIScheduler.runTask(() -> { + ClaimedResidence tres = Residence.getInstance().getResidenceManager().getByLoc(loc); + if (tres != null && player != null && (!tres.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) || + !tres.getPermissions().playerHas(player, Flags.move, FlagCombo.TrueOrNone)) && !admin) { + permissionCheck.setPermissionPass(false); + } + }).join(); + + if (!permissionCheck.isPermissionPass()) + continue; + + found = true; + loc.add(0.5, 0.1, 0.5); + + break; + } + + if (!found) { + if (Residence.getInstance().getConfigManager().getKickLocation() != null) { + return Residence.getInstance().getConfigManager().getKickLocation(); + } + + // Fail safe for kick out location + if (!toSpawnOnFail) + return null; + + World bw = res.getPermissions().getBukkitWorld(); + + return bw != null ? bw.getSpawnLocation() != null ? bw.getSpawnLocation() : player.getWorld().getSpawnLocation() : player.getWorld().getSpawnLocation(); + } + if (player != null) { + loc.setPitch(player.getLocation().getPitch()); + loc.setYaw(player.getLocation().getYaw()); + } + + return loc; + } + + public static CompletableFuture getMiddleFreeLocASYNC(ClaimedResidence res, Player player, boolean toSpawnOnFail) { + return getMiddleFreeLocASYNC(res, player.getLocation(), player, toSpawnOnFail); + } + + public static CompletableFuture getMiddleFreeLocASYNC(ClaimedResidence res, Location insideLoc, Player player, boolean toSpawnOnFail) { + return CompletableFuture.supplyAsync(() -> getMiddleFreeLoc(res, insideLoc, player, toSpawnOnFail)); + } + + private static Location getMiddleFreeLoc(ClaimedResidence res, Location insideLoc, Player player, boolean toSpawnOnFail) { + + if (insideLoc == null) + return null; + + CuboidArea area = res.getAreaByLoc(insideLoc); + if (area == null) { + return insideLoc; + } + + int y = area.getHighVector().getBlockY(); + int lowY = area.getLowVector().getBlockY(); + + int x = area.getLowVector().getBlockX() + area.getXSize() / 2; + int z = area.getLowVector().getBlockZ() + area.getZSize() / 2; + + Location newLoc = new Location(area.getWorld(), x + 0.5, y, z + 0.5); + + int it = 1; + int maxIt = y - 2; + + CompletableFuture cs = PaperLib.getSnapshot(newLoc, false, false); + + CMIChunkSnapShot chunk = cs.join(); + + if (chunk == null) + return null; + + try { + if (!Version.isFolia()) + insideLoc.getChunk().setForceLoaded(true); + } catch (Throwable e) { + } + + while (it < maxIt) { + it++; + + if (newLoc.getBlockY() < lowY) + break; + + newLoc.add(0, -1, 0); + + try { + if (isValidLocation(chunk, newLoc)) { + if (player != null) { + newLoc.setPitch(player.getLocation().getPitch()); + newLoc.setYaw(player.getLocation().getYaw()); + } + return newLoc; + } + } catch (Throwable e) { + e.printStackTrace(); + } + } + + return getOutsideFreeLoc(res, insideLoc, player, toSpawnOnFail); + } + + public static CompletableFuture getTeleportLocationASYNC(ClaimedResidence res, Player player, boolean toSpawnOnFail) { + return CompletableFuture.supplyAsync(() -> getTeleportLocation(res, player, toSpawnOnFail)); + } + + public static Location getTeleportLocation(ClaimedResidence res, Player player, boolean toSpawnOnFail) { + + if (res.tpLoc == null || res.getMainArea() != null && !res.containsLoc(new Location(res.getMainArea().getWorld(), res.tpLoc.getX(), res.tpLoc.getY(), res.tpLoc.getZ()))) { + + if (res.getMainArea() == null) + return null; + + Vector low = res.getMainArea().getLowVector(); + Vector high = res.getMainArea().getHighVector(); + + Location t = new Location(res.getMainArea().getWorld(), (low.getBlockX() + high.getBlockX()) / 2, + (low.getBlockY() + high.getBlockY()) / 2, (low.getBlockZ() + high.getBlockZ()) / 2); + + t = getMiddleFreeLoc(res, t, player, toSpawnOnFail); + + if (t == null) + return null; + + res.tpLoc = t.toVector(); + } + + if (res.tpLoc == null) + return null; + + Location loc = res.tpLoc.toLocation(res.getMainArea().getLowLocation().getWorld()); + if (res.PitchYaw != null) { + loc.setPitch((float) res.PitchYaw.getX()); + loc.setYaw((float) res.PitchYaw.getY()); + } + return loc; + } + + public static CompletableFuture isSafeTeleportASYNC(ClaimedResidence res, Player player) { + return CompletableFuture.supplyAsync(() -> isSafeTp(res, player)); + } + + public static LocationCheck isSafeTp(ClaimedResidence res, Player player) { + + LocationCheck validity = new LocationCheck(); + + if (player.getAllowFlight()) + return validity; + + if (player.getGameMode() == GameMode.CREATIVE) + return validity; + + if (Utils.isSpectator(player.getGameMode())) + return validity; + + if (res.tpLoc == null) + return validity; + + Location tempLoc = getTeleportLocation(res, player, false); + + if (tempLoc == null) + return validity; + + CompletableFuture cs = PaperLib.getSnapshot(tempLoc, false, false); + + CMIChunkSnapShot chunk = cs.join(); + + if (chunk == null) + return validity; + + int fallDistance = 0; + int minY = CMIWorld.getMinHeight(tempLoc.getWorld()); + for (int i = (int) tempLoc.getY(); i >= minY; i--) { + if (i <= minY) { + validity.setValidity(LocationValidity.Void); + break; + } + + tempLoc.setY(i); + + int chunkX = tempLoc.getBlockX() & 0xF; + int chunkZ = tempLoc.getBlockZ() & 0xF; + + CMIMaterial material = getBlockType(chunk.getSnapshot(), tempLoc.getWorld(), chunkX, tempLoc.getBlockY(), chunkZ); + + if (isEmptyBlock(material)) { + fallDistance++; + } else { + if (material.isLava() || material.equals(CMIMaterial.MAGMA_BLOCK) || material.equals(CMIMaterial.FIRE)) { + validity.setValidity(LocationValidity.Lava); + } + break; + } + } + validity.setFallDistance(fallDistance); + return validity; + } + + public static CompletableFuture getSnapshot(Location loc, boolean generate, boolean biomeData) { + return getSnapshot(loc.getWorld(), loc.getBlockX() >> 4, loc.getBlockZ() >> 4, generate, biomeData); + } + + public static CompletableFuture getSnapshot(World world, int chunkX, int chunkZ, boolean generate, boolean biomeData) { + if (world == null) + return CompletableFuture.completedFuture(null); + + CompletableFuture future = null; + try { + if (!Version.isPaperBranch()) { + return CompletableFuture.supplyAsync(() -> { + CMIChunkSnapShot cmiChunkSnapshot = new CMIChunkSnapShot(world); + try { + + CompletableFuture t = CMIScheduler.runAtLocation(new Location(world, chunkX * 16, 0, chunkZ * 16), () -> cmiChunkSnapshot.setSnapshot(world.getChunkAt(chunkX, chunkZ) + .getChunkSnapshot(true, biomeData, false))); + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + t = t.orTimeout(10, TimeUnit.SECONDS); + + t = t.exceptionally(ex -> { + CMIMessages.consoleMessage("Could not get chunk snapshot for " + world + " " + (chunkX * 16) + ":" + (chunkZ * 16)); + ex.printStackTrace(); + return null; + }); + t.get(); + } catch (Throwable e) { + e.printStackTrace(); + Thread.currentThread().interrupt(); + } + return cmiChunkSnapshot; + }); + } + future = PaperLib.getChunkAtAsync(world, chunkX, chunkZ, generate); + } catch (Throwable e) { + e.printStackTrace(); + } + + if (future == null) + return CompletableFuture.completedFuture(null); + + return future.thenComposeAsync(chunk -> CompletableFuture.supplyAsync(() -> { + CMIChunkSnapShot cmiChunkSnapshot = new CMIChunkSnapShot(world); + + if (chunk == null) + return cmiChunkSnapshot; + + try { + CompletableFuture t = CMIScheduler.runAtLocation(new Location(world, chunkX * 16, 0, chunkZ * 16), () -> cmiChunkSnapshot.setSnapshot(chunk.getChunkSnapshot(true, biomeData, false))); + + if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) + t = t.orTimeout(10, TimeUnit.SECONDS); + + t = t.exceptionally(ex -> { + CMIMessages.consoleMessage("Unable to get chunk snapshot for " + world + " " + (chunkX * 16) + ":" + (chunkZ * 16)); + ex.printStackTrace(); + return null; + }); + t.get(); + } catch (Throwable e) { + e.printStackTrace(); + Thread.currentThread().interrupt(); + } + return cmiChunkSnapshot; + })); + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/LocationValidity.java b/src/com/bekvon/bukkit/residence/utils/LocationValidity.java new file mode 100644 index 000000000..c58b5b49c --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/LocationValidity.java @@ -0,0 +1,5 @@ +package com.bekvon.bukkit.residence.utils; + +public enum LocationValidity { + Valid, Void, Fall, Suffocation, Lava; +} diff --git a/src/com/bekvon/bukkit/residence/utils/PositionRelativeData.java b/src/com/bekvon/bukkit/residence/utils/PositionRelativeData.java new file mode 100644 index 000000000..7489abbc1 --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/PositionRelativeData.java @@ -0,0 +1,53 @@ +package com.bekvon.bukkit.residence.utils; + +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.World.Environment; + +import net.Zrips.CMILib.Container.CMIWorld; + +public class PositionRelativeData { + + private int localX = 0; + private int localY = 0; + private int localZ = 0; + + private int maxWorldY = 0; + private int minWorldY = 0; + + public PositionRelativeData(World world, int localX, int localY, int localZ) { + this.localX = localX; + this.localY = localY; + this.localZ = localZ; + maxWorldY = CMIWorld.getMaxHeight(world); + minWorldY = CMIWorld.getMinHeight(world); + + if (world.getEnvironment().equals(Environment.NETHER) && maxWorldY < 200) { + maxWorldY = 255; + } + } + + public PositionRelativeData(Location loc) { + this(loc.getWorld(), loc.getBlockX() & 0xF, loc.getBlockY(), loc.getBlockZ() & 0xF); + } + + public int getLocalX() { + return localX; + } + + public int getLocalZ() { + return localZ; + } + + public int getMaxWorldY() { + return maxWorldY; + } + + public int getMinWorldY() { + return minWorldY; + } + + public int getLocalY() { + return localY; + } +} diff --git a/src/com/bekvon/bukkit/residence/utils/SafeLocationCache.java b/src/com/bekvon/bukkit/residence/utils/SafeLocationCache.java new file mode 100644 index 000000000..d4c28715e --- /dev/null +++ b/src/com/bekvon/bukkit/residence/utils/SafeLocationCache.java @@ -0,0 +1,40 @@ +package com.bekvon.bukkit.residence.utils; + +import com.bekvon.bukkit.residence.protection.ClaimedResidence; + +public class SafeLocationCache { + + private ClaimedResidence res; + private long time = 0; + private LocationCheck validity = new LocationCheck(); + + public SafeLocationCache(ClaimedResidence res) { + this.res = res; + setTime(System.currentTimeMillis()); + } + + public ClaimedResidence getResidence() { + return res; + } + + public void setResidence(ClaimedResidence res) { + this.res = res; + } + + public long getTime() { + return time; + } + + public void setTime(long time) { + this.time = time; + } + + public LocationCheck getValidity() { + return validity; + } + + public void setValidity(LocationCheck validity) { + this.validity = validity; + } + +} From 76661a55e517e2deb1a3ff18bab636692464a586 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 12 Aug 2024 15:24:44 +0300 Subject: [PATCH 1127/1142] Optimizing nomobs flag when residence area is way bigger than normal --- .../bekvon/bukkit/residence/Residence.java | 77 ++++++------------- .../listeners/ResidencePlayerListener.java | 28 ++++++- 2 files changed, 50 insertions(+), 55 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index abde3b3cf..a50ea64d9 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -325,69 +325,40 @@ public ResidenceApi getAPI() { } // API end - private Runnable doHeals = new Runnable() { - @Override - public void run() { - plistener.doHeals(); - } - }; + private Runnable doHeals = () -> plistener.doHeals(); - private Runnable doFeed = new Runnable() { - @Override - public void run() { - plistener.feed(); - } - }; + private Runnable doFeed = () -> plistener.feed(); - private Runnable removeBadEffects = new Runnable() { - @Override - public void run() { - plistener.badEffects(); - } - }; + private Runnable removeBadEffects = () -> plistener.badEffects(); - private Runnable DespawnMobs = new Runnable() { - @Override - public void run() { - plistener.DespawnMobs(); - } - }; + private Runnable DespawnMobs = () -> plistener.DespawnMobs(); - private Runnable rentExpire = new Runnable() { - @Override - public void run() { - rentmanager.checkCurrentRents(); - if (getConfigManager().showIntervalMessages()) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Rent Expirations checked!"); - } + private Runnable rentExpire = () -> { + rentmanager.checkCurrentRents(); + if (getConfigManager().showIntervalMessages()) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Rent Expirations checked!"); } }; - private Runnable leaseExpire = new Runnable() { - @Override - public void run() { - leasemanager.doExpirations(); - if (getConfigManager().showIntervalMessages()) { - Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Lease Expirations checked!"); - } + + private Runnable leaseExpire = () -> { + leasemanager.doExpirations(); + if (getConfigManager().showIntervalMessages()) { + Bukkit.getConsoleSender().sendMessage(getPrefix() + " - Lease Expirations checked!"); } }; - private Runnable autoSave = new Runnable() { - @Override - public void run() { + + private Runnable autoSave = () -> { + if (!initsuccess) + return; + + CMIScheduler.runTaskAsynchronously(() -> { try { - if (initsuccess) { - CMIScheduler.runTaskAsynchronously(() -> { - try { - saveYml(); - } catch (IOException e) { - e.printStackTrace(); - } - }); - } - } catch (Exception ex) { - Logger.getLogger("Minecraft").log(Level.SEVERE, getPrefix() + " SEVERE SAVE ERROR", ex); + saveYml(); + } catch (Throwable e) { + Logger.getLogger("Minecraft").log(Level.SEVERE, getPrefix() + " SEVERE SAVE ERROR", e); + e.printStackTrace(); } - } + }); }; public void reloadPlugin() { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 226979f17..b5e408261 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -88,11 +88,13 @@ import net.Zrips.CMILib.CMILib; import net.Zrips.CMILib.ActionBar.CMIActionBar; import net.Zrips.CMILib.Colors.CMIChatColor; +import net.Zrips.CMILib.Container.CMINumber; import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.Entities.CMIEntity; import net.Zrips.CMILib.Entities.CMIEntityType; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.TitleMessages.CMITitleMessage; import net.Zrips.CMILib.Util.CMIVersionChecker; import net.Zrips.CMILib.Version.Version; @@ -2814,6 +2816,8 @@ public void DespawnMobs() { residences.add(res); } + int chunkRadius = 3; + int range = 3 * 16; for (ClaimedResidence res : residences) { Set entities = new HashSet(); @@ -2823,12 +2827,32 @@ public void DespawnMobs() { continue; if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) { - for (CuboidArea area : res.getAreaMap().values()) { - entities.addAll(world.getNearbyEntities(BoundingBox.of(area.getLowVector(), area.getHighVector()))); + for (Player player : res.getPlayersInResidence()) { + Vector vloc = player.getLocation().toVector(); + // Limit check area in case residence is very big + entities.addAll(world.getNearbyEntities(BoundingBox.of(vloc.clone().subtract(new Vector(range, range, range)), vloc.clone().add(new Vector(range, range, range))))); } } else { for (CuboidArea area : res.getAreaMap().values()) { for (ChunkRef chunk : area.getChunks()) { + + // Checking if chunk is near a player. + // In case residence is extremely big it will check all chunks which can cause performance issues + boolean near = false; + for (Player player : res.getPlayersInResidence()) { + int x = player.getLocation().getChunk().getX(); + int z = player.getLocation().getChunk().getZ(); + + if (CMINumber.abs(x - chunk.getX()) > chunkRadius) + continue; + + if (CMINumber.abs(z - chunk.getZ()) > chunkRadius) + continue; + near = true; + break; + } + if (!near) + continue; entities.addAll(Arrays.asList(world.getChunkAt(chunk.getX(), chunk.getZ()).getEntities())); } } From 29690a5b57fb0a911013db5ba87ba925840f074e Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Aug 2024 14:30:48 +0300 Subject: [PATCH 1128/1142] No special treatment for folia --- .../bukkit/residence/protection/ClaimedResidence.java | 4 +++- src/com/bekvon/bukkit/residence/utils/LocationUtil.java | 6 ------ src/plugin.yml | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index 54900aa36..c8ac9258e 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -2084,6 +2084,8 @@ public boolean kickFromResidence(Player player) { LC.info_IncorrectLocation.getLocale(); return; } + + loc1.add(0, 0.4, 0); CMITeleporter.teleportAsync(player, loc1).thenApply(success -> { if (success) @@ -2105,7 +2107,7 @@ public boolean kickFromResidence(Player player) { }); return true; } - + // public Town getTown() { // return town; // } diff --git a/src/com/bekvon/bukkit/residence/utils/LocationUtil.java b/src/com/bekvon/bukkit/residence/utils/LocationUtil.java index 2970d1fb8..1d9d411af 100644 --- a/src/com/bekvon/bukkit/residence/utils/LocationUtil.java +++ b/src/com/bekvon/bukkit/residence/utils/LocationUtil.java @@ -288,12 +288,6 @@ private static Location getMiddleFreeLoc(ClaimedResidence res, Location insideLo if (chunk == null) return null; - try { - if (!Version.isFolia()) - insideLoc.getChunk().setForceLoaded(true); - } catch (Throwable e) { - } - while (it < maxIt) { it++; diff --git a/src/plugin.yml b/src/plugin.yml index 70fa2620b..289f86e98 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.5.3 +version: 5.1.6.0 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From e8ad08f434060f0fed490ba7501a2ea641de8d1e Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 19 Aug 2024 15:17:53 +0300 Subject: [PATCH 1129/1142] Removing arrow entity when damage is prevented This is to avoid issues where arrow can't land and keeps bouncing on entities --- .../listeners/ResidenceEntityListener.java | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index 45741caba..c672ffd84 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -73,6 +73,7 @@ import net.Zrips.CMILib.Entities.CMIEntityType; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceEntityListener implements Listener { @@ -228,6 +229,9 @@ public void AnimalKilling(EntityDamageEvent event) { if (res.getPermissions().playerHas(cause, Flags.animalkilling, FlagCombo.OnlyFalse)) { plugin.msg(cause, lm.Residence_FlagDeny, Flags.animalkilling, res.getName()); attackevent.setCancelled(true); + + if (damager instanceof Arrow) + damager.remove(); } } @@ -308,7 +312,8 @@ public void AnimalDamageByMobs(EntityDamageByEntityEvent event) { FlagPermissions world = plugin.getWorldFlags().getPerms(entity.getWorld().getName()); if (!perms.has(Flags.animalkilling, world.has(Flags.animalkilling, true))) { event.setCancelled(true); - return; + if (damager instanceof Arrow) + damager.remove(); } } @@ -463,6 +468,8 @@ public void MonsterKilling(EntityDamageByEntityEvent event) { if (res.getPermissions().playerHas(cause, Flags.mobkilling, FlagCombo.OnlyFalse)) { plugin.msg(cause, lm.Residence_FlagDeny, Flags.mobkilling, res.getName()); event.setCancelled(true); + if (damager instanceof Arrow) + damager.remove(); } } @@ -1610,6 +1617,17 @@ public static boolean canDamageEntity(Entity damager, Entity victim, boolean inf return true; } + private void process(lm lm, Player attacker, boolean isOnFire, Entity ent, EntityDamageEvent event, Entity damager) { + if (attacker != null) + plugin.msg(attacker, lm); + if (isOnFire) + ent.setFireTicks(0); + event.setCancelled(true); + + if (damager instanceof Arrow) + damager.remove(); + } + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamage(EntityDamageEvent event) { // disabling event on world @@ -1703,11 +1721,7 @@ public void onEntityDamage(EntityDamageEvent event) { } if (!srcpvp && !isSnowBall || !allowSnowBall && isSnowBall) { - if (attacker != null) - plugin.msg(attacker, lm.General_NoPVPZone); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); + process(lm.General_NoPVPZone, attacker, isOnFire, ent, event, damager); return; } @@ -1716,11 +1730,7 @@ public void onEntityDamage(EntityDamageEvent event) { /* World PvP */ if (damager != null) if (!plugin.getWorldFlags().getPerms(damager.getWorld().getName()).has(Flags.pvp, FlagCombo.TrueOrNone)) { - if (attacker != null) - plugin.msg(attacker, lm.General_WorldPVPDisabled); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); + process(lm.General_WorldPVPDisabled, attacker, isOnFire, ent, event, damager); return; } @@ -1728,21 +1738,14 @@ public void onEntityDamage(EntityDamageEvent event) { if (attacker != null) { FlagPermissions aPerm = plugin.getPermsByLoc(attacker.getLocation()); if (!aPerm.has(Flags.pvp, FlagCombo.TrueOrNone)) { - plugin.msg(attacker, lm.General_NoPVPZone); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); + process(lm.General_NoPVPZone, attacker, isOnFire, ent, event, damager); return; } } } else { /* Normal PvP */ if (!isSnowBall && !area.getPermissions().has(Flags.pvp, FlagCombo.TrueOrNone) || isSnowBall && !allowSnowBall) { - if (attacker != null) - plugin.msg(attacker, lm.General_NoPVPZone); - if (isOnFire) - ent.setFireTicks(0); - event.setCancelled(true); + process(lm.General_NoPVPZone, attacker, isOnFire, ent, event, damager); return; } } From 297022034307b6dc3a046495e8748122bad39355 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Aug 2024 12:23:44 +0300 Subject: [PATCH 1130/1142] Incorrect command flag handling when combined with global command disabling --- .../listeners/ResidenceEntityListener.java | 1 - .../listeners/ResidencePlayerListener.java | 6 +- .../protection/ResidenceManager.java | 4 +- .../bukkit/residence/text/Language.java | 186 ++++++++---------- 4 files changed, 88 insertions(+), 109 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java index c672ffd84..98b7c6674 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceEntityListener.java @@ -73,7 +73,6 @@ import net.Zrips.CMILib.Entities.CMIEntityType; import net.Zrips.CMILib.Items.CMIItemStack; import net.Zrips.CMILib.Items.CMIMaterial; -import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.Version.Version; public class ResidenceEntityListener implements Listener { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index b5e408261..1d1c38d0b 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -682,9 +682,9 @@ public void onCommand(PlayerCommandPreprocessEvent event) { FlagPermissions globalPerm = plugin.getWorldFlags().getPerms(player); boolean globalLimited = globalPerm.playerHas(player, Flags.command, FlagCombo.OnlyFalse); - boolean areaLimited = perms.playerHas(player, Flags.command, FlagCombo.OnlyFalse); + boolean areaAllowed = perms.playerHas(player, Flags.command, FlagCombo.OnlyTrue); - if (!globalLimited && !areaLimited) + if (!globalLimited && !areaAllowed) return; if (plugin.getPermissionManager().isResidenceAdmin(player)) @@ -710,7 +710,7 @@ public void onCommand(PlayerCommandPreprocessEvent event) { List w = new ArrayList(res.getCmdWhiteList()); List b = new ArrayList(res.getCmdBlackList()); - if (!areaLimited) { + if (!areaAllowed) { w.clear(); b.clear(); } diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 8cd17997a..d56ca426a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -548,12 +548,12 @@ public void removeResidence(Player player, String name, boolean resadmin) { plugin.msg(player, lm.Invalid_Residence); return; } - removeResidence(player, res, resadmin); + removeResidence(ResidencePlayer.get(player), res, resadmin); } @Deprecated public void removeResidence(Player player, ClaimedResidence res, boolean resadmin) { - removeResidence(plugin.getPlayerManager().getResidencePlayer(player), res, resadmin); + removeResidence(ResidencePlayer.get(player), res, resadmin); } public void removeResidence(ResidencePlayer rPlayer, ClaimedResidence res, boolean resadmin) { diff --git a/src/com/bekvon/bukkit/residence/text/Language.java b/src/com/bekvon/bukkit/residence/text/Language.java index 8c0f54de5..6a0ff2ae2 100644 --- a/src/com/bekvon/bukkit/residence/text/Language.java +++ b/src/com/bekvon/bukkit/residence/text/Language.java @@ -22,178 +22,158 @@ public class Language { private Residence plugin; public Language(Residence plugin) { - this.plugin = plugin; + this.plugin = plugin; } /** * Reloads the config */ public void LanguageReload() { - File f = new File(plugin.getDataFolder(), "Language" + File.separator + plugin.getConfigManager().getLanguage() + ".yml"); - if (!f.isFile()) - try { - f.createNewFile(); - } catch (IOException e2) { - e2.printStackTrace(); - } - f = new File(plugin.getDataFolder(), "Language" + File.separator + "English.yml"); - if (!f.isFile()) - try { - f.createNewFile(); - } catch (IOException e2) { - e2.printStackTrace(); - } - customlocale = new YmlMaker(plugin, "Language" + File.separator + plugin.getConfigManager().getLanguage() + ".yml").getConfig(); - enlocale = new YmlMaker(plugin, "Language" + File.separator + "English.yml").getConfig(); - if (customlocale == null) - customlocale = enlocale; + File f = new File(plugin.getDataFolder(), "Language" + File.separator + plugin.getConfigManager().getLanguage() + ".yml"); + if (!f.isFile()) + try { + f.createNewFile(); + } catch (IOException e2) { + e2.printStackTrace(); + } + f = new File(plugin.getDataFolder(), "Language" + File.separator + "English.yml"); + if (!f.isFile()) + try { + f.createNewFile(); + } catch (IOException e2) { + e2.printStackTrace(); + } + customlocale = new YmlMaker(plugin, "Language" + File.separator + plugin.getConfigManager().getLanguage() + ".yml").getConfig(); + enlocale = new YmlMaker(plugin, "Language" + File.separator + "English.yml").getConfig(); + if (customlocale == null) + customlocale = enlocale; } /** * Get the message with the correct key * - * @param key - * - the key of the message - * @return the message - */ -// public String getMessage2(String key) { -// return getMessage(key, ""); -// } - - /** - * Get the message with the correct key - * - * @param key - * - the path of the message - * @param variables - * - the variables separated with % + * @param key - the path of the message + * @param variables - the variables separated with % * @return the message */ public String getMessage(String key) { - if (!key.contains("Language.") && !key.contains("CommandHelp.")) - key = "Language." + key; - String missing = "Missing locale for " + key; - String message = ""; - if (customlocale == null || !customlocale.contains(key)) - message = enlocale.contains(key) == true ? enlocale.getString(key) : missing; - message = customlocale.contains(key) == true ? customlocale.getString(key) : missing; - return CMIChatColor.translate(message); + if (!key.contains("Language.") && !key.contains("CommandHelp.")) + key = "Language." + key; + String missing = "Missing locale for " + key; + String message = ""; + if (customlocale == null || !customlocale.contains(key)) + message = enlocale.contains(key) == true ? enlocale.getString(key) : missing; + message = customlocale.contains(key) == true ? customlocale.getString(key) : missing; + return CMIChatColor.translate(message); } /** * Get the message with the correct key * - * @param key - * - the path of the message - * @param variables - * - the variables separated with % + * @param key - the path of the message + * @param variables - the variables separated with % * @return the message */ public String getMessage(lm lm, Object... variables) { - String key = lm.getPath(); - if (!key.contains("Language.") && !key.contains("CommandHelp.")) - key = "Language." + key; - String missing = "Missing locale for " + key; - String message = ""; - if (customlocale == null || !customlocale.contains(key)) - message = enlocale.contains(key) == true ? enlocale.getString(key) : missing; - message = customlocale.contains(key) == true ? customlocale.getString(key) : missing; - for (int i = 1; i <= variables.length; i++) { - String vr = String.valueOf(variables[i - 1]); - if (variables[i - 1] instanceof Flags) - vr = ((Flags) variables[i - 1]).getName(); - message = message.replace("%" + i, vr); - } - - return CMIChatColor.translate(message); + String key = lm.getPath(); + if (!key.contains("Language.") && !key.contains("CommandHelp.")) + key = "Language." + key; + String missing = "Missing locale for " + key; + String message = ""; + if (customlocale == null || !customlocale.contains(key)) + message = enlocale.contains(key) == true ? enlocale.getString(key) : missing; + message = customlocale.contains(key) == true ? customlocale.getString(key) : missing; + for (int i = 1; i <= variables.length; i++) { + String vr = String.valueOf(variables[i - 1]); + if (variables[i - 1] instanceof Flags) + vr = ((Flags) variables[i - 1]).getName(); + message = message.replace("%" + i, vr); + } + + return CMIChatColor.translate(message); } /** * Get the message with the correct key * - * @param key - * - the key of the message + * @param key - the key of the message * @return the message */ public String getDefaultMessage(String key) { - if (!key.contains("Language.") && !key.contains("CommandHelp.")) - key = "Language." + key; - String missing = "Missing locale for " + key; - return enlocale.contains(key) == true ? CMIChatColor.translate(enlocale.getString(key)) : missing; + if (!key.contains("Language.") && !key.contains("CommandHelp.")) + key = "Language." + key; + String missing = "Missing locale for " + key; + return enlocale.contains(key) == true ? CMIChatColor.translate(enlocale.getString(key)) : missing; } /** * Get the message with the correct key * - * @param key - * - the key of the message + * @param key - the key of the message * @return the message */ public List getMessageList2(String key) { - if (!key.contains("Language.") && !key.contains("CommandHelp.")) - key = "Language." + key; - String missing = "Missing locale for " + key; - if (customlocale.isList(key)) - return ColorsArray(customlocale.getStringList(key)); - return enlocale.getStringList(key).size() > 0 ? ColorsArray(enlocale.getStringList(key)) : Arrays.asList(missing); + if (!key.contains("Language.") && !key.contains("CommandHelp.")) + key = "Language." + key; + String missing = "Missing locale for " + key; + if (customlocale.isList(key)) + return ColorsArray(customlocale.getStringList(key)); + return enlocale.getStringList(key).size() > 0 ? ColorsArray(enlocale.getStringList(key)) : Arrays.asList(missing); } /** * Get the message with the correct key * - * @param key - * - the key of the message + * @param key - the key of the message * @return the message */ public List getMessageList(lm lm) { - String key = lm.getPath(); - if (!key.contains("Language.") && !key.contains("CommandHelp.")) - key = "Language." + key; - String missing = "Missing locale for " + key; - if (customlocale.isList(key)) - return ColorsArray(customlocale.getStringList(key)); - return enlocale.getStringList(key).size() > 0 ? ColorsArray(enlocale.getStringList(key)) : Arrays.asList(missing); + String key = lm.getPath(); + if (!key.contains("Language.") && !key.contains("CommandHelp.")) + key = "Language." + key; + String missing = "Missing locale for " + key; + if (customlocale.isList(key)) + return ColorsArray(customlocale.getStringList(key)); + return enlocale.getStringList(key).size() > 0 ? ColorsArray(enlocale.getStringList(key)) : Arrays.asList(missing); } /** * Get the message with the correct key * - * @param key - * - the key of the message + * @param key - the key of the message * @return the message */ public Set getKeyList(String key) { - if (customlocale.isConfigurationSection(key)) - return customlocale.getConfigurationSection(key).getKeys(false); - return enlocale.getConfigurationSection(key).getKeys(false); + if (customlocale.isConfigurationSection(key)) + return customlocale.getConfigurationSection(key).getKeys(false); + return enlocale.getConfigurationSection(key).getKeys(false); } /** * Check if key exists * - * @param key - * - the key of the message + * @param key - the key of the message * @return true/false */ public boolean containsKey(String key) { - if (!key.contains("Language.") && !key.contains("CommandHelp.")) - key = "Language." + key; - if (customlocale == null || !customlocale.contains(key)) - return enlocale.contains(key); - return customlocale.contains(key); + if (!key.contains("Language.") && !key.contains("CommandHelp.")) + key = "Language." + key; + if (customlocale == null || !customlocale.contains(key)) + return enlocale.contains(key); + return customlocale.contains(key); } private static List ColorsArray(List text) { - List temp = new ArrayList(); - for (String part : text) { - temp.add(Colors(part)); - } - return temp; + List temp = new ArrayList(); + for (String part : text) { + temp.add(Colors(part)); + } + return temp; } private static String Colors(String text) { - return CMIChatColor.translate(text); + return CMIChatColor.translate(text); } } From 3568ad7d4de93ec969004650911fa38e47f4f1f7 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Aug 2024 12:41:31 +0300 Subject: [PATCH 1131/1142] Better version output --- .../bukkit/residence/commands/version.java | 71 +++++++++++++------ 1 file changed, 49 insertions(+), 22 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/version.java b/src/com/bekvon/bukkit/residence/commands/version.java index 239431b05..d58d32b2c 100644 --- a/src/com/bekvon/bukkit/residence/commands/version.java +++ b/src/com/bekvon/bukkit/residence/commands/version.java @@ -2,10 +2,17 @@ import java.util.Arrays; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; +import org.bukkit.plugin.Plugin; +import net.Zrips.CMILib.Container.CMIText; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Locale.LC; +import net.Zrips.CMILib.Messages.CMIMessages; +import net.Zrips.CMILib.Version.Version; + import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.cmd; @@ -15,31 +22,51 @@ public class version implements cmd { @Override @CommandAnnotation(simple = false, priority = 5900) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - sender.sendMessage(ChatColor.RED + "This server running " + ChatColor.GOLD + "Residence" + ChatColor.RED + " version: " + ChatColor.BLUE + plugin.getResidenceVersion()); - sender.sendMessage(ChatColor.GREEN + "Created by: " + ChatColor.YELLOW + "bekvon"); - sender.sendMessage(ChatColor.GREEN + "Updated to 1.8 by: " + ChatColor.YELLOW + "DartCZ"); - sender.sendMessage(ChatColor.GREEN + "Currently maintained by: " + ChatColor.YELLOW + "Zrips"); - String names = null; - for (String auth : plugin.getAuthors()) { - if (names == null) - names = auth; - else - names = names + ", " + auth; - } - sender.sendMessage(ChatColor.GREEN + "Authors: " + ChatColor.YELLOW + names); - sender.sendMessage(ChatColor.DARK_AQUA + "For a command list, and help, see the wiki:"); - sender.sendMessage(ChatColor.GREEN + "https://github.com/bekvon/Residence/wiki"); - sender.sendMessage(ChatColor.AQUA + "Visit the Spigot Resource page at:"); - sender.sendMessage(ChatColor.BLUE + "https://www.spigotmc.org/resources/residence.11480/"); - sender.sendMessage(ChatColor.GRAY + "------------------------------------"); - return true; + + final String version = plugin.getDescription().getVersion(); + String build = null; + + String[] split = Bukkit.getVersion().split("-"); + final String serverType = split.length > 1 ? split[1] : split[0]; + + try { + if (serverType.equalsIgnoreCase("Paper") || serverType.equalsIgnoreCase("purpur") || Version.isPaper()) { + if (Version.isCurrentEqualOrHigher(Version.v1_20_R4)) + build = Bukkit.getVersion().split("-")[1].split(" ")[0]; + else + build = Bukkit.getVersion().split("-")[2].split(" ")[0]; + } else if (Version.isSpigot()) + build = Bukkit.getVersion().split("-", 2)[0]; + Integer.parseInt(build); + } catch (Throwable e) { + build = null; + } + + final String buildVersion = build == null ? "" : "(" + build + ")"; + Plugin CMILib = Bukkit.getPluginManager().getPlugin("CMILib"); + String CMILibversion = null; + if (CMILib != null) { + CMILibversion = CMILib.getDescription().getVersion(); + } + String javaVersion = System.getProperty("java.version"); + + LC.info_Spliter.sendMessage(sender); + + CMIMessages.sendMessage(sender, "&fResidence version: &7" + version); + CMIMessages.sendMessage(sender, "&fCMILib version: &7" + CMILibversion); + if (build != null) + CMIMessages.sendMessage(sender, "&fServer version: &7" + CMIText.firstToUpperCase(Version.getPlatform().toString()) + buildVersion); + CMIMessages.sendMessage(sender, "&fJava version: &7" + javaVersion); + + LC.info_Spliter.sendMessage(sender); + + return true; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "how residence version"); - c.get("Info", Arrays.asList("&eUsage: &6/res version")); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "how residence version"); + c.get("Info", Arrays.asList("&eUsage: &6/res version")); } } From 98fbf94daf0c4a65c213e79620eda75f1353776a Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Aug 2024 12:42:13 +0300 Subject: [PATCH 1132/1142] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..dda49e4d1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,23 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Server version:** + - Output from /res version + +**Additional context** +Add any other context about the problem here. From e84848aac438a2cf8cff1ebe43a7550fedb5385b Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Aug 2024 12:43:22 +0300 Subject: [PATCH 1133/1142] Update issue templates --- .github/ISSUE_TEMPLATE/feature_request.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..809b7b057 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,10 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + + From 1e98606b5e6fd3d0ee71bd976891a42e29b51795 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Aug 2024 13:21:33 +0300 Subject: [PATCH 1134/1142] Removing all player flags from residence --- src/com/bekvon/bukkit/residence/commands/pdel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/pdel.java b/src/com/bekvon/bukkit/residence/commands/pdel.java index a7f8918ba..7d9b30bf9 100644 --- a/src/com/bekvon/bukkit/residence/commands/pdel.java +++ b/src/com/bekvon/bukkit/residence/commands/pdel.java @@ -26,11 +26,11 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (resadmin) baseCmd = "resadmin"; if (args.length == 1) { - Bukkit.dispatchCommand(player, baseCmd + " pset " + args[0] + " trusted remove"); + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[0] + " removeall"); return true; } if (args.length == 2) { - Bukkit.dispatchCommand(player, baseCmd + " pset " + args[0] + " " + args[1] + " trusted remove"); + Bukkit.dispatchCommand(player, baseCmd + " pset " + args[0] + " " + args[1] + " removeall"); return true; } return false; From 1ba8d4549d9905a984a98fca4a89252c4b96ebdc Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Aug 2024 13:36:00 +0300 Subject: [PATCH 1135/1142] Checking by exact player name to avoid issues --- .../bekvon/bukkit/residence/Residence.java | 2 +- .../bukkit/residence/commands/raid.java | 4 +- .../residence/containers/ResidencePlayer.java | 17 +++- .../permissions/PermissionGroup.java | 2 +- .../residence/protection/PlayerManager.java | 83 +++++++++++++------ 5 files changed, 76 insertions(+), 32 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index a50ea64d9..124495683 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -1833,7 +1833,7 @@ public OfflinePlayer getOfflinePlayer(String Name) { if (offPlayer != null) return offPlayer; - Player player = Bukkit.getPlayer(Name); + Player player = Bukkit.getPlayerExact(Name); if (player != null) return player; diff --git a/src/com/bekvon/bukkit/residence/commands/raid.java b/src/com/bekvon/bukkit/residence/commands/raid.java index 1251e9dad..f1743e678 100644 --- a/src/com/bekvon/bukkit/residence/commands/raid.java +++ b/src/com/bekvon/bukkit/residence/commands/raid.java @@ -123,9 +123,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (args.length < 2) return false; - String playername = args[1]; - - ResidencePlayer rplayer = plugin.getPlayerManager().getResidencePlayer(playername); + ResidencePlayer rplayer = plugin.getPlayerManager().getResidencePlayer(args[1]); if (rplayer == null) { plugin.msg(sender, lm.Invalid_Player); diff --git a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java index d074903c0..14b704639 100644 --- a/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java +++ b/src/com/bekvon/bukkit/residence/containers/ResidencePlayer.java @@ -67,7 +67,7 @@ public ResidencePlayer(Player player) { } public boolean isOnline() { - return this.player != null && this.player.isOnline() || Bukkit.getPlayer(this.uuid) != null; + return Bukkit.getPlayer(this.uuid) != null; } public ResidencePlayer(String userName, UUID uuid) { @@ -289,6 +289,19 @@ public ResidencePlayer updatePlayer(Player player) { return this; } + public ResidencePlayer updatePlayer(OfflinePlayer player) { + if (updated) + return this; + if (player.isOnline()) { + updated = true; + this.player = Bukkit.getPlayer(player.getUniqueId()); + } + this.uuid = player.getUniqueId(); + this.userName = player.getName(); + this.ofPlayer = player; + return this; + } + public void onQuit() { this.ofPlayer = null; this.player = null; @@ -309,7 +322,7 @@ private void updatePlayer() { } if (this.userName != null) { - player = Bukkit.getPlayer(this.userName); + player = Bukkit.getPlayerExact(this.userName); } if (player != null) { this.userName = player.getName(); diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java index 3a3428398..51a3b3263 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionGroup.java @@ -520,7 +520,7 @@ public boolean itemListAccess() { public void printLimits(CommandSender player, OfflinePlayer target, boolean resadmin) { - ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(target.getName()); + ResidencePlayer rPlayer = Residence.getInstance().getPlayerManager().getResidencePlayer(target); rPlayer.getGroup(true); PermissionGroup group = rPlayer.getGroup(); diff --git a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java index 2b03ed512..cffdb361f 100644 --- a/src/com/bekvon/bukkit/residence/protection/PlayerManager.java +++ b/src/com/bekvon/bukkit/residence/protection/PlayerManager.java @@ -62,6 +62,17 @@ public ResidencePlayer playerJoin(Player player) { return resPlayer; } + public ResidencePlayer playerJoin(OfflinePlayer player) { + ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId().toString()); + if (resPlayer == null) { + resPlayer = new ResidencePlayer(player); + addPlayer(resPlayer); + } else { + resPlayer.updatePlayer(player); + } + return resPlayer; + } + public ResidencePlayer playerJoin(UUID uuid) { ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); if (resPlayer == null) { @@ -234,7 +245,7 @@ public TreeMap getTrustedResidencesMap(String player, @Override public PermissionGroup getGroup(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); + ResidencePlayer resPlayer = getResidencePlayerIfExist(player); if (resPlayer != null) { return resPlayer.getGroup(); } @@ -243,7 +254,7 @@ public PermissionGroup getGroup(String player) { @Override public int getMaxResidences(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); + ResidencePlayer resPlayer = getResidencePlayerIfExist(player); if (resPlayer != null) { return resPlayer.getMaxRes(); } @@ -252,7 +263,7 @@ public int getMaxResidences(String player) { @Override public int getMaxSubzones(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); + ResidencePlayer resPlayer = getResidencePlayerIfExist(player); if (resPlayer != null) { return resPlayer.getMaxSubzones(); } @@ -261,7 +272,7 @@ public int getMaxSubzones(String player) { @Override public int getMaxSubzoneDepth(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); + ResidencePlayer resPlayer = getResidencePlayerIfExist(player); if (resPlayer != null) { return resPlayer.getMaxSubzoneDepth(); } @@ -270,28 +281,49 @@ public int getMaxSubzoneDepth(String player) { @Override public int getMaxRents(String player) { - ResidencePlayer resPlayer = getResidencePlayer(player); + ResidencePlayer resPlayer = getResidencePlayerIfExist(player); if (resPlayer != null) { return resPlayer.getMaxRents(); } return -1; } -// public ResidencePlayer getResidencePlayer(Player player) { -// return getResidencePlayer(player, true); -// } + public ResidencePlayer getResidencePlayer(OfflinePlayer player) { + if (player == null) + return null; + + ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId().toString()); + + if (resPlayer != null) + return resPlayer.updatePlayer(player); + + return playerJoin(player); + } public ResidencePlayer getResidencePlayer(Player player) { - ResidencePlayer resPlayer = null; if (player == null) return null; - resPlayer = playersUuid.get(player.getUniqueId().toString()); - if (resPlayer != null) { - resPlayer.updatePlayer(player); - } else { - resPlayer = playerJoin(player); - } - return resPlayer; + + ResidencePlayer resPlayer = playersUuid.get(player.getUniqueId().toString()); + + if (resPlayer != null) + return resPlayer.updatePlayer(player); + + return playerJoin(player); + } + + public ResidencePlayer getResidencePlayerIfExist(String player) { + if (player == null) + return null; + + if (player.equalsIgnoreCase("CONSOLE")) + return null; + + Player p = Bukkit.getPlayer(player); + if (p != null && p.getName().equalsIgnoreCase(player)) + return getResidencePlayer(p); + + return players.get(player.toLowerCase()); } @Override @@ -303,7 +335,7 @@ public ResidencePlayer getResidencePlayer(String player) { return null; Player p = Bukkit.getPlayer(player); - if (p != null) + if (p != null && p.getName().equalsIgnoreCase(player)) return getResidencePlayer(p); ResidencePlayer rplayer = players.get(player.toLowerCase()); if (rplayer != null) { @@ -315,7 +347,7 @@ public ResidencePlayer getResidencePlayer(String player) { public ResidencePlayer getResidencePlayer(UUID uuid) { if (uuid == null) return null; - + Player p = Bukkit.getPlayer(uuid); if (p != null) return getResidencePlayer(p); @@ -405,13 +437,6 @@ public void removeResFromPlayer(ClaimedResidence residence) { removeResFromPlayer(residence.getOwnerUUID(), residence); } - public void removeResFromPlayer(UUID uuid, ClaimedResidence residence) { - ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); - if (resPlayer != null) { - resPlayer.removeResidence(residence); - } - } - public void removeResFromPlayer(OfflinePlayer player, ClaimedResidence residence) { removeResFromPlayer(player.getUniqueId(), residence); } @@ -420,6 +445,14 @@ public void removeResFromPlayer(Player player, ClaimedResidence residence) { removeResFromPlayer(player.getUniqueId(), residence); } + public void removeResFromPlayer(UUID uuid, ClaimedResidence residence) { + ResidencePlayer resPlayer = playersUuid.get(uuid.toString()); + if (resPlayer != null) + resPlayer.removeResidence(residence); + } + + @Deprecated + /** @deprecated use {@link #removeResFromPlayer(UUID, ClaimedResidence)} */ public void removeResFromPlayer(String player, ClaimedResidence residence) { ResidencePlayer resPlayer = this.getResidencePlayer(player); if (resPlayer != null) { From 1baab888d9ddd72a49a199c0e409cb0d318db5c3 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Aug 2024 17:14:13 +0300 Subject: [PATCH 1136/1142] Better pset command handling --- .../bukkit/residence/commands/pset.java | 218 ++++++++++-------- 1 file changed, 124 insertions(+), 94 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index c0aafdc6d..bdd880010 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -6,117 +6,147 @@ import org.bukkit.entity.Player; import net.Zrips.CMILib.FileHandler.ConfigReader; +import net.Zrips.CMILib.Logs.CMIDebug; + import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; import com.bekvon.bukkit.residence.containers.Flags; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.containers.lm; import com.bekvon.bukkit.residence.protection.ClaimedResidence; +import com.bekvon.bukkit.residence.protection.FlagPermissions; +import com.bekvon.bukkit.residence.protection.FlagPermissions.FlagState; public class pset implements cmd { + enum Action { + removeall, pset; + + public static Action get(String name) { + for (Action one : Action.values()) { + if (one.name().equalsIgnoreCase(name)) + return one; + } + return null; + } + } + @Override @CommandAnnotation(simple = true, priority = 800) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - if (!(sender instanceof Player) && args.length != 4 && args.length == 3 && !args[2].equalsIgnoreCase("removeall")) - return false; - - if (args.length == 2 && args[1].equalsIgnoreCase("removeall")) { - Player player = (Player) sender; - ClaimedResidence area = plugin.getResidenceManager().getByLoc(player.getLocation()); - if (area != null) { - area.getPermissions().removeAllPlayerFlags(sender, args[0], resadmin); - } else { - plugin.msg(sender, lm.Invalid_Residence); - } - return true; - } else if (args.length == 3 && args[2].equalsIgnoreCase("removeall")) { - ClaimedResidence area = plugin.getResidenceManager().getByName(args[0]); - if (area != null) { - area.getPermissions().removeAllPlayerFlags(sender, args[1], resadmin); - } else { - plugin.msg(sender, lm.Invalid_Residence); - } - return true; - } else if (args.length == 3) { - Player player = (Player) sender; - ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); - - if (!plugin.isPlayerExist(sender, args[0], true)) - return false; - - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return true; - } - - if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { - plugin.msg(sender, lm.General_NoPermission); - return true; - } - res.getPermissions().setPlayerFlag(sender, args[0], args[1], args[2], resadmin, true); - - return true; - } else if (args.length == 4) { - ClaimedResidence res = plugin.getResidenceManager().getByName(args[0]); - if (!plugin.isPlayerExist(sender, args[1], true)) - return false; - - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return true; - } - - if (!res.isOwner(sender) && !resadmin && !res.getPermissions().playerHas(sender, Flags.admin, false)) { - plugin.msg(sender, lm.General_NoPermission); - return true; - } - - res.getPermissions().setPlayerFlag(sender, args[1], args[2], args[3], resadmin, true); - return true; - } else if ((args.length == 1 || args.length == 2) && plugin.getConfigManager().useFlagGUI()) { - final Player player = (Player) sender; - player.closeInventory(); - - ClaimedResidence res = null; - String targetPlayer = null; - if (args.length == 1) { - res = plugin.getResidenceManager().getByLoc(player.getLocation()); - targetPlayer = args[0]; - } else { - res = plugin.getResidenceManager().getByName(args[0]); - targetPlayer = args[1]; - } - - if (res == null) { - plugin.msg(sender, lm.Invalid_Residence); - return true; - } - - if (!plugin.isPlayerExist(player, targetPlayer, true)) { - plugin.msg(sender, lm.Invalid_Player); - return true; - } - if (!res.isOwner(player) && !resadmin && !res.getPermissions().playerHas(player, Flags.admin, false)) { - plugin.msg(sender, lm.General_NoPermission); - return true; - } - - plugin.getFlagUtilManager().openPsetFlagGui(player, targetPlayer, res, resadmin, 1); - - return true; - } - return false; + Action action = null; + FlagState state = FlagState.INVALID; + ResidencePlayer rplayer = null; + ClaimedResidence residence = null; + Flags flag = null; + + for (String one : args) { + + if (action == null) { + action = Action.get(one); + if (action != null) + continue; + } + + if (state.equals(FlagState.INVALID)) { + state = FlagPermissions.stringToFlagState(one); + if (!state.equals(FlagState.INVALID)) + continue; + } + + if (residence == null) { + residence = plugin.getResidenceManager().getByName(one); + if (residence != null) + continue; + } + + if (rplayer == null) { + rplayer = Residence.getInstance().getPlayerManager().getResidencePlayerIfExist(one); + if (rplayer != null) { + continue; + } + } + + if (flag == null) { + flag = Flags.getFlag(one); + if (flag != null) + continue; + } + } + + if (rplayer == null && residence != null) { + rplayer = Residence.getInstance().getPlayerManager().getResidencePlayerIfExist(residence.getName()); + residence = null; + } + + if (rplayer == null && sender instanceof Player) { + rplayer = Residence.getInstance().getPlayerManager().getResidencePlayer((Player) sender); + } + + if (residence == null && sender instanceof Player) { + residence = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); + } + + CMIDebug.d(residence == null ? null : residence.getName(), rplayer == null ? null : rplayer.getName(), action, flag, state); + + if (residence == null) { + plugin.msg(sender, lm.Invalid_Residence); + return null; + } + + if (rplayer == null) { + plugin.msg(sender, lm.Invalid_Player); + return true; + } + + if (action == null) + action = Action.pset; + + switch (action) { + case pset: + + if (!state.equals(FlagState.INVALID) && flag != null) { + if (!residence.isOwner(sender) && !resadmin && !residence.getPermissions().playerHas(sender, Flags.admin, false)) { + plugin.msg(sender, lm.General_NoPermission); + return true; + } + residence.getPermissions().setPlayerFlag(sender, rplayer.getName(), flag.name(), state.toString(), resadmin, true); + return true; + } + + if (!(sender instanceof Player)) + return false; + + final Player player = (Player) sender; + player.closeInventory(); + + if (!residence.isOwner(sender) && !resadmin && !residence.getPermissions().playerHas(sender, Flags.admin, false)) { + plugin.msg(sender, lm.General_NoPermission); + return true; + } + + plugin.getFlagUtilManager().openPsetFlagGui(player, rplayer.getName(), residence, resadmin, 1); + + return true; + case removeall: + residence.getPermissions().removeAllPlayerFlags(sender, rplayer.getName(), resadmin); + break; + default: + break; + } + + return false; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "Set flags on a specific player for a Residence."); - c.get("Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", - "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?")); - LocaleManager.addTabCompleteMain(this, "[residence]%%[playername]", "[playername]%%[flag]", "[flag]%%true%%false%%remove", "true%%false%%remove"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "Set flags on a specific player for a Residence."); + c.get("Info", Arrays.asList("&eUsage: &6/res pset [player] [flag] [true/false/remove]", + "&eUsage: &6/res pset [player] removeall", "To see a list of flags, use /res flags ?")); + LocaleManager.addTabCompleteMain(this, "[residence]%%[playername]", "[playername]%%[flag]", "[flag]%%true%%false%%remove", "true%%false%%remove"); } } From 30f233bd5f90cc60ca6e29f4d97c6fa38b61def2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Wed, 21 Aug 2024 17:28:17 +0300 Subject: [PATCH 1137/1142] Creating residence tp location on residence creation --- .../bukkit/residence/protection/ResidenceManager.java | 7 ++++++- src/plugin.yml | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index d56ca426a..25bcf6a8a 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -55,6 +55,7 @@ import net.Zrips.CMILib.Colors.CMIChatColor; import net.Zrips.CMILib.Container.CMINumber; import net.Zrips.CMILib.Container.PageInfo; +import net.Zrips.CMILib.Logs.CMIDebug; import net.Zrips.CMILib.RawMessages.RawMessage; import net.Zrips.CMILib.Version.Version; import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; @@ -281,7 +282,11 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String if (!newRes.addArea(player, newArea, "main", resadmin, false)) return false; - + + if (player != null && newArea.containsLoc(player.getLocation())) { + newRes.setTpLoc(player, resadmin); + } + if (Residence.getInstance().getConfigManager().isChargeOnCreation() && !newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { double chargeamount = newArea.getCost(group); diff --git a/src/plugin.yml b/src/plugin.yml index 289f86e98..9c9b6e43a 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.6.0 +version: 5.1.6.1 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From b8f992f9fc38ac039ac845eadbaa974d5450567e Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 22 Aug 2024 10:15:59 +0300 Subject: [PATCH 1138/1142] Removing arrow when hitting buttons to avoid constant spam --- .../residence/listeners/ResidenceBlockListener.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 2dc83ae80..0c6670926 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -15,6 +15,7 @@ import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; import org.bukkit.block.data.BlockData; +import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -136,12 +137,9 @@ public void onButtonHitWithProjectile(ProjectileHitEvent e) { e.setCancelled(true); plugin.msg(player, lm.Flag_Deny, result); - CMIScheduler.runAtLocation(block.getLocation(), () -> { - Location loc = block.getLocation().clone(); - loc.add(e.getHitBlockFace().getDirection()); - CMITeleporter.teleportAsync(e.getEntity(), loc); - e.getEntity().setVelocity(e.getEntity().getVelocity().multiply(-1)); - }); + + if (e.getEntity() instanceof Arrow) + e.getEntity().remove(); return; } From 44bbe81cbd3c96d16ba3926c5703ab1b5d349686 Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 22 Aug 2024 10:16:15 +0300 Subject: [PATCH 1139/1142] pset handling fix when used from padd command --- src/com/bekvon/bukkit/residence/commands/pset.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/pset.java b/src/com/bekvon/bukkit/residence/commands/pset.java index bdd880010..5e0f4a8ef 100644 --- a/src/com/bekvon/bukkit/residence/commands/pset.java +++ b/src/com/bekvon/bukkit/residence/commands/pset.java @@ -42,6 +42,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo ResidencePlayer rplayer = null; ClaimedResidence residence = null; Flags flag = null; + String flagGroup = null; for (String one : args) { @@ -75,6 +76,10 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo if (flag != null) continue; } + if (flagGroup == null && FlagPermissions.flagGroupExists(one)) { + flagGroup = one; + continue; + } } if (rplayer == null && residence != null) { @@ -90,8 +95,6 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo residence = plugin.getResidenceManager().getByLoc(((Player) sender).getLocation()); } - CMIDebug.d(residence == null ? null : residence.getName(), rplayer == null ? null : rplayer.getName(), action, flag, state); - if (residence == null) { plugin.msg(sender, lm.Invalid_Residence); return null; @@ -108,12 +111,12 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo switch (action) { case pset: - if (!state.equals(FlagState.INVALID) && flag != null) { + if (!state.equals(FlagState.INVALID) && (flag != null || flagGroup != null)) { if (!residence.isOwner(sender) && !resadmin && !residence.getPermissions().playerHas(sender, Flags.admin, false)) { plugin.msg(sender, lm.General_NoPermission); return true; } - residence.getPermissions().setPlayerFlag(sender, rplayer.getName(), flag.name(), state.toString(), resadmin, true); + residence.getPermissions().setPlayerFlag(sender, rplayer.getName(), flag != null ? flag.name() : flagGroup, state.toString(), resadmin, true); return true; } @@ -133,7 +136,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return true; case removeall: residence.getPermissions().removeAllPlayerFlags(sender, rplayer.getName(), resadmin); - break; + return true; default: break; } From 2bd29f72cd075523c04e36f9bc5b2a5e96ce988e Mon Sep 17 00:00:00 2001 From: Zrips Date: Thu, 22 Aug 2024 13:13:13 +0300 Subject: [PATCH 1140/1142] Riding flag should include skeleton horses --- .../listeners/ResidencePlayerListener.java | 37 +++++++++++-------- src/plugin.yml | 2 +- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 1d1c38d0b..88d40e9ae 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -24,7 +24,9 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Hanging; +import org.bukkit.entity.Horse; import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Pig; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -1582,25 +1584,30 @@ public void onPlayerTradeEntity(PlayerInteractEntityEvent event) { } } - private static boolean canRide(EntityType type) { - switch (type.name().toLowerCase()) { - case "horse": - case "donkey": - case "llama": - case "pig": + private static boolean canRide(Entity entity) { + switch (CMIEntityType.get(entity)) { + case HORSE: + case DONKEY: + case PIG: + case LLAMA: + case STRIDER: + case SKELETON_HORSE: return true; + default: + return false; } - return false; + } - private static boolean canHaveContainer(EntityType type) { - switch (type.name().toLowerCase()) { - case "horse": - case "donkey": - case "llama": + private static boolean canHaveContainer(Entity entity) { + switch (CMIEntityType.get(entity)) { + case HORSE: + case DONKEY: + case LLAMA: return true; + default: + return false; } - return false; } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -1617,7 +1624,7 @@ public void onPlayerInteractWithHorse(PlayerInteractEntityEvent event) { Entity ent = event.getRightClicked(); - if (!canHaveContainer(ent.getType())) + if (!canHaveContainer(ent)) return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); @@ -1646,7 +1653,7 @@ public void onPlayerInteractWithRidable(PlayerInteractEntityEvent event) { Entity ent = event.getRightClicked(); - if (!canRide(ent.getType())) + if (!canRide(ent)) return; ClaimedResidence res = plugin.getResidenceManager().getByLoc(ent.getLocation()); diff --git a/src/plugin.yml b/src/plugin.yml index 9c9b6e43a..5b5a87267 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Residence main: com.bekvon.bukkit.residence.Residence -version: 5.1.6.1 +version: 5.1.6.2 website: https://www.spigotmc.org/resources/residence.11480/ description: Cuboid Residence Plugin api-version: 1.13 From b807aca808b3af115907fd1120b32329e9f663e2 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 27 Sep 2024 15:28:45 +0300 Subject: [PATCH 1141/1142] Passing over plugin for CMI schedulers --- src/com/bekvon/bukkit/residence/Residence.java | 18 +++++++++--------- .../residence/bigDoors/BigDoorsManager.java | 2 +- .../bukkit/residence/chat/ChatChannel.java | 2 +- .../bukkit/residence/commands/compass.java | 2 +- .../bekvon/bukkit/residence/commands/rt.java | 2 +- .../bukkit/residence/dynmap/DynMapManager.java | 2 +- .../bekvon/bukkit/residence/gui/FlagUtil.java | 2 +- .../listeners/ResidenceBlockListener.java | 14 +++++++++++++- .../listeners/ResidenceLWCListener.java | 2 +- .../listeners/ResidencePlayerListener.java | 13 +++++++------ .../listeners/ResidencePlayerListener1_9.java | 2 +- .../permissions/PermissionManager.java | 2 +- .../residence/pl3xmap/Pl3xMapManager.java | 2 +- .../residence/protection/ClaimedResidence.java | 10 +++++----- .../residence/protection/ResidenceManager.java | 14 ++++++-------- .../bukkit/residence/raid/ResidenceRaid.java | 6 +++--- .../residence/selection/SelectionManager.java | 8 ++++---- .../selection/WorldEdit7SelectionManager.java | 4 ++-- .../residence/shopStuff/ShopSignUtil.java | 2 +- .../bukkit/residence/signsStuff/SignUtil.java | 4 ++-- .../residence/slimeFun/SlimefunManager.java | 2 +- .../residence/text/help/InformationPager.java | 4 ++-- .../bukkit/residence/utils/LocationUtil.java | 6 +++--- .../bukkit/residence/utils/RandomTp.java | 8 ++++---- src/com/residence/mcstats/Metrics.java | 4 +++- 25 files changed, 75 insertions(+), 62 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/Residence.java b/src/com/bekvon/bukkit/residence/Residence.java index 124495683..f5f04a596 100644 --- a/src/com/bekvon/bukkit/residence/Residence.java +++ b/src/com/bekvon/bukkit/residence/Residence.java @@ -351,7 +351,7 @@ public ResidenceApi getAPI() { if (!initsuccess) return; - CMIScheduler.runTaskAsynchronously(() -> { + CMIScheduler.runTaskAsynchronously(this, () -> { try { saveYml(); } catch (Throwable e) { @@ -628,7 +628,7 @@ public void onEnable() { } Bukkit.getConsoleSender().sendMessage(getPrefix() + " Player data loaded: " + OfflinePlayerList.size()); } else { - CMIScheduler.runTaskAsynchronously(() -> { + CMIScheduler.runTaskAsynchronously(this, () -> { for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { if (player == null) continue; @@ -800,17 +800,17 @@ public void onEnable() { autosaveInt = 1; } autosaveInt = autosaveInt * 60 * 20; - autosaveBukkitId = CMIScheduler.scheduleSyncRepeatingTask(autoSave, autosaveInt, autosaveInt); + autosaveBukkitId = CMIScheduler.scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt); if (getConfigManager().getHealInterval() > 0) - healBukkitId = CMIScheduler.scheduleSyncRepeatingTask(doHeals, 20, getConfigManager().getHealInterval() * 20); + healBukkitId = CMIScheduler.scheduleSyncRepeatingTask(this, doHeals, 20, getConfigManager().getHealInterval() * 20); if (getConfigManager().getFeedInterval() > 0) - feedBukkitId = CMIScheduler.scheduleSyncRepeatingTask(doFeed, 20, getConfigManager().getFeedInterval() * 20); + feedBukkitId = CMIScheduler.scheduleSyncRepeatingTask(this, doFeed, 20, getConfigManager().getFeedInterval() * 20); if (getConfigManager().getSafeZoneInterval() > 0) - effectRemoveBukkitId = CMIScheduler.scheduleSyncRepeatingTask(removeBadEffects, 20, getConfigManager().getSafeZoneInterval() * 20); + effectRemoveBukkitId = CMIScheduler.scheduleSyncRepeatingTask(this, removeBadEffects, 20, getConfigManager().getSafeZoneInterval() * 20); if (getConfigManager().AutoMobRemoval()) - DespawnMobsBukkitId = CMIScheduler.scheduleSyncRepeatingTask(DespawnMobs, 20 * getConfigManager().AutoMobRemovalInterval(), 20 + DespawnMobsBukkitId = CMIScheduler.scheduleSyncRepeatingTask(this, DespawnMobs, 20 * getConfigManager().AutoMobRemovalInterval(), 20 * getConfigManager().AutoMobRemovalInterval()); if (getConfigManager().useLeases()) { @@ -819,7 +819,7 @@ public void onEnable() { leaseInterval = 1; } leaseInterval = leaseInterval * 60 * 20; - leaseBukkitId = CMIScheduler.scheduleSyncRepeatingTask(leaseExpire, leaseInterval, leaseInterval); + leaseBukkitId = CMIScheduler.scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval); } if (getConfigManager().enabledRentSystem()) { int rentint = getConfigManager().getRentCheckInterval(); @@ -827,7 +827,7 @@ public void onEnable() { rentint = 1; } rentint = rentint * 60 * 20; - rentBukkitId = CMIScheduler.scheduleSyncRepeatingTask(rentExpire, rentint, rentint); + rentBukkitId = CMIScheduler.scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint); } for (Player player : Bukkit.getServer().getOnlinePlayers()) { if (getPermissionManager().isResidenceAdmin(player)) { diff --git a/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsManager.java b/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsManager.java index 9cc79bac2..f179290cf 100644 --- a/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsManager.java +++ b/src/com/bekvon/bukkit/residence/bigDoors/BigDoorsManager.java @@ -18,7 +18,7 @@ public class BigDoorsManager { private static CMITask task = null; public static void register(Residence residence) { - task = CMIScheduler.scheduleSyncRepeatingTask(() -> { + task = CMIScheduler.scheduleSyncRepeatingTask(Residence.getInstance(), () -> { ++times; if (times >= TRIES) { residence.consoleMessage("&cFailed to initialize BigDoors support"); diff --git a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java index a154dae73..69ade662d 100644 --- a/src/com/bekvon/bukkit/residence/chat/ChatChannel.java +++ b/src/com/bekvon/bukkit/residence/chat/ChatChannel.java @@ -43,7 +43,7 @@ public void setChannelColor(CMIChatColor ChannelColor) { } public void chat(String sourcePlayer, String message) { - CMIScheduler.runTask(() -> { + CMIScheduler.runTask(Residence.getInstance(), () -> { Server serv = Residence.getInstance().getServ(); ResidenceChatEvent cevent = new ResidenceChatEvent(Residence.getInstance().getResidenceManager().getByName(channelName), serv.getPlayer(sourcePlayer), this.ChatPrefix, message, this.ChannelColor); diff --git a/src/com/bekvon/bukkit/residence/commands/compass.java b/src/com/bekvon/bukkit/residence/commands/compass.java index c3bb5a92d..64eabe7a1 100644 --- a/src/com/bekvon/bukkit/residence/commands/compass.java +++ b/src/com/bekvon/bukkit/residence/commands/compass.java @@ -51,7 +51,7 @@ public Boolean perform(Residence plugin, CommandSender sender, String[] args, bo return false; future.thenAccept(loc1 -> { - CMIScheduler.runAtEntity(player, () -> player.setCompassTarget(loc1)); + CMIScheduler.runAtEntity(Residence.getInstance(), player, () -> player.setCompassTarget(loc1)); plugin.msg(player, lm.General_CompassTargetSet, args[0]); }); diff --git a/src/com/bekvon/bukkit/residence/commands/rt.java b/src/com/bekvon/bukkit/residence/commands/rt.java index 828cdf05c..cc6114a2d 100644 --- a/src/com/bekvon/bukkit/residence/commands/rt.java +++ b/src/com/bekvon/bukkit/residence/commands/rt.java @@ -127,7 +127,7 @@ private static boolean teleport(CommandSender sender, Player player, Location lc return true; } - CMIScheduler.runAtLocationLater(lc, () -> { + CMIScheduler.runAtLocationLater(Residence.getInstance(), lc, () -> { if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !resadmin && !ResPerm.randomtp_delaybypass.hasPermission(sender, false)) { Residence.getInstance().msg(player, lm.RandomTeleport_TeleportStarted, lc.getX(), lc.getY(), lc.getZ(), Residence.getInstance().getConfigManager().getTeleportDelay()); Residence.getInstance().getTeleportDelayMap().add(player.getName()); diff --git a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java index 0587ec923..ca2e36192 100644 --- a/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java +++ b/src/com/bekvon/bukkit/residence/dynmap/DynMapManager.java @@ -54,7 +54,7 @@ public void fireUpdateAdd(final ClaimedResidence res, final int deep) { scheduler.cancel(); } - scheduler = CMIScheduler.runTaskLater(() -> handleResidenceAdd(res.getName(), res, deep), 10L); + scheduler = CMIScheduler.runTaskLater(plugin, () -> handleResidenceAdd(res.getName(), res, deep), 10L); } public void fireUpdateRemove(final ClaimedResidence res, final int deep) { diff --git a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java index 6e3ba7c3f..231c0c2a9 100644 --- a/src/com/bekvon/bukkit/residence/gui/FlagUtil.java +++ b/src/com/bekvon/bukkit/residence/gui/FlagUtil.java @@ -52,7 +52,7 @@ public void load() { CMIAsyncHead ahead = new CMIAsyncHead() { @Override public void afterAsyncUpdate(ItemStack item) { - CMIScheduler.runTask(() -> flagData.addFlagButton(oneFlag.toLowerCase(), item)); + CMIScheduler.runTask(plugin, () -> flagData.addFlagButton(oneFlag.toLowerCase(), item)); } }; diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java index 0c6670926..f0f86dca5 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceBlockListener.java @@ -15,11 +15,13 @@ import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Powerable; import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Snowman; +import org.bukkit.entity.Trident; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -134,13 +136,23 @@ public void onButtonHitWithProjectile(ProjectileHitEvent e) { return; break; } - e.setCancelled(true); plugin.msg(player, lm.Flag_Deny, result); if (e.getEntity() instanceof Arrow) e.getEntity().remove(); + if (Version.isCurrentHigher(Version.v1_13_R1) && e.getEntity() instanceof Trident && !block.getType().toString().contains("STONE") && block + .getBlockData() instanceof org.bukkit.block.data.Powerable) { + org.bukkit.block.data.Powerable powerable = (org.bukkit.block.data.Powerable) block.getBlockData(); + if (!powerable.isPowered()) { + CMIScheduler.runAtLocation(plugin, block.getLocation(), () -> { + powerable.setPowered(false); + block.setBlockData(powerable, true); + }); + } + } + return; } diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java index fb5a326ca..e2a37e55e 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidenceLWCListener.java @@ -52,7 +52,7 @@ public static void removeLwcFromResidence(final Player player, final ClaimedResi if (Version.isCurrentLower(Version.v1_13_R1)) return; - CMIScheduler.runTaskAsynchronously(() -> { + CMIScheduler.runTaskAsynchronously(Residence.getInstance(), () -> { long time = System.currentTimeMillis(); com.griefcraft.lwc.LWC lwc = com.griefcraft.lwc.LWC.getInstance(); if (lwc == null) diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java index 88d40e9ae..665aef561 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener.java @@ -146,7 +146,7 @@ public ResidencePlayerListener(Residence plugin) { } this.plugin = plugin; - CMIScheduler.scheduleSyncRepeatingTask(locationChangeCheck, 20L, 15 * 20L); + CMIScheduler.scheduleSyncRepeatingTask(plugin, locationChangeCheck, 20L, 15 * 20L); } public void reload() { @@ -355,7 +355,7 @@ public void onPlayerLogin(PlayerLoginEvent event) { if (!plugin.getConfigManager().isRentInformOnEnding()) return; final Player player = event.getPlayer(); - CMIScheduler.runTaskLater(() -> { + CMIScheduler.runTaskLater(plugin, () -> { if (!player.isOnline()) return; List list = plugin.getRentManager().getRentedLandsList(player.getName()); @@ -840,7 +840,7 @@ public void onSignCreate(SignChangeEvent event) { plugin.getSignUtil().getSigns().addSign(signInfo); plugin.getSignUtil().saveSigns(); - CMIScheduler.runTaskLater(() -> plugin.getSignUtil().CheckSign(residence), 5L); + CMIScheduler.runTaskLater(plugin, () -> plugin.getSignUtil().CheckSign(residence), 5L); } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @@ -1590,6 +1590,7 @@ private static boolean canRide(Entity entity) { case DONKEY: case PIG: case LLAMA: + case TRADER_LLAMA: case STRIDER: case SKELETON_HORSE: return true; @@ -2049,7 +2050,7 @@ public void onPlayerDeath(final PlayerDeathEvent event) { } if (res.getPermissions().has(Flags.respawn, false) && Version.isSpigot()) - CMIScheduler.runTaskLater(() -> { + CMIScheduler.runTaskLater(plugin, () -> { try { event.getEntity().spigot().respawn(); } catch (Throwable e) { @@ -2108,7 +2109,7 @@ private void fly(Player player, boolean state) { player.setAllowFlight(false); } else { player.setAllowFlight(true); - CMIScheduler.runAtEntityLater(player, () -> { + CMIScheduler.runAtEntityLater(plugin, player, () -> { ClaimedResidence res = plugin.getResidenceManager().getByLoc(player.getLocation()); if (res != null && res.getPermissions().playerHas(player, Flags.fly, FlagCombo.OnlyTrue) && player.isOnline()) { player.setAllowFlight(true); @@ -2441,7 +2442,7 @@ public boolean handleNewLocation(final Player player, Location loc, boolean move } if (!plugin.getAutoSelectionManager().getList().isEmpty()) { - CMIScheduler.runTaskAsynchronously(() -> plugin.getAutoSelectionManager().UpdateSelection(player)); + CMIScheduler.runTaskAsynchronously(plugin, () -> plugin.getAutoSelectionManager().UpdateSelection(player)); } if (res == null) { diff --git a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java index dba7ab270..3614de916 100644 --- a/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java +++ b/src/com/bekvon/bukkit/residence/listeners/ResidencePlayerListener1_9.java @@ -51,7 +51,7 @@ public void EntityToggleGlideEvent(EntityToggleGlideEvent event) { plugin.msg(player, lm.Flag_Deny, Flags.elytra); event.setCancelled(true); - CMIScheduler.runAtEntityLater(player, () -> player.setGliding(false), 2L); + CMIScheduler.runAtEntityLater(plugin, player, () -> player.setGliding(false), 2L); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) diff --git a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java index 493cd8a41..f6a88c16a 100644 --- a/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java +++ b/src/com/bekvon/bukkit/residence/permissions/PermissionManager.java @@ -66,7 +66,7 @@ public PermissionManager(Residence plugin) { } public void startCacheClearScheduler() { - autoCacheClear = CMIScheduler.scheduleSyncRepeatingTask(cacheClear, cacheClearDelay * 20L, cacheClearDelay * 20L); + autoCacheClear = CMIScheduler.scheduleSyncRepeatingTask(plugin, cacheClear, cacheClearDelay * 20L, cacheClearDelay * 20L); } public void stopCacheClearScheduler() { diff --git a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java index 4f34ecebf..395b8b994 100644 --- a/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java +++ b/src/com/bekvon/bukkit/residence/pl3xmap/Pl3xMapManager.java @@ -56,7 +56,7 @@ public void fireUpdateAdd(final ClaimedResidence res, final int deep) { if (scheduler != null) scheduler.cancel(); - scheduler = CMIScheduler.runTaskLater(() -> handleResidenceAdd(res.getName(), res, deep), 10L); + scheduler = CMIScheduler.runTaskLater(plugin, () -> handleResidenceAdd(res.getName(), res, deep), 10L); } public void fireUpdateRemove(final ClaimedResidence res, final int deep) { diff --git a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java index c8ac9258e..791f32283 100644 --- a/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java +++ b/src/com/bekvon/bukkit/residence/protection/ClaimedResidence.java @@ -1314,7 +1314,7 @@ private void finalizeTP(Location loc, Player reqPlayer, Player targetPlayer, boo return; } - CMIScheduler.runTask(() -> { + CMIScheduler.runTask(Residence.getInstance(), () -> { if (Residence.getInstance().getConfigManager().getTeleportDelay() > 0 && !isAdmin && !bypassDelay) performDelaydTp(loc, targetPlayer, reqPlayer, true); else @@ -1325,7 +1325,7 @@ private void finalizeTP(Location loc, Player reqPlayer, Player targetPlayer, boo public void TpTimer(final Player player, final int t) { CMITitleMessage.send(player, Residence.getInstance().msg(lm.General_TeleportTitle), Residence.getInstance().msg(lm.General_TeleportTitleTime, t)); - CMIScheduler.runTaskLater(() -> { + CMIScheduler.runTaskLater(Residence.getInstance(), () -> { if (!Residence.getInstance().getTeleportDelayMap().contains(player.getName())) return; if (t > 1) @@ -1340,7 +1340,7 @@ public void performDelaydTp(final Location targloc, final Player targetPlayer, P if (tpevent.isCancelled()) return; - CMIScheduler.runAtLocationLater(targloc, () -> { + CMIScheduler.runAtLocationLater(Residence.getInstance(), targloc, () -> { if (targloc == null || targetPlayer == null || !targetPlayer.isOnline()) return; @@ -2084,8 +2084,8 @@ public boolean kickFromResidence(Player player) { LC.info_IncorrectLocation.getLocale(); return; } - - loc1.add(0, 0.4, 0); + + loc1.add(0, 0.4, 0); CMITeleporter.teleportAsync(player, loc1).thenApply(success -> { if (success) diff --git a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java index 25bcf6a8a..690e83203 100644 --- a/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java +++ b/src/com/bekvon/bukkit/residence/protection/ResidenceManager.java @@ -282,11 +282,11 @@ public boolean addResidence(Player player, String owner, UUID ownerUUId, String if (!newRes.addArea(player, newArea, "main", resadmin, false)) return false; - + if (player != null && newArea.containsLoc(player.getLocation())) { newRes.setTpLoc(player, resadmin); } - + if (Residence.getInstance().getConfigManager().isChargeOnCreation() && !newRes.isSubzone() && plugin.getConfigManager().enableEconomy() && !resadmin) { double chargeamount = newArea.getCost(group); @@ -657,7 +657,7 @@ private void regenerateArea(ClaimedResidence res) { return; CuboidArea[] arr = res.getAreaArray(); - CMIScheduler.runTaskAsynchronously(() -> { + CMIScheduler.runTaskAsynchronously(plugin, () -> { ChunkSnapshot chunkSnapshot = null; int chunkX = 0; int chunkZ = 0; @@ -703,11 +703,9 @@ private void regenerateArea(ClaimedResidence res) { } } } - CMIScheduler.runTask(() -> { - for (Location one : locations) { - CMIScheduler.runAtLocation(one, () -> one.getBlock().setType(Material.AIR)); - } - }); + for (Location one : locations) { + CMIScheduler.runAtLocation(one, () -> one.getBlock().setType(Material.AIR)); + } }); } diff --git a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java index 3d33dcaac..3859b6746 100644 --- a/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java +++ b/src/com/bekvon/bukkit/residence/raid/ResidenceRaid.java @@ -348,13 +348,13 @@ public boolean startRaid() { return false; ResidenceRaidStartEvent start = new ResidenceRaidStartEvent(res, getAttackers()); - this.shedRaidStartId = CMIScheduler.runTaskLater(() -> { + this.shedRaidStartId = CMIScheduler.runTaskLater(Residence.getInstance(), () -> { Bukkit.getPluginManager().callEvent(start); if (start.isCancelled()) start.getRes().getRaid().endRaid(); }, ((getStartsAt() - System.currentTimeMillis()) / 50)); - schedBossBarId = CMIScheduler.scheduleSyncRepeatingTask(() -> { + schedBossBarId = CMIScheduler.scheduleSyncRepeatingTask(Residence.getInstance(), () -> { if (!isUnderRaid() && !isInPreRaid()) { schedBossBarId.cancel(); return; @@ -363,7 +363,7 @@ public boolean startRaid() { }, this.isUnderRaid() ? 20L : 0L, 20L); - this.schedRaidEndId = CMIScheduler.runTaskLater(() -> endRaid(), ((getEndsAt() - System.currentTimeMillis()) / 50)); + this.schedRaidEndId = CMIScheduler.runTaskLater(Residence.getInstance(), this::endRaid, ((getEndsAt() - System.currentTimeMillis()) / 50)); return true; } diff --git a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java index 5f57c4b6b..dd9cf5277 100644 --- a/src/com/bekvon/bukkit/residence/selection/SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/SelectionManager.java @@ -531,7 +531,7 @@ public void showBounds(final Player player, final Visualizer v) { if (tv != null) { tv.cancelAll(); } - CMIScheduler.runTask(() -> { + CMIScheduler.runTask(Residence.getInstance(), () -> { ResidenceSelectionVisualizationEvent ev = new ResidenceSelectionVisualizationEvent(player, v.getAreas(), v.getErrorAreas()); Bukkit.getPluginManager().callEvent(ev); @@ -542,7 +542,7 @@ public void showBounds(final Player player, final Visualizer v) { vMap.put(player.getUniqueId(), v); if (!plugin.isEnabled()) return; - v.setBaseSheduler(CMIScheduler.runTaskAsynchronously(() -> { + v.setBaseSheduler(CMIScheduler.runTaskAsynchronously(Residence.getInstance(), () -> { if (!v.getAreas().isEmpty()) MakeBorders(player, false); if (!v.getErrorAreas().isEmpty()) @@ -778,7 +778,7 @@ public boolean MakeBorders(final Player player, final boolean error) { if (!plugin.isEnabled()) return false; - CMIScheduler.runTaskAsynchronously(() -> { + CMIScheduler.runTaskAsynchronously(Residence.getInstance(), () -> { int size = locList.size(); int errorSize = errorLocList.size(); @@ -821,7 +821,7 @@ public boolean MakeBorders(final Player player, final boolean error) { if (v.getStart() + plugin.getConfigManager().getVisualizerShowFor() < System.currentTimeMillis()) return false; - CMITask scid = CMIScheduler.runTaskLater(() -> { + CMITask scid = CMIScheduler.runTaskLater(Residence.getInstance(), () -> { if (player.isOnline()) { MakeBorders(player, error); } diff --git a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java index 0d6f0e727..5c8f9416a 100644 --- a/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java +++ b/src/com/bekvon/bukkit/residence/selection/WorldEdit7SelectionManager.java @@ -142,7 +142,7 @@ public void regenerate(CuboidArea area) { queue.add(area); if (task == null) - task = CMIScheduler.runTaskLater(this::nextInQueue, 1); + task = CMIScheduler.runTaskLater(plugin, this::nextInQueue, 1); } private void nextInQueue() { @@ -177,6 +177,6 @@ private void nextInQueue() { session.close(); } - task = CMIScheduler.runTaskLater(this::nextInQueue, 20); + task = CMIScheduler.runTaskLater(plugin, this::nextInQueue, 20); } } diff --git a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java index f35466ae0..f3adbefec 100644 --- a/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java +++ b/src/com/bekvon/bukkit/residence/shopStuff/ShopSignUtil.java @@ -330,7 +330,7 @@ public void saveSigns() { } public boolean boardUpdateDelayed() { - CMIScheduler.runTaskLater(() -> boardUpdate(), 20L); + CMIScheduler.runTaskLater(plugin, () -> boardUpdate(), 20L); return true; } diff --git a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java index 3ab6c75f2..a91347a12 100644 --- a/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java +++ b/src/com/bekvon/bukkit/residence/signsStuff/SignUtil.java @@ -137,7 +137,7 @@ public Signs getSignFromLoc(Location loc) { } public void CheckSign(final ClaimedResidence res, int time) { - CMIScheduler.runTaskLater(() -> CheckSign(res), time * 1L); + CMIScheduler.runTaskLater(plugin, () -> CheckSign(res), time * 1L); } public void CheckSign(ClaimedResidence res) { @@ -191,7 +191,7 @@ public boolean SignUpdate(Signs Sign) { return false; } - CMIScheduler.runAtLocation(nloc, () -> { + CMIScheduler.runAtLocation(plugin, nloc, () -> { Block block = nloc.getBlock(); if (!CMIMaterial.isSign(block.getType())) { diff --git a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java index ff8cdb988..dddc613ee 100644 --- a/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java +++ b/src/com/bekvon/bukkit/residence/slimeFun/SlimefunManager.java @@ -23,7 +23,7 @@ public class SlimefunManager { private static CMITask task = null; public static void register(Residence residence) { - task = CMIScheduler.scheduleSyncRepeatingTask(() -> { + task = CMIScheduler.scheduleSyncRepeatingTask(Residence.getInstance(), () -> { ++times; if (times >= TRIES) { residence.consoleMessage("&cFailed to initialize SlimeFun support"); diff --git a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java index e0fce88ba..2adc7ea33 100644 --- a/src/com/bekvon/bukkit/residence/text/help/InformationPager.java +++ b/src/com/bekvon/bukkit/residence/text/help/InformationPager.java @@ -232,14 +232,14 @@ private void printListWithDelay(final CommandSender sender, final TreeMap printListWithDelay(sender, ownedResidences, start + 100, resadmin), 5L); + CMIScheduler.runTaskLater(plugin, () -> printListWithDelay(sender, ownedResidences, start + 100, resadmin), 5L); } private void printListToFile(final TreeMap ownedResidences, final boolean resadmin) { Bukkit.getConsoleSender().sendMessage("Saving"); - CMIScheduler.runTaskAsynchronously(() -> { + CMIScheduler.runTaskAsynchronously(plugin, () -> { int y = 0; final StringBuilder sb = new StringBuilder(); for (Entry resT : ownedResidences.entrySet()) { diff --git a/src/com/bekvon/bukkit/residence/utils/LocationUtil.java b/src/com/bekvon/bukkit/residence/utils/LocationUtil.java index 1d9d411af..3fa23a554 100644 --- a/src/com/bekvon/bukkit/residence/utils/LocationUtil.java +++ b/src/com/bekvon/bukkit/residence/utils/LocationUtil.java @@ -214,7 +214,7 @@ private static Location getOutsideFreeLoc(ClaimedResidence res, Location insideL LocationCheck permissionCheck = new LocationCheck(); - CMIScheduler.runTask(() -> { + CMIScheduler.runTask(Residence.getInstance(), () -> { ClaimedResidence tres = Residence.getInstance().getResidenceManager().getByLoc(loc); if (tres != null && player != null && (!tres.getPermissions().playerHas(player, Flags.tp, FlagCombo.TrueOrNone) || !tres.getPermissions().playerHas(player, Flags.move, FlagCombo.TrueOrNone)) && !admin) { @@ -423,7 +423,7 @@ public static CompletableFuture getSnapshot(World world, int c CMIChunkSnapShot cmiChunkSnapshot = new CMIChunkSnapShot(world); try { - CompletableFuture t = CMIScheduler.runAtLocation(new Location(world, chunkX * 16, 0, chunkZ * 16), () -> cmiChunkSnapshot.setSnapshot(world.getChunkAt(chunkX, chunkZ) + CompletableFuture t = CMIScheduler.runAtLocation(Residence.getInstance(), new Location(world, chunkX * 16, 0, chunkZ * 16), () -> cmiChunkSnapshot.setSnapshot(world.getChunkAt(chunkX, chunkZ) .getChunkSnapshot(true, biomeData, false))); if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) @@ -457,7 +457,7 @@ public static CompletableFuture getSnapshot(World world, int c return cmiChunkSnapshot; try { - CompletableFuture t = CMIScheduler.runAtLocation(new Location(world, chunkX * 16, 0, chunkZ * 16), () -> cmiChunkSnapshot.setSnapshot(chunk.getChunkSnapshot(true, biomeData, false))); + CompletableFuture t = CMIScheduler.runAtLocation(Residence.getInstance(), new Location(world, chunkX * 16, 0, chunkZ * 16), () -> cmiChunkSnapshot.setSnapshot(chunk.getChunkSnapshot(true, biomeData, false))); if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) t = t.orTimeout(10, TimeUnit.SECONDS); diff --git a/src/com/bekvon/bukkit/residence/utils/RandomTp.java b/src/com/bekvon/bukkit/residence/utils/RandomTp.java index 32d7cb466..389774ae0 100644 --- a/src/com/bekvon/bukkit/residence/utils/RandomTp.java +++ b/src/com/bekvon/bukkit/residence/utils/RandomTp.java @@ -235,7 +235,7 @@ private Location get(World world) { Location location = loc; - CompletableFuture fut = CMIScheduler.runAtLocation(loc, () -> { + CompletableFuture fut = CMIScheduler.runAtLocation(plugin, loc, () -> { Chunk chunk = location.getChunk(); int y = chunk.getChunkSnapshot().getHighestBlockYAt(location.getBlockX() & 0xF, location.getBlockZ() & 0xF) - 1; location.setY(y); @@ -269,7 +269,7 @@ private Location get(World world) { if (Version.isFolia()) { Location location = loc; - CompletableFuture fut = CMIScheduler.runAtLocation(loc, () -> { + CompletableFuture fut = CMIScheduler.runAtLocation(plugin, loc, () -> { empty.valid = ResidencePlayerListener.isEmptyBlock(location.getBlock()); if (!empty.valid) @@ -331,7 +331,7 @@ private static Location getDownLocationSimple(Location oloc) { Location location = loc.clone(); - CompletableFuture fut = CMIScheduler.runAtLocation(loc, () -> { + CompletableFuture fut = CMIScheduler.runAtLocation(Residence.getInstance(), loc, () -> { Chunk chunk = location.getChunk(); int y = chunk.getChunkSnapshot().getHighestBlockYAt(location.getBlockX() & 0xF, location.getBlockZ() & 0xF) - 1; location.setY(y + 1); @@ -376,7 +376,7 @@ private static Location getDownLocationSimple(Location oloc) { } public void performDelaydTp(final Location loc, final Player targetPlayer) { - CMIScheduler.runAtLocationLater(loc, () -> { + CMIScheduler.runAtLocationLater(plugin, loc, () -> { if (!plugin.getTeleportDelayMap().contains(targetPlayer.getName()) && plugin.getConfigManager().getTeleportDelay() > 0) return; else if (plugin.getTeleportDelayMap().contains(targetPlayer.getName())) diff --git a/src/com/residence/mcstats/Metrics.java b/src/com/residence/mcstats/Metrics.java index 677f5cd96..2021d9084 100644 --- a/src/com/residence/mcstats/Metrics.java +++ b/src/com/residence/mcstats/Metrics.java @@ -35,6 +35,8 @@ import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.scheduler.BukkitTask; +import com.bekvon.bukkit.residence.Residence; + import net.Zrips.CMILib.Version.Schedulers.CMIScheduler; import net.Zrips.CMILib.Version.Schedulers.CMITask; @@ -224,7 +226,7 @@ public boolean start() { } // Begin hitting the server with glorious data - task = CMIScheduler.runTimerAsync(() -> { + task = CMIScheduler.runTimerAsync(Residence.getInstance(), () -> { // This has to be synchronized or it can collide with the disable method. synchronized (optOutLock) { // Disable Task, if it is running and the server owner decided to opt-out From 223e57048eb216e64cf76f7aaddd1f554eb32fe4 Mon Sep 17 00:00:00 2001 From: Zrips Date: Fri, 27 Sep 2024 15:35:38 +0300 Subject: [PATCH 1142/1142] Recognizing numeric names in list command --- .../bukkit/residence/commands/list.java | 84 +++++++++++-------- 1 file changed, 48 insertions(+), 36 deletions(-) diff --git a/src/com/bekvon/bukkit/residence/commands/list.java b/src/com/bekvon/bukkit/residence/commands/list.java index ac31cc34d..1ce811974 100644 --- a/src/com/bekvon/bukkit/residence/commands/list.java +++ b/src/com/bekvon/bukkit/residence/commands/list.java @@ -2,16 +2,17 @@ import java.util.Arrays; -import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.CommandSender; import com.bekvon.bukkit.residence.LocaleManager; import com.bekvon.bukkit.residence.Residence; import com.bekvon.bukkit.residence.containers.CommandAnnotation; +import com.bekvon.bukkit.residence.containers.ResidencePlayer; import com.bekvon.bukkit.residence.containers.cmd; import com.bekvon.bukkit.residence.permissions.PermissionManager.ResPerm; +import net.Zrips.CMILib.Container.CMIWorld; import net.Zrips.CMILib.FileHandler.ConfigReader; public class list implements cmd { @@ -19,44 +20,55 @@ public class list implements cmd { @Override @CommandAnnotation(simple = true, priority = 300) public Boolean perform(Residence plugin, CommandSender sender, String[] args, boolean resadmin) { - int page = 1; - World world = null; - String target = null; - - c: for (int i = 0; i < args.length; i++) { - try { - page = Integer.parseInt(args[i]); - if (page < 1) - page = 1; - continue; - } catch (Exception ex) { - } - - for (World w : Bukkit.getWorlds()) { - if (w.getName().equalsIgnoreCase(args[i])) { - world = w; - continue c; - } - } - target = args[i]; - } - - if (target != null && !sender.getName().equalsIgnoreCase(target) && !ResPerm.command_$1_others.hasPermission(sender, this.getClass().getSimpleName())) - return true; - - plugin.getResidenceManager().listResidences(sender, target, page, false, false, resadmin, world); - - return true; + int page = 1; + World world = null; + String target = null; + + for (int i = 0; i < args.length; i++) { + + if (target == null) { + ResidencePlayer resP = ResidencePlayer.get(args[i]); + if (resP != null) { + target = resP.getName(); + continue; + } + } + + try { + page = Integer.parseInt(args[i]); + if (page < 1) + page = 1; + continue; + } catch (Exception ex) { + } + + if (world == null) { + World tempW = CMIWorld.getWorld(args[i]); + if (tempW.getName().equalsIgnoreCase(args[i])) { + world = tempW; + continue; + } + } + + target = args[i]; + } + + if (target != null && !sender.getName().equalsIgnoreCase(target) && !ResPerm.command_$1_others.hasPermission(sender, this.getClass().getSimpleName())) + return true; + + plugin.getResidenceManager().listResidences(sender, target, page, false, false, resadmin, world); + + return true; } @Override public void getLocale() { - ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); - c.get("Description", "List Residences"); - c.get("Info", Arrays.asList("&eUsage: &6/res list ", - "Lists all the residences a player owns (except hidden ones).", - "If listing your own residences, shows hidden ones as well.", - "To list everyones residences, use /res listall.")); - LocaleManager.addTabCompleteMain(this, "[playername]", "[worldname]"); + ConfigReader c = Residence.getInstance().getLocaleManager().getLocaleConfig(); + c.get("Description", "List Residences"); + c.get("Info", Arrays.asList("&eUsage: &6/res list ", + "Lists all the residences a player owns (except hidden ones).", + "If listing your own residences, shows hidden ones as well.", + "To list everyones residences, use /res listall.")); + LocaleManager.addTabCompleteMain(this, "[playername]", "[worldname]"); } }